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
package/.env.example ADDED
@@ -0,0 +1,7 @@
1
+ # External Market Context API keys are read from environment variables only.
2
+ # Copy values into your shell environment or an ignored local .env file if desired.
3
+ # Do not commit real credentials.
4
+
5
+ DART_API_KEY=
6
+ FRED_API_KEY=
7
+ FINNHUB_API_KEY=
package/AGENTS.md CHANGED
@@ -3,6 +3,17 @@
3
3
  이 저장소는 **Claude Code용 메모리 플러그인 + CLI + 로컬 대시보드 서버**입니다.
4
4
  Codex(또는 다른 코딩 에이전트)가 작업할 때 아래 규칙을 우선으로 따르세요.
5
5
 
6
+ ## Project Memory Bootstrap
7
+
8
+ 작업 시작/재개 전에 Claude Memory Layer MCP 도구가 사용 가능하면 먼저 프로젝트 맥락을 가져오세요.
9
+
10
+ - 트리거: `continue`, `next`, `이어서`, `다음 단계`, 버그 수정, PR/merge/검증, 이전 결정/작업 맥락이 중요한 요청
11
+ - 우선 호출: `mem-context-pack` / Hermes 도구명 `mcp_claude_memory_layer_mem_context_pack`
12
+ - 권장 인자: `query=<현재 요청 요약>`, `projectPath=<현재 저장소 루트>`, `topK=5`, `recentLimit=30`, `sessionLimit=5`
13
+ - MCP 도구가 없으면 막히지 말고 기존 AGENTS.md 규칙대로 진행하세요.
14
+ - 결과는 배경 맥락으로만 사용하고, secret/token/credential 또는 transcript DB path 같은 민감한 metadata는 출력하지 마세요.
15
+ - live agent session id를 CML `sessionId`로 넘기지 마세요. source-session 필터가 명시된 경우에만 사용하세요.
16
+
6
17
  ## Quick Commands
7
18
 
8
19
  ```bash
package/README.md CHANGED
@@ -16,37 +16,80 @@ Claude Memory Layer는 Claude Code에서 사용자와 AI 간의 모든 대화를
16
16
 
17
17
  ### 0) 최초 1회(머신 전체) 설치
18
18
 
19
+ 권장 설치 방식은 npm에 배포된 패키지를 **전역 설치**하는 것입니다. `install`은 Claude Code hook 파일 경로를 `~/.claude/settings.json`에 저장하므로, 일회성 `npx claude-memory-layer install`보다 전역 설치 또는 고정된 로컬 checkout을 쓰는 것이 안전합니다.
20
+
19
21
  ```bash
20
- cd ~/workspace/claude-memory-layer
22
+ npm install -g claude-memory-layer@latest
23
+ claude-memory-layer install
24
+ claude-memory-layer status
25
+ ```
26
+
27
+ 로컬 개발 checkout에서 설치할 때:
28
+
29
+ ```bash
30
+ git clone https://github.com/buzzni/claude-memory-layer.git
31
+ cd claude-memory-layer
21
32
  npm install
22
33
  npm run build
23
34
  npx claude-memory-layer install
35
+ npx claude-memory-layer status
24
36
  ```
25
37
 
26
38
  - `install`은 **한 번만** 하면 됩니다(Claude Code hooks 등록).
39
+ - Linux x64 + CUDA 11 환경에서는 설치 중 optional embedding backend를 CPU-only ONNX Runtime으로 자동 복구합니다.
27
40
  - 이후 프로젝트별로 메모리 저장소가 자동 분리됩니다.
41
+ - `install` / `uninstall`은 `~/.claude/settings.json`을 수정합니다.
42
+
43
+ #### CUDA 11 / `onnxruntime-node` 설치 에러
44
+
45
+ Linux x64 서버에 CUDA 11이 설치되어 있으면 `@huggingface/transformers`의 하위 의존성인 `onnxruntime-node`가 `nvcc --version`을 감지한 뒤 CUDA 11용 GPU 바이너리를 자동 설치하려고 합니다. 현재 해당 install script는 CUDA 11 자동 설치를 지원하지 않아 다음 오류로 `npm install`이 실패할 수 있습니다.
46
+
47
+ ```text
48
+ Error: CUDA 11 binaries are not supported by this script yet.
49
+ ```
50
+
51
+ Claude Memory Layer는 설치 시 Linux x64 + CUDA 11 환경을 감지하면 `@huggingface/transformers`를 optional dependency로 처리한 뒤 CPU-only ONNX Runtime 설정으로 자동 복구합니다. 그래서 일반적으로 사용자가 환경변수를 직접 지정할 필요는 없습니다.
52
+
53
+ 만약 구버전 패키지를 설치 중이거나 postinstall 복구가 실패하면 아래처럼 수동으로 CUDA 바이너리 다운로드만 건너뛰어 재설치할 수 있습니다.
54
+
55
+ ```bash
56
+ # 실패한 전역 설치가 일부 남아 있으면 먼저 제거
57
+ npm uninstall -g claude-memory-layer || true
58
+
59
+ # 수동 fallback: CPU-only ONNX Runtime으로 재설치
60
+ ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install -g claude-memory-layer@latest
61
+ claude-memory-layer --version
62
+ ```
63
+
64
+ 로컬 checkout 개발 환경에서 구버전 의존성 설치가 같은 오류를 내면 아래처럼 수동 fallback을 사용할 수 있습니다.
65
+
66
+ ```bash
67
+ ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install
68
+ ```
69
+
70
+ `npm warn deprecated ...` 경고는 하위 의존성 경고이며 설치 실패 원인이 아닙니다.
28
71
 
29
72
  ### 1) 새 프로젝트에서 초기 메모리 생성
30
73
 
31
74
  ```bash
32
75
  cd /path/to/your-project
33
- npx claude-memory-layer import
76
+ claude-memory-layer import
34
77
  ```
35
78
 
36
- - 현재 프로젝트의 기존 Claude 세션(`~/.claude/projects/...`)을 읽어와 메모리로 적재합니다.
79
+ - 현재 프로젝트의 기존 Claude Code 세션(`~/.claude/projects/...`)을 읽어와 메모리로 적재합니다.
37
80
  - 벡터 임베딩까지 한 번에 처리됩니다.
38
81
 
39
82
  ### 2) 사용 중 확인
40
83
 
41
84
  ```bash
42
85
  # 프로젝트 메모리 검색
43
- npx claude-memory-layer search "인증 구조"
86
+ claude-memory-layer search "인증 구조"
44
87
 
45
88
  # 통계 확인
46
- npx claude-memory-layer stats
89
+ claude-memory-layer stats
47
90
 
48
91
  # 대시보드 실행
49
- npx claude-memory-layer dashboard
92
+ claude-memory-layer dashboard --no-open
50
93
  ```
51
94
 
52
95
  ### 3) 다른 프로젝트에도 동일하게 적용?
@@ -55,8 +98,8 @@ npx claude-memory-layer dashboard
55
98
 
56
99
  ```bash
57
100
  cd /path/to/another-project
58
- npx claude-memory-layer import
59
- npx claude-memory-layer search "배포 이슈"
101
+ claude-memory-layer import
102
+ claude-memory-layer search "배포 이슈"
60
103
  ```
61
104
 
62
105
  프로젝트마다 내부적으로 별도 저장소(`~/.claude-code/memory/projects/<hash>`)를 사용하므로,
@@ -66,6 +109,7 @@ npx claude-memory-layer search "배포 이슈"
66
109
 
67
110
  - 특정 프로젝트를 명시하고 싶으면 대부분 명령에 `--project <path>` 사용 가능
68
111
  - 대규모 리임포트가 필요하면 `import --force` 사용
112
+ - 최근 일부만 가져오고 싶으면 `--session-limit <n>` 또는 `--limit <n>` 사용
69
113
  - 백그라운드 worker가 못 처리한 임베딩은 `process`로 수동 처리
70
114
  - 상태 점검:
71
115
  - `GET /health` (서버 헬스)
@@ -79,6 +123,144 @@ npx claude-memory-layer search "배포 이슈"
79
123
 
80
124
  ---
81
125
 
126
+ ## 다른 서버 초기 세팅 & 이전 대화 ingest
127
+
128
+ 새 서버에서 Claude Memory Layer를 설치하고 기존 Claude Code/Codex/Hermes 대화 기록을 처음 적재할 때는 아래 체크리스트를 따르세요.
129
+
130
+ ### 1) 새 서버 준비
131
+
132
+ ```bash
133
+ node --version # Node.js >= 18 필수
134
+ npm --version
135
+ npm install -g claude-memory-layer@latest
136
+ claude-memory-layer install
137
+ claude-memory-layer status
138
+ ```
139
+
140
+ > `claude-memory-layer install`은 Claude Code hooks를 등록합니다. 이미 Claude Code가 실행 중이면 재시작해야 hook이 반영됩니다.
141
+
142
+ ### 2) 이전 서버의 원본 대화 기록 가져오기
143
+
144
+ 가장 안전한 방식은 **원본 대화 기록을 새 서버로 복사한 뒤 새 서버에서 다시 import**하는 것입니다. 필요한 것만 선택해서 복사하세요. 이 디렉토리/DB에는 민감한 대화와 경로가 포함될 수 있으므로 공개 저장소에 커밋하거나 공유하지 말고, SSH/사설망 등 신뢰할 수 있는 경로로만 복사하세요.
145
+
146
+ ```bash
147
+ # Claude Code 원본 세션(JSONL)
148
+ mkdir -p ~/.claude/projects
149
+ rsync -a OLD_HOST:~/.claude/projects/ ~/.claude/projects/
150
+
151
+ # Codex CLI 원본 세션(JSONL) - Codex 기록도 가져올 때만
152
+ mkdir -p ~/.codex/sessions
153
+ rsync -a OLD_HOST:~/.codex/sessions/ ~/.codex/sessions/
154
+
155
+ # Hermes Agent SessionDB - Hermes 기록도 가져올 때만
156
+ # 권장: OLD_HOST에서 Hermes/gateway/agent 프로세스를 먼저 멈춘 뒤 SQLite sidecar까지 함께 복사
157
+ mkdir -p ~/.hermes
158
+ rsync -a OLD_HOST:'~/.hermes/state.db*' ~/.hermes/
159
+ ```
160
+
161
+ Hermes를 멈출 수 없는 운영 서버라면, `state.db` 파일을 직접 복사하는 대신 OLD_HOST에서 SQLite `.backup`으로 일관된 스냅샷을 만든 뒤 가져오세요.
162
+
163
+ ```bash
164
+ ssh OLD_HOST 'sqlite3 ~/.hermes/state.db ".backup /tmp/hermes-state.db.backup"'
165
+ mkdir -p ~/.hermes
166
+ rsync -a OLD_HOST:/tmp/hermes-state.db.backup ~/.hermes/state.db
167
+ ```
168
+
169
+ 이미 처리된 CML 저장소를 그대로 옮기고 싶다면, 이전/새 서버의 관련 agent, dashboard, semantic daemon/worker 등 모든 CML writer를 멈춘 뒤 아래처럼 복사할 수도 있습니다. 단, 재현성과 모델/버전 migration을 위해서는 위의 원본 기록 re-ingest 방식을 우선 권장합니다.
170
+
171
+ ```bash
172
+ mkdir -p ~/.claude-code
173
+ rsync -a OLD_HOST:~/.claude-code/memory/ ~/.claude-code/memory/
174
+ ```
175
+
176
+ ### 3) 프로젝트별로 read-only 검증 후 import
177
+
178
+ 프로젝트 메모리는 프로젝트 경로 기준으로 분리됩니다. 새 서버의 실제 repo 경로를 `PROJECT`에 넣고, 필요한 importer만 실행하세요.
179
+
180
+ 중요: Codex/Hermes/Claude Code 원본 세션의 project filter는 **대화가 생성될 당시의 절대 경로**를 기준으로 매칭합니다. 새 서버에서도 repo 절대 경로가 이전 서버와 같으면 아래 project import를 그대로 쓰면 됩니다.
181
+
182
+ ```bash
183
+ export PROJECT=/path/to/your-project
184
+ cd "$PROJECT"
185
+
186
+ # Claude Code 기록: import 가능한 세션 확인 후 프로젝트 메모리로 적재
187
+ claude-memory-layer list --project "$PROJECT"
188
+ claude-memory-layer import --project "$PROJECT" --verbose
189
+
190
+ # Codex 기록: 먼저 읽기 전용 리포트로 확인한 뒤 명시적으로 import
191
+ claude-memory-layer codex validate --project "$PROJECT" --format markdown
192
+ claude-memory-layer codex import --project "$PROJECT" --verbose
193
+
194
+ # Hermes 기록: 먼저 읽기 전용 리포트로 확인한 뒤 명시적으로 import
195
+ claude-memory-layer hermes validate --project "$PROJECT" --format markdown
196
+ claude-memory-layer hermes import --project "$PROJECT" --verbose
197
+
198
+ # pending embedding이 남아 있으면 수동 처리
199
+ claude-memory-layer process --project "$PROJECT"
200
+ ```
201
+
202
+ 이전 서버와 새 서버의 repo 절대 경로가 다르면, `OLD_PROJECT`로 원본 세션을 찾고 특정 session 파일/id를 새 프로젝트 저장소(`NEW_PROJECT`)로 가져오세요.
203
+
204
+ ```bash
205
+ export OLD_PROJECT=/old/server/path/to/your-project
206
+ export NEW_PROJECT=/path/to/your-project
207
+ cd "$NEW_PROJECT"
208
+
209
+ # Claude Code: list 출력의 JSONL session file path를 확인해서 사용
210
+ claude-memory-layer list --project "$OLD_PROJECT"
211
+ claude-memory-layer import --project "$NEW_PROJECT" --session /path/to/claude-session.jsonl --verbose
212
+
213
+ # Codex: validate 결과에서 session JSONL 파일을 확인한 뒤 import
214
+ claude-memory-layer codex validate --project "$OLD_PROJECT" --format markdown
215
+ claude-memory-layer codex import --project "$NEW_PROJECT" --session /path/to/codex-session.jsonl --verbose
216
+
217
+ # Hermes: validate 결과에서 Hermes session id를 확인한 뒤 import
218
+ claude-memory-layer hermes validate --project "$OLD_PROJECT" --format markdown
219
+ claude-memory-layer hermes import --project "$NEW_PROJECT" --session 20260505_010203_abcd1234 --verbose
220
+
221
+ claude-memory-layer process --project "$NEW_PROJECT"
222
+ ```
223
+
224
+ 주의:
225
+
226
+ - `claude-memory-layer import --all`은 모든 Claude Code 세션을 전역 저장소로 가져옵니다. 프로젝트별 컨텍스트 품질이 중요하면 각 repo에서 `--project <path>` 방식으로 반복하는 것을 권장합니다.
227
+ - `codex import --all`, `hermes import --all`도 의도적으로 전역 메모리를 만들 때만 사용하세요.
228
+ - import/validate/list 결과에는 대화 내용 일부나 로컬 경로가 포함될 수 있습니다. 외부 공유 전에는 민감정보와 경로를 제거하고, Codex validate 리포트는 필요하면 `--anonymize-projects`를 함께 사용하세요.
229
+ - import는 콘텐츠 해시 기반으로 중복을 건너뛰므로 여러 번 실행해도 같은 내용이 중복 저장되지 않습니다. 단, `--force`는 기존 import 이벤트를 지우고 재적재하므로 신중히 사용하세요.
230
+
231
+ ### 4) 검증
232
+
233
+ ```bash
234
+ export VERIFY_PROJECT=/path/to/your-project # 위에서 쓴 PROJECT 또는 NEW_PROJECT
235
+ claude-memory-layer stats --project "$VERIFY_PROJECT"
236
+ claude-memory-layer search "최근에 하던 작업" --project "$VERIFY_PROJECT" --top-k 5
237
+ claude-memory-layer dashboard --no-open --port 37777
238
+ # 다른 터미널에서: curl http://localhost:37777/api/health
239
+ ```
240
+
241
+ ### 5) MCP/다른 agent에 연결
242
+
243
+ Claude Desktop은 CLI로 자동 등록할 수 있습니다. GUI 앱에서 shell `PATH`가 다를 수 있으면 stdio binary의 절대 경로를 command로 넣는 방식이 더 견고합니다.
244
+
245
+ ```bash
246
+ claude-memory-layer mcp install --command "$(command -v claude-memory-layer-mcp)"
247
+ # Claude Desktop 재시작
248
+ ```
249
+
250
+ Codex/Hermes 등 MCP client에도 전역 설치된 stdio binary를 등록하면 됩니다.
251
+
252
+ ```bash
253
+ # Codex 예시
254
+ codex mcp add claude-memory-layer -- claude-memory-layer-mcp
255
+
256
+ # Hermes 예시
257
+ hermes mcp add claude-memory-layer --command claude-memory-layer-mcp
258
+ ```
259
+
260
+ MCP client가 환경에 따라 PATH를 못 찾으면 `command -v claude-memory-layer-mcp`로 절대 경로를 확인해서 command에 넣으세요.
261
+
262
+ ---
263
+
82
264
  ## Features
83
265
 
84
266
  ### Core Features
@@ -93,10 +275,10 @@ npx claude-memory-layer search "배포 이슈"
93
275
  ### Advanced Features
94
276
 
95
277
  - **Citations System**: 메모리 출처 추적 (`[mem:abc123]` 형식)으로 검색 결과의 원본 확인 가능
96
- - **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반
278
+ - **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반 *(experimental extension)*
97
279
  - **Entity-Edge Model**: entries/entities/edges 3-layer 모델로 데이터 관계 명시적 모델링
98
280
  - **Evidence Aligner V2**: Quote 기반 3단계 정렬 (exact → normalized → fuzzy)
99
- - **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유
281
+ - **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유 *(stdio server bin: `claude-memory-layer-mcp`)*
100
282
  - **PostToolUse Hook**: 도구 실행 결과 (Read, Write, Bash 등) 캡처 및 저장
101
283
  - **Private Tags**: `<private>` 태그로 민감 정보를 명시적으로 제외
102
284
  - **Progressive Disclosure**: 3-Layer 검색 (인덱스 → 타임라인 → 상세)으로 토큰 효율화
@@ -104,9 +286,21 @@ npx claude-memory-layer search "배포 이슈"
104
286
  - **Append-only Markdown Mirror**: 저장 이벤트를 `memory/<namespace>/<category...>/YYYY-MM-DD.md`에도 동기 append (기본값: `namespace=default`, `category=uncategorized`, 경로 세그먼트 sanitize)
105
287
  - `memory/_index.md` 인덱스를 자동 갱신
106
288
  - **Task Entity System**: Task를 Entity로 승격하여 세션 간 상태 추적
107
- - **Vector Outbox V2**: Transactional Outbox 패턴으로 DuckDB-LanceDB 정합성 보장
289
+ - **Vector Outbox V2**: Transactional Outbox 패턴으로 SQLite-LanceDB 정합성 보장
108
290
  - **Web Viewer UI**: localhost:37777 대시보드로 실시간 메모리 모니터링
109
291
 
292
+ ### 현재 feature status
293
+
294
+ | 영역 | 상태 | 비고 |
295
+ |------|------|------|
296
+ | Claude Code hooks / CLI / Dashboard | Stable | `install`, `search`, `import`, `stats`, `dashboard` 중심 |
297
+ | SQLite event store / project registry | Stable | canonical source of truth |
298
+ | LanceDB vector index / Embedder | Stable accelerator | `src/extensions/vector/embedder.ts`; VectorStore/VectorWorker는 아직 core compatibility path 유지 |
299
+ | Progressive disclosure search/API/CLI/dashboard | Implemented | `search --disclosure`, `expand`, `source` mental model |
300
+ | Shared memory / Endless mode | Experimental extension | 구현은 `src/extensions/shared-memory`, `src/extensions/endless-memory` 아래에 있고 기존 path는 shim 유지 |
301
+ | MCP Desktop integration | Implemented | 구현은 `src/extensions/mcp`; package bin은 `claude-memory-layer-mcp`; `claude-memory-layer mcp install`로 Claude Desktop config 자동 등록 |
302
+ | Mongo sync / Entity graph / Task entity | Experimental | 고급/운영 옵션으로 취급 |
303
+
110
304
  ## 설치 방법
111
305
 
112
306
  ### 1. 의존성 설치
@@ -124,13 +318,14 @@ npm run build
124
318
 
125
319
  ### 3. Claude Code에 플러그인 등록
126
320
 
127
- 빌드된 플러그인을 Claude Code 설정에 추가합니다:
321
+ Claude Code hook 설정은 CLI가 등록합니다:
128
322
 
129
323
  ```bash
130
- # Claude Code 설정 디렉토리에 플러그인 복사
131
- cp -r dist/.claude-plugin ~/.claude/plugins/claude-memory-layer/
324
+ npx claude-memory-layer install
132
325
  ```
133
326
 
327
+ > 주의: `install` / `uninstall`은 `~/.claude/settings.json`을 수정합니다. 자동 테스트나 임의 실행 대신, 실제 사용자가 설치/해제를 원할 때만 실행하세요.
328
+
134
329
  ## 사용 방법
135
330
 
136
331
  ### 자동 동작 (Hooks)
@@ -334,7 +529,7 @@ SECRET_TOKEN=abc123
334
529
  🔍 Search Results:
335
530
 
336
531
  #1 [mem:a7Bc3x] (score: 0.94)
337
- "DuckDB를 사용하여 이벤트 소싱 패턴을..."
532
+ "SQLite/WAL을 사용하여 이벤트 소싱 패턴을..."
338
533
  📅 2026-01-30 | 🔗 Session abc123
339
534
  ```
340
535
 
@@ -349,10 +544,10 @@ claude-memory-layer show mem:a7Bc3x
349
544
 
350
545
  ```bash
351
546
  # Endless Mode 활성화
352
- claude-memory-layer config set mode endless
547
+ claude-memory-layer endless enable
353
548
 
354
549
  # 상태 확인
355
- claude-memory-layer status
550
+ claude-memory-layer endless status
356
551
 
357
552
  # 출력 예시:
358
553
  # Mode: Endless
@@ -371,31 +566,75 @@ claude-memory-layer status
371
566
 
372
567
  ## MCP Desktop Integration
373
568
 
374
- Claude Desktop에서 메모리 검색을 사용하려면:
569
+ > 현재 상태: MCP server implementation은 `src/extensions/mcp/`로 이동되어 있고,
570
+ > `src/mcp/*`는 compatibility shim입니다. package bin으로
571
+ > `claude-memory-layer-mcp`가 제공됩니다.
572
+
573
+ Claude Desktop 설정은 CLI로 자동 등록할 수 있습니다:
375
574
 
376
575
  ```bash
377
- # MCP 서버 설치
378
576
  claude-memory-layer mcp install
577
+ # Config: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
578
+ ```
579
+
580
+ 이 명령은 Claude Desktop config의 기존 값을 보존하면서 다음 MCP server entry를 추가/갱신합니다:
379
581
 
380
- # 또는 수동 설정: ~/Library/Application Support/Claude/claude_desktop_config.json
582
+ ```json
381
583
  {
382
584
  "mcpServers": {
383
585
  "claude-memory-layer": {
384
- "command": "npx",
385
- "args": ["claude-memory-layer-mcp"]
586
+ "command": "claude-memory-layer-mcp",
587
+ "args": []
386
588
  }
387
589
  }
388
590
  }
389
591
  ```
390
592
 
593
+ 옵션:
594
+
595
+ ```bash
596
+ claude-memory-layer mcp install --dry-run
597
+ claude-memory-layer mcp install --config-path /path/to/claude_desktop_config.json
598
+ claude-memory-layer mcp install --server-name claude-memory-layer --command claude-memory-layer-mcp
599
+ ```
600
+
601
+ 설정 후 Claude Desktop을 재시작하면 MCP 서버가 로드됩니다. Codex/Hermes처럼 MCP client가 있는 다른 agent에는 로컬 checkout의 built server를 직접 등록할 수 있습니다:
602
+
603
+ ```bash
604
+ # Codex
605
+ codex mcp add claude-memory-layer -- node /path/to/claude-memory-layer/dist/mcp/index.js
606
+
607
+ # Hermes
608
+ hermes mcp add claude-memory-layer --command node --args /path/to/claude-memory-layer/dist/mcp/index.js
609
+ ```
610
+
611
+ 로컬 checkout에서 서버만 바로 테스트하려면 `npm run build` 후 다음처럼 직접 실행할 수도 있습니다:
612
+
613
+ ```bash
614
+ node dist/mcp/index.js
615
+ ```
616
+
391
617
  ### 제공되는 MCP 도구
392
618
 
393
619
  | 도구 | 설명 |
394
620
  |------|------|
395
- | `mem-search` | 메모리 검색 |
396
- | `mem-timeline` | 타임라인 조회 |
397
- | `mem-details` | 상세 정보 조회 |
398
- | `mem-stats` | 통계 조회 |
621
+ | `mem-search` | 메모리 검색 (`projectPath`를 주면 프로젝트별 저장소 검색) |
622
+ | `mem-timeline` | 특정 memory IDs 주변 chronological context 조회 (`projectPath` 지원) |
623
+ | `mem-details` | 상세 정보 조회 (`projectPath` 지원) |
624
+ | `mem-stats` | 통계 조회 (`projectPath` 지원) |
625
+ | `mem-context-pack` | 작업 시작용 compact context pack. query 관련 memory + 최근 project timeline + follow-up refs를 한 번에 반환 |
626
+ | `mem-project-timeline` | 최근 project memory를 session/source/event-count/safe-preview 기준으로 요약 |
627
+ | `mem-source-ref` | `mem:<citation>` 또는 `event:<id>`를 privacy-safe source reference와 redacted preview로 해석 |
628
+
629
+ 예시 workflow:
630
+
631
+ ```text
632
+ 1. 새 작업 시작: mem-context-pack(projectPath, query)
633
+ 2. 최근 흐름 확인: mem-project-timeline(projectPath)
634
+ 3. 근거가 더 필요할 때: mem-source-ref(projectPath, ids=["mem:abc123"])
635
+ ```
636
+
637
+ 이 workflow는 Hermes/Codex/Claude Code가 같은 project-scoped memory backend를 공유할 때 특히 유용합니다. `mem-source-ref`는 raw transcript를 그대로 덤프하지 않고 allowlisted metadata와 privacy-filtered preview만 반환합니다.
399
638
 
400
639
  ## Web Viewer
401
640
 
@@ -451,6 +690,50 @@ Skipped duplicates: 0
451
690
  Embeddings processed: 342
452
691
  ```
453
692
 
693
+ ### Codex 세션 임포트
694
+
695
+ Codex CLI 기록(`~/.codex/sessions`)은 기본적으로 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 메모리에 저장합니다:
696
+
697
+ ```bash
698
+ # 읽기 전용 검증/리포트
699
+ npx claude-memory-layer codex validate --project /path/to/project --format markdown
700
+
701
+ # 현재 프로젝트 Codex 세션을 프로젝트별 메모리로 import
702
+ cd /path/to/project
703
+ npx claude-memory-layer codex import
704
+
705
+ # 특정 세션만 import
706
+ npx claude-memory-layer codex import --project /path/to/project --session /path/to/session.jsonl
707
+
708
+ # 모든 Codex 세션 import (전역 저장소 사용; 필요할 때만)
709
+ npx claude-memory-layer codex import --all --verbose
710
+ ```
711
+
712
+ 옵션: `--sessions-dir`, `--limit`, `--force`, `--no-process-embeddings`.
713
+
714
+ ### Hermes 세션 임포트
715
+
716
+ Hermes Agent 기록(`~/.hermes/state.db`)도 원본 DB를 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 프로젝트별 메모리에 저장합니다. 기본 전략은 live sync가 아니라 **SessionDB → CML explicit derived import**입니다:
717
+
718
+ ```bash
719
+ # 읽기 전용 검증/리포트
720
+ npx claude-memory-layer hermes validate --project /path/to/project --format markdown
721
+
722
+ # 현재 프로젝트 Hermes 세션을 프로젝트별 메모리로 import
723
+ cd /path/to/project
724
+ npx claude-memory-layer hermes import
725
+
726
+ # 특정 Hermes session id만 import
727
+ npx claude-memory-layer hermes import --project /path/to/project --session 20260505_010203_abcd1234
728
+
729
+ # 모든 Hermes 세션 import (전역 저장소 사용; 필요할 때만)
730
+ npx claude-memory-layer hermes import --all --verbose
731
+ ```
732
+
733
+ 옵션: `--state-db`, `--limit`, `--force`, `--no-process-embeddings`.
734
+
735
+ Hermes import는 user/assistant turn만 저장하고 tool/system 메시지는 건너뜁니다. 검증 리포트에는 aggregate count만 포함되며 transcript 본문은 포함하지 않습니다.
736
+
454
737
  ### 중복 처리
455
738
 
456
739
  임포트는 콘텐츠 해시 기반으로 중복을 자동 감지합니다. 여러 번 실행해도 같은 내용이 중복 저장되지 않습니다.
@@ -462,7 +745,7 @@ Embeddings processed: 342
462
745
  ```
463
746
  사용자 프롬프트 입력
464
747
 
465
- EventStore에 저장 (DuckDB, append-only)
748
+ EventStore에 저장 (SQLite/WAL, append-only)
466
749
 
467
750
  Outbox에 임베딩 요청 등록
468
751
 
@@ -530,7 +813,7 @@ Embeddings processed: 342
530
813
  ▼ ▼
531
814
  ┌───────────────┐ ┌───────────────┐
532
815
  │ EventStore │ ──── Outbox ────▶ │ VectorStore │
533
- (DuckDB) │ (V2 Pattern) │ (LanceDB) │
816
+ (SQLite/WAL) │ (V2 Pattern) │ (LanceDB) │
534
817
  └───────────────┘ └───────────────┘
535
818
  ```
536
819
 
@@ -583,12 +866,12 @@ Layer 1: Search Index (~50-100 tokens/result)
583
866
 
584
867
  ## AXIOMMIND 7 원칙
585
868
 
586
- 1. **Single Source of Truth**: DuckDB EventStore가 유일한 진실의 원천
869
+ 1. **Single Source of Truth**: SQLite/WAL EventStore가 유일한 진실의 원천
587
870
  2. **Append-Only**: 이벤트는 수정/삭제 없이 추가만
588
871
  3. **Idempotency**: dedupe_key로 중복 이벤트 감지
589
872
  4. **Evidence Alignment**: 주장이 실제 소스에 기반했는지 검증
590
873
  5. **Entity-Based Tasks**: canonical_key로 일관된 엔티티 식별
591
- 6. **Vector Store Consistency**: DuckDB → LanceDB 단방향 흐름
874
+ 6. **Vector Store Consistency**: SQLite outbox → LanceDB 단방향 흐름
592
875
  7. **Standard JSON**: 모든 데이터는 이식 가능한 JSON 형식
593
876
 
594
877
  ## 저장 위치
@@ -629,15 +912,15 @@ npm run dev
629
912
 
630
913
  ## 기술 스택
631
914
 
632
- - **DuckDB**: 이벤트 저장소 (append-only SQL)
633
- - **LanceDB**: 벡터 저장소 (고성능 벡터 검색)
634
- - **@xenova/transformers**: 로컬 임베딩 생성
915
+ - **SQLite / WAL**: 이벤트 저장소 (canonical append/read model)
916
+ - **LanceDB**: 벡터 저장소 (derived acceleration index)
917
+ - **@huggingface/transformers**: 로컬 임베딩 생성 (lazy import; Embedder는 `src/extensions/vector/`)
635
918
  - **Zod**: 런타임 타입 검증
636
919
  - **Commander**: CLI 인터페이스
637
920
  - **TypeScript**: 타입 안전한 코드
638
- - **Bun**: HTTP 서버 (Web Viewer)
921
+ - **Node.js + Hono**: HTTP 서버 / Web Viewer
639
922
  - **Hono**: 경량 라우터
640
- - **MCP SDK**: Claude Desktop 통합
923
+ - **MCP SDK**: Claude Desktop 통합 (`claude-memory-layer-mcp` stdio server)
641
924
 
642
925
  ## Specification Documents
643
926
 
@@ -660,30 +943,72 @@ npm run dev
660
943
  ## Roadmap
661
944
 
662
945
  ### Phase 1: Core (완료)
663
- - [x] Event Store (DuckDB)
946
+ - [x] Event Store (SQLite/WAL)
664
947
  - [x] Vector Store (LanceDB)
665
948
  - [x] Memory Graduation (L0→L4)
666
949
  - [x] Evidence Alignment
667
950
  - [x] History Import
668
951
 
669
952
  ### Phase 2: Advanced Features (진행 중)
670
- - [ ] Citations System
671
- - [ ] Endless Mode
672
- - [ ] Entity-Edge Model
673
- - [ ] Evidence Aligner V2
674
- - [ ] Private Tags
953
+ - [x] Citations System
954
+ - [x] Endless Mode service boundary *(experimental extension)*
955
+ - [ ] Entity-Edge Model productization
956
+ - [x] Evidence Aligner V2
957
+ - [x] Private Tags
675
958
 
676
959
  ### Phase 3: Integration
677
- - [ ] MCP Desktop Integration
678
- - [ ] Web Viewer UI
679
- - [ ] PostToolUse Hook
680
- - [ ] Progressive Disclosure
681
-
682
- ### Phase 4: Optimization
683
- - [ ] Vector Outbox V2
684
- - [ ] Task Entity System
960
+ - [x] MCP Desktop Integration *(stdio server bin exists; auto install command pending)*
961
+ - [x] Web Viewer UI
962
+ - [x] PostToolUse Hook
963
+ - [x] Progressive Disclosure
964
+
965
+ ### Phase 4: Optimization / Extension Isolation
966
+ - [x] Vector Outbox V2
967
+ - [x] Embedder extension boundary
968
+ - [ ] VectorStore / VectorWorker extension boundary
969
+ - [ ] Task Entity System productization
685
970
  - [ ] Performance Tuning
686
971
 
687
972
  ## License
688
973
 
689
974
  MIT
975
+
976
+ ## External Market Context (DART/FRED/Finnhub)
977
+
978
+ `claude-memory-layer market-context` fetches read-only external company and market data from environment-configured providers and returns a structured `MarketContextSnapshot` plus a Markdown analysis report.
979
+
980
+ Example:
981
+
982
+ ```bash
983
+ export DART_API_KEY=... # env-only; never commit real keys
984
+ export FRED_API_KEY=...
985
+ export FINNHUB_API_KEY=...
986
+ claude-memory-layer market-context \
987
+ --company 삼성전자 \
988
+ --dart-corp-code 00126380 \
989
+ --symbol 005930.KS \
990
+ --providers dart,fred,finnhub \
991
+ --fred-series FEDFUNDS,CPIAUCSL \
992
+ --json
993
+ ```
994
+
995
+ Security and behavior:
996
+
997
+ - API keys are read only from `DART_API_KEY`, `FRED_API_KEY`, and `FINNHUB_API_KEY`.
998
+ - `.env*` files are ignored; `.env.example` is placeholder-only.
999
+ - Missing provider keys produce skipped-provider statuses rather than hard failures.
1000
+ - Provider requests use bounded timeouts; large FRED series lists are capped to the first 10 unique series.
1001
+ - Empty Finnhub profile responses are treated as skipped-provider/no-data results, not profile evidence.
1002
+ - Provider errors and rendered reports redact credential-bearing query params such as `crtfc_key`, `api_key`, and `token`.
1003
+ - The MCP `external-market-context` tool is read-only and does not initialize or mutate memory storage.
1004
+ - `--no-snapshot` / MCP `includeSnapshot: false` disables both `analysis.marketSnapshot` and the DART company snapshot.
1005
+
1006
+ `MarketContextSnapshot` includes:
1007
+
1008
+ - `schemaVersion: market-context-snapshot.v1`
1009
+ - `subject`: company, DART corpCode, ticker symbol
1010
+ - `coverage`: DART/FRED/Finnhub provider status and counts
1011
+ - `bullCases`, `bearCases`, `risks`, `catalysts`: deterministic evidence-backed insights
1012
+ - `watchlist` and `followUpQuestions`
1013
+
1014
+ The Markdown report includes a `### MarketContextSnapshot` section with **Bull case**, **Bear case**, **Risks**, and **Catalysts**. DART analysis uses all fetched filings; only the rendered filing list is truncated. If `dartCorpCode` is omitted, company-name fallback is marked low-confidence, so exact DART corp codes are recommended for customer-facing analysis.
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "anonymized-real-session-replay-v1",
3
+ "description": "Anonymized real-session-style retrieval replay fixture for Precision@k / Recall@k / nDCG@k / no-match checks.",
4
+ "ks": [1, 3, 5],
5
+ "queries": [
6
+ {
7
+ "queryId": "q-cli-fast",
8
+ "query": "fast search should avoid embedding startup",
9
+ "expectation": "match",
10
+ "expectedIds": ["m-cli-fast", "m-runtime-light"],
11
+ "expectedRelevance": { "m-cli-fast": 3, "m-runtime-light": 2 },
12
+ "knownAnswer": "CLI search --strategy fast uses keyword retrieval and should not start embedding model initialization."
13
+ },
14
+ {
15
+ "queryId": "q-hook-policy",
16
+ "query": "hook should not inject weak keyword rescue",
17
+ "expectation": "match",
18
+ "expectedIds": ["m-hook-policy", "m-hook-threshold"],
19
+ "expectedRelevance": { "m-hook-policy": 3, "m-hook-threshold": 2 },
20
+ "knownAnswer": "Claude hook prompt injection has a separate conservative policy for high-confidence memories."
21
+ },
22
+ {
23
+ "queryId": "q-replay-bench",
24
+ "query": "precision recall replay benchmark output",
25
+ "expectation": "match",
26
+ "expectedIds": ["m-benchmark", "m-metrics"],
27
+ "expectedRelevance": { "m-benchmark": 3, "m-metrics": 2 },
28
+ "knownAnswer": "Replay benchmark reports Precision@k and Recall@k over anonymized session queries."
29
+ },
30
+ {
31
+ "queryId": "q-no-match-command-artifact",
32
+ "query": "local-command-stdout command-name opus",
33
+ "expectation": "no_match",
34
+ "expectedIds": [],
35
+ "expectedRelevance": {},
36
+ "forbiddenIds": ["m-cli-fast", "m-hook-policy", "m-benchmark"]
37
+ }
38
+ ],
39
+ "memories": [
40
+ { "id": "m-cli-fast", "content": "CLI search --strategy fast uses keyword retrieval and should not start embedding model initialization." },
41
+ { "id": "m-runtime-light", "content": "Lightweight read paths initialize SQLite event-store only and avoid vector/embedder workers." },
42
+ { "id": "m-hook-policy", "content": "Claude hook prompt injection has a separate conservative policy for high-confidence memories." },
43
+ { "id": "m-hook-threshold", "content": "Low-confidence keyword fallback can remain searchable but should not be injected into prompts." },
44
+ { "id": "m-benchmark", "content": "Replay benchmark reports Precision@k and Recall@k over anonymized session queries." },
45
+ { "id": "m-metrics", "content": "Metric summaries average per-query precision and recall for k values one three and five." },
46
+ { "id": "m-noise", "content": "Unrelated dashboard styling note for visual spacing." }
47
+ ]
48
+ }