@kernel.chat/kbot 3.36.0 → 3.38.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.
@@ -0,0 +1,352 @@
1
+ // kbot Dream Mode — What kbot does when you're not watching
2
+ //
3
+ // Inspired by Claude Code's Auto-Dream, but goes further.
4
+ // While Auto-Dream cleans memory, kbot Dream Mode actively improves itself:
5
+ // 1. Memory consolidation (short-term → long-term patterns)
6
+ // 2. Meta-agent cycle (analyze performance, propose improvements)
7
+ // 3. Forge speculation (pre-build tools for tomorrow's tasks)
8
+ // 4. Collective sync (contribute + absorb from community)
9
+ // 5. Codebase guardian sweep (complexity analysis)
10
+ // 6. Self-benchmarking (compare against yesterday)
11
+ // 7. Content generation (draft about what was learned)
12
+ //
13
+ // "kbot doesn't sleep. It dreams."
14
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'node:fs';
15
+ import { homedir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ const KBOT_DIR = join(homedir(), '.kbot');
18
+ const DREAM_DIR = join(KBOT_DIR, 'dreams');
19
+ const DREAM_LOG = join(DREAM_DIR, 'dream-log.jsonl');
20
+ // ── Helpers ─────────────────────────────────────────────────────────────────
21
+ function ensureDreamDir() {
22
+ if (!existsSync(DREAM_DIR))
23
+ mkdirSync(DREAM_DIR, { recursive: true });
24
+ }
25
+ function loadJson(path, fallback) {
26
+ try {
27
+ if (existsSync(path))
28
+ return JSON.parse(readFileSync(path, 'utf-8'));
29
+ }
30
+ catch { /* ignore */ }
31
+ return fallback;
32
+ }
33
+ function saveJson(path, data) {
34
+ writeFileSync(path, JSON.stringify(data, null, 2));
35
+ }
36
+ function logDream(entry) {
37
+ ensureDreamDir();
38
+ const line = JSON.stringify({ ts: new Date().toISOString(), msg: entry }) + '\n';
39
+ try {
40
+ writeFileSync(DREAM_LOG, line, { flag: 'a' });
41
+ }
42
+ catch { /* ignore */ }
43
+ }
44
+ // ── Phase 1: Memory Consolidation ───────────────────────────────────────────
45
+ async function consolidateMemory() {
46
+ const start = Date.now();
47
+ const findings = [];
48
+ const actions = [];
49
+ const patternsPath = join(KBOT_DIR, 'memory', 'patterns.json');
50
+ const patterns = loadJson(patternsPath, []);
51
+ // Find duplicate/near-duplicate patterns and merge them
52
+ const seen = new Map();
53
+ let mergedCount = 0;
54
+ for (const p of patterns) {
55
+ const key = `${p.type || ''}:${p.language || ''}:${p.agent || ''}`;
56
+ const existing = seen.get(key);
57
+ if (existing !== undefined) {
58
+ // Merge: keep higher confidence
59
+ const existingPattern = patterns[existing];
60
+ const existingConf = Number(existingPattern.confidence || existingPattern.successRate || 0);
61
+ const newConf = Number(p.confidence || p.successRate || 0);
62
+ if (newConf > existingConf) {
63
+ patterns[existing] = p;
64
+ }
65
+ mergedCount++;
66
+ }
67
+ else {
68
+ seen.set(key, patterns.indexOf(p));
69
+ }
70
+ }
71
+ if (mergedCount > 0) {
72
+ findings.push(`Found ${mergedCount} duplicate patterns`);
73
+ // Deduplicate
74
+ const unique = Array.from(seen.values()).map(i => patterns[i]);
75
+ saveJson(patternsPath, unique);
76
+ actions.push(`Consolidated ${patterns.length} → ${unique.length} patterns`);
77
+ }
78
+ // Promote high-confidence patterns to long-term knowledge
79
+ const knowledgePath = join(KBOT_DIR, 'memory', 'knowledge.json');
80
+ const knowledge = loadJson(knowledgePath, []);
81
+ const highConf = patterns.filter(p => Number(p.confidence || p.successRate || 0) > 0.9);
82
+ let promoted = 0;
83
+ for (const p of highConf) {
84
+ const alreadyKnown = knowledge.some(k => k.type === p.type && k.language === p.language && k.agent === p.agent);
85
+ if (!alreadyKnown) {
86
+ knowledge.push({ ...p, promoted_at: new Date().toISOString(), source: 'dream-consolidation' });
87
+ promoted++;
88
+ }
89
+ }
90
+ if (promoted > 0) {
91
+ saveJson(knowledgePath, knowledge);
92
+ findings.push(`${promoted} high-confidence patterns promoted to knowledge`);
93
+ actions.push(`Knowledge base grew: ${knowledge.length - promoted} → ${knowledge.length}`);
94
+ }
95
+ return {
96
+ phase: 'memory-consolidation',
97
+ duration_ms: Date.now() - start,
98
+ findings,
99
+ actions_taken: actions,
100
+ improvements: mergedCount + promoted,
101
+ };
102
+ }
103
+ // ── Phase 2: Meta-Agent Cycle ───────────────────────────────────────────────
104
+ async function runMetaCycle() {
105
+ const start = Date.now();
106
+ const findings = [];
107
+ const actions = [];
108
+ try {
109
+ // Dynamic import to avoid circular deps
110
+ const { analyzePerformance, proposeImprovements, applyImprovement } = await import('./meta-agent.js');
111
+ const profiles = analyzePerformance();
112
+ if (profiles.length > 0) {
113
+ findings.push(`${profiles.length} agents analyzed`);
114
+ const weak = profiles.filter(p => p.improvement_potential !== 'low');
115
+ if (weak.length > 0) {
116
+ findings.push(`${weak.length} agents need improvement: ${weak.map(p => p.agent).join(', ')}`);
117
+ }
118
+ const improvements = proposeImprovements(profiles);
119
+ let applied = 0;
120
+ for (const imp of improvements) {
121
+ if (imp.target === 'routing' || imp.target === 'tool_selection') {
122
+ applyImprovement(imp);
123
+ applied++;
124
+ }
125
+ }
126
+ if (applied > 0) {
127
+ actions.push(`Auto-applied ${applied} low-risk improvements`);
128
+ }
129
+ if (improvements.length > applied) {
130
+ findings.push(`${improvements.length - applied} improvements proposed (need review)`);
131
+ }
132
+ return {
133
+ phase: 'meta-agent',
134
+ duration_ms: Date.now() - start,
135
+ findings,
136
+ actions_taken: actions,
137
+ improvements: applied,
138
+ };
139
+ }
140
+ }
141
+ catch {
142
+ findings.push('Meta-agent not available (no observations yet)');
143
+ }
144
+ return {
145
+ phase: 'meta-agent',
146
+ duration_ms: Date.now() - start,
147
+ findings,
148
+ actions_taken: actions,
149
+ improvements: 0,
150
+ };
151
+ }
152
+ // ── Phase 3: Forge Speculation ──────────────────────────────────────────────
153
+ async function speculateForge() {
154
+ const start = Date.now();
155
+ const findings = [];
156
+ const actions = [];
157
+ // Analyze recent patterns to predict what tools might be needed
158
+ const patternsPath = join(KBOT_DIR, 'memory', 'patterns.json');
159
+ const patterns = loadJson(patternsPath, []);
160
+ // Find tool gaps: patterns where success rate is low but frequency is high
161
+ const toolGaps = patterns.filter(p => {
162
+ const rate = Number(p.successRate || p.confidence || 0);
163
+ const hits = Number(p.hits || p.frequency || 1);
164
+ return rate < 0.6 && hits >= 3;
165
+ });
166
+ if (toolGaps.length > 0) {
167
+ findings.push(`${toolGaps.length} potential tool gaps identified`);
168
+ for (const gap of toolGaps.slice(0, 3)) {
169
+ findings.push(`Gap: ${gap.type || 'unknown'} in ${gap.language || 'unknown'} (${Math.round(Number(gap.successRate || 0) * 100)}% success, ${gap.hits || 0} attempts)`);
170
+ }
171
+ }
172
+ // Check if forged tools are actually being used
173
+ const forgeDir = join(KBOT_DIR, 'forge');
174
+ if (existsSync(forgeDir)) {
175
+ const forgedTools = readdirSync(forgeDir).filter(f => f.endsWith('.json'));
176
+ const unused = forgedTools.filter(f => {
177
+ const tool = loadJson(join(forgeDir, f), {});
178
+ return Number(tool.uses || 0) === 0;
179
+ });
180
+ if (unused.length > 0) {
181
+ findings.push(`${unused.length} forged tools never used: ${unused.slice(0, 3).join(', ')}`);
182
+ }
183
+ }
184
+ return {
185
+ phase: 'forge-speculation',
186
+ duration_ms: Date.now() - start,
187
+ findings,
188
+ actions_taken: actions,
189
+ improvements: 0,
190
+ };
191
+ }
192
+ // ── Phase 4: Collective Sync ────────────────────────────────────────────────
193
+ async function collectiveSync() {
194
+ const start = Date.now();
195
+ const findings = [];
196
+ const actions = [];
197
+ try {
198
+ const { runCollectiveSync } = await import('./collective-learning.js');
199
+ await runCollectiveSync();
200
+ actions.push('Collective sync completed');
201
+ }
202
+ catch {
203
+ findings.push('Collective sync endpoint not available (offline mode)');
204
+ }
205
+ return {
206
+ phase: 'collective-sync',
207
+ duration_ms: Date.now() - start,
208
+ findings,
209
+ actions_taken: actions,
210
+ improvements: 0,
211
+ };
212
+ }
213
+ // ── Phase 5: Self-Benchmark ─────────────────────────────────────────────────
214
+ async function selfBenchmark() {
215
+ const start = Date.now();
216
+ const findings = [];
217
+ const benchDir = join(KBOT_DIR, 'benchmarks');
218
+ if (!existsSync(benchDir))
219
+ mkdirSync(benchDir, { recursive: true });
220
+ const historyPath = join(benchDir, 'history.json');
221
+ const history = loadJson(historyPath, []);
222
+ if (history.length >= 2) {
223
+ const recent = history.slice(-5);
224
+ const older = history.slice(-10, -5);
225
+ if (older.length > 0) {
226
+ const recentAvgTime = recent.reduce((s, h) => s + Number(h.timeMs || 0), 0) / recent.length;
227
+ const olderAvgTime = older.reduce((s, h) => s + Number(h.timeMs || 0), 0) / older.length;
228
+ if (recentAvgTime < olderAvgTime) {
229
+ const improvement = Math.round((1 - recentAvgTime / olderAvgTime) * 100);
230
+ findings.push(`Performance improved ${improvement}% over last 10 benchmarks`);
231
+ }
232
+ else {
233
+ const regression = Math.round((recentAvgTime / olderAvgTime - 1) * 100);
234
+ findings.push(`Performance regressed ${regression}% — meta-agent should investigate`);
235
+ }
236
+ }
237
+ }
238
+ else {
239
+ findings.push('Not enough benchmark data yet. Run: kbot compete "your task"');
240
+ }
241
+ return {
242
+ phase: 'self-benchmark',
243
+ duration_ms: Date.now() - start,
244
+ findings,
245
+ actions_taken: [],
246
+ improvements: 0,
247
+ };
248
+ }
249
+ // ── Phase 6: Dream Summary ──────────────────────────────────────────────────
250
+ async function generateDreamSummary(results) {
251
+ const start = Date.now();
252
+ const findings = [];
253
+ const totalFindings = results.reduce((s, r) => s + r.findings.length, 0);
254
+ const totalActions = results.reduce((s, r) => s + r.actions_taken.length, 0);
255
+ const totalImprovements = results.reduce((s, r) => s + r.improvements, 0);
256
+ findings.push(`Dream complete: ${results.length} phases, ${totalFindings} findings, ${totalActions} actions, ${totalImprovements} improvements`);
257
+ // Save dream journal entry
258
+ const journalPath = join(DREAM_DIR, `dream-${new Date().toISOString().split('T')[0]}.json`);
259
+ saveJson(journalPath, {
260
+ timestamp: new Date().toISOString(),
261
+ results,
262
+ summary: { totalFindings, totalActions, totalImprovements },
263
+ });
264
+ return {
265
+ phase: 'dream-summary',
266
+ duration_ms: Date.now() - start,
267
+ findings,
268
+ actions_taken: [`Dream journal saved: ${journalPath}`],
269
+ improvements: 0,
270
+ };
271
+ }
272
+ // ── Main: Run Dream Mode ────────────────────────────────────────────────────
273
+ export async function runDreamMode(verbose = true) {
274
+ ensureDreamDir();
275
+ const start = Date.now();
276
+ if (verbose) {
277
+ console.log('\n🌙 kbot Dream Mode');
278
+ console.log('═'.repeat(50));
279
+ console.log('kbot doesn\'t sleep. It dreams.\n');
280
+ }
281
+ const phases = [
282
+ { name: 'Memory Consolidation', description: 'Merge duplicates, promote high-confidence patterns', execute: consolidateMemory },
283
+ { name: 'Meta-Agent Cycle', description: 'Analyze agent performance, propose improvements', execute: runMetaCycle },
284
+ { name: 'Forge Speculation', description: 'Predict tomorrow\'s tool needs', execute: speculateForge },
285
+ { name: 'Collective Sync', description: 'Contribute and absorb community patterns', execute: collectiveSync },
286
+ { name: 'Self-Benchmark', description: 'Compare against yesterday\'s performance', execute: selfBenchmark },
287
+ ];
288
+ const results = [];
289
+ for (const phase of phases) {
290
+ if (verbose)
291
+ console.log(` 💭 ${phase.name}...`);
292
+ logDream(`Starting: ${phase.name}`);
293
+ try {
294
+ const result = await phase.execute();
295
+ results.push(result);
296
+ if (verbose) {
297
+ for (const f of result.findings)
298
+ console.log(` ${f}`);
299
+ for (const a of result.actions_taken)
300
+ console.log(` ✓ ${a}`);
301
+ if (result.findings.length === 0 && result.actions_taken.length === 0) {
302
+ console.log(' (nothing to report)');
303
+ }
304
+ }
305
+ logDream(`Completed: ${phase.name} (${result.duration_ms}ms, ${result.improvements} improvements)`);
306
+ }
307
+ catch (err) {
308
+ const msg = err instanceof Error ? err.message : String(err);
309
+ if (verbose)
310
+ console.log(` ✗ Error: ${msg}`);
311
+ logDream(`Error in ${phase.name}: ${msg}`);
312
+ results.push({
313
+ phase: phase.name.toLowerCase().replace(/\s+/g, '-'),
314
+ duration_ms: 0,
315
+ findings: [`Error: ${msg}`],
316
+ actions_taken: [],
317
+ improvements: 0,
318
+ });
319
+ }
320
+ }
321
+ // Generate summary
322
+ const summary = await generateDreamSummary(results);
323
+ results.push(summary);
324
+ const totalDuration = Date.now() - start;
325
+ const report = {
326
+ timestamp: new Date().toISOString(),
327
+ duration_ms: totalDuration,
328
+ phases_completed: results.length,
329
+ total_findings: results.reduce((s, r) => s + r.findings.length, 0),
330
+ total_actions: results.reduce((s, r) => s + r.actions_taken.length, 0),
331
+ total_improvements: results.reduce((s, r) => s + r.improvements, 0),
332
+ results,
333
+ };
334
+ if (verbose) {
335
+ console.log('\n' + '═'.repeat(50));
336
+ console.log(` 🌙 Dream complete in ${(totalDuration / 1000).toFixed(1)}s`);
337
+ console.log(` ${report.total_findings} findings · ${report.total_actions} actions · ${report.total_improvements} improvements`);
338
+ console.log(` Journal: ~/.kbot/dreams/dream-${new Date().toISOString().split('T')[0]}.json`);
339
+ console.log();
340
+ }
341
+ return report;
342
+ }
343
+ // ── Get dream history ───────────────────────────────────────────────────────
344
+ export function getDreamHistory() {
345
+ ensureDreamDir();
346
+ const files = readdirSync(DREAM_DIR).filter(f => f.startsWith('dream-') && f.endsWith('.json'));
347
+ return files.map(f => {
348
+ const data = loadJson(join(DREAM_DIR, f), {});
349
+ return { date: f.replace('dream-', '').replace('.json', ''), summary: data.summary || {} };
350
+ }).sort((a, b) => b.date.localeCompare(a.date));
351
+ }
352
+ //# sourceMappingURL=dream-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream-mode.js","sourceRoot":"","sources":["../src/dream-mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /** Claude Code hook event types */
2
+ export type HookEventType = 'FileChanged' | 'TaskCompleted' | 'SessionStart' | 'SessionEnd' | 'StopFailure';
3
+ /** Data payload for each hook event */
4
+ export interface FileChangedData {
5
+ file: string;
6
+ changeType?: 'create' | 'edit' | 'delete' | 'rename';
7
+ diff?: string;
8
+ }
9
+ export interface TaskCompletedData {
10
+ task: string;
11
+ agent: string;
12
+ success: boolean;
13
+ duration_ms: number;
14
+ tokens_in?: number;
15
+ tokens_out?: number;
16
+ cost?: number;
17
+ tools_used?: string[];
18
+ error?: string;
19
+ }
20
+ export interface SessionStartData {
21
+ cwd: string;
22
+ agent?: string;
23
+ resumeFrom?: string;
24
+ }
25
+ export interface SessionEndData {
26
+ cwd: string;
27
+ agent?: string;
28
+ turnCount?: number;
29
+ duration_ms?: number;
30
+ }
31
+ export interface StopFailureData {
32
+ reason: string;
33
+ command?: string;
34
+ exitCode?: number;
35
+ stderr?: string;
36
+ }
37
+ export type HookEventData = FileChangedData | TaskCompletedData | SessionStartData | SessionEndData | StopFailureData;
38
+ /** Result from handling a hook event */
39
+ export interface HookHandlerResult {
40
+ event: HookEventType;
41
+ handled: boolean;
42
+ subsystem: string;
43
+ output?: string;
44
+ error?: string;
45
+ duration_ms: number;
46
+ }
47
+ /** Claude Code settings.json hook configuration shape */
48
+ export interface ClaudeHookConfig {
49
+ event: string;
50
+ command: string;
51
+ timeout?: number;
52
+ matcher?: string;
53
+ }
54
+ export interface ClaudeHooksSection {
55
+ hooks: ClaudeHookConfig[];
56
+ }
57
+ /**
58
+ * Generate the hooks configuration JSON for Claude Code's settings.json.
59
+ *
60
+ * This produces the `hooks` array that should be merged into
61
+ * `.claude/settings.json` or `~/.claude/settings.json`.
62
+ *
63
+ * Each hook calls `kbot hook-dispatch <event>` with context passed via
64
+ * environment variables.
65
+ *
66
+ * @param options.kbotPath - Path to kbot binary (default: 'kbot')
67
+ * @param options.timeout - Default timeout in ms (default: 30000)
68
+ * @returns The hooks section for settings.json
69
+ */
70
+ export declare function generateHooksConfig(options?: {
71
+ kbotPath?: string;
72
+ timeout?: number;
73
+ }): ClaudeHooksSection;
74
+ /**
75
+ * Dispatch a Claude Code hook event to the appropriate kbot subsystem.
76
+ *
77
+ * @param event - The hook event type
78
+ * @param data - Event-specific payload
79
+ * @returns Result of handling the event
80
+ */
81
+ export declare function handleHookEvent(event: HookEventType, data: HookEventData): Promise<HookHandlerResult>;
82
+ /**
83
+ * Read existing Claude Code settings.json and merge kbot hooks into it.
84
+ * Returns the merged JSON object. Does not write to disk.
85
+ *
86
+ * @param settingsPath - Path to settings.json (default: .claude/settings.json)
87
+ */
88
+ export declare function mergeHooksIntoSettings(settingsPath?: string, kbotPath?: string): Record<string, unknown>;
89
+ //# sourceMappingURL=hooks-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-integration.d.ts","sourceRoot":"","sources":["../src/hooks-integration.ts"],"names":[],"mappings":"AAyBA,mCAAmC;AACnC,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,eAAe,GACf,cAAc,GACd,YAAY,GACZ,aAAa,CAAA;AAEjB,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAA;AAEnB,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAC1B;AAwCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,kBAAkB,CAkCrB;AAMD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA0C5B;AAqVD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}