claude-code-workflow 7.2.10 → 7.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.claude/agents/cli-planning-agent.md +3 -0
  2. package/.claude/agents/debug-explore-agent.md +1 -0
  3. package/.claude/agents/tdd-developer.md +1 -0
  4. package/.claude/agents/team-worker.md +1 -1
  5. package/.claude/agents/test-action-planning-agent.md +3 -0
  6. package/.claude/agents/test-context-search-agent.md +1 -0
  7. package/.claude/agents/test-fix-agent.md +3 -0
  8. package/.claude/skills/review-code/SKILL.md +2 -0
  9. package/.claude/skills/review-cycle/SKILL.md +4 -0
  10. package/.claude/skills/skill-simplify/phases/02-optimize.md +4 -0
  11. package/.claude/skills/spec-generator/phases/05-epics-stories.md +4 -0
  12. package/.claude/skills/team-arch-opt/specs/team-config.json +5 -5
  13. package/.claude/skills/team-frontend-debug/roles/analyzer/role.md +3 -2
  14. package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
  15. package/.claude/skills/team-perf-opt/specs/team-config.json +5 -5
  16. package/.claude/skills/team-quality-assurance/roles/executor/role.md +2 -1
  17. package/.claude/skills/team-review/roles/reviewer/role.md +2 -1
  18. package/.claude/skills/team-tech-debt/roles/scanner/role.md +2 -1
  19. package/.claude/skills/team-testing/roles/executor/role.md +2 -1
  20. package/.claude/skills/team-testing/roles/generator/role.md +2 -1
  21. package/.claude/skills/team-ultra-analyze/roles/explorer/role.md +2 -1
  22. package/.claude/skills/team-ux-improve/specs/team-config.json +6 -6
  23. package/.claude/skills/workflow-execute/phases/06-review.md +4 -4
  24. package/.claude/skills/workflow-lite-test-review/SKILL.md +2 -0
  25. package/.claude/skills/workflow-plan/phases/05-plan-verify.md +4 -0
  26. package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +1 -0
  27. package/.claude/skills/workflow-tdd-plan/phases/05-tdd-task-generation.md +2 -1
  28. package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +1 -0
  29. package/.claude/skills/workflow-test-fix/phases/05-test-cycle-execute.md +2 -1
  30. package/.claude/skills/workflow-tune/SKILL.md +487 -0
  31. package/.claude/skills/workflow-tune/phases/01-setup.md +548 -0
  32. package/.claude/skills/workflow-tune/phases/02-step-execute.md +197 -0
  33. package/.claude/skills/workflow-tune/phases/03-step-analyze.md +386 -0
  34. package/.claude/skills/workflow-tune/phases/04-synthesize.md +257 -0
  35. package/.claude/skills/workflow-tune/phases/05-optimize-report.md +246 -0
  36. package/.claude/skills/workflow-tune/specs/workflow-eval-criteria.md +57 -0
  37. package/.claude/skills/workflow-tune/templates/step-analysis-prompt.md +88 -0
  38. package/.claude/skills/workflow-tune/templates/synthesis-prompt.md +90 -0
  39. package/.codex/skills/analyze-with-file/SKILL.md +2 -0
  40. package/.codex/skills/debug-with-file/SKILL.md +4 -0
  41. package/.codex/skills/issue-discover/SKILL.md +1 -0
  42. package/.codex/skills/review-cycle/phases/02-parallel-review.md +3 -0
  43. package/.codex/skills/team-designer/agents/validation-reporter.md +186 -0
  44. package/.codex/skills/team-iterdev/agents/gc-controller.md +193 -0
  45. package/.codex/skills/team-iterdev/agents/task-analyzer.md +206 -0
  46. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -0
  47. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -0
  48. package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +182 -0
  49. package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -0
  50. package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +162 -0
  51. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +4 -0
  52. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +2 -0
  53. package/ccw/dist/commands/spec.d.ts.map +1 -1
  54. package/ccw/dist/commands/spec.js +9 -4
  55. package/ccw/dist/commands/spec.js.map +1 -1
  56. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  57. package/ccw/dist/core/routes/codexlens-routes.js +3 -1
  58. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  59. package/ccw/dist/tools/spec-index-builder.d.ts +8 -4
  60. package/ccw/dist/tools/spec-index-builder.d.ts.map +1 -1
  61. package/ccw/dist/tools/spec-index-builder.js +8 -4
  62. package/ccw/dist/tools/spec-index-builder.js.map +1 -1
  63. package/ccw/dist/tools/spec-init.d.ts +1 -1
  64. package/ccw/dist/tools/spec-init.d.ts.map +1 -1
  65. package/ccw/dist/tools/spec-init.js +127 -0
  66. package/ccw/dist/tools/spec-init.js.map +1 -1
  67. package/ccw/dist/tools/spec-loader.d.ts.map +1 -1
  68. package/ccw/dist/tools/spec-loader.js +2 -1
  69. package/ccw/dist/tools/spec-loader.js.map +1 -1
  70. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js → AlertDialog-BW9jiZ-p.js} +2 -2
  71. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map} +1 -1
  72. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js → AnalysisPage-ds-w_nVO.js} +2 -2
  73. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map} +1 -1
  74. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js → ApiSettingsPage-DlCbXxTz.js} +2 -2
  75. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js.map → ApiSettingsPage-DlCbXxTz.js.map} +1 -1
  76. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js → CliModeToggle-Dq3nL4fF.js} +2 -2
  77. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js.map → CliModeToggle-Dq3nL4fF.js.map} +1 -1
  78. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js → CliSessionSharePage-BNDkEE4u.js} +2 -2
  79. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js.map → CliSessionSharePage-BNDkEE4u.js.map} +1 -1
  80. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js → CliViewerPage-ChM-uNx_.js} +2 -2
  81. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js.map → CliViewerPage-ChM-uNx_.js.map} +1 -1
  82. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js +2 -0
  83. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js.map +1 -0
  84. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js → Collapsible-CRNbykXN.js} +2 -2
  85. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js.map → Collapsible-CRNbykXN.js.map} +1 -1
  86. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js → CommandsManagerPage-C2JWcemF.js} +2 -2
  87. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js.map → CommandsManagerPage-C2JWcemF.js.map} +1 -1
  88. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js → DeepWikiPage-CvleOtJy.js} +2 -2
  89. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js.map → DeepWikiPage-CvleOtJy.js.map} +1 -1
  90. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js → EndpointsPage-CMOWQG64.js} +2 -2
  91. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js.map → EndpointsPage-CMOWQG64.js.map} +1 -1
  92. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js → ExplorerPage-DaFPRlNo.js} +2 -2
  93. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js.map → ExplorerPage-DaFPRlNo.js.map} +1 -1
  94. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js → FixSessionPage-CC4p04Az.js} +2 -2
  95. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js.map → FixSessionPage-CC4p04Az.js.map} +1 -1
  96. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js → FloatingFileBrowser-DROn1xZ5.js} +2 -2
  97. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js.map → FloatingFileBrowser-DROn1xZ5.js.map} +1 -1
  98. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js → FloatingPanel-CmL_yhDv.js} +2 -2
  99. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js.map → FloatingPanel-CmL_yhDv.js.map} +1 -1
  100. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js → GraphExplorerPage-DCV5ybKE.js} +2 -2
  101. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js.map → GraphExplorerPage-DCV5ybKE.js.map} +1 -1
  102. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js → HistoryPage-D0fYQZgc.js} +2 -2
  103. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js.map → HistoryPage-D0fYQZgc.js.map} +1 -1
  104. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js → HookManagerPage-D2FuJfsM.js} +2 -2
  105. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js.map → HookManagerPage-D2FuJfsM.js.map} +1 -1
  106. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js → InstallationsPage-tjklillZ.js} +2 -2
  107. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js.map → InstallationsPage-tjklillZ.js.map} +1 -1
  108. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js → IssueHubPage-E4JVrhO1.js} +2 -2
  109. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js.map → IssueHubPage-E4JVrhO1.js.map} +1 -1
  110. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js → LiteTasksPage-aJuRoyLt.js} +2 -2
  111. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js.map → LiteTasksPage-aJuRoyLt.js.map} +1 -1
  112. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js → McpManagerPage-BJeuWJv1.js} +2 -2
  113. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js.map → McpManagerPage-BJeuWJv1.js.map} +1 -1
  114. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js → MemoryPage-BI4FAXhs.js} +2 -2
  115. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js.map → MemoryPage-BI4FAXhs.js.map} +1 -1
  116. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js → NotFoundPage-DD2svchp.js} +2 -2
  117. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js.map → NotFoundPage-DD2svchp.js.map} +1 -1
  118. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js → OrchestratorPage-FC__7yYa.js} +2 -2
  119. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js.map → OrchestratorPage-FC__7yYa.js.map} +1 -1
  120. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js → ProjectOverviewPage-DBB_-FzV.js} +2 -2
  121. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js.map → ProjectOverviewPage-DBB_-FzV.js.map} +1 -1
  122. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js → PromptHistoryPage-BwOAvCH8.js} +2 -2
  123. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js.map → PromptHistoryPage-BwOAvCH8.js.map} +1 -1
  124. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js → ReviewSessionPage-Dd1-g_gp.js} +2 -2
  125. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js.map → ReviewSessionPage-Dd1-g_gp.js.map} +1 -1
  126. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js → RulesManagerPage-B3RGdsKD.js} +2 -2
  127. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js.map → RulesManagerPage-B3RGdsKD.js.map} +1 -1
  128. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js → SessionDetailPage-DM-W5R8K.js} +2 -2
  129. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js.map → SessionDetailPage-DM-W5R8K.js.map} +1 -1
  130. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js → SessionsPage-BVz1KCc7.js} +2 -2
  131. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js.map → SessionsPage-BVz1KCc7.js.map} +1 -1
  132. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js → SettingsPage-ComW7EZS.js} +4 -4
  133. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js.map → SettingsPage-ComW7EZS.js.map} +1 -1
  134. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js → SkillsManagerPage-CKom9XwV.js} +2 -2
  135. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js.map → SkillsManagerPage-CKom9XwV.js.map} +1 -1
  136. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js → SpecsSettingsPage-DQz7WP2s.js} +2 -2
  137. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js.map → SpecsSettingsPage-DQz7WP2s.js.map} +1 -1
  138. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js → Switch-BPMdND9H.js} +2 -2
  139. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js.map → Switch-BPMdND9H.js.map} +1 -1
  140. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js → TabsNavigation-qqt70VYL.js} +2 -2
  141. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js.map → TabsNavigation-qqt70VYL.js.map} +1 -1
  142. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js → TaskDrawer-BqK_qiHX.js} +2 -2
  143. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js.map → TaskDrawer-BqK_qiHX.js.map} +1 -1
  144. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js → TeamPage-u5_i0Rgh.js} +2 -2
  145. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js.map → TeamPage-u5_i0Rgh.js.map} +1 -1
  146. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js → TerminalDashboardPage-rUtC9e40.js} +2 -2
  147. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js.map → TerminalDashboardPage-rUtC9e40.js.map} +1 -1
  148. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js → archive-C3u8YNQF.js} +2 -2
  149. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js.map → archive-C3u8YNQF.js.map} +1 -1
  150. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js → archive-restore-DfQ998g5.js} +2 -2
  151. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js.map → archive-restore-DfQ998g5.js.map} +1 -1
  152. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js → arrow-right-BshJM9Po.js} +2 -2
  153. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js.map → arrow-right-BshJM9Po.js.map} +1 -1
  154. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js → bookmark-plus-D03qJyOZ.js} +2 -2
  155. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js.map → bookmark-plus-D03qJyOZ.js.map} +1 -1
  156. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js → bot-CyzWuwq0.js} +2 -2
  157. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js.map → bot-CyzWuwq0.js.map} +1 -1
  158. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js → braces-BPgtyjsG.js} +2 -2
  159. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js.map → braces-BPgtyjsG.js.map} +1 -1
  160. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js → circle-stop-Dix1AOmw.js} +2 -2
  161. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js.map → circle-stop-Dix1AOmw.js.map} +1 -1
  162. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js → cpu-CCQ4Q0Zh.js} +2 -2
  163. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js.map → cpu-CCQ4Q0Zh.js.map} +1 -1
  164. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js → ellipsis-vertical-BpTysg-Y.js} +2 -2
  165. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js.map → ellipsis-vertical-BpTysg-Y.js.map} +1 -1
  166. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js → eye-DGY1rAZs.js} +2 -2
  167. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js.map → eye-DGY1rAZs.js.map} +1 -1
  168. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js → eye-off-D8t3JfWG.js} +2 -2
  169. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js.map → eye-off-D8t3JfWG.js.map} +1 -1
  170. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js → file-json-BAdJb0n8.js} +2 -2
  171. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js.map → file-json-BAdJb0n8.js.map} +1 -1
  172. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js → file-text-DrJFiOUB.js} +2 -2
  173. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js.map → file-text-DrJFiOUB.js.map} +1 -1
  174. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js → filter-CKqzYbz7.js} +2 -2
  175. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js.map → filter-CKqzYbz7.js.map} +1 -1
  176. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js → folder-CV8511y9.js} +2 -2
  177. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js.map → folder-CV8511y9.js.map} +1 -1
  178. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js → gauge-XKvmu_uU.js} +2 -2
  179. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js.map → gauge-XKvmu_uU.js.map} +1 -1
  180. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js → globe-C56cDUzX.js} +2 -2
  181. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js.map → globe-C56cDUzX.js.map} +1 -1
  182. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js → grid-3x3-Bya-suFW.js} +2 -2
  183. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js.map → grid-3x3-Bya-suFW.js.map} +1 -1
  184. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js → hard-drive-CmuTZpsB.js} +2 -2
  185. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js.map → hard-drive-CmuTZpsB.js.map} +1 -1
  186. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js → hash-CRPT_tJQ.js} +2 -2
  187. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js.map → hash-CRPT_tJQ.js.map} +1 -1
  188. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js → history-C1pJZQCL.js} +2 -2
  189. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js.map → history-C1pJZQCL.js.map} +1 -1
  190. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js → index-B6TpijCe.js} +2 -2
  191. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js.map → index-B6TpijCe.js.map} +1 -1
  192. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js → index-Bcq-7r6F.js} +2 -2
  193. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js.map → index-Bcq-7r6F.js.map} +1 -1
  194. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js → index-CI8-rBff.js} +2 -2
  195. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js.map → index-CI8-rBff.js.map} +1 -1
  196. package/ccw/frontend/dist/assets/{index-CY6Lueph.js → index-Dmt9OiEf.js} +2 -2
  197. package/ccw/frontend/dist/assets/{index-CY6Lueph.js.map → index-Dmt9OiEf.js.map} +1 -1
  198. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js → index-anSMmEF8.js} +2 -2
  199. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js.map → index-anSMmEF8.js.map} +1 -1
  200. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js → index-dWT2M6Ef.js} +4 -4
  201. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js.map → index-dWT2M6Ef.js.map} +1 -1
  202. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js → layout-grid-TSO0BFQE.js} +2 -2
  203. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js.map → layout-grid-TSO0BFQE.js.map} +1 -1
  204. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js → lightbulb-Caj6fIQD.js} +2 -2
  205. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js.map → lightbulb-Caj6fIQD.js.map} +1 -1
  206. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js → link-2-DE9lMxa-.js} +2 -2
  207. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js.map → link-2-DE9lMxa-.js.map} +1 -1
  208. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js → link-BZtPgLW0.js} +2 -2
  209. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js.map → link-BZtPgLW0.js.map} +1 -1
  210. package/ccw/frontend/dist/assets/{list-CDmYFcio.js → list-DubWyY-U.js} +2 -2
  211. package/ccw/frontend/dist/assets/{list-CDmYFcio.js.map → list-DubWyY-U.js.map} +1 -1
  212. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js → map-pin-DwN_48AF.js} +2 -2
  213. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js.map → map-pin-DwN_48AF.js.map} +1 -1
  214. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js → messages-square-bjxvaiM9.js} +2 -2
  215. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js.map → messages-square-bjxvaiM9.js.map} +1 -1
  216. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js → minimize-2-CGfBKD_V.js} +2 -2
  217. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js.map → minimize-2-CGfBKD_V.js.map} +1 -1
  218. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js → package-nzWY6ilt.js} +2 -2
  219. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js.map → package-nzWY6ilt.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js → plug-CiLce49C.js} +2 -2
  221. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js.map → plug-CiLce49C.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{power-DmIojFl-.js → power-CFLmB-U9.js} +2 -2
  223. package/ccw/frontend/dist/assets/{power-DmIojFl-.js.map → power-CFLmB-U9.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{save-BFa03OnG.js → save-DuO6OF0C.js} +2 -2
  225. package/ccw/frontend/dist/assets/{save-BFa03OnG.js.map → save-DuO6OF0C.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js → send-CZk9p0mM.js} +2 -2
  227. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js.map → send-CZk9p0mM.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js → square-check-big-BY_1YQQg.js} +2 -2
  229. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js.map → square-check-big-BY_1YQQg.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js → square-pen-CnZgm6g-.js} +2 -2
  231. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js.map → square-pen-CnZgm6g-.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js → star-Cn1F0qy7.js} +2 -2
  233. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js.map → star-Cn1F0qy7.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{style-CJsrp48L.js → style-Dxs1iXCV.js} +2 -2
  235. package/ccw/frontend/dist/assets/{style-CJsrp48L.js.map → style-Dxs1iXCV.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js → target-Bz1fLRKH.js} +2 -2
  237. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js.map → target-Bz1fLRKH.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js → test-tube-C6qCYlDr.js} +2 -2
  239. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js.map → test-tube-C6qCYlDr.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js → upload-C71kd4Qs.js} +2 -2
  241. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js.map → upload-C71kd4Qs.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js → useApiSettings-CqP2BAJ7.js} +2 -2
  243. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js.map → useApiSettings-CqP2BAJ7.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js → useCli-PCoPoVeM.js} +2 -2
  245. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js.map → useCli-PCoPoVeM.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js → useCommands-3OfPQPw4.js} +2 -2
  247. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js.map → useCommands-3OfPQPw4.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js → useDebounce-bXiFhQx9.js} +2 -2
  249. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js.map → useDebounce-bXiFhQx9.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js → useFileExplorer-DEyUm46_.js} +2 -2
  251. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js.map → useFileExplorer-DEyUm46_.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js → useLocale-sXTrdxcJ.js} +2 -2
  253. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js.map → useLocale-sXTrdxcJ.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js → useSkills-D0W0kXYm.js} +3 -3
  255. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js.map → useSkills-D0W0kXYm.js.map} +1 -1
  256. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js → useSystemSettings-DZ-8lZsG.js} +2 -2
  257. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js.map → useSystemSettings-DZ-8lZsG.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js → wand-sparkles-83GmAYuw.js} +2 -2
  259. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js.map → wand-sparkles-83GmAYuw.js.map} +1 -1
  260. package/ccw/frontend/dist/index.html +1 -1
  261. package/package.json +1 -1
  262. package/.claude/skills/team-arch-opt/role-specs/analyzer.md +0 -80
  263. package/.claude/skills/team-arch-opt/role-specs/designer.md +0 -118
  264. package/.claude/skills/team-arch-opt/role-specs/refactorer.md +0 -106
  265. package/.claude/skills/team-arch-opt/role-specs/reviewer.md +0 -116
  266. package/.claude/skills/team-arch-opt/role-specs/validator.md +0 -117
  267. package/.claude/skills/team-brainstorm/role-specs/challenger.md +0 -63
  268. package/.claude/skills/team-brainstorm/role-specs/evaluator.md +0 -58
  269. package/.claude/skills/team-brainstorm/role-specs/ideator.md +0 -71
  270. package/.claude/skills/team-brainstorm/role-specs/synthesizer.md +0 -59
  271. package/.claude/skills/team-frontend/role-specs/analyst.md +0 -91
  272. package/.claude/skills/team-frontend/role-specs/architect.md +0 -85
  273. package/.claude/skills/team-frontend/role-specs/developer.md +0 -92
  274. package/.claude/skills/team-frontend/role-specs/qa.md +0 -78
  275. package/.claude/skills/team-issue/role-specs/explorer.md +0 -95
  276. package/.claude/skills/team-issue/role-specs/implementer.md +0 -89
  277. package/.claude/skills/team-issue/role-specs/integrator.md +0 -86
  278. package/.claude/skills/team-issue/role-specs/planner.md +0 -83
  279. package/.claude/skills/team-issue/role-specs/reviewer.md +0 -89
  280. package/.claude/skills/team-iterdev/role-specs/architect.md +0 -64
  281. package/.claude/skills/team-iterdev/role-specs/developer.md +0 -73
  282. package/.claude/skills/team-iterdev/role-specs/reviewer.md +0 -65
  283. package/.claude/skills/team-iterdev/role-specs/tester.md +0 -87
  284. package/.claude/skills/team-perf-opt/role-specs/benchmarker.md +0 -110
  285. package/.claude/skills/team-perf-opt/role-specs/optimizer.md +0 -102
  286. package/.claude/skills/team-perf-opt/role-specs/profiler.md +0 -73
  287. package/.claude/skills/team-perf-opt/role-specs/reviewer.md +0 -91
  288. package/.claude/skills/team-perf-opt/role-specs/strategist.md +0 -114
  289. package/.claude/skills/team-planex/role-specs/executor.md +0 -90
  290. package/.claude/skills/team-planex/role-specs/planner.md +0 -110
  291. package/.claude/skills/team-quality-assurance/role-specs/analyst.md +0 -79
  292. package/.claude/skills/team-quality-assurance/role-specs/executor.md +0 -64
  293. package/.claude/skills/team-quality-assurance/role-specs/generator.md +0 -67
  294. package/.claude/skills/team-quality-assurance/role-specs/scout.md +0 -66
  295. package/.claude/skills/team-quality-assurance/role-specs/strategist.md +0 -70
  296. package/.claude/skills/team-review/role-specs/fixer.md +0 -75
  297. package/.claude/skills/team-review/role-specs/reviewer.md +0 -66
  298. package/.claude/skills/team-review/role-specs/scanner.md +0 -70
  299. package/.claude/skills/team-roadmap-dev/role-specs/executor.md +0 -71
  300. package/.claude/skills/team-roadmap-dev/role-specs/planner.md +0 -77
  301. package/.claude/skills/team-roadmap-dev/role-specs/verifier.md +0 -73
  302. package/.claude/skills/team-tech-debt/role-specs/assessor.md +0 -70
  303. package/.claude/skills/team-tech-debt/role-specs/executor.md +0 -80
  304. package/.claude/skills/team-tech-debt/role-specs/planner.md +0 -71
  305. package/.claude/skills/team-tech-debt/role-specs/scanner.md +0 -85
  306. package/.claude/skills/team-tech-debt/role-specs/validator.md +0 -83
  307. package/.claude/skills/team-testing/role-specs/analyst.md +0 -94
  308. package/.claude/skills/team-testing/role-specs/executor.md +0 -97
  309. package/.claude/skills/team-testing/role-specs/generator.md +0 -96
  310. package/.claude/skills/team-testing/role-specs/strategist.md +0 -82
  311. package/.claude/skills/team-uidesign/role-specs/designer.md +0 -72
  312. package/.claude/skills/team-uidesign/role-specs/implementer.md +0 -74
  313. package/.claude/skills/team-uidesign/role-specs/researcher.md +0 -84
  314. package/.claude/skills/team-uidesign/role-specs/reviewer.md +0 -70
  315. package/.claude/skills/team-ux-improve/role-specs/designer.md +0 -191
  316. package/.claude/skills/team-ux-improve/role-specs/diagnoser.md +0 -110
  317. package/.claude/skills/team-ux-improve/role-specs/explorer.md +0 -109
  318. package/.claude/skills/team-ux-improve/role-specs/implementer.md +0 -164
  319. package/.claude/skills/team-ux-improve/role-specs/scanner.md +0 -117
  320. package/.claude/skills/team-ux-improve/role-specs/tester.md +0 -163
  321. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js +0 -2
  322. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js.map +0 -1
@@ -0,0 +1,548 @@
1
+ # Phase 1: Setup
2
+
3
+ Initialize workspace, parse workflow definition, semantic decomposition for natural language, generate command document, user confirmation, create state and process log.
4
+
5
+ ## Objective
6
+
7
+ - Parse workflow steps from user input (Format 1-3: direct parse, Format 4: semantic decomposition)
8
+ - Generate Command Document (formatted execution plan)
9
+ - User confirmation: Execute / Edit steps / Cancel
10
+ - Validate step commands/skill paths
11
+ - Create isolated workspace directory
12
+ - Initialize workflow-state.json and process-log.md
13
+
14
+ ## Execution
15
+
16
+ ### Step 1.1: Parse Input
17
+
18
+ ```javascript
19
+ const args = $ARGUMENTS.trim();
20
+
21
+ // Detect input format
22
+ let steps = [];
23
+ let workflowName = 'unnamed-workflow';
24
+ let workflowContext = '';
25
+
26
+ // Format 1: JSON file (--file path)
27
+ const fileMatch = args.match(/--file\s+"?([^\s"]+)"?/);
28
+ if (fileMatch) {
29
+ const wfDef = JSON.parse(Read(fileMatch[1]));
30
+ workflowName = wfDef.name || 'unnamed-workflow';
31
+ workflowContext = wfDef.description || '';
32
+ steps = wfDef.steps;
33
+ }
34
+
35
+ // Format 2: Pipe-separated commands ("cmd1 | cmd2 | cmd3")
36
+ else if (args.includes('|')) {
37
+ const rawSteps = args.split(/(?:--context|--depth|-y|--yes|--auto-fix)\s+("[^"]*"|\S+)/)[0];
38
+ steps = rawSteps.split('|').map((cmd, i) => ({
39
+ name: `step-${i + 1}`,
40
+ type: cmd.trim().startsWith('/') ? 'skill'
41
+ : cmd.trim().startsWith('ccw cli') ? 'ccw-cli'
42
+ : 'command',
43
+ command: cmd.trim(),
44
+ expected_artifacts: [],
45
+ success_criteria: ''
46
+ }));
47
+ }
48
+
49
+ // Format 3: Comma-separated skill names (matches pattern: word,word or word-word,word-word)
50
+ else if (/^[\w-]+(,[\w-]+)+/.test(args.split(/\s/)[0])) {
51
+ const skillPart = args.match(/^([^\s]+)/);
52
+ const skillNames = skillPart ? skillPart[1].split(',') : [];
53
+ steps = skillNames.map((name, i) => {
54
+ const skillPath = name.startsWith('.claude/') ? name : `.claude/skills/${name}`;
55
+ return {
56
+ name: name.replace('.claude/skills/', ''),
57
+ type: 'skill',
58
+ command: `/${name.replace('.claude/skills/', '')}`,
59
+ skill_path: skillPath,
60
+ expected_artifacts: [],
61
+ success_criteria: ''
62
+ };
63
+ });
64
+ }
65
+
66
+ // Format 4: Natural language → semantic decomposition
67
+ else {
68
+ inputFormat = 'natural-language';
69
+ naturalLanguageInput = args.replace(/--\w+\s+"[^"]*"/g, '').replace(/--\w+\s+\S+/g, '').replace(/-y|--yes/g, '').trim();
70
+ // Steps will be populated in Step 1.1b
71
+ steps = [];
72
+ }
73
+
74
+ // Parse --context
75
+ const contextMatch = args.match(/--context\s+"([^"]+)"/);
76
+ workflowContext = contextMatch ? contextMatch[1] : workflowContext;
77
+
78
+ // Parse --depth
79
+ const depthMatch = args.match(/--depth\s+(quick|standard|deep)/);
80
+ if (depthMatch) {
81
+ workflowPreferences.analysisDepth = depthMatch[1];
82
+ }
83
+
84
+ // If no context provided, ask user
85
+ if (!workflowContext) {
86
+ const response = AskUserQuestion({
87
+ questions: [{
88
+ question: "请描述这个 workflow 的目标和预期效果:",
89
+ header: "Workflow Context",
90
+ multiSelect: false,
91
+ options: [
92
+ { label: "General quality check", description: "通用质量检查,评估步骤间衔接" },
93
+ { label: "Custom description", description: "自定义描述 workflow 目标" }
94
+ ]
95
+ }]
96
+ });
97
+ workflowContext = response["Workflow Context"];
98
+ }
99
+ ```
100
+
101
+ ### Step 1.1b: Semantic Decomposition (Format 4 only)
102
+
103
+ > Skip this step if `inputFormat !== 'natural-language'`.
104
+
105
+ Decompose natural language input into a structured step chain by identifying intent verbs and mapping them to available tools/skills.
106
+
107
+ ```javascript
108
+ if (inputFormat === 'natural-language') {
109
+ // Intent-to-tool mapping (regex patterns → tool config)
110
+ const intentMap = [
111
+ { pattern: /分析|analyze|审查|inspect|scan/i, name: 'analyze', tool: 'gemini', mode: 'analysis', rule: 'analysis-analyze-code-patterns' },
112
+ { pattern: /评审|review|code.?review/i, name: 'review', tool: 'gemini', mode: 'analysis', rule: 'analysis-review-code-quality' },
113
+ { pattern: /诊断|debug|排查|diagnose/i, name: 'diagnose', tool: 'gemini', mode: 'analysis', rule: 'analysis-diagnose-bug-root-cause' },
114
+ { pattern: /安全|security|漏洞|vulnerability/i, name: 'security-audit', tool: 'gemini', mode: 'analysis', rule: 'analysis-assess-security-risks' },
115
+ { pattern: /性能|performance|perf/i, name: 'perf-analysis', tool: 'gemini', mode: 'analysis', rule: 'analysis-analyze-performance' },
116
+ { pattern: /架构|architecture/i, name: 'arch-review', tool: 'gemini', mode: 'analysis', rule: 'analysis-review-architecture' },
117
+ { pattern: /修复|fix|repair|解决/i, name: 'fix', tool: 'claude', mode: 'write', rule: 'development-debug-runtime-issues' },
118
+ { pattern: /实现|implement|开发|create|新增/i, name: 'implement', tool: 'claude', mode: 'write', rule: 'development-implement-feature' },
119
+ { pattern: /重构|refactor/i, name: 'refactor', tool: 'claude', mode: 'write', rule: 'development-refactor-codebase' },
120
+ { pattern: /测试|test|generate.?test/i, name: 'test', tool: 'claude', mode: 'write', rule: 'development-generate-tests' },
121
+ { pattern: /规划|plan|设计|design/i, name: 'plan', tool: 'gemini', mode: 'analysis', rule: 'planning-plan-architecture-design' },
122
+ { pattern: /拆解|breakdown|分解/i, name: 'breakdown', tool: 'gemini', mode: 'analysis', rule: 'planning-breakdown-task-steps' },
123
+ ];
124
+
125
+ // Segment input by Chinese/English delimiters: 、,,;然后/接着/最后/之后 etc.
126
+ const segments = naturalLanguageInput
127
+ .split(/[,,;;、]|(?:然后|接着|之后|最后|再|并|and then|then|finally|next)\s*/i)
128
+ .map(s => s.trim())
129
+ .filter(Boolean);
130
+
131
+ // Match each segment to an intent (with ambiguity resolution)
132
+ steps = segments.map((segment, i) => {
133
+ const allMatches = intentMap.filter(m => m.pattern.test(segment));
134
+ let matched = allMatches[0] || null;
135
+
136
+ // ★ Ambiguity resolution: if multiple intents match, ask user
137
+ if (allMatches.length > 1) {
138
+ const disambig = AskUserQuestion({
139
+ questions: [{
140
+ question: `"${segment}" 匹配到多个意图,请选择最符合的:`,
141
+ header: `Disambiguate Step ${i + 1}`,
142
+ multiSelect: false,
143
+ options: allMatches.map(m => ({
144
+ label: m.name,
145
+ description: `Tool: ${m.tool}, Mode: ${m.mode}, Rule: ${m.rule}`
146
+ }))
147
+ }]
148
+ });
149
+ const chosen = disambig[`Disambiguate Step ${i + 1}`];
150
+ matched = allMatches.find(m => m.name === chosen) || allMatches[0];
151
+ }
152
+
153
+ if (matched) {
154
+ // Extract target scope from segment (e.g., "分析 src 目录" → scope = "src")
155
+ const scopeMatch = segment.match(/(?:目录|文件|模块|directory|file|module)?\s*[::]?\s*(\S+)/);
156
+ const scope = scopeMatch ? scopeMatch[1].replace(/[的地得]$/, '') : '**/*';
157
+
158
+ return {
159
+ name: `${matched.name}`,
160
+ type: 'ccw-cli',
161
+ command: `ccw cli -p "${segment}" --tool ${matched.tool} --mode ${matched.mode} --rule ${matched.rule}`,
162
+ tool: matched.tool,
163
+ mode: matched.mode,
164
+ rule: matched.rule,
165
+ original_text: segment,
166
+ expected_artifacts: [],
167
+ success_criteria: ''
168
+ };
169
+ } else {
170
+ // Unmatched segment → generic analysis step
171
+ return {
172
+ name: `step-${i + 1}`,
173
+ type: 'ccw-cli',
174
+ command: `ccw cli -p "${segment}" --tool gemini --mode analysis`,
175
+ tool: 'gemini',
176
+ mode: 'analysis',
177
+ rule: 'universal-rigorous-style',
178
+ original_text: segment,
179
+ expected_artifacts: [],
180
+ success_criteria: ''
181
+ };
182
+ }
183
+ });
184
+
185
+ // Deduplicate: if same intent name appears twice, suffix with index
186
+ const nameCount = {};
187
+ steps.forEach(s => {
188
+ nameCount[s.name] = (nameCount[s.name] || 0) + 1;
189
+ if (nameCount[s.name] > 1) {
190
+ s.name = `${s.name}-${nameCount[s.name]}`;
191
+ }
192
+ });
193
+
194
+ // Set workflow context from the full natural language input
195
+ if (!workflowContext) {
196
+ workflowContext = naturalLanguageInput;
197
+ }
198
+ workflowName = 'nl-workflow'; // natural language derived
199
+ }
200
+ ```
201
+
202
+ ### Step 1.1c: Generate Command Document
203
+
204
+ Generate a formatted execution plan for user review. This runs for ALL input formats, not just Format 4.
205
+
206
+ ```javascript
207
+ function generateCommandDoc(steps, workflowName, workflowContext, analysisDepth) {
208
+ const stepTable = steps.map((s, i) => {
209
+ const tool = s.tool || (s.type === 'skill' ? '-' : 'claude');
210
+ const mode = s.mode || (s.type === 'skill' ? '-' : 'write');
211
+ const cmdPreview = s.command.length > 60 ? s.command.substring(0, 57) + '...' : s.command;
212
+ return `| ${i + 1} | ${s.name} | ${s.type} | \`${cmdPreview}\` | ${tool} | ${mode} |`;
213
+ }).join('\n');
214
+
215
+ const flowDiagram = steps.map((s, i) => {
216
+ const arrow = i < steps.length - 1 ? '\n ↓' : '';
217
+ const feedsInto = i < steps.length - 1 ? `Feeds into: Step ${i + 2} (${steps[i + 1].name})` : 'Final step';
218
+ const originalText = s.original_text ? `\n Source: "${s.original_text}"` : '';
219
+ return `Step ${i + 1}: ${s.name}
220
+ Command: ${s.command}
221
+ Type: ${s.type} | Tool: ${s.tool || '-'} | Mode: ${s.mode || '-'}${originalText}
222
+ ${feedsInto}${arrow}`;
223
+ }).join('\n');
224
+
225
+ const totalCli = steps.filter(s => s.type === 'ccw-cli').length;
226
+ const totalSkill = steps.filter(s => s.type === 'skill').length;
227
+ const totalCmd = steps.filter(s => s.type === 'command').length;
228
+
229
+ return `# Workflow Tune — Execution Plan
230
+
231
+ **Workflow**: ${workflowName}
232
+ **Goal**: ${workflowContext}
233
+ **Steps**: ${steps.length}
234
+ **Analysis Depth**: ${analysisDepth}
235
+
236
+ ## Step Chain
237
+
238
+ | # | Name | Type | Command | Tool | Mode |
239
+ |---|------|------|---------|------|------|
240
+ ${stepTable}
241
+
242
+ ## Execution Flow
243
+
244
+ \`\`\`
245
+ ${flowDiagram}
246
+ \`\`\`
247
+
248
+ ## Estimated Scope
249
+
250
+ - CLI execute calls: ${totalCli}
251
+ - Skill invocations: ${totalSkill}
252
+ - Shell commands: ${totalCmd}
253
+ - Analysis calls (gemini --resume chain): ${steps.length} (per-step) + 1 (synthesis)
254
+ - Process documentation: process-log.md (accumulated)
255
+ - Final output: final-report.md with optimization recommendations
256
+ `;
257
+ }
258
+
259
+ const commandDoc = generateCommandDoc(steps, workflowName, workflowContext, workflowPreferences.analysisDepth);
260
+
261
+ // Output command document to user (direct text output)
262
+ // The orchestrator displays this as formatted text before confirmation
263
+ ```
264
+
265
+ ### Step 1.1d: Pre-Execution Confirmation
266
+
267
+ ```javascript
268
+ // ★ Skip confirmation if -y/--yes auto mode
269
+ if (!workflowPreferences.autoYes) {
270
+ // Display commandDoc to user as formatted text output
271
+ // Then ask for confirmation
272
+
273
+ const confirmation = AskUserQuestion({
274
+ questions: [{
275
+ question: "确认执行以上 Workflow 调优计划?",
276
+ header: "Confirm Execution",
277
+ multiSelect: false,
278
+ options: [
279
+ { label: "Execute (确认执行)", description: "按计划开始执行所有步骤" },
280
+ { label: "Edit steps (修改步骤)", description: "调整步骤顺序、增删步骤、更换工具" },
281
+ { label: "Cancel (取消)", description: "取消本次调优" }
282
+ ]
283
+ }]
284
+ });
285
+
286
+ const choice = confirmation["Confirm Execution"];
287
+
288
+ if (choice.startsWith("Cancel")) {
289
+ // Abort: no workspace created, no state written
290
+ // Output: "Workflow tune cancelled."
291
+ return;
292
+ }
293
+
294
+ if (choice.startsWith("Edit")) {
295
+ // Enter edit loop: ask user what to change, apply, re-display, re-confirm
296
+ let editing = true;
297
+ while (editing) {
298
+ const editResponse = AskUserQuestion({
299
+ questions: [{
300
+ question: "请描述要修改的内容:\n" +
301
+ " - 删除步骤: '删除步骤2' 或 'remove step 2'\n" +
302
+ " - 添加步骤: '在步骤1后加入安全扫描' 或 'add security scan after step 1'\n" +
303
+ " - 修改工具: '步骤3改用codex' 或 'step 3 use codex'\n" +
304
+ " - 调换顺序: '步骤2和步骤3互换' 或 'swap step 2 and 3'\n" +
305
+ " - 修改命令: '步骤1命令改为 ccw cli -p \"...\" --tool gemini'",
306
+ header: "Edit Steps"
307
+ }]
308
+ });
309
+
310
+ const editText = editResponse["Edit Steps"];
311
+
312
+ // Apply edits to steps[] based on user instruction
313
+ // The orchestrator interprets the edit instruction and modifies steps:
314
+ //
315
+ // Delete: filter out the specified step, re-index
316
+ // Add: insert new step at specified position
317
+ // Modify tool: update the step's tool/mode/command
318
+ // Swap: exchange positions of two steps
319
+ // Modify command: replace command string
320
+ //
321
+ // After applying edits, re-generate command doc and re-display
322
+
323
+ const updatedCommandDoc = generateCommandDoc(steps, workflowName, workflowContext, workflowPreferences.analysisDepth);
324
+ // Display updatedCommandDoc to user
325
+
326
+ const reconfirm = AskUserQuestion({
327
+ questions: [{
328
+ question: "修改后的计划如上,是否确认?",
329
+ header: "Confirm Execution",
330
+ multiSelect: false,
331
+ options: [
332
+ { label: "Execute (确认执行)", description: "按修改后的计划执行" },
333
+ { label: "Edit more (继续修改)", description: "还需要调整" },
334
+ { label: "Cancel (取消)", description: "取消本次调优" }
335
+ ]
336
+ }]
337
+ });
338
+
339
+ const reChoice = reconfirm["Confirm Execution"];
340
+ if (reChoice.startsWith("Execute")) {
341
+ editing = false;
342
+ } else if (reChoice.startsWith("Cancel")) {
343
+ return; // Abort
344
+ }
345
+ // else: continue editing loop
346
+ }
347
+ }
348
+
349
+ // choice === "Execute" → proceed to workspace creation
350
+ }
351
+
352
+ // Save command doc for reference
353
+ // Will be written to workspace after Step 1.3
354
+ ```
355
+
356
+ ### Step 1.2: Validate Steps
357
+
358
+ ```javascript
359
+ for (const step of steps) {
360
+ if (step.type === 'skill' && step.skill_path) {
361
+ const skillFiles = Glob(`${step.skill_path}/SKILL.md`);
362
+ if (skillFiles.length === 0) {
363
+ step.validation = 'warning';
364
+ step.validation_msg = `Skill not found: ${step.skill_path}`;
365
+ } else {
366
+ step.validation = 'ok';
367
+ }
368
+ } else {
369
+ // Command-type steps: basic validation (non-empty)
370
+ step.validation = step.command && step.command.trim() ? 'ok' : 'invalid';
371
+ }
372
+ }
373
+
374
+ const invalidSteps = steps.filter(s => s.validation === 'invalid');
375
+ if (invalidSteps.length > 0) {
376
+ throw new Error(`Invalid steps: ${invalidSteps.map(s => s.name).join(', ')}`);
377
+ }
378
+ ```
379
+
380
+ ### Step 1.2b: Generate Test Requirements (Acceptance Criteria)
381
+
382
+ > 调优的前提:为每一步生成跟任务匹配的验收标准。没有预期基准,就无法判断命令执行是否达标。
383
+
384
+ 用 Gemini 根据 step command + workflow context + 上下游关系,自动推断每步的验收标准。
385
+
386
+ ```javascript
387
+ // Build step chain description for context
388
+ const stepChainDesc = steps.map((s, i) =>
389
+ `Step ${i + 1}: ${s.name} (${s.type}) — ${s.command}`
390
+ ).join('\n');
391
+
392
+ const reqGenPrompt = `PURPOSE: Generate concrete acceptance criteria (test requirements) for each step in a workflow pipeline. These criteria will be used to objectively judge whether each step's execution succeeded or failed.
393
+
394
+ WORKFLOW:
395
+ Name: ${workflowName}
396
+ Goal: ${workflowContext}
397
+
398
+ STEP CHAIN:
399
+ ${stepChainDesc}
400
+
401
+ TASK:
402
+ For each step, generate:
403
+ 1. **expected_outputs** — what files/artifacts should be produced (specific filenames or patterns)
404
+ 2. **content_signals** — what content patterns indicate success (keywords, structures, data shapes)
405
+ 3. **quality_thresholds** — minimum quality bar (e.g., "no empty files", "JSON must be parseable", "must contain at least N items")
406
+ 4. **pass_criteria** — 1-2 sentence description of what "pass" looks like for this step
407
+ 5. **fail_signals** — what patterns indicate failure (error messages, empty output, wrong format)
408
+ 6. **handoff_contract** — what this step must provide for the next step to work (data format, required fields)
409
+
410
+ CONTEXT RULES:
411
+ - Infer from the command what the step is supposed to do
412
+ - Consider workflow goal when judging what "good enough" means
413
+ - Each step's handoff_contract should match what the next step needs as input
414
+ - Be specific: "report.md with ## Summary section" not "a report file"
415
+
416
+ EXPECTED OUTPUT (strict JSON, no markdown):
417
+ {
418
+ "step_requirements": [
419
+ {
420
+ "step_index": 0,
421
+ "step_name": "<name>",
422
+ "expected_outputs": ["<file or pattern>"],
423
+ "content_signals": ["<keyword or pattern that indicates success>"],
424
+ "quality_thresholds": ["<minimum bar>"],
425
+ "pass_criteria": "<what pass looks like>",
426
+ "fail_signals": ["<pattern that indicates failure>"],
427
+ "handoff_contract": "<what next step needs from this step>"
428
+ }
429
+ ]
430
+ }
431
+
432
+ CONSTRAINTS: Be specific to each command, output ONLY JSON`;
433
+
434
+ Bash({
435
+ command: `ccw cli -p "${escapeForShell(reqGenPrompt)}" --tool gemini --mode analysis --rule universal-rigorous-style`,
436
+ run_in_background: true,
437
+ timeout: 300000
438
+ });
439
+
440
+ // STOP — wait for hook callback
441
+ // After callback: parse JSON, attach requirements to each step
442
+
443
+ const reqOutput = /* CLI output from callback */;
444
+ const reqJsonMatch = reqOutput.match(/\{[\s\S]*\}/);
445
+
446
+ if (reqJsonMatch) {
447
+ try {
448
+ const reqData = JSON.parse(reqJsonMatch[0]);
449
+ (reqData.step_requirements || []).forEach(req => {
450
+ const idx = req.step_index;
451
+ if (idx >= 0 && idx < steps.length) {
452
+ steps[idx].test_requirements = {
453
+ expected_outputs: req.expected_outputs || [],
454
+ content_signals: req.content_signals || [],
455
+ quality_thresholds: req.quality_thresholds || [],
456
+ pass_criteria: req.pass_criteria || '',
457
+ fail_signals: req.fail_signals || [],
458
+ handoff_contract: req.handoff_contract || ''
459
+ };
460
+ }
461
+ });
462
+ } catch (e) {
463
+ // Fallback: proceed without generated requirements
464
+ // Steps will use any manually provided success_criteria
465
+ }
466
+ }
467
+
468
+ // Capture session ID for resume chain start
469
+ const reqSessionMatch = reqOutput.match(/\[CCW_EXEC_ID=([^\]]+)\]/);
470
+ const reqSessionId = reqSessionMatch ? reqSessionMatch[1] : null;
471
+ ```
472
+
473
+ ### Step 1.3: Create Workspace
474
+
475
+ ```javascript
476
+ const ts = Date.now();
477
+ const workDir = `.workflow/.scratchpad/workflow-tune-${ts}`;
478
+
479
+ Bash(`mkdir -p "${workDir}/steps"`);
480
+
481
+ // Create per-step directories
482
+ for (let i = 0; i < steps.length; i++) {
483
+ Bash(`mkdir -p "${workDir}/steps/step-${i + 1}/artifacts"`);
484
+ }
485
+ ```
486
+
487
+ ### Step 1.3b: Save Command Document
488
+
489
+ ```javascript
490
+ // Save confirmed command doc to workspace for reference
491
+ Write(`${workDir}/command-doc.md`, commandDoc);
492
+ ```
493
+
494
+ ### Step 1.4: Initialize State
495
+
496
+ ```javascript
497
+ const initialState = {
498
+ status: 'running',
499
+ started_at: new Date().toISOString(),
500
+ updated_at: new Date().toISOString(),
501
+ workflow_name: workflowName,
502
+ workflow_context: workflowContext,
503
+ analysis_depth: workflowPreferences.analysisDepth,
504
+ auto_fix: workflowPreferences.autoFix,
505
+ steps: steps.map((s, i) => ({
506
+ ...s,
507
+ index: i,
508
+ status: 'pending',
509
+ execution: null,
510
+ analysis: null,
511
+ test_requirements: s.test_requirements || null // from Step 1.2b
512
+ })),
513
+ analysis_session_id: reqSessionId || null, // resume chain starts from requirements generation
514
+ process_log_entries: [],
515
+ synthesis: null,
516
+ errors: [],
517
+ error_count: 0,
518
+ max_errors: 3,
519
+ work_dir: workDir
520
+ };
521
+
522
+ Write(`${workDir}/workflow-state.json`, JSON.stringify(initialState, null, 2));
523
+ ```
524
+
525
+ ### Step 1.5: Initialize Process Log
526
+
527
+ ```javascript
528
+ const processLog = `# Workflow Tune Process Log
529
+
530
+ **Workflow**: ${workflowName}
531
+ **Context**: ${workflowContext}
532
+ **Steps**: ${steps.length}
533
+ **Analysis Depth**: ${workflowPreferences.analysisDepth}
534
+ **Started**: ${new Date().toISOString()}
535
+
536
+ ---
537
+
538
+ `;
539
+
540
+ Write(`${workDir}/process-log.md`, processLog);
541
+ ```
542
+
543
+ ## Output
544
+
545
+ - **Variables**: `workDir`, `steps[]`, `workflowContext`, `commandDoc`, initialized state
546
+ - **Files**: `workflow-state.json`, `process-log.md`, `command-doc.md`, per-step directories
547
+ - **User Confirmation**: Execution plan confirmed (or cancelled → abort)
548
+ - **TaskUpdate**: Mark Phase 1 completed, start Step Loop