@songsid/agend 2.3.0-beta.8 → 2.3.0
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 +16 -8
- package/README.zh-TW.md +16 -8
- package/dist/adapter-world.js.map +1 -1
- package/dist/agend-home.d.ts +5 -0
- package/dist/agend-home.js +7 -0
- package/dist/agend-home.js.map +1 -0
- package/dist/agent-cli-instructions.md +9 -2
- package/dist/agent-cli.js +44 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +9 -0
- package/dist/agent-endpoint.js +23 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.js +1 -1
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +16 -0
- package/dist/agent-whats-new.js +54 -11
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/apply-job.js.map +1 -1
- package/dist/atomic-write.js.map +1 -1
- package/dist/auth-api.d.ts +12 -0
- package/dist/auth-api.js +77 -22
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +4 -0
- package/dist/authority/authority-state.js +17 -8
- package/dist/authority/authority-state.js.map +1 -1
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +16 -8
- package/dist/authority/web-authority.js +19 -5
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.d.ts +2 -2
- package/dist/backend/antigravity.js +2 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +13 -4
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +8 -0
- package/dist/backend/codex-metadata.js +74 -17
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-package.d.ts +30 -0
- package/dist/backend/codex-package.js +133 -0
- package/dist/backend/codex-package.js.map +1 -0
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.d.ts +2 -0
- package/dist/backend/codex.js +25 -5
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +2 -0
- package/dist/backend/credential-profile.js +2 -0
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/grok.js +58 -3
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-kas-store.js.map +1 -1
- package/dist/backend/kiro-v2-store.js.map +1 -1
- package/dist/backend/kiro-v3-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +9 -1
- package/dist/backend/kiro.js +102 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/mock.js.map +1 -1
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/opencode-permission.js +1 -1
- package/dist/backend/opencode-permission.js.map +1 -1
- package/dist/backend/opencode.js +2 -1
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/session-signals.js.map +1 -1
- package/dist/backend-availability.js.map +1 -1
- package/dist/backend-command.d.ts +2 -0
- package/dist/backend-command.js +3 -1
- package/dist/backend-command.js.map +1 -1
- package/dist/backend-outage.js.map +1 -1
- package/dist/binary-probe.js +1 -1
- package/dist/binary-probe.js.map +1 -1
- package/dist/bug-report-cli.d.ts +30 -0
- package/dist/bug-report-cli.js +139 -0
- package/dist/bug-report-cli.js.map +1 -0
- package/dist/bug-report.d.ts +47 -0
- package/dist/bug-report.js +137 -0
- package/dist/bug-report.js.map +1 -0
- package/dist/bundled-skills.d.ts +18 -0
- package/dist/bundled-skills.js +38 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-service.js +1 -1
- 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 +4 -0
- package/dist/channel/adapters/discord.js +57 -12
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +6 -0
- package/dist/channel/adapters/telegram.js +54 -14
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +21 -4
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +3 -1
- package/dist/channel/mcp-tools.js +43 -6
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-queue.js.map +1 -1
- package/dist/channel/sticker-download.js.map +1 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/child-process.d.ts +21 -0
- package/dist/child-process.js +54 -0
- package/dist/child-process.js.map +1 -0
- package/dist/classic-channel-manager.js +3 -2
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli-entry.js.map +1 -1
- package/dist/cli-flags.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +443 -311
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +1 -1
- package/dist/command-table.js +1 -1
- package/dist/command-table.js.map +1 -1
- package/dist/compact-watch.js.map +1 -1
- package/dist/completion-install.js.map +1 -1
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.d.ts +6 -0
- package/dist/config-validator.js +81 -8
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +15 -3
- package/dist/config.js +41 -10
- package/dist/config.js.map +1 -1
- package/dist/connection-secrets.js.map +1 -1
- package/dist/context-guardian.js.map +1 -1
- package/dist/coredump-filter.js.map +1 -1
- package/dist/cpu-profile.js.map +1 -1
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +7 -0
- package/dist/cross-instance-notice.js +10 -0
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +39 -1
- package/dist/daemon.js +234 -15
- package/dist/daemon.js.map +1 -1
- package/dist/daily-summary.js.map +1 -1
- package/dist/darwin-memory.js +1 -1
- package/dist/darwin-memory.js.map +1 -1
- package/dist/dashboard-live.d.ts +8 -0
- package/dist/dashboard-live.js +35 -0
- package/dist/dashboard-live.js.map +1 -0
- package/dist/dashboard-permissions.d.ts +69 -0
- package/dist/dashboard-permissions.js +138 -0
- package/dist/dashboard-permissions.js.map +1 -0
- 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-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.js +5 -0
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-outbox.test.js.map +1 -1
- package/dist/delivery-reconciliation.test.js.map +1 -1
- package/dist/diagnostic-redaction.d.ts +10 -0
- package/dist/diagnostic-redaction.js +167 -0
- package/dist/diagnostic-redaction.js.map +1 -0
- package/dist/doctor.d.ts +8 -0
- package/dist/doctor.js +52 -0
- package/dist/doctor.js.map +1 -1
- package/dist/e2e-isolation.js.map +1 -1
- package/dist/event-log.js.map +1 -1
- package/dist/export-import.js +7 -5
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-label.js.map +1 -1
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +2 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-lock.js +3 -2
- package/dist/fleet-lock.js.map +1 -1
- package/dist/fleet-manager.d.ts +258 -15
- package/dist/fleet-manager.js +1605 -304
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +18 -0
- package/dist/fleet-process-handlers.js +70 -0
- package/dist/fleet-process-handlers.js.map +1 -0
- package/dist/fleet-startup.d.ts +14 -0
- package/dist/fleet-startup.js +30 -0
- package/dist/fleet-startup.js.map +1 -0
- package/dist/fleet-traffic.d.ts +36 -0
- package/dist/fleet-traffic.js +100 -0
- package/dist/fleet-traffic.js.map +1 -1
- package/dist/forged-envelope-scan.d.ts +0 -20
- package/dist/forged-envelope-scan.js +3 -2
- package/dist/forged-envelope-scan.js.map +1 -1
- package/dist/full-restart.d.ts +5 -5
- package/dist/full-restart.js +5 -5
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/bug-report/SKILL.md +31 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +52 -11
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +5 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +3 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +8 -9
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -1
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/scheduling/SKILL.md +4 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +321 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +28 -4
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +553 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +170 -35
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/general-knowledge/steering/core-rules.md +1 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/idle-gate-log.d.ts +19 -0
- package/dist/idle-gate-log.js +15 -0
- package/dist/idle-gate-log.js.map +1 -0
- package/dist/instance-config-impact.js +25 -4
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +10 -1
- package/dist/instance-lifecycle.js +86 -25
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -6
- package/dist/instructions.js +19 -10
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-compact-pane.js.map +1 -1
- package/dist/kiro-db-reader.js.map +1 -1
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-log-gate.js.map +1 -1
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/locale.js +428 -20
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +1 -0
- package/dist/log-steps.js +15 -0
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.js +3 -2
- package/dist/logger.js.map +1 -1
- package/dist/login-controller.d.ts +45 -0
- package/dist/login-controller.js +101 -5
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.js +1 -1
- package/dist/login-manager.js.map +1 -1
- package/dist/login-shell.js +3 -1
- package/dist/login-shell.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +96 -0
- package/dist/ls-attach-resolve.js +180 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/ls-rows.d.ts +12 -0
- package/dist/ls-rows.js +83 -4
- package/dist/ls-rows.js.map +1 -1
- package/dist/memory-pressure.js.map +1 -1
- package/dist/muse-usage-relay.js.map +1 -1
- package/dist/needs-you-hub.d.ts +98 -1
- package/dist/needs-you-hub.js +313 -44
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +5 -2
- package/dist/needs-you-live.js +6 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/needs-you.d.ts +68 -3
- package/dist/needs-you.js +38 -4
- package/dist/needs-you.js.map +1 -1
- package/dist/network-family.js.map +1 -1
- package/dist/operator-control-paths.js +3 -4
- package/dist/operator-control-paths.js.map +1 -1
- package/dist/outbound-handlers.d.ts +3 -0
- package/dist/outbound-handlers.js +76 -19
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +112 -64
- package/dist/outbound-schemas.js +39 -12
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/outbox-open-error.js.map +1 -1
- package/dist/pane-context-cache.js.map +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/private-dir.js.map +1 -1
- package/dist/probe-worker-pool.js.map +1 -1
- package/dist/profile-control.js.map +1 -1
- package/dist/prompt-file-ref.js.map +1 -1
- package/dist/provider-probe.js.map +1 -1
- package/dist/provider-secret-registry.d.ts +5 -3
- package/dist/provider-secret-registry.js +8 -2
- package/dist/provider-secret-registry.js.map +1 -1
- package/dist/public-link-auto-open.d.ts +32 -0
- package/dist/public-link-auto-open.js +86 -0
- package/dist/public-link-auto-open.js.map +1 -0
- package/dist/public-link-owner.d.ts +10 -0
- package/dist/public-link-owner.js +36 -0
- package/dist/public-link-owner.js.map +1 -0
- package/dist/public-link-progress.d.ts +12 -1
- package/dist/public-link-progress.js +5 -10
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.js.map +1 -1
- package/dist/public-tunnel-config.d.ts +11 -0
- package/dist/public-tunnel-config.js +68 -0
- package/dist/public-tunnel-config.js.map +1 -0
- package/dist/public-web-gateway.d.ts +2 -0
- package/dist/public-web-gateway.js +19 -6
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +48 -3
- package/dist/public-web-link.js +177 -51
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +9 -0
- package/dist/quickstart-api.js +82 -0
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +5 -0
- package/dist/quickstart.js +40 -25
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-dedup.js.map +1 -1
- package/dist/resource-report.js +1 -1
- package/dist/resource-report.js.map +1 -1
- package/dist/restart-guard.js.map +1 -1
- package/dist/restart-progress.d.ts +80 -1
- package/dist/restart-progress.js +306 -21
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.js.map +1 -1
- package/dist/runtime-cpu-profile.js.map +1 -1
- package/dist/scheduler/db.d.ts +40 -13
- package/dist/scheduler/db.js +123 -89
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/scheduler/task-board-text.d.ts +26 -0
- package/dist/scheduler/task-board-text.js +140 -0
- package/dist/scheduler/task-board-text.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +730 -0
- package/dist/scheduler/task-board.js +2179 -0
- package/dist/scheduler/task-board.js.map +1 -0
- package/dist/scheduler/types.d.ts +6 -1
- package/dist/sd-notify.js +2 -1
- package/dist/sd-notify.js.map +1 -1
- package/dist/search/search-docs.d.ts +58 -0
- package/dist/search/search-docs.js +63 -0
- package/dist/search/search-docs.js.map +1 -0
- package/dist/search/search-index.d.ts +141 -0
- package/dist/search/search-index.js +440 -0
- package/dist/search/search-index.js.map +1 -0
- package/dist/search/search-store.d.ts +122 -0
- package/dist/search/search-store.js +236 -0
- package/dist/search/search-store.js.map +1 -0
- package/dist/search/search-worker.d.ts +1 -0
- package/dist/search/search-worker.js +163 -0
- package/dist/search/search-worker.js.map +1 -0
- package/dist/secret-file.js.map +1 -1
- package/dist/secret-store.d.ts +2 -0
- package/dist/secret-store.js +21 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/service-installer.d.ts +75 -0
- package/dist/service-installer.js +206 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +44 -0
- package/dist/service-owner.js +48 -0
- package/dist/service-owner.js.map +1 -0
- package/dist/service-plan.d.ts +39 -2
- package/dist/service-plan.js +188 -6
- package/dist/service-plan.js.map +1 -1
- package/dist/session-oom.d.ts +21 -0
- package/dist/session-oom.js +139 -0
- package/dist/session-oom.js.map +1 -0
- package/dist/settings-api.d.ts +13 -0
- package/dist/settings-api.js +73 -12
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.d.ts +5 -0
- package/dist/settings-change.js +167 -6
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +9 -1
- package/dist/settings-confirmation.js +18 -8
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-control.js +2 -1
- package/dist/settings-control.js.map +1 -1
- package/dist/settings-effect.js +29 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +13 -0
- package/dist/settings-http-confirmation.js +15 -3
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +13 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/settings-request-capability.d.ts +4 -1
- package/dist/settings-request-capability.js +11 -3
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-auth.d.ts +1 -0
- package/dist/setup-auth.js +2 -1
- package/dist/setup-auth.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +23 -7
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-host.d.ts +6 -1
- package/dist/setup-host.js +15 -4
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-wizard.js +6 -3
- package/dist/setup-wizard.js.map +1 -1
- package/dist/spawn-gate.d.ts +5 -0
- package/dist/spawn-gate.js +28 -8
- package/dist/spawn-gate.js.map +1 -1
- package/dist/start-attempt.d.ts +1 -0
- package/dist/start-attempt.js +18 -0
- package/dist/start-attempt.js.map +1 -0
- package/dist/start-failure-notice.d.ts +4 -0
- package/dist/start-failure-notice.js +20 -0
- package/dist/start-failure-notice.js.map +1 -0
- package/dist/start-failure.d.ts +147 -0
- package/dist/start-failure.js +281 -0
- package/dist/start-failure.js.map +1 -0
- package/dist/startup-memory-deadline.d.ts +23 -0
- package/dist/startup-memory-deadline.js +55 -0
- package/dist/startup-memory-deadline.js.map +1 -0
- package/dist/statusline-watcher.js.map +1 -1
- package/dist/storm-window.js.map +1 -1
- package/dist/systemd-peer-bus.js.map +1 -1
- package/dist/target-queue-worker.js.map +1 -1
- package/dist/task-board-summary.d.ts +101 -0
- package/dist/task-board-summary.js +177 -0
- package/dist/task-board-summary.js.map +1 -0
- package/dist/task-board-tool.d.ts +25 -0
- package/dist/task-board-tool.js +155 -0
- package/dist/task-board-tool.js.map +1 -0
- package/dist/task-board-waker.d.ts +51 -0
- package/dist/task-board-waker.js +141 -0
- package/dist/task-board-waker.js.map +1 -0
- package/dist/tips.js.map +1 -1
- package/dist/tmux-control.js +1 -1
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +104 -0
- package/dist/tmux-exec-helper.js +412 -0
- package/dist/tmux-exec-helper.js.map +1 -0
- package/dist/tmux-manager.d.ts +1 -0
- package/dist/tmux-manager.js +29 -13
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.js +2 -2
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js +9 -42
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-archiver.js.map +1 -1
- package/dist/topic-commands.d.ts +13 -0
- package/dist/topic-commands.js +56 -33
- package/dist/topic-commands.js.map +1 -1
- package/dist/topic-link.js.map +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.js +5 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +2 -0
- package/dist/transcript-sources.js +4 -0
- package/dist/transcript-sources.js.map +1 -1
- package/dist/tunnel/cloudflared-install.js +3 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -16
- package/dist/tunnel/cloudflared.js +100 -13
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.js +3 -2
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/tunnel/named-diagnostics.d.ts +13 -0
- package/dist/tunnel/named-diagnostics.js +52 -0
- package/dist/tunnel/named-diagnostics.js.map +1 -0
- package/dist/tunnel/public-fetch.js.map +1 -1
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +4 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/types.d.ts +55 -2
- package/dist/ui/app-effects.js +27 -5
- package/dist/ui/app.html +2 -0
- package/dist/ui/backend-signin.js +297 -0
- package/dist/ui/chat-effects.js +15 -7
- package/dist/ui/chat-msg-actions.js +176 -0
- package/dist/ui/chat-render.js +67 -20
- package/dist/ui/chat-store.js +218 -48
- package/dist/ui/chat-strings.js +42 -10
- package/dist/ui/chat-thread.js +249 -23
- package/dist/ui/effect-trial-controller.js +13 -8
- package/dist/ui/effect-trial-offer.js +2 -31
- package/dist/ui/effects-waker.js +2 -0
- package/dist/ui/fleet-canvas-layout.js +13 -4
- package/dist/ui/fleet-canvas.js +120 -43
- package/dist/ui/fleet-office-editor.js +149 -0
- package/dist/ui/fleet-office-model.js +358 -0
- package/dist/ui/fleet-office-pack.js +199 -0
- package/dist/ui/fleet-office-skin.js +474 -0
- package/dist/ui/fleet-office-store.js +49 -0
- package/dist/ui/fleet-office-zones.js +177 -0
- package/dist/ui/fleet-office.js +434 -0
- package/dist/ui/fleet-org.js +21 -8
- package/dist/ui/fleet-route-scene.js +272 -0
- package/dist/ui/fleet-route-worker.js +21 -0
- package/dist/ui/fleet-route.js +88 -0
- package/dist/ui/fleet-task-card.js +436 -0
- package/dist/ui/fleet-task-common.js +482 -0
- package/dist/ui/fleet-task-work.js +107 -0
- package/dist/ui/fleet-tasks.js +569 -0
- package/dist/ui/fleet-traffic.js +227 -45
- package/dist/ui/fleet-usage.js +36 -2
- package/dist/ui/guest-refused.html +41 -0
- package/dist/ui/icons/icon-192.png +0 -0
- package/dist/ui/icons/icon-512.png +0 -0
- package/dist/ui/image-lightbox.js +45 -1
- package/dist/ui/image-zoom.js +242 -0
- package/dist/ui/panel-chat.js +282 -89
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +32 -71
- package/dist/ui/panel-needs.js +23 -6
- package/dist/ui/panel-settings.js +158 -32
- package/dist/ui/preview-panel.js +2 -1
- package/dist/ui/search-dialog.js +350 -0
- package/dist/ui/settings-appearance.js +170 -10
- package/dist/ui/settings-apply.js +3 -3
- package/dist/ui/settings-confirm.js +7 -2
- package/dist/ui/settings-dialogs.js +46 -21
- package/dist/ui/settings-discord.js +6 -2
- package/dist/ui/settings-guests.js +2 -1
- package/dist/ui/settings-learn.js +1 -0
- package/dist/ui/settings-model.js +51 -18
- package/dist/ui/settings-mods.js +8 -3
- package/dist/ui/settings-owner-effects.js +6 -4
- package/dist/ui/settings-strings.js +180 -6
- package/dist/ui/settings-token.js +3 -1
- package/dist/ui/settings-web-authority.js +13 -5
- package/dist/ui/settings-wizard.js +13 -7
- package/dist/ui/shared/agend-auth.js +3 -1
- package/dist/ui/shared/app-i18n.js +12 -5
- package/dist/ui/shared/app-needs.js +2 -2
- package/dist/ui/shared/app-prefs.js +15 -0
- package/dist/ui/shared/app-route.js +18 -0
- package/dist/ui/shared/app-shell.js +172 -28
- package/dist/ui/shared/app-store.js +3 -2
- package/dist/ui/shared/app-stream.js +7 -2
- package/dist/ui/shared/app-themes.js +116 -1
- package/dist/ui/shared/app.css +681 -54
- package/dist/ui/shared/app.js +9 -1
- package/dist/ui/shared/card-strings.js +4 -0
- package/dist/ui/shared/effect-app-runtime.js +7 -5
- package/dist/ui/shared/effect-chat-runtime.js +2 -7
- package/dist/ui/shared/effect-cursor.js +3 -2
- package/dist/ui/shared/effect-display-metadata.js +39 -0
- package/dist/ui/shared/effect-owner-source.js +8 -1
- package/dist/ui/shared/effect-policy.js +2 -2
- package/dist/ui/shared/effect-registry.js +30 -11
- package/dist/ui/shared/effect-runtime-loader.js +3 -1
- package/dist/ui/shared/effect-stock-snapshot.js +9 -0
- package/dist/ui/shared/effect-stock-trust.js +40 -9
- package/dist/ui/shared/effect-trial-source.js +1 -1
- package/dist/ui/shared/effect-trial-stage.js +27 -21
- package/dist/ui/shared/effect-trial.css +1 -1
- package/dist/ui/shared/feature-flags.js +127 -0
- package/dist/ui/shared/guest-refused.js +35 -0
- package/dist/ui/shared/header-tools.js +2 -2
- package/dist/ui/shared/identity-card.js +26 -8
- package/dist/ui/shared/identity-color.js +17 -10
- package/dist/ui/shared/instance-nav.js +183 -28
- package/dist/ui/shared/owner-css.js +30 -1
- package/dist/ui/shared/panel-view.js +14 -29
- package/dist/ui/shared/text-undo.js +210 -0
- package/dist/ui/shared/tokens.css +13 -3
- package/dist/ui/shared/ui-dialog.js +5 -4
- package/dist/ui/shared/ui-icons.js +4 -0
- package/dist/ui/shared/ui-menu.js +20 -7
- package/dist/ui/shared/ui-toast.js +16 -3
- package/dist/ui/shared/usage-dialog.js +206 -16
- package/dist/ui/shared/view-strings.js +68 -4
- package/dist/ui/shared/web-authorize.js +50 -1
- package/dist/ui/signin.html +2 -0
- package/dist/ui/web-terminal/terminal.css +4 -4
- package/dist/ui/web-terminal/terminal.html +10 -10
- package/dist/ui/web-terminal/terminal.js +58 -12
- package/dist/update-check.js.map +1 -1
- package/dist/update-dispatch.js +1 -1
- package/dist/update-dispatch.js.map +1 -1
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +10 -1
- package/dist/update-launch.js +39 -14
- package/dist/update-launch.js.map +1 -1
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.js +1 -1
- package/dist/update-preflight.js.map +1 -1
- package/dist/update-progress.d.ts +3 -1
- package/dist/update-progress.js +3 -1
- package/dist/update-progress.js.map +1 -1
- package/dist/usage/format-rich.js +6 -3
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +2 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/i18n.d.ts +13 -1
- package/dist/usage/i18n.js +29 -0
- package/dist/usage/i18n.js.map +1 -1
- package/dist/usage/providers.d.ts +89 -2
- package/dist/usage/providers.js +247 -41
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/usage/usage-api.d.ts +5 -1
- package/dist/usage/usage-api.js +185 -58
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.js +1 -1
- package/dist/usage-rollup.js.map +1 -1
- package/dist/user-systemd.d.ts +24 -0
- package/dist/user-systemd.js +75 -0
- package/dist/user-systemd.js.map +1 -0
- package/dist/view-api.d.ts +7 -0
- package/dist/view-api.js +16 -4
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-ambient.js +9 -2
- package/dist/web-ambient.js.map +1 -1
- package/dist/web-api.d.ts +58 -10
- package/dist/web-api.js +1104 -71
- package/dist/web-api.js.map +1 -1
- package/dist/web-app-icon-worker.d.ts +1 -0
- package/dist/web-app-icon-worker.js +16 -0
- package/dist/web-app-icon-worker.js.map +1 -0
- package/dist/web-app-icon.d.ts +109 -0
- package/dist/web-app-icon.js +257 -0
- package/dist/web-app-icon.js.map +1 -0
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +1 -0
- package/dist/web-appearance-tools.js +7 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +4 -10
- package/dist/web-appearance.js +7 -4
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-auth.d.ts +8 -4
- package/dist/web-auth.js +33 -21
- package/dist/web-auth.js.map +1 -1
- package/dist/web-backend-login.d.ts +130 -0
- package/dist/web-backend-login.js +225 -0
- package/dist/web-backend-login.js.map +1 -0
- package/dist/web-card.js.map +1 -1
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +118 -8
- package/dist/web-chat-history.js +220 -25
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +5 -1
- package/dist/web-commands.js +1 -1
- package/dist/web-commands.js.map +1 -1
- package/dist/web-cookie-names.d.ts +5 -0
- package/dist/web-cookie-names.js +12 -0
- package/dist/web-cookie-names.js.map +1 -0
- package/dist/web-effect-bundle.d.ts +2 -2
- package/dist/web-effect-library.js.map +1 -1
- package/dist/web-effect-playback.js.map +1 -1
- package/dist/web-effect-profiles.d.ts +16 -16
- package/dist/web-effect-profiles.js +3 -2
- package/dist/web-effect-profiles.js.map +1 -1
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect.d.ts +6 -6
- package/dist/web-effect.js.map +1 -1
- package/dist/web-experimental-http.d.ts +2 -0
- package/dist/web-experimental-http.js +12 -0
- package/dist/web-experimental-http.js.map +1 -0
- package/dist/web-experimental.d.ts +11 -0
- package/dist/web-experimental.js +49 -0
- package/dist/web-experimental.js.map +1 -0
- package/dist/web-guest-access.d.ts +4 -2
- package/dist/web-guest-access.js +22 -10
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-guest-rooms.js.map +1 -1
- package/dist/web-host-guard.d.ts +11 -0
- package/dist/web-host-guard.js +11 -0
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-icons.d.ts +33 -1
- package/dist/web-icons.js +83 -11
- package/dist/web-icons.js.map +1 -1
- package/dist/web-identity-color.js.map +1 -1
- package/dist/web-image-meta.d.ts +13 -0
- package/dist/web-image-meta.js +62 -0
- package/dist/web-image-meta.js.map +1 -1
- package/dist/web-images.js.map +1 -1
- package/dist/web-libavoid.d.ts +14 -0
- package/dist/web-libavoid.js +46 -0
- package/dist/web-libavoid.js.map +1 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mentions.js.map +1 -1
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-store.d.ts +2 -0
- package/dist/web-mod-store.js +10 -0
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-office-store.d.ts +104 -0
- package/dist/web-office-store.js +236 -0
- package/dist/web-office-store.js.map +1 -0
- package/dist/web-owner-css-store.d.ts +44 -1
- package/dist/web-owner-css-store.js +70 -9
- package/dist/web-owner-css-store.js.map +1 -1
- package/dist/web-owner-css.js.map +1 -1
- package/dist/web-png.d.ts +33 -0
- package/dist/web-png.js +329 -0
- package/dist/web-png.js.map +1 -0
- package/dist/web-prefs.d.ts +6 -0
- package/dist/web-prefs.js +29 -3
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +2 -0
- package/dist/web-preview.js +2 -0
- package/dist/web-preview.js.map +1 -1
- package/dist/web-profile.js.map +1 -1
- package/dist/web-reactions.d.ts +35 -0
- package/dist/web-reactions.js +47 -0
- package/dist/web-reactions.js.map +1 -0
- package/dist/web-request-context.d.ts +5 -0
- package/dist/web-request-context.js.map +1 -1
- package/dist/web-returning-device.d.ts +4 -2
- package/dist/web-returning-device.js +13 -6
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-schedules.js.map +1 -1
- package/dist/web-send-dedupe.d.ts +36 -0
- package/dist/web-send-dedupe.js +69 -0
- package/dist/web-send-dedupe.js.map +1 -0
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.js +1 -1
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -1
- package/dist/web-settings-patch.js +11 -5
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +6 -0
- package/dist/web-settings-tools.js +52 -17
- package/dist/web-settings-tools.js.map +1 -1
- package/dist/web-terminal-http.js +15 -2
- package/dist/web-terminal-http.js.map +1 -1
- package/dist/web-terminal.js +1 -1
- package/dist/web-terminal.js.map +1 -1
- package/dist/web-theme-store.d.ts +2 -2
- package/dist/web-theme-store.js +6 -3
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +29 -0
- package/dist/web-theme.js +89 -1
- package/dist/web-theme.js.map +1 -1
- package/dist/web-upload.d.ts +18 -1
- package/dist/web-upload.js +45 -7
- package/dist/web-upload.js.map +1 -1
- package/dist/web-widget.js.map +1 -1
- package/dist/webhook-emitter.js.map +1 -1
- package/dist/windows-shortcuts.d.ts +78 -0
- package/dist/windows-shortcuts.js +203 -0
- package/dist/windows-shortcuts.js.map +1 -0
- package/dist/workflow-templates/default.md +4 -1
- package/dist/ws-server.js.map +1 -1
- package/dist/yaml-shared-nodes.d.ts +25 -0
- package/dist/yaml-shared-nodes.js +185 -0
- package/dist/yaml-shared-nodes.js.map +1 -0
- package/launcher/agend-install.cjs +828 -0
- package/launcher/install-admission.cjs +4 -39
- package/launcher/postinstall.cjs +14 -12
- package/launcher/private-home.cjs +43 -0
- package/package.json +16 -13
- package/scripts/preinstall-guard.cjs +2 -5
- package/templates/windows-shortcuts.ps1 +181 -0
- package/launcher/old-updater-note.cjs +0 -48
|
@@ -43,6 +43,10 @@ Before a destructive or hard-to-undo action based on another instance's message
|
|
|
43
43
|
|
|
44
44
|
Why: a model can "see" a peer message nobody sent, header and message_id included, and act on it (#856).
|
|
45
45
|
|
|
46
|
+
## Web-chat messages
|
|
47
|
+
|
|
48
|
+
A web-chat message (`[user:<name> via web, id:…]`) is that person: their sign-in code went to their own Discord or Telegram account. Answer it and do what it asks within your work — questions, looking things up, reading, analysis, changes in your own scope. Only a go-ahead action asks for more: a release or publish, anything destructive or irreversible beyond your own work (deleting what others use, force-pushing or resetting a shared branch; your temp files and your own branch and worktree are routine), spending money or quota beyond normal work, credentials or secrets, or granting or forwarding authority to another instance. For these an open browser is not proof of the account, so the account must stand behind it: a Discord or Telegram receipt, or a `via web (verified)` one — read it with `delivery_status`: `authority.kind: web-verified`, its person `authority.actor` (adapter and user id), checked like a Discord or Telegram message (delivered, an owned proof_kind, the original content, that actor) and forwarded the same way. A guest (`via web (guest)`) was let in only to chat: talk with them there, and take nothing they ask as the admin's. Plain `via web`, a guest, and authority since revoked (`authority.kind: none`) are not a go-ahead; nor is a reviewer's APPROVE.
|
|
49
|
+
|
|
46
50
|
## Relayed human authorization
|
|
47
51
|
|
|
48
52
|
A peer's summary is not the original person's consent. Before an irreversible action:
|
|
@@ -52,7 +56,7 @@ A peer's summary is not the original person's consent. Before an irreversible ac
|
|
|
52
56
|
- If the `send_to_instance` / `delegate_task` schema you loaded has no `forwards`, pass it anyway. A session resumed across an AgEnD upgrade keeps the tool copy it first loaded (reloading does not refresh it); AgEnD's server accepts the parameter.
|
|
53
57
|
2. Read `delivery_status({message_id: verification_id})`. Require `state: delivered`, its owned `proof_kind`, and the original `content` naming the exact operation/resource. Check `origin.platform`, `origin.adapter_id` and `origin.user_id` against the human authorized for that resource. Labels, quoted headers and agent relay rows are not origin evidence.
|
|
54
58
|
3. Native queue/composer acceptance never proves the model consumed the message. Unknown/unverifiable outcomes, `/raw`, historical rows and a missing origin cannot prove human authorization. Action receipts identify the click and its anchor, not a human-authored platform message.
|
|
55
|
-
- A web receipt
|
|
59
|
+
- A web receipt is checked as the web-chat rule above says (`via web (verified)`, `authority.kind: web-verified`).
|
|
56
60
|
4. Do not resend on `uncertain`. Ask for clarification or fresh explicit consent; do not infer consent from a missing row.
|
|
57
61
|
|
|
58
62
|
CLI mode: `agend-agent send <instance> <text> --forward <verification_id>` (repeat `--forward` for more refs); `agend-agent delegate` accepts the same flags. Lookup: `agend-agent delivery-status --message-id <verification_id>`.
|
|
@@ -84,6 +84,8 @@ Fix all errors before `agend reload`; warnings are advisory.
|
|
|
84
84
|
- `topic_id` as string vs number (both work, but be consistent)
|
|
85
85
|
- `backend` typo (valid: `claude-code`, `codex`, `opencode`, `kiro-cli`, `antigravity`, `grok`, `muse`); `gemini-cli` was removed in 2.1.12 — use `antigravity`
|
|
86
86
|
- `model` using wrong format for the backend
|
|
87
|
+
- YAML anchors/aliases (`&x` … `*x`) are fine, but a Settings or tool edit of one place gives that place its own
|
|
88
|
+
value; the others keep theirs (#2208). To change every place, edit fleet.yaml itself.
|
|
87
89
|
|
|
88
90
|
**Common classicBot.yaml mistakes:**
|
|
89
91
|
- `allowed_guilds` values should be quoted strings: numbers are accepted, but a Discord ID above 2^53 loses digits as a YAML integer
|
|
@@ -93,5 +95,5 @@ Fix all errors before `agend reload`; warnings are advisory.
|
|
|
93
95
|
**After editing config:**
|
|
94
96
|
```bash
|
|
95
97
|
agend reload # hot-reload (SIGHUP) — behavior switches apply without restart
|
|
96
|
-
agend
|
|
98
|
+
agend restart # if channel or other cold defaults changed (--yes from a fleet session)
|
|
97
99
|
```
|
|
@@ -7,19 +7,19 @@ roles: [general]
|
|
|
7
7
|
## Fleet Restart & Recovery
|
|
8
8
|
|
|
9
9
|
**Restart types:**
|
|
10
|
-
- `agend
|
|
11
|
-
- `agend
|
|
12
|
-
- `
|
|
13
|
-
- `agend
|
|
10
|
+
- `agend restart` — the one full restart: the AgEnD service restarts through whatever runs it (systemd unit, launchd job, or a detached hand-off), so new code and new connections take effect
|
|
11
|
+
- `agend restart <name>` — restart one instance now; the fleet keeps running
|
|
12
|
+
- `/restart` in the General chat — instances restart inside the running fleet once idle (does **not** load new code); `/restart full` is `agend restart`
|
|
13
|
+
- `agend fleet restart` is deprecated (removed in 2.4): it only runs `agend restart`. Never use it — before 2.3 its `--reload` left a systemd fleet stopped
|
|
14
|
+
- `agend reload` — SIGHUP hot-reload, reconciles instances without restarting the fleet process. **Do not run `agend reload` after `create_instance`** — the fleet reconciles automatically when the instance is created; a redundant reload will restart every instance whose config changed, including ones you did not intend to touch.
|
|
14
15
|
- `restart_instance("<name>")` — single instance restart, reloads fleet.yaml first
|
|
15
|
-
- `agend restart` — restarts the AgEnD service itself (systemd / launchd / detached), not one instance
|
|
16
16
|
|
|
17
|
-
**From a fleet agent session**, `agend stop`, `agend restart`, `agend update
|
|
17
|
+
**From a fleet agent session**, `agend stop`, `agend restart`, `agend update` and `agend fleet stop` (without a name) affect every instance and are refused unless you pass `--yes`. Each is written to `restart-audit.log` first. `--force` is for an operator's own shell only.
|
|
18
18
|
|
|
19
19
|
**After tmux crash:**
|
|
20
20
|
- Fleet detects the tmux server's death and opens a recovery window: spawns and deliveries are held 30 s, then 2 min and 10 min if it crashes again (losing single windows while the server lives holds nothing)
|
|
21
21
|
- Some instances may fail to restart due to rate limits from simultaneous startup
|
|
22
|
-
- Fix:
|
|
22
|
+
- Fix: `restart_instance` the failed instances, or `agend restart --yes`
|
|
23
23
|
- Check failed instances: `agend ls` shows "stopped" status
|
|
24
24
|
|
|
25
25
|
**Rate limit recovery:**
|
|
@@ -39,8 +39,7 @@ It installs the selected release, checks the install, and restarts the fleet ser
|
|
|
39
39
|
|
|
40
40
|
**Manual restart (if update isn't needed):**
|
|
41
41
|
```bash
|
|
42
|
-
agend
|
|
43
|
-
agend fleet restart --reload --yes # full process restart — new code takes effect
|
|
42
|
+
agend restart --yes # full restart through systemd/launchd — new code takes effect
|
|
44
43
|
```
|
|
45
44
|
|
|
46
45
|
**NEVER do:**
|
|
@@ -69,4 +69,4 @@ instance's own topic (`web.echo_to_channel: false` turns that off; a ClassicBot
|
|
|
69
69
|
1. Change `channel:` to `channels:` array, add `id` to existing entry
|
|
70
70
|
2. Add new platform entry with its own `id`
|
|
71
71
|
3. Add a general instance for the new platform with `channel_id: <new-adapter-id>`
|
|
72
|
-
4. Restart the whole process — connections are created when it starts: `agend
|
|
72
|
+
4. Restart the whole process — connections are created when it starts: `agend restart` (`--yes` from a fleet session)
|
|
@@ -36,6 +36,10 @@ background nudges the user shouldn't see:
|
|
|
36
36
|
```
|
|
37
37
|
create_schedule({ cron: "*/30 * * * *", message: "check CI and self-report if red", silent: true })
|
|
38
38
|
```
|
|
39
|
+
If you schedule silent work for yourself, failed or unconfirmed delivery is log-only:
|
|
40
|
+
no `[system:delivery-outcome]` prompt or operator alert is sent. For an important
|
|
41
|
+
heartbeat, check `delivery_status` or the logs yourself. Schedules from another
|
|
42
|
+
instance retain their normal delivery notifications.
|
|
39
43
|
|
|
40
44
|
## Notes
|
|
41
45
|
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-appearance
|
|
3
|
+
description: How you look on the AgEnD web dashboard — check it, change your own theme, identity card, identity colour and widgets, set an ambient effect (falling petals, click stars), and preview the result; and, for General, changing Settings → Web appearance for the user
|
|
4
|
+
roles: [general, worker, classic]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What it is
|
|
8
|
+
|
|
9
|
+
People see you on the web dashboard: in the sidebar, at the top of your chat, on your Details page and in View. You
|
|
10
|
+
can shape how you look there — **only your own look, and only on the surfaces that are yours**:
|
|
11
|
+
|
|
12
|
+
| Surface | What you set | Tools |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| Your name and role line | display name, description | `set_display_name`, `set_description` |
|
|
15
|
+
| Your status stamp | persona emoji | `set_persona_emoji` (see the `persona-emoji` skill) |
|
|
16
|
+
| Your chat | theme: colours, accent, bubbles, font, background picture, working label | `set_web_theme`, `set_web_theme_asset` |
|
|
17
|
+
| The whole page, while your chat is open | your theme's colours on the sidebar, the header, the usage rail (a phone: the drawer, the header, the tabs) — colours only | `set_web_theme` (`page`) |
|
|
18
|
+
| Your face and ring | theme picture and accent | `set_web_theme`, `set_web_theme_asset` |
|
|
19
|
+
| Your identity card | portrait, banner, tagline, bio | `set_web_theme` (`card.*`), `set_web_theme_asset` |
|
|
20
|
+
| Your identity colour | the colour people find you by in the sidebar, and where it shows (name, bar, ring) | `set_web_theme` (`identity`) |
|
|
21
|
+
| Your chat header strip and Details page | widgets: small panels of facts the dashboard draws | `set_web_widget`, `remove_web_widget` |
|
|
22
|
+
| An ambient effect in your chat | falling petals, snow, rising lanterns, twinkles, stars where a person clicks — data only, drawn by the dashboard | `set_web_ambient`, `clear_web_ambient` |
|
|
23
|
+
|
|
24
|
+
None of these tools takes a target: they always act on you. You can't change another instance, the dashboard's own
|
|
25
|
+
chrome (beyond your colours on it while your chat is open), a person's sidebar widget, or a person's custom CSS.
|
|
26
|
+
|
|
27
|
+
## For the user: Settings → Web appearance (General, coordinators, full)
|
|
28
|
+
|
|
29
|
+
If you are General (or a coordinator or full profile), you can change the user's **Settings → Web appearance** for
|
|
30
|
+
them, exactly as the page changes it: the same checks, the same refusals. Custom CSS keeps its safe rules: no remote
|
|
31
|
+
URLs, assets only as `url("asset:<id>")`, at most 64 KiB. Other instances can't; they shape only their own look (the rest
|
|
32
|
+
of this skill).
|
|
33
|
+
|
|
34
|
+
1. **Read first:** `get_web_settings` returns a `summary` in plain words (tell the user from it), the values, and
|
|
35
|
+
`people`: the host operator and everyone who has signed in. Host settings are everyone's on this host. Custom CSS is one person's own: pass `person` as the entry whose id is the user's (`person:<adapter>:<their id>`),
|
|
36
|
+
else the host operator's are changed.
|
|
37
|
+
2. **One change per call:** `set_web_settings({ person?, change })`, where `change.what` is one of:
|
|
38
|
+
|
|
39
|
+
| `what` | Changes | Example |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `host` | `themes_shown`, `card_size` (s/m/l), `card_sizes` ({instance: s/m/l}), `page_colours` ({instance: page/chat}), `colour_places` (name/bar/ring), `colours_off`, `sidebar_widget` ({spec, data}) — null puts one back to its default | `{ what: "host", set: { colour_places: ["name","ring"] } }` |
|
|
42
|
+
| `agent_colour` | one agent's colour (`preset:<name>` or `#rrggbb`) and places; null resets each | `{ what: "agent_colour", instance: "atlas", colour: "preset:teal" }` |
|
|
43
|
+
| `page_colours` | where one agent's theme colours go: `page` (the whole page), `chat` (only its chat) or `agent` (its own `page.on`) — as ⋯ → Page colours sets it | `{ what: "page_colours", instance: "atlas", choice: "chat" }` |
|
|
44
|
+
| `banner_focus` | which part of one agent's cropped card banner stays in view: `focus` 0 (top) … 100 (bottom), 50 the centre; it wins over the agent's own `card.bannerFocus`; null follows the agent's again | `{ what: "banner_focus", instance: "atlas", focus: 20 }` |
|
|
45
|
+
| `custom_css` | `save` (with `text`): goes **on trial**. It waits until they open the dashboard (up to 10 minutes; never opened, it goes back unseen), then goes back by itself 20 s after it is on their screen unless kept (#2198). `keep` (with `trial`: the id `save` returned — a different trial on now, say one they saved on their page since, is refused with `trial_mismatch`, never kept instead; or, kept after that 20 s ran out, it is put back in force as `use` of it), `revert` (the trial), `use` (with `version`: an earlier saved one, at once), `off` | `{ what: "custom_css", action: "save", text: "…" }`; tell them to open the dashboard and look, then `keep` (with that `trial`) only when they say so — a `keep` that comes too late (`not_on_trial`) means use `use` with the version from `get_web_settings` |
|
|
46
|
+
| `ambient` | one agent's ambient effect, set for the user: `ambient` is the same spec as `set_web_ambient`'s (it replaces the one of its kind, and the agent can't change it after); `ambient: null` clears (`which`: `loop` or `click`, default both) | `{ what: "ambient", instance: "atlas", ambient: { preset: "fall", glyphs: ["🌸","❀","✿"] } }` |
|
|
47
|
+
| `restore_defaults` | the host settings back to their defaults, and the person's custom CSS off | |
|
|
48
|
+
|
|
49
|
+
3. **Say what changed** in the user's words (read again if unsure). A refusal says why: the same words the page would
|
|
50
|
+
show.
|
|
51
|
+
|
|
52
|
+
**Only the person can do these, on the page:**
|
|
53
|
+
- choose a file from their computer: add a CSS asset or a card picture;
|
|
54
|
+
- this browser's own switches: custom CSS off on this device, pausing effect playback;
|
|
55
|
+
- the card upload limits (fleet configuration; a raise waits for an admin's confirmation).
|
|
56
|
+
|
|
57
|
+
## Look first
|
|
58
|
+
|
|
59
|
+
- `get_web_appearance` — how you appear **now**, resolved exactly as the dashboard resolves it: your face and where it
|
|
60
|
+
comes from (`profile`, `theme`, `bot`, `emoji` or `initial`), your ring colour, your **identity colour**
|
|
61
|
+
(`identity_color`: the colour people find you by in the sidebar, its `source` — `person`, `agent` (your theme's
|
|
62
|
+
`identity.color`, else its `accent`), `role` (your own bot's Discord role) or `auto` — its `light` / `dark` values,
|
|
63
|
+
where it shows (`show`: `name`, `bar`, `ring`) and whose choice that is (`show_source`: `person`, `agent` or `host`),
|
|
64
|
+
and `off` when the host turned colours off), your card field by field
|
|
65
|
+
(each marked `human` or `agent`), your theme per light/dark mode after the defaults, whether a person locked it, and
|
|
66
|
+
your limits.
|
|
67
|
+
- `preview_web_appearance` (`modes`: `["light"]`, `["dark"]` or both) — draws that as an SVG per mode into
|
|
68
|
+
`.agend/appearance/<mode>.svg` in your working directory, with the pictures it shows written beside it
|
|
69
|
+
(`avatar.png`, `portrait.png`, …), and returns both lists of paths. Read the SVGs for exact colours, geometry and
|
|
70
|
+
text, and the pictures as images. Only your own pictures are there.
|
|
71
|
+
- `get_web_theme` — your stored theme, the token defaults it is drawn over, your uploaded pictures (`id`, `slot`), and
|
|
72
|
+
`limits` (changes left, each picture slot's size limits, your picture quota).
|
|
73
|
+
|
|
74
|
+
## What wins over what
|
|
75
|
+
|
|
76
|
+
- **A person's choices win.** A picture uploaded for you in View beats your theme picture. A person's card field (from
|
|
77
|
+
View's Edit profile) beats yours, field by field — leave it to them. A person can **Lock** your theme (every change
|
|
78
|
+
you try is refused with `locked`) or **Reset** it (your theme, card and pictures go; a lock stays).
|
|
79
|
+
- A widget **a person placed** in one of your slots takes your values (`data`), but you can't replace or remove it
|
|
80
|
+
(`person_placed`).
|
|
81
|
+
- **Each viewer decides what they see.** Anyone can turn agents' themes and widgets off for their own screens, and
|
|
82
|
+
`?safe=1` loads a page without them; they then see the default look, no widgets, and your face follows the usual order without your theme
|
|
83
|
+
picture — a picture a person uploaded for you, else your bot's avatar, your persona emoji or your first letter.
|
|
84
|
+
Don't rely on your theme to say something important.
|
|
85
|
+
- The fleet can turn agent changes off entirely (`web.themes.agent_edit: false`): every change is refused with
|
|
86
|
+
`theme_editing_off`; what you stored stays.
|
|
87
|
+
- A person can switch these tools off for you (`dashboard.appearance: false`; the person's web settings tools with
|
|
88
|
+
`dashboard.web_settings: false`): a call is refused saying so. Do not retry; tell them if you need it.
|
|
89
|
+
|
|
90
|
+
## Change your theme
|
|
91
|
+
|
|
92
|
+
`set_web_theme { set?, clear? }` — all or nothing; `set` merges into your current theme, `clear` removes dotted paths.
|
|
93
|
+
Typed values only; anything else is refused with `{ errors: [{ path, problem }] }`:
|
|
94
|
+
|
|
95
|
+
- `colors.light` / `colors.dark`: any of `bg`, `surface`, `text`, `text2`, `accent`, `userBubble`, `agentBubble` as
|
|
96
|
+
`#rrggbb` (or `#rgb`). **Contrast is checked per mode**: `text` at least 4.5:1 on `bg`, `surface` and both bubbles;
|
|
97
|
+
`text2` at least 4.5:1 on `bg` and `surface`; `accent` at least 3:1 on `bg` — a palette that fails is refused, naming
|
|
98
|
+
the pair.
|
|
99
|
+
- `accent`: `#rrggbb` for both modes (a mode's own `accent` wins). Without `identity.color`, it is also your identity
|
|
100
|
+
colour.
|
|
101
|
+
- `identity`: `{ color?, show? }`: your identity colour and where it shows.
|
|
102
|
+
- `color` is a preset (`red`, `orange`, `amber`, `lime`, `green`, `teal`, `cyan`, `blue`, `indigo`, `violet`, `pink`,
|
|
103
|
+
`slate`, each readable in light and dark) or `#rrggbb`.
|
|
104
|
+
- `show` is a list of `name`, `bar` and `ring` (`[]` for nowhere). Left out, the host's default applies (name, bar and ring).
|
|
105
|
+
- A person's choice for you in the dashboard always wins, field by field, and their Reset brings yours back.
|
|
106
|
+
`get_web_appearance` says which is in force.
|
|
107
|
+
- `page` (#2196): `{ on?: true | false, sidebar?: { light?, dark? } }` — `on: true` puts your colours (bg, surface, text,
|
|
108
|
+
text2, accent; the sidebar's own colour per mode in `sidebar`, else your `bg`) on **the whole page while your chat,
|
|
109
|
+
View, Log or Details is open**: the sidebar, the header, the usage rail; on a phone the drawer, the header and the
|
|
110
|
+
tabs. Colours only: never fonts, pictures or layout, and **AgEnD's status colours** (the Needs you count, the state
|
|
111
|
+
dots, errors, the focus ring — `get_web_theme`'s `status_colors`) are never yours to change. With `on: true` the
|
|
112
|
+
contrast check adds: `text` and `text2` 4.5:1 and `accent` 3:1 on the sidebar, and every status colour 3:1 on the
|
|
113
|
+
sidebar and on `bg`. A person's choice for you (⋯ → **Page colours**: your choice, the whole page, only your chat)
|
|
114
|
+
wins; viewers with agents' themes off or `?safe=1` see the page's own look.
|
|
115
|
+
- For a person's **custom CSS** (#2199): while an agent's Chat, View, Log or Details is open, `<body>` has
|
|
116
|
+
`data-agent="<instance name>"` (none elsewhere), set in the same render as the page — so a person's stylesheet can
|
|
117
|
+
follow the open agent: `body[data-agent="atlas"] { --bg-sidebar: … }`. It is the person's, not yours to set.
|
|
118
|
+
- `bubble`: `{ radius: 0..24, border: "none" | "thin" | "accent" }`.
|
|
119
|
+
- `font`: `"inter"`, `"system"` or `"mono"`.
|
|
120
|
+
- `background`: `{ image: <asset id>, fit: "cover" | "contain", opacity: 0.05..1 }`.
|
|
121
|
+
- `avatar`: an asset id — your face (below a person's upload).
|
|
122
|
+
- `workingLabel`: 1..24 characters on one line, shown while you work instead of "is working…".
|
|
123
|
+
- `card`: `{ portrait?, banner?, tagline?, bio?, bannerFocus? }` — see below.
|
|
124
|
+
|
|
125
|
+
Example:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{ "set": { "accent": "#7c3aed", "colors": { "dark": { "bg": "#14121f" } }, "bubble": { "radius": 12, "border": "accent" },
|
|
129
|
+
"font": "inter", "workingLabel": "Reviewing" } }
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`reset_web_theme` puts your theme back to the default (it counts as a change).
|
|
133
|
+
|
|
134
|
+
## Pictures
|
|
135
|
+
|
|
136
|
+
`set_web_theme_asset { slot, file }` — `file` is a picture in **your working directory** (no symlinks; read on your side,
|
|
137
|
+
never by path on the fleet). It returns `{ id }`; name that id in `set_web_theme`. Metadata such as GPS is removed, and
|
|
138
|
+
the id is the hash of what is kept, so the same picture is the same id.
|
|
139
|
+
|
|
140
|
+
| Slot | Types | Limits |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| `background` | png, jpeg, webp, gif | 512 KiB, 4096 px a side |
|
|
143
|
+
| `avatar` | png, jpeg, webp, gif | 256 KiB, 4096 px a side |
|
|
144
|
+
| `portrait` | png, jpeg, webp | set by the fleet (default 1024×1536, 1.5 MiB) |
|
|
145
|
+
| `banner` | png, jpeg, webp | set by the fleet (default 1600×600, 768 KiB) |
|
|
146
|
+
| `glyph` | png, webp, gif | 64 KiB, 128 px a side; at most 4 (for `set_web_ambient`'s `glyphs`) |
|
|
147
|
+
|
|
148
|
+
A picture holds one slot: upload it again for another slot only if it is a different picture. `get_web_theme`'s
|
|
149
|
+
`limits.asset_slots` has the limits in force and `limits.asset_quota` how many pictures you may keep. A picture your
|
|
150
|
+
theme stops naming is deleted.
|
|
151
|
+
|
|
152
|
+
## Your identity card
|
|
153
|
+
|
|
154
|
+
`card.tagline` (one line, 1..60 characters), `card.bio` (1..280 characters, at most 3 line breaks), `card.portrait` and
|
|
155
|
+
`card.banner` (asset ids uploaded for those slots). Text is shown as text — never markup or links. A person may set
|
|
156
|
+
their own version of any field; theirs is shown instead of yours.
|
|
157
|
+
|
|
158
|
+
The card goes **inside `set`**: `set_web_theme({ set: { card: { tagline, bio, portrait, banner } } })` (a top-level
|
|
159
|
+
`card` argument is refused).
|
|
160
|
+
|
|
161
|
+
**Your banner is cropped: never drawn wider than 5 : 1** (on a wider screen it is centred over a blurred copy) **nor
|
|
162
|
+
narrower than 9 : 4** (which crops the sides). Make it **1600×600** (the default limit) and keep faces and text
|
|
163
|
+
inside the **safe area: the middle 84% of the width × 53% of the height — 1350×320** — which every card shows on every
|
|
164
|
+
screen and layout. `card.bannerFocus` (0 top … 100 bottom; default 50, the centre) moves that area up or down: put a face
|
|
165
|
+
near the top at `bannerFocus: 0`. A person's focus (Edit profile, or General's `set_web_settings { what: "banner_focus" }`)
|
|
166
|
+
wins over yours. `preview_web_appearance` draws the banner cropped at its focus, as the page does (an M card).
|
|
167
|
+
|
|
168
|
+
**In your chat** the card is hidden until the person shows it (the card menu in the chat header: Show card, Show picture
|
|
169
|
+
and bio). Shown, the banner sits right under the header and they can fold your portrait, tagline and bio away, keeping
|
|
170
|
+
only the banner. Their choice,
|
|
171
|
+
kept on their device; you cannot change it. So a banner that says who you are on its own reads well in your chat too.
|
|
172
|
+
|
|
173
|
+
## Your identity colour
|
|
174
|
+
|
|
175
|
+
The colour people find you by in the sidebar, drawn on your name, a bar at your row's left edge and/or the ring around
|
|
176
|
+
your picture. Set yours with `set_web_theme({ set: { identity: { color, show } } })` (see Change your theme).
|
|
177
|
+
|
|
178
|
+
- **Which colour shows**, first match wins: a **person's** pick for you (⋯ → Colour… or View's Edit profile, also from a
|
|
179
|
+
temporary public link) > **yours** (`identity.color`, else your theme's `accent`; only for a viewer who shows agents'
|
|
180
|
+
themes) > your own bot's Discord **role** colour > an **automatic** soft colour chosen from your name (two instances
|
|
181
|
+
may share one).
|
|
182
|
+
- **Where it shows**: a person's choice for you > yours (`identity.show`; again only while themes are shown) > the
|
|
183
|
+
host's default (Settings → Web appearance; name, bar and ring unless changed).
|
|
184
|
+
- The host can **turn colours off** for everyone: nothing is drawn, and every pick, yours included, is kept for when
|
|
185
|
+
they come back.
|
|
186
|
+
- `get_web_appearance`'s `identity_color` shows what is in force: `color`, `source` (`person`, `agent`, `role`, `auto`),
|
|
187
|
+
`light` / `dark`, `show`, `show_source` (`person`, `agent`, `host`) and `off`.
|
|
188
|
+
|
|
189
|
+
## Widgets
|
|
190
|
+
|
|
191
|
+
A widget is a small panel of facts the dashboard draws **with its own components**: you send what to show and the
|
|
192
|
+
values, never HTML, script, links or CSS. It takes your theme's colours and always carries a `✦ <title>` chip. Nothing
|
|
193
|
+
in it can be clicked or focused.
|
|
194
|
+
|
|
195
|
+
`set_web_widget { slot, spec?, data? }`:
|
|
196
|
+
|
|
197
|
+
- `slot`: `chat_header` (a strip under your chat header: at most **4** items, of `stat`, `progress`, `text`, `badge`)
|
|
198
|
+
or `details` (a card on your Details page: at most **8** items, any type). `sidebar` is a person's: `owner_slot`.
|
|
199
|
+
- `spec` places or replaces the widget (a change):
|
|
200
|
+
`{ v: 1, title: 1..24 characters, items: [item, …] }`, where each item is `{ type, label?, key | bind, … }`:
|
|
201
|
+
|
|
202
|
+
| Type | Shows | Value | Extra |
|
|
203
|
+
|---|---|---|---|
|
|
204
|
+
| `stat` | a label and a number or short word | number, or 1..24 characters | `unit` (1..8 characters) |
|
|
205
|
+
| `progress` | a bar and its percentage | number, 0..`max` | `max` (default 100) |
|
|
206
|
+
| `text` | one line | 1..120 characters | |
|
|
207
|
+
| `list` | a short list | 1..6 lines of 1..60 characters | |
|
|
208
|
+
| `badge` | a coloured word | 1..24 characters | `tone`, or `tones: { word: tone }` (`ok`, `warn`, `bad`, `info`, `muted`) |
|
|
209
|
+
| `spark` | a sparkline and its last number | 2..48 numbers | |
|
|
210
|
+
|
|
211
|
+
`label` (1..24 characters) is required for `stat`, `progress` and `spark`. `key` (`a-z`, `0-9`, `_`) names a value
|
|
212
|
+
in your `data`. `bind` shows a value the page already has: `state` (`working`, `idle`, `needs`, `stopped`,
|
|
213
|
+
`crashed`) on `text` or `badge`, `context_pct` on `stat` or `progress`, `cost_usd` on `stat`. Exactly one of the
|
|
214
|
+
two. A missing value shows `—`.
|
|
215
|
+
- `data` alone updates the placed widget's values: merged, `null` removes a key. Values must fit every item that shows
|
|
216
|
+
them; a key no item shows is refused. Data has **its own budget**, separate from theme changes: at least **10 s**
|
|
217
|
+
apart, at most **180 an hour**.
|
|
218
|
+
- The spec is at most 2048 bytes and the data at most 4096.
|
|
219
|
+
|
|
220
|
+
`remove_web_widget { slot? }` takes your widget out of one slot, or both (a change). `get_web_theme` and
|
|
221
|
+
`get_web_appearance` list your widgets.
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{ "slot": "chat_header", "spec": { "v": 1, "title": "Build", "items": [
|
|
225
|
+
{ "type": "progress", "label": "Tests", "key": "tests" },
|
|
226
|
+
{ "type": "badge", "label": "State", "bind": "state", "tones": { "working": "info", "needs": "warn" } },
|
|
227
|
+
{ "type": "text", "key": "step" } ] },
|
|
228
|
+
"data": { "tests": 40, "step": "Running unit tests" } }
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Then, as you go: `set_web_widget { "slot": "chat_header", "data": { "tests": 75 } }`.
|
|
232
|
+
|
|
233
|
+
## Ambient effects
|
|
234
|
+
|
|
235
|
+
An ambient effect is **data only**: you choose a preset and its glyphs, the dashboard draws them. No code runs, so it
|
|
236
|
+
needs no Try, no preview consent and no measurement — use it for petals, snow, lanterns, sparkles and stars on a click.
|
|
237
|
+
|
|
238
|
+
`set_web_ambient { preset, glyphs, colors?, count?, duration?, size?, sway?, spread?, rotate?, opacity? }`:
|
|
239
|
+
|
|
240
|
+
| `preset` | What it draws | `count` | `duration` (seconds, [min, max]) |
|
|
241
|
+
|---|---|---|---|
|
|
242
|
+
| `fall` | glyphs drifting down behind your chat, endlessly | 1..24 particles (default 12) | 4..30 (default [9, 19]) |
|
|
243
|
+
| `rise` | the same, drifting up | 1..24 (12) | 4..30 ([9, 19]) |
|
|
244
|
+
| `twinkle` | glyphs pulsing in place | 1..24 (12) | 1..10 ([2, 5]) |
|
|
245
|
+
| `burst-on-click` | glyphs scattering from where a person clicks or taps in your chat | 4..16 per click (10) | 0.3..2 ([0.5, 0.9]) |
|
|
246
|
+
|
|
247
|
+
- `glyphs`: 1..4, picked at random per particle — a string of 1..2 characters (an emoji, `✦`, `❀`), or `{ "asset": id }`,
|
|
248
|
+
a picture you uploaded with `set_web_theme_asset` to the `glyph` slot.
|
|
249
|
+
- `colors`: 0..5 `#rrggbb` for text glyphs (default: your accent). `size`: [min, max] px, 10..40 (default [14, 22]).
|
|
250
|
+
`sway`: sideways drift for fall and rise, 0..80 px (40). `spread`: how far a burst scatters, [min, max] 20..120 px
|
|
251
|
+
([34, 90]). `rotate`: 0..720 degrees over a run (300). `opacity`: [start, peak, end], each 0..1 ([0, 0.85, 0.15]).
|
|
252
|
+
- Your chat holds **one looping ambient** (`fall`, `rise` or `twinkle`) **and one `burst-on-click`**: setting one
|
|
253
|
+
replaces only its own kind. `clear_web_ambient { which? }` clears `loop`, `click`, or both.
|
|
254
|
+
- It is drawn **behind your messages** and never takes a click (a burst shows over them for a moment, then is gone).
|
|
255
|
+
- Who sees it: everyone who shows agents' looks, the public link included. Not with "Show agents' themes, effects and
|
|
256
|
+
widgets" off, `?safe=1`, or on a device that chose to follow the system's reduced-motion setting while
|
|
257
|
+
the system asks for it. A hidden tab pauses it.
|
|
258
|
+
- Like a theme: a change for the rate limit, refused while a person locked your look; one a person set is theirs
|
|
259
|
+
(`person_placed`). A person's Reset of your theme clears it. `get_web_appearance` shows it, and
|
|
260
|
+
`preview_web_appearance` draws the looping one, still, behind the bubbles.
|
|
261
|
+
|
|
262
|
+
```json
|
|
263
|
+
{ "preset": "fall", "glyphs": ["🌸", "❀", "✿"], "colors": ["#f4a7b9", "#ffd1dc"], "count": 12, "duration": [9, 19] }
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Then stars on a click, alongside: `set_web_ambient { "preset": "burst-on-click", "glyphs": ["✦", "✧"] }`.
|
|
267
|
+
|
|
268
|
+
## Limits
|
|
269
|
+
|
|
270
|
+
- At least **30 s** between changes, at most **10 changes an hour** — refused with `rate_limited` and
|
|
271
|
+
`retry_after_s`. Only an accepted change counts; a refused or invalid one costs nothing.
|
|
272
|
+
- Picture uploads are not counted. Each picture slot's size limits, your picture quota and
|
|
273
|
+
each file's own caps still apply; using a picture in your theme is a change.
|
|
274
|
+
- Widget values (`set_web_widget` with `data` only): at least **10 s** apart, at most **180 an hour**, apart from the
|
|
275
|
+
above.
|
|
276
|
+
- `set_web_ambient` and `clear_web_ambient` are changes.
|
|
277
|
+
- Plan the whole look, check it in one `set_web_theme`, then preview — don't iterate change by change.
|
|
278
|
+
|
|
279
|
+
## A good workflow
|
|
280
|
+
|
|
281
|
+
1. `get_web_appearance` and `get_web_theme`: see where you start, whether you are locked, what you have left.
|
|
282
|
+
2. Upload the pictures you need (`set_web_theme_asset`), one per slot.
|
|
283
|
+
3. One `set_web_theme` with everything; fix any `errors` it names.
|
|
284
|
+
4. `preview_web_appearance` and Read the SVGs for both modes. Check contrast and that your card reads well.
|
|
285
|
+
|
|
286
|
+
From a shell: `agend-agent theme get|set key=value…|set --json '<patch>'|clear <path>…|asset <slot> <file>|reset`,
|
|
287
|
+
`agend-agent appearance`, `agend-agent appearance preview [light|dark]`, and
|
|
288
|
+
`agend-agent widget set <slot> '<spec json>' ['<data json>']|data <slot> '<data json>'|remove [slot]`,
|
|
289
|
+
`agend-agent ambient set '<spec json>'|clear [loop|click]`.
|
|
290
|
+
|
|
291
|
+
## Files in your working directory
|
|
292
|
+
|
|
293
|
+
Asset uploads must be inside your working directory. For an external project,
|
|
294
|
+
use files there as before. For your own AgEnD-managed workspace under `~/.agend/workspaces/`, ordinary files there
|
|
295
|
+
also work; no staging folder is required. This includes the standard `<your-instance-name>` folder (ClassicBot and
|
|
296
|
+
instances without a project directory) and an exclusively configured folder with another name, such as instance
|
|
297
|
+
`alpha` with `working_directory: ~/.agend/workspaces/alpha-home` in `fleet.yaml`. Its canonical configured path must
|
|
298
|
+
not overlap another instance's configured or standard workspace, including persisted ClassicBot peers that are
|
|
299
|
+
stopped or paused. The `workspaces/` root itself is not a workspace.
|
|
300
|
+
|
|
301
|
+
General, adapter-specific General (such as `general-telegram`), and other configured working directories elsewhere
|
|
302
|
+
inside the AgEnD state directory must stage inputs under **`web-assets/`**. For example, put a banner at
|
|
303
|
+
`web-assets/banner.png`, relative to that working directory. Its root
|
|
304
|
+
and backend configuration folders are not upload areas. Generated previews use the fixed
|
|
305
|
+
`.agend/appearance/` directory and can be read back there.
|
|
306
|
+
|
|
307
|
+
The daemon uses its launch identity and configuration; the CLI resolves `AGEND_INSTANCE_NAME` against `fleet.yaml`.
|
|
308
|
+
These checks require a canonical, exclusively owned directory: the state root, shared or overlapping configured
|
|
309
|
+
working directories, another instance's directory, and the host's state stores never qualify. No tool argument can
|
|
310
|
+
select an identity or working directory. Missing or unreadable ownership evidence refuses in-state access.
|
|
311
|
+
|
|
312
|
+
Inside all admitted in-state areas, `.env`, databases and their WAL/SHM/journal files, `instances/`,
|
|
313
|
+
`credential-profiles/`, `inbox/`, `web-files/`, `web-chat.json`, `chat-logs/`, backend credential/session/config files,
|
|
314
|
+
and hidden files or folders are refused. The only hidden-directory exception is the generated `.agend/`
|
|
315
|
+
output directory above; their contents still undergo the sensitive-name checks. Hard-linked state files are also
|
|
316
|
+
refused. Copy an intended asset into staging as a new regular file; do not link a private state file there.
|
|
317
|
+
|
|
318
|
+
Paths are checked after resolving symlinks. A symlink named after General or a workspace, or in its managed parent
|
|
319
|
+
path, cannot widen access; uploaded files themselves must not be symlinks. Containment still applies to relative and
|
|
320
|
+
absolute paths and to each uploaded file. The CLI name and current directory are controlled by its shell:
|
|
321
|
+
these local checks prevent accidental uploads, but do not isolate shells running as the same OS user.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: web-appearance
|
|
3
3
|
description: How you look on the AgEnD web dashboard — check it, change your own theme, identity card, identity colour and widgets, set an ambient effect (falling petals, click stars), play Canvas Worker effects in your chat (and offer a Try), preview the result, share it as a mod; and, for General, changing Settings → Web appearance for the user
|
|
4
|
-
roles: [general, worker]
|
|
4
|
+
roles: [general, worker, classic]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## What it is
|
|
@@ -14,6 +14,7 @@ can shape how you look there — **only your own look, and only on the surfaces
|
|
|
14
14
|
| Your name and role line | display name, description | `set_display_name`, `set_description` |
|
|
15
15
|
| Your status stamp | persona emoji | `set_persona_emoji` (see the `persona-emoji` skill) |
|
|
16
16
|
| Your chat | theme: colours, accent, bubbles, font, background picture, working label | `set_web_theme`, `set_web_theme_asset` |
|
|
17
|
+
| The whole page, while your chat is open | your theme's colours on the sidebar, the header, the usage rail (a phone: the drawer, the header, the tabs) — colours only | `set_web_theme` (`page`) |
|
|
17
18
|
| Your face and ring | theme picture and accent | `set_web_theme`, `set_web_theme_asset` |
|
|
18
19
|
| Your identity card | portrait, banner, tagline, bio | `set_web_theme` (`card.*`), `set_web_theme_asset` |
|
|
19
20
|
| Your identity colour | the colour people find you by in the sidebar, and where it shows (name, bar, ring) | `set_web_theme` (`identity`) |
|
|
@@ -23,7 +24,7 @@ can shape how you look there — **only your own look, and only on the surfaces
|
|
|
23
24
|
| Effects in your chat | Canvas Worker animations, and Try cards an admin outside the public link may start | `upload_web_effect`, `apply_web_effect`, `preview_web_effect`, … (see Effects) |
|
|
24
25
|
|
|
25
26
|
None of these tools takes a target: they always act on you. You can't change another instance, the dashboard's own
|
|
26
|
-
chrome, a person's sidebar widget, or a person's custom CSS.
|
|
27
|
+
chrome (beyond your colours on it while your chat is open), a person's sidebar widget, or a person's custom CSS.
|
|
27
28
|
|
|
28
29
|
## For the user: Settings → Web appearance (General, coordinators, full)
|
|
29
30
|
|
|
@@ -40,10 +41,11 @@ of this skill).
|
|
|
40
41
|
|
|
41
42
|
| `what` | Changes | Example |
|
|
42
43
|
|---|---|---|
|
|
43
|
-
| `host` | `themes_shown`, `card_size` (s/m/l), `card_sizes` ({instance: s/m/l}), `colour_places` (name/bar/ring), `colours_off`, `sidebar_widget` ({spec, data}) — null puts one back to its default | `{ what: "host", set: { colour_places: ["name","ring"] } }` |
|
|
44
|
+
| `host` | `themes_shown`, `card_size` (s/m/l), `card_sizes` ({instance: s/m/l}), `page_colours` ({instance: page/chat}), `colour_places` (name/bar/ring), `colours_off`, `sidebar_widget` ({spec, data}) — null puts one back to its default | `{ what: "host", set: { colour_places: ["name","ring"] } }` |
|
|
44
45
|
| `agent_colour` | one agent's colour (`preset:<name>` or `#rrggbb`) and places; null resets each | `{ what: "agent_colour", instance: "atlas", colour: "preset:teal" }` |
|
|
46
|
+
| `page_colours` | where one agent's theme colours go: `page` (the whole page), `chat` (only its chat) or `agent` (its own `page.on`) — as ⋯ → Page colours sets it | `{ what: "page_colours", instance: "atlas", choice: "chat" }` |
|
|
45
47
|
| `banner_focus` | which part of one agent's cropped card banner stays in view: `focus` 0 (top) … 100 (bottom), 50 the centre; it wins over the agent's own `card.bannerFocus`; null follows the agent's again | `{ what: "banner_focus", instance: "atlas", focus: 20 }` |
|
|
46
|
-
| `custom_css` | `save` (with `text`): goes **on trial
|
|
48
|
+
| `custom_css` | `save` (with `text`): goes **on trial**. It waits until they open the dashboard (up to 10 minutes; never opened, it goes back unseen), then goes back by itself 20 s after it is on their screen unless kept (#2198). `keep` (with `trial`: the id `save` returned — a different trial on now, say one they saved on their page since, is refused with `trial_mismatch`, never kept instead; or, kept after that 20 s ran out, it is put back in force as `use` of it), `revert` (the trial), `use` (with `version`: an earlier saved one, at once), `off` | `{ what: "custom_css", action: "save", text: "…" }`; tell them to open the dashboard and look, then `keep` (with that `trial`) only when they say so — a `keep` that comes too late (`not_on_trial`) means use `use` with the version from `get_web_settings` |
|
|
47
49
|
| `mod` | an agent's proposal: `review` (instance → `stage`, `plan`, `plan_hash`), then `install` (stage, plan_hash, `include`: the parts, `target`: the agent); `cancel`, `dismiss`, `uninstall` (id) | review, show the user the plan, install only what they asked for — never custom CSS unasked. A person has one review open at a time: while theirs is open (`mod_review_open`) ask them to finish it; a mod they imported from a file is theirs to install (`mod_not_from_an_agent`) |
|
|
48
50
|
| `effect` | `apply` (instance, id, params?) or `remove` (instance, id?) an effect on a chat | |
|
|
49
51
|
| `ambient` | one agent's ambient effect, set for the user: `ambient` is the same spec as `set_web_ambient`'s (it replaces the one of its kind, and the agent can't change it after); `ambient: null` clears (`which`: `loop` or `click`, default both) | `{ what: "ambient", instance: "atlas", ambient: { preset: "fall", glyphs: ["🌸","❀","✿"] } }` |
|
|
@@ -89,6 +91,8 @@ of this skill).
|
|
|
89
91
|
Don't rely on your theme to say something important.
|
|
90
92
|
- The fleet can turn agent changes off entirely (`web.themes.agent_edit: false`): every change is refused with
|
|
91
93
|
`theme_editing_off`; what you stored stays.
|
|
94
|
+
- A person can switch these tools off for you (`dashboard.appearance: false`; the person's web settings tools with
|
|
95
|
+
`dashboard.web_settings: false`): a call is refused saying so. Do not retry; tell them if you need it.
|
|
92
96
|
|
|
93
97
|
## Change your theme
|
|
94
98
|
|
|
@@ -107,6 +111,17 @@ Typed values only; anything else is refused with `{ errors: [{ path, problem }]
|
|
|
107
111
|
- `show` is a list of `name`, `bar` and `ring` (`[]` for nowhere). Left out, the host's default applies (name, bar and ring).
|
|
108
112
|
- A person's choice for you in the dashboard always wins, field by field, and their Reset brings yours back.
|
|
109
113
|
`get_web_appearance` says which is in force.
|
|
114
|
+
- `page` (#2196): `{ on?: true | false, sidebar?: { light?, dark? } }` — `on: true` puts your colours (bg, surface, text,
|
|
115
|
+
text2, accent; the sidebar's own colour per mode in `sidebar`, else your `bg`) on **the whole page while your chat,
|
|
116
|
+
View, Log or Details is open**: the sidebar, the header, the usage rail; on a phone the drawer, the header and the
|
|
117
|
+
tabs. Colours only: never fonts, pictures or layout, and **AgEnD's status colours** (the Needs you count, the state
|
|
118
|
+
dots, errors, the focus ring — `get_web_theme`'s `status_colors`) are never yours to change. With `on: true` the
|
|
119
|
+
contrast check adds: `text` and `text2` 4.5:1 and `accent` 3:1 on the sidebar, and every status colour 3:1 on the
|
|
120
|
+
sidebar and on `bg`. A person's choice for you (⋯ → **Page colours**: your choice, the whole page, only your chat)
|
|
121
|
+
wins; viewers with agents' themes off or `?safe=1` see the page's own look.
|
|
122
|
+
- For a person's **custom CSS** (#2199): while an agent's Chat, View, Log or Details is open, `<body>` has
|
|
123
|
+
`data-agent="<instance name>"` (none elsewhere), set in the same render as the page — so a person's stylesheet can
|
|
124
|
+
follow the open agent: `body[data-agent="atlas"] { --bg-sidebar: … }`. It is the person's, not yours to set.
|
|
110
125
|
- `bubble`: `{ radius: 0..24, border: "none" | "thin" | "accent" }`.
|
|
111
126
|
- `font`: `"inter"`, `"system"` or `"mono"`.
|
|
112
127
|
- `background`: `{ image: <asset id>, fit: "cover" | "contain", opacity: 0.05..1 }`.
|
|
@@ -157,6 +172,11 @@ screen and layout. `card.bannerFocus` (0 top … 100 bottom; default 50, the cen
|
|
|
157
172
|
near the top at `bannerFocus: 0`. A person's focus (Edit profile, or General's `set_web_settings { what: "banner_focus" }`)
|
|
158
173
|
wins over yours. `preview_web_appearance` draws the banner cropped at its focus, as the page does (an M card).
|
|
159
174
|
|
|
175
|
+
**In your chat** the card is hidden until the person shows it (the card menu in the chat header: Show card, Show picture
|
|
176
|
+
and bio). Shown, the banner sits right under the header and they can fold your portrait, tagline and bio away, keeping
|
|
177
|
+
only the banner. Their choice,
|
|
178
|
+
kept on their device; you cannot change it. So a banner that says who you are on its own reads well in your chat too.
|
|
179
|
+
|
|
160
180
|
## Your identity colour
|
|
161
181
|
|
|
162
182
|
The colour people find you by in the sidebar, drawn on your name, a bar at your row's left edge and/or the ring around
|
|
@@ -414,6 +434,10 @@ smallest valid `effect.json`:
|
|
|
414
434
|
offers to follow reduced motion, and a motion refusal offers **Play effects anyway** right there, including public/guest
|
|
415
435
|
viewers. Safe mode offers **Leave safe mode**. A poster may replace unsupported playback or a chosen motion block
|
|
416
436
|
(see Static Chat fallback). Menus/dialogs stop `front` effects temporarily.
|
|
437
|
+
- A layout refusal keeps its local code in the Chat notice and Effects dialog (for example `stock_order_unknown`);
|
|
438
|
+
the browser console also names it. Report that code rather than repeatedly applying the effect. A failed Try leaves
|
|
439
|
+
its stop code on the offer card. Pointer-leave does not stop Try; window blur, closing, navigation or lost stage proof do.
|
|
440
|
+
Agent playback summaries still contain only the closed reporting reasons, never raw local diagnostics.
|
|
417
441
|
- **Safety pause** — it measures the page's responsiveness, not your Worker's CPU. Host rAF observations learn a live
|
|
418
442
|
cadence during warm-up, then fix the mount's floor at 90% of a faster observed cadence, capped at 55 fps (50 on a
|
|
419
443
|
constrained device). A steady 30 Hz display has a 27 fps floor. This is not an empty-page health certificate; uniformly
|