claude-code-workflow 7.2.28 → 7.2.30
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/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
- package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
- package/.claude/agents/action-planning-agent.md +7 -4
- package/.claude/agents/cli-explore-agent.md +77 -63
- package/.claude/agents/cli-lite-planning-agent.md +11 -10
- package/.claude/agents/issue-plan-agent.md +421 -426
- package/.claude/commands/workflow/spec/setup.md +1 -1
- package/.claude/skills/ccw-chain/SKILL.md +119 -0
- package/.claude/skills/ccw-chain/chains/ccw-cycle.json +21 -0
- package/.claude/skills/ccw-chain/chains/ccw-exploration.json +47 -0
- package/.claude/skills/ccw-chain/chains/ccw-issue.json +33 -0
- package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +57 -0
- package/.claude/skills/ccw-chain/chains/ccw-main.json +52 -0
- package/.claude/skills/ccw-chain/chains/ccw-standard.json +39 -0
- package/.claude/skills/ccw-chain/chains/ccw-team.json +10 -0
- package/.claude/skills/ccw-chain/chains/ccw-with-file.json +31 -0
- package/.claude/skills/ccw-chain/phases/analyze-with-file.md +788 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/SKILL.md +408 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/01-mode-routing.md +207 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/02-artifacts.md +567 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/03-role-analysis.md +748 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/04-synthesis.md +827 -0
- package/.claude/skills/ccw-chain/phases/brainstorm-with-file.md +482 -0
- package/.claude/skills/ccw-chain/phases/collaborative-plan-with-file.md +639 -0
- package/.claude/skills/ccw-chain/phases/debug-with-file.md +656 -0
- package/.claude/skills/ccw-chain/phases/integration-test-cycle.md +936 -0
- package/.claude/skills/ccw-chain/phases/issue-convert-to-plan.md +720 -0
- package/.claude/skills/ccw-chain/phases/issue-discover.md +483 -0
- package/.claude/skills/ccw-chain/phases/issue-execute.md +629 -0
- package/.claude/skills/ccw-chain/phases/issue-from-brainstorm.md +382 -0
- package/.claude/skills/ccw-chain/phases/issue-plan.md +343 -0
- package/.claude/skills/ccw-chain/phases/issue-queue.md +464 -0
- package/.claude/skills/ccw-chain/phases/refactor-cycle.md +852 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/SKILL.md +132 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-fix.md +760 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-module.md +764 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-session.md +775 -0
- package/.claude/skills/ccw-chain/phases/roadmap-with-file.md +544 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/SKILL.md +338 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-5-requirement-clarification.md +404 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-discovery.md +257 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/02-product-brief.md +274 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/03-requirements.md +184 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/04-architecture.md +248 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/05-epics-stories.md +178 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-5-auto-fix.md +144 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-readiness-check.md +480 -0
- package/.claude/skills/ccw-chain/phases/team-planex.md +123 -0
- package/.claude/skills/ccw-chain/phases/ui-design-explore-auto.md +678 -0
- package/.claude/skills/ccw-chain/phases/unified-execute-with-file.md +870 -0
- package/.claude/skills/ccw-chain/phases/workflow-execute/SKILL.md +625 -0
- package/.claude/skills/ccw-chain/phases/workflow-execute/phases/06-review.md +215 -0
- package/.claude/skills/ccw-chain/phases/workflow-lite-plan.md +616 -0
- package/.claude/skills/ccw-chain/phases/workflow-multi-cli-plan.md +424 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/SKILL.md +466 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/01-session-discovery.md +99 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/02-context-gathering.md +338 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/03-conflict-resolution.md +422 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/04-task-generation.md +440 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/05-plan-verify.md +395 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/06-replan.md +594 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/SKILL.md +527 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/01-session-discovery.md +57 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/02-context-gathering.md +407 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/03-test-coverage-analysis.md +172 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/05-tdd-task-generation.md +473 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/06-tdd-structure-validation.md +189 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/07-tdd-verify.md +635 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/SKILL.md +482 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/01-session-start.md +60 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/02-test-context-gather.md +493 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/03-test-concept-enhanced.md +150 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/04-test-task-generate.md +346 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/05-test-cycle-execute.md +538 -0
- package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
- package/.claude/skills/ccw-chain/specs/intent-patterns.md +60 -0
- package/.claude/skills/chain-loader/SKILL.md +78 -0
- package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
- package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
- package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
- package/.claude/skills/chain-loader/specs/chain-schema.md +99 -0
- package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
- package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
- package/.claude/skills/review-cycle/phases/review-module.md +764 -764
- package/.claude/skills/review-cycle/phases/review-session.md +775 -775
- package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
- package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
- package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
- package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
- package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
- package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
- package/.codex/skills/brainstorm/SKILL.md +3 -3
- package/.codex/skills/clean/SKILL.md +3 -3
- package/.codex/skills/issue-discover/SKILL.md +13 -13
- package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
- package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
- package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
- package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
- package/.codex/skills/review-cycle/SKILL.md +10 -10
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
- package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
- package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
- package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
- package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
- package/.codex/skills/spec-generator/README.md +1 -1
- package/.codex/skills/spec-generator/SKILL.md +184 -88
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
- package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
- package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
- package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
- package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
- package/.codex/skills/spec-setup/SKILL.md +4 -4
- package/.codex/skills/workflow-plan/SKILL.md +6 -6
- package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
- package/README.md +14 -0
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
- package/ccw/dist/tools/chain-loader.d.ts +10 -0
- package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
- package/ccw/dist/tools/chain-loader.js +642 -0
- package/ccw/dist/tools/chain-loader.js.map +1 -0
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/json-builder.js +20 -0
- package/ccw/dist/tools/json-builder.js.map +1 -1
- package/ccw/dist/types/chain-types.d.ts +72 -0
- package/ccw/dist/types/chain-types.d.ts.map +1 -0
- package/ccw/dist/types/chain-types.js +5 -0
- package/ccw/dist/types/chain-types.js.map +1 -0
- package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js → AlertDialog-exlTDW81.js} +3 -3
- package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js.map → AlertDialog-exlTDW81.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js → AnalysisPage-cgV9LfAI.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js → CliModeToggle-Be9xsPiv.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js → CliViewerPage-BrE-oyEq.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js → CodexLensPage-Cd3nrC93.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js → Collapsible-DXFl3VKF.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js → DeepWikiPage-CpDxtmRX.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js → EndpointsPage-BchjWe7s.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js → ExplorerPage-CbWvaJ0y.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js → FixSessionPage-YMjVRiCk.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js → FloatingPanel-BtqzqDVq.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
- package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js → HistoryPage-BuWpQ7k5.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js → HookManagerPage-D0BtMIWy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js → InstallationsPage-C7dwsAKG.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js → IssueHubPage-D0nCNaeB.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js → McpManagerPage-C-S5CehM.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js → MemoryPage-P_B0JVUQ.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js → NotFoundPage-S4Jn9LUE.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js → PromptHistoryPage-YEMjFARX.js} +3 -3
- package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js → ReviewSessionPage-DnTm55nG.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js → RulesManagerPage-CUwebtO2.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js → SessionsPage-BpgP4087.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js.map → SessionsPage-BpgP4087.js.map} +1 -1
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js → Switch-CYSPdqWk.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js.map → Switch-CYSPdqWk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js → TabsNavigation-CPh6Zor1.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js → TaskDrawer-Ds-8830B.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js → TeamPage-CJODUxBk.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js.map → TeamPage-CJODUxBk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-DxemgIhF.js → archive-CjwVpw6k.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-DxemgIhF.js.map → archive-CjwVpw6k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js → archive-restore-2vZa9Ic3.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js → arrow-right-CUU5XDgT.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-DOwFtzak.js → bot-BwpSRDUa.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-DOwFtzak.js.map → bot-BwpSRDUa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-96qH3aFh.js → braces-DBzUW1XC.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-96qH3aFh.js.map → braces-DBzUW1XC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js → circle-stop-CGNNsjvE.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js → cpu-D27G86Ul.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js.map → cpu-D27G86Ul.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js → eye-C6MOB7Au.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js.map → eye-C6MOB7Au.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js → eye-off-BxfBlZ26.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js.map → eye-off-BxfBlZ26.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js → file-json-NI237wA-.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js.map → file-json-NI237wA-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js → file-text-Byn2_2v6.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js.map → file-text-Byn2_2v6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-q9g-bknU.js → filter-D-7PhZjx.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-q9g-bknU.js.map → filter-D-7PhZjx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-CL6vb42J.js → folder-BoAsK_FL.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-CL6vb42J.js.map → folder-BoAsK_FL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js → gauge-DCSxJIS4.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js.map → gauge-DCSxJIS4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js → globe-CHS3prza.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js.map → globe-CHS3prza.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js → grid-3x3-D7K35U7S.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js → hard-drive-eq9xE07G.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js.map → hard-drive-eq9xE07G.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-80O0kJO7.js → hash-C1DMpBua.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-80O0kJO7.js.map → hash-C1DMpBua.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js → history-Di5SBCY-.js} +2 -2
- package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js.map → history-Di5SBCY-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-mbeo62f8.js → index--_R7COnA.js} +2 -2
- package/ccw/frontend/dist/assets/{index-mbeo62f8.js.map → index--_R7COnA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-rLgoBCfV.js → index-BUol9HDD.js} +3 -3
- package/ccw/frontend/dist/assets/{index-rLgoBCfV.js.map → index-BUol9HDD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Bs80iCX0.js → index-CT9oykfw.js} +2 -2
- package/ccw/frontend/dist/assets/{index-Bs80iCX0.js.map → index-CT9oykfw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js → index-Ddwvf87H.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js.map → index-Ddwvf87H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js → layout-grid-LiX0qZbN.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js → lightbulb-CL3DVEwb.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js → link-2-CC5cFeq6.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js.map → link-2-CC5cFeq6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-koEYiemK.js → link-ngFQ9bs0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-koEYiemK.js.map → link-ngFQ9bs0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-v2_GaLdC.js → list-BEU6I0KK.js} +2 -2
- package/ccw/frontend/dist/assets/{list-v2_GaLdC.js.map → list-BEU6I0KK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js → map-pin-BWZdLA6y.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js.map → map-pin-BWZdLA6y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js → messages-square-K6_Chm7n.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js.map → messages-square-K6_Chm7n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js → minimize-2-CWkphauf.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js.map → minimize-2-CWkphauf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-CH3smL37.js → package-DrNgkamn.js} +2 -2
- package/ccw/frontend/dist/assets/{package-CH3smL37.js.map → package-DrNgkamn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js → plug-CMo3sw5_.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js.map → plug-CMo3sw5_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-F2A_J4l6.js → power-DppNTW5e.js} +2 -2
- package/ccw/frontend/dist/assets/{power-F2A_J4l6.js.map → power-DppNTW5e.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-Byxot0YU.js → save-CD8aPMbZ.js} +2 -2
- package/ccw/frontend/dist/assets/{save-Byxot0YU.js.map → save-CD8aPMbZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-JjqhUkpw.js → send-B4z90fQD.js} +2 -2
- package/ccw/frontend/dist/assets/{send-JjqhUkpw.js.map → send-B4z90fQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js → settings-2-CAKRU_QC.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js.map → settings-2-CAKRU_QC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js → square-check-big-KhI3HrzX.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js → square-pen-BtdGIpuq.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js.map → square-pen-BtdGIpuq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js → star-ZoBUkXoD.js} +2 -2
- package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js.map → star-ZoBUkXoD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-CKs7nnn3.js → style-CltxQP-P.js} +2 -2
- package/ccw/frontend/dist/assets/{style-CKs7nnn3.js.map → style-CltxQP-P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-DW5tsDW6.js → target-C32OUSGf.js} +2 -2
- package/ccw/frontend/dist/assets/{target-DW5tsDW6.js.map → target-C32OUSGf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js → test-tube-0IxoyAVZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js → upload-4eKCkyBn.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js.map → upload-4eKCkyBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js → useApiSettings-zLTUWqhi.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js → useCli-BtN2vpOX.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js.map → useCli-BtN2vpOX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js → useCommands-_spj49qL.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js.map → useCommands-_spj49qL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js → useDebounce-Bm9KFZvd.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js → useFileExplorer-DOmpm6v9.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js → useLocale-D2rj4rea.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js.map → useLocale-D2rj4rea.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js → useSkills-OskEpomF.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js.map → useSkills-OskEpomF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js → useSystemSettings-BjMgsNSF.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js → wand-sparkles-CLhyYWa7.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/ccw/scripts/prepublish-clean.mjs +0 -1
- package/package.json +1 -3
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js +0 -150
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +0 -1
- package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js +0 -7
- package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js.map +0 -1
- package/ccw-litellm/README.md +0 -180
- package/ccw-litellm/pyproject.toml +0 -35
- package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
- package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
- package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
- package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
- package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
- package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
- package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
- package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
- package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
- package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
- package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
|
@@ -0,0 +1,616 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workflow-lite-plan
|
|
3
|
+
description: Lightweight planning skill - task analysis, multi-angle exploration, clarification, adaptive planning, confirmation, and execution handoff
|
|
4
|
+
allowed-tools: Skill, Agent, AskUserQuestion, TodoWrite, Read, Write, Edit, Bash, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<purpose>
|
|
8
|
+
Planning pipeline: explore → clarify → plan → confirm → handoff to lite-execute.
|
|
9
|
+
Produces exploration results, a structured plan (plan.json), independent task files (.task/TASK-*.json), and hands off to lite-execute for implementation.
|
|
10
|
+
</purpose>
|
|
11
|
+
|
|
12
|
+
<process>
|
|
13
|
+
|
|
14
|
+
## 1. Context Isolation
|
|
15
|
+
|
|
16
|
+
> **CRITICAL**: If invoked from analyze-with-file (via "执行任务"), the analyze-with-file session is **COMPLETE** and all its phase instructions are FINISHED and MUST NOT be referenced. Only follow LP-Phase 1-5 defined in THIS document. Phase numbers are INDEPENDENT of any prior workflow.
|
|
17
|
+
|
|
18
|
+
## 2. Input
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
<task-description> Task description or path to .md file (required)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
| Flag | Description |
|
|
25
|
+
|------|-------------|
|
|
26
|
+
| `-y`, `--yes` | Auto mode: Skip clarification, auto-confirm plan, auto-select execution, skip review (entire plan+execute workflow) |
|
|
27
|
+
| `--force-explore` | Force code exploration even when task has prior analysis |
|
|
28
|
+
|
|
29
|
+
**Note**: Workflow preferences (`autoYes`, `forceExplore`) must be initialized at skill start. If not provided by caller, skill will prompt user for workflow mode selection.
|
|
30
|
+
|
|
31
|
+
## 3. Output Artifacts
|
|
32
|
+
|
|
33
|
+
| Artifact | Description |
|
|
34
|
+
|----------|-------------|
|
|
35
|
+
| `exploration-{angle}.json` | Per-angle exploration results (1-4 files based on complexity) |
|
|
36
|
+
| `explorations-manifest.json` | Index of all exploration files |
|
|
37
|
+
| `planning-context.md` | Evidence paths + synthesized understanding |
|
|
38
|
+
| `plan.json` | Plan overview with task_ids[] (plan-overview-base-schema.json) |
|
|
39
|
+
| `.task/TASK-*.json` | Independent task files (one per task) |
|
|
40
|
+
|
|
41
|
+
**Output Directory**: `.workflow/.lite-plan/{task-slug}-{YYYY-MM-DD}/`
|
|
42
|
+
|
|
43
|
+
**Agent Usage**: All complexities → `cli-lite-planning-agent`
|
|
44
|
+
|
|
45
|
+
**Schema Reference**: `~/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json`
|
|
46
|
+
|
|
47
|
+
## 4. Phase Summary
|
|
48
|
+
|
|
49
|
+
| Phase | Core Action | Output |
|
|
50
|
+
|-------|-------------|--------|
|
|
51
|
+
| LP-0 | Initialize workflowPreferences | autoYes, forceExplore |
|
|
52
|
+
| LP-1 | Complexity assessment → parallel cli-explore-agents (1-4) | exploration-*.json + manifest |
|
|
53
|
+
| LP-2 | Aggregate + dedup clarification_needs → multi-round AskUserQuestion | clarificationContext (in-memory) |
|
|
54
|
+
| LP-3 | cli-lite-planning-agent | plan.json + .task/TASK-*.json |
|
|
55
|
+
| LP-4 | Display plan → AskUserQuestion (Confirm + Execution + Review) | userSelection |
|
|
56
|
+
| LP-5 | Build executionContext → Skill("lite-execute") | handoff (Mode 1) |
|
|
57
|
+
|
|
58
|
+
## 5. LP-Phase 0: Workflow Preferences Initialization
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
if (typeof workflowPreferences === 'undefined' || workflowPreferences === null) {
|
|
62
|
+
workflowPreferences = {
|
|
63
|
+
autoYes: false, // false: show LP-Phase 2/4 prompts | true (-y): skip all prompts
|
|
64
|
+
forceExplore: false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 6. LP-Phase 1: Intelligent Multi-Angle Exploration
|
|
70
|
+
|
|
71
|
+
**Session Setup** (MANDATORY):
|
|
72
|
+
```javascript
|
|
73
|
+
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
|
74
|
+
const taskSlug = task_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
|
75
|
+
const dateStr = getUtc8ISOString().substring(0, 10)
|
|
76
|
+
const sessionId = `${taskSlug}-${dateStr}`
|
|
77
|
+
const sessionFolder = `.workflow/.lite-plan/${sessionId}`
|
|
78
|
+
bash(`mkdir -p ${sessionFolder} && test -d ${sessionFolder} && echo "SUCCESS: ${sessionFolder}" || echo "FAILED: ${sessionFolder}"`)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**TodoWrite Template** (initial state — subsequent phases update status progressively):
|
|
82
|
+
```javascript
|
|
83
|
+
// Pattern: set phases[0..N-1].status="completed", phases[N].status="in_progress"
|
|
84
|
+
// Only full block shown here; subsequent updates follow same structure with status changes
|
|
85
|
+
TodoWrite({ todos: [
|
|
86
|
+
{ content: `LP-Phase 1: Exploration [${complexity}] ${selectedAngles.length} angles`, status: "in_progress", activeForm: `Exploring: ${selectedAngles.join(', ')}` },
|
|
87
|
+
{ content: "LP-Phase 2: Clarification", status: "pending" },
|
|
88
|
+
{ content: "LP-Phase 3: Planning [cli-lite-planning-agent]", status: "pending" },
|
|
89
|
+
{ content: "LP-Phase 4: Confirmation", status: "pending" },
|
|
90
|
+
{ content: "LP-Phase 5: Execution", status: "pending" }
|
|
91
|
+
]})
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Exploration Decision Logic**:
|
|
95
|
+
```javascript
|
|
96
|
+
const hasPriorAnalysis = /##\s*Prior Analysis/i.test(task_description)
|
|
97
|
+
const hasHandoffSpec = /```json:handoff-spec/i.test(task_description)
|
|
98
|
+
|
|
99
|
+
// Parse structured handoff from analyze-with-file (if present)
|
|
100
|
+
let handoffSpec = null
|
|
101
|
+
if (hasHandoffSpec) {
|
|
102
|
+
const specMatch = task_description.match(/```json:handoff-spec\s*\n([\s\S]*?)\n```/)
|
|
103
|
+
if (specMatch) {
|
|
104
|
+
handoffSpec = JSON.parse(specMatch[1])
|
|
105
|
+
// handoffSpec contains: { source, session_id, session_folder, summary,
|
|
106
|
+
// implementation_scope[], code_anchors[], key_files[], key_findings[], decision_context[] }
|
|
107
|
+
// implementation_scope[]: { objective, rationale, priority, target_files[], acceptance_criteria[], change_summary }
|
|
108
|
+
console.log(`[Handoff] From ${handoffSpec.source} session ${handoffSpec.session_id}`)
|
|
109
|
+
console.log(`[Handoff] ${handoffSpec.implementation_scope.length} scoped items with acceptance criteria`)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
needsExploration = workflowPreferences.forceExplore ? true
|
|
114
|
+
: (hasPriorAnalysis || hasHandoffSpec) ? false
|
|
115
|
+
: (task.mentions_specific_files ||
|
|
116
|
+
task.requires_codebase_context ||
|
|
117
|
+
task.needs_architecture_understanding ||
|
|
118
|
+
task.modifies_existing_code)
|
|
119
|
+
|
|
120
|
+
if (!needsExploration) {
|
|
121
|
+
// manifest absent; LP-Phase 3 loads with safe fallback
|
|
122
|
+
// If handoffSpec exists, it provides pre-scoped implementation context
|
|
123
|
+
proceed_to_next_phase()
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Context Protection**: File reading >=50k chars → force `needsExploration=true` (delegate to cli-explore-agent)
|
|
128
|
+
|
|
129
|
+
**Complexity Assessment**:
|
|
130
|
+
```javascript
|
|
131
|
+
const complexity = analyzeTaskComplexity(task_description)
|
|
132
|
+
// 'Low': single file, single function, zero cross-module impact (fix typo, rename var, adjust constant)
|
|
133
|
+
// 'Medium': multiple files OR integration point OR new pattern (add endpoint, implement feature, refactor)
|
|
134
|
+
// 'High': cross-module, architectural, systemic (new subsystem, migration, security overhaul)
|
|
135
|
+
// Default bias: uncertain between Low/Medium → choose Medium
|
|
136
|
+
|
|
137
|
+
const ANGLE_PRESETS = {
|
|
138
|
+
architecture: ['architecture', 'dependencies', 'modularity', 'integration-points'],
|
|
139
|
+
security: ['security', 'auth-patterns', 'dataflow', 'validation'],
|
|
140
|
+
performance: ['performance', 'bottlenecks', 'caching', 'data-access'],
|
|
141
|
+
bugfix: ['error-handling', 'dataflow', 'state-management', 'edge-cases'],
|
|
142
|
+
feature: ['patterns', 'integration-points', 'testing', 'dependencies']
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function selectAngles(taskDescription, count) {
|
|
146
|
+
const text = taskDescription.toLowerCase()
|
|
147
|
+
let preset = 'feature'
|
|
148
|
+
if (/refactor|architect|restructure|modular/.test(text)) preset = 'architecture'
|
|
149
|
+
else if (/security|auth|permission|access/.test(text)) preset = 'security'
|
|
150
|
+
else if (/performance|slow|optimi|cache/.test(text)) preset = 'performance'
|
|
151
|
+
else if (/fix|bug|error|issue|broken/.test(text)) preset = 'bugfix'
|
|
152
|
+
return ANGLE_PRESETS[preset].slice(0, count)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const selectedAngles = selectAngles(task_description, complexity === 'High' ? 4 : (complexity === 'Medium' ? 3 : 1))
|
|
156
|
+
|
|
157
|
+
console.log(`Exploration Plan: ${complexity} | ${selectedAngles.join(', ')} | cli-lite-planning-agent`)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Launch Parallel Explorations**:
|
|
161
|
+
|
|
162
|
+
**CRITICAL**: MUST NOT use `run_in_background: true` — exploration results are REQUIRED before planning.
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
const explorationTasks = selectedAngles.map((angle, index) =>
|
|
166
|
+
Task(
|
|
167
|
+
subagent_type="cli-explore-agent",
|
|
168
|
+
run_in_background=false,
|
|
169
|
+
description=`Explore: ${angle}`,
|
|
170
|
+
prompt=`
|
|
171
|
+
## Task Objective
|
|
172
|
+
Execute **${angle}** exploration for task planning context.
|
|
173
|
+
|
|
174
|
+
## Output Location
|
|
175
|
+
**Session Folder**: ${sessionFolder}
|
|
176
|
+
**Output File**: ${sessionFolder}/exploration-${angle}.json
|
|
177
|
+
|
|
178
|
+
## Assigned Context
|
|
179
|
+
- **Exploration Angle**: ${angle}
|
|
180
|
+
- **Task Description**: ${task_description}
|
|
181
|
+
- **Exploration Index**: ${index + 1} of ${selectedAngles.length}
|
|
182
|
+
|
|
183
|
+
## Exploration Strategy (${angle} focus)
|
|
184
|
+
|
|
185
|
+
**Step 1: Structural Scan** (Bash)
|
|
186
|
+
- get_modules_by_depth.sh → identify modules related to ${angle}
|
|
187
|
+
- find/rg → locate files relevant to ${angle} aspect
|
|
188
|
+
- Analyze imports/dependencies from ${angle} perspective
|
|
189
|
+
|
|
190
|
+
**Step 2: Semantic Analysis** (Gemini CLI)
|
|
191
|
+
- How does existing code handle ${angle} concerns?
|
|
192
|
+
- What patterns are used for ${angle}?
|
|
193
|
+
- Where would new code integrate from ${angle} viewpoint?
|
|
194
|
+
|
|
195
|
+
**Step 3: Write Output**
|
|
196
|
+
- Consolidate ${angle} findings into JSON
|
|
197
|
+
- Identify ${angle}-specific clarification needs
|
|
198
|
+
|
|
199
|
+
## Expected Output
|
|
200
|
+
**Schema**: explore-json-schema.json (auto-loaded by agent)
|
|
201
|
+
- All fields scoped to ${angle} perspective
|
|
202
|
+
- Ensure rationale is specific and >10 chars (not generic)
|
|
203
|
+
- Include file:line locations in integration_points
|
|
204
|
+
- _metadata.exploration_angle: "${angle}"
|
|
205
|
+
|
|
206
|
+
## Success Criteria
|
|
207
|
+
- [ ] get_modules_by_depth.sh executed
|
|
208
|
+
- [ ] At least 3 relevant files with specific rationale (>10 chars) + role classification
|
|
209
|
+
- [ ] Patterns are actionable (code examples, not generic advice)
|
|
210
|
+
- [ ] Integration points include file:line locations
|
|
211
|
+
- [ ] Constraints are project-specific to ${angle}
|
|
212
|
+
- [ ] JSON follows schema; clarification_needs includes options + recommended
|
|
213
|
+
- [ ] Files with relevance >= 0.7 have key_code array + topic_relation
|
|
214
|
+
|
|
215
|
+
## Execution
|
|
216
|
+
**Write**: \`${sessionFolder}/exploration-${angle}.json\`
|
|
217
|
+
**Return**: 2-3 sentence summary of ${angle} findings
|
|
218
|
+
`
|
|
219
|
+
)
|
|
220
|
+
)
|
|
221
|
+
// Execute all exploration tasks in parallel
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Auto-discover & Build Manifest**:
|
|
225
|
+
```javascript
|
|
226
|
+
const explorationFiles = bash(`find ${sessionFolder} -name "exploration-*.json" -type f`)
|
|
227
|
+
.split('\n').filter(f => f.trim())
|
|
228
|
+
|
|
229
|
+
const explorationManifest = {
|
|
230
|
+
session_id: sessionId,
|
|
231
|
+
task_description: task_description,
|
|
232
|
+
timestamp: getUtc8ISOString(),
|
|
233
|
+
complexity: complexity,
|
|
234
|
+
exploration_count: explorationFiles.length,
|
|
235
|
+
explorations: explorationFiles.map(file => {
|
|
236
|
+
const data = JSON.parse(Read(file))
|
|
237
|
+
return {
|
|
238
|
+
angle: data._metadata.exploration_angle,
|
|
239
|
+
file: path.basename(file),
|
|
240
|
+
path: file,
|
|
241
|
+
index: data._metadata.exploration_index
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
Write(`${sessionFolder}/explorations-manifest.json`, JSON.stringify(explorationManifest, null, 2))
|
|
247
|
+
console.log(`Exploration complete: ${explorationManifest.explorations.map(e => e.angle).join(', ')}`)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
// TodoWrite: Phase 1 → completed, Phase 2 → in_progress
|
|
251
|
+
|
|
252
|
+
**Output**: `exploration-{angle}.json` (1-4 files) + `explorations-manifest.json`
|
|
253
|
+
|
|
254
|
+
## 7. LP-Phase 2: Clarification (Optional, Multi-Round)
|
|
255
|
+
|
|
256
|
+
**Skip if**: No exploration or `clarification_needs` is empty across all explorations
|
|
257
|
+
|
|
258
|
+
**CRITICAL**: AskUserQuestion limits max 4 questions per call. **MUST execute multiple rounds** to exhaust all clarification needs.
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
const manifest = file_exists(`${sessionFolder}/explorations-manifest.json`)
|
|
262
|
+
? JSON.parse(Read(`${sessionFolder}/explorations-manifest.json`))
|
|
263
|
+
: { exploration_count: 0, explorations: [] }
|
|
264
|
+
const explorations = manifest.explorations.map(exp => ({
|
|
265
|
+
angle: exp.angle,
|
|
266
|
+
data: JSON.parse(Read(exp.path))
|
|
267
|
+
}))
|
|
268
|
+
|
|
269
|
+
// Aggregate from all explorations
|
|
270
|
+
const allClarifications = []
|
|
271
|
+
explorations.forEach(exp => {
|
|
272
|
+
if (exp.data.clarification_needs?.length > 0) {
|
|
273
|
+
exp.data.clarification_needs.forEach(need => {
|
|
274
|
+
allClarifications.push({ ...need, source_angle: exp.angle })
|
|
275
|
+
})
|
|
276
|
+
}
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
// Intelligent dedup: merge similar intent across angles, combine options
|
|
280
|
+
const dedupedClarifications = intelligentMerge(allClarifications)
|
|
281
|
+
|
|
282
|
+
if (workflowPreferences.autoYes) {
|
|
283
|
+
console.log(`[Auto] Skipping ${dedupedClarifications.length} clarification questions`)
|
|
284
|
+
} else if (dedupedClarifications.length > 0) {
|
|
285
|
+
const BATCH_SIZE = 4
|
|
286
|
+
const totalRounds = Math.ceil(dedupedClarifications.length / BATCH_SIZE)
|
|
287
|
+
|
|
288
|
+
for (let i = 0; i < dedupedClarifications.length; i += BATCH_SIZE) {
|
|
289
|
+
const batch = dedupedClarifications.slice(i, i + BATCH_SIZE)
|
|
290
|
+
const currentRound = Math.floor(i / BATCH_SIZE) + 1
|
|
291
|
+
console.log(`### Clarification Round ${currentRound}/${totalRounds}`)
|
|
292
|
+
|
|
293
|
+
AskUserQuestion({
|
|
294
|
+
questions: batch.map(need => ({
|
|
295
|
+
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
|
|
296
|
+
header: need.source_angle.substring(0, 12),
|
|
297
|
+
multiSelect: false,
|
|
298
|
+
options: need.options.map((opt, index) => ({
|
|
299
|
+
label: need.recommended === index ? `${opt} ★` : opt,
|
|
300
|
+
description: need.recommended === index ? `Recommended` : `Use ${opt}`
|
|
301
|
+
}))
|
|
302
|
+
}))
|
|
303
|
+
})
|
|
304
|
+
// Store batch responses in clarificationContext before next round
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Output**: `clarificationContext` (in-memory)
|
|
310
|
+
|
|
311
|
+
## 8. LP-Phase 3: Planning
|
|
312
|
+
|
|
313
|
+
**IMPORTANT**: LP-Phase 3 is **planning only** — NO code execution. All execution happens in LP-Phase 5 via lite-execute.
|
|
314
|
+
|
|
315
|
+
**Executor Assignment** (after plan generation):
|
|
316
|
+
```javascript
|
|
317
|
+
// Priority: 1. User explicit ("用 gemini 分析..." → gemini) | 2. Default → agent
|
|
318
|
+
const executorAssignments = {} // { taskId: { executor: 'gemini'|'codex'|'agent', reason } }
|
|
319
|
+
const taskFiles = Glob(`${sessionFolder}/.task/TASK-*.json`)
|
|
320
|
+
taskFiles.forEach(taskPath => {
|
|
321
|
+
const task = JSON.parse(Read(taskPath))
|
|
322
|
+
executorAssignments[task.id] = { executor: '...', reason: '...' }
|
|
323
|
+
})
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Invoke cli-lite-planning-agent**:
|
|
327
|
+
|
|
328
|
+
```javascript
|
|
329
|
+
Task(
|
|
330
|
+
subagent_type="cli-lite-planning-agent",
|
|
331
|
+
run_in_background=false,
|
|
332
|
+
description="Generate detailed implementation plan",
|
|
333
|
+
prompt=`
|
|
334
|
+
Generate implementation plan and write plan.json.
|
|
335
|
+
|
|
336
|
+
## Output Location
|
|
337
|
+
**Session Folder**: ${sessionFolder}
|
|
338
|
+
**Output Files**:
|
|
339
|
+
- ${sessionFolder}/planning-context.md (evidence + understanding)
|
|
340
|
+
- ${sessionFolder}/plan.json (plan overview — NO embedded tasks[])
|
|
341
|
+
- ${sessionFolder}/.task/TASK-*.json (independent task files, one per task)
|
|
342
|
+
|
|
343
|
+
## Project Context (MANDATORY)
|
|
344
|
+
Execute: ccw spec load --category planning
|
|
345
|
+
**CRITICAL**: All generated tasks MUST comply with constraints in specs/*.md
|
|
346
|
+
|
|
347
|
+
## Task Description
|
|
348
|
+
${task_description}
|
|
349
|
+
|
|
350
|
+
## Multi-Angle Exploration Context
|
|
351
|
+
|
|
352
|
+
${manifest.explorations.length > 0
|
|
353
|
+
? manifest.explorations.map(exp => `### Exploration: ${exp.angle} (${exp.file})
|
|
354
|
+
Path: ${exp.path}
|
|
355
|
+
Read this file for detailed ${exp.angle} analysis.`).join('\n\n') + `
|
|
356
|
+
|
|
357
|
+
Total: ${manifest.exploration_count} | Angles: ${manifest.explorations.map(e => e.angle).join(', ')}
|
|
358
|
+
Manifest: ${sessionFolder}/explorations-manifest.json`
|
|
359
|
+
: `No exploration files. Task Description contains "## Prior Analysis" — use as primary planning context.`}
|
|
360
|
+
|
|
361
|
+
## Structured Handoff Spec (from analyze-with-file)
|
|
362
|
+
${handoffSpec ? `
|
|
363
|
+
**Source**: ${handoffSpec.source} session ${handoffSpec.session_id}
|
|
364
|
+
**CRITICAL**: Use implementation_scope as PRIMARY input for task generation.
|
|
365
|
+
Each scope item maps to one or more tasks. Acceptance criteria become convergence.criteria.
|
|
366
|
+
|
|
367
|
+
${JSON.stringify(handoffSpec.implementation_scope, null, 2)}
|
|
368
|
+
|
|
369
|
+
**Code Anchors** (implementation targets):
|
|
370
|
+
${JSON.stringify(handoffSpec.code_anchors?.slice(0, 8), null, 2)}
|
|
371
|
+
|
|
372
|
+
**Key Findings** (context):
|
|
373
|
+
${JSON.stringify(handoffSpec.key_findings?.slice(0, 5), null, 2)}
|
|
374
|
+
|
|
375
|
+
**Task Generation Rules when handoffSpec present**:
|
|
376
|
+
1. Each implementation_scope item → 1 task (group only if tightly coupled)
|
|
377
|
+
2. scope.acceptance_criteria[] → task.convergence.criteria[]
|
|
378
|
+
3. scope.target_files[] → task.files[] with change from scope.change_summary
|
|
379
|
+
4. scope.objective → task.title, scope.rationale → task.description context
|
|
380
|
+
5. scope.priority → task ordering (high first)
|
|
381
|
+
` : 'No structured handoff spec — use task description and explorations as input.'}
|
|
382
|
+
|
|
383
|
+
## User Clarifications
|
|
384
|
+
${JSON.stringify(clarificationContext) || "None"}
|
|
385
|
+
|
|
386
|
+
## Complexity Level
|
|
387
|
+
${complexity}
|
|
388
|
+
|
|
389
|
+
## Requirements
|
|
390
|
+
- _metadata.exploration_angles: ${JSON.stringify(manifest.explorations.map(e => e.angle))}
|
|
391
|
+
- Two-layer output: plan.json (task_ids[], NO tasks[]) + .task/TASK-*.json
|
|
392
|
+
- Field names: files[].change (not modification_points), convergence.criteria (not acceptance)
|
|
393
|
+
|
|
394
|
+
## Task Grouping Rules
|
|
395
|
+
1. **Group by feature**: All changes for one feature = one task (even if 3-5 files)
|
|
396
|
+
2. **Group by context**: Related functional changes can be grouped together
|
|
397
|
+
3. **Minimize agent count**: Group simple unrelated tasks to reduce overhead
|
|
398
|
+
4. **Avoid file-per-task**: Do NOT create separate tasks for each file
|
|
399
|
+
5. **Substantial tasks**: Each task = 15-60 minutes of work
|
|
400
|
+
6. **True dependencies only**: depends_on only when Task B needs Task A's output
|
|
401
|
+
7. **Prefer parallel**: Most tasks should be independent
|
|
402
|
+
|
|
403
|
+
## Execution
|
|
404
|
+
1. ccw spec load → 2. Read ALL exploration files → 3. Synthesize + generate
|
|
405
|
+
4. Write: planning-context.md, .task/TASK-*.json, plan.json (task_ids[], NO tasks[])
|
|
406
|
+
5. Return brief completion summary
|
|
407
|
+
`
|
|
408
|
+
)
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Output**: `${sessionFolder}/plan.json`
|
|
412
|
+
|
|
413
|
+
// TodoWrite: Phase 3 → completed, Phase 4 → in_progress
|
|
414
|
+
|
|
415
|
+
## 9. LP-Phase 4: Task Confirmation & Execution Selection
|
|
416
|
+
|
|
417
|
+
**Display Plan**:
|
|
418
|
+
```javascript
|
|
419
|
+
const plan = JSON.parse(Read(`${sessionFolder}/plan.json`))
|
|
420
|
+
const tasks = (plan.task_ids || []).map(id => JSON.parse(Read(`${sessionFolder}/.task/${id}.json`)))
|
|
421
|
+
|
|
422
|
+
console.log(`
|
|
423
|
+
## Implementation Plan
|
|
424
|
+
**Summary**: ${plan.summary}
|
|
425
|
+
**Approach**: ${plan.approach}
|
|
426
|
+
**Tasks** (${tasks.length}):
|
|
427
|
+
${tasks.map((t, i) => `${i+1}. ${t.title} (${t.scope || t.files?.[0]?.path || ''})`).join('\n')}
|
|
428
|
+
**Complexity**: ${plan.complexity} | **Time**: ${plan.estimated_time} | **Recommended**: ${plan.recommended_execution}
|
|
429
|
+
`)
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**Collect Confirmation**:
|
|
433
|
+
```javascript
|
|
434
|
+
let userSelection
|
|
435
|
+
|
|
436
|
+
if (workflowPreferences.autoYes) {
|
|
437
|
+
console.log(`[Auto] Allow & Execute | Auto | Skip + Skip`)
|
|
438
|
+
userSelection = { confirmation: "Allow", execution_method: "Auto", code_review_tool: "Skip", convergence_review_tool: "Skip" }
|
|
439
|
+
} else {
|
|
440
|
+
// "Other" in Execution allows specifying CLI tools from ~/.claude/cli-tools.json
|
|
441
|
+
userSelection = AskUserQuestion({
|
|
442
|
+
questions: [
|
|
443
|
+
{
|
|
444
|
+
question: `Confirm plan and authorize execution? (${tasks.length} tasks, ${plan.complexity})`,
|
|
445
|
+
header: "Confirm",
|
|
446
|
+
multiSelect: false,
|
|
447
|
+
options: [
|
|
448
|
+
{ label: "Allow & Execute", description: "Approve plan and begin execution immediately (no further prompts)" },
|
|
449
|
+
{ label: "Modify", description: "Adjust before execution" },
|
|
450
|
+
{ label: "Cancel", description: "Abort workflow" }
|
|
451
|
+
]
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
question: "Execution method:",
|
|
455
|
+
header: "Execution",
|
|
456
|
+
multiSelect: false,
|
|
457
|
+
options: [
|
|
458
|
+
{ label: "Agent", description: "@code-developer agent" },
|
|
459
|
+
{ label: "Codex", description: "codex CLI tool" },
|
|
460
|
+
{ label: "Auto", description: `Auto: ${plan.complexity === 'Low' ? 'Agent' : 'Codex'}` }
|
|
461
|
+
]
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
question: "Code review after execution? (runs in lite-execute)",
|
|
465
|
+
header: "Code Review",
|
|
466
|
+
multiSelect: false,
|
|
467
|
+
options: [
|
|
468
|
+
{ label: "Gemini Review", description: "Gemini CLI: git diff quality review" },
|
|
469
|
+
{ label: "Codex Review", description: "Codex CLI: git-aware code review (--mode review)" },
|
|
470
|
+
{ label: "Agent Review", description: "@code-reviewer agent" },
|
|
471
|
+
{ label: "Skip", description: "No code review" }
|
|
472
|
+
]
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
question: "Convergence review in test-review phase?",
|
|
476
|
+
header: "Convergence Review",
|
|
477
|
+
multiSelect: false,
|
|
478
|
+
options: [
|
|
479
|
+
{ label: "Agent", description: "Agent: verify convergence criteria against implementation" },
|
|
480
|
+
{ label: "Gemini", description: "Gemini CLI: convergence verification" },
|
|
481
|
+
{ label: "Codex", description: "Codex CLI: convergence verification" },
|
|
482
|
+
{ label: "Skip", description: "Skip convergence review, run tests only" }
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
]
|
|
486
|
+
})
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
// TodoWrite: Phase 4 → completed `[${userSelection.execution_method} | CR:${userSelection.code_review_tool} | CVR:${userSelection.convergence_review_tool}]`, Phase 5 → in_progress
|
|
491
|
+
|
|
492
|
+
## 10. LP-Phase 5: Handoff to Execution
|
|
493
|
+
|
|
494
|
+
**CRITICAL**: lite-plan NEVER executes code directly. ALL execution goes through lite-execute.
|
|
495
|
+
|
|
496
|
+
**Build executionContext**:
|
|
497
|
+
```javascript
|
|
498
|
+
const manifest = file_exists(`${sessionFolder}/explorations-manifest.json`)
|
|
499
|
+
? JSON.parse(Read(`${sessionFolder}/explorations-manifest.json`))
|
|
500
|
+
: { exploration_count: 0, explorations: [] }
|
|
501
|
+
const explorations = {}
|
|
502
|
+
manifest.explorations.forEach(exp => {
|
|
503
|
+
if (file_exists(exp.path)) explorations[exp.angle] = JSON.parse(Read(exp.path))
|
|
504
|
+
})
|
|
505
|
+
|
|
506
|
+
const plan = JSON.parse(Read(`${sessionFolder}/plan.json`))
|
|
507
|
+
|
|
508
|
+
executionContext = {
|
|
509
|
+
planObject: plan,
|
|
510
|
+
taskFiles: (plan.task_ids || []).map(id => ({ id, path: `${sessionFolder}/.task/${id}.json` })),
|
|
511
|
+
explorationsContext: explorations,
|
|
512
|
+
explorationAngles: manifest.explorations.map(e => e.angle),
|
|
513
|
+
explorationManifest: manifest,
|
|
514
|
+
clarificationContext: clarificationContext || null,
|
|
515
|
+
executionMethod: userSelection.execution_method,
|
|
516
|
+
codeReviewTool: userSelection.code_review_tool,
|
|
517
|
+
convergenceReviewTool: userSelection.convergence_review_tool,
|
|
518
|
+
originalUserInput: task_description,
|
|
519
|
+
executorAssignments: executorAssignments, // { taskId: { executor, reason } } — overrides executionMethod
|
|
520
|
+
session: {
|
|
521
|
+
id: sessionId,
|
|
522
|
+
folder: sessionFolder,
|
|
523
|
+
artifacts: {
|
|
524
|
+
explorations: manifest.explorations.map(exp => ({ angle: exp.angle, path: exp.path })),
|
|
525
|
+
explorations_manifest: `${sessionFolder}/explorations-manifest.json`,
|
|
526
|
+
plan: `${sessionFolder}/plan.json`,
|
|
527
|
+
task_dir: `${sessionFolder}/.task`
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
**Handoff**:
|
|
534
|
+
```javascript
|
|
535
|
+
if (!workflowPreferences.autoYes) {
|
|
536
|
+
console.log(`Handing off to execution engine. No further prompts.`)
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// TodoWrite: Phase 5 → completed, add LE-Phase 1 → in_progress
|
|
540
|
+
const taskCount = (plan.task_ids || []).length
|
|
541
|
+
TodoWrite({ todos: [
|
|
542
|
+
{ content: "LP-Phase 1: Exploration", status: "completed" },
|
|
543
|
+
{ content: "LP-Phase 2: Clarification", status: "completed" },
|
|
544
|
+
{ content: "LP-Phase 3: Planning", status: "completed" },
|
|
545
|
+
{ content: `LP-Phase 4: Confirmed [${userSelection.execution_method} | CR:${userSelection.code_review_tool} | CVR:${userSelection.convergence_review_tool}]`, status: "completed" },
|
|
546
|
+
{ content: `LP-Phase 5: Handoff → lite-execute`, status: "completed" },
|
|
547
|
+
{ content: `LE-Phase 1: Task Loading [${taskCount} tasks]`, status: "in_progress", activeForm: "Loading tasks" }
|
|
548
|
+
]})
|
|
549
|
+
|
|
550
|
+
Skill("lite-execute")
|
|
551
|
+
// executionContext passed as global variable (Mode 1: In-Memory Plan)
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
## 11. Session Folder Structure
|
|
555
|
+
|
|
556
|
+
```
|
|
557
|
+
.workflow/.lite-plan/{task-slug}-{YYYY-MM-DD}/
|
|
558
|
+
├── exploration-{angle}.json (1-4) # Per-angle exploration
|
|
559
|
+
├── explorations-manifest.json # Exploration index
|
|
560
|
+
├── planning-context.md # Evidence paths + understanding
|
|
561
|
+
├── plan.json # Plan overview (task_ids[])
|
|
562
|
+
├── code-review.md # Generated by lite-execute Step 4
|
|
563
|
+
├── test-checklist.json # Generated by lite-test-review
|
|
564
|
+
├── test-review.md # Generated by lite-test-review
|
|
565
|
+
└── .task/
|
|
566
|
+
├── TASK-001.json
|
|
567
|
+
├── TASK-002.json
|
|
568
|
+
└── ...
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
## Chain: lite-plan → lite-execute → lite-test-review
|
|
572
|
+
|
|
573
|
+
```
|
|
574
|
+
lite-plan (LP-Phase 1-5)
|
|
575
|
+
└─ Skill("lite-execute") ← executionContext (global)
|
|
576
|
+
├─ Step 1-3: Task Execution
|
|
577
|
+
├─ Step 4: Code Review (quality/correctness/security)
|
|
578
|
+
└─ Step 5: Skill("lite-test-review") ← testReviewContext (global)
|
|
579
|
+
├─ TR-Phase 1: Detect test framework
|
|
580
|
+
├─ TR-Phase 2: Convergence verification (plan criteria)
|
|
581
|
+
├─ TR-Phase 3-4: Run tests + Auto-fix
|
|
582
|
+
└─ TR-Phase 5: Report + Sync specs
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
## 12. Error Handling
|
|
586
|
+
|
|
587
|
+
| Error | Resolution |
|
|
588
|
+
|-------|------------|
|
|
589
|
+
| Exploration agent failure | Skip exploration, continue with task description only |
|
|
590
|
+
| Planning agent failure | Retry with reduced complexity or suggest breaking task |
|
|
591
|
+
| Clarification timeout | Use exploration findings as-is |
|
|
592
|
+
| Confirmation timeout | Save context, display resume instructions |
|
|
593
|
+
| Modify loop > 3 times | Suggest breaking task or using /workflow-plan |
|
|
594
|
+
|
|
595
|
+
</process>
|
|
596
|
+
|
|
597
|
+
<auto_mode>
|
|
598
|
+
When `workflowPreferences.autoYes === true` (entire plan+execute workflow):
|
|
599
|
+
- **Clarification**: Skipped | **Plan Confirmation**: Allow & Execute | **Execution**: Auto | **Review**: Skip
|
|
600
|
+
|
|
601
|
+
Auto mode authorizes the complete plan-and-execute workflow with a single confirmation. No further prompts.
|
|
602
|
+
</auto_mode>
|
|
603
|
+
|
|
604
|
+
<success_criteria>
|
|
605
|
+
- [ ] Workflow preferences (autoYes, forceExplore) initialized at LP-Phase 0
|
|
606
|
+
- [ ] Complexity assessed and exploration angles selected appropriately
|
|
607
|
+
- [ ] Parallel exploration agents launched with run_in_background=false
|
|
608
|
+
- [ ] Explorations manifest built from auto-discovered files
|
|
609
|
+
- [ ] Clarification needs aggregated, deduped, and presented in batches of 4
|
|
610
|
+
- [ ] Plan generated via cli-lite-planning-agent
|
|
611
|
+
- [ ] Plan output as two-layer: plan.json (task_ids[]) + .task/TASK-*.json
|
|
612
|
+
- [ ] User confirmation collected (or auto-approved in auto mode)
|
|
613
|
+
- [ ] executionContext fully built with all artifacts and session references
|
|
614
|
+
- [ ] Handoff to lite-execute via Skill("lite-execute") with executionContext
|
|
615
|
+
- [ ] No code execution in planning phases -- all execution deferred to lite-execute
|
|
616
|
+
</success_criteria>
|