@songsid/agend 2.3.0-beta.7 → 2.3.0-beta.9

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 (88) hide show
  1. package/dist/agent-cli-instructions.md +2 -1
  2. package/dist/agent-cli.js +3 -0
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-whats-new.js +2 -0
  5. package/dist/agent-whats-new.js.map +1 -1
  6. package/dist/channel/mcp-tools.js +3 -3
  7. package/dist/channel/mcp-tools.js.map +1 -1
  8. package/dist/daemon.d.ts +2 -0
  9. package/dist/daemon.js +29 -9
  10. package/dist/daemon.js.map +1 -1
  11. package/dist/decision-list.d.ts +25 -0
  12. package/dist/decision-list.js +30 -0
  13. package/dist/decision-list.js.map +1 -0
  14. package/dist/fleet-manager.d.ts +9 -2
  15. package/dist/fleet-manager.js +44 -12
  16. package/dist/fleet-manager.js.map +1 -1
  17. package/dist/fleet-traffic.d.ts +36 -0
  18. package/dist/fleet-traffic.js +100 -0
  19. package/dist/fleet-traffic.js.map +1 -1
  20. package/dist/general-knowledge/skills/web-appearance/SKILL.md +17 -10
  21. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +32 -13
  22. package/dist/instance-config-impact.js +1 -0
  23. package/dist/instance-config-impact.js.map +1 -1
  24. package/dist/outbound-handlers.js +4 -1
  25. package/dist/outbound-handlers.js.map +1 -1
  26. package/dist/outbound-schemas.d.ts +6 -4
  27. package/dist/outbound-schemas.js +7 -3
  28. package/dist/outbound-schemas.js.map +1 -1
  29. package/dist/settings-api.js +4 -0
  30. package/dist/settings-api.js.map +1 -1
  31. package/dist/settings-change.js +4 -0
  32. package/dist/settings-change.js.map +1 -1
  33. package/dist/settings-effect.js +2 -0
  34. package/dist/settings-effect.js.map +1 -1
  35. package/dist/tool-permissions.js +9 -42
  36. package/dist/tool-permissions.js.map +1 -1
  37. package/dist/ui/app-effects.js +9 -5
  38. package/dist/ui/chat-ambient.js +8 -7
  39. package/dist/ui/chat-effect-posters.js +3 -2
  40. package/dist/ui/chat-effects.js +22 -15
  41. package/dist/ui/chat-render.js +5 -2
  42. package/dist/ui/chat-strings.js +6 -4
  43. package/dist/ui/chat-thread.js +134 -17
  44. package/dist/ui/effect-trial-controller.js +13 -8
  45. package/dist/ui/fleet-canvas.js +54 -18
  46. package/dist/ui/fleet-org.js +3 -3
  47. package/dist/ui/fleet-traffic.js +156 -37
  48. package/dist/ui/fleet-usage.js +401 -0
  49. package/dist/ui/panel-chat.js +101 -47
  50. package/dist/ui/panel-fleet.js +6 -5
  51. package/dist/ui/panel-settings.js +6 -1
  52. package/dist/ui/settings-owner-effects.js +1 -1
  53. package/dist/ui/settings-strings.js +2 -0
  54. package/dist/ui/shared/agend-auth.js +1 -1
  55. package/dist/ui/shared/app-route.js +1 -1
  56. package/dist/ui/shared/app-stream.js +3 -2
  57. package/dist/ui/shared/app.css +89 -9
  58. package/dist/ui/shared/effect-app-runtime.js +3 -3
  59. package/dist/ui/shared/effect-chat-runtime.js +1 -1
  60. package/dist/ui/shared/effect-policy.js +5 -6
  61. package/dist/ui/shared/effect-profiler.js +31 -9
  62. package/dist/ui/shared/effect-registry.js +23 -31
  63. package/dist/ui/shared/effect-stock-snapshot.js +9 -0
  64. package/dist/ui/shared/effect-stock-trust.js +37 -6
  65. package/dist/ui/shared/effect-trial-source.js +1 -1
  66. package/dist/ui/shared/effect-trial-stage.js +27 -21
  67. package/dist/ui/shared/effect-trial.css +1 -1
  68. package/dist/ui/shared/fx-motion.js +12 -3
  69. package/dist/ui/shared/tokens.css +9 -3
  70. package/dist/ui/shared/usage-dialog.js +8 -0
  71. package/dist/ui/shared/view-strings.js +4 -0
  72. package/dist/ui/web-terminal/terminal.css +4 -4
  73. package/dist/usage-report.d.ts +12 -1
  74. package/dist/usage-report.js +39 -8
  75. package/dist/usage-report.js.map +1 -1
  76. package/dist/web-ambient.js +9 -2
  77. package/dist/web-ambient.js.map +1 -1
  78. package/dist/web-api.d.ts +2 -0
  79. package/dist/web-api.js +8 -3
  80. package/dist/web-api.js.map +1 -1
  81. package/dist/web-settings-patch.d.ts +3 -1
  82. package/dist/web-settings-patch.js +4 -1
  83. package/dist/web-settings-patch.js.map +1 -1
  84. package/dist/web-shell-routes.d.ts +1 -1
  85. package/dist/web-shell-routes.js +1 -1
  86. package/dist/web-shell-routes.js.map +1 -1
  87. package/dist/workflow-templates/default.md +1 -1
  88. package/package.json +1 -1
@@ -36,3 +36,39 @@ export declare class TrafficLog {
36
36
  snapshot(pending: readonly TrafficItem[]): TrafficItem[];
37
37
  private prune;
38
38
  }
39
+ export type DelegationState = "open" | "done" | "expired" | "cancelled";
40
+ /** A delegation as the page draws it: `age_ms` how long it has been open (the page's own clock times its expiry). */
41
+ export interface Delegation {
42
+ id: string;
43
+ from: string;
44
+ to: string;
45
+ state: DelegationState;
46
+ age_ms: number;
47
+ }
48
+ /** How long a delegation waits for its report before the canvas gives up on it ("no report yet"), and how many are open. */
49
+ export declare const DELEGATION_TTL_MS: number;
50
+ export declare const DELEGATIONS_MAX = 100;
51
+ /**
52
+ * The delegations open now. `note(row, item)` takes each traffic item with its row (for the correlation id, never sent
53
+ * on): a task delivery's admission opens one (keyed for its report by correlation id and the two names; its id is the
54
+ * delivery's own, so a new task with the same correlation id is a new delegation); that delivery failing or being
55
+ * cancelled takes it back; a report from the worker to the delegator with the same correlation id closes it. Each
56
+ * delivery counts once, at its first state: a later state of a task delivery that already opened one — delivered or
57
+ * consumed after its report came back, or after it expired — never opens it again, and a later state of a report never
58
+ * closes the next task of the same correlation id and pair. Returns the news, for the stream. The oldest go first past DELEGATIONS_MAX; an open
59
+ * one past DELEGATION_TTL_MS expires.
60
+ */
61
+ export declare class Delegations {
62
+ private readonly monotonic;
63
+ private readonly open;
64
+ /** The deliveries (their traffic ids) already handled — tasks that opened one, reports taken: bounded, oldest out. */
65
+ private readonly handled;
66
+ constructor(monotonic?: () => number);
67
+ private ended;
68
+ note(row: Pick<OutboxDelivery, "correlationId">, item: TrafficItem): Delegation[];
69
+ private noteHandled;
70
+ /** What is open now (after expiring the ones past the TTL — the stream is told by the next note). */
71
+ snapshot(): Delegation[];
72
+ /** Expire what has waited past the TTL; returns the news. */
73
+ sweep(): Delegation[];
74
+ }
@@ -8,6 +8,10 @@
8
8
  * - Never a delivery id or any text: an opaque id (a hash of the delivery id) and the two instance names. A broadcast's
9
9
  * items (one row per recipient) share an opaque `op`, so the page can draw them as one fan-out.
10
10
  * - An instance whose cross_instance_visibility is "hidden" takes no part: a message to or from it is not shown.
11
+ * - The work, not just the message (Delegations): a task opens a delegation, delegator → worker, that stays open until
12
+ * the worker's report with the same correlation id comes back (the other way), so "who is working for whom" is on the
13
+ * canvas for as long as it is true, a reload or the public link included. Opaque ids again (a hash of the correlation
14
+ * id and the two names); capped, and given up after DELEGATION_TTL_MS with "no report yet".
11
15
  */
12
16
  import { createHash } from "node:crypto";
13
17
  import { crossInstanceVisibility } from "./cross-instance-notice.js";
@@ -93,4 +97,100 @@ export class TrafficLog {
93
97
  this.items.delete(this.items.keys().next().value);
94
98
  }
95
99
  }
100
+ /** How long a delegation waits for its report before the canvas gives up on it ("no report yet"), and how many are open. */
101
+ export const DELEGATION_TTL_MS = 4 * 3_600_000;
102
+ export const DELEGATIONS_MAX = 100;
103
+ /** The pair a report closes: correlation id, delegator, worker. */
104
+ const pairKey = (correlationId, from, to) => `${correlationId}\u0000${from}\u0000${to}`;
105
+ const DEAD = new Set(["failed", "cancelled"]);
106
+ /** How many deliveries are remembered as handled: a task that opened one, a report that was taken (#2135 review). */
107
+ const HANDLED_MAX = 2000;
108
+ /**
109
+ * The delegations open now. `note(row, item)` takes each traffic item with its row (for the correlation id, never sent
110
+ * on): a task delivery's admission opens one (keyed for its report by correlation id and the two names; its id is the
111
+ * delivery's own, so a new task with the same correlation id is a new delegation); that delivery failing or being
112
+ * cancelled takes it back; a report from the worker to the delegator with the same correlation id closes it. Each
113
+ * delivery counts once, at its first state: a later state of a task delivery that already opened one — delivered or
114
+ * consumed after its report came back, or after it expired — never opens it again, and a later state of a report never
115
+ * closes the next task of the same correlation id and pair. Returns the news, for the stream. The oldest go first past DELEGATIONS_MAX; an open
116
+ * one past DELEGATION_TTL_MS expires.
117
+ */
118
+ export class Delegations {
119
+ monotonic;
120
+ open = new Map();
121
+ /** The deliveries (their traffic ids) already handled — tasks that opened one, reports taken: bounded, oldest out. */
122
+ handled = new Set();
123
+ constructor(monotonic = () => performance.now()) {
124
+ this.monotonic = monotonic;
125
+ }
126
+ ended(d, state) {
127
+ return { id: d.id, from: d.from, to: d.to, state, age_ms: Math.max(0, this.monotonic() - d.openedMs) };
128
+ }
129
+ note(row, item) {
130
+ const news = this.sweep();
131
+ const corr = row.correlationId;
132
+ if (!corr || (item.kind !== "task" && item.kind !== "report"))
133
+ return news;
134
+ if (item.kind === "task") {
135
+ const key = pairKey(corr, item.from, item.to), cur = this.open.get(key);
136
+ if (DEAD.has(item.state)) {
137
+ if (cur && cur.task === item.id) {
138
+ this.open.delete(key);
139
+ news.push(this.ended(cur, "cancelled"));
140
+ }
141
+ return news;
142
+ }
143
+ if (this.handled.has(item.id))
144
+ return news; // a later state of a delivery that opened one already
145
+ this.noteHandled(item.id);
146
+ if (cur)
147
+ return news; // one is open for this pair and correlation: its report closes it
148
+ const d = { id: trafficId(`del:${item.id}`), task: item.id, from: item.from, to: item.to, openedMs: this.monotonic() };
149
+ this.open.set(key, d);
150
+ news.push({ id: d.id, from: d.from, to: d.to, state: "open", age_ms: 0 });
151
+ while (this.open.size > DELEGATIONS_MAX) {
152
+ const [oldKey, old] = this.open.entries().next().value;
153
+ this.open.delete(oldKey);
154
+ news.push(this.ended(old, "expired"));
155
+ }
156
+ return news;
157
+ }
158
+ // A report closes the task it answers: same correlation id, the other way round — once, at its first state (its later
159
+ // states are the same report, not an answer to a newer task).
160
+ if (this.handled.has(item.id))
161
+ return news;
162
+ this.noteHandled(item.id);
163
+ if (DEAD.has(item.state))
164
+ return news;
165
+ const key = pairKey(corr, item.to, item.from), d = this.open.get(key);
166
+ if (d) {
167
+ this.open.delete(key);
168
+ news.push(this.ended(d, "done"));
169
+ }
170
+ return news;
171
+ }
172
+ noteHandled(deliveryId) {
173
+ this.handled.delete(deliveryId);
174
+ this.handled.add(deliveryId);
175
+ while (this.handled.size > HANDLED_MAX)
176
+ this.handled.delete(this.handled.values().next().value);
177
+ }
178
+ /** What is open now (after expiring the ones past the TTL — the stream is told by the next note). */
179
+ snapshot() {
180
+ this.sweep();
181
+ const now = this.monotonic();
182
+ return [...this.open.values()].map((d) => ({ id: d.id, from: d.from, to: d.to, state: "open", age_ms: Math.max(0, now - d.openedMs) }));
183
+ }
184
+ /** Expire what has waited past the TTL; returns the news. */
185
+ sweep() {
186
+ const now = this.monotonic(), out = [];
187
+ for (const [key, d] of this.open) {
188
+ if (now - d.openedMs < DELEGATION_TTL_MS)
189
+ continue;
190
+ this.open.delete(key);
191
+ out.push(this.ended(d, "expired"));
192
+ }
193
+ return out;
194
+ }
195
+ }
96
196
  //# sourceMappingURL=fleet-traffic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-traffic.js","sourceRoot":"","sources":["../src/fleet-traffic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-traffic.js","sourceRoot":"","sources":["../src/fleet-traffic.ts"],"names":[],"mappings":"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"}
@@ -408,15 +408,22 @@ smallest valid `effect.json`:
408
408
  localhost requirement. Signed-in public/guest viewers may read and play only current effects in chats they can see;
409
409
  this grants no library management, personal-slot, private-image, Trial or profile access. Their Chat header has a
410
410
  browser-local show/off switch, including on phones, and an inline recovery action. It never writes host preferences.
411
- - Nothing plays in safe mode, with reduced motion or save-data, on a hidden page or while the viewer has effects off.
412
- The two-second empty-page frame-rate baseline still applies. A poster may replace unsupported/motion/data playback
413
- (see Static Chat fallback). Menus/dialogs stop `front` effects temporarily. The motion/baseline simplification is a
414
- separate #2118 follow-up; it is not implemented by this transport cutover.
415
- - **Safety pause** — it measures the page's responsiveness, not your Worker's CPU. The page's frame-rate floor is
416
- 90% of what it measured before the effect started, capped at 55 fps (50 on a constrained device), so a 30 Hz screen
417
- has a 27 fps floor. Where the browser reports them, long tasks may take at most 50 ms a second (25 ms constrained);
418
- unknown timing doesn't count as free. Overlapping 2-second windows are judged at most once a second after a warm-up,
419
- and three bad judgements in a row pause the effect (`host_budget`).
411
+ - Playback starts without an empty-page FPS calibration. Safe mode, hidden tabs and the viewer's show switch still
412
+ stop it. **Effects: follow the system's reduced-motion setting** is device-local and **off by default**, shared with
413
+ ambient effects. The OS request alone does not block playback; data saver is informational. A one-time chat note
414
+ offers to follow reduced motion, and a motion refusal offers **Play effects anyway** right there, including public/guest
415
+ viewers. Safe mode offers **Leave safe mode**. A poster may replace unsupported playback or a chosen motion block
416
+ (see Static Chat fallback). Menus/dialogs stop `front` effects temporarily.
417
+ - A layout refusal keeps its local code in the Chat notice and Effects dialog (for example `stock_order_unknown`);
418
+ the browser console also names it. Report that code rather than repeatedly applying the effect. A failed Try leaves
419
+ its stop code on the offer card. Pointer-leave does not stop Try; window blur, closing, navigation or lost stage proof do.
420
+ Agent playback summaries still contain only the closed reporting reasons, never raw local diagnostics.
421
+ - **Safety pause** — it measures the page's responsiveness, not your Worker's CPU. Host rAF observations learn a live
422
+ cadence during warm-up, then fix the mount's floor at 90% of a faster observed cadence, capped at 55 fps (50 on a
423
+ constrained device). A steady 30 Hz display has a 27 fps floor. This is not an empty-page health certificate; uniformly
424
+ slow startup can look like a low-refresh display. Where reported, long tasks may take at most 50 ms a second (25 ms
425
+ constrained); unknown observations never count as free. Overlapping 2-second windows are judged at most once a second
426
+ after warm-up, and three bad judgements in a row pause the effect (`host_budget`).
420
427
  - Only a viewer's explicit **Resume** restarts a safety-paused effect, and it doesn't clear the history: three such
421
428
  pauses within 24 hours turn the effect **off** for that viewer's browser and device class, across tabs and reloads,
422
429
  and Resume then refuses. It doesn't come back by itself after 24 hours.
@@ -465,7 +472,7 @@ as permission to run or fetch an effect, and do not keep retrying an unavailable
465
472
 
466
473
  ## Static Chat fallback
467
474
 
468
- When Worker/transport support is unavailable, motion/data settings prevent playback, or the page has no playback session,
475
+ When Worker/transport support is unavailable, the chosen motion preference prevents playback, or the page has no playback session,
469
476
  a current chat placement with a poster can show its static PNG **behind** the content; a front declaration does not
470
477
  make its poster foreground. No poster means nothing is drawn. Safe mode and the viewer's show switch hide posters
471
478
  too; unknown stock ordering refuses paint. Explicit Pause, queued effects and a failed live read are not replaced by
@@ -115,8 +115,10 @@ workspace `inbox/`; an unused upload is deleted after 30 minutes.
115
115
  **In replies.** Images inline; video and audio play inline; Markdown, CSV, JSON, code and text files get a **Show**
116
116
  card (200 lines, then "Show all … lines"); other files download. Code blocks have a language tag, **Wrap** and
117
117
  **Copy**, and fold after 30 lines. Each reply has **Copy this reply**. Markdown: headings, lists, quotes, bold/italic/
118
- strike, links, and tables (header row plus separator, alignment, up to 20 columns). Discord mentions and emoji show
119
- as names; there is no @-autocomplete in the composer.
118
+ strike, links, and tables (header row plus separator, alignment, up to 20 columns). Discord mentions show as names;
119
+ a Discord server emoji (`<:name:id>`) of the fleet's servers shows as its picture, and any other (or one whose picture
120
+ can't load) as `:name:`. Unicode emoji are drawn by the system's colour emoji font under every theme font (boxes on
121
+ Linux mean no colour emoji font is installed). There is no @-autocomplete in the composer.
120
122
 
121
123
  **Buttons and polls.** An agent's reply can carry up to 10 buttons ("Choices"); a click shows as a 🔘 chip and the
122
124
  agent receives `[button] <label>` (with `(value: …)` when it differs). Buttons expire after 24 h ("Expired — reply in
@@ -182,10 +184,13 @@ Click a team header to fold it. **Find** dims everything that doesn't match. A c
182
184
  and backend; clicking it opens the chat. List mode adds the description, model, a link to the Discord thread or
183
185
  Telegram topic, and **Open chat**.
184
186
 
185
- **Live traffic** (**Live** switch, on by default; **Key** explains it): a line for each message between instances.
187
+ **Live traffic** (**Live** switch, on by default; **Key** in the toolbar explains it, as a strip above the canvas): a line for each message between instances.
186
188
  Colour by kind — task (delegate_task) purple, send/query/update teal, report pink, broadcast orange; between teams
187
- (zoomed out) slate. Dotted = queued, dashed with a moving pulse = being delivered, grey fading for 3 s = delivered.
188
- "×N" = several messages share a line. Lines end at once when consumed; failed ones belong in Needs you. No message
189
+ (zoomed out) slate. Dotted = queued, dashed with a moving pulse = being delivered, grey fading for 12 s = delivered or
190
+ read. "×N" = several messages share a line; failed ones belong in Needs you. A `delegate_task` also draws the work: a
191
+ slow-moving purple line, delegator → worker, **in progress** until the worker's `report_result` with the same
192
+ correlation id comes back (then one pink line returns); none after 4 h fades as **no report yet**. Reloads and the
193
+ public link show the open ones. Every line ends on a card or a folded team's box. No message
189
194
  text is ever shown; instances with `cross_instance_visibility: hidden` are left out. On a public link it refreshes
190
195
  every 5 s.
191
196
 
@@ -231,7 +236,8 @@ expired (rewrote), tokens rewritten, expiry cost, keep-warm pings and their cost
231
236
  days). Money is list price (date shown); quota effects are estimates. `get_cache_report` gives the fleet to General,
232
237
  coordinators and full-profile instances, and each other instance only its own row.
233
238
 
234
- **The usage report** (the `get_usage_report` tool; its Fleet page comes next, #2122). Per instance (or backend,
239
+ **The usage report** (the `get_usage_report` tool, and Fleet → **Usage**, `/ui/fleet/usage`, #2122; the ◔ dialog's
240
+ **By agent →** opens it). Per instance (or backend,
235
241
  model, credential profile, team): input, output, cache read and cache write tokens, requests, delivered messages,
236
242
  and an amount, over today / 7d / month / all / custom days in the fleet's timezone. **Every amount is the
237
243
  API-equivalent at list price — not money spent** (subscriptions aren't billed per token): say "API-equivalent", never
@@ -246,7 +252,13 @@ backend or profile keeps its history as it was. `notMeasured` lists kiro and the
246
252
  they are never a $0 row, and what such an instance measured before still shows. Messages are counted per instance, so
247
253
  by backend they go under its backend now. Coverage only says "read" for a catch-up that listed and read every source
248
254
  (an unreadable directory or transcript is not covered, never a 0). Scope as
249
- `get_cache_report`. The dashboard reaches it over the public link only with `web.usage_report_on_public_link: true`.
255
+ `get_cache_report`. The dashboard reaches it over the public link only with `web.usage_report_on_public_link: true`
256
+ (Settings → Web → **Usage report over the public link**, applies at once; otherwise the page says "Not offered over
257
+ the public link" and links to that switch on the dashboard reached directly); guests never. The page adds a daily trend (top 5 and
258
+ others), a heatmap that tells a day read with nothing used from a day not collected, and **Download CSV** (the shown
259
+ answer's daily rows, with the basis). Claude subagent (sidechain) turns aren't counted yet. A long range whose daily rows
260
+ are too many says from which date the charts and the CSV start (the totals stay whole); a day used only by an unpriced
261
+ model is "used, not priced"; after a timezone change each day keeps the zone it was made in, and the page says so.
250
262
 
251
263
  **Keep-warm** means sending a small turn before the cache expires so the next real turn reads it instead of
252
264
  rewriting it. **Today it is only a simulation and a recommendation** — AgEnD sends no keep-warm pings (#1469 is
@@ -350,8 +362,8 @@ For an agent changing its *own* look, the `web-appearance` skill has the tools a
350
362
  Settings → **Web appearance**, card by card:
351
363
  - **Agents' themes** — **Show agents' themes, effects and widgets**; off, every chat looks the same and pictures and
352
364
  ring colours fall back to the bots' own (all devices). **Effects: follow the system's reduced-motion setting** (this
353
- device only, off by default): on, ambient effects stay still while the system asks for reduced motion.
354
- Canvas Worker effects currently still pause whenever the system asks for reduced motion.
365
+ device only, off by default): on, both ambient and Canvas Worker effects stay still while the system asks for reduced
366
+ motion. Otherwise both play, with one shared one-time chat note and a local action to follow the system.
355
367
  - **Ambient effects** — an agent's falling petals, snow, rising lanterns, twinkles or stars on a click, drawn behind
356
368
  its chat by the dashboard (data only, no consent needed). They show by default, the public link too; the chat's ⋯
357
369
  menu says why one is not showing (choosing the line fixes it there) and offers **Clear the ambient effect** /
@@ -377,13 +389,13 @@ Settings → **Web appearance**, card by card:
377
389
  **Allow HTML previews**, its listener and port. Signed-in public/guest viewers can play current effects in chats they
378
390
  may see, without library, personal-slot, Trial or profile grants. Their Chat header offers a browser-local show/off
379
391
  switch and recovery, on desktop and phone; it never changes host preferences. A Try sample starts on a signed-in non-public admin's
380
- click, with no extra consent. The show switch, safe mode, hidden tab, browser support, system reduced motion,
381
- data-saver and two-second frame-rate baseline still apply; changing motion/baseline policy is a separate follow-up.
392
+ click, with no extra consent. The show switch, safe mode, hidden tab, browser support and live performance guard remain.
393
+ No startup FPS calibration; data saver does not block. Reduced motion blocks only if this device chose to follow it.
382
394
  A blocked placement keeps an exact named notice. On ordinary dashboard sessions, Show/custom-CSS actions open
383
395
  **Web appearance**. Public/guest Show-off has **Turn effects on here**; a guest CSS refusal offers Reload.
384
396
  An unavailable
385
- isolated transport offers Reload, never an HTML-preview setup step. The dialog names calibration, safety and raw
386
- unknown codes. Codes stay local; agents get only closed recent blocked reasons without viewer identifiers or counts.
397
+ isolated transport offers Reload, never an HTML-preview setup step. A motion refusal offers **Play effects anyway**;
398
+ safe mode offers **Leave safe mode**. The dialog names loading, safety and raw unknown codes. Codes stay local; agents get only closed recent blocked reasons without viewer identifiers or counts.
387
399
  - **Identity card upload limits** — portrait and banner size limits and per-agent picture quota
388
400
  (`web.appearance.*`); lowering applies at once, raising waits for an admin.
389
401
  - **Restore defaults** — resets this host's appearance settings (it lists what it resets first).
@@ -447,3 +459,10 @@ no instance uses that provider.
447
459
  **Settings won't change something.** Over a public link, Web settings and appearance are read only; a loosening
448
460
  change waits for an admin's confirmation in General chat; a value in the "Set in fleet.yaml" list must be edited in
449
461
  fleet.yaml (Developer tab, or the file) and `agend reload`.
462
+
463
+ ### Canvas Worker playback diagnostics
464
+
465
+ If an effect cannot play, the Chat notice and Effects dialog show its local refusal code. A failed Try retains its stop
466
+ code on the offer card; the browser console also names refusals. Include the code when reporting a problem. Long chat
467
+ history is checked separately from the bounded set of current paint holes. Moving the pointer away does not stop Try;
468
+ window blur, navigation, closing or loss of the verified stage does. Local raw codes are not sent in agent summaries.
@@ -80,6 +80,7 @@ const CLASSIC_FIELDS = [
80
80
  const FLEET_FIELD_IMPACTS = {
81
81
  "web.echo_to_channel": "now",
82
82
  "web.log_tab": "now",
83
+ "web.usage_report_on_public_link": "now",
83
84
  "web.public_link.allow_public": "now",
84
85
  "web.public_link.ttl_minutes": "now",
85
86
  "web.public_link.protocol": "now",
@@ -1 +1 @@
1
- {"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"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"}
@@ -522,7 +522,8 @@ const listInstances = (ctx, rawArgs, respond, meta) => {
522
522
  }
523
523
  if (filterName) {
524
524
  const lowerName = filterName.toLowerCase();
525
- allInstances = allInstances.filter(i => i.name.toLowerCase().includes(lowerName));
525
+ allInstances = allInstances.filter(i => i.name.toLowerCase().includes(lowerName) ||
526
+ (i.display_name?.toLowerCase().includes(lowerName) ?? false));
526
527
  }
527
528
  if (filterBackend) {
528
529
  allInstances = allInstances.filter(i => i.backend === filterBackend);
@@ -552,6 +553,7 @@ const listInstances = (ctx, rawArgs, respond, meta) => {
552
553
  const compactInstances = allInstances.map(i => ({
553
554
  name: i.name,
554
555
  status: i.status,
556
+ ...(i.display_name ? { display_name: i.display_name } : {}),
555
557
  backend: i.backend,
556
558
  model: i.model,
557
559
  kind: i.kind,
@@ -603,6 +605,7 @@ const describeInstance = (ctx, rawArgs, respond) => {
603
605
  name: targetName,
604
606
  type: "instance",
605
607
  kind: "fleet-topic",
608
+ display_name: config.display_name ?? null,
606
609
  description: config.description ?? null,
607
610
  tags: config.tags ?? [],
608
611
  working_directory: config.working_directory,