claude-code-workflow 7.2.10 → 7.2.12
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-planning-agent.md +3 -0
- package/.claude/agents/debug-explore-agent.md +1 -0
- package/.claude/agents/tdd-developer.md +1 -0
- package/.claude/agents/team-worker.md +1 -1
- package/.claude/agents/test-action-planning-agent.md +3 -0
- package/.claude/agents/test-context-search-agent.md +1 -0
- package/.claude/agents/test-fix-agent.md +3 -0
- package/.claude/commands/workflow/analyze-with-file.md +108 -54
- package/.claude/commands/workflow-tune.md +811 -0
- package/.claude/skills/review-code/SKILL.md +2 -0
- package/.claude/skills/review-cycle/SKILL.md +4 -0
- package/.claude/skills/skill-simplify/phases/02-optimize.md +4 -0
- package/.claude/skills/spec-generator/phases/05-epics-stories.md +4 -0
- package/.claude/skills/team-arch-opt/specs/team-config.json +5 -5
- package/.claude/skills/team-frontend-debug/roles/analyzer/role.md +3 -2
- package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +5 -5
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +2 -1
- package/.claude/skills/team-review/roles/reviewer/role.md +2 -1
- package/.claude/skills/team-tech-debt/roles/scanner/role.md +2 -1
- package/.claude/skills/team-testing/roles/executor/role.md +2 -1
- package/.claude/skills/team-testing/roles/generator/role.md +2 -1
- package/.claude/skills/team-ultra-analyze/roles/explorer/role.md +2 -1
- package/.claude/skills/team-ux-improve/specs/team-config.json +6 -6
- package/.claude/skills/workflow-execute/phases/06-review.md +4 -4
- package/.claude/skills/workflow-lite-execute/SKILL.md +106 -14
- package/.claude/skills/workflow-lite-plan/SKILL.md +34 -72
- package/.claude/skills/workflow-lite-test-review/SKILL.md +41 -26
- package/.claude/skills/workflow-plan/phases/05-plan-verify.md +4 -0
- package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +1 -0
- package/.claude/skills/workflow-tdd-plan/phases/05-tdd-task-generation.md +2 -1
- package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +1 -0
- package/.claude/skills/workflow-test-fix/phases/05-test-cycle-execute.md +2 -1
- package/.codex/skills/analyze-with-file/SKILL.md +2 -0
- package/.codex/skills/debug-with-file/SKILL.md +4 -0
- package/.codex/skills/issue-discover/SKILL.md +1 -0
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +3 -0
- package/.codex/skills/team-designer/agents/validation-reporter.md +186 -0
- package/.codex/skills/team-iterdev/agents/gc-controller.md +193 -0
- package/.codex/skills/team-iterdev/agents/task-analyzer.md +206 -0
- package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -0
- package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -0
- package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +182 -0
- package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -0
- package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +162 -0
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +4 -0
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +2 -0
- package/ccw/dist/commands/spec.d.ts.map +1 -1
- package/ccw/dist/commands/spec.js +9 -4
- package/ccw/dist/commands/spec.js.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.js +3 -1
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
- package/ccw/dist/tools/spec-index-builder.d.ts +8 -4
- package/ccw/dist/tools/spec-index-builder.d.ts.map +1 -1
- package/ccw/dist/tools/spec-index-builder.js +8 -4
- package/ccw/dist/tools/spec-index-builder.js.map +1 -1
- package/ccw/dist/tools/spec-init.d.ts +1 -1
- package/ccw/dist/tools/spec-init.d.ts.map +1 -1
- package/ccw/dist/tools/spec-init.js +127 -0
- package/ccw/dist/tools/spec-init.js.map +1 -1
- package/ccw/dist/tools/spec-loader.d.ts.map +1 -1
- package/ccw/dist/tools/spec-loader.js +2 -1
- package/ccw/dist/tools/spec-loader.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js → AlertDialog-BW9jiZ-p.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js → AnalysisPage-ds-w_nVO.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js → ApiSettingsPage-DlCbXxTz.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js.map → ApiSettingsPage-DlCbXxTz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js → CliModeToggle-Dq3nL4fF.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js.map → CliModeToggle-Dq3nL4fF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js → CliSessionSharePage-BNDkEE4u.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js.map → CliSessionSharePage-BNDkEE4u.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js → CliViewerPage-ChM-uNx_.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js.map → CliViewerPage-ChM-uNx_.js.map} +1 -1
- package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js +2 -0
- package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js.map +1 -0
- package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js → Collapsible-CRNbykXN.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js.map → Collapsible-CRNbykXN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js → CommandsManagerPage-C2JWcemF.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js.map → CommandsManagerPage-C2JWcemF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js → DeepWikiPage-CvleOtJy.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js.map → DeepWikiPage-CvleOtJy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js → EndpointsPage-CMOWQG64.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js.map → EndpointsPage-CMOWQG64.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js → ExplorerPage-DaFPRlNo.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js.map → ExplorerPage-DaFPRlNo.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js → FixSessionPage-CC4p04Az.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js.map → FixSessionPage-CC4p04Az.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js → FloatingFileBrowser-DROn1xZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js.map → FloatingFileBrowser-DROn1xZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js → FloatingPanel-CmL_yhDv.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js.map → FloatingPanel-CmL_yhDv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js → GraphExplorerPage-DCV5ybKE.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js.map → GraphExplorerPage-DCV5ybKE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js → HistoryPage-D0fYQZgc.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js.map → HistoryPage-D0fYQZgc.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js → HookManagerPage-D2FuJfsM.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js.map → HookManagerPage-D2FuJfsM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js → InstallationsPage-tjklillZ.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js.map → InstallationsPage-tjklillZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js → IssueHubPage-E4JVrhO1.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js.map → IssueHubPage-E4JVrhO1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js → LiteTasksPage-aJuRoyLt.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js.map → LiteTasksPage-aJuRoyLt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js → McpManagerPage-BJeuWJv1.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js.map → McpManagerPage-BJeuWJv1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js → MemoryPage-BI4FAXhs.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js.map → MemoryPage-BI4FAXhs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js → NotFoundPage-DD2svchp.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js.map → NotFoundPage-DD2svchp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js → OrchestratorPage-FC__7yYa.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js.map → OrchestratorPage-FC__7yYa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js → ProjectOverviewPage-DBB_-FzV.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js.map → ProjectOverviewPage-DBB_-FzV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js → PromptHistoryPage-BwOAvCH8.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js.map → PromptHistoryPage-BwOAvCH8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js → ReviewSessionPage-Dd1-g_gp.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js.map → ReviewSessionPage-Dd1-g_gp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js → RulesManagerPage-B3RGdsKD.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js.map → RulesManagerPage-B3RGdsKD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js → SessionDetailPage-DM-W5R8K.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js.map → SessionDetailPage-DM-W5R8K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js → SessionsPage-BVz1KCc7.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js.map → SessionsPage-BVz1KCc7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js → SettingsPage-ComW7EZS.js} +4 -4
- package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js.map → SettingsPage-ComW7EZS.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js → SkillsManagerPage-CKom9XwV.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js.map → SkillsManagerPage-CKom9XwV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js → SpecsSettingsPage-DQz7WP2s.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js.map → SpecsSettingsPage-DQz7WP2s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js → Switch-BPMdND9H.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js.map → Switch-BPMdND9H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js → TabsNavigation-qqt70VYL.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js.map → TabsNavigation-qqt70VYL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js → TaskDrawer-BqK_qiHX.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js.map → TaskDrawer-BqK_qiHX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js → TeamPage-u5_i0Rgh.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js.map → TeamPage-u5_i0Rgh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js → TerminalDashboardPage-rUtC9e40.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js.map → TerminalDashboardPage-rUtC9e40.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js → archive-C3u8YNQF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js.map → archive-C3u8YNQF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js → archive-restore-DfQ998g5.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js.map → archive-restore-DfQ998g5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js → arrow-right-BshJM9Po.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js.map → arrow-right-BshJM9Po.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js → bookmark-plus-D03qJyOZ.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js.map → bookmark-plus-D03qJyOZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js → bot-CyzWuwq0.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js.map → bot-CyzWuwq0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js → braces-BPgtyjsG.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js.map → braces-BPgtyjsG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js → circle-stop-Dix1AOmw.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js.map → circle-stop-Dix1AOmw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js → cpu-CCQ4Q0Zh.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js.map → cpu-CCQ4Q0Zh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js → ellipsis-vertical-BpTysg-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js.map → ellipsis-vertical-BpTysg-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js → eye-DGY1rAZs.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js.map → eye-DGY1rAZs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js → eye-off-D8t3JfWG.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js.map → eye-off-D8t3JfWG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js → file-json-BAdJb0n8.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js.map → file-json-BAdJb0n8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js → file-text-DrJFiOUB.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js.map → file-text-DrJFiOUB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js → filter-CKqzYbz7.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js.map → filter-CKqzYbz7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js → folder-CV8511y9.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js.map → folder-CV8511y9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js → gauge-XKvmu_uU.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js.map → gauge-XKvmu_uU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js → globe-C56cDUzX.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js.map → globe-C56cDUzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js → grid-3x3-Bya-suFW.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js.map → grid-3x3-Bya-suFW.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js → hard-drive-CmuTZpsB.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js.map → hard-drive-CmuTZpsB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Bd1RD285.js → hash-CRPT_tJQ.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Bd1RD285.js.map → hash-CRPT_tJQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-eyyCQA6b.js → history-C1pJZQCL.js} +2 -2
- package/ccw/frontend/dist/assets/{history-eyyCQA6b.js.map → history-C1pJZQCL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js → index-B6TpijCe.js} +2 -2
- package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js.map → index-B6TpijCe.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-b2C0iFd1.js → index-Bcq-7r6F.js} +2 -2
- package/ccw/frontend/dist/assets/{index-b2C0iFd1.js.map → index-Bcq-7r6F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js → index-CI8-rBff.js} +2 -2
- package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js.map → index-CI8-rBff.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CY6Lueph.js → index-Dmt9OiEf.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CY6Lueph.js.map → index-Dmt9OiEf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-DfeBbFXo.js → index-anSMmEF8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-DfeBbFXo.js.map → index-anSMmEF8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B6I7GQC5.js → index-dWT2M6Ef.js} +4 -4
- package/ccw/frontend/dist/assets/{index-B6I7GQC5.js.map → index-dWT2M6Ef.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js → layout-grid-TSO0BFQE.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js.map → layout-grid-TSO0BFQE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js → lightbulb-Caj6fIQD.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js.map → lightbulb-Caj6fIQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js → link-2-DE9lMxa-.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js.map → link-2-DE9lMxa-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-CL4JmoHb.js → link-BZtPgLW0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-CL4JmoHb.js.map → link-BZtPgLW0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-CDmYFcio.js → list-DubWyY-U.js} +2 -2
- package/ccw/frontend/dist/assets/{list-CDmYFcio.js.map → list-DubWyY-U.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js → map-pin-DwN_48AF.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js.map → map-pin-DwN_48AF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js → messages-square-bjxvaiM9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js.map → messages-square-bjxvaiM9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js → minimize-2-CGfBKD_V.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js.map → minimize-2-CGfBKD_V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js → package-nzWY6ilt.js} +2 -2
- package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js.map → package-nzWY6ilt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js → plug-CiLce49C.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js.map → plug-CiLce49C.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-DmIojFl-.js → power-CFLmB-U9.js} +2 -2
- package/ccw/frontend/dist/assets/{power-DmIojFl-.js.map → power-CFLmB-U9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-BFa03OnG.js → save-DuO6OF0C.js} +2 -2
- package/ccw/frontend/dist/assets/{save-BFa03OnG.js.map → save-DuO6OF0C.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Vet3sN4J.js → send-CZk9p0mM.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Vet3sN4J.js.map → send-CZk9p0mM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js → square-check-big-BY_1YQQg.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js.map → square-check-big-BY_1YQQg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js → square-pen-CnZgm6g-.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js.map → square-pen-CnZgm6g-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-BCQHcnSe.js → star-Cn1F0qy7.js} +2 -2
- package/ccw/frontend/dist/assets/{star-BCQHcnSe.js.map → star-Cn1F0qy7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-CJsrp48L.js → style-Dxs1iXCV.js} +2 -2
- package/ccw/frontend/dist/assets/{style-CJsrp48L.js.map → style-Dxs1iXCV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CBzCJCB1.js → target-Bz1fLRKH.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CBzCJCB1.js.map → target-Bz1fLRKH.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js → test-tube-C6qCYlDr.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js.map → test-tube-C6qCYlDr.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js → upload-C71kd4Qs.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js.map → upload-C71kd4Qs.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js → useApiSettings-CqP2BAJ7.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js.map → useApiSettings-CqP2BAJ7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js → useCli-PCoPoVeM.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js.map → useCli-PCoPoVeM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js → useCommands-3OfPQPw4.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js.map → useCommands-3OfPQPw4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js → useDebounce-bXiFhQx9.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js.map → useDebounce-bXiFhQx9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js → useFileExplorer-DEyUm46_.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js.map → useFileExplorer-DEyUm46_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js → useLocale-sXTrdxcJ.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js.map → useLocale-sXTrdxcJ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js → useSkills-D0W0kXYm.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js.map → useSkills-D0W0kXYm.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js → useSystemSettings-DZ-8lZsG.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js.map → useSystemSettings-DZ-8lZsG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js → wand-sparkles-83GmAYuw.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js.map → wand-sparkles-83GmAYuw.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +1 -1
- package/.claude/commands/ddd/auto.md +0 -359
- package/.claude/commands/ddd/doc-generate.md +0 -222
- package/.claude/commands/ddd/doc-refresh.md +0 -218
- package/.claude/commands/ddd/execute.md +0 -416
- package/.claude/commands/ddd/index-build.md +0 -212
- package/.claude/commands/ddd/plan.md +0 -611
- package/.claude/commands/ddd/scan.md +0 -365
- package/.claude/commands/ddd/sync.md +0 -353
- package/.claude/commands/ddd/update.md +0 -160
- package/.claude/commands/idaw/add.md +0 -287
- package/.claude/commands/idaw/resume.md +0 -442
- package/.claude/commands/idaw/run-coordinate.md +0 -648
- package/.claude/commands/idaw/run.md +0 -539
- package/.claude/commands/idaw/status.md +0 -182
- package/.claude/skills/team-arch-opt/role-specs/analyzer.md +0 -80
- package/.claude/skills/team-arch-opt/role-specs/designer.md +0 -118
- package/.claude/skills/team-arch-opt/role-specs/refactorer.md +0 -106
- package/.claude/skills/team-arch-opt/role-specs/reviewer.md +0 -116
- package/.claude/skills/team-arch-opt/role-specs/validator.md +0 -117
- package/.claude/skills/team-brainstorm/role-specs/challenger.md +0 -63
- package/.claude/skills/team-brainstorm/role-specs/evaluator.md +0 -58
- package/.claude/skills/team-brainstorm/role-specs/ideator.md +0 -71
- package/.claude/skills/team-brainstorm/role-specs/synthesizer.md +0 -59
- package/.claude/skills/team-frontend/role-specs/analyst.md +0 -91
- package/.claude/skills/team-frontend/role-specs/architect.md +0 -85
- package/.claude/skills/team-frontend/role-specs/developer.md +0 -92
- package/.claude/skills/team-frontend/role-specs/qa.md +0 -78
- package/.claude/skills/team-issue/role-specs/explorer.md +0 -95
- package/.claude/skills/team-issue/role-specs/implementer.md +0 -89
- package/.claude/skills/team-issue/role-specs/integrator.md +0 -86
- package/.claude/skills/team-issue/role-specs/planner.md +0 -83
- package/.claude/skills/team-issue/role-specs/reviewer.md +0 -89
- package/.claude/skills/team-iterdev/role-specs/architect.md +0 -64
- package/.claude/skills/team-iterdev/role-specs/developer.md +0 -73
- package/.claude/skills/team-iterdev/role-specs/reviewer.md +0 -65
- package/.claude/skills/team-iterdev/role-specs/tester.md +0 -87
- package/.claude/skills/team-perf-opt/role-specs/benchmarker.md +0 -110
- package/.claude/skills/team-perf-opt/role-specs/optimizer.md +0 -102
- package/.claude/skills/team-perf-opt/role-specs/profiler.md +0 -73
- package/.claude/skills/team-perf-opt/role-specs/reviewer.md +0 -91
- package/.claude/skills/team-perf-opt/role-specs/strategist.md +0 -114
- package/.claude/skills/team-planex/role-specs/executor.md +0 -90
- package/.claude/skills/team-planex/role-specs/planner.md +0 -110
- package/.claude/skills/team-quality-assurance/role-specs/analyst.md +0 -79
- package/.claude/skills/team-quality-assurance/role-specs/executor.md +0 -64
- package/.claude/skills/team-quality-assurance/role-specs/generator.md +0 -67
- package/.claude/skills/team-quality-assurance/role-specs/scout.md +0 -66
- package/.claude/skills/team-quality-assurance/role-specs/strategist.md +0 -70
- package/.claude/skills/team-review/role-specs/fixer.md +0 -75
- package/.claude/skills/team-review/role-specs/reviewer.md +0 -66
- package/.claude/skills/team-review/role-specs/scanner.md +0 -70
- package/.claude/skills/team-roadmap-dev/role-specs/executor.md +0 -71
- package/.claude/skills/team-roadmap-dev/role-specs/planner.md +0 -77
- package/.claude/skills/team-roadmap-dev/role-specs/verifier.md +0 -73
- package/.claude/skills/team-tech-debt/role-specs/assessor.md +0 -70
- package/.claude/skills/team-tech-debt/role-specs/executor.md +0 -80
- package/.claude/skills/team-tech-debt/role-specs/planner.md +0 -71
- package/.claude/skills/team-tech-debt/role-specs/scanner.md +0 -85
- package/.claude/skills/team-tech-debt/role-specs/validator.md +0 -83
- package/.claude/skills/team-testing/role-specs/analyst.md +0 -94
- package/.claude/skills/team-testing/role-specs/executor.md +0 -97
- package/.claude/skills/team-testing/role-specs/generator.md +0 -96
- package/.claude/skills/team-testing/role-specs/strategist.md +0 -82
- package/.claude/skills/team-uidesign/role-specs/designer.md +0 -72
- package/.claude/skills/team-uidesign/role-specs/implementer.md +0 -74
- package/.claude/skills/team-uidesign/role-specs/researcher.md +0 -84
- package/.claude/skills/team-uidesign/role-specs/reviewer.md +0 -70
- package/.claude/skills/team-ux-improve/role-specs/designer.md +0 -191
- package/.claude/skills/team-ux-improve/role-specs/diagnoser.md +0 -110
- package/.claude/skills/team-ux-improve/role-specs/explorer.md +0 -109
- package/.claude/skills/team-ux-improve/role-specs/implementer.md +0 -164
- package/.claude/skills/team-ux-improve/role-specs/scanner.md +0 -117
- package/.claude/skills/team-ux-improve/role-specs/tester.md +0 -163
- package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js +0 -2
- package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js.map +0 -1
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: resume
|
|
3
|
-
description: Resume interrupted IDAW session from last checkpoint
|
|
4
|
-
argument-hint: "[-y|--yes] [session-id]"
|
|
5
|
-
allowed-tools: Skill(*), TodoWrite(*), AskUserQuestion(*), Read(*), Write(*), Bash(*), Glob(*)
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# IDAW Resume Command (/idaw:resume)
|
|
9
|
-
|
|
10
|
-
## Auto Mode
|
|
11
|
-
|
|
12
|
-
When `--yes` or `-y`: Auto-skip interrupted task, continue with remaining.
|
|
13
|
-
|
|
14
|
-
## Skill Chain Mapping
|
|
15
|
-
|
|
16
|
-
```javascript
|
|
17
|
-
const SKILL_CHAIN_MAP = {
|
|
18
|
-
'bugfix': ['workflow-lite-plan', 'workflow-test-fix'],
|
|
19
|
-
'bugfix-hotfix': ['workflow-lite-plan'],
|
|
20
|
-
'feature': ['workflow-lite-plan', 'workflow-test-fix'],
|
|
21
|
-
'feature-complex': ['workflow-plan', 'workflow-execute', 'workflow-test-fix'],
|
|
22
|
-
'refactor': ['workflow:refactor-cycle'],
|
|
23
|
-
'tdd': ['workflow-tdd-plan', 'workflow-execute'],
|
|
24
|
-
'test': ['workflow-test-fix'],
|
|
25
|
-
'test-fix': ['workflow-test-fix'],
|
|
26
|
-
'review': ['review-cycle'],
|
|
27
|
-
'docs': ['workflow-lite-plan']
|
|
28
|
-
};
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Task Type Inference
|
|
32
|
-
|
|
33
|
-
```javascript
|
|
34
|
-
function inferTaskType(title, description) {
|
|
35
|
-
const text = `${title} ${description}`.toLowerCase();
|
|
36
|
-
if (/urgent|production|critical/.test(text) && /fix|bug/.test(text)) return 'bugfix-hotfix';
|
|
37
|
-
if (/refactor|重构|tech.*debt/.test(text)) return 'refactor';
|
|
38
|
-
if (/tdd|test-driven|test first/.test(text)) return 'tdd';
|
|
39
|
-
if (/test fail|fix test|failing test/.test(text)) return 'test-fix';
|
|
40
|
-
if (/generate test|写测试|add test/.test(text)) return 'test';
|
|
41
|
-
if (/review|code review/.test(text)) return 'review';
|
|
42
|
-
if (/docs|documentation|readme/.test(text)) return 'docs';
|
|
43
|
-
if (/fix|bug|error|crash|fail/.test(text)) return 'bugfix';
|
|
44
|
-
if (/complex|multi-module|architecture/.test(text)) return 'feature-complex';
|
|
45
|
-
return 'feature';
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Implementation
|
|
50
|
-
|
|
51
|
-
### Phase 1: Find Resumable Session
|
|
52
|
-
|
|
53
|
-
```javascript
|
|
54
|
-
const args = $ARGUMENTS;
|
|
55
|
-
const autoYes = /(-y|--yes)/.test(args);
|
|
56
|
-
const targetSessionId = args.replace(/(-y|--yes)/g, '').trim();
|
|
57
|
-
|
|
58
|
-
let session = null;
|
|
59
|
-
let sessionDir = null;
|
|
60
|
-
|
|
61
|
-
if (targetSessionId) {
|
|
62
|
-
// Load specific session
|
|
63
|
-
sessionDir = `.workflow/.idaw/sessions/${targetSessionId}`;
|
|
64
|
-
try {
|
|
65
|
-
session = JSON.parse(Read(`${sessionDir}/session.json`));
|
|
66
|
-
} catch {
|
|
67
|
-
console.log(`Session "${targetSessionId}" not found.`);
|
|
68
|
-
console.log('Use /idaw:status to list sessions, or /idaw:run to start a new one.');
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
// Find most recent running session
|
|
73
|
-
const sessionFiles = Glob('.workflow/.idaw/sessions/IDA-*/session.json') || [];
|
|
74
|
-
|
|
75
|
-
for (const f of sessionFiles) {
|
|
76
|
-
try {
|
|
77
|
-
const s = JSON.parse(Read(f));
|
|
78
|
-
if (s.status === 'running') {
|
|
79
|
-
session = s;
|
|
80
|
-
sessionDir = f.replace(/\/session\.json$/, '').replace(/\\session\.json$/, '');
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
} catch {
|
|
84
|
-
// Skip malformed
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (!session) {
|
|
89
|
-
console.log('No running sessions found to resume.');
|
|
90
|
-
console.log('Use /idaw:run to start a new execution.');
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
console.log(`Resuming session: ${session.session_id}`);
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Phase 2: Handle Interrupted Task
|
|
99
|
-
|
|
100
|
-
```javascript
|
|
101
|
-
// Find the task that was in_progress when interrupted
|
|
102
|
-
let currentTaskId = session.current_task;
|
|
103
|
-
let currentTask = null;
|
|
104
|
-
|
|
105
|
-
if (currentTaskId) {
|
|
106
|
-
try {
|
|
107
|
-
currentTask = JSON.parse(Read(`.workflow/.idaw/tasks/${currentTaskId}.json`));
|
|
108
|
-
} catch {
|
|
109
|
-
console.log(`Warning: Could not read task ${currentTaskId}`);
|
|
110
|
-
currentTaskId = null;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (currentTask && currentTask.status === 'in_progress') {
|
|
115
|
-
if (autoYes) {
|
|
116
|
-
// Auto: skip interrupted task
|
|
117
|
-
currentTask.status = 'skipped';
|
|
118
|
-
currentTask.execution.error = 'Skipped on resume (auto mode)';
|
|
119
|
-
currentTask.execution.completed_at = new Date().toISOString();
|
|
120
|
-
currentTask.updated_at = new Date().toISOString();
|
|
121
|
-
Write(`.workflow/.idaw/tasks/${currentTaskId}.json`, JSON.stringify(currentTask, null, 2));
|
|
122
|
-
session.skipped.push(currentTaskId);
|
|
123
|
-
console.log(`Skipped interrupted task: ${currentTaskId}`);
|
|
124
|
-
} else {
|
|
125
|
-
const answer = AskUserQuestion({
|
|
126
|
-
questions: [{
|
|
127
|
-
question: `Task ${currentTaskId} was interrupted: "${currentTask.title}". How to proceed?`,
|
|
128
|
-
header: 'Resume',
|
|
129
|
-
multiSelect: false,
|
|
130
|
-
options: [
|
|
131
|
-
{ label: 'Retry', description: 'Reset to pending, re-execute from beginning' },
|
|
132
|
-
{ label: 'Skip', description: 'Mark as skipped, move to next task' }
|
|
133
|
-
]
|
|
134
|
-
}]
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
if (answer.answers?.Resume === 'Skip') {
|
|
138
|
-
currentTask.status = 'skipped';
|
|
139
|
-
currentTask.execution.error = 'Skipped on resume (user choice)';
|
|
140
|
-
currentTask.execution.completed_at = new Date().toISOString();
|
|
141
|
-
currentTask.updated_at = new Date().toISOString();
|
|
142
|
-
Write(`.workflow/.idaw/tasks/${currentTaskId}.json`, JSON.stringify(currentTask, null, 2));
|
|
143
|
-
session.skipped.push(currentTaskId);
|
|
144
|
-
} else {
|
|
145
|
-
// Retry: reset to pending
|
|
146
|
-
currentTask.status = 'pending';
|
|
147
|
-
currentTask.execution.started_at = null;
|
|
148
|
-
currentTask.execution.completed_at = null;
|
|
149
|
-
currentTask.execution.skill_results = [];
|
|
150
|
-
currentTask.execution.error = null;
|
|
151
|
-
currentTask.updated_at = new Date().toISOString();
|
|
152
|
-
Write(`.workflow/.idaw/tasks/${currentTaskId}.json`, JSON.stringify(currentTask, null, 2));
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Phase 3: Build Remaining Task Queue
|
|
159
|
-
|
|
160
|
-
```javascript
|
|
161
|
-
// Collect remaining tasks (pending, or the retried current task)
|
|
162
|
-
const allTaskIds = session.tasks;
|
|
163
|
-
const completedSet = new Set([...session.completed, ...session.failed, ...session.skipped]);
|
|
164
|
-
|
|
165
|
-
const remainingTasks = [];
|
|
166
|
-
for (const taskId of allTaskIds) {
|
|
167
|
-
if (completedSet.has(taskId)) continue;
|
|
168
|
-
try {
|
|
169
|
-
const task = JSON.parse(Read(`.workflow/.idaw/tasks/${taskId}.json`));
|
|
170
|
-
if (task.status === 'pending') {
|
|
171
|
-
remainingTasks.push(task);
|
|
172
|
-
}
|
|
173
|
-
} catch {
|
|
174
|
-
console.log(`Warning: Could not read task ${taskId}, skipping`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
if (remainingTasks.length === 0) {
|
|
179
|
-
console.log('No remaining tasks to execute. Session complete.');
|
|
180
|
-
session.status = 'completed';
|
|
181
|
-
session.current_task = null;
|
|
182
|
-
session.updated_at = new Date().toISOString();
|
|
183
|
-
Write(`${sessionDir}/session.json`, JSON.stringify(session, null, 2));
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Sort: priority ASC, then ID ASC
|
|
188
|
-
remainingTasks.sort((a, b) => {
|
|
189
|
-
if (a.priority !== b.priority) return a.priority - b.priority;
|
|
190
|
-
return a.id.localeCompare(b.id);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
console.log(`Remaining tasks: ${remainingTasks.length}`);
|
|
194
|
-
|
|
195
|
-
// Append resume marker to progress.md
|
|
196
|
-
const progressFile = `${sessionDir}/progress.md`;
|
|
197
|
-
try {
|
|
198
|
-
const currentProgress = Read(progressFile);
|
|
199
|
-
Write(progressFile, currentProgress + `\n---\n**Resumed**: ${new Date().toISOString()}\n\n`);
|
|
200
|
-
} catch {
|
|
201
|
-
Write(progressFile, `# IDAW Progress — ${session.session_id}\n\n---\n**Resumed**: ${new Date().toISOString()}\n\n`);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Update TodoWrite
|
|
205
|
-
TodoWrite({
|
|
206
|
-
todos: remainingTasks.map((t, i) => ({
|
|
207
|
-
content: `IDAW:[${i + 1}/${remainingTasks.length}] ${t.title}`,
|
|
208
|
-
status: i === 0 ? 'in_progress' : 'pending',
|
|
209
|
-
activeForm: `Executing ${t.title}`
|
|
210
|
-
}))
|
|
211
|
-
});
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Phase 4-6: Execute Remaining (reuse run.md main loop)
|
|
215
|
-
|
|
216
|
-
Execute remaining tasks using the same Phase 4-6 logic from `/idaw:run`:
|
|
217
|
-
|
|
218
|
-
```javascript
|
|
219
|
-
// Phase 4: Main Loop — identical to run.md Phase 4
|
|
220
|
-
for (let taskIdx = 0; taskIdx < remainingTasks.length; taskIdx++) {
|
|
221
|
-
const task = remainingTasks[taskIdx];
|
|
222
|
-
|
|
223
|
-
// Resolve skill chain
|
|
224
|
-
const resolvedType = task.task_type || inferTaskType(task.title, task.description);
|
|
225
|
-
const chain = task.skill_chain || SKILL_CHAIN_MAP[resolvedType] || SKILL_CHAIN_MAP['feature'];
|
|
226
|
-
|
|
227
|
-
// Update task → in_progress
|
|
228
|
-
task.status = 'in_progress';
|
|
229
|
-
task.task_type = resolvedType;
|
|
230
|
-
task.execution.started_at = new Date().toISOString();
|
|
231
|
-
Write(`.workflow/.idaw/tasks/${task.id}.json`, JSON.stringify(task, null, 2));
|
|
232
|
-
|
|
233
|
-
session.current_task = task.id;
|
|
234
|
-
session.updated_at = new Date().toISOString();
|
|
235
|
-
Write(`${sessionDir}/session.json`, JSON.stringify(session, null, 2));
|
|
236
|
-
|
|
237
|
-
console.log(`\n--- [${taskIdx + 1}/${remainingTasks.length}] ${task.id}: ${task.title} ---`);
|
|
238
|
-
console.log(`Chain: ${chain.join(' → ')}`);
|
|
239
|
-
|
|
240
|
-
// ━━━ Pre-Task CLI Context Analysis (for complex/bugfix tasks) ━━━
|
|
241
|
-
if (['bugfix', 'bugfix-hotfix', 'feature-complex'].includes(resolvedType)) {
|
|
242
|
-
console.log(` Pre-analysis: gathering context for ${resolvedType} task...`);
|
|
243
|
-
const affectedFiles = (task.context?.affected_files || []).join(', ');
|
|
244
|
-
const preAnalysisPrompt = `PURPOSE: Pre-analyze codebase context for IDAW task before execution.
|
|
245
|
-
TASK: • Understand current state of: ${affectedFiles || 'files related to: ' + task.title} • Identify dependencies and risk areas • Note existing patterns to follow
|
|
246
|
-
MODE: analysis
|
|
247
|
-
CONTEXT: @**/*
|
|
248
|
-
EXPECTED: Brief context summary (affected modules, dependencies, risk areas) in 3-5 bullet points
|
|
249
|
-
CONSTRAINTS: Keep concise | Focus on execution-relevant context`;
|
|
250
|
-
const preAnalysis = Bash(`ccw cli -p '${preAnalysisPrompt.replace(/'/g, "'\\''")}' --tool gemini --mode analysis 2>&1 || echo "Pre-analysis skipped"`);
|
|
251
|
-
task.execution.skill_results.push({
|
|
252
|
-
skill: 'cli-pre-analysis',
|
|
253
|
-
status: 'completed',
|
|
254
|
-
context_summary: preAnalysis?.substring(0, 500),
|
|
255
|
-
timestamp: new Date().toISOString()
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Execute skill chain
|
|
260
|
-
let previousResult = null;
|
|
261
|
-
let taskFailed = false;
|
|
262
|
-
|
|
263
|
-
for (let skillIdx = 0; skillIdx < chain.length; skillIdx++) {
|
|
264
|
-
const skillName = chain[skillIdx];
|
|
265
|
-
const skillArgs = assembleSkillArgs(skillName, task, previousResult, autoYes, skillIdx === 0);
|
|
266
|
-
|
|
267
|
-
console.log(` [${skillIdx + 1}/${chain.length}] ${skillName}`);
|
|
268
|
-
|
|
269
|
-
try {
|
|
270
|
-
const result = Skill({ skill: skillName, args: skillArgs });
|
|
271
|
-
previousResult = result;
|
|
272
|
-
task.execution.skill_results.push({
|
|
273
|
-
skill: skillName,
|
|
274
|
-
status: 'completed',
|
|
275
|
-
timestamp: new Date().toISOString()
|
|
276
|
-
});
|
|
277
|
-
} catch (error) {
|
|
278
|
-
// ━━━ CLI-Assisted Error Recovery ━━━
|
|
279
|
-
console.log(` Diagnosing failure: ${skillName}...`);
|
|
280
|
-
const diagnosisPrompt = `PURPOSE: Diagnose why skill "${skillName}" failed during IDAW task execution.
|
|
281
|
-
TASK: • Analyze error: ${String(error).substring(0, 300)} • Check affected files: ${(task.context?.affected_files || []).join(', ') || 'unknown'} • Identify root cause • Suggest fix strategy
|
|
282
|
-
MODE: analysis
|
|
283
|
-
CONTEXT: @**/* | Memory: IDAW task ${task.id}: ${task.title}
|
|
284
|
-
EXPECTED: Root cause + actionable fix recommendation (1-2 sentences)
|
|
285
|
-
CONSTRAINTS: Focus on actionable diagnosis`;
|
|
286
|
-
const diagnosisResult = Bash(`ccw cli -p '${diagnosisPrompt.replace(/'/g, "'\\''")}' --tool gemini --mode analysis --rule analysis-diagnose-bug-root-cause 2>&1 || echo "CLI diagnosis unavailable"`);
|
|
287
|
-
|
|
288
|
-
task.execution.skill_results.push({
|
|
289
|
-
skill: `cli-diagnosis:${skillName}`,
|
|
290
|
-
status: 'completed',
|
|
291
|
-
diagnosis: diagnosisResult?.substring(0, 500),
|
|
292
|
-
timestamp: new Date().toISOString()
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
// Retry with diagnosis context
|
|
296
|
-
console.log(` Retry with diagnosis: ${skillName}`);
|
|
297
|
-
try {
|
|
298
|
-
const retryResult = Skill({ skill: skillName, args: skillArgs });
|
|
299
|
-
previousResult = retryResult;
|
|
300
|
-
task.execution.skill_results.push({
|
|
301
|
-
skill: skillName,
|
|
302
|
-
status: 'completed-retry-with-diagnosis',
|
|
303
|
-
timestamp: new Date().toISOString()
|
|
304
|
-
});
|
|
305
|
-
} catch (retryError) {
|
|
306
|
-
task.execution.skill_results.push({
|
|
307
|
-
skill: skillName,
|
|
308
|
-
status: 'failed',
|
|
309
|
-
error: String(retryError).substring(0, 200),
|
|
310
|
-
timestamp: new Date().toISOString()
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
if (autoYes) {
|
|
314
|
-
taskFailed = true;
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
const answer = AskUserQuestion({
|
|
319
|
-
questions: [{
|
|
320
|
-
question: `${skillName} failed after CLI diagnosis + retry: ${String(retryError).substring(0, 100)}`,
|
|
321
|
-
header: 'Error',
|
|
322
|
-
multiSelect: false,
|
|
323
|
-
options: [
|
|
324
|
-
{ label: 'Skip task', description: 'Mark as failed, continue' },
|
|
325
|
-
{ label: 'Abort', description: 'Stop run' }
|
|
326
|
-
]
|
|
327
|
-
}]
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
if (answer.answers?.Error === 'Abort') {
|
|
331
|
-
task.status = 'failed';
|
|
332
|
-
task.execution.error = String(retryError).substring(0, 200);
|
|
333
|
-
Write(`.workflow/.idaw/tasks/${task.id}.json`, JSON.stringify(task, null, 2));
|
|
334
|
-
session.failed.push(task.id);
|
|
335
|
-
session.status = 'failed';
|
|
336
|
-
session.updated_at = new Date().toISOString();
|
|
337
|
-
Write(`${sessionDir}/session.json`, JSON.stringify(session, null, 2));
|
|
338
|
-
return;
|
|
339
|
-
}
|
|
340
|
-
taskFailed = true;
|
|
341
|
-
break;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Phase 5: Checkpoint
|
|
347
|
-
if (taskFailed) {
|
|
348
|
-
task.status = 'failed';
|
|
349
|
-
task.execution.error = 'Skill chain failed after retry';
|
|
350
|
-
task.execution.completed_at = new Date().toISOString();
|
|
351
|
-
session.failed.push(task.id);
|
|
352
|
-
} else {
|
|
353
|
-
// Git commit
|
|
354
|
-
const commitMsg = `feat(idaw): ${task.title} [${task.id}]`;
|
|
355
|
-
const diffCheck = Bash('git diff --stat HEAD 2>/dev/null || echo ""');
|
|
356
|
-
const untrackedCheck = Bash('git ls-files --others --exclude-standard 2>/dev/null || echo ""');
|
|
357
|
-
|
|
358
|
-
if (diffCheck?.trim() || untrackedCheck?.trim()) {
|
|
359
|
-
Bash('git add -A');
|
|
360
|
-
Bash(`git commit -m "$(cat <<'EOF'\n${commitMsg}\nEOF\n)"`);
|
|
361
|
-
const commitHash = Bash('git rev-parse --short HEAD 2>/dev/null')?.trim();
|
|
362
|
-
task.execution.git_commit = commitHash;
|
|
363
|
-
} else {
|
|
364
|
-
task.execution.git_commit = 'no-commit';
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
task.status = 'completed';
|
|
368
|
-
task.execution.completed_at = new Date().toISOString();
|
|
369
|
-
session.completed.push(task.id);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
task.updated_at = new Date().toISOString();
|
|
373
|
-
Write(`.workflow/.idaw/tasks/${task.id}.json`, JSON.stringify(task, null, 2));
|
|
374
|
-
session.updated_at = new Date().toISOString();
|
|
375
|
-
Write(`${sessionDir}/session.json`, JSON.stringify(session, null, 2));
|
|
376
|
-
|
|
377
|
-
// Append progress
|
|
378
|
-
const chain_str = chain.join(' → ');
|
|
379
|
-
const progressEntry = `## ${task.id} — ${task.title}\n- Status: ${task.status}\n- Chain: ${chain_str}\n- Commit: ${task.execution.git_commit || '-'}\n\n`;
|
|
380
|
-
const currentProgress = Read(`${sessionDir}/progress.md`);
|
|
381
|
-
Write(`${sessionDir}/progress.md`, currentProgress + progressEntry);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Phase 6: Report
|
|
385
|
-
session.status = session.failed.length > 0 && session.completed.length === 0 ? 'failed' : 'completed';
|
|
386
|
-
session.current_task = null;
|
|
387
|
-
session.updated_at = new Date().toISOString();
|
|
388
|
-
Write(`${sessionDir}/session.json`, JSON.stringify(session, null, 2));
|
|
389
|
-
|
|
390
|
-
const summary = `\n---\n## Summary (Resumed)\n- Completed: ${session.completed.length}\n- Failed: ${session.failed.length}\n- Skipped: ${session.skipped.length}\n`;
|
|
391
|
-
const finalProgress = Read(`${sessionDir}/progress.md`);
|
|
392
|
-
Write(`${sessionDir}/progress.md`, finalProgress + summary);
|
|
393
|
-
|
|
394
|
-
console.log('\n=== IDAW Resume Complete ===');
|
|
395
|
-
console.log(`Session: ${session.session_id}`);
|
|
396
|
-
console.log(`Completed: ${session.completed.length} | Failed: ${session.failed.length} | Skipped: ${session.skipped.length}`);
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
## Helper Functions
|
|
400
|
-
|
|
401
|
-
### assembleSkillArgs
|
|
402
|
-
|
|
403
|
-
```javascript
|
|
404
|
-
function assembleSkillArgs(skillName, task, previousResult, autoYes, isFirst) {
|
|
405
|
-
let args = '';
|
|
406
|
-
|
|
407
|
-
if (isFirst) {
|
|
408
|
-
// Sanitize for shell safety
|
|
409
|
-
const goal = `${task.title}\n${task.description}`
|
|
410
|
-
.replace(/\\/g, '\\\\')
|
|
411
|
-
.replace(/"/g, '\\"')
|
|
412
|
-
.replace(/\$/g, '\\$')
|
|
413
|
-
.replace(/`/g, '\\`');
|
|
414
|
-
args = `"${goal}"`;
|
|
415
|
-
if (task.task_type === 'bugfix-hotfix') args += ' --hotfix';
|
|
416
|
-
} else if (previousResult?.session_id) {
|
|
417
|
-
args = `--session="${previousResult.session_id}"`;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
if (autoYes && !args.includes('-y') && !args.includes('--yes')) {
|
|
421
|
-
args = args ? `${args} -y` : '-y';
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
return args;
|
|
425
|
-
}
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
## Examples
|
|
429
|
-
|
|
430
|
-
```bash
|
|
431
|
-
# Resume most recent running session (interactive)
|
|
432
|
-
/idaw:resume
|
|
433
|
-
|
|
434
|
-
# Resume specific session
|
|
435
|
-
/idaw:resume IDA-auth-fix-20260301
|
|
436
|
-
|
|
437
|
-
# Resume with auto mode (skip interrupted, continue)
|
|
438
|
-
/idaw:resume -y
|
|
439
|
-
|
|
440
|
-
# Resume specific session with auto mode
|
|
441
|
-
/idaw:resume -y IDA-auth-fix-20260301
|
|
442
|
-
```
|