@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,139 @@
1
+ import { connectCodexAppServerReadClient, isCodexUnmaterializedThreadError } from "./codex-app-server-read-client.js";
2
+ import { createCodexPaginatedTaskAnchor, codexPaginatedTurnRequestHash, codexPaginatedAsyncQuestionEvidence } from "./codex-paginated-task.js";
3
+ export async function readCodexPaginatedAsyncQuestions(runtime) {
4
+ const binding = runtime.codexPaginatedThread;
5
+ if (!binding || !runtime.nativeTaskId || binding.threadId !== runtime.nativeSessionId)
6
+ return undefined;
7
+ const snapshot = await readCodexPaginatedTaskSnapshot({
8
+ codexHome: binding.codexHome, threadId: binding.threadId,
9
+ serverVersion: binding.serverVersion, boundaryTurnId: runtime.nativeTaskId
10
+ });
11
+ if (!snapshot.completeToBoundary)
12
+ return undefined;
13
+ const index = snapshot.turns.findIndex((turn) => turn.id === runtime.nativeTaskId);
14
+ return index < 0 ? undefined : codexPaginatedAsyncQuestionEvidence(snapshot.turns[index], snapshot.turns.slice(0, index));
15
+ }
16
+ export class CodexLegacyThreadHistoryError extends Error {
17
+ threadId;
18
+ constructor(threadId) {
19
+ super("The exact Codex foreground thread uses legacy history");
20
+ this.threadId = threadId;
21
+ this.name = "CodexLegacyThreadHistoryError";
22
+ }
23
+ }
24
+ /** Bounded reads never resume, subscribe to, create, or mutate native threads. */
25
+ export async function readCodexPaginatedTaskSnapshot(input) {
26
+ const client = await (input.connect ?? connectCodexAppServerReadClient)({
27
+ codexHome: input.codexHome, expectedServerVersion: input.serverVersion
28
+ });
29
+ try {
30
+ const thread = await client.readThread(input.threadId);
31
+ if (thread.historyMode === "legacy")
32
+ throw new CodexLegacyThreadHistoryError(thread.id);
33
+ const listed = await readTurnsThroughBoundary(client, input.threadId, input.boundaryTurnId).catch((error) => {
34
+ if (!input.boundaryTurnId && thread.status.type === "idle" && isCodexUnmaterializedThreadError(error, input.threadId)) {
35
+ return { turns: [], complete: true };
36
+ }
37
+ throw error;
38
+ });
39
+ const turns = [];
40
+ for (const turn of listed.turns) {
41
+ turns.push({ ...turn, itemsView: "full", items: await readTurnItems(client, input.threadId, turn.id) });
42
+ }
43
+ return {
44
+ codexHome: client.metadata.codexHome,
45
+ serverVersion: client.metadata.serverVersion,
46
+ thread, turns, completeToBoundary: listed.complete
47
+ };
48
+ }
49
+ finally {
50
+ client.close();
51
+ }
52
+ }
53
+ async function readTurnsThroughBoundary(client, threadId, boundary) {
54
+ const turns = [];
55
+ const cursors = new Set();
56
+ const ids = new Set();
57
+ let cursor;
58
+ for (let pageNumber = 0; pageNumber < 64; pageNumber += 1) {
59
+ const page = await client.listTurns({ threadId, cursor, limit: 20, sortDirection: "desc", itemsView: "notLoaded" });
60
+ for (const turn of page.data) {
61
+ if (ids.has(turn.id))
62
+ throw new Error("Codex turn pagination repeated an item");
63
+ ids.add(turn.id);
64
+ turns.push(turn);
65
+ if (turn.id === boundary)
66
+ return { turns, complete: true };
67
+ if (turns.length > 128)
68
+ throw new Error("Codex task history exceeded the bounded observation window");
69
+ }
70
+ if (page.nextCursor === null)
71
+ return { turns, complete: boundary === undefined };
72
+ if (cursors.has(page.nextCursor))
73
+ throw new Error("Codex turn pagination repeated a cursor");
74
+ cursors.add(page.nextCursor);
75
+ cursor = page.nextCursor;
76
+ }
77
+ throw new Error("Codex turn pagination exceeded its page limit");
78
+ }
79
+ async function readTurnItems(client, threadId, turnId) {
80
+ const items = [];
81
+ const ids = new Set();
82
+ const cursors = new Set();
83
+ let cursor;
84
+ for (let pageNumber = 0; pageNumber < 64; pageNumber += 1) {
85
+ const page = await client.listItems({ threadId, turnId, cursor, limit: 100, sortDirection: "asc" });
86
+ for (const entry of page.data) {
87
+ if (ids.has(entry.item.id) || entry.turnId !== turnId)
88
+ throw new Error("Codex item identity changed during pagination");
89
+ ids.add(entry.item.id);
90
+ items.push(entry.item);
91
+ if (items.length > 1024)
92
+ throw new Error("Codex task items exceeded the bounded observation window");
93
+ }
94
+ if (page.nextCursor === null)
95
+ return items;
96
+ if (cursors.has(page.nextCursor))
97
+ throw new Error("Codex item pagination repeated a cursor");
98
+ cursors.add(page.nextCursor);
99
+ cursor = page.nextCursor;
100
+ }
101
+ throw new Error("Codex item pagination exceeded its page limit");
102
+ }
103
+ export async function captureCodexPaginatedTaskAnchor(input) {
104
+ const { binding } = input;
105
+ const client = await (input.connect ?? connectCodexAppServerReadClient)({
106
+ codexHome: binding.codexHome, expectedServerVersion: binding.serverVersion
107
+ });
108
+ try {
109
+ const thread = await client.readThread(binding.threadId);
110
+ if (thread.historyMode === "legacy")
111
+ throw new CodexLegacyThreadHistoryError(thread.id);
112
+ const page = await client.listTurns({ threadId: binding.threadId, limit: 2, sortDirection: "desc", itemsView: "notLoaded" }).catch((error) => {
113
+ if (thread.status.type === "idle" && isCodexUnmaterializedThreadError(error, binding.threadId))
114
+ return { data: [] };
115
+ throw error;
116
+ });
117
+ const latest = page.data[0];
118
+ if (!input.requestHash && latest?.status !== "inProgress")
119
+ return undefined;
120
+ const activeHash = !input.requestHash && latest
121
+ ? codexPaginatedTurnRequestHash({ ...latest,
122
+ items: await readTurnItems(client, binding.threadId, latest.id), itemsView: "full" }) : undefined;
123
+ if (!input.requestHash && !activeHash)
124
+ throw new Error("Active Codex turn has no unique text request");
125
+ return createCodexPaginatedTaskAnchor({
126
+ origin: input.requestHash ? "user_explicit_send" : "active_task",
127
+ captured_at: input.now.toISOString(), codex_home: binding.codexHome,
128
+ codex_version: binding.serverVersion, native_thread_id: binding.threadId,
129
+ process_uuid: binding.processUuid, process_birth: binding.processBirth,
130
+ pid: binding.pid, request_hash: input.requestHash ?? activeHash,
131
+ ...(input.requestHash && latest ? { baseline_latest_turn_id: latest.id } : {}),
132
+ ...(!input.requestHash && latest ? { turn_id: latest.id } : {})
133
+ });
134
+ }
135
+ finally {
136
+ client.close();
137
+ }
138
+ }
139
+ //# sourceMappingURL=codex-paginated-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-paginated-observation.js","sourceRoot":"","sources":["../../src/codex-paginated-observation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type CodexAppServerInteractionClient, type CodexAppServerInteractionOptions } from "./codex-app-server-interaction-client.js";
2
+ import { type CodexBlockingQuestionDraft } from "./codex-app-server-questionnaire.js";
3
+ import { type CodexPaginatedTaskCheckpoint } from "./codex-paginated-task.js";
4
+ import type { TerminalWatch } from "./terminal-watch-record.js";
5
+ import { type TerminalWatchObservation } from "./terminal-watch-service.js";
6
+ import { type TerminalInteractionAuthorizationContext, type TerminalInteractionAuthorizationDecision, type TerminalInteractionBeforeDispatchContext, type TerminalInteractionResponseExecution } from "./terminal-interaction-response-bridge.js";
7
+ import type { TerminalControlRef } from "./terminal-control-ref.js";
8
+ import type { TerminalInteractionSubjectResponse } from "./terminal-interaction-protocol.js";
9
+ export type CodexPaginatedQuestionnaireClient = Pick<CodexAppServerInteractionClient, "listPendingQuestions" | "answer" | "close">;
10
+ export type CodexPaginatedQuestionnaireConnect = (options: CodexAppServerInteractionOptions) => Promise<CodexPaginatedQuestionnaireClient>;
11
+ export declare function observeCodexPaginatedBlockingQuestion(input: {
12
+ watch: TerminalWatch;
13
+ checkpoint: CodexPaginatedTaskCheckpoint;
14
+ now: Date;
15
+ responseDecision: (surfaceId: string, fingerprint: string) => {
16
+ executable: boolean;
17
+ suppress: boolean;
18
+ };
19
+ connect?: CodexPaginatedQuestionnaireConnect;
20
+ }): Promise<TerminalWatchObservation | undefined>;
21
+ /** Dispatches one exact native response, or privately advances a multi-question batch. */
22
+ export declare function respondCodexPaginatedBlockingQuestion(input: {
23
+ watch: TerminalWatch;
24
+ checkpoint: CodexPaginatedTaskCheckpoint;
25
+ terminalControl: TerminalControlRef;
26
+ response: TerminalInteractionSubjectResponse;
27
+ expectedFingerprint: string;
28
+ now: () => Date;
29
+ authorize: (context: TerminalInteractionAuthorizationContext) => TerminalInteractionAuthorizationDecision | Promise<TerminalInteractionAuthorizationDecision>;
30
+ beforeDispatch: (context: TerminalInteractionBeforeDispatchContext) => void | Promise<void>;
31
+ persistDraft: (draft: CodexBlockingQuestionDraft | undefined) => void;
32
+ connect?: CodexPaginatedQuestionnaireConnect;
33
+ }): Promise<TerminalInteractionResponseExecution>;
@@ -0,0 +1,157 @@
1
+ import { createHash } from "node:crypto";
2
+ import { connectCodexAppServerInteractionClient } from "./codex-app-server-interaction-client.js";
3
+ import { buildCodexAppServerQuestionnaireOffer, accumulateCodexAppServerQuestionnaireAnswer } from "./codex-app-server-questionnaire.js";
4
+ import { validateCodexPaginatedTaskCheckpoint } from "./codex-paginated-task.js";
5
+ import { terminalWatchObservationFence } from "./terminal-watch-service.js";
6
+ import { createTerminalInteractionAggregate } from "./terminal-interaction-core.js";
7
+ import { TerminalInteractionDispatchReservedError, TerminalInteractionInputNotStartedError } from "./terminal-interaction-response-bridge.js";
8
+ async function openQuestion(watch, checkpoint, now, connect) {
9
+ const anchor = watch.anchor;
10
+ const turnId = checkpoint.acceptance_evidence?.acceptanceId;
11
+ if (anchor.schema !== "agent-knock-knock/codex-paginated-task-anchor" || !turnId)
12
+ return undefined;
13
+ validateCodexPaginatedTaskCheckpoint(checkpoint, anchor);
14
+ const client = await connect({ nativeTurnId: turnId, binding: {
15
+ codexHome: anchor.codex_home, serverVersion: anchor.codex_version,
16
+ threadId: anchor.native_thread_id, pid: anchor.pid, processUuid: anchor.process_uuid,
17
+ processBirth: anchor.process_birth, observedAt: anchor.captured_at
18
+ } });
19
+ try {
20
+ const requests = [...client.listPendingQuestions()].filter((pending) => pending.isBlocking)
21
+ .sort((a, b) => a.itemId.localeCompare(b.itemId));
22
+ const draft = checkpoint.blocking_question_draft;
23
+ const pending = requests.find((request) => request.itemId === draft?.itemId && request.requestId === draft.requestId) ?? requests[0];
24
+ if (!pending) {
25
+ await closeClient(client);
26
+ return undefined;
27
+ }
28
+ if (pending.threadId !== anchor.native_thread_id || pending.turnId !== turnId) {
29
+ throw new Error("Codex pending question belongs to another native task");
30
+ }
31
+ const matchingDraft = pending.itemId === draft?.itemId && pending.requestId === draft.requestId ? draft : undefined;
32
+ const built = buildCodexAppServerQuestionnaireOffer({ pending,
33
+ subject: { kind: "terminal_watch", watch_id: watch.watch_id, anchor_fingerprint: anchor.anchor_fingerprint },
34
+ canonicalEndpointIdentity: watch.terminal.terminal_endpoint, draft: matchingDraft, now
35
+ });
36
+ if (built.status === "invalidated")
37
+ throw new Error(built.reason);
38
+ return { client, pending, built, draft: matchingDraft };
39
+ }
40
+ catch (error) {
41
+ await closeClient(client);
42
+ throw error;
43
+ }
44
+ }
45
+ export async function observeCodexPaginatedBlockingQuestion(input) {
46
+ let opened;
47
+ try {
48
+ opened = await openQuestion(input.watch, input.checkpoint, input.now, input.connect ?? connectCodexAppServerInteractionClient);
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ if (!opened)
54
+ return undefined;
55
+ try {
56
+ const offer = opened.built.offer;
57
+ const decision = input.responseDecision(offer.surfaceId, offer.promptFingerprint);
58
+ const projection = decision.executable ? offer.projection : {
59
+ ...offer.projection, response_authority: "notify_only",
60
+ capabilities: { ...offer.projection.capabilities, respond: false }
61
+ };
62
+ const checkpoint = { ...input.checkpoint };
63
+ if (!opened.draft)
64
+ delete checkpoint.blocking_question_draft;
65
+ const question = projection.questions[0];
66
+ return {
67
+ ...terminalWatchObservationFence(input.watch), kind: "interaction", observed_at: input.now.toISOString(),
68
+ observation_checkpoint: checkpoint,
69
+ evidence_fingerprint: createHash("sha256").update(JSON.stringify({
70
+ schema: "agent-knock-knock/terminal-watch-interaction-event",
71
+ version: 1,
72
+ watch_id: input.watch.watch_id,
73
+ interaction_id: projection.interaction_id,
74
+ surface_id: offer.surfaceId
75
+ })).digest("hex"),
76
+ reason_code: projection.capabilities.respond ? "codex_native_question_response_requested" : "codex_native_question_requires_manual_response",
77
+ current_interaction: { projection, aggregate: createTerminalInteractionAggregate(projection, input.now.toISOString()) },
78
+ ...(decision.suppress ? { suppress_notification: true } : {}),
79
+ ...(!projection.capabilities.respond ? { manual_interaction: {
80
+ kind: "questionnaire", response_kind: question.response_kind,
81
+ required: question.required, parser_status: "manual_required",
82
+ prompt: question.prompt, current_step: projection.step.index, total_steps: projection.step.total,
83
+ ...(question.response_kind === "single_select" ? { options: question.options.map(({ label, description }) => ({ label, description })) } : {})
84
+ } } : {})
85
+ };
86
+ }
87
+ finally {
88
+ await closeClient(opened.client);
89
+ }
90
+ }
91
+ /** Dispatches one exact native response, or privately advances a multi-question batch. */
92
+ export async function respondCodexPaginatedBlockingQuestion(input) {
93
+ let opened;
94
+ try {
95
+ opened = await openQuestion(input.watch, input.checkpoint, input.now(), input.connect ?? connectCodexAppServerInteractionClient);
96
+ }
97
+ catch {
98
+ throw new TerminalInteractionInputNotStartedError("The exact native Codex question is unavailable before response");
99
+ }
100
+ if (!opened || opened.built.status !== "ready") {
101
+ if (opened)
102
+ await closeClient(opened.client);
103
+ throw new TerminalInteractionInputNotStartedError("The exact native Codex question is no longer executable");
104
+ }
105
+ try {
106
+ const offer = opened.built.offer;
107
+ if (offer.promptFingerprint !== input.expectedFingerprint || offer.projection.interaction_id !== input.response.interaction_id) {
108
+ throw new TerminalInteractionInputNotStartedError("The native Codex question changed before response");
109
+ }
110
+ const result = accumulateCodexAppServerQuestionnaireAnswer({
111
+ pending: opened.pending, offer, canonicalEndpointIdentity: input.watch.terminal.terminal_endpoint,
112
+ response: input.response, draft: opened.draft, now: input.now()
113
+ });
114
+ if (result.status === "invalidated")
115
+ throw new TerminalInteractionInputNotStartedError(result.reason);
116
+ const context = { agent: "codex", terminalControl: input.terminalControl,
117
+ fingerprint: offer.promptFingerprint, projection: offer.projection, response: input.response };
118
+ const authority = await input.authorize(context);
119
+ if (!authority.approved)
120
+ throw new TerminalInteractionInputNotStartedError(authority.reason ?? "Codex question response authority changed");
121
+ await input.beforeDispatch(context);
122
+ try {
123
+ if (result.status === "advance")
124
+ input.persistDraft(result.draft);
125
+ else {
126
+ const receipt = await opened.client.answer(result.requestId, result.answers);
127
+ requireConfirmedAnswer(receipt, result.requestId, opened.pending.itemId);
128
+ input.persistDraft(undefined);
129
+ }
130
+ }
131
+ catch (error) {
132
+ if (error instanceof TerminalInteractionDispatchReservedError)
133
+ throw error;
134
+ throw new TerminalInteractionDispatchReservedError("key_uncertain", "Native Codex response or private checkpoint update is uncertain");
135
+ }
136
+ return { responded: true, blocked: false, interactionId: offer.projection.interaction_id,
137
+ questionId: offer.projection.questions[0].question_id,
138
+ responseKind: input.response.answers[0].response_kind,
139
+ outcome: result.status === "advance" ? "submitted_or_advanced" : "confirmed" };
140
+ }
141
+ finally {
142
+ await closeClient(opened.client);
143
+ }
144
+ }
145
+ function requireConfirmedAnswer(receipt, requestId, itemId) {
146
+ if (receipt.status !== "confirmed" || receipt.requestId !== requestId ||
147
+ receipt.itemId !== itemId) {
148
+ throw new TerminalInteractionDispatchReservedError("key_uncertain", "The exact native Codex answer is not durably confirmed");
149
+ }
150
+ }
151
+ async function closeClient(client) {
152
+ try {
153
+ await client.close();
154
+ }
155
+ catch { /* Cleanup cannot change an already confirmed response. */ }
156
+ }
157
+ //# sourceMappingURL=codex-paginated-questionnaire-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-paginated-questionnaire-runtime.js","sourceRoot":"","sources":["../../src/codex-paginated-questionnaire-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { type CodexPaginatedVersion } from "./codex-lifecycle-compatibility.js";
2
+ import type { CodexAppServerThread, CodexAppServerTurn } from "./codex-app-server-read-client.js";
3
+ import type { CodexAsyncQuestionDurableEvidence } from "./codex-async-question-adapter.js";
4
+ import type { TerminalCompletionEvidence } from "./terminal-agent-adapter.js";
5
+ import { type CodexBlockingQuestionDraft } from "./codex-app-server-questionnaire.js";
6
+ import { type TerminalSubmissionAcceptanceEvidence } from "./terminal-submission-facts.js";
7
+ export interface CodexPaginatedTaskAnchor {
8
+ schema: "agent-knock-knock/codex-paginated-task-anchor";
9
+ version: 1;
10
+ origin: "user_explicit_send" | "active_task";
11
+ captured_at: string;
12
+ codex_home: string;
13
+ codex_version: CodexPaginatedVersion;
14
+ native_thread_id: string;
15
+ process_uuid: string;
16
+ process_birth: string;
17
+ pid: number;
18
+ request_hash: string;
19
+ baseline_latest_turn_id?: string;
20
+ turn_id?: string;
21
+ anchor_fingerprint: string;
22
+ }
23
+ export interface CodexPaginatedTaskCheckpoint {
24
+ schema: "agent-knock-knock/codex-paginated-task-checkpoint";
25
+ version: 1;
26
+ safe_resume_offset_bytes: 0;
27
+ acceptance_evidence?: TerminalSubmissionAcceptanceEvidence;
28
+ /** Owner-private partial answers; never copy this field into callbacks. */
29
+ blocking_question_draft?: CodexBlockingQuestionDraft;
30
+ }
31
+ /** The reader proves contiguous descending turns through the required boundary. */
32
+ export interface CodexPaginatedTaskSnapshot {
33
+ codexHome: string;
34
+ serverVersion: string;
35
+ thread: CodexAppServerThread;
36
+ turns: readonly CodexAppServerTurn[];
37
+ completeToBoundary: boolean;
38
+ }
39
+ interface AcceptedPaginatedTaskObservation {
40
+ evidence: TerminalSubmissionAcceptanceEvidence;
41
+ checkpoint: CodexPaginatedTaskCheckpoint;
42
+ questions: readonly CodexAsyncQuestionDurableEvidence[];
43
+ }
44
+ export type CodexPaginatedTaskObservation = {
45
+ status: "pending";
46
+ checkpoint: CodexPaginatedTaskCheckpoint;
47
+ questions: readonly CodexAsyncQuestionDurableEvidence[];
48
+ } | ({
49
+ status: "accepted";
50
+ } & AcceptedPaginatedTaskObservation) | ({
51
+ status: "completed";
52
+ completion: TerminalCompletionEvidence;
53
+ } & AcceptedPaginatedTaskObservation) | {
54
+ status: "uncertain";
55
+ reason: string;
56
+ } | {
57
+ status: "unavailable";
58
+ reason: string;
59
+ retryable: true;
60
+ } | {
61
+ status: "invalidated";
62
+ reason: string;
63
+ };
64
+ export declare function createCodexPaginatedTaskAnchor(input: Omit<CodexPaginatedTaskAnchor, "schema" | "version" | "anchor_fingerprint">): CodexPaginatedTaskAnchor;
65
+ export declare function validateCodexPaginatedTaskAnchor(value: unknown): CodexPaginatedTaskAnchor;
66
+ export declare function createCodexPaginatedTaskCheckpoint(acceptanceEvidence?: TerminalSubmissionAcceptanceEvidence, blockingQuestionDraft?: CodexBlockingQuestionDraft): CodexPaginatedTaskCheckpoint;
67
+ export declare function validateCodexPaginatedTaskCheckpoint(value: unknown, anchor?: CodexPaginatedTaskAnchor): CodexPaginatedTaskCheckpoint;
68
+ /** Inspect already-read data only; this module never opens a socket or a file. */
69
+ export declare function observeCodexPaginatedTask(input: {
70
+ anchor: CodexPaginatedTaskAnchor;
71
+ snapshot: CodexPaginatedTaskSnapshot;
72
+ checkpoint?: CodexPaginatedTaskCheckpoint;
73
+ }): CodexPaginatedTaskObservation;
74
+ /** Hash the native stored input; the pre-Send caller profiles input normalization. */
75
+ export declare function codexPaginatedTurnRequestHash(turn: CodexAppServerTurn): string | undefined;
76
+ /** Native completion clears its question queue, regardless of retained history. */
77
+ export declare function codexPaginatedAsyncQuestionEvidence(turn: CodexAppServerTurn, newerTurns?: readonly CodexAppServerTurn[]): readonly CodexAsyncQuestionDurableEvidence[];
78
+ export {};