a2a-memory 0.9.1 → 0.10.1
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/README.md +134 -52
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +1 -0
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/claude-sync.d.ts.map +1 -1
- package/dist/cli/commands/claude-sync.js +1 -0
- package/dist/cli/commands/claude-sync.js.map +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +1 -0
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +2 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/edit.d.ts.map +1 -1
- package/dist/cli/commands/edit.js +3 -0
- package/dist/cli/commands/edit.js.map +1 -1
- package/dist/cli/commands/embed.d.ts.map +1 -1
- package/dist/cli/commands/embed.js +1 -0
- package/dist/cli/commands/embed.js.map +1 -1
- package/dist/cli/commands/proficiency.d.ts.map +1 -1
- package/dist/cli/commands/proficiency.js +4 -0
- package/dist/cli/commands/proficiency.js.map +1 -1
- package/dist/cli/commands/rm.d.ts.map +1 -1
- package/dist/cli/commands/rm.js +4 -0
- package/dist/cli/commands/rm.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +52 -8
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/setup.js +24 -0
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +16 -1
- package/dist/cli/commands/skill.js.map +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +3 -0
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/config/manager.d.ts +67 -13
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +20 -5
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +5 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +47 -24
- package/dist/db/database.js.map +1 -1
- package/dist/embedding/e5-provider.d.ts +41 -0
- package/dist/embedding/e5-provider.d.ts.map +1 -0
- package/dist/embedding/e5-provider.js +147 -0
- package/dist/embedding/e5-provider.js.map +1 -0
- package/dist/embedding/index.d.ts +1 -0
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +5 -0
- package/dist/embedding/index.js.map +1 -1
- package/dist/extraction/dedup-manager.d.ts +40 -0
- package/dist/extraction/dedup-manager.d.ts.map +1 -0
- package/dist/extraction/dedup-manager.js +148 -0
- package/dist/extraction/dedup-manager.js.map +1 -0
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +23 -6
- package/dist/extraction/extractor.js.map +1 -1
- package/dist/extraction/filter.d.ts.map +1 -1
- package/dist/extraction/filter.js +3 -0
- package/dist/extraction/filter.js.map +1 -1
- package/dist/extraction/scorer.js +23 -12
- package/dist/extraction/scorer.js.map +1 -1
- package/dist/hooks/client-factory.d.ts +14 -0
- package/dist/hooks/client-factory.d.ts.map +1 -0
- package/dist/hooks/client-factory.js +22 -0
- package/dist/hooks/client-factory.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +101 -22
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/pre-compact.d.ts +15 -0
- package/dist/hooks/pre-compact.d.ts.map +1 -0
- package/dist/hooks/pre-compact.js +209 -0
- package/dist/hooks/pre-compact.js.map +1 -0
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +56 -46
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +205 -138
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/shared.d.ts +1 -0
- package/dist/hooks/shared.d.ts.map +1 -1
- package/dist/hooks/shared.js +35 -0
- package/dist/hooks/shared.js.map +1 -1
- package/dist/hooks/user-prompt-submit.d.ts +15 -0
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -0
- package/dist/hooks/user-prompt-submit.js +240 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/quality-scorer.d.ts +2 -2
- package/dist/lifecycle/quality-scorer.d.ts.map +1 -1
- package/dist/lifecycle/quality-scorer.js +13 -7
- package/dist/lifecycle/quality-scorer.js.map +1 -1
- package/dist/lifecycle/tiering.d.ts.map +1 -1
- package/dist/lifecycle/tiering.js +11 -1
- package/dist/lifecycle/tiering.js.map +1 -1
- package/dist/proficiency/detection.d.ts +2 -4
- package/dist/proficiency/detection.d.ts.map +1 -1
- package/dist/proficiency/detection.js +11 -15
- package/dist/proficiency/detection.js.map +1 -1
- package/dist/proficiency/tracker.d.ts +2 -2
- package/dist/proficiency/tracker.d.ts.map +1 -1
- package/dist/proficiency/tracker.js +10 -7
- package/dist/proficiency/tracker.js.map +1 -1
- package/dist/search/adaptive-router.d.ts +28 -0
- package/dist/search/adaptive-router.d.ts.map +1 -0
- package/dist/search/adaptive-router.js +93 -0
- package/dist/search/adaptive-router.js.map +1 -0
- package/dist/search/ranker.d.ts +4 -0
- package/dist/search/ranker.d.ts.map +1 -1
- package/dist/search/ranker.js +4 -0
- package/dist/search/ranker.js.map +1 -1
- package/dist/search/reranker.d.ts +48 -0
- package/dist/search/reranker.d.ts.map +1 -0
- package/dist/search/reranker.js +155 -0
- package/dist/search/reranker.js.map +1 -0
- package/dist/skill/evaluator.d.ts +7 -9
- package/dist/skill/evaluator.d.ts.map +1 -1
- package/dist/skill/evaluator.js +122 -33
- package/dist/skill/evaluator.js.map +1 -1
- package/dist/skill/types.d.ts +5 -0
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/sync/client.d.ts +26 -1
- package/dist/sync/client.d.ts.map +1 -1
- package/dist/sync/client.js +81 -28
- package/dist/sync/client.js.map +1 -1
- package/dist/sync/queue.d.ts +1 -1
- package/dist/sync/queue.d.ts.map +1 -1
- package/dist/sync/queue.js +20 -28
- package/dist/sync/queue.js.map +1 -1
- package/dist/sync/synchronizer.js +1 -1
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/team-synchronizer.js.map +1 -1
- package/dist/types/index.d.ts +19 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +11 -3
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UserPromptSubmit Hook
|
|
3
|
+
*
|
|
4
|
+
* 사용자가 프롬프트를 제출할 때마다 실행됩니다.
|
|
5
|
+
* 프롬프트 기반 실시간 메모리 검색 + 주입으로
|
|
6
|
+
* 세션 중 축적된 메모리를 즉시 활용합니다.
|
|
7
|
+
*
|
|
8
|
+
* 성능 타겟: p50 < 30ms, p99 < 100ms
|
|
9
|
+
*/
|
|
10
|
+
import { getSharedDb, closeSharedDb, normalizeHookInput, extractSearchKeywords } from './shared.js';
|
|
11
|
+
import { ConfigManager } from '../config/manager.js';
|
|
12
|
+
import { createLogger } from '../utils/logger.js';
|
|
13
|
+
class QueryCache {
|
|
14
|
+
cache = new Map();
|
|
15
|
+
maxSize;
|
|
16
|
+
ttlMs;
|
|
17
|
+
constructor(maxSize, ttlSeconds) {
|
|
18
|
+
this.maxSize = maxSize;
|
|
19
|
+
this.ttlMs = ttlSeconds * 1000;
|
|
20
|
+
}
|
|
21
|
+
get(key) {
|
|
22
|
+
const entry = this.cache.get(key);
|
|
23
|
+
if (!entry)
|
|
24
|
+
return null;
|
|
25
|
+
if (Date.now() - entry.timestamp > this.ttlMs) {
|
|
26
|
+
this.cache.delete(key);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// LRU: 재삽입으로 순서 갱신
|
|
30
|
+
this.cache.delete(key);
|
|
31
|
+
this.cache.set(key, entry);
|
|
32
|
+
return entry.result;
|
|
33
|
+
}
|
|
34
|
+
set(key, result) {
|
|
35
|
+
// 용량 초과 시 가장 오래된 항목 제거
|
|
36
|
+
if (this.cache.size >= this.maxSize) {
|
|
37
|
+
const oldest = this.cache.keys().next().value;
|
|
38
|
+
if (oldest !== undefined) {
|
|
39
|
+
this.cache.delete(oldest);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.cache.set(key, { result, timestamp: Date.now() });
|
|
43
|
+
}
|
|
44
|
+
clear() {
|
|
45
|
+
this.cache.clear();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// 프로세스 내 싱글톤 캐시 (Hook 프로세스 수명 = 1회 실행이지만, 테스트에서 재사용)
|
|
49
|
+
let _queryCache = null;
|
|
50
|
+
function getQueryCache(config) {
|
|
51
|
+
if (!_queryCache) {
|
|
52
|
+
_queryCache = new QueryCache(config.cacheSize, config.cacheTTLSeconds);
|
|
53
|
+
}
|
|
54
|
+
return _queryCache;
|
|
55
|
+
}
|
|
56
|
+
/** 테스트용 캐시 리셋 */
|
|
57
|
+
export function resetQueryCache() {
|
|
58
|
+
_queryCache = null;
|
|
59
|
+
}
|
|
60
|
+
// ============================================================
|
|
61
|
+
// Memory Formatting
|
|
62
|
+
// ============================================================
|
|
63
|
+
/** 카테고리 축약 레이블 */
|
|
64
|
+
const CATEGORY_SHORT = {
|
|
65
|
+
error_solution: 'error_solution',
|
|
66
|
+
code_pattern: 'code_pattern',
|
|
67
|
+
decision: 'decision',
|
|
68
|
+
context: 'context',
|
|
69
|
+
convention: 'convention',
|
|
70
|
+
skill: 'skill',
|
|
71
|
+
learning: 'learning',
|
|
72
|
+
project_knowledge: 'project_knowledge',
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* 메모리를 compact 형식으로 포맷
|
|
76
|
+
* 토큰 예산 내에서 최대한 많은 메모리 포함
|
|
77
|
+
*/
|
|
78
|
+
function formatRealtimeOutput(memories, maxTokens) {
|
|
79
|
+
if (memories.length === 0)
|
|
80
|
+
return '';
|
|
81
|
+
const lines = ['<!-- A2A Realtime Context -->'];
|
|
82
|
+
let estimatedTokens = 10; // 헤더/푸터 오버헤드
|
|
83
|
+
for (const { memory } of memories) {
|
|
84
|
+
const cat = CATEGORY_SHORT[memory.category] || memory.category;
|
|
85
|
+
// 한 줄 요약 (최대 200자)
|
|
86
|
+
const content = memory.content.split('\n').filter(l => l.trim()).join(' ').slice(0, 200);
|
|
87
|
+
const line = `- [${cat}] ${content}`;
|
|
88
|
+
// 토큰 추정: ~4 chars per token
|
|
89
|
+
const lineTokens = Math.ceil(line.length / 4);
|
|
90
|
+
if (estimatedTokens + lineTokens > maxTokens)
|
|
91
|
+
break;
|
|
92
|
+
lines.push(line);
|
|
93
|
+
estimatedTokens += lineTokens;
|
|
94
|
+
}
|
|
95
|
+
if (lines.length <= 1)
|
|
96
|
+
return ''; // 헤더만 있으면 빈 문자열
|
|
97
|
+
lines.push('');
|
|
98
|
+
lines.push('\u{1F4A1} `a2a-memory search <query>` for details.');
|
|
99
|
+
lines.push('<!-- /A2A Realtime Context -->');
|
|
100
|
+
return lines.join('\n');
|
|
101
|
+
}
|
|
102
|
+
// ============================================================
|
|
103
|
+
// Core Logic
|
|
104
|
+
// ============================================================
|
|
105
|
+
export async function handleUserPromptSubmit(context) {
|
|
106
|
+
const config = new ConfigManager().load();
|
|
107
|
+
const logger = createLogger('UserPromptSubmit', config.logging);
|
|
108
|
+
const startTime = performance.now();
|
|
109
|
+
const realtimeConfig = config.realtimeInject ?? {
|
|
110
|
+
enabled: true,
|
|
111
|
+
maxMemories: 3,
|
|
112
|
+
maxTokens: 1000,
|
|
113
|
+
cacheSize: 20,
|
|
114
|
+
cacheTTLSeconds: 60,
|
|
115
|
+
timeoutMs: 100,
|
|
116
|
+
};
|
|
117
|
+
if (!realtimeConfig.enabled) {
|
|
118
|
+
logger.info('Realtime inject disabled');
|
|
119
|
+
logger.flush();
|
|
120
|
+
return '';
|
|
121
|
+
}
|
|
122
|
+
// 짧은 프롬프트는 스킵 (인사, 단답 등)
|
|
123
|
+
const prompt = context.userPrompt?.trim() || '';
|
|
124
|
+
if (prompt.length < 5) {
|
|
125
|
+
logger.debug('Prompt too short, skipping');
|
|
126
|
+
logger.flush();
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
// 키워드 추출
|
|
130
|
+
const rawKeywords = extractSearchKeywords(prompt);
|
|
131
|
+
if (!rawKeywords || rawKeywords.trim().length < 2) {
|
|
132
|
+
logger.debug('No meaningful keywords extracted');
|
|
133
|
+
logger.flush();
|
|
134
|
+
return '';
|
|
135
|
+
}
|
|
136
|
+
// FTS5 OR 쿼리로 변환 (implicit AND 대신)
|
|
137
|
+
// "SQLite bind error" → "SQLite OR bind OR error"
|
|
138
|
+
const keywords = rawKeywords.split(/\s+/).filter(k => k.length > 1).join(' OR ');
|
|
139
|
+
// 캐시 확인
|
|
140
|
+
const cache = getQueryCache(realtimeConfig);
|
|
141
|
+
const cached = cache.get(keywords);
|
|
142
|
+
if (cached !== null) {
|
|
143
|
+
logger.info('Cache hit', { keywords, durationMs: Math.round(performance.now() - startTime) });
|
|
144
|
+
logger.flush();
|
|
145
|
+
return cached;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const db = getSharedDb(config.db.path);
|
|
149
|
+
const limit = realtimeConfig.maxMemories;
|
|
150
|
+
// FTS 전용 빠른 경로 (임베딩 계산 없이)
|
|
151
|
+
let results = [];
|
|
152
|
+
try {
|
|
153
|
+
results = db.searchByFTS(keywords, limit * 2); // 오버페치 → 필터링
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// FTS 쿼리 실패 시 (특수문자 등)
|
|
157
|
+
results = [];
|
|
158
|
+
}
|
|
159
|
+
// 프로젝트 경로 필터링 (같은 프로젝트 우선)
|
|
160
|
+
const projectResults = results.filter(r => r.memory.projectPath === context.projectPath);
|
|
161
|
+
const otherResults = results.filter(r => r.memory.projectPath !== context.projectPath);
|
|
162
|
+
// 같은 프로젝트 우선, 부족하면 타 프로젝트 보충
|
|
163
|
+
const combined = [...projectResults, ...otherResults].slice(0, limit);
|
|
164
|
+
if (combined.length === 0) {
|
|
165
|
+
const output = '';
|
|
166
|
+
cache.set(keywords, output);
|
|
167
|
+
logger.info('No results', { keywords, durationMs: Math.round(performance.now() - startTime) });
|
|
168
|
+
logger.flush();
|
|
169
|
+
return output;
|
|
170
|
+
}
|
|
171
|
+
// 접근 추적
|
|
172
|
+
for (const { memory } of combined) {
|
|
173
|
+
try {
|
|
174
|
+
db.recordAccess(memory.id);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// 접근 추적 실패 무시
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const output = formatRealtimeOutput(combined, realtimeConfig.maxTokens);
|
|
181
|
+
cache.set(keywords, output);
|
|
182
|
+
logger.info('Hook completed', {
|
|
183
|
+
keywords,
|
|
184
|
+
count: combined.length,
|
|
185
|
+
durationMs: Math.round(performance.now() - startTime),
|
|
186
|
+
});
|
|
187
|
+
logger.flush();
|
|
188
|
+
return output;
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
logger.error('Search failed', err instanceof Error ? err : new Error(String(err)), { keywords });
|
|
192
|
+
logger.flush();
|
|
193
|
+
return '';
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// ============================================================
|
|
197
|
+
// CLI Entrypoint
|
|
198
|
+
// ============================================================
|
|
199
|
+
/** 전체 Hook 안전 타임아웃 (ms) */
|
|
200
|
+
const HOOK_TIMEOUT_MS = 5_000; // UserPromptSubmit은 더 짧은 타임아웃
|
|
201
|
+
export async function main() {
|
|
202
|
+
const chunks = [];
|
|
203
|
+
for await (const chunk of process.stdin) {
|
|
204
|
+
chunks.push(chunk);
|
|
205
|
+
}
|
|
206
|
+
const input = Buffer.concat(chunks).toString('utf-8').trim();
|
|
207
|
+
if (!input) {
|
|
208
|
+
closeSharedDb();
|
|
209
|
+
process.exit(0);
|
|
210
|
+
}
|
|
211
|
+
// 안전 타임아웃
|
|
212
|
+
const safetyTimer = setTimeout(() => {
|
|
213
|
+
console.error(`[a2a] UserPromptSubmit safety timeout (${HOOK_TIMEOUT_MS}ms)`);
|
|
214
|
+
closeSharedDb();
|
|
215
|
+
process.exit(0);
|
|
216
|
+
}, HOOK_TIMEOUT_MS);
|
|
217
|
+
safetyTimer.unref();
|
|
218
|
+
try {
|
|
219
|
+
const raw = JSON.parse(input);
|
|
220
|
+
const context = normalizeHookInput(raw);
|
|
221
|
+
const output = await handleUserPromptSubmit(context);
|
|
222
|
+
if (output) {
|
|
223
|
+
process.stdout.write(output);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error('[a2a] UserPromptSubmit error:', err instanceof Error ? err.message : err);
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
closeSharedDb();
|
|
231
|
+
process.exit(0);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// 직접 실행 시에만 main() 호출
|
|
235
|
+
const isMainModule = process.argv[1]?.endsWith('user-prompt-submit.js') ||
|
|
236
|
+
process.argv[1]?.endsWith('user-prompt-submit.ts');
|
|
237
|
+
if (isMainModule) {
|
|
238
|
+
main();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=user-prompt-submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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, TeamConfig, LLMConfig, EmbeddingConfig, LifecycleConfig, MemoryQuality, VectorClockState, HookContext, SessionStartContext, PostToolUseContext, SessionEndContext, SignificanceSignal, SignificanceResult, QuantizationLevel, } 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, UserPromptSubmitContext, PreCompactContext, RealtimeInjectConfig, SignificanceSignal, SignificanceResult, QuantizationLevel, } from './types/index.js';
|
|
5
5
|
export { DEFAULT_CONFIG, SENSITIVE_PATTERNS } from './types/index.js';
|
|
6
6
|
export { MemoryDatabase } from './db/database.js';
|
|
7
7
|
export { ConfigManager, generateNodeId, getConfigManager, resetConfigManager } from './config/manager.js';
|
|
@@ -12,15 +12,23 @@ 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 {
|
|
15
|
+
export { handleUserPromptSubmit, resetQueryCache } from './hooks/user-prompt-submit.js';
|
|
16
|
+
export { handlePreCompact } from './hooks/pre-compact.js';
|
|
17
|
+
export { getSharedDb, closeSharedDb, resetSharedDb, extractSearchKeywords } from './hooks/shared.js';
|
|
16
18
|
export { A2AClient, MemorySynchronizer, SyncQueue, LocalVectorClock, TeamSynchronizer, SyncScheduler, mapCategory, mapTier, encryptContent, decryptContent, encryptEmbedding, decryptEmbedding, deriveKey, generateEncryptionKey, wrapEncryptedContent, unwrapEncryptedContent, isValidEncryptedPayload, } from './sync/index.js';
|
|
17
19
|
export type { A2AClientConfig, RemoteMemory, SyncResult, QueueFlushResult, FlushOptions, TeamSyncResult, TeamSyncStatus, SyncSchedulerOptions, SyncSchedulerStatus, EncryptedPayload, EncryptionConfig, KeyDerivationResult, } from './sync/index.js';
|
|
18
20
|
export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient } from './llm/index.js';
|
|
19
21
|
export type { LLMClient } from './llm/index.js';
|
|
20
|
-
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider, quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './embedding/index.js';
|
|
22
|
+
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider, E5EmbeddingProvider, resetE5Pipeline, quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './embedding/index.js';
|
|
21
23
|
export type { EmbeddingProvider, QuantizationStats } from './embedding/index.js';
|
|
22
24
|
export { HybridRanker } from './search/index.js';
|
|
23
25
|
export type { RankedResult } from './search/index.js';
|
|
26
|
+
export { AdaptiveRouter } from './search/adaptive-router.js';
|
|
27
|
+
export type { QueryComplexity, RoutingResult } from './search/adaptive-router.js';
|
|
28
|
+
export { CrossEncoderReranker, resetRerankerPipeline } from './search/reranker.js';
|
|
29
|
+
export type { RerankerOptions } from './search/reranker.js';
|
|
30
|
+
export { DedupManager } from './extraction/dedup-manager.js';
|
|
31
|
+
export type { DedupAction, DedupDecision } from './extraction/dedup-manager.js';
|
|
24
32
|
export { scoreQuality, cleanupMemories, determineTier, rebalanceTiers, promoteOnAccess } from './lifecycle/index.js';
|
|
25
33
|
export type { CleanupResult, TieringConfig, TieringResult, StorageTier } from './lifecycle/index.js';
|
|
26
34
|
export type { LogLevel, LoggingConfig } from './types/index.js';
|
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,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,15 +13,21 @@ export { filterSensitiveInfo, isSensitivePath } from './extraction/filter.js';
|
|
|
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 {
|
|
16
|
+
export { handleUserPromptSubmit, resetQueryCache } from './hooks/user-prompt-submit.js';
|
|
17
|
+
export { handlePreCompact } from './hooks/pre-compact.js';
|
|
18
|
+
export { getSharedDb, closeSharedDb, resetSharedDb, extractSearchKeywords } from './hooks/shared.js';
|
|
17
19
|
// Sync
|
|
18
20
|
export { A2AClient, MemorySynchronizer, SyncQueue, LocalVectorClock, TeamSynchronizer, SyncScheduler, mapCategory, mapTier, encryptContent, decryptContent, encryptEmbedding, decryptEmbedding, deriveKey, generateEncryptionKey, wrapEncryptedContent, unwrapEncryptedContent, isValidEncryptedPayload, } from './sync/index.js';
|
|
19
21
|
// LLM
|
|
20
22
|
export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient } from './llm/index.js';
|
|
21
23
|
// Embedding
|
|
22
|
-
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider, quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './embedding/index.js';
|
|
24
|
+
export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider, E5EmbeddingProvider, resetE5Pipeline, quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './embedding/index.js';
|
|
23
25
|
// Search
|
|
24
26
|
export { HybridRanker } from './search/index.js';
|
|
27
|
+
export { AdaptiveRouter } from './search/adaptive-router.js';
|
|
28
|
+
export { CrossEncoderReranker, resetRerankerPipeline } from './search/reranker.js';
|
|
29
|
+
// Extraction - DedupManager
|
|
30
|
+
export { DedupManager } from './extraction/dedup-manager.js';
|
|
25
31
|
// Lifecycle
|
|
26
32
|
export { scoreQuality, cleanupMemories, determineTier, rebalanceTiers, promoteOnAccess } from './lifecycle/index.js';
|
|
27
33
|
export { createLogger } from './utils/logger.js';
|
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":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Memory Quality Scorer
|
|
3
3
|
*
|
|
4
4
|
* 메모리 품질 점수를 계산합니다.
|
|
5
|
-
* - relevance:
|
|
5
|
+
* - relevance: 접근 횟수 × 최근성 가중 (recencyBoost)
|
|
6
6
|
* - freshness: 시간 기반 감쇠 (exponential decay)
|
|
7
|
-
* - usage: 접근
|
|
7
|
+
* - usage: 일평균 접근 빈도 정규화 (createdAt 대비)
|
|
8
8
|
* - overall: 가중 평균 (0.4 * relevance + 0.3 * freshness + 0.3 * usage)
|
|
9
9
|
*/
|
|
10
10
|
import type { Memory, MemoryQuality, LifecycleConfig } from '../types/index.js';
|
|
@@ -1 +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,
|
|
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,CAiCpF"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Memory Quality Scorer
|
|
3
3
|
*
|
|
4
4
|
* 메모리 품질 점수를 계산합니다.
|
|
5
|
-
* - relevance:
|
|
5
|
+
* - relevance: 접근 횟수 × 최근성 가중 (recencyBoost)
|
|
6
6
|
* - freshness: 시간 기반 감쇠 (exponential decay)
|
|
7
|
-
* - usage: 접근
|
|
7
|
+
* - usage: 일평균 접근 빈도 정규화 (createdAt 대비)
|
|
8
8
|
* - overall: 가중 평균 (0.4 * relevance + 0.3 * freshness + 0.3 * usage)
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
@@ -15,18 +15,24 @@
|
|
|
15
15
|
* @returns 품질 점수 객체 (0~1 범위)
|
|
16
16
|
*/
|
|
17
17
|
export function scoreQuality(memory, _config) {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const now = new Date();
|
|
19
|
+
// 1. Relevance: 접근 횟수 + 최근성 가중 (최근 접근일수록 높은 가중)
|
|
20
|
+
const recencyBoost = memory.lastAccessedAt
|
|
21
|
+
? Math.exp(-0.01 * ((now.getTime() - new Date(memory.lastAccessedAt).getTime()) / (1000 * 60 * 60 * 24)))
|
|
22
|
+
: 0.5;
|
|
23
|
+
const relevance = Math.min(1.0, (memory.accessCount / 10) * recencyBoost);
|
|
20
24
|
// 2. Freshness: 시간 기반 감쇠 (exponential decay)
|
|
21
25
|
// freshness = exp(-lambda * daysSinceUpdate)
|
|
22
26
|
// lambda = 0.01 (100일 후 약 0.37)
|
|
23
27
|
const lambda = 0.01;
|
|
24
28
|
const updatedAt = new Date(memory.updatedAt);
|
|
25
|
-
const now = new Date();
|
|
26
29
|
const daysSinceUpdate = (now.getTime() - updatedAt.getTime()) / (1000 * 60 * 60 * 24);
|
|
27
30
|
const freshness = Math.exp(-lambda * daysSinceUpdate);
|
|
28
|
-
// 3. Usage:
|
|
29
|
-
|
|
31
|
+
// 3. Usage: 일평균 접근 빈도 기반 (생성일 대비 정규화)
|
|
32
|
+
// 하루 0.5회 접근이면 1.0 (= 정상적 활용 수준)
|
|
33
|
+
const daysAlive = Math.max(1, (now.getTime() - new Date(memory.createdAt).getTime()) / (1000 * 60 * 60 * 24));
|
|
34
|
+
const accessRate = memory.accessCount / daysAlive;
|
|
35
|
+
const usage = Math.min(1.0, accessRate / 0.5);
|
|
30
36
|
// 4. Overall: 가중 평균
|
|
31
37
|
// 40% relevance + 30% freshness + 30% usage
|
|
32
38
|
const overall = 0.4 * relevance + 0.3 * freshness + 0.3 * usage;
|
|
@@ -1 +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,
|
|
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,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,gDAAgD;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc;QACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzG,CAAC,CAAC,GAAG,CAAC;IACR,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC;IAE1E,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,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,sCAAsC;IACtC,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9G,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC;IAE9C,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiering.d.ts","sourceRoot":"","sources":["../../src/lifecycle/tiering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,WAAW,CAwChF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"tiering.d.ts","sourceRoot":"","sources":["../../src/lifecycle/tiering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,WAAW,CAwChF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,CAyEvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAuBN"}
|
|
@@ -75,7 +75,17 @@ export function rebalanceTiers(db, config) {
|
|
|
75
75
|
if (!config.enabled) {
|
|
76
76
|
return { promoted: 0, demoted: 0, compressed: 0, totalProcessed: 0 };
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
// 배치 처리: 1000개씩 분할 조회 (offset 지원)
|
|
79
|
+
const BATCH_SIZE = 1000;
|
|
80
|
+
const allMemories = [];
|
|
81
|
+
let offset = 0;
|
|
82
|
+
while (true) {
|
|
83
|
+
const batch = db.listMemories({ limit: BATCH_SIZE, offset });
|
|
84
|
+
allMemories.push(...batch);
|
|
85
|
+
if (batch.length < BATCH_SIZE)
|
|
86
|
+
break;
|
|
87
|
+
offset += BATCH_SIZE;
|
|
88
|
+
}
|
|
79
89
|
let promoted = 0;
|
|
80
90
|
let demoted = 0;
|
|
81
91
|
let compressed = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiering.js","sourceRoot":"","sources":["../../src/lifecycle/tiering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIjD,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAqB;IACjE,kBAAkB;IAClB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,0BAA0B;QAC1B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5D,IAAI,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE5D,IAAI,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,eAAe,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,EAAkB,EAAE,MAAqB;IACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tiering.js","sourceRoot":"","sources":["../../src/lifecycle/tiering.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-signal skill practice detection.
|
|
3
3
|
*/
|
|
4
|
+
import { cosineSimilarity } from '../extraction/similarity.js';
|
|
5
|
+
export { cosineSimilarity };
|
|
4
6
|
export interface DetectionResult {
|
|
5
7
|
skillMemoryId: string;
|
|
6
8
|
outcome: 'success' | 'partial' | 'failure';
|
|
@@ -26,10 +28,6 @@ export declare function jaccardSimilarity(setA: string[], setB: string[]): numbe
|
|
|
26
28
|
* Keyword match ratio
|
|
27
29
|
*/
|
|
28
30
|
export declare function keywordMatchRatio(skillContent: string, sessionTexts: string[]): number;
|
|
29
|
-
/**
|
|
30
|
-
* Cosine similarity between two vectors
|
|
31
|
-
*/
|
|
32
|
-
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
33
31
|
/**
|
|
34
32
|
* Multi-signal skill practice detection
|
|
35
33
|
* Weights: embedding 0.5 + tag overlap 0.3 + keyword 0.2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/proficiency/detection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAOxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAYtF;AAED
|
|
1
|
+
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/proficiency/detection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAOxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAYtF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,aAAa,EAAE,GAC/B,eAAe,GAAG,IAAI,CAwCxB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-signal skill practice detection.
|
|
3
3
|
*/
|
|
4
|
+
import { cosineSimilarity } from '../extraction/similarity.js';
|
|
5
|
+
export { cosineSimilarity };
|
|
4
6
|
/**
|
|
5
7
|
* Jaccard similarity between two tag sets
|
|
6
8
|
*/
|
|
@@ -30,20 +32,6 @@ export function keywordMatchRatio(skillContent, sessionTexts) {
|
|
|
30
32
|
const matches = keywords.filter(kw => sessionText.includes(kw));
|
|
31
33
|
return matches.length / keywords.length;
|
|
32
34
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Cosine similarity between two vectors
|
|
35
|
-
*/
|
|
36
|
-
export function cosineSimilarity(a, b) {
|
|
37
|
-
if (a.length !== b.length || a.length === 0)
|
|
38
|
-
return 0;
|
|
39
|
-
let dot = 0, normA = 0, normB = 0;
|
|
40
|
-
for (let i = 0; i < a.length; i++) {
|
|
41
|
-
dot += a[i] * b[i];
|
|
42
|
-
normA += a[i] ** 2;
|
|
43
|
-
normB += b[i] ** 2;
|
|
44
|
-
}
|
|
45
|
-
return normA > 0 && normB > 0 ? dot / (Math.sqrt(normA) * Math.sqrt(normB)) : 0;
|
|
46
|
-
}
|
|
47
35
|
/**
|
|
48
36
|
* Multi-signal skill practice detection
|
|
49
37
|
* Weights: embedding 0.5 + tag overlap 0.3 + keyword 0.2
|
|
@@ -68,7 +56,15 @@ export function detectSkillPractice(skill, sessionMemories) {
|
|
|
68
56
|
const sessionTexts = sessionMemories.map(m => m.content);
|
|
69
57
|
const keywordSim = keywordMatchRatio(skill.content, sessionTexts);
|
|
70
58
|
// Weighted sum
|
|
71
|
-
|
|
59
|
+
// 임베딩 없으면 tag/keyword에 가중치 재분배
|
|
60
|
+
let score;
|
|
61
|
+
if (embeddingSim > 0) {
|
|
62
|
+
score = embeddingSim * 0.5 + tagSim * 0.3 + keywordSim * 0.2;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// 임베딩 미사용: tag 0.55 + keyword 0.45
|
|
66
|
+
score = tagSim * 0.55 + keywordSim * 0.45;
|
|
67
|
+
}
|
|
72
68
|
if (score < 0.4)
|
|
73
69
|
return null;
|
|
74
70
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/proficiency/detection.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/proficiency/detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 레벨 공식 (Hybrid):
|
|
7
7
|
* countScore = log2(1 + N) / log2(151) // Power Law of Practice
|
|
8
8
|
* successScore = 0.3 + successRate * 0.7 // 성공률 반영
|
|
9
|
-
* recencyFactor = exp(-daysSince * 0.
|
|
9
|
+
* recencyFactor = exp(-daysSince * 0.007) // ACT-R Forgetting Curve (완화: 30일→0.81)
|
|
10
10
|
* difficultyBonus = avgDifficulty * 0.1 // 난이도 보상
|
|
11
11
|
* level = ceil(clamp(countScore * successScore * recencyFactor + difficultyBonus, 0, 1) * maxLevel)
|
|
12
12
|
*
|
|
@@ -46,5 +46,5 @@ export declare class ProficiencyTracker {
|
|
|
46
46
|
*
|
|
47
47
|
* Power Law of Practice (log 성장) + Forgetting Curve (지수 감쇠) + 난이도 보너스
|
|
48
48
|
*/
|
|
49
|
-
export declare function computePracticalLevel(experienceCount: number, successRate: number, daysSinceLastPractice: number, avgDifficulty: number, maxLevel: number): number;
|
|
49
|
+
export declare function computePracticalLevel(experienceCount: number, successRate: number, daysSinceLastPractice: number, avgDifficulty: number, maxLevel: number, actrActivation?: number): number;
|
|
50
50
|
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/proficiency/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAMpB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAa;gBAEf,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB;IAMzD;;OAEG;IACH,cAAc,CACZ,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EAC1C,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAM,EAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,iBAAiB;IAgBpB;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/proficiency/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAMpB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAa;gBAEf,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB;IAMzD;;OAEG;IACH,cAAc,CACZ,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EAC1C,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAM,EAAO,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,iBAAiB;IAgBpB;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IAyE1D;;OAEG;IACH,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IAiB3D;;OAEG;IACH,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAI5D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EAAE;CA2BjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,qBAAqB,EAAE,MAAM,EAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAqBR"}
|