@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,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1629 r4 §4 (r4-5): building a mod bundle from what is in force — one instance's look (theme with its pictures,
|
|
3
|
+
* identity text, its widgets) and, for a person, their sidebar widget and their own CSS with its assets. The result is
|
|
4
|
+
* the same format the importer checks (web-mod-bundle.ts), and it passes that check: export → import is the round trip.
|
|
5
|
+
* Card pictures never travel (a card is an instance's identity, not a look).
|
|
6
|
+
*/
|
|
7
|
+
import { MEDIA_EXT } from "./web-image-meta.js";
|
|
8
|
+
import { MOD_FORMAT, modFile } from "./web-mod-bundle.js";
|
|
9
|
+
const enc = new TextEncoder();
|
|
10
|
+
const jsonBytes = (v) => enc.encode(JSON.stringify(v, null, 2) + "\n");
|
|
11
|
+
/** The bundle file's text (UTF-8 JSON), or why it can't be built (a picture the theme names is missing). */
|
|
12
|
+
export function buildModBundle(meta, parts) {
|
|
13
|
+
const files = {};
|
|
14
|
+
const put = (path, bytes) => { files[path] = modFile(bytes); };
|
|
15
|
+
const contents = {};
|
|
16
|
+
if (parts.theme) {
|
|
17
|
+
const { card: _card, ...look } = parts.theme.theme;
|
|
18
|
+
void _card;
|
|
19
|
+
const out = { ...look };
|
|
20
|
+
const picture = (id, base) => {
|
|
21
|
+
const p = parts.theme.picture(id);
|
|
22
|
+
if (!p)
|
|
23
|
+
return null;
|
|
24
|
+
const path = `pictures/${base}.${MEDIA_EXT[p.kind]}`;
|
|
25
|
+
put(path, p.bytes);
|
|
26
|
+
return path;
|
|
27
|
+
};
|
|
28
|
+
if (look.background) {
|
|
29
|
+
const path = picture(look.background.image, "background");
|
|
30
|
+
if (!path)
|
|
31
|
+
return { ok: false, error: "picture_missing" };
|
|
32
|
+
out.background = { ...look.background, image: path };
|
|
33
|
+
}
|
|
34
|
+
if (look.avatar) {
|
|
35
|
+
const path = picture(look.avatar, "avatar");
|
|
36
|
+
if (!path)
|
|
37
|
+
return { ok: false, error: "picture_missing" };
|
|
38
|
+
out.avatar = path;
|
|
39
|
+
}
|
|
40
|
+
const placed = [];
|
|
41
|
+
const taken = new Set();
|
|
42
|
+
for (const e of parts.theme.effects ?? []) {
|
|
43
|
+
const base = /^[a-z0-9][a-z0-9-]{0,47}$/.test(e.name) ? e.name : "effect";
|
|
44
|
+
let slug = base;
|
|
45
|
+
for (let n = 2; taken.has(slug); n++)
|
|
46
|
+
slug = `${base}-${n}`;
|
|
47
|
+
taken.add(slug);
|
|
48
|
+
const dir = `effects/${slug}`;
|
|
49
|
+
for (const [rel, bytes] of e.files)
|
|
50
|
+
put(`${dir}/${rel}`, bytes);
|
|
51
|
+
(contents.effects ??= []).push(dir);
|
|
52
|
+
placed.push({ effect: dir, ...(Object.keys(e.params).length ? { params: e.params } : {}) });
|
|
53
|
+
}
|
|
54
|
+
if (placed.length)
|
|
55
|
+
out.effects = placed;
|
|
56
|
+
put("theme.json", jsonBytes(out));
|
|
57
|
+
contents.theme = "theme.json";
|
|
58
|
+
}
|
|
59
|
+
if (parts.identity && (parts.identity.tagline || parts.identity.bio)) {
|
|
60
|
+
put("identity.json", jsonBytes({ ...(parts.identity.tagline ? { tagline: parts.identity.tagline } : {}), ...(parts.identity.bio ? { bio: parts.identity.bio } : {}) }));
|
|
61
|
+
contents.identity = "identity.json";
|
|
62
|
+
}
|
|
63
|
+
for (const [slot, w] of Object.entries(parts.widgets ?? {})) {
|
|
64
|
+
const path = `widgets/${slot.replace("_", "-")}.json`;
|
|
65
|
+
put(path, jsonBytes({ spec: w.spec, data: w.data }));
|
|
66
|
+
(contents.widgets ??= {})[slot] = path;
|
|
67
|
+
}
|
|
68
|
+
if (parts.ambient && Object.keys(parts.ambient.specs).length) {
|
|
69
|
+
const out = {};
|
|
70
|
+
for (const [kind, spec] of Object.entries(parts.ambient.specs)) {
|
|
71
|
+
const glyphs = [];
|
|
72
|
+
for (const g of spec.glyphs) {
|
|
73
|
+
if (typeof g === "string") {
|
|
74
|
+
glyphs.push(g);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const p = parts.ambient.picture(g.asset);
|
|
78
|
+
if (!p)
|
|
79
|
+
return { ok: false, error: "picture_missing" };
|
|
80
|
+
const path = `glyphs/${g.asset}.${MEDIA_EXT[p.kind]}`;
|
|
81
|
+
put(path, p.bytes);
|
|
82
|
+
glyphs.push({ asset: path });
|
|
83
|
+
}
|
|
84
|
+
out[kind] = { ...spec, glyphs };
|
|
85
|
+
}
|
|
86
|
+
put("ambient.json", jsonBytes(out));
|
|
87
|
+
contents.ambient = "ambient.json";
|
|
88
|
+
}
|
|
89
|
+
if (parts.ownerCss) {
|
|
90
|
+
// The CSS names its assets as url("asset:<id>"): the id is the hash of the kept bytes, the same on import.
|
|
91
|
+
const assets = parts.ownerCss.assets.map(a => { const path = `css/assets/${a.id}.${MEDIA_EXT[a.kind]}`; put(path, a.bytes); return path; });
|
|
92
|
+
put("css/custom.css", enc.encode(parts.ownerCss.text));
|
|
93
|
+
contents.ownerCss = { css: "css/custom.css", ...(assets.length ? { assets } : {}) };
|
|
94
|
+
}
|
|
95
|
+
if (!Object.keys(contents).length)
|
|
96
|
+
return { ok: false, error: "nothing_to_export" };
|
|
97
|
+
const manifest = { name: meta.name, version: meta.version, title: meta.title, ...(meta.description ? { description: meta.description } : {}), ...(meta.author ? { author: meta.author } : {}), contents };
|
|
98
|
+
return { ok: true, text: JSON.stringify({ format: MOD_FORMAT, v: 1, manifest, files }) + "\n", filename: `${meta.name}-${meta.version}.agendmod.json` };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=web-mod-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-mod-export.js","sourceRoot":"","sources":["../src/web-mod-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { type CheckedMod, type EffectFiles, type ModContext, type ModProblem } from "./web-mod-bundle.js";
|
|
2
|
+
import type { ThemeStore } from "./web-theme-store.js";
|
|
3
|
+
import type { OwnerCssSnapshot } from "./web-owner-css-store.js";
|
|
4
|
+
export declare const MOD_STAGE_MS: number;
|
|
5
|
+
export declare const MODS_MAX_INSTALLED = 20;
|
|
6
|
+
export declare const MODS_MAX_BYTES: number;
|
|
7
|
+
/** Who an effect claim belongs to (CW1): a mod import is always a person's. */
|
|
8
|
+
export interface EffectPrincipal {
|
|
9
|
+
kind: "agent" | "human";
|
|
10
|
+
id: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The effect library (Sol's B2, CW1), as mods use it. Null while the fleet has none: then no bundle with effects is
|
|
14
|
+
* accepted (the checker refuses it first).
|
|
15
|
+
*/
|
|
16
|
+
export interface ModEffectLibrary {
|
|
17
|
+
stage(entries: readonly EffectFiles[], principal: EffectPrincipal, opts: {
|
|
18
|
+
holder: string;
|
|
19
|
+
}): {
|
|
20
|
+
ok: true;
|
|
21
|
+
stageId: string;
|
|
22
|
+
ids: string[];
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
error: string;
|
|
26
|
+
};
|
|
27
|
+
commit(stageId: string): {
|
|
28
|
+
ok: true;
|
|
29
|
+
ids: string[];
|
|
30
|
+
created: string[];
|
|
31
|
+
undo: () => boolean;
|
|
32
|
+
} | {
|
|
33
|
+
ok: false;
|
|
34
|
+
error: string;
|
|
35
|
+
};
|
|
36
|
+
abort(stageId: string): void;
|
|
37
|
+
releaseHolder(holder: string, principal: EffectPrincipal): {
|
|
38
|
+
ok: true;
|
|
39
|
+
released: string[];
|
|
40
|
+
undo: () => boolean;
|
|
41
|
+
} | {
|
|
42
|
+
ok: false;
|
|
43
|
+
error: string;
|
|
44
|
+
};
|
|
45
|
+
/** A guarded, deferred collector: rechecks every claim and reference before deleting (never synchronously). */
|
|
46
|
+
collectUnreferenced?(ids: readonly string[]): void;
|
|
47
|
+
}
|
|
48
|
+
/** A person's preferences, as the import writes their sidebar widget (web-prefs.ts). */
|
|
49
|
+
export interface ModPrefs {
|
|
50
|
+
read(identity: string): {
|
|
51
|
+
values: Record<string, unknown>;
|
|
52
|
+
unreadable?: true;
|
|
53
|
+
};
|
|
54
|
+
write(identity: string, patch: Map<string, unknown>): {
|
|
55
|
+
ok: true;
|
|
56
|
+
} | {
|
|
57
|
+
ok: false;
|
|
58
|
+
status: number;
|
|
59
|
+
error: string;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** A person's own CSS (web-owner-css-store.ts), as the import adds its assets and tries its text. */
|
|
63
|
+
export interface ModOwnerCss {
|
|
64
|
+
snapshot(person: string): OwnerCssSnapshot;
|
|
65
|
+
restoreSnapshot(person: string, snap: OwnerCssSnapshot): {
|
|
66
|
+
ok: boolean;
|
|
67
|
+
};
|
|
68
|
+
addAsset(person: string, bytes: Uint8Array): {
|
|
69
|
+
ok: true;
|
|
70
|
+
id: string;
|
|
71
|
+
} | {
|
|
72
|
+
ok: false;
|
|
73
|
+
status: number;
|
|
74
|
+
error: string;
|
|
75
|
+
detail?: string;
|
|
76
|
+
};
|
|
77
|
+
save(person: string, text: unknown): {
|
|
78
|
+
ok: true;
|
|
79
|
+
sha: string;
|
|
80
|
+
previous: string | null;
|
|
81
|
+
trial: string;
|
|
82
|
+
} | {
|
|
83
|
+
ok: false;
|
|
84
|
+
status: number;
|
|
85
|
+
error: string;
|
|
86
|
+
detail?: string;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export interface ModRecord {
|
|
90
|
+
name: string;
|
|
91
|
+
version: string;
|
|
92
|
+
title: string;
|
|
93
|
+
bytes: number;
|
|
94
|
+
installedBy: string;
|
|
95
|
+
/** Principal that owns this mod's effect holder. Older records use installedBy. */
|
|
96
|
+
effectsBy?: string;
|
|
97
|
+
installedAt: number;
|
|
98
|
+
/** The instance the look went to, when it had one. */
|
|
99
|
+
target?: string;
|
|
100
|
+
/** What was applied: "theme", "identity", "widget:<slot>", "ambient", "effects", "ownerCss". */
|
|
101
|
+
parts: string[];
|
|
102
|
+
/** The effect entries it carries, by path, and the library's ids for them (audit: which claims this commit created). */
|
|
103
|
+
effects: Array<{
|
|
104
|
+
path: string;
|
|
105
|
+
id: string;
|
|
106
|
+
}>;
|
|
107
|
+
created: string[];
|
|
108
|
+
}
|
|
109
|
+
export type ModWrite<T = Record<never, never>> = ({
|
|
110
|
+
ok: true;
|
|
111
|
+
} & T) | {
|
|
112
|
+
ok: false;
|
|
113
|
+
status: number;
|
|
114
|
+
error: string;
|
|
115
|
+
detail?: string;
|
|
116
|
+
problems?: ModProblem[];
|
|
117
|
+
};
|
|
118
|
+
export interface ModPlanItem {
|
|
119
|
+
part: string;
|
|
120
|
+
[k: string]: unknown;
|
|
121
|
+
}
|
|
122
|
+
export interface ModPlan {
|
|
123
|
+
mod: {
|
|
124
|
+
id: string;
|
|
125
|
+
name: string;
|
|
126
|
+
version: string;
|
|
127
|
+
title: string;
|
|
128
|
+
description?: string;
|
|
129
|
+
author?: string;
|
|
130
|
+
requires?: string;
|
|
131
|
+
bytes: number;
|
|
132
|
+
installed: boolean;
|
|
133
|
+
replaces?: {
|
|
134
|
+
id: string;
|
|
135
|
+
version: string;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
items: ModPlanItem[];
|
|
139
|
+
/** Whether a target instance must be chosen (a theme, identity, agent widgets or effect placements). */
|
|
140
|
+
needs_target: boolean;
|
|
141
|
+
warnings: string[];
|
|
142
|
+
}
|
|
143
|
+
export interface ModInclude {
|
|
144
|
+
theme?: boolean;
|
|
145
|
+
identity?: boolean;
|
|
146
|
+
effects?: boolean;
|
|
147
|
+
ownerCss?: boolean;
|
|
148
|
+
ambient?: boolean;
|
|
149
|
+
widgets?: Partial<Record<"chat_header" | "details" | "sidebar", boolean>>;
|
|
150
|
+
/** Replace the installed mod of the same name (a different version). */
|
|
151
|
+
replace?: boolean;
|
|
152
|
+
}
|
|
153
|
+
/** r4-5b: a mod an agent proposed (propose_web_mod), waiting for a person to review it — one per agent. */
|
|
154
|
+
export interface ModProposal {
|
|
155
|
+
name: string;
|
|
156
|
+
version: string;
|
|
157
|
+
title: string;
|
|
158
|
+
bytes: number;
|
|
159
|
+
at: number;
|
|
160
|
+
id: string;
|
|
161
|
+
}
|
|
162
|
+
export declare const modHolder: (id: string) => string;
|
|
163
|
+
/** What the page shows before anything is applied: every part, in full (the owner CSS's text included). */
|
|
164
|
+
export declare function modPlan(mod: CheckedMod, installed: ReadonlyMap<string, ModRecord>): ModPlan;
|
|
165
|
+
export declare class ModStore {
|
|
166
|
+
private readonly dataDir;
|
|
167
|
+
private readonly deps;
|
|
168
|
+
private index;
|
|
169
|
+
private readonly stages;
|
|
170
|
+
readonly path: string;
|
|
171
|
+
constructor(dataDir: string, deps: {
|
|
172
|
+
themes: ThemeStore;
|
|
173
|
+
prefs: ModPrefs;
|
|
174
|
+
ownerCss: ModOwnerCss | null;
|
|
175
|
+
effects: ModEffectLibrary | null;
|
|
176
|
+
context: () => ModContext;
|
|
177
|
+
isKnownInstance: (name: string) => boolean;
|
|
178
|
+
/** The preferences bucket the page reads (/ui/prefs: one, the operator's — web-prefs.ts). */
|
|
179
|
+
prefsIdentity: string;
|
|
180
|
+
clock?: () => number;
|
|
181
|
+
now?: () => number;
|
|
182
|
+
});
|
|
183
|
+
private clock;
|
|
184
|
+
private now;
|
|
185
|
+
private file;
|
|
186
|
+
private load;
|
|
187
|
+
private save;
|
|
188
|
+
/** Write the index (disk first, then memory). `proposals`: unchanged unless given. */
|
|
189
|
+
private commitIndex;
|
|
190
|
+
private proposalFile;
|
|
191
|
+
/**
|
|
192
|
+
* r4-5b: keep an agent's proposed mod (checked already, and never carrying custom CSS — the caller refuses that by
|
|
193
|
+
* the path the bytes came in by) until a person reviews or dismisses it. One per agent: a new one replaces it.
|
|
194
|
+
*/
|
|
195
|
+
propose(instance: string, text: string, mod: CheckedMod): ModWrite<{
|
|
196
|
+
proposal: ModProposal;
|
|
197
|
+
}>;
|
|
198
|
+
/** Proposals waiting for a person, by agent. */
|
|
199
|
+
proposals(): Array<ModProposal & {
|
|
200
|
+
instance: string;
|
|
201
|
+
}>;
|
|
202
|
+
/** A person opens an agent's proposal into the usual review: staged as theirs, its plan shown in full. */
|
|
203
|
+
stageProposal(person: string, instance: unknown): ModWrite<{
|
|
204
|
+
stage: string;
|
|
205
|
+
plan: ModPlan;
|
|
206
|
+
plan_hash: string;
|
|
207
|
+
}>;
|
|
208
|
+
/** A person dismisses an agent's proposal. */
|
|
209
|
+
dismiss(instance: unknown): ModWrite;
|
|
210
|
+
/** The context bundles are checked in (the effect runtime's checker, when the fleet has one): the agent's side uses it too. */
|
|
211
|
+
checkContext(): ModContext;
|
|
212
|
+
/** Installed mods, for the page. */
|
|
213
|
+
list(): {
|
|
214
|
+
rev: number;
|
|
215
|
+
mods: Array<ModRecord & {
|
|
216
|
+
id: string;
|
|
217
|
+
}>;
|
|
218
|
+
unreadable?: true;
|
|
219
|
+
};
|
|
220
|
+
/** An installed bundle's file, exactly as it was checked (for export of an installed mod). */
|
|
221
|
+
bundleText(id: string): string | null;
|
|
222
|
+
/**
|
|
223
|
+
* The effects an installed bundle's file carries, as library content ids — what downloading that file hands over,
|
|
224
|
+
* whether or not its import installed them (an import that left effects out still keeps the whole file). "unknown":
|
|
225
|
+
* the file no longer checks here and lists effects, so what they are can't be said; null: no such mod.
|
|
226
|
+
*/
|
|
227
|
+
bundleEffects(id: string): string[] | "unknown" | null;
|
|
228
|
+
/** Stages left idle past their time go (their effect stage is aborted). */
|
|
229
|
+
private sweep;
|
|
230
|
+
private drop;
|
|
231
|
+
/** The person's staged import (its plan), if one is still current. */
|
|
232
|
+
staged(person: string): {
|
|
233
|
+
stage: string;
|
|
234
|
+
plan: ModPlan;
|
|
235
|
+
plan_hash: string;
|
|
236
|
+
expires_in_s: number;
|
|
237
|
+
} | null;
|
|
238
|
+
/** #2064 review: where the person's open review came from — an agent's proposal (its instance) or a file (null). */
|
|
239
|
+
stageOrigin(person: string): {
|
|
240
|
+
stage: string;
|
|
241
|
+
proposal: string | null;
|
|
242
|
+
} | null;
|
|
243
|
+
/** A picture of this person's staged mod (its theme's), so the plan can show it before anything is applied. */
|
|
244
|
+
stagedPicture(person: string, id: string): {
|
|
245
|
+
bytes: Uint8Array;
|
|
246
|
+
mime: string;
|
|
247
|
+
} | null;
|
|
248
|
+
abort(person: string, stage: unknown): ModWrite;
|
|
249
|
+
/**
|
|
250
|
+
* Step 1: check the uploaded file whole and keep it, with its plan, for this person (one stage each: a new one
|
|
251
|
+
* replaces theirs). Nothing is applied.
|
|
252
|
+
*/
|
|
253
|
+
stage(person: string, text: string, from?: {
|
|
254
|
+
proposal?: string;
|
|
255
|
+
}): ModWrite<{
|
|
256
|
+
stage: string;
|
|
257
|
+
plan: ModPlan;
|
|
258
|
+
plan_hash: string;
|
|
259
|
+
}>;
|
|
260
|
+
/**
|
|
261
|
+
* Step 2: apply exactly the staged plan's chosen parts, atomically. `person`: the signed-in session's person (their
|
|
262
|
+
* own CSS goes to them); the sidebar widget is a preference of the page's one bucket. A changed plan hash is 409; an
|
|
263
|
+
* unknown or expired stage is 404.
|
|
264
|
+
*/
|
|
265
|
+
commit(person: string, body: {
|
|
266
|
+
stage?: unknown;
|
|
267
|
+
plan_hash?: unknown;
|
|
268
|
+
include?: unknown;
|
|
269
|
+
target?: unknown;
|
|
270
|
+
}): ModWrite<{
|
|
271
|
+
id: string;
|
|
272
|
+
applied: string[];
|
|
273
|
+
css?: {
|
|
274
|
+
trial: string;
|
|
275
|
+
sha: string;
|
|
276
|
+
previous: string | null;
|
|
277
|
+
};
|
|
278
|
+
}>;
|
|
279
|
+
/** Remove an installed mod from the library: its effect claim, its file and its entry. What it applied stays. */
|
|
280
|
+
uninstall(id: unknown): ModWrite<{
|
|
281
|
+
released: string[];
|
|
282
|
+
}>;
|
|
283
|
+
/** An instance was removed: its name leaves the records that named it as their target. */
|
|
284
|
+
forgetInstance(name: string): void;
|
|
285
|
+
/** Tests: the folder bundles live in. */
|
|
286
|
+
get folder(): string;
|
|
287
|
+
/** Every installed bundle's file is removed with the index (tests and a reset). */
|
|
288
|
+
clear(): void;
|
|
289
|
+
}
|