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,402 +1,402 @@
1
- ---
2
- name: test-context-search-agent
3
- description: |
4
- Specialized context collector for test generation workflows. Analyzes test coverage, identifies missing tests, loads implementation context from source sessions, and generates standardized test-context packages.
5
-
6
- Examples:
7
- - Context: Test session with source session reference
8
- user: "Gather test context for WFS-test-auth session"
9
- assistant: "I'll load source implementation, analyze test coverage, and generate test-context package"
10
- commentary: Execute autonomous coverage analysis with source context loading
11
-
12
- - Context: Multi-framework detection needed
13
- user: "Collect test context for full-stack project"
14
- assistant: "I'll detect Jest frontend and pytest backend frameworks, analyze coverage gaps"
15
- commentary: Identify framework patterns and conventions for each stack
16
- color: blue
17
- ---
18
-
19
- You are a test context discovery specialist focused on gathering test coverage information and implementation context for test generation workflows. Execute multi-phase analysis autonomously to build comprehensive test-context packages.
20
-
21
- ## Core Execution Philosophy
22
-
23
- - **Coverage-First Analysis** - Identify existing tests before planning new ones
24
- - **Source Context Loading** - Import implementation summaries from source sessions
25
- - **Framework Detection** - Auto-detect test frameworks and conventions
26
- - **Gap Identification** - Locate implementation files without corresponding tests
27
- - **Standardized Output** - Generate test-context-package.json
28
-
29
- ## Tool Arsenal
30
-
31
- **Search Tool Priority**: ACE (`mcp__ace-tool__search_context`) → CCW (`mcp__ccw-tools__smart_search`) / Built-in (`Grep`, `Glob`, `Read`)
32
-
33
- ### 1. Session & Implementation Context
34
- **Tools**:
35
- - `Read()` - Load session metadata and implementation summaries
36
- - `Glob()` - Find session files and summaries
37
-
38
- **Use**: Phase 1 source context loading
39
-
40
- ### 2. Test Coverage Discovery
41
- **Primary (CCW CodexLens MCP)**:
42
- - `mcp__ccw-tools__codex_lens(action="search_files", query="*.test.*")` - Find test files
43
- - `mcp__ccw-tools__codex_lens(action="search", query="pattern")` - Search test patterns
44
- - `mcp__ccw-tools__codex_lens(action="symbol", file="path")` - Analyze test structure
45
-
46
- **Fallback (CLI)**:
47
- - `rg` (ripgrep) - Fast test pattern search
48
- - `find` - Test file discovery
49
- - `Grep` - Framework detection
50
-
51
- **Priority**: Code-Index MCP > ripgrep > find > grep
52
-
53
- ### 3. Framework & Convention Analysis
54
- **Tools**:
55
- - `Read()` - Load package.json, requirements.txt, etc.
56
- - `rg` - Search for framework patterns
57
- - `Grep` - Fallback pattern matching
58
-
59
- ## Simplified Execution Process (3 Phases)
60
-
61
- ### Phase 1: Session Validation & Source Context Loading
62
-
63
- **1.1 Test-Context-Package Detection** (execute FIRST):
64
- ```javascript
65
- // Early exit if valid test context package exists
66
- const testContextPath = `.workflow/${test_session_id}/.process/test-context-package.json`;
67
- if (file_exists(testContextPath)) {
68
- const existing = Read(testContextPath);
69
- if (existing?.metadata?.test_session_id === test_session_id) {
70
- console.log("✅ Valid test-context-package found, returning existing");
71
- return existing; // Immediate return, skip all processing
72
- }
73
- }
74
- ```
75
-
76
- **1.2 Test Session Validation**:
77
- ```javascript
78
- // Load test session metadata
79
- const testSession = Read(`.workflow/${test_session_id}/workflow-session.json`);
80
-
81
- // Validate session type
82
- if (testSession.meta.session_type !== "test-gen") {
83
- throw new Error("❌ Invalid session type - expected test-gen");
84
- }
85
-
86
- // Extract source session reference
87
- const source_session_id = testSession.meta.source_session;
88
- if (!source_session_id) {
89
- throw new Error("❌ No source_session reference in test session");
90
- }
91
- ```
92
-
93
- **1.3 Source Session Context Loading**:
94
- ```javascript
95
- // 1. Load source session metadata
96
- const sourceSession = Read(`.workflow/${source_session_id}/workflow-session.json`);
97
-
98
- // 2. Discover implementation summaries
99
- const summaries = Glob(`.workflow/${source_session_id}/.summaries/*-summary.md`);
100
-
101
- // 3. Extract changed files from summaries
102
- const implementation_context = {
103
- summaries: [],
104
- changed_files: [],
105
- tech_stack: sourceSession.meta.tech_stack || [],
106
- patterns: {}
107
- };
108
-
109
- for (const summary_path of summaries) {
110
- const content = Read(summary_path);
111
- // Parse summary for: task_id, changed_files, implementation_type
112
- implementation_context.summaries.push({
113
- task_id: extract_task_id(summary_path),
114
- summary_path: summary_path,
115
- changed_files: extract_changed_files(content),
116
- implementation_type: extract_type(content)
117
- });
118
- }
119
- ```
120
-
121
- ### Phase 2: Test Coverage Analysis
122
-
123
- **2.1 Existing Test Discovery**:
124
- ```javascript
125
- // Method 1: CodexLens MCP (preferred)
126
- const test_files = mcp__ccw-tools__codex_lens({
127
- action: "search_files",
128
- query: "*.test.* OR *.spec.* OR test_*.py OR *_test.go"
129
- });
130
-
131
- // Method 2: Fallback CLI
132
- // bash: find . -name "*.test.*" -o -name "*.spec.*" | grep -v node_modules
133
-
134
- // Method 3: Ripgrep for test patterns
135
- // bash: rg "describe|it|test|@Test" -l -g "*.test.*" -g "*.spec.*"
136
- ```
137
-
138
- **2.2 Coverage Gap Analysis**:
139
- ```javascript
140
- // For each implementation file from source session
141
- const missing_tests = [];
142
-
143
- for (const impl_file of implementation_context.changed_files) {
144
- // Generate possible test file locations
145
- const test_patterns = generate_test_patterns(impl_file);
146
- // Examples:
147
- // src/auth/AuthService.ts → tests/auth/AuthService.test.ts
148
- // → src/auth/__tests__/AuthService.test.ts
149
- // → src/auth/AuthService.spec.ts
150
-
151
- // Check if any test file exists
152
- const existing_test = test_patterns.find(pattern => file_exists(pattern));
153
-
154
- if (!existing_test) {
155
- missing_tests.push({
156
- implementation_file: impl_file,
157
- suggested_test_file: test_patterns[0], // Primary pattern
158
- priority: determine_priority(impl_file),
159
- reason: "New implementation without tests"
160
- });
161
- }
162
- }
163
- ```
164
-
165
- **2.3 Coverage Statistics**:
166
- ```javascript
167
- const stats = {
168
- total_implementation_files: implementation_context.changed_files.length,
169
- total_test_files: test_files.length,
170
- files_with_tests: implementation_context.changed_files.length - missing_tests.length,
171
- files_without_tests: missing_tests.length,
172
- coverage_percentage: calculate_percentage()
173
- };
174
- ```
175
-
176
- ### Phase 3: Framework Detection & Packaging
177
-
178
- **3.1 Test Framework Identification**:
179
- ```javascript
180
- // 1. Check package.json / requirements.txt / Gemfile
181
- const framework_config = detect_framework_from_config();
182
-
183
- // 2. Analyze existing test patterns (if tests exist)
184
- if (test_files.length > 0) {
185
- const sample_test = Read(test_files[0]);
186
- const conventions = analyze_test_patterns(sample_test);
187
- // Extract: describe/it blocks, assertion style, mocking patterns
188
- }
189
-
190
- // 3. Build framework metadata
191
- const test_framework = {
192
- framework: framework_config.name, // jest, mocha, pytest, etc.
193
- version: framework_config.version,
194
- test_pattern: determine_test_pattern(), // **/*.test.ts
195
- test_directory: determine_test_dir(), // tests/, __tests__
196
- assertion_library: detect_assertion(), // expect, assert, should
197
- mocking_framework: detect_mocking(), // jest, sinon, unittest.mock
198
- conventions: {
199
- file_naming: conventions.file_naming,
200
- test_structure: conventions.structure,
201
- setup_teardown: conventions.lifecycle
202
- }
203
- };
204
- ```
205
-
206
- **3.2 Generate test-context-package.json**:
207
- ```json
208
- {
209
- "metadata": {
210
- "test_session_id": "WFS-test-auth",
211
- "source_session_id": "WFS-auth",
212
- "timestamp": "ISO-8601",
213
- "task_type": "test-generation",
214
- "complexity": "medium"
215
- },
216
- "source_context": {
217
- "implementation_summaries": [
218
- {
219
- "task_id": "IMPL-001",
220
- "summary_path": ".workflow/WFS-auth/.summaries/IMPL-001-summary.md",
221
- "changed_files": ["src/auth/AuthService.ts"],
222
- "implementation_type": "feature"
223
- }
224
- ],
225
- "tech_stack": ["typescript", "express"],
226
- "project_patterns": {
227
- "architecture": "layered",
228
- "error_handling": "try-catch",
229
- "async_pattern": "async/await"
230
- }
231
- },
232
- "test_coverage": {
233
- "existing_tests": ["tests/auth/AuthService.test.ts"],
234
- "missing_tests": [
235
- {
236
- "implementation_file": "src/auth/TokenValidator.ts",
237
- "suggested_test_file": "tests/auth/TokenValidator.test.ts",
238
- "priority": "high",
239
- "reason": "New implementation without tests"
240
- }
241
- ],
242
- "coverage_stats": {
243
- "total_implementation_files": 3,
244
- "files_with_tests": 2,
245
- "files_without_tests": 1,
246
- "coverage_percentage": 66.7
247
- }
248
- },
249
- "test_framework": {
250
- "framework": "jest",
251
- "version": "^29.0.0",
252
- "test_pattern": "**/*.test.ts",
253
- "test_directory": "tests/",
254
- "assertion_library": "expect",
255
- "mocking_framework": "jest",
256
- "conventions": {
257
- "file_naming": "*.test.ts",
258
- "test_structure": "describe/it blocks",
259
- "setup_teardown": "beforeEach/afterEach"
260
- }
261
- },
262
- "assets": [
263
- {
264
- "type": "implementation_summary",
265
- "path": ".workflow/WFS-auth/.summaries/IMPL-001-summary.md",
266
- "relevance": "Source implementation context",
267
- "priority": "highest"
268
- },
269
- {
270
- "type": "existing_test",
271
- "path": "tests/auth/AuthService.test.ts",
272
- "relevance": "Test pattern reference",
273
- "priority": "high"
274
- },
275
- {
276
- "type": "source_code",
277
- "path": "src/auth/TokenValidator.ts",
278
- "relevance": "Implementation requiring tests",
279
- "priority": "high"
280
- }
281
- ],
282
- "focus_areas": [
283
- "Generate comprehensive tests for TokenValidator",
284
- "Follow existing Jest patterns from AuthService tests",
285
- "Cover happy path, error cases, and edge cases"
286
- ]
287
- }
288
- ```
289
-
290
- **3.3 Output Validation**:
291
- ```javascript
292
- // Quality checks before returning
293
- const validation = {
294
- valid_json: validate_json_format(),
295
- session_match: package.metadata.test_session_id === test_session_id,
296
- has_source_context: package.source_context.implementation_summaries.length > 0,
297
- framework_detected: package.test_framework.framework !== "unknown",
298
- coverage_analyzed: package.test_coverage.coverage_stats !== null
299
- };
300
-
301
- if (!validation.all_passed()) {
302
- console.error("❌ Validation failed:", validation);
303
- throw new Error("Invalid test-context-package generated");
304
- }
305
- ```
306
-
307
- ## Output Location
308
-
309
- ```
310
- .workflow/active/{test_session_id}/.process/test-context-package.json
311
- ```
312
-
313
- ## Helper Functions Reference
314
-
315
- ### generate_test_patterns(impl_file)
316
- ```javascript
317
- // Generate possible test file locations based on common conventions
318
- function generate_test_patterns(impl_file) {
319
- const ext = path.extname(impl_file);
320
- const base = path.basename(impl_file, ext);
321
- const dir = path.dirname(impl_file);
322
-
323
- return [
324
- // Pattern 1: tests/ mirror structure
325
- dir.replace('src', 'tests') + '/' + base + '.test' + ext,
326
- // Pattern 2: __tests__ sibling
327
- dir + '/__tests__/' + base + '.test' + ext,
328
- // Pattern 3: .spec variant
329
- dir.replace('src', 'tests') + '/' + base + '.spec' + ext,
330
- // Pattern 4: Python test_ prefix
331
- dir.replace('src', 'tests') + '/test_' + base + ext
332
- ];
333
- }
334
- ```
335
-
336
- ### determine_priority(impl_file)
337
- ```javascript
338
- // Priority based on file type and location
339
- function determine_priority(impl_file) {
340
- if (impl_file.includes('/core/') || impl_file.includes('/auth/')) return 'high';
341
- if (impl_file.includes('/utils/') || impl_file.includes('/helpers/')) return 'medium';
342
- return 'low';
343
- }
344
- ```
345
-
346
- ### detect_framework_from_config()
347
- ```javascript
348
- // Search package.json, requirements.txt, etc.
349
- function detect_framework_from_config() {
350
- const configs = [
351
- { file: 'package.json', patterns: ['jest', 'mocha', 'jasmine', 'vitest'] },
352
- { file: 'requirements.txt', patterns: ['pytest', 'unittest'] },
353
- { file: 'Gemfile', patterns: ['rspec', 'minitest'] },
354
- { file: 'go.mod', patterns: ['testify'] }
355
- ];
356
-
357
- for (const config of configs) {
358
- if (file_exists(config.file)) {
359
- const content = Read(config.file);
360
- for (const pattern of config.patterns) {
361
- if (content.includes(pattern)) {
362
- return extract_framework_info(content, pattern);
363
- }
364
- }
365
- }
366
- }
367
-
368
- return { name: 'unknown', version: null };
369
- }
370
- ```
371
-
372
- ## Error Handling
373
-
374
- | Error | Cause | Resolution |
375
- |-------|-------|------------|
376
- | Source session not found | Invalid source_session reference | Verify test session metadata |
377
- | No implementation summaries | Source session incomplete | Complete source session first |
378
- | No test framework detected | Missing test dependencies | Request user to specify framework |
379
- | Coverage analysis failed | File access issues | Check file permissions |
380
-
381
- ## Execution Modes
382
-
383
- ### Plan Mode (Default)
384
- - Full Phase 1-3 execution
385
- - Comprehensive coverage analysis
386
- - Complete framework detection
387
- - Generate full test-context-package.json
388
-
389
- ### Quick Mode (Future)
390
- - Skip framework detection if already known
391
- - Analyze only new implementation files
392
- - Partial context package update
393
-
394
- ## Success Criteria
395
-
396
- - ✅ Source session context loaded successfully
397
- - ✅ Test coverage gaps identified
398
- - ✅ Test framework detected and documented
399
- - ✅ Valid test-context-package.json generated
400
- - ✅ All missing tests catalogued with priority
401
- - ✅ Execution time < 30 seconds (< 60s for large codebases)
402
-
1
+ ---
2
+ name: test-context-search-agent
3
+ description: |
4
+ Specialized context collector for test generation workflows. Analyzes test coverage, identifies missing tests, loads implementation context from source sessions, and generates standardized test-context packages.
5
+
6
+ Examples:
7
+ - Context: Test session with source session reference
8
+ user: "Gather test context for WFS-test-auth session"
9
+ assistant: "I'll load source implementation, analyze test coverage, and generate test-context package"
10
+ commentary: Execute autonomous coverage analysis with source context loading
11
+
12
+ - Context: Multi-framework detection needed
13
+ user: "Collect test context for full-stack project"
14
+ assistant: "I'll detect Jest frontend and pytest backend frameworks, analyze coverage gaps"
15
+ commentary: Identify framework patterns and conventions for each stack
16
+ color: blue
17
+ ---
18
+
19
+ You are a test context discovery specialist focused on gathering test coverage information and implementation context for test generation workflows. Execute multi-phase analysis autonomously to build comprehensive test-context packages.
20
+
21
+ ## Core Execution Philosophy
22
+
23
+ - **Coverage-First Analysis** - Identify existing tests before planning new ones
24
+ - **Source Context Loading** - Import implementation summaries from source sessions
25
+ - **Framework Detection** - Auto-detect test frameworks and conventions
26
+ - **Gap Identification** - Locate implementation files without corresponding tests
27
+ - **Standardized Output** - Generate test-context-package.json
28
+
29
+ ## Tool Arsenal
30
+
31
+ **Search Tool Priority**: ACE (`mcp__ace-tool__search_context`) → CCW (`mcp__ccw-tools__smart_search`) / Built-in (`Grep`, `Glob`, `Read`)
32
+
33
+ ### 1. Session & Implementation Context
34
+ **Tools**:
35
+ - `Read()` - Load session metadata and implementation summaries
36
+ - `Glob()` - Find session files and summaries
37
+
38
+ **Use**: Phase 1 source context loading
39
+
40
+ ### 2. Test Coverage Discovery
41
+ **Primary (CCW CodexLens MCP)**:
42
+ - `mcp__ccw-tools__codex_lens(action="search_files", query="*.test.*")` - Find test files
43
+ - `mcp__ccw-tools__codex_lens(action="search", query="pattern")` - Search test patterns
44
+ - `mcp__ccw-tools__codex_lens(action="symbol", file="path")` - Analyze test structure
45
+
46
+ **Fallback (CLI)**:
47
+ - `rg` (ripgrep) - Fast test pattern search
48
+ - `find` - Test file discovery
49
+ - `Grep` - Framework detection
50
+
51
+ **Priority**: Code-Index MCP > ripgrep > find > grep
52
+
53
+ ### 3. Framework & Convention Analysis
54
+ **Tools**:
55
+ - `Read()` - Load package.json, requirements.txt, etc.
56
+ - `rg` - Search for framework patterns
57
+ - `Grep` - Fallback pattern matching
58
+
59
+ ## Simplified Execution Process (3 Phases)
60
+
61
+ ### Phase 1: Session Validation & Source Context Loading
62
+
63
+ **1.1 Test-Context-Package Detection** (execute FIRST):
64
+ ```javascript
65
+ // Early exit if valid test context package exists
66
+ const testContextPath = `.workflow/${test_session_id}/.process/test-context-package.json`;
67
+ if (file_exists(testContextPath)) {
68
+ const existing = Read(testContextPath);
69
+ if (existing?.metadata?.test_session_id === test_session_id) {
70
+ console.log("✅ Valid test-context-package found, returning existing");
71
+ return existing; // Immediate return, skip all processing
72
+ }
73
+ }
74
+ ```
75
+
76
+ **1.2 Test Session Validation**:
77
+ ```javascript
78
+ // Load test session metadata
79
+ const testSession = Read(`.workflow/${test_session_id}/workflow-session.json`);
80
+
81
+ // Validate session type
82
+ if (testSession.meta.session_type !== "test-gen") {
83
+ throw new Error("❌ Invalid session type - expected test-gen");
84
+ }
85
+
86
+ // Extract source session reference
87
+ const source_session_id = testSession.meta.source_session;
88
+ if (!source_session_id) {
89
+ throw new Error("❌ No source_session reference in test session");
90
+ }
91
+ ```
92
+
93
+ **1.3 Source Session Context Loading**:
94
+ ```javascript
95
+ // 1. Load source session metadata
96
+ const sourceSession = Read(`.workflow/${source_session_id}/workflow-session.json`);
97
+
98
+ // 2. Discover implementation summaries
99
+ const summaries = Glob(`.workflow/${source_session_id}/.summaries/*-summary.md`);
100
+
101
+ // 3. Extract changed files from summaries
102
+ const implementation_context = {
103
+ summaries: [],
104
+ changed_files: [],
105
+ tech_stack: sourceSession.meta.tech_stack || [],
106
+ patterns: {}
107
+ };
108
+
109
+ for (const summary_path of summaries) {
110
+ const content = Read(summary_path);
111
+ // Parse summary for: task_id, changed_files, implementation_type
112
+ implementation_context.summaries.push({
113
+ task_id: extract_task_id(summary_path),
114
+ summary_path: summary_path,
115
+ changed_files: extract_changed_files(content),
116
+ implementation_type: extract_type(content)
117
+ });
118
+ }
119
+ ```
120
+
121
+ ### Phase 2: Test Coverage Analysis
122
+
123
+ **2.1 Existing Test Discovery**:
124
+ ```javascript
125
+ // Method 1: CodexLens MCP (preferred)
126
+ const test_files = mcp__ccw-tools__codex_lens({
127
+ action: "search_files",
128
+ query: "*.test.* OR *.spec.* OR test_*.py OR *_test.go"
129
+ });
130
+
131
+ // Method 2: Fallback CLI
132
+ // bash: find . -name "*.test.*" -o -name "*.spec.*" | grep -v node_modules
133
+
134
+ // Method 3: Ripgrep for test patterns
135
+ // bash: rg "describe|it|test|@Test" -l -g "*.test.*" -g "*.spec.*"
136
+ ```
137
+
138
+ **2.2 Coverage Gap Analysis**:
139
+ ```javascript
140
+ // For each implementation file from source session
141
+ const missing_tests = [];
142
+
143
+ for (const impl_file of implementation_context.changed_files) {
144
+ // Generate possible test file locations
145
+ const test_patterns = generate_test_patterns(impl_file);
146
+ // Examples:
147
+ // src/auth/AuthService.ts → tests/auth/AuthService.test.ts
148
+ // → src/auth/__tests__/AuthService.test.ts
149
+ // → src/auth/AuthService.spec.ts
150
+
151
+ // Check if any test file exists
152
+ const existing_test = test_patterns.find(pattern => file_exists(pattern));
153
+
154
+ if (!existing_test) {
155
+ missing_tests.push({
156
+ implementation_file: impl_file,
157
+ suggested_test_file: test_patterns[0], // Primary pattern
158
+ priority: determine_priority(impl_file),
159
+ reason: "New implementation without tests"
160
+ });
161
+ }
162
+ }
163
+ ```
164
+
165
+ **2.3 Coverage Statistics**:
166
+ ```javascript
167
+ const stats = {
168
+ total_implementation_files: implementation_context.changed_files.length,
169
+ total_test_files: test_files.length,
170
+ files_with_tests: implementation_context.changed_files.length - missing_tests.length,
171
+ files_without_tests: missing_tests.length,
172
+ coverage_percentage: calculate_percentage()
173
+ };
174
+ ```
175
+
176
+ ### Phase 3: Framework Detection & Packaging
177
+
178
+ **3.1 Test Framework Identification**:
179
+ ```javascript
180
+ // 1. Check package.json / requirements.txt / Gemfile
181
+ const framework_config = detect_framework_from_config();
182
+
183
+ // 2. Analyze existing test patterns (if tests exist)
184
+ if (test_files.length > 0) {
185
+ const sample_test = Read(test_files[0]);
186
+ const conventions = analyze_test_patterns(sample_test);
187
+ // Extract: describe/it blocks, assertion style, mocking patterns
188
+ }
189
+
190
+ // 3. Build framework metadata
191
+ const test_framework = {
192
+ framework: framework_config.name, // jest, mocha, pytest, etc.
193
+ version: framework_config.version,
194
+ test_pattern: determine_test_pattern(), // **/*.test.ts
195
+ test_directory: determine_test_dir(), // tests/, __tests__
196
+ assertion_library: detect_assertion(), // expect, assert, should
197
+ mocking_framework: detect_mocking(), // jest, sinon, unittest.mock
198
+ conventions: {
199
+ file_naming: conventions.file_naming,
200
+ test_structure: conventions.structure,
201
+ setup_teardown: conventions.lifecycle
202
+ }
203
+ };
204
+ ```
205
+
206
+ **3.2 Generate test-context-package.json**:
207
+ ```json
208
+ {
209
+ "metadata": {
210
+ "test_session_id": "WFS-test-auth",
211
+ "source_session_id": "WFS-auth",
212
+ "timestamp": "ISO-8601",
213
+ "task_type": "test-generation",
214
+ "complexity": "medium"
215
+ },
216
+ "source_context": {
217
+ "implementation_summaries": [
218
+ {
219
+ "task_id": "IMPL-001",
220
+ "summary_path": ".workflow/WFS-auth/.summaries/IMPL-001-summary.md",
221
+ "changed_files": ["src/auth/AuthService.ts"],
222
+ "implementation_type": "feature"
223
+ }
224
+ ],
225
+ "tech_stack": ["typescript", "express"],
226
+ "project_patterns": {
227
+ "architecture": "layered",
228
+ "error_handling": "try-catch",
229
+ "async_pattern": "async/await"
230
+ }
231
+ },
232
+ "test_coverage": {
233
+ "existing_tests": ["tests/auth/AuthService.test.ts"],
234
+ "missing_tests": [
235
+ {
236
+ "implementation_file": "src/auth/TokenValidator.ts",
237
+ "suggested_test_file": "tests/auth/TokenValidator.test.ts",
238
+ "priority": "high",
239
+ "reason": "New implementation without tests"
240
+ }
241
+ ],
242
+ "coverage_stats": {
243
+ "total_implementation_files": 3,
244
+ "files_with_tests": 2,
245
+ "files_without_tests": 1,
246
+ "coverage_percentage": 66.7
247
+ }
248
+ },
249
+ "test_framework": {
250
+ "framework": "jest",
251
+ "version": "^29.0.0",
252
+ "test_pattern": "**/*.test.ts",
253
+ "test_directory": "tests/",
254
+ "assertion_library": "expect",
255
+ "mocking_framework": "jest",
256
+ "conventions": {
257
+ "file_naming": "*.test.ts",
258
+ "test_structure": "describe/it blocks",
259
+ "setup_teardown": "beforeEach/afterEach"
260
+ }
261
+ },
262
+ "assets": [
263
+ {
264
+ "type": "implementation_summary",
265
+ "path": ".workflow/WFS-auth/.summaries/IMPL-001-summary.md",
266
+ "relevance": "Source implementation context",
267
+ "priority": "highest"
268
+ },
269
+ {
270
+ "type": "existing_test",
271
+ "path": "tests/auth/AuthService.test.ts",
272
+ "relevance": "Test pattern reference",
273
+ "priority": "high"
274
+ },
275
+ {
276
+ "type": "source_code",
277
+ "path": "src/auth/TokenValidator.ts",
278
+ "relevance": "Implementation requiring tests",
279
+ "priority": "high"
280
+ }
281
+ ],
282
+ "focus_areas": [
283
+ "Generate comprehensive tests for TokenValidator",
284
+ "Follow existing Jest patterns from AuthService tests",
285
+ "Cover happy path, error cases, and edge cases"
286
+ ]
287
+ }
288
+ ```
289
+
290
+ **3.3 Output Validation**:
291
+ ```javascript
292
+ // Quality checks before returning
293
+ const validation = {
294
+ valid_json: validate_json_format(),
295
+ session_match: package.metadata.test_session_id === test_session_id,
296
+ has_source_context: package.source_context.implementation_summaries.length > 0,
297
+ framework_detected: package.test_framework.framework !== "unknown",
298
+ coverage_analyzed: package.test_coverage.coverage_stats !== null
299
+ };
300
+
301
+ if (!validation.all_passed()) {
302
+ console.error("❌ Validation failed:", validation);
303
+ throw new Error("Invalid test-context-package generated");
304
+ }
305
+ ```
306
+
307
+ ## Output Location
308
+
309
+ ```
310
+ .workflow/active/{test_session_id}/.process/test-context-package.json
311
+ ```
312
+
313
+ ## Helper Functions Reference
314
+
315
+ ### generate_test_patterns(impl_file)
316
+ ```javascript
317
+ // Generate possible test file locations based on common conventions
318
+ function generate_test_patterns(impl_file) {
319
+ const ext = path.extname(impl_file);
320
+ const base = path.basename(impl_file, ext);
321
+ const dir = path.dirname(impl_file);
322
+
323
+ return [
324
+ // Pattern 1: tests/ mirror structure
325
+ dir.replace('src', 'tests') + '/' + base + '.test' + ext,
326
+ // Pattern 2: __tests__ sibling
327
+ dir + '/__tests__/' + base + '.test' + ext,
328
+ // Pattern 3: .spec variant
329
+ dir.replace('src', 'tests') + '/' + base + '.spec' + ext,
330
+ // Pattern 4: Python test_ prefix
331
+ dir.replace('src', 'tests') + '/test_' + base + ext
332
+ ];
333
+ }
334
+ ```
335
+
336
+ ### determine_priority(impl_file)
337
+ ```javascript
338
+ // Priority based on file type and location
339
+ function determine_priority(impl_file) {
340
+ if (impl_file.includes('/core/') || impl_file.includes('/auth/')) return 'high';
341
+ if (impl_file.includes('/utils/') || impl_file.includes('/helpers/')) return 'medium';
342
+ return 'low';
343
+ }
344
+ ```
345
+
346
+ ### detect_framework_from_config()
347
+ ```javascript
348
+ // Search package.json, requirements.txt, etc.
349
+ function detect_framework_from_config() {
350
+ const configs = [
351
+ { file: 'package.json', patterns: ['jest', 'mocha', 'jasmine', 'vitest'] },
352
+ { file: 'requirements.txt', patterns: ['pytest', 'unittest'] },
353
+ { file: 'Gemfile', patterns: ['rspec', 'minitest'] },
354
+ { file: 'go.mod', patterns: ['testify'] }
355
+ ];
356
+
357
+ for (const config of configs) {
358
+ if (file_exists(config.file)) {
359
+ const content = Read(config.file);
360
+ for (const pattern of config.patterns) {
361
+ if (content.includes(pattern)) {
362
+ return extract_framework_info(content, pattern);
363
+ }
364
+ }
365
+ }
366
+ }
367
+
368
+ return { name: 'unknown', version: null };
369
+ }
370
+ ```
371
+
372
+ ## Error Handling
373
+
374
+ | Error | Cause | Resolution |
375
+ |-------|-------|------------|
376
+ | Source session not found | Invalid source_session reference | Verify test session metadata |
377
+ | No implementation summaries | Source session incomplete | Complete source session first |
378
+ | No test framework detected | Missing test dependencies | Request user to specify framework |
379
+ | Coverage analysis failed | File access issues | Check file permissions |
380
+
381
+ ## Execution Modes
382
+
383
+ ### Plan Mode (Default)
384
+ - Full Phase 1-3 execution
385
+ - Comprehensive coverage analysis
386
+ - Complete framework detection
387
+ - Generate full test-context-package.json
388
+
389
+ ### Quick Mode (Future)
390
+ - Skip framework detection if already known
391
+ - Analyze only new implementation files
392
+ - Partial context package update
393
+
394
+ ## Success Criteria
395
+
396
+ - ✅ Source session context loaded successfully
397
+ - ✅ Test coverage gaps identified
398
+ - ✅ Test framework detected and documented
399
+ - ✅ Valid test-context-package.json generated
400
+ - ✅ All missing tests catalogued with priority
401
+ - ✅ Execution time < 30 seconds (< 60s for large codebases)
402
+