@scotthuang/agent-knock-knock 0.13.11 → 0.13.13
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 +23 -0
- package/README.md +8 -9
- package/dist/src/codex-app-server-interaction-client.d.ts +72 -0
- package/dist/src/codex-app-server-interaction-client.js +311 -0
- package/dist/src/codex-app-server-interaction-client.js.map +1 -0
- package/dist/src/codex-app-server-questionnaire.d.ts +73 -0
- package/dist/src/codex-app-server-questionnaire.js +366 -0
- package/dist/src/codex-app-server-questionnaire.js.map +1 -0
- package/dist/src/codex-app-server-read-client.d.ts +118 -0
- package/dist/src/codex-app-server-read-client.js +300 -0
- package/dist/src/codex-app-server-read-client.js.map +1 -0
- package/dist/src/codex-app-server-transport.d.ts +11 -0
- package/dist/src/codex-app-server-transport.js +47 -0
- package/dist/src/codex-app-server-transport.js.map +1 -0
- package/dist/src/codex-async-question-adapter.d.ts +5 -0
- package/dist/src/codex-async-question-adapter.js +61 -17
- package/dist/src/codex-async-question-adapter.js.map +1 -1
- package/dist/src/codex-fullscreen-composer-proof.d.ts +23 -0
- package/dist/src/codex-fullscreen-composer-proof.js +125 -0
- package/dist/src/codex-fullscreen-composer-proof.js.map +1 -0
- package/dist/src/codex-lifecycle-compatibility.d.ts +5 -0
- package/dist/src/codex-lifecycle-compatibility.js +13 -1
- package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
- package/dist/src/codex-paginated-answer-proof.d.ts +25 -0
- package/dist/src/codex-paginated-answer-proof.js +189 -0
- package/dist/src/codex-paginated-answer-proof.js.map +1 -0
- package/dist/src/codex-paginated-async-answer.d.ts +36 -0
- package/dist/src/codex-paginated-async-answer.js +322 -0
- package/dist/src/codex-paginated-async-answer.js.map +1 -0
- package/dist/src/codex-paginated-async-response.d.ts +21 -0
- package/dist/src/codex-paginated-async-response.js +118 -0
- package/dist/src/codex-paginated-async-response.js.map +1 -0
- package/dist/src/codex-paginated-observation.d.ts +30 -0
- package/dist/src/codex-paginated-observation.js +139 -0
- package/dist/src/codex-paginated-observation.js.map +1 -0
- package/dist/src/codex-paginated-questionnaire-runtime.d.ts +33 -0
- package/dist/src/codex-paginated-questionnaire-runtime.js +157 -0
- package/dist/src/codex-paginated-questionnaire-runtime.js.map +1 -0
- package/dist/src/codex-paginated-task.d.ts +78 -0
- package/dist/src/codex-paginated-task.js +441 -0
- package/dist/src/codex-paginated-task.js.map +1 -0
- package/dist/src/codex-paginated-thread-binding.d.ts +18 -0
- package/dist/src/codex-paginated-thread-binding.js +56 -0
- package/dist/src/codex-paginated-thread-binding.js.map +1 -0
- package/dist/src/codex-paginated-thread-facts.d.ts +11 -0
- package/dist/src/codex-paginated-thread-facts.js +2 -0
- package/dist/src/codex-paginated-thread-facts.js.map +1 -0
- package/dist/src/codex-paginated-watch.d.ts +29 -0
- package/dist/src/codex-paginated-watch.js +107 -0
- package/dist/src/codex-paginated-watch.js.map +1 -0
- package/dist/src/codex-terminal-agent-adapter.js +127 -7
- package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
- package/dist/src/store.d.ts +1 -1
- package/dist/src/store.js +2 -2
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-agent-adapter.d.ts +3 -0
- package/dist/src/terminal-agent-adapter.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +13 -5
- package/dist/src/terminal-agent-bridge.js +28 -103
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-approval-fingerprint.d.ts +7 -0
- package/dist/src/terminal-approval-fingerprint.js +107 -0
- package/dist/src/terminal-approval-fingerprint.js.map +1 -0
- package/dist/src/terminal-command-cli-ports.d.ts +1 -0
- package/dist/src/terminal-composer-classifier.js +39 -1
- package/dist/src/terminal-composer-classifier.js.map +1 -1
- package/dist/src/terminal-control-provider.d.ts +6 -2
- package/dist/src/terminal-control-provider.js +4 -4
- package/dist/src/terminal-control-provider.js.map +1 -1
- package/dist/src/terminal-human-explicit-send-cli-adapter.js +22 -15
- package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-core.js +3 -1
- package/dist/src/terminal-interaction-core.js.map +1 -1
- package/dist/src/terminal-interaction-response-bridge.d.ts +21 -1
- package/dist/src/terminal-interaction-response-bridge.js +148 -3
- package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.js +4 -4
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-facts.d.ts +1 -1
- package/dist/src/terminal-list-facts.js +1 -1
- package/dist/src/terminal-list-facts.js.map +1 -1
- package/dist/src/terminal-managed-send-cli-adapter.d.ts +1 -1
- package/dist/src/terminal-managed-send-cli-adapter.js +27 -0
- package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-model-control-bridge.d.ts +1 -1
- package/dist/src/terminal-model-control-bridge.js +1 -1
- package/dist/src/terminal-model-control-bridge.js.map +1 -1
- package/dist/src/terminal-model-control-profile.d.ts +3 -1
- package/dist/src/terminal-model-control-profile.js +47 -1
- package/dist/src/terminal-model-control-profile.js.map +1 -1
- package/dist/src/terminal-model-control.js +63 -21
- package/dist/src/terminal-model-control.js.map +1 -1
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-native-inspection-bridge.d.ts +6 -1
- package/dist/src/terminal-native-inspection-bridge.js +126 -79
- package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
- package/dist/src/terminal-questionnaire-adapter.js +20 -16
- package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
- package/dist/src/terminal-runtime-cli-adapter.js +17 -0
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
- package/dist/src/terminal-send-watch-policy.d.ts +38 -0
- package/dist/src/terminal-send-watch-policy.js +79 -0
- package/dist/src/terminal-send-watch-policy.js.map +1 -0
- package/dist/src/terminal-submission-facts.d.ts +1 -1
- package/dist/src/terminal-submission-facts.js +11 -9
- package/dist/src/terminal-submission-facts.js.map +1 -1
- package/dist/src/terminal-watch-cli-adapter.d.ts +9 -1
- package/dist/src/terminal-watch-cli-adapter.js +199 -210
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-codec.js +23 -1
- package/dist/src/terminal-watch-codec.js.map +1 -1
- package/dist/src/terminal-watch-interaction-runtime.js +27 -6
- package/dist/src/terminal-watch-interaction-runtime.js.map +1 -1
- package/dist/src/terminal-watch-presentation.d.ts +4 -0
- package/dist/src/terminal-watch-presentation.js +153 -0
- package/dist/src/terminal-watch-presentation.js.map +1 -0
- package/dist/src/terminal-watch-record.d.ts +4 -2
- package/dist/src/terminal-watch-record.js +15 -10
- package/dist/src/terminal-watch-record.js.map +1 -1
- package/dist/src/terminal-watch-service.js +13 -1
- package/dist/src/terminal-watch-service.js.map +1 -1
- package/docs/codex-0.158.0-compatibility.md +129 -0
- package/docs/codex-0.159.0-compatibility.md +150 -0
- package/docs/quickstart-herdr.md +3 -3
- package/docs/quickstart-tmux.md +5 -5
- package/package.json +7 -3
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +14 -12
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { TERMINAL_INTERACTION_LIMITS, TERMINAL_INTERACTION_SCHEMA, TERMINAL_INTERACTION_SUBJECT_VERSION, validateTerminalInteractionSubject, validateTerminalInteractionSubjectProjection, validateTerminalInteractionSubjectResponse } from "./terminal-interaction-protocol.js";
|
|
3
|
+
import { isRecord } from "./value-guards.js";
|
|
4
|
+
const NONE_OF_THE_ABOVE = "None of the above";
|
|
5
|
+
const USER_NOTE_PREFIX = "user_note: ";
|
|
6
|
+
const MAX_NATIVE_IDENTIFIER = 512;
|
|
7
|
+
const MAX_NATIVE_TEXT = 64 * 1024;
|
|
8
|
+
const MAX_PENDING_BYTES = 256 * 1024;
|
|
9
|
+
const MAX_DRAFT_BYTES = 80 * 1024;
|
|
10
|
+
const ANSWER_CONTROLS = /[\u0000-\u001f\u007f-\u009f]/u;
|
|
11
|
+
const DISPLAY_CONTROLS = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/u;
|
|
12
|
+
const DRAFT_KEYS = new Set([
|
|
13
|
+
"threadId", "turnId", "itemId", "requestId", "stablePayloadFingerprint",
|
|
14
|
+
"answers", "nextQuestionIndex"
|
|
15
|
+
]);
|
|
16
|
+
/**
|
|
17
|
+
* Build from the real native RPC payload. No terminal keys, screen coordinates,
|
|
18
|
+
* or synthetic UI action plans are produced by this adapter.
|
|
19
|
+
*/
|
|
20
|
+
export function buildCodexAppServerQuestionnaireOffer(input) {
|
|
21
|
+
try {
|
|
22
|
+
validatePending(input.pending);
|
|
23
|
+
if (!input.pending.isBlocking) {
|
|
24
|
+
return { status: "invalidated", reason: "codex_native_question_is_not_blocking" };
|
|
25
|
+
}
|
|
26
|
+
const subject = validateTerminalInteractionSubject(input.subject);
|
|
27
|
+
const endpointFingerprint = hash("codex-native-question-endpoint", input.canonicalEndpointIdentity);
|
|
28
|
+
const nativeFingerprint = hash("codex-native-question-payload", input.pending);
|
|
29
|
+
const payloadFingerprint = hash("codex-native-question-owner", {
|
|
30
|
+
nativeFingerprint, endpointFingerprint, subject
|
|
31
|
+
});
|
|
32
|
+
const draft = input.draft === undefined
|
|
33
|
+
? undefined : validateCodexBlockingQuestionDraft(input.draft);
|
|
34
|
+
if (draft)
|
|
35
|
+
validateBoundDraft(draft, input.pending, payloadFingerprint);
|
|
36
|
+
const questionIndex = draft?.nextQuestionIndex ?? 0;
|
|
37
|
+
const nativeQuestion = input.pending.questions[questionIndex];
|
|
38
|
+
if (!nativeQuestion)
|
|
39
|
+
throw new Error("Invalid native question index");
|
|
40
|
+
const reason = manualReason(input.pending, input.responseUncertain === true);
|
|
41
|
+
const question = reason === undefined
|
|
42
|
+
? publicQuestion(nativeQuestion, nativeFingerprint, questionIndex)
|
|
43
|
+
: {
|
|
44
|
+
question_id: opaqueId("cq", { nativeFingerprint, questionIndex }),
|
|
45
|
+
prompt: "This native Codex questionnaire needs an answer in the terminal.",
|
|
46
|
+
required: true,
|
|
47
|
+
response_kind: "free_text"
|
|
48
|
+
};
|
|
49
|
+
const promptFingerprint = hash("codex-native-question-prompt", {
|
|
50
|
+
nativeFingerprint, questionIndex, question
|
|
51
|
+
});
|
|
52
|
+
const surfaceId = opaqueId("tis", {
|
|
53
|
+
nativeFingerprint, endpointFingerprint, questionIndex, promptFingerprint
|
|
54
|
+
});
|
|
55
|
+
const interactionId = opaqueId("ti", { surfaceId, subject });
|
|
56
|
+
const projection = validateTerminalInteractionSubjectProjection({
|
|
57
|
+
schema: TERMINAL_INTERACTION_SCHEMA,
|
|
58
|
+
version: TERMINAL_INTERACTION_SUBJECT_VERSION,
|
|
59
|
+
interaction_id: interactionId,
|
|
60
|
+
subject,
|
|
61
|
+
agent: "codex",
|
|
62
|
+
kind: "questionnaire",
|
|
63
|
+
state: input.responseUncertain
|
|
64
|
+
? "response_uncertain" : reason === undefined ? "pending" : "manual_required",
|
|
65
|
+
step: { index: questionIndex + 1, total: input.pending.questions.length },
|
|
66
|
+
questions: [question],
|
|
67
|
+
expires_at: offerExpiry(input),
|
|
68
|
+
surface_id: surfaceId,
|
|
69
|
+
prompt_fingerprint: promptFingerprint,
|
|
70
|
+
response_authority: reason === undefined ? "executable" : "notify_only",
|
|
71
|
+
capabilities: {
|
|
72
|
+
respond: reason === undefined,
|
|
73
|
+
batch_response: false,
|
|
74
|
+
free_text: question.response_kind === "free_text",
|
|
75
|
+
multi_select: false
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
const offer = {
|
|
79
|
+
projection, promptFingerprint, surfaceId, payloadFingerprint,
|
|
80
|
+
questionIndex, nativeQuestionId: nativeQuestion.id
|
|
81
|
+
};
|
|
82
|
+
return reason === undefined
|
|
83
|
+
? { status: "ready", offer }
|
|
84
|
+
: { status: "manual_required", offer, reason };
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return { status: "invalidated", reason: "codex_native_question_binding_invalid" };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function manualReason(pending, responseUncertain) {
|
|
91
|
+
// One secret anywhere in the batch prevents collecting an incomplete set
|
|
92
|
+
// of answers through AKK. The native terminal remains its sole answer path.
|
|
93
|
+
if (pending.questions.some((question) => question.isSecret)) {
|
|
94
|
+
return "codex_native_question_requires_private_terminal_answer";
|
|
95
|
+
}
|
|
96
|
+
if (pending.questions.some((question) => !projectableQuestion(question))) {
|
|
97
|
+
return "codex_native_question_exceeds_public_protocol";
|
|
98
|
+
}
|
|
99
|
+
return responseUncertain ? "codex_native_question_response_uncertain" : undefined;
|
|
100
|
+
}
|
|
101
|
+
function offerExpiry(input) {
|
|
102
|
+
const ttlMs = input.ttlMs ?? 60_000;
|
|
103
|
+
if (!Number.isSafeInteger(ttlMs) || ttlMs < 1 ||
|
|
104
|
+
!Number.isFinite(input.now.getTime()))
|
|
105
|
+
throw new Error("Invalid offer expiry");
|
|
106
|
+
return input.expiresAt ?? new Date(input.now.getTime() + ttlMs).toISOString();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Advance only private state until every native question has an answer. The
|
|
110
|
+
* caller reserves the displayed offer, persists an advance, then consumes it.
|
|
111
|
+
* Only a ready result may be passed to the native client's single RPC write.
|
|
112
|
+
*/
|
|
113
|
+
export function accumulateCodexAppServerQuestionnaireAnswer(input) {
|
|
114
|
+
try {
|
|
115
|
+
const fresh = buildCodexAppServerQuestionnaireOffer({
|
|
116
|
+
pending: input.pending,
|
|
117
|
+
subject: input.offer.projection.subject,
|
|
118
|
+
canonicalEndpointIdentity: input.canonicalEndpointIdentity,
|
|
119
|
+
...(input.draft === undefined ? {} : { draft: input.draft }),
|
|
120
|
+
now: input.now,
|
|
121
|
+
expiresAt: input.offer.projection.expires_at
|
|
122
|
+
});
|
|
123
|
+
if (fresh.status !== "ready" || !sameOffer(input.offer, fresh.offer)) {
|
|
124
|
+
return { status: "invalidated", reason: "codex_native_question_changed_before_response" };
|
|
125
|
+
}
|
|
126
|
+
const response = validateTerminalInteractionSubjectResponse(input.response, fresh.offer.projection, { now: input.now });
|
|
127
|
+
const nativeQuestion = input.pending.questions[fresh.offer.questionIndex];
|
|
128
|
+
const answer = response.answers[0];
|
|
129
|
+
let nativeAnswer;
|
|
130
|
+
if (answer.response_kind === "free_text" &&
|
|
131
|
+
(nativeQuestion.options === null || nativeQuestion.options.length === 0)) {
|
|
132
|
+
// .158's native questionnaire encodes notes, including standalone
|
|
133
|
+
// free-form answers, as "user_note: " plus the trimmed composer text.
|
|
134
|
+
nativeAnswer = USER_NOTE_PREFIX + answer.text.trim();
|
|
135
|
+
}
|
|
136
|
+
else if (answer.response_kind === "single_select") {
|
|
137
|
+
const labels = nativeOptionLabels(nativeQuestion);
|
|
138
|
+
const selected = fresh.offer.projection.questions[0];
|
|
139
|
+
if (selected.response_kind !== "single_select")
|
|
140
|
+
throw new Error("Question kind changed");
|
|
141
|
+
const index = selected.options.findIndex((option) => option.option_id === answer.selected_option_ids[0]);
|
|
142
|
+
if (index < 0 || labels[index] === undefined)
|
|
143
|
+
throw new Error("Option changed");
|
|
144
|
+
nativeAnswer = labels[index];
|
|
145
|
+
}
|
|
146
|
+
else
|
|
147
|
+
throw new Error("Unsupported native answer");
|
|
148
|
+
const previousAnswers = Object.entries(input.draft?.answers ?? {}).map(([id, value]) => [id, { answers: [...value.answers] }]);
|
|
149
|
+
const answers = Object.fromEntries([
|
|
150
|
+
...previousAnswers,
|
|
151
|
+
[nativeQuestion.id, { answers: [nativeAnswer] }]
|
|
152
|
+
]);
|
|
153
|
+
const nextQuestionIndex = fresh.offer.questionIndex + 1;
|
|
154
|
+
if (nextQuestionIndex === input.pending.questions.length) {
|
|
155
|
+
return { status: "ready", requestId: input.pending.requestId, answers };
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
status: "advance",
|
|
159
|
+
draft: validateCodexBlockingQuestionDraft({
|
|
160
|
+
threadId: input.pending.threadId,
|
|
161
|
+
turnId: input.pending.turnId,
|
|
162
|
+
itemId: input.pending.itemId,
|
|
163
|
+
requestId: input.pending.requestId,
|
|
164
|
+
stablePayloadFingerprint: fresh.offer.payloadFingerprint,
|
|
165
|
+
answers,
|
|
166
|
+
nextQuestionIndex
|
|
167
|
+
})
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return { status: "invalidated", reason: "codex_native_question_response_invalid" };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Shape-only durable validation; an offer also rebinds it to the live payload. */
|
|
175
|
+
export function validateCodexBlockingQuestionDraft(value) {
|
|
176
|
+
if (!isRecord(value) || Object.keys(value).some((key) => !DRAFT_KEYS.has(key)) ||
|
|
177
|
+
!isRecord(value.answers) || !Number.isSafeInteger(value.nextQuestionIndex) ||
|
|
178
|
+
Number(value.nextQuestionIndex) < 1 ||
|
|
179
|
+
Number(value.nextQuestionIndex) >= TERMINAL_INTERACTION_LIMITS.maxSteps ||
|
|
180
|
+
typeof value.stablePayloadFingerprint !== "string" ||
|
|
181
|
+
!/^[a-f0-9]{64}$/u.test(value.stablePayloadFingerprint)) {
|
|
182
|
+
throw new Error("Codex private question draft is invalid");
|
|
183
|
+
}
|
|
184
|
+
for (const field of ["threadId", "turnId", "itemId"])
|
|
185
|
+
nativeId(value[field]);
|
|
186
|
+
requestId(value.requestId);
|
|
187
|
+
const entries = Object.entries(value.answers);
|
|
188
|
+
if (entries.length !== value.nextQuestionIndex ||
|
|
189
|
+
Buffer.byteLength(JSON.stringify(value), "utf8") > MAX_DRAFT_BYTES) {
|
|
190
|
+
throw new Error("Codex private question draft exceeded its bound");
|
|
191
|
+
}
|
|
192
|
+
for (const [id, answer] of entries) {
|
|
193
|
+
validateDraftAnswer(id, answer);
|
|
194
|
+
}
|
|
195
|
+
return structuredClone(value);
|
|
196
|
+
}
|
|
197
|
+
function validateDraftAnswer(id, answer) {
|
|
198
|
+
nativeId(id);
|
|
199
|
+
if (!isRecord(answer) || Object.keys(answer).length !== 1 ||
|
|
200
|
+
!Array.isArray(answer.answers) || answer.answers.length !== 1 ||
|
|
201
|
+
typeof answer.answers[0] !== "string" || answer.answers[0].trim().length === 0 ||
|
|
202
|
+
answer.answers[0].length > TERMINAL_INTERACTION_LIMITS.maxTextAnswerLength + USER_NOTE_PREFIX.length ||
|
|
203
|
+
ANSWER_CONTROLS.test(answer.answers[0])) {
|
|
204
|
+
throw new Error("Codex private question draft has invalid answers");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function validateBoundDraft(draft, pending, payloadFingerprint) {
|
|
208
|
+
if (draft.threadId !== pending.threadId || draft.turnId !== pending.turnId ||
|
|
209
|
+
draft.itemId !== pending.itemId || draft.requestId !== pending.requestId ||
|
|
210
|
+
draft.stablePayloadFingerprint !== payloadFingerprint ||
|
|
211
|
+
draft.nextQuestionIndex >= pending.questions.length) {
|
|
212
|
+
throw new Error("Codex private question draft no longer matches its native request");
|
|
213
|
+
}
|
|
214
|
+
const prefix = pending.questions.slice(0, draft.nextQuestionIndex);
|
|
215
|
+
if (JSON.stringify(Object.keys(draft.answers).sort()) !==
|
|
216
|
+
JSON.stringify(prefix.map((question) => question.id).sort())) {
|
|
217
|
+
throw new Error("Codex private question draft skipped a native question");
|
|
218
|
+
}
|
|
219
|
+
for (const question of prefix) {
|
|
220
|
+
if (question.isSecret)
|
|
221
|
+
throw new Error("Private native questions cannot be relayed");
|
|
222
|
+
const text = draft.answers[question.id].answers[0];
|
|
223
|
+
if (question.options === null || question.options.length === 0) {
|
|
224
|
+
if (!text.startsWith(USER_NOTE_PREFIX) ||
|
|
225
|
+
text.slice(USER_NOTE_PREFIX.length).trim().length === 0) {
|
|
226
|
+
throw new Error("Native free-form answer encoding is invalid");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (!nativeOptionLabels(question).includes(text)) {
|
|
230
|
+
throw new Error("Native selected answer no longer matches an option");
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function validatePending(value) {
|
|
235
|
+
requestId(value.requestId);
|
|
236
|
+
for (const id of [value.threadId, value.turnId, value.itemId])
|
|
237
|
+
nativeId(id);
|
|
238
|
+
if (typeof value.isBlocking !== "boolean" || !Array.isArray(value.questions) ||
|
|
239
|
+
value.questions.length < 1 ||
|
|
240
|
+
value.questions.length > TERMINAL_INTERACTION_LIMITS.maxSteps ||
|
|
241
|
+
Buffer.byteLength(JSON.stringify(value), "utf8") > MAX_PENDING_BYTES) {
|
|
242
|
+
throw new Error("Native Codex question batch exceeded its bound");
|
|
243
|
+
}
|
|
244
|
+
const ids = new Set();
|
|
245
|
+
for (const question of value.questions) {
|
|
246
|
+
nativeId(question.id);
|
|
247
|
+
if (ids.has(question.id))
|
|
248
|
+
throw new Error("Native question IDs are duplicated");
|
|
249
|
+
ids.add(question.id);
|
|
250
|
+
validateNativeQuestion(question);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function validateNativeQuestion(question) {
|
|
254
|
+
for (const text of [question.header, question.question]) {
|
|
255
|
+
if (typeof text !== "string" || text.length > MAX_NATIVE_TEXT) {
|
|
256
|
+
throw new Error("Native question text is invalid");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (typeof question.isOther !== "boolean" || typeof question.isSecret !== "boolean" ||
|
|
260
|
+
(question.options !== null && (!Array.isArray(question.options) ||
|
|
261
|
+
question.options.length > 32)))
|
|
262
|
+
throw new Error("Native question flags are invalid");
|
|
263
|
+
for (const option of question.options ?? []) {
|
|
264
|
+
if (typeof option.label !== "string" || option.label.length > 512 ||
|
|
265
|
+
typeof option.description !== "string" || option.description.length > MAX_NATIVE_TEXT) {
|
|
266
|
+
throw new Error("Native question option is invalid");
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function projectableQuestion(question) {
|
|
271
|
+
if (question.question.trim().length === 0 ||
|
|
272
|
+
question.question.length > TERMINAL_INTERACTION_LIMITS.maxPromptLength ||
|
|
273
|
+
DISPLAY_CONTROLS.test(question.question))
|
|
274
|
+
return false;
|
|
275
|
+
if (question.options === null || question.options.length === 0)
|
|
276
|
+
return true;
|
|
277
|
+
const labels = nativeOptionLabels(question);
|
|
278
|
+
return labels.length >= 2 && labels.length <= TERMINAL_INTERACTION_LIMITS.maxOptionsPerQuestion &&
|
|
279
|
+
new Set(labels).size === labels.length &&
|
|
280
|
+
labels.every((label) => label.trim().length > 0 &&
|
|
281
|
+
label.length <= TERMINAL_INTERACTION_LIMITS.maxOptionLabelLength &&
|
|
282
|
+
!ANSWER_CONTROLS.test(label)) &&
|
|
283
|
+
question.options.every((option) => option.description.length <= TERMINAL_INTERACTION_LIMITS.maxOptionDescriptionLength &&
|
|
284
|
+
!DISPLAY_CONTROLS.test(option.description));
|
|
285
|
+
}
|
|
286
|
+
function publicQuestion(question, nativeFingerprint, questionIndex) {
|
|
287
|
+
const common = {
|
|
288
|
+
question_id: opaqueId("cq", { nativeFingerprint, questionIndex }),
|
|
289
|
+
...(question.header.trim().length > 0 &&
|
|
290
|
+
question.header.length <= TERMINAL_INTERACTION_LIMITS.maxHeaderLength &&
|
|
291
|
+
!DISPLAY_CONTROLS.test(question.header) ? { header: question.header } : {}),
|
|
292
|
+
prompt: question.question,
|
|
293
|
+
required: true
|
|
294
|
+
};
|
|
295
|
+
if (question.options === null || question.options.length === 0) {
|
|
296
|
+
return { ...common, response_kind: "free_text" };
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
...common,
|
|
300
|
+
response_kind: "single_select",
|
|
301
|
+
options: nativeOptionLabels(question).map((label, index) => ({
|
|
302
|
+
option_id: opaqueId("co", { nativeFingerprint, questionIndex, index }),
|
|
303
|
+
label,
|
|
304
|
+
...(question.options?.[index]?.description
|
|
305
|
+
? { description: question.options[index].description } : {})
|
|
306
|
+
}))
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function nativeOptionLabels(question) {
|
|
310
|
+
const labels = (question.options ?? []).map((option) => option.label);
|
|
311
|
+
if (labels.length > 0 && question.isOther)
|
|
312
|
+
labels.push(NONE_OF_THE_ABOVE);
|
|
313
|
+
return labels;
|
|
314
|
+
}
|
|
315
|
+
function sameOffer(left, right) {
|
|
316
|
+
try {
|
|
317
|
+
return left.payloadFingerprint === right.payloadFingerprint &&
|
|
318
|
+
left.promptFingerprint === right.promptFingerprint &&
|
|
319
|
+
left.surfaceId === right.surfaceId && left.questionIndex === right.questionIndex &&
|
|
320
|
+
left.nativeQuestionId === right.nativeQuestionId &&
|
|
321
|
+
canonical(left.projection) === canonical(right.projection);
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function nativeId(value) {
|
|
328
|
+
if (typeof value !== "string" || value.length === 0 ||
|
|
329
|
+
value.length > MAX_NATIVE_IDENTIFIER || ANSWER_CONTROLS.test(value)) {
|
|
330
|
+
throw new Error("Native question identity is invalid");
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function requestId(value) {
|
|
334
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0)
|
|
335
|
+
return;
|
|
336
|
+
nativeId(value);
|
|
337
|
+
}
|
|
338
|
+
function opaqueId(prefix, value) {
|
|
339
|
+
return prefix + "_" + hash("codex-native-question-" + prefix, value).slice(0, 40);
|
|
340
|
+
}
|
|
341
|
+
function hash(domain, value) {
|
|
342
|
+
return createHash("sha256").update(domain).update("\n").update(canonical(value)).digest("hex");
|
|
343
|
+
}
|
|
344
|
+
function canonical(value) {
|
|
345
|
+
function normalize(input, depth) {
|
|
346
|
+
if (depth > 10)
|
|
347
|
+
throw new Error("Native question identity is too deeply nested");
|
|
348
|
+
if (input === null || typeof input === "string" || typeof input === "boolean")
|
|
349
|
+
return input;
|
|
350
|
+
if (typeof input === "number" && Number.isFinite(input))
|
|
351
|
+
return input;
|
|
352
|
+
if (Array.isArray(input)) {
|
|
353
|
+
if (input.length > 64)
|
|
354
|
+
throw new Error("Native question identity array is too large");
|
|
355
|
+
return input.map((entry) => normalize(entry, depth + 1));
|
|
356
|
+
}
|
|
357
|
+
if (!isRecord(input) || Object.keys(input).length > 64) {
|
|
358
|
+
throw new Error("Native question identity is not JSON data");
|
|
359
|
+
}
|
|
360
|
+
return Object.fromEntries(Object.keys(input).sort()
|
|
361
|
+
.filter((key) => input[key] !== undefined)
|
|
362
|
+
.map((key) => [key, normalize(input[key], depth + 1)]));
|
|
363
|
+
}
|
|
364
|
+
return JSON.stringify(normalize(value, 0));
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=codex-app-server-questionnaire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-app-server-questionnaire.js","sourceRoot":"","sources":["../../src/codex-app-server-questionnaire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { type CodexAppServerReadTransport } from "./codex-app-server-transport.js";
|
|
2
|
+
export type { CodexAppServerReadTransport } from "./codex-app-server-transport.js";
|
|
3
|
+
export type CodexAppServerTurnStatus = "completed" | "interrupted" | "failed" | "inProgress";
|
|
4
|
+
export type CodexAppServerThreadStatus = {
|
|
5
|
+
type: "notLoaded" | "idle" | "systemError";
|
|
6
|
+
} | {
|
|
7
|
+
type: "active";
|
|
8
|
+
activeFlags: ("waitingOnApproval" | "waitingOnUserInput")[];
|
|
9
|
+
};
|
|
10
|
+
export interface CodexAppServerUserInput {
|
|
11
|
+
type: string;
|
|
12
|
+
text?: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface CodexAppServerThreadItem {
|
|
16
|
+
id: string;
|
|
17
|
+
type: string;
|
|
18
|
+
content?: CodexAppServerUserInput[];
|
|
19
|
+
clientId?: string | null;
|
|
20
|
+
text?: string;
|
|
21
|
+
phase?: string | null;
|
|
22
|
+
delivery?: "async" | null;
|
|
23
|
+
questions?: {
|
|
24
|
+
title: string;
|
|
25
|
+
options: string[] | null;
|
|
26
|
+
}[] | null;
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
}
|
|
29
|
+
export interface CodexAppServerTurn {
|
|
30
|
+
id: string;
|
|
31
|
+
status: CodexAppServerTurnStatus;
|
|
32
|
+
items: CodexAppServerThreadItem[];
|
|
33
|
+
itemsView: "notLoaded" | "summary" | "full";
|
|
34
|
+
error: {
|
|
35
|
+
message: string;
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
} | null;
|
|
38
|
+
startedAt: number | null;
|
|
39
|
+
completedAt: number | null;
|
|
40
|
+
durationMs: number | null;
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
export interface CodexAppServerThread {
|
|
44
|
+
id: string;
|
|
45
|
+
sessionId: string;
|
|
46
|
+
cwd: string;
|
|
47
|
+
historyMode: "legacy" | "paginated";
|
|
48
|
+
cliVersion: string;
|
|
49
|
+
originator: string | null;
|
|
50
|
+
source: unknown;
|
|
51
|
+
status: CodexAppServerThreadStatus;
|
|
52
|
+
turns: CodexAppServerTurn[];
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
export interface CodexAppServerItemEntry {
|
|
56
|
+
turnId: string;
|
|
57
|
+
item: CodexAppServerThreadItem;
|
|
58
|
+
startedAtMs: number | null;
|
|
59
|
+
completedAtMs: number | null;
|
|
60
|
+
}
|
|
61
|
+
export interface CodexAppServerPage<T> {
|
|
62
|
+
data: T[];
|
|
63
|
+
nextCursor: string | null;
|
|
64
|
+
backwardsCursor: string | null;
|
|
65
|
+
}
|
|
66
|
+
export interface CodexAppServerMetadata {
|
|
67
|
+
serverVersion: string;
|
|
68
|
+
codexHome: string;
|
|
69
|
+
socketPath: string;
|
|
70
|
+
platformFamily: string;
|
|
71
|
+
platformOs: string;
|
|
72
|
+
}
|
|
73
|
+
export interface CodexAppServerReadOptions {
|
|
74
|
+
codexHome: string;
|
|
75
|
+
expectedServerVersion: string;
|
|
76
|
+
timeoutMs?: number;
|
|
77
|
+
transportFactory?: (options: {
|
|
78
|
+
socketPath: string;
|
|
79
|
+
timeoutMs: number;
|
|
80
|
+
}) => Promise<CodexAppServerReadTransport>;
|
|
81
|
+
}
|
|
82
|
+
export interface CodexAppServerListOptions {
|
|
83
|
+
threadId: string;
|
|
84
|
+
cursor?: string;
|
|
85
|
+
limit?: number;
|
|
86
|
+
sortDirection?: "asc" | "desc";
|
|
87
|
+
}
|
|
88
|
+
export declare class CodexAppServerReadError extends Error {
|
|
89
|
+
readonly code: "invalid_response" | "incompatible_server" | "timeout" | "closed" | "rpc_error";
|
|
90
|
+
readonly rpcCode?: number | undefined;
|
|
91
|
+
readonly rpcMessage?: string | undefined;
|
|
92
|
+
constructor(code: "invalid_response" | "incompatible_server" | "timeout" | "closed" | "rpc_error", message: string, rpcCode?: number | undefined, rpcMessage?: string | undefined);
|
|
93
|
+
}
|
|
94
|
+
export declare class CodexAppServerReadClient {
|
|
95
|
+
private readonly transport;
|
|
96
|
+
private readonly timeoutMs;
|
|
97
|
+
readonly metadata: CodexAppServerMetadata;
|
|
98
|
+
private readonly pending;
|
|
99
|
+
private readonly unsubscribe;
|
|
100
|
+
private nextRequestId;
|
|
101
|
+
private closed;
|
|
102
|
+
private constructor();
|
|
103
|
+
static connect(options: CodexAppServerReadOptions): Promise<CodexAppServerReadClient>;
|
|
104
|
+
readThread(threadId: string): Promise<CodexAppServerThread>;
|
|
105
|
+
listTurns(options: CodexAppServerListOptions & {
|
|
106
|
+
itemsView?: "notLoaded" | "summary" | "full";
|
|
107
|
+
}): Promise<CodexAppServerPage<CodexAppServerTurn>>;
|
|
108
|
+
listItems(options: CodexAppServerListOptions & {
|
|
109
|
+
turnId?: string;
|
|
110
|
+
}): Promise<CodexAppServerPage<CodexAppServerItemEntry>>;
|
|
111
|
+
close(): void;
|
|
112
|
+
private request;
|
|
113
|
+
private receive;
|
|
114
|
+
private finish;
|
|
115
|
+
}
|
|
116
|
+
export declare const connectCodexAppServerReadClient: typeof CodexAppServerReadClient.connect;
|
|
117
|
+
export declare function isCodexUnmaterializedThreadError(error: unknown, threadId: string): boolean;
|
|
118
|
+
export declare function parseCodexAppServerMetadata(value: unknown, options: CodexAppServerReadOptions, socketPath: string): CodexAppServerMetadata;
|