@scotthuang/agent-knock-knock 0.12.11 → 0.12.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +5 -5
- package/dist/src/callback-cli-adapter.d.ts +47 -0
- package/dist/src/callback-cli-adapter.js +156 -0
- package/dist/src/callback-cli-adapter.js.map +1 -0
- package/dist/src/callback-outbox-policy.d.ts +95 -0
- package/dist/src/callback-outbox-policy.js +149 -0
- package/dist/src/callback-outbox-policy.js.map +1 -0
- package/dist/src/callback-outbox-service.d.ts +247 -0
- package/dist/src/callback-outbox-service.js +1053 -0
- package/dist/src/callback-outbox-service.js.map +1 -0
- package/dist/src/callback-outbox-settlement.d.ts +54 -0
- package/dist/src/callback-outbox-settlement.js +241 -0
- package/dist/src/callback-outbox-settlement.js.map +1 -0
- package/dist/src/canonical-json.d.ts +1 -0
- package/dist/src/canonical-json.js +14 -0
- package/dist/src/canonical-json.js.map +1 -0
- package/dist/src/claude-lifecycle-compatibility.js +15 -0
- package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
- package/dist/src/claude-local-transcript-provider.d.ts +1 -1
- package/dist/src/claude-local-transcript-provider.js +19 -5
- package/dist/src/claude-local-transcript-provider.js.map +1 -1
- package/dist/src/cli-command-runtime.d.ts +14 -0
- package/dist/src/cli-command-runtime.js +164 -0
- package/dist/src/cli-command-runtime.js.map +1 -0
- package/dist/src/cli-core.d.ts +4 -42
- package/dist/src/cli-core.js +906 -28717
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/cli-runtime-context.d.ts +57 -0
- package/dist/src/cli-runtime-context.js +118 -0
- package/dist/src/cli-runtime-context.js.map +1 -0
- package/dist/src/codex-lifecycle-compatibility.js +2 -1
- package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
- package/dist/src/codex-local-session-provider.d.ts +18 -0
- package/dist/src/codex-local-session-provider.js +67 -0
- package/dist/src/codex-local-session-provider.js.map +1 -1
- package/dist/src/codex-session-provider.js +1 -3
- package/dist/src/codex-session-provider.js.map +1 -1
- package/dist/src/conversation-trace.d.ts +30 -0
- package/dist/src/conversation-trace.js +185 -0
- package/dist/src/conversation-trace.js.map +1 -0
- package/dist/src/deferred-foreground-application-service.d.ts +84 -0
- package/dist/src/deferred-foreground-application-service.js +742 -0
- package/dist/src/deferred-foreground-application-service.js.map +1 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.d.ts +78 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.js +724 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-boundary.d.ts +61 -0
- package/dist/src/deferred-foreground-boundary.js +2 -0
- package/dist/src/deferred-foreground-boundary.js.map +1 -0
- package/dist/src/deferred-foreground-capability.d.ts +4 -0
- package/dist/src/deferred-foreground-capability.js +184 -0
- package/dist/src/deferred-foreground-capability.js.map +1 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.d.ts +53 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.js +210 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-preparation-service.d.ts +72 -0
- package/dist/src/deferred-foreground-preparation-service.js +179 -0
- package/dist/src/deferred-foreground-preparation-service.js.map +1 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.d.ts +139 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.js +1125 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-recovery-service.d.ts +48 -0
- package/dist/src/deferred-foreground-recovery-service.js +91 -0
- package/dist/src/deferred-foreground-recovery-service.js.map +1 -0
- package/dist/src/deferred-foreground-transfer-policy.d.ts +2 -0
- package/dist/src/deferred-foreground-transfer-policy.js +10 -0
- package/dist/src/deferred-foreground-transfer-policy.js.map +1 -0
- package/dist/src/deferred-foreground-transfer.js +43 -101
- package/dist/src/deferred-foreground-transfer.js.map +1 -1
- package/dist/src/doctor-capabilities.d.ts +9 -0
- package/dist/src/doctor-capabilities.js +22 -0
- package/dist/src/doctor-capabilities.js.map +1 -1
- package/dist/src/durable-json-file.d.ts +22 -0
- package/dist/src/durable-json-file.js +127 -0
- package/dist/src/durable-json-file.js.map +1 -0
- package/dist/src/file-lock-cli-adapter.d.ts +43 -0
- package/dist/src/file-lock-cli-adapter.js +150 -0
- package/dist/src/file-lock-cli-adapter.js.map +1 -0
- package/dist/src/herdr-terminal-control-provider.js +1 -3
- package/dist/src/herdr-terminal-control-provider.js.map +1 -1
- package/dist/src/install-doctor-command-adapter.d.ts +17 -0
- package/dist/src/install-doctor-command-adapter.js +225 -0
- package/dist/src/install-doctor-command-adapter.js.map +1 -0
- package/dist/src/live-lifecycle-evidence.js +76 -46
- package/dist/src/live-lifecycle-evidence.js.map +1 -1
- package/dist/src/live-lifecycle-smoke.js +74 -50
- package/dist/src/live-lifecycle-smoke.js.map +1 -1
- package/dist/src/managed-session.d.ts +2 -0
- package/dist/src/managed-session.js +24 -0
- package/dist/src/managed-session.js.map +1 -1
- package/dist/src/managed-turn-recovery-service.d.ts +86 -0
- package/dist/src/managed-turn-recovery-service.js +145 -0
- package/dist/src/managed-turn-recovery-service.js.map +1 -0
- package/dist/src/mutation-transaction.d.ts +48 -0
- package/dist/src/mutation-transaction.js +73 -0
- package/dist/src/mutation-transaction.js.map +1 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +154 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.js +786 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.d.ts +25 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js +50 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-query-service.d.ts +75 -0
- package/dist/src/native-thread-lifecycle-query-service.js +297 -0
- package/dist/src/native-thread-lifecycle-query-service.js.map +1 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.d.ts +45 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.js +154 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-recovery-service.d.ts +211 -0
- package/dist/src/native-thread-lifecycle-recovery-service.js +1093 -0
- package/dist/src/native-thread-lifecycle-recovery-service.js.map +1 -0
- package/dist/src/native-thread-resume-snapshot-policy.d.ts +73 -0
- package/dist/src/native-thread-resume-snapshot-policy.js +218 -0
- package/dist/src/native-thread-resume-snapshot-policy.js.map +1 -0
- package/dist/src/native-thread-resume-snapshot.d.ts +3 -61
- package/dist/src/native-thread-resume-snapshot.js +2 -143
- package/dist/src/native-thread-resume-snapshot.js.map +1 -1
- package/dist/src/native-thread-transition-application.d.ts +147 -0
- package/dist/src/native-thread-transition-application.js +974 -0
- package/dist/src/native-thread-transition-application.js.map +1 -0
- package/dist/src/native-thread-transition-policy.d.ts +127 -0
- package/dist/src/native-thread-transition-policy.js +154 -0
- package/dist/src/native-thread-transition-policy.js.map +1 -0
- package/dist/src/native-thread-transition-resource-adapter.d.ts +12 -0
- package/dist/src/native-thread-transition-resource-adapter.js +44 -0
- package/dist/src/native-thread-transition-resource-adapter.js.map +1 -0
- package/dist/src/native-thread-transition-settlement-service.d.ts +94 -0
- package/dist/src/native-thread-transition-settlement-service.js +134 -0
- package/dist/src/native-thread-transition-settlement-service.js.map +1 -0
- package/dist/src/native-thread-transition-verification-adapter.d.ts +62 -0
- package/dist/src/native-thread-transition-verification-adapter.js +451 -0
- package/dist/src/native-thread-transition-verification-adapter.js.map +1 -0
- package/dist/src/openclaw-callback-transport.d.ts +64 -0
- package/dist/src/openclaw-callback-transport.js +583 -0
- package/dist/src/openclaw-callback-transport.js.map +1 -0
- package/dist/src/openclaw-plugin-callback-adapter.d.ts +1 -0
- package/dist/src/openclaw-plugin-callback-adapter.js +341 -0
- package/dist/src/openclaw-plugin-callback-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin-command-adapter.d.ts +16 -0
- package/dist/src/openclaw-plugin-command-adapter.js +1427 -0
- package/dist/src/openclaw-plugin-command-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin-helpers.js +48 -38
- package/dist/src/openclaw-plugin-helpers.js.map +1 -1
- package/dist/src/openclaw-plugin-schemas.d.ts +382 -0
- package/dist/src/openclaw-plugin-schemas.js +394 -0
- package/dist/src/openclaw-plugin-schemas.js.map +1 -0
- package/dist/src/openclaw-plugin-supervisor.d.ts +6 -0
- package/dist/src/openclaw-plugin-supervisor.js +85 -0
- package/dist/src/openclaw-plugin-supervisor.js.map +1 -0
- package/dist/src/openclaw-plugin.js +7 -2212
- package/dist/src/openclaw-plugin.js.map +1 -1
- package/dist/src/protocol.d.ts +5 -0
- package/dist/src/protocol.js +59 -3
- package/dist/src/protocol.js.map +1 -1
- package/dist/src/session-store.d.ts +1 -0
- package/dist/src/session-store.js +84 -106
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/store.js +2 -1
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-acceptance-application-service.d.ts +65 -0
- package/dist/src/terminal-acceptance-application-service.js +63 -0
- package/dist/src/terminal-acceptance-application-service.js.map +1 -0
- package/dist/src/terminal-acceptance-cli-adapter.d.ts +210 -0
- package/dist/src/terminal-acceptance-cli-adapter.js +957 -0
- package/dist/src/terminal-acceptance-cli-adapter.js.map +1 -0
- package/dist/src/terminal-action-projection.d.ts +291 -0
- package/dist/src/terminal-action-projection.js +353 -0
- package/dist/src/terminal-action-projection.js.map +1 -0
- package/dist/src/terminal-agent-bridge.d.ts +3 -0
- package/dist/src/terminal-agent-bridge.js +29 -8
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-authority-policy.d.ts +141 -0
- package/dist/src/terminal-authority-policy.js +367 -0
- package/dist/src/terminal-authority-policy.js.map +1 -0
- package/dist/src/terminal-binding-authority.d.ts +118 -0
- package/dist/src/terminal-binding-authority.js +245 -0
- package/dist/src/terminal-binding-authority.js.map +1 -0
- package/dist/src/terminal-binding-reconciliation-service.d.ts +75 -0
- package/dist/src/terminal-binding-reconciliation-service.js +73 -0
- package/dist/src/terminal-binding-reconciliation-service.js.map +1 -0
- package/dist/src/terminal-command-cli-adapter.d.ts +375 -0
- package/dist/src/terminal-command-cli-adapter.js +3128 -0
- package/dist/src/terminal-command-cli-adapter.js.map +1 -0
- package/dist/src/terminal-control-ref.d.ts +4 -0
- package/dist/src/terminal-control-ref.js +11 -8
- package/dist/src/terminal-control-ref.js.map +1 -1
- package/dist/src/terminal-delegate-cli-adapter.d.ts +41 -0
- package/dist/src/terminal-delegate-cli-adapter.js +242 -0
- package/dist/src/terminal-delegate-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-abort.d.ts +22 -0
- package/dist/src/terminal-dispatch-abort.js +30 -0
- package/dist/src/terminal-dispatch-abort.js.map +1 -0
- package/dist/src/terminal-dispatch-application.d.ts +115 -0
- package/dist/src/terminal-dispatch-application.js +478 -0
- package/dist/src/terminal-dispatch-application.js.map +1 -0
- package/dist/src/terminal-dispatch-capability.d.ts +63 -0
- package/dist/src/terminal-dispatch-capability.js +133 -0
- package/dist/src/terminal-dispatch-capability.js.map +1 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.d.ts +22 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.js +96 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-composition.d.ts +79 -0
- package/dist/src/terminal-dispatch-composition.js +2 -0
- package/dist/src/terminal-dispatch-composition.js.map +1 -0
- package/dist/src/terminal-dispatch-execution.d.ts +290 -0
- package/dist/src/terminal-dispatch-execution.js +916 -0
- package/dist/src/terminal-dispatch-execution.js.map +1 -0
- package/dist/src/terminal-dispatch-ledger-codec.d.ts +110 -0
- package/dist/src/terminal-dispatch-ledger-codec.js +399 -0
- package/dist/src/terminal-dispatch-ledger-codec.js.map +1 -0
- package/dist/src/terminal-dispatch-policy.d.ts +93 -0
- package/dist/src/terminal-dispatch-policy.js +122 -0
- package/dist/src/terminal-dispatch-policy.js.map +1 -0
- package/dist/src/terminal-dispatch-presenter.d.ts +65 -0
- package/dist/src/terminal-dispatch-presenter.js +258 -0
- package/dist/src/terminal-dispatch-presenter.js.map +1 -0
- package/dist/src/terminal-dispatch-receipt.d.ts +79 -0
- package/dist/src/terminal-dispatch-receipt.js +314 -0
- package/dist/src/terminal-dispatch-receipt.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +132 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js +1330 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-service.d.ts +271 -0
- package/dist/src/terminal-dispatch-recovery-service.js +374 -0
- package/dist/src/terminal-dispatch-recovery-service.js.map +1 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.d.ts +35 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.js +257 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.js.map +1 -0
- package/dist/src/terminal-handoff-application-service.d.ts +7 -0
- package/dist/src/terminal-handoff-application-service.js +18 -0
- package/dist/src/terminal-handoff-application-service.js.map +1 -0
- package/dist/src/terminal-handoff-cli-adapter.d.ts +229 -0
- package/dist/src/terminal-handoff-cli-adapter.js +1389 -0
- package/dist/src/terminal-handoff-cli-adapter.js.map +1 -0
- package/dist/src/terminal-handoff-facts.d.ts +12 -0
- package/dist/src/terminal-handoff-facts.js +16 -0
- package/dist/src/terminal-handoff-facts.js.map +1 -0
- package/dist/src/terminal-identity-authority-cli-adapter.d.ts +318 -0
- package/dist/src/terminal-identity-authority-cli-adapter.js +1072 -0
- package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -0
- package/dist/src/terminal-identity-authority-service.d.ts +48 -0
- package/dist/src/terminal-identity-authority-service.js +45 -0
- package/dist/src/terminal-identity-authority-service.js.map +1 -0
- package/dist/src/terminal-list-cli-adapter.d.ts +250 -0
- package/dist/src/terminal-list-cli-adapter.js +2226 -0
- package/dist/src/terminal-list-cli-adapter.js.map +1 -0
- package/dist/src/terminal-list-renderer.d.ts +32 -0
- package/dist/src/terminal-list-renderer.js +568 -0
- package/dist/src/terminal-list-renderer.js.map +1 -0
- package/dist/src/terminal-maintenance-cli-adapter.d.ts +102 -0
- package/dist/src/terminal-maintenance-cli-adapter.js +1059 -0
- package/dist/src/terminal-maintenance-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-application-service.d.ts +275 -0
- package/dist/src/terminal-monitor-application-service.js +982 -0
- package/dist/src/terminal-monitor-application-service.js.map +1 -0
- package/dist/src/terminal-monitor-cli-adapter.d.ts +130 -0
- package/dist/src/terminal-monitor-cli-adapter.js +442 -0
- package/dist/src/terminal-monitor-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-decision-policy.d.ts +98 -0
- package/dist/src/terminal-monitor-decision-policy.js +246 -0
- package/dist/src/terminal-monitor-decision-policy.js.map +1 -0
- package/dist/src/terminal-monitor-launch-plan.d.ts +45 -0
- package/dist/src/terminal-monitor-launch-plan.js +94 -0
- package/dist/src/terminal-monitor-launch-plan.js.map +1 -0
- package/dist/src/terminal-monitor-ownership-policy.d.ts +31 -0
- package/dist/src/terminal-monitor-ownership-policy.js +64 -0
- package/dist/src/terminal-monitor-ownership-policy.js.map +1 -0
- package/dist/src/terminal-monitor-poll-policy.d.ts +48 -0
- package/dist/src/terminal-monitor-poll-policy.js +67 -0
- package/dist/src/terminal-monitor-poll-policy.js.map +1 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.d.ts +53 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.js +114 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.js.map +1 -0
- package/dist/src/terminal-monitor-state-cli-adapter.d.ts +106 -0
- package/dist/src/terminal-monitor-state-cli-adapter.js +1501 -0
- package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.d.ts +87 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.js +106 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.js.map +1 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.d.ts +122 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.js +685 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -0
- package/dist/src/terminal-process-facts.d.ts +2 -0
- package/dist/src/terminal-process-facts.js +19 -0
- package/dist/src/terminal-process-facts.js.map +1 -0
- package/dist/src/terminal-process-source.d.ts +6 -4
- package/dist/src/terminal-process-source.js +25 -20
- package/dist/src/terminal-process-source.js.map +1 -1
- package/dist/src/terminal-runtime-cli-adapter.d.ts +80 -0
- package/dist/src/terminal-runtime-cli-adapter.js +488 -0
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -0
- package/dist/src/terminal-scoped-approval-authority.d.ts +62 -0
- package/dist/src/terminal-scoped-approval-authority.js +281 -0
- package/dist/src/terminal-scoped-approval-authority.js.map +1 -0
- package/dist/src/terminal-selector-projection-service.d.ts +26 -0
- package/dist/src/terminal-selector-projection-service.js +81 -0
- package/dist/src/terminal-selector-projection-service.js.map +1 -0
- package/dist/src/terminal-status-cli-adapter.d.ts +116 -0
- package/dist/src/terminal-status-cli-adapter.js +495 -0
- package/dist/src/terminal-status-cli-adapter.js.map +1 -0
- package/dist/src/terminal-status-facts.d.ts +56 -0
- package/dist/src/terminal-status-facts.js +199 -0
- package/dist/src/terminal-status-facts.js.map +1 -0
- package/dist/src/terminal-submission-acceptance.d.ts +6 -148
- package/dist/src/terminal-submission-acceptance.js +2 -229
- package/dist/src/terminal-submission-acceptance.js.map +1 -1
- package/dist/src/terminal-submission-facts.d.ts +123 -0
- package/dist/src/terminal-submission-facts.js +205 -0
- package/dist/src/terminal-submission-facts.js.map +1 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.d.ts +14 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.js +90 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.js.map +1 -0
- package/dist/src/value-guards.d.ts +4 -0
- package/dist/src/value-guards.js +12 -0
- package/dist/src/value-guards.js.map +1 -0
- package/dist/src/verified-dead-agent-policy.d.ts +192 -0
- package/dist/src/verified-dead-agent-policy.js +262 -0
- package/dist/src/verified-dead-agent-policy.js.map +1 -0
- package/docs/quickstart-tmux.md +1 -1
- package/package.json +3 -1
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +1 -1
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { isExecutorKind } from "./executors.js";
|
|
2
|
+
import { executorForConversation, sessionIdForConversation, turnIdForConversation } from "./protocol.js";
|
|
3
|
+
import { isRecord, nonBlankString as stringValue } from "./value-guards.js";
|
|
4
|
+
export function summarizeConversation(conversation, ports) {
|
|
5
|
+
const executor = executorForConversation(conversation);
|
|
6
|
+
const callbackDelivery = isRecord(conversation.callback_delivery)
|
|
7
|
+
? conversation.callback_delivery
|
|
8
|
+
: undefined;
|
|
9
|
+
const callbackDisposition = callbackDelivery
|
|
10
|
+
? ports.callbackRetryDisposition(callbackDelivery)
|
|
11
|
+
: undefined;
|
|
12
|
+
return {
|
|
13
|
+
session_id: sessionIdForConversation(conversation),
|
|
14
|
+
turn_id: turnIdForConversation(conversation),
|
|
15
|
+
conversation_id: conversation.conversation_id,
|
|
16
|
+
agent: executor.kind,
|
|
17
|
+
executor,
|
|
18
|
+
session: executor.session,
|
|
19
|
+
status: conversation.status,
|
|
20
|
+
request: conversation.user_request,
|
|
21
|
+
workspace: conversation.workspace,
|
|
22
|
+
openclaw_session: conversation.openclaw_session,
|
|
23
|
+
response_rounds_used: conversation.response_rounds_used,
|
|
24
|
+
soft_limit: conversation.soft_limit,
|
|
25
|
+
hard_limit: conversation.hard_limit,
|
|
26
|
+
created_at: conversation.created_at,
|
|
27
|
+
updated_at: conversation.updated_at,
|
|
28
|
+
idle_since: conversation.idle_since,
|
|
29
|
+
closed_at: conversation.closed_at,
|
|
30
|
+
...(callbackDelivery
|
|
31
|
+
? {
|
|
32
|
+
callback_delivery: {
|
|
33
|
+
status: callbackDelivery.status,
|
|
34
|
+
attempts: callbackDelivery.attempts,
|
|
35
|
+
attempt_state: callbackDisposition?.state,
|
|
36
|
+
attempt_pid: callbackDelivery.attempt_pid,
|
|
37
|
+
lease_expires_at: callbackDelivery.attempt_lease_expires_at,
|
|
38
|
+
next_attempt_at: callbackDelivery.next_attempt_at,
|
|
39
|
+
last_error: callbackDelivery.last_error === undefined
|
|
40
|
+
? undefined
|
|
41
|
+
: ports.textSummary(String(callbackDelivery.last_error))
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
: {}),
|
|
45
|
+
state_path: conversation.state_path,
|
|
46
|
+
event_log_path: conversation.event_log_path
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export function isDiscoverableTmuxConversation(conversation) {
|
|
50
|
+
if (!isRecord(conversation) || !isRecord(conversation.executor)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const kind = stringValue(conversation.executor.kind)?.toLowerCase();
|
|
54
|
+
return kind !== undefined &&
|
|
55
|
+
isExecutorKind(kind) &&
|
|
56
|
+
conversation.executor.transport === "tmux";
|
|
57
|
+
}
|
|
58
|
+
export function persistedExecutorLogFields(conversation) {
|
|
59
|
+
if (isDiscoverableTmuxConversation(conversation)) {
|
|
60
|
+
const executor = executorForConversation(conversation);
|
|
61
|
+
return {
|
|
62
|
+
agent: executor.kind,
|
|
63
|
+
executor_session: executor.session
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const rawExecutor = isRecord(conversation?.executor) ? conversation.executor : {};
|
|
67
|
+
return {
|
|
68
|
+
agent: stringValue(rawExecutor.kind) ?? "unsupported",
|
|
69
|
+
executor_session: stringValue(rawExecutor.session)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function summarizeEvent(event) {
|
|
73
|
+
return {
|
|
74
|
+
ts: event.ts,
|
|
75
|
+
event: event.event,
|
|
76
|
+
from: event.from,
|
|
77
|
+
to: event.to,
|
|
78
|
+
type: event.type,
|
|
79
|
+
status: event.status,
|
|
80
|
+
round: event.round,
|
|
81
|
+
body: typeof event.body === "string" ? event.body.slice(0, 500) : undefined
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function codexTerminalContextFromHistory(input) {
|
|
85
|
+
const { id, confidence, match, process, context, terminalControl, terminalStatus, limitations, candidates } = input;
|
|
86
|
+
return {
|
|
87
|
+
conversation_id: id,
|
|
88
|
+
source: "terminal_control",
|
|
89
|
+
confidence,
|
|
90
|
+
match,
|
|
91
|
+
about: rolloutAbout(context, terminalStatus),
|
|
92
|
+
codex_session: context.source,
|
|
93
|
+
evidence: {
|
|
94
|
+
process,
|
|
95
|
+
terminal_control: terminalControl,
|
|
96
|
+
terminal_status: terminalStatus,
|
|
97
|
+
initial_request: bestSessionIntent(context),
|
|
98
|
+
title: context.source.title,
|
|
99
|
+
recent_messages: visibleRolloutMessages(context).slice(-8),
|
|
100
|
+
recent_commands: context.commands.slice(-8),
|
|
101
|
+
candidates
|
|
102
|
+
},
|
|
103
|
+
limitations
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export function managedConversationAbout(conversation, events, terminalStatus) {
|
|
107
|
+
const request = truncateText(String(conversation.user_request ?? "").trim(), 220);
|
|
108
|
+
const recent = recentMessageEvidence(events).at(-1)?.body;
|
|
109
|
+
const parts = [
|
|
110
|
+
request ? `Initial request: ${request}` : undefined,
|
|
111
|
+
recent ? `Latest visible message: ${truncateText(recent, 180)}` : undefined,
|
|
112
|
+
terminalStatus?.activity_state
|
|
113
|
+
? `Current terminal state: ${terminalStatus.activity_state}.`
|
|
114
|
+
: undefined
|
|
115
|
+
].filter(Boolean);
|
|
116
|
+
return parts.length > 0
|
|
117
|
+
? parts.join(" ")
|
|
118
|
+
: "No durable task content is available for this AKK-managed session.";
|
|
119
|
+
}
|
|
120
|
+
export function rolloutAbout(context, terminalStatus) {
|
|
121
|
+
const title = truncateText(String(context.source.title ?? "").trim(), 180);
|
|
122
|
+
const intent = bestSessionIntent(context);
|
|
123
|
+
const latestAssistant = [...visibleRolloutMessages(context)].reverse()
|
|
124
|
+
.find((message) => message.role === "assistant")?.text;
|
|
125
|
+
const latestCommand = context.commands.at(-1)?.command;
|
|
126
|
+
const parts = [
|
|
127
|
+
intent
|
|
128
|
+
? `Initial request: ${truncateText(intent, 220)}`
|
|
129
|
+
: title ? `Codex title: ${title}` : undefined,
|
|
130
|
+
latestAssistant
|
|
131
|
+
? `Latest visible progress: ${truncateText(latestAssistant, 180)}`
|
|
132
|
+
: undefined,
|
|
133
|
+
latestCommand
|
|
134
|
+
? `Recent command: ${truncateText(latestCommand, 140)}`
|
|
135
|
+
: undefined,
|
|
136
|
+
terminalStatus?.activity_state
|
|
137
|
+
? `Current terminal state: ${terminalStatus.activity_state}.`
|
|
138
|
+
: undefined
|
|
139
|
+
].filter(Boolean);
|
|
140
|
+
return parts.length > 0
|
|
141
|
+
? parts.join(" ")
|
|
142
|
+
: "Codex history was found, but it did not include enough visible message content to summarize the session.";
|
|
143
|
+
}
|
|
144
|
+
export function screenOnlyAbout(input) {
|
|
145
|
+
const { process, terminalStatus } = input;
|
|
146
|
+
const activity = terminalStatus?.activity_reason ?? terminalStatus?.activity_state;
|
|
147
|
+
const excerpt = terminalStatus?.screen?.excerpt;
|
|
148
|
+
const parts = [
|
|
149
|
+
process?.cwd ? `This Codex process is running in ${process.cwd}.` : undefined,
|
|
150
|
+
activity ? `Terminal activity: ${truncateText(String(activity), 180)}` : undefined,
|
|
151
|
+
excerpt ? `Visible screen: ${truncateText(String(excerpt), 220)}` : undefined
|
|
152
|
+
].filter(Boolean);
|
|
153
|
+
return parts.length > 0
|
|
154
|
+
? parts.join(" ")
|
|
155
|
+
: "Only active process metadata is available; no Codex conversation history or terminal screen content could be read.";
|
|
156
|
+
}
|
|
157
|
+
export function bestSessionIntent(context) {
|
|
158
|
+
const firstUser = visibleRolloutMessages(context)
|
|
159
|
+
.find((message) => message.role === "user")?.text;
|
|
160
|
+
if (firstUser) {
|
|
161
|
+
return firstUser;
|
|
162
|
+
}
|
|
163
|
+
const title = cleanIntentText(context.source.title);
|
|
164
|
+
if (title) {
|
|
165
|
+
return title;
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
export function visibleRolloutMessages(context) {
|
|
170
|
+
return context.messages.filter((message) => !isEnvironmentContextMessage(message.text));
|
|
171
|
+
}
|
|
172
|
+
export function cleanIntentText(value) {
|
|
173
|
+
const text = String(value ?? "").replace(/\s+/g, " ").trim();
|
|
174
|
+
return text && !isEnvironmentContextMessage(text) ? text : undefined;
|
|
175
|
+
}
|
|
176
|
+
export function isEnvironmentContextMessage(value) {
|
|
177
|
+
return /^\s*<environment_context[\s>]/u.test(String(value ?? ""));
|
|
178
|
+
}
|
|
179
|
+
function recentMessageEvidence(events) {
|
|
180
|
+
return events
|
|
181
|
+
.filter((event) => event.event === "message" && typeof event.body === "string")
|
|
182
|
+
.slice(-8)
|
|
183
|
+
.map((event) => ({
|
|
184
|
+
ts: event.ts,
|
|
185
|
+
from: event.from,
|
|
186
|
+
to: event.to,
|
|
187
|
+
type: event.type,
|
|
188
|
+
round: event.round,
|
|
189
|
+
body: truncateText(event.body, 800)
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
export function truncateText(value, maxLength) {
|
|
193
|
+
const text = String(value ?? "").replace(/\s+/g, " ").trim();
|
|
194
|
+
if (text.length <= maxLength) {
|
|
195
|
+
return text;
|
|
196
|
+
}
|
|
197
|
+
return `${text.slice(0, Math.max(0, maxLength - 3))}...`;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=terminal-status-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-status-facts.js","sourceRoot":"","sources":["../../src/terminal-status-facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,101 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CodexOpenRootRolloutInventory } from "./agent-session-provider.js";
|
|
2
2
|
import type { TerminalCompletionEvidence } from "./terminal-agent-adapter.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
nativeThreadId: string;
|
|
7
|
-
requestHash: string;
|
|
8
|
-
acceptanceId: string;
|
|
9
|
-
acceptedAt?: string;
|
|
10
|
-
anchorFingerprint: string;
|
|
11
|
-
evidenceFingerprint: string;
|
|
12
|
-
metadata?: Record<string, string | number>;
|
|
13
|
-
}
|
|
14
|
-
export interface CodexRolloutIdentity {
|
|
15
|
-
fd: string;
|
|
16
|
-
device: string;
|
|
17
|
-
inode: string;
|
|
18
|
-
path: string;
|
|
19
|
-
}
|
|
20
|
-
interface CodexRolloutAcceptanceAnchorBase {
|
|
21
|
-
schema: "agent-knock-knock/codex-rollout-acceptance-anchor";
|
|
22
|
-
process_uuid: string;
|
|
23
|
-
process_birth: string;
|
|
24
|
-
captured_at: string;
|
|
25
|
-
file_existed: boolean;
|
|
26
|
-
offset_bytes: number;
|
|
27
|
-
anchor_fingerprint: string;
|
|
28
|
-
}
|
|
29
|
-
export interface CodexBoundRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase {
|
|
30
|
-
version: 1;
|
|
31
|
-
native_thread_id: string;
|
|
32
|
-
mode: "existing" | "pre_materialization";
|
|
33
|
-
rollout?: CodexRolloutIdentity;
|
|
34
|
-
expected_empty_native_session?: true;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* A process-bound anchor for a genuinely virgin Codex TUI. Codex does not
|
|
38
|
-
* assign a native thread UUID or open a rollout until its first prompt is
|
|
39
|
-
* submitted, so the UUID cannot safely be named before transport. The exact
|
|
40
|
-
* process incarnation is still pinned here; acceptance must additionally
|
|
41
|
-
* prove the newly materialized UUID, rollout, and request hash.
|
|
42
|
-
*/
|
|
43
|
-
export interface CodexVirginRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase {
|
|
44
|
-
version: 2;
|
|
45
|
-
mode: "pre_materialization";
|
|
46
|
-
native_thread_id?: never;
|
|
47
|
-
native_thread_binding: "post_submission";
|
|
48
|
-
file_existed: false;
|
|
49
|
-
offset_bytes: 0;
|
|
50
|
-
rollout?: never;
|
|
51
|
-
expected_empty_native_session: true;
|
|
52
|
-
}
|
|
53
|
-
export interface CodexCandidateRolloutAcceptanceAnchorEntry {
|
|
54
|
-
native_thread_id: string;
|
|
55
|
-
rollout: CodexRolloutIdentity;
|
|
56
|
-
offset_bytes: number;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* A process-bound pre-submit snapshot for a terminal whose open-root
|
|
60
|
-
* inventory is exact but cannot name one foreground root. Existing roots are
|
|
61
|
-
* fenced at their byte offsets; roots opened after capture are admitted only
|
|
62
|
-
* with a fresh exact session_meta header. No candidate is selected by mtime.
|
|
63
|
-
*/
|
|
64
|
-
export interface CodexCandidateSetRolloutAcceptanceAnchor extends CodexRolloutAcceptanceAnchorBase {
|
|
65
|
-
version: 3;
|
|
66
|
-
mode: "candidate_set";
|
|
67
|
-
native_thread_binding: "post_submission";
|
|
68
|
-
file_existed: false;
|
|
69
|
-
offset_bytes: 0;
|
|
70
|
-
zero_file_baseline: boolean;
|
|
71
|
-
inventory_pid: number;
|
|
72
|
-
inventory_cwd?: string;
|
|
73
|
-
inventory_fingerprint: string;
|
|
74
|
-
candidate_rollouts: CodexCandidateRolloutAcceptanceAnchorEntry[];
|
|
75
|
-
}
|
|
76
|
-
export type CodexRolloutAcceptanceAnchor = CodexBoundRolloutAcceptanceAnchor | CodexVirginRolloutAcceptanceAnchor | CodexCandidateSetRolloutAcceptanceAnchor;
|
|
77
|
-
export type CodexCandidateSetRolloutAcceptanceResult = {
|
|
78
|
-
status: "accepted";
|
|
79
|
-
identity: CodexOpenRootRolloutIdentity;
|
|
80
|
-
evidence: TerminalSubmissionAcceptanceEvidence;
|
|
81
|
-
} | {
|
|
82
|
-
status: "pending";
|
|
83
|
-
inspected_candidates: number;
|
|
84
|
-
exact_matches: number;
|
|
85
|
-
incomplete_candidates?: number;
|
|
86
|
-
} | {
|
|
87
|
-
status: "uncertain";
|
|
88
|
-
code: "multiple_exact_request_acceptances" | "candidate_inventory_changed" | "candidate_scan_invalid";
|
|
89
|
-
reason: string;
|
|
90
|
-
inspected_candidates: number;
|
|
91
|
-
exact_matches: number;
|
|
92
|
-
};
|
|
93
|
-
export interface CodexRolloutAcceptanceIdentity {
|
|
94
|
-
sessionId: string;
|
|
95
|
-
processUuid?: string;
|
|
96
|
-
processBirth?: string;
|
|
97
|
-
rollout?: CodexRolloutIdentity;
|
|
98
|
-
}
|
|
3
|
+
import { validateCodexRolloutAcceptanceAnchor, validateTerminalSubmissionAcceptanceEvidence, type CaptureCodexRolloutAcceptanceAnchorOptions, type CodexCandidateSetRolloutAcceptanceAnchor, type CodexCandidateSetRolloutAcceptanceRequest, type CodexCandidateSetRolloutAcceptanceResult, type CodexRolloutAcceptanceAnchor, type CodexRolloutAcceptanceIdentity, type CodexRolloutAcceptanceRequest, type TerminalSubmissionAcceptanceEvidence } from "./terminal-submission-facts.js";
|
|
4
|
+
export { validateCodexRolloutAcceptanceAnchor, validateTerminalSubmissionAcceptanceEvidence };
|
|
5
|
+
export type { CodexBoundRolloutAcceptanceAnchor, CodexCandidateRolloutAcceptanceAnchorEntry, CodexCandidateSetRolloutAcceptanceAnchor, CodexRolloutAcceptanceAnchor, CodexCandidateSetRolloutAcceptanceResult, CodexRolloutAcceptanceIdentity, CodexRolloutIdentity, TerminalSubmissionAcceptanceEvidence, CodexVirginRolloutAcceptanceAnchor } from "./terminal-submission-facts.js";
|
|
99
6
|
export type CodexBoundRolloutCompletionCode = "completion_found" | "exact_turn_not_complete" | "partial_rollout_record" | "rollout_changed_during_scan" | "invalid_anchor" | "invalid_acceptance_evidence" | "acceptance_anchor_mismatch" | "acceptance_turn_mismatch" | "binding_identity_mismatch" | "rollout_identity_mismatch" | "rollout_unreadable" | "rollout_truncated" | "scan_limit_exceeded" | "invalid_rollout_jsonl" | "duplicate_exact_completion" | "invalid_exact_completion";
|
|
100
7
|
export interface CodexBoundRolloutCompletionDiagnostics {
|
|
101
8
|
detector: "codex_exact_bound_rollout";
|
|
@@ -121,60 +28,13 @@ export type CodexBoundRolloutCompletionResult = {
|
|
|
121
28
|
status: "failure";
|
|
122
29
|
diagnostics: CodexBoundRolloutCompletionDiagnostics;
|
|
123
30
|
};
|
|
124
|
-
export declare function validateTerminalSubmissionAcceptanceEvidence(value: unknown, expected: {
|
|
125
|
-
source: TerminalSubmissionAcceptanceEvidence["source"];
|
|
126
|
-
nativeThreadId: string;
|
|
127
|
-
requestHash: string;
|
|
128
|
-
}): TerminalSubmissionAcceptanceEvidence;
|
|
129
|
-
export declare function terminalSubmissionReplayReceipt(options: {
|
|
130
|
-
proofLevel: "submitted" | "enter_dispatched" | "agent_accepted";
|
|
131
|
-
evidence?: unknown;
|
|
132
|
-
expected: {
|
|
133
|
-
source: TerminalSubmissionAcceptanceEvidence["source"];
|
|
134
|
-
nativeThreadId: string;
|
|
135
|
-
requestHash: string;
|
|
136
|
-
};
|
|
137
|
-
}): {
|
|
138
|
-
replayed: true;
|
|
139
|
-
delivered: boolean;
|
|
140
|
-
status: "async_pending" | "submission_pending_acceptance" | "submission_uncertain";
|
|
141
|
-
submission_outcome: "agent_accepted" | "pending_acceptance" | "uncertain";
|
|
142
|
-
delivery_receipt: "agent_accepted" | "enter_dispatched" | "submitted";
|
|
143
|
-
do_not_retry?: true;
|
|
144
|
-
evidence_error?: string;
|
|
145
|
-
};
|
|
146
|
-
type CaptureCodexRolloutAcceptanceAnchorOptions = {
|
|
147
|
-
processUuid: string;
|
|
148
|
-
processBirth: string;
|
|
149
|
-
now?: Date;
|
|
150
|
-
} & ({
|
|
151
|
-
nativeThreadId: string;
|
|
152
|
-
mode: "existing";
|
|
153
|
-
rollout: CodexRolloutIdentity;
|
|
154
|
-
} | {
|
|
155
|
-
nativeThreadId: string;
|
|
156
|
-
mode: "pre_materialization";
|
|
157
|
-
expectedEmptyNativeSession: true;
|
|
158
|
-
} | {
|
|
159
|
-
nativeThreadId?: undefined;
|
|
160
|
-
mode: "pre_materialization";
|
|
161
|
-
expectedEmptyNativeSession: true;
|
|
162
|
-
});
|
|
163
31
|
export declare function captureCodexRolloutAcceptanceAnchor(options: CaptureCodexRolloutAcceptanceAnchorOptions): CodexRolloutAcceptanceAnchor;
|
|
164
32
|
export declare function captureCodexCandidateSetRolloutAcceptanceAnchor({ inventory: inventoryValue, now }: {
|
|
165
33
|
inventory: CodexOpenRootRolloutInventory;
|
|
166
34
|
now?: Date;
|
|
167
35
|
}): CodexCandidateSetRolloutAcceptanceAnchor;
|
|
168
|
-
export declare function detectCodexCandidateSetRolloutAcceptance({ anchor: anchorValue, currentInventory: inventoryValue, requestHash: requestHashValue }:
|
|
169
|
-
|
|
170
|
-
currentInventory: CodexOpenRootRolloutInventory;
|
|
171
|
-
requestHash: string;
|
|
172
|
-
}): CodexCandidateSetRolloutAcceptanceResult;
|
|
173
|
-
export declare function detectCodexRolloutAcceptance(options: {
|
|
174
|
-
anchor: CodexRolloutAcceptanceAnchor;
|
|
175
|
-
currentIdentity: CodexRolloutAcceptanceIdentity;
|
|
176
|
-
requestHash: string;
|
|
177
|
-
}): TerminalSubmissionAcceptanceEvidence | undefined;
|
|
36
|
+
export declare function detectCodexCandidateSetRolloutAcceptance({ anchor: anchorValue, currentInventory: inventoryValue, requestHash: requestHashValue }: CodexCandidateSetRolloutAcceptanceRequest): CodexCandidateSetRolloutAcceptanceResult;
|
|
37
|
+
export declare function detectCodexRolloutAcceptance(options: CodexRolloutAcceptanceRequest): TerminalSubmissionAcceptanceEvidence | undefined;
|
|
178
38
|
/**
|
|
179
39
|
* Scans the exact rollout and native turn proven by terminal acceptance.
|
|
180
40
|
*
|
|
@@ -189,5 +49,3 @@ export declare function detectCodexBoundRolloutCompletion(options: {
|
|
|
189
49
|
currentIdentity: CodexRolloutAcceptanceIdentity;
|
|
190
50
|
requestHash: string;
|
|
191
51
|
}): CodexBoundRolloutCompletionResult;
|
|
192
|
-
export declare function validateCodexRolloutAcceptanceAnchor(value: CodexRolloutAcceptanceAnchor): CodexRolloutAcceptanceAnchor;
|
|
193
|
-
export {};
|
|
@@ -2,108 +2,11 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { redactString } from "./runtime-log.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
throw new Error("native acceptance evidence is unavailable");
|
|
8
|
-
}
|
|
9
|
-
const allowedKeys = new Set([
|
|
10
|
-
"source",
|
|
11
|
-
"kind",
|
|
12
|
-
"nativeThreadId",
|
|
13
|
-
"requestHash",
|
|
14
|
-
"acceptanceId",
|
|
15
|
-
"acceptedAt",
|
|
16
|
-
"anchorFingerprint",
|
|
17
|
-
"evidenceFingerprint",
|
|
18
|
-
"metadata"
|
|
19
|
-
]);
|
|
20
|
-
if (Object.keys(value).some((key) => !allowedKeys.has(key))) {
|
|
21
|
-
throw new Error("native acceptance evidence contains unsupported fields");
|
|
22
|
-
}
|
|
23
|
-
if (value.source !== expected.source || value.kind !== "native_user_turn") {
|
|
24
|
-
throw new Error("native acceptance evidence has the wrong agent or kind");
|
|
25
|
-
}
|
|
26
|
-
if (requiredString(value.nativeThreadId, "native acceptance thread") !==
|
|
27
|
-
requiredString(expected.nativeThreadId, "expected native acceptance thread") ||
|
|
28
|
-
sha256Value(value.requestHash, "native acceptance request hash") !==
|
|
29
|
-
sha256Value(expected.requestHash, "expected native acceptance request hash")) {
|
|
30
|
-
throw new Error("native acceptance evidence does not match the exact request binding");
|
|
31
|
-
}
|
|
32
|
-
requiredString(value.acceptanceId, "native acceptance id");
|
|
33
|
-
sha256Value(value.anchorFingerprint, "native acceptance anchor fingerprint");
|
|
34
|
-
sha256Value(value.evidenceFingerprint, "native acceptance evidence fingerprint");
|
|
35
|
-
if (value.acceptedAt !== undefined && !validTimestamp(value.acceptedAt)) {
|
|
36
|
-
throw new Error("native acceptance evidence timestamp is invalid");
|
|
37
|
-
}
|
|
38
|
-
if (value.metadata !== undefined) {
|
|
39
|
-
if (!isRecord(value.metadata)) {
|
|
40
|
-
throw new Error("native acceptance evidence metadata is invalid");
|
|
41
|
-
}
|
|
42
|
-
const allowedMetadata = value.source === "codex_rollout"
|
|
43
|
-
? new Set([
|
|
44
|
-
"turn_id",
|
|
45
|
-
"anchor_offset_bytes",
|
|
46
|
-
"observed_end_offset_bytes"
|
|
47
|
-
])
|
|
48
|
-
: new Set([
|
|
49
|
-
"prompt_uuid",
|
|
50
|
-
"claude_version",
|
|
51
|
-
"transcript_file_id",
|
|
52
|
-
"anchor_offset_bytes",
|
|
53
|
-
"observed_end_offset_bytes",
|
|
54
|
-
"agent_started_at_ms"
|
|
55
|
-
]);
|
|
56
|
-
for (const [key, item] of Object.entries(value.metadata)) {
|
|
57
|
-
if (!allowedMetadata.has(key) ||
|
|
58
|
-
!(typeof item === "string" ||
|
|
59
|
-
(typeof item === "number" && Number.isFinite(item)))) {
|
|
60
|
-
throw new Error("native acceptance evidence metadata is not allowlisted");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const { evidenceFingerprint, ...base } = value;
|
|
65
|
-
if (fingerprint(base) !== evidenceFingerprint) {
|
|
66
|
-
throw new Error("native acceptance evidence fingerprint does not match");
|
|
67
|
-
}
|
|
68
|
-
return value;
|
|
69
|
-
}
|
|
70
|
-
export function terminalSubmissionReplayReceipt(options) {
|
|
71
|
-
if (options.proofLevel !== "agent_accepted") {
|
|
72
|
-
return {
|
|
73
|
-
replayed: true,
|
|
74
|
-
delivered: false,
|
|
75
|
-
status: "submission_pending_acceptance",
|
|
76
|
-
submission_outcome: "pending_acceptance",
|
|
77
|
-
delivery_receipt: options.proofLevel,
|
|
78
|
-
do_not_retry: true
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
validateTerminalSubmissionAcceptanceEvidence(options.evidence, options.expected);
|
|
83
|
-
return {
|
|
84
|
-
replayed: true,
|
|
85
|
-
delivered: true,
|
|
86
|
-
status: "async_pending",
|
|
87
|
-
submission_outcome: "agent_accepted",
|
|
88
|
-
delivery_receipt: "agent_accepted"
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
return {
|
|
93
|
-
replayed: true,
|
|
94
|
-
delivered: false,
|
|
95
|
-
status: "submission_uncertain",
|
|
96
|
-
submission_outcome: "uncertain",
|
|
97
|
-
delivery_receipt: "enter_dispatched",
|
|
98
|
-
do_not_retry: true,
|
|
99
|
-
evidence_error: error instanceof Error ? error.message : String(error)
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
5
|
+
import { exactNativeThreadId, fingerprint, normalizedRolloutIdentity, parsedInteger, requiredString, sha256Value, validTimestamp, validateCodexRolloutAcceptanceAnchor, validateTerminalSubmissionAcceptanceEvidence } from "./terminal-submission-facts.js";
|
|
6
|
+
export { validateCodexRolloutAcceptanceAnchor, validateTerminalSubmissionAcceptanceEvidence };
|
|
103
7
|
const CODEX_ACCEPTANCE_MAX_BYTES = 16 * 1024 * 1024;
|
|
104
8
|
const CODEX_COMPLETION_MAX_BYTES = 256 * 1024 * 1024;
|
|
105
9
|
const CODEX_COMPLETION_MAX_TEXT_LENGTH = 4000;
|
|
106
|
-
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;
|
|
107
10
|
const NO_FOLLOW_FLAG = typeof fs.constants.O_NOFOLLOW === "number"
|
|
108
11
|
? fs.constants.O_NOFOLLOW
|
|
109
12
|
: 0;
|
|
@@ -898,91 +801,6 @@ function assertVirginRolloutHeader(options) {
|
|
|
898
801
|
throw new Error("virgin Codex rollout predates its terminal submission anchor");
|
|
899
802
|
}
|
|
900
803
|
}
|
|
901
|
-
export function validateCodexRolloutAcceptanceAnchor(value) {
|
|
902
|
-
if (!isRecord(value) ||
|
|
903
|
-
value.schema !== "agent-knock-knock/codex-rollout-acceptance-anchor" ||
|
|
904
|
-
(value.version !== 1 && value.version !== 2 && value.version !== 3) ||
|
|
905
|
-
!["existing", "pre_materialization", "candidate_set"].includes(String(value.mode)) ||
|
|
906
|
-
!Number.isSafeInteger(value.offset_bytes) ||
|
|
907
|
-
value.offset_bytes < 0 ||
|
|
908
|
-
typeof value.file_existed !== "boolean") {
|
|
909
|
-
throw new Error("Codex rollout acceptance anchor is invalid");
|
|
910
|
-
}
|
|
911
|
-
if (value.version === 1) {
|
|
912
|
-
exactNativeThreadId(value.native_thread_id);
|
|
913
|
-
if ("native_thread_binding" in value) {
|
|
914
|
-
throw new Error("bound Codex acceptance anchor has deferred binding state");
|
|
915
|
-
}
|
|
916
|
-
}
|
|
917
|
-
else if (value.version === 2 && (value.mode !== "pre_materialization" ||
|
|
918
|
-
value.native_thread_binding !== "post_submission" ||
|
|
919
|
-
"native_thread_id" in value)) {
|
|
920
|
-
throw new Error("virgin Codex acceptance anchor is inconsistent");
|
|
921
|
-
}
|
|
922
|
-
else if (value.version === 3 && (value.mode !== "candidate_set" ||
|
|
923
|
-
value.native_thread_binding !== "post_submission" ||
|
|
924
|
-
"native_thread_id" in value ||
|
|
925
|
-
value.file_existed !== false ||
|
|
926
|
-
value.offset_bytes !== 0 ||
|
|
927
|
-
typeof value.zero_file_baseline !== "boolean" ||
|
|
928
|
-
!Number.isSafeInteger(value.inventory_pid) ||
|
|
929
|
-
value.inventory_pid <= 1 ||
|
|
930
|
-
(value.inventory_cwd !== undefined &&
|
|
931
|
-
!path.isAbsolute(value.inventory_cwd)) ||
|
|
932
|
-
!/^[0-9a-f]{64}$/u.test(String(value.inventory_fingerprint)) ||
|
|
933
|
-
!Array.isArray(value.candidate_rollouts) ||
|
|
934
|
-
value.candidate_rollouts.length > 128 ||
|
|
935
|
-
value.zero_file_baseline !== (value.candidate_rollouts.length === 0))) {
|
|
936
|
-
throw new Error("candidate-set Codex acceptance anchor is inconsistent");
|
|
937
|
-
}
|
|
938
|
-
requiredString(value.process_uuid, "Codex process UUID");
|
|
939
|
-
requiredString(value.process_birth, "Codex process birth");
|
|
940
|
-
if (!validTimestamp(value.captured_at)) {
|
|
941
|
-
throw new Error("Codex acceptance capture timestamp is invalid");
|
|
942
|
-
}
|
|
943
|
-
sha256Value(value.anchor_fingerprint, "Codex acceptance anchor fingerprint");
|
|
944
|
-
const { anchor_fingerprint: _fingerprint, ...base } = value;
|
|
945
|
-
if (fingerprint(base) !== value.anchor_fingerprint) {
|
|
946
|
-
throw new Error("Codex rollout acceptance anchor fingerprint does not match");
|
|
947
|
-
}
|
|
948
|
-
if (value.version === 3) {
|
|
949
|
-
const seenThreads = new Set();
|
|
950
|
-
const seenFiles = new Set();
|
|
951
|
-
for (const candidate of value.candidate_rollouts) {
|
|
952
|
-
if (!isRecord(candidate)) {
|
|
953
|
-
throw new Error("Codex candidate-set rollout entry is invalid");
|
|
954
|
-
}
|
|
955
|
-
const nativeThreadId = exactNativeThreadId(candidate.native_thread_id);
|
|
956
|
-
const rollout = normalizedRolloutIdentity(candidate.rollout);
|
|
957
|
-
if (!Number.isSafeInteger(candidate.offset_bytes) ||
|
|
958
|
-
candidate.offset_bytes < 0 ||
|
|
959
|
-
seenThreads.has(nativeThreadId) ||
|
|
960
|
-
seenFiles.has(`${rollout.device}:${rollout.inode}`)) {
|
|
961
|
-
throw new Error("Codex candidate-set rollout entries are ambiguous");
|
|
962
|
-
}
|
|
963
|
-
seenThreads.add(nativeThreadId);
|
|
964
|
-
seenFiles.add(`${rollout.device}:${rollout.inode}`);
|
|
965
|
-
}
|
|
966
|
-
return value;
|
|
967
|
-
}
|
|
968
|
-
const rollout = "rollout" in value ? value.rollout : undefined;
|
|
969
|
-
if (value.file_existed !== (value.mode === "existing") ||
|
|
970
|
-
value.file_existed !== Boolean(rollout)) {
|
|
971
|
-
throw new Error("Codex rollout acceptance anchor file state is inconsistent");
|
|
972
|
-
}
|
|
973
|
-
if (value.mode === "existing" && rollout) {
|
|
974
|
-
normalizedRolloutIdentity(rollout);
|
|
975
|
-
if (value.expected_empty_native_session !== undefined) {
|
|
976
|
-
throw new Error("existing Codex acceptance anchor has pre-materialization state");
|
|
977
|
-
}
|
|
978
|
-
}
|
|
979
|
-
else if (value.offset_bytes !== 0 ||
|
|
980
|
-
rollout !== undefined ||
|
|
981
|
-
value.expected_empty_native_session !== true) {
|
|
982
|
-
throw new Error("Codex pre-materialization acceptance anchor is inconsistent");
|
|
983
|
-
}
|
|
984
|
-
return value;
|
|
985
|
-
}
|
|
986
804
|
function validateCodexOpenRootInventoryForAcceptance(value) {
|
|
987
805
|
if (!isRecord(value) ||
|
|
988
806
|
value.schema !==
|
|
@@ -1087,65 +905,20 @@ function sameStableFile(left, right) {
|
|
|
1087
905
|
left.mtimeMs === right.mtimeMs &&
|
|
1088
906
|
left.ctimeMs === right.ctimeMs;
|
|
1089
907
|
}
|
|
1090
|
-
function normalizedRolloutIdentity(value) {
|
|
1091
|
-
const normalized = {
|
|
1092
|
-
fd: requiredString(value.fd, "Codex rollout descriptor"),
|
|
1093
|
-
device: requiredString(value.device, "Codex rollout device"),
|
|
1094
|
-
inode: requiredString(value.inode, "Codex rollout inode"),
|
|
1095
|
-
path: requiredString(value.path, "Codex rollout path")
|
|
1096
|
-
};
|
|
1097
|
-
parsedInteger(normalized.device);
|
|
1098
|
-
parsedInteger(normalized.inode);
|
|
1099
|
-
return normalized;
|
|
1100
|
-
}
|
|
1101
908
|
function sameRolloutIdentity(left, right) {
|
|
1102
909
|
return left.fd === right.fd &&
|
|
1103
910
|
left.device === right.device &&
|
|
1104
911
|
left.inode === right.inode &&
|
|
1105
912
|
left.path === right.path;
|
|
1106
913
|
}
|
|
1107
|
-
function exactNativeThreadId(value) {
|
|
1108
|
-
const text = requiredString(value, "Codex native thread ID").toLowerCase();
|
|
1109
|
-
if (!NATIVE_THREAD_ID_PATTERN.test(text)) {
|
|
1110
|
-
throw new Error("Codex native thread ID is not an exact UUID");
|
|
1111
|
-
}
|
|
1112
|
-
return text;
|
|
1113
|
-
}
|
|
1114
|
-
function parsedInteger(value) {
|
|
1115
|
-
try {
|
|
1116
|
-
return BigInt(value);
|
|
1117
|
-
}
|
|
1118
|
-
catch {
|
|
1119
|
-
throw new Error("Codex rollout file identity is not numeric");
|
|
1120
|
-
}
|
|
1121
|
-
}
|
|
1122
|
-
function sha256Value(value, label) {
|
|
1123
|
-
const text = requiredString(value, label).toLowerCase();
|
|
1124
|
-
if (!/^[0-9a-f]{64}$/u.test(text)) {
|
|
1125
|
-
throw new Error(`${label} is not a SHA-256 value`);
|
|
1126
|
-
}
|
|
1127
|
-
return text;
|
|
1128
|
-
}
|
|
1129
|
-
function requiredString(value, label) {
|
|
1130
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
1131
|
-
throw new Error(`${label} is unavailable`);
|
|
1132
|
-
}
|
|
1133
|
-
return value.trim();
|
|
1134
|
-
}
|
|
1135
914
|
function optionalString(value) {
|
|
1136
915
|
return typeof value === "string" && value.trim().length > 0
|
|
1137
916
|
? value.trim()
|
|
1138
917
|
: undefined;
|
|
1139
918
|
}
|
|
1140
|
-
function validTimestamp(value) {
|
|
1141
|
-
return typeof value === "string" && Number.isFinite(Date.parse(value));
|
|
1142
|
-
}
|
|
1143
919
|
function fingerprintText(value) {
|
|
1144
920
|
return createHash("sha256").update(value).digest("hex");
|
|
1145
921
|
}
|
|
1146
|
-
function fingerprint(value) {
|
|
1147
|
-
return createHash("sha256").update(JSON.stringify(value)).digest("hex");
|
|
1148
|
-
}
|
|
1149
922
|
function isRecord(value) {
|
|
1150
923
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
1151
924
|
}
|