claude-memory-layer 1.0.31 → 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 (313) hide show
  1. package/README.md +9 -2
  2. package/dist/cli/index.js +1 -1
  3. package/package.json +11 -2
  4. package/scripts/postinstall-embedding-backend.cjs +16 -12
  5. package/AGENTS.md +0 -71
  6. package/CLAUDE.md +0 -30
  7. package/HANDOFF.md +0 -92
  8. package/Memo.txt +0 -558
  9. package/benchmarks/replay/anonymized-real-sessions.json +0 -48
  10. package/config/kpi-thresholds.json +0 -7
  11. package/context.md +0 -636
  12. package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +0 -627
  13. package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +0 -440
  14. package/docs/MCP_MEMORY_SERVICE_COMPARATIVE_REVIEW.md +0 -271
  15. package/docs/MEMORY_USEFULNESS_AUDIT.md +0 -371
  16. package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +0 -80
  17. package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +0 -333
  18. package/docs/MEMU_ADOPTION.md +0 -40
  19. package/docs/OPERATIONS.md +0 -18
  20. package/docs/PRODUCT_VALIDATION_MATRIX.md +0 -82
  21. package/docs/PROJECT_STRUCTURE_ANALYSIS.md +0 -421
  22. package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +0 -501
  23. package/docs/REFACTORING_PLAN_THIN_CORE.md +0 -414
  24. package/docs/REFERENCE_PROJECT_ANALYSES.md +0 -25
  25. package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +0 -452
  26. package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +0 -446
  27. package/docs/architecture/comparison-index.md +0 -47
  28. package/docs/reports/codex-real-data-validation-20260505T040447Z.md +0 -46
  29. package/plan.md +0 -1642
  30. package/scripts/build.ts +0 -159
  31. package/scripts/bump-patch-version.sh +0 -18
  32. package/scripts/delete-unknown-projects.js +0 -154
  33. package/scripts/fix-sync-gap.js +0 -32
  34. package/scripts/generate-session-qrels.ts +0 -126
  35. package/scripts/heartbeat-memory-orchestrator.sh +0 -28
  36. package/scripts/replay-retrieval-benchmark.ts +0 -69
  37. package/scripts/report-sync-gap.js +0 -26
  38. package/scripts/review-queue-auto-resolve.js +0 -21
  39. package/scripts/sync-gap-auto-heal.sh +0 -17
  40. package/spec.md +0 -624
  41. package/specs/20260207-dashboard-upgrade/context.md +0 -38
  42. package/specs/20260207-dashboard-upgrade/spec.md +0 -96
  43. package/specs/citations-system/context.md +0 -243
  44. package/specs/citations-system/plan.md +0 -495
  45. package/specs/citations-system/spec.md +0 -371
  46. package/specs/endless-mode/context.md +0 -305
  47. package/specs/endless-mode/plan.md +0 -620
  48. package/specs/endless-mode/spec.md +0 -455
  49. package/specs/entity-edge-model/context.md +0 -401
  50. package/specs/entity-edge-model/plan.md +0 -459
  51. package/specs/entity-edge-model/spec.md +0 -391
  52. package/specs/evidence-aligner-v2/context.md +0 -401
  53. package/specs/evidence-aligner-v2/plan.md +0 -303
  54. package/specs/evidence-aligner-v2/spec.md +0 -312
  55. package/specs/mcp-desktop-integration/context.md +0 -278
  56. package/specs/mcp-desktop-integration/plan.md +0 -550
  57. package/specs/mcp-desktop-integration/spec.md +0 -494
  58. package/specs/memory-utilization-improvements/context.md +0 -145
  59. package/specs/memory-utilization-improvements/plan.md +0 -361
  60. package/specs/memory-utilization-improvements/spec.md +0 -361
  61. package/specs/post-tool-use-hook/context.md +0 -319
  62. package/specs/post-tool-use-hook/plan.md +0 -469
  63. package/specs/post-tool-use-hook/spec.md +0 -364
  64. package/specs/private-tags/context.md +0 -288
  65. package/specs/private-tags/plan.md +0 -412
  66. package/specs/private-tags/spec.md +0 -345
  67. package/specs/progressive-disclosure/context.md +0 -346
  68. package/specs/progressive-disclosure/plan.md +0 -663
  69. package/specs/progressive-disclosure/spec.md +0 -415
  70. package/specs/selective-tool-observation/context.md +0 -100
  71. package/specs/selective-tool-observation/plan.md +0 -158
  72. package/specs/selective-tool-observation/spec.md +0 -127
  73. package/specs/task-entity-system/context.md +0 -297
  74. package/specs/task-entity-system/plan.md +0 -301
  75. package/specs/task-entity-system/spec.md +0 -314
  76. package/specs/thin-core-refactor/context.md +0 -275
  77. package/specs/thin-core-refactor/plan.md +0 -536
  78. package/specs/thin-core-refactor/spec.md +0 -465
  79. package/specs/vector-outbox-v2/context.md +0 -470
  80. package/specs/vector-outbox-v2/plan.md +0 -562
  81. package/specs/vector-outbox-v2/spec.md +0 -466
  82. package/specs/web-viewer-ui/context.md +0 -384
  83. package/specs/web-viewer-ui/plan.md +0 -797
  84. package/specs/web-viewer-ui/spec.md +0 -516
  85. package/src/adapters/claude/capture/index.ts +0 -3
  86. package/src/adapters/claude/context/index.ts +0 -3
  87. package/src/adapters/claude/hooks/index.ts +0 -21
  88. package/src/adapters/claude/hooks/post-tool-use.ts +0 -239
  89. package/src/adapters/claude/hooks/prompt-injection-policy.ts +0 -104
  90. package/src/adapters/claude/hooks/semantic-daemon-client.ts +0 -209
  91. package/src/adapters/claude/hooks/semantic-daemon.ts +0 -283
  92. package/src/adapters/claude/hooks/session-end.ts +0 -59
  93. package/src/adapters/claude/hooks/session-start.ts +0 -73
  94. package/src/adapters/claude/hooks/stop.ts +0 -128
  95. package/src/adapters/claude/hooks/user-prompt-submit.ts +0 -361
  96. package/src/adapters/claude/index.ts +0 -4
  97. package/src/adapters/claude/transcript/index.ts +0 -4
  98. package/src/adapters/claude/transcript/transcript-reader.ts +0 -57
  99. package/src/adapters/claude/transcript/turn-reconstructor.ts +0 -65
  100. package/src/apps/cli/claude-settings-hooks.ts +0 -138
  101. package/src/apps/cli/codex-import-runner.ts +0 -125
  102. package/src/apps/cli/codex-validation-output.ts +0 -95
  103. package/src/apps/cli/hermes-import-runner.ts +0 -130
  104. package/src/apps/cli/hermes-validation-output.ts +0 -91
  105. package/src/apps/cli/index.ts +0 -1735
  106. package/src/apps/cli/mcp-install.ts +0 -106
  107. package/src/apps/cli/retrieval-disclosure-output.ts +0 -196
  108. package/src/apps/dashboard/assets/js/bootstrap.js +0 -244
  109. package/src/apps/dashboard/assets/js/chat.js +0 -373
  110. package/src/apps/dashboard/assets/js/disclosure.js +0 -232
  111. package/src/apps/dashboard/assets/js/modals.js +0 -298
  112. package/src/apps/dashboard/assets/js/overview.js +0 -655
  113. package/src/apps/dashboard/assets/js/state.js +0 -72
  114. package/src/apps/dashboard/assets/js/views.js +0 -468
  115. package/src/apps/dashboard/index.html +0 -543
  116. package/src/apps/dashboard/index.ts +0 -3
  117. package/src/apps/dashboard/style.css +0 -1750
  118. package/src/apps/index.ts +0 -5
  119. package/src/apps/server/api/chat.ts +0 -244
  120. package/src/apps/server/api/citations.ts +0 -105
  121. package/src/apps/server/api/events.ts +0 -137
  122. package/src/apps/server/api/health.ts +0 -53
  123. package/src/apps/server/api/index.ts +0 -26
  124. package/src/apps/server/api/projects.ts +0 -74
  125. package/src/apps/server/api/search.ts +0 -184
  126. package/src/apps/server/api/sessions.ts +0 -115
  127. package/src/apps/server/api/stats.ts +0 -723
  128. package/src/apps/server/api/turns.ts +0 -143
  129. package/src/apps/server/api/utils.ts +0 -65
  130. package/src/apps/server/index.ts +0 -111
  131. package/src/cli/index.ts +0 -3
  132. package/src/cli/retrieval-disclosure-output.ts +0 -2
  133. package/src/compat/index.ts +0 -5
  134. package/src/core/canonical-key.ts +0 -186
  135. package/src/core/citation-generator.ts +0 -63
  136. package/src/core/consolidated-store.ts +0 -356
  137. package/src/core/consolidation-worker.ts +0 -493
  138. package/src/core/context-formatter.ts +0 -276
  139. package/src/core/continuity-manager.ts +0 -341
  140. package/src/core/db-wrapper.ts +0 -64
  141. package/src/core/derive/fact-deriver.ts +0 -170
  142. package/src/core/derive/index.ts +0 -2
  143. package/src/core/derive/summary-deriver.ts +0 -76
  144. package/src/core/edge-repo.ts +0 -333
  145. package/src/core/embedder.ts +0 -4
  146. package/src/core/engine/embedding-maintenance-service.ts +0 -187
  147. package/src/core/engine/endless-memory-services.ts +0 -4
  148. package/src/core/engine/index.ts +0 -19
  149. package/src/core/engine/memory-engine-services.ts +0 -170
  150. package/src/core/engine/memory-ingest-service.ts +0 -317
  151. package/src/core/engine/memory-query-service.ts +0 -173
  152. package/src/core/engine/memory-runtime-service.ts +0 -162
  153. package/src/core/engine/memory-service-composition.ts +0 -231
  154. package/src/core/engine/retrieval-analytics-service.ts +0 -181
  155. package/src/core/engine/retrieval-disclosure-service.ts +0 -420
  156. package/src/core/engine/retrieval-orchestrator.ts +0 -377
  157. package/src/core/engine/retrieval-services.ts +0 -176
  158. package/src/core/engine/shared-memory-services.ts +0 -4
  159. package/src/core/entity-repo.ts +0 -349
  160. package/src/core/event-store.ts +0 -779
  161. package/src/core/evidence-aligner.ts +0 -635
  162. package/src/core/external-market-context.ts +0 -582
  163. package/src/core/graduation-worker.ts +0 -171
  164. package/src/core/graduation.ts +0 -377
  165. package/src/core/index.ts +0 -64
  166. package/src/core/ingest-interceptor.ts +0 -80
  167. package/src/core/markdown-mirror.ts +0 -70
  168. package/src/core/matcher.ts +0 -208
  169. package/src/core/md-mirror.ts +0 -92
  170. package/src/core/metadata-extractor.ts +0 -203
  171. package/src/core/model/memory-fact.ts +0 -30
  172. package/src/core/model/memory-rule.ts +0 -14
  173. package/src/core/model/memory-summary.ts +0 -21
  174. package/src/core/model/raw-event.ts +0 -28
  175. package/src/core/model/retrieval-result.ts +0 -35
  176. package/src/core/mongo-sync-config.ts +0 -165
  177. package/src/core/mongo-sync-worker.ts +0 -381
  178. package/src/core/privacy/filter.ts +0 -190
  179. package/src/core/privacy/index.ts +0 -20
  180. package/src/core/privacy/tag-parser.ts +0 -145
  181. package/src/core/product-validation-matrix.ts +0 -314
  182. package/src/core/progressive-retriever.ts +0 -414
  183. package/src/core/registry/project-path.ts +0 -54
  184. package/src/core/registry/session-registry.ts +0 -69
  185. package/src/core/replay-evaluator.ts +0 -625
  186. package/src/core/retrieval-benchmark.ts +0 -117
  187. package/src/core/retrieval-quality.ts +0 -109
  188. package/src/core/retriever.ts +0 -800
  189. package/src/core/session-qrels.ts +0 -360
  190. package/src/core/shared-event-store.ts +0 -114
  191. package/src/core/shared-promoter.ts +0 -249
  192. package/src/core/shared-store.ts +0 -289
  193. package/src/core/shared-vector-store.ts +0 -203
  194. package/src/core/sqlite-event-store.ts +0 -1846
  195. package/src/core/sqlite-wrapper.ts +0 -116
  196. package/src/core/sync-worker.ts +0 -228
  197. package/src/core/tag-taxonomy.ts +0 -51
  198. package/src/core/task/blocker-resolver.ts +0 -333
  199. package/src/core/task/index.ts +0 -9
  200. package/src/core/task/task-matcher.ts +0 -240
  201. package/src/core/task/task-projector.ts +0 -358
  202. package/src/core/task/task-resolver.ts +0 -421
  203. package/src/core/turn-state.ts +0 -207
  204. package/src/core/types.ts +0 -952
  205. package/src/core/vector-outbox.ts +0 -299
  206. package/src/core/vector-store.ts +0 -231
  207. package/src/core/vector-worker.ts +0 -521
  208. package/src/core/working-set-store.ts +0 -257
  209. package/src/extensions/endless-memory/endless-memory-services.ts +0 -350
  210. package/src/extensions/endless-memory/index.ts +0 -1
  211. package/src/extensions/index.ts +0 -5
  212. package/src/extensions/mcp/handlers.ts +0 -960
  213. package/src/extensions/mcp/index.ts +0 -48
  214. package/src/extensions/mcp/tools.ts +0 -252
  215. package/src/extensions/shared-memory/index.ts +0 -1
  216. package/src/extensions/shared-memory/shared-memory-services.ts +0 -211
  217. package/src/extensions/vector/embedder.ts +0 -234
  218. package/src/extensions/vector/index.ts +0 -1
  219. package/src/hooks/post-tool-use.ts +0 -9
  220. package/src/hooks/semantic-daemon-client.ts +0 -1
  221. package/src/hooks/semantic-daemon.ts +0 -11
  222. package/src/hooks/session-end.ts +0 -9
  223. package/src/hooks/session-start.ts +0 -9
  224. package/src/hooks/stop.ts +0 -9
  225. package/src/hooks/user-prompt-submit.ts +0 -9
  226. package/src/index.ts +0 -13
  227. package/src/mcp/handlers.ts +0 -2
  228. package/src/mcp/index.ts +0 -4
  229. package/src/mcp/tools.ts +0 -2
  230. package/src/server/api/chat.ts +0 -2
  231. package/src/server/api/citations.ts +0 -2
  232. package/src/server/api/events.ts +0 -2
  233. package/src/server/api/health.ts +0 -2
  234. package/src/server/api/index.ts +0 -2
  235. package/src/server/api/projects.ts +0 -2
  236. package/src/server/api/search.ts +0 -2
  237. package/src/server/api/sessions.ts +0 -2
  238. package/src/server/api/stats.ts +0 -2
  239. package/src/server/api/turns.ts +0 -2
  240. package/src/server/api/utils.ts +0 -2
  241. package/src/server/index.ts +0 -2
  242. package/src/services/bootstrap-organizer.ts +0 -463
  243. package/src/services/codex-session-history-importer.ts +0 -966
  244. package/src/services/hermes-session-history-importer.ts +0 -733
  245. package/src/services/memory-service-config.ts +0 -36
  246. package/src/services/memory-service-registry.ts +0 -150
  247. package/src/services/memory-service.ts +0 -688
  248. package/src/services/session-history-importer.ts +0 -629
  249. package/tests/README.md +0 -23
  250. package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +0 -54
  251. package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +0 -98
  252. package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +0 -99
  253. package/tests/apps/app-layer-boundary.test.ts +0 -48
  254. package/tests/apps/claude-settings-hooks.test.ts +0 -107
  255. package/tests/apps/cli-disclosure-output.test.ts +0 -212
  256. package/tests/apps/codex-import-runner.test.ts +0 -99
  257. package/tests/apps/codex-validation-output.test.ts +0 -100
  258. package/tests/apps/hermes-import-runner.test.ts +0 -99
  259. package/tests/apps/mcp-install-command.test.ts +0 -59
  260. package/tests/apps/package-build-entrypoints.test.ts +0 -30
  261. package/tests/apps/postinstall-embedding-backend.test.ts +0 -185
  262. package/tests/apps/search-api-disclosure.test.ts +0 -162
  263. package/tests/apps/stats-api-lightweight.test.ts +0 -67
  264. package/tests/apps/ui-disclosure-output.test.ts +0 -140
  265. package/tests/core/bootstrap-organizer.test.ts +0 -111
  266. package/tests/core/canonical-key.test.ts +0 -101
  267. package/tests/core/codex-session-history-importer-validation.test.ts +0 -185
  268. package/tests/core/consolidation-worker.test.ts +0 -75
  269. package/tests/core/embedding-maintenance-service.test.ts +0 -282
  270. package/tests/core/evidence-aligner.test.ts +0 -152
  271. package/tests/core/external-market-context.test.ts +0 -209
  272. package/tests/core/fact-deriver.test.ts +0 -79
  273. package/tests/core/hermes-session-history-importer-validation.test.ts +0 -609
  274. package/tests/core/ingest-interceptor.test.ts +0 -38
  275. package/tests/core/markdown-mirror.test.ts +0 -85
  276. package/tests/core/matcher.test.ts +0 -112
  277. package/tests/core/md-mirror.test.ts +0 -50
  278. package/tests/core/memory-engine-services.test.ts +0 -240
  279. package/tests/core/memory-ingest-service.test.ts +0 -296
  280. package/tests/core/memory-query-service.test.ts +0 -129
  281. package/tests/core/memory-runtime-service.test.ts +0 -201
  282. package/tests/core/memory-service-composition.test.ts +0 -192
  283. package/tests/core/memory-service-config.test.ts +0 -41
  284. package/tests/core/memory-service-facade.test.ts +0 -30
  285. package/tests/core/memory-service-registry.test.ts +0 -206
  286. package/tests/core/product-validation-matrix.test.ts +0 -61
  287. package/tests/core/project-registry.test.ts +0 -78
  288. package/tests/core/replay-evaluator.test.ts +0 -181
  289. package/tests/core/retrieval-analytics-service.test.ts +0 -210
  290. package/tests/core/retrieval-benchmark.test.ts +0 -93
  291. package/tests/core/retrieval-disclosure-service.test.ts +0 -264
  292. package/tests/core/retrieval-orchestrator.test.ts +0 -403
  293. package/tests/core/retrieval-quality.test.ts +0 -31
  294. package/tests/core/retrieval-services.test.ts +0 -185
  295. package/tests/core/retriever-fallback-chain.test.ts +0 -223
  296. package/tests/core/retriever-strategy-scope.test.ts +0 -164
  297. package/tests/core/retriever.memu-adoption.test.ts +0 -122
  298. package/tests/core/session-history-importer-filter.test.ts +0 -78
  299. package/tests/core/session-qrels.test.ts +0 -250
  300. package/tests/core/sqlite-event-store-replication.test.ts +0 -127
  301. package/tests/core/summary-deriver.test.ts +0 -66
  302. package/tests/extensions/embedder-warning-suppression.test.ts +0 -84
  303. package/tests/extensions/endless-memory-extension-boundary.test.ts +0 -17
  304. package/tests/extensions/endless-memory-services.test.ts +0 -325
  305. package/tests/extensions/mcp-context-tools.test.ts +0 -905
  306. package/tests/extensions/mcp-extension-boundary.test.ts +0 -21
  307. package/tests/extensions/mcp-package-build.test.ts +0 -22
  308. package/tests/extensions/mcp-project-aware-tools.test.ts +0 -102
  309. package/tests/extensions/shared-memory-extension-boundary.test.ts +0 -24
  310. package/tests/extensions/shared-memory-services.test.ts +0 -309
  311. package/tests/extensions/vector-extension-boundary.test.ts +0 -21
  312. package/tsconfig.json +0 -24
  313. 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`를 앞으로도 계속 빠르게 발전시킬 수 있게 만드는 **장기 유지보수 투자**다.