a2a-memory 0.1.2 → 0.5.0
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/dist/cli/commands/add.d.ts +8 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +45 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +8 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +82 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/edit.d.ts +8 -0
- package/dist/cli/commands/edit.d.ts.map +1 -0
- package/dist/cli/commands/edit.js +66 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/embed.d.ts +8 -0
- package/dist/cli/commands/embed.d.ts.map +1 -0
- package/dist/cli/commands/embed.js +93 -0
- package/dist/cli/commands/embed.js.map +1 -0
- package/dist/cli/commands/rm.d.ts +8 -0
- package/dist/cli/commands/rm.d.ts.map +1 -0
- package/dist/cli/commands/rm.js +60 -0
- package/dist/cli/commands/rm.js.map +1 -0
- package/dist/cli/commands/team.d.ts +7 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +144 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts +7 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +96 -5
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +24 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +190 -62
- package/dist/db/database.js.map +1 -1
- package/dist/embedding/index.d.ts +20 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +28 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/local-provider.d.ts +40 -0
- package/dist/embedding/local-provider.d.ts.map +1 -0
- package/dist/embedding/local-provider.js +157 -0
- package/dist/embedding/local-provider.js.map +1 -0
- package/dist/embedding/openai-provider.d.ts +31 -0
- package/dist/embedding/openai-provider.d.ts.map +1 -0
- package/dist/embedding/openai-provider.js +92 -0
- package/dist/embedding/openai-provider.js.map +1 -0
- package/dist/extraction/extractor.d.ts +11 -1
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +63 -20
- package/dist/extraction/extractor.js.map +1 -1
- package/dist/extraction/scorer.d.ts +2 -0
- package/dist/extraction/scorer.d.ts.map +1 -1
- package/dist/extraction/scorer.js +23 -1
- package/dist/extraction/scorer.js.map +1 -1
- package/dist/extraction/similarity.d.ts +25 -0
- package/dist/extraction/similarity.d.ts.map +1 -0
- package/dist/extraction/similarity.js +85 -0
- package/dist/extraction/similarity.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +28 -8
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/session-end.d.ts +1 -0
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +134 -11
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts +2 -2
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +154 -22
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/shared.d.ts +18 -0
- package/dist/hooks/shared.d.ts.map +1 -0
- package/dist/hooks/shared.js +46 -0
- package/dist/hooks/shared.js.map +1 -0
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/cleanup.d.ts +25 -0
- package/dist/lifecycle/cleanup.d.ts.map +1 -0
- package/dist/lifecycle/cleanup.js +52 -0
- package/dist/lifecycle/cleanup.js.map +1 -0
- package/dist/lifecycle/index.d.ts +12 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +10 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/quality-scorer.d.ts +19 -0
- package/dist/lifecycle/quality-scorer.d.ts.map +1 -0
- package/dist/lifecycle/quality-scorer.js +40 -0
- package/dist/lifecycle/quality-scorer.js.map +1 -0
- package/dist/llm/client.d.ts +37 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +154 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +5 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/search/index.d.ts +8 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +7 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/ranker.d.ts +30 -0
- package/dist/search/ranker.d.ts.map +1 -0
- package/dist/search/ranker.js +91 -0
- package/dist/search/ranker.js.map +1 -0
- package/dist/sync/client.d.ts +85 -0
- package/dist/sync/client.d.ts.map +1 -1
- package/dist/sync/client.js +112 -4
- package/dist/sync/client.js.map +1 -1
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/queue.d.ts +49 -0
- package/dist/sync/queue.d.ts.map +1 -0
- package/dist/sync/queue.js +112 -0
- package/dist/sync/queue.js.map +1 -0
- package/dist/sync/synchronizer.d.ts +19 -5
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +128 -70
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/team-synchronizer.d.ts +43 -0
- package/dist/sync/team-synchronizer.d.ts.map +1 -0
- package/dist/sync/team-synchronizer.js +126 -0
- package/dist/sync/team-synchronizer.js.map +1 -0
- package/dist/sync/vector-clock.d.ts +23 -0
- package/dist/sync/vector-clock.d.ts.map +1 -0
- package/dist/sync/vector-clock.js +40 -0
- package/dist/sync/vector-clock.js.map +1 -0
- package/dist/types/index.d.ts +42 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +22 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,45 +2,173 @@
|
|
|
2
2
|
* SessionStart Hook
|
|
3
3
|
*
|
|
4
4
|
* Claude Code 세션 시작 시 실행됩니다.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Progressive Disclosure: compact 인덱스 모드로 출력합니다.
|
|
6
|
+
* 상세 내용은 CLI `a2a-memory search`로 확인 가능.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { basename } from 'node:path';
|
|
9
|
+
import { getSharedDb, closeSharedDb } from './shared.js';
|
|
9
10
|
import { ConfigManager } from '../config/manager.js';
|
|
11
|
+
import { A2AClient } from '../sync/client.js';
|
|
12
|
+
import { MemorySynchronizer } from '../sync/synchronizer.js';
|
|
13
|
+
import { deduplicateByEmbedding } from '../extraction/similarity.js';
|
|
14
|
+
import { HybridRanker } from '../search/ranker.js';
|
|
15
|
+
/**
|
|
16
|
+
* 프로젝트 경로에서 검색 쿼리 생성
|
|
17
|
+
*/
|
|
18
|
+
function buildSearchQuery(projectPath) {
|
|
19
|
+
const name = basename(projectPath);
|
|
20
|
+
// 하이픈/언더스코어로 분리하여 키워드 생성
|
|
21
|
+
const keywords = name.split(/[-_.]/).filter((k) => k.length > 1);
|
|
22
|
+
return keywords.join(' ');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 메모리 content의 첫 줄 요약 (최대 80자)
|
|
26
|
+
*/
|
|
27
|
+
function summarize(content, maxLen = 80) {
|
|
28
|
+
const firstLine = content.split('\n')[0].trim();
|
|
29
|
+
if (firstLine.length <= maxLen)
|
|
30
|
+
return firstLine;
|
|
31
|
+
return firstLine.slice(0, maxLen - 1) + '…';
|
|
32
|
+
}
|
|
10
33
|
export async function handleSessionStart(context) {
|
|
11
34
|
const config = new ConfigManager().load();
|
|
12
35
|
if (!config.autoInject.enabled) {
|
|
13
36
|
return '';
|
|
14
37
|
}
|
|
15
|
-
const db =
|
|
38
|
+
const db = getSharedDb(config.db.path);
|
|
16
39
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
40
|
+
// 백그라운드 pull (fire-and-forget)
|
|
41
|
+
if (config.autoSync.enabled && config.autoSync.pullOnSessionStart && config.server.apiKey) {
|
|
42
|
+
const client = new A2AClient({
|
|
43
|
+
baseUrl: config.server.url,
|
|
44
|
+
apiKey: config.server.apiKey,
|
|
45
|
+
timeout: config.autoSync.timeoutMs,
|
|
46
|
+
});
|
|
47
|
+
if (config.mode === 'team' && config.team) {
|
|
48
|
+
// 팀 모드: TeamSynchronizer로 pull
|
|
49
|
+
try {
|
|
50
|
+
const { TeamSynchronizer } = await import('../sync/team-synchronizer.js');
|
|
51
|
+
const teamSync = new TeamSynchronizer(db, client, config.team.teamPath, config.team.nodeId);
|
|
52
|
+
teamSync.pullFromTeam().catch(() => {
|
|
53
|
+
// 팀 pull 실패 무시
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// TeamSynchronizer 미설치 시 무시
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const synchronizer = new MemorySynchronizer(db, client);
|
|
62
|
+
synchronizer.pull().catch(() => {
|
|
63
|
+
// 백그라운드 pull 실패 무시 — 로컬 캐시로 서비스
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const limit = config.autoInject.maxMemories;
|
|
68
|
+
let results = [];
|
|
69
|
+
// 1차: FTS 검색 (프로젝트명 기반)
|
|
70
|
+
const query = buildSearchQuery(context.projectPath);
|
|
71
|
+
const ftsResults = query ? db.search({ query, limit }) : [];
|
|
72
|
+
// 2차: 임베딩 활성 시 하이브리드 검색
|
|
73
|
+
if (config.embedding?.enabled) {
|
|
74
|
+
try {
|
|
75
|
+
const { createEmbeddingProvider } = await import('../embedding/index.js');
|
|
76
|
+
const provider = createEmbeddingProvider(config.embedding, config.llm);
|
|
77
|
+
// 쿼리 임베딩 생성 (동기/비동기 대응)
|
|
78
|
+
const queryText = query || basename(context.projectPath);
|
|
79
|
+
const queryEmbedding = await Promise.resolve(provider.embed(queryText));
|
|
80
|
+
// 벡터 검색
|
|
81
|
+
const vectorResults = db.searchByVector(queryEmbedding, limit);
|
|
82
|
+
// 최근 메모리
|
|
83
|
+
const recentMemories = db.listMemories({ limit, projectPath: context.projectPath });
|
|
84
|
+
// HybridRanker로 통합
|
|
85
|
+
const ranker = new HybridRanker();
|
|
86
|
+
const ranked = ranker.rank(ftsResults, vectorResults, recentMemories);
|
|
87
|
+
results = ranked.slice(0, limit).map(r => ({
|
|
88
|
+
memory: r.memory,
|
|
89
|
+
score: r.score,
|
|
90
|
+
matchType: 'hybrid',
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// 임베딩 실패 시 FTS 결과만 사용
|
|
95
|
+
results = ftsResults;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// 임베딩 비활성 시: 기존 FTS 검색 + 벡터 폴백 유지 (하위호환)
|
|
100
|
+
results = ftsResults;
|
|
101
|
+
// FTS 결과 부족 시 벡터 검색 폴백
|
|
102
|
+
if (results.length < limit) {
|
|
103
|
+
try {
|
|
104
|
+
// 최근 메모리에서 임베딩 기반 보충
|
|
105
|
+
const allMemories = db.listMemories({ limit: limit * 2, projectPath: context.projectPath });
|
|
106
|
+
const withEmbedding = allMemories.filter((m) => m.embedding && m.embedding.length > 0);
|
|
107
|
+
if (withEmbedding.length > 0) {
|
|
108
|
+
// 이미 결과에 있는 ID 제외
|
|
109
|
+
const existingIds = new Set(results.map((r) => r.memory.id));
|
|
110
|
+
const additional = withEmbedding
|
|
111
|
+
.filter((m) => !existingIds.has(m.id))
|
|
112
|
+
.slice(0, limit - results.length)
|
|
113
|
+
.map((m) => ({
|
|
114
|
+
memory: m,
|
|
115
|
+
score: 0.5, // 벡터 폴백 기본 점수
|
|
116
|
+
matchType: 'vector',
|
|
117
|
+
}));
|
|
118
|
+
results.push(...additional);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// 벡터 검색 실패 무시
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
22
126
|
if (results.length === 0) {
|
|
23
127
|
return '';
|
|
24
128
|
}
|
|
129
|
+
// 코사인 중복 제거 (임베딩 있을 때)
|
|
130
|
+
const memories = results.map((r) => r.memory);
|
|
131
|
+
const deduped = deduplicateByEmbedding(memories);
|
|
132
|
+
const dedupedIds = new Set(deduped.map((m) => m.id));
|
|
133
|
+
const dedupedResults = results.filter((r) => dedupedIds.has(r.memory.id));
|
|
134
|
+
// 점수 내림차순 정렬
|
|
135
|
+
dedupedResults.sort((a, b) => b.score - a.score);
|
|
136
|
+
// Compact 인덱스 모드 출력
|
|
25
137
|
const lines = [
|
|
26
138
|
'<!-- A2A Memory Context -->',
|
|
27
|
-
`<!-- ${
|
|
139
|
+
`<!-- ${dedupedResults.length} relevant memories for ${context.projectPath} -->`,
|
|
140
|
+
'',
|
|
28
141
|
];
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (totalTokens + estimatedTokens > config.autoInject.maxTokens)
|
|
33
|
-
break;
|
|
34
|
-
lines.push('');
|
|
35
|
-
lines.push(`### [${result.memory.category}] (score: ${result.score.toFixed(2)})`);
|
|
36
|
-
lines.push(result.memory.content);
|
|
37
|
-
totalTokens += estimatedTokens;
|
|
142
|
+
for (let i = 0; i < Math.min(dedupedResults.length, limit); i++) {
|
|
143
|
+
const { memory, score } = dedupedResults[i];
|
|
144
|
+
lines.push(`${i + 1}. [${memory.category}] (${score.toFixed(2)}) ${summarize(memory.content)}`);
|
|
38
145
|
}
|
|
146
|
+
// 팀 메모리 검색 (team 모드)
|
|
147
|
+
if (config.mode === 'team' && config.team && config.server.apiKey) {
|
|
148
|
+
try {
|
|
149
|
+
const teamClient = new A2AClient({
|
|
150
|
+
baseUrl: config.server.url,
|
|
151
|
+
apiKey: config.server.apiKey,
|
|
152
|
+
timeout: config.autoSync.timeoutMs,
|
|
153
|
+
});
|
|
154
|
+
const teamMemories = await teamClient.searchTeamMemories(config.team.teamPath, query, { limit: Math.min(3, limit) });
|
|
155
|
+
for (let i = 0; i < teamMemories.length; i++) {
|
|
156
|
+
const tm = teamMemories[i];
|
|
157
|
+
lines.push(`${dedupedResults.length + i + 1}. [Team][${tm.category}] ${summarize(tm.content)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// 팀 검색 실패 무시
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
lines.push('💡 Use `a2a-memory search <query>` for full details.');
|
|
166
|
+
lines.push('');
|
|
39
167
|
lines.push('<!-- /A2A Memory Context -->');
|
|
40
168
|
return lines.join('\n');
|
|
41
169
|
}
|
|
42
170
|
finally {
|
|
43
|
-
|
|
171
|
+
// DB는 싱글톤으로 관리 — close하지 않음
|
|
44
172
|
}
|
|
45
173
|
}
|
|
46
174
|
/**
|
|
@@ -54,6 +182,7 @@ export async function main() {
|
|
|
54
182
|
}
|
|
55
183
|
const input = Buffer.concat(chunks).toString('utf-8').trim();
|
|
56
184
|
if (!input) {
|
|
185
|
+
closeSharedDb();
|
|
57
186
|
process.exit(0);
|
|
58
187
|
}
|
|
59
188
|
try {
|
|
@@ -63,10 +192,13 @@ export async function main() {
|
|
|
63
192
|
process.stdout.write(output);
|
|
64
193
|
}
|
|
65
194
|
}
|
|
66
|
-
catch {
|
|
67
|
-
|
|
195
|
+
catch (err) {
|
|
196
|
+
console.error('[a2a] SessionStart error:', err instanceof Error ? err.message : err);
|
|
68
197
|
process.exit(0);
|
|
69
198
|
}
|
|
199
|
+
finally {
|
|
200
|
+
closeSharedDb();
|
|
201
|
+
}
|
|
70
202
|
}
|
|
71
203
|
// 직접 실행 시에만 main() 호출
|
|
72
204
|
const isMainModule = process.argv[1]?.endsWith('session-start.js') ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook 공유 유틸리티
|
|
3
|
+
* 프로세스 내 DB 싱글톤으로 중복 초기화 방지
|
|
4
|
+
*/
|
|
5
|
+
import { MemoryDatabase } from '../db/database.js';
|
|
6
|
+
/**
|
|
7
|
+
* 프로세스 내 DB 싱글톤 조회/생성
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSharedDb(dbPath: string): MemoryDatabase;
|
|
10
|
+
/**
|
|
11
|
+
* DB 종료 (프로세스 종료 시 호출)
|
|
12
|
+
*/
|
|
13
|
+
export declare function closeSharedDb(): void;
|
|
14
|
+
/**
|
|
15
|
+
* 테스트용 리셋
|
|
16
|
+
*/
|
|
17
|
+
export declare function resetSharedDb(): void;
|
|
18
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAW1D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook 공유 유틸리티
|
|
3
|
+
* 프로세스 내 DB 싱글톤으로 중복 초기화 방지
|
|
4
|
+
*/
|
|
5
|
+
import { MemoryDatabase } from '../db/database.js';
|
|
6
|
+
let _sharedDb = null;
|
|
7
|
+
let _sharedDbPath = null;
|
|
8
|
+
/**
|
|
9
|
+
* 프로세스 내 DB 싱글톤 조회/생성
|
|
10
|
+
*/
|
|
11
|
+
export function getSharedDb(dbPath) {
|
|
12
|
+
if (_sharedDb && _sharedDbPath === dbPath) {
|
|
13
|
+
return _sharedDb;
|
|
14
|
+
}
|
|
15
|
+
if (_sharedDb) {
|
|
16
|
+
try {
|
|
17
|
+
_sharedDb.close();
|
|
18
|
+
}
|
|
19
|
+
catch { /* ignore */ }
|
|
20
|
+
}
|
|
21
|
+
_sharedDb = new MemoryDatabase(dbPath);
|
|
22
|
+
_sharedDbPath = dbPath;
|
|
23
|
+
_sharedDb.initialize();
|
|
24
|
+
return _sharedDb;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* DB 종료 (프로세스 종료 시 호출)
|
|
28
|
+
*/
|
|
29
|
+
export function closeSharedDb() {
|
|
30
|
+
if (_sharedDb) {
|
|
31
|
+
try {
|
|
32
|
+
_sharedDb.close();
|
|
33
|
+
}
|
|
34
|
+
catch { /* ignore */ }
|
|
35
|
+
_sharedDb = null;
|
|
36
|
+
_sharedDbPath = null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 테스트용 리셋
|
|
41
|
+
*/
|
|
42
|
+
export function resetSharedDb() {
|
|
43
|
+
_sharedDb = null;
|
|
44
|
+
_sharedDbPath = null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,IAAI,SAAS,GAA0B,IAAI,CAAC;AAC5C,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,SAAS,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,SAAS,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,aAAa,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,UAAU,EAAE,CAAC;IACvB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACjD,SAAS,GAAG,IAAI,CAAC;QACjB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,SAAS,GAAG,IAAI,CAAC;IACjB,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A2A Memory Plugin - Public API
|
|
3
3
|
*/
|
|
4
|
-
export type { Memory, MemoryCreateInput, MemorySearchOptions, MemorySearchResult, MemoryCategory, MemoryTier, SessionMessage, SessionContentBlock, SessionInfo, ExtractionResult, A2AConfig, HookContext, SessionStartContext, PostToolUseContext, SessionEndContext, SignificanceSignal, SignificanceResult, } from './types/index.js';
|
|
4
|
+
export type { Memory, MemoryCreateInput, MemorySearchOptions, MemorySearchResult, MemoryCategory, MemoryTier, SessionMessage, SessionContentBlock, SessionInfo, ExtractionResult, A2AConfig, TeamConfig, LLMConfig, EmbeddingConfig, LifecycleConfig, MemoryQuality, VectorClockState, HookContext, SessionStartContext, PostToolUseContext, SessionEndContext, SignificanceSignal, SignificanceResult, } from './types/index.js';
|
|
5
5
|
export { DEFAULT_CONFIG, SENSITIVE_PATTERNS } from './types/index.js';
|
|
6
6
|
export { MemoryDatabase } from './db/database.js';
|
|
7
|
-
export { ConfigManager } from './config/manager.js';
|
|
7
|
+
export { ConfigManager, generateNodeId, getConfigManager, resetConfigManager } from './config/manager.js';
|
|
8
8
|
export { parseSessionFile, findSessionFiles, getSessionMessages } from './session/parser.js';
|
|
9
|
-
export { extractMemories } from './extraction/extractor.js';
|
|
9
|
+
export { extractMemories, extractMemoriesWithLLM, summarizeSession } from './extraction/extractor.js';
|
|
10
10
|
export { scoreSignificance } from './extraction/scorer.js';
|
|
11
11
|
export { filterSensitiveInfo, isSensitivePath } from './extraction/filter.js';
|
|
12
12
|
export { handleSessionStart } from './hooks/session-start.js';
|
|
13
13
|
export { handlePostToolUse } from './hooks/post-tool-use.js';
|
|
14
14
|
export { handleSessionEnd } from './hooks/session-end.js';
|
|
15
|
-
export {
|
|
16
|
-
export
|
|
15
|
+
export { getSharedDb, closeSharedDb, resetSharedDb } from './hooks/shared.js';
|
|
16
|
+
export { A2AClient, MemorySynchronizer, SyncQueue, LocalVectorClock, TeamSynchronizer, mapCategory, mapTier, } from './sync/index.js';
|
|
17
|
+
export type { A2AClientConfig, RemoteMemory, SyncResult, QueueFlushResult, FlushOptions, TeamSyncResult, TeamSyncStatus, } from './sync/index.js';
|
|
18
|
+
export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient } from './llm/index.js';
|
|
19
|
+
export type { LLMClient } from './llm/index.js';
|
|
20
|
+
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider } from './embedding/index.js';
|
|
21
|
+
export type { EmbeddingProvider } from './embedding/index.js';
|
|
22
|
+
export { HybridRanker } from './search/index.js';
|
|
23
|
+
export type { RankedResult } from './search/index.js';
|
|
24
|
+
export { scoreQuality, cleanupMemories } from './lifecycle/index.js';
|
|
25
|
+
export type { CleanupResult } from './lifecycle/index.js';
|
|
17
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EACL,SAAS,EAAE,kBAAkB,EAAE,SAAS,EACxC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,OAAO,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EAAE,YAAY,EAAE,UAAU,EACzC,gBAAgB,EAAE,YAAY,EAC9B,cAAc,EAAE,cAAc,GAC/B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrG,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChH,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,15 +4,24 @@
|
|
|
4
4
|
export { DEFAULT_CONFIG, SENSITIVE_PATTERNS } from './types/index.js';
|
|
5
5
|
// Core modules
|
|
6
6
|
export { MemoryDatabase } from './db/database.js';
|
|
7
|
-
export { ConfigManager } from './config/manager.js';
|
|
7
|
+
export { ConfigManager, generateNodeId, getConfigManager, resetConfigManager } from './config/manager.js';
|
|
8
8
|
export { parseSessionFile, findSessionFiles, getSessionMessages } from './session/parser.js';
|
|
9
|
-
export { extractMemories } from './extraction/extractor.js';
|
|
9
|
+
export { extractMemories, extractMemoriesWithLLM, summarizeSession } from './extraction/extractor.js';
|
|
10
10
|
export { scoreSignificance } from './extraction/scorer.js';
|
|
11
11
|
export { filterSensitiveInfo, isSensitivePath } from './extraction/filter.js';
|
|
12
12
|
// Hooks
|
|
13
13
|
export { handleSessionStart } from './hooks/session-start.js';
|
|
14
14
|
export { handlePostToolUse } from './hooks/post-tool-use.js';
|
|
15
15
|
export { handleSessionEnd } from './hooks/session-end.js';
|
|
16
|
+
export { getSharedDb, closeSharedDb, resetSharedDb } from './hooks/shared.js';
|
|
16
17
|
// Sync
|
|
17
|
-
export { A2AClient, MemorySynchronizer } from './sync/index.js';
|
|
18
|
+
export { A2AClient, MemorySynchronizer, SyncQueue, LocalVectorClock, TeamSynchronizer, mapCategory, mapTier, } from './sync/index.js';
|
|
19
|
+
// LLM
|
|
20
|
+
export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient } from './llm/index.js';
|
|
21
|
+
// Embedding
|
|
22
|
+
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider } from './embedding/index.js';
|
|
23
|
+
// Search
|
|
24
|
+
export { HybridRanker } from './search/index.js';
|
|
25
|
+
// Lifecycle
|
|
26
|
+
export { scoreQuality, cleanupMemories } from './lifecycle/index.js';
|
|
18
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9E,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO;AACP,OAAO,EACL,SAAS,EAAE,kBAAkB,EAAE,SAAS,EACxC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,OAAO,GACrB,MAAM,iBAAiB,CAAC;AAOzB,MAAM;AACN,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGrG,YAAY;AACZ,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGhH,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Cleanup
|
|
3
|
+
*
|
|
4
|
+
* TTL 및 품질 기반 메모리 정리를 수행합니다.
|
|
5
|
+
*/
|
|
6
|
+
import type { LifecycleConfig } from '../types/index.js';
|
|
7
|
+
import type { MemoryDatabase } from '../db/database.js';
|
|
8
|
+
export interface CleanupResult {
|
|
9
|
+
expired: number;
|
|
10
|
+
lowQuality: number;
|
|
11
|
+
total: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* TTL 및 품질 기반 메모리 정리를 수행합니다.
|
|
15
|
+
*
|
|
16
|
+
* 정리 순서:
|
|
17
|
+
* 1. TTL 초과 메모리 삭제 (ttlDays > 0인 경우)
|
|
18
|
+
* 2. 메모리 개수 초과 시 품질 미달 메모리 삭제
|
|
19
|
+
*
|
|
20
|
+
* @param db - 메모리 데이터베이스
|
|
21
|
+
* @param config - 라이프사이클 설정
|
|
22
|
+
* @returns 정리 결과
|
|
23
|
+
*/
|
|
24
|
+
export declare function cleanupMemories(db: MemoryDatabase, config: LifecycleConfig): CleanupResult;
|
|
25
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/lifecycle/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,eAAe,GACtB,aAAa,CAsCf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Cleanup
|
|
3
|
+
*
|
|
4
|
+
* TTL 및 품질 기반 메모리 정리를 수행합니다.
|
|
5
|
+
*/
|
|
6
|
+
import { scoreQuality } from './quality-scorer.js';
|
|
7
|
+
/**
|
|
8
|
+
* TTL 및 품질 기반 메모리 정리를 수행합니다.
|
|
9
|
+
*
|
|
10
|
+
* 정리 순서:
|
|
11
|
+
* 1. TTL 초과 메모리 삭제 (ttlDays > 0인 경우)
|
|
12
|
+
* 2. 메모리 개수 초과 시 품질 미달 메모리 삭제
|
|
13
|
+
*
|
|
14
|
+
* @param db - 메모리 데이터베이스
|
|
15
|
+
* @param config - 라이프사이클 설정
|
|
16
|
+
* @returns 정리 결과
|
|
17
|
+
*/
|
|
18
|
+
export function cleanupMemories(db, config) {
|
|
19
|
+
let expired = 0;
|
|
20
|
+
let lowQuality = 0;
|
|
21
|
+
// 1. TTL 초과 메모리 삭제
|
|
22
|
+
if (config.ttlDays > 0) {
|
|
23
|
+
const oldMemories = db.getMemoriesOlderThan(config.ttlDays);
|
|
24
|
+
if (oldMemories.length > 0) {
|
|
25
|
+
const ids = oldMemories.map((m) => m.id);
|
|
26
|
+
expired = db.deleteMemories(ids);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// 2. 메모리 개수 초과 시 품질 미달 메모리 삭제
|
|
30
|
+
const currentCount = db.getMemoryCount();
|
|
31
|
+
if (currentCount > config.maxMemories) {
|
|
32
|
+
// 모든 메모리의 품질 점수 계산
|
|
33
|
+
const allMemories = db.listMemories({ limit: currentCount });
|
|
34
|
+
const scoredMemories = allMemories.map((memory) => ({
|
|
35
|
+
memory,
|
|
36
|
+
quality: scoreQuality(memory, config),
|
|
37
|
+
}));
|
|
38
|
+
// 품질 미달 메모리 필터링
|
|
39
|
+
const toDelete = scoredMemories
|
|
40
|
+
.filter((item) => item.quality.overall < config.qualityThreshold)
|
|
41
|
+
.map((item) => item.memory.id);
|
|
42
|
+
if (toDelete.length > 0) {
|
|
43
|
+
lowQuality = db.deleteMemories(toDelete);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
expired,
|
|
48
|
+
lowQuality,
|
|
49
|
+
total: expired + lowQuality,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/lifecycle/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAkB,EAClB,MAAuB;IAEvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,mBAAmB;IACnB,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;IACzC,IAAI,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,mBAAmB;QACnB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM;YACN,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;SACtC,CAAC,CAAC,CAAC;QAEJ,gBAAgB;QAChB,MAAM,QAAQ,GAAG,cAAc;aAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC;aAChE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,UAAU;QACV,KAAK,EAAE,OAAO,GAAG,UAAU;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle Module
|
|
3
|
+
*
|
|
4
|
+
* 메모리 라이프사이클 관리:
|
|
5
|
+
* - 품질 점수 계산
|
|
6
|
+
* - TTL 및 품질 기반 정리
|
|
7
|
+
*/
|
|
8
|
+
export { scoreQuality } from './quality-scorer.js';
|
|
9
|
+
export type { MemoryQuality } from '../types/index.js';
|
|
10
|
+
export { cleanupMemories } from './cleanup.js';
|
|
11
|
+
export type { CleanupResult } from './cleanup.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Quality Scorer
|
|
3
|
+
*
|
|
4
|
+
* 메모리 품질 점수를 계산합니다.
|
|
5
|
+
* - relevance: 검색 빈도 기반 (access_count)
|
|
6
|
+
* - freshness: 시간 기반 감쇠 (exponential decay)
|
|
7
|
+
* - usage: 접근 횟수 정규화
|
|
8
|
+
* - overall: 가중 평균 (0.4 * relevance + 0.3 * freshness + 0.3 * usage)
|
|
9
|
+
*/
|
|
10
|
+
import type { Memory, MemoryQuality, LifecycleConfig } from '../types/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* 메모리의 품질 점수를 계산합니다.
|
|
13
|
+
*
|
|
14
|
+
* @param memory - 평가할 메모리
|
|
15
|
+
* @param _config - 라이프사이클 설정 (현재는 미사용, 향후 확장용)
|
|
16
|
+
* @returns 품질 점수 객체 (0~1 범위)
|
|
17
|
+
*/
|
|
18
|
+
export declare function scoreQuality(memory: Memory, _config: LifecycleConfig): MemoryQuality;
|
|
19
|
+
//# sourceMappingURL=quality-scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-scorer.d.ts","sourceRoot":"","sources":["../../src/lifecycle/quality-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,CA0BpF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Quality Scorer
|
|
3
|
+
*
|
|
4
|
+
* 메모리 품질 점수를 계산합니다.
|
|
5
|
+
* - relevance: 검색 빈도 기반 (access_count)
|
|
6
|
+
* - freshness: 시간 기반 감쇠 (exponential decay)
|
|
7
|
+
* - usage: 접근 횟수 정규화
|
|
8
|
+
* - overall: 가중 평균 (0.4 * relevance + 0.3 * freshness + 0.3 * usage)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* 메모리의 품질 점수를 계산합니다.
|
|
12
|
+
*
|
|
13
|
+
* @param memory - 평가할 메모리
|
|
14
|
+
* @param _config - 라이프사이클 설정 (현재는 미사용, 향후 확장용)
|
|
15
|
+
* @returns 품질 점수 객체 (0~1 범위)
|
|
16
|
+
*/
|
|
17
|
+
export function scoreQuality(memory, _config) {
|
|
18
|
+
// 1. Relevance: 검색 빈도 기반 (access_count / 10으로 정규화, 최대 1.0)
|
|
19
|
+
const relevance = Math.min(1.0, memory.accessCount / 10);
|
|
20
|
+
// 2. Freshness: 시간 기반 감쇠 (exponential decay)
|
|
21
|
+
// freshness = exp(-lambda * daysSinceUpdate)
|
|
22
|
+
// lambda = 0.01 (100일 후 약 0.37)
|
|
23
|
+
const lambda = 0.01;
|
|
24
|
+
const updatedAt = new Date(memory.updatedAt);
|
|
25
|
+
const now = new Date();
|
|
26
|
+
const daysSinceUpdate = (now.getTime() - updatedAt.getTime()) / (1000 * 60 * 60 * 24);
|
|
27
|
+
const freshness = Math.exp(-lambda * daysSinceUpdate);
|
|
28
|
+
// 3. Usage: access_count를 정규화 (relevance와 동일 로직)
|
|
29
|
+
const usage = Math.min(1.0, memory.accessCount / 10);
|
|
30
|
+
// 4. Overall: 가중 평균
|
|
31
|
+
// 40% relevance + 30% freshness + 30% usage
|
|
32
|
+
const overall = 0.4 * relevance + 0.3 * freshness + 0.3 * usage;
|
|
33
|
+
return {
|
|
34
|
+
relevance,
|
|
35
|
+
freshness,
|
|
36
|
+
usage,
|
|
37
|
+
overall,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=quality-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-scorer.js","sourceRoot":"","sources":["../../src/lifecycle/quality-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAwB;IACnE,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,6CAA6C;IAC7C,gCAAgC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;IAEtD,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IAErD,oBAAoB;IACpB,4CAA4C;IAC5C,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC;IAEhE,OAAO;QACL,SAAS;QACT,SAAS;QACT,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client — AI 기반 분류/요약
|
|
3
|
+
* npm 의존성 없음, native fetch 사용
|
|
4
|
+
*/
|
|
5
|
+
import type { LLMConfig } from '../types/index.js';
|
|
6
|
+
export interface LLMClient {
|
|
7
|
+
complete(prompt: string, systemPrompt?: string): Promise<string>;
|
|
8
|
+
summarize(contents: string[]): Promise<string>;
|
|
9
|
+
classify(content: string, categories: string[]): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
export declare class OpenAILLMClient implements LLMClient {
|
|
12
|
+
private apiKey;
|
|
13
|
+
private model;
|
|
14
|
+
private maxTokens;
|
|
15
|
+
private timeout;
|
|
16
|
+
constructor(config: LLMConfig);
|
|
17
|
+
complete(prompt: string, systemPrompt?: string): Promise<string>;
|
|
18
|
+
summarize(contents: string[]): Promise<string>;
|
|
19
|
+
classify(content: string, categories: string[]): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export declare class AnthropicLLMClient implements LLMClient {
|
|
22
|
+
private apiKey;
|
|
23
|
+
private model;
|
|
24
|
+
private maxTokens;
|
|
25
|
+
private timeout;
|
|
26
|
+
constructor(config: LLMConfig);
|
|
27
|
+
complete(prompt: string, systemPrompt?: string): Promise<string>;
|
|
28
|
+
summarize(contents: string[]): Promise<string>;
|
|
29
|
+
classify(content: string, categories: string[]): Promise<string>;
|
|
30
|
+
}
|
|
31
|
+
export declare class NoOpLLMClient implements LLMClient {
|
|
32
|
+
complete(): Promise<string>;
|
|
33
|
+
summarize(): Promise<string>;
|
|
34
|
+
classify(_content: string, categories: string[]): Promise<string>;
|
|
35
|
+
}
|
|
36
|
+
export declare function createLLMClient(config?: LLMConfig): LLMClient;
|
|
37
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6ChE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ9C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAUvE;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4ChE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ9C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAUvE;AAED,qBAAa,aAAc,YAAW,SAAS;IACvC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAG3B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAG5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAGxE;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAa7D"}
|