claude-memory-layer 1.0.27 → 1.0.29
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.
- package/.env.example +7 -0
- package/AGENTS.md +11 -0
- package/README.md +374 -49
- package/benchmarks/replay/anonymized-real-sessions.json +48 -0
- package/dist/cli/index.js +10097 -6003
- package/dist/cli/index.js.map +4 -4
- package/dist/core/index.js +9745 -5587
- package/dist/core/index.js.map +4 -4
- package/dist/hooks/post-tool-use.js +6545 -5270
- package/dist/hooks/post-tool-use.js.map +4 -4
- package/dist/hooks/semantic-daemon.js +6646 -5354
- package/dist/hooks/semantic-daemon.js.map +4 -4
- package/dist/hooks/session-end.js +6618 -5347
- package/dist/hooks/session-end.js.map +4 -4
- package/dist/hooks/session-start.js +6619 -5354
- package/dist/hooks/session-start.js.map +4 -4
- package/dist/hooks/stop.js +6614 -5325
- package/dist/hooks/stop.js.map +4 -4
- package/dist/hooks/user-prompt-submit.js +6702 -5356
- package/dist/hooks/user-prompt-submit.js.map +4 -4
- package/dist/index.js +13537 -0
- package/dist/index.js.map +7 -0
- package/dist/mcp/index.js +20770 -0
- package/dist/mcp/index.js.map +7 -0
- package/dist/server/api/index.js +6632 -5319
- package/dist/server/api/index.js.map +4 -4
- package/dist/server/index.js +6667 -5340
- package/dist/server/index.js.map +4 -4
- package/dist/services/memory-service.js +6568 -5350
- package/dist/services/memory-service.js.map +4 -4
- package/dist/ui/assets/js/bootstrap.js +244 -0
- package/dist/ui/assets/js/chat.js +373 -0
- package/dist/ui/assets/js/disclosure.js +232 -0
- package/dist/ui/assets/js/modals.js +298 -0
- package/dist/ui/assets/js/overview.js +655 -0
- package/dist/ui/assets/js/state.js +72 -0
- package/dist/ui/assets/js/views.js +468 -0
- package/dist/ui/index.html +43 -1
- package/dist/ui/index.ts +3 -0
- package/dist/ui/style.css +222 -0
- package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +627 -0
- package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +440 -0
- package/docs/MEMORY_USEFULNESS_AUDIT.md +371 -0
- package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +80 -0
- package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +333 -0
- package/docs/PRODUCT_VALIDATION_MATRIX.md +82 -0
- package/docs/PROJECT_STRUCTURE_ANALYSIS.md +421 -0
- package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +501 -0
- package/docs/REFACTORING_PLAN_THIN_CORE.md +414 -0
- package/docs/REFERENCE_PROJECT_ANALYSES.md +25 -0
- package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +452 -0
- package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +446 -0
- package/docs/architecture/comparison-index.md +47 -0
- package/docs/reports/codex-real-data-validation-20260505T040447Z.md +46 -0
- package/package.json +12 -5
- package/scripts/build.ts +25 -8
- package/scripts/generate-session-qrels.ts +126 -0
- package/scripts/postinstall-embedding-backend.cjs +142 -0
- package/scripts/replay-retrieval-benchmark.ts +69 -0
- package/specs/thin-core-refactor/context.md +275 -0
- package/specs/thin-core-refactor/plan.md +536 -0
- package/specs/thin-core-refactor/spec.md +465 -0
- package/src/adapters/claude/capture/index.ts +3 -0
- package/src/adapters/claude/context/index.ts +3 -0
- package/src/adapters/claude/hooks/index.ts +21 -0
- package/src/adapters/claude/hooks/post-tool-use.ts +239 -0
- package/src/adapters/claude/hooks/prompt-injection-policy.ts +104 -0
- package/src/adapters/claude/hooks/semantic-daemon-client.ts +209 -0
- package/src/adapters/claude/hooks/semantic-daemon.ts +283 -0
- package/src/adapters/claude/hooks/session-end.ts +59 -0
- package/src/adapters/claude/hooks/session-start.ts +73 -0
- package/src/adapters/claude/hooks/stop.ts +128 -0
- package/src/adapters/claude/hooks/user-prompt-submit.ts +361 -0
- package/src/adapters/claude/index.ts +4 -0
- package/src/adapters/claude/transcript/index.ts +4 -0
- package/src/adapters/claude/transcript/transcript-reader.ts +57 -0
- package/src/adapters/claude/transcript/turn-reconstructor.ts +65 -0
- package/src/apps/cli/claude-settings-hooks.ts +138 -0
- package/src/apps/cli/codex-import-runner.ts +125 -0
- package/src/apps/cli/codex-validation-output.ts +95 -0
- package/src/apps/cli/hermes-import-runner.ts +130 -0
- package/src/apps/cli/hermes-validation-output.ts +91 -0
- package/src/apps/cli/index.ts +1731 -0
- package/src/apps/cli/mcp-install.ts +106 -0
- package/src/apps/cli/retrieval-disclosure-output.ts +196 -0
- package/src/apps/dashboard/assets/js/bootstrap.js +244 -0
- package/src/apps/dashboard/assets/js/chat.js +373 -0
- package/src/apps/dashboard/assets/js/disclosure.js +232 -0
- package/src/apps/dashboard/assets/js/modals.js +298 -0
- package/src/apps/dashboard/assets/js/overview.js +655 -0
- package/src/apps/dashboard/assets/js/state.js +72 -0
- package/src/apps/dashboard/assets/js/views.js +468 -0
- package/src/{ui → apps/dashboard}/index.html +43 -1
- package/src/apps/dashboard/index.ts +3 -0
- package/src/{ui → apps/dashboard}/style.css +222 -0
- package/src/apps/index.ts +5 -0
- package/src/apps/server/api/chat.ts +244 -0
- package/src/apps/server/api/citations.ts +105 -0
- package/src/apps/server/api/events.ts +137 -0
- package/src/apps/server/api/health.ts +53 -0
- package/src/apps/server/api/index.ts +26 -0
- package/src/apps/server/api/projects.ts +74 -0
- package/src/apps/server/api/search.ts +184 -0
- package/src/apps/server/api/sessions.ts +115 -0
- package/src/apps/server/api/stats.ts +723 -0
- package/src/apps/server/api/turns.ts +143 -0
- package/src/apps/server/api/utils.ts +65 -0
- package/src/apps/server/index.ts +111 -0
- package/src/cli/index.ts +2 -1311
- package/src/cli/retrieval-disclosure-output.ts +2 -0
- package/src/compat/index.ts +5 -0
- package/src/core/derive/fact-deriver.ts +170 -0
- package/src/core/derive/index.ts +2 -0
- package/src/core/derive/summary-deriver.ts +76 -0
- package/src/core/embedder.ts +4 -152
- package/src/core/engine/embedding-maintenance-service.ts +187 -0
- package/src/core/engine/endless-memory-services.ts +4 -0
- package/src/core/engine/index.ts +19 -0
- package/src/core/engine/memory-engine-services.ts +170 -0
- package/src/core/engine/memory-ingest-service.ts +317 -0
- package/src/core/engine/memory-query-service.ts +173 -0
- package/src/core/engine/memory-runtime-service.ts +162 -0
- package/src/core/engine/memory-service-composition.ts +231 -0
- package/src/core/engine/retrieval-analytics-service.ts +181 -0
- package/src/core/engine/retrieval-disclosure-service.ts +420 -0
- package/src/core/engine/retrieval-orchestrator.ts +377 -0
- package/src/core/engine/retrieval-services.ts +176 -0
- package/src/core/engine/shared-memory-services.ts +4 -0
- package/src/core/entity-repo.ts +1 -3
- package/src/core/event-store.ts +3 -3
- package/src/core/evidence-aligner.ts +2 -2
- package/src/core/external-market-context.ts +582 -0
- package/src/core/graduation.ts +2 -3
- package/src/core/index.ts +21 -0
- package/src/core/matcher.ts +2 -4
- package/src/core/model/memory-fact.ts +30 -0
- package/src/core/model/memory-rule.ts +14 -0
- package/src/core/model/memory-summary.ts +21 -0
- package/src/core/model/raw-event.ts +28 -0
- package/src/core/model/retrieval-result.ts +35 -0
- package/src/core/privacy/filter.ts +21 -10
- package/src/core/product-validation-matrix.ts +314 -0
- package/src/core/progressive-retriever.ts +1 -2
- package/src/core/registry/project-path.ts +54 -0
- package/src/core/registry/session-registry.ts +69 -0
- package/src/core/replay-evaluator.ts +625 -0
- package/src/core/retrieval-benchmark.ts +117 -0
- package/src/core/retrieval-quality.ts +109 -0
- package/src/core/retriever.ts +53 -15
- package/src/core/session-qrels.ts +360 -0
- package/src/core/shared-event-store.ts +1 -1
- package/src/core/sqlite-event-store.ts +35 -11
- package/src/core/task/blocker-resolver.ts +2 -2
- package/src/core/task/task-resolver.ts +0 -1
- package/src/core/vector-outbox.ts +1 -10
- package/src/core/vector-worker.ts +1 -1
- package/src/extensions/endless-memory/endless-memory-services.ts +350 -0
- package/src/extensions/endless-memory/index.ts +1 -0
- package/src/extensions/index.ts +5 -0
- package/src/extensions/mcp/handlers.ts +960 -0
- package/src/extensions/mcp/index.ts +48 -0
- package/src/extensions/mcp/tools.ts +252 -0
- package/src/extensions/shared-memory/index.ts +1 -0
- package/src/extensions/shared-memory/shared-memory-services.ts +211 -0
- package/src/extensions/vector/embedder.ts +197 -0
- package/src/extensions/vector/index.ts +1 -0
- package/src/hooks/post-tool-use.ts +3 -236
- package/src/hooks/semantic-daemon-client.ts +1 -208
- package/src/hooks/semantic-daemon.ts +6 -271
- package/src/hooks/session-end.ts +4 -79
- package/src/hooks/session-start.ts +4 -73
- package/src/hooks/stop.ts +3 -173
- package/src/hooks/user-prompt-submit.ts +3 -338
- package/src/index.ts +13 -0
- package/src/mcp/handlers.ts +2 -212
- package/src/mcp/index.ts +3 -46
- package/src/mcp/tools.ts +2 -78
- package/src/server/api/chat.ts +2 -244
- package/src/server/api/citations.ts +2 -105
- package/src/server/api/events.ts +2 -137
- package/src/server/api/health.ts +2 -53
- package/src/server/api/index.ts +2 -26
- package/src/server/api/projects.ts +2 -74
- package/src/server/api/search.ts +2 -102
- package/src/server/api/sessions.ts +2 -115
- package/src/server/api/stats.ts +2 -724
- package/src/server/api/turns.ts +2 -143
- package/src/server/api/utils.ts +2 -46
- package/src/server/index.ts +2 -100
- package/src/services/bootstrap-organizer.ts +46 -26
- package/src/services/codex-session-history-importer.ts +521 -29
- package/src/services/hermes-session-history-importer.ts +733 -0
- package/src/services/memory-service-config.ts +36 -0
- package/src/services/memory-service-registry.ts +150 -0
- package/src/services/memory-service.ts +211 -1325
- package/src/services/session-history-importer.ts +58 -14
- package/tests/README.md +23 -0
- package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +54 -0
- package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +98 -0
- package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +99 -0
- package/tests/apps/app-layer-boundary.test.ts +48 -0
- package/tests/apps/claude-settings-hooks.test.ts +107 -0
- package/tests/apps/cli-disclosure-output.test.ts +212 -0
- package/tests/apps/codex-import-runner.test.ts +99 -0
- package/tests/apps/codex-validation-output.test.ts +100 -0
- package/tests/apps/hermes-import-runner.test.ts +99 -0
- package/tests/apps/mcp-install-command.test.ts +59 -0
- package/tests/apps/package-build-entrypoints.test.ts +30 -0
- package/tests/apps/postinstall-embedding-backend.test.ts +167 -0
- package/tests/apps/search-api-disclosure.test.ts +162 -0
- package/tests/apps/stats-api-lightweight.test.ts +67 -0
- package/tests/apps/ui-disclosure-output.test.ts +140 -0
- package/tests/{bootstrap-organizer.test.ts → core/bootstrap-organizer.test.ts} +1 -1
- package/tests/{canonical-key.test.ts → core/canonical-key.test.ts} +1 -1
- package/tests/core/codex-session-history-importer-validation.test.ts +185 -0
- package/tests/{consolidation-worker.test.ts → core/consolidation-worker.test.ts} +2 -2
- package/tests/core/embedding-maintenance-service.test.ts +282 -0
- package/tests/{evidence-aligner.test.ts → core/evidence-aligner.test.ts} +1 -1
- package/tests/core/external-market-context.test.ts +209 -0
- package/tests/core/fact-deriver.test.ts +79 -0
- package/tests/core/hermes-session-history-importer-validation.test.ts +609 -0
- package/tests/{ingest-interceptor.test.ts → core/ingest-interceptor.test.ts} +1 -1
- package/tests/{markdown-mirror.test.ts → core/markdown-mirror.test.ts} +2 -2
- package/tests/{matcher.test.ts → core/matcher.test.ts} +1 -1
- package/tests/{md-mirror.test.ts → core/md-mirror.test.ts} +2 -2
- package/tests/core/memory-engine-services.test.ts +240 -0
- package/tests/core/memory-ingest-service.test.ts +296 -0
- package/tests/core/memory-query-service.test.ts +129 -0
- package/tests/core/memory-runtime-service.test.ts +201 -0
- package/tests/core/memory-service-composition.test.ts +192 -0
- package/tests/core/memory-service-config.test.ts +41 -0
- package/tests/core/memory-service-facade.test.ts +30 -0
- package/tests/core/memory-service-registry.test.ts +206 -0
- package/tests/core/product-validation-matrix.test.ts +61 -0
- package/tests/core/project-registry.test.ts +78 -0
- package/tests/core/replay-evaluator.test.ts +181 -0
- package/tests/core/retrieval-analytics-service.test.ts +210 -0
- package/tests/core/retrieval-benchmark.test.ts +93 -0
- package/tests/core/retrieval-disclosure-service.test.ts +264 -0
- package/tests/core/retrieval-orchestrator.test.ts +403 -0
- package/tests/core/retrieval-quality.test.ts +31 -0
- package/tests/core/retrieval-services.test.ts +185 -0
- package/tests/{retriever-fallback-chain.test.ts → core/retriever-fallback-chain.test.ts} +3 -3
- package/tests/{retriever-strategy-scope.test.ts → core/retriever-strategy-scope.test.ts} +70 -3
- package/tests/{retriever.memu-adoption.test.ts → core/retriever.memu-adoption.test.ts} +3 -3
- package/tests/core/session-history-importer-filter.test.ts +78 -0
- package/tests/core/session-qrels.test.ts +250 -0
- package/tests/{sqlite-event-store-replication.test.ts → core/sqlite-event-store-replication.test.ts} +36 -1
- package/tests/core/summary-deriver.test.ts +66 -0
- package/tests/extensions/embedder-warning-suppression.test.ts +53 -0
- package/tests/extensions/endless-memory-extension-boundary.test.ts +17 -0
- package/tests/extensions/endless-memory-services.test.ts +325 -0
- package/tests/extensions/mcp-context-tools.test.ts +905 -0
- package/tests/extensions/mcp-extension-boundary.test.ts +21 -0
- package/tests/extensions/mcp-package-build.test.ts +22 -0
- package/tests/extensions/mcp-project-aware-tools.test.ts +102 -0
- package/tests/extensions/shared-memory-extension-boundary.test.ts +24 -0
- package/tests/extensions/shared-memory-services.test.ts +309 -0
- package/tests/extensions/vector-extension-boundary.test.ts +21 -0
- package/.claude/settings.local.json +0 -25
- package/.npm-cache/_cacache/content-v2/sha512/04/76/c098f88dfe584a2b80870bff7421b05d17d3d9ee1027f77772332a22d3f93a9a57101a2855107f6ad82077a818bba912b2bc317f2361b5ddb09ad284d9ce +0 -0
- package/.npm-cache/_cacache/content-v2/sha512/60/25/d2ecd39cfc7cab58351162814be77f935c6d6491c10c3745d456da7ddb2117ffd90c10e53fe3c0f1ed16b403307841543634504398b16ee4e6b6dd8e0c45 +0 -0
- package/.npm-cache/_cacache/index-v5/2b/9a/7f8f40206ed8a2e0a84efaa953ccaed1f5d001e14b931083f2e7a0738007 +0 -2
- package/.npm-cache/_cacache/index-v5/2e/d9/fcfa5c6a6abdc2a3644ab84a95936047298c465a2f47ee03db8f7fe1e946 +0 -3
- package/.npm-cache/_cacache/index-v5/a9/42/e519633356d12d3d2f19da66a8301016d496c8f5c3e0554124aaa62dc043 +0 -2
- package/.npm-cache/_logs/2026-02-26T12_04_52_729Z-debug-0.log +0 -256
- package/.npm-cache/_logs/2026-02-26T12_05_36_835Z-debug-0.log +0 -18
- package/.npm-cache/_logs/2026-02-26T12_05_45_982Z-debug-0.log +0 -32
- package/.npm-cache/_logs/2026-02-26T12_05_48_515Z-debug-0.log +0 -260
- package/.npm-cache/_logs/2026-02-26T12_05_53_567Z-debug-0.log +0 -69
- package/.npm-cache/_update-notifier-last-checked +0 -0
- package/bootstrap-kb/decisions/decisions.md +0 -244
- package/bootstrap-kb/glossary/glossary.md +0 -46
- package/bootstrap-kb/modules/.claude-plugin.md +0 -22
- package/bootstrap-kb/modules/agents.md.md +0 -15
- package/bootstrap-kb/modules/claude.md.md +0 -15
- package/bootstrap-kb/modules/context.md.md +0 -15
- package/bootstrap-kb/modules/docs.md +0 -18
- package/bootstrap-kb/modules/handoff.md.md +0 -15
- package/bootstrap-kb/modules/package-lock.json.md +0 -15
- package/bootstrap-kb/modules/package.json.md +0 -15
- package/bootstrap-kb/modules/plan.md.md +0 -15
- package/bootstrap-kb/modules/readme.md.md +0 -15
- package/bootstrap-kb/modules/scripts.md +0 -26
- package/bootstrap-kb/modules/spec.md.md +0 -15
- package/bootstrap-kb/modules/specs.md +0 -20
- package/bootstrap-kb/modules/src.md +0 -51
- package/bootstrap-kb/modules/tests.md +0 -42
- package/bootstrap-kb/modules/tsconfig.json.md +0 -15
- package/bootstrap-kb/modules/vitest.config.ts.md +0 -15
- package/bootstrap-kb/overview/overview.md +0 -40
- package/bootstrap-kb/sources/manifest.json +0 -950
- package/bootstrap-kb/sources/manifest.md +0 -227
- package/bootstrap-kb/timeline/timeline.md +0 -57
- package/claude-memory-layer-1.0.14.tgz +0 -0
- package/d.sh +0 -3
- package/deploy.sh +0 -3
- package/dist/ui/app.js +0 -2101
- package/memory/.claude-plugin/commands/2026-02-25.md +0 -263
- package/memory/_index.md +0 -419
- package/memory/agent_response/uncategorized/2026-02-26.md +0 -176
- package/memory/agent_response/uncategorized/2026-03-03.md +0 -14
- package/memory/agent_response/uncategorized/2026-03-04.md +0 -1421
- package/memory/agent_response/uncategorized/2026-03-05.md +0 -157
- package/memory/default/uncategorized/2026-02-25.md +0 -4839
- package/memory/session_summary/uncategorized/2026-02-26.md +0 -13
- package/memory/session_summary/uncategorized/2026-03-03.md +0 -5
- package/memory/session_summary/uncategorized/2026-03-04.md +0 -50
- package/memory/specs/20260207-dashboard-upgrade/2026-02-25.md +0 -142
- package/memory/specs/citations-system/2026-02-25.md +0 -1121
- package/memory/specs/endless-mode/2026-02-25.md +0 -1392
- package/memory/specs/entity-edge-model/2026-02-25.md +0 -1263
- package/memory/specs/evidence-aligner-v2/2026-02-25.md +0 -1028
- package/memory/specs/mcp-desktop-integration/2026-02-25.md +0 -1334
- package/memory/specs/post-tool-use-hook/2026-02-25.md +0 -1164
- package/memory/specs/private-tags/2026-02-25.md +0 -1057
- package/memory/specs/progressive-disclosure/2026-02-25.md +0 -1436
- package/memory/specs/task-entity-system/2026-02-25.md +0 -924
- package/memory/specs/vector-outbox-v2/2026-02-25.md +0 -1510
- package/memory/specs/web-viewer-ui/2026-02-25.md +0 -1709
- package/memory/tool_observation/uncategorized/2026-02-26.md +0 -209
- package/memory/tool_observation/uncategorized/2026-03-03.md +0 -21
- package/memory/tool_observation/uncategorized/2026-03-04.md +0 -1033
- package/memory/tool_observation/uncategorized/2026-03-05.md +0 -33
- package/memory/user_prompt/uncategorized/2026-02-26.md +0 -25
- package/memory/user_prompt/uncategorized/2026-03-04.md +0 -634
- package/memory/user_prompt/uncategorized/2026-03-05.md +0 -6
- package/specs/optional-duckdb/context.md +0 -77
- package/specs/optional-duckdb/plan.md +0 -142
- package/specs/optional-duckdb/spec.md +0 -35
- package/src/ui/app.js +0 -2101
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
# Thin Core Refactor Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **Version**: 1.0.0
|
|
4
|
+
> **Status**: Draft
|
|
5
|
+
> **Created**: 2026-04-30
|
|
6
|
+
> **For Hermes:** Use this plan to execute the thin-core refactor incrementally without breaking the shipped Claude integration.
|
|
7
|
+
|
|
8
|
+
**Goal:** `claude-memory-layer`를 thin-core 구조로 재편해 core / adapter / extension / app 경계를 명확히 하고, SQLite 중심의 설명 가능한 메모리 엔진으로 정리한다.
|
|
9
|
+
|
|
10
|
+
**Architecture:** 기존 구현을 한 번에 갈아엎지 않고 strangler 방식으로 이동한다. 먼저 문서와 타입을 정리하고, 다음으로 `MemoryService` 책임을 작은 서비스들로 추출하며, 그 뒤 Claude hooks를 adapter 레이어로 분리하고, 마지막으로 vector/shared/MCP/continuity를 extension 계층으로 이동한다.
|
|
11
|
+
|
|
12
|
+
**Tech Stack:** TypeScript, Node.js 18+, better-sqlite3, Hono, LanceDB, existing hook/server/CLI architecture
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Phase 0: 문서와 현실 구현 정렬
|
|
17
|
+
|
|
18
|
+
### Task 0.1: Thin-core 스펙 문서 추가
|
|
19
|
+
|
|
20
|
+
**Objective:** 리팩터링의 기준 문서를 저장소 안에 정식으로 남긴다.
|
|
21
|
+
|
|
22
|
+
**Files:**
|
|
23
|
+
- Create: `specs/thin-core-refactor/spec.md`
|
|
24
|
+
- Create: `specs/thin-core-refactor/plan.md`
|
|
25
|
+
- Create: `specs/thin-core-refactor/context.md`
|
|
26
|
+
|
|
27
|
+
**Step 1: 문서 작성**
|
|
28
|
+
- 이 문서 세트를 저장소에 추가한다.
|
|
29
|
+
|
|
30
|
+
**Step 2: Commit**
|
|
31
|
+
```bash
|
|
32
|
+
git add specs/thin-core-refactor
|
|
33
|
+
git commit -m "docs: add thin-core refactor specification"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Task 0.2: README drift 식별 체크리스트 작성
|
|
37
|
+
|
|
38
|
+
**Objective:** 구현과 불일치하는 문서를 식별해 추후 수정 범위를 고정한다.
|
|
39
|
+
|
|
40
|
+
**Files:**
|
|
41
|
+
- Modify: `README.md`
|
|
42
|
+
- Modify: `docs/OPERATIONS.md`
|
|
43
|
+
- Reference: `package.json`
|
|
44
|
+
- Reference: `src/services/memory-service.ts`
|
|
45
|
+
|
|
46
|
+
**Step 1: drift 항목 수집**
|
|
47
|
+
문서화할 항목 예:
|
|
48
|
+
- SQLite vs DuckDB
|
|
49
|
+
- Hono node server vs Bun 서술
|
|
50
|
+
- MCP shipped 여부/experimental 여부
|
|
51
|
+
- vector/shared 기능의 기본/옵션 구분
|
|
52
|
+
|
|
53
|
+
**Step 2: drift TODO 섹션 추가 또는 별도 문서화**
|
|
54
|
+
간단한 체크리스트 예시:
|
|
55
|
+
```markdown
|
|
56
|
+
## Architecture drift cleanup
|
|
57
|
+
- [ ] Primary store wording updated to SQLite
|
|
58
|
+
- [ ] Server runtime wording updated to Hono/@hono/node-server
|
|
59
|
+
- [ ] MCP marked as extension/experimental until fully packaged
|
|
60
|
+
- [ ] Canonical vs derived storage roles documented
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Step 3: Verification**
|
|
64
|
+
- README에 현재 shipped reality와 future/experimental을 구분했는지 확인
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Phase 1: 새 구조의 빈 뼈대 만들기
|
|
69
|
+
|
|
70
|
+
### Task 1.1: 새 폴더 구조 생성
|
|
71
|
+
|
|
72
|
+
**Objective:** 실제 코드 이동 전, 목표 구조의 빈 경계를 만든다.
|
|
73
|
+
|
|
74
|
+
**Files:**
|
|
75
|
+
- Create directories:
|
|
76
|
+
- `src/core/model/`
|
|
77
|
+
- `src/core/storage/`
|
|
78
|
+
- `src/core/derive/`
|
|
79
|
+
- `src/core/retrieval/`
|
|
80
|
+
- `src/core/registry/`
|
|
81
|
+
- `src/core/journal/`
|
|
82
|
+
- `src/core/engine/`
|
|
83
|
+
- `src/adapters/claude/hooks/`
|
|
84
|
+
- `src/adapters/claude/transcript/`
|
|
85
|
+
- `src/adapters/claude/capture/`
|
|
86
|
+
- `src/adapters/claude/context/`
|
|
87
|
+
- `src/extensions/vector/`
|
|
88
|
+
- `src/extensions/analytics/`
|
|
89
|
+
- `src/extensions/shared-memory/`
|
|
90
|
+
- `src/extensions/mcp/`
|
|
91
|
+
- `src/extensions/continuity/`
|
|
92
|
+
- `src/apps/cli/`
|
|
93
|
+
- `src/apps/server/`
|
|
94
|
+
- `src/apps/dashboard/`
|
|
95
|
+
- `src/compat/`
|
|
96
|
+
|
|
97
|
+
**Step 1: 디렉터리 생성**
|
|
98
|
+
- `write_file`로 `.gitkeep` 또는 index 파일을 만들며 구조 생성
|
|
99
|
+
|
|
100
|
+
**Step 2: 각 계층에 짧은 README 추가**
|
|
101
|
+
예:
|
|
102
|
+
```markdown
|
|
103
|
+
# core
|
|
104
|
+
Canonical memory engine. No adapter-specific logic.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Step 3: Commit**
|
|
108
|
+
```bash
|
|
109
|
+
git add src/core src/adapters src/extensions src/apps src/compat
|
|
110
|
+
git commit -m "refactor: add thin-core directory skeleton"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Task 1.2: 루트 barrel 또는 index 방침 정의
|
|
114
|
+
|
|
115
|
+
**Objective:** 무분별한 cross-import를 막기 위한 import 규칙을 잡는다.
|
|
116
|
+
|
|
117
|
+
**Files:**
|
|
118
|
+
- Create: `src/core/index.ts`
|
|
119
|
+
- Create: `src/adapters/claude/index.ts`
|
|
120
|
+
- Create: `src/extensions/index.ts`
|
|
121
|
+
|
|
122
|
+
**Step 1: 최소 export만 노출**
|
|
123
|
+
- 각 계층별 public surface를 제한한다.
|
|
124
|
+
|
|
125
|
+
**Step 2: 경계 규칙 주석 추가**
|
|
126
|
+
예:
|
|
127
|
+
```ts
|
|
128
|
+
// core must not import adapters/apps.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Phase 2: 도메인 타입 분리
|
|
134
|
+
|
|
135
|
+
### Task 2.1: RawEvent 타입 정의
|
|
136
|
+
|
|
137
|
+
**Objective:** 기존 이벤트 개념을 명시적인 raw 이벤트 모델로 정리한다.
|
|
138
|
+
|
|
139
|
+
**Files:**
|
|
140
|
+
- Create: `src/core/model/raw-event.ts`
|
|
141
|
+
- Modify: `src/core/types.ts`
|
|
142
|
+
|
|
143
|
+
**Step 1: 타입 정의 작성**
|
|
144
|
+
포함:
|
|
145
|
+
- eventType
|
|
146
|
+
- sourceRef
|
|
147
|
+
- privacyLevel
|
|
148
|
+
- metadata
|
|
149
|
+
|
|
150
|
+
**Step 2: 기존 타입과 연결**
|
|
151
|
+
- 기존 `MemoryEvent`, `MemoryEventInput`과의 대응 관계를 주석으로 명확히 기록
|
|
152
|
+
|
|
153
|
+
**Step 3: Verification**
|
|
154
|
+
- typecheck 시 순환 import 없는지 확인
|
|
155
|
+
|
|
156
|
+
### Task 2.2: MemoryFact 타입 정의
|
|
157
|
+
|
|
158
|
+
**Objective:** 검색 최적화 단위를 새 타입으로 정의한다.
|
|
159
|
+
|
|
160
|
+
**Files:**
|
|
161
|
+
- Create: `src/core/model/memory-fact.ts`
|
|
162
|
+
- Modify: `src/core/types.ts`
|
|
163
|
+
|
|
164
|
+
**Step 1: 최소 필드로 시작**
|
|
165
|
+
- `factId`, `text`, `factType`, `derivedFromEventIds`, `confidence`, `tags`
|
|
166
|
+
|
|
167
|
+
**Step 2: code-aware anchor 확장 포인트 남기기**
|
|
168
|
+
- `fileRefs`, `symbolRefs` optional
|
|
169
|
+
|
|
170
|
+
### Task 2.3: MemorySummary / MemoryRule / RetrievalResultEnvelope 정의
|
|
171
|
+
|
|
172
|
+
**Objective:** summary/rule/result model을 표준화한다.
|
|
173
|
+
|
|
174
|
+
**Files:**
|
|
175
|
+
- Create: `src/core/model/memory-summary.ts`
|
|
176
|
+
- Create: `src/core/model/memory-rule.ts`
|
|
177
|
+
- Create: `src/core/model/retrieval-result.ts`
|
|
178
|
+
|
|
179
|
+
**Step 1: retrieval reason taxonomy 추가**
|
|
180
|
+
- `semantic_match`, `keyword_match`, `recent_relevance`, 등
|
|
181
|
+
|
|
182
|
+
**Step 2: resultType enum 추가**
|
|
183
|
+
- `fact`, `summary`, `tool_evidence`, `rule`, `source`
|
|
184
|
+
|
|
185
|
+
**Step 3: Commit**
|
|
186
|
+
```bash
|
|
187
|
+
git add src/core/model src/core/types.ts
|
|
188
|
+
git commit -m "refactor: add thin-core domain model types"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Phase 3: Registry 분리
|
|
194
|
+
|
|
195
|
+
### Task 3.1: Project path/hash 유틸 추출
|
|
196
|
+
|
|
197
|
+
**Objective:** 프로젝트 경로 normalize/hash/storage path 책임을 분리한다.
|
|
198
|
+
|
|
199
|
+
**Files:**
|
|
200
|
+
- Create: `src/core/registry/project-path.ts`
|
|
201
|
+
- Modify: `src/services/memory-service.ts`
|
|
202
|
+
|
|
203
|
+
**Step 1: 함수 이동**
|
|
204
|
+
- `normalizePath`
|
|
205
|
+
- `hashProjectPath`
|
|
206
|
+
- `getProjectStoragePath`
|
|
207
|
+
|
|
208
|
+
**Step 2: 기존 import 교체**
|
|
209
|
+
- `MemoryService`는 새 모듈을 import하도록 변경
|
|
210
|
+
|
|
211
|
+
### Task 3.2: Session registry service 추출
|
|
212
|
+
|
|
213
|
+
**Objective:** session registry의 파일 IO 책임을 core registry 계층으로 이동한다.
|
|
214
|
+
|
|
215
|
+
**Files:**
|
|
216
|
+
- Create: `src/core/registry/session-registry.ts`
|
|
217
|
+
- Modify: `src/services/memory-service.ts`
|
|
218
|
+
|
|
219
|
+
**Step 1: 함수 이동**
|
|
220
|
+
- `loadSessionRegistry`
|
|
221
|
+
- `registerSession`
|
|
222
|
+
- `getSessionProject`
|
|
223
|
+
|
|
224
|
+
**Step 2: 테스트 추가**
|
|
225
|
+
- existing registry 관련 동작 검증 테스트 신규 작성
|
|
226
|
+
|
|
227
|
+
**Step 3: Verification**
|
|
228
|
+
Run:
|
|
229
|
+
```bash
|
|
230
|
+
npm test -- --run
|
|
231
|
+
```
|
|
232
|
+
Expected:
|
|
233
|
+
- 기존 registry behavior 유지
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Phase 4: Ingest / Derive / Query 서비스 추출
|
|
238
|
+
|
|
239
|
+
### Task 4.1: MemoryIngestService 추출
|
|
240
|
+
|
|
241
|
+
**Objective:** raw event append 경로를 독립 서비스로 만든다.
|
|
242
|
+
|
|
243
|
+
**Files:**
|
|
244
|
+
- Create: `src/core/engine/memory-ingest-service.ts`
|
|
245
|
+
- Modify: `src/services/memory-service.ts`
|
|
246
|
+
|
|
247
|
+
**Step 1: append flow 이동**
|
|
248
|
+
- validation / privacy filter / sqlite append orchestration
|
|
249
|
+
|
|
250
|
+
**Step 2: 기존 public API 유지**
|
|
251
|
+
- `MemoryService.append*` 계열 메서드는 내부적으로 새 서비스 호출
|
|
252
|
+
|
|
253
|
+
### Task 4.2: FactDeriver 추출
|
|
254
|
+
|
|
255
|
+
**Objective:** raw event에서 facts를 뽑는 책임을 분리한다.
|
|
256
|
+
|
|
257
|
+
**Files:**
|
|
258
|
+
- Create: `src/core/derive/fact-deriver.ts`
|
|
259
|
+
- Modify: `src/services/memory-service.ts`
|
|
260
|
+
|
|
261
|
+
**Step 1: 최소 도출 규칙 구현**
|
|
262
|
+
- prompt/assistant/tool event 각각의 기본 fact derivation 규칙
|
|
263
|
+
|
|
264
|
+
**Step 2: deterministic key 전략 도입 설계 자리 만들기**
|
|
265
|
+
- event-derived fact id 생성 함수 추가
|
|
266
|
+
|
|
267
|
+
### Task 4.3: SummaryDeriver 추출
|
|
268
|
+
|
|
269
|
+
**Objective:** turn/session/project summary 로직을 분리한다.
|
|
270
|
+
|
|
271
|
+
**Files:**
|
|
272
|
+
- Create: `src/core/derive/summary-deriver.ts`
|
|
273
|
+
- Modify: `src/services/memory-service.ts`
|
|
274
|
+
|
|
275
|
+
**Step 1: turn/session summary부터 이동**
|
|
276
|
+
- continuity/project summary는 나중 단계에서 추가 가능
|
|
277
|
+
|
|
278
|
+
### Task 4.4: RetrievalEngine 추출
|
|
279
|
+
|
|
280
|
+
**Objective:** 검색/확장/소스 조회를 명시적 서비스로 분리한다.
|
|
281
|
+
|
|
282
|
+
**Files:**
|
|
283
|
+
- Create: `src/core/retrieval/retrieval-engine.ts`
|
|
284
|
+
- Create: `src/core/retrieval/source-resolver.ts`
|
|
285
|
+
- Create: `src/core/retrieval/result-expander.ts`
|
|
286
|
+
- Modify: `src/services/memory-service.ts`
|
|
287
|
+
|
|
288
|
+
**Step 1: search contract 정의**
|
|
289
|
+
- resultType / reasons 포함
|
|
290
|
+
|
|
291
|
+
**Step 2: expand/source API 뼈대 추가**
|
|
292
|
+
- CLI/API에서 추후 사용 가능하도록 별도 메서드 확보
|
|
293
|
+
|
|
294
|
+
**Step 3: Commit**
|
|
295
|
+
```bash
|
|
296
|
+
git add src/core/engine src/core/derive src/core/retrieval src/services/memory-service.ts
|
|
297
|
+
git commit -m "refactor: extract ingest derive and retrieval services"
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Phase 5: Claude Adapter Isolation
|
|
303
|
+
|
|
304
|
+
### Task 5.1: hooks 물리 이동
|
|
305
|
+
|
|
306
|
+
**Objective:** Claude hooks를 adapter layer 하위로 옮긴다.
|
|
307
|
+
|
|
308
|
+
**Files:**
|
|
309
|
+
- Move/Copy:
|
|
310
|
+
- `src/hooks/session-start.ts` → `src/adapters/claude/hooks/session-start.ts`
|
|
311
|
+
- `src/hooks/user-prompt-submit.ts` → `src/adapters/claude/hooks/user-prompt-submit.ts`
|
|
312
|
+
- `src/hooks/post-tool-use.ts` → `src/adapters/claude/hooks/post-tool-use.ts`
|
|
313
|
+
- `src/hooks/stop.ts` → `src/adapters/claude/hooks/stop.ts`
|
|
314
|
+
- `src/hooks/session-end.ts` → `src/adapters/claude/hooks/session-end.ts`
|
|
315
|
+
|
|
316
|
+
**Step 1: 새 위치에 파일 이동 또는 thin wrapper 추가**
|
|
317
|
+
- 기존 entrypoint는 compat wrapper로 유지 가능
|
|
318
|
+
|
|
319
|
+
**Step 2: import paths 고치기**
|
|
320
|
+
- core service / registry / retrieval imports 재정리
|
|
321
|
+
|
|
322
|
+
### Task 5.2: transcript parsing 모듈화
|
|
323
|
+
|
|
324
|
+
**Objective:** stop/session-end 내부 transcript 복원 코드를 분리한다.
|
|
325
|
+
|
|
326
|
+
**Files:**
|
|
327
|
+
- Create: `src/adapters/claude/transcript/transcript-reader.ts`
|
|
328
|
+
- Create: `src/adapters/claude/transcript/turn-reconstructor.ts`
|
|
329
|
+
- Modify: `src/adapters/claude/hooks/stop.ts`
|
|
330
|
+
- Modify: `src/adapters/claude/hooks/session-end.ts`
|
|
331
|
+
|
|
332
|
+
### Task 5.3: capture policy 분리
|
|
333
|
+
|
|
334
|
+
**Objective:** 어떤 tool/prompt/response를 저장할지 정책 모듈로 분리한다.
|
|
335
|
+
|
|
336
|
+
**Files:**
|
|
337
|
+
- Create: `src/adapters/claude/capture/tool-capture-policy.ts`
|
|
338
|
+
- Create: `src/adapters/claude/capture/prompt-capture-policy.ts`
|
|
339
|
+
- Create: `src/adapters/claude/capture/response-capture-policy.ts`
|
|
340
|
+
|
|
341
|
+
### Task 5.4: context formatter 분리
|
|
342
|
+
|
|
343
|
+
**Objective:** retrieval result를 Claude `additionalContext` 문자열로 바꾸는 책임을 분리한다.
|
|
344
|
+
|
|
345
|
+
**Files:**
|
|
346
|
+
- Create: `src/adapters/claude/context/context-formatter.ts`
|
|
347
|
+
- Modify: `src/adapters/claude/hooks/user-prompt-submit.ts`
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Phase 6: Vector / Accelerator Optionalization
|
|
352
|
+
|
|
353
|
+
### Task 6.1: vector 계층을 extension으로 이동
|
|
354
|
+
|
|
355
|
+
**Objective:** vector implementation을 core 밖으로 이동한다.
|
|
356
|
+
|
|
357
|
+
**Files:**
|
|
358
|
+
- Move/Copy:
|
|
359
|
+
- `src/core/vector-store.ts` → `src/extensions/vector/vector-store.ts`
|
|
360
|
+
- `src/core/embedder.ts` → `src/extensions/vector/embedder.ts`
|
|
361
|
+
- `src/core/vector-worker.ts` → `src/extensions/vector/vector-worker.ts`
|
|
362
|
+
- `src/core/vector-outbox.ts` → `src/extensions/vector/vector-outbox.ts`
|
|
363
|
+
|
|
364
|
+
**Step 1: re-export 유지**
|
|
365
|
+
- 기존 import 안정성을 위해 compat export 추가
|
|
366
|
+
|
|
367
|
+
### Task 6.2: SQLite-only fallback 검증
|
|
368
|
+
|
|
369
|
+
**Objective:** vector 초기화 실패/비활성 상태에서도 최소 search가 동작하게 한다.
|
|
370
|
+
|
|
371
|
+
**Files:**
|
|
372
|
+
- Modify: `src/core/retrieval/retrieval-engine.ts`
|
|
373
|
+
- Modify: `src/services/memory-service.ts`
|
|
374
|
+
- Test: `tests/*`
|
|
375
|
+
|
|
376
|
+
**Step 1: fallback path 명시화**
|
|
377
|
+
- keyword + recent timeline 기반 search 보장
|
|
378
|
+
|
|
379
|
+
**Step 2: 실패 테스트 추가**
|
|
380
|
+
- vector unavailable 시 graceful degradation 검증
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Phase 7: Extensions Extraction
|
|
385
|
+
|
|
386
|
+
### Task 7.1: shared-memory 분리
|
|
387
|
+
|
|
388
|
+
**Objective:** shared store와 promotion을 core 경계 밖으로 이동한다.
|
|
389
|
+
|
|
390
|
+
**Files:**
|
|
391
|
+
- Move/Copy:
|
|
392
|
+
- `src/core/shared-event-store.ts` → `src/extensions/shared-memory/shared-event-store.ts`
|
|
393
|
+
- `src/core/shared-store.ts` → `src/extensions/shared-memory/shared-store.ts`
|
|
394
|
+
- `src/core/shared-vector-store.ts` → `src/extensions/shared-memory/shared-vector-store.ts`
|
|
395
|
+
- `src/core/shared-promoter.ts` → `src/extensions/shared-memory/shared-promoter.ts`
|
|
396
|
+
|
|
397
|
+
### Task 7.2: continuity/endless mode 분리
|
|
398
|
+
|
|
399
|
+
**Objective:** working set / consolidated / continuity 계층을 extension으로 이동한다.
|
|
400
|
+
|
|
401
|
+
**Files:**
|
|
402
|
+
- Move/Copy relevant files to `src/extensions/continuity/`
|
|
403
|
+
|
|
404
|
+
### Task 7.3: MCP 분리
|
|
405
|
+
|
|
406
|
+
**Objective:** MCP를 extension으로 명시한다.
|
|
407
|
+
|
|
408
|
+
**Files:**
|
|
409
|
+
- `src/mcp/*` → `src/extensions/mcp/*`
|
|
410
|
+
|
|
411
|
+
**Step 1: package/build wiring 명시화**
|
|
412
|
+
- shipped인지 experimental인지 분명히 표기
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Phase 8: Apps Cleanup
|
|
417
|
+
|
|
418
|
+
### Task 8.1: CLI app 이동
|
|
419
|
+
|
|
420
|
+
**Objective:** CLI를 app layer로 재배치한다.
|
|
421
|
+
|
|
422
|
+
**Files:**
|
|
423
|
+
- `src/cli/index.ts` → `src/apps/cli/index.ts`
|
|
424
|
+
- compat wrapper 유지 가능
|
|
425
|
+
|
|
426
|
+
### Task 8.2: server app 이동
|
|
427
|
+
|
|
428
|
+
**Objective:** server/API를 app layer로 재배치한다.
|
|
429
|
+
|
|
430
|
+
**Files:**
|
|
431
|
+
- `src/server/*` → `src/apps/server/*`
|
|
432
|
+
|
|
433
|
+
### Task 8.3: dashboard asset modularization
|
|
434
|
+
|
|
435
|
+
**Objective:** `src/ui/app.js` 단일 파일을 기능별 모듈로 나눈다.
|
|
436
|
+
|
|
437
|
+
**Files:**
|
|
438
|
+
- `src/ui/*` → `src/apps/dashboard/*`
|
|
439
|
+
|
|
440
|
+
**Step 1: 최소 분리 단위**
|
|
441
|
+
- search
|
|
442
|
+
- sessions
|
|
443
|
+
- stats/health
|
|
444
|
+
- projects
|
|
445
|
+
- chat
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Phase 9: Hardening & Documentation Finish
|
|
450
|
+
|
|
451
|
+
### Task 9.1: compat layer 정리
|
|
452
|
+
|
|
453
|
+
**Objective:** 남은 legacy import wrapper를 줄인다.
|
|
454
|
+
|
|
455
|
+
**Files:**
|
|
456
|
+
- `src/compat/*`
|
|
457
|
+
- legacy path files
|
|
458
|
+
|
|
459
|
+
### Task 9.2: test matrix 재정리
|
|
460
|
+
|
|
461
|
+
**Objective:** core / adapters / extensions / apps 테스트 구분을 명확히 한다.
|
|
462
|
+
|
|
463
|
+
**Files:**
|
|
464
|
+
- `tests/core/*`
|
|
465
|
+
- `tests/adapters/claude/*`
|
|
466
|
+
- `tests/extensions/*`
|
|
467
|
+
- `tests/apps/*`
|
|
468
|
+
|
|
469
|
+
### Task 9.3: docs refresh
|
|
470
|
+
|
|
471
|
+
**Objective:** 실제 구조와 문서를 일치시킨다.
|
|
472
|
+
|
|
473
|
+
**Files:**
|
|
474
|
+
- `README.md`
|
|
475
|
+
- `docs/OPERATIONS.md`
|
|
476
|
+
- architecture docs
|
|
477
|
+
|
|
478
|
+
### Task 9.4: graphify update
|
|
479
|
+
|
|
480
|
+
**Objective:** 코드 변경 후 프로젝트 graphify를 갱신한다.
|
|
481
|
+
|
|
482
|
+
**Step 1: Run**
|
|
483
|
+
```bash
|
|
484
|
+
graphify update .
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Step 2: Verify**
|
|
488
|
+
- `graphify-out/` 보고서에 새 구조 반영 확인
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 검증 전략
|
|
493
|
+
|
|
494
|
+
### 각 Phase 공통 검증
|
|
495
|
+
Run:
|
|
496
|
+
```bash
|
|
497
|
+
npm run typecheck
|
|
498
|
+
npm test -- --run
|
|
499
|
+
npm run build
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
Expected:
|
|
503
|
+
- type errors 없음
|
|
504
|
+
- 기존 핵심 테스트 유지
|
|
505
|
+
- build 통과
|
|
506
|
+
|
|
507
|
+
### 중요 시나리오 검증
|
|
508
|
+
- hook ingest still works
|
|
509
|
+
- session registry still works
|
|
510
|
+
- search returns typed envelope
|
|
511
|
+
- vector off path works
|
|
512
|
+
- shared/mcp disabled path works
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## 권장 커밋 전략
|
|
517
|
+
|
|
518
|
+
- docs/specs 단위
|
|
519
|
+
- type/model 단위
|
|
520
|
+
- registry extraction 단위
|
|
521
|
+
- ingest/derive/retrieval extraction 단위
|
|
522
|
+
- adapter isolation 단위
|
|
523
|
+
- vector/shared/mcp extraction 단위
|
|
524
|
+
- app cleanup 단위
|
|
525
|
+
|
|
526
|
+
각 커밋은 **작고 되돌리기 쉬워야 한다.**
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## 실행 후 기대 상태
|
|
531
|
+
|
|
532
|
+
리팩터링이 완료되면:
|
|
533
|
+
- 새 기여자는 구조를 훨씬 빨리 이해할 수 있고
|
|
534
|
+
- core는 SQLite-only로도 설명 가능하며
|
|
535
|
+
- Claude integration은 강점으로 유지되고
|
|
536
|
+
- vector/shared/MCP 기능은 extension으로 안전하게 진화할 수 있다.
|