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.
Files changed (348) hide show
  1. package/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
  2. package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
  3. package/.claude/agents/action-planning-agent.md +7 -4
  4. package/.claude/agents/cli-explore-agent.md +77 -63
  5. package/.claude/agents/cli-lite-planning-agent.md +11 -10
  6. package/.claude/agents/issue-plan-agent.md +421 -426
  7. package/.claude/commands/workflow/spec/setup.md +1 -1
  8. package/.claude/skills/ccw-chain/SKILL.md +119 -0
  9. package/.claude/skills/ccw-chain/chains/ccw-cycle.json +21 -0
  10. package/.claude/skills/ccw-chain/chains/ccw-exploration.json +47 -0
  11. package/.claude/skills/ccw-chain/chains/ccw-issue.json +33 -0
  12. package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +57 -0
  13. package/.claude/skills/ccw-chain/chains/ccw-main.json +52 -0
  14. package/.claude/skills/ccw-chain/chains/ccw-standard.json +39 -0
  15. package/.claude/skills/ccw-chain/chains/ccw-team.json +10 -0
  16. package/.claude/skills/ccw-chain/chains/ccw-with-file.json +31 -0
  17. package/.claude/skills/ccw-chain/phases/analyze-with-file.md +788 -0
  18. package/.claude/skills/ccw-chain/phases/brainstorm/SKILL.md +408 -0
  19. package/.claude/skills/ccw-chain/phases/brainstorm/phases/01-mode-routing.md +207 -0
  20. package/.claude/skills/ccw-chain/phases/brainstorm/phases/02-artifacts.md +567 -0
  21. package/.claude/skills/ccw-chain/phases/brainstorm/phases/03-role-analysis.md +748 -0
  22. package/.claude/skills/ccw-chain/phases/brainstorm/phases/04-synthesis.md +827 -0
  23. package/.claude/skills/ccw-chain/phases/brainstorm-with-file.md +482 -0
  24. package/.claude/skills/ccw-chain/phases/collaborative-plan-with-file.md +639 -0
  25. package/.claude/skills/ccw-chain/phases/debug-with-file.md +656 -0
  26. package/.claude/skills/ccw-chain/phases/integration-test-cycle.md +936 -0
  27. package/.claude/skills/ccw-chain/phases/issue-convert-to-plan.md +720 -0
  28. package/.claude/skills/ccw-chain/phases/issue-discover.md +483 -0
  29. package/.claude/skills/ccw-chain/phases/issue-execute.md +629 -0
  30. package/.claude/skills/ccw-chain/phases/issue-from-brainstorm.md +382 -0
  31. package/.claude/skills/ccw-chain/phases/issue-plan.md +343 -0
  32. package/.claude/skills/ccw-chain/phases/issue-queue.md +464 -0
  33. package/.claude/skills/ccw-chain/phases/refactor-cycle.md +852 -0
  34. package/.claude/skills/ccw-chain/phases/review-cycle/SKILL.md +132 -0
  35. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-fix.md +760 -0
  36. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-module.md +764 -0
  37. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-session.md +775 -0
  38. package/.claude/skills/ccw-chain/phases/roadmap-with-file.md +544 -0
  39. package/.claude/skills/ccw-chain/phases/spec-generator/SKILL.md +338 -0
  40. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-5-requirement-clarification.md +404 -0
  41. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-discovery.md +257 -0
  42. package/.claude/skills/ccw-chain/phases/spec-generator/phases/02-product-brief.md +274 -0
  43. package/.claude/skills/ccw-chain/phases/spec-generator/phases/03-requirements.md +184 -0
  44. package/.claude/skills/ccw-chain/phases/spec-generator/phases/04-architecture.md +248 -0
  45. package/.claude/skills/ccw-chain/phases/spec-generator/phases/05-epics-stories.md +178 -0
  46. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-5-auto-fix.md +144 -0
  47. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-readiness-check.md +480 -0
  48. package/.claude/skills/ccw-chain/phases/team-planex.md +123 -0
  49. package/.claude/skills/ccw-chain/phases/ui-design-explore-auto.md +678 -0
  50. package/.claude/skills/ccw-chain/phases/unified-execute-with-file.md +870 -0
  51. package/.claude/skills/ccw-chain/phases/workflow-execute/SKILL.md +625 -0
  52. package/.claude/skills/ccw-chain/phases/workflow-execute/phases/06-review.md +215 -0
  53. package/.claude/skills/ccw-chain/phases/workflow-lite-plan.md +616 -0
  54. package/.claude/skills/ccw-chain/phases/workflow-multi-cli-plan.md +424 -0
  55. package/.claude/skills/ccw-chain/phases/workflow-plan/SKILL.md +466 -0
  56. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/01-session-discovery.md +99 -0
  57. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/02-context-gathering.md +338 -0
  58. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/03-conflict-resolution.md +422 -0
  59. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/04-task-generation.md +440 -0
  60. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/05-plan-verify.md +395 -0
  61. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/06-replan.md +594 -0
  62. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/SKILL.md +527 -0
  63. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/01-session-discovery.md +57 -0
  64. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/02-context-gathering.md +407 -0
  65. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/03-test-coverage-analysis.md +172 -0
  66. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -0
  67. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/05-tdd-task-generation.md +473 -0
  68. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/06-tdd-structure-validation.md +189 -0
  69. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/07-tdd-verify.md +635 -0
  70. package/.claude/skills/ccw-chain/phases/workflow-test-fix/SKILL.md +482 -0
  71. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/01-session-start.md +60 -0
  72. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/02-test-context-gather.md +493 -0
  73. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/03-test-concept-enhanced.md +150 -0
  74. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/04-test-task-generate.md +346 -0
  75. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/05-test-cycle-execute.md +538 -0
  76. package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
  77. package/.claude/skills/ccw-chain/specs/intent-patterns.md +60 -0
  78. package/.claude/skills/chain-loader/SKILL.md +78 -0
  79. package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
  80. package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
  81. package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
  82. package/.claude/skills/chain-loader/specs/chain-schema.md +99 -0
  83. package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
  84. package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
  85. package/.claude/skills/review-cycle/phases/review-module.md +764 -764
  86. package/.claude/skills/review-cycle/phases/review-session.md +775 -775
  87. package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
  88. package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
  89. package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
  90. package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
  91. package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
  92. package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
  93. package/.codex/skills/brainstorm/SKILL.md +3 -3
  94. package/.codex/skills/clean/SKILL.md +3 -3
  95. package/.codex/skills/issue-discover/SKILL.md +13 -13
  96. package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
  97. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
  98. package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
  99. package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
  100. package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
  101. package/.codex/skills/review-cycle/SKILL.md +10 -10
  102. package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
  103. package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
  104. package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
  105. package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
  106. package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
  107. package/.codex/skills/spec-generator/README.md +1 -1
  108. package/.codex/skills/spec-generator/SKILL.md +184 -88
  109. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
  110. package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
  111. package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
  112. package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
  113. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
  114. package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
  115. package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
  116. package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
  117. package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
  118. package/.codex/skills/spec-setup/SKILL.md +4 -4
  119. package/.codex/skills/workflow-plan/SKILL.md +6 -6
  120. package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
  121. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
  122. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
  123. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
  124. package/README.md +14 -0
  125. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  126. package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
  127. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  128. package/ccw/dist/tools/chain-loader.d.ts +10 -0
  129. package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
  130. package/ccw/dist/tools/chain-loader.js +642 -0
  131. package/ccw/dist/tools/chain-loader.js.map +1 -0
  132. package/ccw/dist/tools/index.d.ts.map +1 -1
  133. package/ccw/dist/tools/index.js +2 -0
  134. package/ccw/dist/tools/index.js.map +1 -1
  135. package/ccw/dist/tools/json-builder.js +20 -0
  136. package/ccw/dist/tools/json-builder.js.map +1 -1
  137. package/ccw/dist/types/chain-types.d.ts +72 -0
  138. package/ccw/dist/types/chain-types.d.ts.map +1 -0
  139. package/ccw/dist/types/chain-types.js +5 -0
  140. package/ccw/dist/types/chain-types.js.map +1 -0
  141. package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js → AlertDialog-exlTDW81.js} +3 -3
  142. package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js.map → AlertDialog-exlTDW81.js.map} +1 -1
  143. package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js → AnalysisPage-cgV9LfAI.js} +2 -2
  144. package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
  145. package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
  146. package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
  147. package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js → CliModeToggle-Be9xsPiv.js} +2 -2
  148. package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
  149. package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
  150. package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
  151. package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js → CliViewerPage-BrE-oyEq.js} +2 -2
  152. package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
  153. package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js → CodexLensPage-Cd3nrC93.js} +2 -2
  154. package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
  155. package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js → Collapsible-DXFl3VKF.js} +2 -2
  156. package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
  157. package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
  158. package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
  159. package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js → DeepWikiPage-CpDxtmRX.js} +2 -2
  160. package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
  161. package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js → EndpointsPage-BchjWe7s.js} +2 -2
  162. package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
  163. package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js → ExplorerPage-CbWvaJ0y.js} +2 -2
  164. package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
  165. package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js → FixSessionPage-YMjVRiCk.js} +2 -2
  166. package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
  167. package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
  168. package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
  169. package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js → FloatingPanel-BtqzqDVq.js} +2 -2
  170. package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
  171. package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
  172. package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
  173. package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js → HistoryPage-BuWpQ7k5.js} +2 -2
  174. package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
  175. package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js → HookManagerPage-D0BtMIWy.js} +2 -2
  176. package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
  177. package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js → InstallationsPage-C7dwsAKG.js} +2 -2
  178. package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
  179. package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js → IssueHubPage-D0nCNaeB.js} +2 -2
  180. package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
  181. package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
  182. package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
  183. package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js → McpManagerPage-C-S5CehM.js} +2 -2
  184. package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
  185. package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js → MemoryPage-P_B0JVUQ.js} +2 -2
  186. package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
  187. package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js → NotFoundPage-S4Jn9LUE.js} +2 -2
  188. package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
  189. package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
  190. package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
  191. package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
  192. package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
  193. package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js → PromptHistoryPage-YEMjFARX.js} +3 -3
  194. package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
  195. package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js → ReviewSessionPage-DnTm55nG.js} +2 -2
  196. package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
  197. package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js → RulesManagerPage-CUwebtO2.js} +2 -2
  198. package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
  199. package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
  200. package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
  201. package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js → SessionsPage-BpgP4087.js} +2 -2
  202. package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js.map → SessionsPage-BpgP4087.js.map} +1 -1
  203. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
  204. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
  205. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
  206. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
  207. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
  208. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
  209. package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js → Switch-CYSPdqWk.js} +2 -2
  210. package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js.map → Switch-CYSPdqWk.js.map} +1 -1
  211. package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js → TabsNavigation-CPh6Zor1.js} +2 -2
  212. package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
  213. package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js → TaskDrawer-Ds-8830B.js} +2 -2
  214. package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
  215. package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js → TeamPage-CJODUxBk.js} +2 -2
  216. package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js.map → TeamPage-CJODUxBk.js.map} +1 -1
  217. package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
  218. package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
  219. package/ccw/frontend/dist/assets/{archive-DxemgIhF.js → archive-CjwVpw6k.js} +2 -2
  220. package/ccw/frontend/dist/assets/{archive-DxemgIhF.js.map → archive-CjwVpw6k.js.map} +1 -1
  221. package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js → archive-restore-2vZa9Ic3.js} +2 -2
  222. package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
  223. package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js → arrow-right-CUU5XDgT.js} +2 -2
  224. package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
  226. package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{bot-DOwFtzak.js → bot-BwpSRDUa.js} +2 -2
  228. package/ccw/frontend/dist/assets/{bot-DOwFtzak.js.map → bot-BwpSRDUa.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{braces-96qH3aFh.js → braces-DBzUW1XC.js} +2 -2
  230. package/ccw/frontend/dist/assets/{braces-96qH3aFh.js.map → braces-DBzUW1XC.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js → circle-stop-CGNNsjvE.js} +2 -2
  232. package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js → cpu-D27G86Ul.js} +2 -2
  234. package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js.map → cpu-D27G86Ul.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
  236. package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js → eye-C6MOB7Au.js} +2 -2
  238. package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js.map → eye-C6MOB7Au.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js → eye-off-BxfBlZ26.js} +2 -2
  240. package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js.map → eye-off-BxfBlZ26.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js → file-json-NI237wA-.js} +2 -2
  242. package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js.map → file-json-NI237wA-.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js → file-text-Byn2_2v6.js} +2 -2
  244. package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js.map → file-text-Byn2_2v6.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{filter-q9g-bknU.js → filter-D-7PhZjx.js} +2 -2
  246. package/ccw/frontend/dist/assets/{filter-q9g-bknU.js.map → filter-D-7PhZjx.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{folder-CL6vb42J.js → folder-BoAsK_FL.js} +2 -2
  248. package/ccw/frontend/dist/assets/{folder-CL6vb42J.js.map → folder-BoAsK_FL.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js → gauge-DCSxJIS4.js} +2 -2
  250. package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js.map → gauge-DCSxJIS4.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js → globe-CHS3prza.js} +2 -2
  252. package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js.map → globe-CHS3prza.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js → grid-3x3-D7K35U7S.js} +2 -2
  254. package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js → hard-drive-eq9xE07G.js} +2 -2
  256. package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js.map → hard-drive-eq9xE07G.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{hash-80O0kJO7.js → hash-C1DMpBua.js} +2 -2
  258. package/ccw/frontend/dist/assets/{hash-80O0kJO7.js.map → hash-C1DMpBua.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js → history-Di5SBCY-.js} +2 -2
  260. package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js.map → history-Di5SBCY-.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{index-mbeo62f8.js → index--_R7COnA.js} +2 -2
  262. package/ccw/frontend/dist/assets/{index-mbeo62f8.js.map → index--_R7COnA.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{index-rLgoBCfV.js → index-BUol9HDD.js} +3 -3
  264. package/ccw/frontend/dist/assets/{index-rLgoBCfV.js.map → index-BUol9HDD.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{index-Bs80iCX0.js → index-CT9oykfw.js} +2 -2
  266. package/ccw/frontend/dist/assets/{index-Bs80iCX0.js.map → index-CT9oykfw.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js → index-Ddwvf87H.js} +2 -2
  268. package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js.map → index-Ddwvf87H.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js → layout-grid-LiX0qZbN.js} +2 -2
  270. package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js → lightbulb-CL3DVEwb.js} +2 -2
  272. package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js → link-2-CC5cFeq6.js} +2 -2
  274. package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js.map → link-2-CC5cFeq6.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{link-koEYiemK.js → link-ngFQ9bs0.js} +2 -2
  276. package/ccw/frontend/dist/assets/{link-koEYiemK.js.map → link-ngFQ9bs0.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{list-v2_GaLdC.js → list-BEU6I0KK.js} +2 -2
  278. package/ccw/frontend/dist/assets/{list-v2_GaLdC.js.map → list-BEU6I0KK.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js → map-pin-BWZdLA6y.js} +2 -2
  280. package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js.map → map-pin-BWZdLA6y.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js → messages-square-K6_Chm7n.js} +2 -2
  282. package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js.map → messages-square-K6_Chm7n.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js → minimize-2-CWkphauf.js} +2 -2
  284. package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js.map → minimize-2-CWkphauf.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/{package-CH3smL37.js → package-DrNgkamn.js} +2 -2
  286. package/ccw/frontend/dist/assets/{package-CH3smL37.js.map → package-DrNgkamn.js.map} +1 -1
  287. package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js → plug-CMo3sw5_.js} +2 -2
  288. package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js.map → plug-CMo3sw5_.js.map} +1 -1
  289. package/ccw/frontend/dist/assets/{power-F2A_J4l6.js → power-DppNTW5e.js} +2 -2
  290. package/ccw/frontend/dist/assets/{power-F2A_J4l6.js.map → power-DppNTW5e.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{save-Byxot0YU.js → save-CD8aPMbZ.js} +2 -2
  292. package/ccw/frontend/dist/assets/{save-Byxot0YU.js.map → save-CD8aPMbZ.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{send-JjqhUkpw.js → send-B4z90fQD.js} +2 -2
  294. package/ccw/frontend/dist/assets/{send-JjqhUkpw.js.map → send-B4z90fQD.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js → settings-2-CAKRU_QC.js} +2 -2
  296. package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js.map → settings-2-CAKRU_QC.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js → square-check-big-KhI3HrzX.js} +2 -2
  298. package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js → square-pen-BtdGIpuq.js} +2 -2
  300. package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js.map → square-pen-BtdGIpuq.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js → star-ZoBUkXoD.js} +2 -2
  302. package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js.map → star-ZoBUkXoD.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{style-CKs7nnn3.js → style-CltxQP-P.js} +2 -2
  304. package/ccw/frontend/dist/assets/{style-CKs7nnn3.js.map → style-CltxQP-P.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{target-DW5tsDW6.js → target-C32OUSGf.js} +2 -2
  306. package/ccw/frontend/dist/assets/{target-DW5tsDW6.js.map → target-C32OUSGf.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js → test-tube-0IxoyAVZ.js} +2 -2
  308. package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js → upload-4eKCkyBn.js} +2 -2
  310. package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js.map → upload-4eKCkyBn.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js → useApiSettings-zLTUWqhi.js} +2 -2
  312. package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js → useCli-BtN2vpOX.js} +2 -2
  314. package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js.map → useCli-BtN2vpOX.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js → useCommands-_spj49qL.js} +2 -2
  316. package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js.map → useCommands-_spj49qL.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js → useDebounce-Bm9KFZvd.js} +2 -2
  318. package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js → useFileExplorer-DOmpm6v9.js} +2 -2
  320. package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js → useLocale-D2rj4rea.js} +2 -2
  322. package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js.map → useLocale-D2rj4rea.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js → useSkills-OskEpomF.js} +3 -3
  324. package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js.map → useSkills-OskEpomF.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js → useSystemSettings-BjMgsNSF.js} +2 -2
  326. package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js → wand-sparkles-CLhyYWa7.js} +2 -2
  328. package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
  329. package/ccw/frontend/dist/index.html +1 -1
  330. package/ccw/scripts/prepublish-clean.mjs +0 -1
  331. package/package.json +1 -3
  332. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js +0 -150
  333. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +0 -1
  334. package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js +0 -7
  335. package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js.map +0 -1
  336. package/ccw-litellm/README.md +0 -180
  337. package/ccw-litellm/pyproject.toml +0 -35
  338. package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
  339. package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
  340. package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
  341. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
  342. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
  343. package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
  344. package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
  345. package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
  346. package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
  347. package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
  348. package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
@@ -0,0 +1,483 @@
1
+ ---
2
+ name: issue:discover
3
+ description: Discover potential issues from multiple perspectives (bug, UX, test, quality, security, performance, maintainability, best-practices) using CLI explore. Supports Exa external research for security and best-practices perspectives.
4
+ argument-hint: "[-y|--yes] <path-pattern> [--perspectives=bug,ux,...] [--external]"
5
+ allowed-tools: Skill(*), TodoWrite(*), Read(*), Bash(*), Agent(*), AskUserQuestion(*), Glob(*), Grep(*)
6
+ ---
7
+
8
+ ## Auto Mode
9
+
10
+ When `--yes` or `-y`: Auto-select all perspectives, skip confirmations.
11
+
12
+ # Issue Discovery Command
13
+
14
+ ## Quick Start
15
+
16
+ ```bash
17
+ # Discover issues in specific module (interactive perspective selection)
18
+ /issue:discover src/auth/**
19
+
20
+ # Discover with specific perspectives
21
+ /issue:discover src/payment/** --perspectives=bug,security,test
22
+
23
+ # Discover with external research for all perspectives
24
+ /issue:discover src/api/** --external
25
+
26
+ # Discover in multiple modules
27
+ /issue:discover src/auth/**,src/payment/**
28
+ ```
29
+
30
+ **Discovery Scope**: Specified modules/files only
31
+ **Output Directory**: `.workflow/issues/discoveries/{discovery-id}/`
32
+ **Available Perspectives**: bug, ux, test, quality, security, performance, maintainability, best-practices
33
+ **Exa Integration**: Auto-enabled for security and best-practices perspectives
34
+ **CLI Tools**: Gemini → Qwen → Codex (fallback chain)
35
+
36
+ ## What & Why
37
+
38
+ ### Core Concept
39
+ Multi-perspective issue discovery orchestrator that explores code from different angles to identify potential bugs, UX improvements, test gaps, and other actionable items. Unlike code review (which assesses existing code quality), discovery focuses on **finding opportunities for improvement and potential problems**.
40
+
41
+ **vs Code Review**:
42
+ - **Code Review** (`review-module-cycle`): Evaluates code quality against standards
43
+ - **Issue Discovery** (`issue:discover`): Finds actionable issues, bugs, and improvement opportunities
44
+
45
+ ### Value Proposition
46
+ 1. **Proactive Issue Detection**: Find problems before they become bugs
47
+ 2. **Multi-Perspective Analysis**: Each perspective surfaces different types of issues
48
+ 3. **External Benchmarking**: Compare against industry best practices via Exa
49
+ 4. **Direct Issue Integration**: Discoveries can be exported to issue tracker
50
+ 5. **Dashboard Management**: View, filter, and export discoveries via CCW dashboard
51
+
52
+ ## How It Works
53
+
54
+ ### Execution Flow
55
+
56
+ ```
57
+ Phase 1: Discovery & Initialization
58
+ └─ Parse target pattern, create session, initialize output structure
59
+
60
+ Phase 2: Interactive Perspective Selection
61
+ └─ AskUserQuestion for perspective selection (or use --perspectives)
62
+
63
+ Phase 3: Parallel Perspective Analysis
64
+ ├─ Launch N @cli-explore-agent instances (one per perspective)
65
+ ├─ Security & Best-Practices auto-trigger Exa research
66
+ ├─ Agent writes perspective JSON, returns summary
67
+ └─ Update discovery-progress.json
68
+
69
+ Phase 4: Aggregation & Prioritization
70
+ ├─ Collect agent return summaries
71
+ ├─ Load perspective JSON files
72
+ ├─ Merge findings, deduplicate by file+line
73
+ └─ Calculate priority scores
74
+
75
+ Phase 5: Issue Generation & Summary
76
+ ├─ Convert high-priority discoveries to issue format
77
+ ├─ Write to discovery-issues.jsonl
78
+ ├─ Generate single summary.md from agent returns
79
+ └─ Update discovery-state.json to complete
80
+
81
+ Phase 6: User Action Prompt
82
+ └─ AskUserQuestion for next step (export/dashboard/skip)
83
+ ```
84
+
85
+ ## Perspectives
86
+
87
+ ### Available Perspectives
88
+
89
+ | Perspective | Focus | Categories | Exa |
90
+ |-------------|-------|------------|-----|
91
+ | **bug** | Potential Bugs | edge-case, null-check, resource-leak, race-condition, boundary, exception-handling | - |
92
+ | **ux** | User Experience | error-message, loading-state, feedback, accessibility, interaction, consistency | - |
93
+ | **test** | Test Coverage | missing-test, edge-case-test, integration-gap, coverage-hole, assertion-quality | - |
94
+ | **quality** | Code Quality | complexity, duplication, naming, documentation, code-smell, readability | - |
95
+ | **security** | Security Issues | injection, auth, encryption, input-validation, data-exposure, access-control | ✓ |
96
+ | **performance** | Performance | n-plus-one, memory-usage, caching, algorithm, blocking-operation, resource | - |
97
+ | **maintainability** | Maintainability | coupling, cohesion, tech-debt, extensibility, module-boundary, interface-design | - |
98
+ | **best-practices** | Best Practices | convention, pattern, framework-usage, anti-pattern, industry-standard | ✓ |
99
+
100
+ ### Interactive Perspective Selection
101
+
102
+ When no `--perspectives` flag is provided, the command uses AskUserQuestion:
103
+
104
+ ```javascript
105
+ AskUserQuestion({
106
+ questions: [{
107
+ question: "Select primary discovery focus:",
108
+ header: "Focus",
109
+ multiSelect: false,
110
+ options: [
111
+ { label: "Bug + Test + Quality", description: "Quick scan: potential bugs, test gaps, code quality (Recommended)" },
112
+ { label: "Security + Performance", description: "System audit: security issues, performance bottlenecks" },
113
+ { label: "Maintainability + Best-practices", description: "Long-term health: coupling, tech debt, conventions" },
114
+ { label: "Full analysis", description: "All 7 perspectives (comprehensive, takes longer)" }
115
+ ]
116
+ }]
117
+ })
118
+ ```
119
+
120
+ **Recommended Combinations**:
121
+ - Quick scan: bug, test, quality
122
+ - Full analysis: all perspectives
123
+ - Security audit: security, bug, quality
124
+
125
+ ## Core Responsibilities
126
+
127
+ ### Orchestrator
128
+
129
+ **Phase 1: Discovery & Initialization**
130
+
131
+ ```javascript
132
+ // Step 1: Parse target pattern and resolve files
133
+ const resolvedFiles = await expandGlobPattern(targetPattern);
134
+ if (resolvedFiles.length === 0) {
135
+ throw new Error(`No files matched pattern: ${targetPattern}`);
136
+ }
137
+
138
+ // Step 2: Generate discovery ID
139
+ const discoveryId = `DSC-${formatDate(new Date(), 'YYYYMMDD-HHmmss')}`;
140
+
141
+ // Step 3: Create output directory
142
+ const outputDir = `.workflow/issues/discoveries/${discoveryId}`;
143
+ await mkdir(outputDir, { recursive: true });
144
+ await mkdir(`${outputDir}/perspectives`, { recursive: true });
145
+
146
+ // Step 4: Initialize unified discovery state (merged state+progress)
147
+ await writeJson(`${outputDir}/discovery-state.json`, {
148
+ discovery_id: discoveryId,
149
+ target_pattern: targetPattern,
150
+ phase: "initialization",
151
+ created_at: new Date().toISOString(),
152
+ updated_at: new Date().toISOString(),
153
+ target: { files_count: { total: resolvedFiles.length }, project: {} },
154
+ perspectives: [], // filled after selection: [{name, status, findings}]
155
+ external_research: { enabled: false, completed: false },
156
+ results: { total_findings: 0, issues_generated: 0, priority_distribution: {} }
157
+ });
158
+ ```
159
+
160
+ **Phase 2: Perspective Selection**
161
+
162
+ ```javascript
163
+ // Check for --perspectives flag
164
+ let selectedPerspectives = [];
165
+
166
+ if (args.perspectives) {
167
+ selectedPerspectives = args.perspectives.split(',').map(p => p.trim());
168
+ } else {
169
+ // Interactive selection via AskUserQuestion
170
+ const response = await AskUserQuestion({...});
171
+ selectedPerspectives = parseSelectedPerspectives(response);
172
+ }
173
+
174
+ // Validate and update state
175
+ await updateDiscoveryState(outputDir, {
176
+ 'metadata.perspectives': selectedPerspectives,
177
+ phase: 'parallel'
178
+ });
179
+ ```
180
+
181
+ **Phase 3: Parallel Perspective Analysis**
182
+
183
+ Launch N agents in parallel (one per selected perspective):
184
+
185
+ ```javascript
186
+ // Launch agents in parallel - agents write JSON and return summary
187
+ const agentPromises = selectedPerspectives.map(perspective =>
188
+ Agent({
189
+ subagent_type: "cli-explore-agent",
190
+ run_in_background: false,
191
+ description: `Discover ${perspective} issues`,
192
+ prompt: buildPerspectivePrompt(perspective, discoveryId, resolvedFiles, outputDir)
193
+ })
194
+ );
195
+
196
+ // Wait for all agents - collect their return summaries
197
+ const results = await Promise.all(agentPromises);
198
+ // results contain agent summaries for final report
199
+ ```
200
+
201
+ **Phase 4: Aggregation & Prioritization**
202
+
203
+ ```javascript
204
+ // Load all perspective JSON files written by agents
205
+ const allFindings = [];
206
+ for (const perspective of selectedPerspectives) {
207
+ const jsonPath = `${outputDir}/perspectives/${perspective}.json`;
208
+ if (await fileExists(jsonPath)) {
209
+ const data = await readJson(jsonPath);
210
+ allFindings.push(...data.findings.map(f => ({ ...f, perspective })));
211
+ }
212
+ }
213
+
214
+ // Deduplicate and prioritize
215
+ const prioritizedFindings = deduplicateAndPrioritize(allFindings);
216
+
217
+ // Update unified state
218
+ await updateDiscoveryState(outputDir, {
219
+ phase: 'aggregation',
220
+ 'results.total_findings': prioritizedFindings.length,
221
+ 'results.priority_distribution': countByPriority(prioritizedFindings)
222
+ });
223
+ ```
224
+
225
+ **Phase 5: Issue Generation & Summary**
226
+
227
+ ```javascript
228
+ // Convert high-priority findings to issues
229
+ const issueWorthy = prioritizedFindings.filter(f =>
230
+ f.priority === 'critical' || f.priority === 'high' || f.priority_score >= 0.7
231
+ );
232
+
233
+ // Write discovery-issues.jsonl
234
+ await writeJsonl(`${outputDir}/discovery-issues.jsonl`, issues);
235
+
236
+ // Generate single summary.md from agent return summaries
237
+ // Orchestrator briefly summarizes what agents returned (NO detailed reports)
238
+ await writeSummaryFromAgentReturns(outputDir, results, prioritizedFindings, issues);
239
+
240
+ // Update final state
241
+ await updateDiscoveryState(outputDir, {
242
+ phase: 'complete',
243
+ updated_at: new Date().toISOString(),
244
+ 'results.issues_generated': issues.length
245
+ });
246
+ ```
247
+
248
+ **Phase 6: User Action Prompt**
249
+
250
+ ```javascript
251
+ // Prompt user for next action based on discovery results
252
+ const hasHighPriority = issues.some(i => i.priority === 'critical' || i.priority === 'high');
253
+ const hasMediumFindings = prioritizedFindings.some(f => f.priority === 'medium');
254
+
255
+ // Auto mode: auto-select recommended action
256
+ if (autoYes) {
257
+ if (hasHighPriority) {
258
+ await appendJsonl('.workflow/issues/issues.jsonl', issues);
259
+ console.log(`Exported ${issues.length} issues. Run /issue:plan to continue.`);
260
+ } else {
261
+ console.log('Discovery complete. No significant issues found.');
262
+ }
263
+ return;
264
+ }
265
+
266
+ await AskUserQuestion({
267
+ questions: [{
268
+ question: `Discovery complete: ${issues.length} issues generated, ${prioritizedFindings.length} total findings. What would you like to do next?`,
269
+ header: "Next Step",
270
+ multiSelect: false,
271
+ options: hasHighPriority ? [
272
+ { label: "Export to Issues (Recommended)", description: `${issues.length} high-priority issues found - export to issue tracker for planning` },
273
+ { label: "Open Dashboard", description: "Review findings in ccw view before exporting" },
274
+ { label: "Skip", description: "Complete discovery without exporting" }
275
+ ] : hasMediumFindings ? [
276
+ { label: "Open Dashboard (Recommended)", description: "Review medium-priority findings in ccw view to decide which to export" },
277
+ { label: "Export to Issues", description: `Export ${issues.length} issues to tracker` },
278
+ { label: "Skip", description: "Complete discovery without exporting" }
279
+ ] : [
280
+ { label: "Skip (Recommended)", description: "No significant issues found - complete discovery" },
281
+ { label: "Open Dashboard", description: "Review all findings in ccw view" },
282
+ { label: "Export to Issues", description: `Export ${issues.length} issues anyway` }
283
+ ]
284
+ }]
285
+ });
286
+
287
+ // Handle response
288
+ if (response === "Export to Issues") {
289
+ // Append to issues.jsonl
290
+ await appendJsonl('.workflow/issues/issues.jsonl', issues);
291
+ console.log(`Exported ${issues.length} issues. Run /issue:plan to continue.`);
292
+ } else if (response === "Open Dashboard") {
293
+ console.log('Run `ccw view` and navigate to Issues > Discovery to manage findings.');
294
+ }
295
+ ```
296
+
297
+ ### Output File Structure
298
+
299
+ ```
300
+ .workflow/issues/discoveries/
301
+ ├── index.json # Discovery session index
302
+ └── {discovery-id}/
303
+ ├── discovery-state.json # Unified state (merged state+progress)
304
+ ├── perspectives/
305
+ │ └── {perspective}.json # Per-perspective findings
306
+ ├── external-research.json # Exa research results (if enabled)
307
+ ├── discovery-issues.jsonl # Generated candidate issues
308
+ └── summary.md # Single summary (from agent returns)
309
+ ```
310
+
311
+ ### Schema References
312
+
313
+ **External Schema Files** (agent MUST read and follow exactly):
314
+
315
+ | Schema | Path | Purpose |
316
+ |--------|------|---------|
317
+ | **Discovery State** | `~/.ccw/workflows/cli-templates/schemas/discovery-state-schema.json` | Session state machine |
318
+ | **Discovery Finding** | `~/.ccw/workflows/cli-templates/schemas/discovery-finding-schema.json` | Perspective analysis results |
319
+
320
+ ### Agent Invocation Template
321
+
322
+ **Perspective Analysis Agent**:
323
+
324
+ ```javascript
325
+ Agent({
326
+ subagent_type: "cli-explore-agent",
327
+ run_in_background: false,
328
+ description: `Discover ${perspective} issues`,
329
+ prompt: `
330
+ ## Task Objective
331
+ Discover potential ${perspective} issues in specified module files.
332
+
333
+ ## Discovery Context
334
+ - Discovery ID: ${discoveryId}
335
+ - Perspective: ${perspective}
336
+ - Target Pattern: ${targetPattern}
337
+ - Resolved Files: ${resolvedFiles.length} files
338
+ - Output Directory: ${outputDir}
339
+
340
+ ## MANDATORY FIRST STEPS
341
+ 1. Read discovery state: ${outputDir}/discovery-state.json
342
+ 2. Read schema: ~/.ccw/workflows/cli-templates/schemas/discovery-finding-schema.json
343
+ 3. Analyze target files for ${perspective} concerns
344
+
345
+ ## Output Requirements
346
+
347
+ **1. Write JSON file**: ${outputDir}/perspectives/${perspective}.json
348
+ - Follow discovery-finding-schema.json exactly
349
+ - Each finding: id, title, priority, category, description, file, line, snippet, suggested_issue, confidence
350
+
351
+ **2. Return summary** (DO NOT write report file):
352
+ - Return a brief text summary of findings
353
+ - Include: total findings, priority breakdown, key issues
354
+ - This summary will be used by orchestrator for final report
355
+
356
+ ## Perspective-Specific Guidance
357
+ ${getPerspectiveGuidance(perspective)}
358
+
359
+ ## Success Criteria
360
+ - [ ] JSON written to ${outputDir}/perspectives/${perspective}.json
361
+ - [ ] Summary returned with findings count and key issues
362
+ - [ ] Each finding includes actionable suggested_issue
363
+ - [ ] Priority uses lowercase enum: critical/high/medium/low
364
+ `
365
+ })
366
+ ```
367
+
368
+ **Exa Research Agent** (for security and best-practices):
369
+
370
+ ```javascript
371
+ Agent({
372
+ subagent_type: "cli-explore-agent",
373
+ run_in_background: false,
374
+ description: `External research for ${perspective} via Exa`,
375
+ prompt: `
376
+ ## Task Objective
377
+ Research industry best practices for ${perspective} using Exa search
378
+
379
+ ## Research Steps
380
+ 1. Read project tech stack: .workflow/project-tech.json
381
+ 2. Use Exa to search for best practices
382
+ 3. Synthesize findings relevant to this project
383
+
384
+ ## Output Requirements
385
+
386
+ **1. Write JSON file**: ${outputDir}/external-research.json
387
+ - Include sources, key_findings, gap_analysis, recommendations
388
+
389
+ **2. Return summary** (DO NOT write report file):
390
+ - Brief summary of external research findings
391
+ - Key recommendations for the project
392
+
393
+ ## Success Criteria
394
+ - [ ] JSON written to ${outputDir}/external-research.json
395
+ - [ ] Summary returned with key recommendations
396
+ - [ ] Findings are relevant to project's tech stack
397
+ `
398
+ })
399
+ ```
400
+
401
+ ### Perspective Guidance Reference
402
+
403
+ ```javascript
404
+ function getPerspectiveGuidance(perspective) {
405
+ const guidance = {
406
+ bug: `
407
+ Focus: Null checks, edge cases, resource leaks, race conditions, boundary conditions, exception handling
408
+ Priority: Critical=data corruption/crash, High=malfunction, Medium=edge case issues, Low=minor
409
+ `,
410
+ ux: `
411
+ Focus: Error messages, loading states, feedback, accessibility, interaction patterns, form validation
412
+ Priority: Critical=inaccessible, High=confusing, Medium=inconsistent, Low=cosmetic
413
+ `,
414
+ test: `
415
+ Focus: Missing unit tests, edge case coverage, integration gaps, assertion quality, test isolation
416
+ Priority: Critical=no security tests, High=no core logic tests, Medium=weak coverage, Low=minor gaps
417
+ `,
418
+ quality: `
419
+ Focus: Complexity, duplication, naming, documentation, code smells, readability
420
+ Priority: Critical=unmaintainable, High=significant issues, Medium=naming/docs, Low=minor refactoring
421
+ `,
422
+ security: `
423
+ Focus: Input validation, auth/authz, injection, XSS/CSRF, data exposure, access control
424
+ Priority: Critical=auth bypass/injection, High=missing authz, Medium=weak validation, Low=headers
425
+ `,
426
+ performance: `
427
+ Focus: N+1 queries, memory leaks, caching, algorithm efficiency, blocking operations
428
+ Priority: Critical=memory leaks, High=N+1/inefficient, Medium=missing cache, Low=minor optimization
429
+ `,
430
+ maintainability: `
431
+ Focus: Coupling, interface design, tech debt, extensibility, module boundaries, configuration
432
+ Priority: Critical=unrelated code changes, High=unclear boundaries, Medium=coupling, Low=refactoring
433
+ `,
434
+ 'best-practices': `
435
+ Focus: Framework conventions, language patterns, anti-patterns, deprecated APIs, coding standards
436
+ Priority: Critical=anti-patterns causing bugs, High=convention violations, Medium=style, Low=cosmetic
437
+ `
438
+ };
439
+ return guidance[perspective] || 'General code discovery analysis';
440
+ }
441
+ ```
442
+
443
+ ## Dashboard Integration
444
+
445
+ ### Viewing Discoveries
446
+
447
+ Open CCW dashboard to manage discoveries:
448
+
449
+ ```bash
450
+ ccw view
451
+ ```
452
+
453
+ Navigate to **Issues > Discovery** to:
454
+ - View all discovery sessions
455
+ - Filter findings by perspective and priority
456
+ - Preview finding details
457
+ - Select and export findings as issues
458
+
459
+ ### Exporting to Issues
460
+
461
+ From the dashboard, select findings and click "Export as Issues" to:
462
+ 1. Convert discoveries to standard issue format
463
+ 2. Append to `.workflow/issues/issues.jsonl`
464
+ 3. Set status to `registered`
465
+ 4. Continue with `/issue:plan` workflow
466
+
467
+ ## Related Commands
468
+
469
+ ```bash
470
+ # After discovery, plan solutions for exported issues
471
+ /issue:plan DSC-001,DSC-002,DSC-003
472
+
473
+ # Or use interactive management
474
+ /issue:manage
475
+ ```
476
+
477
+ ## Best Practices
478
+
479
+ 1. **Start Focused**: Begin with specific modules rather than entire codebase
480
+ 2. **Use Quick Scan First**: Start with bug, test, quality for fast results
481
+ 3. **Review Before Export**: Not all discoveries warrant issues - use dashboard to filter
482
+ 4. **Combine Perspectives**: Run related perspectives together (e.g., security + bug)
483
+ 5. **Enable Exa for New Tech**: When using unfamiliar frameworks, enable external research