claude-code-workflow 6.1.1 → 6.1.4
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/commands/workflow/execute.md +3 -1
- package/.claude/skills/command-guide/SKILL.md +3 -3
- package/.claude/workflows/tool-strategy.md +79 -90
- package/README.md +7 -18
- package/ccw/src/cli.js +5 -2
- package/ccw/src/commands/tool.js +18 -97
- package/ccw/src/core/lite-scanner.js +60 -1
- package/ccw/src/core/server.js +2063 -1948
- package/ccw/src/templates/dashboard-css/01-base.css +130 -0
- package/ccw/src/templates/dashboard-css/04-lite-tasks.css +328 -0
- package/ccw/src/templates/dashboard-js/components/version-check.js +167 -0
- package/ccw/src/templates/dashboard-js/main.js +1 -0
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +11 -9
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +294 -4
- package/package.json +67 -67
|
@@ -136,6 +136,13 @@ function showLiteTaskDetailPage(sessionKey) {
|
|
|
136
136
|
<span class="tab-icon"><i data-lucide="ruler" class="w-4 h-4"></i></span>
|
|
137
137
|
<span class="tab-text">Plan</span>
|
|
138
138
|
</button>
|
|
139
|
+
${session.type === 'lite-fix' ? `
|
|
140
|
+
<button class="detail-tab" data-tab="diagnoses" onclick="switchLiteDetailTab('diagnoses')">
|
|
141
|
+
<span class="tab-icon"><i data-lucide="stethoscope" class="w-4 h-4"></i></span>
|
|
142
|
+
<span class="tab-text">Diagnoses</span>
|
|
143
|
+
${session.diagnoses?.items?.length ? `<span class="tab-count">${session.diagnoses.items.length}</span>` : ''}
|
|
144
|
+
</button>
|
|
145
|
+
` : ''}
|
|
139
146
|
<button class="detail-tab" data-tab="context" onclick="switchLiteDetailTab('context')">
|
|
140
147
|
<span class="tab-icon"><i data-lucide="package" class="w-4 h-4"></i></span>
|
|
141
148
|
<span class="tab-text">Context</span>
|
|
@@ -196,6 +203,17 @@ function switchLiteDetailTab(tabName) {
|
|
|
196
203
|
break;
|
|
197
204
|
case 'plan':
|
|
198
205
|
contentArea.innerHTML = renderLitePlanTab(session);
|
|
206
|
+
// Re-initialize collapsible sections for plan tab
|
|
207
|
+
setTimeout(() => {
|
|
208
|
+
initCollapsibleSections(contentArea);
|
|
209
|
+
}, 50);
|
|
210
|
+
break;
|
|
211
|
+
case 'diagnoses':
|
|
212
|
+
contentArea.innerHTML = renderDiagnosesTab(session);
|
|
213
|
+
// Re-initialize collapsible sections for diagnoses tab
|
|
214
|
+
setTimeout(() => {
|
|
215
|
+
initCollapsibleSections(contentArea);
|
|
216
|
+
}, 50);
|
|
199
217
|
break;
|
|
200
218
|
case 'context':
|
|
201
219
|
loadAndRenderLiteContextTab(session, contentArea);
|
|
@@ -287,13 +305,14 @@ function openTaskDrawerForLite(sessionId, taskId) {
|
|
|
287
305
|
|
|
288
306
|
function renderLitePlanTab(session) {
|
|
289
307
|
const plan = session.plan;
|
|
308
|
+
const isFixPlan = session.type === 'lite-fix';
|
|
290
309
|
|
|
291
310
|
if (!plan) {
|
|
292
311
|
return `
|
|
293
312
|
<div class="tab-empty-state">
|
|
294
313
|
<div class="empty-icon"><i data-lucide="ruler" class="w-12 h-12"></i></div>
|
|
295
314
|
<div class="empty-title">No Plan Data</div>
|
|
296
|
-
<div class="empty-text">No plan.json found for this session.</div>
|
|
315
|
+
<div class="empty-text">No ${isFixPlan ? 'fix-plan.json' : 'plan.json'} found for this session.</div>
|
|
297
316
|
</div>
|
|
298
317
|
`;
|
|
299
318
|
}
|
|
@@ -308,6 +327,22 @@ function renderLitePlanTab(session) {
|
|
|
308
327
|
</div>
|
|
309
328
|
` : ''}
|
|
310
329
|
|
|
330
|
+
<!-- Root Cause (fix-plan specific) -->
|
|
331
|
+
${plan.root_cause ? `
|
|
332
|
+
<div class="plan-section">
|
|
333
|
+
<h4 class="plan-section-title"><i data-lucide="search" class="w-4 h-4 inline mr-1"></i> Root Cause</h4>
|
|
334
|
+
<p class="plan-root-cause-text">${escapeHtml(plan.root_cause)}</p>
|
|
335
|
+
</div>
|
|
336
|
+
` : ''}
|
|
337
|
+
|
|
338
|
+
<!-- Strategy (fix-plan specific) -->
|
|
339
|
+
${plan.strategy ? `
|
|
340
|
+
<div class="plan-section">
|
|
341
|
+
<h4 class="plan-section-title"><i data-lucide="route" class="w-4 h-4 inline mr-1"></i> Fix Strategy</h4>
|
|
342
|
+
<p class="plan-strategy-text">${escapeHtml(plan.strategy)}</p>
|
|
343
|
+
</div>
|
|
344
|
+
` : ''}
|
|
345
|
+
|
|
311
346
|
<!-- Approach -->
|
|
312
347
|
${plan.approach ? `
|
|
313
348
|
<div class="plan-section">
|
|
@@ -316,6 +351,14 @@ function renderLitePlanTab(session) {
|
|
|
316
351
|
</div>
|
|
317
352
|
` : ''}
|
|
318
353
|
|
|
354
|
+
<!-- User Requirements (fix-plan specific) -->
|
|
355
|
+
${plan.user_requirements ? `
|
|
356
|
+
<div class="plan-section">
|
|
357
|
+
<h4 class="plan-section-title"><i data-lucide="user" class="w-4 h-4 inline mr-1"></i> User Requirements</h4>
|
|
358
|
+
<p class="plan-requirements-text">${escapeHtml(plan.user_requirements)}</p>
|
|
359
|
+
</div>
|
|
360
|
+
` : ''}
|
|
361
|
+
|
|
319
362
|
<!-- Focus Paths -->
|
|
320
363
|
${plan.focus_paths?.length ? `
|
|
321
364
|
<div class="plan-section">
|
|
@@ -330,16 +373,74 @@ function renderLitePlanTab(session) {
|
|
|
330
373
|
<div class="plan-section">
|
|
331
374
|
<h4 class="plan-section-title"><i data-lucide="info" class="w-4 h-4 inline mr-1"></i> Metadata</h4>
|
|
332
375
|
<div class="plan-meta-grid">
|
|
376
|
+
${plan.severity ? `<div class="meta-item"><span class="meta-label">Severity:</span> <span class="severity-badge ${escapeHtml(plan.severity)}">${escapeHtml(plan.severity)}</span></div>` : ''}
|
|
377
|
+
${plan.risk_level ? `<div class="meta-item"><span class="meta-label">Risk Level:</span> <span class="risk-badge ${escapeHtml(plan.risk_level)}">${escapeHtml(plan.risk_level)}</span></div>` : ''}
|
|
333
378
|
${plan.estimated_time ? `<div class="meta-item"><span class="meta-label">Estimated Time:</span> ${escapeHtml(plan.estimated_time)}</div>` : ''}
|
|
334
379
|
${plan.complexity ? `<div class="meta-item"><span class="meta-label">Complexity:</span> ${escapeHtml(plan.complexity)}</div>` : ''}
|
|
335
380
|
${plan.recommended_execution ? `<div class="meta-item"><span class="meta-label">Execution:</span> ${escapeHtml(plan.recommended_execution)}</div>` : ''}
|
|
336
381
|
</div>
|
|
337
382
|
</div>
|
|
338
383
|
|
|
384
|
+
<!-- Fix Tasks Summary (fix-plan specific) -->
|
|
385
|
+
${plan.tasks?.length ? `
|
|
386
|
+
<div class="plan-section">
|
|
387
|
+
<h4 class="plan-section-title"><i data-lucide="list-checks" class="w-4 h-4 inline mr-1"></i> Fix Tasks (${plan.tasks.length})</h4>
|
|
388
|
+
<div class="fix-tasks-summary">
|
|
389
|
+
${plan.tasks.map((task, idx) => `
|
|
390
|
+
<div class="fix-task-summary-item collapsible-section">
|
|
391
|
+
<div class="collapsible-header">
|
|
392
|
+
<span class="collapse-icon">▶</span>
|
|
393
|
+
<span class="task-num">#${idx + 1}</span>
|
|
394
|
+
<span class="task-title-brief">${escapeHtml(task.title || task.summary || 'Untitled')}</span>
|
|
395
|
+
${task.scope ? `<span class="task-scope-badge">${escapeHtml(task.scope)}</span>` : ''}
|
|
396
|
+
</div>
|
|
397
|
+
<div class="collapsible-content collapsed">
|
|
398
|
+
${task.modification_points?.length ? `
|
|
399
|
+
<div class="task-detail-section">
|
|
400
|
+
<strong>Modification Points:</strong>
|
|
401
|
+
<ul class="mod-points-list">
|
|
402
|
+
${task.modification_points.map(mp => `
|
|
403
|
+
<li>
|
|
404
|
+
<code>${escapeHtml(mp.file || '')}</code>
|
|
405
|
+
${mp.function_name ? `<span class="func-name">→ ${escapeHtml(mp.function_name)}</span>` : ''}
|
|
406
|
+
${mp.change_type ? `<span class="change-type">(${escapeHtml(mp.change_type)})</span>` : ''}
|
|
407
|
+
</li>
|
|
408
|
+
`).join('')}
|
|
409
|
+
</ul>
|
|
410
|
+
</div>
|
|
411
|
+
` : ''}
|
|
412
|
+
${task.implementation?.length ? `
|
|
413
|
+
<div class="task-detail-section">
|
|
414
|
+
<strong>Implementation Steps:</strong>
|
|
415
|
+
<ol class="impl-steps-list">
|
|
416
|
+
${task.implementation.map(step => `<li>${escapeHtml(step)}</li>`).join('')}
|
|
417
|
+
</ol>
|
|
418
|
+
</div>
|
|
419
|
+
` : ''}
|
|
420
|
+
${task.verification?.length ? `
|
|
421
|
+
<div class="task-detail-section">
|
|
422
|
+
<strong>Verification:</strong>
|
|
423
|
+
<ul class="verify-list">
|
|
424
|
+
${task.verification.map(v => `<li>${escapeHtml(v)}</li>`).join('')}
|
|
425
|
+
</ul>
|
|
426
|
+
</div>
|
|
427
|
+
` : ''}
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
`).join('')}
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
` : ''}
|
|
434
|
+
|
|
339
435
|
<!-- Raw JSON -->
|
|
340
|
-
<div class="plan-section">
|
|
341
|
-
<
|
|
342
|
-
|
|
436
|
+
<div class="plan-section collapsible-section">
|
|
437
|
+
<div class="collapsible-header">
|
|
438
|
+
<span class="collapse-icon">▶</span>
|
|
439
|
+
<span class="section-label">{ } Raw JSON</span>
|
|
440
|
+
</div>
|
|
441
|
+
<div class="collapsible-content collapsed">
|
|
442
|
+
<pre class="json-content">${escapeHtml(JSON.stringify(plan, null, 2))}</pre>
|
|
443
|
+
</div>
|
|
343
444
|
</div>
|
|
344
445
|
</div>
|
|
345
446
|
`;
|
|
@@ -393,3 +494,192 @@ async function loadAndRenderLiteSummaryTab(session, contentArea) {
|
|
|
393
494
|
contentArea.innerHTML = `<div class="tab-error">Failed to load summaries: ${err.message}</div>`;
|
|
394
495
|
}
|
|
395
496
|
}
|
|
497
|
+
|
|
498
|
+
// ============================================
|
|
499
|
+
// DIAGNOSES TAB RENDERING (lite-fix specific)
|
|
500
|
+
// ============================================
|
|
501
|
+
|
|
502
|
+
function renderDiagnosesTab(session) {
|
|
503
|
+
const diagnoses = session.diagnoses;
|
|
504
|
+
|
|
505
|
+
if (!diagnoses || (!diagnoses.manifest && diagnoses.items?.length === 0)) {
|
|
506
|
+
return `
|
|
507
|
+
<div class="tab-empty-state">
|
|
508
|
+
<div class="empty-icon"><i data-lucide="stethoscope" class="w-12 h-12"></i></div>
|
|
509
|
+
<div class="empty-title">No Diagnoses</div>
|
|
510
|
+
<div class="empty-text">No diagnosis-*.json files found for this session.</div>
|
|
511
|
+
</div>
|
|
512
|
+
`;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
let sections = [];
|
|
516
|
+
|
|
517
|
+
// Manifest summary (if available)
|
|
518
|
+
if (diagnoses.manifest) {
|
|
519
|
+
sections.push(`
|
|
520
|
+
<div class="diagnoses-manifest-section">
|
|
521
|
+
<h4 class="diagnoses-section-title"><i data-lucide="clipboard-check" class="w-4 h-4 inline mr-1"></i> Diagnosis Summary</h4>
|
|
522
|
+
<div class="manifest-meta-grid">
|
|
523
|
+
${diagnoses.manifest.total_diagnoses ? `<div class="meta-item"><span class="meta-label">Total Diagnoses:</span> ${diagnoses.manifest.total_diagnoses}</div>` : ''}
|
|
524
|
+
${diagnoses.manifest.diagnosis_angles ? `<div class="meta-item"><span class="meta-label">Angles:</span> ${diagnoses.manifest.diagnosis_angles.join(', ')}</div>` : ''}
|
|
525
|
+
${diagnoses.manifest.created_at ? `<div class="meta-item"><span class="meta-label">Created:</span> ${formatDate(diagnoses.manifest.created_at)}</div>` : ''}
|
|
526
|
+
</div>
|
|
527
|
+
</div>
|
|
528
|
+
`);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Individual diagnosis items
|
|
532
|
+
if (diagnoses.items && diagnoses.items.length > 0) {
|
|
533
|
+
const diagnosisCards = diagnoses.items.map(diag => renderDiagnosisCard(diag)).join('');
|
|
534
|
+
sections.push(`
|
|
535
|
+
<div class="diagnoses-items-section">
|
|
536
|
+
<h4 class="diagnoses-section-title"><i data-lucide="search" class="w-4 h-4 inline mr-1"></i> Diagnosis Details (${diagnoses.items.length})</h4>
|
|
537
|
+
<div class="diagnoses-grid">
|
|
538
|
+
${diagnosisCards}
|
|
539
|
+
</div>
|
|
540
|
+
</div>
|
|
541
|
+
`);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
return `<div class="diagnoses-tab-content">${sections.join('')}</div>`;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
function renderDiagnosisCard(diag) {
|
|
548
|
+
const diagJsonId = `diag-json-${diag.id}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
549
|
+
taskJsonStore[diagJsonId] = diag;
|
|
550
|
+
|
|
551
|
+
return `
|
|
552
|
+
<div class="diagnosis-card collapsible-section">
|
|
553
|
+
<div class="collapsible-header diagnosis-header">
|
|
554
|
+
<span class="collapse-icon">▶</span>
|
|
555
|
+
<span class="diagnosis-id"><i data-lucide="file-search" class="w-4 h-4 inline mr-1"></i>${escapeHtml(diag.id)}</span>
|
|
556
|
+
<button class="btn-view-json" onclick="event.stopPropagation(); showJsonModal('${diagJsonId}', '${escapeHtml(diag.id)}')">{ } JSON</button>
|
|
557
|
+
</div>
|
|
558
|
+
<div class="collapsible-content collapsed">
|
|
559
|
+
${renderDiagnosisContent(diag)}
|
|
560
|
+
</div>
|
|
561
|
+
</div>
|
|
562
|
+
`;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
function renderDiagnosisContent(diag) {
|
|
566
|
+
let content = [];
|
|
567
|
+
|
|
568
|
+
// Summary/Overview
|
|
569
|
+
if (diag.summary || diag.overview) {
|
|
570
|
+
content.push(`
|
|
571
|
+
<div class="diag-section">
|
|
572
|
+
<strong>Summary:</strong>
|
|
573
|
+
<p>${escapeHtml(diag.summary || diag.overview)}</p>
|
|
574
|
+
</div>
|
|
575
|
+
`);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// Root Cause Analysis
|
|
579
|
+
if (diag.root_cause || diag.root_cause_analysis) {
|
|
580
|
+
content.push(`
|
|
581
|
+
<div class="diag-section">
|
|
582
|
+
<strong>Root Cause:</strong>
|
|
583
|
+
<p>${escapeHtml(diag.root_cause || diag.root_cause_analysis)}</p>
|
|
584
|
+
</div>
|
|
585
|
+
`);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Issues/Findings
|
|
589
|
+
if (diag.issues && Array.isArray(diag.issues)) {
|
|
590
|
+
content.push(`
|
|
591
|
+
<div class="diag-section">
|
|
592
|
+
<strong>Issues Found (${diag.issues.length}):</strong>
|
|
593
|
+
<ul class="issues-list">
|
|
594
|
+
${diag.issues.map(issue => `
|
|
595
|
+
<li class="issue-item">
|
|
596
|
+
${typeof issue === 'string' ? escapeHtml(issue) : `
|
|
597
|
+
<div class="issue-title">${escapeHtml(issue.title || issue.description || 'Unknown')}</div>
|
|
598
|
+
${issue.location ? `<div class="issue-location"><code>${escapeHtml(issue.location)}</code></div>` : ''}
|
|
599
|
+
${issue.severity ? `<span class="severity-badge ${issue.severity}">${escapeHtml(issue.severity)}</span>` : ''}
|
|
600
|
+
`}
|
|
601
|
+
</li>
|
|
602
|
+
`).join('')}
|
|
603
|
+
</ul>
|
|
604
|
+
</div>
|
|
605
|
+
`);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// Affected Files
|
|
609
|
+
if (diag.affected_files && Array.isArray(diag.affected_files)) {
|
|
610
|
+
content.push(`
|
|
611
|
+
<div class="diag-section">
|
|
612
|
+
<strong>Affected Files:</strong>
|
|
613
|
+
<div class="path-tags">
|
|
614
|
+
${diag.affected_files.map(f => `<span class="path-tag">${escapeHtml(typeof f === 'string' ? f : f.path || f.file)}</span>`).join('')}
|
|
615
|
+
</div>
|
|
616
|
+
</div>
|
|
617
|
+
`);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// API Contracts (for api-contracts diagnosis)
|
|
621
|
+
if (diag.contracts && Array.isArray(diag.contracts)) {
|
|
622
|
+
content.push(`
|
|
623
|
+
<div class="diag-section">
|
|
624
|
+
<strong>API Contracts (${diag.contracts.length}):</strong>
|
|
625
|
+
<div class="contracts-list">
|
|
626
|
+
${diag.contracts.map(contract => `
|
|
627
|
+
<div class="contract-item">
|
|
628
|
+
<div class="contract-header">
|
|
629
|
+
<span class="contract-endpoint">${escapeHtml(contract.endpoint || contract.name || 'Unknown')}</span>
|
|
630
|
+
${contract.method ? `<span class="contract-method">${escapeHtml(contract.method)}</span>` : ''}
|
|
631
|
+
</div>
|
|
632
|
+
${contract.description ? `<div class="contract-desc">${escapeHtml(contract.description)}</div>` : ''}
|
|
633
|
+
${contract.issues?.length ? `<div class="contract-issues">${contract.issues.length} issue(s)</div>` : ''}
|
|
634
|
+
</div>
|
|
635
|
+
`).join('')}
|
|
636
|
+
</div>
|
|
637
|
+
</div>
|
|
638
|
+
`);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
// Dataflow Analysis (for dataflow diagnosis)
|
|
642
|
+
if (diag.dataflow || diag.data_flow) {
|
|
643
|
+
const df = diag.dataflow || diag.data_flow;
|
|
644
|
+
content.push(`
|
|
645
|
+
<div class="diag-section">
|
|
646
|
+
<strong>Data Flow Analysis:</strong>
|
|
647
|
+
${typeof df === 'string' ? `<p>${escapeHtml(df)}</p>` : `
|
|
648
|
+
<div class="dataflow-details">
|
|
649
|
+
${df.source ? `<div class="df-item"><span class="df-label">Source:</span> ${escapeHtml(df.source)}</div>` : ''}
|
|
650
|
+
${df.sink ? `<div class="df-item"><span class="df-label">Sink:</span> ${escapeHtml(df.sink)}</div>` : ''}
|
|
651
|
+
${df.transformations?.length ? `
|
|
652
|
+
<div class="df-item">
|
|
653
|
+
<span class="df-label">Transformations:</span>
|
|
654
|
+
<ol class="df-transforms">${df.transformations.map(t => `<li>${escapeHtml(t)}</li>`).join('')}</ol>
|
|
655
|
+
</div>
|
|
656
|
+
` : ''}
|
|
657
|
+
</div>
|
|
658
|
+
`}
|
|
659
|
+
</div>
|
|
660
|
+
`);
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
// Recommendations
|
|
664
|
+
if (diag.recommendations && Array.isArray(diag.recommendations)) {
|
|
665
|
+
content.push(`
|
|
666
|
+
<div class="diag-section">
|
|
667
|
+
<strong>Recommendations:</strong>
|
|
668
|
+
<ol class="recommendations-list">
|
|
669
|
+
${diag.recommendations.map(rec => `<li>${escapeHtml(typeof rec === 'string' ? rec : rec.description || rec.action)}</li>`).join('')}
|
|
670
|
+
</ol>
|
|
671
|
+
</div>
|
|
672
|
+
`);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
// If no specific content was rendered, show raw JSON preview
|
|
676
|
+
if (content.length === 0) {
|
|
677
|
+
content.push(`
|
|
678
|
+
<div class="diag-section">
|
|
679
|
+
<pre class="json-content">${escapeHtml(JSON.stringify(diag, null, 2))}</pre>
|
|
680
|
+
</div>
|
|
681
|
+
`);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
return content.join('');
|
|
685
|
+
}
|
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "claude-code-workflow",
|
|
3
|
-
"version": "6.1.
|
|
4
|
-
"description": "JSON-driven multi-agent development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "ccw/src/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"ccw": "./ccw/bin/ccw.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"start": "node ccw/bin/ccw.js",
|
|
12
|
-
"test": "node --test",
|
|
13
|
-
"prepublishOnly": "echo 'Ready to publish @dyw/claude-code-workflow'"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"claude",
|
|
17
|
-
"workflow",
|
|
18
|
-
"ai",
|
|
19
|
-
"cli",
|
|
20
|
-
"dashboard",
|
|
21
|
-
"code-review",
|
|
22
|
-
"automation",
|
|
23
|
-
"development"
|
|
24
|
-
],
|
|
25
|
-
"author": "dyw",
|
|
26
|
-
"license": "MIT",
|
|
27
|
-
"engines": {
|
|
28
|
-
"node": ">=16.0.0"
|
|
29
|
-
},
|
|
30
|
-
"dependencies": {
|
|
31
|
-
"boxen": "^7.1.0",
|
|
32
|
-
"chalk": "^5.3.0",
|
|
33
|
-
"commander": "^11.0.0",
|
|
34
|
-
"figlet": "^1.7.0",
|
|
35
|
-
"glob": "^10.3.0",
|
|
36
|
-
"gradient-string": "^2.0.2",
|
|
37
|
-
"inquirer": "^9.2.0",
|
|
38
|
-
"open": "^9.1.0",
|
|
39
|
-
"ora": "^7.0.0"
|
|
40
|
-
},
|
|
41
|
-
"files": [
|
|
42
|
-
"ccw/bin/",
|
|
43
|
-
"ccw/src/",
|
|
44
|
-
"ccw/package.json",
|
|
45
|
-
".claude/agents/",
|
|
46
|
-
".claude/commands/",
|
|
47
|
-
".claude/output-styles/",
|
|
48
|
-
".claude/workflows/",
|
|
49
|
-
".claude/scripts/",
|
|
50
|
-
".claude/prompt-templates/",
|
|
51
|
-
".claude/python_script/",
|
|
52
|
-
".claude/skills/",
|
|
53
|
-
".codex/",
|
|
54
|
-
".gemini/",
|
|
55
|
-
".qwen/",
|
|
56
|
-
"CLAUDE.md",
|
|
57
|
-
"README.md"
|
|
58
|
-
],
|
|
59
|
-
"repository": {
|
|
60
|
-
"type": "git",
|
|
61
|
-
"url": "git+https://github.com/catlog22/Claude-Code-Workflow.git"
|
|
62
|
-
},
|
|
63
|
-
"bugs": {
|
|
64
|
-
"url": "https://github.com/catlog22/Claude-Code-Workflow/issues"
|
|
65
|
-
},
|
|
66
|
-
"homepage": "https://github.com/catlog22/Claude-Code-Workflow#readme"
|
|
67
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-code-workflow",
|
|
3
|
+
"version": "6.1.4",
|
|
4
|
+
"description": "JSON-driven multi-agent development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "ccw/src/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ccw": "./ccw/bin/ccw.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "node ccw/bin/ccw.js",
|
|
12
|
+
"test": "node --test",
|
|
13
|
+
"prepublishOnly": "echo 'Ready to publish @dyw/claude-code-workflow'"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude",
|
|
17
|
+
"workflow",
|
|
18
|
+
"ai",
|
|
19
|
+
"cli",
|
|
20
|
+
"dashboard",
|
|
21
|
+
"code-review",
|
|
22
|
+
"automation",
|
|
23
|
+
"development"
|
|
24
|
+
],
|
|
25
|
+
"author": "dyw",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=16.0.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"boxen": "^7.1.0",
|
|
32
|
+
"chalk": "^5.3.0",
|
|
33
|
+
"commander": "^11.0.0",
|
|
34
|
+
"figlet": "^1.7.0",
|
|
35
|
+
"glob": "^10.3.0",
|
|
36
|
+
"gradient-string": "^2.0.2",
|
|
37
|
+
"inquirer": "^9.2.0",
|
|
38
|
+
"open": "^9.1.0",
|
|
39
|
+
"ora": "^7.0.0"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"ccw/bin/",
|
|
43
|
+
"ccw/src/",
|
|
44
|
+
"ccw/package.json",
|
|
45
|
+
".claude/agents/",
|
|
46
|
+
".claude/commands/",
|
|
47
|
+
".claude/output-styles/",
|
|
48
|
+
".claude/workflows/",
|
|
49
|
+
".claude/scripts/",
|
|
50
|
+
".claude/prompt-templates/",
|
|
51
|
+
".claude/python_script/",
|
|
52
|
+
".claude/skills/",
|
|
53
|
+
".codex/",
|
|
54
|
+
".gemini/",
|
|
55
|
+
".qwen/",
|
|
56
|
+
"CLAUDE.md",
|
|
57
|
+
"README.md"
|
|
58
|
+
],
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/catlog22/Claude-Code-Workflow.git"
|
|
62
|
+
},
|
|
63
|
+
"bugs": {
|
|
64
|
+
"url": "https://github.com/catlog22/Claude-Code-Workflow/issues"
|
|
65
|
+
},
|
|
66
|
+
"homepage": "https://github.com/catlog22/Claude-Code-Workflow#readme"
|
|
67
|
+
}
|