nterminal 1.3.4 → 1.3.5

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 (113) hide show
  1. package/bin/nterminal.js +8 -3
  2. package/dist/client/assets/MarkdownPreview-BIrwUAaa.js +1 -0
  3. package/dist/client/assets/{TranscriptMarkdownBody-H8ZsISc6.js → TranscriptMarkdownBody-CI0ztvMX.js} +1 -1
  4. package/dist/client/assets/{index-DxfBq-4P.js → index-EN8ngMgv.js} +1 -1
  5. package/dist/client/assets/index-JQJ1Eet1.js +58 -0
  6. package/dist/client/assets/index-xkL4h3qt.css +1 -0
  7. package/dist/client/index.html +2 -2
  8. package/dist/scripts/hooks.js +83 -0
  9. package/dist/scripts/hooks.js.map +1 -0
  10. package/dist/server/accounts/accountService.d.ts +23 -1
  11. package/dist/server/accounts/accountService.js +235 -103
  12. package/dist/server/accounts/accountService.js.map +1 -1
  13. package/dist/server/accounts/providerRequests.d.ts +12 -0
  14. package/dist/server/accounts/providerRequests.js +159 -0
  15. package/dist/server/accounts/providerRequests.js.map +1 -0
  16. package/dist/server/agent/agentRoutes.js +11 -0
  17. package/dist/server/agent/agentRoutes.js.map +1 -1
  18. package/dist/server/hooks/helperJournal.d.ts +16 -0
  19. package/dist/server/hooks/helperJournal.js +74 -0
  20. package/dist/server/hooks/helperJournal.js.map +1 -0
  21. package/dist/server/hooks/hookBinding.d.ts +39 -0
  22. package/dist/server/hooks/hookBinding.js +91 -0
  23. package/dist/server/hooks/hookBinding.js.map +1 -0
  24. package/dist/server/hooks/hookFiles.d.ts +24 -0
  25. package/dist/server/hooks/hookFiles.js +160 -0
  26. package/dist/server/hooks/hookFiles.js.map +1 -0
  27. package/dist/server/hooks/hookInstallation.d.ts +79 -0
  28. package/dist/server/hooks/hookInstallation.js +978 -0
  29. package/dist/server/hooks/hookInstallation.js.map +1 -0
  30. package/dist/server/hooks/hookProcess.d.ts +5 -0
  31. package/dist/server/hooks/hookProcess.js +85 -0
  32. package/dist/server/hooks/hookProcess.js.map +1 -0
  33. package/dist/server/hooks/hookReceiver.d.ts +66 -0
  34. package/dist/server/hooks/hookReceiver.js +549 -0
  35. package/dist/server/hooks/hookReceiver.js.map +1 -0
  36. package/dist/server/hooks/lifecycle.d.ts +40 -0
  37. package/dist/server/hooks/lifecycle.js +200 -0
  38. package/dist/server/hooks/lifecycle.js.map +1 -0
  39. package/dist/server/hooks/publicationLock.d.ts +3 -0
  40. package/dist/server/hooks/publicationLock.js +137 -0
  41. package/dist/server/hooks/publicationLock.js.map +1 -0
  42. package/dist/server/hooks/verifiedLock.d.ts +24 -0
  43. package/dist/server/hooks/verifiedLock.js +207 -0
  44. package/dist/server/hooks/verifiedLock.js.map +1 -0
  45. package/dist/server/http.d.ts +4 -0
  46. package/dist/server/http.js +6 -0
  47. package/dist/server/http.js.map +1 -1
  48. package/dist/server/index.js +69 -2
  49. package/dist/server/index.js.map +1 -1
  50. package/dist/server/notifications/agentCompletionMonitor.d.ts +16 -1
  51. package/dist/server/notifications/agentCompletionMonitor.js +261 -47
  52. package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
  53. package/dist/server/notifications/completionNotificationRouter.d.ts +2 -0
  54. package/dist/server/notifications/completionNotificationRouter.js +9 -0
  55. package/dist/server/notifications/completionNotificationRouter.js.map +1 -1
  56. package/dist/server/routes/accountRoutes.js +11 -0
  57. package/dist/server/routes/accountRoutes.js.map +1 -1
  58. package/dist/server/routes/activityRoutes.d.ts +13 -0
  59. package/dist/server/routes/activityRoutes.js +165 -0
  60. package/dist/server/routes/activityRoutes.js.map +1 -0
  61. package/dist/server/routes/agentManagementRoutes.js +8 -1
  62. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  63. package/dist/server/routes/hookRoutes.d.ts +16 -0
  64. package/dist/server/routes/hookRoutes.js +77 -0
  65. package/dist/server/routes/hookRoutes.js.map +1 -0
  66. package/dist/server/routes/terminalRoutes.js +4 -0
  67. package/dist/server/routes/terminalRoutes.js.map +1 -1
  68. package/dist/server/routes/transcriptQuery.d.ts +2 -1
  69. package/dist/server/routes/transcriptQuery.js +3 -1
  70. package/dist/server/routes/transcriptQuery.js.map +1 -1
  71. package/dist/server/terminal/PtyAdapter.d.ts +18 -0
  72. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  73. package/dist/server/terminal/TerminalManager.d.ts +61 -0
  74. package/dist/server/terminal/TerminalManager.js +665 -12
  75. package/dist/server/terminal/TerminalManager.js.map +1 -1
  76. package/dist/server/terminal/TmuxPtyAdapter.d.ts +14 -2
  77. package/dist/server/terminal/TmuxPtyAdapter.js +99 -15
  78. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  79. package/dist/server/terminal/activityChannel.d.ts +57 -0
  80. package/dist/server/terminal/activityChannel.js +166 -0
  81. package/dist/server/terminal/activityChannel.js.map +1 -0
  82. package/dist/server/terminal/agentTranscriptStatus.d.ts +12 -0
  83. package/dist/server/terminal/agentTranscriptStatus.js +78 -7
  84. package/dist/server/terminal/agentTranscriptStatus.js.map +1 -1
  85. package/dist/server/terminal/codexTranscriptSource.d.ts +2 -0
  86. package/dist/server/terminal/codexTranscriptSource.js +41 -37
  87. package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
  88. package/dist/server/terminal/subagentSources.js +2 -1
  89. package/dist/server/terminal/subagentSources.js.map +1 -1
  90. package/dist/server/terminal/transcriptHeader.d.ts +85 -0
  91. package/dist/server/terminal/transcriptHeader.js +376 -0
  92. package/dist/server/terminal/transcriptHeader.js.map +1 -0
  93. package/dist/server/terminal/transcriptHistory.d.ts +16 -2
  94. package/dist/server/terminal/transcriptHistory.js +120 -21
  95. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  96. package/dist/server/terminal/transcriptStore.d.ts +6 -0
  97. package/dist/server/terminal/transcriptStore.js +222 -26
  98. package/dist/server/terminal/transcriptStore.js.map +1 -1
  99. package/dist/shared/activityProbe.d.ts +10 -0
  100. package/dist/shared/activityProbe.js +24 -0
  101. package/dist/shared/activityProbe.js.map +1 -0
  102. package/dist/shared/protocol.d.ts +45 -0
  103. package/dist/shared/protocol.js.map +1 -1
  104. package/dist/shared/types.d.ts +9 -1
  105. package/docs/features.md +10 -0
  106. package/docs/provider-hooks.md +287 -0
  107. package/docs/terminal-history.md +10 -0
  108. package/package.json +2 -1
  109. package/scripts/nterminal-hook.cjs +171 -0
  110. package/scripts/nterminalctl +26 -2
  111. package/dist/client/assets/MarkdownPreview-DjDO4lEl.js +0 -1
  112. package/dist/client/assets/index-CIYazAGv.css +0 -1
  113. package/dist/client/assets/index-DwvLN_WJ.js +0 -56
@@ -0,0 +1,166 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ export const activityMaxMessageBytes = 1024 * 1024;
3
+ export const activityMaxTerminals = 2048;
4
+ const maxRemoteSources = 100;
5
+ const maxJournalFrames = 256;
6
+ const maxJournalBytes = 4 * activityMaxMessageBytes;
7
+ const maxJournalAgeMs = 24 * 60 * 60 * 1000;
8
+ export class TerminalActivityChannel {
9
+ source;
10
+ listeners = new Set();
11
+ remote = new Map();
12
+ unsubscribe;
13
+ epoch = randomUUID();
14
+ sequence = 0;
15
+ journal = [];
16
+ journalBytes = 0;
17
+ constructor(source) {
18
+ this.source = source;
19
+ this.unsubscribe = source.subscribeActivity(terminal => this.emit({
20
+ type: 'activity', version: 1, agentId: null, initial: false, terminals: [terminal]
21
+ }));
22
+ }
23
+ /** Pass this method through the monitor's onActivity callback. */
24
+ publish(agentId, terminals, initial) {
25
+ if (!this.remote.has(agentId) && this.remote.size >= maxRemoteSources)
26
+ throw new Error('activity source limit');
27
+ const next = new Map(initial ? [] : this.remote.get(agentId));
28
+ for (const terminal of terminals) {
29
+ // Exit deltas remain replayable without accumulating in retained snapshots.
30
+ if (!initial && terminal.status === 'exited')
31
+ next.delete(terminal.id);
32
+ else
33
+ next.set(terminal.id, terminal);
34
+ }
35
+ // Bound retained snapshots as well as individual delta frames.
36
+ encodeActivityMessage({ type: 'activity', version: 1, agentId, initial: true, terminals: [...next.values()] });
37
+ this.remote.set(agentId, next);
38
+ this.emit({ type: 'activity', version: 1, agentId, initial, terminals });
39
+ }
40
+ removeAgent(agentId) {
41
+ // Forget configuration metadata without inventing an empty remote snapshot.
42
+ this.remote.delete(agentId);
43
+ for (let index = this.journal.length - 1; index >= 0; index--) {
44
+ if (this.journal[index].message.agentId === agentId) {
45
+ this.journalBytes -= this.journal[index].bytes;
46
+ this.journal.splice(index, 1);
47
+ }
48
+ }
49
+ }
50
+ snapshots(localOnly = false) {
51
+ const local = {
52
+ type: 'activity', version: 1, agentId: null, initial: true, terminals: this.source.listTerminals()
53
+ };
54
+ return [local, ...(localOnly ? [] : [...this.remote].map(([agentId, terminals]) => ({
55
+ type: 'activity', version: 1, agentId, initial: true, terminals: [...terminals.values()]
56
+ })))];
57
+ }
58
+ get cursor() { return `${this.epoch}:${this.sequence}`; }
59
+ replay(cursor, localOnly = false) {
60
+ this.pruneJournal();
61
+ const [epoch, rawSequence] = cursor.split(':');
62
+ const sequence = Number(rawSequence);
63
+ if (epoch !== this.epoch || !/^\d+$/.test(rawSequence ?? '') || !Number.isSafeInteger(sequence)
64
+ || sequence > this.sequence || sequence < (this.journal[0]?.sequence ?? this.sequence + 1) - 1)
65
+ return null;
66
+ return this.journal.filter(entry => entry.sequence > sequence && (!localOnly || entry.message.agentId === null))
67
+ .map(entry => entry.message);
68
+ }
69
+ subscribe(listener, localOnly = false) {
70
+ const filtered = (message) => {
71
+ if (!localOnly || message.agentId === null)
72
+ listener(message);
73
+ };
74
+ this.listeners.add(filtered);
75
+ return () => { this.listeners.delete(filtered); };
76
+ }
77
+ dispose() {
78
+ this.unsubscribe();
79
+ this.listeners.clear();
80
+ this.remote.clear();
81
+ this.journal.length = 0;
82
+ this.journalBytes = 0;
83
+ }
84
+ emit(message) {
85
+ this.sequence++;
86
+ message = { ...message, cursor: this.cursor };
87
+ try {
88
+ const data = encodeActivityMessage(message);
89
+ message = JSON.parse(data);
90
+ const bytes = Buffer.byteLength(data);
91
+ this.journal.push({ sequence: this.sequence, message, bytes, at: Date.now() });
92
+ this.journalBytes += bytes;
93
+ this.pruneJournal();
94
+ }
95
+ catch {
96
+ // An unsendable event creates a gap; never replay across missing metadata.
97
+ this.journal.length = 0;
98
+ this.journalBytes = 0;
99
+ }
100
+ for (const listener of this.listeners) {
101
+ try {
102
+ listener(message);
103
+ }
104
+ catch { /* Isolate transports from terminal lifecycle delivery. */ }
105
+ }
106
+ }
107
+ pruneJournal() {
108
+ const cutoff = Date.now() - maxJournalAgeMs;
109
+ while (this.journal.length && (this.journal.length > maxJournalFrames || this.journalBytes > maxJournalBytes
110
+ || this.journal[0].at < cutoff))
111
+ this.journalBytes -= this.journal.shift().bytes;
112
+ }
113
+ }
114
+ export function parseActivityMessage(value) {
115
+ if (!value || typeof value !== 'object')
116
+ return null;
117
+ const message = value;
118
+ if (message.type !== 'activity' || message.version !== 1 || typeof message.initial !== 'boolean'
119
+ || !(message.agentId === null || validId(message.agentId))
120
+ || (message.cursor !== undefined && !validActivityCursor(message.cursor))
121
+ || !Array.isArray(message.terminals) || message.terminals.length > activityMaxTerminals
122
+ || !message.terminals.every(validActivityTerminal))
123
+ return null;
124
+ return message;
125
+ }
126
+ export function validActivityCursor(value) {
127
+ return typeof value === 'string' && value.length <= 128 && /^[a-f0-9-]+:\d+$/.test(value);
128
+ }
129
+ export function parseActivityFrame(value) {
130
+ if (value && typeof value === 'object' && value.type === 'activity.ready') {
131
+ const ready = value;
132
+ return ready.version === 1 && validActivityCursor(ready.cursor) && ['snapshot', 'resume', 'gap'].includes(ready.mode) ? ready : null;
133
+ }
134
+ return parseActivityMessage(value);
135
+ }
136
+ export function validActivityTerminal(value) {
137
+ if (!value || typeof value !== 'object')
138
+ return false;
139
+ const terminal = value;
140
+ if (!validId(terminal.id) || typeof terminal.title !== 'string' || typeof terminal.cwd !== 'string'
141
+ || !['running', 'exited'].includes(terminal.status))
142
+ return false;
143
+ const status = terminal.agentStatus;
144
+ if (!status)
145
+ return true;
146
+ if (!['codex', 'claude'].includes(status.provider) || !['working', 'finishing', 'waiting', 'done', 'stopped', 'idle', 'unknown'].includes(status.state)
147
+ || (status.epoch !== undefined && !validId(status.epoch))
148
+ || (status.revision !== undefined && (!Number.isSafeInteger(status.revision) || status.revision < 0)))
149
+ return false;
150
+ const completion = status.completion;
151
+ return completion === undefined || (completion !== null && validId(completion.id)
152
+ && ['finished', 'stopped'].includes(completion.outcome) && typeof completion.occurredAt === 'string'
153
+ && completion.occurredAt.length <= 128 && Number.isFinite(Date.parse(completion.occurredAt)));
154
+ }
155
+ function validId(value) {
156
+ return typeof value === 'string' && value.length > 0 && value.length <= 256;
157
+ }
158
+ export function encodeActivityMessage(message) {
159
+ if (!parseActivityFrame(message))
160
+ throw new Error('invalid activity message');
161
+ const data = JSON.stringify(message);
162
+ if (Buffer.byteLength(data) > activityMaxMessageBytes)
163
+ throw new Error('activity message too large');
164
+ return data;
165
+ }
166
+ //# sourceMappingURL=activityChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activityChannel.js","sourceRoot":"","sources":["../../../src/server/terminal/activityChannel.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,21 @@ type AgentCache = NonNullable<TerminalSummary['agentCache']>;
5
5
  export interface AgentTranscriptSnapshot {
6
6
  status: AgentStatus;
7
7
  cache: AgentCache | null;
8
+ completion?: AgentTranscriptCompletion;
9
+ }
10
+ /** Observed turn-end evidence, not a successful task/goal outcome. */
11
+ export interface AgentTranscriptCompletion {
12
+ id: string;
13
+ occurredAt: string;
14
+ kind: 'turn_complete' | 'turn_aborted';
15
+ pending: boolean;
16
+ promptId?: string;
17
+ turnId?: string;
8
18
  }
9
19
  export declare function readAgentTranscriptStatus(source: PtyTranscriptSource): AgentStatus;
10
20
  export declare function readAgentTranscriptSnapshot(source: PtyTranscriptSource): AgentTranscriptSnapshot;
21
+ /** Bounded hook reconciliation read; never advances the incremental tracker. */
22
+ export declare function readAgentTranscriptConfirmation(source: PtyTranscriptSource): Promise<AgentTranscriptCompletion | undefined>;
11
23
  export declare class AgentTranscriptTracker {
12
24
  private readonly tracked;
13
25
  readStatus(terminalId: string, source: PtyTranscriptSource): Promise<AgentStatus>;
@@ -2,6 +2,7 @@ import { closeSync, fstatSync, openSync, readSync, statSync } from 'node:fs';
2
2
  import { open as openFile, stat as statFile } from 'node:fs/promises';
3
3
  import { StringDecoder } from 'node:string_decoder';
4
4
  const TRANSCRIPT_TAIL_BYTES = 512 * 1024;
5
+ const CONFIRMATION_TAIL_BYTES = 128 * 1024;
5
6
  // Bound work per terminal/poll without skipping bytes. Large
6
7
  // tool results are consumed over subsequent polls so lifecycle markers are
7
8
  // never discarded merely because the JSONL grew quickly.
@@ -30,6 +31,14 @@ export function readAgentTranscriptStatus(source) {
30
31
  export function readAgentTranscriptSnapshot(source) {
31
32
  return inspectTranscriptTail(source);
32
33
  }
34
+ /** Bounded hook reconciliation read; never advances the incremental tracker. */
35
+ export async function readAgentTranscriptConfirmation(source) {
36
+ const tail = await readTailAsync(source.filePath, undefined, CONFIRMATION_TAIL_BYTES);
37
+ if (tail.remainder.trim() || tail.leadingFragmentContinues)
38
+ return;
39
+ // Only complete structured rows can establish ownership and completion.
40
+ return inspectLines(source, { status: createAgentStatus(source, 'unknown'), cache: null }, tail.lines).completion;
41
+ }
33
42
  export class AgentTranscriptTracker {
34
43
  tracked = new Map();
35
44
  async readStatus(terminalId, source) {
@@ -81,6 +90,8 @@ export class AgentTranscriptTracker {
81
90
  snapshot = inspectOversizedLineMetadata(source, snapshot, '', tail.leadingFragment, true);
82
91
  }
83
92
  snapshot = inspectLines(source, snapshot, tail.lines);
93
+ if (tail.remainder.trim() || tail.leadingFragmentContinues)
94
+ snapshot = withoutCompletion(snapshot);
84
95
  this.tracked.set(terminalId, {
85
96
  identity: sourceIdentity(source),
86
97
  dev: stat.dev,
@@ -106,7 +117,8 @@ function inspectTranscriptTail(source) {
106
117
  if (tail.leadingFragment && !tail.leadingFragmentContinues) {
107
118
  snapshot = inspectOversizedLineMetadata(source, snapshot, '', tail.leadingFragment, true);
108
119
  }
109
- return inspectLines(source, snapshot, tail.lines);
120
+ snapshot = inspectLines(source, snapshot, tail.lines);
121
+ return tail.remainder.trim() || tail.leadingFragmentContinues ? withoutCompletion(snapshot) : snapshot;
110
122
  }
111
123
  function inspectLines(source, current, lines) {
112
124
  if (source.provider === 'codex') {
@@ -153,7 +165,8 @@ function consumeAppendedText(source, tracked, appendedText) {
153
165
  tracked.remainderBytes = 0;
154
166
  cursor = newline + 1;
155
167
  }
156
- return completeLines.length > 0 ? inspectLines(source, tracked.snapshot, completeLines) : tracked.snapshot;
168
+ const snapshot = completeLines.length > 0 ? inspectLines(source, tracked.snapshot, completeLines) : tracked.snapshot;
169
+ return tracked.remainder.trim() || tracked.oversizedLine ? withoutCompletion(snapshot) : snapshot;
157
170
  }
158
171
  function createOversizedLine(initial, fragment) {
159
172
  return {
@@ -186,6 +199,9 @@ function joinSuffix(initial, fragment) {
186
199
  return initial.slice(-(OVERSIZED_LINE_SUFFIX_CHARS - fragment.length)) + fragment;
187
200
  }
188
201
  function inspectOversizedLineMetadata(source, current, prefix, suffix, allowMissingType) {
202
+ // A bounded fragment cannot establish top-level ownership or completion.
203
+ // It may contain newer activity, so never carry old completion through it.
204
+ current = withoutCompletion(current);
189
205
  const recordType = readJsonStringProperty(prefix, 'type');
190
206
  if (source.provider === 'claude') {
191
207
  if (recordType === 'user') {
@@ -229,6 +245,7 @@ function readLastJsonStringProperty(text, property) {
229
245
  function inspectCodexLines(source, lines, current) {
230
246
  let state = current.status.state;
231
247
  let cache = current.cache;
248
+ let completion = current.completion;
232
249
  for (const line of lines) {
233
250
  const value = parseJsonLine(line);
234
251
  if (!value) {
@@ -243,14 +260,22 @@ function inspectCodexLines(source, lines, current) {
243
260
  // turn; a later task_complete/turn_aborted marker still wins below.
244
261
  if (value.type === 'response_item' || value.type === 'turn_context') {
245
262
  state = 'working';
263
+ completion = undefined;
246
264
  }
247
265
  if (value.type === 'event_msg') {
248
266
  const payload = isJsonObject(value.payload) ? value.payload : null;
249
267
  const payloadType = payload?.type;
268
+ if (payloadType === 'task_complete' || payloadType === 'task_completed' || payloadType === 'turn_aborted') {
269
+ completion = readCompletion(source, value, payloadType === 'turn_aborted' ? 'turn_aborted' : 'turn_complete', false, payload?.turn_id);
270
+ }
271
+ else if (payloadType === 'task_started' || payloadType === 'user_message' ||
272
+ payloadType === 'agent_message' || payloadType === 'agent_reasoning') {
273
+ completion = undefined;
274
+ }
250
275
  if (payloadType === 'task_started') {
251
276
  state = 'working';
252
277
  }
253
- else if (payloadType === 'task_complete') {
278
+ else if (payloadType === 'task_complete' || payloadType === 'task_completed') {
254
279
  state = 'done';
255
280
  }
256
281
  else if (payloadType === 'turn_aborted') {
@@ -258,11 +283,12 @@ function inspectCodexLines(source, lines, current) {
258
283
  }
259
284
  }
260
285
  }
261
- return { status: createAgentStatus(source, state), cache };
286
+ return { status: createAgentStatus(source, state), cache, ...(completion ? { completion } : {}) };
262
287
  }
263
288
  function inspectClaudeLines(source, lines, current) {
264
289
  let state = current.status.state;
265
290
  let cache = current.cache;
291
+ let completion = current.completion;
266
292
  for (const line of lines) {
267
293
  const value = parseJsonLine(line);
268
294
  if (!value) {
@@ -272,6 +298,17 @@ function inspectClaudeLines(source, lines, current) {
272
298
  if (nextCache) {
273
299
  cache = nextCache;
274
300
  }
301
+ const foreign = value.isSidechain === true || value.agentId !== undefined ||
302
+ (value.sessionId !== undefined && value.sessionId !== source.sessionId);
303
+ if (!foreign) {
304
+ if (value.type === 'system' && value.subtype === 'turn_duration') {
305
+ completion = readClaudeCompletion(source, value);
306
+ }
307
+ else if (value.type === 'user' || value.type === 'assistant') {
308
+ // Even text-only assistant continuation invalidates prior evidence.
309
+ completion = undefined;
310
+ }
311
+ }
275
312
  // Claude writes both operator prompts and tool results as user rows.
276
313
  // Either means the current agent turn is active; the following assistant
277
314
  // stop reason determines its terminal outcome.
@@ -295,7 +332,41 @@ function inspectClaudeLines(source, lines, current) {
295
332
  }
296
333
  }
297
334
  }
298
- return { status: createAgentStatus(source, state), cache };
335
+ return { status: createAgentStatus(source, state), cache, ...(completion ? { completion } : {}) };
336
+ }
337
+ function withoutCompletion(snapshot) {
338
+ if (!snapshot.completion)
339
+ return snapshot;
340
+ const { completion, ...rest } = snapshot;
341
+ return rest;
342
+ }
343
+ function readClaudeCompletion(source, record) {
344
+ // Claude 2.1.283's tot()/insertMessageChain(): JSONL uses camel-case
345
+ // counts and an explicit main-session envelope, unlike stream-json frames.
346
+ if (record.sessionId !== source.sessionId || record.isSidechain !== false || record.agentId !== undefined ||
347
+ typeof record.durationMs !== 'number' || !Number.isSafeInteger(record.durationMs) || record.durationMs < 0)
348
+ return;
349
+ const counts = [record.pendingBackgroundAgentCount, record.pendingWorkflowCount];
350
+ if (counts.some(count => count !== undefined && (typeof count !== 'number' || !Number.isSafeInteger(count) || count < 0)))
351
+ return;
352
+ return readCompletion(source, record, 'turn_complete', counts.some(count => typeof count === 'number' && count > 0));
353
+ }
354
+ function readCompletion(source, record, kind, pending, turnId) {
355
+ const occurredAt = readString(record.timestamp);
356
+ if (!occurredAt || occurredAt.length > 128 || !parseTranscriptTimestamp(occurredAt))
357
+ return;
358
+ const uuid = record.uuid;
359
+ const promptId = record.promptId;
360
+ for (const id of [uuid, promptId, turnId]) {
361
+ if (id !== undefined && (typeof id !== 'string' || !id.trim() || id.length > 256))
362
+ return;
363
+ }
364
+ return {
365
+ id: JSON.stringify([source.provider, source.sessionId, kind, uuid ?? turnId ?? null, occurredAt]),
366
+ occurredAt, kind, pending,
367
+ ...(typeof promptId === 'string' ? { promptId } : {}),
368
+ ...(typeof turnId === 'string' ? { turnId } : {})
369
+ };
299
370
  }
300
371
  function createAgentStatus(source, state) {
301
372
  return { provider: source.provider, sessionId: source.sessionId, state };
@@ -324,11 +395,11 @@ function readTail(filePath, knownSize) {
324
395
  closeSync(fd);
325
396
  }
326
397
  }
327
- async function readTailAsync(filePath, knownSize) {
398
+ async function readTailAsync(filePath, knownSize, maxBytes = TRANSCRIPT_TAIL_BYTES) {
328
399
  const handle = await openFile(filePath, 'r');
329
400
  try {
330
401
  const size = knownSize ?? (await handle.stat()).size;
331
- const start = Math.max(0, size - TRANSCRIPT_TAIL_BYTES);
402
+ const start = Math.max(0, size - maxBytes);
332
403
  const { buffer } = await readRangeFromHandle(handle, start, size - start);
333
404
  const decoder = new StringDecoder('utf8');
334
405
  const text = decoder.write(buffer);
@@ -1 +1 @@
1
- {"version":3,"file":"agentTranscriptStatus.js","sourceRoot":"","sources":["../../../src/server/terminal/agentTranscriptStatus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentTranscriptStatus.js","sourceRoot":"","sources":["../../../src/server/terminal/agentTranscriptStatus.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ export interface CodexDaemonLookupOptions {
24
24
  procRoot?: string;
25
25
  processStartedAtSeconds?: number | null;
26
26
  runSqlite?: RunSqlite;
27
+ bypassCache?: boolean;
27
28
  readUnixSocketTable?: () => Promise<string | null>;
28
29
  }
29
30
  export declare function clearCodexTranscriptLookupCache(): void;
@@ -41,5 +42,6 @@ export declare function processBinding(procRoot: string, pids: number[]): Promis
41
42
  export declare function lookupCodexTranscriptFromOpenFds(pid: number, options?: CodexOpenFdLookupOptions): Promise<CodexTranscriptLookup>;
42
43
  export declare function lookupCodexTranscriptFromDaemonOrLogs(pid: number, options?: CodexDaemonLookupOptions): Promise<CodexTranscriptLookup>;
43
44
  export declare function resolveCodexTranscriptCandidates(pid: number, options?: CodexDaemonLookupOptions): Promise<PtyTranscriptCandidates>;
45
+ export declare function codexSessionCreatedAtMs(sessionId: string): number | null;
44
46
  export declare function sqlString(value: string): string;
45
47
  export {};
@@ -6,6 +6,7 @@ import { readProcessStartedAtSecondsAsync } from './procfs.js';
6
6
  import { TtlCache } from './ttlCache.js';
7
7
  import { KeyedSingleFlight, mapWithConcurrency, runCommand } from './asyncCommand.js';
8
8
  import { readSqlite } from './sqliteReader.js';
9
+ import { sharedTranscriptHeaderReader } from './transcriptHeader.js';
9
10
  export const TRANSCRIPT_CANDIDATE_LIMIT = 50;
10
11
  const ABSENT = { status: 'absent' };
11
12
  const UNAVAILABLE = { status: 'unavailable' };
@@ -230,6 +231,8 @@ export async function lookupCodexTranscriptFromDaemon(pid, options = {}) {
230
231
  if (processStartedAtSeconds === null)
231
232
  return UNAVAILABLE;
232
233
  const procRoot = options.procRoot ?? '/proc';
234
+ if (options.bypassCache)
235
+ return lookupCodexTranscriptInDaemon(pid, procRoot, options);
233
236
  const cacheKey = `${options.homeDir ?? os.homedir()}:${procRoot}:${pid}:${processStartedAtSeconds}`;
234
237
  const cached = daemonLookupCache.get(cacheKey);
235
238
  if (cached)
@@ -240,6 +243,24 @@ export async function lookupCodexTranscriptFromDaemon(pid, options = {}) {
240
243
  return source;
241
244
  });
242
245
  }
246
+ // The daemon owns the thread database, so its own CODEX_HOME decides which
247
+ // state_5.sqlite holds these threads (as the hook installer and hook binding
248
+ // honor CODEX_HOME). Relative values are ignored rather than guessed.
249
+ async function daemonCodexHome(procRoot, daemonPids, options) {
250
+ for (const daemonPid of daemonPids) {
251
+ try {
252
+ const environ = await readFile(path.join(procRoot, String(daemonPid), 'environ'), 'utf8');
253
+ const entry = environ.split('\0').find((item) => item.startsWith('CODEX_HOME='));
254
+ const value = entry?.slice('CODEX_HOME='.length);
255
+ if (value && path.isAbsolute(value))
256
+ return value;
257
+ }
258
+ catch {
259
+ // Unreadable environ: fall back to the default home below.
260
+ }
261
+ }
262
+ return path.join(options.homeDir ?? os.homedir(), '.codex');
263
+ }
243
264
  async function lookupCodexTranscriptInDaemon(pid, procRoot, options) {
244
265
  const clientInodes = await listSocketInodes(procRoot, pid);
245
266
  if (clientInodes === null)
@@ -265,7 +286,7 @@ async function lookupCodexTranscriptInDaemon(pid, procRoot, options) {
265
286
  const clientCwd = await readLinkOrNull(path.join(procRoot, String(pid), 'cwd'));
266
287
  if (clientCwd === null)
267
288
  return PENDING;
268
- const threadCwds = await readInteractiveThreadCwds(path.join(options.homeDir ?? os.homedir(), '.codex', 'state_5.sqlite'), rollouts, options.runSqlite);
289
+ const threadCwds = await readInteractiveThreadCwds(path.join(await daemonCodexHome(procRoot, daemonPids, options), 'state_5.sqlite'), rollouts, options.runSqlite);
269
290
  if (threadCwds === null)
270
291
  return PENDING;
271
292
  const clientRealCwd = await realpathOrSelf(clientCwd);
@@ -438,40 +459,9 @@ async function readInteractiveThreadCwds(stateDb, rollouts, runSqliteOverride) {
438
459
  return cwds;
439
460
  }
440
461
  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
- }
462
+ const result = await sharedTranscriptHeaderReader.read({ provider: 'codex', sessionId,
463
+ filePath: path.resolve(filePath), rootPath: path.dirname(path.resolve(filePath)), firstRecordOnly: true });
464
+ return result.status === 'valid' ? result.proof.codexTui ?? null : null;
475
465
  }
476
466
  async function readCmdline(procRoot, pid) {
477
467
  try {
@@ -559,8 +549,12 @@ export async function lookupCodexTranscriptFromOpenFds(pid, options = {}) {
559
549
  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
550
  if (rollouts.length > 1)
561
551
  return { ...AMBIGUOUS, candidates };
562
- const source = candidates[0];
563
- return source.readable ? { status: 'matched', source, candidates } : { ...PENDING, candidates };
552
+ const chosen = candidates[0];
553
+ // Candidate metadata (mtime, readability, cwd) stays in `candidates`; the
554
+ // matched source is the bare identity, as in the daemon and log paths.
555
+ return chosen.readable
556
+ ? { status: 'matched', source: { provider: chosen.provider, sessionId: chosen.sessionId, filePath: chosen.filePath }, candidates }
557
+ : { ...PENDING, candidates };
564
558
  }
565
559
  // Pre-connection failure is not evidence against the independent PID log.
566
560
  // Post-connection failures are PENDING and must never reach launch argv.
@@ -599,6 +593,16 @@ export async function resolveCodexTranscriptCandidates(pid, options = {}) {
599
593
  candidates: candidates.map(candidate => ({ ...candidate, ...(!candidate.cwd && cwd ? { cwd } : {}) }))
600
594
  };
601
595
  }
596
+ // Codex thread IDs are UUIDv7 (`ThreadId::new` uses `Uuid::now_v7`), whose
597
+ // first 48 bits are the creation time in Unix milliseconds. Any other shape
598
+ // yields null: callers must treat an unknown creation time as uncorroborated.
599
+ export function codexSessionCreatedAtMs(sessionId) {
600
+ const match = /^([0-9a-f]{8})-([0-9a-f]{4})-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.exec(sessionId);
601
+ if (!match)
602
+ return null;
603
+ const ms = parseInt(match[1] + match[2], 16);
604
+ return Number.isSafeInteger(ms) && ms > 0 ? ms : null;
605
+ }
602
606
  export function sqlString(value) {
603
607
  return `'${value.replace(/'/g, "''")}'`;
604
608
  }