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/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 _0x3558(_0x16e740,_0x150271){_0x16e740=_0x16e740-0xa2;const _0x289e28=_0x289e();let _0x3558cb=_0x289e28[_0x16e740];if(_0x3558['XTQqOO']===undefined){var _0x3c9fa8=function(_0x562e2e){const _0x3ed677='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3238c4='',_0xe29327='';for(let _0x158938=0x0,_0x37eee3,_0x3064d6,_0x425613=0x0;_0x3064d6=_0x562e2e['charAt'](_0x425613++);~_0x3064d6&&(_0x37eee3=_0x158938%0x4?_0x37eee3*0x40+_0x3064d6:_0x3064d6,_0x158938++%0x4)?_0x3238c4+=String['fromCharCode'](0xff&_0x37eee3>>(-0x2*_0x158938&0x6)):0x0){_0x3064d6=_0x3ed677['indexOf'](_0x3064d6);}for(let _0x3cce1c=0x0,_0x288398=_0x3238c4['length'];_0x3cce1c<_0x288398;_0x3cce1c++){_0xe29327+='%'+('00'+_0x3238c4['charCodeAt'](_0x3cce1c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xe29327);};_0x3558['MsKrKE']=_0x3c9fa8,_0x3558['wVxWTu']={},_0x3558['XTQqOO']=!![];}const _0x28d081=_0x289e28[0x0],_0x390e13=_0x16e740+_0x28d081,_0x58670e=_0x3558['wVxWTu'][_0x390e13];return!_0x58670e?(_0x3558cb=_0x3558['MsKrKE'](_0x3558cb),_0x3558['wVxWTu'][_0x390e13]=_0x3558cb):_0x3558cb=_0x58670e,_0x3558cb;}(function(_0x491e9a,_0x4f60d5){function _0x1fca88(_0xc20342,_0x4da75d){return _0x3558(_0xc20342-0x2f5,_0x4da75d);}function _0x51ce50(_0x4d1903,_0x121cd1){return _0x3558(_0x121cd1-0x8b,_0x4d1903);}const _0x167b51=_0x491e9a();while(!![]){try{const _0x4c5fc8=parseInt(_0x1fca88(0x3ba,0x3c4))/0x1*(parseInt(_0x1fca88(0x3b7,0x3ef))/0x2)+-parseInt(_0x51ce50(0x189,0x170))/0x3+-parseInt(_0x1fca88(0x40a,0x3f1))/0x4+parseInt(_0x51ce50(0x15f,0x13c))/0x5+-parseInt(_0x1fca88(0x3ad,0x3c4))/0x6+parseInt(_0x1fca88(0x3cd,0x401))/0x7+parseInt(_0x1fca88(0x3a5,0x3c3))/0x8;if(_0x4c5fc8===_0x4f60d5)break;else _0x167b51['push'](_0x167b51['shift']());}catch(_0x53627b){_0x167b51['push'](_0x167b51['shift']());}}}(_0x289e,0x33324));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';function _0x26c6d3(_0x260d62,_0x235c58){return _0x3558(_0x235c58-0x3b1,_0x260d62);}function _0x332de5(_0x461a03,_0x1be11f){return _0x3558(_0x1be11f-0x24e,_0x461a03);}import{DEFAULT_CONFIG}from'../types/index.js';import{getKeychainStore}from'../utils/keychain.js';const DEFAULT_CONFIG_DIR=join(homedir(),_0x332de5(0x35a,0x32c)),DEFAULT_CONFIG_PATH=join(DEFAULT_CONFIG_DIR,_0x332de5(0x373,0x361)+'n');function _0x289e(){const _0x11e894=['Cgf0Aa','Aw5HBcbJB25MAq','Aw9UigzHAwXLza','q0LLyK4','C2vYDMvYlMfWAq','B3vZignVBMzPzW','u2f2Aw5Nig1HEq','AxnZDwvZ','otm0mdeWsxLivKHR','vvbIshy','B2jQzwn0','BNvTyMvY','s2v5','CMvMAw5L','lMeYyq','ywn0AxzHDgLVBG','BwvZC2fNzq','tvnuEuG','v0rqteC','yM9VBgvHBG','lMjHAW','ndCYotq0A0jdtfv2','AM9PBG','ihDOzw4GBw9Kzq','C2v0','yw5KihjLC3rHCG','DhbNAuW','CNj1ChrLzdO','Bg9JywW','Bwf4','Cg9ZAxrPDMu','Ccb0BYbJB25MAq','Aw50','y29UzMLNDxjHDa','zgvSzxrLqxbPsW','BgLKigzPzwXKCW','y29UzMLNugf0Aa','w2eYyv0Gv2fYBG','yxbPs2v5','C2f2zq','zYbKzwzHDwX0ia','CMvZzxq','zgvMyxvSDa','zhLIy1m','ALv6qvq','D0f3C2y','w2eYyv0Gsw52yq','CgfYC2u','B3bLBMfP','BwLU','yxzLzcb0BYbJBW','ihLVDxiGB3jPzW','s0jbuw0','DvHvue4','C2vYDMvY','ywzlA0K','yuXQENa','BMDZlG','iMeYysbJB25MAq','ru5qtK8','DevgEMu','Aw5MBW','ywvZlti1nI1NyW','AxnbDMfPBgfIBa','zYbIywnRzwqGDq','DxrMltG','z2v0q29UzMLNra','y29UzMLNlMPZBW','CefcBvG','nZK1nJaWDeXUCg1y','BgfZDe10Aw1L','AwCGDMfSAwrHDa','Cxbrwui','DLjNDfy','BKzHAwXLza','BM9UBMvNyxrPDG','zw51Bq','AguGzxjYB3jZia','ihzHBgLKyxrPBW','BxrPBwvnCW','lIbcywnRDxaGCW','A2v5y2HHAw4','CYbYzxf1AxjLza','DcWGB3iGDxnLia','zYbYzxnLDciU','B3b0Aw9UywW','FI8UytjHl2XVzW','otmYnJG4rKvftKT5','mtm4mJC2mfz2AePcAG','yMLAC1G','rgHmy2G','w2eYyv0Gq29UzG','r1nqwuq','D2fYBG','C3rYAw5N','nJi3ndjAy1HVDKG','y29UzMLN','z3vYyxrPB24GAq','C3rYAw5NAwz5','Aw5NoIbqCMv2Aq','yMfR','DgvHBq','yw50AhjVCgLJ','BMzPzY5QC29UlG','q0fRC1i','mtaWmJC0BenprwDW','x3zHBgLKyxrPBW','z2v0','mwLOthrwBG','t3n4ufu','rNfyAvi','Bg9Hza','tgfRzM0','zxjYB3i','zgvSzxrL','yxjYyxK','Cg93zxjmyxC','BM9Uzq','DxjS'];_0x289e=function(){return _0x11e894;};return _0x289e();}export const ConfigSchema=z[_0x26c6d3(0x45f,0x48b)]({'server':z[_0x332de5(0x33e,0x328)]({'url':z['string']()[_0x332de5(0x2ee,0x31d)](),'apiKey':z[_0x332de5(0x33e,0x305)]()['optional']()}),'mode':z['enum']([_0x26c6d3(0x471,0x49d),_0x26c6d3(0x472,0x46f)]),'team':z[_0x332de5(0x325,0x328)]({'teamId':z[_0x26c6d3(0x49b,0x468)](),'teamPath':z[_0x332de5(0x322,0x305)](),'nodeId':z[_0x332de5(0x31f,0x305)]()})[_0x26c6d3(0x45e,0x45f)](),'llm':z['object']({'enabled':z[_0x332de5(0x325,0x331)](),'provider':z[_0x332de5(0x2ec,0x2f3)]([_0x332de5(0x339,0x34e),_0x332de5(0x307,0x30d),_0x332de5(0x31c,0x31c)]),'apiKey':z[_0x332de5(0x30f,0x305)]()['optional'](),'model':z[_0x332de5(0x2f7,0x305)]()[_0x332de5(0x30f,0x2fc)](),'maxTokens':z['number']()[_0x332de5(0x30f,0x33e)]()[_0x26c6d3(0x47e,0x49f)]()[_0x26c6d3(0x492,0x45f)]()})[_0x26c6d3(0x451,0x45f)]()[_0x26c6d3(0x4b6,0x4ab)]({'enabled':![],'provider':_0x26c6d3(0x458,0x47f),'maxTokens':0x1f4}),'embedding':z[_0x332de5(0x302,0x328)]({'enabled':z[_0x332de5(0x308,0x331)](),'provider':z[_0x332de5(0x328,0x2f3)]([_0x332de5(0x31b,0x33a),_0x332de5(0x36c,0x34e),'e5']),'dimensions':z[_0x26c6d3(0x4a0,0x48c)]()[_0x26c6d3(0x481,0x4a1)]()[_0x26c6d3(0x4d9,0x49f)]()})['optional']()[_0x332de5(0x319,0x348)]({'enabled':![],'provider':_0x332de5(0x323,0x33a),'dimensions':0x40}),'lifecycle':z[_0x26c6d3(0x469,0x48b)]({'ttlDays':z[_0x332de5(0x30d,0x329)]()['int']()[_0x26c6d3(0x44a,0x455)+'e'](),'maxMemories':z[_0x26c6d3(0x463,0x48c)]()[_0x26c6d3(0x4b5,0x4a1)]()['positive'](),'maxMemoriesPerProject':z['number']()[_0x332de5(0x356,0x33e)]()['positive']()[_0x332de5(0x2ce,0x2fc)](),'cleanupOnSessionEnd':z[_0x26c6d3(0x4b3,0x494)](),'qualityThreshold':z[_0x26c6d3(0x4c0,0x48c)]()[_0x332de5(0x329,0x34f)](0x0)[_0x26c6d3(0x4b4,0x49e)](0x1),'tiering':z['object']({'enabled':z[_0x26c6d3(0x4a5,0x494)](),'hotThresholdDays':z[_0x332de5(0x332,0x329)]()[_0x332de5(0x35f,0x33e)]()[_0x26c6d3(0x4b6,0x49f)](),'warmThresholdDays':z['number']()[_0x332de5(0x36f,0x33e)]()[_0x332de5(0x373,0x33c)](),'coldCompressionEnabled':z['boolean'](),'autoPromote':z[_0x26c6d3(0x4a3,0x494)]()})[_0x26c6d3(0x446,0x45f)]()})[_0x26c6d3(0x485,0x45f)]()['default']({'ttlDays':0x5a,'maxMemories':0x4e20,'cleanupOnSessionEnd':!![],'qualityThreshold':0.3}),'autoCapture':z['object']({'enabled':z['boolean'](),'triggers':z[_0x26c6d3(0x4ae,0x47d)](z[_0x332de5(0x335,0x305)]()),'excludePatterns':z[_0x332de5(0x2fa,0x31a)](z[_0x26c6d3(0x46a,0x468)]()),'significanceThreshold':z[_0x332de5(0x2ff,0x329)]()[_0x26c6d3(0x4b2,0x4b2)](0x0)[_0x26c6d3(0x4ba,0x49e)](0x1)}),'autoInject':z[_0x332de5(0x318,0x328)]({'enabled':z[_0x332de5(0x355,0x331)](),'maxMemories':z[_0x26c6d3(0x47c,0x48c)]()[_0x26c6d3(0x4b5,0x4a1)]()[_0x26c6d3(0x4a2,0x49f)](),'maxTokens':z[_0x26c6d3(0x4a0,0x48c)]()[_0x26c6d3(0x48c,0x4a1)]()[_0x26c6d3(0x4bd,0x49f)]()}),'sessionSummary':z[_0x26c6d3(0x494,0x48b)]({'enabled':z[_0x26c6d3(0x4bd,0x494)](),'minActions':z[_0x26c6d3(0x49f,0x48c)]()[_0x332de5(0x354,0x33e)]()[_0x26c6d3(0x45f,0x455)+'e']()}),'db':z['object']({'path':z[_0x332de5(0x2f2,0x305)](),'maxSizeMB':z['number']()[_0x26c6d3(0x4d7,0x49f)]()}),'autoSync':z[_0x26c6d3(0x483,0x48b)]({'enabled':z['boolean'](),'pushOnSessionEnd':z['boolean'](),'pullOnSessionStart':z['boolean'](),'timeoutMs':z[_0x26c6d3(0x48b,0x48c)]()['int']()[_0x26c6d3(0x47c,0x455)+'e'](),'intervalMs':z[_0x26c6d3(0x4be,0x48c)]()['int']()[_0x26c6d3(0x46a,0x455)+'e']()['default'](0x1b7740),'encryption':z[_0x332de5(0x362,0x328)]({'enabled':z[_0x26c6d3(0x47c,0x494)](),'algorithm':z['literal'](_0x332de5(0x371,0x35c)+'m')})[_0x332de5(0x2d3,0x2fc)]()})[_0x26c6d3(0x493,0x45f)]()[_0x26c6d3(0x49c,0x4ab)]({'enabled':![],'pushOnSessionEnd':!![],'pullOnSessionStart':!![],'timeoutMs':0x7530,'intervalMs':0x1b7740}),'logging':z[_0x26c6d3(0x496,0x48b)]({'enabled':z[_0x332de5(0x369,0x331)](),'level':z[_0x26c6d3(0x45a,0x456)](['debug','info','warn',_0x26c6d3(0x493,0x47b)]),'outputDir':z['string'](),'maxFileSizeMB':z[_0x26c6d3(0x48c,0x48c)]()[_0x26c6d3(0x4bc,0x49f)](),'maxFiles':z['number']()['int']()[_0x332de5(0x315,0x33c)]()})[_0x26c6d3(0x48b,0x45f)]()[_0x26c6d3(0x493,0x4ab)]({'enabled':![],'level':_0x332de5(0x392,0x35b),'outputDir':_0x26c6d3(0x45e,0x460)+'s','maxFileSizeMB':0xa,'maxFiles':0x3}),'skillConversion':z[_0x332de5(0x2fb,0x328)]({'enabled':z[_0x26c6d3(0x473,0x494)](),'evaluationInterval':z[_0x26c6d3(0x4ae,0x48c)]()['int']()[_0x332de5(0x30b,0x33c)](),'minRepetitions':z['number']()[_0x26c6d3(0x4a2,0x4a1)]()[_0x26c6d3(0x4cf,0x49f)](),'similarityThreshold':z['number']()['min'](0x0)[_0x26c6d3(0x484,0x49e)](0x1),'minConfidence':z[_0x26c6d3(0x464,0x48c)]()['min'](0x0)[_0x332de5(0x314,0x33b)](0x1),'reviewCycleDays':z['number']()[_0x332de5(0x362,0x33e)]()[_0x26c6d3(0x47a,0x49f)](),'maxSkills':z['number']()[_0x332de5(0x352,0x33e)]()['positive'](),'llmValidation':z[_0x26c6d3(0x459,0x494)]()})['optional']()[_0x332de5(0x334,0x348)]({'enabled':![],'evaluationInterval':0x5,'minRepetitions':0x3,'similarityThreshold':0.85,'minConfidence':0.7,'reviewCycleDays':0x5a,'maxSkills':0x64,'llmValidation':!![]}),'proficiency':z['object']({'enabled':z[_0x332de5(0x34c,0x331)](),'actr':z[_0x332de5(0x310,0x328)]({'decayRate':z[_0x332de5(0x332,0x329)]()[_0x26c6d3(0x46b,0x455)+'e'](),'baseLevelConstant':z[_0x332de5(0x32b,0x329)](),'maxAssociativeStrength':z[_0x332de5(0x337,0x329)]()['nonnegativ'+'e'](),'fanEffectFactor':z[_0x26c6d3(0x488,0x48c)]()[_0x26c6d3(0x486,0x455)+'e'](),'mismatchPenalty':z[_0x332de5(0x32e,0x329)]()['nonnegativ'+'e'](),'retrievalThreshold':z[_0x26c6d3(0x46d,0x48c)]()}),'levelFormula':z[_0x332de5(0x2d2,0x2f3)]([_0x332de5(0x318,0x32d),_0x332de5(0x323,0x31b)]),'maxLevel':z[_0x332de5(0x30e,0x329)]()[_0x332de5(0x30e,0x33e)]()[_0x26c6d3(0x4a7,0x4b2)](0x1)[_0x332de5(0x302,0x33b)](0x64)})[_0x332de5(0x2cf,0x2fc)]()[_0x26c6d3(0x4b6,0x4ab)]({'enabled':!![],'actr':{'decayRate':0.5,'baseLevelConstant':0x0,'maxAssociativeStrength':0x2,'fanEffectFactor':0x1,'mismatchPenalty':0x1,'retrievalThreshold':0x0},'levelFormula':_0x26c6d3(0x46a,0x490),'maxLevel':0xa}),'realtimeInject':z[_0x26c6d3(0x4aa,0x48b)]({'enabled':z[_0x26c6d3(0x4c3,0x494)](),'maxMemories':z[_0x26c6d3(0x4a6,0x48c)]()['int']()['positive'](),'maxTokens':z[_0x26c6d3(0x4b9,0x48c)]()['int']()[_0x332de5(0x325,0x33c)](),'cacheSize':z[_0x332de5(0x30e,0x329)]()[_0x26c6d3(0x4a3,0x4a1)]()[_0x332de5(0x331,0x33c)](),'cacheTTLSeconds':z[_0x26c6d3(0x488,0x48c)]()['int']()[_0x26c6d3(0x4d3,0x49f)](),'timeoutMs':z[_0x26c6d3(0x458,0x48c)]()[_0x332de5(0x320,0x33e)]()[_0x26c6d3(0x4d1,0x49f)]()})[_0x332de5(0x314,0x2fc)]()['default']({'enabled':!![],'maxMemories':0x3,'maxTokens':0x3e8,'cacheSize':0x14,'cacheTTLSeconds':0x3c,'timeoutMs':0x64}),'emotionTracking':z['object']({'enabled':z[_0x26c6d3(0x49a,0x494)](),'maxPerSession':z[_0x26c6d3(0x451,0x48c)]()[_0x26c6d3(0x4cb,0x4a1)]()[_0x26c6d3(0x481,0x49f)]()})[_0x332de5(0x2f8,0x2fc)]()[_0x332de5(0x321,0x348)]({'enabled':![],'maxPerSession':0xa}),'abTest':z['object']({'enabled':z[_0x332de5(0x33f,0x331)]()})[_0x332de5(0x317,0x2fc)]()[_0x26c6d3(0x47f,0x4ab)]({'enabled':![]}),'locale':z[_0x332de5(0x2c7,0x2f3)](['en','ko'])[_0x332de5(0x2d8,0x2fc)]()})[_0x332de5(0x32c,0x32b)](_0x3fae51=>_0x3fae51['mode']!=='team'||_0x3fae51['team']!==undefined,{'message':'Team\x20confi'+_0x26c6d3(0x45a,0x46b)+_0x26c6d3(0x43c,0x45c)+_0x332de5(0x315,0x335)+'\x20is\x20\x27team\x27'});export function generateNodeId(){const _0x505835={'aLjzp':function(_0x4c38b8){return _0x4c38b8();}};function _0x49a475(_0x2a1a3c,_0x880ae9){return _0x26c6d3(_0x2a1a3c,_0x880ae9- -0x746);}return _0x505835[_0x49a475(-0x283,-0x28d)](randomUUID);}export class ConfigManager{[_0x26c6d3(0x4b2,0x4a5)];[_0x332de5(0x330,0x307)]=null;['lastMtime']=0x0;['_validatio'+_0x26c6d3(0x42a,0x454)]=![];constructor(_0x27bfb7){function _0x558968(_0x3fd8a0,_0x3ba521){return _0x26c6d3(_0x3ba521,_0x3fd8a0- -0x63);}this[_0x558968(0x442,0x423)]=_0x27bfb7??process.env.A2A_CONFIG_PATH??DEFAULT_CONFIG_PATH;}[_0x332de5(0x2ea,0x316)](){const _0x1ad5a6={'jUzAT':function(_0x35171,_0x1282cd){return _0x35171(_0x1282cd);},'KBAQm':function(_0x10f46f,_0x2bdcac){return _0x10f46f!==_0x2bdcac;},'wAwsf':'XMSmI','ISgOh':function(_0x31b8ea,_0x53fd18){return _0x31b8ea===_0x53fd18;},'KtiPn':function(_0x5bd06a,_0x29034d){return _0x5bd06a===_0x29034d;},'uXUPN':function(_0xe05b98){return _0xe05b98();},'tpgiL':_0x93bfbf(0xe5,0xdd)+_0xe882de(-0x171,-0x153),'biZsX':function(_0x4da551,_0x393e43){return _0x4da551+_0x393e43;},'rxQZe':_0xe882de(-0x148,-0x14b),'kaFmj':function(_0x3aafc2,_0x257b56,_0x21f451,_0x217301){return _0x3aafc2(_0x257b56,_0x21f451,_0x217301);},'UPbHv':_0x93bfbf(0x10f,0x12f)+_0xe882de(-0x118,-0x13c)+':','vqgeq':_0x93bfbf(0xc5,0x93)+'ig\x20file\x20co'+_0x93bfbf(0xfc,0x11c),'MfcUm':function(_0x2acc6a,_0x5bc5d2){return _0x2acc6a(_0x5bc5d2);}};if(!_0x1ad5a6['jUzAT'](existsSync,this[_0x93bfbf(0x105,0x103)])){if(_0x1ad5a6[_0x93bfbf(0x115,0x130)](_0x1ad5a6[_0x93bfbf(0x10e,0xdc)],_0x1ad5a6['wAwsf']))_0x49f5b8(_0x12fdc9,{'recursive':!![]});else return this['config']=structuredClone(DEFAULT_CONFIG),this[_0x93bfbf(0x127,0x144)]=0x0,this[_0x93bfbf(0x108,0x124)](this[_0x93bfbf(0xca,0x98)]),this[_0x93bfbf(0xca,0xc3)];}function _0x93bfbf(_0x18a13b,_0x283dd9){return _0x26c6d3(_0x283dd9,_0x18a13b- -0x3a0);}try{const _0x2022d3=_0x1ad5a6['jUzAT'](statSync,this[_0xe882de(-0x127,-0x13b)])['mtimeMs'];if(this[_0x93bfbf(0xca,0xf9)]&&_0x1ad5a6['ISgOh'](_0x2022d3,this['lastMtime']))return this[_0x93bfbf(0xca,0xb0)];this[_0xe882de(-0xe9,-0x119)]=_0x2022d3;}catch{if(this['config'])return this[_0xe882de(-0x17b,-0x176)];}function _0xe882de(_0x13b9df,_0x2bc053){return _0x26c6d3(_0x13b9df,_0x2bc053- -0x5e0);}try{const _0x31a977=readFileSync(this[_0xe882de(-0x13e,-0x13b)],'utf-8'),_0x13baeb=JSON[_0x93bfbf(0x110,0xe2)](_0x31a977),_0x19f2ac=ConfigSchema['parse'](_0x13baeb);this[_0xe882de(-0x14a,-0x176)]=_0x19f2ac,this[_0xe882de(-0x192,-0x16c)+_0x93bfbf(0xb4,0xcf)]=![];if(!this['config'][_0x93bfbf(0x117,0x121)][_0xe882de(-0x115,-0x139)])try{if(_0x1ad5a6['KtiPn'](_0x93bfbf(0xf3,0x129),_0x93bfbf(0xf3,0xff))){const _0x366d6c=_0x1ad5a6[_0x93bfbf(0x116,0x12f)](getKeychainStore),_0x3cee17=_0x366d6c[_0xe882de(-0x157,-0x16b)](_0x1ad5a6[_0x93bfbf(0xfb,0x12f)]);_0x3cee17&&(this[_0xe882de(-0x193,-0x176)][_0x93bfbf(0x117,0xea)][_0x93bfbf(0x107,0xd7)]=_0x3cee17);}else try{_0x18e244(this[_0x93bfbf(0x105,0x13d)],this[_0x93bfbf(0x105,0x115)]+'.bak');}catch{}}catch{}return this[_0x93bfbf(0xca,0x105)];}catch(_0x571359){this[_0x93bfbf(0xd4,0xdd)+_0x93bfbf(0xb4,0xc9)]=!![];try{if(_0x93bfbf(0xe4,0xe0)!==_0xe882de(-0x121,-0x15c))this[_0x93bfbf(0xca,0xd1)]=_0x1ad5a6[_0xe882de(-0x144,-0x133)](_0x3d767e,_0x3be5f3),this[_0x93bfbf(0xd4,0x105)+_0x93bfbf(0xb4,0xbb)]=![],this['save'](this[_0x93bfbf(0xca,0xb2)]);else{const _0x59bda8=_0x1ad5a6[_0x93bfbf(0xc3,0xf0)](this[_0x93bfbf(0x105,0x12d)],_0x1ad5a6['rxQZe']),_0x46120f=readFileSync(this[_0xe882de(-0x15e,-0x13b)],_0xe882de(-0x10a,-0x11e));_0x1ad5a6['kaFmj'](writeFileSync,_0x59bda8,_0x46120f,_0x93bfbf(0x122,0x106));}}catch{}if(_0x571359 instanceof z['ZodError']){console[_0xe882de(-0x19f,-0x165)]('[a2a]\x20Conf'+_0xe882de(-0x10a,-0x118)+_0x93bfbf(0xe3,0xc2)+_0x93bfbf(0xba,0xb9)+_0xe882de(-0x147,-0x12d)+_0x93bfbf(0xd1,0xf1)+_0x93bfbf(0xce,0x99)),console[_0x93bfbf(0xdb,0xf8)](_0x1ad5a6[_0xe882de(-0x175,-0x156)]);for(const _0xc9f4f8 of _0x571359[_0x93bfbf(0xe8,0xf5)]){console['error']('\x20\x20'+_0xc9f4f8[_0x93bfbf(0xe1,0xe1)][_0xe882de(-0x11c,-0x149)]('.')+':\x20'+_0xc9f4f8[_0xe882de(-0x167,-0x14f)]);}}else console[_0x93bfbf(0xdb,0xa1)](_0x1ad5a6['vqgeq'],_0x571359 instanceof Error?_0x571359['message']:_0x1ad5a6['jUzAT'](String,_0x571359));return console[_0x93bfbf(0xdb,0xc1)]('[a2a]\x20Usin'+_0x93bfbf(0x109,0xfe)+_0xe882de(-0x177,-0x13e)+'ion.\x20Fix\x20t'+_0x93bfbf(0xb7,0xdb)+_0x93bfbf(0xfa,0xe8)+_0x93bfbf(0xbd,0xea)+_0xe882de(-0x136,-0x125)+_0xe882de(-0x195,-0x182)),this['config']=_0x1ad5a6['MfcUm'](structuredClone,DEFAULT_CONFIG),this[_0x93bfbf(0xca,0xad)];}}[_0x332de5(0x340,0x345)](_0x2c5426){const _0x331c68={'MSTyH':function(_0x30d44d,_0x666b03){return _0x30d44d(_0x666b03);},'pABmX':function(_0xd34a4,_0x5870e4){return _0xd34a4===_0x5870e4;},'dybcS':_0x39b16a(0x145,0x174),'vRgtV':function(_0x3c8ab8,_0x39d0af,_0x2a848f){return _0x3c8ab8(_0x39d0af,_0x2a848f);},'CAksR':function(_0x212cf9,_0x5d9c9c,_0x46fa55,_0x27a52e){return _0x212cf9(_0x5d9c9c,_0x46fa55,_0x27a52e);},'FqXiR':function(_0x167481,_0x354f2e){return _0x167481(_0x354f2e);}};function _0x39b16a(_0x3c7241,_0x375122){return _0x26c6d3(_0x3c7241,_0x375122- -0x306);}this[_0x39b16a(0x138,0x16e)+_0x42eabf(-0xa5,-0x6c)]&&(console[_0x39b16a(0x175,0x161)](_0x39b16a(0x171,0x1a0)+_0x39b16a(0x152,0x167)+_0x42eabf(-0x2d,-0x3a)+_0x42eabf(-0x44,-0x68)+'n\x20failed.\x20'+_0x42eabf(-0x28,-0x39)+'\x20overwrite'+_0x39b16a(0x177,0x1ae)+'inal\x20setti'+_0x42eabf(-0x17,-0x6)),console[_0x42eabf(-0x61,-0x59)]('[a2a]\x20Orig'+_0x39b16a(0x16d,0x17c)+_0x39b16a(0x1a7,0x1bb)+_0x39b16a(0x15f,0x19a)+'g.json.bak'));const _0x275a89=_0x331c68['MSTyH'](dirname,this[_0x39b16a(0x198,0x19f)]);if(!existsSync(_0x275a89)){if(_0x331c68[_0x39b16a(0x1d6,0x1bf)]('BXpnC',_0x331c68[_0x39b16a(0x17d,0x1a6)]))return this[_0x42eabf(-0x45,-0x56)]=JkNBIF[_0x39b16a(0x185,0x18c)](_0x7e2a29,_0xaa169d),this[_0x39b16a(0x1ad,0x1c1)]=0x0,this[_0x39b16a(0x1ba,0x1a2)](this['config']),this[_0x42eabf(-0x3c,-0x56)];else _0x331c68[_0x39b16a(0x116,0x14d)](mkdirSync,_0x275a89,{'recursive':!![]});}if(existsSync(this[_0x42eabf(-0x2a,-0x1b)]))try{copyFileSync(this[_0x42eabf(-0x2d,-0x1b)],this[_0x42eabf(-0x2d,-0x1b)]+_0x39b16a(0x17d,0x18f));}catch{}_0x331c68[_0x39b16a(0x13d,0x16c)](writeFileSync,this['configPath'],JSON[_0x39b16a(0x166,0x166)](_0x2c5426,null,0x2),_0x42eabf(0xa,0x2)),this[_0x42eabf(-0x32,-0x56)]=_0x2c5426,this[_0x42eabf(-0x53,-0x4c)+_0x39b16a(0x13e,0x14e)]=![];function _0x42eabf(_0x465083,_0x5ac1f6){return _0x26c6d3(_0x465083,_0x5ac1f6- -0x4c0);}try{this[_0x39b16a(0x1ca,0x1c1)]=_0x331c68[_0x39b16a(0x14e,0x172)](statSync,this[_0x39b16a(0x1c1,0x19f)])[_0x42eabf(-0x58,-0x67)];}catch{}}[_0x332de5(0x2ef,0x312)](_0x5c3e81){const _0x2e0245=this[_0x3bd5aa(0x4ae,0x4c8)]();function _0x3bd5aa(_0x5eb5f4,_0x13b574){return _0x26c6d3(_0x13b574,_0x5eb5f4-0x35);}return _0x2e0245[_0x5c3e81];}[_0x332de5(0x36e,0x336)](_0x31a091,_0x4f1767){const _0x3c7c2d=this[_0x18e7be(0x2fc,0x2cd)]();_0x3c7c2d[_0x31a091]=_0x4f1767;function _0xde75d3(_0x211e13,_0xbcdd2c){return _0x332de5(_0xbcdd2c,_0x211e13- -0x26c);}function _0x18e7be(_0x4f363d,_0x8cc252){return _0x332de5(_0x8cc252,_0x4f363d- -0x1a);}this[_0xde75d3(0xd9,0xf2)](_0x3c7c2d);}['setApiKey'](_0x15b19a){const _0x5a58a3={'OsxPU':'[a2a]\x20Conf'+_0x183feb(0x74,0x9e)+_0x4cc9a7(0x1ac,0x183)+_0x183feb(0x6,-0x33)+'aved\x20to\x20co'+_0x183feb(0x1d,0x32)+_0x183feb(0x1a,-0x15),'tEFze':_0x4cc9a7(0x1a7,0x185)+_0x183feb(0x39,0x5a),'IHwqQ':function(_0x4beddc,_0x4fcf8d){return _0x4beddc!==_0x4fcf8d;},'DhLch':'qpQYB','tWRrm':_0x4cc9a7(0x1a2,0x16a)},_0x2c00ed=getKeychainStore();if(_0x2c00ed[_0x183feb(0x6c,0x53)+'e']()&&_0x2c00ed[_0x183feb(0x45,0x52)](_0x5a58a3[_0x4cc9a7(0x1ce,0x1bd)],_0x15b19a)){const _0x37ea6a=this[_0x4cc9a7(0x194,0x179)]();delete _0x37ea6a[_0x183feb(0x63,0x29)][_0x183feb(0x53,0x49)],this[_0x183feb(0x54,0x39)](_0x37ea6a);if(this['config']){if(_0x5a58a3['IHwqQ'](_0x5a58a3[_0x4cc9a7(0x141,0x164)],_0x4cc9a7(0x19e,0x1c9))){_0x2a4c86[_0x4cc9a7(0x143,0x17b)](JtlsHC[_0x4cc9a7(0x19a,0x177)]),_0x43b2ab[_0x4cc9a7(0x172,0x17b)](_0x4cc9a7(0x18f,0x1af)+_0x4cc9a7(0x1cd,0x1a4)+':');for(const _0x58198e of _0x570293['issues']){_0x539850[_0x4cc9a7(0x173,0x17b)]('\x20\x20'+_0x58198e['path'][_0x4cc9a7(0x15c,0x197)]('.')+':\x20'+_0x58198e[_0x183feb(0x3d,0x5c)]);}}else this['config'][_0x4cc9a7(0x1d8,0x1b7)][_0x183feb(0x53,0x6a)]=_0x15b19a;}return _0x183feb(0x7,-0x5);}const _0x3ff73f=this[_0x4cc9a7(0x14a,0x179)]();function _0x4cc9a7(_0x3a3aad,_0x486d83){return _0x26c6d3(_0x3a3aad,_0x486d83- -0x300);}_0x3ff73f[_0x4cc9a7(0x199,0x1b7)][_0x183feb(0x53,0x48)]=_0x15b19a;function _0x183feb(_0x1797ce,_0x364aa4){return _0x26c6d3(_0x364aa4,_0x1797ce- -0x454);}return this[_0x4cc9a7(0x1e4,0x1a8)](_0x3ff73f),_0x5a58a3['tWRrm'];}[_0x332de5(0x365,0x340)+'ey'](){function _0x54184f(_0x48ff12,_0xa08726){return _0x26c6d3(_0xa08726,_0x48ff12- -0x3a6);}const _0x36adc2={'GSPYD':function(_0x457375){return _0x457375();}},_0x3a895a=_0x36adc2[_0x54184f(0xc0,0x94)](getKeychainStore);_0x3a895a[_0x54184f(0xd6,0xe4)](_0x1a2fc2(0x2c3,0x2f2)+'Key');const _0x4394e0=this[_0x54184f(0xd3,0xd0)]();function _0x1a2fc2(_0x20ecc0,_0x2986a8){return _0x26c6d3(_0x20ecc0,_0x2986a8- -0x193);}delete _0x4394e0['server'][_0x1a2fc2(0x33a,0x314)],this['save'](_0x4394e0);}[_0x26c6d3(0x4e0,0x4aa)](){this['config']=structuredClone(DEFAULT_CONFIG);function _0x89d93c(_0x2bb018,_0x2af60e){return _0x332de5(_0x2af60e,_0x2bb018- -0x162);}this['_validatio'+_0x294cbc(-0x199,-0x181)]=![];function _0x294cbc(_0x4fca48,_0x4f6d87){return _0x332de5(_0x4fca48,_0x4f6d87- -0x472);}this['save'](this[_0x89d93c(0x1a5,0x1db)]);}[_0x26c6d3(0x4d6,0x4c3)+'ir'](){function _0x4d5735(_0x221f0d,_0x40e679){return _0x332de5(_0x221f0d,_0x40e679-0x125);}const _0x2b3b8f={'afKkI':function(_0x1b210e,_0x127e45){return _0x1b210e(_0x127e45);},'ENPNO':function(_0x27e4e4,_0x48d984,_0x4d14de){return _0x27e4e4(_0x48d984,_0x4d14de);}},_0x3b3438=dirname(this[_0x4d5735(0x471,0x467)]);function _0x24696a(_0x1dbf09,_0xc8fbd0){return _0x332de5(_0xc8fbd0,_0x1dbf09- -0x564);}return!_0x2b3b8f[_0x24696a(-0x20f,-0x23d)](existsSync,_0x3b3438)&&_0x2b3b8f[_0x4d5735(0x46e,0x47e)](mkdirSync,_0x3b3438,{'recursive':!![]}),_0x3b3438;}}let _instance=null,_instancePath;export function getConfigManager(_0x261459){const _0x39ac72=_0x261459??process.env.A2A_CONFIG_PATH??DEFAULT_CONFIG_PATH;if(_instance&&_instancePath===_0x39ac72)return _instance;return _instance=new ConfigManager(_0x39ac72),_instancePath=_0x39ac72,_instance;}export function resetConfigManager(){_instance=null,_instancePath=undefined;}
|
package/dist/db/database.d.ts
CHANGED
|
@@ -35,6 +35,11 @@ export declare class MemoryDatabase {
|
|
|
35
35
|
* 검색 결과 반환, 세션 주입 등 실제 "사용자 노출" 시점에만 호출하세요.
|
|
36
36
|
*/
|
|
37
37
|
recordAccess(id: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* 원격에서 가져온 access_count와 병합합니다 (MAX 전략).
|
|
40
|
+
* pull 시 서버의 enrichment 값을 로컬에 반영합니다.
|
|
41
|
+
*/
|
|
42
|
+
mergeAccessCount(id: string, remoteAccessCount: number): void;
|
|
38
43
|
updateMemory(id: string, updates: Partial<MemoryCreateInput>): Memory | null;
|
|
39
44
|
deleteMemory(id: string): boolean;
|
|
40
45
|
countMemories(options?: {
|
|
@@ -49,6 +54,7 @@ export declare class MemoryDatabase {
|
|
|
49
54
|
tier?: MemoryTier;
|
|
50
55
|
projectPath?: string;
|
|
51
56
|
excludeParents?: boolean;
|
|
57
|
+
includeInvalid?: boolean;
|
|
52
58
|
}): Memory[];
|
|
53
59
|
searchByFTS(query: string, limit?: number, options?: {
|
|
54
60
|
projectPath?: string;
|
|
@@ -201,6 +207,25 @@ export declare class MemoryDatabase {
|
|
|
201
207
|
}>;
|
|
202
208
|
markEmotionMessagesSynced(ids: string[]): void;
|
|
203
209
|
cleanupSyncedEmotionMessages(): number;
|
|
210
|
+
saveSessionMetrics(metrics: {
|
|
211
|
+
sessionId: string;
|
|
212
|
+
extractionRate: number;
|
|
213
|
+
dedupRatio: number;
|
|
214
|
+
avgQuality: number;
|
|
215
|
+
injectionEffectiveness: number;
|
|
216
|
+
hotTierCount: number;
|
|
217
|
+
totalMemories: number;
|
|
218
|
+
}): void;
|
|
219
|
+
getRecentSessionMetrics(limit?: number): Array<{
|
|
220
|
+
sessionId: string;
|
|
221
|
+
extractionRate: number;
|
|
222
|
+
dedupRatio: number;
|
|
223
|
+
avgQuality: number;
|
|
224
|
+
injectionEffectiveness: number;
|
|
225
|
+
hotTierCount: number;
|
|
226
|
+
totalMemories: number;
|
|
227
|
+
createdAt: string;
|
|
228
|
+
}>;
|
|
204
229
|
/**
|
|
205
230
|
* Record an injection event (SessionStart or UserPromptSubmit).
|
|
206
231
|
* Returns the new injection log id.
|
|
@@ -223,8 +248,19 @@ export declare class MemoryDatabase {
|
|
|
223
248
|
getLatestInjection(sessionId: string): {
|
|
224
249
|
id: string;
|
|
225
250
|
injectedKeywords: string;
|
|
251
|
+
injectedMemoryIds: string[];
|
|
226
252
|
totalInjected: number;
|
|
227
253
|
} | null;
|
|
254
|
+
/**
|
|
255
|
+
* Get all injection logs for a session (for full effectiveness calculation).
|
|
256
|
+
*/
|
|
257
|
+
getAllInjections(sessionId: string): Array<{
|
|
258
|
+
id: string;
|
|
259
|
+
injectedKeywords: string;
|
|
260
|
+
injectedMemoryIds: string[];
|
|
261
|
+
totalInjected: number;
|
|
262
|
+
hitCount: number;
|
|
263
|
+
}>;
|
|
228
264
|
/**
|
|
229
265
|
* Update effectiveness score at session end.
|
|
230
266
|
*/
|