@songsid/agend 2.2.0 → 2.2.5
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/dist/agent-cli-instructions.md +5 -2
- package/dist/agent-cli.js +284 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +2 -0
- package/dist/agent-endpoint.js +29 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.d.ts +38 -0
- package/dist/agent-file-read.js +317 -0
- package/dist/agent-file-read.js.map +1 -0
- package/dist/agent-whats-new.d.ts +11 -0
- package/dist/agent-whats-new.js +34 -2
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/atomic-write.js +9 -1
- package/dist/atomic-write.js.map +1 -1
- package/dist/auth-api.d.ts +30 -1
- package/dist/auth-api.js +61 -12
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +38 -0
- package/dist/authority/authority-state.js +114 -0
- package/dist/authority/authority-state.js.map +1 -0
- package/dist/authority/session-authorizations.d.ts +43 -0
- package/dist/authority/session-authorizations.js +102 -0
- package/dist/authority/session-authorizations.js.map +1 -0
- package/dist/authority/web-authority.d.ts +120 -0
- package/dist/authority/web-authority.js +157 -0
- package/dist/authority/web-authority.js.map +1 -0
- package/dist/backend/antigravity.js +3 -3
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +2 -2
- package/dist/backend/claude-code.js +10 -5
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/launch-effort.js +1 -1
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/muse.js +10 -2
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +25 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +120 -0
- package/dist/backend-availability.js +396 -0
- package/dist/backend-availability.js.map +1 -0
- package/dist/backend-command.d.ts +21 -3
- package/dist/backend-command.js +23 -4
- package/dist/backend-command.js.map +1 -1
- package/dist/bundled-skills.d.ts +14 -0
- package/dist/bundled-skills.js +29 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-analysis.d.ts +47 -1
- package/dist/cache-analysis.js +68 -8
- package/dist/cache-analysis.js.map +1 -1
- package/dist/cache-ledger.d.ts +16 -3
- package/dist/cache-ledger.js +33 -13
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-report-tool.d.ts +17 -0
- package/dist/cache-report-tool.js +40 -0
- package/dist/cache-report-tool.js.map +1 -0
- package/dist/cache-service.d.ts +70 -3
- package/dist/cache-service.js +178 -17
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord-client-retirement.d.ts +5 -0
- package/dist/channel/adapters/discord-client-retirement.js +57 -0
- package/dist/channel/adapters/discord-client-retirement.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +11 -0
- package/dist/channel/adapters/discord.js +66 -6
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +8 -1
- package/dist/channel/adapters/telegram.js +74 -4
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +48 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +21 -0
- package/dist/classic-channel-manager.d.ts +10 -5
- package/dist/classic-channel-manager.js +12 -9
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +142 -110
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +119 -4
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.d.ts +10 -0
- package/dist/daemon.js +327 -31
- package/dist/daemon.js.map +1 -1
- package/dist/decision-list.d.ts +25 -0
- package/dist/decision-list.js +30 -0
- package/dist/decision-list.js.map +1 -0
- package/dist/delivery-outbox.d.ts +10 -0
- package/dist/delivery-outbox.js +12 -1
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-context.d.ts +15 -0
- package/dist/fleet-manager.d.ts +514 -12
- package/dist/fleet-manager.js +1885 -163
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +18 -0
- package/dist/fleet-process-handlers.js +69 -0
- package/dist/fleet-process-handlers.js.map +1 -0
- package/dist/fleet-traffic.d.ts +74 -0
- package/dist/fleet-traffic.js +196 -0
- package/dist/fleet-traffic.js.map +1 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +20 -5
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +492 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +482 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/human-delivery-receipts.d.ts +24 -1
- package/dist/human-delivery-receipts.js +64 -11
- package/dist/human-delivery-receipts.js.map +1 -1
- package/dist/instance-avatar.js +3 -0
- package/dist/instance-avatar.js.map +1 -1
- package/dist/instance-config-impact.js +6 -1
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +2 -0
- package/dist/instance-lifecycle.js +20 -10
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-names.d.ts +4 -0
- package/dist/instance-names.js +12 -0
- package/dist/instance-names.js.map +1 -0
- package/dist/instructions.d.ts +12 -1
- package/dist/instructions.js +13 -2
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +100 -8
- package/dist/locale.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +95 -0
- package/dist/ls-attach-resolve.js +174 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/memory-hogs.d.ts +27 -0
- package/dist/memory-hogs.js +124 -0
- package/dist/memory-hogs.js.map +1 -0
- package/dist/needs-you-hub.d.ts +4 -0
- package/dist/needs-you-hub.js +31 -6
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +1 -13
- package/dist/needs-you.js +3 -37
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.d.ts +15 -0
- package/dist/outbound-handlers.js +152 -11
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +228 -4
- package/dist/outbound-schemas.js +147 -1
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +21 -1
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +9 -0
- package/dist/public-web-link.js +8 -0
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +10 -1
- package/dist/quickstart-api.js +12 -4
- package/dist/quickstart-api.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +4 -0
- package/dist/reply-buttons-controller.js +2 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/repo-worktree-guard.d.ts +36 -0
- package/dist/repo-worktree-guard.js +143 -0
- package/dist/repo-worktree-guard.js.map +1 -0
- package/dist/restart-progress.d.ts +65 -1
- package/dist/restart-progress.js +236 -10
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.d.ts +5 -0
- package/dist/rollout-index.js +26 -5
- package/dist/rollout-index.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +70 -1
- package/dist/scheduler/scheduler.js +256 -17
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/service-installer.d.ts +2 -1
- package/dist/service-installer.js +18 -3
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +23 -0
- package/dist/settings-api.js +233 -2
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +112 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +32 -2
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +5 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/tmux-manager.d.ts +5 -0
- package/dist/tmux-manager.js +16 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +4 -6
- package/dist/tool-permissions.js +100 -2
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +17 -7
- package/dist/topic-commands.js +39 -21
- package/dist/topic-commands.js.map +1 -1
- package/dist/topic-link.d.ts +128 -0
- package/dist/topic-link.js +269 -0
- package/dist/topic-link.js.map +1 -0
- package/dist/types.d.ts +61 -1
- package/dist/ui/app-effects.js +245 -0
- package/dist/ui/chat-ambient.js +307 -0
- package/dist/ui/chat-effect-posters.js +42 -0
- package/dist/ui/chat-effects.js +160 -0
- package/dist/ui/chat-live-replies.js +58 -0
- package/dist/ui/chat-render.js +25 -7
- package/dist/ui/chat-store.js +41 -13
- package/dist/ui/chat-strings.js +86 -2
- package/dist/ui/chat-thread.js +204 -37
- package/dist/ui/chat-tour.js +1 -1
- package/dist/ui/effect-trial-controller.js +124 -0
- package/dist/ui/effect-trial-offer.js +31 -0
- package/dist/ui/effect-trial-panel.js +40 -0
- package/dist/ui/fleet-cache.js +23 -1
- package/dist/ui/fleet-canvas-layout.js +111 -0
- package/dist/ui/fleet-canvas.js +525 -0
- package/dist/ui/fleet-org.js +27 -12
- package/dist/ui/fleet-traffic.js +343 -0
- package/dist/ui/fleet-usage.js +401 -0
- package/dist/ui/image-lightbox.js +1 -1
- package/dist/ui/panel-chat.js +252 -58
- package/dist/ui/panel-details.js +20 -6
- package/dist/ui/panel-fleet.js +45 -19
- package/dist/ui/panel-log.js +6 -6
- package/dist/ui/panel-needs.js +3 -3
- package/dist/ui/panel-settings.js +58 -13
- package/dist/ui/preview-panel.js +25 -9
- package/dist/ui/preview.js +3 -2
- package/dist/ui/settings-appearance.js +349 -0
- package/dist/ui/settings-catalog.js +92 -0
- package/dist/ui/settings-dialogs.js +40 -12
- package/dist/ui/settings-effects.js +202 -0
- package/dist/ui/settings-guests.js +117 -0
- package/dist/ui/settings-learn.js +25 -0
- package/dist/ui/settings-model.js +15 -6
- package/dist/ui/settings-mods.js +271 -0
- package/dist/ui/settings-owner-effects.js +80 -0
- package/dist/ui/settings-strings.js +335 -10
- package/dist/ui/settings-web-authority.js +91 -0
- package/dist/ui/shared/agend-auth.js +28 -4
- package/dist/ui/shared/agent-widget.js +248 -0
- package/dist/ui/shared/app-i18n.js +6 -2
- package/dist/ui/shared/app-prefs.js +34 -13
- package/dist/ui/shared/app-route.js +42 -2
- package/dist/ui/shared/app-session.js +3 -1
- package/dist/ui/shared/app-shell.js +119 -41
- package/dist/ui/shared/app-store.js +28 -1
- package/dist/ui/shared/app-stream.js +14 -7
- package/dist/ui/shared/app-themes.js +206 -0
- package/dist/ui/shared/app.css +566 -5
- package/dist/ui/shared/app.js +23 -10
- package/dist/ui/shared/card-strings.js +32 -0
- package/dist/ui/shared/effect-app-runtime.js +297 -0
- package/dist/ui/shared/effect-baseline.js +64 -0
- package/dist/ui/shared/effect-chat-runtime.js +167 -0
- package/dist/ui/shared/effect-cursor.js +125 -0
- package/dist/ui/shared/effect-frame.js +146 -0
- package/dist/ui/shared/effect-geometry.js +137 -0
- package/dist/ui/shared/effect-host-style.js +10 -0
- package/dist/ui/shared/effect-owner-regions.js +74 -0
- package/dist/ui/shared/effect-owner-source.js +122 -0
- package/dist/ui/shared/effect-policy.js +151 -0
- package/dist/ui/shared/effect-poster-reader.js +98 -0
- package/dist/ui/shared/effect-posters.js +117 -0
- package/dist/ui/shared/effect-profiler.js +184 -0
- package/dist/ui/shared/effect-profiles.js +65 -0
- package/dist/ui/shared/effect-registry.js +543 -0
- package/dist/ui/shared/effect-runtime-loader.js +234 -0
- package/dist/ui/shared/effect-safety.js +153 -0
- package/dist/ui/shared/effect-stock-snapshot.js +43 -0
- package/dist/ui/shared/effect-stock-trust.js +217 -0
- package/dist/ui/shared/effect-trial-shadow.js +62 -0
- package/dist/ui/shared/effect-trial-source.js +103 -0
- package/dist/ui/shared/effect-trial-stage.js +170 -0
- package/dist/ui/shared/effect-trial.css +40 -0
- package/dist/ui/shared/fx-motion.js +67 -0
- package/dist/ui/shared/header-tools.js +1 -1
- package/dist/ui/shared/identity-card.js +273 -0
- package/dist/ui/shared/identity-color.js +261 -0
- package/dist/ui/shared/instance-nav.js +215 -41
- package/dist/ui/shared/owner-css.js +250 -0
- package/dist/ui/shared/owner-effect-prefs.js +117 -0
- package/dist/ui/shared/panel-view.js +103 -10
- package/dist/ui/shared/signin.js +2 -0
- package/dist/ui/shared/tokens.css +9 -3
- package/dist/ui/shared/ui-dialog.js +1 -1
- package/dist/ui/shared/ui-icons.js +3 -0
- package/dist/ui/shared/ui-menu.js +1 -1
- package/dist/ui/shared/ui-toast.js +1 -1
- package/dist/ui/shared/usage-dialog.js +22 -2
- package/dist/ui/shared/view-strings.js +98 -2
- package/dist/ui/shared/web-authorize.js +151 -0
- package/dist/ui/signin.html +1 -0
- package/dist/ui/web-terminal/terminal.css +4 -4
- package/dist/usage/providers.d.ts +28 -0
- package/dist/usage/providers.js +126 -36
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage-report.d.ts +158 -0
- package/dist/usage-report.js +226 -0
- package/dist/usage-report.js.map +1 -0
- package/dist/usage-rollup.d.ts +51 -0
- package/dist/usage-rollup.js +168 -0
- package/dist/usage-rollup.js.map +1 -0
- package/dist/view-api.d.ts +68 -0
- package/dist/view-api.js +249 -8
- package/dist/view-api.js.map +1 -1
- package/dist/web-ambient.d.ts +72 -0
- package/dist/web-ambient.js +161 -0
- package/dist/web-ambient.js.map +1 -0
- package/dist/web-api.d.ts +117 -7
- package/dist/web-api.js +1283 -70
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-limits.d.ts +82 -0
- package/dist/web-appearance-limits.js +83 -0
- package/dist/web-appearance-limits.js.map +1 -0
- package/dist/web-appearance-policy.d.ts +64 -0
- package/dist/web-appearance-policy.js +87 -0
- package/dist/web-appearance-policy.js.map +1 -0
- package/dist/web-appearance-tools.d.ts +53 -0
- package/dist/web-appearance-tools.js +124 -0
- package/dist/web-appearance-tools.js.map +1 -0
- package/dist/web-appearance-view.d.ts +124 -0
- package/dist/web-appearance-view.js +278 -0
- package/dist/web-appearance-view.js.map +1 -0
- package/dist/web-appearance.d.ts +93 -0
- package/dist/web-appearance.js +373 -0
- package/dist/web-appearance.js.map +1 -0
- package/dist/web-asset-parts.d.ts +93 -0
- package/dist/web-asset-parts.js +133 -0
- package/dist/web-asset-parts.js.map +1 -0
- package/dist/web-auth.js +20 -2
- package/dist/web-auth.js.map +1 -1
- package/dist/web-card.d.ts +110 -0
- package/dist/web-card.js +266 -0
- package/dist/web-card.js.map +1 -0
- package/dist/web-channel-echo.d.ts +7 -1
- package/dist/web-channel-echo.js +6 -2
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +63 -0
- package/dist/web-chat-history.js +109 -6
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +1 -0
- package/dist/web-effect-bootstrap.d.ts +12 -0
- package/dist/web-effect-bootstrap.js +49 -0
- package/dist/web-effect-bootstrap.js.map +1 -0
- package/dist/web-effect-bundle.d.ts +28 -0
- package/dist/web-effect-bundle.js +171 -0
- package/dist/web-effect-bundle.js.map +1 -0
- package/dist/web-effect-canonical.d.ts +8 -0
- package/dist/web-effect-canonical.js +27 -0
- package/dist/web-effect-canonical.js.map +1 -0
- package/dist/web-effect-library.d.ts +114 -0
- package/dist/web-effect-library.js +530 -0
- package/dist/web-effect-library.js.map +1 -0
- package/dist/web-effect-playback.d.ts +30 -0
- package/dist/web-effect-playback.js +71 -0
- package/dist/web-effect-playback.js.map +1 -0
- package/dist/web-effect-poster.d.ts +8 -0
- package/dist/web-effect-poster.js +52 -0
- package/dist/web-effect-poster.js.map +1 -0
- package/dist/web-effect-profiles.d.ts +118 -0
- package/dist/web-effect-profiles.js +180 -0
- package/dist/web-effect-profiles.js.map +1 -0
- package/dist/web-effect-service.d.ts +93 -0
- package/dist/web-effect-service.js +335 -0
- package/dist/web-effect-service.js.map +1 -0
- package/dist/web-effect-tools.d.ts +48 -0
- package/dist/web-effect-tools.js +129 -0
- package/dist/web-effect-tools.js.map +1 -0
- package/dist/web-effect-trials.d.ts +86 -0
- package/dist/web-effect-trials.js +204 -0
- package/dist/web-effect-trials.js.map +1 -0
- package/dist/web-effect-upload.d.ts +27 -0
- package/dist/web-effect-upload.js +185 -0
- package/dist/web-effect-upload.js.map +1 -0
- package/dist/web-effect-worker.d.ts +8 -0
- package/dist/web-effect-worker.js +170 -0
- package/dist/web-effect-worker.js.map +1 -0
- package/dist/web-effect.d.ts +103 -0
- package/dist/web-effect.js +153 -0
- package/dist/web-effect.js.map +1 -0
- package/dist/web-guest-access.d.ts +125 -0
- package/dist/web-guest-access.js +234 -0
- package/dist/web-guest-access.js.map +1 -0
- package/dist/web-guest-rooms.d.ts +82 -0
- package/dist/web-guest-rooms.js +135 -0
- package/dist/web-guest-rooms.js.map +1 -0
- package/dist/web-identity-color.d.ts +87 -0
- package/dist/web-identity-color.js +209 -0
- package/dist/web-identity-color.js.map +1 -0
- package/dist/web-identity-palette.d.ts +113 -0
- package/dist/web-identity-palette.js +84 -0
- package/dist/web-identity-palette.js.map +1 -0
- package/dist/web-image-meta.d.ts +38 -0
- package/dist/web-image-meta.js +262 -0
- package/dist/web-image-meta.js.map +1 -0
- package/dist/web-login.d.ts +47 -0
- package/dist/web-login.js +115 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mod-agent.d.ts +50 -0
- package/dist/web-mod-agent.js +207 -0
- package/dist/web-mod-agent.js.map +1 -0
- package/dist/web-mod-bundle.d.ts +157 -0
- package/dist/web-mod-bundle.js +529 -0
- package/dist/web-mod-bundle.js.map +1 -0
- package/dist/web-mod-export.d.ts +68 -0
- package/dist/web-mod-export.js +100 -0
- package/dist/web-mod-export.js.map +1 -0
- package/dist/web-mod-store.d.ts +289 -0
- package/dist/web-mod-store.js +638 -0
- package/dist/web-mod-store.js.map +1 -0
- package/dist/web-org.d.ts +3 -3
- package/dist/web-org.js +11 -17
- package/dist/web-org.js.map +1 -1
- package/dist/web-owner-css-store.d.ts +222 -0
- package/dist/web-owner-css-store.js +440 -0
- package/dist/web-owner-css-store.js.map +1 -0
- package/dist/web-owner-css.d.ts +58 -0
- package/dist/web-owner-css.js +552 -0
- package/dist/web-owner-css.js.map +1 -0
- package/dist/web-prefs.d.ts +62 -0
- package/dist/web-prefs.js +232 -36
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +15 -3
- package/dist/web-preview.js +28 -9
- package/dist/web-preview.js.map +1 -1
- package/dist/web-returning-device.d.ts +41 -0
- package/dist/web-returning-device.js +57 -5
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-session-authorization.d.ts +132 -0
- package/dist/web-session-authorization.js +193 -0
- package/dist/web-session-authorization.js.map +1 -0
- package/dist/web-session.d.ts +70 -10
- package/dist/web-session.js +137 -22
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +67 -2
- package/dist/web-settings-patch.js +196 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +89 -0
- package/dist/web-settings-tools.js +273 -0
- package/dist/web-settings-tools.js.map +1 -0
- package/dist/web-shell-routes.d.ts +2 -2
- package/dist/web-shell-routes.js +2 -2
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-theme-store.d.ts +257 -0
- package/dist/web-theme-store.js +627 -0
- package/dist/web-theme-store.js.map +1 -0
- package/dist/web-theme.d.ts +123 -0
- package/dist/web-theme.js +416 -0
- package/dist/web-theme.js.map +1 -0
- package/dist/web-upload.d.ts +13 -0
- package/dist/web-upload.js +39 -3
- package/dist/web-upload.js.map +1 -1
- package/dist/web-widget.d.ts +72 -0
- package/dist/web-widget.js +245 -0
- package/dist/web-widget.js.map +1 -0
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/systemd.service.ejs +8 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1629 r4 §1: the agent's read-only view of how it appears on the dashboard — `get_web_appearance` (what the page
|
|
3
|
+
* draws now, resolved exactly as the status frame resolves it) and `preview_web_appearance` (an SVG per mode, built
|
|
4
|
+
* from the page's own layout numbers). Pure: the fleet passes in what it already resolved; nothing here reads a file,
|
|
5
|
+
* a path or another instance.
|
|
6
|
+
*
|
|
7
|
+
* The SVG names only this instance's pictures, as side files next to it (`avatar.png`, …: #1890 review — an SVG with a
|
|
8
|
+
* picture inside outgrew what an agent's Read takes); text is XML-escaped; colours are checked again; fonts are generic
|
|
9
|
+
* families. No browser, no live session, no other instance's content.
|
|
10
|
+
*/
|
|
11
|
+
import { AMBIENT_KINDS } from "./web-ambient.js";
|
|
12
|
+
import { autoIdentityColor, identityColorValue, resolveIdentityColor, resolvePlacements } from "./web-identity-color.js";
|
|
13
|
+
import { effectivePalette, THEME_DEFAULTS } from "./web-theme.js";
|
|
14
|
+
/**
|
|
15
|
+
* #1958: the identity colour drawn for this instance while agents' themes are shown, where it comes from, its value on
|
|
16
|
+
* a light and a dark page, where it shows (and whose choice that is), and whether the host turned colours off — what
|
|
17
|
+
* the agent needs to know: a person's choice wins over its own (theme.identity), field by field.
|
|
18
|
+
*/
|
|
19
|
+
export function resolvedIdentityColor(e, host = {}) {
|
|
20
|
+
const r = resolveIdentityColor(e.color ?? { auto: autoIdentityColor(e.name) }, { showThemes: true });
|
|
21
|
+
const p = resolvePlacements(e.color_show ?? {}, { showThemes: true, hostDefault: host.show });
|
|
22
|
+
return { color: r.color, source: r.source, light: identityColorValue(r.color, "light"), dark: identityColorValue(r.color, "dark"), show: p.show, show_source: p.source, off: host.off === true };
|
|
23
|
+
}
|
|
24
|
+
/** The face the page draws while agents' themes are shown (the default), and where it comes from. */
|
|
25
|
+
export function resolvedAvatar(e) {
|
|
26
|
+
if (e.theme_avatar?.kind === "image" && e.theme_avatar.src)
|
|
27
|
+
return { source: "theme", url: e.theme_avatar.src };
|
|
28
|
+
const a = e.avatar;
|
|
29
|
+
if (a?.kind === "image" && a.src?.startsWith("/ui/img/avatar/"))
|
|
30
|
+
return { source: "profile", url: a.src };
|
|
31
|
+
if (a?.kind === "image" && a.src?.startsWith("/ui/img/bot/"))
|
|
32
|
+
return { source: "bot", url: a.src };
|
|
33
|
+
if (a?.kind === "emoji")
|
|
34
|
+
return { source: "emoji", ...(a.src ? { url: a.src } : {}), ...(a.text ? { text: a.text } : {}) };
|
|
35
|
+
return { source: "initial", text: a?.text ?? (e.display_name || e.name).slice(0, 1).toUpperCase() };
|
|
36
|
+
}
|
|
37
|
+
/** The ring the page draws round a picture face: the theme's colour, else an own bot's; none for an emoji or initial. */
|
|
38
|
+
export function resolvedRing(e) {
|
|
39
|
+
const pictured = e.theme_avatar?.kind === "image" || e.avatar?.kind === "image";
|
|
40
|
+
if (!pictured)
|
|
41
|
+
return null;
|
|
42
|
+
if (e.theme_accent)
|
|
43
|
+
return { color: e.theme_accent, source: "theme" };
|
|
44
|
+
if (e.accent)
|
|
45
|
+
return { color: e.accent, source: "bot" };
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/** The effective look per mode: the palette over the token defaults, and the fixed choices. */
|
|
49
|
+
export function effectiveTheme(theme) {
|
|
50
|
+
const one = (mode) => ({ ...effectivePalette(theme, mode), font: theme.font ?? "inter", bubbleRadius: theme.bubble?.radius ?? 18, bubbleBorder: theme.bubble?.border ?? "none" });
|
|
51
|
+
return { light: one("light"), dark: one("dark") };
|
|
52
|
+
}
|
|
53
|
+
/** get_web_appearance: current placements and untrusted recent playback observations. */
|
|
54
|
+
export function appearanceView(i) {
|
|
55
|
+
const card = {};
|
|
56
|
+
for (const k of ["portrait", "banner"])
|
|
57
|
+
if (i.card[k])
|
|
58
|
+
card[k] = { id: i.card[k].id, by: i.card[k].by, url: i.card[k].src };
|
|
59
|
+
for (const k of ["tagline", "bio"])
|
|
60
|
+
if (i.card[k])
|
|
61
|
+
card[k] = { text: i.card[k].text, by: i.card[k].by };
|
|
62
|
+
// #2086: which part of a cropped banner stays in view (0 top … 100 bottom; absent: the centre), and whose choice.
|
|
63
|
+
if (i.card.banner_focus)
|
|
64
|
+
card.banner_focus = { value: i.card.banner_focus.value, by: i.card.banner_focus.by };
|
|
65
|
+
return {
|
|
66
|
+
name: i.entry.name,
|
|
67
|
+
display_name: i.entry.display_name ?? null,
|
|
68
|
+
avatar: resolvedAvatar(i.entry),
|
|
69
|
+
ring: resolvedRing(i.entry),
|
|
70
|
+
identity_color: resolvedIdentityColor(i.entry, i.colorPrefs),
|
|
71
|
+
card,
|
|
72
|
+
theme: effectiveTheme(i.theme),
|
|
73
|
+
working_label: i.theme.workingLabel ?? null,
|
|
74
|
+
background: i.theme.background ? { image: i.theme.background.image, fit: i.theme.background.fit, opacity: i.theme.background.opacity } : null,
|
|
75
|
+
effects: i.effects ?? [],
|
|
76
|
+
widgets: ["chat_header", "details"].flatMap(slot => { const w = i.widgets?.[slot]; return w ? [{ slot, by: w.by, spec: w.spec, data: w.data }] : []; }),
|
|
77
|
+
ambient: AMBIENT_KINDS.flatMap(kind => { const a = i.ambient?.[kind]; return a ? [{ kind, by: a.by, spec: a.spec }] : []; }),
|
|
78
|
+
shown_when: "A viewer who turned off \"Show agents' themes, effects and widgets\", or a page opened with ?safe=1, sees the default look, the bot's face, no card colours, no widgets and no ambient effect. An ambient effect also stays still on a device that chose to follow the system's reduced-motion setting while the system asks for it.",
|
|
79
|
+
locked: i.locked,
|
|
80
|
+
agent_edit: i.agentEdit,
|
|
81
|
+
limits: i.limits,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** A still of an ambient: its count of glyphs at fixed, spread-out places (the same every time, so previews compare). */
|
|
85
|
+
function ambientGlyphs(spec, top, h, accent, font, glyphPics) {
|
|
86
|
+
const out = [`<g opacity="${spec.opacity[1]}">`];
|
|
87
|
+
for (let k = 0; k < Math.min(spec.count, 24); k++) {
|
|
88
|
+
// A low-discrepancy sequence: evenly spread, no randomness.
|
|
89
|
+
const x = Math.round(((k * 0.618034) % 1) * (W - 40)) + 20, y = top + Math.round(((k * 0.414214 + 0.2) % 1) * (h - 30)) + 20;
|
|
90
|
+
const size = Math.round(spec.size[0] + ((k * 0.7548777) % 1) * (spec.size[1] - spec.size[0]));
|
|
91
|
+
const g = spec.glyphs[k % spec.glyphs.length];
|
|
92
|
+
if (typeof g === "string") {
|
|
93
|
+
const c = spec.colors.length ? spec.colors[k % spec.colors.length] : accent;
|
|
94
|
+
out.push(`<text x="${x}" y="${y}" font-family="${font}" font-size="${size}" fill="${COLOR.test(c) ? c : accent}">${esc(g)}</text>`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const name = glyphPics[g.asset];
|
|
98
|
+
if (name && PREVIEW_FILE.test(name))
|
|
99
|
+
out.push(`<image href="${name}" x="${x}" y="${y - size}" width="${size}" height="${size}" preserveAspectRatio="xMidYMid meet"/>`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
out.push("</g>");
|
|
103
|
+
return out.join("");
|
|
104
|
+
}
|
|
105
|
+
// ── The preview ── the page's numbers (app.css): a 720 px column, the M card (240 px portrait; #2038: the banner 3:1
|
|
106
|
+
// of the width, held between 140 and 240 px, as `.id-card`'s --id-ar / --id-bmin / --id-bmax), a 56 px chat header
|
|
107
|
+
// with a 32 px face, bubbles of the theme's radius and border.
|
|
108
|
+
const W = 720, PAD = 16, PORTRAIT_H = 240, HEADER_H = 56;
|
|
109
|
+
const BIO_LINES = 12;
|
|
110
|
+
// #2050: the preview is a file that any viewer's fonts draw, so nothing can measure it: lines are laid out with an upper
|
|
111
|
+
// bound of each grapheme's advance (measured in Chrome, sans-serif / serif / monospace, 400 and 600 weight: CJK and
|
|
112
|
+
// fullwidth 1 em, Latin capitals up to 1 em, lowercase up to 0.89, other symbols up to 1.02), and the column is also
|
|
113
|
+
// clipped in the SVG so a wider substitute font cannot draw past it.
|
|
114
|
+
const WIDE = /[\u1100-\u115f\u2e80-\ua4cf\uac00-\ud7a3\uf900-\ufaff\ufe30-\ufe4f\uff00-\uff60\uffe0-\uffe6\u{20000}-\u{3fffd}]/u;
|
|
115
|
+
const PICTO = /\p{Extended_Pictographic}|\p{Regional_Indicator}/u;
|
|
116
|
+
function graphemeEm(g) {
|
|
117
|
+
const cps = Array.from(g);
|
|
118
|
+
// An emoji sequence a font cannot join is drawn as its parts: each pictograph counts.
|
|
119
|
+
const pictos = cps.filter(c => PICTO.test(c)).length;
|
|
120
|
+
if (pictos)
|
|
121
|
+
return 1.25 * pictos;
|
|
122
|
+
if (cps.some(c => WIDE.test(c)))
|
|
123
|
+
return 1;
|
|
124
|
+
const c = cps[0];
|
|
125
|
+
return c === " " ? 0.35 : /[0-9]/.test(c) ? 0.6 : /[a-z]/.test(c) ? 0.95 : /[A-Z]/.test(c) ? 1 : 1.05;
|
|
126
|
+
}
|
|
127
|
+
const charPx = (g, size) => graphemeEm(g) * size;
|
|
128
|
+
const SEGMENTER = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
129
|
+
const graphemes = (s) => Array.from(SEGMENTER.segment(s), x => x.segment);
|
|
130
|
+
/**
|
|
131
|
+
* Wrap `text` (its own line breaks kept) to `maxPx` at `size`, at most `maxLines` lines; what does not fit ends the last
|
|
132
|
+
* line with "…". Latin text breaks at a space when one is on the line; CJK breaks anywhere. Never splits a grapheme.
|
|
133
|
+
*/
|
|
134
|
+
export function fitLines(text, maxPx, size, maxLines) {
|
|
135
|
+
const out = [];
|
|
136
|
+
const width = (gs) => gs.reduce((n, g) => n + charPx(g, size), 0);
|
|
137
|
+
let truncated = false;
|
|
138
|
+
paragraphs: for (const para of text.split("\n")) {
|
|
139
|
+
if (out.length >= maxLines) {
|
|
140
|
+
truncated = true;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
let cur = [];
|
|
144
|
+
for (const g of graphemes(para)) {
|
|
145
|
+
if (cur.length && width(cur) + charPx(g, size) > maxPx) {
|
|
146
|
+
if (out.length >= maxLines - 1) {
|
|
147
|
+
out.push(cur.join(""));
|
|
148
|
+
truncated = true;
|
|
149
|
+
break paragraphs;
|
|
150
|
+
}
|
|
151
|
+
// Latin breaks after the last space on the line; CJK (or a line with no space) breaks here.
|
|
152
|
+
const space = WIDE.test(g) ? -1 : cur.lastIndexOf(" ");
|
|
153
|
+
out.push((space > 0 ? cur.slice(0, space) : cur).join("").trimEnd());
|
|
154
|
+
cur = space > 0 ? cur.slice(space + 1) : [];
|
|
155
|
+
}
|
|
156
|
+
cur.push(g);
|
|
157
|
+
}
|
|
158
|
+
out.push(cur.join(""));
|
|
159
|
+
}
|
|
160
|
+
if (truncated) {
|
|
161
|
+
const last = graphemes(out[out.length - 1]);
|
|
162
|
+
while (last.length && width(last) + charPx("…", size) > maxPx)
|
|
163
|
+
last.pop();
|
|
164
|
+
out[out.length - 1] = `${last.join("").trimEnd()}…`;
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
export const PREVIEW_BANNER = { aspect: 3, min: 140, max: 240 };
|
|
169
|
+
const BANNER_H = Math.min(PREVIEW_BANNER.max, Math.max(PREVIEW_BANNER.min, Math.round(W / PREVIEW_BANNER.aspect)));
|
|
170
|
+
/**
|
|
171
|
+
* #2086: the banner as the page crops it at its focus (object-fit: cover; object-position: 50% <focus>%): a nested SVG
|
|
172
|
+
* whose viewBox is exactly the part shown. Without the picture's size, the nearest of top / middle / bottom.
|
|
173
|
+
*/
|
|
174
|
+
function bannerAt(name, y, focus, size) {
|
|
175
|
+
if (!name || !PREVIEW_FILE.test(name) || name.endsWith(".svg"))
|
|
176
|
+
return "";
|
|
177
|
+
if (!size || size.width < 1 || size.height < 1) {
|
|
178
|
+
const yAlign = focus < 34 ? "YMin" : focus > 66 ? "YMax" : "YMid";
|
|
179
|
+
return `<image href="${name}" x="0" y="${y}" width="${W}" height="${BANNER_H}" preserveAspectRatio="xMid${yAlign} slice"/>`;
|
|
180
|
+
}
|
|
181
|
+
const s = Math.max(W / size.width, BANNER_H / size.height);
|
|
182
|
+
const vw = W / s, vh = BANNER_H / s;
|
|
183
|
+
const r = (n) => Math.round(n * 100) / 100;
|
|
184
|
+
return `<svg x="0" y="${y}" width="${W}" height="${BANNER_H}" viewBox="${r((size.width - vw) / 2)} ${r((size.height - vh) * focus / 100)} ${r(vw)} ${r(vh)}" preserveAspectRatio="none"><image href="${name}" width="${size.width}" height="${size.height}"/></svg>`;
|
|
185
|
+
}
|
|
186
|
+
const esc = (s) => s.replace(/[&<>"']/g, c => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]));
|
|
187
|
+
const FONT = { inter: "sans-serif", system: "sans-serif", mono: "monospace" };
|
|
188
|
+
export const PICTURE_ROLES = ["avatar", "portrait", "banner", "background"];
|
|
189
|
+
const PICTURE_EXT = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp", "image/gif": "gif" };
|
|
190
|
+
/** A side file's name for a picture of this role and type, or null for a type no page shows. */
|
|
191
|
+
export function pictureFileName(role, mime) {
|
|
192
|
+
return Object.hasOwn(PICTURE_EXT, mime) ? `${role}.${PICTURE_EXT[mime]}` : null;
|
|
193
|
+
}
|
|
194
|
+
/** Every name a preview writes: an SVG per mode, and the pictures it names. */
|
|
195
|
+
export const PREVIEW_FILE = /^(?:(?:light|dark)\.svg|(?:avatar|portrait|banner|background)\.(?:png|jpg|webp|gif)|glyph[1-4]\.(?:png|webp|gif))$/;
|
|
196
|
+
const COLOR = /^#[0-9a-f]{6}$/;
|
|
197
|
+
/** One mode's SVG. Every picture is one of `pics` (this instance's), inline; nothing else is referenced. */
|
|
198
|
+
export function previewSvg(i, mode, pics, bannerSize, glyphPics = {}) {
|
|
199
|
+
const raw = effectiveTheme(i.theme)[mode];
|
|
200
|
+
// Colours go into attributes: each is checked again here (a file someone may open in a browser), else the default's.
|
|
201
|
+
const t = { ...raw };
|
|
202
|
+
for (const k of ["bg", "surface", "text", "text2", "accent", "userBubble", "agentBubble"])
|
|
203
|
+
if (!COLOR.test(t[k]))
|
|
204
|
+
t[k] = THEME_DEFAULTS[mode][k];
|
|
205
|
+
const font = FONT[t.font] ?? "sans-serif";
|
|
206
|
+
const img = (name, x, y, w, h, extra = "") => name && PREVIEW_FILE.test(name) && !name.endsWith(".svg") ? `<image href="${name}" x="${x}" y="${y}" width="${w}" height="${h}" preserveAspectRatio="xMidYMid slice"${extra}/>` : "";
|
|
207
|
+
const out = [];
|
|
208
|
+
let y = 0;
|
|
209
|
+
// The card, as Details draws it at M.
|
|
210
|
+
const hasCard = Object.keys(i.card).length > 0;
|
|
211
|
+
if (hasCard) {
|
|
212
|
+
if (i.card.banner) {
|
|
213
|
+
out.push(bannerAt(pics.banner, y, i.card.banner_focus?.value ?? 50, bannerSize ?? null));
|
|
214
|
+
y += BANNER_H;
|
|
215
|
+
}
|
|
216
|
+
const top = y + PAD;
|
|
217
|
+
let textX = PAD;
|
|
218
|
+
if (i.card.portrait && pics.portrait) {
|
|
219
|
+
out.push(img(pics.portrait, PAD, top, PORTRAIT_H * 0.75, PORTRAIT_H));
|
|
220
|
+
textX = PAD + PORTRAIT_H * 0.75 + PAD;
|
|
221
|
+
}
|
|
222
|
+
let ty = top + 18;
|
|
223
|
+
// SVG text neither wraps nor clips: lay the card's text out to its column, as Details does (tagline: two lines).
|
|
224
|
+
const column = W - textX - PAD, textTop = ty - 18;
|
|
225
|
+
out.push(`<clipPath id="card-text"><rect x="${textX}" y="${textTop}" width="${column}" height="${(2 * 22 + 2 + BIO_LINES * 18) + 8}"/></clipPath><g clip-path="url(#card-text)">`);
|
|
226
|
+
if (i.card.tagline)
|
|
227
|
+
for (const line of fitLines(i.card.tagline.text, column, 15, 2)) {
|
|
228
|
+
out.push(`<text x="${textX}" y="${ty}" font-family="${font}" font-size="15" font-weight="600" fill="${t.text}">${esc(line)}</text>`);
|
|
229
|
+
ty += 22;
|
|
230
|
+
}
|
|
231
|
+
if (i.card.tagline)
|
|
232
|
+
ty += 2;
|
|
233
|
+
if (i.card.bio)
|
|
234
|
+
for (const line of fitLines(i.card.bio.text, column, 13, BIO_LINES)) {
|
|
235
|
+
out.push(`<text x="${textX}" y="${ty}" font-family="${font}" font-size="13" fill="${t.text2}">${esc(line)}</text>`);
|
|
236
|
+
ty += 18;
|
|
237
|
+
}
|
|
238
|
+
out.push("</g>");
|
|
239
|
+
y = Math.max(top + (i.card.portrait && pics.portrait ? PORTRAIT_H : 0), ty) + PAD;
|
|
240
|
+
}
|
|
241
|
+
// The chat header: the face (and its ring) and the name.
|
|
242
|
+
const hy = y;
|
|
243
|
+
out.push(`<rect x="0" y="${hy}" width="${W}" height="${HEADER_H}" fill="${t.surface}"/>`);
|
|
244
|
+
const cx = PAD + 16, cy = hy + HEADER_H / 2;
|
|
245
|
+
const ring = resolvedRing(i.entry), face = resolvedAvatar(i.entry);
|
|
246
|
+
if (ring && COLOR.test(ring.color))
|
|
247
|
+
out.push(`<circle cx="${cx}" cy="${cy}" r="18" fill="none" stroke="${ring.color}" stroke-width="2"/>`);
|
|
248
|
+
out.push(`<clipPath id="face"><circle cx="${cx}" cy="${cy}" r="16"/></clipPath>`);
|
|
249
|
+
if (pics.avatar && (face.source === "theme" || face.source === "profile" || face.source === "bot"))
|
|
250
|
+
out.push(img(pics.avatar, cx - 16, cy - 16, 32, 32, ` clip-path="url(#face)"`));
|
|
251
|
+
else {
|
|
252
|
+
out.push(`<circle cx="${cx}" cy="${cy}" r="16" fill="${t.surface}" stroke="${t.text2}" stroke-width="1"/>`);
|
|
253
|
+
out.push(`<text x="${cx}" y="${cy + 5}" text-anchor="middle" font-family="${font}" font-size="14" fill="${t.text}">${esc(face.text ?? "")}</text>`);
|
|
254
|
+
}
|
|
255
|
+
out.push(`<text x="${cx + 28}" y="${cy + 5}" font-family="${font}" font-size="15" font-weight="600" fill="${t.text}">${esc(i.entry.display_name || i.entry.name)}</text>`);
|
|
256
|
+
y = hy + HEADER_H;
|
|
257
|
+
// The thread: the theme's background picture under a pair of bubbles, then the working label.
|
|
258
|
+
const threadTop = y, threadH = 200;
|
|
259
|
+
out.push(`<rect x="0" y="${threadTop}" width="${W}" height="${threadH}" fill="${t.bg}"/>`);
|
|
260
|
+
if (i.theme.background && pics.background)
|
|
261
|
+
out.push(img(pics.background, 0, threadTop, W, threadH, ` opacity="${i.theme.background.opacity}"`));
|
|
262
|
+
// #2117: the looping ambient, still — its glyphs scattered over the thread at their peak opacity, behind the bubbles.
|
|
263
|
+
const loop = i.ambient?.loop?.spec;
|
|
264
|
+
if (loop)
|
|
265
|
+
out.push(ambientGlyphs(loop, threadTop, threadH, t.accent, font, glyphPics));
|
|
266
|
+
const stroke = t.bubbleBorder === "thin" ? ` stroke="${t.text2}" stroke-width="1"` : t.bubbleBorder === "accent" ? ` stroke="${t.accent}" stroke-width="1.5"` : "";
|
|
267
|
+
out.push(`<rect x="${W - PAD - 300}" y="${threadTop + PAD}" width="300" height="44" rx="${t.bubbleRadius}" fill="${t.userBubble}"${stroke}/>`);
|
|
268
|
+
out.push(`<text x="${W - PAD - 286}" y="${threadTop + PAD + 27}" font-family="${font}" font-size="14" fill="${t.text}">A message from a person</text>`);
|
|
269
|
+
out.push(`<rect x="${PAD}" y="${threadTop + PAD + 60}" width="380" height="64" rx="${t.bubbleRadius}" fill="${t.agentBubble}"${stroke}/>`);
|
|
270
|
+
out.push(`<text x="${PAD + 14}" y="${threadTop + PAD + 88}" font-family="${font}" font-size="14" fill="${t.text}">Your reply, in your colours.</text>`);
|
|
271
|
+
out.push(`<text x="${PAD + 14}" y="${threadTop + PAD + 110}" font-family="${font}" font-size="13" fill="${t.accent}">A link in the accent colour</text>`);
|
|
272
|
+
out.push(`<circle cx="${PAD + 6}" cy="${threadTop + threadH - 24}" r="4" fill="${t.accent}"/>`);
|
|
273
|
+
out.push(`<text x="${PAD + 18}" y="${threadTop + threadH - 19}" font-family="${font}" font-size="13" fill="${t.text2}">${esc(i.theme.workingLabel ?? "Working")}…</text>`);
|
|
274
|
+
y = threadTop + threadH;
|
|
275
|
+
return `<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="${W}" height="${y}" viewBox="0 0 ${W} ${y}">`
|
|
276
|
+
+ `<title>${esc(`${i.entry.display_name || i.entry.name}: ${mode} mode`)}</title><rect width="${W}" height="${y}" fill="${t.bg}"/>${out.join("")}</svg>\n`;
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=web-appearance-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-appearance-view.js","sourceRoot":"","sources":["../src/web-appearance-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1629 (first design §4, §6; r2 (a)–(c); r4-4): the agent's own theme tools — get_web_theme, set_web_theme,
|
|
3
|
+
* set_web_theme_asset, reset_web_theme, set_web_widget, remove_web_widget, set_web_ambient, clear_web_ambient (#2117) — and a person's reset, lock, widget removal and ambient. None takes a target: the caller is the
|
|
4
|
+
* instance its IPC connection or agent token belongs to, and only that instance's record is ever read or written.
|
|
5
|
+
*
|
|
6
|
+
* Every agent write: the fleet-wide switch (web.themes.agent_edit), then the person's lock, then the shared limiter's
|
|
7
|
+
* check, then validation and the write, then — only once it is on disk — the limiter's record. A refused, invalid or
|
|
8
|
+
* failed call costs nothing. A person's reset and lock are never limited.
|
|
9
|
+
*/
|
|
10
|
+
import { type AppearanceBucket, AppearanceLimiter } from "./web-appearance-policy.js";
|
|
11
|
+
import { type ThemeStore } from "./web-theme-store.js";
|
|
12
|
+
/** An upload in parts with no new part for this long is dropped (monotonic clock). */
|
|
13
|
+
export declare const ASSET_UPLOAD_IDLE_MS = 60000;
|
|
14
|
+
export type ToolAnswer = Record<string, unknown>;
|
|
15
|
+
type WebConfigView = {
|
|
16
|
+
themes?: {
|
|
17
|
+
agent_edit?: boolean;
|
|
18
|
+
};
|
|
19
|
+
} | undefined | null;
|
|
20
|
+
export declare class WebAppearance {
|
|
21
|
+
private readonly store;
|
|
22
|
+
private readonly webConfig;
|
|
23
|
+
private readonly changed;
|
|
24
|
+
private readonly clock;
|
|
25
|
+
readonly limiter: AppearanceLimiter;
|
|
26
|
+
/** At most one upload in parts per instance (a new part 0 replaces it). */
|
|
27
|
+
private readonly uploads;
|
|
28
|
+
constructor(store: ThemeStore, webConfig: () => WebConfigView, changed?: () => void, limiter?: AppearanceLimiter, clock?: () => number);
|
|
29
|
+
/** Why an agent may not write now, or null. */
|
|
30
|
+
private refusal;
|
|
31
|
+
/** The effect tools share this exact switch/lock/limiter policy; no parallel gate or bucket. */
|
|
32
|
+
authorizeEffect(instance: string, buckets: readonly AppearanceBucket[]): ToolAnswer | null;
|
|
33
|
+
/** get_web_theme: the caller's theme and everything an agent needs to write a good one. */
|
|
34
|
+
getTheme(instance: string): ToolAnswer;
|
|
35
|
+
/** The upload limits in force now (r4.1 Q3 (b): the card's come from web.appearance), so an agent can size its files. */
|
|
36
|
+
private assetLimits;
|
|
37
|
+
/** set_web_theme { set?, clear? }: all or nothing. `{}` is a no-op (and counts as nothing). */
|
|
38
|
+
setTheme(instance: string, patch: unknown): ToolAnswer;
|
|
39
|
+
/**
|
|
40
|
+
* set_web_theme_asset { slot, data_b64, part? }: the bytes the daemon or the CLI read on the agent's side — whole, or
|
|
41
|
+
* in parts (web-asset-parts.ts). The switch and the lock are asked at the first part and again before the picture is
|
|
42
|
+
* stored; uploads are not counted (the user's decision) — the slot's size limits and the picture quota still apply.
|
|
43
|
+
*/
|
|
44
|
+
setAsset(instance: string, args: {
|
|
45
|
+
slot?: unknown;
|
|
46
|
+
data_b64?: unknown;
|
|
47
|
+
part?: unknown;
|
|
48
|
+
}): ToolAnswer;
|
|
49
|
+
private storeAsset;
|
|
50
|
+
private setAssetPart;
|
|
51
|
+
/** reset_web_theme: the agent can always undo itself (a change for the limit). */
|
|
52
|
+
resetTheme(instance: string): ToolAnswer;
|
|
53
|
+
/** A person's reset (Details, the chat menu): theme, placements and pictures go; the lock stays. Not limited. */
|
|
54
|
+
humanReset(instance: string): ToolAnswer;
|
|
55
|
+
/** A person's lock (r2 (a)). Not limited. */
|
|
56
|
+
humanLock(instance: string, locked: boolean): ToolAnswer;
|
|
57
|
+
/**
|
|
58
|
+
* set_web_widget { slot, spec?, data? } (r4-4): place a widget in one of its own slots (`spec`, a change), or give
|
|
59
|
+
* the one there new values (`data` alone: merged, null removes a key — its own budget, 10 s apart). A widget a person
|
|
60
|
+
* placed takes the agent's values but is never replaced by it. `sidebar` is the person's: owner_slot.
|
|
61
|
+
*/
|
|
62
|
+
setWidget(instance: string, args: {
|
|
63
|
+
slot?: unknown;
|
|
64
|
+
spec?: unknown;
|
|
65
|
+
data?: unknown;
|
|
66
|
+
}): ToolAnswer;
|
|
67
|
+
/** remove_web_widget { slot? } (r4-4): its own widgets, from one slot or both; a person's placement stays (a change). */
|
|
68
|
+
removeWidget(instance: string, args: {
|
|
69
|
+
slot?: unknown;
|
|
70
|
+
}): ToolAnswer;
|
|
71
|
+
private agentSlot;
|
|
72
|
+
/**
|
|
73
|
+
* set_web_ambient { preset, glyphs, … } (#2117): its own ambient, in the place its preset goes (one looping, one
|
|
74
|
+
* click), placed or replaced (a change). One a person set is never replaced by the agent.
|
|
75
|
+
*/
|
|
76
|
+
setAmbient(instance: string, args: Record<string, unknown>): ToolAnswer;
|
|
77
|
+
/** clear_web_ambient { which? } (#2117): its own ambients, one kind or both; a person's stays (a change). */
|
|
78
|
+
clearAmbient(instance: string, args: {
|
|
79
|
+
which?: unknown;
|
|
80
|
+
}): ToolAnswer;
|
|
81
|
+
/**
|
|
82
|
+
* A person's ambient for an agent (General's set_web_settings, an admin session): a spec sets the place its preset
|
|
83
|
+
* goes, null with `which` clears that one (both without). Not limited; the lock is not needed (it binds agents).
|
|
84
|
+
*/
|
|
85
|
+
humanSetAmbient(instance: string, spec: unknown, which?: unknown): ToolAnswer;
|
|
86
|
+
/** A person's removal of an agent's widget (Details, an admin session). Not limited; the lock is not needed. */
|
|
87
|
+
humanRemoveWidget(instance: string, slot: unknown): ToolAnswer;
|
|
88
|
+
/** An instance was removed: its counters and any upload in progress go. */
|
|
89
|
+
forget(instance: string): void;
|
|
90
|
+
/** The tool dispatcher both doors share (typed IPC from the daemon, the agent endpoint for agend-agent). */
|
|
91
|
+
handleTool(instance: string, tool: string, args: Record<string, unknown>): ToolAnswer;
|
|
92
|
+
}
|
|
93
|
+
export {};
|