@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.
Files changed (127) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +8 -9
  3. package/dist/src/codex-app-server-interaction-client.d.ts +72 -0
  4. package/dist/src/codex-app-server-interaction-client.js +311 -0
  5. package/dist/src/codex-app-server-interaction-client.js.map +1 -0
  6. package/dist/src/codex-app-server-questionnaire.d.ts +73 -0
  7. package/dist/src/codex-app-server-questionnaire.js +366 -0
  8. package/dist/src/codex-app-server-questionnaire.js.map +1 -0
  9. package/dist/src/codex-app-server-read-client.d.ts +118 -0
  10. package/dist/src/codex-app-server-read-client.js +300 -0
  11. package/dist/src/codex-app-server-read-client.js.map +1 -0
  12. package/dist/src/codex-app-server-transport.d.ts +11 -0
  13. package/dist/src/codex-app-server-transport.js +47 -0
  14. package/dist/src/codex-app-server-transport.js.map +1 -0
  15. package/dist/src/codex-async-question-adapter.d.ts +5 -0
  16. package/dist/src/codex-async-question-adapter.js +61 -17
  17. package/dist/src/codex-async-question-adapter.js.map +1 -1
  18. package/dist/src/codex-fullscreen-composer-proof.d.ts +23 -0
  19. package/dist/src/codex-fullscreen-composer-proof.js +125 -0
  20. package/dist/src/codex-fullscreen-composer-proof.js.map +1 -0
  21. package/dist/src/codex-lifecycle-compatibility.d.ts +5 -0
  22. package/dist/src/codex-lifecycle-compatibility.js +13 -1
  23. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  24. package/dist/src/codex-paginated-answer-proof.d.ts +25 -0
  25. package/dist/src/codex-paginated-answer-proof.js +189 -0
  26. package/dist/src/codex-paginated-answer-proof.js.map +1 -0
  27. package/dist/src/codex-paginated-async-answer.d.ts +36 -0
  28. package/dist/src/codex-paginated-async-answer.js +322 -0
  29. package/dist/src/codex-paginated-async-answer.js.map +1 -0
  30. package/dist/src/codex-paginated-async-response.d.ts +21 -0
  31. package/dist/src/codex-paginated-async-response.js +118 -0
  32. package/dist/src/codex-paginated-async-response.js.map +1 -0
  33. package/dist/src/codex-paginated-observation.d.ts +30 -0
  34. package/dist/src/codex-paginated-observation.js +139 -0
  35. package/dist/src/codex-paginated-observation.js.map +1 -0
  36. package/dist/src/codex-paginated-questionnaire-runtime.d.ts +33 -0
  37. package/dist/src/codex-paginated-questionnaire-runtime.js +157 -0
  38. package/dist/src/codex-paginated-questionnaire-runtime.js.map +1 -0
  39. package/dist/src/codex-paginated-task.d.ts +78 -0
  40. package/dist/src/codex-paginated-task.js +441 -0
  41. package/dist/src/codex-paginated-task.js.map +1 -0
  42. package/dist/src/codex-paginated-thread-binding.d.ts +18 -0
  43. package/dist/src/codex-paginated-thread-binding.js +56 -0
  44. package/dist/src/codex-paginated-thread-binding.js.map +1 -0
  45. package/dist/src/codex-paginated-thread-facts.d.ts +11 -0
  46. package/dist/src/codex-paginated-thread-facts.js +2 -0
  47. package/dist/src/codex-paginated-thread-facts.js.map +1 -0
  48. package/dist/src/codex-paginated-watch.d.ts +29 -0
  49. package/dist/src/codex-paginated-watch.js +107 -0
  50. package/dist/src/codex-paginated-watch.js.map +1 -0
  51. package/dist/src/codex-terminal-agent-adapter.js +127 -7
  52. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  53. package/dist/src/store.d.ts +1 -1
  54. package/dist/src/store.js +2 -2
  55. package/dist/src/store.js.map +1 -1
  56. package/dist/src/terminal-agent-adapter.d.ts +3 -0
  57. package/dist/src/terminal-agent-adapter.js.map +1 -1
  58. package/dist/src/terminal-agent-bridge.d.ts +13 -5
  59. package/dist/src/terminal-agent-bridge.js +28 -103
  60. package/dist/src/terminal-agent-bridge.js.map +1 -1
  61. package/dist/src/terminal-approval-fingerprint.d.ts +7 -0
  62. package/dist/src/terminal-approval-fingerprint.js +107 -0
  63. package/dist/src/terminal-approval-fingerprint.js.map +1 -0
  64. package/dist/src/terminal-command-cli-ports.d.ts +1 -0
  65. package/dist/src/terminal-composer-classifier.js +39 -1
  66. package/dist/src/terminal-composer-classifier.js.map +1 -1
  67. package/dist/src/terminal-control-provider.d.ts +6 -2
  68. package/dist/src/terminal-control-provider.js +4 -4
  69. package/dist/src/terminal-control-provider.js.map +1 -1
  70. package/dist/src/terminal-human-explicit-send-cli-adapter.js +22 -15
  71. package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -1
  72. package/dist/src/terminal-interaction-core.js +3 -1
  73. package/dist/src/terminal-interaction-core.js.map +1 -1
  74. package/dist/src/terminal-interaction-response-bridge.d.ts +21 -1
  75. package/dist/src/terminal-interaction-response-bridge.js +148 -3
  76. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  77. package/dist/src/terminal-list-cli-adapter.js +4 -4
  78. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  79. package/dist/src/terminal-list-facts.d.ts +1 -1
  80. package/dist/src/terminal-list-facts.js +1 -1
  81. package/dist/src/terminal-list-facts.js.map +1 -1
  82. package/dist/src/terminal-managed-send-cli-adapter.d.ts +1 -1
  83. package/dist/src/terminal-managed-send-cli-adapter.js +27 -0
  84. package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -1
  85. package/dist/src/terminal-model-control-bridge.d.ts +1 -1
  86. package/dist/src/terminal-model-control-bridge.js +1 -1
  87. package/dist/src/terminal-model-control-bridge.js.map +1 -1
  88. package/dist/src/terminal-model-control-profile.d.ts +3 -1
  89. package/dist/src/terminal-model-control-profile.js +47 -1
  90. package/dist/src/terminal-model-control-profile.js.map +1 -1
  91. package/dist/src/terminal-model-control.js +63 -21
  92. package/dist/src/terminal-model-control.js.map +1 -1
  93. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  94. package/dist/src/terminal-native-inspection-bridge.d.ts +6 -1
  95. package/dist/src/terminal-native-inspection-bridge.js +126 -79
  96. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  97. package/dist/src/terminal-questionnaire-adapter.js +20 -16
  98. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  99. package/dist/src/terminal-runtime-cli-adapter.js +17 -0
  100. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  101. package/dist/src/terminal-send-watch-policy.d.ts +38 -0
  102. package/dist/src/terminal-send-watch-policy.js +79 -0
  103. package/dist/src/terminal-send-watch-policy.js.map +1 -0
  104. package/dist/src/terminal-submission-facts.d.ts +1 -1
  105. package/dist/src/terminal-submission-facts.js +11 -9
  106. package/dist/src/terminal-submission-facts.js.map +1 -1
  107. package/dist/src/terminal-watch-cli-adapter.d.ts +9 -1
  108. package/dist/src/terminal-watch-cli-adapter.js +199 -210
  109. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  110. package/dist/src/terminal-watch-codec.js +23 -1
  111. package/dist/src/terminal-watch-codec.js.map +1 -1
  112. package/dist/src/terminal-watch-interaction-runtime.js +27 -6
  113. package/dist/src/terminal-watch-interaction-runtime.js.map +1 -1
  114. package/dist/src/terminal-watch-presentation.d.ts +4 -0
  115. package/dist/src/terminal-watch-presentation.js +153 -0
  116. package/dist/src/terminal-watch-presentation.js.map +1 -0
  117. package/dist/src/terminal-watch-record.d.ts +4 -2
  118. package/dist/src/terminal-watch-record.js +15 -10
  119. package/dist/src/terminal-watch-record.js.map +1 -1
  120. package/dist/src/terminal-watch-service.js +13 -1
  121. package/dist/src/terminal-watch-service.js.map +1 -1
  122. package/docs/codex-0.158.0-compatibility.md +129 -0
  123. package/docs/codex-0.159.0-compatibility.md +150 -0
  124. package/docs/quickstart-herdr.md +3 -3
  125. package/docs/quickstart-tmux.md +5 -5
  126. package/package.json +7 -3
  127. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +14 -12
@@ -0,0 +1,36 @@
1
+ import { type CodexAppServerReadTransport } from "./codex-app-server-read-client.js";
2
+ import { codexProcessIncarnationForPid } from "./codex-process-incarnation.js";
3
+ import { readCodexPaginatedTaskSnapshot } from "./codex-paginated-observation.js";
4
+ import type { CodexPaginatedThreadBinding } from "./codex-paginated-thread-facts.js";
5
+ import type { CodexAsyncQuestionDurableQuestion } from "./codex-async-question-adapter.js";
6
+ export interface CodexPaginatedAsyncAnswerInput {
7
+ binding: CodexPaginatedThreadBinding;
8
+ nativeTurnId: string;
9
+ itemId: string;
10
+ questionIndex: number;
11
+ expectedQuestion: CodexAsyncQuestionDurableQuestion;
12
+ answer: string;
13
+ timeoutMs?: number;
14
+ /** Reserve the durable interaction exactly once, after preflight and before native input. */
15
+ beforeDispatch?: () => Promise<void>;
16
+ }
17
+ export interface CodexPaginatedAsyncAnswerResult {
18
+ status: "confirmed" | "response_uncertain";
19
+ clientUserMessageId: string;
20
+ nativeTurnId: string;
21
+ nativeQuestionId: string;
22
+ reason?: string;
23
+ }
24
+ export interface CodexPaginatedAsyncAnswerPorts {
25
+ readSnapshot?: typeof readCodexPaginatedTaskSnapshot;
26
+ transportFactory?: (options: {
27
+ socketPath: string;
28
+ timeoutMs: number;
29
+ }) => Promise<CodexAppServerReadTransport>;
30
+ incarnation?: typeof codexProcessIncarnationForPid;
31
+ randomId?: () => string;
32
+ sleep?: (milliseconds: number) => Promise<void>;
33
+ now?: () => number;
34
+ }
35
+ /** One exact native async answer. This API cannot create, resume, or start a task. */
36
+ export declare function deliverCodexPaginatedAsyncAnswer(request: CodexPaginatedAsyncAnswerInput, ports?: CodexPaginatedAsyncAnswerPorts): Promise<CodexPaginatedAsyncAnswerResult>;
@@ -0,0 +1,322 @@
1
+ import path from "node:path";
2
+ import { isCodexPaginatedVersion } from "./codex-lifecycle-compatibility.js";
3
+ import { randomUUID } from "node:crypto";
4
+ import { parseCodexAppServerMetadata, CodexAppServerReadError } from "./codex-app-server-read-client.js";
5
+ import { connectCodexUnixWebSocket } from "./codex-app-server-transport.js";
6
+ import { codexProcessIncarnationForPid } from "./codex-process-incarnation.js";
7
+ import { readCodexPaginatedTaskSnapshot } from "./codex-paginated-observation.js";
8
+ import { codexPaginatedAsyncQuestionEvidence } from "./codex-paginated-task.js";
9
+ /** One exact native async answer. This API cannot create, resume, or start a task. */
10
+ export async function deliverCodexPaginatedAsyncAnswer(request, ports = {}) {
11
+ validateInput(request);
12
+ const input = {
13
+ ...request, binding: { ...request.binding },
14
+ answer: request.answer.replace(/\r\n?/gu, "\n").trim(),
15
+ expectedQuestion: { ...request.expectedQuestion,
16
+ ...(request.expectedQuestion.options === undefined ? {} : { options: [...request.expectedQuestion.options] }) }
17
+ };
18
+ assertProcess(input.binding, ports);
19
+ const timeoutMs = input.timeoutMs ?? 5_000;
20
+ const socketPath = path.join(input.binding.codexHome, "app-server-control", "app-server-control.sock");
21
+ const transport = await (ports.transportFactory ?? connectCodexUnixWebSocket)({ socketPath, timeoutMs });
22
+ const writer = new AsyncAnswerWriter(transport, timeoutMs);
23
+ try {
24
+ const initialized = await writer.initialize();
25
+ parseCodexAppServerMetadata(initialized, {
26
+ codexHome: input.binding.codexHome, expectedServerVersion: input.binding.serverVersion
27
+ }, socketPath);
28
+ transport.send(JSON.stringify({ method: "initialized" }));
29
+ const snapshot = await readSnapshot(input, ports);
30
+ const question = preflightQuestion(input, snapshot);
31
+ assertProcess(input.binding, ports);
32
+ const clientUserMessageId = (ports.randomId ?? randomUUID)();
33
+ identifier(clientUserMessageId);
34
+ const nativeQuestionId = JSON.stringify(["request_user_input_async", input.itemId, input.questionIndex]);
35
+ if (Buffer.byteLength(nativeQuestionId) > 512)
36
+ throw new Error("Native async question identity exceeds its reply envelope");
37
+ const text = nativeReply(nativeQuestionId, question.title, input.answer);
38
+ // No mutation precedes this callback. Once reserved, every uncertain outcome is fenced.
39
+ await input.beforeDispatch?.();
40
+ const result = { clientUserMessageId, nativeTurnId: input.nativeTurnId, nativeQuestionId };
41
+ try {
42
+ const steered = object(await writer.answer({
43
+ threadId: input.binding.threadId, expectedTurnId: input.nativeTurnId,
44
+ clientUserMessageId, input: [{ type: "text", text, textElements: [] }]
45
+ }));
46
+ if (steered.turnId !== input.nativeTurnId)
47
+ return {
48
+ ...result, status: "response_uncertain", reason: "native_async_answer_turn_changed"
49
+ };
50
+ }
51
+ catch {
52
+ return { ...result, status: "response_uncertain", reason: "native_async_answer_delivery_uncertain" };
53
+ }
54
+ try {
55
+ return await confirmAnswer(input, ports, result, text, timeoutMs);
56
+ }
57
+ catch {
58
+ return { ...result, status: "response_uncertain", reason: "native_async_answer_evidence_unavailable" };
59
+ }
60
+ }
61
+ finally {
62
+ try {
63
+ writer.close();
64
+ }
65
+ catch { /* Closing the private connection cannot change durable answer evidence. */ }
66
+ }
67
+ }
68
+ async function readSnapshot(input, ports) {
69
+ return (ports.readSnapshot ?? readCodexPaginatedTaskSnapshot)({
70
+ codexHome: input.binding.codexHome, serverVersion: input.binding.serverVersion,
71
+ threadId: input.binding.threadId, boundaryTurnId: input.nativeTurnId
72
+ });
73
+ }
74
+ function preflightQuestion(input, snapshot) {
75
+ assertSnapshot(input, snapshot);
76
+ const turn = snapshot.turns[0];
77
+ if (snapshot.thread.status.type !== "active" || !turn ||
78
+ turn.id !== input.nativeTurnId || turn.status !== "inProgress") {
79
+ throw new Error("The exact native async question turn is no longer active");
80
+ }
81
+ const item = turn.items.find((value) => value.id === input.itemId);
82
+ const raw = item?.questions?.[input.questionIndex];
83
+ const evidence = codexPaginatedAsyncQuestionEvidence(turn).find((value) => value.itemId === input.itemId);
84
+ const expected = evidence?.questions[input.questionIndex];
85
+ const nativeId = JSON.stringify(["request_user_input_async", input.itemId, input.questionIndex]);
86
+ if (!raw || !expected || snapshot.turns.some((candidate) => candidate.items.some((value) => hasAnswer(value, nativeId, input.itemId)))) {
87
+ throw new Error("The exact native async question is no longer pending");
88
+ }
89
+ if (expected.title !== input.expectedQuestion.title ||
90
+ JSON.stringify(expected.options ?? []) !== JSON.stringify(input.expectedQuestion.options ?? [])) {
91
+ throw new Error("The exact native async question payload changed");
92
+ }
93
+ return { title: raw.title };
94
+ }
95
+ async function confirmAnswer(input, ports, result, text, timeoutMs) {
96
+ const now = ports.now ?? Date.now;
97
+ const sleep = ports.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
98
+ const deadline = now() + timeoutMs;
99
+ do {
100
+ try {
101
+ assertProcess(input.binding, ports);
102
+ const snapshot = await readSnapshot(input, ports);
103
+ assertSnapshot(input, snapshot);
104
+ const turn = snapshot.turns.find((value) => value.id === input.nativeTurnId);
105
+ const matching = turn.items.filter((value) => value.type === "userMessage" && value.clientId === result.clientUserMessageId);
106
+ if (matching.length > 1)
107
+ throw new Error("Native async answer identity repeated");
108
+ if (matching.length === 1) {
109
+ const exact = matching[0];
110
+ if (singleText(exact) !== text || !answeredIds(exact).includes(result.nativeQuestionId)) {
111
+ throw new Error("Native async answer payload changed");
112
+ }
113
+ const competing = turn.items.some((value) => value !== exact && hasAnswer(value, result.nativeQuestionId, input.itemId));
114
+ return competing
115
+ ? { ...result, status: "response_uncertain", reason: "native_async_answer_has_competing_reply" }
116
+ : { ...result, status: "confirmed" };
117
+ }
118
+ if (turn.status !== "inProgress")
119
+ return {
120
+ ...result, status: "response_uncertain", reason: "native_async_turn_finished_without_answer_receipt"
121
+ };
122
+ }
123
+ catch {
124
+ return { ...result, status: "response_uncertain", reason: "native_async_answer_evidence_unavailable" };
125
+ }
126
+ await sleep(100);
127
+ } while (now() < deadline);
128
+ return { ...result, status: "response_uncertain", reason: "native_async_answer_receipt_pending" };
129
+ }
130
+ function assertSnapshot(input, snapshot) {
131
+ if (snapshot.serverVersion !== input.binding.serverVersion || path.resolve(snapshot.codexHome) !== path.resolve(input.binding.codexHome) ||
132
+ snapshot.thread.id !== input.binding.threadId || snapshot.thread.historyMode !== "paginated" ||
133
+ snapshot.thread.originator !== "codex-tui" || !snapshot.completeToBoundary ||
134
+ snapshot.turns.length > 128 || !snapshot.turns.some((value) => value.id === input.nativeTurnId) ||
135
+ new Set(snapshot.turns.map((value) => value.id)).size !== snapshot.turns.length ||
136
+ snapshot.turns.some((turn) => turn.itemsView !== "full" || turn.items.length > 1024 ||
137
+ new Set(turn.items.map((value) => value.id)).size !== turn.items.length)) {
138
+ throw new Error("Native async answer history is not exact and complete");
139
+ }
140
+ }
141
+ function nativeReply(questionId, title, answer) {
142
+ let question = "";
143
+ let bytes = 0;
144
+ for (const character of title) {
145
+ bytes += Buffer.byteLength(character);
146
+ if (bytes > 512)
147
+ break;
148
+ question += character;
149
+ }
150
+ return `<send_user_message_question_reply>\n${JSON.stringify([{
151
+ answer, question: question.replace(/[\r\n]/gu, " "), questionItemId: questionId
152
+ }])}\n</send_user_message_question_reply>`;
153
+ }
154
+ function answeredIds(item) {
155
+ let text = singleText(item)?.trim();
156
+ if (!text)
157
+ return [];
158
+ if (text.startsWith("# Context from my IDE setup:\n")) {
159
+ const index = text.lastIndexOf("\n## My request for Codex:\n");
160
+ if (index < 0)
161
+ return [];
162
+ text = text.slice(index + "\n## My request for Codex:\n".length).trim();
163
+ }
164
+ const match = /^<send_user_message_question_reply>([\s\S]*)<\/send_user_message_question_reply>$/u.exec(text);
165
+ if (!match)
166
+ return [];
167
+ try {
168
+ const parsed = JSON.parse(match[1]);
169
+ const replies = Array.isArray(parsed) ? parsed : [parsed];
170
+ if (replies.length === 0 || replies.length > 16)
171
+ return [];
172
+ return replies.map((reply) => {
173
+ const value = object(reply);
174
+ if (typeof value.answer !== "string" || typeof value.question !== "string" || typeof value.questionItemId !== "string")
175
+ throw new Error("Invalid async answer");
176
+ let id;
177
+ try {
178
+ id = JSON.parse(value.questionItemId);
179
+ }
180
+ catch {
181
+ id = undefined;
182
+ }
183
+ if (Array.isArray(id)) {
184
+ if (id.length !== 3 || id[0] !== "request_user_input_async" ||
185
+ typeof id[1] !== "string" || !Number.isSafeInteger(id[2]) || Number(id[2]) < 0)
186
+ throw new Error("Invalid async answer identity");
187
+ return JSON.stringify(id);
188
+ }
189
+ // Native .158 also resolves legacy desktop replies identifying the whole source item.
190
+ return identifier(value.questionItemId);
191
+ });
192
+ }
193
+ catch {
194
+ return [];
195
+ }
196
+ }
197
+ function hasAnswer(item, questionId, itemId) {
198
+ const ids = answeredIds(item);
199
+ return ids.includes(questionId) || ids.includes(itemId);
200
+ }
201
+ function singleText(item) {
202
+ if (item.type !== "userMessage" || !Array.isArray(item.content))
203
+ return undefined;
204
+ const content = item.content.filter((value) => value.type !== "skill" && value.type !== "mention");
205
+ return content.length === 1 && content[0]?.type === "text" && typeof content[0].text === "string"
206
+ ? content[0].text : undefined;
207
+ }
208
+ function validateInput(input) {
209
+ identifier(input.binding.threadId);
210
+ identifier(input.nativeTurnId);
211
+ identifier(input.itemId);
212
+ if (!isCodexPaginatedVersion(input.binding.serverVersion) || !path.isAbsolute(input.binding.codexHome) ||
213
+ !Number.isSafeInteger(input.binding.pid) || input.binding.pid <= 1 ||
214
+ !Number.isSafeInteger(input.questionIndex) || input.questionIndex < 0 || input.questionIndex >= 16 ||
215
+ !Number.isSafeInteger(input.timeoutMs ?? 5000) || (input.timeoutMs ?? 5000) < 1 || (input.timeoutMs ?? 5000) > 30_000 ||
216
+ typeof input.answer !== "string" || input.answer.trim().length === 0 || input.answer.length > 4096 ||
217
+ /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F]/u.test(input.answer) ||
218
+ !input.expectedQuestion || typeof input.expectedQuestion.title !== "string" ||
219
+ input.expectedQuestion.title.length > 4096 || (input.expectedQuestion.options !== undefined &&
220
+ (!Array.isArray(input.expectedQuestion.options) || input.expectedQuestion.options.length > 32 ||
221
+ input.expectedQuestion.options.some((value) => typeof value !== "string" || value.length > 512)))) {
222
+ throw new Error("Native async answer input is invalid");
223
+ }
224
+ }
225
+ function assertProcess(binding, ports) {
226
+ const current = (ports.incarnation ?? codexProcessIncarnationForPid)(binding.pid);
227
+ if (current.processUuid !== binding.processUuid || current.processBirth !== binding.processBirth) {
228
+ throw new Error("Native async question process incarnation changed");
229
+ }
230
+ }
231
+ function identifier(value) {
232
+ if (typeof value !== "string" || value.length === 0 || value.length > 256 || /[\u0000-\u001f\u007f]/u.test(value))
233
+ throw new Error("Native async answer identity is invalid");
234
+ return value;
235
+ }
236
+ function object(value) {
237
+ if (!value || typeof value !== "object" || Array.isArray(value))
238
+ throw new Error("Native async answer protocol object is invalid");
239
+ return value;
240
+ }
241
+ /** Private wire writer: initialize and one canonical turn/steer only. */
242
+ class AsyncAnswerWriter {
243
+ transport;
244
+ timeoutMs;
245
+ requests = new Map();
246
+ listeners;
247
+ nextId = 1;
248
+ answered = false;
249
+ closed = false;
250
+ constructor(transport, timeoutMs) {
251
+ this.transport = transport;
252
+ this.timeoutMs = timeoutMs;
253
+ this.listeners = [transport.onMessage((text) => this.receive(text)),
254
+ transport.onDisconnect((error) => this.finish(error))];
255
+ }
256
+ initialize() {
257
+ return this.request("initialize", { clientInfo: {
258
+ name: "agent-knock-knock-async-answer", title: "AKK exact async answer", version: "1"
259
+ }, capabilities: { experimentalApi: true } });
260
+ }
261
+ answer(params) {
262
+ if (this.answered)
263
+ return Promise.reject(new Error("Native async answer cannot be retried"));
264
+ this.answered = true;
265
+ return this.request("turn/steer", params);
266
+ }
267
+ close() { this.finish(new Error("Native async answer connection closed")); this.transport.close(); }
268
+ request(method, params) {
269
+ if (this.closed)
270
+ return Promise.reject(new Error("Native async answer connection closed"));
271
+ const id = `akk-async-answer-${this.nextId++}`;
272
+ return new Promise((resolve, reject) => {
273
+ const timer = setTimeout(() => {
274
+ this.requests.delete(id);
275
+ reject(new CodexAppServerReadError("timeout", "Native async answer operation timed out"));
276
+ }, this.timeoutMs);
277
+ this.requests.set(id, { resolve, reject, timer });
278
+ try {
279
+ this.transport.send(JSON.stringify({ id, method, params }));
280
+ }
281
+ catch (error) {
282
+ this.requests.delete(id);
283
+ clearTimeout(timer);
284
+ reject(error);
285
+ }
286
+ });
287
+ }
288
+ receive(text) {
289
+ try {
290
+ if (Buffer.byteLength(text) > 8 * 1024 * 1024)
291
+ throw new Error("Native async answer message exceeded its bound");
292
+ const message = object(JSON.parse(text));
293
+ if (message.method !== undefined || typeof message.id !== "string")
294
+ return;
295
+ const pending = this.requests.get(message.id);
296
+ if (!pending)
297
+ return;
298
+ this.requests.delete(message.id);
299
+ clearTimeout(pending.timer);
300
+ if (message.error !== undefined)
301
+ pending.reject(new Error("Native async answer was rejected"));
302
+ else if (Object.hasOwn(message, "result"))
303
+ pending.resolve(message.result);
304
+ else
305
+ pending.reject(new Error("Native async answer response omitted its result"));
306
+ }
307
+ catch (error) {
308
+ this.finish(error instanceof Error ? error : new Error("Native async answer protocol failed"));
309
+ this.transport.close();
310
+ }
311
+ }
312
+ finish(error) {
313
+ this.closed = true;
314
+ for (const pending of this.requests.values()) {
315
+ clearTimeout(pending.timer);
316
+ pending.reject(error);
317
+ }
318
+ this.requests.clear();
319
+ this.listeners.forEach((listener) => listener());
320
+ }
321
+ }
322
+ //# sourceMappingURL=codex-paginated-async-answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-paginated-async-answer.js","sourceRoot":"","sources":["../../src/codex-paginated-async-answer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { readCodexPaginatedAsyncQuestions } from "./codex-paginated-observation.js";
2
+ import { deliverCodexPaginatedAsyncAnswer } from "./codex-paginated-async-answer.js";
3
+ import type { TerminalAgentBridge } from "./terminal-agent-bridge.js";
4
+ import type { TerminalRuntimeIdentity } from "./terminal-agent-adapter.js";
5
+ import type { TerminalControlRef, TerminalControlEvidence } from "./terminal-control-ref.js";
6
+ import { type TerminalInteractionResponseOptions, type TerminalInteractionResponseExecution } from "./terminal-interaction-response-bridge.js";
7
+ import { type TerminalInteractionSubjectResponse } from "./terminal-interaction-protocol.js";
8
+ interface PaginatedAsyncResponseInput {
9
+ bridge: Pick<TerminalAgentBridge, "status" | "respondInteraction">;
10
+ terminalControl: TerminalControlRef;
11
+ terminalEvidence: TerminalControlEvidence;
12
+ runtime: TerminalRuntimeIdentity;
13
+ response: TerminalInteractionSubjectResponse;
14
+ options: TerminalInteractionResponseOptions;
15
+ now: () => Date;
16
+ readQuestions?: typeof readCodexPaginatedAsyncQuestions;
17
+ deliver?: typeof deliverCodexPaginatedAsyncAnswer;
18
+ }
19
+ /** UI navigation may open an Other editor; actual answers use native turn CAS. */
20
+ export declare function respondCodexPaginatedAsyncQuestion(input: PaginatedAsyncResponseInput): Promise<TerminalInteractionResponseExecution>;
21
+ export {};
@@ -0,0 +1,118 @@
1
+ import { isCodexPaginatedVersion } from "./codex-lifecycle-compatibility.js";
2
+ import { readCodexPaginatedAsyncQuestions } from "./codex-paginated-observation.js";
3
+ import { deliverCodexPaginatedAsyncAnswer } from "./codex-paginated-async-answer.js";
4
+ import { captureTerminalInteractionRuntimeOffer, TerminalInteractionInputNotStartedError, TerminalInteractionDispatchReservedError } from "./terminal-interaction-response-bridge.js";
5
+ import { validateTerminalInteractionSubjectResponse } from "./terminal-interaction-protocol.js";
6
+ /** UI navigation may open an Other editor; actual answers use native turn CAS. */
7
+ export async function respondCodexPaginatedAsyncQuestion(input) {
8
+ const { offer, evidence } = await recaptureAsyncOffer(input);
9
+ const native = offer.nativeInspection;
10
+ if (!("interaction_kind" in native) || native.interaction_kind !== "async_question" || !native.async_inspection.match) {
11
+ throw new TerminalInteractionInputNotStartedError("Codex async question has no exact native identity");
12
+ }
13
+ const match = native.async_inspection.match;
14
+ const [itemId, questionIndex] = nativeQuestionTuple(match.native_question_id, match.source_question_index);
15
+ const question = evidence.find((item) => item.itemId === itemId)?.questions[questionIndex];
16
+ if (!question)
17
+ throw new TerminalInteractionInputNotStartedError("Codex async question is no longer pending");
18
+ const answer = nativeAnswerText(offer, input.response, question);
19
+ if (answer === undefined) {
20
+ return input.bridge.respondInteraction("codex", input.terminalControl, input.response, input.options);
21
+ }
22
+ const context = { agent: "codex", terminalControl: input.terminalControl,
23
+ fingerprint: offer.promptFingerprint, projection: offer.projection,
24
+ response: input.response, runtime: input.runtime };
25
+ let reserved = false;
26
+ try {
27
+ const result = await (input.deliver ?? deliverCodexPaginatedAsyncAnswer)({
28
+ binding: input.runtime.codexPaginatedThread, nativeTurnId: input.runtime.nativeTaskId,
29
+ itemId, questionIndex,
30
+ expectedQuestion: question, answer,
31
+ beforeDispatch: async () => {
32
+ const authority = await input.options.authorize?.(context);
33
+ if (!authority?.approved)
34
+ throw new TerminalInteractionInputNotStartedError(authority?.reason ?? "Codex async answer authority changed");
35
+ if (!input.options.beforeDispatch)
36
+ throw new TerminalInteractionInputNotStartedError("Codex async answer requires a durable reservation");
37
+ reserved = true;
38
+ try {
39
+ await input.options.beforeDispatch(context);
40
+ }
41
+ catch (error) {
42
+ throw new TerminalInteractionDispatchReservedError("reservation_uncertain", "Codex async answer reservation is uncertain", { cause: error });
43
+ }
44
+ }
45
+ });
46
+ if (result.status !== "confirmed") {
47
+ throw new TerminalInteractionDispatchReservedError("key_uncertain", "Codex async answer was submitted once but its durable acceptance is uncertain");
48
+ }
49
+ }
50
+ catch (error) {
51
+ if (error instanceof TerminalInteractionInputNotStartedError || error instanceof TerminalInteractionDispatchReservedError)
52
+ throw error;
53
+ if (reserved)
54
+ throw new TerminalInteractionDispatchReservedError("key_uncertain", "Codex async answer delivery is uncertain", { cause: error });
55
+ throw new TerminalInteractionInputNotStartedError("Codex async question changed before answer delivery", { cause: error });
56
+ }
57
+ return { responded: true, blocked: false, interactionId: offer.projection.interaction_id,
58
+ questionId: input.response.answers[0].question_id,
59
+ responseKind: input.response.answers[0].response_kind, outcome: "confirmed" };
60
+ }
61
+ async function recaptureAsyncOffer(input) {
62
+ if (!isCodexPaginatedVersion(input.runtime.agentVersion) || !input.runtime.codexPaginatedThread || !input.runtime.nativeTaskId ||
63
+ input.runtime.codexPaginatedThread.serverVersion !== input.runtime.agentVersion ||
64
+ input.response.delivery_mode !== "steer_current_turn") {
65
+ throw new TerminalInteractionInputNotStartedError("Codex paginated answers require an exact active task and current-turn delivery");
66
+ }
67
+ const evidence = await (input.readQuestions ?? readCodexPaginatedAsyncQuestions)(input.runtime) ?? [];
68
+ const status = await input.bridge.status("codex", input.terminalControl, {
69
+ runtime: input.runtime, scrollbackLines: input.options.scrollbackLines ?? 120
70
+ });
71
+ const offer = status.reachable ? captureTerminalInteractionRuntimeOffer({
72
+ agent: "codex", terminalControl: input.terminalControl, runtime: input.runtime,
73
+ screen: status.screen.excerpt ?? "", now: input.now(),
74
+ approvalBlocked: status.approval_state.blocked, trustedTerminalEvidence: input.terminalEvidence,
75
+ codexAsyncQuestionEvidence: evidence
76
+ }) : undefined;
77
+ if (!offer || offer.projection.kind !== "async_question" ||
78
+ offer.promptFingerprint !== input.options.expectedFingerprint ||
79
+ offer.projection.interaction_id !== input.response.interaction_id) {
80
+ throw new TerminalInteractionInputNotStartedError("Codex async question changed before response");
81
+ }
82
+ validateTerminalInteractionSubjectResponse(input.response, offer.projection, { now: input.now() });
83
+ return { offer, evidence };
84
+ }
85
+ function nativeAnswerText(offer, response, question) {
86
+ const answer = response.answers[0];
87
+ if (answer.response_kind === "free_text")
88
+ return answer.text.trim();
89
+ const native = offer.nativeInspection;
90
+ if (answer.response_kind !== "single_select" || !("interaction_kind" in native) || native.interaction_kind !== "async_question") {
91
+ throw new TerminalInteractionInputNotStartedError("Unsupported Codex async answer kind");
92
+ }
93
+ const options = native.async_inspection.match?.question.options ?? [];
94
+ const index = options.findIndex((option) => option.option_id === answer.selected_option_ids[0]);
95
+ const selected = options[index];
96
+ if (!selected)
97
+ throw new TerminalInteractionInputNotStartedError("Codex async answer option changed");
98
+ if (selected.kind === "free_text_entry")
99
+ return undefined;
100
+ const raw = question.options?.[index];
101
+ if (raw === undefined)
102
+ throw new TerminalInteractionInputNotStartedError("Codex async answer has no native option text");
103
+ return raw.trim();
104
+ }
105
+ function nativeQuestionTuple(value, expectedIndex) {
106
+ let tuple;
107
+ try {
108
+ tuple = JSON.parse(value ?? "");
109
+ }
110
+ catch { /* Reject absent or malformed native identity. */ }
111
+ if (!Array.isArray(tuple) || tuple.length !== 3 || tuple[0] !== "request_user_input_async" ||
112
+ typeof tuple[1] !== "string" || !tuple[1] || tuple[2] !== expectedIndex ||
113
+ !Number.isSafeInteger(tuple[2]) || tuple[2] < 0) {
114
+ throw new TerminalInteractionInputNotStartedError("Codex async native question identity is unavailable");
115
+ }
116
+ return [tuple[1], tuple[2]];
117
+ }
118
+ //# sourceMappingURL=codex-paginated-async-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-paginated-async-response.js","sourceRoot":"","sources":["../../src/codex-paginated-async-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type CodexAppServerReadClient } from "./codex-app-server-read-client.js";
2
+ import type { CodexPaginatedThreadBinding } from "./codex-paginated-thread-facts.js";
3
+ import { type CodexPaginatedTaskAnchor, type CodexPaginatedTaskSnapshot } from "./codex-paginated-task.js";
4
+ import type { TerminalRuntimeIdentity } from "./terminal-agent-adapter.js";
5
+ import type { CodexAsyncQuestionDurableEvidence } from "./codex-async-question-adapter.js";
6
+ type ReadClient = Pick<CodexAppServerReadClient, "metadata" | "readThread" | "listTurns" | "listItems" | "close">;
7
+ type Connect = (options: {
8
+ codexHome: string;
9
+ expectedServerVersion: string;
10
+ }) => Promise<ReadClient>;
11
+ export declare function readCodexPaginatedAsyncQuestions(runtime: TerminalRuntimeIdentity): Promise<readonly CodexAsyncQuestionDurableEvidence[] | undefined>;
12
+ export declare class CodexLegacyThreadHistoryError extends Error {
13
+ readonly threadId: string;
14
+ constructor(threadId: string);
15
+ }
16
+ /** Bounded reads never resume, subscribe to, create, or mutate native threads. */
17
+ export declare function readCodexPaginatedTaskSnapshot(input: {
18
+ codexHome: string;
19
+ threadId: string;
20
+ serverVersion: string;
21
+ boundaryTurnId?: string;
22
+ connect?: Connect;
23
+ }): Promise<CodexPaginatedTaskSnapshot>;
24
+ export declare function captureCodexPaginatedTaskAnchor(input: {
25
+ binding: CodexPaginatedThreadBinding;
26
+ requestHash?: string;
27
+ now: Date;
28
+ connect?: Connect;
29
+ }): Promise<CodexPaginatedTaskAnchor | undefined>;
30
+ export {};