@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,555 @@
|
|
|
1
|
+
// Observation of exact Codex tasks started by the user in the TUI.
|
|
2
|
+
import { assertPrivateRegularFile, byteAtOffset, CODEX_COMPLETION_MAX_BYTES, fileEndsWithNewline, openExactRollout, readCodexRolloutHeader, readExactBytes, sameRolloutIdentity, sameStableFile, } from "./codex-rollout-file.js";
|
|
3
|
+
import { assertCodexRolloutLegacyHistory, assertExistingCodexRolloutHeader, CODEX_VERSION_PATTERN, exactCodexUserResponseText, fingerprintText, isRecord, isRetryableProviderIoError, optionalString, parseCodexJsonlRecords, positiveByteLimit, safeByteOffset, scanExactCodexTaskComplete, truncateCompletionText, } from "./codex-rollout-records.js";
|
|
4
|
+
import { redactString, } from "./runtime-log.js";
|
|
5
|
+
import { exactNativeThreadId, fingerprint, normalizedRolloutIdentity, requiredString, sha256Value, validTimestamp, } from "./terminal-submission-facts.js";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
const CODEX_ACTIVE_TASK_SCAN_CHUNK_BYTES = 64 * 1024;
|
|
9
|
+
const CODEX_ACTIVE_TASK_MAX_RECORD_BYTES = 16 * 1024 * 1024;
|
|
10
|
+
/**
|
|
11
|
+
* Capture the latest active native task in an exact open Codex rollout.
|
|
12
|
+
* This is intentionally separate from the pre-send acceptance anchor: all
|
|
13
|
+
* task-start and root-user evidence already exists when this function runs.
|
|
14
|
+
*/
|
|
15
|
+
export function captureCodexHumanStartedActiveTaskAnchor(options) {
|
|
16
|
+
const current = options.currentIdentity;
|
|
17
|
+
const nativeThreadId = exactNativeThreadId(current.sessionId);
|
|
18
|
+
const processUuid = requiredString(current.processUuid, "Codex process UUID");
|
|
19
|
+
const processBirth = requiredString(current.processBirth, "Codex process birth");
|
|
20
|
+
if (!current.rollout) {
|
|
21
|
+
throw new Error("the active Codex task has no exact rollout identity");
|
|
22
|
+
}
|
|
23
|
+
const rollout = normalizedRolloutIdentity(current.rollout);
|
|
24
|
+
const maxBytes = positiveByteLimit(options.maxBytes, CODEX_COMPLETION_MAX_BYTES, "Codex active-task capture");
|
|
25
|
+
const opened = openExactRollout(rollout);
|
|
26
|
+
try {
|
|
27
|
+
const before = opened.stat;
|
|
28
|
+
assertPrivateRegularFile(before);
|
|
29
|
+
if (before.size === 0) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (!fileEndsWithNewline(opened.fd, before.size)) {
|
|
33
|
+
throw new Error("Codex active-task rollout has an incomplete JSONL tail; retry");
|
|
34
|
+
}
|
|
35
|
+
const header = readCodexRolloutHeader(opened.fd, before.size);
|
|
36
|
+
const codexVersion = assertExistingCodexRolloutHeader(header, nativeThreadId);
|
|
37
|
+
const active = latestCodexHumanStartedActiveTask(opened.fd, before.size, maxBytes);
|
|
38
|
+
const after = fs.fstatSync(opened.fd);
|
|
39
|
+
if (!sameStableFile(before, after)) {
|
|
40
|
+
throw new Error("Codex active-task rollout changed while it was captured; retry");
|
|
41
|
+
}
|
|
42
|
+
if (!active) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const base = {
|
|
46
|
+
schema: "agent-knock-knock/codex-human-started-active-task-anchor",
|
|
47
|
+
version: 1,
|
|
48
|
+
native_thread_id: nativeThreadId,
|
|
49
|
+
process_uuid: processUuid,
|
|
50
|
+
process_birth: processBirth,
|
|
51
|
+
captured_at: (options.now ?? new Date()).toISOString(),
|
|
52
|
+
rollout,
|
|
53
|
+
turn_id: active.turnId,
|
|
54
|
+
request_hash: active.requestHash,
|
|
55
|
+
codex_version: codexVersion,
|
|
56
|
+
task_started_offset_bytes: active.taskStartedOffsetBytes,
|
|
57
|
+
user_message_offset_bytes: active.userMessageOffsetBytes,
|
|
58
|
+
observed_end_offset_bytes: before.size
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
...base,
|
|
62
|
+
anchor_fingerprint: fingerprint(base)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
fs.closeSync(opened.fd);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Observe only the exact human-started task named by the persisted anchor. */
|
|
70
|
+
export function observeCodexHumanStartedActiveTask(options) {
|
|
71
|
+
try {
|
|
72
|
+
const anchor = validateCodexHumanStartedActiveTaskAnchor(options.anchor);
|
|
73
|
+
const maxBytes = positiveByteLimit(options.maxBytes, CODEX_COMPLETION_MAX_BYTES, "Codex active-task observation");
|
|
74
|
+
const resumeOffsetBytes = codexActiveTaskResumeOffset(anchor, options.resumeOffsetBytes);
|
|
75
|
+
const opened = openExactRollout(anchor.rollout);
|
|
76
|
+
try {
|
|
77
|
+
const before = opened.stat;
|
|
78
|
+
assertPrivateRegularFile(before);
|
|
79
|
+
if (before.size < anchor.observed_end_offset_bytes) {
|
|
80
|
+
throw new Error("Codex active-task rollout was truncated after capture");
|
|
81
|
+
}
|
|
82
|
+
if (before.size < resumeOffsetBytes) {
|
|
83
|
+
throw new Error("Codex active-task rollout was truncated after observation");
|
|
84
|
+
}
|
|
85
|
+
assertCodexRolloutLegacyHistory(readCodexRolloutHeader(opened.fd, before.size));
|
|
86
|
+
assertCodexActiveTaskResumeBoundary(opened.fd, resumeOffsetBytes);
|
|
87
|
+
const availableBytes = before.size - resumeOffsetBytes;
|
|
88
|
+
const bytesToRead = Math.min(availableBytes, maxBytes);
|
|
89
|
+
if (bytesToRead === 0) {
|
|
90
|
+
assertCodexHumanStartedIdentity(anchor, options.currentIdentity);
|
|
91
|
+
return {
|
|
92
|
+
status: "pending",
|
|
93
|
+
observedEndOffsetBytes: before.size,
|
|
94
|
+
safeResumeOffsetBytes: resumeOffsetBytes
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const buffer = readExactBytes(opened.fd, resumeOffsetBytes, bytesToRead);
|
|
98
|
+
const completeLength = completeJsonlPrefixLength(buffer);
|
|
99
|
+
if (completeLength === 0 && availableBytes > maxBytes) {
|
|
100
|
+
throw new Error("Codex active-task JSONL record exceeded the bounded read limit");
|
|
101
|
+
}
|
|
102
|
+
const completeBuffer = buffer.subarray(0, completeLength);
|
|
103
|
+
const safeResumeOffsetBytes = resumeOffsetBytes + completeLength;
|
|
104
|
+
const after = fs.fstatSync(opened.fd);
|
|
105
|
+
if (!sameStableFile(before, after)) {
|
|
106
|
+
assertCodexHumanStartedIdentity(anchor, options.currentIdentity);
|
|
107
|
+
return {
|
|
108
|
+
status: "pending",
|
|
109
|
+
observedEndOffsetBytes: after.size,
|
|
110
|
+
safeResumeOffsetBytes: resumeOffsetBytes
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const suffixRecords = parseCodexJsonlRecords(completeBuffer, "active-task suffix");
|
|
114
|
+
const laterTaskOffset = suffixRecords.find(({ value }) => isLaterCodexHumanTaskStartedRecord(value))?.offsetBytes;
|
|
115
|
+
const exactCompletionOffset = suffixRecords.find(({ value }) => isExactCodexTaskCompleteRecord(value, anchor.turn_id))?.offsetBytes;
|
|
116
|
+
const exactAbortRecords = suffixRecords.filter(({ value }) => isExactCodexTurnAbortedRecord(value, anchor.turn_id));
|
|
117
|
+
if (exactAbortRecords.length > 1) {
|
|
118
|
+
throw new Error("the exact Codex active task has duplicate turn_aborted records");
|
|
119
|
+
}
|
|
120
|
+
const exactAbort = exactAbortRecords[0];
|
|
121
|
+
const exactSettlementOffset = [
|
|
122
|
+
exactCompletionOffset,
|
|
123
|
+
exactAbort?.offsetBytes
|
|
124
|
+
].filter((offset) => offset !== undefined)
|
|
125
|
+
.sort((left, right) => left - right)[0];
|
|
126
|
+
if (laterTaskOffset !== undefined &&
|
|
127
|
+
(exactSettlementOffset === undefined ||
|
|
128
|
+
laterTaskOffset < exactSettlementOffset)) {
|
|
129
|
+
throw new Error("a later Codex human task appeared after the active-task anchor");
|
|
130
|
+
}
|
|
131
|
+
if (exactAbort &&
|
|
132
|
+
(exactCompletionOffset === undefined ||
|
|
133
|
+
exactAbort.offsetBytes < exactCompletionOffset)) {
|
|
134
|
+
return codexHumanStartedTaskAbortCompletion(anchor, exactAbort.value, before.size);
|
|
135
|
+
}
|
|
136
|
+
const completion = scanExactCodexTaskComplete(completeBuffer.toString("utf8"), anchor.turn_id);
|
|
137
|
+
if (completion.status === "failure") {
|
|
138
|
+
throw new Error(completion.detail);
|
|
139
|
+
}
|
|
140
|
+
if (completion.status === "pending") {
|
|
141
|
+
assertCodexHumanStartedIdentity(anchor, options.currentIdentity);
|
|
142
|
+
return {
|
|
143
|
+
status: "pending",
|
|
144
|
+
observedEndOffsetBytes: before.size,
|
|
145
|
+
safeResumeOffsetBytes
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (completion.status === "aborted") {
|
|
149
|
+
throw new Error("Codex active-task abort evidence escaped its exact lifecycle fence");
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
status: "completed",
|
|
153
|
+
completion: {
|
|
154
|
+
source: "durable",
|
|
155
|
+
outcome: "success",
|
|
156
|
+
text: truncateCompletionText(redactString(completion.text)),
|
|
157
|
+
...(completion.timestamp ? { timestamp: completion.timestamp } : {}),
|
|
158
|
+
id: anchor.turn_id,
|
|
159
|
+
confidence: "high",
|
|
160
|
+
metadata: {
|
|
161
|
+
match: "human_started_bound_rollout_task_complete",
|
|
162
|
+
turn_id: anchor.turn_id,
|
|
163
|
+
native_thread_id: anchor.native_thread_id,
|
|
164
|
+
anchor_fingerprint: anchor.anchor_fingerprint,
|
|
165
|
+
observed_end_offset_bytes: before.size
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
fs.closeSync(opened.fd);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
if (isRetryableProviderIoError(error)) {
|
|
176
|
+
return {
|
|
177
|
+
status: "unavailable",
|
|
178
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
179
|
+
retryable: true
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
status: "invalidated",
|
|
184
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function codexActiveTaskResumeOffset(anchor, value) {
|
|
189
|
+
const offset = value === undefined
|
|
190
|
+
? anchor.observed_end_offset_bytes
|
|
191
|
+
: safeByteOffset(value, "Codex active-task resume offset");
|
|
192
|
+
if (offset < anchor.observed_end_offset_bytes) {
|
|
193
|
+
throw new Error("Codex active-task resume offset predates its anchor");
|
|
194
|
+
}
|
|
195
|
+
return offset;
|
|
196
|
+
}
|
|
197
|
+
function assertCodexActiveTaskResumeBoundary(fd, offset) {
|
|
198
|
+
if (offset > 0 && byteAtOffset(fd, offset - 1) !== 0x0a) {
|
|
199
|
+
throw new Error("Codex active-task resume offset is not a JSONL boundary");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function completeJsonlPrefixLength(buffer) {
|
|
203
|
+
if (buffer.length === 0) {
|
|
204
|
+
return 0;
|
|
205
|
+
}
|
|
206
|
+
const newline = buffer.lastIndexOf(0x0a);
|
|
207
|
+
return newline < 0 ? 0 : newline + 1;
|
|
208
|
+
}
|
|
209
|
+
export function validateCodexHumanStartedActiveTaskAnchor(value) {
|
|
210
|
+
if (!isRecord(value) ||
|
|
211
|
+
value.schema !==
|
|
212
|
+
"agent-knock-knock/codex-human-started-active-task-anchor" ||
|
|
213
|
+
value.version !== 1) {
|
|
214
|
+
throw new Error("Codex human-started active-task anchor is invalid");
|
|
215
|
+
}
|
|
216
|
+
const allowedKeys = new Set([
|
|
217
|
+
"schema", "version", "native_thread_id", "process_uuid", "process_birth",
|
|
218
|
+
"captured_at", "rollout", "turn_id", "request_hash", "codex_version",
|
|
219
|
+
"task_started_offset_bytes", "user_message_offset_bytes",
|
|
220
|
+
"observed_end_offset_bytes", "anchor_fingerprint"
|
|
221
|
+
]);
|
|
222
|
+
if (Object.keys(value).some((key) => !allowedKeys.has(key))) {
|
|
223
|
+
throw new Error("Codex human-started active-task anchor has unsupported fields");
|
|
224
|
+
}
|
|
225
|
+
const nativeThreadId = exactNativeThreadId(value.native_thread_id);
|
|
226
|
+
const turnId = exactNativeThreadId(value.turn_id);
|
|
227
|
+
const capturedAt = value.captured_at;
|
|
228
|
+
if (nativeThreadId !== value.native_thread_id ||
|
|
229
|
+
turnId !== value.turn_id ||
|
|
230
|
+
!validTimestamp(capturedAt) ||
|
|
231
|
+
typeof capturedAt !== "string" ||
|
|
232
|
+
new Date(capturedAt).toISOString() !== capturedAt) {
|
|
233
|
+
throw new Error("Codex human-started active-task anchor identity is invalid");
|
|
234
|
+
}
|
|
235
|
+
for (const [field, label] of [
|
|
236
|
+
[value.process_uuid, "Codex active-task process UUID"],
|
|
237
|
+
[value.process_birth, "Codex active-task process birth"]
|
|
238
|
+
]) {
|
|
239
|
+
if (requiredString(field, label) !== field ||
|
|
240
|
+
field.includes("\0")) {
|
|
241
|
+
throw new Error(`${label} is not canonical`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (sha256Value(value.request_hash, "Codex active-task request hash") !==
|
|
245
|
+
value.request_hash) {
|
|
246
|
+
throw new Error("Codex active-task request hash is not canonical");
|
|
247
|
+
}
|
|
248
|
+
if (typeof value.codex_version !== "string" ||
|
|
249
|
+
!CODEX_VERSION_PATTERN.test(value.codex_version)) {
|
|
250
|
+
throw new Error("Codex active-task version is invalid");
|
|
251
|
+
}
|
|
252
|
+
if (sha256Value(value.anchor_fingerprint, "Codex active-task anchor fingerprint") !== value.anchor_fingerprint) {
|
|
253
|
+
throw new Error("Codex active-task anchor fingerprint is not canonical");
|
|
254
|
+
}
|
|
255
|
+
if (!isRecord(value.rollout)) {
|
|
256
|
+
throw new Error("Codex human-started active-task rollout identity is invalid");
|
|
257
|
+
}
|
|
258
|
+
const rolloutKeys = new Set(["fd", "device", "inode", "path"]);
|
|
259
|
+
if (Object.keys(value.rollout).some((key) => !rolloutKeys.has(key))) {
|
|
260
|
+
throw new Error("Codex human-started active-task rollout has unsupported fields");
|
|
261
|
+
}
|
|
262
|
+
const rollout = normalizedRolloutIdentity(value.rollout);
|
|
263
|
+
if (Object.entries(rollout).some(([key, normalized]) => normalized !== value.rollout[key] || normalized.includes("\0")) ||
|
|
264
|
+
!path.isAbsolute(rollout.path)) {
|
|
265
|
+
throw new Error("Codex human-started active-task rollout path is not absolute");
|
|
266
|
+
}
|
|
267
|
+
const taskStartedOffset = safeByteOffset(value.task_started_offset_bytes, "Codex active-task task_started offset");
|
|
268
|
+
const userMessageOffset = safeByteOffset(value.user_message_offset_bytes, "Codex active-task user-message offset");
|
|
269
|
+
const observedEndOffset = safeByteOffset(value.observed_end_offset_bytes, "Codex active-task observed-end offset");
|
|
270
|
+
if (userMessageOffset <= taskStartedOffset ||
|
|
271
|
+
observedEndOffset <= userMessageOffset) {
|
|
272
|
+
throw new Error("Codex human-started active-task byte boundaries are inconsistent");
|
|
273
|
+
}
|
|
274
|
+
const { anchor_fingerprint: _anchorFingerprint, ...base } = value;
|
|
275
|
+
if (fingerprint(base) !== value.anchor_fingerprint) {
|
|
276
|
+
throw new Error("Codex human-started active-task anchor fingerprint does not match");
|
|
277
|
+
}
|
|
278
|
+
return value;
|
|
279
|
+
}
|
|
280
|
+
function assertCodexHumanStartedIdentity(anchor, current) {
|
|
281
|
+
if (exactNativeThreadId(current.sessionId) !== anchor.native_thread_id ||
|
|
282
|
+
requiredString(current.processUuid, "Codex process UUID") !==
|
|
283
|
+
anchor.process_uuid ||
|
|
284
|
+
requiredString(current.processBirth, "Codex process birth") !==
|
|
285
|
+
anchor.process_birth ||
|
|
286
|
+
!current.rollout ||
|
|
287
|
+
!sameRolloutIdentity(normalizedRolloutIdentity(current.rollout), anchor.rollout)) {
|
|
288
|
+
throw new Error("Codex process, thread, or rollout identity changed after capture");
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function latestCodexHumanStartedActiveTask(fd, endOffset, maxBytes) {
|
|
292
|
+
const lowerBound = Math.max(0, endOffset - maxBytes);
|
|
293
|
+
const terminalTurns = new Map();
|
|
294
|
+
const userRecords = [];
|
|
295
|
+
let userMessageRecordCount = 0;
|
|
296
|
+
let cursor = endOffset;
|
|
297
|
+
let leadingRecord = Buffer.alloc(0);
|
|
298
|
+
let followingRecord;
|
|
299
|
+
while (cursor > lowerBound) {
|
|
300
|
+
const readStart = Math.max(lowerBound, cursor - CODEX_ACTIVE_TASK_SCAN_CHUNK_BYTES);
|
|
301
|
+
const chunk = readExactBytes(fd, readStart, cursor - readStart);
|
|
302
|
+
const combined = leadingRecord.length > 0
|
|
303
|
+
? Buffer.concat([chunk, leadingRecord])
|
|
304
|
+
: chunk;
|
|
305
|
+
let recordsBuffer = combined;
|
|
306
|
+
let recordsOffset = readStart;
|
|
307
|
+
if (readStart > 0) {
|
|
308
|
+
const firstNewline = combined.indexOf(0x0a);
|
|
309
|
+
if (firstNewline < 0) {
|
|
310
|
+
assertBoundedCodexActiveTaskRecord(combined.length);
|
|
311
|
+
leadingRecord = Buffer.from(combined);
|
|
312
|
+
cursor = readStart;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
leadingRecord = Buffer.from(combined.subarray(0, firstNewline + 1));
|
|
316
|
+
assertBoundedCodexActiveTaskRecord(leadingRecord.length);
|
|
317
|
+
recordsBuffer = combined.subarray(firstNewline + 1);
|
|
318
|
+
recordsOffset += firstNewline + 1;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
leadingRecord = Buffer.alloc(0);
|
|
322
|
+
}
|
|
323
|
+
const records = parseCodexJsonlRecords(recordsBuffer, "active-task rollout tail");
|
|
324
|
+
for (let index = records.length - 1; index >= 0; index -= 1) {
|
|
325
|
+
const record = records[index];
|
|
326
|
+
const absoluteRecord = {
|
|
327
|
+
value: record.value,
|
|
328
|
+
offsetBytes: recordsOffset + record.offsetBytes
|
|
329
|
+
};
|
|
330
|
+
if (isCodexUserMessageRecord(absoluteRecord.value)) {
|
|
331
|
+
userMessageRecordCount += 1;
|
|
332
|
+
}
|
|
333
|
+
const decision = inspectCodexActiveTaskRecordInReverse(absoluteRecord, terminalTurns, userRecords, userMessageRecordCount, followingRecord);
|
|
334
|
+
if (decision.status === "resolved") {
|
|
335
|
+
return decision.active;
|
|
336
|
+
}
|
|
337
|
+
followingRecord = absoluteRecord;
|
|
338
|
+
}
|
|
339
|
+
cursor = readStart;
|
|
340
|
+
}
|
|
341
|
+
if (lowerBound > 0) {
|
|
342
|
+
throw new Error("Codex active-task boundary exceeded the bounded reverse scan limit");
|
|
343
|
+
}
|
|
344
|
+
return undefined;
|
|
345
|
+
}
|
|
346
|
+
function inspectCodexActiveTaskRecordInReverse(record, terminalTurns, userRecords, userMessageRecordCount, followingRecord) {
|
|
347
|
+
const { value, offsetBytes } = record;
|
|
348
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
349
|
+
if (!payload) {
|
|
350
|
+
return { status: "continue" };
|
|
351
|
+
}
|
|
352
|
+
if (value.type === "event_msg" &&
|
|
353
|
+
(payload.type === "task_complete" || payload.type === "turn_aborted")) {
|
|
354
|
+
const turnId = exactNativeThreadId(payload.turn_id);
|
|
355
|
+
const kind = payload.type === "task_complete" ? "completed" : "aborted";
|
|
356
|
+
const previous = terminalTurns.get(turnId);
|
|
357
|
+
if (previous) {
|
|
358
|
+
throw new Error(previous === kind
|
|
359
|
+
? `Codex rollout contains duplicate ${String(payload.type)} evidence`
|
|
360
|
+
: "Codex rollout contains conflicting terminal task evidence");
|
|
361
|
+
}
|
|
362
|
+
terminalTurns.set(turnId, kind);
|
|
363
|
+
return { status: "continue" };
|
|
364
|
+
}
|
|
365
|
+
if (isCodexUserResponseRecord(value)) {
|
|
366
|
+
const userRecord = pairedCodexActiveTaskUserRecord(record, followingRecord);
|
|
367
|
+
if (userRecord) {
|
|
368
|
+
userRecords.push(userRecord);
|
|
369
|
+
}
|
|
370
|
+
return { status: "continue" };
|
|
371
|
+
}
|
|
372
|
+
if (value.type !== "event_msg" || payload.type !== "task_started") {
|
|
373
|
+
return { status: "continue" };
|
|
374
|
+
}
|
|
375
|
+
const turnId = exactNativeThreadId(payload.turn_id);
|
|
376
|
+
if (terminalTurns.has(turnId)) {
|
|
377
|
+
return { status: "resolved" };
|
|
378
|
+
}
|
|
379
|
+
if (userMessageRecordCount === 0) {
|
|
380
|
+
return { status: "resolved" };
|
|
381
|
+
}
|
|
382
|
+
if (userMessageRecordCount !== 1) {
|
|
383
|
+
throw new Error("Codex active task has multiple user_message events");
|
|
384
|
+
}
|
|
385
|
+
const matchingUsers = userRecords.filter((user) => user.turnId === turnId);
|
|
386
|
+
if (matchingUsers.length === 0) {
|
|
387
|
+
throw new Error("Codex active task has no exact adjacent root user row for its user_message event");
|
|
388
|
+
}
|
|
389
|
+
if (matchingUsers.length !== 1) {
|
|
390
|
+
throw new Error("Codex active task has multiple same-turn root user rows");
|
|
391
|
+
}
|
|
392
|
+
const [user] = matchingUsers;
|
|
393
|
+
if (user.pairingIssue === "hash_mismatch") {
|
|
394
|
+
throw new Error("Codex active-task root user row does not match its user_message event");
|
|
395
|
+
}
|
|
396
|
+
if (user.pairingIssue === "turn_mismatch") {
|
|
397
|
+
throw new Error("Codex active-task root user row does not match its adjacent UserMessage turn");
|
|
398
|
+
}
|
|
399
|
+
if (user.requestHash === undefined) {
|
|
400
|
+
throw new Error("Codex active-task root user row has unsupported prompt content");
|
|
401
|
+
}
|
|
402
|
+
if (user.offsetBytes <= offsetBytes) {
|
|
403
|
+
throw new Error("Codex active-task root user row precedes task_started");
|
|
404
|
+
}
|
|
405
|
+
if (userRecords.some((candidate) => candidate.offsetBytes > user.offsetBytes && candidate.turnId !== turnId)) {
|
|
406
|
+
throw new Error("Codex active task is not the latest native human task");
|
|
407
|
+
}
|
|
408
|
+
return {
|
|
409
|
+
status: "resolved",
|
|
410
|
+
active: {
|
|
411
|
+
turnId,
|
|
412
|
+
requestHash: user.requestHash,
|
|
413
|
+
taskStartedOffsetBytes: offsetBytes,
|
|
414
|
+
userMessageOffsetBytes: user.offsetBytes
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
function assertBoundedCodexActiveTaskRecord(length) {
|
|
419
|
+
if (length > CODEX_ACTIVE_TASK_MAX_RECORD_BYTES) {
|
|
420
|
+
throw new Error("Codex active-task JSONL record exceeded the safe read limit");
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
function pairedCodexActiveTaskUserRecord(record, followingRecord) {
|
|
424
|
+
const payload = isRecord(record.value.payload)
|
|
425
|
+
? record.value.payload
|
|
426
|
+
: undefined;
|
|
427
|
+
const metadata = payload &&
|
|
428
|
+
isRecord(payload.internal_chat_message_metadata_passthrough)
|
|
429
|
+
? payload.internal_chat_message_metadata_passthrough
|
|
430
|
+
: undefined;
|
|
431
|
+
const rawTurnId = optionalString(metadata?.turn_id);
|
|
432
|
+
// Codex writes one provider-owned user-message event immediately after the
|
|
433
|
+
// human root response row. Older rollouts use event_msg.user_message; newer
|
|
434
|
+
// Codex surfaces use event_msg.item_completed with item.type=UserMessage.
|
|
435
|
+
// Synthetic user-role context has no such adjacent proof.
|
|
436
|
+
if (!payload ||
|
|
437
|
+
!rawTurnId ||
|
|
438
|
+
!isCodexUserMessageRecord(followingRecord?.value)) {
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
const text = exactCodexUserResponseText(payload.content);
|
|
442
|
+
const requestHash = text === undefined ? undefined : fingerprintText(text);
|
|
443
|
+
const userMessageHash = codexUserMessageHash(followingRecord?.value);
|
|
444
|
+
const adjacentTurnId = codexUserMessageTurnId(followingRecord?.value);
|
|
445
|
+
const rootTurnId = exactNativeThreadId(rawTurnId);
|
|
446
|
+
const pairingIssue = adjacentTurnId !== undefined &&
|
|
447
|
+
exactNativeThreadId(adjacentTurnId) !== rootTurnId
|
|
448
|
+
? "turn_mismatch"
|
|
449
|
+
: requestHash === undefined || userMessageHash === undefined
|
|
450
|
+
? "unsupported"
|
|
451
|
+
: requestHash !== userMessageHash
|
|
452
|
+
? "hash_mismatch"
|
|
453
|
+
: undefined;
|
|
454
|
+
return {
|
|
455
|
+
offsetBytes: record.offsetBytes,
|
|
456
|
+
turnId: rootTurnId,
|
|
457
|
+
...(pairingIssue ? { pairingIssue } : { requestHash })
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
function isCodexUserResponseRecord(value) {
|
|
461
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
462
|
+
return value.type === "response_item" &&
|
|
463
|
+
payload?.type === "message" &&
|
|
464
|
+
payload.role === "user";
|
|
465
|
+
}
|
|
466
|
+
function codexUserMessageHash(value) {
|
|
467
|
+
const payload = value && isRecord(value.payload) ? value.payload : undefined;
|
|
468
|
+
if (value?.type === "event_msg" &&
|
|
469
|
+
payload?.type === "user_message" &&
|
|
470
|
+
typeof payload.message === "string") {
|
|
471
|
+
return fingerprintText(payload.message);
|
|
472
|
+
}
|
|
473
|
+
const item = payload?.type === "item_completed" && isRecord(payload.item)
|
|
474
|
+
? payload.item
|
|
475
|
+
: undefined;
|
|
476
|
+
const content = item?.type === "UserMessage" && Array.isArray(item.content)
|
|
477
|
+
? item.content
|
|
478
|
+
: undefined;
|
|
479
|
+
if (!content || content.length !== 1)
|
|
480
|
+
return undefined;
|
|
481
|
+
const text = content[0];
|
|
482
|
+
return isRecord(text) && text.type === "text" &&
|
|
483
|
+
typeof text.text === "string"
|
|
484
|
+
? fingerprintText(text.text)
|
|
485
|
+
: undefined;
|
|
486
|
+
}
|
|
487
|
+
function codexUserMessageTurnId(value) {
|
|
488
|
+
const payload = value && isRecord(value.payload) ? value.payload : undefined;
|
|
489
|
+
return value?.type === "event_msg" &&
|
|
490
|
+
payload?.type === "item_completed" &&
|
|
491
|
+
isRecord(payload.item) &&
|
|
492
|
+
payload.item.type === "UserMessage"
|
|
493
|
+
? optionalString(payload.turn_id)
|
|
494
|
+
: undefined;
|
|
495
|
+
}
|
|
496
|
+
function isCodexUserMessageRecord(value) {
|
|
497
|
+
const payload = value && isRecord(value.payload) ? value.payload : undefined;
|
|
498
|
+
return value?.type === "event_msg" &&
|
|
499
|
+
(payload?.type === "user_message" ||
|
|
500
|
+
(payload?.type === "item_completed" &&
|
|
501
|
+
isRecord(payload.item) &&
|
|
502
|
+
payload.item.type === "UserMessage"));
|
|
503
|
+
}
|
|
504
|
+
function isLaterCodexHumanTaskStartedRecord(value) {
|
|
505
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
506
|
+
// User-role response rows can be same-turn synthetic context. Only a fresh
|
|
507
|
+
// task_started record is authoritative evidence that the anchor was passed.
|
|
508
|
+
return value.type === "event_msg" &&
|
|
509
|
+
payload?.type === "task_started";
|
|
510
|
+
}
|
|
511
|
+
function isExactCodexTaskCompleteRecord(value, expectedTurnId) {
|
|
512
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
513
|
+
return value.type === "event_msg" &&
|
|
514
|
+
payload?.type === "task_complete" &&
|
|
515
|
+
optionalString(payload.turn_id)?.toLowerCase() === expectedTurnId;
|
|
516
|
+
}
|
|
517
|
+
function isExactCodexTurnAbortedRecord(value, expectedTurnId) {
|
|
518
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
519
|
+
return value.type === "event_msg" &&
|
|
520
|
+
payload?.type === "turn_aborted" &&
|
|
521
|
+
optionalString(payload.turn_id)?.toLowerCase() === expectedTurnId;
|
|
522
|
+
}
|
|
523
|
+
function codexHumanStartedTaskAbortCompletion(anchor, value, observedEndOffsetBytes) {
|
|
524
|
+
const payload = isRecord(value.payload) ? value.payload : undefined;
|
|
525
|
+
if (!payload || payload.type !== "turn_aborted") {
|
|
526
|
+
throw new Error("Codex active-task abort evidence is invalid");
|
|
527
|
+
}
|
|
528
|
+
const reason = optionalString(payload.reason) ?? "interrupted";
|
|
529
|
+
if (value.timestamp !== undefined && !validTimestamp(value.timestamp)) {
|
|
530
|
+
throw new Error("Codex active-task turn_aborted record has an invalid timestamp");
|
|
531
|
+
}
|
|
532
|
+
const redactedReason = truncateCompletionText(redactString(reason));
|
|
533
|
+
return {
|
|
534
|
+
status: "completed",
|
|
535
|
+
completion: {
|
|
536
|
+
source: "durable",
|
|
537
|
+
outcome: "failure",
|
|
538
|
+
text: truncateCompletionText(redactString(`Codex task stopped: ${redactedReason}`)),
|
|
539
|
+
...(value.timestamp !== undefined
|
|
540
|
+
? { timestamp: String(value.timestamp) }
|
|
541
|
+
: {}),
|
|
542
|
+
id: anchor.turn_id,
|
|
543
|
+
confidence: "high",
|
|
544
|
+
metadata: {
|
|
545
|
+
match: "human_started_bound_rollout_turn_aborted",
|
|
546
|
+
turn_id: anchor.turn_id,
|
|
547
|
+
native_thread_id: anchor.native_thread_id,
|
|
548
|
+
anchor_fingerprint: anchor.anchor_fingerprint,
|
|
549
|
+
abort_reason: redactedReason,
|
|
550
|
+
observed_end_offset_bytes: observedEndOffsetBytes
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=codex-rollout-human-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-rollout-human-task.js","sourceRoot":"","sources":["../../src/codex-rollout-human-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type CodexOpenRootRolloutInventory } from "./agent-session-provider.js";
|
|
2
|
+
import { type CodexAsyncQuestionDurableEvidence } from "./codex-async-question-adapter.js";
|
|
3
|
+
import { type CodexRolloutAcceptanceIdentity, type CodexRolloutIdentity } from "./terminal-submission-facts.js";
|
|
4
|
+
export interface CodexQuestionnaireScreenEvidence {
|
|
5
|
+
currentStep: number;
|
|
6
|
+
totalSteps: number;
|
|
7
|
+
prompt: string;
|
|
8
|
+
responseKind: "single_select" | "multi_select" | "free_text" | "confirm";
|
|
9
|
+
options?: ReadonlyArray<{
|
|
10
|
+
label: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** Changed/unsupported frames may only use unique pending-call attribution. */
|
|
14
|
+
exactShape: boolean;
|
|
15
|
+
}
|
|
16
|
+
export type CodexBoundQuestionnaireAttributionResult = {
|
|
17
|
+
status: "matched";
|
|
18
|
+
evidenceFingerprint: string;
|
|
19
|
+
} | {
|
|
20
|
+
status: "not_matched";
|
|
21
|
+
code: "accepted_root_missing" | "accepted_call_not_unique" | "screen_signature_not_unique";
|
|
22
|
+
} | {
|
|
23
|
+
status: "unavailable";
|
|
24
|
+
code: "invalid_inventory" | "invalid_screen" | "rollout_scan_unavailable";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Attributes a rendered questionnaire to one exact accepted Codex turn while
|
|
28
|
+
* the process has multiple open root rollouts. No prompt or tool arguments are
|
|
29
|
+
* returned: callers receive only a bounded fingerprint or a typed failure.
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectCodexBoundQuestionnaireAttribution(options: {
|
|
32
|
+
currentInventory: CodexOpenRootRolloutInventory;
|
|
33
|
+
acceptedIdentity: CodexRolloutAcceptanceIdentity;
|
|
34
|
+
acceptanceId: string;
|
|
35
|
+
screen: CodexQuestionnaireScreenEvidence;
|
|
36
|
+
maxBytesPerRollout?: number;
|
|
37
|
+
}): CodexBoundQuestionnaireAttributionResult;
|
|
38
|
+
/**
|
|
39
|
+
* Read only the bounded, complete tail of one exact rollout and return async
|
|
40
|
+
* questions belonging to its single currently active native turn. A missing
|
|
41
|
+
* task boundary, a partial record, file drift, or an unsupported payload is a
|
|
42
|
+
* hard absence rather than permission to infer from screen text alone.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readCodexAsyncQuestionDurableEvidence(input: {
|
|
45
|
+
rollout: CodexRolloutIdentity;
|
|
46
|
+
nativeThreadId: string;
|
|
47
|
+
maxBytes?: number;
|
|
48
|
+
}): readonly CodexAsyncQuestionDurableEvidence[] | undefined;
|