@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
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
// Shared presentation for Settings. Tab panels stay mounted so switching views never drops a form's draft.
|
|
2
|
-
import { html, useEffect, useRef, useState } from "/assets/app-html.js";
|
|
3
|
-
import { register, t } from "/assets/app-i18n.js";
|
|
4
|
-
|
|
5
|
-
register("settingsLayout", {
|
|
6
|
-
en: {
|
|
7
|
-
account: "Your account", personal: "Your preferences", fleet: "Whole fleet",
|
|
8
|
-
lead_preferences: "Your identity, language and content preferences.",
|
|
9
|
-
lead_look: "Choose how AgEnD looks and keep your workspace comfortable.",
|
|
10
|
-
lead_agents: "Manage agents across runtimes, with their CLI, model and status in one place.",
|
|
11
|
-
"lead_agent-defaults": "Defaults for new agents. Each agent can override the settings it supports.",
|
|
12
|
-
lead_chat: "Connect chat services and choose how messages are received and delivered.",
|
|
13
|
-
"lead_web-dashboard": "Manage fleet-wide dashboard features, branding and resource limits.",
|
|
14
|
-
lead_access: "Manage sign-in, web authority, guests and sharing.",
|
|
15
|
-
lead_advanced: "Inspect and edit fleet configuration, with effective values kept separate.",
|
|
16
|
-
editor: "Configuration editor", effective: "Effective settings (read only)",
|
|
17
|
-
aiAccounts: "AI accounts and keys", aiAccountsHint: "Sign-ins and supported provider keys on the AgEnD host. Windows CLI status is shown under Runtime.",
|
|
18
|
-
classicDefaults: "ClassicBot defaults and access",
|
|
19
|
-
},
|
|
20
|
-
"zh-TW": {
|
|
21
|
-
account: "你的帳號", personal: "你的偏好", fleet: "整個 Fleet",
|
|
22
|
-
lead_preferences: "你的身分、語言與內容偏好。",
|
|
23
|
-
lead_look: "調整顯示方式,保留你的工作習慣。",
|
|
24
|
-
lead_agents: "集中管理各個 Runtime 的 Agent、CLI、模型與狀態。",
|
|
25
|
-
"lead_agent-defaults": "新 Agent 的預設行為;個別 Agent 可覆寫支援的設定。",
|
|
26
|
-
lead_chat: "連接聊天服務,設定訊息如何進入與送出。",
|
|
27
|
-
"lead_web-dashboard": "管理整個 Fleet 的網頁功能、品牌與資源限制。",
|
|
28
|
-
lead_access: "管理登入、網頁授權、訪客與對外分享。",
|
|
29
|
-
lead_advanced: "檢視與編輯 Fleet 設定,並區分目前生效的唯讀內容。",
|
|
30
|
-
editor: "設定編輯器", effective: "生效設定(唯讀)",
|
|
31
|
-
aiAccounts: "AI 帳號與金鑰", aiAccountsHint: "管理 AgEnD 主機的登入與支援的供應商金鑰;Windows CLI 狀態請到 Runtime 查看。",
|
|
32
|
-
classicDefaults: "ClassicBot 預設行為與存取",
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
register("settingsLayout", {
|
|
37
|
-
en: {
|
|
38
|
-
aiAccounts: "AI sign-ins and API keys", aiAccountsSummary: "Host CLI sign-ins and provider API keys, managed separately.",
|
|
39
|
-
aiHostScope: "Credentials on the AgEnD host", aiAccountsHint: "These sign-ins and keys belong to the host running AgEnD.", aiWindowsLink: "Manage Windows computers and their CLIs in Runtime",
|
|
40
|
-
apiKeysTitle: "Provider API keys", apiKeysHint: "API credentials for supported provider integrations.", apiKeysUnavailableState: "Not offered", apiKeysUnavailable: "Provider API key management is not offered in this session.",
|
|
41
|
-
apiNewPlaceholder: "Enter an API key to verify", apiReplacePlaceholder: "Enter a replacement API key",
|
|
42
|
-
},
|
|
43
|
-
"zh-TW": {
|
|
44
|
-
aiAccounts: "AI 登入與 API 金鑰", aiAccountsSummary: "分開管理主機 CLI 登入與供應商 API 金鑰。",
|
|
45
|
-
aiHostScope: "AgEnD 主機上的憑證", aiAccountsHint: "這裡的登入與金鑰屬於執行 AgEnD 的主機。", aiWindowsLink: "前往 Runtime 管理 Windows 電腦與 CLI",
|
|
46
|
-
apiKeysTitle: "供應商 API 金鑰", apiKeysHint: "供支援的供應商整合功能使用的 API 憑證。", apiKeysUnavailableState: "目前未提供", apiKeysUnavailable: "此工作階段未提供供應商 API 金鑰管理。",
|
|
47
|
-
apiNewPlaceholder: "輸入要驗證的 API 金鑰", apiReplacePlaceholder: "輸入替換用的 API 金鑰",
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
export const layoutText = (key, ...values) => t(`settingsLayout.${key}`, ...values);
|
|
52
|
-
|
|
53
|
-
register("settingsLayout", {
|
|
54
|
-
"en": {
|
|
55
|
-
"accessLogin": "Sign-in & authority",
|
|
56
|
-
"accessGuests": "Guests",
|
|
57
|
-
"accessSharing": "Public & sharing",
|
|
58
|
-
"accessSharingList": "Shared links",
|
|
59
|
-
"accessPublicCredentials": "Cloudflare connector credentials",
|
|
60
|
-
"accessPolicyHint": "How access changes take effect",
|
|
61
|
-
"dashboardFeatures": "Features",
|
|
62
|
-
"developerReadOnly": "Read-only mode",
|
|
63
|
-
"developerEditing": "Editing draft",
|
|
64
|
-
"effectiveKey": "Setting key",
|
|
65
|
-
"effectiveValue": "Value in effect",
|
|
66
|
-
"effectiveSource": "Source",
|
|
67
|
-
"effectiveSourceConfig": "fleet.yaml",
|
|
68
|
-
"effectiveSourceDefault": "Default"
|
|
69
|
-
},
|
|
70
|
-
"zh-TW": {
|
|
71
|
-
"accessLogin": "登入與授權",
|
|
72
|
-
"accessGuests": "訪客",
|
|
73
|
-
"accessSharing": "公開與分享",
|
|
74
|
-
"accessSharingList": "分享連結",
|
|
75
|
-
"accessPublicCredentials": "Cloudflare 連接器憑證",
|
|
76
|
-
"accessPolicyHint": "存取變更如何生效",
|
|
77
|
-
"dashboardFeatures": "功能",
|
|
78
|
-
"developerReadOnly": "唯讀模式",
|
|
79
|
-
"developerEditing": "編輯草稿中",
|
|
80
|
-
"effectiveKey": "設定鍵",
|
|
81
|
-
"effectiveValue": "目前生效值",
|
|
82
|
-
"effectiveSource": "來源",
|
|
83
|
-
"effectiveSourceConfig": "fleet.yaml",
|
|
84
|
-
"effectiveSourceDefault": "預設"
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
export function SettingsPageHead({ section, children }) {
|
|
89
|
-
const scope = section === "preferences" ? "account" : section === "look" ? "personal" : "fleet";
|
|
90
|
-
return html`<header class="s-page-head"><div><div class="s-page-title"><h2>${t(`settings.sec_${section}`)}</h2><span class="s-scope">${layoutText(scope)}</span></div><p class="s-page-lead">${layoutText(`lead_${section}`)}</p></div>${children ? html`<div class="s-page-actions">${children}</div>` : null}</header>`;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Settings search, validation links and legacy anchors reveal their owning tab before focusing a control.
|
|
94
|
-
const revealers = new Set();
|
|
95
|
-
export function useSettingsTabs(group, initial) {
|
|
96
|
-
const [value, setValue] = useState(initial);
|
|
97
|
-
const current = useRef(value);
|
|
98
|
-
current.current = value;
|
|
99
|
-
useEffect(() => {
|
|
100
|
-
const reveal = target => {
|
|
101
|
-
const panel = target?.closest?.("[data-settings-tabs]");
|
|
102
|
-
if (!panel || panel.getAttribute("data-settings-tabs") !== group) return false;
|
|
103
|
-
const next = panel.getAttribute("data-settings-tab");
|
|
104
|
-
if (!next || next === current.current) return false;
|
|
105
|
-
current.current = next;
|
|
106
|
-
setValue(next);
|
|
107
|
-
return true;
|
|
108
|
-
};
|
|
109
|
-
revealers.add(reveal);
|
|
110
|
-
return () => revealers.delete(reveal);
|
|
111
|
-
}, [group]);
|
|
112
|
-
return [value, setValue];
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function revealSettingsTarget(target) {
|
|
116
|
-
let changed = false;
|
|
117
|
-
for (const reveal of revealers) changed = reveal(target) || changed;
|
|
118
|
-
return changed;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export function SettingsTabs({ id, value, onChange, items }) {
|
|
122
|
-
const choose = (key, focus = false) => {
|
|
123
|
-
onChange(key);
|
|
124
|
-
if (focus) document.getElementById(`${id}-tab-${key}`)?.focus();
|
|
125
|
-
};
|
|
126
|
-
const keydown = (event, index) => {
|
|
127
|
-
let next;
|
|
128
|
-
if (event.key === "ArrowRight") next = (index + 1) % items.length;
|
|
129
|
-
else if (event.key === "ArrowLeft") next = (index - 1 + items.length) % items.length;
|
|
130
|
-
else if (event.key === "Home") next = 0;
|
|
131
|
-
else if (event.key === "End") next = items.length - 1;
|
|
132
|
-
else return;
|
|
133
|
-
event.preventDefault();
|
|
134
|
-
choose(items[next].id, true);
|
|
135
|
-
};
|
|
136
|
-
return html`<div class="s-page-tabs" role="tablist" aria-label=${t("settings.title")}>${items.map((item, index) => html`<button key=${item.id} id=${`${id}-tab-${item.id}`} type="button" role="tab" class=${value === item.id ? "on" : ""} aria-selected=${value === item.id ? "true" : "false"} aria-controls=${`${id}-panel-${item.id}`} tabindex=${value === item.id ? 0 : -1} onClick=${() => choose(item.id)} onKeyDown=${event => keydown(event, index)}>${item.label}</button>`)}</div>`;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export function SettingsTabPanel({ group, id, active, children }) {
|
|
140
|
-
return html`<div id=${`${group}-panel-${id}`} class="s-tab-panel" role="tabpanel" aria-labelledby=${`${group}-tab-${id}`} data-settings-tabs=${group} data-settings-tab=${id} hidden=${!active}>${children}</div>`;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
register("settingsLayout", {
|
|
144
|
-
"en": {
|
|
145
|
-
"profileIdentityDetails": "How agents recognise you",
|
|
146
|
-
"previewsPersonalHint": "Only affects your preview preference.",
|
|
147
|
-
"chatConnections": "Chat connections",
|
|
148
|
-
"messageBehavior": "Message behavior",
|
|
149
|
-
"pageContents": "On this page",
|
|
150
|
-
"defaultsAccessWorkspace": "Permissions and workspace",
|
|
151
|
-
"replyRulesHelp": "Reply rules",
|
|
152
|
-
"replySupportHelp": "CLI support"
|
|
153
|
-
},
|
|
154
|
-
"zh-TW": {
|
|
155
|
-
"profileIdentityDetails": "Agent 如何辨識你的身分",
|
|
156
|
-
"previewsPersonalHint": "只影響你的預覽偏好。",
|
|
157
|
-
"chatConnections": "聊天連線",
|
|
158
|
-
"messageBehavior": "訊息行為",
|
|
159
|
-
"pageContents": "本頁內容",
|
|
160
|
-
"defaultsAccessWorkspace": "權限與工作區",
|
|
161
|
-
"replyRulesHelp": "回覆規則說明",
|
|
162
|
-
"replySupportHelp": "CLI 支援情況"
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
register("settingsLayout", {
|
|
167
|
-
"en": {
|
|
168
|
-
"revDashboard_log": "Agent log tab",
|
|
169
|
-
"revDashboardHint_log": "Show prompts, replies, tool steps and fleet events. Secrets are masked; public links can also see it. Enabling needs confirmation.",
|
|
170
|
-
"revDashboard_usagePub": "Usage over the public link",
|
|
171
|
-
"revDashboardHint_usagePub": "Offer the fleet usage report over the temporary public link. Guests never see it.",
|
|
172
|
-
"revDashboard_levels": "Office levels",
|
|
173
|
-
"revDashboardHint_levels": "Show each agent's lifetime work level on its Office name tag and profile.",
|
|
174
|
-
"revDashboard_cdn": "CDN libraries in HTML previews",
|
|
175
|
-
"revDashboardHint_cdn": "Allow cdnjs and jsDelivr. Requests leave this computer, are visible to the CDN and could send page data out.",
|
|
176
|
-
"revDetails": "Details",
|
|
177
|
-
"revAccessPolicy": "Loosening access needs fleet administrator confirmation. Tightening applies at once.",
|
|
178
|
-
"revLoginSessions": "Sign-in sessions",
|
|
179
|
-
"revPublicSessionLimit": "Public-link sessions are capped at 8 hours, end after 30 minutes idle and never outlive the link.",
|
|
180
|
-
"revSessionDetails": "Session rules and notifications",
|
|
181
|
-
"revRelatedAccess": "Other access settings",
|
|
182
|
-
"revRelatedGuests": "Choose who can sign in and which agents they see.",
|
|
183
|
-
"revRelatedSharing": "Manage the public entry and read-only shared links.",
|
|
184
|
-
"revPublicEntry": "Fleet public entry",
|
|
185
|
-
"revReadOnlySharing": "Time-limited read-only sharing",
|
|
186
|
-
"revSharingOrigin": "Create new shares from the Office or an HTML preview. Manage existing links below.",
|
|
187
|
-
"revEffectiveHint": "These are the values in effect. This view is read only; edit supported values in the configuration editor.",
|
|
188
|
-
"revGoEditor": "Open configuration editor",
|
|
189
|
-
"revEditorContext": "Fleet configuration · use the form pages for individual settings",
|
|
190
|
-
"revUpdateCredential": "Update connector credential",
|
|
191
|
-
"revSetCredential": "Set connector credential",
|
|
192
|
-
"revAuthorityBrief": "Only signed-in fleet administrators can confirm their account's authority in Discord or Telegram. Guests cannot. Publishing, destructive actions, spending, secrets and passing authority require it.",
|
|
193
|
-
"revAuthorityDetails": "Authority rules",
|
|
194
|
-
"revAuthorityEnabled": "Allow web authority",
|
|
195
|
-
"revAuthorityEnabledHint": "Turning this off invalidates existing authority at once. Turning it back on does not restore it.",
|
|
196
|
-
"revAuthorityLocal": "Only this computer",
|
|
197
|
-
"revAuthorityLocalHint": "Allow only this computer's browser. Authority already given over a LAN or tailnet becomes invalid and is not restored by switching this off.",
|
|
198
|
-
"revAuthorityPublicWarning": "Public links are reached from the internet and Cloudflare sees their traffic. Enabling their authority needs confirmation; re-enabling temporary-link authority ends all earlier authorizations.",
|
|
199
|
-
"revAuthorityLinks": "Authority over public links",
|
|
200
|
-
"revGuestManagement": "Guest management",
|
|
201
|
-
"revVisibleAgents": "Visible agents",
|
|
202
|
-
"revGuestLevel": "Level",
|
|
203
|
-
"revGuestDetail": "Selected guest",
|
|
204
|
-
"revSelectGuest": "Add or choose a guest to manage their access."
|
|
205
|
-
},
|
|
206
|
-
"zh-TW": {
|
|
207
|
-
"revDashboard_log": "Agent 紀錄分頁",
|
|
208
|
-
"revDashboardHint_log": "顯示提示、回覆、工具步驟與 Fleet 事件;機密值會遮蔽,公開連結也看得到。開啟需確認。",
|
|
209
|
-
"revDashboard_usagePub": "公開連結提供用量報告",
|
|
210
|
-
"revDashboardHint_usagePub": "透過臨時公開連結提供 Fleet 用量報告;訪客一律看不到。",
|
|
211
|
-
"revDashboard_levels": "辦公室等級",
|
|
212
|
-
"revDashboardHint_levels": "在辦公室名牌與名片上顯示 Agent 依終身工作量得到的等級。",
|
|
213
|
-
"revDashboard_cdn": "HTML 預覽載入 CDN 函式庫",
|
|
214
|
-
"revDashboardHint_cdn": "允許 cdnjs 與 jsDelivr。請求會離開本機,CDN 能看到,也可能被頁面用來傳出資料。",
|
|
215
|
-
"revDetails": "詳細說明",
|
|
216
|
-
"revAccessPolicy": "放寬存取需要 Fleet 管理員確認;收緊的變更立即生效。",
|
|
217
|
-
"revLoginSessions": "登入工作階段",
|
|
218
|
-
"revPublicSessionLimit": "公開連結的工作階段最長 8 小時、閒置 30 分鐘登出,也不會超過連結期限。",
|
|
219
|
-
"revSessionDetails": "工作階段與通知規則",
|
|
220
|
-
"revRelatedAccess": "其他存取設定",
|
|
221
|
-
"revRelatedGuests": "管理可登入的訪客與可見 Agent。",
|
|
222
|
-
"revRelatedSharing": "管理公開入口與唯讀分享連結。",
|
|
223
|
-
"revPublicEntry": "Fleet 公開入口",
|
|
224
|
-
"revReadOnlySharing": "限時唯讀分享",
|
|
225
|
-
"revSharingOrigin": "新分享請從辦公室或 HTML 預覽建立;在下方管理既有連結。",
|
|
226
|
-
"revEffectiveHint": "下方為目前生效的設定,僅供檢視;需要修改時,請切換至設定編輯器。",
|
|
227
|
-
"revGoEditor": "前往設定編輯器",
|
|
228
|
-
"revEditorContext": "Fleet 設定檔・個別設定可使用對應表單調整",
|
|
229
|
-
"revUpdateCredential": "更新連接器憑證",
|
|
230
|
-
"revSetCredential": "設定連接器憑證",
|
|
231
|
-
"revAuthorityBrief": "僅限已登入的 Fleet 管理者,並須在 Discord 或 Telegram 確認本人帳號授權;訪客不適用。發布、破壞性操作、花費、密鑰與轉交授權都需要它。",
|
|
232
|
-
"revAuthorityDetails": "授權規則說明",
|
|
233
|
-
"revAuthorityEnabled": "允許網頁授權",
|
|
234
|
-
"revAuthorityEnabledHint": "關閉會立即使現有授權失效;重新開啟不會恢復。",
|
|
235
|
-
"revAuthorityLocal": "僅限本機",
|
|
236
|
-
"revAuthorityLocalHint": "只接受本機瀏覽器;區域網路與 tailnet 上已給出的授權會失效,關掉此限制也不會恢復。",
|
|
237
|
-
"revAuthorityPublicWarning": "公開連結可從網際網路存取,Cloudflare 看得到流量。開啟其授權須經確認;重新開啟臨時連結授權會結束之前給出的全部授權。",
|
|
238
|
-
"revAuthorityLinks": "公開連結的授權範圍",
|
|
239
|
-
"revGuestManagement": "訪客管理",
|
|
240
|
-
"revVisibleAgents": "可見 Agent",
|
|
241
|
-
"revGuestLevel": "等級",
|
|
242
|
-
"revGuestDetail": "選取的訪客",
|
|
243
|
-
"revSelectGuest": "新增或選擇訪客後,管理其存取權限。"
|
|
244
|
-
}
|
|
245
|
-
});
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
// #3008 ② (alpha.3; decision 28c2d3a3 rule 3, the user's simplified form hmsg-33c3d609): Settings → Access & security →
|
|
2
|
-
// "Connections from outside", on a fleet with no chat connection. This computer's admin, here, sets up an authenticator
|
|
3
|
-
// app (a QR code and the key, then its first code), and turns on "Allow connections from outside": the public link
|
|
4
|
-
// opens, and signing in through it asks for the app's code. Turning it off closes the link and signs everyone out there.
|
|
5
|
-
// Every change applies at once (an action, not a staged setting) and is this computer's only: elsewhere the card shows
|
|
6
|
-
// the state, read-only. The server decides who may (GET /ui/outside's `here`) and refuses everything else regardless.
|
|
7
|
-
// The words are the leader's (cid-alpha3-design, strings 1–13 and 17).
|
|
8
|
-
import { html, useEffect, useRef, useState } from "/assets/app-html.js";
|
|
9
|
-
import { t, register } from "/assets/app-i18n.js";
|
|
10
|
-
import { toast } from "/assets/ui-toast.js";
|
|
11
|
-
import { confirmDialog } from "/assets/ui-confirm.js";
|
|
12
|
-
import { api } from "./settings-confirm.js";
|
|
13
|
-
|
|
14
|
-
register("outside", {
|
|
15
|
-
en: {
|
|
16
|
-
title: "Connections from outside", switch: "Allow connections from outside",
|
|
17
|
-
needApp: "Set up an authenticator app first. Signing in from outside will ask for its code.",
|
|
18
|
-
setUp: "Set up authenticator app",
|
|
19
|
-
scan: "Scan this with Authy, Google Authenticator or Microsoft Authenticator, or type the key. Then enter the 6-digit code it shows.",
|
|
20
|
-
setUpOn: "Authenticator app set up on {0}.", again: "Set up again",
|
|
21
|
-
againConfirm: "Codes from the old app stop working, and everyone signed in from outside is signed out.",
|
|
22
|
-
remove: "Remove", removeConfirm: "Connections from outside are turned off, and everyone signed in from outside is signed out.",
|
|
23
|
-
openAt: "Open at {0}.", quick: "A quick link gets a new address each time it opens.",
|
|
24
|
-
hereOnly: "Only on the AgEnD computer.", lostPhone: "Lost your phone? On the AgEnD computer, choose “Set up again”.",
|
|
25
|
-
wrong: "That code didn't work. Check that your phone's clock is right and try the newest code.",
|
|
26
|
-
paused: "Too many wrong codes. Try again in {0}.", code: "Authenticator code", key: "Key",
|
|
27
|
-
minutes: "{0} minutes", minute: "1 minute", hours: "{0} hours", hour: "1 hour",
|
|
28
|
-
},
|
|
29
|
-
"zh-TW": {
|
|
30
|
-
title: "從外面連線", switch: "允許從外面連線",
|
|
31
|
-
needApp: "請先設定驗證器 App。從外面登入時會要求輸入它的代碼。",
|
|
32
|
-
setUp: "設定驗證器 App",
|
|
33
|
-
scan: "用 Authy、Google Authenticator 或 Microsoft Authenticator 掃描,或手動輸入金鑰,再輸入 App 顯示的 6 位數代碼。",
|
|
34
|
-
setUpOn: "驗證器 App 已於 {0} 設定。", again: "重新設定",
|
|
35
|
-
againConfirm: "舊 App 的代碼會失效,所有從外面登入的人都會被登出。",
|
|
36
|
-
remove: "移除", removeConfirm: "從外面連線會關閉,所有從外面登入的人都會被登出。",
|
|
37
|
-
openAt: "已開啟:{0}。", quick: "快速連結每次開啟網址都不同。",
|
|
38
|
-
hereOnly: "只能在 AgEnD 電腦上變更。", lostPhone: "手機遺失?請在 AgEnD 電腦上選「重新設定」。",
|
|
39
|
-
wrong: "代碼不對。請確認手機時間正確,並輸入最新的代碼。",
|
|
40
|
-
paused: "錯誤次數太多,請 {0} 後再試。", code: "驗證器代碼", key: "金鑰",
|
|
41
|
-
minutes: "{0} 分鐘", minute: "1 分鐘", hours: "{0} 小時", hour: "1 小時",
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
const to = (k, ...v) => t(`outside.${k}`, ...v);
|
|
45
|
-
|
|
46
|
-
/** A wait as words: "15 minutes" / 「15 分鐘」, "2 hours" / 「2 小時」 (rounded up). */
|
|
47
|
-
export function waitWords(ms) {
|
|
48
|
-
const minutes = Math.max(1, Math.ceil(ms / 60000));
|
|
49
|
-
if (minutes < 60) return minutes === 1 ? to("minute") : to("minutes", minutes);
|
|
50
|
-
const hours = Math.ceil(minutes / 60);
|
|
51
|
-
return hours === 1 ? to("hour") : to("hours", hours);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** The key as an app shows it: groups of four. */
|
|
55
|
-
export function keyGroups(secret) {
|
|
56
|
-
return String(secret || "").replace(/(.{4})(?=.)/g, "$1 ");
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The QR code of an otpauth:// URI as one SVG path (dark modules), drawn by the page — no inline style, no innerHTML
|
|
61
|
-
* (the CSP). `qrcode` is the vendored encoder's factory (qrcode.module.js).
|
|
62
|
-
*/
|
|
63
|
-
export function qrPath(qrcode, uri) {
|
|
64
|
-
const qr = qrcode(0, "M");
|
|
65
|
-
qr.addData(uri);
|
|
66
|
-
qr.make();
|
|
67
|
-
const n = qr.getModuleCount();
|
|
68
|
-
let d = "";
|
|
69
|
-
for (let r = 0; r < n; r++) for (let c = 0; c < n; c++) if (qr.isDark(r, c)) d += `M${c + 4} ${r + 4}h1v1h-1z`;
|
|
70
|
-
return { size: n + 8, d };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function Qr({ uri }) {
|
|
74
|
-
const [shape, setShape] = useState(null);
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
let live = true;
|
|
77
|
-
import("/assets/qrcode.module.js").then((m) => { if (live) setShape(qrPath(m.default || m.qrcode, uri)); }).catch(() => { if (live) setShape(null); });
|
|
78
|
-
return () => { live = false; };
|
|
79
|
-
}, [uri]);
|
|
80
|
-
if (!shape) return null;
|
|
81
|
-
return html`<svg class="s-out-qr" id="outQr" viewBox=${`0 0 ${shape.size} ${shape.size}`} width="200" height="200" role="img" aria-label=${to("setUp")}>
|
|
82
|
-
<rect width=${shape.size} height=${shape.size} fill="#fff" /><path d=${shape.d} fill="#000" /></svg>`;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* #3035 review: how often the card reads the state again while it is shown — quickly while the link is opening (the
|
|
87
|
-
* switch answers before the link is up), slowly otherwise (its lifetime ending, a wait starting or ending elsewhere).
|
|
88
|
-
*/
|
|
89
|
-
export const outsidePoll = { quickMs: 2000, slowMs: 15000 };
|
|
90
|
-
|
|
91
|
-
export function OutsideCard() {
|
|
92
|
-
const [s, setS] = useState(null), [enroll, setEnroll] = useState(null), [code, setCode] = useState(""), [msg, setMsg] = useState(""), [busy, setBusy] = useState(false);
|
|
93
|
-
// Fences: an answer that arrives after the card is gone, or after a newer read began, is dropped; nor does a read
|
|
94
|
-
// land while an action is under way (the box shows the click until the action's own read).
|
|
95
|
-
const live = useRef({ mounted: true, seq: 0, busy: false });
|
|
96
|
-
// Every read that ends (answered or not) moves `rev`: the next one is scheduled from there, so a failed read (the
|
|
97
|
-
// network, a 5xx, an unreadable answer) never stops the card reading again (#3035 review r2) — and keeps what it
|
|
98
|
-
// showed meanwhile.
|
|
99
|
-
const [rev, setRev] = useState(0), failed = useRef(false);
|
|
100
|
-
const load = async () => {
|
|
101
|
-
const seq = ++live.current.seq;
|
|
102
|
-
let r = null;
|
|
103
|
-
try { r = await api("/ui/outside"); } catch { r = null; }
|
|
104
|
-
if (!live.current.mounted || seq !== live.current.seq) return;
|
|
105
|
-
const ok = !!(r && r.ok && r.body && typeof r.body === "object");
|
|
106
|
-
failed.current = !ok;
|
|
107
|
-
if (ok) setS(r.body);
|
|
108
|
-
setRev((n) => n + 1);
|
|
109
|
-
};
|
|
110
|
-
useEffect(() => { live.current.mounted = true; load(); return () => { live.current.mounted = false; }; }, []);
|
|
111
|
-
useEffect(() => {
|
|
112
|
-
if (rev === 0) return undefined; // the first read is still out
|
|
113
|
-
if (s && !s.webOnly && !failed.current) return undefined; // a chat fleet: nothing to follow
|
|
114
|
-
const opening = !!s && s.outside && (!s.link || s.link.state !== "open");
|
|
115
|
-
const delay = !s || opening ? outsidePoll.quickMs : outsidePoll.slowMs; // none read yet, or opening: soon
|
|
116
|
-
const timer = setTimeout(() => { if (!live.current.busy) load(); else setRev((n) => n + 1); }, delay);
|
|
117
|
-
return () => clearTimeout(timer);
|
|
118
|
-
}, [rev]);
|
|
119
|
-
if (!s || !s.webOnly) return null;
|
|
120
|
-
const here = s.here === true;
|
|
121
|
-
const act = async (fn) => {
|
|
122
|
-
setBusy(true); setMsg(""); live.current.busy = true; live.current.seq++; // a read under way is outdated now
|
|
123
|
-
try { await fn(); } finally { live.current.busy = false; if (live.current.mounted) { setBusy(false); load(); } }
|
|
124
|
-
};
|
|
125
|
-
const begin = () => act(async () => {
|
|
126
|
-
const r = await api("/ui/outside/enroll", { method: "POST", body: "{}" });
|
|
127
|
-
if (r.ok && r.body && r.body.secret) { setEnroll(r.body); setCode(""); } else toast(t("app.failed"), false);
|
|
128
|
-
});
|
|
129
|
-
const confirm = () => act(async () => {
|
|
130
|
-
const r = await api("/ui/outside/enroll/confirm", { method: "POST", body: JSON.stringify({ code }) });
|
|
131
|
-
if (r.ok) { setEnroll(null); setCode(""); return; }
|
|
132
|
-
const why = r.body && r.body.error;
|
|
133
|
-
if (why === "expired") { setEnroll(null); return; }
|
|
134
|
-
setMsg(why === "wrong" ? to("wrong") : t("app.failed"));
|
|
135
|
-
});
|
|
136
|
-
const again = async () => {
|
|
137
|
-
if (!(await confirmDialog({ title: to("again"), message: to("againConfirm"), confirmLabel: to("again"), danger: true }))) return;
|
|
138
|
-
begin();
|
|
139
|
-
};
|
|
140
|
-
const remove = async () => {
|
|
141
|
-
if (!(await confirmDialog({ title: to("remove"), message: to("removeConfirm"), confirmLabel: to("remove"), danger: true }))) return;
|
|
142
|
-
act(async () => { const r = await api("/ui/outside/remove", { method: "POST", body: "{}" }); if (!r.ok) toast(t("app.failed"), false); });
|
|
143
|
-
};
|
|
144
|
-
// The box follows the click at once (smoke-web-outside-3008: a controlled box that waits for the server reads as a
|
|
145
|
-
// click that did nothing); the server's state, read again after, is what stays.
|
|
146
|
-
const flip = (on) => { setS((x) => ({ ...x, outside: on })); act(async () => {
|
|
147
|
-
const r = await api("/ui/outside/switch", { method: "POST", body: JSON.stringify({ on }) });
|
|
148
|
-
if (!r.ok) toast(t("app.failed"), false);
|
|
149
|
-
}); };
|
|
150
|
-
const link = s.link, open = link && link.state === "open";
|
|
151
|
-
return html`<section class="card s-outside" id="outsideCard"><h3>${to("title")}</h3>
|
|
152
|
-
${!here ? html`<p class="note" id="outHereOnly">${to("hereOnly")}</p>` : null}
|
|
153
|
-
<label class="check"><input id="outSwitch" type="checkbox" checked=${s.outside} disabled=${!here || busy || (!s.enrolled && !s.outside)}
|
|
154
|
-
onChange=${(e) => flip(e.target.checked)} /><span>${to("switch")}</span></label>
|
|
155
|
-
${!s.enrolled ? html`<p class="note" id="outNeedApp">${to("needApp")}</p>` : null}
|
|
156
|
-
${s.outside && open && link.url ? html`<p class="note" id="outOpenAt">${to("openAt", link.url)}${link.quick ? ` ${to("quick")}` : ""}</p>` : null}
|
|
157
|
-
${s.outside && link && !open ? html`<p class="note" id="outStarting">${t("app.loading")}</p>` : null}
|
|
158
|
-
${s.pausedForMs > 0 ? html`<p class="note s-va-warn" role="status" id="outPaused">${to("paused", waitWords(s.pausedForMs))}</p>` : null}
|
|
159
|
-
${enroll ? html`<div class="s-out-enroll" id="outEnroll">
|
|
160
|
-
<p class="note">${to("scan")}</p>
|
|
161
|
-
<${Qr} uri=${enroll.uri} />
|
|
162
|
-
<p class="note">${to("key")}: <code id="outKey">${keyGroups(enroll.secret)}</code></p>
|
|
163
|
-
<div class="field"><label for="outCode">${to("code")}</label>
|
|
164
|
-
<input id="outCode" type="text" inputmode="numeric" autocomplete="one-time-code" maxlength="7" placeholder="123456" value=${code}
|
|
165
|
-
onInput=${(e) => setCode(e.target.value)} /></div>
|
|
166
|
-
${msg ? html`<p class="feedback error" role="alert" id="outMsg">${msg}</p>` : null}
|
|
167
|
-
<div class="save-row"><button type="button" class="btn" id="outCancel" disabled=${busy} onClick=${() => { setEnroll(null); setMsg(""); }}>${t("app.cancel")}</button>
|
|
168
|
-
<button type="button" class="btn btn-primary" id="outConfirm" disabled=${busy || !/^\s*\d{3}\s?\d{3}\s*$/.test(code)} onClick=${confirm}>${t("app.confirmOk")}</button></div>
|
|
169
|
-
</div>`
|
|
170
|
-
: s.enrolled ? html`<p class="note" id="outSetUpOn">${to("setUpOn", new Date(s.enrolledAt).toLocaleDateString())}</p>
|
|
171
|
-
<p class="note">${to("lostPhone")}</p>
|
|
172
|
-
${here ? html`<div class="save-row"><button type="button" class="btn" id="outAgain" disabled=${busy} onClick=${again}>${to("again")}</button>
|
|
173
|
-
<button type="button" class="btn btn-danger" id="outRemove" disabled=${busy} onClick=${remove}>${to("remove")}</button></div>` : null}`
|
|
174
|
-
: here ? html`<div class="save-row"><button type="button" class="btn btn-primary" id="outSetUp" disabled=${busy} onClick=${begin}>${to("setUp")}</button></div>` : null}
|
|
175
|
-
</section>`;
|
|
176
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
// Help for existing handlers only. Keyboard behavior stays with app-shell.js, panel-chat.js,
|
|
2
|
-
// chat-render.js (composerKey) and panel-settings.js; this module registers no keyboard listener.
|
|
3
|
-
import { html } from "/assets/app-html.js";
|
|
4
|
-
import { register, t } from "/assets/app-i18n.js";
|
|
5
|
-
import { isMacLike, showDialog } from "/assets/app-shell.js";
|
|
6
|
-
import { Dialog } from "/assets/ui-dialog.js";
|
|
7
|
-
import { Icon } from "/assets/ui-icons.js";
|
|
8
|
-
|
|
9
|
-
register("settingsShortcuts", {
|
|
10
|
-
en: {
|
|
11
|
-
title: "Keyboard shortcuts", button: "View shortcuts",
|
|
12
|
-
hint: "Find the existing shortcuts for search, chat and settings.",
|
|
13
|
-
intro: "Shortcuts work in the contexts below. Search availability depends on your account and the fleet's settings.",
|
|
14
|
-
globalTitle: "Search across the fleet", globalAction: "Open search",
|
|
15
|
-
globalScope: "Works in text fields too, on pages that offer search. Does not run while another modal dialog is open or while an input method is composing. Do not hold Alt or Shift.",
|
|
16
|
-
chatSearchTitle: "Search the current chat", chatSearchAction: "Search within this agent",
|
|
17
|
-
chatSearchScope: "On an agent's chat page, when search is available. Other pages keep the browser's Find command. The same dialog and input-method restrictions apply.",
|
|
18
|
-
composerTitle: "Chat input", send: "Send the message or run the typed command", newline: "Add a new line",
|
|
19
|
-
composerScope: "In the chat composer with a physical keyboard. Enter does not send during input-method composition. On a touch screen, Enter adds a line; use Send to send. Alt, Ctrl or Command with Enter also adds a line.",
|
|
20
|
-
settingsTitle: "Settings search", settingsAction: "Focus Search settings",
|
|
21
|
-
settingsScope: "Only on Settings pages, outside inputs, textareas, selects and editable content. Does not run during input-method composition or with Ctrl, Command or Alt held.",
|
|
22
|
-
closeHint: "Closes this help dialog and returns focus to View shortcuts.",
|
|
23
|
-
},
|
|
24
|
-
"zh-TW": {
|
|
25
|
-
title: "快捷鍵", button: "查看快捷鍵",
|
|
26
|
-
hint: "查看搜尋、聊天與設定目前支援的快捷鍵。",
|
|
27
|
-
intro: "快捷鍵依下列情境使用;搜尋是否提供,取決於你的帳號權限與 Fleet 設定。",
|
|
28
|
-
globalTitle: "全域搜尋", globalAction: "開啟搜尋",
|
|
29
|
-
globalScope: "提供搜尋的頁面中,輸入欄內也可使用。其他對話框開啟時或輸入法組字時不觸發;請勿同時按住 Alt 或 Shift。",
|
|
30
|
-
chatSearchTitle: "搜尋目前聊天", chatSearchAction: "搜尋目前 Agent 的對話",
|
|
31
|
-
chatSearchScope: "在提供搜尋功能的 Agent 聊天頁使用;其他頁面保留瀏覽器的尋找功能。對話框與輸入法的限制同上。",
|
|
32
|
-
composerTitle: "聊天輸入", send: "送出訊息或執行輸入的指令", newline: "新增一行",
|
|
33
|
-
composerScope: "適用於聊天輸入框與實體鍵盤;輸入法組字時,Enter 不會送出。觸控螢幕的 Enter 會換行,請按「送出」傳送。Alt、Ctrl 或 Command 加 Enter 也會換行。",
|
|
34
|
-
settingsTitle: "設定搜尋", settingsAction: "聚焦「搜尋設定」",
|
|
35
|
-
settingsScope: "僅限設定頁面,且焦點不在輸入欄、文字區、選單或可編輯內容內。輸入法組字時,或同時按住 Ctrl、Command、Alt 時不觸發。",
|
|
36
|
-
closeHint: "關閉此說明,焦點會回到「查看快捷鍵」。",
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
export const shortcutsText = (key) => t(`settingsShortcuts.${key}`);
|
|
41
|
-
|
|
42
|
-
/** The Settings preference row is intentionally independent of saved preferences. */
|
|
43
|
-
export function ShortcutsHelpRow() {
|
|
44
|
-
return html`<div class="s-pref-help-row s-pref-shortcuts-row"><div><strong>${shortcutsText("title")}</strong><p class="sub">${shortcutsText("hint")}</p></div>
|
|
45
|
-
<button type="button" id="keyboardShortcutsBtn" class="btn" aria-haspopup="dialog" onClick=${openShortcuts}><${Icon} name="info" size=${16} />${shortcutsText("button")}</button></div>`;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function openShortcuts() { showDialog(ShortcutsDialog); }
|
|
49
|
-
|
|
50
|
-
/** Reuse the shared modal's native Escape, backdrop and focus-restoration behavior. */
|
|
51
|
-
export function ShortcutsDialog({ onClose }) {
|
|
52
|
-
const modifier = isMacLike() ? "⌘" : "Ctrl";
|
|
53
|
-
const keys = (parts) => html`<span class="settings-shortcut-keys">${parts.map((key, i) => html`${i ? html`<span aria-hidden="true">+</span>` : null}<kbd key=${key}>${key}</kbd>`)}</span>`;
|
|
54
|
-
const row = (parts, action) => html`<div class="settings-shortcut-row">${keys(parts)}<span>${shortcutsText(action)}</span></div>`;
|
|
55
|
-
return html`<${Dialog} title=${shortcutsText("title")} onClose=${onClose} wide=${true}
|
|
56
|
-
actions=${html`<button type="button" class="btn btn-primary" onClick=${onClose}>${t("app.close")}</button>`}>
|
|
57
|
-
<div class="settings-shortcuts"><p class="settings-shortcuts-intro">${shortcutsText("intro")}</p>
|
|
58
|
-
<section><h3>${shortcutsText("globalTitle")}</h3>${row([modifier, "K"], "globalAction")}<p>${shortcutsText("globalScope")}</p></section>
|
|
59
|
-
<section><h3>${shortcutsText("chatSearchTitle")}</h3>${row([modifier, "F"], "chatSearchAction")}<p>${shortcutsText("chatSearchScope")}</p></section>
|
|
60
|
-
<section><h3>${shortcutsText("composerTitle")}</h3>${row(["Enter"], "send")}${row(["Shift", "Enter"], "newline")}<p>${shortcutsText("composerScope")}</p></section>
|
|
61
|
-
<section><h3>${shortcutsText("settingsTitle")}</h3>${row(["/"], "settingsAction")}<p>${shortcutsText("settingsScope")}</p></section>
|
|
62
|
-
<p class="settings-shortcuts-close"><kbd>Escape</kbd> ${shortcutsText("closeHint")}</p>
|
|
63
|
-
</div>
|
|
64
|
-
</${Dialog}>`;
|
|
65
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// A paired computer's display name. A module of its own, imported by the sidebar (instance-nav.js) and by the lazy
|
|
2
|
-
// chat panel. A tab opened before an upgrade keeps the old shell, whose instance-nav.js has no `machineName`; the new
|
|
3
|
-
// chat panel imports it from here instead, a module that tab loads fresh, so Chat still opens (as #2978 did for
|
|
4
|
-
// settings-width.js). It registers its own words so it does not depend on the shell's older string tables.
|
|
5
|
-
import { register, t } from "./app-i18n.js";
|
|
6
|
-
|
|
7
|
-
register("machine", {
|
|
8
|
-
"en": { "short": "Computer {value}" },
|
|
9
|
-
"zh-TW": { "short": "電腦 {value}" },
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
/** A remote computer by its name; with no name yet, by the start of its id, never the whole id. The 8-character cut matches `shortId` in src/ui/settings-agent-filters.js; keep the two in step. */
|
|
13
|
-
export const machineName = (id, name) => name || t("machine.short").split("{value}").join(String(id).slice(0, 8));
|