@songsid/agend 2.3.4-beta.6 → 2.3.5-alpha.2

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 (386) hide show
  1. package/README.md +2 -0
  2. package/README.zh-TW.md +2 -0
  3. package/THIRD_PARTY_NOTICES.md +53 -0
  4. package/dist/agent-endpoint.d.ts +5 -1
  5. package/dist/agent-endpoint.js +12 -2
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/backend/claude-code.d.ts +15 -12
  8. package/dist/backend/claude-code.js +137 -133
  9. package/dist/backend/claude-code.js.map +1 -1
  10. package/dist/backend/codex-package.d.ts +5 -2
  11. package/dist/backend/codex-package.js +1 -5
  12. package/dist/backend/codex-package.js.map +1 -1
  13. package/dist/backend/codex.d.ts +136 -113
  14. package/dist/backend/codex.js +1271 -1219
  15. package/dist/backend/codex.js.map +1 -1
  16. package/dist/backend/grok-model-cache.d.ts +7 -0
  17. package/dist/backend/grok-model-cache.js +65 -0
  18. package/dist/backend/grok-model-cache.js.map +1 -0
  19. package/dist/backend/grok.d.ts +2 -0
  20. package/dist/backend/grok.js +22 -0
  21. package/dist/backend/grok.js.map +1 -1
  22. package/dist/backend/native-pane.d.ts +9 -0
  23. package/dist/backend/native-pane.js +59 -0
  24. package/dist/backend/native-pane.js.map +1 -0
  25. package/dist/backend/types.d.ts +7 -0
  26. package/dist/backend/types.js.map +1 -1
  27. package/dist/channel/ipc-bridge.d.ts +2 -0
  28. package/dist/channel/mcp-tools.js +1 -1
  29. package/dist/channel/mcp-tools.js.map +1 -1
  30. package/dist/cli.js +6 -2
  31. package/dist/cli.js.map +1 -1
  32. package/dist/config-validator.js +59 -0
  33. package/dist/config-validator.js.map +1 -1
  34. package/dist/config.js +16 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/daemon.d.ts +62 -5
  37. package/dist/daemon.js +749 -267
  38. package/dist/daemon.js.map +1 -1
  39. package/dist/delivery-consumed-watch.d.ts +15 -3
  40. package/dist/delivery-consumed-watch.js +23 -1
  41. package/dist/delivery-consumed-watch.js.map +1 -1
  42. package/dist/delivery-outbox.d.ts +5 -0
  43. package/dist/delivery-outbox.js +32 -4
  44. package/dist/delivery-outbox.js.map +1 -1
  45. package/dist/delivery-reconciliation.d.ts +2 -35
  46. package/dist/delivery-reconciliation.js +2 -156
  47. package/dist/delivery-reconciliation.js.map +1 -1
  48. package/dist/fleet-context.d.ts +2 -2
  49. package/dist/fleet-level-config.d.ts +1 -1
  50. package/dist/fleet-level-config.js +2 -0
  51. package/dist/fleet-level-config.js.map +1 -1
  52. package/dist/fleet-manager.d.ts +125 -2
  53. package/dist/fleet-manager.js +1157 -27
  54. package/dist/fleet-manager.js.map +1 -1
  55. package/dist/fleet-windows-runtime.d.ts +92 -0
  56. package/dist/fleet-windows-runtime.js +373 -0
  57. package/dist/fleet-windows-runtime.js.map +1 -0
  58. package/dist/instance-config-impact.js +4 -0
  59. package/dist/instance-config-impact.js.map +1 -1
  60. package/dist/instance-lifecycle.d.ts +20 -3
  61. package/dist/instance-lifecycle.js +358 -156
  62. package/dist/instance-lifecycle.js.map +1 -1
  63. package/dist/local-pane-endpoint.d.ts +46 -0
  64. package/dist/local-pane-endpoint.js +189 -0
  65. package/dist/local-pane-endpoint.js.map +1 -0
  66. package/dist/local-pane-launcher.d.ts +2 -0
  67. package/dist/local-pane-launcher.js +38 -0
  68. package/dist/local-pane-launcher.js.map +1 -0
  69. package/dist/local-pane-stage.ps1 +101 -0
  70. package/dist/locale.js +34 -0
  71. package/dist/locale.js.map +1 -1
  72. package/dist/model-catalog-defaults.d.ts +14 -0
  73. package/dist/model-catalog-defaults.js +20 -0
  74. package/dist/model-catalog-defaults.js.map +1 -0
  75. package/dist/native-agent-admission.d.ts +7 -0
  76. package/dist/native-agent-admission.js +26 -0
  77. package/dist/native-agent-admission.js.map +1 -0
  78. package/dist/native-daemon-client.d.ts +13 -0
  79. package/dist/native-daemon-client.js +28 -0
  80. package/dist/native-daemon-client.js.map +1 -0
  81. package/dist/native-instance-api.d.ts +14 -0
  82. package/dist/native-instance-api.js +205 -0
  83. package/dist/native-instance-api.js.map +1 -0
  84. package/dist/native-instance-input.d.ts +84 -0
  85. package/dist/native-instance-input.js +54 -0
  86. package/dist/native-instance-input.js.map +1 -0
  87. package/dist/native-instance-registry.d.ts +32 -0
  88. package/dist/native-instance-registry.js +105 -0
  89. package/dist/native-instance-registry.js.map +1 -0
  90. package/dist/native-mcp.d.ts +40 -0
  91. package/dist/native-mcp.js +278 -0
  92. package/dist/native-mcp.js.map +1 -0
  93. package/dist/native-model-catalog.d.ts +5 -0
  94. package/dist/native-model-catalog.js +76 -0
  95. package/dist/native-model-catalog.js.map +1 -0
  96. package/dist/native-pane-crash-budget.d.ts +20 -0
  97. package/dist/native-pane-crash-budget.js +60 -0
  98. package/dist/native-pane-crash-budget.js.map +1 -0
  99. package/dist/native-pane-create.d.ts +26 -0
  100. package/dist/native-pane-create.js +53 -0
  101. package/dist/native-pane-create.js.map +1 -0
  102. package/dist/native-pane-lifecycle.d.ts +65 -0
  103. package/dist/native-pane-lifecycle.js +227 -0
  104. package/dist/native-pane-lifecycle.js.map +1 -0
  105. package/dist/native-pane-manager.d.ts +58 -0
  106. package/dist/native-pane-manager.js +563 -0
  107. package/dist/native-pane-manager.js.map +1 -0
  108. package/dist/native-pane-output-log.d.ts +15 -0
  109. package/dist/native-pane-output-log.js +108 -0
  110. package/dist/native-pane-output-log.js.map +1 -0
  111. package/dist/native-pane-reconciliation.d.ts +4 -0
  112. package/dist/native-pane-reconciliation.js +40 -0
  113. package/dist/native-pane-reconciliation.js.map +1 -0
  114. package/dist/native-pane-recovery.d.ts +12 -0
  115. package/dist/native-pane-recovery.js +10 -0
  116. package/dist/native-pane-recovery.js.map +1 -0
  117. package/dist/native-pane-tools.d.ts +2 -0
  118. package/dist/native-pane-tools.js +14 -0
  119. package/dist/native-pane-tools.js.map +1 -0
  120. package/dist/needs-you-hub.d.ts +2 -0
  121. package/dist/needs-you-hub.js +1 -0
  122. package/dist/needs-you-hub.js.map +1 -1
  123. package/dist/needs-you.d.ts +12 -1
  124. package/dist/needs-you.js +8 -1
  125. package/dist/needs-you.js.map +1 -1
  126. package/dist/outbound-handlers.d.ts +16 -2
  127. package/dist/outbound-handlers.js +67 -3
  128. package/dist/outbound-handlers.js.map +1 -1
  129. package/dist/outbound-schemas.d.ts +38 -0
  130. package/dist/outbound-schemas.js +12 -0
  131. package/dist/outbound-schemas.js.map +1 -1
  132. package/dist/pane-port.d.ts +107 -0
  133. package/dist/pane-port.js +2 -0
  134. package/dist/pane-port.js.map +1 -0
  135. package/dist/runtime-api.d.ts +8 -0
  136. package/dist/runtime-api.js +96 -0
  137. package/dist/runtime-api.js.map +1 -0
  138. package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +21 -0
  139. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +2 -0
  140. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +19 -0
  141. package/dist/runtime-assets/@xterm/addon-serialize/package.json +29 -0
  142. package/dist/runtime-assets/@xterm/headless/LICENSE +21 -0
  143. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +2 -0
  144. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +46 -0
  145. package/dist/runtime-assets/@xterm/headless/package.json +29 -0
  146. package/dist/runtime-assets/node-pty/CONPTY-LICENSE +21 -0
  147. package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +503 -0
  148. package/dist/runtime-assets/node-pty/LICENSE +69 -0
  149. package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +16 -0
  150. package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +47 -0
  151. package/dist/runtime-assets/node-pty/lib/index.js +52 -0
  152. package/dist/runtime-assets/node-pty/lib/interfaces.js +7 -0
  153. package/dist/runtime-assets/node-pty/lib/shared/conout.js +11 -0
  154. package/dist/runtime-assets/node-pty/lib/terminal.js +190 -0
  155. package/dist/runtime-assets/node-pty/lib/types.js +7 -0
  156. package/dist/runtime-assets/node-pty/lib/unixTerminal.js +346 -0
  157. package/dist/runtime-assets/node-pty/lib/utils.js +39 -0
  158. package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +125 -0
  159. package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +320 -0
  160. package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +199 -0
  161. package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  162. package/dist/runtime-assets/node-pty/package.json +64 -0
  163. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  164. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  165. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  166. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  167. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  168. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  169. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  170. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  171. package/dist/runtime-bundle.d.ts +17 -0
  172. package/dist/runtime-bundle.js +147 -0
  173. package/dist/runtime-bundle.js.map +1 -0
  174. package/dist/runtime-cli.d.ts +2 -0
  175. package/dist/runtime-cli.js +117 -0
  176. package/dist/runtime-cli.js.map +1 -0
  177. package/dist/runtime-client-store.d.ts +49 -0
  178. package/dist/runtime-client-store.js +292 -0
  179. package/dist/runtime-client-store.js.map +1 -0
  180. package/dist/runtime-client.d.ts +100 -0
  181. package/dist/runtime-client.js +700 -0
  182. package/dist/runtime-client.js.map +1 -0
  183. package/dist/runtime-coordinator.d.ts +82 -0
  184. package/dist/runtime-coordinator.js +864 -0
  185. package/dist/runtime-coordinator.js.map +1 -0
  186. package/dist/runtime-pane-assets.d.ts +17 -0
  187. package/dist/runtime-pane-assets.js +23 -0
  188. package/dist/runtime-pane-assets.js.map +1 -0
  189. package/dist/runtime-pane-boot.d.ts +2 -0
  190. package/dist/runtime-pane-boot.js +24 -0
  191. package/dist/runtime-pane-boot.js.map +1 -0
  192. package/dist/runtime-pane-codex-index.d.ts +1 -0
  193. package/dist/runtime-pane-codex-index.js +47 -0
  194. package/dist/runtime-pane-codex-index.js.map +1 -0
  195. package/dist/runtime-pane-config.d.ts +16 -0
  196. package/dist/runtime-pane-config.js +54 -0
  197. package/dist/runtime-pane-config.js.map +1 -0
  198. package/dist/runtime-pane-host.d.ts +43 -0
  199. package/dist/runtime-pane-host.js +403 -0
  200. package/dist/runtime-pane-host.js.map +1 -0
  201. package/dist/runtime-pane-job-owner.d.ts +1 -0
  202. package/dist/runtime-pane-job-owner.js +29 -0
  203. package/dist/runtime-pane-job-owner.js.map +1 -0
  204. package/dist/runtime-pane-job.ps1 +116 -0
  205. package/dist/runtime-pane-link.d.ts +40 -0
  206. package/dist/runtime-pane-link.js +246 -0
  207. package/dist/runtime-pane-link.js.map +1 -0
  208. package/dist/runtime-pane-mcp-protocol.d.ts +32 -0
  209. package/dist/runtime-pane-mcp-protocol.js +39 -0
  210. package/dist/runtime-pane-mcp-protocol.js.map +1 -0
  211. package/dist/runtime-pane-mcp-relay.d.ts +17 -0
  212. package/dist/runtime-pane-mcp-relay.js +70 -0
  213. package/dist/runtime-pane-mcp-relay.js.map +1 -0
  214. package/dist/runtime-pane-mcp.d.ts +43 -0
  215. package/dist/runtime-pane-mcp.js +137 -0
  216. package/dist/runtime-pane-mcp.js.map +1 -0
  217. package/dist/runtime-pane-native.d.ts +45 -0
  218. package/dist/runtime-pane-native.js +65 -0
  219. package/dist/runtime-pane-native.js.map +1 -0
  220. package/dist/runtime-pane-output.d.ts +19 -0
  221. package/dist/runtime-pane-output.js +53 -0
  222. package/dist/runtime-pane-output.js.map +1 -0
  223. package/dist/runtime-pane-port.d.ts +134 -0
  224. package/dist/runtime-pane-port.js +537 -0
  225. package/dist/runtime-pane-port.js.map +1 -0
  226. package/dist/runtime-pane-private.d.ts +14 -0
  227. package/dist/runtime-pane-private.js +51 -0
  228. package/dist/runtime-pane-private.js.map +1 -0
  229. package/dist/runtime-pane-private.ps1 +14 -0
  230. package/dist/runtime-pane-process.d.ts +4 -0
  231. package/dist/runtime-pane-process.js +108 -0
  232. package/dist/runtime-pane-process.js.map +1 -0
  233. package/dist/runtime-pane-protocol.d.ts +169 -0
  234. package/dist/runtime-pane-protocol.js +189 -0
  235. package/dist/runtime-pane-protocol.js.map +1 -0
  236. package/dist/runtime-pane-screen.d.ts +19 -0
  237. package/dist/runtime-pane-screen.js +76 -0
  238. package/dist/runtime-pane-screen.js.map +1 -0
  239. package/dist/runtime-pane-service.d.ts +11 -0
  240. package/dist/runtime-pane-service.js +221 -0
  241. package/dist/runtime-pane-service.js.map +1 -0
  242. package/dist/runtime-pane-stdio-protocol.d.ts +54 -0
  243. package/dist/runtime-pane-stdio-protocol.js +94 -0
  244. package/dist/runtime-pane-stdio-protocol.js.map +1 -0
  245. package/dist/runtime-pane-stdio.d.ts +3 -0
  246. package/dist/runtime-pane-stdio.js +123 -0
  247. package/dist/runtime-pane-stdio.js.map +1 -0
  248. package/dist/runtime-pane-store.d.ts +33 -0
  249. package/dist/runtime-pane-store.js +164 -0
  250. package/dist/runtime-pane-store.js.map +1 -0
  251. package/dist/runtime-pane-transcript-protocol.d.ts +43 -0
  252. package/dist/runtime-pane-transcript-protocol.js +58 -0
  253. package/dist/runtime-pane-transcript-protocol.js.map +1 -0
  254. package/dist/runtime-pane-transcript.d.ts +45 -0
  255. package/dist/runtime-pane-transcript.js +605 -0
  256. package/dist/runtime-pane-transcript.js.map +1 -0
  257. package/dist/runtime-pane-worker.d.ts +1 -0
  258. package/dist/runtime-pane-worker.js +154 -0
  259. package/dist/runtime-pane-worker.js.map +1 -0
  260. package/dist/runtime-protocol.d.ts +149 -0
  261. package/dist/runtime-protocol.js +19 -0
  262. package/dist/runtime-protocol.js.map +1 -0
  263. package/dist/runtime-switches.d.ts +79 -0
  264. package/dist/runtime-switches.js +90 -0
  265. package/dist/runtime-switches.js.map +1 -0
  266. package/dist/runtime-transcript-delta-reader.d.ts +23 -0
  267. package/dist/runtime-transcript-delta-reader.js +74 -0
  268. package/dist/runtime-transcript-delta-reader.js.map +1 -0
  269. package/dist/runtime-transcript-source.d.ts +36 -0
  270. package/dist/runtime-transcript-source.js +189 -0
  271. package/dist/runtime-transcript-source.js.map +1 -0
  272. package/dist/runtime-windows-bridge.d.ts +41 -0
  273. package/dist/runtime-windows-bridge.js +157 -0
  274. package/dist/runtime-windows-bridge.js.map +1 -0
  275. package/dist/settings-api.js +58 -0
  276. package/dist/settings-api.js.map +1 -1
  277. package/dist/settings-change.js +28 -0
  278. package/dist/settings-change.js.map +1 -1
  279. package/dist/settings-confirmation.d.ts +15 -1
  280. package/dist/settings-confirmation.js +46 -9
  281. package/dist/settings-confirmation.js.map +1 -1
  282. package/dist/settings-effect.js +23 -1
  283. package/dist/settings-effect.js.map +1 -1
  284. package/dist/settings-http-confirmation.js +11 -2
  285. package/dist/settings-http-confirmation.js.map +1 -1
  286. package/dist/tmux-control.d.ts +2 -1
  287. package/dist/tmux-control.js.map +1 -1
  288. package/dist/tmux-manager.d.ts +2 -1
  289. package/dist/tmux-manager.js.map +1 -1
  290. package/dist/tmux-pane-host.d.ts +26 -0
  291. package/dist/tmux-pane-host.js +25 -0
  292. package/dist/tmux-pane-host.js.map +1 -0
  293. package/dist/topic-commands.js +3 -0
  294. package/dist/topic-commands.js.map +1 -1
  295. package/dist/transcript-delta-reader.d.ts +1 -1
  296. package/dist/transcript-delta-reader.js +1 -1
  297. package/dist/transcript-delta-reader.js.map +1 -1
  298. package/dist/transcript-monitor.d.ts +3 -0
  299. package/dist/transcript-monitor.js +22 -46
  300. package/dist/transcript-monitor.js.map +1 -1
  301. package/dist/transcript-needles.d.ts +35 -0
  302. package/dist/transcript-needles.js +158 -0
  303. package/dist/transcript-needles.js.map +1 -0
  304. package/dist/transcript-records.d.ts +21 -0
  305. package/dist/transcript-records.js +140 -0
  306. package/dist/transcript-records.js.map +1 -0
  307. package/dist/transcript-sources.d.ts +5 -0
  308. package/dist/transcript-sources.js +8 -79
  309. package/dist/transcript-sources.js.map +1 -1
  310. package/dist/types.d.ts +21 -0
  311. package/dist/ui/agent-proposals.js +90 -0
  312. package/dist/ui/agent-runtime.js +106 -0
  313. package/dist/ui/chat-store.js +13 -2
  314. package/dist/ui/chat-strings.js +48 -0
  315. package/dist/ui/cli-picker.js +42 -0
  316. package/dist/ui/native-instance-settings.js +47 -0
  317. package/dist/ui/native-pane-recovery.js +45 -0
  318. package/dist/ui/panel-chat.js +61 -32
  319. package/dist/ui/panel-details.js +2 -1
  320. package/dist/ui/panel-fleet.js +99 -18
  321. package/dist/ui/panel-needs.js +152 -3
  322. package/dist/ui/panel-runtimes.js +231 -0
  323. package/dist/ui/panel-settings.js +14 -8
  324. package/dist/ui/panel-windows-agent.js +86 -0
  325. package/dist/ui/panel-windows-cli.js +143 -0
  326. package/dist/ui/provider-marks.js +83 -0
  327. package/dist/ui/runtime-catalog.js +55 -0
  328. package/dist/ui/settings-catalog.js +37 -10
  329. package/dist/ui/settings-confirm.js +3 -1
  330. package/dist/ui/settings-dialogs.js +14 -5
  331. package/dist/ui/settings-registry.js +5 -0
  332. package/dist/ui/settings-strings.js +14 -0
  333. package/dist/ui/shared/app-i18n.js +2 -2
  334. package/dist/ui/shared/app-route.js +6 -2
  335. package/dist/ui/shared/app-shell.js +3 -2
  336. package/dist/ui/shared/app-store.js +1 -0
  337. package/dist/ui/shared/app-stream.js +3 -1
  338. package/dist/ui/shared/app.css +301 -0
  339. package/dist/ui/shared/app.js +4 -0
  340. package/dist/ui/shared/header-tools.js +6 -4
  341. package/dist/ui/shared/instance-nav.js +20 -4
  342. package/dist/ui/shared/instance-switch.js +4 -3
  343. package/dist/ui/shared/ui-menu.js +28 -8
  344. package/dist/ui/shared/view-strings.js +6 -0
  345. package/dist/ui/windows-agents-nav.js +2 -0
  346. package/dist/ui/windows-cli-catalog.js +79 -0
  347. package/dist/update-check.d.ts +8 -2
  348. package/dist/update-check.js +5 -2
  349. package/dist/update-check.js.map +1 -1
  350. package/dist/web-api.d.ts +25 -0
  351. package/dist/web-api.js +171 -6
  352. package/dist/web-api.js.map +1 -1
  353. package/dist/web-chat-history.d.ts +19 -2
  354. package/dist/web-chat-history.js +72 -3
  355. package/dist/web-chat-history.js.map +1 -1
  356. package/dist/web-shell-routes.d.ts +4 -1
  357. package/dist/web-shell-routes.js +7 -2
  358. package/dist/web-shell-routes.js.map +1 -1
  359. package/dist/windows-agents.d.ts +112 -0
  360. package/dist/windows-agents.js +463 -0
  361. package/dist/windows-agents.js.map +1 -0
  362. package/dist/windows-cli-api.d.ts +23 -0
  363. package/dist/windows-cli-api.js +158 -0
  364. package/dist/windows-cli-api.js.map +1 -0
  365. package/dist/windows-cli-providers.d.ts +115 -0
  366. package/dist/windows-cli-providers.js +429 -0
  367. package/dist/windows-cli-providers.js.map +1 -0
  368. package/dist/windows-cli-worker.d.ts +58 -0
  369. package/dist/windows-cli-worker.js +479 -0
  370. package/dist/windows-cli-worker.js.map +1 -0
  371. package/dist/windows-cli.d.ts +115 -0
  372. package/dist/windows-cli.js +402 -0
  373. package/dist/windows-cli.js.map +1 -0
  374. package/dist/windows-native-mcp.d.ts +19 -0
  375. package/dist/windows-native-mcp.js +143 -0
  376. package/dist/windows-native-mcp.js.map +1 -0
  377. package/dist/windows-pane-mcp.d.ts +26 -0
  378. package/dist/windows-pane-mcp.js +187 -0
  379. package/dist/windows-pane-mcp.js.map +1 -0
  380. package/package.json +9 -3
  381. package/templates/runtime-assets/conpty-LICENSE +21 -0
  382. package/templates/runtime-assets/conpty-NOTICE.md +503 -0
  383. package/templates/runtime-assets/local-pane-stage.ps1 +101 -0
  384. package/templates/runtime-assets/runtime-pane-job.ps1 +116 -0
  385. package/templates/runtime-assets/runtime-pane-private.ps1 +14 -0
  386. package/templates/runtime-assets/xterm-LICENSE +21 -0
@@ -0,0 +1,137 @@
1
+ /** Coordinator authority for a persistent pane. Durable call identities survive reconnects without replaying tools. */
2
+ import { createHash, randomBytes, randomUUID } from "node:crypto";
3
+ import { lstatSync, readFileSync } from "node:fs";
4
+ import { atomicWriteFileSync } from "./atomic-write.js";
5
+ import { runtimeJobDigest } from "./runtime-client-store.js";
6
+ import { validatePaneMcpBody, validatePaneMcpOwner, samePaneMcpOwner } from "./runtime-pane-mcp-protocol.js";
7
+ import { OUTBOUND_TOOL_SCHEMAS } from "./channel/mcp-tools.js";
8
+ const errorResult = (text) => ({ content: [{ type: "text", text }], isError: true });
9
+ /** One ledger per exact pane launch; no plaintext arguments, result, provider credential or user input is persisted. */
10
+ export class PaneMcpAuthorityLease {
11
+ file;
12
+ authority;
13
+ ledger;
14
+ closed = false;
15
+ inFlight = new Map();
16
+ results = new Map();
17
+ presence;
18
+ constructor(file, authority) {
19
+ this.file = file;
20
+ this.authority = authority;
21
+ validatePaneMcpOwner(authority.owner);
22
+ this.ledger = { version: 1, machineId: authority.machineId, owner: { ...authority.owner }, calls: {} };
23
+ try {
24
+ const stat = lstatSync(file);
25
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 16 * 1024 * 1024 || process.getuid && (stat.uid !== process.getuid() || stat.mode & 0o077))
26
+ throw Error("Unsafe pane tool ledger");
27
+ const raw = JSON.parse(readFileSync(file, "utf8"));
28
+ if (raw?.version !== 1 || raw.machineId !== authority.machineId || !samePaneMcpOwner(validatePaneMcpOwner(raw.owner), authority.owner)
29
+ || !raw.calls || typeof raw.calls !== "object" || Array.isArray(raw.calls) || Object.keys(raw.calls).length > 65_536
30
+ || Object.entries(raw.calls).some(([key, row]) => !/^[a-f0-9]{64}$/.test(key) || !row || !/^[a-f0-9]{64}$/.test(row.digest)
31
+ || !/^[a-f0-9]{64}$/.test(row.responseId) || !/^[a-f0-9-]{36}$/i.test(row.operationId) || !["prepared", "done", "written"].includes(row.state)))
32
+ throw Error("Pane tool ledger scope differs");
33
+ this.ledger = raw;
34
+ }
35
+ catch (error) {
36
+ if (error.code !== "ENOENT")
37
+ throw error;
38
+ }
39
+ }
40
+ close() { this.closed = true; this.results.clear(); this.presence = undefined; }
41
+ /** A retained helper must re-prove itself on the current transport after reconnect. No PID guessing. */
42
+ serving() {
43
+ const presence = this.presence;
44
+ return !!presence && performance.now() - presence.at < 15_000 && !this.closed && this.authority.current()
45
+ && this.authority.transportEpoch?.() === presence.epoch;
46
+ }
47
+ current(transport) { return !this.closed && transport() && this.authority.current(); }
48
+ save() { atomicWriteFileSync(this.file, JSON.stringify(this.ledger), { mode: 0o600 }); }
49
+ key(body) {
50
+ return createHash("sha256").update(JSON.stringify([body.helperId, body.callId])).digest("hex");
51
+ }
52
+ async handle(machineId, raw, transport) {
53
+ const body = validatePaneMcpBody(raw);
54
+ const current = () => this.current(transport);
55
+ if (machineId !== this.authority.machineId || !samePaneMcpOwner(body.owner, this.authority.owner) || !current())
56
+ throw Error("Pane tool owner is no longer current");
57
+ if (body.method === "presence") {
58
+ const epoch = this.authority.transportEpoch?.();
59
+ if (!epoch)
60
+ throw Error("Pane helper transport identity is unavailable");
61
+ this.presence = { at: performance.now(), epoch };
62
+ return { result: { ok: true } };
63
+ }
64
+ if (body.method === "tools/list")
65
+ return { result: { tools: this.authority.menu() } };
66
+ const key = this.key(body), previous = this.ledger.calls[key];
67
+ if (body.method === "response-written") {
68
+ if (!previous || previous.state === "prepared" || previous.responseId !== body.responseId)
69
+ throw Error("Pane tool response receipt differs");
70
+ if (previous.state !== "written") {
71
+ previous.state = "written";
72
+ this.save();
73
+ // ACK is already written durably before delivery evidence is published. Replays can never dispatch a tool.
74
+ this.authority.responseWritten(previous.operationId);
75
+ }
76
+ this.results.delete(key);
77
+ return { result: { ok: true } };
78
+ }
79
+ const { name: tool, arguments: args } = body.params;
80
+ if (!this.authority.allowed(tool, args))
81
+ throw Error("Pane tool access was revoked");
82
+ const parsed = OUTBOUND_TOOL_SCHEMAS.get(tool)?.safeParse(args);
83
+ if (!parsed?.success)
84
+ return { result: errorResult("Invalid tool arguments") };
85
+ const checked = parsed.data, digest = runtimeJobDigest({ tool, args: checked });
86
+ if (previous && previous.digest !== digest)
87
+ throw Error("Pane tool identity has different arguments");
88
+ if (previous) {
89
+ if (this.inFlight.has(key))
90
+ return this.inFlight.get(key);
91
+ if (this.results.has(key))
92
+ return { result: this.results.get(key), responseId: previous.responseId };
93
+ // A restart or acknowledged call retains its identity, never replays a mutation to manufacture another result.
94
+ return { result: errorResult(`Tool outcome is retained and will not be repeated. Inspect operation ${previous.operationId}.`) };
95
+ }
96
+ if (this.inFlight.size >= 32 || this.results.size >= 64 || Object.keys(this.ledger.calls).length >= 65_536)
97
+ throw Error("Pane tool receipt backlog or ledger capacity reached");
98
+ const call = { digest, operationId: randomUUID(), responseId: randomBytes(32).toString("hex"), state: "prepared" };
99
+ this.ledger.calls[key] = call;
100
+ try {
101
+ this.save();
102
+ }
103
+ catch (error) {
104
+ delete this.ledger.calls[key];
105
+ throw error;
106
+ }
107
+ const allowed = () => current() && this.authority.allowed(tool, checked);
108
+ const run = Promise.resolve().then(async () => {
109
+ if (!allowed())
110
+ throw Error("Pane tool permission was revoked before dispatch");
111
+ let response;
112
+ try {
113
+ const value = await this.authority.invoke({ tool, args: checked, operationId: call.operationId }, allowed);
114
+ if (value.error)
115
+ response = errorResult("AgEnD tool operation failed; inspect its operation before retrying");
116
+ else {
117
+ const text = typeof value.result === "string" ? value.result : JSON.stringify(value.result);
118
+ response = text === undefined ? errorResult("AgEnD returned no tool result") : { content: [{ type: "text", text }] };
119
+ if (Buffer.byteLength(JSON.stringify(response)) > 128 * 1024)
120
+ response = errorResult(`Tool result exceeds the pane response limit. Inspect operation ${call.operationId}; do not repeat an uncertain mutation.`);
121
+ }
122
+ }
123
+ catch {
124
+ response = errorResult(`Tool outcome is unconfirmed. Inspect operation ${call.operationId}; do not repeat it.`);
125
+ }
126
+ call.state = "done";
127
+ this.save();
128
+ this.results.set(key, response);
129
+ if (!allowed())
130
+ throw Error("Pane tool lease expired before returning its result");
131
+ return { result: response, responseId: call.responseId };
132
+ }).finally(() => { this.inFlight.delete(key); });
133
+ this.inFlight.set(key, run);
134
+ return run;
135
+ }
136
+ }
137
+ //# sourceMappingURL=runtime-pane-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-pane-mcp.js","sourceRoot":"","sources":["../src/runtime-pane-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /** Closed local helper protocol. It is never accepted from an unauthenticated network peer. */
2
+ import type { PaneMcpConnection } from "./windows-pane-mcp.js";
3
+ import type { NativePaneConfig } from "./runtime-pane-config.js";
4
+ import type { RuntimePaneLaunch } from "./runtime-pane-protocol.js";
5
+ /** Cache admission and the owned worker's final pre-spawn check share the same audited release set. */
6
+ export declare function assertAuditedNativePaneVersion(provider: string, line: string | null): void;
7
+ export interface NativePaneOwner {
8
+ directory: string;
9
+ launchId: string;
10
+ mcp?: PaneMcpConnection;
11
+ }
12
+ export type NativePaneCommand = {
13
+ type: "start";
14
+ launch: RuntimePaneLaunch;
15
+ owner: NativePaneOwner;
16
+ } | {
17
+ type: "input";
18
+ data: string;
19
+ } | {
20
+ type: "resize";
21
+ columns: number;
22
+ rows: number;
23
+ } | {
24
+ type: "pause" | "resume" | "close";
25
+ };
26
+ export type NativePaneFrame = {
27
+ type: "ready";
28
+ pid: number;
29
+ } | {
30
+ type: "output";
31
+ data: string;
32
+ } | {
33
+ type: "exit" | "tree.exit";
34
+ code: number;
35
+ } | {
36
+ type: "error";
37
+ message: string;
38
+ };
39
+ /** JSON's basic-string escapes are valid TOML; DEL needs an explicit escape and invalid Unicode is refused. */
40
+ export declare function nativeDeveloperInstructions(text: string): string;
41
+ /** Count node-pty 1.1.0's exact Windows quoting, including its treatment of already-enclosed arguments. */
42
+ export declare function nativePaneCommandLineLength(executable: string, args: readonly string[]): number;
43
+ export declare function assertNativePaneCommandLine(executable: string, args: readonly string[]): void;
44
+ /** Provider arguments come from validated configuration, never a shell RPC. */
45
+ export declare function persistentNativeArguments(launch: RuntimePaneLaunch, config?: NativePaneConfig): string[];
@@ -0,0 +1,65 @@
1
+ import { nativeUpdateGuard, nativeClaudeFilePolicyArgs } from "./windows-cli-providers.js";
2
+ /** Cache admission and the owned worker's final pre-spawn check share the same audited release set. */
3
+ export function assertAuditedNativePaneVersion(provider, line) {
4
+ const expected = provider === "codex" ? "0.165.0" : provider === "claude-code" ? "2.1.316" : null;
5
+ const versions = typeof line === "string" && line.length <= 4096 ? line.match(/\b\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?\b/g) : null;
6
+ if (!expected || versions?.length !== 1 || versions[0] !== expected)
7
+ throw Error("This native CLI version has not passed persistent-pane acceptance");
8
+ }
9
+ /** JSON's basic-string escapes are valid TOML; DEL needs an explicit escape and invalid Unicode is refused. */
10
+ export function nativeDeveloperInstructions(text) {
11
+ if (Buffer.from(text, "utf8").toString("utf8") !== text)
12
+ throw Error("Pane instructions contain invalid Unicode");
13
+ return `developer_instructions=${JSON.stringify(text).replace(/\x7f/g, "\\u007f")}`;
14
+ }
15
+ /** Count node-pty 1.1.0's exact Windows quoting, including its treatment of already-enclosed arguments. */
16
+ export function nativePaneCommandLineLength(executable, args) {
17
+ const argv = [executable, ...args];
18
+ let size = argv.length - 1;
19
+ for (const arg of argv) {
20
+ const quote = arg === "" || /[ \t]/.test(arg) && arg.length > 1 && !(arg.startsWith('"') && arg.endsWith('"'));
21
+ if (quote)
22
+ size += 2;
23
+ let slashes = 0;
24
+ for (let i = 0; i < arg.length; i++) {
25
+ if (arg[i] === "\\")
26
+ slashes++;
27
+ else if (arg[i] === '"') {
28
+ size += slashes * 2 + 2;
29
+ slashes = 0;
30
+ }
31
+ else {
32
+ size += slashes + 1;
33
+ slashes = 0;
34
+ }
35
+ }
36
+ size += slashes * (quote ? 2 : 1);
37
+ }
38
+ return size;
39
+ }
40
+ export function assertNativePaneCommandLine(executable, args) {
41
+ // CreateProcessW's limit is 32,767 UTF-16 units including NUL. Leave margin; never truncate role/tool instructions.
42
+ if (nativePaneCommandLineLength(executable, args) > 30_000)
43
+ throw Error("Native pane launch exceeds the Windows command-line limit; reduce this agent's instructions");
44
+ }
45
+ /** Provider arguments come from validated configuration, never a shell RPC. */
46
+ export function persistentNativeArguments(launch, config) {
47
+ const model = launch.model ? ["--model", launch.model] : [];
48
+ const mcp = config?.mcp;
49
+ const prefix = mcp ? ["-c", `mcp_servers.${mcp.serverName}.command=${JSON.stringify(mcp.nodePath)}`, "-c",
50
+ `mcp_servers.${mcp.serverName}.args=${JSON.stringify([mcp.helperPath, "--connection-file", mcp.connectionPath])}`, "-c",
51
+ // Only this launch's authenticated AgEnD server; its live Fleet permissions and General confirms still decide each call.
52
+ `mcp_servers.${mcp.serverName}.default_tools_approval_mode="approve"`] : [];
53
+ // Each owned Job must contain only its own CLI tree. A shared Codex app-server would outlive or couple panes.
54
+ // This is the fleet agent's own developer-role slot. Built-in model and project instructions remain provider-owned.
55
+ // A shared AGENTS.md identity block would give concurrent same-cwd agents each other's roles.
56
+ if (launch.cli === "codex")
57
+ return ["--no-daemon", ...nativeUpdateGuard("codex"), ...prefix,
58
+ ...(launch.instructions ? ["-c", nativeDeveloperInstructions(launch.instructions)] : []),
59
+ "-c", 'tui.status_line=["context-remaining"]', "--sandbox", launch.sandbox, "--ask-for-approval", "on-request", "-C", launch.cwd,
60
+ ...model, ...(launch.sessionId ? ["resume", launch.sessionId] : [])];
61
+ return [...model, ...nativeClaudeFilePolicyArgs(), ...(config?.instructionsFile ? ["--append-system-prompt-file", config.instructionsFile] : []),
62
+ ...(mcp ? ["--strict-mcp-config", "--mcp-config", mcp.configPath, "--allowedTools", mcp.tools.map(tool => `mcp__${mcp.serverName}__${tool}`).join(",")] : []), "--permission-mode", launch.sandbox === "workspace-write" ? "acceptEdits" : "default", ...(launch.sandbox === "read-only" ? ["--tools", "Read,Glob,Grep"] : []),
63
+ ...(launch.sessionId ? ["--resume", launch.sessionId] : config?.sessionId ? ["--session-id", config.sessionId] : [])];
64
+ }
65
+ //# sourceMappingURL=runtime-pane-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-pane-native.js","sourceRoot":"","sources":["../src/runtime-pane-native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Bounded raw-output ring. The runner never accepts a coordinator log path. */
2
+ export declare const PANE_OUTPUT_CHUNK: number;
3
+ export interface PaneOutputBatch {
4
+ from: number;
5
+ next: number;
6
+ gap: boolean;
7
+ data: string;
8
+ exited: boolean;
9
+ }
10
+ export declare function validatePaneOutputBatch(value: unknown, requested: number): PaneOutputBatch;
11
+ export declare class RuntimePaneOutputBuffer {
12
+ private limit;
13
+ private chunks;
14
+ private retained;
15
+ private total;
16
+ constructor(limit?: number);
17
+ append(text: string): void;
18
+ read(offset: number, exited: boolean): PaneOutputBatch;
19
+ }
@@ -0,0 +1,53 @@
1
+ /** Bounded raw-output ring. The runner never accepts a coordinator log path. */
2
+ export const PANE_OUTPUT_CHUNK = 128 * 1024;
3
+ export function validatePaneOutputBatch(value, requested) {
4
+ if (!value || typeof value !== "object" || Array.isArray(value))
5
+ throw Error("Invalid pane output frame");
6
+ const v = value;
7
+ if (Object.keys(v).some(key => !["from", "next", "gap", "data", "exited"].includes(key)) || !Number.isSafeInteger(v.from) || !Number.isSafeInteger(v.next) || v.from < requested || v.next < v.from
8
+ || typeof v.gap !== "boolean" || v.gap !== (v.from !== requested) || typeof v.exited !== "boolean" || typeof v.data !== "string" || v.data.length > Math.ceil(PANE_OUTPUT_CHUNK / 3) * 4
9
+ || Buffer.from(v.data, "base64").toString("base64") !== v.data || Buffer.from(v.data, "base64").length !== v.next - v.from)
10
+ throw Error("Invalid pane output frame");
11
+ return v;
12
+ }
13
+ export class RuntimePaneOutputBuffer {
14
+ limit;
15
+ chunks = [];
16
+ retained = 0;
17
+ total = 0;
18
+ constructor(limit = 4 * 1024 * 1024) {
19
+ this.limit = limit;
20
+ }
21
+ append(text) { let bytes = Buffer.from(text); if (!bytes.length)
22
+ return; this.total += bytes.length; if (!Number.isSafeInteger(this.total))
23
+ throw Error("Pane output offset overflow"); if (bytes.length > this.limit)
24
+ bytes = bytes.subarray(bytes.length - this.limit); this.chunks.push(bytes); this.retained += bytes.length; while (this.chunks.length > 1024) {
25
+ this.retained -= this.chunks.shift().length;
26
+ } while (this.retained > this.limit) {
27
+ const excess = this.retained - this.limit, head = this.chunks[0];
28
+ if (head.length <= excess) {
29
+ this.chunks.shift();
30
+ this.retained -= head.length;
31
+ }
32
+ else {
33
+ this.chunks[0] = head.subarray(excess);
34
+ this.retained -= excess;
35
+ }
36
+ } }
37
+ read(offset, exited) {
38
+ if (!Number.isSafeInteger(offset) || offset < 0 || offset > this.total)
39
+ throw Error("Pane output cursor differs");
40
+ const oldest = this.total - this.retained, from = Math.max(offset, oldest), end = Math.min(this.total, from + PANE_OUTPUT_CHUNK), pieces = [];
41
+ let at = oldest;
42
+ for (const chunk of this.chunks) {
43
+ const finish = at + chunk.length;
44
+ if (finish > from && at < end)
45
+ pieces.push(chunk.subarray(Math.max(0, from - at), Math.min(chunk.length, end - at)));
46
+ at = finish;
47
+ if (at >= end)
48
+ break;
49
+ }
50
+ return { from, next: end, gap: from !== offset, data: Buffer.concat(pieces).toString("base64"), exited };
51
+ }
52
+ }
53
+ //# sourceMappingURL=runtime-pane-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-pane-output.js","sourceRoot":"","sources":["../src/runtime-pane-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /** Coordinator-side pane handle. Remote PIDs are never exposed as local supervision targets. */
2
+ import { EventEmitter } from "node:events";
3
+ import { type RuntimePaneLaunch, type RuntimePaneRequest, type RuntimePaneSnapshot } from "./runtime-pane-protocol.js";
4
+ import type { Pane, PaneHost, PaneInputProof, PaneKey, PaneObservation, PaneSize, PaneStatus } from "./pane-port.js";
5
+ import type { RuntimeCoordinatorEvent } from "./runtime-coordinator.js";
6
+ import { type PaneTranscriptBaseline, type PaneTranscriptCursor, type PaneTranscriptWireBatch, type RuntimeTranscriptReference } from "./runtime-pane-transcript-protocol.js";
7
+ export interface PaneEndpoint {
8
+ online(): boolean;
9
+ call(request: RuntimePaneRequest): Promise<unknown>;
10
+ subscribe(listener: (event: RuntimeCoordinatorEvent) => void): () => void;
11
+ machineId: string;
12
+ }
13
+ export declare class RuntimePanePort implements Pane {
14
+ private endpoint;
15
+ private file;
16
+ private inputIsComposer;
17
+ private record;
18
+ private tail;
19
+ private error;
20
+ private closing;
21
+ private outputLog;
22
+ private lastObservation;
23
+ private inputCapture;
24
+ private inputNotSent;
25
+ constructor(endpoint: PaneEndpoint, file: string, launch: RuntimePaneLaunch, inputIsComposer?: (screen: string) => boolean);
26
+ private save;
27
+ private serialize;
28
+ private accept;
29
+ open(): Promise<{
30
+ windowId: string;
31
+ reattached: boolean;
32
+ }>;
33
+ /** Read-only recovery of an open whose ACK was lost. Never sends open or starts a process. */
34
+ inspectRetained(): Promise<RuntimePaneSnapshot>;
35
+ /** Idempotent metadata binding; it never types into the CLI or replays an input. */
36
+ bindConversation(sessionId: string): Promise<RuntimePaneSnapshot>;
37
+ /** Intent before the one automatic /status. A lost coordinator must inspect its result, never type it twice. */
38
+ beginStatusRequest(): Promise<boolean>;
39
+ runtimeTranscriptReference(cursor: PaneTranscriptCursor): RuntimeTranscriptReference;
40
+ readTranscript(cursor: PaneTranscriptCursor, current?: () => boolean): Promise<PaneTranscriptWireBatch>;
41
+ readTranscriptBaseline(cursor: PaneTranscriptCursor, current?: () => boolean): Promise<PaneTranscriptBaseline>;
42
+ isTranscriptObservationCurrent(ref: RuntimeTranscriptReference): boolean;
43
+ private mutate;
44
+ private target;
45
+ createWindow(): Promise<string>;
46
+ respawnWindow(): Promise<void>;
47
+ killWindow(): Promise<void>;
48
+ killWindowConfirmed(): Promise<boolean>;
49
+ private closeOwned;
50
+ isWindowAlive(): Promise<boolean>;
51
+ setRemainOnExit(): Promise<void>;
52
+ getPaneStatus(): Promise<PaneStatus | null>;
53
+ getWindowGeometry(): Promise<PaneSize & {
54
+ mode: string;
55
+ }>;
56
+ getPaneInputMode(): Promise<"unknown">;
57
+ sendKeys(text: string, proof?: PaneInputProof): Promise<boolean>;
58
+ sendKeySequence(keys: readonly string[]): Promise<boolean>;
59
+ sendSpecialKey(key: PaneKey, _timeoutMs?: number, proof?: PaneInputProof): Promise<boolean>;
60
+ deleteBackward(count: number): Promise<boolean>;
61
+ lastInputWasNotSent(): boolean;
62
+ getLastSendSpecialKeyError(): string | null;
63
+ getLastPasteError(): string | null;
64
+ isLastPasteFailureRecoverable(): boolean;
65
+ pasteText(text: string): Promise<boolean>;
66
+ pasteBuffer(text: string, opts?: {
67
+ guard?: () => boolean;
68
+ proof?: PaneInputProof;
69
+ }): Promise<boolean>;
70
+ pipeOutput(logPath: string): Promise<void>;
71
+ closeOutput(): void;
72
+ private captureCurrent;
73
+ private capture;
74
+ capturePane(): Promise<string>;
75
+ capturePaneWithHistory(lines?: number): Promise<string>;
76
+ capturePaneJoined(lines?: number): Promise<string>;
77
+ getWindowId(): string;
78
+ /** A fresh authenticated endpoint proved the exact retained exit; retire an obsolete local relay without IO. */
79
+ recordConfirmedExit(raw: RuntimePaneSnapshot, current: () => void): Promise<void>;
80
+ observedSnapshot(): RuntimePaneSnapshot | null;
81
+ ownedSnapshot(): RuntimePaneSnapshot | null;
82
+ }
83
+ /** Passive output source. A disconnected link never proves idle; a reconnect resets all observation fences. */
84
+ export declare class RuntimePaneObservation extends EventEmitter implements PaneObservation {
85
+ private endpoint;
86
+ private owned;
87
+ private idleMs;
88
+ private remove;
89
+ private resetAt;
90
+ private last;
91
+ private windows;
92
+ private wasOnline;
93
+ private sweep;
94
+ constructor(endpoint: PaneEndpoint, owned: (id: string) => RuntimePaneSnapshot | null, idleMs?: number);
95
+ start(): void;
96
+ stop(): void;
97
+ registerWindow(id: string): Promise<void>;
98
+ unregisterWindow(id: string): void;
99
+ getObservationResetAt(): number;
100
+ isObservationBlind(): boolean;
101
+ isIdle(id: string): boolean;
102
+ getLastOutputAt(id: string): number | undefined;
103
+ hasOutputSince(id: string, ts: number): boolean;
104
+ private wait;
105
+ waitForIdle(id: string, timeout?: number): Promise<boolean>;
106
+ waitUntilIdle(id: string, timeout?: number, abandoned?: () => boolean): Promise<boolean>;
107
+ waitForOutput(id: string, timeout?: number): Promise<boolean>;
108
+ }
109
+ /** One configured agent's host facade. Session/PID APIs never cross the machine boundary as local process evidence. */
110
+ export declare class RuntimePaneHostPort implements PaneHost {
111
+ readonly pane: RuntimePanePort;
112
+ private endpoint;
113
+ readonly executionHost: "remote";
114
+ constructor(pane: RuntimePanePort, endpoint: PaneEndpoint);
115
+ bind(_session: string, id: string): Pane;
116
+ ensureSession(): Promise<void>;
117
+ sessionExists(): Promise<boolean>;
118
+ sessionExistsStrict(): Promise<boolean>;
119
+ killSession(): Promise<void>;
120
+ getServerPid(): Promise<null>;
121
+ listWindows(): Promise<Array<{
122
+ id: string;
123
+ name: string;
124
+ }>>;
125
+ listWindowsStrict(): Promise<Array<{
126
+ id: string;
127
+ name: string;
128
+ }>>;
129
+ getPanePid(): Promise<null>;
130
+ listPanePids(): Promise<Array<{
131
+ pid: number;
132
+ window: string;
133
+ }>>;
134
+ }