claude-memory-layer 1.0.8 → 1.0.10
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/.claude/settings.local.json +7 -1
- package/.claude-memory/test.sqlite +0 -0
- package/.history/package_20260202114053.json +49 -0
- package/.history/package_20260202121115.json +49 -0
- package/HANDOFF.md +92 -0
- package/dist/cli/index.js +1257 -74
- package/dist/cli/index.js.map +4 -4
- package/dist/core/index.js +1111 -47
- package/dist/core/index.js.map +4 -4
- package/dist/hooks/post-tool-use.js +5693 -0
- package/dist/hooks/post-tool-use.js.map +7 -0
- package/dist/hooks/session-end.js +1224 -67
- package/dist/hooks/session-end.js.map +4 -4
- package/dist/hooks/session-start.js +1219 -66
- package/dist/hooks/session-start.js.map +4 -4
- package/dist/hooks/stop.js +1224 -67
- package/dist/hooks/stop.js.map +4 -4
- package/dist/hooks/user-prompt-submit.js +1252 -98
- package/dist/hooks/user-prompt-submit.js.map +4 -4
- package/dist/server/api/index.js +1252 -73
- package/dist/server/api/index.js.map +4 -4
- package/dist/server/index.js +1252 -73
- package/dist/server/index.js.map +4 -4
- package/dist/services/memory-service.js +1246 -68
- package/dist/services/memory-service.js.map +4 -4
- package/dist/ui/app.js +304 -0
- package/dist/ui/index.html +195 -1188
- package/dist/ui/style.css +595 -0
- package/package.json +3 -1
- package/scripts/build.ts +2 -0
- package/src/core/event-store.ts +18 -0
- package/src/core/index.ts +3 -0
- package/src/core/retriever.ts +4 -1
- package/src/core/sqlite-event-store.ts +947 -0
- package/src/core/sqlite-wrapper.ts +108 -0
- package/src/core/sync-worker.ts +228 -0
- package/src/core/vector-worker.ts +44 -14
- package/src/hooks/user-prompt-submit.ts +40 -17
- package/src/server/api/stats.ts +37 -7
- package/src/services/memory-service.ts +239 -43
- package/src/ui/app.js +304 -0
- package/src/ui/index.html +195 -1188
- package/src/ui/style.css +595 -0
- package/test_access.js +49 -0
|
@@ -15,7 +15,13 @@
|
|
|
15
15
|
"WebSearch",
|
|
16
16
|
"Bash(timeout 5 sh -c 'node dist/cli/index.js dashboard --no-open &\nsleep 2\ncurl -s http://127.0.0.1:37777/api/stats/most-accessed\ncurl -s http://127.0.0.1:37777/health')",
|
|
17
17
|
"Bash(curl:*)",
|
|
18
|
-
"Bash(pkill:*)"
|
|
18
|
+
"Bash(pkill:*)",
|
|
19
|
+
"Bash(npm install:*)",
|
|
20
|
+
"Bash(sqlite3:*)",
|
|
21
|
+
"Read(//Users/namsangboy/**)",
|
|
22
|
+
"Bash(CLAUDE_MEMORY_DB=.claude-memory/test.sqlite timeout 10 sh -c 'node dist/cli/index.js dashboard --no-open &\nsleep 3\necho \"\"=== Most Accessed API ===\"\"\ncurl -s http://127.0.0.1:37777/api/stats/most-accessed | jq .\necho \"\"=== Level Stats API ===\"\"\ncurl -s \"\"http://127.0.0.1:37777/api/stats/levels/L0?sort=accessed\"\" | jq \"\".events | .[0:3]\"\"\npkill -f \"\"node dist/cli/index.js dashboard\"\"')",
|
|
23
|
+
"Bash(python3:*)",
|
|
24
|
+
"Bash(CLAUDE_MEMORY_DEBUG=true node:*)"
|
|
19
25
|
]
|
|
20
26
|
}
|
|
21
27
|
}
|
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-memory-layer",
|
|
3
|
+
"version": "1.0.9",
|
|
4
|
+
"description": "Claude Code plugin that learns from conversations to provide personalized assistance",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"claude-memory-layer": "dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsx scripts/build.ts",
|
|
12
|
+
"dev": "tsx src/cli/index.ts",
|
|
13
|
+
"test": "vitest",
|
|
14
|
+
"test:coverage": "vitest --coverage",
|
|
15
|
+
"lint": "eslint src/**/*.ts",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"claude-code",
|
|
20
|
+
"plugin",
|
|
21
|
+
"memory",
|
|
22
|
+
"learning",
|
|
23
|
+
"personalization",
|
|
24
|
+
"context"
|
|
25
|
+
],
|
|
26
|
+
"author": "Buzzni",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@hono/node-server": "^1.13.0",
|
|
33
|
+
"@lancedb/lancedb": "^0.5.0",
|
|
34
|
+
"@xenova/transformers": "^2.17.0",
|
|
35
|
+
"better-sqlite3": "^12.6.2",
|
|
36
|
+
"commander": "^12.0.0",
|
|
37
|
+
"duckdb": "^0.10.0",
|
|
38
|
+
"hono": "^4.0.0",
|
|
39
|
+
"zod": "^3.22.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
43
|
+
"@types/node": "^20.11.0",
|
|
44
|
+
"esbuild": "^0.20.0",
|
|
45
|
+
"tsx": "^4.7.0",
|
|
46
|
+
"typescript": "^5.4.0",
|
|
47
|
+
"vitest": "^1.4.0"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-memory-layer",
|
|
3
|
+
"version": "1.0.10",
|
|
4
|
+
"description": "Claude Code plugin that learns from conversations to provide personalized assistance",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"claude-memory-layer": "dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsx scripts/build.ts",
|
|
12
|
+
"dev": "tsx src/cli/index.ts",
|
|
13
|
+
"test": "vitest",
|
|
14
|
+
"test:coverage": "vitest --coverage",
|
|
15
|
+
"lint": "eslint src/**/*.ts",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"claude-code",
|
|
20
|
+
"plugin",
|
|
21
|
+
"memory",
|
|
22
|
+
"learning",
|
|
23
|
+
"personalization",
|
|
24
|
+
"context"
|
|
25
|
+
],
|
|
26
|
+
"author": "Buzzni",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@hono/node-server": "^1.13.0",
|
|
33
|
+
"@lancedb/lancedb": "^0.5.0",
|
|
34
|
+
"@xenova/transformers": "^2.17.0",
|
|
35
|
+
"better-sqlite3": "^12.6.2",
|
|
36
|
+
"commander": "^12.0.0",
|
|
37
|
+
"duckdb": "^0.10.0",
|
|
38
|
+
"hono": "^4.0.0",
|
|
39
|
+
"zod": "^3.22.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
43
|
+
"@types/node": "^20.11.0",
|
|
44
|
+
"esbuild": "^0.20.0",
|
|
45
|
+
"tsx": "^4.7.0",
|
|
46
|
+
"typescript": "^5.4.0",
|
|
47
|
+
"vitest": "^1.4.0"
|
|
48
|
+
}
|
|
49
|
+
}
|
package/HANDOFF.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Claude Memory Layer - 작업 핸드오프 문서
|
|
2
|
+
|
|
3
|
+
## 현재 상태
|
|
4
|
+
**날짜**: 2026-02-01
|
|
5
|
+
**상태**: SQLite WAL 마이그레이션 완료 ✅
|
|
6
|
+
|
|
7
|
+
## 문제 해결 완료
|
|
8
|
+
|
|
9
|
+
### 기존 문제
|
|
10
|
+
- DuckDB 다중 프로세스 동시 접근 충돌
|
|
11
|
+
- 웹 대시보드 (localhost:37777)에서 500 에러
|
|
12
|
+
- 훅과 서버 동시 실행 불가
|
|
13
|
+
|
|
14
|
+
### 해결책: 2-tier 스토리지 아키텍처
|
|
15
|
+
```
|
|
16
|
+
Hooks (쓰기) ──▶ SQLite (WAL) ◀── Server (읽기)
|
|
17
|
+
│
|
|
18
|
+
└── 동시 접근 가능 ✅
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 구현된 변경사항
|
|
22
|
+
|
|
23
|
+
### 새 파일
|
|
24
|
+
1. **`src/core/sqlite-wrapper.ts`** - SQLite WAL 모드 래퍼
|
|
25
|
+
2. **`src/core/sqlite-event-store.ts`** - SQLite 기반 EventStore
|
|
26
|
+
3. **`src/core/sync-worker.ts`** - SQLite→DuckDB 동기화 워커 (미래 분석용)
|
|
27
|
+
|
|
28
|
+
### 수정된 파일
|
|
29
|
+
1. **`src/services/memory-service.ts`** - 이중 스토어 아키텍처 통합
|
|
30
|
+
- `sqliteStore`: Primary store (항상 사용)
|
|
31
|
+
- `analyticsStore`: DuckDB (옵션, 분석용)
|
|
32
|
+
- `analyticsEnabled` 옵션 추가
|
|
33
|
+
|
|
34
|
+
2. **`src/core/index.ts`** - 새 모듈 export
|
|
35
|
+
|
|
36
|
+
3. **`scripts/build.ts`** - better-sqlite3 external 추가
|
|
37
|
+
|
|
38
|
+
4. **`package.json`** - better-sqlite3 의존성 추가
|
|
39
|
+
|
|
40
|
+
## 테스트 결과
|
|
41
|
+
```bash
|
|
42
|
+
# 서버 실행 중 훅 테스트
|
|
43
|
+
$ node dist/server/index.js &
|
|
44
|
+
$ echo '{"session_id":"test","prompt":"test","cwd":"/tmp"}' | node dist/hooks/user-prompt-submit.js
|
|
45
|
+
{"context":""} # 성공!
|
|
46
|
+
|
|
47
|
+
# 동시 실행 테스트 (5개 훅 병렬)
|
|
48
|
+
All hooks completed ✅
|
|
49
|
+
eventCount: 7
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 아키텍처 결정
|
|
53
|
+
|
|
54
|
+
### Primary Store: SQLite (WAL 모드)
|
|
55
|
+
- 훅에서 직접 쓰기
|
|
56
|
+
- 서버에서 직접 읽기
|
|
57
|
+
- WAL 모드: 다중 리더 + 단일 라이터 지원
|
|
58
|
+
- 락 충돌 없음
|
|
59
|
+
|
|
60
|
+
### Analytics Store: DuckDB (옵션, 미래용)
|
|
61
|
+
- 복잡한 분석 쿼리용
|
|
62
|
+
- 배치 동기화 (SyncWorker)
|
|
63
|
+
- 현재는 비활성화
|
|
64
|
+
|
|
65
|
+
## 빌드 및 실행
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 빌드
|
|
69
|
+
npm run build
|
|
70
|
+
|
|
71
|
+
# 서버 시작
|
|
72
|
+
node dist/server/index.js
|
|
73
|
+
|
|
74
|
+
# 훅 테스트 (서버 실행 중에도 가능!)
|
|
75
|
+
echo '{"session_id":"test","prompt":"test","cwd":"/tmp"}' | node dist/hooks/user-prompt-submit.js
|
|
76
|
+
|
|
77
|
+
# 대시보드
|
|
78
|
+
open http://localhost:37777
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 향후 작업 (선택사항)
|
|
82
|
+
|
|
83
|
+
1. **DuckDB 분석 기능 활성화**
|
|
84
|
+
- SyncWorker로 SQLite→DuckDB 동기화
|
|
85
|
+
- 복잡한 통계/분석 쿼리에 DuckDB 사용
|
|
86
|
+
|
|
87
|
+
2. **Shared Store SQLite 마이그레이션**
|
|
88
|
+
- 현재: 훅에서 비활성화
|
|
89
|
+
- 향후: SQLite 기반으로 전환
|
|
90
|
+
|
|
91
|
+
3. **마이그레이션 도구**
|
|
92
|
+
- 기존 DuckDB 데이터를 SQLite로 마이그레이션
|