@songsid/agend 2.2.0-alpha.1 → 2.2.0-alpha.3
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.
- package/README.md +6 -4
- package/README.zh-TW.md +6 -4
- package/dist/agent-cli.js +6 -1
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +4 -1
- package/dist/agent-endpoint.js +82 -14
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-token-header.d.ts +13 -0
- package/dist/agent-token-header.js +16 -0
- package/dist/agent-token-header.js.map +1 -0
- package/dist/atomic-write.d.ts +21 -0
- package/dist/atomic-write.js +65 -0
- package/dist/atomic-write.js.map +1 -0
- package/dist/auth-api.js +2 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.js +4 -3
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/codex.d.ts +7 -0
- package/dist/backend/codex.js +7 -0
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.js +1 -1
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +7 -0
- package/dist/backend/kiro.js +82 -33
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.d.ts +7 -0
- package/dist/backend/muse.js +8 -1
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +12 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/binary-probe.d.ts +80 -0
- package/dist/binary-probe.js +182 -0
- package/dist/binary-probe.js.map +1 -0
- package/dist/cache-analysis.d.ts +92 -0
- package/dist/cache-analysis.js +147 -0
- package/dist/cache-analysis.js.map +1 -0
- package/dist/cache-ledger.d.ts +108 -0
- package/dist/cache-ledger.js +230 -0
- package/dist/cache-ledger.js.map +1 -0
- package/dist/cache-prices.d.ts +32 -0
- package/dist/cache-prices.js +73 -0
- package/dist/cache-prices.js.map +1 -0
- package/dist/cache-scan.d.ts +39 -0
- package/dist/cache-scan.js +115 -0
- package/dist/cache-scan.js.map +1 -0
- package/dist/cache-service.d.ts +131 -0
- package/dist/cache-service.js +452 -0
- package/dist/cache-service.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +5 -1
- package/dist/channel/adapters/discord.js +56 -11
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +38 -1
- package/dist/channel/adapters/telegram.js +82 -0
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/tool-router.d.ts +8 -1
- package/dist/channel/tool-router.js +4 -2
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +21 -0
- package/dist/cli-entry.d.ts +19 -0
- package/dist/cli-entry.js +36 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/cli.js +376 -54
- package/dist/cli.js.map +1 -1
- package/dist/connection-secrets.d.ts +5 -0
- package/dist/connection-secrets.js.map +1 -1
- package/dist/cpu-profile.js +50 -0
- package/dist/cpu-profile.js.map +1 -1
- package/dist/daemon.d.ts +18 -0
- package/dist/daemon.js +256 -63
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +1 -0
- package/dist/delivery-outbox.js +12 -0
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/discord-permissions.d.ts +33 -0
- package/dist/discord-permissions.js +42 -0
- package/dist/discord-permissions.js.map +1 -0
- package/dist/env-file.d.ts +11 -0
- package/dist/env-file.js +27 -0
- package/dist/env-file.js.map +1 -0
- package/dist/event-log.d.ts +4 -1
- package/dist/event-log.js +6 -3
- package/dist/event-log.js.map +1 -1
- package/dist/fleet-context.d.ts +5 -0
- package/dist/fleet-context.js.map +1 -1
- package/dist/fleet-control-audit.d.ts +5 -0
- package/dist/fleet-control-audit.js +7 -0
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-level-config.d.ts +8 -1
- package/dist/fleet-level-config.js +53 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +122 -7
- package/dist/fleet-manager.js +871 -152
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-stop-budget.d.ts +22 -0
- package/dist/fleet-stop-budget.js +95 -0
- package/dist/fleet-stop-budget.js.map +1 -0
- package/dist/full-restart.js +2 -3
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +3 -1
- package/dist/install-lock.d.ts +49 -0
- package/dist/install-lock.js +200 -0
- package/dist/install-lock.js.map +1 -0
- package/dist/instance-config-impact.js +3 -2
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/kiro-transcript-lane.d.ts +8 -4
- package/dist/kiro-transcript-lane.js +66 -44
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/locale.js +96 -0
- package/dist/locale.js.map +1 -1
- package/dist/next-steps.d.ts +5 -0
- package/dist/next-steps.js +26 -0
- package/dist/next-steps.js.map +1 -0
- package/dist/outbound-handlers.js +8 -0
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +4 -0
- package/dist/outbound-schemas.js +7 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/outbox-open-error.d.ts +7 -0
- package/dist/outbox-open-error.js +15 -0
- package/dist/outbox-open-error.js.map +1 -0
- package/dist/package-preimage.d.ts +26 -0
- package/dist/package-preimage.js +96 -0
- package/dist/package-preimage.js.map +1 -0
- package/dist/pane-context-cache.d.ts +25 -0
- package/dist/pane-context-cache.js +73 -0
- package/dist/pane-context-cache.js.map +1 -0
- package/dist/paths.d.ts +0 -7
- package/dist/paths.js +8 -2
- package/dist/paths.js.map +1 -1
- package/dist/provider-probe.d.ts +15 -0
- package/dist/provider-probe.js +20 -0
- package/dist/provider-probe.js.map +1 -1
- package/dist/public-link-progress.d.ts +73 -0
- package/dist/public-link-progress.js +190 -0
- package/dist/public-link-progress.js.map +1 -0
- package/dist/public-web-gateway.js +2 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +6 -1
- package/dist/public-web-link.js +87 -15
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +93 -20
- package/dist/quickstart-api.js +194 -62
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +15 -0
- package/dist/quickstart.js +110 -33
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +98 -0
- package/dist/reply-buttons-controller.js +174 -0
- package/dist/reply-buttons-controller.js.map +1 -0
- package/dist/reply-buttons.d.ts +113 -0
- package/dist/reply-buttons.js +208 -0
- package/dist/reply-buttons.js.map +1 -0
- package/dist/reply-dedup.js +3 -1
- package/dist/reply-dedup.js.map +1 -1
- package/dist/restart-guard.d.ts +53 -0
- package/dist/restart-guard.js +114 -0
- package/dist/restart-guard.js.map +1 -0
- package/dist/scheduler/db.js +6 -2
- package/dist/scheduler/db.js.map +1 -1
- package/dist/service-activation.d.ts +62 -7
- package/dist/service-activation.js +237 -55
- package/dist/service-activation.js.map +1 -1
- package/dist/service-installer.d.ts +56 -1
- package/dist/service-installer.js +152 -12
- package/dist/service-installer.js.map +1 -1
- package/dist/service-plan.d.ts +65 -0
- package/dist/service-plan.js +108 -0
- package/dist/service-plan.js.map +1 -0
- package/dist/settings-api.js +92 -10
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-authority.d.ts +11 -0
- package/dist/settings-authority.js +128 -0
- package/dist/settings-authority.js.map +1 -0
- package/dist/settings-change.d.ts +5 -0
- package/dist/settings-change.js +37 -8
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +3 -0
- package/dist/settings-confirmation.js +7 -1
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.js +19 -7
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +1 -1
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-redaction.d.ts +18 -0
- package/dist/settings-redaction.js +58 -0
- package/dist/settings-redaction.js.map +1 -0
- package/dist/setup-form.d.ts +9 -1
- package/dist/setup-form.js +25 -1
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-host.js +15 -6
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-wizard.js +27 -19
- package/dist/setup-wizard.js.map +1 -1
- package/dist/sqlite-open-errors.d.ts +12 -0
- package/dist/sqlite-open-errors.js +13 -0
- package/dist/sqlite-open-errors.js.map +1 -0
- package/dist/systemd-runtime.d.ts +15 -0
- package/dist/systemd-runtime.js +41 -0
- package/dist/systemd-runtime.js.map +1 -0
- package/dist/tmux-control.d.ts +44 -0
- package/dist/tmux-control.js +170 -21
- package/dist/tmux-control.js.map +1 -1
- package/dist/token-env-name.d.ts +37 -0
- package/dist/token-env-name.js +93 -0
- package/dist/token-env-name.js.map +1 -0
- package/dist/tool-permissions.js +5 -3
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +7 -16
- package/dist/topic-commands.js +56 -85
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.js +3 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +68 -0
- package/dist/transcript-sources.js +336 -29
- package/dist/transcript-sources.js.map +1 -1
- package/dist/transcript-turns.d.ts +39 -0
- package/dist/transcript-turns.js +58 -0
- package/dist/transcript-turns.js.map +1 -0
- package/dist/tunnel/cloudflared-install.d.ts +18 -0
- package/dist/tunnel/cloudflared-install.js +15 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/turn-reply-guard.d.ts +3 -0
- package/dist/turn-reply-guard.js.map +1 -1
- package/dist/ui/chat-commands.js +43 -0
- package/dist/ui/chat-render.js +34 -8
- package/dist/ui/chat-store.js +51 -2
- package/dist/ui/chat-strings.js +30 -2
- package/dist/ui/chat-thread.js +141 -47
- package/dist/ui/first-run.js +64 -0
- package/dist/ui/fleet-cache.js +168 -0
- package/dist/ui/html-attachment.js +26 -0
- package/dist/ui/panel-chat.js +117 -23
- package/dist/ui/panel-fleet.js +31 -17
- package/dist/ui/panel-settings.js +29 -15
- package/dist/ui/preview-panel.js +237 -0
- package/dist/ui/preview.js +7 -3
- package/dist/ui/settings-apply.js +3 -1
- package/dist/ui/settings-dialogs.js +95 -25
- package/dist/ui/settings-discord.js +130 -0
- package/dist/ui/settings-model.js +21 -0
- package/dist/ui/settings-strings.js +50 -8
- package/dist/ui/settings-token.js +54 -0
- package/dist/ui/settings-wizard.js +63 -29
- package/dist/ui/shared/app-route.js +1 -1
- package/dist/ui/shared/app-shell.js +25 -37
- package/dist/ui/shared/app-store.js +5 -3
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +181 -5
- package/dist/ui/shared/app.js +2 -1
- package/dist/ui/shared/instance-nav.js +310 -0
- package/dist/ui/shared/panel-view.js +12 -190
- package/dist/ui/shared/signin.js +13 -1
- package/dist/ui/shared/ui-icons.js +2 -0
- package/dist/ui/shared/view-roster-store.js +5 -0
- package/dist/ui/shared/view-strings.js +12 -0
- package/dist/ui/signin.html +2 -1
- package/dist/update-dispatch.d.ts +28 -0
- package/dist/update-dispatch.js +73 -0
- package/dist/update-dispatch.js.map +1 -0
- package/dist/update-install.d.ts +78 -8
- package/dist/update-install.js +158 -30
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +22 -0
- package/dist/update-launch.js +106 -0
- package/dist/update-launch.js.map +1 -0
- package/dist/update-marker.js +3 -8
- package/dist/update-marker.js.map +1 -1
- package/dist/usage/format-rich.js +7 -1
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +1 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/providers.d.ts +4 -0
- package/dist/usage/providers.js +2 -1
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/usage-api.js +48 -2
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/view-api.d.ts +40 -0
- package/dist/view-api.js +28 -10
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +22 -0
- package/dist/web-api.js +115 -16
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.d.ts +8 -0
- package/dist/web-auth.js +34 -8
- package/dist/web-auth.js.map +1 -1
- package/dist/web-chat-history.d.ts +21 -0
- package/dist/web-chat-history.js +44 -0
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +77 -0
- package/dist/web-commands.js +81 -0
- package/dist/web-commands.js.map +1 -0
- package/dist/web-host-guard.d.ts +18 -2
- package/dist/web-host-guard.js +30 -5
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-session.d.ts +7 -1
- package/dist/web-session.js +23 -2
- package/dist/web-session.js.map +1 -1
- package/dist/web-shell-routes.d.ts +1 -1
- package/dist/web-shell-routes.js +1 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/launcher/agend +110 -0
- package/launcher/agend-agent +110 -0
- package/launcher/agend-agent.cjs +4 -0
- package/launcher/agend.cjs +4 -0
- package/launcher/install-admission.cjs +105 -0
- package/launcher/launch.cjs +64 -0
- package/launcher/postinstall.cjs +118 -0
- package/launcher/run-in-process.cjs +13 -0
- package/launcher/runtime-platform.cjs +86 -0
- package/launcher/runtime-select.cjs +217 -0
- package/package.json +12 -4
- package/scripts/preinstall-guard.cjs +40 -21
- package/templates/launchd.plist.ejs +2 -2
- package/templates/systemd.service.ejs +4 -4
package/dist/web-auth.js
CHANGED
|
@@ -202,8 +202,21 @@ export function buildClearedSessionCookies() {
|
|
|
202
202
|
}
|
|
203
203
|
/** The presented session id, or undefined. A `__Host-` cookie wins: it cannot have been planted by a sibling site. */
|
|
204
204
|
export function readSessionCookie(req) {
|
|
205
|
+
return readSessionCookies(req)[0];
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Every session id this request presents, in the order they are tried (#1490): the `__Host-` cookie first, then, on
|
|
209
|
+
* this computer's own listener only, the plain one. A stale `__Host-` cookie (a session that ended) used to hide a
|
|
210
|
+
* valid plain one, so a signed-in browser read as signed out. The public link only ever accepts its `__Host-` cookie.
|
|
211
|
+
* Trying the plain cookie after a `__Host-` one that does not authenticate admits nothing that presenting the plain
|
|
212
|
+
* cookie alone would not.
|
|
213
|
+
*/
|
|
214
|
+
export function readSessionCookies(req) {
|
|
205
215
|
const jar = parseCookieHeader(headerValue(req, "cookie") ?? undefined);
|
|
206
|
-
|
|
216
|
+
const secure = jar.get(WEB_SESSION_COOKIE_SECURE), plain = jar.get(WEB_SESSION_COOKIE);
|
|
217
|
+
if (gatewayRequestContext(req))
|
|
218
|
+
return secure ? [secure] : [];
|
|
219
|
+
return [secure, plain].filter((c, i, all) => !!c && all.indexOf(c) === i);
|
|
207
220
|
}
|
|
208
221
|
export function hasValidHeaderToken(req, token) {
|
|
209
222
|
if (gatewayRequestContext(req))
|
|
@@ -249,8 +262,15 @@ export function authorizeSession(req, token, sessions, opts = {}) {
|
|
|
249
262
|
return { kind: "reject", status: 401, message: WEB_TOKEN_INVALID_MESSAGE };
|
|
250
263
|
if (!isSameOriginRequest(req))
|
|
251
264
|
return { kind: "reject", status: 403, message: WEB_CROSS_SITE_MESSAGE };
|
|
252
|
-
const
|
|
253
|
-
|
|
265
|
+
const presented = readSessionCookies(req);
|
|
266
|
+
let cookie = presented[0], session = null;
|
|
267
|
+
for (const candidate of sessions ? presented : []) {
|
|
268
|
+
session = sessions.authenticate(candidate, tokenEpoch(token), { touch: opts.touch !== false, surface: gatewayRequestContext(req)?.surface, exposureId: gatewayRequestContext(req)?.exposureId });
|
|
269
|
+
if (session) {
|
|
270
|
+
cookie = candidate;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
254
274
|
if (!session || !cookie) {
|
|
255
275
|
return { kind: "reject", status: 401, message: cookie ? WEB_SESSION_EXPIRED_MESSAGE : WEB_SESSION_REQUIRED_MESSAGE };
|
|
256
276
|
}
|
|
@@ -274,11 +294,13 @@ function authorize(req, url, token, sessions, opts) {
|
|
|
274
294
|
// carrying both is the CLI's, not a forged form's.
|
|
275
295
|
if (hasValidHeaderToken(req, token))
|
|
276
296
|
return { kind: "allow", via: "header-token" };
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
297
|
+
const presented = readSessionCookies(req);
|
|
298
|
+
const cookie = presented[0];
|
|
299
|
+
for (const candidate of sessions ? presented : []) {
|
|
300
|
+
const session = sessions.authenticate(candidate, tokenEpoch(token), { touch: opts.touch, surface: gatewayRequestContext(req)?.surface, exposureId: gatewayRequestContext(req)?.exposureId });
|
|
280
301
|
if (session) {
|
|
281
|
-
|
|
302
|
+
// The write checks bind to the session that authenticated (its CSRF value), not to the first cookie presented.
|
|
303
|
+
if (!isSafeMethod(method) && !passesCookieWriteChecks(req, candidate)) {
|
|
282
304
|
return { kind: "reject", status: 403, message: WEB_CSRF_MESSAGE, reason: "csrf" };
|
|
283
305
|
}
|
|
284
306
|
return { kind: "allow", via: "session", session };
|
|
@@ -324,10 +346,14 @@ function authorize(req, url, token, sessions, opts) {
|
|
|
324
346
|
*/
|
|
325
347
|
const PASSIVE_GET_PATHS = new Set(["/ui/poll", "/ui/events", "/api/profiles", "/api/ai-usage"]);
|
|
326
348
|
const PASSIVE_GET_PANE = /^\/api\/pane\/[^/]+$/;
|
|
349
|
+
const PASSIVE_APPLY_STATUS = /^\/api\/settings\/(?:apply\/[A-Za-z0-9-]+|(?:provider-secrets|secrets)\/[^/]+\/apply\/[A-Za-z0-9_-]+|connections\/[^/]+\/(?:secret|binding)\/apply\/[A-Za-z0-9_-]+)$/;
|
|
327
350
|
export function isPassiveWebRead(method, path) {
|
|
328
351
|
if ((method ?? "GET") !== "GET")
|
|
329
352
|
return false;
|
|
330
|
-
return PASSIVE_GET_PATHS.has(path) || PASSIVE_GET_PANE.test(path) || /^\/api\/settings\/pending(?:\/[0-9a-f]{32})?$/.test(path)
|
|
353
|
+
return PASSIVE_GET_PATHS.has(path) || PASSIVE_GET_PANE.test(path) || /^\/api\/settings\/pending(?:\/[0-9a-f]{32})?$/.test(path)
|
|
354
|
+
// #1490: a page polls an Apply job (and a secret or binding apply) for up to ten minutes while the person waits;
|
|
355
|
+
// that polling is not their activity and must not slide the session's idle expiry (#1373).
|
|
356
|
+
|| PASSIVE_APPLY_STATUS.test(path);
|
|
331
357
|
}
|
|
332
358
|
/**
|
|
333
359
|
* The single authorization decision for every gated web route.
|
package/dist/web-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-auth.js","sourceRoot":"","sources":["../src/web-auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-auth.js","sourceRoot":"","sources":["../src/web-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,19 @@ export type WebDeliveryState = "queued" | "processing" | "delivered" | "failed"
|
|
|
15
15
|
/** The state after `next` arrives at a message in `prev`; `prev` itself when `next` would move it back. */
|
|
16
16
|
export declare function nextDeliveryState(prev: WebDeliveryState | undefined, next: WebDeliveryState): WebDeliveryState | undefined;
|
|
17
17
|
export type WebChatRole = "agent" | "user" | "status";
|
|
18
|
+
/** #1266: an agent reply's buttons as the page shows them (labels only — never the values). */
|
|
19
|
+
export interface WebChatButtons {
|
|
20
|
+
id: string;
|
|
21
|
+
labels: string[];
|
|
22
|
+
state: "open" | "chosen" | "expired";
|
|
23
|
+
chosen?: number;
|
|
24
|
+
by?: string;
|
|
25
|
+
}
|
|
18
26
|
export interface WebChatMessage {
|
|
19
27
|
/** Files shown with the message (absent when none). */
|
|
20
28
|
attachments?: WebChatAttachment[];
|
|
29
|
+
/** #1266: an agent reply's buttons (agent messages only). */
|
|
30
|
+
buttons?: WebChatButtons;
|
|
21
31
|
/** The fleet process generation the id belongs to. */
|
|
22
32
|
boot: string;
|
|
23
33
|
/** Where a web user's message has got (absent: nothing reported yet, or not the web user's). */
|
|
@@ -74,7 +84,18 @@ export declare class WebChatHistory {
|
|
|
74
84
|
attachments?: WebChatAttachment[];
|
|
75
85
|
messageId?: string;
|
|
76
86
|
role?: string;
|
|
87
|
+
buttons?: unknown;
|
|
77
88
|
}): WebChatMessage;
|
|
89
|
+
/**
|
|
90
|
+
* #1266: a reply's buttons ended (or changed): the recorded message shows it too, so a page that loads the history
|
|
91
|
+
* later, or polls it (the public link), sees the same state. Returns the message it changed, if it is still kept.
|
|
92
|
+
*/
|
|
93
|
+
updateButtons(instance: string, raw: unknown): WebChatMessage | null;
|
|
94
|
+
/** #1266: every kept reply whose buttons have ended — what a polling page applies (a stream page hears it live). */
|
|
95
|
+
buttonStates(): Array<{
|
|
96
|
+
instance: string;
|
|
97
|
+
buttons: WebChatButtons;
|
|
98
|
+
}>;
|
|
78
99
|
/** The most recent `limit` messages of one instance, oldest first. */
|
|
79
100
|
list(instance: string, limit?: number): WebChatMessage[];
|
|
80
101
|
/**
|
package/dist/web-chat-history.js
CHANGED
|
@@ -30,6 +30,19 @@ export function nextDeliveryState(prev, next) {
|
|
|
30
30
|
return DELIVERY_RANK[next] > DELIVERY_RANK[prev] ? next : prev;
|
|
31
31
|
}
|
|
32
32
|
const ROLES = new Set(["agent", "user", "status"]);
|
|
33
|
+
function webChatButtons(raw) {
|
|
34
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
35
|
+
return undefined;
|
|
36
|
+
const b = raw;
|
|
37
|
+
if (typeof b.id !== "string" || !/^[0-9a-f]{32}$/.test(b.id) || !Array.isArray(b.labels))
|
|
38
|
+
return undefined;
|
|
39
|
+
const state = b.state === "chosen" || b.state === "expired" ? b.state : "open";
|
|
40
|
+
return {
|
|
41
|
+
id: b.id, labels: b.labels.slice(0, 10).map(l => String(l).slice(0, 80)), state,
|
|
42
|
+
...(state === "chosen" && typeof b.chosen === "number" ? { chosen: b.chosen } : {}),
|
|
43
|
+
...(state === "chosen" && typeof b.by === "string" ? { by: b.by.slice(0, 64) } : {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
33
46
|
export const WEB_CHAT_TEXT_MAX = 16_000;
|
|
34
47
|
/**
|
|
35
48
|
* The `message_id` a message from the web chat is delivered under. Unique (two sends in one millisecond used
|
|
@@ -72,6 +85,9 @@ export class WebChatHistory {
|
|
|
72
85
|
...(msg.attachments && msg.attachments.length ? { attachments: msg.attachments.slice(0, 20).map(a => ({ id: a.id, kind: a.kind, name: a.name, size: a.size, mime: a.mime })) } : {}),
|
|
73
86
|
...(typeof msg.messageId === "string" && msg.messageId ? { messageId: msg.messageId.slice(0, 64) } : {}),
|
|
74
87
|
};
|
|
88
|
+
const buttons = msg.role === "agent" ? webChatButtons(msg.buttons) : undefined;
|
|
89
|
+
if (buttons)
|
|
90
|
+
entry.buttons = buttons;
|
|
75
91
|
let slot = this.byInstance.get(entry.instance);
|
|
76
92
|
if (!slot) {
|
|
77
93
|
slot = { messages: [], chars: 0 };
|
|
@@ -84,6 +100,34 @@ export class WebChatHistory {
|
|
|
84
100
|
}
|
|
85
101
|
return entry;
|
|
86
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* #1266: a reply's buttons ended (or changed): the recorded message shows it too, so a page that loads the history
|
|
105
|
+
* later, or polls it (the public link), sees the same state. Returns the message it changed, if it is still kept.
|
|
106
|
+
*/
|
|
107
|
+
updateButtons(instance, raw) {
|
|
108
|
+
const next = webChatButtons(raw);
|
|
109
|
+
const slot = this.byInstance.get(instance);
|
|
110
|
+
if (!next || !slot)
|
|
111
|
+
return null;
|
|
112
|
+
for (let i = slot.messages.length - 1; i >= 0; i--) {
|
|
113
|
+
const m = slot.messages[i];
|
|
114
|
+
if (m.buttons?.id === next.id) {
|
|
115
|
+
m.buttons = next;
|
|
116
|
+
return m;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/** #1266: every kept reply whose buttons have ended — what a polling page applies (a stream page hears it live). */
|
|
122
|
+
buttonStates() {
|
|
123
|
+
const out = [];
|
|
124
|
+
for (const [instance, slot] of this.byInstance) {
|
|
125
|
+
for (const m of slot.messages)
|
|
126
|
+
if (m.buttons && m.buttons.state !== "open")
|
|
127
|
+
out.push({ instance, buttons: m.buttons });
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
87
131
|
/** The most recent `limit` messages of one instance, oldest first. */
|
|
88
132
|
list(instance, limit = this.perInstance) {
|
|
89
133
|
const slot = this.byInstance.get(instance);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-chat-history.js","sourceRoot":"","sources":["../src/web-chat-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY1C;;;;GAIG;AACH,MAAM,aAAa,GAAqC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAE5H,2GAA2G;AAC3G,MAAM,UAAU,iBAAiB,CAAC,IAAkC,EAAE,IAAsB;IAC1F,mFAAmF;IACnF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAGD,MAAM,KAAK,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"web-chat-history.js","sourceRoot":"","sources":["../src/web-chat-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1269 (4): an instance's chat commands, run from the web chat. Only what the instance's own Discord/Telegram topic
|
|
3
|
+
* already accepts, through the same handlers (topic-commands.ts / FleetManager) and the same table (command-table.ts,
|
|
4
|
+
* #754/#1148): nothing here is a capability the platforms do not have.
|
|
5
|
+
*
|
|
6
|
+
* - Who: a signed-in web session holds the full-fleet credential, issued only to a fleet admin (/dashboard is
|
|
7
|
+
* fleet-admin only), so the table's admin levels are met — exactly as a web click on a mirrored prompt is answered
|
|
8
|
+
* "as a fleet admin on the platform". The table can still refuse a command in a kind of channel; that stands.
|
|
9
|
+
* - What: instance commands only. Fleet-level ones (/status, /restart, /update, /login, …) stay in General
|
|
10
|
+
* (Discord-first), and /raw is not a command here (it bypasses the [user:] envelope).
|
|
11
|
+
* - The public link (a gateway request) is the outward-facing surface: /save is refused there — it makes the CLI
|
|
12
|
+
* write a file under a name the caller picks, outside the agent's own judgement.
|
|
13
|
+
* - /clear asks first, as on the platforms: the first call answers a confirmation token; only the second, with that
|
|
14
|
+
* token, clears — and only if the instance is still the one that was asked about.
|
|
15
|
+
*/
|
|
16
|
+
import { type CommandScope } from "./command-table.js";
|
|
17
|
+
export declare const WEB_COMMANDS: readonly ["ctx", "compact", "clear", "model", "effort", "cancel", "btw", "steer", "pause", "wake", "save"];
|
|
18
|
+
export type WebCommand = typeof WEB_COMMANDS[number];
|
|
19
|
+
/** Refused on the public link (see the header). */
|
|
20
|
+
export declare const PUBLIC_LINK_REFUSED: ReadonlySet<WebCommand>;
|
|
21
|
+
export declare const MAX_COMMAND_ARGS = 4000;
|
|
22
|
+
export interface WebChoices {
|
|
23
|
+
current: string | null;
|
|
24
|
+
options: Array<{
|
|
25
|
+
id: string;
|
|
26
|
+
label: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export interface WebCommandDeps {
|
|
30
|
+
/** The instance is one the web chat may command (a fleet instance or a ClassicBot room), and in which scope. */
|
|
31
|
+
scope(instance: string): CommandScope | null;
|
|
32
|
+
ctx(instance: string): Promise<string>;
|
|
33
|
+
compact(instance: string, instructions: string | undefined): Promise<string>;
|
|
34
|
+
applyModel(instance: string, name: string): Promise<string>;
|
|
35
|
+
/** The model menu from the cached catalog only (never a live probe on this path); null: no list to offer. */
|
|
36
|
+
modelChoices(instance: string): WebChoices | null;
|
|
37
|
+
applyEffort(instance: string, level: string): Promise<string>;
|
|
38
|
+
effortChoices(instance: string): WebChoices | null;
|
|
39
|
+
cancel(instance: string): boolean;
|
|
40
|
+
steer(instance: string, text: string): string;
|
|
41
|
+
btw(instance: string, text: string): string;
|
|
42
|
+
pauseWake(instance: string, action: "pause" | "wake"): Promise<string>;
|
|
43
|
+
save(instance: string, filename: string): Promise<string>;
|
|
44
|
+
/** Ask: a confirmation token (or why not). Confirm: clear, if the token is live and the instance unchanged. */
|
|
45
|
+
clearAsk(instance: string): {
|
|
46
|
+
token: string;
|
|
47
|
+
message: string;
|
|
48
|
+
} | {
|
|
49
|
+
refused: string;
|
|
50
|
+
};
|
|
51
|
+
clearConfirm(instance: string, token: string): Promise<{
|
|
52
|
+
status: number;
|
|
53
|
+
text: string;
|
|
54
|
+
}>;
|
|
55
|
+
t(key: string, ...args: string[]): string;
|
|
56
|
+
}
|
|
57
|
+
export interface WebCommandInput {
|
|
58
|
+
instance: string;
|
|
59
|
+
command: string;
|
|
60
|
+
args?: string;
|
|
61
|
+
confirm?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface WebCommandResult {
|
|
64
|
+
status: number;
|
|
65
|
+
body: {
|
|
66
|
+
text?: string;
|
|
67
|
+
error?: string;
|
|
68
|
+
choices?: WebChoices;
|
|
69
|
+
confirm?: {
|
|
70
|
+
token: string;
|
|
71
|
+
message: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export declare function runWebCommand(deps: WebCommandDeps, input: WebCommandInput, opts: {
|
|
76
|
+
publicLink: boolean;
|
|
77
|
+
}): Promise<WebCommandResult>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1269 (4): an instance's chat commands, run from the web chat. Only what the instance's own Discord/Telegram topic
|
|
3
|
+
* already accepts, through the same handlers (topic-commands.ts / FleetManager) and the same table (command-table.ts,
|
|
4
|
+
* #754/#1148): nothing here is a capability the platforms do not have.
|
|
5
|
+
*
|
|
6
|
+
* - Who: a signed-in web session holds the full-fleet credential, issued only to a fleet admin (/dashboard is
|
|
7
|
+
* fleet-admin only), so the table's admin levels are met — exactly as a web click on a mirrored prompt is answered
|
|
8
|
+
* "as a fleet admin on the platform". The table can still refuse a command in a kind of channel; that stands.
|
|
9
|
+
* - What: instance commands only. Fleet-level ones (/status, /restart, /update, /login, …) stay in General
|
|
10
|
+
* (Discord-first), and /raw is not a command here (it bypasses the [user:] envelope).
|
|
11
|
+
* - The public link (a gateway request) is the outward-facing surface: /save is refused there — it makes the CLI
|
|
12
|
+
* write a file under a name the caller picks, outside the agent's own judgement.
|
|
13
|
+
* - /clear asks first, as on the platforms: the first call answers a confirmation token; only the second, with that
|
|
14
|
+
* token, clears — and only if the instance is still the one that was asked about.
|
|
15
|
+
*/
|
|
16
|
+
import { commandSpec, decideCommand } from "./command-table.js";
|
|
17
|
+
import { SAVE_FILENAME_RE } from "./topic-commands.js";
|
|
18
|
+
export const WEB_COMMANDS = ["ctx", "compact", "clear", "model", "effort", "cancel", "btw", "steer", "pause", "wake", "save"];
|
|
19
|
+
/** Refused on the public link (see the header). */
|
|
20
|
+
export const PUBLIC_LINK_REFUSED = new Set(["save"]);
|
|
21
|
+
export const MAX_COMMAND_ARGS = 4000;
|
|
22
|
+
const isWebCommand = (c) => WEB_COMMANDS.includes(c);
|
|
23
|
+
export async function runWebCommand(deps, input, opts) {
|
|
24
|
+
const { instance } = input;
|
|
25
|
+
const command = input.command.replace(/^\//, "");
|
|
26
|
+
if (!isWebCommand(command))
|
|
27
|
+
return { status: 400, body: { error: deps.t("web.command_unknown", `/${command}`) } };
|
|
28
|
+
if (opts.publicLink && PUBLIC_LINK_REFUSED.has(command))
|
|
29
|
+
return { status: 403, body: { error: deps.t("web.command_public_refused", `/${command}`) } };
|
|
30
|
+
const scope = deps.scope(instance);
|
|
31
|
+
if (!scope)
|
|
32
|
+
return { status: 404, body: { error: deps.t("instance.not_found", instance) } };
|
|
33
|
+
// The same table the platforms use; the session is fleet-admin level, so only a scope refusal can stand.
|
|
34
|
+
const spec = commandSpec(command);
|
|
35
|
+
if (!spec)
|
|
36
|
+
return { status: 400, body: { error: deps.t("web.command_unknown", `/${command}`) } };
|
|
37
|
+
const decision = decideCommand(spec, scope, { fleetAdmin: () => "ok", channelAdmin: () => true, classicAdmin: () => true });
|
|
38
|
+
if (!decision.allow)
|
|
39
|
+
return { status: 403, body: { error: deps.t(...decision.reply) } };
|
|
40
|
+
const args = (input.args ?? "").trim();
|
|
41
|
+
const ok = (text) => ({ status: 200, body: { text } });
|
|
42
|
+
switch (command) {
|
|
43
|
+
case "ctx": return ok(await deps.ctx(instance));
|
|
44
|
+
case "compact": return ok(await deps.compact(instance, args || undefined));
|
|
45
|
+
case "model": {
|
|
46
|
+
if (args)
|
|
47
|
+
return ok(await deps.applyModel(instance, args));
|
|
48
|
+
const choices = deps.modelChoices(instance);
|
|
49
|
+
return choices ? { status: 200, body: { choices } } : ok(deps.t("model.list_unavailable", instance));
|
|
50
|
+
}
|
|
51
|
+
case "effort": {
|
|
52
|
+
if (args)
|
|
53
|
+
return ok(await deps.applyEffort(instance, args));
|
|
54
|
+
const choices = deps.effortChoices(instance);
|
|
55
|
+
return choices ? { status: 200, body: { choices } } : { status: 400, body: { error: deps.t("web.command_no_choices", "/effort") } };
|
|
56
|
+
}
|
|
57
|
+
case "cancel": return ok(deps.cancel(instance) ? deps.t("cancel.sent", instance) : deps.t("cancel.not_running", instance));
|
|
58
|
+
case "steer":
|
|
59
|
+
case "btw":
|
|
60
|
+
if (!args)
|
|
61
|
+
return { status: 400, body: { error: deps.t(`${command}.usage`) } };
|
|
62
|
+
return ok(command === "steer" ? deps.steer(instance, args) : deps.btw(instance, args));
|
|
63
|
+
case "pause":
|
|
64
|
+
case "wake": return ok(await deps.pauseWake(instance, command));
|
|
65
|
+
case "save":
|
|
66
|
+
if (!args)
|
|
67
|
+
return { status: 400, body: { error: deps.t("save.usage") } };
|
|
68
|
+
if (!SAVE_FILENAME_RE.test(args))
|
|
69
|
+
return { status: 400, body: { error: deps.t("filename.invalid") } };
|
|
70
|
+
return ok(await deps.save(instance, args));
|
|
71
|
+
case "clear": {
|
|
72
|
+
if (input.confirm) {
|
|
73
|
+
const r = await deps.clearConfirm(instance, input.confirm);
|
|
74
|
+
return { status: r.status, body: r.status === 200 ? { text: r.text } : { error: r.text } };
|
|
75
|
+
}
|
|
76
|
+
const asked = deps.clearAsk(instance);
|
|
77
|
+
return "token" in asked ? { status: 200, body: { confirm: asked } } : { status: 409, body: { error: asked.refused } };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=web-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-commands.js","sourceRoot":"","sources":["../src/web-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/web-host-guard.d.ts
CHANGED
|
@@ -33,14 +33,15 @@ export declare function hostnameOf(value: string): string | null;
|
|
|
33
33
|
* script runs because the panel is served with a per-response nonce for it
|
|
34
34
|
* (sendPanelHtml), and no panel has an inline `on*=` handler. Injected markup can
|
|
35
35
|
* therefore not run script. `connect-src`, `img-src` and `form-action` are this
|
|
36
|
-
* origin, so nothing read can be posted elsewhere, and `base-uri`, `object-src` and
|
|
36
|
+
* origin (images on a panel: plus Discord's emoji CDN path, below), so nothing read can be posted elsewhere, and `base-uri`, `object-src` and
|
|
37
37
|
* `frame-ancestors` are closed. Styles are the same (#1300): `style-src 'self'`, and a
|
|
38
38
|
* panel's own `<style>` block carries the response's nonce. No panel has a `style="…"`
|
|
39
39
|
* attribute — what a script colours or sizes at run time goes through the style object
|
|
40
40
|
* (CSSOM), which the policy does not govern — so injected markup cannot add inline styles of its
|
|
41
41
|
* own (it can still carry the page's existing class names).
|
|
42
42
|
*
|
|
43
|
-
* Fonts, scripts and styles are all served from here; nothing loads from a CDN.
|
|
43
|
+
* Fonts, scripts and styles are all served from here; nothing loads from a CDN. Panel pages add one image source,
|
|
44
|
+
* Discord's custom-emoji CDN (DISCORD_EMOJI_IMG_SRC) — the status-emoji editor shows server emoji from there.
|
|
44
45
|
*/
|
|
45
46
|
export declare const WEB_CONTENT_SECURITY_POLICY: string;
|
|
46
47
|
export interface HostGuardConfig {
|
|
@@ -62,8 +63,17 @@ export declare function isHostAllowed(hostHeader: string | string[] | undefined,
|
|
|
62
63
|
* Node merges `writeHead` headers over `setHeader` ones.
|
|
63
64
|
*/
|
|
64
65
|
export declare function applyWebSecurityHeaders(res: ServerResponse): void;
|
|
66
|
+
/**
|
|
67
|
+
* The one remote image source a panel may load: Discord's custom-emoji CDN, which the status-emoji editor shows
|
|
68
|
+
* (status-emojis.ts emojiImageUrl). Path-scoped — a source ending in "/" admits only what is under it, so the rest of
|
|
69
|
+
* cdn.discordapp.com (attachments, avatars) stays refused, and a redirect elsewhere is refused too. It is an image
|
|
70
|
+
* source only: script still cannot connect or post anywhere but this origin. What it gives up is that Discord sees the
|
|
71
|
+
* viewer's address when the editor is open (the request carries no referrer — EmojiImg sets no-referrer).
|
|
72
|
+
*/
|
|
73
|
+
export declare const DISCORD_EMOJI_IMG_SRC = "https://cdn.discordapp.com/emojis/";
|
|
65
74
|
/**
|
|
66
75
|
* The panel policy for one response: WEB_CONTENT_SECURITY_POLICY with this response's nonce for scripts and styles,
|
|
76
|
+
* Discord's emoji CDN for images (DISCORD_EMOJI_IMG_SRC),
|
|
67
77
|
* and — for /ui only, when a preview origin was chosen for this load (#1306) — `frame-src <preview origin>/frame`:
|
|
68
78
|
* path-scoped, so nothing else of that origin can be framed or navigated to. Without it, frames fall back to
|
|
69
79
|
* default-src 'self'.
|
|
@@ -71,6 +81,12 @@ export declare function applyWebSecurityHeaders(res: ServerResponse): void;
|
|
|
71
81
|
export declare function panelContentSecurityPolicy(nonce: string, opts?: {
|
|
72
82
|
frameSrc?: string;
|
|
73
83
|
}): string;
|
|
84
|
+
/**
|
|
85
|
+
* Replace the directive that is exactly `from` in `policy` with `to`. A policy without it throws: a string replace that
|
|
86
|
+
* found nothing would quietly ship panels without their nonce (no script runs) or without the emoji source (#1520
|
|
87
|
+
* review) after an edit to the base policy. Whole directives only, so "script-src 'self'" never matches a longer one.
|
|
88
|
+
*/
|
|
89
|
+
export declare function rewriteDirective(policy: string, from: string, to: string): string;
|
|
74
90
|
/**
|
|
75
91
|
* Send a panel page (/ui, /view, /settings, the sign-in page). Its own inline `<script>` and `<style>` blocks get a
|
|
76
92
|
* fresh nonce, and the response's CSP names that nonce and nothing else inline (#1268, #1300): a script or a style
|
package/dist/web-host-guard.js
CHANGED
|
@@ -38,14 +38,15 @@ export function hostnameOf(value) {
|
|
|
38
38
|
* script runs because the panel is served with a per-response nonce for it
|
|
39
39
|
* (sendPanelHtml), and no panel has an inline `on*=` handler. Injected markup can
|
|
40
40
|
* therefore not run script. `connect-src`, `img-src` and `form-action` are this
|
|
41
|
-
* origin, so nothing read can be posted elsewhere, and `base-uri`, `object-src` and
|
|
41
|
+
* origin (images on a panel: plus Discord's emoji CDN path, below), so nothing read can be posted elsewhere, and `base-uri`, `object-src` and
|
|
42
42
|
* `frame-ancestors` are closed. Styles are the same (#1300): `style-src 'self'`, and a
|
|
43
43
|
* panel's own `<style>` block carries the response's nonce. No panel has a `style="…"`
|
|
44
44
|
* attribute — what a script colours or sizes at run time goes through the style object
|
|
45
45
|
* (CSSOM), which the policy does not govern — so injected markup cannot add inline styles of its
|
|
46
46
|
* own (it can still carry the page's existing class names).
|
|
47
47
|
*
|
|
48
|
-
* Fonts, scripts and styles are all served from here; nothing loads from a CDN.
|
|
48
|
+
* Fonts, scripts and styles are all served from here; nothing loads from a CDN. Panel pages add one image source,
|
|
49
|
+
* Discord's custom-emoji CDN (DISCORD_EMOJI_IMG_SRC) — the status-emoji editor shows server emoji from there.
|
|
49
50
|
*/
|
|
50
51
|
export const WEB_CONTENT_SECURITY_POLICY = [
|
|
51
52
|
"default-src 'self'",
|
|
@@ -101,18 +102,42 @@ export function applyWebSecurityHeaders(res) {
|
|
|
101
102
|
// corporate proxy) must not keep or replay any of it.
|
|
102
103
|
res.setHeader("Cache-Control", "no-store");
|
|
103
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* The one remote image source a panel may load: Discord's custom-emoji CDN, which the status-emoji editor shows
|
|
107
|
+
* (status-emojis.ts emojiImageUrl). Path-scoped — a source ending in "/" admits only what is under it, so the rest of
|
|
108
|
+
* cdn.discordapp.com (attachments, avatars) stays refused, and a redirect elsewhere is refused too. It is an image
|
|
109
|
+
* source only: script still cannot connect or post anywhere but this origin. What it gives up is that Discord sees the
|
|
110
|
+
* viewer's address when the editor is open (the request carries no referrer — EmojiImg sets no-referrer).
|
|
111
|
+
*/
|
|
112
|
+
export const DISCORD_EMOJI_IMG_SRC = "https://cdn.discordapp.com/emojis/";
|
|
104
113
|
/**
|
|
105
114
|
* The panel policy for one response: WEB_CONTENT_SECURITY_POLICY with this response's nonce for scripts and styles,
|
|
115
|
+
* Discord's emoji CDN for images (DISCORD_EMOJI_IMG_SRC),
|
|
106
116
|
* and — for /ui only, when a preview origin was chosen for this load (#1306) — `frame-src <preview origin>/frame`:
|
|
107
117
|
* path-scoped, so nothing else of that origin can be framed or navigated to. Without it, frames fall back to
|
|
108
118
|
* default-src 'self'.
|
|
109
119
|
*/
|
|
110
120
|
export function panelContentSecurityPolicy(nonce, opts = {}) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
121
|
+
let policy = rewriteDirective(WEB_CONTENT_SECURITY_POLICY, "script-src 'self'", `script-src 'self' 'nonce-${nonce}'`);
|
|
122
|
+
policy = rewriteDirective(policy, "style-src 'self'", `style-src 'self' 'nonce-${nonce}'`);
|
|
123
|
+
policy = rewriteDirective(policy, "img-src 'self' data: blob:", `img-src 'self' data: blob: ${DISCORD_EMOJI_IMG_SRC}`);
|
|
114
124
|
return opts.frameSrc ? `${policy}; frame-src ${opts.frameSrc}` : policy;
|
|
115
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Replace the directive that is exactly `from` in `policy` with `to`. A policy without it throws: a string replace that
|
|
128
|
+
* found nothing would quietly ship panels without their nonce (no script runs) or without the emoji source (#1520
|
|
129
|
+
* review) after an edit to the base policy. Whole directives only, so "script-src 'self'" never matches a longer one.
|
|
130
|
+
*/
|
|
131
|
+
export function rewriteDirective(policy, from, to) {
|
|
132
|
+
const parts = policy.split("; ");
|
|
133
|
+
const at = parts.indexOf(from);
|
|
134
|
+
if (at < 0)
|
|
135
|
+
throw new Error(`panel CSP: the base policy has no "${from}" directive to extend`);
|
|
136
|
+
parts[at] = to;
|
|
137
|
+
return parts.join("; ");
|
|
138
|
+
}
|
|
139
|
+
// Checked once at load: a base policy that lost a directive the panels extend fails at startup, not on a page.
|
|
140
|
+
panelContentSecurityPolicy("load-check");
|
|
116
141
|
/**
|
|
117
142
|
* Send a panel page (/ui, /view, /settings, the sign-in page). Its own inline `<script>` and `<style>` blocks get a
|
|
118
143
|
* fresh nonce, and the response's CSP names that nonce and nothing else inline (#1268, #1300): a script or a style
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-host-guard.js","sourceRoot":"","sources":["../src/web-host-guard.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,yBAAyB,GACpC,0HAA0H,CAAC;AAE7H,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB;IACpB,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"web-host-guard.js","sourceRoot":"","sources":["../src/web-host-guard.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,yBAAyB,GACpC,0HAA0H,CAAC;AAE7H,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB;IACpB,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,oBAAoB;IACpB,mBAAmB;IACnB,kBAAkB;IAClB,4BAA4B;IAC5B,uBAAuB;IACvB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,wBAAwB;CACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAOb,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,MAA0C;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,mBAAmB,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,CAAC,SAAkB,EAAQ,EAAE;QACvC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;IACF,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,MAAM,KAAK,IAAI,KAAK;YAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,UAAyC,EAAE,OAA4B;IACnG,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAmB;IACzD,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACnD,4EAA4E;IAC5E,oDAAoD;IACpD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACzC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAAC;IACtE,wEAAwE;IACxE,sDAAsD;IACtD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,OAA8B,EAAE;IACxF,IAAI,MAAM,GAAG,gBAAgB,CAAC,2BAA2B,EAAE,mBAAmB,EAAE,4BAA4B,KAAK,GAAG,CAAC,CAAC;IACtH,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,EAAE,2BAA2B,KAAK,GAAG,CAAC,CAAC;IAC3F,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,4BAA4B,EAAE,8BAA8B,qBAAqB,EAAE,CAAC,CAAC;IACvH,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,uBAAuB,CAAC,CAAC;IAC/F,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD,+GAA+G;AAC/G,0BAA0B,CAAC,YAAY,CAAC,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,IAAY,EAAE,MAAM,GAAG,GAAG,EAAE,UAAkC,EAAE,EAAE,MAA6B,EAAE;IAClJ,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjD,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACjF,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAClF,kHAAkH;IAClH,mHAAmH;IACnH,8GAA8G;IAC9G,yDAAyD;IACzD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC;AACtH,CAAC"}
|
package/dist/web-session.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { closeSync, fsyncSync, openSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
export type SessionSurface = "local" | "gateway";
|
|
3
3
|
/** `admin` may do everything the panel can; `read` is reserved for the read-only tier (design D6). */
|
|
4
4
|
export type SessionTier = "admin" | "read";
|
|
@@ -61,6 +61,12 @@ export interface SessionFileOps {
|
|
|
61
61
|
writeFileSync: typeof writeFileSync;
|
|
62
62
|
renameSync: typeof renameSync;
|
|
63
63
|
unlinkSync: typeof unlinkSync;
|
|
64
|
+
/** fsync a file descriptor. Injected for tests; default is fsyncSync. */
|
|
65
|
+
fsyncSync?: typeof fsyncSync;
|
|
66
|
+
/** Open a path. Injected for tests; default is openSync. */
|
|
67
|
+
openSync?: typeof openSync;
|
|
68
|
+
/** Close a fd. Injected for tests; default is closeSync. */
|
|
69
|
+
closeSync?: typeof closeSync;
|
|
64
70
|
}
|
|
65
71
|
export interface WebSessionStoreOptions {
|
|
66
72
|
/** Where `web-sessions.json` lives. Omit for a memory-only store (tests). */
|