mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-07 16:41:06 +08:00
feat(queue): implement queue scheduler service and API routes
- Added QueueSchedulerService to manage task queue lifecycle, including state machine, dependency resolution, and session management. - Implemented HTTP API endpoints for queue scheduling: - POST /api/queue/execute: Submit items to the scheduler. - GET /api/queue/scheduler/state: Retrieve full scheduler state. - POST /api/queue/scheduler/start: Start scheduling loop with items. - POST /api/queue/scheduler/pause: Pause scheduling. - POST /api/queue/scheduler/stop: Graceful stop of the scheduler. - POST /api/queue/scheduler/config: Update scheduler configuration. - Introduced types for queue items, scheduler state, and WebSocket messages to ensure type safety and compatibility with the backend. - Added static model lists for LiteLLM as a fallback for available models.
This commit is contained in:
@@ -22,6 +22,7 @@ import {
|
||||
Minimize2,
|
||||
Activity,
|
||||
Plus,
|
||||
Gauge,
|
||||
} from 'lucide-react';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { Badge } from '@/components/ui/Badge';
|
||||
@@ -36,11 +37,12 @@ import { toast } from '@/stores/notificationStore';
|
||||
import { useExecutionMonitorStore, selectActiveExecutionCount } from '@/stores/executionMonitorStore';
|
||||
import { useSessionManagerStore } from '@/stores/sessionManagerStore';
|
||||
import { useConfigStore } from '@/stores/configStore';
|
||||
import { useQueueSchedulerStore, selectQueueSchedulerStatus } from '@/stores/queueSchedulerStore';
|
||||
import { CliConfigModal, type CliSessionConfig } from './CliConfigModal';
|
||||
|
||||
// ========== Types ==========
|
||||
|
||||
export type PanelId = 'issues' | 'queue' | 'inspector' | 'execution';
|
||||
export type PanelId = 'issues' | 'queue' | 'inspector' | 'execution' | 'scheduler';
|
||||
|
||||
interface DashboardToolbarProps {
|
||||
activePanel: PanelId | null;
|
||||
@@ -95,6 +97,10 @@ export function DashboardToolbar({ activePanel, onTogglePanel, isFileSidebarOpen
|
||||
// Execution monitor count
|
||||
const executionCount = useExecutionMonitorStore(selectActiveExecutionCount);
|
||||
|
||||
// Scheduler status for badge indicator
|
||||
const schedulerStatus = useQueueSchedulerStore(selectQueueSchedulerStatus);
|
||||
const isSchedulerActive = schedulerStatus !== 'idle';
|
||||
|
||||
// Feature flags for panel visibility
|
||||
const featureFlags = useConfigStore((s) => s.featureFlags);
|
||||
const showQueue = featureFlags.dashboardQueuePanelEnabled;
|
||||
@@ -244,6 +250,13 @@ export function DashboardToolbar({ activePanel, onTogglePanel, isFileSidebarOpen
|
||||
badge={executionCount > 0 ? executionCount : undefined}
|
||||
/>
|
||||
)}
|
||||
<ToolbarButton
|
||||
icon={Gauge}
|
||||
label={formatMessage({ id: 'terminalDashboard.toolbar.scheduler', defaultMessage: 'Scheduler' })}
|
||||
isActive={activePanel === 'scheduler'}
|
||||
onClick={() => onTogglePanel('scheduler')}
|
||||
dot={isSchedulerActive}
|
||||
/>
|
||||
<ToolbarButton
|
||||
icon={FolderOpen}
|
||||
label={formatMessage({ id: 'terminalDashboard.toolbar.files', defaultMessage: 'Files' })}
|
||||
|
||||
Reference in New Issue
Block a user