@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
@@ -1,80 +1,3 @@
1
- // #1770: the time a chat line shows, read in the fleet's zone (the one chat-logs, fleet.log and the #1586 DMs use) —
2
- // "17:38" today, "Yesterday 17:38", "10/11 17:38" earlier this year, "2025/10/11 17:38" before. The hour and minute keep
3
- // the browser's own format (12- or 24-hour), as they always had. No imports: the thread, the preview panel and the
4
- // tests read it as it is.
5
-
6
- const cache = new Map();
7
- /** One formatter per (kind, zone, locale): a thread may label 500 lines on every render. */
8
- function fmt(kind, tz, locale) {
9
- const key = `${kind}|${tz || ""}|${locale || ""}`;
10
- let f = cache.get(key);
11
- if (!f) {
12
- const o = kind === "hm" ? { hour: "2-digit", minute: "2-digit" }
13
- : kind === "ymd" ? { year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hourCycle: "h23" }
14
- : { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
15
- f = new Intl.DateTimeFormat(kind === "ymd" ? "en-US" : (locale || []), { ...o, timeZone: tz || undefined });
16
- cache.set(key, f);
17
- }
18
- return f;
19
- }
20
- /** `tz` when this browser knows it, else undefined (the browser's own zone): a label must still be drawn. */
21
- function known(tz) {
22
- if (!tz) return undefined;
23
- try { fmt("ymd", tz); return tz; } catch { return undefined; }
24
- }
25
- /** The fleet's zone, as the page was served it (<body data-fleet-tz>); undefined when absent or unknown here. */
26
- export function fleetTz() { return known(globalThis.document?.body?.dataset?.fleetTz); }
27
-
28
- const toMs = (ts) => (typeof ts === "number" ? ts : Date.parse(String(ts || "")));
29
- function wall(ms, tz) {
30
- const p = {};
31
- for (const x of fmt("ymd", tz).formatToParts(ms)) p[x.type] = Number(x.value);
32
- return p;
33
- }
34
-
35
- /**
36
- * The label for `ts` (ISO string or epoch ms), "" when it cannot be read. opts: tz (default the fleet's), now (epoch ms),
37
- * yesterday(hm) → the word for "yesterday" around hm (default: hm alone), locale (tests).
38
- */
39
- export function chatTime(ts, opts = {}) {
40
- const ms = toMs(ts);
41
- if (!Number.isFinite(ms)) return "";
42
- const tz = "tz" in opts ? known(opts.tz) : fleetTz();
43
- const hm = fmt("hm", tz, opts.locale).format(ms);
44
- const d = wall(ms, tz), today = wall(opts.now ?? Date.now(), tz);
45
- if (d.year === today.year && d.month === today.month && d.day === today.day) return hm;
46
- const y = new Date(Date.UTC(today.year, today.month - 1, today.day - 1));
47
- if (d.year === y.getUTCFullYear() && d.month === y.getUTCMonth() + 1 && d.day === y.getUTCDate()) return opts.yesterday ? opts.yesterday(hm) : hm;
48
- return d.year === today.year ? `${d.month}/${d.day} ${hm}` : `${d.year}/${d.month}/${d.day} ${hm}`;
49
- }
50
-
51
- /** The full date, time and zone of `ts`, for a tooltip; "" when it cannot be read. */
52
- export function chatTimeFull(ts, opts = {}) {
53
- const ms = toMs(ts);
54
- if (!Number.isFinite(ms)) return "";
55
- return fmt("full", "tz" in opts ? known(opts.tz) : fleetTz(), opts.locale).format(ms);
56
- }
57
-
58
- /** Milliseconds until the fleet's next midnight (when "today" labels change), at most an hour (a DST day self-corrects). */
59
- export function msToNextDay(now = Date.now(), tz = fleetTz()) {
60
- const w = wall(now, known(tz));
61
- const into = ((w.hour * 60 + w.minute) * 60 + w.second) * 1000 + (now % 1000);
62
- return Math.max(1000, Math.min(3_600_000, 86_400_000 - into + 1000));
63
- }
64
-
65
- /**
66
- * Call `fn` when the fleet's day may have changed — at its next midnight, then again for each one after (an hour at
67
- * most between looks, so a DST day or a late timer corrects itself). Each subscriber holds its own timer, and no
68
- * module-wide state: the unsubscribe it returns leaves nothing armed.
69
- */
70
- export function onDayChange(fn) {
71
- let timer = null, live = true;
72
- const arm = () => {
73
- timer = setTimeout(() => {
74
- timer = null;
75
- try { fn(); } finally { if (live) arm(); }
76
- }, msToNextDay());
77
- };
78
- arm();
79
- return () => { live = false; if (timer !== null) { clearTimeout(timer); timer = null; } };
80
- }
1
+ // Hub PR A (#3226): this module moved to /assets/chat-time.js (src/ui/shared/), shared by the fleet and the Hub. A tab opened
2
+ // before the move still imports it from here: the same module (one instance), re-exported.
3
+ export * from "/assets/chat-time.js";
@@ -9,7 +9,7 @@
9
9
  // the agent (#1369 review).
10
10
  import { t, onLang } from "/assets/app-i18n.js";
11
11
  import { shellStore, closeDrawer } from "/assets/app-shell.js";
12
- import "./chat-strings.js";
12
+ import "/assets/chat-strings.js";
13
13
 
14
14
  const TOUR_KEY = "agend_tour_done";
15
15
  const byId = (id) => document.getElementById(id);
@@ -0,0 +1,54 @@
1
+ import { html } from "/assets/app-html.js";
2
+ import { register, t } from "/assets/app-i18n.js";
3
+ import { identityText } from "./account-identity.js";
4
+
5
+ /**
6
+ * Claude accounts on a paired Windows computer ("credential profiles"). AgEnD only ever shows and sends a profile NAME; the sign-in itself
7
+ * stays on that computer, and a Runtime reports nothing but each name and whether it is signed in. No path, e-mail or token is read here.
8
+ */
9
+ register("claudeAccount", {
10
+ en: { label:"Claude account", none:"This computer's default sign-in", default:"default", signedOut:"not signed in", unchecked:"not checked", notReported:"not reported",
11
+ old:"Update the Runtime on that computer to choose a Claude account for this agent.",
12
+ empty:"No Claude accounts reported yet. On that computer run agend-runtime login claude-code NAME, then choose Detect again in that computer's CLI diagnostics (Settings → Runtime).",
13
+ hint:"The account is chosen by name; its sign-in stays on that computer. A name that does not exist or is not signed in there is refused, never replaced by another account.",
14
+ changeNote:"Changing the account starts a new conversation." },
15
+ "zh-TW": { label:"Claude 帳號", none:"這台電腦的預設登入", default:"預設", signedOut:"尚未登入", unchecked:"未確認", notReported:"未回報",
16
+ old:"請更新那台電腦上的 Runtime,才能為這個 Agent 選擇 Claude 帳號。",
17
+ empty:"尚未回報任何 Claude 帳號。請在那台電腦執行 agend-runtime login claude-code 名稱,再到設定 → Runtime,在該電腦的「CLI 診斷」按「重新偵測」。",
18
+ hint:"帳號以名稱選擇,登入資料只保留在那台電腦。不存在或尚未登入的名稱會被拒絕,不會改用其他帳號。",
19
+ changeNote:"更換帳號會開始新的對話。" },
20
+ });
21
+ export const accountText = (key, ...values) => t(`claudeAccount.${key}`, ...values);
22
+
23
+ /** What a computer reports: whether its Runtime can choose an account, each account's name and signed-in yes/no, and its default name. */
24
+ export function credentialProfileView(machine) {
25
+ const capable = machine?.runtimeInfo?.capabilities?.includes("credential-profiles") === true;
26
+ const report = machine?.inventory?.credentialProfiles;
27
+ const profiles = Array.isArray(report?.profiles) ? report.profiles.filter(row => row && typeof row.name === "string") : [];
28
+ // The default sign-in's own account (the computer's Claude Code, as its last detection saw it), for the "default sign-in" choice.
29
+ const claude = Array.isArray(machine?.inventory?.clis) ? machine.inventory.clis.find(cli => cli?.id === "claude-code") : undefined;
30
+ const defaultName = typeof report?.default === "string" ? report.default : "";
31
+ return { capable, profiles, defaultName, machineIdentity: identityText(profiles.find(row => row.name === defaultName)?.identity ?? claude?.identity) };
32
+ }
33
+ export const credentialProfileState = loggedIn => loggedIn === true ? "signedIn" : loggedIn === false ? "signedOut" : "unchecked";
34
+ /** The choice exists only for Claude Code on a paired computer. */
35
+ export const offersClaudeAccount = (machine, backend) => !!machine && backend === "claude-code";
36
+
37
+ /**
38
+ * `value` is the chosen name ("" = the computer's own sign-in). A signed-out account is listed but cannot be chosen; one that is
39
+ * "not checked" can, because the Runtime asks the CLI again before anything starts and refuses if it is not signed in.
40
+ */
41
+ export function ClaudeAccountSelect({ machine, backend, value, onChange, id, disabled = false, changeNote = false }) {
42
+ if (!offersClaudeAccount(machine, backend)) return null;
43
+ const view = credentialProfileView(machine), known = view.profiles.some(row => row.name === value);
44
+ const locked = disabled || !view.capable;
45
+ return html`<div class="claude-account-field"><label class="field"><span>${accountText("label")}</span>
46
+ <select id=${id} value=${value || ""} disabled=${locked} onChange=${event => onChange(event.target.value)}>
47
+ <option value="">${accountText("none")}${view.machineIdentity ? ` · ${view.machineIdentity}` : ""}</option>
48
+ ${view.profiles.map(row => html`<option key=${row.name} value=${row.name} disabled=${row.loggedIn === false}>${row.name}${row.identity ? ` · ${identityText(row.identity)}` : ""}${row.loggedIn === false ? ` · ${accountText("signedOut")}` : row.loggedIn === null ? ` · ${accountText("unchecked")}` : ""}${row.name === view.defaultName ? ` · ${accountText("default")}` : ""}</option>`)}
49
+ ${value && !known ? html`<option key=${value} value=${value}>${value} · ${accountText("notReported")}</option>` : null}
50
+ </select></label>
51
+ ${!view.capable ? html`<p class="note claude-account-old" role="status">${accountText("old")}</p>`
52
+ : !view.profiles.length ? html`<p class="note claude-account-empty">${accountText("empty")}</p>` : html`<p class="note">${accountText("hint")}</p>`}
53
+ ${changeNote ? html`<p class="note claude-account-change">${accountText("changeNote")}</p>` : null}</div>`;
54
+ }
@@ -0,0 +1,30 @@
1
+ // Types for fleet-office-dialogue.js (#2861): the Office's dialogue box — the page's module, read by tests.
2
+ export const DLG: { TEXT_MAX: number; FRESH_MS: number; HOLD_MS: number; FADE_MS: number; SLIDE_MS: number; WAIT_MS: number; CPS: number; MAX: number };
3
+ export interface DialogPerson { name: string; account: string | null }
4
+ export interface Conversation { id: number; instance: string; person: DialogPerson | null; text: string | null; reply: string | null; heardAt: number; answeredAt: number | null; shownAt: number | null; replyShownAt: number | null }
5
+ export interface DialogLayout {
6
+ narrow: boolean; box: { x: number; y: number; w: number; h: number };
7
+ portrait: { h: number; foot: number; maxW: number; left: number; right: number };
8
+ pad: number; font: number; lineH: number; nameH: number; statusH: number; face: number; text: { x: number; y: number; w: number; lines: number };
9
+ }
10
+ export interface DialogStage { phase: "heard" | "working" | "answered"; speaker: "left" | "right"; slide: number; alpha: number; typedAt: number; done: boolean }
11
+ export function clip(text: unknown, max?: number): string;
12
+ export function createDialogue(): {
13
+ heard(instance: string, person: DialogPerson | null, text: string | null, t: number): Conversation | null;
14
+ answered(instance: string, text: string | null, t: number): Conversation | null;
15
+ sweep(t: number, still?: boolean): boolean; list(): Conversation[]; size(): number; rev(): number; clear(): void;
16
+ };
17
+ export function pickFront(list: Conversation[], shown: (name: string) => boolean, asleep: (name: string) => boolean): { front: Conversation | null; more: number };
18
+ export function messageOf(m: unknown, serverNow: number): ({ kind: "heard"; instance: string; person: DialogPerson; text: string; files: boolean } | { kind: "answered"; instance: string; text: string; files: boolean }) | null;
19
+ export function talkOf(d: unknown): Array<{ instance: string; kind: "heard" | "answered"; at: number }>;
20
+ export function portraitState(state: string): "idle" | "working" | "needs";
21
+ export function portraitSrc(pack: unknown, who: { agent?: string; state?: string; account?: string | null } | null): string | null;
22
+ export function boxLayout(W: number, H: number): DialogLayout;
23
+ export function fitBox(L: DialogLayout, n: number, status: boolean): DialogLayout;
24
+ export function wrap(measure: (s: string) => number, text: string, maxW: number, max: number): string[];
25
+ export function typed(lines: string[], n: number): string[];
26
+ export function stageOf(c: Conversation, t: number, working: boolean, still: boolean): DialogStage;
27
+ export function boxColours(dialogBox: unknown, pal: Record<string, string>): { background: string; border: string; text: string; name: string; sub: string };
28
+ export function drawBox(ctx: unknown, v: unknown, t: number, env: unknown): boolean;
29
+ export function onBox(L: DialogLayout | null, stage: DialogStage | null, x: number, y: number): boolean;
30
+ export function createFaces(load?: (src: string) => unknown): (src: string, done?: () => void) => unknown;
@@ -0,0 +1,382 @@
1
+ // #2861 (design: hxhsandy): the Office's dialogue box — a visual-novel box at the foot of the stage when a person talks
2
+ // to an agent shown there. docs/design/office-dialogue-2861.md.
3
+ //
4
+ // - Heard: a person's message (the stream's `message`, role "user") → the box slides up: their portrait on the left,
5
+ // their name, their words (the first TEXT_MAX characters, typed out).
6
+ // - Working: while the agent works, its portrait on the right and a status line (its own office_set line, else
7
+ // "Working…").
8
+ // - Answered: its reply (role "agent") replaces the line (TEXT_MAX), the speaker is the agent; the box fades HOLD_MS
9
+ // later. Concurrent conversations queue, newest first; the box shows the first one it may and "+N" for the rest.
10
+ // - On a share link (`share`: the host's `talk`, never any text): a faceless visitor, "Received a message", "Replied".
11
+ // - Only news: a message stamped within FRESH_MS of the server's clock (a replay on reconnect, a poll's catch-up, is not).
12
+ // - Drawn on the Office's canvas, in the stage's CSS px, after the scene (it never pans or zooms with it), so it needs no
13
+ // CSS rule (a tab opened before an upgrade keeps its old app.css: the box is still right).
14
+ // - Reduced motion: no slide, no typing, no fade.
15
+ // Off unless the Office bar's Dialogue box is ticked (per browser): then nothing here runs at all.
16
+ import { own, PORTRAIT_STATES } from "./fleet-office-pack.js";
17
+
18
+ export const DLG = {
19
+ TEXT_MAX: 120,
20
+ /** A message older than this on the server's clock is not news (a replay, a catch-up). */
21
+ FRESH_MS: 90_000,
22
+ /** How long an answer stays before it fades. */
23
+ HOLD_MS: 6000,
24
+ FADE_MS: 500,
25
+ SLIDE_MS: 220,
26
+ /** A conversation with no answer goes after this. */
27
+ WAIT_MS: 180_000,
28
+ /** Typed out at this many characters a second. */
29
+ CPS: 40,
30
+ /** At most this many conversations are kept (the oldest go). */
31
+ MAX: 24,
32
+ };
33
+
34
+ const GRAPHEMES = typeof Intl !== "undefined" && Intl.Segmenter ? new Intl.Segmenter(undefined, { granularity: "grapheme" }) : null;
35
+ const chars = (s) => (GRAPHEMES ? [...GRAPHEMES.segment(s)].map((x) => x.segment) : [...s]);
36
+
37
+ /**
38
+ * What the box says of a message: one line of plain words — whitespace folded, a code block as "…", the markdown marks
39
+ * at a line's start (#, >, *, -) and emphasis marks dropped — cut to `max` characters with "…".
40
+ */
41
+ export function clip(text, max = DLG.TEXT_MAX) {
42
+ let s = String(text ?? "").replace(/```[\s\S]*?(```|$)/g, " … ");
43
+ s = s.split("\n").map((l) => l.replace(/^\s*(?:#{1,6}\s+|>\s?|[*+-]\s+|\d+\.\s+)/, "")).join(" ");
44
+ s = s.replace(/(\*\*|__|~~|`)/g, "").replace(/\s+/g, " ").trim();
45
+ const c = chars(s);
46
+ return c.length > max ? `${c.slice(0, max - 1).join("").trimEnd()}…` : s;
47
+ }
48
+
49
+ /**
50
+ * The conversations: `heard(instance, person, text, t)` a person's message (`person` { name, account } — null on a
51
+ * share: no one named); `answered(instance, text, t)` the agent's reply (none heard: nothing); `sweep(t)` drops what is
52
+ * over; `list()` newest first. `t` is the page's monotonic clock. Each change bumps `rev()`.
53
+ */
54
+ export function createDialogue() {
55
+ const convs = new Map();
56
+ let seq = 0, rev = 0;
57
+ return {
58
+ heard(instance, person, text, t) {
59
+ if (typeof instance !== "string" || !instance) return null;
60
+ convs.delete(instance);
61
+ const c = { id: ++seq, instance, person: person || null, text: text == null ? null : clip(text), reply: null, heardAt: t, answeredAt: null, shownAt: null, replyShownAt: null };
62
+ convs.set(instance, c);
63
+ while (convs.size > DLG.MAX) convs.delete(convs.keys().next().value);
64
+ rev++;
65
+ return c;
66
+ },
67
+ answered(instance, text, t) {
68
+ const c = convs.get(instance);
69
+ if (!c || c.answeredAt !== null) return null;
70
+ c.reply = text == null ? null : clip(text);
71
+ c.answeredAt = t;
72
+ rev++;
73
+ return c;
74
+ },
75
+ /**
76
+ * Drop what is over; whether anything went. An answer shown: HOLD_MS (and its fade) from when the box first showed
77
+ * it (stageOf's replyShownAt) — never from when it came, so one queued behind another is seen in full when its turn
78
+ * comes; an answer never shown (its agent not drawn here, or waiting in the queue): WAIT_MS after it came. A
79
+ * conversation never answered: WAIT_MS after it was heard.
80
+ */
81
+ sweep(t, still = false) {
82
+ let gone = false;
83
+ for (const [k, c] of convs) {
84
+ const over = c.answeredAt === null ? t >= c.heardAt + DLG.WAIT_MS
85
+ : c.replyShownAt !== null ? t >= c.replyShownAt + DLG.HOLD_MS + (still ? 0 : DLG.FADE_MS) : t >= c.answeredAt + DLG.WAIT_MS;
86
+ if (over) { convs.delete(k); gone = true; }
87
+ }
88
+ if (gone) rev++;
89
+ return gone;
90
+ },
91
+ list: () => [...convs.values()].sort((a, b) => b.heardAt - a.heardAt || b.id - a.id),
92
+ size: () => convs.size,
93
+ rev: () => rev,
94
+ clear() { if (convs.size) { convs.clear(); rev++; } },
95
+ };
96
+ }
97
+
98
+ /**
99
+ * The conversation the box shows and how many more wait: the newest whose agent is shown here (`shown(name)`) and
100
+ * awake (`asleep(name)` false: paused, stopped, or in bed at bedtime — it waits until they wake to work, or expires);
101
+ * `more`: the others shown here.
102
+ */
103
+ export function pickFront(list, shown, asleep) {
104
+ const here = list.filter((c) => shown(c.instance));
105
+ const front = here.find((c) => !asleep(c.instance)) || null;
106
+ return { front, more: front ? here.length - 1 : 0 };
107
+ }
108
+
109
+ /**
110
+ * A stream `message` as the box takes it: { kind: "heard", instance, person, text } (a person's: role "user") or
111
+ * { kind: "answered", instance, text } (the agent's reply: role "agent"), when it is news — stamped within FRESH_MS of
112
+ * the server's time `serverNow`; else null. A status line is never one.
113
+ */
114
+ export function messageOf(m, serverNow) {
115
+ if (!m || typeof m !== "object" || typeof m.instance !== "string" || !m.instance) return null;
116
+ if (m.role !== "user" && m.role !== "agent") return null;
117
+ const at = typeof m.ts === "string" ? Date.parse(m.ts) : NaN;
118
+ if (!Number.isFinite(at) || Math.abs(serverNow - at) > DLG.FRESH_MS) return null;
119
+ const files = Array.isArray(m.attachments) && m.attachments.length > 0;
120
+ const said = m.click && typeof m.click.label === "string" ? m.click.label : typeof m.text === "string" ? m.text : "";
121
+ const text = said.trim() ? said : files ? "" : null;
122
+ if (text === null) return null;
123
+ if (m.role === "agent") return { kind: "answered", instance: m.instance, text, files: files && !said.trim() };
124
+ const name = typeof m.sender === "string" && m.sender.trim() ? m.sender.trim() : "";
125
+ const account = typeof m.from === "string" && /^[^\s:]{1,64}:[^\s:]{1,128}$/.test(m.from) ? m.from : null;
126
+ return { kind: "heard", instance: m.instance, person: { name, account }, text, files: files && !said.trim() };
127
+ }
128
+
129
+ /** A share's `talk` (the host's: { now, items: [{ instance, kind, at }] }), checked: the items that are news. */
130
+ export function talkOf(d) {
131
+ if (!d || typeof d !== "object" || typeof d.now !== "number" || !Array.isArray(d.items)) return [];
132
+ return d.items.filter((x) => x && typeof x === "object" && typeof x.instance === "string" && x.instance && (x.kind === "heard" || x.kind === "answered")
133
+ && typeof x.at === "number" && Number.isFinite(x.at) && Math.abs(d.now - x.at) <= DLG.FRESH_MS).sort((a, b) => a.at - b.at);
134
+ }
135
+
136
+ /** The expression a portrait shows for a state: its own, else idle, else any it has. */
137
+ const expressionOf = (p, state) => (p ? own(p, state) || own(p, "idle") || PORTRAIT_STATES.map((k) => own(p, k)).find(Boolean) || null : null);
138
+ /** A state's expression: working, a call (needs, crashed, looks stuck), else idle. */
139
+ export const portraitState = (state) => (state === "working" ? "working" : state === "needs" || state === "crashed" || state === "stuck" ? "needs" : "idle");
140
+ /**
141
+ * The pack's portrait file for an agent ({ agent: name, state }) or a person ({ account }), or null: an agent's
142
+ * byInstance, else the pack's default; a person's byUser (the default is the agents').
143
+ */
144
+ export function portraitSrc(pack, who) {
145
+ const p = pack && pack.portraits;
146
+ if (!p || !who) return null;
147
+ if (who.agent) return expressionOf(own(p.byInstance, who.agent) || p.default || null, portraitState(who.state));
148
+ if (who.account) return expressionOf(own(p.byUser, who.account), "idle");
149
+ return null;
150
+ }
151
+
152
+ /**
153
+ * Where everything goes on a stage `W`×`H` (CSS px): the box (centred, at most 960 wide, at the foot), the portraits'
154
+ * height and their two feet (left: the person, right: the agent — standing behind the box, VN style), the text's
155
+ * place and lines, the name plate.
156
+ */
157
+ export function boxLayout(W, H) {
158
+ const narrow = W < 560;
159
+ const m = narrow ? 8 : 16, w = Math.max(160, Math.min(960, W - 2 * m)), h = Math.round(Math.min(narrow ? 120 : 132, Math.max(narrow ? 100 : 96, H * (narrow ? 0.24 : 0.2))));
160
+ const x = Math.round((W - w) / 2), y = Math.round(H - m - h);
161
+ const ph = Math.round(Math.max(h * 1.4, Math.min(narrow ? 220 : 340, H * 0.42))), foot = Math.round(y + h * 0.55);
162
+ const pad = narrow ? 12 : 18, font = narrow ? 14 : 15, lineH = Math.round(font * 1.4), statusH = narrow ? 18 : 20;
163
+ const nameH = 22;
164
+ return { narrow, box: { x, y, w, h }, portrait: { h: Math.min(ph, foot - 8), foot, maxW: Math.round(w * (narrow ? 0.36 : 0.3)), left: Math.round(x + w * 0.14), right: Math.round(x + w * 0.86) },
165
+ pad, font, lineH, nameH, statusH, face: narrow ? 52 : 64,
166
+ text: { x: x + pad, y: y + pad + 4, w: w - 2 * pad, lines: Math.max(2, Math.floor((h - 2 * pad - 4 - statusH) / lineH)) } };
167
+ }
168
+ /**
169
+ * The layout with its box as tall as its words need (`n` lines, and the agent's line when `status`), at least two
170
+ * lines' worth, still standing on the stage's foot: the portraits' feet and the text move with its top.
171
+ */
172
+ export function fitBox(L, n, status) {
173
+ const want = Math.round(L.pad * 2 + 4 + Math.max(2, n) * L.lineH + (status ? L.statusH : 0));
174
+ const h = Math.min(L.box.h, Math.max(want, L.narrow ? 64 : 72)), dy = L.box.h - h;
175
+ if (dy <= 0) return L;
176
+ return { ...L, box: { ...L.box, y: L.box.y + dy, h }, portrait: { ...L.portrait, foot: L.portrait.foot + dy, h: Math.min(L.portrait.h, L.portrait.foot + dy - 8) },
177
+ text: { ...L.text, y: L.text.y + dy } };
178
+ }
179
+
180
+ const CJK = /[⺀-鿿가-힯豈-﫿＀-￯ -〿]/;
181
+ /**
182
+ * `text` in lines at most `maxW` wide (measured), at most `max` lines (the last cut with "…" when there is more):
183
+ * words for Latin text, any character for CJK; a word wider than a line is broken by character.
184
+ */
185
+ export function wrap(measure, text, maxW, max) {
186
+ const tokens = [];
187
+ for (const g of chars(String(text ?? ""))) {
188
+ const last = tokens[tokens.length - 1];
189
+ if (/\s/.test(g)) { tokens.push(" "); continue; }
190
+ if (CJK.test(g) || !last || last === " " || CJK.test(last[last.length - 1] || "")) tokens.push(g);
191
+ else tokens[tokens.length - 1] = last + g;
192
+ }
193
+ const lines = [];
194
+ let cur = "";
195
+ const push = () => { lines.push(cur.trimEnd()); cur = ""; };
196
+ for (const tk of tokens) {
197
+ if (tk === " ") { if (cur) cur += " "; continue; }
198
+ if (measure(cur + tk) <= maxW) { cur += tk; continue; }
199
+ if (cur.trim()) push();
200
+ if (measure(tk) <= maxW) { cur = tk; continue; }
201
+ for (const g of chars(tk)) { if (cur && measure(cur + g) > maxW) push(); cur += g; }
202
+ }
203
+ if (cur.trim()) push();
204
+ if (lines.length <= max) return lines;
205
+ const out = lines.slice(0, max);
206
+ let lastLine = out[max - 1];
207
+ while (lastLine && measure(`${lastLine}…`) > maxW) lastLine = chars(lastLine).slice(0, -1).join("");
208
+ out[max - 1] = `${lastLine.trimEnd()}…`;
209
+ return out;
210
+ }
211
+
212
+ /** The first `n` characters of `lines`, line by line (what the typing has reached). */
213
+ export function typed(lines, n) {
214
+ const out = [];
215
+ let left = n;
216
+ for (const l of lines) {
217
+ if (left <= 0) break;
218
+ const c = chars(l);
219
+ out.push(c.slice(0, left).join(""));
220
+ left -= c.length;
221
+ }
222
+ return out;
223
+ }
224
+ const lengthOf = (lines) => lines.reduce((a, l) => a + chars(l).length, 0);
225
+
226
+ /**
227
+ * What the box is now, from its conversation `c` at `t`: { phase: "heard" | "working" | "answered", speaker
228
+ * ("left": the person, "right": the agent), slide (0–1: how far it has risen), alpha, typedAt (when the speaker's line
229
+ * began typing), done (gone) }. `working`: the agent works now. Reduced motion (`still`): risen, whole, no fade.
230
+ */
231
+ export function stageOf(c, t, working, still) {
232
+ if (c.shownAt === null) c.shownAt = t;
233
+ if (c.answeredAt !== null && c.replyShownAt === null) c.replyShownAt = t;
234
+ const phase = c.answeredAt !== null ? "answered" : working ? "working" : "heard";
235
+ const slide = still ? 1 : Math.min(1, (t - c.shownAt) / DLG.SLIDE_MS);
236
+ const fadeFrom = c.answeredAt !== null ? Math.max(c.answeredAt, c.replyShownAt) + DLG.HOLD_MS : Infinity;
237
+ const alpha = t < fadeFrom ? 1 : still ? 0 : Math.max(0, 1 - (t - fadeFrom) / DLG.FADE_MS);
238
+ return { phase, speaker: phase === "answered" ? "right" : "left", slide: 1 - (1 - slide) ** 3, alpha, typedAt: phase === "answered" ? c.replyShownAt : c.shownAt, done: alpha <= 0 };
239
+ }
240
+
241
+ /** The box's colours: the pack's dialogBox, else the dashboard's tokens. */
242
+ export function boxColours(dialogBox, pal) {
243
+ const d = dialogBox || {};
244
+ return { background: d.background || pal.surface, border: d.border || pal.border, text: d.text || pal.text, name: d.name || pal.accent, sub: pal.text2 };
245
+ }
246
+
247
+ const roundRect = (ctx, x, y, w, h, r) => {
248
+ ctx.beginPath();
249
+ if (typeof ctx.roundRect === "function") ctx.roundRect(x, y, w, h, r);
250
+ else ctx.rect(x, y, w, h);
251
+ };
252
+ /** A 9-slice frame `im` over (x, y, w, h): `s` image px a side, drawn `k` CSS px an image px (unsmoothed). */
253
+ function nineSlice(ctx, im, s, x, y, w, h, k) {
254
+ const iw = im.naturalWidth || im.width, ih = im.naturalHeight || im.height, d = s * k;
255
+ if (!iw || !ih || w < 2 * d || h < 2 * d) return false;
256
+ const sx = [0, s, iw - s, iw], sy = [0, s, ih - s, ih], dx = [x, x + d, x + w - d, x + w], dy = [y, y + d, y + h - d, y + h];
257
+ for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) {
258
+ const sw = sx[i + 1] - sx[i], sh = sy[j + 1] - sy[j], dw = dx[i + 1] - dx[i], dh = dy[j + 1] - dy[j];
259
+ if (sw > 0 && sh > 0 && dw > 0 && dh > 0) ctx.drawImage(im, sx[i], sy[j], sw, sh, dx[i], dy[j], dw, dh);
260
+ }
261
+ return true;
262
+ }
263
+
264
+ /**
265
+ * One face where a portrait stands (its feet at (cx, foot)): a portrait (`{ kind: "portrait", im }`, its height `h`,
266
+ * at most `maxW` wide, bottom-anchored), else a framed square (`face` px) sitting just above the box — a picture
267
+ * (`image`), an emoji, or an initial on the identity colour. `dim`: the one not speaking.
268
+ */
269
+ function drawFace(ctx, face, cx, L, top, dim, env) {
270
+ if (!face) return;
271
+ ctx.save();
272
+ ctx.globalAlpha *= dim ? 0.55 : 1;
273
+ if (face.kind === "portrait" && face.im) {
274
+ const iw = face.im.naturalWidth || face.im.width, ih = face.im.naturalHeight || face.im.height;
275
+ if (iw && ih) {
276
+ const k = Math.min(L.portrait.h / ih, L.portrait.maxW / iw), w = iw * k, h = ih * k;
277
+ ctx.imageSmoothingEnabled = k < 1; // a pixel-art portrait scaled up stays crisp
278
+ ctx.drawImage(face.im, Math.round(cx - w / 2), Math.round(L.portrait.foot - h), Math.round(w), Math.round(h));
279
+ }
280
+ ctx.restore();
281
+ return;
282
+ }
283
+ const s = L.face, x = Math.round(cx - s / 2), y = Math.round(top - s - 6);
284
+ ctx.fillStyle = env.pal.surface2; ctx.strokeStyle = env.pal.border; ctx.lineWidth = 2;
285
+ roundRect(ctx, x, y, s, s, 10); ctx.fill(); ctx.stroke();
286
+ ctx.save(); roundRect(ctx, x + 3, y + 3, s - 6, s - 6, 8); ctx.clip();
287
+ if (face.kind === "image" && face.im) { ctx.imageSmoothingEnabled = true; ctx.drawImage(face.im, x + 3, y + 3, s - 6, s - 6); }
288
+ else {
289
+ if (face.kind === "initial") { ctx.fillStyle = face.color || env.pal.accent; ctx.fillRect(x + 3, y + 3, s - 6, s - 6); }
290
+ ctx.fillStyle = face.kind === "initial" ? "#ffffff" : env.pal.text;
291
+ ctx.font = `${face.kind === "emoji" ? 400 : 700} ${Math.round(s * (face.kind === "emoji" ? 0.5 : 0.44))}px system-ui, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`;
292
+ ctx.textAlign = "center"; ctx.textBaseline = "middle";
293
+ ctx.fillText(face.text || "?", x + s / 2, y + s / 2 + 1);
294
+ }
295
+ ctx.restore();
296
+ ctx.restore();
297
+ }
298
+
299
+ /**
300
+ * Draw the box on `ctx` (its transform: CSS px of the stage) — `v`: { L (boxLayout), stage (stageOf), left/right faces,
301
+ * name (the plate), lines (the speaker's whole text, wrapped), status (the agent's line while it works, or null),
302
+ * statusName, more, colours, frame ({ im, slice, k }) }. Whether it is still moving (rising, typing or fading).
303
+ */
304
+ export function drawBox(ctx, v, t, env) {
305
+ const { L, stage } = v, b = L.box;
306
+ if (stage.done) return false;
307
+ const rise = Math.round((1 - stage.slide) * (b.h + 40));
308
+ ctx.save();
309
+ ctx.globalAlpha = stage.alpha;
310
+ ctx.translate(0, rise);
311
+ // The portraits stand behind the box: the person's on the left, the agent's on the right (once it works or answers).
312
+ drawFace(ctx, v.left, L.portrait.left, L, b.y, stage.speaker !== "left", env);
313
+ if (v.right) drawFace(ctx, v.right, L.portrait.right, L, b.y, stage.speaker !== "right", env);
314
+ const c = v.colours;
315
+ ctx.save();
316
+ // Opaque (the portraits stand behind it and must not show through); a pack's frame is drawn over the fill.
317
+ ctx.fillStyle = c.background; roundRect(ctx, b.x, b.y, b.w, b.h, 12); ctx.fill();
318
+ if (!(v.frame && v.frame.im && nineSlice(ctx, v.frame.im, v.frame.slice, b.x, b.y, b.w, b.h, v.frame.k))) {
319
+ ctx.strokeStyle = c.border; ctx.lineWidth = 2; roundRect(ctx, b.x + 1, b.y + 1, b.w - 2, b.h - 2, 11); ctx.stroke();
320
+ }
321
+ ctx.restore();
322
+ // The name plate: over the box's top edge, on the speaker's side.
323
+ ctx.font = "700 13px system-ui, sans-serif";
324
+ const nw = Math.min(b.w * 0.6, Math.ceil(ctx.measureText(v.name).width) + 20), nx = stage.speaker === "left" ? b.x + 14 : b.x + b.w - 14 - nw, ny = b.y - Math.round(L.nameH / 2);
325
+ ctx.fillStyle = c.background; ctx.strokeStyle = c.name; ctx.lineWidth = 2;
326
+ roundRect(ctx, nx, ny, nw, L.nameH, 6); ctx.fill(); ctx.stroke();
327
+ ctx.fillStyle = c.name; ctx.textAlign = "left"; ctx.textBaseline = "middle";
328
+ ctx.fillText(fit(ctx, v.name, nw - 16), nx + 10, ny + L.nameH / 2 + 1);
329
+ // The words, typed out.
330
+ const n = env.still ? Infinity : Math.floor(((t - stage.typedAt) * DLG.CPS) / 1000);
331
+ ctx.font = `400 ${L.font}px system-ui, sans-serif`; ctx.fillStyle = c.text; ctx.textBaseline = "top";
332
+ const shown = typed(v.lines, n);
333
+ shown.forEach((l, i) => ctx.fillText(l, L.text.x, L.text.y + 6 + i * L.lineH));
334
+ // The agent's line while it works; "+N" for the conversations waiting.
335
+ ctx.font = `italic 600 ${L.narrow ? 12 : 13}px system-ui, sans-serif`; ctx.textBaseline = "bottom";
336
+ if (v.status) { ctx.fillStyle = c.name; ctx.textAlign = "right"; ctx.fillText(fit(ctx, v.status, b.w - 2 * L.pad), b.x + b.w - L.pad, b.y + b.h - Math.round(L.pad * 0.75)); }
337
+ ctx.font = `600 ${L.narrow ? 11 : 12}px system-ui, sans-serif`;
338
+ if (v.more > 0) {
339
+ ctx.font = "700 13px system-ui, sans-serif";
340
+ const tag = `+${v.more}`, tw = ctx.measureText(tag).width + 18, th = 22, tx = stage.speaker === "left" ? b.x + b.w - tw - L.pad : b.x + L.pad, ty = b.y + L.pad - 4;
341
+ ctx.fillStyle = c.name; roundRect(ctx, tx, ty, tw, th, th / 2); ctx.fill();
342
+ ctx.fillStyle = c.background; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillText(tag, tx + tw / 2, ty + th / 2 + 1);
343
+ }
344
+ ctx.restore();
345
+ return stage.slide < 1 || n < lengthOf(v.lines) || stage.alpha < 1;
346
+ }
347
+ /** `s` cut to `w` px with "…". */
348
+ function fit(ctx, s, w) {
349
+ if (ctx.measureText(s).width <= w) return s;
350
+ let c = chars(s);
351
+ while (c.length > 1 && ctx.measureText(`${c.join("")}…`).width > w) c = c.slice(0, -1);
352
+ return `${c.join("")}…`;
353
+ }
354
+
355
+ /** Whether (x, y) — the stage's CSS px — is on the box (with the slide it has now). */
356
+ export const onBox = (L, stage, x, y) => !!L && !!stage && !stage.done && stage.alpha > 0.2
357
+ && x >= L.box.x && x < L.box.x + L.box.w && y >= L.box.y + Math.round((1 - stage.slide) * (L.box.h + 40)) - L.nameH / 2 && y < L.box.y + L.box.h + (1 - stage.slide) * (L.box.h + 40);
358
+
359
+ /**
360
+ * Pictures the box draws that are not a pack's: an avatar's `/ui/img/…` (avatarOf's), read once each; `get(src, done)`
361
+ * the picture or null (not in yet: `done` once it is).
362
+ */
363
+ export function createFaces(load = defaultLoad) {
364
+ const seen = new Map();
365
+ return (src, done) => {
366
+ if (!src) return null;
367
+ const had = seen.get(src);
368
+ if (had) { if (had.im === undefined && done) had.waiting.add(done); return had.im || null; }
369
+ const e = { im: undefined, waiting: new Set(done ? [done] : []) };
370
+ seen.set(src, e);
371
+ Promise.resolve(load(src)).catch(() => null).then((im) => { e.im = im || null; for (const fn of e.waiting) { try { fn(); } catch { /* the page's */ } } e.waiting.clear(); });
372
+ return null;
373
+ };
374
+ }
375
+ function defaultLoad(src) {
376
+ return new Promise((resolve) => {
377
+ if (typeof Image !== "function") { resolve(null); return; }
378
+ const im = new Image();
379
+ im.onload = () => resolve(im); im.onerror = () => resolve(null);
380
+ im.src = src;
381
+ });
382
+ }
@@ -20,7 +20,13 @@ export interface CheckedPack {
20
20
  room: { floor?: string; wall?: string }; desk: { back?: string; front?: string; lit?: string };
21
21
  /** #2661: the Office levels' words — titles from each level up, and titles pinned on instances or NPCs. */
22
22
  levels?: { titles?: Array<{ from: number; name: string }>; fixed?: Record<string, { title: string; hideLevel: boolean }> };
23
+ /** #2861: the dialogue box's faces — each an expression (idle, working, needs) → file. */
24
+ portraits?: { default?: PackPortrait; byInstance: Record<string, PackPortrait>; byUser: Record<string, PackPortrait>; npc: Record<string, PackPortrait> };
25
+ /** #2861: the dialogue box's look — a 9-slice frame and colours (#rrggbb). */
26
+ dialogBox?: { frame?: string; slice?: number; background?: string; border?: string; text?: string; name?: string };
23
27
  }
28
+ /** #2861: a portrait's files by the state it is shown in (at least one). */
29
+ export type PackPortrait = Partial<Record<"idle" | "working" | "needs", string>>;
24
30
  export interface LayoutOverrides {
25
31
  pack: string;
26
32
  seats?: Record<string, Array<[number, number]>>;
@@ -45,6 +51,9 @@ export function checkStrip(v: unknown, at?: string, scale?: number): PackStrip;
45
51
  export function checkSkinPack(x: unknown, opts?: { kept?: boolean }): { ok: true; pack: CheckedPack } | { ok: false; error: string };
46
52
  export function skinPackOk(x: unknown): CheckedPack | null;
47
53
  export function packImages(pack: CheckedPack): string[];
54
+ export function packSceneImages(pack: CheckedPack): string[];
55
+ export function packPortraitImages(pack: CheckedPack): string[];
56
+ export const PORTRAIT_STATES: string[];
48
57
  export function packStrips(pack: CheckedPack): Array<{ at: string; strip: PackStrip }>;
49
58
  export function checkLayoutOverrides(x: unknown): { ok: true; overrides: LayoutOverrides } | { ok: false; error: string };
50
59
  export function applyOverrides(pack: CheckedPack, ov: LayoutOverrides | null | undefined): { ok: true; pack: CheckedPack } | { ok: false; error: string };