a2a-memory 0.9.1 → 0.10.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.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
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { basename } from 'node:path';
|
|
9
9
|
import { getSharedDb, closeSharedDb, normalizeHookInput } from './shared.js';
|
|
10
10
|
import { ConfigManager } from '../config/manager.js';
|
|
11
|
-
import {
|
|
11
|
+
import { createHookClient } from './client-factory.js';
|
|
12
12
|
import { MemorySynchronizer } from '../sync/synchronizer.js';
|
|
13
13
|
import { deduplicateByEmbedding } from '../extraction/similarity.js';
|
|
14
14
|
import { HybridRanker } from '../search/ranker.js';
|
|
@@ -51,6 +51,64 @@ const CATEGORY_LABELS = {
|
|
|
51
51
|
};
|
|
52
52
|
/** 카테고리 출력 우선순위 */
|
|
53
53
|
const CATEGORY_ORDER = ['error_solution', 'convention', 'decision', 'code_pattern', 'skill', 'learning', 'context'];
|
|
54
|
+
/** error_solution 카테고리 상한 */
|
|
55
|
+
const ERROR_SOLUTION_MAX = 3;
|
|
56
|
+
/**
|
|
57
|
+
* 카테고리 다양성을 보장하는 메모리 선택
|
|
58
|
+
* - error_solution 최대 ERROR_SOLUTION_MAX개 (상한)
|
|
59
|
+
* - skill, decision, convention 각 최소 1개 (있으면)
|
|
60
|
+
* - 나머지 슬롯은 점수순
|
|
61
|
+
*/
|
|
62
|
+
function selectWithCategoryDiversity(sortedResults, limit) {
|
|
63
|
+
if (sortedResults.length <= limit)
|
|
64
|
+
return sortedResults;
|
|
65
|
+
const selected = [];
|
|
66
|
+
const used = new Set();
|
|
67
|
+
// 카테고리별 그룹화
|
|
68
|
+
const byCat = new Map();
|
|
69
|
+
for (const item of sortedResults) {
|
|
70
|
+
const cat = item.memory.category;
|
|
71
|
+
if (!byCat.has(cat))
|
|
72
|
+
byCat.set(cat, []);
|
|
73
|
+
byCat.get(cat).push(item);
|
|
74
|
+
}
|
|
75
|
+
// 1. 우선 보장 카테고리: skill, decision, convention 각 최소 1개
|
|
76
|
+
const priorityCategories = ['skill', 'decision', 'convention'];
|
|
77
|
+
for (const cat of priorityCategories) {
|
|
78
|
+
const items = byCat.get(cat);
|
|
79
|
+
if (items && items.length > 0 && selected.length < limit) {
|
|
80
|
+
const pick = items[0]; // 점수 내림차순이므로 첫 번째가 최고
|
|
81
|
+
selected.push(pick);
|
|
82
|
+
used.add(pick.memory.id);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// 2. error_solution 상한 적용
|
|
86
|
+
const errorItems = byCat.get('error_solution') ?? [];
|
|
87
|
+
let errorCount = 0;
|
|
88
|
+
for (const item of errorItems) {
|
|
89
|
+
if (errorCount >= ERROR_SOLUTION_MAX)
|
|
90
|
+
break;
|
|
91
|
+
if (used.has(item.memory.id))
|
|
92
|
+
continue;
|
|
93
|
+
if (selected.length >= limit)
|
|
94
|
+
break;
|
|
95
|
+
selected.push(item);
|
|
96
|
+
used.add(item.memory.id);
|
|
97
|
+
errorCount++;
|
|
98
|
+
}
|
|
99
|
+
// 3. 나머지 슬롯은 점수순으로 채움
|
|
100
|
+
for (const item of sortedResults) {
|
|
101
|
+
if (selected.length >= limit)
|
|
102
|
+
break;
|
|
103
|
+
if (used.has(item.memory.id))
|
|
104
|
+
continue;
|
|
105
|
+
selected.push(item);
|
|
106
|
+
used.add(item.memory.id);
|
|
107
|
+
}
|
|
108
|
+
// 점수 내림차순 재정렬 (출력 일관성)
|
|
109
|
+
selected.sort((a, b) => b.score - a.score);
|
|
110
|
+
return selected;
|
|
111
|
+
}
|
|
54
112
|
/**
|
|
55
113
|
* 여러 줄 콘텐츠를 지정 길이로 요약
|
|
56
114
|
*/
|
|
@@ -85,7 +143,7 @@ function formatMemoryOutput(selectedMemories, teamMemories, _projectPath, profic
|
|
|
85
143
|
const label = CATEGORY_LABELS[cat] || cat;
|
|
86
144
|
lines.push(`\n### ${label}`);
|
|
87
145
|
for (const { memory } of items) {
|
|
88
|
-
const summary = summarizeMultiline(memory.content,
|
|
146
|
+
const summary = summarizeMultiline(memory.content, 500);
|
|
89
147
|
// 스킬 카테고리: 숙련도 레벨 표시
|
|
90
148
|
if (cat === 'skill' && proficiencyMap && proficiencyMap.size > 0) {
|
|
91
149
|
// skill_name 매칭: content 첫 줄 또는 태그에서 이름 추출
|
|
@@ -111,6 +169,141 @@ function formatMemoryOutput(selectedMemories, teamMemories, _projectPath, profic
|
|
|
111
169
|
lines.push('<!-- /A2A Memory Context -->');
|
|
112
170
|
return lines.join('\n');
|
|
113
171
|
}
|
|
172
|
+
/** pull 동기화 로직 (fire-and-forget) */
|
|
173
|
+
async function pullRemoteMemories(config, db) {
|
|
174
|
+
if (!config.autoSync.enabled || !config.autoSync.pullOnSessionStart || !config.server.apiKey)
|
|
175
|
+
return;
|
|
176
|
+
const client = createHookClient(config, 5000); // fire-and-forget이지만 이벤트 루프 유지 방지
|
|
177
|
+
if (!client)
|
|
178
|
+
return;
|
|
179
|
+
if (config.mode === 'team' && config.team) {
|
|
180
|
+
// 팀 모드: TeamSynchronizer로 pull
|
|
181
|
+
try {
|
|
182
|
+
const { TeamSynchronizer } = await import('../sync/team-synchronizer.js');
|
|
183
|
+
const teamSync = new TeamSynchronizer(db, client, config.team.teamPath, config.team.nodeId);
|
|
184
|
+
teamSync.pullFromTeam().catch((err) => {
|
|
185
|
+
console.error('[a2a] Team pull failed (background):', err instanceof Error ? err.message : String(err));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// TeamSynchronizer 미설치 시 무시
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const synchronizer = new MemorySynchronizer(db, client);
|
|
194
|
+
synchronizer.pull().catch((err) => {
|
|
195
|
+
console.error('[a2a] Background pull failed, using local cache:', err instanceof Error ? err.message : String(err));
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** 메모리 검색 및 필터링 */
|
|
200
|
+
async function fetchRelevantMemories(context, config, db, logger) {
|
|
201
|
+
const limit = config.autoInject.maxMemories;
|
|
202
|
+
// 1차: FTS 검색 (프로젝트명 + 최근 태그 기반)
|
|
203
|
+
const query = buildSearchQuery(context.projectPath, db);
|
|
204
|
+
const ftsResults = query ? db.search({ query, limit }) : [];
|
|
205
|
+
logger.info('FTS search', { count: ftsResults.length, query });
|
|
206
|
+
let results;
|
|
207
|
+
// 2차: 임베딩 활성 시 하이브리드 검색
|
|
208
|
+
if (config.embedding?.enabled) {
|
|
209
|
+
try {
|
|
210
|
+
const { createEmbeddingProvider } = await import('../embedding/index.js');
|
|
211
|
+
const provider = createEmbeddingProvider(config.embedding, config.llm);
|
|
212
|
+
// 쿼리 임베딩 생성 (동기/비동기 대응)
|
|
213
|
+
const queryText = query || basename(context.projectPath);
|
|
214
|
+
const queryEmbedding = await Promise.resolve(provider.embed(queryText));
|
|
215
|
+
// 벡터 검색
|
|
216
|
+
const vectorResults = db.searchByVector(queryEmbedding, limit);
|
|
217
|
+
// 최근 메모리
|
|
218
|
+
const recentMemories = db.listMemories({ limit, projectPath: context.projectPath });
|
|
219
|
+
// HybridRanker로 통합 (부스트 활성화)
|
|
220
|
+
const ranker = new HybridRanker({
|
|
221
|
+
categoryBoost: true,
|
|
222
|
+
tierBoost: true,
|
|
223
|
+
recencyDecay: true,
|
|
224
|
+
});
|
|
225
|
+
const ranked = ranker.rank(ftsResults, vectorResults, recentMemories);
|
|
226
|
+
results = ranked.slice(0, limit).map(r => ({
|
|
227
|
+
memory: r.memory,
|
|
228
|
+
score: r.score,
|
|
229
|
+
matchType: 'hybrid',
|
|
230
|
+
}));
|
|
231
|
+
logger.info('Hybrid search', { count: results.length });
|
|
232
|
+
}
|
|
233
|
+
catch (embErr) {
|
|
234
|
+
// 임베딩 실패 시 FTS 결과만 사용
|
|
235
|
+
logger.warn('Embedding search failed', { error: embErr instanceof Error ? embErr.message : String(embErr) });
|
|
236
|
+
results = ftsResults;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// 임베딩 비활성 시: 기존 FTS 검색 + 벡터 폴백 유지 (하위호환)
|
|
241
|
+
results = ftsResults;
|
|
242
|
+
// FTS 결과 부족 시 벡터 검색 폴백
|
|
243
|
+
if (results.length < limit) {
|
|
244
|
+
try {
|
|
245
|
+
// 최근 메모리에서 임베딩 기반 보충
|
|
246
|
+
const allMemories = db.listMemories({ limit: limit * 2, projectPath: context.projectPath });
|
|
247
|
+
const withEmbedding = allMemories.filter((m) => m.embedding && m.embedding.length > 0);
|
|
248
|
+
if (withEmbedding.length > 0) {
|
|
249
|
+
// 이미 결과에 있는 ID 제외
|
|
250
|
+
const existingIds = new Set(results.map((r) => r.memory.id));
|
|
251
|
+
const additional = withEmbedding
|
|
252
|
+
.filter((m) => !existingIds.has(m.id))
|
|
253
|
+
.slice(0, limit - results.length)
|
|
254
|
+
.map((m) => ({
|
|
255
|
+
memory: m,
|
|
256
|
+
score: 0.5, // 벡터 폴백 기본 점수
|
|
257
|
+
matchType: 'vector',
|
|
258
|
+
}));
|
|
259
|
+
results.push(...additional);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (vecErr) {
|
|
263
|
+
// 벡터 검색 실패 무시
|
|
264
|
+
logger.warn('Vector fallback failed', { error: vecErr instanceof Error ? vecErr.message : String(vecErr) });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return { results, query };
|
|
269
|
+
}
|
|
270
|
+
/** 팀 메모리 + proficiency 조회 */
|
|
271
|
+
async function buildSkillInjection(context, config, query, limit, logger) {
|
|
272
|
+
// 팀 메모리 검색 (team 모드, 3초 타임아웃)
|
|
273
|
+
let teamMemoryData = [];
|
|
274
|
+
if (config.mode === 'team' && config.team && config.server.apiKey) {
|
|
275
|
+
try {
|
|
276
|
+
const teamClient = createHookClient(config, 3000); // Hook에서는 짧은 타임아웃
|
|
277
|
+
if (!teamClient)
|
|
278
|
+
throw new Error('team client not available');
|
|
279
|
+
const teamMemories = await teamClient.searchTeamMemories(config.team.teamPath, query, { limit: Math.min(3, limit) });
|
|
280
|
+
teamMemoryData = teamMemories.map((tm) => ({
|
|
281
|
+
category: tm.category,
|
|
282
|
+
content: tm.content,
|
|
283
|
+
}));
|
|
284
|
+
}
|
|
285
|
+
catch (teamErr) {
|
|
286
|
+
// 팀 검색 실패 무시
|
|
287
|
+
logger.warn('Team search failed', { error: teamErr instanceof Error ? teamErr.message : String(teamErr) });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Proficiency Level 표시 (서버에서 pull, 3초 타임아웃)
|
|
291
|
+
let proficiencyMap = new Map();
|
|
292
|
+
if (config.server?.apiKey && config.server?.url) {
|
|
293
|
+
try {
|
|
294
|
+
const profClient = createHookClient(config, 3000); // Hook에서는 짧은 타임아웃 (기본 60초 → 3초)
|
|
295
|
+
const proficiencies = profClient ? await profClient.listProficiencies(context.projectPath) : [];
|
|
296
|
+
if (proficiencies.length > 0) {
|
|
297
|
+
proficiencyMap = new Map(proficiencies.map(p => [p.skill_name, p.level]));
|
|
298
|
+
logger.debug('Fetched proficiency levels from server', { count: proficiencies.length });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
// 서버 연결 실패 또는 타임아웃 시 무시 (Lv. 표시 생략)
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return { teamMemoryData, proficiencyMap };
|
|
306
|
+
}
|
|
114
307
|
export async function handleSessionStart(context) {
|
|
115
308
|
const config = new ConfigManager().load();
|
|
116
309
|
const logger = createLogger('SessionStart', config.logging);
|
|
@@ -123,105 +316,16 @@ export async function handleSessionStart(context) {
|
|
|
123
316
|
}
|
|
124
317
|
const db = getSharedDb(config.db.path);
|
|
125
318
|
try {
|
|
126
|
-
// 백그라운드 pull (fire-and-forget
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
apiKey: config.server.apiKey,
|
|
131
|
-
timeout: 5000, // fire-and-forget이지만 이벤트 루프 유지 방지
|
|
132
|
-
});
|
|
133
|
-
if (config.mode === 'team' && config.team) {
|
|
134
|
-
// 팀 모드: TeamSynchronizer로 pull
|
|
135
|
-
try {
|
|
136
|
-
const { TeamSynchronizer } = await import('../sync/team-synchronizer.js');
|
|
137
|
-
const teamSync = new TeamSynchronizer(db, client, config.team.teamPath, config.team.nodeId);
|
|
138
|
-
teamSync.pullFromTeam().catch(() => {
|
|
139
|
-
// 팀 pull 실패 무시
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// TeamSynchronizer 미설치 시 무시
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
const synchronizer = new MemorySynchronizer(db, client);
|
|
148
|
-
synchronizer.pull().catch(() => {
|
|
149
|
-
// 백그라운드 pull 실패 무시 — 로컬 캐시로 서비스
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const limit = config.autoInject.maxMemories;
|
|
154
|
-
let results = [];
|
|
155
|
-
// 1차: FTS 검색 (프로젝트명 + 최근 태그 기반)
|
|
156
|
-
const query = buildSearchQuery(context.projectPath, db);
|
|
157
|
-
const ftsResults = query ? db.search({ query, limit }) : [];
|
|
158
|
-
logger.info('FTS search', { count: ftsResults.length, query });
|
|
159
|
-
// 2차: 임베딩 활성 시 하이브리드 검색
|
|
160
|
-
if (config.embedding?.enabled) {
|
|
161
|
-
try {
|
|
162
|
-
const { createEmbeddingProvider } = await import('../embedding/index.js');
|
|
163
|
-
const provider = createEmbeddingProvider(config.embedding, config.llm);
|
|
164
|
-
// 쿼리 임베딩 생성 (동기/비동기 대응)
|
|
165
|
-
const queryText = query || basename(context.projectPath);
|
|
166
|
-
const queryEmbedding = await Promise.resolve(provider.embed(queryText));
|
|
167
|
-
// 벡터 검색
|
|
168
|
-
const vectorResults = db.searchByVector(queryEmbedding, limit);
|
|
169
|
-
// 최근 메모리
|
|
170
|
-
const recentMemories = db.listMemories({ limit, projectPath: context.projectPath });
|
|
171
|
-
// HybridRanker로 통합 (부스트 활성화)
|
|
172
|
-
const ranker = new HybridRanker({
|
|
173
|
-
categoryBoost: true,
|
|
174
|
-
tierBoost: true,
|
|
175
|
-
recencyDecay: true,
|
|
176
|
-
});
|
|
177
|
-
const ranked = ranker.rank(ftsResults, vectorResults, recentMemories);
|
|
178
|
-
results = ranked.slice(0, limit).map(r => ({
|
|
179
|
-
memory: r.memory,
|
|
180
|
-
score: r.score,
|
|
181
|
-
matchType: 'hybrid',
|
|
182
|
-
}));
|
|
183
|
-
logger.info('Hybrid search', { count: results.length });
|
|
184
|
-
}
|
|
185
|
-
catch (embErr) {
|
|
186
|
-
// 임베딩 실패 시 FTS 결과만 사용
|
|
187
|
-
logger.warn('Embedding search failed', { error: embErr instanceof Error ? embErr.message : String(embErr) });
|
|
188
|
-
results = ftsResults;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
// 임베딩 비활성 시: 기존 FTS 검색 + 벡터 폴백 유지 (하위호환)
|
|
193
|
-
results = ftsResults;
|
|
194
|
-
// FTS 결과 부족 시 벡터 검색 폴백
|
|
195
|
-
if (results.length < limit) {
|
|
196
|
-
try {
|
|
197
|
-
// 최근 메모리에서 임베딩 기반 보충
|
|
198
|
-
const allMemories = db.listMemories({ limit: limit * 2, projectPath: context.projectPath });
|
|
199
|
-
const withEmbedding = allMemories.filter((m) => m.embedding && m.embedding.length > 0);
|
|
200
|
-
if (withEmbedding.length > 0) {
|
|
201
|
-
// 이미 결과에 있는 ID 제외
|
|
202
|
-
const existingIds = new Set(results.map((r) => r.memory.id));
|
|
203
|
-
const additional = withEmbedding
|
|
204
|
-
.filter((m) => !existingIds.has(m.id))
|
|
205
|
-
.slice(0, limit - results.length)
|
|
206
|
-
.map((m) => ({
|
|
207
|
-
memory: m,
|
|
208
|
-
score: 0.5, // 벡터 폴백 기본 점수
|
|
209
|
-
matchType: 'vector',
|
|
210
|
-
}));
|
|
211
|
-
results.push(...additional);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
catch (vecErr) {
|
|
215
|
-
// 벡터 검색 실패 무시
|
|
216
|
-
logger.warn('Vector fallback failed', { error: vecErr instanceof Error ? vecErr.message : String(vecErr) });
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
319
|
+
// Step 1: 백그라운드 pull (fire-and-forget)
|
|
320
|
+
await pullRemoteMemories(config, db);
|
|
321
|
+
// Step 2: 메모리 검색 및 필터링
|
|
322
|
+
const { results, query } = await fetchRelevantMemories(context, config, db, logger);
|
|
220
323
|
if (results.length === 0) {
|
|
221
324
|
logger.info('No memories found');
|
|
222
325
|
logger.flush();
|
|
223
326
|
return '';
|
|
224
327
|
}
|
|
328
|
+
const limit = config.autoInject.maxMemories;
|
|
225
329
|
// 코사인 중복 제거 (임베딩 있을 때)
|
|
226
330
|
const memories = results.map((r) => r.memory);
|
|
227
331
|
const deduped = deduplicateByEmbedding(memories);
|
|
@@ -229,52 +333,15 @@ export async function handleSessionStart(context) {
|
|
|
229
333
|
const dedupedResults = results.filter((r) => dedupedIds.has(r.memory.id));
|
|
230
334
|
// 점수 내림차순 정렬
|
|
231
335
|
dedupedResults.sort((a, b) => b.score - a.score);
|
|
232
|
-
// 실제로 출력할 메모리 선택
|
|
233
|
-
const selectedMemories =
|
|
336
|
+
// 실제로 출력할 메모리 선택 (카테고리 다양성 보장)
|
|
337
|
+
const selectedMemories = selectWithCategoryDiversity(dedupedResults, limit);
|
|
234
338
|
// 접근 추적: 주입되는 메모리의 access_count 증가
|
|
235
339
|
// skill도 포함 — 순환 강화는 evaluator가 skill을 클러스터링 대상에서 제외하여 방지
|
|
236
340
|
for (const { memory } of selectedMemories) {
|
|
237
|
-
db.
|
|
238
|
-
}
|
|
239
|
-
// 팀 메모리 검색 (team 모드, 3초 타임아웃)
|
|
240
|
-
let teamMemoryData = [];
|
|
241
|
-
if (config.mode === 'team' && config.team && config.server.apiKey) {
|
|
242
|
-
try {
|
|
243
|
-
const teamClient = new A2AClient({
|
|
244
|
-
baseUrl: config.server.url,
|
|
245
|
-
apiKey: config.server.apiKey,
|
|
246
|
-
timeout: 3000, // Hook에서는 짧은 타임아웃
|
|
247
|
-
});
|
|
248
|
-
const teamMemories = await teamClient.searchTeamMemories(config.team.teamPath, query, { limit: Math.min(3, limit) });
|
|
249
|
-
teamMemoryData = teamMemories.map((tm) => ({
|
|
250
|
-
category: tm.category,
|
|
251
|
-
content: tm.content,
|
|
252
|
-
}));
|
|
253
|
-
}
|
|
254
|
-
catch (teamErr) {
|
|
255
|
-
// 팀 검색 실패 무시
|
|
256
|
-
logger.warn('Team search failed', { error: teamErr instanceof Error ? teamErr.message : String(teamErr) });
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
// === Proficiency Level 표시 (서버에서 pull, 3초 타임아웃) ===
|
|
260
|
-
let proficiencyMap = new Map();
|
|
261
|
-
if (config.server?.apiKey && config.server?.url) {
|
|
262
|
-
try {
|
|
263
|
-
const profClient = new A2AClient({
|
|
264
|
-
baseUrl: config.server.url,
|
|
265
|
-
apiKey: config.server.apiKey,
|
|
266
|
-
timeout: 3000, // Hook에서는 짧은 타임아웃 (기본 60초 → 3초)
|
|
267
|
-
});
|
|
268
|
-
const proficiencies = await profClient.listProficiencies(context.projectPath);
|
|
269
|
-
if (proficiencies.length > 0) {
|
|
270
|
-
proficiencyMap = new Map(proficiencies.map(p => [p.skill_name, p.level]));
|
|
271
|
-
logger.debug('Fetched proficiency levels from server', { count: proficiencies.length });
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
// 서버 연결 실패 또는 타임아웃 시 무시 (Lv. 표시 생략)
|
|
276
|
-
}
|
|
341
|
+
db.recordAccess(memory.id); // 세션 주입 시 접근 기록
|
|
277
342
|
}
|
|
343
|
+
// Step 3: 팀 메모리 + proficiency 조회
|
|
344
|
+
const { teamMemoryData, proficiencyMap } = await buildSkillInjection(context, config, query, limit, logger);
|
|
278
345
|
// 구조화된 포맷으로 출력
|
|
279
346
|
const output = formatMemoryOutput(selectedMemories, teamMemoryData, context.projectPath, proficiencyMap);
|
|
280
347
|
logger.info('Hook completed', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;;GAGG;AACH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,EAAmB;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,EAAE;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEvC,uBAAuB;IACvB,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC;QACrC,WAAW;QACX,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClF,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,kBAAkB;AAClB,MAAM,eAAe,GAA2B;IAC9C,cAAc,EAAE,0BAA0B;IAC1C,UAAU,EAAE,qBAAqB;IACjC,QAAQ,EAAE,wBAAwB;IAClC,YAAY,EAAE,eAAe;IAC7B,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF,mBAAmB;AACnB,MAAM,cAAc,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAEpH,6BAA6B;AAC7B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B;;;;;GAKG;AACH,SAAS,2BAA2B,CAClC,aAAuD,EACvD,KAAa;IAEb,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,aAAa,CAAC;IAExD,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,YAAY;IACZ,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoD,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC/D,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;YAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,UAAU,IAAI,kBAAkB;YAAE,MAAM;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QACvC,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM;YAAE,MAAM;QACjD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,gBAA0D,EAC1D,YAA0D,EAC1D,YAAoB,EACpB,cAAoC;IAEpC,MAAM,KAAK,GAAa,CAAC,6BAA6B,CAAC,CAAC;IAExD,YAAY;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoD,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,cAAc;IACd,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE3C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAE7B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxD,qBAAqB;YACrB,IAAI,GAAG,KAAK,OAAO,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACjE,2CAA2C;gBAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,WAAW,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,KAAK,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,oCAAoC;AACpC,KAAK,UAAU,kBAAkB,CAC/B,MAAyC,EACzC,EAAkC;IAElC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO;IAErG,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,kCAAkC;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1C,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5F,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAC7C,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1G,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxD,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACzC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACtH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,mBAAmB;AACnB,KAAK,UAAU,qBAAqB,CAClC,OAA4B,EAC5B,MAAyC,EACzC,EAAkC,EAClC,MAAuC;IAEvC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;IAE5C,gCAAgC;IAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,UAAU,GAAyB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/D,IAAI,OAA6B,CAAC;IAElC,wBAAwB;IACxB,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAEvE,wBAAwB;YACxB,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAExE,QAAQ;YACR,MAAM,aAAa,GAAG,EAAE,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAE/D,SAAS;YACT,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAEpF,6BAA6B;YAC7B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;gBAC9B,aAAa,EAAE,IAAI;gBACnB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;YAEtE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,SAAS,EAAE,QAAiB;aAC7B,CAAC,CAAC,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,sBAAsB;YACtB,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7G,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,yCAAyC;QACzC,OAAO,GAAG,UAAU,CAAC;QAErB,uBAAuB;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,qBAAqB;gBACrB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC5F,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEvF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,kBAAkB;oBAClB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7D,MAAM,UAAU,GAAG,aAAa;yBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBACrC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;yBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACX,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE,GAAG,EAAE,cAAc;wBAC1B,SAAS,EAAE,QAAiB;qBAC7B,CAAC,CAAC,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,cAAc;gBACd,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,mBAAmB,CAChC,OAA4B,EAC5B,MAAyC,EACzC,KAAa,EACb,KAAa,EACb,MAAuC;IAKvC,8BAA8B;IAC9B,IAAI,cAAc,GAAiD,EAAE,CAAC;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;YACrE,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,kBAAkB,CACtD,MAAM,CAAC,IAAI,CAAC,QAAQ,EACpB,KAAK,EACL,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAC9B,CAAC;YACF,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,OAAO,EAAE,EAAE,CAAC,OAAO;aACpB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,aAAa;YACb,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,gCAAgC;YACnF,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,cAAc,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1E,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA4B;IACnE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEpC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAErC,uBAAuB;QACvB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAEpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;QAE5C,uBAAuB;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1E,aAAa;QACb,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAEjD,+BAA+B;QAC/B,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAE5E,mCAAmC;QACnC,0DAA0D;QAC1D,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC1C,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;QAC9C,CAAC;QAED,iCAAiC;QACjC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,mBAAmB,CAClE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CACtC,CAAC;QAEF,eAAe;QACf,MAAM,MAAM,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,cAAc,EAAE,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAEzG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACrD,QAAQ,EAAE,gBAAgB,CAAC,MAAM;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,4BAA4B;IAC9B,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8CAA8C;IAC9C,sCAAsC;IACtC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;QAClC,OAAO,CAAC,KAAK,CAAC,sCAAsC,eAAe,0BAA0B,CAAC,CAAC;QAC/F,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,eAAe,CAAC,CAAC;IACpB,WAAW,CAAC,KAAK,EAAE,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAmC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;YAAS,CAAC;QACT,aAAa,EAAE,CAAC;QAChB,qDAAqD;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sBAAsB;AACtB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACnE,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC;AACT,CAAC"}
|
package/dist/hooks/shared.d.ts
CHANGED
|
@@ -24,4 +24,5 @@ export declare function resetSharedDb(): void;
|
|
|
24
24
|
* sessionId, hookName, toolName, toolInput, toolResult, projectPath, cwd
|
|
25
25
|
*/
|
|
26
26
|
export declare function normalizeHookInput(raw: Record<string, unknown>): Record<string, unknown>;
|
|
27
|
+
export declare function extractSearchKeywords(prompt: string): string;
|
|
27
28
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +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;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
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;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6BxF;AAsBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa5D"}
|
package/dist/hooks/shared.js
CHANGED
|
@@ -68,8 +68,43 @@ export function normalizeHookInput(raw) {
|
|
|
68
68
|
// SessionEnd 전용
|
|
69
69
|
capturedMemoryIds: raw.capturedMemoryIds ?? [],
|
|
70
70
|
modifiedFiles: raw.modifiedFiles ?? [],
|
|
71
|
+
// UserPromptSubmit 전용
|
|
72
|
+
userPrompt: raw.user_prompt ?? raw.userPrompt ?? '',
|
|
73
|
+
// PreCompact 전용
|
|
74
|
+
transcript: raw.transcript ?? '',
|
|
71
75
|
// 원본 데이터 보존 (디버깅용)
|
|
72
76
|
_raw: raw,
|
|
73
77
|
};
|
|
74
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* 프롬프트 텍스트에서 검색 키워드 추출
|
|
81
|
+
* - 불용어 제거
|
|
82
|
+
* - 의미 있는 토큰만 반환
|
|
83
|
+
* - 최대 8개 키워드
|
|
84
|
+
*/
|
|
85
|
+
const STOP_WORDS = new Set([
|
|
86
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
87
|
+
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'shall', 'should',
|
|
88
|
+
'may', 'might', 'must', 'can', 'could', 'to', 'of', 'in', 'for', 'on', 'with',
|
|
89
|
+
'at', 'by', 'from', 'as', 'into', 'through', 'during', 'before', 'after',
|
|
90
|
+
'and', 'but', 'or', 'nor', 'not', 'so', 'yet', 'both', 'either', 'neither',
|
|
91
|
+
'this', 'that', 'these', 'those', 'it', 'its', 'my', 'your', 'his', 'her',
|
|
92
|
+
'our', 'their', 'what', 'which', 'who', 'whom', 'whose',
|
|
93
|
+
'i', 'me', 'we', 'us', 'you', 'he', 'she', 'they', 'them',
|
|
94
|
+
// 한국어 불용어
|
|
95
|
+
'이', '그', '저', '것', '수', '등', '및', '중', '더', '때', '좀',
|
|
96
|
+
'해줘', '해주세요', '알려줘', '알려주세요', '해', '하고', '하는', '하면',
|
|
97
|
+
]);
|
|
98
|
+
export function extractSearchKeywords(prompt) {
|
|
99
|
+
// 코드 블록 제거
|
|
100
|
+
const cleaned = prompt.replace(/```[\s\S]*?```/g, '').replace(/`[^`]+`/g, '');
|
|
101
|
+
// 토큰 분리 (영문+한국어 혼합)
|
|
102
|
+
const tokens = cleaned
|
|
103
|
+
.split(/[\s,.!?;:()[\]{}"'<>]+/)
|
|
104
|
+
.map(t => t.trim())
|
|
105
|
+
.filter(t => t.length > 1 && !STOP_WORDS.has(t.toLowerCase()) && !/^\d+$/.test(t));
|
|
106
|
+
// 중복 제거 + 최대 8개
|
|
107
|
+
const unique = [...new Set(tokens)];
|
|
108
|
+
return unique.slice(0, 8).join(' ');
|
|
109
|
+
}
|
|
75
110
|
//# sourceMappingURL=shared.js.map
|
package/dist/hooks/shared.js.map
CHANGED
|
@@ -1 +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;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAA4B;IAC7D,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,QAAQ;QAC7C,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS;QAC1C,WAAW,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW;QACvC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW;QAC/B,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,cAAc;QAEzD,iBAAiB;QACjB,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ;QACvC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE;QAChD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;YACnE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC;YACrD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QAErD,gBAAgB;QAChB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QAC9C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;QAEtC,mBAAmB;QACnB,IAAI,EAAE,GAAG;KACV,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/hooks/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UserPromptSubmit Hook
|
|
3
|
+
*
|
|
4
|
+
* 사용자가 프롬프트를 제출할 때마다 실행됩니다.
|
|
5
|
+
* 프롬프트 기반 실시간 메모리 검색 + 주입으로
|
|
6
|
+
* 세션 중 축적된 메모리를 즉시 활용합니다.
|
|
7
|
+
*
|
|
8
|
+
* 성능 타겟: p50 < 30ms, p99 < 100ms
|
|
9
|
+
*/
|
|
10
|
+
import type { UserPromptSubmitContext } from '../types/index.js';
|
|
11
|
+
/** 테스트용 캐시 리셋 */
|
|
12
|
+
export declare function resetQueryCache(): void;
|
|
13
|
+
export declare function handleUserPromptSubmit(context: UserPromptSubmitContext): Promise<string>;
|
|
14
|
+
export declare function main(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=user-prompt-submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,uBAAuB,EAAgC,MAAM,mBAAmB,CAAC;AA8D/F,iBAAiB;AACjB,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAyDD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA0GjB;AASD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC1C"}
|