@codedeck/codedeck 2026.3.38 → 2026.3.40

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.
@@ -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
- * Find the conversation JSON file for a given session UUID.
37
- * Filename format: session-<timestamp>-<uuid[:8]>.json
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
- * Snapshot all existing Gemini session files.
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: false }, { source: 'daemon', confidence: 'high', eventId: stableId('at'), ts: stableTs });
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
- // Common Gemini built-in tools
203
- switch (name) {
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
- try {
233
- const { readFile } = await import('fs/promises');
234
- const raw = await readFile(filePath, 'utf8');
235
- return JSON.parse(raw);
236
- }
237
- catch {
238
- return null;
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
- // Detect if we have new messages OR if the last message was updated in-place
263
- const lastMsgIdx = conv.messages.length - 1;
264
- const isUpdate = conv.messages.length === state.seenCount && lastMsgIdx >= 0;
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
- // Use stable ID context even for live updates so frontend can deduplicate
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
- ts: isNaN(ts) ? Date.now() : ts,
290
- idPrefix: `g:${sessionName}:${msgIdx}:`,
291
- counts: new Map(),
292
- };
293
- parseMessage(sessionName, msg, hist);
294
- // Idle detection: a gemini message WITHOUT toolCalls is the final response
295
- if (msg.type === 'gemini' && !msg.toolCalls?.length) {
296
- state.emittedRunning = false;
297
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'idle' });
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 pollTick(sessionName, state);
358
- }, 2000);
359
- // Also watch the gemini tmp dir for faster notification
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
- * Start watching for the most recently modified Gemini session file.
364
- * Used for sub-sessions launched without a pre-known UUID (e.g. `--resume latest`).
365
- */
366
- async function startWatchingLatest(sessionName) {
367
- return startWatching(sessionName, '');
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
- const state = {
382
- sessionUuid: '',
383
- activeFile: null,
384
- seenCount: 0,
385
- lastUpdated: '',
386
- abort: new AbortController(),
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
- slugs = await (0, promises_1.readdir)(GEMINI_TMP_DIR);
272
+ entries = await (0, promises_1.readdir)(chatsDir);
395
273
  }
396
274
  catch {
397
- return null;
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
- return bestPath;
429
- };
430
- // Try to find the new file (may take a few seconds for Gemini to create it)
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
- // Start polling
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
- // Watch ~/.gemini/tmp for new slug directories / file changes
480
- // When activeFile is known, watch its parent dir directly
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 !== filename)
506
- continue;
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":"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"}