claude-memory-layer 1.0.27 → 1.0.29

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 (331) hide show
  1. package/.env.example +7 -0
  2. package/AGENTS.md +11 -0
  3. package/README.md +374 -49
  4. package/benchmarks/replay/anonymized-real-sessions.json +48 -0
  5. package/dist/cli/index.js +10097 -6003
  6. package/dist/cli/index.js.map +4 -4
  7. package/dist/core/index.js +9745 -5587
  8. package/dist/core/index.js.map +4 -4
  9. package/dist/hooks/post-tool-use.js +6545 -5270
  10. package/dist/hooks/post-tool-use.js.map +4 -4
  11. package/dist/hooks/semantic-daemon.js +6646 -5354
  12. package/dist/hooks/semantic-daemon.js.map +4 -4
  13. package/dist/hooks/session-end.js +6618 -5347
  14. package/dist/hooks/session-end.js.map +4 -4
  15. package/dist/hooks/session-start.js +6619 -5354
  16. package/dist/hooks/session-start.js.map +4 -4
  17. package/dist/hooks/stop.js +6614 -5325
  18. package/dist/hooks/stop.js.map +4 -4
  19. package/dist/hooks/user-prompt-submit.js +6702 -5356
  20. package/dist/hooks/user-prompt-submit.js.map +4 -4
  21. package/dist/index.js +13537 -0
  22. package/dist/index.js.map +7 -0
  23. package/dist/mcp/index.js +20770 -0
  24. package/dist/mcp/index.js.map +7 -0
  25. package/dist/server/api/index.js +6632 -5319
  26. package/dist/server/api/index.js.map +4 -4
  27. package/dist/server/index.js +6667 -5340
  28. package/dist/server/index.js.map +4 -4
  29. package/dist/services/memory-service.js +6568 -5350
  30. package/dist/services/memory-service.js.map +4 -4
  31. package/dist/ui/assets/js/bootstrap.js +244 -0
  32. package/dist/ui/assets/js/chat.js +373 -0
  33. package/dist/ui/assets/js/disclosure.js +232 -0
  34. package/dist/ui/assets/js/modals.js +298 -0
  35. package/dist/ui/assets/js/overview.js +655 -0
  36. package/dist/ui/assets/js/state.js +72 -0
  37. package/dist/ui/assets/js/views.js +468 -0
  38. package/dist/ui/index.html +43 -1
  39. package/dist/ui/index.ts +3 -0
  40. package/dist/ui/style.css +222 -0
  41. package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +627 -0
  42. package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +440 -0
  43. package/docs/MEMORY_USEFULNESS_AUDIT.md +371 -0
  44. package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +80 -0
  45. package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +333 -0
  46. package/docs/PRODUCT_VALIDATION_MATRIX.md +82 -0
  47. package/docs/PROJECT_STRUCTURE_ANALYSIS.md +421 -0
  48. package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +501 -0
  49. package/docs/REFACTORING_PLAN_THIN_CORE.md +414 -0
  50. package/docs/REFERENCE_PROJECT_ANALYSES.md +25 -0
  51. package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +452 -0
  52. package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +446 -0
  53. package/docs/architecture/comparison-index.md +47 -0
  54. package/docs/reports/codex-real-data-validation-20260505T040447Z.md +46 -0
  55. package/package.json +12 -5
  56. package/scripts/build.ts +25 -8
  57. package/scripts/generate-session-qrels.ts +126 -0
  58. package/scripts/postinstall-embedding-backend.cjs +142 -0
  59. package/scripts/replay-retrieval-benchmark.ts +69 -0
  60. package/specs/thin-core-refactor/context.md +275 -0
  61. package/specs/thin-core-refactor/plan.md +536 -0
  62. package/specs/thin-core-refactor/spec.md +465 -0
  63. package/src/adapters/claude/capture/index.ts +3 -0
  64. package/src/adapters/claude/context/index.ts +3 -0
  65. package/src/adapters/claude/hooks/index.ts +21 -0
  66. package/src/adapters/claude/hooks/post-tool-use.ts +239 -0
  67. package/src/adapters/claude/hooks/prompt-injection-policy.ts +104 -0
  68. package/src/adapters/claude/hooks/semantic-daemon-client.ts +209 -0
  69. package/src/adapters/claude/hooks/semantic-daemon.ts +283 -0
  70. package/src/adapters/claude/hooks/session-end.ts +59 -0
  71. package/src/adapters/claude/hooks/session-start.ts +73 -0
  72. package/src/adapters/claude/hooks/stop.ts +128 -0
  73. package/src/adapters/claude/hooks/user-prompt-submit.ts +361 -0
  74. package/src/adapters/claude/index.ts +4 -0
  75. package/src/adapters/claude/transcript/index.ts +4 -0
  76. package/src/adapters/claude/transcript/transcript-reader.ts +57 -0
  77. package/src/adapters/claude/transcript/turn-reconstructor.ts +65 -0
  78. package/src/apps/cli/claude-settings-hooks.ts +138 -0
  79. package/src/apps/cli/codex-import-runner.ts +125 -0
  80. package/src/apps/cli/codex-validation-output.ts +95 -0
  81. package/src/apps/cli/hermes-import-runner.ts +130 -0
  82. package/src/apps/cli/hermes-validation-output.ts +91 -0
  83. package/src/apps/cli/index.ts +1731 -0
  84. package/src/apps/cli/mcp-install.ts +106 -0
  85. package/src/apps/cli/retrieval-disclosure-output.ts +196 -0
  86. package/src/apps/dashboard/assets/js/bootstrap.js +244 -0
  87. package/src/apps/dashboard/assets/js/chat.js +373 -0
  88. package/src/apps/dashboard/assets/js/disclosure.js +232 -0
  89. package/src/apps/dashboard/assets/js/modals.js +298 -0
  90. package/src/apps/dashboard/assets/js/overview.js +655 -0
  91. package/src/apps/dashboard/assets/js/state.js +72 -0
  92. package/src/apps/dashboard/assets/js/views.js +468 -0
  93. package/src/{ui → apps/dashboard}/index.html +43 -1
  94. package/src/apps/dashboard/index.ts +3 -0
  95. package/src/{ui → apps/dashboard}/style.css +222 -0
  96. package/src/apps/index.ts +5 -0
  97. package/src/apps/server/api/chat.ts +244 -0
  98. package/src/apps/server/api/citations.ts +105 -0
  99. package/src/apps/server/api/events.ts +137 -0
  100. package/src/apps/server/api/health.ts +53 -0
  101. package/src/apps/server/api/index.ts +26 -0
  102. package/src/apps/server/api/projects.ts +74 -0
  103. package/src/apps/server/api/search.ts +184 -0
  104. package/src/apps/server/api/sessions.ts +115 -0
  105. package/src/apps/server/api/stats.ts +723 -0
  106. package/src/apps/server/api/turns.ts +143 -0
  107. package/src/apps/server/api/utils.ts +65 -0
  108. package/src/apps/server/index.ts +111 -0
  109. package/src/cli/index.ts +2 -1311
  110. package/src/cli/retrieval-disclosure-output.ts +2 -0
  111. package/src/compat/index.ts +5 -0
  112. package/src/core/derive/fact-deriver.ts +170 -0
  113. package/src/core/derive/index.ts +2 -0
  114. package/src/core/derive/summary-deriver.ts +76 -0
  115. package/src/core/embedder.ts +4 -152
  116. package/src/core/engine/embedding-maintenance-service.ts +187 -0
  117. package/src/core/engine/endless-memory-services.ts +4 -0
  118. package/src/core/engine/index.ts +19 -0
  119. package/src/core/engine/memory-engine-services.ts +170 -0
  120. package/src/core/engine/memory-ingest-service.ts +317 -0
  121. package/src/core/engine/memory-query-service.ts +173 -0
  122. package/src/core/engine/memory-runtime-service.ts +162 -0
  123. package/src/core/engine/memory-service-composition.ts +231 -0
  124. package/src/core/engine/retrieval-analytics-service.ts +181 -0
  125. package/src/core/engine/retrieval-disclosure-service.ts +420 -0
  126. package/src/core/engine/retrieval-orchestrator.ts +377 -0
  127. package/src/core/engine/retrieval-services.ts +176 -0
  128. package/src/core/engine/shared-memory-services.ts +4 -0
  129. package/src/core/entity-repo.ts +1 -3
  130. package/src/core/event-store.ts +3 -3
  131. package/src/core/evidence-aligner.ts +2 -2
  132. package/src/core/external-market-context.ts +582 -0
  133. package/src/core/graduation.ts +2 -3
  134. package/src/core/index.ts +21 -0
  135. package/src/core/matcher.ts +2 -4
  136. package/src/core/model/memory-fact.ts +30 -0
  137. package/src/core/model/memory-rule.ts +14 -0
  138. package/src/core/model/memory-summary.ts +21 -0
  139. package/src/core/model/raw-event.ts +28 -0
  140. package/src/core/model/retrieval-result.ts +35 -0
  141. package/src/core/privacy/filter.ts +21 -10
  142. package/src/core/product-validation-matrix.ts +314 -0
  143. package/src/core/progressive-retriever.ts +1 -2
  144. package/src/core/registry/project-path.ts +54 -0
  145. package/src/core/registry/session-registry.ts +69 -0
  146. package/src/core/replay-evaluator.ts +625 -0
  147. package/src/core/retrieval-benchmark.ts +117 -0
  148. package/src/core/retrieval-quality.ts +109 -0
  149. package/src/core/retriever.ts +53 -15
  150. package/src/core/session-qrels.ts +360 -0
  151. package/src/core/shared-event-store.ts +1 -1
  152. package/src/core/sqlite-event-store.ts +35 -11
  153. package/src/core/task/blocker-resolver.ts +2 -2
  154. package/src/core/task/task-resolver.ts +0 -1
  155. package/src/core/vector-outbox.ts +1 -10
  156. package/src/core/vector-worker.ts +1 -1
  157. package/src/extensions/endless-memory/endless-memory-services.ts +350 -0
  158. package/src/extensions/endless-memory/index.ts +1 -0
  159. package/src/extensions/index.ts +5 -0
  160. package/src/extensions/mcp/handlers.ts +960 -0
  161. package/src/extensions/mcp/index.ts +48 -0
  162. package/src/extensions/mcp/tools.ts +252 -0
  163. package/src/extensions/shared-memory/index.ts +1 -0
  164. package/src/extensions/shared-memory/shared-memory-services.ts +211 -0
  165. package/src/extensions/vector/embedder.ts +197 -0
  166. package/src/extensions/vector/index.ts +1 -0
  167. package/src/hooks/post-tool-use.ts +3 -236
  168. package/src/hooks/semantic-daemon-client.ts +1 -208
  169. package/src/hooks/semantic-daemon.ts +6 -271
  170. package/src/hooks/session-end.ts +4 -79
  171. package/src/hooks/session-start.ts +4 -73
  172. package/src/hooks/stop.ts +3 -173
  173. package/src/hooks/user-prompt-submit.ts +3 -338
  174. package/src/index.ts +13 -0
  175. package/src/mcp/handlers.ts +2 -212
  176. package/src/mcp/index.ts +3 -46
  177. package/src/mcp/tools.ts +2 -78
  178. package/src/server/api/chat.ts +2 -244
  179. package/src/server/api/citations.ts +2 -105
  180. package/src/server/api/events.ts +2 -137
  181. package/src/server/api/health.ts +2 -53
  182. package/src/server/api/index.ts +2 -26
  183. package/src/server/api/projects.ts +2 -74
  184. package/src/server/api/search.ts +2 -102
  185. package/src/server/api/sessions.ts +2 -115
  186. package/src/server/api/stats.ts +2 -724
  187. package/src/server/api/turns.ts +2 -143
  188. package/src/server/api/utils.ts +2 -46
  189. package/src/server/index.ts +2 -100
  190. package/src/services/bootstrap-organizer.ts +46 -26
  191. package/src/services/codex-session-history-importer.ts +521 -29
  192. package/src/services/hermes-session-history-importer.ts +733 -0
  193. package/src/services/memory-service-config.ts +36 -0
  194. package/src/services/memory-service-registry.ts +150 -0
  195. package/src/services/memory-service.ts +211 -1325
  196. package/src/services/session-history-importer.ts +58 -14
  197. package/tests/README.md +23 -0
  198. package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +54 -0
  199. package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +98 -0
  200. package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +99 -0
  201. package/tests/apps/app-layer-boundary.test.ts +48 -0
  202. package/tests/apps/claude-settings-hooks.test.ts +107 -0
  203. package/tests/apps/cli-disclosure-output.test.ts +212 -0
  204. package/tests/apps/codex-import-runner.test.ts +99 -0
  205. package/tests/apps/codex-validation-output.test.ts +100 -0
  206. package/tests/apps/hermes-import-runner.test.ts +99 -0
  207. package/tests/apps/mcp-install-command.test.ts +59 -0
  208. package/tests/apps/package-build-entrypoints.test.ts +30 -0
  209. package/tests/apps/postinstall-embedding-backend.test.ts +167 -0
  210. package/tests/apps/search-api-disclosure.test.ts +162 -0
  211. package/tests/apps/stats-api-lightweight.test.ts +67 -0
  212. package/tests/apps/ui-disclosure-output.test.ts +140 -0
  213. package/tests/{bootstrap-organizer.test.ts → core/bootstrap-organizer.test.ts} +1 -1
  214. package/tests/{canonical-key.test.ts → core/canonical-key.test.ts} +1 -1
  215. package/tests/core/codex-session-history-importer-validation.test.ts +185 -0
  216. package/tests/{consolidation-worker.test.ts → core/consolidation-worker.test.ts} +2 -2
  217. package/tests/core/embedding-maintenance-service.test.ts +282 -0
  218. package/tests/{evidence-aligner.test.ts → core/evidence-aligner.test.ts} +1 -1
  219. package/tests/core/external-market-context.test.ts +209 -0
  220. package/tests/core/fact-deriver.test.ts +79 -0
  221. package/tests/core/hermes-session-history-importer-validation.test.ts +609 -0
  222. package/tests/{ingest-interceptor.test.ts → core/ingest-interceptor.test.ts} +1 -1
  223. package/tests/{markdown-mirror.test.ts → core/markdown-mirror.test.ts} +2 -2
  224. package/tests/{matcher.test.ts → core/matcher.test.ts} +1 -1
  225. package/tests/{md-mirror.test.ts → core/md-mirror.test.ts} +2 -2
  226. package/tests/core/memory-engine-services.test.ts +240 -0
  227. package/tests/core/memory-ingest-service.test.ts +296 -0
  228. package/tests/core/memory-query-service.test.ts +129 -0
  229. package/tests/core/memory-runtime-service.test.ts +201 -0
  230. package/tests/core/memory-service-composition.test.ts +192 -0
  231. package/tests/core/memory-service-config.test.ts +41 -0
  232. package/tests/core/memory-service-facade.test.ts +30 -0
  233. package/tests/core/memory-service-registry.test.ts +206 -0
  234. package/tests/core/product-validation-matrix.test.ts +61 -0
  235. package/tests/core/project-registry.test.ts +78 -0
  236. package/tests/core/replay-evaluator.test.ts +181 -0
  237. package/tests/core/retrieval-analytics-service.test.ts +210 -0
  238. package/tests/core/retrieval-benchmark.test.ts +93 -0
  239. package/tests/core/retrieval-disclosure-service.test.ts +264 -0
  240. package/tests/core/retrieval-orchestrator.test.ts +403 -0
  241. package/tests/core/retrieval-quality.test.ts +31 -0
  242. package/tests/core/retrieval-services.test.ts +185 -0
  243. package/tests/{retriever-fallback-chain.test.ts → core/retriever-fallback-chain.test.ts} +3 -3
  244. package/tests/{retriever-strategy-scope.test.ts → core/retriever-strategy-scope.test.ts} +70 -3
  245. package/tests/{retriever.memu-adoption.test.ts → core/retriever.memu-adoption.test.ts} +3 -3
  246. package/tests/core/session-history-importer-filter.test.ts +78 -0
  247. package/tests/core/session-qrels.test.ts +250 -0
  248. package/tests/{sqlite-event-store-replication.test.ts → core/sqlite-event-store-replication.test.ts} +36 -1
  249. package/tests/core/summary-deriver.test.ts +66 -0
  250. package/tests/extensions/embedder-warning-suppression.test.ts +53 -0
  251. package/tests/extensions/endless-memory-extension-boundary.test.ts +17 -0
  252. package/tests/extensions/endless-memory-services.test.ts +325 -0
  253. package/tests/extensions/mcp-context-tools.test.ts +905 -0
  254. package/tests/extensions/mcp-extension-boundary.test.ts +21 -0
  255. package/tests/extensions/mcp-package-build.test.ts +22 -0
  256. package/tests/extensions/mcp-project-aware-tools.test.ts +102 -0
  257. package/tests/extensions/shared-memory-extension-boundary.test.ts +24 -0
  258. package/tests/extensions/shared-memory-services.test.ts +309 -0
  259. package/tests/extensions/vector-extension-boundary.test.ts +21 -0
  260. package/.claude/settings.local.json +0 -25
  261. package/.npm-cache/_cacache/content-v2/sha512/04/76/c098f88dfe584a2b80870bff7421b05d17d3d9ee1027f77772332a22d3f93a9a57101a2855107f6ad82077a818bba912b2bc317f2361b5ddb09ad284d9ce +0 -0
  262. package/.npm-cache/_cacache/content-v2/sha512/60/25/d2ecd39cfc7cab58351162814be77f935c6d6491c10c3745d456da7ddb2117ffd90c10e53fe3c0f1ed16b403307841543634504398b16ee4e6b6dd8e0c45 +0 -0
  263. package/.npm-cache/_cacache/index-v5/2b/9a/7f8f40206ed8a2e0a84efaa953ccaed1f5d001e14b931083f2e7a0738007 +0 -2
  264. package/.npm-cache/_cacache/index-v5/2e/d9/fcfa5c6a6abdc2a3644ab84a95936047298c465a2f47ee03db8f7fe1e946 +0 -3
  265. package/.npm-cache/_cacache/index-v5/a9/42/e519633356d12d3d2f19da66a8301016d496c8f5c3e0554124aaa62dc043 +0 -2
  266. package/.npm-cache/_logs/2026-02-26T12_04_52_729Z-debug-0.log +0 -256
  267. package/.npm-cache/_logs/2026-02-26T12_05_36_835Z-debug-0.log +0 -18
  268. package/.npm-cache/_logs/2026-02-26T12_05_45_982Z-debug-0.log +0 -32
  269. package/.npm-cache/_logs/2026-02-26T12_05_48_515Z-debug-0.log +0 -260
  270. package/.npm-cache/_logs/2026-02-26T12_05_53_567Z-debug-0.log +0 -69
  271. package/.npm-cache/_update-notifier-last-checked +0 -0
  272. package/bootstrap-kb/decisions/decisions.md +0 -244
  273. package/bootstrap-kb/glossary/glossary.md +0 -46
  274. package/bootstrap-kb/modules/.claude-plugin.md +0 -22
  275. package/bootstrap-kb/modules/agents.md.md +0 -15
  276. package/bootstrap-kb/modules/claude.md.md +0 -15
  277. package/bootstrap-kb/modules/context.md.md +0 -15
  278. package/bootstrap-kb/modules/docs.md +0 -18
  279. package/bootstrap-kb/modules/handoff.md.md +0 -15
  280. package/bootstrap-kb/modules/package-lock.json.md +0 -15
  281. package/bootstrap-kb/modules/package.json.md +0 -15
  282. package/bootstrap-kb/modules/plan.md.md +0 -15
  283. package/bootstrap-kb/modules/readme.md.md +0 -15
  284. package/bootstrap-kb/modules/scripts.md +0 -26
  285. package/bootstrap-kb/modules/spec.md.md +0 -15
  286. package/bootstrap-kb/modules/specs.md +0 -20
  287. package/bootstrap-kb/modules/src.md +0 -51
  288. package/bootstrap-kb/modules/tests.md +0 -42
  289. package/bootstrap-kb/modules/tsconfig.json.md +0 -15
  290. package/bootstrap-kb/modules/vitest.config.ts.md +0 -15
  291. package/bootstrap-kb/overview/overview.md +0 -40
  292. package/bootstrap-kb/sources/manifest.json +0 -950
  293. package/bootstrap-kb/sources/manifest.md +0 -227
  294. package/bootstrap-kb/timeline/timeline.md +0 -57
  295. package/claude-memory-layer-1.0.14.tgz +0 -0
  296. package/d.sh +0 -3
  297. package/deploy.sh +0 -3
  298. package/dist/ui/app.js +0 -2101
  299. package/memory/.claude-plugin/commands/2026-02-25.md +0 -263
  300. package/memory/_index.md +0 -419
  301. package/memory/agent_response/uncategorized/2026-02-26.md +0 -176
  302. package/memory/agent_response/uncategorized/2026-03-03.md +0 -14
  303. package/memory/agent_response/uncategorized/2026-03-04.md +0 -1421
  304. package/memory/agent_response/uncategorized/2026-03-05.md +0 -157
  305. package/memory/default/uncategorized/2026-02-25.md +0 -4839
  306. package/memory/session_summary/uncategorized/2026-02-26.md +0 -13
  307. package/memory/session_summary/uncategorized/2026-03-03.md +0 -5
  308. package/memory/session_summary/uncategorized/2026-03-04.md +0 -50
  309. package/memory/specs/20260207-dashboard-upgrade/2026-02-25.md +0 -142
  310. package/memory/specs/citations-system/2026-02-25.md +0 -1121
  311. package/memory/specs/endless-mode/2026-02-25.md +0 -1392
  312. package/memory/specs/entity-edge-model/2026-02-25.md +0 -1263
  313. package/memory/specs/evidence-aligner-v2/2026-02-25.md +0 -1028
  314. package/memory/specs/mcp-desktop-integration/2026-02-25.md +0 -1334
  315. package/memory/specs/post-tool-use-hook/2026-02-25.md +0 -1164
  316. package/memory/specs/private-tags/2026-02-25.md +0 -1057
  317. package/memory/specs/progressive-disclosure/2026-02-25.md +0 -1436
  318. package/memory/specs/task-entity-system/2026-02-25.md +0 -924
  319. package/memory/specs/vector-outbox-v2/2026-02-25.md +0 -1510
  320. package/memory/specs/web-viewer-ui/2026-02-25.md +0 -1709
  321. package/memory/tool_observation/uncategorized/2026-02-26.md +0 -209
  322. package/memory/tool_observation/uncategorized/2026-03-03.md +0 -21
  323. package/memory/tool_observation/uncategorized/2026-03-04.md +0 -1033
  324. package/memory/tool_observation/uncategorized/2026-03-05.md +0 -33
  325. package/memory/user_prompt/uncategorized/2026-02-26.md +0 -25
  326. package/memory/user_prompt/uncategorized/2026-03-04.md +0 -634
  327. package/memory/user_prompt/uncategorized/2026-03-05.md +0 -6
  328. package/specs/optional-duckdb/context.md +0 -77
  329. package/specs/optional-duckdb/plan.md +0 -142
  330. package/specs/optional-duckdb/spec.md +0 -35
  331. package/src/ui/app.js +0 -2101
@@ -1,6 +0,0 @@
1
-
2
- ## 2026-03-04T15:20:51.238Z | 7b3f8806-17ab-4a94-9369-a4bf669c2b12
3
- - type: user_prompt
4
- - session: 2fe5b2e5-83ea-4778-b09b-5264c550ea86
5
- project key : 21a039c4 에 대해서 위 개선 사항 적용해서 테스트 해보고 있는 최신
6
- 데이터 기준으로 잘 활용 되고 있는지 봐줘
@@ -1,77 +0,0 @@
1
- # Context: DuckDB 설치 실패 문제
2
-
3
- ## 에러 요약
4
-
5
- `npm install -g claude-memory-layer` 실행 시 특정 환경에서 설치 실패:
6
-
7
- ```
8
- npm error code 1
9
- npm error path .../node_modules/duckdb
10
- npm error command failed: node-pre-gyp install --fallback-to-build
11
- npm error node-pre-gyp ERR! install response status 404 Not Found
12
- on https://npm.duckdb.org/duckdb/duckdb-v0.10.2-node-v137-darwin-arm64.tar.gz
13
- npm error gyp ERR! build error (C++ template compile errors)
14
- ```
15
-
16
- ## 실패 환경
17
-
18
- - **OS**: macOS Darwin 25.2.0 (arm64)
19
- - **Node.js**: v24.13.1 (ABI v137)
20
- - **duckdb 버전**: 0.10.2 (`^0.10.0`)
21
-
22
- ## 근본 원인
23
-
24
- ### 1. Pre-built binary 없음
25
- `duckdb@0.10.2`는 Node.js v24 (ABI v137)용 pre-built binary를 제공하지 않는다.
26
- Node.js v24는 2024년 후반에 release된 최신 버전이고, duckdb@0.10.x 시리즈는 이를 지원하지 않는다.
27
-
28
- ### 2. Source 컴파일 실패
29
- fallback으로 source 컴파일을 시도하지만, macOS 최신 Clang 컴파일러가
30
- duckdb@0.10.x의 C++ template syntax를 거부:
31
-
32
- ```cpp
33
- // 에러 발생 패턴
34
- STATE::template ReadValue(...) // Clang: "template argument list expected"
35
- OP::template Assign(state, input)
36
- ```
37
-
38
- 이 C++ 코드는 오래된 컴파일러 표준에서는 동작했지만, 최신 Clang (macOS 26 beta 포함)에서 엄격히 거부됨.
39
-
40
- ## DuckDB의 역할
41
-
42
- 코드베이스에서 DuckDB는 **분석 전용** 기능에만 사용:
43
- - `SyncWorker`: SQLite → DuckDB 데이터 동기화 (30초 간격)
44
- - `DuckDBAnalyticsStore`: 대시보드 통계 쿼리 (집계, 시계열)
45
- - 핵심 기능(이벤트 저장, 임베딩, 검색)은 모두 SQLite + LanceDB 사용
46
-
47
- ## 현재 코드 상태
48
-
49
- 이미 일부 graceful degradation 코드가 존재:
50
- ```typescript
51
- // memory-service.ts
52
- if (this.analyticsStore) {
53
- await this.analyticsStore.initialize();
54
- } catch (error) {
55
- console.warn('Analytics store (DuckDB) initialization failed, using SQLite for reads');
56
- // Continue without analytics
57
- }
58
- ```
59
-
60
- 그러나 **설치 단계**에서 실패하므로 runtime graceful degradation이 무의미.
61
-
62
- ## 영향 범위
63
-
64
- - Node.js v20, v22: 정상 설치 (pre-built binary 존재)
65
- - Node.js v24+: 설치 실패 (pre-built binary 없음 + 컴파일 실패)
66
- - 향후 Node.js v25+: 동일 문제 발생 예상
67
-
68
- ## 관련 파일
69
-
70
- | 파일 | 역할 |
71
- |------|------|
72
- | `package.json` | `"duckdb": "^0.10.0"` — required dependency |
73
- | `src/core/db-wrapper.ts` | `import duckdb from 'duckdb'` — top-level import |
74
- | `src/core/sync-worker.ts` | DuckDB SyncWorker 구현 |
75
- | `src/core/edge-repo.ts` | DuckDB analytics queries |
76
- | `src/services/memory-service.ts` | analyticsStore 초기화 및 사용 |
77
- | `src/server/api/utils.ts` | 대시보드 API에서 DuckDB 사용 |
@@ -1,142 +0,0 @@
1
- # Plan: DuckDB 완전 제거
2
-
3
- ## 전략
4
-
5
- `duckdb`를 완전히 제거하고 `better-sqlite3`으로 모든 기능을 통합한다.
6
- `better-sqlite3`은 이미 primary dependency이므로 새 패키지 추가 없음.
7
-
8
- ---
9
-
10
- ## 변경 파일 목록
11
-
12
- | 파일 | 변경 |
13
- |------|------|
14
- | `package.json` | `duckdb` 제거 |
15
- | `src/core/db-wrapper.ts` | DuckDB API → better-sqlite3 API로 교체 |
16
- | `src/core/edge-repo.ts` | `Database` 타입 변경 (duckdb → better-sqlite3) |
17
- | `src/services/memory-service.ts` | analyticsStore / DuckDBAnalyticsStore 관련 코드 제거, SyncWorker 제거 |
18
- | `src/core/sync-worker.ts` | 파일 삭제 (또는 empty stub) |
19
- | `src/core/sqlite-event-store.ts` | edges 테이블 CREATE TABLE 추가 (없으면) |
20
- | `src/server/api/*.ts` | DuckDB analytics 쿼리 → SQLite 직접 쿼리로 교체 |
21
-
22
- ---
23
-
24
- ## Step 1: `src/core/db-wrapper.ts` 교체
25
-
26
- DuckDB callback API를 better-sqlite3 동기 API로 교체.
27
- better-sqlite3은 동기 API이므로 Promise wrapping이 간단해짐.
28
-
29
- ```typescript
30
- // 변경 전: import duckdb from 'duckdb';
31
- // 변경 후:
32
- import Database from 'better-sqlite3';
33
- export type { Database };
34
-
35
- export async function dbRun(db: Database, sql: string, params: unknown[] = []): Promise<void> {
36
- db.prepare(sql).run(...params);
37
- }
38
-
39
- export async function dbAll<T>(db: Database, sql: string, params: unknown[] = []): Promise<T[]> {
40
- return db.prepare(sql).all(...(params as never[])) as T[];
41
- }
42
- ```
43
-
44
- `toDate()`, `convertBigInts()` 등 유틸은 그대로 유지.
45
-
46
- ---
47
-
48
- ## Step 2: Edges 테이블을 SQLite에 추가
49
-
50
- `src/core/sqlite-event-store.ts`의 `initialize()` 에서 edges 테이블 생성:
51
-
52
- ```sql
53
- CREATE TABLE IF NOT EXISTS edges (
54
- edge_id TEXT PRIMARY KEY,
55
- src_type TEXT NOT NULL,
56
- src_id TEXT NOT NULL,
57
- rel_type TEXT NOT NULL,
58
- dst_type TEXT NOT NULL,
59
- dst_id TEXT NOT NULL,
60
- meta_json TEXT DEFAULT '{}',
61
- created_at TEXT NOT NULL
62
- );
63
- CREATE INDEX IF NOT EXISTS idx_edges_src ON edges(src_id, rel_type);
64
- CREATE INDEX IF NOT EXISTS idx_edges_dst ON edges(dst_id, rel_type);
65
- ```
66
-
67
- SQLite는 `WITH CTE`, `JOIN`, `GROUP BY` 등 edge-repo의 모든 쿼리를 지원함.
68
-
69
- ---
70
-
71
- ## Step 3: `src/services/memory-service.ts` 정리
72
-
73
- 제거할 것:
74
- - `DuckDBAnalyticsStore` import 및 인스턴스
75
- - `SyncWorker` import 및 인스턴스
76
- - `analyticsStore` 관련 초기화/종료 코드
77
- - `analyticsEnabled` 옵션 (또는 no-op으로 유지)
78
-
79
- EdgeRepo는 SQLite DB (`this.sqliteStore.db`)를 직접 사용하도록 연결.
80
-
81
- ---
82
-
83
- ## Step 4: `src/core/sync-worker.ts` 제거
84
-
85
- SyncWorker는 SQLite → DuckDB 동기화 전용. DuckDB 제거 시 불필요.
86
- 파일 삭제 또는 empty class로 대체.
87
-
88
- ---
89
-
90
- ## Step 5: 대시보드 Analytics API
91
-
92
- DuckDB analytics store를 사용하는 서버 API들을 확인하고
93
- SQLite 직접 쿼리로 교체하거나 `analyticsEnabled: false` 분기를 기본값으로 변경.
94
-
95
- ---
96
-
97
- ## Step 6: `package.json`에서 `duckdb` 제거
98
-
99
- ```json
100
- // 제거
101
- "duckdb": "^0.10.0"
102
- ```
103
-
104
- ---
105
-
106
- ## 동작 흐름 (After)
107
-
108
- ```
109
- npm install -g claude-memory-layer
110
- → duckdb 없음 → 빠르고 안정적인 설치 ✅
111
-
112
- 메모리 저장/조회
113
- → SQLite (primary, 변경 없음) ✅
114
-
115
- 시맨틱 검색
116
- → LanceDB (변경 없음) ✅
117
-
118
- Edges (task blockers 등)
119
- → SQLite (기존 DuckDB 쿼리 그대로, DB만 변경) ✅
120
-
121
- 대시보드 통계
122
- → SQLite 직접 쿼리 ✅
123
- ```
124
-
125
- ---
126
-
127
- ## 주의사항
128
-
129
- - **기존 DuckDB edges 데이터 손실**: 기존 사용자의 DuckDB edges 데이터는 마이그레이션되지 않음.
130
- edges는 task blocker 등 임시적 관계 데이터이므로 손실 허용 가능.
131
- - **`ON CONFLICT DO NOTHING`**: SQLite와 DuckDB 모두 지원. edge-repo 쿼리 변경 불필요.
132
- - **better-sqlite3 동기 API**: `dbRun`/`dbAll`을 Promise로 wrapping하면 edge-repo 코드 변경 최소화.
133
-
134
- ---
135
-
136
- ## 검증
137
-
138
- 1. `npm run build` 성공
139
- 2. Node.js v24 환경에서 `npm install` 성공
140
- 3. edges CRUD 동작 확인 (`/api/edges` 등)
141
- 4. 대시보드 API 에러 없음
142
- 5. session-start, user-prompt-submit hooks 정상 동작
@@ -1,35 +0,0 @@
1
- # Spec: DuckDB 완전 제거 → SQLite로 통합
2
-
3
- ## 결론
4
-
5
- DuckDB를 **완전히 제거**하고 SQLite로 통합할 수 있다.
6
-
7
- DuckDB가 하는 일:
8
- 1. **Edges 테이블** — 표준 SQL (INSERT/SELECT/WITH CTE/JOIN). SQLite가 동일하게 지원
9
- 2. **Analytics Store** — SQLite 데이터 복사본. 대부분 `analyticsEnabled: false`로 이미 비활성화됨
10
-
11
- `better-sqlite3`은 이미 primary dependency이므로 새 의존성 추가 없음.
12
-
13
- ## 요구사항
14
-
15
- ### 기능 요구사항
16
-
17
- 1. **설치 성공**: Node.js v20, v22, v24+ 모든 버전에서 `npm install -g claude-memory-layer` 성공
18
- 2. **Edges 기능 유지**: `edge-repo.ts`의 모든 쿼리가 SQLite에서 동일하게 동작
19
- 3. **Analytics fallback**: DuckDB analytics store 제거 후 대시보드가 SQLite 직접 쿼리로 동작
20
- 4. **기존 핵심 기능 완전 보존**: 이벤트 저장, 임베딩, 벡터 검색, session/prompt hooks 변경 없음
21
- 5. **SyncWorker 제거**: SQLite → DuckDB sync가 불필요해지므로 삭제
22
-
23
- ### 비기능 요구사항
24
-
25
- - `duckdb` package.json에서 완전 제거
26
- - `npm run build` 및 TypeScript strict 통과
27
- - 기존 SQLite DB 데이터 마이그레이션 불필요 (edges 테이블을 SQLite로 이전 — 기존 DuckDB edges 데이터는 버려도 됨)
28
-
29
- ## 성공 기준
30
-
31
- - [ ] `package.json`에서 `duckdb` 제거됨
32
- - [ ] `npm install -g claude-memory-layer` Node.js v24에서 성공
33
- - [ ] `npm run build` 통과
34
- - [ ] edges CRUD 기능 SQLite에서 동작
35
- - [ ] 대시보드 API 에러 없이 응답