@scotthuang/agent-knock-knock 0.13.16 → 0.13.17

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 (168) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/claude-terminal-agent-adapter.js +1 -1
  3. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  4. package/dist/src/codex-app-server-interaction-client.js +68 -26
  5. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  6. package/dist/src/codex-app-server-read-client.js +52 -20
  7. package/dist/src/codex-app-server-read-client.js.map +1 -1
  8. package/dist/src/codex-astra-composer-proof.js +1 -1
  9. package/dist/src/codex-astra-composer-proof.js.map +1 -1
  10. package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
  11. package/dist/src/codex-open-rollout-inventory.js +365 -0
  12. package/dist/src/codex-open-rollout-inventory.js.map +1 -0
  13. package/dist/src/codex-paginated-thread-binding.js +1 -1
  14. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  15. package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
  16. package/dist/src/codex-rollout-bound-completion.js +357 -0
  17. package/dist/src/codex-rollout-bound-completion.js.map +1 -0
  18. package/dist/src/codex-rollout-file.d.ts +15 -0
  19. package/dist/src/codex-rollout-file.js +98 -0
  20. package/dist/src/codex-rollout-file.js.map +1 -0
  21. package/dist/src/codex-rollout-human-task.d.ts +61 -0
  22. package/dist/src/codex-rollout-human-task.js +555 -0
  23. package/dist/src/codex-rollout-human-task.js.map +1 -0
  24. package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
  25. package/dist/src/codex-rollout-interaction-evidence.js +521 -0
  26. package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
  27. package/dist/src/codex-rollout-inventory.d.ts +5 -0
  28. package/dist/src/codex-rollout-inventory.js +81 -0
  29. package/dist/src/codex-rollout-inventory.js.map +1 -0
  30. package/dist/src/codex-rollout-records.d.ts +49 -0
  31. package/dist/src/codex-rollout-records.js +298 -0
  32. package/dist/src/codex-rollout-records.js.map +1 -0
  33. package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
  34. package/dist/src/codex-sqlite-thread-query.js +440 -0
  35. package/dist/src/codex-sqlite-thread-query.js.map +1 -0
  36. package/dist/src/codex-status-history-navigation.d.ts +1 -1
  37. package/dist/src/codex-status-history-navigation.js +1 -1
  38. package/dist/src/codex-status-history-navigation.js.map +1 -1
  39. package/dist/src/codex-store-adapter.d.ts +3 -50
  40. package/dist/src/codex-store-adapter.js +5 -796
  41. package/dist/src/codex-store-adapter.js.map +1 -1
  42. package/dist/src/codex-terminal-agent-adapter.js +1 -1
  43. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  44. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +4 -134
  45. package/dist/src/native-thread-lifecycle-cli-adapter.js +19 -633
  46. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  47. package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
  48. package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
  49. package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
  50. package/dist/src/semantic-permission-control.js +33 -6
  51. package/dist/src/semantic-permission-control.js.map +1 -1
  52. package/dist/src/semantic-tool-descriptions.d.ts +26 -0
  53. package/dist/src/semantic-tool-descriptions.js +259 -0
  54. package/dist/src/semantic-tool-descriptions.js.map +1 -0
  55. package/dist/src/semantic-tool-runtime.js +45 -37
  56. package/dist/src/semantic-tool-runtime.js.map +1 -1
  57. package/dist/src/semantic-tool-schemas.js +134 -33
  58. package/dist/src/semantic-tool-schemas.js.map +1 -1
  59. package/dist/src/terminal-action-contracts.d.ts +4 -0
  60. package/dist/src/terminal-action-contracts.js +695 -0
  61. package/dist/src/terminal-action-contracts.js.map +1 -0
  62. package/dist/src/terminal-composer-classifier.d.ts +1 -1
  63. package/dist/src/terminal-composer-classifier.js +2 -2
  64. package/dist/src/terminal-composer-classifier.js.map +1 -1
  65. package/dist/src/terminal-interaction-response-bridge.js +1 -1
  66. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  67. package/dist/src/terminal-list-renderer.d.ts +1 -2
  68. package/dist/src/terminal-list-renderer.js +8 -424
  69. package/dist/src/terminal-list-renderer.js.map +1 -1
  70. package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
  71. package/dist/src/terminal-model-control-availability.d.ts +1 -1
  72. package/dist/src/terminal-model-control-availability.js +1 -1
  73. package/dist/src/terminal-model-control-availability.js.map +1 -1
  74. package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
  75. package/dist/src/terminal-model-control-cli-adapter.js +669 -0
  76. package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
  77. package/dist/src/terminal-model-control-contract.d.ts +198 -0
  78. package/dist/src/terminal-model-control-contract.js +15 -0
  79. package/dist/src/terminal-model-control-contract.js.map +1 -0
  80. package/dist/src/terminal-model-control-input.d.ts +29 -0
  81. package/dist/src/terminal-model-control-input.js +86 -0
  82. package/dist/src/terminal-model-control-input.js.map +1 -0
  83. package/dist/src/terminal-model-control-profile.d.ts +2 -0
  84. package/dist/src/terminal-model-control-profile.js +6 -0
  85. package/dist/src/terminal-model-control-profile.js.map +1 -1
  86. package/dist/src/terminal-model-control-subject.d.ts +52 -0
  87. package/dist/src/terminal-model-control-subject.js +73 -0
  88. package/dist/src/terminal-model-control-subject.js.map +1 -1
  89. package/dist/src/terminal-model-control-surface.d.ts +82 -0
  90. package/dist/src/terminal-model-control-surface.js +688 -0
  91. package/dist/src/terminal-model-control-surface.js.map +1 -0
  92. package/dist/src/terminal-model-control.d.ts +6 -270
  93. package/dist/src/terminal-model-control.js +11 -988
  94. package/dist/src/terminal-model-control.js.map +1 -1
  95. package/dist/src/terminal-model-selection.d.ts +33 -0
  96. package/dist/src/terminal-model-selection.js +143 -0
  97. package/dist/src/terminal-model-selection.js.map +1 -0
  98. package/dist/src/terminal-monitor-application-service.js +38 -59
  99. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  100. package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
  101. package/dist/src/terminal-monitor-attention-store.js +518 -0
  102. package/dist/src/terminal-monitor-attention-store.js.map +1 -0
  103. package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
  104. package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
  105. package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
  106. package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
  107. package/dist/src/terminal-monitor-interaction-projection.js +48 -0
  108. package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
  109. package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
  110. package/dist/src/terminal-monitor-startup-recovery.js +767 -0
  111. package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
  112. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
  113. package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
  114. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
  115. package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
  116. package/dist/src/terminal-monitor-state-contract.js +8 -0
  117. package/dist/src/terminal-monitor-state-contract.js.map +1 -0
  118. package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
  119. package/dist/src/terminal-native-inspection-bridge.js +7 -646
  120. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  121. package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
  122. package/dist/src/terminal-native-inspection-contract.js +38 -0
  123. package/dist/src/terminal-native-inspection-contract.js.map +1 -0
  124. package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
  125. package/dist/src/terminal-native-inspection-profile.js +185 -0
  126. package/dist/src/terminal-native-inspection-profile.js.map +1 -0
  127. package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
  128. package/dist/src/terminal-native-inspection-proof.js +362 -0
  129. package/dist/src/terminal-native-inspection-proof.js.map +1 -0
  130. package/dist/src/terminal-permission-control-bridge.js +1 -1
  131. package/dist/src/terminal-permission-control-bridge.js.map +1 -1
  132. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
  133. package/dist/src/terminal-runtime-cli-adapter.js +1 -1
  134. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  135. package/dist/src/terminal-submission-acceptance.d.ts +5 -148
  136. package/dist/src/terminal-submission-acceptance.js +21 -1845
  137. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  138. package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
  139. package/dist/src/terminal-watch-anchor-capture.js +139 -0
  140. package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
  141. package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
  142. package/dist/src/terminal-watch-cli-adapter.js +10 -1992
  143. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  144. package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
  145. package/dist/src/terminal-watch-cli-contract.js +2 -0
  146. package/dist/src/terminal-watch-cli-contract.js.map +1 -0
  147. package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
  148. package/dist/src/terminal-watch-fallback-observation.js +249 -0
  149. package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
  150. package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
  151. package/dist/src/terminal-watch-interaction-observation.js +262 -0
  152. package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
  153. package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
  154. package/dist/src/terminal-watch-observation-adapter.js +307 -0
  155. package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
  156. package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
  157. package/dist/src/terminal-watch-observation-evidence.js +184 -0
  158. package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
  159. package/dist/src/terminal-watch-response-authority.d.ts +6 -0
  160. package/dist/src/terminal-watch-response-authority.js +333 -0
  161. package/dist/src/terminal-watch-response-authority.js.map +1 -0
  162. package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
  163. package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
  164. package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
  165. package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
  166. package/dist/src/terminal-watch-terminal-identity.js +380 -0
  167. package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
  168. package/package.json +1 -1
@@ -0,0 +1,365 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { CodexTransientDuplicateOpenRootDescriptorsError } from "./agent-session-provider.js";
5
+ import { codexThreadUsesLegacyRollout } from "./codex-session-provider.js";
6
+ /** Exact open-file inventory. A cwd match alone never establishes process ownership. */
7
+ export const MAX_CODEX_OPEN_ROOT_ROLLOUTS = 128;
8
+ export function parseLsofOpenFiles(text) {
9
+ const records = [];
10
+ let current;
11
+ const flush = () => {
12
+ if (current) {
13
+ records.push(current);
14
+ }
15
+ };
16
+ for (const line of text.split(/\r?\n/u)) {
17
+ if (line.startsWith("f")) {
18
+ flush();
19
+ current = { fd: line.slice(1) };
20
+ }
21
+ else if (current && line.startsWith("t")) {
22
+ current.type = line.slice(1);
23
+ }
24
+ else if (current && line.startsWith("D")) {
25
+ current.device = line.slice(1);
26
+ }
27
+ else if (current && line.startsWith("i")) {
28
+ current.inode = line.slice(1);
29
+ }
30
+ else if (current && line.startsWith("n")) {
31
+ current.path = line.slice(1);
32
+ }
33
+ }
34
+ flush();
35
+ return records;
36
+ }
37
+ export function resolveCodexOpenRolloutIdentity({ codexHome, pid, cwd, preferredSessionId, allowedCompanionIdentity, allowedAdditionalIdentities, processBirth, lsofOutput }) {
38
+ const inventory = inspectCodexOpenRootRolloutInventory({
39
+ codexHome,
40
+ pid,
41
+ cwd,
42
+ processBirth,
43
+ lsofOutput
44
+ });
45
+ return selectCodexOpenRolloutIdentity({
46
+ inventory,
47
+ preferredSessionId,
48
+ allowedCompanionIdentity,
49
+ allowedAdditionalIdentities
50
+ });
51
+ }
52
+ export function inspectCodexOpenRootRolloutInventory({ codexHome, pid, cwd, processBirth, lsofOutput }) {
53
+ if (!Number.isSafeInteger(pid) || pid <= 1 || !processBirth.trim()) {
54
+ throw new Error("Codex rollout inventory requires an exact process incarnation");
55
+ }
56
+ const rolloutFiles = parseLsofOpenFiles(lsofOutput).filter((openFile) => {
57
+ if (!openFile.path) {
58
+ return false;
59
+ }
60
+ const openPath = openFile.path.replace(/\s+\(deleted\)$/u, "");
61
+ return /^rollout-.*\.jsonl$/u.test(path.basename(openPath));
62
+ });
63
+ if (rolloutFiles.length > MAX_CODEX_OPEN_ROOT_ROLLOUTS) {
64
+ throw new Error(`Codex process ${pid} has too many open rollout files to inspect safely`);
65
+ }
66
+ const processUuid = `codex-pid:${pid}:birth:${processBirth}`;
67
+ const expectedCwd = cwd ? path.resolve(cwd) : undefined;
68
+ // An absent sessions directory is only evidence of a virgin process when
69
+ // lsof also reported no rollout descriptor at all. Once a rollout FD exists,
70
+ // every descriptor and every root/subagent classification must be verified.
71
+ if (rolloutFiles.length === 0) {
72
+ return codexOpenRootRolloutInventoryResult({
73
+ pid,
74
+ processUuid,
75
+ processBirth,
76
+ cwd: expectedCwd,
77
+ roots: []
78
+ });
79
+ }
80
+ const configuredSessionsRoot = path.join(codexHome, "sessions");
81
+ let sessionsRoot;
82
+ try {
83
+ sessionsRoot = fs.realpathSync(configuredSessionsRoot);
84
+ }
85
+ catch {
86
+ throw new Error(`Codex process ${pid} has open rollout files but CODEX_HOME/sessions is unavailable`);
87
+ }
88
+ const identities = [];
89
+ for (const openFile of rolloutFiles) {
90
+ const openPath = openFile.path;
91
+ const descriptorPath = openPath.replace(/\s+\(deleted\)$/u, "");
92
+ const lexicalRelative = path.relative(path.resolve(configuredSessionsRoot), path.resolve(descriptorPath));
93
+ if (!lexicalRelative ||
94
+ lexicalRelative.startsWith("..") ||
95
+ path.isAbsolute(lexicalRelative)) {
96
+ throw new Error(`Codex process ${pid} has an open rollout outside CODEX_HOME/sessions`);
97
+ }
98
+ if (openFile.type !== "REG" ||
99
+ !openFile.fd ||
100
+ !openFile.device ||
101
+ !openFile.inode ||
102
+ /\s+\(deleted\)$/u.test(openPath)) {
103
+ throw new Error(`Codex process ${pid} has an unverifiable open rollout descriptor`);
104
+ }
105
+ let realPath;
106
+ try {
107
+ realPath = fs.realpathSync(descriptorPath);
108
+ }
109
+ catch {
110
+ throw new Error(`Codex process ${pid} has an unreadable open rollout descriptor`);
111
+ }
112
+ const relative = path.relative(sessionsRoot, realPath);
113
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) {
114
+ throw new Error(`Codex process ${pid} has an open rollout outside CODEX_HOME/sessions`);
115
+ }
116
+ const expectedDevice = parseLsofInteger(openFile.device);
117
+ const expectedInode = parseLsofInteger(openFile.inode);
118
+ const metadata = readCodexSessionMetadata(descriptorPath, expectedDevice, expectedInode, pid);
119
+ let confirmedRealPath;
120
+ try {
121
+ confirmedRealPath = fs.realpathSync(descriptorPath);
122
+ }
123
+ catch {
124
+ throw new Error(`Codex process ${pid} has an unreadable open rollout descriptor`);
125
+ }
126
+ if (confirmedRealPath !== realPath) {
127
+ throw new Error(`Codex process ${pid} rollout path changed while it was being verified`);
128
+ }
129
+ const filenameSessionId = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/iu
130
+ .exec(path.basename(descriptorPath))?.[1];
131
+ if (!metadata || metadata.id !== filenameSessionId) {
132
+ throw new Error(`Codex process ${pid} has invalid rollout session metadata`);
133
+ }
134
+ if (typeof metadata.source === "object" &&
135
+ metadata.source !== null &&
136
+ "subagent" in metadata.source) {
137
+ continue;
138
+ }
139
+ if (metadata.originator !== "codex-tui" ||
140
+ metadata.source !== "cli" ||
141
+ (expectedCwd && path.resolve(metadata.cwd) !== expectedCwd)) {
142
+ throw new Error(`Codex process ${pid} has an indeterminate open root rollout`);
143
+ }
144
+ identities.push({
145
+ sessionId: metadata.id,
146
+ processUuid,
147
+ processBirth,
148
+ rollout: {
149
+ fd: openFile.fd,
150
+ device: openFile.device,
151
+ inode: openFile.inode,
152
+ path: confirmedRealPath
153
+ },
154
+ evidence: "codex_open_root_rollout"
155
+ });
156
+ }
157
+ if (identities.length === 0) {
158
+ throw new Error(`Codex process ${pid} has open rollout files but no exact TUI root identity`);
159
+ }
160
+ identities.sort((left, right) => left.sessionId.localeCompare(right.sessionId) ||
161
+ left.rollout.path.localeCompare(right.rollout.path) ||
162
+ left.rollout.fd.localeCompare(right.rollout.fd));
163
+ const duplicateDisposition = classifyCodexOpenRootDuplicates(identities);
164
+ if (duplicateDisposition === "transient_exact_descriptor_duplicate") {
165
+ throw new CodexTransientDuplicateOpenRootDescriptorsError(pid);
166
+ }
167
+ if (duplicateDisposition === "conflicting_identity") {
168
+ throw new Error(`Codex process ${pid} has duplicate open root rollout identities`);
169
+ }
170
+ return codexOpenRootRolloutInventoryResult({
171
+ pid,
172
+ processUuid,
173
+ processBirth,
174
+ cwd: expectedCwd,
175
+ roots: identities
176
+ });
177
+ }
178
+ export function classifyCodexOpenRootDuplicates(identities) {
179
+ let exactDescriptorDuplicate = false;
180
+ for (let leftIndex = 0; leftIndex < identities.length; leftIndex += 1) {
181
+ const left = identities[leftIndex];
182
+ for (let rightIndex = leftIndex + 1; rightIndex < identities.length; rightIndex += 1) {
183
+ const right = identities[rightIndex];
184
+ const sameSession = left.sessionId === right.sessionId;
185
+ const sameFile = left.rollout.device === right.rollout.device &&
186
+ left.rollout.inode === right.rollout.inode;
187
+ if (!sameSession && !sameFile) {
188
+ continue;
189
+ }
190
+ const exactRolloutWithDistinctDescriptors = sameSession &&
191
+ sameFile &&
192
+ left.processUuid === right.processUuid &&
193
+ left.processBirth === right.processBirth &&
194
+ left.rollout.path === right.rollout.path &&
195
+ left.rollout.fd !== right.rollout.fd;
196
+ if (!exactRolloutWithDistinctDescriptors) {
197
+ return "conflicting_identity";
198
+ }
199
+ exactDescriptorDuplicate = true;
200
+ }
201
+ }
202
+ return exactDescriptorDuplicate
203
+ ? "transient_exact_descriptor_duplicate"
204
+ : "none";
205
+ }
206
+ export function codexOpenRootRolloutInventoryResult({ pid, processUuid, processBirth, cwd, roots }) {
207
+ const authority = {
208
+ schema: "agent-knock-knock/codex-open-root-rollout-inventory",
209
+ version: 1,
210
+ pid,
211
+ processUuid,
212
+ processBirth,
213
+ ...(cwd ? { cwd } : {}),
214
+ roots
215
+ };
216
+ const inventoryFingerprint = createHash("sha256")
217
+ .update(JSON.stringify(authority))
218
+ .digest("hex");
219
+ if (roots.length === 0) {
220
+ return {
221
+ ...authority,
222
+ status: "verified_absent",
223
+ roots: [],
224
+ inventoryFingerprint
225
+ };
226
+ }
227
+ if (roots.length === 1) {
228
+ return {
229
+ ...authority,
230
+ status: "resolved",
231
+ roots: [roots[0]],
232
+ inventoryFingerprint
233
+ };
234
+ }
235
+ return {
236
+ ...authority,
237
+ status: "unbound",
238
+ reason: "multiple_open_root_rollouts",
239
+ inventoryFingerprint
240
+ };
241
+ }
242
+ export function selectCodexOpenRolloutIdentity({ inventory, preferredSessionId, allowedCompanionIdentity, allowedAdditionalIdentities }) {
243
+ const pid = inventory.pid;
244
+ const identities = inventory.roots;
245
+ if (identities.length === 0) {
246
+ return undefined;
247
+ }
248
+ if (preferredSessionId) {
249
+ const preferred = identities.filter((identity) => identity.sessionId === preferredSessionId);
250
+ if (preferred.length > 1) {
251
+ throw new Error(`Codex process ${pid} has multiple open root rollouts for preferred ` +
252
+ `session ${preferredSessionId}`);
253
+ }
254
+ if (allowedCompanionIdentity) {
255
+ const allowedConstraints = [
256
+ allowedCompanionIdentity,
257
+ ...(allowedAdditionalIdentities ?? [])
258
+ ];
259
+ const allowedMatches = [];
260
+ for (const constraint of allowedConstraints) {
261
+ const matches = identities.filter((identity) => sameActiveCodexIdentity(identity, constraint));
262
+ if (matches.length > 1) {
263
+ throw new Error(`Codex process ${pid} has multiple open root rollouts for an ` +
264
+ "allowed companion session");
265
+ }
266
+ if (matches[0] && !allowedMatches.includes(matches[0])) {
267
+ allowedMatches.push(matches[0]);
268
+ }
269
+ }
270
+ const unexpected = identities.filter((identity) => identity !== preferred[0] && !allowedMatches.includes(identity));
271
+ if (unexpected.length > 0) {
272
+ throw new Error(`Codex process ${pid} has an unexpected open root rollout outside ` +
273
+ "the preferred and exact companion identities");
274
+ }
275
+ if (preferred.length === 1) {
276
+ return preferred[0];
277
+ }
278
+ const primaryCompanion = identities.find((identity) => sameActiveCodexIdentity(identity, allowedCompanionIdentity));
279
+ if (primaryCompanion) {
280
+ return primaryCompanion;
281
+ }
282
+ if (allowedMatches.length > 0) {
283
+ // The immediately preceding rollout can close while an older,
284
+ // independently verified managed ancestor remains open. Constraint
285
+ // order is authoritative and deterministic; unknown roots were
286
+ // rejected above, so the first surviving exact companion is safe
287
+ // process-incarnation evidence for a fresh status-card proof.
288
+ return allowedMatches[0];
289
+ }
290
+ throw new Error(`Codex process ${pid} has neither the preferred session nor an ` +
291
+ "exact managed companion rollout open");
292
+ }
293
+ else if (preferred.length === 1 && identities.length === 1) {
294
+ return preferred[0];
295
+ }
296
+ else {
297
+ throw new Error(`Codex process ${pid} does not have the preferred session as its ` +
298
+ "sole open root rollout");
299
+ }
300
+ }
301
+ if (identities.length !== 1) {
302
+ throw new Error(`Codex process ${pid} has ${identities.length} open root rollout files; ` +
303
+ "the foreground native session is ambiguous");
304
+ }
305
+ return identities[0];
306
+ }
307
+ export function sameActiveCodexIdentity(left, right) {
308
+ return Boolean(left.sessionId === right.sessionId &&
309
+ left.processUuid === right.processUuid &&
310
+ left.processBirth === right.processBirth &&
311
+ left.rollout?.fd === right.rollout?.fd &&
312
+ left.rollout?.device === right.rollout?.device &&
313
+ left.rollout?.inode === right.rollout?.inode &&
314
+ left.rollout?.path === right.rollout?.path);
315
+ }
316
+ export function parseLsofInteger(value) {
317
+ try {
318
+ return BigInt(value);
319
+ }
320
+ catch {
321
+ return -1n;
322
+ }
323
+ }
324
+ export function readCodexSessionMetadata(filePath, expectedDevice, expectedInode, pid) {
325
+ let fd;
326
+ try {
327
+ fd = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
328
+ }
329
+ catch {
330
+ throw new Error(`Codex process ${pid} has an unreadable open rollout descriptor`);
331
+ }
332
+ try {
333
+ const stat = fs.fstatSync(fd, { bigint: true });
334
+ if (!stat.isFile() ||
335
+ stat.dev !== expectedDevice ||
336
+ stat.ino !== expectedInode) {
337
+ throw new Error(`Codex process ${pid} rollout descriptor no longer matches its file`);
338
+ }
339
+ const buffer = Buffer.alloc(1024 * 1024);
340
+ const bytesRead = fs.readSync(fd, buffer, 0, buffer.length, 0);
341
+ const text = buffer.subarray(0, bytesRead).toString("utf8");
342
+ const newline = text.indexOf("\n");
343
+ if (newline < 0 && bytesRead === buffer.length) {
344
+ throw new Error(`Codex session metadata line is too large: ${filePath}`);
345
+ }
346
+ const parsed = JSON.parse(newline >= 0 ? text.slice(0, newline) : text);
347
+ const payload = parsed?.type === "session_meta" ? parsed.payload : undefined;
348
+ if (typeof payload?.id !== "string" ||
349
+ typeof payload?.cwd !== "string" ||
350
+ typeof payload?.originator !== "string" ||
351
+ !codexThreadUsesLegacyRollout(payload)) {
352
+ return undefined;
353
+ }
354
+ return {
355
+ id: payload.id,
356
+ cwd: payload.cwd,
357
+ originator: payload.originator,
358
+ source: payload.source
359
+ };
360
+ }
361
+ finally {
362
+ fs.closeSync(fd);
363
+ }
364
+ }
365
+ //# sourceMappingURL=codex-open-rollout-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-open-rollout-inventory.js","sourceRoot":"","sources":["../../src/codex-open-rollout-inventory.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { codexProcessIncarnationForPid } from "./codex-process-incarnation.js";
5
5
  import { isCodexPaginatedReadCandidate } from "./codex-lifecycle-compatibility.js";
6
6
  import { connectCodexAppServerReadClient } from "./codex-app-server-read-client.js";
7
7
  import { createCodexTerminalAgentAdapter } from "./codex-terminal-agent-adapter.js";
8
- import { stripTerminalEscapeSequences } from "./terminal-native-inspection-bridge.js";
8
+ import { stripTerminalEscapeSequences } from "./terminal-native-inspection-proof.js";
9
9
  export function codexPaginatedHome(configured) {
10
10
  const value = configured ?? process.env.CODEX_HOME ?? path.join(os.homedir(), ".codex");
11
11
  return path.resolve(value.startsWith("~/") ? path.join(os.homedir(), value.slice(2)) : value);
@@ -1 +1 @@
1
- {"version":3,"file":"codex-paginated-thread-binding.js","sourceRoot":"","sources":["../../src/codex-paginated-thread-binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-paginated-thread-binding.js","sourceRoot":"","sources":["../../src/codex-paginated-thread-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type TerminalCompletionEvidence } from "./terminal-agent-adapter.js";
2
+ import { type CodexRolloutAcceptanceAnchor, type CodexRolloutAcceptanceIdentity, type TerminalSubmissionAcceptanceEvidence } from "./terminal-submission-facts.js";
3
+ export type CodexBoundRolloutCompletionCode = "completion_found" | "abort_found" | "exact_turn_not_complete" | "partial_rollout_record" | "rollout_changed_during_scan" | "invalid_anchor" | "invalid_acceptance_evidence" | "acceptance_anchor_mismatch" | "acceptance_turn_mismatch" | "binding_identity_mismatch" | "rollout_identity_mismatch" | "rollout_unreadable" | "rollout_truncated" | "scan_limit_exceeded" | "invalid_rollout_jsonl" | "duplicate_exact_completion" | "duplicate_exact_abort" | "conflicting_exact_settlement" | "later_turn_started" | "invalid_exact_completion" | "invalid_exact_abort";
4
+ export interface CodexBoundRolloutCompletionDiagnostics {
5
+ detector: "codex_exact_bound_rollout";
6
+ code: CodexBoundRolloutCompletionCode;
7
+ native_thread_id?: string;
8
+ acceptance_id?: string;
9
+ anchor_fingerprint?: string;
10
+ rollout_identity_fingerprint?: string;
11
+ scan_start_offset_bytes?: number;
12
+ observed_end_offset_bytes?: number;
13
+ scanned_records?: number;
14
+ observed_task_complete_records?: number;
15
+ observed_turn_aborted_records?: number;
16
+ detail?: string;
17
+ }
18
+ export type CodexBoundRolloutCompletionResult = {
19
+ status: "completed";
20
+ completion: TerminalCompletionEvidence;
21
+ diagnostics: CodexBoundRolloutCompletionDiagnostics;
22
+ } | {
23
+ status: "pending";
24
+ diagnostics: CodexBoundRolloutCompletionDiagnostics;
25
+ } | {
26
+ status: "failure";
27
+ diagnostics: CodexBoundRolloutCompletionDiagnostics;
28
+ };
29
+ interface CompletionRequest {
30
+ anchor: CodexRolloutAcceptanceAnchor;
31
+ acceptanceEvidence: TerminalSubmissionAcceptanceEvidence;
32
+ currentIdentity: CodexRolloutAcceptanceIdentity;
33
+ requestHash: string;
34
+ }
35
+ /**
36
+ * Scans the exact rollout and native turn proven by terminal acceptance.
37
+ *
38
+ * Unlike the general Codex context loader, this detector does not retain only
39
+ * a recent-turn window. It starts at the immutable pre-submission byte anchor
40
+ * and matches only the persisted acceptance UUID, so a delayed monitor can
41
+ * recover completion even after later native turns have been appended.
42
+ */
43
+ export declare function detectCodexBoundRolloutCompletion(options: CompletionRequest): CodexBoundRolloutCompletionResult;
44
+ export {};