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
|
@@ -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>
|