a2a-memory 0.11.5 → 0.12.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/LICENSE +7 -19
- package/README.md +1 -1
- package/dist/a2a/client.js +1 -252
- package/dist/a2a/discovery.js +1 -115
- package/dist/a2a/index.js +1 -8
- package/dist/a2a/types.js +1 -42
- package/dist/adapters/anthropic.js +1 -117
- package/dist/chunking/chunker.js +1 -163
- package/dist/claude/sync.d.ts +8 -2
- package/dist/claude/sync.js +1 -298
- package/dist/cli/commands/add.js +1 -80
- package/dist/cli/commands/claude-sync.d.ts +3 -3
- package/dist/cli/commands/claude-sync.js +1 -70
- package/dist/cli/commands/cleanup.js +1 -83
- package/dist/cli/commands/config.js +1 -79
- package/dist/cli/commands/edit.js +1 -69
- package/dist/cli/commands/embed.js +1 -92
- package/dist/cli/commands/extract.js +1 -103
- package/dist/cli/commands/health.js +1 -105
- package/dist/cli/commands/list.js +1 -46
- package/dist/cli/commands/migrate-chunks.js +1 -205
- package/dist/cli/commands/migrate-file-refs.js +1 -183
- package/dist/cli/commands/proficiency.js +1 -146
- package/dist/cli/commands/rm.js +1 -64
- package/dist/cli/commands/search.js +1 -90
- package/dist/cli/commands/setup-wizard.js +1 -387
- package/dist/cli/commands/setup.js +1 -170
- package/dist/cli/commands/skill.js +1 -151
- package/dist/cli/commands/status.js +1 -70
- package/dist/cli/commands/sync.js +1 -202
- package/dist/cli/commands/team.js +1 -142
- package/dist/cli/index.js +1 -87
- package/dist/config/manager.js +1 -372
- package/dist/db/database.d.ts +36 -0
- package/dist/db/database.js +1 -1400
- package/dist/embedding/e5-provider.js +1 -147
- package/dist/embedding/index.js +1 -34
- package/dist/embedding/local-provider.js +1 -157
- package/dist/embedding/openai-provider.js +1 -92
- package/dist/embedding/quantization.js +1 -89
- package/dist/extraction/dedup-manager.js +1 -161
- package/dist/extraction/emotion-filter.js +1 -33
- package/dist/extraction/extractor.d.ts +0 -3
- package/dist/extraction/extractor.js +1 -648
- package/dist/extraction/file-reference.js +1 -77
- package/dist/extraction/filter.js +1 -86
- package/dist/extraction/scorer.js +1 -142
- package/dist/extraction/similarity.js +1 -85
- package/dist/hooks/client-factory.js +1 -44
- package/dist/hooks/post-tool-use.js +1 -518
- package/dist/hooks/pre-compact.js +1 -209
- package/dist/hooks/session-end.js +1 -633
- package/dist/hooks/session-start.js +1 -549
- package/dist/hooks/shared.js +1 -110
- package/dist/hooks/stop.d.ts +21 -0
- package/dist/hooks/stop.js +1 -0
- package/dist/hooks/user-prompt-submit.js +1 -316
- package/dist/i18n/index.js +1 -2
- package/dist/i18n/messages.js +1 -150
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -43
- package/dist/lifecycle/cleanup-scheduler.js +1 -137
- package/dist/lifecycle/cleanup.d.ts +1 -0
- package/dist/lifecycle/cleanup.js +1 -116
- package/dist/lifecycle/consolidation.d.ts +22 -0
- package/dist/lifecycle/consolidation.js +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.js +1 -13
- package/dist/lifecycle/injection-flush.d.ts +24 -0
- package/dist/lifecycle/injection-flush.js +1 -0
- package/dist/lifecycle/quality-scorer.d.ts +5 -6
- package/dist/lifecycle/quality-scorer.js +1 -46
- package/dist/lifecycle/tiering.js +1 -246
- package/dist/llm/client.js +1 -226
- package/dist/llm/index.js +1 -5
- package/dist/proficiency/actr-engine.js +1 -106
- package/dist/proficiency/detection.js +1 -77
- package/dist/proficiency/index.js +1 -9
- package/dist/proficiency/tracker.js +1 -173
- package/dist/proficiency/types.js +1 -8
- package/dist/providers/adapters.js +1 -140
- package/dist/providers/detector.js +1 -57
- package/dist/search/adaptive-router.js +1 -93
- package/dist/search/index.js +1 -9
- package/dist/search/ranker.js +1 -171
- package/dist/search/reranker.js +1 -155
- package/dist/session/parser.js +1 -130
- package/dist/skill/evaluator.js +1 -509
- package/dist/skill/index.js +1 -7
- package/dist/skill/types.js +1 -7
- package/dist/sync/client.d.ts +7 -0
- package/dist/sync/client.js +1 -597
- package/dist/sync/encryption.js +1 -203
- package/dist/sync/index.js +1 -12
- package/dist/sync/queue.js +1 -214
- package/dist/sync/scheduler.js +1 -140
- package/dist/sync/synchronizer.js +1 -241
- package/dist/sync/team-synchronizer.js +1 -204
- package/dist/sync/vector-clock.js +1 -70
- package/dist/types/index.d.ts +13 -1
- package/dist/types/index.js +1 -132
- package/dist/utils/keychain.js +1 -170
- package/dist/utils/logger.js +1 -128
- package/package.json +15 -10
- package/dist/a2a/client.d.ts.map +0 -1
- package/dist/a2a/client.js.map +0 -1
- package/dist/a2a/discovery.d.ts.map +0 -1
- package/dist/a2a/discovery.js.map +0 -1
- package/dist/a2a/index.d.ts.map +0 -1
- package/dist/a2a/index.js.map +0 -1
- package/dist/a2a/types.d.ts.map +0 -1
- package/dist/a2a/types.js.map +0 -1
- package/dist/adapters/anthropic.d.ts.map +0 -1
- package/dist/adapters/anthropic.js.map +0 -1
- package/dist/chunking/chunker.d.ts.map +0 -1
- package/dist/chunking/chunker.js.map +0 -1
- package/dist/claude/sync.d.ts.map +0 -1
- package/dist/claude/sync.js.map +0 -1
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/claude-sync.d.ts.map +0 -1
- package/dist/cli/commands/claude-sync.js.map +0 -1
- package/dist/cli/commands/cleanup.d.ts.map +0 -1
- package/dist/cli/commands/cleanup.js.map +0 -1
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/edit.d.ts.map +0 -1
- package/dist/cli/commands/edit.js.map +0 -1
- package/dist/cli/commands/embed.d.ts.map +0 -1
- package/dist/cli/commands/embed.js.map +0 -1
- package/dist/cli/commands/extract.d.ts.map +0 -1
- package/dist/cli/commands/extract.js.map +0 -1
- package/dist/cli/commands/health.d.ts.map +0 -1
- package/dist/cli/commands/health.js.map +0 -1
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.js.map +0 -1
- package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
- package/dist/cli/commands/migrate-chunks.js.map +0 -1
- package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
- package/dist/cli/commands/migrate-file-refs.js.map +0 -1
- package/dist/cli/commands/proficiency.d.ts.map +0 -1
- package/dist/cli/commands/proficiency.js.map +0 -1
- package/dist/cli/commands/rm.d.ts.map +0 -1
- package/dist/cli/commands/rm.js.map +0 -1
- package/dist/cli/commands/search.d.ts.map +0 -1
- package/dist/cli/commands/search.js.map +0 -1
- package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
- package/dist/cli/commands/setup-wizard.js.map +0 -1
- package/dist/cli/commands/setup.d.ts.map +0 -1
- package/dist/cli/commands/setup.js.map +0 -1
- package/dist/cli/commands/skill.d.ts.map +0 -1
- package/dist/cli/commands/skill.js.map +0 -1
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/sync.d.ts.map +0 -1
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/team.d.ts.map +0 -1
- package/dist/cli/commands/team.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/manager.js.map +0 -1
- package/dist/db/database.d.ts.map +0 -1
- package/dist/db/database.js.map +0 -1
- package/dist/embedding/e5-provider.d.ts.map +0 -1
- package/dist/embedding/e5-provider.js.map +0 -1
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js.map +0 -1
- package/dist/embedding/local-provider.d.ts.map +0 -1
- package/dist/embedding/local-provider.js.map +0 -1
- package/dist/embedding/openai-provider.d.ts.map +0 -1
- package/dist/embedding/openai-provider.js.map +0 -1
- package/dist/embedding/quantization.d.ts.map +0 -1
- package/dist/embedding/quantization.js.map +0 -1
- package/dist/extraction/dedup-manager.d.ts.map +0 -1
- package/dist/extraction/dedup-manager.js.map +0 -1
- package/dist/extraction/emotion-filter.d.ts.map +0 -1
- package/dist/extraction/emotion-filter.js.map +0 -1
- package/dist/extraction/extractor.d.ts.map +0 -1
- package/dist/extraction/extractor.js.map +0 -1
- package/dist/extraction/file-reference.d.ts.map +0 -1
- package/dist/extraction/file-reference.js.map +0 -1
- package/dist/extraction/filter.d.ts.map +0 -1
- package/dist/extraction/filter.js.map +0 -1
- package/dist/extraction/scorer.d.ts.map +0 -1
- package/dist/extraction/scorer.js.map +0 -1
- package/dist/extraction/similarity.d.ts.map +0 -1
- package/dist/extraction/similarity.js.map +0 -1
- package/dist/hooks/client-factory.d.ts.map +0 -1
- package/dist/hooks/client-factory.js.map +0 -1
- package/dist/hooks/post-tool-use.d.ts.map +0 -1
- package/dist/hooks/post-tool-use.js.map +0 -1
- package/dist/hooks/pre-compact.d.ts.map +0 -1
- package/dist/hooks/pre-compact.js.map +0 -1
- package/dist/hooks/session-end.d.ts.map +0 -1
- package/dist/hooks/session-end.js.map +0 -1
- package/dist/hooks/session-start.d.ts.map +0 -1
- package/dist/hooks/session-start.js.map +0 -1
- package/dist/hooks/shared.d.ts.map +0 -1
- package/dist/hooks/shared.js.map +0 -1
- package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
- package/dist/hooks/user-prompt-submit.js.map +0 -1
- package/dist/i18n/index.d.ts.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/i18n/messages.d.ts.map +0 -1
- package/dist/i18n/messages.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
- package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
- package/dist/lifecycle/cleanup.d.ts.map +0 -1
- package/dist/lifecycle/cleanup.js.map +0 -1
- package/dist/lifecycle/index.d.ts.map +0 -1
- package/dist/lifecycle/index.js.map +0 -1
- package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
- package/dist/lifecycle/quality-scorer.js.map +0 -1
- package/dist/lifecycle/tiering.d.ts.map +0 -1
- package/dist/lifecycle/tiering.js.map +0 -1
- package/dist/llm/client.d.ts.map +0 -1
- package/dist/llm/client.js.map +0 -1
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js.map +0 -1
- package/dist/proficiency/actr-engine.d.ts.map +0 -1
- package/dist/proficiency/actr-engine.js.map +0 -1
- package/dist/proficiency/detection.d.ts.map +0 -1
- package/dist/proficiency/detection.js.map +0 -1
- package/dist/proficiency/index.d.ts.map +0 -1
- package/dist/proficiency/index.js.map +0 -1
- package/dist/proficiency/tracker.d.ts.map +0 -1
- package/dist/proficiency/tracker.js.map +0 -1
- package/dist/proficiency/types.d.ts.map +0 -1
- package/dist/proficiency/types.js.map +0 -1
- package/dist/providers/adapters.d.ts.map +0 -1
- package/dist/providers/adapters.js.map +0 -1
- package/dist/providers/detector.d.ts.map +0 -1
- package/dist/providers/detector.js.map +0 -1
- package/dist/search/adaptive-router.d.ts.map +0 -1
- package/dist/search/adaptive-router.js.map +0 -1
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js.map +0 -1
- package/dist/search/ranker.d.ts.map +0 -1
- package/dist/search/ranker.js.map +0 -1
- package/dist/search/reranker.d.ts.map +0 -1
- package/dist/search/reranker.js.map +0 -1
- package/dist/session/parser.d.ts.map +0 -1
- package/dist/session/parser.js.map +0 -1
- package/dist/skill/evaluator.d.ts.map +0 -1
- package/dist/skill/evaluator.js.map +0 -1
- package/dist/skill/index.d.ts.map +0 -1
- package/dist/skill/index.js.map +0 -1
- package/dist/skill/types.d.ts.map +0 -1
- package/dist/skill/types.js.map +0 -1
- package/dist/sync/client.d.ts.map +0 -1
- package/dist/sync/client.js.map +0 -1
- package/dist/sync/encryption.d.ts.map +0 -1
- package/dist/sync/encryption.js.map +0 -1
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/queue.d.ts.map +0 -1
- package/dist/sync/queue.js.map +0 -1
- package/dist/sync/scheduler.d.ts.map +0 -1
- package/dist/sync/scheduler.js.map +0 -1
- package/dist/sync/synchronizer.d.ts.map +0 -1
- package/dist/sync/synchronizer.js.map +0 -1
- package/dist/sync/team-synchronizer.d.ts.map +0 -1
- package/dist/sync/team-synchronizer.js.map +0 -1
- package/dist/sync/vector-clock.d.ts.map +0 -1
- package/dist/sync/vector-clock.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/keychain.d.ts.map +0 -1
- package/dist/utils/keychain.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
|
@@ -1,173 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proficiency Tracker
|
|
3
|
-
*
|
|
4
|
-
* 스킬 숙련도를 추적하고 레벨 계산을 수행하는 오케스트레이터.
|
|
5
|
-
*
|
|
6
|
-
* 레벨 공식 (Hybrid):
|
|
7
|
-
* countScore = log2(1 + N) / log2(151) // Power Law of Practice
|
|
8
|
-
* successScore = 0.3 + successRate * 0.7 // 성공률 반영
|
|
9
|
-
* recencyFactor = exp(-daysSince * 0.007) // ACT-R Forgetting Curve (완화: 30일→0.81)
|
|
10
|
-
* difficultyBonus = avgDifficulty * 0.1 // 난이도 보상
|
|
11
|
-
* level = ceil(clamp(countScore * successScore * recencyFactor + difficultyBonus, 0, 1) * maxLevel)
|
|
12
|
-
*
|
|
13
|
-
* ACT-R 순수 활성화 값은 actrActivation 필드에 별도 저장 (분석용).
|
|
14
|
-
*/
|
|
15
|
-
import { ACTREngine } from './actr-engine.js';
|
|
16
|
-
// 150 이벤트에서 countScore ≈ 1.0 도달 (Power Law 스케일링)
|
|
17
|
-
const COUNT_SCALE = Math.log2(151);
|
|
18
|
-
export class ProficiencyTracker {
|
|
19
|
-
db;
|
|
20
|
-
config;
|
|
21
|
-
engine;
|
|
22
|
-
constructor(db, config) {
|
|
23
|
-
this.db = db;
|
|
24
|
-
this.config = config;
|
|
25
|
-
this.engine = new ACTREngine(config.actr);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* 스킬 연습 기록 + 레벨 재계산
|
|
29
|
-
*/
|
|
30
|
-
recordPractice(skillMemoryId, outcome, difficulty, contextTags = [], sessionId) {
|
|
31
|
-
const proficiency = this.ensureProficiency(skillMemoryId);
|
|
32
|
-
const now = Date.now() / 1000;
|
|
33
|
-
this.db.addExperienceEvent({
|
|
34
|
-
proficiencyId: proficiency.id,
|
|
35
|
-
timestamp: now,
|
|
36
|
-
outcome,
|
|
37
|
-
difficulty: Math.max(0, Math.min(1, difficulty)),
|
|
38
|
-
contextTags,
|
|
39
|
-
sessionId,
|
|
40
|
-
});
|
|
41
|
-
return this.recalculateLevel(proficiency.id);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 레벨 재계산 (Hybrid: Power Law + Forgetting Curve)
|
|
45
|
-
*/
|
|
46
|
-
recalculateLevel(proficiencyId) {
|
|
47
|
-
const proficiency = this.db.getProficiency(proficiencyId);
|
|
48
|
-
if (!proficiency) {
|
|
49
|
-
return { previousLevel: 1, newLevel: 1, activation: 0, experienceCount: 0, levelChanged: false };
|
|
50
|
-
}
|
|
51
|
-
const events = this.db.getExperienceEvents(proficiencyId, { limit: 1000, order: 'desc' });
|
|
52
|
-
if (events.length === 0) {
|
|
53
|
-
return {
|
|
54
|
-
previousLevel: proficiency.level,
|
|
55
|
-
newLevel: 1,
|
|
56
|
-
activation: 0,
|
|
57
|
-
experienceCount: 0,
|
|
58
|
-
levelChanged: proficiency.level !== 1,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
const now = Date.now() / 1000;
|
|
62
|
-
// 성공률
|
|
63
|
-
const successCount = events.filter((e) => e.outcome === 'success').length;
|
|
64
|
-
const partialCount = events.filter((e) => e.outcome === 'partial').length;
|
|
65
|
-
const successRate = (successCount + partialCount * 0.5) / events.length;
|
|
66
|
-
// 난이도
|
|
67
|
-
const avgDifficulty = events.reduce((sum, e) => sum + e.difficulty, 0) / events.length;
|
|
68
|
-
// 최근 연습 이후 경과일
|
|
69
|
-
const daysSinceLastPractice = (now - events[0].timestamp) / 86400;
|
|
70
|
-
// ACT-R 활성화 계산 (분석용 저장)
|
|
71
|
-
const accessTimes = events.map((e) => Math.max(now - e.timestamp, 1.0));
|
|
72
|
-
const tagCounts = new Map();
|
|
73
|
-
for (const event of events) {
|
|
74
|
-
for (const tag of event.contextTags) {
|
|
75
|
-
tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const associations = Array.from(tagCounts.entries()).map(([tag, count]) => ({
|
|
79
|
-
source: tag,
|
|
80
|
-
strength: Math.min(count / events.length, 1.0),
|
|
81
|
-
}));
|
|
82
|
-
const recentTags = events.slice(0, 5).flatMap((e) => e.contextTags);
|
|
83
|
-
const actrResult = this.engine.computeActivation(accessTimes, associations, new Set(recentTags), successRate, proficiencyId);
|
|
84
|
-
const activation = actrResult.total + avgDifficulty * 0.2;
|
|
85
|
-
// 레벨 계산 (Hybrid: ACT-R 활성화 보정 포함)
|
|
86
|
-
const newLevel = computePracticalLevel(events.length, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel, activation);
|
|
87
|
-
const previousLevel = proficiency.level;
|
|
88
|
-
this.db.updateProficiency(proficiencyId, {
|
|
89
|
-
level: newLevel,
|
|
90
|
-
experienceCount: events.length,
|
|
91
|
-
successRate,
|
|
92
|
-
actrActivation: activation,
|
|
93
|
-
lastPracticedAt: new Date().toISOString(),
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
previousLevel,
|
|
97
|
-
newLevel,
|
|
98
|
-
activation,
|
|
99
|
-
experienceCount: events.length,
|
|
100
|
-
levelChanged: previousLevel !== newLevel,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* 숙련도 레코드 보장: 없으면 생성
|
|
105
|
-
*/
|
|
106
|
-
ensureProficiency(skillMemoryId) {
|
|
107
|
-
const existing = this.db.getProficiencyBySkill(skillMemoryId);
|
|
108
|
-
if (existing)
|
|
109
|
-
return existing;
|
|
110
|
-
const skillMemory = this.db.getMemory(skillMemoryId);
|
|
111
|
-
const skillName = skillMemory
|
|
112
|
-
? skillMemory.content.split('\n')[0].replace('[Skill] ', '').slice(0, 100)
|
|
113
|
-
: `skill-${skillMemoryId.slice(0, 8)}`;
|
|
114
|
-
const projectPath = skillMemory?.projectPath;
|
|
115
|
-
return this.db.createProficiency({
|
|
116
|
-
skillMemoryId,
|
|
117
|
-
skillName,
|
|
118
|
-
projectPath,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* 숙련도 목록 조회
|
|
123
|
-
*/
|
|
124
|
-
listProficiencies(projectPath) {
|
|
125
|
-
return this.db.listProficiencies({ projectPath });
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* 시뮬레이션: 이벤트 시퀀스 → 레벨 진행 반환
|
|
129
|
-
*/
|
|
130
|
-
simulate(scenario) {
|
|
131
|
-
const levels = [];
|
|
132
|
-
let successCount = 0;
|
|
133
|
-
let totalDifficulty = 0;
|
|
134
|
-
for (let i = 0; i < scenario.eventCount; i++) {
|
|
135
|
-
const isSuccess = Math.random() < scenario.successRate;
|
|
136
|
-
if (isSuccess)
|
|
137
|
-
successCount++;
|
|
138
|
-
const totalCount = i + 1;
|
|
139
|
-
const successRate = successCount / totalCount;
|
|
140
|
-
const [minD, maxD] = scenario.difficultyRange;
|
|
141
|
-
const difficulty = minD + (maxD - minD) * (i / Math.max(scenario.eventCount - 1, 1));
|
|
142
|
-
totalDifficulty += difficulty;
|
|
143
|
-
const avgDifficulty = totalDifficulty / totalCount;
|
|
144
|
-
// 최근 연습 이후 경과일: 시뮬레이션에서는 0 (방금 연습)
|
|
145
|
-
const daysSinceLastPractice = 0;
|
|
146
|
-
const level = computePracticalLevel(totalCount, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel);
|
|
147
|
-
levels.push(level);
|
|
148
|
-
}
|
|
149
|
-
return levels;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* 실용적 레벨 공식
|
|
154
|
-
*
|
|
155
|
-
* Power Law of Practice (log 성장) + Forgetting Curve (지수 감쇠) + 난이도 보너스
|
|
156
|
-
*/
|
|
157
|
-
export function computePracticalLevel(experienceCount, successRate, daysSinceLastPractice, avgDifficulty, maxLevel, actrActivation) {
|
|
158
|
-
// 1. 연습 횟수 (Power Law - 대수적 성장)
|
|
159
|
-
const countScore = Math.min(1.0, Math.log2(1 + experienceCount) / COUNT_SCALE);
|
|
160
|
-
// 2. 성공률 (0% → 0.3, 100% → 1.0)
|
|
161
|
-
const successScore = 0.3 + successRate * 0.7;
|
|
162
|
-
// 3. 망각 곡선 (ACT-R inspired exponential decay)
|
|
163
|
-
// 0.007: 30일 미사용 시 약 0.81 유지 (기존 0.02는 30일 시 0.55로 급격 감쇠)
|
|
164
|
-
const recencyFactor = Math.exp(-Math.max(0, daysSinceLastPractice) * 0.007);
|
|
165
|
-
// 4. 난이도 보너스 (높은 난이도 연습에 보상)
|
|
166
|
-
const difficultyBonus = avgDifficulty * 0.1;
|
|
167
|
-
// 5. ACT-R 활성화 보정 (있으면 최대 10% 가중)
|
|
168
|
-
const actrBonus = actrActivation !== undefined ? Math.max(0, Math.min(0.1, actrActivation * 0.05)) : 0;
|
|
169
|
-
// 합산
|
|
170
|
-
const combined = Math.max(0, Math.min(1, countScore * successScore * recencyFactor + difficultyBonus + actrBonus));
|
|
171
|
-
return Math.min(maxLevel, Math.max(1, Math.ceil(combined * maxLevel)));
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=tracker.js.map
|
|
1
|
+
function _0x309f(){const _0x2e4a46=['zw5JEuj5u2TPBa','EMDvt0u','CMvKDwnL','nJa4whDHrefJ','zw5NAw5L','zvH1AhC','vKTVuwO','z2v0rxHWzxjPzq','y29UDgv4DfrHzW','z2v0uhjVzMLJAq','z1rZBfO','tenjt1i','y29UzMLN','mJK5owzYDKXJuG','Bg9NmG','BM93','yMXxs0i','CMvJB3jKuhjHyW','tufdDNi','CwDZAg8','w1nRAwXSxsa','B3v0y29Tzq','ChvZAa','zw50CMLLCW','C3vJy2vZCW','zgLMzMLJDwX0Eq','CMvJywXJDwXHDa','nJy3ndyWqvrqtMvK','y29UDgvUDa','y2vPBa','AuXWCeC','zuXLDMvS','DgT4sgW','Bwf4','mJCZntKYueHUzgrj','C3bSAxq','ueLNBeW','nZeWnJy3uefYtenO','otm2nJaWCw9wt25N','mta4odv0rfj6tLa','ruLszNi','BMnLrxzLBNq','DgLTzxn0yw1W','ndq2mJm2t0fLC29x','Bwf4tgv2zwW','CgfYDgLHBa','z2v0twvTB3j5','Bgv2zwW','Agnqvxa','C0PWz1C','C2XPy2u','ruXLu0C','BgLZDfbYB2zPyW','v1bnteK','zNjVBq','zw5ZDxjLuhjVzG','uMfUz2u','ywn0CG','BfPZAfK','C2v0','y3jLyxrLuhjVzG','zMLSDgvY','ntrXEwrWtu4','AfDtCfK','rerQt2i','CMfUzg9T','z2v0','BwfW','AwnPzw5JEq','zMXHDe1HCa','DxbKyxrLuhjVzG','DgLJzq','BwLU','AwvUy2LLCW','CwzKqwq','zxzLBNrdB3vUDa','C3vJy2vZC1jHDa','mJqYqLbQEgr0','BgvUz3rO'];_0x309f=function(){return _0x2e4a46;};return _0x309f();}(function(_0x5ebd7a,_0x555603){const _0x441bf7=_0x5ebd7a();function _0x55e711(_0x1f2c5b,_0x4cde18){return _0x524a(_0x4cde18-0x30e,_0x1f2c5b);}function _0x632ab0(_0x9063f,_0x67592b){return _0x524a(_0x67592b- -0x390,_0x9063f);}while(!![]){try{const _0x5e5886=parseInt(_0x55e711(0x41c,0x3fb))/0x1*(parseInt(_0x55e711(0x430,0x43b))/0x2)+-parseInt(_0x55e711(0x41c,0x413))/0x3+parseInt(_0x55e711(0x3e9,0x3f1))/0x4*(parseInt(_0x55e711(0x41c,0x415))/0x5)+parseInt(_0x632ab0(-0x2a6,-0x28a))/0x6+-parseInt(_0x632ab0(-0x27b,-0x285))/0x7+parseInt(_0x632ab0(-0x28a,-0x28e))/0x8+-parseInt(_0x632ab0(-0x24b,-0x272))/0x9*(parseInt(_0x632ab0(-0x28f,-0x295))/0xa);if(_0x5e5886===_0x555603)break;else _0x441bf7['push'](_0x441bf7['shift']());}catch(_0x32dfa3){_0x441bf7['push'](_0x441bf7['shift']());}}}(_0x309f,0x2cab9));function _0x524a(_0x1f0fa0,_0x2a7187){_0x1f0fa0=_0x1f0fa0-0xe0;const _0x309f36=_0x309f();let _0x524ab6=_0x309f36[_0x1f0fa0];if(_0x524a['yDUQBs']===undefined){var _0xaa70a1=function(_0x25eed7){const _0x5307bb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1aaea7='',_0x2aede6='';for(let _0x5531a9=0x0,_0x3b9150,_0x313f96,_0x120f3f=0x0;_0x313f96=_0x25eed7['charAt'](_0x120f3f++);~_0x313f96&&(_0x3b9150=_0x5531a9%0x4?_0x3b9150*0x40+_0x313f96:_0x313f96,_0x5531a9++%0x4)?_0x1aaea7+=String['fromCharCode'](0xff&_0x3b9150>>(-0x2*_0x5531a9&0x6)):0x0){_0x313f96=_0x5307bb['indexOf'](_0x313f96);}for(let _0xb16e18=0x0,_0x28969d=_0x1aaea7['length'];_0xb16e18<_0x28969d;_0xb16e18++){_0x2aede6+='%'+('00'+_0x1aaea7['charCodeAt'](_0xb16e18)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2aede6);};_0x524a['rCfIok']=_0xaa70a1,_0x524a['DsDrCq']={},_0x524a['yDUQBs']=!![];}const _0x19d09c=_0x309f36[0x0],_0x13076f=_0x1f0fa0+_0x19d09c,_0x5270b0=_0x524a['DsDrCq'][_0x13076f];return!_0x5270b0?(_0x524ab6=_0x524a['rCfIok'](_0x524ab6),_0x524a['DsDrCq'][_0x13076f]=_0x524ab6):_0x524ab6=_0x5270b0,_0x524ab6;}import{ACTREngine}from'./actr-engine.js';const COUNT_SCALE=Math[_0x318c9b(-0x23f,-0x22d)](0x97);export class ProficiencyTracker{['db'];['config'];['engine'];constructor(_0x1bcebf,_0x48dedf){function _0x373835(_0x3d134f,_0x3fb0e4){return _0x318c9b(_0x3fb0e4-0x445,_0x3d134f);}this['db']=_0x1bcebf;function _0x2b6487(_0x17f869,_0x29993b){return _0x318c9b(_0x29993b-0x57b,_0x17f869);}this[_0x2b6487(0x361,0x33a)]=_0x48dedf,this[_0x2b6487(0x31c,0x332)]=new ACTREngine(_0x48dedf[_0x2b6487(0x344,0x367)]);}[_0x318c9b(-0x23c,-0x229)+_0x3c845c(0x38f,0x375)](_0x539f55,_0x5abc35,_0x175f39,_0x4d4ce5=[],_0xd7b1e7){const _0x3518ab={'lZshY':function(_0x47fe32,_0x333f48){return _0x47fe32/_0x333f48;}};function _0x3e8160(_0x280d9a,_0xa7f394){return _0x318c9b(_0x280d9a-0x57d,_0xa7f394);}const _0x1310e5=this['ensureProf'+'iciency'](_0x539f55);function _0x3d74c3(_0x10f4ef,_0x47fcff){return _0x318c9b(_0x10f4ef-0x353,_0x47fcff);}const _0x45fef5=_0x3518ab[_0x3d74c3(0x140,0x142)](Date[_0x3e8160(0x33f,0x356)](),0x3e8);return this['db']['addExperie'+_0x3d74c3(0x12f,0x114)]({'proficiencyId':_0x1310e5['id'],'timestamp':_0x45fef5,'outcome':_0x5abc35,'difficulty':Math[_0x3d74c3(0x127,0x139)](0x0,Math[_0x3e8160(0x378,0x381)](0x1,_0x175f39)),'contextTags':_0x4d4ce5,'sessionId':_0xd7b1e7}),this[_0x3d74c3(0x120,0x119)+_0x3d74c3(0x125,0x130)](_0x1310e5['id']);}[_0x318c9b(-0x233,-0x246)+_0x3c845c(0x367,0x374)](_0x5220a4){const _0x39426f={'LCIOR':function(_0x29833c,_0x4977f6){return _0x29833c<_0x4977f6;},'tkxHl':function(_0x54b089,_0x5a7d25){return _0x54b089/_0x5a7d25;},'hcPUp':function(_0x4da329,_0x5b1466){return _0x4da329+_0x5b1466;},'PIglL':function(_0x2b3dcd,_0x7ff26c){return _0x2b3dcd/_0x7ff26c;},'qfdAd':function(_0x4804ae,_0x5c5c16){return _0x4804ae/_0x5c5c16;},'EIRfr':'desc','ELeSG':function(_0x46edb4,_0x1a2550){return _0x46edb4===_0x1a2550;},'gTslZ':function(_0x153dea,_0xe7c488){return _0x153dea!==_0xe7c488;},'iLppG':_0x2707c8(-0x8f,-0x7d),'DDjOb':function(_0xbc5567,_0x27f76f){return _0xbc5567+_0x27f76f;}},_0x4bc5dc=this['db'][_0xddbdf2(0x3ec,0x3d7)+'ency'](_0x5220a4);if(!_0x4bc5dc)return{'previousLevel':0x1,'newLevel':0x1,'activation':0x0,'experienceCount':0x0,'levelChanged':![]};const _0x5713cf=this['db'][_0xddbdf2(0x3e4,0x3d5)+'nceEvents'](_0x5220a4,{'limit':0x3e8,'order':_0x39426f[_0x2707c8(-0x86,-0x86)]});if(_0x39426f[_0x2707c8(-0x58,-0x7b)](_0x5713cf[_0x2707c8(-0x56,-0x60)],0x0)){if(_0x39426f[_0x2707c8(-0x87,-0xa4)](_0x39426f[_0x2707c8(-0x95,-0x90)],_0x39426f['iLppG'])){const _0x58ab3c=[];let _0x43dc18=0x0,_0x204cfb=0x0;for(let _0x6b2dee=0x0;_0x6b2dee<_0x330e07[_0xddbdf2(0x427,0x419)];_0x6b2dee++){const _0x1d4112=_0x39426f[_0xddbdf2(0x3b9,0x3d9)](_0x1f3b38['random'](),_0x8d3335[_0x2707c8(-0x81,-0x62)+'e']);if(_0x1d4112)_0x43dc18++;const _0x67cf2a=_0x6b2dee+0x1,_0x161a52=_0x39426f[_0x2707c8(-0x84,-0x8e)](_0x43dc18,_0x67cf2a),[_0x379251,_0x455a81]=_0x2f374c[_0xddbdf2(0x3c0,0x3e7)+_0xddbdf2(0x3e8,0x406)],_0x15b134=_0x39426f[_0x2707c8(-0x5d,-0x7e)](_0x379251,(_0x455a81-_0x379251)*_0x39426f[_0x2707c8(-0x6b,-0x8a)](_0x6b2dee,_0x38fff3[_0x2707c8(-0xaf,-0x8d)](_0x1bb91d['eventCount']-0x1,0x1)));_0x204cfb+=_0x15b134;const _0x42d616=_0x39426f[_0x2707c8(-0x7d,-0x64)](_0x204cfb,_0x67cf2a),_0x15456b=0x0,_0x249d72=_0x492335(_0x67cf2a,_0x161a52,_0x15456b,_0x42d616,this[_0xddbdf2(0x3f3,0x3da)]['maxLevel']);_0x58ab3c['push'](_0x249d72);}return _0x58ab3c;}else return{'previousLevel':_0x4bc5dc[_0x2707c8(-0x79,-0x7f)],'newLevel':0x1,'activation':0x0,'experienceCount':0x0,'levelChanged':_0x39426f[_0xddbdf2(0x3db,0x3d8)](_0x4bc5dc[_0x2707c8(-0xa4,-0x7f)],0x1)};}const _0x1dbe80=Date['now']()/0x3e8,_0x118fcc=_0x5713cf[_0xddbdf2(0x41c,0x40b)](_0x5bc1de=>_0x5bc1de[_0xddbdf2(0x3ec,0x3e3)]===_0x2707c8(-0x98,-0x96))['length'],_0x1496ca=_0x5713cf[_0xddbdf2(0x401,0x40b)](_0xa78040=>_0xa78040[_0x2707c8(-0xb3,-0x99)]===_0x2707c8(-0x7f,-0x81))[_0xddbdf2(0x413,0x41c)],_0x5f4b5b=_0x39426f[_0xddbdf2(0x3eb,0x3fe)](_0x118fcc,_0x1496ca*0.5)/_0x5713cf[_0x2707c8(-0x7b,-0x60)],_0x212f04=_0x5713cf[_0xddbdf2(0x3ce,0x3d0)]((_0x480a57,_0xfbfb31)=>_0x480a57+_0xfbfb31[_0x2707c8(-0xab,-0x95)],0x0)/_0x5713cf['length'],_0x1c1d9b=(_0x1dbe80-_0x5713cf[0x0][_0xddbdf2(0x416,0x3f8)])/0x15180,_0x45d6d5=_0x5713cf[_0xddbdf2(0x3f1,0x411)](_0x6bf6de=>Math[_0x2707c8(-0x99,-0x8d)](_0x1dbe80-_0x6bf6de[_0xddbdf2(0x40e,0x3f8)],0x1)),_0x57f7ff=new Map();for(const _0x5ce4b4 of _0x5713cf){for(const _0x4fa095 of _0x5ce4b4['contextTag'+'s']){_0x57f7ff[_0x2707c8(-0x7b,-0x73)](_0x4fa095,_0x39426f[_0x2707c8(-0x55,-0x6e)](_0x57f7ff[_0xddbdf2(0x42d,0x410)](_0x4fa095)??0x0,0x1));}}const _0xa78c9c=Array[_0xddbdf2(0x3e0,0x404)](_0x57f7ff[_0x2707c8(-0x92,-0x97)]())['map'](([_0x3225e5,_0x5231a0])=>({'source':_0x3225e5,'strength':Math[_0x2707c8(-0x6d,-0x66)](_0x5231a0/_0x5713cf[_0x2707c8(-0x6d,-0x60)],0x1)})),_0xea7adb=_0x5713cf[_0xddbdf2(0x3ec,0x400)](0x0,0x5)[_0x2707c8(-0x48,-0x69)](_0x16c8ce=>_0x16c8ce[_0x2707c8(-0xa9,-0xa6)+'s']);function _0xddbdf2(_0x122805,_0x12c0ed){return _0x318c9b(_0x12c0ed-0x61b,_0x122805);}function _0x2707c8(_0x3ffbdd,_0x1e9776){return _0x318c9b(_0x1e9776-0x19f,_0x3ffbdd);}const _0x9a4bfc=this['engine']['computeAct'+'ivation'](_0x45d6d5,_0xa78c9c,new Set(_0xea7adb),_0x5f4b5b,_0x5220a4),_0xf3417a=_0x9a4bfc['total']+_0x212f04*0.2,_0x380a9b=computePracticalLevel(_0x5713cf[_0x2707c8(-0x49,-0x60)],_0x5f4b5b,_0x1c1d9b,_0x212f04,this['config'][_0x2707c8(-0x68,-0x82)],_0xf3417a),_0x3b8f65=_0x4bc5dc[_0x2707c8(-0x9c,-0x7f)];return this['db'][_0x2707c8(-0x82,-0x68)+_0x2707c8(-0x72,-0x6a)](_0x5220a4,{'level':_0x380a9b,'experienceCount':_0x5713cf[_0xddbdf2(0x420,0x41c)],'successRate':_0x5f4b5b,'actrActivation':_0xf3417a,'lastPracticedAt':new Date()['toISOStrin'+'g']()}),{'previousLevel':_0x3b8f65,'newLevel':_0x380a9b,'activation':_0xf3417a,'experienceCount':_0x5713cf[_0xddbdf2(0x416,0x41c)],'levelChanged':_0x39426f['gTslZ'](_0x3b8f65,_0x380a9b)};}[_0x3c845c(0x37f,0x36b)+'iciency'](_0x9da864){const _0x1954fa={'blWKB':_0x642b5d(-0xf9,-0xf9)},_0x393c9f=this['db']['getProfici'+_0x642b5d(-0xf9,-0x10d)+'l'](_0x9da864);if(_0x393c9f)return _0x393c9f;const _0x3bb2bc=this['db'][_0x642b5d(-0xf6,-0xdf)](_0x9da864),_0x227e0b=_0x3bb2bc?_0x3bb2bc[_0x642b5d(-0x115,-0xf1)][_0x27e3a3(-0x24d,-0x22d)]('\x0a')[0x0]['replace'](_0x1954fa[_0x642b5d(-0xf7,-0xfd)],'')[_0x642b5d(-0xd5,-0xdb)](0x0,0x64):'skill-'+_0x9da864[_0x27e3a3(-0x23e,-0x239)](0x0,0x8);function _0x642b5d(_0x21a23f,_0x1e9af3){return _0x318c9b(_0x1e9af3-0x140,_0x21a23f);}function _0x27e3a3(_0x51fa29,_0x57beec){return _0x318c9b(_0x51fa29- -0x23,_0x57beec);}const _0x1b4813=_0x3bb2bc?.['projectPat'+'h'];return this['db'][_0x27e3a3(-0x234,-0x23c)+_0x27e3a3(-0x22c,-0x24b)]({'skillMemoryId':_0x9da864,'skillName':_0x227e0b,'projectPath':_0x1b4813});}[_0x3c845c(0x37c,0x367)+_0x318c9b(-0x204,-0x21f)](_0x12706e){function _0x3f4434(_0x601def,_0x144dd7){return _0x3c845c(_0x144dd7-0x107,_0x601def);}return this['db']['listProfic'+_0x3f4434(0x49a,0x498)]({'projectPath':_0x12706e});}['simulate'](_0x5e06db){const _0x40fca1={'qgsho':function(_0x59b06e,_0xa49cc3){return _0x59b06e<_0xa49cc3;},'WPMLI':function(_0x2fb109,_0x3e98a5){return _0x2fb109<_0x3e98a5;},'Rkffq':function(_0x285832,_0x405da7){return _0x285832/_0x405da7;},'MACvr':function(_0xff832f,_0x26af6b){return _0xff832f+_0x26af6b;},'hWSpY':function(_0x7fe357,_0x188262){return _0x7fe357-_0x188262;}},_0xa7c84b=[];let _0x631244=0x0,_0x35cf07=0x0;function _0x495f97(_0x41dfcd,_0x4ecbb4){return _0x3c845c(_0x41dfcd- -0x577,_0x4ecbb4);}for(let _0x121dbd=0x0;_0x40fca1[_0x495f97(-0x21c,-0x208)](_0x121dbd,_0x5e06db['eventCount']);_0x121dbd++){const _0x13f939=_0x40fca1[_0x495f97(-0x1fa,-0x1f6)](Math[_0x5789d7(-0xc5,-0xe4)](),_0x5e06db[_0x495f97(-0x1e3,-0x1d9)+'e']);if(_0x13f939)_0x631244++;const _0x4dd965=_0x121dbd+0x1,_0xaf1711=_0x40fca1['Rkffq'](_0x631244,_0x4dd965),[_0x5813d4,_0x53cd7b]=_0x5e06db[_0x5789d7(-0xed,-0x10d)+'Range'],_0x33c9a1=_0x40fca1[_0x495f97(-0x21d,-0x23c)](_0x5813d4,_0x40fca1[_0x495f97(-0x1f0,-0x1e5)](_0x53cd7b,_0x5813d4)*(_0x121dbd/Math['max'](_0x40fca1['hWSpY'](_0x5e06db[_0x5789d7(-0xbb,-0xc6)],0x1),0x1)));_0x35cf07+=_0x33c9a1;const _0x4577b5=_0x35cf07/_0x4dd965,_0x31bce5=0x0,_0x2cafee=computePracticalLevel(_0x4dd965,_0xaf1711,_0x31bce5,_0x4577b5,this[_0x5789d7(-0xfa,-0xfe)][_0x495f97(-0x203,-0x1fc)]);_0xa7c84b[_0x5789d7(-0xf0,-0xd9)](_0x2cafee);}function _0x5789d7(_0x364799,_0xa77f80){return _0x3c845c(_0x364799- -0x44e,_0xa77f80);}return _0xa7c84b;}}function _0x3c845c(_0x31cbc5,_0x6c995d){return _0x524a(_0x31cbc5-0x268,_0x6c995d);}function _0x318c9b(_0xb4b2fd,_0x240454){return _0x524a(_0xb4b2fd- -0x32d,_0x240454);}export function computePracticalLevel(_0xa577bd,_0x28af43,_0x25c29f,_0x4cf15f,_0x52ab24,_0x376c1b){const _0x1db6aa={'zgUOE':function(_0x5e54a6,_0x286e4b){return _0x5e54a6+_0x286e4b;},'VKoQj':function(_0x590bb0,_0x57d7d5){return _0x590bb0*_0x57d7d5;},'eXuhw':function(_0x1dcba5,_0xfbcf97){return _0x1dcba5+_0xfbcf97;}},_0x1ac6c9=Math[_0x254955(0x4b4,0x48e)](0x1,Math[_0x254955(0x47a,0x46b)](_0x1db6aa[_0x37ab21(0xb7,0xa6)](0x1,_0xa577bd))/COUNT_SCALE);function _0x254955(_0x3d5e5b,_0x138a24){return _0x3c845c(_0x3d5e5b-0x124,_0x138a24);}const _0x7f892f=_0x1db6aa[_0x254955(0x46d,0x474)](0.3,_0x28af43*0.7),_0x50e0e1=Math['exp'](_0x1db6aa[_0x254955(0x472,0x44c)](-Math[_0x37ab21(0xd7,0xe4)](0x0,_0x25c29f),0.007));function _0x37ab21(_0xed8e2a,_0x4904c6){return _0x3c845c(_0xed8e2a- -0x292,_0x4904c6);}const _0x4afc60=_0x4cf15f*0.1,_0x5942de=_0x376c1b!==undefined?Math[_0x254955(0x48d,0x476)](0x0,Math[_0x254955(0x4b4,0x4ba)](0.1,_0x1db6aa[_0x37ab21(0xbc,0xd0)](_0x376c1b,0.05))):0x0,_0x598fe6=Math[_0x254955(0x48d,0x47e)](0x0,Math[_0x37ab21(0xfe,0x11c)](0x1,_0x1db6aa[_0x37ab21(0xbb,0xd0)](_0x1db6aa[_0x37ab21(0xbb,0xa9)](_0x1db6aa[_0x254955(0x472,0x496)](_0x1ac6c9,_0x7f892f)*_0x50e0e1,_0x4afc60),_0x5942de)));return Math[_0x37ab21(0xfe,0xdf)](_0x52ab24,Math[_0x254955(0x48d,0x480)](0x1,Math[_0x37ab21(0xd3,0xac)](_0x1db6aa['VKoQj'](_0x598fe6,_0x52ab24))));}
|
|
@@ -1,140 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Provider-specific Memory Adapters (Plugin-side)
|
|
3
|
-
*
|
|
4
|
-
* 각 AI 프로바이더의 메모리 형식과 A2A 통합 형식 간 변환합니다.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Claude Memory Adapter
|
|
8
|
-
*/
|
|
9
|
-
export class ClaudeAdapter {
|
|
10
|
-
provider = 'claude';
|
|
11
|
-
static TYPE_TO_CATEGORY = {
|
|
12
|
-
error: 'error_solution',
|
|
13
|
-
pattern: 'code_pattern',
|
|
14
|
-
decision: 'decision',
|
|
15
|
-
preference: 'convention',
|
|
16
|
-
context: 'context',
|
|
17
|
-
};
|
|
18
|
-
static CATEGORY_TO_TYPE = {
|
|
19
|
-
error_solution: 'error',
|
|
20
|
-
code_pattern: 'pattern',
|
|
21
|
-
decision: 'decision',
|
|
22
|
-
convention: 'preference',
|
|
23
|
-
context: 'context',
|
|
24
|
-
};
|
|
25
|
-
toUnified(data) {
|
|
26
|
-
const type = data.type ?? 'context';
|
|
27
|
-
return {
|
|
28
|
-
id: data.id ?? '',
|
|
29
|
-
content: data.content ?? '',
|
|
30
|
-
category: ClaudeAdapter.TYPE_TO_CATEGORY[type] ?? 'context',
|
|
31
|
-
tags: data.tags ?? [],
|
|
32
|
-
metadata: { originalType: type },
|
|
33
|
-
sourceProvider: 'claude',
|
|
34
|
-
createdAt: data.created_at,
|
|
35
|
-
confidence: data.confidence ?? 1.0,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
fromUnified(memory) {
|
|
39
|
-
return {
|
|
40
|
-
id: memory.id,
|
|
41
|
-
content: memory.content,
|
|
42
|
-
type: ClaudeAdapter.CATEGORY_TO_TYPE[memory.category] ?? 'context',
|
|
43
|
-
tags: memory.tags,
|
|
44
|
-
created_at: memory.createdAt,
|
|
45
|
-
confidence: memory.confidence,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* OpenAI GPT Memory Adapter
|
|
51
|
-
*/
|
|
52
|
-
export class GPTAdapter {
|
|
53
|
-
provider = 'openai';
|
|
54
|
-
toUnified(data) {
|
|
55
|
-
const content = data.content ?? data.value ?? '';
|
|
56
|
-
return {
|
|
57
|
-
id: data.id ?? '',
|
|
58
|
-
content,
|
|
59
|
-
category: this.inferCategory(content),
|
|
60
|
-
tags: data.tags ?? [],
|
|
61
|
-
metadata: { originalType: data.type },
|
|
62
|
-
sourceProvider: 'openai',
|
|
63
|
-
createdAt: data.created_at,
|
|
64
|
-
confidence: data.confidence ?? 1.0,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
fromUnified(memory) {
|
|
68
|
-
return {
|
|
69
|
-
id: memory.id,
|
|
70
|
-
type: 'memory',
|
|
71
|
-
value: memory.content,
|
|
72
|
-
tags: memory.tags,
|
|
73
|
-
metadata: { category: memory.category, source: memory.sourceProvider },
|
|
74
|
-
created_at: memory.createdAt,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
inferCategory(content) {
|
|
78
|
-
const lower = content.toLowerCase();
|
|
79
|
-
if (['error', 'fix', 'bug'].some((kw) => lower.includes(kw)))
|
|
80
|
-
return 'error_solution';
|
|
81
|
-
if (['pattern', 'template'].some((kw) => lower.includes(kw)))
|
|
82
|
-
return 'code_pattern';
|
|
83
|
-
if (['decided', 'chose', 'decision'].some((kw) => lower.includes(kw)))
|
|
84
|
-
return 'decision';
|
|
85
|
-
if (['always', 'never', 'prefer'].some((kw) => lower.includes(kw)))
|
|
86
|
-
return 'convention';
|
|
87
|
-
return 'context';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Gemini Memory Adapter
|
|
92
|
-
*/
|
|
93
|
-
export class GeminiAdapter {
|
|
94
|
-
provider = 'gemini';
|
|
95
|
-
toUnified(data) {
|
|
96
|
-
let content = '';
|
|
97
|
-
if (typeof data.content === 'string') {
|
|
98
|
-
content = data.content;
|
|
99
|
-
}
|
|
100
|
-
else if (typeof data.content === 'object' && data.content !== null) {
|
|
101
|
-
content = data.content.text ?? '';
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
id: data.id ?? '',
|
|
105
|
-
content,
|
|
106
|
-
category: data.category ?? 'context',
|
|
107
|
-
tags: data.labels ?? [],
|
|
108
|
-
metadata: { cacheId: data.cache_id },
|
|
109
|
-
sourceProvider: 'gemini',
|
|
110
|
-
createdAt: data.create_time,
|
|
111
|
-
confidence: data.confidence ?? 1.0,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
fromUnified(memory) {
|
|
115
|
-
return {
|
|
116
|
-
id: memory.id,
|
|
117
|
-
content: { text: memory.content },
|
|
118
|
-
category: memory.category,
|
|
119
|
-
labels: memory.tags,
|
|
120
|
-
metadata: { source: memory.sourceProvider },
|
|
121
|
-
create_time: memory.createdAt,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Adapter Factory
|
|
127
|
-
*/
|
|
128
|
-
export function createAdapter(provider) {
|
|
129
|
-
switch (provider) {
|
|
130
|
-
case 'claude':
|
|
131
|
-
return new ClaudeAdapter();
|
|
132
|
-
case 'openai':
|
|
133
|
-
return new GPTAdapter();
|
|
134
|
-
case 'gemini':
|
|
135
|
-
return new GeminiAdapter();
|
|
136
|
-
default:
|
|
137
|
-
return new ClaudeAdapter(); // Default to Claude
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=adapters.js.map
|
|
1
|
+
function _0x154f(_0x5c869a,_0x402bc8){_0x5c869a=_0x5c869a-0x99;const _0x4847d=_0x4847();let _0x154fab=_0x4847d[_0x5c869a];if(_0x154f['WcNsNc']===undefined){var _0x4f309b=function(_0xf3b810){const _0x6a3389='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x42dada='',_0x484c20='';for(let _0x3267c2=0x0,_0x2bf795,_0x2fe32f,_0x3adf77=0x0;_0x2fe32f=_0xf3b810['charAt'](_0x3adf77++);~_0x2fe32f&&(_0x2bf795=_0x3267c2%0x4?_0x2bf795*0x40+_0x2fe32f:_0x2fe32f,_0x3267c2++%0x4)?_0x42dada+=String['fromCharCode'](0xff&_0x2bf795>>(-0x2*_0x3267c2&0x6)):0x0){_0x2fe32f=_0x6a3389['indexOf'](_0x2fe32f);}for(let _0x442e96=0x0,_0x1f22d8=_0x42dada['length'];_0x442e96<_0x1f22d8;_0x442e96++){_0x484c20+='%'+('00'+_0x42dada['charCodeAt'](_0x442e96)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x484c20);};_0x154f['aXSGXR']=_0x4f309b,_0x154f['xSPcbW']={},_0x154f['WcNsNc']=!![];}const _0x3a83a8=_0x4847d[0x0],_0x5591f9=_0x5c869a+_0x3a83a8,_0x506eea=_0x154f['xSPcbW'][_0x5591f9];return!_0x506eea?(_0x154fab=_0x154f['aXSGXR'](_0x154fab),_0x154f['xSPcbW'][_0x5591f9]=_0x154fab):_0x154fab=_0x506eea,_0x154fab;}function _0x479861(_0x27ddd8,_0xa5939b){return _0x154f(_0xa5939b- -0x36d,_0x27ddd8);}(function(_0x15f51c,_0x461359){function _0x54abcd(_0x2506e6,_0x4e0861){return _0x154f(_0x2506e6- -0x375,_0x4e0861);}const _0x5d83ad=_0x15f51c();function _0x5016e5(_0x25a53c,_0x3704e9){return _0x154f(_0x3704e9- -0x20f,_0x25a53c);}while(!![]){try{const _0xdf1c55=-parseInt(_0x54abcd(-0x2b3,-0x2b7))/0x1*(parseInt(_0x54abcd(-0x2c4,-0x2ac))/0x2)+parseInt(_0x5016e5(-0x14d,-0x153))/0x3*(parseInt(_0x54abcd(-0x29b,-0x281))/0x4)+parseInt(_0x5016e5(-0x13e,-0x13a))/0x5+parseInt(_0x54abcd(-0x2aa,-0x292))/0x6*(-parseInt(_0x5016e5(-0x154,-0x171))/0x7)+-parseInt(_0x54abcd(-0x2ce,-0x2c6))/0x8*(-parseInt(_0x5016e5(-0x154,-0x16e))/0x9)+parseInt(_0x5016e5(-0x13b,-0x145))/0xa+parseInt(_0x5016e5(-0x16e,-0x161))/0xb;if(_0xdf1c55===_0x461359)break;else _0x5d83ad['push'](_0x5d83ad['shift']());}catch(_0x49b39e){_0x5d83ad['push'](_0x5d83ad['shift']());}}}(_0x4847,0x71d64));export class ClaudeAdapter{[_0x479861(-0x2a5,-0x2b8)]=_0x479861(-0x2a5,-0x29e);static [_0x3af1d2(0x10a,0xe8)+_0x3af1d2(0xe0,0xcd)]={'error':'error_solu'+'tion','pattern':_0x479861(-0x2bc,-0x2ba)+'rn','decision':'decision','preference':'convention','context':'context'};static ['CATEGORY_T'+'O_TYPE']={'error_solution':_0x3af1d2(0x106,0xfd),'code_pattern':_0x3af1d2(0x11a,0xfb),'decision':_0x3af1d2(0x107,0xf1),'convention':'preference','context':_0x479861(-0x2d5,-0x2ca)};[_0x479861(-0x2d2,-0x2bd)](_0x553c01){const _0x1f786b={'qAlSD':_0x5e3c8a(0x3b,0x1a)};function _0x5e3c8a(_0x30b65d,_0x536d21){return _0x479861(_0x30b65d,_0x536d21-0x2b8);}function _0xa1f72b(_0x5cc49b,_0x34d985){return _0x479861(_0x34d985,_0x5cc49b-0xca);}const _0x2444bc=_0x553c01['type']??_0xa1f72b(-0x200,-0x209);return{'id':_0x553c01['id']??'','content':_0x553c01[_0x5e3c8a(-0x19,0x2)]??'','category':ClaudeAdapter['TYPE_TO_CA'+_0x5e3c8a(-0x30,-0x15)][_0x2444bc]??_0xa1f72b(-0x200,-0x214),'tags':_0x553c01['tags']??[],'metadata':{'originalType':_0x2444bc},'sourceProvider':_0x1f786b[_0xa1f72b(-0x1fe,-0x213)],'createdAt':_0x553c01[_0x5e3c8a(0x37,0x1c)],'confidence':_0x553c01[_0xa1f72b(-0x1f9,-0x20f)]??0x1};}[_0x3af1d2(0x11b,0x103)+'d'](_0x42866e){function _0x32b2b1(_0x5693aa,_0x420b99){return _0x3af1d2(_0x5693aa,_0x420b99- -0xd2);}const _0x265ed8={'wtkiy':_0x32b2b1(0xd,-0x2)};function _0x5646b4(_0x52fbdb,_0x306b64){return _0x3af1d2(_0x52fbdb,_0x306b64- -0x19d);}return{'id':_0x42866e['id'],'content':_0x42866e['content'],'type':ClaudeAdapter[_0x32b2b1(0x21,0x1b)+_0x5646b4(-0xf3,-0xd5)][_0x42866e['category']]??_0x265ed8['wtkiy'],'tags':_0x42866e[_0x5646b4(-0xaf,-0xb6)],'created_at':_0x42866e[_0x32b2b1(0x8,0x7)],'confidence':_0x42866e[_0x32b2b1(0x13,0x5)]};}}function _0x3af1d2(_0xee1a2d,_0x38fd30){return _0x154f(_0x38fd30-0x2d,_0xee1a2d);}function _0x4847(){const _0x3b56f5=['C1Dkv0W','y29UDgvUDa','Dgv4Da','y2HVC2u','DgfNCW','vfLqrv9ut19dqq','ndmWmMjbCuTdCa','zM55BgK','ywX3yxLZ','vgnyuwq','q0furuDpuLLFva','BMv2zxi','nde0mZGWserICKf0','s0Hzwgi','zgvJAxnPB24','zgvJAwrLza','D3LZCxK','B1Duwe8','Aw5JBhvKzxm','BwvTB3j5','ntuYmdeWz0Drtgrs','mJC0ogjvzNLZBa','B2jQzwn0','zxjYB3jFC29SDq','Cgf0DgvYBG','y2XHDwrL','zxjYB3i','y3jLyxrLzf9HDa','zKX5r2W','z2vTAw5P','AwrLCG','mZG0nJiZnu5OAM54Da','zNjVBvvUAwzPzq','B3j5','yLDKz20','C291CMnLuhjVDG','ndCYrxLcv3Db','C29Tzq','DgLVBG','ChjLzMvY','y2f0zwDVCNK','t19uwvbf','B3bLBMfP','rLz5sNi','mte5nZbsENPRv0C','r2TnruO','vevht1jz','mtH0werYzgC','Dg9mB3DLCKnHCW','y29UDgv4Da','DhLWzq','CufSu0q','rgr4rvq','nJC1ntq0yvrpBu9z','DgvTCgXHDgu','ywresum','y29UzMLKzw5Jzq','r2H5BhK','y3jLyxrLzef0','CffYt20','ntuXnde5meHVuMLKva','y3jLyxrLx3rPBq','Dg9vBMLMAwvK','mNzOzMvjsW','EhPev3m','y29Kzv9Wyxr0zq','uLPnEuK','ChjVDMLKzxi'];_0x4847=function(){return _0x3b56f5;};return _0x4847();}export class GPTAdapter{[_0x479861(-0x2ac,-0x2b8)]='openai';['toUnified'](_0x1a6f50){const _0x3991e1={'Ghyly':_0x723f14(-0x2e0,-0x2e0)};function _0x723f14(_0x455fe8,_0x3b83b6){return _0x479861(_0x455fe8,_0x3b83b6- -0xf);}const _0x8423c5=_0x1a6f50[_0x2fdf68(-0x15e,-0x158)]??_0x1a6f50['value']??'';function _0x2fdf68(_0xa88e01,_0x58333d){return _0x479861(_0xa88e01,_0x58333d-0x15e);}return{'id':_0x1a6f50['id']??'','content':_0x8423c5,'category':this['inferCateg'+_0x723f14(-0x2bf,-0x2a5)](_0x8423c5),'tags':_0x1a6f50[_0x2fdf68(-0x143,-0x155)]??[],'metadata':{'originalType':_0x1a6f50[_0x2fdf68(-0x14d,-0x16b)]},'sourceProvider':_0x3991e1[_0x723f14(-0x2d1,-0x2d1)],'createdAt':_0x1a6f50[_0x723f14(-0x2be,-0x2ab)],'confidence':_0x1a6f50[_0x723f14(-0x2e4,-0x2d2)]??0x1};}[_0x3af1d2(0xf1,0x103)+'d'](_0x3ba3bc){function _0x48357d(_0x2a57a7,_0x13b70b){return _0x3af1d2(_0x13b70b,_0x2a57a7- -0x3c3);}const _0xb51fbf={'wysqy':_0x48357d(-0x2cd,-0x2ab)};function _0x2c766a(_0xbc7899,_0x1895da){return _0x3af1d2(_0xbc7899,_0x1895da-0x172);}return{'id':_0x3ba3bc['id'],'type':_0xb51fbf[_0x48357d(-0x2d0,-0x2ed)],'value':_0x3ba3bc['content'],'tags':_0x3ba3bc[_0x48357d(-0x2dc,-0x2e2)],'metadata':{'category':_0x3ba3bc['category'],'source':_0x3ba3bc[_0x2c766a(0x260,0x278)+_0x48357d(-0x2c2,-0x2d9)]},'created_at':_0x3ba3bc['createdAt']};}['inferCateg'+'ory'](_0x33e840){const _0x5ba962={'RZMyI':_0xc94244(-0x2c9,-0x2c2),'wFGqD':'fix','oWTXO':_0x367f18(0x274,0x275)+_0xc94244(-0x2bd,-0x2cb),'pQrOm':_0xc94244(-0x2cb,-0x2b8),'DdxET':_0xc94244(-0x2f1,-0x2f1),'FVyJr':_0xc94244(-0x2d4,-0x2ce),'bWdgm':_0xc94244(-0x2e0,-0x2f3),'fnyli':_0xc94244(-0x2d5,-0x2b8),'TcXQd':_0xc94244(-0x2db,-0x2cf),'xzDWs':_0xc94244(-0x300,-0x300),'GkMEJ':'convention','fLyGl':_0x367f18(0x24a,0x22c)},_0x729c36=_0x33e840[_0x367f18(0x249,0x25a)+'e']();if([_0x5ba962[_0x367f18(0x25b,0x23f)],_0x5ba962['wFGqD'],'bug'][_0xc94244(-0x2be,-0x2b6)](_0xbba991=>_0x729c36[_0x367f18(0x26f,0x268)](_0xbba991)))return _0x5ba962[_0xc94244(-0x2d2,-0x2e1)];function _0xc94244(_0x244271,_0x5b1185){return _0x479861(_0x5b1185,_0x244271- -0x2c);}function _0x367f18(_0x2fc6fd,_0x26627f){return _0x479861(_0x26627f,_0x2fc6fd-0x514);}if([_0x5ba962[_0x367f18(0x254,0x241)],_0x5ba962[_0x367f18(0x24d,0x262)]][_0x367f18(0x282,0x26f)](_0x11b2a2=>_0x729c36[_0x367f18(0x26f,0x269)](_0x11b2a2)))return'code_patte'+'rn';if([_0x5ba962[_0x367f18(0x244,0x229)],_0x5ba962[_0xc94244(-0x2c1,-0x2ab)],_0x367f18(0x26b,0x284)]['some'](_0x5329a3=>_0x729c36[_0x367f18(0x26f,0x272)](_0x5329a3)))return _0x5ba962[_0x367f18(0x264,0x266)];if([_0x5ba962[_0xc94244(-0x2da,-0x2c5)],_0x367f18(0x268,0x246),_0x5ba962[_0x367f18(0x259,0x26f)]]['some'](_0x2b6643=>_0x729c36[_0x367f18(0x26f,0x265)](_0x2b6643)))return _0x5ba962[_0xc94244(-0x2fa,-0x301)];return _0x5ba962[_0xc94244(-0x2c7,-0x2c6)];}}export class GeminiAdapter{[_0x3af1d2(0xf6,0xe2)]=_0x479861(-0x28f,-0x29a);['toUnified'](_0x44119d){const _0x57de49={'sWJWL':function(_0x51d053,_0x43a60b){return _0x51d053===_0x43a60b;},'adDIC':'string','wuESL':_0x4927ca(0x381,0x374),'iLNZj':function(_0x476a29,_0x3ab324){return _0x476a29!==_0x3ab324;}};function _0x271b36(_0x1838ca,_0x106c53){return _0x3af1d2(_0x1838ca,_0x106c53- -0x169);}function _0x4927ca(_0x1b0aae,_0x1184fc){return _0x3af1d2(_0x1184fc,_0x1b0aae-0x288);}let _0x5c379f='';if(_0x57de49[_0x271b36(-0x81,-0x86)](typeof _0x44119d[_0x4927ca(0x36c,0x358)],_0x57de49[_0x4927ca(0x35e,0x372)]))_0x5c379f=_0x44119d[_0x271b36(-0x76,-0x85)];else typeof _0x44119d['content']===_0x57de49['wuESL']&&_0x57de49['iLNZj'](_0x44119d[_0x271b36(-0x95,-0x85)],null)&&(_0x5c379f=_0x44119d['content'][_0x4927ca(0x36d,0x355)]??'');return{'id':_0x44119d['id']??'','content':_0x5c379f,'category':_0x44119d[_0x271b36(-0xa1,-0xa2)]??'context','tags':_0x44119d['labels']??[],'metadata':{'cacheId':_0x44119d['cache_id']},'sourceProvider':'gemini','createdAt':_0x44119d[_0x271b36(-0x96,-0x8d)+'e'],'confidence':_0x44119d[_0x4927ca(0x35f,0x35b)]??0x1};}[_0x479861(-0x2a1,-0x297)+'d'](_0x34aa99){function _0x16b2cf(_0x1a9b2c,_0x54c925){return _0x479861(_0x54c925,_0x1a9b2c-0x56f);}return{'id':_0x34aa99['id'],'content':{'text':_0x34aa99['content']},'category':_0x34aa99['category'],'labels':_0x34aa99[_0x16b2cf(0x2bc,0x2b4)],'metadata':{'source':_0x34aa99['sourceProv'+'ider']},'create_time':_0x34aa99['createdAt']};}}export function createAdapter(_0x5d0741){function _0x58d0c7(_0x218446,_0xbfa9e4){return _0x479861(_0xbfa9e4,_0x218446-0x3e7);}const _0x27f4ad={'KHYXb':'claude'};function _0x7b97f6(_0x419bba,_0x517300){return _0x479861(_0x419bba,_0x517300-0x5c1);}switch(_0x5d0741){case _0x27f4ad[_0x58d0c7(0x13d,0x135)]:return new ClaudeAdapter();case'openai':return new GPTAdapter();case _0x58d0c7(0x14d,0x15c):return new GeminiAdapter();default:return new ClaudeAdapter();}}
|
|
@@ -1,57 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* AI Provider Detector
|
|
3
|
-
*
|
|
4
|
-
* 환경변수/세션 형식으로 AI 프로바이더를 자동 감지합니다.
|
|
5
|
-
* Claude, GPT, Gemini 등 다양한 AI 도구에서의 실행을 감지합니다.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* 환경변수와 세션 컨텍스트에서 AI 프로바이더를 감지합니다.
|
|
9
|
-
*/
|
|
10
|
-
export function detectProvider(env) {
|
|
11
|
-
const processEnv = env ?? process.env;
|
|
12
|
-
const evidence = [];
|
|
13
|
-
let provider = 'unknown';
|
|
14
|
-
let confidence = 0;
|
|
15
|
-
// Claude 감지
|
|
16
|
-
if (processEnv.CLAUDE_CODE_VERSION || processEnv.ANTHROPIC_API_KEY) {
|
|
17
|
-
provider = 'claude';
|
|
18
|
-
confidence = 0.95;
|
|
19
|
-
if (processEnv.CLAUDE_CODE_VERSION)
|
|
20
|
-
evidence.push('CLAUDE_CODE_VERSION env');
|
|
21
|
-
if (processEnv.ANTHROPIC_API_KEY)
|
|
22
|
-
evidence.push('ANTHROPIC_API_KEY env');
|
|
23
|
-
}
|
|
24
|
-
// OpenAI GPT 감지
|
|
25
|
-
if (processEnv.OPENAI_API_KEY || processEnv.GPT_MODEL) {
|
|
26
|
-
if (confidence < 0.9) {
|
|
27
|
-
provider = 'openai';
|
|
28
|
-
confidence = 0.9;
|
|
29
|
-
}
|
|
30
|
-
if (processEnv.OPENAI_API_KEY)
|
|
31
|
-
evidence.push('OPENAI_API_KEY env');
|
|
32
|
-
if (processEnv.GPT_MODEL)
|
|
33
|
-
evidence.push('GPT_MODEL env');
|
|
34
|
-
}
|
|
35
|
-
// Gemini 감지
|
|
36
|
-
if (processEnv.GOOGLE_API_KEY || processEnv.GEMINI_API_KEY) {
|
|
37
|
-
if (confidence < 0.85) {
|
|
38
|
-
provider = 'gemini';
|
|
39
|
-
confidence = 0.85;
|
|
40
|
-
}
|
|
41
|
-
if (processEnv.GOOGLE_API_KEY)
|
|
42
|
-
evidence.push('GOOGLE_API_KEY env');
|
|
43
|
-
if (processEnv.GEMINI_API_KEY)
|
|
44
|
-
evidence.push('GEMINI_API_KEY env');
|
|
45
|
-
}
|
|
46
|
-
// A2A_PROVIDER 직접 지정 (최우선)
|
|
47
|
-
if (processEnv.A2A_PROVIDER) {
|
|
48
|
-
const explicit = processEnv.A2A_PROVIDER.toLowerCase();
|
|
49
|
-
if (['claude', 'openai', 'gemini'].includes(explicit)) {
|
|
50
|
-
provider = explicit;
|
|
51
|
-
confidence = 1.0;
|
|
52
|
-
evidence.push(`A2A_PROVIDER=${explicit}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return { provider, confidence, evidence };
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=detector.js.map
|
|
1
|
+
(function(_0xa6419b,_0x2a3cc8){const _0x3fea94=_0xa6419b();function _0x18bc71(_0x919da,_0x22bce6){return _0x2299(_0x22bce6-0x3d7,_0x919da);}function _0x37fceb(_0x2604db,_0x2ce222){return _0x2299(_0x2ce222- -0x15,_0x2604db);}while(!![]){try{const _0x30652d=-parseInt(_0x18bc71(0x4cd,0x4cf))/0x1+-parseInt(_0x37fceb(0xf7,0xfa))/0x2*(-parseInt(_0x37fceb(0xe4,0xd9))/0x3)+-parseInt(_0x37fceb(0xfd,0xec))/0x4*(-parseInt(_0x37fceb(0xd8,0xd7))/0x5)+-parseInt(_0x37fceb(0xdf,0xdc))/0x6+-parseInt(_0x18bc71(0x4f3,0x4e9))/0x7*(parseInt(_0x37fceb(0xda,0xe6))/0x8)+-parseInt(_0x18bc71(0x4e5,0x4d5))/0x9+parseInt(_0x18bc71(0x4f8,0x4e1))/0xa*(parseInt(_0x37fceb(0xfe,0xe8))/0xb);if(_0x30652d===_0x2a3cc8)break;else _0x3fea94['push'](_0x3fea94['shift']());}catch(_0xb717bc){_0x3fea94['push'](_0x3fea94['shift']());}}}(_0xdb81,0x94f5e));function _0xdb81(){const _0x267ed3=['mJa1nLnczLLbsa','svD4AeG','mtfduvbMqKS','oty3nJi3ohDvyK9stW','rvi9','sfzpDva','mJCYntzZrwfJChy','tNvTzMm','q0Xbvurfx0npra','rv9wrvjtsu9oia','x0TfwsbLBNy','s3jPAgG','x0Tfwq','r1bux01prevm','ChvZAa','mtKZmdGXndbvtNbishG','qvbjx0TfwsbLBG','t1bftKfjx0fqsq','t29fsLO','rvnKAvK','mNzytxLYvW','DffuEMm','AujsDee','mZeYmMXTzKfLrG','su1Wvxa','zw52','Dg9mB3DLCKnHCW','CuLzyNG','z2vTAw5P','qu5usfjpueLdxW','qLHvCgq','Dw5RBM93BG','oduWDuv3EhP5','r1bux01prevmia','nty1odK5tKfNuvfr','y2XHDwrL','Aw5JBhvKzxm','nJGWnZm0mMz0zufqtW','qtjbx1bst1zjra','yNLArhC','r0vnsu5jx0fqsq','qvbjx0Tfwq','vMfzy08','B3bLBMfP','mZqZmZy0yKDvD0Xi','r09pr0Xfx0fqsq','zxL0Agu'];_0xdb81=function(){return _0x267ed3;};return _0xdb81();}function _0x2299(_0x1af328,_0x39c575){_0x1af328=_0x1af328-0xeb;const _0xdb8188=_0xdb81();let _0x22996b=_0xdb8188[_0x1af328];if(_0x2299['PEEzCb']===undefined){var _0x315aa0=function(_0x2b9ad){const _0x5853c1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5aa050='',_0x38562a='';for(let _0x4d1553=0x0,_0x20a973,_0x3d3cc8,_0x2b24df=0x0;_0x3d3cc8=_0x2b9ad['charAt'](_0x2b24df++);~_0x3d3cc8&&(_0x20a973=_0x4d1553%0x4?_0x20a973*0x40+_0x3d3cc8:_0x3d3cc8,_0x4d1553++%0x4)?_0x5aa050+=String['fromCharCode'](0xff&_0x20a973>>(-0x2*_0x4d1553&0x6)):0x0){_0x3d3cc8=_0x5853c1['indexOf'](_0x3d3cc8);}for(let _0x4bf006=0x0,_0x36c16a=_0x5aa050['length'];_0x4bf006<_0x36c16a;_0x4bf006++){_0x38562a+='%'+('00'+_0x5aa050['charCodeAt'](_0x4bf006)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x38562a);};_0x2299['dWyIGH']=_0x315aa0,_0x2299['hYIXqb']={},_0x2299['PEEzCb']=!![];}const _0x2cea5c=_0xdb8188[0x0],_0x4fa608=_0x1af328+_0x2cea5c,_0x1a548b=_0x2299['hYIXqb'][_0x4fa608];return!_0x1a548b?(_0x22996b=_0x2299['dWyIGH'](_0x22996b),_0x2299['hYIXqb'][_0x4fa608]=_0x22996b):_0x22996b=_0x1a548b,_0x22996b;}export function detectProvider(_0x56ac37){const _0x1067ba={'iBRtA':_0x342209(-0x2e1,-0x2e4),'IMpUp':'openai','tQTzc':'GPT_MODEL\x20'+'env','VaYcO':_0x342209(-0x2e5,-0x2cf),'OoEJZ':_0x2cdb5e(0x459,0x458)+_0x2cdb5e(0x444,0x459)+_0x2cdb5e(0x46a,0x469),'qIYbx':function(_0x3c9d3b,_0x56971d){return _0x3c9d3b<_0x56971d;},'Numfc':_0x342209(-0x2d6,-0x2d8),'BXUpd':_0x342209(-0x2ca,-0x2d7),'IWxhH':'gemini','ESdiY':_0x2cdb5e(0x433,0x448)},_0x548fe7=_0x56ac37??process.env,_0x714fe5=[];let _0x844309=_0x1067ba[_0x2cdb5e(0x45b,0x44b)];function _0x2cdb5e(_0x11a7ea,_0x3a6e78){return _0x2299(_0x3a6e78-0x355,_0x11a7ea);}function _0x342209(_0x58cfc7,_0x16864a){return _0x2299(_0x58cfc7- -0x3d0,_0x16864a);}let _0x38e8f1=0x0;if(_0x548fe7[_0x2cdb5e(0x45c,0x458)+'E_VERSION']||_0x548fe7[_0x342209(-0x2b8,-0x2ac)+'API_KEY']){_0x844309=_0x2cdb5e(0x455,0x444),_0x38e8f1=0.95;if(_0x548fe7[_0x2cdb5e(0x44a,0x458)+'E_VERSION'])_0x714fe5[_0x342209(-0x2c7,-0x2d8)](_0x1067ba[_0x2cdb5e(0x478,0x462)]);if(_0x548fe7[_0x342209(-0x2b8,-0x2bd)+_0x342209(-0x2db,-0x2f1)])_0x714fe5[_0x2cdb5e(0x46a,0x45e)](_0x342209(-0x2b8,-0x2ac)+_0x2cdb5e(0x45a,0x460)+'v');}if(_0x548fe7[_0x342209(-0x2c4,-0x2cb)+_0x2cdb5e(0x465,0x45c)]||_0x548fe7[_0x342209(-0x2c8,-0x2c4)]){if(_0x1067ba[_0x2cdb5e(0x47a,0x46b)](_0x38e8f1,0.9)){if(_0x1067ba[_0x342209(-0x2ce,-0x2de)]===_0x2cdb5e(0x465,0x455)){const _0x10502f=_0x1b7024[_0x2cdb5e(0x455,0x447)+'ER'][_0x2cdb5e(0x474,0x46a)+'e']();[_0x1067ba[_0x2cdb5e(0x458,0x466)],_0x1067ba[_0x2cdb5e(0x474,0x468)],_0x2cdb5e(0x479,0x46c)][_0x2cdb5e(0x453,0x445)](_0x10502f)&&(_0x22080b=_0x10502f,_0x55d27c=0x1,_0x14aa37[_0x2cdb5e(0x450,0x45e)](_0x2cdb5e(0x45d,0x447)+_0x342209(-0x2d1,-0x2bd)+_0x10502f));}else _0x844309=_0x2cdb5e(0x44f,0x44c),_0x38e8f1=0.9;}if(_0x548fe7[_0x2cdb5e(0x455,0x461)+_0x2cdb5e(0x46c,0x45c)])_0x714fe5['push'](_0x342209(-0x2c4,-0x2bd)+'_KEY\x20env');if(_0x548fe7[_0x2cdb5e(0x46a,0x45d)])_0x714fe5['push'](_0x2cdb5e(0x44e,0x442)+_0x342209(-0x2bc,-0x2a8));}if(_0x548fe7[_0x2cdb5e(0x461,0x44e)+_0x342209(-0x2c9,-0x2b4)]||_0x548fe7[_0x342209(-0x2dc,-0x2e8)+_0x342209(-0x2c9,-0x2b8)]){if(_0x1067ba[_0x2cdb5e(0x466,0x46e)]===_0x1067ba[_0x342209(-0x2b7,-0x2a8)]){_0x1067ba[_0x2cdb5e(0x459,0x46b)](_0x38e8f1,0.85)&&(_0x844309=_0x1067ba[_0x2cdb5e(0x445,0x451)],_0x38e8f1=0.85);if(_0x548fe7[_0x2cdb5e(0x445,0x44e)+'_KEY'])_0x714fe5['push']('GOOGLE_API'+'_KEY\x20env');if(_0x548fe7[_0x342209(-0x2dc,-0x2ea)+_0x342209(-0x2c9,-0x2c3)])_0x714fe5[_0x2cdb5e(0x453,0x45e)](_0x2cdb5e(0x453,0x449)+_0x2cdb5e(0x46e,0x45a));}else{_0x77b4d5<0.9&&(_0x40b218=_0x1067ba[_0x2cdb5e(0x476,0x468)],_0x1ef654=0.9);if(_0x52ce8b[_0x2cdb5e(0x45e,0x461)+'_KEY'])_0x3eba8b['push']('OPENAI_API'+_0x2cdb5e(0x45b,0x45a));if(_0xd100eb[_0x342209(-0x2c8,-0x2ca)])_0x42e07a[_0x342209(-0x2c7,-0x2bf)](_0x1067ba[_0x342209(-0x2c0,-0x2bb)]);}}if(_0x548fe7[_0x342209(-0x2de,-0x2d9)+'ER']){const _0x208a59=_0x548fe7[_0x342209(-0x2de,-0x2d2)+'ER'][_0x342209(-0x2bb,-0x2ce)+'e']();[_0x342209(-0x2e1,-0x2ef),'openai',_0x1067ba[_0x342209(-0x2d4,-0x2e9)]][_0x2cdb5e(0x449,0x445)](_0x208a59)&&(_0x2cdb5e(0x45b,0x448)!==_0x1067ba[_0x2cdb5e(0x44c,0x463)]?(_0x1eafee='openai',_0x190f91=0.9):(_0x844309=_0x208a59,_0x38e8f1=0x1,_0x714fe5[_0x2cdb5e(0x46f,0x45e)](_0x342209(-0x2de,-0x2d3)+_0x2cdb5e(0x447,0x454)+_0x208a59)));}return{'provider':_0x844309,'confidence':_0x38e8f1,'evidence':_0x714fe5};}
|
|
@@ -1,93 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Adaptive RAG Router
|
|
3
|
-
*
|
|
4
|
-
* 쿼리 복잡도에 따라 최적의 검색 전략을 선택합니다.
|
|
5
|
-
* LLM 불필요 — 규칙 기반 분류로 < 1ms 레이턴시.
|
|
6
|
-
*
|
|
7
|
-
* - simple: FTS만 (< 5ms)
|
|
8
|
-
* - semantic: FTS + Vector (< 30ms)
|
|
9
|
-
* - complex: FTS + Vector + Reranker (< 100ms)
|
|
10
|
-
*/
|
|
11
|
-
/** 코드/에러 패턴 감지 */
|
|
12
|
-
const CODE_PATTERNS = [
|
|
13
|
-
/\b(error|exception|traceback|stack\s*trace|stderr)\b/i,
|
|
14
|
-
/\b(import|require|from|export|module)\s+['"`]/,
|
|
15
|
-
/\b(function|class|interface|type|const|let|var|def|async)\b/,
|
|
16
|
-
/[{}()\[\]<>].*[{}()\[\]<>]/, // 중첩 괄호
|
|
17
|
-
/\b\w+\.\w+\.\w+/, // 점 표기법 (a.b.c)
|
|
18
|
-
/\b\d+\.\d+\.\d+/, // 버전 번호
|
|
19
|
-
/(?:https?:\/\/|\/[\w/]+\.\w+)/, // URL 또는 파일 경로
|
|
20
|
-
];
|
|
21
|
-
/** 질문/설명 패턴 */
|
|
22
|
-
const SEMANTIC_PATTERNS = [
|
|
23
|
-
/\b(how|why|what|when|where|which|explain|describe)\b/i,
|
|
24
|
-
/(어떻게|왜|무엇|언제|어디|설명|방법)/, // 한국어는 \b 없이 (유니코드 호환)
|
|
25
|
-
/\?$/, // 질문형
|
|
26
|
-
/\b(similar|like|related|compare|difference|versus|vs)\b/i,
|
|
27
|
-
/(비슷한|관련|비교|차이|대안)/, // 한국어
|
|
28
|
-
/\b(best practice|pattern|approach|architecture|design)\b/i,
|
|
29
|
-
/(패턴|접근법|아키텍처|설계|구조)/, // 한국어
|
|
30
|
-
];
|
|
31
|
-
export class AdaptiveRouter {
|
|
32
|
-
/**
|
|
33
|
-
* 쿼리 복잡도 분류
|
|
34
|
-
*
|
|
35
|
-
* @param query 검색 쿼리
|
|
36
|
-
* @returns 분류 결과 + 활성화할 검색 전략
|
|
37
|
-
*/
|
|
38
|
-
classify(query) {
|
|
39
|
-
const trimmed = query.trim();
|
|
40
|
-
const wordCount = trimmed.split(/\s+/).length;
|
|
41
|
-
// 1~2 단어: simple (키워드 매칭 충분)
|
|
42
|
-
if (wordCount <= 2) {
|
|
43
|
-
return {
|
|
44
|
-
complexity: 'simple',
|
|
45
|
-
useFTS: true,
|
|
46
|
-
useVector: false,
|
|
47
|
-
useReranker: false,
|
|
48
|
-
reason: `Short query (${wordCount} words)`,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
// 코드 패턴/에러 메시지: complex (다중 소스 결합)
|
|
52
|
-
const hasCodePattern = CODE_PATTERNS.some(p => p.test(trimmed));
|
|
53
|
-
if (hasCodePattern) {
|
|
54
|
-
return {
|
|
55
|
-
complexity: 'complex',
|
|
56
|
-
useFTS: true,
|
|
57
|
-
useVector: true,
|
|
58
|
-
useReranker: true,
|
|
59
|
-
reason: 'Code pattern or error message detected',
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// 질문형/설명형: semantic (의미 검색 필요)
|
|
63
|
-
const hasSemanticPattern = SEMANTIC_PATTERNS.some(p => p.test(trimmed));
|
|
64
|
-
if (hasSemanticPattern) {
|
|
65
|
-
return {
|
|
66
|
-
complexity: 'semantic',
|
|
67
|
-
useFTS: true,
|
|
68
|
-
useVector: true,
|
|
69
|
-
useReranker: false,
|
|
70
|
-
reason: 'Semantic query detected',
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
// 긴 쿼리 (5+ 단어): semantic
|
|
74
|
-
if (wordCount >= 5) {
|
|
75
|
-
return {
|
|
76
|
-
complexity: 'semantic',
|
|
77
|
-
useFTS: true,
|
|
78
|
-
useVector: true,
|
|
79
|
-
useReranker: false,
|
|
80
|
-
reason: `Long query (${wordCount} words)`,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
// 기본: simple
|
|
84
|
-
return {
|
|
85
|
-
complexity: 'simple',
|
|
86
|
-
useFTS: true,
|
|
87
|
-
useVector: false,
|
|
88
|
-
useReranker: false,
|
|
89
|
-
reason: 'Default classification',
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=adaptive-router.js.map
|
|
1
|
+
(function(_0x53e73f,_0x35157f){const _0x1e1353=_0x53e73f();function _0x4df8f9(_0x4b438c,_0xdd324a){return _0x88ac(_0xdd324a- -0x27b,_0x4b438c);}function _0x1ec3de(_0x342f06,_0x7837e8){return _0x88ac(_0x7837e8- -0x138,_0x342f06);}while(!![]){try{const _0xa4f6c5=parseInt(_0x4df8f9(-0x17a,-0x175))/0x1+-parseInt(_0x1ec3de(-0x3c,-0x37))/0x2+-parseInt(_0x1ec3de(-0x36,-0x42))/0x3*(-parseInt(_0x4df8f9(-0x176,-0x16c))/0x4)+-parseInt(_0x1ec3de(-0x39,-0x47))/0x5+-parseInt(_0x1ec3de(-0x2c,-0x2a))/0x6+parseInt(_0x1ec3de(-0x35,-0x2e))/0x7+parseInt(_0x4df8f9(-0x186,-0x188))/0x8;if(_0xa4f6c5===_0x35157f)break;else _0x1e1353['push'](_0x1e1353['shift']());}catch(_0x499b2a){_0x1e1353['push'](_0x1e1353['shift']());}}}(_0x501a,0x50eb2));function _0x88ac(_0x520ff8,_0x518e55){_0x520ff8=_0x520ff8-0xf0;const _0x501a65=_0x501a();let _0x88acb8=_0x501a65[_0x520ff8];if(_0x88ac['PQbfCm']===undefined){var _0x5706a1=function(_0xbd1775){const _0x259ce8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2fd366='',_0xf2479a='';for(let _0x1173d4=0x0,_0x43d8e6,_0x35d62d,_0x4996b8=0x0;_0x35d62d=_0xbd1775['charAt'](_0x4996b8++);~_0x35d62d&&(_0x43d8e6=_0x1173d4%0x4?_0x43d8e6*0x40+_0x35d62d:_0x35d62d,_0x1173d4++%0x4)?_0x2fd366+=String['fromCharCode'](0xff&_0x43d8e6>>(-0x2*_0x1173d4&0x6)):0x0){_0x35d62d=_0x259ce8['indexOf'](_0x35d62d);}for(let _0x202133=0x0,_0x4a0112=_0x2fd366['length'];_0x202133<_0x4a0112;_0x202133++){_0xf2479a+='%'+('00'+_0x2fd366['charCodeAt'](_0x202133)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xf2479a);};_0x88ac['kemtaJ']=_0x5706a1,_0x88ac['hKRiPc']={},_0x88ac['PQbfCm']=!![];}const _0x44e646=_0x501a65[0x0],_0x3491b1=_0x520ff8+_0x44e646,_0x31e25e=_0x88ac['hKRiPc'][_0x3491b1];return!_0x31e25e?(_0x88acb8=_0x88ac['kemtaJ'](_0x88acb8),_0x88ac['hKRiPc'][_0x3491b1]=_0x88acb8):_0x88acb8=_0x31e25e,_0x88acb8;}const CODE_PATTERNS=[/\b(error|exception|traceback|stack\s*trace|stderr)\b/i,/\b(import|require|from|export|module)\s+['"`]/,/\b(function|class|interface|type|const|let|var|def|async)\b/,/[{}()\[\]<>].*[{}()\[\]<>]/,/\b\w+\.\w+\.\w+/,/\b\d+\.\d+\.\d+/,/(?:https?:\/\/|\/[\w/]+\.\w+)/],SEMANTIC_PATTERNS=[/\b(how|why|what|when|where|which|explain|describe)\b/i,/(어떻게|왜|무엇|언제|어디|설명|방법)/,/\?$/,/\b(similar|like|related|compare|difference|versus|vs)\b/i,/(비슷한|관련|비교|차이|대안)/,/\b(best practice|pattern|approach|architecture|design)\b/i,/(패턴|접근법|아키텍처|설계|구조)/];function _0x46c9a3(_0x4776aa,_0x28ad59){return _0x88ac(_0x28ad59- -0x1cb,_0x4776aa);}export class AdaptiveRouter{[_0x46c9a3(-0xc8,-0xd0)](_0x168e21){const _0x2d051a={'uZhIq':function(_0x28e0b5,_0x409483){return _0x28e0b5<=_0x409483;},'saQrC':_0x5c7f5f(0x2dc,0x2e2),'iCRos':_0x5c7f5f(0x2d8,0x2dc),'kkCXy':_0x5c7f5f(0x2d0,0x2d8),'ZlbCD':_0x5c7f5f(0x2d2,0x2d2)+_0x2be38a(0x1f2,0x1ef)+_0x2be38a(0x1f9,0x1f9),'txLLO':_0x5c7f5f(0x2cf,0x2c9)+_0x2be38a(0x1f3,0x1f5)+'on'};function _0x2be38a(_0x2cea06,_0x175af3){return _0x46c9a3(_0x2cea06,_0x175af3-0x2c6);}const _0x4c55d6=_0x168e21[_0x2be38a(0x20b,0x202)](),_0x3a4e4d=_0x4c55d6['split'](/\s+/)[_0x5c7f5f(0x2d6,0x2d6)];if(_0x2d051a[_0x2be38a(0x20b,0x207)](_0x3a4e4d,0x2))return{'complexity':_0x2d051a['saQrC'],'useFTS':!![],'useVector':![],'useReranker':![],'reason':_0x2be38a(0x1f2,0x1f0)+_0x2be38a(0x209,0x208)+_0x3a4e4d+'\x20words)'};const _0x7e437d=CODE_PATTERNS[_0x5c7f5f(0x2df,0x2d0)](_0x53064a=>_0x53064a[_0x5c7f5f(0x2d4,0x2e4)](_0x4c55d6));if(_0x7e437d)return{'complexity':_0x2d051a['iCRos'],'useFTS':!![],'useVector':!![],'useReranker':!![],'reason':_0x5c7f5f(0x2e9,0x2dd)+_0x5c7f5f(0x2e0,0x2db)+_0x5c7f5f(0x2ef,0x2e1)+_0x2be38a(0x1f3,0x1fb)};function _0x5c7f5f(_0x17019b,_0x1a07a0){return _0x46c9a3(_0x17019b,_0x1a07a0-0x3a4);}const _0x55005a=SEMANTIC_PATTERNS[_0x2be38a(0x1f9,0x1f2)](_0x595672=>_0x595672[_0x2be38a(0x20f,0x206)](_0x4c55d6));if(_0x55005a)return{'complexity':_0x2d051a['kkCXy'],'useFTS':!![],'useVector':!![],'useReranker':![],'reason':_0x2d051a[_0x5c7f5f(0x2c7,0x2d5)]};if(_0x3a4e4d>=0x5)return{'complexity':'semantic','useFTS':!![],'useVector':!![],'useReranker':![],'reason':_0x2be38a(0x20d,0x200)+'\x20('+_0x3a4e4d+'\x20words)'};return{'complexity':_0x2d051a[_0x2be38a(0x1f6,0x1f3)],'useFTS':!![],'useVector':![],'useReranker':![],'reason':_0x2d051a[_0x5c7f5f(0x2c8,0x2cb)]};}}function _0x501a(){const _0x2874e6=['y29TCgXLEa','q29KzsbWyxr0zq','tg9UzYbXDwvYEq','odqZmKTKvxncBG','DhjPBq','CIbTzxnZywDLia','C2LTCgXL','nda0nZa5mNnNBKrkBq','DgvZDa','DvPOsxe','EsaO','mZG3ndqXnKHcDhHVqW','nJbKwuDcqNi','rgvMyxvSDcbJBa','mti4nZmXnvPtEMHLDq','DhHmte8','mty0odC5mNzrCuvlqW','DwvYEsbKzxrLyW','u2HVCNqGCxvLCG','mtaYmZGXA25IqxDX','C29Tzq','C2frCKm','u2vTyw50AwmGCq','yxnZAwzPy2f0Aq','y2XHC3nPzNK','wMXIq0q','BgvUz3rO','DgvK','C2vTyw50Awm','zgv0zwn0zwq','mtm5otaYtKP4zezH','CM4GB3iGzxjYBW'];_0x501a=function(){return _0x2874e6;};return _0x501a();}
|
package/dist/search/index.js
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Search Module
|
|
3
|
-
*
|
|
4
|
-
* 하이브리드 검색 (FTS + Vector + Recency) 통합 모듈.
|
|
5
|
-
*/
|
|
6
|
-
export { HybridRanker } from './ranker.js';
|
|
7
|
-
export { AdaptiveRouter } from './adaptive-router.js';
|
|
8
|
-
export { CrossEncoderReranker } from './reranker.js';
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
(function(_0x4012ac,_0x54110e){var _0x2a294e=_0x4012ac();function _0x16dec0(_0x42723f,_0x1bc724){return _0xa288(_0x42723f-0xd6,_0x1bc724);}function _0x45e5ac(_0x44c9f5,_0x3124a6){return _0xa288(_0x3124a6- -0x370,_0x44c9f5);}while(!![]){try{var _0x465765=-parseInt(_0x45e5ac(-0x256,-0x253))/0x1*(-parseInt(_0x16dec0(0x1f6,0x1f1))/0x2)+parseInt(_0x45e5ac(-0x246,-0x24a))/0x3+parseInt(_0x16dec0(0x1fa,0x1f4))/0x4+parseInt(_0x16dec0(0x1f8,0x1f8))/0x5+-parseInt(_0x16dec0(0x1f4,0x1f0))/0x6*(parseInt(_0x45e5ac(-0x250,-0x251))/0x7)+-parseInt(_0x16dec0(0x1f7,0x1f1))/0x8*(parseInt(_0x45e5ac(-0x249,-0x24d))/0x9)+parseInt(_0x45e5ac(-0x251,-0x24b))/0xa*(-parseInt(_0x45e5ac(-0x250,-0x254))/0xb);if(_0x465765===_0x54110e)break;else _0x2a294e['push'](_0x2a294e['shift']());}catch(_0xa5996d){_0x2a294e['push'](_0x2a294e['shift']());}}}(_0x4eec,0xecbb3));function _0xa288(_0x4dbedd,_0x82d6fe){_0x4dbedd=_0x4dbedd-0x11c;var _0x4eec21=_0x4eec();var _0xa2885e=_0x4eec21[_0x4dbedd];if(_0xa288['FYeyse']===undefined){var _0x44bbcd=function(_0x1bcdab){var _0x1d1f65='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5c26d9='',_0x43c91d='';for(var _0x3a7d7c=0x0,_0x4c93cc,_0x5a549d,_0xb44bf5=0x0;_0x5a549d=_0x1bcdab['charAt'](_0xb44bf5++);~_0x5a549d&&(_0x4c93cc=_0x3a7d7c%0x4?_0x4c93cc*0x40+_0x5a549d:_0x5a549d,_0x3a7d7c++%0x4)?_0x5c26d9+=String['fromCharCode'](0xff&_0x4c93cc>>(-0x2*_0x3a7d7c&0x6)):0x0){_0x5a549d=_0x1d1f65['indexOf'](_0x5a549d);}for(var _0xdd23dd=0x0,_0x509548=_0x5c26d9['length'];_0xdd23dd<_0x509548;_0xdd23dd++){_0x43c91d+='%'+('00'+_0x5c26d9['charCodeAt'](_0xdd23dd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x43c91d);};_0xa288['xPJRoo']=_0x44bbcd,_0xa288['BnEARi']={},_0xa288['FYeyse']=!![];}var _0x4fa031=_0x4eec21[0x0],_0x87488=_0x4dbedd+_0x4fa031,_0x49167e=_0xa288['BnEARi'][_0x87488];return!_0x49167e?(_0xa2885e=_0xa288['xPJRoo'](_0xa2885e),_0xa288['BnEARi'][_0x87488]=_0xa2885e):_0xa2885e=_0x49167e,_0xa2885e;}export{HybridRanker}from'./ranker.js';export{AdaptiveRouter}from'./adaptive-router.js';function _0x4eec(){var _0xdbd57e=['mMrds1Hgvq','mtm4nJzcsxDJCKm','ndq4n09uwfnmCq','ode3ndm0u3HerLPN','ndHZyxb6Awy','ody3mJe1nvP1rg9oEG','mJa2nJi4m0vKDfPhuW','ndCWmdeYngz1qvrsBa','mZm3nZiZmhjiCg9nEa','mtmXoda1m25fuhHwrW','mtfNC0Ddwuq'];_0x4eec=function(){return _0xdbd57e;};return _0x4eec();}export{CrossEncoderReranker}from'./reranker.js';
|