@songsid/agend 2.3.2 → 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 (393) hide show
  1. package/dist/agent-cli-instructions.md +2 -2
  2. package/dist/agent-cli.js +13 -112
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.d.ts +0 -1
  5. package/dist/agent-endpoint.js +1 -9
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-whats-new.d.ts +23 -5
  8. package/dist/agent-whats-new.js +58 -40
  9. package/dist/agent-whats-new.js.map +1 -1
  10. package/dist/auth-api.d.ts +0 -7
  11. package/dist/auth-api.js +1 -15
  12. package/dist/auth-api.js.map +1 -1
  13. package/dist/authority/authority-state.js +1 -1
  14. package/dist/authority/authority-state.js.map +1 -1
  15. package/dist/authority/web-authority.d.ts +9 -4
  16. package/dist/authority/web-authority.js +10 -5
  17. package/dist/authority/web-authority.js.map +1 -1
  18. package/dist/backend/antigravity.js +6 -1
  19. package/dist/backend/antigravity.js.map +1 -1
  20. package/dist/backend/claude-code.d.ts +20 -1
  21. package/dist/backend/claude-code.js +54 -29
  22. package/dist/backend/claude-code.js.map +1 -1
  23. package/dist/backend/claude-transcript-errors.d.ts +18 -0
  24. package/dist/backend/claude-transcript-errors.js +19 -0
  25. package/dist/backend/claude-transcript-errors.js.map +1 -0
  26. package/dist/backend/codex-session-lookup.d.ts +16 -3
  27. package/dist/backend/codex-session-lookup.js +45 -11
  28. package/dist/backend/codex-session-lookup.js.map +1 -1
  29. package/dist/backend/codex.d.ts +16 -0
  30. package/dist/backend/codex.js +184 -35
  31. package/dist/backend/codex.js.map +1 -1
  32. package/dist/backend/grok.js +58 -12
  33. package/dist/backend/grok.js.map +1 -1
  34. package/dist/backend/kiro-reconcile-store.js +8 -1
  35. package/dist/backend/kiro-reconcile-store.js.map +1 -1
  36. package/dist/backend/kiro.d.ts +0 -5
  37. package/dist/backend/kiro.js +2 -10
  38. package/dist/backend/kiro.js.map +1 -1
  39. package/dist/backend/muse.js +2 -1
  40. package/dist/backend/muse.js.map +1 -1
  41. package/dist/backend/types.d.ts +53 -4
  42. package/dist/backend/types.js.map +1 -1
  43. package/dist/bundled-skills.d.ts +4 -6
  44. package/dist/bundled-skills.js +10 -14
  45. package/dist/bundled-skills.js.map +1 -1
  46. package/dist/channel/adapters/discord.js +60 -17
  47. package/dist/channel/adapters/discord.js.map +1 -1
  48. package/dist/channel/mcp-server.js +5 -5
  49. package/dist/channel/mcp-server.js.map +1 -1
  50. package/dist/channel/mcp-tools.d.ts +1 -3
  51. package/dist/channel/mcp-tools.js +4 -58
  52. package/dist/channel/mcp-tools.js.map +1 -1
  53. package/dist/classic-channel-manager.d.ts +4 -1
  54. package/dist/classic-channel-manager.js +21 -7
  55. package/dist/classic-channel-manager.js.map +1 -1
  56. package/dist/cli.js +23 -6
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config-history.d.ts +50 -0
  59. package/dist/config-history.js +263 -0
  60. package/dist/config-history.js.map +1 -0
  61. package/dist/config-validator.js +10 -8
  62. package/dist/config-validator.js.map +1 -1
  63. package/dist/config.d.ts +3 -0
  64. package/dist/config.js +11 -4
  65. package/dist/config.js.map +1 -1
  66. package/dist/cross-instance-envelope.d.ts +10 -5
  67. package/dist/cross-instance-envelope.js +20 -17
  68. package/dist/cross-instance-envelope.js.map +1 -1
  69. package/dist/daemon.d.ts +130 -64
  70. package/dist/daemon.js +603 -428
  71. package/dist/daemon.js.map +1 -1
  72. package/dist/daily-summary.d.ts +8 -1
  73. package/dist/daily-summary.js +8 -5
  74. package/dist/daily-summary.js.map +1 -1
  75. package/dist/dashboard-live.d.ts +1 -1
  76. package/dist/dashboard-live.js +3 -3
  77. package/dist/dashboard-live.js.map +1 -1
  78. package/dist/dashboard-permissions.d.ts +1 -1
  79. package/dist/dashboard-permissions.js +1 -3
  80. package/dist/dashboard-permissions.js.map +1 -1
  81. package/dist/delivery-outbox.d.ts +31 -22
  82. package/dist/delivery-outbox.js +119 -161
  83. package/dist/delivery-outbox.js.map +1 -1
  84. package/dist/delivery-outbox.test.js +10 -25
  85. package/dist/delivery-outbox.test.js.map +1 -1
  86. package/dist/doctor.d.ts +4 -0
  87. package/dist/doctor.js +16 -1
  88. package/dist/doctor.js.map +1 -1
  89. package/dist/fleet-level-config.js +1 -1
  90. package/dist/fleet-level-config.js.map +1 -1
  91. package/dist/fleet-manager.d.ts +74 -66
  92. package/dist/fleet-manager.js +285 -414
  93. package/dist/fleet-manager.js.map +1 -1
  94. package/dist/fleet-process-handlers.d.ts +5 -0
  95. package/dist/fleet-process-handlers.js +21 -0
  96. package/dist/fleet-process-handlers.js.map +1 -1
  97. package/dist/fleet-service-owner.d.ts +11 -0
  98. package/dist/fleet-service-owner.js +3 -0
  99. package/dist/fleet-service-owner.js.map +1 -0
  100. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +11 -1
  101. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +1 -1
  102. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
  103. package/dist/general-knowledge/skills/session-management/SKILL.md +7 -1
  104. package/dist/general-knowledge/skills/web-appearance/SKILL.md +13 -204
  105. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +30 -68
  106. package/dist/instance-lifecycle.d.ts +19 -0
  107. package/dist/instance-lifecycle.js +73 -15
  108. package/dist/instance-lifecycle.js.map +1 -1
  109. package/dist/instructions.js +6 -7
  110. package/dist/instructions.js.map +1 -1
  111. package/dist/kiro-reconcile.js +3 -3
  112. package/dist/kiro-reconcile.js.map +1 -1
  113. package/dist/locale.js +96 -58
  114. package/dist/locale.js.map +1 -1
  115. package/dist/log-service.js +1 -1
  116. package/dist/log-service.js.map +1 -1
  117. package/dist/needs-you-hub.d.ts +1 -0
  118. package/dist/needs-you-hub.js +6 -3
  119. package/dist/needs-you-hub.js.map +1 -1
  120. package/dist/needs-you-live.d.ts +3 -1
  121. package/dist/needs-you-live.js +24 -2
  122. package/dist/needs-you-live.js.map +1 -1
  123. package/dist/needs-you.d.ts +13 -2
  124. package/dist/needs-you.js +11 -1
  125. package/dist/needs-you.js.map +1 -1
  126. package/dist/notify-socket.d.ts +10 -0
  127. package/dist/notify-socket.js +45 -0
  128. package/dist/notify-socket.js.map +1 -0
  129. package/dist/outbound-handlers.js +20 -8
  130. package/dist/outbound-handlers.js.map +1 -1
  131. package/dist/outbound-schemas.d.ts +0 -62
  132. package/dist/outbound-schemas.js +4 -43
  133. package/dist/outbound-schemas.js.map +1 -1
  134. package/dist/parked-notices.d.ts +87 -0
  135. package/dist/parked-notices.js +194 -0
  136. package/dist/parked-notices.js.map +1 -0
  137. package/dist/public-link-progress.d.ts +5 -2
  138. package/dist/public-link-progress.js +4 -3
  139. package/dist/public-link-progress.js.map +1 -1
  140. package/dist/public-web-gateway.js +0 -9
  141. package/dist/public-web-gateway.js.map +1 -1
  142. package/dist/public-web-link.d.ts +12 -0
  143. package/dist/public-web-link.js +29 -5
  144. package/dist/public-web-link.js.map +1 -1
  145. package/dist/quota-notice.d.ts +23 -0
  146. package/dist/quota-notice.js +22 -0
  147. package/dist/quota-notice.js.map +1 -0
  148. package/dist/scheduler/task-board.d.ts +17 -25
  149. package/dist/scheduler/task-board.js +29 -39
  150. package/dist/scheduler/task-board.js.map +1 -1
  151. package/dist/sd-notify.d.ts +23 -15
  152. package/dist/sd-notify.js +88 -29
  153. package/dist/sd-notify.js.map +1 -1
  154. package/dist/search/search-docs.d.ts +1 -1
  155. package/dist/search/search-docs.js +2 -2
  156. package/dist/search/search-docs.js.map +1 -1
  157. package/dist/settings-api.d.ts +16 -1
  158. package/dist/settings-api.js +56 -16
  159. package/dist/settings-api.js.map +1 -1
  160. package/dist/settings-change.js +3 -1
  161. package/dist/settings-change.js.map +1 -1
  162. package/dist/settings-confirmation.d.ts +17 -3
  163. package/dist/settings-confirmation.js +8 -5
  164. package/dist/settings-confirmation.js.map +1 -1
  165. package/dist/settings-effect.js +0 -2
  166. package/dist/settings-effect.js.map +1 -1
  167. package/dist/settings-http-confirmation.js +31 -1
  168. package/dist/settings-http-confirmation.js.map +1 -1
  169. package/dist/setup-wizard.d.ts +3 -0
  170. package/dist/setup-wizard.js +4 -2
  171. package/dist/setup-wizard.js.map +1 -1
  172. package/dist/task-board-waker.d.ts +43 -1
  173. package/dist/task-board-waker.js +121 -9
  174. package/dist/task-board-waker.js.map +1 -1
  175. package/dist/tmux-control.d.ts +1 -1
  176. package/dist/tmux-control.js +3 -2
  177. package/dist/tmux-control.js.map +1 -1
  178. package/dist/tmux-manager.js +18 -16
  179. package/dist/tmux-manager.js.map +1 -1
  180. package/dist/tmux-read.d.ts +2 -0
  181. package/dist/tmux-read.js +7 -1
  182. package/dist/tmux-read.js.map +1 -1
  183. package/dist/tool-permissions.js +3 -10
  184. package/dist/tool-permissions.js.map +1 -1
  185. package/dist/topic-commands.d.ts +29 -7
  186. package/dist/topic-commands.js +97 -37
  187. package/dist/topic-commands.js.map +1 -1
  188. package/dist/transcript-monitor.d.ts +7 -0
  189. package/dist/transcript-monitor.js +48 -3
  190. package/dist/transcript-monitor.js.map +1 -1
  191. package/dist/tunnel/cloudflared.d.ts +5 -0
  192. package/dist/tunnel/cloudflared.js +32 -1
  193. package/dist/tunnel/cloudflared.js.map +1 -1
  194. package/dist/tunnel/named-diagnostics.d.ts +2 -1
  195. package/dist/tunnel/named-diagnostics.js +4 -1
  196. package/dist/tunnel/named-diagnostics.js.map +1 -1
  197. package/dist/tunnel/named-link-test.d.ts +90 -0
  198. package/dist/tunnel/named-link-test.js +270 -0
  199. package/dist/tunnel/named-link-test.js.map +1 -0
  200. package/dist/tunnel/purpose-lane.d.ts +3 -1
  201. package/dist/tunnel/purpose-lane.js +2 -0
  202. package/dist/tunnel/purpose-lane.js.map +1 -1
  203. package/dist/types.d.ts +9 -11
  204. package/dist/ui/chat-ambient.js +4 -4
  205. package/dist/ui/chat-commands.js +3 -2
  206. package/dist/ui/chat-store.js +4 -1
  207. package/dist/ui/chat-strings.js +12 -46
  208. package/dist/ui/chat-thread.js +51 -59
  209. package/dist/ui/fleet-office-skin.js +37 -14
  210. package/dist/ui/fleet-office.js +31 -7
  211. package/dist/ui/html-attachment.js +22 -8
  212. package/dist/ui/panel-chat.js +21 -50
  213. package/dist/ui/panel-log.js +2 -2
  214. package/dist/ui/panel-needs.js +11 -9
  215. package/dist/ui/panel-settings.js +5 -3
  216. package/dist/ui/preview-panel.js +12 -21
  217. package/dist/ui/preview.js +10 -3
  218. package/dist/ui/search-dialog.js +30 -14
  219. package/dist/ui/settings-appearance.js +3 -37
  220. package/dist/ui/settings-confirm.js +18 -0
  221. package/dist/ui/settings-guests.js +13 -4
  222. package/dist/ui/settings-learn.js +1 -1
  223. package/dist/ui/settings-mods.js +5 -12
  224. package/dist/ui/settings-named-test.js +144 -0
  225. package/dist/ui/settings-registry.js +0 -2
  226. package/dist/ui/settings-strings.js +16 -16
  227. package/dist/ui/settings-web-authority.js +4 -3
  228. package/dist/ui/shared/app-i18n.js +15 -4
  229. package/dist/ui/shared/app-needs.js +5 -1
  230. package/dist/ui/shared/app-prefs.js +17 -17
  231. package/dist/ui/shared/app-shell.js +47 -9
  232. package/dist/ui/shared/app-store.js +6 -2
  233. package/dist/ui/shared/app.css +33 -39
  234. package/dist/ui/shared/app.js +5 -4
  235. package/dist/ui/shared/instance-nav.js +9 -9
  236. package/dist/ui/shared/instance-switch.js +8 -2
  237. package/dist/ui/shared/panel-view.js +22 -8
  238. package/dist/ui/shared/view-strings.js +6 -0
  239. package/dist/ui/shared/web-authorize.js +35 -13
  240. package/dist/update-check.d.ts +13 -4
  241. package/dist/update-check.js +17 -4
  242. package/dist/update-check.js.map +1 -1
  243. package/dist/usage/usage-api.d.ts +3 -0
  244. package/dist/usage/usage-api.js +5 -1
  245. package/dist/usage/usage-api.js.map +1 -1
  246. package/dist/view-api.d.ts +2 -0
  247. package/dist/view-api.js +64 -0
  248. package/dist/view-api.js.map +1 -1
  249. package/dist/web-api.d.ts +9 -17
  250. package/dist/web-api.js +257 -371
  251. package/dist/web-api.js.map +1 -1
  252. package/dist/web-appearance-tools.d.ts +0 -2
  253. package/dist/web-appearance-tools.js +2 -5
  254. package/dist/web-appearance-tools.js.map +1 -1
  255. package/dist/web-appearance-view.d.ts +0 -6
  256. package/dist/web-appearance-view.js +0 -1
  257. package/dist/web-appearance-view.js.map +1 -1
  258. package/dist/web-appearance.d.ts +14 -7
  259. package/dist/web-appearance.js +5 -6
  260. package/dist/web-appearance.js.map +1 -1
  261. package/dist/web-asset-parts.d.ts +1 -17
  262. package/dist/web-asset-parts.js +1 -15
  263. package/dist/web-asset-parts.js.map +1 -1
  264. package/dist/web-auth.js +1 -7
  265. package/dist/web-auth.js.map +1 -1
  266. package/dist/web-chat-history.d.ts +3 -7
  267. package/dist/web-chat-history.js +10 -17
  268. package/dist/web-chat-history.js.map +1 -1
  269. package/dist/web-commands.d.ts +9 -1
  270. package/dist/web-commands.js +13 -0
  271. package/dist/web-commands.js.map +1 -1
  272. package/dist/web-experimental.d.ts +3 -8
  273. package/dist/web-experimental.js +9 -33
  274. package/dist/web-experimental.js.map +1 -1
  275. package/dist/web-guest-access.d.ts +40 -2
  276. package/dist/web-guest-access.js +50 -14
  277. package/dist/web-guest-access.js.map +1 -1
  278. package/dist/web-mod-bundle.d.ts +2 -45
  279. package/dist/web-mod-bundle.js +15 -63
  280. package/dist/web-mod-bundle.js.map +1 -1
  281. package/dist/web-mod-store.d.ts +3 -48
  282. package/dist/web-mod-store.js +30 -97
  283. package/dist/web-mod-store.js.map +1 -1
  284. package/dist/web-prefs.d.ts +13 -0
  285. package/dist/web-prefs.js +38 -0
  286. package/dist/web-prefs.js.map +1 -1
  287. package/dist/web-preview.d.ts +6 -13
  288. package/dist/web-preview.js +12 -23
  289. package/dist/web-preview.js.map +1 -1
  290. package/dist/web-session.d.ts +11 -3
  291. package/dist/web-session.js +22 -11
  292. package/dist/web-session.js.map +1 -1
  293. package/dist/web-settings-patch.d.ts +1 -1
  294. package/dist/web-settings-patch.js +9 -7
  295. package/dist/web-settings-patch.js.map +1 -1
  296. package/dist/web-settings-tools.d.ts +0 -13
  297. package/dist/web-settings-tools.js +12 -84
  298. package/dist/web-settings-tools.js.map +1 -1
  299. package/dist/workflow-templates/default.md +2 -2
  300. package/dist/working-recovery.d.ts +0 -2
  301. package/dist/working-recovery.js +2 -23
  302. package/dist/working-recovery.js.map +1 -1
  303. package/launcher/agend-install.cjs +7 -1
  304. package/launcher/fleet-service-owner.cjs +150 -0
  305. package/package.json +1 -1
  306. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +0 -376
  307. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +0 -673
  308. package/dist/task-board-summary.d.ts +0 -101
  309. package/dist/task-board-summary.js +0 -177
  310. package/dist/task-board-summary.js.map +0 -1
  311. package/dist/ui/app-effects.js +0 -251
  312. package/dist/ui/chat-effect-posters.js +0 -42
  313. package/dist/ui/chat-effects.js +0 -167
  314. package/dist/ui/effect-trial-controller.js +0 -124
  315. package/dist/ui/effect-trial-offer.js +0 -2
  316. package/dist/ui/effect-trial-panel.js +0 -40
  317. package/dist/ui/effects-waker.js +0 -2
  318. package/dist/ui/settings-effects.js +0 -202
  319. package/dist/ui/settings-owner-effects.js +0 -82
  320. package/dist/ui/shared/effect-app-runtime.js +0 -299
  321. package/dist/ui/shared/effect-baseline.js +0 -64
  322. package/dist/ui/shared/effect-chat-runtime.js +0 -162
  323. package/dist/ui/shared/effect-cursor.js +0 -126
  324. package/dist/ui/shared/effect-display-metadata.js +0 -39
  325. package/dist/ui/shared/effect-frame.js +0 -146
  326. package/dist/ui/shared/effect-geometry.js +0 -137
  327. package/dist/ui/shared/effect-host-style.js +0 -10
  328. package/dist/ui/shared/effect-owner-regions.js +0 -74
  329. package/dist/ui/shared/effect-owner-source.js +0 -122
  330. package/dist/ui/shared/effect-policy.js +0 -151
  331. package/dist/ui/shared/effect-poster-reader.js +0 -98
  332. package/dist/ui/shared/effect-posters.js +0 -117
  333. package/dist/ui/shared/effect-profiler.js +0 -184
  334. package/dist/ui/shared/effect-profiles.js +0 -65
  335. package/dist/ui/shared/effect-registry.js +0 -545
  336. package/dist/ui/shared/effect-runtime-loader.js +0 -236
  337. package/dist/ui/shared/effect-safety.js +0 -153
  338. package/dist/ui/shared/effect-stock-snapshot.js +0 -43
  339. package/dist/ui/shared/effect-stock-trust.js +0 -217
  340. package/dist/ui/shared/effect-trial-shadow.js +0 -62
  341. package/dist/ui/shared/effect-trial-source.js +0 -103
  342. package/dist/ui/shared/effect-trial-stage.js +0 -170
  343. package/dist/ui/shared/effect-trial.css +0 -40
  344. package/dist/ui/shared/feature-flags.js +0 -127
  345. package/dist/ui/shared/owner-effect-prefs.js +0 -117
  346. package/dist/upgrade-notices.d.ts +0 -17
  347. package/dist/upgrade-notices.js +0 -93
  348. package/dist/upgrade-notices.js.map +0 -1
  349. package/dist/web-effect-bootstrap.d.ts +0 -12
  350. package/dist/web-effect-bootstrap.js +0 -49
  351. package/dist/web-effect-bootstrap.js.map +0 -1
  352. package/dist/web-effect-bundle.d.ts +0 -28
  353. package/dist/web-effect-bundle.js +0 -171
  354. package/dist/web-effect-bundle.js.map +0 -1
  355. package/dist/web-effect-canonical.d.ts +0 -8
  356. package/dist/web-effect-canonical.js +0 -27
  357. package/dist/web-effect-canonical.js.map +0 -1
  358. package/dist/web-effect-library.d.ts +0 -114
  359. package/dist/web-effect-library.js +0 -530
  360. package/dist/web-effect-library.js.map +0 -1
  361. package/dist/web-effect-playback.d.ts +0 -30
  362. package/dist/web-effect-playback.js +0 -71
  363. package/dist/web-effect-playback.js.map +0 -1
  364. package/dist/web-effect-poster.d.ts +0 -8
  365. package/dist/web-effect-poster.js +0 -52
  366. package/dist/web-effect-poster.js.map +0 -1
  367. package/dist/web-effect-profiles.d.ts +0 -118
  368. package/dist/web-effect-profiles.js +0 -181
  369. package/dist/web-effect-profiles.js.map +0 -1
  370. package/dist/web-effect-service.d.ts +0 -93
  371. package/dist/web-effect-service.js +0 -335
  372. package/dist/web-effect-service.js.map +0 -1
  373. package/dist/web-effect-tools.d.ts +0 -48
  374. package/dist/web-effect-tools.js +0 -129
  375. package/dist/web-effect-tools.js.map +0 -1
  376. package/dist/web-effect-trials.d.ts +0 -86
  377. package/dist/web-effect-trials.js +0 -204
  378. package/dist/web-effect-trials.js.map +0 -1
  379. package/dist/web-effect-upload.d.ts +0 -27
  380. package/dist/web-effect-upload.js +0 -185
  381. package/dist/web-effect-upload.js.map +0 -1
  382. package/dist/web-effect-worker.d.ts +0 -8
  383. package/dist/web-effect-worker.js +0 -170
  384. package/dist/web-effect-worker.js.map +0 -1
  385. package/dist/web-effect.d.ts +0 -103
  386. package/dist/web-effect.js +0 -153
  387. package/dist/web-effect.js.map +0 -1
  388. package/dist/web-experimental-http.d.ts +0 -2
  389. package/dist/web-experimental-http.js +0 -12
  390. package/dist/web-experimental-http.js.map +0 -1
  391. package/dist/web-mod-agent.d.ts +0 -50
  392. package/dist/web-mod-agent.js +0 -207
  393. package/dist/web-mod-agent.js.map +0 -1
@@ -16,4 +16,9 @@ interface FleetProcessOptions {
16
16
  export declare function installFleetProcessHandlers(options: FleetProcessOptions): {
17
17
  readonly stopping: boolean;
18
18
  };
19
+ /** A deliberate config-recovery refusal is a failed start, not an arbitrary runtime rejection to keep alive. */
20
+ export declare function startFleetOrExit(manager: {
21
+ startAll(path: string): Promise<void>;
22
+ stopAll(): Promise<void>;
23
+ }, path: string, runtime: Pick<NodeJS.Process, "exit">, output: Pick<Console, "error">): Promise<void>;
19
24
  export {};
@@ -75,4 +75,25 @@ export function installFleetProcessHandlers(options) {
75
75
  });
76
76
  return { get stopping() { return stopping; } };
77
77
  }
78
+ /** A deliberate config-recovery refusal is a failed start, not an arbitrary runtime rejection to keep alive. */
79
+ export async function startFleetOrExit(manager, path, runtime, output) {
80
+ try {
81
+ await manager.startAll(path);
82
+ }
83
+ catch (error) {
84
+ const { ConfigStartupError } = await import("./config-history.js");
85
+ if (!(error instanceof ConfigStartupError))
86
+ throw error;
87
+ output.error(error.message);
88
+ let timer;
89
+ try {
90
+ await Promise.race([manager.stopAll().catch(() => { }), new Promise(resolve => { timer = setTimeout(resolve, 10_000); })]);
91
+ }
92
+ finally {
93
+ if (timer)
94
+ clearTimeout(timer);
95
+ }
96
+ runtime.exit(1);
97
+ }
98
+ }
78
99
  //# sourceMappingURL=fleet-process-handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-process-handlers.js","sourceRoot":"","sources":["../src/fleet-process-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-process-handlers.js","sourceRoot":"","sources":["../src/fleet-process-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const fleetServiceOwner: {
2
+ updateRefusal(home: string, options?: {
3
+ locale?: string;
4
+ }): string | null;
5
+ restartRefusal(home: string, service: {
6
+ unit: string;
7
+ user: boolean;
8
+ }, options?: {
9
+ locale?: string;
10
+ }): string | null;
11
+ };
@@ -0,0 +1,3 @@
1
+ import { createRequire } from "node:module";
2
+ export const fleetServiceOwner = createRequire(import.meta.url)("../launcher/fleet-service-owner.cjs");
3
+ //# sourceMappingURL=fleet-service-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-service-owner.js","sourceRoot":"","sources":["../src/fleet-service-owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,qCAAqC,CAGpG,CAAC"}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: credential-profiles
3
- description: Run agents on more than one subscription of the same backend. Use when someone asks for a worker on a different account, wants an agent moved to another subscription, or asks which subscription an agent is using. Currently kiro-cli, codex and claude-code.
3
+ description: Run agents on more than one subscription or login of the same backend (credential profiles). Use when someone asks for a worker on a different account; to switch, change or move an agent's profile, credential profile, account or login (codex, claude-code, kiro-cli); whether its session or conversation continues after the switch; or which subscription an agent is using. Also 換帳號、換 profile、切換 codex/claude/kiro 登入、換訂閱、切換後接續 session. Currently kiro-cli, codex and claude-code.
4
4
  roles: [general]
5
5
  ---
6
6
 
@@ -97,6 +97,15 @@ update_instance_config(
97
97
  )
98
98
  ```
99
99
 
100
+ For codex (or claude-code) the call is the same with that backend's key:
101
+
102
+ ```
103
+ update_instance_config(
104
+ name: "research-a",
105
+ config: { backend_options: { codex: { credential_profile: "personal" } } },
106
+ )
107
+ ```
108
+
100
109
  The credentials are read when the CLI starts, so a running instance **is
101
110
  restarted for you** and the reply says `restarted: true`. A paused or stopped one
102
111
  is not started: the reply says `restarted: false`, and the switch applies at its
@@ -127,6 +136,7 @@ it is not a check that the new process opened the same thread. If there is no
127
136
  suitable session (or the DB is unreadable), Codex starts fresh as it would on any
128
137
  other launch. **Never** copy `state_5.sqlite`, the `cx/` hash dirs or rollout
129
138
  JSONL by hand. That can fork or corrupt the thread index.
139
+ Do not run `codex resume <id>` by hand or look up session ids in `~/.codex/sessions`: the restart takes AgEnD's normal resume path itself.
130
140
 
131
141
  **Claude Code — copy nothing yourself.** AgEnD copies the transcript and its
132
142
  folder into the new profile and resumes it there with `--continue`. The
@@ -29,7 +29,7 @@ When an instance reports back, classify the outcome:
29
29
  - Success → Summarize key results for user. Omit internal coordination noise.
30
30
  - Partial → State what succeeded, what remains, proposed next steps.
31
31
  - Failure → Retry up to 2 times. If still failing: try alternative instance, reduce scope, or return partial result clearly marked.
32
- - No response → when a `[system:reply-overdue]` notice arrives (after 15 min by default), check `describe_instance` and `delivery_status` before asking again. If still silent: report to user with options.
32
+ - No response → check `describe_instance` and `delivery_status` before asking again (the owner is reminded on its own; you are not notified). If still silent: report to user with options.
33
33
 
34
34
  ## Shared Decisions
35
35
 
@@ -35,7 +35,7 @@ agend update --yes # from a fleet session: the installed channel's la
35
35
  agend update --version 2.2.0 --yes # a specific version
36
36
  ```
37
37
 
38
- It installs the selected release, checks the install, and restarts the fleet service. `--alpha` / `--beta` / `--stable` pick a channel; details in docs/cli.md. A beta install stays on the beta channel: to move it to the stable release (for example from a 2.3.2 beta to 2.3.2), use `agend update --stable --yes`, and only when the user asked for it.
38
+ It installs the selected release, checks the install, and restarts the fleet service. `--alpha` / `--beta` / `--stable` pick a channel; details in docs/cli.md. A beta install stays on the beta channel and keeps getting betas.
39
39
 
40
40
  **Manual restart (if update isn't needed):**
41
41
  ```bash
@@ -6,7 +6,7 @@ roles: [general]
6
6
 
7
7
  ## Auth failure (auto-pause)
8
8
 
9
- When AgEnD sees `auth_error` it **pauses** that instance (`pausePending` sticky):
9
+ When AgEnD sees `auth_error` and its token-free auth check does not vouch for the login, it **pauses** that instance (`pausePending` sticky). Auth text on the pane alone (an agent quoting a login message) changes nothing:
10
10
  - One notification **per backend** (not per instance) — log in once, same-backend peers recover.
11
11
  - Auth is **per backend**: one re-login restores every instance on that backend (claude-code, codex, kiro-cli, grok, opencode, antigravity, muse).
12
12
  - Re-login: `/login <backend>` (opencode: `opencode auth login` in a terminal), then wake the affected instance.
@@ -40,6 +40,8 @@ Verified by running each one, not read from docs.
40
40
 
41
41
  ## kiro-cli
42
42
 
43
+ Switching an agent's profile or login and keeping its session → the `credential-profiles` skill (update_instance_config); never resume by hand.
44
+
43
45
  - **Store:** `~/.kiro/sessions/cli/<uuid>.json`
44
46
  - **DB:** `~/.local/share/kiro-cli/data.sqlite3`, table `conversations_v2`
45
47
  - `key` — the instance's working directory
@@ -103,6 +105,8 @@ cur.execute("SELECT session_id FROM session_docs_fts WHERE session_docs_fts MATC
103
105
 
104
106
  ## claude-code
105
107
 
108
+ Switching an agent's profile or login and keeping its session → the `credential-profiles` skill (update_instance_config); never resume by hand.
109
+
106
110
  - **Store:** `~/.claude/projects/<path-encoded>/<session-uuid>.jsonl` — **the filename is the session ID**.
107
111
  - `<path-encoded>` = the absolute cwd with every `/` replaced by `-`.
108
112
 
@@ -127,6 +131,8 @@ A session with no `ai-title` line is simply untitled — say so rather than inve
127
131
 
128
132
  ## codex
129
133
 
134
+ Switching an agent's profile or login and keeping its session → the `credential-profiles` skill (update_instance_config); never resume by hand.
135
+
130
136
  Restoring works well; **listing is the weak part — there is no index table.**
131
137
 
132
138
  - **Store:** `~/.codex/sessions/YYYY/MM/DD/rollout-<timestamp>-<uuid>.jsonl`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: web-appearance
3
- description: How you look on the AgEnD web dashboard — check it, change your own theme, identity card, identity colour and widgets, set an ambient effect (falling petals, click stars), play Canvas Worker effects in your chat (and offer a Try), preview the result, share it as a mod; and, for General, changing Settings → Look for the user
3
+ description: How you look on the AgEnD web dashboard — check it, change your own theme, identity card, identity colour and widgets, set an ambient effect (falling petals, click stars), and preview the result; and, for General, changing Settings → Look for the user
4
4
  roles: [general, worker, classic]
5
5
  ---
6
6
 
@@ -21,8 +21,6 @@ can shape how you look there — **only your own look, and only on the surfaces
21
21
  | Your chat header strip and Details page | widgets: small panels of facts the dashboard draws | `set_web_widget`, `remove_web_widget` |
22
22
  | An ambient effect in your chat | falling petals, snow, rising lanterns, twinkles, stars where a person clicks — data only, drawn by the dashboard | `set_web_ambient`, `clear_web_ambient` |
23
23
  | Your character in Fleet → Org chart → Office | walk to a seat, a spot or a person, say a short line, hold a pose — for a few seconds (off until a person switches it on) | `office_view`, `office_set` |
24
- | A file of your look | a mod: export yours, or propose one for a person | `export_web_mod`, `propose_web_mod` |
25
- | Effects in your chat | Canvas Worker animations, and Try cards an admin outside the public link may start | `upload_web_effect`, `apply_web_effect`, `preview_web_effect`, … (see Effects) |
26
24
 
27
25
  None of these tools takes a target: they always act on you. You can't change another instance, the dashboard's own
28
26
  chrome (beyond your colours on it while your chat is open), a person's sidebar widget, or a person's custom CSS.
@@ -35,8 +33,7 @@ URLs, assets only as `url("asset:<id>")`, at most 64 KiB. Other instances can't;
35
33
  of this skill).
36
34
 
37
35
  1. **Read first:** `get_web_settings` returns a `summary` in plain words (tell the user from it), the values, and
38
- `people`: the host operator and everyone who has signed in. Host settings are everyone's on this host. Custom CSS and
39
- effect slots are one person's own: pass `person` as the entry whose id is the user's (`person:<adapter>:<their id>`),
36
+ `people`: the host operator and everyone who has signed in. Host settings are everyone's on this host. Custom CSS is one person's own: pass `person` as the entry whose id is the user's (`person:<adapter>:<their id>`),
40
37
  else the host operator's are changed.
41
38
  2. **One change per call:** `set_web_settings({ person?, change })`, where `change.what` is one of:
42
39
 
@@ -47,19 +44,15 @@ of this skill).
47
44
  | `page_colours` | where one agent's theme colours go: `page` (the whole page), `chat` (only its chat) or `agent` (its own `page.on`) — as ⋯ → Page colours sets it | `{ what: "page_colours", instance: "atlas", choice: "chat" }` |
48
45
  | `banner_focus` | which part of one agent's cropped card banner stays in view: `focus` 0 (top) … 100 (bottom), 50 the centre; it wins over the agent's own `card.bannerFocus`; null follows the agent's again | `{ what: "banner_focus", instance: "atlas", focus: 20 }` |
49
46
  | `custom_css` | `save` (with `text`): goes **on trial**. It waits until they open the dashboard (up to 10 minutes; never opened, it goes back unseen), then goes back by itself 20 s after it is on their screen unless kept (#2198). `keep` (with `trial`: the id `save` returned — a different trial on now, say one they saved on their page since, is refused with `trial_mismatch`, never kept instead; or, kept after that 20 s ran out, it is put back in force as `use` of it), `revert` (the trial), `use` (with `version`: an earlier saved one, at once), `off` | `{ what: "custom_css", action: "save", text: "…" }`; tell them to open the dashboard and look, then `keep` (with that `trial`) only when they say so — a `keep` that comes too late (`not_on_trial`) means use `use` with the version from `get_web_settings` |
50
- | `mod` | an agent's proposal: `review` (instance → `stage`, `plan`, `plan_hash`), then `install` (stage, plan_hash, `include`: the parts, `target`: the agent); `cancel`, `dismiss`, `uninstall` (id) | review, show the user the plan, install only what they asked for — never custom CSS unasked. A person has one review open at a time: while theirs is open (`mod_review_open`) ask them to finish it; a mod they imported from a file is theirs to install (`mod_not_from_an_agent`) |
51
- | `effect` | `apply` (instance, id, params?) or `remove` (instance, id?) an effect on a chat | |
52
47
  | `ambient` | one agent's ambient effect, set for the user: `ambient` is the same spec as `set_web_ambient`'s (it replaces the one of its kind, and the agent can't change it after); `ambient: null` clears (`which`: `loop` or `click`, default both) | `{ what: "ambient", instance: "atlas", ambient: { preset: "fall", glyphs: ["🌸","❀","✿"] } }` |
53
- | `effect_slot` | a person's `sidebar` / `header` / `page` / `box` / `cursor` effect (an id, or null) | |
54
48
  | `restore_defaults` | the host settings back to their defaults, and the person's custom CSS off | |
55
49
 
56
50
  3. **Say what changed** in the user's words (read again if unsure). A refusal says why: the same words the page would
57
51
  show.
58
52
 
59
53
  **Only the person can do these, on the page:**
60
- - choose a file from their computer: import a mod file, upload an effect folder, add a CSS asset or a card picture;
54
+ - choose a file from their computer: add a CSS asset or a card picture;
61
55
  - this browser's own switches: custom CSS off on this device, pausing effect playback;
62
- - download an export;
63
56
  - the card upload limits (fleet configuration; a raise waits for an admin's confirmation).
64
57
 
65
58
  ## Look first
@@ -242,7 +235,6 @@ Then, as you go: `set_web_widget { "slot": "chat_header", "data": { "tests": 75
242
235
 
243
236
  An ambient effect is **data only**: you choose a preset and its glyphs, the dashboard draws them. No code runs, so it
244
237
  needs no Try, no preview consent and no measurement — use it for petals, snow, lanterns, sparkles and stars on a click.
245
- Use a Canvas Worker effect (below) only for what a preset can't express.
246
238
 
247
239
  `set_web_ambient { preset, glyphs, colors?, count?, duration?, size?, sway?, spread?, rotate?, opacity? }`:
248
240
 
@@ -328,43 +320,15 @@ tools are not in your list), you can publish them yourself instead of asking a p
328
320
  The skin-pack manifest format — every key, its ranges, a minimal example — and the limits are in the Office guide:
329
321
  [docs/office.md → Make a skin pack](https://github.com/songsid/AgEnD/blob/main/docs/office.md#make-a-skin-pack). Point people there too when they ask how the Office works.
330
322
 
331
- ## Mods
332
-
333
- A mod is one file, `<name>-<version>.agendmod.json`, that carries a look: a theme with its pictures, card text,
334
- widgets and effects. People import mods in **Settings → Look → Mods**. **You never import**: a person reviews
335
- everything in a mod and ticks what to apply.
336
-
337
- - `export_web_mod { name, version, title? }` writes **your own** look to `.agend/mods/<name>-<version>.agendmod.json`
338
- in your working directory and returns `{ path, bytes }`. It carries your theme with its pictures, the effects your
339
- theme places (with their params) when they are yours or shared with you, your own card text (not a person's card
340
- fields), the widgets and ambient effects you set yourself. A person's private effect placed on you stays out (`effects_omitted` counts it).
341
- It never carries custom CSS or the sidebar widget, which are a person's. `name` is a-z, 0-9 and -, `version` is
342
- MAJOR.MINOR.PATCH.
343
- - `propose_web_mod { file }` sends a mod file from your working directory (at most 8 MiB) for a person to review. It
344
- is checked whole and answers with its problems if it isn't valid. **A mod carrying custom CSS is refused**
345
- (`owner_css_not_from_agent`). A muted line in your chat says it was proposed. Nothing changes until a person
346
- installs it. One proposal at a time: a new one replaces yours.
347
- - A widget a person placed from a mod is theirs: you may give it values (`set_web_widget` with `data`), but not replace
348
- or remove it (`person_placed`).
349
-
350
- The file format: `{ "format": "agend-mod", "v": 1, "manifest": { name, version, title, description?, author?,
351
- requires?: { agend: ">=X.Y.Z" }, contents: { theme?, identity?, widgets?: { chat_header?, details? }, ambient?, effects? } },
352
- "files": { "<path>": { "sha256", "b64" } } }`. Every file is listed with its sha256 and used by exactly one part, paths
353
- are lowercase with no `..`, and a theme names its pictures by path (an ambient's glyph pictures too: `{ "asset": "<path>" }`). The easiest way to get one right is to set your look
354
- with the tools above, then `export_web_mod`.
355
-
356
323
  ## Limits
357
324
 
358
325
  - At least **30 s** between changes, at most **10 changes an hour** — refused with `rate_limited` and
359
326
  `retry_after_s`. Only an accepted change counts; a refused or invalid one costs nothing.
360
- - Uploads (pictures, effects, proposed mods) are not counted. Each picture slot's size limits, your picture quota and
327
+ - Picture uploads are not counted. Each picture slot's size limits, your picture quota and
361
328
  each file's own caps still apply; using a picture in your theme is a change.
362
329
  - Widget values (`set_web_widget` with `data` only): at least **10 s** apart, at most **180 an hour**, apart from the
363
330
  above.
364
331
  - `set_web_ambient` and `clear_web_ambient` are changes.
365
- - Effects: `apply_web_effect` and `remove_web_effect` are changes; `upload_web_effect` and `propose_web_mod` are not
366
- counted.
367
- At most 10 effects and 8 MiB of your own, at most two placed in your chat.
368
332
  - Plan the whole look, check it in one `set_web_theme`, then preview — don't iterate change by change.
369
333
 
370
334
  ## A good workflow
@@ -377,12 +341,11 @@ with the tools above, then `export_web_mod`.
377
341
  From a shell: `agend-agent theme get|set key=value…|set --json '<patch>'|clear <path>…|asset <slot> <file>|reset`,
378
342
  `agend-agent appearance`, `agend-agent appearance preview [light|dark]`, and
379
343
  `agend-agent widget set <slot> '<spec json>' ['<data json>']|data <slot> '<data json>'|remove [slot]`,
380
- `agend-agent ambient set '<spec json>'|clear [loop|click]`, `agend-agent office view [office]|set '<json>'`, and
381
- `agend-agent mod export <name> <version> [title]|propose <file>`.
344
+ `agend-agent ambient set '<spec json>'|clear [loop|click]`, `agend-agent office view [office]|set '<json>'`.
382
345
 
383
346
  ## Files in your working directory
384
347
 
385
- Asset uploads, effect directories and mod proposals must be inside your working directory. For an external project,
348
+ Asset uploads must be inside your working directory. For an external project,
386
349
  use files there as before. For your own AgEnD-managed workspace under `~/.agend/workspaces/`, ordinary files there
387
350
  also work; no staging folder is required. This includes the standard `<your-instance-name>` folder (ClassicBot and
388
351
  instances without a project directory) and an exclusively configured folder with another name, such as instance
@@ -391,10 +354,10 @@ not overlap another instance's configured or standard workspace, including persi
391
354
  stopped or paused. The `workspaces/` root itself is not a workspace.
392
355
 
393
356
  General, adapter-specific General (such as `general-telegram`), and other configured working directories elsewhere
394
- inside the AgEnD state directory must stage inputs under **`web-assets/` or `web-effects/`**. For example, put a banner at
395
- `web-assets/banner.png` or an effect package at `web-effects/sparks/`, relative to that working directory. Its root
396
- and backend configuration folders are not upload areas. Generated previews and exported mods still use the fixed
397
- `.agend/appearance/` and `.agend/mods/` directories and can be read back or proposed there.
357
+ inside the AgEnD state directory must stage inputs under **`web-assets/`**. For example, put a banner at
358
+ `web-assets/banner.png`, relative to that working directory. Its root
359
+ and backend configuration folders are not upload areas. Generated previews use the fixed
360
+ `.agend/appearance/` directory and can be read back there.
398
361
 
399
362
  The daemon uses its launch identity and configuration; the CLI resolves `AGEND_INSTANCE_NAME` against `fleet.yaml`.
400
363
  These checks require a canonical, exclusively owned directory: the state root, shared or overlapping configured
@@ -403,165 +366,11 @@ select an identity or working directory. Missing or unreadable ownership evidenc
403
366
 
404
367
  Inside all admitted in-state areas, `.env`, databases and their WAL/SHM/journal files, `instances/`,
405
368
  `credential-profiles/`, `inbox/`, `web-files/`, `web-chat.json`, `chat-logs/`, backend credential/session/config files,
406
- and hidden files or folders are refused. The only hidden-directory exception is the two generated `.agend/`
407
- output directories above; their contents still undergo the sensitive-name checks. Hard-linked state files are also
369
+ and hidden files or folders are refused. The only hidden-directory exception is the generated `.agend/`
370
+ output directory above; their contents still undergo the sensitive-name checks. Hard-linked state files are also
408
371
  refused. Copy an intended asset into staging as a new regular file; do not link a private state file there.
409
372
 
410
373
  Paths are checked after resolving symlinks. A symlink named after General or a workspace, or in its managed parent
411
374
  path, cannot widen access; uploaded files themselves must not be symlinks. Containment still applies to relative and
412
- absolute paths and to each file in an effect package. The CLI name and current directory are controlled by its shell:
375
+ absolute paths and to each uploaded file. The CLI name and current directory are controlled by its shell:
413
376
  these local checks prevent accidental uploads, but do not isolate shells running as the same OS user.
414
-
415
- ## Effects
416
-
417
- A Canvas Worker effect is a small animation drawn by code that runs in an isolated Worker: no page, no DOM, no
418
- network. For petals, snow or stars on a click, an ambient effect (above) is simpler and plays without a Try. You place
419
- effects **only in your own chat**; a person can place them in the regions an effect's manifest
420
- allows. None of these tools takes a target.
421
-
422
- **The package** (CW1): a directory in your working directory with `effect.json` and `worker.js`, optionally
423
- `poster.png`, `cursor.png` and `assets/*.png|jpg|jpeg|webp|gif`. No HTML or CSS, at most 20 files and 16 assets. The
424
- smallest valid `effect.json`:
425
-
426
- ```json
427
- { "v": 1, "kind": "effect", "runtime": "canvas-worker-v1", "worker": "worker.js", "name": "spark", "title": "Spark", "regions": ["chat"], "layer": "behind", "wants": [] }
428
- ```
429
-
430
- - Optional fields: `description`, `poster` (`"poster.png"`), `box`, `cursor` (its `hotspot` inside the image) and
431
- `params`.
432
- - `name`: 1..32 characters, starting with a-z or 0-9, then a-z, 0-9 and -.
433
- - `title` (1..40) and `description` (up to 200): one line each, counted in characters as people see them.
434
- - `regions`: 1–5 of `chat`, `sidebar`, `header`, `page`, `box`. **Include `chat` to place it in a chat**: applying
435
- one without it is refused (`effect_region`), and so is a mod placing it. The other regions are ones a person may
436
- choose it for.
437
- - `layer`: `behind` (under the content) or `front` (over it).
438
- - `wants`: up to 5 of `pointer`, `state`, `reply`, `mention`, `theme`. **`mention` is reserved and never fires in
439
- 2.3.0** (see Effect event availability).
440
- - `params`: up to 16 typed parameters (`number`, `int`, `bool`, `enum`, `color`) a placement may set.
441
- - `worker.js` (at most 1 MiB, a classic script: static `import` / `export` are refused) draws through the `agend` API:
442
- `canvas`, `params`, `asset()`, `on()`, `frame()` and `ready()`. Call `ready()` within 10 s, or it is stopped. Network
443
- and dynamic imports are blocked at run time; the upload may warn `network_or_import_api_unsupported`, but don't rely
444
- on the warning to catch every use.
445
- - Size: `effect.json` at most 64 KiB; the whole effect at most 8 MiB as uploaded and **1 MiB normalized**. Pictures:
446
- at most 4096 px a side, and **8,388,608 pixels in total** across the assets, poster and cursor together. A cursor is
447
- a square PNG of at most 64 px and 32 KiB (after metadata is stripped).
448
-
449
- **Reusable pointer example:** [`docs/examples/click-sparks`](https://github.com/songsid/AgEnD/blob/main/docs/examples/click-sparks.md) has a small two-file CW1 package: click for a burst, hold the primary button and move for a trail. Copy it into your working directory before uploading. Protected controls receive no pointer input; samples are coalesced (up to 60 Hz, 30 at reduced quality), so do not use it as a required click or drag control.
450
-
451
- **The tools:**
452
-
453
- - `upload_web_effect { dir }` → `{ id, warnings }`. Uploads are not counted; the effect's own size caps apply.
454
- **Your own** copies are at most **10 effects and 8 MiB**; effects a person shared with you don't count.
455
- - `list_web_effects` — your own effects and those a person shared with you: `id`, `name`, `title`, `regions`, `layer`,
456
- `bytes`, `latest_profile`. A currently placed effect also has `playback`: `status: "reported_blocked"` with closed
457
- `reasons`, or `status: "unknown"`. `get_web_appearance.effects` lists your current placements with the same projection.
458
- This means **some recent viewers reported blocked**, not all viewers and not a live permission or health check.
459
- Observations expire after five minutes and stay in memory. Agents receive no viewer identifiers, counts, device/OS,
460
- text, URLs or observation timestamps. Unknown means unknown; do not keep reapplying to bypass a viewer's choice.
461
- - `apply_web_effect { id, params? }` places one in your chat, **at most two at a time**, with the declared `params`
462
- (unknown or out of range → `effect_params`; regions without `chat` → `effect_region`). `remove_web_effect { id? }`
463
- takes one out, or all of them. Both are changes (30 s apart, 10 an hour), and are refused while a person has locked
464
- your theme (`locked`) or when the fleet turned agent changes off (`theme_editing_off`).
465
- - `delete_web_effect { id }` deletes your own copy once nothing uses it; a placement, mod, stage or Try offer gives
466
- `effect_in_use`. Another's copy is never removed.
467
- - `profile_web_effect { id }` — how it ran on viewers' pages, per device class: `unmeasured`, or `reported` with
468
- records carrying a `verdict` (`ok`, `degraded`, `paused`, `off`) and a `reason` (`host_budget`, `hidden`,
469
- `reduced_motion`, `save_data`, `viewer_off`, `clock_unavailable`, `gates_unknown`, or none).
470
- `list_web_effects`' `latest_profile` has the latest one. These are best-effort reports of what happened, not live
471
- notices. No measurement means unknown, never healthy.
472
- - `preview_web_effect { id }` offers a Try card in your chat (see Try below).
473
- - **Sharing is a person's act.** You can't share an effect. You may use one a person shared with you (list, apply,
474
- Try, profile, put in a mod) while it is shared. When they unshare it, a placement already in your chat stays
475
- eligible for playback (subject to the viewer's and the safety rules); applying, Try, listing, profiling or exporting
476
- it again needs your own copy or another share, else `not_found`. A placement is never a grant to export it.
477
-
478
- **On a viewer's page:**
479
-
480
- - At most **3** effects play at once, at most **2** of them `front` (1 and 1 on a constrained device); the rest wait
481
- (`frame_limit`, `front_limit`).
482
- - CW uses an opaque isolated document on the dashboard listener: no HTML-preview consent, separate preview port or
483
- localhost requirement. Signed-in public/guest viewers may read and play only current effects in chats they can see;
484
- this grants no library management, personal-slot, private-image, Trial or profile access. Their Chat header has a
485
- browser-local show/off switch, including on phones, and an inline recovery action. It never writes host preferences.
486
- - Playback starts without an empty-page FPS calibration. Safe mode, hidden tabs and the viewer's show switch still
487
- stop it. **Effects: follow the system's reduced-motion setting** is device-local and **off by default**, shared with
488
- ambient effects. The OS request alone does not block playback; data saver is informational. A one-time chat note
489
- offers to follow reduced motion, and a motion refusal offers **Play effects anyway** right there, including public/guest
490
- viewers. Safe mode offers **Leave safe mode**. A poster may replace unsupported playback or a chosen motion block
491
- (see Static Chat fallback). Menus/dialogs stop `front` effects temporarily.
492
- - A layout refusal keeps its local code in the Chat notice and Effects dialog (for example `stock_order_unknown`);
493
- the browser console also names it. Report that code rather than repeatedly applying the effect. A failed Try leaves
494
- its stop code on the offer card. Pointer-leave does not stop Try; window blur, closing, navigation or lost stage proof do.
495
- Agent playback summaries still contain only the closed reporting reasons, never raw local diagnostics.
496
- - **Safety pause** — it measures the page's responsiveness, not your Worker's CPU. Host rAF observations learn a live
497
- cadence during warm-up, then fix the mount's floor at 90% of a faster observed cadence, capped at 55 fps (50 on a
498
- constrained device). A steady 30 Hz display has a 27 fps floor. This is not an empty-page health certificate; uniformly
499
- slow startup can look like a low-refresh display. Where reported, long tasks may take at most 50 ms a second (25 ms
500
- constrained); unknown observations never count as free. Overlapping 2-second windows are judged at most once a second
501
- after warm-up, and three bad judgements in a row pause the effect (`host_budget`).
502
- - Only a viewer's explicit **Resume** restarts a safety-paused effect, and it doesn't clear the history: three such
503
- pauses within 24 hours turn the effect **off** for that viewer's browser and device class, across tabs and reloads,
504
- and Resume then refuses. It doesn't come back by itself after 24 hours.
505
- - **Your `front` effects are paused while the viewer's custom CSS is on, loading or unknown**; `behind` effects play
506
- once the page's stock layout is proven. A person's placement is exempt. Don't keep re-applying (see below).
507
-
508
- ## Owner-level effect selections
509
-
510
- The five owner keys `fx.sidebar`, `fx.header`, `fx.page`, `fx.box` and `fx.cursor` are a signed-in person's web
511
- preferences, never agent tool targets. Platform-bound sessions use separate adapter/user buckets (no account merge).
512
- A web-only `agend web --code` session uses the explicit **host-wide operator** bucket, shared by everyone signed in
513
- as that host operator. Header tokens cannot read or write these five keys. Existing visible host preferences are
514
- unchanged; there is no local-key migration. Profile/custom-CSS internal pointers keep their existing identity rules.
515
-
516
- When a shared effect is unshared, a personal selection remains stored but becomes unavailable at its next resource
517
- authorization. It supplies no further code or cursor image; the person can clear it. Its reference keeps the blob
518
- from being collected until cleared. This is deliberately stricter than chat placements' retained-runtime reads:
519
- a personal choice keeps following its person's current own/shared access, while a chat preserves the exact effect
520
- placed there. A reference is not a sharing or export grant. Do not keep retrying a denied personal selection.
521
-
522
- Owner selectors are available in Settings → Look. With effects enabled, personal page/header/sidebar/box choices play across supported stock pages in the same pool
523
- as signed-in Chat. HTML-preview consent and its service are not involved.
524
- Look offers slot Pause/Resume and unavailable/Clear controls. The personal cursor uses a static PNG on the host shell without HTML-preview consent: no Worker/code read or frame slot. It preserves explicit pointer/text/resize cursors, falls back while dragging or on failure, and has status/Clear rather than Worker Pause/Resume. Before revealing paint, the host must prove stock content
525
- ordering and trust paint coverage. Agent front effects must remain paused when custom CSS is active, loading or
526
- unknown; a person sees the reason and can open the causing setting. Human placements retain their exemption from
527
- that agent restriction, and behind effects still require proven ordering. Saving a placement alone is not proof of
528
- playback.
529
-
530
- Visible menus, dialogs and Keep/tour notices suppress foreground effects; a human placement does not bypass them.
531
- Editable focus suppresses pointer signals, not unrelated drawing. Protected controls stay clipped out of front paint;
532
- keyboard events never enter the Worker. Unknown stock layout refuses admission. A trusted foreground plane is
533
- deferred to #1940; do not keep reapplying an agent front while custom CSS is on, loading or unknown.
534
-
535
- ### Try: offer first, signed-in admin click to start
536
-
537
- `preview_web_effect({id})` posts a volatile Try card in your own web chat, using your current own/shared read rights. It starts nothing and changes no appearance. The sample is physically clipped inside its own host panel or sheet. Only an explicit
538
- click by a signed-in **admin outside the public link** may start it (localhost is not required); never an agent, public link, header token or automatic action.
539
- The host owns a visible Trial label and Stop control. Closing the panel/sheet, navigating, window blur, or another
540
- menu/dialog stops it. The explicit Try click consents to this sample only; no global HTML-preview opt-in is needed or changed.
541
- The host isolates the Trial controls and clipped stage in a closed Shadow DOM with fixed styles and reset typography.
542
- Custom CSS stays active elsewhere. The same caps, profiler and safety stops apply. Ordinary foreground effects stay suppressed. A volatile offer lasts at most ten minutes (offering the same effect again keeps that offer and its expiry; a different effect replaces it); every read
543
- rechecks the originating agent's current own/shared access, with the trial bound to the admin's session and epoch.
544
- There is no saved placement, claim, share, export or new saved profile record. Cards are memory-only and become inert when expired; a restart never restores them. Try uses manifest defaults and the existing app pool, not a second runtime. Do not treat an offer id or ordinary reply button
545
- as permission to run or fetch an effect, and do not keep retrying an unavailable Try.
546
-
547
-
548
- ## Static Chat fallback
549
-
550
- When Worker/transport support is unavailable, the chosen motion preference prevents playback, or the page has no playback session,
551
- a current chat placement with a poster can show its static PNG **behind** the content; a front declaration does not
552
- make its poster foreground. No poster means nothing is drawn. Safe mode and the viewer's show switch hide posters
553
- too; unknown stock ordering refuses paint. Explicit Pause, queued effects and a failed live read are not replaced by
554
- this surface fallback. A failed static read/decode stops its poster pool until a changed revision or page reload;
555
- there is no automatic network retry. Public viewers can read current Chat Worker code, with fresh session/exposure/placement checks; they acquire no library or personal-slot grant. They have no placement-management or Try controls.
556
-
557
- The public-link show switch is this browser's choice, kept separately from boot-cached host defaults; it never writes
558
- a host preference. The ordinary signed-in switch keeps its existing host preference. Do not depend on decoration to
559
- carry an important message.
560
-
561
- ## Effect event availability
562
-
563
- Canvas Worker manifests may reserve `wants: ["mention"]`, but **mention is reserved and never emitted in 2.3.0**.
564
- Do not build an effect that depends on it, infer mentions from reply text, or retry to obtain that signal. Provider-confirmed,
565
- viewer-scoped direct-ID mention pulses are deferred to [#1963](https://github.com/songsid/AgEnD/issues/1963).
566
- Reply pulses are transient: only a newly accepted live SSE agent reply can qualify. History, reconnect replay and polling
567
- never create a pulse; a live receipt delayed over five seconds is dropped. No reply text, author or mention targets reach effects.