@codedeck/codedeck 2026.3.38 → 2026.3.39
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/dist/agent/session-manager.js.map +1 -1
- package/dist/daemon/codex-watcher.d.ts +8 -35
- package/dist/daemon/codex-watcher.d.ts.map +1 -1
- package/dist/daemon/codex-watcher.js +161 -378
- package/dist/daemon/codex-watcher.js.map +1 -1
- package/dist/daemon/gemini-watcher.d.ts +15 -35
- package/dist/daemon/gemini-watcher.d.ts.map +1 -1
- package/dist/daemon/gemini-watcher.js +105 -305
- package/dist/daemon/gemini-watcher.js.map +1 -1
- package/dist/daemon/subsession-manager.d.ts +1 -12
- package/dist/daemon/subsession-manager.d.ts.map +1 -1
- package/dist/daemon/subsession-manager.js +53 -180
- package/dist/daemon/subsession-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,42 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Watches Gemini CLI conversation JSON files for structured events.
|
|
4
|
-
*
|
|
5
|
-
* Gemini writes per-session JSON files (overwritten, not appended) to:
|
|
6
|
-
* ~/.gemini/tmp/<project-slug>/chats/session-<YYYY-MM-DD>T<HH>-<MM>-<uuid[:8]>.json
|
|
7
|
-
*
|
|
8
|
-
* Message types:
|
|
9
|
-
* - "user" → content: [{ text }] → user.message
|
|
10
|
-
* - "gemini" → content: string → assistant.text
|
|
11
|
-
* thoughts: [{ description }] → assistant.thinking
|
|
12
|
-
* toolCalls: [{ name, args }] → tool.call + tool.result
|
|
13
|
-
*
|
|
14
|
-
* Because the file is overwritten on each update (not appended), we track
|
|
15
|
-
* the seen message count and only process newly appended messages.
|
|
16
4
|
*/
|
|
17
5
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
7
|
};
|
|
20
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.snapshotSessionFiles = snapshotSessionFiles;
|
|
22
9
|
exports.preClaimFile = preClaimFile;
|
|
10
|
+
exports.pollTick = pollTick;
|
|
23
11
|
exports.startWatching = startWatching;
|
|
24
12
|
exports.startWatchingLatest = startWatchingLatest;
|
|
25
|
-
exports.startWatchingNew = startWatchingNew;
|
|
26
13
|
exports.isWatching = isWatching;
|
|
14
|
+
exports.snapshotSessionFiles = snapshotSessionFiles;
|
|
27
15
|
exports.stopWatching = stopWatching;
|
|
28
16
|
const promises_1 = require("fs/promises");
|
|
29
17
|
const path_1 = require("path");
|
|
30
18
|
const os_1 = require("os");
|
|
31
19
|
const timeline_emitter_js_1 = require("./timeline-emitter.js");
|
|
32
20
|
const logger_js_1 = __importDefault(require("../util/logger.js"));
|
|
33
|
-
// ── Path helpers ───────────────────────────────────────────────────────────────
|
|
34
21
|
const GEMINI_TMP_DIR = (0, path_1.join)((0, os_1.homedir)(), '.gemini', 'tmp');
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
* Scans all project-slug subdirectories under ~/.gemini/tmp/.
|
|
39
|
-
*/
|
|
22
|
+
const POLL_INTERVAL_MS = 500; // Snappy updates
|
|
23
|
+
const RETRY_DELAY_MS = 100;
|
|
24
|
+
// ── Path helpers ───────────────────────────────────────────────────────────────
|
|
40
25
|
async function findSessionFile(sessionUuid) {
|
|
41
26
|
const prefix = sessionUuid.slice(0, 8);
|
|
42
27
|
let slugs;
|
|
@@ -56,18 +41,12 @@ async function findSessionFile(sessionUuid) {
|
|
|
56
41
|
continue;
|
|
57
42
|
}
|
|
58
43
|
for (const entry of entries) {
|
|
59
|
-
if (entry.startsWith('session-') && entry.endsWith(`-${prefix}.json`))
|
|
44
|
+
if (entry.startsWith('session-') && entry.endsWith(`-${prefix}.json`))
|
|
60
45
|
return (0, path_1.join)(chatsDir, entry);
|
|
61
|
-
}
|
|
62
46
|
}
|
|
63
47
|
}
|
|
64
48
|
return null;
|
|
65
49
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Find the most recently modified Gemini session file across all project slugs.
|
|
68
|
-
* Used when no UUID is known (e.g. sub-sessions launched with `--resume latest`).
|
|
69
|
-
* Excludes files already claimed by other watchers.
|
|
70
|
-
*/
|
|
71
50
|
async function findLatestSessionFile(excludeClaimed = true) {
|
|
72
51
|
let slugs;
|
|
73
52
|
try {
|
|
@@ -100,44 +79,13 @@ async function findLatestSessionFile(excludeClaimed = true) {
|
|
|
100
79
|
bestPath = fullPath;
|
|
101
80
|
}
|
|
102
81
|
}
|
|
103
|
-
catch {
|
|
104
|
-
// ignore
|
|
105
|
-
}
|
|
82
|
+
catch { }
|
|
106
83
|
}
|
|
107
84
|
}
|
|
108
85
|
return bestPath;
|
|
109
86
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
* Used before launching a new session so the watcher can detect which file is NEW.
|
|
113
|
-
*/
|
|
114
|
-
async function snapshotSessionFiles() {
|
|
115
|
-
const files = new Set();
|
|
116
|
-
let slugs;
|
|
117
|
-
try {
|
|
118
|
-
slugs = await (0, promises_1.readdir)(GEMINI_TMP_DIR);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
return files;
|
|
122
|
-
}
|
|
123
|
-
for (const slug of slugs) {
|
|
124
|
-
const chatsDir = (0, path_1.join)(GEMINI_TMP_DIR, slug, 'chats');
|
|
125
|
-
let entries;
|
|
126
|
-
try {
|
|
127
|
-
entries = await (0, promises_1.readdir)(chatsDir);
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
for (const entry of entries) {
|
|
133
|
-
if (entry.startsWith('session-') && entry.endsWith('.json')) {
|
|
134
|
-
files.add((0, path_1.join)(chatsDir, entry));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return files;
|
|
139
|
-
}
|
|
140
|
-
function parseMessage(sessionName, msg, hist) {
|
|
87
|
+
// ── Message parsing ────────────────────────────────────────────────────────────
|
|
88
|
+
function parseMessage(sessionName, msg, hist, streaming = false) {
|
|
141
89
|
const stableId = (suffix) => {
|
|
142
90
|
if (!hist)
|
|
143
91
|
return undefined;
|
|
@@ -153,72 +101,39 @@ function parseMessage(sessionName, msg, hist) {
|
|
|
153
101
|
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'user.message', { text: block.text }, { source: 'daemon', confidence: 'high', eventId: stableId('um'), ts: stableTs });
|
|
154
102
|
}
|
|
155
103
|
}
|
|
156
|
-
return;
|
|
157
104
|
}
|
|
158
|
-
if (msg.type === 'gemini') {
|
|
159
|
-
// Emit thinking blocks first
|
|
105
|
+
else if (msg.type === 'gemini') {
|
|
160
106
|
if (msg.thoughts) {
|
|
161
107
|
for (const t of msg.thoughts) {
|
|
162
108
|
const text = t.description ?? t.subject;
|
|
163
|
-
if (text?.trim())
|
|
109
|
+
if (text?.trim())
|
|
164
110
|
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.thinking', { text }, { source: 'daemon', confidence: 'high', eventId: stableId('th'), ts: stableTs });
|
|
165
|
-
}
|
|
166
111
|
}
|
|
167
112
|
}
|
|
168
|
-
// Emit tool calls
|
|
169
113
|
if (msg.toolCalls) {
|
|
170
114
|
for (const tc of msg.toolCalls) {
|
|
171
115
|
if (!tc.name)
|
|
172
116
|
continue;
|
|
173
|
-
// Extract a short input summary
|
|
174
117
|
const input = extractToolInput(tc.name, tc.args);
|
|
175
118
|
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.call', { tool: tc.name, ...(input ? { input } : {}) }, { source: 'daemon', confidence: 'high', eventId: stableId('tc'), ts: stableTs });
|
|
176
|
-
// Emit tool result
|
|
177
|
-
const isError = tc.status === 'error';
|
|
178
119
|
const output = tc.result?.[0]?.functionResponse?.response?.output;
|
|
179
|
-
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.result', {
|
|
180
|
-
...(isError ? { error: output ?? 'error' } : {})
|
|
181
|
-
}, { source: 'daemon', confidence: 'high', eventId: stableId('tr'), ts: stableTs });
|
|
120
|
+
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.result', { ...(tc.status === 'error' ? { error: output ?? 'error' } : {}) }, { source: 'daemon', confidence: 'high', eventId: stableId('tr'), ts: stableTs });
|
|
182
121
|
}
|
|
183
122
|
}
|
|
184
|
-
// Emit assistant text (final response string)
|
|
185
123
|
if (typeof msg.content === 'string' && msg.content.trim()) {
|
|
186
|
-
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.text', { text: msg.content, streaming
|
|
187
|
-
}
|
|
188
|
-
// Emit token usage + model for context bar
|
|
189
|
-
if (msg.tokens && typeof msg.tokens.input === 'number') {
|
|
190
|
-
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'usage.update', {
|
|
191
|
-
inputTokens: msg.tokens.input,
|
|
192
|
-
cacheTokens: msg.tokens.cached ?? 0,
|
|
193
|
-
contextWindow: 1_000_000,
|
|
194
|
-
...(msg.model ? { model: msg.model } : {}),
|
|
195
|
-
}, { source: 'daemon', confidence: 'high', eventId: stableId('uu'), ts: stableTs });
|
|
124
|
+
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.text', { text: msg.content, streaming }, { source: 'daemon', confidence: 'high', eventId: stableId('at'), ts: stableTs });
|
|
196
125
|
}
|
|
197
126
|
}
|
|
198
127
|
}
|
|
199
128
|
function extractToolInput(name, args) {
|
|
200
129
|
if (!args)
|
|
201
130
|
return '';
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
case 'read_file': return String(args['path'] ?? args['file_path'] ?? '');
|
|
205
|
-
case 'write_file': return String(args['path'] ?? args['file_path'] ?? '');
|
|
206
|
-
case 'run_shell_command': return String(args['command'] ?? '').split('\n')[0] ?? '';
|
|
207
|
-
case 'search_files': return String(args['pattern'] ?? args['query'] ?? '');
|
|
208
|
-
case 'list_directory': return String(args['path'] ?? '');
|
|
209
|
-
default: {
|
|
210
|
-
// Try common keys
|
|
211
|
-
const val = args['command'] ?? args['path'] ?? args['query'] ?? args['objective'] ?? '';
|
|
212
|
-
return String(val).split('\n')[0] ?? '';
|
|
213
|
-
}
|
|
214
|
-
}
|
|
131
|
+
const val = args.command ?? args.path ?? args.file_path ?? args.query ?? args.objective ?? '';
|
|
132
|
+
return String(val).split('\n')[0] ?? '';
|
|
215
133
|
}
|
|
216
134
|
const watchers = new Map();
|
|
217
|
-
/** Files already claimed by a watcher — prevents two watchers from tracking the same file */
|
|
218
135
|
const claimedFiles = new Map(); // filePath → sessionName
|
|
219
|
-
/** Manually claim a file for a session (prevents directory scan from stealing it). */
|
|
220
136
|
function preClaimFile(sessionName, filePath) {
|
|
221
|
-
// Clear any existing claim by this session
|
|
222
137
|
for (const [fp, sn] of claimedFiles) {
|
|
223
138
|
if (sn === sessionName) {
|
|
224
139
|
claimedFiles.delete(fp);
|
|
@@ -229,51 +144,40 @@ function preClaimFile(sessionName, filePath) {
|
|
|
229
144
|
}
|
|
230
145
|
// ── Core poll logic ────────────────────────────────────────────────────────────
|
|
231
146
|
async function readConversation(filePath) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
147
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
148
|
+
try {
|
|
149
|
+
const raw = await (0, promises_1.readFile)(filePath, 'utf8');
|
|
150
|
+
if (!raw.trim())
|
|
151
|
+
continue;
|
|
152
|
+
return JSON.parse(raw);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
if (attempt < 2)
|
|
156
|
+
await new Promise(r => setTimeout(r, RETRY_DELAY_MS));
|
|
157
|
+
}
|
|
239
158
|
}
|
|
159
|
+
return null;
|
|
240
160
|
}
|
|
241
161
|
async function pollTick(sessionName, state) {
|
|
242
|
-
// Try to find the file if we don't have it yet
|
|
243
162
|
if (!state.activeFile) {
|
|
244
|
-
const found = state.sessionUuid
|
|
245
|
-
? await findSessionFile(state.sessionUuid)
|
|
246
|
-
: await findLatestSessionFile();
|
|
163
|
+
const found = state.sessionUuid ? await findSessionFile(state.sessionUuid) : await findLatestSessionFile();
|
|
247
164
|
if (found) {
|
|
248
165
|
state.activeFile = found;
|
|
249
166
|
claimedFiles.set(found, sessionName);
|
|
250
|
-
logger_js_1.default.debug({ sessionName, file: found }, 'gemini-watcher: found session file');
|
|
251
167
|
}
|
|
252
|
-
else
|
|
168
|
+
else
|
|
253
169
|
return;
|
|
254
|
-
}
|
|
255
170
|
}
|
|
256
171
|
const conv = await readConversation(state.activeFile);
|
|
257
172
|
if (!conv)
|
|
258
173
|
return;
|
|
259
|
-
// No new activity at all
|
|
260
174
|
if (conv.lastUpdated === state.lastUpdated && conv.messages.length === state.seenCount)
|
|
261
175
|
return;
|
|
262
|
-
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
let messagesToProcess;
|
|
266
|
-
if (isUpdate) {
|
|
267
|
-
// Just re-process the last message to catch added toolCalls/thoughts
|
|
268
|
-
messagesToProcess = [conv.messages[lastMsgIdx]];
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
// Process all new messages appended since last time
|
|
272
|
-
messagesToProcess = conv.messages.slice(state.seenCount);
|
|
273
|
-
}
|
|
176
|
+
const lastIdx = conv.messages.length - 1;
|
|
177
|
+
const isUpdate = conv.messages.length === state.seenCount && lastIdx >= 0;
|
|
178
|
+
const messagesToProcess = isUpdate ? [conv.messages[lastIdx]] : conv.messages.slice(state.seenCount);
|
|
274
179
|
state.seenCount = conv.messages.length;
|
|
275
180
|
state.lastUpdated = conv.lastUpdated;
|
|
276
|
-
// Emit running when new activity starts
|
|
277
181
|
if (!state.emittedRunning) {
|
|
278
182
|
state.emittedRunning = true;
|
|
279
183
|
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'running' });
|
|
@@ -282,182 +186,100 @@ async function pollTick(sessionName, state) {
|
|
|
282
186
|
const msg = messagesToProcess[i];
|
|
283
187
|
if (state.stopped)
|
|
284
188
|
break;
|
|
285
|
-
|
|
286
|
-
const msgIdx = isUpdate ? lastMsgIdx : (state.seenCount - messagesToProcess.length + i);
|
|
189
|
+
const msgIdx = isUpdate ? lastIdx : (state.seenCount - messagesToProcess.length + i);
|
|
287
190
|
const ts = msg.timestamp ? new Date(msg.timestamp).getTime() : Date.now();
|
|
288
|
-
const hist = {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
191
|
+
const hist = { ts: isNaN(ts) ? Date.now() : ts, idPrefix: `g:${sessionName}:${msgIdx}:`, counts: new Map() };
|
|
192
|
+
parseMessage(sessionName, msg, hist, isUpdate);
|
|
193
|
+
const hasContent = typeof msg.content === 'string' && msg.content.trim().length > 0;
|
|
194
|
+
const hasPendingTools = msg.toolCalls?.some((tc) => !tc.status || (tc.status !== 'success' && tc.status !== 'error'));
|
|
195
|
+
if (msg.type === 'gemini' && hasContent && !hasPendingTools) {
|
|
196
|
+
if (isUpdate) {
|
|
197
|
+
// Still streaming: reset debounce — only emit idle after updates stop
|
|
198
|
+
if (state.idleDebounceTimer)
|
|
199
|
+
clearTimeout(state.idleDebounceTimer);
|
|
200
|
+
state.idleDebounceTimer = setTimeout(() => {
|
|
201
|
+
state.idleDebounceTimer = undefined;
|
|
202
|
+
if (!state.stopped) {
|
|
203
|
+
state.emittedRunning = false;
|
|
204
|
+
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'idle' });
|
|
205
|
+
}
|
|
206
|
+
}, 1500);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// New complete message: emit idle immediately
|
|
210
|
+
if (state.idleDebounceTimer) {
|
|
211
|
+
clearTimeout(state.idleDebounceTimer);
|
|
212
|
+
state.idleDebounceTimer = undefined;
|
|
213
|
+
}
|
|
214
|
+
state.emittedRunning = false;
|
|
215
|
+
timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'idle' });
|
|
216
|
+
}
|
|
298
217
|
}
|
|
299
218
|
}
|
|
300
219
|
}
|
|
301
|
-
// ── History replay ─────────────────────────────────────────────────────────────
|
|
302
|
-
async function emitRecentHistory(sessionName, filePath) {
|
|
303
|
-
const conv = await readConversation(filePath);
|
|
304
|
-
if (!conv)
|
|
305
|
-
return;
|
|
306
|
-
const HISTORY_MAX = 100;
|
|
307
|
-
const startIdx = Math.max(0, conv.messages.length - HISTORY_MAX);
|
|
308
|
-
const slice = conv.messages.slice(startIdx);
|
|
309
|
-
for (let i = 0; i < slice.length; i++) {
|
|
310
|
-
const msg = slice[i];
|
|
311
|
-
const msgIdx = startIdx + i;
|
|
312
|
-
// Use stable IDs so duplicate re-emissions across daemon restarts get
|
|
313
|
-
// deduplicated by eventId in the browser (mergeEvents dedup logic).
|
|
314
|
-
// Use the message's own timestamp for ts so events sort correctly.
|
|
315
|
-
const ts = msg.timestamp ? new Date(msg.timestamp).getTime() : Date.now();
|
|
316
|
-
const hist = {
|
|
317
|
-
ts: isNaN(ts) ? Date.now() : ts,
|
|
318
|
-
idPrefix: `g:${sessionName}:${msgIdx}:`,
|
|
319
|
-
counts: new Map(),
|
|
320
|
-
};
|
|
321
|
-
parseMessage(sessionName, msg, hist);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
220
|
// ── Public API ─────────────────────────────────────────────────────────────────
|
|
325
|
-
/**
|
|
326
|
-
* Start watching a Gemini session by UUID.
|
|
327
|
-
* Polls for the session file to appear, then tails new messages.
|
|
328
|
-
*/
|
|
329
221
|
async function startWatching(sessionName, sessionUuid) {
|
|
330
|
-
if (watchers.has(sessionName))
|
|
222
|
+
if (watchers.has(sessionName))
|
|
331
223
|
stopWatching(sessionName);
|
|
332
|
-
}
|
|
333
|
-
const state = {
|
|
334
|
-
sessionUuid,
|
|
335
|
-
activeFile: null,
|
|
336
|
-
seenCount: 0,
|
|
337
|
-
lastUpdated: '',
|
|
338
|
-
abort: new AbortController(),
|
|
339
|
-
stopped: false,
|
|
340
|
-
};
|
|
224
|
+
const state = { sessionUuid, activeFile: null, seenCount: 0, lastUpdated: '', abort: new AbortController(), stopped: false };
|
|
341
225
|
watchers.set(sessionName, state);
|
|
342
|
-
// Try to find the file immediately
|
|
343
226
|
const found = await findSessionFile(sessionUuid);
|
|
344
227
|
if (found) {
|
|
345
228
|
state.activeFile = found;
|
|
346
229
|
claimedFiles.set(found, sessionName);
|
|
347
230
|
const conv = await readConversation(found);
|
|
348
231
|
if (conv) {
|
|
349
|
-
// Start from end so we only emit new messages going forward
|
|
350
232
|
state.seenCount = conv.messages.length;
|
|
351
233
|
state.lastUpdated = conv.lastUpdated;
|
|
352
|
-
await emitRecentHistory(sessionName, found);
|
|
353
234
|
}
|
|
354
235
|
}
|
|
355
|
-
// Poll every 2s as reliable fallback
|
|
356
236
|
state.pollTimer = setInterval(() => {
|
|
357
|
-
void
|
|
358
|
-
|
|
359
|
-
|
|
237
|
+
void (async () => {
|
|
238
|
+
const now = Date.now();
|
|
239
|
+
if (now - (state._lastRotationCheck || 0) > 30000 && state.sessionUuid) {
|
|
240
|
+
state._lastRotationCheck = now;
|
|
241
|
+
const currentFile = await findSessionFile(state.sessionUuid);
|
|
242
|
+
if (currentFile && currentFile !== state.activeFile) {
|
|
243
|
+
logger_js_1.default.info({ sessionName, new: currentFile }, 'gemini-watcher: date rotation detected');
|
|
244
|
+
if (state.activeFile)
|
|
245
|
+
claimedFiles.delete(state.activeFile);
|
|
246
|
+
state.activeFile = currentFile;
|
|
247
|
+
claimedFiles.set(currentFile, sessionName);
|
|
248
|
+
void watchGeminiDir(sessionName, state);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
await pollTick(sessionName, state);
|
|
252
|
+
})();
|
|
253
|
+
}, POLL_INTERVAL_MS);
|
|
360
254
|
void watchGeminiDir(sessionName, state);
|
|
361
255
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
* Start watching for a NEW Gemini session file that wasn't in the pre-launch snapshot.
|
|
371
|
-
* Used when resolveSessionId() failed and we launched fresh — detects the file by diffing
|
|
372
|
-
* against the snapshot taken before launch.
|
|
373
|
-
*
|
|
374
|
-
* @param onDiscovered Called with (sessionId, filePath) when the new file is found.
|
|
375
|
-
* Callers can persist the sessionId for future daemon restarts.
|
|
376
|
-
*/
|
|
377
|
-
async function startWatchingNew(sessionName, existingFiles, onDiscovered) {
|
|
378
|
-
if (watchers.has(sessionName)) {
|
|
379
|
-
stopWatching(sessionName);
|
|
256
|
+
async function startWatchingLatest(sessionName) { return startWatching(sessionName, ''); }
|
|
257
|
+
function isWatching(sessionName) { return watchers.has(sessionName); }
|
|
258
|
+
/** Snapshot all current Gemini session file paths — used as baseline for new-file detection. */
|
|
259
|
+
async function snapshotSessionFiles() {
|
|
260
|
+
const result = new Set();
|
|
261
|
+
let slugs;
|
|
262
|
+
try {
|
|
263
|
+
slugs = await (0, promises_1.readdir)(GEMINI_TMP_DIR);
|
|
380
264
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
stopped: false,
|
|
388
|
-
};
|
|
389
|
-
watchers.set(sessionName, state);
|
|
390
|
-
// Poll for a new file that wasn't in the snapshot
|
|
391
|
-
const findNewFile = async () => {
|
|
392
|
-
let slugs;
|
|
265
|
+
catch {
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
for (const slug of slugs) {
|
|
269
|
+
const chatsDir = (0, path_1.join)(GEMINI_TMP_DIR, slug, 'chats');
|
|
270
|
+
let entries;
|
|
393
271
|
try {
|
|
394
|
-
|
|
272
|
+
entries = await (0, promises_1.readdir)(chatsDir);
|
|
395
273
|
}
|
|
396
274
|
catch {
|
|
397
|
-
|
|
398
|
-
}
|
|
399
|
-
let bestPath = null;
|
|
400
|
-
let bestMtime = 0;
|
|
401
|
-
for (const slug of slugs) {
|
|
402
|
-
const chatsDir = (0, path_1.join)(GEMINI_TMP_DIR, slug, 'chats');
|
|
403
|
-
let entries;
|
|
404
|
-
try {
|
|
405
|
-
entries = await (0, promises_1.readdir)(chatsDir);
|
|
406
|
-
}
|
|
407
|
-
catch {
|
|
408
|
-
continue;
|
|
409
|
-
}
|
|
410
|
-
for (const entry of entries) {
|
|
411
|
-
if (!entry.startsWith('session-') || !entry.endsWith('.json'))
|
|
412
|
-
continue;
|
|
413
|
-
const fullPath = (0, path_1.join)(chatsDir, entry);
|
|
414
|
-
if (existingFiles.has(fullPath))
|
|
415
|
-
continue; // existed before launch
|
|
416
|
-
if (claimedFiles.has(fullPath))
|
|
417
|
-
continue; // claimed by another watcher
|
|
418
|
-
try {
|
|
419
|
-
const s = await (0, promises_1.stat)(fullPath);
|
|
420
|
-
if (s.mtimeMs > bestMtime) {
|
|
421
|
-
bestMtime = s.mtimeMs;
|
|
422
|
-
bestPath = fullPath;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
catch { /* ignore */ }
|
|
426
|
-
}
|
|
275
|
+
continue;
|
|
427
276
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
for (let i = 0; i < 60 && !state.stopped; i++) {
|
|
432
|
-
const found = await findNewFile();
|
|
433
|
-
if (found) {
|
|
434
|
-
state.activeFile = found;
|
|
435
|
-
claimedFiles.set(found, sessionName);
|
|
436
|
-
logger_js_1.default.info({ sessionName, file: found }, 'gemini-watcher: found new session file via snapshot diff');
|
|
437
|
-
// Read sessionId from JSON and notify caller
|
|
438
|
-
const conv = await readConversation(found);
|
|
439
|
-
if (conv) {
|
|
440
|
-
state.seenCount = conv.messages.length;
|
|
441
|
-
state.lastUpdated = conv.lastUpdated;
|
|
442
|
-
await emitRecentHistory(sessionName, found);
|
|
443
|
-
if (conv.sessionId && onDiscovered) {
|
|
444
|
-
onDiscovered(conv.sessionId, found);
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
break;
|
|
277
|
+
for (const entry of entries) {
|
|
278
|
+
if (entry.startsWith('session-') && entry.endsWith('.json'))
|
|
279
|
+
result.add((0, path_1.join)(chatsDir, entry));
|
|
448
280
|
}
|
|
449
|
-
await new Promise((r) => setTimeout(r, 2000));
|
|
450
281
|
}
|
|
451
|
-
|
|
452
|
-
state.pollTimer = setInterval(() => {
|
|
453
|
-
void pollTick(sessionName, state);
|
|
454
|
-
}, 2000);
|
|
455
|
-
if (state.activeFile) {
|
|
456
|
-
void watchGeminiDir(sessionName, state);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
function isWatching(sessionName) {
|
|
460
|
-
return watchers.has(sessionName);
|
|
282
|
+
return result;
|
|
461
283
|
}
|
|
462
284
|
function stopWatching(sessionName) {
|
|
463
285
|
const state = watchers.get(sessionName);
|
|
@@ -467,34 +289,17 @@ function stopWatching(sessionName) {
|
|
|
467
289
|
state.abort.abort();
|
|
468
290
|
if (state.pollTimer)
|
|
469
291
|
clearInterval(state.pollTimer);
|
|
292
|
+
if (state.idleDebounceTimer)
|
|
293
|
+
clearTimeout(state.idleDebounceTimer);
|
|
470
294
|
watchers.delete(sessionName);
|
|
471
|
-
// Remove claims for this session
|
|
472
295
|
for (const [fp, sn] of claimedFiles) {
|
|
473
296
|
if (sn === sessionName)
|
|
474
297
|
claimedFiles.delete(fp);
|
|
475
298
|
}
|
|
476
299
|
}
|
|
477
|
-
// ── fs.watch for faster updates ────────────────────────────────────────────────
|
|
478
300
|
async function watchGeminiDir(sessionName, state) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
const waitForFile = async () => {
|
|
482
|
-
for (let i = 0; i < 60 && !state.stopped; i++) {
|
|
483
|
-
const found = state.sessionUuid
|
|
484
|
-
? await findSessionFile(state.sessionUuid)
|
|
485
|
-
: await findLatestSessionFile();
|
|
486
|
-
if (found)
|
|
487
|
-
return found;
|
|
488
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
489
|
-
}
|
|
490
|
-
return null;
|
|
491
|
-
};
|
|
492
|
-
if (!state.activeFile) {
|
|
493
|
-
const found = await waitForFile();
|
|
494
|
-
if (!found || state.stopped)
|
|
495
|
-
return;
|
|
496
|
-
state.activeFile = found;
|
|
497
|
-
}
|
|
301
|
+
if (!state.activeFile)
|
|
302
|
+
return;
|
|
498
303
|
const dir = state.activeFile.substring(0, state.activeFile.lastIndexOf('/'));
|
|
499
304
|
const filename = state.activeFile.substring(state.activeFile.lastIndexOf('/') + 1);
|
|
500
305
|
try {
|
|
@@ -502,15 +307,10 @@ async function watchGeminiDir(sessionName, state) {
|
|
|
502
307
|
for await (const event of watcher) {
|
|
503
308
|
if (state.stopped)
|
|
504
309
|
break;
|
|
505
|
-
if (event.filename
|
|
506
|
-
|
|
507
|
-
await pollTick(sessionName, state);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
catch (err) {
|
|
511
|
-
if (!state.stopped) {
|
|
512
|
-
logger_js_1.default.debug({ sessionName, err }, 'gemini-watcher: dir watch error');
|
|
310
|
+
if (event.filename === filename)
|
|
311
|
+
await pollTick(sessionName, state);
|
|
513
312
|
}
|
|
514
313
|
}
|
|
314
|
+
catch { }
|
|
515
315
|
}
|
|
516
316
|
//# sourceMappingURL=gemini-watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-watcher.js","sourceRoot":"","sources":["../../src/daemon/gemini-watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gemini-watcher.js","sourceRoot":"","sources":["../../src/daemon/gemini-watcher.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAmHH,oCAGC;AAiBD,4BAgDC;AAID,sCA8BC;AAED,kDAAwH;AAExH,gCAA8F;AAG9F,oDAaC;AAED,oCAQC;AArPD,0CAA6D;AAC7D,+BAA4B;AAC5B,2BAA6B;AAC7B,+DAAwD;AACxD,kEAAuC;AAEvC,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,GAAG,CAAC,CAAC,iBAAiB;AAC/C,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,kFAAkF;AAElF,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAc,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YAAC,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,OAAO,CAAC;gBAAE,OAAO,IAAA,WAAI,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,cAAc,GAAG,IAAI;IACxD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAc,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACrE,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YAAC,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACxE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,cAAc,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC3D,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC;oBAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC;oBAAC,QAAQ,GAAG,QAAQ,CAAC;gBAAC,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kFAAkF;AAElF,SAAS,YAAY,CAAC,WAAmB,EAAE,GAAQ,EAAE,IAAU,EAAE,SAAS,GAAG,KAAK;IAChF,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,EAAE,EAAE,CAAC;IAE1B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvB,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3J,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC;gBACxC,IAAI,IAAI,EAAE,IAAI,EAAE;oBAAE,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvK,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,EAAE,CAAC,IAAI;oBAAE,SAAS;gBACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBACjD,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAChL,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC;gBAClE,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxM,CAAC;QACH,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzK,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAAU;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAC9F,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAiBD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AACjD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,yBAAyB;AAEzE,SAAgB,YAAY,CAAC,WAAmB,EAAE,QAAgB;IAChE,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAAC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;YAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;IAAC,CAAC;IACpG,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,kFAAkF;AAElF,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,WAAmB,EAAE,KAAmB;IACrE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAC;QAC3G,IAAI,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAAC,CAAC;;YAAM,OAAO;IAC7F,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,UAAW,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO;IAE/F,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC;IAC1E,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAErC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAAC,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAAC,CAAC;IAErI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO;YAAE,MAAM;QACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1E,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,WAAW,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC7G,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACpF,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC;QAC3H,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,sEAAsE;gBACtE,IAAI,KAAK,CAAC,iBAAiB;oBAAE,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACnE,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxC,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBACnB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;wBAC7B,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,8CAA8C;gBAC9C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBAAC,CAAC;gBAC5G,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC7B,qCAAe,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,kFAAkF;AAE3E,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,WAAmB;IAC1E,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,KAAK,GAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3I,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvE,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC;gBAC/B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,WAAW,IAAI,WAAW,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;oBACpD,mBAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,wCAAwC,CAAC,CAAC;oBACzF,IAAI,KAAK,CAAC,UAAU;wBAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC5D,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;oBAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBAC3E,KAAK,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAErB,KAAK,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,WAAmB,IAAmB,OAAO,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAExH,SAAgB,UAAU,CAAC,WAAmB,IAAa,OAAO,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAE9F,gGAAgG;AACzF,KAAK,UAAU,oBAAoB;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAc,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YAAC,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,YAAY,CAAC,WAAmB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1C,IAAI,KAAK,CAAC,SAAS;QAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,iBAAiB;QAAE,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACnE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAAC,IAAI,EAAE,KAAK,WAAW;YAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAmB;IACpE,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAc,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,OAAO;gBAAE,MAAM;YACzB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC"}
|