claude-code-workflow 6.3.32 → 6.3.36

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 (483) hide show
  1. package/.claude/CLAUDE.md +6 -1
  2. package/.claude/agents/action-planning-agent.md +885 -885
  3. package/.claude/agents/cli-discuss-agent.md +391 -391
  4. package/.claude/agents/cli-execution-agent.md +68 -6
  5. package/.claude/agents/cli-lite-planning-agent.md +323 -37
  6. package/.claude/agents/cli-planning-agent.md +2 -2
  7. package/.claude/agents/code-developer.md +407 -403
  8. package/.claude/agents/conceptual-planning-agent.md +11 -0
  9. package/.claude/agents/debug-explore-agent.md +3 -3
  10. package/.claude/agents/doc-generator.md +3 -3
  11. package/.claude/agents/issue-plan-agent.md +417 -340
  12. package/.claude/agents/issue-queue-agent.md +1 -1
  13. package/.claude/agents/memory-bridge.md +95 -95
  14. package/.claude/agents/test-context-search-agent.md +402 -402
  15. package/.claude/agents/ui-design-agent.md +595 -595
  16. package/.claude/agents/universal-executor.md +134 -134
  17. package/.claude/commands/cli/codex-review.md +361 -0
  18. package/.claude/commands/issue/discover-by-prompt.md +1 -1
  19. package/.claude/commands/issue/execute.md +581 -581
  20. package/.claude/commands/issue/new.md +413 -413
  21. package/.claude/commands/issue/plan.md +21 -7
  22. package/.claude/commands/issue/queue.md +441 -382
  23. package/.claude/commands/memory/code-map-memory.md +687 -687
  24. package/.claude/commands/memory/compact.md +383 -383
  25. package/.claude/commands/memory/docs-full-cli.md +471 -471
  26. package/.claude/commands/memory/docs-related-cli.md +386 -386
  27. package/.claude/commands/memory/docs.md +615 -615
  28. package/.claude/commands/memory/load-skill-memory.md +182 -182
  29. package/.claude/commands/memory/skill-memory.md +525 -525
  30. package/.claude/commands/memory/style-skill-memory.md +396 -396
  31. package/.claude/commands/memory/swagger-docs.md +773 -773
  32. package/.claude/commands/memory/tech-research-rules.md +2 -2
  33. package/.claude/commands/memory/update-full.md +332 -332
  34. package/.claude/commands/memory/workflow-skill-memory.md +517 -517
  35. package/.claude/commands/task/create.md +151 -151
  36. package/.claude/commands/task/replan.md +436 -436
  37. package/.claude/commands/version.md +254 -254
  38. package/.claude/commands/workflow/brainstorm/api-designer.md +587 -587
  39. package/.claude/commands/workflow/brainstorm/auto-parallel.md +11 -0
  40. package/.claude/commands/workflow/brainstorm/data-architect.md +220 -220
  41. package/.claude/commands/workflow/brainstorm/product-manager.md +200 -200
  42. package/.claude/commands/workflow/brainstorm/product-owner.md +200 -200
  43. package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -200
  44. package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  45. package/.claude/commands/workflow/brainstorm/system-architect.md +389 -389
  46. package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
  47. package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
  48. package/.claude/commands/workflow/debug-with-file.md +666 -0
  49. package/.claude/commands/workflow/debug.md +327 -327
  50. package/.claude/commands/workflow/execute.md +498 -498
  51. package/.claude/commands/workflow/lite-execute.md +74 -31
  52. package/.claude/commands/workflow/lite-fix.md +631 -631
  53. package/.claude/commands/workflow/lite-lite-lite.md +39 -11
  54. package/.claude/commands/workflow/lite-plan.md +4 -2
  55. package/.claude/commands/workflow/multi-cli-plan.md +97 -39
  56. package/.claude/commands/workflow/plan.md +551 -551
  57. package/.claude/commands/workflow/replan.md +515 -515
  58. package/.claude/commands/workflow/review-fix.md +610 -610
  59. package/.claude/commands/workflow/review-module-cycle.md +771 -771
  60. package/.claude/commands/workflow/review-session-cycle.md +782 -782
  61. package/.claude/commands/workflow/review.md +322 -322
  62. package/.claude/commands/workflow/session/list.md +95 -95
  63. package/.claude/commands/workflow/session/resume.md +60 -60
  64. package/.claude/commands/workflow/session/solidify.md +299 -299
  65. package/.claude/commands/workflow/tdd-plan.md +597 -460
  66. package/.claude/commands/workflow/test-cycle-execute.md +504 -504
  67. package/.claude/commands/workflow/test-fix-gen.md +699 -699
  68. package/.claude/commands/workflow/tools/conflict-resolution.md +2 -2
  69. package/.claude/commands/workflow/tools/task-generate-tdd.md +517 -517
  70. package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +309 -309
  71. package/.claude/commands/workflow/tools/test-concept-enhanced.md +1 -1
  72. package/.claude/commands/workflow/tools/test-context-gather.md +235 -235
  73. package/.claude/commands/workflow/tools/test-task-generate.md +255 -255
  74. package/.claude/commands/workflow/ui-design/animation-extract.md +1150 -1150
  75. package/.claude/commands/workflow/ui-design/design-sync.md +454 -454
  76. package/.claude/commands/workflow/ui-design/explore-auto.md +678 -678
  77. package/.claude/commands/workflow/ui-design/imitate-auto.md +745 -745
  78. package/.claude/commands/workflow/ui-design/layout-extract.md +788 -788
  79. package/.claude/commands/workflow/ui-design/reference-page-generator.md +356 -356
  80. package/.claude/commands/workflow/ui-design/style-extract.md +773 -773
  81. package/.claude/skills/ccw/SKILL.md +522 -352
  82. package/.claude/skills/ccw/command.json +641 -547
  83. package/.claude/skills/ccw-help/SKILL.md +116 -116
  84. package/.claude/skills/ccw-help/command.json +520 -520
  85. package/.claude/skills/copyright-docs/phases/01.5-project-exploration.md +150 -150
  86. package/.claude/skills/copyright-docs/phases/02.5-consolidation.md +192 -192
  87. package/.claude/skills/copyright-docs/templates/agent-base.md +200 -200
  88. package/.claude/skills/project-analyze/phases/03.5-consolidation.md +233 -233
  89. package/.claude/skills/project-analyze/specs/writing-style.md +152 -152
  90. package/.claude/skills/review-code/phases/state-manager.md +752 -752
  91. package/.claude/skills/review-code/specs/rules/index.md +140 -140
  92. package/.claude/skills/skill-generator/specs/cli-integration.md +13 -19
  93. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -265
  94. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -503
  95. package/.claude/skills/skill-generator/templates/llm-action.md +355 -355
  96. package/.claude/skills/skill-generator/templates/script-bash.md +277 -277
  97. package/.claude/skills/skill-generator/templates/script-python.md +198 -198
  98. package/.claude/skills/skill-generator/templates/skill-md.md +235 -235
  99. package/.claude/skills/skill-tuning/SKILL.md +303 -303
  100. package/.claude/skills/skill-tuning/phases/actions/action-abort.md +164 -164
  101. package/.claude/skills/skill-tuning/phases/actions/action-apply-fix.md +206 -206
  102. package/.claude/skills/skill-tuning/phases/actions/action-complete.md +195 -195
  103. package/.claude/skills/skill-tuning/phases/actions/action-diagnose-agent.md +317 -317
  104. package/.claude/skills/skill-tuning/phases/actions/action-diagnose-context.md +243 -243
  105. package/.claude/skills/skill-tuning/phases/actions/action-diagnose-dataflow.md +318 -318
  106. package/.claude/skills/skill-tuning/phases/actions/action-diagnose-memory.md +269 -269
  107. package/.claude/skills/skill-tuning/phases/actions/action-diagnose-token-consumption.md +200 -200
  108. package/.claude/skills/skill-tuning/phases/actions/action-gemini-analysis.md +322 -322
  109. package/.claude/skills/skill-tuning/phases/actions/action-generate-report.md +228 -228
  110. package/.claude/skills/skill-tuning/phases/actions/action-init.md +149 -149
  111. package/.claude/skills/skill-tuning/phases/actions/action-propose-fixes.md +317 -317
  112. package/.claude/skills/skill-tuning/phases/actions/action-verify.md +222 -222
  113. package/.claude/skills/skill-tuning/phases/orchestrator.md +377 -377
  114. package/.claude/skills/skill-tuning/phases/state-schema.md +378 -378
  115. package/.claude/skills/skill-tuning/specs/problem-taxonomy.md +318 -318
  116. package/.claude/skills/skill-tuning/specs/quality-gates.md +263 -263
  117. package/.claude/skills/skill-tuning/specs/tuning-strategies.md +1537 -1537
  118. package/.claude/skills/skill-tuning/templates/diagnosis-report.md +153 -153
  119. package/.claude/skills/skill-tuning/templates/fix-proposal.md +204 -204
  120. package/.claude/skills/software-manual/SKILL.md +184 -184
  121. package/.claude/skills/software-manual/phases/01-requirements-discovery.md +162 -162
  122. package/.claude/skills/software-manual/phases/02-project-exploration.md +101 -101
  123. package/.claude/skills/software-manual/phases/03-parallel-analysis.md +183 -183
  124. package/.claude/skills/software-manual/phases/03.5-consolidation.md +82 -82
  125. package/.claude/skills/software-manual/phases/04-screenshot-capture.md +89 -89
  126. package/.claude/skills/software-manual/phases/05-html-assembly.md +132 -132
  127. package/.claude/skills/software-manual/phases/06-iterative-refinement.md +259 -259
  128. package/.claude/skills/software-manual/scripts/screenshot-helper.md +447 -447
  129. package/.claude/skills/software-manual/scripts/swagger-runner.md +419 -419
  130. package/.claude/skills/software-manual/scripts/typedoc-runner.md +357 -357
  131. package/.claude/skills/software-manual/specs/html-template.md +325 -325
  132. package/.claude/skills/software-manual/specs/quality-standards.md +253 -253
  133. package/.claude/skills/software-manual/specs/writing-style.md +298 -298
  134. package/.claude/skills/text-formatter/SKILL.md +196 -196
  135. package/.claude/skills/text-formatter/phases/01-input-collection.md +111 -111
  136. package/.claude/skills/text-formatter/phases/02-content-analysis.md +248 -248
  137. package/.claude/skills/text-formatter/phases/03-format-transform.md +245 -245
  138. package/.claude/skills/text-formatter/phases/04-output-preview.md +183 -183
  139. package/.claude/skills/text-formatter/specs/callout-types.md +293 -293
  140. package/.claude/skills/text-formatter/specs/element-mapping.md +226 -226
  141. package/.claude/skills/text-formatter/specs/format-rules.md +273 -273
  142. package/.claude/skills/text-formatter/templates/bbcode-template.md +350 -350
  143. package/.claude/workflows/chinese-response.md +25 -25
  144. package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +299 -299
  145. package/.claude/workflows/cli-templates/planning-roles/product-owner.md +261 -261
  146. package/.claude/workflows/cli-templates/prompts/{analysis/03-analyze-performance.txt → analysis-analyze-performance.txt} +29 -29
  147. package/.claude/workflows/cli-templates/prompts/{analysis/03-assess-security-risks.txt → analysis-assess-security-risks.txt} +29 -29
  148. package/.claude/workflows/cli-templates/prompts/{analysis/02-review-architecture.txt → analysis-review-architecture.txt} +29 -29
  149. package/.claude/workflows/cli-templates/prompts/{analysis/02-review-code-quality.txt → analysis-review-code-quality.txt} +28 -28
  150. package/.claude/workflows/cli-templates/prompts/{analysis/03-review-quality-standards.txt → analysis-review-quality-standards.txt} +29 -29
  151. package/.claude/workflows/cli-templates/prompts/{analysis/01-trace-code-execution.txt → analysis-trace-code-execution.txt} +115 -115
  152. package/.claude/workflows/cli-templates/prompts/{documentation/api.txt → documentation-api.txt} +14 -14
  153. package/.claude/workflows/cli-templates/prompts/{documentation/folder-navigation.txt → documentation-folder-navigation.txt} +26 -26
  154. package/.claude/workflows/cli-templates/prompts/{documentation/project-architecture.txt → documentation-project-architecture.txt} +40 -40
  155. package/.claude/workflows/cli-templates/prompts/{documentation/project-examples.txt → documentation-project-examples.txt} +34 -34
  156. package/.claude/workflows/cli-templates/prompts/{documentation/project-readme.txt → documentation-project-readme.txt} +34 -34
  157. package/.claude/workflows/cli-templates/prompts/{documentation/swagger-api.txt → documentation-swagger-api.txt} +266 -266
  158. package/.claude/workflows/cli-templates/prompts/{planning/02-design-component-spec.txt → planning-design-component-spec.txt} +28 -28
  159. package/.claude/workflows/cli-templates/prompts/{verification/codex-technical.txt → verification-codex-technical.txt} +28 -28
  160. package/.claude/workflows/cli-templates/prompts/{verification/cross-validation.txt → verification-cross-validation.txt} +28 -28
  161. package/.claude/workflows/cli-templates/prompts/{verification/gemini-strategic.txt → verification-gemini-strategic.txt} +27 -27
  162. package/.claude/workflows/cli-templates/prompts/{workflow/analysis-results-structure.txt → workflow-analysis-results-structure.txt} +224 -224
  163. package/.claude/workflows/cli-templates/prompts/{workflow/impl-plan-template.txt → workflow-impl-plan-template.txt} +286 -286
  164. package/.claude/workflows/cli-templates/prompts/{workflow/skill-conflict-patterns.txt → workflow-skill-conflict-patterns.txt} +2 -2
  165. package/.claude/workflows/cli-templates/prompts/{workflow/skill-lessons-learned.txt → workflow-skill-lessons-learned.txt} +2 -2
  166. package/.claude/workflows/cli-templates/prompts/{workflow/task-json-agent-mode.txt → workflow-task-json-agent-mode.txt} +123 -123
  167. package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +29 -0
  168. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +200 -0
  169. package/.claude/workflows/cli-templates/schemas/project-guidelines-schema.json +141 -141
  170. package/.claude/workflows/cli-tools-usage.md +113 -117
  171. package/.claude/workflows/coding-philosophy.md +69 -69
  172. package/.claude/workflows/context-tools.md +76 -76
  173. package/.claude/workflows/file-modification.md +64 -64
  174. package/.claude/workflows/review-directory-specification.md +336 -336
  175. package/.claude/workflows/windows-platform.md +19 -19
  176. package/.claude/workflows/workflow-architecture.md +942 -942
  177. package/.codex/prompts/debug-with-file.md +609 -0
  178. package/.codex/prompts/issue-execute.md +176 -70
  179. package/README.md +250 -214
  180. package/ccw/dist/cli.d.ts.map +1 -1
  181. package/ccw/dist/cli.js +15 -0
  182. package/ccw/dist/cli.js.map +1 -1
  183. package/ccw/dist/commands/cli.d.ts +5 -0
  184. package/ccw/dist/commands/cli.d.ts.map +1 -1
  185. package/ccw/dist/commands/cli.js +114 -18
  186. package/ccw/dist/commands/cli.js.map +1 -1
  187. package/ccw/dist/commands/install.d.ts +17 -0
  188. package/ccw/dist/commands/install.d.ts.map +1 -1
  189. package/ccw/dist/commands/install.js +211 -2
  190. package/ccw/dist/commands/install.js.map +1 -1
  191. package/ccw/dist/commands/issue.d.ts.map +1 -1
  192. package/ccw/dist/commands/issue.js +245 -32
  193. package/ccw/dist/commands/issue.js.map +1 -1
  194. package/ccw/dist/commands/uninstall.d.ts.map +1 -1
  195. package/ccw/dist/commands/uninstall.js +22 -1
  196. package/ccw/dist/commands/uninstall.js.map +1 -1
  197. package/ccw/dist/commands/view.d.ts.map +1 -1
  198. package/ccw/dist/commands/view.js +3 -0
  199. package/ccw/dist/commands/view.js.map +1 -1
  200. package/ccw/dist/commands/workflow.d.ts +11 -0
  201. package/ccw/dist/commands/workflow.d.ts.map +1 -0
  202. package/ccw/dist/commands/workflow.js +294 -0
  203. package/ccw/dist/commands/workflow.js.map +1 -0
  204. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  205. package/ccw/dist/core/routes/claude-routes.js +57 -3
  206. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  207. package/ccw/dist/core/routes/cli-routes.d.ts +13 -0
  208. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  209. package/ccw/dist/core/routes/cli-routes.js +46 -0
  210. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  211. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  212. package/ccw/dist/core/routes/hooks-routes.js +36 -0
  213. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  214. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  215. package/ccw/dist/core/routes/issue-routes.js +211 -29
  216. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  217. package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
  218. package/ccw/dist/core/routes/mcp-routes.js +4 -1
  219. package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
  220. package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
  221. package/ccw/dist/core/routes/rules-routes.js +22 -6
  222. package/ccw/dist/core/routes/rules-routes.js.map +1 -1
  223. package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
  224. package/ccw/dist/core/routes/session-routes.js +23 -1
  225. package/ccw/dist/core/routes/session-routes.js.map +1 -1
  226. package/ccw/dist/mcp-server/index.js +8 -2
  227. package/ccw/dist/mcp-server/index.js.map +1 -1
  228. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  229. package/ccw/dist/tools/claude-cli-tools.js +52 -28
  230. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  231. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
  232. package/ccw/dist/tools/cli-executor-core.js +33 -8
  233. package/ccw/dist/tools/cli-executor-core.js.map +1 -1
  234. package/ccw/dist/tools/cli-executor-state.d.ts +2 -0
  235. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
  236. package/ccw/dist/tools/cli-executor-state.js.map +1 -1
  237. package/ccw/dist/tools/cli-executor-utils.d.ts +7 -0
  238. package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -1
  239. package/ccw/dist/tools/cli-executor-utils.js +18 -4
  240. package/ccw/dist/tools/cli-executor-utils.js.map +1 -1
  241. package/ccw/dist/tools/cli-history-store.d.ts +21 -0
  242. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  243. package/ccw/dist/tools/cli-history-store.js +106 -30
  244. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  245. package/ccw/dist/tools/cli-output-converter.d.ts +2 -1
  246. package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -1
  247. package/ccw/dist/tools/cli-output-converter.js +65 -10
  248. package/ccw/dist/tools/cli-output-converter.js.map +1 -1
  249. package/ccw/dist/tools/codex-lens-lsp.d.ts +61 -0
  250. package/ccw/dist/tools/codex-lens-lsp.d.ts.map +1 -0
  251. package/ccw/dist/tools/codex-lens-lsp.js +320 -0
  252. package/ccw/dist/tools/codex-lens-lsp.js.map +1 -0
  253. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  254. package/ccw/dist/tools/codex-lens.js +130 -91
  255. package/ccw/dist/tools/codex-lens.js.map +1 -1
  256. package/ccw/dist/tools/index.d.ts.map +1 -1
  257. package/ccw/dist/tools/index.js +4 -0
  258. package/ccw/dist/tools/index.js.map +1 -1
  259. package/ccw/dist/tools/template-discovery.d.ts +85 -0
  260. package/ccw/dist/tools/template-discovery.d.ts.map +1 -0
  261. package/ccw/dist/tools/template-discovery.js +239 -0
  262. package/ccw/dist/tools/template-discovery.js.map +1 -0
  263. package/ccw/dist/tools/vscode-lsp.d.ts +57 -0
  264. package/ccw/dist/tools/vscode-lsp.d.ts.map +1 -0
  265. package/ccw/dist/tools/vscode-lsp.js +250 -0
  266. package/ccw/dist/tools/vscode-lsp.js.map +1 -0
  267. package/ccw/dist/utils/path-resolver.d.ts +16 -2
  268. package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
  269. package/ccw/dist/utils/path-resolver.js +36 -6
  270. package/ccw/dist/utils/path-resolver.js.map +1 -1
  271. package/ccw/dist/utils/path-validator.d.ts +5 -0
  272. package/ccw/dist/utils/path-validator.d.ts.map +1 -1
  273. package/ccw/dist/utils/path-validator.js +16 -5
  274. package/ccw/dist/utils/path-validator.js.map +1 -1
  275. package/ccw/dist/utils/project-root.d.ts +25 -0
  276. package/ccw/dist/utils/project-root.d.ts.map +1 -0
  277. package/ccw/dist/utils/project-root.js +63 -0
  278. package/ccw/dist/utils/project-root.js.map +1 -0
  279. package/ccw/dist/utils/shell-escape.d.ts +47 -3
  280. package/ccw/dist/utils/shell-escape.d.ts.map +1 -1
  281. package/ccw/dist/utils/shell-escape.js +98 -15
  282. package/ccw/dist/utils/shell-escape.js.map +1 -1
  283. package/ccw/dist/utils/update-checker.d.ts +11 -0
  284. package/ccw/dist/utils/update-checker.d.ts.map +1 -0
  285. package/ccw/dist/utils/update-checker.js +167 -0
  286. package/ccw/dist/utils/update-checker.js.map +1 -0
  287. package/ccw/scripts/IMPLEMENTATION-SUMMARY.md +2 -2
  288. package/ccw/scripts/QUICK-REFERENCE.md +1 -1
  289. package/ccw/scripts/README-memory-embedder.md +1 -1
  290. package/ccw/scripts/memory_embedder.py +1 -1
  291. package/ccw/src/cli.ts +16 -0
  292. package/ccw/src/commands/cli.ts +124 -18
  293. package/ccw/src/commands/install.ts +239 -2
  294. package/ccw/src/commands/issue.ts +286 -36
  295. package/ccw/src/commands/uninstall.ts +23 -1
  296. package/ccw/src/commands/view.ts +4 -0
  297. package/ccw/src/commands/workflow.ts +348 -0
  298. package/ccw/src/core/routes/claude-routes.ts +64 -3
  299. package/ccw/src/core/routes/cli-routes.ts +58 -0
  300. package/ccw/src/core/routes/hooks-routes.ts +35 -0
  301. package/ccw/src/core/routes/issue-routes.ts +242 -28
  302. package/ccw/src/core/routes/mcp-routes.ts +6 -2
  303. package/ccw/src/core/routes/rules-routes.ts +24 -6
  304. package/ccw/src/core/routes/session-routes.ts +24 -1
  305. package/ccw/src/mcp-server/index.ts +7 -2
  306. package/ccw/src/templates/dashboard-css/26-claude-manager.css +179 -0
  307. package/ccw/src/templates/dashboard-css/32-issue-manager.css +3587 -3302
  308. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +1 -0
  309. package/ccw/src/templates/dashboard-js/components/cli-history.js +4 -1
  310. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +57 -21
  311. package/ccw/src/templates/dashboard-js/components/hook-manager.js +1492 -1492
  312. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +107 -20
  313. package/ccw/src/templates/dashboard-js/components/version-check.js +135 -1
  314. package/ccw/src/templates/dashboard-js/i18n.js +42 -0
  315. package/ccw/src/templates/dashboard-js/views/claude-manager.js +168 -0
  316. package/ccw/src/templates/dashboard-js/views/cli-manager.js +1 -0
  317. package/ccw/src/templates/dashboard-js/views/issue-manager.js +360 -1
  318. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +3502 -3478
  319. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +16 -0
  320. package/ccw/src/templates/dashboard.html +112 -0
  321. package/ccw/src/tools/claude-cli-tools.ts +54 -28
  322. package/ccw/src/tools/cli-executor-core.ts +36 -8
  323. package/ccw/src/tools/cli-executor-state.ts +2 -0
  324. package/ccw/src/tools/cli-executor-utils.ts +26 -4
  325. package/ccw/src/tools/cli-history-store.ts +122 -31
  326. package/ccw/src/tools/cli-output-converter.ts +76 -12
  327. package/ccw/src/tools/codex-lens-lsp.ts +405 -0
  328. package/ccw/src/tools/codex-lens.ts +143 -93
  329. package/ccw/src/tools/index.ts +4 -0
  330. package/ccw/src/tools/template-discovery.ts +303 -0
  331. package/ccw/src/tools/vscode-lsp.ts +317 -0
  332. package/ccw/src/utils/path-resolver.ts +37 -6
  333. package/ccw/src/utils/path-validator.ts +17 -5
  334. package/ccw/src/utils/project-root.ts +73 -0
  335. package/ccw/src/utils/shell-escape.ts +103 -16
  336. package/ccw/src/utils/update-checker.ts +178 -0
  337. package/codex-lens/pyproject.toml +14 -0
  338. package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
  339. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  340. package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
  341. package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
  342. package/codex-lens/src/codexlens/api/__init__.py +88 -0
  343. package/codex-lens/src/codexlens/api/__pycache__/__init__.cpython-312.pyc +0 -0
  344. package/codex-lens/src/codexlens/api/__pycache__/__init__.cpython-313.pyc +0 -0
  345. package/codex-lens/src/codexlens/api/__pycache__/definition.cpython-312.pyc +0 -0
  346. package/codex-lens/src/codexlens/api/__pycache__/definition.cpython-313.pyc +0 -0
  347. package/codex-lens/src/codexlens/api/__pycache__/file_context.cpython-312.pyc +0 -0
  348. package/codex-lens/src/codexlens/api/__pycache__/file_context.cpython-313.pyc +0 -0
  349. package/codex-lens/src/codexlens/api/__pycache__/hover.cpython-312.pyc +0 -0
  350. package/codex-lens/src/codexlens/api/__pycache__/hover.cpython-313.pyc +0 -0
  351. package/codex-lens/src/codexlens/api/__pycache__/models.cpython-312.pyc +0 -0
  352. package/codex-lens/src/codexlens/api/__pycache__/models.cpython-313.pyc +0 -0
  353. package/codex-lens/src/codexlens/api/__pycache__/references.cpython-312.pyc +0 -0
  354. package/codex-lens/src/codexlens/api/__pycache__/references.cpython-313.pyc +0 -0
  355. package/codex-lens/src/codexlens/api/__pycache__/semantic.cpython-312.pyc +0 -0
  356. package/codex-lens/src/codexlens/api/__pycache__/semantic.cpython-313.pyc +0 -0
  357. package/codex-lens/src/codexlens/api/__pycache__/symbols.cpython-312.pyc +0 -0
  358. package/codex-lens/src/codexlens/api/__pycache__/symbols.cpython-313.pyc +0 -0
  359. package/codex-lens/src/codexlens/api/__pycache__/utils.cpython-312.pyc +0 -0
  360. package/codex-lens/src/codexlens/api/__pycache__/utils.cpython-313.pyc +0 -0
  361. package/codex-lens/src/codexlens/api/definition.py +126 -0
  362. package/codex-lens/src/codexlens/api/file_context.py +271 -0
  363. package/codex-lens/src/codexlens/api/hover.py +148 -0
  364. package/codex-lens/src/codexlens/api/models.py +281 -0
  365. package/codex-lens/src/codexlens/api/references.py +345 -0
  366. package/codex-lens/src/codexlens/api/semantic.py +471 -0
  367. package/codex-lens/src/codexlens/api/symbols.py +146 -0
  368. package/codex-lens/src/codexlens/api/utils.py +153 -0
  369. package/codex-lens/src/codexlens/config.py +7 -0
  370. package/codex-lens/src/codexlens/errors.py +4 -0
  371. package/codex-lens/src/codexlens/hybrid_search/__init__.py +28 -0
  372. package/codex-lens/src/codexlens/hybrid_search/__pycache__/__init__.cpython-312.pyc +0 -0
  373. package/codex-lens/src/codexlens/hybrid_search/__pycache__/__init__.cpython-313.pyc +0 -0
  374. package/codex-lens/src/codexlens/hybrid_search/__pycache__/data_structures.cpython-312.pyc +0 -0
  375. package/codex-lens/src/codexlens/hybrid_search/__pycache__/data_structures.cpython-313.pyc +0 -0
  376. package/codex-lens/src/codexlens/hybrid_search/__pycache__/engine.cpython-313.pyc +0 -0
  377. package/codex-lens/src/codexlens/hybrid_search/data_structures.py +602 -0
  378. package/codex-lens/src/codexlens/lsp/__init__.py +34 -0
  379. package/codex-lens/src/codexlens/lsp/__pycache__/__init__.cpython-312.pyc +0 -0
  380. package/codex-lens/src/codexlens/lsp/__pycache__/__init__.cpython-313.pyc +0 -0
  381. package/codex-lens/src/codexlens/lsp/__pycache__/handlers.cpython-313.pyc +0 -0
  382. package/codex-lens/src/codexlens/lsp/__pycache__/lsp_bridge.cpython-312.pyc +0 -0
  383. package/codex-lens/src/codexlens/lsp/__pycache__/lsp_bridge.cpython-313.pyc +0 -0
  384. package/codex-lens/src/codexlens/lsp/__pycache__/lsp_graph_builder.cpython-312.pyc +0 -0
  385. package/codex-lens/src/codexlens/lsp/__pycache__/lsp_graph_builder.cpython-313.pyc +0 -0
  386. package/codex-lens/src/codexlens/lsp/__pycache__/providers.cpython-313.pyc +0 -0
  387. package/codex-lens/src/codexlens/lsp/__pycache__/server.cpython-313.pyc +0 -0
  388. package/codex-lens/src/codexlens/lsp/__pycache__/standalone_manager.cpython-313.pyc +0 -0
  389. package/codex-lens/src/codexlens/lsp/handlers.py +551 -0
  390. package/codex-lens/src/codexlens/lsp/lsp_bridge.py +834 -0
  391. package/codex-lens/src/codexlens/lsp/lsp_graph_builder.py +375 -0
  392. package/codex-lens/src/codexlens/lsp/providers.py +177 -0
  393. package/codex-lens/src/codexlens/lsp/server.py +263 -0
  394. package/codex-lens/src/codexlens/lsp/standalone_manager.py +1159 -0
  395. package/codex-lens/src/codexlens/mcp/__init__.py +20 -0
  396. package/codex-lens/src/codexlens/mcp/__pycache__/__init__.cpython-313.pyc +0 -0
  397. package/codex-lens/src/codexlens/mcp/__pycache__/hooks.cpython-313.pyc +0 -0
  398. package/codex-lens/src/codexlens/mcp/__pycache__/provider.cpython-313.pyc +0 -0
  399. package/codex-lens/src/codexlens/mcp/__pycache__/schema.cpython-313.pyc +0 -0
  400. package/codex-lens/src/codexlens/mcp/hooks.py +170 -0
  401. package/codex-lens/src/codexlens/mcp/provider.py +202 -0
  402. package/codex-lens/src/codexlens/mcp/schema.py +113 -0
  403. package/codex-lens/src/codexlens/search/__init__.py +53 -15
  404. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
  405. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
  406. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
  407. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  408. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  409. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  410. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
  411. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  412. package/codex-lens/src/codexlens/search/association_tree/QUICK_START.md +257 -0
  413. package/codex-lens/src/codexlens/search/association_tree/README.md +188 -0
  414. package/codex-lens/src/codexlens/search/association_tree/__init__.py +21 -0
  415. package/codex-lens/src/codexlens/search/association_tree/__pycache__/__init__.cpython-313.pyc +0 -0
  416. package/codex-lens/src/codexlens/search/association_tree/__pycache__/builder.cpython-313.pyc +0 -0
  417. package/codex-lens/src/codexlens/search/association_tree/__pycache__/data_structures.cpython-313.pyc +0 -0
  418. package/codex-lens/src/codexlens/search/association_tree/__pycache__/deduplicator.cpython-313.pyc +0 -0
  419. package/codex-lens/src/codexlens/search/association_tree/builder.py +450 -0
  420. package/codex-lens/src/codexlens/search/association_tree/data_structures.py +191 -0
  421. package/codex-lens/src/codexlens/search/association_tree/deduplicator.py +301 -0
  422. package/codex-lens/src/codexlens/search/chain_search.py +864 -3
  423. package/codex-lens/src/codexlens/search/clustering/__init__.py +124 -0
  424. package/codex-lens/src/codexlens/search/clustering/__pycache__/__init__.cpython-312.pyc +0 -0
  425. package/codex-lens/src/codexlens/search/clustering/__pycache__/__init__.cpython-313.pyc +0 -0
  426. package/codex-lens/src/codexlens/search/clustering/__pycache__/base.cpython-312.pyc +0 -0
  427. package/codex-lens/src/codexlens/search/clustering/__pycache__/base.cpython-313.pyc +0 -0
  428. package/codex-lens/src/codexlens/search/clustering/__pycache__/dbscan_strategy.cpython-313.pyc +0 -0
  429. package/codex-lens/src/codexlens/search/clustering/__pycache__/factory.cpython-312.pyc +0 -0
  430. package/codex-lens/src/codexlens/search/clustering/__pycache__/factory.cpython-313.pyc +0 -0
  431. package/codex-lens/src/codexlens/search/clustering/__pycache__/frequency_strategy.cpython-312.pyc +0 -0
  432. package/codex-lens/src/codexlens/search/clustering/__pycache__/frequency_strategy.cpython-313.pyc +0 -0
  433. package/codex-lens/src/codexlens/search/clustering/__pycache__/hdbscan_strategy.cpython-313.pyc +0 -0
  434. package/codex-lens/src/codexlens/search/clustering/__pycache__/noop_strategy.cpython-312.pyc +0 -0
  435. package/codex-lens/src/codexlens/search/clustering/__pycache__/noop_strategy.cpython-313.pyc +0 -0
  436. package/codex-lens/src/codexlens/search/clustering/base.py +153 -0
  437. package/codex-lens/src/codexlens/search/clustering/dbscan_strategy.py +197 -0
  438. package/codex-lens/src/codexlens/search/clustering/factory.py +202 -0
  439. package/codex-lens/src/codexlens/search/clustering/frequency_strategy.py +263 -0
  440. package/codex-lens/src/codexlens/search/clustering/hdbscan_strategy.py +153 -0
  441. package/codex-lens/src/codexlens/search/clustering/noop_strategy.py +83 -0
  442. package/codex-lens/src/codexlens/search/hybrid_search.py +194 -2
  443. package/codex-lens/src/codexlens/search/ranking.py +6 -4
  444. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
  445. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  446. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  447. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  448. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-313.pyc +0 -0
  449. package/codex-lens/src/codexlens/storage/dir_index.py +172 -0
  450. package/codex-lens/src/codexlens/storage/global_index.py +33 -0
  451. package/package.json +92 -92
  452. /package/.claude/workflows/cli-templates/prompts/{analysis/02-analyze-code-patterns.txt → analysis-analyze-code-patterns.txt} +0 -0
  453. /package/.claude/workflows/cli-templates/prompts/{analysis/02-analyze-technical-document.txt → analysis-analyze-technical-document.txt} +0 -0
  454. /package/.claude/workflows/cli-templates/prompts/{analysis/01-diagnose-bug-root-cause.txt → analysis-diagnose-bug-root-cause.txt} +0 -0
  455. /package/.claude/workflows/cli-templates/prompts/{development/03-debug-runtime-issues.txt → development-debug-runtime-issues.txt} +0 -0
  456. /package/.claude/workflows/cli-templates/prompts/{development/02-generate-tests.txt → development-generate-tests.txt} +0 -0
  457. /package/.claude/workflows/cli-templates/prompts/{development/02-implement-component-ui.txt → development-implement-component-ui.txt} +0 -0
  458. /package/.claude/workflows/cli-templates/prompts/{development/02-implement-feature.txt → development-implement-feature.txt} +0 -0
  459. /package/.claude/workflows/cli-templates/prompts/{development/02-refactor-codebase.txt → development-refactor-codebase.txt} +0 -0
  460. /package/.claude/workflows/cli-templates/prompts/{documentation/module-readme.txt → documentation-module-readme.txt} +0 -0
  461. /package/.claude/workflows/cli-templates/prompts/{memory/02-document-module-structure.txt → memory-document-module-structure.txt} +0 -0
  462. /package/.claude/workflows/cli-templates/prompts/{planning/02-breakdown-task-steps.txt → planning-breakdown-task-steps.txt} +0 -0
  463. /package/.claude/workflows/cli-templates/prompts/{planning/03-evaluate-concept-feasibility.txt → planning-evaluate-concept-feasibility.txt} +0 -0
  464. /package/.claude/workflows/cli-templates/prompts/{planning/01-plan-architecture-design.txt → planning-plan-architecture-design.txt} +0 -0
  465. /package/.claude/workflows/cli-templates/prompts/{planning/03-plan-migration-strategy.txt → planning-plan-migration-strategy.txt} +0 -0
  466. /package/.claude/workflows/cli-templates/prompts/{rules/rule-api.txt → rules-rule-api.txt} +0 -0
  467. /package/.claude/workflows/cli-templates/prompts/{rules/rule-components.txt → rules-rule-components.txt} +0 -0
  468. /package/.claude/workflows/cli-templates/prompts/{rules/rule-config.txt → rules-rule-config.txt} +0 -0
  469. /package/.claude/workflows/cli-templates/prompts/{rules/rule-core.txt → rules-rule-core.txt} +0 -0
  470. /package/.claude/workflows/cli-templates/prompts/{rules/rule-patterns.txt → rules-rule-patterns.txt} +0 -0
  471. /package/.claude/workflows/cli-templates/prompts/{rules/rule-testing.txt → rules-rule-testing.txt} +0 -0
  472. /package/.claude/workflows/cli-templates/prompts/{rules/tech-rules-agent-prompt.txt → rules-tech-rules-agent-prompt.txt} +0 -0
  473. /package/.claude/workflows/cli-templates/prompts/{tech/tech-module-format.txt → tech-tech-module-format.txt} +0 -0
  474. /package/.claude/workflows/cli-templates/prompts/{tech/tech-skill-index.txt → tech-tech-skill-index.txt} +0 -0
  475. /package/.claude/workflows/cli-templates/prompts/{test/test-concept-analysis.txt → test-test-concept-analysis.txt} +0 -0
  476. /package/.claude/workflows/cli-templates/prompts/{universal/00-universal-creative-style.txt → universal-universal-creative-style.txt} +0 -0
  477. /package/.claude/workflows/cli-templates/prompts/{universal/00-universal-rigorous-style.txt → universal-universal-rigorous-style.txt} +0 -0
  478. /package/.claude/workflows/cli-templates/prompts/{workflow/codex-feasibility-validation.txt → workflow-codex-feasibility-validation.txt} +0 -0
  479. /package/.claude/workflows/cli-templates/prompts/{workflow/gemini-solution-design.txt → workflow-gemini-solution-design.txt} +0 -0
  480. /package/.claude/workflows/cli-templates/prompts/{workflow/skill-aggregation.txt → workflow-skill-aggregation.txt} +0 -0
  481. /package/.claude/workflows/cli-templates/prompts/{workflow/skill-index.txt → workflow-skill-index.txt} +0 -0
  482. /package/.claude/workflows/cli-templates/prompts/{workflow/skill-sessions-timeline.txt → workflow-skill-sessions-timeline.txt} +0 -0
  483. /package/.claude/workflows/cli-templates/prompts/{workflow/task-json-cli-mode.txt → workflow-task-json-cli-mode.txt} +0 -0
@@ -1,413 +1,413 @@
1
- ---
2
- name: new
3
- description: Create structured issue from GitHub URL or text description
4
- argument-hint: "<github-url | text-description> [--priority 1-5]"
5
- allowed-tools: TodoWrite(*), Bash(*), Read(*), AskUserQuestion(*), mcp__ace-tool__search_context(*)
6
- ---
7
-
8
- # Issue New Command (/issue:new)
9
-
10
- ## Core Principle
11
-
12
- **Requirement Clarity Detection** → Ask only when needed
13
-
14
- ```
15
- Clear Input (GitHub URL, structured text) → Direct creation
16
- Unclear Input (vague description) → Minimal clarifying questions
17
- ```
18
-
19
- ## Issue Structure
20
-
21
- ```typescript
22
- interface Issue {
23
- id: string; // GH-123 or ISS-YYYYMMDD-HHMMSS
24
- title: string;
25
- status: 'registered' | 'planned' | 'queued' | 'in_progress' | 'completed' | 'failed';
26
- priority: number; // 1 (critical) to 5 (low)
27
- context: string; // Problem description (single source of truth)
28
- source: 'github' | 'text' | 'discovery';
29
- source_url?: string;
30
- labels?: string[];
31
-
32
- // GitHub binding (for non-GitHub sources that publish to GitHub)
33
- github_url?: string; // https://github.com/owner/repo/issues/123
34
- github_number?: number; // 123
35
-
36
- // Optional structured fields
37
- expected_behavior?: string;
38
- actual_behavior?: string;
39
- affected_components?: string[];
40
-
41
- // Feedback history (failures + human clarifications)
42
- feedback?: {
43
- type: 'failure' | 'clarification' | 'rejection';
44
- stage: string; // new/plan/execute
45
- content: string;
46
- created_at: string;
47
- }[];
48
-
49
- // Solution binding
50
- bound_solution_id: string | null;
51
-
52
- // Timestamps
53
- created_at: string;
54
- updated_at: string;
55
- }
56
- ```
57
-
58
- ## Quick Reference
59
-
60
- ```bash
61
- # Clear inputs - direct creation
62
- /issue:new https://github.com/owner/repo/issues/123
63
- /issue:new "Login fails with special chars. Expected: success. Actual: 500 error"
64
-
65
- # Vague input - will ask clarifying questions
66
- /issue:new "something wrong with auth"
67
- ```
68
-
69
- ## Implementation
70
-
71
- ### Phase 1: Input Analysis & Clarity Detection
72
-
73
- ```javascript
74
- const input = userInput.trim();
75
- const flags = parseFlags(userInput); // --priority
76
-
77
- // Detect input type and clarity
78
- const isGitHubUrl = input.match(/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/);
79
- const isGitHubShort = input.match(/^#(\d+)$/);
80
- const hasStructure = input.match(/(expected|actual|affects|steps):/i);
81
-
82
- // Clarity score: 0-3
83
- let clarityScore = 0;
84
- if (isGitHubUrl || isGitHubShort) clarityScore = 3; // GitHub = fully clear
85
- else if (hasStructure) clarityScore = 2; // Structured text = clear
86
- else if (input.length > 50) clarityScore = 1; // Long text = somewhat clear
87
- else clarityScore = 0; // Vague
88
-
89
- let issueData = {};
90
- ```
91
-
92
- ### Phase 2: Data Extraction (GitHub or Text)
93
-
94
- ```javascript
95
- if (isGitHubUrl || isGitHubShort) {
96
- // GitHub - fetch via gh CLI
97
- const result = Bash(`gh issue view ${extractIssueRef(input)} --json number,title,body,labels,url`);
98
- const gh = JSON.parse(result);
99
- issueData = {
100
- id: `GH-${gh.number}`,
101
- title: gh.title,
102
- source: 'github',
103
- source_url: gh.url,
104
- labels: gh.labels.map(l => l.name),
105
- context: gh.body?.substring(0, 500) || gh.title,
106
- ...parseMarkdownBody(gh.body)
107
- };
108
- } else {
109
- // Text description
110
- issueData = {
111
- id: `ISS-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}`,
112
- source: 'text',
113
- ...parseTextDescription(input)
114
- };
115
- }
116
- ```
117
-
118
- ### Phase 3: Lightweight Context Hint (Conditional)
119
-
120
- ```javascript
121
- // ACE search ONLY for medium clarity (1-2) AND missing components
122
- // Skip for: GitHub (has context), vague (needs clarification first)
123
- // Note: Deep exploration happens in /issue:plan, this is just a quick hint
124
-
125
- if (clarityScore >= 1 && clarityScore <= 2 && !issueData.affected_components?.length) {
126
- const keywords = extractKeywords(issueData.context);
127
-
128
- if (keywords.length >= 2) {
129
- try {
130
- const aceResult = mcp__ace-tool__search_context({
131
- project_root_path: process.cwd(),
132
- query: keywords.slice(0, 3).join(' ')
133
- });
134
- issueData.affected_components = aceResult.files?.slice(0, 3) || [];
135
- } catch {
136
- // ACE failure is non-blocking
137
- }
138
- }
139
- }
140
- ```
141
-
142
- ### Phase 4: Conditional Clarification (Only if Unclear)
143
-
144
- ```javascript
145
- // ONLY ask questions if clarity is low - simple open-ended prompt
146
- if (clarityScore < 2 && (!issueData.context || issueData.context.length < 20)) {
147
- const answer = AskUserQuestion({
148
- questions: [{
149
- question: 'Please describe the issue in more detail:',
150
- header: 'Clarify',
151
- multiSelect: false,
152
- options: [
153
- { label: 'Provide details', description: 'Describe what, where, and expected behavior' }
154
- ]
155
- }]
156
- });
157
-
158
- // Use custom text input (via "Other")
159
- if (answer.customText) {
160
- issueData.context = answer.customText;
161
- issueData.title = answer.customText.split(/[.\n]/)[0].substring(0, 60);
162
- issueData.feedback = [{
163
- type: 'clarification',
164
- stage: 'new',
165
- content: answer.customText,
166
- created_at: new Date().toISOString()
167
- }];
168
- }
169
- }
170
- ```
171
-
172
- ### Phase 5: GitHub Publishing Decision (Non-GitHub Sources)
173
-
174
- ```javascript
175
- // For non-GitHub sources, ask if user wants to publish to GitHub
176
- let publishToGitHub = false;
177
-
178
- if (issueData.source !== 'github') {
179
- const publishAnswer = AskUserQuestion({
180
- questions: [{
181
- question: 'Would you like to publish this issue to GitHub?',
182
- header: 'Publish',
183
- multiSelect: false,
184
- options: [
185
- { label: 'Yes, publish to GitHub', description: 'Create issue on GitHub and link it' },
186
- { label: 'No, keep local only', description: 'Store as local issue without GitHub sync' }
187
- ]
188
- }]
189
- });
190
-
191
- publishToGitHub = publishAnswer.answers?.['Publish']?.includes('Yes');
192
- }
193
- ```
194
-
195
- ### Phase 6: Create Issue
196
-
197
- **Summary Display:**
198
- - Show ID, title, source, affected files (if any)
199
-
200
- **Confirmation** (only for vague inputs, clarityScore < 2):
201
- - Use `AskUserQuestion` to confirm before creation
202
-
203
- **Issue Creation** (via CLI endpoint):
204
- ```bash
205
- # Option 1: Pipe input (recommended for complex JSON - avoids shell escaping)
206
- echo '{"title":"...", "context":"...", "priority":3}' | ccw issue create
207
-
208
- # Option 2: Heredoc (for multi-line JSON)
209
- ccw issue create << 'EOF'
210
- {"title":"...", "context":"含\"引号\"的内容", "priority":3}
211
- EOF
212
-
213
- # Option 3: --data parameter (simple cases only)
214
- ccw issue create --data '{"title":"...", "priority":3}'
215
- ```
216
-
217
- **CLI Endpoint Features:**
218
- | Feature | Description |
219
- |---------|-------------|
220
- | Auto-increment ID | `ISS-YYYYMMDD-NNN` (e.g., `ISS-20251229-001`) |
221
- | Trailing newline | Proper JSONL format, no corruption |
222
- | JSON output | Returns created issue with all fields |
223
-
224
- **Example:**
225
- ```bash
226
- # Create issue via pipe (recommended)
227
- echo '{"title": "Login fails with special chars", "context": "500 error when password contains quotes", "priority": 2}' | ccw issue create
228
-
229
- # Or with heredoc for complex JSON
230
- ccw issue create << 'EOF'
231
- {
232
- "title": "Login fails with special chars",
233
- "context": "500 error when password contains \"quotes\"",
234
- "priority": 2,
235
- "source": "text",
236
- "expected_behavior": "Login succeeds",
237
- "actual_behavior": "500 Internal Server Error"
238
- }
239
- EOF
240
-
241
- # Output (JSON)
242
- {
243
- "id": "ISS-20251229-001",
244
- "title": "Login fails with special chars",
245
- "status": "registered",
246
- ...
247
- }
248
- ```
249
-
250
- **GitHub Publishing** (if user opted in):
251
- ```javascript
252
- // Step 1: Create local issue FIRST
253
- const localIssue = createLocalIssue(issueData); // ccw issue create
254
-
255
- // Step 2: Publish to GitHub if requested
256
- if (publishToGitHub) {
257
- const ghResult = Bash(`gh issue create --title "${issueData.title}" --body "${issueData.context}"`);
258
- // Parse GitHub URL from output
259
- const ghUrl = ghResult.match(/https:\/\/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/)?.[0];
260
- const ghNumber = parseInt(ghUrl?.match(/\/issues\/(\d+)/)?.[1]);
261
-
262
- if (ghNumber) {
263
- // Step 3: Update local issue with GitHub binding
264
- Bash(`ccw issue update ${localIssue.id} --github-url "${ghUrl}" --github-number ${ghNumber}`);
265
- // Or via pipe:
266
- // echo '{"github_url":"${ghUrl}","github_number":${ghNumber}}' | ccw issue update ${localIssue.id}
267
- }
268
- }
269
- ```
270
-
271
- **Workflow:**
272
- ```
273
- 1. Create local issue (ISS-YYYYMMDD-NNN) → stored in .workflow/issues.jsonl
274
- 2. If publishToGitHub:
275
- a. gh issue create → returns GitHub URL
276
- b. Update local issue with github_url + github_number binding
277
- 3. Both local and GitHub issues exist, linked together
278
- ```
279
-
280
- **Example with GitHub Publishing:**
281
- ```bash
282
- # User creates text issue
283
- /issue:new "Login fails with special chars. Expected: success. Actual: 500"
284
-
285
- # System asks: "Would you like to publish this issue to GitHub?"
286
- # User selects: "Yes, publish to GitHub"
287
-
288
- # Output:
289
- # ✓ Local issue created: ISS-20251229-001
290
- # ✓ Published to GitHub: https://github.com/org/repo/issues/123
291
- # ✓ GitHub binding saved to local issue
292
- # → Next step: /issue:plan ISS-20251229-001
293
-
294
- # Resulting issue JSON:
295
- {
296
- "id": "ISS-20251229-001",
297
- "title": "Login fails with special chars",
298
- "source": "text",
299
- "github_url": "https://github.com/org/repo/issues/123",
300
- "github_number": 123,
301
- ...
302
- }
303
- ```
304
-
305
- **Completion:**
306
- - Display created issue ID
307
- - Show GitHub URL (if published)
308
- - Show next step: `/issue:plan <id>`
309
-
310
- ## Execution Flow
311
-
312
- ```
313
- Phase 1: Input Analysis
314
- └─ Detect clarity score (GitHub URL? Structured text? Keywords?)
315
-
316
- Phase 2: Data Extraction (branched by clarity)
317
- ┌────────────┬─────────────────┬──────────────┐
318
- │ Score 3 │ Score 1-2 │ Score 0 │
319
- │ GitHub │ Text + ACE │ Vague │
320
- ├────────────┼─────────────────┼──────────────┤
321
- │ gh CLI │ Parse struct │ AskQuestion │
322
- │ → parse │ + quick hint │ (1 question) │
323
- │ │ (3 files max) │ → feedback │
324
- └────────────┴─────────────────┴──────────────┘
325
-
326
- Phase 3: GitHub Publishing Decision (non-GitHub only)
327
- ├─ Source = github: Skip (already from GitHub)
328
- └─ Source ≠ github: AskUserQuestion
329
- ├─ Yes → publishToGitHub = true
330
- └─ No → publishToGitHub = false
331
-
332
- Phase 4: Create Issue
333
- ├─ Score ≥ 2: Direct creation
334
- └─ Score < 2: Confirm first → Create
335
- └─ If publishToGitHub: gh issue create → link URL
336
-
337
- Note: Deep exploration & lifecycle deferred to /issue:plan
338
- ```
339
-
340
- ## Helper Functions
341
-
342
- ```javascript
343
- function extractKeywords(text) {
344
- const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'not', 'with']);
345
- return text
346
- .toLowerCase()
347
- .split(/\W+/)
348
- .filter(w => w.length > 3 && !stopWords.has(w))
349
- .slice(0, 5);
350
- }
351
-
352
- function parseTextDescription(text) {
353
- const result = { title: '', context: '' };
354
- const sentences = text.split(/\.(?=\s|$)/);
355
-
356
- result.title = sentences[0]?.trim().substring(0, 60) || 'Untitled';
357
- result.context = text.substring(0, 500);
358
-
359
- // Extract structured fields if present
360
- const expected = text.match(/expected:?\s*([^.]+)/i);
361
- const actual = text.match(/actual:?\s*([^.]+)/i);
362
- const affects = text.match(/affects?:?\s*([^.]+)/i);
363
-
364
- if (expected) result.expected_behavior = expected[1].trim();
365
- if (actual) result.actual_behavior = actual[1].trim();
366
- if (affects) {
367
- result.affected_components = affects[1].split(/[,\s]+/).filter(c => c.includes('/') || c.includes('.'));
368
- }
369
-
370
- return result;
371
- }
372
-
373
- function parseMarkdownBody(body) {
374
- if (!body) return {};
375
- const result = {};
376
-
377
- const problem = body.match(/##?\s*(problem|description)[:\s]*([\s\S]*?)(?=##|$)/i);
378
- const expected = body.match(/##?\s*expected[:\s]*([\s\S]*?)(?=##|$)/i);
379
- const actual = body.match(/##?\s*actual[:\s]*([\s\S]*?)(?=##|$)/i);
380
-
381
- if (problem) result.context = problem[2].trim().substring(0, 500);
382
- if (expected) result.expected_behavior = expected[2].trim();
383
- if (actual) result.actual_behavior = actual[2].trim();
384
-
385
- return result;
386
- }
387
- ```
388
-
389
- ## Examples
390
-
391
- ### Clear Input (No Questions)
392
-
393
- ```bash
394
- /issue:new https://github.com/org/repo/issues/42
395
- # → Fetches, parses, creates immediately
396
-
397
- /issue:new "Login fails with special chars. Expected: success. Actual: 500"
398
- # → Parses structure, creates immediately
399
- ```
400
-
401
- ### Vague Input (1 Question)
402
-
403
- ```bash
404
- /issue:new "auth broken"
405
- # → Asks: "Input unclear. What is the issue about?"
406
- # → User provides details → saved to feedback[]
407
- # → Creates issue
408
- ```
409
-
410
- ## Related Commands
411
-
412
- - `/issue:plan` - Plan solution for issue
413
-
1
+ ---
2
+ name: new
3
+ description: Create structured issue from GitHub URL or text description
4
+ argument-hint: "<github-url | text-description> [--priority 1-5]"
5
+ allowed-tools: TodoWrite(*), Bash(*), Read(*), AskUserQuestion(*), mcp__ace-tool__search_context(*)
6
+ ---
7
+
8
+ # Issue New Command (/issue:new)
9
+
10
+ ## Core Principle
11
+
12
+ **Requirement Clarity Detection** → Ask only when needed
13
+
14
+ ```
15
+ Clear Input (GitHub URL, structured text) → Direct creation
16
+ Unclear Input (vague description) → Minimal clarifying questions
17
+ ```
18
+
19
+ ## Issue Structure
20
+
21
+ ```typescript
22
+ interface Issue {
23
+ id: string; // GH-123 or ISS-YYYYMMDD-HHMMSS
24
+ title: string;
25
+ status: 'registered' | 'planned' | 'queued' | 'in_progress' | 'completed' | 'failed';
26
+ priority: number; // 1 (critical) to 5 (low)
27
+ context: string; // Problem description (single source of truth)
28
+ source: 'github' | 'text' | 'discovery';
29
+ source_url?: string;
30
+ labels?: string[];
31
+
32
+ // GitHub binding (for non-GitHub sources that publish to GitHub)
33
+ github_url?: string; // https://github.com/owner/repo/issues/123
34
+ github_number?: number; // 123
35
+
36
+ // Optional structured fields
37
+ expected_behavior?: string;
38
+ actual_behavior?: string;
39
+ affected_components?: string[];
40
+
41
+ // Feedback history (failures + human clarifications)
42
+ feedback?: {
43
+ type: 'failure' | 'clarification' | 'rejection';
44
+ stage: string; // new/plan/execute
45
+ content: string;
46
+ created_at: string;
47
+ }[];
48
+
49
+ // Solution binding
50
+ bound_solution_id: string | null;
51
+
52
+ // Timestamps
53
+ created_at: string;
54
+ updated_at: string;
55
+ }
56
+ ```
57
+
58
+ ## Quick Reference
59
+
60
+ ```bash
61
+ # Clear inputs - direct creation
62
+ /issue:new https://github.com/owner/repo/issues/123
63
+ /issue:new "Login fails with special chars. Expected: success. Actual: 500 error"
64
+
65
+ # Vague input - will ask clarifying questions
66
+ /issue:new "something wrong with auth"
67
+ ```
68
+
69
+ ## Implementation
70
+
71
+ ### Phase 1: Input Analysis & Clarity Detection
72
+
73
+ ```javascript
74
+ const input = userInput.trim();
75
+ const flags = parseFlags(userInput); // --priority
76
+
77
+ // Detect input type and clarity
78
+ const isGitHubUrl = input.match(/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/);
79
+ const isGitHubShort = input.match(/^#(\d+)$/);
80
+ const hasStructure = input.match(/(expected|actual|affects|steps):/i);
81
+
82
+ // Clarity score: 0-3
83
+ let clarityScore = 0;
84
+ if (isGitHubUrl || isGitHubShort) clarityScore = 3; // GitHub = fully clear
85
+ else if (hasStructure) clarityScore = 2; // Structured text = clear
86
+ else if (input.length > 50) clarityScore = 1; // Long text = somewhat clear
87
+ else clarityScore = 0; // Vague
88
+
89
+ let issueData = {};
90
+ ```
91
+
92
+ ### Phase 2: Data Extraction (GitHub or Text)
93
+
94
+ ```javascript
95
+ if (isGitHubUrl || isGitHubShort) {
96
+ // GitHub - fetch via gh CLI
97
+ const result = Bash(`gh issue view ${extractIssueRef(input)} --json number,title,body,labels,url`);
98
+ const gh = JSON.parse(result);
99
+ issueData = {
100
+ id: `GH-${gh.number}`,
101
+ title: gh.title,
102
+ source: 'github',
103
+ source_url: gh.url,
104
+ labels: gh.labels.map(l => l.name),
105
+ context: gh.body?.substring(0, 500) || gh.title,
106
+ ...parseMarkdownBody(gh.body)
107
+ };
108
+ } else {
109
+ // Text description
110
+ issueData = {
111
+ id: `ISS-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}`,
112
+ source: 'text',
113
+ ...parseTextDescription(input)
114
+ };
115
+ }
116
+ ```
117
+
118
+ ### Phase 3: Lightweight Context Hint (Conditional)
119
+
120
+ ```javascript
121
+ // ACE search ONLY for medium clarity (1-2) AND missing components
122
+ // Skip for: GitHub (has context), vague (needs clarification first)
123
+ // Note: Deep exploration happens in /issue:plan, this is just a quick hint
124
+
125
+ if (clarityScore >= 1 && clarityScore <= 2 && !issueData.affected_components?.length) {
126
+ const keywords = extractKeywords(issueData.context);
127
+
128
+ if (keywords.length >= 2) {
129
+ try {
130
+ const aceResult = mcp__ace-tool__search_context({
131
+ project_root_path: process.cwd(),
132
+ query: keywords.slice(0, 3).join(' ')
133
+ });
134
+ issueData.affected_components = aceResult.files?.slice(0, 3) || [];
135
+ } catch {
136
+ // ACE failure is non-blocking
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ ### Phase 4: Conditional Clarification (Only if Unclear)
143
+
144
+ ```javascript
145
+ // ONLY ask questions if clarity is low - simple open-ended prompt
146
+ if (clarityScore < 2 && (!issueData.context || issueData.context.length < 20)) {
147
+ const answer = AskUserQuestion({
148
+ questions: [{
149
+ question: 'Please describe the issue in more detail:',
150
+ header: 'Clarify',
151
+ multiSelect: false,
152
+ options: [
153
+ { label: 'Provide details', description: 'Describe what, where, and expected behavior' }
154
+ ]
155
+ }]
156
+ });
157
+
158
+ // Use custom text input (via "Other")
159
+ if (answer.customText) {
160
+ issueData.context = answer.customText;
161
+ issueData.title = answer.customText.split(/[.\n]/)[0].substring(0, 60);
162
+ issueData.feedback = [{
163
+ type: 'clarification',
164
+ stage: 'new',
165
+ content: answer.customText,
166
+ created_at: new Date().toISOString()
167
+ }];
168
+ }
169
+ }
170
+ ```
171
+
172
+ ### Phase 5: GitHub Publishing Decision (Non-GitHub Sources)
173
+
174
+ ```javascript
175
+ // For non-GitHub sources, ask if user wants to publish to GitHub
176
+ let publishToGitHub = false;
177
+
178
+ if (issueData.source !== 'github') {
179
+ const publishAnswer = AskUserQuestion({
180
+ questions: [{
181
+ question: 'Would you like to publish this issue to GitHub?',
182
+ header: 'Publish',
183
+ multiSelect: false,
184
+ options: [
185
+ { label: 'Yes, publish to GitHub', description: 'Create issue on GitHub and link it' },
186
+ { label: 'No, keep local only', description: 'Store as local issue without GitHub sync' }
187
+ ]
188
+ }]
189
+ });
190
+
191
+ publishToGitHub = publishAnswer.answers?.['Publish']?.includes('Yes');
192
+ }
193
+ ```
194
+
195
+ ### Phase 6: Create Issue
196
+
197
+ **Summary Display:**
198
+ - Show ID, title, source, affected files (if any)
199
+
200
+ **Confirmation** (only for vague inputs, clarityScore < 2):
201
+ - Use `AskUserQuestion` to confirm before creation
202
+
203
+ **Issue Creation** (via CLI endpoint):
204
+ ```bash
205
+ # Option 1: Pipe input (recommended for complex JSON - avoids shell escaping)
206
+ echo '{"title":"...", "context":"...", "priority":3}' | ccw issue create
207
+
208
+ # Option 2: Heredoc (for multi-line JSON)
209
+ ccw issue create << 'EOF'
210
+ {"title":"...", "context":"含\"引号\"的内容", "priority":3}
211
+ EOF
212
+
213
+ # Option 3: --data parameter (simple cases only)
214
+ ccw issue create --data '{"title":"...", "priority":3}'
215
+ ```
216
+
217
+ **CLI Endpoint Features:**
218
+ | Feature | Description |
219
+ |---------|-------------|
220
+ | Auto-increment ID | `ISS-YYYYMMDD-NNN` (e.g., `ISS-20251229-001`) |
221
+ | Trailing newline | Proper JSONL format, no corruption |
222
+ | JSON output | Returns created issue with all fields |
223
+
224
+ **Example:**
225
+ ```bash
226
+ # Create issue via pipe (recommended)
227
+ echo '{"title": "Login fails with special chars", "context": "500 error when password contains quotes", "priority": 2}' | ccw issue create
228
+
229
+ # Or with heredoc for complex JSON
230
+ ccw issue create << 'EOF'
231
+ {
232
+ "title": "Login fails with special chars",
233
+ "context": "500 error when password contains \"quotes\"",
234
+ "priority": 2,
235
+ "source": "text",
236
+ "expected_behavior": "Login succeeds",
237
+ "actual_behavior": "500 Internal Server Error"
238
+ }
239
+ EOF
240
+
241
+ # Output (JSON)
242
+ {
243
+ "id": "ISS-20251229-001",
244
+ "title": "Login fails with special chars",
245
+ "status": "registered",
246
+ ...
247
+ }
248
+ ```
249
+
250
+ **GitHub Publishing** (if user opted in):
251
+ ```javascript
252
+ // Step 1: Create local issue FIRST
253
+ const localIssue = createLocalIssue(issueData); // ccw issue create
254
+
255
+ // Step 2: Publish to GitHub if requested
256
+ if (publishToGitHub) {
257
+ const ghResult = Bash(`gh issue create --title "${issueData.title}" --body "${issueData.context}"`);
258
+ // Parse GitHub URL from output
259
+ const ghUrl = ghResult.match(/https:\/\/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/)?.[0];
260
+ const ghNumber = parseInt(ghUrl?.match(/\/issues\/(\d+)/)?.[1]);
261
+
262
+ if (ghNumber) {
263
+ // Step 3: Update local issue with GitHub binding
264
+ Bash(`ccw issue update ${localIssue.id} --github-url "${ghUrl}" --github-number ${ghNumber}`);
265
+ // Or via pipe:
266
+ // echo '{"github_url":"${ghUrl}","github_number":${ghNumber}}' | ccw issue update ${localIssue.id}
267
+ }
268
+ }
269
+ ```
270
+
271
+ **Workflow:**
272
+ ```
273
+ 1. Create local issue (ISS-YYYYMMDD-NNN) → stored in .workflow/issues.jsonl
274
+ 2. If publishToGitHub:
275
+ a. gh issue create → returns GitHub URL
276
+ b. Update local issue with github_url + github_number binding
277
+ 3. Both local and GitHub issues exist, linked together
278
+ ```
279
+
280
+ **Example with GitHub Publishing:**
281
+ ```bash
282
+ # User creates text issue
283
+ /issue:new "Login fails with special chars. Expected: success. Actual: 500"
284
+
285
+ # System asks: "Would you like to publish this issue to GitHub?"
286
+ # User selects: "Yes, publish to GitHub"
287
+
288
+ # Output:
289
+ # ✓ Local issue created: ISS-20251229-001
290
+ # ✓ Published to GitHub: https://github.com/org/repo/issues/123
291
+ # ✓ GitHub binding saved to local issue
292
+ # → Next step: /issue:plan ISS-20251229-001
293
+
294
+ # Resulting issue JSON:
295
+ {
296
+ "id": "ISS-20251229-001",
297
+ "title": "Login fails with special chars",
298
+ "source": "text",
299
+ "github_url": "https://github.com/org/repo/issues/123",
300
+ "github_number": 123,
301
+ ...
302
+ }
303
+ ```
304
+
305
+ **Completion:**
306
+ - Display created issue ID
307
+ - Show GitHub URL (if published)
308
+ - Show next step: `/issue:plan <id>`
309
+
310
+ ## Execution Flow
311
+
312
+ ```
313
+ Phase 1: Input Analysis
314
+ └─ Detect clarity score (GitHub URL? Structured text? Keywords?)
315
+
316
+ Phase 2: Data Extraction (branched by clarity)
317
+ ┌────────────┬─────────────────┬──────────────┐
318
+ │ Score 3 │ Score 1-2 │ Score 0 │
319
+ │ GitHub │ Text + ACE │ Vague │
320
+ ├────────────┼─────────────────┼──────────────┤
321
+ │ gh CLI │ Parse struct │ AskQuestion │
322
+ │ → parse │ + quick hint │ (1 question) │
323
+ │ │ (3 files max) │ → feedback │
324
+ └────────────┴─────────────────┴──────────────┘
325
+
326
+ Phase 3: GitHub Publishing Decision (non-GitHub only)
327
+ ├─ Source = github: Skip (already from GitHub)
328
+ └─ Source ≠ github: AskUserQuestion
329
+ ├─ Yes → publishToGitHub = true
330
+ └─ No → publishToGitHub = false
331
+
332
+ Phase 4: Create Issue
333
+ ├─ Score ≥ 2: Direct creation
334
+ └─ Score < 2: Confirm first → Create
335
+ └─ If publishToGitHub: gh issue create → link URL
336
+
337
+ Note: Deep exploration & lifecycle deferred to /issue:plan
338
+ ```
339
+
340
+ ## Helper Functions
341
+
342
+ ```javascript
343
+ function extractKeywords(text) {
344
+ const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'not', 'with']);
345
+ return text
346
+ .toLowerCase()
347
+ .split(/\W+/)
348
+ .filter(w => w.length > 3 && !stopWords.has(w))
349
+ .slice(0, 5);
350
+ }
351
+
352
+ function parseTextDescription(text) {
353
+ const result = { title: '', context: '' };
354
+ const sentences = text.split(/\.(?=\s|$)/);
355
+
356
+ result.title = sentences[0]?.trim().substring(0, 60) || 'Untitled';
357
+ result.context = text.substring(0, 500);
358
+
359
+ // Extract structured fields if present
360
+ const expected = text.match(/expected:?\s*([^.]+)/i);
361
+ const actual = text.match(/actual:?\s*([^.]+)/i);
362
+ const affects = text.match(/affects?:?\s*([^.]+)/i);
363
+
364
+ if (expected) result.expected_behavior = expected[1].trim();
365
+ if (actual) result.actual_behavior = actual[1].trim();
366
+ if (affects) {
367
+ result.affected_components = affects[1].split(/[,\s]+/).filter(c => c.includes('/') || c.includes('.'));
368
+ }
369
+
370
+ return result;
371
+ }
372
+
373
+ function parseMarkdownBody(body) {
374
+ if (!body) return {};
375
+ const result = {};
376
+
377
+ const problem = body.match(/##?\s*(problem|description)[:\s]*([\s\S]*?)(?=##|$)/i);
378
+ const expected = body.match(/##?\s*expected[:\s]*([\s\S]*?)(?=##|$)/i);
379
+ const actual = body.match(/##?\s*actual[:\s]*([\s\S]*?)(?=##|$)/i);
380
+
381
+ if (problem) result.context = problem[2].trim().substring(0, 500);
382
+ if (expected) result.expected_behavior = expected[2].trim();
383
+ if (actual) result.actual_behavior = actual[2].trim();
384
+
385
+ return result;
386
+ }
387
+ ```
388
+
389
+ ## Examples
390
+
391
+ ### Clear Input (No Questions)
392
+
393
+ ```bash
394
+ /issue:new https://github.com/org/repo/issues/42
395
+ # → Fetches, parses, creates immediately
396
+
397
+ /issue:new "Login fails with special chars. Expected: success. Actual: 500"
398
+ # → Parses structure, creates immediately
399
+ ```
400
+
401
+ ### Vague Input (1 Question)
402
+
403
+ ```bash
404
+ /issue:new "auth broken"
405
+ # → Asks: "Input unclear. What is the issue about?"
406
+ # → User provides details → saved to feedback[]
407
+ # → Creates issue
408
+ ```
409
+
410
+ ## Related Commands
411
+
412
+ - `/issue:plan` - Plan solution for issue
413
+