a2a-memory 0.11.5 → 0.11.6
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.js +1 -298
- package/dist/cli/commands/add.js +1 -80
- 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.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.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/user-prompt-submit.js +1 -316
- package/dist/i18n/index.js +1 -2
- package/dist/i18n/messages.js +1 -150
- package/dist/index.js +1 -43
- package/dist/lifecycle/cleanup-scheduler.js +1 -137
- package/dist/lifecycle/cleanup.js +1 -116
- package/dist/lifecycle/index.js +1 -13
- 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.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 +1 -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 +14 -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/config/manager.js
CHANGED
|
@@ -1,372 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config Manager
|
|
3
|
-
*
|
|
4
|
-
* ~/.a2a/config.json 설정 파일을 관리합니다.
|
|
5
|
-
*/
|
|
6
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, statSync, copyFileSync } from 'node:fs';
|
|
7
|
-
import { join, dirname } from 'node:path';
|
|
8
|
-
import { homedir } from 'node:os';
|
|
9
|
-
import { randomUUID } from 'node:crypto';
|
|
10
|
-
import { z } from 'zod';
|
|
11
|
-
import { DEFAULT_CONFIG } from '../types/index.js';
|
|
12
|
-
import { getKeychainStore } from '../utils/keychain.js';
|
|
13
|
-
const DEFAULT_CONFIG_DIR = join(homedir(), '.a2a');
|
|
14
|
-
const DEFAULT_CONFIG_PATH = join(DEFAULT_CONFIG_DIR, 'config.json');
|
|
15
|
-
export const ConfigSchema = z.object({
|
|
16
|
-
server: z.object({
|
|
17
|
-
url: z.string().url(),
|
|
18
|
-
apiKey: z.string().optional(),
|
|
19
|
-
}),
|
|
20
|
-
mode: z.enum(['local', 'team']),
|
|
21
|
-
team: z.object({
|
|
22
|
-
teamId: z.string(),
|
|
23
|
-
teamPath: z.string(),
|
|
24
|
-
nodeId: z.string(),
|
|
25
|
-
}).optional(),
|
|
26
|
-
llm: z.object({
|
|
27
|
-
enabled: z.boolean(),
|
|
28
|
-
provider: z.enum(['openai', 'anthropic', 'none']),
|
|
29
|
-
apiKey: z.string().optional(),
|
|
30
|
-
model: z.string().optional(),
|
|
31
|
-
maxTokens: z.number().int().positive().optional(),
|
|
32
|
-
}).optional().default({
|
|
33
|
-
enabled: false,
|
|
34
|
-
provider: 'none',
|
|
35
|
-
maxTokens: 500,
|
|
36
|
-
}),
|
|
37
|
-
embedding: z.object({
|
|
38
|
-
enabled: z.boolean(),
|
|
39
|
-
provider: z.enum(['local', 'openai', 'e5']),
|
|
40
|
-
dimensions: z.number().int().positive(),
|
|
41
|
-
}).optional().default({
|
|
42
|
-
enabled: false,
|
|
43
|
-
provider: 'local',
|
|
44
|
-
dimensions: 64,
|
|
45
|
-
}),
|
|
46
|
-
lifecycle: z.object({
|
|
47
|
-
ttlDays: z.number().int().nonnegative(),
|
|
48
|
-
maxMemories: z.number().int().positive(),
|
|
49
|
-
maxMemoriesPerProject: z.number().int().positive().optional(),
|
|
50
|
-
cleanupOnSessionEnd: z.boolean(),
|
|
51
|
-
qualityThreshold: z.number().min(0).max(1),
|
|
52
|
-
tiering: z.object({
|
|
53
|
-
enabled: z.boolean(),
|
|
54
|
-
hotThresholdDays: z.number().int().positive(),
|
|
55
|
-
warmThresholdDays: z.number().int().positive(),
|
|
56
|
-
coldCompressionEnabled: z.boolean(),
|
|
57
|
-
autoPromote: z.boolean(),
|
|
58
|
-
}).optional(),
|
|
59
|
-
}).optional().default({
|
|
60
|
-
ttlDays: 90,
|
|
61
|
-
maxMemories: 20000,
|
|
62
|
-
cleanupOnSessionEnd: true,
|
|
63
|
-
qualityThreshold: 0.3,
|
|
64
|
-
}),
|
|
65
|
-
autoCapture: z.object({
|
|
66
|
-
enabled: z.boolean(),
|
|
67
|
-
triggers: z.array(z.string()),
|
|
68
|
-
excludePatterns: z.array(z.string()),
|
|
69
|
-
significanceThreshold: z.number().min(0).max(1),
|
|
70
|
-
}),
|
|
71
|
-
autoInject: z.object({
|
|
72
|
-
enabled: z.boolean(),
|
|
73
|
-
maxMemories: z.number().int().positive(),
|
|
74
|
-
maxTokens: z.number().int().positive(),
|
|
75
|
-
}),
|
|
76
|
-
sessionSummary: z.object({
|
|
77
|
-
enabled: z.boolean(),
|
|
78
|
-
minActions: z.number().int().nonnegative(),
|
|
79
|
-
}),
|
|
80
|
-
db: z.object({
|
|
81
|
-
path: z.string(),
|
|
82
|
-
maxSizeMB: z.number().positive(),
|
|
83
|
-
}),
|
|
84
|
-
autoSync: z.object({
|
|
85
|
-
enabled: z.boolean(),
|
|
86
|
-
pushOnSessionEnd: z.boolean(),
|
|
87
|
-
pullOnSessionStart: z.boolean(),
|
|
88
|
-
timeoutMs: z.number().int().nonnegative(), // 0 = unlimited (CLI용)
|
|
89
|
-
intervalMs: z.number().int().nonnegative().default(1800000),
|
|
90
|
-
encryption: z.object({
|
|
91
|
-
enabled: z.boolean(),
|
|
92
|
-
algorithm: z.literal('aes-256-gcm'),
|
|
93
|
-
}).optional(),
|
|
94
|
-
}).optional().default({
|
|
95
|
-
enabled: false,
|
|
96
|
-
pushOnSessionEnd: true,
|
|
97
|
-
pullOnSessionStart: true,
|
|
98
|
-
timeoutMs: 30000,
|
|
99
|
-
intervalMs: 1800000,
|
|
100
|
-
}),
|
|
101
|
-
logging: z.object({
|
|
102
|
-
enabled: z.boolean(),
|
|
103
|
-
level: z.enum(['debug', 'info', 'warn', 'error']),
|
|
104
|
-
outputDir: z.string(),
|
|
105
|
-
maxFileSizeMB: z.number().positive(),
|
|
106
|
-
maxFiles: z.number().int().positive(),
|
|
107
|
-
}).optional().default({
|
|
108
|
-
enabled: false,
|
|
109
|
-
level: 'info',
|
|
110
|
-
outputDir: '~/.a2a/logs',
|
|
111
|
-
maxFileSizeMB: 10,
|
|
112
|
-
maxFiles: 3,
|
|
113
|
-
}),
|
|
114
|
-
skillConversion: z.object({
|
|
115
|
-
enabled: z.boolean(),
|
|
116
|
-
evaluationInterval: z.number().int().positive(),
|
|
117
|
-
minRepetitions: z.number().int().positive(),
|
|
118
|
-
similarityThreshold: z.number().min(0).max(1),
|
|
119
|
-
minConfidence: z.number().min(0).max(1),
|
|
120
|
-
reviewCycleDays: z.number().int().positive(),
|
|
121
|
-
maxSkills: z.number().int().positive(),
|
|
122
|
-
llmValidation: z.boolean(),
|
|
123
|
-
}).optional().default({
|
|
124
|
-
enabled: false,
|
|
125
|
-
evaluationInterval: 5,
|
|
126
|
-
minRepetitions: 3,
|
|
127
|
-
similarityThreshold: 0.85,
|
|
128
|
-
minConfidence: 0.7,
|
|
129
|
-
reviewCycleDays: 90,
|
|
130
|
-
maxSkills: 100,
|
|
131
|
-
llmValidation: true,
|
|
132
|
-
}),
|
|
133
|
-
proficiency: z.object({
|
|
134
|
-
enabled: z.boolean(),
|
|
135
|
-
actr: z.object({
|
|
136
|
-
decayRate: z.number().nonnegative(),
|
|
137
|
-
baseLevelConstant: z.number(),
|
|
138
|
-
maxAssociativeStrength: z.number().nonnegative(),
|
|
139
|
-
fanEffectFactor: z.number().nonnegative(),
|
|
140
|
-
mismatchPenalty: z.number().nonnegative(),
|
|
141
|
-
retrievalThreshold: z.number(),
|
|
142
|
-
}),
|
|
143
|
-
levelFormula: z.enum(['activation', 'powerLaw']),
|
|
144
|
-
maxLevel: z.number().int().min(1).max(100),
|
|
145
|
-
}).optional().default({
|
|
146
|
-
enabled: true,
|
|
147
|
-
actr: {
|
|
148
|
-
decayRate: 0.5,
|
|
149
|
-
baseLevelConstant: 0.0,
|
|
150
|
-
maxAssociativeStrength: 2.0,
|
|
151
|
-
fanEffectFactor: 1.0,
|
|
152
|
-
mismatchPenalty: 1.0,
|
|
153
|
-
retrievalThreshold: 0.0,
|
|
154
|
-
},
|
|
155
|
-
levelFormula: 'activation',
|
|
156
|
-
maxLevel: 10,
|
|
157
|
-
}),
|
|
158
|
-
realtimeInject: z.object({
|
|
159
|
-
enabled: z.boolean(),
|
|
160
|
-
maxMemories: z.number().int().positive(),
|
|
161
|
-
maxTokens: z.number().int().positive(),
|
|
162
|
-
cacheSize: z.number().int().positive(),
|
|
163
|
-
cacheTTLSeconds: z.number().int().positive(),
|
|
164
|
-
timeoutMs: z.number().int().positive(),
|
|
165
|
-
}).optional().default({
|
|
166
|
-
enabled: true,
|
|
167
|
-
maxMemories: 3,
|
|
168
|
-
maxTokens: 1000,
|
|
169
|
-
cacheSize: 20,
|
|
170
|
-
cacheTTLSeconds: 60,
|
|
171
|
-
timeoutMs: 100,
|
|
172
|
-
}),
|
|
173
|
-
emotionTracking: z.object({
|
|
174
|
-
enabled: z.boolean(),
|
|
175
|
-
maxPerSession: z.number().int().positive(),
|
|
176
|
-
}).optional().default({
|
|
177
|
-
enabled: false,
|
|
178
|
-
maxPerSession: 10,
|
|
179
|
-
}),
|
|
180
|
-
abTest: z.object({
|
|
181
|
-
enabled: z.boolean(),
|
|
182
|
-
}).optional().default({
|
|
183
|
-
enabled: false,
|
|
184
|
-
}),
|
|
185
|
-
locale: z.enum(['en', 'ko']).optional(),
|
|
186
|
-
}).refine((data) => data.mode !== 'team' || data.team !== undefined, { message: "Team configuration is required when mode is 'team'" });
|
|
187
|
-
/**
|
|
188
|
-
* 고유 노드 ID 생성 (UUID)
|
|
189
|
-
*/
|
|
190
|
-
export function generateNodeId() {
|
|
191
|
-
return randomUUID();
|
|
192
|
-
}
|
|
193
|
-
export class ConfigManager {
|
|
194
|
-
configPath;
|
|
195
|
-
config = null;
|
|
196
|
-
lastMtime = 0;
|
|
197
|
-
_validationFailed = false;
|
|
198
|
-
constructor(configPath) {
|
|
199
|
-
// 환경변수 우선 (테스트용)
|
|
200
|
-
this.configPath = configPath ?? process.env.A2A_CONFIG_PATH ?? DEFAULT_CONFIG_PATH;
|
|
201
|
-
}
|
|
202
|
-
load() {
|
|
203
|
-
if (!existsSync(this.configPath)) {
|
|
204
|
-
this.config = structuredClone(DEFAULT_CONFIG);
|
|
205
|
-
this.lastMtime = 0;
|
|
206
|
-
this.save(this.config);
|
|
207
|
-
return this.config;
|
|
208
|
-
}
|
|
209
|
-
// mtime 비교: 변경 없으면 캐시 반환
|
|
210
|
-
try {
|
|
211
|
-
const currentMtime = statSync(this.configPath).mtimeMs;
|
|
212
|
-
if (this.config && currentMtime === this.lastMtime) {
|
|
213
|
-
return this.config;
|
|
214
|
-
}
|
|
215
|
-
this.lastMtime = currentMtime;
|
|
216
|
-
}
|
|
217
|
-
catch {
|
|
218
|
-
if (this.config)
|
|
219
|
-
return this.config;
|
|
220
|
-
}
|
|
221
|
-
try {
|
|
222
|
-
const raw = readFileSync(this.configPath, 'utf-8');
|
|
223
|
-
const parsed = JSON.parse(raw);
|
|
224
|
-
const validated = ConfigSchema.parse(parsed);
|
|
225
|
-
this.config = validated;
|
|
226
|
-
this._validationFailed = false; // 검증 성공
|
|
227
|
-
// 키체인에서 API 키 로드 (config에 없을 때)
|
|
228
|
-
if (!this.config.server.apiKey) {
|
|
229
|
-
try {
|
|
230
|
-
const keychain = getKeychainStore();
|
|
231
|
-
const stored = keychain.get('server.apiKey');
|
|
232
|
-
if (stored) {
|
|
233
|
-
this.config.server.apiKey = stored;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
// 키체인 접근 실패 무시
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return this.config;
|
|
241
|
-
}
|
|
242
|
-
catch (err) {
|
|
243
|
-
// 검증 실패 시 플래그 설정 + 원본 백업
|
|
244
|
-
this._validationFailed = true;
|
|
245
|
-
// 원본 백업
|
|
246
|
-
try {
|
|
247
|
-
const backupPath = this.configPath + '.bak';
|
|
248
|
-
const original = readFileSync(this.configPath, 'utf-8');
|
|
249
|
-
writeFileSync(backupPath, original, 'utf-8');
|
|
250
|
-
}
|
|
251
|
-
catch {
|
|
252
|
-
// 백업 실패 무시 (읽기 전용 파일 시스템 등)
|
|
253
|
-
}
|
|
254
|
-
// 검증 실패 원인 출력
|
|
255
|
-
if (err instanceof z.ZodError) {
|
|
256
|
-
console.error('[a2a] Config validation failed. Backup saved to config.json.bak');
|
|
257
|
-
console.error('[a2a] Invalid fields:');
|
|
258
|
-
for (const issue of err.issues) {
|
|
259
|
-
console.error(` ${issue.path.join('.')}: ${issue.message}`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
console.error('[a2a] Config file corrupted:', err instanceof Error ? err.message : String(err));
|
|
264
|
-
}
|
|
265
|
-
console.error('[a2a] Using default configuration. Fix the errors and restart, or use "a2a config reset".');
|
|
266
|
-
this.config = structuredClone(DEFAULT_CONFIG);
|
|
267
|
-
return this.config;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
save(config) {
|
|
271
|
-
// 검증 실패 상태에서 save 시 경고
|
|
272
|
-
if (this._validationFailed) {
|
|
273
|
-
console.warn('[a2a] Warning: Previous config validation failed. Saving may overwrite your original settings.');
|
|
274
|
-
console.warn('[a2a] Original config backed up to config.json.bak');
|
|
275
|
-
}
|
|
276
|
-
const dir = dirname(this.configPath);
|
|
277
|
-
if (!existsSync(dir)) {
|
|
278
|
-
mkdirSync(dir, { recursive: true });
|
|
279
|
-
}
|
|
280
|
-
// 기존 파일이 있으면 .bak으로 백업 후 쓰기
|
|
281
|
-
if (existsSync(this.configPath)) {
|
|
282
|
-
try {
|
|
283
|
-
copyFileSync(this.configPath, this.configPath + '.bak');
|
|
284
|
-
}
|
|
285
|
-
catch {
|
|
286
|
-
// 백업 실패는 저장을 막지 않음 (읽기 전용 파일 시스템 등)
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
290
|
-
this.config = config;
|
|
291
|
-
this._validationFailed = false; // 저장 성공 시 플래그 리셋
|
|
292
|
-
try {
|
|
293
|
-
this.lastMtime = statSync(this.configPath).mtimeMs;
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
// ignore
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
get(key) {
|
|
300
|
-
const config = this.load();
|
|
301
|
-
return config[key];
|
|
302
|
-
}
|
|
303
|
-
set(key, value) {
|
|
304
|
-
const config = this.load();
|
|
305
|
-
config[key] = value;
|
|
306
|
-
this.save(config);
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* API 키 설정 (키체인 우선, 실패 시 config.json)
|
|
310
|
-
* @returns 'keychain' | 'config' — 저장 위치
|
|
311
|
-
*/
|
|
312
|
-
setApiKey(apiKey) {
|
|
313
|
-
const keychain = getKeychainStore();
|
|
314
|
-
if (keychain.isAvailable() && keychain.set('server.apiKey', apiKey)) {
|
|
315
|
-
// 키체인에 저장 성공 → config.json에서 제거
|
|
316
|
-
const config = this.load();
|
|
317
|
-
delete config.server.apiKey;
|
|
318
|
-
this.save(config);
|
|
319
|
-
// 메모리 캐시에는 유지
|
|
320
|
-
if (this.config) {
|
|
321
|
-
this.config.server.apiKey = apiKey;
|
|
322
|
-
}
|
|
323
|
-
return 'keychain';
|
|
324
|
-
}
|
|
325
|
-
// 키체인 미지원 → config.json에 저장
|
|
326
|
-
const config = this.load();
|
|
327
|
-
config.server.apiKey = apiKey;
|
|
328
|
-
this.save(config);
|
|
329
|
-
return 'config';
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* API 키 삭제 (키체인 + config.json 모두)
|
|
333
|
-
*/
|
|
334
|
-
deleteApiKey() {
|
|
335
|
-
const keychain = getKeychainStore();
|
|
336
|
-
keychain.delete('server.apiKey');
|
|
337
|
-
const config = this.load();
|
|
338
|
-
delete config.server.apiKey;
|
|
339
|
-
this.save(config);
|
|
340
|
-
}
|
|
341
|
-
reset() {
|
|
342
|
-
this.config = structuredClone(DEFAULT_CONFIG);
|
|
343
|
-
this._validationFailed = false; // 리셋 시 플래그 해제
|
|
344
|
-
this.save(this.config);
|
|
345
|
-
}
|
|
346
|
-
getConfigDir() {
|
|
347
|
-
const dir = dirname(this.configPath);
|
|
348
|
-
if (!existsSync(dir)) {
|
|
349
|
-
mkdirSync(dir, { recursive: true });
|
|
350
|
-
}
|
|
351
|
-
return dir;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
// ============================
|
|
355
|
-
// Singleton Factory
|
|
356
|
-
// ============================
|
|
357
|
-
let _instance = null;
|
|
358
|
-
let _instancePath;
|
|
359
|
-
export function getConfigManager(configPath) {
|
|
360
|
-
const path = configPath ?? process.env.A2A_CONFIG_PATH ?? DEFAULT_CONFIG_PATH;
|
|
361
|
-
if (_instance && _instancePath === path) {
|
|
362
|
-
return _instance;
|
|
363
|
-
}
|
|
364
|
-
_instance = new ConfigManager(path);
|
|
365
|
-
_instancePath = path;
|
|
366
|
-
return _instance;
|
|
367
|
-
}
|
|
368
|
-
export function resetConfigManager() {
|
|
369
|
-
_instance = null;
|
|
370
|
-
_instancePath = undefined;
|
|
371
|
-
}
|
|
372
|
-
//# sourceMappingURL=manager.js.map
|
|
1
|
+
(function(_0x5c3d66,_0x3b737d){function _0x14ebbd(_0x4bcdf0,_0x44e40c){return _0x34e7(_0x44e40c- -0x1f3,_0x4bcdf0);}function _0x3b6dd7(_0x1cfa2f,_0x28d0d3){return _0x34e7(_0x28d0d3- -0x385,_0x1cfa2f);}const _0x22df6b=_0x5c3d66();while(!![]){try{const _0x5eadab=parseInt(_0x3b6dd7(-0x1c1,-0x188))/0x1*(-parseInt(_0x3b6dd7(-0x190,-0x15a))/0x2)+parseInt(_0x3b6dd7(-0x191,-0x16c))/0x3*(-parseInt(_0x14ebbd(0x4d,0x18))/0x4)+parseInt(_0x14ebbd(-0x47,-0x14))/0x5*(-parseInt(_0x14ebbd(0x52,0xf))/0x6)+-parseInt(_0x3b6dd7(-0x1a6,-0x171))/0x7*(-parseInt(_0x3b6dd7(-0x1cf,-0x1c7))/0x8)+-parseInt(_0x3b6dd7(-0x15a,-0x155))/0x9*(parseInt(_0x14ebbd(-0x46,-0x3))/0xa)+parseInt(_0x3b6dd7(-0x1d2,-0x1a2))/0xb+parseInt(_0x3b6dd7(-0x188,-0x1ca))/0xc;if(_0x5eadab===_0x3b737d)break;else _0x22df6b['push'](_0x22df6b['shift']());}catch(_0x51970e){_0x22df6b['push'](_0x22df6b['shift']());}}}(_0x2c58,0x208eb));import{readFileSync,writeFileSync,existsSync,mkdirSync,statSync,copyFileSync}from'node:fs';import{join,dirname}from'node:path';import{homedir}from'node:os';import{randomUUID}from'node:crypto';import{z}from'zod';import{DEFAULT_CONFIG}from'../types/index.js';import{getKeychainStore}from'../utils/keychain.js';const DEFAULT_CONFIG_DIR=join(homedir(),_0x46988f(0x4b1,0x475)),DEFAULT_CONFIG_PATH=join(DEFAULT_CONFIG_DIR,_0x44574d(0x9f,0xc2)+'n');function _0x46988f(_0x2cb64c,_0x201a46){return _0x34e7(_0x2cb64c-0x2de,_0x201a46);}function _0x2c58(){const _0xa58ecc=['mJK4nde0ogHNyvfcvW','AguGzxjYB3jZia','zgvSzxrL','ntm2BhPjrwLl','y29UzMLNlMPZBW','lMjHAW','zgvSzxrLqxbPsW','AwCGDMfSAwrHDa','lIbcywnRDxaGCW','CMvMAw5L','BxrPBwvnCW','B2jQzwn0','B3bLBMfP','DxjS','yM9VBgvHBG','r1jTqMu','BgfZDe10Aw1L','w2eYyv0Gq29UzG','BNvTyMvY','w2eYyv0Gt3jPzW','uxnWC3u','Axrlsg4','Cg9ZAxrPDMu','C2vYDMvYlMfWAq','lMeYyq','ihDOzw4GBw9Kzq','CNj1ChrLzdO','Bwf4','tKHnsu4','v1rRu3G','C1Pkrgq','vw1iCxK','zxjYB3i','CYbYzxf1AxjLza','y29UzMLNugf0Aa','uvn3rNq','mZK1weXIywnU','yxjYyxK','CgDeEhq','B3bewNi','mJqZodmXnwj5DMTOsG','C3rYAw5NAwz5','B3b0Aw9UywW','AM9PBG','zwv5zgC','BwvZC2fNzq','yw50AhjVCgLJ','w2eYyv0Gsw52yq','sxnmy1C','B3vZignVBMzPzW','BwLU','C2vYDMvY','Aw9UlIbgAxGGDa','ndbvuLrTswK','EgLfCwm','BKzHAwXLza','zY5QC29UlMjHAW','Ccb0BYbJB25MAq','A2v5y2HHAw4','u2f2Aw5Nig1HEq','wM9KrxjYB3i','ig92zxj3CML0zq','BM9UBMvNyxrPDG','BIbMywLSzwqUia','qurUCxC','DcWGB3iGDxnLia','mtq0EKnSuw5r','v1Pxz1m','BM9Uzq','Aw5MBW','zuLtsvO','mZe5mNrMwNLmrW','C3rYAw5N','zfPKwu8','rNvsrvi','w2eYyv0Gv2fYBG','DvDlBem','zYbYzxnLDciU','CNDLruW','BgL0zxjHBa','ogzPCLnzvG','CgfYC2u','uhvQDKK','ywvZlti1nI1NyW','wgHKz04','DgvHBq','Bg9JywW','yvf1qxm','CMvZzxq','nJGZowjwEgvWua','y29UzMLN','uvr4zuG','vgvHBsbJB25MAq','D2fYBG','mJuWnJC0BhLisfbA','zgvIDwC','C2v0','Aw5NoIbqCMv2Aq','BMDZlG','C2f2zq','yxbPs2v5','z2v0','Cgf0Aa','quXhww8','CvPwD0m','ywn0AxzHDgLVBG','yMfR','zgvMyxvSDa','ihLVDxiGB3jPzW','Au5yu0i','thL5sNO','rwLnDLy','mtq2AgXuuKDh','zw51Bq','zYbIywnRzwqGDq','tfvTqwu','Aw9UigzHAwXLza','ndeXmJGYv2XWEhvk','BgLKigzPzwXKCW','x3zHBgLKyxrPBW','A1vUquy','z3vYyxrPB24GAq','y29UzMLNDxjHDa','Bg9Hza','ihzHBgLKyxrPBW','yw5KihjLC3rHCG','iMeYysbJB25MAq','y0HZzui','DxrMltG','z2v0q29UzMLNra','Cg93zxjmyxC','s2v5','ug1AEMe','yxzLzcb0BYbJBW','FI8UytjHl2XVzW','DwnOtfy','Aw50','A2XOq1y','Bw9Kzq'];_0x2c58=function(){return _0xa58ecc;};return _0x2c58();}export const ConfigSchema=z[_0x46988f(0x4a4,0x4c6)]({'server':z['object']({'url':z['string']()[_0x46988f(0x4a6,0x4c4)](),'apiKey':z[_0x46988f(0x4e1,0x4f4)]()[_0x46988f(0x4c3,0x4bd)]()}),'mode':z[_0x44574d(0x10c,0x10f)]([_0x46988f(0x4ef,0x4dc),_0x44574d(0xf0,0x136)]),'team':z[_0x44574d(0xa6,0xa4)]({'teamId':z['string'](),'teamPath':z[_0x46988f(0x4e1,0x4d9)](),'nodeId':z[_0x46988f(0x4e1,0x4e8)]()})[_0x46988f(0x4c3,0x4ac)](),'llm':z[_0x44574d(0xa6,0x94)]({'enabled':z[_0x46988f(0x4a7,0x497)](),'provider':z['enum']([_0x46988f(0x4a5,0x4b5),_0x46988f(0x4c7,0x4a5),'none']),'apiKey':z[_0x44574d(0xe3,0xb5)]()['optional'](),'model':z[_0x44574d(0xe3,0x127)]()['optional'](),'maxTokens':z[_0x44574d(0xad,0xea)]()[_0x46988f(0x496,0x4bd)]()[_0x46988f(0x4af,0x47d)]()[_0x44574d(0xc5,0xc3)]()})['optional']()[_0x44574d(0x106,0xfc)]({'enabled':![],'provider':_0x44574d(0xdf,0xbb),'maxTokens':0x1f4}),'embedding':z[_0x46988f(0x4a4,0x4ab)]({'enabled':z[_0x44574d(0xa9,0xe9)](),'provider':z['enum']([_0x44574d(0xf1,0xc3),_0x46988f(0x4a5,0x475),'e5']),'dimensions':z[_0x46988f(0x4ab,0x4cc)]()['int']()[_0x46988f(0x4af,0x4ed)]()})['optional']()[_0x46988f(0x504,0x4fb)]({'enabled':![],'provider':'local','dimensions':0x40}),'lifecycle':z[_0x46988f(0x4a4,0x489)]({'ttlDays':z[_0x44574d(0xad,0x82)]()[_0x46988f(0x496,0x455)]()[_0x46988f(0x4d7,0x4b1)+'e'](),'maxMemories':z[_0x44574d(0xad,0xd7)]()[_0x44574d(0x98,0xda)]()[_0x44574d(0xb1,0xe3)](),'maxMemoriesPerProject':z[_0x46988f(0x4ab,0x4b7)]()['int']()[_0x46988f(0x4af,0x4bb)]()[_0x46988f(0x4c3,0x4df)](),'cleanupOnSessionEnd':z[_0x44574d(0xa9,0x75)](),'qualityThreshold':z[_0x44574d(0xad,0xc6)]()[_0x46988f(0x4cb,0x4e5)](0x0)[_0x46988f(0x4b4,0x49e)](0x1),'tiering':z[_0x46988f(0x4a4,0x472)]({'enabled':z['boolean'](),'hotThresholdDays':z[_0x44574d(0xad,0xef)]()[_0x44574d(0x98,0x7e)]()[_0x44574d(0xb1,0x6e)](),'warmThresholdDays':z[_0x44574d(0xad,0xeb)]()['int']()[_0x46988f(0x4af,0x485)](),'coldCompressionEnabled':z[_0x46988f(0x4a7,0x4d5)](),'autoPromote':z[_0x46988f(0x4a7,0x49e)]()})['optional']()})[_0x46988f(0x4c3,0x4b5)]()[_0x46988f(0x504,0x4e3)]({'ttlDays':0x5a,'maxMemories':0x4e20,'cleanupOnSessionEnd':!![],'qualityThreshold':0.3}),'autoCapture':z[_0x44574d(0xa6,0xde)]({'enabled':z[_0x46988f(0x4a7,0x48f)](),'triggers':z[_0x44574d(0xc0,0xcd)](z['string']()),'excludePatterns':z[_0x46988f(0x4be,0x488)](z[_0x46988f(0x4e1,0x4ba)]()),'significanceThreshold':z['number']()[_0x44574d(0xcd,0xf3)](0x0)['max'](0x1)}),'autoInject':z[_0x46988f(0x4a4,0x488)]({'enabled':z['boolean'](),'maxMemories':z[_0x44574d(0xad,0xe3)]()[_0x44574d(0x98,0xb4)]()[_0x44574d(0xb1,0xdf)](),'maxTokens':z[_0x46988f(0x4ab,0x4a9)]()[_0x44574d(0x98,0xc0)]()[_0x44574d(0xb1,0xa1)]()}),'sessionSummary':z[_0x44574d(0xa6,0x98)]({'enabled':z[_0x46988f(0x4a7,0x4ce)](),'minActions':z[_0x44574d(0xad,0xd1)]()[_0x44574d(0x98,0xc0)]()[_0x44574d(0xd9,0xe7)+'e']()}),'db':z[_0x44574d(0xa6,0x66)]({'path':z['string'](),'maxSizeMB':z['number']()['positive']()}),'autoSync':z[_0x46988f(0x4a4,0x4a7)]({'enabled':z[_0x44574d(0xa9,0x7f)](),'pushOnSessionEnd':z[_0x46988f(0x4a7,0x481)](),'pullOnSessionStart':z[_0x44574d(0xa9,0xd1)](),'timeoutMs':z[_0x46988f(0x4ab,0x488)]()[_0x46988f(0x496,0x4d4)]()['nonnegativ'+'e'](),'intervalMs':z['number']()['int']()[_0x44574d(0xd9,0xeb)+'e']()[_0x46988f(0x504,0x4ca)](0x1b7740),'encryption':z[_0x46988f(0x4a4,0x4b9)]({'enabled':z[_0x44574d(0xa9,0x69)](),'algorithm':z[_0x44574d(0xea,0xfc)](_0x46988f(0x4ec,0x528)+'m')})[_0x44574d(0xc5,0xb7)]()})[_0x44574d(0xc5,0xde)]()['default']({'enabled':![],'pushOnSessionEnd':!![],'pullOnSessionStart':!![],'timeoutMs':0x7530,'intervalMs':0x1b7740}),'logging':z[_0x44574d(0xa6,0xb6)]({'enabled':z[_0x46988f(0x4a7,0x4b7)](),'level':z[_0x44574d(0x10c,0x105)]([_0x46988f(0x4f8,0x51d),'info','warn','error']),'outputDir':z[_0x44574d(0xe3,0xb4)](),'maxFileSizeMB':z['number']()['positive'](),'maxFiles':z[_0x46988f(0x4ab,0x48a)]()[_0x44574d(0x98,0x9a)]()[_0x44574d(0xb1,0xc9)]()})[_0x44574d(0xc5,0xf8)]()[_0x46988f(0x504,0x4f6)]({'enabled':![],'level':_0x44574d(0xe0,0xa8),'outputDir':_0x44574d(0x96,0x8f)+'s','maxFileSizeMB':0xa,'maxFiles':0x3}),'skillConversion':z[_0x44574d(0xa6,0x78)]({'enabled':z[_0x46988f(0x4a7,0x46d)](),'evaluationInterval':z[_0x46988f(0x4ab,0x479)]()[_0x44574d(0x98,0x5f)]()[_0x46988f(0x4af,0x4d2)](),'minRepetitions':z[_0x44574d(0xad,0xee)]()[_0x46988f(0x496,0x4b4)]()[_0x44574d(0xb1,0xa0)](),'similarityThreshold':z[_0x46988f(0x4ab,0x4a3)]()[_0x46988f(0x4cb,0x494)](0x0)['max'](0x1),'minConfidence':z['number']()[_0x44574d(0xcd,0x99)](0x0)[_0x44574d(0xb6,0xcf)](0x1),'reviewCycleDays':z[_0x46988f(0x4ab,0x4cb)]()[_0x46988f(0x496,0x4a5)]()['positive'](),'maxSkills':z[_0x44574d(0xad,0xc5)]()['int']()[_0x44574d(0xb1,0xca)](),'llmValidation':z[_0x46988f(0x4a7,0x479)]()})[_0x46988f(0x4c3,0x499)]()['default']({'enabled':![],'evaluationInterval':0x5,'minRepetitions':0x3,'similarityThreshold':0.85,'minConfidence':0.7,'reviewCycleDays':0x5a,'maxSkills':0x64,'llmValidation':!![]}),'proficiency':z['object']({'enabled':z['boolean'](),'actr':z[_0x46988f(0x4a4,0x470)]({'decayRate':z[_0x44574d(0xad,0x73)]()[_0x46988f(0x4d7,0x513)+'e'](),'baseLevelConstant':z[_0x44574d(0xad,0xc7)](),'maxAssociativeStrength':z[_0x44574d(0xad,0x92)]()[_0x44574d(0xd9,0xa3)+'e'](),'fanEffectFactor':z['number']()[_0x46988f(0x4d7,0x4d5)+'e'](),'mismatchPenalty':z[_0x44574d(0xad,0x69)]()['nonnegativ'+'e'](),'retrievalThreshold':z[_0x46988f(0x4ab,0x4a2)]()}),'levelFormula':z['enum']([_0x44574d(0x104,0x12d),_0x46988f(0x490,0x451)]),'maxLevel':z['number']()[_0x44574d(0x98,0x5d)]()[_0x44574d(0xcd,0x90)](0x1)[_0x46988f(0x4b4,0x4ea)](0x64)})['optional']()[_0x46988f(0x504,0x4fa)]({'enabled':!![],'actr':{'decayRate':0.5,'baseLevelConstant':0x0,'maxAssociativeStrength':0x2,'fanEffectFactor':0x1,'mismatchPenalty':0x1,'retrievalThreshold':0x0},'levelFormula':_0x46988f(0x502,0x4e7),'maxLevel':0xa}),'realtimeInject':z['object']({'enabled':z[_0x44574d(0xa9,0x7e)](),'maxMemories':z[_0x46988f(0x4ab,0x488)]()[_0x44574d(0x98,0x94)]()['positive'](),'maxTokens':z[_0x46988f(0x4ab,0x4ef)]()[_0x44574d(0x98,0x7b)]()['positive'](),'cacheSize':z[_0x46988f(0x4ab,0x48f)]()[_0x46988f(0x496,0x4c5)]()[_0x46988f(0x4af,0x4dc)](),'cacheTTLSeconds':z[_0x44574d(0xad,0x6d)]()[_0x46988f(0x496,0x456)]()['positive'](),'timeoutMs':z[_0x46988f(0x4ab,0x479)]()['int']()[_0x44574d(0xb1,0xcf)]()})[_0x46988f(0x4c3,0x48e)]()[_0x46988f(0x504,0x52d)]({'enabled':!![],'maxMemories':0x3,'maxTokens':0x3e8,'cacheSize':0x14,'cacheTTLSeconds':0x3c,'timeoutMs':0x64}),'emotionTracking':z['object']({'enabled':z['boolean'](),'maxPerSession':z[_0x44574d(0xad,0xbc)]()[_0x44574d(0x98,0xb6)]()['positive']()})[_0x44574d(0xc5,0xdc)]()[_0x46988f(0x504,0x4ca)]({'enabled':![],'maxPerSession':0xa}),'abTest':z['object']({'enabled':z['boolean']()})[_0x46988f(0x4c3,0x4da)]()[_0x46988f(0x504,0x538)]({'enabled':![]}),'locale':z[_0x46988f(0x50a,0x4d4)](['en','ko'])['optional']()})[_0x44574d(0xa4,0xe7)](_0x6ccf26=>_0x6ccf26[_0x46988f(0x498,0x498)]!==_0x44574d(0xf0,0x10a)||_0x6ccf26[_0x44574d(0xf0,0xc5)]!==undefined,{'message':_0x44574d(0xf7,0x138)+_0x44574d(0x114,0x104)+_0x44574d(0xbc,0xe9)+_0x44574d(0xb4,0xaf)+'\x20is\x20\x27team\x27'});export function generateNodeId(){function _0x5d1d2b(_0x2aa24a,_0x558971){return _0x46988f(_0x558971- -0x300,_0x2aa24a);}const _0x202c99={'uchLV':function(_0x519fd3){return _0x519fd3();}};return _0x202c99[_0x5d1d2b(0x1b4,0x195)](randomUUID);}export class ConfigManager{[_0x44574d(0xbd,0xf4)];[_0x44574d(0xf5,0xbd)]=null;['lastMtime']=0x0;[_0x46988f(0x510,0x4ee)+_0x44574d(0xd2,0x97)]=![];constructor(_0x2445ed){function _0x1e58d2(_0x3cb249,_0x1aca2b){return _0x44574d(_0x1aca2b-0x35d,_0x3cb249);}this[_0x1e58d2(0x3dc,0x41a)]=_0x2445ed??process.env.A2A_CONFIG_PATH??DEFAULT_CONFIG_PATH;}[_0x44574d(0x116,0x141)](){const _0x3a1d22={'sZJDd':_0x5a8be1(0x255,0x262)+_0x5a8be1(0x273,0x258)+_0x3b00a8(0x51c,0x4f8)+_0x5a8be1(0x280,0x259)+_0x3b00a8(0x4a2,0x48a)+'nfig.json.'+_0x3b00a8(0x512,0x4e1),'kUnAF':function(_0x177ac3,_0x174c52){return _0x177ac3(_0x174c52);},'nSKFD':function(_0x508fdb,_0x3be1d8){return _0x508fdb===_0x3be1d8;},'WTkSx':'iNFFN','ADnqw':_0x3b00a8(0x4ee,0x50d),'ALGYo':function(_0x13acd9,_0x265151){return _0x13acd9(_0x265151);},'opDZr':_0x3b00a8(0x4f6,0x4c5),'GRmBe':function(_0x7074c3,_0x26248e,_0xe174e0){return _0x7074c3(_0x26248e,_0xe174e0);},'IsLcW':_0x5a8be1(0x2f0,0x2d1),'QNood':function(_0x32f0f1){return _0x32f0f1();},'uWKlC':_0x5a8be1(0x298,0x280)+_0x5a8be1(0x2cb,0x2c7)+':','PmZza':_0x5a8be1(0x221,0x262)+'ig\x20file\x20co'+_0x3b00a8(0x4c2,0x4fe),'QTxeH':'[a2a]\x20Usin'+'g\x20default\x20'+_0x3b00a8(0x522,0x54f)+_0x5a8be1(0x2c2,0x285)+_0x5a8be1(0x280,0x252)+_0x3b00a8(0x525,0x536)+_0x3b00a8(0x4e9,0x4d2)+_0x5a8be1(0x2fd,0x2cf)+_0x3b00a8(0x4f5,0x4f2)};function _0x5a8be1(_0x32a063,_0x3a3c73){return _0x44574d(_0x3a3c73-0x1b6,_0x32a063);}function _0x3b00a8(_0x277c9c,_0x12d7dc){return _0x44574d(_0x277c9c-0x40d,_0x12d7dc);}if(!_0x3a1d22[_0x5a8be1(0x2c0,0x2c9)](existsSync,this[_0x3b00a8(0x4ca,0x50d)])){if(_0x3a1d22['nSKFD'](_0x3a1d22[_0x3b00a8(0x4c5,0x4d7)],_0x3b00a8(0x4cb,0x506))){_0x2b3810['error'](_0x3a1d22[_0x5a8be1(0x22b,0x26f)]),_0x1bc3e4[_0x3b00a8(0x4c8,0x492)](_0x5a8be1(0x253,0x280)+'lid\x20fields'+':');for(const _0x1798a9 of _0xc7cda3['issues']){_0x9700f6[_0x3b00a8(0x4c8,0x4b1)]('\x20\x20'+_0x1798a9[_0x5a8be1(0x29b,0x2b7)][_0x5a8be1(0x2ac,0x27c)]('.')+':\x20'+_0x1798a9[_0x5a8be1(0x239,0x27e)]);}}else return this[_0x3b00a8(0x502,0x4c1)]=_0x3a1d22[_0x5a8be1(0x2c3,0x2c9)](structuredClone,DEFAULT_CONFIG),this[_0x3b00a8(0x4b8,0x498)]=0x0,this[_0x3b00a8(0x50b,0x4d7)](this[_0x3b00a8(0x502,0x4ed)]),this[_0x5a8be1(0x2d1,0x2ab)];}try{if(_0x3a1d22[_0x5a8be1(0x274,0x291)]!==_0x3a1d22[_0x3b00a8(0x4e8,0x4ef)])_0x5d61bb=null,_0x58aff4=_0x40acda;else{const _0xa77777=_0x3a1d22[_0x3b00a8(0x50f,0x502)](statSync,this['configPath'])[_0x5a8be1(0x29d,0x25b)];if(this['config']&&_0x3a1d22['nSKFD'](_0xa77777,this[_0x5a8be1(0x224,0x261)])){if(_0x3a1d22['nSKFD'](_0x3a1d22[_0x3b00a8(0x4cf,0x4a3)],_0x3b00a8(0x4f6,0x4b7)))return this[_0x5a8be1(0x28b,0x2ab)];else _0x2a943b(_0x135c11,{'recursive':!![]});}this[_0x3b00a8(0x4b8,0x49e)]=_0xa77777;}}catch{if(this[_0x3b00a8(0x502,0x52b)])return this[_0x5a8be1(0x2a7,0x2ab)];}try{const _0x4e446a=_0x3a1d22[_0x5a8be1(0x24e,0x260)](readFileSync,this[_0x3b00a8(0x4ca,0x49b)],_0x3a1d22[_0x3b00a8(0x4d8,0x4cf)]),_0x3d059e=JSON[_0x3b00a8(0x4f9,0x4c2)](_0x4e446a),_0x92e428=ConfigSchema[_0x5a8be1(0x27f,0x2a2)](_0x3d059e);this[_0x3b00a8(0x502,0x52c)]=_0x92e428,this['_validatio'+_0x3b00a8(0x4df,0x4c1)]=![];if(!this[_0x3b00a8(0x502,0x4bc)][_0x3b00a8(0x4db,0x4e3)][_0x5a8be1(0x2ad,0x2b5)])try{const _0x52c7fc=_0x3a1d22['QNood'](getKeychainStore),_0x306a19=_0x52c7fc[_0x5a8be1(0x273,0x2b6)](_0x5a8be1(0x299,0x268)+'Key');_0x306a19&&(this[_0x5a8be1(0x2c1,0x2ab)][_0x3b00a8(0x4db,0x4d1)]['apiKey']=_0x306a19);}catch{}return this['config'];}catch(_0x228e2a){this[_0x3b00a8(0x51f,0x4e0)+_0x5a8be1(0x2a6,0x288)]=!![];try{const _0x3bfd55=this[_0x5a8be1(0x23c,0x273)]+_0x5a8be1(0x238,0x256),_0x1a2b40=_0x3a1d22[_0x5a8be1(0x25e,0x260)](readFileSync,this[_0x5a8be1(0x292,0x273)],_0x3a1d22[_0x3b00a8(0x4d8,0x4d9)]);writeFileSync(_0x3bfd55,_0x1a2b40,_0x3a1d22[_0x3b00a8(0x4d8,0x4d4)]);}catch{}if(_0x228e2a instanceof z[_0x5a8be1(0x24b,0x28d)]){console[_0x3b00a8(0x4c8,0x4e9)](_0x3a1d22[_0x3b00a8(0x4c6,0x4f2)]),console[_0x3b00a8(0x4c8,0x507)](_0x3a1d22[_0x5a8be1(0x258,0x29d)]);for(const _0x397cc2 of _0x228e2a['issues']){console['error']('\x20\x20'+_0x397cc2[_0x3b00a8(0x50e,0x53b)][_0x5a8be1(0x25d,0x27c)]('.')+':\x20'+_0x397cc2[_0x3b00a8(0x4d5,0x4d7)]);}}else console[_0x3b00a8(0x4c8,0x4c4)](_0x3a1d22[_0x3b00a8(0x4a1,0x4df)],_0x228e2a instanceof Error?_0x228e2a[_0x5a8be1(0x269,0x27e)]:String(_0x228e2a));return console[_0x3b00a8(0x4c8,0x4fb)](_0x3a1d22[_0x5a8be1(0x2b0,0x2ac)]),this[_0x3b00a8(0x502,0x509)]=structuredClone(DEFAULT_CONFIG),this[_0x3b00a8(0x502,0x4d5)];}}[_0x44574d(0xfe,0xcf)](_0x3f5800){const _0x290985={'LyyJz':function(_0x3735e8){return _0x3735e8();},'aQuAs':function(_0x5ed1d0,_0x1a94b0){return _0x5ed1d0!==_0x1a94b0;},'cHseB':_0x4c75de(0x56b,0x532)+_0x44cea0(0x229,0x256)+_0x44cea0(0x230,0x226)+_0x4c75de(0x53e,0x563)+_0x4c75de(0x551,0x526)+_0x44cea0(0x261,0x230)+_0x4c75de(0x512,0x524)+_0x44cea0(0x239,0x261)+'inal\x20setti'+_0x44cea0(0x287,0x257),'eeydg':function(_0x503a7a,_0x43382d){return _0x503a7a(_0x43382d);},'FuRER':function(_0x16e9c4,_0x5b59f7,_0x2bb5c6){return _0x16e9c4(_0x5b59f7,_0x2bb5c6);}};this[_0x4c75de(0x573,0x55e)+_0x4c75de(0x561,0x51e)]&&(_0x290985[_0x4c75de(0x532,0x53e)](_0x4c75de(0x4f6,0x50d),_0x44cea0(0x22a,0x249))?(console[_0x4c75de(0x4fe,0x544)](_0x290985[_0x44cea0(0x2ad,0x274)]),console[_0x44cea0(0x253,0x252)](_0x4c75de(0x50d,0x4fa)+'inal\x20confi'+_0x44cea0(0x29d,0x267)+_0x44cea0(0x273,0x22e)+_0x4c75de(0x513,0x51f))):_0x1f83c9(_0x12462b,{'recursive':!![]}));const _0xe81294=_0x290985[_0x4c75de(0x4fd,0x513)](dirname,this['configPath']);function _0x44cea0(_0x209502,_0x49f9da){return _0x46988f(_0x49f9da- -0x2a4,_0x209502);}!existsSync(_0xe81294)&&_0x290985[_0x44cea0(0x280,0x23f)](mkdirSync,_0xe81294,{'recursive':!![]});if(existsSync(this[_0x4c75de(0x510,0x509)]))try{copyFileSync(this[_0x4c75de(0x530,0x509)],this[_0x44cea0(0x1f5,0x217)]+_0x4c75de(0x503,0x4ec));}catch{}writeFileSync(this[_0x44cea0(0x1d8,0x217)],JSON[_0x4c75de(0x546,0x510)](_0x3f5800,null,0x2),_0x4c75de(0x526,0x567)),this['config']=_0x3f5800;function _0x4c75de(_0x449cd4,_0x1a7411){return _0x46988f(_0x1a7411-0x4e,_0x449cd4);}this['_validatio'+_0x44cea0(0x26d,0x22c)]=![];try{if(_0x44cea0(0x20f,0x214)!==_0x4c75de(0x4ef,0x506)){const _0x5e3466=woRDCL[_0x44cea0(0x26c,0x263)](_0x556742),_0x178b48=_0x5e3466[_0x4c75de(0x510,0x54c)](_0x44cea0(0x23f,0x20c)+_0x44cea0(0x1ad,0x1ed));_0x178b48&&(this['config'][_0x4c75de(0x4eb,0x51a)][_0x44cea0(0x29b,0x259)]=_0x178b48);}else this[_0x4c75de(0x528,0x4f7)]=statSync(this[_0x4c75de(0x500,0x509)])['mtimeMs'];}catch{}}['get'](_0x234d8e){function _0x1253d3(_0x2c6061,_0x5c3531){return _0x44574d(_0x5c3531-0x3a2,_0x2c6061);}const _0x77915d=this[_0x1253d3(0x491,0x4b8)]();return _0x77915d[_0x234d8e];}[_0x44574d(0xfb,0x12b)](_0x2c1be2,_0x2cf49e){const _0x289381=this[_0x4cf20f(0x255,0x233)]();function _0x4cf20f(_0x3df391,_0x184ec2){return _0x46988f(_0x184ec2- -0x2e1,_0x3df391);}_0x289381[_0x2c1be2]=_0x2cf49e;function _0x2d677c(_0x1de1d7,_0xf1febe){return _0x46988f(_0x1de1d7- -0x43f,_0xf1febe);}this[_0x4cf20f(0x1de,0x21b)](_0x289381);}['setApiKey'](_0x1abe81){const _0x46eb9b={'EiMvV':function(_0x39c7e1,_0x58cc3b){return _0x39c7e1!==_0x58cc3b;},'iNXSB':_0x3b419b(-0xc,0x3a),'WZWgS':_0x4473bf(-0xb3,-0xb9)},_0x396cf5=getKeychainStore();if(_0x396cf5['isAvailabl'+'e']()&&_0x396cf5[_0x4473bf(-0xad,-0x9d)](_0x4473bf(-0xf6,-0xb2)+_0x4473bf(-0x115,-0xd6),_0x1abe81)){const _0x65ddf8=this[_0x3b419b(0x3e,0x7b)]();delete _0x65ddf8[_0x4473bf(-0xda,-0xce)][_0x3b419b(0x42,0x64)],this['save'](_0x65ddf8);if(this[_0x3b419b(0x93,0x5a)]){if(_0x46eb9b[_0x4473bf(-0x9e,-0x87)]('heSBk',_0x4473bf(-0xc4,-0xe3)))this[_0x3b419b(0x52,0x5a)][_0x4473bf(-0xda,-0xbc)][_0x3b419b(0x5a,0x64)]=_0x1abe81;else{const _0x3ea279=_0x3abc3d();_0x3ea279[_0x3b419b(-0x3a,0x2)]('server.api'+_0x3b419b(0x38,-0x8));const _0x524aad=this[_0x4473bf(-0x92,-0xca)]();delete _0x524aad['server']['apiKey'],this[_0x3b419b(0x4d,0x63)](_0x524aad);}}return _0x46eb9b[_0x4473bf(-0xa0,-0xb0)];}const _0x1643fb=this['load']();function _0x3b419b(_0x4096a5,_0x3ca3ce){return _0x44574d(_0x3ca3ce- -0x9b,_0x4096a5);}_0x1643fb[_0x4473bf(-0xda,-0xf7)][_0x3b419b(0xa8,0x64)]=_0x1abe81,this[_0x3b419b(0x2a,0x63)](_0x1643fb);function _0x4473bf(_0x5f0a60,_0x3bad4d){return _0x44574d(_0x5f0a60- -0x1a8,_0x3bad4d);}return _0x46eb9b[_0x3b419b(0x81,0x43)];}[_0x44574d(0xa1,0xdd)+'ey'](){const _0x443fbe=getKeychainStore();_0x443fbe['delete']('server.api'+_0x470f44(-0x192,-0x1c5));function _0x18d4e3(_0x1b7d1e,_0x1320cf){return _0x46988f(_0x1320cf- -0x2ce,_0x1b7d1e);}const _0x318122=this[_0x18d4e3(0x237,0x246)]();function _0x470f44(_0x2f86d0,_0x458de6){return _0x46988f(_0x458de6- -0x656,_0x2f86d0);}delete _0x318122[_0x470f44(-0x150,-0x18a)]['apiKey'],this['save'](_0x318122);}[_0x44574d(0xf3,0xeb)](){this[_0x37d560(0x4cb,0x4a7)]=structuredClone(DEFAULT_CONFIG);function _0x3fd869(_0x5a0c18,_0xe27ce9){return _0x44574d(_0xe27ce9- -0xad,_0x5a0c18);}this[_0x3fd869(0x8b,0x65)+'nFailed']=![];function _0x37d560(_0xe4745f,_0x2bd9f3){return _0x44574d(_0xe4745f-0x3d6,_0x2bd9f3);}this[_0x3fd869(0x80,0x51)](this[_0x3fd869(0x51,0x48)]);}[_0x46988f(0x51a,0x518)+'ir'](){const _0x1441e8={'SKMAA':function(_0x545961,_0x2f284c){return _0x545961+_0x2f284c;},'qZVwC':function(_0x5ec02d,_0x17f8e0,_0x230102){return _0x5ec02d(_0x17f8e0,_0x230102);},'itKHn':function(_0x4b617c,_0x1926bd,_0x26ef8b,_0x14f84f){return _0x4b617c(_0x1926bd,_0x26ef8b,_0x14f84f);},'Qspsu':'utf-8','klhCV':function(_0x4e16f7,_0x3981e3){return _0x4e16f7!==_0x3981e3;},'NHMIN':_0x30f323(-0x128,-0x109),'LUmAe':_0x5cffd2(0x224,0x246)};function _0x30f323(_0x180b0c,_0x36d3f7){return _0x44574d(_0x180b0c- -0x215,_0x36d3f7);}const _0x3c24b0=dirname(this[_0x30f323(-0x158,-0x11b)]);function _0x5cffd2(_0x5779a1,_0x3a2f12){return _0x44574d(_0x3a2f12-0x175,_0x5779a1);}if(!existsSync(_0x3c24b0)){if(_0x1441e8[_0x5cffd2(0x1db,0x20e)](_0x1441e8[_0x30f323(-0x15e,-0x12d)],_0x1441e8[_0x30f323(-0x107,-0xd4)]))mkdirSync(_0x3c24b0,{'recursive':!![]});else{const _0x119874=vgnPhL['SKMAA'](this[_0x30f323(-0x158,-0x139)],_0x30f323(-0x175,-0x1b0)),_0x25fadc=vgnPhL[_0x5cffd2(0x251,0x278)](_0x195eb0,this[_0x30f323(-0x158,-0x12c)],'utf-8');vgnPhL[_0x5cffd2(0x261,0x225)](_0x880dc6,_0x119874,_0x25fadc,vgnPhL[_0x30f323(-0x166,-0x137)]);}}return _0x3c24b0;}}function _0x34e7(_0x315f06,_0x1812d0){_0x315f06=_0x315f06-0x1b2;const _0x2c5848=_0x2c58();let _0x34e739=_0x2c5848[_0x315f06];if(_0x34e7['jVXqyG']===undefined){var _0x1c3d3c=function(_0x5b84dc){const _0x45f475='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1baa24='',_0x9d114b='';for(let _0x3c82cf=0x0,_0x4bc487,_0x464d29,_0x165e2f=0x0;_0x464d29=_0x5b84dc['charAt'](_0x165e2f++);~_0x464d29&&(_0x4bc487=_0x3c82cf%0x4?_0x4bc487*0x40+_0x464d29:_0x464d29,_0x3c82cf++%0x4)?_0x1baa24+=String['fromCharCode'](0xff&_0x4bc487>>(-0x2*_0x3c82cf&0x6)):0x0){_0x464d29=_0x45f475['indexOf'](_0x464d29);}for(let _0x55e3b6=0x0,_0x5e573b=_0x1baa24['length'];_0x55e3b6<_0x5e573b;_0x55e3b6++){_0x9d114b+='%'+('00'+_0x1baa24['charCodeAt'](_0x55e3b6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x9d114b);};_0x34e7['ygoRba']=_0x1c3d3c,_0x34e7['Wdibtr']={},_0x34e7['jVXqyG']=!![];}const _0x5f5719=_0x2c5848[0x0],_0x1fd819=_0x315f06+_0x5f5719,_0x2c9092=_0x34e7['Wdibtr'][_0x1fd819];return!_0x2c9092?(_0x34e739=_0x34e7['ygoRba'](_0x34e739),_0x34e7['Wdibtr'][_0x1fd819]=_0x34e739):_0x34e739=_0x2c9092,_0x34e739;}let _instance=null,_instancePath;function _0x44574d(_0x2e68ca,_0xfebc10){return _0x34e7(_0x2e68ca- -0x120,_0xfebc10);}export function getConfigManager(_0x3249b4){const _0x16bbdb=_0x3249b4??process.env.A2A_CONFIG_PATH??DEFAULT_CONFIG_PATH;if(_instance&&_instancePath===_0x16bbdb)return _instance;return _instance=new ConfigManager(_0x16bbdb),_instancePath=_0x16bbdb,_instance;}export function resetConfigManager(){_instance=null,_instancePath=undefined;}
|