@songsid/agend 2.2.0-alpha.6 → 2.2.0-alpha.8

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 (43) hide show
  1. package/dist/ansi-faint.d.ts +25 -0
  2. package/dist/ansi-faint.js +90 -0
  3. package/dist/ansi-faint.js.map +1 -0
  4. package/dist/fleet-manager.d.ts +12 -0
  5. package/dist/fleet-manager.js +116 -28
  6. package/dist/fleet-manager.js.map +1 -1
  7. package/dist/general-knowledge/skills/fleet-health/SKILL.md +11 -2
  8. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +2 -1
  9. package/dist/locale.js +4 -0
  10. package/dist/locale.js.map +1 -1
  11. package/dist/outbound-handlers.js +8 -1
  12. package/dist/outbound-handlers.js.map +1 -1
  13. package/dist/tz-utils.d.ts +6 -0
  14. package/dist/tz-utils.js +23 -0
  15. package/dist/tz-utils.js.map +1 -1
  16. package/dist/ui/chat-render.js +29 -1
  17. package/dist/ui/chat-strings.js +2 -0
  18. package/dist/ui/chat-thread.js +128 -3
  19. package/dist/ui/panel-chat.js +1 -0
  20. package/dist/ui/shared/app-i18n.js +2 -0
  21. package/dist/ui/shared/app-shell.js +9 -1
  22. package/dist/ui/shared/app-stream.js +186 -43
  23. package/dist/ui/shared/app.css +16 -0
  24. package/dist/ui/shared/app.js +6 -0
  25. package/dist/ui/shared/panel-view.js +21 -8
  26. package/dist/ui/shared/usage-dialog.js +16 -1
  27. package/dist/ui/shared/view-strings.js +10 -0
  28. package/dist/usage/usage-api.d.ts +8 -1
  29. package/dist/usage/usage-api.js +100 -31
  30. package/dist/usage/usage-api.js.map +1 -1
  31. package/dist/web-api.d.ts +1 -1
  32. package/dist/web-api.js +67 -4
  33. package/dist/web-api.js.map +1 -1
  34. package/dist/web-chat-history.d.ts +7 -0
  35. package/dist/web-chat-history.js +19 -0
  36. package/dist/web-chat-history.js.map +1 -1
  37. package/dist/web-host-guard.d.ts +2 -0
  38. package/dist/web-host-guard.js +7 -1
  39. package/dist/web-host-guard.js.map +1 -1
  40. package/dist/web-upload.d.ts +17 -0
  41. package/dist/web-upload.js +38 -7
  42. package/dist/web-upload.js.map +1 -1
  43. package/package.json +1 -1
@@ -18,6 +18,9 @@ import { readStream } from "./read-stream.js";
18
18
  export { UsageMetric } from "./usage-dialog.js";
19
19
  import { backendLabel, STATUS_KEYS } from "./instance-nav.js";
20
20
  import { viewStore } from "./view-roster-store.js";
21
+
22
+ /** #1580: the app's stream says the fleet is not answering (a restart): the View's polls skip their turn until it is. */
23
+ const fleetUnreachable = () => appStore.get().connection === "reconnecting";
21
24
  import { navigate } from "./app-nav.js";
22
25
  import { viewPath } from "./app-route.js";
23
26
  import { Dialog } from "./ui-dialog.js";
@@ -34,9 +37,11 @@ function tn(key, values = {}) {
34
37
  const stored = (k) => { try { return localStorage.getItem(k); } catch { return null; } };
35
38
  const store = (k, v) => { try { localStorage.setItem(k, v); } catch { /* this page only */ } };
36
39
 
37
- // ── ANSI (SGR) → markup ── A coloured run is <span class="ansi" data-fg data-bg data-b>, never a style attribute (#1300);
38
- // paintAnsi() sets the colours through the style object once it is on the page. The colours are the palette's or rgb()
39
- // of numbers — nothing from the pane's text.
40
+ // ── ANSI (SGR) → markup ── A coloured run is <span class="ansi" data-fg data-bg data-b data-dim>, never a style attribute
41
+ // (#1300); paintAnsi() sets the colours through the style object once it is on the page. The colours are the palette's or
42
+ // rgb() of numbers — nothing from the pane's text. Dim (SGR 2) is kept because a CLI paints text that is not input dim:
43
+ // Claude Code's prompt suggestion and empty-box placeholder sit in the composer exactly like typed text but faint (#1582,
44
+ // suzuke/agend-terminal#3744). Reverse video (7) swaps the run's colours, the terminal's own standing in for unset ones.
40
45
  const BASE = ["#000000", "#cd3131", "#0dbc79", "#e5e510", "#2472c8", "#bc3fbc", "#11a8cd", "#e5e5e5"];
41
46
  const BRIGHT = ["#666666", "#f14c4c", "#23d18b", "#f5f543", "#3b8eea", "#d670d6", "#29b8db", "#ffffff"];
42
47
  export const esc = (s) => String(s).replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[c]));
@@ -46,14 +51,17 @@ function xterm256(n) {
46
51
  if (n < 232) { n -= 16; const r = Math.floor(n / 36), g = Math.floor((n % 36) / 6), b = n % 6; const v = (x) => (x ? x * 40 + 55 : 0); return `rgb(${v(r)},${v(g)},${v(b)})`; }
47
52
  const l = (n - 232) * 10 + 8; return `rgb(${l},${l},${l})`;
48
53
  }
54
+ /** The `.v-pre` terminal's own colours (app.css), for a reversed run whose colours were not set. */
55
+ const TERM_FG = "#d0d0d0", TERM_BG = "#000000";
49
56
  export function ansiToHtml(text) {
50
- let out = "", fg = null, bg = null, bold = false, open = false;
57
+ let out = "", fg = null, bg = null, bold = false, dim = false, reverse = false, open = false;
51
58
  const attrs = () => {
52
59
  let f = fg;
53
60
  if (bold && typeof f === "number" && f < 8) f = BRIGHT[f];
54
61
  else if (typeof f === "number") f = BASE[f];
55
- const b = bg == null ? null : typeof bg === "number" ? BASE[bg] : bg;
56
- return (f ? ` data-fg="${esc(f)}"` : "") + (b ? ` data-bg="${esc(b)}"` : "") + (bold ? " data-b" : "");
62
+ let b = bg == null ? null : typeof bg === "number" ? BASE[bg] : bg;
63
+ if (reverse) [f, b] = [b ?? TERM_BG, f ?? TERM_FG];
64
+ return (f ? ` data-fg="${esc(f)}"` : "") + (b ? ` data-bg="${esc(b)}"` : "") + (bold ? " data-b" : "") + (dim ? " data-dim" : "");
57
65
  };
58
66
  const flush = () => { if (open) { out += "</span>"; open = false; } };
59
67
  const openSpan = () => { const a = attrs(); if (a) { out += `<span class="ansi"${a}>`; open = true; } };
@@ -68,9 +76,12 @@ export function ansiToHtml(text) {
68
76
  if (codes.length === 0) codes.push(0);
69
77
  for (let i = 0; i < codes.length; i++) {
70
78
  const c = codes[i];
71
- if (c === 0) { fg = bg = null; bold = false; }
79
+ if (c === 0) { fg = bg = null; bold = dim = reverse = false; }
72
80
  else if (c === 1) bold = true;
73
- else if (c === 22) bold = false;
81
+ else if (c === 2) dim = true;
82
+ else if (c === 22) bold = dim = false; // "normal intensity": neither bold nor faint
83
+ else if (c === 7) reverse = true;
84
+ else if (c === 27) reverse = false;
74
85
  else if (c === 39) fg = null;
75
86
  else if (c === 49) bg = null;
76
87
  else if (c >= 30 && c <= 37) fg = c - 30;
@@ -129,6 +140,7 @@ export function ViewPanel({ route, navKey }) {
129
140
  const reads = readStream(lease);
130
141
  const load = async () => {
131
142
  if (typeof document !== "undefined" && document.hidden) return;
143
+ if (fleetUnreachable()) return; // #1580: the app's stream is reconnecting — no read storm
132
144
  const token = reads.begin();
133
145
  if (!token) return;
134
146
  try {
@@ -213,6 +225,7 @@ function Terminal({ name, lease, density }) {
213
225
  const reads = readStream(lease);
214
226
  const refresh = async () => {
215
227
  if (document.hidden) return;
228
+ if (fleetUnreachable()) return; // #1580: every 0.8 s would be a connection storm through a relay
216
229
  // A selection inside the pane is being copied: keep this frame until it is released.
217
230
  const sel = typeof window.getSelection === "function" ? window.getSelection() : null;
218
231
  if (sel && sel.toString().length > 0 && sel.anchorNode && pre.current && pre.current.contains(sel.anchorNode)) return;
@@ -65,6 +65,14 @@ export function UsageMetric({ m }) {
65
65
  const sub = [note, expiryText(m.expiresAt)].filter(Boolean).join(" · ");
66
66
  return html`<div class="u-metric"><div class="u-row"><span class="u-label">${label}</span><span class="u-val">${val}</span></div>${sub ? html`<div class="u-sub">${sub}</div>` : null}</div>`;
67
67
  }
68
+ /** "Updated 3 min ago" (#1585): how old the numbers are — the panel may show the last snapshot while a fresh one comes. */
69
+ export function updatedAgo(fetchedAt, now = Date.now()) {
70
+ const ms = now - new Date(fetchedAt).getTime();
71
+ if (!Number.isFinite(ms) || ms < 60_000) return tn("usageUpdatedJustNow");
72
+ const min = Math.floor(ms / 60_000);
73
+ return tn("usageUpdatedAgo", { age: min < 60 ? tn("usageMinutes", { n: min }) : tn("usageHours", { n: Math.floor(min / 60) }) });
74
+ }
75
+
68
76
  /** `owner`: the navigation that opened it — its reads and the minute's timer live and end with it. */
69
77
  export function UsageDialog({ onClose, owner = "" }) {
70
78
  const lease = useLease(`usage-dialog:${owner}`);
@@ -84,6 +92,13 @@ export function UsageDialog({ onClose, owner = "" }) {
84
92
  finally { reads.end(token); }
85
93
  };
86
94
  useEffect(() => { load(false); lease.interval(() => load(false), 60_000); }, [lease]);
95
+ // #1585: the server answered with the last snapshot while it fetches a fresh one — read again shortly (the same
96
+ // cache: no vendor call of its own) so the fresh numbers replace it without waiting for the minute's tick.
97
+ useEffect(() => {
98
+ if (!data || !data.refreshing) return undefined;
99
+ const timer = setTimeout(() => load(false), 4_000);
100
+ return () => clearTimeout(timer);
101
+ }, [data]);
87
102
  const key = (p) => String(p.id || p.name || "");
88
103
  const ordered = (providers) => {
89
104
  const rank = new Map(order.map((id, i) => [id, i]));
@@ -118,7 +133,7 @@ export function UsageDialog({ onClose, owner = "" }) {
118
133
  : html`${(p.metrics || []).map((m, j) => html`<${UsageMetric} key=${j} m=${m} />`)}
119
134
  ${!p.stale && p.hint ? html`<p class="note">${usageText(p.hint, p.hintI18n)}</p>` : !(p.metrics || []).length ? html`<p class="note">${tn("usage.no_data")}</p>` : null}`}
120
135
  </section>`)}
121
- <div class="u-foot"><span class="note">${tn("usageUpdated")} ${new Date(data.fetchedAt).toLocaleTimeString()}</span>
136
+ <div class="u-foot"><span class="note" title=${new Date(data.fetchedAt).toLocaleString()}>${updatedAgo(data.fetchedAt)}${data.refreshing ? html` · <span class="u-refreshing">${tn("usageRefreshing")}</span>` : null}</span>
122
137
  <button type="button" class="btn btn-sm" onClick=${() => load(true)}>${tn("usageRefresh")}</button></div>`;
123
138
  }
124
139
  return html`<${Dialog} title=${tn("usage.title")} onClose=${onClose} wide=${true}>${content}</${Dialog}>`;
@@ -31,6 +31,11 @@ register("view", {
31
31
  "usageTitle": "📊 AI Usage",
32
32
  "usageEmpty": "No AI CLI logins found on this machine.",
33
33
  "usageUpdated": "updated",
34
+ "usageUpdatedAgo": "Updated {age} ago",
35
+ "usageUpdatedJustNow": "Updated just now",
36
+ "usageRefreshing": "Refreshing…",
37
+ "usageMinutes": "{n} min",
38
+ "usageHours": "{n} h",
34
39
  "usageRefresh": "Refresh",
35
40
  "usageHigh": "high",
36
41
  "usageNear": "near limit",
@@ -188,6 +193,11 @@ register("view", {
188
193
  "usageTitle": "📊 AI 訂閱用量",
189
194
  "usageEmpty": "本機沒有偵測到已登入的 AI CLI。",
190
195
  "usageUpdated": "更新於",
196
+ "usageUpdatedAgo": "{age}前更新",
197
+ "usageUpdatedJustNow": "剛剛更新",
198
+ "usageRefreshing": "更新中…",
199
+ "usageMinutes": "{n} 分鐘",
200
+ "usageHours": "{n} 小時",
191
201
  "usageRefresh": "重新整理",
192
202
  "usageHigh": "偏高",
193
203
  "usageNear": "接近上限",
@@ -21,9 +21,14 @@ export interface UsageApiContext {
21
21
  /** Providers used by running or paused fleet/Classic instances. */
22
22
  getActiveUsageProviderIds?(): ReadonlySet<string>;
23
23
  }
24
+ /**
25
+ * `refreshing` (#1585): this is the last snapshot, served while a fresh one is being fetched — `fetchedAt` says how old
26
+ * it is. Only the dashboard panel is ever answered this way; chat, tools and Discord presence wait for a fresh one.
27
+ */
24
28
  export type UsagePayload = {
25
29
  fetchedAt: string;
26
30
  providers: ProviderUsage[];
31
+ refreshing?: boolean;
27
32
  };
28
33
  /** Keep primary account limits even at zero; hide only unused per-model noise. */
29
34
  export declare function isVisibleUsageMetric(metric: UsageMetric): boolean;
@@ -38,7 +43,9 @@ export declare function setUsageFetcherForTests(fn: (() => Promise<UsagePayload>
38
43
  * surfaces, because the 5-minute TTL exists to protect vendor rate limits and a
39
44
  * second entry point that bypassed it would defeat that.
40
45
  */
41
- export declare function getUsageSnapshot(force?: boolean, providerIds?: Iterable<string>): Promise<UsagePayload>;
46
+ export declare function getUsageSnapshot(force?: boolean, providerIds?: Iterable<string>, opts?: {
47
+ allowStale?: boolean;
48
+ }): Promise<UsagePayload>;
42
49
  /**
43
50
  * Render a usage payload as one compact chat message.
44
51
  *
@@ -1,5 +1,8 @@
1
1
  import { fetchAllUsage } from "./providers.js";
2
2
  import { museUsageRevision } from "../muse-usage-relay.js";
3
+ import { statSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { getAgendHome } from "../paths.js";
3
6
  import { t } from "../locale.js";
4
7
  import { usageExpiryText, usageResetText, usageText } from "./i18n.js";
5
8
  /** Keep primary account limits even at zero; hide only unused per-model noise. */
@@ -55,6 +58,34 @@ const STALE_MAX_MS = 60 * 60 * 1000;
55
58
  * require a larger refactor; this is an accepted trade-off. */
56
59
  const RETRY_AFTER_MAX_MS = 15 * 60 * 1000; // 15 minutes
57
60
  let cache = null;
61
+ /**
62
+ * #1585: which fleet config a snapshot was taken under — fleet.yaml's and classicBot.yaml's size and mtime. A snapshot
63
+ * is served, fresh or stale, and an in-flight fetch is joined, only under the config it was fetched for: a credential
64
+ * profile or binding added, removed or moved since means another set of accounts, so that read waits for its own
65
+ * fetch. Metadata only; at most every 5 s. `null` when a file's metadata cannot be read (anything but ENOENT): an unknown
66
+ * config matches nothing, not even another unknown one, and is not remembered.
67
+ */
68
+ let configKeyMemo = null;
69
+ const CONFIG_KEY_MS = 5_000;
70
+ function usageConfigKey(now = Date.now()) {
71
+ if (configKeyMemo && now - configKeyMemo.at < CONFIG_KEY_MS)
72
+ return configKeyMemo.key;
73
+ const parts = [];
74
+ for (const f of ["fleet.yaml", "classicBot.yaml"]) {
75
+ try {
76
+ const st = statSync(join(getAgendHome(), f));
77
+ parts.push(`${f}:${st.size}:${st.mtimeMs}`);
78
+ }
79
+ catch (err) {
80
+ if (err.code !== "ENOENT")
81
+ return null;
82
+ parts.push(`${f}:-`); // known to be absent
83
+ }
84
+ }
85
+ configKeyMemo = { at: now, key: parts.join("|") };
86
+ return configKeyMemo.key;
87
+ }
88
+ const sameOwner = (a, b) => a.configKey !== null && a.configKey === b.configKey && a.museRevision === b.museRevision;
58
89
  let inflight = null;
59
90
  let lastForcedFetchStartedAt = null;
60
91
  /** Last successful per-provider rows, for stale-while-rate-limited. */
@@ -66,6 +97,7 @@ let fetcher = fetchAllUsage;
66
97
  export function setUsageFetcherForTests(fn) {
67
98
  fetcher = fn ?? fetchAllUsage;
68
99
  cache = null;
100
+ configKeyMemo = null;
69
101
  inflight = null;
70
102
  lastForcedFetchStartedAt = null;
71
103
  lastGood.clear();
@@ -181,10 +213,10 @@ function hasTransientEmpty(payload) {
181
213
  return payload.providers.some(isTransientEmpty);
182
214
  }
183
215
  function json(res, code, body) {
184
- res.writeHead(code, { "Content-Type": "application/json" });
216
+ res.writeHead(code, { "Content-Type": "application/json", "Cache-Control": "no-store" });
185
217
  res.end(JSON.stringify(body));
186
218
  }
187
- async function usage(force) {
219
+ async function usage(force, allowStale = false) {
188
220
  // A user's first force refresh must work even immediately after an automatic
189
221
  // fetch (notably when Kiro refreshed its token just after that fetch). Only
190
222
  // repeated force requests are floored to protect vendor endpoints.
@@ -194,32 +226,67 @@ async function usage(force) {
194
226
  && [...retryAfterUntil.values()].some(until => until > now);
195
227
  const effectiveForce = !anyBackoffActive && force && (lastForcedFetchStartedAt === null
196
228
  || now - lastForcedFetchStartedAt >= FORCE_FLOOR_MS);
197
- const museRevision = museUsageRevision();
198
- if (!effectiveForce && cache && now - cache.at < cache.ttlMs && cache.museRevision === museRevision)
199
- return cache.payload;
200
- inflight ??= (() => {
201
- if (effectiveForce)
202
- lastForcedFetchStartedAt = Date.now();
203
- return fetcher()
204
- .then(payload => {
205
- const transient = hasTransientEmpty(payload);
206
- const resolved = withStaleFallback(payload);
207
- // Extend cache TTL to the longest Retry-After deadline so we don't
208
- // hammer vendor endpoints during a backoff window.
209
- const maxRetryAfterMs = retryAfterUntil.size > 0
210
- ? Math.max(0, Math.max(...retryAfterUntil.values()) - Date.now())
211
- : 0;
212
- cache = {
213
- at: Date.now(),
214
- ttlMs: Math.max(transient ? TRANSIENT_CACHE_MS : CACHE_MS, maxRetryAfterMs),
215
- payload: resolved,
216
- museRevision,
217
- };
218
- return resolved;
219
- })
220
- .finally(() => { inflight = null; });
221
- })();
222
- return inflight;
229
+ const owner = { configKey: usageConfigKey(now), museRevision: museUsageRevision() };
230
+ const ownCache = cache && sameOwner(cache.owner, owner) ? cache : null;
231
+ if (!effectiveForce && ownCache && now - ownCache.at < ownCache.ttlMs)
232
+ return ownCache.payload;
233
+ // An unknown config is served nothing cached, and vendors are still called no more often than the TTL allows: within
234
+ // the last fetch's TTL such a read fails (every caller reports a failed read) instead of starting another round.
235
+ if (owner.configKey === null && !effectiveForce && cache && now - cache.at < cache.ttlMs) {
236
+ throw new Error("the fleet config cannot be read: usage is not shown for an unknown config");
237
+ }
238
+ // #1585, stale-while-revalidate (the dashboard panel only): an expired snapshot of this same config and Muse
239
+ // revision, younger than STALE_MAX_MS, is answered at once while the one refresh the expiry would have started anyway
240
+ // runs. Vendors are called exactly as before — the same condition starts the same single shared fetch; only the panel
241
+ // stops waiting for it.
242
+ const stale = allowStale && !effectiveForce && ownCache && now - ownCache.at < STALE_MAX_MS ? ownCache.payload : null;
243
+ const fresh = fetchFor(owner, effectiveForce, () => usage(force, false));
244
+ if (stale) {
245
+ fresh.catch(() => { });
246
+ return { ...stale, refreshing: true };
247
+ }
248
+ // A read that waited is answered only if the config it waited under is still the one it reads now: a profile or
249
+ // binding changed meanwhile means another set of accounts, so it decides again (the result stays cached under the
250
+ // owner it was fetched for). An unknown config that is still unknown gets the round it waited for (never a cache).
251
+ return fresh.then(payload => {
252
+ const configKey = usageConfigKey();
253
+ return configKey === owner.configKey && museUsageRevision() === owner.museRevision ? payload : usage(false, false);
254
+ });
255
+ }
256
+ /**
257
+ * The fetch for `owner`: joins the one in flight when it belongs to the same config; one for another config is waited
258
+ * out first (never a second vendor round in parallel), then the read is decided again and this config gets its own. Its result is cached under the
259
+ * owner it was started for, so it is never served to another.
260
+ */
261
+ function fetchFor(owner, effectiveForce, again) {
262
+ if (inflight && sameOwner(inflight.owner, owner))
263
+ return inflight.promise;
264
+ // Another config's fetch: wait it out, then decide again (its result is never this read's).
265
+ if (inflight)
266
+ return inflight.promise.then(() => undefined, () => undefined).then(again);
267
+ if (effectiveForce)
268
+ lastForcedFetchStartedAt = Date.now();
269
+ const promise = fetcher()
270
+ .then(payload => {
271
+ const transient = hasTransientEmpty(payload);
272
+ const resolved = withStaleFallback(payload);
273
+ // Extend cache TTL to the longest Retry-After deadline so we don't
274
+ // hammer vendor endpoints during a backoff window.
275
+ const maxRetryAfterMs = retryAfterUntil.size > 0
276
+ ? Math.max(0, Math.max(...retryAfterUntil.values()) - Date.now())
277
+ : 0;
278
+ cache = {
279
+ at: Date.now(),
280
+ ttlMs: Math.max(transient ? TRANSIENT_CACHE_MS : CACHE_MS, maxRetryAfterMs),
281
+ payload: resolved,
282
+ owner,
283
+ };
284
+ return resolved;
285
+ })
286
+ .finally(() => { if (inflight?.promise === promise)
287
+ inflight = null; });
288
+ inflight = { promise, owner };
289
+ return promise;
223
290
  }
224
291
  /**
225
292
  * The same cached snapshot the HTTP route serves, for in-process callers: the
@@ -227,8 +294,8 @@ async function usage(force) {
227
294
  * surfaces, because the 5-minute TTL exists to protect vendor rate limits and a
228
295
  * second entry point that bypassed it would defeat that.
229
296
  */
230
- export async function getUsageSnapshot(force = false, providerIds) {
231
- return filterUsageProviders(await usage(force), providerIds);
297
+ export async function getUsageSnapshot(force = false, providerIds, opts = {}) {
298
+ return filterUsageProviders(await usage(force, opts.allowStale === true), providerIds);
232
299
  }
233
300
  /**
234
301
  * Render a usage payload as one compact chat message.
@@ -400,7 +467,9 @@ export function handleUsageRequest(req, res, url, ctx) {
400
467
  json(res, 405, { error: "method not allowed" });
401
468
  return true;
402
469
  }
403
- getUsageSnapshot(url.searchParams.has("force"), ctx.getActiveUsageProviderIds?.())
470
+ // #1585: the panel opens from the last snapshot at once (refreshing behind it); never a browser or proxy cache — the
471
+ // snapshot lives in this process, behind the same gate as every read, and goes when a request may not see it.
472
+ getUsageSnapshot(url.searchParams.has("force"), ctx.getActiveUsageProviderIds?.(), { allowStale: true })
404
473
  .then(payload => json(res, 200, payload))
405
474
  .catch(err => {
406
475
  ctx.logger.debug({ err }, "ai-usage fetch failed");
@@ -1 +1 @@
1
- {"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"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"}
package/dist/web-api.d.ts CHANGED
@@ -3,7 +3,7 @@ import type { PaneContextSource } from "./pane-context-cache.js";
3
3
  import type { SendOpts } from "./channel/types.js";
4
4
  import type { IncomingMessage, ServerResponse } from "node:http";
5
5
  import type { LifecycleCreateArgs } from "./instance-lifecycle.js";
6
- import type { PreviewAvailability } from "./web-preview.js";
6
+ import { type PreviewAvailability } from "./web-preview.js";
7
7
  import { type WebChatHistory } from "./web-chat-history.js";
8
8
  import { type WebFileLedger } from "./web-upload.js";
9
9
  import type { WebSessionStore } from "./web-session.js";
package/dist/web-api.js CHANGED
@@ -20,8 +20,9 @@ import { CreateInstanceArgs, validateArgs } from "./outbound-schemas.js";
20
20
  import { readStatuslineModel, resolveInstanceContext } from "./topic-commands.js";
21
21
  import { z } from "zod";
22
22
  import { evaluateWebRequest, isPassiveWebRead, isSecureRequest, isWebRequestAuthorized, WEB_TOKEN_INVALID_MESSAGE } from "./web-auth.js";
23
+ import { dashboardOriginFor } from "./web-preview.js";
23
24
  import { newWebMessageId, parseLastEventId } from "./web-chat-history.js";
24
- import { attachmentDelivery, displayName, INLINE_MIME, isFileId, publicAttachment, sniffUpload, UPLOAD_LIMITS, wellFormed } from "./web-upload.js";
25
+ import { attachmentDelivery, displayName, INLINE_MIME, isFileId, MEDIA_RANGE_MAX, publicAttachment, sniffUpload, UPLOAD_LIMITS, wellFormed } from "./web-upload.js";
25
26
  import { getAgendHome } from "./paths.js";
26
27
  import { authorizeExplicitInstanceRemoval } from "./instance-removal.js";
27
28
  import { measureSyncWork } from "./sync-work-attribution.js";
@@ -238,7 +239,9 @@ export function handleWebRequest(req, res, url, ctx) {
238
239
  prompts: ctx.listWebPrompts?.() ?? [],
239
240
  // #1386: "Needs you" rides the passive channels only — no endpoint of its own to poll.
240
241
  needs: ctx.needsYouItems?.() ?? [],
241
- cursor: history ? `${history.boot}-${history.lastId}` : null,
242
+ // #1577: the newest message this answer accounts for — after a restart, the last restored one until this process
243
+ // records its own (`<boot>-0` would be after(0): the whole restored history again on every poll).
244
+ cursor: history ? history.pollCursor() : null,
242
245
  });
243
246
  return true;
244
247
  }
@@ -338,6 +341,13 @@ export function handleWebRequest(req, res, url, ctx) {
338
341
  const fileMatch = path.match(/^\/ui\/file\/([^/]+)$/);
339
342
  if (method === "GET" && fileMatch) {
340
343
  const id = fileMatch[1];
344
+ // #1589: audio and video, played in the page — one byte range at a time (206), by id only, never a whole video in
345
+ // memory. Every other type is answered exactly as before.
346
+ const media = isFileId(id) ? ctx.webFiles?.mediaOf?.(id) ?? null : null;
347
+ if (media) {
348
+ serveMediaRange(req, res, ctx.webFiles, id, media);
349
+ return true;
350
+ }
341
351
  const got = isFileId(id) ? ctx.webFiles?.read(id) : null;
342
352
  if (!got) {
343
353
  json(res, 404, { error: "No such file" });
@@ -1203,6 +1213,52 @@ function shellPreview(req, ctx, mode) {
1203
1213
  return null;
1204
1214
  return ctx.previewForUi?.(typeof req.headers.host === "string" ? req.headers.host : undefined, isSecureRequest(req)) ?? null;
1205
1215
  }
1216
+ /**
1217
+ * #1589: an audio/video file, by id (the ledger re-checks the file on every read). One `Range: bytes=a-b`, `a-` or `-n`
1218
+ * → 206 with at most MEDIA_RANGE_MAX bytes and its Content-Range (a player asks again for the rest); past the end → 416.
1219
+ * No Range, several, or one not in that form → 200 with the whole file, as every file is served (the Download link).
1220
+ * Inline, nosniff, no caching, and the route's own sandbox policy, as for every file.
1221
+ */
1222
+ function serveMediaRange(req, res, files, id, file) {
1223
+ const total = file.size;
1224
+ const header = typeof req.headers.range === "string" ? req.headers.range.trim() : "";
1225
+ const m = /^bytes=(\d*)-(\d*)$/.exec(header);
1226
+ let start = 0, end = total - 1;
1227
+ const ranged = !!m && (m[1] !== "" || m[2] !== "");
1228
+ if (ranged) {
1229
+ if (m[1] === "") {
1230
+ const n = Number(m[2]);
1231
+ start = Math.max(0, total - n);
1232
+ }
1233
+ else {
1234
+ start = Number(m[1]);
1235
+ if (m[2] !== "")
1236
+ end = Number(m[2]);
1237
+ }
1238
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= total) {
1239
+ res.setHeader("Content-Range", `bytes */${total}`);
1240
+ json(res, 416, { error: "Range not satisfiable" });
1241
+ return;
1242
+ }
1243
+ }
1244
+ end = ranged ? Math.min(end, total - 1, start + MEDIA_RANGE_MAX - 1) : total - 1;
1245
+ const got = files.readSlice(id, start, end);
1246
+ if (!got || (!ranged && got.bytes.length !== total)) {
1247
+ json(res, 404, { error: "No such file" });
1248
+ return;
1249
+ }
1250
+ res.setHeader("Content-Type", file.mime);
1251
+ res.setHeader("Content-Disposition", `inline; filename*=UTF-8''${encodeURIComponent(wellFormed(file.name))}`);
1252
+ res.setHeader("Accept-Ranges", "bytes");
1253
+ if (ranged)
1254
+ res.setHeader("Content-Range", `bytes ${got.start}-${got.end}/${total}`);
1255
+ res.setHeader("Content-Length", String(got.bytes.length));
1256
+ res.setHeader("X-Content-Type-Options", "nosniff");
1257
+ res.setHeader("Cache-Control", "private, no-store");
1258
+ res.setHeader("Content-Security-Policy", "default-src 'none'; img-src 'self'; style-src 'unsafe-inline'; sandbox");
1259
+ res.writeHead(ranged ? 206 : 200);
1260
+ res.end(got.bytes);
1261
+ }
1206
1262
  function shellBodyTag(req, ctx, mode) {
1207
1263
  const p = shellPreview(req, ctx, mode);
1208
1264
  const attr = (v) => String(v ?? "").replace(/[&<>"']/g, c => `&#${c.charCodeAt(0)};`);
@@ -1211,7 +1267,9 @@ function shellBodyTag(req, ctx, mode) {
1211
1267
  // #1554: no availability asked (the public link, or not the full app) still says why, in the page's language.
1212
1268
  + ` data-preview-reason-code="${attr(p ? p.code ?? "" : gatewayRequestContext(req) ? "publicLink" : "notOffered")}"`
1213
1269
  // #1523 N3: whether the fleet serves /api/ai-usage (web.usage_panel), for every page's ◔.
1214
- + ` data-usage-panel="${ctx.fleetConfig?.web?.usage_panel === false ? "0" : "1"}">`;
1270
+ + ` data-usage-panel="${ctx.fleetConfig?.web?.usage_panel === false ? "0" : "1"}"`
1271
+ // #1589: the public link shows attachments as downloads only (no inline text or media): its scope is unchanged.
1272
+ + `${gatewayRequestContext(req) ? ' data-public-link="1"' : ""}>`;
1215
1273
  }
1216
1274
  /** The app shell page for one entry, under the panels' CSP; it may frame exactly <preview origin>/frame, and only
1217
1275
  * when this load chose one. */
@@ -1219,7 +1277,12 @@ export function serveAppShell(req, res, ctx, mode) {
1219
1277
  try {
1220
1278
  const html = readFileSync(join(__dirname, "ui", "app.html"), "utf-8");
1221
1279
  const p = shellPreview(req, ctx, mode);
1222
- sendPanelHtml(res, html.replace("<body>", shellBodyTag(req, ctx, mode)), 200, {}, p?.previewOrigin ? { frameSrc: `${p.previewOrigin}/frame` } : {});
1280
+ // #1589: media plays only from this listener's own file route (path-scoped, like frame-src), at the address this page
1281
+ // was loaded from (a Host the host guard accepted); never on the public link, nor where no chat is shown.
1282
+ const own = mode === "full" && !gatewayRequestContext(req)
1283
+ ? dashboardOriginFor(typeof req.headers.host === "string" ? req.headers.host : undefined, isSecureRequest(req)) : null;
1284
+ const mediaSrc = own ? `${own}/ui/file/` : "'none'";
1285
+ sendPanelHtml(res, html.replace("<body>", shellBodyTag(req, ctx, mode)), 200, {}, { ...(p?.previewOrigin ? { frameSrc: `${p.previewOrigin}/frame` } : {}), mediaSrc });
1223
1286
  }
1224
1287
  catch {
1225
1288
  json(res, 500, { error: "app.html not found" });