@songsid/agend 2.3.5-alpha.4 → 2.3.5-beta.1
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 +0 -2
- package/README.zh-TW.md +0 -2
- package/THIRD_PARTY_NOTICES.md +12 -28
- package/dist/agent-cli-instructions.md +1 -1
- package/dist/agent-credentials.d.ts +24 -0
- package/dist/agent-credentials.js +66 -0
- package/dist/agent-credentials.js.map +1 -0
- package/dist/agent-endpoint.d.ts +4 -6
- package/dist/agent-endpoint.js +15 -12
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/auth-api.d.ts +0 -21
- package/dist/auth-api.js +8 -93
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +30 -4
- package/dist/authority/session-authorizations.js +69 -17
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +2 -12
- package/dist/authority/web-authority.js +4 -25
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.js +3 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +12 -15
- package/dist/backend/claude-code.js +133 -152
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +14 -0
- package/dist/backend/codex-metadata.js +45 -0
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-package.d.ts +2 -5
- package/dist/backend/codex-package.js +5 -1
- package/dist/backend/codex-package.js.map +1 -1
- package/dist/backend/codex-quota-history.d.ts +7 -0
- package/dist/backend/codex-quota-history.js +72 -0
- package/dist/backend/codex-quota-history.js.map +1 -0
- package/dist/backend/codex-session-lookup.d.ts +6 -0
- package/dist/backend/codex-session-lookup.js +1 -1
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex-speed.d.ts +14 -0
- package/dist/backend/codex-speed.js +35 -0
- package/dist/backend/codex-speed.js.map +1 -0
- package/dist/backend/codex.d.ts +116 -136
- package/dist/backend/codex.js +912 -942
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok-weekly-reset.d.ts +24 -0
- package/dist/backend/grok-weekly-reset.js +95 -0
- package/dist/backend/grok-weekly-reset.js.map +1 -0
- package/dist/backend/grok.d.ts +30 -3
- package/dist/backend/grok.js +301 -76
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +50 -2
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +5 -3
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +15 -8
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/bundled-tmux-guard.d.ts +21 -0
- package/dist/bundled-tmux-guard.js +96 -0
- package/dist/bundled-tmux-guard.js.map +1 -0
- package/dist/cache-ledger.d.ts +95 -0
- package/dist/cache-ledger.js +276 -4
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-service.d.ts +5 -0
- package/dist/cache-service.js +16 -4
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.js +11 -3
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +51 -0
- package/dist/channel/adapters/telegram.js +235 -17
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/ipc-bridge.d.ts +0 -2
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/classic-channel-manager.d.ts +2 -0
- package/dist/classic-channel-manager.js +5 -1
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +14 -10
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +30 -71
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +3 -17
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +10 -0
- package/dist/cross-instance-notice.js +67 -5
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +70 -68
- package/dist/daemon.js +774 -846
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +8 -0
- package/dist/dashboard-permissions.js +16 -0
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +26 -16
- package/dist/delivery-consumed-watch.js +31 -26
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.d.ts +0 -5
- package/dist/delivery-outbox.js +4 -32
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +42 -2
- package/dist/delivery-reconciliation.js +164 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/export-import.d.ts +7 -0
- package/dist/export-import.js +44 -10
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +4 -2
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +0 -2
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +108 -245
- package/dist/fleet-manager.js +656 -2028
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-instance.d.ts +0 -7
- package/dist/general-instance.js +3 -20
- package/dist/general-instance.js.map +1 -1
- package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +9 -3
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/instance-config-impact.js +6 -7
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +19 -23
- package/dist/instance-lifecycle.js +216 -383
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-topic-delete.d.ts +77 -0
- package/dist/instance-topic-delete.js +123 -0
- package/dist/instance-topic-delete.js.map +1 -0
- package/dist/instructions.d.ts +1 -3
- package/dist/instructions.js +1 -7
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +11 -0
- package/dist/kiro-engine-status.js +6 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/locale.js +63 -86
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +28 -0
- package/dist/log-service.js +29 -0
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +4 -3
- package/dist/log-steps.js +32 -7
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.d.ts +16 -2
- package/dist/logger.js +346 -66
- package/dist/logger.js.map +1 -1
- package/dist/login-flows.d.ts +7 -0
- package/dist/login-flows.js +5 -2
- package/dist/login-flows.js.map +1 -1
- package/dist/login-manager.js +25 -4
- package/dist/login-manager.js.map +1 -1
- package/dist/missed-offline.d.ts +25 -0
- package/dist/missed-offline.js +79 -0
- package/dist/missed-offline.js.map +1 -0
- package/dist/muse-usage-relay.d.ts +2 -0
- package/dist/muse-usage-relay.js +5 -3
- package/dist/muse-usage-relay.js.map +1 -1
- package/dist/needs-you-hub.d.ts +6 -3
- package/dist/needs-you-hub.js +31 -9
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +20 -18
- package/dist/needs-you.js +18 -14
- package/dist/needs-you.js.map +1 -1
- package/dist/office-share-page.js +1 -1
- package/dist/office-share-page.js.map +1 -1
- package/dist/outbound-handlers.d.ts +2 -16
- package/dist/outbound-handlers.js +10 -72
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +0 -38
- package/dist/outbound-schemas.js +5 -14
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-quota-history.d.ts +7 -0
- package/dist/pane-quota-history.js +47 -0
- package/dist/pane-quota-history.js.map +1 -0
- package/dist/platform-general.d.ts +46 -0
- package/dist/platform-general.js +91 -0
- package/dist/platform-general.js.map +1 -0
- package/dist/public-web-gateway.js +0 -9
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +0 -11
- package/dist/public-web-link.js +0 -13
- package/dist/public-web-link.js.map +1 -1
- package/dist/queued-handoffs.d.ts +33 -0
- package/dist/queued-handoffs.js +75 -0
- package/dist/queued-handoffs.js.map +1 -0
- package/dist/quickstart-api.js +5 -9
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +8 -1
- package/dist/quickstart.js +42 -4
- package/dist/quickstart.js.map +1 -1
- package/dist/quota-notice-config.d.ts +22 -0
- package/dist/quota-notice-config.js +41 -0
- package/dist/quota-notice-config.js.map +1 -0
- package/dist/quota-notice.d.ts +7 -0
- package/dist/quota-notice.js +40 -0
- package/dist/quota-notice.js.map +1 -1
- package/dist/reply-buttons-controller.js +10 -6
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-polls.d.ts +2 -2
- package/dist/reply-polls.js +3 -3
- package/dist/reply-polls.js.map +1 -1
- package/dist/scheduler/db.d.ts +2 -1
- package/dist/scheduler/db.js +23 -9
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/task-board.d.ts +9 -0
- package/dist/scheduler/task-board.js +19 -0
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/settings-api.d.ts +13 -5
- package/dist/settings-api.js +26 -96
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +0 -1
- package/dist/settings-baseline.js +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.js +23 -28
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +1 -16
- package/dist/settings-confirmation.js +9 -47
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.d.ts +0 -4
- package/dist/settings-effect.js +1 -58
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +0 -4
- package/dist/settings-http-confirmation.js +3 -31
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +28 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/settings-request-capability.d.ts +0 -2
- package/dist/settings-request-capability.js +0 -4
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-transaction.d.ts +0 -4
- package/dist/settings-transaction.js +0 -9
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-form.js +3 -6
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-i18n.js +0 -3
- package/dist/setup-i18n.js.map +1 -1
- package/dist/task-board-tool.d.ts +11 -0
- package/dist/task-board-tool.js +44 -0
- package/dist/task-board-tool.js.map +1 -1
- package/dist/task-board-waker.d.ts +6 -0
- package/dist/task-board-waker.js +4 -0
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-control.d.ts +1 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +1 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -2
- package/dist/tool-permissions.js +7 -7
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.d.ts +2 -0
- package/dist/tool-progress.js +19 -3
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.js +4 -3
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +1 -1
- package/dist/transcript-delta-reader.js +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-monitor.d.ts +20 -3
- package/dist/transcript-monitor.js +92 -24
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +0 -5
- package/dist/transcript-sources.js +79 -8
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +3 -23
- package/dist/ui/app.html +8 -1
- package/dist/ui/backend-signin.js +21 -36
- package/dist/ui/chat-md-strings.js +9 -0
- package/dist/ui/chat-store.js +2 -13
- package/dist/ui/chat-strings.js +2 -50
- package/dist/ui/chat-thread.js +53 -3
- package/dist/ui/fleet-task-card.js +3 -3
- package/dist/ui/fleet-task-common.js +10 -0
- package/dist/ui/fleet-tasks.js +7 -5
- package/dist/ui/fleet-usage.js +90 -27
- package/dist/ui/panel-chat.js +37 -66
- package/dist/ui/panel-details.js +1 -2
- package/dist/ui/panel-fleet.js +88 -107
- package/dist/ui/panel-needs.js +21 -163
- package/dist/ui/panel-notices.js +4 -3
- package/dist/ui/panel-settings.js +149 -239
- package/dist/ui/preview-panel.js +84 -6
- package/dist/ui/search-dialog.js +3 -2
- package/dist/ui/settings-appearance.js +23 -122
- package/dist/ui/settings-catalog.js +10 -37
- package/dist/ui/settings-codex-copy.js +19 -0
- package/dist/ui/settings-confirm.js +1 -3
- package/dist/ui/settings-dialogs.js +20 -27
- package/dist/ui/settings-guests.js +14 -27
- package/dist/ui/settings-model.js +17 -12
- package/dist/ui/settings-quota-notice.js +100 -0
- package/dist/ui/settings-registry.js +4 -11
- package/dist/ui/settings-strings.js +4 -113
- package/dist/ui/settings-web-authority.js +13 -15
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-needs.js +1 -1
- package/dist/ui/shared/app-route.js +2 -6
- package/dist/ui/shared/app-shell.js +18 -23
- package/dist/ui/shared/app-store.js +2 -3
- package/dist/ui/shared/app-stream.js +1 -3
- package/dist/ui/shared/app.css +40 -1312
- package/dist/ui/shared/app.js +2 -5
- package/dist/ui/shared/header-tools.js +4 -6
- package/dist/ui/shared/instance-nav.js +7 -34
- package/dist/ui/shared/instance-switch.js +3 -4
- package/dist/ui/shared/loading.css +37 -0
- package/dist/ui/shared/panel-view.js +77 -4
- package/dist/ui/shared/signin.js +6 -39
- package/dist/ui/shared/tokens.css +0 -1
- package/dist/ui/shared/ui-dialog.js +2 -2
- package/dist/ui/shared/ui-menu.js +10 -30
- package/dist/ui/shared/ui-states.js +14 -3
- package/dist/ui/shared/usage-dialog.js +18 -1
- package/dist/ui/shared/vendor/vendor.json +2 -19
- package/dist/ui/shared/view-history.css +17 -0
- package/dist/ui/shared/view-history.js +438 -0
- package/dist/ui/shared/view-strings.js +16 -8
- package/dist/ui/signin.html +5 -2
- package/dist/unattended-install.d.ts +11 -2
- package/dist/unattended-install.js +39 -5
- package/dist/unattended-install.js.map +1 -1
- package/dist/usage/capacity.d.ts +69 -0
- package/dist/usage/capacity.js +119 -0
- package/dist/usage/capacity.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +3 -0
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/profile-timeline.d.ts +16 -0
- package/dist/usage/profile-timeline.js +58 -0
- package/dist/usage/profile-timeline.js.map +1 -0
- package/dist/usage/providers.d.ts +5 -0
- package/dist/usage/providers.js +5 -0
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/quota-history.d.ts +43 -0
- package/dist/usage/quota-history.js +168 -0
- package/dist/usage/quota-history.js.map +1 -0
- package/dist/usage/quota-notices.d.ts +38 -0
- package/dist/usage/quota-notices.js +160 -0
- package/dist/usage/quota-notices.js.map +1 -0
- package/dist/usage/usage-api.d.ts +32 -0
- package/dist/usage/usage-api.js +96 -1
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.d.ts +25 -1
- package/dist/usage-report.js +55 -4
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +6 -1
- package/dist/usage-rollup.js +16 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/view-api.d.ts +16 -0
- package/dist/view-api.js +100 -16
- package/dist/view-api.js.map +1 -1
- package/dist/view-history.d.ts +84 -0
- package/dist/view-history.js +116 -0
- package/dist/view-history.js.map +1 -0
- package/dist/web-api.d.ts +6 -38
- package/dist/web-api.js +20 -255
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +2 -19
- package/dist/web-chat-history.js +3 -72
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-only-fleet.d.ts +0 -20
- package/dist/web-only-fleet.js +0 -21
- package/dist/web-only-fleet.js.map +1 -1
- package/dist/web-session-authorization.d.ts +13 -2
- package/dist/web-session-authorization.js +10 -3
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.d.ts +0 -7
- package/dist/web-session.js +0 -2
- package/dist/web-session.js.map +1 -1
- package/dist/web-shell-routes.d.ts +1 -4
- package/dist/web-shell-routes.js +2 -7
- package/dist/web-shell-routes.js.map +1 -1
- package/launcher/private-home.cjs +1 -1
- package/package.json +3 -9
- package/dist/agent-runtime-api.d.ts +0 -4
- package/dist/agent-runtime-api.js +0 -59
- package/dist/agent-runtime-api.js.map +0 -1
- package/dist/agent-runtime-change.d.ts +0 -74
- package/dist/agent-runtime-change.js +0 -102
- package/dist/agent-runtime-change.js.map +0 -1
- package/dist/backend/grok-model-cache.d.ts +0 -7
- package/dist/backend/grok-model-cache.js +0 -65
- package/dist/backend/grok-model-cache.js.map +0 -1
- package/dist/backend/native-pane.d.ts +0 -9
- package/dist/backend/native-pane.js +0 -59
- package/dist/backend/native-pane.js.map +0 -1
- package/dist/fleet-windows-runtime.d.ts +0 -97
- package/dist/fleet-windows-runtime.js +0 -449
- package/dist/fleet-windows-runtime.js.map +0 -1
- package/dist/general-binding.d.ts +0 -85
- package/dist/general-binding.js +0 -298
- package/dist/general-binding.js.map +0 -1
- package/dist/general-host-owner.d.ts +0 -8
- package/dist/general-host-owner.js +0 -26
- package/dist/general-host-owner.js.map +0 -1
- package/dist/general-role.d.ts +0 -5
- package/dist/general-role.js +0 -26
- package/dist/general-role.js.map +0 -1
- package/dist/local-pane-endpoint.d.ts +0 -46
- package/dist/local-pane-endpoint.js +0 -189
- package/dist/local-pane-endpoint.js.map +0 -1
- package/dist/local-pane-launcher.d.ts +0 -2
- package/dist/local-pane-launcher.js +0 -38
- package/dist/local-pane-launcher.js.map +0 -1
- package/dist/local-pane-stage.ps1 +0 -101
- package/dist/model-catalog-defaults.d.ts +0 -14
- package/dist/model-catalog-defaults.js +0 -20
- package/dist/model-catalog-defaults.js.map +0 -1
- package/dist/native-agent-admission.d.ts +0 -7
- package/dist/native-agent-admission.js +0 -26
- package/dist/native-agent-admission.js.map +0 -1
- package/dist/native-daemon-client.d.ts +0 -13
- package/dist/native-daemon-client.js +0 -28
- package/dist/native-daemon-client.js.map +0 -1
- package/dist/native-instance-api.d.ts +0 -14
- package/dist/native-instance-api.js +0 -205
- package/dist/native-instance-api.js.map +0 -1
- package/dist/native-instance-input.d.ts +0 -84
- package/dist/native-instance-input.js +0 -54
- package/dist/native-instance-input.js.map +0 -1
- package/dist/native-instance-registry.d.ts +0 -32
- package/dist/native-instance-registry.js +0 -105
- package/dist/native-instance-registry.js.map +0 -1
- package/dist/native-mcp.d.ts +0 -40
- package/dist/native-mcp.js +0 -278
- package/dist/native-mcp.js.map +0 -1
- package/dist/native-model-catalog.d.ts +0 -5
- package/dist/native-model-catalog.js +0 -76
- package/dist/native-model-catalog.js.map +0 -1
- package/dist/native-pane-crash-budget.d.ts +0 -20
- package/dist/native-pane-crash-budget.js +0 -60
- package/dist/native-pane-crash-budget.js.map +0 -1
- package/dist/native-pane-create.d.ts +0 -26
- package/dist/native-pane-create.js +0 -53
- package/dist/native-pane-create.js.map +0 -1
- package/dist/native-pane-lifecycle.d.ts +0 -65
- package/dist/native-pane-lifecycle.js +0 -230
- package/dist/native-pane-lifecycle.js.map +0 -1
- package/dist/native-pane-manager.d.ts +0 -59
- package/dist/native-pane-manager.js +0 -584
- package/dist/native-pane-manager.js.map +0 -1
- package/dist/native-pane-output-log.d.ts +0 -15
- package/dist/native-pane-output-log.js +0 -108
- package/dist/native-pane-output-log.js.map +0 -1
- package/dist/native-pane-reconciliation.d.ts +0 -4
- package/dist/native-pane-reconciliation.js +0 -40
- package/dist/native-pane-reconciliation.js.map +0 -1
- package/dist/native-pane-recovery.d.ts +0 -12
- package/dist/native-pane-recovery.js +0 -10
- package/dist/native-pane-recovery.js.map +0 -1
- package/dist/native-pane-tools.d.ts +0 -2
- package/dist/native-pane-tools.js +0 -14
- package/dist/native-pane-tools.js.map +0 -1
- package/dist/pane-port.d.ts +0 -118
- package/dist/pane-port.js +0 -2
- package/dist/pane-port.js.map +0 -1
- package/dist/runtime-api.d.ts +0 -8
- package/dist/runtime-api.js +0 -171
- package/dist/runtime-api.js.map +0 -1
- package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +0 -21
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +0 -2
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +0 -19
- package/dist/runtime-assets/@xterm/addon-serialize/package.json +0 -29
- package/dist/runtime-assets/@xterm/headless/LICENSE +0 -21
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +0 -2
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +0 -46
- package/dist/runtime-assets/@xterm/headless/package.json +0 -29
- package/dist/runtime-assets/node-pty/CONPTY-LICENSE +0 -21
- package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +0 -503
- package/dist/runtime-assets/node-pty/LICENSE +0 -69
- package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +0 -16
- package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +0 -47
- package/dist/runtime-assets/node-pty/lib/index.js +0 -52
- package/dist/runtime-assets/node-pty/lib/interfaces.js +0 -7
- package/dist/runtime-assets/node-pty/lib/shared/conout.js +0 -11
- package/dist/runtime-assets/node-pty/lib/terminal.js +0 -190
- package/dist/runtime-assets/node-pty/lib/types.js +0 -7
- package/dist/runtime-assets/node-pty/lib/unixTerminal.js +0 -346
- package/dist/runtime-assets/node-pty/lib/utils.js +0 -39
- package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +0 -125
- package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +0 -320
- package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +0 -199
- package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +0 -22
- package/dist/runtime-assets/node-pty/package.json +0 -64
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/dist/runtime-build-info.d.ts +0 -9
- package/dist/runtime-build-info.js +0 -57
- package/dist/runtime-build-info.js.map +0 -1
- package/dist/runtime-bundle.d.ts +0 -19
- package/dist/runtime-bundle.js +0 -156
- package/dist/runtime-bundle.js.map +0 -1
- package/dist/runtime-cli.d.ts +0 -7
- package/dist/runtime-cli.js +0 -152
- package/dist/runtime-cli.js.map +0 -1
- package/dist/runtime-client-store.d.ts +0 -68
- package/dist/runtime-client-store.js +0 -344
- package/dist/runtime-client-store.js.map +0 -1
- package/dist/runtime-client.d.ts +0 -112
- package/dist/runtime-client.js +0 -736
- package/dist/runtime-client.js.map +0 -1
- package/dist/runtime-connection.d.ts +0 -22
- package/dist/runtime-connection.js +0 -93
- package/dist/runtime-connection.js.map +0 -1
- package/dist/runtime-coordinator.d.ts +0 -91
- package/dist/runtime-coordinator.js +0 -911
- package/dist/runtime-coordinator.js.map +0 -1
- package/dist/runtime-general-protocol.d.ts +0 -22
- package/dist/runtime-general-protocol.js +0 -57
- package/dist/runtime-general-protocol.js.map +0 -1
- package/dist/runtime-general-workspace.d.ts +0 -17
- package/dist/runtime-general-workspace.js +0 -213
- package/dist/runtime-general-workspace.js.map +0 -1
- package/dist/runtime-pane-assets.d.ts +0 -17
- package/dist/runtime-pane-assets.js +0 -23
- package/dist/runtime-pane-assets.js.map +0 -1
- package/dist/runtime-pane-boot.d.ts +0 -9
- package/dist/runtime-pane-boot.js +0 -47
- package/dist/runtime-pane-boot.js.map +0 -1
- package/dist/runtime-pane-codex-index.d.ts +0 -1
- package/dist/runtime-pane-codex-index.js +0 -47
- package/dist/runtime-pane-codex-index.js.map +0 -1
- package/dist/runtime-pane-config.d.ts +0 -16
- package/dist/runtime-pane-config.js +0 -54
- package/dist/runtime-pane-config.js.map +0 -1
- package/dist/runtime-pane-host.d.ts +0 -44
- package/dist/runtime-pane-host.js +0 -424
- package/dist/runtime-pane-host.js.map +0 -1
- package/dist/runtime-pane-job-owner.d.ts +0 -1
- package/dist/runtime-pane-job-owner.js +0 -29
- package/dist/runtime-pane-job-owner.js.map +0 -1
- package/dist/runtime-pane-job.ps1 +0 -116
- package/dist/runtime-pane-link.d.ts +0 -40
- package/dist/runtime-pane-link.js +0 -246
- package/dist/runtime-pane-link.js.map +0 -1
- package/dist/runtime-pane-mcp-protocol.d.ts +0 -32
- package/dist/runtime-pane-mcp-protocol.js +0 -39
- package/dist/runtime-pane-mcp-protocol.js.map +0 -1
- package/dist/runtime-pane-mcp-relay.d.ts +0 -17
- package/dist/runtime-pane-mcp-relay.js +0 -70
- package/dist/runtime-pane-mcp-relay.js.map +0 -1
- package/dist/runtime-pane-mcp.d.ts +0 -51
- package/dist/runtime-pane-mcp.js +0 -150
- package/dist/runtime-pane-mcp.js.map +0 -1
- package/dist/runtime-pane-native.d.ts +0 -45
- package/dist/runtime-pane-native.js +0 -65
- package/dist/runtime-pane-native.js.map +0 -1
- package/dist/runtime-pane-output.d.ts +0 -19
- package/dist/runtime-pane-output.js +0 -53
- package/dist/runtime-pane-output.js.map +0 -1
- package/dist/runtime-pane-port.d.ts +0 -139
- package/dist/runtime-pane-port.js +0 -558
- package/dist/runtime-pane-port.js.map +0 -1
- package/dist/runtime-pane-private.d.ts +0 -14
- package/dist/runtime-pane-private.js +0 -51
- package/dist/runtime-pane-private.js.map +0 -1
- package/dist/runtime-pane-private.ps1 +0 -14
- package/dist/runtime-pane-process.d.ts +0 -4
- package/dist/runtime-pane-process.js +0 -108
- package/dist/runtime-pane-process.js.map +0 -1
- package/dist/runtime-pane-protocol.d.ts +0 -172
- package/dist/runtime-pane-protocol.js +0 -195
- package/dist/runtime-pane-protocol.js.map +0 -1
- package/dist/runtime-pane-screen.d.ts +0 -19
- package/dist/runtime-pane-screen.js +0 -76
- package/dist/runtime-pane-screen.js.map +0 -1
- package/dist/runtime-pane-service.d.ts +0 -11
- package/dist/runtime-pane-service.js +0 -221
- package/dist/runtime-pane-service.js.map +0 -1
- package/dist/runtime-pane-stdio-protocol.d.ts +0 -54
- package/dist/runtime-pane-stdio-protocol.js +0 -94
- package/dist/runtime-pane-stdio-protocol.js.map +0 -1
- package/dist/runtime-pane-stdio.d.ts +0 -3
- package/dist/runtime-pane-stdio.js +0 -123
- package/dist/runtime-pane-stdio.js.map +0 -1
- package/dist/runtime-pane-store.d.ts +0 -33
- package/dist/runtime-pane-store.js +0 -164
- package/dist/runtime-pane-store.js.map +0 -1
- package/dist/runtime-pane-transcript-protocol.d.ts +0 -43
- package/dist/runtime-pane-transcript-protocol.js +0 -58
- package/dist/runtime-pane-transcript-protocol.js.map +0 -1
- package/dist/runtime-pane-transcript.d.ts +0 -45
- package/dist/runtime-pane-transcript.js +0 -605
- package/dist/runtime-pane-transcript.js.map +0 -1
- package/dist/runtime-pane-worker.d.ts +0 -1
- package/dist/runtime-pane-worker.js +0 -154
- package/dist/runtime-pane-worker.js.map +0 -1
- package/dist/runtime-protocol.d.ts +0 -162
- package/dist/runtime-protocol.js +0 -37
- package/dist/runtime-protocol.js.map +0 -1
- package/dist/runtime-switches.d.ts +0 -79
- package/dist/runtime-switches.js +0 -90
- package/dist/runtime-switches.js.map +0 -1
- package/dist/runtime-transcript-delta-reader.d.ts +0 -23
- package/dist/runtime-transcript-delta-reader.js +0 -74
- package/dist/runtime-transcript-delta-reader.js.map +0 -1
- package/dist/runtime-transcript-source.d.ts +0 -36
- package/dist/runtime-transcript-source.js +0 -189
- package/dist/runtime-transcript-source.js.map +0 -1
- package/dist/runtime-windows-bridge.d.ts +0 -41
- package/dist/runtime-windows-bridge.js +0 -157
- package/dist/runtime-windows-bridge.js.map +0 -1
- package/dist/settings-route-lifetime.d.ts +0 -14
- package/dist/settings-route-lifetime.js +0 -48
- package/dist/settings-route-lifetime.js.map +0 -1
- package/dist/tmux-pane-host.d.ts +0 -26
- package/dist/tmux-pane-host.js +0 -25
- package/dist/tmux-pane-host.js.map +0 -1
- package/dist/transcript-needles.d.ts +0 -35
- package/dist/transcript-needles.js +0 -158
- package/dist/transcript-needles.js.map +0 -1
- package/dist/transcript-records.d.ts +0 -21
- package/dist/transcript-records.js +0 -140
- package/dist/transcript-records.js.map +0 -1
- package/dist/ui/agent-proposals.js +0 -90
- package/dist/ui/agent-runtime-settings.js +0 -67
- package/dist/ui/agent-runtime.js +0 -124
- package/dist/ui/cli-picker.js +0 -42
- package/dist/ui/general-location.js +0 -71
- package/dist/ui/native-instance-settings.js +0 -44
- package/dist/ui/native-pane-recovery.js +0 -45
- package/dist/ui/panel-runtimes.js +0 -334
- package/dist/ui/panel-windows-agent.js +0 -86
- package/dist/ui/panel-windows-cli.js +0 -179
- package/dist/ui/provider-marks.js +0 -83
- package/dist/ui/runtime-catalog.js +0 -55
- package/dist/ui/settings-agent-filters.js +0 -94
- package/dist/ui/settings-layout.js +0 -245
- package/dist/ui/settings-outside.js +0 -176
- package/dist/ui/settings-shortcuts.js +0 -65
- package/dist/ui/shared/machine-name.js +0 -13
- package/dist/ui/shared/qrcode.module.js +0 -2237
- package/dist/ui/shared/settings-width.js +0 -31
- package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
- package/dist/ui/windows-agents-nav.js +0 -2
- package/dist/ui/windows-cli-catalog.js +0 -108
- package/dist/web-remote-access.d.ts +0 -152
- package/dist/web-remote-access.js +0 -368
- package/dist/web-remote-access.js.map +0 -1
- package/dist/windows-agents.d.ts +0 -126
- package/dist/windows-agents.js +0 -490
- package/dist/windows-agents.js.map +0 -1
- package/dist/windows-cli-api.d.ts +0 -23
- package/dist/windows-cli-api.js +0 -159
- package/dist/windows-cli-api.js.map +0 -1
- package/dist/windows-cli-providers.d.ts +0 -115
- package/dist/windows-cli-providers.js +0 -429
- package/dist/windows-cli-providers.js.map +0 -1
- package/dist/windows-cli-worker.d.ts +0 -59
- package/dist/windows-cli-worker.js +0 -479
- package/dist/windows-cli-worker.js.map +0 -1
- package/dist/windows-cli.d.ts +0 -116
- package/dist/windows-cli.js +0 -407
- package/dist/windows-cli.js.map +0 -1
- package/dist/windows-native-mcp.d.ts +0 -19
- package/dist/windows-native-mcp.js +0 -143
- package/dist/windows-native-mcp.js.map +0 -1
- package/dist/windows-pane-mcp.d.ts +0 -26
- package/dist/windows-pane-mcp.js +0 -187
- package/dist/windows-pane-mcp.js.map +0 -1
- package/templates/runtime-assets/conpty-LICENSE +0 -21
- package/templates/runtime-assets/conpty-NOTICE.md +0 -503
- package/templates/runtime-assets/local-pane-stage.ps1 +0 -101
- package/templates/runtime-assets/runtime-pane-job.ps1 +0 -116
- package/templates/runtime-assets/runtime-pane-private.ps1 +0 -14
- package/templates/runtime-assets/xterm-LICENSE +0 -21
package/dist/ui/preview-panel.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { html, useEffect, useRef, useState } from "/assets/app-html.js";
|
|
14
14
|
import { t } from "/assets/app-i18n.js";
|
|
15
15
|
import { Icon } from "/assets/ui-icons.js";
|
|
16
|
+
import { Skeleton } from "/assets/ui-states.js";
|
|
16
17
|
import "./chat-render.js";
|
|
17
18
|
import "./preview.js";
|
|
18
19
|
import { loadHtmlAttachment } from "./html-attachment.js";
|
|
@@ -20,6 +21,8 @@ import { chatTime, onDayChange } from "./chat-time.js";
|
|
|
20
21
|
import { PanelActions } from "./preview-panel-actions.js";
|
|
21
22
|
import { htmlTitle, versionsOf, lineDiff, diffHunks, DIFF_LIMITS } from "./preview-versions.js";
|
|
22
23
|
import { pagesOf, pageIdOf } from "./preview-pages.js";
|
|
24
|
+
import { drawMarkdown, TEXT_CARD_MAX } from "./chat-thread.js";
|
|
25
|
+
import "./chat-md-strings.js"; // M-2448: the Markdown panel's own words (an older cached chat-strings.js lacks them)
|
|
23
26
|
|
|
24
27
|
export { htmlTitle };
|
|
25
28
|
|
|
@@ -57,6 +60,16 @@ export function openPanel(spec, { run = false } = {}) {
|
|
|
57
60
|
set({ open: { ...spec, kind: "html" }, run: run ? ++runs : 0 });
|
|
58
61
|
retire(old); // State changes first: cleanup reentry cannot close a newer panel.
|
|
59
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* M-2448: show a Markdown file in the panel — `spec`: { key, instance, msgKey, att: { id, name, size }, sender, ts,
|
|
65
|
+
* text? } (text: what the card's Show already read). Nothing runs: it is rendered by the chat's own Markdown renderer.
|
|
66
|
+
* The block shown before stops, as for any open.
|
|
67
|
+
*/
|
|
68
|
+
export function openMarkdown(spec) {
|
|
69
|
+
const old = state.open;
|
|
70
|
+
set({ open: { ...spec, kind: "md" }, run: 0 });
|
|
71
|
+
retire(old);
|
|
72
|
+
}
|
|
60
73
|
/** Close publishes the empty slot before old-owner callbacks can reenter. */
|
|
61
74
|
export function closePanel() {
|
|
62
75
|
const old = state.open; if (!old) return;
|
|
@@ -318,7 +331,7 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
318
331
|
// #2915 review: the panel's generation, not just the key — a close and reopen of the same block while this read
|
|
319
332
|
// waits moves it, and the read is then dropped (claimPanel also drops any earlier click still reading).
|
|
320
333
|
const gen = claimPanel(), mine = reading.current = spec;
|
|
321
|
-
setNewerNote(
|
|
334
|
+
setNewerNote({ loading: true });
|
|
322
335
|
// A click on a version reads it whatever its size (up to the 50 MB ceiling); over 8 MB the panel then asks.
|
|
323
336
|
const r = await loadHtmlAttachment(spec.att, undefined, { anyway: true });
|
|
324
337
|
if (reading.current === mine) reading.current = null;
|
|
@@ -363,7 +376,35 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
363
376
|
}
|
|
364
377
|
return () => { live = false; };
|
|
365
378
|
}, [shown, open && open.key, prev && prev.key]);
|
|
379
|
+
// M-2448: a Markdown file's text (read once per open: the same capped, same-origin read as the chat's card) and
|
|
380
|
+
// which view shows it — rendered (the chat's Markdown renderer, which escapes first) or its source.
|
|
381
|
+
const [md, setMd] = useState(null); // { state: "loading" | "ready" | "failed", text?, reason? }
|
|
382
|
+
const [mdView, setMdView] = useState("rendered");
|
|
383
|
+
const [mdPlain, setMdPlain] = useState(false);
|
|
384
|
+
const mdBody = useRef(null);
|
|
385
|
+
const isMd = !!open && open.kind === "md";
|
|
386
|
+
useEffect(() => {
|
|
387
|
+
if (!isMd) { setMd(null); return undefined; }
|
|
388
|
+
setMdView("rendered");
|
|
389
|
+
if (typeof open.text === "string") { setMd({ state: "ready", text: open.text }); return undefined; }
|
|
390
|
+
let live = true;
|
|
391
|
+
setMd({ state: "loading" });
|
|
392
|
+
loadHtmlAttachment(open.att, undefined, { ask: TEXT_CARD_MAX, max: TEXT_CARD_MAX }).then((r) => {
|
|
393
|
+
if (!live) return;
|
|
394
|
+
setMd(r.ok ? { state: "ready", text: r.code } : { state: "failed", reason: r.reason === "over" ? t("chat.tcOver") : attReason(r) });
|
|
395
|
+
}, () => { if (live) setMd({ state: "failed", reason: t("chat.pvAttFailed") }); });
|
|
396
|
+
return () => { live = false; };
|
|
397
|
+
}, [isMd && open.key]);
|
|
398
|
+
useEffect(() => {
|
|
399
|
+
if (!isMd || !md || md.state !== "ready" || mdView !== "rendered" || !mdBody.current) return;
|
|
400
|
+
setMdPlain(drawMarkdown(mdBody.current, md.text) === "plain");
|
|
401
|
+
}, [isMd && open.key, md, mdView]);
|
|
366
402
|
const fileName = open && open.att ? open.att.name : undefined;
|
|
403
|
+
// The divider between the thread and the panel (both kinds): drag, or the arrow keys, Home and End.
|
|
404
|
+
function divider0() {
|
|
405
|
+
return html`<div data-trust="preview" class="pv-divider" ref=${divider} role="separator" aria-orientation="vertical" tabindex="0" aria-label=${t("chat.pvResize")}
|
|
406
|
+
aria-valuemin=${String(MIN_PANEL)} onKeyDown=${onKey} onPointerDown=${onDown}></div>`;
|
|
407
|
+
}
|
|
367
408
|
// Esc in the panel closes it (and is not the chat's "stop the reply").
|
|
368
409
|
const onPanelKey = (e) => {
|
|
369
410
|
if (e.key !== "Escape" || e.isComposing) return;
|
|
@@ -372,6 +413,8 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
372
413
|
};
|
|
373
414
|
|
|
374
415
|
if (!open) return null;
|
|
416
|
+
if (isMd) return html`${divider0()}<${MarkdownPanel} open=${open} name=${name} md=${md} view=${mdView} setView=${setMdView} plain=${mdPlain}
|
|
417
|
+
body=${mdBody} panel=${panel} fs=${fs} enterFs=${enterFs} leaveFs=${leaveFs} onKey=${onPanelKey} reveal=${reveal} />`;
|
|
375
418
|
const going = run.state === "starting" || run.state === "running";
|
|
376
419
|
const a = P().availability();
|
|
377
420
|
// #1554: a device that has not allowed previews is offered the same "Allow previews" here (the same confirm). Allowing
|
|
@@ -390,8 +433,7 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
390
433
|
if (want && pending.current === want && panelStore.get().run === want) start();
|
|
391
434
|
};
|
|
392
435
|
const source = t("chat.pvSource", open.sender || name, timeOf(open.ts));
|
|
393
|
-
return html
|
|
394
|
-
aria-valuemin=${String(MIN_PANEL)} onKeyDown=${onKey} onPointerDown=${onDown}></div>
|
|
436
|
+
return html`${divider0()}
|
|
395
437
|
<aside data-trust="preview" class=${`pv-panel${fs ? ` pv-fs pv-fs-${fs}` : ""}`} ref=${panel} aria-label=${t("chat.pvPanel")} onKeyDown=${onPanelKey}>
|
|
396
438
|
<div class="pv-panel-head">
|
|
397
439
|
<button type="button" class="icon-btn only-narrow pv-panel-close" title=${t("chat.pvBack")} aria-label=${t("chat.pvBack")} onClick=${closePanel}><${Icon} name="back" size=${18} /></button>
|
|
@@ -425,8 +467,9 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
425
467
|
<button type="button" class="btn btn-sm pv-panel-dl" title=${t("chat.pvDownload")} onClick=${() => download(open.code, fileName)}><${Icon} name="download" size=${14} /><span class="lbl">${t("chat.pvDownload")}</span></button>
|
|
426
468
|
</div>
|
|
427
469
|
${newer && newer.key !== open.key ? html`<div class="pv-newer" role="status"><span>${t("chat.pvNewer", timeOf(newer.ts))}</span>
|
|
428
|
-
<button type="button" class="btn btn-sm pv-newer-show" onClick=${showNewer}>${t("chat.pvNewerShow")}</button>${newerNote ?
|
|
429
|
-
|
|
470
|
+
<button type="button" class="btn btn-sm pv-newer-show" onClick=${showNewer}>${t("chat.pvNewerShow")}</button>${newerNote ? newerNote.loading
|
|
471
|
+
? html`<${Skeleton} variant="inline" lines=${1} label=${t("chat.pvLoading")} />` : html`<span class="pv-newer-note">${newerNote}</span>` : null}</div>` : null}
|
|
472
|
+
${newerNote && !(newer && newer.key !== open.key) ? newerNote.loading ? html`<${Skeleton} lines=${3} label=${t("chat.pvLoading")} />` : html`<div class="pv-note pv-ver-note" role="status">${newerNote}</div>` : null}
|
|
430
473
|
${going && !P().bannerAcked() ? html`<div class="pv-banner"><span class="pv-banner-text">${P().banner()}</span>
|
|
431
474
|
<button type="button" class="btn btn-sm btn-ghost pv-ack" title=${P().bannerAckTitle()} onClick=${() => P().ackBanner()}>${P().bannerAckLabel()}</button></div>` : null}
|
|
432
475
|
${cdnHost && shown === "preview" ? html`<div class="pv-note pv-cdn-note" role="status">${t("chat.pvCdnNote", cdnHost)}</div>` : null}
|
|
@@ -440,9 +483,44 @@ export function PreviewPanel({ name, split, msgs, subscribe, keyOf, reveal, down
|
|
|
440
483
|
</aside>`;
|
|
441
484
|
}
|
|
442
485
|
|
|
486
|
+
/**
|
|
487
|
+
* M-2448: a Markdown file in the panel — the HTML preview's frame (head, source, close, full screen; a full-screen
|
|
488
|
+
* sheet on a phone), with Rendered / Source and Download. Nothing in the file runs: Rendered is the chat's Markdown
|
|
489
|
+
* renderer (escaped first, no raw HTML), Source is text.
|
|
490
|
+
*/
|
|
491
|
+
function MarkdownPanel({ open, name, md, view, setView, plain, body, panel, fs, enterFs, leaveFs, onKey, reveal }) {
|
|
492
|
+
const source = t("chat.pvSource", open.sender || name, timeOf(open.ts));
|
|
493
|
+
const ready = md && md.state === "ready";
|
|
494
|
+
return html`<aside data-trust="preview" class=${`pv-panel pv-md-panel${fs ? ` pv-fs pv-fs-${fs}` : ""}`} ref=${panel} aria-label=${t("chat.pvMdPanel")} onKeyDown=${onKey}>
|
|
495
|
+
<div class="pv-panel-head">
|
|
496
|
+
<button type="button" class="icon-btn only-narrow pv-panel-close" title=${t("chat.pvBack")} aria-label=${t("chat.pvBack")} onClick=${closePanel}><${Icon} name="back" size=${18} /></button>
|
|
497
|
+
<div class="pv-panel-title"><strong>${open.att ? open.att.name : t("chat.pvMdPanel")}</strong>
|
|
498
|
+
<button type="button" class="pv-source" title=${source} onClick=${() => { if (window.matchMedia && window.matchMedia("(max-width: 899px)").matches) closePanel(); reveal(open.msgKey); }}>${source}</button></div>
|
|
499
|
+
<button type="button" class="icon-btn only-wide pv-panel-close" title=${t("chat.pvClose")} aria-label=${t("chat.pvClose")} onClick=${closePanel}><${Icon} name="close" size=${18} /></button>
|
|
500
|
+
</div>
|
|
501
|
+
<div class="pv-panel-bar">
|
|
502
|
+
<div class="seg-inline" role="group" aria-label=${t("chat.pvMdPanel")}>
|
|
503
|
+
<button type="button" class=${`btn btn-sm${view === "rendered" ? " on" : ""}`} aria-pressed=${view === "rendered" ? "true" : "false"} title=${t("chat.pvMdRendered")} onClick=${() => setView("rendered")}><${Icon} name="eye" size=${14} /><span class="lbl">${t("chat.pvMdRendered")}</span></button>
|
|
504
|
+
<button type="button" class=${`btn btn-sm${view === "source" ? " on" : ""}`} aria-pressed=${view === "source" ? "true" : "false"} title=${t("chat.pvMdSource")} onClick=${() => setView("source")}><${Icon} name="code" size=${14} /><span class="lbl">${t("chat.pvMdSource")}</span></button>
|
|
505
|
+
</div>
|
|
506
|
+
<span class="grow"></span>
|
|
507
|
+
<button type="button" class=${`btn btn-sm only-wide pv-panel-fs${fs ? " on" : ""}`} aria-pressed=${fs ? "true" : "false"} title=${t(fs ? "chat.pvFsExit" : "chat.pvFs")} aria-label=${t(fs ? "chat.pvFsExit" : "chat.pvFs")}
|
|
508
|
+
onClick=${() => (fs ? leaveFs() : enterFs())}><${Icon} name=${fs ? "fullscreenexit" : "fullscreen"} size=${14} /></button>
|
|
509
|
+
${open.att ? html`<a class="btn btn-sm pv-panel-dl" href=${`/ui/file/${open.att.id}`} download=${open.att.name} title=${t("chat.pvDownload")}><${Icon} name="download" size=${14} /><span class="lbl">${t("chat.pvDownload")}</span></a>` : null}
|
|
510
|
+
</div>
|
|
511
|
+
${md && md.state === "loading" ? html`<${Skeleton} lines=${8} label=${t("chat.pvLoading")} />` : null}
|
|
512
|
+
${md && md.state === "failed" ? html`<div class="pv-note" role="alert">${md.reason}</div>` : null}
|
|
513
|
+
${ready && view === "rendered" && plain ? html`<div class="pv-note" role="status">${t("chat.tcPlain")}</div>` : null}
|
|
514
|
+
<div class="pv-panel-body show-code">
|
|
515
|
+
${ready && view === "rendered" ? html`<div class="pv-code pv-md" ref=${body}></div>` : null}
|
|
516
|
+
${ready && view === "source" ? html`<pre class="pv-code"><code>${md.text}</code></pre>` : null}
|
|
517
|
+
</div>
|
|
518
|
+
</aside>`;
|
|
519
|
+
}
|
|
520
|
+
|
|
443
521
|
/** The Changes view: hunks of the line diff as a unified diff shows them, drawn as text (never as HTML). */
|
|
444
522
|
function Changes({ changes }) {
|
|
445
|
-
if (!changes || changes.state === "loading") return html
|
|
523
|
+
if (!changes || changes.state === "loading") return html`<${Skeleton} lines=${8} label=${t("chat.pvLoading")} />`;
|
|
446
524
|
if (changes.state === "failed") return html`<div class="pv-note pv-diff-note">${changes.reason}</div>`;
|
|
447
525
|
if (changes.state === "big") return html`<div class="pv-note pv-diff-note">${t("chat.pvChangesBig")}</div>`;
|
|
448
526
|
if (!changes.hunks.length) return html`<div class="pv-note pv-diff-note">${t("chat.pvChangesNone", changes.from)}</div>`;
|
package/dist/ui/search-dialog.js
CHANGED
|
@@ -12,6 +12,7 @@ import { navigate } from "/assets/app-nav.js";
|
|
|
12
12
|
import { chatPath, fleetPath } from "/assets/app-route.js";
|
|
13
13
|
import { namesOf, namesStore } from "/assets/instance-nav.js";
|
|
14
14
|
import { Icon } from "/assets/ui-icons.js";
|
|
15
|
+
import { Skeleton } from "/assets/ui-states.js";
|
|
15
16
|
import { goToSetting, searchSettings, settingLabel } from "./settings-registry.js";
|
|
16
17
|
import "./settings-strings.js";
|
|
17
18
|
|
|
@@ -332,7 +333,7 @@ function Results({ guest = false, q, res, groups, settings = [], active, setActi
|
|
|
332
333
|
return html`
|
|
333
334
|
${res.building ? html`<p class="search-note" role="status">${t("search.building")}</p>` : null}
|
|
334
335
|
${res.limited ? html`<p class="search-note" role="status">${t("search.limited")}</p>` : null}
|
|
335
|
-
${res.status === "loading" && !hits.length ? html
|
|
336
|
+
${res.status === "loading" && !hits.length ? html`<${Skeleton} variant="rows" lines=${4} label=${t("search.searching")} />` : null}
|
|
336
337
|
${failed ? html`<p class="search-status bad" role="alert">${res.error}</p>` : null}
|
|
337
338
|
${res.status === "ok" && !hits.length && !settings.length ? html`<p class="search-status" role="status">${filtered ? t("search.noneFiltered") : t("search.none")}</p>` : null}
|
|
338
339
|
<div id="search-results" role="listbox" aria-label=${t("search.results")} class=${`search-results${res.status === "loading" ? " stale" : ""}`}>
|
|
@@ -367,7 +368,7 @@ function Detail({ detail, q, label, onBack, onClose }) {
|
|
|
367
368
|
const head = html`<div class="search-detail-head"><button type="button" class="chip-btn" onClick=${onBack}><${Icon} name="back" size=${14} />${t("search.back")}</button>
|
|
368
369
|
<span class=${`search-badge ${hit.source}`}>${t(`search.badge_${hit.source}`)}</span><span class="search-who">${hit.source === "xmsg" ? t("search.from", label(hit.instance), label(hit.peer || "")) : label(hit.instance)}</span>
|
|
369
370
|
<time class="search-time">${when(hit.ts)}</time></div>`;
|
|
370
|
-
if (detail.status === "loading") return html`<div class="search-detail">${head}
|
|
371
|
+
if (detail.status === "loading") return html`<div class="search-detail">${head}<${Skeleton} lines=${6} label=${t("search.loadingCtx")} /></div>`;
|
|
371
372
|
if (detail.status === "error") return html`<div class="search-detail">${head}<p class="search-status bad" role="alert">${detail.error}</p></div>`;
|
|
372
373
|
const ctx = detail.ctx || {};
|
|
373
374
|
const doc = ctx.doc || {};
|
|
@@ -5,8 +5,6 @@ import { html, useEffect, useRef, useState } from "/assets/app-html.js";
|
|
|
5
5
|
import { register, t } from "/assets/app-i18n.js";
|
|
6
6
|
import { recordEdit } from "/assets/text-undo.js";
|
|
7
7
|
import { appStore, useStore } from "/assets/app-store.js";
|
|
8
|
-
// #2978 merge: from their own module, never from the long-lived shell (a stale tab's shell lacks them).
|
|
9
|
-
import { DEFAULT_SETTINGS_CONTENT_WIDTH, SETTINGS_CONTENT_WIDTHS, settingsContentWidthStore, setSettingsContentWidth } from "/assets/settings-width.js";
|
|
10
8
|
import { ModsCard } from "./settings-mods.js";
|
|
11
9
|
import { Icon } from "/assets/ui-icons.js";
|
|
12
10
|
import { toast } from "/assets/ui-toast.js";
|
|
@@ -24,22 +22,6 @@ import { CardTitle } from "./settings-learn.js";
|
|
|
24
22
|
import "./settings-strings.js";
|
|
25
23
|
|
|
26
24
|
const tn = (k, ...v) => t(`settings.${k}`, ...v);
|
|
27
|
-
register("settingsContentWidth", {
|
|
28
|
-
en: {
|
|
29
|
-
label: "Settings content width",
|
|
30
|
-
device: "This device · saves immediately",
|
|
31
|
-
hint: "Applies to every Settings page; adapts to narrow windows.",
|
|
32
|
-
option: "{0} px",
|
|
33
|
-
defaultOption: "{0} px (default)",
|
|
34
|
-
},
|
|
35
|
-
"zh-TW": {
|
|
36
|
-
label: "設定頁內容寬度",
|
|
37
|
-
device: "此裝置・立即儲存",
|
|
38
|
-
hint: "套用到所有設定頁;窄視窗會自動配合可用空間。",
|
|
39
|
-
option: "{0} px",
|
|
40
|
-
defaultOption: "{0} px(預設)",
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
25
|
/** #2390: a refusal's detail in the page's language when the host named it (detail_key), else its English as sent. */
|
|
44
26
|
export function appIconDetail(body) {
|
|
45
27
|
const key = body && typeof body.detail_key === "string" ? `appIconDetail_${body.detail_key}` : null;
|
|
@@ -79,85 +61,16 @@ export function AppearanceSection(props = {}) {
|
|
|
79
61
|
const part = props.part || "look";
|
|
80
62
|
const publicLink = typeof document !== "undefined" && document.body && document.body.dataset.publicLink === "1";
|
|
81
63
|
// #2347 regrouping: Look (the person's own), this device's switches (in Preferences) and the host-wide cards (in Web
|
|
82
|
-
// dashboard) are drawn where each belongs.
|
|
83
|
-
if (publicLink) return part === "look" ? html`<
|
|
84
|
-
<${ThemeModeCard} publicLink=${true} />
|
|
85
|
-
<section class="card s-appearance"><h3>${tn("cssTitle")}</h3><p class="sub">${tn("cssPublicLink")}</p></section>
|
|
86
|
-
</div></div>` : null;
|
|
64
|
+
// dashboard) are drawn where each belongs. None of it is offered over the public link (Look says so).
|
|
65
|
+
if (publicLink) return part === "look" ? html`<section class="card s-appearance"><h3>${tn("cssTitle")}</h3><p class="sub">${tn("cssPublicLink")}</p></section>` : null;
|
|
87
66
|
if (part === "device") return html`<${MotionCard} ...${props} /><${DeviceCard} ...${props} />`;
|
|
88
|
-
if (part === "dashboard") return html`<${AppIconCard}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
</section>
|
|
96
|
-
<section class="card s-appearance s-look-motion"><${CardTitle} title=${tn("lookMotionGroup")} topic="themes" />
|
|
97
|
-
<${ThemesCard} compact=${true} ...${props} /><${MotionCard} compact=${true} ...${props} />
|
|
98
|
-
</section>
|
|
99
|
-
</div>
|
|
100
|
-
<${AppearancePreview} />
|
|
101
|
-
</div>
|
|
102
|
-
<div class="s-look-advanced">
|
|
103
|
-
<${AppearanceDisclosure} title=${tn("widgetTitle")} icon="sliders"><${SidebarWidgetCard} /></${AppearanceDisclosure}>
|
|
104
|
-
<${AppearanceDisclosure} title=${tn("cssTitle")} icon="code"><${OwnerCssCard} /><${DeviceCard} ...${props} /></${AppearanceDisclosure}>
|
|
105
|
-
<${AppearanceDisclosure} title=${tn("modsTitle")} icon="plug"><${ModsCard} /></${AppearanceDisclosure}>
|
|
106
|
-
<${AppearanceDisclosure} title=${tn("restoreTitle")} icon="restart" danger=${true}><${RestoreDefaultsCard} ...${props} /></${AppearanceDisclosure}>
|
|
107
|
-
</div>
|
|
108
|
-
</div>`;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/** Theme remains a normal personal preference, including the public dashboard's existing browser-only choice. */
|
|
112
|
-
function ThemeModeCard({ publicLink = false }) {
|
|
113
|
-
const [theme, setTheme] = useState(typeof AgendTheme !== "undefined" ? AgendTheme.get() : "system");
|
|
114
|
-
useEffect(() => (typeof AgendTheme !== "undefined" && typeof AgendTheme.onChange === "function" ? AgendTheme.onChange(setTheme) : undefined), []);
|
|
115
|
-
const choose = (value) => { setTheme(value); if (typeof AgendTheme !== "undefined") AgendTheme.set(value); savePref("theme", value); };
|
|
116
|
-
return html`<section class="card s-appearance s-look-display"><h3>${tn("lookDisplayGroup")}</h3>
|
|
117
|
-
<fieldset id="pref-theme" class="s-theme-picker"><legend>${t("app.theme")}</legend><div class="s-theme-options">
|
|
118
|
-
${[["light", "themeLight"], ["dark", "themeDark"], ["system", "themeSystem"]].map(([value, key]) => html`<label key=${value} class=${`s-theme-choice${theme === value ? " selected" : ""}`}>
|
|
119
|
-
<input type="radio" name="pref-theme-choice" value=${value} checked=${theme === value} onChange=${(event) => { if (event.currentTarget.checked) choose(value); }} />
|
|
120
|
-
<span class=${`s-theme-miniature is-${value}`} aria-hidden="true"><span class="s-theme-mini-side"><i></i><i></i><i></i></span><span class="s-theme-mini-main"><i></i><i></i><i></i></span></span>
|
|
121
|
-
<span class="s-theme-choice-label">${t(`app.${key}`)}</span>
|
|
122
|
-
</label>`)}
|
|
123
|
-
</div></fieldset>
|
|
124
|
-
<${SettingsContentWidth} />
|
|
125
|
-
${publicLink ? html`<p class="sub">${tn("syncedPublicLink")}</p>` : null}
|
|
126
|
-
</section>`;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/** This device's layout choice is independent of the Settings Save/Discard bar. */
|
|
130
|
-
function SettingsContentWidth() {
|
|
131
|
-
const { width } = useStore(settingsContentWidthStore);
|
|
132
|
-
return html`<div class="s-settings-content-width">
|
|
133
|
-
<label for="settings-content-width">${t("settingsContentWidth.label")}<span class="s-scope">${t("settingsContentWidth.device")}</span></label>
|
|
134
|
-
<select id="settings-content-width" value=${width} aria-describedby="settings-content-width-hint" onChange=${(event) => setSettingsContentWidth(Number(event.currentTarget.value))}>
|
|
135
|
-
${SETTINGS_CONTENT_WIDTHS.map((value) => html`<option key=${value} value=${value}>${t(`settingsContentWidth.${value === DEFAULT_SETTINGS_CONTENT_WIDTH ? "defaultOption" : "option"}`, value)}</option>`)}
|
|
136
|
-
</select>
|
|
137
|
-
<p id="settings-content-width-hint" class="sub">${t("settingsContentWidth.hint")}</p>
|
|
138
|
-
</div>`;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/** The panels stay mounted inside native details, so drafts, CSS trials and deep links survive disclosure changes. */
|
|
142
|
-
function AppearanceDisclosure({ title, icon, danger = false, children }) {
|
|
143
|
-
return html`<details class=${`s-look-disclosure${danger ? " is-restore" : ""}`}>
|
|
144
|
-
<summary><${Icon} name=${icon} size=${17} /><span>${title}</span><${Icon} name="chevron" size=${16} /></summary>
|
|
145
|
-
<div class="s-look-disclosure-body">${children}</div>
|
|
146
|
-
</details>`;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/** This preview uses the same live colour and default-size preferences as the existing controls. */
|
|
150
|
-
function AppearancePreview() {
|
|
151
|
-
useIdentityColors();
|
|
152
|
-
useStore(cardSizeStore);
|
|
153
|
-
const size = cardSizeDefault();
|
|
154
|
-
return html`<aside class="card s-look-preview" aria-labelledby="look-preview-title">
|
|
155
|
-
<h3 id="look-preview-title">${tn("lookPreview")}</h3>
|
|
156
|
-
<p class="sub">${tn("lookPreviewHint")}</p>
|
|
157
|
-
<div class="s-look-sidebar-sample"><${ColorSample} places=${defaultPlaces()} off=${colorsOff()} /></div>
|
|
158
|
-
<div class=${`s-look-card-sample is-${size}`} aria-hidden="true"><span class="s-look-preview-avatar">A</span>
|
|
159
|
-
<strong>${tn("colorSample")}</strong><span>${tn("cardSizeTitle")} · ${t(`card.size${size.toUpperCase()}Name`)}</span></div>
|
|
160
|
-
</aside>`;
|
|
67
|
+
if (part === "dashboard") return html`<${AppIconCard} /><${CardLimitsCard} />`;
|
|
68
|
+
const group = (key) => html`<h2 class="s-ap-group">${tn(key)}</h2>`;
|
|
69
|
+
return html`${group("groupLook")}<${ThemesCard} ...${props} /><${IdentityColorCard} /><${CardSizeCard} />
|
|
70
|
+
${group("groupLayout")}<${SidebarWidgetCard} />
|
|
71
|
+
${group("groupCss")}<${OwnerCssCard} />
|
|
72
|
+
${group("groupMods")}<${ModsCard} />
|
|
73
|
+
<${RestoreDefaultsCard} ...${props} />`;
|
|
161
74
|
}
|
|
162
75
|
|
|
163
76
|
/** #2347: the staged keys of this device's own switches (Restore defaults sets them, so their staged change goes). */
|
|
@@ -193,23 +106,17 @@ function IdentityColorCard() {
|
|
|
193
106
|
useIdentityColors();
|
|
194
107
|
const places = defaultPlaces(), off = colorsOff();
|
|
195
108
|
const toggle = (p) => setDefaultPlaces(places.includes(p) ? places.filter((x) => x !== p) : [...places, p]);
|
|
196
|
-
return html`<
|
|
197
|
-
|
|
198
|
-
<
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
<div class="s-colors-row">
|
|
204
|
-
<fieldset class="idc-places" disabled=${off}><legend>${tn("colorPlaces")}</legend>
|
|
205
|
-
${PLACEMENTS.map((p) => html`<label key=${p} class="check"><input type="checkbox" checked=${places.includes(p)} onChange=${() => toggle(p)} /> ${t(`color.place_${p}`)}</label>`)}
|
|
206
|
-
</fieldset>
|
|
207
|
-
<${ColorSample} places=${places} off=${off} />
|
|
208
|
-
</div>
|
|
209
|
-
<label class="check"><input type="checkbox" class="s-colors-off" checked=${off} onChange=${(e) => setColorsOff(e.target.checked)} /> <span>${tn("colorOff")}</span></label>
|
|
210
|
-
<p class="sub">${tn("colorOffLead")}</p>
|
|
109
|
+
return html`<section class="card s-appearance s-synced s-colors"><${CardTitle} title=${tn("colorTitle")} topic="colors" />
|
|
110
|
+
<p class="sub">${tn("colorLead")}</p>
|
|
111
|
+
<div class="s-colors-row">
|
|
112
|
+
<fieldset class="idc-places" disabled=${off}><legend>${tn("colorPlaces")}</legend>
|
|
113
|
+
${PLACEMENTS.map((p) => html`<label key=${p} class="check"><input type="checkbox" checked=${places.includes(p)} onChange=${() => toggle(p)} /> ${t(`color.place_${p}`)}</label>`)}
|
|
114
|
+
</fieldset>
|
|
115
|
+
<${ColorSample} places=${places} off=${off} />
|
|
211
116
|
</div>
|
|
212
|
-
|
|
117
|
+
<label class="check"><input type="checkbox" class="s-colors-off" checked=${off} onChange=${(e) => setColorsOff(e.target.checked)} /> <span>${tn("colorOff")}</span></label>
|
|
118
|
+
<p class="sub">${tn("colorOffLead")}</p>
|
|
119
|
+
</section>`;
|
|
213
120
|
}
|
|
214
121
|
|
|
215
122
|
/**
|
|
@@ -326,7 +233,7 @@ function AppIconCard() {
|
|
|
326
233
|
if (auth && auth.canWrite) Promise.resolve(auth.canWrite()).then((v) => setCanWrite(v === true), () => {});
|
|
327
234
|
}, []);
|
|
328
235
|
useEffect(() => () => { if (picked) URL.revokeObjectURL(picked.url); }, [picked]);
|
|
329
|
-
const title = html
|
|
236
|
+
const title = html`<${CardTitle} title=${tn("appIconTitle")} topic="app-icon" />`;
|
|
330
237
|
if (!state) return html`<section class="card s-appearance s-app-icon">${title}<p class="sub">…</p></section>`;
|
|
331
238
|
if (state.failed) return html`<section class="card s-appearance s-app-icon">${title}<p class="err">${tn("appIconLoadFailed")}</p></section>`;
|
|
332
239
|
|
|
@@ -383,7 +290,7 @@ function AppIconCard() {
|
|
|
383
290
|
${state.custom && !picked ? html`<button type="button" class="btn" disabled=${busy} onClick=${reset}>${tn("appIconReset")}</button>` : null}
|
|
384
291
|
</div>` : html`<p class="sub">${tn("appIconReadOnly")}</p>`}
|
|
385
292
|
<p class="sub">${tn("appIconWho")}</p>
|
|
386
|
-
<
|
|
293
|
+
<p class="sub">${tn("appIconIos")}</p>
|
|
387
294
|
</section>`;
|
|
388
295
|
}
|
|
389
296
|
|
|
@@ -428,7 +335,7 @@ function CardLimitsCard() {
|
|
|
428
335
|
if (r.ok) { setMsg(tn("cardLimitsSaved")); load(); } else setMsg(tn("cardLimitsFailed", (r.body && r.body.error) || r.status));
|
|
429
336
|
};
|
|
430
337
|
const warnings = Array.isArray(view.warnings) ? view.warnings : [];
|
|
431
|
-
return html`<section class="card s-appearance
|
|
338
|
+
return html`<section class="card s-appearance"><${CardTitle} title=${tn("cardLimitsTitle")} topic="limits" />
|
|
432
339
|
<p class="sub">${tn("cardLimitsLead")}</p>
|
|
433
340
|
<fieldset class="form" disabled=${busy}>
|
|
434
341
|
${["portrait", "banner", "instance_quota"].map((g) => html`<div key=${g} class="grid3">
|
|
@@ -448,11 +355,8 @@ function CardLimitsCard() {
|
|
|
448
355
|
}
|
|
449
356
|
|
|
450
357
|
/** #1629 r2 (d): whether this person's screens show agents' themes (and, as they come, effects) — synced. */
|
|
451
|
-
function ThemesCard(
|
|
358
|
+
function ThemesCard() {
|
|
452
359
|
const s = useStore(themesStore);
|
|
453
|
-
if (compact) return html`<div class="s-look-toggle-line s-themes"><label for="fx-show-themes">${tn("themesShow")}</label>
|
|
454
|
-
<input id="fx-show-themes" class="s-ui-toggle" type="checkbox" checked=${s.shown} disabled=${safeMode()} onChange=${(e) => setThemesShown(e.target.checked)} />
|
|
455
|
-
<p class="sub">${safeMode() ? tn("themesSafeMode") : tn("themesShowLead")}</p></div>`;
|
|
456
360
|
return html`<section class="card s-appearance s-synced s-themes"><${CardTitle} title=${tn("themesTitle")} topic="themes" />
|
|
457
361
|
<label class="check"><input id="fx-show-themes" type="checkbox" checked=${s.shown} disabled=${safeMode()} onChange=${(e) => setThemesShown(e.target.checked)} />
|
|
458
362
|
<span>${tn("themesShow")}</span></label>
|
|
@@ -606,9 +510,6 @@ function MotionCard(props = {}) {
|
|
|
606
510
|
const [follow, setFollow] = useState(followsReducedMotion);
|
|
607
511
|
useEffect(() => onMotionChange(() => setFollow(followsReducedMotion())), []);
|
|
608
512
|
const setFollowHere = deviceChoice(props, DEVICE_CHOICES[0], tn("themesFollowMotion"), followsReducedMotion, setFollowsReducedMotion);
|
|
609
|
-
if (props.compact) return html`<div class="s-look-toggle-line s-motion"><label for="fx-follow-reduced-motion">${tn("themesFollowMotion")}<span class="s-scope">${tn("cssDeviceTitle")}</span></label>
|
|
610
|
-
<input type="checkbox" class="s-ui-toggle" id="fx-follow-reduced-motion" checked=${follow} onChange=${(e) => setFollowHere(e.target.checked)} />
|
|
611
|
-
<p class="sub">${tn("themesFollowMotionLead")}</p></div>`;
|
|
612
513
|
return html`<section class="card s-appearance s-local s-motion"><h3>${tn("motionTitle")}</h3>
|
|
613
514
|
<label class="check"><input type="checkbox" id="fx-follow-reduced-motion" checked=${follow} onChange=${(e) => setFollowHere(e.target.checked)} />
|
|
614
515
|
<span>${tn("themesFollowMotion")}</span></label>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// signed in, new enough: /ui/backends) and the model catalog of that backend for that instance's account (/ui/models).
|
|
3
3
|
// Both answers are the server's cached ones; nothing here makes the server probe. A page asks once and reuses the answer
|
|
4
4
|
// for a short while, so opening several dialogs costs one request each.
|
|
5
|
-
import { useEffect,
|
|
5
|
+
import { useEffect, useState } from "/assets/app-html.js";
|
|
6
6
|
|
|
7
7
|
const TTL_MS = 30_000;
|
|
8
8
|
const cache = new Map(); // url → { at, value, pending }
|
|
@@ -13,10 +13,10 @@ async function getJson(url) {
|
|
|
13
13
|
return res.json();
|
|
14
14
|
}
|
|
15
15
|
/** The answer for `url`, shared by every field on the page while it is fresh; null when it cannot be read. */
|
|
16
|
-
function cached(url
|
|
16
|
+
function cached(url) {
|
|
17
17
|
const hit = cache.get(url), now = performance.now();
|
|
18
|
-
if (hit && (hit.pending ||
|
|
19
|
-
const pending = getJson(
|
|
18
|
+
if (hit && (hit.pending || now - hit.at < TTL_MS)) return hit.pending ?? Promise.resolve(hit.value);
|
|
19
|
+
const pending = getJson(url).then((value) => { cache.set(url, { at: performance.now(), value, pending: null }); return value; })
|
|
20
20
|
.catch(() => { cache.delete(url); return null; });
|
|
21
21
|
cache.set(url, { at: now, value: null, pending });
|
|
22
22
|
return pending;
|
|
@@ -45,39 +45,12 @@ export function useBackendRows() {
|
|
|
45
45
|
return answer && Array.isArray(answer.backends) ? answer.backends : answer === undefined ? undefined : null;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
export function
|
|
50
|
-
const url = backend ? `/ui/models?backend=${encodeURIComponent(backend)}${instance ? `&instance=${encodeURIComponent(instance)}` : ""}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const load = (force = false) => {
|
|
55
|
-
if (!url) return;
|
|
56
|
-
const mine = ++generation.current;
|
|
57
|
-
setState(old => ({ url, answer:old.url === url ? old.answer : null, loading:true }));
|
|
58
|
-
cached(url, force).then(answer => {
|
|
59
|
-
if (active.current === url && generation.current === mine) setState({ url, answer, loading:false });
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
if (url) load();
|
|
64
|
-
return () => { generation.current++; };
|
|
65
|
-
}, [url]);
|
|
66
|
-
const current = state.url === url ? state : { answer:null, loading:!!url };
|
|
67
|
-
const valid = current.answer && Array.isArray(current.answer.models);
|
|
68
|
-
return {
|
|
69
|
-
models: valid ? current.answer.models : [],
|
|
70
|
-
loading: !!url && current.loading,
|
|
71
|
-
error: !!url && !current.loading && !valid,
|
|
72
|
-
source: valid ? current.answer.source : null,
|
|
73
|
-
refresh: () => load(true),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** Compatibility for callers that only need the model list. */
|
|
78
|
-
export function useModelCatalog(backend, instance, runtime) {
|
|
79
|
-
const state = useModelCatalogState(backend, instance, runtime);
|
|
80
|
-
return state.loading && !state.models.length ? undefined : state.models;
|
|
48
|
+
/** The model catalog of `backend` for `instance` (its account) — [] when none is cached; undefined while loading. */
|
|
49
|
+
export function useModelCatalog(backend, instance) {
|
|
50
|
+
const url = backend ? `/ui/models?backend=${encodeURIComponent(backend)}${instance ? `&instance=${encodeURIComponent(instance)}` : ""}` : null;
|
|
51
|
+
const answer = useAnswer(url);
|
|
52
|
+
if (answer === undefined) return undefined;
|
|
53
|
+
return answer && Array.isArray(answer.models) ? answer.models : [];
|
|
81
54
|
}
|
|
82
55
|
|
|
83
56
|
/** A state that keeps a backend from being chosen (shown, disabled, with why); "unknown" never does. */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// M-2446: the agent dialog's Codex speed words, lazy and fixed. A tab opened before an upgrade may keep the old
|
|
2
|
+
// settings-strings module while the dialog module is fresh: these words live here, registered with the dialog.
|
|
3
|
+
import { register } from "/assets/app-i18n.js";
|
|
4
|
+
register("settings", {
|
|
5
|
+
en: {
|
|
6
|
+
codexSpeed: "Speed",
|
|
7
|
+
codexSpeedDefault: "Codex default",
|
|
8
|
+
codexSpeedStandard: "Standard",
|
|
9
|
+
codexSpeedFast: "Fast",
|
|
10
|
+
codexSpeedHint: "Fast: uses plan limits at 2.5× (OpenAI). Only for models that offer Fast; otherwise the agent starts without it and the log says why. Changing it restarts the agent.",
|
|
11
|
+
},
|
|
12
|
+
"zh-TW": {
|
|
13
|
+
codexSpeed: "速度",
|
|
14
|
+
codexSpeedDefault: "Codex 預設",
|
|
15
|
+
codexSpeedStandard: "標準",
|
|
16
|
+
codexSpeedFast: "快速",
|
|
17
|
+
codexSpeedHint: "快速:方案額度以 2.5 倍消耗(OpenAI)。只適用於提供 Fast 的模型;不支援時 Agent 會照常啟動,並在記錄中說明原因。變更後會重新啟動 Agent。",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -196,9 +196,7 @@ export async function confirmedWrite(path, { method = "POST", body, key = newKey
|
|
|
196
196
|
/** A decided request as the write's own answer. */
|
|
197
197
|
export function outcomeResponse(view) {
|
|
198
198
|
if (view.state === "applied") return { ok: true, status: 200, body: (view.outcome && view.outcome.result) || {}, confirmed: view };
|
|
199
|
-
const
|
|
200
|
-
// S-35: a failed apply says why (the store bounds and sanitizes the reason).
|
|
201
|
-
const reason = view.outcome && view.outcome.detail ? `${base} (${view.outcome.detail})` : base;
|
|
199
|
+
const reason = (view.outcome && (view.outcome.message || view.outcome.reason_code)) || view.state;
|
|
202
200
|
return { ok: false, status: 409, body: { error: reason, pending_state: view.state }, confirmed: view };
|
|
203
201
|
}
|
|
204
202
|
|