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,77 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* 메모리 content에서 .md 파일 참조를 감지합니다.
|
|
3
|
-
*/
|
|
4
|
-
import { existsSync } from 'fs';
|
|
5
|
-
import { resolve, isAbsolute } from 'path';
|
|
6
|
-
/**
|
|
7
|
-
* 메모리 content에서 .md 파일 참조 경로를 추출합니다.
|
|
8
|
-
*
|
|
9
|
-
* 감지 패턴:
|
|
10
|
-
* 1. Markdown 링크: [텍스트](path.md) — ./ prefix 유무 모두
|
|
11
|
-
* 2. 직접 경로: Source: MEMORY.md, 참조: reference_xxx.md
|
|
12
|
-
* 3. 괄호 안 경로: (./path.md) 또는 (path.md)
|
|
13
|
-
* 4. 절대 경로: /Users/.../file.md
|
|
14
|
-
* 5. 상대 경로: docs/plans/FILE.md, ../api/README.md
|
|
15
|
-
* 6. JSON filePath: {"filePath":"/path/to/file.md"}
|
|
16
|
-
*
|
|
17
|
-
* 파일 존재 여부를 확인하여 실제 존재하는 경로만 반환합니다.
|
|
18
|
-
*/
|
|
19
|
-
export function detectMdReferences(content, projectPath) {
|
|
20
|
-
const refs = new Set();
|
|
21
|
-
let match;
|
|
22
|
-
// 1. Markdown 링크: [텍스트](path.md) — ./ 있든 없든
|
|
23
|
-
const mdLinkPattern = /\[.*?\]\(([^)]+\.md)\)/g;
|
|
24
|
-
while ((match = mdLinkPattern.exec(content)) !== null) {
|
|
25
|
-
refs.add(match[1]);
|
|
26
|
-
}
|
|
27
|
-
// 2. 직접 경로: Source: MEMORY.md, 참조: reference_xxx.md
|
|
28
|
-
const directPattern = /(?:Source|참조|reference|파일|문서):\s*(\S+\.md)/gi;
|
|
29
|
-
while ((match = directPattern.exec(content)) !== null) {
|
|
30
|
-
refs.add(match[1]);
|
|
31
|
-
}
|
|
32
|
-
// 3. 괄호 안 경로: (path.md)
|
|
33
|
-
const parenPattern = /\(([^)\s]+\.md)\)/g;
|
|
34
|
-
while ((match = parenPattern.exec(content)) !== null) {
|
|
35
|
-
refs.add(match[1]);
|
|
36
|
-
}
|
|
37
|
-
// 4. 절대 경로 (projectPath 하위만): /Users/.../project/docs/file.md
|
|
38
|
-
const absolutePattern = new RegExp(escapeRegex(projectPath) + '/([^\\s"\'\\)]+\\.md)', 'g');
|
|
39
|
-
while ((match = absolutePattern.exec(content)) !== null) {
|
|
40
|
-
refs.add(match[1]); // projectPath 이후 상대경로
|
|
41
|
-
}
|
|
42
|
-
// 5. 상대 경로: docs/path/FILE.md, ../api/README.md (슬래시 포함)
|
|
43
|
-
const relativePathPattern = /(?:^|[\s"'(])(\.\.\/?[^\s"')]+\.md|[a-zA-Z0-9_-]+\/[^\s"')]+\.md)/gm;
|
|
44
|
-
while ((match = relativePathPattern.exec(content)) !== null) {
|
|
45
|
-
refs.add(match[1]);
|
|
46
|
-
}
|
|
47
|
-
// 6. JSON filePath: "filePath":"...path.md"
|
|
48
|
-
const jsonPathPattern = /"filePath"\s*:\s*"([^"]+\.md)"/g;
|
|
49
|
-
while ((match = jsonPathPattern.exec(content)) !== null) {
|
|
50
|
-
const fp = match[1];
|
|
51
|
-
// 프로젝트 경로 하위면 상대경로로 변환
|
|
52
|
-
if (fp.startsWith(projectPath)) {
|
|
53
|
-
refs.add(fp.slice(projectPath.length + 1));
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
refs.add(fp);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// 파일 존재 확인 — 실제 존재하는 파일만 반환
|
|
60
|
-
return Array.from(refs).filter(ref => {
|
|
61
|
-
let fullPath;
|
|
62
|
-
if (isAbsolute(ref)) {
|
|
63
|
-
fullPath = ref;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
fullPath = resolve(projectPath, ref);
|
|
67
|
-
}
|
|
68
|
-
// node_modules, .git, dist 제외
|
|
69
|
-
if (/[/\\](node_modules|\.git|dist)[/\\]/.test(fullPath))
|
|
70
|
-
return false;
|
|
71
|
-
return existsSync(fullPath);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
function escapeRegex(str) {
|
|
75
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=file-reference.js.map
|
|
1
|
+
(function(_0x136791,_0x3b6ada){function _0x39d721(_0x374e2f,_0x2dd4e1){return _0x442f(_0x374e2f- -0x159,_0x2dd4e1);}function _0x4f7dd0(_0x3e10b6,_0x5425b4){return _0x442f(_0x3e10b6-0x37b,_0x5425b4);}const _0x506bfc=_0x136791();while(!![]){try{const _0x332a8b=parseInt(_0x4f7dd0(0x4a1,0x4a8))/0x1*(parseInt(_0x4f7dd0(0x4af,0x4b1))/0x2)+-parseInt(_0x39d721(-0x35,-0x27))/0x3+parseInt(_0x4f7dd0(0x4a7,0x4aa))/0x4+parseInt(_0x39d721(-0x31,-0x2a))/0x5+parseInt(_0x4f7dd0(0x4a2,0x4a2))/0x6+parseInt(_0x4f7dd0(0x4ab,0x4a9))/0x7+-parseInt(_0x4f7dd0(0x4aa,0x4a4))/0x8;if(_0x332a8b===_0x3b6ada)break;else _0x506bfc['push'](_0x506bfc['shift']());}catch(_0xa46953){_0x506bfc['push'](_0x506bfc['shift']());}}}(_0xb1bf,0xad620));function _0x442f(_0x358675,_0x4adcc8){_0x358675=_0x358675-0x11c;const _0xb1bffd=_0xb1bf();let _0x442f75=_0xb1bffd[_0x358675];if(_0x442f['muqgaH']===undefined){var _0x4ab477=function(_0x36d095){const _0x33dcdb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x183240='',_0x1ce5f5='';for(let _0x2411e6=0x0,_0x11eceb,_0x8fb0,_0x2fe533=0x0;_0x8fb0=_0x36d095['charAt'](_0x2fe533++);~_0x8fb0&&(_0x11eceb=_0x2411e6%0x4?_0x11eceb*0x40+_0x8fb0:_0x8fb0,_0x2411e6++%0x4)?_0x183240+=String['fromCharCode'](0xff&_0x11eceb>>(-0x2*_0x2411e6&0x6)):0x0){_0x8fb0=_0x33dcdb['indexOf'](_0x8fb0);}for(let _0xde8c7f=0x0,_0x3b47cf=_0x183240['length'];_0xde8c7f<_0x3b47cf;_0xde8c7f++){_0x1ce5f5+='%'+('00'+_0x183240['charCodeAt'](_0xde8c7f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1ce5f5);};_0x442f['zDCTgp']=_0x4ab477,_0x442f['KltqPM']={},_0x442f['muqgaH']=!![];}const _0x2d3cf9=_0xb1bffd[0x0],_0x91419e=_0x358675+_0x2d3cf9,_0x383ca6=_0x442f['KltqPM'][_0x91419e];return!_0x383ca6?(_0x442f75=_0x442f['zDCTgp'](_0x442f75),_0x442f['KltqPM'][_0x91419e]=_0x442f75):_0x442f75=_0x383ca6,_0x442f75;}import{existsSync}from'fs';import{resolve,isAbsolute}from'path';function _0xb1bf(){const _0x5d4ccc=['ntK4ntm3mvbTDLbVzq','DunWEum','vu5pzMC','Ee14zvG','mtqXmZa4CgPYvNDc','tKPAAgy','C1fcBKi','zNjVBq','BgvUz3rO','tu1nD2G','C2XPy2u','wKjAuuq','CMvWBgfJzq','zxHLyW','rgnxuNu','mtyWmtuXn3jYtu9ZuW','xcqM','mxrwC1nlzW','mZuXmJeWsKXrCMHw','ntKZmJe5mgnxrg9ZBW','zMLSDgvY','ywrK','vhrHDLi','ndG2otG3nLPLseTtvG','wfrbEee','BKTysva','mtCXntmWnZjKAeLQyNu'];_0xb1bf=function(){return _0x5d4ccc;};return _0xb1bf();}export function detectMdReferences(_0x29c23a,_0x3c8a6e){const _0x114a7a={'ZBZQD':function(_0x2b5acf,_0x33fc51,_0x4aaeb5){return _0x2b5acf(_0x33fc51,_0x4aaeb5);},'MMMwh':_0x45bf56(0x1a1,0x1a7),'nKXIP':function(_0xd85a42,_0x3bc9c4){return _0xd85a42(_0x3bc9c4);},'NJZhf':function(_0x4b71e3,_0x252bb8){return _0x4b71e3!==_0x252bb8;},'uCpyC':'Vojxq','sQBnB':function(_0x22f6c6,_0x564eb9){return _0x22f6c6+_0x564eb9;},'fYUkS':'/([^\x5cs\x22\x27\x5c)'+']+\x5c.md)','NkMJA':_0x45bf56(0x1a6,0x19d)},_0x59126d=new Set();function _0x45bf56(_0x440a70,_0x1f0d78){return _0x442f(_0x1f0d78-0x7a,_0x440a70);}let _0x31956a;const _0x1ae7c0=/\[.*?\]\(([^)]+\.md)\)/g;while((_0x31956a=_0x1ae7c0[_0x45bf56(0x1a9,0x19c)](_0x29c23a))!==null){_0x59126d[_0x1a677c(0x4c0,0x4b7)](_0x31956a[0x1]);}const _0x2f9749=/(?:Source|참조|reference|파일|문서):\s*(\S+\.md)/gi;function _0x1a677c(_0x270717,_0x573b09){return _0x442f(_0x573b09-0x38d,_0x270717);}while((_0x31956a=_0x2f9749[_0x45bf56(0x191,0x19c)](_0x29c23a))!==null){_0x59126d[_0x45bf56(0x1b1,0x1a4)](_0x31956a[0x1]);}const _0x1c7bef=/\(([^)\s]+\.md)\)/g;while((_0x31956a=_0x1c7bef[_0x1a677c(0x4bb,0x4af)](_0x29c23a))!==null){_0x114a7a[_0x45bf56(0x1b6,0x1af)](_0x114a7a[_0x45bf56(0x1ae,0x1ab)],'Vojxq')?_0x1cd445=_0x11394a:_0x59126d[_0x45bf56(0x1ab,0x1a4)](_0x31956a[0x1]);}const _0x572095=new RegExp(_0x114a7a[_0x45bf56(0x1aa,0x1b0)](escapeRegex(_0x3c8a6e),_0x114a7a['fYUkS']),'g');while((_0x31956a=_0x572095[_0x45bf56(0x1a2,0x19c)](_0x29c23a))!==null){_0x59126d[_0x45bf56(0x1a5,0x1a4)](_0x31956a[0x1]);}const _0x2edf3e=/(?:^|[\s"'(])(\.\.\/?[^\s"')]+\.md|[a-zA-Z0-9_-]+\/[^\s"')]+\.md)/gm;while((_0x31956a=_0x2edf3e[_0x1a677c(0x4b5,0x4af)](_0x29c23a))!==null){_0x59126d[_0x1a677c(0x4b2,0x4b7)](_0x31956a[0x1]);}const _0x533c1f=/"filePath"\s*:\s*"([^"]+\.md)"/g;while(_0x114a7a['NJZhf'](_0x31956a=_0x533c1f['exec'](_0x29c23a),null)){const _0x2259eb=_0x31956a[0x1];_0x2259eb['startsWith'](_0x3c8a6e)?_0x45bf56(0x1b7,0x1ac)===_0x1a677c(0x4cd,0x4c0)?_0x299899[_0x1a677c(0x4aa,0x4b7)](_0xa1f569[0x1]):_0x59126d[_0x1a677c(0x4b8,0x4b7)](_0x2259eb[_0x1a677c(0x4af,0x4ac)](_0x3c8a6e[_0x45bf56(0x194,0x197)]+0x1)):_0x114a7a['NkMJA']!==_0x114a7a['NkMJA']?_0x3cf77d[_0x45bf56(0x1aa,0x1a4)](_0x3fd050[0x1]):_0x59126d[_0x1a677c(0x4af,0x4b7)](_0x2259eb);}return Array[_0x45bf56(0x1a2,0x196)](_0x59126d)[_0x45bf56(0x1a9,0x1a3)](_0x4e8d41=>{const _0x3d2337={'TtavR':function(_0x37f8da,_0x5a58fa,_0x5c23c5){function _0x30a23a(_0x445136,_0x360583){return _0x442f(_0x445136-0xfe,_0x360583);}return _0x114a7a[_0x30a23a(0x21e,0x218)](_0x37f8da,_0x5a58fa,_0x5c23c5);}};let _0x57c619;isAbsolute(_0x4e8d41)?_0x114a7a[_0x53969f(0x2c9,0x2c7)]===_0x114a7a[_0x53969f(0x2d0,0x2c7)]?_0x57c619=_0x4e8d41:_0x3db1d3=_0x3d2337[_0x110940(0x197,0x19f)](_0x7cc35,_0x4e7c7a,_0x2803e2):_0x57c619=resolve(_0x3c8a6e,_0x4e8d41);if(/[/\\](node_modules|\.git|dist)[/\\]/['test'](_0x57c619))return![];function _0x110940(_0x5524c9,_0x3f8c3d){return _0x1a677c(_0x5524c9,_0x3f8c3d- -0x319);}function _0x53969f(_0x4f3319,_0x26340d){return _0x1a677c(_0x4f3319,_0x26340d- -0x1e4);}return _0x114a7a[_0x110940(0x197,0x1a2)](existsSync,_0x57c619);});}function escapeRegex(_0x29048b){function _0x529b1e(_0x43d649,_0xbe956c){return _0x442f(_0x43d649- -0xbe,_0xbe956c);}function _0x4a2f5c(_0x20dc35,_0x5b34ff){return _0x442f(_0x20dc35- -0x26a,_0x5b34ff);}return _0x29048b[_0x4a2f5c(-0x149,-0x14f)](/[.*+?^${}()|[\]\\]/g,_0x4a2f5c(-0x145,-0x14b));}
|
|
@@ -1,86 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Sensitive Information Filter
|
|
3
|
-
*
|
|
4
|
-
* 메모리 콘텐츠에서 민감 정보를 탐지하고 마스킹합니다.
|
|
5
|
-
*/
|
|
6
|
-
import { SENSITIVE_PATTERNS } from '../types/index.js';
|
|
7
|
-
// WARNING: PATTERN_LABELS와 SENSITIVE_PATTERNS(types/index.ts)의 인덱스는 반드시 동기화되어야 함.
|
|
8
|
-
// SENSITIVE_PATTERNS에 패턴을 추가/삭제할 때 이 배열도 동일한 순서로 수정 필수.
|
|
9
|
-
// 순서 불일치 시 잘못된 레이블로 마스킹되어 디버깅이 어려워짐.
|
|
10
|
-
const PATTERN_LABELS = [
|
|
11
|
-
// --- 구체적 패턴 우선 (Cloud Provider Keys) ---
|
|
12
|
-
'AWS_ACCESS_KEY',
|
|
13
|
-
'AWS_SECRET_KEY',
|
|
14
|
-
'GOOGLE_API_KEY',
|
|
15
|
-
'AZURE_KEY',
|
|
16
|
-
// --- API Keys & Secrets (기존 8개 유지) ---
|
|
17
|
-
'OPENAI_KEY',
|
|
18
|
-
'STRIPE_KEY',
|
|
19
|
-
'GITHUB_TOKEN',
|
|
20
|
-
'API_KEY',
|
|
21
|
-
'SECRET',
|
|
22
|
-
'BEARER_TOKEN',
|
|
23
|
-
'EMAIL',
|
|
24
|
-
'PRIVATE_KEY_RSA',
|
|
25
|
-
// --- Service Tokens ---
|
|
26
|
-
'SLACK_TOKEN',
|
|
27
|
-
'DISCORD_TOKEN',
|
|
28
|
-
'NPM_TOKEN',
|
|
29
|
-
'PYPI_TOKEN',
|
|
30
|
-
// --- Database / Connection ---
|
|
31
|
-
'DB_CONNECTION',
|
|
32
|
-
'DB_ENV_VAR',
|
|
33
|
-
// --- SSH / Certificates ---
|
|
34
|
-
'PRIVATE_KEY_OTHER',
|
|
35
|
-
'CERTIFICATE',
|
|
36
|
-
// --- JWT / Session ---
|
|
37
|
-
'JWT_TOKEN',
|
|
38
|
-
'REFRESH_TOKEN',
|
|
39
|
-
// --- Personal Info (Korean) ---
|
|
40
|
-
'KOREAN_SSN',
|
|
41
|
-
'KOREAN_BRN',
|
|
42
|
-
];
|
|
43
|
-
/**
|
|
44
|
-
* 콘텐츠에서 민감 정보를 [REDACTED_<type>]로 치환
|
|
45
|
-
*/
|
|
46
|
-
export function filterSensitiveInfo(content) {
|
|
47
|
-
let filtered = content;
|
|
48
|
-
let matchCount = 0;
|
|
49
|
-
for (let i = 0; i < SENSITIVE_PATTERNS.length; i++) {
|
|
50
|
-
const pattern = new RegExp(SENSITIVE_PATTERNS[i].source, SENSITIVE_PATTERNS[i].flags);
|
|
51
|
-
const label = PATTERN_LABELS[i] ?? 'SENSITIVE';
|
|
52
|
-
const matches = filtered.match(pattern);
|
|
53
|
-
if (matches) {
|
|
54
|
-
matchCount += matches.length;
|
|
55
|
-
filtered = filtered.replace(pattern, `[REDACTED_${label}]`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return { filtered, matchCount };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 파일 경로가 민감한 패턴에 해당하는지 검사
|
|
62
|
-
*/
|
|
63
|
-
export function isSensitivePath(filePath, excludePatterns) {
|
|
64
|
-
const fileName = filePath.split('/').pop() ?? filePath;
|
|
65
|
-
for (const pattern of excludePatterns) {
|
|
66
|
-
if (pattern.startsWith('*')) {
|
|
67
|
-
// *.key, *.pem 등 확장자 매칭
|
|
68
|
-
const ext = pattern.slice(1); // .key, .pem
|
|
69
|
-
if (fileName.endsWith(ext))
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
else if (pattern.endsWith('*')) {
|
|
73
|
-
// sk-*, sk_live_* 등 접두사 매칭
|
|
74
|
-
const prefix = pattern.slice(0, -1);
|
|
75
|
-
if (fileName.startsWith(prefix))
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
// .env, credentials.json 등 정확 매칭
|
|
80
|
-
if (fileName === pattern)
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=filter.js.map
|
|
1
|
+
(function(_0x25f203,_0x2e577f){function _0x3d94cf(_0x4fbdd8,_0xc5a50){return _0x6598(_0xc5a50-0x3d0,_0x4fbdd8);}function _0x366738(_0x2c143f,_0x7f78d2){return _0x6598(_0x2c143f-0x88,_0x7f78d2);}const _0xb3fc36=_0x25f203();while(!![]){try{const _0x644193=parseInt(_0x366738(0x289,0x286))/0x1+parseInt(_0x3d94cf(0x5c4,0x5b6))/0x2+parseInt(_0x3d94cf(0x5bd,0x5c4))/0x3*(-parseInt(_0x3d94cf(0x5ca,0x5c8))/0x4)+-parseInt(_0x366738(0x26b,0x25e))/0x5*(-parseInt(_0x3d94cf(0x5e1,0x5ce))/0x6)+parseInt(_0x3d94cf(0x5cf,0x5c7))/0x7+parseInt(_0x3d94cf(0x5da,0x5c5))/0x8+-parseInt(_0x3d94cf(0x5ee,0x5d9))/0x9*(parseInt(_0x366738(0x288,0x290))/0xa);if(_0x644193===_0x2e577f)break;else _0xb3fc36['push'](_0xb3fc36['shift']());}catch(_0x5a61ac){_0xb3fc36['push'](_0xb3fc36['shift']());}}}(_0x2d49,0x966b7));function _0x6598(_0x12b84b,_0x3e4cbb){_0x12b84b=_0x12b84b-0x1df;const _0x2d49ad=_0x2d49();let _0x65981e=_0x2d49ad[_0x12b84b];if(_0x6598['bsgpwJ']===undefined){var _0x3d5ede=function(_0x44d52a){const _0x418287='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2275d1='',_0x12a382='';for(let _0x4280e0=0x0,_0x63e4e1,_0x243655,_0x5d9ab9=0x0;_0x243655=_0x44d52a['charAt'](_0x5d9ab9++);~_0x243655&&(_0x63e4e1=_0x4280e0%0x4?_0x63e4e1*0x40+_0x243655:_0x243655,_0x4280e0++%0x4)?_0x2275d1+=String['fromCharCode'](0xff&_0x63e4e1>>(-0x2*_0x4280e0&0x6)):0x0){_0x243655=_0x418287['indexOf'](_0x243655);}for(let _0x36b888=0x0,_0x1d0ee8=_0x2275d1['length'];_0x36b888<_0x1d0ee8;_0x36b888++){_0x12a382+='%'+('00'+_0x2275d1['charCodeAt'](_0x36b888)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x12a382);};_0x6598['EnHRuB']=_0x3d5ede,_0x6598['dtRWpx']={},_0x6598['bsgpwJ']=!![];}const _0x4b9c03=_0x2d49ad[0x0],_0x3ac7d6=_0x12b84b+_0x4b9c03,_0x2cab8e=_0x6598['dtRWpx'][_0x3ac7d6];return!_0x2cab8e?(_0x65981e=_0x6598['EnHRuB'](_0x65981e),_0x6598['dtRWpx'][_0x3ac7d6]=_0x65981e):_0x65981e=_0x2cab8e,_0x65981e;}import{SENSITIVE_PATTERNS}from'../types/index.js';function _0x2d49(){const _0x158a2c=['qvDtx0fdq0vtuW','r09pr0Xfx0fqsq','C2XPy2u','qvPvuKvFs0vz','r0Lusfvcx1rpsW','ufjjvKfurv9lrq','u0Xbq0TFve9lrq','zMXHz3m','rejFq09otKvdva','u0vou0Lusvzf','qvbjx0Tfwq','u1rssvbfx0Tfwq','nNnxufrTCa','nZaZmtiYngDTtMjVBa','reLtq09srf9utW','ntu5mJKWmKDZr2D4zG','mty1nZG1mNbPtMTZDW','qujgs2C','uK5Nq0W','C3rHCNrZv2L0Aa','q0vsveLgsunbva','uKvguKvtsf9utW','mZaZnZG0og1orKDewa','BgvUz3rO','mJmYmJeYnZbiB1LyA1q','mtiWndu5s0Xvs3f3','s09srufox0jstG','C291CMnL','qKvbuKvsx1rpsW','Be13EKy','tLbnx1rps0vo','qvDtx1nfq1jfva','w1jfrefdvevexW','ovrXENfWra','CLfPvwG','wv9pveHfuG','x0Tfwq','CMvWBgfJzq','ru1bsuW','mtbpqwDfChi','Cg9W','t1bftKfjx0Tfwq','mtKXmJqXnLrmvLfAqW','zw5KC1DPDgG'];_0x2d49=function(){return _0x158a2c;};return _0x2d49();}const PATTERN_LABELS=[_0x21f42b(0x15b,0x168)+_0x21f42b(0x153,0x142),_0x7a71ae(-0x1b2,-0x1ad)+_0x21f42b(0x153,0x162),_0x21f42b(0x15c,0x154)+_0x21f42b(0x153,0x169),_0x7a71ae(-0x1ce,-0x1e0),_0x21f42b(0x158,0x154),_0x7a71ae(-0x1c6,-0x1b3),_0x21f42b(0x15f,0x160)+'EN',_0x7a71ae(-0x1c7,-0x1b1),'SECRET',_0x7a71ae(-0x1b5,-0x1ab)+'EN',_0x21f42b(0x155,0x154),_0x7a71ae(-0x1cc,-0x1cb)+'Y_RSA',_0x21f42b(0x161,0x158)+'N',_0x21f42b(0x169,0x178)+'KEN',_0x7a71ae(-0x1b3,-0x1ab),'PYPI_TOKEN',_0x7a71ae(-0x1c9,-0x1b9)+'ION','DB_ENV_VAR',_0x7a71ae(-0x1cc,-0x1dd)+_0x7a71ae(-0x1da,-0x1e9),_0x7a71ae(-0x1bd,-0x1d2)+'E','JWT_TOKEN',_0x21f42b(0x170,0x16c)+'KEN','KOREAN_SSN',_0x21f42b(0x175,0x18a)];export function filterSensitiveInfo(_0x3fa70b){const _0x38926b={'ABFKg':function(_0x4726fe,_0x889b18){return _0x4726fe<_0x889b18;},'rQiUh':_0x5ae273(-0x14d,-0x159)};let _0x36c538=_0x3fa70b;function _0x5ae273(_0x2fc9e4,_0x365685){return _0x21f42b(_0x2fc9e4- -0x2b1,_0x365685);}let _0x10b08f=0x0;for(let _0x5823b9=0x0;_0x38926b[_0x5ae273(-0x145,-0x12f)](_0x5823b9,SENSITIVE_PATTERNS[_0x5ae273(-0x13f,-0x12c)]);_0x5823b9++){const _0x4e410e=new RegExp(SENSITIVE_PATTERNS[_0x5823b9][_0x5ae273(-0x13b,-0x12a)],SENSITIVE_PATTERNS[_0x5823b9][_0x5ae273(-0x14f,-0x14d)]),_0x21cb97=PATTERN_LABELS[_0x5823b9]??_0x38926b[_0x5ae273(-0x134,-0x138)],_0x40b7f9=_0x36c538['match'](_0x4e410e);_0x40b7f9&&(_0x10b08f+=_0x40b7f9['length'],_0x36c538=_0x36c538[_0x407c5b(0x273,0x263)](_0x4e410e,_0x407c5b(0x293,0x28a)+_0x21cb97+']'));}function _0x407c5b(_0x579bda,_0x3c257b){return _0x21f42b(_0x3c257b-0x10f,_0x579bda);}return{'filtered':_0x36c538,'matchCount':_0x10b08f};}function _0x7a71ae(_0x4b6ec3,_0x203328){return _0x6598(_0x4b6ec3- -0x3b9,_0x203328);}function _0x21f42b(_0x509e0a,_0x11c6c1){return _0x6598(_0x509e0a- -0x8d,_0x11c6c1);}export function isSensitivePath(_0x545700,_0x4d4c2d){const _0x32db29={'mGBiV':function(_0x10a967,_0x176565){return _0x10a967===_0x176565;},'lMwzF':_0x5379d6(-0x197,-0x1a0)},_0x4418e2=_0x545700['split']('/')[_0x292bd3(0x4a3,0x499)]()??_0x545700;for(const _0x44e439 of _0x4d4c2d){if(_0x32db29['mGBiV'](_0x32db29[_0x5379d6(-0x18f,-0x195)],_0x32db29['lMwzF'])){if(_0x44e439[_0x5379d6(-0x1a0,-0x19f)]('*')){const _0x43facb=_0x44e439['slice'](0x1);if(_0x4418e2[_0x5379d6(-0x1a8,-0x1b3)](_0x43facb))return!![];}else{if(_0x44e439[_0x292bd3(0x4a6,0x494)]('*')){const _0x5a54fc=_0x44e439[_0x5379d6(-0x1ba,-0x1b0)](0x0,-0x1);if(_0x4418e2[_0x292bd3(0x4ba,0x4b6)](_0x5a54fc))return!![];}else{if(_0x4418e2===_0x44e439)return!![];}}}else{const _0x288bae=_0x2703ff[_0x292bd3(0x4a9,0x4b1)](0x0,-0x1);if(_0x1a0b45['startsWith'](_0x288bae))return!![];}}function _0x292bd3(_0x35dcea,_0x3935e3){return _0x7a71ae(_0x35dcea-0x678,_0x3935e3);}function _0x5379d6(_0x187a69,_0xa9a454){return _0x7a71ae(_0xa9a454-0x1f,_0x187a69);}return![];}
|
|
@@ -1,142 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Significance Scorer
|
|
3
|
-
*
|
|
4
|
-
* 메모리의 중요도를 시그널 기반으로 점수화합니다.
|
|
5
|
-
*/
|
|
6
|
-
const DEFAULT_THRESHOLD = 0.6;
|
|
7
|
-
const TRIVIAL_TOOLS = new Set([
|
|
8
|
-
'Read', 'Glob', 'Grep', 'LS', 'ListDirectory',
|
|
9
|
-
'WebFetch', 'WebSearch', 'AskFollowupQuestion',
|
|
10
|
-
]);
|
|
11
|
-
const CONFIG_EXTENSIONS = new Set([
|
|
12
|
-
'.json', '.yaml', '.yml', '.toml', '.ini', '.cfg',
|
|
13
|
-
'.config', '.env', '.properties',
|
|
14
|
-
]);
|
|
15
|
-
const IMPORTANT_BASH = /\b(git\s+(commit|push|merge|rebase)|npm\s+(install|build|publish)|docker|railway|kubectl)\b/i;
|
|
16
|
-
const TRIVIAL_BASH = /^\s*(ls|cat|pwd|echo|cd|head|tail|wc)\b/;
|
|
17
|
-
/**
|
|
18
|
-
* 메시지의 중요도 점수 계산
|
|
19
|
-
*/
|
|
20
|
-
export function scoreSignificance(message, context, threshold = DEFAULT_THRESHOLD) {
|
|
21
|
-
const signals = [];
|
|
22
|
-
// 1. 에러 해결 패턴 (+0.7, 오탐 감소를 위해 0.9→0.7)
|
|
23
|
-
const errorResolution = detectErrorResolution(message, context);
|
|
24
|
-
signals.push({
|
|
25
|
-
name: 'error_resolution',
|
|
26
|
-
score: 0.7,
|
|
27
|
-
matched: errorResolution,
|
|
28
|
-
});
|
|
29
|
-
// 2. 새 파일 생성 (+0.7)
|
|
30
|
-
const newFile = context.isNewFile ?? detectNewFile(message);
|
|
31
|
-
signals.push({
|
|
32
|
-
name: 'new_file_creation',
|
|
33
|
-
score: 0.7,
|
|
34
|
-
matched: newFile,
|
|
35
|
-
});
|
|
36
|
-
// 3. 설정 변경 (+0.6)
|
|
37
|
-
const configChange = context.isConfigChange ?? detectConfigChange(message, context);
|
|
38
|
-
signals.push({
|
|
39
|
-
name: 'config_change',
|
|
40
|
-
score: 0.6,
|
|
41
|
-
matched: configChange,
|
|
42
|
-
});
|
|
43
|
-
// 4. 코드 수정 (+0.5, error_resolution 균형을 위해 0.4→0.5)
|
|
44
|
-
const codeModification = detectCodeModification(context);
|
|
45
|
-
signals.push({
|
|
46
|
-
name: 'code_modification',
|
|
47
|
-
score: 0.5,
|
|
48
|
-
matched: codeModification,
|
|
49
|
-
});
|
|
50
|
-
// 5. 조회성 행동 (-0.3)
|
|
51
|
-
const trivial = detectTrivialAction(context);
|
|
52
|
-
signals.push({
|
|
53
|
-
name: 'trivial_action',
|
|
54
|
-
score: -0.3,
|
|
55
|
-
matched: trivial,
|
|
56
|
-
});
|
|
57
|
-
// 6. Bash 중요 명령어 (+0.5)
|
|
58
|
-
const bashImportant = detectBashImportant(context);
|
|
59
|
-
signals.push({ name: 'bash_important_command', score: 0.5, matched: bashImportant });
|
|
60
|
-
// 7. Bash 사소한 명령어 (-0.4)
|
|
61
|
-
const bashTrivial = detectBashTrivial(context);
|
|
62
|
-
signals.push({ name: 'bash_trivial_command', score: -0.4, matched: bashTrivial });
|
|
63
|
-
// 8. 다중 파일 편집 (+0.3)
|
|
64
|
-
const multiFile = (context.editedFileCount ?? 0) >= 3;
|
|
65
|
-
signals.push({ name: 'multi_file_edit', score: 0.3, matched: multiFile });
|
|
66
|
-
const rawScore = signals
|
|
67
|
-
.filter((s) => s.matched)
|
|
68
|
-
.reduce((sum, s) => sum + s.score, 0);
|
|
69
|
-
const totalScore = Math.max(0, Math.min(1, rawScore));
|
|
70
|
-
return {
|
|
71
|
-
totalScore,
|
|
72
|
-
signals,
|
|
73
|
-
shouldCapture: totalScore >= threshold,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function detectErrorResolution(message, context) {
|
|
77
|
-
if (context.hasError)
|
|
78
|
-
return true;
|
|
79
|
-
const content = extractTextContent(message);
|
|
80
|
-
// 구분자 포함 패턴만 사용 (단순 'error' 키워드 → 오탐 감소)
|
|
81
|
-
const errorIndicators = [
|
|
82
|
-
'error:', 'Error:', 'ERROR:',
|
|
83
|
-
'exception:', 'Exception:',
|
|
84
|
-
'failed:', 'Failed:', 'FAILED:',
|
|
85
|
-
'traceback', 'Traceback',
|
|
86
|
-
'에러:', '오류:',
|
|
87
|
-
];
|
|
88
|
-
const hasError = errorIndicators.some((kw) => content.includes(kw));
|
|
89
|
-
if (!hasError)
|
|
90
|
-
return false;
|
|
91
|
-
// resolved/fixed/solution과 공존 시에만 error_resolution 인정
|
|
92
|
-
const resolutionKeywords = ['resolved', 'fixed', 'solution', 'solved', 'workaround', '해결', '수정'];
|
|
93
|
-
const hasResolution = resolutionKeywords.some((kw) => content.toLowerCase().includes(kw));
|
|
94
|
-
return hasResolution;
|
|
95
|
-
}
|
|
96
|
-
function detectNewFile(message) {
|
|
97
|
-
if (!Array.isArray(message.message.content))
|
|
98
|
-
return false;
|
|
99
|
-
return message.message.content.some((block) => block.type === 'tool_use' &&
|
|
100
|
-
block.name === 'Write' &&
|
|
101
|
-
block.input !== undefined);
|
|
102
|
-
}
|
|
103
|
-
function detectConfigChange(message, context) {
|
|
104
|
-
if (context.toolName === 'Edit' || context.toolName === 'Write') {
|
|
105
|
-
const content = extractTextContent(message);
|
|
106
|
-
return [...CONFIG_EXTENSIONS].some((ext) => content.includes(ext));
|
|
107
|
-
}
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
function detectCodeModification(context) {
|
|
111
|
-
// Edit은 항상 코드 수정, Write는 새 파일이 아닌 경우만 코드 수정
|
|
112
|
-
if (context.toolName === 'Edit')
|
|
113
|
-
return true;
|
|
114
|
-
if (context.toolName === 'Write' && !context.isNewFile)
|
|
115
|
-
return true;
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
function detectTrivialAction(context) {
|
|
119
|
-
if (!context.toolName)
|
|
120
|
-
return false;
|
|
121
|
-
return TRIVIAL_TOOLS.has(context.toolName);
|
|
122
|
-
}
|
|
123
|
-
function detectBashImportant(context) {
|
|
124
|
-
if (!context.bashCommand)
|
|
125
|
-
return false;
|
|
126
|
-
return IMPORTANT_BASH.test(context.bashCommand);
|
|
127
|
-
}
|
|
128
|
-
function detectBashTrivial(context) {
|
|
129
|
-
if (!context.bashCommand)
|
|
130
|
-
return false;
|
|
131
|
-
return TRIVIAL_BASH.test(context.bashCommand);
|
|
132
|
-
}
|
|
133
|
-
function extractTextContent(message) {
|
|
134
|
-
if (typeof message.message.content === 'string') {
|
|
135
|
-
return message.message.content;
|
|
136
|
-
}
|
|
137
|
-
return message.message.content
|
|
138
|
-
.filter((block) => block.type === 'text' && block.text)
|
|
139
|
-
.map((block) => block.text)
|
|
140
|
-
.join('\n');
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=scorer.js.map
|
|
1
|
+
(function(_0x2f0529,_0x3640cf){function _0x5ab0df(_0x171e77,_0x47fc7f){return _0x25d8(_0x47fc7f-0x1d7,_0x171e77);}const _0x329bbc=_0x2f0529();function _0x5c87ac(_0x25c478,_0x2ec0dd){return _0x25d8(_0x25c478-0x31e,_0x2ec0dd);}while(!![]){try{const _0x126f71=-parseInt(_0x5c87ac(0x400,0x42a))/0x1*(-parseInt(_0x5ab0df(0x2f0,0x2c8))/0x2)+parseInt(_0x5ab0df(0x30b,0x2f0))/0x3+-parseInt(_0x5c87ac(0x44f,0x43a))/0x4*(-parseInt(_0x5c87ac(0x404,0x3e6))/0x5)+-parseInt(_0x5ab0df(0x29f,0x2c7))/0x6+parseInt(_0x5c87ac(0x444,0x444))/0x7+-parseInt(_0x5c87ac(0x42b,0x430))/0x8+parseInt(_0x5ab0df(0x2f7,0x2e2))/0x9;if(_0x126f71===_0x3640cf)break;else _0x329bbc['push'](_0x329bbc['shift']());}catch(_0x5c7f2a){_0x329bbc['push'](_0x329bbc['shift']());}}}(_0x34e1,0x22bf1));function _0x34e1(){const _0x50a68b=['mti1mtyYohvjEhrivG','r2XVyG','zxHJzxb0Aw9UoG','DujREKS','AxnozxDgAwXL','rwrPDa','ChvZAa','DxrTB00','yw5Nzq','lNLHBwW','lNLTBa','mtzVEuPrz2q','D29YA2fYB3vUza','ze9jteW','BuXfuNy','AxndB25MAwDdAa','DgvZDa','Aw5JBhvKzxm','Bwf4','yMfZAf9PBxbVCG','zxjYB3jFCMvZBW','C29SDxrPB24','Bhv0Aw9U','AgfZrxjYB3i','qxnRrM9SBg93Dq','lMnVBMzPzW','C3rYAw5N','mJmZzgPluxDO','rxHJzxb0Aw9UoG','C2nVCMu','AxnbCNjHEq','nZaZnZbOyMX5CeG','C29Tzq','CMvKDwnL','lNrVBwW','y29Kzv9TB2rPzG','zMfPBgvKoG','uufhvNq','q291BNq','ruTLqNm','BwfW','mty3mtmXoenwqwDMyq','oti4z2TwENbK','BwvZC2fNzq','B3j5','AM9PBG','BMDL','wMPgzu0','Dgv4Da','BMv3x2zPBgvFyW','v2vIrMv0y2G','ruX4zgW','r3jLCa','AhPOqxi','ANLABfy','lMvUDG','CMvHDgLVBG','Bwf0y2HLza','Dg9VBf91C2u','A2nNsw0','qvrXELG','yMfZAenVBw1HBG','D3j2rLu','DgfUDf9JB21Tyq','DhjPDMLHBf9HyW','vNDMC1e','BwLU','C29SDMvK','ntm3mZq1wK55rNvP','tgLZDerPCMvJDa','mtm0mtG5nK5qv1DRAW','DgLVBG','wMzizg8','zML4zwq','yMfZAf90CML2Aq','CMvZB2X2zwq','yvfAAxO','BMfTzq','v3jPDgu','Dg9VBe5HBwu','x2vKAxq','7jIK66wyoG','ntu3mdGYDfHjuNrY','DhLWzq','Dg9mB3DLCKnHCW','uMvHza','rxjYB3i6','AgfZ','y29UDgvUDa','ww1OvK0','DhjHy2vIywnR','rvjst1i6','zMLSDgvY','CMfxB2m','AwnHDgLVBG'];_0x34e1=function(){return _0x50a68b;};return _0x34e1();}const DEFAULT_THRESHOLD=0.6,TRIVIAL_TOOLS=new Set([_0x18f3b7(0x16e,0x157),_0x2bc4f4(0xb6,0xb8),_0x18f3b7(0x15b,0x136),'LS',_0x2bc4f4(0x9b,0xa6)+_0x2bc4f4(0x82,0x67),_0x18f3b7(0x155,0x134),'WebSearch',_0x18f3b7(0x10f,0x11a)+'pQuestion']),CONFIG_EXTENSIONS=new Set(['.json',_0x18f3b7(0x13a,0x16a),_0x2bc4f4(0xbf,0x9c),_0x18f3b7(0x105,0x124),'.ini','.cfg',_0x18f3b7(0x11c,0x11b),_0x18f3b7(0x10d,0x139),'.propertie'+'s']);function _0x18f3b7(_0x556c64,_0x46ac8b){return _0x25d8(_0x46ac8b-0x3b,_0x556c64);}const IMPORTANT_BASH=/\b(git\s+(commit|push|merge|rebase)|npm\s+(install|build|publish)|docker|railway|kubectl)\b/i,TRIVIAL_BASH=/^\s*(ls|cat|pwd|echo|cd|head|tail|wc)\b/;export function scoreSignificance(_0x474efd,_0x2bd3bd,_0x2141ed=DEFAULT_THRESHOLD){const _0x345803={'utmoM':function(_0x2aed71,_0xf153ac,_0x26a835){return _0x2aed71(_0xf153ac,_0x26a835);},'mLERv':_0x27fcfe(0x100,0x116)+_0x3c55f8(0x3bb,0x3a3),'VwfsQ':'config_cha'+_0x27fcfe(0xfd,0x121),'avuNt':function(_0x2691df,_0x2856d4){return _0x2691df(_0x2856d4);},'hzhAr':function(_0x3d3b1f,_0xd77206){return _0x3d3b1f>=_0xd77206;},'jyZlV':'multi_file'+_0x3c55f8(0x3d3,0x3d8),'raWoc':function(_0x5e9251,_0x481491){return _0x5e9251>=_0x481491;}},_0x5eadef=[],_0x78d71d=_0x345803['utmoM'](detectErrorResolution,_0x474efd,_0x2bd3bd);_0x5eadef[_0x27fcfe(0x134,0x154)]({'name':_0x27fcfe(0xe3,0x108)+_0x27fcfe(0xe5,0xe0),'score':0.7,'matched':_0x78d71d});const _0x199ce2=_0x2bd3bd[_0x27fcfe(0x132,0x10b)]??detectNewFile(_0x474efd);_0x5eadef[_0x3c55f8(0x3e8,0x414)]({'name':_0x345803[_0x27fcfe(0xdd,0xcc)],'score':0.7,'matched':_0x199ce2});const _0x24ef04=_0x2bd3bd[_0x27fcfe(0xde,0xc3)+_0x3c55f8(0x3ea,0x3e3)]??_0x345803[_0x27fcfe(0x135,0x137)](detectConfigChange,_0x474efd,_0x2bd3bd);_0x5eadef[_0x27fcfe(0x134,0x11a)]({'name':_0x345803[_0x27fcfe(0x110,0xea)],'score':0.6,'matched':_0x24ef04});const _0x35e59e=detectCodeModification(_0x2bd3bd);_0x5eadef[_0x27fcfe(0x134,0x110)]({'name':_0x3c55f8(0x3a6,0x3cc)+_0x3c55f8(0x3e1,0x406),'score':0.5,'matched':_0x35e59e});const _0x2e3363=detectTrivialAction(_0x2bd3bd);_0x5eadef[_0x27fcfe(0x134,0x121)]({'name':_0x27fcfe(0x10f,0x11b)+_0x27fcfe(0x116,0x131),'score':-0.3,'matched':_0x2e3363});function _0x27fcfe(_0x1e3de4,_0x5ae30f){return _0x18f3b7(_0x5ae30f,_0x1e3de4- -0x33);}const _0x36d982=_0x345803['avuNt'](detectBashImportant,_0x2bd3bd);_0x5eadef[_0x27fcfe(0x134,0x134)]({'name':_0x27fcfe(0xe2,0xbd)+_0x3c55f8(0x3c2,0x3e1)+'nd','score':0.5,'matched':_0x36d982});const _0x5e0aa2=detectBashTrivial(_0x2bd3bd);_0x5eadef[_0x3c55f8(0x3e8,0x3e1)]({'name':_0x3c55f8(0x3cd,0x3ba)+'al_command','score':-0.4,'matched':_0x5e0aa2});function _0x3c55f8(_0x5c0541,_0x266063){return _0x18f3b7(_0x266063,_0x5c0541-0x281);}const _0x5c391f=_0x345803[_0x3c55f8(0x3b8,0x3a4)](_0x2bd3bd['editedFile'+_0x27fcfe(0xf5,0xfc)]??0x0,0x3);_0x5eadef['push']({'name':_0x345803[_0x3c55f8(0x3b9,0x3d3)],'score':0.3,'matched':_0x5c391f});const _0x2197f1=_0x5eadef[_0x27fcfe(0x12b,0x150)](_0x397b45=>_0x397b45[_0x3c55f8(0x3bc,0x3ae)])[_0x27fcfe(0xf0,0x116)]((_0x44d7d3,_0x1fa39f)=>_0x44d7d3+_0x1fa39f[_0x27fcfe(0xec,0xe0)],0x0),_0x4b9ebf=Math[_0x27fcfe(0xe1,0xce)](0x0,Math[_0x27fcfe(0x111,0xe8)](0x1,_0x2197f1));return{'totalScore':_0x4b9ebf,'signals':_0x5eadef,'shouldCapture':_0x345803[_0x27fcfe(0x12c,0x13d)](_0x4b9ebf,_0x2141ed)};}function _0x2bc4f4(_0x5eea47,_0x7d41ea){return _0x25d8(_0x5eea47- -0x71,_0x7d41ea);}function _0x25d8(_0x59db8a,_0x667ffe){_0x59db8a=_0x59db8a-0xd4;const _0x34e19a=_0x34e1();let _0x25d8d5=_0x34e19a[_0x59db8a];if(_0x25d8['PMzLTy']===undefined){var _0xc4f394=function(_0x45b03c){const _0x1cb914='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x16b6e3='',_0x172284='';for(let _0x1823a2=0x0,_0x1091ea,_0x57728c,_0xaf108a=0x0;_0x57728c=_0x45b03c['charAt'](_0xaf108a++);~_0x57728c&&(_0x1091ea=_0x1823a2%0x4?_0x1091ea*0x40+_0x57728c:_0x57728c,_0x1823a2++%0x4)?_0x16b6e3+=String['fromCharCode'](0xff&_0x1091ea>>(-0x2*_0x1823a2&0x6)):0x0){_0x57728c=_0x1cb914['indexOf'](_0x57728c);}for(let _0x4b0b4f=0x0,_0x5e7dfd=_0x16b6e3['length'];_0x4b0b4f<_0x5e7dfd;_0x4b0b4f++){_0x172284+='%'+('00'+_0x16b6e3['charCodeAt'](_0x4b0b4f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x172284);};_0x25d8['omWPzD']=_0xc4f394,_0x25d8['HiERux']={},_0x25d8['PMzLTy']=!![];}const _0x3dd39e=_0x34e19a[0x0],_0x57f8b1=_0x59db8a+_0x3dd39e,_0x2cd2b0=_0x25d8['HiERux'][_0x57f8b1];return!_0x2cd2b0?(_0x25d8d5=_0x25d8['omWPzD'](_0x25d8d5),_0x25d8['HiERux'][_0x57f8b1]=_0x25d8d5):_0x25d8d5=_0x2cd2b0,_0x25d8d5;}function detectErrorResolution(_0x438471,_0x605a5a){const _0x10a5a6={'aQZiz':_0x483235(-0x278,-0x277),'YqCKq':_0xd74ba7(0x468,0x484),'EKeBs':_0xd74ba7(0x429,0x42e),'dOILL':'FAILED:','wrvFU':_0x483235(-0x27d,-0x25a),'ELxdl':_0x483235(-0x283,-0x2ac),'QAGVt':_0x483235(-0x285,-0x2a9),'ZfHdo':_0xd74ba7(0x422,0x3fc),'ZjFeM':_0x483235(-0x28b,-0x286),'xlRLJ':_0x483235(-0x263,-0x244)};function _0xd74ba7(_0x3ae693,_0x40db64){return _0x18f3b7(_0x40db64,_0x3ae693-0x30b);}if(_0x605a5a[_0xd74ba7(0x424,0x3fc)])return!![];function _0x483235(_0x91cb57,_0x3aa908){return _0x18f3b7(_0x3aa908,_0x91cb57- -0x3d0);}const _0x31bb9f=extractTextContent(_0x438471),_0x5d04e1=['error:',_0x10a5a6[_0x483235(-0x282,-0x263)],_0x10a5a6['YqCKq'],_0xd74ba7(0x46e,0x46e),_0x10a5a6[_0x483235(-0x2a7,-0x28e)],_0x483235(-0x2aa,-0x298),'Failed:',_0x10a5a6[_0x483235(-0x2c1,-0x2f0)],_0x483235(-0x274,-0x29b),'Traceback','에러:',_0x10a5a6[_0xd74ba7(0x44b,0x436)]],_0x2b6691=_0x5d04e1[_0xd74ba7(0x42d,0x421)](_0x2da47c=>_0x31bb9f[_0xd74ba7(0x41e,0x421)](_0x2da47c));if(!_0x2b6691)return![];const _0x52d388=[_0x10a5a6[_0x483235(-0x29b,-0x2a0)],_0x10a5a6[_0xd74ba7(0x432,0x43d)],_0x10a5a6[_0xd74ba7(0x455,0x438)],_0x10a5a6[_0xd74ba7(0x43c,0x468)],_0x10a5a6['xlRLJ'],'해결','수정'],_0x11d276=_0x52d388[_0xd74ba7(0x42d,0x417)](_0x470ca9=>_0x31bb9f[_0xd74ba7(0x461,0x47b)+'e']()[_0xd74ba7(0x41e,0x432)](_0x470ca9));return _0x11d276;}function detectNewFile(_0x5d4967){function _0x56dec8(_0x3cc328,_0x4cd619){return _0x18f3b7(_0x4cd619,_0x3cc328-0x369);}if(!Array[_0x56dec8(0x489,0x463)](_0x5d4967[_0x56dec8(0x496,0x4ae)][_0x415bda(0x32d,0x31c)]))return![];function _0x415bda(_0x40f854,_0x12c417){return _0x18f3b7(_0x40f854,_0x12c417-0x1c2);}return _0x5d4967[_0x56dec8(0x496,0x4a0)]['content'][_0x415bda(0x2da,0x2e4)](_0x3bedd3=>_0x3bedd3[_0x415bda(0x30e,0x317)]===_0x415bda(0x2d0,0x2fe)&&_0x3bedd3[_0x415bda(0x318,0x311)]===_0x415bda(0x33a,0x312)&&_0x3bedd3['input']!==undefined);}function detectConfigChange(_0x261578,_0x4f06ee){const _0x53dd27={'ATqzX':function(_0x1579b9,_0x32eb3d){return _0x1579b9===_0x32eb3d;},'SUwVQ':_0x3f0091(-0x1a9,-0x1d6)};function _0x3f0091(_0x400e34,_0x2660ba){return _0x2bc4f4(_0x400e34- -0x23a,_0x2660ba);}function _0x2ef94d(_0xe924f1,_0x450f39){return _0x2bc4f4(_0xe924f1-0x62,_0x450f39);}if(_0x4f06ee[_0x3f0091(-0x195,-0x1c1)]===_0x3f0091(-0x180,-0x18b)||_0x53dd27[_0x3f0091(-0x1a8,-0x195)](_0x4f06ee[_0x3f0091(-0x195,-0x16d)],_0x3f0091(-0x196,-0x16e))){if(_0x53dd27[_0x2ef94d(0xf4,0xd2)](_0x3f0091(-0x1a9,-0x19f),_0x53dd27['SUwVQ'])){const _0x39aabb=extractTextContent(_0x261578);return[...CONFIG_EXTENSIONS][_0x2ef94d(0xd8,0xed)](_0x58c2c5=>_0x39aabb[_0x2ef94d(0xc9,0xd1)](_0x58c2c5));}else return _0x15bf67[_0x3f0091(-0x1b9,-0x1b2)][_0x3f0091(-0x18c,-0x166)];}return![];}function detectCodeModification(_0x1f82a0){if(_0x1f82a0[_0xa96865(-0x59,-0x72)]===_0x1b9b42(0x197,0x1bb))return!![];function _0xa96865(_0x3e9402,_0xa82f4e){return _0x2bc4f4(_0x3e9402- -0xfe,_0xa82f4e);}function _0x1b9b42(_0x1b19d4,_0x42e1a8){return _0x2bc4f4(_0x42e1a8-0x101,_0x1b19d4);}if(_0x1f82a0[_0xa96865(-0x59,-0x3d)]===_0x1b9b42(0x1b1,0x1a5)&&!_0x1f82a0[_0x1b9b42(0x1a2,0x1ba)])return!![];return![];}function detectTrivialAction(_0x41579f){function _0x1e96b9(_0x4614f9,_0xa81686){return _0x2bc4f4(_0x4614f9- -0xda,_0xa81686);}function _0x24ece8(_0x173d91,_0x82f56b){return _0x2bc4f4(_0x173d91-0x28b,_0x82f56b);}if(!_0x41579f[_0x1e96b9(-0x35,-0x24)])return![];return TRIVIAL_TOOLS[_0x24ece8(0x338,0x364)](_0x41579f[_0x1e96b9(-0x35,-0x59)]);}function detectBashImportant(_0x3a6bb1){function _0x4371a5(_0x5cfe55,_0x327348){return _0x18f3b7(_0x327348,_0x5cfe55-0xb6);}function _0x5b64d6(_0x5097aa,_0x1b1643){return _0x18f3b7(_0x1b1643,_0x5097aa-0x128);}if(!_0x3a6bb1[_0x5b64d6(0x267,0x267)+'d'])return![];return IMPORTANT_BASH[_0x4371a5(0x1c8,0x1c6)](_0x3a6bb1['bashComman'+'d']);}function detectBashTrivial(_0x54d031){function _0x127ce0(_0x2b80e4,_0x1224c2){return _0x18f3b7(_0x2b80e4,_0x1224c2-0x380);}if(!_0x54d031[_0x291e32(-0x6a,-0x61)+'d'])return![];function _0x291e32(_0x1c4aa1,_0x664cfc){return _0x18f3b7(_0x664cfc,_0x1c4aa1- -0x1a9);}return TRIVIAL_BASH[_0x291e32(-0x97,-0x69)](_0x54d031['bashComman'+'d']);}function extractTextContent(_0x400a1d){function _0x4445a0(_0xbafbcc,_0x106bc8){return _0x2bc4f4(_0xbafbcc-0x2a4,_0x106bc8);}const _0x44785f={'YmhVM':function(_0x381945,_0x217fe9){return _0x381945===_0x217fe9;},'uBkzK':_0x3ffc64(0x174,0x150)};function _0x3ffc64(_0x2d7e42,_0x282e54){return _0x2bc4f4(_0x282e54-0xe0,_0x2d7e42);}if(_0x44785f[_0x4445a0(0x353,0x35c)](typeof _0x400a1d['message']['content'],_0x44785f[_0x4445a0(0x35c,0x34a)]))return _0x400a1d['message'][_0x4445a0(0x352,0x37c)];return _0x400a1d[_0x3ffc64(0x13b,0x161)][_0x4445a0(0x352,0x360)][_0x4445a0(0x356,0x351)](_0x5a850b=>_0x5a850b['type']===_0x4445a0(0x32a,0x30e)&&_0x5a850b['text'])[_0x3ffc64(0x176,0x15e)](_0x38de3c=>_0x38de3c[_0x4445a0(0x32a,0x314)])[_0x4445a0(0x327,0x307)]('\x0a');}
|
|
@@ -1,85 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Similarity Utilities
|
|
3
|
-
* 메모리 중복 제거 및 유사도 계산
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Jaccard 유사도 (토큰 집합 기반)
|
|
7
|
-
*/
|
|
8
|
-
export function jaccardSimilarity(a, b) {
|
|
9
|
-
const tokensA = new Set(tokenize(a));
|
|
10
|
-
const tokensB = new Set(tokenize(b));
|
|
11
|
-
if (tokensA.size === 0 && tokensB.size === 0)
|
|
12
|
-
return 1;
|
|
13
|
-
if (tokensA.size === 0 || tokensB.size === 0)
|
|
14
|
-
return 0;
|
|
15
|
-
let intersection = 0;
|
|
16
|
-
for (const token of tokensA) {
|
|
17
|
-
if (tokensB.has(token))
|
|
18
|
-
intersection++;
|
|
19
|
-
}
|
|
20
|
-
const union = tokensA.size + tokensB.size - intersection;
|
|
21
|
-
if (union === 0)
|
|
22
|
-
return 1;
|
|
23
|
-
return intersection / union;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* 코사인 유사도 (벡터 기반)
|
|
27
|
-
*/
|
|
28
|
-
export function cosineSimilarity(a, b) {
|
|
29
|
-
if (a.length !== b.length || a.length === 0)
|
|
30
|
-
return 0;
|
|
31
|
-
let dotProduct = 0;
|
|
32
|
-
let normA = 0;
|
|
33
|
-
let normB = 0;
|
|
34
|
-
for (let i = 0; i < a.length; i++) {
|
|
35
|
-
dotProduct += a[i] * b[i];
|
|
36
|
-
normA += a[i] * a[i];
|
|
37
|
-
normB += b[i] * b[i];
|
|
38
|
-
}
|
|
39
|
-
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
40
|
-
if (denominator === 0)
|
|
41
|
-
return 0;
|
|
42
|
-
return dotProduct / denominator;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Jaccard 기반 중복 제거
|
|
46
|
-
*/
|
|
47
|
-
export function deduplicateByContent(memories, threshold = 0.7) {
|
|
48
|
-
const result = [];
|
|
49
|
-
for (const memory of memories) {
|
|
50
|
-
const isDuplicate = result.some((existing) => existing.category === memory.category &&
|
|
51
|
-
jaccardSimilarity(existing.content, memory.content) >= threshold);
|
|
52
|
-
if (!isDuplicate) {
|
|
53
|
-
result.push(memory);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* 코사인 기반 중복 제거 (임베딩 있는 Memory용)
|
|
60
|
-
*/
|
|
61
|
-
export function deduplicateByEmbedding(memories, threshold = 0.8) {
|
|
62
|
-
const result = [];
|
|
63
|
-
for (const memory of memories) {
|
|
64
|
-
if (!memory.embedding) {
|
|
65
|
-
result.push(memory);
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
const isDuplicate = result.some((existing) => existing.embedding &&
|
|
69
|
-
cosineSimilarity(existing.embedding, memory.embedding) >= threshold);
|
|
70
|
-
if (!isDuplicate) {
|
|
71
|
-
result.push(memory);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return result;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* 텍스트를 단어 토큰으로 분리
|
|
78
|
-
*/
|
|
79
|
-
function tokenize(text) {
|
|
80
|
-
return text
|
|
81
|
-
.toLowerCase()
|
|
82
|
-
.split(/[\s\p{P}]+/u)
|
|
83
|
-
.filter((t) => t.length > 1);
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=similarity.js.map
|
|
1
|
+
(function(_0x59b7f7,_0x19251b){function _0x5ec95c(_0x4bc3dd,_0x118801){return _0x1caf(_0x4bc3dd-0x29b,_0x118801);}const _0x4e520e=_0x59b7f7();function _0x218446(_0x134290,_0xa3f8e0){return _0x1caf(_0xa3f8e0- -0x341,_0x134290);}while(!![]){try{const _0x426760=parseInt(_0x5ec95c(0x30e,0x301))/0x1*(parseInt(_0x5ec95c(0x311,0x30e))/0x2)+parseInt(_0x5ec95c(0x303,0x303))/0x3+-parseInt(_0x5ec95c(0x310,0x305))/0x4*(parseInt(_0x5ec95c(0x304,0x2fc))/0x5)+-parseInt(_0x218446(-0x2e4,-0x2db))/0x6*(parseInt(_0x5ec95c(0x31b,0x31f))/0x7)+-parseInt(_0x218446(-0x2c7,-0x2ca))/0x8+parseInt(_0x5ec95c(0x313,0x30a))/0x9*(-parseInt(_0x218446(-0x2bb,-0x2c8))/0xa)+-parseInt(_0x5ec95c(0x302,0x30d))/0xb*(-parseInt(_0x218446(-0x2d4,-0x2d5))/0xc);if(_0x426760===_0x19251b)break;else _0x4e520e['push'](_0x4e520e['shift']());}catch(_0xe5d52a){_0x4e520e['push'](_0x4e520e['shift']());}}}(_0x5394,0xe6b3d));export function jaccardSimilarity(_0x4ef880,_0x281729){function _0xcbedb1(_0x2b676a,_0x331653){return _0x1caf(_0x2b676a- -0xd6,_0x331653);}const _0xead843={'UHVCB':function(_0x2d72fa,_0x5b2615){return _0x2d72fa===_0x5b2615;},'hrmrJ':function(_0x44cc84,_0x13ef17){return _0x44cc84===_0x13ef17;},'EbJmZ':function(_0x25ee03,_0x9130ee){return _0x25ee03+_0x9130ee;},'tUWtY':function(_0x443427,_0x4249b0){return _0x443427===_0x4249b0;}},_0x2dd526=new Set(tokenize(_0x4ef880)),_0xd7f7dd=new Set(tokenize(_0x281729));if(_0x2dd526[_0xcbedb1(-0x66,-0x6d)]===0x0&&_0xead843[_0xcbedb1(-0x5c,-0x4d)](_0xd7f7dd['size'],0x0))return 0x1;function _0x410abf(_0x5dd198,_0xcdfc50){return _0x1caf(_0x5dd198- -0x19a,_0xcdfc50);}if(_0x2dd526[_0x410abf(-0x12a,-0x127)]===0x0||_0xead843[_0x410abf(-0x12b,-0x131)](_0xd7f7dd[_0x410abf(-0x12a,-0x11c)],0x0))return 0x0;let _0x272469=0x0;for(const _0x2c851a of _0x2dd526){if(_0xd7f7dd['has'](_0x2c851a))_0x272469++;}const _0x174031=_0xead843['EbJmZ'](_0x2dd526[_0xcbedb1(-0x66,-0x6b)],_0xd7f7dd[_0xcbedb1(-0x66,-0x61)])-_0x272469;if(_0xead843[_0xcbedb1(-0x5b,-0x59)](_0x174031,0x0))return 0x1;return _0x272469/_0x174031;}export function cosineSimilarity(_0x5b1b84,_0x500180){const _0x27a5ef={'Vukwu':function(_0x4825f6,_0x3b7f0a){return _0x4825f6!==_0x3b7f0a;},'CEFnL':function(_0x15c5f3,_0x57771a){return _0x15c5f3===_0x57771a;},'CUfNE':function(_0x2156b5,_0x249154){return _0x2156b5<_0x249154;},'qfuIu':function(_0x1e072b,_0x3c7a07){return _0x1e072b*_0x3c7a07;}};if(_0x27a5ef['Vukwu'](_0x5b1b84[_0x2db8bd(-0x227,-0x21e)],_0x500180[_0x2db8bd(-0x212,-0x21e)])||_0x27a5ef[_0x495dec(-0x2e6,-0x2ed)](_0x5b1b84['length'],0x0))return 0x0;let _0x5ace99=0x0,_0x361485=0x0;function _0x495dec(_0x23ce89,_0x1007de){return _0x1caf(_0x1007de- -0x369,_0x23ce89);}let _0x19ffc2=0x0;function _0x2db8bd(_0x37225a,_0x68bc98){return _0x1caf(_0x68bc98- -0x289,_0x37225a);}for(let _0x991a2e=0x0;_0x27a5ef[_0x495dec(-0x2ef,-0x2fb)](_0x991a2e,_0x5b1b84[_0x2db8bd(-0x22b,-0x21e)]);_0x991a2e++){_0x5ace99+=_0x27a5ef[_0x2db8bd(-0x20f,-0x218)](_0x5b1b84[_0x991a2e],_0x500180[_0x991a2e]),_0x361485+=_0x27a5ef[_0x495dec(-0x2fc,-0x2f8)](_0x5b1b84[_0x991a2e],_0x5b1b84[_0x991a2e]),_0x19ffc2+=_0x500180[_0x991a2e]*_0x500180[_0x991a2e];}const _0x11a54a=_0x27a5ef[_0x2db8bd(-0x215,-0x218)](Math['sqrt'](_0x361485),Math[_0x495dec(-0x2fd,-0x304)](_0x19ffc2));if(_0x11a54a===0x0)return 0x0;return _0x5ace99/_0x11a54a;}function _0x5394(){const _0x3bd767=['ndu3nZbTwgnrtMW','zw1IzwrKAw5N','BgvUz3rO','otyZnZj0D3rzvhi','ChvZAa','q1vMtKu','AhjTCKO','C2L6zq','Cwz1sxu','Dg9mB3DLCKnHCW','oxPLquTJAG','y2f0zwDVCNK','ntu2DvzcCMns','mJiYmdzIzfrlC04','nJeXmZeZnMv4u3zxAa','odaYntm2m3nvthL0za','mJblCe9oy1m','vuHwq0i','DfvxDfK','q0vgBKW','zMLSDgvY','C3bSAxq','y29UDgvUDa','n2jMwxfmua','C29Tzq','C3fYDa','mtKYoti5nfzitezfvG','ndC2m1n1yMr0AW','nduYnZm1nefKDKjkDa'];_0x5394=function(){return _0x3bd767;};return _0x5394();}export function deduplicateByContent(_0x4aa40c,_0x20cdbd=0.7){function _0x442655(_0x348eee,_0x27fd95){return _0x1caf(_0x348eee- -0xfb,_0x27fd95);}const _0x4c54d0=[];function _0x4565aa(_0x5ca905,_0x2a14b4){return _0x1caf(_0x5ca905- -0x283,_0x2a14b4);}for(const _0x307cd1 of _0x4aa40c){const _0x56753e=_0x4c54d0[_0x442655(-0x97,-0x9b)](_0x45e9a3=>_0x45e9a3[_0x4565aa(-0x20f,-0x205)]===_0x307cd1[_0x442655(-0x87,-0x90)]&&jaccardSimilarity(_0x45e9a3[_0x442655(-0x7c,-0x70)],_0x307cd1[_0x4565aa(-0x204,-0x205)])>=_0x20cdbd);!_0x56753e&&_0x4c54d0[_0x442655(-0x8e,-0x90)](_0x307cd1);}return _0x4c54d0;}export function deduplicateByEmbedding(_0x357d46,_0x21f1d2=0.8){const _0x3c0d07=[];for(const _0x487ead of _0x357d46){if(!_0x487ead[_0x34cf90(0x340,0x333)]){_0x3c0d07['push'](_0x487ead);continue;}const _0xa9ff2b=_0x3c0d07[_0x18fae4(0x5e,0x6a)](_0x298a55=>_0x298a55[_0x34cf90(0x340,0x347)]&&cosineSimilarity(_0x298a55[_0x34cf90(0x340,0x336)],_0x487ead[_0x18fae4(0x64,0x57)])>=_0x21f1d2);!_0xa9ff2b&&_0x3c0d07['push'](_0x487ead);}function _0x34cf90(_0x45a9df,_0x3e1836){return _0x1caf(_0x45a9df-0x2d6,_0x3e1836);}function _0x18fae4(_0x3aff78,_0x372bae){return _0x1caf(_0x3aff78- -0x6,_0x372bae);}return _0x3c0d07;}function _0x1caf(_0x4d17fd,_0x29c570){_0x4d17fd=_0x4d17fd-0x64;const _0x53940d=_0x5394();let _0x1cafcc=_0x53940d[_0x4d17fd];if(_0x1caf['EnFZXr']===undefined){var _0x30bf76=function(_0x49e533){const _0x41e924='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x19d306='',_0x4adf8a='';for(let _0x297fd9=0x0,_0x52e08d,_0x134cf9,_0x3998fd=0x0;_0x134cf9=_0x49e533['charAt'](_0x3998fd++);~_0x134cf9&&(_0x52e08d=_0x297fd9%0x4?_0x52e08d*0x40+_0x134cf9:_0x134cf9,_0x297fd9++%0x4)?_0x19d306+=String['fromCharCode'](0xff&_0x52e08d>>(-0x2*_0x297fd9&0x6)):0x0){_0x134cf9=_0x41e924['indexOf'](_0x134cf9);}for(let _0x1a7dce=0x0,_0x53b011=_0x19d306['length'];_0x1a7dce<_0x53b011;_0x1a7dce++){_0x4adf8a+='%'+('00'+_0x19d306['charCodeAt'](_0x1a7dce)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4adf8a);};_0x1caf['EkqDfI']=_0x30bf76,_0x1caf['BncWwj']={},_0x1caf['EnFZXr']=!![];}const _0x4e4a58=_0x53940d[0x0],_0x2d3683=_0x4d17fd+_0x4e4a58,_0x37bbc2=_0x1caf['BncWwj'][_0x2d3683];return!_0x37bbc2?(_0x1cafcc=_0x1caf['EkqDfI'](_0x1cafcc),_0x1caf['BncWwj'][_0x2d3683]=_0x1cafcc):_0x1cafcc=_0x37bbc2,_0x1cafcc;}function tokenize(_0x4d5cd6){function _0x28ff77(_0x3bfc79,_0xc007a8){return _0x1caf(_0x3bfc79-0x29e,_0xc007a8);}function _0x5162a8(_0x1fa98a,_0x37373b){return _0x1caf(_0x1fa98a- -0x325,_0x37373b);}return _0x4d5cd6[_0x28ff77(0x310,0x31e)+'e']()[_0x5162a8(-0x2a7,-0x2b0)](/[\s\p{P}]+/u)[_0x28ff77(0x31b,0x314)](_0x41d988=>_0x41d988[_0x5162a8(-0x2ba,-0x2b3)]>0x1);}
|
|
@@ -1,44 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Hook 공용 A2AClient 팩토리
|
|
3
|
-
*/
|
|
4
|
-
import { A2AClient } from '../sync/client.js';
|
|
5
|
-
/**
|
|
6
|
-
* Config 기반 A2AClient 생성.
|
|
7
|
-
* server.url 과 server.apiKey 가 있을 때만 생성하고, 없으면 null 반환.
|
|
8
|
-
*
|
|
9
|
-
* @param config 로드된 A2AConfig
|
|
10
|
-
* @param timeout 요청 타임아웃(ms). 기본값은 A2AClient 내부 기본값(60000ms)을 따름.
|
|
11
|
-
*/
|
|
12
|
-
export function createHookClient(config, timeout) {
|
|
13
|
-
if (!config.server?.url || !config.server?.apiKey) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
const client = new A2AClient({
|
|
17
|
-
baseUrl: config.server.url,
|
|
18
|
-
apiKey: config.server.apiKey,
|
|
19
|
-
...(timeout !== undefined ? { timeout } : {}),
|
|
20
|
-
});
|
|
21
|
-
// 활성화된 Feature 목록 전달 (Backend에서 조회용)
|
|
22
|
-
const features = [];
|
|
23
|
-
if (config.autoCapture?.enabled)
|
|
24
|
-
features.push('auto_capture');
|
|
25
|
-
if (config.autoInject?.enabled)
|
|
26
|
-
features.push('auto_inject');
|
|
27
|
-
if (config.autoSync?.enabled)
|
|
28
|
-
features.push('server_sync');
|
|
29
|
-
if (config.embedding?.enabled)
|
|
30
|
-
features.push('embedding');
|
|
31
|
-
if (config.lifecycle?.cleanupOnSessionEnd)
|
|
32
|
-
features.push('lifecycle');
|
|
33
|
-
if (config.skillConversion?.enabled)
|
|
34
|
-
features.push('skill_conversion');
|
|
35
|
-
if (config.proficiency?.enabled)
|
|
36
|
-
features.push('proficiency');
|
|
37
|
-
if (config.realtimeInject?.enabled)
|
|
38
|
-
features.push('realtime_inject');
|
|
39
|
-
if (config.emotionTracking?.enabled)
|
|
40
|
-
features.push('emotion_tracking');
|
|
41
|
-
client.setEnabledFeatures(features);
|
|
42
|
-
return client;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=client-factory.js.map
|
|
1
|
+
function _0x52b7(_0x3ed302,_0x22530b){_0x3ed302=_0x3ed302-0x1d2;const _0x4a90fa=_0x4a90();let _0x52b740=_0x4a90fa[_0x3ed302];if(_0x52b7['NbCFgZ']===undefined){var _0x505291=function(_0xaf62b5){const _0x328b4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4b17b8='',_0x38e1d0='';for(let _0x1275d7=0x0,_0x556d1b,_0x483790,_0x1ec29c=0x0;_0x483790=_0xaf62b5['charAt'](_0x1ec29c++);~_0x483790&&(_0x556d1b=_0x1275d7%0x4?_0x556d1b*0x40+_0x483790:_0x483790,_0x1275d7++%0x4)?_0x4b17b8+=String['fromCharCode'](0xff&_0x556d1b>>(-0x2*_0x1275d7&0x6)):0x0){_0x483790=_0x328b4['indexOf'](_0x483790);}for(let _0x3d6aed=0x0,_0x31aeaf=_0x4b17b8['length'];_0x3d6aed<_0x31aeaf;_0x3d6aed++){_0x38e1d0+='%'+('00'+_0x4b17b8['charCodeAt'](_0x3d6aed)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x38e1d0);};_0x52b7['yfnDQG']=_0x505291,_0x52b7['pUTDJz']={},_0x52b7['NbCFgZ']=!![];}const _0x34c254=_0x4a90fa[0x0],_0xfb842a=_0x3ed302+_0x34c254,_0x24d2fe=_0x52b7['pUTDJz'][_0xfb842a];return!_0x24d2fe?(_0x52b740=_0x52b7['yfnDQG'](_0x52b740),_0x52b7['pUTDJz'][_0xfb842a]=_0x52b740):_0x52b740=_0x24d2fe,_0x52b740;}(function(_0x3b5bce,_0x247042){function _0x191490(_0x50490d,_0x327fbd){return _0x52b7(_0x50490d-0x3a4,_0x327fbd);}function _0x41153c(_0x10b870,_0x4d26c4){return _0x52b7(_0x4d26c4-0x3ad,_0x10b870);}const _0xbbca0f=_0x3b5bce();while(!![]){try{const _0x5e655a=parseInt(_0x191490(0x585,0x585))/0x1*(-parseInt(_0x41153c(0x58d,0x58b))/0x2)+parseInt(_0x41153c(0x586,0x589))/0x3+parseInt(_0x191490(0x589,0x58f))/0x4+parseInt(_0x191490(0x59a,0x5a2))/0x5+parseInt(_0x191490(0x597,0x5a9))/0x6*(parseInt(_0x191490(0x581,0x592))/0x7)+parseInt(_0x191490(0x578,0x568))/0x8+-parseInt(_0x41153c(0x583,0x585))/0x9*(parseInt(_0x191490(0x593,0x585))/0xa);if(_0x5e655a===_0x247042)break;else _0xbbca0f['push'](_0xbbca0f['shift']());}catch(_0x3e9edb){_0xbbca0f['push'](_0xbbca0f['shift']());}}}(_0x4a90,0xe00fb));import{A2AClient}from'../sync/client.js';function _0x4a90(){const _0x325a7a=['ChjVzMLJAwvUyW','BgLMzwn5y2XL','C2vYDMvY','ndyYmtCYofL5ufLSCa','ChvZAa','CNnPB24','ode4mdyZmefNs3H5DW','vNDmu0C','DxjS','CMzZAwO','ndi0mZG4oenyvKDhBq','C2TPBgXFy29UDG','C2TPBgXdB252zq','zw1VDgLVBL90CG','ovrOEvrgsa','zw1IzwrKAw5N','AMvJDa','y2XLyw51Ce9UuW','mZa3mty3ovHgv2LTta','mtrrsfPzDMO','mtiWmtG2yw1ls09q','yxbPs2v5','C2vYDMvYx3n5BG','nhnZEgXqAa','ruj2t2e','rMvHDhvYzxm','yxv0B19Jyxb0Dq','nJGZntC4ofjHyvvlsW','BMPLy3q','zw5HyMXLza','y2TPBMC','CMvHBhrPBwvjBG','yxv0B0nHChr1CG','wgnAwK8','A2jjzfi','zxjZAw9U','yxv0B1n5BMm','nti4mtKWmtb1EhrHCKS'];_0x4a90=function(){return _0x325a7a;};return _0x4a90();}export function createHookClient(_0x2742c4,_0x3ba3d5){const _0x25d132={'VwLSG':function(_0x2dfe42,_0x18b4f0){return _0x2dfe42!==_0x18b4f0;},'XcZZO':_0x26c5c6(-0x109,-0xf9)+'re','rfsij':'lifecycle','kbIdR':_0x150392(0x253,0x24c)+'y','EBvOa':_0x150392(0x23a,0x24d)+'acking'};if(!_0x2742c4['server']?.[_0x150392(0x235,0x226)]||!_0x2742c4[_0x150392(0x255,0x261)]?.[_0x150392(0x242,0x234)])return null;const _0x227516=new A2AClient({'baseUrl':_0x2742c4[_0x150392(0x255,0x246)][_0x26c5c6(-0x11b,-0x112)],'apiKey':_0x2742c4['server'][_0x26c5c6(-0x10e,-0x111)],..._0x25d132[_0x26c5c6(-0xf6,-0xe5)](_0x3ba3d5,undefined)?{'timeout':_0x3ba3d5}:{}}),_0x37bf3c=[];if(_0x2742c4[_0x26c5c6(-0x103,-0x103)+'e']?.['enabled'])_0x37bf3c[_0x26c5c6(-0xf9,-0xe7)](_0x25d132[_0x150392(0x24e,0x253)]);function _0x26c5c6(_0x31e861,_0x1a7ab9){return _0x52b7(_0x31e861- -0x2ed,_0x1a7ab9);}if(_0x2742c4['autoInject']?.[_0x26c5c6(-0x106,-0x103)])_0x37bf3c[_0x150392(0x257,0x24e)]('auto_injec'+'t');if(_0x2742c4[_0x26c5c6(-0xff,-0x10b)]?.[_0x26c5c6(-0x106,-0x114)])_0x37bf3c[_0x150392(0x257,0x257)](_0x26c5c6(-0x10d,-0x11a)+'c');if(_0x2742c4[_0x26c5c6(-0x114,-0x108)]?.[_0x26c5c6(-0x106,-0xf7)])_0x37bf3c[_0x26c5c6(-0xf9,-0xfe)](_0x26c5c6(-0x114,-0x102));if(_0x2742c4[_0x26c5c6(-0xfc,-0xfc)]?.[_0x150392(0x23e,0x231)+'essionEnd'])_0x37bf3c[_0x150392(0x257,0x267)](_0x25d132[_0x26c5c6(-0x11a,-0x11d)]);if(_0x2742c4[_0x150392(0x239,0x228)+_0x26c5c6(-0xf8,-0x108)]?.['enabled'])_0x37bf3c[_0x26c5c6(-0xf9,-0x10a)](_0x150392(0x238,0x247)+_0x26c5c6(-0x100,-0x10e));if(_0x2742c4[_0x150392(0x253,0x247)+'y']?.['enabled'])_0x37bf3c[_0x150392(0x257,0x265)](_0x25d132[_0x150392(0x24f,0x244)]);if(_0x2742c4[_0x150392(0x24c,0x258)+_0x26c5c6(-0x113,-0x123)]?.[_0x26c5c6(-0x106,-0x106)])_0x37bf3c['push']('realtime_i'+_0x26c5c6(-0x107,-0x108));function _0x150392(_0x2a4bca,_0x258973){return _0x52b7(_0x2a4bca-0x63,_0x258973);}if(_0x2742c4['emotionTra'+_0x26c5c6(-0x105,-0x117)]?.[_0x150392(0x24a,0x258)])_0x37bf3c['push'](_0x25d132[_0x26c5c6(-0x10b,-0x11b)]);return _0x227516['setEnabled'+_0x150392(0x246,0x24f)](_0x37bf3c),_0x227516;}
|