@songsid/agend 2.3.5-alpha.4 → 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 (670) hide show
  1. package/README.md +0 -2
  2. package/README.zh-TW.md +0 -2
  3. package/THIRD_PARTY_NOTICES.md +12 -28
  4. package/dist/agent-cli-instructions.md +1 -1
  5. package/dist/agent-credentials.d.ts +24 -0
  6. package/dist/agent-credentials.js +66 -0
  7. package/dist/agent-credentials.js.map +1 -0
  8. package/dist/agent-endpoint.d.ts +4 -6
  9. package/dist/agent-endpoint.js +15 -12
  10. package/dist/agent-endpoint.js.map +1 -1
  11. package/dist/auth-api.d.ts +0 -21
  12. package/dist/auth-api.js +8 -93
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/authority/session-authorizations.d.ts +30 -4
  15. package/dist/authority/session-authorizations.js +69 -17
  16. package/dist/authority/session-authorizations.js.map +1 -1
  17. package/dist/authority/web-authority.d.ts +2 -12
  18. package/dist/authority/web-authority.js +4 -25
  19. package/dist/authority/web-authority.js.map +1 -1
  20. package/dist/backend/antigravity.js +3 -1
  21. package/dist/backend/antigravity.js.map +1 -1
  22. package/dist/backend/claude-code.d.ts +12 -15
  23. package/dist/backend/claude-code.js +133 -152
  24. package/dist/backend/claude-code.js.map +1 -1
  25. package/dist/backend/codex-metadata.d.ts +14 -0
  26. package/dist/backend/codex-metadata.js +45 -0
  27. package/dist/backend/codex-metadata.js.map +1 -1
  28. package/dist/backend/codex-package.d.ts +2 -5
  29. package/dist/backend/codex-package.js +5 -1
  30. package/dist/backend/codex-package.js.map +1 -1
  31. package/dist/backend/codex-quota-history.d.ts +7 -0
  32. package/dist/backend/codex-quota-history.js +72 -0
  33. package/dist/backend/codex-quota-history.js.map +1 -0
  34. package/dist/backend/codex-session-lookup.d.ts +6 -0
  35. package/dist/backend/codex-session-lookup.js +1 -1
  36. package/dist/backend/codex-session-lookup.js.map +1 -1
  37. package/dist/backend/codex-speed.d.ts +14 -0
  38. package/dist/backend/codex-speed.js +35 -0
  39. package/dist/backend/codex-speed.js.map +1 -0
  40. package/dist/backend/codex.d.ts +116 -136
  41. package/dist/backend/codex.js +912 -942
  42. package/dist/backend/codex.js.map +1 -1
  43. package/dist/backend/grok-weekly-reset.d.ts +24 -0
  44. package/dist/backend/grok-weekly-reset.js +95 -0
  45. package/dist/backend/grok-weekly-reset.js.map +1 -0
  46. package/dist/backend/grok.d.ts +30 -3
  47. package/dist/backend/grok.js +301 -76
  48. package/dist/backend/grok.js.map +1 -1
  49. package/dist/backend/kiro.d.ts +3 -0
  50. package/dist/backend/kiro.js +50 -2
  51. package/dist/backend/kiro.js.map +1 -1
  52. package/dist/backend/muse.js +5 -3
  53. package/dist/backend/muse.js.map +1 -1
  54. package/dist/backend/types.d.ts +15 -8
  55. package/dist/backend/types.js +3 -0
  56. package/dist/backend/types.js.map +1 -1
  57. package/dist/bundled-tmux-guard.d.ts +21 -0
  58. package/dist/bundled-tmux-guard.js +96 -0
  59. package/dist/bundled-tmux-guard.js.map +1 -0
  60. package/dist/cache-ledger.d.ts +95 -0
  61. package/dist/cache-ledger.js +276 -4
  62. package/dist/cache-ledger.js.map +1 -1
  63. package/dist/cache-service.d.ts +5 -0
  64. package/dist/cache-service.js +16 -4
  65. package/dist/cache-service.js.map +1 -1
  66. package/dist/channel/adapters/discord.js +11 -3
  67. package/dist/channel/adapters/discord.js.map +1 -1
  68. package/dist/channel/adapters/telegram.d.ts +51 -0
  69. package/dist/channel/adapters/telegram.js +235 -17
  70. package/dist/channel/adapters/telegram.js.map +1 -1
  71. package/dist/channel/ipc-bridge.d.ts +0 -2
  72. package/dist/channel/mcp-tools.js +3 -3
  73. package/dist/channel/mcp-tools.js.map +1 -1
  74. package/dist/channel/types.d.ts +2 -0
  75. package/dist/classic-channel-manager.d.ts +2 -0
  76. package/dist/classic-channel-manager.js +5 -1
  77. package/dist/classic-channel-manager.js.map +1 -1
  78. package/dist/cli.js +14 -10
  79. package/dist/cli.js.map +1 -1
  80. package/dist/config-validator.js +30 -71
  81. package/dist/config-validator.js.map +1 -1
  82. package/dist/config.js +3 -17
  83. package/dist/config.js.map +1 -1
  84. package/dist/cross-instance-notice.d.ts +10 -0
  85. package/dist/cross-instance-notice.js +67 -5
  86. package/dist/cross-instance-notice.js.map +1 -1
  87. package/dist/daemon.d.ts +70 -68
  88. package/dist/daemon.js +774 -846
  89. package/dist/daemon.js.map +1 -1
  90. package/dist/dashboard-permissions.d.ts +8 -0
  91. package/dist/dashboard-permissions.js +16 -0
  92. package/dist/dashboard-permissions.js.map +1 -1
  93. package/dist/delivery-consumed-watch.d.ts +26 -16
  94. package/dist/delivery-consumed-watch.js +31 -26
  95. package/dist/delivery-consumed-watch.js.map +1 -1
  96. package/dist/delivery-outbox.d.ts +0 -5
  97. package/dist/delivery-outbox.js +4 -32
  98. package/dist/delivery-outbox.js.map +1 -1
  99. package/dist/delivery-reconciliation.d.ts +42 -2
  100. package/dist/delivery-reconciliation.js +164 -2
  101. package/dist/delivery-reconciliation.js.map +1 -1
  102. package/dist/export-import.d.ts +7 -0
  103. package/dist/export-import.js +44 -10
  104. package/dist/export-import.js.map +1 -1
  105. package/dist/fleet-context.d.ts +4 -2
  106. package/dist/fleet-level-config.d.ts +1 -1
  107. package/dist/fleet-level-config.js +0 -2
  108. package/dist/fleet-level-config.js.map +1 -1
  109. package/dist/fleet-manager.d.ts +108 -245
  110. package/dist/fleet-manager.js +656 -2028
  111. package/dist/fleet-manager.js.map +1 -1
  112. package/dist/general-instance.d.ts +0 -7
  113. package/dist/general-instance.js +3 -20
  114. package/dist/general-instance.js.map +1 -1
  115. package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
  116. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  117. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
  118. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
  119. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +9 -3
  120. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  121. package/dist/instance-config-impact.js +6 -7
  122. package/dist/instance-config-impact.js.map +1 -1
  123. package/dist/instance-lifecycle.d.ts +19 -23
  124. package/dist/instance-lifecycle.js +216 -383
  125. package/dist/instance-lifecycle.js.map +1 -1
  126. package/dist/instance-topic-delete.d.ts +77 -0
  127. package/dist/instance-topic-delete.js +123 -0
  128. package/dist/instance-topic-delete.js.map +1 -0
  129. package/dist/instructions.d.ts +1 -3
  130. package/dist/instructions.js +1 -7
  131. package/dist/instructions.js.map +1 -1
  132. package/dist/kiro-engine-status.d.ts +11 -0
  133. package/dist/kiro-engine-status.js +6 -0
  134. package/dist/kiro-engine-status.js.map +1 -1
  135. package/dist/locale.js +63 -86
  136. package/dist/locale.js.map +1 -1
  137. package/dist/log-service.d.ts +28 -0
  138. package/dist/log-service.js +29 -0
  139. package/dist/log-service.js.map +1 -1
  140. package/dist/log-steps.d.ts +4 -3
  141. package/dist/log-steps.js +32 -7
  142. package/dist/log-steps.js.map +1 -1
  143. package/dist/logger.d.ts +16 -2
  144. package/dist/logger.js +346 -66
  145. package/dist/logger.js.map +1 -1
  146. package/dist/login-flows.d.ts +7 -0
  147. package/dist/login-flows.js +5 -2
  148. package/dist/login-flows.js.map +1 -1
  149. package/dist/login-manager.js +25 -4
  150. package/dist/login-manager.js.map +1 -1
  151. package/dist/missed-offline.d.ts +25 -0
  152. package/dist/missed-offline.js +79 -0
  153. package/dist/missed-offline.js.map +1 -0
  154. package/dist/muse-usage-relay.d.ts +2 -0
  155. package/dist/muse-usage-relay.js +5 -3
  156. package/dist/muse-usage-relay.js.map +1 -1
  157. package/dist/needs-you-hub.d.ts +6 -3
  158. package/dist/needs-you-hub.js +31 -9
  159. package/dist/needs-you-hub.js.map +1 -1
  160. package/dist/needs-you.d.ts +20 -18
  161. package/dist/needs-you.js +18 -14
  162. package/dist/needs-you.js.map +1 -1
  163. package/dist/office-share-page.js +1 -1
  164. package/dist/office-share-page.js.map +1 -1
  165. package/dist/outbound-handlers.d.ts +2 -16
  166. package/dist/outbound-handlers.js +10 -72
  167. package/dist/outbound-handlers.js.map +1 -1
  168. package/dist/outbound-schemas.d.ts +0 -38
  169. package/dist/outbound-schemas.js +5 -14
  170. package/dist/outbound-schemas.js.map +1 -1
  171. package/dist/pane-quota-history.d.ts +7 -0
  172. package/dist/pane-quota-history.js +47 -0
  173. package/dist/pane-quota-history.js.map +1 -0
  174. package/dist/platform-general.d.ts +46 -0
  175. package/dist/platform-general.js +91 -0
  176. package/dist/platform-general.js.map +1 -0
  177. package/dist/public-web-gateway.js +0 -9
  178. package/dist/public-web-gateway.js.map +1 -1
  179. package/dist/public-web-link.d.ts +0 -11
  180. package/dist/public-web-link.js +0 -13
  181. package/dist/public-web-link.js.map +1 -1
  182. package/dist/queued-handoffs.d.ts +33 -0
  183. package/dist/queued-handoffs.js +75 -0
  184. package/dist/queued-handoffs.js.map +1 -0
  185. package/dist/quickstart-api.js +5 -9
  186. package/dist/quickstart-api.js.map +1 -1
  187. package/dist/quickstart.d.ts +8 -1
  188. package/dist/quickstart.js +42 -4
  189. package/dist/quickstart.js.map +1 -1
  190. package/dist/quota-notice-config.d.ts +22 -0
  191. package/dist/quota-notice-config.js +41 -0
  192. package/dist/quota-notice-config.js.map +1 -0
  193. package/dist/quota-notice.d.ts +7 -0
  194. package/dist/quota-notice.js +40 -0
  195. package/dist/quota-notice.js.map +1 -1
  196. package/dist/reply-buttons-controller.js +10 -6
  197. package/dist/reply-buttons-controller.js.map +1 -1
  198. package/dist/reply-polls.d.ts +2 -2
  199. package/dist/reply-polls.js +3 -3
  200. package/dist/reply-polls.js.map +1 -1
  201. package/dist/scheduler/db.d.ts +2 -1
  202. package/dist/scheduler/db.js +23 -9
  203. package/dist/scheduler/db.js.map +1 -1
  204. package/dist/scheduler/task-board.d.ts +9 -0
  205. package/dist/scheduler/task-board.js +19 -0
  206. package/dist/scheduler/task-board.js.map +1 -1
  207. package/dist/settings-api.d.ts +13 -5
  208. package/dist/settings-api.js +26 -96
  209. package/dist/settings-api.js.map +1 -1
  210. package/dist/settings-baseline.d.ts +0 -1
  211. package/dist/settings-baseline.js +1 -1
  212. package/dist/settings-baseline.js.map +1 -1
  213. package/dist/settings-change.js +23 -28
  214. package/dist/settings-change.js.map +1 -1
  215. package/dist/settings-confirmation.d.ts +1 -16
  216. package/dist/settings-confirmation.js +9 -47
  217. package/dist/settings-confirmation.js.map +1 -1
  218. package/dist/settings-effect.d.ts +0 -4
  219. package/dist/settings-effect.js +1 -58
  220. package/dist/settings-effect.js.map +1 -1
  221. package/dist/settings-http-confirmation.d.ts +0 -4
  222. package/dist/settings-http-confirmation.js +3 -31
  223. package/dist/settings-http-confirmation.js.map +1 -1
  224. package/dist/settings-instance-patch.js +28 -1
  225. package/dist/settings-instance-patch.js.map +1 -1
  226. package/dist/settings-request-capability.d.ts +0 -2
  227. package/dist/settings-request-capability.js +0 -4
  228. package/dist/settings-request-capability.js.map +1 -1
  229. package/dist/settings-transaction.d.ts +0 -4
  230. package/dist/settings-transaction.js +0 -9
  231. package/dist/settings-transaction.js.map +1 -1
  232. package/dist/setup-form.js +3 -6
  233. package/dist/setup-form.js.map +1 -1
  234. package/dist/setup-i18n.js +0 -3
  235. package/dist/setup-i18n.js.map +1 -1
  236. package/dist/task-board-tool.d.ts +11 -0
  237. package/dist/task-board-tool.js +44 -0
  238. package/dist/task-board-tool.js.map +1 -1
  239. package/dist/task-board-waker.d.ts +6 -0
  240. package/dist/task-board-waker.js +4 -0
  241. package/dist/task-board-waker.js.map +1 -1
  242. package/dist/tmux-control.d.ts +1 -2
  243. package/dist/tmux-control.js.map +1 -1
  244. package/dist/tmux-manager.d.ts +1 -2
  245. package/dist/tmux-manager.js.map +1 -1
  246. package/dist/tool-permissions.d.ts +5 -2
  247. package/dist/tool-permissions.js +7 -7
  248. package/dist/tool-permissions.js.map +1 -1
  249. package/dist/tool-progress.d.ts +2 -0
  250. package/dist/tool-progress.js +19 -3
  251. package/dist/tool-progress.js.map +1 -1
  252. package/dist/topic-commands.js +4 -3
  253. package/dist/topic-commands.js.map +1 -1
  254. package/dist/transcript-delta-reader.d.ts +1 -1
  255. package/dist/transcript-delta-reader.js +1 -1
  256. package/dist/transcript-delta-reader.js.map +1 -1
  257. package/dist/transcript-monitor.d.ts +20 -3
  258. package/dist/transcript-monitor.js +92 -24
  259. package/dist/transcript-monitor.js.map +1 -1
  260. package/dist/transcript-sources.d.ts +0 -5
  261. package/dist/transcript-sources.js +79 -8
  262. package/dist/transcript-sources.js.map +1 -1
  263. package/dist/types.d.ts +3 -23
  264. package/dist/ui/app.html +8 -1
  265. package/dist/ui/backend-signin.js +21 -36
  266. package/dist/ui/chat-md-strings.js +9 -0
  267. package/dist/ui/chat-store.js +2 -13
  268. package/dist/ui/chat-strings.js +2 -50
  269. package/dist/ui/chat-thread.js +53 -3
  270. package/dist/ui/fleet-task-card.js +3 -3
  271. package/dist/ui/fleet-task-common.js +10 -0
  272. package/dist/ui/fleet-tasks.js +7 -5
  273. package/dist/ui/fleet-usage.js +90 -27
  274. package/dist/ui/panel-chat.js +37 -66
  275. package/dist/ui/panel-details.js +1 -2
  276. package/dist/ui/panel-fleet.js +88 -107
  277. package/dist/ui/panel-needs.js +21 -163
  278. package/dist/ui/panel-notices.js +4 -3
  279. package/dist/ui/panel-settings.js +149 -239
  280. package/dist/ui/preview-panel.js +84 -6
  281. package/dist/ui/search-dialog.js +3 -2
  282. package/dist/ui/settings-appearance.js +23 -122
  283. package/dist/ui/settings-catalog.js +10 -37
  284. package/dist/ui/settings-codex-copy.js +19 -0
  285. package/dist/ui/settings-confirm.js +1 -3
  286. package/dist/ui/settings-dialogs.js +20 -27
  287. package/dist/ui/settings-guests.js +14 -27
  288. package/dist/ui/settings-model.js +17 -12
  289. package/dist/ui/settings-quota-notice.js +100 -0
  290. package/dist/ui/settings-registry.js +4 -11
  291. package/dist/ui/settings-strings.js +4 -113
  292. package/dist/ui/settings-web-authority.js +13 -15
  293. package/dist/ui/shared/app-i18n.js +2 -2
  294. package/dist/ui/shared/app-needs.js +1 -1
  295. package/dist/ui/shared/app-route.js +2 -6
  296. package/dist/ui/shared/app-shell.js +18 -23
  297. package/dist/ui/shared/app-store.js +2 -3
  298. package/dist/ui/shared/app-stream.js +1 -3
  299. package/dist/ui/shared/app.css +40 -1312
  300. package/dist/ui/shared/app.js +2 -5
  301. package/dist/ui/shared/header-tools.js +4 -6
  302. package/dist/ui/shared/instance-nav.js +7 -34
  303. package/dist/ui/shared/instance-switch.js +3 -4
  304. package/dist/ui/shared/loading.css +37 -0
  305. package/dist/ui/shared/panel-view.js +77 -4
  306. package/dist/ui/shared/signin.js +6 -39
  307. package/dist/ui/shared/tokens.css +0 -1
  308. package/dist/ui/shared/ui-dialog.js +2 -2
  309. package/dist/ui/shared/ui-menu.js +10 -30
  310. package/dist/ui/shared/ui-states.js +14 -3
  311. package/dist/ui/shared/usage-dialog.js +18 -1
  312. package/dist/ui/shared/vendor/vendor.json +2 -19
  313. package/dist/ui/shared/view-history.css +17 -0
  314. package/dist/ui/shared/view-history.js +438 -0
  315. package/dist/ui/shared/view-strings.js +16 -8
  316. package/dist/ui/signin.html +5 -2
  317. package/dist/unattended-install.d.ts +11 -2
  318. package/dist/unattended-install.js +39 -5
  319. package/dist/unattended-install.js.map +1 -1
  320. package/dist/usage/capacity.d.ts +69 -0
  321. package/dist/usage/capacity.js +119 -0
  322. package/dist/usage/capacity.js.map +1 -0
  323. package/dist/usage/i18n-keys.d.ts +1 -1
  324. package/dist/usage/i18n-keys.js +3 -0
  325. package/dist/usage/i18n-keys.js.map +1 -1
  326. package/dist/usage/profile-timeline.d.ts +16 -0
  327. package/dist/usage/profile-timeline.js +58 -0
  328. package/dist/usage/profile-timeline.js.map +1 -0
  329. package/dist/usage/providers.d.ts +5 -0
  330. package/dist/usage/providers.js +5 -0
  331. package/dist/usage/providers.js.map +1 -1
  332. package/dist/usage/quota-history.d.ts +43 -0
  333. package/dist/usage/quota-history.js +168 -0
  334. package/dist/usage/quota-history.js.map +1 -0
  335. package/dist/usage/quota-notices.d.ts +38 -0
  336. package/dist/usage/quota-notices.js +160 -0
  337. package/dist/usage/quota-notices.js.map +1 -0
  338. package/dist/usage/usage-api.d.ts +32 -0
  339. package/dist/usage/usage-api.js +96 -1
  340. package/dist/usage/usage-api.js.map +1 -1
  341. package/dist/usage-report.d.ts +25 -1
  342. package/dist/usage-report.js +55 -4
  343. package/dist/usage-report.js.map +1 -1
  344. package/dist/usage-rollup.d.ts +6 -1
  345. package/dist/usage-rollup.js +16 -4
  346. package/dist/usage-rollup.js.map +1 -1
  347. package/dist/view-api.d.ts +16 -0
  348. package/dist/view-api.js +100 -16
  349. package/dist/view-api.js.map +1 -1
  350. package/dist/view-history.d.ts +84 -0
  351. package/dist/view-history.js +116 -0
  352. package/dist/view-history.js.map +1 -0
  353. package/dist/web-api.d.ts +6 -38
  354. package/dist/web-api.js +20 -255
  355. package/dist/web-api.js.map +1 -1
  356. package/dist/web-chat-history.d.ts +2 -19
  357. package/dist/web-chat-history.js +3 -72
  358. package/dist/web-chat-history.js.map +1 -1
  359. package/dist/web-only-fleet.d.ts +0 -20
  360. package/dist/web-only-fleet.js +0 -21
  361. package/dist/web-only-fleet.js.map +1 -1
  362. package/dist/web-session-authorization.d.ts +13 -2
  363. package/dist/web-session-authorization.js +10 -3
  364. package/dist/web-session-authorization.js.map +1 -1
  365. package/dist/web-session.d.ts +0 -7
  366. package/dist/web-session.js +0 -2
  367. package/dist/web-session.js.map +1 -1
  368. package/dist/web-shell-routes.d.ts +1 -4
  369. package/dist/web-shell-routes.js +2 -7
  370. package/dist/web-shell-routes.js.map +1 -1
  371. package/launcher/private-home.cjs +1 -1
  372. package/package.json +3 -9
  373. package/dist/agent-runtime-api.d.ts +0 -4
  374. package/dist/agent-runtime-api.js +0 -59
  375. package/dist/agent-runtime-api.js.map +0 -1
  376. package/dist/agent-runtime-change.d.ts +0 -74
  377. package/dist/agent-runtime-change.js +0 -102
  378. package/dist/agent-runtime-change.js.map +0 -1
  379. package/dist/backend/grok-model-cache.d.ts +0 -7
  380. package/dist/backend/grok-model-cache.js +0 -65
  381. package/dist/backend/grok-model-cache.js.map +0 -1
  382. package/dist/backend/native-pane.d.ts +0 -9
  383. package/dist/backend/native-pane.js +0 -59
  384. package/dist/backend/native-pane.js.map +0 -1
  385. package/dist/fleet-windows-runtime.d.ts +0 -97
  386. package/dist/fleet-windows-runtime.js +0 -449
  387. package/dist/fleet-windows-runtime.js.map +0 -1
  388. package/dist/general-binding.d.ts +0 -85
  389. package/dist/general-binding.js +0 -298
  390. package/dist/general-binding.js.map +0 -1
  391. package/dist/general-host-owner.d.ts +0 -8
  392. package/dist/general-host-owner.js +0 -26
  393. package/dist/general-host-owner.js.map +0 -1
  394. package/dist/general-role.d.ts +0 -5
  395. package/dist/general-role.js +0 -26
  396. package/dist/general-role.js.map +0 -1
  397. package/dist/local-pane-endpoint.d.ts +0 -46
  398. package/dist/local-pane-endpoint.js +0 -189
  399. package/dist/local-pane-endpoint.js.map +0 -1
  400. package/dist/local-pane-launcher.d.ts +0 -2
  401. package/dist/local-pane-launcher.js +0 -38
  402. package/dist/local-pane-launcher.js.map +0 -1
  403. package/dist/local-pane-stage.ps1 +0 -101
  404. package/dist/model-catalog-defaults.d.ts +0 -14
  405. package/dist/model-catalog-defaults.js +0 -20
  406. package/dist/model-catalog-defaults.js.map +0 -1
  407. package/dist/native-agent-admission.d.ts +0 -7
  408. package/dist/native-agent-admission.js +0 -26
  409. package/dist/native-agent-admission.js.map +0 -1
  410. package/dist/native-daemon-client.d.ts +0 -13
  411. package/dist/native-daemon-client.js +0 -28
  412. package/dist/native-daemon-client.js.map +0 -1
  413. package/dist/native-instance-api.d.ts +0 -14
  414. package/dist/native-instance-api.js +0 -205
  415. package/dist/native-instance-api.js.map +0 -1
  416. package/dist/native-instance-input.d.ts +0 -84
  417. package/dist/native-instance-input.js +0 -54
  418. package/dist/native-instance-input.js.map +0 -1
  419. package/dist/native-instance-registry.d.ts +0 -32
  420. package/dist/native-instance-registry.js +0 -105
  421. package/dist/native-instance-registry.js.map +0 -1
  422. package/dist/native-mcp.d.ts +0 -40
  423. package/dist/native-mcp.js +0 -278
  424. package/dist/native-mcp.js.map +0 -1
  425. package/dist/native-model-catalog.d.ts +0 -5
  426. package/dist/native-model-catalog.js +0 -76
  427. package/dist/native-model-catalog.js.map +0 -1
  428. package/dist/native-pane-crash-budget.d.ts +0 -20
  429. package/dist/native-pane-crash-budget.js +0 -60
  430. package/dist/native-pane-crash-budget.js.map +0 -1
  431. package/dist/native-pane-create.d.ts +0 -26
  432. package/dist/native-pane-create.js +0 -53
  433. package/dist/native-pane-create.js.map +0 -1
  434. package/dist/native-pane-lifecycle.d.ts +0 -65
  435. package/dist/native-pane-lifecycle.js +0 -230
  436. package/dist/native-pane-lifecycle.js.map +0 -1
  437. package/dist/native-pane-manager.d.ts +0 -59
  438. package/dist/native-pane-manager.js +0 -584
  439. package/dist/native-pane-manager.js.map +0 -1
  440. package/dist/native-pane-output-log.d.ts +0 -15
  441. package/dist/native-pane-output-log.js +0 -108
  442. package/dist/native-pane-output-log.js.map +0 -1
  443. package/dist/native-pane-reconciliation.d.ts +0 -4
  444. package/dist/native-pane-reconciliation.js +0 -40
  445. package/dist/native-pane-reconciliation.js.map +0 -1
  446. package/dist/native-pane-recovery.d.ts +0 -12
  447. package/dist/native-pane-recovery.js +0 -10
  448. package/dist/native-pane-recovery.js.map +0 -1
  449. package/dist/native-pane-tools.d.ts +0 -2
  450. package/dist/native-pane-tools.js +0 -14
  451. package/dist/native-pane-tools.js.map +0 -1
  452. package/dist/pane-port.d.ts +0 -118
  453. package/dist/pane-port.js +0 -2
  454. package/dist/pane-port.js.map +0 -1
  455. package/dist/runtime-api.d.ts +0 -8
  456. package/dist/runtime-api.js +0 -171
  457. package/dist/runtime-api.js.map +0 -1
  458. package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +0 -21
  459. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +0 -2
  460. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +0 -19
  461. package/dist/runtime-assets/@xterm/addon-serialize/package.json +0 -29
  462. package/dist/runtime-assets/@xterm/headless/LICENSE +0 -21
  463. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +0 -2
  464. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +0 -46
  465. package/dist/runtime-assets/@xterm/headless/package.json +0 -29
  466. package/dist/runtime-assets/node-pty/CONPTY-LICENSE +0 -21
  467. package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +0 -503
  468. package/dist/runtime-assets/node-pty/LICENSE +0 -69
  469. package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +0 -16
  470. package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +0 -47
  471. package/dist/runtime-assets/node-pty/lib/index.js +0 -52
  472. package/dist/runtime-assets/node-pty/lib/interfaces.js +0 -7
  473. package/dist/runtime-assets/node-pty/lib/shared/conout.js +0 -11
  474. package/dist/runtime-assets/node-pty/lib/terminal.js +0 -190
  475. package/dist/runtime-assets/node-pty/lib/types.js +0 -7
  476. package/dist/runtime-assets/node-pty/lib/unixTerminal.js +0 -346
  477. package/dist/runtime-assets/node-pty/lib/utils.js +0 -39
  478. package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +0 -125
  479. package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +0 -320
  480. package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +0 -199
  481. package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +0 -22
  482. package/dist/runtime-assets/node-pty/package.json +0 -64
  483. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  484. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  485. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  486. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  487. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  488. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  489. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  490. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  491. package/dist/runtime-build-info.d.ts +0 -9
  492. package/dist/runtime-build-info.js +0 -57
  493. package/dist/runtime-build-info.js.map +0 -1
  494. package/dist/runtime-bundle.d.ts +0 -19
  495. package/dist/runtime-bundle.js +0 -156
  496. package/dist/runtime-bundle.js.map +0 -1
  497. package/dist/runtime-cli.d.ts +0 -7
  498. package/dist/runtime-cli.js +0 -152
  499. package/dist/runtime-cli.js.map +0 -1
  500. package/dist/runtime-client-store.d.ts +0 -68
  501. package/dist/runtime-client-store.js +0 -344
  502. package/dist/runtime-client-store.js.map +0 -1
  503. package/dist/runtime-client.d.ts +0 -112
  504. package/dist/runtime-client.js +0 -736
  505. package/dist/runtime-client.js.map +0 -1
  506. package/dist/runtime-connection.d.ts +0 -22
  507. package/dist/runtime-connection.js +0 -93
  508. package/dist/runtime-connection.js.map +0 -1
  509. package/dist/runtime-coordinator.d.ts +0 -91
  510. package/dist/runtime-coordinator.js +0 -911
  511. package/dist/runtime-coordinator.js.map +0 -1
  512. package/dist/runtime-general-protocol.d.ts +0 -22
  513. package/dist/runtime-general-protocol.js +0 -57
  514. package/dist/runtime-general-protocol.js.map +0 -1
  515. package/dist/runtime-general-workspace.d.ts +0 -17
  516. package/dist/runtime-general-workspace.js +0 -213
  517. package/dist/runtime-general-workspace.js.map +0 -1
  518. package/dist/runtime-pane-assets.d.ts +0 -17
  519. package/dist/runtime-pane-assets.js +0 -23
  520. package/dist/runtime-pane-assets.js.map +0 -1
  521. package/dist/runtime-pane-boot.d.ts +0 -9
  522. package/dist/runtime-pane-boot.js +0 -47
  523. package/dist/runtime-pane-boot.js.map +0 -1
  524. package/dist/runtime-pane-codex-index.d.ts +0 -1
  525. package/dist/runtime-pane-codex-index.js +0 -47
  526. package/dist/runtime-pane-codex-index.js.map +0 -1
  527. package/dist/runtime-pane-config.d.ts +0 -16
  528. package/dist/runtime-pane-config.js +0 -54
  529. package/dist/runtime-pane-config.js.map +0 -1
  530. package/dist/runtime-pane-host.d.ts +0 -44
  531. package/dist/runtime-pane-host.js +0 -424
  532. package/dist/runtime-pane-host.js.map +0 -1
  533. package/dist/runtime-pane-job-owner.d.ts +0 -1
  534. package/dist/runtime-pane-job-owner.js +0 -29
  535. package/dist/runtime-pane-job-owner.js.map +0 -1
  536. package/dist/runtime-pane-job.ps1 +0 -116
  537. package/dist/runtime-pane-link.d.ts +0 -40
  538. package/dist/runtime-pane-link.js +0 -246
  539. package/dist/runtime-pane-link.js.map +0 -1
  540. package/dist/runtime-pane-mcp-protocol.d.ts +0 -32
  541. package/dist/runtime-pane-mcp-protocol.js +0 -39
  542. package/dist/runtime-pane-mcp-protocol.js.map +0 -1
  543. package/dist/runtime-pane-mcp-relay.d.ts +0 -17
  544. package/dist/runtime-pane-mcp-relay.js +0 -70
  545. package/dist/runtime-pane-mcp-relay.js.map +0 -1
  546. package/dist/runtime-pane-mcp.d.ts +0 -51
  547. package/dist/runtime-pane-mcp.js +0 -150
  548. package/dist/runtime-pane-mcp.js.map +0 -1
  549. package/dist/runtime-pane-native.d.ts +0 -45
  550. package/dist/runtime-pane-native.js +0 -65
  551. package/dist/runtime-pane-native.js.map +0 -1
  552. package/dist/runtime-pane-output.d.ts +0 -19
  553. package/dist/runtime-pane-output.js +0 -53
  554. package/dist/runtime-pane-output.js.map +0 -1
  555. package/dist/runtime-pane-port.d.ts +0 -139
  556. package/dist/runtime-pane-port.js +0 -558
  557. package/dist/runtime-pane-port.js.map +0 -1
  558. package/dist/runtime-pane-private.d.ts +0 -14
  559. package/dist/runtime-pane-private.js +0 -51
  560. package/dist/runtime-pane-private.js.map +0 -1
  561. package/dist/runtime-pane-private.ps1 +0 -14
  562. package/dist/runtime-pane-process.d.ts +0 -4
  563. package/dist/runtime-pane-process.js +0 -108
  564. package/dist/runtime-pane-process.js.map +0 -1
  565. package/dist/runtime-pane-protocol.d.ts +0 -172
  566. package/dist/runtime-pane-protocol.js +0 -195
  567. package/dist/runtime-pane-protocol.js.map +0 -1
  568. package/dist/runtime-pane-screen.d.ts +0 -19
  569. package/dist/runtime-pane-screen.js +0 -76
  570. package/dist/runtime-pane-screen.js.map +0 -1
  571. package/dist/runtime-pane-service.d.ts +0 -11
  572. package/dist/runtime-pane-service.js +0 -221
  573. package/dist/runtime-pane-service.js.map +0 -1
  574. package/dist/runtime-pane-stdio-protocol.d.ts +0 -54
  575. package/dist/runtime-pane-stdio-protocol.js +0 -94
  576. package/dist/runtime-pane-stdio-protocol.js.map +0 -1
  577. package/dist/runtime-pane-stdio.d.ts +0 -3
  578. package/dist/runtime-pane-stdio.js +0 -123
  579. package/dist/runtime-pane-stdio.js.map +0 -1
  580. package/dist/runtime-pane-store.d.ts +0 -33
  581. package/dist/runtime-pane-store.js +0 -164
  582. package/dist/runtime-pane-store.js.map +0 -1
  583. package/dist/runtime-pane-transcript-protocol.d.ts +0 -43
  584. package/dist/runtime-pane-transcript-protocol.js +0 -58
  585. package/dist/runtime-pane-transcript-protocol.js.map +0 -1
  586. package/dist/runtime-pane-transcript.d.ts +0 -45
  587. package/dist/runtime-pane-transcript.js +0 -605
  588. package/dist/runtime-pane-transcript.js.map +0 -1
  589. package/dist/runtime-pane-worker.d.ts +0 -1
  590. package/dist/runtime-pane-worker.js +0 -154
  591. package/dist/runtime-pane-worker.js.map +0 -1
  592. package/dist/runtime-protocol.d.ts +0 -162
  593. package/dist/runtime-protocol.js +0 -37
  594. package/dist/runtime-protocol.js.map +0 -1
  595. package/dist/runtime-switches.d.ts +0 -79
  596. package/dist/runtime-switches.js +0 -90
  597. package/dist/runtime-switches.js.map +0 -1
  598. package/dist/runtime-transcript-delta-reader.d.ts +0 -23
  599. package/dist/runtime-transcript-delta-reader.js +0 -74
  600. package/dist/runtime-transcript-delta-reader.js.map +0 -1
  601. package/dist/runtime-transcript-source.d.ts +0 -36
  602. package/dist/runtime-transcript-source.js +0 -189
  603. package/dist/runtime-transcript-source.js.map +0 -1
  604. package/dist/runtime-windows-bridge.d.ts +0 -41
  605. package/dist/runtime-windows-bridge.js +0 -157
  606. package/dist/runtime-windows-bridge.js.map +0 -1
  607. package/dist/settings-route-lifetime.d.ts +0 -14
  608. package/dist/settings-route-lifetime.js +0 -48
  609. package/dist/settings-route-lifetime.js.map +0 -1
  610. package/dist/tmux-pane-host.d.ts +0 -26
  611. package/dist/tmux-pane-host.js +0 -25
  612. package/dist/tmux-pane-host.js.map +0 -1
  613. package/dist/transcript-needles.d.ts +0 -35
  614. package/dist/transcript-needles.js +0 -158
  615. package/dist/transcript-needles.js.map +0 -1
  616. package/dist/transcript-records.d.ts +0 -21
  617. package/dist/transcript-records.js +0 -140
  618. package/dist/transcript-records.js.map +0 -1
  619. package/dist/ui/agent-proposals.js +0 -90
  620. package/dist/ui/agent-runtime-settings.js +0 -67
  621. package/dist/ui/agent-runtime.js +0 -124
  622. package/dist/ui/cli-picker.js +0 -42
  623. package/dist/ui/general-location.js +0 -71
  624. package/dist/ui/native-instance-settings.js +0 -44
  625. package/dist/ui/native-pane-recovery.js +0 -45
  626. package/dist/ui/panel-runtimes.js +0 -334
  627. package/dist/ui/panel-windows-agent.js +0 -86
  628. package/dist/ui/panel-windows-cli.js +0 -179
  629. package/dist/ui/provider-marks.js +0 -83
  630. package/dist/ui/runtime-catalog.js +0 -55
  631. package/dist/ui/settings-agent-filters.js +0 -94
  632. package/dist/ui/settings-layout.js +0 -245
  633. package/dist/ui/settings-outside.js +0 -176
  634. package/dist/ui/settings-shortcuts.js +0 -65
  635. package/dist/ui/shared/machine-name.js +0 -13
  636. package/dist/ui/shared/qrcode.module.js +0 -2237
  637. package/dist/ui/shared/settings-width.js +0 -31
  638. package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
  639. package/dist/ui/windows-agents-nav.js +0 -2
  640. package/dist/ui/windows-cli-catalog.js +0 -108
  641. package/dist/web-remote-access.d.ts +0 -152
  642. package/dist/web-remote-access.js +0 -368
  643. package/dist/web-remote-access.js.map +0 -1
  644. package/dist/windows-agents.d.ts +0 -126
  645. package/dist/windows-agents.js +0 -490
  646. package/dist/windows-agents.js.map +0 -1
  647. package/dist/windows-cli-api.d.ts +0 -23
  648. package/dist/windows-cli-api.js +0 -159
  649. package/dist/windows-cli-api.js.map +0 -1
  650. package/dist/windows-cli-providers.d.ts +0 -115
  651. package/dist/windows-cli-providers.js +0 -429
  652. package/dist/windows-cli-providers.js.map +0 -1
  653. package/dist/windows-cli-worker.d.ts +0 -59
  654. package/dist/windows-cli-worker.js +0 -479
  655. package/dist/windows-cli-worker.js.map +0 -1
  656. package/dist/windows-cli.d.ts +0 -116
  657. package/dist/windows-cli.js +0 -407
  658. package/dist/windows-cli.js.map +0 -1
  659. package/dist/windows-native-mcp.d.ts +0 -19
  660. package/dist/windows-native-mcp.js +0 -143
  661. package/dist/windows-native-mcp.js.map +0 -1
  662. package/dist/windows-pane-mcp.d.ts +0 -26
  663. package/dist/windows-pane-mcp.js +0 -187
  664. package/dist/windows-pane-mcp.js.map +0 -1
  665. package/templates/runtime-assets/conpty-LICENSE +0 -21
  666. package/templates/runtime-assets/conpty-NOTICE.md +0 -503
  667. package/templates/runtime-assets/local-pane-stage.ps1 +0 -101
  668. package/templates/runtime-assets/runtime-pane-job.ps1 +0 -116
  669. package/templates/runtime-assets/runtime-pane-private.ps1 +0 -14
  670. package/templates/runtime-assets/xterm-LICENSE +0 -21
@@ -1,584 +0,0 @@
1
- import { t } from "./locale.js";
2
- import { loadGeneralKnowledge } from "./runtime-general-workspace.js";
3
- import { generalWorkspaceUpgrade, validateGeneralWorkspaceReceipt } from "./runtime-general-protocol.js";
4
- import { NativePaneRecoveryError } from "./native-pane-recovery.js";
5
- /** Fleet-owned native launch registry. No process IDs, credentials or provider paths cross this boundary. */
6
- import { lstatSync, readFileSync, mkdirSync } from "node:fs";
7
- import { join } from "node:path";
8
- import { randomUUID } from "node:crypto";
9
- import { atomicWriteFileSync } from "./atomic-write.js";
10
- import { runtimeJobDigest } from "./runtime-client-store.js";
11
- import { RuntimeNativePaneLifecycle } from "./native-pane-lifecycle.js";
12
- import { assertAuditedNativePaneVersion } from "./runtime-pane-native.js";
13
- import { PaneMcpAuthorityLease } from "./runtime-pane-mcp.js";
14
- import { validateRuntimePaneLaunch, validateRuntimePaneSnapshot, validateRuntimePaneSessionProof } from "./runtime-pane-protocol.js";
15
- import { validatePaneMcpBody } from "./runtime-pane-mcp-protocol.js";
16
- const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
17
- export class NativePaneManager {
18
- options;
19
- bindings = new Map();
20
- preparing = new Set();
21
- constructor(options) {
22
- this.options = options;
23
- }
24
- directory(id) {
25
- if (!UUID.test(id))
26
- throw Error("Invalid native agent identity");
27
- const root = join(this.options.home, "native-panes");
28
- mkdirSync(root, { recursive: true, mode: 0o700 });
29
- const stat = lstatSync(root);
30
- if (!stat.isDirectory() || stat.isSymbolicLink() || process.getuid && (stat.uid !== process.getuid() || !!(stat.mode & 0o077)))
31
- throw Error("Unsafe native pane registry");
32
- const directory = join(root, id);
33
- mkdirSync(directory, { recursive: true, mode: 0o700 });
34
- const own = lstatSync(directory);
35
- if (!own.isDirectory() || own.isSymbolicLink() || process.getuid && (own.uid !== process.getuid() || !!(own.mode & 0o077)))
36
- throw Error("Unsafe native pane registry");
37
- return directory;
38
- }
39
- load(file) {
40
- try {
41
- const stat = lstatSync(file);
42
- if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 128 * 1024 || process.getuid && (stat.uid !== process.getuid() || !!(stat.mode & 0o077)))
43
- throw Error("Unsafe native launch manifest");
44
- const value = JSON.parse(readFileSync(file, "utf8"));
45
- if (value?.version !== 1 || !/^([a-f0-9]{64})$/.test(value.configuration) || Object.keys(value).some(key => !["version", "machineId", "configuration", "launch", "exited", "fresh"].includes(key)) || value.machineId !== "local" && !UUID.test(value.machineId))
46
- throw Error("Invalid native launch manifest");
47
- validateRuntimePaneLaunch(value.launch);
48
- if (!value.launch.launchId || !UUID.test(value.launch.launchId))
49
- throw Error("Native launch identity is missing");
50
- if (value.exited) {
51
- const exit = validateRuntimePaneSnapshot(value.exited);
52
- if (exit.state !== "exited" || exit.agentId !== value.launch.agentId || exit.instance !== value.launch.instance || exit.paneId !== value.launch.paneId || exit.launchId !== value.launch.launchId)
53
- throw Error("Native exit manifest scope differs");
54
- }
55
- if (value.fresh) {
56
- const fresh = value.fresh, previous = validateRuntimePaneSnapshot(fresh.previous);
57
- if (Object.keys(fresh).some(key => !["previous", "automatic", "announced", "previousLaunch", "sessionId", "decisionLaunchId"].includes(key)) || typeof fresh.automatic !== "boolean" || fresh.announced !== undefined && fresh.announced !== true
58
- || !["claude-code", "codex"].includes(value.launch.cli) || value.launch.sessionId !== undefined || previous.state !== "exited" || previous.noLaunch || !previous.sessionId && (value.launch.cli !== "codex" || fresh.automatic)
59
- || previous.agentId !== value.launch.agentId || previous.instance !== value.launch.instance || previous.launchId === value.launch.launchId || previous.sessionId === value.launch.launchId)
60
- throw Error("Invalid fresh pane intent");
61
- if (value.launch.cli === "codex") {
62
- const old = validateRuntimePaneLaunch(fresh.previousLaunch);
63
- if (old.cli !== "codex" || old.agentId !== previous.agentId || old.instance !== previous.instance || old.paneId !== previous.paneId || old.launchId !== previous.launchId
64
- || (typeof fresh.decisionLaunchId !== "string" || !UUID.test(fresh.decisionLaunchId) || fresh.decisionLaunchId === value.launch.launchId)
65
- || fresh.sessionId !== undefined && (typeof fresh.sessionId !== "string" || !UUID.test(fresh.sessionId) || fresh.sessionId === previous.sessionId))
66
- throw Error("Invalid fresh Codex binding");
67
- }
68
- else if (fresh.previousLaunch !== undefined || fresh.sessionId !== undefined || fresh.decisionLaunchId !== undefined)
69
- throw Error("Unexpected Claude fresh binding");
70
- }
71
- return value;
72
- }
73
- catch (error) {
74
- if (error.code === "ENOENT")
75
- return null;
76
- throw error;
77
- }
78
- }
79
- save(file, value) { atomicWriteFileSync(file, JSON.stringify(value), { mode: 0o600 }); }
80
- configurationHash(agent, config) {
81
- return runtimeJobDigest({ cli: agent.cli, cwd: agent.cwd, sandbox: config.native_sandbox, model: config.model || "", prompt: config.systemPrompt || "", workflow: config.workflow ?? null,
82
- ...(config.general_topic ? { general: true, binding: config.native_general_binding } : {}) });
83
- }
84
- newManifest(name, config, agent, machineId, resume = true, identity) {
85
- const launch = validateRuntimePaneLaunch({ cli: agent.cli, cwd: agent.cwd, sandbox: config.native_sandbox, instructions: this.options.instructions(name, config),
86
- ...(config.model ? { model: config.model } : {}), agentId: agent.id, instance: name, paneId: identity?.paneId ?? randomUUID(), launchId: identity?.launchId ?? randomUUID(),
87
- columns: 120, rows: 40, ...(resume && agent.threadId ? { sessionId: agent.threadId } : {}), mcpTools: this.options.menu(name).map(tool => tool.name),
88
- ...(config.general_topic ? { generalWorkspace: { bindingId: config.native_general_binding, packHash: loadGeneralKnowledge(agent.cli).hash } } : {}) });
89
- return { version: 1, machineId, configuration: this.configurationHash(agent, config), launch };
90
- }
91
- freshIntent(file, manifest, automatic, config, agent) {
92
- const previous = manifest.exited?.sessionId ? manifest.exited : manifest.launch.cli === "codex" ? manifest.fresh?.previous ?? manifest.exited : undefined;
93
- const previousLaunch = manifest.exited?.sessionId ? manifest.launch : manifest.fresh?.previousLaunch ?? manifest.launch;
94
- if (!previous || !previous.sessionId && (agent.cli !== "codex" || automatic) || !manifest.exited || !["claude-code", "codex"].includes(manifest.launch.cli))
95
- throw Error("A fresh conversation requires its previous positive exit");
96
- // The previous launch can have obsolete cold settings; only its positive exit is carried into this decision.
97
- const next = { ...this.newManifest(manifest.launch.instance, config, agent, manifest.machineId, false), fresh: { previous, automatic, ...(agent.cli === "codex" ? { previousLaunch, decisionLaunchId: manifest.launch.launchId } : {}) } };
98
- this.save(file, next);
99
- return next;
100
- }
101
- bindFreshCodex(file, manifest, observed) {
102
- const fresh = manifest.fresh, launch = manifest.launch;
103
- if (launch.cli !== "codex" || !fresh || !observed.sessionId || observed.sessionId === fresh.previous.sessionId
104
- || observed.launchId !== launch.launchId || observed.paneId !== launch.paneId || observed.agentId !== launch.agentId || observed.instance !== launch.instance
105
- || fresh.sessionId !== undefined && fresh.sessionId !== observed.sessionId)
106
- throw Error("Fresh Codex observed identity differs");
107
- const next = { ...manifest, fresh: { ...fresh, sessionId: observed.sessionId } };
108
- this.save(file, next);
109
- this.options.store.pinFreshCodexSession(launch.agentId, fresh.previous, observed);
110
- return next;
111
- }
112
- recordExit(file, manifest, snapshot) {
113
- if (manifest.launch.cli === "codex" && manifest.fresh?.sessionId && snapshot.sessionId !== undefined && snapshot.sessionId !== manifest.fresh.sessionId)
114
- throw Error("Fresh Codex exit conversation differs");
115
- let next = manifest;
116
- if (manifest.launch.cli === "codex" && manifest.fresh && snapshot.sessionId && snapshot.sessionId !== manifest.fresh.previous.sessionId
117
- && this.options.store.get(snapshot.agentId).threadId !== snapshot.sessionId)
118
- next = this.bindFreshCodex(file, manifest, snapshot);
119
- next = { ...next, exited: snapshot };
120
- this.save(file, next);
121
- const profile = this.options.store.get(snapshot.agentId);
122
- if (!snapshot.noLaunch && !profile.threadId && snapshot.sessionId && profile.activeId)
123
- this.options.store.pinPaneSession(snapshot.agentId, snapshot.launchId, snapshot.sessionId);
124
- if (this.options.store.get(snapshot.agentId).activeId) {
125
- if (!snapshot.noLaunch && next.launch.cli === "codex" && next.fresh?.previous.sessionId && !snapshot.sessionId)
126
- this.options.store.releaseUnpinnedCodexPane(snapshot.agentId, next.fresh.previous, snapshot);
127
- else
128
- this.options.store.releasePane(snapshot.agentId, snapshot);
129
- }
130
- if (!snapshot.noLaunch && (!snapshot.sessionId || !profile.threadId))
131
- this.options.store.setPaneRecovery(snapshot.agentId, { kind: "session-unconfirmed", launchId: snapshot.launchId, sessionId: this.options.store.get(snapshot.agentId).threadId, ...(next.launch.cli === "codex" ? { provider: "codex" } : {}) });
132
- return next;
133
- }
134
- async sessionState(endpoint, previous, supported) {
135
- if (!previous.sessionId)
136
- return "unknown"; // A positive process exit is independent of a provider conversation pin.
137
- if (!supported)
138
- throw new NativePaneRecoveryError({ kind: "host-upgrade", launchId: previous.launchId }); // Use the existing host-upgrade recovery, never a conversation decision.
139
- const raw = await endpoint.call({ action: "session-proof", paneId: previous.paneId, launchId: previous.launchId });
140
- try {
141
- const proof = validateRuntimePaneSessionProof(raw);
142
- if (runtimeJobDigest(proof.snapshot) === runtimeJobDigest(previous))
143
- return proof.state;
144
- }
145
- catch { /* A reachable malformed result cannot prove absence. */ }
146
- return "unknown";
147
- }
148
- /** Prepare metadata and helper authority first; acquire() alone may reserve and spawn. */
149
- async prepare(name, config, assertCurrent) {
150
- const id = config.native_agent_id;
151
- if (!id || !UUID.test(id) || this.preparing.has(id))
152
- throw Error("Native pane preparation already has an owner or lacks an identity");
153
- this.preparing.add(id);
154
- try {
155
- return await this.prepareOwned(name, config, assertCurrent);
156
- }
157
- catch (error) {
158
- if (error instanceof NativePaneRecoveryError) {
159
- assertCurrent();
160
- this.options.store.setPaneRecovery(id, error.recovery);
161
- }
162
- throw error;
163
- }
164
- finally {
165
- this.preparing.delete(id);
166
- }
167
- }
168
- async prepareOwned(name, config, assertCurrent) {
169
- config = structuredClone(config);
170
- assertCurrent();
171
- this.options.admit(name, config);
172
- const id = config.native_agent_id;
173
- if (!id || !UUID.test(id))
174
- throw Error("Native pane profile is missing");
175
- let agent = this.options.store.get(id);
176
- if (agent.fleet_instance !== name || agent.machineId !== config.machine_id || agent.cli !== config.backend || agent.cwd !== config.working_directory)
177
- throw Error("Native pane profile scope differs");
178
- if (config.general_topic && (!agent.machineId || !UUID.test(config.native_general_binding ?? "")))
179
- throw Error("Windows General requires its prepared paired-machine binding");
180
- const directory = this.directory(id), file = join(directory, "active.json");
181
- let manifest = this.load(file);
182
- if (manifest && (manifest.launch.agentId !== id || manifest.launch.instance !== name || manifest.machineId !== (agent.machineId ?? "local")))
183
- throw Error("Native launch manifest scope differs");
184
- if (this.bindings.has(id))
185
- throw Error("Native pane still has a coordinator owner");
186
- const missingSession = () => new NativePaneRecoveryError({ kind: "session-unconfirmed", launchId: manifest.launch.launchId, sessionId: agent.threadId, ...(agent.cli === "codex" ? { provider: "codex" } : {}) });
187
- const endpoint = await this.options.endpoint(agent);
188
- assertCurrent();
189
- this.options.admit(name, config);
190
- if (endpoint.machineId !== (agent.machineId ?? "local"))
191
- throw Error("Native endpoint machine scope differs");
192
- assertAuditedNativePaneVersion(agent.cli, endpoint.version(agent.cli));
193
- const inventory = await endpoint.call({ action: "list" });
194
- assertCurrent();
195
- this.options.admit(name, config);
196
- if (!inventory || typeof inventory !== "object" || !UUID.test(inventory.hostBootId) || !Array.isArray(inventory.panes) || inventory.panes.length > 4096)
197
- throw Error("Native host identity is unconfirmed");
198
- const latest = this.options.store.get(id);
199
- if (runtimeJobDigest({ id: latest.id, cli: latest.cli, cwd: latest.cwd, machineId: latest.machineId, activeId: latest.activeId, paneLaunchId: latest.paneLaunchId, threadId: latest.threadId, paused: latest.paused }) !== runtimeJobDigest({ id: agent.id, cli: agent.cli, cwd: agent.cwd, machineId: agent.machineId, activeId: agent.activeId, paneLaunchId: agent.paneLaunchId, threadId: agent.threadId, paused: agent.paused }))
200
- throw Error("Native profile changed during host observation");
201
- const hostBootId = inventory.hostBootId, panes = inventory.panes.map(validateRuntimePaneSnapshot);
202
- if (inventory.capabilities?.openDisposition !== true)
203
- throw new NativePaneRecoveryError({ kind: "host-upgrade", ...(manifest ? { launchId: manifest.launch.launchId } : {}) });
204
- if (config.general_topic && inventory.capabilities?.generalWorkspace !== true)
205
- throw new NativePaneRecoveryError({ kind: "host-upgrade", ...(manifest ? { launchId: manifest.launch.launchId } : {}) });
206
- const sameAgent = panes.filter(row => row.agentId === id && row.state !== "exited");
207
- if (sameAgent.length > 1 || sameAgent.some(row => !manifest || row.paneId !== manifest.launch.paneId || row.launchId !== manifest.launch.launchId || row.instance !== name))
208
- throw Error("Another live or unknown native pane must be reconciled first");
209
- let preparedFresh = false;
210
- if (manifest && !manifest.exited && !agent.activeId && !panes.some(row => row.paneId === manifest.launch.paneId)) {
211
- // Factory metadata alone is not an open: reserve() and the pane receipt precede every RPC which may spawn.
212
- try {
213
- lstatSync(join(directory, `${manifest.launch.launchId}.pane.json`));
214
- }
215
- catch (error) {
216
- if (error.code !== "ENOENT")
217
- throw error;
218
- if (manifest.fresh)
219
- preparedFresh = true;
220
- else
221
- manifest = null;
222
- }
223
- }
224
- if (manifest && !manifest.exited && !preparedFresh) {
225
- const matches = panes.filter(row => row.paneId === manifest.launch.paneId);
226
- if (matches.length > 1)
227
- throw Error("Native host returned duplicate retained panes");
228
- const ended = matches[0], old = manifest.launch;
229
- if (ended?.state === "exited") {
230
- const session = agent.threadId ?? old.sessionId ?? ended.sessionId ?? (old.cli === "claude-code" ? old.launchId : undefined);
231
- if (manifest.fresh && agent.cli === "codex" && ended.sessionId && ended.sessionId !== manifest.fresh.previous.sessionId) {
232
- manifest = this.bindFreshCodex(file, manifest, ended);
233
- agent = this.options.store.get(id);
234
- }
235
- const pendingCodex = agent.cli === "codex" && manifest.fresh && !manifest.fresh.sessionId && agent.threadId === manifest.fresh.previous.sessionId && !ended.sessionId;
236
- if (ended.agentId !== id || ended.instance !== name || ended.launchId !== old.launchId || session !== undefined && ended.sessionId !== session && !pendingCodex && agent.threadId !== ended.sessionId)
237
- throw Error("Native retained exit scope differs");
238
- // The host reconciles exact helper exits before listing. Persist its positive evidence before releasing the slot.
239
- manifest = { ...manifest, exited: ended };
240
- this.save(file, manifest);
241
- }
242
- else if (!ended || ended.state === "unknown" || ended.hostBootId !== hostBootId) {
243
- throw new NativePaneRecoveryError({ kind: "exit-unconfirmed", launchId: old.launchId, ...(ended ? { hostBootId: ended.hostBootId } : {}) });
244
- }
245
- }
246
- if (manifest?.exited) {
247
- if (!manifest.exited.noLaunch && !manifest.exited.sessionId) {
248
- // The process is positively gone even if it exited before reporting its first provider UUID.
249
- manifest = this.recordExit(file, manifest, manifest.exited);
250
- agent = this.options.store.get(id);
251
- throw missingSession();
252
- }
253
- if (!manifest.exited.noLaunch && manifest.exited.sessionId && !agent.threadId && agent.activeId) {
254
- this.options.store.pinPaneSession(id, manifest.exited.launchId, manifest.exited.sessionId);
255
- agent = this.options.store.get(id);
256
- }
257
- if (!manifest.exited.noLaunch && !agent.threadId)
258
- throw new NativePaneRecoveryError({ kind: "exit-unconfirmed", launchId: manifest.launch.launchId, hostBootId: manifest.exited.hostBootId });
259
- if (agent.activeId) {
260
- this.options.store.releasePane(id, manifest.exited);
261
- agent = this.options.store.get(id);
262
- }
263
- if (!manifest.exited.noLaunch) {
264
- const epoch = endpoint.epoch(), before = runtimeJobDigest(agent);
265
- // RPC failures stay retryable; only a reachable result can hold the session. Older hosts use the upgrade hold.
266
- const state = await this.sessionState(endpoint, manifest.exited, inventory.capabilities?.[agent.cli === "codex" ? "codexSessionProof" : "claudeSessionProof"] === true);
267
- assertCurrent();
268
- this.options.admit(name, config);
269
- if (!endpoint.online() || endpoint.epoch() !== epoch || runtimeJobDigest(this.options.store.get(id)) !== before)
270
- throw Error("Native profile or transport changed during session proof");
271
- if (state === "absent" && !manifest.fresh) {
272
- manifest = this.freshIntent(file, manifest, true, config, agent);
273
- preparedFresh = true;
274
- }
275
- else if (state !== "saved")
276
- throw missingSession();
277
- else
278
- manifest = null;
279
- }
280
- else if (manifest.fresh)
281
- throw missingSession();
282
- else
283
- manifest = null;
284
- }
285
- if (preparedFresh && manifest?.fresh) {
286
- // No open receipt/reservation exists: refresh the unlaunched intent's settings, retaining its chosen UUIDs.
287
- const current = this.newManifest(name, config, agent, manifest.machineId, false, manifest.launch);
288
- const refreshed = { ...manifest, configuration: current.configuration, launch: current.launch };
289
- if (runtimeJobDigest(refreshed) !== runtimeJobDigest(manifest))
290
- this.save(file, refreshed);
291
- manifest = refreshed;
292
- if (agent.cli === "claude-code")
293
- this.options.store.replacePaneSession(id, manifest.fresh.previous, manifest.launch.launchId);
294
- agent = this.options.store.get(id);
295
- }
296
- // Hot identity metadata and bundled instruction-template edits do not retire a live pane on coordinator update.
297
- const configurationHash = this.configurationHash(agent, config);
298
- if (config.general_topic && (!manifest || preparedFresh)) {
299
- const request = { action: "general-workspace", bindingId: config.native_general_binding, instance: name, cli: agent.cli, packHash: loadGeneralKnowledge(agent.cli).hash };
300
- const epoch = endpoint.epoch(), before = runtimeJobDigest(agent), raw = await endpoint.call(request);
301
- assertCurrent();
302
- this.options.admit(name, config);
303
- if (!endpoint.online() || endpoint.epoch() !== epoch || runtimeJobDigest(this.options.store.get(id)) !== before)
304
- throw Error("General profile or transport changed during workspace preparation");
305
- if (generalWorkspaceUpgrade(raw, request))
306
- throw new NativePaneRecoveryError({ kind: "host-upgrade" });
307
- if (validateGeneralWorkspaceReceipt(raw, request).cwd.toLowerCase() !== agent.cwd.toLowerCase())
308
- throw Error("General workspace does not match its retained profile");
309
- }
310
- if (manifest) {
311
- const old = manifest.launch;
312
- if (manifest.configuration !== configurationHash)
313
- throw Error("Retained native launch settings differ; close its owned pane before applying changes");
314
- if (agent.activeId && agent.paneLaunchId !== old.launchId)
315
- throw Error("Native profile has a different active owner");
316
- }
317
- else {
318
- if (agent.activeId)
319
- throw Error("Native profile outcome is unknown; no replacement was started");
320
- manifest = this.newManifest(name, config, agent, endpoint.machineId);
321
- this.save(file, manifest);
322
- }
323
- let retained = manifest;
324
- const launch = retained.launch;
325
- let daemon, binding, closed = false;
326
- const current = () => {
327
- if (closed || !endpoint.online() || this.bindings.get(id) !== binding)
328
- return false;
329
- const observed = binding.native.snapshot();
330
- if (observed?.state === "unknown" || observed?.state === "exited")
331
- return false;
332
- try {
333
- if (!daemon || !this.options.published(name, daemon))
334
- assertCurrent();
335
- this.options.admit(name, config);
336
- const now = this.options.config(name), profile = this.options.store.get(id);
337
- return !!now && now.native_adapter === "pane" && now.native_agent_id === id && now.machine_id === agent.machineId && now.backend === launch.cli && now.working_directory === launch.cwd && (now.model || undefined) === launch.model && now.native_sandbox === launch.sandbox
338
- && profile.paneLaunchId === launch.launchId && profile.activeId === launch.launchId && !profile.paused;
339
- }
340
- catch {
341
- return false;
342
- }
343
- };
344
- const owned = () => !!daemon && current() && this.options.published(name, daemon);
345
- const lease = new PaneMcpAuthorityLease(join(directory, `${launch.launchId}.mcp.json`), {
346
- machineId: endpoint.machineId, owner: { hostBootId, paneId: launch.paneId, launchId: launch.launchId, agentId: id, instance: name }, current, transportEpoch: () => endpoint.epoch(),
347
- menu: () => this.options.menu(name), allowed: (tool, args) => current() && this.options.allowed(name, tool, args),
348
- invoke: (input, proof) => { if (!owned() || !proof())
349
- throw Error("Native daemon is not published"); return this.options.invoke(daemon, input, () => owned() && proof(), name); },
350
- responseWritten: operationId => daemon?.paneToolResponseWritten(operationId, owned),
351
- toolFailed: details => daemon?.logNativeToolFailure(details),
352
- });
353
- const native = new RuntimeNativePaneLifecycle({ endpoint, launch, receiptFile: join(directory, `${launch.launchId}.pane.json`), ...(launch.cli === "codex" && retained.fresh ? { freshPrevious: retained.fresh.previous } : {}),
354
- admit: () => { assertCurrent(); this.options.admit(name, config); }, reserve: launchId => { this.options.store.reservePane(id, launchId); }, pin: (launchId, sessionId) => {
355
- if (launch.cli === "codex" && retained.fresh) {
356
- const observed = native.port.ownedSnapshot();
357
- if (!observed || observed.launchId !== launchId || observed.sessionId !== sessionId)
358
- throw Error("Fresh Codex observation differs");
359
- retained = this.bindFreshCodex(file, retained, observed);
360
- }
361
- else
362
- this.options.store.pinPaneSession(id, launchId, sessionId);
363
- },
364
- exited: snapshot => { retained = this.recordExit(file, retained, snapshot); }, mcpProof: () => lease.serving() ? "alive" : "unknown",
365
- bindDaemon: value => binding.bind(value), acquired: async () => {
366
- this.options.store.setPaneRecovery(id, undefined);
367
- if (retained.fresh && !retained.fresh.announced) {
368
- retained = { ...retained, fresh: { ...retained.fresh, announced: true } };
369
- this.save(file, retained);
370
- if (retained.fresh.automatic)
371
- await this.options.freshNotice?.(name, launch.cli);
372
- }
373
- },
374
- releaseAuthority: () => { closed = true; lease.close(); if (this.bindings.get(id) === binding)
375
- this.bindings.delete(id); }, });
376
- const snapshot = native.port.ownedSnapshot();
377
- if (agent.threadId && snapshot?.sessionId !== agent.threadId && launch.sessionId !== agent.threadId
378
- && !(retained.fresh && (launch.cli === "codex" ? retained.fresh.previous.sessionId === agent.threadId : launch.launchId === agent.threadId)))
379
- throw Error("Native profile conversation pin differs from its launch receipt");
380
- binding = { native, lease, bind: value => { if (daemon && daemon !== value)
381
- throw Error("Native daemon binding changed"); daemon = value; } };
382
- this.bindings.set(id, binding);
383
- return native;
384
- }
385
- /** Administrator chooses a new conversation for this exact stopped, held pin. No provider files are changed. */
386
- async startFresh(name, config, launchId, sessionId, assertCurrent) {
387
- config = structuredClone(config);
388
- const id = config.native_agent_id;
389
- if (!id || this.preparing.has(id) || this.bindings.has(id))
390
- throw Error("Native pane preparation still has an owner");
391
- this.preparing.add(id);
392
- try {
393
- assertCurrent();
394
- this.options.admit(name, config);
395
- const agent = this.options.store.get(id), file = join(this.directory(id), "active.json"), manifest = this.load(file);
396
- // A replay consumes its already-committed UUID only after the original decision's proof is rechecked.
397
- const replay = !!(manifest?.fresh && !manifest.exited && !manifest.fresh.announced && (manifest.fresh.decisionLaunchId ?? manifest.fresh.previous.launchId) === launchId && (manifest.fresh.previous.sessionId ?? null) === sessionId);
398
- const previous = replay ? manifest.fresh.previous : manifest?.exited?.sessionId ? manifest.exited : manifest?.fresh?.previous ?? manifest?.exited;
399
- const targetLaunchId = replay ? (manifest.fresh.decisionLaunchId ?? previous?.launchId) : manifest?.exited?.launchId;
400
- if (!manifest || !previous || !["claude-code", "codex"].includes(manifest.launch.cli) || targetLaunchId !== launchId || (previous.sessionId ?? null) !== sessionId || (agent.threadId ?? null) !== sessionId
401
- || agent.activeId || agent.paneLaunchId || agent.fleet_instance !== name || agent.cwd !== config.working_directory || agent.cli !== config.backend || agent.machineId !== config.machine_id
402
- || manifest.machineId !== (agent.machineId ?? "local") || manifest.launch.instance !== name || manifest.launch.agentId !== id
403
- || agent.paneRecovery?.kind !== "session-unconfirmed" || agent.paneRecovery.launchId !== launchId || (agent.paneRecovery.sessionId ?? null) !== sessionId)
404
- throw Error(t("native_pane.changed"));
405
- const unopened = () => {
406
- if (!replay)
407
- return;
408
- try {
409
- lstatSync(join(this.directory(id), `${manifest.launch.launchId}.pane.json`));
410
- throw Error("Fresh pane launch outcome is unconfirmed");
411
- }
412
- catch (error) {
413
- if (error.code !== "ENOENT")
414
- throw error;
415
- }
416
- };
417
- unopened();
418
- const endpoint = await this.options.endpoint(agent);
419
- assertCurrent();
420
- this.options.admit(name, config);
421
- if (endpoint.machineId !== manifest.machineId)
422
- throw Error("Native fresh-session machine differs");
423
- assertAuditedNativePaneVersion(agent.cli, endpoint.version(agent.cli));
424
- const epoch = endpoint.epoch();
425
- const raw = await endpoint.call({ action: "list" });
426
- assertCurrent();
427
- this.options.admit(name, config);
428
- if (!endpoint.online() || endpoint.epoch() !== epoch)
429
- throw Error("Native fresh-session transport changed");
430
- if (!raw || typeof raw !== "object" || !Array.isArray(raw.panes) || raw.panes.map(validateRuntimePaneSnapshot).some((row) => row.agentId === id && row.state !== "exited"))
431
- throw Error("A native process exit is still unconfirmed");
432
- const state = await this.sessionState(endpoint, previous, raw.capabilities?.[agent.cli === "codex" ? "codexSessionProof" : "claudeSessionProof"] === true);
433
- assertCurrent();
434
- this.options.admit(name, config);
435
- unopened();
436
- if (!endpoint.online() || endpoint.epoch() !== epoch)
437
- throw Error("Native fresh-session transport changed");
438
- if (runtimeJobDigest(this.options.store.get(id)) !== runtimeJobDigest(agent))
439
- throw Error(t("native_pane.changed"));
440
- if (state === "saved") {
441
- if (replay || previous !== manifest.exited) {
442
- // The unused intent never opened. Return to its exact positive exit; the original per-launch receipt is untouched.
443
- const prior = this.newManifest(name, config, agent, manifest.machineId, true, previous);
444
- if (agent.cli === "codex" && manifest.fresh?.previousLaunch)
445
- prior.launch = manifest.fresh.previousLaunch;
446
- this.save(file, { ...prior, exited: previous });
447
- }
448
- this.options.store.setPaneRecovery(id, undefined);
449
- throw Error(t("native_pane.saved_available"));
450
- }
451
- const next = replay ? { ...manifest, ...this.newManifest(name, config, agent, manifest.machineId, false, manifest.launch), fresh: manifest.fresh }
452
- : this.freshIntent(file, manifest, false, config, agent);
453
- if (replay)
454
- this.save(file, next);
455
- if (agent.cli === "claude-code")
456
- this.options.store.replacePaneSession(id, previous, next.launch.launchId);
457
- }
458
- catch (error) {
459
- if (error instanceof NativePaneRecoveryError) {
460
- assertCurrent();
461
- this.options.store.setPaneRecovery(id, error.recovery);
462
- }
463
- throw error;
464
- }
465
- finally {
466
- this.preparing.delete(id);
467
- }
468
- }
469
- /** Explicit admin attestation, bound to the held launch; no keys, tool calls or process signals. */
470
- async recover(name, config, launchId, confirmedStopped, assertCurrent) {
471
- const id = config.native_agent_id;
472
- if (!id || !UUID.test(id) || this.preparing.has(id))
473
- throw Error("Native pane preparation is in flight");
474
- this.preparing.add(id);
475
- try {
476
- assertCurrent();
477
- this.options.admit(name, config);
478
- const agent = this.options.store.get(id), file = join(this.directory(id), "active.json"), manifest = this.load(file);
479
- if (agent.paneRecovery?.kind === "session-unconfirmed")
480
- throw Error(t("native_pane.refresh_for_session"));
481
- if (confirmedStopped !== true || !manifest || manifest.launch.launchId !== launchId || agent.activeId !== launchId || agent.paneLaunchId !== launchId
482
- || manifest.launch.agentId !== id || manifest.launch.instance !== name || manifest.machineId !== (agent.machineId ?? "local") || agent.fleet_instance !== name)
483
- throw Error(t("native_pane.changed"));
484
- const pin = agent.threadId ?? manifest.launch.sessionId ?? (manifest.launch.cli === "claude-code" ? manifest.launch.launchId : undefined);
485
- if (!pin)
486
- throw Error(t("native_pane.no_pin"));
487
- const bound = this.bindings.get(id)?.native.port.ownedSnapshot();
488
- if (bound && bound.launchId !== launchId)
489
- throw Error("Native recovery has another coordinator owner");
490
- const endpoint = await this.options.endpoint(agent);
491
- assertCurrent();
492
- this.options.admit(name, config);
493
- if (endpoint.machineId !== manifest.machineId)
494
- throw Error("Native recovery machine differs");
495
- const raw = await endpoint.call({ action: "list" });
496
- assertCurrent();
497
- this.options.admit(name, config);
498
- if (!raw || typeof raw !== "object" || !Array.isArray(raw.panes) || raw.capabilities?.recovery !== true)
499
- throw new NativePaneRecoveryError({ kind: "host-upgrade", launchId });
500
- const rows = raw.panes.map(validateRuntimePaneSnapshot), pane = rows.find(row => row.paneId === manifest.launch.paneId);
501
- // A host can die after recording Codex's UUID but before its profile commit. Bind it only AFTER the exact recovered exit.
502
- const pendingFresh = manifest.launch.cli === "codex" && manifest.fresh && agent.threadId === manifest.fresh.previous.sessionId
503
- && (pane?.sessionId ? pane.sessionId !== pin && (!manifest.fresh.sessionId || manifest.fresh.sessionId === pane.sessionId) : !manifest.fresh.sessionId);
504
- if (rows.filter(row => row.paneId === manifest.launch.paneId).length !== 1 || !pane || pane.launchId !== launchId || pane.agentId !== id || pane.instance !== name
505
- || pane.sessionId !== pin && !pendingFresh || rows.some(row => row.agentId === id && row.paneId !== pane.paneId && row.state !== "exited"))
506
- throw Error(t("native_pane.scope"));
507
- const ended = validateRuntimePaneSnapshot(await endpoint.call({ action: "recover", paneId: pane.paneId, launchId, hostBootId: pane.hostBootId, confirmedStopped: true }));
508
- assertCurrent();
509
- this.options.admit(name, config);
510
- if (ended.state !== "exited" || ended.paneId !== pane.paneId || ended.launchId !== launchId || ended.agentId !== id || ended.instance !== name || ended.hostBootId !== pane.hostBootId
511
- || pane.sessionId !== ended.sessionId)
512
- throw Error("Native recovery exit scope differs");
513
- const binding = this.bindings.get(id);
514
- if (binding)
515
- await binding.native.port.recordConfirmedExit(ended, assertCurrent);
516
- assertCurrent();
517
- this.options.admit(name, config);
518
- this.save(file, { ...manifest, exited: ended });
519
- if (!agent.threadId)
520
- this.options.store.pinPaneSession(id, launchId, pin);
521
- if (!this.bindings.has(id))
522
- this.recordExit(file, manifest, ended);
523
- this.options.store.setPaneRecovery(id, manifest.launch.cli === "codex" && manifest.fresh && !ended.sessionId ? { kind: "session-unconfirmed", provider: "codex", launchId, sessionId: pin } : undefined);
524
- }
525
- finally {
526
- this.preparing.delete(id);
527
- }
528
- }
529
- /** Close only the retained exact launch. Offline, missing, or unknown exit remains reserved. */
530
- async closeRetained(name, config, assertCurrent) {
531
- assertCurrent();
532
- const id = config.native_agent_id;
533
- if (!id || !UUID.test(id))
534
- throw Error("Native close profile is missing");
535
- const agent = this.options.store.get(id), directory = this.directory(id), file = join(directory, "active.json"), manifest = this.load(file);
536
- if (agent.fleet_instance !== name || agent.machineId !== config.machine_id)
537
- throw Error("Native close profile scope differs");
538
- const bound = this.bindings.get(id);
539
- if (bound) {
540
- await bound.native.release("close");
541
- return;
542
- }
543
- if (!manifest) {
544
- if (agent.activeId)
545
- throw Error("Native close intent is unconfirmed");
546
- return;
547
- }
548
- if (manifest.machineId !== (agent.machineId ?? "local") || manifest.launch.instance !== name || manifest.launch.agentId !== id)
549
- throw Error("Native close manifest scope differs");
550
- if (manifest.exited) {
551
- if (agent.activeId)
552
- this.recordExit(file, manifest, manifest.exited);
553
- return;
554
- }
555
- const receiptFile = join(directory, `${manifest.launch.launchId}.pane.json`);
556
- // No open intent or reservation was ever committed: this prepared factory cannot have started a process.
557
- try {
558
- lstatSync(receiptFile);
559
- }
560
- catch (error) {
561
- if (error.code !== "ENOENT")
562
- throw error;
563
- if (!agent.activeId)
564
- return;
565
- throw Error("Native open intent is missing; its process outcome is unknown");
566
- }
567
- const endpoint = await this.options.endpoint(agent, true);
568
- assertCurrent();
569
- if (endpoint.machineId !== manifest.machineId)
570
- throw Error("Native close endpoint differs");
571
- const native = new RuntimeNativePaneLifecycle({ endpoint, launch: manifest.launch, receiptFile,
572
- admit: assertCurrent, reserve: () => { throw Error("Close never reserves a new launch"); }, pin: () => { }, mcpProof: () => "unknown", releaseAuthority: () => { },
573
- exited: snapshot => { this.recordExit(file, manifest, snapshot); },
574
- });
575
- await native.release("close");
576
- }
577
- async handle(machineId, raw, transport) {
578
- const body = validatePaneMcpBody(raw), binding = this.bindings.get(body.owner.agentId);
579
- if (!binding)
580
- throw Error("Native pane tool owner is unavailable");
581
- return binding.lease.handle(machineId, body, transport);
582
- }
583
- }
584
- //# sourceMappingURL=native-pane-manager.js.map