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
package/dist/llm/client.js
CHANGED
|
@@ -1,226 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Client — AI 기반 분류/요약
|
|
3
|
-
* npm 의존성 없음, native fetch 사용
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Rate Limiter — 분당 최대 요청 수 제한 + Exponential Backoff
|
|
7
|
-
*/
|
|
8
|
-
class RateLimiter {
|
|
9
|
-
timestamps = [];
|
|
10
|
-
maxPerMinute;
|
|
11
|
-
maxRetries;
|
|
12
|
-
constructor(maxPerMinute = 60, maxRetries = 3) {
|
|
13
|
-
this.maxPerMinute = maxPerMinute;
|
|
14
|
-
this.maxRetries = maxRetries;
|
|
15
|
-
}
|
|
16
|
-
async execute(fn) {
|
|
17
|
-
let lastError;
|
|
18
|
-
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
19
|
-
// Rate limit check
|
|
20
|
-
const now = Date.now();
|
|
21
|
-
this.timestamps = this.timestamps.filter((t) => now - t < 60000);
|
|
22
|
-
if (this.timestamps.length >= this.maxPerMinute) {
|
|
23
|
-
const waitMs = 60000 - (now - this.timestamps[0]);
|
|
24
|
-
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
25
|
-
}
|
|
26
|
-
this.timestamps.push(Date.now());
|
|
27
|
-
try {
|
|
28
|
-
return await fn();
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
32
|
-
if (attempt < this.maxRetries) {
|
|
33
|
-
const backoffMs = Math.min(1000 * Math.pow(2, attempt), 8000);
|
|
34
|
-
await new Promise((resolve) => setTimeout(resolve, backoffMs));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
throw lastError;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export class OpenAILLMClient {
|
|
42
|
-
apiKey;
|
|
43
|
-
model;
|
|
44
|
-
maxTokens;
|
|
45
|
-
timeout;
|
|
46
|
-
rateLimiter;
|
|
47
|
-
constructor(config) {
|
|
48
|
-
if (!config.apiKey)
|
|
49
|
-
throw new Error('OpenAI API key is required');
|
|
50
|
-
this.apiKey = config.apiKey;
|
|
51
|
-
this.model = config.model ?? 'gpt-4o-mini';
|
|
52
|
-
this.maxTokens = config.maxTokens ?? 500;
|
|
53
|
-
this.timeout = 10000;
|
|
54
|
-
this.rateLimiter = new RateLimiter(60, 3);
|
|
55
|
-
}
|
|
56
|
-
async complete(prompt, systemPrompt) {
|
|
57
|
-
const messages = [];
|
|
58
|
-
if (systemPrompt) {
|
|
59
|
-
messages.push({ role: 'system', content: systemPrompt });
|
|
60
|
-
}
|
|
61
|
-
messages.push({ role: 'user', content: prompt });
|
|
62
|
-
const controller = new AbortController();
|
|
63
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
64
|
-
try {
|
|
65
|
-
const response = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
66
|
-
method: 'POST',
|
|
67
|
-
headers: {
|
|
68
|
-
'Content-Type': 'application/json',
|
|
69
|
-
'Authorization': `Bearer ${this.apiKey}`,
|
|
70
|
-
},
|
|
71
|
-
body: JSON.stringify({
|
|
72
|
-
model: this.model,
|
|
73
|
-
messages,
|
|
74
|
-
max_tokens: this.maxTokens,
|
|
75
|
-
temperature: 0.3,
|
|
76
|
-
}),
|
|
77
|
-
signal: controller.signal,
|
|
78
|
-
});
|
|
79
|
-
clearTimeout(timeoutId);
|
|
80
|
-
if (!response.ok) {
|
|
81
|
-
throw new Error(`OpenAI API error: ${response.status}`);
|
|
82
|
-
}
|
|
83
|
-
const data = await response.json();
|
|
84
|
-
return data.choices[0]?.message?.content?.trim() ?? '';
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
clearTimeout(timeoutId);
|
|
88
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
89
|
-
throw new Error('LLM request timeout (10s)');
|
|
90
|
-
}
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async summarize(contents) {
|
|
95
|
-
const joined = contents.join('\n---\n').slice(0, 4000);
|
|
96
|
-
return this.complete(`Summarize the following development session contents in 2-3 concise sentences:\n\n${joined}`, 'You are a technical summarizer. Be concise and focus on key decisions, errors solved, and patterns used.');
|
|
97
|
-
}
|
|
98
|
-
async classify(content, categories) {
|
|
99
|
-
const categoryList = categories.join(', ');
|
|
100
|
-
const result = await this.rateLimiter.execute(() => this.complete(`Classify the following content into exactly one of these categories: ${categoryList}\n\nContent:\n${content.slice(0, 2000)}\n\nRespond with ONLY the category name, nothing else.`, 'You are a content classifier. Respond with only the category name.'));
|
|
101
|
-
const cleaned = result.toLowerCase().trim();
|
|
102
|
-
const match = categories.find((c) => c.toLowerCase() === cleaned);
|
|
103
|
-
return match ?? categories[categories.length - 1];
|
|
104
|
-
}
|
|
105
|
-
async validateExtraction(content, category) {
|
|
106
|
-
const result = await this.rateLimiter.execute(() => this.complete(`Is this content correctly classified as "${category}"?\n\nContent:\n${content.slice(0, 1000)}\n\nRespond in JSON: {"valid": true/false, "confidence": 0.0-1.0}`, 'You are a content validation expert. Respond with ONLY valid JSON.'));
|
|
107
|
-
try {
|
|
108
|
-
const parsed = JSON.parse(result);
|
|
109
|
-
return { valid: !!parsed.valid, confidence: Number(parsed.confidence) || 0 };
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
return { valid: true, confidence: 0.5 };
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
async improveContent(content) {
|
|
116
|
-
return this.rateLimiter.execute(() => this.complete(`Improve this development memory for future reference. Keep it concise but complete:\n\n${content.slice(0, 2000)}`, 'You are a technical writer. Improve clarity and add missing context. Keep the same format.'));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
export class AnthropicLLMClient {
|
|
120
|
-
apiKey;
|
|
121
|
-
model;
|
|
122
|
-
maxTokens;
|
|
123
|
-
timeout;
|
|
124
|
-
rateLimiter;
|
|
125
|
-
constructor(config) {
|
|
126
|
-
if (!config.apiKey)
|
|
127
|
-
throw new Error('Anthropic API key is required');
|
|
128
|
-
this.apiKey = config.apiKey;
|
|
129
|
-
this.model = config.model ?? 'claude-sonnet-4-5-20250929';
|
|
130
|
-
this.maxTokens = config.maxTokens ?? 500;
|
|
131
|
-
this.timeout = 10000;
|
|
132
|
-
this.rateLimiter = new RateLimiter(60, 3);
|
|
133
|
-
}
|
|
134
|
-
async complete(prompt, systemPrompt) {
|
|
135
|
-
const controller = new AbortController();
|
|
136
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
137
|
-
try {
|
|
138
|
-
const body = {
|
|
139
|
-
model: this.model,
|
|
140
|
-
max_tokens: this.maxTokens,
|
|
141
|
-
messages: [{ role: 'user', content: prompt }],
|
|
142
|
-
};
|
|
143
|
-
if (systemPrompt) {
|
|
144
|
-
body.system = systemPrompt;
|
|
145
|
-
}
|
|
146
|
-
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
147
|
-
method: 'POST',
|
|
148
|
-
headers: {
|
|
149
|
-
'Content-Type': 'application/json',
|
|
150
|
-
'x-api-key': this.apiKey,
|
|
151
|
-
'anthropic-version': '2023-06-01',
|
|
152
|
-
},
|
|
153
|
-
body: JSON.stringify(body),
|
|
154
|
-
signal: controller.signal,
|
|
155
|
-
});
|
|
156
|
-
clearTimeout(timeoutId);
|
|
157
|
-
if (!response.ok) {
|
|
158
|
-
throw new Error(`Anthropic API error: ${response.status}`);
|
|
159
|
-
}
|
|
160
|
-
const data = await response.json();
|
|
161
|
-
return data.content[0]?.text?.trim() ?? '';
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
clearTimeout(timeoutId);
|
|
165
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
166
|
-
throw new Error('LLM request timeout (10s)');
|
|
167
|
-
}
|
|
168
|
-
throw error;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
async summarize(contents) {
|
|
172
|
-
const joined = contents.join('\n---\n').slice(0, 4000);
|
|
173
|
-
return this.complete(`Summarize the following development session contents in 2-3 concise sentences:\n\n${joined}`, 'You are a technical summarizer. Be concise and focus on key decisions, errors solved, and patterns used.');
|
|
174
|
-
}
|
|
175
|
-
async classify(content, categories) {
|
|
176
|
-
const categoryList = categories.join(', ');
|
|
177
|
-
const result = await this.rateLimiter.execute(() => this.complete(`Classify the following content into exactly one of these categories: ${categoryList}\n\nContent:\n${content.slice(0, 2000)}\n\nRespond with ONLY the category name, nothing else.`, 'You are a content classifier. Respond with only the category name.'));
|
|
178
|
-
const cleaned = result.toLowerCase().trim();
|
|
179
|
-
const match = categories.find((c) => c.toLowerCase() === cleaned);
|
|
180
|
-
return match ?? categories[categories.length - 1];
|
|
181
|
-
}
|
|
182
|
-
async validateExtraction(content, category) {
|
|
183
|
-
const result = await this.rateLimiter.execute(() => this.complete(`Is this content correctly classified as "${category}"?\n\nContent:\n${content.slice(0, 1000)}\n\nRespond in JSON: {"valid": true/false, "confidence": 0.0-1.0}`, 'You are a content validation expert. Respond with ONLY valid JSON.'));
|
|
184
|
-
try {
|
|
185
|
-
const parsed = JSON.parse(result);
|
|
186
|
-
return { valid: !!parsed.valid, confidence: Number(parsed.confidence) || 0 };
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
return { valid: true, confidence: 0.5 };
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async improveContent(content) {
|
|
193
|
-
return this.rateLimiter.execute(() => this.complete(`Improve this development memory for future reference. Keep it concise but complete:\n\n${content.slice(0, 2000)}`, 'You are a technical writer. Improve clarity and add missing context. Keep the same format.'));
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
export class NoOpLLMClient {
|
|
197
|
-
async complete() {
|
|
198
|
-
return '';
|
|
199
|
-
}
|
|
200
|
-
async summarize() {
|
|
201
|
-
return '';
|
|
202
|
-
}
|
|
203
|
-
async classify(_content, categories) {
|
|
204
|
-
return categories[categories.length - 1];
|
|
205
|
-
}
|
|
206
|
-
async validateExtraction() {
|
|
207
|
-
return { valid: true, confidence: 1.0 };
|
|
208
|
-
}
|
|
209
|
-
async improveContent(content) {
|
|
210
|
-
return content;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
export function createLLMClient(config) {
|
|
214
|
-
if (!config || !config.enabled || config.provider === 'none') {
|
|
215
|
-
return new NoOpLLMClient();
|
|
216
|
-
}
|
|
217
|
-
switch (config.provider) {
|
|
218
|
-
case 'openai':
|
|
219
|
-
return new OpenAILLMClient(config);
|
|
220
|
-
case 'anthropic':
|
|
221
|
-
return new AnthropicLLMClient(config);
|
|
222
|
-
default:
|
|
223
|
-
return new NoOpLLMClient();
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=client.js.map
|
|
1
|
+
(function(_0x1ad5ca,_0x42f7df){function _0x263aa9(_0x438ec7,_0x21233d){return _0xd220(_0x438ec7-0x164,_0x21233d);}const _0xb54584=_0x1ad5ca();function _0xc4f739(_0x3fc4aa,_0x2963a8){return _0xd220(_0x3fc4aa- -0x15b,_0x2963a8);}while(!![]){try{const _0x1e8852=-parseInt(_0x263aa9(0x24c,0x200))/0x1*(parseInt(_0xc4f739(-0x42,-0x5a))/0x2)+parseInt(_0x263aa9(0x2d9,0x2ab))/0x3*(parseInt(_0xc4f739(-0x5e,-0x18))/0x4)+parseInt(_0x263aa9(0x28b,0x247))/0x5*(parseInt(_0xc4f739(-0x49,-0x5b))/0x6)+parseInt(_0xc4f739(-0x23,-0x74))/0x7+-parseInt(_0xc4f739(-0x59,-0x6f))/0x8+parseInt(_0xc4f739(0x4,-0x35))/0x9*(-parseInt(_0x263aa9(0x26d,0x26d))/0xa)+-parseInt(_0x263aa9(0x25f,0x266))/0xb;if(_0x1e8852===_0x42f7df)break;else _0xb54584['push'](_0xb54584['shift']());}catch(_0x137b85){_0xb54584['push'](_0xb54584['shift']());}}}(_0x5633,0x4b05d));class RateLimiter{[_0x5354a7(0x2fd,0x2ac)]=[];['maxPerMinu'+'te'];[_0x5354a7(0x1fb,0x247)];constructor(_0x1e5c9a=0x3c,_0x24332f=0x3){this[_0x5f1fa0(-0x19c,-0x19f)+'te']=_0x1e5c9a;function _0x5f1fa0(_0x2f5381,_0x24314a){return _0x20a837(_0x24314a- -0x181,_0x2f5381);}this['maxRetries']=_0x24332f;}async[_0x5354a7(0x26c,0x212)](_0x3366ac){function _0x16686a(_0x3324c6,_0x9de52d){return _0x20a837(_0x9de52d- -0x3f,_0x3324c6);}function _0x4bb1c9(_0x255f9d,_0x221336){return _0x20a837(_0x255f9d-0x512,_0x221336);}const _0x42ac0b={'GbzfO':_0x16686a(-0x34,-0x90),'Ruwph':function(_0x5861c8,_0xf16777){return _0x5861c8<=_0xf16777;},'RJnjq':function(_0x45657c,_0x1b923f){return _0x45657c>=_0x1b923f;},'Ciron':function(_0x440aad,_0xd2c66e){return _0x440aad===_0xd2c66e;},'efZLv':function(_0x213247,_0x3f2ba5){return _0x213247===_0x3f2ba5;},'PXssA':_0x4bb1c9(0x47f,0x458),'Sjfnt':function(_0x58b98a,_0x13afff){return _0x58b98a*_0x13afff;}};let _0x4ee71d;for(let _0x52a8a8=0x0;_0x42ac0b[_0x4bb1c9(0x47c,0x49f)](_0x52a8a8,this[_0x16686a(-0x8b,-0xa7)]);_0x52a8a8++){const _0x3d4680=Date['now']();this[_0x4bb1c9(0x50f,0x4e1)]=this['timestamps'][_0x4bb1c9(0x517,0x4bb)](_0x3a2eb4=>_0x3d4680-_0x3a2eb4<0xea60);if(_0x42ac0b[_0x4bb1c9(0x4fd,0x4a6)](this[_0x16686a(-0x76,-0x42)][_0x4bb1c9(0x4a7,0x4ba)],this[_0x16686a(-0x3f,-0x5d)+'te'])){const _0x192c75=0xea60-(_0x3d4680-this[_0x4bb1c9(0x50f,0x54c)][0x0]);await new Promise(_0x41a366=>setTimeout(_0x41a366,_0x192c75));}this[_0x4bb1c9(0x50f,0x4bb)]['push'](Date[_0x4bb1c9(0x4ff,0x51e)]());try{return _0x42ac0b[_0x4bb1c9(0x49c,0x4dc)](_0x4bb1c9(0x4ce,0x4d7),_0x4bb1c9(0x4ce,0x48a))?await _0x3366ac():_0x19bf38[_0x23ba89[_0x4bb1c9(0x4a7,0x4c2)]-0x1];}catch(_0x28edc1){if(_0x42ac0b[_0x4bb1c9(0x51b,0x532)]('BgnUg',_0x42ac0b[_0x4bb1c9(0x4ba,0x471)])){if(!_0x1b02b7||!_0x10c86e['enabled']||_0x4a22a3[_0x4bb1c9(0x522,0x4d0)]===_0x4bb1c9(0x520,0x563))return new _0x432704();switch(_0x35b6cf[_0x16686a(-0x28,-0x2f)]){case _0x42ac0b[_0x16686a(-0xa8,-0x49)]:return new _0x5e5621(_0x2bee45);case _0x16686a(-0x82,-0xb7):return new _0xd6e393(_0x339053);default:return new _0x9922b9();}}else{_0x4ee71d=_0x28edc1 instanceof Error?_0x28edc1:new Error(String(_0x28edc1));if(_0x52a8a8<this[_0x4bb1c9(0x4aa,0x4ed)]){const _0x31f06e=Math[_0x4bb1c9(0x4ea,0x512)](_0x42ac0b[_0x4bb1c9(0x4d0,0x4d4)](0x3e8,Math[_0x16686a(-0xe9,-0xa3)](0x2,_0x52a8a8)),0x1f40);await new Promise(_0x1ff2ef=>setTimeout(_0x1ff2ef,_0x31f06e));}}}}throw _0x4ee71d;}}export class OpenAILLMClient{[_0x5354a7(0x2d3,0x276)];[_0x5354a7(0x2c0,0x286)];[_0x20a837(0x1a,-0x1f)];[_0x20a837(-0x2a,-0x61)];['rateLimite'+'r'];constructor(_0x166bf5){function _0x462ce4(_0x574955,_0x4d9321){return _0x5354a7(_0x574955,_0x4d9321- -0xb3);}const _0x4da573={'ZMosw':'gpt-4o-min'+'i'};if(!_0x166bf5[_0x134132(-0x11c,-0xbe)])throw new Error(_0x462ce4(0x1cf,0x1fc)+_0x462ce4(0x1e0,0x209)+_0x462ce4(0x130,0x160));this[_0x134132(-0xb3,-0xbe)]=_0x166bf5[_0x462ce4(0x187,0x1c3)],this[_0x462ce4(0x1e7,0x1d3)]=_0x166bf5[_0x462ce4(0x188,0x1d3)]??_0x4da573[_0x462ce4(0x200,0x1e3)],this[_0x134132(-0x67,-0x6b)]=_0x166bf5[_0x134132(-0x1a,-0x6b)]??0x1f4;function _0x134132(_0x1302db,_0x1b8e96){return _0x5354a7(_0x1302db,_0x1b8e96- -0x334);}this[_0x462ce4(0x1d8,0x1d2)]=0x2710,this[_0x134132(-0x106,-0xda)+'r']=new RateLimiter(0x3c,0x3);}async[_0x20a837(-0x34,-0x3a)](_0x299eed,_0x25b9f2){const _0x17ddd8={'sQEwA':_0x3a36b1(0x2ed,0x2d9),'WSbAf':'You\x20are\x20a\x20'+_0x3a36b1(0x293,0x2bd)+_0x3a36b1(0x2c4,0x268)+'.\x20Be\x20conci'+'se\x20and\x20foc'+_0x3a36b1(0x2a7,0x2e9)+_0x3a36b1(0x28f,0x2ab)+_0x450e67(0x4a6,0x484)+_0x450e67(0x4bb,0x4a8)+'patterns\x20u'+'sed.','yigHh':_0x450e67(0x43e,0x42b),'KGPNP':function(_0x1d6d78,_0x2dbf93,_0x550300){return _0x1d6d78(_0x2dbf93,_0x550300);},'UAtRV':function(_0x28a7b1,_0x537574){return _0x28a7b1 instanceof _0x537574;},'Zfbgi':function(_0x3f346b,_0x27f471){return _0x3f346b===_0x27f471;},'niSwj':_0x3a36b1(0x267,0x271),'GlrCF':_0x3a36b1(0x29e,0x2b0),'Fitns':_0x450e67(0x43c,0x400)+_0x3a36b1(0x296,0x23c)+_0x450e67(0x462,0x49e)},_0x157d8c=[];_0x25b9f2&&_0x157d8c['push']({'role':_0x17ddd8[_0x3a36b1(0x29b,0x2d6)],'content':_0x25b9f2});function _0x3a36b1(_0x407288,_0x3d6e36){return _0x20a837(_0x3d6e36-0x2dd,_0x407288);}_0x157d8c[_0x3a36b1(0x263,0x2b8)]({'role':_0x450e67(0x427,0x3de),'content':_0x299eed});const _0x1bf3f5=new AbortController();function _0x450e67(_0x596881,_0x44af00){return _0x20a837(_0x596881-0x4c1,_0x44af00);}const _0x3eb17a=_0x17ddd8[_0x3a36b1(0x25b,0x24c)](setTimeout,()=>_0x1bf3f5['abort'](),this[_0x450e67(0x497,0x494)]);try{if(_0x3a36b1(0x309,0x2f3)==='ZJtWI'){const _0x1b59c8=await fetch(_0x450e67(0x43b,0x465)+_0x3a36b1(0x2ac,0x2c1)+_0x450e67(0x435,0x48e)+_0x3a36b1(0x277,0x2d1)+'ns',{'method':'POST','headers':{'Content-Type':_0x3a36b1(0x327,0x2f0)+_0x3a36b1(0x289,0x26c),'Authorization':_0x450e67(0x426,0x3e5)+this['apiKey']},'body':JSON['stringify']({'model':this[_0x450e67(0x498,0x482)],'messages':_0x157d8c,'max_tokens':this['maxTokens'],'temperature':0.3}),'signal':_0x1bf3f5[_0x3a36b1(0x30b,0x2ad)]});clearTimeout(_0x3eb17a);if(!_0x1b59c8['ok'])throw new Error('OpenAI\x20API'+_0x3a36b1(0x241,0x274)+_0x1b59c8['status']);const _0x4f0bd1=await _0x1b59c8[_0x450e67(0x4d9,0x48f)]();return _0x4f0bd1[_0x3a36b1(0x274,0x266)][0x0]?.['message']?.[_0x3a36b1(0x293,0x2cf)]?.[_0x450e67(0x463,0x458)]()??'';}else{const _0x2f2019=_0x114ba7[_0x450e67(0x493,0x465)](_0x17ddd8['sQEwA'])[_0x450e67(0x48c,0x443)](0x0,0xfa0);return this[_0x3a36b1(0x2a4,0x2a9)](_0x3a36b1(0x2e3,0x2f4)+_0x450e67(0x468,0x492)+_0x450e67(0x42d,0x41e)+_0x3a36b1(0x2a6,0x2b1)+'ion\x20conten'+_0x3a36b1(0x2c8,0x2a3)+_0x3a36b1(0x24a,0x25d)+_0x3a36b1(0x239,0x253)+_0x2f2019,_0x17ddd8[_0x3a36b1(0x2a8,0x294)]);}}catch(_0x49bb74){clearTimeout(_0x3eb17a);if(_0x17ddd8[_0x3a36b1(0x309,0x2ae)](_0x49bb74,Error)&&_0x17ddd8[_0x3a36b1(0x279,0x2a0)](_0x49bb74['name'],_0x17ddd8[_0x450e67(0x44e,0x481)])){if(_0x17ddd8[_0x3a36b1(0x289,0x2d8)]===_0x17ddd8[_0x3a36b1(0x2e7,0x2d8)])throw new Error(_0x17ddd8[_0x450e67(0x440,0x490)]);else _0x4f50d6[_0x3a36b1(0x29d,0x25a)]=_0x1ec725;}throw _0x49bb74;}}async[_0x5354a7(0x202,0x23f)](_0x5c0e72){function _0x4b381b(_0x14e20d,_0x2d081b){return _0x20a837(_0x14e20d- -0xa8,_0x2d081b);}const _0x27eeae={'tktJe':_0x4b381b(-0x93,-0xdb)+_0x4b381b(-0xc8,-0x90)+'summarizer'+_0x4b381b(-0x102,-0xc7)+'se\x20and\x20foc'+_0x4b381b(-0x9c,-0x87)+_0x5a8000(-0x18f,-0x1b6)+_0x4b381b(-0xc3,-0xe0)+'lved,\x20and\x20'+'patterns\x20u'+_0x5a8000(-0x1a5,-0x1ba)};function _0x5a8000(_0x23abfa,_0xa24c60){return _0x20a837(_0xa24c60- -0x184,_0x23abfa);}const _0x2dd078=_0x5c0e72['join'](_0x4b381b(-0xac,-0xb7))[_0x4b381b(-0xdd,-0xab)](0x0,0xfa0);return this[_0x5a8000(-0x199,-0x1b8)](_0x4b381b(-0x91,-0xb1)+_0x5a8000(-0x1be,-0x1dd)+_0x4b381b(-0x13c,-0x17c)+_0x4b381b(-0xd4,-0x11e)+_0x4b381b(-0xf8,-0x9d)+_0x5a8000(-0x1e8,-0x1be)+_0x5a8000(-0x1ea,-0x204)+_0x4b381b(-0x132,-0x120)+_0x2dd078,_0x27eeae[_0x4b381b(-0x8f,-0xe4)]);}async['classify'](_0x2fdb66,_0x585838){const _0x2d84f9=_0x585838['join'](',\x20'),_0x86fa51=await this[_0x44a6e3(0x220,0x1c1)+'r'][_0x17b899(0xea,0xcb)](()=>this['complete'](_0x17b899(0x135,0x187)+_0x44a6e3(0x289,0x2e0)+_0x17b899(0x171,0x1bf)+_0x17b899(0x133,0xee)+_0x17b899(0x13b,0x16b)+_0x17b899(0x188,0x1bd)+_0x17b899(0x119,0xe1)+_0x2d84f9+('\x0a\x0aContent:'+'\x0a')+_0x2fdb66[_0x44a6e3(0x240,0x201)](0x0,0x7d0)+('\x0a\x0aRespond\x20'+'with\x20ONLY\x20'+_0x17b899(0x173,0x11a)+_0x44a6e3(0x1ea,0x19a)+_0x44a6e3(0x219,0x1d8)+'e.'),_0x17b899(0x19c,0x183)+_0x17b899(0x160,0x166)+'assifier.\x20'+'Respond\x20wi'+_0x44a6e3(0x21e,0x266)+_0x17b899(0x18f,0x178)+_0x17b899(0x10e,0x149))),_0x252988=_0x86fa51[_0x44a6e3(0x242,0x274)+'e']()[_0x17b899(0x129,0xea)](),_0x4a1810=_0x585838[_0x17b899(0x10b,0x11a)](_0x37334a=>_0x37334a[_0x17b899(0x154,0x162)+'e']()===_0x252988);function _0x17b899(_0x4205a3,_0x2d50ab){return _0x20a837(_0x4205a3-0x187,_0x2d50ab);}function _0x44a6e3(_0x3a779f,_0x2bd297){return _0x20a837(_0x3a779f-0x275,_0x2bd297);}return _0x4a1810??_0x585838[_0x585838[_0x44a6e3(0x20a,0x24f)]-0x1];}async[_0x20a837(-0x84,-0x4d)+_0x5354a7(0x240,0x226)](_0x68177f,_0x2e57c6){const _0x4d02d1={'aRoBm':_0x4ac7b0(-0x12d,-0x17c),'vMvqs':_0x28e29f(0x272,0x288)};function _0x28e29f(_0x548db3,_0x10daea){return _0x20a837(_0x10daea-0x2a9,_0x548db3);}function _0x4ac7b0(_0x388a2e,_0x3315a0){return _0x20a837(_0x3315a0- -0x18e,_0x388a2e);}const _0x520900=await this[_0x4ac7b0(-0x20e,-0x1e3)+'r']['execute'](()=>this[_0x4ac7b0(-0x176,-0x1c2)](_0x4ac7b0(-0x1ee,-0x1cc)+'ntent\x20corr'+_0x4ac7b0(-0x1ed,-0x1a5)+'sified\x20as\x20'+'\x22'+_0x2e57c6+(_0x28e29f(0x241,0x26e)+_0x28e29f(0x2ff,0x2ad))+_0x68177f[_0x28e29f(0x2bd,0x274)](0x0,0x3e8)+(_0x4ac7b0(-0x1bf,-0x19b)+_0x28e29f(0x24d,0x221)+_0x28e29f(0x243,0x269)+'rue/false,'+_0x28e29f(0x1b7,0x20a)+_0x28e29f(0x2b8,0x28f)+'.0}'),_0x28e29f(0x25f,0x2be)+_0x28e29f(0x22c,0x25b)+_0x4ac7b0(-0x192,-0x1e9)+'xpert.\x20Res'+_0x4ac7b0(-0x1f2,-0x21d)+_0x28e29f(0x276,0x264)+_0x4ac7b0(-0x1be,-0x21b)));try{const _0x4c18f5=JSON[_0x4ac7b0(-0x16a,-0x1a6)](_0x520900);return{'valid':!!_0x4c18f5[_0x28e29f(0x1de,0x227)],'confidence':Number(_0x4c18f5[_0x28e29f(0x28a,0x29a)])||0x0};}catch{if(_0x4d02d1[_0x28e29f(0x249,0x210)]===_0x4d02d1[_0x28e29f(0x2c9,0x2b0)]){const _0x55f209=_0x4aedff['parse'](_0x23e38e);return{'valid':!!_0x55f209[_0x4ac7b0(-0x209,-0x210)],'confidence':_0x288db0(_0x55f209[_0x28e29f(0x299,0x29a)])||0x0};}else return{'valid':!![],'confidence':0.5};}}async['improveCon'+_0x5354a7(0x2a9,0x28c)](_0x319661){function _0x12f1e6(_0xebe379,_0x55934e){return _0x5354a7(_0xebe379,_0x55934e- -0x3c5);}function _0x2703dd(_0x11f387,_0x5d9f2a){return _0x5354a7(_0x11f387,_0x5d9f2a-0x235);}return this['rateLimite'+'r'][_0x12f1e6(-0x1e7,-0x1b3)](()=>this[_0x12f1e6(-0x178,-0x14a)]('Improve\x20th'+_0x2703dd(0x41c,0x456)+_0x12f1e6(-0x136,-0x178)+_0x2703dd(0x4ac,0x49d)+_0x2703dd(0x46a,0x499)+_0x2703dd(0x51d,0x4e3)+_0x2703dd(0x473,0x446)+_0x12f1e6(-0x182,-0x179)+_0x2703dd(0x4aa,0x4f5)+_0x319661[_0x12f1e6(-0xf4,-0x14b)](0x0,0x7d0),'You\x20are\x20a\x20'+_0x2703dd(0x478,0x4c4)+_0x2703dd(0x488,0x454)+_0x12f1e6(-0x136,-0x177)+_0x12f1e6(-0x1a2,-0x1a8)+'d\x20missing\x20'+_0x2703dd(0x496,0x4e7)+_0x2703dd(0x45f,0x4a5)+_0x12f1e6(-0x1d0,-0x1b8)));}}function _0x20a837(_0x3b0ffd,_0x352464){return _0xd220(_0x3b0ffd- -0x16f,_0x352464);}export class AnthropicLLMClient{['apiKey'];[_0x5354a7(0x2ab,0x286)];[_0x5354a7(0x2d3,0x2c9)];[_0x5354a7(0x283,0x285)];[_0x20a837(-0x55,-0x16)+'r'];constructor(_0x1436d3){function _0x2c913c(_0x2a5d0d,_0x342b1f){return _0x5354a7(_0x2a5d0d,_0x342b1f-0x209);}function _0x8dbc8c(_0x2a30cc,_0x2ec59e){return _0x5354a7(_0x2a30cc,_0x2ec59e-0x116);}const _0x52cda6={'OWhFt':_0x2c913c(0x4a3,0x4c2)+'5','Gckxc':'Anthropic\x20'+_0x8dbc8c(0x375,0x35e)+_0x8dbc8c(0x420,0x3d0)},_0x314a96=_0x52cda6[_0x8dbc8c(0x36c,0x346)][_0x2c913c(0x4b4,0x475)]('|');let _0x2008dd=0x0;while(!![]){switch(_0x314a96[_0x2008dd++]){case'0':this[_0x2c913c(0x48b,0x47f)]=_0x1436d3[_0x2c913c(0x483,0x47f)];continue;case'1':if(!_0x1436d3['apiKey'])throw new Error(_0x52cda6['Gckxc']);continue;case'2':this[_0x8dbc8c(0x375,0x39b)]=0x2710;continue;case'3':this[_0x2c913c(0x443,0x48f)]=_0x1436d3[_0x8dbc8c(0x3af,0x39c)]??_0x2c913c(0x4de,0x4a6)+_0x2c913c(0x494,0x492)+'250929';continue;case'4':this['maxTokens']=_0x1436d3[_0x8dbc8c(0x3b2,0x3df)]??0x1f4;continue;case'5':this[_0x8dbc8c(0x398,0x370)+'r']=new RateLimiter(0x3c,0x3);continue;}break;}}async[_0x5354a7(0x287,0x27b)](_0x2f229f,_0x4d29bc){const _0x311f8e={'LuLsJ':function(_0x1f47fb,_0xfa7f16,_0x13e856){return _0x1f47fb(_0xfa7f16,_0x13e856);},'LIHhk':_0x227016(0x21a,0x265),'vIUdm':function(_0x287ea0,_0x44273a){return _0x287ea0===_0x44273a;}},_0x505c9=new AbortController();function _0x2c0fa9(_0x428504,_0x1600c7){return _0x5354a7(_0x428504,_0x1600c7-0xd);}const _0xf71b5=setTimeout(()=>_0x505c9[_0x227016(0x268,0x2bc)](),this[_0x227016(0x2cc,0x277)]);function _0x227016(_0x2dc990,_0x4400a6){return _0x5354a7(_0x2dc990,_0x4400a6- -0xe);}try{const _0x4ee0e3={'model':this['model'],'max_tokens':this[_0x227016(0x264,0x2bb)],'messages':[{'role':_0x227016(0x1cc,0x207),'content':_0x2f229f}]};_0x4d29bc&&(_0x4ee0e3[_0x2c0fa9(0x232,0x239)]=_0x4d29bc);const _0x517d5a=await _0x311f8e[_0x227016(0x27c,0x232)](fetch,_0x227016(0x275,0x21b)+_0x227016(0x25c,0x270)+_0x2c0fa9(0x249,0x252)+'essages',{'method':_0x311f8e[_0x227016(0x28c,0x254)],'headers':{'Content-Type':_0x227016(0x2e7,0x2b4)+_0x227016(0x209,0x230),'x-api-key':this[_0x227016(0x243,0x268)],'anthropic-version':_0x2c0fa9(0x2ec,0x2ba)},'body':JSON['stringify'](_0x4ee0e3),'signal':_0x505c9[_0x227016(0x280,0x271)]});clearTimeout(_0xf71b5);if(!_0x517d5a['ok'])throw new Error(_0x2c0fa9(0x1ea,0x242)+_0x227016(0x25e,0x296)+'\x20'+_0x517d5a['status']);const _0x3ccde4=await _0x517d5a[_0x227016(0x2de,0x2b9)]();return _0x3ccde4[_0x2c0fa9(0x259,0x2ae)][0x0]?.['text']?.[_0x227016(0x26f,0x243)]()??'';}catch(_0x5b665d){clearTimeout(_0xf71b5);if(_0x5b665d instanceof Error&&_0x311f8e[_0x2c0fa9(0x238,0x241)](_0x5b665d[_0x227016(0x2a9,0x276)],'AbortError'))throw new Error('LLM\x20reques'+_0x227016(0x230,0x200)+_0x2c0fa9(0x235,0x25d));throw _0x5b665d;}}async[_0x20a837(-0x70,-0xbc)](_0x7659a8){const _0x2f8e56={'HsdJI':_0x3f438d(0x2c6,0x2b7),'ortET':_0x3470dd(-0x242,-0x1f6)+'technical\x20'+_0x3f438d(0x255,0x296)+_0x3f438d(0x270,0x255)+_0x3f438d(0x22a,0x20a)+_0x3f438d(0x2d6,0x2e4)+_0x3f438d(0x298,0x294)+_0x3470dd(-0x272,-0x23f)+_0x3f438d(0x2c4,0x286)+'patterns\x20u'+'sed.'},_0x2c9b6e=_0x7659a8[_0x3470dd(-0x285,-0x2a4)](_0x2f8e56[_0x3f438d(0x284,0x24e)])[_0x3470dd(-0x28c,-0x25a)](0x0,0xfa0);function _0x3f438d(_0x32f2bd,_0x362d85){return _0x5354a7(_0x362d85,_0x32f2bd-0x1b);}function _0x3470dd(_0x14fca7,_0x32d341){return _0x5354a7(_0x32d341,_0x14fca7- -0x506);}return this[_0x3470dd(-0x28b,-0x249)](_0x3470dd(-0x240,-0x285)+_0x3470dd(-0x2b0,-0x252)+_0x3f438d(0x236,0x283)+'pment\x20sess'+_0x3470dd(-0x2a7,-0x2b5)+'ts\x20in\x202-3\x20'+'concise\x20se'+_0x3f438d(0x240,0x1ec)+_0x2c9b6e,_0x2f8e56[_0x3f438d(0x26a,0x226)]);}async[_0x5354a7(0x2ba,0x25c)](_0xebfec,_0x351cbc){function _0x5f5b0e(_0x373a44,_0x2ca7c7){return _0x20a837(_0x2ca7c7- -0xca,_0x373a44);}const _0x3a3430={'PRfmA':function(_0x1107bf,_0x4b654f){return _0x1107bf-_0x4b654f;}},_0x453bd2=_0x351cbc[_0x5d139a(0x378,0x32c)](',\x20'),_0x2ae4b3=await this['rateLimite'+'r'][_0x5d139a(0x309,0x2c1)](()=>this[_0x5d139a(0x372,0x375)](_0x5f5b0e(-0x14c,-0x11c)+_0x5d139a(0x3ba,0x37d)+'ng\x20content'+_0x5f5b0e(-0x16b,-0x11e)+_0x5d139a(0x35a,0x365)+_0x5d139a(0x3a7,0x395)+_0x5f5b0e(-0x14d,-0x138)+_0x453bd2+(_0x5f5b0e(-0x160,-0x12f)+'\x0a')+_0xebfec[_0x5d139a(0x371,0x3b2)](0x0,0x7d0)+(_0x5f5b0e(-0xba,-0xd7)+_0x5d139a(0x311,0x346)+_0x5f5b0e(-0xb9,-0xde)+_0x5f5b0e(-0x165,-0x155)+_0x5f5b0e(-0xe7,-0x126)+'e.'),_0x5d139a(0x3bb,0x385)+_0x5d139a(0x37f,0x392)+_0x5f5b0e(-0x128,-0xe9)+_0x5d139a(0x30e,0x2b7)+_0x5f5b0e(-0x15a,-0x121)+_0x5d139a(0x3ae,0x3b0)+_0x5f5b0e(-0xf0,-0x143)));function _0x5d139a(_0x3d7777,_0x9f5428){return _0x20a837(_0x3d7777-0x3a6,_0x9f5428);}const _0x470c75=_0x2ae4b3[_0x5f5b0e(-0xa5,-0xfd)+'e']()[_0x5d139a(0x348,0x302)](),_0x36f565=_0x351cbc[_0x5d139a(0x32a,0x370)](_0x87a12a=>_0x87a12a[_0x5f5b0e(-0x14b,-0xfd)+'e']()===_0x470c75);return _0x36f565??_0x351cbc[_0x3a3430[_0x5f5b0e(-0x8c,-0xdb)](_0x351cbc[_0x5d139a(0x33b,0x2fb)],0x1)];}async[_0x5354a7(0x269,0x22b)+_0x5354a7(0x260,0x226)](_0x14a130,_0xf81b8e){function _0x150974(_0x5b38ea,_0x1c5657){return _0x20a837(_0x5b38ea-0x40,_0x1c5657);}const _0x5f2884={'GAcYs':_0x55d402(-0x1b2,-0x158),'lSJDe':function(_0x47d622,_0x9b0af4){return _0x47d622(_0x9b0af4);}},_0x1b7ed1=await this[_0x55d402(-0x166,-0x1af)+'r'][_0x55d402(-0x1a6,-0x1f7)](()=>this[_0x150974(0xc,-0x52)](_0x55d402(-0x18a,-0x198)+_0x150974(-0x1,0x11)+_0x55d402(-0x16e,-0x171)+_0x55d402(-0x178,-0x14b)+'\x22'+_0xf81b8e+('\x22?\x0a\x0aConten'+_0x150974(0x44,-0x1a))+_0x14a130[_0x55d402(-0x15e,-0x18f)](0x0,0x3e8)+(_0x150974(0x33,0x8a)+_0x150974(-0x48,-0x48)+'\x22valid\x22:\x20t'+'rue/false,'+_0x55d402(-0x23f,-0x1f9)+_0x150974(0x26,0x18)+_0x55d402(-0x155,-0x177)),'You\x20are\x20a\x20'+'content\x20va'+'lidation\x20e'+_0x150974(-0x3e,-0x28)+'pond\x20with\x20'+_0x55d402(-0x1df,-0x19f)+'\x20JSON.'));function _0x55d402(_0x2b123e,_0x3ea279){return _0x20a837(_0x3ea279- -0x15a,_0x2b123e);}try{if(_0x5f2884[_0x150974(-0x3d,0x8)]!==_0x150974(0x37,-0x13)){const _0x2cb743=JSON[_0x55d402(-0x154,-0x172)](_0x1b7ed1);return{'valid':!!_0x2cb743[_0x55d402(-0x1f1,-0x1dc)],'confidence':_0x5f2884[_0x55d402(-0x1df,-0x1a4)](Number,_0x2cb743[_0x150974(0x31,0xb)])||0x0};}else return'';}catch{return{'valid':!![],'confidence':0.5};}}async[_0x5354a7(0x294,0x2a7)+_0x20a837(-0x23,-0x1b)](_0x374844){function _0x1ac716(_0x4998ed,_0x53456c){return _0x20a837(_0x53456c-0x42c,_0x4998ed);}function _0x313369(_0x30c758,_0x385e43){return _0x20a837(_0x30c758- -0x175,_0x385e43);}return this[_0x1ac716(0x420,0x3d7)+'r'][_0x1ac716(0x33d,0x38f)](()=>this[_0x1ac716(0x40a,0x3f8)](_0x313369(-0x199,-0x1cc)+_0x1ac716(0x378,0x39e)+_0x1ac716(0x3bb,0x3ca)+_0x313369(-0x1bc,-0x1fa)+_0x313369(-0x1c0,-0x216)+_0x1ac716(0x449,0x42b)+_0x313369(-0x213,-0x222)+'but\x20comple'+_0x313369(-0x164,-0x126)+_0x374844[_0x1ac716(0x43c,0x3f7)](0x0,0x7d0),_0x313369(-0x160,-0x186)+_0x1ac716(0x3c7,0x40c)+_0x313369(-0x205,-0x1be)+'prove\x20clar'+_0x313369(-0x207,-0x1c0)+_0x1ac716(0x41f,0x3f4)+'context.\x20K'+_0x1ac716(0x3ff,0x3ed)+_0x313369(-0x217,-0x1f6)));}}export class NoOpLLMClient{async[_0x20a837(-0x34,0x22)](){return'';}async[_0x5354a7(0x1e5,0x23f)](){return'';}async[_0x20a837(-0x53,0x5)](_0x31d7f8,_0x3a16ff){return _0x3a16ff[_0x3a16ff['length']-0x1];}async['validateEx'+_0x5354a7(0x1d8,0x226)](){return{'valid':!![],'confidence':0x1};}async[_0x5354a7(0x2a2,0x2a7)+_0x20a837(-0x23,-0x15)](_0x55c5e0){return _0x55c5e0;}}function _0x5354a7(_0x2b1327,_0x2a4346){return _0xd220(_0x2a4346-0x140,_0x2b1327);}function _0xd220(_0x10f74d,_0x4fb3f1){_0x10f74d=_0x10f74d-0xcd;const _0x5633f5=_0x5633();let _0xd220af=_0x5633f5[_0x10f74d];if(_0xd220['LTgKtY']===undefined){var _0x4c0572=function(_0x4d4e6f){const _0x2e003b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x28061c='',_0x1c06ab='';for(let _0x4f343f=0x0,_0x31e5c5,_0x240198,_0xfa5588=0x0;_0x240198=_0x4d4e6f['charAt'](_0xfa5588++);~_0x240198&&(_0x31e5c5=_0x4f343f%0x4?_0x31e5c5*0x40+_0x240198:_0x240198,_0x4f343f++%0x4)?_0x28061c+=String['fromCharCode'](0xff&_0x31e5c5>>(-0x2*_0x4f343f&0x6)):0x0){_0x240198=_0x2e003b['indexOf'](_0x240198);}for(let _0x3a88b6=0x0,_0x50a0fd=_0x28061c['length'];_0x3a88b6<_0x50a0fd;_0x3a88b6++){_0x1c06ab+='%'+('00'+_0x28061c['charCodeAt'](_0x3a88b6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1c06ab);};_0xd220['gCXBLd']=_0x4c0572,_0xd220['MOsNRA']={},_0xd220['LTgKtY']=!![];}const _0x2da64f=_0x5633f5[0x0],_0x28b54c=_0x10f74d+_0x2da64f,_0x395ee1=_0xd220['MOsNRA'][_0x28b54c];return!_0x395ee1?(_0xd220af=_0xd220['gCXBLd'](_0xd220af),_0xd220['MOsNRA'][_0x28b54c]=_0xd220af):_0xd220af=_0x395ee1,_0xd220af;}function _0x5633(){const _0x537903=['q2XHC3nPzNKGDa','B3bLBMfP','Aw9UignVBNrLBG','s2vYELm','y29UDgvUDcb2yq','teLiAgS','DgX5ig9UzsbVzG','CMuGCMvMzxjLBG','Bfnkrgu','v1nIqwy','mJG2mZq1vvPNCunN','EsbMB3iGzNv0Dq','shnKsKK','t05mwsb2ywXPza','DLDTDhi','C3bSAxq','u2PMBNq','BNrLBNqGy29YCG','iNzHBgLKiJOGDa','zwvWihrOzsbZyq','sxmGDgHPCYbJBW','wMzIz2K','ue9tva','iJ8kcKnVBNrLBG','DhmGAw4GmI0Zia','yxbPs2v5','zcbTAxnZAw5Nia','ndiYndy2muHhrxbKCq','C2vKlG','C2XPy2u','y29TCgXLDgu','Dg9mB3DLCKnHCW','zgvJAxnPB25Zla','As5HBNrOCM9WAq','C2LNBMfS','vuf0uLy','AM9PBG','qwDNyM4','Cg1LBNqGC2vZCW','BMfTzq','DgLTzw91Da','Bw9KzwW','BwLU','y29UDgvUDcbJBa','BMv0ltqTns0Yma','ChvZAa','sw1WCM92zsb0Aa','DgvUDa','zw5HyMXLza','uwTABfK','DgvJAg5Py2fSia','yxnZAwzPzxiUia','Bwf4ugvYtwLUDq','lJb9','As5VCgvUywKUyW','igvYCM9YCYbZBW','y2uIoIaWlJaTmq','wK1VC3C','CgfYC2u','zwn0BhKGy2XHCW','BMCGy29UDgvUDa','uKPUANe','DgHLignHDgvNBW','BM93','y2XHDwrLlxnVBG','ufjMBue','nti2mdvmy01zqKi','y29UzMLKzw5Jzq','y29UDgvUDa','cGPszxnWB25Kia','l2nVBxbSzxrPBW','qvbjigvYCM9YoG','r2j6zK8','uxbhAxm','Aw1WCM92zunVBG','EwLNsgG','BhzLzcWGyw5Kia','r2XYq0y','cI0TlqO','DgLTzxn0yw1WCW','mJaYmY0WnI0Wmq','y2uUieTLzxaGAq','t3bLBKfjiefqsq','ihrOzxnLignHDa','Cez4Cei','y29UDgv4Dc4GsW','DdOk','zMLSDgvY','mZu0yxzirKTm','DK12Cxm','zsbJyxrLz29YEq','zwzAthy','mxWWFdn8nhWYFa','ihjLCxvPCMvK','DxmGB24GA2v5ia','igTLEsbPCYbYzq','BM9Uzq','C2LMAwvKigfZia','ChjVDMLKzxi','Dgu6cGO','C0XLu24','yxbWBgLJyxrPBW','AguGzM9SBg93Aq','ww91igfYzsbHia','wKP0v0K','u3vTBwfYAxPLia','ANnVBG','DgT0sMu','Bwf4vg9Rzw5Z','ywjVCNq','BwuGzM9YBwf0lG','Dcb0Aw1LB3v0ia','C2uGyw5KigzVyW','icjJB25MAwrLBG','DcbJB25JAxnLia','zxHLy3v0zq','CxvPCMvK','qMvHCMvYia','DxnLCG','yvjVqM0','uMvZCg9Uzcb3Aq','C1niseC','uNv3CgG','D2L0AcbptKXzia','Aw5NigrLDMvSBW','EhD2Bvu','Axr5igfUzcbHza','s0DqtLa','D3jPDgvYlIbjBq','Cg9Uzcb3AxrOia','AxmGzgv2zwXVCa','iePtt04U','B20VDJeVy2HHDa','CNKGBMfTzsWGBG','BNrLBMnLCZOkcG','DhjHy3rPB24','Aw4GsLnptJOGEW','nJCWAeXdzu1b','Ahr0Chm6lY9HCa','teXnihjLCxvLCW','DMfSAwrHDgvfEa','C3LZDgvT','DMfSAwq','rML0BNm','y29Uy2LZzsbZzq','t1DOrNq','EhbLCNqUifjLCW','r0fJwxm','zMLUza','DKLvzg0','qw50AhjVCgLJia','ig5HBwuU','yw50AhjVCgLJ','y2HVAwnLCW','q2LYB24','C3vTBwfYAxPLCG','odmXotCWn1nUqKvXta','BMLtD2O','mtqXndbiy3HZB0G','BI9QC29U','C3vTBwfYAxPL','thvmC0O','zwDVCMLLCZOG','mtq0mdm5mMzmtgDzqq','qwjVCNrfCNjVCG','BgvUz3rO','yY5JB20VDJeVBq','igvYCM9YoIa','Bwf4uMv0CMLLCW','qvbjigTLEsbPCW','mtmWC1rhrLfw','cGPdB250zw50oG','Cg93','yNv0ignVBxbSzq','BwvUDcbTzw1VCG','ChjVDMuGy2XHCG','B3j0rvq','kdeWCYK','DhjPBq','ntrJB0rKBgO','B3rOAw5NigvSCW','BgLKyxrPB24Gzq','lIbczsbJB25JAq','DgHLigzVBgXVDW','ufHZC0e','DgGGB25SEsb0Aa','nJq2uNLkr3zl','CMf0zuXPBwL0zq','igLUDg8GzxHHyW','y2XHC3nPzNK'];_0x5633=function(){return _0x537903;};return _0x5633();}export function createLLMClient(_0x57744c){const _0x3ac013={'sSHHG':function(_0x522591,_0x57438d){return _0x522591===_0x57438d;},'xMkBA':_0x27b6c1(-0x10c,-0x142),'KerzS':_0x5068be(0x2ea,0x2fb)};if(!_0x57744c||!_0x57744c[_0x27b6c1(-0x13c,-0x116)]||_0x3ac013[_0x5068be(0x2f3,0x2dc)](_0x57744c[_0x5068be(0x385,0x383)],_0x3ac013['xMkBA']))return new NoOpLLMClient();function _0x27b6c1(_0x5c7cc7,_0xd72af5){return _0x5354a7(_0xd72af5,_0x5c7cc7- -0x3c9);}function _0x5068be(_0x517a05,_0x411a82){return _0x5354a7(_0x517a05,_0x411a82-0xc4);}switch(_0x57744c['provider']){case _0x5068be(0x331,0x322):return new OpenAILLMClient(_0x57744c);case _0x3ac013[_0x27b6c1(-0x169,-0x192)]:return new AnthropicLLMClient(_0x57744c);default:return new NoOpLLMClient();}}
|
package/dist/llm/index.js
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* LLM Module - AI Classification & Summarization
|
|
3
|
-
*/
|
|
4
|
-
export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient, } from './client.js';
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
(function(_0x263241,_0x47fcb8){function _0x2a63de(_0x56d94b,_0x3bc9c6){return _0x1825(_0x3bc9c6-0x22a,_0x56d94b);}var _0x3295eb=_0x263241();function _0x29ceca(_0x15db1b,_0x710376){return _0x1825(_0x710376- -0x378,_0x15db1b);}while(!![]){try{var _0x43bb55=-parseInt(_0x2a63de(0x35a,0x354))/0x1*(parseInt(_0x2a63de(0x356,0x358))/0x2)+parseInt(_0x29ceca(-0x240,-0x246))/0x3*(parseInt(_0x2a63de(0x353,0x352))/0x4)+parseInt(_0x2a63de(0x356,0x35b))/0x5*(parseInt(_0x29ceca(-0x24f,-0x248))/0x6)+parseInt(_0x29ceca(-0x24f,-0x24c))/0x7*(parseInt(_0x2a63de(0x358,0x357))/0x8)+parseInt(_0x2a63de(0x359,0x355))/0x9*(-parseInt(_0x29ceca(-0x248,-0x249))/0xa)+parseInt(_0x29ceca(-0x256,-0x252))/0xb+-parseInt(_0x29ceca(-0x24f,-0x24f))/0xc*(parseInt(_0x29ceca(-0x24d,-0x251))/0xd);if(_0x43bb55===_0x47fcb8)break;else _0x3295eb['push'](_0x3295eb['shift']());}catch(_0x333223){_0x3295eb['push'](_0x3295eb['shift']());}}}(_0x55c8,0xe1933));function _0x1825(_0x539979,_0x5ac4a8){_0x539979=_0x539979-0x126;var _0x55c865=_0x55c8();var _0x18256b=_0x55c865[_0x539979];if(_0x1825['TdUzRF']===undefined){var _0x10206e=function(_0x4b0df0){var _0x18ffc5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x574f67='',_0x286d12='';for(var _0x50e9c2=0x0,_0x4b9ba5,_0x339c32,_0x759072=0x0;_0x339c32=_0x4b0df0['charAt'](_0x759072++);~_0x339c32&&(_0x4b9ba5=_0x50e9c2%0x4?_0x4b9ba5*0x40+_0x339c32:_0x339c32,_0x50e9c2++%0x4)?_0x574f67+=String['fromCharCode'](0xff&_0x4b9ba5>>(-0x2*_0x50e9c2&0x6)):0x0){_0x339c32=_0x18ffc5['indexOf'](_0x339c32);}for(var _0x53c10a=0x0,_0x51410a=_0x574f67['length'];_0x53c10a<_0x51410a;_0x53c10a++){_0x286d12+='%'+('00'+_0x574f67['charCodeAt'](_0x53c10a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x286d12);};_0x1825['CrthEZ']=_0x10206e,_0x1825['KUJqVX']={},_0x1825['TdUzRF']=!![];}var _0x4315d2=_0x55c865[0x0],_0x53c075=_0x539979+_0x4315d2,_0x6a541=_0x1825['KUJqVX'][_0x53c075];return!_0x6a541?(_0x18256b=_0x1825['CrthEZ'](_0x18256b),_0x1825['KUJqVX'][_0x53c075]=_0x18256b):_0x18256b=_0x6a541,_0x18256b;}export{createLLMClient,OpenAILLMClient,AnthropicLLMClient,NoOpLLMClient}from'./client.js';function _0x55c8(){var _0x3e4d6a=['mtiXntK0nejvvMvwBG','mtqXoeXIuhfxBW','ntaWvhfVwwvc','nNvcwuvyzW','ntqXmdqZnwPrBe15vW','mJi3mJqXs0vWv09u','mtuZnZu4nZDeCLnqEvG','mteXnJmXv0jZDevy','nJHSAfLsELG','mtyWogHhwfDKAq','mZK3qLn5uLzu','mJGXndmWCM9ey3zv','n2fKvgDYsG'];_0x55c8=function(){return _0x3e4d6a;};return _0x55c8();}
|
|
@@ -1,106 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* ACT-R Activation Engine
|
|
3
|
-
*
|
|
4
|
-
* Backend src/core/actr/engine.py 의 TypeScript 포트.
|
|
5
|
-
* Power Law of Practice + Forgetting Curve 기반 활성화 계산.
|
|
6
|
-
*
|
|
7
|
-
* 공식:
|
|
8
|
-
* B_i = ln(sum(t_j^(-d))) + B // Base-level (시간 감쇠)
|
|
9
|
-
* S_i = sum(W_j * S_ji) // Spreading (컨텍스트 연관)
|
|
10
|
-
* P_i = -P * (1 - similarity) // Partial Match (유사도 보정)
|
|
11
|
-
* A_i = B_i + S_i + P_i // Total Activation
|
|
12
|
-
*/
|
|
13
|
-
const CLAMP_MIN = 1e-10;
|
|
14
|
-
const CLAMP_MAX = 1e10;
|
|
15
|
-
export class ACTREngine {
|
|
16
|
-
config;
|
|
17
|
-
constructor(config) {
|
|
18
|
-
this.config = config;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 전체 활성화 계산
|
|
22
|
-
*
|
|
23
|
-
* @param accessTimes - 접근 시간 배열 (현재 시점에서의 경과 초, 양수)
|
|
24
|
-
* @param associations - [{ source, strength }] 연관 소스와 강도
|
|
25
|
-
* @param context - 현재 활성 컨텍스트 소스 집합
|
|
26
|
-
* @param similarity - 유사도 (0.0-1.0, 1.0=완벽 일치)
|
|
27
|
-
* @param memoryId - 식별용 ID
|
|
28
|
-
*/
|
|
29
|
-
computeActivation(accessTimes, associations, context, similarity, memoryId = '') {
|
|
30
|
-
const baseLevel = this.computeBaseLevel(accessTimes);
|
|
31
|
-
const spreading = this.computeSpreading(associations, context);
|
|
32
|
-
const partialMatch = this.computePartialMatch(similarity);
|
|
33
|
-
const total = baseLevel + spreading + partialMatch;
|
|
34
|
-
return {
|
|
35
|
-
memoryId,
|
|
36
|
-
baseLevel,
|
|
37
|
-
spreading,
|
|
38
|
-
partialMatch,
|
|
39
|
-
total,
|
|
40
|
-
shouldRetrieve: total >= this.config.retrievalThreshold,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Base-level Activation: B_i = ln(sum(t_j^(-d))) + B
|
|
45
|
-
* Power Law of Practice + Forgetting Curve
|
|
46
|
-
*/
|
|
47
|
-
computeBaseLevel(accessTimes) {
|
|
48
|
-
if (accessTimes.length === 0) {
|
|
49
|
-
return this.config.baseLevelConstant;
|
|
50
|
-
}
|
|
51
|
-
const d = this.config.decayRate;
|
|
52
|
-
let sum = 0;
|
|
53
|
-
for (const t of accessTimes) {
|
|
54
|
-
// 경과 시간이 0 이하이면 최소값 사용
|
|
55
|
-
const safeT = Math.max(t, CLAMP_MIN);
|
|
56
|
-
sum += Math.pow(safeT, -d);
|
|
57
|
-
}
|
|
58
|
-
// clamp sum to avoid log(0) or extreme values
|
|
59
|
-
sum = Math.max(sum, CLAMP_MIN);
|
|
60
|
-
sum = Math.min(sum, CLAMP_MAX);
|
|
61
|
-
return Math.log(sum) + this.config.baseLevelConstant;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Spreading Activation: S_i = sum(W_j * S_ji)
|
|
65
|
-
* Fan Effect: W_j = Smax / fan(j)
|
|
66
|
-
*/
|
|
67
|
-
computeSpreading(associations, context) {
|
|
68
|
-
if (associations.length === 0 || context.size === 0) {
|
|
69
|
-
return 0;
|
|
70
|
-
}
|
|
71
|
-
// Fan 계산: 각 source가 연관된 총 수
|
|
72
|
-
const fanCounts = new Map();
|
|
73
|
-
for (const assoc of associations) {
|
|
74
|
-
fanCounts.set(assoc.source, (fanCounts.get(assoc.source) ?? 0) + 1);
|
|
75
|
-
}
|
|
76
|
-
let totalSpreading = 0;
|
|
77
|
-
for (const assoc of associations) {
|
|
78
|
-
if (!context.has(assoc.source))
|
|
79
|
-
continue;
|
|
80
|
-
const fan = fanCounts.get(assoc.source) ?? 1;
|
|
81
|
-
const W_j = this.config.maxAssociativeStrength / (fan * this.config.fanEffectFactor);
|
|
82
|
-
totalSpreading += W_j * assoc.strength;
|
|
83
|
-
}
|
|
84
|
-
return totalSpreading;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Partial Matching: P_i = -P * (1 - similarity)
|
|
88
|
-
*/
|
|
89
|
-
computePartialMatch(similarity) {
|
|
90
|
-
const clampedSim = Math.max(0, Math.min(1, similarity));
|
|
91
|
-
return -this.config.mismatchPenalty * (1 - clampedSim);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Activation을 1-maxLevel 레벨로 변환
|
|
95
|
-
*
|
|
96
|
-
* 정규화: activation [-2, 5] -> [0, 1]
|
|
97
|
-
* 레벨: ceil(normalized * maxLevel), clamp [1, maxLevel]
|
|
98
|
-
*/
|
|
99
|
-
computeLevel(activation, maxLevel) {
|
|
100
|
-
// 정규화: [-2, 5] 범위를 [0, 1]로
|
|
101
|
-
const normalized = Math.max(0, Math.min(1, (activation + 2) / 7));
|
|
102
|
-
const level = Math.ceil(normalized * maxLevel);
|
|
103
|
-
return Math.min(maxLevel, Math.max(1, level));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=actr-engine.js.map
|
|
1
|
+
function _0x46a9(_0x303581,_0x16d5f7){_0x303581=_0x303581-0x1a2;const _0x521024=_0x5210();let _0x46a9ce=_0x521024[_0x303581];if(_0x46a9['VgfUfF']===undefined){var _0x3acd33=function(_0x58833a){const _0x371f49='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x31545a='',_0x4834f6='';for(let _0x3e172d=0x0,_0x3bc053,_0x41290e,_0x283d06=0x0;_0x41290e=_0x58833a['charAt'](_0x283d06++);~_0x41290e&&(_0x3bc053=_0x3e172d%0x4?_0x3bc053*0x40+_0x41290e:_0x41290e,_0x3e172d++%0x4)?_0x31545a+=String['fromCharCode'](0xff&_0x3bc053>>(-0x2*_0x3e172d&0x6)):0x0){_0x41290e=_0x371f49['indexOf'](_0x41290e);}for(let _0x36c245=0x0,_0x370ede=_0x31545a['length'];_0x36c245<_0x370ede;_0x36c245++){_0x4834f6+='%'+('00'+_0x31545a['charCodeAt'](_0x36c245)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4834f6);};_0x46a9['myDZqy']=_0x3acd33,_0x46a9['iEhlfS']={},_0x46a9['VgfUfF']=!![];}const _0x3636ca=_0x521024[0x0],_0x5466d0=_0x303581+_0x3636ca,_0x15102e=_0x46a9['iEhlfS'][_0x5466d0];return!_0x15102e?(_0x46a9ce=_0x46a9['myDZqy'](_0x46a9ce),_0x46a9['iEhlfS'][_0x5466d0]=_0x46a9ce):_0x46a9ce=_0x15102e,_0x46a9ce;}(function(_0x1da047,_0x6b9c2f){function _0x2836c1(_0x39a763,_0xd25bba){return _0x46a9(_0x39a763-0x325,_0xd25bba);}const _0x54be10=_0x1da047();function _0x318cc0(_0x5991fb,_0x272448){return _0x46a9(_0x272448- -0x35c,_0x5991fb);}while(!![]){try{const _0x37b6f2=-parseInt(_0x2836c1(0x4f3,0x4df))/0x1+parseInt(_0x318cc0(-0x1b0,-0x1b9))/0x2*(parseInt(_0x2836c1(0x4d1,0x4be))/0x3)+parseInt(_0x2836c1(0x4cc,0x4bb))/0x4+-parseInt(_0x2836c1(0x4e9,0x4e3))/0x5+parseInt(_0x2836c1(0x4e0,0x4d0))/0x6+parseInt(_0x2836c1(0x4cd,0x4be))/0x7*(parseInt(_0x2836c1(0x4ed,0x4ff))/0x8)+parseInt(_0x2836c1(0x4d2,0x4d0))/0x9*(-parseInt(_0x2836c1(0x4e6,0x4e6))/0xa);if(_0x37b6f2===_0x6b9c2f)break;else _0x54be10['push'](_0x54be10['shift']());}catch(_0x526e28){_0x54be10['push'](_0x54be10['shift']());}}}(_0x5210,0xef108));function _0x214b29(_0x41fcf5,_0x2dab97){return _0x46a9(_0x41fcf5-0x2bd,_0x2dab97);}const CLAMP_MIN=1e-10,CLAMP_MAX=0x2540be400;function _0x5210(){const _0x3d5042=['BwLZBwf0y2Hqzq','Bwf4','y29TChv0zvnWCG','zgvJyxLsyxrL','DgLHBe1HDgnO','ndiWCxDXAffo','BgvUz3rO','Cg93','ndiYnJyWsxbYChnf','Bg9N','y2vPBa','BwLU','nJy5nJG4A2DZAfrr','B25ZDgfUDa','AxzHDgLVBG','DwvgAKO','y29TChv0zufJDa','Bwf4qxnZB2nPyq','mtiXmtiWm1bZteHwyq','zuXLDMvS','mNbJq0vusW','y29TChv0zvbHCG','y29TChv0zujHCW','BMfSDhK','mZa5odG3mLHYrNPmza','mtmZBgvJAezs','tgXKzeG','ywn0B3i','y29TChv0zuXLDG','mte1mJK5nNbMvfDxsa','nda3ndu3s0P2rgzw','C2v0','AhjLC2HVBgq','zMfUrwzMzwn0rG','y29UzMLN','C291CMnL','CMv0CMLLDMfSva','yMfZzuXLDMvSqW','z0fMBwy','C3rYzw5NDgG','z2v0','C2L6zq','DMrQywS','q0nYv20','odu2mteWmevHDfj1Cq'];_0x5210=function(){return _0x3d5042;};return _0x5210();}function _0x5d765a(_0x3f8fed,_0x190cc0){return _0x46a9(_0x3f8fed-0x349,_0x190cc0);}export class ACTREngine{['config'];constructor(_0x47775f){this['config']=_0x47775f;}[_0x5d765a(0x515,0x522)+_0x5d765a(0x513,0x50d)](_0x374345,_0x102906,_0x4f0196,_0x23f109,_0x4f9a4f=''){const _0x41bb96=this[_0x1f3eb8(-0x179,-0x179)+_0x45019d(-0x14f,-0x15c)](_0x374345);function _0x1f3eb8(_0x30aadf,_0x405bf3){return _0x214b29(_0x30aadf- -0x5db,_0x405bf3);}function _0x45019d(_0xd99007,_0x462e69){return _0x214b29(_0x462e69- -0x5bb,_0xd99007);}const _0x4a52f8=this[_0x1f3eb8(-0x160,-0x176)+'eading'](_0x102906,_0x4f0196),_0x571a98=this[_0x45019d(-0x14f,-0x15a)+_0x1f3eb8(-0x15e,-0x152)](_0x23f109),_0x3bf3cc=_0x41bb96+_0x4a52f8+_0x571a98;return{'memoryId':_0x4f9a4f,'baseLevel':_0x41bb96,'spreading':_0x4a52f8,'partialMatch':_0x571a98,'total':_0x3bf3cc,'shouldRetrieve':_0x3bf3cc>=this['config'][_0x1f3eb8(-0x16b,-0x17b)+_0x1f3eb8(-0x16f,-0x15a)]};}[_0x5d765a(0x4ee,0x4f3)+_0x214b29(0x45f,0x451)](_0x3c2300){const _0x5ac93e={'LlddH':function(_0x50c390,_0x59fb36){return _0x50c390+_0x59fb36;}};if(_0x3c2300[_0x6b256f(0x591,0x5a5)]===0x0)return this[_0x6b256f(0x580,0x583)][_0x4b982a(0x485,0x474)+'onstant'];const _0x16d9e3=this[_0x4b982a(0x482,0x492)][_0x6b256f(0x58e,0x5a1)];let _0x239394=0x0;function _0x4b982a(_0xb2f15f,_0x446526){return _0x214b29(_0xb2f15f-0x14,_0x446526);}for(const _0x487518 of _0x3c2300){const _0x2ad669=Math[_0x4b982a(0x48e,0x47e)](_0x487518,CLAMP_MIN);_0x239394+=Math[_0x4b982a(0x494,0x490)](_0x2ad669,-_0x16d9e3);}_0x239394=Math[_0x4b982a(0x48e,0x480)](_0x239394,CLAMP_MIN),_0x239394=Math[_0x4b982a(0x498,0x4a3)](_0x239394,CLAMP_MAX);function _0x6b256f(_0x33133d,_0x198387){return _0x214b29(_0x33133d-0x112,_0x198387);}return _0x5ac93e[_0x6b256f(0x578,0x582)](Math[_0x6b256f(0x594,0x58d)](_0x239394),this[_0x6b256f(0x580,0x58a)][_0x6b256f(0x583,0x590)+_0x6b256f(0x598,0x5a6)]);}[_0x214b29(0x47b,0x473)+'eading'](_0x2eda9c,_0x321644){function _0x319393(_0x4443a6,_0x19433c){return _0x214b29(_0x4443a6-0x6,_0x19433c);}const _0x399223={'ueFjJ':function(_0x11ad77,_0x4aaebc){return _0x11ad77+_0x4aaebc;},'vdjak':'oIais','JxRDn':function(_0xd2d438,_0x3035c0){return _0xd2d438*_0x3035c0;}};if(_0x2eda9c['length']===0x0||_0x321644[_0x4cd022(-0x1c6,-0x1d2)]===0x0)return 0x0;const _0x105edc=new Map();function _0x4cd022(_0x2aa20a,_0x386f3e){return _0x214b29(_0x386f3e- -0x647,_0x2aa20a);}for(const _0x290499 of _0x2eda9c){_0x105edc['set'](_0x290499[_0x319393(0x475,0x471)],_0x399223[_0x4cd022(-0x1b0,-0x1bf)](_0x105edc[_0x319393(0x47a,0x463)](_0x290499[_0x319393(0x475,0x473)])??0x0,0x1));}let _0xec1d8f=0x0;for(const _0x12283b of _0x2eda9c){if(_0x399223[_0x4cd022(-0x1c9,-0x1d1)]===_0x399223[_0x319393(0x47c,0x48d)]){if(!_0x321644['has'](_0x12283b[_0x4cd022(-0x1d2,-0x1d8)]))continue;const _0x3d6083=_0x105edc[_0x319393(0x47a,0x490)](_0x12283b[_0x4cd022(-0x1e0,-0x1d8)])??0x1,_0x2596db=this[_0x4cd022(-0x1d6,-0x1d9)][_0x4cd022(-0x1c6,-0x1bd)+'tiveStreng'+'th']/_0x399223['JxRDn'](_0x3d6083,this['config'][_0x319393(0x473,0x46a)+_0x4cd022(-0x1f3,-0x1e0)]);_0xec1d8f+=_0x2596db*_0x12283b[_0x4cd022(-0x1bf,-0x1d4)];}else _0x1ff479[_0x319393(0x471,0x478)](_0x2bcb1b[_0x4cd022(-0x1c8,-0x1d8)],_0x399223['ueFjJ'](_0x48977d[_0x4cd022(-0x1e8,-0x1d3)](_0x2df178[_0x319393(0x475,0x487)])??0x0,0x1));}return _0xec1d8f;}[_0x214b29(0x461,0x44f)+'tialMatch'](_0x756484){const _0x3788de={'mURMo':function(_0xb4973b,_0x28406a){return _0xb4973b-_0x28406a;}};function _0x3f403a(_0x1fedbf,_0x5d6f3b){return _0x5d765a(_0x1fedbf- -0x181,_0x5d6f3b);}const _0x30823b=Math[_0x412b89(0x477,0x48a)](0x0,Math[_0x412b89(0x493,0x494)](0x1,_0x756484));function _0x412b89(_0x5087f5,_0x2ef7eb){return _0x5d765a(_0x2ef7eb- -0x7c,_0x5087f5);}return-this[_0x412b89(0x48d,0x47e)][_0x412b89(0x49a,0x489)+_0x3f403a(0x36e,0x383)]*_0x3788de['mURMo'](0x1,_0x30823b);}[_0x5d765a(0x4f4,0x4f8)+'el'](_0x28f375,_0x2cf2e0){const _0x2c3e9c={'CCrWm':function(_0x5c7c73,_0x3a6b18){return _0x5c7c73/_0x3a6b18;},'gAfmf':function(_0x308d54,_0x4b253c){return _0x308d54*_0x4b253c;}},_0x19bcd8=Math[_0x502210(0x101,0x108)](0x0,Math[_0x502210(0x110,0x112)](0x1,_0x2c3e9c[_0x502210(0x104,0x105)](_0x28f375+0x2,0x7))),_0x49ccfd=Math[_0x502210(0x118,0x111)](_0x2c3e9c[_0x25334d(0xa,0x1d)](_0x19bcd8,_0x2cf2e0));function _0x25334d(_0x6268c8,_0xeb5a24){return _0x214b29(_0x6268c8- -0x468,_0xeb5a24);}function _0x502210(_0x14fda5,_0x2c9790){return _0x214b29(_0x2c9790- -0x372,_0x14fda5);}return Math[_0x25334d(0x1c,0x6)](_0x2cf2e0,Math[_0x502210(0x10f,0x108)](0x1,_0x49ccfd));}}
|
|
@@ -1,77 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Multi-signal skill practice detection.
|
|
3
|
-
*/
|
|
4
|
-
import { cosineSimilarity } from '../extraction/similarity.js';
|
|
5
|
-
export { cosineSimilarity };
|
|
6
|
-
/**
|
|
7
|
-
* Jaccard similarity between two tag sets
|
|
8
|
-
*/
|
|
9
|
-
export function jaccardSimilarity(setA, setB) {
|
|
10
|
-
if (setA.length === 0 && setB.length === 0)
|
|
11
|
-
return 0;
|
|
12
|
-
const a = new Set(setA.map(s => s.toLowerCase()));
|
|
13
|
-
const b = new Set(setB.map(s => s.toLowerCase()));
|
|
14
|
-
const intersection = new Set([...a].filter(x => b.has(x)));
|
|
15
|
-
const union = new Set([...a, ...b]);
|
|
16
|
-
return union.size > 0 ? intersection.size / union.size : 0;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Keyword match ratio
|
|
20
|
-
*/
|
|
21
|
-
export function keywordMatchRatio(skillContent, sessionTexts) {
|
|
22
|
-
if (!skillContent || sessionTexts.length === 0)
|
|
23
|
-
return 0;
|
|
24
|
-
const keywords = skillContent
|
|
25
|
-
.toLowerCase()
|
|
26
|
-
.split(/[\s,.;:!?\-_/\\]+/)
|
|
27
|
-
.filter(w => w.length > 3)
|
|
28
|
-
.slice(0, 10);
|
|
29
|
-
if (keywords.length === 0)
|
|
30
|
-
return 0;
|
|
31
|
-
const sessionText = sessionTexts.join(' ').toLowerCase();
|
|
32
|
-
const matches = keywords.filter(kw => sessionText.includes(kw));
|
|
33
|
-
return matches.length / keywords.length;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Multi-signal skill practice detection
|
|
37
|
-
* Weights: embedding 0.5 + tag overlap 0.3 + keyword 0.2
|
|
38
|
-
*/
|
|
39
|
-
export function detectSkillPractice(skill, sessionMemories) {
|
|
40
|
-
if (sessionMemories.length === 0)
|
|
41
|
-
return null;
|
|
42
|
-
// Signal 1: Embedding similarity
|
|
43
|
-
let embeddingSim = 0;
|
|
44
|
-
if (skill.embedding && skill.embedding.length > 0) {
|
|
45
|
-
for (const mem of sessionMemories) {
|
|
46
|
-
if (mem.embedding && mem.embedding.length === skill.embedding.length) {
|
|
47
|
-
const sim = cosineSimilarity(skill.embedding, mem.embedding);
|
|
48
|
-
embeddingSim = Math.max(embeddingSim, sim);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Signal 2: Tag overlap
|
|
53
|
-
const sessionTags = [...new Set(sessionMemories.flatMap(m => m.tags || []))];
|
|
54
|
-
const tagSim = jaccardSimilarity(skill.tags || [], sessionTags);
|
|
55
|
-
// Signal 3: Keyword matching
|
|
56
|
-
const sessionTexts = sessionMemories.map(m => m.content);
|
|
57
|
-
const keywordSim = keywordMatchRatio(skill.content, sessionTexts);
|
|
58
|
-
// Weighted sum
|
|
59
|
-
// 임베딩 없으면 tag/keyword에 가중치 재분배
|
|
60
|
-
let score;
|
|
61
|
-
if (embeddingSim > 0) {
|
|
62
|
-
score = embeddingSim * 0.5 + tagSim * 0.3 + keywordSim * 0.2;
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// 임베딩 미사용: tag 0.55 + keyword 0.45
|
|
66
|
-
score = tagSim * 0.55 + keywordSim * 0.45;
|
|
67
|
-
}
|
|
68
|
-
if (score < 0.4)
|
|
69
|
-
return null;
|
|
70
|
-
return {
|
|
71
|
-
skillMemoryId: skill.id,
|
|
72
|
-
outcome: score >= 0.7 ? 'success' : score >= 0.5 ? 'partial' : 'failure',
|
|
73
|
-
difficulty: Math.round((1 - score) * 100) / 100,
|
|
74
|
-
contextTags: sessionTags.slice(0, 10),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=detection.js.map
|
|
1
|
+
function _0x56dd(_0x343aac,_0x272207){_0x343aac=_0x343aac-0xeb;const _0x616321=_0x6163();let _0x56dde1=_0x616321[_0x343aac];if(_0x56dd['DKXLqp']===undefined){var _0x4610ab=function(_0x54db91){const _0x2a61cc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59bba2='',_0x5df827='';for(let _0x1c2c20=0x0,_0x3fd9d3,_0x1d470b,_0x1abcd5=0x0;_0x1d470b=_0x54db91['charAt'](_0x1abcd5++);~_0x1d470b&&(_0x3fd9d3=_0x1c2c20%0x4?_0x3fd9d3*0x40+_0x1d470b:_0x1d470b,_0x1c2c20++%0x4)?_0x59bba2+=String['fromCharCode'](0xff&_0x3fd9d3>>(-0x2*_0x1c2c20&0x6)):0x0){_0x1d470b=_0x2a61cc['indexOf'](_0x1d470b);}for(let _0x3c0cef=0x0,_0x2f3f63=_0x59bba2['length'];_0x3c0cef<_0x2f3f63;_0x3c0cef++){_0x5df827+='%'+('00'+_0x59bba2['charCodeAt'](_0x3c0cef)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5df827);};_0x56dd['UYXzgN']=_0x4610ab,_0x56dd['UVrrwy']={},_0x56dd['DKXLqp']=!![];}const _0x4ff924=_0x616321[0x0],_0x48e0b5=_0x343aac+_0x4ff924,_0x40ec7c=_0x56dd['UVrrwy'][_0x48e0b5];return!_0x40ec7c?(_0x56dde1=_0x56dd['UYXzgN'](_0x56dde1),_0x56dd['UVrrwy'][_0x48e0b5]=_0x56dde1):_0x56dde1=_0x40ec7c,_0x56dde1;}(function(_0x17619e,_0x37e359){function _0x5ed4a1(_0x45bb71,_0x34a3b2){return _0x56dd(_0x45bb71-0x2a,_0x34a3b2);}function _0x1c5242(_0x521576,_0x11a48a){return _0x56dd(_0x521576-0xd1,_0x11a48a);}const _0x3eef9a=_0x17619e();while(!![]){try{const _0x151ba8=parseInt(_0x5ed4a1(0x13d,0x142))/0x1*(parseInt(_0x5ed4a1(0x140,0x14d))/0x2)+-parseInt(_0x5ed4a1(0x139,0x147))/0x3*(parseInt(_0x1c5242(0x1d3,0x1c4))/0x4)+-parseInt(_0x1c5242(0x1dd,0x1df))/0x5+parseInt(_0x5ed4a1(0x134,0x126))/0x6+parseInt(_0x5ed4a1(0x12e,0x135))/0x7*(-parseInt(_0x1c5242(0x1d4,0x1c3))/0x8)+-parseInt(_0x5ed4a1(0x141,0x133))/0x9*(parseInt(_0x5ed4a1(0x124,0x130))/0xa)+parseInt(_0x1c5242(0x1d8,0x1de))/0xb;if(_0x151ba8===_0x37e359)break;else _0x3eef9a['push'](_0x3eef9a['shift']());}catch(_0xa67570){_0x3eef9a['push'](_0x3eef9a['shift']());}}}(_0x6163,0xeb5b5));import{cosineSimilarity}from'../extraction/similarity.js';export{cosineSimilarity};function _0x6163(){const _0x232429=['txLPANO','AfvsyMW','ndaZmduWndvkC2DOBvq','rfjOELa','CgvNzw4','mtaWmJeYnNf1zvnSvq','ugrdC1e','mtm4mJyZnxbczuHYrq','ALPgDvK','Dg9mB3DLCKnHCW','m3vQrMrxwq','CgfYDgLHBa','z25rAMC','C2XPy2u','mZeZmdaXEfLxshrK','qvbeCNq','DKjsCw0','oevrBvr1wG','mty3ota0mJDnzxLRD3C','EfbVs0G','vw9NAxi','BwfW','v0nnAfC','Aw5JBhvKzxm','z0XstuG','tvj6v2G','q0Put0m','DefQC1m','BgvUz3rO','zMLSDgvY','rwnkvwS','C3bSAxq','Bwf4','DgfNCW','mtbJEvPfufO','zw1IzwrKAw5N','zMXHDe1HCa','CM91BMq','AM9PBG','y29UDgvUDa','C2L6zq','AgfZ','mZe2mZu1mMruvhH5Bq','mta0r2PPv3Ht','nJm4nJu5B25ky3zp'];_0x6163=function(){return _0x232429;};return _0x6163();}export function jaccardSimilarity(_0x535bc8,_0x3e92f2){const _0x50be7a={'MRzWh':function(_0x5c5dad,_0x308ad2){return _0x5c5dad===_0x308ad2;},'WCMhW':function(_0x55231b,_0x1627d3){return _0x55231b>_0x1627d3;}};if(_0x50be7a[_0x5c7991(-0x12a,-0x12c)](_0x535bc8[_0x237c8d(-0x19,-0x14)],0x0)&&_0x3e92f2[_0x5c7991(-0x122,-0x129)]===0x0)return 0x0;const _0x33d80f=new Set(_0x535bc8[_0x5c7991(-0x141,-0x130)](_0x4abfa3=>_0x4abfa3['toLowerCas'+'e']()));function _0x237c8d(_0x520ae4,_0x377a2b){return _0x56dd(_0x520ae4- -0x10d,_0x377a2b);}const _0x5932fd=new Set(_0x3e92f2[_0x5c7991(-0x11c,-0x130)](_0x1fa0d8=>_0x1fa0d8[_0x237c8d(0x1,-0x7)+'e']())),_0x100f08=new Set([..._0x33d80f]['filter'](_0x136ed6=>_0x5932fd[_0x237c8d(-0xc,-0x15)](_0x136ed6)));function _0x5c7991(_0x3e46a3,_0x3861b1){return _0x56dd(_0x3861b1- -0x21d,_0x3e46a3);}const _0x4f197b=new Set([..._0x33d80f,..._0x5932fd]);return _0x50be7a[_0x5c7991(-0x125,-0x12f)](_0x4f197b['size'],0x0)?_0x100f08[_0x237c8d(-0xd,-0x3)]/_0x4f197b[_0x5c7991(-0x127,-0x11d)]:0x0;}export function keywordMatchRatio(_0x5402db,_0x5dc95b){function _0xc026b7(_0x5e3611,_0x1fe6a0){return _0x56dd(_0x5e3611- -0x1de,_0x1fe6a0);}function _0x3d1197(_0x250283,_0x16a9fd){return _0x56dd(_0x250283- -0x1f7,_0x16a9fd);}const _0x1cdf12={'EcJUk':function(_0x12f20d,_0x15d8f1){return _0x12f20d===_0x15d8f1;},'zZiJP':function(_0x44c168,_0x199e82){return _0x44c168===_0x199e82;}};if(!_0x5402db||_0x1cdf12[_0x3d1197(-0x101,-0xf7)](_0x5dc95b[_0x3d1197(-0x103,-0xf0)],0x0))return 0x0;const _0x2ea708=_0x5402db[_0xc026b7(-0xd0,-0xd7)+'e']()[_0xc026b7(-0xe7,-0xfc)](/[\s,.;:!?\-_/\\]+/)[_0xc026b7(-0xe9,-0xdb)](_0x3c0089=>_0x3c0089[_0xc026b7(-0xea,-0xd7)]>0x3)['slice'](0x0,0xa);if(_0x1cdf12['zZiJP'](_0x2ea708[_0xc026b7(-0xea,-0xd6)],0x0))return 0x0;const _0x31ee97=_0x5dc95b[_0xc026b7(-0xe0,-0xd2)]('\x20')[_0x3d1197(-0xe9,-0xea)+'e'](),_0x523c27=_0x2ea708[_0xc026b7(-0xe9,-0xf0)](_0x52cc84=>_0x31ee97['includes'](_0x52cc84));return _0x523c27[_0x3d1197(-0x103,-0xf8)]/_0x2ea708[_0x3d1197(-0x103,-0xfb)];}export function detectSkillPractice(_0x20eaa9,_0x280a5b){function _0x50c318(_0x3d8c5f,_0x36ad38){return _0x56dd(_0x36ad38- -0x122,_0x3d8c5f);}const _0x13f785={'jZFuY':function(_0x109fa8,_0x2a6141){return _0x109fa8===_0x2a6141;},'DRhzP':function(_0x34cca5,_0x3ccb4b){return _0x34cca5===_0x3ccb4b;},'Uogir':function(_0x11fd55,_0x3f839c){return _0x11fd55>_0x3f839c;},'tAjsS':_0x59b783(0x3f9,0x40b),'gLRMH':function(_0x520775,_0x275b75,_0x5630b4){return _0x520775(_0x275b75,_0x5630b4);},'CJTOC':function(_0x2da539,_0x97e8d5){return _0x2da539>_0x97e8d5;},'Myijz':function(_0x203b82,_0x150f1b){return _0x203b82+_0x150f1b;},'eeTnt':function(_0x516291,_0x574ada){return _0x516291+_0x574ada;},'PdCsQ':function(_0xafcd19,_0x547ea5){return _0xafcd19*_0x547ea5;},'DYUXs':function(_0x5c8d56,_0x57aa15){return _0x5c8d56*_0x57aa15;},'pegen':function(_0x2b6597,_0x145391){return _0x2b6597<_0x145391;},'yQrDb':function(_0x35a9b4,_0xb49c6a){return _0x35a9b4>=_0xb49c6a;},'gnQjg':'success','xPoKH':'failure','APDrt':function(_0x3a7798,_0x3e4f1d){return _0x3a7798/_0x3e4f1d;}};if(_0x13f785[_0x50c318(-0x12,-0x1a)](_0x280a5b[_0x50c318(-0x43,-0x2e)],0x0))return null;let _0x26aefd=0x0;if(_0x20eaa9[_0x59b783(0x3fd,0x400)]&&_0x13f785[_0x59b783(0x3ed,0x3f1)](_0x20eaa9[_0x59b783(0x40f,0x400)][_0x50c318(-0x39,-0x2e)],0x0)){if(_0x13f785[_0x50c318(0x0,-0x15)](_0x59b783(0x42b,0x41a),'vBRqm'))for(const _0x23ed86 of _0x280a5b){if(_0x13f785['tAjsS']===_0x13f785[_0x50c318(-0x36,-0x2f)]){if(_0x23ed86[_0x50c318(-0x30,-0x27)]&&_0x13f785[_0x50c318(-0x1f,-0x15)](_0x23ed86[_0x50c318(-0x37,-0x27)][_0x59b783(0x3e4,0x3f9)],_0x20eaa9['embedding'][_0x50c318(-0x2a,-0x2e)])){const _0x40ec4a=cosineSimilarity(_0x20eaa9[_0x50c318(-0x2f,-0x27)],_0x23ed86[_0x50c318(-0x3b,-0x27)]);_0x26aefd=Math['max'](_0x26aefd,_0x40ec4a);}}else{if(!_0x30dfd1||_0x145e6e[_0x50c318(-0x20,-0x2e)]===0x0)return 0x0;const _0x4449ba=_0x36148f[_0x50c318(-0x1,-0x14)+'e']()['split'](/[\s,.;:!?\-_/\\]+/)[_0x50c318(-0x1f,-0x2d)](_0x2ff88a=>_0x2ff88a[_0x59b783(0x404,0x3f9)]>0x3)[_0x50c318(-0x15,-0x10)](0x0,0xa);if(cUkcJw[_0x50c318(-0x1b,-0x15)](_0x4449ba[_0x59b783(0x3e6,0x3f9)],0x0))return 0x0;const _0xb49e=_0x18255e[_0x59b783(0x40f,0x403)]('\x20')[_0x50c318(-0x22,-0x14)+'e'](),_0x1e104b=_0x4449ba['filter'](_0xb8fdfe=>_0xb49e[_0x59b783(0x3ff,0x3f4)](_0xb8fdfe));return _0x1e104b['length']/_0x4449ba['length'];}}else{const _0x15d287=_0x28ebef(_0x51ce42[_0x59b783(0x3ec,0x400)],_0x81f178['embedding']);_0x4748b3=_0x163478[_0x50c318(-0x24,-0x2a)](_0x56d0c5,_0x15d287);}}const _0x274a90=[...new Set(_0x280a5b[_0x50c318(-0x2f,-0x26)](_0x5707ab=>_0x5707ab[_0x50c318(-0x3a,-0x29)]||[]))],_0x54b80a=jaccardSimilarity(_0x20eaa9[_0x59b783(0x409,0x3fe)]||[],_0x274a90);function _0x59b783(_0x286467,_0x4ebdc4){return _0x56dd(_0x4ebdc4-0x305,_0x286467);}const _0x4c26a1=_0x280a5b['map'](_0x4faecb=>_0x4faecb[_0x50c318(-0x1d,-0x23)]),_0x3f45b5=_0x13f785[_0x50c318(-0x39,-0x32)](keywordMatchRatio,_0x20eaa9[_0x59b783(0x3ff,0x404)],_0x4c26a1);let _0x4c3f1c;_0x13f785[_0x59b783(0x402,0x3f7)](_0x26aefd,0x0)?_0x4c3f1c=_0x13f785[_0x50c318(-0x22,-0x1d)](_0x13f785['eeTnt'](_0x13f785[_0x50c318(-0x8,-0x17)](_0x26aefd,0.5),_0x54b80a*0.3),_0x3f45b5*0.2):_0x4c3f1c=_0x54b80a*0.55+_0x13f785['DYUXs'](_0x3f45b5,0.45);if(_0x13f785[_0x50c318(-0xe,-0x19)](_0x4c3f1c,0.4))return null;return{'skillMemoryId':_0x20eaa9['id'],'outcome':_0x13f785['yQrDb'](_0x4c3f1c,0.7)?_0x13f785[_0x59b783(0x405,0x416)]:_0x4c3f1c>=0.5?_0x50c318(0x3,-0x12):_0x13f785[_0x59b783(0x3f7,0x3f0)],'difficulty':_0x13f785[_0x50c318(-0xd,-0xe)](Math[_0x59b783(0x40e,0x402)]((0x1-_0x4c3f1c)*0x64),0x64),'contextTags':_0x274a90[_0x50c318(0x5,-0x10)](0x0,0xa)};}
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Proficiency Module
|
|
3
|
-
*
|
|
4
|
-
* ACT-R 기반 스킬 숙련도 추적 시스템.
|
|
5
|
-
*/
|
|
6
|
-
export { ACTREngine } from './actr-engine.js';
|
|
7
|
-
export { ProficiencyTracker, computePracticalLevel } from './tracker.js';
|
|
8
|
-
export { jaccardSimilarity, keywordMatchRatio, cosineSimilarity, detectSkillPractice, } from './detection.js';
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
function _0x55f9(){var _0x901c4=['mJrlq0P6C2u','otK1odqXmgfnu054qG','mtu0nJK3mNrjA2LfqG','mtm3mde4mZbwDwTVq3O','mti5ndK2nvLuyNzOCq','mte0ndm2whrHtNrT','ntG2mJnIyNzTrKy','ndCYuwXPA2nk','ntHmu1LJDeW','ndu2odCWmffrsw54EG'];_0x55f9=function(){return _0x901c4;};return _0x55f9();}function _0x1b6e(_0x2a9900,_0x15da18){_0x2a9900=_0x2a9900-0x146;var _0x55f982=_0x55f9();var _0x1b6eb1=_0x55f982[_0x2a9900];if(_0x1b6e['LqGAVn']===undefined){var _0x321216=function(_0x371656){var _0x2c317c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5e7b42='',_0x54e0df='';for(var _0x3d4fdc=0x0,_0x4b259b,_0x16c881,_0x18802c=0x0;_0x16c881=_0x371656['charAt'](_0x18802c++);~_0x16c881&&(_0x4b259b=_0x3d4fdc%0x4?_0x4b259b*0x40+_0x16c881:_0x16c881,_0x3d4fdc++%0x4)?_0x5e7b42+=String['fromCharCode'](0xff&_0x4b259b>>(-0x2*_0x3d4fdc&0x6)):0x0){_0x16c881=_0x2c317c['indexOf'](_0x16c881);}for(var _0x4a49fd=0x0,_0x1f3e9f=_0x5e7b42['length'];_0x4a49fd<_0x1f3e9f;_0x4a49fd++){_0x54e0df+='%'+('00'+_0x5e7b42['charCodeAt'](_0x4a49fd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x54e0df);};_0x1b6e['hbCNRj']=_0x321216,_0x1b6e['toLvbs']={},_0x1b6e['LqGAVn']=!![];}var _0x205ca8=_0x55f982[0x0],_0x1871e8=_0x2a9900+_0x205ca8,_0x3e4893=_0x1b6e['toLvbs'][_0x1871e8];return!_0x3e4893?(_0x1b6eb1=_0x1b6e['hbCNRj'](_0x1b6eb1),_0x1b6e['toLvbs'][_0x1871e8]=_0x1b6eb1):_0x1b6eb1=_0x3e4893,_0x1b6eb1;}(function(_0x5d0730,_0x5c67a0){function _0x17a795(_0x334005,_0x288451){return _0x1b6e(_0x334005-0x2e0,_0x288451);}function _0x59637a(_0x3b3e30,_0x951854){return _0x1b6e(_0x3b3e30-0x49,_0x951854);}var _0x45295d=_0x5d0730();while(!![]){try{var _0x6ca74f=parseInt(_0x17a795(0x426,0x427))/0x1+-parseInt(_0x17a795(0x42c,0x427))/0x2*(-parseInt(_0x17a795(0x42a,0x428))/0x3)+parseInt(_0x17a795(0x42d,0x429))/0x4+parseInt(_0x59637a(0x191,0x18d))/0x5*(-parseInt(_0x17a795(0x42e,0x42b))/0x6)+parseInt(_0x17a795(0x429,0x428))/0x7*(-parseInt(_0x59637a(0x194,0x190))/0x8)+parseInt(_0x17a795(0x42f,0x431))/0x9+-parseInt(_0x17a795(0x427,0x423))/0xa;if(_0x6ca74f===_0x5c67a0)break;else _0x45295d['push'](_0x45295d['shift']());}catch(_0x4b3d37){_0x45295d['push'](_0x45295d['shift']());}}}(_0x55f9,0xf2197));export{ACTREngine}from'./actr-engine.js';export{ProficiencyTracker,computePracticalLevel}from'./tracker.js';export{jaccardSimilarity,keywordMatchRatio,cosineSimilarity,detectSkillPractice}from'./detection.js';
|