@luckydraw/cumulus 0.5.1
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/README.md +148 -0
- package/dist/cli/cumulus.d.ts +3 -0
- package/dist/cli/cumulus.d.ts.map +1 -0
- package/dist/cli/cumulus.js +233 -0
- package/dist/cli/cumulus.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +86 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +241 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/content-detector.d.ts +46 -0
- package/dist/lib/content-detector.d.ts.map +1 -0
- package/dist/lib/content-detector.js +359 -0
- package/dist/lib/content-detector.js.map +1 -0
- package/dist/lib/content-store.d.ts +255 -0
- package/dist/lib/content-store.d.ts.map +1 -0
- package/dist/lib/content-store.js +955 -0
- package/dist/lib/content-store.js.map +1 -0
- package/dist/lib/context-budget.d.ts +83 -0
- package/dist/lib/context-budget.d.ts.map +1 -0
- package/dist/lib/context-budget.js +101 -0
- package/dist/lib/context-budget.js.map +1 -0
- package/dist/lib/embeddings.d.ts +64 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +176 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/history.d.ts +120 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +205 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/image-utils.d.ts +41 -0
- package/dist/lib/image-utils.d.ts.map +1 -0
- package/dist/lib/image-utils.js +288 -0
- package/dist/lib/image-utils.js.map +1 -0
- package/dist/lib/migrate.d.ts +35 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +196 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/retriever.d.ts +56 -0
- package/dist/lib/retriever.d.ts.map +1 -0
- package/dist/lib/retriever.js +644 -0
- package/dist/lib/retriever.js.map +1 -0
- package/dist/lib/revert.d.ts +23 -0
- package/dist/lib/revert.d.ts.map +1 -0
- package/dist/lib/revert.js +75 -0
- package/dist/lib/revert.js.map +1 -0
- package/dist/lib/session.d.ts +65 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +289 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/snapshots.d.ts +39 -0
- package/dist/lib/snapshots.d.ts.map +1 -0
- package/dist/lib/snapshots.js +99 -0
- package/dist/lib/snapshots.js.map +1 -0
- package/dist/lib/stream-processor.d.ts +149 -0
- package/dist/lib/stream-processor.d.ts.map +1 -0
- package/dist/lib/stream-processor.js +389 -0
- package/dist/lib/stream-processor.js.map +1 -0
- package/dist/lib/summarizer.d.ts +67 -0
- package/dist/lib/summarizer.d.ts.map +1 -0
- package/dist/lib/summarizer.js +213 -0
- package/dist/lib/summarizer.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +16 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/proxy.d.ts +19 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +120 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +29 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/shared-server.d.ts +21 -0
- package/dist/mcp/shared-server.d.ts.map +1 -0
- package/dist/mcp/shared-server.js +210 -0
- package/dist/mcp/shared-server.js.map +1 -0
- package/dist/mcp/tool-handler.d.ts +20 -0
- package/dist/mcp/tool-handler.d.ts.map +1 -0
- package/dist/mcp/tool-handler.js +1405 -0
- package/dist/mcp/tool-handler.js.map +1 -0
- package/dist/tui/components/App.d.ts +11 -0
- package/dist/tui/components/App.d.ts.map +1 -0
- package/dist/tui/components/App.js +607 -0
- package/dist/tui/components/App.js.map +1 -0
- package/dist/tui/components/DebugContextView.d.ts +13 -0
- package/dist/tui/components/DebugContextView.d.ts.map +1 -0
- package/dist/tui/components/DebugContextView.js +78 -0
- package/dist/tui/components/DebugContextView.js.map +1 -0
- package/dist/tui/components/IncludeMenu.d.ts +12 -0
- package/dist/tui/components/IncludeMenu.d.ts.map +1 -0
- package/dist/tui/components/IncludeMenu.js +127 -0
- package/dist/tui/components/IncludeMenu.js.map +1 -0
- package/dist/tui/components/InputArea.d.ts +27 -0
- package/dist/tui/components/InputArea.d.ts.map +1 -0
- package/dist/tui/components/InputArea.js +366 -0
- package/dist/tui/components/InputArea.js.map +1 -0
- package/dist/tui/components/MarkdownText.d.ts +38 -0
- package/dist/tui/components/MarkdownText.d.ts.map +1 -0
- package/dist/tui/components/MarkdownText.js +234 -0
- package/dist/tui/components/MarkdownText.js.map +1 -0
- package/dist/tui/components/MessageBubble.d.ts +11 -0
- package/dist/tui/components/MessageBubble.d.ts.map +1 -0
- package/dist/tui/components/MessageBubble.js +16 -0
- package/dist/tui/components/MessageBubble.js.map +1 -0
- package/dist/tui/components/MessageHistory.d.ts +11 -0
- package/dist/tui/components/MessageHistory.d.ts.map +1 -0
- package/dist/tui/components/MessageHistory.js +12 -0
- package/dist/tui/components/MessageHistory.js.map +1 -0
- package/dist/tui/components/RevertMenu.d.ts +17 -0
- package/dist/tui/components/RevertMenu.d.ts.map +1 -0
- package/dist/tui/components/RevertMenu.js +144 -0
- package/dist/tui/components/RevertMenu.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +14 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +13 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/StreamingResponse.d.ts +15 -0
- package/dist/tui/components/StreamingResponse.d.ts.map +1 -0
- package/dist/tui/components/StreamingResponse.js +52 -0
- package/dist/tui/components/StreamingResponse.js.map +1 -0
- package/dist/tui/hooks/useAppState.d.ts +147 -0
- package/dist/tui/hooks/useAppState.d.ts.map +1 -0
- package/dist/tui/hooks/useAppState.js +110 -0
- package/dist/tui/hooks/useAppState.js.map +1 -0
- package/dist/tui/hooks/useClaudeProcess.d.ts +19 -0
- package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -0
- package/dist/tui/hooks/useClaudeProcess.js +185 -0
- package/dist/tui/hooks/useClaudeProcess.js.map +1 -0
- package/dist/tui/index.d.ts +10 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +11 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/utils/streamParser.d.ts +31 -0
- package/dist/tui/utils/streamParser.d.ts.map +1 -0
- package/dist/tui/utils/streamParser.js +63 -0
- package/dist/tui/utils/streamParser.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration utilities for upgrading old threads to support new features.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs/promises';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { embeddingsAvailable, generateMissingEmbeddings } from './embeddings.js';
|
|
7
|
+
import { HistoryStore } from './history.js';
|
|
8
|
+
import { SessionManager } from './session.js';
|
|
9
|
+
/**
|
|
10
|
+
* Migrate a thread to support RAG features.
|
|
11
|
+
* - Generates embeddings for all messages
|
|
12
|
+
* - Creates a legacy session document from old conversations
|
|
13
|
+
*/
|
|
14
|
+
export async function migrateThread(threadPath, onProgress) {
|
|
15
|
+
const threadName = path.basename(threadPath, '.jsonl');
|
|
16
|
+
const sessionsPath = threadPath.replace(/\.jsonl$/, '.sessions');
|
|
17
|
+
const result = {
|
|
18
|
+
threadName,
|
|
19
|
+
messagesTotal: 0,
|
|
20
|
+
embeddingsGenerated: 0,
|
|
21
|
+
sessionCreated: false,
|
|
22
|
+
sessionExchanges: 0,
|
|
23
|
+
errors: [],
|
|
24
|
+
};
|
|
25
|
+
// Phase 1: Load messages
|
|
26
|
+
onProgress?.({
|
|
27
|
+
phase: 'loading',
|
|
28
|
+
current: 0,
|
|
29
|
+
total: 1,
|
|
30
|
+
message: 'Loading messages...',
|
|
31
|
+
});
|
|
32
|
+
const historyStore = new HistoryStore(threadPath);
|
|
33
|
+
let messages;
|
|
34
|
+
try {
|
|
35
|
+
messages = await historyStore.getAll();
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
result.errors.push(`Failed to load messages: ${err}`);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
// Filter out session documents (we only want user/assistant messages)
|
|
42
|
+
const conversationMessages = messages.filter(m => m.role !== 'session');
|
|
43
|
+
result.messagesTotal = conversationMessages.length;
|
|
44
|
+
if (conversationMessages.length === 0) {
|
|
45
|
+
onProgress?.({
|
|
46
|
+
phase: 'done',
|
|
47
|
+
current: 1,
|
|
48
|
+
total: 1,
|
|
49
|
+
message: 'No messages to migrate',
|
|
50
|
+
});
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
// Phase 2: Generate embeddings
|
|
54
|
+
onProgress?.({
|
|
55
|
+
phase: 'embeddings',
|
|
56
|
+
current: 0,
|
|
57
|
+
total: conversationMessages.length,
|
|
58
|
+
message: 'Checking embedding availability...',
|
|
59
|
+
});
|
|
60
|
+
if (await embeddingsAvailable()) {
|
|
61
|
+
onProgress?.({
|
|
62
|
+
phase: 'embeddings',
|
|
63
|
+
current: 0,
|
|
64
|
+
total: conversationMessages.length,
|
|
65
|
+
message: 'Generating embeddings (this may take a while)...',
|
|
66
|
+
});
|
|
67
|
+
try {
|
|
68
|
+
// Count existing embeddings before
|
|
69
|
+
const { loadEmbeddings } = await import('./embeddings.js');
|
|
70
|
+
const existingBefore = await loadEmbeddings(threadPath);
|
|
71
|
+
const countBefore = existingBefore.size;
|
|
72
|
+
// Generate missing embeddings
|
|
73
|
+
await generateMissingEmbeddings(threadPath, conversationMessages.map(m => ({ id: m.id, content: m.content })));
|
|
74
|
+
// Count after
|
|
75
|
+
const existingAfter = await loadEmbeddings(threadPath);
|
|
76
|
+
result.embeddingsGenerated = existingAfter.size - countBefore;
|
|
77
|
+
onProgress?.({
|
|
78
|
+
phase: 'embeddings',
|
|
79
|
+
current: conversationMessages.length,
|
|
80
|
+
total: conversationMessages.length,
|
|
81
|
+
message: `Generated ${result.embeddingsGenerated} embeddings`,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
result.errors.push(`Embedding generation error: ${err}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
onProgress?.({
|
|
90
|
+
phase: 'embeddings',
|
|
91
|
+
current: conversationMessages.length,
|
|
92
|
+
total: conversationMessages.length,
|
|
93
|
+
message: 'Embeddings not available (transformers.js not installed)',
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Phase 3: Create legacy session document
|
|
97
|
+
onProgress?.({
|
|
98
|
+
phase: 'sessions',
|
|
99
|
+
current: 0,
|
|
100
|
+
total: 1,
|
|
101
|
+
message: 'Creating legacy session document...',
|
|
102
|
+
});
|
|
103
|
+
try {
|
|
104
|
+
// Check if any session documents already exist
|
|
105
|
+
let hasExistingSessions = false;
|
|
106
|
+
try {
|
|
107
|
+
const sessionFiles = await fs.readdir(sessionsPath);
|
|
108
|
+
hasExistingSessions = sessionFiles.some(f => f.endsWith('.md'));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Directory doesn't exist, no existing sessions
|
|
112
|
+
}
|
|
113
|
+
if (hasExistingSessions) {
|
|
114
|
+
onProgress?.({
|
|
115
|
+
phase: 'sessions',
|
|
116
|
+
current: 1,
|
|
117
|
+
total: 1,
|
|
118
|
+
message: 'Session documents already exist, skipping',
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Create a legacy session with all old exchanges
|
|
123
|
+
const legacySession = new SessionManager(sessionsPath, threadName, 'ses_legacy');
|
|
124
|
+
await legacySession.initialize();
|
|
125
|
+
// Group messages into user/assistant exchanges
|
|
126
|
+
let exchangeCount = 0;
|
|
127
|
+
for (let i = 0; i < conversationMessages.length - 1; i++) {
|
|
128
|
+
const msg = conversationMessages[i];
|
|
129
|
+
const nextMsg = conversationMessages[i + 1];
|
|
130
|
+
if (msg.role === 'user' && nextMsg.role === 'assistant') {
|
|
131
|
+
await legacySession.appendExchange(msg.content, nextMsg.content);
|
|
132
|
+
exchangeCount++;
|
|
133
|
+
i++; // Skip the assistant message we just processed
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
result.sessionCreated = true;
|
|
137
|
+
result.sessionExchanges = exchangeCount;
|
|
138
|
+
// Generate embeddings for the session
|
|
139
|
+
if (await embeddingsAvailable()) {
|
|
140
|
+
await legacySession.generateMissingEmbeddings();
|
|
141
|
+
}
|
|
142
|
+
onProgress?.({
|
|
143
|
+
phase: 'sessions',
|
|
144
|
+
current: 1,
|
|
145
|
+
total: 1,
|
|
146
|
+
message: `Created legacy session with ${exchangeCount} exchanges`,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
result.errors.push(`Session creation error: ${err}`);
|
|
152
|
+
}
|
|
153
|
+
onProgress?.({
|
|
154
|
+
phase: 'done',
|
|
155
|
+
current: 1,
|
|
156
|
+
total: 1,
|
|
157
|
+
message: 'Migration complete',
|
|
158
|
+
});
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if a thread needs migration.
|
|
163
|
+
* Returns true if embeddings or sessions are missing.
|
|
164
|
+
*/
|
|
165
|
+
export async function needsMigration(threadPath) {
|
|
166
|
+
const sessionsPath = threadPath.replace(/\.jsonl$/, '.sessions');
|
|
167
|
+
const historyStore = new HistoryStore(threadPath);
|
|
168
|
+
const messages = await historyStore.getAll();
|
|
169
|
+
const conversationMessages = messages.filter(m => m.role !== 'session');
|
|
170
|
+
// Check embeddings
|
|
171
|
+
let embeddingCount = 0;
|
|
172
|
+
try {
|
|
173
|
+
const { loadEmbeddings } = await import('./embeddings.js');
|
|
174
|
+
const embeddings = await loadEmbeddings(threadPath);
|
|
175
|
+
embeddingCount = embeddings.size;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// No embeddings file
|
|
179
|
+
}
|
|
180
|
+
// Check sessions
|
|
181
|
+
let hasSessions = false;
|
|
182
|
+
try {
|
|
183
|
+
const sessionFiles = await fs.readdir(sessionsPath);
|
|
184
|
+
hasSessions = sessionFiles.some(f => f.endsWith('.md'));
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// No sessions directory
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
needsEmbeddings: embeddingCount < conversationMessages.length,
|
|
191
|
+
needsSessions: !hasSessions && conversationMessages.length > 0,
|
|
192
|
+
messageCount: conversationMessages.length,
|
|
193
|
+
embeddingCount,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic RAG retriever for injecting relevant context before Claude invocation.
|
|
3
|
+
* Runs hybrid search (keyword + semantic) on history and content stores.
|
|
4
|
+
*/
|
|
5
|
+
import { ContentStore } from './content-store.js';
|
|
6
|
+
import { HistoryStore } from './history.js';
|
|
7
|
+
/** Default budget fraction for retrieved context (25% of effective limit) */
|
|
8
|
+
export declare const RETRIEVAL_BUDGET_FRACTION = 0.25;
|
|
9
|
+
export interface RetrievalResult {
|
|
10
|
+
/** Formatted context string ready for injection into system prompt */
|
|
11
|
+
context: string;
|
|
12
|
+
/** Number of history messages included */
|
|
13
|
+
historyCount: number;
|
|
14
|
+
/** Number of content items included */
|
|
15
|
+
contentCount: number;
|
|
16
|
+
/** Total tokens used by retrieved context */
|
|
17
|
+
tokensUsed: number;
|
|
18
|
+
/** Debug info about what was retrieved */
|
|
19
|
+
debug: {
|
|
20
|
+
historyResults: Array<{
|
|
21
|
+
index: number;
|
|
22
|
+
role: string;
|
|
23
|
+
score: number;
|
|
24
|
+
snippet: string;
|
|
25
|
+
}>;
|
|
26
|
+
contentResults: Array<{
|
|
27
|
+
id: string;
|
|
28
|
+
score: number;
|
|
29
|
+
snippet: string;
|
|
30
|
+
}>;
|
|
31
|
+
sessionResults: Array<{
|
|
32
|
+
sessionId: string;
|
|
33
|
+
score: number;
|
|
34
|
+
snippet: string;
|
|
35
|
+
}>;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface RetrieverOptions {
|
|
39
|
+
/** Token budget for retrieved context */
|
|
40
|
+
budgetTokens: number;
|
|
41
|
+
/** Current session ID (to boost current session results) */
|
|
42
|
+
currentSessionId?: string;
|
|
43
|
+
/** Sessions path for session document search */
|
|
44
|
+
sessionsPath?: string;
|
|
45
|
+
/** Recent conversation messages for query expansion */
|
|
46
|
+
recentMessages?: Array<{
|
|
47
|
+
role: string;
|
|
48
|
+
content: string;
|
|
49
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Retrieve relevant context for a user query.
|
|
53
|
+
* Runs hybrid search on history, content, and session stores.
|
|
54
|
+
*/
|
|
55
|
+
export declare function retrieve(query: string, historyStore: HistoryStore, contentStore: ContentStore | null, options: RetrieverOptions): Promise<RetrievalResult>;
|
|
56
|
+
//# sourceMappingURL=retriever.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../src/lib/retriever.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AASvE,OAAO,EAAE,YAAY,EAAW,MAAM,cAAc,CAAC;AAGrD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAiB9C,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE;QACL,cAAc,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvF,cAAc,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACtE,cAAc,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9E,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAqpBD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+D1B"}
|