claude-code-workflow 6.3.34 → 6.3.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/cli-execution-agent.md +61 -0
- package/.claude/agents/cli-lite-planning-agent.md +322 -36
- package/.claude/agents/issue-plan-agent.md +95 -11
- package/.claude/commands/cli/codex-review.md +8 -2
- package/.claude/commands/issue/plan.md +20 -6
- package/.claude/commands/workflow/lite-execute.md +56 -16
- package/.claude/commands/workflow/lite-fix.md +108 -9
- package/.claude/commands/workflow/lite-plan.md +1 -1
- package/.claude/skills/ccw-loop/README.md +303 -0
- package/.claude/skills/ccw-loop/SKILL.md +259 -0
- package/.claude/skills/ccw-loop/phases/actions/action-complete.md +320 -0
- package/.claude/skills/ccw-loop/phases/actions/action-debug-with-file.md +485 -0
- package/.claude/skills/ccw-loop/phases/actions/action-develop-with-file.md +365 -0
- package/.claude/skills/ccw-loop/phases/actions/action-init.md +200 -0
- package/.claude/skills/ccw-loop/phases/actions/action-menu.md +192 -0
- package/.claude/skills/ccw-loop/phases/actions/action-validate-with-file.md +307 -0
- package/.claude/skills/ccw-loop/phases/orchestrator.md +486 -0
- package/.claude/skills/ccw-loop/phases/state-schema.md +474 -0
- package/.claude/skills/ccw-loop/specs/action-catalog.md +300 -0
- package/.claude/skills/ccw-loop/specs/loop-requirements.md +192 -0
- package/.claude/skills/ccw-loop/templates/progress-template.md +175 -0
- package/.claude/skills/ccw-loop/templates/understanding-template.md +303 -0
- package/.claude/skills/ccw-loop/templates/validation-template.md +258 -0
- package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +29 -0
- package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +200 -0
- package/.codex/prompts/debug-with-file.md +609 -0
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +8 -1
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +16 -4
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +37 -4
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/commands/loop.d.ts +10 -0
- package/ccw/dist/commands/loop.d.ts.map +1 -0
- package/ccw/dist/commands/loop.js +289 -0
- package/ccw/dist/commands/loop.js.map +1 -0
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
- package/ccw/dist/core/dashboard-generator.js +4 -1
- package/ccw/dist/core/dashboard-generator.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +5 -3
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts +6 -0
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +42 -13
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-settings-routes.js +44 -0
- package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
- package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js +3 -2
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -1
- package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/core-memory-routes.js +4 -2
- package/ccw/dist/core/routes/core-memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/files-routes.js +4 -2
- package/ccw/dist/core/routes/files-routes.js.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.js +3 -0
- package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
- package/ccw/dist/core/routes/loop-routes.d.ts +24 -0
- package/ccw/dist/core/routes/loop-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/loop-routes.js +334 -0
- package/ccw/dist/core/routes/loop-routes.js.map +1 -0
- package/ccw/dist/core/routes/loop-v2-routes.d.ts +35 -0
- package/ccw/dist/core/routes/loop-v2-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/loop-v2-routes.js +1208 -0
- package/ccw/dist/core/routes/loop-v2-routes.js.map +1 -0
- package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/memory-routes.js +2 -1
- package/ccw/dist/core/routes/memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/task-routes.d.ts +12 -0
- package/ccw/dist/core/routes/task-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/task-routes.js +321 -0
- package/ccw/dist/core/routes/task-routes.js.map +1 -0
- package/ccw/dist/core/routes/test-loop-routes.d.ts +11 -0
- package/ccw/dist/core/routes/test-loop-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/test-loop-routes.js +298 -0
- package/ccw/dist/core/routes/test-loop-routes.js.map +1 -0
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +43 -3
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/core/websocket.d.ts +59 -0
- package/ccw/dist/core/websocket.d.ts.map +1 -1
- package/ccw/dist/core/websocket.js +34 -0
- package/ccw/dist/core/websocket.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +40 -0
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +119 -0
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +66 -47
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/loop-manager.d.ts +84 -0
- package/ccw/dist/tools/loop-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-manager.js +425 -0
- package/ccw/dist/tools/loop-manager.js.map +1 -0
- package/ccw/dist/tools/loop-state-manager.d.ts +47 -0
- package/ccw/dist/tools/loop-state-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-state-manager.js +149 -0
- package/ccw/dist/tools/loop-state-manager.js.map +1 -0
- package/ccw/dist/tools/loop-task-manager.d.ts +138 -0
- package/ccw/dist/tools/loop-task-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-task-manager.js +270 -0
- package/ccw/dist/tools/loop-task-manager.js.map +1 -0
- package/ccw/dist/types/index.d.ts +1 -0
- package/ccw/dist/types/index.d.ts.map +1 -1
- package/ccw/dist/types/index.js +1 -0
- package/ccw/dist/types/index.js.map +1 -1
- package/ccw/dist/types/loop.d.ts +257 -0
- package/ccw/dist/types/loop.d.ts.map +1 -0
- package/ccw/dist/types/loop.js +17 -0
- package/ccw/dist/types/loop.js.map +1 -0
- package/ccw/scripts/IMPLEMENTATION-SUMMARY.md +2 -2
- package/ccw/scripts/QUICK-REFERENCE.md +1 -1
- package/ccw/scripts/README-memory-embedder.md +1 -1
- package/ccw/scripts/memory_embedder.py +1 -1
- package/ccw/src/cli.ts +9 -1
- package/ccw/src/commands/cli.ts +16 -4
- package/ccw/src/commands/issue.ts +41 -5
- package/ccw/src/commands/loop.ts +344 -0
- package/ccw/src/core/dashboard-generator.ts +4 -1
- package/ccw/src/core/routes/claude-routes.ts +5 -3
- package/ccw/src/core/routes/cli-routes.ts +47 -15
- package/ccw/src/core/routes/cli-settings-routes.ts +47 -0
- package/ccw/src/core/routes/codexlens/semantic-handlers.ts +3 -2
- package/ccw/src/core/routes/core-memory-routes.ts +4 -2
- package/ccw/src/core/routes/files-routes.ts +4 -2
- package/ccw/src/core/routes/hooks-routes.ts +3 -0
- package/ccw/src/core/routes/loop-routes.ts +386 -0
- package/ccw/src/core/routes/loop-v2-routes.ts +1412 -0
- package/ccw/src/core/routes/memory-routes.ts +2 -1
- package/ccw/src/core/routes/task-routes.ts +361 -0
- package/ccw/src/core/routes/test-loop-routes.ts +312 -0
- package/ccw/src/core/server.ts +44 -3
- package/ccw/src/core/websocket.ts +104 -0
- package/ccw/src/templates/dashboard-css/12-cli-legacy.css +56 -0
- package/ccw/src/templates/dashboard-css/32-issue-manager.css +160 -0
- package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +57 -2
- package/ccw/src/templates/dashboard-css/36-loop-monitor.css +1896 -0
- package/ccw/src/templates/dashboard-css/36-loop-monitor.css.backup +1877 -0
- package/ccw/src/templates/dashboard-js/components/cli-status.js +64 -3
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +251 -110
- package/ccw/src/templates/dashboard-js/components/navigation.js +10 -0
- package/ccw/src/templates/dashboard-js/components/notifications.js +16 -0
- package/ccw/src/templates/dashboard-js/i18n.js +475 -1
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +3 -2
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +159 -0
- package/ccw/src/templates/dashboard-js/views/loop-monitor.js +3244 -0
- package/ccw/src/templates/dashboard.html +20 -2
- package/ccw/src/tools/claude-cli-tools.ts +143 -0
- package/ccw/src/tools/codex-lens.ts +71 -44
- package/ccw/src/tools/loop-manager.ts +519 -0
- package/ccw/src/tools/loop-state-manager.ts +173 -0
- package/ccw/src/tools/loop-task-manager.ts +380 -0
- package/ccw/src/types/index.ts +1 -0
- package/ccw/src/types/loop.ts +316 -0
- package/package.json +1 -1
|
@@ -36,6 +36,7 @@ const i18n = {
|
|
|
36
36
|
'common.disabled': 'Disabled',
|
|
37
37
|
'common.yes': 'Yes',
|
|
38
38
|
'common.no': 'No',
|
|
39
|
+
'common.na': 'N/A',
|
|
39
40
|
|
|
40
41
|
// Header
|
|
41
42
|
'header.project': 'Project:',
|
|
@@ -87,6 +88,11 @@ const i18n = {
|
|
|
87
88
|
'nav.liteFix': 'Lite Fix',
|
|
88
89
|
'nav.multiCliPlan': 'Multi-CLI Plan',
|
|
89
90
|
|
|
91
|
+
// Sidebar - Loops section
|
|
92
|
+
'nav.loops': 'Loops',
|
|
93
|
+
'nav.loopMonitor': 'Monitor',
|
|
94
|
+
'nav.inDevelopment': 'In Dev',
|
|
95
|
+
|
|
90
96
|
// Sidebar - MCP section
|
|
91
97
|
'nav.mcpServers': 'MCP Servers',
|
|
92
98
|
'nav.manage': 'Manage',
|
|
@@ -2144,6 +2150,83 @@ const i18n = {
|
|
|
2144
2150
|
'title.issueManager': 'Issue Manager',
|
|
2145
2151
|
'title.issueDiscovery': 'Issue Discovery',
|
|
2146
2152
|
|
|
2153
|
+
// Loop Monitor
|
|
2154
|
+
'title.loopMonitor': 'Loop Monitor',
|
|
2155
|
+
'loop.title': 'Loop Monitor',
|
|
2156
|
+
'loop.status.created': 'Created',
|
|
2157
|
+
'loop.status.running': 'Running',
|
|
2158
|
+
'loop.status.paused': 'Paused',
|
|
2159
|
+
'loop.status.completed': 'Completed',
|
|
2160
|
+
'loop.status.failed': 'Failed',
|
|
2161
|
+
'loop.tabs.timeline': 'Timeline',
|
|
2162
|
+
'loop.tabs.logs': 'Logs',
|
|
2163
|
+
'loop.tabs.variables': 'Variables',
|
|
2164
|
+
'loop.buttons.pause': 'Pause',
|
|
2165
|
+
'loop.buttons.resume': 'Resume',
|
|
2166
|
+
'loop.buttons.stop': 'Stop',
|
|
2167
|
+
'loop.buttons.retry': 'Retry',
|
|
2168
|
+
'loop.buttons.newLoop': 'New Loop',
|
|
2169
|
+
'loop.empty': 'No active loops',
|
|
2170
|
+
'loop.metric.iteration': 'Iteration',
|
|
2171
|
+
'loop.metric.step': 'Step',
|
|
2172
|
+
'loop.metric.duration': 'Duration',
|
|
2173
|
+
'loop.task.id': 'Task',
|
|
2174
|
+
'loop.created': 'Created',
|
|
2175
|
+
'loop.updated': 'Updated',
|
|
2176
|
+
'loop.progress': 'Progress',
|
|
2177
|
+
'loop.cliSequence': 'CLI Sequence',
|
|
2178
|
+
'loop.stateVariables': 'State Variables',
|
|
2179
|
+
'loop.executionHistory': 'Execution History',
|
|
2180
|
+
'loop.failureReason': 'Failure Reason',
|
|
2181
|
+
'loop.noLoopsFound': 'No loops found',
|
|
2182
|
+
'loop.selectLoop': 'Select a loop to view details',
|
|
2183
|
+
'loop.tasks': 'Tasks',
|
|
2184
|
+
'loop.createTaskTitle': 'Create Loop Task',
|
|
2185
|
+
'loop.loopsCount': 'loops',
|
|
2186
|
+
'loop.paused': 'Loop paused',
|
|
2187
|
+
'loop.resumed': 'Loop resumed',
|
|
2188
|
+
'loop.stopped': 'Loop stopped',
|
|
2189
|
+
'loop.startedSuccess': 'Loop started',
|
|
2190
|
+
'loop.taskDescription': 'Description',
|
|
2191
|
+
'loop.maxIterations': 'Max Iterations',
|
|
2192
|
+
'loop.errorPolicy': 'Error Policy',
|
|
2193
|
+
'loop.pauseOnError': 'Pause on error',
|
|
2194
|
+
'loop.retryAutomatically': 'Retry automatically',
|
|
2195
|
+
'loop.failImmediate': 'Fail immediately',
|
|
2196
|
+
'loop.successCondition': 'Success Condition',
|
|
2197
|
+
|
|
2198
|
+
// Kanban Board
|
|
2199
|
+
'loop.kanban.title': 'Tasks Board',
|
|
2200
|
+
'loop.kanban.byStatus': 'By Status',
|
|
2201
|
+
'loop.kanban.byPriority': 'By Priority',
|
|
2202
|
+
'loop.kanban.noBoardData': 'No tasks to display',
|
|
2203
|
+
'loop.listView': 'List View',
|
|
2204
|
+
'loop.addTask': 'Add Task',
|
|
2205
|
+
|
|
2206
|
+
// Navigation & Grouping
|
|
2207
|
+
'loop.nav.groupBy': 'Group By',
|
|
2208
|
+
'loop.nav.allLoops': 'All Loops',
|
|
2209
|
+
'loop.nav.activeOnly': 'Active Only',
|
|
2210
|
+
'loop.nav.recentlyActive': 'Recently Active',
|
|
2211
|
+
|
|
2212
|
+
// Task Status Details
|
|
2213
|
+
'loop.taskStatus.pending': 'Pending',
|
|
2214
|
+
'loop.taskStatus.inProgress': 'In Progress',
|
|
2215
|
+
'loop.taskStatus.blocked': 'Blocked',
|
|
2216
|
+
'loop.taskStatus.done': 'Done',
|
|
2217
|
+
|
|
2218
|
+
// Status Management
|
|
2219
|
+
'loop.updateStatus': 'Update Status',
|
|
2220
|
+
'loop.updatedAt': 'Updated at',
|
|
2221
|
+
'loop.updateSuccess': 'Status updated successfully',
|
|
2222
|
+
'loop.updateError': 'Failed to update status',
|
|
2223
|
+
'loop.priority': 'Priority',
|
|
2224
|
+
'loop.priority.low': 'Low',
|
|
2225
|
+
'loop.priority.medium': 'Medium',
|
|
2226
|
+
'loop.priority.high': 'High',
|
|
2227
|
+
'loop.tags': 'Tags',
|
|
2228
|
+
'loop.notes': 'Notes',
|
|
2229
|
+
|
|
2147
2230
|
// Issue Discovery
|
|
2148
2231
|
'discovery.title': 'Issue Discovery',
|
|
2149
2232
|
'discovery.description': 'Discover potential issues from multiple perspectives',
|
|
@@ -2357,6 +2440,154 @@ const i18n = {
|
|
|
2357
2440
|
'common.copyId': 'Copy ID',
|
|
2358
2441
|
'common.copied': 'Copied!',
|
|
2359
2442
|
'common.copyError': 'Failed to copy',
|
|
2443
|
+
|
|
2444
|
+
// Loop Monitor
|
|
2445
|
+
'loop.title': 'Loop Monitor',
|
|
2446
|
+
'loop.loops': 'Loops',
|
|
2447
|
+
'loop.all': 'All',
|
|
2448
|
+
'loop.running': 'Running',
|
|
2449
|
+
'loop.paused': 'Paused',
|
|
2450
|
+
'loop.completed': 'Completed',
|
|
2451
|
+
'loop.failed': 'Failed',
|
|
2452
|
+
'loop.tasks': 'Tasks',
|
|
2453
|
+
'loop.newLoop': 'New Loop',
|
|
2454
|
+
'loop.loading': 'Loading loops...',
|
|
2455
|
+
'loop.noLoops': 'No loops found',
|
|
2456
|
+
'loop.noLoopsHint': 'Create a loop task to get started',
|
|
2457
|
+
'loop.selectLoop': 'Select a loop to view details',
|
|
2458
|
+
'loop.selectLoopHint': 'Click on a loop from the list to see its details',
|
|
2459
|
+
'loop.loopNotFound': 'Loop not found',
|
|
2460
|
+
'loop.selectAnotherLoop': 'Select another loop from the list',
|
|
2461
|
+
'loop.task': 'Task',
|
|
2462
|
+
'loop.steps': 'steps',
|
|
2463
|
+
'loop.taskInfo': 'Task Info',
|
|
2464
|
+
'loop.edit': 'Edit',
|
|
2465
|
+
'loop.taskId': 'Task ID',
|
|
2466
|
+
'loop.step': 'Step',
|
|
2467
|
+
'loop.updated': 'Updated',
|
|
2468
|
+
'loop.created': 'Created',
|
|
2469
|
+
'loop.progress': 'Progress',
|
|
2470
|
+
'loop.iteration': 'Iteration',
|
|
2471
|
+
'loop.currentStep': 'Current Step',
|
|
2472
|
+
'loop.cliSequence': 'CLI Sequence',
|
|
2473
|
+
'loop.stateVariables': 'State Variables',
|
|
2474
|
+
'loop.executionHistory': 'Execution History',
|
|
2475
|
+
'loop.failureReason': 'Failure Reason',
|
|
2476
|
+
'loop.pause': 'Pause',
|
|
2477
|
+
'loop.resume': 'Resume',
|
|
2478
|
+
'loop.stop': 'Stop',
|
|
2479
|
+
'loop.confirmStop': 'Stop loop {loopId}?\n\nIteration: {currentIteration}/{maxIterations}\nThis action cannot be undone.',
|
|
2480
|
+
'loop.loopPaused': 'Loop paused',
|
|
2481
|
+
'loop.loopResumed': 'Loop resumed',
|
|
2482
|
+
'loop.loopStopped': 'Loop stopped',
|
|
2483
|
+
'loop.failedToPause': 'Failed to pause',
|
|
2484
|
+
'loop.failedToResume': 'Failed to resume',
|
|
2485
|
+
'loop.failedToStop': 'Failed to stop',
|
|
2486
|
+
'loop.failedToLoad': 'Failed to load loops',
|
|
2487
|
+
'loop.justNow': 'just now',
|
|
2488
|
+
'loop.minutesAgo': '{m}m ago',
|
|
2489
|
+
'loop.hoursAgo': '{h}h ago',
|
|
2490
|
+
'loop.daysAgo': '{d}d ago',
|
|
2491
|
+
'loop.tasksCount': '{count} task(s) with loop enabled',
|
|
2492
|
+
'loop.noLoopTasks': 'No loop-enabled tasks found',
|
|
2493
|
+
'loop.createLoopTask': 'Create Loop Task',
|
|
2494
|
+
'loop.backToLoops': 'Back to Loops',
|
|
2495
|
+
'loop.startLoop': 'Start Loop',
|
|
2496
|
+
'loop.loopStarted': 'Loop started',
|
|
2497
|
+
'loop.failedToStart': 'Failed to start loop',
|
|
2498
|
+
'loop.createTaskFailed': 'Failed to create task',
|
|
2499
|
+
'loop.createLoopModal': 'Create Loop Task',
|
|
2500
|
+
'loop.basicInfo': 'Basic Information',
|
|
2501
|
+
'loop.importFromIssue': 'Import from Issue',
|
|
2502
|
+
'loop.selectIssue': 'Select an Issue',
|
|
2503
|
+
'loop.noIssuesFound': 'No issues found',
|
|
2504
|
+
'loop.fetchIssuesFailed': 'Failed to fetch issues',
|
|
2505
|
+
'loop.fetchIssueFailed': 'Failed to fetch issue',
|
|
2506
|
+
'loop.issueImported': 'Issue imported',
|
|
2507
|
+
'loop.taskTitle': 'Task Title',
|
|
2508
|
+
'loop.taskTitlePlaceholder': 'e.g., Auto Test Fix Loop',
|
|
2509
|
+
'loop.description': 'Description',
|
|
2510
|
+
'loop.descriptionPlaceholder': 'Describe what this loop does...',
|
|
2511
|
+
'loop.loopConfig': 'Loop Configuration',
|
|
2512
|
+
'loop.maxIterations': 'Max Iterations',
|
|
2513
|
+
'loop.errorPolicy': 'Error Policy',
|
|
2514
|
+
'loop.pauseOnError': 'Pause on error',
|
|
2515
|
+
'loop.retryAutomatically': 'Retry automatically',
|
|
2516
|
+
'loop.failImmediately': 'Fail immediately',
|
|
2517
|
+
'loop.maxRetries': 'Max Retries (for retry policy)',
|
|
2518
|
+
'loop.successCondition': 'Success Condition (JavaScript expression)',
|
|
2519
|
+
'loop.successConditionPlaceholder': 'e.g., state_variables.test_stdout.includes(\'passed\')',
|
|
2520
|
+
'loop.availableVars': 'Available: state_variables, current_iteration',
|
|
2521
|
+
'loop.cliSequence': 'CLI Sequence',
|
|
2522
|
+
'loop.addStep': 'Add Step',
|
|
2523
|
+
'loop.stepNumber': 'Step {number}',
|
|
2524
|
+
'loop.stepLabel': 'Step',
|
|
2525
|
+
'loop.removeStep': 'Remove step',
|
|
2526
|
+
'loop.stepId': 'Step ID',
|
|
2527
|
+
'loop.stepIdPlaceholder': 'e.g., run_tests',
|
|
2528
|
+
'loop.tool': 'Tool',
|
|
2529
|
+
'loop.mode': 'Mode',
|
|
2530
|
+
'loop.command': 'Command',
|
|
2531
|
+
'loop.commandPlaceholder': 'e.g., npm test',
|
|
2532
|
+
'loop.promptTemplate': 'Prompt Template (supports [variable_name] substitution)',
|
|
2533
|
+
'loop.promptPlaceholder': 'Enter prompt template...',
|
|
2534
|
+
'loop.onError': 'On Error',
|
|
2535
|
+
'loop.continue': 'Continue',
|
|
2536
|
+
'loop.pause': 'Pause',
|
|
2537
|
+
'loop.failFast': 'Fail Fast',
|
|
2538
|
+
'loop.cancel': 'Cancel',
|
|
2539
|
+
'loop.createAndStart': 'Create Loop',
|
|
2540
|
+
'loop.created': 'Created',
|
|
2541
|
+
'loop.createFailed': 'Create Loop Failed',
|
|
2542
|
+
'loop.taskCreated': 'Task created',
|
|
2543
|
+
'loop.taskCreatedFailedStart': 'Task created but failed to start loop',
|
|
2544
|
+
// V2 Simplified Loop
|
|
2545
|
+
'loop.create': 'Create',
|
|
2546
|
+
'loop.loopCreated': 'Loop created successfully',
|
|
2547
|
+
'loop.titleRequired': 'Title is required',
|
|
2548
|
+
'loop.invalidMaxIterations': 'Max iterations must be between 1 and 100',
|
|
2549
|
+
'loop.loopInfo': 'Loop Info',
|
|
2550
|
+
'loop.v2LoopInfo': 'This is a simplified loop. Tasks are managed independently in the detail view.',
|
|
2551
|
+
'loop.manageTasks': 'Manage Tasks',
|
|
2552
|
+
'loop.taskManagement': 'Task Management',
|
|
2553
|
+
'loop.taskManagementPlaceholder': 'Task management will be available in the next update. Use the v1 loops for full task configuration.',
|
|
2554
|
+
'loop.noTasksYet': 'No tasks configured yet',
|
|
2555
|
+
'loop.back': 'Back',
|
|
2556
|
+
'loop.loopNotFound': 'Loop not found',
|
|
2557
|
+
'loop.selectAnotherLoop': 'Please select another loop from the list',
|
|
2558
|
+
'loop.start': 'Start',
|
|
2559
|
+
'loop.loopStarted': 'Loop started',
|
|
2560
|
+
'loop.failedToStart': 'Failed to start loop',
|
|
2561
|
+
// Task List Management
|
|
2562
|
+
'loop.taskList': 'Task List',
|
|
2563
|
+
'loop.addTask': 'Add Task',
|
|
2564
|
+
'loop.taskDescription': 'Task Description',
|
|
2565
|
+
'loop.taskDescriptionPlaceholder': 'Describe what this task should do...',
|
|
2566
|
+
'loop.modeAnalysis': 'Analysis',
|
|
2567
|
+
'loop.modeWrite': 'Write',
|
|
2568
|
+
'loop.modeReview': 'Review',
|
|
2569
|
+
'loop.save': 'Save',
|
|
2570
|
+
'loop.taskAdded': 'Task added successfully',
|
|
2571
|
+
'loop.addTaskFailed': 'Failed to add task',
|
|
2572
|
+
'loop.editTask': 'Edit Task',
|
|
2573
|
+
'loop.taskUpdated': 'Task updated successfully',
|
|
2574
|
+
'loop.updateTaskFailed': 'Failed to update task',
|
|
2575
|
+
'loop.confirmDeleteTask': 'Are you sure you want to delete this task? This action cannot be undone.',
|
|
2576
|
+
'loop.taskDeleted': 'Task deleted successfully',
|
|
2577
|
+
'loop.deleteTaskFailed': 'Failed to delete task',
|
|
2578
|
+
'loop.deleteTaskError': 'Error deleting task',
|
|
2579
|
+
'loop.loadTasksFailed': 'Failed to load tasks',
|
|
2580
|
+
'loop.loadTasksError': 'Error loading tasks',
|
|
2581
|
+
'loop.tasksReordered': 'Tasks reordered',
|
|
2582
|
+
'loop.saveOrderFailed': 'Failed to save order',
|
|
2583
|
+
'loop.noTasksHint': 'Add your first task to get started',
|
|
2584
|
+
'loop.noDescription': 'No description',
|
|
2585
|
+
'loop.descriptionRequired': 'Description is required',
|
|
2586
|
+
'loop.loadTaskFailed': 'Failed to load task',
|
|
2587
|
+
'loop.loadTaskError': 'Error loading task',
|
|
2588
|
+
'loop.taskTitleHint': 'Enter a descriptive title for your loop',
|
|
2589
|
+
'loop.descriptionHint': 'Optional context about what this loop does',
|
|
2590
|
+
'loop.maxIterationsHint': 'Maximum number of iterations to run (1-100)',
|
|
2360
2591
|
},
|
|
2361
2592
|
|
|
2362
2593
|
zh: {
|
|
@@ -2387,6 +2618,7 @@ const i18n = {
|
|
|
2387
2618
|
'common.disabled': '已禁用',
|
|
2388
2619
|
'common.yes': '是',
|
|
2389
2620
|
'common.no': '否',
|
|
2621
|
+
'common.na': '无',
|
|
2390
2622
|
|
|
2391
2623
|
// Header
|
|
2392
2624
|
'header.project': '项目:',
|
|
@@ -2438,6 +2670,11 @@ const i18n = {
|
|
|
2438
2670
|
'nav.liteFix': '轻量修复',
|
|
2439
2671
|
'nav.multiCliPlan': '多CLI规划',
|
|
2440
2672
|
|
|
2673
|
+
// Sidebar - Loops section
|
|
2674
|
+
'nav.loops': '循环',
|
|
2675
|
+
'nav.loopMonitor': '监控器',
|
|
2676
|
+
'nav.inDevelopment': '开发中',
|
|
2677
|
+
|
|
2441
2678
|
// Sidebar - MCP section
|
|
2442
2679
|
'nav.mcpServers': 'MCP 服务器',
|
|
2443
2680
|
'nav.manage': '管理',
|
|
@@ -4507,6 +4744,83 @@ const i18n = {
|
|
|
4507
4744
|
'title.issueManager': '议题管理器',
|
|
4508
4745
|
'title.issueDiscovery': '议题发现',
|
|
4509
4746
|
|
|
4747
|
+
// Loop Monitor
|
|
4748
|
+
'title.loopMonitor': '循环监控',
|
|
4749
|
+
'loop.title': '循环监控',
|
|
4750
|
+
'loop.status.created': '已创建',
|
|
4751
|
+
'loop.status.running': '运行中',
|
|
4752
|
+
'loop.status.paused': '已暂停',
|
|
4753
|
+
'loop.status.completed': '已完成',
|
|
4754
|
+
'loop.status.failed': '失败',
|
|
4755
|
+
'loop.tabs.timeline': '时间线',
|
|
4756
|
+
'loop.tabs.logs': '日志',
|
|
4757
|
+
'loop.tabs.variables': '变量',
|
|
4758
|
+
'loop.buttons.pause': '暂停',
|
|
4759
|
+
'loop.buttons.resume': '恢复',
|
|
4760
|
+
'loop.buttons.stop': '停止',
|
|
4761
|
+
'loop.buttons.retry': '重试',
|
|
4762
|
+
'loop.buttons.newLoop': '新建循环',
|
|
4763
|
+
'loop.empty': '没有活跃的循环',
|
|
4764
|
+
'loop.metric.iteration': '迭代',
|
|
4765
|
+
'loop.metric.step': '步骤',
|
|
4766
|
+
'loop.metric.duration': '耗时',
|
|
4767
|
+
'loop.task.id': '任务',
|
|
4768
|
+
'loop.created': '创建时间',
|
|
4769
|
+
'loop.updated': '更新时间',
|
|
4770
|
+
'loop.progress': '进度',
|
|
4771
|
+
'loop.cliSequence': 'CLI 序列',
|
|
4772
|
+
'loop.stateVariables': '状态变量',
|
|
4773
|
+
'loop.executionHistory': '执行历史',
|
|
4774
|
+
'loop.failureReason': '失败原因',
|
|
4775
|
+
'loop.noLoopsFound': '未找到循环',
|
|
4776
|
+
'loop.selectLoop': '选择一个循环查看详情',
|
|
4777
|
+
'loop.tasks': '任务',
|
|
4778
|
+
'loop.createTaskTitle': '创建循环任务',
|
|
4779
|
+
'loop.loopsCount': '个循环',
|
|
4780
|
+
'loop.paused': '循环已暂停',
|
|
4781
|
+
'loop.resumed': '循环已恢复',
|
|
4782
|
+
'loop.stopped': '循环已停止',
|
|
4783
|
+
'loop.startedSuccess': '循环已启动',
|
|
4784
|
+
'loop.taskDescription': '描述',
|
|
4785
|
+
'loop.maxIterations': '最大迭代数',
|
|
4786
|
+
'loop.errorPolicy': '错误策略',
|
|
4787
|
+
'loop.pauseOnError': '错误时暂停',
|
|
4788
|
+
'loop.retryAutomatically': '自动重试',
|
|
4789
|
+
'loop.failImmediate': '立即失败',
|
|
4790
|
+
'loop.successCondition': '成功条件',
|
|
4791
|
+
|
|
4792
|
+
// Kanban Board
|
|
4793
|
+
'loop.kanban.title': '任务看板',
|
|
4794
|
+
'loop.kanban.byStatus': '按状态',
|
|
4795
|
+
'loop.kanban.byPriority': '按优先级',
|
|
4796
|
+
'loop.kanban.noBoardData': '没有要显示的任务',
|
|
4797
|
+
'loop.listView': '列表视图',
|
|
4798
|
+
'loop.addTask': '添加任务',
|
|
4799
|
+
|
|
4800
|
+
// Navigation & Grouping
|
|
4801
|
+
'loop.nav.groupBy': '分组',
|
|
4802
|
+
'loop.nav.allLoops': '所有循环',
|
|
4803
|
+
'loop.nav.activeOnly': '仅活跃',
|
|
4804
|
+
'loop.nav.recentlyActive': '最近活跃',
|
|
4805
|
+
|
|
4806
|
+
// Task Status Details
|
|
4807
|
+
'loop.taskStatus.pending': '待处理',
|
|
4808
|
+
'loop.taskStatus.inProgress': '进行中',
|
|
4809
|
+
'loop.taskStatus.blocked': '已阻止',
|
|
4810
|
+
'loop.taskStatus.done': '已完成',
|
|
4811
|
+
|
|
4812
|
+
// Status Management
|
|
4813
|
+
'loop.updateStatus': '更新状态',
|
|
4814
|
+
'loop.updatedAt': '更新于',
|
|
4815
|
+
'loop.updateSuccess': '状态更新成功',
|
|
4816
|
+
'loop.updateError': '更新状态失败',
|
|
4817
|
+
'loop.priority': '优先级',
|
|
4818
|
+
'loop.priority.low': '低',
|
|
4819
|
+
'loop.priority.medium': '中',
|
|
4820
|
+
'loop.priority.high': '高',
|
|
4821
|
+
'loop.tags': '标签',
|
|
4822
|
+
'loop.notes': '备注',
|
|
4823
|
+
|
|
4510
4824
|
// Issue Discovery
|
|
4511
4825
|
'discovery.title': '议题发现',
|
|
4512
4826
|
'discovery.description': '从多个视角发现潜在问题',
|
|
@@ -4720,6 +5034,153 @@ const i18n = {
|
|
|
4720
5034
|
'common.copyId': '复制 ID',
|
|
4721
5035
|
'common.copied': '已复制!',
|
|
4722
5036
|
'common.copyError': '复制失败',
|
|
5037
|
+
|
|
5038
|
+
// Loop Monitor - 循环监控
|
|
5039
|
+
'loop.title': '循环监控',
|
|
5040
|
+
'loop.loops': '循环',
|
|
5041
|
+
'loop.all': '全部',
|
|
5042
|
+
'loop.running': '运行中',
|
|
5043
|
+
'loop.paused': '已暂停',
|
|
5044
|
+
'loop.completed': '已完成',
|
|
5045
|
+
'loop.failed': '失败',
|
|
5046
|
+
'loop.tasks': '任务',
|
|
5047
|
+
'loop.newLoop': '新建循环',
|
|
5048
|
+
'loop.loading': '加载循环中...',
|
|
5049
|
+
'loop.noLoops': '未找到循环',
|
|
5050
|
+
'loop.noLoopsHint': '创建一个循环任务开始使用',
|
|
5051
|
+
'loop.selectLoop': '选择一个循环查看详情',
|
|
5052
|
+
'loop.selectLoopHint': '点击列表中的循环查看其详细信息',
|
|
5053
|
+
'loop.loopNotFound': '循环未找到',
|
|
5054
|
+
'loop.selectAnotherLoop': '从列表中选择另一个循环',
|
|
5055
|
+
'loop.task': '任务',
|
|
5056
|
+
'loop.steps': '个步骤',
|
|
5057
|
+
'loop.taskInfo': '任务信息',
|
|
5058
|
+
'loop.edit': '编辑',
|
|
5059
|
+
'loop.taskId': '任务 ID',
|
|
5060
|
+
'loop.step': '步骤',
|
|
5061
|
+
'loop.updated': '更新时间',
|
|
5062
|
+
'loop.created': '创建时间',
|
|
5063
|
+
'loop.progress': '进度',
|
|
5064
|
+
'loop.iteration': '迭代',
|
|
5065
|
+
'loop.currentStep': '当前步骤',
|
|
5066
|
+
'loop.cliSequence': 'CLI 序列',
|
|
5067
|
+
'loop.stateVariables': '状态变量',
|
|
5068
|
+
'loop.executionHistory': '执行历史',
|
|
5069
|
+
'loop.failureReason': '失败原因',
|
|
5070
|
+
'loop.pause': '暂停',
|
|
5071
|
+
'loop.resume': '恢复',
|
|
5072
|
+
'loop.stop': '停止',
|
|
5073
|
+
'loop.confirmStop': '确定停止循环 {loopId}?\n\n迭代:{currentIteration}/{maxIterations}\n此操作无法撤销。',
|
|
5074
|
+
'loop.loopPaused': '循环已暂停',
|
|
5075
|
+
'loop.loopResumed': '循环已恢复',
|
|
5076
|
+
'loop.loopStopped': '循环已停止',
|
|
5077
|
+
'loop.failedToPause': '暂停失败',
|
|
5078
|
+
'loop.failedToResume': '恢复失败',
|
|
5079
|
+
'loop.failedToStop': '停止失败',
|
|
5080
|
+
'loop.failedToLoad': '加载循环失败',
|
|
5081
|
+
'loop.justNow': '刚刚',
|
|
5082
|
+
'loop.minutesAgo': '{m} 分钟前',
|
|
5083
|
+
'loop.hoursAgo': '{h} 小时前',
|
|
5084
|
+
'loop.daysAgo': '{d} 天前',
|
|
5085
|
+
'loop.tasksCount': '{count} 个启用循环的任务',
|
|
5086
|
+
'loop.noLoopTasks': '未找到启用循环的任务',
|
|
5087
|
+
'loop.createLoopTask': '创建循环任务',
|
|
5088
|
+
'loop.backToLoops': '返回循环列表',
|
|
5089
|
+
'loop.startLoop': '启动循环',
|
|
5090
|
+
'loop.loopStarted': '循环已启动',
|
|
5091
|
+
'loop.failedToStart': '启动循环失败',
|
|
5092
|
+
'loop.createTaskFailed': '创建任务失败',
|
|
5093
|
+
'loop.createLoopModal': '创建循环任务',
|
|
5094
|
+
'loop.basicInfo': '基本信息',
|
|
5095
|
+
'loop.importFromIssue': '从问题导入',
|
|
5096
|
+
'loop.selectIssue': '选择问题',
|
|
5097
|
+
'loop.noIssuesFound': '未找到问题',
|
|
5098
|
+
'loop.fetchIssuesFailed': '获取问题列表失败',
|
|
5099
|
+
'loop.fetchIssueFailed': '获取问题详情失败',
|
|
5100
|
+
'loop.issueImported': '已导入问题',
|
|
5101
|
+
'loop.taskTitle': '任务标题',
|
|
5102
|
+
'loop.taskTitlePlaceholder': '例如:自动测试修复循环',
|
|
5103
|
+
'loop.description': '描述',
|
|
5104
|
+
'loop.descriptionPlaceholder': '描述此循环的功能...',
|
|
5105
|
+
'loop.loopConfig': '循环配置',
|
|
5106
|
+
'loop.maxIterations': '最大迭代次数',
|
|
5107
|
+
'loop.errorPolicy': '错误策略',
|
|
5108
|
+
'loop.pauseOnError': '暂停',
|
|
5109
|
+
'loop.retryAutomatically': '自动重试',
|
|
5110
|
+
'loop.failImmediately': '立即失败',
|
|
5111
|
+
'loop.maxRetries': '最大重试次数(重试策略)',
|
|
5112
|
+
'loop.successCondition': '成功条件(JavaScript 表达式)',
|
|
5113
|
+
'loop.successConditionPlaceholder': '例如:state_variables.test_stdout.includes(\'passed\')',
|
|
5114
|
+
'loop.availableVars': '可用变量:state_variables、current_iteration',
|
|
5115
|
+
'loop.cliSequence': 'CLI 序列',
|
|
5116
|
+
'loop.addStep': '添加步骤',
|
|
5117
|
+
'loop.stepNumber': '步骤 {number}',
|
|
5118
|
+
'loop.stepLabel': '步骤',
|
|
5119
|
+
'loop.removeStep': '移除步骤',
|
|
5120
|
+
'loop.stepId': '步骤 ID',
|
|
5121
|
+
'loop.stepIdPlaceholder': '例如:run_tests',
|
|
5122
|
+
'loop.tool': '工具',
|
|
5123
|
+
'loop.mode': '模式',
|
|
5124
|
+
'loop.command': '命令',
|
|
5125
|
+
'loop.commandPlaceholder': '例如:npm test',
|
|
5126
|
+
'loop.promptTemplate': '提示模板(支持 [variable_name] 变量替换)',
|
|
5127
|
+
'loop.promptPlaceholder': '输入提示模板...',
|
|
5128
|
+
'loop.onError': '错误处理',
|
|
5129
|
+
'loop.continue': '继续',
|
|
5130
|
+
'loop.pause': '暂停',
|
|
5131
|
+
'loop.failFast': '立即失败',
|
|
5132
|
+
'loop.cancel': '取消',
|
|
5133
|
+
'loop.createAndStart': '创建循环',
|
|
5134
|
+
'loop.created': '已创建',
|
|
5135
|
+
'loop.createFailed': '创建循环失败',
|
|
5136
|
+
'loop.taskCreatedFailedStart': '任务已创建,但启动循环失败',
|
|
5137
|
+
// V2 Simplified Loop
|
|
5138
|
+
'loop.create': '创建',
|
|
5139
|
+
'loop.loopCreated': '循环创建成功',
|
|
5140
|
+
'loop.titleRequired': '标题不能为空',
|
|
5141
|
+
'loop.invalidMaxIterations': '最大迭代次数必须在 1 到 100 之间',
|
|
5142
|
+
'loop.loopInfo': '循环信息',
|
|
5143
|
+
'loop.v2LoopInfo': '这是一个简化版循环。任务在详情视图中独立管理。',
|
|
5144
|
+
'loop.manageTasks': '管理任务',
|
|
5145
|
+
'loop.taskManagement': '任务管理',
|
|
5146
|
+
'loop.taskManagementPlaceholder': '任务管理将在后续更新中提供。请使用 v1 循环进行完整任务配置。',
|
|
5147
|
+
'loop.noTasksYet': '尚未配置任务',
|
|
5148
|
+
'loop.back': '返回',
|
|
5149
|
+
'loop.loopNotFound': '循环未找到',
|
|
5150
|
+
'loop.selectAnotherLoop': '请从列表中选择其他循环',
|
|
5151
|
+
'loop.start': '启动',
|
|
5152
|
+
'loop.loopStarted': '循环已启动',
|
|
5153
|
+
'loop.failedToStart': '启动循环失败',
|
|
5154
|
+
// Task List Management
|
|
5155
|
+
'loop.taskList': '任务列表',
|
|
5156
|
+
'loop.addTask': '添加任务',
|
|
5157
|
+
'loop.taskDescription': '任务描述',
|
|
5158
|
+
'loop.taskDescriptionPlaceholder': '描述此任务应该做什么...',
|
|
5159
|
+
'loop.modeAnalysis': '分析',
|
|
5160
|
+
'loop.modeWrite': '编写',
|
|
5161
|
+
'loop.modeReview': '审查',
|
|
5162
|
+
'loop.save': '保存',
|
|
5163
|
+
'loop.taskAdded': '任务添加成功',
|
|
5164
|
+
'loop.addTaskFailed': '添加任务失败',
|
|
5165
|
+
'loop.editTask': '编辑任务',
|
|
5166
|
+
'loop.taskUpdated': '任务更新成功',
|
|
5167
|
+
'loop.updateTaskFailed': '更新任务失败',
|
|
5168
|
+
'loop.confirmDeleteTask': '确定要删除此任务吗?此操作无法撤销。',
|
|
5169
|
+
'loop.taskDeleted': '任务删除成功',
|
|
5170
|
+
'loop.deleteTaskFailed': '删除任务失败',
|
|
5171
|
+
'loop.deleteTaskError': '删除任务时出错',
|
|
5172
|
+
'loop.loadTasksFailed': '加载任务失败',
|
|
5173
|
+
'loop.loadTasksError': '加载任务时出错',
|
|
5174
|
+
'loop.tasksReordered': '任务已重新排序',
|
|
5175
|
+
'loop.saveOrderFailed': '保存排序失败',
|
|
5176
|
+
'loop.noTasksHint': '添加您的第一个任务开始使用',
|
|
5177
|
+
'loop.noDescription': '无描述',
|
|
5178
|
+
'loop.descriptionRequired': '描述不能为空',
|
|
5179
|
+
'loop.loadTaskFailed': '加载任务失败',
|
|
5180
|
+
'loop.loadTaskError': '加载任务时出错',
|
|
5181
|
+
'loop.taskTitleHint': '为循环输入描述性标题',
|
|
5182
|
+
'loop.descriptionHint': '关于循环功能的可选上下文',
|
|
5183
|
+
'loop.maxIterationsHint': '最大迭代次数 (1-100)',
|
|
4723
5184
|
}
|
|
4724
5185
|
};
|
|
4725
5186
|
|
|
@@ -4774,11 +5235,24 @@ function switchLang(lang) {
|
|
|
4774
5235
|
localStorage.setItem('ccw-lang', lang);
|
|
4775
5236
|
applyTranslations();
|
|
4776
5237
|
updateLangToggle();
|
|
4777
|
-
|
|
5238
|
+
|
|
4778
5239
|
// Re-render current view to update dynamic content
|
|
4779
5240
|
if (typeof updateContentTitle === 'function') {
|
|
4780
5241
|
updateContentTitle();
|
|
4781
5242
|
}
|
|
5243
|
+
|
|
5244
|
+
// Re-render loop monitor if visible
|
|
5245
|
+
if (typeof window.selectedLoopId !== 'undefined' && document.getElementById('loopList')) {
|
|
5246
|
+
if (typeof updateLoopStatusLabels === 'function') {
|
|
5247
|
+
updateLoopStatusLabels();
|
|
5248
|
+
}
|
|
5249
|
+
if (typeof renderLoopList === 'function') {
|
|
5250
|
+
renderLoopList();
|
|
5251
|
+
}
|
|
5252
|
+
if (window.selectedLoopId && typeof renderLoopDetail === 'function') {
|
|
5253
|
+
renderLoopDetail(window.selectedLoopId);
|
|
5254
|
+
}
|
|
5255
|
+
}
|
|
4782
5256
|
}
|
|
4783
5257
|
}
|
|
4784
5258
|
|
|
@@ -130,8 +130,9 @@ async function initCsrfToken() {
|
|
|
130
130
|
/**
|
|
131
131
|
* Sync active CLI executions from server
|
|
132
132
|
* Called when view is opened to restore running execution state
|
|
133
|
+
* Note: Renamed from syncActiveExecutions to avoid conflict with cli-stream-viewer.js
|
|
133
134
|
*/
|
|
134
|
-
async function
|
|
135
|
+
async function syncActiveExecutionsForManager() {
|
|
135
136
|
try {
|
|
136
137
|
var response = await fetch('/api/cli/active');
|
|
137
138
|
if (!response.ok) return;
|
|
@@ -1202,7 +1203,7 @@ async function renderCliManager() {
|
|
|
1202
1203
|
}
|
|
1203
1204
|
|
|
1204
1205
|
// 同步活动执行
|
|
1205
|
-
|
|
1206
|
+
syncActiveExecutionsForManager();
|
|
1206
1207
|
}
|
|
1207
1208
|
|
|
1208
1209
|
// ========== Helper Functions ==========
|