@scotthuang/agent-knock-knock 0.13.16 → 0.13.18

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 (184) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +4 -4
  3. package/dist/src/claude-terminal-agent-adapter.js +1 -1
  4. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  5. package/dist/src/codex-app-server-interaction-client.js +68 -26
  6. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  7. package/dist/src/codex-app-server-read-client.js +52 -20
  8. package/dist/src/codex-app-server-read-client.js.map +1 -1
  9. package/dist/src/codex-astra-composer-proof.js +1 -1
  10. package/dist/src/codex-astra-composer-proof.js.map +1 -1
  11. package/dist/src/codex-async-question-adapter.js +14 -4
  12. package/dist/src/codex-async-question-adapter.js.map +1 -1
  13. package/dist/src/codex-lifecycle-compatibility.d.ts +1 -1
  14. package/dist/src/codex-lifecycle-compatibility.js +9 -3
  15. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  16. package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
  17. package/dist/src/codex-open-rollout-inventory.js +365 -0
  18. package/dist/src/codex-open-rollout-inventory.js.map +1 -0
  19. package/dist/src/codex-paginated-thread-binding.js +1 -1
  20. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  21. package/dist/src/codex-permission-surface.d.ts +1 -1
  22. package/dist/src/codex-permission-surface.js +1 -1
  23. package/dist/src/codex-permission-surface.js.map +1 -1
  24. package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
  25. package/dist/src/codex-rollout-bound-completion.js +357 -0
  26. package/dist/src/codex-rollout-bound-completion.js.map +1 -0
  27. package/dist/src/codex-rollout-file.d.ts +15 -0
  28. package/dist/src/codex-rollout-file.js +98 -0
  29. package/dist/src/codex-rollout-file.js.map +1 -0
  30. package/dist/src/codex-rollout-human-task.d.ts +61 -0
  31. package/dist/src/codex-rollout-human-task.js +555 -0
  32. package/dist/src/codex-rollout-human-task.js.map +1 -0
  33. package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
  34. package/dist/src/codex-rollout-interaction-evidence.js +521 -0
  35. package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
  36. package/dist/src/codex-rollout-inventory.d.ts +5 -0
  37. package/dist/src/codex-rollout-inventory.js +81 -0
  38. package/dist/src/codex-rollout-inventory.js.map +1 -0
  39. package/dist/src/codex-rollout-records.d.ts +49 -0
  40. package/dist/src/codex-rollout-records.js +298 -0
  41. package/dist/src/codex-rollout-records.js.map +1 -0
  42. package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
  43. package/dist/src/codex-sqlite-thread-query.js +440 -0
  44. package/dist/src/codex-sqlite-thread-query.js.map +1 -0
  45. package/dist/src/codex-status-history-navigation.d.ts +1 -1
  46. package/dist/src/codex-status-history-navigation.js +1 -1
  47. package/dist/src/codex-status-history-navigation.js.map +1 -1
  48. package/dist/src/codex-store-adapter.d.ts +3 -50
  49. package/dist/src/codex-store-adapter.js +5 -796
  50. package/dist/src/codex-store-adapter.js.map +1 -1
  51. package/dist/src/codex-terminal-agent-adapter.js +4 -2
  52. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  53. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +4 -134
  54. package/dist/src/native-thread-lifecycle-cli-adapter.js +19 -633
  55. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  56. package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
  57. package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
  58. package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
  59. package/dist/src/semantic-permission-control.js +33 -6
  60. package/dist/src/semantic-permission-control.js.map +1 -1
  61. package/dist/src/semantic-tool-descriptions.d.ts +26 -0
  62. package/dist/src/semantic-tool-descriptions.js +259 -0
  63. package/dist/src/semantic-tool-descriptions.js.map +1 -0
  64. package/dist/src/semantic-tool-runtime.js +45 -37
  65. package/dist/src/semantic-tool-runtime.js.map +1 -1
  66. package/dist/src/semantic-tool-schemas.js +134 -33
  67. package/dist/src/semantic-tool-schemas.js.map +1 -1
  68. package/dist/src/terminal-action-contracts.d.ts +4 -0
  69. package/dist/src/terminal-action-contracts.js +695 -0
  70. package/dist/src/terminal-action-contracts.js.map +1 -0
  71. package/dist/src/terminal-composer-classifier.d.ts +1 -1
  72. package/dist/src/terminal-composer-classifier.js +2 -2
  73. package/dist/src/terminal-composer-classifier.js.map +1 -1
  74. package/dist/src/terminal-interaction-response-bridge.js +1 -1
  75. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  76. package/dist/src/terminal-list-renderer.d.ts +1 -2
  77. package/dist/src/terminal-list-renderer.js +8 -424
  78. package/dist/src/terminal-list-renderer.js.map +1 -1
  79. package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
  80. package/dist/src/terminal-model-control-availability.d.ts +1 -1
  81. package/dist/src/terminal-model-control-availability.js +1 -1
  82. package/dist/src/terminal-model-control-availability.js.map +1 -1
  83. package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
  84. package/dist/src/terminal-model-control-cli-adapter.js +669 -0
  85. package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
  86. package/dist/src/terminal-model-control-contract.d.ts +198 -0
  87. package/dist/src/terminal-model-control-contract.js +15 -0
  88. package/dist/src/terminal-model-control-contract.js.map +1 -0
  89. package/dist/src/terminal-model-control-input.d.ts +29 -0
  90. package/dist/src/terminal-model-control-input.js +86 -0
  91. package/dist/src/terminal-model-control-input.js.map +1 -0
  92. package/dist/src/terminal-model-control-profile.d.ts +5 -1
  93. package/dist/src/terminal-model-control-profile.js +21 -7
  94. package/dist/src/terminal-model-control-profile.js.map +1 -1
  95. package/dist/src/terminal-model-control-subject.d.ts +52 -0
  96. package/dist/src/terminal-model-control-subject.js +73 -0
  97. package/dist/src/terminal-model-control-subject.js.map +1 -1
  98. package/dist/src/terminal-model-control-surface.d.ts +82 -0
  99. package/dist/src/terminal-model-control-surface.js +688 -0
  100. package/dist/src/terminal-model-control-surface.js.map +1 -0
  101. package/dist/src/terminal-model-control.d.ts +6 -270
  102. package/dist/src/terminal-model-control.js +11 -988
  103. package/dist/src/terminal-model-control.js.map +1 -1
  104. package/dist/src/terminal-model-selection.d.ts +33 -0
  105. package/dist/src/terminal-model-selection.js +143 -0
  106. package/dist/src/terminal-model-selection.js.map +1 -0
  107. package/dist/src/terminal-monitor-application-service.js +38 -59
  108. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  109. package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
  110. package/dist/src/terminal-monitor-attention-store.js +518 -0
  111. package/dist/src/terminal-monitor-attention-store.js.map +1 -0
  112. package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
  113. package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
  114. package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
  115. package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
  116. package/dist/src/terminal-monitor-interaction-projection.js +48 -0
  117. package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
  118. package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
  119. package/dist/src/terminal-monitor-startup-recovery.js +767 -0
  120. package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
  121. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
  122. package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
  123. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
  124. package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
  125. package/dist/src/terminal-monitor-state-contract.js +8 -0
  126. package/dist/src/terminal-monitor-state-contract.js.map +1 -0
  127. package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
  128. package/dist/src/terminal-native-inspection-bridge.js +7 -646
  129. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  130. package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
  131. package/dist/src/terminal-native-inspection-contract.js +38 -0
  132. package/dist/src/terminal-native-inspection-contract.js.map +1 -0
  133. package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
  134. package/dist/src/terminal-native-inspection-profile.js +189 -0
  135. package/dist/src/terminal-native-inspection-profile.js.map +1 -0
  136. package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
  137. package/dist/src/terminal-native-inspection-proof.js +362 -0
  138. package/dist/src/terminal-native-inspection-proof.js.map +1 -0
  139. package/dist/src/terminal-permission-control-bridge.js +1 -1
  140. package/dist/src/terminal-permission-control-bridge.js.map +1 -1
  141. package/dist/src/terminal-permission-control.js +5 -1
  142. package/dist/src/terminal-permission-control.js.map +1 -1
  143. package/dist/src/terminal-questionnaire-adapter.js +5 -2
  144. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  145. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
  146. package/dist/src/terminal-runtime-cli-adapter.js +1 -1
  147. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  148. package/dist/src/terminal-submission-acceptance.d.ts +5 -148
  149. package/dist/src/terminal-submission-acceptance.js +21 -1845
  150. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  151. package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
  152. package/dist/src/terminal-watch-anchor-capture.js +139 -0
  153. package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
  154. package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
  155. package/dist/src/terminal-watch-cli-adapter.js +10 -1992
  156. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  157. package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
  158. package/dist/src/terminal-watch-cli-contract.js +2 -0
  159. package/dist/src/terminal-watch-cli-contract.js.map +1 -0
  160. package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
  161. package/dist/src/terminal-watch-fallback-observation.js +249 -0
  162. package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
  163. package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
  164. package/dist/src/terminal-watch-interaction-observation.js +262 -0
  165. package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
  166. package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
  167. package/dist/src/terminal-watch-observation-adapter.js +307 -0
  168. package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
  169. package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
  170. package/dist/src/terminal-watch-observation-evidence.js +184 -0
  171. package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
  172. package/dist/src/terminal-watch-response-authority.d.ts +6 -0
  173. package/dist/src/terminal-watch-response-authority.js +333 -0
  174. package/dist/src/terminal-watch-response-authority.js.map +1 -0
  175. package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
  176. package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
  177. package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
  178. package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
  179. package/dist/src/terminal-watch-terminal-identity.js +380 -0
  180. package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
  181. package/docs/codex-0.160.0-compatibility.md +126 -0
  182. package/docs/codex-permissions.md +12 -1
  183. package/package.json +3 -2
  184. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +3 -3
@@ -0,0 +1,521 @@
1
+ import { assertPrivateRegularFile, byteAtOffset, fileEndsWithNewline, openExactRollout, readCodexRolloutHeader, sameRolloutFileIdentity, sameStableFile, } from "./codex-rollout-file.js";
2
+ import { validateCodexOpenRootInventoryForAcceptance, } from "./codex-rollout-inventory.js";
3
+ import { assertExistingCodexRolloutHeader, isRecord, optionalString, parseCodexJsonlRecords, positiveByteLimit, } from "./codex-rollout-records.js";
4
+ import { exactNativeThreadId, fingerprint, normalizedRolloutIdentity, requiredString, } from "./terminal-submission-facts.js";
5
+ import fs from "node:fs";
6
+ const CODEX_QUESTIONNAIRE_TAIL_MAX_BYTES = 1024 * 1024;
7
+ const CODEX_QUESTIONNAIRE_MAX_TEXT_LENGTH = 16 * 1024;
8
+ const CODEX_QUESTIONNAIRE_MAX_OPTIONS = 8;
9
+ const CODEX_QUESTIONNAIRE_MAX_QUESTIONS = 3;
10
+ const CODEX_QUESTIONNAIRE_OTHER_LABEL = "None of the above";
11
+ const CODEX_QUESTIONNAIRE_OTHER_DESCRIPTION = "Optionally, add details in notes (tab).";
12
+ const CODEX_QUESTIONNAIRE_CUSTOM_LABEL = "Type something.";
13
+ const CODEX_QUESTIONNAIRE_CUSTOM_DESCRIPTION = "Enter a free-form answer through Codex Notes.";
14
+ const CODEX_ASYNC_QUESTION_TAIL_MAX_BYTES = 4 * 1024 * 1024;
15
+ const CODEX_ASYNC_QUESTION_MAX_ITEMS = 16;
16
+ const CODEX_ASYNC_QUESTION_MAX_QUESTIONS = 16;
17
+ const CODEX_ASYNC_QUESTION_MAX_OPTIONS = 32;
18
+ const CODEX_ASYNC_QUESTION_MAX_TEXT_LENGTH = 4_096;
19
+ /**
20
+ * Attributes a rendered questionnaire to one exact accepted Codex turn while
21
+ * the process has multiple open root rollouts. No prompt or tool arguments are
22
+ * returned: callers receive only a bounded fingerprint or a typed failure.
23
+ */
24
+ export function detectCodexBoundQuestionnaireAttribution(options) {
25
+ let inventory;
26
+ let acceptedThreadId;
27
+ let acceptedRollout;
28
+ let acceptanceId;
29
+ try {
30
+ inventory = validateCodexOpenRootInventoryForAcceptance(options.currentInventory);
31
+ acceptedThreadId = exactNativeThreadId(options.acceptedIdentity.sessionId);
32
+ acceptanceId = exactNativeThreadId(options.acceptanceId);
33
+ if (!options.acceptedIdentity.rollout) {
34
+ throw new Error("accepted Codex rollout identity is unavailable");
35
+ }
36
+ acceptedRollout = normalizedRolloutIdentity(options.acceptedIdentity.rollout);
37
+ if (requiredString(options.acceptedIdentity.processUuid, "accepted Codex process UUID") !== inventory.processUuid ||
38
+ requiredString(options.acceptedIdentity.processBirth, "accepted Codex process birth") !== inventory.processBirth) {
39
+ return { status: "not_matched", code: "accepted_root_missing" };
40
+ }
41
+ }
42
+ catch {
43
+ return { status: "unavailable", code: "invalid_inventory" };
44
+ }
45
+ let normalizedScreen;
46
+ try {
47
+ normalizedScreen = normalizedCodexQuestionnaireScreen(options.screen);
48
+ }
49
+ catch {
50
+ return { status: "unavailable", code: "invalid_screen" };
51
+ }
52
+ const acceptedRoots = inventory.roots.filter((root) => root.sessionId.toLowerCase() === acceptedThreadId &&
53
+ sameRolloutFileIdentity(root.rollout, acceptedRollout));
54
+ if (acceptedRoots.length !== 1) {
55
+ return { status: "not_matched", code: "accepted_root_missing" };
56
+ }
57
+ let maxBytes;
58
+ try {
59
+ maxBytes = positiveByteLimit(options.maxBytesPerRollout, CODEX_QUESTIONNAIRE_TAIL_MAX_BYTES, "Codex questionnaire rollout scan limit");
60
+ }
61
+ catch {
62
+ return { status: "unavailable", code: "rollout_scan_unavailable" };
63
+ }
64
+ const pending = [];
65
+ try {
66
+ for (const root of inventory.roots) {
67
+ pending.push(...readPendingCodexRequestUserInput({
68
+ rollout: root.rollout,
69
+ nativeThreadId: root.sessionId,
70
+ maxBytes
71
+ }));
72
+ }
73
+ }
74
+ catch {
75
+ return { status: "unavailable", code: "rollout_scan_unavailable" };
76
+ }
77
+ const acceptedCalls = pending.filter((call) => call.nativeThreadId === acceptedThreadId &&
78
+ call.turnId === acceptanceId &&
79
+ sameRolloutFileIdentity(call.rollout, acceptedRollout));
80
+ if (acceptedCalls.length !== 1) {
81
+ return { status: "not_matched", code: "accepted_call_not_unique" };
82
+ }
83
+ const matching = options.screen.exactShape &&
84
+ normalizedScreen.responseKind !== "confirm" &&
85
+ normalizedScreen.responseKind !== "multi_select"
86
+ ? pending.filter((call) => codexPendingQuestionnaireMatchesScreen(call, normalizedScreen))
87
+ : pending;
88
+ if (matching.length !== 1 || matching[0] !== acceptedCalls[0]) {
89
+ return { status: "not_matched", code: "screen_signature_not_unique" };
90
+ }
91
+ return {
92
+ status: "matched",
93
+ evidenceFingerprint: fingerprint({
94
+ schema: "agent-knock-knock/codex-bound-questionnaire-attribution",
95
+ version: 1,
96
+ native_thread_id: acceptedThreadId,
97
+ turn_id: acceptanceId,
98
+ rollout: {
99
+ device: acceptedRollout.device,
100
+ inode: acceptedRollout.inode,
101
+ path: acceptedRollout.path
102
+ },
103
+ screen: normalizedScreen
104
+ })
105
+ };
106
+ }
107
+ /**
108
+ * Read only the bounded, complete tail of one exact rollout and return async
109
+ * questions belonging to its single currently active native turn. A missing
110
+ * task boundary, a partial record, file drift, or an unsupported payload is a
111
+ * hard absence rather than permission to infer from screen text alone.
112
+ */
113
+ export function readCodexAsyncQuestionDurableEvidence(input) {
114
+ const rollout = normalizedRolloutIdentity(input.rollout);
115
+ const nativeThreadId = exactNativeThreadId(input.nativeThreadId);
116
+ const maxBytes = positiveByteLimit(input.maxBytes, CODEX_ASYNC_QUESTION_TAIL_MAX_BYTES, "Codex async-question rollout scan limit");
117
+ const opened = openExactRollout(rollout);
118
+ try {
119
+ const before = opened.stat;
120
+ assertPrivateRegularFile(before);
121
+ const header = readCodexRolloutHeader(opened.fd, before.size);
122
+ assertExistingCodexRolloutHeader(header, nativeThreadId);
123
+ if (!fileEndsWithNewline(opened.fd, before.size)) {
124
+ throw new Error("Codex async-question rollout has a partial JSONL record");
125
+ }
126
+ const readStart = Math.max(0, before.size - maxBytes);
127
+ const length = before.size - readStart;
128
+ const buffer = Buffer.allocUnsafe(length);
129
+ if (fs.readSync(opened.fd, buffer, 0, length, readStart) !== length) {
130
+ throw new Error("Codex async-question rollout changed while it was read");
131
+ }
132
+ const after = fs.fstatSync(opened.fd);
133
+ if (!sameStableFile(before, after)) {
134
+ throw new Error("Codex async-question rollout changed while it was scanned");
135
+ }
136
+ const atBoundary = readStart === 0 ||
137
+ byteAtOffset(opened.fd, readStart - 1) === 0x0a;
138
+ const firstComplete = atBoundary ? 0 : buffer.indexOf(0x0a) + 1;
139
+ if (firstComplete <= 0 && !atBoundary) {
140
+ throw new Error("Codex async-question rollout record exceeded its bounded tail scan");
141
+ }
142
+ const records = parseCodexJsonlRecords(buffer.subarray(firstComplete), "async-question tail");
143
+ return codexAsyncQuestionEvidenceFromRecords({
144
+ records,
145
+ prefixTruncated: readStart > 0
146
+ });
147
+ }
148
+ finally {
149
+ fs.closeSync(opened.fd);
150
+ }
151
+ }
152
+ function codexAsyncQuestionEvidenceFromRecords(input) {
153
+ const active = activeCodexAsyncQuestionTask(input);
154
+ if (!active)
155
+ return undefined;
156
+ const evidence = [];
157
+ let totalQuestions = 0;
158
+ for (const { value } of input.records.slice(active.startIndex + 1)) {
159
+ const payload = isRecord(value.payload) ? value.payload : undefined;
160
+ if (value.type !== "event_msg" ||
161
+ payload?.type !== "item_completed" ||
162
+ exactNativeThreadId(payload.turn_id) !== active.turnId ||
163
+ !isRecord(payload.item) ||
164
+ payload.item.type !== "AgentMessage" ||
165
+ payload.item.delivery !== "async") {
166
+ continue;
167
+ }
168
+ if (evidence.length >= CODEX_ASYNC_QUESTION_MAX_ITEMS) {
169
+ throw new Error("Codex async-question item count exceeds the safe limit");
170
+ }
171
+ const item = codexAsyncQuestionItemEvidence(payload.item, active.turnId);
172
+ totalQuestions += item.questions.length;
173
+ if (totalQuestions > CODEX_ASYNC_QUESTION_MAX_QUESTIONS) {
174
+ throw new Error("Codex active async-question total exceeds the safe limit");
175
+ }
176
+ evidence.push(item);
177
+ }
178
+ return evidence.length === 0 ? undefined : evidence;
179
+ }
180
+ function activeCodexAsyncQuestionTask(input) {
181
+ let activeTurnId;
182
+ let activeStartIndex = -1;
183
+ let activeClosed = false;
184
+ input.records.forEach(({ value }, index) => {
185
+ const payload = isRecord(value.payload) ? value.payload : undefined;
186
+ if (!payload || value.type !== "event_msg")
187
+ return;
188
+ if (payload.type === "task_started") {
189
+ activeTurnId = exactNativeThreadId(payload.turn_id);
190
+ activeStartIndex = index;
191
+ activeClosed = false;
192
+ return;
193
+ }
194
+ if (activeTurnId &&
195
+ (payload.type === "task_complete" || payload.type === "turn_aborted") &&
196
+ (payload.turn_id === undefined ||
197
+ exactNativeThreadId(payload.turn_id) === activeTurnId)) {
198
+ activeClosed = true;
199
+ }
200
+ });
201
+ if (!activeTurnId || activeStartIndex < 0 || activeClosed) {
202
+ if (input.prefixTruncated && activeStartIndex < 0) {
203
+ throw new Error("Codex async-question tail omitted the active task boundary");
204
+ }
205
+ return undefined;
206
+ }
207
+ return { turnId: activeTurnId, startIndex: activeStartIndex };
208
+ }
209
+ function codexAsyncQuestionItemEvidence(item, turnId) {
210
+ const itemId = requiredString(item.id, "Codex async-question item id");
211
+ const rawQuestions = item.questions;
212
+ if (!Array.isArray(rawQuestions) ||
213
+ rawQuestions.length < 1 ||
214
+ rawQuestions.length > CODEX_ASYNC_QUESTION_MAX_QUESTIONS) {
215
+ throw new Error("Codex async-question count is invalid");
216
+ }
217
+ const questions = rawQuestions.map((question) => {
218
+ if (!isRecord(question)) {
219
+ throw new Error("Codex async-question payload is invalid");
220
+ }
221
+ const title = normalizedCodexQuestionnaireText(question.title, "Codex async-question title");
222
+ if (title.length > CODEX_ASYNC_QUESTION_MAX_TEXT_LENGTH) {
223
+ throw new Error("Codex async-question title exceeds the safe limit");
224
+ }
225
+ const rawOptions = question.options;
226
+ if (rawOptions !== undefined && rawOptions !== null &&
227
+ (!Array.isArray(rawOptions) ||
228
+ rawOptions.length < 1 ||
229
+ rawOptions.length > CODEX_ASYNC_QUESTION_MAX_OPTIONS)) {
230
+ throw new Error("Codex async-question options are invalid");
231
+ }
232
+ const options = rawOptions == null
233
+ ? undefined
234
+ : rawOptions.map((option) => {
235
+ const label = normalizedCodexQuestionnaireText(option, "Codex async-question option");
236
+ if (label.length > CODEX_ASYNC_QUESTION_MAX_TEXT_LENGTH) {
237
+ throw new Error("Codex async-question option exceeds the safe limit");
238
+ }
239
+ return label;
240
+ });
241
+ return {
242
+ title,
243
+ ...(options === undefined ? {} : { options })
244
+ };
245
+ });
246
+ return {
247
+ itemId,
248
+ turnId,
249
+ questions,
250
+ currentIndex: 0,
251
+ remainingCount: questions.length
252
+ };
253
+ }
254
+ function readPendingCodexRequestUserInput(input) {
255
+ const rollout = normalizedRolloutIdentity(input.rollout);
256
+ const nativeThreadId = exactNativeThreadId(input.nativeThreadId);
257
+ const opened = openExactRollout(rollout);
258
+ try {
259
+ const before = opened.stat;
260
+ assertPrivateRegularFile(before);
261
+ const header = readCodexRolloutHeader(opened.fd, before.size);
262
+ assertExistingCodexRolloutHeader(header, nativeThreadId);
263
+ if (!fileEndsWithNewline(opened.fd, before.size)) {
264
+ throw new Error("Codex questionnaire rollout has a partial JSONL record");
265
+ }
266
+ const readStart = Math.max(0, before.size - input.maxBytes);
267
+ const length = before.size - readStart;
268
+ const buffer = Buffer.allocUnsafe(length);
269
+ if (fs.readSync(opened.fd, buffer, 0, length, readStart) !== length) {
270
+ throw new Error("Codex questionnaire rollout changed while it was read");
271
+ }
272
+ const after = fs.fstatSync(opened.fd);
273
+ if (!sameStableFile(before, after)) {
274
+ throw new Error("Codex questionnaire rollout changed while it was scanned");
275
+ }
276
+ const atBoundary = readStart === 0 ||
277
+ byteAtOffset(opened.fd, readStart - 1) === 0x0a;
278
+ const firstComplete = atBoundary ? 0 : buffer.indexOf(0x0a) + 1;
279
+ if (firstComplete <= 0 && !atBoundary) {
280
+ throw new Error("Codex questionnaire rollout record exceeded its bounded tail scan");
281
+ }
282
+ const records = parseCodexJsonlRecords(buffer.subarray(firstComplete), "questionnaire tail");
283
+ return pendingCodexRequestUserInputFromRecords({
284
+ records,
285
+ nativeThreadId,
286
+ rollout,
287
+ prefixTruncated: readStart > 0
288
+ });
289
+ }
290
+ finally {
291
+ fs.closeSync(opened.fd);
292
+ }
293
+ }
294
+ function pendingCodexRequestUserInputFromRecords(input) {
295
+ const calls = [];
296
+ const outputs = new Map();
297
+ const terminalTurns = new Map();
298
+ const unscopedTerminalIndexes = [];
299
+ const startedTurns = [];
300
+ let sawLifecycle = false;
301
+ input.records.forEach(({ value }, index) => {
302
+ const payload = isRecord(value.payload) ? value.payload : undefined;
303
+ if (!payload)
304
+ return;
305
+ if (value.type === "event_msg" &&
306
+ payload.type === "task_started") {
307
+ startedTurns.push({
308
+ index,
309
+ turnId: exactNativeThreadId(payload.turn_id)
310
+ });
311
+ sawLifecycle = true;
312
+ return;
313
+ }
314
+ if (value.type === "event_msg" &&
315
+ (payload.type === "task_complete" || payload.type === "turn_aborted")) {
316
+ const rawTurnId = optionalString(payload.turn_id);
317
+ if (!rawTurnId) {
318
+ unscopedTerminalIndexes.push(index);
319
+ sawLifecycle = true;
320
+ return;
321
+ }
322
+ const turnId = exactNativeThreadId(rawTurnId);
323
+ const indexes = terminalTurns.get(turnId) ?? [];
324
+ indexes.push(index);
325
+ terminalTurns.set(turnId, indexes);
326
+ sawLifecycle = true;
327
+ return;
328
+ }
329
+ if (value.type !== "response_item" ||
330
+ payload.type !== "function_call" ||
331
+ payload.name !== "request_user_input") {
332
+ if (value.type === "response_item" &&
333
+ payload.type === "function_call_output") {
334
+ const callId = requiredString(payload.call_id, "Codex questionnaire output call id");
335
+ const indexes = outputs.get(callId) ?? [];
336
+ indexes.push(index);
337
+ outputs.set(callId, indexes);
338
+ }
339
+ return;
340
+ }
341
+ const metadata = isRecord(payload.internal_chat_message_metadata_passthrough)
342
+ ? payload.internal_chat_message_metadata_passthrough
343
+ : undefined;
344
+ const callId = requiredString(payload.call_id, "Codex questionnaire call id");
345
+ if (calls.some((call) => call.callId === callId)) {
346
+ throw new Error("Codex questionnaire call id is duplicated");
347
+ }
348
+ calls.push({
349
+ index,
350
+ callId,
351
+ turnId: exactNativeThreadId(metadata?.turn_id),
352
+ questions: parseCodexRequestUserInputArguments(payload.arguments)
353
+ });
354
+ });
355
+ const pending = calls.filter((call) => {
356
+ if (outputs.get(call.callId)?.some((index) => index > call.index)) {
357
+ return false;
358
+ }
359
+ if (terminalTurns.get(call.turnId)?.some((index) => index > call.index)) {
360
+ return false;
361
+ }
362
+ if (unscopedTerminalIndexes.some((index) => index > call.index)) {
363
+ return false;
364
+ }
365
+ const precedingStart = latestCodexTaskStartBefore(startedTurns, call.index);
366
+ if (precedingStart && precedingStart.turnId !== call.turnId) {
367
+ return false;
368
+ }
369
+ return !startedTurns.some((started) => started.index > call.index);
370
+ });
371
+ if (input.prefixTruncated &&
372
+ pending.length === 0 &&
373
+ !sawLifecycle) {
374
+ throw new Error("Codex questionnaire tail cannot exclude an omitted pending request");
375
+ }
376
+ return pending.map((call) => ({
377
+ nativeThreadId: input.nativeThreadId,
378
+ rollout: input.rollout,
379
+ turnId: call.turnId,
380
+ questions: call.questions
381
+ }));
382
+ }
383
+ function latestCodexTaskStartBefore(starts, recordIndex) {
384
+ let latest;
385
+ for (const start of starts) {
386
+ if (start.index >= recordIndex)
387
+ break;
388
+ latest = start;
389
+ }
390
+ return latest;
391
+ }
392
+ function parseCodexRequestUserInputArguments(value) {
393
+ if (typeof value !== "string" ||
394
+ value.length === 0 ||
395
+ value.length > CODEX_QUESTIONNAIRE_TAIL_MAX_BYTES) {
396
+ throw new Error("Codex questionnaire arguments are invalid");
397
+ }
398
+ let parsed;
399
+ try {
400
+ parsed = JSON.parse(value);
401
+ }
402
+ catch {
403
+ throw new Error("Codex questionnaire arguments are not valid JSON");
404
+ }
405
+ const questions = isRecord(parsed) ? parsed.questions : undefined;
406
+ if (!Array.isArray(questions) ||
407
+ questions.length === 0 ||
408
+ questions.length > CODEX_QUESTIONNAIRE_MAX_QUESTIONS) {
409
+ throw new Error("Codex questionnaire question count is invalid");
410
+ }
411
+ return questions.map((question) => {
412
+ if (!isRecord(question)) {
413
+ throw new Error("Codex questionnaire question is invalid");
414
+ }
415
+ const rawOptions = question.options;
416
+ if (rawOptions !== undefined &&
417
+ (!Array.isArray(rawOptions) ||
418
+ rawOptions.length > CODEX_QUESTIONNAIRE_MAX_OPTIONS)) {
419
+ throw new Error("Codex questionnaire option count is invalid");
420
+ }
421
+ return {
422
+ prompt: normalizedCodexQuestionnaireText(question.question, "Codex questionnaire prompt"),
423
+ options: (rawOptions ?? []).map((option) => {
424
+ if (!isRecord(option)) {
425
+ throw new Error("Codex questionnaire option is invalid");
426
+ }
427
+ return {
428
+ label: normalizedCodexQuestionnaireText(option.label, "Codex questionnaire option label"),
429
+ ...(option.description === undefined
430
+ ? {}
431
+ : {
432
+ description: normalizedCodexQuestionnaireText(option.description, "Codex questionnaire option description")
433
+ })
434
+ };
435
+ })
436
+ };
437
+ });
438
+ }
439
+ function codexPendingQuestionnaireMatchesScreen(call, screen) {
440
+ if (screen.currentStep < 1 ||
441
+ screen.currentStep > screen.totalSteps ||
442
+ call.questions.length !== screen.totalSteps) {
443
+ return false;
444
+ }
445
+ const question = call.questions[screen.currentStep - 1];
446
+ if (!question)
447
+ return false;
448
+ if (question.prompt !== screen.prompt)
449
+ return false;
450
+ if (screen.responseKind === "free_text")
451
+ return true;
452
+ if (screen.responseKind !== "single_select")
453
+ return false;
454
+ return codexRenderedOptionsMatch(question.options, screen.options ?? []);
455
+ }
456
+ function normalizedCodexQuestionnaireScreen(screen) {
457
+ if (!Number.isSafeInteger(screen.currentStep) ||
458
+ !Number.isSafeInteger(screen.totalSteps) ||
459
+ screen.currentStep < 1 ||
460
+ screen.totalSteps < 1 ||
461
+ screen.currentStep > screen.totalSteps ||
462
+ screen.totalSteps > CODEX_QUESTIONNAIRE_MAX_QUESTIONS ||
463
+ !["single_select", "multi_select", "free_text", "confirm"].includes(screen.responseKind) ||
464
+ (screen.options?.length ?? 0) > CODEX_QUESTIONNAIRE_MAX_OPTIONS) {
465
+ throw new Error("Codex questionnaire screen evidence is invalid");
466
+ }
467
+ return {
468
+ currentStep: screen.currentStep,
469
+ totalSteps: screen.totalSteps,
470
+ prompt: normalizedCodexQuestionnaireText(screen.prompt, "Codex questionnaire screen prompt"),
471
+ responseKind: screen.responseKind,
472
+ ...(screen.options === undefined
473
+ ? {}
474
+ : {
475
+ options: screen.options.map((option) => ({
476
+ label: normalizedCodexQuestionnaireText(option.label, "Codex questionnaire screen option label"),
477
+ ...(option.description === undefined
478
+ ? {}
479
+ : {
480
+ description: normalizedCodexQuestionnaireText(option.description, "Codex questionnaire screen option description")
481
+ })
482
+ }))
483
+ })
484
+ };
485
+ }
486
+ function normalizedCodexQuestionnaireText(value, label) {
487
+ if (typeof value !== "string" ||
488
+ value.length === 0 ||
489
+ value.length > CODEX_QUESTIONNAIRE_MAX_TEXT_LENGTH ||
490
+ value.includes("\0")) {
491
+ throw new Error(`${label} is invalid`);
492
+ }
493
+ const normalized = value.replace(/\s+/gu, " ").trim();
494
+ if (!normalized)
495
+ throw new Error(`${label} is empty`);
496
+ return normalized;
497
+ }
498
+ function codexRenderedOptionsMatch(durable, rendered) {
499
+ if (sameCodexQuestionnaireOptions(durable, rendered))
500
+ return true;
501
+ const canonicalOther = {
502
+ label: CODEX_QUESTIONNAIRE_OTHER_LABEL,
503
+ description: CODEX_QUESTIONNAIRE_OTHER_DESCRIPTION
504
+ };
505
+ if (sameCodexQuestionnaireOptions([...durable, canonicalOther], rendered)) {
506
+ return true;
507
+ }
508
+ return !durable.some((option) => option.label === CODEX_QUESTIONNAIRE_CUSTOM_LABEL) && sameCodexQuestionnaireOptions([
509
+ ...durable,
510
+ {
511
+ label: CODEX_QUESTIONNAIRE_CUSTOM_LABEL,
512
+ description: CODEX_QUESTIONNAIRE_CUSTOM_DESCRIPTION
513
+ },
514
+ canonicalOther
515
+ ], rendered);
516
+ }
517
+ function sameCodexQuestionnaireOptions(left, right) {
518
+ return left.length === right.length && left.every((option, index) => option.label === right[index]?.label &&
519
+ option.description === right[index]?.description);
520
+ }
521
+ //# sourceMappingURL=codex-rollout-interaction-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rollout-interaction-evidence.js","sourceRoot":"","sources":["../../src/codex-rollout-interaction-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type CodexOpenRootRolloutIdentity, type CodexOpenRootRolloutInventory } from "./agent-session-provider.js";
2
+ import { type CodexCandidateSetRolloutAcceptanceAnchor, type CodexRolloutIdentity } from "./terminal-submission-facts.js";
3
+ export declare function validateCodexOpenRootInventoryForAcceptance(value: CodexOpenRootRolloutInventory): CodexOpenRootRolloutInventory;
4
+ export declare function validateCodexRecoveryCandidateForAcceptance(value: CodexOpenRootRolloutIdentity, anchor: CodexCandidateSetRolloutAcceptanceAnchor): CodexOpenRootRolloutIdentity;
5
+ export declare function codexRolloutInodeKey(rollout: CodexRolloutIdentity): string;
@@ -0,0 +1,81 @@
1
+ import { isRecord, } from "./codex-rollout-records.js";
2
+ import { exactNativeThreadId, fingerprint, normalizedRolloutIdentity, requiredString, } from "./terminal-submission-facts.js";
3
+ import path from "node:path";
4
+ export function validateCodexOpenRootInventoryForAcceptance(value) {
5
+ if (!isRecord(value) ||
6
+ value.schema !==
7
+ "agent-knock-knock/codex-open-root-rollout-inventory" ||
8
+ value.version !== 1 ||
9
+ !["verified_absent", "resolved", "unbound"].includes(String(value.status)) ||
10
+ !Number.isSafeInteger(value.pid) ||
11
+ value.pid <= 1 ||
12
+ !Array.isArray(value.roots) ||
13
+ value.roots.length > 128 ||
14
+ !/^[0-9a-f]{64}$/u.test(String(value.inventoryFingerprint))) {
15
+ throw new Error("Codex open-root rollout inventory is invalid");
16
+ }
17
+ requiredString(value.processUuid, "Codex process UUID");
18
+ requiredString(value.processBirth, "Codex process birth");
19
+ if (value.processUuid !==
20
+ `codex-pid:${value.pid}:birth:${value.processBirth}`) {
21
+ throw new Error("Codex open-root rollout inventory process UUID is inconsistent");
22
+ }
23
+ if (value.cwd !== undefined && !path.isAbsolute(value.cwd)) {
24
+ throw new Error("Codex open-root rollout inventory cwd is not absolute");
25
+ }
26
+ if ((value.status === "verified_absent" && value.roots.length !== 0) ||
27
+ (value.status === "resolved" && value.roots.length !== 1) ||
28
+ (value.status === "unbound" &&
29
+ (value.roots.length < 2 ||
30
+ value.reason !== "multiple_open_root_rollouts"))) {
31
+ throw new Error("Codex open-root rollout inventory status is inconsistent");
32
+ }
33
+ const seenThreads = new Set();
34
+ const seenFiles = new Set();
35
+ for (const identity of value.roots) {
36
+ if (!isRecord(identity)) {
37
+ throw new Error("Codex open-root rollout inventory identity is invalid");
38
+ }
39
+ const nativeThreadId = exactNativeThreadId(identity.sessionId);
40
+ if (identity.processUuid !== value.processUuid ||
41
+ identity.processBirth !== value.processBirth ||
42
+ identity.evidence !== "codex_open_root_rollout") {
43
+ throw new Error("Codex open-root rollout inventory has mixed process authority");
44
+ }
45
+ const rollout = normalizedRolloutIdentity(identity.rollout);
46
+ if (seenThreads.has(nativeThreadId) ||
47
+ seenFiles.has(`${rollout.device}:${rollout.inode}`)) {
48
+ throw new Error("Codex open-root rollout inventory is ambiguous");
49
+ }
50
+ seenThreads.add(nativeThreadId);
51
+ seenFiles.add(`${rollout.device}:${rollout.inode}`);
52
+ }
53
+ const { status: _status, inventoryFingerprint, reason: _reason, ...authority } = value;
54
+ if (fingerprint(authority) !== inventoryFingerprint) {
55
+ throw new Error("Codex open-root rollout inventory fingerprint does not match");
56
+ }
57
+ return value;
58
+ }
59
+ export function validateCodexRecoveryCandidateForAcceptance(value, anchor) {
60
+ if (!isRecord(value)) {
61
+ throw new Error("persisted Codex recovery candidate is invalid");
62
+ }
63
+ const sessionId = exactNativeThreadId(value.sessionId);
64
+ const rollout = normalizedRolloutIdentity(value.rollout);
65
+ if (value.processUuid !== anchor.process_uuid ||
66
+ value.processBirth !== anchor.process_birth ||
67
+ value.evidence !== "codex_open_root_rollout") {
68
+ throw new Error("persisted Codex recovery candidate has different process authority");
69
+ }
70
+ return {
71
+ sessionId,
72
+ processUuid: anchor.process_uuid,
73
+ processBirth: anchor.process_birth,
74
+ rollout,
75
+ evidence: "codex_open_root_rollout"
76
+ };
77
+ }
78
+ export function codexRolloutInodeKey(rollout) {
79
+ return `${rollout.device}:${rollout.inode}`;
80
+ }
81
+ //# sourceMappingURL=codex-rollout-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rollout-inventory.js","sourceRoot":"","sources":["../../src/codex-rollout-inventory.ts"],"names":[],"mappings":"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"}