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
@@ -435,6 +435,120 @@ function renderIssueCard(issue) {
435
435
  `;
436
436
  }
437
437
 
438
+ // Render failure information for failed issues
439
+ function renderFailureInfo(issue) {
440
+ // Check if issue has failure feedback
441
+ if (!issue.feedback || issue.feedback.length === 0) {
442
+ return '';
443
+ }
444
+
445
+ // Extract failure feedbacks
446
+ const failures = issue.feedback.filter(f => f.type === 'failure' && f.stage === 'execute');
447
+ if (failures.length === 0) {
448
+ return '';
449
+ }
450
+
451
+ // Get latest failure
452
+ const latestFailure = failures[failures.length - 1];
453
+ let failureDetail;
454
+ try {
455
+ failureDetail = JSON.parse(latestFailure.content);
456
+ } catch {
457
+ return '';
458
+ }
459
+
460
+ const errorMessage = failureDetail.message || 'Unknown error';
461
+ const errorType = failureDetail.error_type || 'error';
462
+ const taskId = failureDetail.task_id;
463
+ const failureCount = failures.length;
464
+
465
+ return `
466
+ <div class="issue-failure-info">
467
+ <div class="failure-header">
468
+ <i data-lucide="alert-circle" class="w-3.5 h-3.5"></i>
469
+ <span class="failure-label">${failureCount > 1 ? `Failed ${failureCount} times` : 'Execution Failed'}</span>
470
+ ${taskId ? `<span class="failure-task">${taskId}</span>` : ''}
471
+ </div>
472
+ <div class="failure-message">
473
+ <span class="failure-type">${errorType}:</span>
474
+ <span class="failure-text" title="${escapeHtml(errorMessage)}">${escapeHtml(truncateText(errorMessage, 80))}</span>
475
+ </div>
476
+ </div>
477
+ `;
478
+ }
479
+
480
+ function renderFailureHistoryDetail(issue) {
481
+ // Check if issue has failure feedback
482
+ if (!issue.feedback || issue.feedback.length === 0) {
483
+ return '';
484
+ }
485
+
486
+ // Extract failure feedbacks
487
+ const failures = issue.feedback.filter(f => f.type === 'failure' && f.stage === 'execute');
488
+ if (failures.length === 0) {
489
+ return '';
490
+ }
491
+
492
+ return `
493
+ <div class="detail-section">
494
+ <label class="detail-label">${t('issues.failureHistory') || 'Failure History'} (${failures.length})</label>
495
+ <div class="failure-history-list">
496
+ ${failures.map((failure, index) => {
497
+ let failureDetail;
498
+ try {
499
+ failureDetail = JSON.parse(failure.content);
500
+ } catch {
501
+ return '';
502
+ }
503
+
504
+ const errorMessage = failureDetail.message || 'Unknown error';
505
+ const errorType = failureDetail.error_type || 'error';
506
+ const taskId = failureDetail.task_id;
507
+ const timestamp = failure.created_at ? new Date(failure.created_at).toLocaleString() : 'Unknown time';
508
+
509
+ return `
510
+ <div class="failure-history-item">
511
+ <div class="failure-history-header">
512
+ <i data-lucide="alert-circle" class="w-4 h-4"></i>
513
+ <span class="failure-history-count">Failure ${index + 1}</span>
514
+ <span class="failure-history-timestamp text-xs text-muted-foreground">${timestamp}</span>
515
+ </div>
516
+ <div class="failure-history-content">
517
+ ${taskId ? `
518
+ <div class="failure-history-task">
519
+ <span class="detail-label-sm">Task:</span>
520
+ <span class="font-mono text-xs">${taskId}</span>
521
+ </div>
522
+ ` : ''}
523
+ <div class="failure-history-error">
524
+ <span class="detail-label-sm">Error Type:</span>
525
+ <span class="font-mono text-xs">${errorType}</span>
526
+ </div>
527
+ <div class="failure-history-message">
528
+ <span class="detail-label-sm">Message:</span>
529
+ <pre class="detail-pre text-xs">${escapeHtml(errorMessage)}</pre>
530
+ </div>
531
+ ${failureDetail.stack_trace ? `
532
+ <details class="failure-history-stacktrace">
533
+ <summary class="cursor-pointer text-xs text-muted-foreground">Show Stack Trace</summary>
534
+ <pre class="detail-pre text-xs mt-1 max-h-60 overflow-auto">${escapeHtml(failureDetail.stack_trace)}</pre>
535
+ </details>
536
+ ` : ''}
537
+ </div>
538
+ </div>
539
+ `;
540
+ }).join('')}
541
+ </div>
542
+ </div>
543
+ `;
544
+ }
545
+
546
+ // Helper: Truncate text to max length
547
+ function truncateText(text, maxLength) {
548
+ if (!text || text.length <= maxLength) return text;
549
+ return text.substring(0, maxLength - 3) + '...';
550
+ }
551
+
438
552
  function renderPriorityStars(priority) {
439
553
  const maxStars = 5;
440
554
  let stars = '';
@@ -879,6 +993,7 @@ function renderQueueItemWithDelete(item, index, total, queueId) {
879
993
  <i data-lucide="link" class="w-3 h-3"></i>
880
994
  </span>
881
995
  ` : ''}
996
+ ${renderQueueItemFailureInfo(item)}
882
997
  <button class="queue-item-delete btn-icon" onclick="event.stopPropagation(); deleteQueueItem('${safeQueueId}', '${safeItemId}')" title="Delete item">
883
998
  <i data-lucide="trash-2" class="w-3 h-3"></i>
884
999
  </button>
@@ -886,6 +1001,47 @@ function renderQueueItemWithDelete(item, index, total, queueId) {
886
1001
  `;
887
1002
  }
888
1003
 
1004
+ // Render failure info for queue items
1005
+ function renderQueueItemFailureInfo(item) {
1006
+ // Only show for failed items
1007
+ if (item.status !== 'failed') {
1008
+ return '';
1009
+ }
1010
+
1011
+ // Check failure_details or failure_reason
1012
+ const failureDetails = item.failure_details;
1013
+ const failureReason = item.failure_reason;
1014
+
1015
+ if (!failureDetails && !failureReason) {
1016
+ return '';
1017
+ }
1018
+
1019
+ let errorType = 'error';
1020
+ let errorMessage = 'Unknown error';
1021
+
1022
+ if (failureDetails) {
1023
+ errorType = failureDetails.error_type || 'error';
1024
+ errorMessage = failureDetails.message || 'Unknown error';
1025
+ } else if (failureReason) {
1026
+ // Try to parse as JSON
1027
+ try {
1028
+ const parsed = JSON.parse(failureReason);
1029
+ errorType = parsed.error_type || 'error';
1030
+ errorMessage = parsed.message || failureReason;
1031
+ } catch {
1032
+ errorMessage = failureReason;
1033
+ }
1034
+ }
1035
+
1036
+ return `
1037
+ <span class="queue-item-failure text-xs" title="${escapeHtml(errorMessage)}">
1038
+ <i data-lucide="alert-circle" class="w-3 h-3"></i>
1039
+ <span class="failure-type">${escapeHtml(errorType)}:</span>
1040
+ <span class="failure-msg">${escapeHtml(truncateText(errorMessage, 40))}</span>
1041
+ </span>
1042
+ `;
1043
+ }
1044
+
889
1045
  async function deleteQueueItem(queueId, itemId) {
890
1046
  if (!confirm('Delete this item from queue?')) return;
891
1047
 
@@ -1599,6 +1755,9 @@ function renderIssueDetailPanel(issue) {
1599
1755
  </div>
1600
1756
  </div>
1601
1757
 
1758
+ <!-- Failure History -->
1759
+ ${renderFailureHistoryDetail(issue)}
1760
+
1602
1761
  <!-- Solutions -->
1603
1762
  <div class="detail-section">
1604
1763
  <label class="detail-label">${t('issues.solutions') || 'Solutions'} (${issue.solutions?.length || 0})</label>