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
package/ccw/src/cli.js DELETED
@@ -1,119 +0,0 @@
1
- import { Command } from 'commander';
2
- import { viewCommand } from './commands/view.js';
3
- import { serveCommand } from './commands/serve.js';
4
- import { stopCommand } from './commands/stop.js';
5
- import { installCommand } from './commands/install.js';
6
- import { uninstallCommand } from './commands/uninstall.js';
7
- import { upgradeCommand } from './commands/upgrade.js';
8
- import { listCommand } from './commands/list.js';
9
- import { toolCommand } from './commands/tool.js';
10
- import { readFileSync, existsSync } from 'fs';
11
- import { fileURLToPath } from 'url';
12
- import { dirname, join } from 'path';
13
-
14
- const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = dirname(__filename);
16
-
17
- /**
18
- * Load package.json with error handling
19
- * @returns {Object} - Package info with version
20
- */
21
- function loadPackageInfo() {
22
- const pkgPath = join(__dirname, '../package.json');
23
-
24
- try {
25
- if (!existsSync(pkgPath)) {
26
- console.error('Fatal Error: package.json not found.');
27
- console.error(`Expected location: ${pkgPath}`);
28
- process.exit(1);
29
- }
30
-
31
- const content = readFileSync(pkgPath, 'utf8');
32
- return JSON.parse(content);
33
- } catch (error) {
34
- if (error instanceof SyntaxError) {
35
- console.error('Fatal Error: package.json contains invalid JSON.');
36
- console.error(`Parse error: ${error.message}`);
37
- } else {
38
- console.error('Fatal Error: Could not read package.json.');
39
- console.error(`Error: ${error.message}`);
40
- }
41
- process.exit(1);
42
- }
43
- }
44
-
45
- const pkg = loadPackageInfo();
46
-
47
- export function run(argv) {
48
- const program = new Command();
49
-
50
- program
51
- .name('ccw')
52
- .description('Claude Code Workflow CLI - Dashboard and workflow tools')
53
- .version(pkg.version);
54
-
55
- // View command (server mode with live path switching)
56
- program
57
- .command('view')
58
- .description('Open workflow dashboard server with live path switching')
59
- .option('-p, --path <path>', 'Path to project directory', '.')
60
- .option('--port <port>', 'Server port', '3456')
61
- .option('--no-browser', 'Start server without opening browser')
62
- .action(viewCommand);
63
-
64
- // Serve command (alias for view)
65
- program
66
- .command('serve')
67
- .description('Alias for view command')
68
- .option('-p, --path <path>', 'Initial project directory')
69
- .option('--port <port>', 'Server port', '3456')
70
- .option('--no-browser', 'Start server without opening browser')
71
- .action(serveCommand);
72
-
73
- // Stop command
74
- program
75
- .command('stop')
76
- .description('Stop the running CCW dashboard server')
77
- .option('--port <port>', 'Server port', '3456')
78
- .option('-f, --force', 'Force kill process on the port')
79
- .action(stopCommand);
80
-
81
- // Install command
82
- program
83
- .command('install')
84
- .description('Install Claude Code Workflow to your system')
85
- .option('-m, --mode <mode>', 'Installation mode: Global or Path')
86
- .option('-p, --path <path>', 'Installation path (for Path mode)')
87
- .option('-f, --force', 'Force installation without prompts')
88
- .action(installCommand);
89
-
90
- // Uninstall command
91
- program
92
- .command('uninstall')
93
- .description('Uninstall Claude Code Workflow')
94
- .action(uninstallCommand);
95
-
96
- // Upgrade command
97
- program
98
- .command('upgrade')
99
- .description('Upgrade Claude Code Workflow installations')
100
- .option('-a, --all', 'Upgrade all installations without prompting')
101
- .action(upgradeCommand);
102
-
103
- // List command
104
- program
105
- .command('list')
106
- .description('List all installed Claude Code Workflow instances')
107
- .action(listCommand);
108
-
109
- // Tool command
110
- program
111
- .command('tool [subcommand] [args]')
112
- .description('Execute CCW tools')
113
- .option('--path <path>', 'File path (for edit_file)')
114
- .option('--old <text>', 'Old text to replace (for edit_file)')
115
- .option('--new <text>', 'New text (for edit_file)')
116
- .action((subcommand, args, options) => toolCommand(subcommand, args, options));
117
-
118
- program.parse(argv);
119
- }
@@ -1,324 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, readFileSync, writeFileSync } from 'fs';
2
- import { join, dirname, basename } from 'path';
3
- import { homedir } from 'os';
4
- import { fileURLToPath } from 'url';
5
- import inquirer from 'inquirer';
6
- import chalk from 'chalk';
7
- import { showHeader, createSpinner, info, warning, error, summaryBox, divider } from '../utils/ui.js';
8
- import { createManifest, addFileEntry, addDirectoryEntry, saveManifest, findManifest, getAllManifests } from '../core/manifest.js';
9
- import { validatePath } from '../utils/path-resolver.js';
10
-
11
- const __filename = fileURLToPath(import.meta.url);
12
- const __dirname = dirname(__filename);
13
-
14
- // Source directories to install
15
- const SOURCE_DIRS = ['.claude', '.codex', '.gemini', '.qwen'];
16
-
17
- // Get package root directory (ccw/src/commands -> ccw)
18
- function getPackageRoot() {
19
- return join(__dirname, '..', '..');
20
- }
21
-
22
- // Get source installation directory (parent of ccw)
23
- function getSourceDir() {
24
- return join(getPackageRoot(), '..');
25
- }
26
-
27
- /**
28
- * Install command handler
29
- * @param {Object} options - Command options
30
- */
31
- export async function installCommand(options) {
32
- const version = getVersion();
33
-
34
- // Show beautiful header
35
- showHeader(version);
36
-
37
- // Check for existing installations
38
- const existingManifests = getAllManifests();
39
- if (existingManifests.length > 0 && !options.force) {
40
- info('Existing installations detected:');
41
- console.log('');
42
- existingManifests.forEach((m, i) => {
43
- console.log(chalk.gray(` ${i + 1}. ${m.installation_mode} - ${m.installation_path}`));
44
- console.log(chalk.gray(` Installed: ${new Date(m.installation_date).toLocaleDateString()}`));
45
- });
46
- console.log('');
47
-
48
- const { proceed } = await inquirer.prompt([{
49
- type: 'confirm',
50
- name: 'proceed',
51
- message: 'Continue with new installation?',
52
- default: true
53
- }]);
54
-
55
- if (!proceed) {
56
- info('Installation cancelled');
57
- return;
58
- }
59
- }
60
-
61
- // Local installation from package source
62
- const sourceDir = getSourceDir();
63
-
64
- // Interactive mode selection
65
- const mode = options.mode || await selectMode();
66
-
67
- let installPath;
68
- if (mode === 'Global') {
69
- installPath = homedir();
70
- info(`Global installation to: ${installPath}`);
71
- } else {
72
- const inputPath = options.path || await selectPath();
73
-
74
- // Validate the installation path
75
- const pathValidation = validatePath(inputPath, { mustExist: true });
76
- if (!pathValidation.valid) {
77
- error(`Invalid installation path: ${pathValidation.error}`);
78
- process.exit(1);
79
- }
80
-
81
- installPath = pathValidation.path;
82
- info(`Path installation to: ${installPath}`);
83
- }
84
-
85
- // Validate source directories exist
86
- const availableDirs = SOURCE_DIRS.filter(dir => existsSync(join(sourceDir, dir)));
87
-
88
- if (availableDirs.length === 0) {
89
- error('No source directories found to install.');
90
- error(`Expected directories in: ${sourceDir}`);
91
- process.exit(1);
92
- }
93
-
94
- console.log('');
95
- info(`Found ${availableDirs.length} directories to install: ${availableDirs.join(', ')}`);
96
- divider();
97
-
98
- // Check for existing installation at target path
99
- const existingManifest = findManifest(installPath, mode);
100
- if (existingManifest) {
101
- warning('Existing installation found at this location');
102
- const { backup } = await inquirer.prompt([{
103
- type: 'confirm',
104
- name: 'backup',
105
- message: 'Create backup before reinstalling?',
106
- default: true
107
- }]);
108
-
109
- if (backup) {
110
- await createBackup(installPath, existingManifest);
111
- }
112
- }
113
-
114
- // Create manifest
115
- const manifest = createManifest(mode, installPath);
116
-
117
- // Perform installation
118
- console.log('');
119
- const spinner = createSpinner('Installing files...').start();
120
-
121
- let totalFiles = 0;
122
- let totalDirs = 0;
123
-
124
- try {
125
- for (const dir of availableDirs) {
126
- const srcPath = join(sourceDir, dir);
127
- const destPath = join(installPath, dir);
128
-
129
- spinner.text = `Installing ${dir}...`;
130
-
131
- const { files, directories } = await copyDirectory(srcPath, destPath, manifest);
132
- totalFiles += files;
133
- totalDirs += directories;
134
- }
135
-
136
- // Copy CLAUDE.md to .claude directory
137
- const claudeMdSrc = join(sourceDir, 'CLAUDE.md');
138
- const claudeMdDest = join(installPath, '.claude', 'CLAUDE.md');
139
- if (existsSync(claudeMdSrc) && existsSync(dirname(claudeMdDest))) {
140
- spinner.text = 'Installing CLAUDE.md...';
141
- copyFileSync(claudeMdSrc, claudeMdDest);
142
- addFileEntry(manifest, claudeMdDest);
143
- totalFiles++;
144
- }
145
-
146
- // Create version.json
147
- const versionPath = join(installPath, '.claude', 'version.json');
148
- if (existsSync(dirname(versionPath))) {
149
- const versionData = {
150
- version: version,
151
- installedAt: new Date().toISOString(),
152
- mode: mode,
153
- installer: 'ccw'
154
- };
155
- writeFileSync(versionPath, JSON.stringify(versionData, null, 2), 'utf8');
156
- addFileEntry(manifest, versionPath);
157
- totalFiles++;
158
- }
159
-
160
- spinner.succeed('Installation complete!');
161
-
162
- } catch (err) {
163
- spinner.fail('Installation failed');
164
- error(err.message);
165
- process.exit(1);
166
- }
167
-
168
- // Save manifest
169
- const manifestPath = saveManifest(manifest);
170
-
171
- // Show summary
172
- console.log('');
173
- const summaryLines = [
174
- chalk.green.bold('✓ Installation Successful'),
175
- '',
176
- chalk.white(`Mode: ${chalk.cyan(mode)}`),
177
- chalk.white(`Path: ${chalk.cyan(installPath)}`),
178
- chalk.white(`Version: ${chalk.cyan(version)}`),
179
- '',
180
- chalk.gray(`Files installed: ${totalFiles}`),
181
- chalk.gray(`Directories created: ${totalDirs}`),
182
- '',
183
- chalk.gray(`Manifest: ${basename(manifestPath)}`)
184
- ];
185
-
186
- summaryBox({
187
- title: ' Installation Summary ',
188
- lines: summaryLines,
189
- borderColor: 'green'
190
- });
191
-
192
- // Show next steps
193
- console.log('');
194
- info('Next steps:');
195
- console.log(chalk.gray(' 1. Restart Claude Code or your IDE'));
196
- console.log(chalk.gray(' 2. Run: ccw view - to open the workflow dashboard'));
197
- console.log(chalk.gray(' 3. Run: ccw uninstall - to remove this installation'));
198
- console.log('');
199
- }
200
-
201
- /**
202
- * Interactive mode selection
203
- * @returns {Promise<string>} - Selected mode
204
- */
205
- async function selectMode() {
206
- const { mode } = await inquirer.prompt([{
207
- type: 'list',
208
- name: 'mode',
209
- message: 'Select installation mode:',
210
- choices: [
211
- {
212
- name: `${chalk.cyan('Global')} - Install to home directory (recommended)`,
213
- value: 'Global'
214
- },
215
- {
216
- name: `${chalk.yellow('Path')} - Install to specific project path`,
217
- value: 'Path'
218
- }
219
- ]
220
- }]);
221
-
222
- return mode;
223
- }
224
-
225
- /**
226
- * Interactive path selection
227
- * @returns {Promise<string>} - Selected path
228
- */
229
- async function selectPath() {
230
- const { path } = await inquirer.prompt([{
231
- type: 'input',
232
- name: 'path',
233
- message: 'Enter installation path:',
234
- default: process.cwd(),
235
- validate: (input) => {
236
- if (!input) return 'Path is required';
237
- if (!existsSync(input)) {
238
- return `Path does not exist: ${input}`;
239
- }
240
- return true;
241
- }
242
- }]);
243
-
244
- return path;
245
- }
246
-
247
- /**
248
- * Create backup of existing installation
249
- * @param {string} installPath - Installation path
250
- * @param {Object} manifest - Existing manifest
251
- */
252
- async function createBackup(installPath, manifest) {
253
- const spinner = createSpinner('Creating backup...').start();
254
-
255
- try {
256
- const timestamp = new Date().toISOString().replace(/[-:]/g, '').replace('T', '-').split('.')[0];
257
- const backupDir = join(installPath, `.claude-backup-${timestamp}`);
258
-
259
- mkdirSync(backupDir, { recursive: true });
260
-
261
- // Copy existing .claude directory
262
- const claudeDir = join(installPath, '.claude');
263
- if (existsSync(claudeDir)) {
264
- await copyDirectory(claudeDir, join(backupDir, '.claude'));
265
- }
266
-
267
- spinner.succeed(`Backup created: ${backupDir}`);
268
- } catch (err) {
269
- spinner.warn(`Backup failed: ${err.message}`);
270
- }
271
- }
272
-
273
- /**
274
- * Copy directory recursively
275
- * @param {string} src - Source directory
276
- * @param {string} dest - Destination directory
277
- * @param {Object} manifest - Manifest to track files (optional)
278
- * @returns {Object} - Count of files and directories
279
- */
280
- async function copyDirectory(src, dest, manifest = null) {
281
- let files = 0;
282
- let directories = 0;
283
-
284
- // Create destination directory
285
- if (!existsSync(dest)) {
286
- mkdirSync(dest, { recursive: true });
287
- directories++;
288
- if (manifest) addDirectoryEntry(manifest, dest);
289
- }
290
-
291
- const entries = readdirSync(src);
292
-
293
- for (const entry of entries) {
294
- const srcPath = join(src, entry);
295
- const destPath = join(dest, entry);
296
- const stat = statSync(srcPath);
297
-
298
- if (stat.isDirectory()) {
299
- const result = await copyDirectory(srcPath, destPath, manifest);
300
- files += result.files;
301
- directories += result.directories;
302
- } else {
303
- copyFileSync(srcPath, destPath);
304
- files++;
305
- if (manifest) addFileEntry(manifest, destPath);
306
- }
307
- }
308
-
309
- return { files, directories };
310
- }
311
-
312
- /**
313
- * Get package version
314
- * @returns {string} - Version string
315
- */
316
- function getVersion() {
317
- try {
318
- const pkgPath = join(getPackageRoot(), 'package.json');
319
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
320
- return pkg.version || '1.0.0';
321
- } catch {
322
- return '1.0.0';
323
- }
324
- }
@@ -1,138 +0,0 @@
1
- /**
2
- * Tool Command - Execute and manage CCW tools
3
- */
4
-
5
- import chalk from 'chalk';
6
- import { listTools, executeTool, getTool, getAllToolSchemas } from '../tools/index.js';
7
-
8
- /**
9
- * List all available tools
10
- */
11
- async function listAction() {
12
- const tools = listTools();
13
-
14
- if (tools.length === 0) {
15
- console.log(chalk.yellow('No tools registered'));
16
- return;
17
- }
18
-
19
- console.log(chalk.bold.cyan('\nAvailable Tools:\n'));
20
-
21
- for (const tool of tools) {
22
- console.log(chalk.bold.white(` ${tool.name}`));
23
- console.log(chalk.gray(` ${tool.description}`));
24
-
25
- if (tool.parameters?.properties) {
26
- const props = tool.parameters.properties;
27
- const required = tool.parameters.required || [];
28
-
29
- console.log(chalk.gray(' Parameters:'));
30
- for (const [name, schema] of Object.entries(props)) {
31
- const req = required.includes(name) ? chalk.red('*') : '';
32
- const defaultVal = schema.default !== undefined ? chalk.gray(` (default: ${schema.default})`) : '';
33
- console.log(chalk.gray(` - ${name}${req}: ${schema.description}${defaultVal}`));
34
- }
35
- }
36
- console.log();
37
- }
38
- }
39
-
40
- /**
41
- * Show tool schema in MCP-compatible JSON format
42
- */
43
- async function schemaAction(options) {
44
- const { name } = options;
45
-
46
- if (name) {
47
- const tool = getTool(name);
48
- if (!tool) {
49
- console.error(chalk.red(`Tool not found: ${name}`));
50
- process.exit(1);
51
- }
52
-
53
- const schema = {
54
- name: tool.name,
55
- description: tool.description,
56
- inputSchema: {
57
- type: 'object',
58
- properties: tool.parameters?.properties || {},
59
- required: tool.parameters?.required || []
60
- }
61
- };
62
- console.log(JSON.stringify(schema, null, 2));
63
- } else {
64
- const schemas = getAllToolSchemas();
65
- console.log(JSON.stringify({ tools: schemas }, null, 2));
66
- }
67
- }
68
-
69
- /**
70
- * Execute a tool with given parameters
71
- */
72
- async function execAction(toolName, options) {
73
- if (!toolName) {
74
- console.error(chalk.red('Tool name is required'));
75
- console.error(chalk.gray('Usage: ccw tool exec edit_file --path file.txt --old "old" --new "new"'));
76
- process.exit(1);
77
- }
78
-
79
- const tool = getTool(toolName);
80
- if (!tool) {
81
- console.error(chalk.red(`Tool not found: ${toolName}`));
82
- console.error(chalk.gray('Use "ccw tool list" to see available tools'));
83
- process.exit(1);
84
- }
85
-
86
- // Build params from CLI options
87
- const params = {};
88
-
89
- if (toolName === 'edit_file') {
90
- if (!options.path || !options.old || !options.new) {
91
- console.error(chalk.red('edit_file requires --path, --old, and --new parameters'));
92
- console.error(chalk.gray('Usage: ccw tool exec edit_file --path file.txt --old "old text" --new "new text"'));
93
- process.exit(1);
94
- }
95
- params.path = options.path;
96
- params.oldText = options.old;
97
- params.newText = options.new;
98
- } else {
99
- console.error(chalk.red(`Tool "${toolName}" is not supported via CLI parameters`));
100
- console.error(chalk.gray('Currently only edit_file is supported'));
101
- process.exit(1);
102
- }
103
-
104
- // Execute tool
105
- const result = await executeTool(toolName, params);
106
-
107
- // Always output JSON
108
- console.log(JSON.stringify(result, null, 2));
109
- }
110
-
111
- /**
112
- * Tool command entry point
113
- */
114
- export async function toolCommand(subcommand, args, options) {
115
- // Handle subcommands
116
- switch (subcommand) {
117
- case 'list':
118
- await listAction();
119
- break;
120
- case 'schema':
121
- await schemaAction({ name: args });
122
- break;
123
- case 'exec':
124
- await execAction(args, options);
125
- break;
126
- default:
127
- console.log(chalk.bold.cyan('\nCCW Tool System\n'));
128
- console.log('Subcommands:');
129
- console.log(chalk.gray(' list List all available tools'));
130
- console.log(chalk.gray(' schema [name] Show tool schema (JSON)'));
131
- console.log(chalk.gray(' exec <name> Execute a tool'));
132
- console.log();
133
- console.log('Usage:');
134
- console.log(chalk.gray(' ccw tool list'));
135
- console.log(chalk.gray(' ccw tool schema edit_file'));
136
- console.log(chalk.gray(' ccw tool exec edit_file --path file.txt --old "old text" --new "new text"'));
137
- }
138
- }