@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.
- package/dist/agent/session-manager.d.ts.map +1 -1
- package/dist/agent/session-manager.js +31 -31
- package/dist/agent/session-manager.js.map +1 -1
- package/dist/daemon/codex-watcher.d.ts +9 -34
- package/dist/daemon/codex-watcher.d.ts.map +1 -1
- package/dist/daemon/codex-watcher.js +188 -366
- package/dist/daemon/codex-watcher.js.map +1 -1
- package/dist/daemon/gemini-watcher.d.ts +16 -34
- package/dist/daemon/gemini-watcher.d.ts.map +1 -1
- package/dist/daemon/gemini-watcher.js +135 -282
- package/dist/daemon/gemini-watcher.js.map +1 -1
- package/dist/daemon/jsonl-watcher.d.ts +2 -0
- package/dist/daemon/jsonl-watcher.d.ts.map +1 -1
- package/dist/daemon/jsonl-watcher.js +25 -12
- package/dist/daemon/jsonl-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/dist/daemon/timeline-emitter.d.ts +2 -0
- package/dist/daemon/timeline-emitter.d.ts.map +1 -1
- package/dist/daemon/timeline-emitter.js +2 -2
- package/dist/daemon/timeline-emitter.js.map +1 -1
- package/package.json +1 -1
|
@@ -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.
|
|
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
|
-
|
|
36
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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', { ...(
|
|
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
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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.
|
|
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
|
|
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 (
|
|
185
|
+
for (let i = 0; i < messagesToProcess.length; i++) {
|
|
186
|
+
const msg = messagesToProcess[i];
|
|
252
187
|
if (state.stopped)
|
|
253
188
|
break;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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.
|
|
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
|
|
308
|
-
|
|
309
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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
|
-
|
|
272
|
+
entries = await (0, promises_1.readdir)(chatsDir);
|
|
345
273
|
}
|
|
346
274
|
catch {
|
|
347
|
-
|
|
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
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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
|
-
|
|
427
|
-
|
|
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
|
|
453
|
-
|
|
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;
|
|
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"}
|