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:
catlog22
2026-02-27 20:53:46 +08:00
parent 5b54f38aa3
commit 75173312c1
47 changed files with 3813 additions and 307 deletions

View File

@@ -3,7 +3,8 @@
"description": "View and manage your CLI execution history",
"tabs": {
"executions": "Executions",
"observability": "Session Audit"
"observability": "Session Audit",
"nativeSessions": "Native Sessions"
},
"searchPlaceholder": "Search executions...",
"filterAllTools": "All Tools",
@@ -33,5 +34,13 @@
"message": "CLI execution history will appear here when you run CLI commands.",
"filtered": "No Matching Results",
"filteredMessage": "No executions match your current filter. Try adjusting your search or filter."
},
"nativeSessions": {
"count": "{count} native sessions",
"sessions": "sessions",
"empty": {
"title": "No Native Sessions",
"message": "Native CLI sessions from Gemini, Codex, Qwen, etc. will appear here."
}
}
}

View File

@@ -48,6 +48,11 @@
"issuePanel": {
"title": "Issues",
"sendToQueue": "Send to Queue",
"addToQueue": "Queue",
"addToQueueHint": "Add selected issues to the execution queue",
"addedToQueue": "Queued!",
"addToQueueFailed": "Failed to add to queue",
"queueModeHint": "Execution mode for queued items",
"noIssues": "No issues found",
"noIssuesDesc": "Issues will appear here when discovered",
"error": "Failed to load issues"
@@ -59,13 +64,35 @@
"error": "Failed to load queue",
"order": "#{order}",
"dependsOn": "Depends on: {deps}",
"blockedBy": "Blocked by: {deps}",
"status": {
"pending": "Pending",
"queued": "Queued",
"ready": "Ready",
"blocked": "Blocked",
"executing": "Executing",
"completed": "Completed",
"failed": "Failed",
"blocked": "Blocked"
"cancelled": "Cancelled",
"skipped": "Skipped"
},
"scheduler": {
"start": "Start",
"pause": "Pause",
"stop": "Stop",
"status": {
"idle": "Idle",
"running": "Running",
"paused": "Paused",
"stopping": "Stopping",
"completed": "Completed",
"failed": "Failed"
},
"progress": "{percent}%",
"concurrency": "Concurrency",
"concurrencyLabel": "Max",
"stopConfirmTitle": "Stop Queue?",
"stopConfirmMessage": "Executing tasks will finish, but no new tasks will be started. Pending items will remain in the queue."
}
},
"toolbar": {
@@ -81,7 +108,13 @@
"launchCli": "New Session",
"launchCliHint": "Click to configure and create a new CLI session",
"fullscreen": "Fullscreen",
"orchestrator": "Orchestrator"
"orchestrator": "Orchestrator",
"scheduler": "Scheduler",
"executionMonitor": "Execution Monitor"
},
"schedulerPanel": {
"sessionPool": "Session Pool",
"noSessions": "No active sessions"
},
"orchestratorPanel": {
"noPlans": "No active orchestrations",

View File

@@ -3,7 +3,8 @@
"description": "查看和管理 CLI 执行历史",
"tabs": {
"executions": "执行历史",
"observability": "会话审计"
"observability": "会话审计",
"nativeSessions": "原生会话"
},
"searchPlaceholder": "搜索执行记录...",
"filterAllTools": "全部工具",
@@ -33,5 +34,13 @@
"message": "运行 CLI 命令后,执行历史将显示在这里。",
"filtered": "没有匹配结果",
"filteredMessage": "没有匹配当前筛选条件的执行记录。请尝试调整搜索或筛选条件。"
},
"nativeSessions": {
"count": "{count} 个原生会话",
"sessions": "个会话",
"empty": {
"title": "无原生会话",
"message": "来自 Gemini、Codex、Qwen 等的原生 CLI 会话将显示在这里。"
}
}
}

View File

@@ -48,6 +48,11 @@
"issuePanel": {
"title": "问题",
"sendToQueue": "发送到队列",
"addToQueue": "入队",
"addToQueueHint": "将选中的问题添加到执行队列",
"addedToQueue": "已入队!",
"addToQueueFailed": "添加到队列失败",
"queueModeHint": "队列项的执行模式",
"noIssues": "暂无问题",
"noIssuesDesc": "发现问题时将在此显示",
"error": "加载问题失败"
@@ -59,13 +64,35 @@
"error": "加载队列失败",
"order": "#{order}",
"dependsOn": "依赖: {deps}",
"blockedBy": "阻塞于: {deps}",
"status": {
"pending": "等待中",
"queued": "排队中",
"ready": "就绪",
"blocked": "已阻塞",
"executing": "执行中",
"completed": "已完成",
"failed": "已失败",
"blocked": "已阻塞"
"cancelled": "已取消",
"skipped": "已跳过"
},
"scheduler": {
"start": "启动",
"pause": "暂停",
"stop": "停止",
"status": {
"idle": "空闲",
"running": "运行中",
"paused": "已暂停",
"stopping": "停止中",
"completed": "已完成",
"failed": "已失败"
},
"progress": "{percent}%",
"concurrency": "并发数",
"concurrencyLabel": "上限",
"stopConfirmTitle": "停止队列?",
"stopConfirmMessage": "执行中的任务将继续完成,但不会启动新任务。待处理项将保留在队列中。"
}
},
"toolbar": {
@@ -81,7 +108,13 @@
"launchCli": "新建会话",
"launchCliHint": "点击配置并创建新的 CLI 会话",
"fullscreen": "全屏",
"orchestrator": "编排器"
"orchestrator": "编排器",
"scheduler": "调度器",
"executionMonitor": "执行监控"
},
"schedulerPanel": {
"sessionPool": "会话池",
"noSessions": "无活跃会话"
},
"orchestratorPanel": {
"noPlans": "没有活跃的编排任务",