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
package/context.md DELETED
@@ -1,636 +0,0 @@
1
- # Context: Claude Code Memory Plugin
2
-
3
- ## 1. 프로젝트 배경
4
-
5
- 이 문서는 Claude Code용 Memory Plugin 개발을 위한 배경 연구와 참조 자료를 정리합니다.
6
-
7
- ### 1.1 목표
8
-
9
- 사용자가 Claude Code를 사용할수록 더 똑똑해지는 Agent를 만들기 위한 플러그인 개발:
10
- - 사용자 prompt와 agent 응답을 지속적으로 기억
11
- - 새로운 prompt 입력 시 관련된 과거 기억을 검색하여 컨텍스트로 활용
12
- - 시간이 지남에 따라 개인화된 경험 제공
13
-
14
- ---
15
-
16
- ## 2. Claude Code Plugin System 분석
17
-
18
- ### 2.1 플러그인 구조
19
-
20
- ```
21
- plugin-name/
22
- ├── .claude-plugin/
23
- │ └── plugin.json # 플러그인 메타데이터 (필수)
24
- ├── commands/ # 슬래시 명령어 (선택)
25
- ├── agents/ # 전문화된 에이전트 (선택)
26
- ├── skills/ # 에이전트 스킬 (선택)
27
- ├── hooks/ # 이벤트 핸들러 (선택)
28
- ├── .mcp.json # MCP 서버 구성 (선택)
29
- └── README.md # 문서
30
- ```
31
-
32
- ### 2.2 사용 가능한 Hook 이벤트
33
-
34
- | Hook Event | 용도 | Memory Plugin 활용 |
35
- |------------|------|-------------------|
36
- | `SessionStart` | 세션 시작 시 실행 | 이전 세션 기억 로드 |
37
- | `SessionEnd` | 세션 종료 시 실행 | 현재 세션 기억 저장 |
38
- | `UserPromptSubmit` | 사용자 입력 시 실행 | 관련 기억 검색 및 주입 |
39
- | `PreToolUse` | 도구 실행 전 | 도구별 과거 사용 패턴 제공 |
40
- | `PostToolUse` | 도구 실행 후 | 도구 결과 기억 |
41
- | `Stop` | Agent 응답 완료 시 | 전체 대화 기억 저장 |
42
- | `PreCompact` | 컨텍스트 압축 전 | 중요 기억 보존 |
43
-
44
- ### 2.3 Hook Input/Output 형식
45
-
46
- ```json
47
- // UserPromptSubmit hook input
48
- {
49
- "session_id": "...",
50
- "prompt": "사용자가 입력한 텍스트",
51
- "timestamp": "..."
52
- }
53
-
54
- // Hook은 stdout으로 결과 반환
55
- // - 빈 출력: 변경 없음
56
- // - JSON 출력: 컨텍스트 주입 또는 수정
57
- ```
58
-
59
- ---
60
-
61
- ## 3. AI Memory System 연구
62
-
63
- ### 3.1 Memory의 종류
64
-
65
- | 유형 | 설명 | 지속성 |
66
- |------|------|--------|
67
- | **Short-term Memory** | 현재 대화 컨텍스트 | 세션 내 |
68
- | **Long-term Memory** | 사용자 선호도, 과거 인사이트 | 영구적 |
69
- | **Episodic Memory** | 구체적인 대화/이벤트 기억 | 영구적 |
70
- | **Semantic Memory** | 추출된 지식과 관계 | 영구적 |
71
-
72
- ### 3.2 주요 Memory 솔루션 비교
73
-
74
- | 솔루션 | 특징 | 장점 |
75
- |--------|------|------|
76
- | **Mem0** | Y Combinator 투자, 그래프 기반 | 복잡한 관계 표현 |
77
- | **LangChain Memory** | 프레임워크 내장 | 쉬운 통합 |
78
- | **Zep/Graphiti** | 시간적 지식 그래프 | 시계열 추적 |
79
- | **AWS AgentCore Memory** | 비동기 파이프라인 | 확장성 |
80
- | **Google Vertex Memory Bank** | 유사도 검색 | 엔터프라이즈 |
81
-
82
- ### 3.3 Memory vs RAG
83
-
84
- - **RAG**: 외부 문서에서 정보 검색 (stateless)
85
- - **Memory**: 과거 상호작용에서 컨텍스트 검색 (stateful)
86
- - **이 플러그인**: Memory 중심 + 선택적 RAG 통합
87
-
88
- ---
89
-
90
- ## 4. AXIOMMIND Memory System 참조
91
-
92
- Gist에서 제공된 AXIOMMIND 시스템의 핵심 개념:
93
-
94
- ### 4.1 아키텍처 레이어
95
-
96
- ```
97
- ┌─────────────────────────────────────────────────────────┐
98
- │ L0 EventStore (Single Source of Truth) │
99
- │ - Append-only events table │
100
- │ - Event deduplication via dedupe_key │
101
- │ - Projection offset tracking │
102
- └─────────────────────────────────────────────────────────┘
103
-
104
- ┌─────────────────────────────────────────────────────────┐
105
- │ Extraction/Sorting Layer (LLM Processing) │
106
- │ - LLM extracts structured JSON from raw input │
107
- │ - Evidence alignment and validation │
108
- └─────────────────────────────────────────────────────────┘
109
-
110
- ┌─────────────────────────────────────────────────────────┐
111
- │ Derived Stores (Rebuildable from Events) │
112
- │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
113
- │ │ DuckDB │ │ LanceDB │ │ Relational │ │
114
- │ │ (FTS/SQL) │ │ (Vectors) │ │ Views │ │
115
- │ └─────────────┘ └─────────────┘ └─────────────┘ │
116
- └─────────────────────────────────────────────────────────┘
117
- ```
118
-
119
- ### 4.2 핵심 원칙
120
-
121
- - **Append-only EventStore**: 모든 변경 추적, 파생 저장소에서 언제든 재구성 가능
122
- - **Canonical Key 정규화**: 동일 개념의 여러 표현을 단일 키로 통합
123
- - **단일 진실 공급원(SoT)**: events 테이블만 영구 저장, 나머지는 파생
124
- - **멱등성 보장**: `dedupe_key`로 중복 이벤트 차단
125
-
126
- ### 4.3 Canonical Key 정규화 (핵심 알고리즘)
127
-
128
- ```python
129
- # canonical_key.py - 결정론적 키 생성
130
- def make_canonical_key(title: str, project: str = None) -> str:
131
- """
132
- 동일한 제목은 항상 동일한 키를 생성
133
-
134
- 정규화 단계:
135
- 1. NFKC 유니코드 정규화
136
- 2. 소문자 변환
137
- 3. 구두점 제거
138
- 4. 연속 공백 정리
139
- 5. (선택) 프로젝트/도메인 컨텍스트 추가
140
- 6. 긴 키는 MD5 체크섬으로 truncate
141
- """
142
- import unicodedata
143
- import re
144
- import hashlib
145
-
146
- # Step 1-4: 정규화
147
- normalized = unicodedata.normalize('NFKC', title)
148
- normalized = normalized.lower()
149
- normalized = re.sub(r'[^\w\s]', '', normalized)
150
- normalized = re.sub(r'\s+', ' ', normalized).strip()
151
-
152
- # Step 5: 컨텍스트 추가
153
- if project:
154
- key = f"{project}::{normalized}"
155
- else:
156
- key = normalized
157
-
158
- # Step 6: 긴 키 처리
159
- MAX_KEY_LENGTH = 200
160
- if len(key) > MAX_KEY_LENGTH:
161
- hash_suffix = hashlib.md5(key.encode()).hexdigest()[:8]
162
- key = key[:MAX_KEY_LENGTH - 9] + "_" + hash_suffix
163
-
164
- return key
165
- ```
166
-
167
- **Memory Plugin 적용**:
168
- - 사용자 prompt의 canonical key로 중복 질문 감지
169
- - 유사한 질문들을 그룹화하여 패턴 추출
170
-
171
- ### 4.4 Matching Thresholds (엄격한 매칭 기준)
172
-
173
- ```python
174
- # task_matcher.py - 매칭 임계값
175
- MATCH_THRESHOLDS = {
176
- "min_combined_score": 0.92, # 최소 결합 점수
177
- "min_gap": 0.03, # 1위와 2위 간 최소 점수 차이
178
- "suggestion_threshold": 0.75, # 제안 모드 임계값
179
- }
180
-
181
- def calculate_weighted_score(result: SearchResult) -> float:
182
- """
183
- 가중치 점수 계산 (stage, status, recency)
184
- """
185
- weights = {
186
- "semantic_similarity": 0.4, # 벡터 유사도
187
- "fts_score": 0.25, # 전문 검색 점수
188
- "recency_bonus": 0.2, # 최신성 가산점
189
- "status_weight": 0.15, # 상태별 가중치
190
- }
191
-
192
- score = (
193
- result.vector_score * weights["semantic_similarity"] +
194
- result.fts_score * weights["fts_score"] +
195
- result.recency_score * weights["recency_bonus"] +
196
- result.status_score * weights["status_weight"]
197
- )
198
- return score
199
-
200
- def match_with_confidence(query: str, candidates: list) -> MatchResult:
201
- """
202
- 엄격한 매칭: top-1이 확실히 우세할 때만 확정
203
- """
204
- if len(candidates) == 0:
205
- return MatchResult(match=None, confidence="none")
206
-
207
- top = candidates[0]
208
-
209
- if top.score < MATCH_THRESHOLDS["suggestion_threshold"]:
210
- return MatchResult(match=None, confidence="none")
211
-
212
- if top.score >= MATCH_THRESHOLDS["min_combined_score"]:
213
- if len(candidates) == 1:
214
- return MatchResult(match=top, confidence="high")
215
-
216
- gap = top.score - candidates[1].score
217
- if gap >= MATCH_THRESHOLDS["min_gap"]:
218
- return MatchResult(match=top, confidence="high")
219
-
220
- # 점수가 높지만 확실하지 않음 → 제안 모드
221
- return MatchResult(match=top, confidence="suggested")
222
- ```
223
-
224
- **Memory Plugin 적용**:
225
- - 관련 기억 검색 시 엄격한 임계값 적용
226
- - 애매한 매칭은 "suggested" 상태로 표시
227
-
228
- ### 4.5 Single-Writer Pattern (벡터 동시성 제어)
229
-
230
- ```python
231
- # vector_worker.py - Outbox 패턴으로 동시성 제어
232
-
233
- """
234
- LanceDB는 동시 쓰기에 취약하므로 Single-Writer 패턴 사용:
235
- 1. 이벤트 저장 시 embedding_outbox 테이블에 작업 추가
236
- 2. 별도 워커가 outbox를 순차적으로 처리
237
- 3. 처리 완료 시 outbox에서 삭제
238
- """
239
-
240
- # DuckDB의 outbox 테이블
241
- CREATE TABLE embedding_outbox (
242
- id UUID PRIMARY KEY,
243
- event_id UUID NOT NULL,
244
- content TEXT NOT NULL,
245
- status VARCHAR DEFAULT 'pending', -- 'pending' | 'processing' | 'done'
246
- created_at TIMESTAMP DEFAULT NOW(),
247
- processed_at TIMESTAMP
248
- );
249
-
250
- # Python 워커 (단일 프로세스)
251
- class VectorWorker:
252
- def __init__(self, db: DuckDB, lance: LanceDB, embedder: Embedder):
253
- self.db = db
254
- self.lance = lance
255
- self.embedder = embedder
256
-
257
- async def process_outbox(self, batch_size: int = 32):
258
- """
259
- Outbox에서 pending 항목을 가져와 순차 처리
260
- """
261
- # 1. Pending 항목 가져오기 (락 획득)
262
- pending = self.db.execute("""
263
- UPDATE embedding_outbox
264
- SET status = 'processing'
265
- WHERE id IN (
266
- SELECT id FROM embedding_outbox
267
- WHERE status = 'pending'
268
- ORDER BY created_at
269
- LIMIT ?
270
- )
271
- RETURNING *
272
- """, [batch_size])
273
-
274
- if not pending:
275
- return
276
-
277
- # 2. 배치 임베딩 생성
278
- contents = [p.content for p in pending]
279
- vectors = await self.embedder.embed_batch(contents)
280
-
281
- # 3. LanceDB에 저장 (단일 쓰기)
282
- records = [
283
- {"event_id": p.event_id, "content": p.content, "vector": v}
284
- for p, v in zip(pending, vectors)
285
- ]
286
- self.lance.add(records)
287
-
288
- # 4. Outbox 정리
289
- ids = [p.id for p in pending]
290
- self.db.execute("""
291
- DELETE FROM embedding_outbox WHERE id = ANY(?)
292
- """, [ids])
293
- ```
294
-
295
- **Memory Plugin 적용**:
296
- - 대화 저장 시 즉시 반환, 임베딩은 비동기 처리
297
- - 동시성 문제 없이 안정적인 벡터 인덱싱
298
-
299
- ### 4.6 Blocker/Condition 분류 전략
300
-
301
- ```python
302
- # task_resolver.py - 애매한 참조 처리
303
-
304
- """
305
- Blocker 분류 전략:
306
- 1. Artifact: URL, Jira, GitHub 이슈 등 명확한 참조
307
- 2. Task: 엄격한 매칭만 허용 (score >= 0.92)
308
- 3. Condition: 애매한 참조 흡수 (나중에 해결 가능)
309
- """
310
-
311
- class BlockerType(Enum):
312
- ARTIFACT = "artifact" # 명확한 외부 참조
313
- TASK = "task" # 확정된 작업 참조
314
- CONDITION = "condition" # 애매한 조건/참조
315
-
316
- def classify_blocker(reference: str, match_result: MatchResult) -> BlockerType:
317
- # URL, 이슈 번호 등은 Artifact
318
- if is_artifact_reference(reference):
319
- return BlockerType.ARTIFACT
320
-
321
- # 높은 신뢰도 매칭은 Task
322
- if match_result.confidence == "high":
323
- return BlockerType.TASK
324
-
325
- # 나머지는 Condition으로 흡수
326
- return BlockerType.CONDITION
327
-
328
- # Condition은 나중에 실제 Task로 해결될 수 있음
329
- # resolves_to edge로 연결
330
- ```
331
-
332
- **Memory Plugin 적용**:
333
- - 불완전한 컨텍스트도 일단 저장
334
- - 나중에 추가 정보로 보강 가능
335
-
336
- ### 4.7 Query Patterns (효과적인 뷰 활용)
337
-
338
- ```sql
339
- -- v_task_blockers_effective: Condition 해결을 반영한 최종 blocker 뷰
340
- CREATE VIEW v_memory_context_effective AS
341
- SELECT
342
- m.id,
343
- m.session_id,
344
- m.content,
345
- m.event_type,
346
- m.timestamp,
347
- -- Condition이 해결된 경우 실제 참조로 대체
348
- COALESCE(r.resolved_content, m.content) as effective_content,
349
- COALESCE(r.resolved_id, m.id) as effective_id
350
- FROM memories m
351
- LEFT JOIN memory_resolutions r ON m.id = r.condition_id
352
- WHERE r.resolution_type IS NULL OR r.resolution_type = 'confirmed';
353
-
354
- -- 4가지 주요 쿼리 패턴
355
- -- 1. 확정된 관련 기억
356
- SELECT * FROM v_memory_context_effective
357
- WHERE semantic_score >= 0.92;
358
-
359
- -- 2. 제안 상태의 기억 (확인 대기)
360
- SELECT * FROM memories
361
- WHERE match_confidence = 'suggested';
362
-
363
- -- 3. 자동 플레이스홀더 감지
364
- SELECT * FROM memories
365
- WHERE auto_placeholder = true;
366
-
367
- -- 4. 해결된 조건 매핑
368
- SELECT condition_id, resolved_to_id
369
- FROM memory_resolutions
370
- WHERE resolution_type = 'confirmed';
371
- ```
372
-
373
- ### 4.8 Placeholder 자동 생성
374
-
375
- ```python
376
- # 정보가 불완전할 때 플레이스홀더 생성
377
- def create_placeholder_if_needed(event: MemoryEvent) -> Optional[Placeholder]:
378
- """
379
- 컨텍스트가 불완전하면 자동 플레이스홀더 생성
380
- - auto_placeholder=true 플래그 설정
381
- - 나중에 추가 정보로 해결 가능
382
- """
383
- if is_incomplete_context(event):
384
- return Placeholder(
385
- id=generate_uuid(),
386
- event_id=event.id,
387
- placeholder_type="unknown_context",
388
- auto_placeholder=True,
389
- created_at=datetime.now()
390
- )
391
- return None
392
- ```
393
-
394
- ### 4.9 주요 모듈 요약
395
-
396
- | 모듈 | 역할 | Memory Plugin 대응 |
397
- |------|------|-------------------|
398
- | `canonical_key.py` | 결정론적 키 정규화 | `normalizer.ts` |
399
- | `event_store.py` | append-only 이벤트 저장 | `event-store.ts` |
400
- | `task_matcher.py` | 가중치 기반 매칭 | `matcher.ts` |
401
- | `task_resolver.py` | 상태 전이 검증 | `resolver.ts` |
402
- | `projector_task.py` | 이벤트→엔티티 투영 | `projector.ts` |
403
- | `vector_worker.py` | 단일 쓰기 임베딩 | `vector-worker.ts` |
404
-
405
- ### 4.10 Memory Graduation Pipeline (L0 → L4)
406
-
407
- AXIOMMIND의 핵심 개념인 **다단계 메모리 승격 파이프라인**:
408
-
409
- ```
410
- ┌─────────────────────────────────────────────────────────────────┐
411
- │ Memory Graduation Pipeline │
412
- ├─────────────────────────────────────────────────────────────────┤
413
- │ │
414
- │ L0: EventStore (Raw) │
415
- │ ├── 원본 채팅 로그, 프롬프트/응답 │
416
- │ ├── Append-only, 불변 │
417
- │ └── dedupe_key로 멱등성 보장 │
418
- │ ↓ │
419
- │ L1: Structured JSON │
420
- │ ├── LLM이 추출한 구조화된 데이터 │
421
- │ ├── 엔티티, 관계, 인사이트 │
422
- │ └── EvidenceAligner로 증거 스팬 정렬 │
423
- │ ↓ │
424
- │ L2: Idris Candidates (검증 대상) │
425
- │ ├── 타입 안전한 표현으로 변환 │
426
- │ ├── 의존적 타입으로 불변식 검증 │
427
- │ └── idris_generator.py가 생성 │
428
- │ ↓ │
429
- │ L3: Verified Knowledge │
430
- │ ├── Idris 타입체커 통과 │
431
- │ ├── 모순 없음 확인 │
432
- │ └── 신뢰도 높은 지식 │
433
- │ ↓ │
434
- │ L4: Active Memory (검색 가능) │
435
- │ ├── 벡터 인덱싱 완료 │
436
- │ ├── 실시간 검색 가능 │
437
- │ └── 컨텍스트 주입에 사용 │
438
- │ │
439
- └─────────────────────────────────────────────────────────────────┘
440
- ```
441
-
442
- **Memory Plugin 적용**:
443
- - L0: 모든 대화를 `events` 테이블에 저장
444
- - L1: 주기적으로 인사이트 추출 (LLM 기반)
445
- - L2: TypeScript 강타입으로 검증 (Idris2 개념 적용)
446
- - L3: 테스트 통과한 검증된 지식
447
- - L4: LanceDB에 인덱싱되어 검색 가능한 상태
448
-
449
- ### 4.11 AXIOMMIND 7가지 필수 원칙
450
-
451
- | # | 원칙 | 설명 | Memory Plugin 적용 |
452
- |---|------|------|-------------------|
453
- | 1 | **진실의 원천(SoT)은 이벤트 로그** | 파생 테이블은 언제든 재구성 가능 | `events` 테이블만 영구 저장 |
454
- | 2 | **추가전용 구조** | events에 UPDATE/DELETE 금지 | `append()` 메서드만 제공 |
455
- | 3 | **멱등성 보장** | `dedupe_key`로 중복 제어 | content_hash + session_id |
456
- | 4 | **증거 범위는 파이프라인이 확정** | LLM은 인용문만, aligner가 스팬 계산 | `EvidenceAligner` 모듈 |
457
- | 5 | **Task는 엔티티** | 세션마다 새 항목 아닌 기존 업데이트 | `canonical_key`로 동일성 판단 |
458
- | 6 | **벡터 저장소 정합성** | DuckDB → outbox → LanceDB 단방향 | Single-Writer Pattern |
459
- | 7 | **DuckDB JSON 사용** | JSONB 제거, 표준 JSON만 | `metadata JSON` 컬럼 |
460
-
461
- ```typescript
462
- // 원칙 적용 예시: EventStore 인터페이스
463
- interface EventStoreInterface {
464
- // 원칙 2: 추가전용 - append만 허용
465
- append(event: MemoryEvent): Promise<AppendResult>;
466
-
467
- // 조회는 자유롭게
468
- getBySession(sessionId: string): Promise<MemoryEvent[]>;
469
- getRecent(limit: number): Promise<MemoryEvent[]>;
470
-
471
- // 원칙 2 위반: UPDATE/DELETE 메서드 없음
472
- // update(): ❌ 금지
473
- // delete(): ❌ 금지
474
- }
475
- ```
476
-
477
- ### 4.12 Evidence Aligner (증거 정렬기)
478
-
479
- ```python
480
- # evidence_aligner.py - LLM 인용문을 정확한 스팬으로 변환
481
-
482
- class EvidenceAligner:
483
- """
484
- 원칙 4: LLM은 인용문만 제공, aligner가 정확한 스팬 계산
485
-
486
- LLM이 추출한 대략적인 인용문을 원본 텍스트에서
487
- 정확한 (start, end) 위치로 변환
488
- """
489
-
490
- def align(
491
- self,
492
- source_text: str,
493
- llm_quote: str,
494
- fuzzy_threshold: float = 0.85
495
- ) -> Optional[EvidenceSpan]:
496
- """
497
- 1. 정확한 매칭 시도
498
- 2. 실패 시 fuzzy matching (Levenshtein)
499
- 3. 임계값 미달 시 None 반환
500
- """
501
- # 정확한 매칭
502
- exact_pos = source_text.find(llm_quote)
503
- if exact_pos >= 0:
504
- return EvidenceSpan(
505
- start=exact_pos,
506
- end=exact_pos + len(llm_quote),
507
- confidence=1.0,
508
- match_type="exact"
509
- )
510
-
511
- # Fuzzy 매칭
512
- best_match = self._fuzzy_search(source_text, llm_quote)
513
- if best_match and best_match.score >= fuzzy_threshold:
514
- return EvidenceSpan(
515
- start=best_match.start,
516
- end=best_match.end,
517
- confidence=best_match.score,
518
- match_type="fuzzy"
519
- )
520
-
521
- return None
522
-
523
- def _fuzzy_search(self, text: str, query: str) -> Optional[FuzzyMatch]:
524
- # 슬라이딩 윈도우 + Levenshtein 거리
525
- ...
526
- ```
527
-
528
- **Memory Plugin 적용**:
529
- - 사용자가 "이전에 rate limiting 얘기했잖아"라고 하면
530
- - LLM이 대략적인 인용문 추출
531
- - EvidenceAligner가 정확한 원본 위치 찾기
532
- - 해당 컨텍스트를 정확히 주입
533
-
534
- ### 5.1 Vector Database: LanceDB
535
-
536
- 선택 이유:
537
- - **Embedded 모드**: SQLite처럼 서버 없이 로컬 실행
538
- - **Apache Arrow 기반**: 빠른 디스크 접근
539
- - **다중 모달 지원**: 텍스트, 이미지, 오디오 임베딩
540
- - **DuckDB 호환**: SQL 쿼리 가능
541
-
542
- ```python
543
- import lancedb
544
-
545
- db = lancedb.connect("~/.claude-memory")
546
- table = db.create_table("conversations", data)
547
- results = table.search(query_embedding).limit(10).to_list()
548
- ```
549
-
550
- ### 5.2 관계형 저장소: DuckDB
551
-
552
- 선택 이유:
553
- - **임베디드**: 파일 기반, 서버 불필요
554
- - **분석 최적화**: OLAP 워크로드에 적합
555
- - **SQL 지원**: 친숙한 쿼리 언어
556
- - **Lance 포맷 호환**: LanceDB와 통합
557
-
558
- ### 5.3 Embedding Model
559
-
560
- 옵션:
561
- 1. **OpenAI text-embedding-3-small**: 고품질, API 비용
562
- 2. **sentence-transformers**: 로컬 실행, 무료
563
- 3. **Ollama embeddings**: 로컬 LLM 활용
564
-
565
- 권장: sentence-transformers (로컬 우선) + OpenAI fallback
566
-
567
- ---
568
-
569
- ## 6. Idris2 활용 고려사항
570
-
571
- ### 6.1 Idris2 개요
572
-
573
- - **의존적 타입 시스템**: 타입 수준에서 프로그램 검증
574
- - **Type-Driven Development**: 타입이 프로그램 설계를 가이드
575
- - **Quantitative Type Theory (QTT)**: 선형 타입 지원
576
-
577
- ### 6.2 적용 가능 영역
578
-
579
- 1. **타입 안전한 이벤트 스키마**
580
- ```idris
581
- data MemoryEvent : Type where
582
- UserPrompt : (sessionId : String) -> (content : String) -> MemoryEvent
583
- AgentResponse : (sessionId : String) -> (content : String) -> MemoryEvent
584
- ```
585
-
586
- 2. **불변성 보장**
587
- - Append-only EventStore의 불변성을 타입 수준에서 강제
588
-
589
- 3. **정확성 증명**
590
- - 중복 제거 로직의 정확성 검증
591
- - 검색 알고리즘의 속성 증명
592
-
593
- ### 6.3 실용적 접근
594
-
595
- Idris2를 직접 사용하기보다 **개념적 영감**으로 활용:
596
- - TypeScript의 강타입 시스템 적극 활용
597
- - Zod/io-ts로 런타임 타입 검증
598
- - 불변 데이터 구조 (Immutable.js 또는 순수 함수형 패턴)
599
-
600
- ---
601
-
602
- ## 7. 참조 링크
603
-
604
- ### Claude Code Plugin 개발
605
- - [Create plugins - Claude Code Docs](https://code.claude.com/docs/en/plugins)
606
- - [Claude Code Plugins README](https://github.com/anthropics/claude-code/blob/main/plugins/README.md)
607
- - [Hook Development SKILL](https://github.com/anthropics/claude-code/blob/main/plugins/plugin-dev/skills/hook-development/SKILL.md)
608
- - [Claude Code Plugins Complete Guide](https://jangwook.net/en/blog/en/claude-code-plugins-complete-guide/)
609
-
610
- ### AI Memory Systems
611
- - [Mem0: Building Production-Ready AI Agents](https://arxiv.org/pdf/2504.19413)
612
- - [AWS AgentCore Long-term Memory](https://aws.amazon.com/blogs/machine-learning/building-smarter-ai-agents-agentcore-long-term-memory-deep-dive/)
613
- - [Google Vertex AI Memory Bank](https://docs.cloud.google.com/agent-builder/agent-engine/memory-bank/overview)
614
- - [LangChain Conversational Memory](https://www.pinecone.io/learn/series/langchain/langchain-conversational-memory/)
615
-
616
- ### Vector Databases
617
- - [LanceDB](https://lancedb.com/)
618
- - [Lance Format on GitHub](https://github.com/lance-format/lance)
619
-
620
- ### Idris2
621
- - [Idris2 Official Site](https://www.idris-lang.org/)
622
- - [Idris 2: Quantitative Type Theory in Practice](https://arxiv.org/abs/2104.00480)
623
- - [Idris2 GitHub](https://github.com/idris-lang/Idris2)
624
-
625
- ---
626
-
627
- ## 8. 용어 정의
628
-
629
- | 용어 | 정의 |
630
- |------|------|
631
- | **Memory** | 과거 대화에서 추출/저장된 정보 |
632
- | **Embedding** | 텍스트를 벡터로 변환한 표현 |
633
- | **Semantic Search** | 의미 기반 유사도 검색 |
634
- | **EventStore** | 모든 이벤트를 시간순으로 저장하는 append-only 저장소 |
635
- | **Hook** | 특정 이벤트 발생 시 실행되는 스크립트 |
636
- | **MCP** | Model Context Protocol - Claude와 외부 도구 연결 |