claude-memory-layer 1.0.30 → 1.0.32

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 (338) hide show
  1. package/README.md +12 -5
  2. package/dist/cli/index.js +4 -3
  3. package/dist/cli/index.js.map +2 -2
  4. package/dist/core/index.js +3 -2
  5. package/dist/core/index.js.map +2 -2
  6. package/dist/hooks/post-tool-use.js +3 -2
  7. package/dist/hooks/post-tool-use.js.map +2 -2
  8. package/dist/hooks/semantic-daemon.js +3 -2
  9. package/dist/hooks/semantic-daemon.js.map +2 -2
  10. package/dist/hooks/session-end.js +3 -2
  11. package/dist/hooks/session-end.js.map +2 -2
  12. package/dist/hooks/session-start.js +3 -2
  13. package/dist/hooks/session-start.js.map +2 -2
  14. package/dist/hooks/stop.js +3 -2
  15. package/dist/hooks/stop.js.map +2 -2
  16. package/dist/hooks/user-prompt-submit.js +3 -2
  17. package/dist/hooks/user-prompt-submit.js.map +2 -2
  18. package/dist/index.js +3 -2
  19. package/dist/index.js.map +2 -2
  20. package/dist/mcp/index.js +3 -2
  21. package/dist/mcp/index.js.map +2 -2
  22. package/dist/server/api/index.js +3 -2
  23. package/dist/server/api/index.js.map +2 -2
  24. package/dist/server/index.js +3 -2
  25. package/dist/server/index.js.map +2 -2
  26. package/dist/services/memory-service.js +3 -2
  27. package/dist/services/memory-service.js.map +2 -2
  28. package/package.json +10 -3
  29. package/scripts/postinstall-embedding-backend.cjs +18 -16
  30. package/AGENTS.md +0 -71
  31. package/CLAUDE.md +0 -30
  32. package/HANDOFF.md +0 -92
  33. package/Memo.txt +0 -558
  34. package/benchmarks/replay/anonymized-real-sessions.json +0 -48
  35. package/config/kpi-thresholds.json +0 -7
  36. package/context.md +0 -636
  37. package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +0 -627
  38. package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +0 -440
  39. package/docs/MCP_MEMORY_SERVICE_COMPARATIVE_REVIEW.md +0 -271
  40. package/docs/MEMORY_USEFULNESS_AUDIT.md +0 -371
  41. package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +0 -80
  42. package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +0 -333
  43. package/docs/MEMU_ADOPTION.md +0 -40
  44. package/docs/OPERATIONS.md +0 -18
  45. package/docs/PRODUCT_VALIDATION_MATRIX.md +0 -82
  46. package/docs/PROJECT_STRUCTURE_ANALYSIS.md +0 -421
  47. package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +0 -501
  48. package/docs/REFACTORING_PLAN_THIN_CORE.md +0 -414
  49. package/docs/REFERENCE_PROJECT_ANALYSES.md +0 -25
  50. package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +0 -452
  51. package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +0 -446
  52. package/docs/architecture/comparison-index.md +0 -47
  53. package/docs/reports/codex-real-data-validation-20260505T040447Z.md +0 -46
  54. package/plan.md +0 -1642
  55. package/scripts/build.ts +0 -159
  56. package/scripts/bump-patch-version.sh +0 -18
  57. package/scripts/delete-unknown-projects.js +0 -154
  58. package/scripts/fix-sync-gap.js +0 -32
  59. package/scripts/generate-session-qrels.ts +0 -126
  60. package/scripts/heartbeat-memory-orchestrator.sh +0 -28
  61. package/scripts/replay-retrieval-benchmark.ts +0 -69
  62. package/scripts/report-sync-gap.js +0 -26
  63. package/scripts/review-queue-auto-resolve.js +0 -21
  64. package/scripts/sync-gap-auto-heal.sh +0 -17
  65. package/spec.md +0 -624
  66. package/specs/20260207-dashboard-upgrade/context.md +0 -38
  67. package/specs/20260207-dashboard-upgrade/spec.md +0 -96
  68. package/specs/citations-system/context.md +0 -243
  69. package/specs/citations-system/plan.md +0 -495
  70. package/specs/citations-system/spec.md +0 -371
  71. package/specs/endless-mode/context.md +0 -305
  72. package/specs/endless-mode/plan.md +0 -620
  73. package/specs/endless-mode/spec.md +0 -455
  74. package/specs/entity-edge-model/context.md +0 -401
  75. package/specs/entity-edge-model/plan.md +0 -459
  76. package/specs/entity-edge-model/spec.md +0 -391
  77. package/specs/evidence-aligner-v2/context.md +0 -401
  78. package/specs/evidence-aligner-v2/plan.md +0 -303
  79. package/specs/evidence-aligner-v2/spec.md +0 -312
  80. package/specs/mcp-desktop-integration/context.md +0 -278
  81. package/specs/mcp-desktop-integration/plan.md +0 -550
  82. package/specs/mcp-desktop-integration/spec.md +0 -494
  83. package/specs/memory-utilization-improvements/context.md +0 -145
  84. package/specs/memory-utilization-improvements/plan.md +0 -361
  85. package/specs/memory-utilization-improvements/spec.md +0 -361
  86. package/specs/post-tool-use-hook/context.md +0 -319
  87. package/specs/post-tool-use-hook/plan.md +0 -469
  88. package/specs/post-tool-use-hook/spec.md +0 -364
  89. package/specs/private-tags/context.md +0 -288
  90. package/specs/private-tags/plan.md +0 -412
  91. package/specs/private-tags/spec.md +0 -345
  92. package/specs/progressive-disclosure/context.md +0 -346
  93. package/specs/progressive-disclosure/plan.md +0 -663
  94. package/specs/progressive-disclosure/spec.md +0 -415
  95. package/specs/selective-tool-observation/context.md +0 -100
  96. package/specs/selective-tool-observation/plan.md +0 -158
  97. package/specs/selective-tool-observation/spec.md +0 -127
  98. package/specs/task-entity-system/context.md +0 -297
  99. package/specs/task-entity-system/plan.md +0 -301
  100. package/specs/task-entity-system/spec.md +0 -314
  101. package/specs/thin-core-refactor/context.md +0 -275
  102. package/specs/thin-core-refactor/plan.md +0 -536
  103. package/specs/thin-core-refactor/spec.md +0 -465
  104. package/specs/vector-outbox-v2/context.md +0 -470
  105. package/specs/vector-outbox-v2/plan.md +0 -562
  106. package/specs/vector-outbox-v2/spec.md +0 -466
  107. package/specs/web-viewer-ui/context.md +0 -384
  108. package/specs/web-viewer-ui/plan.md +0 -797
  109. package/specs/web-viewer-ui/spec.md +0 -516
  110. package/src/adapters/claude/capture/index.ts +0 -3
  111. package/src/adapters/claude/context/index.ts +0 -3
  112. package/src/adapters/claude/hooks/index.ts +0 -21
  113. package/src/adapters/claude/hooks/post-tool-use.ts +0 -239
  114. package/src/adapters/claude/hooks/prompt-injection-policy.ts +0 -104
  115. package/src/adapters/claude/hooks/semantic-daemon-client.ts +0 -209
  116. package/src/adapters/claude/hooks/semantic-daemon.ts +0 -283
  117. package/src/adapters/claude/hooks/session-end.ts +0 -59
  118. package/src/adapters/claude/hooks/session-start.ts +0 -73
  119. package/src/adapters/claude/hooks/stop.ts +0 -128
  120. package/src/adapters/claude/hooks/user-prompt-submit.ts +0 -361
  121. package/src/adapters/claude/index.ts +0 -4
  122. package/src/adapters/claude/transcript/index.ts +0 -4
  123. package/src/adapters/claude/transcript/transcript-reader.ts +0 -57
  124. package/src/adapters/claude/transcript/turn-reconstructor.ts +0 -65
  125. package/src/apps/cli/claude-settings-hooks.ts +0 -138
  126. package/src/apps/cli/codex-import-runner.ts +0 -125
  127. package/src/apps/cli/codex-validation-output.ts +0 -95
  128. package/src/apps/cli/hermes-import-runner.ts +0 -130
  129. package/src/apps/cli/hermes-validation-output.ts +0 -91
  130. package/src/apps/cli/index.ts +0 -1735
  131. package/src/apps/cli/mcp-install.ts +0 -106
  132. package/src/apps/cli/retrieval-disclosure-output.ts +0 -196
  133. package/src/apps/dashboard/assets/js/bootstrap.js +0 -244
  134. package/src/apps/dashboard/assets/js/chat.js +0 -373
  135. package/src/apps/dashboard/assets/js/disclosure.js +0 -232
  136. package/src/apps/dashboard/assets/js/modals.js +0 -298
  137. package/src/apps/dashboard/assets/js/overview.js +0 -655
  138. package/src/apps/dashboard/assets/js/state.js +0 -72
  139. package/src/apps/dashboard/assets/js/views.js +0 -468
  140. package/src/apps/dashboard/index.html +0 -543
  141. package/src/apps/dashboard/index.ts +0 -3
  142. package/src/apps/dashboard/style.css +0 -1750
  143. package/src/apps/index.ts +0 -5
  144. package/src/apps/server/api/chat.ts +0 -244
  145. package/src/apps/server/api/citations.ts +0 -105
  146. package/src/apps/server/api/events.ts +0 -137
  147. package/src/apps/server/api/health.ts +0 -53
  148. package/src/apps/server/api/index.ts +0 -26
  149. package/src/apps/server/api/projects.ts +0 -74
  150. package/src/apps/server/api/search.ts +0 -184
  151. package/src/apps/server/api/sessions.ts +0 -115
  152. package/src/apps/server/api/stats.ts +0 -723
  153. package/src/apps/server/api/turns.ts +0 -143
  154. package/src/apps/server/api/utils.ts +0 -65
  155. package/src/apps/server/index.ts +0 -111
  156. package/src/cli/index.ts +0 -3
  157. package/src/cli/retrieval-disclosure-output.ts +0 -2
  158. package/src/compat/index.ts +0 -5
  159. package/src/core/canonical-key.ts +0 -186
  160. package/src/core/citation-generator.ts +0 -63
  161. package/src/core/consolidated-store.ts +0 -356
  162. package/src/core/consolidation-worker.ts +0 -493
  163. package/src/core/context-formatter.ts +0 -276
  164. package/src/core/continuity-manager.ts +0 -341
  165. package/src/core/db-wrapper.ts +0 -64
  166. package/src/core/derive/fact-deriver.ts +0 -170
  167. package/src/core/derive/index.ts +0 -2
  168. package/src/core/derive/summary-deriver.ts +0 -76
  169. package/src/core/edge-repo.ts +0 -333
  170. package/src/core/embedder.ts +0 -4
  171. package/src/core/engine/embedding-maintenance-service.ts +0 -187
  172. package/src/core/engine/endless-memory-services.ts +0 -4
  173. package/src/core/engine/index.ts +0 -19
  174. package/src/core/engine/memory-engine-services.ts +0 -170
  175. package/src/core/engine/memory-ingest-service.ts +0 -317
  176. package/src/core/engine/memory-query-service.ts +0 -173
  177. package/src/core/engine/memory-runtime-service.ts +0 -162
  178. package/src/core/engine/memory-service-composition.ts +0 -231
  179. package/src/core/engine/retrieval-analytics-service.ts +0 -181
  180. package/src/core/engine/retrieval-disclosure-service.ts +0 -420
  181. package/src/core/engine/retrieval-orchestrator.ts +0 -377
  182. package/src/core/engine/retrieval-services.ts +0 -176
  183. package/src/core/engine/shared-memory-services.ts +0 -4
  184. package/src/core/entity-repo.ts +0 -349
  185. package/src/core/event-store.ts +0 -779
  186. package/src/core/evidence-aligner.ts +0 -635
  187. package/src/core/external-market-context.ts +0 -582
  188. package/src/core/graduation-worker.ts +0 -171
  189. package/src/core/graduation.ts +0 -377
  190. package/src/core/index.ts +0 -64
  191. package/src/core/ingest-interceptor.ts +0 -80
  192. package/src/core/markdown-mirror.ts +0 -70
  193. package/src/core/matcher.ts +0 -208
  194. package/src/core/md-mirror.ts +0 -92
  195. package/src/core/metadata-extractor.ts +0 -203
  196. package/src/core/model/memory-fact.ts +0 -30
  197. package/src/core/model/memory-rule.ts +0 -14
  198. package/src/core/model/memory-summary.ts +0 -21
  199. package/src/core/model/raw-event.ts +0 -28
  200. package/src/core/model/retrieval-result.ts +0 -35
  201. package/src/core/mongo-sync-config.ts +0 -165
  202. package/src/core/mongo-sync-worker.ts +0 -381
  203. package/src/core/privacy/filter.ts +0 -190
  204. package/src/core/privacy/index.ts +0 -20
  205. package/src/core/privacy/tag-parser.ts +0 -145
  206. package/src/core/product-validation-matrix.ts +0 -314
  207. package/src/core/progressive-retriever.ts +0 -414
  208. package/src/core/registry/project-path.ts +0 -54
  209. package/src/core/registry/session-registry.ts +0 -69
  210. package/src/core/replay-evaluator.ts +0 -625
  211. package/src/core/retrieval-benchmark.ts +0 -117
  212. package/src/core/retrieval-quality.ts +0 -109
  213. package/src/core/retriever.ts +0 -800
  214. package/src/core/session-qrels.ts +0 -360
  215. package/src/core/shared-event-store.ts +0 -114
  216. package/src/core/shared-promoter.ts +0 -249
  217. package/src/core/shared-store.ts +0 -289
  218. package/src/core/shared-vector-store.ts +0 -203
  219. package/src/core/sqlite-event-store.ts +0 -1846
  220. package/src/core/sqlite-wrapper.ts +0 -116
  221. package/src/core/sync-worker.ts +0 -228
  222. package/src/core/tag-taxonomy.ts +0 -51
  223. package/src/core/task/blocker-resolver.ts +0 -333
  224. package/src/core/task/index.ts +0 -9
  225. package/src/core/task/task-matcher.ts +0 -240
  226. package/src/core/task/task-projector.ts +0 -358
  227. package/src/core/task/task-resolver.ts +0 -421
  228. package/src/core/turn-state.ts +0 -207
  229. package/src/core/types.ts +0 -952
  230. package/src/core/vector-outbox.ts +0 -299
  231. package/src/core/vector-store.ts +0 -231
  232. package/src/core/vector-worker.ts +0 -521
  233. package/src/core/working-set-store.ts +0 -257
  234. package/src/extensions/endless-memory/endless-memory-services.ts +0 -350
  235. package/src/extensions/endless-memory/index.ts +0 -1
  236. package/src/extensions/index.ts +0 -5
  237. package/src/extensions/mcp/handlers.ts +0 -960
  238. package/src/extensions/mcp/index.ts +0 -48
  239. package/src/extensions/mcp/tools.ts +0 -252
  240. package/src/extensions/shared-memory/index.ts +0 -1
  241. package/src/extensions/shared-memory/shared-memory-services.ts +0 -211
  242. package/src/extensions/vector/embedder.ts +0 -233
  243. package/src/extensions/vector/index.ts +0 -1
  244. package/src/hooks/post-tool-use.ts +0 -9
  245. package/src/hooks/semantic-daemon-client.ts +0 -1
  246. package/src/hooks/semantic-daemon.ts +0 -11
  247. package/src/hooks/session-end.ts +0 -9
  248. package/src/hooks/session-start.ts +0 -9
  249. package/src/hooks/stop.ts +0 -9
  250. package/src/hooks/user-prompt-submit.ts +0 -9
  251. package/src/index.ts +0 -13
  252. package/src/mcp/handlers.ts +0 -2
  253. package/src/mcp/index.ts +0 -4
  254. package/src/mcp/tools.ts +0 -2
  255. package/src/server/api/chat.ts +0 -2
  256. package/src/server/api/citations.ts +0 -2
  257. package/src/server/api/events.ts +0 -2
  258. package/src/server/api/health.ts +0 -2
  259. package/src/server/api/index.ts +0 -2
  260. package/src/server/api/projects.ts +0 -2
  261. package/src/server/api/search.ts +0 -2
  262. package/src/server/api/sessions.ts +0 -2
  263. package/src/server/api/stats.ts +0 -2
  264. package/src/server/api/turns.ts +0 -2
  265. package/src/server/api/utils.ts +0 -2
  266. package/src/server/index.ts +0 -2
  267. package/src/services/bootstrap-organizer.ts +0 -463
  268. package/src/services/codex-session-history-importer.ts +0 -966
  269. package/src/services/hermes-session-history-importer.ts +0 -733
  270. package/src/services/memory-service-config.ts +0 -36
  271. package/src/services/memory-service-registry.ts +0 -150
  272. package/src/services/memory-service.ts +0 -688
  273. package/src/services/session-history-importer.ts +0 -629
  274. package/tests/README.md +0 -23
  275. package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +0 -54
  276. package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +0 -98
  277. package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +0 -99
  278. package/tests/apps/app-layer-boundary.test.ts +0 -48
  279. package/tests/apps/claude-settings-hooks.test.ts +0 -107
  280. package/tests/apps/cli-disclosure-output.test.ts +0 -212
  281. package/tests/apps/codex-import-runner.test.ts +0 -99
  282. package/tests/apps/codex-validation-output.test.ts +0 -100
  283. package/tests/apps/hermes-import-runner.test.ts +0 -99
  284. package/tests/apps/mcp-install-command.test.ts +0 -59
  285. package/tests/apps/package-build-entrypoints.test.ts +0 -30
  286. package/tests/apps/postinstall-embedding-backend.test.ts +0 -175
  287. package/tests/apps/search-api-disclosure.test.ts +0 -162
  288. package/tests/apps/stats-api-lightweight.test.ts +0 -67
  289. package/tests/apps/ui-disclosure-output.test.ts +0 -140
  290. package/tests/core/bootstrap-organizer.test.ts +0 -111
  291. package/tests/core/canonical-key.test.ts +0 -101
  292. package/tests/core/codex-session-history-importer-validation.test.ts +0 -185
  293. package/tests/core/consolidation-worker.test.ts +0 -75
  294. package/tests/core/embedding-maintenance-service.test.ts +0 -282
  295. package/tests/core/evidence-aligner.test.ts +0 -152
  296. package/tests/core/external-market-context.test.ts +0 -209
  297. package/tests/core/fact-deriver.test.ts +0 -79
  298. package/tests/core/hermes-session-history-importer-validation.test.ts +0 -609
  299. package/tests/core/ingest-interceptor.test.ts +0 -38
  300. package/tests/core/markdown-mirror.test.ts +0 -85
  301. package/tests/core/matcher.test.ts +0 -112
  302. package/tests/core/md-mirror.test.ts +0 -50
  303. package/tests/core/memory-engine-services.test.ts +0 -240
  304. package/tests/core/memory-ingest-service.test.ts +0 -296
  305. package/tests/core/memory-query-service.test.ts +0 -129
  306. package/tests/core/memory-runtime-service.test.ts +0 -201
  307. package/tests/core/memory-service-composition.test.ts +0 -192
  308. package/tests/core/memory-service-config.test.ts +0 -41
  309. package/tests/core/memory-service-facade.test.ts +0 -30
  310. package/tests/core/memory-service-registry.test.ts +0 -206
  311. package/tests/core/product-validation-matrix.test.ts +0 -61
  312. package/tests/core/project-registry.test.ts +0 -78
  313. package/tests/core/replay-evaluator.test.ts +0 -181
  314. package/tests/core/retrieval-analytics-service.test.ts +0 -210
  315. package/tests/core/retrieval-benchmark.test.ts +0 -93
  316. package/tests/core/retrieval-disclosure-service.test.ts +0 -264
  317. package/tests/core/retrieval-orchestrator.test.ts +0 -403
  318. package/tests/core/retrieval-quality.test.ts +0 -31
  319. package/tests/core/retrieval-services.test.ts +0 -185
  320. package/tests/core/retriever-fallback-chain.test.ts +0 -223
  321. package/tests/core/retriever-strategy-scope.test.ts +0 -164
  322. package/tests/core/retriever.memu-adoption.test.ts +0 -122
  323. package/tests/core/session-history-importer-filter.test.ts +0 -78
  324. package/tests/core/session-qrels.test.ts +0 -250
  325. package/tests/core/sqlite-event-store-replication.test.ts +0 -127
  326. package/tests/core/summary-deriver.test.ts +0 -66
  327. package/tests/extensions/embedder-warning-suppression.test.ts +0 -83
  328. package/tests/extensions/endless-memory-extension-boundary.test.ts +0 -17
  329. package/tests/extensions/endless-memory-services.test.ts +0 -325
  330. package/tests/extensions/mcp-context-tools.test.ts +0 -905
  331. package/tests/extensions/mcp-extension-boundary.test.ts +0 -21
  332. package/tests/extensions/mcp-package-build.test.ts +0 -22
  333. package/tests/extensions/mcp-project-aware-tools.test.ts +0 -102
  334. package/tests/extensions/shared-memory-extension-boundary.test.ts +0 -24
  335. package/tests/extensions/shared-memory-services.test.ts +0 -309
  336. package/tests/extensions/vector-extension-boundary.test.ts +0 -21
  337. package/tsconfig.json +0 -24
  338. package/vitest.config.ts +0 -15
@@ -1,314 +0,0 @@
1
- # Task Entity System Specification
2
-
3
- > **Version**: 1.0.0
4
- > **Status**: Draft
5
- > **Created**: 2026-01-31
6
-
7
- ## 1. 개요
8
-
9
- ### 1.1 문제 정의
10
-
11
- 현재 시스템에서 Task는 세션별로 entry(기록)로 저장되어 다음 문제가 발생:
12
-
13
- 1. **중복 생성**: 같은 Task가 여러 세션에서 언급될 때마다 새 entry 생성
14
- 2. **상태 단절**: Task 상태 변경 이력이 세션 단위로 분리되어 추적 불가
15
- 3. **관계 손실**: Task 간 blockedBy 관계가 세션 경계에서 단절
16
-
17
- ### 1.2 해결 방향
18
-
19
- **Task를 Entity로 승격**:
20
- - Task는 고유한 Entity로 관리 (entries와 분리된 entities 테이블)
21
- - 상태 변경은 이벤트로 기록 (event-sourced)
22
- - fold 연산으로 현재 상태 계산
23
-
24
- ## 2. 핵심 개념
25
-
26
- ### 2.1 Entity vs Entry
27
-
28
- | 구분 | Entry (기존) | Entity (신규) |
29
- |------|-------------|--------------|
30
- | 정의 | 세션에서 추출된 불변 기록 | 시간에 따라 상태가 변화하는 개체 |
31
- | 예시 | Fact, Decision, Insight | Task, Condition, Artifact |
32
- | 식별 | entry_id (UUID) | entity_id + canonical_key |
33
- | 상태 | 불변 (created once) | 이벤트 fold로 계산 |
34
-
35
- ### 2.2 Canonical Key
36
-
37
- Entity의 동일성을 판단하는 정규화된 키:
38
-
39
- ```typescript
40
- // Task
41
- task:{project}:{normalize(title)}
42
- // 예: task:code-memory:implement-vector-search
43
-
44
- // Condition
45
- cond:{project}:{normalize(text)}
46
- // 예: cond:code-memory:api-key-configured
47
-
48
- // Artifact
49
- art:url:{sha1(url)} // URL
50
- art:jira:{key} // JIRA
51
- art:gh_issue:{repo}:{num} // GitHub Issue
52
- ```
53
-
54
- ### 2.3 Task 상태 머신
55
-
56
- ```
57
- ┌─────────────────────────────────────┐
58
- │ │
59
- ▼ │
60
- ┌─────────┐ ┌───────────┐ ┌────────┴───┐
61
- │ pending │────▶│in_progress│────▶│ done │
62
- └────┬────┘ └─────┬─────┘ └────────────┘
63
- │ │
64
- │ ▼
65
- │ ┌──────────┐
66
- └─────────▶│ blocked │
67
- └──────────┘
68
-
69
- │ (blockers 해결 시)
70
-
71
- ┌──────────┐
72
- │in_progress│
73
- └──────────┘
74
- ```
75
-
76
- **불변식 (Invariants)**:
77
- - `blocked` 상태면 `blockers[]` 비어있으면 안 됨
78
- - `done` 상태면 `blockers[]` 비어있어야 함
79
- - `pending` → `done` 직접 전이 금지 (in_progress 거쳐야 함)
80
-
81
- ## 3. 이벤트 타입
82
-
83
- ### 3.1 Task 이벤트
84
-
85
- ```typescript
86
- type TaskEventType =
87
- | 'task_created' // 신규 생성
88
- | 'task_status_changed' // 상태 변경
89
- | 'task_priority_changed' // 우선순위 변경
90
- | 'task_blockers_set' // blockers 설정/변경
91
- | 'task_transition_rejected'; // 전이 거부 (디버깅용)
92
- ```
93
-
94
- ### 3.2 이벤트 페이로드 스키마
95
-
96
- ```typescript
97
- // task_created
98
- interface TaskCreatedPayload {
99
- task_id: string;
100
- canonical_key: string;
101
- title: string;
102
- initial_status: 'pending' | 'in_progress'; // done 금지
103
- priority?: 'low' | 'medium' | 'high' | 'critical';
104
- source_entry_id: string;
105
- }
106
-
107
- // task_status_changed
108
- interface TaskStatusChangedPayload {
109
- task_id: string;
110
- from_status: TaskStatus;
111
- to_status: TaskStatus;
112
- reason?: string;
113
- }
114
-
115
- // task_blockers_set
116
- interface TaskBlockersSetPayload {
117
- task_id: string;
118
- mode: 'replace' | 'suggest';
119
- blockers: BlockerRef[];
120
- source_entry_id?: string;
121
- }
122
- ```
123
-
124
- ## 4. 컴포넌트 설계
125
-
126
- ### 4.1 TaskMatcher
127
-
128
- 기존 Task 찾기:
129
-
130
- ```typescript
131
- interface TaskMatcher {
132
- // 정확한 매칭
133
- findExact(canonicalKey: string): Task | null;
134
-
135
- // 유사도 기반 매칭
136
- findSimilar(title: string, project: string): MatchResult;
137
-
138
- // 후보 목록 반환
139
- suggestCandidates(title: string, project: string, limit?: number): Task[];
140
- }
141
-
142
- // 매칭 조건 (strict 확정)
143
- const STRICT_MATCH = {
144
- minScore: 0.92,
145
- minGap: 0.03, // top1 - top2
146
- status: ['active'], // cancelled 제외
147
- taskStatus: ['pending', 'in_progress', 'blocked'] // done 제외
148
- };
149
- ```
150
-
151
- ### 4.2 BlockerResolver
152
-
153
- blockedBy 텍스트를 Entity 참조로 변환:
154
-
155
- ```typescript
156
- interface BlockerRef {
157
- kind: 'task' | 'condition' | 'artifact';
158
- entity_id: string;
159
- raw_text: string;
160
- confidence: 'high' | 'suggested' | 'none';
161
- candidates?: EntityRef[]; // confidence='none'일 때
162
- }
163
-
164
- interface BlockerResolver {
165
- resolve(
166
- blockedByTexts: string[],
167
- project: string,
168
- sourceEntryId: string
169
- ): Promise<BlockerRef[]>;
170
- }
171
- ```
172
-
173
- **해결 규칙**:
174
- 1. 강한 패턴 (URL, JIRA key) → Artifact로 get-or-create
175
- 2. 명시 task_id → Task 연결 (없으면 Condition으로 fallback)
176
- 3. Task 제목 매칭 실패 → Condition으로 생성 + candidates 저장
177
- 4. **스텁 Task 생성 금지** (중복 지옥 방지)
178
-
179
- ### 4.3 TaskResolver
180
-
181
- 세션에서 추출된 Task entry 처리:
182
-
183
- ```typescript
184
- interface TaskResolver {
185
- processTaskEntry(entry: TaskEntry): Promise<{
186
- task_id: string;
187
- events: TaskEvent[];
188
- isNew: boolean;
189
- }>;
190
- }
191
- ```
192
-
193
- **처리 흐름**:
194
- 1. canonical_key로 기존 Task 찾기
195
- 2. 없으면 `task_created` 이벤트 발행
196
- 3. priority/status 변경 필요 시 이벤트 발행
197
- 4. blockers가 있으면 BlockerResolver로 정규화
198
- 5. evidenceAligned → `mode=replace`, 아니면 `mode=suggest`
199
- 6. `task_blockers_set` 이벤트 발행
200
-
201
- ### 4.4 TaskProjector
202
-
203
- 이벤트를 entities/edges에 반영:
204
-
205
- ```typescript
206
- interface TaskProjector {
207
- // 증분 처리
208
- projectIncremental(): Promise<ProjectionResult>;
209
-
210
- // 전체 rebuild
211
- rebuild(): Promise<void>;
212
- }
213
- ```
214
-
215
- **mode=replace**:
216
- - 기존 blocked_by edges 삭제
217
- - 새 edges 삽입
218
- - entities.current_json.blockers 갱신
219
-
220
- **mode=suggest**:
221
- - blocked_by_suggested edges만 insert/replace
222
- - entities.current_json.blocker_suggestions 누적
223
-
224
- ## 5. DB 스키마
225
-
226
- ### 5.1 entities 테이블
227
-
228
- ```sql
229
- CREATE TABLE entities (
230
- entity_id VARCHAR PRIMARY KEY,
231
- entity_type VARCHAR NOT NULL, -- task|condition|artifact
232
- canonical_key VARCHAR NOT NULL,
233
- title VARCHAR NOT NULL,
234
- stage VARCHAR NOT NULL, -- raw|working|candidate|verified|certified
235
- status VARCHAR NOT NULL, -- active|contested|deprecated|superseded
236
- current_json JSON NOT NULL, -- fold된 현재 상태
237
- title_norm VARCHAR, -- 정규화된 제목 (검색용)
238
- search_text VARCHAR, -- FTS용 텍스트
239
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
240
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
241
- );
242
-
243
- CREATE INDEX idx_entities_type_key ON entities(entity_type, canonical_key);
244
- CREATE INDEX idx_entities_status ON entities(status);
245
- ```
246
-
247
- ### 5.2 entity_aliases 테이블
248
-
249
- 동일 Entity의 여러 이름:
250
-
251
- ```sql
252
- CREATE TABLE entity_aliases (
253
- entity_type VARCHAR NOT NULL,
254
- canonical_key VARCHAR NOT NULL,
255
- entity_id VARCHAR NOT NULL,
256
- is_primary BOOLEAN DEFAULT FALSE,
257
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
258
- PRIMARY KEY(entity_type, canonical_key)
259
- );
260
- ```
261
-
262
- ## 6. Idris2 영감 적용
263
-
264
- ### 6.1 타입 레벨 보장 (TypeScript)
265
-
266
- ```typescript
267
- // Discriminated Union으로 상태별 타입 분리
268
- type TaskState =
269
- | { status: 'pending'; blockers?: never }
270
- | { status: 'in_progress'; blockers?: never }
271
- | { status: 'blocked'; blockers: BlockerRef[] } // 비어있으면 안 됨
272
- | { status: 'done'; blockers?: never };
273
-
274
- // 타입 가드
275
- function isBlocked(task: TaskState): task is { status: 'blocked'; blockers: BlockerRef[] } {
276
- return task.status === 'blocked' && task.blockers.length > 0;
277
- }
278
- ```
279
-
280
- ### 6.2 불변식 검증
281
-
282
- ```typescript
283
- // Zod 스키마로 런타임 검증
284
- const TaskInvariantSchema = z.discriminatedUnion('status', [
285
- z.object({
286
- status: z.literal('blocked'),
287
- blockers: z.array(BlockerRefSchema).min(1) // 최소 1개
288
- }),
289
- z.object({
290
- status: z.literal('done'),
291
- blockers: z.array(BlockerRefSchema).max(0) // 0개
292
- }),
293
- // ...
294
- ]);
295
- ```
296
-
297
- ### 6.3 왜 실제 Idris2를 사용하지 않는가?
298
-
299
- **Memo.txt 지침** (섹션 11):
300
- > "지금은 Python 쪽 구현이 핵심이므로, Idris는 Candidate/Verified 래퍼 기반으로만 최소 수정"
301
-
302
- **실용적 이유**:
303
- 1. 팀 학습 곡선 최소화
304
- 2. 도구 체인 단순화 (idris2 설치/관리 불필요)
305
- 3. TypeScript + Zod로 충분한 타입 안전성 확보
306
- 4. 런타임 검증이 실제 버그 방지에 더 효과적
307
-
308
- ## 7. 성공 기준
309
-
310
- - [ ] Task가 세션 간 동일성 유지 (canonical_key 기반)
311
- - [ ] 상태 변경 이력이 이벤트로 추적 가능
312
- - [ ] blockers가 Entity 참조로 정규화됨
313
- - [ ] 불변식 위반 시 에러 발생 (blocked인데 blockers 비어있음 등)
314
- - [ ] 기존 entry 시스템과 호환 유지
@@ -1,275 +0,0 @@
1
- # Thin Core Refactor Context
2
-
3
- > **Version**: 1.0.0
4
- > **Created**: 2026-04-30
5
-
6
- ## 1. 배경
7
-
8
- `claude-memory-layer`는 본래 Claude Code용 메모리 플러그인/레이어로 출발했지만, 현재는 다음을 모두 품고 있다.
9
-
10
- - hook-based memory capture
11
- - SQLite primary event storage
12
- - vector indexing and retrieval
13
- - markdown mirror
14
- - local dashboard and REST API
15
- - shared memory concepts
16
- - optional Mongo sync
17
- - continuity / working set / consolidated memories
18
- - partial MCP surface
19
-
20
- 이 자체는 강점이다. 하지만 시간이 지나며 **코어 엔진과 확장 기능의 경계가 흐려지고 있다.**
21
-
22
- ---
23
-
24
- ## 2. 현재 구조의 핵심 특징
25
-
26
- ### 2.1 강점
27
-
28
- 1. **Claude lifecycle에 깊게 붙어 있음**
29
- - SessionStart / UserPromptSubmit / PostToolUse / Stop / SessionEnd를 통한 풍부한 capture 가능
30
-
31
- 2. **실전적인 retrieval**
32
- - vector + keyword + fallback chain + progressive retrieval + semantic daemon
33
-
34
- 3. **프로젝트 격리 설계**
35
- - project hash 기반 local storage isolation
36
-
37
- 4. **운영 관찰성**
38
- - dashboard, health, retrieval traces, helpfulness signals
39
-
40
- ### 2.2 약점
41
-
42
- 1. **`MemoryService` 비대화**
43
- - orchestration을 넘어 multi-subsystem god service에 가까워짐
44
-
45
- 2. **source of truth ambiguity 위험**
46
- - SQLite / LanceDB / markdown / shared / Mongo sync의 관계가 신규 독자에게 즉시 명확하지 않음
47
-
48
- 3. **문서 drift**
49
- - docs와 실제 코드가 일부 어긋남
50
-
51
- 4. **확장 기능의 코어 침투**
52
- - shared / continuity / analytics / vector concerns가 코어 경계 안에 많이 들어와 있음
53
-
54
- ---
55
-
56
- ## 3. 외부 레퍼런스에서 얻은 시사점
57
-
58
- ## 3.1 memsearch에서 얻은 시사점
59
-
60
- `memsearch`의 가장 큰 장점은 **코어가 작고 선명하다**는 점이다.
61
-
62
- 배울 점:
63
- 1. **source of truth가 분명함**
64
- - markdown canonical, vector index derived
65
-
66
- 2. **plugin/adaptation 분리**
67
- - core library와 platform integration이 비교적 분리됨
68
-
69
- 3. **progressive disclosure UX**
70
- - search → expand → transcript drill-down
71
-
72
- 4. **incremental / deterministic indexing 관점**
73
- - stable chunk IDs
74
-
75
- 해석:
76
- - `claude-memory-layer`는 memsearch처럼 단순해질 필요는 없지만,
77
- - 최소한 **코어를 다시 설명 가능한 단위로 줄이는 discipline**은 배워야 한다.
78
-
79
- ## 3.2 superlocalmemory에서 얻은 시사점
80
-
81
- `superlocalmemory`는 엄청 강력하지만 매우 큰 플랫폼이다.
82
-
83
- 가져올 만한 개념:
84
- 1. **raw memory vs atomic facts 분리**
85
- 2. **SQLite 중심 로컬 엔진 철학**
86
- 3. **검색 결과 explainability**
87
- 4. **lightweight feedback loop**
88
-
89
- 가져오지 말아야 할 것:
90
- 1. full platform sprawl
91
- 2. 너무 넓은 MCP/mesh/systems surface
92
- 3. 한 repo에 너무 많은 제품 축을 동시에 키우는 방식
93
-
94
- 해석:
95
- - `claude-memory-layer`는 superlocalmemory처럼 모든 방향으로 커지기보다,
96
- - 거기서 **좋은 모델링 개념만 선택적으로 흡수**해야 한다.
97
-
98
- ---
99
-
100
- ## 4. 왜 thin-core 방향인가
101
-
102
- thin-core 방향은 단순히 “코드를 예쁘게 나누자”는 얘기가 아니다.
103
-
104
- 이 방향이 필요한 이유는 다음과 같다.
105
-
106
- ### 4.1 유지보수 속도 회복
107
- 기능이 많을수록, 새로운 기능 추가보다 “어디에 넣어야 하는지” 결정 비용이 커진다.
108
- 경계를 다시 세우지 않으면 개발 속도가 급격히 느려진다.
109
-
110
- ### 4.2 오류 격리
111
- vector, hooks, shared memory, dashboard, MCP 문제가 모두 core 문제처럼 보이면 디버깅이 어려워진다.
112
-
113
- ### 4.3 테스트 구조 단순화
114
- core / adapter / extension / app이 분리되면,
115
- 각 계층 테스트 목적이 분명해진다.
116
-
117
- ### 4.4 제품 집중력 유지
118
- 현재 프로젝트의 가장 큰 강점은 “Claude 특화 memory experience”다.
119
- 이를 유지하려면 오히려 코어를 가볍게 만들어 adapter 경쟁력을 살려야 한다.
120
-
121
- ---
122
-
123
- ## 5. 새 구조의 개념적 역할
124
-
125
- ### Core
126
- 이 시스템이 **반드시** 해야 하는 일만 맡는다.
127
-
128
- - raw events 저장
129
- - facts/summaries derivation
130
- - retrieval
131
- - source tracing
132
- - registry
133
- - journal projection
134
-
135
- ### Adapter (Claude)
136
- Claude Code라는 외부 시스템과 대화하는 법을 안다.
137
-
138
- - hook payload
139
- - transcript parsing
140
- - tool capture policy
141
- - additionalContext formatting
142
-
143
- ### Extensions
144
- 있으면 좋은 기능들.
145
-
146
- - vector acceleration
147
- - analytics
148
- - shared memory
149
- - Mongo sync
150
- - MCP
151
- - continuity systems
152
-
153
- ### Apps
154
- 사용자-facing entrypoints.
155
-
156
- - CLI
157
- - server
158
- - dashboard
159
-
160
- ---
161
-
162
- ## 6. 핵심 도메인 재정의 이유
163
-
164
- ### 6.1 RawEvent
165
- 현재 시스템은 대화/툴/세션 마커가 모두 비슷한 흐름으로 다뤄지지만, conceptual model은 충분히 분명하지 않다.
166
-
167
- RawEvent를 분리하면:
168
- - ingest가 단순해지고
169
- - 원본 보존이 쉬워지고
170
- - source tracing이 쉬워진다.
171
-
172
- ### 6.2 MemoryFact
173
- 검색 시스템이 진짜 필요로 하는 것은 항상 전체 transcript가 아니다.
174
- 작고 검색 가능한 fact unit이 더 실용적이다.
175
-
176
- 분리 효과:
177
- - retrieval 품질 향상
178
- - future reranking 확장 쉬움
179
- - code-aware anchor 연결 쉬움
180
-
181
- ### 6.3 MemorySummary
182
- session/project continuity는 중요하지만 raw event와 같은 층에 두면 혼란스럽다.
183
- 요약을 별도 층으로 두면:
184
- - low-token retrieval
185
- - dashboard readability
186
- - export/journal readability
187
- 가 좋아진다.
188
-
189
- ### 6.4 MemoryRule
190
- 반복되는 선호/관례는 단순 fact가 아니다.
191
- 별도 개념으로 두는 편이 장기적으로 낫다.
192
-
193
- ---
194
-
195
- ## 7. 저장 계층 역할 정리 배경
196
-
197
- 현재는 “실제로 뭐가 원본이고 뭐가 파생인지”를 코드를 다 읽어야 이해된다.
198
- 이건 좋지 않다.
199
-
200
- 권장 해석:
201
- - **SQLite** = authoritative store
202
- - **Markdown journal** = 사람이 읽는 canonical projection
203
- - **LanceDB** = disposable acceleration layer
204
- - **shared/Mongo** = replication/extension
205
-
206
- 이 정리가 있으면:
207
- - 운영 판단이 쉬워지고
208
- - 장애 복구가 쉬워지고
209
- - 문서가 정직해진다.
210
-
211
- ---
212
-
213
- ## 8. retrieval UX를 왜 제품화해야 하나
214
-
215
- 현재 retrieval 능력 자체는 이미 꽤 좋다.
216
- 문제는 그것이 사용자/개발자에게 **명확한 mental model**로 전달되지 않는다는 점이다.
217
-
218
- memsearch의 시사점:
219
- - search
220
- - expand
221
- - transcript/source
222
-
223
- 이 3단 구조는 매우 이해하기 쉽다.
224
-
225
- `claude-memory-layer`도 이를 도입하면:
226
- - CLI가 더 명확해지고
227
- - API가 더 깔끔해지고
228
- - dashboard도 더 설명 가능해진다.
229
-
230
- ---
231
-
232
- ## 9. 코드 레벨 이행 전략 배경
233
-
234
- 완전 재작성은 위험하다.
235
- 이 프로젝트는 이미 훅/CLI/server/dashboard가 연결되어 있어 regression 위험이 크다.
236
-
237
- 따라서 다음 전략이 적합하다.
238
-
239
- ### Strangler migration
240
- 1. 새 경계 먼저 만든다
241
- 2. 새 타입 먼저 도입한다
242
- 3. 기존 facade는 유지한다
243
- 4. 내부 구현만 조금씩 새 서비스로 대체한다
244
- 5. 마지막에 legacy wrapper를 줄인다
245
-
246
- 이 전략의 장점:
247
- - 작은 커밋 가능
248
- - revert 쉬움
249
- - 기능 중단 최소화
250
-
251
- ---
252
-
253
- ## 10. 성공 시 기대 상태
254
-
255
- 리팩터링이 성공하면 다음이 가능해야 한다.
256
-
257
- 1. 신규 개발자가 구조를 빠르게 설명할 수 있다.
258
- 2. vector index가 없어도 core memory는 쓸 수 있다.
259
- 3. Claude hooks는 강력하지만 core와 느슨하게 결합된다.
260
- 4. shared/MCP/continuity를 끄거나 발전시켜도 core에 미치는 영향이 작다.
261
- 5. 향후 code-aware memory anchor나 lightweight graph를 안전하게 넣을 수 있다.
262
-
263
- ---
264
-
265
- ## 11. 최종 맥락 요약
266
-
267
- 이번 리팩터링은 기능 축소 프로젝트가 아니다.
268
-
269
- 정확히는:
270
- - **코어를 다시 작게 정의하고**
271
- - **Claude 특화 강점은 더 분명하게 살리고**
272
- - **무거운 기능은 올바른 곳으로 이동시키는 프로젝트**다.
273
-
274
- 즉, 이 작업은 구조 미화가 아니라,
275
- `claude-memory-layer`를 앞으로도 계속 빠르게 발전시킬 수 있게 만드는 **장기 유지보수 투자**다.