@scotthuang/agent-knock-knock 0.10.1 → 0.10.2

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.
@@ -0,0 +1,454 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ export function validateTerminalSubmissionAcceptanceEvidence(value, expected) {
5
+ if (!isRecord(value)) {
6
+ throw new Error("native acceptance evidence is unavailable");
7
+ }
8
+ const allowedKeys = new Set([
9
+ "source",
10
+ "kind",
11
+ "nativeThreadId",
12
+ "requestHash",
13
+ "acceptanceId",
14
+ "acceptedAt",
15
+ "anchorFingerprint",
16
+ "evidenceFingerprint",
17
+ "metadata"
18
+ ]);
19
+ if (Object.keys(value).some((key) => !allowedKeys.has(key))) {
20
+ throw new Error("native acceptance evidence contains unsupported fields");
21
+ }
22
+ if (value.source !== expected.source || value.kind !== "native_user_turn") {
23
+ throw new Error("native acceptance evidence has the wrong agent or kind");
24
+ }
25
+ if (requiredString(value.nativeThreadId, "native acceptance thread") !==
26
+ requiredString(expected.nativeThreadId, "expected native acceptance thread") ||
27
+ sha256Value(value.requestHash, "native acceptance request hash") !==
28
+ sha256Value(expected.requestHash, "expected native acceptance request hash")) {
29
+ throw new Error("native acceptance evidence does not match the exact request binding");
30
+ }
31
+ requiredString(value.acceptanceId, "native acceptance id");
32
+ sha256Value(value.anchorFingerprint, "native acceptance anchor fingerprint");
33
+ sha256Value(value.evidenceFingerprint, "native acceptance evidence fingerprint");
34
+ if (value.acceptedAt !== undefined && !validTimestamp(value.acceptedAt)) {
35
+ throw new Error("native acceptance evidence timestamp is invalid");
36
+ }
37
+ if (value.metadata !== undefined) {
38
+ if (!isRecord(value.metadata)) {
39
+ throw new Error("native acceptance evidence metadata is invalid");
40
+ }
41
+ const allowedMetadata = value.source === "codex_rollout"
42
+ ? new Set([
43
+ "turn_id",
44
+ "anchor_offset_bytes",
45
+ "observed_end_offset_bytes"
46
+ ])
47
+ : new Set([
48
+ "prompt_uuid",
49
+ "claude_version",
50
+ "transcript_file_id",
51
+ "anchor_offset_bytes",
52
+ "observed_end_offset_bytes",
53
+ "agent_started_at_ms"
54
+ ]);
55
+ for (const [key, item] of Object.entries(value.metadata)) {
56
+ if (!allowedMetadata.has(key) ||
57
+ !(typeof item === "string" ||
58
+ (typeof item === "number" && Number.isFinite(item)))) {
59
+ throw new Error("native acceptance evidence metadata is not allowlisted");
60
+ }
61
+ }
62
+ }
63
+ const { evidenceFingerprint, ...base } = value;
64
+ if (fingerprint(base) !== evidenceFingerprint) {
65
+ throw new Error("native acceptance evidence fingerprint does not match");
66
+ }
67
+ return value;
68
+ }
69
+ export function terminalSubmissionReplayReceipt(options) {
70
+ if (options.proofLevel !== "agent_accepted") {
71
+ return {
72
+ replayed: true,
73
+ delivered: false,
74
+ status: "submission_pending_acceptance",
75
+ submission_outcome: "pending_acceptance",
76
+ delivery_receipt: options.proofLevel,
77
+ do_not_retry: true
78
+ };
79
+ }
80
+ try {
81
+ validateTerminalSubmissionAcceptanceEvidence(options.evidence, options.expected);
82
+ return {
83
+ replayed: true,
84
+ delivered: true,
85
+ status: "async_pending",
86
+ submission_outcome: "agent_accepted",
87
+ delivery_receipt: "agent_accepted"
88
+ };
89
+ }
90
+ catch (error) {
91
+ return {
92
+ replayed: true,
93
+ delivered: false,
94
+ status: "submission_uncertain",
95
+ submission_outcome: "uncertain",
96
+ delivery_receipt: "enter_dispatched",
97
+ do_not_retry: true,
98
+ evidence_error: error instanceof Error ? error.message : String(error)
99
+ };
100
+ }
101
+ }
102
+ const CODEX_ACCEPTANCE_MAX_BYTES = 16 * 1024 * 1024;
103
+ const NATIVE_THREAD_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
104
+ const NO_FOLLOW_FLAG = typeof fs.constants.O_NOFOLLOW === "number"
105
+ ? fs.constants.O_NOFOLLOW
106
+ : 0;
107
+ export function captureCodexRolloutAcceptanceAnchor(options) {
108
+ const nativeThreadId = exactNativeThreadId(options.nativeThreadId);
109
+ const processUuid = requiredString(options.processUuid, "Codex process UUID");
110
+ const processBirth = requiredString(options.processBirth, "Codex process birth");
111
+ const capturedAt = (options.now ?? new Date()).toISOString();
112
+ const base = {
113
+ schema: "agent-knock-knock/codex-rollout-acceptance-anchor",
114
+ version: 1,
115
+ native_thread_id: nativeThreadId,
116
+ process_uuid: processUuid,
117
+ process_birth: processBirth,
118
+ captured_at: capturedAt
119
+ };
120
+ if (options.mode === "pre_materialization") {
121
+ const withoutFile = {
122
+ ...base,
123
+ mode: "pre_materialization",
124
+ file_existed: false,
125
+ offset_bytes: 0,
126
+ expected_empty_native_session: true
127
+ };
128
+ return {
129
+ ...withoutFile,
130
+ anchor_fingerprint: fingerprint(withoutFile)
131
+ };
132
+ }
133
+ const rollout = normalizedRolloutIdentity(options.rollout);
134
+ const opened = openExactRollout(rollout);
135
+ try {
136
+ const before = opened.stat;
137
+ assertPrivateRegularFile(before);
138
+ if (before.size > 0 && !fileEndsWithNewline(opened.fd, before.size)) {
139
+ throw new Error("Codex rollout did not end at a complete JSONL record before terminal submission");
140
+ }
141
+ const after = fs.fstatSync(opened.fd);
142
+ if (!sameStableFile(before, after)) {
143
+ throw new Error("Codex rollout changed while its terminal submission anchor was captured");
144
+ }
145
+ const withFile = {
146
+ ...base,
147
+ mode: "existing",
148
+ file_existed: true,
149
+ offset_bytes: before.size,
150
+ rollout
151
+ };
152
+ return {
153
+ ...withFile,
154
+ anchor_fingerprint: fingerprint(withFile)
155
+ };
156
+ }
157
+ finally {
158
+ fs.closeSync(opened.fd);
159
+ }
160
+ }
161
+ export function detectCodexRolloutAcceptance(options) {
162
+ const anchor = validateCodexRolloutAcceptanceAnchor(options.anchor);
163
+ const requestHash = sha256Value(options.requestHash, "terminal request hash");
164
+ const current = options.currentIdentity;
165
+ if (exactNativeThreadId(current.sessionId) !== anchor.native_thread_id ||
166
+ current.processUuid !== anchor.process_uuid ||
167
+ current.processBirth !== anchor.process_birth) {
168
+ throw new Error("Codex process or native thread identity changed during acceptance polling");
169
+ }
170
+ if (!current.rollout) {
171
+ return undefined;
172
+ }
173
+ const rollout = normalizedRolloutIdentity(current.rollout);
174
+ if (anchor.rollout &&
175
+ !sameRolloutIdentity(anchor.rollout, rollout)) {
176
+ throw new Error("Codex rollout identity changed during acceptance polling");
177
+ }
178
+ const opened = openExactRollout(rollout);
179
+ try {
180
+ const before = opened.stat;
181
+ assertPrivateRegularFile(before);
182
+ if (before.size < anchor.offset_bytes) {
183
+ throw new Error("Codex rollout was truncated after terminal submission");
184
+ }
185
+ const bytesToRead = before.size - anchor.offset_bytes;
186
+ if (bytesToRead === 0) {
187
+ return undefined;
188
+ }
189
+ if (bytesToRead > CODEX_ACCEPTANCE_MAX_BYTES) {
190
+ throw new Error("Codex rollout acceptance suffix exceeded the bounded read limit");
191
+ }
192
+ if (!fileEndsWithNewline(opened.fd, before.size)) {
193
+ return undefined;
194
+ }
195
+ const buffer = Buffer.allocUnsafe(bytesToRead);
196
+ const bytesRead = fs.readSync(opened.fd, buffer, 0, bytesToRead, anchor.offset_bytes);
197
+ if (bytesRead !== bytesToRead) {
198
+ return undefined;
199
+ }
200
+ const after = fs.fstatSync(opened.fd);
201
+ if (!sameStableFile(before, after)) {
202
+ return undefined;
203
+ }
204
+ const accepted = acceptedCodexTurnFromSuffix(buffer.toString("utf8"), requestHash);
205
+ if (!accepted) {
206
+ return undefined;
207
+ }
208
+ const evidenceBase = {
209
+ source: "codex_rollout",
210
+ kind: "native_user_turn",
211
+ nativeThreadId: anchor.native_thread_id,
212
+ requestHash,
213
+ acceptanceId: accepted.turnId,
214
+ acceptedAt: accepted.userTimestamp ?? accepted.startedAt,
215
+ anchorFingerprint: anchor.anchor_fingerprint,
216
+ metadata: {
217
+ turn_id: accepted.turnId,
218
+ anchor_offset_bytes: anchor.offset_bytes,
219
+ observed_end_offset_bytes: before.size
220
+ }
221
+ };
222
+ return {
223
+ ...evidenceBase,
224
+ evidenceFingerprint: fingerprint(evidenceBase)
225
+ };
226
+ }
227
+ finally {
228
+ fs.closeSync(opened.fd);
229
+ }
230
+ }
231
+ function acceptedCodexTurnFromSuffix(text, requestHash) {
232
+ const startedTurns = new Map();
233
+ const matches = [];
234
+ for (const line of text.split(/\r?\n/u)) {
235
+ if (!line) {
236
+ continue;
237
+ }
238
+ let value;
239
+ try {
240
+ value = JSON.parse(line);
241
+ }
242
+ catch {
243
+ throw new Error("Codex rollout acceptance suffix contains invalid JSONL");
244
+ }
245
+ if (!isRecord(value) || !isRecord(value.payload)) {
246
+ continue;
247
+ }
248
+ const payload = value.payload;
249
+ if (value.type === "event_msg" && payload.type === "task_started") {
250
+ const turnId = exactNativeThreadId(payload.turn_id);
251
+ if (startedTurns.has(turnId)) {
252
+ throw new Error("Codex rollout contains duplicate post-anchor task_started evidence");
253
+ }
254
+ startedTurns.set(turnId, {
255
+ ...(validTimestamp(value.timestamp)
256
+ ? { startedAt: String(value.timestamp) }
257
+ : {})
258
+ });
259
+ continue;
260
+ }
261
+ if (value.type !== "response_item" ||
262
+ payload.type !== "message" ||
263
+ payload.role !== "user") {
264
+ continue;
265
+ }
266
+ const metadata = isRecord(payload.internal_chat_message_metadata_passthrough)
267
+ ? payload.internal_chat_message_metadata_passthrough
268
+ : undefined;
269
+ const rawTurnId = optionalString(metadata?.turn_id);
270
+ const userText = exactCodexUserResponseText(payload.content);
271
+ if (!rawTurnId || userText === undefined) {
272
+ continue;
273
+ }
274
+ const turnId = exactNativeThreadId(rawTurnId);
275
+ if (fingerprintText(userText) !== requestHash) {
276
+ continue;
277
+ }
278
+ const started = startedTurns.get(turnId);
279
+ if (!started) {
280
+ throw new Error("matching Codex user response has no same-turn post-anchor task_started evidence");
281
+ }
282
+ matches.push({
283
+ turnId,
284
+ ...started,
285
+ ...(validTimestamp(value.timestamp)
286
+ ? { userTimestamp: String(value.timestamp) }
287
+ : {})
288
+ });
289
+ }
290
+ if (matches.length > 1) {
291
+ throw new Error("multiple Codex native turns matched the terminal request");
292
+ }
293
+ return matches[0];
294
+ }
295
+ function exactCodexUserResponseText(content) {
296
+ if (!Array.isArray(content) || content.length !== 1) {
297
+ return undefined;
298
+ }
299
+ const item = content[0];
300
+ return isRecord(item) && item.type === "input_text" &&
301
+ typeof item.text === "string"
302
+ ? item.text
303
+ : undefined;
304
+ }
305
+ function validateCodexRolloutAcceptanceAnchor(value) {
306
+ if (!isRecord(value) ||
307
+ value.schema !== "agent-knock-knock/codex-rollout-acceptance-anchor" ||
308
+ value.version !== 1 ||
309
+ !["existing", "pre_materialization"].includes(String(value.mode)) ||
310
+ !Number.isSafeInteger(value.offset_bytes) ||
311
+ value.offset_bytes < 0 ||
312
+ typeof value.file_existed !== "boolean") {
313
+ throw new Error("Codex rollout acceptance anchor is invalid");
314
+ }
315
+ exactNativeThreadId(value.native_thread_id);
316
+ requiredString(value.process_uuid, "Codex process UUID");
317
+ requiredString(value.process_birth, "Codex process birth");
318
+ if (!validTimestamp(value.captured_at)) {
319
+ throw new Error("Codex acceptance capture timestamp is invalid");
320
+ }
321
+ sha256Value(value.anchor_fingerprint, "Codex acceptance anchor fingerprint");
322
+ const { anchor_fingerprint: _fingerprint, ...base } = value;
323
+ if (fingerprint(base) !== value.anchor_fingerprint) {
324
+ throw new Error("Codex rollout acceptance anchor fingerprint does not match");
325
+ }
326
+ if (value.file_existed !== (value.mode === "existing") ||
327
+ value.file_existed !== Boolean(value.rollout)) {
328
+ throw new Error("Codex rollout acceptance anchor file state is inconsistent");
329
+ }
330
+ if (value.mode === "existing" && value.rollout) {
331
+ normalizedRolloutIdentity(value.rollout);
332
+ if (value.expected_empty_native_session !== undefined) {
333
+ throw new Error("existing Codex acceptance anchor has pre-materialization state");
334
+ }
335
+ }
336
+ else if (value.offset_bytes !== 0 ||
337
+ value.rollout !== undefined ||
338
+ value.expected_empty_native_session !== true) {
339
+ throw new Error("Codex pre-materialization acceptance anchor is inconsistent");
340
+ }
341
+ return value;
342
+ }
343
+ function openExactRollout(rollout) {
344
+ if (!path.isAbsolute(rollout.path)) {
345
+ throw new Error("Codex rollout path is not absolute");
346
+ }
347
+ const before = fs.lstatSync(rollout.path);
348
+ if (!before.isFile() || before.isSymbolicLink()) {
349
+ throw new Error("Codex rollout path is not a regular file");
350
+ }
351
+ const fd = fs.openSync(rollout.path, fs.constants.O_RDONLY | NO_FOLLOW_FLAG);
352
+ try {
353
+ const stat = fs.fstatSync(fd);
354
+ if (BigInt(stat.dev) !== parsedInteger(rollout.device) ||
355
+ BigInt(stat.ino) !== parsedInteger(rollout.inode)) {
356
+ throw new Error("Codex rollout descriptor identity does not match its open file");
357
+ }
358
+ return { fd, stat };
359
+ }
360
+ catch (error) {
361
+ fs.closeSync(fd);
362
+ throw error;
363
+ }
364
+ }
365
+ function assertPrivateRegularFile(stat) {
366
+ if (!stat.isFile()) {
367
+ throw new Error("Codex rollout is not a regular file");
368
+ }
369
+ if (process.platform !== "win32" &&
370
+ typeof process.getuid === "function" &&
371
+ stat.uid !== process.getuid()) {
372
+ throw new Error("Codex rollout is not owned by the current user");
373
+ }
374
+ if (process.platform !== "win32" && (stat.mode & 0o022) !== 0) {
375
+ throw new Error("Codex rollout is writable by another user");
376
+ }
377
+ }
378
+ function fileEndsWithNewline(fd, size) {
379
+ if (size <= 0) {
380
+ return true;
381
+ }
382
+ const last = Buffer.allocUnsafe(1);
383
+ return fs.readSync(fd, last, 0, 1, size - 1) === 1 && last[0] === 0x0a;
384
+ }
385
+ function sameStableFile(left, right) {
386
+ return left.dev === right.dev &&
387
+ left.ino === right.ino &&
388
+ left.size === right.size &&
389
+ left.mtimeMs === right.mtimeMs &&
390
+ left.ctimeMs === right.ctimeMs;
391
+ }
392
+ function normalizedRolloutIdentity(value) {
393
+ const normalized = {
394
+ fd: requiredString(value.fd, "Codex rollout descriptor"),
395
+ device: requiredString(value.device, "Codex rollout device"),
396
+ inode: requiredString(value.inode, "Codex rollout inode"),
397
+ path: requiredString(value.path, "Codex rollout path")
398
+ };
399
+ parsedInteger(normalized.device);
400
+ parsedInteger(normalized.inode);
401
+ return normalized;
402
+ }
403
+ function sameRolloutIdentity(left, right) {
404
+ return left.fd === right.fd &&
405
+ left.device === right.device &&
406
+ left.inode === right.inode &&
407
+ left.path === right.path;
408
+ }
409
+ function exactNativeThreadId(value) {
410
+ const text = requiredString(value, "Codex native thread ID").toLowerCase();
411
+ if (!NATIVE_THREAD_ID_PATTERN.test(text)) {
412
+ throw new Error("Codex native thread ID is not an exact UUID");
413
+ }
414
+ return text;
415
+ }
416
+ function parsedInteger(value) {
417
+ try {
418
+ return BigInt(value);
419
+ }
420
+ catch {
421
+ throw new Error("Codex rollout file identity is not numeric");
422
+ }
423
+ }
424
+ function sha256Value(value, label) {
425
+ const text = requiredString(value, label).toLowerCase();
426
+ if (!/^[0-9a-f]{64}$/u.test(text)) {
427
+ throw new Error(`${label} is not a SHA-256 value`);
428
+ }
429
+ return text;
430
+ }
431
+ function requiredString(value, label) {
432
+ if (typeof value !== "string" || value.trim().length === 0) {
433
+ throw new Error(`${label} is unavailable`);
434
+ }
435
+ return value.trim();
436
+ }
437
+ function optionalString(value) {
438
+ return typeof value === "string" && value.trim().length > 0
439
+ ? value.trim()
440
+ : undefined;
441
+ }
442
+ function validTimestamp(value) {
443
+ return typeof value === "string" && Number.isFinite(Date.parse(value));
444
+ }
445
+ function fingerprintText(value) {
446
+ return createHash("sha256").update(value).digest("hex");
447
+ }
448
+ function fingerprint(value) {
449
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex");
450
+ }
451
+ function isRecord(value) {
452
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
453
+ }
454
+ //# sourceMappingURL=terminal-submission-acceptance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-submission-acceptance.js","sourceRoot":"","sources":["../../src/terminal-submission-acceptance.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scotthuang/agent-knock-knock",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Control local Codex and Claude Code from OpenClaw through shared tmux terminals, with seamless human-agent handoff.",
5
5
  "license": "MIT",
6
6
  "type": "module",