@scotthuang/agent-knock-knock 0.13.16 → 0.13.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/claude-terminal-agent-adapter.js +1 -1
  3. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  4. package/dist/src/codex-app-server-interaction-client.js +68 -26
  5. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  6. package/dist/src/codex-app-server-read-client.js +52 -20
  7. package/dist/src/codex-app-server-read-client.js.map +1 -1
  8. package/dist/src/codex-astra-composer-proof.js +1 -1
  9. package/dist/src/codex-astra-composer-proof.js.map +1 -1
  10. package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
  11. package/dist/src/codex-open-rollout-inventory.js +365 -0
  12. package/dist/src/codex-open-rollout-inventory.js.map +1 -0
  13. package/dist/src/codex-paginated-thread-binding.js +1 -1
  14. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  15. package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
  16. package/dist/src/codex-rollout-bound-completion.js +357 -0
  17. package/dist/src/codex-rollout-bound-completion.js.map +1 -0
  18. package/dist/src/codex-rollout-file.d.ts +15 -0
  19. package/dist/src/codex-rollout-file.js +98 -0
  20. package/dist/src/codex-rollout-file.js.map +1 -0
  21. package/dist/src/codex-rollout-human-task.d.ts +61 -0
  22. package/dist/src/codex-rollout-human-task.js +555 -0
  23. package/dist/src/codex-rollout-human-task.js.map +1 -0
  24. package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
  25. package/dist/src/codex-rollout-interaction-evidence.js +521 -0
  26. package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
  27. package/dist/src/codex-rollout-inventory.d.ts +5 -0
  28. package/dist/src/codex-rollout-inventory.js +81 -0
  29. package/dist/src/codex-rollout-inventory.js.map +1 -0
  30. package/dist/src/codex-rollout-records.d.ts +49 -0
  31. package/dist/src/codex-rollout-records.js +298 -0
  32. package/dist/src/codex-rollout-records.js.map +1 -0
  33. package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
  34. package/dist/src/codex-sqlite-thread-query.js +440 -0
  35. package/dist/src/codex-sqlite-thread-query.js.map +1 -0
  36. package/dist/src/codex-status-history-navigation.d.ts +1 -1
  37. package/dist/src/codex-status-history-navigation.js +1 -1
  38. package/dist/src/codex-status-history-navigation.js.map +1 -1
  39. package/dist/src/codex-store-adapter.d.ts +3 -50
  40. package/dist/src/codex-store-adapter.js +5 -796
  41. package/dist/src/codex-store-adapter.js.map +1 -1
  42. package/dist/src/codex-terminal-agent-adapter.js +1 -1
  43. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  44. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +4 -134
  45. package/dist/src/native-thread-lifecycle-cli-adapter.js +19 -633
  46. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  47. package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
  48. package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
  49. package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
  50. package/dist/src/semantic-permission-control.js +33 -6
  51. package/dist/src/semantic-permission-control.js.map +1 -1
  52. package/dist/src/semantic-tool-descriptions.d.ts +26 -0
  53. package/dist/src/semantic-tool-descriptions.js +259 -0
  54. package/dist/src/semantic-tool-descriptions.js.map +1 -0
  55. package/dist/src/semantic-tool-runtime.js +45 -37
  56. package/dist/src/semantic-tool-runtime.js.map +1 -1
  57. package/dist/src/semantic-tool-schemas.js +134 -33
  58. package/dist/src/semantic-tool-schemas.js.map +1 -1
  59. package/dist/src/terminal-action-contracts.d.ts +4 -0
  60. package/dist/src/terminal-action-contracts.js +695 -0
  61. package/dist/src/terminal-action-contracts.js.map +1 -0
  62. package/dist/src/terminal-composer-classifier.d.ts +1 -1
  63. package/dist/src/terminal-composer-classifier.js +2 -2
  64. package/dist/src/terminal-composer-classifier.js.map +1 -1
  65. package/dist/src/terminal-interaction-response-bridge.js +1 -1
  66. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  67. package/dist/src/terminal-list-renderer.d.ts +1 -2
  68. package/dist/src/terminal-list-renderer.js +8 -424
  69. package/dist/src/terminal-list-renderer.js.map +1 -1
  70. package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
  71. package/dist/src/terminal-model-control-availability.d.ts +1 -1
  72. package/dist/src/terminal-model-control-availability.js +1 -1
  73. package/dist/src/terminal-model-control-availability.js.map +1 -1
  74. package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
  75. package/dist/src/terminal-model-control-cli-adapter.js +669 -0
  76. package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
  77. package/dist/src/terminal-model-control-contract.d.ts +198 -0
  78. package/dist/src/terminal-model-control-contract.js +15 -0
  79. package/dist/src/terminal-model-control-contract.js.map +1 -0
  80. package/dist/src/terminal-model-control-input.d.ts +29 -0
  81. package/dist/src/terminal-model-control-input.js +86 -0
  82. package/dist/src/terminal-model-control-input.js.map +1 -0
  83. package/dist/src/terminal-model-control-profile.d.ts +2 -0
  84. package/dist/src/terminal-model-control-profile.js +6 -0
  85. package/dist/src/terminal-model-control-profile.js.map +1 -1
  86. package/dist/src/terminal-model-control-subject.d.ts +52 -0
  87. package/dist/src/terminal-model-control-subject.js +73 -0
  88. package/dist/src/terminal-model-control-subject.js.map +1 -1
  89. package/dist/src/terminal-model-control-surface.d.ts +82 -0
  90. package/dist/src/terminal-model-control-surface.js +688 -0
  91. package/dist/src/terminal-model-control-surface.js.map +1 -0
  92. package/dist/src/terminal-model-control.d.ts +6 -270
  93. package/dist/src/terminal-model-control.js +11 -988
  94. package/dist/src/terminal-model-control.js.map +1 -1
  95. package/dist/src/terminal-model-selection.d.ts +33 -0
  96. package/dist/src/terminal-model-selection.js +143 -0
  97. package/dist/src/terminal-model-selection.js.map +1 -0
  98. package/dist/src/terminal-monitor-application-service.js +38 -59
  99. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  100. package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
  101. package/dist/src/terminal-monitor-attention-store.js +518 -0
  102. package/dist/src/terminal-monitor-attention-store.js.map +1 -0
  103. package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
  104. package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
  105. package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
  106. package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
  107. package/dist/src/terminal-monitor-interaction-projection.js +48 -0
  108. package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
  109. package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
  110. package/dist/src/terminal-monitor-startup-recovery.js +767 -0
  111. package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
  112. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
  113. package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
  114. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
  115. package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
  116. package/dist/src/terminal-monitor-state-contract.js +8 -0
  117. package/dist/src/terminal-monitor-state-contract.js.map +1 -0
  118. package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
  119. package/dist/src/terminal-native-inspection-bridge.js +7 -646
  120. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  121. package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
  122. package/dist/src/terminal-native-inspection-contract.js +38 -0
  123. package/dist/src/terminal-native-inspection-contract.js.map +1 -0
  124. package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
  125. package/dist/src/terminal-native-inspection-profile.js +185 -0
  126. package/dist/src/terminal-native-inspection-profile.js.map +1 -0
  127. package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
  128. package/dist/src/terminal-native-inspection-proof.js +362 -0
  129. package/dist/src/terminal-native-inspection-proof.js.map +1 -0
  130. package/dist/src/terminal-permission-control-bridge.js +1 -1
  131. package/dist/src/terminal-permission-control-bridge.js.map +1 -1
  132. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
  133. package/dist/src/terminal-runtime-cli-adapter.js +1 -1
  134. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  135. package/dist/src/terminal-submission-acceptance.d.ts +5 -148
  136. package/dist/src/terminal-submission-acceptance.js +21 -1845
  137. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  138. package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
  139. package/dist/src/terminal-watch-anchor-capture.js +139 -0
  140. package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
  141. package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
  142. package/dist/src/terminal-watch-cli-adapter.js +10 -1992
  143. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  144. package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
  145. package/dist/src/terminal-watch-cli-contract.js +2 -0
  146. package/dist/src/terminal-watch-cli-contract.js.map +1 -0
  147. package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
  148. package/dist/src/terminal-watch-fallback-observation.js +249 -0
  149. package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
  150. package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
  151. package/dist/src/terminal-watch-interaction-observation.js +262 -0
  152. package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
  153. package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
  154. package/dist/src/terminal-watch-observation-adapter.js +307 -0
  155. package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
  156. package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
  157. package/dist/src/terminal-watch-observation-evidence.js +184 -0
  158. package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
  159. package/dist/src/terminal-watch-response-authority.d.ts +6 -0
  160. package/dist/src/terminal-watch-response-authority.js +333 -0
  161. package/dist/src/terminal-watch-response-authority.js.map +1 -0
  162. package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
  163. package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
  164. package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
  165. package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
  166. package/dist/src/terminal-watch-terminal-identity.js +380 -0
  167. package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
  168. package/package.json +1 -1
@@ -0,0 +1,49 @@
1
+ export declare const CODEX_VERSION_PATTERN: RegExp;
2
+ export interface CodexJsonlRecordAtOffset {
3
+ value: Record<string, any>;
4
+ offsetBytes: number;
5
+ }
6
+ export declare function parseCodexJsonlRecords(buffer: Buffer, label: string): CodexJsonlRecordAtOffset[];
7
+ export declare function assertExistingCodexRolloutHeader(buffer: Buffer, nativeThreadId: string): string;
8
+ /**
9
+ * Persisted anchors must check the history contract without widening their
10
+ * existing thread/version requirements. Older legacy headers can be minimal.
11
+ */
12
+ export declare function assertCodexRolloutLegacyHistory(buffer: Buffer): void;
13
+ export declare function positiveByteLimit(value: number | undefined, fallback: number, label: string): number;
14
+ export declare function safeByteOffset(value: unknown, label: string): number;
15
+ type ExactCodexTaskCompleteScan = {
16
+ status: "completed";
17
+ text: string;
18
+ timestamp?: string;
19
+ scannedRecords: number;
20
+ observedTaskCompleteRecords: number;
21
+ observedTurnAbortedRecords: number;
22
+ } | {
23
+ status: "aborted";
24
+ reason?: string;
25
+ timestamp?: string;
26
+ scannedRecords: number;
27
+ observedTaskCompleteRecords: number;
28
+ observedTurnAbortedRecords: number;
29
+ } | {
30
+ status: "pending";
31
+ scannedRecords: number;
32
+ observedTaskCompleteRecords: number;
33
+ observedTurnAbortedRecords: number;
34
+ } | {
35
+ status: "failure";
36
+ code: "invalid_rollout_jsonl" | "duplicate_exact_completion" | "duplicate_exact_abort" | "conflicting_exact_settlement" | "later_turn_started" | "invalid_exact_completion" | "invalid_exact_abort";
37
+ detail: string;
38
+ scannedRecords: number;
39
+ observedTaskCompleteRecords: number;
40
+ observedTurnAbortedRecords: number;
41
+ };
42
+ export declare function scanExactCodexTaskComplete(text: string, acceptanceId: string): ExactCodexTaskCompleteScan;
43
+ export declare function truncateCompletionText(value: string): string;
44
+ export declare function exactCodexUserResponseText(content: unknown): string | undefined;
45
+ export declare function isRetryableProviderIoError(error: unknown): boolean;
46
+ export declare function optionalString(value: unknown): string | undefined;
47
+ export declare function fingerprintText(value: string): string;
48
+ export declare function isRecord(value: unknown): value is Record<string, any>;
49
+ export {};
@@ -0,0 +1,298 @@
1
+ // Pure legacy rollout record parsing, validation and completion scanning.
2
+ import { codexThreadUsesLegacyRollout, } from "./codex-session-provider.js";
3
+ import { exactNativeThreadId, validTimestamp, } from "./terminal-submission-facts.js";
4
+ import { createHash, } from "node:crypto";
5
+ const CODEX_COMPLETION_MAX_TEXT_LENGTH = 4000;
6
+ export const CODEX_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u;
7
+ export function parseCodexJsonlRecords(buffer, label) {
8
+ if (buffer.length > 0 && buffer[buffer.length - 1] !== 0x0a) {
9
+ throw new Error(`Codex ${label} ends with an incomplete JSONL record`);
10
+ }
11
+ const records = [];
12
+ let offset = 0;
13
+ while (offset < buffer.length) {
14
+ const newline = buffer.indexOf(0x0a, offset);
15
+ if (newline < 0) {
16
+ break;
17
+ }
18
+ const recordOffset = offset;
19
+ let lineBuffer = buffer.subarray(offset, newline);
20
+ if (lineBuffer.at(-1) === 0x0d) {
21
+ lineBuffer = lineBuffer.subarray(0, lineBuffer.length - 1);
22
+ }
23
+ offset = newline + 1;
24
+ const line = lineBuffer.toString("utf8");
25
+ if (!line.trim()) {
26
+ continue;
27
+ }
28
+ let parsed;
29
+ try {
30
+ parsed = JSON.parse(line);
31
+ }
32
+ catch {
33
+ throw new Error(`Codex ${label} contains invalid JSONL`);
34
+ }
35
+ if (!isRecord(parsed)) {
36
+ throw new Error(`Codex ${label} contains a non-object JSONL record`);
37
+ }
38
+ records.push({ value: parsed, offsetBytes: recordOffset });
39
+ }
40
+ return records;
41
+ }
42
+ export function assertExistingCodexRolloutHeader(buffer, nativeThreadId) {
43
+ const first = parseCodexJsonlRecords(buffer, "active-task rollout")[0]?.value;
44
+ const payload = first?.type === "session_meta" && isRecord(first.payload)
45
+ ? first.payload
46
+ : undefined;
47
+ if (!payload ||
48
+ exactNativeThreadId(payload.id) !== nativeThreadId ||
49
+ payload.originator !== "codex-tui" ||
50
+ payload.source !== "cli") {
51
+ throw new Error("Codex active-task rollout header does not identify the exact CLI thread");
52
+ }
53
+ if (!codexThreadUsesLegacyRollout(payload)) {
54
+ throw new Error("Codex rollout does not use legacy history");
55
+ }
56
+ const codexVersion = optionalString(payload.cli_version);
57
+ if (!codexVersion || !CODEX_VERSION_PATTERN.test(codexVersion)) {
58
+ throw new Error("Codex active-task rollout header has no exact CLI version");
59
+ }
60
+ return codexVersion;
61
+ }
62
+ /**
63
+ * Persisted anchors must check the history contract without widening their
64
+ * existing thread/version requirements. Older legacy headers can be minimal.
65
+ */
66
+ export function assertCodexRolloutLegacyHistory(buffer) {
67
+ const first = parseCodexJsonlRecords(buffer, "rollout header")[0]?.value;
68
+ const payload = first?.type === "session_meta" && isRecord(first.payload)
69
+ ? first.payload
70
+ : undefined;
71
+ if (payload && !codexThreadUsesLegacyRollout(payload)) {
72
+ throw new Error("Codex rollout does not use legacy history");
73
+ }
74
+ }
75
+ export function positiveByteLimit(value, fallback, label) {
76
+ const result = value ?? fallback;
77
+ if (!Number.isSafeInteger(result) || result <= 0) {
78
+ throw new Error(`${label} byte limit is invalid`);
79
+ }
80
+ return result;
81
+ }
82
+ export function safeByteOffset(value, label) {
83
+ if (!Number.isSafeInteger(value) || Number(value) < 0) {
84
+ throw new Error(`${label} is invalid`);
85
+ }
86
+ return Number(value);
87
+ }
88
+ export function scanExactCodexTaskComplete(text, acceptanceId) {
89
+ let scannedRecords = 0;
90
+ let observedTaskCompleteRecords = 0;
91
+ let observedTurnAbortedRecords = 0;
92
+ let exactTaskStartedIndex;
93
+ let laterTaskStartedIndex;
94
+ const exactMatches = [];
95
+ const exactAborts = [];
96
+ for (const rawLine of text.split("\n")) {
97
+ const line = rawLine.endsWith("\r") ? rawLine.slice(0, -1) : rawLine;
98
+ if (!line) {
99
+ continue;
100
+ }
101
+ let value;
102
+ try {
103
+ value = JSON.parse(line);
104
+ }
105
+ catch {
106
+ return {
107
+ status: "failure",
108
+ code: "invalid_rollout_jsonl",
109
+ detail: `Codex bound completion suffix contains invalid JSONL at record ${scannedRecords + 1}`,
110
+ scannedRecords,
111
+ observedTaskCompleteRecords,
112
+ observedTurnAbortedRecords
113
+ };
114
+ }
115
+ const recordIndex = scannedRecords;
116
+ scannedRecords += 1;
117
+ if (isRecord(value) &&
118
+ value.type === "event_msg" &&
119
+ isRecord(value.payload) &&
120
+ value.payload.type === "task_started") {
121
+ const turnId = optionalString(value.payload.turn_id)?.toLowerCase();
122
+ if (turnId === acceptanceId) {
123
+ exactTaskStartedIndex ??= recordIndex;
124
+ }
125
+ else if (exactTaskStartedIndex !== undefined &&
126
+ laterTaskStartedIndex === undefined) {
127
+ laterTaskStartedIndex = recordIndex;
128
+ }
129
+ continue;
130
+ }
131
+ if (isRecord(value) &&
132
+ value.type === "event_msg" &&
133
+ isRecord(value.payload) &&
134
+ value.payload.type === "turn_aborted") {
135
+ observedTurnAbortedRecords += 1;
136
+ const turnId = optionalString(value.payload.turn_id)?.toLowerCase();
137
+ if (turnId === acceptanceId) {
138
+ exactAborts.push({ value, index: recordIndex });
139
+ }
140
+ continue;
141
+ }
142
+ if (!isRecord(value) ||
143
+ value.type !== "event_msg" ||
144
+ !isRecord(value.payload) ||
145
+ value.payload.type !== "task_complete") {
146
+ continue;
147
+ }
148
+ observedTaskCompleteRecords += 1;
149
+ const turnId = optionalString(value.payload.turn_id)?.toLowerCase();
150
+ if (turnId === acceptanceId) {
151
+ exactMatches.push({ value, index: recordIndex });
152
+ }
153
+ }
154
+ if (exactMatches.length > 1) {
155
+ return {
156
+ status: "failure",
157
+ code: "duplicate_exact_completion",
158
+ detail: "the exact accepted Codex turn has duplicate task_complete records",
159
+ scannedRecords,
160
+ observedTaskCompleteRecords,
161
+ observedTurnAbortedRecords
162
+ };
163
+ }
164
+ if (exactAborts.length > 1) {
165
+ return {
166
+ status: "failure",
167
+ code: "duplicate_exact_abort",
168
+ detail: "the exact accepted Codex turn has duplicate turn_aborted records",
169
+ scannedRecords,
170
+ observedTaskCompleteRecords,
171
+ observedTurnAbortedRecords
172
+ };
173
+ }
174
+ if (exactMatches.length > 0 && exactAborts.length > 0) {
175
+ return {
176
+ status: "failure",
177
+ code: "conflicting_exact_settlement",
178
+ detail: "the exact accepted Codex turn has conflicting completion and abort records",
179
+ scannedRecords,
180
+ observedTaskCompleteRecords,
181
+ observedTurnAbortedRecords
182
+ };
183
+ }
184
+ const exactSettlementIndex = exactMatches[0]?.index ?? exactAborts[0]?.index;
185
+ if (laterTaskStartedIndex !== undefined &&
186
+ (exactSettlementIndex === undefined ||
187
+ laterTaskStartedIndex < exactSettlementIndex)) {
188
+ return {
189
+ status: "failure",
190
+ code: "later_turn_started",
191
+ detail: "a later Codex native turn started before the exact accepted turn settled",
192
+ scannedRecords,
193
+ observedTaskCompleteRecords,
194
+ observedTurnAbortedRecords
195
+ };
196
+ }
197
+ if (exactAborts.length === 1) {
198
+ const match = exactAborts[0].value;
199
+ if (match.timestamp !== undefined && !validTimestamp(match.timestamp)) {
200
+ return {
201
+ status: "failure",
202
+ code: "invalid_exact_abort",
203
+ detail: "the exact Codex turn_aborted record has an invalid timestamp",
204
+ scannedRecords,
205
+ observedTaskCompleteRecords,
206
+ observedTurnAbortedRecords
207
+ };
208
+ }
209
+ const payload = match.payload;
210
+ return {
211
+ status: "aborted",
212
+ reason: optionalString(payload.reason),
213
+ ...(match.timestamp !== undefined
214
+ ? { timestamp: String(match.timestamp) }
215
+ : {}),
216
+ scannedRecords,
217
+ observedTaskCompleteRecords,
218
+ observedTurnAbortedRecords
219
+ };
220
+ }
221
+ if (exactMatches.length === 0) {
222
+ return {
223
+ status: "pending",
224
+ scannedRecords,
225
+ observedTaskCompleteRecords,
226
+ observedTurnAbortedRecords
227
+ };
228
+ }
229
+ const match = exactMatches[0].value;
230
+ const payload = match.payload;
231
+ const textValue = optionalString(payload.last_agent_message);
232
+ if (!textValue) {
233
+ return {
234
+ status: "failure",
235
+ code: "invalid_exact_completion",
236
+ detail: "the exact Codex task_complete record has no final agent message",
237
+ scannedRecords,
238
+ observedTaskCompleteRecords,
239
+ observedTurnAbortedRecords
240
+ };
241
+ }
242
+ if (match.timestamp !== undefined && !validTimestamp(match.timestamp)) {
243
+ return {
244
+ status: "failure",
245
+ code: "invalid_exact_completion",
246
+ detail: "the exact Codex task_complete record has an invalid timestamp",
247
+ scannedRecords,
248
+ observedTaskCompleteRecords,
249
+ observedTurnAbortedRecords
250
+ };
251
+ }
252
+ return {
253
+ status: "completed",
254
+ text: textValue,
255
+ ...(match.timestamp !== undefined
256
+ ? { timestamp: String(match.timestamp) }
257
+ : {}),
258
+ scannedRecords,
259
+ observedTaskCompleteRecords,
260
+ observedTurnAbortedRecords
261
+ };
262
+ }
263
+ export function truncateCompletionText(value) {
264
+ return value.length <= CODEX_COMPLETION_MAX_TEXT_LENGTH
265
+ ? value
266
+ : `${value.slice(0, CODEX_COMPLETION_MAX_TEXT_LENGTH - 1)}…`;
267
+ }
268
+ export function exactCodexUserResponseText(content) {
269
+ if (!Array.isArray(content) || content.length !== 1) {
270
+ return undefined;
271
+ }
272
+ const item = content[0];
273
+ return isRecord(item) && item.type === "input_text" &&
274
+ typeof item.text === "string"
275
+ ? item.text
276
+ : undefined;
277
+ }
278
+ export function isRetryableProviderIoError(error) {
279
+ if (!isRecord(error) || typeof error.code !== "string") {
280
+ return false;
281
+ }
282
+ return new Set([
283
+ "EACCES", "EAGAIN", "EBUSY", "EIO", "EMFILE", "ENFILE", "ENOENT",
284
+ "EPERM", "ESTALE", "ETIMEDOUT"
285
+ ]).has(error.code);
286
+ }
287
+ export function optionalString(value) {
288
+ return typeof value === "string" && value.trim().length > 0
289
+ ? value.trim()
290
+ : undefined;
291
+ }
292
+ export function fingerprintText(value) {
293
+ return createHash("sha256").update(value).digest("hex");
294
+ }
295
+ export function isRecord(value) {
296
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
297
+ }
298
+ //# sourceMappingURL=codex-rollout-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-rollout-records.js","sourceRoot":"","sources":["../../src/codex-rollout-records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { type CodexThreadRow } from "./codex-session-provider.js";
2
+ /** SQLite command protocol and file-stability evidence; no terminal identity inference. */
3
+ export type CodexSqliteOpenMode = "readonly" | "query_only";
4
+ export interface CodexSqliteThreadQueryRequest {
5
+ dbPath: string;
6
+ openMode: CodexSqliteOpenMode;
7
+ maxSessions: number;
8
+ nativeThreadId?: string;
9
+ filters?: CodexThreadQueryFilters;
10
+ afterSchema?: (columns: readonly string[]) => void | Promise<void>;
11
+ }
12
+ export interface CodexThreadQueryFilters {
13
+ cwd?: string;
14
+ source?: string;
15
+ archived?: boolean;
16
+ modelProvider?: string;
17
+ historyMode?: string;
18
+ }
19
+ export interface CodexSqliteThreadQueryResult {
20
+ columns: string[];
21
+ rows: CodexThreadRow[];
22
+ }
23
+ export type CodexSqliteThreadQueryRunner = (request: CodexSqliteThreadQueryRequest) => Promise<CodexSqliteThreadQueryResult>;
24
+ export declare const NATIVE_THREAD_ID_PATTERN: RegExp;
25
+ export declare const MAX_SQLITE_QUERY_OUTPUT_BYTES: number;
26
+ export declare const MAX_SQLITE_ERROR_OUTPUT_BYTES: number;
27
+ export declare const SQLITE_QUERY_TIMEOUT_MS = 10000;
28
+ export interface CodexSqliteFileIdentity {
29
+ path: string;
30
+ exists: boolean;
31
+ kind?: "file" | "directory" | "other";
32
+ device?: string;
33
+ inode?: string;
34
+ size?: number;
35
+ mtimeMs?: number;
36
+ errorCode?: string;
37
+ }
38
+ export interface CodexSqliteFilesSnapshot {
39
+ dbPath: string;
40
+ main: CodexSqliteFileIdentity;
41
+ wal: CodexSqliteFileIdentity;
42
+ shm: CodexSqliteFileIdentity;
43
+ }
44
+ export interface CodexSqliteQueryFailure {
45
+ dbPath: string;
46
+ stage: string;
47
+ status: number | null;
48
+ detail: string;
49
+ files: CodexSqliteFilesSnapshot;
50
+ previousFailure?: CodexSqliteQueryFailure;
51
+ }
52
+ export declare class CodexSqliteSessionError extends Error {
53
+ readonly status: number | null;
54
+ readonly stage: string;
55
+ constructor({ message, status, stage }: {
56
+ message: string;
57
+ status: number | null;
58
+ stage: string;
59
+ });
60
+ }
61
+ export declare function runCodexSqliteThreadQuery(request: CodexSqliteThreadQueryRequest): Promise<CodexSqliteThreadQueryResult>;
62
+ export declare function validateCodexThreadQueryResult(result: CodexSqliteThreadQueryResult): CodexThreadRow[];
63
+ export declare function validateCodexThreadColumns(columns: readonly string[]): void;
64
+ export declare function sqliteReadWriteUri(dbPath: string): string;
65
+ export declare function inspectCodexSqliteFiles(dbPath: string): CodexSqliteFilesSnapshot;
66
+ export declare function inspectCodexSqliteFile(filePath: string): CodexSqliteFileIdentity;
67
+ export declare function assertStableCodexSqliteMain({ baseline, current, stage, selectedPath }: {
68
+ baseline: CodexSqliteFilesSnapshot;
69
+ current: CodexSqliteFilesSnapshot;
70
+ stage: string;
71
+ selectedPath?: string;
72
+ }): void;
73
+ export declare function codexSqliteQueryFailure(error: unknown, context: {
74
+ dbPath: string;
75
+ stage: string;
76
+ files: CodexSqliteFilesSnapshot;
77
+ previousFailure?: CodexSqliteQueryFailure;
78
+ }): CodexSqliteQueryFailure;
79
+ export declare function isSqliteCantOpen(failure: CodexSqliteQueryFailure): boolean;
80
+ export declare function codexSqliteQueryDiagnosticError(failure: CodexSqliteQueryFailure): Error;
81
+ export declare function formatCodexSqliteFiles(snapshot: CodexSqliteFilesSnapshot): string;
82
+ export declare function latestStateDbPath(codexHome: string): string | undefined;
83
+ export declare function buildThreadSelect(columns: string[], limit: number, filters?: CodexThreadQueryFilters): string;
84
+ export declare function sqliteThreadFilterParameterCommands(filters: CodexThreadQueryFilters | undefined): string[];
85
+ export declare function buildThreadByIdSelect(columns: string[], nativeThreadId: string): string;