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
@@ -3,17 +3,55 @@
3
3
  * Transform design-tokens.json to CSS custom properties
4
4
  */
5
5
 
6
+ import { z } from 'zod';
7
+ import type { ToolSchema, ToolResult } from '../types/tool.js';
8
+
9
+ // Zod schema
10
+ const ParamsSchema = z.object({
11
+ input: z.union([z.string(), z.record(z.string(), z.any())]),
12
+ });
13
+
14
+ type Params = z.infer<typeof ParamsSchema>;
15
+
16
+ interface DesignTokens {
17
+ meta?: { name?: string };
18
+ colors?: {
19
+ brand?: Record<string, string>;
20
+ surface?: Record<string, string>;
21
+ semantic?: Record<string, string>;
22
+ text?: Record<string, string>;
23
+ border?: Record<string, string>;
24
+ };
25
+ typography?: {
26
+ font_family?: Record<string, string>;
27
+ font_size?: Record<string, string>;
28
+ font_weight?: Record<string, string>;
29
+ line_height?: Record<string, string>;
30
+ letter_spacing?: Record<string, string>;
31
+ };
32
+ spacing?: Record<string, string>;
33
+ border_radius?: Record<string, string>;
34
+ shadows?: Record<string, string>;
35
+ breakpoints?: Record<string, string>;
36
+ }
37
+
38
+ interface ConversionResult {
39
+ style_name: string;
40
+ lines_count: number;
41
+ css: string;
42
+ }
43
+
6
44
  /**
7
45
  * Generate Google Fonts import URL
8
46
  */
9
- function generateFontImport(fonts) {
47
+ function generateFontImport(fonts: Record<string, string>): string {
10
48
  if (!fonts || typeof fonts !== 'object') return '';
11
49
 
12
- const fontParams = [];
13
- const processedFonts = new Set();
50
+ const fontParams: string[] = [];
51
+ const processedFonts = new Set<string>();
14
52
 
15
53
  // Extract font families from typography.font_family
16
- Object.values(fonts).forEach(fontValue => {
54
+ Object.values(fonts).forEach((fontValue) => {
17
55
  if (typeof fontValue !== 'string') return;
18
56
 
19
57
  // Get the primary font (before comma)
@@ -30,11 +68,11 @@ function generateFontImport(fonts) {
30
68
  const encodedFont = primaryFont.replace(/ /g, '+');
31
69
 
32
70
  // Special handling for common fonts
33
- const specialFonts = {
71
+ const specialFonts: Record<string, string> = {
34
72
  'Comic Neue': 'Comic+Neue:wght@300;400;700',
35
73
  'Patrick Hand': 'Patrick+Hand:wght@400;700',
36
- 'Caveat': 'Caveat:wght@400;700',
37
- 'Dancing Script': 'Dancing+Script:wght@400;700'
74
+ Caveat: 'Caveat:wght@400;700',
75
+ 'Dancing Script': 'Dancing+Script:wght@400;700',
38
76
  };
39
77
 
40
78
  if (specialFonts[primaryFont]) {
@@ -52,10 +90,10 @@ function generateFontImport(fonts) {
52
90
  /**
53
91
  * Generate CSS variables for a category
54
92
  */
55
- function generateCssVars(prefix, obj, indent = ' ') {
93
+ function generateCssVars(prefix: string, obj: Record<string, string>, indent = ' '): string[] {
56
94
  if (!obj || typeof obj !== 'object') return [];
57
95
 
58
- const lines = [];
96
+ const lines: string[] = [];
59
97
  Object.entries(obj).forEach(([key, value]) => {
60
98
  const varName = `--${prefix}-${key.replace(/_/g, '-')}`;
61
99
  lines.push(`${indent}${varName}: ${value};`);
@@ -66,7 +104,7 @@ function generateCssVars(prefix, obj, indent = ' ') {
66
104
  /**
67
105
  * Main execute function
68
106
  */
69
- async function execute(params) {
107
+ async function execute(params: Params): Promise<ConversionResult> {
70
108
  const { input } = params;
71
109
 
72
110
  if (!input) {
@@ -74,14 +112,14 @@ async function execute(params) {
74
112
  }
75
113
 
76
114
  // Parse input
77
- let tokens;
115
+ let tokens: DesignTokens;
78
116
  try {
79
117
  tokens = typeof input === 'string' ? JSON.parse(input) : input;
80
118
  } catch (e) {
81
- throw new Error(`Invalid JSON input: ${e.message}`);
119
+ throw new Error(`Invalid JSON input: ${(e as Error).message}`);
82
120
  }
83
121
 
84
- const lines = [];
122
+ const lines: string[] = [];
85
123
 
86
124
  // Header
87
125
  const styleName = tokens.meta?.name || 'Design Tokens';
@@ -222,29 +260,41 @@ async function execute(params) {
222
260
  return {
223
261
  style_name: styleName,
224
262
  lines_count: lines.length,
225
- css
263
+ css,
226
264
  };
227
265
  }
228
266
 
229
- /**
230
- * Tool Definition
231
- */
232
- export const convertTokensToCssTool = {
267
+ // Tool schema for MCP
268
+ export const schema: ToolSchema = {
233
269
  name: 'convert_tokens_to_css',
234
270
  description: `Transform design-tokens.json to CSS custom properties.
235
271
  Generates:
236
272
  - Google Fonts @import URL
237
273
  - CSS custom properties for colors, typography, spacing, etc.
238
274
  - Global font application rules`,
239
- parameters: {
275
+ inputSchema: {
240
276
  type: 'object',
241
277
  properties: {
242
278
  input: {
243
279
  type: 'string',
244
- description: 'Design tokens JSON string or object'
245
- }
280
+ description: 'Design tokens JSON string or object',
281
+ },
246
282
  },
247
- required: ['input']
283
+ required: ['input'],
248
284
  },
249
- execute
250
285
  };
286
+
287
+ // Handler function
288
+ export async function handler(params: Record<string, unknown>): Promise<ToolResult<ConversionResult>> {
289
+ const parsed = ParamsSchema.safeParse(params);
290
+ if (!parsed.success) {
291
+ return { success: false, error: `Invalid params: ${parsed.error.message}` };
292
+ }
293
+
294
+ try {
295
+ const result = await execute(parsed.data);
296
+ return { success: true, result };
297
+ } catch (error) {
298
+ return { success: false, error: (error as Error).message };
299
+ }
300
+ }
@@ -0,0 +1,444 @@
1
+ /**
2
+ * Core Memory Tool - MCP tool for core memory management
3
+ * Operations: list, import, export, summary, embed, search, embed_status
4
+ */
5
+
6
+ import { z } from 'zod';
7
+ import type { ToolSchema, ToolResult } from '../types/tool.js';
8
+ import { getCoreMemoryStore, findMemoryAcrossProjects } from '../core/core-memory-store.js';
9
+ import * as MemoryEmbedder from '../core/memory-embedder-bridge.js';
10
+ import { StoragePaths } from '../config/storage-paths.js';
11
+ import { join } from 'path';
12
+ import { getProjectRoot } from '../utils/path-validator.js';
13
+
14
+ // Zod schemas
15
+ const OperationEnum = z.enum(['list', 'import', 'export', 'summary', 'embed', 'search', 'embed_status']);
16
+
17
+ const ParamsSchema = z.object({
18
+ operation: OperationEnum,
19
+ text: z.string().optional(),
20
+ id: z.string().optional(),
21
+ tool: z.enum(['gemini', 'qwen']).optional().default('gemini'),
22
+ limit: z.number().optional().default(100),
23
+ // Search parameters
24
+ query: z.string().optional(),
25
+ top_k: z.number().optional().default(10),
26
+ min_score: z.number().optional().default(0.3),
27
+ source_type: z.enum(['core_memory', 'workflow', 'cli_history']).optional(),
28
+ // Embed parameters
29
+ source_id: z.string().optional(),
30
+ batch_size: z.number().optional().default(8),
31
+ force: z.boolean().optional().default(false),
32
+ });
33
+
34
+ type Params = z.infer<typeof ParamsSchema>;
35
+
36
+ interface CoreMemory {
37
+ id: string;
38
+ content: string;
39
+ summary: string | null;
40
+ archived: boolean;
41
+ created_at: string;
42
+ updated_at: string;
43
+ }
44
+
45
+ /** Compact memory info for list operation */
46
+ interface CoreMemoryCompact {
47
+ id: string;
48
+ preview: string; // Truncated content/summary preview
49
+ archived: boolean;
50
+ updated_at: string;
51
+ }
52
+
53
+ interface ListResult {
54
+ operation: 'list';
55
+ memories: CoreMemoryCompact[];
56
+ total: number;
57
+ }
58
+
59
+ interface ImportResult {
60
+ operation: 'import';
61
+ id: string;
62
+ message: string;
63
+ }
64
+
65
+ interface ExportResult {
66
+ operation: 'export';
67
+ id: string;
68
+ content: string;
69
+ }
70
+
71
+ interface SummaryResult {
72
+ operation: 'summary';
73
+ id: string;
74
+ summary: string;
75
+ }
76
+
77
+ interface EmbedResult {
78
+ operation: 'embed';
79
+ chunks_processed: number;
80
+ chunks_failed: number;
81
+ elapsed_time: number;
82
+ message: string;
83
+ }
84
+
85
+ interface SearchResult {
86
+ operation: 'search';
87
+ query: string;
88
+ matches: Array<{
89
+ source_id: string;
90
+ source_type: string;
91
+ score: number;
92
+ excerpt: string;
93
+ restore_command: string;
94
+ }>;
95
+ total_matches: number;
96
+ }
97
+
98
+ interface EmbedStatusResult {
99
+ operation: 'embed_status';
100
+ total_chunks: number;
101
+ embedded_chunks: number;
102
+ pending_chunks: number;
103
+ by_type: Record<string, { total: number; embedded: number }>;
104
+ }
105
+
106
+ type OperationResult = ListResult | ImportResult | ExportResult | SummaryResult | EmbedResult | SearchResult | EmbedStatusResult;
107
+
108
+ /**
109
+ * Get project path from current working directory
110
+ */
111
+ function getProjectPath(): string {
112
+ return getProjectRoot();
113
+ }
114
+
115
+ /**
116
+ * Get database path for current project
117
+ */
118
+ function getDatabasePath(): string {
119
+ const projectPath = getProjectPath();
120
+ const paths = StoragePaths.project(projectPath);
121
+ return join(paths.root, 'core-memory', 'core_memory.db');
122
+ }
123
+
124
+ /** Max preview length for list operation */
125
+ const PREVIEW_MAX_LENGTH = 100;
126
+
127
+ /**
128
+ * Operation: list
129
+ * List all memories with compact output
130
+ */
131
+ function executeList(params: Params): ListResult {
132
+ const { limit } = params;
133
+ const store = getCoreMemoryStore(getProjectPath());
134
+ const memories = store.getMemories({ limit }) as CoreMemory[];
135
+
136
+ // Convert to compact format with truncated preview
137
+ const compactMemories: CoreMemoryCompact[] = memories.map((m) => {
138
+ const source = m.summary || m.content;
139
+ const preview = source.length > PREVIEW_MAX_LENGTH
140
+ ? source.substring(0, PREVIEW_MAX_LENGTH) + '...'
141
+ : source;
142
+
143
+ return {
144
+ id: m.id,
145
+ preview,
146
+ archived: m.archived,
147
+ updated_at: m.updated_at,
148
+ };
149
+ });
150
+
151
+ return {
152
+ operation: 'list',
153
+ memories: compactMemories,
154
+ total: memories.length,
155
+ };
156
+ }
157
+
158
+ /**
159
+ * Operation: import
160
+ * Import text as a new memory
161
+ */
162
+ function executeImport(params: Params): ImportResult {
163
+ const { text } = params;
164
+
165
+ if (!text || text.trim() === '') {
166
+ throw new Error('Parameter "text" is required for import operation');
167
+ }
168
+
169
+ const store = getCoreMemoryStore(getProjectPath());
170
+ const memory = store.upsertMemory({
171
+ content: text.trim(),
172
+ });
173
+
174
+ return {
175
+ operation: 'import',
176
+ id: memory.id,
177
+ message: `Created memory: ${memory.id}`,
178
+ };
179
+ }
180
+
181
+ /**
182
+ * Operation: export
183
+ * Export a memory as plain text
184
+ * Searches current project first, then all projects if not found
185
+ */
186
+ function executeExport(params: Params): ExportResult {
187
+ const { id } = params;
188
+
189
+ if (!id) {
190
+ throw new Error('Parameter "id" is required for export operation');
191
+ }
192
+
193
+ // Try current project first
194
+ const store = getCoreMemoryStore(getProjectPath());
195
+ let memory = store.getMemory(id);
196
+
197
+ // If not found, search across all projects
198
+ if (!memory) {
199
+ const result = findMemoryAcrossProjects(id);
200
+ if (result) {
201
+ memory = result.memory;
202
+ }
203
+ }
204
+
205
+ if (!memory) {
206
+ throw new Error(`Memory "${id}" not found in any project`);
207
+ }
208
+
209
+ return {
210
+ operation: 'export',
211
+ id,
212
+ content: memory.content,
213
+ };
214
+ }
215
+
216
+ /**
217
+ * Operation: summary
218
+ * Generate AI summary for a memory
219
+ */
220
+ async function executeSummary(params: Params): Promise<SummaryResult> {
221
+ const { id, tool = 'gemini' } = params;
222
+
223
+ if (!id) {
224
+ throw new Error('Parameter "id" is required for summary operation');
225
+ }
226
+
227
+ const store = getCoreMemoryStore(getProjectPath());
228
+ const memory = store.getMemory(id);
229
+
230
+ if (!memory) {
231
+ throw new Error(`Memory "${id}" not found`);
232
+ }
233
+
234
+ const summary = await store.generateSummary(id, tool);
235
+
236
+ return {
237
+ operation: 'summary',
238
+ id,
239
+ summary,
240
+ };
241
+ }
242
+
243
+ /**
244
+ * Operation: embed
245
+ * Generate embeddings for memory chunks
246
+ */
247
+ async function executeEmbed(params: Params): Promise<EmbedResult> {
248
+ const { source_id, batch_size = 8, force = false } = params;
249
+ const dbPath = getDatabasePath();
250
+
251
+ const result = await MemoryEmbedder.generateEmbeddings(dbPath, {
252
+ sourceId: source_id,
253
+ batchSize: batch_size,
254
+ force,
255
+ });
256
+
257
+ if (!result.success) {
258
+ throw new Error(result.error || 'Embedding generation failed');
259
+ }
260
+
261
+ return {
262
+ operation: 'embed',
263
+ chunks_processed: result.chunks_processed,
264
+ chunks_failed: result.chunks_failed,
265
+ elapsed_time: result.elapsed_time,
266
+ message: `Successfully processed ${result.chunks_processed} chunks in ${result.elapsed_time.toFixed(2)}s`,
267
+ };
268
+ }
269
+
270
+ /**
271
+ * Operation: search
272
+ * Search memory chunks using semantic search
273
+ */
274
+ async function executeSearch(params: Params): Promise<SearchResult> {
275
+ const { query, top_k = 10, min_score = 0.3, source_type } = params;
276
+
277
+ if (!query) {
278
+ throw new Error('Parameter "query" is required for search operation');
279
+ }
280
+
281
+ const dbPath = getDatabasePath();
282
+
283
+ const result = await MemoryEmbedder.searchMemories(dbPath, query, {
284
+ topK: top_k,
285
+ minScore: min_score,
286
+ sourceType: source_type,
287
+ });
288
+
289
+ if (!result.success) {
290
+ throw new Error(result.error || 'Search failed');
291
+ }
292
+
293
+ return {
294
+ operation: 'search',
295
+ query,
296
+ matches: result.matches.map((match) => ({
297
+ source_id: match.source_id,
298
+ source_type: match.source_type,
299
+ score: match.score,
300
+ excerpt: match.content.substring(0, 200) + (match.content.length > 200 ? '...' : ''),
301
+ restore_command: match.restore_command,
302
+ })),
303
+ total_matches: result.matches.length,
304
+ };
305
+ }
306
+
307
+ /**
308
+ * Operation: embed_status
309
+ * Get embedding status statistics
310
+ */
311
+ async function executeEmbedStatus(params: Params): Promise<EmbedStatusResult> {
312
+ const dbPath = getDatabasePath();
313
+
314
+ const result = await MemoryEmbedder.getEmbeddingStatus(dbPath);
315
+
316
+ if (!result.success) {
317
+ throw new Error(result.error || 'Failed to get embedding status');
318
+ }
319
+
320
+ return {
321
+ operation: 'embed_status',
322
+ total_chunks: result.total_chunks,
323
+ embedded_chunks: result.embedded_chunks,
324
+ pending_chunks: result.pending_chunks,
325
+ by_type: result.by_type,
326
+ };
327
+ }
328
+
329
+ /**
330
+ * Route to appropriate operation handler
331
+ */
332
+ async function execute(params: Params): Promise<OperationResult> {
333
+ const { operation } = params;
334
+
335
+ switch (operation) {
336
+ case 'list':
337
+ return executeList(params);
338
+ case 'import':
339
+ return executeImport(params);
340
+ case 'export':
341
+ return executeExport(params);
342
+ case 'summary':
343
+ return executeSummary(params);
344
+ case 'embed':
345
+ return executeEmbed(params);
346
+ case 'search':
347
+ return executeSearch(params);
348
+ case 'embed_status':
349
+ return executeEmbedStatus(params);
350
+ default:
351
+ throw new Error(
352
+ `Unknown operation: ${operation}. Valid operations: list, import, export, summary, embed, search, embed_status`
353
+ );
354
+ }
355
+ }
356
+
357
+ // Tool schema for MCP
358
+ export const schema: ToolSchema = {
359
+ name: 'core_memory',
360
+ description: `Core memory management for strategic context.
361
+
362
+ Usage:
363
+ core_memory(operation="list") # List all memories
364
+ core_memory(operation="import", text="important context") # Import text as new memory
365
+ core_memory(operation="export", id="CMEM-xxx") # Export memory as plain text
366
+ core_memory(operation="summary", id="CMEM-xxx") # Generate AI summary
367
+ core_memory(operation="embed", source_id="CMEM-xxx") # Generate embeddings for memory
368
+ core_memory(operation="search", query="authentication") # Search memories semantically
369
+ core_memory(operation="embed_status") # Check embedding status
370
+
371
+ Memory IDs use format: CMEM-YYYYMMDD-HHMMSS`,
372
+ inputSchema: {
373
+ type: 'object',
374
+ properties: {
375
+ operation: {
376
+ type: 'string',
377
+ enum: ['list', 'import', 'export', 'summary', 'embed', 'search', 'embed_status'],
378
+ description: 'Operation to perform',
379
+ },
380
+ text: {
381
+ type: 'string',
382
+ description: 'Text content to import (required for import operation)',
383
+ },
384
+ id: {
385
+ type: 'string',
386
+ description: 'Memory ID (required for export/summary operations)',
387
+ },
388
+ tool: {
389
+ type: 'string',
390
+ enum: ['gemini', 'qwen'],
391
+ description: 'AI tool for summary generation (default: gemini)',
392
+ },
393
+ limit: {
394
+ type: 'number',
395
+ description: 'Max number of memories to list (default: 100)',
396
+ },
397
+ query: {
398
+ type: 'string',
399
+ description: 'Search query text (required for search operation)',
400
+ },
401
+ top_k: {
402
+ type: 'number',
403
+ description: 'Number of search results to return (default: 10)',
404
+ },
405
+ min_score: {
406
+ type: 'number',
407
+ description: 'Minimum similarity score threshold (default: 0.3)',
408
+ },
409
+ source_type: {
410
+ type: 'string',
411
+ enum: ['core_memory', 'workflow', 'cli_history'],
412
+ description: 'Filter search by source type',
413
+ },
414
+ source_id: {
415
+ type: 'string',
416
+ description: 'Source ID to embed (optional for embed operation)',
417
+ },
418
+ batch_size: {
419
+ type: 'number',
420
+ description: 'Batch size for embedding generation (default: 8)',
421
+ },
422
+ force: {
423
+ type: 'boolean',
424
+ description: 'Force re-embedding even if embeddings exist (default: false)',
425
+ },
426
+ },
427
+ required: ['operation'],
428
+ },
429
+ };
430
+
431
+ // Handler function
432
+ export async function handler(params: Record<string, unknown>): Promise<ToolResult<OperationResult>> {
433
+ const parsed = ParamsSchema.safeParse(params);
434
+ if (!parsed.success) {
435
+ return { success: false, error: `Invalid params: ${parsed.error.message}` };
436
+ }
437
+
438
+ try {
439
+ const result = await execute(parsed.data);
440
+ return { success: true, result };
441
+ } catch (error) {
442
+ return { success: false, error: (error as Error).message };
443
+ }
444
+ }