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,127 +0,0 @@
1
- # Spec: Selective Storage Filtering
2
-
3
- ## 개요
4
-
5
- 모든 이벤트 타입에 걸쳐 메모리 가치가 낮은 데이터를 선별적으로 필터링하여
6
- 저장량 55% 감소, 임베딩 backlog 해소, retrieval 품질 향상을 목표로 한다.
7
-
8
- ## 목표
9
-
10
- - 전체 이벤트 저장량 **-55%** (10,536 → ~4,693)
11
- - 임베딩 pending 증가 속도 감소
12
- - retrieval signal-to-noise 향상
13
- - Ctrl+C, 메뉴번호 같은 쓰레기 데이터 제거
14
-
15
- ## 비목표
16
-
17
- - 저장 스키마 변경 없음
18
- - 기존 저장된 이벤트 소급 삭제 없음
19
- - session_summary 로직 변경 없음
20
-
21
- ---
22
-
23
- ## 필터 규칙 1: tool_observation (post-tool-use.ts)
24
-
25
- ### Blocklist 확장
26
-
27
- **추가 제외 도구** (현재: TodoWrite, TodoRead만 제외):
28
-
29
- ```
30
- Read, Grep, Glob, ToolSearch,
31
- WebFetch, WebSearch, NotebookRead,
32
- Skill, EnterPlanMode,
33
- mcp__* (MCP 도구 전체, 조건부 예외 적용)
34
- ```
35
-
36
- **항상 저장 (allowlist)**:
37
- - `Write`, `Edit`, `MultiEdit` — 파일 변경 기록
38
- - `Agent`, `Task` — 서브태스크 결과
39
- - `Bash` — 조건부 (output 필터 적용)
40
- - `ExitPlanMode` — 계획 완료 기록 (조건부)
41
-
42
- ### Output-level 필터 (Bash 등 조건부 도구)
43
-
44
- | 조건 | 동작 |
45
- |------|------|
46
- | `stderr` 존재 | 저장 (에러 컨텍스트) |
47
- | `stdout` 길이 ≥ 100 chars | 저장 |
48
- | Write/Edit/Agent/Task | 길이 무관 저장 |
49
- | 그 외 | 스킵 |
50
-
51
- ### 환경변수
52
-
53
- ```bash
54
- CLAUDE_MEMORY_TOOL_BLOCKLIST="Read,Grep,Glob,..." # 커스텀 blocklist
55
- CLAUDE_MEMORY_TOOL_MIN_OUTPUT_LEN=100 # Bash 최소 출력 길이
56
- ```
57
-
58
- ---
59
-
60
- ## 필터 규칙 2: agent_response (stop.ts)
61
-
62
- ### Min-length 필터
63
-
64
- **150자 미만 agent_response는 저장 안 함**
65
-
66
- 근거: 50자 미만 608개 (27%), 50~200자 587개 (26%) 가 도구 체인 전환 메시지.
67
- 독립적 retrieval 가치 없음.
68
-
69
- ```bash
70
- CLAUDE_MEMORY_AGENT_RESPONSE_MIN_LEN=150 # 기본값
71
- ```
72
-
73
- **예외 (짧아도 저장):**
74
- - 세션의 마지막 agent_response (최종 답변일 가능성)
75
-
76
- ---
77
-
78
- ## 필터 규칙 3: user_prompt (importer + hook)
79
-
80
- ### 임포터에 shouldStorePrompt() 적용
81
-
82
- 현재 import 시 transcript의 모든 user 메시지를 무조건 저장.
83
- Ctrl+C(`\x03`), 숫자 `'1'`, `'go'` 등이 저장되는 원인.
84
-
85
- **변경:** `session-history-importer.ts`에서 각 user_prompt 저장 전
86
- `shouldStorePrompt()` 동일 조건 적용:
87
- - 길이 < 15자 → 스킵
88
- - `/`로 시작 → 스킵
89
- - 제어문자 포함 → 스킵
90
- - 한글/영문 2글자 이상 포함 여부 확인
91
-
92
- ---
93
-
94
- ## 적용 파일
95
-
96
- | 파일 | 변경 |
97
- |------|------|
98
- | `src/hooks/post-tool-use.ts` | blocklist 확장 + output-level 필터 |
99
- | `src/hooks/stop.ts` | agent_response min-length 필터 |
100
- | `src/services/session-history-importer.ts` | shouldStorePrompt() 임포트 적용 |
101
-
102
- ---
103
-
104
- ## 판단 흐름
105
-
106
- ```
107
- [PostToolUse]
108
- tool_name이 blocklist? → 스킵
109
- tool_name이 allowlist(Write/Edit/Agent/Task)? → 저장
110
- Bash/기타: output length ≥ 100 OR stderr 있음? → 저장 else 스킵
111
-
112
- [Stop - agent_response]
113
- 마지막 메시지? → 저장
114
- length ≥ 150? → 저장 else 스킵
115
-
116
- [Importer - user_prompt]
117
- shouldStorePrompt() 통과? → 저장 else 스킵
118
- ```
119
-
120
- ---
121
-
122
- ## 성공 지표
123
-
124
- - 신규 세션 tool_observation 비율 < 40% (현재 68.5%)
125
- - agent_response 저장 비율 < 50% (현재 전량 저장)
126
- - user_prompt 쓰레기 입력 0건
127
- - 임베딩 pending 증가 속도 현재 대비 -50%
@@ -1,297 +0,0 @@
1
- # Task Entity System Context
2
-
3
- > **Version**: 1.0.0
4
- > **Created**: 2026-01-31
5
-
6
- ## 1. 배경
7
-
8
- ### 1.1 기존 설계의 한계
9
-
10
- 현재 code-memory 시스템에서 Task는 `entries` 테이블에 저장되는 불변 기록으로 관리됩니다:
11
-
12
- ```typescript
13
- // 기존: entries 테이블에 Task를 저장
14
- {
15
- entry_id: "ent_abc123",
16
- entry_type: "task",
17
- title: "벡터 검색 구현",
18
- content_json: { status: "in_progress", ... }
19
- }
20
- ```
21
-
22
- **문제점**:
23
-
24
- 1. **세션 A**에서 "벡터 검색 구현" Task 생성 → `ent_abc123`
25
- 2. **세션 B**에서 같은 Task 언급 → `ent_def456` (새 entry 생성!)
26
- 3. **세션 C**에서 "완료" 언급 → `ent_ghi789` (또 새 entry!)
27
-
28
- 결과: 하나의 Task가 3개의 분리된 entry로 존재하며, 상태 추적 불가
29
-
30
- ### 1.2 해결 방향
31
-
32
- **Entry와 Entity 분리**:
33
-
34
- | 구분 | Entry | Entity |
35
- |------|-------|--------|
36
- | 특성 | 불변 기록 | 상태 변화 개체 |
37
- | 예시 | Fact, Decision, Insight | Task, Condition, Artifact |
38
- | 생명주기 | 생성 후 변경 없음 | 이벤트로 상태 변화 |
39
- | 식별 | UUID | canonical_key |
40
-
41
- ## 2. Memo.txt 참고 사항
42
-
43
- ### 2.1 핵심 원칙 (섹션 2)
44
-
45
- > **5. Task는 entity**
46
- > - Task 상태(status/priority/blockers)는 이벤트 fold 결과로 계산
47
- > - 세션마다 Task entry를 새로 만들지 말고, 기존 task entity를 찾아 업데이트
48
-
49
- ### 2.2 DB 스키마 (섹션 4.3)
50
-
51
- ```sql
52
- CREATE TABLE entities (
53
- entity_id VARCHAR PRIMARY KEY,
54
- entity_type VARCHAR NOT NULL, -- task|condition|artifact
55
- canonical_key VARCHAR NOT NULL,
56
- title VARCHAR NOT NULL,
57
- stage VARCHAR NOT NULL,
58
- status VARCHAR NOT NULL,
59
- current_json JSON NOT NULL,
60
- ...
61
- );
62
- ```
63
-
64
- ### 2.3 Task 이벤트 타입 (섹션 7.2)
65
-
66
- - `task_created`
67
- - `task_status_changed`
68
- - `task_priority_changed`
69
- - `task_blockers_set` (mode=replace|suggest)
70
- - `task_transition_rejected`
71
-
72
- ### 2.4 BlockerResolver 규칙 (섹션 7.3)
73
-
74
- 1. 강한 ID/URL/키 패턴 → artifact로 get-or-create
75
- 2. 명시 task_id → task로 연결
76
- 3. Task 제목 매칭 실패 → **condition으로 fallback** (스텁 Task 생성 금지)
77
-
78
- ## 3. Idris2 영감 적용
79
-
80
- ### 3.1 의존적 타입 개념
81
-
82
- **Idris2의 Vector 타입**:
83
- ```idris
84
- -- 길이가 타입에 인코딩됨
85
- data Vect : Nat -> Type -> Type where
86
- Nil : Vect 0 a
87
- (::) : a -> Vect n a -> Vect (S n) a
88
- ```
89
-
90
- **TypeScript 적용**:
91
- ```typescript
92
- // 상태에 따라 blockers 필드 타입이 달라짐
93
- type TaskState =
94
- | { status: 'blocked'; blockers: BlockerRef[] } // 필수, 1개 이상
95
- | { status: 'done'; blockers?: never }; // 없어야 함
96
- ```
97
-
98
- ### 3.2 불변식 (Invariants)
99
-
100
- **Idris2에서**:
101
- ```idris
102
- -- 타입 시스템이 강제
103
- nonEmptyBlockers : (t : Task) -> t.status = Blocked -> NonEmpty t.blockers
104
- ```
105
-
106
- **TypeScript + Zod에서**:
107
- ```typescript
108
- // 런타임 검증
109
- const BlockedTaskSchema = z.object({
110
- status: z.literal('blocked'),
111
- blockers: z.array(BlockerRefSchema).min(1) // 최소 1개 강제
112
- });
113
- ```
114
-
115
- ### 3.3 왜 실제 Idris2를 사용하지 않는가?
116
-
117
- **Memo.txt 섹션 11**:
118
- > "지금은 Python 쪽 구현이 핵심이므로, Idris는 Candidate/Verified 래퍼 기반으로만 최소 수정"
119
-
120
- **실용적 이유**:
121
-
122
- 1. **학습 곡선**: 팀원 모두가 Idris2를 학습해야 함
123
- 2. **도구 체인**: idris2 컴파일러 설치/관리 필요
124
- 3. **통합 복잡도**: TypeScript ↔ Idris2 FFI 오버헤드
125
- 4. **디버깅**: 두 언어 간 스택 트레이스 추적 어려움
126
-
127
- **TypeScript로 충분한 이유**:
128
-
129
- 1. **Discriminated Union**: 상태별 타입 분리 가능
130
- 2. **Zod**: 런타임 검증으로 불변식 강제
131
- 3. **타입 가드**: 조건부 타입 narrowing
132
- 4. **생태계**: 풍부한 라이브러리와 도구
133
-
134
- ## 4. 기존 코드와의 관계
135
-
136
- ### 4.1 types.ts
137
-
138
- 현재 정의된 타입 활용:
139
-
140
- ```typescript
141
- // 기존
142
- export type MatchConfidence = 'high' | 'suggested' | 'none';
143
- export const MATCH_THRESHOLDS = {
144
- minCombinedScore: 0.92,
145
- minGap: 0.03,
146
- suggestionThreshold: 0.75
147
- };
148
-
149
- // 확장
150
- export type EntityType = 'task' | 'condition' | 'artifact';
151
- export type TaskStatus = 'pending' | 'in_progress' | 'blocked' | 'done' | 'cancelled';
152
- ```
153
-
154
- ### 4.2 canonical-key.ts
155
-
156
- 현재 함수 확장:
157
-
158
- ```typescript
159
- // 기존: 이벤트용 canonical key
160
- export function makeCanonicalKey(title: string, context?: {...}): string;
161
-
162
- // 확장: 엔티티 타입별 canonical key
163
- export function makeEntityCanonicalKey(
164
- entityType: EntityType,
165
- identifier: string,
166
- context?: { project?: string }
167
- ): string {
168
- switch (entityType) {
169
- case 'task':
170
- return `task:${context?.project ?? 'default'}:${normalize(identifier)}`;
171
- case 'condition':
172
- return `cond:${context?.project ?? 'default'}:${normalize(identifier)}`;
173
- case 'artifact':
174
- return makeArtifactKey(identifier);
175
- }
176
- }
177
- ```
178
-
179
- ### 4.3 event-store.ts
180
-
181
- 현재 EventStore 활용:
182
-
183
- ```typescript
184
- // 기존 append 메서드 재활용
185
- // Task 이벤트도 동일하게 append-only로 저장
186
- const event = {
187
- eventType: 'task_created',
188
- sessionId,
189
- content: JSON.stringify(payload),
190
- ...
191
- };
192
- await eventStore.append(event);
193
- ```
194
-
195
- ### 4.4 matcher.ts
196
-
197
- 현재 Matcher 로직 확장:
198
-
199
- ```typescript
200
- // 기존: 이벤트 매칭
201
- export class Matcher {
202
- matchSearchResults(results: SearchResult[]): MatchResult;
203
- }
204
-
205
- // 확장: Task 매칭에도 동일 로직 적용
206
- export class TaskMatcher {
207
- // MATCH_THRESHOLDS 재활용
208
- findSimilar(title: string, project: string): MatchResult;
209
- }
210
- ```
211
-
212
- ## 5. 경계 조건
213
-
214
- ### 5.1 Unknown Blocker 처리
215
-
216
- ```typescript
217
- // Task가 blocked인데 blockedBy가 비어있으면
218
- if (task.status === 'blocked' && blockedByTexts.length === 0) {
219
- // 자동으로 placeholder condition 생성
220
- const placeholder = await createCondition({
221
- text: `Unknown blocker for ${task.title}`,
222
- meta: { auto_placeholder: true }
223
- });
224
- blockers.push({ kind: 'condition', entity_id: placeholder.id });
225
- }
226
- ```
227
-
228
- ### 5.2 상태 전이 거부
229
-
230
- ```typescript
231
- // pending → done 직접 전이 시
232
- if (from === 'pending' && to === 'done') {
233
- // task_transition_rejected 이벤트 발행
234
- await eventStore.append({
235
- eventType: 'task_transition_rejected',
236
- content: JSON.stringify({
237
- task_id: task.id,
238
- from_status: 'pending',
239
- to_status: 'done',
240
- reason: 'Direct transition from pending to done is not allowed'
241
- })
242
- });
243
-
244
- // in_progress로 보정
245
- return 'in_progress';
246
- }
247
- ```
248
-
249
- ### 5.3 Condition → Task 해결
250
-
251
- ```typescript
252
- // 나중에 "API 키 설정됨" condition이 실제 Task로 식별되면
253
- await eventStore.append({
254
- eventType: 'condition_resolved_to',
255
- content: JSON.stringify({
256
- condition_id: 'cond_xyz',
257
- resolved_to: { kind: 'task', entity_id: 'task_abc' }
258
- })
259
- });
260
- ```
261
-
262
- ## 6. 성능 고려사항
263
-
264
- ### 6.1 캐싱
265
-
266
- ```typescript
267
- // Entity 조회 캐시 (LRU)
268
- const entityCache = new LRUCache<string, Entity>({
269
- max: 1000,
270
- ttl: 1000 * 60 * 5 // 5분
271
- });
272
- ```
273
-
274
- ### 6.2 배치 처리
275
-
276
- ```typescript
277
- // Projector는 배치로 이벤트 처리
278
- const BATCH_SIZE = 100;
279
- const events = await eventStore.fetchSince(offset, { limit: BATCH_SIZE });
280
- ```
281
-
282
- ### 6.3 인덱스 활용
283
-
284
- ```sql
285
- -- FTS 검색용
286
- CREATE INDEX idx_entities_search ON entities USING GIN(to_tsvector('english', search_text));
287
-
288
- -- canonical_key 조회용
289
- CREATE INDEX idx_entities_type_key ON entities(entity_type, canonical_key);
290
- ```
291
-
292
- ## 7. 참고 자료
293
-
294
- - **Memo.txt**: AxiomMind Memory Graduation Pipeline 지시서
295
- - **spec.md**: `src/core/types.ts` - 기존 타입 정의
296
- - **AXIOMMIND 원칙**: Principle 5 - Task는 Entity
297
- - **Idris2 개념**: Dependent types, Linear types
@@ -1,301 +0,0 @@
1
- # Task Entity System Implementation Plan
2
-
3
- > **Version**: 1.0.0
4
- > **Status**: Draft
5
- > **Created**: 2026-01-31
6
-
7
- ## Phase 1: 기반 구조 (P0)
8
-
9
- ### 1.1 타입 정의
10
-
11
- **파일**: `src/core/types.ts` 수정
12
-
13
- ```typescript
14
- // 추가할 타입들
15
- export const EntityTypeSchema = z.enum(['task', 'condition', 'artifact']);
16
- export type EntityType = z.infer<typeof EntityTypeSchema>;
17
-
18
- export const TaskStatusSchema = z.enum(['pending', 'in_progress', 'blocked', 'done', 'cancelled']);
19
- export type TaskStatus = z.infer<typeof TaskStatusSchema>;
20
-
21
- export const TaskEventTypeSchema = z.enum([
22
- 'task_created',
23
- 'task_status_changed',
24
- 'task_priority_changed',
25
- 'task_blockers_set',
26
- 'task_transition_rejected'
27
- ]);
28
- ```
29
-
30
- **작업 항목**:
31
- - [ ] EntityType, TaskStatus 스키마 추가
32
- - [ ] TaskEvent 타입 정의
33
- - [ ] BlockerRef 타입 정의
34
- - [ ] TaskState Discriminated Union 정의
35
-
36
- ### 1.2 DB 스키마 추가
37
-
38
- **파일**: `src/core/schema.sql` 수정
39
-
40
- **작업 항목**:
41
- - [ ] entities 테이블 생성
42
- - [ ] entity_aliases 테이블 생성
43
- - [ ] edges 테이블 생성
44
- - [ ] 인덱스 추가
45
-
46
- ### 1.3 Canonical Key 확장
47
-
48
- **파일**: `src/core/canonical-key.ts` 수정
49
-
50
- ```typescript
51
- // 추가할 함수
52
- export function makeEntityCanonicalKey(
53
- entityType: EntityType,
54
- identifier: string,
55
- context?: { project?: string }
56
- ): string;
57
- ```
58
-
59
- **작업 항목**:
60
- - [ ] Task canonical key 함수
61
- - [ ] Condition canonical key 함수
62
- - [ ] Artifact canonical key 함수 (URL, JIRA, GitHub 패턴)
63
-
64
- ## Phase 2: 핵심 컴포넌트 (P0)
65
-
66
- ### 2.1 EntityRepository
67
-
68
- **파일**: `src/core/entity-repo.ts` (신규)
69
-
70
- ```typescript
71
- export class EntityRepository {
72
- constructor(private db: Database);
73
-
74
- // CRUD (Create, Read만 - append-only 철학)
75
- async create(entity: EntityInput): Promise<Entity>;
76
- async findById(entityId: string): Promise<Entity | null>;
77
- async findByCanonicalKey(type: EntityType, key: string): Promise<Entity | null>;
78
-
79
- // 검색
80
- async findSimilar(type: EntityType, searchText: string): Promise<Entity[]>;
81
-
82
- // Alias 관리
83
- async addAlias(entityId: string, alias: string): Promise<void>;
84
- async resolveAlias(type: EntityType, alias: string): Promise<string | null>;
85
-
86
- // 상태 업데이트 (이벤트 발행 후 projector가 호출)
87
- async updateCurrentState(entityId: string, state: EntityState): Promise<void>;
88
- }
89
- ```
90
-
91
- **작업 항목**:
92
- - [ ] EntityRepository 클래스 구현
93
- - [ ] findByCanonicalKey 구현
94
- - [ ] findSimilar 구현 (FTS 활용)
95
- - [ ] alias 관리 메서드 구현
96
-
97
- ### 2.2 TaskMatcher
98
-
99
- **파일**: `src/core/task-matcher.ts` (신규)
100
-
101
- ```typescript
102
- export class TaskMatcher {
103
- constructor(
104
- private entityRepo: EntityRepository,
105
- private vectorStore: VectorStore
106
- );
107
-
108
- async findExact(canonicalKey: string): Promise<Task | null>;
109
- async findSimilar(title: string, project: string): Promise<MatchResult>;
110
- async suggestCandidates(title: string, project: string, limit?: number): Promise<Task[]>;
111
- }
112
- ```
113
-
114
- **작업 항목**:
115
- - [ ] 정확 매칭 (entity_aliases 활용)
116
- - [ ] FTS 기반 유사 매칭
117
- - [ ] Vector 기반 semantic 매칭
118
- - [ ] 점수 계산 (stage weight, status weight, recency)
119
- - [ ] strict 확정 로직 (score >= 0.92, gap >= 0.03)
120
-
121
- ### 2.3 BlockerResolver
122
-
123
- **파일**: `src/core/blocker-resolver.ts` (신규)
124
-
125
- **작업 항목**:
126
- - [ ] URL/JIRA/GitHub 패턴 감지
127
- - [ ] Artifact get-or-create 로직
128
- - [ ] Task 제목 매칭 시도
129
- - [ ] Condition fallback 생성
130
- - [ ] candidates 저장 로직
131
-
132
- ### 2.4 TaskResolver
133
-
134
- **파일**: `src/core/task-resolver.ts` (신규)
135
-
136
- **작업 항목**:
137
- - [ ] Task entry 처리 로직
138
- - [ ] 기존 Task 찾기 (TaskMatcher 활용)
139
- - [ ] 이벤트 발행 로직
140
- - [ ] 상태 전이 검증
141
- - [ ] blockers 정규화 (BlockerResolver 활용)
142
-
143
- ## Phase 3: Projection (P0)
144
-
145
- ### 3.1 TaskProjector
146
-
147
- **파일**: `src/core/task-projector.ts` (신규)
148
-
149
- ```typescript
150
- export class TaskProjector {
151
- constructor(
152
- private eventStore: EventStore,
153
- private entityRepo: EntityRepository,
154
- private edgeRepo: EdgeRepository
155
- );
156
-
157
- async projectIncremental(): Promise<ProjectionResult>;
158
- async rebuild(): Promise<void>;
159
-
160
- private async handleTaskCreated(event: TaskEvent): Promise<void>;
161
- private async handleStatusChanged(event: TaskEvent): Promise<void>;
162
- private async handleBlockersSet(event: TaskEvent): Promise<void>;
163
- }
164
- ```
165
-
166
- **작업 항목**:
167
- - [ ] projection_offsets 관리
168
- - [ ] 증분 이벤트 읽기
169
- - [ ] 이벤트 타입별 핸들러
170
- - [ ] mode=replace 처리 (기존 edge 삭제 + 새 edge 삽입)
171
- - [ ] mode=suggest 처리 (suggested edge만)
172
- - [ ] current_json 갱신
173
-
174
- ### 3.2 EdgeRepository
175
-
176
- **파일**: `src/core/edge-repo.ts` (신규)
177
-
178
- ```typescript
179
- export class EdgeRepository {
180
- async createEdge(edge: EdgeInput): Promise<Edge>;
181
- async findEdges(srcId: string, relType?: string): Promise<Edge[]>;
182
- async deleteEdges(srcId: string, relType: string): Promise<number>;
183
- async replaceEdges(srcId: string, relType: string, newEdges: EdgeInput[]): Promise<void>;
184
- }
185
- ```
186
-
187
- **작업 항목**:
188
- - [ ] Edge CRUD 구현
189
- - [ ] 관계 타입별 조회
190
- - [ ] replace 로직 (트랜잭션)
191
-
192
- ## Phase 4: 통합 (P0)
193
-
194
- ### 4.1 Graduation Pipeline 연동
195
-
196
- **파일**: `src/core/graduation.ts` 수정
197
-
198
- **작업 항목**:
199
- - [ ] Task entry 처리 시 TaskResolver 호출
200
- - [ ] 이벤트 발행 후 TaskProjector 호출
201
- - [ ] evidence edge 생성 로직
202
-
203
- ### 4.2 EventStore 확장
204
-
205
- **파일**: `src/core/event-store.ts` 수정
206
-
207
- **작업 항목**:
208
- - [ ] Task 이벤트 타입 지원
209
- - [ ] fetch_since 메서드 추가 (projector용)
210
- - [ ] replay 메서드 추가 (rebuild용)
211
-
212
- ## Phase 5: CLI 및 조회 (P1)
213
-
214
- ### 5.1 조회 API
215
-
216
- **작업 항목**:
217
- - [ ] list_blocked_tasks()
218
- - [ ] list_tasks_with_only_suggested_blockers()
219
- - [ ] get_task_detail(task_id)
220
- - [ ] v_task_blockers_effective 뷰
221
-
222
- ### 5.2 CLI 커맨드
223
-
224
- **파일**: `src/cli/index.ts` 수정
225
-
226
- **작업 항목**:
227
- - [ ] `cli blocked` - blocked task 목록
228
- - [ ] `cli task show <task_id>` - task 상세
229
- - [ ] `cli tasks --status <status>` - 상태별 목록
230
-
231
- ## 파일 목록
232
-
233
- ### 신규 파일
234
- ```
235
- src/core/entity-repo.ts
236
- src/core/edge-repo.ts
237
- src/core/task-matcher.ts
238
- src/core/blocker-resolver.ts
239
- src/core/task-resolver.ts
240
- src/core/task-projector.ts
241
- ```
242
-
243
- ### 수정 파일
244
- ```
245
- src/core/types.ts
246
- src/core/canonical-key.ts
247
- src/core/event-store.ts
248
- src/core/graduation.ts
249
- src/cli/index.ts
250
- ```
251
-
252
- ## 테스트
253
-
254
- ### 필수 테스트 케이스
255
-
256
- 1. **Task 동일성**
257
- - 같은 제목의 Task가 여러 세션에서 언급되어도 하나의 Entity로 관리
258
-
259
- 2. **상태 전이**
260
- - pending → done 직접 전이 시 에러
261
- - blocked 상태에서 blockers가 비어있으면 에러
262
-
263
- 3. **Idempotency**
264
- - 동일 세션 재처리 시 중복 이벤트 없음
265
- - 동일 edge 중복 생성 없음
266
-
267
- 4. **Blocker 해결**
268
- - URL → Artifact 정상 생성
269
- - Task 제목 매칭 실패 → Condition 생성 + candidates 저장
270
-
271
- ## 의존성 그래프
272
-
273
- ```
274
- types.ts
275
-
276
- ├── entity-repo.ts
277
- │ │
278
- │ ├── task-matcher.ts
279
- │ │
280
- │ └── edge-repo.ts
281
- │ │
282
- │ └── task-projector.ts
283
-
284
- ├── blocker-resolver.ts ─────────┐
285
- │ │
286
- └── task-resolver.ts ◀───────────┘
287
-
288
- └── graduation.ts
289
- ```
290
-
291
- ## 마일스톤
292
-
293
- | 단계 | 완료 기준 |
294
- |------|----------|
295
- | M1 | 타입 정의 + DB 스키마 |
296
- | M2 | EntityRepo + EdgeRepo 동작 |
297
- | M3 | TaskMatcher 동작 (정확 매칭만) |
298
- | M4 | BlockerResolver + TaskResolver 동작 |
299
- | M5 | TaskProjector 동작 (증분 처리) |
300
- | M6 | Graduation 연동 완료 |
301
- | M7 | CLI 조회 커맨드 완료 |