nterminal 1.3.2 → 1.3.4

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.
Files changed (62) hide show
  1. package/README.md +4 -2
  2. package/bin/nterminal.js +5 -0
  3. package/dist/client/assets/MarkdownPreview-DjDO4lEl.js +1 -0
  4. package/dist/client/assets/TranscriptMarkdownBody-H8ZsISc6.js +3 -0
  5. package/dist/client/assets/{index-lQ2cyEWO.css → index-CIYazAGv.css} +1 -1
  6. package/dist/client/assets/index-DwvLN_WJ.js +56 -0
  7. package/dist/client/assets/{index-CosXAR2f.js → index-DxfBq-4P.js} +1 -1
  8. package/dist/client/index.html +2 -2
  9. package/dist/scripts/onboarding.js +9 -0
  10. package/dist/scripts/onboarding.js.map +1 -1
  11. package/dist/server/agent/agentProxy.d.ts +1 -0
  12. package/dist/server/agent/agentProxy.js +3 -1
  13. package/dist/server/agent/agentProxy.js.map +1 -1
  14. package/dist/server/agent/agentRoutes.js +16 -2
  15. package/dist/server/agent/agentRoutes.js.map +1 -1
  16. package/dist/server/index.js +2 -0
  17. package/dist/server/index.js.map +1 -1
  18. package/dist/server/routes/agentManagementRoutes.js +13 -2
  19. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  20. package/dist/server/routes/terminalRoutes.js +19 -2
  21. package/dist/server/routes/terminalRoutes.js.map +1 -1
  22. package/dist/server/routes/transcriptQuery.d.ts +14 -0
  23. package/dist/server/routes/transcriptQuery.js +57 -0
  24. package/dist/server/routes/transcriptQuery.js.map +1 -0
  25. package/dist/server/terminal/PtyAdapter.d.ts +12 -0
  26. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  27. package/dist/server/terminal/TerminalManager.d.ts +6 -7
  28. package/dist/server/terminal/TerminalManager.js +57 -11
  29. package/dist/server/terminal/TerminalManager.js.map +1 -1
  30. package/dist/server/terminal/TmuxPtyAdapter.d.ts +15 -1
  31. package/dist/server/terminal/TmuxPtyAdapter.js +288 -13
  32. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  33. package/dist/server/terminal/codexTranscriptSource.d.ts +18 -1
  34. package/dist/server/terminal/codexTranscriptSource.js +273 -75
  35. package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
  36. package/dist/server/terminal/sqliteReader.d.ts +21 -0
  37. package/dist/server/terminal/sqliteReader.js +158 -0
  38. package/dist/server/terminal/sqliteReader.js.map +1 -0
  39. package/dist/server/terminal/subagentSources.js +3 -2
  40. package/dist/server/terminal/subagentSources.js.map +1 -1
  41. package/dist/server/terminal/transcriptHistory.d.ts +34 -0
  42. package/dist/server/terminal/transcriptHistory.js +81 -36
  43. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  44. package/dist/server/terminal/transcriptStore.d.ts +64 -0
  45. package/dist/server/terminal/transcriptStore.js +779 -0
  46. package/dist/server/terminal/transcriptStore.js.map +1 -0
  47. package/dist/shared/nodeVersion.d.ts +3 -0
  48. package/dist/shared/nodeVersion.js +12 -0
  49. package/dist/shared/nodeVersion.js.map +1 -0
  50. package/dist/shared/protocol.d.ts +33 -0
  51. package/dist/shared/protocol.js.map +1 -1
  52. package/dist/shared/transcriptSearch.d.ts +2 -0
  53. package/dist/shared/transcriptSearch.js +12 -0
  54. package/dist/shared/transcriptSearch.js.map +1 -0
  55. package/dist/src/shared/nodeVersion.js +12 -0
  56. package/dist/src/shared/nodeVersion.js.map +1 -0
  57. package/docs/terminal-history.md +22 -4
  58. package/package.json +2 -2
  59. package/scripts/nterminalctl +8 -4
  60. package/dist/client/assets/MarkdownPreview-CzA5ZyZ3.js +0 -1
  61. package/dist/client/assets/TranscriptMarkdownBody-Cu7KK3bx.js +0 -3
  62. package/dist/client/assets/index-wiyTLXQg.js +0 -56
@@ -1,17 +1,23 @@
1
- import { access, readFile, readdir, readlink, realpath } from 'node:fs/promises';
1
+ import { access, open, readFile, readdir, readlink, realpath, stat } from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { isSessionId, sessionIdPatternSource } from './sessionId.js';
5
5
  import { readProcessStartedAtSecondsAsync } from './procfs.js';
6
6
  import { TtlCache } from './ttlCache.js';
7
7
  import { KeyedSingleFlight, mapWithConcurrency, runCommand } from './asyncCommand.js';
8
+ import { readSqlite } from './sqliteReader.js';
9
+ export const TRANSCRIPT_CANDIDATE_LIMIT = 50;
10
+ const ABSENT = { status: 'absent' };
11
+ const UNAVAILABLE = { status: 'unavailable' };
12
+ const PENDING = { status: 'pending' };
13
+ const AMBIGUOUS = { status: 'ambiguous' };
8
14
  const PROCESS_START_SKEW_SECONDS = 2;
9
15
  // Codex >= 0.157 TUIs hand the conversation to a shared app-server daemon
10
16
  // that listens on /tmp/codex-daemon-<uid>/<hash>; the daemon, not the TUI,
11
17
  // owns the rollout fd and tags the thread's log rows with its own pid.
12
18
  const CODEX_DAEMON_SOCKET_DIR_PREFIX = 'codex-daemon-';
13
19
  const SOCKET_FD_TARGET_PATTERN = /^socket:\[(\d+)\]$/;
14
- const LOOKUP_CACHE_SUCCESS_TTL_MS = 30_000;
20
+ const LOOKUP_CACHE_SUCCESS_TTL_MS = 3_000;
15
21
  // Must exceed the client's steady transcript-source poll cadence (15s in
16
22
  // XtermPane); a shorter negative TTL guarantees every poll misses the cache
17
23
  // and re-runs the sqlite lookup.
@@ -25,6 +31,10 @@ const processLogLookupCache = new TtlCache();
25
31
  const processLogLookupInflight = new KeyedSingleFlight();
26
32
  const daemonLookupCache = new TtlCache();
27
33
  const daemonLookupInflight = new KeyedSingleFlight();
34
+ function lookupTtl(result) {
35
+ return result.status === 'absent' || result.status === 'unavailable'
36
+ ? LOOKUP_CACHE_FAILURE_TTL_MS : LOOKUP_CACHE_SUCCESS_TTL_MS;
37
+ }
28
38
  export function clearCodexTranscriptLookupCache() {
29
39
  processLogLookupCache.clear();
30
40
  processLogLookupInflight.clear();
@@ -32,16 +42,11 @@ export function clearCodexTranscriptLookupCache() {
32
42
  daemonLookupInflight.clear();
33
43
  }
34
44
  export async function resolveCodexTranscriptFromOpenFds(pid, options = {}) {
35
- if (!Number.isInteger(pid) || pid <= 0)
36
- return null;
37
- const openRollouts = await listOpenCodexRollouts(options.procRoot ?? '/proc', pid);
38
- if (openRollouts.size !== 1)
39
- return null;
40
- const [sessionId, filePath] = [...openRollouts.entries()][0];
41
- return { provider: 'codex', sessionId, filePath };
45
+ const result = await lookupCodexTranscriptFromOpenFds(pid, options);
46
+ return result.status === 'matched' ? result.source : null;
42
47
  }
43
- // Rollouts `pid` holds open for writing, keyed by session id. Deleted and
44
- // missing targets are dropped so callers only ever see readable files.
48
+ // Rollouts `pid` holds open for writing, keyed by session id. Unlinked FDs
49
+ // are ignored; other missing targets remain evidence against uniqueness.
45
50
  async function listOpenCodexRollouts(procRoot, pid) {
46
51
  const fdDir = path.join(procRoot, String(pid), 'fd');
47
52
  let fdNames;
@@ -59,7 +64,6 @@ async function listOpenCodexRollouts(procRoot, pid) {
59
64
  const match = CODEX_ROLLOUT_FILE_PATTERN.exec(path.basename(target));
60
65
  if (!match || !(await isFdOpenForWritingAsync(procRoot, pid, fdName)))
61
66
  return null;
62
- await access(target);
63
67
  return { sessionId: match[1], filePath: target };
64
68
  }
65
69
  catch {
@@ -94,8 +98,12 @@ function fdFlagsAllowWriting(raw) {
94
98
  return accessMode === 0o1 || accessMode === 0o2;
95
99
  }
96
100
  export async function resolveCodexTranscriptFromProcessLogs(pid, options = {}) {
101
+ const result = await lookupCodexTranscriptFromProcessLogs(pid, options);
102
+ return result.status === 'matched' ? result.source : null;
103
+ }
104
+ export async function lookupCodexTranscriptFromProcessLogs(pid, options = {}) {
97
105
  if (!Number.isInteger(pid) || pid <= 0)
98
- return null;
106
+ return UNAVAILABLE;
99
107
  const homeDir = options.homeDir ?? os.homedir();
100
108
  const logsDb = path.join(homeDir, '.codex', 'logs_2.sqlite');
101
109
  const stateDb = path.join(homeDir, '.codex', 'state_5.sqlite');
@@ -103,82 +111,99 @@ export async function resolveCodexTranscriptFromProcessLogs(pid, options = {}) {
103
111
  await Promise.all([access(logsDb), access(stateDb)]);
104
112
  }
105
113
  catch {
106
- return null;
114
+ return UNAVAILABLE;
107
115
  }
108
116
  const processStartedAtSeconds = options.processStartedAtSeconds !== undefined
109
117
  ? options.processStartedAtSeconds
110
118
  : await readProcessStartedAtSecondsAsync(pid);
111
119
  if (processStartedAtSeconds === null)
112
- return null;
120
+ return UNAVAILABLE;
113
121
  const cacheKey = `${logsDb}:${pid}:${processStartedAtSeconds}`;
122
+ if (options.bypassCache) {
123
+ return lookupCodexTranscriptInProcessLogs(pid, logsDb, stateDb, processStartedAtSeconds, options.runSqlite);
124
+ }
114
125
  const cached = processLogLookupCache.get(cacheKey);
115
126
  if (cached)
116
127
  return cached.value;
117
128
  return processLogLookupInflight.run(cacheKey, async () => {
118
129
  const source = await lookupCodexTranscriptInProcessLogs(pid, logsDb, stateDb, processStartedAtSeconds, options.runSqlite);
119
- processLogLookupCache.set(cacheKey, source, source ? LOOKUP_CACHE_SUCCESS_TTL_MS : LOOKUP_CACHE_FAILURE_TTL_MS);
130
+ processLogLookupCache.set(cacheKey, source, lookupTtl(source));
120
131
  return source;
121
132
  });
122
133
  }
123
134
  async function lookupCodexTranscriptInProcessLogs(pid, logsDb, stateDb, processStartedAtSeconds, runSqliteOverride) {
124
135
  const output = await runProcessLogQuery(pid, logsDb, stateDb, processStartedAtSeconds, runSqliteOverride);
125
- return output === null ? null : parseProcessLogMatchesAsync(output);
136
+ return output === null ? UNAVAILABLE : parseProcessLogMatchesAsync(output);
126
137
  }
127
138
  async function parseProcessLogMatchesAsync(output) {
128
139
  const matches = new Map();
140
+ const choices = new Map();
141
+ let unresolvedLastLog = -Infinity;
129
142
  for (const line of output.split('\n')) {
130
143
  const trimmed = line.trim();
131
144
  if (!trimmed)
132
145
  continue;
133
- const [sessionId, filePath, lastTsRaw] = trimmed.split('\t');
146
+ const [sessionId, filePath, lastTsRaw, source] = trimmed.split('\t');
134
147
  if (!sessionId || !filePath || !isSessionId(sessionId) || !isCodexRolloutPath(filePath, sessionId))
135
148
  continue;
136
- try {
137
- await access(filePath);
149
+ const lastLogSeconds = Number(lastTsRaw);
150
+ const normalized = Number.isFinite(lastLogSeconds) ? lastLogSeconds : 0;
151
+ const tui = source === 'vscode' ? await isTuiRollout(filePath, sessionId) : true;
152
+ const candidate = await describeCandidate({ provider: 'codex', sessionId, filePath }, undefined, tui === null ? 'unknown' : 'verified');
153
+ if (tui !== false && (!choices.has(sessionId) || choices.get(sessionId).seconds < normalized)) {
154
+ choices.set(sessionId, { candidate, seconds: normalized });
138
155
  }
139
- catch {
156
+ if (tui !== true || !candidate.readable) {
157
+ unresolvedLastLog = Math.max(unresolvedLastLog, normalized);
140
158
  continue;
141
159
  }
142
- const lastLogSeconds = Number(lastTsRaw);
143
- const normalized = Number.isFinite(lastLogSeconds) ? lastLogSeconds : 0;
144
160
  const existing = matches.get(sessionId);
145
161
  if (!existing || existing.lastLogSeconds < normalized) {
146
162
  matches.set(sessionId, { filePath, lastLogSeconds: normalized });
147
163
  }
148
164
  }
165
+ const latest = Math.max(unresolvedLastLog, ...[...choices.values()].map(entry => entry.seconds));
166
+ const metadata = { candidates: [...choices.values()].filter(entry => entry.seconds === latest)
167
+ .slice(0, TRANSCRIPT_CANDIDATE_LIMIT).map(entry => entry.candidate) };
149
168
  if (matches.size === 0)
150
- return null;
169
+ return { ...(output.trim() ? PENDING : ABSENT), ...metadata };
151
170
  const ranked = [...matches.entries()].sort((a, b) => b[1].lastLogSeconds - a[1].lastLogSeconds);
171
+ if (ranked[0][1].lastLogSeconds <= unresolvedLastLog)
172
+ return { ...PENDING, ...metadata };
152
173
  if (ranked.length > 1 && ranked[0][1].lastLogSeconds <= ranked[1][1].lastLogSeconds)
153
- return null;
174
+ return { ...AMBIGUOUS, ...metadata };
154
175
  const [sessionId, entry] = ranked[0];
155
- return { provider: 'codex', sessionId, filePath: entry.filePath };
176
+ return { status: 'matched', source: { provider: 'codex', sessionId, filePath: entry.filePath }, ...metadata };
156
177
  }
157
178
  async function runProcessLogQuery(pid, logsDb, stateDb, processStartedAtSeconds, runSqliteOverride) {
158
179
  const minLogSeconds = Math.max(0, Math.floor(processStartedAtSeconds) - PROCESS_START_SKEW_SECONDS);
159
- const sql = processLogSql(pid, stateDb, minLogSeconds);
180
+ const sql = processLogSql(pid, minLogSeconds);
160
181
  if (runSqliteOverride) {
161
- return await runSqliteOverride(logsDb, sql);
182
+ try {
183
+ return await runSqliteOverride(logsDb, sql);
184
+ }
185
+ catch {
186
+ return null;
187
+ }
162
188
  }
163
189
  try {
164
- return (await runCommand('sqlite3', ['-batch', '-noheader', logsDb, sql], { timeoutMs: 1_000 })).stdout;
190
+ return await readSqlite(logsDb, sql, { attachments: { state: stateDb } });
165
191
  }
166
192
  catch {
167
193
  return null;
168
194
  }
169
195
  }
170
- function processLogSql(pid, stateDb, minLogSeconds) {
196
+ function processLogSql(pid, minLogSeconds) {
171
197
  return [
172
- `ATTACH DATABASE ${sqlString(stateDb)} AS state;`,
173
- 'SELECT id || char(9) || rollout_path || char(9) || last_ts FROM (',
174
- ' SELECT t.id AS id, t.rollout_path AS rollout_path, (',
198
+ 'SELECT id || char(9) || rollout_path || char(9) || last_ts || char(9) || source FROM (',
199
+ ' SELECT t.id AS id, t.rollout_path AS rollout_path, t.source AS source, (',
175
200
  ' SELECT MAX(l.ts) FROM logs l',
176
201
  ' WHERE l.thread_id = t.id',
177
202
  ` AND l.ts >= ${minLogSeconds}`,
178
203
  ` AND l.process_uuid LIKE ${sqlString(`pid:${pid}:%`)}`,
179
204
  ' ) AS last_ts',
180
205
  ' FROM state.threads t',
181
- " WHERE t.source = 'cli'",
206
+ " WHERE t.source IN ('cli', 'vscode')",
182
207
  " AND t.model_provider = 'openai'",
183
208
  ' AND t.rollout_path IS NOT NULL',
184
209
  ')',
@@ -193,35 +218,42 @@ function processLogSql(pid, stateDb, minLogSeconds) {
193
218
  // following the TUI's unix socket to the daemon and narrowing the daemon's
194
219
  // open rollouts to interactive threads started in the TUI's cwd.
195
220
  export async function resolveCodexTranscriptFromDaemon(pid, options = {}) {
221
+ const result = await lookupCodexTranscriptFromDaemon(pid, options);
222
+ return result.status === 'matched' ? result.source : null;
223
+ }
224
+ export async function lookupCodexTranscriptFromDaemon(pid, options = {}) {
196
225
  if (!Number.isInteger(pid) || pid <= 0)
197
- return null;
226
+ return UNAVAILABLE;
198
227
  const processStartedAtSeconds = options.processStartedAtSeconds !== undefined
199
228
  ? options.processStartedAtSeconds
200
229
  : await readProcessStartedAtSecondsAsync(pid);
201
230
  if (processStartedAtSeconds === null)
202
- return null;
231
+ return UNAVAILABLE;
203
232
  const procRoot = options.procRoot ?? '/proc';
204
- const cacheKey = `${procRoot}:${pid}:${processStartedAtSeconds}`;
233
+ const cacheKey = `${options.homeDir ?? os.homedir()}:${procRoot}:${pid}:${processStartedAtSeconds}`;
205
234
  const cached = daemonLookupCache.get(cacheKey);
206
235
  if (cached)
207
236
  return cached.value;
208
237
  return daemonLookupInflight.run(cacheKey, async () => {
209
238
  const source = await lookupCodexTranscriptInDaemon(pid, procRoot, options);
210
- daemonLookupCache.set(cacheKey, source, source ? LOOKUP_CACHE_SUCCESS_TTL_MS : LOOKUP_CACHE_FAILURE_TTL_MS);
239
+ daemonLookupCache.set(cacheKey, source, lookupTtl(source));
211
240
  return source;
212
241
  });
213
242
  }
214
243
  async function lookupCodexTranscriptInDaemon(pid, procRoot, options) {
215
244
  const clientInodes = await listSocketInodes(procRoot, pid);
245
+ if (clientInodes === null)
246
+ return UNAVAILABLE;
216
247
  if (clientInodes.size === 0)
217
- return null;
218
- const socketTable = await (options.readUnixSocketTable ?? readUnixSocketTable)();
248
+ return ABSENT;
249
+ const socketTable = await (options.readUnixSocketTable ?? readUnixSocketTable)().catch(() => null);
219
250
  if (socketTable === null)
220
- return null;
251
+ return UNAVAILABLE;
221
252
  const daemonInodes = daemonPeerInodes(parseUnixSocketTable(socketTable), clientInodes);
222
253
  if (daemonInodes.size === 0)
223
- return null;
254
+ return ABSENT;
224
255
  const daemonPids = await findProcessesOwningSockets(procRoot, daemonInodes);
256
+ const daemonBinding = await processBinding(procRoot, daemonPids);
225
257
  const rollouts = new Map();
226
258
  for (const daemonPid of daemonPids) {
227
259
  for (const [sessionId, filePath] of await listOpenCodexRollouts(procRoot, daemonPid)) {
@@ -229,28 +261,47 @@ async function lookupCodexTranscriptInDaemon(pid, procRoot, options) {
229
261
  }
230
262
  }
231
263
  if (rollouts.size === 0)
232
- return null;
264
+ return PENDING;
233
265
  const clientCwd = await readLinkOrNull(path.join(procRoot, String(pid), 'cwd'));
234
266
  if (clientCwd === null)
235
- return null;
236
- const threadCwds = await readInteractiveThreadCwds(path.join(options.homeDir ?? os.homedir(), '.codex', 'state_5.sqlite'), [...rollouts.keys()], options.runSqlite);
267
+ return PENDING;
268
+ const threadCwds = await readInteractiveThreadCwds(path.join(options.homeDir ?? os.homedir(), '.codex', 'state_5.sqlite'), rollouts, options.runSqlite);
237
269
  if (threadCwds === null)
238
- return null;
270
+ return PENDING;
239
271
  const clientRealCwd = await realpathOrSelf(clientCwd);
240
272
  const matching = [];
241
- for (const [sessionId, cwd] of threadCwds) {
242
- if (cwd === clientCwd || await realpathOrSelf(cwd) === clientRealCwd)
243
- matching.push(sessionId);
244
- }
245
- let chosen = matching.length === 1 ? matching[0] : null;
246
- if (chosen === null && matching.length > 1) {
247
- // Several TUIs in one cwd share the daemon: only a session id the
248
- // process was launched with can break the tie without guessing.
249
- const launchIds = new Set((await readCmdline(procRoot, pid)).filter((arg) => isSessionId(arg)));
250
- const named = matching.filter((sessionId) => launchIds.has(sessionId));
251
- chosen = named.length === 1 ? named[0] : null;
252
- }
253
- return chosen ? { provider: 'codex', sessionId: chosen, filePath: rollouts.get(chosen) } : null;
273
+ let unresolved = false;
274
+ for (const [sessionId, { cwd, verification }] of threadCwds) {
275
+ if (!cwd) {
276
+ unresolved = true;
277
+ continue;
278
+ }
279
+ if (cwd !== clientCwd && await realpathOrSelf(cwd) !== clientRealCwd)
280
+ continue;
281
+ if (matching.length === TRANSCRIPT_CANDIDATE_LIMIT) {
282
+ unresolved = true;
283
+ continue;
284
+ }
285
+ matching.push(await describeCandidate({ provider: 'codex', sessionId, filePath: rollouts.get(sessionId) }, cwd, verification));
286
+ }
287
+ // Launch args survive /new and /resume. They cannot disambiguate the
288
+ // conversations a shared daemon currently holds open in the same cwd.
289
+ if (daemonBinding !== await processBinding(procRoot, daemonPids))
290
+ return PENDING;
291
+ const metadata = {
292
+ candidates: matching.slice(0, TRANSCRIPT_CANDIDATE_LIMIT),
293
+ ...(daemonBinding ? { binding: daemonBinding } : {})
294
+ };
295
+ if (matching.length > 1)
296
+ return { ...AMBIGUOUS, ...metadata };
297
+ if (unresolved)
298
+ return { ...PENDING, ...metadata };
299
+ if (matching.length === 0)
300
+ return PENDING;
301
+ const chosen = matching[0];
302
+ if (chosen.verification !== 'verified' || !chosen.readable)
303
+ return { ...PENDING, ...metadata };
304
+ return { status: 'matched', source: { provider: chosen.provider, sessionId: chosen.sessionId, filePath: chosen.filePath }, ...metadata };
254
305
  }
255
306
  // `ss -xn` rows: Netid State Recv-Q Send-Q <local addr> <inode> <peer addr> <peer inode>.
256
307
  // The local address is the only field that can contain spaces, so the
@@ -302,7 +353,7 @@ async function listSocketInodes(procRoot, pid) {
302
353
  fdNames = await readdir(fdDir);
303
354
  }
304
355
  catch {
305
- return new Set();
356
+ return null;
306
357
  }
307
358
  const inodes = await mapWithConcurrency(fdNames, 16, async (fdName) => {
308
359
  const match = SOCKET_FD_TARGET_PATTERN.exec((await readLinkOrNull(path.join(fdDir, fdName))) ?? '');
@@ -324,7 +375,7 @@ async function findProcessesOwningSockets(procRoot, inodes) {
324
375
  const pid = Number(entry);
325
376
  if (!isCodexAppServerArgs(await readCmdline(procRoot, pid)))
326
377
  return null;
327
- for (const inode of await listSocketInodes(procRoot, pid)) {
378
+ for (const inode of (await listSocketInodes(procRoot, pid)) ?? []) {
328
379
  if (inodes.has(inode))
329
380
  return pid;
330
381
  }
@@ -336,24 +387,29 @@ function isCodexAppServerArgs(args) {
336
387
  const first = args[0];
337
388
  return first !== undefined && path.basename(first).toLowerCase() === 'codex' && args.includes('app-server');
338
389
  }
339
- async function readInteractiveThreadCwds(stateDb, sessionIds, runSqliteOverride) {
340
- const ids = sessionIds.filter((sessionId) => isSessionId(sessionId));
390
+ async function readInteractiveThreadCwds(stateDb, rollouts, runSqliteOverride) {
391
+ const ids = [...rollouts.keys()].filter((sessionId) => isSessionId(sessionId));
341
392
  if (ids.length === 0)
342
393
  return new Map();
343
- // Subagent and exec threads also live in the daemon; only interactive
344
- // (`cli`) threads can be the conversation a TUI pane shows.
394
+ // Read all requested rows so known non-interactive threads can be excluded
395
+ // without confusing them with missing metadata. Verify vscode originators.
345
396
  const sql = [
346
- "SELECT id || char(9) || cwd FROM threads WHERE source = 'cli'",
347
- `AND id IN (${ids.map(sqlString).join(', ')});`
397
+ 'SELECT id || char(9) || cwd || char(9) || source FROM threads',
398
+ `WHERE id IN (${ids.map(sqlString).join(', ')});`
348
399
  ].join('\n');
349
400
  let output;
350
401
  if (runSqliteOverride) {
351
- output = await runSqliteOverride(stateDb, sql);
402
+ try {
403
+ output = await runSqliteOverride(stateDb, sql);
404
+ }
405
+ catch {
406
+ output = null;
407
+ }
352
408
  }
353
409
  else {
354
410
  try {
355
411
  await access(stateDb);
356
- output = (await runCommand('sqlite3', ['-batch', '-noheader', stateDb, sql], { timeoutMs: 1_000 })).stdout;
412
+ output = await readSqlite(stateDb, sql);
357
413
  }
358
414
  catch {
359
415
  output = null;
@@ -362,17 +418,61 @@ async function readInteractiveThreadCwds(stateDb, sessionIds, runSqliteOverride)
362
418
  if (output === null)
363
419
  return null;
364
420
  const cwds = new Map();
421
+ for (const id of ids)
422
+ cwds.set(id, { cwd: '', verification: 'unknown' });
365
423
  for (const line of output.split('\n')) {
366
- const separator = line.indexOf('\t');
367
- if (separator === -1)
424
+ const [sessionId, cwd, source] = line.split('\t');
425
+ if (!sessionId || !isSessionId(sessionId) || !cwd || !rollouts.has(sessionId))
368
426
  continue;
369
- const sessionId = line.slice(0, separator).trim();
370
- const cwd = line.slice(separator + 1).trim();
371
- if (isSessionId(sessionId) && cwd)
372
- cwds.set(sessionId, cwd);
427
+ if (source !== 'cli' && source !== 'vscode') {
428
+ cwds.delete(sessionId);
429
+ continue;
430
+ }
431
+ const tui = source === 'vscode' ? await isTuiRollout(rollouts.get(sessionId), sessionId) : true;
432
+ if (tui === false) {
433
+ cwds.delete(sessionId);
434
+ continue;
435
+ }
436
+ cwds.set(sessionId, { cwd, verification: tui === null ? 'unknown' : 'verified' });
373
437
  }
374
438
  return cwds;
375
439
  }
440
+ async function isTuiRollout(filePath, sessionId) {
441
+ try {
442
+ const file = await open(filePath, 'r');
443
+ try {
444
+ // Only session_meta is needed; never read an entire conversation.
445
+ const buffer = Buffer.alloc(64 * 1024);
446
+ const chunks = [];
447
+ for (let offset = 0; offset < 512 * 1024;) {
448
+ const { bytesRead } = await file.read(buffer, 0, buffer.length, offset);
449
+ if (bytesRead === 0)
450
+ return null;
451
+ const newline = buffer.subarray(0, bytesRead).indexOf(10);
452
+ chunks.push(Buffer.from(buffer.subarray(0, newline === -1 ? bytesRead : newline)));
453
+ if (newline !== -1) {
454
+ const row = JSON.parse(Buffer.concat(chunks).toString('utf8'));
455
+ if (row?.type !== 'session_meta' || row.payload?.id !== sessionId)
456
+ return null;
457
+ if (row.payload.source === 'cli')
458
+ return true;
459
+ if (row.payload.source === undefined)
460
+ return null;
461
+ return row.payload.originator === 'codex-tui' &&
462
+ (row.payload.source === 'cli' || row.payload.source === 'vscode');
463
+ }
464
+ offset += bytesRead;
465
+ }
466
+ return null;
467
+ }
468
+ finally {
469
+ await file.close();
470
+ }
471
+ }
472
+ catch {
473
+ return null;
474
+ }
475
+ }
376
476
  async function readCmdline(procRoot, pid) {
377
477
  try {
378
478
  return (await readFile(path.join(procRoot, String(pid), 'cmdline'), 'utf8')).split('\0').filter(Boolean);
@@ -401,6 +501,104 @@ function isCodexRolloutPath(filePath, sessionId) {
401
501
  const base = path.basename(filePath);
402
502
  return base.startsWith('rollout-') && base.endsWith(`${sessionId}.jsonl`);
403
503
  }
504
+ async function rolloutReadable(filePath) {
505
+ try {
506
+ const file = await open(filePath, 'r');
507
+ try {
508
+ return (await file.stat()).isFile();
509
+ }
510
+ finally {
511
+ await file.close();
512
+ }
513
+ }
514
+ catch {
515
+ return false;
516
+ }
517
+ }
518
+ async function describeCandidate(source, cwd, verification = 'verified') {
519
+ const readable = await rolloutReadable(source.filePath);
520
+ let updatedAt;
521
+ try {
522
+ updatedAt = (await stat(source.filePath)).mtime.toISOString();
523
+ }
524
+ catch { /* Retain unavailable peers. */ }
525
+ return { ...source, ...(cwd ? { cwd } : {}), ...(updatedAt ? { updatedAt } : {}), verification, readable };
526
+ }
527
+ // Uses raw start ticks, avoiding clock conversion and any external command.
528
+ export async function processBinding(procRoot, pids) {
529
+ const identities = [];
530
+ for (const pid of [...new Set(pids)].sort((a, b) => a - b)) {
531
+ try {
532
+ const raw = await readFile(path.join(procRoot, String(pid), 'stat'), 'utf8');
533
+ const close = raw.lastIndexOf(')');
534
+ const ticks = close < 0 ? undefined : raw.slice(close + 2).trim().split(/\s+/)[19];
535
+ if (!ticks || !/^\d+$/.test(ticks))
536
+ return null;
537
+ identities.push(`${pid}:${ticks}`);
538
+ }
539
+ catch {
540
+ return null;
541
+ }
542
+ }
543
+ return identities.length ? identities.join(',') : null;
544
+ }
545
+ export async function lookupCodexTranscriptFromOpenFds(pid, options = {}) {
546
+ if (!Number.isInteger(pid) || pid <= 0)
547
+ return UNAVAILABLE;
548
+ const procRoot = options.procRoot ?? '/proc';
549
+ const opened = await listOpenCodexRollouts(procRoot, pid);
550
+ // A parent holds its subagents' rollouts too. Exclude only records whose
551
+ // metadata identifies a non-interactive source; unknown peers stay ambiguous.
552
+ const classified = await mapWithConcurrency([...opened.entries()], 8, async ([sessionId, filePath]) => ({
553
+ sessionId, filePath, tui: await isTuiRollout(filePath, sessionId)
554
+ }));
555
+ const rollouts = classified.filter(entry => entry.tui !== false);
556
+ if (rollouts.length === 0)
557
+ return ABSENT;
558
+ const cwd = await readLinkOrNull(path.join(procRoot, String(pid), 'cwd'));
559
+ const candidates = await mapWithConcurrency(rollouts.slice(0, TRANSCRIPT_CANDIDATE_LIMIT), 8, ({ sessionId, filePath, tui }) => describeCandidate({ provider: 'codex', sessionId, filePath }, cwd ?? undefined, tui === null ? 'unknown' : 'verified'));
560
+ if (rollouts.length > 1)
561
+ return { ...AMBIGUOUS, candidates };
562
+ const source = candidates[0];
563
+ return source.readable ? { status: 'matched', source, candidates } : { ...PENDING, candidates };
564
+ }
565
+ // Pre-connection failure is not evidence against the independent PID log.
566
+ // Post-connection failures are PENDING and must never reach launch argv.
567
+ export async function lookupCodexTranscriptFromDaemonOrLogs(pid, options = {}) {
568
+ const daemon = await lookupCodexTranscriptFromDaemon(pid, options);
569
+ return daemon.status === 'absent' || daemon.status === 'unavailable'
570
+ ? lookupCodexTranscriptFromProcessLogs(pid, options) : daemon;
571
+ }
572
+ export async function resolveCodexTranscriptCandidates(pid, options = {}) {
573
+ const empty = { binding: '', candidates: [] };
574
+ if (!Number.isInteger(pid) || pid <= 0)
575
+ return empty;
576
+ const procRoot = options.procRoot ?? '/proc';
577
+ const binding = await processBinding(procRoot, [pid]);
578
+ if (!binding)
579
+ return empty;
580
+ const cwd = await readLinkOrNull(path.join(procRoot, String(pid), 'cwd'));
581
+ let result = await lookupCodexTranscriptFromOpenFds(pid, options);
582
+ if (result.status === 'absent') {
583
+ // Selection requests always inspect current sockets/FDs, not the TTL cache.
584
+ result = await lookupCodexTranscriptInDaemon(pid, procRoot, options);
585
+ if (result.status === 'absent' || result.status === 'unavailable') {
586
+ result = await lookupCodexTranscriptFromProcessLogs(pid, { ...options, bypassCache: true });
587
+ }
588
+ else if (!result.binding) {
589
+ return { binding, candidates: [] };
590
+ }
591
+ }
592
+ const candidates = result.candidates ?? (result.status === 'matched'
593
+ ? [await describeCandidate(result.source, cwd ?? undefined)] : []);
594
+ if (binding !== await processBinding(procRoot, [pid]) ||
595
+ cwd !== await readLinkOrNull(path.join(procRoot, String(pid), 'cwd')))
596
+ return empty;
597
+ return {
598
+ binding: `${binding}${result.binding ? `|daemon:${result.binding}` : ''}`,
599
+ candidates: candidates.map(candidate => ({ ...candidate, ...(!candidate.cwd && cwd ? { cwd } : {}) }))
600
+ };
601
+ }
404
602
  export function sqlString(value) {
405
603
  return `'${value.replace(/'/g, "''")}'`;
406
604
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codexTranscriptSource.js","sourceRoot":"","sources":["../../../src/server/terminal/codexTranscriptSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexTranscriptSource.js","sourceRoot":"","sources":["../../../src/server/terminal/codexTranscriptSource.ts"],"names":[],"mappings":"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"}