@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
|
@@ -12,7 +12,8 @@ import { isSessionSendBlockingStatus, turnIdForConversation } from "./protocol.j
|
|
|
12
12
|
import { listManagedSessions, loadNativeThreadTransition } from "./session-store.js";
|
|
13
13
|
import { isExactClaudeNativeInspectionIdleComposer, NativeInspectionSubmissionError } from "./terminal-agent-bridge.js";
|
|
14
14
|
import { terminalControlAliasMatches, selectRootTerminalProcesses, withCodexCompanionFences } from "./terminal-authority-policy.js";
|
|
15
|
-
import {
|
|
15
|
+
import { decideModelControlAvailability } from "./terminal-model-control-availability.js";
|
|
16
|
+
import { CODEX_MODEL_CONTROL_AGENT_VERSION, isTerminalModelControlPlanForAgent, isTerminalModelReasoningEffort, terminalModelControlPlanConforms, terminalModelControlProfileForPlan, terminalUserExplicitModelControlBindingToken } from "./terminal-model-control.js";
|
|
16
17
|
import { nonBlankString } from "./value-guards.js";
|
|
17
18
|
export const CODEX_FOREGROUND_IDENTIFICATION_TTL_MS = 30_000;
|
|
18
19
|
export const CODEX_FOREGROUND_IDENTIFICATION_SCROLLBACK_LINES = 240;
|
|
@@ -238,11 +239,9 @@ class NativeThreadLifecycleCliApplication {
|
|
|
238
239
|
return snapshot;
|
|
239
240
|
}
|
|
240
241
|
const adapter = this.agentAdapter(options, terminal.agent);
|
|
241
|
-
const capability = adapter
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
: undefined;
|
|
245
|
-
if (!plan || plan.behaviorProfile !== "codex-model-control-0.154.0") {
|
|
242
|
+
const { capability, plan, profile } = modelControlProfileObservation(adapter, snapshot.version);
|
|
243
|
+
if (!plan || profile?.agent !== "codex" ||
|
|
244
|
+
!profile.supportsZeroRolloutPhysicalAuthority) {
|
|
246
245
|
throw new Error(capability?.reason ?? "Codex has no verified physical model-control profile");
|
|
247
246
|
}
|
|
248
247
|
const bindingToken = this.physicalModelControlBindingToken(terminal, snapshot.version, plan.behaviorProfile);
|
|
@@ -917,22 +916,21 @@ class NativeThreadLifecycleCliApplication {
|
|
|
917
916
|
const terminal = await bridge.resolveStoredTerminal(initiallyResolved.agent, initiallyResolved.pid, initiallyResolved.terminalControl, { pid: initiallyResolved.pid });
|
|
918
917
|
this.assertSameInspectionTerminal(initiallyResolved, terminal, "while waiting for model-control repair ownership");
|
|
919
918
|
if (terminal.agent !== "codex") {
|
|
920
|
-
throw new Error("model-control residual repair currently supports only Codex
|
|
919
|
+
throw new Error("model-control residual repair currently supports only Codex " +
|
|
920
|
+
CODEX_MODEL_CONTROL_AGENT_VERSION);
|
|
921
921
|
}
|
|
922
922
|
const snapshot = await this.modelControlSnapshot(options, terminal);
|
|
923
923
|
const agentVersion = required(nonBlankString(snapshot.version), "model-control repair requires an exact running agent version");
|
|
924
924
|
const adapter = runtimeFacade.createAgentRegistry().require(terminal.agent);
|
|
925
|
-
const capability = adapter
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
: undefined;
|
|
929
|
-
if (!plan || plan.behaviorProfile !== "codex-model-control-0.154.0") {
|
|
925
|
+
const { capability, plan, profile } = modelControlProfileObservation(adapter, agentVersion);
|
|
926
|
+
if (!plan || profile?.agent !== "codex" ||
|
|
927
|
+
!profile.supportsResidualRepair) {
|
|
930
928
|
throw new Error(capability?.reason ??
|
|
931
929
|
"the running Codex version has no verified model-control repair profile");
|
|
932
930
|
}
|
|
933
931
|
await this.assertModelControlExclusive({ options, terminal, snapshot });
|
|
934
932
|
const runtime = this.inspectionRuntime(terminal, snapshot);
|
|
935
|
-
await this.assertModelControlRepairReady({
|
|
933
|
+
const status = await this.assertModelControlRepairReady({
|
|
936
934
|
options,
|
|
937
935
|
terminal,
|
|
938
936
|
snapshot,
|
|
@@ -943,13 +941,26 @@ class NativeThreadLifecycleCliApplication {
|
|
|
943
941
|
if (residual.state !== "recoverable") {
|
|
944
942
|
throw new Error(residual.reason);
|
|
945
943
|
}
|
|
946
|
-
const
|
|
944
|
+
const availability = this.modelControlAvailability({
|
|
945
|
+
options,
|
|
947
946
|
terminal,
|
|
947
|
+
snapshot,
|
|
948
948
|
agentVersion,
|
|
949
949
|
plan,
|
|
950
|
-
|
|
950
|
+
status,
|
|
951
|
+
surface: {
|
|
952
|
+
kind: "residual",
|
|
953
|
+
residualKind: residual.kind,
|
|
954
|
+
residualFingerprint: residual.fingerprint,
|
|
955
|
+
activityState: status.activity_state
|
|
956
|
+
}
|
|
951
957
|
});
|
|
952
|
-
|
|
958
|
+
const repairBindingToken = availability.availability === "residual_continuation"
|
|
959
|
+
? availability.repairBindingToken
|
|
960
|
+
: availability.availability === "repair_only"
|
|
961
|
+
? availability.expectedBindingToken
|
|
962
|
+
: undefined;
|
|
963
|
+
if (repairBindingToken !== expectedBindingToken) {
|
|
953
964
|
throw new Error("the exact model-control residual changed after it was listed; refresh AKK list");
|
|
954
965
|
}
|
|
955
966
|
return await operation({
|
|
@@ -983,10 +994,7 @@ class NativeThreadLifecycleCliApplication {
|
|
|
983
994
|
if (expectedNativeThreadId !== actualNativeThreadId) {
|
|
984
995
|
throw new Error("the current native Session changed during model-control repair");
|
|
985
996
|
}
|
|
986
|
-
const
|
|
987
|
-
const plan = capability?.status === "supported"
|
|
988
|
-
? context.adapter.planModelControl?.(capability)
|
|
989
|
-
: undefined;
|
|
997
|
+
const { plan } = modelControlProfileObservation(context.adapter, snapshot.version);
|
|
990
998
|
if (!plan || JSON.stringify(plan) !== JSON.stringify(context.plan)) {
|
|
991
999
|
throw new Error("the exact model-control repair profile changed during the operation");
|
|
992
1000
|
}
|
|
@@ -1028,35 +1036,43 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1028
1036
|
if (this.ports.state.orphanedForRecovery(input.terminal.terminalControl)) {
|
|
1029
1037
|
throw new Error("the terminal has unresolved input ownership during model-control repair");
|
|
1030
1038
|
}
|
|
1039
|
+
return status;
|
|
1031
1040
|
}
|
|
1032
|
-
|
|
1033
|
-
const
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
pid: input.terminal.pid,
|
|
1038
|
-
workspace: required(nonBlankString(input.terminal.terminalControl.currentPath), "model-control repair requires an exact terminal cwd"),
|
|
1039
|
-
processUuid: incarnation.processUuid,
|
|
1040
|
-
processBirth: incarnation.processBirth,
|
|
1041
|
-
agentVersion: input.agentVersion,
|
|
1042
|
-
behaviorProfile: input.plan.behaviorProfile,
|
|
1043
|
-
residualKind: input.residual.kind,
|
|
1044
|
-
residualFingerprint: input.residual.fingerprint
|
|
1045
|
-
});
|
|
1046
|
-
}
|
|
1047
|
-
modelControlResidualEntryBindingToken(input) {
|
|
1041
|
+
modelControlAvailability(input) {
|
|
1042
|
+
const nativeThreadId = input.snapshot.identity?.sessionId ??
|
|
1043
|
+
input.snapshot.session?.binding?.native_thread_id;
|
|
1044
|
+
const zeroRolloutVerified = input.terminal.agent === "codex" &&
|
|
1045
|
+
!input.snapshot.identity && !input.snapshot.session;
|
|
1048
1046
|
const incarnation = this.ports.identity.physicalProcessIncarnation(input.terminal.pid);
|
|
1049
|
-
|
|
1047
|
+
const storeDir = this.ports.state.storeDir(input.options);
|
|
1048
|
+
return decideModelControlAvailability({
|
|
1049
|
+
exactTerminalRow: true,
|
|
1050
1050
|
terminalId: input.terminal.conversationId,
|
|
1051
|
+
processState: "active",
|
|
1051
1052
|
terminalControl: input.terminal.terminalControl,
|
|
1053
|
+
agent: input.terminal.agent,
|
|
1052
1054
|
pid: input.terminal.pid,
|
|
1053
|
-
workspace: required(nonBlankString(input.terminal.terminalControl.currentPath), "model-control continuation requires an exact terminal cwd"),
|
|
1054
1055
|
processUuid: incarnation.processUuid,
|
|
1055
1056
|
processBirth: incarnation.processBirth,
|
|
1056
1057
|
agentVersion: input.agentVersion,
|
|
1057
1058
|
behaviorProfile: input.plan.behaviorProfile,
|
|
1058
|
-
|
|
1059
|
-
|
|
1059
|
+
nativeAuthority: isExactNativeThreadId(nativeThreadId)
|
|
1060
|
+
? {
|
|
1061
|
+
kind: "exact_session",
|
|
1062
|
+
ordinaryBindingToken: input.snapshot.bindingToken
|
|
1063
|
+
}
|
|
1064
|
+
: zeroRolloutVerified
|
|
1065
|
+
? { kind: "verified_zero_rollout" }
|
|
1066
|
+
: { kind: "unavailable" },
|
|
1067
|
+
modelControlSupported: true,
|
|
1068
|
+
approvalScanned: input.status.approval_state.scanned === true,
|
|
1069
|
+
approvalBlocked: input.status.approval_state.blocked === true,
|
|
1070
|
+
terminalHasInteraction: input.status.interaction_state !== undefined,
|
|
1071
|
+
terminalHasBlockingTurn: this.ports.state.terminalBlockingTurns(storeDir, input.terminal.terminalControl).length > 0,
|
|
1072
|
+
hasOrphanedDispatch: this.ports.state.dispatchOwnership(input.terminal.terminalControl)
|
|
1073
|
+
.state !== "none" ||
|
|
1074
|
+
this.ports.state.orphanedForRecovery(input.terminal.terminalControl) !== undefined,
|
|
1075
|
+
surface: input.surface
|
|
1060
1076
|
});
|
|
1061
1077
|
}
|
|
1062
1078
|
async withPreparedModelControl(options, expectedBindingToken, operation, behavior = {}) {
|
|
@@ -1079,14 +1095,13 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1079
1095
|
}
|
|
1080
1096
|
const agentVersion = required(nonBlankString(snapshot.version), "model control requires an exact running agent version");
|
|
1081
1097
|
const adapter = runtimeFacade.createAgentRegistry().require(terminal.agent);
|
|
1082
|
-
const capability = adapter
|
|
1098
|
+
const { capability, plan } = modelControlProfileObservation(adapter, agentVersion);
|
|
1083
1099
|
if (capability?.status !== "supported" ||
|
|
1084
1100
|
capability.modelSelection !== true ||
|
|
1085
1101
|
capability.reasoningEffortSelection !== true) {
|
|
1086
1102
|
throw new Error(capability?.reason ??
|
|
1087
1103
|
`${adapter.displayName} has no verified model-control profile`);
|
|
1088
1104
|
}
|
|
1089
|
-
const plan = adapter.planModelControl?.(capability);
|
|
1090
1105
|
if (!plan) {
|
|
1091
1106
|
throw new Error("the agent adapter did not produce a model-control plan");
|
|
1092
1107
|
}
|
|
@@ -1094,21 +1109,38 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1094
1109
|
let initialResidual;
|
|
1095
1110
|
let runtime;
|
|
1096
1111
|
if (hasOrdinaryAuthority) {
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
if (
|
|
1100
|
-
|
|
1101
|
-
|
|
1112
|
+
const ready = await this.observeInitialInspectionReady(options, terminal, snapshot, bridge);
|
|
1113
|
+
runtime = ready.runtime;
|
|
1114
|
+
if (ready.status.approval_state.scanned !== true ||
|
|
1115
|
+
ready.status.approval_state.blocked === true ||
|
|
1116
|
+
ready.status.interaction_state !== undefined) {
|
|
1102
1117
|
throw new Error("model control requires a freshly scanned terminal with no approval or questionnaire");
|
|
1103
1118
|
}
|
|
1119
|
+
const availability = this.modelControlAvailability({
|
|
1120
|
+
options,
|
|
1121
|
+
terminal,
|
|
1122
|
+
snapshot,
|
|
1123
|
+
agentVersion,
|
|
1124
|
+
plan,
|
|
1125
|
+
status: ready.status,
|
|
1126
|
+
surface: {
|
|
1127
|
+
kind: "idle_empty",
|
|
1128
|
+
screenState: ready.status.screen_state
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
1131
|
+
if (availability.availability !== "open_from_empty" ||
|
|
1132
|
+
availability.expectedBindingToken !== ordinaryBindingToken) {
|
|
1133
|
+
throw new Error("model control requires an exact verified idle pane with an empty composer and no blocking interaction");
|
|
1134
|
+
}
|
|
1104
1135
|
}
|
|
1105
1136
|
else {
|
|
1106
1137
|
if (terminal.agent !== "codex" ||
|
|
1107
|
-
plan
|
|
1138
|
+
terminalModelControlProfileForPlan(plan)
|
|
1139
|
+
?.supportsResidualContinuation !== true) {
|
|
1108
1140
|
throw new Error("terminal binding changed after it was listed; refresh AKK list and retry");
|
|
1109
1141
|
}
|
|
1110
1142
|
runtime = this.inspectionRuntime(terminal, snapshot);
|
|
1111
|
-
await this.assertModelControlRepairReady({
|
|
1143
|
+
const status = await this.assertModelControlRepairReady({
|
|
1112
1144
|
options,
|
|
1113
1145
|
terminal,
|
|
1114
1146
|
snapshot,
|
|
@@ -1119,13 +1151,22 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1119
1151
|
if (observed.state !== "recoverable") {
|
|
1120
1152
|
throw new Error(observed.reason);
|
|
1121
1153
|
}
|
|
1122
|
-
const
|
|
1154
|
+
const availability = this.modelControlAvailability({
|
|
1155
|
+
options,
|
|
1123
1156
|
terminal,
|
|
1157
|
+
snapshot,
|
|
1124
1158
|
agentVersion,
|
|
1125
1159
|
plan,
|
|
1126
|
-
|
|
1160
|
+
status,
|
|
1161
|
+
surface: {
|
|
1162
|
+
kind: "residual",
|
|
1163
|
+
residualKind: observed.kind,
|
|
1164
|
+
residualFingerprint: observed.fingerprint,
|
|
1165
|
+
activityState: status.activity_state
|
|
1166
|
+
}
|
|
1127
1167
|
});
|
|
1128
|
-
if (
|
|
1168
|
+
if (availability.availability !== "residual_continuation" ||
|
|
1169
|
+
availability.expectedBindingToken !== expectedBindingToken) {
|
|
1129
1170
|
throw new Error("the exact model-control residual changed after it was listed; refresh AKK list");
|
|
1130
1171
|
}
|
|
1131
1172
|
initialResidual = observed;
|
|
@@ -1143,9 +1184,9 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1143
1184
|
ordinaryBindingToken,
|
|
1144
1185
|
initialResidual,
|
|
1145
1186
|
...(terminal.agent === "codex" &&
|
|
1146
|
-
plan
|
|
1187
|
+
isTerminalModelControlPlanForAgent(plan, "codex")
|
|
1147
1188
|
? {
|
|
1148
|
-
loadCodexCatalog: async () => runtimeFacade.codexModelCatalogForRunningProcess(terminal.pid,
|
|
1189
|
+
loadCodexCatalog: async () => runtimeFacade.codexModelCatalogForRunningProcess(terminal.pid, CODEX_MODEL_CONTROL_AGENT_VERSION, terminal.terminalControl.currentPath)
|
|
1149
1190
|
}
|
|
1150
1191
|
: {})
|
|
1151
1192
|
});
|
|
@@ -1169,10 +1210,7 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1169
1210
|
if (expectedNativeThreadId !== actualNativeThreadId) {
|
|
1170
1211
|
throw new Error("the current native Session changed during model control; inspect the pane before retrying");
|
|
1171
1212
|
}
|
|
1172
|
-
const
|
|
1173
|
-
const plan = capability?.status === "supported"
|
|
1174
|
-
? context.adapter.planModelControl?.(capability)
|
|
1175
|
-
: undefined;
|
|
1213
|
+
const { plan } = modelControlProfileObservation(context.adapter, snapshot.version);
|
|
1176
1214
|
if (!plan || JSON.stringify(plan) !== JSON.stringify(context.plan)) {
|
|
1177
1215
|
throw new Error("the exact model-control profile changed during the operation");
|
|
1178
1216
|
}
|
|
@@ -1198,7 +1236,11 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1198
1236
|
}
|
|
1199
1237
|
catch (idleError) {
|
|
1200
1238
|
if (context.terminal.agent !== "claude" ||
|
|
1201
|
-
|
|
1239
|
+
!terminalModelControlPlanConforms({
|
|
1240
|
+
agent: context.terminal.agent,
|
|
1241
|
+
agentVersion: context.agentVersion,
|
|
1242
|
+
plan: context.plan
|
|
1243
|
+
}) ||
|
|
1202
1244
|
context.runtime.requireExactClaudeAgentRow !== true ||
|
|
1203
1245
|
context.runtime.exactClaudeAgentState !== "idle") {
|
|
1204
1246
|
throw idleError;
|
|
@@ -1374,6 +1416,9 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1374
1416
|
};
|
|
1375
1417
|
}
|
|
1376
1418
|
async assertInitialInspectionReady(options, terminal, snapshot, bridge) {
|
|
1419
|
+
return (await this.observeInitialInspectionReady(options, terminal, snapshot, bridge)).runtime;
|
|
1420
|
+
}
|
|
1421
|
+
async observeInitialInspectionReady(options, terminal, snapshot, bridge) {
|
|
1377
1422
|
this.assertInspectionAgentIdentity({
|
|
1378
1423
|
options, terminal, snapshot, stage: "before native status inspection"
|
|
1379
1424
|
});
|
|
@@ -1384,7 +1429,7 @@ class NativeThreadLifecycleCliApplication {
|
|
|
1384
1429
|
options, terminal, terminalStatus: status, session: snapshot.session
|
|
1385
1430
|
});
|
|
1386
1431
|
await this.assertInspectionComposerReady({ options, terminal });
|
|
1387
|
-
return runtime;
|
|
1432
|
+
return { runtime, status };
|
|
1388
1433
|
}
|
|
1389
1434
|
async submitInspection(context) {
|
|
1390
1435
|
try {
|
|
@@ -1669,6 +1714,17 @@ function nativeInspectionComposerEmpty(agent, screen) {
|
|
|
1669
1714
|
? codexComposerEmpty(screen)
|
|
1670
1715
|
: isExactClaudeNativeInspectionIdleComposer(String(screen ?? ""));
|
|
1671
1716
|
}
|
|
1717
|
+
function modelControlProfileObservation(adapter, agentVersion) {
|
|
1718
|
+
const capability = adapter.probeModelControl?.(agentVersion);
|
|
1719
|
+
const plan = capability?.status === "supported"
|
|
1720
|
+
? adapter.planModelControl?.(capability)
|
|
1721
|
+
: undefined;
|
|
1722
|
+
return {
|
|
1723
|
+
capability,
|
|
1724
|
+
plan,
|
|
1725
|
+
profile: plan ? terminalModelControlProfileForPlan(plan) : undefined
|
|
1726
|
+
};
|
|
1727
|
+
}
|
|
1672
1728
|
function required(value, message) {
|
|
1673
1729
|
if (value === undefined || value === "")
|
|
1674
1730
|
throw new Error(message);
|