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/sync/client.js
CHANGED
|
@@ -1,597 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A2A API Client
|
|
3
|
-
* Node.js 내장 fetch 사용 (외부 의존성 없음)
|
|
4
|
-
*/
|
|
5
|
-
import { encryptContent, decryptContent, wrapEncryptedContent, unwrapEncryptedContent, } from './encryption.js';
|
|
6
|
-
// Plugin 버전 (빌드 시점에 package.json에서 읽기)
|
|
7
|
-
let _pluginVersion = '0.0.0';
|
|
8
|
-
try {
|
|
9
|
-
const { readFileSync } = await import('node:fs');
|
|
10
|
-
const { fileURLToPath } = await import('node:url');
|
|
11
|
-
const { dirname, join } = await import('node:path');
|
|
12
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
-
const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
|
|
14
|
-
_pluginVersion = pkg.version || '0.0.0';
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// dist 환경에서 경로가 다를 수 있음
|
|
18
|
-
}
|
|
19
|
-
export class A2AClient {
|
|
20
|
-
config;
|
|
21
|
-
timeout;
|
|
22
|
-
encryptionKey = null;
|
|
23
|
-
enabledFeatures = [];
|
|
24
|
-
constructor(config) {
|
|
25
|
-
this.config = config;
|
|
26
|
-
this.timeout = config.timeout ?? 60000;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 활성화된 Feature 목록 설정 (헤더 전송용)
|
|
30
|
-
*/
|
|
31
|
-
setEnabledFeatures(features) {
|
|
32
|
-
this.enabledFeatures = features;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* 암호화 키 설정
|
|
36
|
-
*/
|
|
37
|
-
setEncryptionKey(key) {
|
|
38
|
-
if (key.length !== 32) {
|
|
39
|
-
throw new Error('암호화 키는 32 bytes여야 합니다');
|
|
40
|
-
}
|
|
41
|
-
this.encryptionKey = key;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 암호화 키 해제
|
|
45
|
-
*/
|
|
46
|
-
clearEncryptionKey() {
|
|
47
|
-
this.encryptionKey = null;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 암호화 활성화 여부
|
|
51
|
-
*/
|
|
52
|
-
isEncryptionEnabled() {
|
|
53
|
-
return this.encryptionKey !== null;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 메모리 생성
|
|
57
|
-
*/
|
|
58
|
-
async createMemory(input) {
|
|
59
|
-
let contentToSend = input.content;
|
|
60
|
-
// 암호화가 활성화된 경우
|
|
61
|
-
if (this.encryptionKey) {
|
|
62
|
-
const encrypted = encryptContent(input.content, this.encryptionKey);
|
|
63
|
-
contentToSend = wrapEncryptedContent(encrypted);
|
|
64
|
-
}
|
|
65
|
-
const response = await this.request('POST', '/api/v1/memories', {
|
|
66
|
-
content: contentToSend,
|
|
67
|
-
category: input.category,
|
|
68
|
-
tier: input.tier,
|
|
69
|
-
tags: input.tags ?? [],
|
|
70
|
-
});
|
|
71
|
-
const memory = response;
|
|
72
|
-
// 응답 복호화
|
|
73
|
-
if (this.encryptionKey && memory.content) {
|
|
74
|
-
const unwrapped = unwrapEncryptedContent(memory.content);
|
|
75
|
-
if (unwrapped) {
|
|
76
|
-
memory.content = decryptContent(unwrapped, this.encryptionKey);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return memory;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* 메모리 검색
|
|
83
|
-
*/
|
|
84
|
-
async searchMemories(query, options) {
|
|
85
|
-
const response = await this.request('POST', '/api/v1/memories/search', {
|
|
86
|
-
query,
|
|
87
|
-
limit: options?.limit ?? 10,
|
|
88
|
-
category: options?.category,
|
|
89
|
-
});
|
|
90
|
-
return response.items ?? [];
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* 메모리 목록
|
|
94
|
-
*/
|
|
95
|
-
async listMemories(options) {
|
|
96
|
-
const params = new URLSearchParams();
|
|
97
|
-
if (options?.limit)
|
|
98
|
-
params.set('limit', options.limit.toString());
|
|
99
|
-
if (options?.offset)
|
|
100
|
-
params.set('offset', options.offset.toString());
|
|
101
|
-
if (options?.includeEmbedding)
|
|
102
|
-
params.set('include_embedding', 'true');
|
|
103
|
-
const path = `/api/v1/memories${params.toString() ? `?${params.toString()}` : ''}`;
|
|
104
|
-
const response = await this.request('GET', path);
|
|
105
|
-
const memories = response.items ?? [];
|
|
106
|
-
// 복호화
|
|
107
|
-
if (this.encryptionKey) {
|
|
108
|
-
return memories.map(memory => this.decryptMemory(memory));
|
|
109
|
-
}
|
|
110
|
-
return memories;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 메모리 복호화 헬퍼
|
|
114
|
-
*/
|
|
115
|
-
decryptMemory(memory) {
|
|
116
|
-
if (!this.encryptionKey)
|
|
117
|
-
return memory;
|
|
118
|
-
const decrypted = { ...memory };
|
|
119
|
-
// content 복호화
|
|
120
|
-
if (decrypted.content) {
|
|
121
|
-
const unwrapped = unwrapEncryptedContent(decrypted.content);
|
|
122
|
-
if (unwrapped) {
|
|
123
|
-
try {
|
|
124
|
-
decrypted.content = decryptContent(unwrapped, this.encryptionKey);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// 복호화 실패 시 원본 유지 (암호화되지 않은 데이터일 수 있음)
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return decrypted;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* 메모리 업데이트
|
|
135
|
-
*/
|
|
136
|
-
async updateMemory(id, updates) {
|
|
137
|
-
const response = await this.request('PUT', `/api/v1/memories/${id}`, updates);
|
|
138
|
-
return response;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* 메모리 삭제
|
|
142
|
-
*/
|
|
143
|
-
async deleteMemory(id) {
|
|
144
|
-
await this.request('DELETE', `/api/v1/memories/${id}`);
|
|
145
|
-
}
|
|
146
|
-
// ============================
|
|
147
|
-
// Team API
|
|
148
|
-
// ============================
|
|
149
|
-
/**
|
|
150
|
-
* 팀 목록 조회
|
|
151
|
-
*/
|
|
152
|
-
async listTeams() {
|
|
153
|
-
const response = await this.request('GET', '/api/v1/teams');
|
|
154
|
-
// 서버는 직접 배열 반환 (items 래퍼 없음)
|
|
155
|
-
if (Array.isArray(response))
|
|
156
|
-
return response;
|
|
157
|
-
return response.items ?? [];
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* 팀 메모리 목록
|
|
161
|
-
*/
|
|
162
|
-
async listTeamMemories(teamPath, options) {
|
|
163
|
-
const params = new URLSearchParams();
|
|
164
|
-
if (options?.limit)
|
|
165
|
-
params.set('limit', options.limit.toString());
|
|
166
|
-
if (options?.offset)
|
|
167
|
-
params.set('offset', options.offset.toString());
|
|
168
|
-
const qs = params.toString();
|
|
169
|
-
const path = `/teams/${encodeURIComponent(teamPath)}/memories${qs ? `?${qs}` : ''}`;
|
|
170
|
-
const response = await this.request('GET', path);
|
|
171
|
-
return response.items ?? [];
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* 팀 메모리 추가
|
|
175
|
-
*/
|
|
176
|
-
async addTeamMemory(teamPath, input) {
|
|
177
|
-
const response = await this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories`, input);
|
|
178
|
-
return response;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* 팀 메모리 검색
|
|
182
|
-
*/
|
|
183
|
-
async searchTeamMemories(teamPath, query, options) {
|
|
184
|
-
const response = await this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/search`, { query, limit: options?.limit ?? 10, category: options?.category });
|
|
185
|
-
return response.items ?? [];
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Delta 생성
|
|
189
|
-
*/
|
|
190
|
-
async generateDelta(teamPath, memoryId, vectorClock) {
|
|
191
|
-
return this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/sync/delta`, { memory_id: memoryId, vector_clock: vectorClock });
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Delta 적용
|
|
195
|
-
*/
|
|
196
|
-
async applyDelta(teamPath, memoryId, delta) {
|
|
197
|
-
return this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/sync/apply`, { memory_id: memoryId, delta });
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* 배치 메모리 생성 (최대 100개/요청)
|
|
201
|
-
*/
|
|
202
|
-
async createMemoriesBatch(items) {
|
|
203
|
-
const response = await this.request('POST', '/api/v1/memories/batch', { items });
|
|
204
|
-
return response;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* 연결 테스트
|
|
208
|
-
*/
|
|
209
|
-
async testConnection() {
|
|
210
|
-
try {
|
|
211
|
-
await this.request('GET', '/api/v1/memories?limit=1');
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// ============================
|
|
219
|
-
// Advanced API
|
|
220
|
-
// ============================
|
|
221
|
-
/**
|
|
222
|
-
* 컨텍스트 조합 (서버 고급 검색)
|
|
223
|
-
*/
|
|
224
|
-
async assembleContext(query, options) {
|
|
225
|
-
const response = await this.request('POST', '/api/v1/memories/assemble', {
|
|
226
|
-
query,
|
|
227
|
-
max_memories: options?.maxMemories ?? 5,
|
|
228
|
-
max_tokens: options?.maxTokens ?? 2000,
|
|
229
|
-
categories: options?.categories,
|
|
230
|
-
tier: options?.tier,
|
|
231
|
-
});
|
|
232
|
-
return response;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* 메모리 강화 (access_count 증가)
|
|
236
|
-
*/
|
|
237
|
-
async reinforceMemory(id) {
|
|
238
|
-
const response = await this.request('POST', `/api/v1/memories/${id}/reinforce`);
|
|
239
|
-
return response;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* 메모리 승격 (semantic tier로 고정)
|
|
243
|
-
* NOTE: 서버는 target_tier 파라미터를 무시하고 항상 semantic으로 승격합니다.
|
|
244
|
-
*/
|
|
245
|
-
async promoteMemory(id, _targetTier) {
|
|
246
|
-
const response = await this.request('POST', `/api/v1/memories/${id}/promote`);
|
|
247
|
-
return response;
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* 통계 조회
|
|
251
|
-
*/
|
|
252
|
-
async getStats() {
|
|
253
|
-
const response = await this.request('GET', '/api/v1/memories/stats');
|
|
254
|
-
return response;
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* 인기 태그 조회
|
|
258
|
-
*/
|
|
259
|
-
async getPopularTags(limit = 10) {
|
|
260
|
-
const params = new URLSearchParams();
|
|
261
|
-
params.set('limit', limit.toString());
|
|
262
|
-
const path = `/api/v1/memories/tags/popular?${params.toString()}`;
|
|
263
|
-
const response = await this.request('GET', path);
|
|
264
|
-
return response.items ?? [];
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* 팀 통계 조회
|
|
268
|
-
*/
|
|
269
|
-
async getTeamStats(teamPath) {
|
|
270
|
-
// team.py: GET /teams/{team_path}/memories/stats
|
|
271
|
-
const response = await this.request('GET', `/teams/${encodeURIComponent(teamPath)}/memories/stats`);
|
|
272
|
-
const data = response;
|
|
273
|
-
const stats = data.stats ?? data;
|
|
274
|
-
return {
|
|
275
|
-
totalMemories: stats.total_memories ?? 0,
|
|
276
|
-
totalNodes: stats.total_nodes ?? 0,
|
|
277
|
-
lastSyncedAt: stats.last_synced_at ?? null,
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
// ============================
|
|
281
|
-
// Proficiency API
|
|
282
|
-
// ============================
|
|
283
|
-
/**
|
|
284
|
-
* 숙련도 이벤트 전송
|
|
285
|
-
*/
|
|
286
|
-
async postProficiencyEvent(event) {
|
|
287
|
-
const response = await this.request('POST', '/api/v1/proficiency/event', {
|
|
288
|
-
skill_memory_id: event.skill_memory_id,
|
|
289
|
-
outcome: event.outcome,
|
|
290
|
-
difficulty: event.difficulty,
|
|
291
|
-
context_tags: event.context_tags,
|
|
292
|
-
session_id: event.session_id,
|
|
293
|
-
});
|
|
294
|
-
return response;
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* 배치 이벤트 전송 (오프라인 큐 flush용)
|
|
298
|
-
*/
|
|
299
|
-
async postProficiencyEventBatch(events) {
|
|
300
|
-
await this.request('POST', '/api/v1/proficiency/event/batch', { events });
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* 숙련도 목록 조회 (캐시용)
|
|
304
|
-
*/
|
|
305
|
-
async listProficiencies(projectPath) {
|
|
306
|
-
const params = new URLSearchParams();
|
|
307
|
-
params.set('page_size', '100');
|
|
308
|
-
if (projectPath)
|
|
309
|
-
params.set('project_path', projectPath);
|
|
310
|
-
const path = `/api/v1/proficiency?${params.toString()}`;
|
|
311
|
-
const response = await this.request('GET', path);
|
|
312
|
-
return (response.items ?? []);
|
|
313
|
-
}
|
|
314
|
-
// ============================
|
|
315
|
-
// Emotion API
|
|
316
|
-
// ============================
|
|
317
|
-
async analyzeEmotion(message) {
|
|
318
|
-
return this.request('POST', '/api/v1/personalization/emotion/analyze', {
|
|
319
|
-
message: message.slice(0, 500),
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
// ============================
|
|
323
|
-
// Transfer API
|
|
324
|
-
// ============================
|
|
325
|
-
/**
|
|
326
|
-
* 숙련도 내보내기
|
|
327
|
-
*/
|
|
328
|
-
async exportProficiencies(sourceProvider, skillIds) {
|
|
329
|
-
const response = await this.request('POST', '/api/v1/transfer/export', {
|
|
330
|
-
source_provider: sourceProvider,
|
|
331
|
-
skill_ids: skillIds ?? null,
|
|
332
|
-
});
|
|
333
|
-
return response;
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* 숙련도 가져오기
|
|
337
|
-
*/
|
|
338
|
-
async importProficiencies(pkg, targetProvider) {
|
|
339
|
-
const response = await this.request('POST', '/api/v1/transfer/import', {
|
|
340
|
-
package: pkg,
|
|
341
|
-
target_provider: targetProvider,
|
|
342
|
-
});
|
|
343
|
-
return response;
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* 호환성 매트릭스 조회
|
|
347
|
-
*/
|
|
348
|
-
async getCompatibilityMatrix() {
|
|
349
|
-
const response = await this.request('GET', '/api/v1/transfer/compatibility');
|
|
350
|
-
return (response.matrix ?? []);
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* 이식 이력 조회
|
|
354
|
-
*/
|
|
355
|
-
async getTransferHistory(page = 1) {
|
|
356
|
-
const params = new URLSearchParams();
|
|
357
|
-
params.set('page', page.toString());
|
|
358
|
-
const path = `/api/v1/transfer/history?${params.toString()}`;
|
|
359
|
-
const response = await this.request('GET', path);
|
|
360
|
-
return response;
|
|
361
|
-
}
|
|
362
|
-
// ============================
|
|
363
|
-
// File API
|
|
364
|
-
// ============================
|
|
365
|
-
/**
|
|
366
|
-
* 파일 업로드 (multipart/form-data)
|
|
367
|
-
* POST /api/v1/files/upload
|
|
368
|
-
*/
|
|
369
|
-
/**
|
|
370
|
-
* 파일 업로드 (multipart/form-data)
|
|
371
|
-
* POST /api/v1/files/upload
|
|
372
|
-
* 서버 응답: { file_id, filename, storage_path, content_hash, size }
|
|
373
|
-
*/
|
|
374
|
-
async uploadFile(filePath, options) {
|
|
375
|
-
const { readFileSync } = await import('node:fs');
|
|
376
|
-
const { basename } = await import('node:path');
|
|
377
|
-
const content = readFileSync(filePath);
|
|
378
|
-
const filename = basename(filePath);
|
|
379
|
-
const formData = new FormData();
|
|
380
|
-
formData.append('file', new Blob([content]), filename);
|
|
381
|
-
if (options.category) {
|
|
382
|
-
formData.append('category', options.category);
|
|
383
|
-
}
|
|
384
|
-
if (options.tags && options.tags.length > 0) {
|
|
385
|
-
formData.append('tags', options.tags.join(','));
|
|
386
|
-
}
|
|
387
|
-
const response = await this.requestMultipart('POST', '/api/v1/files/upload', formData);
|
|
388
|
-
const data = response;
|
|
389
|
-
return { id: data.file_id, filename: data.filename };
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* 파일 중복 확인
|
|
393
|
-
* POST /api/v1/files/check-duplicate { content_hash }
|
|
394
|
-
* 서버 응답: { is_duplicate: bool, existing_file?: { id, ... } }
|
|
395
|
-
*/
|
|
396
|
-
async checkFileDuplicate(contentHash) {
|
|
397
|
-
const response = await this.request('POST', '/api/v1/files/check-duplicate', {
|
|
398
|
-
content_hash: contentHash,
|
|
399
|
-
});
|
|
400
|
-
const data = response;
|
|
401
|
-
return {
|
|
402
|
-
exists: data.is_duplicate,
|
|
403
|
-
file_id: data.existing_file?.id,
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* 메모리-파일 연결 생성
|
|
408
|
-
* POST /api/v1/memory-files
|
|
409
|
-
*/
|
|
410
|
-
async createMemoryFileLink(memoryId, fileId, options) {
|
|
411
|
-
const response = await this.request('POST', '/api/v1/memory-files', {
|
|
412
|
-
memory_id: memoryId,
|
|
413
|
-
file_id: fileId,
|
|
414
|
-
reference_type: options.reference_type,
|
|
415
|
-
reference_path: options.reference_path,
|
|
416
|
-
});
|
|
417
|
-
return response;
|
|
418
|
-
}
|
|
419
|
-
// ============================
|
|
420
|
-
// MCG API
|
|
421
|
-
// ============================
|
|
422
|
-
/**
|
|
423
|
-
* MCG Context 생성
|
|
424
|
-
* POST /api/v1/mcg/contexts
|
|
425
|
-
*/
|
|
426
|
-
async createContext(data) {
|
|
427
|
-
return this.request('POST', '/api/v1/mcg/contexts', data);
|
|
428
|
-
}
|
|
429
|
-
/**
|
|
430
|
-
* MCG Context Member 추가
|
|
431
|
-
* POST /api/v1/mcg/contexts/{contextId}/members
|
|
432
|
-
*/
|
|
433
|
-
async addContextMember(contextId, data) {
|
|
434
|
-
return this.request('POST', `/api/v1/mcg/contexts/${contextId}/members`, data);
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* MCG Relation 생성
|
|
438
|
-
* POST /api/v1/mcg/relations
|
|
439
|
-
*/
|
|
440
|
-
async createRelation(data) {
|
|
441
|
-
return this.request('POST', '/api/v1/mcg/relations', data);
|
|
442
|
-
}
|
|
443
|
-
// ============================
|
|
444
|
-
// Taxonomy API
|
|
445
|
-
// ============================
|
|
446
|
-
/**
|
|
447
|
-
* 콘텐츠를 Taxonomy로 분류
|
|
448
|
-
* 서버가 없거나 실패 시 null 반환 (graceful degradation)
|
|
449
|
-
*/
|
|
450
|
-
async classifyContent(input) {
|
|
451
|
-
try {
|
|
452
|
-
const response = await this.request('POST', '/api/v1/taxonomy/classify', {
|
|
453
|
-
content: input.content.slice(0, 2000), // 길이 제한
|
|
454
|
-
tags: input.tags ?? [],
|
|
455
|
-
category: input.category,
|
|
456
|
-
});
|
|
457
|
-
const data = response;
|
|
458
|
-
if (data.success && data.result) {
|
|
459
|
-
return data.result;
|
|
460
|
-
}
|
|
461
|
-
return null;
|
|
462
|
-
}
|
|
463
|
-
catch {
|
|
464
|
-
return null; // 서버 연결 실패 등 모든 에러 무시
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
/** 재시도 가능한 상태 코드 (5xx, 429) */
|
|
468
|
-
static RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);
|
|
469
|
-
static MAX_RETRIES = 3;
|
|
470
|
-
static BASE_DELAY_MS = 1000;
|
|
471
|
-
/**
|
|
472
|
-
* HTTP 요청 실행 (5xx/429/네트워크 오류 시 최대 3회 재시도, exponential backoff)
|
|
473
|
-
*/
|
|
474
|
-
async request(method, path, body) {
|
|
475
|
-
let lastError;
|
|
476
|
-
for (let attempt = 0; attempt < A2AClient.MAX_RETRIES; attempt++) {
|
|
477
|
-
const url = `${this.config.baseUrl}${path}`;
|
|
478
|
-
const controller = new AbortController();
|
|
479
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
480
|
-
try {
|
|
481
|
-
const response = await fetch(url, {
|
|
482
|
-
method,
|
|
483
|
-
headers: {
|
|
484
|
-
'Content-Type': 'application/json',
|
|
485
|
-
'x-api-key': this.config.apiKey,
|
|
486
|
-
'X-Plugin-Version': _pluginVersion,
|
|
487
|
-
...(this.enabledFeatures.length > 0 && {
|
|
488
|
-
'X-Plugin-Features': this.enabledFeatures.join(','),
|
|
489
|
-
}),
|
|
490
|
-
},
|
|
491
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
492
|
-
signal: controller.signal,
|
|
493
|
-
});
|
|
494
|
-
clearTimeout(timeoutId);
|
|
495
|
-
// 재시도 가능한 상태 코드 (5xx, 429)
|
|
496
|
-
if (A2AClient.RETRYABLE_STATUS.has(response.status) && attempt < A2AClient.MAX_RETRIES - 1) {
|
|
497
|
-
const delay = A2AClient.BASE_DELAY_MS * Math.pow(2, attempt); // 1s → 2s → 4s
|
|
498
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
499
|
-
continue;
|
|
500
|
-
}
|
|
501
|
-
if (!response.ok) {
|
|
502
|
-
await this.handleErrorResponse(response);
|
|
503
|
-
}
|
|
504
|
-
// DELETE는 빈 응답일 수 있음
|
|
505
|
-
if (method === 'DELETE' && response.status === 204) {
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
return await response.json();
|
|
509
|
-
}
|
|
510
|
-
catch (error) {
|
|
511
|
-
clearTimeout(timeoutId);
|
|
512
|
-
if (error instanceof Error) {
|
|
513
|
-
// 401, 403, 404 등 클라이언트 에러는 즉시 throw (재시도 무의미)
|
|
514
|
-
if (error.message.startsWith('인증 실패') ||
|
|
515
|
-
error.message.startsWith('HTTP 403') ||
|
|
516
|
-
error.message.startsWith('HTTP 404') ||
|
|
517
|
-
error.message.startsWith('HTTP 422')) {
|
|
518
|
-
throw error;
|
|
519
|
-
}
|
|
520
|
-
// 네트워크 에러 또는 타임아웃: 재시도 가능
|
|
521
|
-
if (attempt < A2AClient.MAX_RETRIES - 1) {
|
|
522
|
-
lastError = error;
|
|
523
|
-
const delay = A2AClient.BASE_DELAY_MS * Math.pow(2, attempt);
|
|
524
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
525
|
-
continue;
|
|
526
|
-
}
|
|
527
|
-
if (error.name === 'AbortError') {
|
|
528
|
-
throw new Error(`요청 시간 초과: ${this.timeout}ms를 넘었습니다`);
|
|
529
|
-
}
|
|
530
|
-
throw new Error(`네트워크 오류: ${error.message}`);
|
|
531
|
-
}
|
|
532
|
-
throw error;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
// 모든 재시도 실패
|
|
536
|
-
throw lastError ?? new Error(`요청 실패: ${A2AClient.MAX_RETRIES}회 재시도 후 실패`);
|
|
537
|
-
}
|
|
538
|
-
/**
|
|
539
|
-
* multipart/form-data 요청 실행 (파일 업로드 전용)
|
|
540
|
-
* Content-Type 헤더를 직접 설정하지 않아야 브라우저/Node가 boundary를 자동 설정합니다.
|
|
541
|
-
*/
|
|
542
|
-
async requestMultipart(method, path, body) {
|
|
543
|
-
const url = `${this.config.baseUrl}${path}`;
|
|
544
|
-
const controller = new AbortController();
|
|
545
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
546
|
-
try {
|
|
547
|
-
const response = await fetch(url, {
|
|
548
|
-
method,
|
|
549
|
-
headers: {
|
|
550
|
-
'x-api-key': this.config.apiKey,
|
|
551
|
-
'X-Plugin-Version': _pluginVersion,
|
|
552
|
-
},
|
|
553
|
-
body,
|
|
554
|
-
signal: controller.signal,
|
|
555
|
-
});
|
|
556
|
-
clearTimeout(timeoutId);
|
|
557
|
-
if (!response.ok) {
|
|
558
|
-
await this.handleErrorResponse(response);
|
|
559
|
-
}
|
|
560
|
-
return await response.json();
|
|
561
|
-
}
|
|
562
|
-
catch (error) {
|
|
563
|
-
clearTimeout(timeoutId);
|
|
564
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
565
|
-
throw new Error(`요청 시간 초과: ${this.timeout}ms를 넘었습니다`);
|
|
566
|
-
}
|
|
567
|
-
throw error;
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* 에러 응답 처리
|
|
572
|
-
*/
|
|
573
|
-
async handleErrorResponse(response) {
|
|
574
|
-
const status = response.status;
|
|
575
|
-
if (status === 401) {
|
|
576
|
-
throw new Error('인증 실패: API Key를 확인하세요');
|
|
577
|
-
}
|
|
578
|
-
if (status === 429) {
|
|
579
|
-
throw new Error('요청 제한: 잠시 후 다시 시도하세요');
|
|
580
|
-
}
|
|
581
|
-
let message = `HTTP ${status}`;
|
|
582
|
-
try {
|
|
583
|
-
const errorBody = await response.json();
|
|
584
|
-
if (errorBody.detail) {
|
|
585
|
-
message += `: ${errorBody.detail}`;
|
|
586
|
-
}
|
|
587
|
-
else if (errorBody.message) {
|
|
588
|
-
message += `: ${errorBody.message}`;
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
catch {
|
|
592
|
-
// JSON 파싱 실패 시 기본 메시지 사용
|
|
593
|
-
}
|
|
594
|
-
throw new Error(message);
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
//# sourceMappingURL=client.js.map
|
|
1
|
+
(function(_0x55b30e,_0x5e5606){function _0x143177(_0x3e894b,_0x172b47){return _0x471d(_0x172b47-0x3bc,_0x3e894b);}const _0x1c710d=_0x55b30e();function _0x56717f(_0x4e508b,_0x74d42){return _0x471d(_0x74d42-0x33e,_0x4e508b);}while(!![]){try{const _0x3e9d45=-parseInt(_0x143177(0x464,0x4b7))/0x1*(-parseInt(_0x56717f(0x45c,0x41a))/0x2)+-parseInt(_0x56717f(0x423,0x417))/0x3*(-parseInt(_0x56717f(0x3f2,0x3e1))/0x4)+parseInt(_0x56717f(0x46b,0x490))/0x5*(parseInt(_0x56717f(0x3d5,0x3e4))/0x6)+parseInt(_0x143177(0x3ec,0x42c))/0x7+-parseInt(_0x143177(0x51a,0x4b3))/0x8*(parseInt(_0x56717f(0x503,0x4a1))/0x9)+-parseInt(_0x56717f(0x432,0x413))/0xa*(parseInt(_0x143177(0x4e7,0x4df))/0xb)+-parseInt(_0x143177(0x4d2,0x4ad))/0xc*(parseInt(_0x143177(0x4aa,0x493))/0xd);if(_0x3e9d45===_0x5e5606)break;else _0x1c710d['push'](_0x1c710d['shift']());}catch(_0x11018b){_0x1c710d['push'](_0x1c710d['shift']());}}}(_0x45e3,0x530cb));function _0x12e6f3(_0x2b2c86,_0x3b50d7){return _0x471d(_0x2b2c86-0x336,_0x3b50d7);}function _0x471d(_0x56f9d7,_0x359f90){_0x56f9d7=_0x56f9d7-0x69;const _0x45e3a0=_0x45e3();let _0x471d44=_0x45e3a0[_0x56f9d7];if(_0x471d['SmYoZI']===undefined){var _0x39c645=function(_0xeeed45){const _0x4c365b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x17a1e5='',_0x273cb7='';for(let _0x36b125=0x0,_0xfd8731,_0x577ccc,_0x5af6c2=0x0;_0x577ccc=_0xeeed45['charAt'](_0x5af6c2++);~_0x577ccc&&(_0xfd8731=_0x36b125%0x4?_0xfd8731*0x40+_0x577ccc:_0x577ccc,_0x36b125++%0x4)?_0x17a1e5+=String['fromCharCode'](0xff&_0xfd8731>>(-0x2*_0x36b125&0x6)):0x0){_0x577ccc=_0x4c365b['indexOf'](_0x577ccc);}for(let _0x4318df=0x0,_0x4c6564=_0x17a1e5['length'];_0x4318df<_0x4c6564;_0x4318df++){_0x273cb7+='%'+('00'+_0x17a1e5['charCodeAt'](_0x4318df)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x273cb7);};_0x471d['FpLqxv']=_0x39c645,_0x471d['GEQlxb']={},_0x471d['SmYoZI']=!![];}const _0x2c335b=_0x45e3a0[0x0],_0x1a151d=_0x56f9d7+_0x2c335b,_0x2280b1=_0x471d['GEQlxb'][_0x1a151d];return!_0x2280b1?(_0x471d44=_0x471d['FpLqxv'](_0x471d44),_0x471d['GEQlxb'][_0x1a151d]=_0x471d44):_0x471d44=_0x2280b1,_0x471d44;}import{encryptContent,decryptContent,wrapEncryptedContent,unwrapEncryptedContent}from'./encryption.js';let _pluginVersion=_0x12e6f3(0x42c,0x3bd);function _0x13c324(_0x132023,_0x1cab5e){return _0x471d(_0x132023- -0xad,_0x1cab5e);}try{const {readFileSync}=await import(_0x12e6f3(0x42b,0x425)),{fileURLToPath}=await import('node:url'),{dirname,join}=await import(_0x12e6f3(0x3e4,0x365)),__dirname=dirname(fileURLToPath(import.meta.url)),pkg=JSON[_0x12e6f3(0x458,0x4ad)](readFileSync(join(__dirname,'../../pack'+'age.json'),_0x13c324(0x69,-0x3)));_pluginVersion=pkg[_0x13c324(0xb4,0xf9)]||'0.0.0';}catch{}export class A2AClient{[_0x12e6f3(0x43c,0x49e)];[_0x13c324(0x9a,0x5f)];[_0x12e6f3(0x476,0x482)+_0x13c324(0x2d,0x49)]=null;[_0x13c324(0x1c,0x1e)+_0x12e6f3(0x460,0x4e5)]=[];constructor(_0xc6dc4f){this[_0x13d760(0x21b,0x238)]=_0xc6dc4f;function _0x129f7d(_0x2b5576,_0x3da831){return _0x13c324(_0x2b5576- -0x1cc,_0x3da831);}function _0x13d760(_0x5b4be8,_0x102437){return _0x13c324(_0x5b4be8-0x1c2,_0x102437);}this['timeout']=_0xc6dc4f[_0x129f7d(-0x132,-0x157)]??0xea60;}[_0x12e6f3(0x41c,0x44f)+'Features'](_0x1c4753){function _0x2a9172(_0x12844b,_0x470bdd){return _0x12e6f3(_0x12844b- -0x98,_0x470bdd);}function _0x48f467(_0x39376e,_0x4a82a7){return _0x12e6f3(_0x4a82a7- -0x5ab,_0x39376e);}this[_0x48f467(-0x153,-0x1ac)+_0x48f467(-0x12d,-0x14b)]=_0x1c4753;}['setEncrypt'+_0x12e6f3(0x3ba,0x3f2)](_0x27cdcc){const _0x129386={'EeWLK':function(_0x450873,_0x554733){return _0x450873!==_0x554733;},'YZbEV':'암호화\x20키는\x2032\x20'+_0x350cc1(0x5dd,0x55a)+'다'};if(_0x129386[_0x4944db(0x254,0x226)](_0x27cdcc[_0x350cc1(0x50d,0x4e3)],0x20))throw new Error(_0x129386[_0x350cc1(0x44d,0x473)]);function _0x350cc1(_0x4f485a,_0xfc0d21){return _0x12e6f3(_0xfc0d21-0xb1,_0x4f485a);}function _0x4944db(_0x2e7f2a,_0xb3eefa){return _0x12e6f3(_0x2e7f2a- -0x16d,_0xb3eefa);}this[_0x350cc1(0x54f,0x527)+'Key']=_0x27cdcc;}['clearEncry'+_0x12e6f3(0x3c3,0x372)](){function _0x5805b3(_0x4e972c,_0x192175){return _0x13c324(_0x192175- -0x5a,_0x4e972c);}function _0x10fcb8(_0x5f40ce,_0x384640){return _0x13c324(_0x5f40ce-0x484,_0x384640);}this[_0x5805b3(0x42,0x39)+_0x5805b3(-0x80,-0x2d)]=null;}['isEncrypti'+_0x13c324(0x82,0x6b)](){function _0x2f1393(_0xa7578,_0x4a7fc3){return _0x12e6f3(_0xa7578- -0x711,_0x4a7fc3);}function _0x83fa3e(_0x1b1a30,_0x17e6f6){return _0x12e6f3(_0x1b1a30- -0x594,_0x17e6f6);}const _0x1d253a={'fVdFI':function(_0x2f0fe4,_0xfee800){return _0x2f0fe4!==_0xfee800;}};return _0x1d253a[_0x2f1393(-0x330,-0x3b4)](this[_0x83fa3e(-0x11e,-0xc1)+_0x2f1393(-0x301,-0x317)],null);}async[_0x12e6f3(0x42f,0x44f)+'ry'](_0x45d13f){const _0x3d3dc4={'ANUWF':_0x335602(0x202,0x193)+_0x4d53b7(0x26b,0x223)+'다','thoWd':_0x335602(0x158,0x1ac),'cLlCs':function(_0x5edd84,_0x37f064){return _0x5edd84(_0x37f064);},'UIqWC':function(_0x1fe010,_0x6cb3a8,_0x1fe50d){return _0x1fe010(_0x6cb3a8,_0x1fe50d);}};let _0x470876=_0x45d13f[_0x335602(0x23e,0x228)];function _0x335602(_0x2b3438,_0x32de72){return _0x12e6f3(_0x2b3438- -0x253,_0x32de72);}if(this['encryption'+_0x4d53b7(0x1fc,0x18a)]){const _0x45f32b=encryptContent(_0x45d13f[_0x335602(0x23e,0x1cd)],this[_0x4d53b7(0x231,0x1f0)+_0x4d53b7(0x20d,0x18a)]);_0x470876=wrapEncryptedContent(_0x45f32b);}const _0x375287=await this[_0x4d53b7(0x256,0x204)](_0x3d3dc4[_0x4d53b7(0x147,0x1b9)],_0x4d53b7(0x285,0x20d)+_0x4d53b7(0x1c1,0x15a),{'content':_0x470876,'category':_0x45d13f['category'],'tier':_0x45d13f[_0x4d53b7(0x154,0x1aa)],'tags':_0x45d13f[_0x4d53b7(0x1af,0x21d)]??[]});function _0x4d53b7(_0x345ee1,_0x483524){return _0x12e6f3(_0x483524- -0x286,_0x345ee1);}const _0x2c1a74=_0x375287;if(this[_0x335602(0x223,0x1d5)+_0x335602(0x1bd,0x18e)]&&_0x2c1a74[_0x4d53b7(0x25d,0x20b)]){const _0x44ae35=_0x3d3dc4['cLlCs'](unwrapEncryptedContent,_0x2c1a74[_0x335602(0x23e,0x202)]);if(_0x44ae35){if(_0x335602(0x18a,0x19f)===_0x4d53b7(0xdc,0x136))throw new _0x580574(fSpfNg[_0x335602(0x22d,0x280)]);else _0x2c1a74['content']=_0x3d3dc4[_0x335602(0x1f4,0x1d4)](decryptContent,_0x44ae35,this[_0x335602(0x223,0x1cc)+'Key']);}}return _0x2c1a74;}async[_0x13c324(-0x2c,0x4a)+_0x13c324(-0x10,0x6)](_0xfefc40,_0x30e9b7){function _0x431bc3(_0x32a595,_0x472eb7){return _0x13c324(_0x32a595- -0xbd,_0x472eb7);}function _0x5e3c5c(_0x220fed,_0x3721f8){return _0x13c324(_0x3721f8-0x493,_0x220fed);}const _0x4e447e=await this['request'](_0x431bc3(-0xf5,-0x17a),_0x5e3c5c(0x597,0x543)+'mories/sea'+_0x431bc3(-0x83,-0x90),{'query':_0xfefc40,'limit':_0x30e9b7?.[_0x5e3c5c(0x456,0x463)]??0xa,'category':_0x30e9b7?.[_0x431bc3(-0xb2,-0x7d)]});return _0x4e447e[_0x431bc3(-0xa,-0x48)]??[];}async[_0x12e6f3(0x443,0x42b)+'es'](_0x100112){function _0x1904ec(_0x254c29,_0x4bbafc){return _0x13c324(_0x254c29-0x386,_0x4bbafc);}function _0x1bc1a5(_0x5c14ce,_0x14d2ab){return _0x13c324(_0x14d2ab- -0xe9,_0x5c14ce);}const _0x274d49={'HBSve':_0x1bc1a5(-0x83,-0x6f)+_0x1904ec(0x402,0x432)},_0x597dc6=new URLSearchParams();if(_0x100112?.[_0x1bc1a5(-0x9c,-0x119)])_0x597dc6[_0x1904ec(0x38a,0x36c)](_0x1bc1a5(-0x192,-0x119),_0x100112['limit']['toString']());if(_0x100112?.[_0x1bc1a5(-0x15c,-0x10e)])_0x597dc6[_0x1904ec(0x38a,0x3e3)](_0x1bc1a5(-0xb6,-0x10e),_0x100112['offset'][_0x1904ec(0x392,0x30e)]());if(_0x100112?.['includeEmb'+_0x1904ec(0x440,0x479)])_0x597dc6['set'](_0x274d49[_0x1904ec(0x3d9,0x441)],_0x1904ec(0x40e,0x468));const _0x3a866f='/api/v1/me'+'mories'+(_0x597dc6[_0x1bc1a5(-0x6d,-0xdd)]()?'?'+_0x597dc6['toString']():''),_0xcfcdc7=await this['request']('GET',_0x3a866f),_0x56d087=_0xcfcdc7[_0x1904ec(0x439,0x429)]??[];if(this['encryption'+_0x1bc1a5(-0xdc,-0xbc)])return _0x56d087['map'](_0x22e3f7=>this['decryptMem'+_0x1bc1a5(-0x5,-0x63)](_0x22e3f7));return _0x56d087;}[_0x13c324(0x94,0xc4)+_0x12e6f3(0x469,0x4c1)](_0x4cf9d1){function _0x516e18(_0x48a362,_0x31536d){return _0x12e6f3(_0x48a362- -0x32,_0x31536d);}function _0x3fc96e(_0x20cd4c,_0x997a46){return _0x12e6f3(_0x997a46- -0x622,_0x20cd4c);}const _0x236c6f={'OcjJZ':function(_0x3d690a,_0x1630c0){return _0x3d690a!==_0x1630c0;},'hkuBg':_0x3fc96e(-0x25e,-0x219),'hzenN':function(_0x39647c,_0x368118,_0x21af91){return _0x39647c(_0x368118,_0x21af91);}};if(!this[_0x516e18(0x444,0x3f1)+_0x516e18(0x3de,0x424)])return _0x4cf9d1;const _0x3ac933={..._0x4cf9d1};if(_0x3ac933[_0x516e18(0x45f,0x435)]){const _0x3b2ee5=unwrapEncryptedContent(_0x3ac933['content']);if(_0x3b2ee5)try{if(_0x236c6f[_0x3fc96e(-0x288,-0x240)](_0x3fc96e(-0x195,-0x219),_0x236c6f[_0x3fc96e(-0x20a,-0x220)]))throw new _0x3f97f8(_0x3fc96e(-0x25c,-0x271)+this[_0x516e18(0x44b,0x41a)]+'ms를\x20넘었습니다');else _0x3ac933[_0x516e18(0x45f,0x4b1)]=_0x236c6f[_0x516e18(0x3b8,0x378)](decryptContent,_0x3b2ee5,this[_0x3fc96e(-0x178,-0x1ac)+_0x3fc96e(-0x230,-0x212)]);}catch{}}return _0x3ac933;}async['updateMemo'+'ry'](_0x2b7ef0,_0x3d78ad){function _0x4f21bc(_0x4f64f6,_0x1f34c2){return _0x12e6f3(_0x4f64f6- -0x41,_0x1f34c2);}const _0x20e990={'EJZUP':_0x4f21bc(0x430,0x413)},_0x52ca2a=await this[_0x1a77cf(-0x1c2,-0x1cb)](_0x20e990[_0x1a77cf(-0x2ac,-0x274)],_0x4f21bc(0x452,0x3d7)+_0x1a77cf(-0x203,-0x218)+_0x2b7ef0,_0x3d78ad);function _0x1a77cf(_0x1fffa3,_0x488931){return _0x12e6f3(_0x1fffa3- -0x64c,_0x488931);}return _0x52ca2a;}async[_0x13c324(0xa3,0xa8)+'ry'](_0x433649){function _0x12da10(_0x305516,_0x5c087d){return _0x12e6f3(_0x5c087d- -0x53,_0x305516);}function _0x337564(_0x455d8b,_0x4480cd){return _0x12e6f3(_0x4480cd- -0xb0,_0x455d8b);}await this[_0x337564(0x3a7,0x3da)](_0x12da10(0x44d,0x3f7),_0x12da10(0x472,0x440)+'mories/'+_0x433649);}async[_0x13c324(0x23,0xc)](){const _0x4b3f65={'zGjFV':_0x11328f(-0x10b,-0x168),'zMpEn':'/api/v1/te'+_0x11328f(-0x173,-0x13d)};function _0x256b82(_0x5a72da,_0x34da0c){return _0x13c324(_0x34da0c- -0x19f,_0x5a72da);}const _0x58f882=await this['request'](_0x4b3f65[_0x11328f(-0x9a,-0xe2)],_0x4b3f65['zMpEn']);if(Array[_0x256b82(-0x104,-0xf7)](_0x58f882))return _0x58f882;function _0x11328f(_0x59c0ff,_0x56ad0d){return _0x13c324(_0x56ad0d- -0x124,_0x59c0ff);}return _0x58f882[_0x256b82(-0x158,-0xec)]??[];}async[_0x13c324(0x1e,0xa0)+'mories'](_0x4a2c50,_0x5274b0){const _0x11d20c={'IWKru':_0xfb2f5d(-0x2b3,-0x275)},_0x24485b=new URLSearchParams();function _0x54ab95(_0x1d4701,_0x13544f){return _0x12e6f3(_0x1d4701- -0x426,_0x13544f);}if(_0x5274b0?.[_0x54ab95(-0x73,-0x1e)])_0x24485b[_0xfb2f5d(-0x28a,-0x2d5)](_0xfb2f5d(-0x2be,-0x246),_0x5274b0[_0x54ab95(-0x73,-0x96)][_0xfb2f5d(-0x282,-0x2bb)]());if(_0x5274b0?.[_0x54ab95(-0x68,-0x9e)])_0x24485b[_0x54ab95(-0x3f,0x28)](_0x11d20c['IWKru'],_0x5274b0[_0x54ab95(-0x68,-0x3c)][_0x54ab95(-0x37,-0x54)]());const _0x211f2d=_0x24485b[_0xfb2f5d(-0x282,-0x2b8)](),_0x5c45d8=_0x54ab95(-0x21,-0x47)+encodeURIComponent(_0x4a2c50)+_0x54ab95(0x55,0x61)+(_0x211f2d?'?'+_0x211f2d:'');function _0xfb2f5d(_0x27b715,_0x502e76){return _0x12e6f3(_0x27b715- -0x671,_0x502e76);}const _0x24e343=await this[_0x54ab95(0x64,0xe4)]('GET',_0x5c45d8);return _0x24e343['items']??[];}async['addTeamMem'+'ory'](_0xe59d8,_0x4992d4){const _0x17ef5b={'AyROG':function(_0x5e3a39,_0x113ff2){return _0x5e3a39(_0x113ff2);}};function _0x7848db(_0x35ee63,_0x1a6832){return _0x13c324(_0x1a6832-0x22a,_0x35ee63);}function _0x28be31(_0xd29342,_0x43f726){return _0x13c324(_0x43f726-0x48d,_0xd29342);}const _0x250069=await this[_0x7848db(0x24e,0x2d1)](_0x28be31(0x423,0x455),_0x28be31(0x47d,0x4af)+_0x17ef5b['AyROG'](encodeURIComponent,_0xe59d8)+'/memories',_0x4992d4);return _0x250069;}async[_0x13c324(0x36,0x8)+_0x13c324(-0xf,-0x6d)](_0x598e04,_0x1dc2b1,_0x19f49f){const _0x39f1c6=await this[_0x5a6a3f(-0x136,-0x16f)](_0x2a329b(0x1d6,0x1ae),_0x5a6a3f(-0x250,-0x1f4)+encodeURIComponent(_0x598e04)+(_0x2a329b(0x22d,0x1d9)+_0x2a329b(0x282,0x21e)),{'query':_0x1dc2b1,'limit':_0x19f49f?.[_0x2a329b(0x201,0x1b6)]??0xa,'category':_0x19f49f?.[_0x5a6a3f(-0x23b,-0x20b)]});function _0x2a329b(_0x271605,_0x1d5d85){return _0x13c324(_0x1d5d85-0x1e6,_0x271605);}function _0x5a6a3f(_0x32f6df,_0x12fec3){return _0x13c324(_0x12fec3- -0x216,_0x32f6df);}return _0x39f1c6[_0x2a329b(0x28f,0x299)]??[];}async[_0x12e6f3(0x3cb,0x445)+_0x13c324(0x8a,0x85)](_0x2f649c,_0x5eb672,_0x27a3f4){function _0x512941(_0x56d883,_0x31bf9e){return _0x13c324(_0x31bf9e-0x1a7,_0x56d883);}const _0x42055d={'iiZJq':function(_0x22a824,_0xea2c8d){return _0x22a824(_0xea2c8d);}};function _0x5c47af(_0x5714af,_0x555d13){return _0x13c324(_0x5714af-0x1fd,_0x555d13);}return this[_0x512941(0x1d2,0x24e)](_0x5c47af(0x1c5,0x160),_0x5c47af(0x21f,0x23b)+_0x42055d[_0x5c47af(0x255,0x255)](encodeURIComponent,_0x2f649c)+('/memories/'+'sync/delta'),{'memory_id':_0x5eb672,'vector_clock':_0x27a3f4});}async['applyDelta'](_0x2922a5,_0x51c462,_0x2ca10e){const _0x4559a7={'jrHCe':_0x1e9f3f(-0x34a,-0x36a)};function _0x46cf9e(_0x3f04e9,_0x5132a7){return _0x12e6f3(_0x5132a7- -0x31c,_0x3f04e9);}function _0x1e9f3f(_0x5ebb14,_0xc2a5c8){return _0x12e6f3(_0xc2a5c8- -0x715,_0x5ebb14);}return this['request'](_0x4559a7['jrHCe'],_0x46cf9e(0xe6,0xe9)+encodeURIComponent(_0x2922a5)+(_0x46cf9e(0xea,0xba)+_0x1e9f3f(-0x265,-0x294)),{'memory_id':_0x51c462,'delta':_0x2ca10e});}async['createMemo'+_0x13c324(0x7e,0x30)](_0x594614){function _0x413024(_0x18b442,_0x363eee){return _0x13c324(_0x363eee-0x8a,_0x18b442);}function _0x500546(_0x573c6e,_0x4fa2e6){return _0x13c324(_0x4fa2e6- -0x1cd,_0x573c6e);}const _0x45b4a3=await this[_0x500546(-0x124,-0x126)](_0x500546(-0x1ec,-0x205),_0x500546(-0x183,-0x11d)+'mories/bat'+'ch',{'items':_0x594614});return _0x45b4a3;}async[_0x13c324(0x9f,0x90)+'tion'](){function _0x186140(_0x3cf481,_0x52d745){return _0x13c324(_0x52d745-0x425,_0x3cf481);}function _0x220437(_0x2eb761,_0x4036c8){return _0x13c324(_0x4036c8-0x2be,_0x2eb761);}try{return await this[_0x220437(0x321,0x365)](_0x186140(0x454,0x3e1),'/api/v1/me'+_0x220437(0x317,0x36d)+'it=1'),!![];}catch{return![];}}async[_0x13c324(0x34,0xb2)+_0x13c324(0x43,0x52)](_0x25c738,_0x352636){function _0xc68215(_0x266b2f,_0x5f2f5c){return _0x13c324(_0x266b2f-0x255,_0x5f2f5c);}function _0x6ff3e1(_0x5e4a06,_0x5e6b12){return _0x13c324(_0x5e6b12- -0xe6,_0x5e4a06);}const _0x16aee6={'JUFdE':_0xc68215(0x21d,0x217),'AXeYl':_0xc68215(0x305,0x300)+'mories/ass'+_0x6ff3e1(-0x20,-0x45)},_0x54ae08=await this[_0x6ff3e1(-0x9a,-0x3f)](_0x16aee6[_0xc68215(0x2b2,0x26a)],_0x16aee6[_0x6ff3e1(-0x1a,-0x27)],{'query':_0x25c738,'max_memories':_0x352636?.[_0x6ff3e1(-0x75,-0x39)+'s']??0x5,'max_tokens':_0x352636?.[_0x6ff3e1(-0x78,-0xdc)]??0x7d0,'categories':_0x352636?.[_0xc68215(0x263,0x27a)],'tier':_0x352636?.[_0xc68215(0x2a2,0x280)]});return _0x54ae08;}async['reinforceM'+_0x12e6f3(0x3de,0x3e3)](_0x5d6b26){const _0x82f26={'bVlQY':_0x24d9eb(0x221,0x1cb)};function _0x1eac4e(_0x21046b,_0x4f7f15){return _0x12e6f3(_0x21046b-0x3e,_0x4f7f15);}function _0x24d9eb(_0x47a147,_0x2afffa){return _0x12e6f3(_0x2afffa- -0x1e0,_0x47a147);}const _0x556749=await this['request'](_0x82f26['bVlQY'],_0x1eac4e(0x4d1,0x46b)+_0x1eac4e(0x487,0x4ca)+_0x5d6b26+_0x24d9eb(0x25e,0x253));return _0x556749;}async[_0x12e6f3(0x45b,0x450)+_0x13c324(0xa4,0x30)+_0x13c324(-0x34,0x1c)](_0x2a7544,_0x10d4a7){function _0x20c0b2(_0xc37154,_0x577cbb){return _0x12e6f3(_0xc37154- -0x106,_0x577cbb);}const _0x17a116={'wYmTg':_0x238a14(0x2fa,0x27b),'PKdRh':function(_0x30a82e,_0x2da745){return _0x30a82e(_0x2da745);}};function _0x238a14(_0x2a43c8,_0x38a2ad){return _0x12e6f3(_0x2a43c8- -0xb1,_0x38a2ad);}try{await this['request'](_0x17a116[_0x20c0b2(0x34a,0x340)],'/api/v1/me'+_0x238a14(0x398,0x3b8)+_0x2a7544+'/reinforce',{'success':_0x10d4a7});}catch(_0x53573f){console[_0x20c0b2(0x2ef,0x2cf)]('[a2a]\x20rein'+_0x20c0b2(0x2b9,0x237)+'yFeedback\x20'+_0x238a14(0x3bd,0x3c7)+'\x20'+_0x2a7544+':',_0x53573f instanceof Error?_0x53573f[_0x238a14(0x3c3,0x3bf)]:_0x17a116[_0x238a14(0x3f5,0x37a)](String,_0x53573f));}}async[_0x12e6f3(0x3df,0x390)+'ory'](_0x14f4ea,_0x16bc45){function _0x9f6962(_0x2abf0a,_0xfda9b1){return _0x12e6f3(_0xfda9b1- -0x226,_0x2abf0a);}const _0x125154=await this[_0x493029(0x9b,0x23)]('POST',_0x9f6962(0x1ed,0x26d)+'mories/'+_0x14f4ea+_0x9f6962(0x248,0x23d));function _0x493029(_0xfc2ae7,_0xc119c7){return _0x12e6f3(_0xfc2ae7- -0x3ef,_0xc119c7);}return _0x125154;}async[_0x12e6f3(0x441,0x439)](){function _0x3b3e34(_0x20bc03,_0x4d56f6){return _0x13c324(_0x4d56f6-0x2d9,_0x20bc03);}const _0x146b4a={'ePEMU':_0x55edec(-0x13a,-0xb6)+_0x3b3e34(0x23f,0x2a4)+'ts'},_0xfcfc0a=await this[_0x55edec(-0x126,-0xbf)](_0x55edec(-0x1bd,-0x1aa),_0x146b4a[_0x3b3e34(0x35f,0x38a)]);function _0x55edec(_0x2eb3ba,_0x50343e){return _0x13c324(_0x50343e- -0x166,_0x2eb3ba);}return _0xfcfc0a;}async['getPopular'+'Tags'](_0x5e11fd=0xa){function _0x385761(_0x229c29,_0x1ade28){return _0x12e6f3(_0x1ade28-0x24,_0x229c29);}function _0x139526(_0x5b5c7b,_0x1393b8){return _0x12e6f3(_0x5b5c7b-0xae,_0x1393b8);}const _0x5a91e6={'ePjTx':_0x139526(0x461,0x4e3),'UeWsw':'GET'},_0x289143=new URLSearchParams();_0x289143[_0x385761(0x452,0x40b)](_0x5a91e6['ePjTx'],_0x5e11fd[_0x139526(0x49d,0x511)]());const _0x23334b=_0x139526(0x541,0x4de)+_0x139526(0x4a6,0x518)+_0x385761(0x440,0x49e)+_0x289143[_0x139526(0x49d,0x50e)](),_0x2f118e=await this['request'](_0x5a91e6['UeWsw'],_0x23334b);return _0x2f118e['items']??[];}async['getTeamSta'+'ts'](_0x209303){const _0x5e2d6d={'UgNgC':function(_0x56f414,_0x2f4030){return _0x56f414(_0x2f4030);}},_0x46e29a=await this[_0x483876(0x2e9,0x2f9)]('GET',_0x483876(0x2c0,0x274)+_0x5e2d6d[_0x483876(0x345,0x2c0)](encodeURIComponent,_0x209303)+(_0x3d5cd8(-0x6d,0x3)+_0x3d5cd8(-0x2f,-0x21)));function _0x483876(_0x5a8762,_0x3598fb){return _0x12e6f3(_0x3598fb- -0x191,_0x5a8762);}const _0x248510=_0x46e29a,_0x2be2a7=_0x248510['stats']??_0x248510;function _0x3d5cd8(_0x5934d5,_0x59c700){return _0x12e6f3(_0x5934d5- -0x443,_0x59c700);}return{'totalMemories':_0x2be2a7[_0x483876(0x335,0x314)+_0x483876(0x234,0x242)]??0x0,'totalNodes':_0x2be2a7['total_node'+'s']??0x0,'lastSyncedAt':_0x2be2a7['last_synce'+_0x483876(0x1f8,0x25b)]??null};}async[_0x12e6f3(0x41e,0x3a8)+_0x13c324(0xb2,0xce)](_0x13ea39){function _0x4828a5(_0x2e91ef,_0x5cadeb){return _0x13c324(_0x5cadeb- -0x2c6,_0x2e91ef);}const _0x293646={'eNhEc':_0x4a30f0(0x12e,0x177)};function _0x4a30f0(_0x179bdc,_0x2e6573){return _0x13c324(_0x2e6573-0x1af,_0x179bdc);}const _0x3a7175=await this[_0x4828a5(-0x282,-0x21f)](_0x293646[_0x4a30f0(0x1ea,0x248)],_0x4a30f0(0x263,0x251)+_0x4a30f0(0x19d,0x16f)+_0x4a30f0(0x2db,0x258),{'skill_memory_id':_0x13ea39['skill_memo'+_0x4828a5(-0x29e,-0x255)],'outcome':_0x13ea39[_0x4a30f0(0x1bd,0x1f0)],'difficulty':_0x13ea39['difficulty'],'context_tags':_0x13ea39[_0x4a30f0(0x194,0x17e)+'gs'],'session_id':_0x13ea39['session_id']});return _0x3a7175;}async['postProfic'+'iencyEvent'+_0x12e6f3(0x457,0x47a)](_0x43cbbc){function _0x241bca(_0x37d3b3,_0x427782){return _0x13c324(_0x37d3b3-0x28d,_0x427782);}const _0x25d6a0={'SdeJA':_0x11a13d(0x7d,0x85),'DEAnF':'/api/v1/pr'+_0x241bca(0x24d,0x274)+'event/batc'+'h'};function _0x11a13d(_0x21ecc1,_0x5d2dba){return _0x13c324(_0x5d2dba-0xbd,_0x21ecc1);}await this[_0x241bca(0x334,0x33a)](_0x25d6a0['SdeJA'],_0x25d6a0[_0x11a13d(0xcc,0x102)],{'events':_0x43cbbc});}async['listProfic'+_0x12e6f3(0x3b6,0x3c5)](_0xd962f3){function _0x57063d(_0x3a078a,_0x196a6c){return _0x12e6f3(_0x3a078a- -0x31b,_0x196a6c);}const _0x3ddda9={'rWDlm':_0x3e6f51(0x239,0x2a3),'ijLJI':_0x3e6f51(0x1db,0x16c)+'th','tWVNR':_0x3e6f51(0x1d0,0x1a1)};function _0x3e6f51(_0x1f7542,_0xc69212){return _0x12e6f3(_0x1f7542- -0x1cf,_0xc69212);}const _0x1b8234=new URLSearchParams();_0x1b8234['set']('page_size',_0x3ddda9['rWDlm']);if(_0xd962f3)_0x1b8234[_0x3e6f51(0x218,0x258)](_0x3ddda9[_0x57063d(0xfb,0x10c)],_0xd962f3);const _0x5ee08d=_0x57063d(0x16a,0x1eb)+_0x3e6f51(0x297,0x279)+_0x1b8234['toString'](),_0x59183e=await this['request'](_0x3ddda9[_0x57063d(0x189,0x146)],_0x5ee08d);return _0x59183e[_0x3e6f51(0x2c7,0x2d2)]??[];}async[_0x13c324(-0x3a,0x37)+_0x13c324(0x89,0x39)](_0x959e49){function _0x3f8f9f(_0x23fbf7,_0x447f69){return _0x12e6f3(_0x447f69- -0x616,_0x23fbf7);}function _0x2a98d6(_0x36bd70,_0x1f0151){return _0x12e6f3(_0x36bd70- -0x25f,_0x1f0151);}const _0xb1d934={'YCpbs':_0x2a98d6(0x14c,0x184),'tRabU':'/api/v1/pe'+_0x2a98d6(0x173,0x146)+_0x2a98d6(0x1cb,0x216)+_0x3f8f9f(-0x18f,-0x1c3)};return this['request'](_0xb1d934[_0x3f8f9f(-0x1d4,-0x203)],_0xb1d934['tRabU'],{'message':_0x959e49[_0x3f8f9f(-0x1a3,-0x1df)](0x0,0x1f4)});}async[_0x13c324(0xb7,0x78)+'iciencies'](_0x17b839,_0x2ae4dd){const _0x14c5f0=await this[_0x356e2e(0x3aa,0x40f)]('POST',_0x356e2e(0x38f,0x34e)+_0x356e2e(0x384,0x33f)+_0x245b06(-0x2d9,-0x2e3),{'source_provider':_0x17b839,'skill_ids':_0x2ae4dd??null});function _0x356e2e(_0x46420c,_0x2ed498){return _0x13c324(_0x46420c-0x303,_0x2ed498);}function _0x245b06(_0x44c21d,_0x140e13){return _0x13c324(_0x140e13- -0x2cc,_0x44c21d);}return _0x14c5f0;}async[_0x13c324(0x1a,0x59)+_0x13c324(-0x37,-0x6e)](_0x3d2223,_0x20504d){function _0x4d7d30(_0x4716ef,_0x1e79c6){return _0x13c324(_0x1e79c6-0x190,_0x4716ef);}const _0x1aafe4={'Bcygc':'POST','LUiTA':_0x43b400(0x187,0x152)+_0x4d7d30(0xef,0x15d)+'ort'},_0x4c204f=await this[_0x4d7d30(0x2a8,0x237)](_0x1aafe4['Bcygc'],_0x1aafe4[_0x43b400(0xbf,0xe7)],{'package':_0x3d2223,'target_provider':_0x20504d});function _0x43b400(_0x499821,_0x4f2f9d){return _0x13c324(_0x4f2f9d-0xc6,_0x499821);}return _0x4c204f;}async[_0x12e6f3(0x478,0x497)+_0x13c324(0x24,-0xb)+'ix'](){function _0x1d4a74(_0x53ab94,_0x341f43){return _0x13c324(_0x341f43- -0x320,_0x53ab94);}function _0x25a400(_0x5ec865,_0x1a4006){return _0x13c324(_0x1a4006- -0x31b,_0x5ec865);}const _0x209c22=await this[_0x1d4a74(-0x1fc,-0x279)](_0x25a400(-0x2e8,-0x35f),'/api/v1/tr'+'ansfer/com'+'patibility');return _0x209c22[_0x1d4a74(-0x2a7,-0x2e3)]??[];}async[_0x12e6f3(0x452,0x48e)+'rHistory'](_0x52e3a2=0x1){const _0x2bb2a2=new URLSearchParams();function _0x4a2b1a(_0x29fe1c,_0x289fa2){return _0x13c324(_0x29fe1c- -0x2d1,_0x289fa2);}function _0x2816bc(_0x13e5e4,_0x4d14e9){return _0x13c324(_0x13e5e4-0xe2,_0x4d14e9);}_0x2bb2a2[_0x2816bc(0xe6,0x12d)](_0x2816bc(0xc8,0x11e),_0x52e3a2[_0x2816bc(0xee,0x97)]());const _0x3bd48c=_0x2816bc(0x16e,0x100)+'ansfer/his'+_0x2816bc(0x117,0x127)+_0x2bb2a2['toString'](),_0x1ef068=await this[_0x2816bc(0x189,0x20b)]('GET',_0x3bd48c);return _0x1ef068;}async[_0x12e6f3(0x421,0x3ab)](_0x24187f,_0x3d57fc){const _0x38fc60={'FJyWC':_0x2311f6(0x374,0x391)},{readFileSync:_0x36e97d}=await import(_0x2311f6(0x345,0x39d)),{basename:_0x3071c7}=await import(_0x2311f6(0x3cd,0x356)),_0x58e7b0=_0x36e97d(_0x24187f),_0x1abff9=_0x3071c7(_0x24187f);function _0x2ccc69(_0x429f05,_0x19eec9){return _0x12e6f3(_0x429f05- -0x39f,_0x19eec9);}const _0x51be64=new FormData();_0x51be64['append'](_0x38fc60['FJyWC'],new Blob([_0x58e7b0]),_0x1abff9);_0x3d57fc[_0x2ccc69(0x4f,-0x15)]&&_0x51be64[_0x2ccc69(0x15,-0x33)]('category',_0x3d57fc[_0x2ccc69(0x4f,0xc)]);function _0x2311f6(_0x2781b4,_0x4fdbfa){return _0x12e6f3(_0x4fdbfa- -0x8e,_0x2781b4);}_0x3d57fc[_0x2311f6(0x423,0x415)]&&_0x3d57fc[_0x2ccc69(0x104,0xe2)][_0x2311f6(0x3c6,0x3a4)]>0x0&&_0x51be64['append']('tags',_0x3d57fc[_0x2311f6(0x44e,0x415)][_0x2ccc69(0x39,-0x35)](','));const _0x3bfa72=await this[_0x2311f6(0x39a,0x3d0)+'tipart'](_0x2ccc69(0xc,0x54),_0x2311f6(0x448,0x419)+_0x2ccc69(0x57,0x65),_0x51be64),_0x33b8cf=_0x3bfa72;return{'id':_0x33b8cf[_0x2ccc69(0x28,0x75)],'filename':_0x33b8cf[_0x2ccc69(0x29,-0xc)]};}async['checkFileD'+_0x12e6f3(0x3da,0x422)](_0x3bcbb3){const _0x444bdd={'bEzyD':_0x424fab(0x26b,0x208),'EFWiT':'/api/v1/fi'+_0x424fab(0x337,0x2ec)+_0x424fab(0x30e,0x2dc)};function _0x437c4c(_0x23a612,_0x3d5478){return _0x12e6f3(_0x3d5478- -0x1f3,_0x23a612);}function _0x424fab(_0x11e631,_0x18039e){return _0x12e6f3(_0x18039e- -0x1a3,_0x11e631);}const _0x2d6db9=await this[_0x424fab(0x265,0x2e7)](_0x444bdd[_0x424fab(0x281,0x221)],_0x444bdd[_0x424fab(0x335,0x2db)],{'content_hash':_0x3bcbb3}),_0x331075=_0x2d6db9;return{'exists':_0x331075['is_duplica'+'te'],'file_id':_0x331075[_0x424fab(0x2e9,0x2d6)+'ile']?.['id']};}async[_0x12e6f3(0x42f,0x427)+_0x13c324(0x5b,-0x26)](_0x34b8e6,_0x4b5427,_0x2e4f7){const _0x3da87d={'MZCCW':_0x46d3e4(0x23e,0x1ca)+'mory-files'};function _0x46d3e4(_0x31047a,_0x28f467){return _0x13c324(_0x28f467-0x11a,_0x31047a);}function _0x1b14bd(_0x4cbfb2,_0x473943){return _0x13c324(_0x4cbfb2-0x28f,_0x473943);}const _0x1d08e0=await this[_0x1b14bd(0x336,0x2da)](_0x1b14bd(0x257,0x2bc),_0x3da87d[_0x1b14bd(0x2a7,0x2b4)],{'memory_id':_0x34b8e6,'file_id':_0x4b5427,'reference_type':_0x2e4f7['reference_'+_0x46d3e4(0x160,0x129)],'reference_path':_0x2e4f7[_0x1b14bd(0x2a5,0x2ca)+_0x1b14bd(0x297,0x255)]});return _0x1d08e0;}async['createCont'+_0x12e6f3(0x46a,0x418)](_0x3b8a8f){const _0x36d213={'CxXec':_0x3cdce6(-0xba,-0xee),'nYGXn':_0x1b741c(0x428,0x482)+'g/contexts'};function _0x3cdce6(_0x125190,_0x3a0c64){return _0x13c324(_0x3a0c64- -0xb6,_0x125190);}function _0x1b741c(_0x19ab40,_0x214366){return _0x13c324(_0x19ab40-0x434,_0x214366);}return this[_0x1b741c(0x4db,0x51f)](_0x36d213[_0x1b741c(0x454,0x412)],_0x36d213[_0x1b741c(0x48e,0x42d)],_0x3b8a8f);}async[_0x12e6f3(0x3db,0x38b)+_0x12e6f3(0x3a8,0x3fb)](_0x580589,_0x30fb1a){function _0x4591cc(_0xa840af,_0x239d1f){return _0x13c324(_0x239d1f- -0x8,_0xa840af);}function _0x4d1351(_0x1b8787,_0x188c02){return _0x13c324(_0x1b8787- -0x2f9,_0x188c02);}const _0x331eed={'ZmQqR':_0x4d1351(-0x331,-0x2ac)};return this[_0x4d1351(-0x252,-0x203)](_0x331eed['ZmQqR'],_0x4d1351(-0x305,-0x341)+_0x4591cc(-0x6,0x77)+'/'+_0x580589+'/members',_0x30fb1a);}async[_0x12e6f3(0x3fa,0x3e9)+'tion'](_0x2f549a){const _0x146fbe={'HxAYL':_0x13ab1d(0xb9,0xaa)+_0x13ab1d(0x117,0xa5)+'s'};function _0x668d2d(_0x96702b,_0x3efdfe){return _0x12e6f3(_0x3efdfe-0x6a,_0x96702b);}function _0x13ab1d(_0x4fdfe1,_0x3798b4){return _0x12e6f3(_0x4fdfe1- -0x31e,_0x3798b4);}return this[_0x668d2d(0x4be,0x4f4)](_0x13ab1d(0x8d,0xa),_0x146fbe[_0x13ab1d(0x127,0xfa)],_0x2f549a);}async[_0x12e6f3(0x43a,0x3c3)+_0x12e6f3(0x3a4,0x3a6)](_0x39b0d7){function _0x5a460b(_0x2f5895,_0x1768f){return _0x13c324(_0x1768f- -0x158,_0x2f5895);}function _0x2f4ae4(_0x309d24,_0x58223f){return _0x13c324(_0x309d24-0x26d,_0x58223f);}const _0x5223de={'Hudvy':_0x5a460b(-0xbc,-0xb8)+_0x5a460b(-0x9d,-0xd3)+_0x2f4ae4(0x242,0x2bc)};try{if(_0x2f4ae4(0x2e6,0x2cb)!==_0x5a460b(-0x15c,-0xec)){const _0x386496=await this[_0x2f4ae4(0x314,0x328)]('POST',_0x5223de[_0x2f4ae4(0x2e4,0x33d)],{'content':_0x39b0d7['content'][_0x5a460b(-0x129,-0x104)](0x0,0x7d0),'tags':_0x39b0d7[_0x5a460b(-0xa4,-0x98)]??[],'category':_0x39b0d7[_0x5a460b(-0x165,-0x14d)]}),_0x36ca29=_0x386496;if(_0x36ca29[_0x5a460b(-0x9b,-0xae)]&&_0x36ca29[_0x5a460b(-0x149,-0x147)])return _0x36ca29['result'];return null;}else throw new _0x48e3bc('요청\x20제한:\x20잠시\x20'+_0x2f4ae4(0x2b3,0x31e));}catch{return null;}}static [_0x13c324(0xbe,0x38)+_0x13c324(-0x1d,0x65)]=new Set([0x1ad,0x1f4,0x1f6,0x1f7,0x1f8]);static [_0x12e6f3(0x3ce,0x444)+'S']=0x3;static [_0x12e6f3(0x470,0x455)+'_MS']=0x3e8;async[_0x13c324(0xa7,0x5a)](_0xdfa4fd,_0x13a89e,_0x220807){function _0x427fe2(_0x3e2810,_0x979993){return _0x13c324(_0x979993- -0x2cc,_0x3e2810);}function _0x49faf8(_0x2d2268,_0x5e5d43){return _0x13c324(_0x2d2268-0x14f,_0x5e5d43);}const _0x927497={'LMNjK':_0x427fe2(-0x2e2,-0x304),'GrFYz':function(_0x1e35b4,_0x59207b){return _0x1e35b4(_0x59207b);},'ZIVYu':function(_0x50d362,_0xda89c8){return _0x50d362 instanceof _0xda89c8;},'NixSH':function(_0x35faa5,_0xebc4be,_0xe0ef04){return _0x35faa5(_0xebc4be,_0xe0ef04);},'QhRAc':function(_0x8df338,_0x1a163f){return _0x8df338<_0x1a163f;},'gYmcs':function(_0x30c1d0,_0x5d09d7,_0x3fa9c0){return _0x30c1d0(_0x5d09d7,_0x3fa9c0);},'OYTbk':function(_0x5dd726,_0x31962c){return _0x5dd726>_0x31962c;},'ASxRE':function(_0x58cdc8,_0x5ea9f9){return _0x58cdc8*_0x5ea9f9;},'LFMRf':_0x427fe2(-0x294,-0x276),'eeein':function(_0x470a83,_0x2606ca){return _0x470a83===_0x2606ca;},'IIdde':_0x427fe2(-0x2db,-0x265),'squDk':function(_0x5e8920,_0x51beb0){return _0x5e8920===_0x51beb0;},'pOTSU':'pFvjH','ceryq':_0x49faf8(0x14f,0x12c),'WAftA':'HTTP\x20403','dDppi':_0x49faf8(0x1fa,0x1d4),'MXwjg':function(_0x50e190,_0x4fe22d){return _0x50e190===_0x4fe22d;},'SjkGn':_0x49faf8(0x1b2,0x147),'LNUkN':function(_0x414dae,_0x3a9039){return _0x414dae-_0x3a9039;},'AKmgq':function(_0x32a20c,_0x377305){return _0x32a20c!==_0x377305;}};let _0x1e6d0a;for(let _0x55f01a=0x0;_0x927497[_0x427fe2(-0x30f,-0x29a)](_0x55f01a,A2AClient[_0x49faf8(0x13a,0x119)+'S']);_0x55f01a++){const _0x3c2b17=''+this['config'][_0x49faf8(0x139,0x114)]+_0x13a89e,_0x1e4879=new AbortController(),_0x48d65d=_0x927497[_0x49faf8(0x113,0x167)](setTimeout,()=>_0x1e4879[_0x49faf8(0x17a,0x12d)](),this[_0x427fe2(-0x237,-0x232)]);try{const _0x55ba3f=await _0x927497[_0x427fe2(-0x275,-0x2c7)](fetch,_0x3c2b17,{'method':_0xdfa4fd,'headers':{'Content-Type':_0x49faf8(0x16c,0x14e)+_0x49faf8(0x1f5,0x1af),'x-api-key':this[_0x427fe2(-0x247,-0x273)][_0x427fe2(-0x237,-0x281)],'X-Plugin-Version':_pluginVersion,..._0x927497['OYTbk'](this[_0x49faf8(0x16b,0x1ac)+_0x49faf8(0x1cc,0x1ca)]['length'],0x0)&&{'X-Plugin-Features':this['enabledFea'+_0x49faf8(0x1cc,0x238)][_0x49faf8(0x144,0x137)](',')}},'body':_0x220807?JSON[_0x49faf8(0x18e,0x17a)](_0x220807):undefined,'signal':_0x1e4879[_0x49faf8(0x12c,0x10a)]});clearTimeout(_0x48d65d);if(A2AClient[_0x427fe2(-0x228,-0x20e)+_0x49faf8(0x132,0xe0)][_0x49faf8(0x10e,0x16d)](_0x55ba3f[_0x427fe2(-0x1e8,-0x213)])&&_0x927497[_0x49faf8(0x181,0x1d7)](_0x55f01a,A2AClient[_0x427fe2(-0x281,-0x2e1)+'S']-0x1)){const _0x53310a=_0x927497[_0x49faf8(0x129,0xd8)](A2AClient['BASE_DELAY'+_0x427fe2(-0x32d,-0x302)],Math[_0x49faf8(0x1d3,0x1ca)](0x2,_0x55f01a));await new Promise(_0x43e78f=>setTimeout(_0x43e78f,_0x53310a));continue;}if(!_0x55ba3f['ok']){if(_0x927497[_0x49faf8(0x1b0,0x1b0)]!==_0x427fe2(-0x1f8,-0x276))return _0x54ddab[_0x427fe2(-0x237,-0x2bb)];else await this[_0x49faf8(0x18f,0x207)+'rResponse'](_0x55ba3f);}if(_0x927497[_0x49faf8(0x121,0xd5)](_0xdfa4fd,_0x927497[_0x49faf8(0x1a4,0x15f)])&&_0x927497['squDk'](_0x55ba3f[_0x49faf8(0x208,0x1d4)],0xcc))return;return await _0x55ba3f[_0x427fe2(-0x2f0,-0x2ca)]();}catch(_0x239d27){if(_0x927497[_0x427fe2(-0x333,-0x2bf)]!==_0x427fe2(-0x2c9,-0x29e))return this[_0x49faf8(0x1f6,0x279)](qdOzid[_0x49faf8(0x1b9,0x22a)],_0x49faf8(0x171,0x165)+qdOzid['GrFYz'](_0x405bb4,_0x43225c)+(_0x49faf8(0x142,0x180)+_0x49faf8(0x1ed,0x200)),{'memory_id':_0x5b53bc,'delta':_0x1a8acb});else{clearTimeout(_0x48d65d);if(_0x239d27 instanceof Error){if(_0x239d27['message']['startsWith'](_0x927497[_0x427fe2(-0x323,-0x2a3)])||_0x239d27[_0x427fe2(-0x1ca,-0x23b)]['startsWith'](_0x927497['WAftA'])||_0x239d27[_0x427fe2(-0x21b,-0x23b)][_0x49faf8(0x127,0xd2)](_0x427fe2(-0x269,-0x2de))||_0x239d27[_0x427fe2(-0x247,-0x23b)][_0x49faf8(0x127,0x18a)](_0x927497['dDppi'])){if(_0x927497[_0x427fe2(-0x236,-0x2b8)](_0x49faf8(0x186,0x1d1),_0x927497[_0x49faf8(0x168,0x123)]))_0x14d58b[_0x427fe2(-0x2fe,-0x2ba)](_0x427fe2(-0x256,-0x2c9)+_0x427fe2(-0x2cb,-0x2f0)+_0x49faf8(0x204,0x1a3)+_0x49faf8(0x1da,0x1da)+'\x20'+_0x44b27e+':',qdOzid[_0x49faf8(0x16a,0x107)](_0x57ca3c,_0x455c84)?_0x1a73ff[_0x49faf8(0x1e0,0x1fe)]:qdOzid[_0x49faf8(0x1c2,0x1a1)](_0x2f31a0,_0x320e1b));else throw _0x239d27;}if(_0x55f01a<_0x927497['LNUkN'](A2AClient[_0x49faf8(0x13a,0x1b3)+'S'],0x1)){_0x1e6d0a=_0x239d27;const _0x222544=A2AClient[_0x427fe2(-0x1f6,-0x23f)+_0x427fe2(-0x362,-0x302)]*Math[_0x49faf8(0x1d3,0x214)](0x2,_0x55f01a);await new Promise(_0x515aac=>setTimeout(_0x515aac,_0x222544));continue;}if(_0x239d27['name']===_0x49faf8(0x20c,0x1d0)){if(_0x927497[_0x49faf8(0x1ae,0x1da)](_0x49faf8(0x176,0xf2),_0x49faf8(0x111,0x16b)))throw new Error(_0x427fe2(-0x345,-0x2fe)+this[_0x427fe2(-0x295,-0x232)]+_0x49faf8(0x141,0xc4));else try{_0x120a4c[_0x427fe2(-0x245,-0x21e)]=qdOzid[_0x49faf8(0x113,0x11f)](_0xcfaa46,_0x28f182,this[_0x427fe2(-0x202,-0x239)+_0x427fe2(-0x2c3,-0x29f)]);}catch{}}throw new Error(_0x49faf8(0x13b,0x16a)+_0x239d27['message']);}throw _0x239d27;}}}throw _0x1e6d0a??new Error(_0x49faf8(0x1ba,0x1ed)+A2AClient[_0x427fe2(-0x2d8,-0x2e1)+'S']+_0x49faf8(0x15f,0x112));}async[_0x12e6f3(0x45e,0x4c5)+_0x12e6f3(0x44b,0x413)](_0x236c62,_0x453bd3,_0x2fabbd){function _0x4ac83c(_0x128806,_0x255b8f){return _0x13c324(_0x128806- -0x2a7,_0x255b8f);}function _0x21c2c8(_0x3f0480,_0x23a4f0){return _0x13c324(_0x23a4f0-0x386,_0x3f0480);}const _0x363f1b={'KNEYi':function(_0x158192,_0x53d794,_0x2e3558){return _0x158192(_0x53d794,_0x2e3558);},'DixTR':function(_0x5d7906,_0x213d1e,_0x2233f3){return _0x5d7906(_0x213d1e,_0x2233f3);},'FZJne':function(_0x40ec1c,_0x1a45aa){return _0x40ec1c(_0x1a45aa);}},_0x121fbe=''+this['config'][_0x21c2c8(0x306,0x370)]+_0x453bd3,_0x18a921=new AbortController(),_0x2938e1=_0x363f1b[_0x4ac83c(-0x1e2,-0x1a6)](setTimeout,()=>_0x18a921[_0x4ac83c(-0x27c,-0x26e)](),this[_0x21c2c8(0x3fd,0x420)]);try{const _0x277872=await _0x363f1b[_0x21c2c8(0x36d,0x373)](fetch,_0x121fbe,{'method':_0x236c62,'headers':{'x-api-key':this[_0x21c2c8(0x456,0x3df)][_0x21c2c8(0x39b,0x3d1)],'X-Plugin-Version':_pluginVersion},'body':_0x2fabbd,'signal':_0x18a921['signal']});return _0x363f1b[_0x21c2c8(0x454,0x441)](clearTimeout,_0x2938e1),!_0x277872['ok']&&await this['handleErro'+_0x4ac83c(-0x2a1,-0x26a)](_0x277872),await _0x277872[_0x21c2c8(0x3af,0x388)]();}catch(_0x2fe91f){clearTimeout(_0x2938e1);if(_0x2fe91f instanceof Error&&_0x2fe91f[_0x21c2c8(0x3ea,0x416)]===_0x4ac83c(-0x1ea,-0x1c4))throw new Error('요청\x20시간\x20초과:\x20'+this['timeout']+_0x4ac83c(-0x2b5,-0x281));throw _0x2fe91f;}}async[_0x13c324(0x40,0x60)+_0x12e6f3(0x3e9,0x386)](_0x303995){const _0x2f97a2={'Wrhao':_0x10548a(0x2db,0x308),'MZQkR':function(_0x1902f0,_0x5f428e){return _0x1902f0(_0x5f428e);},'baDJr':function(_0x14ae18,_0x2ab361){return _0x14ae18===_0x2ab361;},'fRHfD':'lwYlw'};function _0x5e66f5(_0x41b2f3,_0x2d17ef){return _0x12e6f3(_0x2d17ef- -0x529,_0x41b2f3);}const _0x488471=_0x303995[_0x5e66f5(-0x10d,-0x8d)];if(_0x2f97a2['baDJr'](_0x488471,0x191))throw new Error(_0x5e66f5(-0x105,-0x8e)+_0x5e66f5(-0x92,-0xe1)+'요');function _0x10548a(_0xf9a1d9,_0x2a91ea){return _0x12e6f3(_0xf9a1d9- -0xd0,_0x2a91ea);}if(_0x488471===0x1ad){if(_0x2f97a2[_0x5e66f5(-0xfa,-0x170)]!==_0x5e66f5(-0xf1,-0xb7))throw new Error(_0x5e66f5(-0x1b8,-0x188)+_0x10548a(0x359,0x2de));else return this[_0x10548a(0x3ba,0x42d)](FtIzRI[_0x5e66f5(-0x27,-0x8a)],_0x10548a(0x335,0x2c8)+FtIzRI[_0x5e66f5(-0xfb,-0xb4)](_0x53cbc2,_0x4acb08)+('/memories/'+_0x5e66f5(-0xf5,-0x164)),{'memory_id':_0xbf2f75,'vector_clock':_0x546439});}let _0x12ba1c='HTTP\x20'+_0x488471;try{const _0x4da982=await _0x303995[_0x10548a(0x315,0x37c)]();if(_0x4da982[_0x5e66f5(-0x171,-0xf5)])_0x12ba1c+=':\x20'+_0x4da982[_0x5e66f5(-0x160,-0xf5)];else _0x4da982['message']&&(_0x12ba1c+=':\x20'+_0x4da982[_0x10548a(0x3a4,0x391)]);}catch{}throw new Error(_0x12ba1c);}}function _0x45e3(){const _0xaadb9c=['AM9PBG','ndrkA0D5Dvm','DxbSAwnHDgu','ywrKq29UDgv4Da','nNzcwKz0Ca','sgzZCKS','zw1VCNK','ChjVBw90zu1LBq','Bw9YAwvZ','zLzKrKK','t2nQsLO','7j247kADioYlPo2mQa','BM9KztPWyxrO','ANnVBG','w2eYyv0GCMvPBG','C2v0','z1LTy3m','CLjLC3bVBNnL','AhPLBK4','Cgf0Aa','zf9HDa','Bwf4vg9Rzw5Z','y2f0zwDVCNK','Dg9tDhjPBMC','Ce9uu1u','y2f0zwDVCMLLCW','DhLWzq','7zQmioYERoYlNoUpHcdTM4qG7iUK7yYO','CMvZDwX0','zxjYB3i','BgvZl3vWBg9Hza','tvH3AMC','Bw9YAwvZl3rHzW','CMvMzxjLBMnLxW','y3jLyxrLuMvSyq','tvPdq1C','u2PRr24','Aw1WB3j0uhjVzG','wKLwwxu','zw5HyMXLzezLyq','yxbWBgLJyxrPBW','BgLZDfrLyw1nzq','AgT1qMC','q3Hyzwm','tfvPvee','l3rLyw1ZlW','BgLZDfrLyw1Z','yMLSAxr5twf0CG','mtaW','EwnywMO','yM53u2m','mJu4mgHwvMLwqG','y2vYExe','odq1otyYtfbWuvzm','ywjVCNq','nJi4ntLVs01MEeq','s2v5','Cez2AKG','mZGZnZK4sgXzBhDV','wunWyNm','C3rHDhm','uwHsqwm','AwPmsKK','yxnZzw1IBgvdBW','Dg9YEt8','C2vHCMnOvgvHBq','wgv1zhO','C2vHCMnO','C2v0rw5HyMXLza','CMnO','Cg9ZDfbYB2zPyW','zMLSzq','Bwf0CML4','DxbSB2fKrMLSzq','C3rYAw5NAwz5','AgfUzgXLrxjYBW','B3v0y29Tzq','EKDQrLy','BNrLEhq','ndHny1v0seO','revbBKy','7zUeioUlPoYlNcdSI5ZRJ4tTLzJSHlJSMPq','Aw9Ul2vTB3rPBW','BM9KztPMCW','mc4WlJa','mtG0zevot3vr','yxbPs2v5','y3jLyxrLtwvTBW','DgLLCG','munbwezRDG','BgvUz3rO','l3jLAw5MB3jJzq','zgv0ywLS','zY9YzwXHDgLVBG','sejtDMu','C2XPy2u','suLKzgu','BMvjCNq','y2XHC3nPzNLdBW','AwLAsNe','y29UzMLN','BLLhwg4','CNLgAwXLtgLUAW','DgHVv2q','sLvgzeu','z2v0u3rHDhm','quTTz3e','BgLZDe1LBw9YAq','teznuMy','shHbwuW','r1D2tKi','vuLXv0m','ieTLEEULVcdTMzxSNBJTLzJSHlG','Bw9YAwvZlW','revmrvrf','DgLWyxj0','DxrMltG','te1oAKS','7jQu7lkTioYlPo2mQdOG','D1Houve','D1LTvgC','vwDoz0m','z2v0vhjHBNnMzq','BI9HBMfSExPL','CNLFAwq','7jwu7zI47zMuio2cPoUkLcaZmIa','r3jgwxO','qMf0y2G','CgfYC2u','mtKWmtLnCKDpA3K','shvKDNK','CMvPBMzVCMnLtq','Cu5XEwS','Aw5JBhvKzv9LBq','CMvXDwvZDe11Ba','yMvKzgLUzW','DhvYzxm','CMLLC0jHDgnO','zY9JB250zxH0CW','l3bYB21VDgu','yw5ZzMvYl2v4Ca','B25fBMfIBgvK','B2zPy2LLBMn5pW','Cg93','Eg9UB215l2nSyq','B3j5','zxH0','Dhj1zq','DgLVBG','BhrH','zMfPBgvKigzVCG','l2fWAs92ms90CG','qKftrv9eruXbwq','ufvu','B252A1C','BMfTzq','BwvZC2fNzq','tvPrA1i','zw5JCNLWDgLVBG','zgvJCNLWDe1LBq','z2v0q29TCgf0Aq','zxHPC3rPBMDFzG','CY9WB3b1BgfYpW','l21LBw9YAwvZ','zu5Orwm','DgLTzw91Da','ruzxAvq','zhvWBgLJyxrL','qu5vv0y','C3LUyY9HChbSEq','DgvZDenVBM5LyW','l2fWAs92ms90yq','zw1IBgu','l2fWAs92ms9WCG','zgvSzxrLtwvTBW','zw1VCNLgzwvKyG','mZiXnZiYnw9iwwvTEa','BI9QC29U','CMvXDwvZDa','AxnbCNjHEq','zxzLBNq','C3vJy2vZCW','sfruuca0mJi','BgvZl2nOzwnRlq','Bwf4twvTB3jPzq','y29UDgvUDa','Bw9YAwvZp2XPBq','l2fWAs92ms9Tzq','zvbftvu','AwvUy3LfDMvUDa','AxrLBxm','DMvYC2LVBG','EuzLzwrIywnRia','mtGWotKWBNHZv2PZ','zxHWB3j0uhjVzG','7j247kADioYlPo2mQdOGqvbj','C3rHDhvZ','zwrKAw5N','rLPkBMu','v3jOyw8','qwjVCNrfCNjVCG','uKvuuLLbqKXfxW','qvHLwwW','DgfNCW','DfDwtLi','Dg90ywXFBwvTBW','ueTKuMG','l2fWAs92ms9MAq','s05fwwK','yNL0zxpSL6ZSLBWG7zwP64Ui','r0vu','ruPAvva','7jQu7lkTioYGNo2vNdOG7j6G7iUCia','AgfZ','B2zPy2LLBMn5lW','BNrLBNq','sNbRu24','mZeWmJC2neH5AKzpta','tML4u0G','twvTyMvY','yw5HBhL6zuvTBW','ChjVAMvJDf9Wyq','ue9tva','AwnPzw5JAwvZ','x01t','Bw9YAwvZl3n0yq','ywnR','yw5ZzMvYl2LTCa','7jQu7lkTioYlNoQWHcdSTiJQS7W6ia','y29UDgv4Df90yq','BgLTAxq','yxbWzw5K','zwvLAw4','AwvUy2LLCW','C2vHCMnOtwvTBW','C3nPzNK','zLjizKq','Aw9Us2v5','C3rHCNrZv2L0Aa','sffvq3y','qvn4uKu','B2zMC2v0','zM9Yy2vnzw1VCG','C2LNBMfS','rwvxteS','wvPIrvy','ChrPB25lzxK','yKv6Euq','C3LUyY9KzwX0yq','u1rbvfvt','zMLSzv9Pza','zMLSzw5HBwu','CgfNzq','yw1Z','z2vUzxjHDgvezq','B3j0','yMfZzvvYBa','tufyx1jfvfjjrq','64sK7yQ47jUm7ygSioYyPoULMdOG','rgL4vfi','sfruuca0mdq','CNnVBMfSAxPHDa','CMLLCW','twvTB3jPzxm','BxpRPBWG64sy7jEi7iQ164Ui64UK','l21LBw9YAwvZlW','l2fWAs92ms9TyW'];_0x45e3=function(){return _0xaadb9c;};return _0x45e3();}
|