claude-code-workflow 6.1.4 → 6.2.2

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 (437) hide show
  1. package/.claude/CLAUDE.md +10 -0
  2. package/.claude/agents/action-planning-agent.md +857 -778
  3. package/.claude/agents/cli-execution-agent.md +266 -269
  4. package/.claude/agents/cli-explore-agent.md +2 -2
  5. package/.claude/agents/cli-lite-planning-agent.md +142 -92
  6. package/.claude/agents/cli-planning-agent.md +4 -4
  7. package/.claude/agents/code-developer.md +7 -6
  8. package/.claude/agents/conceptual-planning-agent.md +2 -2
  9. package/.claude/agents/context-search-agent.md +31 -32
  10. package/.claude/agents/doc-generator.md +4 -4
  11. package/.claude/agents/memory-bridge.md +93 -93
  12. package/.claude/agents/test-context-search-agent.md +8 -7
  13. package/.claude/agents/test-fix-agent.md +7 -6
  14. package/.claude/commands/clean.md +516 -0
  15. package/.claude/commands/memory/compact.md +383 -0
  16. package/.claude/commands/memory/docs-full-cli.md +471 -471
  17. package/.claude/commands/memory/docs-related-cli.md +386 -386
  18. package/.claude/commands/memory/docs.md +615 -615
  19. package/.claude/commands/memory/load.md +5 -5
  20. package/.claude/commands/memory/tech-research-rules.md +310 -0
  21. package/.claude/commands/memory/update-full.md +332 -332
  22. package/.claude/commands/memory/workflow-skill-memory.md +4 -4
  23. package/.claude/commands/task/create.md +151 -151
  24. package/.claude/commands/version.md +254 -254
  25. package/.claude/commands/workflow/brainstorm/api-designer.md +587 -585
  26. package/.claude/commands/workflow/brainstorm/artifacts.md +1 -0
  27. package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -443
  28. package/.claude/commands/workflow/brainstorm/data-architect.md +220 -220
  29. package/.claude/commands/workflow/brainstorm/product-manager.md +200 -200
  30. package/.claude/commands/workflow/brainstorm/product-owner.md +200 -200
  31. package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -200
  32. package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  33. package/.claude/commands/workflow/brainstorm/system-architect.md +389 -387
  34. package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
  35. package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
  36. package/.claude/commands/workflow/debug.md +321 -0
  37. package/.claude/commands/workflow/execute.md +13 -0
  38. package/.claude/commands/workflow/init.md +165 -164
  39. package/.claude/commands/workflow/lite-execute.md +119 -13
  40. package/.claude/commands/workflow/lite-fix.md +623 -621
  41. package/.claude/commands/workflow/lite-plan.md +610 -592
  42. package/.claude/commands/workflow/plan.md +5 -5
  43. package/.claude/commands/workflow/review-module-cycle.md +2 -0
  44. package/.claude/commands/workflow/review-session-cycle.md +2 -0
  45. package/.claude/commands/workflow/review.md +297 -291
  46. package/.claude/commands/workflow/session/complete.md +153 -500
  47. package/.claude/commands/workflow/session/list.md +95 -95
  48. package/.claude/commands/workflow/session/resume.md +60 -60
  49. package/.claude/commands/workflow/session/start.md +199 -199
  50. package/.claude/commands/workflow/tdd-plan.md +3 -3
  51. package/.claude/commands/workflow/tdd-verify.md +23 -9
  52. package/.claude/commands/workflow/test-cycle-execute.md +2 -0
  53. package/.claude/commands/workflow/test-fix-gen.md +699 -699
  54. package/.claude/commands/workflow/tools/conflict-resolution.md +104 -18
  55. package/.claude/commands/workflow/tools/context-gather.md +436 -434
  56. package/.claude/commands/workflow/tools/task-generate-agent.md +490 -291
  57. package/.claude/commands/workflow/tools/task-generate-tdd.md +18 -10
  58. package/.claude/commands/workflow/tools/test-concept-enhanced.md +2 -1
  59. package/.claude/commands/workflow/tools/test-context-gather.md +1 -0
  60. package/.claude/commands/workflow/tools/test-task-generate.md +1 -0
  61. package/.claude/commands/workflow/ui-design/import-from-code.md +9 -6
  62. package/.claude/skills/command-guide/SKILL.md +5 -5
  63. package/.claude/skills/command-guide/index/all-commands.json +1 -1
  64. package/.claude/skills/command-guide/index/by-category.json +1 -1
  65. package/.claude/skills/command-guide/index/by-use-case.json +1 -1
  66. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +857 -778
  67. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +266 -269
  68. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +2 -2
  69. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +142 -92
  70. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +4 -4
  71. package/.claude/skills/command-guide/reference/agents/code-developer.md +7 -6
  72. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +2 -2
  73. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +31 -32
  74. package/.claude/skills/command-guide/reference/agents/doc-generator.md +4 -4
  75. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  76. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +8 -7
  77. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +7 -6
  78. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  79. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  80. package/.claude/skills/command-guide/reference/commands/memory/docs.md +17 -16
  81. package/.claude/skills/command-guide/reference/commands/memory/load.md +5 -5
  82. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +194 -357
  83. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  84. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +4 -4
  85. package/.claude/skills/command-guide/reference/commands/task/create.md +151 -151
  86. package/.claude/skills/command-guide/reference/commands/version.md +254 -254
  87. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -585
  88. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +443 -443
  89. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -220
  90. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -200
  91. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -200
  92. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -200
  93. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  94. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -387
  95. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -221
  96. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -221
  97. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +25 -20
  98. package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -164
  99. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +748 -686
  100. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +664 -621
  101. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +645 -592
  102. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +5 -5
  103. package/.claude/skills/command-guide/reference/commands/workflow/review.md +25 -18
  104. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +547 -500
  105. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +45 -27
  106. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +35 -19
  107. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +90 -33
  108. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +3 -3
  109. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +23 -9
  110. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -699
  111. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +103 -17
  112. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  113. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +487 -291
  114. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +17 -10
  115. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +1 -1
  116. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +6 -6
  117. package/.claude/workflows/chinese-response.md +38 -0
  118. package/.claude/workflows/cli-templates/prompts/rules/rule-api.txt +122 -0
  119. package/.claude/workflows/cli-templates/prompts/rules/rule-components.txt +122 -0
  120. package/.claude/workflows/cli-templates/prompts/rules/rule-config.txt +89 -0
  121. package/.claude/workflows/cli-templates/prompts/rules/rule-core.txt +60 -0
  122. package/.claude/workflows/cli-templates/prompts/rules/rule-patterns.txt +70 -0
  123. package/.claude/workflows/cli-templates/prompts/rules/rule-testing.txt +81 -0
  124. package/.claude/workflows/cli-templates/prompts/rules/tech-rules-agent-prompt.txt +89 -0
  125. package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -131
  126. package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +5 -9
  127. package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +5 -9
  128. package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +112 -0
  129. package/.claude/workflows/cli-templates/protocols/write-protocol.md +201 -0
  130. package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +137 -0
  131. package/.claude/workflows/cli-templates/schemas/debug-log-json-schema.json +127 -0
  132. package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +25 -0
  133. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +25 -0
  134. package/.claude/workflows/cli-tools-usage.md +526 -0
  135. package/{CLAUDE.md → .claude/workflows/coding-philosophy.md} +24 -45
  136. package/.claude/workflows/context-tools.md +84 -0
  137. package/.claude/workflows/file-modification.md +64 -0
  138. package/.claude/workflows/tool-strategy.md +216 -79
  139. package/.claude/workflows/windows-platform.md +16 -0
  140. package/.claude/workflows/workflow-architecture.md +942 -942
  141. package/.codex/AGENTS.md +63 -330
  142. package/.codex/prompts/debug.md +318 -0
  143. package/.codex/prompts/execute.md +273 -0
  144. package/.codex/prompts/lite-execute.md +164 -0
  145. package/.codex/prompts/lite-plan.md +469 -0
  146. package/.codex/prompts.zip +0 -0
  147. package/.gemini/GEMINI.md +25 -164
  148. package/.qwen/QWEN.md +0 -139
  149. package/README.md +29 -9
  150. package/ccw/README.md +30 -6
  151. package/ccw/bin/ccw-mcp.js +7 -0
  152. package/ccw/bin/ccw.js +9 -9
  153. package/ccw/package.json +65 -47
  154. package/ccw/src/.workflow/.cli-history/history.db +0 -0
  155. package/ccw/src/.workflow/.cli-history/history.db-shm +0 -0
  156. package/ccw/src/.workflow/.cli-history/history.db-wal +0 -0
  157. package/ccw/src/cli.ts +244 -0
  158. package/ccw/src/commands/cli.ts +740 -0
  159. package/ccw/src/commands/core-memory.ts +770 -0
  160. package/ccw/src/commands/hook.ts +315 -0
  161. package/ccw/src/commands/install.ts +519 -0
  162. package/ccw/src/commands/{list.js → list.ts} +1 -1
  163. package/ccw/src/commands/memory.ts +1090 -0
  164. package/ccw/src/commands/{serve.js → serve.ts} +14 -5
  165. package/ccw/src/commands/session-path-resolver.ts +372 -0
  166. package/ccw/src/commands/session.ts +1141 -0
  167. package/ccw/src/commands/{stop.js → stop.ts} +16 -6
  168. package/ccw/src/commands/tool.ts +201 -0
  169. package/ccw/src/commands/{uninstall.js → uninstall.ts} +89 -40
  170. package/ccw/src/commands/{upgrade.js → upgrade.ts} +68 -23
  171. package/ccw/src/commands/{view.js → view.ts} +22 -8
  172. package/ccw/src/config/storage-paths.ts +670 -0
  173. package/ccw/src/core/cache-manager.ts +294 -0
  174. package/ccw/src/core/claude-freshness.ts +319 -0
  175. package/ccw/src/core/core-memory-store.ts +1528 -0
  176. package/ccw/src/core/{dashboard-generator-patch.js → dashboard-generator-patch.ts} +18 -0
  177. package/ccw/src/core/{dashboard-generator.js → dashboard-generator.ts} +69 -12
  178. package/ccw/src/core/data-aggregator.ts +584 -0
  179. package/ccw/src/core/history-importer.ts +625 -0
  180. package/ccw/src/core/{lite-scanner.js → lite-scanner-complete.ts} +162 -66
  181. package/ccw/src/core/lite-scanner.ts +469 -0
  182. package/ccw/src/core/{manifest.js → manifest.ts} +104 -34
  183. package/ccw/src/core/memory-embedder-bridge.ts +262 -0
  184. package/ccw/src/core/memory-store.ts +978 -0
  185. package/ccw/src/core/routes/ccw-routes.ts +96 -0
  186. package/ccw/src/core/routes/claude-routes.ts +1183 -0
  187. package/ccw/src/core/routes/cli-routes.ts +561 -0
  188. package/ccw/src/core/routes/codexlens-routes.ts +806 -0
  189. package/ccw/src/core/routes/core-memory-routes.ts +605 -0
  190. package/ccw/src/core/routes/files-routes.ts +428 -0
  191. package/ccw/src/core/routes/graph-routes.md +164 -0
  192. package/ccw/src/core/routes/graph-routes.ts +626 -0
  193. package/ccw/src/core/routes/help-routes.ts +308 -0
  194. package/ccw/src/core/routes/hooks-routes.ts +405 -0
  195. package/ccw/src/core/routes/mcp-routes.ts +1271 -0
  196. package/ccw/src/core/routes/mcp-routes.ts.backup +550 -0
  197. package/ccw/src/core/routes/mcp-templates-db.ts +268 -0
  198. package/ccw/src/core/routes/memory-routes.ts +1206 -0
  199. package/ccw/src/core/routes/rules-routes.ts +526 -0
  200. package/ccw/src/core/routes/session-routes.ts +467 -0
  201. package/ccw/src/core/routes/skills-routes.ts +599 -0
  202. package/ccw/src/core/routes/status-routes.ts +57 -0
  203. package/ccw/src/core/routes/system-routes.ts +427 -0
  204. package/ccw/src/core/server.ts +431 -0
  205. package/ccw/src/core/session-clustering-service.ts +1258 -0
  206. package/ccw/src/core/session-scanner.ts +283 -0
  207. package/ccw/src/core/websocket.ts +190 -0
  208. package/ccw/src/{index.js → index.ts} +1 -0
  209. package/ccw/src/mcp-server/index.ts +186 -0
  210. package/ccw/src/templates/assets/css/github-dark.min.css +10 -0
  211. package/ccw/src/templates/assets/css/github.min.css +10 -0
  212. package/ccw/src/templates/assets/js/cytoscape.min.js +32 -0
  213. package/ccw/src/templates/assets/js/d3.min.js +2 -0
  214. package/ccw/src/templates/assets/js/highlight.min.js +1244 -0
  215. package/ccw/src/templates/assets/js/lucide.min.js +12 -0
  216. package/ccw/src/templates/assets/js/marked.min.js +69 -0
  217. package/ccw/src/templates/assets/js/tailwind.js +83 -0
  218. package/ccw/src/templates/dashboard-css/01-base.css +11 -0
  219. package/ccw/src/templates/dashboard-css/02-session.css +22 -0
  220. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +10 -0
  221. package/ccw/src/templates/dashboard-css/06-cards.css +10 -4
  222. package/ccw/src/templates/dashboard-css/07-managers.css +1178 -7
  223. package/ccw/src/templates/dashboard-css/09-explorer.css +23 -12
  224. package/ccw/src/templates/dashboard-css/10-cli-status.css +337 -0
  225. package/ccw/src/templates/dashboard-css/11-cli-history.css +271 -0
  226. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +796 -0
  227. package/ccw/src/templates/dashboard-css/13-cli-ccw.css +199 -0
  228. package/ccw/src/templates/dashboard-css/14-cli-modals.css +258 -0
  229. package/ccw/src/templates/dashboard-css/15-cli-endpoints.css +305 -0
  230. package/ccw/src/templates/dashboard-css/16-cli-session.css +241 -0
  231. package/ccw/src/templates/dashboard-css/17-cli-conversation.css +283 -0
  232. package/ccw/src/templates/dashboard-css/18-cli-settings.css +160 -0
  233. package/ccw/src/templates/dashboard-css/19-cli-native-session.css +496 -0
  234. package/ccw/src/templates/dashboard-css/20-cli-taskqueue.css +188 -0
  235. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +310 -0
  236. package/ccw/src/templates/dashboard-css/22-cli-semantic.css +240 -0
  237. package/ccw/src/templates/dashboard-css/23-memory.css +2390 -0
  238. package/ccw/src/templates/dashboard-css/24-prompt-history.css +1089 -0
  239. package/ccw/src/templates/dashboard-css/25-skills-rules.css +326 -0
  240. package/ccw/src/templates/dashboard-css/26-claude-manager.css +908 -0
  241. package/ccw/src/templates/dashboard-css/27-graph-explorer.css +1678 -0
  242. package/ccw/src/templates/dashboard-css/28-mcp-manager.css +748 -0
  243. package/ccw/src/templates/dashboard-css/29-help.css +264 -0
  244. package/ccw/src/templates/dashboard-css/30-core-memory.css +1700 -0
  245. package/ccw/src/templates/dashboard-js/api.js +162 -142
  246. package/ccw/src/templates/dashboard-js/components/carousel.js +4 -4
  247. package/ccw/src/templates/dashboard-js/components/cli-history.js +876 -0
  248. package/ccw/src/templates/dashboard-js/components/cli-status.js +978 -0
  249. package/ccw/src/templates/dashboard-js/components/global-notifications.js +508 -219
  250. package/ccw/src/templates/dashboard-js/components/hook-manager.js +1277 -282
  251. package/ccw/src/templates/dashboard-js/components/index-manager.js +302 -0
  252. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +718 -27
  253. package/ccw/src/templates/dashboard-js/components/modals.js +66 -0
  254. package/ccw/src/templates/dashboard-js/components/navigation.js +80 -12
  255. package/ccw/src/templates/dashboard-js/components/notifications.js +758 -194
  256. package/ccw/src/templates/dashboard-js/components/storage-manager.js +478 -0
  257. package/ccw/src/templates/dashboard-js/components/tabs-other.js +157 -6
  258. package/ccw/src/templates/dashboard-js/components/task-queue-sidebar.js +716 -0
  259. package/ccw/src/templates/dashboard-js/help-i18n.js +272 -0
  260. package/ccw/src/templates/dashboard-js/i18n.js +2807 -0
  261. package/ccw/src/templates/dashboard-js/main.js +15 -0
  262. package/ccw/src/templates/dashboard-js/state.js +243 -42
  263. package/ccw/src/templates/dashboard-js/utils.js +47 -1
  264. package/ccw/src/templates/dashboard-js/views/claude-manager.js +912 -0
  265. package/ccw/src/templates/dashboard-js/views/cli-manager.js +2272 -0
  266. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +964 -0
  267. package/ccw/src/templates/dashboard-js/views/core-memory-clusters.js +503 -0
  268. package/ccw/src/templates/dashboard-js/views/core-memory.js +782 -0
  269. package/ccw/src/templates/dashboard-js/views/explorer.js +888 -852
  270. package/ccw/src/templates/dashboard-js/views/graph-explorer.js +1157 -0
  271. package/ccw/src/templates/dashboard-js/views/help.js +856 -0
  272. package/ccw/src/templates/dashboard-js/views/history.js +337 -0
  273. package/ccw/src/templates/dashboard-js/views/home.js +61 -15
  274. package/ccw/src/templates/dashboard-js/views/hook-manager.js +311 -43
  275. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +204 -28
  276. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +2187 -411
  277. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.backup +1729 -0
  278. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.new +928 -0
  279. package/ccw/src/templates/dashboard-js/views/memory.js +1221 -0
  280. package/ccw/src/templates/dashboard-js/views/prompt-history.js +713 -0
  281. package/ccw/src/templates/dashboard-js/views/rules-manager.js +828 -0
  282. package/ccw/src/templates/dashboard-js/views/session-detail.js +54 -53
  283. package/ccw/src/templates/dashboard-js/views/skills-manager.js +819 -0
  284. package/ccw/src/templates/dashboard.html +185 -85
  285. package/ccw/src/templates/hooks-config-example.json +60 -0
  286. package/ccw/src/tools/classify-folders.ts +245 -0
  287. package/ccw/src/tools/cli-config-manager.ts +268 -0
  288. package/ccw/src/tools/cli-executor.ts +2014 -0
  289. package/ccw/src/tools/cli-history-store.ts +1195 -0
  290. package/ccw/src/tools/codex-lens.ts +1141 -0
  291. package/ccw/src/tools/{convert-tokens-to-css.js → convert-tokens-to-css.ts} +73 -23
  292. package/ccw/src/tools/core-memory.ts +444 -0
  293. package/ccw/src/tools/detect-changed-modules.ts +325 -0
  294. package/ccw/src/tools/{discover-design-files.js → discover-design-files.ts} +74 -24
  295. package/ccw/src/tools/edit-file.ts +568 -0
  296. package/ccw/src/tools/{generate-module-docs.js → generate-module-docs.ts} +207 -185
  297. package/ccw/src/tools/{get-modules-by-depth.js → get-modules-by-depth.ts} +120 -79
  298. package/ccw/src/tools/index.ts +370 -0
  299. package/ccw/src/tools/native-session-discovery.ts +795 -0
  300. package/ccw/src/tools/notifier.ts +129 -0
  301. package/ccw/src/tools/read-file.ts +410 -0
  302. package/ccw/src/tools/resume-strategy.ts +345 -0
  303. package/ccw/src/tools/session-content-parser.ts +619 -0
  304. package/ccw/src/tools/session-manager.ts +1026 -0
  305. package/ccw/src/tools/smart-context.ts +228 -0
  306. package/ccw/src/tools/smart-search.ts +2065 -0
  307. package/ccw/src/tools/smart-search.ts.backup +1233 -0
  308. package/ccw/src/tools/storage-manager.ts +455 -0
  309. package/ccw/src/tools/write-file.ts +222 -0
  310. package/ccw/src/types/config.ts +11 -0
  311. package/ccw/src/types/index.ts +3 -0
  312. package/ccw/src/types/session.ts +25 -0
  313. package/ccw/src/types/tool.ts +41 -0
  314. package/ccw/src/utils/{browser-launcher.js → browser-launcher.ts} +10 -8
  315. package/ccw/src/utils/file-utils.ts +48 -0
  316. package/ccw/src/utils/{path-resolver.js → path-resolver.ts} +114 -78
  317. package/ccw/src/utils/path-validator.ts +153 -0
  318. package/ccw/src/utils/{ui.js → ui.ts} +32 -25
  319. package/codex-lens/pyproject.toml +48 -0
  320. package/codex-lens/src/codexlens/.workflow/.cli-history/history.db +0 -0
  321. package/codex-lens/src/codexlens/__init__.py +28 -0
  322. package/codex-lens/src/codexlens/__main__.py +14 -0
  323. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-313.pyc +0 -0
  324. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-313.pyc +0 -0
  325. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  326. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  327. package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
  328. package/codex-lens/src/codexlens/cli/__init__.py +27 -0
  329. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  330. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  331. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  332. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  333. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
  334. package/codex-lens/src/codexlens/cli/commands.py +1931 -0
  335. package/codex-lens/src/codexlens/cli/embedding_manager.py +620 -0
  336. package/codex-lens/src/codexlens/cli/model_manager.py +289 -0
  337. package/codex-lens/src/codexlens/cli/output.py +124 -0
  338. package/codex-lens/src/codexlens/config.py +201 -0
  339. package/codex-lens/src/codexlens/entities.py +121 -0
  340. package/codex-lens/src/codexlens/errors.py +55 -0
  341. package/codex-lens/src/codexlens/indexing/README.md +77 -0
  342. package/codex-lens/src/codexlens/indexing/__init__.py +4 -0
  343. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  344. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  345. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -0
  346. package/codex-lens/src/codexlens/parsers/__init__.py +8 -0
  347. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  348. package/codex-lens/src/codexlens/parsers/__pycache__/encoding.cpython-313.pyc +0 -0
  349. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  350. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-313.pyc +0 -0
  351. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  352. package/codex-lens/src/codexlens/parsers/encoding.py +202 -0
  353. package/codex-lens/src/codexlens/parsers/factory.py +256 -0
  354. package/codex-lens/src/codexlens/parsers/tokenizer.py +98 -0
  355. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -0
  356. package/codex-lens/src/codexlens/search/__init__.py +15 -0
  357. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
  358. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  359. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  360. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  361. package/codex-lens/src/codexlens/search/__pycache__/query_parser.cpython-313.pyc +0 -0
  362. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  363. package/codex-lens/src/codexlens/search/chain_search.py +647 -0
  364. package/codex-lens/src/codexlens/search/enrichment.py +150 -0
  365. package/codex-lens/src/codexlens/search/hybrid_search.py +313 -0
  366. package/codex-lens/src/codexlens/search/query_parser.py +242 -0
  367. package/codex-lens/src/codexlens/search/ranking.py +274 -0
  368. package/codex-lens/src/codexlens/semantic/__init__.py +39 -0
  369. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
  370. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  371. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  372. package/codex-lens/src/codexlens/semantic/__pycache__/code_extractor.cpython-313.pyc +0 -0
  373. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
  374. package/codex-lens/src/codexlens/semantic/__pycache__/graph_analyzer.cpython-313.pyc +0 -0
  375. package/codex-lens/src/codexlens/semantic/__pycache__/llm_enhancer.cpython-313.pyc +0 -0
  376. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  377. package/codex-lens/src/codexlens/semantic/ann_index.py +414 -0
  378. package/codex-lens/src/codexlens/semantic/chunker.py +448 -0
  379. package/codex-lens/src/codexlens/semantic/code_extractor.py +274 -0
  380. package/codex-lens/src/codexlens/semantic/embedder.py +185 -0
  381. package/codex-lens/src/codexlens/semantic/vector_store.py +955 -0
  382. package/codex-lens/src/codexlens/storage/__init__.py +29 -0
  383. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  384. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  385. package/codex-lens/src/codexlens/storage/__pycache__/file_cache.cpython-313.pyc +0 -0
  386. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  387. package/codex-lens/src/codexlens/storage/__pycache__/migration_manager.cpython-313.pyc +0 -0
  388. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-313.pyc +0 -0
  389. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
  390. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  391. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-313.pyc +0 -0
  392. package/codex-lens/src/codexlens/storage/dir_index.py +1850 -0
  393. package/codex-lens/src/codexlens/storage/file_cache.py +32 -0
  394. package/codex-lens/src/codexlens/storage/index_tree.py +776 -0
  395. package/codex-lens/src/codexlens/storage/migration_manager.py +154 -0
  396. package/codex-lens/src/codexlens/storage/migrations/__init__.py +1 -0
  397. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
  398. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_001_normalize_keywords.cpython-313.pyc +0 -0
  399. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_002_add_token_metadata.cpython-313.pyc +0 -0
  400. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_003_code_relationships.cpython-313.pyc +0 -0
  401. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
  402. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_005_cleanup_unused_fields.cpython-313.pyc +0 -0
  403. package/codex-lens/src/codexlens/storage/migrations/migration_001_normalize_keywords.py +123 -0
  404. package/codex-lens/src/codexlens/storage/migrations/migration_002_add_token_metadata.py +48 -0
  405. package/codex-lens/src/codexlens/storage/migrations/migration_004_dual_fts.py +232 -0
  406. package/codex-lens/src/codexlens/storage/migrations/migration_005_cleanup_unused_fields.py +196 -0
  407. package/codex-lens/src/codexlens/storage/path_mapper.py +274 -0
  408. package/codex-lens/src/codexlens/storage/registry.py +670 -0
  409. package/codex-lens/src/codexlens/storage/sqlite_store.py +576 -0
  410. package/codex-lens/src/codexlens/storage/sqlite_utils.py +64 -0
  411. package/package.json +4 -1
  412. package/.claude/commands/memory/tech-research.md +0 -477
  413. package/.claude/scripts/classify-folders.sh +0 -39
  414. package/.claude/scripts/convert_tokens_to_css.sh +0 -229
  415. package/.claude/scripts/detect_changed_modules.sh +0 -161
  416. package/.claude/scripts/discover-design-files.sh +0 -87
  417. package/.claude/scripts/extract-animations.js +0 -243
  418. package/.claude/scripts/extract-computed-styles.js +0 -118
  419. package/.claude/scripts/extract-layout-structure.js +0 -411
  420. package/.claude/scripts/generate_module_docs.sh +0 -717
  421. package/.claude/scripts/get_modules_by_depth.sh +0 -170
  422. package/.claude/scripts/ui-generate-preview.sh +0 -395
  423. package/.claude/scripts/ui-instantiate-prototypes.sh +0 -815
  424. package/.claude/scripts/update_module_claude.sh +0 -337
  425. package/.claude/workflows/context-search-strategy.md +0 -77
  426. package/.claude/workflows/intelligent-tools-strategy.md +0 -662
  427. package/ccw/src/cli.js +0 -119
  428. package/ccw/src/commands/install.js +0 -324
  429. package/ccw/src/commands/tool.js +0 -138
  430. package/ccw/src/core/data-aggregator.js +0 -409
  431. package/ccw/src/core/server.js +0 -2063
  432. package/ccw/src/core/session-scanner.js +0 -235
  433. package/ccw/src/tools/classify-folders.js +0 -204
  434. package/ccw/src/tools/detect-changed-modules.js +0 -288
  435. package/ccw/src/tools/edit-file.js +0 -266
  436. package/ccw/src/tools/index.js +0 -176
  437. package/ccw/src/utils/file-utils.js +0 -48
@@ -2,19 +2,26 @@ import { startServer } from '../core/server.js';
2
2
  import { launchBrowser } from '../utils/browser-launcher.js';
3
3
  import { resolvePath, validatePath } from '../utils/path-resolver.js';
4
4
  import chalk from 'chalk';
5
+ import type { Server } from 'http';
6
+
7
+ interface ServeOptions {
8
+ port?: number;
9
+ path?: string;
10
+ browser?: boolean;
11
+ }
5
12
 
6
13
  /**
7
14
  * Serve command handler - starts dashboard server with live path switching
8
15
  * @param {Object} options - Command options
9
16
  */
10
- export async function serveCommand(options) {
17
+ export async function serveCommand(options: ServeOptions): Promise<void> {
11
18
  const port = options.port || 3456;
12
19
 
13
20
  // Validate project path
14
21
  let initialPath = process.cwd();
15
22
  if (options.path) {
16
23
  const pathValidation = validatePath(options.path, { mustExist: true });
17
- if (!pathValidation.valid) {
24
+ if (!pathValidation.valid || !pathValidation.path) {
18
25
  console.error(chalk.red(`\n Error: ${pathValidation.error}\n`));
19
26
  process.exit(1);
20
27
  }
@@ -40,7 +47,8 @@ export async function serveCommand(options) {
40
47
  await launchBrowser(url);
41
48
  console.log(chalk.green.bold('\n Dashboard opened in browser!'));
42
49
  } catch (err) {
43
- console.log(chalk.yellow(`\n Could not open browser: ${err.message}`));
50
+ const error = err as Error;
51
+ console.log(chalk.yellow(`\n Could not open browser: ${error.message}`));
44
52
  console.log(chalk.gray(` Open manually: ${url}`));
45
53
  }
46
54
  }
@@ -57,8 +65,9 @@ export async function serveCommand(options) {
57
65
  });
58
66
 
59
67
  } catch (error) {
60
- console.error(chalk.red(`\n Error: ${error.message}\n`));
61
- if (error.code === 'EADDRINUSE') {
68
+ const err = error as Error & { code?: string };
69
+ console.error(chalk.red(`\n Error: ${err.message}\n`));
70
+ if (err.code === 'EADDRINUSE') {
62
71
  console.error(chalk.yellow(` Port ${port} is already in use.`));
63
72
  console.error(chalk.gray(` Try a different port: ccw serve --port ${port + 1}\n`));
64
73
  }
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Session Path Resolver - Smart file path to content_type resolution
3
+ * Eliminates need for --type parameter by inferring from filenames and paths
4
+ */
5
+
6
+ import { basename, dirname, join } from 'path';
7
+
8
+ // Supported content types (from session-manager.ts)
9
+ type ContentType =
10
+ | 'session' | 'plan' | 'task' | 'summary' | 'process' | 'chat' | 'brainstorm'
11
+ | 'review-dim' | 'review-iter' | 'review-fix' | 'todo' | 'context'
12
+ | 'lite-plan' | 'lite-fix-plan' | 'exploration' | 'explorations-manifest'
13
+ | 'diagnosis' | 'diagnoses-manifest' | 'clarifications' | 'execution-context' | 'session-metadata';
14
+
15
+ export interface ResolverResult {
16
+ contentType: ContentType;
17
+ pathParams?: Record<string, string>;
18
+ resolvedPath: string; // Relative path within session directory
19
+ }
20
+
21
+ export interface ResolverContext {
22
+ sessionPath: string;
23
+ sessionLocation: 'active' | 'archived' | 'lite-plan' | 'lite-fix';
24
+ }
25
+
26
+ export class PathResolutionError extends Error {
27
+ code: 'NOT_FOUND' | 'INVALID_PATH';
28
+ suggestions: string[];
29
+
30
+ constructor(code: 'NOT_FOUND' | 'INVALID_PATH', message: string, suggestions: string[] = []) {
31
+ super(message);
32
+ this.name = 'PathResolutionError';
33
+ this.code = code;
34
+ this.suggestions = suggestions;
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Task ID patterns (IMPL-*, TEST-*, DOC-*, REFACTOR-*, TASK-*)
40
+ */
41
+ const TASK_ID_PATTERNS = [
42
+ /^(IMPL|TEST|DOC|REFACTOR|TASK)-\d+\.json$/i,
43
+ ];
44
+
45
+ /**
46
+ * Summary filename pattern (*-summary.md)
47
+ */
48
+ const SUMMARY_PATTERN = /^(.+)-summary\.md$/i;
49
+
50
+ /**
51
+ * Path prefix to content_type mapping
52
+ */
53
+ const PATH_PREFIX_TO_CONTENT_TYPE: Record<string, ContentType> = {
54
+ '.task/': 'task',
55
+ '.summaries/': 'summary',
56
+ '.process/': 'process',
57
+ '.chat/': 'chat',
58
+ '.brainstorming/': 'brainstorm',
59
+ '.review/dimensions/': 'review-dim',
60
+ '.review/iterations/': 'review-iter',
61
+ '.review/fixes/': 'review-fix',
62
+ };
63
+
64
+ /**
65
+ * Exact filename to content_type mapping
66
+ */
67
+ const EXACT_FILENAME_TO_CONTENT_TYPE: Record<string, ContentType> = {
68
+ 'IMPL_PLAN.md': 'plan',
69
+ 'TODO_LIST.md': 'todo',
70
+ 'workflow-session.json': 'session',
71
+ 'context-package.json': 'context',
72
+ 'plan.json': 'lite-plan', // Will be overridden by session location
73
+ 'fix-plan.json': 'lite-fix-plan', // Specific to lite-fix sessions
74
+ 'session-metadata.json': 'session-metadata',
75
+ 'clarifications.json': 'clarifications',
76
+ 'execution-context.json': 'execution-context',
77
+ 'explorations-manifest.json': 'explorations-manifest',
78
+ 'diagnoses-manifest.json': 'diagnoses-manifest',
79
+ };
80
+
81
+ /**
82
+ * Extract task ID from filename
83
+ * Examples: IMPL-001.json → IMPL-001
84
+ */
85
+ function extractTaskId(filename: string): string | null {
86
+ const match = filename.match(/^([A-Z]+-\d+)\.json$/i);
87
+ return match ? match[1] : null;
88
+ }
89
+
90
+ /**
91
+ * Extract summary task ID from filename
92
+ * Examples: IMPL-001-summary.md → IMPL-001
93
+ */
94
+ function extractSummaryTaskId(filename: string): string | null {
95
+ const match = filename.match(SUMMARY_PATTERN);
96
+ return match ? match[1] : null;
97
+ }
98
+
99
+ /**
100
+ * Extract review dimension from path
101
+ * Examples: .review/dimensions/security.json → security
102
+ */
103
+ function extractReviewDimension(filepath: string): string | null {
104
+ const match = filepath.match(/\.review\/dimensions\/(.+)\.json$/);
105
+ return match ? match[1] : null;
106
+ }
107
+
108
+ /**
109
+ * Extract review iteration from path
110
+ * Examples: .review/iterations/1.json → 1
111
+ */
112
+ function extractReviewIteration(filepath: string): string | null {
113
+ const match = filepath.match(/\.review\/iterations\/(\d+)\.json$/);
114
+ return match ? match[1] : null;
115
+ }
116
+
117
+ /**
118
+ * Extract filename from relative path within review fixes
119
+ * Examples: .review/fixes/finding-001.json → finding-001.json
120
+ */
121
+ function extractReviewFixFilename(filepath: string): string | null {
122
+ const match = filepath.match(/\.review\/fixes\/(.+)$/);
123
+ return match ? match[1] : null;
124
+ }
125
+
126
+ /**
127
+ * Extract filename from process/chat/brainstorm paths
128
+ * Examples: .process/archiving.json → archiving.json
129
+ */
130
+ function extractProcessFilename(filepath: string, prefix: string): string | null {
131
+ const pattern = new RegExp(`^${prefix.replace(/\//g, '\\/')}(.+)$`);
132
+ const match = filepath.match(pattern);
133
+ return match ? match[1] : null;
134
+ }
135
+
136
+ /**
137
+ * Resolve relative path (contains '/') to content_type
138
+ */
139
+ function resolveRelativePath(filepath: string): ResolverResult | null {
140
+ // Security: Reject path traversal attempts
141
+ if (filepath.includes('..') || filepath.startsWith('/')) {
142
+ throw new PathResolutionError(
143
+ 'INVALID_PATH',
144
+ 'Path traversal and absolute paths are not allowed',
145
+ ['Use relative paths within the session directory']
146
+ );
147
+ }
148
+
149
+ // Check path prefix matches
150
+ for (const [prefix, contentType] of Object.entries(PATH_PREFIX_TO_CONTENT_TYPE)) {
151
+ if (filepath.startsWith(prefix)) {
152
+ const pathParams: Record<string, string> = {};
153
+
154
+ // Extract specific parameters based on content type
155
+ if (contentType === 'task') {
156
+ const taskId = extractTaskId(basename(filepath));
157
+ if (taskId) {
158
+ pathParams.task_id = taskId;
159
+ }
160
+ } else if (contentType === 'summary') {
161
+ const taskId = extractSummaryTaskId(basename(filepath));
162
+ if (taskId) {
163
+ pathParams.task_id = taskId;
164
+ }
165
+ } else if (contentType === 'review-dim') {
166
+ const dimension = extractReviewDimension(filepath);
167
+ if (dimension) {
168
+ pathParams.dimension = dimension;
169
+ }
170
+ } else if (contentType === 'review-iter') {
171
+ const iteration = extractReviewIteration(filepath);
172
+ if (iteration) {
173
+ pathParams.iteration = iteration;
174
+ }
175
+ } else if (contentType === 'review-fix') {
176
+ const filename = extractReviewFixFilename(filepath);
177
+ if (filename) {
178
+ pathParams.filename = filename;
179
+ }
180
+ } else if (contentType === 'process' || contentType === 'chat' || contentType === 'brainstorm') {
181
+ const filename = extractProcessFilename(filepath, prefix);
182
+ if (filename) {
183
+ pathParams.filename = filename;
184
+ }
185
+ }
186
+
187
+ return {
188
+ contentType,
189
+ pathParams: Object.keys(pathParams).length > 0 ? pathParams : undefined,
190
+ resolvedPath: filepath,
191
+ };
192
+ }
193
+ }
194
+
195
+ return null;
196
+ }
197
+
198
+ /**
199
+ * Resolve simple filename (no '/') to content_type
200
+ */
201
+ function resolveFilename(
202
+ filename: string,
203
+ context: ResolverContext
204
+ ): ResolverResult | null {
205
+ // Check exact filename matches first
206
+ if (EXACT_FILENAME_TO_CONTENT_TYPE[filename]) {
207
+ let contentType = EXACT_FILENAME_TO_CONTENT_TYPE[filename];
208
+
209
+ // Override plan.json based on session location
210
+ if (filename === 'plan.json') {
211
+ if (context.sessionLocation === 'lite-plan') {
212
+ contentType = 'lite-plan';
213
+ } else if (context.sessionLocation === 'lite-fix') {
214
+ contentType = 'lite-fix-plan';
215
+ }
216
+ }
217
+
218
+ return {
219
+ contentType,
220
+ resolvedPath: filename,
221
+ };
222
+ }
223
+
224
+ // Check task ID patterns (IMPL-001.json, TEST-042.json, etc.)
225
+ for (const pattern of TASK_ID_PATTERNS) {
226
+ if (pattern.test(filename)) {
227
+ const taskId = extractTaskId(filename);
228
+ if (taskId) {
229
+ return {
230
+ contentType: 'task',
231
+ pathParams: { task_id: taskId },
232
+ resolvedPath: `.task/${filename}`,
233
+ };
234
+ }
235
+ }
236
+ }
237
+
238
+ // Check summary pattern (*-summary.md)
239
+ const summaryTaskId = extractSummaryTaskId(filename);
240
+ if (summaryTaskId) {
241
+ return {
242
+ contentType: 'summary',
243
+ pathParams: { task_id: summaryTaskId },
244
+ resolvedPath: `.summaries/${filename}`,
245
+ };
246
+ }
247
+
248
+ // Check exploration pattern (exploration-{angle}.json)
249
+ const explorationMatch = filename.match(/^exploration-(.+)\.json$/);
250
+ if (explorationMatch) {
251
+ return {
252
+ contentType: 'exploration',
253
+ pathParams: { angle: explorationMatch[1] },
254
+ resolvedPath: filename,
255
+ };
256
+ }
257
+
258
+ // Check diagnosis pattern (diagnosis-{angle}.json)
259
+ const diagnosisMatch = filename.match(/^diagnosis-(.+)\.json$/);
260
+ if (diagnosisMatch) {
261
+ return {
262
+ contentType: 'diagnosis',
263
+ pathParams: { angle: diagnosisMatch[1] },
264
+ resolvedPath: filename,
265
+ };
266
+ }
267
+
268
+ return null;
269
+ }
270
+
271
+ /**
272
+ * Main resolver function - resolves filename/path to content_type
273
+ *
274
+ * @param filename - Filename or relative path
275
+ * @param context - Session context (path and location)
276
+ * @returns Resolver result with content type, path params, and resolved path
277
+ * @throws PathResolutionError if path is invalid or cannot be resolved
278
+ *
279
+ * @example
280
+ * // Filename examples
281
+ * resolveFilePath('IMPL-001.json', context)
282
+ * // → { contentType: 'task', pathParams: {task_id: 'IMPL-001'}, resolvedPath: '.task/IMPL-001.json' }
283
+ *
284
+ * resolveFilePath('IMPL_PLAN.md', context)
285
+ * // → { contentType: 'plan', resolvedPath: 'IMPL_PLAN.md' }
286
+ *
287
+ * // Relative path examples
288
+ * resolveFilePath('.task/IMPL-001.json', context)
289
+ * // → { contentType: 'task', pathParams: {task_id: 'IMPL-001'}, resolvedPath: '.task/IMPL-001.json' }
290
+ *
291
+ * resolveFilePath('.review/dimensions/security.json', context)
292
+ * // → { contentType: 'review-dim', pathParams: {dimension: 'security'}, resolvedPath: '...' }
293
+ */
294
+ export function resolveFilePath(
295
+ filename: string,
296
+ context: ResolverContext
297
+ ): ResolverResult {
298
+ if (!filename) {
299
+ throw new PathResolutionError(
300
+ 'INVALID_PATH',
301
+ 'Filename is required',
302
+ ['Usage: ccw session <session-id> read <filename|path>']
303
+ );
304
+ }
305
+
306
+ // Normalize path separators (handle Windows paths)
307
+ const normalizedFilename = filename.replace(/\\/g, '/');
308
+
309
+ // Security: Validate filename
310
+ if (normalizedFilename.includes('\0') || normalizedFilename.trim() === '') {
311
+ throw new PathResolutionError(
312
+ 'INVALID_PATH',
313
+ 'Invalid filename or path',
314
+ ['Use valid filename or relative path']
315
+ );
316
+ }
317
+
318
+ // RULE 1: Relative path (contains '/')
319
+ if (normalizedFilename.includes('/')) {
320
+ const result = resolveRelativePath(normalizedFilename);
321
+ if (result) {
322
+ return result;
323
+ }
324
+
325
+ throw new PathResolutionError(
326
+ 'NOT_FOUND',
327
+ `Unknown path pattern: ${normalizedFilename}`,
328
+ [
329
+ 'Supported paths:',
330
+ ' .task/*.json (tasks)',
331
+ ' .summaries/*.md (summaries)',
332
+ ' .process/* (process files)',
333
+ ' .chat/* (chat files)',
334
+ ' .brainstorming/* (brainstorm files)',
335
+ ' .review/dimensions/*.json (review dimensions)',
336
+ ' .review/iterations/*.json (review iterations)',
337
+ ' .review/fixes/* (review fixes)',
338
+ ]
339
+ );
340
+ }
341
+
342
+ // RULE 2: Simple filename
343
+ const result = resolveFilename(normalizedFilename, context);
344
+ if (result) {
345
+ return result;
346
+ }
347
+
348
+ // Resolution failed
349
+ throw new PathResolutionError(
350
+ 'NOT_FOUND',
351
+ `Unknown file: ${normalizedFilename}`,
352
+ [
353
+ 'Supported filenames:',
354
+ ' IMPL-*.json, TEST-*.json, DOC-*.json, REFACTOR-*.json, TASK-*.json (tasks)',
355
+ ' IMPL_PLAN.md (plan)',
356
+ ' TODO_LIST.md (todo)',
357
+ ' workflow-session.json (session metadata)',
358
+ ' context-package.json (context)',
359
+ ' session-metadata.json (session metadata for lite sessions)',
360
+ ' plan.json (lite-plan or lite-fix-plan, depending on session location)',
361
+ ' fix-plan.json (lite-fix-plan)',
362
+ ' *-summary.md (summaries)',
363
+ ' exploration-{angle}.json (explorations)',
364
+ ' diagnosis-{angle}.json (diagnoses)',
365
+ ' explorations-manifest.json (exploration manifest)',
366
+ ' diagnoses-manifest.json (diagnosis manifest)',
367
+ ' clarifications.json (clarifications)',
368
+ ' execution-context.json (execution context)',
369
+ 'Or use a relative path: .task/IMPL-001.json',
370
+ ]
371
+ );
372
+ }