@songsid/agend 2.3.5-alpha.5 → 2.3.5-beta.1

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 (976) hide show
  1. package/README.md +0 -2
  2. package/README.zh-TW.md +0 -2
  3. package/THIRD_PARTY_NOTICES.md +0 -68
  4. package/dist/agent-endpoint.d.ts +1 -5
  5. package/dist/agent-endpoint.js +2 -12
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-file-read.js +1 -1
  8. package/dist/agent-file-read.js.map +1 -1
  9. package/dist/auth-api.d.ts +0 -48
  10. package/dist/auth-api.js +4 -250
  11. package/dist/auth-api.js.map +1 -1
  12. package/dist/authority/session-authorizations.d.ts +2 -0
  13. package/dist/authority/session-authorizations.js +7 -1
  14. package/dist/authority/session-authorizations.js.map +1 -1
  15. package/dist/authority/web-authority.d.ts +2 -12
  16. package/dist/authority/web-authority.js +4 -25
  17. package/dist/authority/web-authority.js.map +1 -1
  18. package/dist/backend/claude-code.d.ts +12 -15
  19. package/dist/backend/claude-code.js +133 -152
  20. package/dist/backend/claude-code.js.map +1 -1
  21. package/dist/backend/codex-footer-hints.d.ts +0 -3
  22. package/dist/backend/codex-footer-hints.js +0 -14
  23. package/dist/backend/codex-footer-hints.js.map +1 -1
  24. package/dist/backend/codex-package.d.ts +2 -5
  25. package/dist/backend/codex-package.js +5 -1
  26. package/dist/backend/codex-package.js.map +1 -1
  27. package/dist/backend/codex-quota-history.js +19 -4
  28. package/dist/backend/codex-quota-history.js.map +1 -1
  29. package/dist/backend/codex.d.ts +115 -142
  30. package/dist/backend/codex.js +1094 -1187
  31. package/dist/backend/codex.js.map +1 -1
  32. package/dist/backend/grok.d.ts +0 -2
  33. package/dist/backend/grok.js +0 -22
  34. package/dist/backend/grok.js.map +1 -1
  35. package/dist/backend/types.d.ts +2 -7
  36. package/dist/backend/types.js.map +1 -1
  37. package/dist/bundled-tmux-guard.d.ts +21 -0
  38. package/dist/bundled-tmux-guard.js +96 -0
  39. package/dist/bundled-tmux-guard.js.map +1 -0
  40. package/dist/channel/ipc-bridge.d.ts +0 -2
  41. package/dist/channel/mcp-tools.js +2 -2
  42. package/dist/channel/mcp-tools.js.map +1 -1
  43. package/dist/classic-channel-manager.d.ts +2 -0
  44. package/dist/classic-channel-manager.js +5 -1
  45. package/dist/classic-channel-manager.js.map +1 -1
  46. package/dist/cli.js +30 -127
  47. package/dist/cli.js.map +1 -1
  48. package/dist/config-validator.js +13 -74
  49. package/dist/config-validator.js.map +1 -1
  50. package/dist/config.js +3 -17
  51. package/dist/config.js.map +1 -1
  52. package/dist/daemon.d.ts +5 -72
  53. package/dist/daemon.js +275 -869
  54. package/dist/daemon.js.map +1 -1
  55. package/dist/delivery-consumed-watch.d.ts +3 -15
  56. package/dist/delivery-consumed-watch.js +1 -23
  57. package/dist/delivery-consumed-watch.js.map +1 -1
  58. package/dist/delivery-outbox.d.ts +0 -5
  59. package/dist/delivery-outbox.js +4 -32
  60. package/dist/delivery-outbox.js.map +1 -1
  61. package/dist/delivery-reconciliation.d.ts +42 -2
  62. package/dist/delivery-reconciliation.js +164 -2
  63. package/dist/delivery-reconciliation.js.map +1 -1
  64. package/dist/doctor.js +9 -20
  65. package/dist/doctor.js.map +1 -1
  66. package/dist/fleet-context.d.ts +2 -2
  67. package/dist/fleet-level-config.d.ts +1 -1
  68. package/dist/fleet-level-config.js +0 -2
  69. package/dist/fleet-level-config.js.map +1 -1
  70. package/dist/fleet-manager.d.ts +9 -498
  71. package/dist/fleet-manager.js +202 -2849
  72. package/dist/fleet-manager.js.map +1 -1
  73. package/dist/general-instance.d.ts +0 -7
  74. package/dist/general-instance.js +3 -20
  75. package/dist/general-instance.js.map +1 -1
  76. package/dist/general-knowledge/skills/concepts/SKILL.md +18 -50
  77. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +2 -5
  78. package/dist/general-knowledge/skills/fleet-health/SKILL.md +2 -2
  79. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
  80. package/dist/general-knowledge/skills/tui-effort/SKILL.md +10 -10
  81. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +13 -23
  82. package/dist/instance-config-impact.js +4 -8
  83. package/dist/instance-config-impact.js.map +1 -1
  84. package/dist/instance-lifecycle.d.ts +3 -22
  85. package/dist/instance-lifecycle.js +176 -393
  86. package/dist/instance-lifecycle.js.map +1 -1
  87. package/dist/instructions.d.ts +0 -2
  88. package/dist/instructions.js +0 -6
  89. package/dist/instructions.js.map +1 -1
  90. package/dist/locale.js +2 -147
  91. package/dist/locale.js.map +1 -1
  92. package/dist/login-flows.d.ts +7 -8
  93. package/dist/login-flows.js +1 -24
  94. package/dist/login-flows.js.map +1 -1
  95. package/dist/ls-rows.js +4 -3
  96. package/dist/ls-rows.js.map +1 -1
  97. package/dist/muse-usage-relay.d.ts +2 -0
  98. package/dist/muse-usage-relay.js +5 -3
  99. package/dist/muse-usage-relay.js.map +1 -1
  100. package/dist/needs-you-hub.d.ts +0 -5
  101. package/dist/needs-you-hub.js +2 -18
  102. package/dist/needs-you-hub.js.map +1 -1
  103. package/dist/needs-you.d.ts +2 -45
  104. package/dist/needs-you.js +2 -26
  105. package/dist/needs-you.js.map +1 -1
  106. package/dist/office-share-page.js +3 -3
  107. package/dist/office-share-page.js.map +1 -1
  108. package/dist/office-share.d.ts +0 -11
  109. package/dist/office-share.js +0 -14
  110. package/dist/office-share.js.map +1 -1
  111. package/dist/outbound-handlers.d.ts +2 -30
  112. package/dist/outbound-handlers.js +4 -109
  113. package/dist/outbound-handlers.js.map +1 -1
  114. package/dist/outbound-schemas.d.ts +1 -71
  115. package/dist/outbound-schemas.js +14 -36
  116. package/dist/outbound-schemas.js.map +1 -1
  117. package/dist/pane-quota-history.d.ts +0 -2
  118. package/dist/pane-quota-history.js +0 -20
  119. package/dist/pane-quota-history.js.map +1 -1
  120. package/dist/pause-marker.d.ts +1 -1
  121. package/dist/pause-marker.js +1 -1
  122. package/dist/pause-marker.js.map +1 -1
  123. package/dist/public-web-gateway.js +0 -16
  124. package/dist/public-web-gateway.js.map +1 -1
  125. package/dist/public-web-link.d.ts +0 -11
  126. package/dist/public-web-link.js +0 -13
  127. package/dist/public-web-link.js.map +1 -1
  128. package/dist/quickstart-api.js +5 -9
  129. package/dist/quickstart-api.js.map +1 -1
  130. package/dist/quickstart.d.ts +0 -6
  131. package/dist/quickstart.js +6 -44
  132. package/dist/quickstart.js.map +1 -1
  133. package/dist/quota-notice-config.d.ts +22 -0
  134. package/dist/quota-notice-config.js +41 -0
  135. package/dist/quota-notice-config.js.map +1 -0
  136. package/dist/scheduler/task-board-text.js +1 -1
  137. package/dist/scheduler/task-board-text.js.map +1 -1
  138. package/dist/scheduler/task-board.d.ts +0 -4
  139. package/dist/scheduler/task-board.js +3 -9
  140. package/dist/scheduler/task-board.js.map +1 -1
  141. package/dist/service-installer.d.ts +2 -7
  142. package/dist/service-installer.js +10 -13
  143. package/dist/service-installer.js.map +1 -1
  144. package/dist/settings-api.d.ts +0 -12
  145. package/dist/settings-api.js +7 -487
  146. package/dist/settings-api.js.map +1 -1
  147. package/dist/settings-baseline.d.ts +0 -7
  148. package/dist/settings-baseline.js +1 -3
  149. package/dist/settings-baseline.js.map +1 -1
  150. package/dist/settings-change.js +7 -35
  151. package/dist/settings-change.js.map +1 -1
  152. package/dist/settings-confirmation.d.ts +1 -16
  153. package/dist/settings-confirmation.js +9 -47
  154. package/dist/settings-confirmation.js.map +1 -1
  155. package/dist/settings-effect.d.ts +0 -17
  156. package/dist/settings-effect.js +1 -155
  157. package/dist/settings-effect.js.map +1 -1
  158. package/dist/settings-http-confirmation.d.ts +0 -4
  159. package/dist/settings-http-confirmation.js +3 -43
  160. package/dist/settings-http-confirmation.js.map +1 -1
  161. package/dist/settings-instance-patch.js +1 -1
  162. package/dist/settings-instance-patch.js.map +1 -1
  163. package/dist/settings-request-capability.d.ts +0 -2
  164. package/dist/settings-request-capability.js +0 -4
  165. package/dist/settings-request-capability.js.map +1 -1
  166. package/dist/settings-transaction.d.ts +0 -4
  167. package/dist/settings-transaction.js +0 -9
  168. package/dist/settings-transaction.js.map +1 -1
  169. package/dist/setup-form.js +3 -6
  170. package/dist/setup-form.js.map +1 -1
  171. package/dist/setup-i18n.js +0 -3
  172. package/dist/setup-i18n.js.map +1 -1
  173. package/dist/setup-wizard.js +2 -6
  174. package/dist/setup-wizard.js.map +1 -1
  175. package/dist/task-board-tool.d.ts +1 -2
  176. package/dist/task-board-tool.js +6 -62
  177. package/dist/task-board-tool.js.map +1 -1
  178. package/dist/tmux-control.d.ts +1 -2
  179. package/dist/tmux-control.js +4 -4
  180. package/dist/tmux-control.js.map +1 -1
  181. package/dist/tmux-exec-helper.js +1 -32
  182. package/dist/tmux-exec-helper.js.map +1 -1
  183. package/dist/tmux-manager.d.ts +2 -3
  184. package/dist/tmux-manager.js +36 -45
  185. package/dist/tmux-manager.js.map +1 -1
  186. package/dist/tmux-read.js +3 -4
  187. package/dist/tmux-read.js.map +1 -1
  188. package/dist/tool-permissions.js +1 -2
  189. package/dist/tool-permissions.js.map +1 -1
  190. package/dist/topic-commands.js +5 -9
  191. package/dist/topic-commands.js.map +1 -1
  192. package/dist/transcript-delta-reader.d.ts +1 -1
  193. package/dist/transcript-delta-reader.js +1 -1
  194. package/dist/transcript-delta-reader.js.map +1 -1
  195. package/dist/transcript-monitor.d.ts +0 -3
  196. package/dist/transcript-monitor.js +51 -27
  197. package/dist/transcript-monitor.js.map +1 -1
  198. package/dist/transcript-sources.d.ts +0 -5
  199. package/dist/transcript-sources.js +79 -8
  200. package/dist/transcript-sources.js.map +1 -1
  201. package/dist/types.d.ts +3 -29
  202. package/dist/ui/app.html +8 -1
  203. package/dist/ui/backend-signin.js +21 -39
  204. package/dist/ui/chat-ambient.js +1 -1
  205. package/dist/ui/chat-md-strings.js +9 -3
  206. package/dist/ui/chat-render.js +670 -3
  207. package/dist/ui/chat-store.js +3 -14
  208. package/dist/ui/chat-strings.js +285 -3
  209. package/dist/ui/chat-thread.js +969 -3
  210. package/dist/ui/chat-time.js +80 -3
  211. package/dist/ui/chat-tour.js +1 -1
  212. package/dist/ui/fleet-office-pack.d.ts +0 -9
  213. package/dist/ui/fleet-office-pack.js +4 -76
  214. package/dist/ui/fleet-office-skin.js +5 -23
  215. package/dist/ui/fleet-office-store.js +0 -5
  216. package/dist/ui/fleet-office.js +6 -173
  217. package/dist/ui/fleet-task-card.js +4 -8
  218. package/dist/ui/fleet-task-common.js +2 -2
  219. package/dist/ui/fleet-tasks.js +39 -125
  220. package/dist/ui/html-attachment.js +40 -3
  221. package/dist/ui/office-share-page.js +2 -4
  222. package/dist/ui/panel-chat.js +75 -90
  223. package/dist/ui/panel-details.js +2 -3
  224. package/dist/ui/panel-fleet.js +18 -105
  225. package/dist/ui/panel-log.js +2 -2
  226. package/dist/ui/panel-needs.js +4 -162
  227. package/dist/ui/panel-notices.js +4 -3
  228. package/dist/ui/panel-settings.js +202 -281
  229. package/dist/ui/preview-pages.js +1 -1
  230. package/dist/ui/preview-panel.js +13 -21
  231. package/dist/ui/preview-versions.js +1 -1
  232. package/dist/ui/preview.js +476 -3
  233. package/dist/ui/search-dialog.js +3 -4
  234. package/dist/ui/settings-appearance.js +23 -122
  235. package/dist/ui/settings-catalog.js +10 -37
  236. package/dist/ui/settings-confirm.js +1 -3
  237. package/dist/ui/settings-dialogs.js +20 -48
  238. package/dist/ui/settings-guests.js +14 -27
  239. package/dist/ui/settings-model.js +1 -10
  240. package/dist/ui/settings-quota-notice.js +100 -0
  241. package/dist/ui/settings-registry.js +5 -15
  242. package/dist/ui/settings-strings.js +32 -105
  243. package/dist/ui/settings-web-authority.js +13 -18
  244. package/dist/ui/shared/app-i18n.js +2 -2
  245. package/dist/ui/shared/app-route.js +3 -12
  246. package/dist/ui/shared/app-session.js +2 -6
  247. package/dist/ui/shared/app-shell.js +26 -87
  248. package/dist/ui/shared/app-store.js +2 -3
  249. package/dist/ui/shared/app-stream.js +1 -3
  250. package/dist/ui/shared/app.css +5 -1368
  251. package/dist/ui/shared/app.js +5 -17
  252. package/dist/ui/shared/header-tools.js +9 -9
  253. package/dist/ui/shared/instance-nav.js +7 -34
  254. package/dist/ui/shared/instance-switch.js +3 -4
  255. package/dist/ui/shared/loading.css +37 -0
  256. package/dist/ui/shared/signin.js +6 -211
  257. package/dist/ui/shared/tokens.css +0 -1
  258. package/dist/ui/shared/ui-dialog.js +2 -2
  259. package/dist/ui/shared/ui-menu.js +10 -30
  260. package/dist/ui/shared/ui-states.js +14 -3
  261. package/dist/ui/shared/vendor/vendor.json +2 -19
  262. package/dist/ui/shared/view-strings.js +0 -8
  263. package/dist/ui/signin.html +5 -23
  264. package/dist/unattended-install.js +1 -2
  265. package/dist/unattended-install.js.map +1 -1
  266. package/dist/usage/providers.d.ts +5 -0
  267. package/dist/usage/providers.js +6 -2
  268. package/dist/usage/providers.js.map +1 -1
  269. package/dist/usage/quota-notices.d.ts +38 -0
  270. package/dist/usage/quota-notices.js +160 -0
  271. package/dist/usage/quota-notices.js.map +1 -0
  272. package/dist/usage/usage-api.d.ts +1 -0
  273. package/dist/usage/usage-api.js +16 -0
  274. package/dist/usage/usage-api.js.map +1 -1
  275. package/dist/view-api.js +7 -5
  276. package/dist/view-api.js.map +1 -1
  277. package/dist/web-api.d.ts +2 -80
  278. package/dist/web-api.js +10 -513
  279. package/dist/web-api.js.map +1 -1
  280. package/dist/web-backend-login.d.ts +1 -23
  281. package/dist/web-backend-login.js +17 -11
  282. package/dist/web-backend-login.js.map +1 -1
  283. package/dist/web-chat-history.d.ts +2 -19
  284. package/dist/web-chat-history.js +3 -72
  285. package/dist/web-chat-history.js.map +1 -1
  286. package/dist/web-office-skins.d.ts +0 -9
  287. package/dist/web-office-skins.js +1 -16
  288. package/dist/web-office-skins.js.map +1 -1
  289. package/dist/web-only-fleet.d.ts +0 -20
  290. package/dist/web-only-fleet.js +0 -21
  291. package/dist/web-only-fleet.js.map +1 -1
  292. package/dist/web-session.d.ts +0 -42
  293. package/dist/web-session.js +0 -9
  294. package/dist/web-session.js.map +1 -1
  295. package/dist/web-settings-patch.d.ts +1 -3
  296. package/dist/web-settings-patch.js +1 -4
  297. package/dist/web-settings-patch.js.map +1 -1
  298. package/dist/web-shell-routes.d.ts +1 -10
  299. package/dist/web-shell-routes.js +2 -14
  300. package/dist/web-shell-routes.js.map +1 -1
  301. package/dist/web-terminal.d.ts +30 -4
  302. package/dist/web-terminal.js +6 -9
  303. package/dist/web-terminal.js.map +1 -1
  304. package/dist/yaml-shared-nodes.js +3 -8
  305. package/dist/yaml-shared-nodes.js.map +1 -1
  306. package/launcher/agend-install.cjs +1 -8
  307. package/launcher/postinstall.cjs +2 -27
  308. package/package.json +3 -10
  309. package/templates/launchd.plist.ejs +1 -3
  310. package/dist/accounts-view.d.ts +0 -97
  311. package/dist/accounts-view.js +0 -116
  312. package/dist/accounts-view.js.map +0 -1
  313. package/dist/agent-runtime-api.d.ts +0 -4
  314. package/dist/agent-runtime-api.js +0 -59
  315. package/dist/agent-runtime-api.js.map +0 -1
  316. package/dist/agent-runtime-change.d.ts +0 -76
  317. package/dist/agent-runtime-change.js +0 -114
  318. package/dist/agent-runtime-change.js.map +0 -1
  319. package/dist/agent-workspace.d.ts +0 -93
  320. package/dist/agent-workspace.js +0 -353
  321. package/dist/agent-workspace.js.map +0 -1
  322. package/dist/backend/grok-model-cache.d.ts +0 -7
  323. package/dist/backend/grok-model-cache.js +0 -65
  324. package/dist/backend/grok-model-cache.js.map +0 -1
  325. package/dist/backend/native-pane.d.ts +0 -11
  326. package/dist/backend/native-pane.js +0 -59
  327. package/dist/backend/native-pane.js.map +0 -1
  328. package/dist/build-provenance-cli.d.ts +0 -3
  329. package/dist/build-provenance-cli.js +0 -11
  330. package/dist/build-provenance-cli.js.map +0 -1
  331. package/dist/build-provenance.d.ts +0 -20
  332. package/dist/build-provenance.js +0 -67
  333. package/dist/build-provenance.js.map +0 -1
  334. package/dist/build-provenance.json +0 -1
  335. package/dist/claude-auth-status.d.ts +0 -48
  336. package/dist/claude-auth-status.js +0 -149
  337. package/dist/claude-auth-status.js.map +0 -1
  338. package/dist/fleet-windows-runtime.d.ts +0 -98
  339. package/dist/fleet-windows-runtime.js +0 -467
  340. package/dist/fleet-windows-runtime.js.map +0 -1
  341. package/dist/general-binding.d.ts +0 -85
  342. package/dist/general-binding.js +0 -298
  343. package/dist/general-binding.js.map +0 -1
  344. package/dist/general-host-owner.d.ts +0 -8
  345. package/dist/general-host-owner.js +0 -26
  346. package/dist/general-host-owner.js.map +0 -1
  347. package/dist/general-role.d.ts +0 -5
  348. package/dist/general-role.js +0 -27
  349. package/dist/general-role.js.map +0 -1
  350. package/dist/hub/admission.d.ts +0 -28
  351. package/dist/hub/admission.js +0 -62
  352. package/dist/hub/admission.js.map +0 -1
  353. package/dist/hub/attachments/limits.d.ts +0 -20
  354. package/dist/hub/attachments/limits.js +0 -48
  355. package/dist/hub/attachments/limits.js.map +0 -1
  356. package/dist/hub/attachments/store.d.ts +0 -116
  357. package/dist/hub/attachments/store.js +0 -246
  358. package/dist/hub/attachments/store.js.map +0 -1
  359. package/dist/hub/audit/index.d.ts +0 -62
  360. package/dist/hub/audit/index.js +0 -344
  361. package/dist/hub/audit/index.js.map +0 -1
  362. package/dist/hub/browser-certificate.d.ts +0 -38
  363. package/dist/hub/browser-certificate.js +0 -247
  364. package/dist/hub/browser-certificate.js.map +0 -1
  365. package/dist/hub/buttons-model.d.ts +0 -9
  366. package/dist/hub/buttons-model.js +0 -42
  367. package/dist/hub/buttons-model.js.map +0 -1
  368. package/dist/hub/buttons.d.ts +0 -54
  369. package/dist/hub/buttons.js +0 -346
  370. package/dist/hub/buttons.js.map +0 -1
  371. package/dist/hub/catalog.d.ts +0 -74
  372. package/dist/hub/catalog.js +0 -195
  373. package/dist/hub/catalog.js.map +0 -1
  374. package/dist/hub/client.d.ts +0 -69
  375. package/dist/hub/client.js +0 -300
  376. package/dist/hub/client.js.map +0 -1
  377. package/dist/hub/compose/member.d.ts +0 -139
  378. package/dist/hub/compose/member.js +0 -450
  379. package/dist/hub/compose/member.js.map +0 -1
  380. package/dist/hub/compose/server.d.ts +0 -77
  381. package/dist/hub/compose/server.js +0 -349
  382. package/dist/hub/compose/server.js.map +0 -1
  383. package/dist/hub/compose/views.d.ts +0 -12
  384. package/dist/hub/compose/views.js +0 -4
  385. package/dist/hub/compose/views.js.map +0 -1
  386. package/dist/hub/db.d.ts +0 -56
  387. package/dist/hub/db.js +0 -188
  388. package/dist/hub/db.js.map +0 -1
  389. package/dist/hub/directory/config.d.ts +0 -39
  390. package/dist/hub/directory/config.js +0 -108
  391. package/dist/hub/directory/config.js.map +0 -1
  392. package/dist/hub/directory/directory.d.ts +0 -18
  393. package/dist/hub/directory/directory.js +0 -320
  394. package/dist/hub/directory/directory.js.map +0 -1
  395. package/dist/hub/directory/index.d.ts +0 -7
  396. package/dist/hub/directory/index.js +0 -4
  397. package/dist/hub/directory/index.js.map +0 -1
  398. package/dist/hub/directory/profiles.d.ts +0 -41
  399. package/dist/hub/directory/profiles.js +0 -90
  400. package/dist/hub/directory/profiles.js.map +0 -1
  401. package/dist/hub/directory/types.d.ts +0 -71
  402. package/dist/hub/directory/types.js +0 -14
  403. package/dist/hub/directory/types.js.map +0 -1
  404. package/dist/hub/execution/cli-provider.d.ts +0 -23
  405. package/dist/hub/execution/cli-provider.js +0 -341
  406. package/dist/hub/execution/cli-provider.js.map +0 -1
  407. package/dist/hub/execution/index.d.ts +0 -13
  408. package/dist/hub/execution/index.js +0 -8
  409. package/dist/hub/execution/index.js.map +0 -1
  410. package/dist/hub/execution/model-broker.d.ts +0 -24
  411. package/dist/hub/execution/model-broker.js +0 -208
  412. package/dist/hub/execution/model-broker.js.map +0 -1
  413. package/dist/hub/execution/provider-setup.d.ts +0 -11
  414. package/dist/hub/execution/provider-setup.js +0 -21
  415. package/dist/hub/execution/provider-setup.js.map +0 -1
  416. package/dist/hub/execution/sandbox-runner.d.ts +0 -1
  417. package/dist/hub/execution/sandbox-runner.js +0 -221
  418. package/dist/hub/execution/sandbox-runner.js.map +0 -1
  419. package/dist/hub/execution/service.d.ts +0 -136
  420. package/dist/hub/execution/service.js +0 -459
  421. package/dist/hub/execution/service.js.map +0 -1
  422. package/dist/hub/execution/store.d.ts +0 -61
  423. package/dist/hub/execution/store.js +0 -182
  424. package/dist/hub/execution/store.js.map +0 -1
  425. package/dist/hub/execution/views.d.ts +0 -20
  426. package/dist/hub/execution/views.js +0 -48
  427. package/dist/hub/execution/views.js.map +0 -1
  428. package/dist/hub/http/compose.d.ts +0 -20
  429. package/dist/hub/http/compose.js +0 -518
  430. package/dist/hub/http/compose.js.map +0 -1
  431. package/dist/hub/http/core.d.ts +0 -49
  432. package/dist/hub/http/core.js +0 -124
  433. package/dist/hub/http/core.js.map +0 -1
  434. package/dist/hub/http/deps.d.ts +0 -61
  435. package/dist/hub/http/deps.js +0 -2
  436. package/dist/hub/http/deps.js.map +0 -1
  437. package/dist/hub/http/schema.d.ts +0 -14
  438. package/dist/hub/http/schema.js +0 -80
  439. package/dist/hub/http/schema.js.map +0 -1
  440. package/dist/hub/identity.d.ts +0 -32
  441. package/dist/hub/identity.js +0 -80
  442. package/dist/hub/identity.js.map +0 -1
  443. package/dist/hub/init/browser-certificate.d.ts +0 -9
  444. package/dist/hub/init/browser-certificate.js +0 -78
  445. package/dist/hub/init/browser-certificate.js.map +0 -1
  446. package/dist/hub/init/browser-tls.d.ts +0 -18
  447. package/dist/hub/init/browser-tls.js +0 -62
  448. package/dist/hub/init/browser-tls.js.map +0 -1
  449. package/dist/hub/init/cli.d.ts +0 -3
  450. package/dist/hub/init/cli.js +0 -83
  451. package/dist/hub/init/cli.js.map +0 -1
  452. package/dist/hub/init/directory-certificate.d.ts +0 -24
  453. package/dist/hub/init/directory-certificate.js +0 -222
  454. package/dist/hub/init/directory-certificate.js.map +0 -1
  455. package/dist/hub/init/existing-fleet.d.ts +0 -6
  456. package/dist/hub/init/existing-fleet.js +0 -58
  457. package/dist/hub/init/existing-fleet.js.map +0 -1
  458. package/dist/hub/init/handoff.d.ts +0 -8
  459. package/dist/hub/init/handoff.js +0 -36
  460. package/dist/hub/init/handoff.js.map +0 -1
  461. package/dist/hub/init/identity.d.ts +0 -5
  462. package/dist/hub/init/identity.js +0 -24
  463. package/dist/hub/init/identity.js.map +0 -1
  464. package/dist/hub/init/initializer.d.ts +0 -24
  465. package/dist/hub/init/initializer.js +0 -385
  466. package/dist/hub/init/initializer.js.map +0 -1
  467. package/dist/hub/init/inventory.d.ts +0 -17
  468. package/dist/hub/init/inventory.js +0 -33
  469. package/dist/hub/init/inventory.js.map +0 -1
  470. package/dist/hub/init/layout.d.ts +0 -32
  471. package/dist/hub/init/layout.js +0 -53
  472. package/dist/hub/init/layout.js.map +0 -1
  473. package/dist/hub/init/network.d.ts +0 -18
  474. package/dist/hub/init/network.js +0 -104
  475. package/dist/hub/init/network.js.map +0 -1
  476. package/dist/hub/init/plan-digest.d.ts +0 -5
  477. package/dist/hub/init/plan-digest.js +0 -47
  478. package/dist/hub/init/plan-digest.js.map +0 -1
  479. package/dist/hub/init/prompt.d.ts +0 -26
  480. package/dist/hub/init/prompt.js +0 -110
  481. package/dist/hub/init/prompt.js.map +0 -1
  482. package/dist/hub/init/secret-file.d.ts +0 -1
  483. package/dist/hub/init/secret-file.js +0 -59
  484. package/dist/hub/init/secret-file.js.map +0 -1
  485. package/dist/hub/init/text.d.ts +0 -127
  486. package/dist/hub/init/text.js +0 -247
  487. package/dist/hub/init/text.js.map +0 -1
  488. package/dist/hub/init/types.d.ts +0 -114
  489. package/dist/hub/init/types.js +0 -9
  490. package/dist/hub/init/types.js.map +0 -1
  491. package/dist/hub/init/wizard.d.ts +0 -34
  492. package/dist/hub/init/wizard.js +0 -554
  493. package/dist/hub/init/wizard.js.map +0 -1
  494. package/dist/hub/initialization.d.ts +0 -23
  495. package/dist/hub/initialization.js +0 -28
  496. package/dist/hub/initialization.js.map +0 -1
  497. package/dist/hub/member/agent-mode.d.ts +0 -6
  498. package/dist/hub/member/agent-mode.js +0 -23
  499. package/dist/hub/member/agent-mode.js.map +0 -1
  500. package/dist/hub/member/attachments.d.ts +0 -29
  501. package/dist/hub/member/attachments.js +0 -107
  502. package/dist/hub/member/attachments.js.map +0 -1
  503. package/dist/hub/member/exposure-api.d.ts +0 -87
  504. package/dist/hub/member/exposure-api.js +0 -64
  505. package/dist/hub/member/exposure-api.js.map +0 -1
  506. package/dist/hub/member/exposures.d.ts +0 -123
  507. package/dist/hub/member/exposures.js +0 -282
  508. package/dist/hub/member/exposures.js.map +0 -1
  509. package/dist/hub/member/pairing-api.d.ts +0 -85
  510. package/dist/hub/member/pairing-api.js +0 -385
  511. package/dist/hub/member/pairing-api.js.map +0 -1
  512. package/dist/hub/member/quota.d.ts +0 -20
  513. package/dist/hub/member/quota.js +0 -98
  514. package/dist/hub/member/quota.js.map +0 -1
  515. package/dist/hub/member-journal.d.ts +0 -104
  516. package/dist/hub/member-journal.js +0 -336
  517. package/dist/hub/member-journal.js.map +0 -1
  518. package/dist/hub/member-reconciliation.d.ts +0 -14
  519. package/dist/hub/member-reconciliation.js +0 -97
  520. package/dist/hub/member-reconciliation.js.map +0 -1
  521. package/dist/hub/mount.d.ts +0 -39
  522. package/dist/hub/mount.js +0 -123
  523. package/dist/hub/mount.js.map +0 -1
  524. package/dist/hub/pairing-client.d.ts +0 -17
  525. package/dist/hub/pairing-client.js +0 -108
  526. package/dist/hub/pairing-client.js.map +0 -1
  527. package/dist/hub/pairing.d.ts +0 -65
  528. package/dist/hub/pairing.js +0 -211
  529. package/dist/hub/pairing.js.map +0 -1
  530. package/dist/hub/policy.d.ts +0 -63
  531. package/dist/hub/policy.js +0 -147
  532. package/dist/hub/policy.js.map +0 -1
  533. package/dist/hub/preview.d.ts +0 -32
  534. package/dist/hub/preview.js +0 -64
  535. package/dist/hub/preview.js.map +0 -1
  536. package/dist/hub/private-files.d.ts +0 -5
  537. package/dist/hub/private-files.js +0 -44
  538. package/dist/hub/private-files.js.map +0 -1
  539. package/dist/hub/profile.d.ts +0 -59
  540. package/dist/hub/profile.js +0 -73
  541. package/dist/hub/profile.js.map +0 -1
  542. package/dist/hub/protocol.d.ts +0 -779
  543. package/dist/hub/protocol.js +0 -93
  544. package/dist/hub/protocol.js.map +0 -1
  545. package/dist/hub/quota.d.ts +0 -24
  546. package/dist/hub/quota.js +0 -112
  547. package/dist/hub/quota.js.map +0 -1
  548. package/dist/hub/representative.d.ts +0 -141
  549. package/dist/hub/representative.js +0 -528
  550. package/dist/hub/representative.js.map +0 -1
  551. package/dist/hub/retention.d.ts +0 -17
  552. package/dist/hub/retention.js +0 -45
  553. package/dist/hub/retention.js.map +0 -1
  554. package/dist/hub/rooms.d.ts +0 -120
  555. package/dist/hub/rooms.js +0 -535
  556. package/dist/hub/rooms.js.map +0 -1
  557. package/dist/hub/runtime.d.ts +0 -106
  558. package/dist/hub/runtime.js +0 -298
  559. package/dist/hub/runtime.js.map +0 -1
  560. package/dist/hub/server.d.ts +0 -56
  561. package/dist/hub/server.js +0 -202
  562. package/dist/hub/server.js.map +0 -1
  563. package/dist/hub/service-start.d.ts +0 -17
  564. package/dist/hub/service-start.js +0 -109
  565. package/dist/hub/service-start.js.map +0 -1
  566. package/dist/hub/sessions.d.ts +0 -53
  567. package/dist/hub/sessions.js +0 -196
  568. package/dist/hub/sessions.js.map +0 -1
  569. package/dist/hub/socket.d.ts +0 -24
  570. package/dist/hub/socket.js +0 -79
  571. package/dist/hub/socket.js.map +0 -1
  572. package/dist/hub/store.d.ts +0 -77
  573. package/dist/hub/store.js +0 -88
  574. package/dist/hub/store.js.map +0 -1
  575. package/dist/hub/tls.d.ts +0 -31
  576. package/dist/hub/tls.js +0 -135
  577. package/dist/hub/tls.js.map +0 -1
  578. package/dist/hub/types.d.ts +0 -401
  579. package/dist/hub/types.js +0 -2
  580. package/dist/hub/types.js.map +0 -1
  581. package/dist/hub/validation.d.ts +0 -33
  582. package/dist/hub/validation.js +0 -136
  583. package/dist/hub/validation.js.map +0 -1
  584. package/dist/hub/version-floor.d.ts +0 -10
  585. package/dist/hub/version-floor.js +0 -45
  586. package/dist/hub/version-floor.js.map +0 -1
  587. package/dist/hub-browser-certificate-policy.d.ts +0 -31
  588. package/dist/hub-browser-certificate-policy.js +0 -25
  589. package/dist/hub-browser-certificate-policy.js.map +0 -1
  590. package/dist/hub-membership-settings.d.ts +0 -6
  591. package/dist/hub-membership-settings.js +0 -21
  592. package/dist/hub-membership-settings.js.map +0 -1
  593. package/dist/hub-mode.d.ts +0 -15
  594. package/dist/hub-mode.js +0 -17
  595. package/dist/hub-mode.js.map +0 -1
  596. package/dist/hub-pairing-summary.d.ts +0 -48
  597. package/dist/hub-pairing-summary.js +0 -36
  598. package/dist/hub-pairing-summary.js.map +0 -1
  599. package/dist/hub-report-target.d.ts +0 -32
  600. package/dist/hub-report-target.js +0 -33
  601. package/dist/hub-report-target.js.map +0 -1
  602. package/dist/hub-retention-policy.d.ts +0 -14
  603. package/dist/hub-retention-policy.js +0 -15
  604. package/dist/hub-retention-policy.js.map +0 -1
  605. package/dist/launchd-service-domain.d.ts +0 -5
  606. package/dist/launchd-service-domain.js +0 -21
  607. package/dist/launchd-service-domain.js.map +0 -1
  608. package/dist/local-pane-endpoint.d.ts +0 -46
  609. package/dist/local-pane-endpoint.js +0 -189
  610. package/dist/local-pane-endpoint.js.map +0 -1
  611. package/dist/local-pane-launcher.d.ts +0 -2
  612. package/dist/local-pane-launcher.js +0 -38
  613. package/dist/local-pane-launcher.js.map +0 -1
  614. package/dist/local-pane-stage.ps1 +0 -101
  615. package/dist/model-catalog-defaults.d.ts +0 -14
  616. package/dist/model-catalog-defaults.js +0 -20
  617. package/dist/model-catalog-defaults.js.map +0 -1
  618. package/dist/native-agent-admission.d.ts +0 -7
  619. package/dist/native-agent-admission.js +0 -26
  620. package/dist/native-agent-admission.js.map +0 -1
  621. package/dist/native-daemon-client.d.ts +0 -13
  622. package/dist/native-daemon-client.js +0 -28
  623. package/dist/native-daemon-client.js.map +0 -1
  624. package/dist/native-instance-api.d.ts +0 -13
  625. package/dist/native-instance-api.js +0 -217
  626. package/dist/native-instance-api.js.map +0 -1
  627. package/dist/native-instance-input.d.ts +0 -87
  628. package/dist/native-instance-input.js +0 -59
  629. package/dist/native-instance-input.js.map +0 -1
  630. package/dist/native-instance-registry.d.ts +0 -38
  631. package/dist/native-instance-registry.js +0 -129
  632. package/dist/native-instance-registry.js.map +0 -1
  633. package/dist/native-mcp.d.ts +0 -43
  634. package/dist/native-mcp.js +0 -291
  635. package/dist/native-mcp.js.map +0 -1
  636. package/dist/native-model-catalog.d.ts +0 -5
  637. package/dist/native-model-catalog.js +0 -76
  638. package/dist/native-model-catalog.js.map +0 -1
  639. package/dist/native-pane-crash-budget.d.ts +0 -20
  640. package/dist/native-pane-crash-budget.js +0 -60
  641. package/dist/native-pane-crash-budget.js.map +0 -1
  642. package/dist/native-pane-create.d.ts +0 -26
  643. package/dist/native-pane-create.js +0 -53
  644. package/dist/native-pane-create.js.map +0 -1
  645. package/dist/native-pane-lifecycle.d.ts +0 -73
  646. package/dist/native-pane-lifecycle.js +0 -239
  647. package/dist/native-pane-lifecycle.js.map +0 -1
  648. package/dist/native-pane-manager.d.ts +0 -59
  649. package/dist/native-pane-manager.js +0 -592
  650. package/dist/native-pane-manager.js.map +0 -1
  651. package/dist/native-pane-output-log.d.ts +0 -15
  652. package/dist/native-pane-output-log.js +0 -108
  653. package/dist/native-pane-output-log.js.map +0 -1
  654. package/dist/native-pane-reconciliation.d.ts +0 -4
  655. package/dist/native-pane-reconciliation.js +0 -40
  656. package/dist/native-pane-reconciliation.js.map +0 -1
  657. package/dist/native-pane-recovery.d.ts +0 -12
  658. package/dist/native-pane-recovery.js +0 -10
  659. package/dist/native-pane-recovery.js.map +0 -1
  660. package/dist/native-pane-tools.d.ts +0 -2
  661. package/dist/native-pane-tools.js +0 -14
  662. package/dist/native-pane-tools.js.map +0 -1
  663. package/dist/office-talk.d.ts +0 -26
  664. package/dist/office-talk.js +0 -50
  665. package/dist/office-talk.js.map +0 -1
  666. package/dist/pane-port.d.ts +0 -118
  667. package/dist/pane-port.js +0 -2
  668. package/dist/pane-port.js.map +0 -1
  669. package/dist/runtime-api.d.ts +0 -10
  670. package/dist/runtime-api.js +0 -189
  671. package/dist/runtime-api.js.map +0 -1
  672. package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +0 -21
  673. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +0 -2
  674. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +0 -19
  675. package/dist/runtime-assets/@xterm/addon-serialize/package.json +0 -29
  676. package/dist/runtime-assets/@xterm/headless/LICENSE +0 -21
  677. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +0 -2
  678. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +0 -46
  679. package/dist/runtime-assets/@xterm/headless/package.json +0 -29
  680. package/dist/runtime-assets/node-pty/CONPTY-LICENSE +0 -21
  681. package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +0 -503
  682. package/dist/runtime-assets/node-pty/LICENSE +0 -69
  683. package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +0 -16
  684. package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +0 -47
  685. package/dist/runtime-assets/node-pty/lib/index.js +0 -52
  686. package/dist/runtime-assets/node-pty/lib/interfaces.js +0 -7
  687. package/dist/runtime-assets/node-pty/lib/shared/conout.js +0 -11
  688. package/dist/runtime-assets/node-pty/lib/terminal.js +0 -190
  689. package/dist/runtime-assets/node-pty/lib/types.js +0 -7
  690. package/dist/runtime-assets/node-pty/lib/unixTerminal.js +0 -346
  691. package/dist/runtime-assets/node-pty/lib/utils.js +0 -39
  692. package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +0 -125
  693. package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +0 -320
  694. package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +0 -199
  695. package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +0 -22
  696. package/dist/runtime-assets/node-pty/package.json +0 -64
  697. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  698. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  699. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  700. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  701. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  702. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  703. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  704. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  705. package/dist/runtime-build-info.d.ts +0 -9
  706. package/dist/runtime-build-info.js +0 -59
  707. package/dist/runtime-build-info.js.map +0 -1
  708. package/dist/runtime-bundle.d.ts +0 -22
  709. package/dist/runtime-bundle.js +0 -158
  710. package/dist/runtime-bundle.js.map +0 -1
  711. package/dist/runtime-cli.d.ts +0 -14
  712. package/dist/runtime-cli.js +0 -271
  713. package/dist/runtime-cli.js.map +0 -1
  714. package/dist/runtime-client-store.d.ts +0 -75
  715. package/dist/runtime-client-store.js +0 -372
  716. package/dist/runtime-client-store.js.map +0 -1
  717. package/dist/runtime-client.d.ts +0 -174
  718. package/dist/runtime-client.js +0 -1010
  719. package/dist/runtime-client.js.map +0 -1
  720. package/dist/runtime-connection.d.ts +0 -22
  721. package/dist/runtime-connection.js +0 -93
  722. package/dist/runtime-connection.js.map +0 -1
  723. package/dist/runtime-coordinator.d.ts +0 -98
  724. package/dist/runtime-coordinator.js +0 -1089
  725. package/dist/runtime-coordinator.js.map +0 -1
  726. package/dist/runtime-credential-profiles.d.ts +0 -78
  727. package/dist/runtime-credential-profiles.js +0 -280
  728. package/dist/runtime-credential-profiles.js.map +0 -1
  729. package/dist/runtime-general-protocol.d.ts +0 -22
  730. package/dist/runtime-general-protocol.js +0 -57
  731. package/dist/runtime-general-protocol.js.map +0 -1
  732. package/dist/runtime-general-workspace.d.ts +0 -17
  733. package/dist/runtime-general-workspace.js +0 -213
  734. package/dist/runtime-general-workspace.js.map +0 -1
  735. package/dist/runtime-install.d.ts +0 -50
  736. package/dist/runtime-install.js +0 -186
  737. package/dist/runtime-install.js.map +0 -1
  738. package/dist/runtime-pane-assets.d.ts +0 -17
  739. package/dist/runtime-pane-assets.js +0 -23
  740. package/dist/runtime-pane-assets.js.map +0 -1
  741. package/dist/runtime-pane-boot.d.ts +0 -9
  742. package/dist/runtime-pane-boot.js +0 -47
  743. package/dist/runtime-pane-boot.js.map +0 -1
  744. package/dist/runtime-pane-codex-index.d.ts +0 -10
  745. package/dist/runtime-pane-codex-index.js +0 -151
  746. package/dist/runtime-pane-codex-index.js.map +0 -1
  747. package/dist/runtime-pane-config.d.ts +0 -16
  748. package/dist/runtime-pane-config.js +0 -54
  749. package/dist/runtime-pane-config.js.map +0 -1
  750. package/dist/runtime-pane-host.d.ts +0 -63
  751. package/dist/runtime-pane-host.js +0 -467
  752. package/dist/runtime-pane-host.js.map +0 -1
  753. package/dist/runtime-pane-job-owner.d.ts +0 -1
  754. package/dist/runtime-pane-job-owner.js +0 -29
  755. package/dist/runtime-pane-job-owner.js.map +0 -1
  756. package/dist/runtime-pane-job.ps1 +0 -116
  757. package/dist/runtime-pane-link.d.ts +0 -47
  758. package/dist/runtime-pane-link.js +0 -337
  759. package/dist/runtime-pane-link.js.map +0 -1
  760. package/dist/runtime-pane-mcp-protocol.d.ts +0 -32
  761. package/dist/runtime-pane-mcp-protocol.js +0 -39
  762. package/dist/runtime-pane-mcp-protocol.js.map +0 -1
  763. package/dist/runtime-pane-mcp-relay.d.ts +0 -18
  764. package/dist/runtime-pane-mcp-relay.js +0 -80
  765. package/dist/runtime-pane-mcp-relay.js.map +0 -1
  766. package/dist/runtime-pane-mcp.d.ts +0 -55
  767. package/dist/runtime-pane-mcp.js +0 -153
  768. package/dist/runtime-pane-mcp.js.map +0 -1
  769. package/dist/runtime-pane-native.d.ts +0 -75
  770. package/dist/runtime-pane-native.js +0 -114
  771. package/dist/runtime-pane-native.js.map +0 -1
  772. package/dist/runtime-pane-output.d.ts +0 -19
  773. package/dist/runtime-pane-output.js +0 -53
  774. package/dist/runtime-pane-output.js.map +0 -1
  775. package/dist/runtime-pane-port.d.ts +0 -144
  776. package/dist/runtime-pane-port.js +0 -574
  777. package/dist/runtime-pane-port.js.map +0 -1
  778. package/dist/runtime-pane-private.d.ts +0 -14
  779. package/dist/runtime-pane-private.js +0 -51
  780. package/dist/runtime-pane-private.js.map +0 -1
  781. package/dist/runtime-pane-private.ps1 +0 -14
  782. package/dist/runtime-pane-process.d.ts +0 -4
  783. package/dist/runtime-pane-process.js +0 -117
  784. package/dist/runtime-pane-process.js.map +0 -1
  785. package/dist/runtime-pane-protocol.d.ts +0 -182
  786. package/dist/runtime-pane-protocol.js +0 -217
  787. package/dist/runtime-pane-protocol.js.map +0 -1
  788. package/dist/runtime-pane-quota-history.d.ts +0 -6
  789. package/dist/runtime-pane-quota-history.js +0 -44
  790. package/dist/runtime-pane-quota-history.js.map +0 -1
  791. package/dist/runtime-pane-screen.d.ts +0 -19
  792. package/dist/runtime-pane-screen.js +0 -76
  793. package/dist/runtime-pane-screen.js.map +0 -1
  794. package/dist/runtime-pane-service.d.ts +0 -16
  795. package/dist/runtime-pane-service.js +0 -256
  796. package/dist/runtime-pane-service.js.map +0 -1
  797. package/dist/runtime-pane-stdio-protocol.d.ts +0 -54
  798. package/dist/runtime-pane-stdio-protocol.js +0 -94
  799. package/dist/runtime-pane-stdio-protocol.js.map +0 -1
  800. package/dist/runtime-pane-stdio.d.ts +0 -3
  801. package/dist/runtime-pane-stdio.js +0 -123
  802. package/dist/runtime-pane-stdio.js.map +0 -1
  803. package/dist/runtime-pane-store.d.ts +0 -33
  804. package/dist/runtime-pane-store.js +0 -164
  805. package/dist/runtime-pane-store.js.map +0 -1
  806. package/dist/runtime-pane-transcript-protocol.d.ts +0 -43
  807. package/dist/runtime-pane-transcript-protocol.js +0 -58
  808. package/dist/runtime-pane-transcript-protocol.js.map +0 -1
  809. package/dist/runtime-pane-transcript.d.ts +0 -50
  810. package/dist/runtime-pane-transcript.js +0 -666
  811. package/dist/runtime-pane-transcript.js.map +0 -1
  812. package/dist/runtime-pane-worker.d.ts +0 -1
  813. package/dist/runtime-pane-worker.js +0 -167
  814. package/dist/runtime-pane-worker.js.map +0 -1
  815. package/dist/runtime-protocol.d.ts +0 -177
  816. package/dist/runtime-protocol.js +0 -49
  817. package/dist/runtime-protocol.js.map +0 -1
  818. package/dist/runtime-switches.d.ts +0 -79
  819. package/dist/runtime-switches.js +0 -90
  820. package/dist/runtime-switches.js.map +0 -1
  821. package/dist/runtime-transcript-delta-reader.d.ts +0 -23
  822. package/dist/runtime-transcript-delta-reader.js +0 -74
  823. package/dist/runtime-transcript-delta-reader.js.map +0 -1
  824. package/dist/runtime-transcript-source.d.ts +0 -36
  825. package/dist/runtime-transcript-source.js +0 -189
  826. package/dist/runtime-transcript-source.js.map +0 -1
  827. package/dist/runtime-update-activity.d.ts +0 -21
  828. package/dist/runtime-update-activity.js +0 -51
  829. package/dist/runtime-update-activity.js.map +0 -1
  830. package/dist/runtime-update-artifact.d.ts +0 -31
  831. package/dist/runtime-update-artifact.js +0 -252
  832. package/dist/runtime-update-artifact.js.map +0 -1
  833. package/dist/runtime-update-install.d.ts +0 -31
  834. package/dist/runtime-update-install.js +0 -205
  835. package/dist/runtime-update-install.js.map +0 -1
  836. package/dist/runtime-update-journal.d.ts +0 -44
  837. package/dist/runtime-update-journal.js +0 -121
  838. package/dist/runtime-update-journal.js.map +0 -1
  839. package/dist/runtime-update-lock.d.ts +0 -48
  840. package/dist/runtime-update-lock.js +0 -217
  841. package/dist/runtime-update-lock.js.map +0 -1
  842. package/dist/runtime-update-owners.d.ts +0 -29
  843. package/dist/runtime-update-owners.js +0 -240
  844. package/dist/runtime-update-owners.js.map +0 -1
  845. package/dist/runtime-update-protocol.d.ts +0 -15
  846. package/dist/runtime-update-protocol.js +0 -13
  847. package/dist/runtime-update-protocol.js.map +0 -1
  848. package/dist/runtime-windows-bridge.d.ts +0 -42
  849. package/dist/runtime-windows-bridge.js +0 -167
  850. package/dist/runtime-windows-bridge.js.map +0 -1
  851. package/dist/service-drain.d.ts +0 -19
  852. package/dist/service-drain.js +0 -64
  853. package/dist/service-drain.js.map +0 -1
  854. package/dist/settings-route-lifetime.d.ts +0 -14
  855. package/dist/settings-route-lifetime.js +0 -48
  856. package/dist/settings-route-lifetime.js.map +0 -1
  857. package/dist/tmux-binary.d.ts +0 -59
  858. package/dist/tmux-binary.js +0 -200
  859. package/dist/tmux-binary.js.map +0 -1
  860. package/dist/tmux-pane-host.d.ts +0 -26
  861. package/dist/tmux-pane-host.js +0 -25
  862. package/dist/tmux-pane-host.js.map +0 -1
  863. package/dist/transcript-needles.d.ts +0 -42
  864. package/dist/transcript-needles.js +0 -166
  865. package/dist/transcript-needles.js.map +0 -1
  866. package/dist/transcript-records.d.ts +0 -21
  867. package/dist/transcript-records.js +0 -141
  868. package/dist/transcript-records.js.map +0 -1
  869. package/dist/ui/account-identity.js +0 -27
  870. package/dist/ui/accounts-view.js +0 -214
  871. package/dist/ui/agent-proposals.js +0 -90
  872. package/dist/ui/agent-runtime-settings.js +0 -68
  873. package/dist/ui/agent-runtime.js +0 -124
  874. package/dist/ui/cli-picker.js +0 -42
  875. package/dist/ui/credential-profile-select.js +0 -54
  876. package/dist/ui/fleet-office-dialogue.d.ts +0 -30
  877. package/dist/ui/fleet-office-dialogue.js +0 -382
  878. package/dist/ui/fleet-task-menu.js +0 -188
  879. package/dist/ui/fleet-task-stats.js +0 -124
  880. package/dist/ui/fleet-task-view.js +0 -340
  881. package/dist/ui/general-location.js +0 -71
  882. package/dist/ui/hub-agent-copy.js +0 -23
  883. package/dist/ui/hub-button-actions.js +0 -65
  884. package/dist/ui/hub-chat-store.js +0 -158
  885. package/dist/ui/hub-chat-strings.js +0 -77
  886. package/dist/ui/hub-client.js +0 -329
  887. package/dist/ui/hub-owner-strings.js +0 -51
  888. package/dist/ui/hub-provider-guidance.js +0 -31
  889. package/dist/ui/hub-quota.js +0 -85
  890. package/dist/ui/hub-strings.js +0 -162
  891. package/dist/ui/hub-switcher.js +0 -27
  892. package/dist/ui/native-instance-settings.js +0 -44
  893. package/dist/ui/native-pane-recovery.js +0 -45
  894. package/dist/ui/panel-hub.js +0 -619
  895. package/dist/ui/panel-runtimes.js +0 -425
  896. package/dist/ui/panel-windows-agent.js +0 -86
  897. package/dist/ui/panel-windows-cli.js +0 -189
  898. package/dist/ui/provider-marks.js +0 -83
  899. package/dist/ui/runtime-catalog.js +0 -55
  900. package/dist/ui/runtime-commands.d.ts +0 -4
  901. package/dist/ui/runtime-commands.js +0 -59
  902. package/dist/ui/settings-access-strings.js +0 -42
  903. package/dist/ui/settings-agent-filters.js +0 -94
  904. package/dist/ui/settings-build-version.js +0 -35
  905. package/dist/ui/settings-devices.js +0 -253
  906. package/dist/ui/settings-hub-browser-certificate.js +0 -74
  907. package/dist/ui/settings-hub-membership.js +0 -72
  908. package/dist/ui/settings-hub-retention.js +0 -52
  909. package/dist/ui/settings-hub.js +0 -196
  910. package/dist/ui/settings-layout.js +0 -242
  911. package/dist/ui/settings-outside.js +0 -242
  912. package/dist/ui/settings-shared-strings.js +0 -143
  913. package/dist/ui/settings-shared.js +0 -345
  914. package/dist/ui/settings-shortcuts.js +0 -65
  915. package/dist/ui/shared/accounts.css +0 -15
  916. package/dist/ui/shared/chat-composer.js +0 -68
  917. package/dist/ui/shared/chat-md-strings.js +0 -9
  918. package/dist/ui/shared/chat-render.js +0 -682
  919. package/dist/ui/shared/chat-strings.js +0 -333
  920. package/dist/ui/shared/chat-thread.js +0 -969
  921. package/dist/ui/shared/chat-time.js +0 -80
  922. package/dist/ui/shared/html-attachment.js +0 -42
  923. package/dist/ui/shared/hub-chat.css +0 -85
  924. package/dist/ui/shared/hub-owner.css +0 -33
  925. package/dist/ui/shared/hub-quota.css +0 -8
  926. package/dist/ui/shared/hub.css +0 -71
  927. package/dist/ui/shared/machine-name.js +0 -13
  928. package/dist/ui/shared/page-head.js +0 -8
  929. package/dist/ui/shared/preview.js +0 -476
  930. package/dist/ui/shared/qrcode.module.js +0 -2237
  931. package/dist/ui/shared/runtime-install.css +0 -26
  932. package/dist/ui/shared/settings-width.js +0 -31
  933. package/dist/ui/shared/side-rail.js +0 -15
  934. package/dist/ui/shared/task-board.css +0 -95
  935. package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
  936. package/dist/ui/shared/workspace.css +0 -20
  937. package/dist/ui/windows-agents-nav.js +0 -2
  938. package/dist/ui/windows-cli-catalog.js +0 -108
  939. package/dist/ui/workspace-panel.js +0 -189
  940. package/dist/ui/workspace-strings.js +0 -35
  941. package/dist/web-device-login.d.ts +0 -153
  942. package/dist/web-device-login.js +0 -278
  943. package/dist/web-device-login.js.map +0 -1
  944. package/dist/web-remote-access.d.ts +0 -152
  945. package/dist/web-remote-access.js +0 -368
  946. package/dist/web-remote-access.js.map +0 -1
  947. package/dist/windows-agents.d.ts +0 -127
  948. package/dist/windows-agents.js +0 -491
  949. package/dist/windows-agents.js.map +0 -1
  950. package/dist/windows-cli-api.d.ts +0 -34
  951. package/dist/windows-cli-api.js +0 -185
  952. package/dist/windows-cli-api.js.map +0 -1
  953. package/dist/windows-cli-providers.d.ts +0 -106
  954. package/dist/windows-cli-providers.js +0 -424
  955. package/dist/windows-cli-providers.js.map +0 -1
  956. package/dist/windows-cli-worker.d.ts +0 -83
  957. package/dist/windows-cli-worker.js +0 -570
  958. package/dist/windows-cli-worker.js.map +0 -1
  959. package/dist/windows-cli.d.ts +0 -126
  960. package/dist/windows-cli.js +0 -416
  961. package/dist/windows-cli.js.map +0 -1
  962. package/dist/windows-native-mcp.d.ts +0 -19
  963. package/dist/windows-native-mcp.js +0 -143
  964. package/dist/windows-native-mcp.js.map +0 -1
  965. package/dist/windows-pane-mcp.d.ts +0 -26
  966. package/dist/windows-pane-mcp.js +0 -187
  967. package/dist/windows-pane-mcp.js.map +0 -1
  968. package/launcher/launchd-session-type.cjs +0 -14
  969. package/launcher/tmux-bundle.cjs +0 -247
  970. package/templates/runtime-assets/conpty-LICENSE +0 -21
  971. package/templates/runtime-assets/conpty-NOTICE.md +0 -503
  972. package/templates/runtime-assets/local-pane-stage.ps1 +0 -101
  973. package/templates/runtime-assets/runtime-pane-job.ps1 +0 -116
  974. package/templates/runtime-assets/runtime-pane-private.ps1 +0 -14
  975. package/templates/runtime-assets/xterm-LICENSE +0 -21
  976. package/templates/runtime-install/install.ps1 +0 -270
@@ -1,1010 +0,0 @@
1
- /** Standalone, outbound-only native runtime. Imports no Fleet, database, bot or Linux native dependency. */
2
- import WebSocket from "ws";
3
- import { readPaneSystemBootId, reusedRuntimeLockPid } from "./runtime-pane-boot.js";
4
- import { createServer } from "node:http";
5
- import { hostname } from "node:os";
6
- import { randomBytes, randomUUID } from "node:crypto";
7
- import { join } from "node:path";
8
- import { WindowsCliBridge, nativeWindowsTransport, WINDOWS_CLI_INVENTORY_FILE } from "./windows-cli.js";
9
- import { probeCredentialProfileStatus, validateNativeTask, validWindowsAgentId } from "./windows-cli-worker.js";
10
- import { validNativeSessionId } from "./windows-cli-providers.js";
11
- import { RUNTIME_CREDENTIAL_CAPABILITY, credentialLoginRequired, credentialProfileReport, isCredentialProfileCli, listCredentialProfileNames, rememberCredentialStatus, requireCredentialProfile, credentialCacheStamp, assertCredentialProfileName, assertCredentialProfileCli } from "./runtime-credential-profiles.js";
12
- import { runtimeJobDigest, validateRuntimeServer } from "./runtime-client-store.js";
13
- import { RUNTIME_ROTATE_PATH, RUNTIME_REINSTALL_CLOSE_PREFIX, runtimeClaimFingerprint } from "./runtime-protocol.js";
14
- import { readRuntimeInfo } from "./runtime-build-info.js";
15
- import { RuntimeUpdateActivity } from "./runtime-update-activity.js";
16
- import { parseRuntimeUpdateControl, RUNTIME_MANAGED_UPDATE_CAPABILITY, validRuntimeUpdateId } from "./runtime-update-protocol.js";
17
- import { validatePaneMcpBody } from "./runtime-pane-mcp-protocol.js";
18
- import { validateRuntimePaneRequest, validateRuntimePaneShutdown } from "./runtime-pane-protocol.js";
19
- export { RUNTIME_PANE_MODULES } from "./runtime-pane-assets.js";
20
- const REPAIR = "run .\\agend-runtime.cmd disconnect in this folder (add the same --profile if you used one), then double-click connect-agend.bat and enter a new pairing code.";
21
- /** Plain-language cause and next step for a stop AgEnD caused. AgEnD answers an unknown and a revoked credential with the same bare 401, so "refused" covers both. */
22
- export function describeRuntimeStop(reason) {
23
- switch (reason.kind) {
24
- case "refused": return `${reason.detail === "HTTP 403" ? "The connection was refused with HTTP 403. If AgEnD's address goes through a proxy, check the proxy's settings too. " : ""}AgEnD did not accept this computer's saved connection, so the Runtime stopped. Open AgEnD Settings -> Runtime: if this computer is missing or revoked, or AgEnD's data was reset, it must be paired again; ${REPAIR} If the pairing was made against a different AgEnD address than this folder's, use the download that matches it.`;
25
- case "reinstall": return "AgEnD refused this Runtime because its version is not compatible with this AgEnD (it was installed from a different AgEnD release). Your pairing is kept. Re-run the install command shown in AgEnD Settings -> Runtime -> Connect a computer (Windows PowerShell tab) on this computer; it installs the matching Runtime next to this one and never deletes the version that is running. Then start it again with agend-runtime run (add the same --profile if you used one). If you installed from the ZIP, download the ZIP from the same page and double-click connect-agend.bat.";
26
- case "revoked": return `This computer was revoked in AgEnD Settings -> Runtime, so the Runtime stopped. To connect it again, ${REPAIR}`;
27
- case "replaced": return "This computer connected to AgEnD again from somewhere else, so AgEnD closed this connection. A pairing allows one live connection. Close the other Runtime window (or the other computer that uses a copy of this profile), then double-click connect-agend.bat again. Each computer needs its own pairing code.";
28
- case "incompatible": return "This Runtime could not understand a message from AgEnD, so it stopped. This usually means the Runtime and AgEnD are different versions, or the address points at something that is not this AgEnD. Download the Windows Runtime again from AgEnD Settings -> Runtime, extract it, and double-click connect-agend.bat.";
29
- case "rejected": return `AgEnD rejected a message from this Runtime${reason.detail ? ` (${reason.detail})` : ""}. Usual causes: leftover data from pairing this profile with a different AgEnD server, or a Runtime/AgEnD version mismatch. If this profile was used with another AgEnD server, ${REPAIR} If pairing reports an unfinished job from another pairing, follow that message: check that no CLI it started is still running, delete jobs.json in the profile folder, then pair again. Otherwise download the Windows Runtime again from AgEnD Settings -> Runtime, extract it, and double-click connect-agend.bat.`;
30
- }
31
- }
32
- const MAX_FRAME = 256 * 1024;
33
- const MAX_TOOL = 64 * 1024;
34
- function object(value) { return !!value && typeof value === "object" && !Array.isArray(value); }
35
- function message(error) { return error instanceof Error ? error.message.slice(0, 1000) : "Runtime operation failed"; }
36
- function checkedRun(value) {
37
- if (!object(value) || Object.keys(value).some(key => !["task", "resumeSessionId", "context", "mcp", "credentialProfile"].includes(key)))
38
- throw new Error("Invalid runtime run payload");
39
- const task = validateNativeTask(value.task);
40
- // A name and nothing else: a path, a drive letter or a control byte is not a profile name and is refused here, not "cleaned".
41
- if (value.credentialProfile !== undefined) {
42
- assertCredentialProfileName(value.credentialProfile);
43
- assertCredentialProfileCli(task.cli);
44
- }
45
- if (value.resumeSessionId !== undefined && !validNativeSessionId(task.cli, value.resumeSessionId))
46
- throw new Error("Invalid native conversation ID");
47
- if (value.context !== undefined && (typeof value.context !== "string" || value.context.length > 2000 || value.context.includes("\0")))
48
- throw new Error("Invalid native context");
49
- if (value.mcp !== undefined && (!object(value.mcp) || Object.keys(value.mcp).some(key => key !== "tools")
50
- || !Array.isArray(value.mcp.tools) || !value.mcp.tools.length || value.mcp.tools.length > 64
51
- || value.mcp.tools.some(tool => typeof tool !== "string" || !/^[a-z][a-z0-9_]{0,63}$/.test(tool))))
52
- throw new Error("Invalid scoped MCP request");
53
- return { task, resumeSessionId: value.resumeSessionId, context: value.context,
54
- mcp: value.mcp, ...(value.credentialProfile !== undefined ? { credentialProfile: value.credentialProfile } : {}) };
55
- }
56
- function jsonBody(req) {
57
- return new Promise((accept, reject) => {
58
- let text = "", bytes = 0;
59
- req.setTimeout(10_000, () => { reject(new Error("MCP request timed out")); req.destroy(); });
60
- req.setEncoding("utf8");
61
- req.on("data", (part) => { bytes += Buffer.byteLength(part); if (bytes > MAX_TOOL) {
62
- reject(new Error("MCP request is too large"));
63
- req.destroy();
64
- }
65
- else
66
- text += part; });
67
- req.on("error", reject);
68
- req.on("end", () => { try {
69
- accept(JSON.parse(text));
70
- }
71
- catch {
72
- reject(new Error("Invalid MCP JSON"));
73
- } });
74
- });
75
- }
76
- export class RuntimeClient {
77
- options;
78
- bootId = randomUUID();
79
- runtimeInfo;
80
- bridge;
81
- socket = null;
82
- welcomed = false;
83
- stopped = true;
84
- closed = false;
85
- unlock = null;
86
- reconnectTimer = null;
87
- reconnectAttempt = 0;
88
- graceTimer = null;
89
- pollTimer = null;
90
- credentialWatch = null;
91
- credentialStamp = "";
92
- credentials = null;
93
- startupRotation = null;
94
- paneHost = null;
95
- paneOpening = null;
96
- machinePaneLimit = 4;
97
- paneEpoch = randomUUID();
98
- active = new Set();
99
- snapshots = new Map();
100
- pendingPaneTools = new Map();
101
- pendingTools = new Map();
102
- mcpTokens = new Map();
103
- mcpServer = null;
104
- mcpOpening = null;
105
- mcpPort = 0;
106
- inventory = null;
107
- stoppedListeners = new Set();
108
- activity = new RuntimeUpdateActivity();
109
- stopPromise;
110
- generation = 0;
111
- updateProtocol = false;
112
- preparingUpdate = false;
113
- trialFence;
114
- updateWait;
115
- /** Set only when AgEnD ended the connection and the person must act; a local stop (Ctrl+C) leaves it undefined. */
116
- stopReason;
117
- /** The socket this Runtime itself closed with 1008 because it could not read AgEnD's frame; that is not AgEnD refusing us. */
118
- selfClosed = null;
119
- constructor(options) {
120
- this.options = options;
121
- const info = readRuntimeInfo({ panes: process.platform === "win32" || !!options.createPaneHost || !!options.openPaneLink });
122
- // Offered only when this client has a profile root to resolve names under; otherwise AgEnD must not ask for a profile.
123
- if (options.managedUpdate?.trialId !== undefined && !validRuntimeUpdateId(options.managedUpdate.trialId))
124
- throw Error("Invalid Runtime update trial");
125
- this.runtimeInfo = { ...info, capabilities: [...info.capabilities.filter(name => options.credentialProfilesRoot || name !== RUNTIME_CREDENTIAL_CAPABILITY), ...(options.managedUpdate ? [RUNTIME_MANAGED_UPDATE_CAPABILITY] : [])] };
126
- this.bridge = options.bridge ?? new WindowsCliBridge(nativeWindowsTransport, join(options.store.directory, WINDOWS_CLI_INVENTORY_FILE));
127
- }
128
- report(text) { this.options.report?.(text); }
129
- online() { return !this.trialFence && this.welcomed && this.socket?.readyState === WebSocket.OPEN; }
130
- waitUntilStopped() { return this.stopPromise ?? (this.stopped && this.closed ? Promise.resolve() : new Promise(done => this.stoppedListeners.add(done))); }
131
- async start() {
132
- if (!this.stopped)
133
- return;
134
- if (this.stopPromise) {
135
- await this.stopPromise;
136
- this.stopPromise = undefined;
137
- this.activity = new RuntimeUpdateActivity();
138
- }
139
- let credentials = this.options.store.credentials();
140
- if (!credentials)
141
- throw new Error("Pair this runtime before connecting");
142
- validateRuntimeServer(credentials.server);
143
- this.stopped = false;
144
- this.closed = false;
145
- this.stopReason = undefined;
146
- try {
147
- const systemBootId = process.platform === "win32" ? await readPaneSystemBootId() : undefined;
148
- if (this.stopped)
149
- throw Error("Runtime start was cancelled");
150
- const reused = process.platform === "win32" ? await reusedRuntimeLockPid(this.options.store.lockHolder()) : undefined;
151
- if (this.stopped)
152
- throw Error("Runtime start was cancelled");
153
- this.unlock = this.options.store.lock(this.bootId, systemBootId, reused);
154
- if (credentials.pendingCredential) {
155
- const rotating = this.startupRotation = rotateRuntimeCredentials({ store: this.options.store });
156
- try {
157
- credentials = await rotating;
158
- }
159
- finally {
160
- if (this.startupRotation === rotating)
161
- this.startupRotation = null;
162
- }
163
- }
164
- if (this.stopped)
165
- throw Error("Runtime start was cancelled");
166
- this.options.store.adoptMachine(credentials.machineId);
167
- this.options.store.recoverInterrupted();
168
- this.credentials = credentials;
169
- if (this.options.managedUpdate?.trialId) {
170
- this.trialFence = this.activity.tryFence(this.options.managedUpdate.trialId, () => !this.stopped, () => true);
171
- if (!this.trialFence)
172
- throw Error("Runtime trial admission is unavailable");
173
- }
174
- // Connect immediately, then publish the last administrator detection from the private profile.
175
- // A cached read starts no CLI. Only an explicit probe command with force:true performs detection.
176
- this.connect();
177
- // A foreground runtime must remain alive while an idle connection is down. Promises and unref'ed retry
178
- // timers do not keep Node running after the last socket closes; stop() owns and clears this liveness ref.
179
- this.pollTimer = setInterval(() => this.poll(), this.options.pollMs ?? 250);
180
- if (!this.trialFence)
181
- this.beginDiscovery();
182
- }
183
- catch (error) {
184
- this.stopped = true;
185
- this.unlock?.();
186
- this.unlock = null;
187
- throw error;
188
- }
189
- }
190
- connect() {
191
- if (this.stopped || !this.credentials)
192
- return;
193
- const url = validateRuntimeServer(this.credentials.server);
194
- url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
195
- url.pathname = "/runtime/v1/connect";
196
- const socket = this.socket = this.options.socketFactory?.(url.href, this.credentials.credential)
197
- ?? new WebSocket(url.href, { headers: { Authorization: `Bearer ${this.credentials.credential}` }, followRedirects: false,
198
- maxPayload: MAX_FRAME, handshakeTimeout: 15_000, perMessageDeflate: false });
199
- this.welcomed = false;
200
- this.updateProtocol = false;
201
- this.paneEpoch = randomUUID();
202
- socket.on("open", () => {
203
- if (this.stopped || this.socket !== socket) {
204
- socket.close();
205
- return;
206
- }
207
- this.send({ v: 1, type: "hello", bootId: this.bootId, name: this.credentials.name, platform: process.platform, runtimeInfo: this.runtimeInfo,
208
- ...(this.trialFence ? { updateTrialId: this.trialFence.id } : {}),
209
- ...(process.platform === "win32" || this.options.createPaneHost || this.options.openPaneLink ? { paneProtocol: 1 } : {}),
210
- ...(this.inventory ? { inventory: this.inventory } : {}) });
211
- });
212
- socket.on("message", (bytes, binary) => {
213
- const size = Array.isArray(bytes) ? bytes.reduce((sum, part) => sum + part.byteLength, 0) : bytes.byteLength;
214
- if (binary || size > MAX_FRAME || this.socket !== socket) {
215
- this.selfClosed = socket;
216
- socket.close(1008, "Invalid runtime frame");
217
- return;
218
- }
219
- void this.receive(bytes.toString()).catch(() => { this.selfClosed = socket; socket.close(1008, "Invalid runtime protocol"); });
220
- });
221
- socket.on("error", () => { });
222
- socket.on("unexpected-response", (_req, response) => {
223
- response.resume();
224
- if (response.statusCode === 401 || response.statusCode === 403) {
225
- this.report("Runtime credential was refused. Re-pair after the machine is authorized.");
226
- this.stopReason = { kind: "refused", ...(response.statusCode === 403 ? { detail: "HTTP 403" } : {}) };
227
- void this.stop();
228
- }
229
- else
230
- socket.terminate();
231
- });
232
- socket.on("close", (code, reason) => {
233
- if (this.socket !== socket)
234
- return;
235
- this.socket = null;
236
- this.welcomed = false;
237
- this.paneEpoch = randomUUID();
238
- if (this.updateWait) {
239
- const pending = this.updateWait;
240
- this.updateWait = undefined;
241
- clearTimeout(pending.timer);
242
- pending.reject(Error("Runtime update connection changed"));
243
- }
244
- if (this.paneHost && "connectionChanged" in this.paneHost)
245
- this.paneHost.connectionChanged();
246
- this.rejectTools();
247
- if (this.stopped)
248
- return;
249
- if (code === 1008) {
250
- const why = reason.toString().replace(/[^ -~]/g, "?").slice(0, 120);
251
- this.report(this.selfClosed === socket ? "This Runtime could not read a message from AgEnD and closed the connection." : `AgEnD closed the connection (code 1008${why ? `: ${why}` : ""}).`);
252
- this.stopReason = this.selfClosed === socket ? { kind: "incompatible" } : { kind: why === "Machine revoked" ? "revoked" : why === "Connection replaced" ? "replaced" : why.startsWith(RUNTIME_REINSTALL_CLOSE_PREFIX) ? "reinstall" : "rejected", ...(why ? { detail: why } : {}) };
253
- void this.stop({ retirePanes: why === "Machine revoked" });
254
- return;
255
- }
256
- this.report("Disconnected. Existing execution is not replayed; reconnecting…");
257
- if (!this.graceTimer)
258
- this.graceTimer = setTimeout(() => {
259
- this.graceTimer = null;
260
- for (const id of this.active) {
261
- try {
262
- this.bridge.cancel(id);
263
- }
264
- catch { /* state reconciles in poll */ }
265
- }
266
- this.report("The coordinator remained disconnected; cancellation was requested for the active execution.");
267
- }, this.options.disconnectGraceMs ?? 45_000);
268
- this.graceTimer.unref?.();
269
- const base = Math.min(30_000, 2000 * 2 ** Math.min(this.reconnectAttempt++, 4));
270
- const delay = this.options.reconnectMs ?? Math.min(30_000, Math.round(base * (0.75 + Math.random() * 0.5)));
271
- this.reconnectTimer = setTimeout(() => { this.reconnectTimer = null; this.connect(); }, delay);
272
- this.reconnectTimer.unref?.();
273
- });
274
- }
275
- send(value) {
276
- if (this.socket?.readyState !== WebSocket.OPEN)
277
- return;
278
- const frame = JSON.stringify(value);
279
- if (Buffer.byteLength(frame) > MAX_FRAME)
280
- throw new Error("Runtime frame limit exceeded");
281
- if (this.socket.bufferedAmount > 2 * MAX_FRAME) {
282
- this.socket.close(1013, "Runtime backpressure");
283
- return;
284
- }
285
- this.socket.send(frame);
286
- }
287
- async receive(text) {
288
- const value = JSON.parse(text);
289
- if (!object(value) || value.v !== 1 || typeof value.type !== "string")
290
- throw new Error("Unsupported runtime protocol");
291
- if (value.type === "welcome") {
292
- if (value.machineId !== this.credentials?.machineId || !Number.isSafeInteger(value.generation))
293
- throw new Error("Runtime machine identity mismatch");
294
- this.welcomed = true;
295
- this.generation = value.generation;
296
- this.updateProtocol = value.updateProtocol === 1;
297
- this.reconnectAttempt = 0;
298
- if (this.graceTimer) {
299
- clearTimeout(this.graceTimer);
300
- this.graceTimer = null;
301
- }
302
- this.report("Connected to AgEnD.");
303
- if (!this.trialFence)
304
- for (const job of this.options.store.list())
305
- this.publish(job);
306
- this.options.managedUpdate?.authenticated?.({ bootId: this.bootId, generation: this.generation, ...(this.updateProtocol ? { updateProtocol: 1 } : {}), runtimeInfo: this.runtimeInfo });
307
- return;
308
- }
309
- if (value.type === "update.control") {
310
- const control = parseRuntimeUpdateControl(value, "server"), pending = this.updateWait;
311
- if (!pending || control.bootId !== this.bootId || control.generation !== this.generation || control.id !== pending.id || !pending.phases.includes(control.phase))
312
- return;
313
- if (control.phase === "activated") {
314
- if (this.trialFence?.id !== control.id || !this.trialFence.current() || !this.locallyIdle())
315
- throw Error("Runtime trial is no longer idle");
316
- this.trialFence.release();
317
- this.trialFence = undefined;
318
- // Release synchronously: the server's next ordered frame may already contain ordinary work.
319
- for (const job of this.options.store.list())
320
- this.publish(job);
321
- this.beginDiscovery();
322
- }
323
- this.updateWait = undefined;
324
- clearTimeout(pending.timer);
325
- pending.accept(control.phase);
326
- return;
327
- }
328
- if (value.type === "revoked") {
329
- this.report("This machine was revoked by AgEnD.");
330
- this.stopReason = { kind: "revoked" };
331
- await this.stop({ retirePanes: true });
332
- return;
333
- }
334
- if (!this.welcomed)
335
- throw new Error("Runtime handshake is incomplete");
336
- if (value.type === "ping") {
337
- this.send({ v: 1, type: "pong" });
338
- return;
339
- }
340
- if (value.type === "tool.result") {
341
- if (typeof value.id !== "string")
342
- throw new Error("Invalid tool reply");
343
- const pending = this.pendingTools.get(value.id);
344
- if (!pending)
345
- return;
346
- clearTimeout(pending.timer);
347
- this.pendingTools.delete(value.id);
348
- if (value.ok === true)
349
- pending.accept(value.result);
350
- else
351
- pending.reject(new Error("AgEnD MCP request was refused"));
352
- return;
353
- }
354
- if (value.type === "pane.tool.result") {
355
- if (Object.keys(value).some(key => !["v", "type", "id", "ok", "result"].includes(key)) || !validWindowsAgentId(value.id) || typeof value.ok !== "boolean")
356
- throw Error("Invalid pane MCP reply");
357
- const pending = this.pendingPaneTools.get(value.id);
358
- if (!pending)
359
- return;
360
- this.pendingPaneTools.delete(value.id);
361
- clearTimeout(pending.timer);
362
- if (value.ok)
363
- pending.accept(value.result);
364
- else
365
- pending.reject(Error("Pane MCP request was refused"));
366
- return;
367
- }
368
- if (value.type === "pane.request") {
369
- if (Object.keys(value).some(key => !["v", "type", "id", "maxAgents", "request"].includes(key))
370
- || typeof value.id !== "string" || !validWindowsAgentId(value.id) || !Number.isInteger(value.maxAgents)
371
- || value.maxAgents < 1 || value.maxAgents > 16)
372
- throw Error("Invalid pane transport envelope");
373
- const request = validateRuntimePaneRequest(value.request);
374
- this.machinePaneLimit = value.maxAgents;
375
- const epoch = this.paneEpoch;
376
- let leave;
377
- try {
378
- leave = this.activity.enter();
379
- const host = await this.panes();
380
- // A terminal for an agent with no profile of its own starts under this pairing's default profile, when there is one. The default is passed
381
- // beside the launch, not inside it: the host decides with it only for a pane that is new, so a pane that is already running reattaches
382
- // whatever the default has become since.
383
- const fallback = request.action === "open" && request.launch.credentialProfile === undefined ? this.credentialProfileFor(request.launch.cli, undefined) : undefined;
384
- const forHost = request.action === "open" && fallback !== undefined ? { ...request, defaultCredentialProfile: fallback } : request;
385
- const result = await host.request(forHost, () => epoch === this.paneEpoch && this.online());
386
- if (request.action === "shutdown") {
387
- validateRuntimePaneShutdown(result, request.hostBootId);
388
- // Explicit coordinator disable, not a disconnect: the next enabled request discovers a new host boot.
389
- // Retire this cache before sending the reply, including when that reply is lost under backpressure.
390
- if (this.paneHost === host) {
391
- this.paneHost = null;
392
- this.paneOpening = null;
393
- }
394
- await host.stop();
395
- }
396
- this.send({ v: 1, type: "pane.response", id: value.id, ok: true, result });
397
- }
398
- catch (error) {
399
- this.send({ v: 1, type: "pane.response", id: value.id, ok: false, error: message(error) });
400
- }
401
- finally {
402
- leave?.();
403
- }
404
- return;
405
- }
406
- if (value.type !== "request" || typeof value.id !== "string" || !/^[A-Za-z0-9._:-]{1,128}$/.test(value.id)
407
- || typeof value.operation !== "string" || !object(value.payload))
408
- throw new Error("Invalid runtime request");
409
- const command = value;
410
- try {
411
- this.send({ v: 1, type: "response", id: command.id, ok: true, result: await this.operation(command.operation, command.payload) });
412
- }
413
- catch (error) {
414
- this.send({ v: 1, type: "response", id: command.id, ok: false, error: message(error) });
415
- }
416
- }
417
- publish(job) { if (this.online())
418
- this.send({ v: 1, type: "task", seq: job.seq, task: job.task }); }
419
- panes() {
420
- // A detached host link is not a live cache. Rediscover on the next independent request; never replay this RPC.
421
- if (this.paneHost && "connected" in this.paneHost && !this.paneHost.connected()) {
422
- this.paneHost = null;
423
- this.paneOpening = null;
424
- }
425
- if (!this.paneOpening) {
426
- const output = snapshot => { if (this.online())
427
- this.send({ v: 1, type: "pane.output", snapshot }); };
428
- if (this.options.createPaneHost)
429
- this.paneOpening = import("./runtime-pane-store.js").then(({ RuntimePaneStore }) => {
430
- const store = new RuntimePaneStore(join(this.options.store.directory, "panes"));
431
- store.recoverInterrupted();
432
- return this.paneHost = this.options.createPaneHost({ store, bootId: this.bootId, online: () => !this.stopped && this.online(), maxAgents: () => this.machinePaneLimit, output });
433
- });
434
- else
435
- this.paneOpening = import("./runtime-pane-link.js").then(({ RuntimePaneLink }) => (this.options.openPaneLink ?? RuntimePaneLink.open.bind(RuntimePaneLink))({
436
- directory: this.options.store.directory, server: this.credentials.server, machineId: this.credentials.machineId,
437
- ...(this.options.credentialProfilesRoot ? { credentialRoot: this.options.credentialProfilesRoot } : {}),
438
- online: () => !this.stopped && this.online(), maxAgents: () => this.machinePaneLimit, epoch: () => this.paneEpoch, output, mcp: (body, current) => this.paneMcp(body, current),
439
- })).then(host => this.paneHost = host);
440
- const opening = this.paneOpening;
441
- void opening.catch(() => { if (this.paneOpening === opening)
442
- this.paneOpening = null; });
443
- }
444
- return this.paneOpening;
445
- }
446
- paneMcp(raw, current) { return this.activity.run(() => this.forwardPaneMcp(raw, current)); }
447
- forwardPaneMcp(raw, current) {
448
- const body = validatePaneMcpBody(raw), epoch = this.paneEpoch;
449
- if (!current() || !this.online() || this.pendingPaneTools.size >= 32)
450
- return Promise.reject(Error("Pane MCP transport is unavailable"));
451
- const id = randomUUID();
452
- return new Promise((accept, reject) => {
453
- const timer = setTimeout(() => { this.pendingPaneTools.delete(id); reject(Error("Pane MCP response is unconfirmed")); }, 85_000);
454
- timer.unref();
455
- this.pendingPaneTools.set(id, { timer, reject, accept: value => current() && this.online() && this.paneEpoch === epoch ? accept(value) : reject(Error("Pane MCP lease expired")) });
456
- try {
457
- this.send({ v: 1, type: "pane.tool.request", id, body });
458
- }
459
- catch {
460
- this.pendingPaneTools.delete(id);
461
- clearTimeout(timer);
462
- reject(Error("Pane MCP response is unconfirmed"));
463
- }
464
- });
465
- }
466
- update(task) {
467
- if (this.closed)
468
- return;
469
- const serialized = JSON.stringify(task);
470
- if (this.snapshots.get(task.id) === serialized)
471
- return;
472
- try {
473
- const job = this.options.store.update(task);
474
- this.snapshots.set(task.id, serialized);
475
- this.publish(job);
476
- if (task.finishedAt) {
477
- this.active.delete(task.id);
478
- this.closeMcp(task.id);
479
- }
480
- }
481
- catch {
482
- // A process whose state could not be committed must not continue accepting commands.
483
- this.report("Runtime execution state could not be saved. Stop and inspect the private runtime profile.");
484
- try {
485
- this.bridge.cancel(task.id);
486
- }
487
- catch { /* leave durable accepted state blocked */ }
488
- this.socket?.close(1011, "Runtime storage failed");
489
- }
490
- }
491
- poll() { for (const id of this.active) {
492
- const task = this.bridge.get(id);
493
- if (task)
494
- this.update(task);
495
- } }
496
- /** Which profile a run uses: the one the agent named, else this pairing's default (Claude Code only), else none (the Runtime's own environment). */
497
- credentialProfileFor(cli, named) {
498
- if (named !== undefined)
499
- return named;
500
- return cli === "claude-code" && this.options.credentialProfilesRoot ? this.options.store.credentialDefault() : undefined;
501
- }
502
- stamp() { return credentialCacheStamp(this.options.credentialProfilesRoot, join(this.options.store.directory, "credential-default.json")); }
503
- /**
504
- * Re-report on its own after `agend-runtime login` / `profile default` (run in another window) changed the sign-in cache: the account shown
505
- * in AgEnD follows a profile that was signed in to another account, without an administrator pressing "Detect again". Reads the cache only.
506
- */
507
- watchCredentialCache() {
508
- if (!this.options.credentialProfilesRoot)
509
- return;
510
- this.credentialStamp = this.stamp();
511
- this.credentialWatch = setInterval(() => {
512
- if (!this.activity.accepting)
513
- return;
514
- const now = this.stamp();
515
- if (now === this.credentialStamp)
516
- return;
517
- this.credentialStamp = now;
518
- void this.refreshInventory(false).catch(() => { });
519
- }, this.options.credentialWatchMs ?? 5000);
520
- this.credentialWatch.unref?.();
521
- }
522
- statusOf(cli, directory) {
523
- if (this.options.credentialStatus)
524
- return this.options.credentialStatus(cli, directory);
525
- if (this.options.credentialLogin)
526
- return this.options.credentialLogin(cli, directory).then(loggedIn => ({ loggedIn }));
527
- return probeCredentialProfileStatus(cli, directory);
528
- }
529
- remember(root, cli, name, answer) {
530
- rememberCredentialStatus(root, cli, name, answer);
531
- this.credentialStamp = this.stamp(); // our own write is not "another window"
532
- }
533
- /** The folder of a profile that exists AND is signed in on this computer; anything else refuses, never the default account. */
534
- async credentialHome(cli, name) {
535
- const root = this.options.credentialProfilesRoot;
536
- if (!root)
537
- throw new Error("This Runtime has no credential profile folder, so it cannot select an account. Update or restart the Runtime.");
538
- if (!isCredentialProfileCli(cli))
539
- throw new Error("Credential profiles on a Windows Runtime support Claude Code only");
540
- const directory = requireCredentialProfile(root, cli, name);
541
- const answer = await this.statusOf(cli, directory);
542
- this.remember(root, cli, name, answer);
543
- if (answer.loggedIn !== true)
544
- throw credentialLoginRequired(cli, name, answer.loggedIn);
545
- return directory;
546
- }
547
- /** Names and signed-in yes/no only. `force` (an explicit "Detect again") asks each profile's CLI; otherwise the last known answer is reported. */
548
- async credentialReport(force) {
549
- const root = this.options.credentialProfilesRoot;
550
- if (!root)
551
- return undefined;
552
- if (force)
553
- for (const name of listCredentialProfileNames(root, "claude-code")) {
554
- try {
555
- this.remember(root, "claude-code", name, await this.statusOf("claude-code", requireCredentialProfile(root, "claude-code", name)));
556
- }
557
- catch {
558
- this.remember(root, "claude-code", name, { loggedIn: null });
559
- }
560
- }
561
- let name;
562
- try {
563
- name = this.options.store.credentialDefault();
564
- }
565
- catch { /* reported as no default; a run refuses with the real error */ }
566
- return credentialProfileReport(root, name);
567
- }
568
- beginDiscovery() {
569
- void this.refreshInventory().catch(() => this.report("CLI discovery failed; refresh it from AgEnD after checking the local installation."));
570
- this.watchCredentialCache();
571
- }
572
- refreshInventory(force = false) { return this.activity.run(() => this.readInventory(force)); }
573
- async readInventory(force) {
574
- const probed = await this.bridge.probe({ force }), credentialProfiles = await this.credentialReport(force);
575
- const inventory = credentialProfiles ? { ...probed, credentialProfiles } : probed;
576
- this.inventory = inventory;
577
- if (this.online())
578
- this.send({ v: 1, type: "inventory", inventory });
579
- return inventory;
580
- }
581
- /** Testable command surface. Mutation identity is committed before calling the native bridge. */
582
- operation(operation, payload) { return this.activity.run(() => this.ownedOperation(operation, payload)); }
583
- async ownedOperation(operation, payload) {
584
- if (operation === "probe") {
585
- if (Object.keys(payload).some(key => key !== "force") || (payload.force !== undefined && typeof payload.force !== "boolean"))
586
- throw new Error("Invalid discovery request");
587
- return this.refreshInventory(payload.force === true);
588
- }
589
- if (operation === "workspace") {
590
- if (Object.keys(payload).some(key => key !== "agentId") || !validWindowsAgentId(payload.agentId))
591
- throw new Error("Invalid workspace request");
592
- return { agentId: payload.agentId, cwd: await this.bridge.prepareWorkspace(payload.agentId) };
593
- }
594
- if (operation === "reconcile") {
595
- if (Object.keys(payload).length)
596
- throw new Error("Invalid reconciliation request");
597
- return { jobs: this.options.store.list().map(row => ({ seq: row.seq, task: row.task })) };
598
- }
599
- if (operation === "cancel" || operation === "recover") {
600
- if (typeof payload.runId !== "string" || Object.keys(payload).some(key => !["runId", ...(operation === "recover" ? ["confirmedStopped", "original"] : [])].includes(key)))
601
- throw new Error("Invalid execution operation");
602
- const stored = this.options.store.get(payload.runId);
603
- if (operation === "recover") {
604
- if (this.active.has(payload.runId))
605
- throw new Error("The native execution is still connected; wait for cancellation");
606
- if (payload.confirmedStopped !== true)
607
- throw new Error("Confirm the execution stopped before recovery");
608
- const original = payload.original === undefined ? null : checkedRun(payload.original);
609
- if (original && original.task.requestId !== payload.runId)
610
- throw new Error("Recovery execution identity does not match the original run");
611
- const digest = original ? runtimeJobDigest(original) : null;
612
- if (stored && digest && stored.digest !== digest)
613
- throw new Error("Recovery arguments do not match the accepted execution");
614
- if (!stored) {
615
- if (!original || !digest)
616
- throw new Error("Unknown execution recovery needs its trusted original run");
617
- if (this.active.size)
618
- throw new Error("Wait for the active native execution before recovery");
619
- const task = original.task;
620
- // The coordinator may have durably submitted a run that never reached this client. Explicit manual
621
- // confirmation creates a terminal tombstone, never an execution, so a delayed retry cannot launch it.
622
- const accepted = this.options.store.accept({ id: task.requestId, cli: task.cli, cwd: task.cwd, sandbox: task.sandbox,
623
- ...(task.model ? { model: task.model } : {}), status: "failed", startedAt: Date.now(), finishedAt: Date.now(),
624
- outcomeConfirmed: true, output: "", error: "The unconfirmed execution was manually confirmed stopped before local acceptance; it will not be replayed." }, digest);
625
- this.publish(accepted.job);
626
- return accepted.job.task;
627
- }
628
- if (stored.task.finishedAt && stored.task.outcomeConfirmed === true)
629
- return stored.task;
630
- this.bridge.releaseUnknown(payload.runId);
631
- const job = this.options.store.recover(payload.runId, true);
632
- this.publish(job);
633
- return job.task;
634
- }
635
- if (!stored)
636
- throw new Error("Runtime execution not found");
637
- if (!this.active.has(payload.runId))
638
- return stored.task;
639
- const task = this.bridge.cancel(payload.runId);
640
- this.update(task);
641
- return task;
642
- }
643
- if (operation !== "run")
644
- throw new Error("Unknown runtime operation");
645
- const run = checkedRun(payload), task = run.task;
646
- const digest = runtimeJobDigest(run);
647
- const accepted = this.options.store.accept({ id: task.requestId, cli: task.cli, cwd: task.cwd, sandbox: task.sandbox,
648
- ...(task.model ? { model: task.model } : {}), status: "starting", startedAt: Date.now(), output: "" }, digest);
649
- if (accepted.duplicate)
650
- return accepted.job.task;
651
- this.publish(accepted.job);
652
- try {
653
- // Fail closed, and as a confirmed failed turn: an unknown, unsigned or unusable profile never falls back to another account.
654
- const profile = this.credentialProfileFor(task.cli, run.credentialProfile);
655
- const credentialHome = profile ? await this.credentialHome(task.cli, profile) : undefined;
656
- const mcp = payload.mcp ? await this.openMcp(task.requestId, payload.mcp.tools) : undefined;
657
- if (this.stopped || !this.online())
658
- throw new Error("Runtime disconnected before native execution started");
659
- this.active.add(task.requestId);
660
- const initial = this.bridge.start(task, () => !this.stopped && this.online(), {
661
- ...(payload.resumeSessionId ? { resumeSessionId: payload.resumeSessionId } : {}),
662
- ...(payload.context ? { context: payload.context } : {}), ...(mcp ? { mcp } : {}), ...(credentialHome ? { credentialHome } : {}),
663
- onSettled: settled => this.update(settled),
664
- });
665
- this.update(initial);
666
- return this.options.store.get(task.requestId).task;
667
- }
668
- catch (error) {
669
- this.active.delete(task.requestId);
670
- this.closeMcp(task.requestId);
671
- const failed = { ...accepted.job.task, status: "failed", error: message(error), finishedAt: Date.now(), outcomeConfirmed: true };
672
- this.update(failed);
673
- return failed;
674
- }
675
- }
676
- locallyIdle() {
677
- return this.activity.pending === 0 && this.active.size === 0 && !this.options.store.blocked()
678
- && this.bridge.idleForUpdate?.() === true && this.pendingTools.size === 0 && this.pendingPaneTools.size === 0
679
- && !(this.paneOpening && !this.paneHost) && (this.socket?.bufferedAmount ?? 1) === 0;
680
- }
681
- updateRpc(phase, id, phases) {
682
- if (!this.welcomed || !this.updateProtocol || this.socket?.readyState !== WebSocket.OPEN || this.updateWait)
683
- return Promise.reject(Error("Runtime update negotiation is unavailable"));
684
- return new Promise((accept, reject) => {
685
- const pending = { id, phases, accept, reject, timer: setTimeout(() => {
686
- if (this.updateWait === pending)
687
- this.updateWait = undefined;
688
- reject(Error("Runtime update acknowledgement is unconfirmed"));
689
- }, 10_000) };
690
- pending.timer.unref();
691
- this.updateWait = pending;
692
- try {
693
- this.send({ v: 1, type: "update.control", id, bootId: this.bootId, generation: this.generation, phase });
694
- }
695
- catch (error) {
696
- this.updateWait = undefined;
697
- clearTimeout(pending.timer);
698
- reject(error);
699
- }
700
- });
701
- }
702
- /** Called only by the local supervisor. A timeout or disconnect never authorizes process replacement. */
703
- async prepareUpdate(id) {
704
- if (!validRuntimeUpdateId(id) || !this.options.managedUpdate || this.trialFence || this.preparingUpdate || !this.online() || !this.updateProtocol)
705
- return false;
706
- const socket = this.socket, generation = this.generation;
707
- const current = () => !this.stopped && this.socket === socket && socket.readyState === WebSocket.OPEN && this.generation === generation;
708
- const fence = this.activity.tryFence(id, current, () => this.locallyIdle());
709
- if (!fence)
710
- return false;
711
- this.preparingUpdate = true;
712
- let committed = false;
713
- try {
714
- if (await this.updateRpc("prepare", id, ["prepared", "busy", "cancelled"]) !== "prepared")
715
- return false;
716
- if (this.options.drainPaneHostForUpdate)
717
- await this.options.drainPaneHostForUpdate(() => fence.current());
718
- else {
719
- const { RuntimePaneLink } = await import("./runtime-pane-link.js");
720
- const existing = this.paneHost instanceof RuntimePaneLink && this.paneHost.connected() ? this.paneHost : undefined;
721
- if (!existing && (this.options.createPaneHost || this.options.openPaneLink))
722
- throw Error("Injected pane host requires its own positive idle proof");
723
- await RuntimePaneLink.drainExistingForUpdate({ directory: this.options.store.directory, server: this.credentials.server, machineId: this.credentials.machineId,
724
- online: () => current(), maxAgents: () => this.machinePaneLimit, epoch: () => this.paneEpoch, mcp: (body, owned) => this.paneMcp(body, owned) }, () => fence.current(), existing);
725
- }
726
- if (!fence.current() || !this.locallyIdle())
727
- return false;
728
- if (await this.updateRpc("ready", id, ["commit", "busy", "cancelled"]) !== "commit")
729
- return false;
730
- fence.commit();
731
- committed = true;
732
- await this.stop();
733
- return true;
734
- }
735
- catch (error) {
736
- if (committed)
737
- throw error;
738
- return false;
739
- }
740
- finally {
741
- this.preparingUpdate = false;
742
- if (!committed) {
743
- try {
744
- if (!current() || await this.updateRpc("cancel", id, ["cancelled", "commit"]) !== "cancelled")
745
- socket.terminate();
746
- }
747
- catch {
748
- socket.terminate();
749
- }
750
- fence.release();
751
- }
752
- }
753
- }
754
- /** The parent persists activation intent before this call; an unconfirmed answer is never rollback permission. */
755
- async activateTrial(id) {
756
- if (this.trialFence?.id !== id || !this.locallyIdle())
757
- return false;
758
- return await this.updateRpc("activate", id, ["activated", "busy", "cancelled"]) === "activated";
759
- }
760
- async openMcp(runId, tools) {
761
- if (!this.mcpOpening)
762
- this.mcpOpening = new Promise((accept, reject) => {
763
- const server = this.mcpServer = createServer((req, res) => {
764
- const reply = (status, value) => { if (!res.writableEnded && !res.destroyed) {
765
- res.writeHead(status, { "Content-Type": "application/json", "Cache-Control": "no-store" });
766
- res.end(JSON.stringify(value));
767
- } };
768
- const header = req.headers["x-agend-native-token"];
769
- const entry = typeof header === "string" && /^[a-f0-9]{64}$/.test(header) ? this.mcpTokens.get(header) : undefined;
770
- if (req.method !== "POST" || req.url !== "/agent" || req.headers.origin !== undefined || req.headers.cookie !== undefined
771
- || !["127.0.0.1", "::1", "::ffff:127.0.0.1"].includes(req.socket.remoteAddress ?? "") || !entry
772
- || !this.active.has(entry.runId) || !this.online()) {
773
- req.resume();
774
- reply(403, { error: "Runtime MCP capability is unavailable" });
775
- return;
776
- }
777
- let leave;
778
- try {
779
- leave = this.activity.enter();
780
- }
781
- catch {
782
- req.resume();
783
- reply(503, { error: "Runtime update is pending" });
784
- return;
785
- }
786
- const finished = new Promise(done => {
787
- const settle = () => { res.off("finish", settle); res.off("close", settle); done(); };
788
- res.once("finish", settle);
789
- res.once("close", settle);
790
- if (res.destroyed || res.writableFinished)
791
- settle();
792
- });
793
- void jsonBody(req).then(async (body) => {
794
- if (!object(body) || body.op !== "native-mcp" || !["tools/list", "tools/call"].includes(String(body.method))
795
- || !object(body.params) || Object.keys(body).some(key => !["op", "method", "params", "callId"].includes(key)))
796
- throw new Error("Invalid runtime MCP request");
797
- if (body.method === "tools/call" && (!entry.tools.includes(String(body.params.name)) || !object(body.params.arguments)
798
- || typeof body.callId !== "string" || !/^[A-Za-z0-9._:-]{1,128}$/.test(body.callId)))
799
- throw new Error("Runtime MCP tool is unavailable");
800
- const result = await this.toolCall(entry.runId, body);
801
- if (!this.active.has(entry.runId) || !this.online()) {
802
- reply(401, { error: "Runtime MCP capability expired" });
803
- return;
804
- }
805
- if (Buffer.byteLength(JSON.stringify(result) ?? "") > MAX_TOOL)
806
- throw new Error("Runtime MCP result is too large");
807
- reply(200, result);
808
- }).catch(() => reply(403, { error: "Runtime MCP request was refused or its execution expired" })).finally(async () => { await finished; leave(); });
809
- });
810
- server.on("error", reject);
811
- server.listen(0, "127.0.0.1", () => { const address = server.address(); if (!address || typeof address === "string") {
812
- reject(new Error("Runtime MCP could not bind"));
813
- return;
814
- } this.mcpPort = address.port; accept(address.port); });
815
- });
816
- await this.mcpOpening;
817
- const token = randomBytes(32).toString("hex");
818
- this.mcpTokens.set(token, { runId, tools: [...tools] });
819
- return { endpoint: `http://127.0.0.1:${this.mcpPort}/agent`, token, tools: [...tools] };
820
- }
821
- closeMcp(runId) { for (const [token, entry] of this.mcpTokens)
822
- if (entry.runId === runId)
823
- this.mcpTokens.delete(token); }
824
- toolCall(runId, body) {
825
- if (!this.online())
826
- return Promise.reject(new Error("Runtime is disconnected"));
827
- if (this.pendingTools.size >= 64)
828
- return Promise.reject(new Error("Runtime MCP call capacity reached"));
829
- const id = randomUUID();
830
- return new Promise((accept, reject) => {
831
- const timer = setTimeout(() => { this.pendingTools.delete(id); reject(new Error("AgEnD MCP request timed out")); }, 90_000);
832
- timer.unref?.();
833
- this.pendingTools.set(id, { accept, reject, timer });
834
- this.send({ v: 1, type: "tool.call", id, runId, body });
835
- });
836
- }
837
- rejectTools() {
838
- for (const pending of this.pendingPaneTools.values()) {
839
- clearTimeout(pending.timer);
840
- pending.reject(Error("Pane MCP disconnected; no call was replayed"));
841
- }
842
- this.pendingPaneTools.clear();
843
- for (const pending of this.pendingTools.values()) {
844
- clearTimeout(pending.timer);
845
- pending.reject(new Error("Runtime disconnected"));
846
- }
847
- this.pendingTools.clear();
848
- }
849
- stop(options = {}) {
850
- if (this.stopPromise)
851
- return this.stopPromise;
852
- if (this.stopped)
853
- return Promise.resolve();
854
- this.stopped = true;
855
- this.welcomed = false;
856
- this.activity.close();
857
- // Own cleanup before callbacks (bridge.close, pane cleanup) can re-enter stop().
858
- return this.stopPromise = Promise.resolve().then(() => this.stopOwned(options));
859
- }
860
- async stopOwned(options) {
861
- if (this.updateWait) {
862
- const pending = this.updateWait;
863
- this.updateWait = undefined;
864
- clearTimeout(pending.timer);
865
- pending.reject(Error("Runtime update stopped"));
866
- }
867
- if (this.reconnectTimer)
868
- clearTimeout(this.reconnectTimer);
869
- if (this.graceTimer)
870
- clearTimeout(this.graceTimer);
871
- if (this.pollTimer)
872
- clearInterval(this.pollTimer);
873
- if (this.credentialWatch)
874
- clearInterval(this.credentialWatch);
875
- this.reconnectTimer = null;
876
- this.graceTimer = null;
877
- this.pollTimer = null;
878
- this.credentialWatch = null;
879
- this.rejectTools();
880
- this.mcpTokens.clear();
881
- this.bridge.close();
882
- const socket = this.socket;
883
- this.socket = null;
884
- if (socket) {
885
- socket.close();
886
- if (socket.readyState !== WebSocket.CLOSED)
887
- socket.terminate();
888
- }
889
- // A cancelled start may still finish its durable credential write. Do not release the profile to another writer.
890
- await this.startupRotation?.catch(() => { });
891
- await this.paneOpening?.then(async (host) => {
892
- try {
893
- if (options.retirePanes && "retireOwned" in host)
894
- await host.retireOwned();
895
- }
896
- finally {
897
- await host.stop();
898
- }
899
- }).catch(() => this.report("Pane cleanup is unconfirmed; its durable reservations remain held."));
900
- // Keep the profile lock until cancellation is confirmed or the journal is explicitly marked uncertain.
901
- const deadline = Date.now() + 5000;
902
- while (this.active.size && Date.now() < deadline) {
903
- this.poll();
904
- if (!this.active.size)
905
- break;
906
- await new Promise(done => setTimeout(done, 50));
907
- }
908
- for (const id of this.active) {
909
- const old = this.options.store.get(id);
910
- if (old)
911
- this.update({ ...old.task, status: "failed", finishedAt: Date.now(), outcomeConfirmed: false,
912
- error: "Runtime stopped before native process shutdown was confirmed. Inspect processes before recovery." });
913
- }
914
- if (this.mcpServer) {
915
- const server = this.mcpServer;
916
- this.mcpServer = null;
917
- server.closeAllConnections();
918
- await new Promise(done => server.close(() => done()));
919
- }
920
- this.unlock?.();
921
- this.unlock = null;
922
- this.closed = true;
923
- for (const done of this.stoppedListeners)
924
- done();
925
- this.stoppedListeners.clear();
926
- }
927
- }
928
- async function post(server, path, body, signal, credential) {
929
- const response = await fetch(new URL(path, server), { method: "POST", redirect: "error", headers: { "Content-Type": "application/json", ...(credential ? { Authorization: `Bearer ${credential}` } : {}) },
930
- body: JSON.stringify(body), signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15_000)]) : AbortSignal.timeout(15_000) });
931
- let text = "", bytes = 0;
932
- if (response.body)
933
- for await (const part of response.body) {
934
- bytes += part.byteLength;
935
- if (bytes > MAX_TOOL)
936
- throw new Error("Runtime pairing response is too large");
937
- text += new TextDecoder().decode(part);
938
- }
939
- let data;
940
- try {
941
- data = JSON.parse(text);
942
- }
943
- catch {
944
- throw new Error("Invalid runtime pairing response");
945
- }
946
- if (!object(data))
947
- throw new Error("Invalid runtime pairing response");
948
- return { status: response.status, data };
949
- }
950
- /** Caller holds the profile lock. Persist the candidate before wire; either credential can recover a lost response. */
951
- export async function rotateRuntimeCredentials(input) {
952
- let saved = input.store.credentials();
953
- if (!saved)
954
- throw Error("Pair this runtime before rotating its credential");
955
- if (!saved.pendingCredential) {
956
- saved = { ...saved, pendingCredential: randomBytes(32).toString("hex") };
957
- input.store.saveCredentials(saved);
958
- }
959
- const server = validateRuntimeServer(saved.server), candidate = saved.pendingCredential;
960
- for (const credential of [saved.credential, candidate]) {
961
- const response = await post(server, RUNTIME_ROTATE_PATH, { machineId: saved.machineId, credential: candidate }, input.signal, credential);
962
- if (response.status === 200 && response.data.status === "rotated" && response.data.machineId === saved.machineId) {
963
- const { pendingCredential: _, ...current } = saved;
964
- const completed = { ...current, credential: candidate };
965
- input.store.saveCredentials(completed);
966
- return completed;
967
- }
968
- if (response.status !== 401 && response.status !== 429)
969
- break;
970
- }
971
- throw Error("Runtime credential rotation was not confirmed. The saved candidate is retained; retry rotate before connecting.");
972
- }
973
- export async function pairRuntime(input) {
974
- const server = validateRuntimeServer(input.server);
975
- if (!input.code.trim() || input.code.length > 256 || /[\x00-\x1f]/.test(input.code) || !input.name.trim() || input.name.length > 100)
976
- throw new Error("Enter a valid pairing code and machine name");
977
- input.store.assertCanPair();
978
- const paired = await post(server, "/runtime/v1/pair", { code: input.code.trim(), name: input.name.trim(), platform: process.platform, hostname: hostname() }, input.signal);
979
- if (paired.status !== 201 || paired.data.status !== "pending" || typeof paired.data.machineId !== "string" || typeof paired.data.claimSecret !== "string")
980
- throw new Error(`Runtime pairing was refused (HTTP ${paired.status})`);
981
- const deadline = Math.min(Date.now() + 10 * 60_000, typeof paired.data.expiresAt === "number" ? paired.data.expiresAt : Infinity);
982
- const fingerprint = runtimeClaimFingerprint(paired.data.claimSecret);
983
- input.report?.(`Pairing fingerprint: ${fingerprint}. Compare it with AgEnD Settings → Runtime before approving this machine; waiting for approval…`);
984
- while (!input.signal?.aborted && Date.now() < deadline) {
985
- const claimed = await post(server, "/runtime/v1/claim", { machineId: paired.data.machineId, claimSecret: paired.data.claimSecret }, input.signal);
986
- if (claimed.status === 200 && claimed.data.status === "approved" && claimed.data.machineId === paired.data.machineId
987
- && typeof claimed.data.credential === "string" && /^[A-Za-z0-9._-]{16,256}$/.test(claimed.data.credential)) {
988
- const credentials = { server: server.origin, machineId: paired.data.machineId, credential: claimed.data.credential, name: input.name.trim() };
989
- // Save first: the one-time credential cannot be issued again. A ledger that changed since the check above is reported after it is safe.
990
- input.store.saveCredentials(credentials);
991
- try {
992
- input.store.adoptMachine(credentials.machineId, true);
993
- }
994
- catch (error) {
995
- throw new Error(`The computer was paired and its credential is saved. ${error instanceof Error ? error.message : "Its job ledger could not be updated."}`);
996
- }
997
- input.report?.("Runtime paired. Its machine credential was saved in the private local profile.");
998
- return credentials;
999
- }
1000
- if (claimed.status !== 202 || claimed.data.status !== "pending")
1001
- throw new Error(`Runtime approval was refused or expired (HTTP ${claimed.status})`);
1002
- await new Promise((accept, reject) => {
1003
- const timer = setTimeout(() => { input.signal?.removeEventListener("abort", abort); accept(); }, input.pollMs ?? 1500);
1004
- const abort = () => { clearTimeout(timer); reject(new Error("Runtime pairing cancelled")); };
1005
- input.signal?.addEventListener("abort", abort, { once: true });
1006
- });
1007
- }
1008
- throw new Error(input.signal?.aborted ? "Runtime pairing was cancelled" : "Runtime pairing expired before the computer was approved. Open AgEnD Settings -> Runtime, then double-click connect-agend.bat again and enter a new pairing code.");
1009
- }
1010
- //# sourceMappingURL=runtime-client.js.map