@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.
Files changed (259) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +13 -5
  3. package/dist/src/callback-outbox-policy.js +27 -6
  4. package/dist/src/callback-outbox-policy.js.map +1 -1
  5. package/dist/src/callback-outbox-service.d.ts +4 -30
  6. package/dist/src/callback-outbox-service.js +21 -154
  7. package/dist/src/callback-outbox-service.js.map +1 -1
  8. package/dist/src/callback-outbox-settlement.js +13 -8
  9. package/dist/src/callback-outbox-settlement.js.map +1 -1
  10. package/dist/src/callback-route-service.d.ts +46 -0
  11. package/dist/src/callback-route-service.js +155 -0
  12. package/dist/src/callback-route-service.js.map +1 -0
  13. package/dist/src/codex-process-incarnation.d.ts +8 -0
  14. package/dist/src/codex-process-incarnation.js +36 -0
  15. package/dist/src/codex-process-incarnation.js.map +1 -0
  16. package/dist/src/deferred-foreground-conflict-policy.d.ts +22 -0
  17. package/dist/src/deferred-foreground-conflict-policy.js +52 -0
  18. package/dist/src/deferred-foreground-conflict-policy.js.map +1 -0
  19. package/dist/src/durable-notification-kernel.d.ts +94 -0
  20. package/dist/src/durable-notification-kernel.js +68 -0
  21. package/dist/src/durable-notification-kernel.js.map +1 -0
  22. package/dist/src/herdr-socket-transport.d.ts +43 -0
  23. package/dist/src/herdr-socket-transport.js +170 -0
  24. package/dist/src/herdr-socket-transport.js.map +1 -0
  25. package/dist/src/herdr-terminal-control-provider.d.ts +2 -45
  26. package/dist/src/herdr-terminal-control-provider.js +2 -172
  27. package/dist/src/herdr-terminal-control-provider.js.map +1 -1
  28. package/dist/src/host-adapter-capabilities.d.ts +35 -0
  29. package/dist/src/host-adapter-capabilities.js +146 -0
  30. package/dist/src/host-adapter-capabilities.js.map +1 -0
  31. package/dist/src/host-adapter.d.ts +9 -3
  32. package/dist/src/host-adapter.js +33 -9
  33. package/dist/src/host-adapter.js.map +1 -1
  34. package/dist/src/host-bridge-tools.d.ts +3 -4
  35. package/dist/src/host-bridge-tools.js +49 -92
  36. package/dist/src/host-bridge-tools.js.map +1 -1
  37. package/dist/src/host-bridge.js +5 -5
  38. package/dist/src/host-bridge.js.map +1 -1
  39. package/dist/src/host-monitor-reconciliation.d.ts +6 -0
  40. package/dist/src/host-monitor-reconciliation.js +96 -0
  41. package/dist/src/host-monitor-reconciliation.js.map +1 -0
  42. package/dist/src/native-thread-lifecycle-cli-adapter.js +116 -60
  43. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  44. package/dist/src/openclaw-list-projection.d.ts +2 -0
  45. package/dist/src/openclaw-list-projection.js +3 -0
  46. package/dist/src/openclaw-list-projection.js.map +1 -0
  47. package/dist/src/openclaw-model-facing-field-policy.d.ts +2 -0
  48. package/dist/src/openclaw-model-facing-field-policy.js +3 -0
  49. package/dist/src/openclaw-model-facing-field-policy.js.map +1 -0
  50. package/dist/src/openclaw-plugin-command-adapter.d.ts +6 -29
  51. package/dist/src/openclaw-plugin-command-adapter.js +7 -2660
  52. package/dist/src/openclaw-plugin-command-adapter.js.map +1 -1
  53. package/dist/src/openclaw-plugin-helpers.d.ts +2 -148
  54. package/dist/src/openclaw-plugin-helpers.js +2 -1844
  55. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  56. package/dist/src/openclaw-plugin-schemas.d.ts +2 -563
  57. package/dist/src/openclaw-plugin-schemas.js +2 -572
  58. package/dist/src/openclaw-plugin-schemas.js.map +1 -1
  59. package/dist/src/openclaw-plugin-supervisor.d.ts +4 -5
  60. package/dist/src/openclaw-plugin-supervisor.js +5 -94
  61. package/dist/src/openclaw-plugin-supervisor.js.map +1 -1
  62. package/dist/src/openclaw-plugin-value-helpers.d.ts +2 -0
  63. package/dist/src/openclaw-plugin-value-helpers.js +3 -0
  64. package/dist/src/openclaw-plugin-value-helpers.js.map +1 -0
  65. package/dist/src/openclaw-private-authority-offers.d.ts +4 -39
  66. package/dist/src/openclaw-private-authority-offers.js +3 -258
  67. package/dist/src/openclaw-private-authority-offers.js.map +1 -1
  68. package/dist/src/semantic-private-authority-offers.d.ts +41 -0
  69. package/dist/src/semantic-private-authority-offers.js +261 -0
  70. package/dist/src/semantic-private-authority-offers.js.map +1 -0
  71. package/dist/src/semantic-tool-arguments.d.ts +9 -0
  72. package/dist/src/semantic-tool-arguments.js +64 -0
  73. package/dist/src/semantic-tool-arguments.js.map +1 -0
  74. package/dist/src/semantic-tool-catalog.d.ts +48 -0
  75. package/dist/src/semantic-tool-catalog.js +105 -0
  76. package/dist/src/semantic-tool-catalog.js.map +1 -0
  77. package/dist/src/semantic-tool-command-helpers.d.ts +145 -0
  78. package/dist/src/semantic-tool-command-helpers.js +1272 -0
  79. package/dist/src/semantic-tool-command-helpers.js.map +1 -0
  80. package/dist/src/semantic-tool-list-projection.d.ts +10 -0
  81. package/dist/src/semantic-tool-list-projection.js +497 -0
  82. package/dist/src/semantic-tool-list-projection.js.map +1 -0
  83. package/dist/src/semantic-tool-model-facing-field-policy.d.ts +3 -0
  84. package/dist/src/semantic-tool-model-facing-field-policy.js +66 -0
  85. package/dist/src/semantic-tool-model-facing-field-policy.js.map +1 -0
  86. package/dist/src/semantic-tool-presentation.d.ts +37 -0
  87. package/dist/src/semantic-tool-presentation.js +680 -0
  88. package/dist/src/semantic-tool-presentation.js.map +1 -0
  89. package/dist/src/semantic-tool-private-authority.d.ts +39 -0
  90. package/dist/src/semantic-tool-private-authority.js +602 -0
  91. package/dist/src/semantic-tool-private-authority.js.map +1 -0
  92. package/dist/src/semantic-tool-relay.d.ts +16 -0
  93. package/dist/src/semantic-tool-relay.js +175 -0
  94. package/dist/src/semantic-tool-relay.js.map +1 -0
  95. package/dist/src/semantic-tool-runtime.d.ts +10 -0
  96. package/dist/src/semantic-tool-runtime.js +1157 -0
  97. package/dist/src/semantic-tool-runtime.js.map +1 -0
  98. package/dist/src/semantic-tool-schemas.d.ts +563 -0
  99. package/dist/src/semantic-tool-schemas.js +573 -0
  100. package/dist/src/semantic-tool-schemas.js.map +1 -0
  101. package/dist/src/semantic-tool-value-helpers.d.ts +5 -0
  102. package/dist/src/semantic-tool-value-helpers.js +27 -0
  103. package/dist/src/semantic-tool-value-helpers.js.map +1 -0
  104. package/dist/src/store-event-presentation.d.ts +17 -0
  105. package/dist/src/store-event-presentation.js +33 -0
  106. package/dist/src/store-event-presentation.js.map +1 -0
  107. package/dist/src/store.d.ts +3 -16
  108. package/dist/src/store.js +2 -30
  109. package/dist/src/store.js.map +1 -1
  110. package/dist/src/terminal-action-projection.d.ts +2 -98
  111. package/dist/src/terminal-action-projection.js +13 -215
  112. package/dist/src/terminal-action-projection.js.map +1 -1
  113. package/dist/src/terminal-agent-bridge.d.ts +14 -340
  114. package/dist/src/terminal-agent-bridge.js +155 -3226
  115. package/dist/src/terminal-agent-bridge.js.map +1 -1
  116. package/dist/src/terminal-approval-cli-adapter.d.ts +17 -0
  117. package/dist/src/terminal-approval-cli-adapter.js +921 -0
  118. package/dist/src/terminal-approval-cli-adapter.js.map +1 -0
  119. package/dist/src/terminal-command-cli-adapter.d.ts +2 -429
  120. package/dist/src/terminal-command-cli-adapter.js +344 -6061
  121. package/dist/src/terminal-command-cli-adapter.js.map +1 -1
  122. package/dist/src/terminal-command-cli-ports.d.ts +443 -0
  123. package/dist/src/terminal-command-cli-ports.js +2 -0
  124. package/dist/src/terminal-command-cli-ports.js.map +1 -0
  125. package/dist/src/terminal-command-dispatch-preparation.d.ts +81 -0
  126. package/dist/src/terminal-command-dispatch-preparation.js +209 -0
  127. package/dist/src/terminal-command-dispatch-preparation.js.map +1 -0
  128. package/dist/src/terminal-command-dispatch-transport.d.ts +35 -0
  129. package/dist/src/terminal-command-dispatch-transport.js +859 -0
  130. package/dist/src/terminal-command-dispatch-transport.js.map +1 -0
  131. package/dist/src/terminal-command-foreground-proof.d.ts +32 -0
  132. package/dist/src/terminal-command-foreground-proof.js +72 -0
  133. package/dist/src/terminal-command-foreground-proof.js.map +1 -0
  134. package/dist/src/terminal-command-send-preflight.d.ts +41 -0
  135. package/dist/src/terminal-command-send-preflight.js +86 -0
  136. package/dist/src/terminal-command-send-preflight.js.map +1 -0
  137. package/dist/src/terminal-composer-classifier.d.ts +55 -0
  138. package/dist/src/terminal-composer-classifier.js +638 -0
  139. package/dist/src/terminal-composer-classifier.js.map +1 -0
  140. package/dist/src/terminal-dispatch-recovery-authority.d.ts +56 -0
  141. package/dist/src/terminal-dispatch-recovery-authority.js +251 -0
  142. package/dist/src/terminal-dispatch-recovery-authority.js.map +1 -0
  143. package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +1 -9
  144. package/dist/src/terminal-dispatch-recovery-cli-adapter.js +5 -240
  145. package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -1
  146. package/dist/src/terminal-handoff-cli-adapter.d.ts +1 -11
  147. package/dist/src/terminal-handoff-cli-adapter.js +2 -39
  148. package/dist/src/terminal-handoff-cli-adapter.js.map +1 -1
  149. package/dist/src/terminal-human-explicit-send-cli-adapter.d.ts +25 -0
  150. package/dist/src/terminal-human-explicit-send-cli-adapter.js +903 -0
  151. package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -0
  152. package/dist/src/terminal-identity-authority-cli-adapter.d.ts +1 -6
  153. package/dist/src/terminal-identity-authority-cli-adapter.js +3 -33
  154. package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -1
  155. package/dist/src/terminal-interaction-cli-adapter.js +209 -210
  156. package/dist/src/terminal-interaction-cli-adapter.js.map +1 -1
  157. package/dist/src/terminal-interaction-core.d.ts +0 -2
  158. package/dist/src/terminal-interaction-core.js +4 -3
  159. package/dist/src/terminal-interaction-core.js.map +1 -1
  160. package/dist/src/terminal-interaction-protocol.d.ts +21 -0
  161. package/dist/src/terminal-interaction-protocol.js +74 -0
  162. package/dist/src/terminal-interaction-protocol.js.map +1 -1
  163. package/dist/src/terminal-interaction-response-bridge.d.ts +126 -0
  164. package/dist/src/terminal-interaction-response-bridge.js +579 -0
  165. package/dist/src/terminal-interaction-response-bridge.js.map +1 -0
  166. package/dist/src/terminal-interaction-response-transaction.d.ts +44 -0
  167. package/dist/src/terminal-interaction-response-transaction.js +56 -0
  168. package/dist/src/terminal-interaction-response-transaction.js.map +1 -0
  169. package/dist/src/terminal-list-action-policy.d.ts +43 -0
  170. package/dist/src/terminal-list-action-policy.js +164 -0
  171. package/dist/src/terminal-list-action-policy.js.map +1 -0
  172. package/dist/src/terminal-list-cli-adapter.d.ts +6 -36
  173. package/dist/src/terminal-list-cli-adapter.js +241 -1946
  174. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  175. package/dist/src/terminal-list-facts.d.ts +129 -0
  176. package/dist/src/terminal-list-facts.js +179 -0
  177. package/dist/src/terminal-list-facts.js.map +1 -0
  178. package/dist/src/terminal-list-inventory.d.ts +59 -0
  179. package/dist/src/terminal-list-inventory.js +194 -0
  180. package/dist/src/terminal-list-inventory.js.map +1 -0
  181. package/dist/src/terminal-list-ownership-service.d.ts +118 -0
  182. package/dist/src/terminal-list-ownership-service.js +1003 -0
  183. package/dist/src/terminal-list-ownership-service.js.map +1 -0
  184. package/dist/src/terminal-list-projection-service.d.ts +49 -0
  185. package/dist/src/terminal-list-projection-service.js +407 -0
  186. package/dist/src/terminal-list-projection-service.js.map +1 -0
  187. package/dist/src/terminal-list-renderer.d.ts +11 -11
  188. package/dist/src/terminal-list-renderer.js +168 -119
  189. package/dist/src/terminal-list-renderer.js.map +1 -1
  190. package/dist/src/terminal-managed-send-cli-adapter.d.ts +33 -0
  191. package/dist/src/terminal-managed-send-cli-adapter.js +994 -0
  192. package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -0
  193. package/dist/src/terminal-managed-turn-list-action-policy.d.ts +47 -0
  194. package/dist/src/terminal-managed-turn-list-action-policy.js +64 -0
  195. package/dist/src/terminal-managed-turn-list-action-policy.js.map +1 -0
  196. package/dist/src/terminal-model-control-action-policy.d.ts +60 -0
  197. package/dist/src/terminal-model-control-action-policy.js +96 -0
  198. package/dist/src/terminal-model-control-action-policy.js.map +1 -0
  199. package/dist/src/terminal-model-control-availability.d.ts +68 -0
  200. package/dist/src/terminal-model-control-availability.js +157 -0
  201. package/dist/src/terminal-model-control-availability.js.map +1 -0
  202. package/dist/src/terminal-model-control-bridge.d.ts +48 -0
  203. package/dist/src/terminal-model-control-bridge.js +259 -0
  204. package/dist/src/terminal-model-control-bridge.js.map +1 -0
  205. package/dist/src/terminal-model-control-profile.d.ts +55 -0
  206. package/dist/src/terminal-model-control-profile.js +137 -0
  207. package/dist/src/terminal-model-control-profile.js.map +1 -0
  208. package/dist/src/terminal-model-control-subject.d.ts +34 -0
  209. package/dist/src/terminal-model-control-subject.js +58 -0
  210. package/dist/src/terminal-model-control-subject.js.map +1 -0
  211. package/dist/src/terminal-model-control-transaction.d.ts +19 -0
  212. package/dist/src/terminal-model-control-transaction.js +39 -0
  213. package/dist/src/terminal-model-control-transaction.js.map +1 -0
  214. package/dist/src/terminal-model-control.d.ts +37 -18
  215. package/dist/src/terminal-model-control.js +285 -194
  216. package/dist/src/terminal-model-control.js.map +1 -1
  217. package/dist/src/terminal-monitor-application-service.js +50 -17
  218. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  219. package/dist/src/terminal-native-inspection-bridge.d.ts +211 -0
  220. package/dist/src/terminal-native-inspection-bridge.js +1127 -0
  221. package/dist/src/terminal-native-inspection-bridge.js.map +1 -0
  222. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -2
  223. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  224. package/dist/src/terminal-submission-retry-application.d.ts +24 -0
  225. package/dist/src/terminal-submission-retry-application.js +402 -0
  226. package/dist/src/terminal-submission-retry-application.js.map +1 -0
  227. package/dist/src/terminal-submission-retry-ports.d.ts +30 -0
  228. package/dist/src/terminal-submission-retry-ports.js +2 -0
  229. package/dist/src/terminal-submission-retry-ports.js.map +1 -0
  230. package/dist/src/terminal-submission-retry-reconciliation.d.ts +236 -0
  231. package/dist/src/terminal-submission-retry-reconciliation.js +1130 -0
  232. package/dist/src/terminal-submission-retry-reconciliation.js.map +1 -0
  233. package/dist/src/terminal-submission-retry-transport.d.ts +58 -0
  234. package/dist/src/terminal-submission-retry-transport.js +675 -0
  235. package/dist/src/terminal-submission-retry-transport.js.map +1 -0
  236. package/dist/src/terminal-text-submission-bridge.d.ts +200 -0
  237. package/dist/src/terminal-text-submission-bridge.js +632 -0
  238. package/dist/src/terminal-text-submission-bridge.js.map +1 -0
  239. package/dist/src/terminal-user-explicit-send-policy.d.ts +29 -0
  240. package/dist/src/terminal-user-explicit-send-policy.js +46 -0
  241. package/dist/src/terminal-user-explicit-send-policy.js.map +1 -0
  242. package/dist/src/terminal-watch-cli-adapter.js +91 -143
  243. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  244. package/dist/src/terminal-watch-codec.d.ts +9 -0
  245. package/dist/src/terminal-watch-codec.js +1051 -0
  246. package/dist/src/terminal-watch-codec.js.map +1 -0
  247. package/dist/src/terminal-watch-interaction-response-store.d.ts +19 -0
  248. package/dist/src/terminal-watch-interaction-response-store.js +87 -0
  249. package/dist/src/terminal-watch-interaction-response-store.js.map +1 -0
  250. package/dist/src/terminal-watch-record.d.ts +319 -0
  251. package/dist/src/terminal-watch-record.js +742 -0
  252. package/dist/src/terminal-watch-record.js.map +1 -0
  253. package/dist/src/terminal-watch-service.js +48 -27
  254. package/dist/src/terminal-watch-service.js.map +1 -1
  255. package/dist/src/terminal-watch-store.d.ts +3 -279
  256. package/dist/src/terminal-watch-store.js +5 -1779
  257. package/dist/src/terminal-watch-store.js.map +1 -1
  258. package/package.json +7 -2
  259. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +1 -1
@@ -0,0 +1,179 @@
1
+ import { isExactNativeThreadId } from "./managed-session.js";
2
+ import { terminalModelControlProfileFor } from "./terminal-model-control.js";
3
+ /**
4
+ * Collect the immutable observation facts for one already-discovered terminal.
5
+ *
6
+ * This boundary does not create action authority, generate tokens, render
7
+ * public JSON, write Store state, or send terminal input. Each observation port
8
+ * is invoked at most once. The status result is the single source for screen,
9
+ * activity, approval, and interaction facts; later styled-Composer and native
10
+ * model-control observations remain explicitly separate fail-closed captures.
11
+ */
12
+ export async function collectTerminalListTerminalFacts(input) {
13
+ const { session, terminalControl, terminalId, childPids, adapter, ports } = input;
14
+ const observedState = await ports.observeStatus();
15
+ const native = await ports.observeNativeIdentity(terminalId);
16
+ const effectiveState = ports.projectEffectiveState({
17
+ terminalState: observedState,
18
+ native
19
+ });
20
+ const rawSnapshot = effectiveState._terminal_status_snapshot;
21
+ const snapshot = rawSnapshot
22
+ ? ports.projectStatusSnapshot(rawSnapshot, effectiveState)
23
+ : undefined;
24
+ const statusCardNativeThreadId = observeStatusCardNativeThreadId(session, adapter, effectiveState);
25
+ const runtime = observeTerminalListRuntimeFacts(session, adapter, ports);
26
+ const latentClearResume = session.agent === "codex"
27
+ ? ports.observeLatentClearResume({
28
+ screen: effectiveState.screen_excerpt,
29
+ agentVersion: runtime.agentVersion
30
+ })
31
+ : undefined;
32
+ const terminalHasBlockingTurn = ports.observeTerminalHasBlockingTurn();
33
+ const composer = await ports.observeComposer(effectiveState);
34
+ const processIncarnation = ports.observePhysicalProcessIncarnation();
35
+ const zeroRolloutModelControlVerified = zeroRolloutModelControlFact({
36
+ session,
37
+ native,
38
+ processIncarnation
39
+ });
40
+ const terminalHasInteraction = snapshot?.interaction_state !== undefined;
41
+ const hasOrphanedDispatch = native.orphanedDispatch !== undefined;
42
+ const modelControlResidual = await ports.observeModelControlResidual({
43
+ agentVersion: runtime.agentVersion,
44
+ modelControlCapability: runtime.modelControlCapability,
45
+ modelControlProfile: runtime.modelControlProfile,
46
+ native,
47
+ zeroRolloutVerified: zeroRolloutModelControlVerified,
48
+ effectiveTerminalState: effectiveState,
49
+ terminalHasInteraction,
50
+ terminalHasBlockingTurn,
51
+ hasOrphanedDispatch
52
+ });
53
+ const modelControlSurfaceOpen = modelControlResidual?.state === "recoverable" &&
54
+ modelControlResidual.kind === "model_surface";
55
+ const projectedState = modelControlSurfaceOpen
56
+ ? terminalListStateWithOpenModelControlSurface(effectiveState)
57
+ : effectiveState;
58
+ return freezeTerminalListFacts({
59
+ terminalId,
60
+ childPids,
61
+ processIncarnation,
62
+ observedState,
63
+ effectiveState,
64
+ projectedState,
65
+ snapshot,
66
+ statusCardNativeThreadId,
67
+ terminalHasInteraction,
68
+ native,
69
+ runtime,
70
+ composer,
71
+ terminalHasBlockingTurn,
72
+ hasOrphanedDispatch,
73
+ latentClearResume,
74
+ zeroRolloutModelControlVerified,
75
+ modelControlResidual
76
+ });
77
+ }
78
+ function observeStatusCardNativeThreadId(session, adapter, state) {
79
+ const observation = session.agent === "codex" &&
80
+ typeof state.screen_excerpt === "string"
81
+ ? adapter.observeThreadLifecycle?.({
82
+ operation: { kind: "new_thread" },
83
+ phase: "before",
84
+ screen: state.screen_excerpt
85
+ })
86
+ : undefined;
87
+ return observation?.status === "observed" &&
88
+ state.activity_state === "idle" &&
89
+ state.approval_state.blocked !== true &&
90
+ isExactNativeThreadId(observation.nativeThreadId)
91
+ ? observation.nativeThreadId
92
+ : undefined;
93
+ }
94
+ function observeTerminalListRuntimeFacts(session, adapter, ports) {
95
+ const agentVersion = ports.observeAgentVersion();
96
+ const lifecycleCapability = adapter.probeThreadLifecycle?.(agentVersion) ?? {
97
+ status: "unsupported",
98
+ agentVersion,
99
+ newThread: false,
100
+ resumeExact: false,
101
+ reason: "native thread lifecycle is unavailable"
102
+ };
103
+ const nativeInspectionCapability = adapter.probeNativeInspection?.(agentVersion) ?? {
104
+ status: "unsupported",
105
+ agentVersion,
106
+ statusInspection: false,
107
+ reason: "native inspection is unavailable"
108
+ };
109
+ const modelControlCapability = adapter.probeModelControl?.(agentVersion) ?? {
110
+ status: "unsupported",
111
+ agentVersion,
112
+ modelSelection: false,
113
+ reasoningEffortSelection: false,
114
+ reason: "terminal model control is unavailable"
115
+ };
116
+ const compatibilityWarnings = Object.freeze([...new Set([
117
+ lifecycleCapability.compatibilityWarning,
118
+ nativeInspectionCapability.compatibilityWarning
119
+ ].filter((warning) => typeof warning === "string" && warning.trim().length > 0))]);
120
+ return Object.freeze({
121
+ agentVersion,
122
+ lifecycleCapability,
123
+ nativeInspectionCapability,
124
+ modelControlCapability,
125
+ modelControlProfile: terminalModelControlProfileFor(session.agent, agentVersion),
126
+ compatibilityWarnings
127
+ });
128
+ }
129
+ function zeroRolloutModelControlFact(input) {
130
+ const { session, native, processIncarnation } = input;
131
+ return session.agent === "codex" &&
132
+ native.nativeIdentityObservation.status === "verified_absent" &&
133
+ native.authorityNativeIdentityObservation.status === "verified_absent" &&
134
+ native.codexOpenRootRolloutInventory?.status === "verified_absent" &&
135
+ native.codexOpenRootRolloutInventory.pid === session.pid &&
136
+ native.codexOpenRootRolloutInventory.roots.length === 0 &&
137
+ native.codexOpenRootRolloutInventory.processBirth ===
138
+ processIncarnation?.processBirth;
139
+ }
140
+ function freezeTerminalListFacts(input) {
141
+ return Object.freeze({
142
+ physical: Object.freeze({
143
+ terminalId: input.terminalId,
144
+ childPids: Object.freeze([...input.childPids]),
145
+ processIncarnation: input.processIncarnation
146
+ }),
147
+ status: Object.freeze({
148
+ observed: input.observedState,
149
+ effective: input.effectiveState,
150
+ projected: input.projectedState,
151
+ snapshot: input.snapshot,
152
+ statusCardNativeThreadId: input.statusCardNativeThreadId,
153
+ hasInteraction: input.terminalHasInteraction
154
+ }),
155
+ native: Object.freeze({ ...input.native }),
156
+ runtime: input.runtime,
157
+ composer: Object.freeze({ ...input.composer }),
158
+ store: Object.freeze({
159
+ terminalHasBlockingTurn: input.terminalHasBlockingTurn,
160
+ hasOrphanedDispatch: input.hasOrphanedDispatch
161
+ }),
162
+ codex: Object.freeze({
163
+ latentClearResume: input.latentClearResume,
164
+ zeroRolloutModelControlVerified: input.zeroRolloutModelControlVerified
165
+ }),
166
+ modelControlResidual: input.modelControlResidual
167
+ });
168
+ }
169
+ function terminalListStateWithOpenModelControlSurface(state) {
170
+ const reason = "an exact native model-control surface is open";
171
+ return {
172
+ ...state,
173
+ activity_state: "unknown",
174
+ activity_reason: reason,
175
+ screen_state: "unknown",
176
+ screen_reason: reason
177
+ };
178
+ }
179
+ //# sourceMappingURL=terminal-list-facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-list-facts.js","sourceRoot":"","sources":["../../src/terminal-list-facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { ExecutorKind } from "./executors.js";
2
+ import { type ActiveTerminalProcess, type TerminalAgentAdapterRegistry, type TerminalControlRef } from "./terminal-agent-adapter.js";
3
+ import type { TerminalAgentBridge } from "./terminal-agent-bridge.js";
4
+ import type { TerminalControlProvider } from "./terminal-control-provider.js";
5
+ import type { TerminalProcessSource } from "./terminal-process-source.js";
6
+ export interface TerminalListInventoryEntry {
7
+ agent?: string;
8
+ activity_state?: string;
9
+ durable_activity_reason?: string;
10
+ durable_activity_state?: string;
11
+ cwd?: string;
12
+ id?: string;
13
+ native_identity_state?: string;
14
+ screen_reason?: string;
15
+ screen_state?: string;
16
+ short_ref?: string;
17
+ terminal_control?: TerminalControlRef | {
18
+ target?: string;
19
+ [field: string]: unknown;
20
+ };
21
+ workspace?: string;
22
+ [field: string]: unknown;
23
+ }
24
+ export interface TerminalListInventoryScan {
25
+ terminalControlled: TerminalListInventoryEntry[];
26
+ summary: {
27
+ error?: string;
28
+ [field: string]: unknown;
29
+ };
30
+ }
31
+ export interface TerminalListInventoryOptions {
32
+ managedOnly?: boolean;
33
+ noApprovalScan?: boolean;
34
+ terminalDebug?: boolean;
35
+ }
36
+ export interface TerminalListInventoryPorts<Options extends TerminalListInventoryOptions> {
37
+ createRegistry(options: Options): TerminalAgentAdapterRegistry;
38
+ createBridge(options: Options, provider: TerminalControlProvider, registry: TerminalAgentAdapterRegistry): TerminalAgentBridge;
39
+ createProvider(options: Options): TerminalControlProvider;
40
+ createProcessSource(options: Options): TerminalProcessSource;
41
+ projectTerminal(input: {
42
+ session: ActiveTerminalProcess;
43
+ activeSessions: ActiveTerminalProcess[];
44
+ options: Options;
45
+ bridge: TerminalAgentBridge;
46
+ }): Promise<TerminalListInventoryEntry>;
47
+ log(level: "info", event: string, fields: Record<string, unknown>): void;
48
+ }
49
+ /**
50
+ * Collect one physical process/terminal inventory without consulting Store
51
+ * ownership or public action policy. Every selected process is projected by
52
+ * exactly one caller-supplied per-terminal observation operation.
53
+ */
54
+ export declare function collectTerminalListInventory<Options extends TerminalListInventoryOptions>(input: {
55
+ options: Options;
56
+ agentFilter?: ExecutorKind;
57
+ terminalId?: string;
58
+ ports: TerminalListInventoryPorts<Options>;
59
+ }): Promise<TerminalListInventoryScan>;
@@ -0,0 +1,194 @@
1
+ import { parseTerminalConversationId } from "./terminal-agent-adapter.js";
2
+ import { selectRootTerminalProcesses } from "./terminal-authority-policy.js";
3
+ /**
4
+ * Collect one physical process/terminal inventory without consulting Store
5
+ * ownership or public action policy. Every selected process is projected by
6
+ * exactly one caller-supplied per-terminal observation operation.
7
+ */
8
+ export async function collectTerminalListInventory(input) {
9
+ const { options, agentFilter, terminalId, ports } = input;
10
+ const empty = {
11
+ terminalControlled: [],
12
+ summary: {
13
+ enabled: false,
14
+ agents: [],
15
+ error: undefined
16
+ }
17
+ };
18
+ if (options.managedOnly)
19
+ return empty;
20
+ const registry = ports.createRegistry(options);
21
+ const adapters = agentFilter
22
+ ? [registry.get(agentFilter)].filter((adapter) => adapter !== undefined)
23
+ : registry.list();
24
+ if (agentFilter && adapters.length === 0) {
25
+ return {
26
+ ...empty,
27
+ summary: {
28
+ enabled: true,
29
+ agents: [],
30
+ skipped: `terminal agent adapter is not registered for ${agentFilter}`
31
+ }
32
+ };
33
+ }
34
+ const terminalProvider = ports.createProvider(options);
35
+ const bridge = ports.createBridge(options, terminalProvider, registry);
36
+ const terminalDiagnostics = options.terminalDebug
37
+ ? await terminalProvider.diagnostics()
38
+ : undefined;
39
+ const exactTarget = terminalId
40
+ ? exactTerminalTargetDiagnostic(terminalId)
41
+ : undefined;
42
+ if (terminalId) {
43
+ ports.log("info", "terminal_exact_scan", {
44
+ stage: "started",
45
+ terminal_id: terminalId,
46
+ target: exactTarget
47
+ });
48
+ }
49
+ const terminalControlled = [];
50
+ let activeCount = 0;
51
+ const errors = [];
52
+ try {
53
+ const processSource = ports.createProcessSource(options);
54
+ const snapshots = await processSource.listProcessSnapshots((snapshot) => adapters.some((adapter) => adapter.capabilities.processDiscovery &&
55
+ adapter.classifyProcess(snapshot) !== undefined), { includeAncestors: true });
56
+ logExactProcessInventory(ports, terminalId, exactTarget, snapshots);
57
+ const activeSessions = await bridge.listProcesses(snapshots, adapters.map((adapter) => adapter.agent));
58
+ const rootSessions = selectRootTerminalProcesses(activeSessions, snapshots);
59
+ const controlledSessions = rootSessions.filter((session) => session.terminalControl !== undefined);
60
+ logExactProcessAssociation({
61
+ ports,
62
+ terminalId,
63
+ exactTarget,
64
+ activeSessions,
65
+ rootSessions,
66
+ controlledSessions,
67
+ bridge
68
+ });
69
+ activeCount = controlledSessions.length;
70
+ const selectedSessions = terminalId
71
+ ? activeSessions.filter((session) => session.terminalControl !== undefined &&
72
+ bridge.terminalConversationId(session) === terminalId)
73
+ : controlledSessions;
74
+ for (const session of selectedSessions) {
75
+ try {
76
+ terminalControlled.push(await ports.projectTerminal({
77
+ session,
78
+ activeSessions,
79
+ options,
80
+ bridge
81
+ }));
82
+ }
83
+ catch (error) {
84
+ errors.push(`terminal process ${session.pid}: ` +
85
+ (error instanceof Error ? error.message : String(error)));
86
+ }
87
+ }
88
+ }
89
+ catch (error) {
90
+ errors.push(error instanceof Error ? error.message : String(error));
91
+ }
92
+ if (terminalId) {
93
+ ports.log("info", "terminal_exact_scan", {
94
+ stage: "complete",
95
+ terminal_id: terminalId,
96
+ controlled_process_count: activeCount,
97
+ terminal_row_count: terminalControlled.length,
98
+ terminal_row_ids: terminalControlled.map((terminal) => terminal.id),
99
+ errors
100
+ });
101
+ }
102
+ return {
103
+ terminalControlled,
104
+ summary: {
105
+ enabled: true,
106
+ agents: adapters.map((adapter) => adapter.agent),
107
+ active_count: activeCount,
108
+ terminal_count: terminalControlled.length,
109
+ approval_scan: options.noApprovalScan ? "disabled" : "enabled",
110
+ diagnostics: terminalDiagnostics,
111
+ error: errors.length > 0 ? errors.join("; ") : undefined
112
+ }
113
+ };
114
+ }
115
+ function logExactProcessInventory(ports, terminalId, exactTarget, snapshots) {
116
+ if (!terminalId)
117
+ return;
118
+ const targetPid = exactTarget?.pid;
119
+ ports.log("info", "terminal_exact_scan", {
120
+ stage: "process_inventory",
121
+ terminal_id: terminalId,
122
+ target_pid: targetPid,
123
+ snapshot_count: snapshots.length,
124
+ target_process_found: targetPid === undefined
125
+ ? undefined
126
+ : snapshots.some((snapshot) => snapshot.pid === targetPid),
127
+ target_process_snapshots: targetPid === undefined
128
+ ? []
129
+ : snapshots
130
+ .filter((snapshot) => snapshot.pid === targetPid)
131
+ .map((snapshot) => ({ pid: snapshot.pid, ppid: snapshot.ppid }))
132
+ });
133
+ }
134
+ function logExactProcessAssociation(input) {
135
+ if (!input.terminalId)
136
+ return;
137
+ const targetPid = input.exactTarget?.pid;
138
+ const targetSessions = targetPid === undefined
139
+ ? []
140
+ : input.activeSessions.filter((session) => session.pid === targetPid);
141
+ input.ports.log("info", "terminal_exact_scan", {
142
+ stage: "process_classification_and_association",
143
+ terminal_id: input.terminalId,
144
+ target_pid: targetPid,
145
+ classified_process_count: input.activeSessions.length,
146
+ root_process_count: input.rootSessions.length,
147
+ controlled_process_count: input.controlledSessions.length,
148
+ target_classified_count: targetSessions.length,
149
+ target_controlled_count: targetSessions.filter((session) => session.terminalControl !== undefined).length,
150
+ target_sessions: targetSessions.map((session) => ({
151
+ agent: session.agent,
152
+ pid: session.pid,
153
+ ppid: session.ppid,
154
+ kind: session.kind,
155
+ confidence: session.confidence,
156
+ selected_as_root: input.rootSessions.includes(session),
157
+ terminal_conversation_id: session.terminalControl
158
+ ? input.bridge.terminalConversationId(session)
159
+ : undefined,
160
+ terminal_control: terminalControlScanDiagnostic(session.terminalControl)
161
+ }))
162
+ });
163
+ }
164
+ function exactTerminalTargetDiagnostic(terminalId) {
165
+ try {
166
+ const parsed = parseTerminalConversationId(terminalId);
167
+ return parsed ? {
168
+ provider: parsed.kind,
169
+ agent: parsed.agent,
170
+ route: parsed.target,
171
+ pid: parsed.pid
172
+ } : undefined;
173
+ }
174
+ catch (error) {
175
+ return {
176
+ parse_error: error instanceof Error ? error.message : String(error)
177
+ };
178
+ }
179
+ }
180
+ function terminalControlScanDiagnostic(terminalControl) {
181
+ if (!terminalControl)
182
+ return undefined;
183
+ const control = terminalControl;
184
+ return {
185
+ kind: terminalControl.kind,
186
+ target: terminalControl.target,
187
+ pane_pid: control.panePid,
188
+ process_anchor_pid: control.processAnchorPid,
189
+ endpoint_key: control.endpointKey,
190
+ resource_key: control.resourceKey,
191
+ terminal_id: control.terminalId
192
+ };
193
+ }
194
+ //# sourceMappingURL=terminal-list-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-list-inventory.js","sourceRoot":"","sources":["../../src/terminal-list-inventory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type { CodexOpenRootRolloutInventory } from "./agent-session-provider.js";
2
+ import { listDeferredForegroundTransfers, type DeferredForegroundTransferSourceRolloutAuthority, type DeferredForegroundTransferSourceTurnAuthority } from "./deferred-foreground-transfer.js";
3
+ import type { ExecutorKind } from "./executors.js";
4
+ import { type HumanObservedHandoffTargetSnapshot, type ManagedSessionState } from "./managed-session.js";
5
+ import { type Conversation } from "./protocol.js";
6
+ import { type CodexSendAuthorityContext, type DeferredCodexForegroundDispatchSnapshot } from "./terminal-authority-policy.js";
7
+ import { type TerminalNativeIdentity } from "./terminal-binding-authority.js";
8
+ import { terminalScopedCodexApprovalPromptSnapshot, type TerminalScopedCodexApprovalBoundary } from "./terminal-scoped-approval-authority.js";
9
+ import { type TerminalDispatchLedgerDocument } from "./terminal-dispatch-ledger-codec.js";
10
+ import { type TerminalControlRef } from "./terminal-control-ref.js";
11
+ export interface DeferredCodexAuthorityObservation {
12
+ sourceRolloutAuthority: DeferredForegroundTransferSourceRolloutAuthority;
13
+ sourceTurnHistory?: DeferredForegroundTransferSourceTurnAuthority[];
14
+ dispatchSnapshot?: DeferredCodexForegroundDispatchSnapshot;
15
+ sourceAbandonmentFingerprint?: string;
16
+ exactSource: boolean;
17
+ }
18
+ export interface TerminalListOwnershipContext {
19
+ storeDir: string;
20
+ terminals: Record<string, any>[];
21
+ managedSessions: ManagedSessionState[];
22
+ allConversations: Conversation[];
23
+ displayedConversations: Conversation[];
24
+ mutationsAllowed: boolean;
25
+ nonterminalDeferredTransfers: ReturnType<typeof listDeferredForegroundTransfers>;
26
+ conversationHasNonterminalDeferredTransfer: (conversation: Conversation) => boolean;
27
+ }
28
+ export interface TerminalListOwnershipServicePorts {
29
+ activeTurnHandoffDecisionToken(request: {
30
+ handoffToken: string;
31
+ turn: Conversation;
32
+ ledger?: TerminalDispatchLedgerDocument;
33
+ }): string;
34
+ assertManagedTerminalDispatchOwner(request: {
35
+ storeDir: string;
36
+ conversation: Conversation;
37
+ terminalControl: TerminalControlRef;
38
+ action: "approve" | "cancel";
39
+ }): void;
40
+ codexLingeringBeforeIdentityMatchesSession(request: {
41
+ storeDir: string;
42
+ session: ManagedSessionState;
43
+ identity: TerminalNativeIdentity;
44
+ }): boolean;
45
+ codexProcessIncarnationForPid(pid: number): {
46
+ processUuid: string;
47
+ processBirth: string;
48
+ };
49
+ currentWorkingDirectory(): string;
50
+ isDiscoverableTmuxConversation(conversation: Conversation): boolean;
51
+ loadTerminalBridgeDispatchLedger(terminalControl: TerminalControlRef): TerminalDispatchLedgerDocument | undefined;
52
+ loadTerminalDispatchLedgerOwner(ledger: TerminalDispatchLedgerDocument): Conversation | undefined;
53
+ managedTurnsForSession(storeDir: string, sessionId: string): Conversation[];
54
+ matchesConfiguredWorkspace(configured: unknown, observed: unknown): boolean;
55
+ observeDeferredCodexAuthority(request: {
56
+ mode: "list";
57
+ storeDir: string;
58
+ context: CodexSendAuthorityContext;
59
+ sourceSession?: ManagedSessionState;
60
+ candidateInventory?: CodexOpenRootRolloutInventory;
61
+ abandonment: "never" | "missing_rollout";
62
+ requireUnclaimedCandidate: true;
63
+ }): DeferredCodexAuthorityObservation | undefined;
64
+ observedHandoffTargetResolution(request: {
65
+ storeDir: string;
66
+ agent: ExecutorKind;
67
+ workspace: string;
68
+ nativeThreadId: string;
69
+ sourceSessionId: string;
70
+ }): {
71
+ status: "eligible";
72
+ session?: ManagedSessionState;
73
+ snapshot: HumanObservedHandoffTargetSnapshot;
74
+ } | {
75
+ status: "blocked";
76
+ reason: string;
77
+ };
78
+ orphanedTerminalDispatchForRecovery(terminalControl: TerminalControlRef): TerminalDispatchLedgerDocument | undefined;
79
+ runtimeLog(level: "info" | "warn" | "error", event: string, details: Record<string, unknown>): void;
80
+ terminalControlFromTakeover(value: unknown): TerminalControlRef | undefined;
81
+ terminalDispatchRecordMatchesControl(ledger: TerminalDispatchLedgerDocument | undefined, terminalControl: TerminalControlRef, options?: {
82
+ requireProcessAnchor?: boolean;
83
+ }): boolean;
84
+ }
85
+ interface TerminalScopedBoundaryRequest {
86
+ storeDir: string;
87
+ terminal: unknown;
88
+ session: ManagedSessionState;
89
+ ledger?: TerminalDispatchLedgerDocument;
90
+ approval?: ReturnType<typeof terminalScopedCodexApprovalPromptSnapshot>;
91
+ owner?: Conversation;
92
+ }
93
+ type TerminalDispatchOwnershipResult = {
94
+ state: "none";
95
+ } | {
96
+ state: "current";
97
+ conversation: Conversation;
98
+ } | {
99
+ state: "conflict";
100
+ conflict: Record<string, any>;
101
+ };
102
+ export interface TerminalListOwnershipService {
103
+ assertTerminalIncarnationCanStartTurn(storeDir: string, terminalControl: TerminalControlRef): void;
104
+ managedSessionHasAnyNativeTransition(storeDir: string, session: ManagedSessionState): boolean;
105
+ managedSessionHasUnresolvedNativeTransition(storeDir: string, session: ManagedSessionState): boolean;
106
+ managedSessionMatchesLiveTerminalEntry(session: ManagedSessionState, terminal: Record<string, any>, storeDir: string): boolean;
107
+ managedTurnMatchesLiveTerminal(conversation: Conversation, terminal: Record<string, any>): boolean;
108
+ managedTurnNeedsAttention(conversation: Conversation): boolean;
109
+ observeActionAuthority(terminal: Record<string, any>, context: TerminalListOwnershipContext, binding: Record<string, any>): Record<string, any>;
110
+ observeBindingAuthority(terminal: Record<string, any>, context: TerminalListOwnershipContext): Record<string, any>;
111
+ provisionalManagedBindingTurnCount(storeDir: string, session: ManagedSessionState): number | undefined;
112
+ terminalControlForManagedConversation(conversation: Conversation): TerminalControlRef | undefined;
113
+ terminalDispatchOwnership(terminalControl: TerminalControlRef): TerminalDispatchOwnershipResult;
114
+ terminalIncarnationBlockingTurns(storeDir: string, terminalControl: TerminalControlRef, conversations?: Conversation[]): Conversation[];
115
+ terminalScopedCodexApprovalBoundary(request: TerminalScopedBoundaryRequest): TerminalScopedCodexApprovalBoundary;
116
+ }
117
+ export declare function createTerminalListOwnershipService(ports: TerminalListOwnershipServicePorts): TerminalListOwnershipService;
118
+ export {};