@codedeck/codedeck 2026.3.35 → 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.
@@ -1,41 +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;
9
+ exports.preClaimFile = preClaimFile;
10
+ exports.pollTick = pollTick;
22
11
  exports.startWatching = startWatching;
23
12
  exports.startWatchingLatest = startWatchingLatest;
24
- exports.startWatchingNew = startWatchingNew;
25
13
  exports.isWatching = isWatching;
14
+ exports.snapshotSessionFiles = snapshotSessionFiles;
26
15
  exports.stopWatching = stopWatching;
27
16
  const promises_1 = require("fs/promises");
28
17
  const path_1 = require("path");
29
18
  const os_1 = require("os");
30
19
  const timeline_emitter_js_1 = require("./timeline-emitter.js");
31
20
  const logger_js_1 = __importDefault(require("../util/logger.js"));
32
- // ── Path helpers ───────────────────────────────────────────────────────────────
33
21
  const GEMINI_TMP_DIR = (0, path_1.join)((0, os_1.homedir)(), '.gemini', 'tmp');
34
- /**
35
- * Find the conversation JSON file for a given session UUID.
36
- * Filename format: session-<timestamp>-<uuid[:8]>.json
37
- * Scans all project-slug subdirectories under ~/.gemini/tmp/.
38
- */
22
+ const POLL_INTERVAL_MS = 500; // Snappy updates
23
+ const RETRY_DELAY_MS = 100;
24
+ // ── Path helpers ───────────────────────────────────────────────────────────────
39
25
  async function findSessionFile(sessionUuid) {
40
26
  const prefix = sessionUuid.slice(0, 8);
41
27
  let slugs;
@@ -55,18 +41,12 @@ async function findSessionFile(sessionUuid) {
55
41
  continue;
56
42
  }
57
43
  for (const entry of entries) {
58
- if (entry.startsWith('session-') && entry.endsWith(`-${prefix}.json`)) {
44
+ if (entry.startsWith('session-') && entry.endsWith(`-${prefix}.json`))
59
45
  return (0, path_1.join)(chatsDir, entry);
60
- }
61
46
  }
62
47
  }
63
48
  return null;
64
49
  }
65
- /**
66
- * Find the most recently modified Gemini session file across all project slugs.
67
- * Used when no UUID is known (e.g. sub-sessions launched with `--resume latest`).
68
- * Excludes files already claimed by other watchers.
69
- */
70
50
  async function findLatestSessionFile(excludeClaimed = true) {
71
51
  let slugs;
72
52
  try {
@@ -99,349 +79,227 @@ async function findLatestSessionFile(excludeClaimed = true) {
99
79
  bestPath = fullPath;
100
80
  }
101
81
  }
102
- catch {
103
- // ignore
104
- }
82
+ catch { }
105
83
  }
106
84
  }
107
85
  return bestPath;
108
86
  }
109
- /**
110
- * Snapshot all existing Gemini session files.
111
- * Used before launching a new session so the watcher can detect which file is NEW.
112
- */
113
- async function snapshotSessionFiles() {
114
- const files = new Set();
115
- let slugs;
116
- try {
117
- slugs = await (0, promises_1.readdir)(GEMINI_TMP_DIR);
118
- }
119
- catch {
120
- return files;
121
- }
122
- for (const slug of slugs) {
123
- const chatsDir = (0, path_1.join)(GEMINI_TMP_DIR, slug, 'chats');
124
- let entries;
125
- try {
126
- entries = await (0, promises_1.readdir)(chatsDir);
127
- }
128
- catch {
129
- continue;
130
- }
131
- for (const entry of entries) {
132
- if (entry.startsWith('session-') && entry.endsWith('.json')) {
133
- files.add((0, path_1.join)(chatsDir, entry));
134
- }
135
- }
136
- }
137
- return files;
138
- }
139
- function parseMessage(sessionName, msg) {
87
+ // ── Message parsing ────────────────────────────────────────────────────────────
88
+ function parseMessage(sessionName, msg, hist, streaming = false) {
89
+ const stableId = (suffix) => {
90
+ if (!hist)
91
+ return undefined;
92
+ const n = hist.counts.get(suffix) ?? 0;
93
+ hist.counts.set(suffix, n + 1);
94
+ return `${hist.idPrefix}${suffix}:${n}`;
95
+ };
96
+ const stableTs = hist?.ts;
140
97
  if (msg.type === 'user') {
141
98
  const blocks = Array.isArray(msg.content) ? msg.content : [];
142
99
  for (const block of blocks) {
143
100
  if (block.text?.trim()) {
144
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'user.message', { text: block.text }, { source: 'daemon', confidence: 'high' });
101
+ timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'user.message', { text: block.text }, { source: 'daemon', confidence: 'high', eventId: stableId('um'), ts: stableTs });
145
102
  }
146
103
  }
147
- return;
148
104
  }
149
- if (msg.type === 'gemini') {
150
- // Emit thinking blocks first
105
+ else if (msg.type === 'gemini') {
151
106
  if (msg.thoughts) {
152
107
  for (const t of msg.thoughts) {
153
108
  const text = t.description ?? t.subject;
154
- if (text?.trim()) {
155
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.thinking', { text }, { source: 'daemon', confidence: 'high' });
156
- }
109
+ if (text?.trim())
110
+ timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.thinking', { text }, { source: 'daemon', confidence: 'high', eventId: stableId('th'), ts: stableTs });
157
111
  }
158
112
  }
159
- // Emit tool calls
160
113
  if (msg.toolCalls) {
161
114
  for (const tc of msg.toolCalls) {
162
115
  if (!tc.name)
163
116
  continue;
164
- // Extract a short input summary
165
117
  const input = extractToolInput(tc.name, tc.args);
166
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.call', { tool: tc.name, ...(input ? { input } : {}) }, { source: 'daemon', confidence: 'high' });
167
- // Emit tool result
168
- const isError = tc.status === 'error';
118
+ timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.call', { tool: tc.name, ...(input ? { input } : {}) }, { source: 'daemon', confidence: 'high', eventId: stableId('tc'), ts: stableTs });
169
119
  const output = tc.result?.[0]?.functionResponse?.response?.output;
170
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'tool.result', { ...(isError ? { error: output ?? 'error' } : {}) }, { source: 'daemon', confidence: 'high' });
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 });
171
121
  }
172
122
  }
173
- // Emit assistant text (final response string)
174
123
  if (typeof msg.content === 'string' && msg.content.trim()) {
175
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.text', { text: msg.content, streaming: false }, { source: 'daemon', confidence: 'high' });
176
- }
177
- // Emit token usage + model for context bar
178
- if (msg.tokens && typeof msg.tokens.input === 'number') {
179
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'usage.update', {
180
- inputTokens: msg.tokens.input,
181
- cacheTokens: msg.tokens.cached ?? 0,
182
- contextWindow: 1_000_000,
183
- ...(msg.model ? { model: msg.model } : {}),
184
- }, { source: 'daemon', confidence: 'high' });
124
+ timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'assistant.text', { text: msg.content, streaming }, { source: 'daemon', confidence: 'high', eventId: stableId('at'), ts: stableTs });
185
125
  }
186
126
  }
187
127
  }
188
128
  function extractToolInput(name, args) {
189
129
  if (!args)
190
130
  return '';
191
- // Common Gemini built-in tools
192
- switch (name) {
193
- case 'read_file': return String(args['path'] ?? args['file_path'] ?? '');
194
- case 'write_file': return String(args['path'] ?? args['file_path'] ?? '');
195
- case 'run_shell_command': return String(args['command'] ?? '').split('\n')[0] ?? '';
196
- case 'search_files': return String(args['pattern'] ?? args['query'] ?? '');
197
- case 'list_directory': return String(args['path'] ?? '');
198
- default: {
199
- // Try common keys
200
- const val = args['command'] ?? args['path'] ?? args['query'] ?? args['objective'] ?? '';
201
- return String(val).split('\n')[0] ?? '';
131
+ const val = args.command ?? args.path ?? args.file_path ?? args.query ?? args.objective ?? '';
132
+ return String(val).split('\n')[0] ?? '';
133
+ }
134
+ const watchers = new Map();
135
+ const claimedFiles = new Map(); // filePath → sessionName
136
+ function preClaimFile(sessionName, filePath) {
137
+ for (const [fp, sn] of claimedFiles) {
138
+ if (sn === sessionName) {
139
+ claimedFiles.delete(fp);
140
+ break;
202
141
  }
203
142
  }
143
+ claimedFiles.set(filePath, sessionName);
204
144
  }
205
- const watchers = new Map();
206
- /** Files already claimed by a watcher — prevents two watchers from tracking the same file */
207
- const claimedFiles = new Set();
208
145
  // ── Core poll logic ────────────────────────────────────────────────────────────
209
146
  async function readConversation(filePath) {
210
- try {
211
- const { readFile } = await import('fs/promises');
212
- const raw = await readFile(filePath, 'utf8');
213
- return JSON.parse(raw);
214
- }
215
- catch {
216
- 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
+ }
217
158
  }
159
+ return null;
218
160
  }
219
161
  async function pollTick(sessionName, state) {
220
- // Try to find the file if we don't have it yet
221
162
  if (!state.activeFile) {
222
- const found = state.sessionUuid
223
- ? await findSessionFile(state.sessionUuid)
224
- : await findLatestSessionFile();
163
+ const found = state.sessionUuid ? await findSessionFile(state.sessionUuid) : await findLatestSessionFile();
225
164
  if (found) {
226
165
  state.activeFile = found;
227
- claimedFiles.add(found);
228
- logger_js_1.default.debug({ sessionName, file: found }, 'gemini-watcher: found session file');
166
+ claimedFiles.set(found, sessionName);
229
167
  }
230
- else {
168
+ else
231
169
  return;
232
- }
233
170
  }
234
171
  const conv = await readConversation(state.activeFile);
235
172
  if (!conv)
236
173
  return;
237
- // No new messages
238
- if (conv.messages.length <= state.seenCount)
239
- return;
240
- // No change in lastUpdated for same count (shouldn't happen but be safe)
241
174
  if (conv.lastUpdated === state.lastUpdated && conv.messages.length === state.seenCount)
242
175
  return;
243
- const newMessages = conv.messages.slice(state.seenCount);
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);
244
179
  state.seenCount = conv.messages.length;
245
180
  state.lastUpdated = conv.lastUpdated;
246
- // Emit running when new activity starts
247
181
  if (!state.emittedRunning) {
248
182
  state.emittedRunning = true;
249
183
  timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'running' });
250
184
  }
251
- for (const msg of newMessages) {
185
+ for (let i = 0; i < messagesToProcess.length; i++) {
186
+ const msg = messagesToProcess[i];
252
187
  if (state.stopped)
253
188
  break;
254
- parseMessage(sessionName, msg);
255
- // Idle detection: a gemini message WITHOUT toolCalls is the final response
256
- // in a turn the agent is done and waiting for user input.
257
- if (msg.type === 'gemini' && !msg.toolCalls?.length) {
258
- state.emittedRunning = false;
259
- timeline_emitter_js_1.timelineEmitter.emit(sessionName, 'session.state', { state: 'idle' });
189
+ const msgIdx = isUpdate ? lastIdx : (state.seenCount - messagesToProcess.length + i);
190
+ const ts = msg.timestamp ? new Date(msg.timestamp).getTime() : Date.now();
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
+ }
260
217
  }
261
218
  }
262
219
  }
263
- // ── History replay ─────────────────────────────────────────────────────────────
264
- async function emitRecentHistory(sessionName, filePath) {
265
- const conv = await readConversation(filePath);
266
- if (!conv)
267
- return;
268
- const HISTORY_MAX = 100;
269
- const slice = conv.messages.slice(-HISTORY_MAX);
270
- for (const msg of slice) {
271
- parseMessage(sessionName, msg);
272
- }
273
- }
274
220
  // ── Public API ─────────────────────────────────────────────────────────────────
275
- /**
276
- * Start watching a Gemini session by UUID.
277
- * Polls for the session file to appear, then tails new messages.
278
- */
279
221
  async function startWatching(sessionName, sessionUuid) {
280
- if (watchers.has(sessionName)) {
222
+ if (watchers.has(sessionName))
281
223
  stopWatching(sessionName);
282
- }
283
- const state = {
284
- sessionUuid,
285
- activeFile: null,
286
- seenCount: 0,
287
- lastUpdated: '',
288
- abort: new AbortController(),
289
- stopped: false,
290
- };
224
+ const state = { sessionUuid, activeFile: null, seenCount: 0, lastUpdated: '', abort: new AbortController(), stopped: false };
291
225
  watchers.set(sessionName, state);
292
- // Try to find the file immediately
293
226
  const found = await findSessionFile(sessionUuid);
294
227
  if (found) {
295
228
  state.activeFile = found;
296
- claimedFiles.add(found);
229
+ claimedFiles.set(found, sessionName);
297
230
  const conv = await readConversation(found);
298
231
  if (conv) {
299
- // Start from end so we only emit new messages going forward
300
232
  state.seenCount = conv.messages.length;
301
233
  state.lastUpdated = conv.lastUpdated;
302
- await emitRecentHistory(sessionName, found);
303
234
  }
304
235
  }
305
- // Poll every 2s as reliable fallback
306
236
  state.pollTimer = setInterval(() => {
307
- void pollTick(sessionName, state);
308
- }, 2000);
309
- // 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);
310
254
  void watchGeminiDir(sessionName, state);
311
255
  }
312
- /**
313
- * Start watching for the most recently modified Gemini session file.
314
- * Used for sub-sessions launched without a pre-known UUID (e.g. `--resume latest`).
315
- */
316
- async function startWatchingLatest(sessionName) {
317
- return startWatching(sessionName, '');
318
- }
319
- /**
320
- * Start watching for a NEW Gemini session file that wasn't in the pre-launch snapshot.
321
- * Used when resolveSessionId() failed and we launched fresh — detects the file by diffing
322
- * against the snapshot taken before launch.
323
- *
324
- * @param onDiscovered Called with (sessionId, filePath) when the new file is found.
325
- * Callers can persist the sessionId for future daemon restarts.
326
- */
327
- async function startWatchingNew(sessionName, existingFiles, onDiscovered) {
328
- if (watchers.has(sessionName)) {
329
- 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);
330
264
  }
331
- const state = {
332
- sessionUuid: '',
333
- activeFile: null,
334
- seenCount: 0,
335
- lastUpdated: '',
336
- abort: new AbortController(),
337
- stopped: false,
338
- };
339
- watchers.set(sessionName, state);
340
- // Poll for a new file that wasn't in the snapshot
341
- const findNewFile = async () => {
342
- 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;
343
271
  try {
344
- slugs = await (0, promises_1.readdir)(GEMINI_TMP_DIR);
272
+ entries = await (0, promises_1.readdir)(chatsDir);
345
273
  }
346
274
  catch {
347
- return null;
348
- }
349
- let bestPath = null;
350
- let bestMtime = 0;
351
- for (const slug of slugs) {
352
- const chatsDir = (0, path_1.join)(GEMINI_TMP_DIR, slug, 'chats');
353
- let entries;
354
- try {
355
- entries = await (0, promises_1.readdir)(chatsDir);
356
- }
357
- catch {
358
- continue;
359
- }
360
- for (const entry of entries) {
361
- if (!entry.startsWith('session-') || !entry.endsWith('.json'))
362
- continue;
363
- const fullPath = (0, path_1.join)(chatsDir, entry);
364
- if (existingFiles.has(fullPath))
365
- continue; // existed before launch
366
- if (claimedFiles.has(fullPath))
367
- continue; // claimed by another watcher
368
- try {
369
- const s = await (0, promises_1.stat)(fullPath);
370
- if (s.mtimeMs > bestMtime) {
371
- bestMtime = s.mtimeMs;
372
- bestPath = fullPath;
373
- }
374
- }
375
- catch { /* ignore */ }
376
- }
275
+ continue;
377
276
  }
378
- return bestPath;
379
- };
380
- // Try to find the new file (may take a few seconds for Gemini to create it)
381
- for (let i = 0; i < 60 && !state.stopped; i++) {
382
- const found = await findNewFile();
383
- if (found) {
384
- state.activeFile = found;
385
- claimedFiles.add(found);
386
- logger_js_1.default.info({ sessionName, file: found }, 'gemini-watcher: found new session file via snapshot diff');
387
- // Read sessionId from JSON and notify caller
388
- const conv = await readConversation(found);
389
- if (conv) {
390
- state.seenCount = conv.messages.length;
391
- state.lastUpdated = conv.lastUpdated;
392
- await emitRecentHistory(sessionName, found);
393
- if (conv.sessionId && onDiscovered) {
394
- onDiscovered(conv.sessionId, found);
395
- }
396
- }
397
- break;
277
+ for (const entry of entries) {
278
+ if (entry.startsWith('session-') && entry.endsWith('.json'))
279
+ result.add((0, path_1.join)(chatsDir, entry));
398
280
  }
399
- await new Promise((r) => setTimeout(r, 2000));
400
- }
401
- // Start polling
402
- state.pollTimer = setInterval(() => {
403
- void pollTick(sessionName, state);
404
- }, 2000);
405
- if (state.activeFile) {
406
- void watchGeminiDir(sessionName, state);
407
281
  }
408
- }
409
- function isWatching(sessionName) {
410
- return watchers.has(sessionName);
282
+ return result;
411
283
  }
412
284
  function stopWatching(sessionName) {
413
285
  const state = watchers.get(sessionName);
414
286
  if (!state)
415
287
  return;
416
- if (state.activeFile)
417
- claimedFiles.delete(state.activeFile);
418
288
  state.stopped = true;
419
289
  state.abort.abort();
420
290
  if (state.pollTimer)
421
291
  clearInterval(state.pollTimer);
292
+ if (state.idleDebounceTimer)
293
+ clearTimeout(state.idleDebounceTimer);
422
294
  watchers.delete(sessionName);
295
+ for (const [fp, sn] of claimedFiles) {
296
+ if (sn === sessionName)
297
+ claimedFiles.delete(fp);
298
+ }
423
299
  }
424
- // ── fs.watch for faster updates ────────────────────────────────────────────────
425
300
  async function watchGeminiDir(sessionName, state) {
426
- // Watch ~/.gemini/tmp for new slug directories / file changes
427
- // When activeFile is known, watch its parent dir directly
428
- const waitForFile = async () => {
429
- for (let i = 0; i < 60 && !state.stopped; i++) {
430
- const found = state.sessionUuid
431
- ? await findSessionFile(state.sessionUuid)
432
- : await findLatestSessionFile();
433
- if (found)
434
- return found;
435
- await new Promise((r) => setTimeout(r, 1000));
436
- }
437
- return null;
438
- };
439
- if (!state.activeFile) {
440
- const found = await waitForFile();
441
- if (!found || state.stopped)
442
- return;
443
- state.activeFile = found;
444
- }
301
+ if (!state.activeFile)
302
+ return;
445
303
  const dir = state.activeFile.substring(0, state.activeFile.lastIndexOf('/'));
446
304
  const filename = state.activeFile.substring(state.activeFile.lastIndexOf('/') + 1);
447
305
  try {
@@ -449,15 +307,10 @@ async function watchGeminiDir(sessionName, state) {
449
307
  for await (const event of watcher) {
450
308
  if (state.stopped)
451
309
  break;
452
- if (event.filename !== filename)
453
- continue;
454
- await pollTick(sessionName, state);
455
- }
456
- }
457
- catch (err) {
458
- if (!state.stopped) {
459
- logger_js_1.default.debug({ sessionName, err }, 'gemini-watcher: dir watch error');
310
+ if (event.filename === filename)
311
+ await pollTick(sessionName, state);
460
312
  }
461
313
  }
314
+ catch { }
462
315
  }
463
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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"}
@@ -14,6 +14,8 @@
14
14
  */
15
15
  /** Return the ~/.claude/projects/{key} directory for a given work dir. */
16
16
  export declare function claudeProjectDir(workDir: string): string;
17
+ /** Manually claim a file for a session (prevents directory scan from stealing it). */
18
+ export declare function preClaimFile(sessionName: string, filePath: string): void;
17
19
  /**
18
20
  * Start watching Claude Code's JSONL transcript for a session.
19
21
  * Only new lines written after this call are emitted — no history replay.
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/jsonl-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAsVD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvF;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C5F"}
1
+ {"version":3,"file":"jsonl-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/jsonl-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAsND,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMxE;AAwID;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvF;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C5F"}