claude-memory-layer 1.0.26 → 1.0.28

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 (328) hide show
  1. package/.env.example +7 -0
  2. package/AGENTS.md +11 -0
  3. package/README.md +184 -41
  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 +9 -5
  56. package/scripts/build.ts +25 -8
  57. package/scripts/generate-session-qrels.ts +126 -0
  58. package/scripts/replay-retrieval-benchmark.ts +69 -0
  59. package/specs/thin-core-refactor/context.md +275 -0
  60. package/specs/thin-core-refactor/plan.md +536 -0
  61. package/specs/thin-core-refactor/spec.md +465 -0
  62. package/src/adapters/claude/capture/index.ts +3 -0
  63. package/src/adapters/claude/context/index.ts +3 -0
  64. package/src/adapters/claude/hooks/index.ts +21 -0
  65. package/src/adapters/claude/hooks/post-tool-use.ts +239 -0
  66. package/src/adapters/claude/hooks/prompt-injection-policy.ts +104 -0
  67. package/src/adapters/claude/hooks/semantic-daemon-client.ts +209 -0
  68. package/src/adapters/claude/hooks/semantic-daemon.ts +283 -0
  69. package/src/adapters/claude/hooks/session-end.ts +59 -0
  70. package/src/adapters/claude/hooks/session-start.ts +73 -0
  71. package/src/adapters/claude/hooks/stop.ts +128 -0
  72. package/src/adapters/claude/hooks/user-prompt-submit.ts +361 -0
  73. package/src/adapters/claude/index.ts +4 -0
  74. package/src/adapters/claude/transcript/index.ts +4 -0
  75. package/src/adapters/claude/transcript/transcript-reader.ts +57 -0
  76. package/src/adapters/claude/transcript/turn-reconstructor.ts +65 -0
  77. package/src/apps/cli/claude-settings-hooks.ts +138 -0
  78. package/src/apps/cli/codex-import-runner.ts +125 -0
  79. package/src/apps/cli/codex-validation-output.ts +95 -0
  80. package/src/apps/cli/hermes-import-runner.ts +130 -0
  81. package/src/apps/cli/hermes-validation-output.ts +91 -0
  82. package/src/apps/cli/index.ts +1731 -0
  83. package/src/apps/cli/mcp-install.ts +106 -0
  84. package/src/apps/cli/retrieval-disclosure-output.ts +196 -0
  85. package/src/apps/dashboard/assets/js/bootstrap.js +244 -0
  86. package/src/apps/dashboard/assets/js/chat.js +373 -0
  87. package/src/apps/dashboard/assets/js/disclosure.js +232 -0
  88. package/src/apps/dashboard/assets/js/modals.js +298 -0
  89. package/src/apps/dashboard/assets/js/overview.js +655 -0
  90. package/src/apps/dashboard/assets/js/state.js +72 -0
  91. package/src/apps/dashboard/assets/js/views.js +468 -0
  92. package/src/{ui → apps/dashboard}/index.html +43 -1
  93. package/src/apps/dashboard/index.ts +3 -0
  94. package/src/{ui → apps/dashboard}/style.css +222 -0
  95. package/src/apps/index.ts +5 -0
  96. package/src/apps/server/api/chat.ts +244 -0
  97. package/src/apps/server/api/citations.ts +105 -0
  98. package/src/apps/server/api/events.ts +137 -0
  99. package/src/apps/server/api/health.ts +53 -0
  100. package/src/apps/server/api/index.ts +26 -0
  101. package/src/apps/server/api/projects.ts +74 -0
  102. package/src/apps/server/api/search.ts +184 -0
  103. package/src/apps/server/api/sessions.ts +115 -0
  104. package/src/apps/server/api/stats.ts +723 -0
  105. package/src/apps/server/api/turns.ts +143 -0
  106. package/src/apps/server/api/utils.ts +65 -0
  107. package/src/apps/server/index.ts +111 -0
  108. package/src/cli/index.ts +2 -1311
  109. package/src/cli/retrieval-disclosure-output.ts +2 -0
  110. package/src/compat/index.ts +5 -0
  111. package/src/core/derive/fact-deriver.ts +170 -0
  112. package/src/core/derive/index.ts +2 -0
  113. package/src/core/derive/summary-deriver.ts +76 -0
  114. package/src/core/embedder.ts +4 -152
  115. package/src/core/engine/embedding-maintenance-service.ts +187 -0
  116. package/src/core/engine/endless-memory-services.ts +4 -0
  117. package/src/core/engine/index.ts +19 -0
  118. package/src/core/engine/memory-engine-services.ts +170 -0
  119. package/src/core/engine/memory-ingest-service.ts +317 -0
  120. package/src/core/engine/memory-query-service.ts +173 -0
  121. package/src/core/engine/memory-runtime-service.ts +162 -0
  122. package/src/core/engine/memory-service-composition.ts +231 -0
  123. package/src/core/engine/retrieval-analytics-service.ts +181 -0
  124. package/src/core/engine/retrieval-disclosure-service.ts +420 -0
  125. package/src/core/engine/retrieval-orchestrator.ts +377 -0
  126. package/src/core/engine/retrieval-services.ts +176 -0
  127. package/src/core/engine/shared-memory-services.ts +4 -0
  128. package/src/core/entity-repo.ts +1 -3
  129. package/src/core/event-store.ts +3 -3
  130. package/src/core/evidence-aligner.ts +2 -2
  131. package/src/core/external-market-context.ts +582 -0
  132. package/src/core/graduation.ts +2 -3
  133. package/src/core/index.ts +21 -0
  134. package/src/core/matcher.ts +2 -4
  135. package/src/core/model/memory-fact.ts +30 -0
  136. package/src/core/model/memory-rule.ts +14 -0
  137. package/src/core/model/memory-summary.ts +21 -0
  138. package/src/core/model/raw-event.ts +28 -0
  139. package/src/core/model/retrieval-result.ts +35 -0
  140. package/src/core/privacy/filter.ts +21 -10
  141. package/src/core/product-validation-matrix.ts +314 -0
  142. package/src/core/progressive-retriever.ts +1 -2
  143. package/src/core/registry/project-path.ts +54 -0
  144. package/src/core/registry/session-registry.ts +69 -0
  145. package/src/core/replay-evaluator.ts +625 -0
  146. package/src/core/retrieval-benchmark.ts +117 -0
  147. package/src/core/retrieval-quality.ts +109 -0
  148. package/src/core/retriever.ts +53 -15
  149. package/src/core/session-qrels.ts +360 -0
  150. package/src/core/shared-event-store.ts +1 -1
  151. package/src/core/sqlite-event-store.ts +35 -11
  152. package/src/core/task/blocker-resolver.ts +2 -2
  153. package/src/core/task/task-resolver.ts +0 -1
  154. package/src/core/vector-outbox.ts +1 -10
  155. package/src/core/vector-worker.ts +1 -1
  156. package/src/extensions/endless-memory/endless-memory-services.ts +350 -0
  157. package/src/extensions/endless-memory/index.ts +1 -0
  158. package/src/extensions/index.ts +5 -0
  159. package/src/extensions/mcp/handlers.ts +960 -0
  160. package/src/extensions/mcp/index.ts +48 -0
  161. package/src/extensions/mcp/tools.ts +252 -0
  162. package/src/extensions/shared-memory/index.ts +1 -0
  163. package/src/extensions/shared-memory/shared-memory-services.ts +211 -0
  164. package/src/extensions/vector/embedder.ts +197 -0
  165. package/src/extensions/vector/index.ts +1 -0
  166. package/src/hooks/post-tool-use.ts +3 -236
  167. package/src/hooks/semantic-daemon-client.ts +1 -208
  168. package/src/hooks/semantic-daemon.ts +6 -271
  169. package/src/hooks/session-end.ts +4 -79
  170. package/src/hooks/session-start.ts +4 -73
  171. package/src/hooks/stop.ts +3 -173
  172. package/src/hooks/user-prompt-submit.ts +3 -338
  173. package/src/index.ts +13 -0
  174. package/src/mcp/handlers.ts +2 -212
  175. package/src/mcp/index.ts +3 -46
  176. package/src/mcp/tools.ts +2 -78
  177. package/src/server/api/chat.ts +2 -244
  178. package/src/server/api/citations.ts +2 -105
  179. package/src/server/api/events.ts +2 -137
  180. package/src/server/api/health.ts +2 -53
  181. package/src/server/api/index.ts +2 -26
  182. package/src/server/api/projects.ts +2 -74
  183. package/src/server/api/search.ts +2 -102
  184. package/src/server/api/sessions.ts +2 -115
  185. package/src/server/api/stats.ts +2 -724
  186. package/src/server/api/turns.ts +2 -143
  187. package/src/server/api/utils.ts +2 -46
  188. package/src/server/index.ts +2 -100
  189. package/src/services/bootstrap-organizer.ts +46 -26
  190. package/src/services/codex-session-history-importer.ts +521 -29
  191. package/src/services/hermes-session-history-importer.ts +733 -0
  192. package/src/services/memory-service-config.ts +36 -0
  193. package/src/services/memory-service-registry.ts +150 -0
  194. package/src/services/memory-service.ts +211 -1325
  195. package/src/services/session-history-importer.ts +58 -14
  196. package/tests/README.md +23 -0
  197. package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +54 -0
  198. package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +98 -0
  199. package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +99 -0
  200. package/tests/apps/app-layer-boundary.test.ts +48 -0
  201. package/tests/apps/claude-settings-hooks.test.ts +107 -0
  202. package/tests/apps/cli-disclosure-output.test.ts +212 -0
  203. package/tests/apps/codex-import-runner.test.ts +99 -0
  204. package/tests/apps/codex-validation-output.test.ts +100 -0
  205. package/tests/apps/hermes-import-runner.test.ts +99 -0
  206. package/tests/apps/mcp-install-command.test.ts +59 -0
  207. package/tests/apps/package-build-entrypoints.test.ts +30 -0
  208. package/tests/apps/search-api-disclosure.test.ts +162 -0
  209. package/tests/apps/stats-api-lightweight.test.ts +67 -0
  210. package/tests/apps/ui-disclosure-output.test.ts +140 -0
  211. package/tests/{bootstrap-organizer.test.ts → core/bootstrap-organizer.test.ts} +1 -1
  212. package/tests/{canonical-key.test.ts → core/canonical-key.test.ts} +1 -1
  213. package/tests/core/codex-session-history-importer-validation.test.ts +185 -0
  214. package/tests/{consolidation-worker.test.ts → core/consolidation-worker.test.ts} +2 -2
  215. package/tests/core/embedding-maintenance-service.test.ts +282 -0
  216. package/tests/{evidence-aligner.test.ts → core/evidence-aligner.test.ts} +1 -1
  217. package/tests/core/external-market-context.test.ts +209 -0
  218. package/tests/core/fact-deriver.test.ts +79 -0
  219. package/tests/core/hermes-session-history-importer-validation.test.ts +609 -0
  220. package/tests/{ingest-interceptor.test.ts → core/ingest-interceptor.test.ts} +1 -1
  221. package/tests/{markdown-mirror.test.ts → core/markdown-mirror.test.ts} +2 -2
  222. package/tests/{matcher.test.ts → core/matcher.test.ts} +1 -1
  223. package/tests/{md-mirror.test.ts → core/md-mirror.test.ts} +2 -2
  224. package/tests/core/memory-engine-services.test.ts +240 -0
  225. package/tests/core/memory-ingest-service.test.ts +296 -0
  226. package/tests/core/memory-query-service.test.ts +129 -0
  227. package/tests/core/memory-runtime-service.test.ts +201 -0
  228. package/tests/core/memory-service-composition.test.ts +192 -0
  229. package/tests/core/memory-service-config.test.ts +41 -0
  230. package/tests/core/memory-service-facade.test.ts +30 -0
  231. package/tests/core/memory-service-registry.test.ts +206 -0
  232. package/tests/core/product-validation-matrix.test.ts +61 -0
  233. package/tests/core/project-registry.test.ts +78 -0
  234. package/tests/core/replay-evaluator.test.ts +181 -0
  235. package/tests/core/retrieval-analytics-service.test.ts +210 -0
  236. package/tests/core/retrieval-benchmark.test.ts +93 -0
  237. package/tests/core/retrieval-disclosure-service.test.ts +264 -0
  238. package/tests/core/retrieval-orchestrator.test.ts +403 -0
  239. package/tests/core/retrieval-quality.test.ts +31 -0
  240. package/tests/core/retrieval-services.test.ts +185 -0
  241. package/tests/{retriever-fallback-chain.test.ts → core/retriever-fallback-chain.test.ts} +3 -3
  242. package/tests/{retriever-strategy-scope.test.ts → core/retriever-strategy-scope.test.ts} +70 -3
  243. package/tests/{retriever.memu-adoption.test.ts → core/retriever.memu-adoption.test.ts} +3 -3
  244. package/tests/core/session-history-importer-filter.test.ts +78 -0
  245. package/tests/core/session-qrels.test.ts +250 -0
  246. package/tests/{sqlite-event-store-replication.test.ts → core/sqlite-event-store-replication.test.ts} +36 -1
  247. package/tests/core/summary-deriver.test.ts +66 -0
  248. package/tests/extensions/embedder-warning-suppression.test.ts +53 -0
  249. package/tests/extensions/endless-memory-extension-boundary.test.ts +17 -0
  250. package/tests/extensions/endless-memory-services.test.ts +325 -0
  251. package/tests/extensions/mcp-context-tools.test.ts +905 -0
  252. package/tests/extensions/mcp-extension-boundary.test.ts +21 -0
  253. package/tests/extensions/mcp-package-build.test.ts +22 -0
  254. package/tests/extensions/mcp-project-aware-tools.test.ts +102 -0
  255. package/tests/extensions/shared-memory-extension-boundary.test.ts +24 -0
  256. package/tests/extensions/shared-memory-services.test.ts +309 -0
  257. package/tests/extensions/vector-extension-boundary.test.ts +21 -0
  258. package/.claude/settings.local.json +0 -25
  259. package/.npm-cache/_cacache/content-v2/sha512/04/76/c098f88dfe584a2b80870bff7421b05d17d3d9ee1027f77772332a22d3f93a9a57101a2855107f6ad82077a818bba912b2bc317f2361b5ddb09ad284d9ce +0 -0
  260. package/.npm-cache/_cacache/content-v2/sha512/60/25/d2ecd39cfc7cab58351162814be77f935c6d6491c10c3745d456da7ddb2117ffd90c10e53fe3c0f1ed16b403307841543634504398b16ee4e6b6dd8e0c45 +0 -0
  261. package/.npm-cache/_cacache/index-v5/2b/9a/7f8f40206ed8a2e0a84efaa953ccaed1f5d001e14b931083f2e7a0738007 +0 -2
  262. package/.npm-cache/_cacache/index-v5/2e/d9/fcfa5c6a6abdc2a3644ab84a95936047298c465a2f47ee03db8f7fe1e946 +0 -3
  263. package/.npm-cache/_cacache/index-v5/a9/42/e519633356d12d3d2f19da66a8301016d496c8f5c3e0554124aaa62dc043 +0 -2
  264. package/.npm-cache/_logs/2026-02-26T12_04_52_729Z-debug-0.log +0 -256
  265. package/.npm-cache/_logs/2026-02-26T12_05_36_835Z-debug-0.log +0 -18
  266. package/.npm-cache/_logs/2026-02-26T12_05_45_982Z-debug-0.log +0 -32
  267. package/.npm-cache/_logs/2026-02-26T12_05_48_515Z-debug-0.log +0 -260
  268. package/.npm-cache/_logs/2026-02-26T12_05_53_567Z-debug-0.log +0 -69
  269. package/.npm-cache/_update-notifier-last-checked +0 -0
  270. package/bootstrap-kb/decisions/decisions.md +0 -244
  271. package/bootstrap-kb/glossary/glossary.md +0 -46
  272. package/bootstrap-kb/modules/.claude-plugin.md +0 -22
  273. package/bootstrap-kb/modules/agents.md.md +0 -15
  274. package/bootstrap-kb/modules/claude.md.md +0 -15
  275. package/bootstrap-kb/modules/context.md.md +0 -15
  276. package/bootstrap-kb/modules/docs.md +0 -18
  277. package/bootstrap-kb/modules/handoff.md.md +0 -15
  278. package/bootstrap-kb/modules/package-lock.json.md +0 -15
  279. package/bootstrap-kb/modules/package.json.md +0 -15
  280. package/bootstrap-kb/modules/plan.md.md +0 -15
  281. package/bootstrap-kb/modules/readme.md.md +0 -15
  282. package/bootstrap-kb/modules/scripts.md +0 -26
  283. package/bootstrap-kb/modules/spec.md.md +0 -15
  284. package/bootstrap-kb/modules/specs.md +0 -20
  285. package/bootstrap-kb/modules/src.md +0 -51
  286. package/bootstrap-kb/modules/tests.md +0 -42
  287. package/bootstrap-kb/modules/tsconfig.json.md +0 -15
  288. package/bootstrap-kb/modules/vitest.config.ts.md +0 -15
  289. package/bootstrap-kb/overview/overview.md +0 -40
  290. package/bootstrap-kb/sources/manifest.json +0 -950
  291. package/bootstrap-kb/sources/manifest.md +0 -227
  292. package/bootstrap-kb/timeline/timeline.md +0 -57
  293. package/claude-memory-layer-1.0.14.tgz +0 -0
  294. package/d.sh +0 -3
  295. package/deploy.sh +0 -3
  296. package/dist/ui/app.js +0 -2101
  297. package/memory/.claude-plugin/commands/2026-02-25.md +0 -263
  298. package/memory/_index.md +0 -418
  299. package/memory/agent_response/uncategorized/2026-02-26.md +0 -176
  300. package/memory/agent_response/uncategorized/2026-03-03.md +0 -14
  301. package/memory/agent_response/uncategorized/2026-03-04.md +0 -1421
  302. package/memory/agent_response/uncategorized/2026-03-05.md +0 -48
  303. package/memory/default/uncategorized/2026-02-25.md +0 -4839
  304. package/memory/session_summary/uncategorized/2026-02-26.md +0 -13
  305. package/memory/session_summary/uncategorized/2026-03-03.md +0 -5
  306. package/memory/session_summary/uncategorized/2026-03-04.md +0 -50
  307. package/memory/specs/20260207-dashboard-upgrade/2026-02-25.md +0 -142
  308. package/memory/specs/citations-system/2026-02-25.md +0 -1121
  309. package/memory/specs/endless-mode/2026-02-25.md +0 -1392
  310. package/memory/specs/entity-edge-model/2026-02-25.md +0 -1263
  311. package/memory/specs/evidence-aligner-v2/2026-02-25.md +0 -1028
  312. package/memory/specs/mcp-desktop-integration/2026-02-25.md +0 -1334
  313. package/memory/specs/post-tool-use-hook/2026-02-25.md +0 -1164
  314. package/memory/specs/private-tags/2026-02-25.md +0 -1057
  315. package/memory/specs/progressive-disclosure/2026-02-25.md +0 -1436
  316. package/memory/specs/task-entity-system/2026-02-25.md +0 -924
  317. package/memory/specs/vector-outbox-v2/2026-02-25.md +0 -1510
  318. package/memory/specs/web-viewer-ui/2026-02-25.md +0 -1709
  319. package/memory/tool_observation/uncategorized/2026-02-26.md +0 -209
  320. package/memory/tool_observation/uncategorized/2026-03-03.md +0 -21
  321. package/memory/tool_observation/uncategorized/2026-03-04.md +0 -1033
  322. package/memory/tool_observation/uncategorized/2026-03-05.md +0 -29
  323. package/memory/user_prompt/uncategorized/2026-02-26.md +0 -25
  324. package/memory/user_prompt/uncategorized/2026-03-04.md +0 -634
  325. package/specs/optional-duckdb/context.md +0 -77
  326. package/specs/optional-duckdb/plan.md +0 -142
  327. package/specs/optional-duckdb/spec.md +0 -35
  328. 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
@@ -93,10 +93,10 @@ npx claude-memory-layer search "배포 이슈"
93
93
  ### Advanced Features
94
94
 
95
95
  - **Citations System**: 메모리 출처 추적 (`[mem:abc123]` 형식)으로 검색 결과의 원본 확인 가능
96
- - **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반
96
+ - **Endless Mode**: 세션 경계 없는 연속적 메모리 스트림, Biomimetic Memory Architecture 기반 *(experimental extension)*
97
97
  - **Entity-Edge Model**: entries/entities/edges 3-layer 모델로 데이터 관계 명시적 모델링
98
98
  - **Evidence Aligner V2**: Quote 기반 3단계 정렬 (exact → normalized → fuzzy)
99
- - **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유
99
+ - **MCP Desktop Integration**: Claude Desktop용 MCP 서버로 CLI와 동일한 메모리 공유 *(stdio server bin: `claude-memory-layer-mcp`)*
100
100
  - **PostToolUse Hook**: 도구 실행 결과 (Read, Write, Bash 등) 캡처 및 저장
101
101
  - **Private Tags**: `<private>` 태그로 민감 정보를 명시적으로 제외
102
102
  - **Progressive Disclosure**: 3-Layer 검색 (인덱스 → 타임라인 → 상세)으로 토큰 효율화
@@ -104,9 +104,21 @@ npx claude-memory-layer search "배포 이슈"
104
104
  - **Append-only Markdown Mirror**: 저장 이벤트를 `memory/<namespace>/<category...>/YYYY-MM-DD.md`에도 동기 append (기본값: `namespace=default`, `category=uncategorized`, 경로 세그먼트 sanitize)
105
105
  - `memory/_index.md` 인덱스를 자동 갱신
106
106
  - **Task Entity System**: Task를 Entity로 승격하여 세션 간 상태 추적
107
- - **Vector Outbox V2**: Transactional Outbox 패턴으로 DuckDB-LanceDB 정합성 보장
107
+ - **Vector Outbox V2**: Transactional Outbox 패턴으로 SQLite-LanceDB 정합성 보장
108
108
  - **Web Viewer UI**: localhost:37777 대시보드로 실시간 메모리 모니터링
109
109
 
110
+ ### 현재 feature status
111
+
112
+ | 영역 | 상태 | 비고 |
113
+ |------|------|------|
114
+ | Claude Code hooks / CLI / Dashboard | Stable | `install`, `search`, `import`, `stats`, `dashboard` 중심 |
115
+ | SQLite event store / project registry | Stable | canonical source of truth |
116
+ | LanceDB vector index / Embedder | Stable accelerator | `src/extensions/vector/embedder.ts`; VectorStore/VectorWorker는 아직 core compatibility path 유지 |
117
+ | Progressive disclosure search/API/CLI/dashboard | Implemented | `search --disclosure`, `expand`, `source` mental model |
118
+ | Shared memory / Endless mode | Experimental extension | 구현은 `src/extensions/shared-memory`, `src/extensions/endless-memory` 아래에 있고 기존 path는 shim 유지 |
119
+ | MCP Desktop integration | Implemented | 구현은 `src/extensions/mcp`; package bin은 `claude-memory-layer-mcp`; `claude-memory-layer mcp install`로 Claude Desktop config 자동 등록 |
120
+ | Mongo sync / Entity graph / Task entity | Experimental | 고급/운영 옵션으로 취급 |
121
+
110
122
  ## 설치 방법
111
123
 
112
124
  ### 1. 의존성 설치
@@ -124,13 +136,14 @@ npm run build
124
136
 
125
137
  ### 3. Claude Code에 플러그인 등록
126
138
 
127
- 빌드된 플러그인을 Claude Code 설정에 추가합니다:
139
+ Claude Code hook 설정은 CLI가 등록합니다:
128
140
 
129
141
  ```bash
130
- # Claude Code 설정 디렉토리에 플러그인 복사
131
- cp -r dist/.claude-plugin ~/.claude/plugins/claude-memory-layer/
142
+ npx claude-memory-layer install
132
143
  ```
133
144
 
145
+ > 주의: `install` / `uninstall`은 `~/.claude/settings.json`을 수정합니다. 자동 테스트나 임의 실행 대신, 실제 사용자가 설치/해제를 원할 때만 실행하세요.
146
+
134
147
  ## 사용 방법
135
148
 
136
149
  ### 자동 동작 (Hooks)
@@ -334,7 +347,7 @@ SECRET_TOKEN=abc123
334
347
  🔍 Search Results:
335
348
 
336
349
  #1 [mem:a7Bc3x] (score: 0.94)
337
- "DuckDB를 사용하여 이벤트 소싱 패턴을..."
350
+ "SQLite/WAL을 사용하여 이벤트 소싱 패턴을..."
338
351
  📅 2026-01-30 | 🔗 Session abc123
339
352
  ```
340
353
 
@@ -349,10 +362,10 @@ claude-memory-layer show mem:a7Bc3x
349
362
 
350
363
  ```bash
351
364
  # Endless Mode 활성화
352
- claude-memory-layer config set mode endless
365
+ claude-memory-layer endless enable
353
366
 
354
367
  # 상태 확인
355
- claude-memory-layer status
368
+ claude-memory-layer endless status
356
369
 
357
370
  # 출력 예시:
358
371
  # Mode: Endless
@@ -371,31 +384,75 @@ claude-memory-layer status
371
384
 
372
385
  ## MCP Desktop Integration
373
386
 
374
- Claude Desktop에서 메모리 검색을 사용하려면:
387
+ > 현재 상태: MCP server implementation은 `src/extensions/mcp/`로 이동되어 있고,
388
+ > `src/mcp/*`는 compatibility shim입니다. package bin으로
389
+ > `claude-memory-layer-mcp`가 제공됩니다.
390
+
391
+ Claude Desktop 설정은 CLI로 자동 등록할 수 있습니다:
375
392
 
376
393
  ```bash
377
- # MCP 서버 설치
378
394
  claude-memory-layer mcp install
395
+ # Config: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
396
+ ```
379
397
 
380
- # 또는 수동 설정: ~/Library/Application Support/Claude/claude_desktop_config.json
398
+ 명령은 Claude Desktop config의 기존 값을 보존하면서 다음 MCP server entry를 추가/갱신합니다:
399
+
400
+ ```json
381
401
  {
382
402
  "mcpServers": {
383
403
  "claude-memory-layer": {
384
- "command": "npx",
385
- "args": ["claude-memory-layer-mcp"]
404
+ "command": "claude-memory-layer-mcp",
405
+ "args": []
386
406
  }
387
407
  }
388
408
  }
389
409
  ```
390
410
 
411
+ 옵션:
412
+
413
+ ```bash
414
+ claude-memory-layer mcp install --dry-run
415
+ claude-memory-layer mcp install --config-path /path/to/claude_desktop_config.json
416
+ claude-memory-layer mcp install --server-name claude-memory-layer --command claude-memory-layer-mcp
417
+ ```
418
+
419
+ 설정 후 Claude Desktop을 재시작하면 MCP 서버가 로드됩니다. Codex/Hermes처럼 MCP client가 있는 다른 agent에는 로컬 checkout의 built server를 직접 등록할 수 있습니다:
420
+
421
+ ```bash
422
+ # Codex
423
+ codex mcp add claude-memory-layer -- node /path/to/claude-memory-layer/dist/mcp/index.js
424
+
425
+ # Hermes
426
+ hermes mcp add claude-memory-layer --command node --args /path/to/claude-memory-layer/dist/mcp/index.js
427
+ ```
428
+
429
+ 로컬 checkout에서 서버만 바로 테스트하려면 `npm run build` 후 다음처럼 직접 실행할 수도 있습니다:
430
+
431
+ ```bash
432
+ node dist/mcp/index.js
433
+ ```
434
+
391
435
  ### 제공되는 MCP 도구
392
436
 
393
437
  | 도구 | 설명 |
394
438
  |------|------|
395
- | `mem-search` | 메모리 검색 |
396
- | `mem-timeline` | 타임라인 조회 |
397
- | `mem-details` | 상세 정보 조회 |
398
- | `mem-stats` | 통계 조회 |
439
+ | `mem-search` | 메모리 검색 (`projectPath`를 주면 프로젝트별 저장소 검색) |
440
+ | `mem-timeline` | 특정 memory IDs 주변 chronological context 조회 (`projectPath` 지원) |
441
+ | `mem-details` | 상세 정보 조회 (`projectPath` 지원) |
442
+ | `mem-stats` | 통계 조회 (`projectPath` 지원) |
443
+ | `mem-context-pack` | 작업 시작용 compact context pack. query 관련 memory + 최근 project timeline + follow-up refs를 한 번에 반환 |
444
+ | `mem-project-timeline` | 최근 project memory를 session/source/event-count/safe-preview 기준으로 요약 |
445
+ | `mem-source-ref` | `mem:<citation>` 또는 `event:<id>`를 privacy-safe source reference와 redacted preview로 해석 |
446
+
447
+ 예시 workflow:
448
+
449
+ ```text
450
+ 1. 새 작업 시작: mem-context-pack(projectPath, query)
451
+ 2. 최근 흐름 확인: mem-project-timeline(projectPath)
452
+ 3. 근거가 더 필요할 때: mem-source-ref(projectPath, ids=["mem:abc123"])
453
+ ```
454
+
455
+ 이 workflow는 Hermes/Codex/Claude Code가 같은 project-scoped memory backend를 공유할 때 특히 유용합니다. `mem-source-ref`는 raw transcript를 그대로 덤프하지 않고 allowlisted metadata와 privacy-filtered preview만 반환합니다.
399
456
 
400
457
  ## Web Viewer
401
458
 
@@ -451,6 +508,50 @@ Skipped duplicates: 0
451
508
  Embeddings processed: 342
452
509
  ```
453
510
 
511
+ ### Codex 세션 임포트
512
+
513
+ Codex CLI 기록(`~/.codex/sessions`)은 기본적으로 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 메모리에 저장합니다:
514
+
515
+ ```bash
516
+ # 읽기 전용 검증/리포트
517
+ npx claude-memory-layer codex validate --project /path/to/project --format markdown
518
+
519
+ # 현재 프로젝트 Codex 세션을 프로젝트별 메모리로 import
520
+ cd /path/to/project
521
+ npx claude-memory-layer codex import
522
+
523
+ # 특정 세션만 import
524
+ npx claude-memory-layer codex import --project /path/to/project --session /path/to/session.jsonl
525
+
526
+ # 모든 Codex 세션 import (전역 저장소 사용; 필요할 때만)
527
+ npx claude-memory-layer codex import --all --verbose
528
+ ```
529
+
530
+ 옵션: `--sessions-dir`, `--limit`, `--force`, `--no-process-embeddings`.
531
+
532
+ ### Hermes 세션 임포트
533
+
534
+ Hermes Agent 기록(`~/.hermes/state.db`)도 원본 DB를 read-only validate/replay로 먼저 확인하고, 명시적 import 명령으로만 프로젝트별 메모리에 저장합니다. 기본 전략은 live sync가 아니라 **SessionDB → CML explicit derived import**입니다:
535
+
536
+ ```bash
537
+ # 읽기 전용 검증/리포트
538
+ npx claude-memory-layer hermes validate --project /path/to/project --format markdown
539
+
540
+ # 현재 프로젝트 Hermes 세션을 프로젝트별 메모리로 import
541
+ cd /path/to/project
542
+ npx claude-memory-layer hermes import
543
+
544
+ # 특정 Hermes session id만 import
545
+ npx claude-memory-layer hermes import --project /path/to/project --session 20260505_010203_abcd1234
546
+
547
+ # 모든 Hermes 세션 import (전역 저장소 사용; 필요할 때만)
548
+ npx claude-memory-layer hermes import --all --verbose
549
+ ```
550
+
551
+ 옵션: `--state-db`, `--limit`, `--force`, `--no-process-embeddings`.
552
+
553
+ Hermes import는 user/assistant turn만 저장하고 tool/system 메시지는 건너뜁니다. 검증 리포트에는 aggregate count만 포함되며 transcript 본문은 포함하지 않습니다.
554
+
454
555
  ### 중복 처리
455
556
 
456
557
  임포트는 콘텐츠 해시 기반으로 중복을 자동 감지합니다. 여러 번 실행해도 같은 내용이 중복 저장되지 않습니다.
@@ -462,7 +563,7 @@ Embeddings processed: 342
462
563
  ```
463
564
  사용자 프롬프트 입력
464
565
 
465
- EventStore에 저장 (DuckDB, append-only)
566
+ EventStore에 저장 (SQLite/WAL, append-only)
466
567
 
467
568
  Outbox에 임베딩 요청 등록
468
569
 
@@ -530,7 +631,7 @@ Embeddings processed: 342
530
631
  ▼ ▼
531
632
  ┌───────────────┐ ┌───────────────┐
532
633
  │ EventStore │ ──── Outbox ────▶ │ VectorStore │
533
- (DuckDB) │ (V2 Pattern) │ (LanceDB) │
634
+ (SQLite/WAL) │ (V2 Pattern) │ (LanceDB) │
534
635
  └───────────────┘ └───────────────┘
535
636
  ```
536
637
 
@@ -583,12 +684,12 @@ Layer 1: Search Index (~50-100 tokens/result)
583
684
 
584
685
  ## AXIOMMIND 7 원칙
585
686
 
586
- 1. **Single Source of Truth**: DuckDB EventStore가 유일한 진실의 원천
687
+ 1. **Single Source of Truth**: SQLite/WAL EventStore가 유일한 진실의 원천
587
688
  2. **Append-Only**: 이벤트는 수정/삭제 없이 추가만
588
689
  3. **Idempotency**: dedupe_key로 중복 이벤트 감지
589
690
  4. **Evidence Alignment**: 주장이 실제 소스에 기반했는지 검증
590
691
  5. **Entity-Based Tasks**: canonical_key로 일관된 엔티티 식별
591
- 6. **Vector Store Consistency**: DuckDB → LanceDB 단방향 흐름
692
+ 6. **Vector Store Consistency**: SQLite outbox → LanceDB 단방향 흐름
592
693
  7. **Standard JSON**: 모든 데이터는 이식 가능한 JSON 형식
593
694
 
594
695
  ## 저장 위치
@@ -629,15 +730,15 @@ npm run dev
629
730
 
630
731
  ## 기술 스택
631
732
 
632
- - **DuckDB**: 이벤트 저장소 (append-only SQL)
633
- - **LanceDB**: 벡터 저장소 (고성능 벡터 검색)
634
- - **@xenova/transformers**: 로컬 임베딩 생성
733
+ - **SQLite / WAL**: 이벤트 저장소 (canonical append/read model)
734
+ - **LanceDB**: 벡터 저장소 (derived acceleration index)
735
+ - **@huggingface/transformers**: 로컬 임베딩 생성 (lazy import; Embedder는 `src/extensions/vector/`)
635
736
  - **Zod**: 런타임 타입 검증
636
737
  - **Commander**: CLI 인터페이스
637
738
  - **TypeScript**: 타입 안전한 코드
638
- - **Bun**: HTTP 서버 (Web Viewer)
739
+ - **Node.js + Hono**: HTTP 서버 / Web Viewer
639
740
  - **Hono**: 경량 라우터
640
- - **MCP SDK**: Claude Desktop 통합
741
+ - **MCP SDK**: Claude Desktop 통합 (`claude-memory-layer-mcp` stdio server)
641
742
 
642
743
  ## Specification Documents
643
744
 
@@ -660,30 +761,72 @@ npm run dev
660
761
  ## Roadmap
661
762
 
662
763
  ### Phase 1: Core (완료)
663
- - [x] Event Store (DuckDB)
764
+ - [x] Event Store (SQLite/WAL)
664
765
  - [x] Vector Store (LanceDB)
665
766
  - [x] Memory Graduation (L0→L4)
666
767
  - [x] Evidence Alignment
667
768
  - [x] History Import
668
769
 
669
770
  ### Phase 2: Advanced Features (진행 중)
670
- - [ ] Citations System
671
- - [ ] Endless Mode
672
- - [ ] Entity-Edge Model
673
- - [ ] Evidence Aligner V2
674
- - [ ] Private Tags
771
+ - [x] Citations System
772
+ - [x] Endless Mode service boundary *(experimental extension)*
773
+ - [ ] Entity-Edge Model productization
774
+ - [x] Evidence Aligner V2
775
+ - [x] Private Tags
675
776
 
676
777
  ### 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
778
+ - [x] MCP Desktop Integration *(stdio server bin exists; auto install command pending)*
779
+ - [x] Web Viewer UI
780
+ - [x] PostToolUse Hook
781
+ - [x] Progressive Disclosure
782
+
783
+ ### Phase 4: Optimization / Extension Isolation
784
+ - [x] Vector Outbox V2
785
+ - [x] Embedder extension boundary
786
+ - [ ] VectorStore / VectorWorker extension boundary
787
+ - [ ] Task Entity System productization
685
788
  - [ ] Performance Tuning
686
789
 
687
790
  ## License
688
791
 
689
792
  MIT
793
+
794
+ ## External Market Context (DART/FRED/Finnhub)
795
+
796
+ `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.
797
+
798
+ Example:
799
+
800
+ ```bash
801
+ export DART_API_KEY=... # env-only; never commit real keys
802
+ export FRED_API_KEY=...
803
+ export FINNHUB_API_KEY=...
804
+ claude-memory-layer market-context \
805
+ --company 삼성전자 \
806
+ --dart-corp-code 00126380 \
807
+ --symbol 005930.KS \
808
+ --providers dart,fred,finnhub \
809
+ --fred-series FEDFUNDS,CPIAUCSL \
810
+ --json
811
+ ```
812
+
813
+ Security and behavior:
814
+
815
+ - API keys are read only from `DART_API_KEY`, `FRED_API_KEY`, and `FINNHUB_API_KEY`.
816
+ - `.env*` files are ignored; `.env.example` is placeholder-only.
817
+ - Missing provider keys produce skipped-provider statuses rather than hard failures.
818
+ - Provider requests use bounded timeouts; large FRED series lists are capped to the first 10 unique series.
819
+ - Empty Finnhub profile responses are treated as skipped-provider/no-data results, not profile evidence.
820
+ - Provider errors and rendered reports redact credential-bearing query params such as `crtfc_key`, `api_key`, and `token`.
821
+ - The MCP `external-market-context` tool is read-only and does not initialize or mutate memory storage.
822
+ - `--no-snapshot` / MCP `includeSnapshot: false` disables both `analysis.marketSnapshot` and the DART company snapshot.
823
+
824
+ `MarketContextSnapshot` includes:
825
+
826
+ - `schemaVersion: market-context-snapshot.v1`
827
+ - `subject`: company, DART corpCode, ticker symbol
828
+ - `coverage`: DART/FRED/Finnhub provider status and counts
829
+ - `bullCases`, `bearCases`, `risks`, `catalysts`: deterministic evidence-backed insights
830
+ - `watchlist` and `followUpQuestions`
831
+
832
+ 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
+ }