@scotthuang/agent-knock-knock 0.13.3 → 0.13.4
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 +14 -0
- package/README.md +13 -5
- package/dist/src/callback-outbox-policy.js +27 -6
- package/dist/src/callback-outbox-policy.js.map +1 -1
- package/dist/src/callback-outbox-service.d.ts +4 -30
- package/dist/src/callback-outbox-service.js +21 -154
- package/dist/src/callback-outbox-service.js.map +1 -1
- package/dist/src/callback-outbox-settlement.js +13 -8
- package/dist/src/callback-outbox-settlement.js.map +1 -1
- package/dist/src/callback-route-service.d.ts +46 -0
- package/dist/src/callback-route-service.js +155 -0
- package/dist/src/callback-route-service.js.map +1 -0
- package/dist/src/codex-process-incarnation.d.ts +8 -0
- package/dist/src/codex-process-incarnation.js +36 -0
- package/dist/src/codex-process-incarnation.js.map +1 -0
- package/dist/src/deferred-foreground-conflict-policy.d.ts +22 -0
- package/dist/src/deferred-foreground-conflict-policy.js +52 -0
- package/dist/src/deferred-foreground-conflict-policy.js.map +1 -0
- package/dist/src/durable-notification-kernel.d.ts +94 -0
- package/dist/src/durable-notification-kernel.js +68 -0
- package/dist/src/durable-notification-kernel.js.map +1 -0
- package/dist/src/herdr-socket-transport.d.ts +43 -0
- package/dist/src/herdr-socket-transport.js +170 -0
- package/dist/src/herdr-socket-transport.js.map +1 -0
- package/dist/src/herdr-terminal-control-provider.d.ts +2 -45
- package/dist/src/herdr-terminal-control-provider.js +2 -172
- package/dist/src/herdr-terminal-control-provider.js.map +1 -1
- package/dist/src/host-adapter-capabilities.d.ts +35 -0
- package/dist/src/host-adapter-capabilities.js +146 -0
- package/dist/src/host-adapter-capabilities.js.map +1 -0
- package/dist/src/host-adapter.d.ts +9 -3
- package/dist/src/host-adapter.js +33 -9
- package/dist/src/host-adapter.js.map +1 -1
- package/dist/src/host-bridge-tools.d.ts +3 -4
- package/dist/src/host-bridge-tools.js +49 -92
- package/dist/src/host-bridge-tools.js.map +1 -1
- package/dist/src/host-bridge.js +5 -5
- package/dist/src/host-bridge.js.map +1 -1
- package/dist/src/host-monitor-reconciliation.d.ts +6 -0
- package/dist/src/host-monitor-reconciliation.js +96 -0
- package/dist/src/host-monitor-reconciliation.js.map +1 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.js +116 -60
- package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
- package/dist/src/openclaw-list-projection.d.ts +2 -0
- package/dist/src/openclaw-list-projection.js +3 -0
- package/dist/src/openclaw-list-projection.js.map +1 -0
- package/dist/src/openclaw-model-facing-field-policy.d.ts +2 -0
- package/dist/src/openclaw-model-facing-field-policy.js +3 -0
- package/dist/src/openclaw-model-facing-field-policy.js.map +1 -0
- package/dist/src/openclaw-plugin-command-adapter.d.ts +6 -29
- package/dist/src/openclaw-plugin-command-adapter.js +7 -2660
- package/dist/src/openclaw-plugin-command-adapter.js.map +1 -1
- package/dist/src/openclaw-plugin-helpers.d.ts +2 -148
- package/dist/src/openclaw-plugin-helpers.js +2 -1844
- package/dist/src/openclaw-plugin-helpers.js.map +1 -1
- package/dist/src/openclaw-plugin-schemas.d.ts +2 -563
- package/dist/src/openclaw-plugin-schemas.js +2 -572
- package/dist/src/openclaw-plugin-schemas.js.map +1 -1
- package/dist/src/openclaw-plugin-supervisor.d.ts +4 -5
- package/dist/src/openclaw-plugin-supervisor.js +5 -94
- package/dist/src/openclaw-plugin-supervisor.js.map +1 -1
- package/dist/src/openclaw-plugin-value-helpers.d.ts +2 -0
- package/dist/src/openclaw-plugin-value-helpers.js +3 -0
- package/dist/src/openclaw-plugin-value-helpers.js.map +1 -0
- package/dist/src/openclaw-private-authority-offers.d.ts +4 -39
- package/dist/src/openclaw-private-authority-offers.js +3 -258
- package/dist/src/openclaw-private-authority-offers.js.map +1 -1
- package/dist/src/semantic-private-authority-offers.d.ts +41 -0
- package/dist/src/semantic-private-authority-offers.js +261 -0
- package/dist/src/semantic-private-authority-offers.js.map +1 -0
- package/dist/src/semantic-tool-arguments.d.ts +9 -0
- package/dist/src/semantic-tool-arguments.js +64 -0
- package/dist/src/semantic-tool-arguments.js.map +1 -0
- package/dist/src/semantic-tool-catalog.d.ts +48 -0
- package/dist/src/semantic-tool-catalog.js +105 -0
- package/dist/src/semantic-tool-catalog.js.map +1 -0
- package/dist/src/semantic-tool-command-helpers.d.ts +145 -0
- package/dist/src/semantic-tool-command-helpers.js +1272 -0
- package/dist/src/semantic-tool-command-helpers.js.map +1 -0
- package/dist/src/semantic-tool-list-projection.d.ts +10 -0
- package/dist/src/semantic-tool-list-projection.js +497 -0
- package/dist/src/semantic-tool-list-projection.js.map +1 -0
- package/dist/src/semantic-tool-model-facing-field-policy.d.ts +3 -0
- package/dist/src/semantic-tool-model-facing-field-policy.js +66 -0
- package/dist/src/semantic-tool-model-facing-field-policy.js.map +1 -0
- package/dist/src/semantic-tool-presentation.d.ts +37 -0
- package/dist/src/semantic-tool-presentation.js +680 -0
- package/dist/src/semantic-tool-presentation.js.map +1 -0
- package/dist/src/semantic-tool-private-authority.d.ts +39 -0
- package/dist/src/semantic-tool-private-authority.js +602 -0
- package/dist/src/semantic-tool-private-authority.js.map +1 -0
- package/dist/src/semantic-tool-relay.d.ts +16 -0
- package/dist/src/semantic-tool-relay.js +175 -0
- package/dist/src/semantic-tool-relay.js.map +1 -0
- package/dist/src/semantic-tool-runtime.d.ts +10 -0
- package/dist/src/semantic-tool-runtime.js +1157 -0
- package/dist/src/semantic-tool-runtime.js.map +1 -0
- package/dist/src/semantic-tool-schemas.d.ts +563 -0
- package/dist/src/semantic-tool-schemas.js +573 -0
- package/dist/src/semantic-tool-schemas.js.map +1 -0
- package/dist/src/semantic-tool-value-helpers.d.ts +5 -0
- package/dist/src/semantic-tool-value-helpers.js +27 -0
- package/dist/src/semantic-tool-value-helpers.js.map +1 -0
- package/dist/src/store-event-presentation.d.ts +17 -0
- package/dist/src/store-event-presentation.js +33 -0
- package/dist/src/store-event-presentation.js.map +1 -0
- package/dist/src/store.d.ts +3 -16
- package/dist/src/store.js +2 -30
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-action-projection.d.ts +2 -98
- package/dist/src/terminal-action-projection.js +13 -215
- package/dist/src/terminal-action-projection.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +14 -340
- package/dist/src/terminal-agent-bridge.js +155 -3226
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-approval-cli-adapter.d.ts +17 -0
- package/dist/src/terminal-approval-cli-adapter.js +921 -0
- package/dist/src/terminal-approval-cli-adapter.js.map +1 -0
- package/dist/src/terminal-command-cli-adapter.d.ts +2 -429
- package/dist/src/terminal-command-cli-adapter.js +344 -6061
- package/dist/src/terminal-command-cli-adapter.js.map +1 -1
- package/dist/src/terminal-command-cli-ports.d.ts +443 -0
- package/dist/src/terminal-command-cli-ports.js +2 -0
- package/dist/src/terminal-command-cli-ports.js.map +1 -0
- package/dist/src/terminal-command-dispatch-preparation.d.ts +81 -0
- package/dist/src/terminal-command-dispatch-preparation.js +209 -0
- package/dist/src/terminal-command-dispatch-preparation.js.map +1 -0
- package/dist/src/terminal-command-dispatch-transport.d.ts +35 -0
- package/dist/src/terminal-command-dispatch-transport.js +859 -0
- package/dist/src/terminal-command-dispatch-transport.js.map +1 -0
- package/dist/src/terminal-command-foreground-proof.d.ts +32 -0
- package/dist/src/terminal-command-foreground-proof.js +72 -0
- package/dist/src/terminal-command-foreground-proof.js.map +1 -0
- package/dist/src/terminal-command-send-preflight.d.ts +41 -0
- package/dist/src/terminal-command-send-preflight.js +86 -0
- package/dist/src/terminal-command-send-preflight.js.map +1 -0
- package/dist/src/terminal-composer-classifier.d.ts +55 -0
- package/dist/src/terminal-composer-classifier.js +638 -0
- package/dist/src/terminal-composer-classifier.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-authority.d.ts +56 -0
- package/dist/src/terminal-dispatch-recovery-authority.js +251 -0
- package/dist/src/terminal-dispatch-recovery-authority.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +1 -9
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js +5 -240
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -1
- package/dist/src/terminal-handoff-cli-adapter.d.ts +1 -11
- package/dist/src/terminal-handoff-cli-adapter.js +2 -39
- package/dist/src/terminal-handoff-cli-adapter.js.map +1 -1
- package/dist/src/terminal-human-explicit-send-cli-adapter.d.ts +25 -0
- package/dist/src/terminal-human-explicit-send-cli-adapter.js +903 -0
- package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -0
- package/dist/src/terminal-identity-authority-cli-adapter.d.ts +1 -6
- package/dist/src/terminal-identity-authority-cli-adapter.js +3 -33
- package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-cli-adapter.js +209 -210
- package/dist/src/terminal-interaction-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-core.d.ts +0 -2
- package/dist/src/terminal-interaction-core.js +4 -3
- package/dist/src/terminal-interaction-core.js.map +1 -1
- package/dist/src/terminal-interaction-protocol.d.ts +21 -0
- package/dist/src/terminal-interaction-protocol.js +74 -0
- package/dist/src/terminal-interaction-protocol.js.map +1 -1
- package/dist/src/terminal-interaction-response-bridge.d.ts +126 -0
- package/dist/src/terminal-interaction-response-bridge.js +579 -0
- package/dist/src/terminal-interaction-response-bridge.js.map +1 -0
- package/dist/src/terminal-interaction-response-transaction.d.ts +44 -0
- package/dist/src/terminal-interaction-response-transaction.js +56 -0
- package/dist/src/terminal-interaction-response-transaction.js.map +1 -0
- package/dist/src/terminal-list-action-policy.d.ts +43 -0
- package/dist/src/terminal-list-action-policy.js +164 -0
- package/dist/src/terminal-list-action-policy.js.map +1 -0
- package/dist/src/terminal-list-cli-adapter.d.ts +6 -36
- package/dist/src/terminal-list-cli-adapter.js +241 -1946
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-facts.d.ts +129 -0
- package/dist/src/terminal-list-facts.js +179 -0
- package/dist/src/terminal-list-facts.js.map +1 -0
- package/dist/src/terminal-list-inventory.d.ts +59 -0
- package/dist/src/terminal-list-inventory.js +194 -0
- package/dist/src/terminal-list-inventory.js.map +1 -0
- package/dist/src/terminal-list-ownership-service.d.ts +118 -0
- package/dist/src/terminal-list-ownership-service.js +1003 -0
- package/dist/src/terminal-list-ownership-service.js.map +1 -0
- package/dist/src/terminal-list-projection-service.d.ts +49 -0
- package/dist/src/terminal-list-projection-service.js +407 -0
- package/dist/src/terminal-list-projection-service.js.map +1 -0
- package/dist/src/terminal-list-renderer.d.ts +11 -11
- package/dist/src/terminal-list-renderer.js +168 -119
- package/dist/src/terminal-list-renderer.js.map +1 -1
- package/dist/src/terminal-managed-send-cli-adapter.d.ts +33 -0
- package/dist/src/terminal-managed-send-cli-adapter.js +994 -0
- package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -0
- package/dist/src/terminal-managed-turn-list-action-policy.d.ts +47 -0
- package/dist/src/terminal-managed-turn-list-action-policy.js +64 -0
- package/dist/src/terminal-managed-turn-list-action-policy.js.map +1 -0
- package/dist/src/terminal-model-control-action-policy.d.ts +60 -0
- package/dist/src/terminal-model-control-action-policy.js +96 -0
- package/dist/src/terminal-model-control-action-policy.js.map +1 -0
- package/dist/src/terminal-model-control-availability.d.ts +68 -0
- package/dist/src/terminal-model-control-availability.js +157 -0
- package/dist/src/terminal-model-control-availability.js.map +1 -0
- package/dist/src/terminal-model-control-bridge.d.ts +48 -0
- package/dist/src/terminal-model-control-bridge.js +259 -0
- package/dist/src/terminal-model-control-bridge.js.map +1 -0
- package/dist/src/terminal-model-control-profile.d.ts +55 -0
- package/dist/src/terminal-model-control-profile.js +137 -0
- package/dist/src/terminal-model-control-profile.js.map +1 -0
- package/dist/src/terminal-model-control-subject.d.ts +34 -0
- package/dist/src/terminal-model-control-subject.js +58 -0
- package/dist/src/terminal-model-control-subject.js.map +1 -0
- package/dist/src/terminal-model-control-transaction.d.ts +19 -0
- package/dist/src/terminal-model-control-transaction.js +39 -0
- package/dist/src/terminal-model-control-transaction.js.map +1 -0
- package/dist/src/terminal-model-control.d.ts +37 -18
- package/dist/src/terminal-model-control.js +285 -194
- package/dist/src/terminal-model-control.js.map +1 -1
- package/dist/src/terminal-monitor-application-service.js +50 -17
- package/dist/src/terminal-monitor-application-service.js.map +1 -1
- package/dist/src/terminal-native-inspection-bridge.d.ts +211 -0
- package/dist/src/terminal-native-inspection-bridge.js +1127 -0
- package/dist/src/terminal-native-inspection-bridge.js.map +1 -0
- package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -2
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
- package/dist/src/terminal-submission-retry-application.d.ts +24 -0
- package/dist/src/terminal-submission-retry-application.js +402 -0
- package/dist/src/terminal-submission-retry-application.js.map +1 -0
- package/dist/src/terminal-submission-retry-ports.d.ts +30 -0
- package/dist/src/terminal-submission-retry-ports.js +2 -0
- package/dist/src/terminal-submission-retry-ports.js.map +1 -0
- package/dist/src/terminal-submission-retry-reconciliation.d.ts +236 -0
- package/dist/src/terminal-submission-retry-reconciliation.js +1130 -0
- package/dist/src/terminal-submission-retry-reconciliation.js.map +1 -0
- package/dist/src/terminal-submission-retry-transport.d.ts +58 -0
- package/dist/src/terminal-submission-retry-transport.js +675 -0
- package/dist/src/terminal-submission-retry-transport.js.map +1 -0
- package/dist/src/terminal-text-submission-bridge.d.ts +200 -0
- package/dist/src/terminal-text-submission-bridge.js +632 -0
- package/dist/src/terminal-text-submission-bridge.js.map +1 -0
- package/dist/src/terminal-user-explicit-send-policy.d.ts +29 -0
- package/dist/src/terminal-user-explicit-send-policy.js +46 -0
- package/dist/src/terminal-user-explicit-send-policy.js.map +1 -0
- package/dist/src/terminal-watch-cli-adapter.js +91 -143
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-codec.d.ts +9 -0
- package/dist/src/terminal-watch-codec.js +1051 -0
- package/dist/src/terminal-watch-codec.js.map +1 -0
- package/dist/src/terminal-watch-interaction-response-store.d.ts +19 -0
- package/dist/src/terminal-watch-interaction-response-store.js +87 -0
- package/dist/src/terminal-watch-interaction-response-store.js.map +1 -0
- package/dist/src/terminal-watch-record.d.ts +319 -0
- package/dist/src/terminal-watch-record.js +742 -0
- package/dist/src/terminal-watch-record.js.map +1 -0
- package/dist/src/terminal-watch-service.js +48 -27
- package/dist/src/terminal-watch-service.js.map +1 -1
- package/dist/src/terminal-watch-store.d.ts +3 -279
- package/dist/src/terminal-watch-store.js +5 -1779
- package/dist/src/terminal-watch-store.js.map +1 -1
- package/package.json +7 -2
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +1 -1
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
import { hasCanonicalTerminalEndpoint, sameTerminalControlIncarnation, terminalControlEvidenceMatches, terminalEndpointFromControlRef, terminalEndpointIdentityFromEvidence, terminalEndpointIdentityKey } from "./terminal-control-ref.js";
|
|
2
|
+
import { normalizeTerminalInteractionResponseV2 } from "./terminal-interaction-protocol.js";
|
|
3
|
+
import { captureTerminalInteraction } from "./terminal-interaction-core.js";
|
|
4
|
+
import { observeTerminalModelControl, planTerminalModelControl, probeTerminalModelControl } from "./terminal-model-control.js";
|
|
5
|
+
import { CODEX_PASTE_ENTER_SETTLE_MS } from "./terminal-text-submission-bridge.js";
|
|
6
|
+
const TERMINAL_INTERACTION_TTL_MS = 10 * 60 * 1_000;
|
|
7
|
+
const TERMINAL_INTERACTION_IDENTIFIER_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
|
|
8
|
+
const TERMINAL_INTERACTION_FINGERPRINT_PATTERN = /^[0-9a-f]{64}$/u;
|
|
9
|
+
/**
|
|
10
|
+
* A response reservation or terminal input may already have happened. The
|
|
11
|
+
* same interaction must never be dispatched automatically after this error.
|
|
12
|
+
*/
|
|
13
|
+
export class TerminalInteractionDispatchReservedError extends Error {
|
|
14
|
+
stage;
|
|
15
|
+
code = "AKK_TERMINAL_INTERACTION_DISPATCH_RESERVED";
|
|
16
|
+
doNotRetry = true;
|
|
17
|
+
constructor(stage, message, options = {}) {
|
|
18
|
+
super(message, options);
|
|
19
|
+
this.stage = stage;
|
|
20
|
+
this.name = "TerminalInteractionDispatchReservedError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A durable response reservation exists, but the bridge proved that no
|
|
25
|
+
* terminal text or key delivery was attempted. The caller must discard the
|
|
26
|
+
* one-shot offer and obtain a fresh status projection before trying again.
|
|
27
|
+
*/
|
|
28
|
+
export class TerminalInteractionInputNotStartedError extends Error {
|
|
29
|
+
code = "AKK_TERMINAL_INTERACTION_INPUT_NOT_STARTED";
|
|
30
|
+
stage = "input_not_started";
|
|
31
|
+
doNotRetry = true;
|
|
32
|
+
requiresFreshOffer = true;
|
|
33
|
+
constructor(message, options = {}) {
|
|
34
|
+
super(message, options);
|
|
35
|
+
this.name = "TerminalInteractionInputNotStartedError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Executes only a closed questionnaire action plan. Store mutation, terminal
|
|
40
|
+
* locking, and the caller's at-most-once ledger remain outside this service.
|
|
41
|
+
*/
|
|
42
|
+
export class TerminalInteractionResponseBridge {
|
|
43
|
+
terminalProvider;
|
|
44
|
+
runtime;
|
|
45
|
+
constructor(terminalProvider, runtime) {
|
|
46
|
+
this.terminalProvider = terminalProvider;
|
|
47
|
+
this.runtime = runtime;
|
|
48
|
+
}
|
|
49
|
+
async respond(agent, terminalControl, response, options) {
|
|
50
|
+
const runtime = {
|
|
51
|
+
...options.runtime,
|
|
52
|
+
agentVersion: options.agentVersion
|
|
53
|
+
};
|
|
54
|
+
const optionReason = terminalInteractionOptionPreflightReason(options, runtime);
|
|
55
|
+
if (optionReason) {
|
|
56
|
+
return blockedTerminalInteractionResponse(response, optionReason);
|
|
57
|
+
}
|
|
58
|
+
const first = await this.captureOffer(agent, terminalControl, runtime, options.scrollbackLines).catch((error) => error);
|
|
59
|
+
if (first instanceof Error) {
|
|
60
|
+
return blockedTerminalInteractionResponse(response, first.message);
|
|
61
|
+
}
|
|
62
|
+
const firstReason = terminalInteractionOfferPreflightReason(first.offer, options, this.runtime.now());
|
|
63
|
+
if (firstReason || !first.offer) {
|
|
64
|
+
return blockedTerminalInteractionResponse(response, firstReason ?? "native questionnaire has no safe interaction offer", first.offer);
|
|
65
|
+
}
|
|
66
|
+
const validatedResponse = normalizeTerminalInteractionResponseV2(response, first.offer.projection, {
|
|
67
|
+
now: this.runtime.now(),
|
|
68
|
+
// The capture immediately above is the authoritative freshness proof.
|
|
69
|
+
// A wall-clock bucket boundary must not override exact live terminal
|
|
70
|
+
// evidence before any input has been sent.
|
|
71
|
+
allowExpiredForLiveRecapture: true
|
|
72
|
+
});
|
|
73
|
+
const planReason = terminalInteractionPlanPreflightReason(validatedResponse, first.offer.actionPlan);
|
|
74
|
+
if (planReason) {
|
|
75
|
+
return blockedTerminalInteractionResponse(validatedResponse, planReason, first.offer);
|
|
76
|
+
}
|
|
77
|
+
const capabilityReason = terminalInteractionCapabilityReason(this.terminalProvider, first.terminalControl, first.offer.actionPlan);
|
|
78
|
+
if (capabilityReason) {
|
|
79
|
+
return blockedTerminalInteractionResponse(validatedResponse, capabilityReason, first.offer);
|
|
80
|
+
}
|
|
81
|
+
const authorization = await authorizeTerminalInteraction(options.authorize, interactionHookContext(agent, first.terminalControl, first.offer, validatedResponse, runtime));
|
|
82
|
+
if (!authorization.approved) {
|
|
83
|
+
return blockedTerminalInteractionResponse(validatedResponse, authorization.reason ??
|
|
84
|
+
"terminal interaction response was not authorized", first.offer);
|
|
85
|
+
}
|
|
86
|
+
const afterAuthorization = await this.captureOffer(agent, first.terminalControl, runtime, options.scrollbackLines).catch((error) => error);
|
|
87
|
+
if (afterAuthorization instanceof Error) {
|
|
88
|
+
return blockedTerminalInteractionResponse(validatedResponse, afterAuthorization.message, first.offer);
|
|
89
|
+
}
|
|
90
|
+
const afterAuthorizationReason = terminalInteractionOfferPreflightReason(afterAuthorization.offer, options, this.runtime.now());
|
|
91
|
+
if (afterAuthorizationReason) {
|
|
92
|
+
return blockedTerminalInteractionResponse(validatedResponse, afterAuthorizationReason, first.offer);
|
|
93
|
+
}
|
|
94
|
+
if (!sameTerminalInteractionOffer(first, afterAuthorization, {
|
|
95
|
+
// expires_at is generated from AKK wall-clock freshness buckets, not
|
|
96
|
+
// from the native prompt. All semantic projection and action-plan fields
|
|
97
|
+
// still have to match exactly.
|
|
98
|
+
ignoreExpiresAt: true
|
|
99
|
+
})) {
|
|
100
|
+
return blockedTerminalInteractionResponse(validatedResponse, "native questionnaire changed after authorization", first.offer);
|
|
101
|
+
}
|
|
102
|
+
await reserveTerminalInteractionDispatch(options.beforeDispatch, interactionHookContext(agent, afterAuthorization.terminalControl, afterAuthorization.offer, validatedResponse, runtime));
|
|
103
|
+
const finalCapture = await this.captureOffer(agent, afterAuthorization.terminalControl, runtime, options.scrollbackLines).catch((error) => {
|
|
104
|
+
if (options.beforeDispatch) {
|
|
105
|
+
throw terminalInteractionInputNotStartedError(error, "cannot recapture native questionnaire after dispatch reservation");
|
|
106
|
+
}
|
|
107
|
+
return error;
|
|
108
|
+
});
|
|
109
|
+
if (finalCapture instanceof Error) {
|
|
110
|
+
return blockedTerminalInteractionResponse(validatedResponse, finalCapture.message, first.offer);
|
|
111
|
+
}
|
|
112
|
+
if (!sameTerminalInteractionOffer(afterAuthorization, finalCapture, {
|
|
113
|
+
// The projection expiry is bucketed and may roll over during this final,
|
|
114
|
+
// bounded recapture even though the questionnaire is exact. Prompt,
|
|
115
|
+
// action plan, terminal identity, and owner remain exact-match fences.
|
|
116
|
+
ignoreExpiresAt: true
|
|
117
|
+
})) {
|
|
118
|
+
if (options.beforeDispatch) {
|
|
119
|
+
throw new TerminalInteractionInputNotStartedError("native questionnaire changed after dispatch reservation");
|
|
120
|
+
}
|
|
121
|
+
return blockedTerminalInteractionResponse(validatedResponse, "native questionnaire changed before dispatch", first.offer);
|
|
122
|
+
}
|
|
123
|
+
const verified = await this.runtime.verifyIdentity(agent, finalCapture.terminalControl, runtime).catch((error) => {
|
|
124
|
+
if (options.beforeDispatch) {
|
|
125
|
+
throw terminalInteractionInputNotStartedError(error, "terminal identity could not be verified immediately before interaction dispatch");
|
|
126
|
+
}
|
|
127
|
+
throw terminalInteractionReservedError("key_uncertain", error, "terminal identity could not be verified immediately before interaction dispatch");
|
|
128
|
+
});
|
|
129
|
+
if (!sameTerminalControlIncarnation(finalCapture.terminalControl, verified)) {
|
|
130
|
+
if (options.beforeDispatch) {
|
|
131
|
+
throw new TerminalInteractionInputNotStartedError("terminal identity changed after the final questionnaire capture");
|
|
132
|
+
}
|
|
133
|
+
throw new TerminalInteractionDispatchReservedError("key_uncertain", "terminal identity changed after the final questionnaire capture");
|
|
134
|
+
}
|
|
135
|
+
const answer = validatedResponse.answers[0];
|
|
136
|
+
const outcome = await dispatchTerminalInteractionAnswer({
|
|
137
|
+
agent,
|
|
138
|
+
provider: this.terminalProvider,
|
|
139
|
+
terminalControl: verified,
|
|
140
|
+
actionPlan: finalCapture.offer.actionPlan,
|
|
141
|
+
answer,
|
|
142
|
+
sleep: this.runtime.sleep,
|
|
143
|
+
reverifyTerminalIdentity: async (currentControl) => {
|
|
144
|
+
const reverified = await this.runtime.verifyIdentity(agent, currentControl, runtime);
|
|
145
|
+
if (!sameTerminalControlIncarnation(currentControl, reverified)) {
|
|
146
|
+
throw new Error("terminal identity changed between interaction text and Enter");
|
|
147
|
+
}
|
|
148
|
+
return reverified;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
responded: true,
|
|
153
|
+
blocked: false,
|
|
154
|
+
interactionId: validatedResponse.interaction_id,
|
|
155
|
+
questionId: answer.question_id,
|
|
156
|
+
responseKind: answer.response_kind,
|
|
157
|
+
outcome
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async captureOffer(agent, terminalControl, runtime, scrollbackLines) {
|
|
161
|
+
const captured = await this.runtime.captureInspection(agent, terminalControl, runtime, scrollbackLines);
|
|
162
|
+
return {
|
|
163
|
+
terminalControl: captured.terminalControl,
|
|
164
|
+
inspection: captured.inspection,
|
|
165
|
+
offer: captureTerminalInteractionRuntimeOffer({
|
|
166
|
+
agent,
|
|
167
|
+
terminalControl: captured.terminalControl,
|
|
168
|
+
screen: captured.screen,
|
|
169
|
+
runtime,
|
|
170
|
+
now: this.runtime.now(),
|
|
171
|
+
approvalBlocked: captured.inspection.approval.blocked
|
|
172
|
+
})
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function terminalInteractionTurnId(runtime) {
|
|
177
|
+
// Questionnaire mutation is managed-Turn-only. A raw terminal's
|
|
178
|
+
// conversationId is a discovery label, not durable response authority.
|
|
179
|
+
const candidate = runtime?.turnId;
|
|
180
|
+
return typeof candidate === "string" &&
|
|
181
|
+
TERMINAL_INTERACTION_IDENTIFIER_PATTERN.test(candidate)
|
|
182
|
+
? candidate
|
|
183
|
+
: undefined;
|
|
184
|
+
}
|
|
185
|
+
function terminalInteractionSubject(runtime) {
|
|
186
|
+
if (runtime?.interactionSubject) {
|
|
187
|
+
return runtime.interactionSubject;
|
|
188
|
+
}
|
|
189
|
+
const turnId = terminalInteractionTurnId(runtime);
|
|
190
|
+
const messageId = runtime?.messageId;
|
|
191
|
+
return turnId && typeof messageId === "string" &&
|
|
192
|
+
TERMINAL_INTERACTION_IDENTIFIER_PATTERN.test(messageId)
|
|
193
|
+
? { kind: "managed_turn", turn_id: turnId, message_id: messageId }
|
|
194
|
+
: undefined;
|
|
195
|
+
}
|
|
196
|
+
function terminalInteractionExpiry(now) {
|
|
197
|
+
const nowMs = now.getTime();
|
|
198
|
+
if (!Number.isFinite(nowMs)) {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
const windowStart = Math.floor(nowMs / TERMINAL_INTERACTION_TTL_MS) *
|
|
202
|
+
TERMINAL_INTERACTION_TTL_MS;
|
|
203
|
+
return new Date(windowStart + TERMINAL_INTERACTION_TTL_MS).toISOString();
|
|
204
|
+
}
|
|
205
|
+
function terminalInteractionCanonicalIdentity(terminalControl) {
|
|
206
|
+
if (!hasCanonicalTerminalEndpoint(terminalControl)) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
const terminal = terminalEndpointFromControlRef(terminalControl);
|
|
210
|
+
if (!Number.isInteger(terminal.processAnchorPid) ||
|
|
211
|
+
Number(terminal.processAnchorPid) <= 0) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
// Surface identity is shared by independent observers. Keep physical
|
|
215
|
+
// terminal identity separate from runtime-native identity so an optional
|
|
216
|
+
// observer-only fence (for example processStartedAt) cannot split one live
|
|
217
|
+
// questionnaire into different Monitor and Watch surfaces. Dispatch still
|
|
218
|
+
// revalidates the complete runtime immediately before any terminal input.
|
|
219
|
+
return {
|
|
220
|
+
terminal_identity: terminalEndpointIdentityKey(terminal),
|
|
221
|
+
terminal_process_anchor_pid: terminal.processAnchorPid
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function terminalInteractionNativeTaskIdentity(runtime) {
|
|
225
|
+
// Include only native-task fields that both managed Turn and exact Watch
|
|
226
|
+
// observations can derive from their durable anchors. Optional runtime
|
|
227
|
+
// verification fields remain on `runtime`; they are identity fences, not
|
|
228
|
+
// cross-observer surface identity.
|
|
229
|
+
return {
|
|
230
|
+
agent_pid: runtime.pid,
|
|
231
|
+
native_session_id: runtime.nativeSessionId,
|
|
232
|
+
native_process_uuid: runtime.nativeProcessUuid,
|
|
233
|
+
native_process_birth: runtime.nativeProcessBirth,
|
|
234
|
+
native_rollout: runtime.nativeRollout,
|
|
235
|
+
expected_native_session_id: runtime.expectedNativeSessionId,
|
|
236
|
+
expected_empty_native_session: runtime.expectedEmptyNativeSession === true
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
export function captureTerminalInteractionRuntimeOffer(input) {
|
|
240
|
+
const subject = terminalInteractionSubject(input.runtime);
|
|
241
|
+
const agentVersion = input.runtime?.agentVersion;
|
|
242
|
+
const expiry = terminalInteractionExpiry(input.now);
|
|
243
|
+
const canonicalIdentity = input.runtime
|
|
244
|
+
? terminalInteractionCanonicalIdentity(input.terminalControl) ??
|
|
245
|
+
terminalInteractionTrustedWatchIdentity(input.terminalControl, input.runtime, input.trustedTerminalEvidence)
|
|
246
|
+
: undefined;
|
|
247
|
+
if (!subject ||
|
|
248
|
+
typeof agentVersion !== "string" ||
|
|
249
|
+
agentVersion.length === 0 ||
|
|
250
|
+
!expiry ||
|
|
251
|
+
!canonicalIdentity ||
|
|
252
|
+
input.approvalBlocked === true) {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
if (exactCurrentModelControlSurface(input.agent, agentVersion, input.screen)) {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
const coreOffer = captureTerminalInteraction({
|
|
259
|
+
subject,
|
|
260
|
+
agent: input.agent,
|
|
261
|
+
agentVersion,
|
|
262
|
+
canonicalTerminalIdentity: canonicalIdentity,
|
|
263
|
+
nativeTaskIdentity: terminalInteractionNativeTaskIdentity(input.runtime),
|
|
264
|
+
screen: input.screen,
|
|
265
|
+
now: input.now,
|
|
266
|
+
expiresAt: expiry,
|
|
267
|
+
responseUncertain: input.runtime?.interactionDispatchState === "reserved" ||
|
|
268
|
+
input.runtime?.interactionDispatchState === "uncertain",
|
|
269
|
+
responseAuthority: input.runtime?.interactionResponseAuthority ?? "executable"
|
|
270
|
+
});
|
|
271
|
+
if (!coreOffer) {
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
projection: coreOffer.projection,
|
|
276
|
+
promptFingerprint: coreOffer.promptFingerprint,
|
|
277
|
+
surfaceId: coreOffer.surfaceId,
|
|
278
|
+
actionPlan: coreOffer.actionPlan,
|
|
279
|
+
nativeInspection: coreOffer.nativeInspection
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
export function exactCurrentModelControlSurface(agent, agentVersion, screen) {
|
|
283
|
+
if (!agentVersion)
|
|
284
|
+
return false;
|
|
285
|
+
try {
|
|
286
|
+
const capabilities = probeTerminalModelControl(agent, agentVersion);
|
|
287
|
+
if (capabilities.status !== "supported")
|
|
288
|
+
return false;
|
|
289
|
+
const observation = observeTerminalModelControl(planTerminalModelControl(capabilities), screen);
|
|
290
|
+
return observation.state !== "none" &&
|
|
291
|
+
observation.state !== "ambiguous";
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function terminalInteractionTrustedWatchIdentity(terminalControl, runtime, evidence) {
|
|
298
|
+
if (runtime.interactionSubject?.kind !== "terminal_watch" ||
|
|
299
|
+
!evidence ||
|
|
300
|
+
!terminalControlEvidenceMatches(evidence, terminalControl)) {
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
const identity = terminalEndpointIdentityFromEvidence(evidence);
|
|
304
|
+
if (!identity || !Number.isSafeInteger(evidence.process_anchor_pid) ||
|
|
305
|
+
Number(evidence.process_anchor_pid) <= 0) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
terminal_identity: terminalEndpointIdentityKey(identity),
|
|
310
|
+
terminal_process_anchor_pid: evidence.process_anchor_pid
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function terminalInteractionOptionPreflightReason(options, runtime) {
|
|
314
|
+
if (typeof options.agentVersion !== "string" ||
|
|
315
|
+
!/^\d+\.\d+\.\d+(?:[-+][A-Za-z0-9.-]+)?$/u.test(options.agentVersion)) {
|
|
316
|
+
return "an exact semantic agent version is required";
|
|
317
|
+
}
|
|
318
|
+
if (options.runtime?.agentVersion !== undefined &&
|
|
319
|
+
options.runtime.agentVersion !== options.agentVersion) {
|
|
320
|
+
return "runtime agent version does not match the requested interaction profile";
|
|
321
|
+
}
|
|
322
|
+
if (!terminalInteractionSubject(runtime)) {
|
|
323
|
+
return "a protocol-safe exact interaction subject is required";
|
|
324
|
+
}
|
|
325
|
+
if (!TERMINAL_INTERACTION_FINGERPRINT_PATTERN.test(options.expectedFingerprint)) {
|
|
326
|
+
return "a valid interaction prompt fingerprint is required";
|
|
327
|
+
}
|
|
328
|
+
if (!Number.isFinite(Date.parse(options.expectedExpiresAt))) {
|
|
329
|
+
return "a valid interaction expiry is required";
|
|
330
|
+
}
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
function terminalInteractionOfferPreflightReason(offer, options, now) {
|
|
334
|
+
if (!offer) {
|
|
335
|
+
return "native questionnaire has no identity-fenced interaction offer";
|
|
336
|
+
}
|
|
337
|
+
if (offer.projection.state !== "pending" ||
|
|
338
|
+
!offer.projection.capabilities.respond ||
|
|
339
|
+
offer.actionPlan.kind === "manual_only") {
|
|
340
|
+
return `native questionnaire requires manual response: ${offer.nativeInspection.status === "manual_required"
|
|
341
|
+
? offer.nativeInspection.reason
|
|
342
|
+
: "unsupported action plan"}`;
|
|
343
|
+
}
|
|
344
|
+
if (offer.promptFingerprint !== options.expectedFingerprint) {
|
|
345
|
+
return "native questionnaire fingerprint changed before execution";
|
|
346
|
+
}
|
|
347
|
+
if (offer.projection.expires_at !== options.expectedExpiresAt &&
|
|
348
|
+
Date.parse(options.expectedExpiresAt) > now.getTime()) {
|
|
349
|
+
return "native questionnaire expiry changed before execution";
|
|
350
|
+
}
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
function terminalInteractionCapabilityReason(provider, terminalControl, plan) {
|
|
354
|
+
const requiresText = plan.kind === "free_text";
|
|
355
|
+
const missing = [
|
|
356
|
+
!terminalControl.capabilities.includes("screen_status")
|
|
357
|
+
? "terminal:screen_status"
|
|
358
|
+
: undefined,
|
|
359
|
+
!terminalControl.capabilities.includes("send_keys")
|
|
360
|
+
? "terminal:send_keys"
|
|
361
|
+
: undefined,
|
|
362
|
+
!provider.providerCapabilities.includes("stable_resource_resolution")
|
|
363
|
+
? "provider:stable_resource_resolution"
|
|
364
|
+
: undefined,
|
|
365
|
+
!provider.providerCapabilities.includes("screen_capture")
|
|
366
|
+
? "provider:screen_capture"
|
|
367
|
+
: undefined,
|
|
368
|
+
!provider.providerCapabilities.includes("key_delivery")
|
|
369
|
+
? "provider:key_delivery"
|
|
370
|
+
: undefined,
|
|
371
|
+
requiresText && !provider.providerCapabilities.includes("text_delivery")
|
|
372
|
+
? "provider:text_delivery"
|
|
373
|
+
: undefined
|
|
374
|
+
].filter((value) => value !== undefined);
|
|
375
|
+
return missing.length > 0
|
|
376
|
+
? `terminal interaction capability preflight failed: ${missing.join(", ")}`
|
|
377
|
+
: undefined;
|
|
378
|
+
}
|
|
379
|
+
function terminalInteractionPlanPreflightReason(response, plan) {
|
|
380
|
+
const answer = response.answers[0];
|
|
381
|
+
if (plan.kind !== "free_text" || answer?.response_kind !== "free_text") {
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
const textStage = plan.stages[0];
|
|
385
|
+
if (textStage?.kind !== "answer_text" ||
|
|
386
|
+
!Number.isSafeInteger(textStage.max_characters) ||
|
|
387
|
+
textStage.max_characters < 1) {
|
|
388
|
+
return "native free-text interaction has no verified input limit";
|
|
389
|
+
}
|
|
390
|
+
return answer.text.length <= textStage.max_characters
|
|
391
|
+
? undefined
|
|
392
|
+
: `free-text answer exceeds the verified native limit of ${textStage.max_characters} characters`;
|
|
393
|
+
}
|
|
394
|
+
function blockedTerminalInteractionResponse(response, reason, offer) {
|
|
395
|
+
const answer = Array.isArray(response.answers) ? response.answers[0] : undefined;
|
|
396
|
+
return {
|
|
397
|
+
responded: false,
|
|
398
|
+
blocked: true,
|
|
399
|
+
reason,
|
|
400
|
+
interactionId: response.interaction_id,
|
|
401
|
+
questionId: answer?.question_id ?? offer?.projection.questions[0]?.question_id,
|
|
402
|
+
responseKind: answer?.response_kind
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function interactionHookContext(agent, terminalControl, offer, response, runtime) {
|
|
406
|
+
return {
|
|
407
|
+
agent,
|
|
408
|
+
terminalControl,
|
|
409
|
+
fingerprint: offer.promptFingerprint,
|
|
410
|
+
projection: offer.projection,
|
|
411
|
+
response,
|
|
412
|
+
runtime
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
async function authorizeTerminalInteraction(authorize, context) {
|
|
416
|
+
return authorize ? authorize(context) : { approved: true };
|
|
417
|
+
}
|
|
418
|
+
async function reserveTerminalInteractionDispatch(beforeDispatch, context) {
|
|
419
|
+
if (!beforeDispatch) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
try {
|
|
423
|
+
await beforeDispatch(context);
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
if (error instanceof TerminalInteractionInputNotStartedError) {
|
|
427
|
+
throw error;
|
|
428
|
+
}
|
|
429
|
+
throw terminalInteractionReservedError("reservation_uncertain", error, "terminal interaction dispatch reservation failed");
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
function sameTerminalInteractionOffer(left, right, options = {}) {
|
|
433
|
+
const leftProjection = options.ignoreExpiresAt && left.offer
|
|
434
|
+
? terminalInteractionProjectionWithoutExpiry(left.offer.projection)
|
|
435
|
+
: left.offer?.projection;
|
|
436
|
+
const rightProjection = options.ignoreExpiresAt && right.offer
|
|
437
|
+
? terminalInteractionProjectionWithoutExpiry(right.offer.projection)
|
|
438
|
+
: right.offer?.projection;
|
|
439
|
+
return Boolean(left.offer &&
|
|
440
|
+
right.offer &&
|
|
441
|
+
sameTerminalControlIncarnation(left.terminalControl, right.terminalControl) &&
|
|
442
|
+
left.offer.promptFingerprint === right.offer.promptFingerprint &&
|
|
443
|
+
JSON.stringify(leftProjection) === JSON.stringify(rightProjection) &&
|
|
444
|
+
JSON.stringify(left.offer.actionPlan) === JSON.stringify(right.offer.actionPlan));
|
|
445
|
+
}
|
|
446
|
+
function terminalInteractionProjectionWithoutExpiry(projection) {
|
|
447
|
+
const { expires_at: _expiresAt, ...semanticProjection } = projection;
|
|
448
|
+
return semanticProjection;
|
|
449
|
+
}
|
|
450
|
+
function terminalInteractionInputNotStartedError(error, message) {
|
|
451
|
+
if (error instanceof TerminalInteractionInputNotStartedError) {
|
|
452
|
+
return error;
|
|
453
|
+
}
|
|
454
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
455
|
+
return new TerminalInteractionInputNotStartedError(`${message}: ${detail}`, { cause: error });
|
|
456
|
+
}
|
|
457
|
+
function terminalInteractionReservedError(stage, error, message) {
|
|
458
|
+
if (error instanceof TerminalInteractionDispatchReservedError) {
|
|
459
|
+
return error;
|
|
460
|
+
}
|
|
461
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
462
|
+
return new TerminalInteractionDispatchReservedError(stage, `${message}: ${detail}`, { cause: error });
|
|
463
|
+
}
|
|
464
|
+
function terminalInteractionChoiceAction(agent, plan, answer) {
|
|
465
|
+
const choice = plan.choices.find((candidate) => candidate.option_id === answer.selected_option_ids[0]);
|
|
466
|
+
if (!choice) {
|
|
467
|
+
throw new TerminalInteractionInputNotStartedError("single-select interaction has no closed adapter action");
|
|
468
|
+
}
|
|
469
|
+
const keys = choice.stages.flatMap((stage) => stage.kind === "key" ? [stage.key] : []);
|
|
470
|
+
const directChoice = choice.outcome === "submit_or_advance" &&
|
|
471
|
+
choice.stages.length === 1 &&
|
|
472
|
+
keys.length === 1 &&
|
|
473
|
+
/^[1-5]$/u.test(keys[0]);
|
|
474
|
+
const directCustomTextChoice = agent === "claude" &&
|
|
475
|
+
choice.outcome === "open_custom_text" &&
|
|
476
|
+
choice.stages.length === 1 &&
|
|
477
|
+
keys.length === 1 &&
|
|
478
|
+
/^[1-5]$/u.test(keys[0]);
|
|
479
|
+
const navigatedCustomTextChoice = agent === "codex" &&
|
|
480
|
+
choice.outcome === "open_custom_text" &&
|
|
481
|
+
choice.stages.length >= 1 &&
|
|
482
|
+
choice.stages.length <= 4 &&
|
|
483
|
+
keys.length === choice.stages.length &&
|
|
484
|
+
keys.at(-1) === "C-m" &&
|
|
485
|
+
keys.slice(0, -1).every((key) => key === "Down");
|
|
486
|
+
if (!directChoice && !directCustomTextChoice && !navigatedCustomTextChoice) {
|
|
487
|
+
throw new TerminalInteractionInputNotStartedError("single-select interaction has no closed adapter action");
|
|
488
|
+
}
|
|
489
|
+
return {
|
|
490
|
+
keys,
|
|
491
|
+
outcome: choice.outcome === "open_custom_text"
|
|
492
|
+
? "custom_text_opened"
|
|
493
|
+
: "submitted_or_advanced"
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
function terminalInteractionConfirmKey(plan, answer) {
|
|
497
|
+
const stages = answer.confirm ? plan.confirm_stages : plan.cancel_stages;
|
|
498
|
+
const stage = stages[0];
|
|
499
|
+
if (stages.length !== 1 ||
|
|
500
|
+
stage?.kind !== "key" ||
|
|
501
|
+
!["C-m", "Escape", "1", "2"].includes(stage.key) ||
|
|
502
|
+
JSON.stringify(plan.confirm_stages) === JSON.stringify(plan.cancel_stages)) {
|
|
503
|
+
throw new TerminalInteractionInputNotStartedError("confirmation interaction has no closed adapter action");
|
|
504
|
+
}
|
|
505
|
+
return stage.key;
|
|
506
|
+
}
|
|
507
|
+
async function sendTerminalInteractionKeys(provider, terminalControl, keys) {
|
|
508
|
+
try {
|
|
509
|
+
await provider.sendKeys(provider.endpoint(terminalControl), keys);
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
throw terminalInteractionReservedError("key_uncertain", error, "terminal interaction key dispatch is uncertain");
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
async function dispatchTerminalInteractionFreeText(input) {
|
|
516
|
+
const [textStage, enterStage] = input.plan.stages;
|
|
517
|
+
if (input.plan.stages.length !== 2 ||
|
|
518
|
+
textStage?.kind !== "answer_text" ||
|
|
519
|
+
textStage.single_line !== true ||
|
|
520
|
+
textStage.max_characters < input.answer.text.length ||
|
|
521
|
+
enterStage?.kind !== "key" ||
|
|
522
|
+
enterStage.key !== "C-m") {
|
|
523
|
+
throw new TerminalInteractionInputNotStartedError("free-text interaction has no closed adapter action");
|
|
524
|
+
}
|
|
525
|
+
try {
|
|
526
|
+
await input.provider.sendText(input.provider.endpoint(input.terminalControl), input.answer.text);
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
throw terminalInteractionReservedError("text_uncertain", error, "terminal interaction text dispatch is uncertain");
|
|
530
|
+
}
|
|
531
|
+
if (input.agent === "codex") {
|
|
532
|
+
try {
|
|
533
|
+
await input.sleep(CODEX_PASTE_ENTER_SETTLE_MS);
|
|
534
|
+
}
|
|
535
|
+
catch (error) {
|
|
536
|
+
throw terminalInteractionReservedError("text_uncertain", error, "terminal interaction paste-settle outcome is uncertain");
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
let enterControl;
|
|
540
|
+
try {
|
|
541
|
+
enterControl = await input.reverifyTerminalIdentity(input.terminalControl);
|
|
542
|
+
if (!sameTerminalControlIncarnation(input.terminalControl, enterControl)) {
|
|
543
|
+
throw new Error("terminal identity changed between interaction text and Enter");
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
catch (error) {
|
|
547
|
+
throw terminalInteractionReservedError("text_uncertain", error, "terminal identity after interaction text dispatch is uncertain");
|
|
548
|
+
}
|
|
549
|
+
await sendTerminalInteractionKeys(input.provider, enterControl, [enterStage.key]);
|
|
550
|
+
return "submitted_or_advanced";
|
|
551
|
+
}
|
|
552
|
+
async function dispatchTerminalInteractionAnswer(input) {
|
|
553
|
+
if (input.actionPlan.kind === "single_select" &&
|
|
554
|
+
input.answer.response_kind === "single_select") {
|
|
555
|
+
const action = terminalInteractionChoiceAction(input.agent, input.actionPlan, input.answer);
|
|
556
|
+
await sendTerminalInteractionKeys(input.provider, input.terminalControl, action.keys);
|
|
557
|
+
return action.outcome;
|
|
558
|
+
}
|
|
559
|
+
if (input.actionPlan.kind === "confirm" &&
|
|
560
|
+
input.answer.response_kind === "confirm") {
|
|
561
|
+
const key = terminalInteractionConfirmKey(input.actionPlan, input.answer);
|
|
562
|
+
await sendTerminalInteractionKeys(input.provider, input.terminalControl, [key]);
|
|
563
|
+
return input.answer.confirm ? "confirmed" : "cancelled";
|
|
564
|
+
}
|
|
565
|
+
if (input.actionPlan.kind === "free_text" &&
|
|
566
|
+
input.answer.response_kind === "free_text") {
|
|
567
|
+
return dispatchTerminalInteractionFreeText({
|
|
568
|
+
agent: input.agent,
|
|
569
|
+
provider: input.provider,
|
|
570
|
+
terminalControl: input.terminalControl,
|
|
571
|
+
plan: input.actionPlan,
|
|
572
|
+
answer: input.answer,
|
|
573
|
+
reverifyTerminalIdentity: input.reverifyTerminalIdentity,
|
|
574
|
+
sleep: input.sleep
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
throw new TerminalInteractionInputNotStartedError("terminal interaction answer does not have a closed adapter action");
|
|
578
|
+
}
|
|
579
|
+
//# sourceMappingURL=terminal-interaction-response-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-interaction-response-bridge.js","sourceRoot":"","sources":["../../src/terminal-interaction-response-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type Awaitable<Value> = Value | Promise<Value>;
|
|
2
|
+
export type TerminalInteractionReservationFailureFence = "write_started" | "confirmed";
|
|
3
|
+
export interface TerminalInteractionDispatchHooks<Context, Authorization> {
|
|
4
|
+
authorize(context: Context): Awaitable<Authorization>;
|
|
5
|
+
beforeDispatch(context: Context): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface TerminalInteractionResponseTransaction<Context, Authorization, Reservation, Execution> {
|
|
8
|
+
/**
|
|
9
|
+
* Managed legacy state may have committed even when its synchronous save
|
|
10
|
+
* throws. Watch CAS writes only become authoritative after confirmation.
|
|
11
|
+
*/
|
|
12
|
+
readonly reservationFailureFence: TerminalInteractionReservationFailureFence;
|
|
13
|
+
dispatch(hooks: TerminalInteractionDispatchHooks<Context, Authorization>): Promise<Execution>;
|
|
14
|
+
authorize(context: Context): Awaitable<Authorization>;
|
|
15
|
+
createReservation(context: Context): Reservation;
|
|
16
|
+
reserve(context: Context, reservation: Reservation,
|
|
17
|
+
/** Mark the exact durable-commit boundary before outer lock cleanup. */
|
|
18
|
+
confirmReservation: () => void): Awaitable<void>;
|
|
19
|
+
release(reservation: Reservation, error: unknown): Awaitable<void>;
|
|
20
|
+
releaseFailure(reservation: Reservation, error: unknown, releaseError: unknown): Awaitable<unknown>;
|
|
21
|
+
markUncertain(reservation: Reservation, error: unknown): Awaitable<void>;
|
|
22
|
+
consume(reservation: Reservation, execution: Execution): Awaitable<void>;
|
|
23
|
+
responded(execution: Execution): boolean;
|
|
24
|
+
isInputNotStarted(error: unknown): boolean;
|
|
25
|
+
duplicateReservationError(): unknown;
|
|
26
|
+
inputNotStartedError(error: unknown): unknown;
|
|
27
|
+
missingReservationError(): unknown;
|
|
28
|
+
}
|
|
29
|
+
export type TerminalInteractionResponseTransactionResult<Reservation, Execution> = {
|
|
30
|
+
readonly state: "blocked";
|
|
31
|
+
readonly execution: Execution;
|
|
32
|
+
readonly reservation?: Reservation;
|
|
33
|
+
} | {
|
|
34
|
+
readonly state: "consumed";
|
|
35
|
+
readonly execution: Execution;
|
|
36
|
+
readonly reservation: Reservation;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Subject-neutral one-shot response transaction. The ports retain ownership
|
|
40
|
+
* of Store shape, locking, audit wording, and native bridge semantics; this
|
|
41
|
+
* kernel only keeps the reserve/release/uncertain/consume ordering identical.
|
|
42
|
+
*/
|
|
43
|
+
export declare function executeTerminalInteractionResponseTransaction<Context, Authorization, Reservation, Execution>(transaction: TerminalInteractionResponseTransaction<Context, Authorization, Reservation, Execution>): Promise<TerminalInteractionResponseTransactionResult<Reservation, Execution>>;
|
|
44
|
+
export {};
|