@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.
- package/CHANGELOG.md +13 -0
- package/README.md +2 -1
- package/dist/src/claude-terminal-agent-adapter.js +1 -1
- package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
- package/dist/src/cli-core.js +6 -3
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/codex-app-server-interaction-client.js +68 -26
- package/dist/src/codex-app-server-interaction-client.js.map +1 -1
- package/dist/src/codex-app-server-read-client.js +52 -20
- package/dist/src/codex-app-server-read-client.js.map +1 -1
- package/dist/src/codex-astra-composer-proof.js +1 -1
- package/dist/src/codex-astra-composer-proof.js.map +1 -1
- package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
- package/dist/src/codex-open-rollout-inventory.js +365 -0
- package/dist/src/codex-open-rollout-inventory.js.map +1 -0
- package/dist/src/codex-paginated-thread-binding.js +1 -1
- package/dist/src/codex-paginated-thread-binding.js.map +1 -1
- package/dist/src/codex-permission-surface.d.ts +23 -0
- package/dist/src/codex-permission-surface.js +211 -0
- package/dist/src/codex-permission-surface.js.map +1 -0
- package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
- package/dist/src/codex-rollout-bound-completion.js +357 -0
- package/dist/src/codex-rollout-bound-completion.js.map +1 -0
- package/dist/src/codex-rollout-file.d.ts +15 -0
- package/dist/src/codex-rollout-file.js +98 -0
- package/dist/src/codex-rollout-file.js.map +1 -0
- package/dist/src/codex-rollout-human-task.d.ts +61 -0
- package/dist/src/codex-rollout-human-task.js +555 -0
- package/dist/src/codex-rollout-human-task.js.map +1 -0
- package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
- package/dist/src/codex-rollout-interaction-evidence.js +521 -0
- package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
- package/dist/src/codex-rollout-inventory.d.ts +5 -0
- package/dist/src/codex-rollout-inventory.js +81 -0
- package/dist/src/codex-rollout-inventory.js.map +1 -0
- package/dist/src/codex-rollout-records.d.ts +49 -0
- package/dist/src/codex-rollout-records.js +298 -0
- package/dist/src/codex-rollout-records.js.map +1 -0
- package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
- package/dist/src/codex-sqlite-thread-query.js +440 -0
- package/dist/src/codex-sqlite-thread-query.js.map +1 -0
- package/dist/src/codex-status-history-navigation.d.ts +1 -1
- package/dist/src/codex-status-history-navigation.js +1 -1
- package/dist/src/codex-status-history-navigation.js.map +1 -1
- package/dist/src/codex-store-adapter.d.ts +3 -50
- package/dist/src/codex-store-adapter.js +5 -796
- package/dist/src/codex-store-adapter.js.map +1 -1
- package/dist/src/codex-terminal-agent-adapter.js +1 -1
- package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
- package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +7 -136
- package/dist/src/native-thread-lifecycle-cli-adapter.js +39 -633
- package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
- package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
- package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
- package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
- package/dist/src/semantic-permission-control.d.ts +19 -0
- package/dist/src/semantic-permission-control.js +201 -0
- package/dist/src/semantic-permission-control.js.map +1 -0
- package/dist/src/semantic-tool-command-helpers.d.ts +7 -0
- package/dist/src/semantic-tool-command-helpers.js +29 -1
- package/dist/src/semantic-tool-command-helpers.js.map +1 -1
- package/dist/src/semantic-tool-descriptions.d.ts +26 -0
- package/dist/src/semantic-tool-descriptions.js +259 -0
- package/dist/src/semantic-tool-descriptions.js.map +1 -0
- package/dist/src/semantic-tool-list-projection.js +4 -0
- package/dist/src/semantic-tool-list-projection.js.map +1 -1
- package/dist/src/semantic-tool-presentation.js +5 -2
- package/dist/src/semantic-tool-presentation.js.map +1 -1
- package/dist/src/semantic-tool-runtime.js +50 -36
- package/dist/src/semantic-tool-runtime.js.map +1 -1
- package/dist/src/semantic-tool-schemas.d.ts +33 -0
- package/dist/src/semantic-tool-schemas.js +165 -31
- package/dist/src/semantic-tool-schemas.js.map +1 -1
- package/dist/src/terminal-action-contracts.d.ts +4 -0
- package/dist/src/terminal-action-contracts.js +695 -0
- package/dist/src/terminal-action-contracts.js.map +1 -0
- package/dist/src/terminal-action-projection.d.ts +1 -1
- package/dist/src/terminal-action-projection.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +3 -0
- package/dist/src/terminal-agent-bridge.js +11 -0
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-composer-classifier.d.ts +1 -1
- package/dist/src/terminal-composer-classifier.js +31 -5
- package/dist/src/terminal-composer-classifier.js.map +1 -1
- package/dist/src/terminal-interaction-response-bridge.js +1 -1
- package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.js +7 -12
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-renderer.d.ts +8 -2
- package/dist/src/terminal-list-renderer.js +37 -400
- package/dist/src/terminal-list-renderer.js.map +1 -1
- package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
- package/dist/src/terminal-model-control-availability.d.ts +1 -1
- package/dist/src/terminal-model-control-availability.js +1 -1
- package/dist/src/terminal-model-control-availability.js.map +1 -1
- package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
- package/dist/src/terminal-model-control-cli-adapter.js +669 -0
- package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
- package/dist/src/terminal-model-control-contract.d.ts +198 -0
- package/dist/src/terminal-model-control-contract.js +15 -0
- package/dist/src/terminal-model-control-contract.js.map +1 -0
- package/dist/src/terminal-model-control-input.d.ts +29 -0
- package/dist/src/terminal-model-control-input.js +86 -0
- package/dist/src/terminal-model-control-input.js.map +1 -0
- package/dist/src/terminal-model-control-profile.d.ts +2 -0
- package/dist/src/terminal-model-control-profile.js +6 -0
- package/dist/src/terminal-model-control-profile.js.map +1 -1
- package/dist/src/terminal-model-control-subject.d.ts +52 -0
- package/dist/src/terminal-model-control-subject.js +73 -0
- package/dist/src/terminal-model-control-subject.js.map +1 -1
- package/dist/src/terminal-model-control-surface.d.ts +82 -0
- package/dist/src/terminal-model-control-surface.js +688 -0
- package/dist/src/terminal-model-control-surface.js.map +1 -0
- package/dist/src/terminal-model-control.d.ts +6 -270
- package/dist/src/terminal-model-control.js +11 -988
- package/dist/src/terminal-model-control.js.map +1 -1
- package/dist/src/terminal-model-selection.d.ts +33 -0
- package/dist/src/terminal-model-selection.js +143 -0
- package/dist/src/terminal-model-selection.js.map +1 -0
- package/dist/src/terminal-monitor-application-service.js +38 -59
- package/dist/src/terminal-monitor-application-service.js.map +1 -1
- package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
- package/dist/src/terminal-monitor-attention-store.js +518 -0
- package/dist/src/terminal-monitor-attention-store.js.map +1 -0
- package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
- package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
- package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
- package/dist/src/terminal-monitor-interaction-projection.js +48 -0
- package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
- package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
- package/dist/src/terminal-monitor-startup-recovery.js +767 -0
- package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
- package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
- package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
- package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
- package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
- package/dist/src/terminal-monitor-state-contract.js +8 -0
- package/dist/src/terminal-monitor-state-contract.js.map +1 -0
- package/dist/src/terminal-native-control-cli-contract.d.ts +16 -0
- package/dist/src/terminal-native-control-cli-contract.js +2 -0
- package/dist/src/terminal-native-control-cli-contract.js.map +1 -0
- package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
- package/dist/src/terminal-native-inspection-bridge.js +7 -646
- package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
- package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
- package/dist/src/terminal-native-inspection-contract.js +38 -0
- package/dist/src/terminal-native-inspection-contract.js.map +1 -0
- package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
- package/dist/src/terminal-native-inspection-profile.js +185 -0
- package/dist/src/terminal-native-inspection-profile.js.map +1 -0
- package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
- package/dist/src/terminal-native-inspection-proof.js +362 -0
- package/dist/src/terminal-native-inspection-proof.js.map +1 -0
- package/dist/src/terminal-permission-control-availability.d.ts +31 -0
- package/dist/src/terminal-permission-control-availability.js +50 -0
- package/dist/src/terminal-permission-control-availability.js.map +1 -0
- package/dist/src/terminal-permission-control-bridge.d.ts +16 -0
- package/dist/src/terminal-permission-control-bridge.js +93 -0
- package/dist/src/terminal-permission-control-bridge.js.map +1 -0
- package/dist/src/terminal-permission-control-cli-adapter.d.ts +31 -0
- package/dist/src/terminal-permission-control-cli-adapter.js +152 -0
- package/dist/src/terminal-permission-control-cli-adapter.js.map +1 -0
- package/dist/src/terminal-permission-control-list-projection.d.ts +23 -0
- package/dist/src/terminal-permission-control-list-projection.js +47 -0
- package/dist/src/terminal-permission-control-list-projection.js.map +1 -0
- package/dist/src/terminal-permission-control-runtime.d.ts +28 -0
- package/dist/src/terminal-permission-control-runtime.js +88 -0
- package/dist/src/terminal-permission-control-runtime.js.map +1 -0
- package/dist/src/terminal-permission-control.d.ts +69 -0
- package/dist/src/terminal-permission-control.js +217 -0
- package/dist/src/terminal-permission-control.js.map +1 -0
- package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
- package/dist/src/terminal-runtime-cli-adapter.js +1 -1
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
- package/dist/src/terminal-submission-acceptance.d.ts +5 -148
- package/dist/src/terminal-submission-acceptance.js +21 -1845
- package/dist/src/terminal-submission-acceptance.js.map +1 -1
- package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
- package/dist/src/terminal-watch-anchor-capture.js +139 -0
- package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
- package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
- package/dist/src/terminal-watch-cli-adapter.js +10 -1992
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
- package/dist/src/terminal-watch-cli-contract.js +2 -0
- package/dist/src/terminal-watch-cli-contract.js.map +1 -0
- package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
- package/dist/src/terminal-watch-fallback-observation.js +249 -0
- package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
- package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
- package/dist/src/terminal-watch-interaction-observation.js +262 -0
- package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
- package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
- package/dist/src/terminal-watch-observation-adapter.js +307 -0
- package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
- package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
- package/dist/src/terminal-watch-observation-evidence.js +184 -0
- package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
- package/dist/src/terminal-watch-response-authority.d.ts +6 -0
- package/dist/src/terminal-watch-response-authority.js +333 -0
- package/dist/src/terminal-watch-response-authority.js.map +1 -0
- package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
- package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
- package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
- package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
- package/dist/src/terminal-watch-terminal-identity.js +380 -0
- package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
- package/docs/codex-permissions.md +95 -0
- package/openclaw.plugin.json +9 -1
- package/package.json +3 -2
- 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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"}
|