@scotthuang/agent-knock-knock 0.13.15 → 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 (213) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +2 -1
  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/cli-core.js +6 -3
  6. package/dist/src/cli-core.js.map +1 -1
  7. package/dist/src/codex-app-server-interaction-client.js +68 -26
  8. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  9. package/dist/src/codex-app-server-read-client.js +52 -20
  10. package/dist/src/codex-app-server-read-client.js.map +1 -1
  11. package/dist/src/codex-astra-composer-proof.js +1 -1
  12. package/dist/src/codex-astra-composer-proof.js.map +1 -1
  13. package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
  14. package/dist/src/codex-open-rollout-inventory.js +365 -0
  15. package/dist/src/codex-open-rollout-inventory.js.map +1 -0
  16. package/dist/src/codex-paginated-thread-binding.js +1 -1
  17. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  18. package/dist/src/codex-permission-surface.d.ts +23 -0
  19. package/dist/src/codex-permission-surface.js +211 -0
  20. package/dist/src/codex-permission-surface.js.map +1 -0
  21. package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
  22. package/dist/src/codex-rollout-bound-completion.js +357 -0
  23. package/dist/src/codex-rollout-bound-completion.js.map +1 -0
  24. package/dist/src/codex-rollout-file.d.ts +15 -0
  25. package/dist/src/codex-rollout-file.js +98 -0
  26. package/dist/src/codex-rollout-file.js.map +1 -0
  27. package/dist/src/codex-rollout-human-task.d.ts +61 -0
  28. package/dist/src/codex-rollout-human-task.js +555 -0
  29. package/dist/src/codex-rollout-human-task.js.map +1 -0
  30. package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
  31. package/dist/src/codex-rollout-interaction-evidence.js +521 -0
  32. package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
  33. package/dist/src/codex-rollout-inventory.d.ts +5 -0
  34. package/dist/src/codex-rollout-inventory.js +81 -0
  35. package/dist/src/codex-rollout-inventory.js.map +1 -0
  36. package/dist/src/codex-rollout-records.d.ts +49 -0
  37. package/dist/src/codex-rollout-records.js +298 -0
  38. package/dist/src/codex-rollout-records.js.map +1 -0
  39. package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
  40. package/dist/src/codex-sqlite-thread-query.js +440 -0
  41. package/dist/src/codex-sqlite-thread-query.js.map +1 -0
  42. package/dist/src/codex-status-history-navigation.d.ts +1 -1
  43. package/dist/src/codex-status-history-navigation.js +1 -1
  44. package/dist/src/codex-status-history-navigation.js.map +1 -1
  45. package/dist/src/codex-store-adapter.d.ts +3 -50
  46. package/dist/src/codex-store-adapter.js +5 -796
  47. package/dist/src/codex-store-adapter.js.map +1 -1
  48. package/dist/src/codex-terminal-agent-adapter.js +1 -1
  49. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  50. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +7 -136
  51. package/dist/src/native-thread-lifecycle-cli-adapter.js +39 -633
  52. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  53. package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
  54. package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
  55. package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
  56. package/dist/src/semantic-permission-control.d.ts +19 -0
  57. package/dist/src/semantic-permission-control.js +201 -0
  58. package/dist/src/semantic-permission-control.js.map +1 -0
  59. package/dist/src/semantic-tool-command-helpers.d.ts +7 -0
  60. package/dist/src/semantic-tool-command-helpers.js +29 -1
  61. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  62. package/dist/src/semantic-tool-descriptions.d.ts +26 -0
  63. package/dist/src/semantic-tool-descriptions.js +259 -0
  64. package/dist/src/semantic-tool-descriptions.js.map +1 -0
  65. package/dist/src/semantic-tool-list-projection.js +4 -0
  66. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  67. package/dist/src/semantic-tool-presentation.js +5 -2
  68. package/dist/src/semantic-tool-presentation.js.map +1 -1
  69. package/dist/src/semantic-tool-runtime.js +50 -36
  70. package/dist/src/semantic-tool-runtime.js.map +1 -1
  71. package/dist/src/semantic-tool-schemas.d.ts +33 -0
  72. package/dist/src/semantic-tool-schemas.js +165 -31
  73. package/dist/src/semantic-tool-schemas.js.map +1 -1
  74. package/dist/src/terminal-action-contracts.d.ts +4 -0
  75. package/dist/src/terminal-action-contracts.js +695 -0
  76. package/dist/src/terminal-action-contracts.js.map +1 -0
  77. package/dist/src/terminal-action-projection.d.ts +1 -1
  78. package/dist/src/terminal-action-projection.js.map +1 -1
  79. package/dist/src/terminal-agent-bridge.d.ts +3 -0
  80. package/dist/src/terminal-agent-bridge.js +11 -0
  81. package/dist/src/terminal-agent-bridge.js.map +1 -1
  82. package/dist/src/terminal-composer-classifier.d.ts +1 -1
  83. package/dist/src/terminal-composer-classifier.js +31 -5
  84. package/dist/src/terminal-composer-classifier.js.map +1 -1
  85. package/dist/src/terminal-interaction-response-bridge.js +1 -1
  86. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  87. package/dist/src/terminal-list-cli-adapter.js +7 -12
  88. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  89. package/dist/src/terminal-list-renderer.d.ts +8 -2
  90. package/dist/src/terminal-list-renderer.js +37 -400
  91. package/dist/src/terminal-list-renderer.js.map +1 -1
  92. package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
  93. package/dist/src/terminal-model-control-availability.d.ts +1 -1
  94. package/dist/src/terminal-model-control-availability.js +1 -1
  95. package/dist/src/terminal-model-control-availability.js.map +1 -1
  96. package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
  97. package/dist/src/terminal-model-control-cli-adapter.js +669 -0
  98. package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
  99. package/dist/src/terminal-model-control-contract.d.ts +198 -0
  100. package/dist/src/terminal-model-control-contract.js +15 -0
  101. package/dist/src/terminal-model-control-contract.js.map +1 -0
  102. package/dist/src/terminal-model-control-input.d.ts +29 -0
  103. package/dist/src/terminal-model-control-input.js +86 -0
  104. package/dist/src/terminal-model-control-input.js.map +1 -0
  105. package/dist/src/terminal-model-control-profile.d.ts +2 -0
  106. package/dist/src/terminal-model-control-profile.js +6 -0
  107. package/dist/src/terminal-model-control-profile.js.map +1 -1
  108. package/dist/src/terminal-model-control-subject.d.ts +52 -0
  109. package/dist/src/terminal-model-control-subject.js +73 -0
  110. package/dist/src/terminal-model-control-subject.js.map +1 -1
  111. package/dist/src/terminal-model-control-surface.d.ts +82 -0
  112. package/dist/src/terminal-model-control-surface.js +688 -0
  113. package/dist/src/terminal-model-control-surface.js.map +1 -0
  114. package/dist/src/terminal-model-control.d.ts +6 -270
  115. package/dist/src/terminal-model-control.js +11 -988
  116. package/dist/src/terminal-model-control.js.map +1 -1
  117. package/dist/src/terminal-model-selection.d.ts +33 -0
  118. package/dist/src/terminal-model-selection.js +143 -0
  119. package/dist/src/terminal-model-selection.js.map +1 -0
  120. package/dist/src/terminal-monitor-application-service.js +38 -59
  121. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  122. package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
  123. package/dist/src/terminal-monitor-attention-store.js +518 -0
  124. package/dist/src/terminal-monitor-attention-store.js.map +1 -0
  125. package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
  126. package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
  127. package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
  128. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  129. package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
  130. package/dist/src/terminal-monitor-interaction-projection.js +48 -0
  131. package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
  132. package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
  133. package/dist/src/terminal-monitor-startup-recovery.js +767 -0
  134. package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
  135. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
  136. package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
  137. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
  138. package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
  139. package/dist/src/terminal-monitor-state-contract.js +8 -0
  140. package/dist/src/terminal-monitor-state-contract.js.map +1 -0
  141. package/dist/src/terminal-native-control-cli-contract.d.ts +16 -0
  142. package/dist/src/terminal-native-control-cli-contract.js +2 -0
  143. package/dist/src/terminal-native-control-cli-contract.js.map +1 -0
  144. package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
  145. package/dist/src/terminal-native-inspection-bridge.js +7 -646
  146. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  147. package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
  148. package/dist/src/terminal-native-inspection-contract.js +38 -0
  149. package/dist/src/terminal-native-inspection-contract.js.map +1 -0
  150. package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
  151. package/dist/src/terminal-native-inspection-profile.js +185 -0
  152. package/dist/src/terminal-native-inspection-profile.js.map +1 -0
  153. package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
  154. package/dist/src/terminal-native-inspection-proof.js +362 -0
  155. package/dist/src/terminal-native-inspection-proof.js.map +1 -0
  156. package/dist/src/terminal-permission-control-availability.d.ts +31 -0
  157. package/dist/src/terminal-permission-control-availability.js +50 -0
  158. package/dist/src/terminal-permission-control-availability.js.map +1 -0
  159. package/dist/src/terminal-permission-control-bridge.d.ts +16 -0
  160. package/dist/src/terminal-permission-control-bridge.js +93 -0
  161. package/dist/src/terminal-permission-control-bridge.js.map +1 -0
  162. package/dist/src/terminal-permission-control-cli-adapter.d.ts +31 -0
  163. package/dist/src/terminal-permission-control-cli-adapter.js +152 -0
  164. package/dist/src/terminal-permission-control-cli-adapter.js.map +1 -0
  165. package/dist/src/terminal-permission-control-list-projection.d.ts +23 -0
  166. package/dist/src/terminal-permission-control-list-projection.js +47 -0
  167. package/dist/src/terminal-permission-control-list-projection.js.map +1 -0
  168. package/dist/src/terminal-permission-control-runtime.d.ts +28 -0
  169. package/dist/src/terminal-permission-control-runtime.js +88 -0
  170. package/dist/src/terminal-permission-control-runtime.js.map +1 -0
  171. package/dist/src/terminal-permission-control.d.ts +69 -0
  172. package/dist/src/terminal-permission-control.js +217 -0
  173. package/dist/src/terminal-permission-control.js.map +1 -0
  174. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
  175. package/dist/src/terminal-runtime-cli-adapter.js +1 -1
  176. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  177. package/dist/src/terminal-submission-acceptance.d.ts +5 -148
  178. package/dist/src/terminal-submission-acceptance.js +21 -1845
  179. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  180. package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
  181. package/dist/src/terminal-watch-anchor-capture.js +139 -0
  182. package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
  183. package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
  184. package/dist/src/terminal-watch-cli-adapter.js +10 -1992
  185. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  186. package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
  187. package/dist/src/terminal-watch-cli-contract.js +2 -0
  188. package/dist/src/terminal-watch-cli-contract.js.map +1 -0
  189. package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
  190. package/dist/src/terminal-watch-fallback-observation.js +249 -0
  191. package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
  192. package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
  193. package/dist/src/terminal-watch-interaction-observation.js +262 -0
  194. package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
  195. package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
  196. package/dist/src/terminal-watch-observation-adapter.js +307 -0
  197. package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
  198. package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
  199. package/dist/src/terminal-watch-observation-evidence.js +184 -0
  200. package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
  201. package/dist/src/terminal-watch-response-authority.d.ts +6 -0
  202. package/dist/src/terminal-watch-response-authority.js +333 -0
  203. package/dist/src/terminal-watch-response-authority.js.map +1 -0
  204. package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
  205. package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
  206. package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
  207. package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
  208. package/dist/src/terminal-watch-terminal-identity.js +380 -0
  209. package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
  210. package/docs/codex-permissions.md +95 -0
  211. package/openclaw.plugin.json +9 -1
  212. package/package.json +3 -2
  213. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +6 -1
@@ -0,0 +1,211 @@
1
+ import { createHash } from "node:crypto";
2
+ const PICKER_TITLE = "Update Model Permissions";
3
+ const CONFIRM_TITLE = "Enable full access?";
4
+ const FOOTER = "enter select · esc back";
5
+ const MODES = [
6
+ { id: "ask_for_approval", label: "Ask for approval", description: "Read and edit workspace files and run commands, with approval required for internet access or edits outside the workspace" },
7
+ { id: "approve_for_me", label: "Approve for me", description: "Only ask for actions detected as potentially unsafe" },
8
+ { id: "full_access", label: "Full Access", description: "Use with caution: Codex can edit files outside this workspace and access the internet without approval" },
9
+ { id: "read_only", label: "Read Only", description: "Read workspace files, with approval required for edits or internet access" }
10
+ ];
11
+ const FULL_ACCESS_WARNING = "When Codex runs with full access, it can edit any file on your computer and run commands with network, without your approval.";
12
+ const WARNINGS = new Set([
13
+ `${FULL_ACCESS_WARNING} Exercise caution when enabling full access. This significantly increases the risk of data loss, leaks, or unexpected behavior.`,
14
+ ...["Approve for me", "Ask for approval"].map((reviewer) => `${FULL_ACCESS_WARNING} Cyber models carry a higher risk of dangerous actions. Ensure proper safeguards are in place before granting full access. We strongly recommend selecting "${reviewer}" instead${reviewer === "Approve for me" ? ", and customizing the reviewer policy for your use case" : ""}.`)
15
+ ]);
16
+ const RESET = { bold: false, dim: false, reverse: false };
17
+ /** Closed, styled Codex 0.159.2/0.159.3 permission picker grammar. */
18
+ export function observeCodexPermissionSurface(styledScreen) {
19
+ const rawLines = styledScreen.replace(/\r\n?/gu, "\n").split("\n");
20
+ const plainLines = rawLines.map((line) => line.replace(/\x1b\[[0-9;]*m/gu, ""));
21
+ const titles = plainLines.flatMap((line, index) => [PICKER_TITLE, CONFIRM_TITLE].includes(line.trim()) ? [index] : []);
22
+ if (!titles.length)
23
+ return { state: "none" };
24
+ if (titles.length !== 1)
25
+ return ambiguousPermissionSurface("multiple permission surfaces are visible");
26
+ const start = titles[0];
27
+ let end = plainLines.length - 1;
28
+ while (end >= 0 && !plainLines[end].trim())
29
+ end -= 1;
30
+ if (plainLines[end]?.trim() !== FOOTER ||
31
+ plainLines.slice(start, end).some((line) => line.trim() === FOOTER)) {
32
+ return ambiguousPermissionSurface("permission surface has no unique complete closing footer");
33
+ }
34
+ const lines = decodeStyledLines(rawLines.slice(start, end + 1));
35
+ if (!lines)
36
+ return ambiguousPermissionSurface("permission surface contains unsupported terminal controls");
37
+ if (!visibleCells(lines[0]).every(({ style }) => style.bold && !style.dim && !style.reverse)) {
38
+ return ambiguousPermissionSurface("permission title lacks native bold styling");
39
+ }
40
+ const body = lines.slice(1, -1);
41
+ const parsed = parseRows(body);
42
+ if (!parsed || parsed.rows.filter((row) => row.selected).length !== 1 ||
43
+ parsed.rows.some((row, index) => row.number !== index + 1)) {
44
+ return ambiguousPermissionSurface("permission choices are incomplete, duplicated or unselected");
45
+ }
46
+ const selectedIndex = parsed.rows.findIndex((row) => row.selected);
47
+ if (!nativeSelectedStyle(parsed.rows[selectedIndex].line)) {
48
+ return ambiguousPermissionSurface("selected permission choice lacks native highlight styling");
49
+ }
50
+ if (parsed.rows.some((row) => !row.selected && visibleCells(row.line)
51
+ .some(({ style }) => style.reverse))) {
52
+ return ambiguousPermissionSurface("multiple permission choices have selection styling");
53
+ }
54
+ const fingerprint = `sha256:${createHash("sha256")
55
+ .update(rawLines.slice(start, end + 1).join("\n")).digest("hex")}`;
56
+ return permissionRowsSurface(lines[0].plain.trim() === CONFIRM_TITLE, parsed, selectedIndex, fingerprint);
57
+ }
58
+ function permissionRowsSurface(confirmation, parsed, selectedIndex, fingerprint) {
59
+ if (confirmation) {
60
+ if (!WARNINGS.has(normalize(parsed.preamble)) || parsed.rows.length !== 2 ||
61
+ parsed.rows[0].text !== "Yes, continue anyway Apply full access for this session" ||
62
+ parsed.rows[1].text !== "Cancel Go back without enabling full access") {
63
+ return ambiguousPermissionSurface("full access confirmation is incomplete or changed");
64
+ }
65
+ return { state: "full_access_confirmation", selectedIndex, fingerprint };
66
+ }
67
+ if (parsed.preamble.trim())
68
+ return ambiguousPermissionSurface("permission picker has unexpected introductory content");
69
+ const rows = [];
70
+ for (const row of parsed.rows) {
71
+ const mode = MODES.find((candidate) => row.text === `${candidate.label} ${candidate.description}` ||
72
+ row.text === `${candidate.label} (current) ${candidate.description}`);
73
+ if (!mode)
74
+ return ambiguousPermissionSurface("permission picker contains an unknown, disabled or clipped choice");
75
+ rows.push({ ...mode, current: row.text.startsWith(`${mode.label} (current) `), index: rows.length });
76
+ }
77
+ const ids = rows.map((row) => row.id).join(",");
78
+ if (!["ask_for_approval,full_access", "ask_for_approval,approve_for_me,full_access",
79
+ "ask_for_approval,full_access,read_only", "ask_for_approval,approve_for_me,full_access,read_only"].includes(ids) ||
80
+ rows.filter((row) => row.current).length > 1) {
81
+ return ambiguousPermissionSurface("permission picker order or current choice is inconsistent");
82
+ }
83
+ return { state: "picker", rows, selectedIndex, fingerprint };
84
+ }
85
+ function ambiguousPermissionSurface(reason) {
86
+ return { state: "ambiguous", reason };
87
+ }
88
+ function normalize(value) { return value.replace(/\s+/gu, " ").trim(); }
89
+ function visibleCells(line) { return line.cells.filter((cell) => cell.text.trim()); }
90
+ function parseRows(lines) {
91
+ const rows = [];
92
+ const preamble = [];
93
+ for (const line of lines) {
94
+ const value = line.plain.trimEnd();
95
+ if (!value.trim())
96
+ continue;
97
+ const match = /^(?:(›) | )([1-4])\. (\S.*)$/u.exec(value);
98
+ if (match) {
99
+ rows.push({ number: Number(match[2]), selected: Boolean(match[1]), text: normalize(match[3]), line });
100
+ }
101
+ else if (!rows.length) {
102
+ preamble.push(value);
103
+ }
104
+ else if (/^ {4,}\S/u.test(value) && !/[›↑↓]|\(disabled\)|\[…/u.test(value)) {
105
+ rows.at(-1).text += ` ${normalize(value)}`;
106
+ }
107
+ else
108
+ return undefined;
109
+ }
110
+ return { rows, preamble: preamble.join(" ") };
111
+ }
112
+ function nativeSelectedStyle(line) {
113
+ const prefix = /^› [1-4]\. (?:Ask for approval|Approve for me|Full Access|Read Only|Yes, continue anyway|Cancel)(?: \(current\))? {2,}/u.exec(line.plain);
114
+ if (!prefix)
115
+ return false;
116
+ const descriptionOffset = prefix[0].length;
117
+ const marker = line.cells[0];
118
+ // Native SelectionView makes the marker/name bold, then resets bold for
119
+ // the description while retaining the same highlight. Both are required;
120
+ // accepting a bold transcript line alone would erase this distinction.
121
+ return line.cells.every(({ text, style }, index) => !text.trim() ||
122
+ style.bold === (index < descriptionOffset) && !style.dim && (marker.style.reverse
123
+ ? style.reverse
124
+ : !style.reverse && style.fg === "rgb:0,0,46" &&
125
+ ["rgb:99,168,248", "rgb:164,205,251"].includes(style.bg ?? "") &&
126
+ style.bg === marker.style.bg));
127
+ }
128
+ function decodeStyledLines(lines) {
129
+ const result = [];
130
+ let style = RESET;
131
+ for (const raw of lines) {
132
+ const cells = [];
133
+ for (let offset = 0; offset < raw.length;) {
134
+ if (raw[offset] === "\x1b") {
135
+ const sgr = /^\x1b\[([0-9;]*)m/u.exec(raw.slice(offset));
136
+ if (!sgr)
137
+ return undefined;
138
+ const next = applySgr(style, sgr[1]);
139
+ if (!next)
140
+ return undefined;
141
+ style = next;
142
+ offset += sgr[0].length;
143
+ }
144
+ else {
145
+ const text = String.fromCodePoint(raw.codePointAt(offset));
146
+ if (/[\u0000-\u001f\u007f-\u009f]/u.test(text))
147
+ return undefined;
148
+ cells.push({ text, style });
149
+ offset += text.length;
150
+ }
151
+ }
152
+ result.push({ plain: cells.map((cell) => cell.text).join(""), cells });
153
+ }
154
+ return result;
155
+ }
156
+ function applySgr(previous, value) {
157
+ let style = previous;
158
+ const codes = value.split(";").map(Number);
159
+ for (let index = 0; index < codes.length; index += 1) {
160
+ const code = codes[index];
161
+ if (code === 38 || code === 48) {
162
+ const color = extendedSgrColor(codes, index);
163
+ if (!color)
164
+ return undefined;
165
+ style = { ...style, [code === 38 ? "fg" : "bg"]: color.value };
166
+ index += color.consumed;
167
+ }
168
+ else {
169
+ const next = applyBasicSgr(style, code);
170
+ if (!next)
171
+ return undefined;
172
+ style = next;
173
+ }
174
+ }
175
+ return style;
176
+ }
177
+ function extendedSgrColor(codes, index) {
178
+ const kind = codes[index + 1];
179
+ const count = kind === 2 ? 3 : kind === 5 ? 1 : 0;
180
+ const colors = codes.slice(index + 2, index + 2 + count);
181
+ if (!count || colors.length !== count || colors.some((part) => part < 0 || part > 255))
182
+ return undefined;
183
+ return {
184
+ value: `${kind === 2 ? "rgb" : "indexed"}:${colors.join(",")}`,
185
+ consumed: count + 1
186
+ };
187
+ }
188
+ function applyBasicSgr(style, code) {
189
+ if (code === 0)
190
+ return RESET;
191
+ if (code === 1)
192
+ return { ...style, bold: true };
193
+ if (code === 2)
194
+ return { ...style, dim: true };
195
+ if (code === 7)
196
+ return { ...style, reverse: true };
197
+ if (code === 22)
198
+ return { ...style, bold: false, dim: false };
199
+ if (code === 27)
200
+ return { ...style, reverse: false };
201
+ if (code === 39)
202
+ return { ...style, fg: undefined };
203
+ if (code === 49)
204
+ return { ...style, bg: undefined };
205
+ if (code >= 30 && code <= 37 || code >= 90 && code <= 97)
206
+ return { ...style, fg: `ansi:${code}` };
207
+ if (code >= 40 && code <= 47 || code >= 100 && code <= 107)
208
+ return { ...style, bg: `ansi:${code}` };
209
+ return undefined;
210
+ }
211
+ //# sourceMappingURL=codex-permission-surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-permission-surface.js","sourceRoot":"","sources":["../../src/codex-permission-surface.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 {};
@@ -0,0 +1,357 @@
1
+ // Completion proof for one already-accepted legacy Codex turn.
2
+ import { assertPrivateRegularFile, CODEX_COMPLETION_MAX_BYTES, fileEndsWithNewline, openExactRollout, readCodexRolloutHeader, sameRolloutFileIdentity, sameRolloutIdentity, sameStableFile, } from "./codex-rollout-file.js";
3
+ import { assertCodexRolloutLegacyHistory, optionalString, scanExactCodexTaskComplete, truncateCompletionText, } from "./codex-rollout-records.js";
4
+ import { redactString, } from "./runtime-log.js";
5
+ import { exactNativeThreadId, fingerprint, normalizedRolloutIdentity, requiredString, sha256Value, validateCodexRolloutAcceptanceAnchor, validateTerminalSubmissionAcceptanceEvidence, } from "./terminal-submission-facts.js";
6
+ import fs from "node:fs";
7
+ /**
8
+ * Scans the exact rollout and native turn proven by terminal acceptance.
9
+ *
10
+ * Unlike the general Codex context loader, this detector does not retain only
11
+ * a recent-turn window. It starts at the immutable pre-submission byte anchor
12
+ * and matches only the persisted acceptance UUID, so a delayed monitor can
13
+ * recover completion even after later native turns have been appended.
14
+ */
15
+ export function detectCodexBoundRolloutCompletion(options) {
16
+ const prepared = prepareCompletionAcceptance(options);
17
+ if (prepared.status !== "ready")
18
+ return prepared;
19
+ const accepted = validateCompletionAcceptanceMetadata(prepared.context);
20
+ if (accepted.status !== "ready")
21
+ return accepted;
22
+ const bound = bindCompletionRollout(options.currentIdentity, accepted.context);
23
+ if (bound.status !== "ready")
24
+ return bound;
25
+ const context = bound.context;
26
+ const { rollout, rolloutDiagnostics, acceptanceId } = context;
27
+ let opened;
28
+ try {
29
+ opened = openExactRollout(rollout);
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ return codexCompletionFailure(/identity does not match/u.test(message)
34
+ ? "rollout_identity_mismatch"
35
+ : "rollout_unreadable", error, rolloutDiagnostics);
36
+ }
37
+ try {
38
+ const suffix = readCompletionSuffix(opened, context);
39
+ if (suffix.status !== "ready")
40
+ return suffix;
41
+ const scan = scanExactCodexTaskComplete(suffix.context.buffer.toString("utf8"), acceptanceId);
42
+ return projectCompletionScan(scan, context, suffix.context);
43
+ }
44
+ catch (error) {
45
+ return codexCompletionFailure("rollout_unreadable", error, rolloutDiagnostics);
46
+ }
47
+ finally {
48
+ try {
49
+ fs.closeSync(opened.fd);
50
+ }
51
+ catch {
52
+ // The scan result is already fenced by the descriptor identity and both
53
+ // file snapshots. A close failure cannot make it safe to retry a native
54
+ // turn, so do not replace that deterministic result with an exception.
55
+ }
56
+ }
57
+ }
58
+ function prepareCompletionAcceptance(options) {
59
+ let anchor;
60
+ try {
61
+ anchor = validateCodexRolloutAcceptanceAnchor(options.anchor);
62
+ }
63
+ catch (error) {
64
+ return codexCompletionFailure("invalid_anchor", error);
65
+ }
66
+ const initialDiagnostics = {
67
+ detector: "codex_exact_bound_rollout",
68
+ anchor_fingerprint: anchor.anchor_fingerprint,
69
+ scan_start_offset_bytes: anchor.offset_bytes
70
+ };
71
+ let requestHash;
72
+ let acceptance;
73
+ let expectedNativeThreadId;
74
+ try {
75
+ requestHash = sha256Value(options.requestHash, "terminal request hash");
76
+ expectedNativeThreadId = anchor.version === 1
77
+ ? anchor.native_thread_id
78
+ : exactNativeThreadId(options.acceptanceEvidence.nativeThreadId);
79
+ acceptance = validateTerminalSubmissionAcceptanceEvidence(options.acceptanceEvidence, {
80
+ source: "codex_rollout",
81
+ nativeThreadId: expectedNativeThreadId,
82
+ requestHash
83
+ });
84
+ }
85
+ catch (error) {
86
+ return codexCompletionFailure("invalid_acceptance_evidence", error, initialDiagnostics);
87
+ }
88
+ const acceptedCandidate = anchor.version === 3
89
+ ? anchor.candidate_rollouts.find((candidate) => candidate.native_thread_id === expectedNativeThreadId)
90
+ : undefined;
91
+ const scanStartOffset = acceptedCandidate?.offset_bytes ??
92
+ anchor.offset_bytes;
93
+ const baseDiagnostics = {
94
+ ...initialDiagnostics,
95
+ scan_start_offset_bytes: scanStartOffset,
96
+ native_thread_id: expectedNativeThreadId
97
+ };
98
+ return {
99
+ status: "ready",
100
+ context: {
101
+ anchor, acceptance, acceptedCandidate, expectedNativeThreadId,
102
+ scanStartOffset, baseDiagnostics
103
+ }
104
+ };
105
+ }
106
+ function validateCompletionAcceptanceMetadata(context) {
107
+ const { anchor, acceptance, scanStartOffset, baseDiagnostics } = context;
108
+ let acceptanceId;
109
+ try {
110
+ acceptanceId = exactNativeThreadId(acceptance.acceptanceId);
111
+ }
112
+ catch (error) {
113
+ return codexCompletionFailure("acceptance_turn_mismatch", error, baseDiagnostics);
114
+ }
115
+ const diagnostics = {
116
+ ...baseDiagnostics,
117
+ acceptance_id: acceptanceId
118
+ };
119
+ if (acceptance.anchorFingerprint !== anchor.anchor_fingerprint) {
120
+ return codexCompletionFailure("acceptance_anchor_mismatch", new Error("Codex acceptance evidence belongs to a different byte anchor"), diagnostics);
121
+ }
122
+ const evidenceTurnId = optionalString(acceptance.metadata?.turn_id);
123
+ if (evidenceTurnId !== undefined) {
124
+ let normalizedEvidenceTurnId;
125
+ try {
126
+ normalizedEvidenceTurnId = exactNativeThreadId(evidenceTurnId);
127
+ }
128
+ catch (error) {
129
+ return codexCompletionFailure("acceptance_turn_mismatch", error, diagnostics);
130
+ }
131
+ if (normalizedEvidenceTurnId !== acceptanceId) {
132
+ return codexCompletionFailure("acceptance_turn_mismatch", new Error("Codex acceptance metadata names a different native turn"), diagnostics);
133
+ }
134
+ }
135
+ let evidenceAnchorOffset;
136
+ try {
137
+ evidenceAnchorOffset = optionalSafeOffset(acceptance.metadata?.anchor_offset_bytes);
138
+ }
139
+ catch (error) {
140
+ return codexCompletionFailure("invalid_acceptance_evidence", error, diagnostics);
141
+ }
142
+ if (evidenceAnchorOffset !== undefined &&
143
+ evidenceAnchorOffset !== scanStartOffset) {
144
+ return codexCompletionFailure("acceptance_anchor_mismatch", new Error("Codex acceptance evidence has a different byte offset"), diagnostics);
145
+ }
146
+ return {
147
+ status: "ready",
148
+ context: { ...context, acceptanceId, diagnostics }
149
+ };
150
+ }
151
+ function bindCompletionRollout(current, context) {
152
+ const { anchor, acceptedCandidate, expectedNativeThreadId, diagnostics } = context;
153
+ try {
154
+ if (exactNativeThreadId(current.sessionId) !== expectedNativeThreadId ||
155
+ requiredString(current.processUuid, "Codex process UUID") !==
156
+ anchor.process_uuid ||
157
+ requiredString(current.processBirth, "Codex process birth") !==
158
+ anchor.process_birth) {
159
+ throw new Error("Codex process or native thread identity changed during completion polling");
160
+ }
161
+ }
162
+ catch (error) {
163
+ return codexCompletionFailure("binding_identity_mismatch", error, diagnostics);
164
+ }
165
+ if (!current.rollout) {
166
+ return codexCompletionFailure("rollout_identity_mismatch", new Error("the accepted Codex Turn lost its persisted exact rollout identity"), diagnostics);
167
+ }
168
+ let rollout;
169
+ try {
170
+ rollout = normalizedRolloutIdentity(current.rollout);
171
+ }
172
+ catch (error) {
173
+ return codexCompletionFailure("rollout_identity_mismatch", error, diagnostics);
174
+ }
175
+ const rolloutDiagnostics = {
176
+ ...diagnostics,
177
+ rollout_identity_fingerprint: fingerprint(rollout)
178
+ };
179
+ const anchoredRollout = anchor.version === 3
180
+ ? acceptedCandidate?.rollout
181
+ : anchor.rollout;
182
+ const anchoredRolloutMatches = !anchoredRollout || (anchor.version === 3
183
+ ? sameRolloutFileIdentity(anchoredRollout, rollout)
184
+ : sameRolloutIdentity(anchoredRollout, rollout));
185
+ if (!anchoredRolloutMatches) {
186
+ return codexCompletionFailure("rollout_identity_mismatch", new Error("Codex rollout identity changed after terminal acceptance"), rolloutDiagnostics);
187
+ }
188
+ return {
189
+ status: "ready",
190
+ context: { ...context, rollout, rolloutDiagnostics }
191
+ };
192
+ }
193
+ function readCompletionSuffix(opened, context) {
194
+ const { acceptance, scanStartOffset, rolloutDiagnostics } = context;
195
+ const before = opened.stat;
196
+ try {
197
+ assertPrivateRegularFile(before);
198
+ }
199
+ catch (error) {
200
+ return codexCompletionFailure("rollout_unreadable", error, rolloutDiagnostics);
201
+ }
202
+ let evidenceEndOffset;
203
+ try {
204
+ evidenceEndOffset = optionalSafeOffset(acceptance.metadata?.observed_end_offset_bytes);
205
+ }
206
+ catch (error) {
207
+ return codexCompletionFailure("invalid_acceptance_evidence", error, rolloutDiagnostics);
208
+ }
209
+ if (before.size < scanStartOffset ||
210
+ (evidenceEndOffset !== undefined && before.size < evidenceEndOffset)) {
211
+ return codexCompletionFailure("rollout_truncated", new Error("Codex rollout was truncated after native acceptance"), {
212
+ ...rolloutDiagnostics,
213
+ observed_end_offset_bytes: before.size
214
+ });
215
+ }
216
+ const bytesToRead = before.size - scanStartOffset;
217
+ const observedDiagnostics = {
218
+ ...rolloutDiagnostics,
219
+ observed_end_offset_bytes: before.size
220
+ };
221
+ if (bytesToRead > CODEX_COMPLETION_MAX_BYTES) {
222
+ return codexCompletionFailure("scan_limit_exceeded", new Error("Codex bound completion suffix exceeded the safe scan limit"), observedDiagnostics);
223
+ }
224
+ try {
225
+ if (before.size > 0) {
226
+ assertCodexRolloutLegacyHistory(readCodexRolloutHeader(opened.fd, before.size));
227
+ }
228
+ }
229
+ catch (error) {
230
+ return codexCompletionFailure("rollout_unreadable", error, observedDiagnostics);
231
+ }
232
+ if (bytesToRead === 0) {
233
+ return codexCompletionPending("exact_turn_not_complete", observedDiagnostics, "no post-anchor Codex rollout records are available yet");
234
+ }
235
+ if (!fileEndsWithNewline(opened.fd, before.size)) {
236
+ return codexCompletionPending("partial_rollout_record", observedDiagnostics, "the exact Codex rollout ends with a partial JSONL record");
237
+ }
238
+ const buffer = Buffer.allocUnsafe(bytesToRead);
239
+ const bytesRead = fs.readSync(opened.fd, buffer, 0, bytesToRead, scanStartOffset);
240
+ const after = fs.fstatSync(opened.fd);
241
+ if (bytesRead !== bytesToRead || !sameStableFile(before, after)) {
242
+ return codexCompletionPending("rollout_changed_during_scan", observedDiagnostics, "the exact Codex rollout changed while completion was scanned");
243
+ }
244
+ return {
245
+ status: "ready",
246
+ context: { buffer, observedEndOffsetBytes: before.size, observedDiagnostics }
247
+ };
248
+ }
249
+ function projectCompletionScan(scan, context, suffix) {
250
+ const { acceptanceId, expectedNativeThreadId, anchor, rolloutDiagnostics, scanStartOffset } = context;
251
+ const { observedDiagnostics, observedEndOffsetBytes } = suffix;
252
+ const scanDiagnostics = {
253
+ ...observedDiagnostics,
254
+ scanned_records: scan.scannedRecords,
255
+ observed_task_complete_records: scan.observedTaskCompleteRecords,
256
+ observed_turn_aborted_records: scan.observedTurnAbortedRecords
257
+ };
258
+ if (scan.status === "failure") {
259
+ return codexCompletionFailure(scan.code, scan.detail, scanDiagnostics);
260
+ }
261
+ if (scan.status === "pending") {
262
+ return codexCompletionPending("exact_turn_not_complete", scanDiagnostics, "the accepted Codex native turn has no durable task_complete record yet");
263
+ }
264
+ if (scan.status === "aborted") {
265
+ const reason = truncateCompletionText(redactString(scan.reason ?? "interrupted"));
266
+ const completion = {
267
+ source: "durable",
268
+ outcome: "failure",
269
+ text: truncateCompletionText(redactString(`Codex task stopped: ${reason}`)),
270
+ ...(scan.timestamp ? { timestamp: scan.timestamp } : {}),
271
+ id: acceptanceId,
272
+ confidence: "high",
273
+ metadata: {
274
+ match: "bound_rollout_turn_aborted",
275
+ turn_id: acceptanceId,
276
+ native_thread_id: expectedNativeThreadId,
277
+ anchor_fingerprint: anchor.anchor_fingerprint,
278
+ rollout_identity_fingerprint: rolloutDiagnostics.rollout_identity_fingerprint,
279
+ abort_reason: reason,
280
+ scan_start_offset_bytes: scanStartOffset,
281
+ observed_end_offset_bytes: observedEndOffsetBytes,
282
+ scanned_records: scan.scannedRecords,
283
+ observed_task_complete_records: scan.observedTaskCompleteRecords,
284
+ observed_turn_aborted_records: scan.observedTurnAbortedRecords
285
+ }
286
+ };
287
+ return {
288
+ status: "completed",
289
+ completion,
290
+ diagnostics: {
291
+ ...scanDiagnostics,
292
+ code: "abort_found"
293
+ }
294
+ };
295
+ }
296
+ const completion = {
297
+ source: "durable",
298
+ outcome: "success",
299
+ text: truncateCompletionText(redactString(scan.text)),
300
+ ...(scan.timestamp ? { timestamp: scan.timestamp } : {}),
301
+ id: acceptanceId,
302
+ confidence: "high",
303
+ metadata: {
304
+ match: "bound_rollout_task_complete",
305
+ turn_id: acceptanceId,
306
+ native_thread_id: expectedNativeThreadId,
307
+ anchor_fingerprint: anchor.anchor_fingerprint,
308
+ rollout_identity_fingerprint: rolloutDiagnostics.rollout_identity_fingerprint,
309
+ scan_start_offset_bytes: scanStartOffset,
310
+ observed_end_offset_bytes: observedEndOffsetBytes,
311
+ scanned_records: scan.scannedRecords,
312
+ observed_task_complete_records: scan.observedTaskCompleteRecords,
313
+ observed_turn_aborted_records: scan.observedTurnAbortedRecords
314
+ }
315
+ };
316
+ return {
317
+ status: "completed",
318
+ completion,
319
+ diagnostics: {
320
+ ...scanDiagnostics,
321
+ code: "completion_found"
322
+ }
323
+ };
324
+ }
325
+ function codexCompletionPending(code, diagnostics, detail) {
326
+ return {
327
+ status: "pending",
328
+ diagnostics: {
329
+ ...diagnostics,
330
+ code,
331
+ detail
332
+ }
333
+ };
334
+ }
335
+ function codexCompletionFailure(code, error, diagnostics = {
336
+ detector: "codex_exact_bound_rollout"
337
+ }) {
338
+ const detail = error instanceof Error ? error.message : String(error);
339
+ return {
340
+ status: "failure",
341
+ diagnostics: {
342
+ ...diagnostics,
343
+ code,
344
+ detail: truncateCompletionText(redactString(detail))
345
+ }
346
+ };
347
+ }
348
+ function optionalSafeOffset(value) {
349
+ if (value === undefined) {
350
+ return undefined;
351
+ }
352
+ if (!Number.isSafeInteger(value) || Number(value) < 0) {
353
+ throw new Error("Codex acceptance evidence byte offset is invalid");
354
+ }
355
+ return Number(value);
356
+ }
357
+ //# sourceMappingURL=codex-rollout-bound-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rollout-bound-completion.js","sourceRoot":"","sources":["../../src/codex-rollout-bound-completion.ts"],"names":[],"mappings":"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"}