@songsid/agend 2.3.0-beta.1 → 2.3.0-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 (351) hide show
  1. package/dist/agent-cli-instructions.md +5 -2
  2. package/dist/agent-cli.js +43 -7
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.js +4 -0
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/agent-file-read.d.ts +14 -6
  7. package/dist/agent-file-read.js +207 -19
  8. package/dist/agent-file-read.js.map +1 -1
  9. package/dist/agent-whats-new.d.ts +11 -0
  10. package/dist/agent-whats-new.js +29 -15
  11. package/dist/agent-whats-new.js.map +1 -1
  12. package/dist/auth-api.d.ts +30 -1
  13. package/dist/auth-api.js +45 -13
  14. package/dist/auth-api.js.map +1 -1
  15. package/dist/authority/authority-state.d.ts +38 -0
  16. package/dist/authority/authority-state.js +114 -0
  17. package/dist/authority/authority-state.js.map +1 -0
  18. package/dist/authority/session-authorizations.d.ts +43 -0
  19. package/dist/authority/session-authorizations.js +102 -0
  20. package/dist/authority/session-authorizations.js.map +1 -0
  21. package/dist/authority/web-authority.d.ts +120 -0
  22. package/dist/authority/web-authority.js +157 -0
  23. package/dist/authority/web-authority.js.map +1 -0
  24. package/dist/backend/claude-code.d.ts +2 -2
  25. package/dist/backend/claude-code.js +10 -5
  26. package/dist/backend/claude-code.js.map +1 -1
  27. package/dist/backend/types.d.ts +14 -0
  28. package/dist/backend/types.js +25 -0
  29. package/dist/backend/types.js.map +1 -1
  30. package/dist/backend-availability.d.ts +120 -0
  31. package/dist/backend-availability.js +396 -0
  32. package/dist/backend-availability.js.map +1 -0
  33. package/dist/backend-command.d.ts +21 -3
  34. package/dist/backend-command.js +23 -4
  35. package/dist/backend-command.js.map +1 -1
  36. package/dist/bundled-skills.d.ts +14 -0
  37. package/dist/bundled-skills.js +29 -0
  38. package/dist/bundled-skills.js.map +1 -0
  39. package/dist/cache-analysis.d.ts +47 -1
  40. package/dist/cache-analysis.js +68 -8
  41. package/dist/cache-analysis.js.map +1 -1
  42. package/dist/cache-ledger.d.ts +16 -3
  43. package/dist/cache-ledger.js +33 -13
  44. package/dist/cache-ledger.js.map +1 -1
  45. package/dist/cache-report-tool.d.ts +17 -0
  46. package/dist/cache-report-tool.js +40 -0
  47. package/dist/cache-report-tool.js.map +1 -0
  48. package/dist/cache-service.d.ts +70 -3
  49. package/dist/cache-service.js +178 -17
  50. package/dist/cache-service.js.map +1 -1
  51. package/dist/channel/adapters/discord.d.ts +7 -0
  52. package/dist/channel/adapters/discord.js +35 -0
  53. package/dist/channel/adapters/discord.js.map +1 -1
  54. package/dist/channel/mcp-tools.js +22 -10
  55. package/dist/channel/mcp-tools.js.map +1 -1
  56. package/dist/channel/types.d.ts +6 -0
  57. package/dist/classic-channel-manager.d.ts +10 -5
  58. package/dist/classic-channel-manager.js +12 -9
  59. package/dist/classic-channel-manager.js.map +1 -1
  60. package/dist/cli.js +130 -31
  61. package/dist/cli.js.map +1 -1
  62. package/dist/config-validator.js +103 -4
  63. package/dist/config-validator.js.map +1 -1
  64. package/dist/daemon.d.ts +7 -0
  65. package/dist/daemon.js +63 -16
  66. package/dist/daemon.js.map +1 -1
  67. package/dist/decision-list.d.ts +25 -0
  68. package/dist/decision-list.js +30 -0
  69. package/dist/decision-list.js.map +1 -0
  70. package/dist/delivery-outbox.d.ts +10 -0
  71. package/dist/delivery-outbox.js +12 -1
  72. package/dist/delivery-outbox.js.map +1 -1
  73. package/dist/fleet-context.d.ts +10 -0
  74. package/dist/fleet-manager.d.ts +417 -11
  75. package/dist/fleet-manager.js +1387 -109
  76. package/dist/fleet-manager.js.map +1 -1
  77. package/dist/fleet-traffic.d.ts +74 -0
  78. package/dist/fleet-traffic.js +196 -0
  79. package/dist/fleet-traffic.js.map +1 -0
  80. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +20 -5
  81. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
  82. package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
  83. package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
  84. package/dist/general-knowledge/skills/web-appearance/SKILL.md +257 -23
  85. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +476 -0
  86. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  87. package/dist/human-delivery-receipts.d.ts +24 -1
  88. package/dist/human-delivery-receipts.js +64 -11
  89. package/dist/human-delivery-receipts.js.map +1 -1
  90. package/dist/instance-config-impact.js +3 -1
  91. package/dist/instance-config-impact.js.map +1 -1
  92. package/dist/instance-names.d.ts +4 -0
  93. package/dist/instance-names.js +12 -0
  94. package/dist/instance-names.js.map +1 -0
  95. package/dist/instructions.d.ts +12 -1
  96. package/dist/instructions.js +13 -2
  97. package/dist/instructions.js.map +1 -1
  98. package/dist/locale.js +100 -8
  99. package/dist/locale.js.map +1 -1
  100. package/dist/ls-attach-resolve.d.ts +95 -0
  101. package/dist/ls-attach-resolve.js +174 -0
  102. package/dist/ls-attach-resolve.js.map +1 -0
  103. package/dist/memory-hogs.d.ts +27 -0
  104. package/dist/memory-hogs.js +124 -0
  105. package/dist/memory-hogs.js.map +1 -0
  106. package/dist/outbound-handlers.d.ts +10 -0
  107. package/dist/outbound-handlers.js +122 -2
  108. package/dist/outbound-handlers.js.map +1 -1
  109. package/dist/outbound-schemas.d.ts +164 -4
  110. package/dist/outbound-schemas.js +99 -3
  111. package/dist/outbound-schemas.js.map +1 -1
  112. package/dist/public-web-gateway.js +8 -2
  113. package/dist/public-web-gateway.js.map +1 -1
  114. package/dist/public-web-link.d.ts +9 -0
  115. package/dist/public-web-link.js +8 -0
  116. package/dist/public-web-link.js.map +1 -1
  117. package/dist/quickstart-api.d.ts +10 -1
  118. package/dist/quickstart-api.js +12 -4
  119. package/dist/quickstart-api.js.map +1 -1
  120. package/dist/reply-buttons-controller.d.ts +4 -0
  121. package/dist/reply-buttons-controller.js +2 -2
  122. package/dist/reply-buttons-controller.js.map +1 -1
  123. package/dist/restart-progress.d.ts +65 -1
  124. package/dist/restart-progress.js +236 -10
  125. package/dist/restart-progress.js.map +1 -1
  126. package/dist/rollout-index.d.ts +5 -0
  127. package/dist/rollout-index.js +26 -5
  128. package/dist/rollout-index.js.map +1 -1
  129. package/dist/scheduler/scheduler.d.ts +12 -0
  130. package/dist/scheduler/scheduler.js +83 -10
  131. package/dist/scheduler/scheduler.js.map +1 -1
  132. package/dist/service-installer.d.ts +2 -1
  133. package/dist/service-installer.js +18 -3
  134. package/dist/service-installer.js.map +1 -1
  135. package/dist/settings-api.d.ts +19 -0
  136. package/dist/settings-api.js +137 -2
  137. package/dist/settings-api.js.map +1 -1
  138. package/dist/settings-change.js +104 -0
  139. package/dist/settings-change.js.map +1 -1
  140. package/dist/settings-effect.js +17 -1
  141. package/dist/settings-effect.js.map +1 -1
  142. package/dist/tmux-manager.d.ts +5 -0
  143. package/dist/tmux-manager.js +16 -0
  144. package/dist/tmux-manager.js.map +1 -1
  145. package/dist/tool-permissions.d.ts +4 -6
  146. package/dist/tool-permissions.js +53 -5
  147. package/dist/tool-permissions.js.map +1 -1
  148. package/dist/topic-commands.d.ts +7 -1
  149. package/dist/topic-commands.js +18 -4
  150. package/dist/topic-commands.js.map +1 -1
  151. package/dist/types.d.ts +48 -1
  152. package/dist/ui/app-effects.js +77 -31
  153. package/dist/ui/chat-ambient.js +307 -0
  154. package/dist/ui/chat-effect-posters.js +8 -8
  155. package/dist/ui/chat-effects.js +101 -13
  156. package/dist/ui/chat-render.js +5 -2
  157. package/dist/ui/chat-strings.js +59 -6
  158. package/dist/ui/chat-thread.js +149 -21
  159. package/dist/ui/effect-trial-controller.js +13 -8
  160. package/dist/ui/effect-trial-panel.js +19 -16
  161. package/dist/ui/fleet-cache.js +23 -1
  162. package/dist/ui/fleet-canvas-layout.js +111 -0
  163. package/dist/ui/fleet-canvas.js +525 -0
  164. package/dist/ui/fleet-org.js +27 -12
  165. package/dist/ui/fleet-traffic.js +343 -0
  166. package/dist/ui/fleet-usage.js +401 -0
  167. package/dist/ui/panel-chat.js +127 -49
  168. package/dist/ui/panel-details.js +2 -1
  169. package/dist/ui/panel-fleet.js +41 -16
  170. package/dist/ui/panel-settings.js +26 -8
  171. package/dist/ui/preview.js +3 -2
  172. package/dist/ui/settings-appearance.js +42 -18
  173. package/dist/ui/settings-catalog.js +92 -0
  174. package/dist/ui/settings-dialogs.js +40 -12
  175. package/dist/ui/settings-effects.js +4 -3
  176. package/dist/ui/settings-guests.js +117 -0
  177. package/dist/ui/settings-learn.js +25 -0
  178. package/dist/ui/settings-model.js +15 -6
  179. package/dist/ui/settings-mods.js +23 -9
  180. package/dist/ui/settings-owner-effects.js +9 -9
  181. package/dist/ui/settings-strings.js +120 -42
  182. package/dist/ui/settings-web-authority.js +91 -0
  183. package/dist/ui/shared/agend-auth.js +1 -1
  184. package/dist/ui/shared/app-i18n.js +4 -2
  185. package/dist/ui/shared/app-prefs.js +5 -4
  186. package/dist/ui/shared/app-route.js +1 -1
  187. package/dist/ui/shared/app-session.js +2 -0
  188. package/dist/ui/shared/app-shell.js +75 -9
  189. package/dist/ui/shared/app-store.js +26 -1
  190. package/dist/ui/shared/app-stream.js +3 -1
  191. package/dist/ui/shared/app-themes.js +24 -6
  192. package/dist/ui/shared/app.css +364 -16
  193. package/dist/ui/shared/app.js +21 -14
  194. package/dist/ui/shared/card-strings.js +4 -0
  195. package/dist/ui/shared/effect-app-runtime.js +68 -19
  196. package/dist/ui/shared/effect-chat-runtime.js +16 -3
  197. package/dist/ui/shared/effect-frame.js +26 -7
  198. package/dist/ui/shared/effect-geometry.js +24 -9
  199. package/dist/ui/shared/effect-policy.js +21 -7
  200. package/dist/ui/shared/effect-profiler.js +31 -9
  201. package/dist/ui/shared/effect-registry.js +87 -48
  202. package/dist/ui/shared/effect-stock-snapshot.js +9 -0
  203. package/dist/ui/shared/effect-stock-trust.js +62 -10
  204. package/dist/ui/shared/effect-trial-shadow.js +62 -0
  205. package/dist/ui/shared/effect-trial-source.js +1 -1
  206. package/dist/ui/shared/effect-trial-stage.js +54 -31
  207. package/dist/ui/shared/effect-trial.css +40 -0
  208. package/dist/ui/shared/fx-motion.js +67 -0
  209. package/dist/ui/shared/identity-card.js +75 -4
  210. package/dist/ui/shared/identity-color.js +3 -3
  211. package/dist/ui/shared/instance-nav.js +194 -28
  212. package/dist/ui/shared/panel-view.js +24 -4
  213. package/dist/ui/shared/tokens.css +9 -3
  214. package/dist/ui/shared/ui-icons.js +1 -0
  215. package/dist/ui/shared/usage-dialog.js +22 -2
  216. package/dist/ui/shared/view-strings.js +68 -2
  217. package/dist/ui/shared/web-authorize.js +151 -0
  218. package/dist/ui/signin.html +1 -1
  219. package/dist/ui/web-terminal/terminal.css +4 -4
  220. package/dist/usage/providers.d.ts +28 -0
  221. package/dist/usage/providers.js +126 -36
  222. package/dist/usage/providers.js.map +1 -1
  223. package/dist/usage-report.d.ts +158 -0
  224. package/dist/usage-report.js +226 -0
  225. package/dist/usage-report.js.map +1 -0
  226. package/dist/usage-rollup.d.ts +51 -0
  227. package/dist/usage-rollup.js +168 -0
  228. package/dist/usage-rollup.js.map +1 -0
  229. package/dist/view-api.d.ts +39 -0
  230. package/dist/view-api.js +65 -4
  231. package/dist/view-api.js.map +1 -1
  232. package/dist/web-ambient.d.ts +72 -0
  233. package/dist/web-ambient.js +161 -0
  234. package/dist/web-ambient.js.map +1 -0
  235. package/dist/web-api.d.ts +69 -5
  236. package/dist/web-api.js +362 -45
  237. package/dist/web-api.js.map +1 -1
  238. package/dist/web-appearance-policy.d.ts +4 -6
  239. package/dist/web-appearance-policy.js +5 -12
  240. package/dist/web-appearance-policy.js.map +1 -1
  241. package/dist/web-appearance-tools.d.ts +3 -0
  242. package/dist/web-appearance-tools.js +22 -3
  243. package/dist/web-appearance-tools.js.map +1 -1
  244. package/dist/web-appearance-view.d.ts +27 -2
  245. package/dist/web-appearance-view.js +129 -14
  246. package/dist/web-appearance-view.js.map +1 -1
  247. package/dist/web-appearance.d.ts +17 -3
  248. package/dist/web-appearance.js +82 -7
  249. package/dist/web-appearance.js.map +1 -1
  250. package/dist/web-asset-parts.d.ts +5 -10
  251. package/dist/web-asset-parts.js +3 -3
  252. package/dist/web-asset-parts.js.map +1 -1
  253. package/dist/web-auth.js +3 -1
  254. package/dist/web-auth.js.map +1 -1
  255. package/dist/web-card.d.ts +14 -0
  256. package/dist/web-card.js +40 -6
  257. package/dist/web-card.js.map +1 -1
  258. package/dist/web-channel-echo.d.ts +7 -1
  259. package/dist/web-channel-echo.js +6 -2
  260. package/dist/web-channel-echo.js.map +1 -1
  261. package/dist/web-chat-history.d.ts +46 -0
  262. package/dist/web-chat-history.js +80 -3
  263. package/dist/web-chat-history.js.map +1 -1
  264. package/dist/web-commands.d.ts +1 -0
  265. package/dist/web-effect-bootstrap.d.ts +12 -0
  266. package/dist/web-effect-bootstrap.js +49 -0
  267. package/dist/web-effect-bootstrap.js.map +1 -0
  268. package/dist/web-effect-bundle.js +46 -1
  269. package/dist/web-effect-bundle.js.map +1 -1
  270. package/dist/web-effect-playback.d.ts +30 -0
  271. package/dist/web-effect-playback.js +71 -0
  272. package/dist/web-effect-playback.js.map +1 -0
  273. package/dist/web-effect-profiles.d.ts +4 -4
  274. package/dist/web-effect-service.d.ts +11 -4
  275. package/dist/web-effect-service.js +28 -5
  276. package/dist/web-effect-service.js.map +1 -1
  277. package/dist/web-effect-tools.d.ts +1 -0
  278. package/dist/web-effect-tools.js +8 -5
  279. package/dist/web-effect-tools.js.map +1 -1
  280. package/dist/web-effect-trials.d.ts +4 -4
  281. package/dist/web-effect-trials.js +6 -6
  282. package/dist/web-effect-trials.js.map +1 -1
  283. package/dist/web-effect-upload.d.ts +2 -4
  284. package/dist/web-effect-upload.js +3 -8
  285. package/dist/web-effect-upload.js.map +1 -1
  286. package/dist/web-effect-worker.d.ts +1 -1
  287. package/dist/web-effect-worker.js +2 -2
  288. package/dist/web-effect-worker.js.map +1 -1
  289. package/dist/web-effect.d.ts +14 -0
  290. package/dist/web-effect.js +21 -0
  291. package/dist/web-effect.js.map +1 -1
  292. package/dist/web-guest-access.d.ts +125 -0
  293. package/dist/web-guest-access.js +234 -0
  294. package/dist/web-guest-access.js.map +1 -0
  295. package/dist/web-guest-rooms.d.ts +82 -0
  296. package/dist/web-guest-rooms.js +135 -0
  297. package/dist/web-guest-rooms.js.map +1 -0
  298. package/dist/web-identity-color.d.ts +1 -1
  299. package/dist/web-identity-color.js +2 -2
  300. package/dist/web-identity-color.js.map +1 -1
  301. package/dist/web-identity-palette.d.ts +1 -1
  302. package/dist/web-identity-palette.js +2 -2
  303. package/dist/web-identity-palette.js.map +1 -1
  304. package/dist/web-login.d.ts +47 -0
  305. package/dist/web-login.js +115 -0
  306. package/dist/web-login.js.map +1 -1
  307. package/dist/web-mod-agent.d.ts +1 -1
  308. package/dist/web-mod-agent.js +12 -8
  309. package/dist/web-mod-agent.js.map +1 -1
  310. package/dist/web-mod-bundle.d.ts +14 -1
  311. package/dist/web-mod-bundle.js +68 -3
  312. package/dist/web-mod-bundle.js.map +1 -1
  313. package/dist/web-mod-export.d.ts +9 -0
  314. package/dist/web-mod-export.js +21 -0
  315. package/dist/web-mod-export.js.map +1 -1
  316. package/dist/web-mod-store.d.ts +7 -1
  317. package/dist/web-mod-store.js +21 -7
  318. package/dist/web-mod-store.js.map +1 -1
  319. package/dist/web-prefs.d.ts +14 -0
  320. package/dist/web-prefs.js +24 -4
  321. package/dist/web-prefs.js.map +1 -1
  322. package/dist/web-preview.d.ts +6 -2
  323. package/dist/web-preview.js +4 -2
  324. package/dist/web-preview.js.map +1 -1
  325. package/dist/web-returning-device.d.ts +41 -0
  326. package/dist/web-returning-device.js +57 -5
  327. package/dist/web-returning-device.js.map +1 -1
  328. package/dist/web-session-authorization.d.ts +132 -0
  329. package/dist/web-session-authorization.js +193 -0
  330. package/dist/web-session-authorization.js.map +1 -0
  331. package/dist/web-session.d.ts +70 -10
  332. package/dist/web-session.js +137 -22
  333. package/dist/web-session.js.map +1 -1
  334. package/dist/web-settings-patch.d.ts +49 -2
  335. package/dist/web-settings-patch.js +145 -1
  336. package/dist/web-settings-patch.js.map +1 -1
  337. package/dist/web-settings-tools.d.ts +89 -0
  338. package/dist/web-settings-tools.js +270 -0
  339. package/dist/web-settings-tools.js.map +1 -0
  340. package/dist/web-shell-routes.d.ts +1 -1
  341. package/dist/web-shell-routes.js +1 -1
  342. package/dist/web-shell-routes.js.map +1 -1
  343. package/dist/web-theme-store.d.ts +39 -0
  344. package/dist/web-theme-store.js +122 -11
  345. package/dist/web-theme-store.js.map +1 -1
  346. package/dist/web-theme.d.ts +2 -0
  347. package/dist/web-theme.js +10 -1
  348. package/dist/web-theme.js.map +1 -1
  349. package/dist/workflow-templates/default.md +1 -1
  350. package/package.json +1 -1
  351. package/templates/systemd.service.ejs +8 -0
@@ -2,16 +2,212 @@
2
2
  * #1629: reading a file an agent names for an upload (set_web_theme_asset, and later effects, widgets and mods), on the
3
3
  * agent's side — the daemon — so the fleet never opens a workspace path (first design §4: tool handlers neither fork
4
4
  * nor read outside their own state). The file must be in the agent's own working directory, not a symlink, a regular
5
- * file within the size limit, and not under the AgEnD state directory; what is read is that open file.
5
+ * file within the size limit, and outside AgEnD state except for this caller's admitted managed asset area; what is read is that
6
+ * open file. The caller identity comes from the daemon/CLI context, never a tool argument.
6
7
  *
7
8
  * The open never waits (#1887 review): O_NONBLOCK, so a regular file replaced by a FIFO between the lstat and the
8
9
  * open returns at once and is refused by the descriptor's own fstat — it never holds a filesystem worker waiting for
9
10
  * a writer. O_NOCTTY, so a terminal device swapped in is never made the controlling terminal.
10
11
  */
11
12
  import { constants as fsConstants } from "node:fs";
12
- import { lstat, open, realpath, stat } from "node:fs/promises";
13
- import { isAbsolute, resolve, sep } from "node:path";
13
+ import { lstat, open, readFile, realpath, stat } from "node:fs/promises";
14
+ import { isAbsolute, relative, resolve, sep } from "node:path";
15
+ import { homedir } from "node:os";
16
+ import { classicInstanceName, sanitizeInstanceName } from "./instance-names.js";
14
17
  const under = (path, root) => path === root || path.startsWith(root.endsWith(sep) ? root : root + sep);
18
+ const plainCaller = (name) => typeof name === "string" && name.length > 0 && name !== "." && name !== ".." && !/[/\\\u0000-\u001f\u007f]/.test(name);
19
+ // These names are private even inside an admitted staging directory. A staging area is not a credential store.
20
+ const sensitiveNames = [
21
+ "instances", "credential-profiles", "inbox", "chat-logs", "web-files", "web-chat.json", "cx", "kiro-v3", "cli-env", "access",
22
+ "web.token", "view.token", "web-sessions", "sessions", "session-env", "projects", "file-history", "shell-snapshots", "backups", "todos", "statsig", "ide",
23
+ "claude.md", "agents.md", "mcp-config.json", "claude-settings.json", "credentials.json", "opencode.json", "opencode.jsonc",
24
+ "config.toml", "settings.json", "settings.local.json", "auth.json", "history.jsonl", "agent.token", "session-id", "session-id.backend",
25
+ "fleet.yaml", "classicbot.yaml", "web-sessions.json", "web-devices.json", "web-prefs.json", "web-effects.json", "web-mods.json",
26
+ "web-themes.json", "web-effect-profiles.json", "kiro-engine-ledger.json", "cache-codex-rollouts.json", "settings-apply-jobs.json",
27
+ "cancel-buttons.json", "forged-envelope-reports.json", "upgrade-notices.json", "fleet.lock", "fleet.pid", "fleet.log", "daemon.log",
28
+ "restart-audit.log", "tunnel.lease", "service-plan.json", "update-in-progress.json", "self-restart.json", "setup-complete.json",
29
+ ];
30
+ const sensitivePart = (part) => (part.startsWith(".") && part !== ".agend") || sensitiveNames.some(name => part.toLowerCase() === name || part.toLowerCase().startsWith(name + ".") || part.toLowerCase().startsWith(name + "-"))
31
+ || /\.(?:db|sqlite|sqlite3)(?:[.-]|$)/i.test(part) || /\.(?:token|pem|key)(?:[.-]|$)/i.test(part);
32
+ const reservedStateRoots = new Set(["workspaces", "kiro-identity", "operator", "model-catalog", "profiles", "preview-tunnel", "bin", "web-effects", "web-mods", "web-themes", "web-owner-css", "cards", "avatars", "cache", "web-files"]);
33
+ const staging = ["web-assets", "web-effects", ".agend/appearance", ".agend/mods"];
34
+ /** Read persisted Classic ownership, including peers with no running daemon. Never construct the migrating manager. */
35
+ async function classicPeerNames(state, fleet) {
36
+ let raw;
37
+ try {
38
+ const text = await readFile(resolve(state, "classicBot.yaml"), "utf8");
39
+ const { default: yaml } = await import("js-yaml");
40
+ raw = yaml.load(text);
41
+ }
42
+ catch (err) {
43
+ if (err.code === "ENOENT")
44
+ return new Set();
45
+ throw err;
46
+ }
47
+ if (raw == null)
48
+ return new Set();
49
+ if (typeof raw !== "object" || Array.isArray(raw))
50
+ throw new Error("invalid Classic configuration");
51
+ const channels = raw.channels ?? {};
52
+ if (typeof channels !== "object" || Array.isArray(channels))
53
+ throw new Error("invalid Classic roster");
54
+ const names = new Set();
55
+ for (const [key, value] of Object.entries(channels)) {
56
+ if (!value || typeof value !== "object" || Array.isArray(value))
57
+ throw new Error("invalid Classic record");
58
+ const row = value;
59
+ let name = row.instanceName;
60
+ if (name == null) {
61
+ // Match the manager's legacy naming, including non-primary adapter suffixes, without load()/save().
62
+ const channelId = row.channelId ?? key, label = row.name ?? channelId;
63
+ if (typeof channelId !== "string" || typeof label !== "string" || row.adapterId != null && typeof row.adapterId !== "string")
64
+ throw new Error("unknown Classic identity");
65
+ const cfg = fleet;
66
+ if (cfg?.channels != null && !Array.isArray(cfg.channels))
67
+ throw new Error("unknown adapters");
68
+ const first = Array.isArray(cfg?.channels) && cfg.channels.length ? cfg.channels[0] : cfg?.channel;
69
+ if (first != null && (typeof first !== "object" || Array.isArray(first)))
70
+ throw new Error("unknown primary adapter");
71
+ const primary = first;
72
+ const primaryId = primary?.id ?? primary?.type;
73
+ if (primaryId != null && typeof primaryId !== "string")
74
+ throw new Error("unknown primary adapter");
75
+ name = classicInstanceName(sanitizeInstanceName(label), channelId, row.adapterId && row.adapterId !== primaryId ? row.adapterId : undefined);
76
+ }
77
+ if (!plainCaller(name))
78
+ throw new Error("invalid Classic instance name");
79
+ names.add(name);
80
+ }
81
+ return names;
82
+ }
83
+ /** Shared by reads, effect-directory admission and generated writes. No ownership inferred from the shell cwd. */
84
+ export async function agentFileScope(opts) {
85
+ const workspace = await realpath(opts.workspace);
86
+ const states = [resolve(opts.stateDir)];
87
+ let state;
88
+ try {
89
+ state = await realpath(opts.stateDir);
90
+ states.push(state);
91
+ }
92
+ catch { /* absent state has no exception */ }
93
+ const managedState = states.some(root => under(workspace, root) || under(resolve(opts.workspace), root));
94
+ let own, ownWorkspace = false;
95
+ if (state && managedState && plainCaller(opts.instance)) {
96
+ // Unlike loadFleetConfig this reads no defaults that create directories or initialize repositories.
97
+ // A malformed/unreadable roster cannot prove exclusive ownership and refuses all in-state reads.
98
+ let fleet, rosterRead = false;
99
+ try {
100
+ const text = await readFile(resolve(state, "fleet.yaml"), "utf8");
101
+ const { default: yaml } = await import("js-yaml");
102
+ rosterRead = true;
103
+ fleet = yaml.load(text);
104
+ }
105
+ catch (err) {
106
+ if (err.code !== "ENOENT")
107
+ throw err;
108
+ }
109
+ if (rosterRead && (!fleet || typeof fleet !== "object" || Array.isArray(fleet)))
110
+ throw new Error("invalid fleet configuration");
111
+ const rows = fleet && typeof fleet === "object" && !Array.isArray(fleet)
112
+ ? fleet.instances : undefined;
113
+ if (rows !== undefined && (!rows || typeof rows !== "object" || Array.isArray(rows)))
114
+ throw new Error("invalid instance roster");
115
+ const roster = (rows ?? {});
116
+ const defaults = fleet?.defaults ?? {};
117
+ if (typeof defaults !== "object" || Array.isArray(defaults))
118
+ throw new Error("invalid fleet defaults");
119
+ const configured = (name, row) => {
120
+ if (!row || typeof row !== "object" || Array.isArray(row))
121
+ throw new Error("invalid instance record");
122
+ // The loader merges defaults first, skips undefined overrides, then falls back on a falsy cwd.
123
+ // Only records in fleet.instances inherit these defaults; dynamic Classic instances do not.
124
+ const raw = row.working_directory === undefined ? defaults.working_directory : row.working_directory;
125
+ if (raw && (typeof raw !== "string" || !raw.trim()))
126
+ throw new Error("unknown working directory");
127
+ const path = raw ? resolve(raw.replace(/^~(?=\/|$)/, homedir())) : resolve(state, "workspaces", name);
128
+ // Permit an alias of the state root, never an alias of an individual managed directory.
129
+ return under(path, states[0]) ? resolve(state, relative(states[0], path)) : path;
130
+ };
131
+ const hasRecord = Object.hasOwn(roster, opts.instance);
132
+ const row = roster[opts.instance];
133
+ const expected = hasRecord ? configured(opts.instance, row) : resolve(state, "workspaces", opts.instance);
134
+ const launchMatches = !opts.configuredWorkspace || configured(opts.instance, { working_directory: opts.configuredWorkspace }) === expected;
135
+ // A nonstandard name can only come from the configured record/defaults above, never the shell cwd.
136
+ const workspaces = resolve(state, "workspaces");
137
+ const workspaceDirectory = expected !== workspaces && under(expected, workspaces);
138
+ const parts = relative(state, expected).split(sep);
139
+ const reserved = expected === state || !under(expected, state) || parts.some(part => part.startsWith(".") || sensitivePart(part))
140
+ || (reservedStateRoots.has(parts[0]) && !workspaceDirectory);
141
+ if (launchMatches && !reserved && under(workspace, expected)) {
142
+ let exclusive = true;
143
+ const peerRoots = new Set();
144
+ for (const [name, peer] of Object.entries(roster)) {
145
+ if (name === opts.instance)
146
+ continue;
147
+ if (!plainCaller(name))
148
+ throw new Error("invalid instance name");
149
+ // A peer's standard workspace remains theirs even when their configured cwd is elsewhere.
150
+ peerRoots.add(configured(name, peer));
151
+ peerRoots.add(resolve(state, "workspaces", name));
152
+ }
153
+ for (const name of await classicPeerNames(state, fleet))
154
+ if (name !== opts.instance)
155
+ peerRoots.add(resolve(state, "workspaces", name));
156
+ for (const named of peerRoots) {
157
+ let actual = named;
158
+ try {
159
+ actual = await realpath(named);
160
+ }
161
+ catch (err) {
162
+ if (err.code !== "ENOENT")
163
+ throw err;
164
+ }
165
+ if (under(named, expected) || under(expected, named) || under(actual, expected) || under(expected, actual))
166
+ exclusive = false;
167
+ }
168
+ try {
169
+ // A symlink named General (or one of its ancestors) cannot authorize another directory.
170
+ if (exclusive && await realpath(expected) === expected) {
171
+ own = expected;
172
+ ownWorkspace = workspaceDirectory;
173
+ }
174
+ }
175
+ catch { /* no readable, canonical managed directory: no exception */ }
176
+ }
177
+ }
178
+ const areas = [];
179
+ if (own && !ownWorkspace)
180
+ for (const dir of staging) {
181
+ const expected = resolve(own, dir);
182
+ try {
183
+ if (await realpath(expected) === expected)
184
+ areas.push(expected);
185
+ }
186
+ catch (err) {
187
+ if (err.code === "ENOENT")
188
+ areas.push(expected);
189
+ else
190
+ throw err;
191
+ }
192
+ }
193
+ return { workspace, managedState, stateBlocked: path => {
194
+ if (managedState && !own)
195
+ return true;
196
+ if (state && under(path, states[0]))
197
+ path = resolve(state, relative(states[0], path));
198
+ if (!states.some(root => under(path, root)))
199
+ return false;
200
+ if (!own || !under(path, own))
201
+ return true;
202
+ const rel = relative(own, path), parts = rel.split(sep);
203
+ if (parts.some(sensitivePart))
204
+ return true;
205
+ // .agend is a private namespace; only the two existing generated-output directories are readable.
206
+ if (parts.includes(".agend") && !(parts[0] === ".agend" && ["appearance", "mods"].includes(parts[1] ?? "") && !parts.slice(1).includes(".agend")))
207
+ return true;
208
+ return !ownWorkspace && !areas.some(area => under(path, area));
209
+ } };
210
+ }
15
211
  export async function readAgentFile(file, opts) {
16
212
  if (typeof file !== "string" || !file.trim() || file.includes("\0"))
17
213
  return { ok: false, reason: "a file path in your working directory" };
@@ -26,20 +222,17 @@ export async function readAgentFile(file, opts) {
26
222
  if (!own.isFile())
27
223
  return { ok: false, reason: "not a regular file" };
28
224
  const real = await realpath(path);
29
- const ws = await realpath(opts.workspace);
225
+ const scope = await agentFileScope(opts), ws = scope.workspace;
30
226
  if (!under(real, ws))
31
227
  return { ok: false, reason: "outside your working directory" };
32
- const state = [resolve(opts.stateDir)];
33
- try {
34
- state.push(await realpath(opts.stateDir));
35
- }
36
- catch { /* not there */ }
37
- if (state.some(root => under(real, root)))
228
+ if (scope.stateBlocked(real) || scope.stateBlocked(path))
38
229
  return { ok: false, reason: "inside the AgEnD state directory" };
39
230
  fh = await open(path, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW | fsConstants.O_NONBLOCK | fsConstants.O_NOCTTY);
40
231
  const st = await fh.stat();
41
232
  if (!st.isFile())
42
233
  return { ok: false, reason: "not a regular file" };
234
+ if (scope.managedState && st.nlink !== 1)
235
+ return { ok: false, reason: "a hard-linked state file" };
43
236
  if (st.size > opts.maxBytes)
44
237
  return { ok: false, reason: `over the size limit (${Math.floor(opts.maxBytes / 1024)} KiB)` };
45
238
  const named = await stat(real);
@@ -66,7 +259,7 @@ export async function readAgentFile(file, opts) {
66
259
  * #1629 r4 §1: write a file the fleet produced for the agent (preview_web_appearance's SVGs) into its own working
67
260
  * directory, on the agent's side — the daemon or the CLI; the fleet never names a path. `dir` is a fixed relative path
68
261
  * (".agend/appearance"); each of its folders is created if missing and must not be a symlink; the result must be in
69
- * the working directory and not in the AgEnD state directory (a working directory that is $HOME holds ~/.agend). The
262
+ * the working directory and outside AgEnD state except the caller's own workspace (a $HOME cwd holds ~/.agend). The
70
263
  * file goes to a new temporary name (O_EXCL | O_NOFOLLOW) and is renamed over `name`, so a planted symlink is replaced,
71
264
  * never followed.
72
265
  */
@@ -78,14 +271,9 @@ export async function writeAgentFile(dir, name, bytes, opts) {
78
271
  const { mkdir, rename, unlink } = await import("node:fs/promises");
79
272
  const { randomBytes } = await import("node:crypto");
80
273
  try {
81
- const ws = await realpath(opts.workspace);
82
- const state = [resolve(opts.stateDir)];
83
- try {
84
- state.push(await realpath(opts.stateDir));
85
- }
86
- catch { /* not there */ }
274
+ const scope = await agentFileScope(opts), ws = scope.workspace;
87
275
  // Refused before anything is created (#1890 review: a $HOME working directory got ~/.agend/appearance first).
88
- if (state.some(root => under(resolve(ws, dir), root)))
276
+ if (scope.stateBlocked(resolve(ws, dir)) || scope.stateBlocked(resolve(ws, dir, name)))
89
277
  return { ok: false, reason: "inside the AgEnD state directory" };
90
278
  let at = ws;
91
279
  for (const part of dir.split("/")) {
@@ -102,7 +290,7 @@ export async function writeAgentFile(dir, name, bytes, opts) {
102
290
  const real = await realpath(at);
103
291
  if (!under(real, ws))
104
292
  return { ok: false, reason: "outside your working directory" };
105
- if (state.some(root => under(real, root)))
293
+ if (scope.stateBlocked(real))
106
294
  return { ok: false, reason: "inside the AgEnD state directory" };
107
295
  const tmp = resolve(real, `.${name}.${randomBytes(6).toString("hex")}.tmp`);
108
296
  const fh = await open(tmp, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL | fsConstants.O_NOFOLLOW, 0o600);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-file-read.js","sourceRoot":"","sources":["../src/agent-file-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-file-read.js","sourceRoot":"","sources":["../src/agent-file-read.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
+ /**
2
+ * #2163: who an entry is for — General, an instance with the coordinator or full tool set, a fleet worker, a ClassicBot
3
+ * room's agent. No audience: everyone.
4
+ */
5
+ export type WhatsNewAudience = "general" | "coordinator" | "worker" | "classic";
1
6
  export interface WhatsNewEntry {
2
7
  /** Stable: the record keeps it. */
3
8
  readonly id: string;
4
9
  /** The first AgEnD version that has it. */
5
10
  readonly since: string;
6
11
  readonly text: string;
12
+ /** #2163: only these roles are told; the others record it as known (never pending, never shown). */
13
+ readonly audience?: readonly WhatsNewAudience[];
7
14
  }
8
15
  export declare const AGENT_WHATS_NEW: readonly WhatsNewEntry[];
9
16
  /**
@@ -27,6 +34,8 @@ export declare function readWhatsNewRecord(instanceDir: string): WhatsNewRecord
27
34
  * cannot be read: writing would drop the history it holds (#1639 review).
28
35
  */
29
36
  export declare function recordWhatsNew(instanceDir: string, ids: readonly string[], version: string): void;
37
+ /** #2163: the line a notice adds when it names a skill — a way to read it that works on every instance. */
38
+ export declare const SKILL_READ_HINT = "A skill named here that you can't find among your skills: `agend-agent skill <name>` prints it (in your shell).";
30
39
  export declare function whatsNewNotice(version: string, entries: readonly WhatsNewEntry[]): string;
31
40
  /**
32
41
  * What this instance should be told now. `fresh`: it never launched before (told nothing; everything current recorded
@@ -37,6 +46,8 @@ export declare function planWhatsNew(input: {
37
46
  fresh: boolean;
38
47
  version: string | null;
39
48
  entries?: readonly WhatsNewEntry[];
49
+ /** #2163: this instance's roles. An entry for none of them is recorded with the others but not shown. Absent: all. */
50
+ roles?: readonly WhatsNewAudience[];
40
51
  }): {
41
52
  notice: string;
42
53
  ids: string[];
@@ -35,22 +35,27 @@ export const AGENT_WHATS_NEW = [
35
35
  { id: "2.2-polls", since: "2.2.0-beta.11",
36
36
  text: "`reply` takes `poll: {seconds, multi?, reveal?: \"close\"|\"live\", show_voters?}` with 2–10 `buttons` as the options: a vote by everyone who may talk to you there, closing `seconds` (10–86400) after it is posted; the reply's result has `poll_id`. At the close the results come to you as one `[poll results]` message in the poll's chat — post the answer or scores yourself. `close_poll({poll_id})` ends one of your polls early." },
37
37
  { id: "2.2-web-identity", since: "2.2.0-beta.11",
38
- text: "A web-chat person signed in with a `/web` code arrives as `[user:<name> via web, id:<their Discord/Telegram user id>]` — the same id as on that platform, so you can recognise them; they may change the name. Recognition only: `via web` is never a verified message from that account and grants no permission." },
38
+ text: "A web-chat person signed in with a `/web` code arrives as `[user:<name> via web, id:<their Discord/Telegram user id>]` — the same id as on that platform, so you can recognise them; they may change the name. What it may ask of you is the web-chat rule in your instructions." },
39
39
  { id: "2.2-delivery-status-evidence", since: "2.2.0",
40
40
  text: "Correction: `Delivery not found` can mean hidden by ACL, expired retention, or never delivered; it is not proof of non-delivery. Do not act; ask the sender to explicitly forward a verifiable reference. Never resend on `uncertain`." },
41
- { id: "2.3-owner-effect-policy", since: "2.3.0-alpha.1",
42
- text: "Owner effects: fx.sidebar/header/page/box/cursor belong to the signed-in web person's preferences, never agent/header-token targets. Platform identities stay separate; a web-only sign-in uses the host-wide operator bucket shared by its sign-ins. Unsharing blocks the next personal-slot resource read but keeps its saved reference until cleared; chat placements retain their separate runtime policy. Page/header/sidebar/box playback now shares the app pool with Chat after preview consent, with per-slot controls in Appearance. Host cursor playback uses a static PNG with stock cursor fallback, no Worker code or frame slot. Agents can offer Try cards; only a local admin click starts a clipped temporary sample. See the web-appearance skill." },
43
- // #1629: how an agent looks on the web dashboard (the `web-appearance` skill has the details).
44
- { id: "2.3-web-theme", since: "2.3.0-alpha.1",
45
- text: "Your own look in the web dashboard: `get_web_theme`, `set_web_theme` (`set` / `clear`: colours per light/dark mode as #rrggbb, `accent`, `bubble`, `font`, `background`, `avatar`, `workingLabel`; contrast checked), `set_web_theme_asset` (`slot`, `file` in your working directory → an `id`) and `reset_web_theme`. No target — always yours; at least 30 s apart, 10 changes and 3 uploads an hour; refused while a person has locked it. See the `web-appearance` skill." },
46
- { id: "2.3-web-card", since: "2.3.0-alpha.1",
47
- text: "Your identity card on the web goes inside `set_web_theme`'s `set`: `set_web_theme({ set: { card: { tagline, bio, portrait, banner } } })` (portrait and banner are ids from `set_web_theme_asset` with the slots `portrait` and `banner`). A person's card field wins over yours." },
48
- { id: "2.3-web-appearance", since: "2.3.0-alpha.1",
49
- text: "`get_web_appearance` shows how you appear on the web dashboard now (your face and where it comes from, ring, card, theme per mode, lock, limits); `preview_web_appearance` (`modes`) writes an SVG per mode to `.agend/appearance/` in your working directory, with the pictures it shows beside it, and returns their paths (Read the pictures as images)." },
50
- { id: "2.3-web-mod", since: "2.3.0-alpha.1",
51
- text: "Mods: `export_web_mod({ name, version })` writes your own web look (theme and pictures, card text, your widgets) to `.agend/mods/` as a file. `propose_web_mod({ file })` sends a mod file for a person to review in Settings → Appearance → Mods. Nothing changes until they install it, and a mod carrying custom CSS is refused. You never import. See the `web-appearance` skill." },
52
- { id: "2.3-web-widget", since: "2.3.0-alpha.1",
53
- text: "Widgets on the web dashboard: `set_web_widget({ slot: \"chat_header\" | \"details\", spec, data })` places a small panel the dashboard draws itself, under your chat header or on your Details page. The spec is `{ v: 1, title, items: [{ type: stat|progress|text|list|badge|spark, label, key | bind }] }`: no HTML, script or CSS. `bind` shows your own `state`, `context_pct` or `cost_usd`. `set_web_widget({ slot, data })` alone updates the values, at most every 10 s, apart from theme changes. `remove_web_widget` takes it out. See the `web-appearance` skill." },
41
+ // #2012: from 2.3 on, one short topic line per area naming the skill to load; the details live in the skill. The six
42
+ // detailed 2.3.0-alpha.1 entries (2.3-owner-effect-policy, -web-theme, -web-card, -web-appearance, -web-mod,
43
+ // -web-widget) were folded into the web-appearance skill and the first line here: an instance told them on
44
+ // 2.3.0-beta.1 hears this short line once more on its next update.
45
+ { id: "2.3-web-appearance-topic", since: "2.3.0-beta.2",
46
+ text: "Web appearance — your own look on the web dashboard: theme, identity card and identity colour, widgets, mods, and Canvas Worker effects with Try (`get_web_appearance`, `set_web_theme`, `set_web_widget`, `export_web_mod`, `upload_web_effect`, …). Load the `web-appearance` skill before using these tools: it has their parameters, limits and rules." },
47
+ { id: "2.3-web-settings-for-the-user", since: "2.3.0-beta.3", audience: ["general", "coordinator"],
48
+ text: "General (and coordinators): `get_web_settings` / `set_web_settings` read and change the user's Settings → Web appearance the way the page does — host settings, an agent's colour, custom CSS, proposed mods, effects, Restore defaults. Load the `web-appearance` skill first." },
49
+ { id: "2.3-web-ambient", since: "2.3.0-beta.7",
50
+ text: "Ambient effects: `set_web_ambient` puts falling petals, snow, rising lanterns, twinkles or stars on a click in your web chat — data only, drawn by the dashboard, no Try needed (`clear_web_ambient` removes it). Load the `web-appearance` skill." },
51
+ { id: "2.3-repo-tools", since: "2.3.0-beta.2",
52
+ text: "Repo tools: `checkout_repo` works with branch names again and records each checkout; `release_repo` releases only your own checkout under your `repos/` and refuses any other path." },
53
+ { id: "2.3-web-verified", since: "2.3.0-beta.7",
54
+ text: "Web messages can now carry the person's authority (#1939): when their Discord or Telegram account has authorized that browser, they arrive as `[user:<name> via web (verified), id:<their user id>]`. The label is a hint — before acting on it as the person, read its receipt with `delivery_status`: `authority.kind: web-verified` names them in `authority.actor`, and it is checked and forwarded (`forwards`) like a Discord or Telegram message. The full rule is in the cross-instance-messaging skill." },
55
+ { id: "2.3-decision-titles", since: "2.3.0-beta.9",
56
+ text: "`list_decisions` now answers titles by default (id, title, scope, date, tags). Read a decision's full text with `list_decisions { id }`, or all of them with `{ full: true }` (large). CLI mode: `agend-agent decision-get <id>`." },
57
+ { id: "2.3-web-ordinary-requests", since: "2.3.0-beta.10",
58
+ text: "The web-chat rule is reworded (#1939): a plain `via web` message is the signed-in person — answer it and do what it asks within your work (questions, reading, analysis, changes in your own scope). Only a go-ahead action — a release or publish, anything destructive or irreversible beyond your own work files and branches, spending beyond normal work, credentials or secrets, granting authority to another instance — needs their account behind it: a Discord or Telegram receipt, or `via web (verified)` with its receipt read (`delivery_status`). A guest only chats. The full text is in your instructions and the cross-instance-messaging skill." },
54
59
  ];
55
60
  /**
56
61
  * The released AgEnD version this code belongs to, or null. A source checkout (a `.git` beside its package.json) has a
@@ -139,10 +144,15 @@ export function recordWhatsNew(instanceDir, ids, version) {
139
144
  writeFileSync(tmp, JSON.stringify({ announced, version }) + "\n", { mode: 0o600 });
140
145
  renameSync(tmp, path);
141
146
  }
147
+ /** #2163: the line a notice adds when it names a skill — a way to read it that works on every instance. */
148
+ export const SKILL_READ_HINT = "A skill named here that you can't find among your skills: `agend-agent skill <name>` prints it (in your shell).";
149
+ /** "the `scheduling` skill", or a hyphenated name without backticks: "the cross-instance-messaging skill". */
150
+ const NAMES_A_SKILL = /`[a-z][a-z0-9-]*` skill\b|(?:^|[^a-z0-9-])[a-z][a-z0-9]*(?:-[a-z0-9]+)+ skill\b/;
142
151
  export function whatsNewNotice(version, entries) {
143
152
  return [
144
153
  `[system:whats-new] AgEnD is now ${version}. New for you since your session began:`,
145
154
  ...entries.map(e => `- ${e.text}`),
155
+ ...(entries.some(e => NAMES_A_SKILL.test(e.text)) ? [SKILL_READ_HINT] : []),
146
156
  "A tool description you loaded earlier may not show these: a resumed session keeps the copy it first loaded, and reloading it does not refresh it. Use them anyway — AgEnD's server accepts them. Do not reply to this message.",
147
157
  ].join("\n");
148
158
  }
@@ -161,6 +171,10 @@ export function planWhatsNew(input) {
161
171
  return null;
162
172
  if (fresh && !record)
163
173
  return { silent: unseen.map(e => e.id), version };
164
- return { notice: whatsNewNotice(version, unseen), ids: unseen.map(e => e.id), version };
174
+ const roles = input.roles;
175
+ const told = roles ? unseen.filter(e => !e.audience || e.audience.some(r => roles.includes(r))) : unseen;
176
+ if (!told.length)
177
+ return { silent: unseen.map(e => e.id), version };
178
+ return { notice: whatsNewNotice(version, told), ids: unseen.map(e => e.id), version };
165
179
  }
166
180
  //# sourceMappingURL=agent-whats-new.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-whats-new.js","sourceRoot":"","sources":["../src/agent-whats-new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAUzC,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,cAAc;QAC9C,IAAI,EAAE,yMAAyM,EAAE;IACnN,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc;QAC/C,IAAI,EAAE,qIAAqI,EAAE;IAC/I,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc;QACzC,IAAI,EAAE,6PAA6P,EAAE;IACvQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc;QAChD,IAAI,EAAE,qSAAqS,EAAE;IAC/S,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc;QAC1C,IAAI,EAAE,4IAA4I,EAAE;IACtJ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc;QAChD,IAAI,EAAE,iLAAiL,EAAE;IAC3L,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc;QACzC,IAAI,EAAE,4WAA4W,EAAE;IACtX,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;QACvC,IAAI,EAAE,6aAA6a,EAAE;IACvb,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe;QAC9C,IAAI,EAAE,oTAAoT,EAAE;IAC9T,EAAE,EAAE,EAAE,8BAA8B,EAAE,KAAK,EAAE,OAAO;QAClD,IAAI,EAAE,wOAAwO,EAAE;IAClP,EAAE,EAAE,EAAE,yBAAyB,EAAE,KAAK,EAAE,eAAe;QACrD,IAAI,EAAE,uuBAAuuB,EAAE;IACjvB,+FAA+F;IAC/F,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe;QAC3C,IAAI,EAAE,gdAAgd,EAAE;IAC1d,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe;QAC1C,IAAI,EAAE,mRAAmR,EAAE;IAC7R,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,eAAe;QAChD,IAAI,EAAE,6VAA6V,EAAE;IACvW,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe;QACzC,IAAI,EAAE,uXAAuX,EAAE;IACjY,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe;QAC5C,IAAI,EAAE,+iBAA+iB,EAAE;CAC1jB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAA2B,CAAC,OAAO,CAAC;QACxH,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AACD,sFAAsF;AACtF,MAAM,UAAU,YAAY;IAC1B,OAAO,qBAAqB,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,wDAAwD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACnG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,qCAAqC;IACnG,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACxF,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAGD,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAEhC,qHAAqH;AACrH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAC/D,OAAO,GAAG,EAAE,CAAC;QAAC,OAAQ,GAA6B,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IAAC,CAAC;IAC/F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,MAAyB,CAAC,SAAS,CAAC;eAC5F,CAAE,MAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;YAAE,OAAO,YAAY,CAAC;QACpG,OAAO,MAAwB,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,YAAY,CAAC;IAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,GAAsB,EAAE,OAAe;IACzF,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC3E,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAiC;IAC/E,OAAO;QACL,mCAAmC,OAAO,yCAAyC;QACnF,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,gOAAgO;KACjO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmI;IAI9J,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9I,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IACxE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"agent-whats-new.js","sourceRoot":"","sources":["../src/agent-whats-new.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { Logger } from "./logger.js";
3
3
  import { type SessionTier, type WebSessionStore } from "./web-session.js";
4
- import type { LoginCodeOwner, LoginCodeRecipient, WebLoginCodes } from "./web-login.js";
4
+ import type { GuestLoginCodes, LoginCodeOwner, LoginCodeRecipient, WebLoginCodes } from "./web-login.js";
5
5
  import { type ReturningDevice } from "./web-returning-device.js";
6
6
  export declare const LOGIN_REFUSED_MESSAGE = "That code did not work \u2014 it may be wrong, expired or already used. Ask for a new one with /web.";
7
7
  export declare const LOGIN_PAUSED_MESSAGE = "Too many wrong codes \u2014 sign-in is paused for a few minutes.";
@@ -9,6 +9,23 @@ export interface AuthApiContext {
9
9
  readonly webToken: string | null;
10
10
  readonly webSessions: WebSessionStore | null;
11
11
  readonly webLoginCodes: WebLoginCodes | null;
12
+ /** #1920 step 4: guests' codes (local sign-in), one per account — tried before the admins' code, never counted by it. */
13
+ readonly webGuestLoginCodes?: GuestLoginCodes | null;
14
+ /** #1920 step 4b: a guest's public-link sign-in, said in the opener's General before the session is activated. */
15
+ confirmGuestPublicWebLogin?(info: {
16
+ label: string;
17
+ handle: string;
18
+ account: {
19
+ adapterId: string;
20
+ userId: string;
21
+ };
22
+ exposureId: string;
23
+ }, current: () => boolean): Promise<void>;
24
+ /** #1920 step 4: a guest code's account may still sign in (guests on, something in scope, not an admin). */
25
+ guestSignInAllowed?(account: {
26
+ adapterId: string;
27
+ userId: string;
28
+ }): boolean;
12
29
  readonly logger: Logger;
13
30
  /** Told after every successful sign-in, so the operator can be shown one they did not make. */
14
31
  confirmPublicWebLogin?(info: {
@@ -21,12 +38,24 @@ export interface AuthApiContext {
21
38
  surface: "local" | "gateway";
22
39
  tier: SessionTier;
23
40
  handle: string;
41
+ owner?: {
42
+ adapterId: string;
43
+ userId: string;
44
+ };
24
45
  }): void;
25
46
  /** #1570: record this browser as a returning device of the code's owner; the cookie value, or null when not kept. */
26
47
  rememberReturningDevice?(owner: LoginCodeOwner, input: {
27
48
  surface: "local" | "gateway";
28
49
  label: string;
29
50
  }): string | null;
51
+ /** #1920 step 4b: a guest's sign-in makes this browser a guest's returning device (its own caps). The cookie, or null. */
52
+ rememberGuestDevice?(account: {
53
+ adapterId: string;
54
+ userId: string;
55
+ }, input: {
56
+ surface: "local" | "gateway";
57
+ label: string;
58
+ }): string | null;
30
59
  /** #1827: a sign-in as this account — its display name then is the web name it starts with. */
31
60
  noteWebSignIn?(account: LoginCodeRecipient): void;
32
61
  /** #1570: the returning device a cookie value proves, or null. */