@songsid/agend 2.3.3-beta.1 → 2.3.3-beta.10

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 (355) hide show
  1. package/dist/agent-cli.js +13 -112
  2. package/dist/agent-cli.js.map +1 -1
  3. package/dist/agent-endpoint.d.ts +0 -1
  4. package/dist/agent-endpoint.js +1 -9
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/agent-whats-new.d.ts +3 -6
  7. package/dist/agent-whats-new.js +7 -18
  8. package/dist/agent-whats-new.js.map +1 -1
  9. package/dist/auth-api.d.ts +0 -7
  10. package/dist/auth-api.js +1 -15
  11. package/dist/auth-api.js.map +1 -1
  12. package/dist/authority/authority-state.js +1 -1
  13. package/dist/authority/authority-state.js.map +1 -1
  14. package/dist/authority/web-authority.d.ts +9 -4
  15. package/dist/authority/web-authority.js +10 -5
  16. package/dist/authority/web-authority.js.map +1 -1
  17. package/dist/backend/antigravity.js +6 -1
  18. package/dist/backend/antigravity.js.map +1 -1
  19. package/dist/backend/claude-code.d.ts +7 -0
  20. package/dist/backend/claude-code.js +34 -28
  21. package/dist/backend/claude-code.js.map +1 -1
  22. package/dist/backend/claude-transcript-errors.d.ts +18 -0
  23. package/dist/backend/claude-transcript-errors.js +19 -0
  24. package/dist/backend/claude-transcript-errors.js.map +1 -0
  25. package/dist/backend/codex-session-lookup.d.ts +16 -3
  26. package/dist/backend/codex-session-lookup.js +45 -11
  27. package/dist/backend/codex-session-lookup.js.map +1 -1
  28. package/dist/backend/codex.d.ts +16 -0
  29. package/dist/backend/codex.js +184 -35
  30. package/dist/backend/codex.js.map +1 -1
  31. package/dist/backend/grok.js +58 -12
  32. package/dist/backend/grok.js.map +1 -1
  33. package/dist/backend/kiro.js +2 -0
  34. package/dist/backend/kiro.js.map +1 -1
  35. package/dist/backend/muse.js +2 -1
  36. package/dist/backend/muse.js.map +1 -1
  37. package/dist/backend/types.d.ts +46 -0
  38. package/dist/backend/types.js.map +1 -1
  39. package/dist/bundled-skills.d.ts +4 -6
  40. package/dist/bundled-skills.js +10 -14
  41. package/dist/bundled-skills.js.map +1 -1
  42. package/dist/channel/adapters/discord.js +60 -17
  43. package/dist/channel/adapters/discord.js.map +1 -1
  44. package/dist/channel/mcp-server.js +5 -5
  45. package/dist/channel/mcp-server.js.map +1 -1
  46. package/dist/channel/mcp-tools.d.ts +1 -3
  47. package/dist/channel/mcp-tools.js +4 -58
  48. package/dist/channel/mcp-tools.js.map +1 -1
  49. package/dist/classic-channel-manager.d.ts +4 -1
  50. package/dist/classic-channel-manager.js +21 -7
  51. package/dist/classic-channel-manager.js.map +1 -1
  52. package/dist/cli.js +21 -4
  53. package/dist/cli.js.map +1 -1
  54. package/dist/config-history.d.ts +50 -0
  55. package/dist/config-history.js +263 -0
  56. package/dist/config-history.js.map +1 -0
  57. package/dist/config-validator.js +7 -7
  58. package/dist/config-validator.js.map +1 -1
  59. package/dist/config.d.ts +3 -0
  60. package/dist/config.js +11 -4
  61. package/dist/config.js.map +1 -1
  62. package/dist/daemon.d.ts +73 -3
  63. package/dist/daemon.js +334 -121
  64. package/dist/daemon.js.map +1 -1
  65. package/dist/daily-summary.d.ts +8 -1
  66. package/dist/daily-summary.js +8 -5
  67. package/dist/daily-summary.js.map +1 -1
  68. package/dist/dashboard-live.d.ts +1 -1
  69. package/dist/dashboard-live.js +3 -3
  70. package/dist/dashboard-live.js.map +1 -1
  71. package/dist/dashboard-permissions.d.ts +1 -1
  72. package/dist/dashboard-permissions.js +1 -3
  73. package/dist/dashboard-permissions.js.map +1 -1
  74. package/dist/delivery-outbox.d.ts +4 -0
  75. package/dist/delivery-outbox.js +12 -2
  76. package/dist/delivery-outbox.js.map +1 -1
  77. package/dist/doctor.d.ts +4 -0
  78. package/dist/doctor.js +16 -1
  79. package/dist/doctor.js.map +1 -1
  80. package/dist/fleet-level-config.js +1 -1
  81. package/dist/fleet-level-config.js.map +1 -1
  82. package/dist/fleet-manager.d.ts +70 -54
  83. package/dist/fleet-manager.js +257 -322
  84. package/dist/fleet-manager.js.map +1 -1
  85. package/dist/fleet-process-handlers.d.ts +5 -0
  86. package/dist/fleet-process-handlers.js +21 -0
  87. package/dist/fleet-process-handlers.js.map +1 -1
  88. package/dist/fleet-service-owner.d.ts +11 -0
  89. package/dist/fleet-service-owner.js +3 -0
  90. package/dist/fleet-service-owner.js.map +1 -0
  91. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +11 -1
  92. package/dist/general-knowledge/skills/session-management/SKILL.md +6 -0
  93. package/dist/general-knowledge/skills/web-appearance/SKILL.md +13 -204
  94. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +29 -67
  95. package/dist/instance-lifecycle.d.ts +19 -0
  96. package/dist/instance-lifecycle.js +52 -10
  97. package/dist/instance-lifecycle.js.map +1 -1
  98. package/dist/locale.js +92 -42
  99. package/dist/locale.js.map +1 -1
  100. package/dist/needs-you-hub.d.ts +1 -0
  101. package/dist/needs-you-hub.js +6 -3
  102. package/dist/needs-you-hub.js.map +1 -1
  103. package/dist/needs-you-live.d.ts +3 -1
  104. package/dist/needs-you-live.js +24 -2
  105. package/dist/needs-you-live.js.map +1 -1
  106. package/dist/needs-you.d.ts +13 -2
  107. package/dist/needs-you.js +11 -1
  108. package/dist/needs-you.js.map +1 -1
  109. package/dist/notify-socket.d.ts +10 -0
  110. package/dist/notify-socket.js +45 -0
  111. package/dist/notify-socket.js.map +1 -0
  112. package/dist/outbound-handlers.js +19 -7
  113. package/dist/outbound-handlers.js.map +1 -1
  114. package/dist/outbound-schemas.d.ts +0 -62
  115. package/dist/outbound-schemas.js +3 -42
  116. package/dist/outbound-schemas.js.map +1 -1
  117. package/dist/parked-notices.d.ts +87 -0
  118. package/dist/parked-notices.js +194 -0
  119. package/dist/parked-notices.js.map +1 -0
  120. package/dist/public-link-progress.d.ts +5 -2
  121. package/dist/public-link-progress.js +4 -3
  122. package/dist/public-link-progress.js.map +1 -1
  123. package/dist/public-web-gateway.js +0 -9
  124. package/dist/public-web-gateway.js.map +1 -1
  125. package/dist/public-web-link.d.ts +12 -0
  126. package/dist/public-web-link.js +29 -5
  127. package/dist/public-web-link.js.map +1 -1
  128. package/dist/quota-notice.d.ts +23 -0
  129. package/dist/quota-notice.js +22 -0
  130. package/dist/quota-notice.js.map +1 -0
  131. package/dist/scheduler/task-board.d.ts +0 -13
  132. package/dist/scheduler/task-board.js +0 -14
  133. package/dist/scheduler/task-board.js.map +1 -1
  134. package/dist/sd-notify.d.ts +10 -1
  135. package/dist/sd-notify.js +27 -2
  136. package/dist/sd-notify.js.map +1 -1
  137. package/dist/search/search-docs.d.ts +1 -1
  138. package/dist/search/search-docs.js +2 -2
  139. package/dist/search/search-docs.js.map +1 -1
  140. package/dist/settings-api.d.ts +16 -0
  141. package/dist/settings-api.js +55 -2
  142. package/dist/settings-api.js.map +1 -1
  143. package/dist/settings-change.js +3 -1
  144. package/dist/settings-change.js.map +1 -1
  145. package/dist/settings-confirmation.d.ts +17 -3
  146. package/dist/settings-confirmation.js +8 -5
  147. package/dist/settings-confirmation.js.map +1 -1
  148. package/dist/settings-http-confirmation.js +31 -1
  149. package/dist/settings-http-confirmation.js.map +1 -1
  150. package/dist/setup-wizard.d.ts +3 -0
  151. package/dist/setup-wizard.js +4 -2
  152. package/dist/setup-wizard.js.map +1 -1
  153. package/dist/task-board-waker.d.ts +4 -1
  154. package/dist/task-board-waker.js +13 -2
  155. package/dist/task-board-waker.js.map +1 -1
  156. package/dist/tool-permissions.js +3 -10
  157. package/dist/tool-permissions.js.map +1 -1
  158. package/dist/topic-commands.d.ts +27 -7
  159. package/dist/topic-commands.js +95 -36
  160. package/dist/topic-commands.js.map +1 -1
  161. package/dist/transcript-monitor.d.ts +7 -0
  162. package/dist/transcript-monitor.js +48 -3
  163. package/dist/transcript-monitor.js.map +1 -1
  164. package/dist/tunnel/cloudflared.d.ts +5 -0
  165. package/dist/tunnel/cloudflared.js +32 -1
  166. package/dist/tunnel/cloudflared.js.map +1 -1
  167. package/dist/tunnel/named-diagnostics.d.ts +2 -1
  168. package/dist/tunnel/named-diagnostics.js +4 -1
  169. package/dist/tunnel/named-diagnostics.js.map +1 -1
  170. package/dist/tunnel/named-link-test.d.ts +90 -0
  171. package/dist/tunnel/named-link-test.js +270 -0
  172. package/dist/tunnel/named-link-test.js.map +1 -0
  173. package/dist/tunnel/purpose-lane.d.ts +3 -1
  174. package/dist/tunnel/purpose-lane.js +2 -0
  175. package/dist/tunnel/purpose-lane.js.map +1 -1
  176. package/dist/types.d.ts +8 -6
  177. package/dist/ui/chat-ambient.js +4 -4
  178. package/dist/ui/chat-commands.js +3 -2
  179. package/dist/ui/chat-store.js +4 -1
  180. package/dist/ui/chat-strings.js +12 -46
  181. package/dist/ui/chat-thread.js +51 -59
  182. package/dist/ui/fleet-office-skin.js +37 -14
  183. package/dist/ui/fleet-office.js +31 -7
  184. package/dist/ui/html-attachment.js +22 -8
  185. package/dist/ui/panel-chat.js +21 -50
  186. package/dist/ui/panel-needs.js +11 -9
  187. package/dist/ui/panel-settings.js +5 -3
  188. package/dist/ui/preview-panel.js +12 -21
  189. package/dist/ui/preview.js +10 -3
  190. package/dist/ui/search-dialog.js +30 -14
  191. package/dist/ui/settings-appearance.js +1 -3
  192. package/dist/ui/settings-confirm.js +18 -0
  193. package/dist/ui/settings-guests.js +13 -4
  194. package/dist/ui/settings-learn.js +1 -1
  195. package/dist/ui/settings-mods.js +5 -12
  196. package/dist/ui/settings-named-test.js +144 -0
  197. package/dist/ui/settings-registry.js +0 -1
  198. package/dist/ui/settings-strings.js +14 -14
  199. package/dist/ui/settings-web-authority.js +4 -3
  200. package/dist/ui/shared/app-i18n.js +15 -4
  201. package/dist/ui/shared/app-needs.js +5 -1
  202. package/dist/ui/shared/app-prefs.js +17 -17
  203. package/dist/ui/shared/app-shell.js +47 -9
  204. package/dist/ui/shared/app-store.js +6 -2
  205. package/dist/ui/shared/app.css +33 -39
  206. package/dist/ui/shared/app.js +5 -4
  207. package/dist/ui/shared/instance-nav.js +9 -9
  208. package/dist/ui/shared/instance-switch.js +8 -2
  209. package/dist/ui/shared/panel-view.js +22 -8
  210. package/dist/ui/shared/view-strings.js +6 -0
  211. package/dist/ui/shared/web-authorize.js +35 -13
  212. package/dist/usage/usage-api.d.ts +3 -0
  213. package/dist/usage/usage-api.js +5 -1
  214. package/dist/usage/usage-api.js.map +1 -1
  215. package/dist/view-api.d.ts +2 -0
  216. package/dist/view-api.js +64 -0
  217. package/dist/view-api.js.map +1 -1
  218. package/dist/web-api.d.ts +9 -17
  219. package/dist/web-api.js +257 -371
  220. package/dist/web-api.js.map +1 -1
  221. package/dist/web-appearance-tools.d.ts +0 -2
  222. package/dist/web-appearance-tools.js +2 -5
  223. package/dist/web-appearance-tools.js.map +1 -1
  224. package/dist/web-appearance-view.d.ts +0 -6
  225. package/dist/web-appearance-view.js +0 -1
  226. package/dist/web-appearance-view.js.map +1 -1
  227. package/dist/web-appearance.d.ts +14 -7
  228. package/dist/web-appearance.js +5 -6
  229. package/dist/web-appearance.js.map +1 -1
  230. package/dist/web-asset-parts.d.ts +1 -17
  231. package/dist/web-asset-parts.js +1 -15
  232. package/dist/web-asset-parts.js.map +1 -1
  233. package/dist/web-auth.js +1 -7
  234. package/dist/web-auth.js.map +1 -1
  235. package/dist/web-chat-history.d.ts +3 -7
  236. package/dist/web-chat-history.js +10 -17
  237. package/dist/web-chat-history.js.map +1 -1
  238. package/dist/web-commands.d.ts +9 -1
  239. package/dist/web-commands.js +13 -0
  240. package/dist/web-commands.js.map +1 -1
  241. package/dist/web-experimental.d.ts +2 -11
  242. package/dist/web-experimental.js +8 -36
  243. package/dist/web-experimental.js.map +1 -1
  244. package/dist/web-guest-access.d.ts +40 -2
  245. package/dist/web-guest-access.js +50 -14
  246. package/dist/web-guest-access.js.map +1 -1
  247. package/dist/web-mod-bundle.d.ts +2 -45
  248. package/dist/web-mod-bundle.js +15 -63
  249. package/dist/web-mod-bundle.js.map +1 -1
  250. package/dist/web-mod-store.d.ts +3 -48
  251. package/dist/web-mod-store.js +30 -97
  252. package/dist/web-mod-store.js.map +1 -1
  253. package/dist/web-prefs.d.ts +13 -0
  254. package/dist/web-prefs.js +38 -0
  255. package/dist/web-prefs.js.map +1 -1
  256. package/dist/web-preview.d.ts +6 -13
  257. package/dist/web-preview.js +12 -23
  258. package/dist/web-preview.js.map +1 -1
  259. package/dist/web-session.d.ts +11 -3
  260. package/dist/web-session.js +22 -11
  261. package/dist/web-session.js.map +1 -1
  262. package/dist/web-settings-patch.d.ts +1 -0
  263. package/dist/web-settings-patch.js +6 -3
  264. package/dist/web-settings-patch.js.map +1 -1
  265. package/dist/web-settings-tools.d.ts +0 -13
  266. package/dist/web-settings-tools.js +12 -84
  267. package/dist/web-settings-tools.js.map +1 -1
  268. package/launcher/agend-install.cjs +7 -1
  269. package/launcher/fleet-service-owner.cjs +150 -0
  270. package/package.json +1 -1
  271. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +0 -376
  272. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +0 -673
  273. package/dist/task-board-summary.d.ts +0 -101
  274. package/dist/task-board-summary.js +0 -177
  275. package/dist/task-board-summary.js.map +0 -1
  276. package/dist/ui/app-effects.js +0 -251
  277. package/dist/ui/chat-effect-posters.js +0 -42
  278. package/dist/ui/chat-effects.js +0 -167
  279. package/dist/ui/effect-trial-controller.js +0 -124
  280. package/dist/ui/effect-trial-offer.js +0 -2
  281. package/dist/ui/effect-trial-panel.js +0 -40
  282. package/dist/ui/effects-waker.js +0 -2
  283. package/dist/ui/settings-effects.js +0 -202
  284. package/dist/ui/settings-owner-effects.js +0 -82
  285. package/dist/ui/shared/effect-app-runtime.js +0 -299
  286. package/dist/ui/shared/effect-baseline.js +0 -64
  287. package/dist/ui/shared/effect-chat-runtime.js +0 -162
  288. package/dist/ui/shared/effect-cursor.js +0 -126
  289. package/dist/ui/shared/effect-display-metadata.js +0 -39
  290. package/dist/ui/shared/effect-frame.js +0 -146
  291. package/dist/ui/shared/effect-geometry.js +0 -137
  292. package/dist/ui/shared/effect-host-style.js +0 -10
  293. package/dist/ui/shared/effect-owner-regions.js +0 -74
  294. package/dist/ui/shared/effect-owner-source.js +0 -122
  295. package/dist/ui/shared/effect-policy.js +0 -151
  296. package/dist/ui/shared/effect-poster-reader.js +0 -98
  297. package/dist/ui/shared/effect-posters.js +0 -117
  298. package/dist/ui/shared/effect-profiler.js +0 -184
  299. package/dist/ui/shared/effect-profiles.js +0 -65
  300. package/dist/ui/shared/effect-registry.js +0 -545
  301. package/dist/ui/shared/effect-runtime-loader.js +0 -236
  302. package/dist/ui/shared/effect-safety.js +0 -153
  303. package/dist/ui/shared/effect-stock-snapshot.js +0 -43
  304. package/dist/ui/shared/effect-stock-trust.js +0 -217
  305. package/dist/ui/shared/effect-trial-shadow.js +0 -62
  306. package/dist/ui/shared/effect-trial-source.js +0 -103
  307. package/dist/ui/shared/effect-trial-stage.js +0 -170
  308. package/dist/ui/shared/effect-trial.css +0 -40
  309. package/dist/ui/shared/feature-flags.js +0 -127
  310. package/dist/ui/shared/owner-effect-prefs.js +0 -117
  311. package/dist/web-effect-bootstrap.d.ts +0 -12
  312. package/dist/web-effect-bootstrap.js +0 -49
  313. package/dist/web-effect-bootstrap.js.map +0 -1
  314. package/dist/web-effect-bundle.d.ts +0 -28
  315. package/dist/web-effect-bundle.js +0 -171
  316. package/dist/web-effect-bundle.js.map +0 -1
  317. package/dist/web-effect-canonical.d.ts +0 -8
  318. package/dist/web-effect-canonical.js +0 -27
  319. package/dist/web-effect-canonical.js.map +0 -1
  320. package/dist/web-effect-library.d.ts +0 -114
  321. package/dist/web-effect-library.js +0 -530
  322. package/dist/web-effect-library.js.map +0 -1
  323. package/dist/web-effect-playback.d.ts +0 -30
  324. package/dist/web-effect-playback.js +0 -71
  325. package/dist/web-effect-playback.js.map +0 -1
  326. package/dist/web-effect-poster.d.ts +0 -8
  327. package/dist/web-effect-poster.js +0 -52
  328. package/dist/web-effect-poster.js.map +0 -1
  329. package/dist/web-effect-profiles.d.ts +0 -118
  330. package/dist/web-effect-profiles.js +0 -181
  331. package/dist/web-effect-profiles.js.map +0 -1
  332. package/dist/web-effect-service.d.ts +0 -93
  333. package/dist/web-effect-service.js +0 -335
  334. package/dist/web-effect-service.js.map +0 -1
  335. package/dist/web-effect-tools.d.ts +0 -48
  336. package/dist/web-effect-tools.js +0 -129
  337. package/dist/web-effect-tools.js.map +0 -1
  338. package/dist/web-effect-trials.d.ts +0 -86
  339. package/dist/web-effect-trials.js +0 -204
  340. package/dist/web-effect-trials.js.map +0 -1
  341. package/dist/web-effect-upload.d.ts +0 -27
  342. package/dist/web-effect-upload.js +0 -185
  343. package/dist/web-effect-upload.js.map +0 -1
  344. package/dist/web-effect-worker.d.ts +0 -8
  345. package/dist/web-effect-worker.js +0 -170
  346. package/dist/web-effect-worker.js.map +0 -1
  347. package/dist/web-effect.d.ts +0 -103
  348. package/dist/web-effect.js +0 -153
  349. package/dist/web-effect.js.map +0 -1
  350. package/dist/web-experimental-http.d.ts +0 -2
  351. package/dist/web-experimental-http.js +0 -12
  352. package/dist/web-experimental-http.js.map +0 -1
  353. package/dist/web-mod-agent.d.ts +0 -50
  354. package/dist/web-mod-agent.js +0 -207
  355. package/dist/web-mod-agent.js.map +0 -1
@@ -13,7 +13,7 @@ import { installSwipe } from "./app-swipe.js";
13
13
  import { installTextUndo } from "./text-undo.js";
14
14
  import { startRouter, navStore, navigate } from "./app-nav.js";
15
15
  import { createStream } from "./app-stream.js";
16
- import { appStore, applyStatus, applyActivity, guestPage } from "./app-store.js";
16
+ import { appStore, applyStatus, applyActivity, guestPage, guestTrusted } from "./app-store.js";
17
17
  import { chatPath } from "./app-route.js";
18
18
  import { startNeedsNotifier } from "./app-needs.js";
19
19
  import { toast } from "./ui-toast.js";
@@ -101,7 +101,8 @@ if (mode === "full") {
101
101
  import("/ui/js/backend-signin.js").then((m) => m.installSignIn(), () => {});
102
102
  }
103
103
  // #1665: this device's first upload of its own choices (once), then another device's changes at each status frame.
104
- // A guest's page only reads them (prefsWritable is false there).
104
+ // A guest's page (#2855) uploads and saves only its own keys (prefsWritable(key)); another device's changes reach it at
105
+ // its next load (its status frames carry no prefs_rev).
105
106
  bootPrefs();
106
107
  // #1629: agents' themes, read when the status frame's themes_rev moves (a guest's frames never carry it).
107
108
  if (!guest) startThemes();
@@ -127,8 +128,8 @@ if (!guest) installOwnerCss();
127
128
  }
128
129
 
129
130
  document.addEventListener("keydown", handleKey);
130
- // #2293: Ctrl+K / ⌘K (and Ctrl+F in a chat) — an admin's full app only; the server refuses a guest's search anyway.
131
- if (mode === "full" && !guest) document.addEventListener("keydown", handleSearchKey);
131
+ // #2293: Ctrl+K / ⌘K (and Ctrl+F in a chat) — an admin's full app, and a trusted guest's (#2855: what it can see).
132
+ if (mode === "full" && (!guest || guestTrusted())) document.addEventListener("keydown", handleSearchKey);
132
133
  // #2342: Ctrl/⌘+Z and Ctrl+Shift+Z / Ctrl+Y / ⌘⇧Z in every text field, one history per field (the browser's is one
133
134
  // for the whole page, and any script write wipes it).
134
135
  installTextUndo({ mac: isMacLike() });
@@ -504,18 +504,18 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
504
504
  const known = new Set(byName.keys());
505
505
  const favs = nav.favorites.filter((n) => known.has(n));
506
506
  const favSet = new Set(favs);
507
- const canStar = !viewOnly && prefsWritable();
508
- // #1920: a guest's list is to pick from — no reordering and no filters (one this device kept would hide rows with no
509
- // way to clear it).
507
+ const canStar = !viewOnly && prefsWritable("nav.favorites");
508
+ // #1920: a guest's list is not reordered (the order is the host's). #2855: it stars, sorts and filters as its own
509
+ // preferences (kept on the host under its account), with reply times that only count replies its channel showed.
510
510
  const guest = guestPage();
511
- // #2179: when each row last replied (a guest's list has no times). "recent" mode (never a guest's): the favorites keep
511
+ // #2179: when each row last replied (a guest's: replies its channel showed). "recent" mode: the favorites keep
512
512
  // their order or are sorted too, and every other row is one list, the last reply first. "custom" (the default) is the
513
513
  // person's own order — a reply never moves a row.
514
514
  const now = Date.now();
515
515
  // The anonymous View reader (viewOnly) has no reply times (/api/profiles carries none) and no way to change the sort:
516
516
  // its list is always Custom, whatever this browser kept from a signed-in page (#2181 review).
517
- const ageOf = (n) => (guest || viewOnly ? null : replyAge(byName.get(n), now));
518
- const recent = !guest && !viewOnly && nav.sort.mode === "recent";
517
+ const ageOf = (n) => (viewOnly ? null : replyAge(byName.get(n), now));
518
+ const recent = !viewOnly && nav.sort.mode === "recent";
519
519
  const favsSorted = recent && nav.sort.favs === "recent";
520
520
  let shownGroups, shownInsts;
521
521
  if (recent) {
@@ -528,7 +528,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
528
528
  shownInsts = new Map([...instByGroup].map(([g, names]) => [g, names.filter((n) => !favSet.has(n))]));
529
529
  if (favs.length) shownInsts.set(FAV_GROUP, favs);
530
530
  }
531
- const f = guest ? { q: "", status: [], cli: [] } : nav.filter;
531
+ const f = nav.filter;
532
532
  const shown = filterSidebar(shownGroups, shownInsts, byName, f.q, backendLabel, { status: f.status, cli: f.cli, statusOf: facetOf });
533
533
  // #1936: while a filter is on, the instance you have open stays on top, pinned and marked "Current", whether or not
534
534
  // it matches; a match is not repeated below. "N / M" still counts the filter's matches (the pinned row counts only
@@ -626,7 +626,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
626
626
  return html`<div class=${`view-roster inst-nav${editing && canStar ? " fav-editing" : ""}`}>
627
627
  <div data-trust="navigation" class="side-section" id="instanceList" ref=${list}>
628
628
  <div class="inst-head"><h2 class="side-label">${tn("instancesLabel")}</h2>
629
- ${canStar && items.length && !guest ? html`<${SortMenu} sort=${nav.sort} />`
629
+ ${canStar && items.length ? html`<${SortMenu} sort=${nav.sort} />`
630
630
  : recent ? html`<span class="chip-btn nav-sort-btn on nav-sort-static"><${Icon} name="sort" size=${12} /><span>${tn("sortRecent")}</span></span>` : null}
631
631
  ${canStar && items.length ? html`<button type="button" class="chip-btn fav-edit" aria-pressed=${editing ? "true" : "false"} onClick=${() => setEditing(!editing)}>
632
632
  ${editing ? tn("favDone") : html`<${Icon} name="star" size=${12} />${tn("favEdit")}`}</button>` : null}</div>
@@ -653,7 +653,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
653
653
  })}
654
654
  ${loaded && shown.active && !shown.groups.length ? html`<p class="side-empty">${tn("filterNone")}</p>` : null}
655
655
  </div>
656
- ${guest ? null : html`<div class="v-filter">
656
+ ${html`<div class="v-filter">
657
657
  <label class="v-filter-box"><${Icon} name="search" size=${14} /><span class="sr-only">${tn("filterPh")}</span>
658
658
  <input ref=${filterRef} id="filterInput" type="text" autocomplete="off" spellcheck=${false} placeholder=${tn("filterPh")} value=${f.q}
659
659
  onInput=${(e) => setNavFilter({ q: e.target.value })}
@@ -1,8 +1,10 @@
1
1
  // #1523 N2 (§3.2): the instance view switch — Chat | View | Details of ONE instance. Each segment is a link to that
2
2
  // view's URL for the same instance, so switching keeps the instance (and the sidebar, which is never remounted).
3
3
  // Desktop: links in the header; a phone: the same four as top tabs under it (app.css). The anonymous View reader
4
- // gets none (Chat and Details need a session): the caller does not render it there.
4
+ // gets none (Chat and Details need a session): the caller does not render it there. #2855: a trusted guest's is Chat |
5
+ // View | Search (search opens on this agent); a chat-level guest gets none.
5
6
  import { html } from "./app-html.js";
7
+ import { openSearch } from "./app-shell.js";
6
8
  import { t } from "./app-i18n.js";
7
9
  import { chatPath, detailsPath, logPath, viewPath } from "./app-route.js";
8
10
 
@@ -10,9 +12,13 @@ import { chatPath, detailsPath, logPath, viewPath } from "./app-route.js";
10
12
  * current: "chat" | "view" | "log" | "details". #1218: Log sits between View and Details. `data-label`: each tab is as
11
13
  * wide as its label in the current tab's weight (app.css), so the bar keeps its size whichever tab is current.
12
14
  */
13
- export function InstanceSwitch({ name, current }) {
15
+ export function InstanceSwitch({ name, current, guest = false }) {
14
16
  const seg = (key, href, label) => html`<a key=${key} class=${`seg-item${current === key ? " active" : ""}`} href=${href}
15
17
  aria-current=${current === key ? "page" : undefined} data-label=${label}>${label}</a>`;
18
+ if (guest) return html`<nav class="inst-switch seg" aria-label=${t("app.instanceViews", name)}>
19
+ ${seg("chat", chatPath(name), t("app.chat"))}${seg("view", viewPath(name), t("app.view"))}<button key="search" type="button" class="seg-item"
20
+ data-label=${t("app.search")} onClick=${() => openSearch({ instance: name })}>${t("app.search")}</button>
21
+ </nav>`;
16
22
  return html`<nav class="inst-switch seg" aria-label=${t("app.instanceViews", name)}>
17
23
  ${seg("chat", chatPath(name), t("app.chat"))}${seg("view", viewPath(name), t("app.view"))}${seg("log", logPath(name), t("app.log"))}${seg("details", detailsPath(name), t("app.details"))}
18
24
  </nav>`;
@@ -6,9 +6,13 @@
6
6
  // Everything recurring is a passive read (#1374) taken through the navigation's lease: the pane every 800 ms and the
7
7
  // roster every 5 s while the panel is mounted and the tab is visible, usage every 60 s while its dialog is open. They
8
8
  // stop when the panel goes.
9
+ //
10
+ // #2855: a trusted guest's View — read-only: its own agents (the status frame's list, never /api/profiles), the pane
11
+ // every second under a "watching only" line, no identity card, Edit profile or Help. A chat-level guest is told it needs
12
+ // Trusted access; nothing is read.
9
13
  import { html, useEffect, useRef, useState } from "./app-html.js";
10
14
  import { t } from "./app-i18n.js";
11
- import { appStore, createStore, useStore } from "./app-store.js";
15
+ import { appStore, createStore, guestPage, guestTrusted, useStore } from "./app-store.js";
12
16
  import { useLease } from "./app-ctx.js";
13
17
  import { PanelHeader, setTitle, onPanelKey, signInHref } from "./app-shell.js";
14
18
  import { InstanceSwitch } from "./instance-switch.js";
@@ -123,8 +127,11 @@ const MIN_PX = 12, MAX_PX = 22, FIT_FLOOR_PX = 6;
123
127
 
124
128
  export function ViewPanel({ route, navKey }) {
125
129
  const lease = useLease(navKey);
126
- const v = useStore(viewStore);
127
- const { viewOnly } = useStore(appStore);
130
+ const viewed = useStore(viewStore);
131
+ const { viewOnly, instances, ready } = useStore(appStore);
132
+ const guest = guestPage(), trusted = guest && guestTrusted();
133
+ // #2855: a guest's roster is its own agents, as its status frame lists them.
134
+ const v = guest ? { loaded: ready !== false, error: null, roster: (instances || []).map((i) => ({ instance_name: i.name, display_name: i.display_name, status: i.status })) } : viewed;
128
135
  // { kind: "edit" | "usage" | "help", key }: a dialog belongs to the navigation that opened it. The profile editor's
129
136
  // draft names one agent; on another navigation it is gone, never retargeted (#1448 review).
130
137
  const [dialog, setDialogState] = useState(null);
@@ -142,6 +149,7 @@ export function ViewPanel({ route, navKey }) {
142
149
 
143
150
  // The roster: now, then every 5 s while this panel is mounted and the tab is visible (a passive read).
144
151
  useEffect(() => {
152
+ if (guest) return;
145
153
  const reads = readStream(lease);
146
154
  const load = async () => {
147
155
  if (typeof document !== "undefined" && document.hidden) return;
@@ -180,7 +188,7 @@ export function ViewPanel({ route, navKey }) {
180
188
 
181
189
  // Aa and ◔ are every page's (HeaderTools); Help is View's own.
182
190
  const actions = html`<${HeaderTools} view=${true} navKey=${navKey} />
183
- <button type="button" class="icon-btn" onClick=${() => setDialog("help")} aria-label=${tn("helpButton")} title=${tn("helpButton")}><${Icon} name="info" /></button>`;
191
+ ${guest ? null : html`<button type="button" class="icon-btn" onClick=${() => setDialog("help")} aria-label=${tn("helpButton")} title=${tn("helpButton")}><${Icon} name="info" /></button>`}`;
184
192
 
185
193
  let body;
186
194
  if (v.error && !v.roster.length) body = html`<div data-trust="panel-content" class="panel-body center"><${ErrorState} message=${tn("rosterFailedShort")} onRetry=${() => navigate(location.pathname, { replace: true })} /></div>`;
@@ -188,21 +196,26 @@ export function ViewPanel({ route, navKey }) {
188
196
  else if (!v.roster.length) body = html`<div data-trust="panel-content" class="panel-body center"><${Empty} icon="view" title=${tn("noInstances")} /></div>`;
189
197
  else if (!name) body = html`<div data-trust="panel-content" class="panel-body"><${Skeleton} lines=${6} /></div>`;
190
198
  else if (!it) body = html`<div data-trust="panel-content" class="panel-body center"><${Empty} icon="alert" title=${tn("notFound", { name })} hint=${tn("notFoundHint")} /></div>`;
199
+ else if (guest && !trusted) body = html`<div data-trust="panel-content" class="panel-body center"><${Empty} icon="view" title=${tn("guestNeedsTrusted")} hint=${tn("guestNeedsTrustedHint")} /></div>`;
200
+ else if (guest) body = html`<p data-trust="panel-content" class="v-watching" role="note">${tn("guestWatching")}</p>
201
+ <${Terminal} key=${name} name=${name} lease=${lease} density=${density} every=${GUEST_PANE_MS} />`;
191
202
  else body = html`<${Terminal} key=${name} name=${name} lease=${lease} density=${density} />
192
203
  <${ViewIdentity} it=${it} viewOnly=${viewOnly} onEdit=${() => setDialog("edit")} />`;
193
204
 
194
205
  return html`<div data-effect-panel="view" class="panel p-view">
195
206
  <${PanelHeader} title=${it ? (it.display_name || it.instance_name) : tn("title")}
196
207
  sub=${it ? html`<span class="status"><span class=${`dot ${it.status === "running" ? "ok" : it.status === "crashed" ? "bad" : "off"}`} aria-hidden="true"></span>${tn(STATUS_KEYS[it.status] || "statusUnknown")}</span>` : null}
197
- nav=${it && !viewOnly ? html`<${InstanceSwitch} name=${name} current="view" />` : null}>${actions}</${PanelHeader}>
208
+ nav=${it && (guest ? trusted : !viewOnly) ? html`<${InstanceSwitch} name=${name} current="view" guest=${guest} />` : null}>${actions}</${PanelHeader}>
198
209
  ${body}
199
210
  ${open === "edit" && it ? html`<${EditProfile} key=${navKey} it=${it} onClose=${() => setDialog(null)} />` : null}
200
211
  ${open === "help" ? html`<${HelpDialog} onClose=${() => setDialog(null)} />` : null}
201
212
  </div>`;
202
213
  }
203
214
 
215
+ /** #2855: how often a guest's View reads the pane (the server allows it two reads a second). */
216
+ const GUEST_PANE_MS = 1000;
204
217
  /** The live terminal: the pane every 800 ms (passive), drawn as escaped markup, its font fitted to the pane's grid. */
205
- function Terminal({ name, lease, density }) {
218
+ function Terminal({ name, lease, density, every = 800 }) {
206
219
  const term = useRef(null), pre = useRef(null);
207
220
  const grid = useRef({ cols: 0, rows: 0, applied: 0, key: "" });
208
221
  const [problem, setProblem] = useState(null);
@@ -246,7 +259,8 @@ function Terminal({ name, lease, density }) {
246
259
  try {
247
260
  const r = await lease.fetch(`/api/pane/${encodeURIComponent(name)}`);
248
261
  if (!reads.live(token)) return;
249
- if (!r.ok) { setProblem(r.status === 404 ? tn("paneUnavailable") : tn("paneFailed", { name, status: r.status })); return; }
262
+ if (r.status === 429) return; // #2855: a guest over its read limit keeps the last frame
263
+ if (!r.ok) { setProblem(r.status === 404 ? tn("paneUnavailable") : r.status === 403 && guestPage() ? tn("guestNeedsTrusted") : tn("paneFailed", { name, status: r.status })); return; }
250
264
  const text = await r.text();
251
265
  if (!reads.live(token) || !pre.current) return;
252
266
  const c = Number(r.headers.get("X-Pane-Cols")), rw = Number(r.headers.get("X-Pane-Rows"));
@@ -259,7 +273,7 @@ function Terminal({ name, lease, density }) {
259
273
  finally { reads.end(token); }
260
274
  };
261
275
  refresh();
262
- lease.interval(refresh, 800);
276
+ lease.interval(refresh, every);
263
277
  let timer = null;
264
278
  const schedule = () => { lease.clear(timer); timer = lease.timeout(() => { grid.current.key = ""; fit(); }, 80); };
265
279
  lease.on(window, "resize", schedule);
@@ -210,6 +210,9 @@ register("view", {
210
210
  "title": "View",
211
211
  "notFound": "No instance called “{name}”",
212
212
  "notFoundHint": "It may have been deleted or renamed.",
213
+ "guestWatching": "👁 Watching only. You can't type here; send a message in Chat instead.",
214
+ "guestNeedsTrusted": "Watching needs Trusted access",
215
+ "guestNeedsTrustedHint": "Your host gave you chat access to this agent. Ask them to make you Trusted in Settings → Guests.",
213
216
  "noInstances": "No instances yet",
214
217
  "paneUnavailable": "This instance's terminal is not available (is it stopped?)",
215
218
  "rosterFailedShort": "The instance list could not be loaded.",
@@ -453,6 +456,9 @@ register("view", {
453
456
  "title": "檢視",
454
457
  "notFound": "沒有叫「{name}」的 instance",
455
458
  "notFoundHint": "它可能已被刪除或改名。",
459
+ "guestWatching": "👁 只能觀看。這裡不能輸入;要說話請到聊天。",
460
+ "guestNeedsTrusted": "觀看需要「信任」權限",
461
+ "guestNeedsTrustedHint": "主人給你的是這個 agent 的聊天權限。請他在設定 → 訪客把你改成「信任」。",
456
462
  "noInstances": "還沒有 instance",
457
463
  "paneUnavailable": "無法取得這個 instance 的終端畫面(它是否已停止?)",
458
464
  "rosterFailedShort": "無法載入 instance 清單。",
@@ -1,7 +1,7 @@
1
1
  // #1939 S2b (design §0.1): "Authorize this browser". The app shows this browser's state — verified (until when), a
2
2
  // Confirm card waiting in the account's Discord or Telegram DM (with its countdown), or why it can't be authorized here —
3
3
  // and asks for the card. The card itself is the gate: nothing here can authorize anything.
4
- import { html, useEffect, useRef, useState } from "./app-html.js";
4
+ import { html, useEffect, useLayoutEffect, useRef, useState } from "./app-html.js";
5
5
  import { register, t } from "./app-i18n.js";
6
6
  import { guestPage } from "./app-store.js";
7
7
 
@@ -18,7 +18,7 @@ register("webauth", {
18
18
  reason_not_admin: "Your account is not a fleet admin here.",
19
19
  reason_not_admin_session: "Guests can't authorize.",
20
20
  reason_token_rotated: "The dashboard's token changed: sign in again.",
21
- reason_public_link: "Not on the temporary public link.",
21
+ reason_public_link: "This sign-in can't be authorized over this link.",
22
22
  reason_named_link_off: "Over your named link: turn on \"Also over my named link\" in Settings → Access & security on this computer.",
23
23
  reason_quick_link_off: "Over the temporary public link: turn on \"Also over the temporary public link\" in Settings → Access & security on this computer.",
24
24
  reason_not_session: "Sign in to authorize.",
@@ -31,6 +31,7 @@ register("webauth", {
31
31
  verifiedShort: "Verified",
32
32
  authorizeShort: "Authorize",
33
33
  authorizeWhy: "Not verified: authorize this browser to speak as you",
34
+ notVerifiedWhy: "Not verified: {0}",
34
35
  waitingShort: "Waiting for your Confirm ({0})",
35
36
  },
36
37
  "zh-TW": {
@@ -45,7 +46,7 @@ register("webauth", {
45
46
  reason_not_admin: "你的帳號在這裡不是 fleet 管理者。",
46
47
  reason_not_admin_session: "訪客無法授權。",
47
48
  reason_token_rotated: "儀表板的 token 已變更:請重新登入。",
48
- reason_public_link: "臨時公開連結上無法授權。",
49
+ reason_public_link: "這個登入無法透過這個連結授權。",
49
50
  reason_named_link_off: "透過固定網域:請在這台電腦的 設定 → 存取與安全 開啟「也允許透過我的固定網域」。",
50
51
  reason_quick_link_off: "透過臨時公開連結:請在這台電腦的 設定 → 存取與安全 開啟「也允許透過臨時公開連結」。",
51
52
  reason_not_session: "登入後才能授權。",
@@ -58,6 +59,7 @@ register("webauth", {
58
59
  verifiedShort: "已驗證",
59
60
  authorizeShort: "授權",
60
61
  authorizeWhy: "未驗證:授權這個瀏覽器以你的身分發言",
62
+ notVerifiedWhy: "未驗證:{0}",
61
63
  waitingShort: "等待確認({0})",
62
64
  },
63
65
  });
@@ -155,26 +157,46 @@ export function AuthorizeChip() {
155
157
  * The composer's row (#2215, the user's request, 2026-10-19): the same states as AuthorizeChip, each kept to a few words so
156
158
  * they share one row with the key hint. What a state would have said at length is in its tooltip and its accessible
157
159
  * name: when "Verified" ends, why it can't be authorized, the countdown's ask. A tap on "✓ Verified" shows when it
158
- * ends (touch has no hover) in a bubble above the row, until the next tap, a tap elsewhere or Escape. What pressing
159
- * Authorize answered (sent, refused) is said in the row itself, in the hint's place (#2216 review: a bubble left over the
160
- * composer covered Attach and what was being typed, with nothing to close it).
160
+ * ends, and a tap on "Not verified" why it can't be authorized here (#2889; touch has no hover), in a bubble above the
161
+ * composer, until the next tap, a tap or key elsewhere, or Escape. What pressing Authorize answered (sent, refused) is
162
+ * said in the row itself, in the hint's place (#2216 review: a bubble left over the composer covered Attach and what was
163
+ * being typed, with nothing to close it).
161
164
  */
162
165
  export function ComposerAuth() {
163
166
  const a = useWebAuthorization();
164
167
  const [open, setOpen] = useState(false);
165
- const tip = useRef("wa-tip-" + Math.random().toString(36).slice(2, 8));
168
+ const tip = useRef("wa-tip-" + Math.random().toString(36).slice(2, 8)), opener = useRef(null);
166
169
  useEffect(() => { setOpen(false); }, [a.st && a.st.state]); // a new state closes the bubble
170
+ // #2889: a tap, focus or key (Escape too) anywhere else closes it, even where a tapped button never takes focus (Safari);
171
+ // on the button itself, its own handlers decide.
172
+ useEffect(() => {
173
+ if (!open) return undefined;
174
+ const doc = globalThis.document, kinds = ["pointerdown", "focusin", "keydown"];
175
+ const away = (e) => { if (!opener.current || !opener.current.contains(e.target)) setOpen(false); };
176
+ for (const k of kinds) doc.addEventListener(k, away, true);
177
+ return () => { for (const k of kinds) doc.removeEventListener(k, away, true); };
178
+ }, [open]);
179
+ // Above the whole composer, not over it (#2216): lifted by the composer's height, measured when it opens.
180
+ const bubble = useRef(null);
181
+ useLayoutEffect(() => {
182
+ const el = bubble.current, row = el && el.parentElement && el.parentElement.closest(".composer-row");
183
+ const composer = row && row.parentElement ? row.parentElement.querySelector(".composer") : null;
184
+ if (!el || !open || !composer) { if (el) el.style.removeProperty("bottom"); return; }
185
+ const lift = Math.max(0, Math.round(row.getBoundingClientRect().top - composer.getBoundingClientRect().top));
186
+ el.style.setProperty("bottom", `calc(100% + ${lift + 4}px)`);
187
+ }, [open]);
167
188
  if (guestPage()) return null;
168
189
  if (!a.st) return null;
169
190
  const st = a.st, id = tip.current;
170
191
  const said = a.notice ? html`<span class="webauth-notice" role="status">${a.notice}</span>` : null;
192
+ // The words in the row, a button whose tap shows `text` in the bubble; `title` keeps the hover on a desk.
193
+ const tipped = (cls, label, name, text) => html`<button type="button" class=${cls} ref=${opener} title=${text} aria-label=${name}
194
+ aria-expanded=${open ? "true" : "false"} aria-controls=${id} onClick=${() => setOpen((v) => !v)} onBlur=${() => setOpen(false)}
195
+ onKeyDown=${(e) => { if (e.key === "Escape" && open) { e.stopPropagation(); setOpen(false); } }}>${label}</button><span
196
+ id=${id} ref=${bubble} class="webauth-tip" role="tooltip" hidden=${!open}>${text}</span>`;
171
197
  if (st.state === "verified") {
172
198
  const until = tn("verified", clock(st.until));
173
- return html`<span class="webauth-row" data-state="verified">
174
- <button type="button" class="webauth-ok" title=${until} aria-label=${`✓ ${until}`} aria-expanded=${open ? "true" : "false"}
175
- aria-controls=${id} onClick=${() => setOpen((v) => !v)} onBlur=${() => setOpen(false)}
176
- onKeyDown=${(e) => { if (e.key === "Escape" && open) { e.stopPropagation(); setOpen(false); } }}>✓ ${tn("verifiedShort")}</button><span
177
- id=${id} class="webauth-tip" role="tooltip" hidden=${!open}>${until}</span>${said}</span>`;
199
+ return html`<span class="webauth-row" data-state="verified">${tipped("webauth-ok", `✓ ${tn("verifiedShort")}`, `✓ ${until}`, until)}${said}</span>`;
178
200
  }
179
201
  if (st.state === "pending") {
180
202
  const asks = tn("waiting", mmss(a.left));
@@ -185,7 +207,7 @@ export function ComposerAuth() {
185
207
  title=${tn("authorizeWhy")} aria-label=${tn("authorizeWhy")} onClick=${a.ask}>${tn("authorizeShort")}</button>${said}</span>`;
186
208
  }
187
209
  const why = REASONS.includes(st.reason) ? tn(`reason_${st.reason}`) : tn("reason_other");
188
- return html`<span class="webauth-row" data-state="none"><span class="note" title=${why}>${tn("notVerified")}<span class="sr-only">: ${why}</span></span>${fixable(st.reason)
210
+ return html`<span class="webauth-row" data-state="none">${tipped("webauth-why", tn("notVerified"), tn("notVerifiedWhy", why), why)}${fixable(st.reason)
189
211
  ? html` · <a href="/settings/access" title=${why}>${tn("settings")}</a>` : null}</span>`;
190
212
  }
191
213
 
@@ -63,6 +63,9 @@ export declare function formatDiscordUsageActivity(payload: UsagePayload): strin
63
63
  /** True if the path belongs to the usage feature (so the caller can skip the
64
64
  * global web-token gate and let this module answer, like isViewPath). */
65
65
  export declare function isUsagePath(path: string): boolean;
66
+ /** #2855: whether this read forces a refresh — asked for, and not a guest's (it reads the snapshot the fleet keeps, which
67
+ * is refreshed behind it as for anyone). */
68
+ export declare function usageForce(req: IncomingMessage, url: URL): boolean;
66
69
  /**
67
70
  * Handle a usage API request. Returns true if the request was ours (and has
68
71
  * been answered), false otherwise.
@@ -6,6 +6,7 @@ import { join } from "node:path";
6
6
  import { getAgendHome } from "../paths.js";
7
7
  import { t } from "../locale.js";
8
8
  import { usageExpiryText, usageResetSinceText, usageResetText, usageRowName, usageStaleText, usageText } from "./i18n.js";
9
+ import { guestRequestOf } from "../web-guest-access.js";
9
10
  /** Keep primary account limits even at zero; hide only unused per-model noise. */
10
11
  export function isVisibleUsageMetric(metric) {
11
12
  return !(metric.scope === "model"
@@ -579,6 +580,9 @@ function resetSuffix(resetsAt) {
579
580
  export function isUsagePath(path) {
580
581
  return path === "/api/ai-usage";
581
582
  }
583
+ /** #2855: whether this read forces a refresh — asked for, and not a guest's (it reads the snapshot the fleet keeps, which
584
+ * is refreshed behind it as for anyone). */
585
+ export function usageForce(req, url) { return url.searchParams.has("force") && !guestRequestOf(req); }
582
586
  /**
583
587
  * Handle a usage API request. Returns true if the request was ours (and has
584
588
  * been answered), false otherwise.
@@ -596,7 +600,7 @@ export function handleUsageRequest(req, res, url, ctx) {
596
600
  }
597
601
  // #1585: the panel opens from the last snapshot at once (refreshing behind it); never a browser or proxy cache — the
598
602
  // snapshot lives in this process, behind the same gate as every read, and goes when a request may not see it.
599
- getUsageSnapshot(url.searchParams.has("force"), ctx.getActiveUsageProviderIds?.(), { allowStale: true })
603
+ getUsageSnapshot(usageForce(req, url), ctx.getActiveUsageProviderIds?.(), { allowStale: true })
600
604
  .then(payload => json(res, 200, payload))
601
605
  .catch(err => {
602
606
  ctx.logger.debug({ err }, "ai-usage fetch failed");
@@ -1 +1 @@
1
- {"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"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"}
@@ -135,6 +135,8 @@ export declare function cardPicture(ctx: {
135
135
  } | null;
136
136
  /** Every person-set card, for a status read (never creates profiles.db or its table). */
137
137
  export declare function humanCards(dataDir: string): ReturnType<typeof HumanCardStore.all>;
138
+ /** For tests: forget the guests' read counts and shared captures. */
139
+ export declare function resetGuestPanes(): void;
138
140
  /** A pane's logical grid size in cells, as tmux sees it. */
139
141
  export interface PaneSize {
140
142
  cols: number;
package/dist/view-api.js CHANGED
@@ -45,6 +45,8 @@ import { evaluateWebRequest } from "./web-auth.js";
45
45
  import { bannerFocusOk, HumanCardStore, resolveCard } from "./web-card.js";
46
46
  import { IdentityColorStore } from "./web-identity-color.js";
47
47
  import { effectiveAppearanceLimits } from "./web-appearance-limits.js";
48
+ import { GUEST_PANE_MAX_BYTES, GUEST_PANE_READS, GUEST_PANE_SHARE_MS, guestRequestOf } from "./web-guest-access.js";
49
+ import { OfficeWriteLimiter } from "./web-office-store.js";
48
50
  const execFileP = promisify(execFile);
49
51
  const __dirname = dirname(fileURLToPath(import.meta.url));
50
52
  export function resolveInstanceIdentity(input) {
@@ -228,6 +230,61 @@ function tmuxArgs(rest) {
228
230
  const socket = getTmuxSocketName();
229
231
  return socket ? ["-L", socket, ...rest] : rest;
230
232
  }
233
+ /**
234
+ * #2855: a trusted guest's read-only View. Per account: GUEST_PANE_READS reads a second, of at most `panes` agents at
235
+ * once (agents read within `panesWindowMs`). Every guest viewer of an agent reads one shared capture, at most
236
+ * GUEST_PANE_SHARE_MS old — one tmux read per window however many watch. At most GUEST_PANE_MAX_BYTES (the end of it).
237
+ */
238
+ const paneReadLimiter = () => new OfficeWriteLimiter(undefined, { perWindow: GUEST_PANE_READS.perWindow, windowMs: GUEST_PANE_READS.windowMs });
239
+ let guestPaneReads = paneReadLimiter();
240
+ const guestPaneAgents = new Map(); // account → agent → when it was last read (ms)
241
+ const sharedCaptures = new Map();
242
+ /** For tests: forget the guests' read counts and shared captures. */
243
+ export function resetGuestPanes() { guestPaneReads = paneReadLimiter(); guestPaneAgents.clear(); sharedCaptures.clear(); }
244
+ function guestPane(ctx, name, guest, res) {
245
+ if (!guest.trusted?.()) {
246
+ json(res, 403, { error: "guest_not_trusted" });
247
+ return;
248
+ }
249
+ const account = `${guest.owner.adapterId}:${guest.owner.userId}`, now = performance.now();
250
+ const agents = guestPaneAgents.get(account) ?? new Map();
251
+ for (const [agent, at] of agents)
252
+ if (now - at >= GUEST_PANE_READS.panesWindowMs)
253
+ agents.delete(agent);
254
+ if (!agents.has(name) && agents.size >= GUEST_PANE_READS.panes) {
255
+ json(res, 429, { error: "guest_view_too_many_agents" });
256
+ return;
257
+ }
258
+ const limit = guestPaneReads.check(account);
259
+ if (!limit.ok) {
260
+ res.setHeader("Retry-After", String(limit.retry_after_s));
261
+ json(res, 429, { error: "guest_view_rate_limited", retry_after_s: limit.retry_after_s });
262
+ return;
263
+ }
264
+ guestPaneReads.record(account);
265
+ agents.set(name, now);
266
+ guestPaneAgents.set(account, agents);
267
+ let shared = sharedCaptures.get(name);
268
+ if (!shared || now - shared.at >= GUEST_PANE_SHARE_MS) {
269
+ shared = { at: now, capture: capturePane(ctx, name) };
270
+ sharedCaptures.set(name, shared);
271
+ shared.capture.catch(() => { if (sharedCaptures.get(name) === shared)
272
+ sharedCaptures.delete(name); });
273
+ }
274
+ shared.capture.then(({ text, size }) => {
275
+ const headers = { "Content-Type": "text/plain; charset=utf-8", "Cache-Control": "private, no-store" };
276
+ if (size) {
277
+ headers["X-Pane-Cols"] = String(size.cols);
278
+ headers["X-Pane-Rows"] = String(size.rows);
279
+ }
280
+ const bytes = Buffer.from(text, "utf8");
281
+ res.writeHead(200, headers);
282
+ // Over the cap: its end, from the first whole line in it (never mid-character or mid-escape sequence).
283
+ const tail = bytes.length > GUEST_PANE_MAX_BYTES ? bytes.subarray(bytes.length - GUEST_PANE_MAX_BYTES) : bytes;
284
+ const line = tail === bytes ? -1 : tail.indexOf(0x0a);
285
+ res.end(line >= 0 ? tail.subarray(line + 1) : tail);
286
+ }, (err) => { ctx.logger.debug({ err, name }, "capture-pane failed (guest)"); res.writeHead(200, { "Content-Type": "text/plain" }); res.end(""); });
287
+ }
231
288
  /**
232
289
  * Capture a pane's contents (with ANSI escapes) **and** its logical grid size.
233
290
  *
@@ -330,6 +387,13 @@ export function handleViewRequest(req, res, url, ctx) {
330
387
  json(res, 404, { error: "unknown instance" });
331
388
  return true;
332
389
  }
390
+ // #2855: a guest (the gate bound it, and checked the agent is in its scope) — Trusted only, within its limits, and
391
+ // reading the capture every guest viewer of this agent shares.
392
+ const guest = guestRequestOf(req);
393
+ if (guest) {
394
+ guestPane(ctx, name, guest, res);
395
+ return true;
396
+ }
333
397
  capturePane(ctx, name)
334
398
  .then(({ text, size }) => {
335
399
  const headers = { "Content-Type": "text/plain; charset=utf-8" };