@songsid/agend 2.2.0-beta.2 → 2.2.0-beta.20

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 (389) hide show
  1. package/README.md +40 -24
  2. package/README.zh-TW.md +40 -24
  3. package/dist/agent-cli-instructions.md +6 -2
  4. package/dist/agent-cli.js +15 -7
  5. package/dist/agent-cli.js.map +1 -1
  6. package/dist/agent-endpoint.js +3 -0
  7. package/dist/agent-endpoint.js.map +1 -1
  8. package/dist/agent-whats-new.js +16 -4
  9. package/dist/agent-whats-new.js.map +1 -1
  10. package/dist/auth-api.d.ts +3 -1
  11. package/dist/auth-api.js +17 -1
  12. package/dist/auth-api.js.map +1 -1
  13. package/dist/backend/antigravity.d.ts +33 -0
  14. package/dist/backend/antigravity.js +126 -18
  15. package/dist/backend/antigravity.js.map +1 -1
  16. package/dist/backend/claude-carry.d.ts +22 -0
  17. package/dist/backend/claude-carry.js +170 -0
  18. package/dist/backend/claude-carry.js.map +1 -0
  19. package/dist/backend/claude-code.d.ts +65 -2
  20. package/dist/backend/claude-code.js +226 -33
  21. package/dist/backend/claude-code.js.map +1 -1
  22. package/dist/backend/codex-metadata.d.ts +33 -0
  23. package/dist/backend/codex-metadata.js +122 -18
  24. package/dist/backend/codex-metadata.js.map +1 -1
  25. package/dist/backend/codex.d.ts +3 -0
  26. package/dist/backend/codex.js +17 -1
  27. package/dist/backend/codex.js.map +1 -1
  28. package/dist/backend/credential-profile.d.ts +40 -3
  29. package/dist/backend/credential-profile.js +113 -5
  30. package/dist/backend/credential-profile.js.map +1 -1
  31. package/dist/backend/effort-metadata.d.ts +37 -1
  32. package/dist/backend/effort-metadata.js +86 -15
  33. package/dist/backend/effort-metadata.js.map +1 -1
  34. package/dist/backend/grok.d.ts +4 -0
  35. package/dist/backend/grok.js +14 -0
  36. package/dist/backend/grok.js.map +1 -1
  37. package/dist/backend/kiro.d.ts +27 -1
  38. package/dist/backend/kiro.js +63 -10
  39. package/dist/backend/kiro.js.map +1 -1
  40. package/dist/backend/launch-effort.d.ts +61 -0
  41. package/dist/backend/launch-effort.js +170 -0
  42. package/dist/backend/launch-effort.js.map +1 -0
  43. package/dist/backend/muse.d.ts +84 -0
  44. package/dist/backend/muse.js +449 -53
  45. package/dist/backend/muse.js.map +1 -1
  46. package/dist/backend/types.d.ts +48 -2
  47. package/dist/backend/types.js +12 -1
  48. package/dist/backend/types.js.map +1 -1
  49. package/dist/backend-command.d.ts +91 -0
  50. package/dist/backend-command.js +122 -0
  51. package/dist/backend-command.js.map +1 -0
  52. package/dist/background-work-ended.d.ts +18 -0
  53. package/dist/background-work-ended.js +30 -0
  54. package/dist/background-work-ended.js.map +1 -0
  55. package/dist/cache-service.d.ts +2 -0
  56. package/dist/cache-service.js +2 -1
  57. package/dist/cache-service.js.map +1 -1
  58. package/dist/channel/adapters/discord.d.ts +26 -1
  59. package/dist/channel/adapters/discord.js +103 -3
  60. package/dist/channel/adapters/discord.js.map +1 -1
  61. package/dist/channel/adapters/telegram.d.ts +35 -3
  62. package/dist/channel/adapters/telegram.js +122 -23
  63. package/dist/channel/adapters/telegram.js.map +1 -1
  64. package/dist/channel/mcp-tools.js +5 -3
  65. package/dist/channel/mcp-tools.js.map +1 -1
  66. package/dist/channel/message-edit-errors.d.ts +5 -0
  67. package/dist/channel/message-edit-errors.js +24 -0
  68. package/dist/channel/message-edit-errors.js.map +1 -0
  69. package/dist/channel/telegram-markdown.d.ts +6 -0
  70. package/dist/channel/telegram-markdown.js +104 -0
  71. package/dist/channel/telegram-markdown.js.map +1 -0
  72. package/dist/channel/tool-router.d.ts +2 -0
  73. package/dist/channel/tool-router.js +6 -5
  74. package/dist/channel/tool-router.js.map +1 -1
  75. package/dist/channel/types.d.ts +46 -4
  76. package/dist/cli.js +184 -34
  77. package/dist/cli.js.map +1 -1
  78. package/dist/command-table.d.ts +2 -2
  79. package/dist/command-table.js +5 -2
  80. package/dist/command-table.js.map +1 -1
  81. package/dist/compact-watch.d.ts +86 -0
  82. package/dist/compact-watch.js +288 -0
  83. package/dist/compact-watch.js.map +1 -0
  84. package/dist/config-validator.js +55 -5
  85. package/dist/config-validator.js.map +1 -1
  86. package/dist/config.d.ts +1 -0
  87. package/dist/config.js +2 -1
  88. package/dist/config.js.map +1 -1
  89. package/dist/cross-instance-envelope.js +2 -0
  90. package/dist/cross-instance-envelope.js.map +1 -1
  91. package/dist/daemon.d.ts +129 -1
  92. package/dist/daemon.js +754 -94
  93. package/dist/daemon.js.map +1 -1
  94. package/dist/delivery-outbox.d.ts +64 -8
  95. package/dist/delivery-outbox.js +315 -24
  96. package/dist/delivery-outbox.js.map +1 -1
  97. package/dist/delivery-reconciliation.d.ts +18 -1
  98. package/dist/delivery-reconciliation.js +67 -2
  99. package/dist/delivery-reconciliation.js.map +1 -1
  100. package/dist/doctor.js +7 -0
  101. package/dist/doctor.js.map +1 -1
  102. package/dist/fleet-context.d.ts +12 -1
  103. package/dist/fleet-manager.d.ts +392 -19
  104. package/dist/fleet-manager.js +2030 -275
  105. package/dist/fleet-manager.js.map +1 -1
  106. package/dist/forged-envelope-scan.d.ts +4 -3
  107. package/dist/forged-envelope-scan.js +4 -3
  108. package/dist/forged-envelope-scan.js.map +1 -1
  109. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +84 -16
  110. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +16 -1
  111. package/dist/general-knowledge/skills/model-discovery/SKILL.md +4 -1
  112. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +4 -0
  113. package/dist/host-memory.d.ts +10 -0
  114. package/dist/host-memory.js +33 -1
  115. package/dist/host-memory.js.map +1 -1
  116. package/dist/human-delivery-receipts.d.ts +83 -0
  117. package/dist/human-delivery-receipts.js +194 -0
  118. package/dist/human-delivery-receipts.js.map +1 -0
  119. package/dist/install-lock.d.ts +18 -1
  120. package/dist/install-lock.js +30 -3
  121. package/dist/install-lock.js.map +1 -1
  122. package/dist/instance-avatar.d.ts +5 -4
  123. package/dist/instance-avatar.js +12 -8
  124. package/dist/instance-avatar.js.map +1 -1
  125. package/dist/instance-config-impact.js +1 -0
  126. package/dist/instance-config-impact.js.map +1 -1
  127. package/dist/instance-lifecycle.d.ts +25 -6
  128. package/dist/instance-lifecycle.js +76 -27
  129. package/dist/instance-lifecycle.js.map +1 -1
  130. package/dist/instructions.d.ts +1 -1
  131. package/dist/instructions.js +3 -3
  132. package/dist/instructions.js.map +1 -1
  133. package/dist/kiro-compact-pane.d.ts +38 -0
  134. package/dist/kiro-compact-pane.js +57 -0
  135. package/dist/kiro-compact-pane.js.map +1 -0
  136. package/dist/kiro-log-gate.d.ts +42 -0
  137. package/dist/kiro-log-gate.js +39 -0
  138. package/dist/kiro-log-gate.js.map +1 -0
  139. package/dist/launchd-handoff.d.ts +43 -0
  140. package/dist/launchd-handoff.js +56 -0
  141. package/dist/launchd-handoff.js.map +1 -0
  142. package/dist/locale.js +268 -42
  143. package/dist/locale.js.map +1 -1
  144. package/dist/log-service.d.ts +99 -0
  145. package/dist/log-service.js +243 -0
  146. package/dist/log-service.js.map +1 -0
  147. package/dist/log-steps.d.ts +169 -0
  148. package/dist/log-steps.js +858 -0
  149. package/dist/log-steps.js.map +1 -0
  150. package/dist/login-controller.d.ts +20 -3
  151. package/dist/login-controller.js +71 -19
  152. package/dist/login-controller.js.map +1 -1
  153. package/dist/login-flows.d.ts +5 -2
  154. package/dist/login-flows.js +5 -4
  155. package/dist/login-flows.js.map +1 -1
  156. package/dist/login-shell.d.ts +21 -0
  157. package/dist/login-shell.js +98 -0
  158. package/dist/login-shell.js.map +1 -0
  159. package/dist/memory-pressure.d.ts +13 -1
  160. package/dist/memory-pressure.js +50 -10
  161. package/dist/memory-pressure.js.map +1 -1
  162. package/dist/needs-you-hub.js +2 -0
  163. package/dist/needs-you-hub.js.map +1 -1
  164. package/dist/needs-you-live.d.ts +6 -0
  165. package/dist/needs-you-live.js +23 -3
  166. package/dist/needs-you-live.js.map +1 -1
  167. package/dist/outbound-handlers.d.ts +100 -0
  168. package/dist/outbound-handlers.js +277 -93
  169. package/dist/outbound-handlers.js.map +1 -1
  170. package/dist/outbound-schemas.d.ts +30 -15
  171. package/dist/outbound-schemas.js +23 -5
  172. package/dist/outbound-schemas.js.map +1 -1
  173. package/dist/provider-probe.d.ts +29 -0
  174. package/dist/provider-probe.js +198 -2
  175. package/dist/provider-probe.js.map +1 -1
  176. package/dist/public-link-progress.d.ts +1 -1
  177. package/dist/public-link-progress.js +8 -2
  178. package/dist/public-link-progress.js.map +1 -1
  179. package/dist/public-preview.d.ts +101 -0
  180. package/dist/public-preview.js +236 -0
  181. package/dist/public-preview.js.map +1 -0
  182. package/dist/public-web-gateway.d.ts +2 -0
  183. package/dist/public-web-gateway.js +20 -6
  184. package/dist/public-web-gateway.js.map +1 -1
  185. package/dist/public-web-link.d.ts +24 -1
  186. package/dist/public-web-link.js +63 -9
  187. package/dist/public-web-link.js.map +1 -1
  188. package/dist/quickstart-api.d.ts +1 -1
  189. package/dist/quickstart-api.js +8 -6
  190. package/dist/quickstart-api.js.map +1 -1
  191. package/dist/quickstart.d.ts +12 -0
  192. package/dist/quickstart.js +36 -6
  193. package/dist/quickstart.js.map +1 -1
  194. package/dist/reply-buttons-controller.d.ts +89 -5
  195. package/dist/reply-buttons-controller.js +273 -8
  196. package/dist/reply-buttons-controller.js.map +1 -1
  197. package/dist/reply-buttons.d.ts +48 -3
  198. package/dist/reply-buttons.js +105 -10
  199. package/dist/reply-buttons.js.map +1 -1
  200. package/dist/reply-polls.d.ts +85 -0
  201. package/dist/reply-polls.js +154 -0
  202. package/dist/reply-polls.js.map +1 -0
  203. package/dist/restart-guard.d.ts +6 -3
  204. package/dist/restart-guard.js +6 -3
  205. package/dist/restart-guard.js.map +1 -1
  206. package/dist/restart-progress.d.ts +33 -2
  207. package/dist/restart-progress.js +30 -2
  208. package/dist/restart-progress.js.map +1 -1
  209. package/dist/sd-notify.d.ts +22 -1
  210. package/dist/sd-notify.js +63 -10
  211. package/dist/sd-notify.js.map +1 -1
  212. package/dist/service-activation.d.ts +15 -7
  213. package/dist/service-activation.js +42 -26
  214. package/dist/service-activation.js.map +1 -1
  215. package/dist/service-installer.d.ts +55 -0
  216. package/dist/service-installer.js +90 -3
  217. package/dist/service-installer.js.map +1 -1
  218. package/dist/service-plan.d.ts +11 -0
  219. package/dist/service-plan.js +23 -0
  220. package/dist/service-plan.js.map +1 -1
  221. package/dist/settings-api.js +14 -4
  222. package/dist/settings-api.js.map +1 -1
  223. package/dist/settings-change.js +4 -2
  224. package/dist/settings-change.js.map +1 -1
  225. package/dist/settings-effect.js +2 -0
  226. package/dist/settings-effect.js.map +1 -1
  227. package/dist/spawn-gate.js +5 -1
  228. package/dist/spawn-gate.js.map +1 -1
  229. package/dist/spawn-hold-reply.d.ts +12 -0
  230. package/dist/spawn-hold-reply.js +39 -0
  231. package/dist/spawn-hold-reply.js.map +1 -0
  232. package/dist/systemd-peer-bus.d.ts +95 -0
  233. package/dist/systemd-peer-bus.js +430 -0
  234. package/dist/systemd-peer-bus.js.map +1 -0
  235. package/dist/systemd-runtime.d.ts +27 -1
  236. package/dist/systemd-runtime.js +69 -7
  237. package/dist/systemd-runtime.js.map +1 -1
  238. package/dist/tips.js +1 -1
  239. package/dist/tips.js.map +1 -1
  240. package/dist/tool-permissions.js +3 -3
  241. package/dist/tool-permissions.js.map +1 -1
  242. package/dist/tool-progress.js +3 -2
  243. package/dist/tool-progress.js.map +1 -1
  244. package/dist/topic-commands.d.ts +71 -4
  245. package/dist/topic-commands.js +167 -34
  246. package/dist/topic-commands.js.map +1 -1
  247. package/dist/transcript-delta-reader.d.ts +3 -3
  248. package/dist/transcript-delta-reader.js +8 -8
  249. package/dist/transcript-delta-reader.js.map +1 -1
  250. package/dist/transcript-jsonl.d.ts +85 -3
  251. package/dist/transcript-jsonl.js +156 -13
  252. package/dist/transcript-jsonl.js.map +1 -1
  253. package/dist/transcript-monitor.d.ts +11 -0
  254. package/dist/transcript-monitor.js +61 -13
  255. package/dist/transcript-monitor.js.map +1 -1
  256. package/dist/transcript-sources.d.ts +24 -0
  257. package/dist/transcript-sources.js +211 -56
  258. package/dist/transcript-sources.js.map +1 -1
  259. package/dist/tunnel/cloudflared.d.ts +7 -15
  260. package/dist/tunnel/cloudflared.js +36 -1
  261. package/dist/tunnel/cloudflared.js.map +1 -1
  262. package/dist/tunnel/purpose-lane.d.ts +5 -1
  263. package/dist/tunnel/purpose-lane.js +14 -7
  264. package/dist/tunnel/purpose-lane.js.map +1 -1
  265. package/dist/tunnel/types.d.ts +5 -1
  266. package/dist/tunnel/types.js.map +1 -1
  267. package/dist/turn-resume.d.ts +2 -0
  268. package/dist/turn-resume.js +1 -1
  269. package/dist/turn-resume.js.map +1 -1
  270. package/dist/types.d.ts +22 -0
  271. package/dist/ui/chat-commands.js +1 -0
  272. package/dist/ui/chat-mentions.js +63 -0
  273. package/dist/ui/chat-render.js +80 -10
  274. package/dist/ui/chat-store.js +70 -6
  275. package/dist/ui/chat-strings.js +62 -32
  276. package/dist/ui/chat-thread.js +199 -24
  277. package/dist/ui/chat-time.js +80 -0
  278. package/dist/ui/chat-tour.js +17 -14
  279. package/dist/ui/panel-chat.js +45 -21
  280. package/dist/ui/panel-details.js +2 -0
  281. package/dist/ui/panel-fleet.js +213 -58
  282. package/dist/ui/panel-log.js +428 -0
  283. package/dist/ui/panel-needs.js +14 -10
  284. package/dist/ui/panel-settings.js +82 -17
  285. package/dist/ui/preview-panel.js +55 -15
  286. package/dist/ui/preview-status.js +28 -0
  287. package/dist/ui/preview.js +44 -3
  288. package/dist/ui/settings-dialogs.js +11 -6
  289. package/dist/ui/settings-model.js +3 -1
  290. package/dist/ui/settings-strings.js +32 -12
  291. package/dist/ui/settings-token.js +8 -1
  292. package/dist/ui/settings-wizard.js +5 -3
  293. package/dist/ui/shared/app-i18n.js +41 -15
  294. package/dist/ui/shared/app-prefs.js +250 -0
  295. package/dist/ui/shared/app-route.js +6 -1
  296. package/dist/ui/shared/app-shell.js +165 -8
  297. package/dist/ui/shared/app-store.js +5 -1
  298. package/dist/ui/shared/app-stream.js +26 -5
  299. package/dist/ui/shared/app.css +170 -30
  300. package/dist/ui/shared/app.js +11 -1
  301. package/dist/ui/shared/fonts/README.md +1 -1
  302. package/dist/ui/shared/header-tools.js +83 -13
  303. package/dist/ui/shared/instance-nav.js +178 -51
  304. package/dist/ui/shared/instance-switch.js +8 -5
  305. package/dist/ui/shared/panel-view.js +21 -4
  306. package/dist/ui/shared/signin.js +15 -9
  307. package/dist/ui/shared/theme.js +39 -7
  308. package/dist/ui/shared/tokens.css +1 -1
  309. package/dist/ui/shared/ui-icons.js +2 -0
  310. package/dist/ui/shared/usage-dialog.js +23 -5
  311. package/dist/ui/shared/view-strings.js +40 -4
  312. package/dist/ui/signin.html +8 -3
  313. package/dist/unrecognised-prompt.d.ts +23 -0
  314. package/dist/unrecognised-prompt.js +74 -0
  315. package/dist/unrecognised-prompt.js.map +1 -0
  316. package/dist/update-check.d.ts +31 -0
  317. package/dist/update-check.js +47 -0
  318. package/dist/update-check.js.map +1 -1
  319. package/dist/update-install.d.ts +13 -1
  320. package/dist/update-install.js +16 -4
  321. package/dist/update-install.js.map +1 -1
  322. package/dist/update-launch.d.ts +48 -1
  323. package/dist/update-launch.js +159 -5
  324. package/dist/update-launch.js.map +1 -1
  325. package/dist/update-marker.d.ts +51 -0
  326. package/dist/update-marker.js +61 -0
  327. package/dist/update-marker.js.map +1 -1
  328. package/dist/usage/i18n-keys.d.ts +1 -1
  329. package/dist/usage/i18n-keys.js +1 -1
  330. package/dist/usage/i18n-keys.js.map +1 -1
  331. package/dist/usage/providers.d.ts +62 -13
  332. package/dist/usage/providers.js +256 -68
  333. package/dist/usage/providers.js.map +1 -1
  334. package/dist/usage/statusline-usage.d.ts +6 -2
  335. package/dist/usage/statusline-usage.js +10 -4
  336. package/dist/usage/statusline-usage.js.map +1 -1
  337. package/dist/view-api.js +31 -9
  338. package/dist/view-api.js.map +1 -1
  339. package/dist/web-api.d.ts +82 -4
  340. package/dist/web-api.js +632 -88
  341. package/dist/web-api.js.map +1 -1
  342. package/dist/web-auth.js +5 -2
  343. package/dist/web-auth.js.map +1 -1
  344. package/dist/web-chat-history.d.ts +26 -1
  345. package/dist/web-chat-history.js +47 -8
  346. package/dist/web-chat-history.js.map +1 -1
  347. package/dist/web-commands.d.ts +41 -5
  348. package/dist/web-commands.js +25 -7
  349. package/dist/web-commands.js.map +1 -1
  350. package/dist/web-login.d.ts +14 -0
  351. package/dist/web-login.js +4 -2
  352. package/dist/web-login.js.map +1 -1
  353. package/dist/web-mentions.d.ts +44 -0
  354. package/dist/web-mentions.js +75 -0
  355. package/dist/web-mentions.js.map +1 -0
  356. package/dist/web-prefs.d.ts +81 -0
  357. package/dist/web-prefs.js +297 -0
  358. package/dist/web-prefs.js.map +1 -0
  359. package/dist/web-preview.d.ts +14 -1
  360. package/dist/web-preview.js +35 -13
  361. package/dist/web-preview.js.map +1 -1
  362. package/dist/web-profile.d.ts +32 -0
  363. package/dist/web-profile.js +132 -0
  364. package/dist/web-profile.js.map +1 -0
  365. package/dist/web-reply-files.d.ts +45 -0
  366. package/dist/web-reply-files.js +223 -0
  367. package/dist/web-reply-files.js.map +1 -0
  368. package/dist/web-schedules.d.ts +12 -0
  369. package/dist/web-schedules.js +34 -0
  370. package/dist/web-schedules.js.map +1 -0
  371. package/dist/web-server-drain.d.ts +10 -0
  372. package/dist/web-server-drain.js +50 -0
  373. package/dist/web-server-drain.js.map +1 -0
  374. package/dist/web-session.d.ts +14 -0
  375. package/dist/web-session.js +11 -1
  376. package/dist/web-session.js.map +1 -1
  377. package/dist/web-settings-patch.d.ts +3 -1
  378. package/dist/web-settings-patch.js +4 -1
  379. package/dist/web-settings-patch.js.map +1 -1
  380. package/dist/web-shell-routes.d.ts +4 -0
  381. package/dist/web-shell-routes.js +9 -0
  382. package/dist/web-shell-routes.js.map +1 -1
  383. package/dist/web-upload.d.ts +135 -7
  384. package/dist/web-upload.js +315 -51
  385. package/dist/web-upload.js.map +1 -1
  386. package/launcher/install-admission.cjs +61 -6
  387. package/package.json +3 -3
  388. package/templates/launchd.plist.ejs +3 -1
  389. package/templates/systemd.service.ejs +2 -1
@@ -96,7 +96,7 @@ export declare const TELEGRAM_MENUS: {
96
96
  /** The fleet's forum group (its `chat` and `chat_administrators` scopes): the General topic and the instance topics. */
97
97
  readonly fleet: {
98
98
  readonly scopes: readonly ["general", "fleet"];
99
- readonly names: readonly ["status", "sysinfo", "dashboard", "web", "ctx", "compact", "steer", "btw", "clear", "model", "effort", "pause", "wake", "restart", "collab", "update", "profile", "doctor", "login", "usage", "tips", "visibility"];
99
+ readonly names: readonly ["status", "sysinfo", "dashboard", "web", "ctx", "compact", "steer", "btw", "clear", "model", "backend", "effort", "pause", "wake", "restart", "collab", "update", "profile", "doctor", "login", "usage", "tips", "visibility"];
100
100
  };
101
101
  /**
102
102
  * Every other chat (`default` and `all_group_chats`): ClassicBot private chats and groups, the ones with an agent and
@@ -104,7 +104,7 @@ export declare const TELEGRAM_MENUS: {
104
104
  */
105
105
  readonly classic: {
106
106
  readonly scopes: readonly ["classic", "none"];
107
- readonly names: readonly ["start", "stop", "compact", "steer", "btw", "clear", "model", "pause", "wake", "ctx"];
107
+ readonly names: readonly ["start", "stop", "compact", "steer", "btw", "clear", "model", "backend", "pause", "wake", "ctx"];
108
108
  };
109
109
  };
110
110
  export type TelegramMenu = keyof typeof TELEGRAM_MENUS;
@@ -65,6 +65,9 @@ export const COMMANDS = [
65
65
  { name: "compact", slash: true, denied: ["cmd.admin_required", "/compact"], scopes: inAgentChannels("channel-admin", NO_AGENT), telegram: tg(FLEET_ADMIN, FLEET_ADMIN, CHANNEL_ADMIN, NOBODY_NO_AGENT_START) },
66
66
  { name: "clear", slash: true, denied: PERMISSION_DENIED, scopes: inAgentChannels("channel-admin", NO_AGENT), telegram: tg(FLEET_ADMIN, FLEET_ADMIN, CHANNEL_ADMIN, NOBODY_NO_AGENT_START) },
67
67
  { name: "model", slash: true, denied: PERMISSION_DENIED, scopes: inAgentChannels("channel-admin", NO_AGENT), telegram: tg(FLEET_ADMIN, FLEET_ADMIN, CHANNEL_ADMIN, NOBODY_NO_AGENT_START) },
68
+ // #1806: exactly /model's row — it changes the same instance setting, and more of it. In a ClassicBot channel the
69
+ // handler (past this gate) says the agent is not switched by it: update_instance_config manages fleet.yaml only.
70
+ { name: "backend", slash: true, denied: PERMISSION_DENIED, scopes: inAgentChannels("channel-admin", NO_AGENT), telegram: tg(FLEET_ADMIN, FLEET_ADMIN, CHANNEL_ADMIN, NOBODY_NO_AGENT_START) },
68
71
  // Telegram has no ClassicBot /effort handler (the text goes to the agent).
69
72
  { name: "effort", slash: true, denied: PERMISSION_DENIED, scopes: inAgentChannels("channel-admin", NO_AGENT), telegram: tg(FLEET_ADMIN, FLEET_ADMIN, PASS) },
70
73
  // Telegram has no ClassicBot /collab handler (the text goes to the agent).
@@ -131,7 +134,7 @@ export const TELEGRAM_MENUS = {
131
134
  /** The fleet's forum group (its `chat` and `chat_administrators` scopes): the General topic and the instance topics. */
132
135
  fleet: {
133
136
  scopes: ["general", "fleet"],
134
- names: ["status", "sysinfo", "dashboard", "web", "ctx", "compact", "steer", "btw", "clear", "model", "effort",
137
+ names: ["status", "sysinfo", "dashboard", "web", "ctx", "compact", "steer", "btw", "clear", "model", "backend", "effort",
135
138
  "pause", "wake", "restart", "collab", "update", "profile", "doctor", "login", "usage", "tips", "visibility"],
136
139
  },
137
140
  /**
@@ -140,7 +143,7 @@ export const TELEGRAM_MENUS = {
140
143
  */
141
144
  classic: {
142
145
  scopes: ["classic", "none"],
143
- names: ["start", "stop", "compact", "steer", "btw", "clear", "model", "pause", "wake", "ctx"],
146
+ names: ["start", "stop", "compact", "steer", "btw", "clear", "model", "backend", "pause", "wake", "ctx"],
144
147
  },
145
148
  };
146
149
  /** True when the command asks more than `anyone` on Telegram in some of these scopes — what its menu lock says. */
@@ -1 +1 @@
1
- {"version":3,"file":"command-table.js","sourceRoot":"","sources":["../src/command-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-table.js","sourceRoot":"","sources":["../src/command-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export declare const COMPACT_WATCH_POLL_MS = 2000;
2
+ /** A long session's compaction can take minutes (one of 1M tokens took about two); ten is well past that. */
3
+ export declare const COMPACT_WATCH_TIMEOUT_MS: number;
4
+ export declare const COMPACT_WATCH_KEEP_MS: number;
5
+ export type CompactFormat = "claude" | "codex";
6
+ export type CompactState = "running" | "done" | "not_compacted" | "timeout" | "lost";
7
+ export interface CompactWatchView {
8
+ id: string;
9
+ state: CompactState;
10
+ }
11
+ /** The transcript's end just before the command was written (the daemon's). */
12
+ export interface CompactCheckpoint {
13
+ path: string;
14
+ ino: number;
15
+ size: number;
16
+ }
17
+ /** One launch of an instance, as a value: a respawn, pause/wake or new fence is another. */
18
+ export declare function launchIdentity(o: {
19
+ bootId: unknown;
20
+ spawnGeneration: unknown;
21
+ launchAttempt: unknown;
22
+ launchFenceEpoch: unknown;
23
+ }): string;
24
+ /** Whether one whole transcript record says the conversation was compacted (its own top-level fields only). */
25
+ export declare function isCompactionRecord(format: CompactFormat, line: string): boolean;
26
+ export interface CompactWatchDeps {
27
+ /** The instance's transcript now, as the Log resolves it; format null: none AgEnD can read. */
28
+ source(name: string): {
29
+ path: string | null;
30
+ format: CompactFormat | null;
31
+ };
32
+ /** The launch that runs the instance now (launchIdentity); null: none. */
33
+ owner(name: string): string | null;
34
+ /** Whether the instance's daemon reads a /compact's end from its own pane (kiro classic or TUI V2, board 907c7899). */
35
+ paneFollow?(name: string): boolean;
36
+ /** A watch ended (done, lost or timed out): the status frame should go out again. */
37
+ changed(name: string): void;
38
+ now?(): number;
39
+ setInterval?(fn: () => void, ms: number): unknown;
40
+ clearInterval?(handle: unknown): void;
41
+ }
42
+ export declare class CompactWatch {
43
+ private readonly deps;
44
+ private readonly watches;
45
+ constructor(deps: CompactWatchDeps);
46
+ private now;
47
+ private every;
48
+ private clear;
49
+ /**
50
+ * Before a /compact is handed to the daemon: a watch that waits for the daemon to say the command was written.
51
+ * Returns its id (sent along with the paste), or null when this backend's compaction cannot be seen.
52
+ */
53
+ begin(name: string): string | null;
54
+ /**
55
+ * The daemon wrote (or gave up on) the command with this id. Written: it says under which launch, and where the
56
+ * transcript ended just before the write. Both must be this instance's now — the launch running it and the transcript
57
+ * the watch reads — or the watch is lost.
58
+ */
59
+ pasted(name: string, id: string, written: boolean, report?: {
60
+ owner?: unknown;
61
+ checkpoint?: unknown;
62
+ pane?: unknown;
63
+ }): void;
64
+ /**
65
+ * Board 907c7899: the daemon read on its pane how the command with this id ended. It counts only for the pane watch
66
+ * it was written for, under the launch it was written under and that still runs the instance.
67
+ */
68
+ paneResult(name: string, id: string, owner: unknown, outcome: unknown): void;
69
+ /** The command was not handed over after all: forget its watch (nothing was announced for it). */
70
+ cancel(name: string, id: string): void;
71
+ /** What the status frame says about the instance's last /compact — or nothing. */
72
+ view(name: string): CompactWatchView | null;
73
+ /** The instance went away, or the fleet stops. */
74
+ forget(name: string): void;
75
+ stopAll(): void;
76
+ private drop;
77
+ private finish;
78
+ /**
79
+ * Whether the watch still stands as `base` was set: the same watch and base, running, the same launch, the source
80
+ * still this format with a transcript (else lost, said here) — and still this transcript: one that moved meanwhile
81
+ * stops this look, and the next look starts at the new one's end. Checked after every await and before it ends.
82
+ */
83
+ private standing;
84
+ /** One look at the transcript: the watch's timer calls it (tests call it directly). */
85
+ poll(name: string, id: string): Promise<void>;
86
+ }
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Board 003648ac: whether a /compact sent from the web chat has finished. The chat said only "sent", forever.
3
+ *
4
+ * - **Only what the CLI writes.** Claude Code appends a `system` `compact_boundary` record to the session's JSONL and
5
+ * Codex a `compacted` record to its rollout (the same records the Log tab shows as "compacted", log-steps.ts). Only
6
+ * a record's own top-level fields count: a long record is read whole (≤ WHOLE_LINE_MAX_BYTES, also when it spans
7
+ * several reads) and parsed, never judged by text in its head; one that can't be read whole stays unknown.
8
+ * - **kiro: its own pane (board 907c7899).** kiro records a compaction nowhere AgEnD can tie to the instance, but its
9
+ * classic and TUI V2 layouts say on the pane how it ended (kiro-compact-pane.ts). The daemon reads its pane from just
10
+ * before the write and says once how it ended (`compact_pane_result`): done, or not compacted ("too short", or
11
+ * stopped). The watch only waits for that, bound to the launch like the others. Other backends (kiro V3 included)
12
+ * record nothing AgEnD can attribute to the instance, so their compaction is never called finished: `begin` answers
13
+ * null.
14
+ * - **From just before the command's own write.** The daemon queues a paste behind its lock and a wake; just before
15
+ * it writes this one, it takes the transcript's end (`checkpoint`), and once written it sends that with the launch it
16
+ * wrote under (`raw_paste_written`). So neither an older boundary nor one written while the command waited counts,
17
+ * and a compaction that finishes fast is not missed.
18
+ * - **One transcript, one launch.** The watch is bound to that launch (boot, spawn generation, attempt, fence) and to
19
+ * the transcript's format and path; it is rechecked before every read and after every await, and before it ends.
20
+ * Another launch, another backend or no transcript ends it as lost. Each look reads through one opened file whose
21
+ * identity was checked; another file at the path, or this one cut short, starts again at its end: a boundary may then
22
+ * be missed (the watch times out), never invented.
23
+ * - **Bounded.** One watch per instance (a new /compact replaces it), a look every COMPACT_WATCH_POLL_MS of at most
24
+ * LOOKS_PER_POLL bounded reads (readNewLines), and an end: done, lost, or timed out after COMPACT_WATCH_TIMEOUT_MS
25
+ * from the command. A finished watch stays in view for COMPACT_WATCH_KEEP_MS so a page that was away still learns it.
26
+ */
27
+ import { randomBytes } from "node:crypto";
28
+ import { open, stat } from "node:fs/promises";
29
+ import { LOOKS_PER_POLL, readNewLines, readWholeLine, WHOLE_LINE_MAX_BYTES } from "./transcript-jsonl.js";
30
+ export const COMPACT_WATCH_POLL_MS = 2_000;
31
+ /** A long session's compaction can take minutes (one of 1M tokens took about two); ten is well past that. */
32
+ export const COMPACT_WATCH_TIMEOUT_MS = 10 * 60_000;
33
+ export const COMPACT_WATCH_KEEP_MS = 2 * 60_000;
34
+ /** One launch of an instance, as a value: a respawn, pause/wake or new fence is another. */
35
+ export function launchIdentity(o) {
36
+ return JSON.stringify([o.bootId, o.spawnGeneration, o.launchAttempt, o.launchFenceEpoch]);
37
+ }
38
+ /** Whether one whole transcript record says the conversation was compacted (its own top-level fields only). */
39
+ export function isCompactionRecord(format, line) {
40
+ let e;
41
+ try {
42
+ e = JSON.parse(line);
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ if (!e || typeof e !== "object" || Array.isArray(e))
48
+ return false;
49
+ const r = e;
50
+ return format === "claude" ? r.type === "system" && r.subtype === "compact_boundary" && r.isSidechain !== true : r.type === "compacted";
51
+ }
52
+ /** A long record worth reading whole: its head mentions the record at all (anything else is skipped unread). */
53
+ const mayBeCompaction = (format, head) => head.includes(format === "claude" ? "compact_boundary" : "compacted");
54
+ export class CompactWatch {
55
+ deps;
56
+ watches = new Map();
57
+ constructor(deps) {
58
+ this.deps = deps;
59
+ }
60
+ now() { return this.deps.now ? this.deps.now() : performance.now(); }
61
+ every(fn, ms) { return this.deps.setInterval ? this.deps.setInterval(fn, ms) : setInterval(fn, ms); }
62
+ clear(handle) {
63
+ if (this.deps.clearInterval)
64
+ this.deps.clearInterval(handle);
65
+ else
66
+ clearInterval(handle);
67
+ }
68
+ /**
69
+ * Before a /compact is handed to the daemon: a watch that waits for the daemon to say the command was written.
70
+ * Returns its id (sent along with the paste), or null when this backend's compaction cannot be seen.
71
+ */
72
+ begin(name) {
73
+ const src = this.deps.source(name);
74
+ const pane = !(src.format && src.path) && this.deps.paneFollow?.(name) === true;
75
+ if (!(src.format && src.path) && !pane)
76
+ return null;
77
+ this.drop(name);
78
+ const id = randomBytes(8).toString("hex");
79
+ const w = { id, state: "running", deadline: this.now() + COMPACT_WATCH_TIMEOUT_MS, endedAt: null, timer: null, reading: false, base: null,
80
+ pane, paneOwner: null };
81
+ w.timer = this.every(() => { void this.poll(name, id); }, COMPACT_WATCH_POLL_MS);
82
+ this.watches.set(name, w);
83
+ return id;
84
+ }
85
+ /**
86
+ * The daemon wrote (or gave up on) the command with this id. Written: it says under which launch, and where the
87
+ * transcript ended just before the write. Both must be this instance's now — the launch running it and the transcript
88
+ * the watch reads — or the watch is lost.
89
+ */
90
+ pasted(name, id, written, report = {}) {
91
+ const w = this.watches.get(name);
92
+ if (!w || w.id !== id || w.state !== "running" || w.base || w.paneOwner !== null)
93
+ return;
94
+ if (!written) {
95
+ this.finish(name, w, "lost");
96
+ return;
97
+ }
98
+ const owner = this.deps.owner(name);
99
+ if (w.pane) {
100
+ // The daemon follows its pane only when it could read it just before the write (`pane: true`).
101
+ if (owner === null || report.owner !== owner || report.pane !== true) {
102
+ this.finish(name, w, "lost");
103
+ return;
104
+ }
105
+ w.paneOwner = owner;
106
+ return;
107
+ }
108
+ const src = this.deps.source(name);
109
+ const cp = report.checkpoint;
110
+ const valid = !!cp && typeof cp === "object" && typeof cp.path === "string" && Number.isSafeInteger(cp.ino) && Number.isSafeInteger(cp.size) && cp.size >= 0;
111
+ if (owner === null || report.owner !== owner || !src.format || !src.path || !valid || cp.path !== src.path) {
112
+ this.finish(name, w, "lost");
113
+ return;
114
+ }
115
+ w.base = { format: src.format, path: src.path, ino: cp.ino, offset: cp.size, skipping: false, owner, pending: null };
116
+ }
117
+ /**
118
+ * Board 907c7899: the daemon read on its pane how the command with this id ended. It counts only for the pane watch
119
+ * it was written for, under the launch it was written under and that still runs the instance.
120
+ */
121
+ paneResult(name, id, owner, outcome) {
122
+ const w = this.watches.get(name);
123
+ if (!w || !w.pane || w.id !== id || w.state !== "running" || w.paneOwner === null)
124
+ return;
125
+ // A word that comes at or after the deadline is too late, whether or not the timer has run yet (#1925 review).
126
+ if (this.now() >= w.deadline) {
127
+ this.finish(name, w, "timeout");
128
+ return;
129
+ }
130
+ if (owner !== w.paneOwner || this.deps.owner(name) !== w.paneOwner) {
131
+ this.finish(name, w, "lost");
132
+ return;
133
+ }
134
+ if (outcome === "done" || outcome === "not_compacted")
135
+ this.finish(name, w, outcome);
136
+ }
137
+ /** The command was not handed over after all: forget its watch (nothing was announced for it). */
138
+ cancel(name, id) {
139
+ if (this.watches.get(name)?.id === id)
140
+ this.drop(name);
141
+ }
142
+ /** What the status frame says about the instance's last /compact — or nothing. */
143
+ view(name) {
144
+ const w = this.watches.get(name);
145
+ if (!w)
146
+ return null;
147
+ if (w.endedAt !== null && this.now() - w.endedAt >= COMPACT_WATCH_KEEP_MS) {
148
+ this.watches.delete(name);
149
+ return null;
150
+ }
151
+ return { id: w.id, state: w.state };
152
+ }
153
+ /** The instance went away, or the fleet stops. */
154
+ forget(name) { this.drop(name); }
155
+ stopAll() { for (const name of [...this.watches.keys()])
156
+ this.drop(name); }
157
+ drop(name) {
158
+ const w = this.watches.get(name);
159
+ if (!w)
160
+ return;
161
+ if (w.timer !== null)
162
+ this.clear(w.timer);
163
+ this.watches.delete(name);
164
+ }
165
+ finish(name, w, state) {
166
+ if (this.watches.get(name) !== w || w.state !== "running")
167
+ return;
168
+ if (w.timer !== null) {
169
+ this.clear(w.timer);
170
+ w.timer = null;
171
+ }
172
+ w.state = state;
173
+ w.endedAt = this.now();
174
+ this.deps.changed(name);
175
+ }
176
+ /**
177
+ * Whether the watch still stands as `base` was set: the same watch and base, running, the same launch, the source
178
+ * still this format with a transcript (else lost, said here) — and still this transcript: one that moved meanwhile
179
+ * stops this look, and the next look starts at the new one's end. Checked after every await and before it ends.
180
+ */
181
+ standing(name, w, base) {
182
+ if (this.watches.get(name) !== w || w.state !== "running" || w.base !== base)
183
+ return false;
184
+ const src = this.deps.source(name);
185
+ if (this.deps.owner(name) !== base.owner || src.format !== base.format || !src.path) {
186
+ this.finish(name, w, "lost");
187
+ return false;
188
+ }
189
+ return src.path === base.path;
190
+ }
191
+ /** One look at the transcript: the watch's timer calls it (tests call it directly). */
192
+ async poll(name, id) {
193
+ const w = this.watches.get(name);
194
+ if (!w || w.id !== id || w.state !== "running" || w.reading)
195
+ return;
196
+ if (this.now() >= w.deadline) {
197
+ this.finish(name, w, "timeout");
198
+ return;
199
+ }
200
+ if (w.pane) {
201
+ // The daemon reads the pane; here only whether the launch it was written under still runs the instance.
202
+ if (w.paneOwner !== null && this.deps.owner(name) !== w.paneOwner)
203
+ this.finish(name, w, "lost");
204
+ return;
205
+ }
206
+ const base = w.base;
207
+ if (!base)
208
+ return; // the command has not reached the pane yet
209
+ w.reading = true;
210
+ try {
211
+ const src = this.deps.source(name);
212
+ if (this.deps.owner(name) !== base.owner || src.format !== base.format || !src.path) {
213
+ this.finish(name, w, "lost");
214
+ return;
215
+ }
216
+ if (src.path !== base.path) {
217
+ // Another transcript of the same launch: only what is written to it from now on.
218
+ const moved = src.path;
219
+ const { size, ino } = await stat(moved);
220
+ const now = this.deps.source(name);
221
+ if (this.watches.get(name) !== w || w.state !== "running" || w.base !== base)
222
+ return;
223
+ if (this.deps.owner(name) !== base.owner || now.format !== base.format || !now.path) {
224
+ this.finish(name, w, "lost");
225
+ return;
226
+ }
227
+ if (now.path === moved)
228
+ Object.assign(base, { path: moved, ino, offset: size, skipping: false, pending: null });
229
+ return;
230
+ }
231
+ const fh = await open(base.path, "r");
232
+ try {
233
+ const st = await fh.stat();
234
+ if (!this.standing(name, w, base))
235
+ return;
236
+ if (st.ino !== base.ino || st.size < base.offset) {
237
+ Object.assign(base, { ino: st.ino, offset: st.size, skipping: false, pending: null });
238
+ return;
239
+ }
240
+ // Every read below goes through this handle: the file whose identity was just checked, whatever the path holds now.
241
+ const whole = async (offset, bytes) => (await readWholeLine(base.path, offset, bytes, WHOLE_LINE_MAX_BYTES, fh).catch(() => null)) ?? "";
242
+ for (let look = 0; look < LOOKS_PER_POLL; look++) {
243
+ const read = await readNewLines(base.path, base.offset, { skipping: base.skipping, handle: fh });
244
+ if (!this.standing(name, w, base))
245
+ return;
246
+ let found = read.lines.some(l => isCompactionRecord(base.format, l));
247
+ // A long record that began in an earlier read ends in this one: read it whole now.
248
+ if (base.pending !== null && read.longEnd !== undefined) {
249
+ if (!found && isCompactionRecord(base.format, await whole(base.pending, read.longEnd - 1 - base.pending)))
250
+ found = true;
251
+ base.pending = null;
252
+ }
253
+ for (const l of read.long) {
254
+ if (found || !mayBeCompaction(base.format, l.head))
255
+ continue;
256
+ if (!l.complete) {
257
+ base.pending = l.offset;
258
+ continue;
259
+ }
260
+ if (isCompactionRecord(base.format, await whole(l.offset, l.bytes)))
261
+ found = true;
262
+ }
263
+ if (!this.standing(name, w, base))
264
+ return;
265
+ const moved = read.newOffset !== base.offset;
266
+ base.offset = read.newOffset;
267
+ base.skipping = read.skipping;
268
+ if (found) {
269
+ this.finish(name, w, "done");
270
+ return;
271
+ }
272
+ if (!moved || !read.more)
273
+ break;
274
+ }
275
+ }
276
+ finally {
277
+ await fh.close();
278
+ }
279
+ }
280
+ catch {
281
+ // A look that fails is tried again on the next tick; the deadline still ends the watch.
282
+ }
283
+ finally {
284
+ w.reading = false;
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=compact-watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-watch.js","sourceRoot":"","sources":["../src/compact-watch.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,18 @@ import { DELIVERY_WORKER_MODES } from "./types.js";
4
4
  import { credentialHomeSpec, resolveCredentialProfile } from "./backend/credential-profile.js";
5
5
  import { STATUS_EMOJI_CONFIG_KEYS, statusEmojiProblem } from "./status-emojis.js";
6
6
  import { hostnameOf } from "./web-host-guard.js";
7
+ import { mbText, PUBLIC_LINK_MAX_FILE_BYTES, UPLOAD_LIMITS, UPLOAD_MB_RANGE } from "./web-upload.js";
7
8
  import { previewOriginProblem } from "./web-preview.js";
8
9
  import { DEFAULT_SESSION_POLICY, LOCAL_SESSION_HOURS } from "./web-session.js";
9
10
  import { existsSync } from "node:fs";
10
11
  import { isUnsupportedHomeRef, resolveFileRefPath, systemPromptParts } from "./prompt-file-ref.js";
11
12
  import { isRemovedBackend, removedBackendMessage } from "./backend/removed.js";
12
13
  import { CROSS_INSTANCE_VISIBILITY_MODES, isCrossInstanceVisibility } from "./cross-instance-notice.js";
14
+ /** Every key `web:` takes (WebConfig, checked both ways at compile time): anything else is a typo or a guess, ignored. */
15
+ const WEB_KEYS = ["public_link", "echo_to_channel", "usage_panel", "log_tab", "provider_secrets", "allowed_hosts", "view_access",
16
+ "notify_login", "session", "preview", "preview_port", "preview_origin", "preview_on_public_link", "upload_max_file_mb", "upload_max_total_mb"];
17
+ const WEB_KEYS_COMPLETE = true;
18
+ void WEB_KEYS_COMPLETE;
13
19
  /** Backends the factory can instantiate (keep in sync with backend/factory.ts). */
14
20
  export const KNOWN_BACKENDS = ["claude-code", "codex", "opencode", "kiro-cli", "antigravity", "grok", "muse", "mock"];
15
21
  /**
@@ -384,6 +390,15 @@ export function validateFleetConfig(config) {
384
390
  err("web", "must be a mapping");
385
391
  }
386
392
  else if (isObj(config.web)) {
393
+ // Unknown keys warn (they are ignored). `web.access` is the usual guess for who may run /web — that is the
394
+ // channel's fleet-admin list.
395
+ for (const key of Object.keys(config.web)) {
396
+ if (WEB_KEYS.includes(key))
397
+ continue;
398
+ warn(`web.${key}`, key === "access"
399
+ ? "web.access is not a setting; fleet admins come from channel(s).access.allowed_users — ignored"
400
+ : `unknown key (known: ${WEB_KEYS.join(", ")}) — ignored`);
401
+ }
387
402
  if (config.web.public_link !== undefined && !validPublicLinkPatch(config.web.public_link))
388
403
  err("web.public_link", "expected allow_public boolean, ttl_minutes integer 1..480, protocol http2/quic/auto");
389
404
  if (config.web.echo_to_channel !== undefined && typeof config.web.echo_to_channel !== "boolean") {
@@ -392,6 +407,9 @@ export function validateFleetConfig(config) {
392
407
  if (config.web.usage_panel !== undefined && typeof config.web.usage_panel !== "boolean") {
393
408
  err("web.usage_panel", "must be a boolean");
394
409
  }
410
+ if (config.web.log_tab !== undefined && typeof config.web.log_tab !== "boolean") {
411
+ err("web.log_tab", "must be a boolean");
412
+ }
395
413
  if (config.web.provider_secrets !== undefined && typeof config.web.provider_secrets !== "boolean") {
396
414
  err("web.provider_secrets", "must be a boolean");
397
415
  }
@@ -404,6 +422,9 @@ export function validateFleetConfig(config) {
404
422
  // #1306 HTML previews
405
423
  if (config.web.preview !== undefined && typeof config.web.preview !== "boolean")
406
424
  err("web.preview", "must be a boolean");
425
+ // #1723: previews over the temporary public link (a second quick tunnel of the link's own).
426
+ if (config.web.preview_on_public_link !== undefined && typeof config.web.preview_on_public_link !== "boolean")
427
+ err("web.preview_on_public_link", "must be a boolean");
407
428
  if (config.web.preview_port !== undefined) {
408
429
  const p = config.web.preview_port;
409
430
  if (typeof p !== "number" || !Number.isInteger(p) || p < 1 || p > 65535)
@@ -418,6 +439,7 @@ export function validateFleetConfig(config) {
418
439
  }
419
440
  if (config.web.session !== undefined)
420
441
  validateWebSession(config.web.session, err);
442
+ validateUploadLimits(config.web, warn);
421
443
  if (config.web.allowed_hosts !== undefined) {
422
444
  if (!Array.isArray(config.web.allowed_hosts)) {
423
445
  err("web.allowed_hosts", "must be a list of host names");
@@ -452,6 +474,10 @@ export function validateFleetConfig(config) {
452
474
  if (overdue !== undefined && (typeof overdue !== "number" || !Number.isFinite(overdue) || overdue < 0)) {
453
475
  err("defaults.reply_overdue_minutes", "must be a non-negative number of minutes (0 turns the overdue notice off)");
454
476
  }
477
+ const replyTtl = config.defaults.reply_obligation_ttl_hours;
478
+ if (replyTtl !== undefined && (typeof replyTtl !== "number" || replyTtl <= 0 || !Number.isFinite(replyTtl * 3_600_000))) {
479
+ err("defaults.reply_obligation_ttl_hours", "must be a positive finite number of hours (default 24)");
480
+ }
455
481
  const retentionDays = config.defaults.retention_days;
456
482
  if (retentionDays !== undefined && (!Number.isInteger(retentionDays) || retentionDays < 1)) {
457
483
  err("defaults.retention_days", "must be a positive integer (days to keep terminal deliveries and done/cancelled tasks; default 30)");
@@ -587,9 +613,34 @@ export function validateClassicBotConfig(config) {
587
613
  }
588
614
  /**
589
615
  * #1620: `web.session` — only `local` (the dashboard reached directly); a public-link session's limits are fixed.
590
- * Hours, decimals allowed (1.5 = 90 minutes), 1 ≤ idle_hours ≤ absolute_hours ≤ 720; one left out is its default
591
- * (12 absolute, 2 idle) for the comparison.
616
+ * Hours, decimals allowed (1.5 = 90 minutes), 1 ≤ idle_hours ≤ absolute_hours ≤ 720. An absolute_hours left out is
617
+ * its default (DEFAULT_SESSION_POLICY, 48) for the comparison; an idle_hours left out follows a shorter absolute_hours,
618
+ * as the store applies it (localSessionPolicy cuts it) — so only an idle_hours that is SET can exceed the limit (#1670:
619
+ * with a 48 h idle default, `absolute_hours: 24` alone must stay valid).
592
620
  */
621
+ /**
622
+ * #1937: the web chat's upload sizes — whole MB in UPLOAD_MB_RANGE. Warnings (so `agend doctor` and the fleet's start
623
+ * show them, #1879), each saying what applies: a value it cannot use (the default then), a per-file size above the
624
+ * per-message one (a file is held to the message's), and one above what the public link carries (it stays at that).
625
+ */
626
+ function validateUploadLimits(web, warn) {
627
+ const range = `a whole number of MB, ${UPLOAD_MB_RANGE.min}–${UPLOAD_MB_RANGE.max}`;
628
+ const ok = (v) => typeof v === "number" && Number.isInteger(v) && v >= UPLOAD_MB_RANGE.min && v <= UPLOAD_MB_RANGE.max;
629
+ const file = web.upload_max_file_mb, total = web.upload_max_total_mb;
630
+ if (file !== undefined && !ok(file))
631
+ warn("web.upload_max_file_mb", `must be ${range} — ignored, the default ${mbText(UPLOAD_LIMITS.maxFileBytes)} MB applies`);
632
+ if (total !== undefined && !ok(total))
633
+ warn("web.upload_max_total_mb", `must be ${range} — ignored, the default ${mbText(UPLOAD_LIMITS.maxTotalBytes)} MB applies`);
634
+ // What applies (a value it cannot use is the default), as uploadLimits() reads it.
635
+ const fileMb = ok(file) ? file : UPLOAD_LIMITS.maxFileBytes / 1024 / 1024;
636
+ const totalMb = ok(total) ? total : UPLOAD_LIMITS.maxTotalBytes / 1024 / 1024;
637
+ if (fileMb > totalMb)
638
+ warn("web.upload_max_file_mb", `is above web.upload_max_total_mb (${fileMb} > ${totalMb}): one file can be at most ${totalMb} MB`);
639
+ const publicMb = PUBLIC_LINK_MAX_FILE_BYTES / 1024 / 1024;
640
+ if (Math.min(fileMb, totalMb) > publicMb) {
641
+ warn("web.upload_max_file_mb", `over the public link a file stays at ${publicMb} MB (a Cloudflare quick tunnel carries about 100 MB per request)`);
642
+ }
643
+ }
593
644
  function validateWebSession(session, err) {
594
645
  if (!isObj(session)) {
595
646
  err("web.session", "must be a mapping");
@@ -625,9 +676,8 @@ function validateWebSession(session, err) {
625
676
  if (Number.isNaN(abs) || Number.isNaN(idle))
626
677
  return;
627
678
  const absolute = abs ?? DEFAULT_SESSION_POLICY.local.absoluteMs / 3_600_000;
628
- const idleH = idle ?? DEFAULT_SESSION_POLICY.local.idleMs / 3_600_000;
629
- if (idleH > absolute) {
630
- err("web.session.local.idle_hours", `must not exceed absolute_hours (${idleH} > ${absolute}${abs === null ? ", the default" : ""}${idle === null ? "; idle_hours is the default" : ""})`);
679
+ if (idle !== null && idle > absolute) {
680
+ err("web.session.local.idle_hours", `must not exceed absolute_hours (${idle} > ${absolute}${abs === null ? ", the default" : ""})`);
631
681
  }
632
682
  }
633
683
  //# sourceMappingURL=config-validator.js.map