@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
@@ -0,0 +1,149 @@
1
+ /**
2
+ * `claude auth status`, read once and the same way everywhere (the AgEnD host's `authCheck` and CLI sign-in list, the Windows Runtime's
3
+ * per-profile report and default sign-in): is it signed in, and which account is it, as a MASKED e-mail and a plan.
4
+ *
5
+ * The full e-mail never leaves `parseClaudeAuthStatus`: it is masked inside, before anything is returned, stored, logged, shown or sent
6
+ * (`ab***@example.com`). The same pattern is enforced where a masked value arrives from elsewhere (the server, on a Runtime's report), and a
7
+ * value that does not match it is a protocol error, never "cleaned up". The domain is sent in full on purpose: it lets an admin tell a work
8
+ * account from a personal one.
9
+ *
10
+ * Built-ins only: it is part of the Runtime bundle (RUNTIME_BUNDLE_MODULES).
11
+ */
12
+ /** Reported in the Runtime's capabilities. A Runtime without it still works; it just shows no account identity. */
13
+ export const ACCOUNT_IDENTITY_CAPABILITY = "account-identity";
14
+ /** The plans that can be reported. Whatever else the CLI says becomes `unknown`; display names belong to the UI (they are product names, not translated). */
15
+ export const PLANS = Object.freeze(["free", "pro", "max", "team", "enterprise", "unknown"]);
16
+ /**
17
+ * The mask contract. ASCII only, one or two visible characters, then `***@`, then a dotted ASCII domain of at most 253 characters
18
+ * (the look-ahead), under a total length cap.
19
+ */
20
+ const MASKED_EMAIL = /^[A-Za-z0-9._%+-]{1,2}\*\*\*@(?=.{1,253}$)[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+$/;
21
+ const MAX_MASKED = 260;
22
+ const MAX_EMAIL = 254;
23
+ const ACCOUNT_KEYS = ["maskedEmail", "plan", "apiKey"];
24
+ export function validMaskedEmail(value) { return typeof value === "string" && value.length <= MAX_MASKED && MASKED_EMAIL.test(value); }
25
+ export function validPlan(value) { return typeof value === "string" && PLANS.includes(value); }
26
+ /** Module-private on purpose: the only way to get a masked address is through the parser, so no caller ever holds a raw one. */
27
+ function mask(value) {
28
+ if (typeof value !== "string")
29
+ return undefined;
30
+ const text = value.trim();
31
+ if (!text || text.length > MAX_EMAIL || !/^[\x21-\x7e]+$/.test(text))
32
+ return undefined; // printable ASCII, no space: a non-ASCII address sends none
33
+ const at = text.indexOf("@");
34
+ if (at < 1 || at !== text.lastIndexOf("@"))
35
+ return undefined;
36
+ const local = text.slice(0, at), domain = text.slice(at + 1);
37
+ const masked = `${local.slice(0, local.length <= 2 ? 1 : 2)}***@${domain}`;
38
+ // Self-check with the very pattern the server enforces: anything that does not fit it sends no e-mail, never a partial one.
39
+ return validMaskedEmail(masked) ? masked : undefined;
40
+ }
41
+ /**
42
+ * The subscription type as Claude names it, trimmed and lower-cased: the one normalization both the plan reported here and the usage
43
+ * panel's plan label (src/usage/providers.ts) start from.
44
+ */
45
+ export function normalizeSubscriptionType(value) {
46
+ if (typeof value !== "string")
47
+ return undefined;
48
+ const plan = value.trim().toLowerCase();
49
+ return plan || undefined;
50
+ }
51
+ function planOf(value) {
52
+ const type = normalizeSubscriptionType(value);
53
+ return type === undefined ? undefined : PLANS.includes(type) && type !== "unknown" ? type : "unknown";
54
+ }
55
+ /**
56
+ * Closed parse of an identity that arrives from elsewhere (a Runtime's report): `maskedEmail` only in its masked form, `plan` only from
57
+ * the list, `apiKey` only `true`, and nothing else. A violation is an error carrying no value: the rejected text is never echoed.
58
+ */
59
+ export function parseAccountIdentity(value) {
60
+ const fail = (field) => { throw new Error(`Invalid account identity: ${field}`); };
61
+ if (!value || typeof value !== "object" || Array.isArray(value))
62
+ return fail("identity");
63
+ const input = value;
64
+ for (const key of Object.keys(input))
65
+ if (!ACCOUNT_KEYS.includes(key))
66
+ return fail("unknown field");
67
+ if (input.maskedEmail !== undefined && !validMaskedEmail(input.maskedEmail))
68
+ return fail("maskedEmail");
69
+ if (input.plan !== undefined && !validPlan(input.plan))
70
+ return fail("plan");
71
+ if (input.apiKey !== undefined && input.apiKey !== true)
72
+ return fail("apiKey");
73
+ if (input.apiKey === true && (input.maskedEmail !== undefined || input.plan !== undefined))
74
+ return fail("apiKey");
75
+ return { ...(input.maskedEmail !== undefined ? { maskedEmail: input.maskedEmail } : {}), ...(input.plan !== undefined ? { plan: input.plan } : {}), ...(input.apiKey === true ? { apiKey: true } : {}) };
76
+ }
77
+ /** The identity part of a parse, or undefined when there is none. */
78
+ export function identityOf(status) {
79
+ const identity = { ...(status.maskedEmail ? { maskedEmail: status.maskedEmail } : {}), ...(status.plan ? { plan: status.plan } : {}), ...(status.apiKey ? { apiKey: true } : {}) };
80
+ return Object.keys(identity).length ? identity : undefined;
81
+ }
82
+ /**
83
+ * The JSON objects in a text, in order: a balanced `{ … }` (string-aware, so a brace inside a quoted value does not count) from each `{`. Stdout and
84
+ * stderr are merged by every caller, so other text, even text with braces in it, can sit around the answer. Bounded: a step budget, so a hostile
85
+ * or enormous output cannot make this quadratic.
86
+ */
87
+ function* jsonObjectCandidates(text) {
88
+ let budget = 262_144;
89
+ for (let start = text.indexOf("{"); start >= 0 && budget > 0; start = text.indexOf("{", start + 1)) {
90
+ let depth = 0, inString = false, escaped = false;
91
+ for (let i = start; i < text.length && budget-- > 0; i++) {
92
+ const c = text[i];
93
+ if (inString) {
94
+ if (escaped)
95
+ escaped = false;
96
+ else if (c === "\\")
97
+ escaped = true;
98
+ else if (c === '"')
99
+ inString = false;
100
+ continue;
101
+ }
102
+ if (c === '"')
103
+ inString = true;
104
+ else if (c === "{")
105
+ depth++;
106
+ else if (c === "}" && --depth === 0) {
107
+ yield text.slice(start, i + 1);
108
+ start = i;
109
+ break;
110
+ }
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Parse the output of `claude auth status` (stdout and stderr may be merged, so the JSON object is looked for among other text, braces included):
116
+ * the first balanced object that parses and has a boolean `loggedIn` is the answer.
117
+ * `loggedIn`: the CLI's own boolean, null when there is no readable answer. Only a signed-in answer carries an identity: an account login
118
+ * has a masked e-mail and a plan; an API key (`authMethod: "api_key"`) is marked as such and has neither.
119
+ */
120
+ export function parseClaudeAuthStatus(text) {
121
+ const unreadable = { loggedIn: null };
122
+ if (typeof text !== "string" || text.length > 64 * 1024)
123
+ return unreadable;
124
+ let row, tried = 0;
125
+ for (const candidate of jsonObjectCandidates(text)) {
126
+ if (++tried > 32)
127
+ break;
128
+ let value;
129
+ try {
130
+ value = JSON.parse(candidate);
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (value && typeof value === "object" && !Array.isArray(value) && typeof value.loggedIn === "boolean") {
136
+ row = value;
137
+ break;
138
+ }
139
+ }
140
+ if (!row)
141
+ return unreadable;
142
+ if (row.loggedIn !== true)
143
+ return { loggedIn: false };
144
+ if (row.authMethod === "api_key")
145
+ return { loggedIn: true, apiKey: true };
146
+ const maskedEmail = mask(row.email), plan = planOf(row.subscriptionType);
147
+ return { loggedIn: true, ...(maskedEmail ? { maskedEmail } : {}), ...(plan ? { plan } : {}) };
148
+ }
149
+ //# sourceMappingURL=claude-auth-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-auth-status.js","sourceRoot":"","sources":["../src/claude-auth-status.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -16,6 +16,8 @@ applyNetworkReliabilityDefaults();
16
16
  import { checkNodeVersion } from "./node-version-guard.js";
17
17
  checkNodeVersion();
18
18
  import { Command, Option } from "commander";
19
+ import { registerBuildInfoCommand } from "./build-provenance-cli.js";
20
+ import { launchdServiceDomain } from "./launchd-service-domain.js";
19
21
  import { registerBugReportCommand } from "./bug-report-cli.js";
20
22
  import { join, dirname } from "node:path";
21
23
  import { SchedulerDb } from "./scheduler/db.js";
@@ -25,7 +27,8 @@ import { homedir, totalmem, freemem, userInfo } from "node:os";
25
27
  import { fileURLToPath } from "node:url";
26
28
  import { spawnSync, execSync, execFileSync } from "node:child_process";
27
29
  import { spawn } from "./child-process.js";
28
- import { getAgendHome, getTmuxSocketName, isDefaultAgendHome, realDefaultAgendHome } from "./paths.js";
30
+ import { getAgendHome, isDefaultAgendHome, realDefaultAgendHome } from "./paths.js";
31
+ import { tmuxArgs as tmuxArgsFor, tmuxBinary as tmuxBin, tmuxEnvOption as tmuxEnvOpt } from "./tmux-binary.js";
29
32
  import { hasPausedMarker } from "./pause-marker.js";
30
33
  import { COMPLETION_SHELLS, completionScript } from "./completion.js";
31
34
  import { getUpdateSelector, isExactVersion, isUnrequestedDowngrade, downgradeRefusal, lookupTargetVersion, reportUpdateRestart, shouldSkipUpdate, runningFleetPredatesInstall, fleetProvenStopped, readFleetPidEvidence, pidAlive, processStartMs, } from "./update-check.js";
@@ -38,7 +41,7 @@ import { limitFleetCoreDumps } from "./coredump-filter.js";
38
41
  import { SYSTEMD_RESTART_TIMEOUT_MS, getServicePath, getSystemServicePath, serviceDefinitionHome } from "./service-installer.js";
39
42
  import { withFsPlanLock } from "./service-plan.js";
40
43
  import { selectSystemdRestartTarget, SYSTEMD_RESTART_INDETERMINATE_EXIT_CODE, } from "./service-restart-selection.js";
41
- import { loadRawFleetConfig } from "./config.js";
44
+ import { getTmuxSession, loadRawFleetConfig } from "./config.js";
42
45
  import { detectLocale, setLocale, getLocale, t } from "./locale.js";
43
46
  import { settingsSourceLabel } from "./settings-confirmation.js";
44
47
  import { DeliveryOutbox, deliveryStatusSelector } from "./delivery-outbox.js";
@@ -48,11 +51,8 @@ import { requestSettingsConfirmation } from "./settings-control.js";
48
51
  import { canonicalCliEntry, selfCommand } from "./cli-entry.js";
49
52
  import { DIRECT_FLEET_START_ENV, redirectsToService, serviceRunsHome, startedByServiceManager } from "./service-owner.js";
50
53
  import { handOff, shouldHandOff } from "./launchd-handoff.js";
51
- /** Prefix tmux args with -L when socket isolation is active. */
52
- function tmuxArgs(args) {
53
- const socket = getTmuxSocketName();
54
- return socket ? ["-L", socket, ...args] : args;
55
- }
54
+ /** This fleet's tmux socket (and, with the bundled tmux, its config) in front of `args` (tmux-binary.ts). */
55
+ const tmuxArgs = (args) => tmuxArgsFor(args);
56
56
  const __filename = fileURLToPath(import.meta.url);
57
57
  const __dirname = dirname(__filename);
58
58
  const DATA_DIR = getAgendHome();
@@ -178,6 +178,7 @@ program
178
178
  // `agend --version`, prints this version and installs nothing.
179
179
  .enablePositionalOptions();
180
180
  registerBugReportCommand(program, pkgVersion);
181
+ registerBuildInfoCommand(program);
181
182
  function signalFleetReload() {
182
183
  const pidPath = join(DATA_DIR, "fleet.pid");
183
184
  try {
@@ -312,6 +313,23 @@ fleet
312
313
  }
313
314
  catch { /* fleet not running, fall through */ }
314
315
  }
316
+ // A service manager owns stop/start sequencing. Before this replacement claims any shared fleet state,
317
+ // an enabled Hub waits for the previous process and both old listener endpoints to close.
318
+ if (loadRawFleetConfig(FLEET_CONFIG_PATH).hub?.enabled === true) {
319
+ const [{ waitForHubServiceStart, HubServiceStartError }, { ht }] = await Promise.all([
320
+ import("./hub/service-start.js"), import("./hub/init/text.js"),
321
+ ]);
322
+ console.log(ht("service_drain_wait"));
323
+ try {
324
+ await waitForHubServiceStart(DATA_DIR);
325
+ }
326
+ catch (err) {
327
+ const reason = err instanceof HubServiceStartError ? err.reason : "config";
328
+ console.error(ht(`service_drain_${reason}`));
329
+ process.exitCode = 1;
330
+ return;
331
+ }
332
+ }
315
333
  // Claim the singleton before constructing FleetManager: its constructor and
316
334
  // startAll path touch shared tmux, sockets, state files and adapters.
317
335
  if (!claimFleetSingleton())
@@ -852,7 +870,9 @@ backend
852
870
  // tmux
853
871
  try {
854
872
  const { execSync } = await import("node:child_process");
855
- const ver = execSync("tmux -V", { stdio: "pipe" }).toString().trim();
873
+ const { tmuxBinary, tmuxEnvOption } = await import("./tmux-binary.js");
874
+ const { execFileSync: run } = await import("node:child_process");
875
+ const ver = run(tmuxBinary(), ["-V"], { stdio: "pipe", ...tmuxEnvOption() }).toString().trim();
856
876
  ok(`tmux${" ".repeat(16)} ${ver}`);
857
877
  }
858
878
  catch {
@@ -1428,7 +1448,7 @@ program
1428
1448
  const systemUnit = getSystemServicePath();
1429
1449
  const ownService = systemUnit ? null : getServicePath();
1430
1450
  const manager = systemUnit ? { kind: "systemd", unit: "agend", user: false, unitPath: systemUnit }
1431
- : ownService && detectPlatform() === "macos" ? { kind: "launchd", label: "com.agend.fleet", plistPath: ownService, domain: `gui/${process.getuid?.() ?? 501}` }
1451
+ : ownService && detectPlatform() === "macos" ? { kind: "launchd", label: "com.agend.fleet", plistPath: ownService, domain: launchdServiceDomain() }
1432
1452
  : ownService ? { kind: "systemd", unit: "com.agend.fleet", user: true, unitPath: ownService }
1433
1453
  : { kind: "detached" };
1434
1454
  // C6: a failure before the fleet runs the new install puts the previous package back too (taken before npm).
@@ -1564,8 +1584,7 @@ program
1564
1584
  // delete so a newer plan published during the slow bootout is left (#2376 / #2439).
1565
1585
  if (manager.kind === "launchd") {
1566
1586
  const { consumeCarriedOutPlan } = await import("./service-plan.js");
1567
- const uid = process.getuid?.() ?? 501;
1568
- consumeCarriedOutPlan(DATA_DIR, `gui/${uid}/com.agend.fleet`, planDeps());
1587
+ consumeCarriedOutPlan(DATA_DIR, `${launchdServiceDomain()}/com.agend.fleet`, planDeps());
1569
1588
  }
1570
1589
  // #1853: in a WSL terminal without the Windows desktop shortcuts, say once how to make them (never makes them).
1571
1590
  if (outcome.ok)
@@ -1889,7 +1908,20 @@ program
1889
1908
  } })() : null,
1890
1909
  isDefault: isDefaultAgendHome,
1891
1910
  });
1892
- const serviceVars = { label: "com.agend.fleet", execPath, path: process.env.PATH, ...service };
1911
+ const isHub = loadRawFleetConfig(FLEET_CONFIG_PATH).hub?.enabled === true;
1912
+ if (isHub && opts.activate !== false) {
1913
+ const [{ assertHubServiceInstallIdle }, { ht }] = await Promise.all([import("./hub/service-start.js"), import("./hub/init/text.js")]);
1914
+ try {
1915
+ assertHubServiceInstallIdle(service.workingDirectory);
1916
+ }
1917
+ catch {
1918
+ console.error(ht("service_install_idle"));
1919
+ process.exitCode = 1;
1920
+ return;
1921
+ }
1922
+ }
1923
+ const serviceVars = { label: "com.agend.fleet", execPath, path: process.env.PATH, ...service,
1924
+ ...(!existingPath && isHub ? { launchdSessionType: "Background" } : {}) };
1893
1925
  // #1450 C6: on launchd, writing a new plist without activating is a PLANNED activation — proven, recorded, and
1894
1926
  // left for `agend restart` (a reload there would itself start the job). See service-plan.ts.
1895
1927
  if (opts.activate === false && detectPlatform() === "macos") {
@@ -1905,9 +1937,10 @@ program
1905
1937
  }
1906
1938
  const uid = process.getuid?.() ?? 501;
1907
1939
  const plistPath = launchdPlistPath(serviceVars.label);
1940
+ const domain = serviceVars.launchdSessionType === "Background" ? `user/${uid}` : launchdServiceDomain(serviceVars.label);
1908
1941
  mkdirSync(dirname(plistPath), { recursive: true });
1909
1942
  const outcome = refreshLaunchdWithoutActivating({
1910
- label: serviceVars.label, target: `gui/${uid}/${serviceVars.label}`, plistPath, newPlist: renderLaunchdPlist(serviceVars),
1943
+ label: serviceVars.label, target: `${domain}/${serviceVars.label}`, plistPath, newPlist: renderLaunchdPlist(serviceVars),
1911
1944
  expected: expectation.expected, pkgDir: dirname(dirname(execPath)), agendHome: DATA_DIR,
1912
1945
  }, planDeps());
1913
1946
  if (!outcome.ok) {
@@ -1954,8 +1987,16 @@ program
1954
1987
  if (opts.activate !== false) {
1955
1988
  const pidPath = join(DATA_DIR, "fleet.pid");
1956
1989
  try {
1957
- activateService(svcPath, pidPath);
1958
- console.log(t("install.running"));
1990
+ if (isHub)
1991
+ activateService(svcPath, pidPath, { preservePidFile: true });
1992
+ else
1993
+ activateService(svcPath, pidPath);
1994
+ if (isHub) {
1995
+ const { ht } = await import("./hub/init/text.js");
1996
+ console.log(ht("service_ok"));
1997
+ }
1998
+ else
1999
+ console.log(t("install.running"));
1959
2000
  }
1960
2001
  catch (err) {
1961
2002
  console.error(t("install.start_failed", err.message));
@@ -2130,7 +2171,7 @@ program
2130
2171
  // A service file means the service manager owns this fleet. Falling back
2131
2172
  // to a detached process here creates a second fleet when the bus recovers.
2132
2173
  console.error("Failed to start the installed AgEnD service; refusing to start a detached duplicate.");
2133
- console.error(t("cli.service_retry", process.platform === "darwin" ? "launchctl print gui/$(id -u)/com.agend.fleet" : systemServicePath ? "systemctl status agend" : "systemctl --user status com.agend.fleet"));
2174
+ console.error(t("cli.service_retry", process.platform === "darwin" ? `launchctl print ${launchdServiceDomain()}/com.agend.fleet` : systemServicePath ? "systemctl status agend" : "systemctl --user status com.agend.fleet"));
2134
2175
  // #2356: a service file that cannot run here (never activated, no session for it) would otherwise leave no start.
2135
2176
  console.error(t("cli.service_direct_hint"));
2136
2177
  process.exitCode = 1;
@@ -2472,7 +2513,8 @@ program
2472
2513
  if (plat === "macos") {
2473
2514
  const uid = process.getuid?.() ?? 501;
2474
2515
  const label = "com.agend.fleet";
2475
- const target = `gui/${uid}/${label}`;
2516
+ const domain = launchdServiceDomain(label, { uid });
2517
+ const target = `${domain}/${label}`;
2476
2518
  const deps = planDeps();
2477
2519
  const printed = deps.run("launchctl", ["print", target]);
2478
2520
  if (printed.status === 0) {
@@ -2494,7 +2536,7 @@ program
2494
2536
  if (await handOffLaunchdActivation("restart"))
2495
2537
  return;
2496
2538
  const { activateService } = await import("./service-activation.js");
2497
- const outcome = activateService({ kind: "launchd", label, plistPath: plan.plistPath, domain: `gui/${uid}` }, { bin: expectation.expected.entry, entry: expectation.expected.entry, node: expectation.expected.node, dir: pkgDir }, {
2539
+ const outcome = activateService({ kind: "launchd", label, plistPath: plan.plistPath, domain }, { bin: expectation.expected.entry, entry: expectation.expected.entry, node: expectation.expected.node, dir: pkgDir }, {
2498
2540
  ...deps,
2499
2541
  readFirstLine: path => deps.readFile(path)?.split("\n", 1)[0] ?? null,
2500
2542
  isExecutable: path => { try {
@@ -2523,7 +2565,12 @@ program
2523
2565
  if (expectation.ok && refuses(guard.guardLaunchd(captureRun, target, plistPath, deps.readFile, expectation.expected, guardDeps)))
2524
2566
  return;
2525
2567
  if (run(`launchctl kickstart -k ${target}`)) {
2526
- console.log("Service restarted.");
2568
+ if (loadRawFleetConfig(FLEET_CONFIG_PATH).hub?.enabled === true) {
2569
+ const { ht } = await import("./hub/init/text.js");
2570
+ console.log(ht("service_restart_requested"));
2571
+ }
2572
+ else
2573
+ console.log("Service restarted.");
2527
2574
  return;
2528
2575
  }
2529
2576
  console.error(` ✗ launchctl kickstart -k ${target} failed.`);
@@ -2773,6 +2820,19 @@ program
2773
2820
  const { runQuickstart } = await import("./quickstart.js");
2774
2821
  await runQuickstart();
2775
2822
  });
2823
+ // #3095 Hub (experimental, off by default): `agend hub init` sets up a team Hub on this machine. Nothing Hub-related
2824
+ // loads unless this command runs.
2825
+ const hub = program.command("hub").description("AgEnD Hub (experimental): a team Hub where colleagues sign in with the directory");
2826
+ hub.command("handoff")
2827
+ .description("Show this Hub's installation record, pairing steps and stop/uninstall guidance")
2828
+ .action(async () => { const { runHubHandoffCommand } = await import("./hub/init/handoff.js"); await runHubHandoffCommand(); });
2829
+ hub
2830
+ .command("init")
2831
+ .description("Set up this machine as a team Hub: addresses, browser certificate, directory (LDAPS), administrator, service")
2832
+ .action(async () => {
2833
+ const { runHubInitCommand } = await import("./hub/init/cli.js");
2834
+ await runHubInitCommand();
2835
+ });
2776
2836
  program
2777
2837
  .command("init")
2778
2838
  .description("Interactive advanced wizard (setup-wizard); for first-run use `agend quickstart` or `agend setup`")
@@ -3355,7 +3415,10 @@ async function listInstanceNames(config) {
3355
3415
  }
3356
3416
  async function lsAction(opts) {
3357
3417
  const yaml = (await import("js-yaml")).default;
3358
- const config = yaml.load(readFileSync(FLEET_CONFIG_PATH, "utf-8"));
3418
+ const config = (yaml.load(readFileSync(FLEET_CONFIG_PATH, "utf-8")) ?? {});
3419
+ // A fleet.yaml without an `instances:` section is an empty fleet (as `agend doctor` and the fleet read it), not a crash.
3420
+ if (!config.instances || typeof config.instances !== "object")
3421
+ config.instances = {};
3359
3422
  const names = Object.keys(config.instances);
3360
3423
  // --names-only feeds shell completion, so it must return before any tmux or
3361
3424
  // status work (a tab press should not wait on the fleet) and must print
@@ -3413,6 +3476,8 @@ async function lsAction(opts) {
3413
3476
  }
3414
3477
  if (allNames.length === 0) {
3415
3478
  console.log("No instances configured.");
3479
+ // The same hint `agend doctor` gives for this file.
3480
+ console.log("Hint: no general_topic instance — there is no general dispatcher to receive un-topic'd messages. Run `agend doctor`.");
3416
3481
  await printResources();
3417
3482
  return;
3418
3483
  }
@@ -3441,7 +3506,17 @@ async function lsAction(opts) {
3441
3506
  const singleSource = channelTypes.size === 1
3442
3507
  ? (channelTypes.has("telegram") ? "TG" : channelTypes.has("discord") ? "DC" : "—")
3443
3508
  : null;
3509
+ // A fleet instance's source is the adapter the fleet routes it by: its channel_id, else the first connection
3510
+ // (FleetManager.getInstanceAdapterId) — never guessed from its topic id, so `ls` and routing cannot disagree.
3511
+ const channelList = config.channels?.length ? config.channels : config.channel ? [config.channel] : [];
3512
+ const typeByAdapter = new Map(channelList.map((ch) => [ch.id ?? ch.type, ch.type]));
3513
+ const firstAdapter = channelList[0] ? (channelList[0].id ?? channelList[0].type) : undefined;
3514
+ const sourceOfType = (type) => (type === "telegram" ? "TG" : type === "discord" ? "DC" : "—");
3515
+ const { isNativeExecInstance } = await import("./native-instance-registry.js");
3444
3516
  const getSource = (name, inst) => {
3517
+ // A Windows exec agent has no chat binding (getInstanceAdapterId gives none): no source, in any fleet. A pane keeps its own.
3518
+ if (inst && isNativeExecInstance(inst))
3519
+ return "—";
3445
3520
  if (singleSource)
3446
3521
  return singleSource;
3447
3522
  if (classicNames.has(name)) {
@@ -3449,18 +3524,14 @@ async function lsAction(opts) {
3449
3524
  const matchedChId = classicChannelIdByName.get(name) ?? "";
3450
3525
  return matchedChId.startsWith("-") || matchedChId.length < 17 ? "TG" : "DC";
3451
3526
  }
3452
- const topicId = String(inst?.topic_id ?? "");
3453
- if (topicId.length >= 17)
3454
- return "DC";
3455
- if (topicId.length > 0 && topicId.length < 17)
3456
- return "TG";
3457
- return "—";
3527
+ const bound = typeof inst?.channel_id === "string" && inst.channel_id ? inst.channel_id : firstAdapter;
3528
+ return sourceOfType(bound === undefined ? undefined : typeByAdapter.get(bound));
3458
3529
  };
3459
3530
  // Row collection runs concurrently (see ls-rows.ts): the per-instance
3460
3531
  // tmux captures overlap instead of stacking their 2s bounds serially.
3461
3532
  const { collectLsRows, capturePaneAsync, formatTimeSince, lsStatusIcon, lsStatusLabel, displayWidth, computeLsNameWidth, padToDisplayWidth } = await import("./ls-rows.js");
3462
- const { getTmuxSocketName } = await import("./paths.js");
3463
- const socketName = getTmuxSocketName();
3533
+ const { tmuxSocket } = await import("./tmux-binary.js");
3534
+ const socketName = tmuxSocket();
3464
3535
  const rows = await collectLsRows(allNames.map(name => {
3465
3536
  const isClassic = classicNames.has(name);
3466
3537
  const inst = config.instances[name];
@@ -3858,6 +3929,32 @@ program
3858
3929
  console.log(`\n${classIcon} Fleet: ${classification}`);
3859
3930
  process.exit(exitCode);
3860
3931
  });
3932
+ program
3933
+ .command("tmux")
3934
+ .description("Run a tmux command on this fleet's own tmux server — its tmux binary and socket — e.g. `agend tmux ls`, `agend tmux capture-pane -p -t <window>`.")
3935
+ .argument("[args...]", "tmux's own command and arguments")
3936
+ .allowUnknownOption(true)
3937
+ .helpOption(false)
3938
+ .action(async (rest = []) => {
3939
+ // Everything after the command goes to tmux as typed (its own options and a `--` included: commander keeps them in
3940
+ // order, with allowUnknownOption), with this fleet's -L socket (and, with AgEnD's bundled tmux, its binary and -f
3941
+ // config) in front: M-2457 §5.
3942
+ let bin;
3943
+ try {
3944
+ bin = tmuxBin();
3945
+ }
3946
+ catch (e) {
3947
+ console.error(e.message);
3948
+ process.exit(1);
3949
+ }
3950
+ const { spawnSync } = await import("node:child_process");
3951
+ const r = spawnSync(bin, tmuxArgs(rest), { stdio: "inherit", ...tmuxEnvOpt() });
3952
+ if (r.error) {
3953
+ console.error(`tmux could not run: ${r.error.message}`);
3954
+ process.exit(1);
3955
+ }
3956
+ process.exit(r.status ?? 1);
3957
+ });
3861
3958
  program
3862
3959
  .command("attach")
3863
3960
  .description("Attach to an instance's tmux window. Accepts display name, instance name, row number from ls, or a substring. No argument: interactive picker.")
@@ -3880,10 +3977,11 @@ program
3880
3977
  }
3881
3978
  }
3882
3979
  catch { /* ignore */ }
3883
- const session = "agend";
3980
+ // The fleet's session (AGEND_TMUX_SESSION, else per AGEND_HOME), not a hardcoded "agend" (M-2457 §5).
3981
+ const session = getTmuxSession();
3884
3982
  // Verify tmux session exists
3885
3983
  try {
3886
- execFileSync("tmux", tmuxArgs(["has-session", "-t", session]), { stdio: "pipe" });
3984
+ execFileSync(tmuxBin(), tmuxArgs(["has-session", "-t", session]), { stdio: "pipe" });
3887
3985
  }
3888
3986
  catch {
3889
3987
  console.error(`tmux session "${session}" not found. Is the fleet running?`);
@@ -3896,7 +3994,7 @@ program
3896
3994
  let selected = false;
3897
3995
  for (const t of targets) {
3898
3996
  try {
3899
- execFileSync("tmux", tmuxArgs(["select-window", "-t", t]), { stdio: "pipe" });
3997
+ execFileSync(tmuxBin(), tmuxArgs(["select-window", "-t", t]), { stdio: "pipe" });
3900
3998
  selected = true;
3901
3999
  break;
3902
4000
  }
@@ -3905,13 +4003,13 @@ program
3905
4003
  // Fallback: search tmux windows for a partial name match (handles CJK truncation)
3906
4004
  if (!selected) {
3907
4005
  try {
3908
- const winList = execFileSync("tmux", tmuxArgs(["list-windows", "-t", session, "-F", "#{window_id} #{window_name}"]), { stdio: "pipe" }).toString().trim();
4006
+ const winList = execFileSync(tmuxBin(), tmuxArgs(["list-windows", "-t", session, "-F", "#{window_id} #{window_name}"]), { stdio: "pipe" }).toString().trim();
3909
4007
  for (const line of winList.split("\n")) {
3910
4008
  const [wid, ...rest] = line.split(" ");
3911
4009
  const wname = rest.join(" ").replace(/-?\*?$/, ""); // strip trailing -/* markers
3912
4010
  if (wname === name || name.startsWith(wname) || wname.startsWith(name)) {
3913
4011
  try {
3914
- execFileSync("tmux", tmuxArgs(["select-window", "-t", `${session}:${wid}`]), { stdio: "pipe" });
4012
+ execFileSync(tmuxBin(), tmuxArgs(["select-window", "-t", `${session}:${wid}`]), { stdio: "pipe" });
3915
4013
  selected = true;
3916
4014
  break;
3917
4015
  }
@@ -3925,11 +4023,14 @@ program
3925
4023
  console.error(`Cannot find tmux window for "${name}". The instance may need to be restarted.`);
3926
4024
  process.exit(1);
3927
4025
  }
3928
- // Attach or switch-client depending on whether we're already in tmux
3929
- if (process.env.TMUX) {
4026
+ // Attach or switch-client depending on whether we're already in tmux — in THIS fleet's tmux: with the bundled tmux,
4027
+ // $TMUX naming another server (the user's own, on its own socket) is not "inside"; that is an ordinary attach.
4028
+ const { bundledTmuxEnabled, insideFleetTmux, tmuxSocket } = await import("./tmux-binary.js");
4029
+ const insideOurs = insideFleetTmux(process.env.TMUX, bundledTmuxEnabled(), tmuxSocket());
4030
+ if (insideOurs) {
3930
4031
  // Already inside tmux — switch client
3931
4032
  try {
3932
- execFileSync("tmux", tmuxArgs(["switch-client", "-t", session]), { stdio: "inherit" });
4033
+ execFileSync(tmuxBin(), tmuxArgs(["switch-client", "-t", session]), { stdio: "inherit", ...tmuxEnvOpt() });
3933
4034
  }
3934
4035
  catch {
3935
4036
  console.error("Failed to switch tmux client.");
@@ -3939,7 +4040,7 @@ program
3939
4040
  else {
3940
4041
  // Outside tmux — attach
3941
4042
  try {
3942
- execFileSync("tmux", tmuxArgs(["attach-session", "-t", session]), { stdio: "inherit" });
4043
+ execFileSync(tmuxBin(), tmuxArgs(["attach-session", "-t", session]), { stdio: "inherit", ...tmuxEnvOpt() });
3943
4044
  }
3944
4045
  catch {
3945
4046
  console.error("Failed to attach to tmux session.");