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.
Files changed (162) hide show
  1. package/.claude/agents/cli-execution-agent.md +61 -0
  2. package/.claude/agents/cli-lite-planning-agent.md +322 -36
  3. package/.claude/agents/issue-plan-agent.md +95 -11
  4. package/.claude/commands/cli/codex-review.md +8 -2
  5. package/.claude/commands/issue/plan.md +20 -6
  6. package/.claude/commands/workflow/lite-execute.md +56 -16
  7. package/.claude/commands/workflow/lite-fix.md +108 -9
  8. package/.claude/commands/workflow/lite-plan.md +1 -1
  9. package/.claude/skills/ccw-loop/README.md +303 -0
  10. package/.claude/skills/ccw-loop/SKILL.md +259 -0
  11. package/.claude/skills/ccw-loop/phases/actions/action-complete.md +320 -0
  12. package/.claude/skills/ccw-loop/phases/actions/action-debug-with-file.md +485 -0
  13. package/.claude/skills/ccw-loop/phases/actions/action-develop-with-file.md +365 -0
  14. package/.claude/skills/ccw-loop/phases/actions/action-init.md +200 -0
  15. package/.claude/skills/ccw-loop/phases/actions/action-menu.md +192 -0
  16. package/.claude/skills/ccw-loop/phases/actions/action-validate-with-file.md +307 -0
  17. package/.claude/skills/ccw-loop/phases/orchestrator.md +486 -0
  18. package/.claude/skills/ccw-loop/phases/state-schema.md +474 -0
  19. package/.claude/skills/ccw-loop/specs/action-catalog.md +300 -0
  20. package/.claude/skills/ccw-loop/specs/loop-requirements.md +192 -0
  21. package/.claude/skills/ccw-loop/templates/progress-template.md +175 -0
  22. package/.claude/skills/ccw-loop/templates/understanding-template.md +303 -0
  23. package/.claude/skills/ccw-loop/templates/validation-template.md +258 -0
  24. package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +29 -0
  25. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +200 -0
  26. package/.codex/prompts/debug-with-file.md +609 -0
  27. package/ccw/dist/cli.d.ts.map +1 -1
  28. package/ccw/dist/cli.js +8 -1
  29. package/ccw/dist/cli.js.map +1 -1
  30. package/ccw/dist/commands/cli.d.ts.map +1 -1
  31. package/ccw/dist/commands/cli.js +16 -4
  32. package/ccw/dist/commands/cli.js.map +1 -1
  33. package/ccw/dist/commands/issue.d.ts.map +1 -1
  34. package/ccw/dist/commands/issue.js +37 -4
  35. package/ccw/dist/commands/issue.js.map +1 -1
  36. package/ccw/dist/commands/loop.d.ts +10 -0
  37. package/ccw/dist/commands/loop.d.ts.map +1 -0
  38. package/ccw/dist/commands/loop.js +289 -0
  39. package/ccw/dist/commands/loop.js.map +1 -0
  40. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  41. package/ccw/dist/core/dashboard-generator.js +4 -1
  42. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  43. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  44. package/ccw/dist/core/routes/claude-routes.js +5 -3
  45. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  46. package/ccw/dist/core/routes/cli-routes.d.ts +6 -0
  47. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  48. package/ccw/dist/core/routes/cli-routes.js +42 -13
  49. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  50. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
  51. package/ccw/dist/core/routes/cli-settings-routes.js +44 -0
  52. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
  53. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -1
  54. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +3 -2
  55. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -1
  56. package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -1
  57. package/ccw/dist/core/routes/core-memory-routes.js +4 -2
  58. package/ccw/dist/core/routes/core-memory-routes.js.map +1 -1
  59. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  60. package/ccw/dist/core/routes/files-routes.js +4 -2
  61. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  62. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  63. package/ccw/dist/core/routes/hooks-routes.js +3 -0
  64. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  65. package/ccw/dist/core/routes/loop-routes.d.ts +24 -0
  66. package/ccw/dist/core/routes/loop-routes.d.ts.map +1 -0
  67. package/ccw/dist/core/routes/loop-routes.js +334 -0
  68. package/ccw/dist/core/routes/loop-routes.js.map +1 -0
  69. package/ccw/dist/core/routes/loop-v2-routes.d.ts +35 -0
  70. package/ccw/dist/core/routes/loop-v2-routes.d.ts.map +1 -0
  71. package/ccw/dist/core/routes/loop-v2-routes.js +1208 -0
  72. package/ccw/dist/core/routes/loop-v2-routes.js.map +1 -0
  73. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  74. package/ccw/dist/core/routes/memory-routes.js +2 -1
  75. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  76. package/ccw/dist/core/routes/task-routes.d.ts +12 -0
  77. package/ccw/dist/core/routes/task-routes.d.ts.map +1 -0
  78. package/ccw/dist/core/routes/task-routes.js +321 -0
  79. package/ccw/dist/core/routes/task-routes.js.map +1 -0
  80. package/ccw/dist/core/routes/test-loop-routes.d.ts +11 -0
  81. package/ccw/dist/core/routes/test-loop-routes.d.ts.map +1 -0
  82. package/ccw/dist/core/routes/test-loop-routes.js +298 -0
  83. package/ccw/dist/core/routes/test-loop-routes.js.map +1 -0
  84. package/ccw/dist/core/server.d.ts.map +1 -1
  85. package/ccw/dist/core/server.js +43 -3
  86. package/ccw/dist/core/server.js.map +1 -1
  87. package/ccw/dist/core/websocket.d.ts +59 -0
  88. package/ccw/dist/core/websocket.d.ts.map +1 -1
  89. package/ccw/dist/core/websocket.js +34 -0
  90. package/ccw/dist/core/websocket.js.map +1 -1
  91. package/ccw/dist/tools/claude-cli-tools.d.ts +40 -0
  92. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  93. package/ccw/dist/tools/claude-cli-tools.js +119 -0
  94. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  95. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  96. package/ccw/dist/tools/codex-lens.js +66 -47
  97. package/ccw/dist/tools/codex-lens.js.map +1 -1
  98. package/ccw/dist/tools/loop-manager.d.ts +84 -0
  99. package/ccw/dist/tools/loop-manager.d.ts.map +1 -0
  100. package/ccw/dist/tools/loop-manager.js +425 -0
  101. package/ccw/dist/tools/loop-manager.js.map +1 -0
  102. package/ccw/dist/tools/loop-state-manager.d.ts +47 -0
  103. package/ccw/dist/tools/loop-state-manager.d.ts.map +1 -0
  104. package/ccw/dist/tools/loop-state-manager.js +149 -0
  105. package/ccw/dist/tools/loop-state-manager.js.map +1 -0
  106. package/ccw/dist/tools/loop-task-manager.d.ts +138 -0
  107. package/ccw/dist/tools/loop-task-manager.d.ts.map +1 -0
  108. package/ccw/dist/tools/loop-task-manager.js +270 -0
  109. package/ccw/dist/tools/loop-task-manager.js.map +1 -0
  110. package/ccw/dist/types/index.d.ts +1 -0
  111. package/ccw/dist/types/index.d.ts.map +1 -1
  112. package/ccw/dist/types/index.js +1 -0
  113. package/ccw/dist/types/index.js.map +1 -1
  114. package/ccw/dist/types/loop.d.ts +257 -0
  115. package/ccw/dist/types/loop.d.ts.map +1 -0
  116. package/ccw/dist/types/loop.js +17 -0
  117. package/ccw/dist/types/loop.js.map +1 -0
  118. package/ccw/scripts/IMPLEMENTATION-SUMMARY.md +2 -2
  119. package/ccw/scripts/QUICK-REFERENCE.md +1 -1
  120. package/ccw/scripts/README-memory-embedder.md +1 -1
  121. package/ccw/scripts/memory_embedder.py +1 -1
  122. package/ccw/src/cli.ts +9 -1
  123. package/ccw/src/commands/cli.ts +16 -4
  124. package/ccw/src/commands/issue.ts +41 -5
  125. package/ccw/src/commands/loop.ts +344 -0
  126. package/ccw/src/core/dashboard-generator.ts +4 -1
  127. package/ccw/src/core/routes/claude-routes.ts +5 -3
  128. package/ccw/src/core/routes/cli-routes.ts +47 -15
  129. package/ccw/src/core/routes/cli-settings-routes.ts +47 -0
  130. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +3 -2
  131. package/ccw/src/core/routes/core-memory-routes.ts +4 -2
  132. package/ccw/src/core/routes/files-routes.ts +4 -2
  133. package/ccw/src/core/routes/hooks-routes.ts +3 -0
  134. package/ccw/src/core/routes/loop-routes.ts +386 -0
  135. package/ccw/src/core/routes/loop-v2-routes.ts +1412 -0
  136. package/ccw/src/core/routes/memory-routes.ts +2 -1
  137. package/ccw/src/core/routes/task-routes.ts +361 -0
  138. package/ccw/src/core/routes/test-loop-routes.ts +312 -0
  139. package/ccw/src/core/server.ts +44 -3
  140. package/ccw/src/core/websocket.ts +104 -0
  141. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +56 -0
  142. package/ccw/src/templates/dashboard-css/32-issue-manager.css +160 -0
  143. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +57 -2
  144. package/ccw/src/templates/dashboard-css/36-loop-monitor.css +1896 -0
  145. package/ccw/src/templates/dashboard-css/36-loop-monitor.css.backup +1877 -0
  146. package/ccw/src/templates/dashboard-js/components/cli-status.js +64 -3
  147. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +251 -110
  148. package/ccw/src/templates/dashboard-js/components/navigation.js +10 -0
  149. package/ccw/src/templates/dashboard-js/components/notifications.js +16 -0
  150. package/ccw/src/templates/dashboard-js/i18n.js +475 -1
  151. package/ccw/src/templates/dashboard-js/views/cli-manager.js +3 -2
  152. package/ccw/src/templates/dashboard-js/views/issue-manager.js +159 -0
  153. package/ccw/src/templates/dashboard-js/views/loop-monitor.js +3244 -0
  154. package/ccw/src/templates/dashboard.html +20 -2
  155. package/ccw/src/tools/claude-cli-tools.ts +143 -0
  156. package/ccw/src/tools/codex-lens.ts +71 -44
  157. package/ccw/src/tools/loop-manager.ts +519 -0
  158. package/ccw/src/tools/loop-state-manager.ts +173 -0
  159. package/ccw/src/tools/loop-task-manager.ts +380 -0
  160. package/ccw/src/types/index.ts +1 -0
  161. package/ccw/src/types/loop.ts +316 -0
  162. 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 syncActiveExecutions() {
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
- syncActiveExecutions();
1206
+ syncActiveExecutionsForManager();
1206
1207
  }
1207
1208
 
1208
1209
  // ========== Helper Functions ==========