@scotthuang/agent-knock-knock 0.12.37 → 0.13.0
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 +32 -0
- package/README.md +3 -0
- package/dist/src/agent-session-provider.d.ts +5 -0
- package/dist/src/agent-session-provider.js +10 -1
- package/dist/src/agent-session-provider.js.map +1 -1
- package/dist/src/callback-outbox-service.d.ts +2 -0
- package/dist/src/callback-outbox-service.js +1 -1
- package/dist/src/callback-outbox-service.js.map +1 -1
- package/dist/src/callback-transport.d.ts +7 -0
- package/dist/src/callback-transport.js +1 -1
- package/dist/src/callback-transport.js.map +1 -1
- package/dist/src/cli-core.js +35 -32
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/codex-store-adapter.d.ts +1 -1
- package/dist/src/codex-store-adapter.js +35 -8
- package/dist/src/codex-store-adapter.js.map +1 -1
- package/dist/src/deferred-foreground-authority-cli-adapter.d.ts +20 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.js +216 -8
- package/dist/src/deferred-foreground-authority-cli-adapter.js.map +1 -1
- package/dist/src/host-adapter.d.ts +1 -1
- package/dist/src/host-adapter.js +1 -1
- package/dist/src/host-bridge-tools.js +2 -2
- package/dist/src/managed-turn-recovery-service.d.ts +8 -1
- package/dist/src/managed-turn-recovery-service.js +55 -13
- package/dist/src/managed-turn-recovery-service.js.map +1 -1
- package/dist/src/mutation-transaction.d.ts +1 -0
- package/dist/src/mutation-transaction.js +19 -15
- package/dist/src/mutation-transaction.js.map +1 -1
- package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +39 -3
- package/dist/src/native-thread-lifecycle-cli-adapter.js +307 -7
- package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
- package/dist/src/openclaw-plugin-callback-adapter.js +17 -7
- package/dist/src/openclaw-plugin-callback-adapter.js.map +1 -1
- package/dist/src/openclaw-plugin-command-adapter.js +297 -83
- package/dist/src/openclaw-plugin-command-adapter.js.map +1 -1
- package/dist/src/openclaw-plugin-schemas.d.ts +57 -0
- package/dist/src/openclaw-plugin-schemas.js +59 -1
- package/dist/src/openclaw-plugin-schemas.js.map +1 -1
- package/dist/src/openclaw-private-authority-offers.d.ts +17 -0
- package/dist/src/openclaw-private-authority-offers.js +75 -3
- package/dist/src/openclaw-private-authority-offers.js.map +1 -1
- package/dist/src/store.d.ts +1 -1
- package/dist/src/store.js +6 -4
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-acceptance-application-service.js +2 -2
- package/dist/src/terminal-acceptance-application-service.js.map +1 -1
- package/dist/src/terminal-acceptance-cli-adapter.d.ts +11 -1
- package/dist/src/terminal-acceptance-cli-adapter.js +290 -16
- package/dist/src/terminal-acceptance-cli-adapter.js.map +1 -1
- package/dist/src/terminal-action-projection.d.ts +1 -1
- package/dist/src/terminal-action-projection.js +6 -0
- package/dist/src/terminal-action-projection.js.map +1 -1
- package/dist/src/terminal-agent-adapter.d.ts +9 -0
- package/dist/src/terminal-agent-adapter.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +52 -8
- package/dist/src/terminal-agent-bridge.js +111 -94
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-authority-policy.js +3 -0
- package/dist/src/terminal-authority-policy.js.map +1 -1
- package/dist/src/terminal-binding-authority.d.ts +2 -0
- package/dist/src/terminal-binding-authority.js +8 -0
- package/dist/src/terminal-binding-authority.js.map +1 -1
- package/dist/src/terminal-command-cli-adapter.d.ts +17 -1
- package/dist/src/terminal-command-cli-adapter.js +784 -286
- package/dist/src/terminal-command-cli-adapter.js.map +1 -1
- package/dist/src/terminal-delegate-cli-adapter.js +21 -7
- package/dist/src/terminal-delegate-cli-adapter.js.map +1 -1
- package/dist/src/terminal-dispatch-application.d.ts +3 -1
- package/dist/src/terminal-dispatch-application.js +13 -5
- package/dist/src/terminal-dispatch-application.js.map +1 -1
- package/dist/src/terminal-dispatch-composition.d.ts +43 -0
- package/dist/src/terminal-dispatch-execution.d.ts +2 -2
- package/dist/src/terminal-dispatch-execution.js +53 -3
- package/dist/src/terminal-dispatch-execution.js.map +1 -1
- package/dist/src/terminal-dispatch-policy.d.ts +20 -0
- package/dist/src/terminal-dispatch-policy.js +33 -1
- package/dist/src/terminal-dispatch-policy.js.map +1 -1
- package/dist/src/terminal-dispatch-presenter.d.ts +45 -0
- package/dist/src/terminal-dispatch-presenter.js +220 -18
- package/dist/src/terminal-dispatch-presenter.js.map +1 -1
- package/dist/src/terminal-dispatch-receipt.d.ts +5 -1
- package/dist/src/terminal-dispatch-receipt.js +26 -3
- package/dist/src/terminal-dispatch-receipt.js.map +1 -1
- package/dist/src/terminal-identity-authority-cli-adapter.js +103 -4
- package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-authority.d.ts +48 -1
- package/dist/src/terminal-interaction-authority.js +30 -0
- package/dist/src/terminal-interaction-authority.js.map +1 -1
- package/dist/src/terminal-interaction-cli-adapter.js +9 -0
- package/dist/src/terminal-interaction-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-core.d.ts +104 -0
- package/dist/src/terminal-interaction-core.js +407 -0
- package/dist/src/terminal-interaction-core.js.map +1 -0
- package/dist/src/terminal-interaction-protocol.d.ts +89 -0
- package/dist/src/terminal-interaction-protocol.js +199 -0
- package/dist/src/terminal-interaction-protocol.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.d.ts +5 -0
- package/dist/src/terminal-list-cli-adapter.js +190 -40
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-renderer.js +60 -7
- package/dist/src/terminal-list-renderer.js.map +1 -1
- package/dist/src/terminal-maintenance-cli-adapter.js +14 -3
- package/dist/src/terminal-maintenance-cli-adapter.js.map +1 -1
- package/dist/src/terminal-monitor-application-service.d.ts +1 -0
- package/dist/src/terminal-monitor-application-service.js +72 -10
- package/dist/src/terminal-monitor-application-service.js.map +1 -1
- package/dist/src/terminal-monitor-cli-adapter.d.ts +3 -0
- package/dist/src/terminal-monitor-cli-adapter.js +24 -8
- package/dist/src/terminal-monitor-cli-adapter.js.map +1 -1
- package/dist/src/terminal-monitor-state-cli-adapter.js +15 -2
- package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
- package/dist/src/terminal-mutation-cli-runtime.d.ts +11 -1
- package/dist/src/terminal-mutation-cli-runtime.js +9 -4
- package/dist/src/terminal-mutation-cli-runtime.js.map +1 -1
- package/dist/src/terminal-status-cli-adapter.d.ts +1 -7
- package/dist/src/terminal-status-cli-adapter.js +29 -3
- package/dist/src/terminal-status-cli-adapter.js.map +1 -1
- package/dist/src/terminal-status-facts.d.ts +17 -1
- package/dist/src/terminal-status-facts.js +59 -0
- package/dist/src/terminal-status-facts.js.map +1 -1
- package/dist/src/terminal-submission-acceptance.d.ts +37 -2
- package/dist/src/terminal-submission-acceptance.js +633 -30
- package/dist/src/terminal-submission-acceptance.js.map +1 -1
- package/dist/src/terminal-submission-facts.d.ts +5 -0
- package/dist/src/terminal-submission-facts.js.map +1 -1
- package/dist/src/terminal-watch-callback-cli-adapter.d.ts +2 -1
- package/dist/src/terminal-watch-callback-cli-adapter.js +2 -1
- package/dist/src/terminal-watch-callback-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-cli-adapter.d.ts +6 -2
- package/dist/src/terminal-watch-cli-adapter.js +1051 -15
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-service.d.ts +15 -1
- package/dist/src/terminal-watch-service.js +169 -13
- package/dist/src/terminal-watch-service.js.map +1 -1
- package/dist/src/terminal-watch-store.d.ts +72 -3
- package/dist/src/terminal-watch-store.js +407 -27
- package/dist/src/terminal-watch-store.js.map +1 -1
- package/docs/host-bridge-profiles.md +2 -2
- package/docs/quickstart-herdr.md +5 -3
- package/docs/quickstart-tmux.md +7 -5
- package/openclaw.plugin.json +8 -0
- package/package.json +1 -1
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +15 -11
|
@@ -584,11 +584,13 @@ async function terminalControlledListEntry(session, activeSessions, options, bri
|
|
|
584
584
|
terminalState,
|
|
585
585
|
nativeIdentityObservation,
|
|
586
586
|
nativeAgentIdentity,
|
|
587
|
+
nativeIdentityAuthorityObservation: authorityNativeIdentityObservation,
|
|
588
|
+
codexOpenRootRolloutInventory,
|
|
587
589
|
nativeProcessUuid,
|
|
588
590
|
nativeProcessBirth
|
|
589
591
|
});
|
|
590
592
|
const terminalStatusSnapshot = effectiveTerminalState._terminal_status_snapshot
|
|
591
|
-
?
|
|
593
|
+
? terminalBridgeStatusWithProjection(effectiveTerminalState._terminal_status_snapshot, effectiveTerminalState)
|
|
592
594
|
: undefined;
|
|
593
595
|
const statusCardObservation = session.agent === "codex" &&
|
|
594
596
|
typeof effectiveTerminalState.screen_excerpt === "string"
|
|
@@ -685,6 +687,21 @@ async function terminalControlledListEntry(session, activeSessions, options, bri
|
|
|
685
687
|
error: error instanceof Error ? error.message : String(error)
|
|
686
688
|
});
|
|
687
689
|
}
|
|
690
|
+
const commands = terminalListCommands({
|
|
691
|
+
agent: session.agent,
|
|
692
|
+
terminalControl,
|
|
693
|
+
terminalState: effectiveTerminalState,
|
|
694
|
+
lifecycleCapability,
|
|
695
|
+
nativeInspectionCapability,
|
|
696
|
+
nativeAgentIdentity: authorityNativeAgentIdentity,
|
|
697
|
+
nativeProcessUuid,
|
|
698
|
+
nativeProcessBirth,
|
|
699
|
+
codexLifecycleIncarnationAvailable,
|
|
700
|
+
automatedInputComposerReady,
|
|
701
|
+
hasOrphanedDispatch: orphanedDispatch !== undefined,
|
|
702
|
+
terminalHasBlockingTurn,
|
|
703
|
+
terminalHasInteraction: terminalStatusSnapshot?.interaction_state !== undefined
|
|
704
|
+
});
|
|
688
705
|
const entry = {
|
|
689
706
|
id: bridge.terminalConversationId(session),
|
|
690
707
|
short_ref: sessionShortRef(bridge.terminalConversationId(session)),
|
|
@@ -724,6 +741,11 @@ async function terminalControlledListEntry(session, activeSessions, options, bri
|
|
|
724
741
|
approval_state: effectiveTerminalState.approval_state,
|
|
725
742
|
activity_state: effectiveTerminalState.activity_state,
|
|
726
743
|
activity_reason: effectiveTerminalState.activity_reason,
|
|
744
|
+
screen_state: effectiveTerminalState.screen_state,
|
|
745
|
+
screen_reason: effectiveTerminalState.screen_reason,
|
|
746
|
+
native_identity_state: effectiveTerminalState.native_identity_state,
|
|
747
|
+
durable_activity_state: effectiveTerminalState.durable_activity_state,
|
|
748
|
+
durable_activity_reason: effectiveTerminalState.durable_activity_reason,
|
|
727
749
|
// Internal exact-observation evidence. The public projection strips this
|
|
728
750
|
// object; raw terminal status reuses it so screen, approval, and activity
|
|
729
751
|
// all describe the same capture.
|
|
@@ -768,20 +790,7 @@ async function terminalControlledListEntry(session, activeSessions, options, bri
|
|
|
768
790
|
}
|
|
769
791
|
}
|
|
770
792
|
: {}),
|
|
771
|
-
commands
|
|
772
|
-
agent: session.agent,
|
|
773
|
-
terminalControl,
|
|
774
|
-
terminalState: effectiveTerminalState,
|
|
775
|
-
lifecycleCapability,
|
|
776
|
-
nativeInspectionCapability,
|
|
777
|
-
nativeAgentIdentity: authorityNativeAgentIdentity,
|
|
778
|
-
nativeProcessUuid,
|
|
779
|
-
nativeProcessBirth,
|
|
780
|
-
codexLifecycleIncarnationAvailable,
|
|
781
|
-
automatedInputComposerReady,
|
|
782
|
-
hasOrphanedDispatch: orphanedDispatch !== undefined,
|
|
783
|
-
terminalHasBlockingTurn
|
|
784
|
-
})
|
|
793
|
+
commands
|
|
785
794
|
};
|
|
786
795
|
const renderedActions = renderAvailableListActions(entry);
|
|
787
796
|
const terminalUserExplicitSendAuthority = decideTerminalUserExplicitSendAuthority({
|
|
@@ -817,17 +826,59 @@ async function terminalControlledListEntry(session, activeSessions, options, bri
|
|
|
817
826
|
: {})
|
|
818
827
|
}
|
|
819
828
|
: undefined;
|
|
829
|
+
const foregroundIdentificationActions = terminalUserExplicitSendAuthority.eligible &&
|
|
830
|
+
commands.identify_foreground === true
|
|
831
|
+
? {
|
|
832
|
+
identify_foreground: {
|
|
833
|
+
tool: "agent_knock_knock_identify_foreground",
|
|
834
|
+
arguments: {
|
|
835
|
+
terminal_id: entry.id,
|
|
836
|
+
expected_terminal_token: terminalUserExplicitSendAuthority.expectedTerminalToken
|
|
837
|
+
},
|
|
838
|
+
scope: "ephemeral_diagnostic_only",
|
|
839
|
+
grants_authority: false,
|
|
840
|
+
requires_user_intent: true
|
|
841
|
+
},
|
|
842
|
+
identify_and_send: {
|
|
843
|
+
tool: "agent_knock_knock_identify_and_send",
|
|
844
|
+
arguments: {
|
|
845
|
+
terminal_id: entry.id,
|
|
846
|
+
expected_terminal_token: terminalUserExplicitSendAuthority.expectedTerminalToken
|
|
847
|
+
},
|
|
848
|
+
missing_required: ["request"],
|
|
849
|
+
scope: "terminal_atomic_identify_and_send",
|
|
850
|
+
requires_user_intent: true
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
: {};
|
|
820
854
|
const { commands: _commands, ...publicEntry } = entry;
|
|
821
855
|
return {
|
|
822
856
|
...publicEntry,
|
|
823
857
|
...(terminalUserExplicitSendAction
|
|
824
858
|
? { _terminal_user_explicit_send_action: terminalUserExplicitSendAction }
|
|
825
859
|
: {}),
|
|
826
|
-
available_actions:
|
|
860
|
+
available_actions: {
|
|
861
|
+
...renderedActions,
|
|
862
|
+
...foregroundIdentificationActions
|
|
863
|
+
}
|
|
827
864
|
};
|
|
828
865
|
}
|
|
829
866
|
function terminalListCommands(input) {
|
|
830
|
-
const { agent, terminalControl, terminalState, lifecycleCapability, nativeInspectionCapability, nativeAgentIdentity, nativeProcessUuid, nativeProcessBirth, codexLifecycleIncarnationAvailable, automatedInputComposerReady, hasOrphanedDispatch, terminalHasBlockingTurn } = input;
|
|
867
|
+
const { agent, terminalControl, terminalState, lifecycleCapability, nativeInspectionCapability, nativeAgentIdentity, nativeProcessUuid, nativeProcessBirth, codexLifecycleIncarnationAvailable, automatedInputComposerReady, hasOrphanedDispatch, terminalHasBlockingTurn, terminalHasInteraction } = input;
|
|
868
|
+
const foregroundIdentificationEligible = agent === "codex" &&
|
|
869
|
+
nativeInspectionCapability.status === "supported" &&
|
|
870
|
+
nativeInspectionCapability.statusInspection === true &&
|
|
871
|
+
terminalState.screen_state === "idle" &&
|
|
872
|
+
terminalState.native_identity_state !== "resolved" &&
|
|
873
|
+
terminalState.approval_state.scanned === true &&
|
|
874
|
+
terminalState.approval_state.blocked !== true &&
|
|
875
|
+
automatedInputComposerReady &&
|
|
876
|
+
codexLifecycleIncarnationAvailable &&
|
|
877
|
+
terminalControl.capabilities.includes("send_keys") &&
|
|
878
|
+
terminalControl.capabilities.includes("screen_status") &&
|
|
879
|
+
!terminalHasInteraction &&
|
|
880
|
+
!hasOrphanedDispatch &&
|
|
881
|
+
!terminalHasBlockingTurn;
|
|
831
882
|
return {
|
|
832
883
|
send: !terminalHasBlockingTurn,
|
|
833
884
|
approve: terminalControl.capabilities.includes("terminal_approval") &&
|
|
@@ -854,31 +905,61 @@ function terminalListCommands(input) {
|
|
|
854
905
|
nativeAgentIdentity.processUuid)) &&
|
|
855
906
|
!hasOrphanedDispatch &&
|
|
856
907
|
!terminalHasBlockingTurn,
|
|
908
|
+
identify_foreground: foregroundIdentificationEligible,
|
|
909
|
+
identify_and_send: foregroundIdentificationEligible,
|
|
857
910
|
watch: terminalControl.capabilities.includes("screen_status") ||
|
|
858
911
|
Boolean(nativeAgentIdentity?.sessionId &&
|
|
859
912
|
(agent !== "codex" || nativeAgentIdentity.rollout))
|
|
860
913
|
};
|
|
861
914
|
}
|
|
862
915
|
function effectiveTerminalListState(input) {
|
|
863
|
-
const { session, terminalState, nativeIdentityObservation, nativeAgentIdentity, nativeProcessUuid, nativeProcessBirth } = input;
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
916
|
+
const { session, terminalState, nativeIdentityObservation, nativeAgentIdentity, nativeIdentityAuthorityObservation, codexOpenRootRolloutInventory, nativeProcessUuid, nativeProcessBirth } = input;
|
|
917
|
+
const nativeIdentityState = terminalNativeIdentityState({
|
|
918
|
+
observation: nativeIdentityAuthorityObservation,
|
|
919
|
+
codexOpenRootRolloutInventory
|
|
920
|
+
});
|
|
921
|
+
if (session.agent !== "codex") {
|
|
922
|
+
return terminalListStateWithStatusAxes({
|
|
923
|
+
terminalState,
|
|
924
|
+
legacyState: terminalState,
|
|
925
|
+
nativeIdentityState,
|
|
926
|
+
durableActivityState: "unknown",
|
|
927
|
+
durableActivityReason: `durable activity evidence is unavailable for ${session.agent} terminals`
|
|
928
|
+
});
|
|
869
929
|
}
|
|
930
|
+
const liveScreenStateWins = terminalState.activity_state === "working" ||
|
|
931
|
+
terminalState.activity_state === "awaiting_approval" ||
|
|
932
|
+
terminalState.approval_state.blocked === true;
|
|
870
933
|
if (nativeIdentityObservation.status === "verified_absent") {
|
|
871
|
-
return
|
|
934
|
+
return terminalListStateWithStatusAxes({
|
|
935
|
+
terminalState,
|
|
936
|
+
legacyState: terminalState,
|
|
937
|
+
nativeIdentityState,
|
|
938
|
+
durableActivityState: "unknown",
|
|
939
|
+
durableActivityReason: "durable Codex activity is unknown because no open native rollout was observed"
|
|
940
|
+
});
|
|
872
941
|
}
|
|
873
942
|
if (nativeIdentityObservation.status !== "resolved" ||
|
|
874
943
|
!nativeAgentIdentity?.rollout ||
|
|
875
944
|
!nativeAgentIdentity.sessionId ||
|
|
876
945
|
!nativeProcessUuid ||
|
|
877
946
|
!nativeProcessBirth) {
|
|
878
|
-
|
|
947
|
+
const reason = nativeIdentityObservation.status === "unavailable"
|
|
879
948
|
? nativeIdentityObservation.reason ??
|
|
880
949
|
"exact Codex identity observation failed"
|
|
881
|
-
:
|
|
950
|
+
: nativeIdentityState === "ambiguous"
|
|
951
|
+
? "the foreground Codex native identity is ambiguous"
|
|
952
|
+
: "exact Codex rollout/process identity is incomplete";
|
|
953
|
+
const legacyState = liveScreenStateWins
|
|
954
|
+
? terminalState
|
|
955
|
+
: terminalListStateWithUnavailableDurableActivity(terminalState, reason);
|
|
956
|
+
return terminalListStateWithStatusAxes({
|
|
957
|
+
terminalState,
|
|
958
|
+
legacyState,
|
|
959
|
+
nativeIdentityState,
|
|
960
|
+
durableActivityState: "unknown",
|
|
961
|
+
durableActivityReason: `durable Codex activity evidence is unavailable: ${reason}`
|
|
962
|
+
});
|
|
882
963
|
}
|
|
883
964
|
const currentIdentity = {
|
|
884
965
|
sessionId: nativeAgentIdentity.sessionId,
|
|
@@ -887,14 +968,31 @@ function effectiveTerminalListState(input) {
|
|
|
887
968
|
rollout: nativeAgentIdentity.rollout
|
|
888
969
|
};
|
|
889
970
|
try {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
971
|
+
const activeTask = Boolean(captureCodexHumanStartedActiveTaskAnchor({ currentIdentity }));
|
|
972
|
+
const activeTaskReason = "Codex rollout contains an exact unfinished human-started task";
|
|
973
|
+
const durableActivityState = nativeIdentityState === "resolved"
|
|
974
|
+
? activeTask ? "working" : "idle"
|
|
975
|
+
: "unknown";
|
|
976
|
+
const durableActivityReason = nativeIdentityState !== "resolved"
|
|
977
|
+
? `durable Codex activity evidence is unavailable because the ` +
|
|
978
|
+
`foreground native identity is ${nativeIdentityState}`
|
|
979
|
+
: activeTask
|
|
980
|
+
? activeTaskReason
|
|
981
|
+
: "exact Codex rollout contains no unfinished human-started task";
|
|
982
|
+
const legacyState = liveScreenStateWins || !activeTask
|
|
983
|
+
? terminalState
|
|
984
|
+
: {
|
|
985
|
+
...terminalState,
|
|
986
|
+
activity_state: "working",
|
|
987
|
+
activity_reason: activeTaskReason
|
|
988
|
+
};
|
|
989
|
+
return terminalListStateWithStatusAxes({
|
|
990
|
+
terminalState,
|
|
991
|
+
legacyState,
|
|
992
|
+
nativeIdentityState,
|
|
993
|
+
durableActivityState,
|
|
994
|
+
durableActivityReason
|
|
995
|
+
});
|
|
898
996
|
}
|
|
899
997
|
catch (error) {
|
|
900
998
|
const reason = error instanceof Error ? error.message : String(error);
|
|
@@ -903,8 +1001,40 @@ function effectiveTerminalListState(input) {
|
|
|
903
1001
|
pid: session.pid,
|
|
904
1002
|
reason
|
|
905
1003
|
});
|
|
906
|
-
|
|
1004
|
+
const legacyState = liveScreenStateWins
|
|
1005
|
+
? terminalState
|
|
1006
|
+
: terminalListStateWithUnavailableDurableActivity(terminalState, reason);
|
|
1007
|
+
return terminalListStateWithStatusAxes({
|
|
1008
|
+
terminalState,
|
|
1009
|
+
legacyState,
|
|
1010
|
+
nativeIdentityState,
|
|
1011
|
+
durableActivityState: "unknown",
|
|
1012
|
+
durableActivityReason: `durable Codex activity evidence is unavailable: ${reason}`
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
function terminalNativeIdentityState(input) {
|
|
1017
|
+
if (input.observation.status === "resolved") {
|
|
1018
|
+
return "resolved";
|
|
1019
|
+
}
|
|
1020
|
+
if (input.codexOpenRootRolloutInventory?.status === "unbound") {
|
|
1021
|
+
return "ambiguous";
|
|
1022
|
+
}
|
|
1023
|
+
if (input.observation.status === "verified_absent" ||
|
|
1024
|
+
input.codexOpenRootRolloutInventory?.status === "verified_absent") {
|
|
1025
|
+
return "verified_absent";
|
|
907
1026
|
}
|
|
1027
|
+
return "unavailable";
|
|
1028
|
+
}
|
|
1029
|
+
function terminalListStateWithStatusAxes(input) {
|
|
1030
|
+
return {
|
|
1031
|
+
...input.legacyState,
|
|
1032
|
+
screen_state: input.terminalState.screen_state,
|
|
1033
|
+
screen_reason: input.terminalState.screen_reason,
|
|
1034
|
+
native_identity_state: input.nativeIdentityState,
|
|
1035
|
+
durable_activity_state: input.durableActivityState,
|
|
1036
|
+
durable_activity_reason: input.durableActivityReason
|
|
1037
|
+
};
|
|
908
1038
|
}
|
|
909
1039
|
function terminalListStateWithUnavailableDurableActivity(terminalState, reason) {
|
|
910
1040
|
return {
|
|
@@ -913,20 +1043,34 @@ function terminalListStateWithUnavailableDurableActivity(terminalState, reason)
|
|
|
913
1043
|
activity_reason: `durable Codex activity evidence is unavailable: ${reason}`
|
|
914
1044
|
};
|
|
915
1045
|
}
|
|
916
|
-
function
|
|
1046
|
+
function terminalBridgeStatusWithProjection(status, projection) {
|
|
917
1047
|
const descriptors = Object.getOwnPropertyDescriptors(status);
|
|
918
1048
|
descriptors.activity_state = {
|
|
919
1049
|
configurable: true,
|
|
920
1050
|
enumerable: true,
|
|
921
|
-
value:
|
|
1051
|
+
value: projection.activity_state,
|
|
922
1052
|
writable: true
|
|
923
1053
|
};
|
|
924
1054
|
descriptors.activity_reason = {
|
|
925
1055
|
configurable: true,
|
|
926
1056
|
enumerable: true,
|
|
927
|
-
value:
|
|
1057
|
+
value: projection.activity_reason,
|
|
928
1058
|
writable: true
|
|
929
1059
|
};
|
|
1060
|
+
for (const [field, value] of Object.entries({
|
|
1061
|
+
screen_state: projection.screen_state,
|
|
1062
|
+
screen_reason: projection.screen_reason,
|
|
1063
|
+
native_identity_state: projection.native_identity_state,
|
|
1064
|
+
durable_activity_state: projection.durable_activity_state,
|
|
1065
|
+
durable_activity_reason: projection.durable_activity_reason
|
|
1066
|
+
})) {
|
|
1067
|
+
descriptors[field] = {
|
|
1068
|
+
configurable: true,
|
|
1069
|
+
enumerable: true,
|
|
1070
|
+
value,
|
|
1071
|
+
writable: true
|
|
1072
|
+
};
|
|
1073
|
+
}
|
|
930
1074
|
return Object.create(Object.getPrototypeOf(status), descriptors);
|
|
931
1075
|
}
|
|
932
1076
|
async function observeTerminalNativeListIdentity(session, terminalControl, options, bridge) {
|
|
@@ -2584,7 +2728,9 @@ async function listStateForTerminal(agent, terminalControl, options, bridge = te
|
|
|
2584
2728
|
reason: "approval scan disabled"
|
|
2585
2729
|
},
|
|
2586
2730
|
activity_state: "unknown",
|
|
2587
|
-
activity_reason: "terminal screen scan disabled"
|
|
2731
|
+
activity_reason: "terminal screen scan disabled",
|
|
2732
|
+
screen_state: "unknown",
|
|
2733
|
+
screen_reason: "terminal screen scan disabled"
|
|
2588
2734
|
};
|
|
2589
2735
|
}
|
|
2590
2736
|
try {
|
|
@@ -2599,6 +2745,8 @@ async function listStateForTerminal(agent, terminalControl, options, bridge = te
|
|
|
2599
2745
|
},
|
|
2600
2746
|
activity_state: status.activity_state,
|
|
2601
2747
|
activity_reason: status.activity_reason,
|
|
2748
|
+
screen_state: status.screen_state ?? status.activity_state,
|
|
2749
|
+
screen_reason: status.screen_reason ?? status.activity_reason,
|
|
2602
2750
|
capability_limitation: status.capability_limitation,
|
|
2603
2751
|
_terminal_status_snapshot: status,
|
|
2604
2752
|
// Internal projection evidence; terminalControlledListEntry selects all
|
|
@@ -2615,7 +2763,9 @@ async function listStateForTerminal(agent, terminalControl, options, bridge = te
|
|
|
2615
2763
|
error: error instanceof Error ? error.message : String(error)
|
|
2616
2764
|
},
|
|
2617
2765
|
activity_state: "unknown",
|
|
2618
|
-
activity_reason: error instanceof Error ? error.message : String(error)
|
|
2766
|
+
activity_reason: error instanceof Error ? error.message : String(error),
|
|
2767
|
+
screen_state: "unknown",
|
|
2768
|
+
screen_reason: error instanceof Error ? error.message : String(error)
|
|
2619
2769
|
};
|
|
2620
2770
|
}
|
|
2621
2771
|
}
|