@songsid/agend 2.3.5-alpha.3 → 2.3.5-alpha.5

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 (865) hide show
  1. package/THIRD_PARTY_NOTICES.md +52 -0
  2. package/dist/accounts-view.d.ts +97 -0
  3. package/dist/accounts-view.js +116 -0
  4. package/dist/accounts-view.js.map +1 -0
  5. package/dist/agent-cli-instructions.md +1 -1
  6. package/dist/agent-credentials.d.ts +24 -0
  7. package/dist/agent-credentials.js +66 -0
  8. package/dist/agent-credentials.js.map +1 -0
  9. package/dist/agent-endpoint.d.ts +3 -1
  10. package/dist/agent-endpoint.js +13 -0
  11. package/dist/agent-endpoint.js.map +1 -1
  12. package/dist/agent-file-read.js +1 -1
  13. package/dist/agent-file-read.js.map +1 -1
  14. package/dist/agent-runtime-api.d.ts +4 -0
  15. package/dist/agent-runtime-api.js +59 -0
  16. package/dist/agent-runtime-api.js.map +1 -0
  17. package/dist/agent-runtime-change.d.ts +76 -0
  18. package/dist/agent-runtime-change.js +114 -0
  19. package/dist/agent-runtime-change.js.map +1 -0
  20. package/dist/agent-workspace.d.ts +93 -0
  21. package/dist/agent-workspace.js +353 -0
  22. package/dist/agent-workspace.js.map +1 -0
  23. package/dist/auth-api.d.ts +27 -0
  24. package/dist/auth-api.js +168 -3
  25. package/dist/auth-api.js.map +1 -1
  26. package/dist/authority/session-authorizations.d.ts +28 -4
  27. package/dist/authority/session-authorizations.js +63 -17
  28. package/dist/authority/session-authorizations.js.map +1 -1
  29. package/dist/backend/antigravity.js +3 -1
  30. package/dist/backend/antigravity.js.map +1 -1
  31. package/dist/backend/codex-footer-hints.d.ts +7 -0
  32. package/dist/backend/codex-footer-hints.js +41 -0
  33. package/dist/backend/codex-footer-hints.js.map +1 -0
  34. package/dist/backend/codex-metadata.d.ts +14 -0
  35. package/dist/backend/codex-metadata.js +45 -0
  36. package/dist/backend/codex-metadata.js.map +1 -1
  37. package/dist/backend/codex-quota-history.d.ts +7 -0
  38. package/dist/backend/codex-quota-history.js +57 -0
  39. package/dist/backend/codex-quota-history.js.map +1 -0
  40. package/dist/backend/codex-session-lookup.d.ts +6 -0
  41. package/dist/backend/codex-session-lookup.js +1 -1
  42. package/dist/backend/codex-session-lookup.js.map +1 -1
  43. package/dist/backend/codex-speed.d.ts +14 -0
  44. package/dist/backend/codex-speed.js +35 -0
  45. package/dist/backend/codex-speed.js.map +1 -0
  46. package/dist/backend/codex.d.ts +7 -0
  47. package/dist/backend/codex.js +85 -24
  48. package/dist/backend/codex.js.map +1 -1
  49. package/dist/backend/grok-weekly-reset.d.ts +24 -0
  50. package/dist/backend/grok-weekly-reset.js +95 -0
  51. package/dist/backend/grok-weekly-reset.js.map +1 -0
  52. package/dist/backend/grok.d.ts +30 -1
  53. package/dist/backend/grok.js +301 -54
  54. package/dist/backend/grok.js.map +1 -1
  55. package/dist/backend/kiro.d.ts +3 -0
  56. package/dist/backend/kiro.js +50 -2
  57. package/dist/backend/kiro.js.map +1 -1
  58. package/dist/backend/muse.js +5 -3
  59. package/dist/backend/muse.js.map +1 -1
  60. package/dist/backend/native-pane.d.ts +3 -1
  61. package/dist/backend/native-pane.js +2 -2
  62. package/dist/backend/native-pane.js.map +1 -1
  63. package/dist/backend/types.d.ts +13 -1
  64. package/dist/backend/types.js +3 -0
  65. package/dist/backend/types.js.map +1 -1
  66. package/dist/build-provenance-cli.d.ts +3 -0
  67. package/dist/build-provenance-cli.js +11 -0
  68. package/dist/build-provenance-cli.js.map +1 -0
  69. package/dist/build-provenance.d.ts +20 -0
  70. package/dist/build-provenance.js +67 -0
  71. package/dist/build-provenance.js.map +1 -0
  72. package/dist/build-provenance.json +1 -0
  73. package/dist/cache-ledger.d.ts +95 -0
  74. package/dist/cache-ledger.js +276 -4
  75. package/dist/cache-ledger.js.map +1 -1
  76. package/dist/cache-service.d.ts +5 -0
  77. package/dist/cache-service.js +16 -4
  78. package/dist/cache-service.js.map +1 -1
  79. package/dist/channel/adapters/discord.js +11 -3
  80. package/dist/channel/adapters/discord.js.map +1 -1
  81. package/dist/channel/adapters/telegram.d.ts +51 -0
  82. package/dist/channel/adapters/telegram.js +235 -17
  83. package/dist/channel/adapters/telegram.js.map +1 -1
  84. package/dist/channel/mcp-tools.js +3 -3
  85. package/dist/channel/mcp-tools.js.map +1 -1
  86. package/dist/channel/types.d.ts +2 -0
  87. package/dist/claude-auth-status.d.ts +48 -0
  88. package/dist/claude-auth-status.js +149 -0
  89. package/dist/claude-auth-status.js.map +1 -0
  90. package/dist/cli.js +138 -37
  91. package/dist/cli.js.map +1 -1
  92. package/dist/config-validator.js +21 -1
  93. package/dist/config-validator.js.map +1 -1
  94. package/dist/cross-instance-notice.d.ts +10 -0
  95. package/dist/cross-instance-notice.js +67 -5
  96. package/dist/cross-instance-notice.js.map +1 -1
  97. package/dist/daemon.d.ts +70 -1
  98. package/dist/daemon.js +547 -25
  99. package/dist/daemon.js.map +1 -1
  100. package/dist/dashboard-permissions.d.ts +8 -0
  101. package/dist/dashboard-permissions.js +16 -0
  102. package/dist/dashboard-permissions.js.map +1 -1
  103. package/dist/delivery-consumed-watch.d.ts +23 -1
  104. package/dist/delivery-consumed-watch.js +30 -3
  105. package/dist/delivery-consumed-watch.js.map +1 -1
  106. package/dist/delivery-reconciliation.d.ts +1 -1
  107. package/dist/delivery-reconciliation.js +1 -1
  108. package/dist/delivery-reconciliation.js.map +1 -1
  109. package/dist/doctor.js +20 -9
  110. package/dist/doctor.js.map +1 -1
  111. package/dist/export-import.d.ts +7 -0
  112. package/dist/export-import.js +44 -10
  113. package/dist/export-import.js.map +1 -1
  114. package/dist/fleet-context.d.ts +2 -0
  115. package/dist/fleet-manager.d.ts +362 -7
  116. package/dist/fleet-manager.js +1522 -91
  117. package/dist/fleet-manager.js.map +1 -1
  118. package/dist/fleet-windows-runtime.d.ts +8 -2
  119. package/dist/fleet-windows-runtime.js +93 -6
  120. package/dist/fleet-windows-runtime.js.map +1 -1
  121. package/dist/general-knowledge/skills/concepts/SKILL.md +425 -0
  122. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
  123. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  124. package/dist/general-knowledge/skills/fleet-health/SKILL.md +2 -2
  125. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
  126. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
  127. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
  128. package/dist/general-knowledge/skills/tui-effort/SKILL.md +10 -10
  129. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +31 -15
  130. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  131. package/dist/general-role.d.ts +1 -1
  132. package/dist/general-role.js +1 -0
  133. package/dist/general-role.js.map +1 -1
  134. package/dist/hub/admission.d.ts +28 -0
  135. package/dist/hub/admission.js +62 -0
  136. package/dist/hub/admission.js.map +1 -0
  137. package/dist/hub/attachments/limits.d.ts +20 -0
  138. package/dist/hub/attachments/limits.js +48 -0
  139. package/dist/hub/attachments/limits.js.map +1 -0
  140. package/dist/hub/attachments/store.d.ts +116 -0
  141. package/dist/hub/attachments/store.js +246 -0
  142. package/dist/hub/attachments/store.js.map +1 -0
  143. package/dist/hub/audit/index.d.ts +62 -0
  144. package/dist/hub/audit/index.js +344 -0
  145. package/dist/hub/audit/index.js.map +1 -0
  146. package/dist/hub/browser-certificate.d.ts +38 -0
  147. package/dist/hub/browser-certificate.js +247 -0
  148. package/dist/hub/browser-certificate.js.map +1 -0
  149. package/dist/hub/buttons-model.d.ts +9 -0
  150. package/dist/hub/buttons-model.js +42 -0
  151. package/dist/hub/buttons-model.js.map +1 -0
  152. package/dist/hub/buttons.d.ts +54 -0
  153. package/dist/hub/buttons.js +346 -0
  154. package/dist/hub/buttons.js.map +1 -0
  155. package/dist/hub/catalog.d.ts +74 -0
  156. package/dist/hub/catalog.js +195 -0
  157. package/dist/hub/catalog.js.map +1 -0
  158. package/dist/hub/client.d.ts +69 -0
  159. package/dist/hub/client.js +300 -0
  160. package/dist/hub/client.js.map +1 -0
  161. package/dist/hub/compose/member.d.ts +139 -0
  162. package/dist/hub/compose/member.js +450 -0
  163. package/dist/hub/compose/member.js.map +1 -0
  164. package/dist/hub/compose/server.d.ts +77 -0
  165. package/dist/hub/compose/server.js +349 -0
  166. package/dist/hub/compose/server.js.map +1 -0
  167. package/dist/hub/compose/views.d.ts +12 -0
  168. package/dist/hub/compose/views.js +4 -0
  169. package/dist/hub/compose/views.js.map +1 -0
  170. package/dist/hub/db.d.ts +56 -0
  171. package/dist/hub/db.js +188 -0
  172. package/dist/hub/db.js.map +1 -0
  173. package/dist/hub/directory/config.d.ts +39 -0
  174. package/dist/hub/directory/config.js +108 -0
  175. package/dist/hub/directory/config.js.map +1 -0
  176. package/dist/hub/directory/directory.d.ts +18 -0
  177. package/dist/hub/directory/directory.js +320 -0
  178. package/dist/hub/directory/directory.js.map +1 -0
  179. package/dist/hub/directory/index.d.ts +7 -0
  180. package/dist/hub/directory/index.js +4 -0
  181. package/dist/hub/directory/index.js.map +1 -0
  182. package/dist/hub/directory/profiles.d.ts +41 -0
  183. package/dist/hub/directory/profiles.js +90 -0
  184. package/dist/hub/directory/profiles.js.map +1 -0
  185. package/dist/hub/directory/types.d.ts +71 -0
  186. package/dist/hub/directory/types.js +14 -0
  187. package/dist/hub/directory/types.js.map +1 -0
  188. package/dist/hub/execution/cli-provider.d.ts +23 -0
  189. package/dist/hub/execution/cli-provider.js +341 -0
  190. package/dist/hub/execution/cli-provider.js.map +1 -0
  191. package/dist/hub/execution/index.d.ts +13 -0
  192. package/dist/hub/execution/index.js +8 -0
  193. package/dist/hub/execution/index.js.map +1 -0
  194. package/dist/hub/execution/model-broker.d.ts +24 -0
  195. package/dist/hub/execution/model-broker.js +208 -0
  196. package/dist/hub/execution/model-broker.js.map +1 -0
  197. package/dist/hub/execution/provider-setup.d.ts +11 -0
  198. package/dist/hub/execution/provider-setup.js +21 -0
  199. package/dist/hub/execution/provider-setup.js.map +1 -0
  200. package/dist/hub/execution/sandbox-runner.d.ts +1 -0
  201. package/dist/hub/execution/sandbox-runner.js +221 -0
  202. package/dist/hub/execution/sandbox-runner.js.map +1 -0
  203. package/dist/hub/execution/service.d.ts +136 -0
  204. package/dist/hub/execution/service.js +459 -0
  205. package/dist/hub/execution/service.js.map +1 -0
  206. package/dist/hub/execution/store.d.ts +61 -0
  207. package/dist/hub/execution/store.js +182 -0
  208. package/dist/hub/execution/store.js.map +1 -0
  209. package/dist/hub/execution/views.d.ts +20 -0
  210. package/dist/hub/execution/views.js +48 -0
  211. package/dist/hub/execution/views.js.map +1 -0
  212. package/dist/hub/http/compose.d.ts +20 -0
  213. package/dist/hub/http/compose.js +518 -0
  214. package/dist/hub/http/compose.js.map +1 -0
  215. package/dist/hub/http/core.d.ts +49 -0
  216. package/dist/hub/http/core.js +124 -0
  217. package/dist/hub/http/core.js.map +1 -0
  218. package/dist/hub/http/deps.d.ts +61 -0
  219. package/dist/hub/http/deps.js +2 -0
  220. package/dist/hub/http/deps.js.map +1 -0
  221. package/dist/hub/http/schema.d.ts +14 -0
  222. package/dist/hub/http/schema.js +80 -0
  223. package/dist/hub/http/schema.js.map +1 -0
  224. package/dist/hub/identity.d.ts +32 -0
  225. package/dist/hub/identity.js +80 -0
  226. package/dist/hub/identity.js.map +1 -0
  227. package/dist/hub/init/browser-certificate.d.ts +9 -0
  228. package/dist/hub/init/browser-certificate.js +78 -0
  229. package/dist/hub/init/browser-certificate.js.map +1 -0
  230. package/dist/hub/init/browser-tls.d.ts +18 -0
  231. package/dist/hub/init/browser-tls.js +62 -0
  232. package/dist/hub/init/browser-tls.js.map +1 -0
  233. package/dist/hub/init/cli.d.ts +3 -0
  234. package/dist/hub/init/cli.js +83 -0
  235. package/dist/hub/init/cli.js.map +1 -0
  236. package/dist/hub/init/directory-certificate.d.ts +24 -0
  237. package/dist/hub/init/directory-certificate.js +222 -0
  238. package/dist/hub/init/directory-certificate.js.map +1 -0
  239. package/dist/hub/init/existing-fleet.d.ts +6 -0
  240. package/dist/hub/init/existing-fleet.js +58 -0
  241. package/dist/hub/init/existing-fleet.js.map +1 -0
  242. package/dist/hub/init/handoff.d.ts +8 -0
  243. package/dist/hub/init/handoff.js +36 -0
  244. package/dist/hub/init/handoff.js.map +1 -0
  245. package/dist/hub/init/identity.d.ts +5 -0
  246. package/dist/hub/init/identity.js +24 -0
  247. package/dist/hub/init/identity.js.map +1 -0
  248. package/dist/hub/init/initializer.d.ts +24 -0
  249. package/dist/hub/init/initializer.js +385 -0
  250. package/dist/hub/init/initializer.js.map +1 -0
  251. package/dist/hub/init/inventory.d.ts +17 -0
  252. package/dist/hub/init/inventory.js +33 -0
  253. package/dist/hub/init/inventory.js.map +1 -0
  254. package/dist/hub/init/layout.d.ts +32 -0
  255. package/dist/hub/init/layout.js +53 -0
  256. package/dist/hub/init/layout.js.map +1 -0
  257. package/dist/hub/init/network.d.ts +18 -0
  258. package/dist/hub/init/network.js +104 -0
  259. package/dist/hub/init/network.js.map +1 -0
  260. package/dist/hub/init/plan-digest.d.ts +5 -0
  261. package/dist/hub/init/plan-digest.js +47 -0
  262. package/dist/hub/init/plan-digest.js.map +1 -0
  263. package/dist/hub/init/prompt.d.ts +26 -0
  264. package/dist/hub/init/prompt.js +110 -0
  265. package/dist/hub/init/prompt.js.map +1 -0
  266. package/dist/hub/init/secret-file.d.ts +1 -0
  267. package/dist/hub/init/secret-file.js +59 -0
  268. package/dist/hub/init/secret-file.js.map +1 -0
  269. package/dist/hub/init/text.d.ts +127 -0
  270. package/dist/hub/init/text.js +247 -0
  271. package/dist/hub/init/text.js.map +1 -0
  272. package/dist/hub/init/types.d.ts +114 -0
  273. package/dist/hub/init/types.js +9 -0
  274. package/dist/hub/init/types.js.map +1 -0
  275. package/dist/hub/init/wizard.d.ts +34 -0
  276. package/dist/hub/init/wizard.js +554 -0
  277. package/dist/hub/init/wizard.js.map +1 -0
  278. package/dist/hub/initialization.d.ts +23 -0
  279. package/dist/hub/initialization.js +28 -0
  280. package/dist/hub/initialization.js.map +1 -0
  281. package/dist/hub/member/agent-mode.d.ts +6 -0
  282. package/dist/hub/member/agent-mode.js +23 -0
  283. package/dist/hub/member/agent-mode.js.map +1 -0
  284. package/dist/hub/member/attachments.d.ts +29 -0
  285. package/dist/hub/member/attachments.js +107 -0
  286. package/dist/hub/member/attachments.js.map +1 -0
  287. package/dist/hub/member/exposure-api.d.ts +87 -0
  288. package/dist/hub/member/exposure-api.js +64 -0
  289. package/dist/hub/member/exposure-api.js.map +1 -0
  290. package/dist/hub/member/exposures.d.ts +123 -0
  291. package/dist/hub/member/exposures.js +282 -0
  292. package/dist/hub/member/exposures.js.map +1 -0
  293. package/dist/hub/member/pairing-api.d.ts +85 -0
  294. package/dist/hub/member/pairing-api.js +385 -0
  295. package/dist/hub/member/pairing-api.js.map +1 -0
  296. package/dist/hub/member/quota.d.ts +20 -0
  297. package/dist/hub/member/quota.js +98 -0
  298. package/dist/hub/member/quota.js.map +1 -0
  299. package/dist/hub/member-journal.d.ts +104 -0
  300. package/dist/hub/member-journal.js +336 -0
  301. package/dist/hub/member-journal.js.map +1 -0
  302. package/dist/hub/member-reconciliation.d.ts +14 -0
  303. package/dist/hub/member-reconciliation.js +97 -0
  304. package/dist/hub/member-reconciliation.js.map +1 -0
  305. package/dist/hub/mount.d.ts +39 -0
  306. package/dist/hub/mount.js +123 -0
  307. package/dist/hub/mount.js.map +1 -0
  308. package/dist/hub/pairing-client.d.ts +17 -0
  309. package/dist/hub/pairing-client.js +108 -0
  310. package/dist/hub/pairing-client.js.map +1 -0
  311. package/dist/hub/pairing.d.ts +65 -0
  312. package/dist/hub/pairing.js +211 -0
  313. package/dist/hub/pairing.js.map +1 -0
  314. package/dist/hub/policy.d.ts +63 -0
  315. package/dist/hub/policy.js +147 -0
  316. package/dist/hub/policy.js.map +1 -0
  317. package/dist/hub/preview.d.ts +32 -0
  318. package/dist/hub/preview.js +64 -0
  319. package/dist/hub/preview.js.map +1 -0
  320. package/dist/hub/private-files.d.ts +5 -0
  321. package/dist/hub/private-files.js +44 -0
  322. package/dist/hub/private-files.js.map +1 -0
  323. package/dist/hub/profile.d.ts +59 -0
  324. package/dist/hub/profile.js +73 -0
  325. package/dist/hub/profile.js.map +1 -0
  326. package/dist/hub/protocol.d.ts +779 -0
  327. package/dist/hub/protocol.js +93 -0
  328. package/dist/hub/protocol.js.map +1 -0
  329. package/dist/hub/quota.d.ts +24 -0
  330. package/dist/hub/quota.js +112 -0
  331. package/dist/hub/quota.js.map +1 -0
  332. package/dist/hub/representative.d.ts +141 -0
  333. package/dist/hub/representative.js +528 -0
  334. package/dist/hub/representative.js.map +1 -0
  335. package/dist/hub/retention.d.ts +17 -0
  336. package/dist/hub/retention.js +45 -0
  337. package/dist/hub/retention.js.map +1 -0
  338. package/dist/hub/rooms.d.ts +120 -0
  339. package/dist/hub/rooms.js +535 -0
  340. package/dist/hub/rooms.js.map +1 -0
  341. package/dist/hub/runtime.d.ts +106 -0
  342. package/dist/hub/runtime.js +298 -0
  343. package/dist/hub/runtime.js.map +1 -0
  344. package/dist/hub/server.d.ts +56 -0
  345. package/dist/hub/server.js +202 -0
  346. package/dist/hub/server.js.map +1 -0
  347. package/dist/hub/service-start.d.ts +17 -0
  348. package/dist/hub/service-start.js +109 -0
  349. package/dist/hub/service-start.js.map +1 -0
  350. package/dist/hub/sessions.d.ts +53 -0
  351. package/dist/hub/sessions.js +196 -0
  352. package/dist/hub/sessions.js.map +1 -0
  353. package/dist/hub/socket.d.ts +24 -0
  354. package/dist/hub/socket.js +79 -0
  355. package/dist/hub/socket.js.map +1 -0
  356. package/dist/hub/store.d.ts +77 -0
  357. package/dist/hub/store.js +88 -0
  358. package/dist/hub/store.js.map +1 -0
  359. package/dist/hub/tls.d.ts +31 -0
  360. package/dist/hub/tls.js +135 -0
  361. package/dist/hub/tls.js.map +1 -0
  362. package/dist/hub/types.d.ts +401 -0
  363. package/dist/hub/types.js +2 -0
  364. package/dist/hub/types.js.map +1 -0
  365. package/dist/hub/validation.d.ts +33 -0
  366. package/dist/hub/validation.js +136 -0
  367. package/dist/hub/validation.js.map +1 -0
  368. package/dist/hub/version-floor.d.ts +10 -0
  369. package/dist/hub/version-floor.js +45 -0
  370. package/dist/hub/version-floor.js.map +1 -0
  371. package/dist/hub-browser-certificate-policy.d.ts +31 -0
  372. package/dist/hub-browser-certificate-policy.js +25 -0
  373. package/dist/hub-browser-certificate-policy.js.map +1 -0
  374. package/dist/hub-membership-settings.d.ts +6 -0
  375. package/dist/hub-membership-settings.js +21 -0
  376. package/dist/hub-membership-settings.js.map +1 -0
  377. package/dist/hub-mode.d.ts +15 -0
  378. package/dist/hub-mode.js +17 -0
  379. package/dist/hub-mode.js.map +1 -0
  380. package/dist/hub-pairing-summary.d.ts +48 -0
  381. package/dist/hub-pairing-summary.js +36 -0
  382. package/dist/hub-pairing-summary.js.map +1 -0
  383. package/dist/hub-report-target.d.ts +32 -0
  384. package/dist/hub-report-target.js +33 -0
  385. package/dist/hub-report-target.js.map +1 -0
  386. package/dist/hub-retention-policy.d.ts +14 -0
  387. package/dist/hub-retention-policy.js +15 -0
  388. package/dist/hub-retention-policy.js.map +1 -0
  389. package/dist/instance-config-impact.js +3 -0
  390. package/dist/instance-config-impact.js.map +1 -1
  391. package/dist/instance-lifecycle.d.ts +17 -2
  392. package/dist/instance-lifecycle.js +58 -8
  393. package/dist/instance-lifecycle.js.map +1 -1
  394. package/dist/instance-topic-delete.d.ts +77 -0
  395. package/dist/instance-topic-delete.js +123 -0
  396. package/dist/instance-topic-delete.js.map +1 -0
  397. package/dist/instructions.d.ts +1 -1
  398. package/dist/instructions.js +1 -1
  399. package/dist/instructions.js.map +1 -1
  400. package/dist/kiro-engine-status.d.ts +11 -0
  401. package/dist/kiro-engine-status.js +6 -0
  402. package/dist/kiro-engine-status.js.map +1 -1
  403. package/dist/launchd-service-domain.d.ts +5 -0
  404. package/dist/launchd-service-domain.js +21 -0
  405. package/dist/launchd-service-domain.js.map +1 -0
  406. package/dist/locale.js +125 -3
  407. package/dist/locale.js.map +1 -1
  408. package/dist/log-service.d.ts +28 -0
  409. package/dist/log-service.js +29 -0
  410. package/dist/log-service.js.map +1 -1
  411. package/dist/log-steps.d.ts +4 -3
  412. package/dist/log-steps.js +32 -7
  413. package/dist/log-steps.js.map +1 -1
  414. package/dist/logger.d.ts +16 -2
  415. package/dist/logger.js +346 -66
  416. package/dist/logger.js.map +1 -1
  417. package/dist/login-flows.d.ts +15 -7
  418. package/dist/login-flows.js +29 -3
  419. package/dist/login-flows.js.map +1 -1
  420. package/dist/login-manager.js +25 -4
  421. package/dist/login-manager.js.map +1 -1
  422. package/dist/ls-rows.js +3 -4
  423. package/dist/ls-rows.js.map +1 -1
  424. package/dist/missed-offline.d.ts +25 -0
  425. package/dist/missed-offline.js +79 -0
  426. package/dist/missed-offline.js.map +1 -0
  427. package/dist/native-instance-api.d.ts +0 -1
  428. package/dist/native-instance-api.js +15 -3
  429. package/dist/native-instance-api.js.map +1 -1
  430. package/dist/native-instance-input.d.ts +3 -0
  431. package/dist/native-instance-input.js +6 -1
  432. package/dist/native-instance-input.js.map +1 -1
  433. package/dist/native-instance-registry.d.ts +6 -0
  434. package/dist/native-instance-registry.js +24 -0
  435. package/dist/native-instance-registry.js.map +1 -1
  436. package/dist/native-mcp.d.ts +3 -0
  437. package/dist/native-mcp.js +15 -2
  438. package/dist/native-mcp.js.map +1 -1
  439. package/dist/native-pane-lifecycle.d.ts +8 -0
  440. package/dist/native-pane-lifecycle.js +13 -4
  441. package/dist/native-pane-lifecycle.js.map +1 -1
  442. package/dist/native-pane-manager.js +17 -9
  443. package/dist/native-pane-manager.js.map +1 -1
  444. package/dist/needs-you-hub.d.ts +9 -1
  445. package/dist/needs-you-hub.js +46 -8
  446. package/dist/needs-you-hub.js.map +1 -1
  447. package/dist/needs-you.d.ts +47 -2
  448. package/dist/needs-you.js +31 -3
  449. package/dist/needs-you.js.map +1 -1
  450. package/dist/office-share-page.js +3 -3
  451. package/dist/office-share-page.js.map +1 -1
  452. package/dist/office-share.d.ts +11 -0
  453. package/dist/office-share.js +14 -0
  454. package/dist/office-share.js.map +1 -1
  455. package/dist/office-talk.d.ts +26 -0
  456. package/dist/office-talk.js +50 -0
  457. package/dist/office-talk.js.map +1 -0
  458. package/dist/outbound-handlers.d.ts +14 -0
  459. package/dist/outbound-handlers.js +49 -6
  460. package/dist/outbound-handlers.js.map +1 -1
  461. package/dist/outbound-schemas.d.ts +33 -1
  462. package/dist/outbound-schemas.js +29 -16
  463. package/dist/outbound-schemas.js.map +1 -1
  464. package/dist/pane-quota-history.d.ts +9 -0
  465. package/dist/pane-quota-history.js +67 -0
  466. package/dist/pane-quota-history.js.map +1 -0
  467. package/dist/pause-marker.d.ts +1 -1
  468. package/dist/pause-marker.js +1 -1
  469. package/dist/pause-marker.js.map +1 -1
  470. package/dist/platform-general.d.ts +46 -0
  471. package/dist/platform-general.js +91 -0
  472. package/dist/platform-general.js.map +1 -0
  473. package/dist/public-web-gateway.js +7 -0
  474. package/dist/public-web-gateway.js.map +1 -1
  475. package/dist/public-web-link.d.ts +6 -0
  476. package/dist/public-web-link.js +9 -0
  477. package/dist/public-web-link.js.map +1 -1
  478. package/dist/queued-handoffs.d.ts +33 -0
  479. package/dist/queued-handoffs.js +75 -0
  480. package/dist/queued-handoffs.js.map +1 -0
  481. package/dist/quickstart.d.ts +13 -0
  482. package/dist/quickstart.js +81 -5
  483. package/dist/quickstart.js.map +1 -1
  484. package/dist/quota-notice.d.ts +7 -0
  485. package/dist/quota-notice.js +40 -0
  486. package/dist/quota-notice.js.map +1 -1
  487. package/dist/reply-buttons-controller.js +10 -6
  488. package/dist/reply-buttons-controller.js.map +1 -1
  489. package/dist/reply-polls.d.ts +2 -2
  490. package/dist/reply-polls.js +3 -3
  491. package/dist/reply-polls.js.map +1 -1
  492. package/dist/runtime-api.d.ts +2 -0
  493. package/dist/runtime-api.js +106 -13
  494. package/dist/runtime-api.js.map +1 -1
  495. package/dist/runtime-build-info.d.ts +9 -0
  496. package/dist/runtime-build-info.js +59 -0
  497. package/dist/runtime-build-info.js.map +1 -0
  498. package/dist/runtime-bundle.d.ts +6 -1
  499. package/dist/runtime-bundle.js +17 -9
  500. package/dist/runtime-bundle.js.map +1 -1
  501. package/dist/runtime-cli.d.ts +13 -1
  502. package/dist/runtime-cli.js +173 -19
  503. package/dist/runtime-cli.js.map +1 -1
  504. package/dist/runtime-client-store.d.ts +27 -1
  505. package/dist/runtime-client-store.js +86 -6
  506. package/dist/runtime-client-store.js.map +1 -1
  507. package/dist/runtime-client.d.ts +74 -0
  508. package/dist/runtime-client.js +336 -26
  509. package/dist/runtime-client.js.map +1 -1
  510. package/dist/runtime-connection.d.ts +22 -0
  511. package/dist/runtime-connection.js +93 -0
  512. package/dist/runtime-connection.js.map +1 -0
  513. package/dist/runtime-coordinator.d.ts +16 -0
  514. package/dist/runtime-coordinator.js +287 -62
  515. package/dist/runtime-coordinator.js.map +1 -1
  516. package/dist/runtime-credential-profiles.d.ts +78 -0
  517. package/dist/runtime-credential-profiles.js +280 -0
  518. package/dist/runtime-credential-profiles.js.map +1 -0
  519. package/dist/runtime-install.d.ts +50 -0
  520. package/dist/runtime-install.js +186 -0
  521. package/dist/runtime-install.js.map +1 -0
  522. package/dist/runtime-pane-assets.d.ts +1 -1
  523. package/dist/runtime-pane-assets.js +1 -1
  524. package/dist/runtime-pane-assets.js.map +1 -1
  525. package/dist/runtime-pane-boot.d.ts +7 -0
  526. package/dist/runtime-pane-boot.js +23 -0
  527. package/dist/runtime-pane-boot.js.map +1 -1
  528. package/dist/runtime-pane-codex-index.d.ts +10 -1
  529. package/dist/runtime-pane-codex-index.js +131 -27
  530. package/dist/runtime-pane-codex-index.js.map +1 -1
  531. package/dist/runtime-pane-host.d.ts +19 -0
  532. package/dist/runtime-pane-host.js +50 -7
  533. package/dist/runtime-pane-host.js.map +1 -1
  534. package/dist/runtime-pane-link.d.ts +7 -0
  535. package/dist/runtime-pane-link.js +93 -2
  536. package/dist/runtime-pane-link.js.map +1 -1
  537. package/dist/runtime-pane-mcp-relay.d.ts +1 -0
  538. package/dist/runtime-pane-mcp-relay.js +10 -0
  539. package/dist/runtime-pane-mcp-relay.js.map +1 -1
  540. package/dist/runtime-pane-mcp.d.ts +4 -0
  541. package/dist/runtime-pane-mcp.js +6 -3
  542. package/dist/runtime-pane-mcp.js.map +1 -1
  543. package/dist/runtime-pane-native.d.ts +32 -2
  544. package/dist/runtime-pane-native.js +55 -6
  545. package/dist/runtime-pane-native.js.map +1 -1
  546. package/dist/runtime-pane-port.d.ts +5 -0
  547. package/dist/runtime-pane-port.js +17 -1
  548. package/dist/runtime-pane-port.js.map +1 -1
  549. package/dist/runtime-pane-process.d.ts +1 -1
  550. package/dist/runtime-pane-process.js +11 -2
  551. package/dist/runtime-pane-process.js.map +1 -1
  552. package/dist/runtime-pane-protocol.d.ts +11 -1
  553. package/dist/runtime-pane-protocol.js +27 -5
  554. package/dist/runtime-pane-protocol.js.map +1 -1
  555. package/dist/runtime-pane-quota-history.d.ts +6 -0
  556. package/dist/runtime-pane-quota-history.js +44 -0
  557. package/dist/runtime-pane-quota-history.js.map +1 -0
  558. package/dist/runtime-pane-service.d.ts +5 -0
  559. package/dist/runtime-pane-service.js +47 -12
  560. package/dist/runtime-pane-service.js.map +1 -1
  561. package/dist/runtime-pane-transcript.d.ts +5 -0
  562. package/dist/runtime-pane-transcript.js +66 -5
  563. package/dist/runtime-pane-transcript.js.map +1 -1
  564. package/dist/runtime-pane-worker.js +19 -6
  565. package/dist/runtime-pane-worker.js.map +1 -1
  566. package/dist/runtime-protocol.d.ts +30 -2
  567. package/dist/runtime-protocol.js +30 -0
  568. package/dist/runtime-protocol.js.map +1 -1
  569. package/dist/runtime-update-activity.d.ts +21 -0
  570. package/dist/runtime-update-activity.js +51 -0
  571. package/dist/runtime-update-activity.js.map +1 -0
  572. package/dist/runtime-update-artifact.d.ts +31 -0
  573. package/dist/runtime-update-artifact.js +252 -0
  574. package/dist/runtime-update-artifact.js.map +1 -0
  575. package/dist/runtime-update-install.d.ts +31 -0
  576. package/dist/runtime-update-install.js +205 -0
  577. package/dist/runtime-update-install.js.map +1 -0
  578. package/dist/runtime-update-journal.d.ts +44 -0
  579. package/dist/runtime-update-journal.js +121 -0
  580. package/dist/runtime-update-journal.js.map +1 -0
  581. package/dist/runtime-update-lock.d.ts +48 -0
  582. package/dist/runtime-update-lock.js +217 -0
  583. package/dist/runtime-update-lock.js.map +1 -0
  584. package/dist/runtime-update-owners.d.ts +29 -0
  585. package/dist/runtime-update-owners.js +240 -0
  586. package/dist/runtime-update-owners.js.map +1 -0
  587. package/dist/runtime-update-protocol.d.ts +15 -0
  588. package/dist/runtime-update-protocol.js +13 -0
  589. package/dist/runtime-update-protocol.js.map +1 -0
  590. package/dist/runtime-windows-bridge.d.ts +2 -1
  591. package/dist/runtime-windows-bridge.js +11 -1
  592. package/dist/runtime-windows-bridge.js.map +1 -1
  593. package/dist/scheduler/db.d.ts +2 -1
  594. package/dist/scheduler/db.js +23 -9
  595. package/dist/scheduler/db.js.map +1 -1
  596. package/dist/scheduler/task-board-text.js +1 -1
  597. package/dist/scheduler/task-board-text.js.map +1 -1
  598. package/dist/scheduler/task-board.d.ts +13 -0
  599. package/dist/scheduler/task-board.js +28 -3
  600. package/dist/scheduler/task-board.js.map +1 -1
  601. package/dist/service-drain.d.ts +19 -0
  602. package/dist/service-drain.js +64 -0
  603. package/dist/service-drain.js.map +1 -0
  604. package/dist/service-installer.d.ts +7 -2
  605. package/dist/service-installer.js +13 -10
  606. package/dist/service-installer.js.map +1 -1
  607. package/dist/settings-api.d.ts +20 -0
  608. package/dist/settings-api.js +414 -4
  609. package/dist/settings-api.js.map +1 -1
  610. package/dist/settings-baseline.d.ts +6 -0
  611. package/dist/settings-baseline.js +3 -1
  612. package/dist/settings-baseline.js.map +1 -1
  613. package/dist/settings-change.js +29 -6
  614. package/dist/settings-change.js.map +1 -1
  615. package/dist/settings-effect.d.ts +13 -0
  616. package/dist/settings-effect.js +98 -1
  617. package/dist/settings-effect.js.map +1 -1
  618. package/dist/settings-http-confirmation.d.ts +3 -0
  619. package/dist/settings-http-confirmation.js +28 -1
  620. package/dist/settings-http-confirmation.js.map +1 -1
  621. package/dist/settings-instance-patch.js +27 -0
  622. package/dist/settings-instance-patch.js.map +1 -1
  623. package/dist/setup-wizard.js +6 -2
  624. package/dist/setup-wizard.js.map +1 -1
  625. package/dist/task-board-tool.d.ts +13 -1
  626. package/dist/task-board-tool.js +104 -4
  627. package/dist/task-board-tool.js.map +1 -1
  628. package/dist/task-board-waker.d.ts +6 -0
  629. package/dist/task-board-waker.js +4 -0
  630. package/dist/task-board-waker.js.map +1 -1
  631. package/dist/tmux-binary.d.ts +59 -0
  632. package/dist/tmux-binary.js +200 -0
  633. package/dist/tmux-binary.js.map +1 -0
  634. package/dist/tmux-control.js +4 -4
  635. package/dist/tmux-control.js.map +1 -1
  636. package/dist/tmux-exec-helper.js +32 -1
  637. package/dist/tmux-exec-helper.js.map +1 -1
  638. package/dist/tmux-manager.d.ts +1 -1
  639. package/dist/tmux-manager.js +45 -36
  640. package/dist/tmux-manager.js.map +1 -1
  641. package/dist/tmux-read.js +4 -3
  642. package/dist/tmux-read.js.map +1 -1
  643. package/dist/tool-permissions.d.ts +5 -2
  644. package/dist/tool-permissions.js +6 -5
  645. package/dist/tool-permissions.js.map +1 -1
  646. package/dist/tool-progress.d.ts +2 -0
  647. package/dist/tool-progress.js +19 -3
  648. package/dist/tool-progress.js.map +1 -1
  649. package/dist/topic-commands.js +10 -5
  650. package/dist/topic-commands.js.map +1 -1
  651. package/dist/transcript-monitor.d.ts +20 -0
  652. package/dist/transcript-monitor.js +47 -3
  653. package/dist/transcript-monitor.js.map +1 -1
  654. package/dist/transcript-needles.d.ts +7 -0
  655. package/dist/transcript-needles.js +9 -1
  656. package/dist/transcript-needles.js.map +1 -1
  657. package/dist/transcript-records.d.ts +1 -1
  658. package/dist/transcript-records.js +2 -1
  659. package/dist/transcript-records.js.map +1 -1
  660. package/dist/types.d.ts +6 -0
  661. package/dist/ui/account-identity.js +27 -0
  662. package/dist/ui/accounts-view.js +214 -0
  663. package/dist/ui/agent-runtime-settings.js +68 -0
  664. package/dist/ui/agent-runtime.js +20 -2
  665. package/dist/ui/backend-signin.js +39 -21
  666. package/dist/ui/chat-ambient.js +1 -1
  667. package/dist/ui/chat-md-strings.js +3 -0
  668. package/dist/ui/chat-render.js +3 -670
  669. package/dist/ui/chat-store.js +1 -1
  670. package/dist/ui/chat-strings.js +3 -333
  671. package/dist/ui/chat-thread.js +3 -919
  672. package/dist/ui/chat-time.js +3 -80
  673. package/dist/ui/chat-tour.js +1 -1
  674. package/dist/ui/credential-profile-select.js +54 -0
  675. package/dist/ui/fleet-office-dialogue.d.ts +30 -0
  676. package/dist/ui/fleet-office-dialogue.js +382 -0
  677. package/dist/ui/fleet-office-pack.d.ts +9 -0
  678. package/dist/ui/fleet-office-pack.js +76 -4
  679. package/dist/ui/fleet-office-skin.js +23 -5
  680. package/dist/ui/fleet-office-store.js +5 -0
  681. package/dist/ui/fleet-office.js +173 -6
  682. package/dist/ui/fleet-task-card.js +10 -6
  683. package/dist/ui/fleet-task-common.js +12 -2
  684. package/dist/ui/fleet-task-menu.js +188 -0
  685. package/dist/ui/fleet-task-stats.js +124 -0
  686. package/dist/ui/fleet-task-view.js +340 -0
  687. package/dist/ui/fleet-tasks.js +131 -43
  688. package/dist/ui/fleet-usage.js +90 -27
  689. package/dist/ui/html-attachment.js +3 -40
  690. package/dist/ui/hub-agent-copy.js +23 -0
  691. package/dist/ui/hub-button-actions.js +65 -0
  692. package/dist/ui/hub-chat-store.js +158 -0
  693. package/dist/ui/hub-chat-strings.js +77 -0
  694. package/dist/ui/hub-client.js +329 -0
  695. package/dist/ui/hub-owner-strings.js +51 -0
  696. package/dist/ui/hub-provider-guidance.js +31 -0
  697. package/dist/ui/hub-quota.js +85 -0
  698. package/dist/ui/hub-strings.js +162 -0
  699. package/dist/ui/hub-switcher.js +27 -0
  700. package/dist/ui/native-instance-settings.js +5 -8
  701. package/dist/ui/native-pane-recovery.js +1 -1
  702. package/dist/ui/office-share-page.js +4 -2
  703. package/dist/ui/panel-chat.js +36 -49
  704. package/dist/ui/panel-details.js +1 -1
  705. package/dist/ui/panel-fleet.js +82 -12
  706. package/dist/ui/panel-hub.js +619 -0
  707. package/dist/ui/panel-log.js +2 -2
  708. package/dist/ui/panel-needs.js +24 -8
  709. package/dist/ui/panel-runtimes.js +239 -45
  710. package/dist/ui/panel-settings.js +266 -192
  711. package/dist/ui/panel-windows-cli.js +88 -42
  712. package/dist/ui/preview-pages.js +1 -1
  713. package/dist/ui/preview-panel.js +92 -6
  714. package/dist/ui/preview-versions.js +1 -1
  715. package/dist/ui/preview.js +3 -476
  716. package/dist/ui/runtime-commands.d.ts +4 -0
  717. package/dist/ui/runtime-commands.js +59 -0
  718. package/dist/ui/search-dialog.js +2 -0
  719. package/dist/ui/settings-access-strings.js +42 -0
  720. package/dist/ui/settings-agent-filters.js +94 -0
  721. package/dist/ui/settings-appearance.js +122 -23
  722. package/dist/ui/settings-build-version.js +35 -0
  723. package/dist/ui/settings-codex-copy.js +19 -0
  724. package/dist/ui/settings-devices.js +253 -0
  725. package/dist/ui/settings-dialogs.js +33 -12
  726. package/dist/ui/settings-guests.js +25 -11
  727. package/dist/ui/settings-hub-browser-certificate.js +74 -0
  728. package/dist/ui/settings-hub-membership.js +72 -0
  729. package/dist/ui/settings-hub-retention.js +52 -0
  730. package/dist/ui/settings-hub.js +196 -0
  731. package/dist/ui/settings-layout.js +242 -0
  732. package/dist/ui/settings-model.js +24 -2
  733. package/dist/ui/settings-outside.js +104 -38
  734. package/dist/ui/settings-registry.js +9 -4
  735. package/dist/ui/settings-shared-strings.js +143 -0
  736. package/dist/ui/settings-shared.js +345 -0
  737. package/dist/ui/settings-shortcuts.js +65 -0
  738. package/dist/ui/settings-strings.js +89 -32
  739. package/dist/ui/settings-web-authority.js +17 -11
  740. package/dist/ui/shared/accounts.css +15 -0
  741. package/dist/ui/shared/app-i18n.js +2 -2
  742. package/dist/ui/shared/app-needs.js +1 -1
  743. package/dist/ui/shared/app-route.js +6 -1
  744. package/dist/ui/shared/app-session.js +6 -2
  745. package/dist/ui/shared/app-shell.js +81 -15
  746. package/dist/ui/shared/app.css +1114 -13
  747. package/dist/ui/shared/app.js +12 -3
  748. package/dist/ui/shared/chat-composer.js +68 -0
  749. package/dist/ui/shared/chat-md-strings.js +9 -0
  750. package/dist/ui/shared/chat-render.js +682 -0
  751. package/dist/ui/shared/chat-strings.js +333 -0
  752. package/dist/ui/shared/chat-thread.js +969 -0
  753. package/dist/ui/shared/chat-time.js +80 -0
  754. package/dist/ui/shared/header-tools.js +3 -5
  755. package/dist/ui/shared/html-attachment.js +42 -0
  756. package/dist/ui/shared/hub-chat.css +85 -0
  757. package/dist/ui/shared/hub-owner.css +33 -0
  758. package/dist/ui/shared/hub-quota.css +8 -0
  759. package/dist/ui/shared/hub.css +71 -0
  760. package/dist/ui/shared/instance-nav.js +3 -2
  761. package/dist/ui/shared/machine-name.js +13 -0
  762. package/dist/ui/shared/page-head.js +8 -0
  763. package/dist/ui/shared/panel-view.js +77 -4
  764. package/dist/ui/shared/preview.js +476 -0
  765. package/dist/ui/shared/runtime-install.css +26 -0
  766. package/dist/ui/shared/settings-width.js +31 -0
  767. package/dist/ui/shared/side-rail.js +15 -0
  768. package/dist/ui/shared/signin.js +172 -0
  769. package/dist/ui/shared/task-board.css +95 -0
  770. package/dist/ui/shared/tokens.css +1 -0
  771. package/dist/ui/shared/ui-dialog.js +2 -2
  772. package/dist/ui/shared/ui-menu.js +3 -3
  773. package/dist/ui/shared/usage-dialog.js +18 -1
  774. package/dist/ui/shared/view-history.css +17 -0
  775. package/dist/ui/shared/view-history.js +438 -0
  776. package/dist/ui/shared/view-strings.js +16 -0
  777. package/dist/ui/shared/workspace.css +20 -0
  778. package/dist/ui/signin.html +21 -0
  779. package/dist/ui/windows-cli-catalog.js +41 -12
  780. package/dist/ui/workspace-panel.js +189 -0
  781. package/dist/ui/workspace-strings.js +35 -0
  782. package/dist/unattended-install.d.ts +11 -2
  783. package/dist/unattended-install.js +41 -6
  784. package/dist/unattended-install.js.map +1 -1
  785. package/dist/usage/capacity.d.ts +69 -0
  786. package/dist/usage/capacity.js +119 -0
  787. package/dist/usage/capacity.js.map +1 -0
  788. package/dist/usage/i18n-keys.d.ts +1 -1
  789. package/dist/usage/i18n-keys.js +3 -0
  790. package/dist/usage/i18n-keys.js.map +1 -1
  791. package/dist/usage/profile-timeline.d.ts +16 -0
  792. package/dist/usage/profile-timeline.js +58 -0
  793. package/dist/usage/profile-timeline.js.map +1 -0
  794. package/dist/usage/providers.js +2 -1
  795. package/dist/usage/providers.js.map +1 -1
  796. package/dist/usage/quota-history.d.ts +43 -0
  797. package/dist/usage/quota-history.js +168 -0
  798. package/dist/usage/quota-history.js.map +1 -0
  799. package/dist/usage/usage-api.d.ts +31 -0
  800. package/dist/usage/usage-api.js +80 -1
  801. package/dist/usage/usage-api.js.map +1 -1
  802. package/dist/usage-report.d.ts +25 -1
  803. package/dist/usage-report.js +55 -4
  804. package/dist/usage-report.js.map +1 -1
  805. package/dist/usage-rollup.d.ts +6 -1
  806. package/dist/usage-rollup.js +16 -4
  807. package/dist/usage-rollup.js.map +1 -1
  808. package/dist/view-api.d.ts +16 -0
  809. package/dist/view-api.js +105 -23
  810. package/dist/view-api.js.map +1 -1
  811. package/dist/view-history.d.ts +84 -0
  812. package/dist/view-history.js +116 -0
  813. package/dist/view-history.js.map +1 -0
  814. package/dist/web-api.d.ts +49 -2
  815. package/dist/web-api.js +279 -8
  816. package/dist/web-api.js.map +1 -1
  817. package/dist/web-backend-login.d.ts +23 -1
  818. package/dist/web-backend-login.js +11 -17
  819. package/dist/web-backend-login.js.map +1 -1
  820. package/dist/web-device-login.d.ts +153 -0
  821. package/dist/web-device-login.js +278 -0
  822. package/dist/web-device-login.js.map +1 -0
  823. package/dist/web-office-skins.d.ts +9 -0
  824. package/dist/web-office-skins.js +16 -1
  825. package/dist/web-office-skins.js.map +1 -1
  826. package/dist/web-session-authorization.d.ts +13 -2
  827. package/dist/web-session-authorization.js +10 -3
  828. package/dist/web-session-authorization.js.map +1 -1
  829. package/dist/web-session.d.ts +35 -0
  830. package/dist/web-session.js +7 -0
  831. package/dist/web-session.js.map +1 -1
  832. package/dist/web-settings-patch.d.ts +3 -1
  833. package/dist/web-settings-patch.js +4 -1
  834. package/dist/web-settings-patch.js.map +1 -1
  835. package/dist/web-shell-routes.d.ts +6 -0
  836. package/dist/web-shell-routes.js +7 -0
  837. package/dist/web-shell-routes.js.map +1 -1
  838. package/dist/web-terminal.d.ts +4 -30
  839. package/dist/web-terminal.js +9 -6
  840. package/dist/web-terminal.js.map +1 -1
  841. package/dist/windows-agents.d.ts +4 -1
  842. package/dist/windows-agents.js +14 -10
  843. package/dist/windows-agents.js.map +1 -1
  844. package/dist/windows-cli-api.d.ts +12 -1
  845. package/dist/windows-cli-api.js +29 -2
  846. package/dist/windows-cli-api.js.map +1 -1
  847. package/dist/windows-cli-providers.d.ts +0 -9
  848. package/dist/windows-cli-providers.js +4 -9
  849. package/dist/windows-cli-providers.js.map +1 -1
  850. package/dist/windows-cli-worker.d.ts +25 -0
  851. package/dist/windows-cli-worker.js +98 -7
  852. package/dist/windows-cli-worker.js.map +1 -1
  853. package/dist/windows-cli.d.ts +11 -0
  854. package/dist/windows-cli.js +17 -3
  855. package/dist/windows-cli.js.map +1 -1
  856. package/dist/yaml-shared-nodes.js +8 -3
  857. package/dist/yaml-shared-nodes.js.map +1 -1
  858. package/launcher/agend-install.cjs +8 -1
  859. package/launcher/launchd-session-type.cjs +14 -0
  860. package/launcher/postinstall.cjs +27 -2
  861. package/launcher/private-home.cjs +1 -1
  862. package/launcher/tmux-bundle.cjs +247 -0
  863. package/package.json +3 -2
  864. package/templates/launchd.plist.ejs +3 -1
  865. package/templates/runtime-install/install.ps1 +270 -0
@@ -8,9 +8,14 @@ import { atomicWriteFileSync } from "./atomic-write.js";
8
8
  import { validateNativeTask } from "./windows-cli-worker.js";
9
9
  import { inventoryProbed } from "./windows-cli.js";
10
10
  import { isNativeProviderId } from "./windows-cli-providers.js";
11
+ import { assertCredentialProfileCli, assertCredentialProfileName, parseCredentialProfileReport } from "./runtime-credential-profiles.js";
12
+ import { parseAccountIdentity } from "./claude-auth-status.js";
13
+ import { RuntimeUpdateActivity } from "./runtime-update-activity.js";
14
+ import { parseRuntimeUpdateControl, RUNTIME_MANAGED_UPDATE_CAPABILITY, validRuntimeUpdateId } from "./runtime-update-protocol.js";
11
15
  import { validatePaneMcpBody } from "./runtime-pane-mcp-protocol.js";
12
16
  import { validateRuntimePaneRequest, validateRuntimePaneSnapshot, validateRuntimePaneShutdown } from "./runtime-pane-protocol.js";
13
- import { RUNTIME_CLAIM_PATH, RUNTIME_CONNECT_PATH, RUNTIME_MAX_FRAME_BYTES, RUNTIME_PAIR_PATH, RUNTIME_ROTATE_PATH, runtimeFingerprintFromHash } from "./runtime-protocol.js";
17
+ import { withNativePaneVerification } from "./runtime-pane-native.js";
18
+ import { RUNTIME_CLAIM_PATH, RUNTIME_CONNECT_PATH, RUNTIME_MAX_FRAME_BYTES, RUNTIME_PAIR_PATH, RUNTIME_ROTATE_PATH, runtimeFingerprintFromHash, parseRuntimeInfo, runtimeInfoCompatible, RUNTIME_REINSTALL_CLOSE_REASON } from "./runtime-protocol.js";
14
19
  const PAIR_TTL = 10 * 60_000;
15
20
  const MAX_STORE_BYTES = 64 * 1024 * 1024;
16
21
  const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
@@ -18,6 +23,9 @@ const secret = () => randomBytes(32).toString("hex");
18
23
  const hash = (value) => createHash("sha256").update(value).digest("hex");
19
24
  const equal = (value, digest) => /^[a-f0-9]{64}$/i.test(digest) && timingSafeEqual(Buffer.from(hash(value), "hex"), Buffer.from(digest, "hex"));
20
25
  const record = (v) => !!v && typeof v === "object" && !Array.isArray(v);
26
+ /** A deliberate validation failure whose static message is safe to show the runtime; every other error (I/O, internal) is not. */
27
+ class RuntimeProtocolError extends Error {
28
+ }
21
29
  const text = (v, max) => typeof v === "string" && v.length > 0 && v.length <= max && !/[\0\r\n]/.test(v);
22
30
  const terminal = (task) => !!task.finishedAt && ["completed", "failed", "cancelled"].includes(task.status);
23
31
  const loopback = (address) => address === "127.0.0.1" || address === "::1" || address === "::ffff:127.0.0.1";
@@ -34,10 +42,19 @@ function stable(value, depth = 0) {
34
42
  return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${stable(value[key], depth + 1)}`).join(",")}}`;
35
43
  return JSON.stringify(value) ?? "null";
36
44
  }
45
+ /** The CLI rows' `supports` flags AgEnD knows; any other key a Runtime adds is not kept. */
46
+ const SUPPORT_KEYS = ["execution", "resume", "model", "mcp"];
47
+ const MODEL_SOURCES = ["cli-cache", "official-catalog", "cli-list", "unavailable"];
48
+ /**
49
+ * A Runtime's inventory, copied field by field from an allowlist: a field AgEnD does not know is not kept (so it can never be stored or served back
50
+ * by /ui/runtimes), every text field has a length limit, and the account identity and the credential profile report are accepted in their
51
+ * closed, masked form only. A refusal names the field and the reason, never the rejected value: an unmasked e-mail must not reach a log, a close
52
+ * reason or an error message from here.
53
+ */
37
54
  function inventory(value) {
38
55
  if (!record(value) || typeof value.home !== "string" || value.home.length > 1024 || !Array.isArray(value.clis) || value.clis.length > 16)
39
- throw Error("Invalid runtime inventory");
40
- const seen = new Set();
56
+ throw new RuntimeProtocolError("Invalid runtime inventory");
57
+ const seen = new Set(), clis = [];
41
58
  for (const row of value.clis) {
42
59
  if (!record(row) || !isNativeProviderId(row.id) || seen.has(row.id) || !record(row.supports)
43
60
  || typeof row.runnable !== "boolean" || typeof row.readOnlySupport !== "boolean"
@@ -45,18 +62,60 @@ function inventory(value) {
45
62
  || !(row.path === null || text(row.path, 2048)) || !(row.version === null || text(row.version, 256))
46
63
  || typeof row.permissionNote !== "string" || row.permissionNote.length > 2048
47
64
  || !Array.isArray(row.models) || row.models.length > 256)
48
- throw Error("Invalid runtime CLI inventory");
49
- for (const model of row.models)
65
+ throw new RuntimeProtocolError("Invalid runtime CLI inventory");
66
+ const models = row.models.map(model => {
50
67
  if (!record(model) || !text(model.id, 256) || model.name !== undefined && !text(model.name, 256)
51
68
  || model.description !== undefined && (typeof model.description !== "string" || model.description.length > 2048))
52
- throw Error("Invalid runtime model inventory");
69
+ throw new RuntimeProtocolError("Invalid runtime model inventory");
70
+ return { id: model.id, ...(model.name !== undefined ? { name: model.name } : {}), ...(model.description !== undefined ? { description: model.description } : {}) };
71
+ });
53
72
  if (Object.values(row.supports).some(v => typeof v !== "boolean"))
54
- throw Error("Invalid runtime capabilities");
73
+ throw new RuntimeProtocolError("Invalid runtime capabilities");
74
+ if (row.reason !== undefined && (typeof row.reason !== "string" || row.reason.length > 1024))
75
+ throw new RuntimeProtocolError("Invalid runtime CLI inventory");
76
+ const supports = Object.fromEntries(SUPPORT_KEYS.filter(key => Object.hasOwn(row.supports, key)).map(key => [key, row.supports[key]]));
77
+ const entry = { id: row.id, path: row.path, version: row.version, authenticated: row.authenticated, runnable: row.runnable, supports: supports,
78
+ readOnlySupport: row.readOnlySupport, permissionNote: row.permissionNote, models,
79
+ ...(row.reason !== undefined ? { reason: row.reason } : {}),
80
+ ...(MODEL_SOURCES.includes(row.modelsSource) ? { modelsSource: row.modelsSource } : {}) };
55
81
  seen.add(row.id);
82
+ clis.push(entry);
56
83
  }
57
84
  if (Buffer.byteLength(JSON.stringify(value)) > RUNTIME_MAX_FRAME_BYTES / 2)
58
- throw Error("Runtime inventory is too large");
59
- return structuredClone(value);
85
+ throw new RuntimeProtocolError("Runtime inventory is too large");
86
+ if (value.probedAt !== undefined && value.probedAt !== null && (typeof value.probedAt !== "number" || !Number.isFinite(value.probedAt)))
87
+ throw new RuntimeProtocolError("Invalid runtime inventory");
88
+ const probe = { clis, home: value.home, ...(value.probedAt !== undefined ? { probedAt: value.probedAt } : {}),
89
+ ...(typeof value.hostname === "string" && value.hostname.trim() && value.hostname.length <= 255 && !/[\x00-\x1f\x7f]/.test(value.hostname) ? { hostname: value.hostname.trim() } : {}) };
90
+ const field = (error) => /^Invalid (?:credential profile report|account identity): [A-Za-z ,.]{1,48}$/.test(String(error?.message)) ? String(error.message).replace(/^Invalid (?:credential profile report|account identity): /, "") : "invalid";
91
+ if (value.credentialProfiles !== undefined) {
92
+ try {
93
+ probe.credentialProfiles = parseCredentialProfileReport(value.credentialProfiles);
94
+ }
95
+ catch (error) {
96
+ throw new RuntimeProtocolError(`Invalid runtime credential profiles (${field(error)})`);
97
+ }
98
+ }
99
+ const identities = new Map(value.clis.map(row => [row.id, row.identity]));
100
+ for (const row of probe.clis) {
101
+ const identity = identities.get(row.id);
102
+ if (identity === undefined)
103
+ continue;
104
+ if (row.id !== "claude-code" || row.authenticated !== true)
105
+ throw new RuntimeProtocolError("Invalid runtime CLI identity (only a signed-in Claude Code has one)");
106
+ try {
107
+ row.identity = parseAccountIdentity(identity);
108
+ }
109
+ catch (error) {
110
+ throw new RuntimeProtocolError(`Invalid runtime CLI identity (${field(error)})`);
111
+ }
112
+ }
113
+ return probe;
114
+ }
115
+ function machineView(machine) {
116
+ return { ...structuredClone(machine), ...(machine.inventory ? { inventory: withNativePaneVerification(machine.inventory) } : {}), runtimeCompatibility: machine.runtimeInfo
117
+ ? runtimeInfoCompatible(machine.runtimeInfo) ? "compatible" : "incompatible"
118
+ : machine.bootId ? "legacy" : "unknown" };
60
119
  }
61
120
  /**
62
121
  * M-2239 P2-1 (#2936 review): the journal is compacted, never just capped. A settled command (failed, or accepted with a
@@ -82,6 +141,8 @@ export class RuntimeCoordinator {
82
141
  pending = new Map();
83
142
  paneToolPending = new Set();
84
143
  panePending = new Map();
144
+ /** Physical handler ownership survives socket replacement and transport deadlines. */
145
+ machineActivity = new Map();
85
146
  listeners = new Set();
86
147
  limits = new Map();
87
148
  heartbeat;
@@ -124,6 +185,9 @@ export class RuntimeCoordinator {
124
185
  for (const command of this.state.commands)
125
186
  if (command.state === "pending")
126
187
  command.state = interrupted(command);
188
+ for (const row of this.state.machines)
189
+ if (row.machine.runtimeInfo !== undefined)
190
+ row.machine.runtimeInfo = parseRuntimeInfo(row.machine.runtimeInfo);
127
191
  this.save();
128
192
  this.heartbeat = setInterval(() => {
129
193
  for (const connection of this.connections.values()) {
@@ -169,8 +233,8 @@ export class RuntimeCoordinator {
169
233
  }
170
234
  entry(id) { const row = this.state.machines.find(v => v.machine.id === id); if (!row)
171
235
  throw Error("Runtime machine not found"); return row; }
172
- listMachines() { return this.state.machines.map(row => structuredClone(row.machine)); }
173
- machine(id) { const row = this.state.machines.find(v => v.machine.id === id); return row ? structuredClone(row.machine) : null; }
236
+ listMachines() { return this.state.machines.map(row => machineView(row.machine)); }
237
+ machine(id) { const row = this.state.machines.find(v => v.machine.id === id); return row ? machineView(row.machine) : null; }
174
238
  subscribe(listener) { this.listeners.add(listener); return () => this.listeners.delete(listener); }
175
239
  createPairing() {
176
240
  this.state.pairings = this.state.pairings.filter(row => row.expiresAt > this.now());
@@ -246,6 +310,7 @@ export class RuntimeCoordinator {
246
310
  if (connection) {
247
311
  this.connections.delete(id);
248
312
  this.rejectPending(connection, "Runtime machine was revoked");
313
+ this.options.warn?.({ machineId: id, code: 1008, reason: "Machine revoked" }, "Runtime connection closed because the machine was revoked");
249
314
  connection.ws.close(1008, "Machine revoked");
250
315
  }
251
316
  this.emit({ type: "machine", machineId: id });
@@ -394,20 +459,31 @@ export class RuntimeCoordinator {
394
459
  const old = this.connections.get(row.machine.id);
395
460
  if (old) {
396
461
  this.rejectPending(old, "Runtime connection was replaced; execution must be reconciled");
462
+ this.options.warn?.({ machineId: row.machine.id, code: 1008, reason: "Connection replaced" }, "Runtime connection closed because the same machine credential connected again");
397
463
  old.ws.close(1008, "Connection replaced");
398
464
  }
399
465
  row.machine.generation++;
400
466
  row.machine.status = "offline";
401
467
  this.save();
402
- const connection = { ws, machineId: row.machine.id, generation: row.machine.generation, ready: false, alive: true, helloTimer: setTimeout(() => ws.close(1008, "Runtime hello required"), 10_000) };
468
+ const activity = this.machineActivity.get(row.machine.id) ?? new RuntimeUpdateActivity();
469
+ this.machineActivity.set(row.machine.id, activity);
470
+ const connection = { ws, machineId: row.machine.id, generation: row.machine.generation, ready: false, alive: true, activity, helloTimer: setTimeout(() => ws.close(1008, "Runtime hello required"), 10_000) };
403
471
  connection.helloTimer.unref();
404
472
  this.connections.set(row.machine.id, connection);
405
473
  ws.on("pong", () => { connection.alive = true; if (this.current(connection))
406
474
  row.machine.lastSeenAt = this.now(); });
407
- ws.on("message", (data, binary) => { if (binary) {
408
- ws.close(1008, "Runtime requires JSON text frames");
409
- return;
410
- } void this.message(connection, data).catch(() => ws.close(1008, "Invalid runtime message")); });
475
+ ws.on("message", (data, binary) => {
476
+ if (binary) {
477
+ ws.close(1008, "Runtime requires JSON text frames");
478
+ return;
479
+ }
480
+ void this.message(connection, data).catch(error => {
481
+ // The cause (a static validation message) goes to the log and, trimmed, to the runtime so its terminal can show it.
482
+ const reason = error instanceof RuntimeProtocolError ? `Invalid runtime message: ${error.message}`.replace(/[^ -~]/g, "?").slice(0, 120) : "Invalid runtime message";
483
+ this.options.warn?.({ machineId: connection.machineId, code: 1008, reason, detail: error instanceof Error ? error.message : String(error) }, "Runtime connection closed because of an invalid runtime message");
484
+ ws.close(1008, reason);
485
+ });
486
+ });
411
487
  ws.on("error", () => { });
412
488
  ws.on("close", () => {
413
489
  clearTimeout(connection.helloTimer);
@@ -434,6 +510,8 @@ export class RuntimeCoordinator {
434
510
  connection.ws.send(frame);
435
511
  }
436
512
  rejectPending(connection, reason) {
513
+ connection.update?.fence.release();
514
+ connection.update = undefined;
437
515
  for (const [id, pending] of this.panePending)
438
516
  if (pending.machineId === connection.machineId && pending.generation === connection.generation) {
439
517
  this.panePending.delete(id);
@@ -458,7 +536,7 @@ export class RuntimeCoordinator {
458
536
  }
459
537
  validateTask(command, value) {
460
538
  if (command.operation !== "run" || !record(command.payload) || !record(command.payload.task) || !record(value))
461
- throw Error("Unexpected runtime task");
539
+ throw new RuntimeProtocolError("Unexpected runtime task");
462
540
  const input = command.payload.task;
463
541
  if (value.id !== input.requestId || value.cli !== input.cli || value.cwd !== input.cwd || value.sandbox !== input.sandbox || (value.model ?? "") !== (input.model ?? "")
464
542
  || !["starting", "running", "cancelling", "completed", "failed", "cancelled"].includes(String(value.status))
@@ -469,38 +547,154 @@ export class RuntimeCoordinator {
469
547
  || value.threadId !== undefined && !text(value.threadId, 256)
470
548
  || value.threadId !== undefined && command.payload.resumeSessionId !== undefined && value.threadId !== command.payload.resumeSessionId
471
549
  || value.outcomeConfirmed !== undefined && typeof value.outcomeConfirmed !== "boolean")
472
- throw Error("Invalid runtime task snapshot");
550
+ throw new RuntimeProtocolError("Invalid runtime task snapshot");
473
551
  return { id: value.id, cli: value.cli, cwd: value.cwd, sandbox: value.sandbox, ...(value.model ? { model: value.model } : {}),
474
552
  status: value.status, startedAt: value.startedAt, output: value.output,
475
553
  ...(value.finishedAt !== undefined ? { finishedAt: value.finishedAt } : {}), ...(value.error ? { error: value.error } : {}), ...(value.threadId ? { threadId: value.threadId } : {}), ...(value.outcomeConfirmed !== undefined ? { outcomeConfirmed: value.outcomeConfirmed } : {}) };
476
554
  }
555
+ admitting(connection) {
556
+ return connection.ready && !connection.update && connection.activity.accepting && this.current(connection)
557
+ && this.entry(connection.machineId).machine.status === "online" && connection.ws.readyState === WebSocket.OPEN;
558
+ }
559
+ updateIdle(connection) {
560
+ const machine = connection.machineId;
561
+ return connection.activity.pending === 0 && !this.hasActiveTask(machine) && connection.ws.bufferedAmount === 0
562
+ && ![...this.pending.values(), ...this.panePending.values()].some(pending => pending.machineId === machine)
563
+ && ![...this.paneToolPending].some(key => key.startsWith(`${machine}:`));
564
+ }
565
+ /** Trial metadata is staged until activation: no online event or probe can admit work early. */
566
+ promoteRuntime(connection) {
567
+ const row = this.entry(connection.machineId), hello = connection.hello;
568
+ row.machine.bootId = connection.bootId;
569
+ row.machine.status = "online";
570
+ row.machine.lastSeenAt = this.now();
571
+ if (hello.runtimeInfo)
572
+ row.machine.runtimeInfo = hello.runtimeInfo;
573
+ else
574
+ delete row.machine.runtimeInfo;
575
+ if (hello.paneProtocol === 1)
576
+ row.machine.paneProtocol = 1;
577
+ else
578
+ delete row.machine.paneProtocol;
579
+ if (hello.inventory !== undefined) {
580
+ row.machine.inventory = hello.inventory;
581
+ row.machine.inventoryUpdatedAt = this.now();
582
+ }
583
+ this.save();
584
+ }
585
+ updateControl(connection, value) {
586
+ if (!connection.ready || !connection.managedUpdate)
587
+ throw new RuntimeProtocolError("Runtime update was not negotiated");
588
+ const control = parseRuntimeUpdateControl(value, "client");
589
+ const reply = (phase) => this.send(connection, { v: 1, type: "update.control", id: control.id, bootId: connection.bootId, generation: connection.generation, phase });
590
+ if (control.bootId !== connection.bootId || control.generation !== connection.generation) {
591
+ reply("cancelled");
592
+ return;
593
+ }
594
+ const owned = connection.update;
595
+ if (owned?.phase === "trial") {
596
+ if (control.phase !== "activate" || owned.id !== control.id) {
597
+ reply("busy");
598
+ return;
599
+ }
600
+ if (!owned.fence.current() || !this.updateIdle(connection)) {
601
+ reply("busy");
602
+ return;
603
+ }
604
+ // The supervisor has persisted its activation intent. Lost acknowledgement is uncertain, never rollback permission.
605
+ owned.fence.release();
606
+ connection.update = undefined;
607
+ connection.activatedUpdateId = control.id;
608
+ this.promoteRuntime(connection);
609
+ reply("activated");
610
+ this.emit({ type: "machine", machineId: connection.machineId });
611
+ if (!inventoryProbed(this.entry(connection.machineId).machine.inventory))
612
+ void this.call(connection.machineId, "probe", { force: true }).catch(() => { });
613
+ return;
614
+ }
615
+ if (control.phase === "activate" && connection.activatedUpdateId === control.id) {
616
+ reply("activated");
617
+ return;
618
+ }
619
+ if (control.phase === "prepare") {
620
+ if (owned) {
621
+ reply(owned.id === control.id ? owned.phase === "committed" ? "commit" : "prepared" : "busy");
622
+ return;
623
+ }
624
+ const fence = connection.activity.tryFence(control.id, () => this.current(connection) && connection.ready && connection.ws.readyState === WebSocket.OPEN, () => this.updateIdle(connection));
625
+ if (!fence) {
626
+ reply("busy");
627
+ return;
628
+ }
629
+ connection.update = { id: control.id, phase: "prepared", fence };
630
+ reply("prepared");
631
+ return;
632
+ }
633
+ if (!owned || owned.id !== control.id) {
634
+ reply("cancelled");
635
+ return;
636
+ }
637
+ if (owned.phase === "committed") {
638
+ reply("commit");
639
+ return;
640
+ }
641
+ if (control.phase === "ready" && owned.fence.current() && this.updateIdle(connection)) {
642
+ owned.phase = "committed";
643
+ reply("commit");
644
+ return;
645
+ }
646
+ // A cancellation/busy reply is queued before admitting any later request on this ordered connection.
647
+ reply(control.phase === "ready" ? "busy" : "cancelled");
648
+ owned.fence.release();
649
+ connection.update = undefined;
650
+ }
477
651
  async message(connection, raw) {
478
652
  if (!this.current(connection))
479
653
  return;
480
654
  const value = JSON.parse(raw.toString());
481
655
  if (!record(value) || value.v !== 1 || !text(value.type, 32))
482
- throw Error("Invalid runtime frame");
656
+ throw new RuntimeProtocolError("Invalid runtime frame");
483
657
  const row = this.entry(connection.machineId);
484
658
  connection.alive = true;
659
+ if (value.type === "update.control") {
660
+ this.updateControl(connection, value);
661
+ return;
662
+ }
485
663
  if (!connection.ready) {
486
664
  if (value.type !== "hello" || !text(value.bootId, 128))
487
- throw Error("Runtime hello required");
488
- connection.ready = true;
665
+ throw new RuntimeProtocolError("Runtime hello required");
666
+ const runtimeInfo = parseRuntimeInfo(value.runtimeInfo);
667
+ if (runtimeInfo && !runtimeInfoCompatible(runtimeInfo)) {
668
+ // Version skew fails clearly: no welcome, no work, and the Runtime is told to run the install command again. Its report is
669
+ // kept (it stays offline) so Settings can show which version needs reinstalling; the pairing itself is untouched.
670
+ row.machine.runtimeInfo = runtimeInfo;
671
+ row.machine.lastSeenAt = this.now();
672
+ this.save();
673
+ this.emit({ type: "machine", machineId: connection.machineId });
674
+ this.options.warn?.({ machineId: connection.machineId, code: 1008, reason: "Runtime incompatible", detail: `version ${runtimeInfo.version ?? "unknown"}, protocols ${runtimeInfo.protocolVersions.join(",")}, capabilities ${runtimeInfo.capabilities.join(",")}` }, "Runtime connection refused: its version is not compatible with this AgEnD");
675
+ connection.ws.close(1008, RUNTIME_REINSTALL_CLOSE_REASON);
676
+ return;
677
+ }
678
+ const managed = runtimeInfo?.capabilities.includes(RUNTIME_MANAGED_UPDATE_CAPABILITY) === true;
679
+ if (managed && !validRuntimeUpdateId(value.bootId) || value.updateTrialId !== undefined && (!managed || !validRuntimeUpdateId(value.updateTrialId)))
680
+ throw new RuntimeProtocolError("Invalid Runtime update handshake");
681
+ const reportedInventory = value.inventory === undefined ? undefined : inventory(value.inventory);
489
682
  connection.bootId = value.bootId;
490
- clearTimeout(connection.helloTimer);
491
- row.machine.bootId = value.bootId;
492
- row.machine.status = "online";
493
- row.machine.lastSeenAt = this.now();
494
- if (value.paneProtocol === 1)
495
- row.machine.paneProtocol = 1;
496
- else
497
- delete row.machine.paneProtocol;
498
- if (value.inventory !== undefined) {
499
- row.machine.inventory = inventory(value.inventory);
500
- row.machine.inventoryUpdatedAt = this.now();
683
+ connection.managedUpdate = managed;
684
+ connection.hello = { runtimeInfo, ...(value.paneProtocol === 1 ? { paneProtocol: 1 } : {}), inventory: reportedInventory };
685
+ if (value.updateTrialId !== undefined) {
686
+ const fence = connection.activity.tryFence(value.updateTrialId, () => this.current(connection), () => this.updateIdle(connection));
687
+ if (!fence)
688
+ throw new RuntimeProtocolError("Runtime update trial is busy");
689
+ connection.update = { id: value.updateTrialId, phase: "trial", fence };
501
690
  }
502
- this.save();
503
- this.send(connection, { v: 1, type: "welcome", machineId: connection.machineId, generation: connection.generation });
691
+ connection.ready = true;
692
+ clearTimeout(connection.helloTimer);
693
+ if (!connection.update)
694
+ this.promoteRuntime(connection);
695
+ this.send(connection, { v: 1, type: "welcome", machineId: connection.machineId, generation: connection.generation, ...(managed ? { updateProtocol: 1 } : {}) });
696
+ if (connection.update)
697
+ return; // A trial has authenticated, but cannot receive tasks or an automatic CLI probe.
504
698
  this.emit({ type: "machine", machineId: connection.machineId });
505
699
  // alpha.2 polish (dev-claude's no-chat e2e): a runner that brings no CLI inventory (just paired, nothing detected
506
700
  // yet) is asked for its own report now — its detection runs on that PC, never on this fleet's loop — so the first
@@ -513,21 +707,25 @@ export class RuntimeCoordinator {
513
707
  return;
514
708
  }
515
709
  row.machine.lastSeenAt = this.now();
710
+ if (connection.update?.phase === "trial")
711
+ throw new RuntimeProtocolError("Runtime update trial has not activated");
516
712
  if (value.type === "pane.tool.request") {
517
713
  if (row.machine.paneProtocol !== 1 || Object.keys(value).some(key => !["v", "type", "id", "body"].includes(key)) || !UUID.test(String(value.id)))
518
- throw Error("Invalid pane MCP transport request");
714
+ throw new RuntimeProtocolError("Invalid pane MCP transport request");
519
715
  const body = validatePaneMcpBody(value.body), id = value.id;
520
716
  const key = `${connection.machineId}:${connection.generation}:${id}`;
521
717
  if (this.paneToolPending.size >= 128 || this.paneToolPending.has(key))
522
- throw Error("Pane MCP transport backlog or duplicate request");
718
+ throw new RuntimeProtocolError("Pane MCP transport backlog or duplicate request");
523
719
  let active = true;
524
720
  const current = () => active && !this.closed && this.current(connection) && connection.ready && connection.ws.readyState === WebSocket.OPEN;
525
721
  this.paneToolPending.add(key);
526
722
  let timer;
527
723
  try {
528
- if (!current() || !this.options.handlePaneMcp)
529
- throw Error("Pane MCP scope unavailable");
530
- const result = await Promise.race([this.options.handlePaneMcp(connection.machineId, body, current), new Promise((_resolve, reject) => {
724
+ if (!current() || !this.options.handlePaneMcp || !connection.activity.accepting || connection.activity.pending >= 128)
725
+ throw new RuntimeProtocolError("Pane MCP scope unavailable");
726
+ // The activity token belongs to the underlying handler, not the deadline race that may finish first.
727
+ const physical = connection.activity.run(() => this.options.handlePaneMcp(connection.machineId, body, current));
728
+ const result = await Promise.race([physical, new Promise((_resolve, reject) => {
531
729
  timer = setTimeout(() => { active = false; reject(Error("Pane MCP deadline")); }, 80_000);
532
730
  timer.unref();
533
731
  })]);
@@ -547,19 +745,19 @@ export class RuntimeCoordinator {
547
745
  }
548
746
  if (value.type === "pane.output") {
549
747
  if (row.machine.paneProtocol !== 1)
550
- throw Error("Pane protocol was not negotiated");
748
+ throw new RuntimeProtocolError("Pane protocol was not negotiated");
551
749
  const snapshot = validateRuntimePaneSnapshot(value.snapshot);
552
750
  this.emit({ type: "pane", machineId: connection.machineId, pane: snapshot });
553
751
  return;
554
752
  }
555
753
  if (value.type === "pane.response") {
556
754
  if (row.machine.paneProtocol !== 1 || !UUID.test(String(value.id)) || typeof value.ok !== "boolean")
557
- throw Error("Invalid pane transport response");
755
+ throw new RuntimeProtocolError("Invalid pane transport response");
558
756
  const pending = this.panePending.get(value.id);
559
757
  if (!pending)
560
758
  return; // A late reply proves nothing and never replays a command.
561
759
  if (pending.machineId !== connection.machineId || pending.generation !== connection.generation)
562
- throw Error("Pane response belongs to another connection");
760
+ throw new RuntimeProtocolError("Pane response belongs to another connection");
563
761
  this.panePending.delete(value.id);
564
762
  clearTimeout(pending.timer);
565
763
  if (value.ok)
@@ -577,7 +775,7 @@ export class RuntimeCoordinator {
577
775
  }
578
776
  if (value.type === "task") {
579
777
  if (!record(value.task) || !Number.isSafeInteger(value.seq) || value.seq < 1)
580
- throw Error("Invalid runtime task event");
778
+ throw new RuntimeProtocolError("Invalid runtime task event");
581
779
  const taskValue = value.task;
582
780
  const command = this.state.commands.find(command => command.id === taskValue.id && command.machineId === connection.machineId && command.operation === "run");
583
781
  if (!command) {
@@ -585,13 +783,13 @@ export class RuntimeCoordinator {
585
783
  // is acknowledged by its tombstone and changes nothing. An unknown id, or another machine's, still closes.
586
784
  if (this.tombstoned(connection.machineId, taskValue.id))
587
785
  return;
588
- throw Error("Runtime task does not belong to this machine");
786
+ throw new RuntimeProtocolError("Runtime task does not belong to this machine");
589
787
  }
590
788
  const task = this.validateTask(command, value.task);
591
789
  if (value.seq <= command.seq)
592
790
  return;
593
791
  if (command.task && terminal(command.task) && !terminal(task))
594
- throw Error("Runtime task cannot restart");
792
+ throw new RuntimeProtocolError("Runtime task cannot restart");
595
793
  command.seq = value.seq;
596
794
  command.task = task;
597
795
  command.state = "accepted";
@@ -601,12 +799,12 @@ export class RuntimeCoordinator {
601
799
  }
602
800
  if (value.type === "response") {
603
801
  if (!text(value.id, 128) || typeof value.ok !== "boolean")
604
- throw Error("Invalid runtime response");
802
+ throw new RuntimeProtocolError("Invalid runtime response");
605
803
  const pending = this.pending.get(value.id), command = this.state.commands.find(command => command.id === value.id);
606
804
  if (!command || command.machineId !== connection.machineId) {
607
805
  if (!command && this.tombstoned(connection.machineId, value.id))
608
806
  return;
609
- throw Error("Runtime response does not belong to this machine");
807
+ throw new RuntimeProtocolError("Runtime response does not belong to this machine");
610
808
  }
611
809
  if (!pending || pending.generation !== connection.generation)
612
810
  return;
@@ -651,30 +849,30 @@ export class RuntimeCoordinator {
651
849
  }
652
850
  if (value.type === "tool.call") {
653
851
  if (!text(value.id, 128) || !text(value.runId, 128))
654
- throw Error("Invalid runtime tool call");
852
+ throw new RuntimeProtocolError("Invalid runtime tool call");
655
853
  const command = this.state.commands.find(command => command.id === value.runId && command.machineId === connection.machineId && command.operation === "run");
656
854
  try {
657
- if (!command || !record(command.payload) || !record(command.payload.mcp) || command.task && terminal(command.task) || !this.options.handleMcp)
658
- throw Error("Runtime tool call has no active turn");
855
+ if (!connection.activity.accepting || connection.activity.pending >= 128 || !command || !record(command.payload) || !record(command.payload.mcp) || command.task && terminal(command.task) || !this.options.handleMcp)
856
+ throw new RuntimeProtocolError("Runtime tool call has no active turn");
659
857
  const body = value.body;
660
858
  if (!record(body) || Object.keys(body).some(key => !["op", "method", "params", "callId"].includes(key))
661
859
  || body.op !== "native-mcp" || !record(body.params) || Buffer.byteLength(JSON.stringify(body)) > 64 * 1024)
662
- throw Error("Invalid runtime MCP request");
860
+ throw new RuntimeProtocolError("Invalid runtime MCP request");
663
861
  if (body.method === "tools/list") {
664
862
  if (Object.keys(body.params).length || body.callId !== undefined)
665
- throw Error("Invalid runtime MCP listing");
863
+ throw new RuntimeProtocolError("Invalid runtime MCP listing");
666
864
  }
667
865
  else if (body.method === "tools/call") {
668
866
  if (!text(body.callId, 128) || !/^[A-Za-z0-9._:-]+$/.test(body.callId)
669
867
  || Object.keys(body.params).some(key => !["name", "arguments"].includes(key)) || typeof body.params.name !== "string"
670
868
  || !Array.isArray(command.payload.mcp.tools) || !command.payload.mcp.tools.includes(body.params.name)
671
869
  || body.params.arguments !== undefined && !record(body.params.arguments))
672
- throw Error("Runtime MCP tool is outside this turn");
870
+ throw new RuntimeProtocolError("Runtime MCP tool is outside this turn");
673
871
  stable(body.params);
674
872
  }
675
873
  else
676
- throw Error("Invalid runtime MCP operation");
677
- const result = await this.options.handleMcp(connection.machineId, value.runId, body);
874
+ throw new RuntimeProtocolError("Invalid runtime MCP operation");
875
+ const result = await connection.activity.run(() => this.options.handleMcp(connection.machineId, value.runId, body));
678
876
  if (!this.current(connection))
679
877
  return;
680
878
  this.send(connection, { v: 1, type: "tool.result", id: value.id, ok: true, result });
@@ -685,7 +883,7 @@ export class RuntimeCoordinator {
685
883
  }
686
884
  return;
687
885
  }
688
- throw Error("Unknown runtime message");
886
+ throw new RuntimeProtocolError("Unknown runtime message");
689
887
  }
690
888
  tombstoned(machineId, id) {
691
889
  return typeof id === "string" && this.state.tombstones.some(row => row.id === id && row.machineId === machineId);
@@ -720,10 +918,31 @@ export class RuntimeCoordinator {
720
918
  }
721
919
  task(id) { const task = this.state.commands.find(command => command.id === id && command.operation === "run")?.task; return task ? structuredClone(task) : null; }
722
920
  tasks() { return this.state.commands.flatMap(command => command.operation === "run" && command.task ? [{ machineId: command.machineId, task: structuredClone(command.task) }] : []); }
921
+ /** Include journaled sends whose acknowledgement is still missing, so reopening diagnostics cannot hide an uncertain run. */
922
+ diagnosticTasks(machineId) {
923
+ return this.state.commands.flatMap(command => {
924
+ if (command.operation !== "run" || command.machineId !== machineId)
925
+ return [];
926
+ if (command.task)
927
+ return [structuredClone(command.task)];
928
+ let input;
929
+ try {
930
+ input = validateNativeTask(command.payload.task);
931
+ }
932
+ catch {
933
+ return [];
934
+ }
935
+ const uncertain = command.state === "uncertain", rejected = command.state === "failed";
936
+ return [{ id: command.id, cli: input.cli, cwd: input.cwd, sandbox: input.sandbox, ...(input.model ? { model: input.model } : {}),
937
+ startedAt: command.createdAt, status: uncertain || rejected ? "failed" : "starting", output: "",
938
+ ...(rejected ? { outcomeConfirmed: true, error: command.error || "Runtime request failed" } : {}),
939
+ ...(uncertain ? { outcomeConfirmed: false, error: "Remote execution outcome is unconfirmed. Reconnect this runtime to reconcile before sending another task." } : {}) }];
940
+ }).sort((a, b) => b.startedAt - a.startedAt).slice(0, 20);
941
+ }
723
942
  hasActiveTask(machineId) { return this.state.commands.some(command => command.machineId === machineId && command.operation === "run" && command.state !== "failed" && (!command.task || !terminal(command.task) || command.task.outcomeConfirmed === false)); }
724
943
  paneTransportEpoch(machineId) {
725
944
  const connection = this.connections.get(machineId);
726
- return connection?.ready && connection.ws.readyState === WebSocket.OPEN && this.current(connection) ? `${this.paneEpoch}:${machineId}:${connection.generation}` : null;
945
+ return connection && this.admitting(connection) ? `${this.paneEpoch}:${machineId}:${connection.generation}` : null;
727
946
  }
728
947
  /** Pane input replay/sequence authority lives in its pane ledger; reads never fill the exec-task journal. */
729
948
  async callPane(machineId, raw, maxAgents = 4) {
@@ -731,8 +950,8 @@ export class RuntimeCoordinator {
731
950
  if (!Number.isInteger(maxAgents) || maxAgents < 1 || maxAgents > 16)
732
951
  throw Error("Invalid machine pane limit");
733
952
  const machine = this.entry(machineId).machine, connection = this.connections.get(machineId);
734
- if (this.closed || machine.status !== "online" || machine.paneProtocol !== 1 || !connection?.ready || !this.current(connection))
735
- throw Error("Pane runtime is offline or unsupported");
953
+ if (this.closed || machine.status !== "online" || machine.paneProtocol !== 1 || !connection || !this.admitting(connection))
954
+ throw Error("Pane runtime is offline, updating or unsupported");
736
955
  if (this.panePending.size >= 64)
737
956
  throw Error("Pane transport capacity reached");
738
957
  const id = randomUUID();
@@ -769,13 +988,17 @@ export class RuntimeCoordinator {
769
988
  throw Error("Unsupported runtime operation");
770
989
  const machine = this.entry(machineId).machine;
771
990
  const connection = this.connections.get(machineId);
772
- if (machine.status !== "online" || !connection?.ready || !this.current(connection))
773
- throw Error("Runtime machine is offline");
991
+ if (machine.status !== "online" || !connection || !this.admitting(connection))
992
+ throw Error("Runtime machine is offline or updating");
774
993
  let id = randomUUID(), normalized = payload;
775
994
  if (operation === "run") {
776
- if (!record(payload) || Object.keys(payload).some(k => !["task", "resumeSessionId", "context", "mcp"].includes(k)))
995
+ if (!record(payload) || Object.keys(payload).some(k => !["task", "resumeSessionId", "context", "mcp", "credentialProfile"].includes(k)))
777
996
  throw Error("Invalid runtime run payload");
778
997
  const task = validateNativeTask(payload.task);
998
+ if (payload.credentialProfile !== undefined) {
999
+ assertCredentialProfileName(payload.credentialProfile);
1000
+ assertCredentialProfileCli(task.cli);
1001
+ }
779
1002
  if (payload.resumeSessionId !== undefined && !text(payload.resumeSessionId, 256) || payload.context !== undefined && (typeof payload.context !== "string" || payload.context.length > 2000 || payload.context.includes("\0")))
780
1003
  throw Error("Invalid runtime turn context");
781
1004
  if (payload.mcp !== undefined && (!record(payload.mcp) || Object.keys(payload.mcp).some(k => k !== "tools") || !Array.isArray(payload.mcp.tools) || !payload.mcp.tools.length || payload.mcp.tools.length > 128 || payload.mcp.tools.some(v => typeof v !== "string" || !/^[a-z][a-z0-9_]{0,63}$/.test(v))))
@@ -847,6 +1070,8 @@ export class RuntimeCoordinator {
847
1070
  return;
848
1071
  this.closed = true;
849
1072
  clearInterval(this.heartbeat);
1073
+ for (const activity of this.machineActivity.values())
1074
+ activity.close();
850
1075
  for (const connection of this.connections.values()) {
851
1076
  clearTimeout(connection.helloTimer);
852
1077
  this.rejectPending(connection, "Runtime coordinator stopped; reconcile before retrying");