@songsid/agend 2.3.5-alpha.5 → 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 +0 -68
- package/dist/agent-endpoint.d.ts +1 -5
- package/dist/agent-endpoint.js +2 -12
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.js +1 -1
- package/dist/agent-file-read.js.map +1 -1
- package/dist/auth-api.d.ts +0 -48
- package/dist/auth-api.js +4 -250
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +2 -0
- package/dist/authority/session-authorizations.js +7 -1
- 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/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-footer-hints.d.ts +0 -3
- package/dist/backend/codex-footer-hints.js +0 -14
- package/dist/backend/codex-footer-hints.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.js +19 -4
- package/dist/backend/codex-quota-history.js.map +1 -1
- package/dist/backend/codex.d.ts +115 -142
- package/dist/backend/codex.js +1094 -1187
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.d.ts +0 -2
- package/dist/backend/grok.js +0 -22
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/types.d.ts +2 -7
- 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/channel/ipc-bridge.d.ts +0 -2
- package/dist/channel/mcp-tools.js +2 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- 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 +30 -127
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +13 -74
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +3 -17
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +5 -72
- package/dist/daemon.js +275 -869
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +3 -15
- package/dist/delivery-consumed-watch.js +1 -23
- 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/doctor.js +9 -20
- package/dist/doctor.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -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 +9 -498
- package/dist/fleet-manager.js +202 -2849
- 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 +18 -50
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +2 -5
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +2 -2
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +10 -10
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +13 -23
- package/dist/instance-config-impact.js +4 -8
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +3 -22
- package/dist/instance-lifecycle.js +176 -393
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +0 -2
- package/dist/instructions.js +0 -6
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +2 -147
- package/dist/locale.js.map +1 -1
- package/dist/login-flows.d.ts +7 -8
- package/dist/login-flows.js +1 -24
- package/dist/login-flows.js.map +1 -1
- package/dist/ls-rows.js +4 -3
- package/dist/ls-rows.js.map +1 -1
- 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 +0 -5
- package/dist/needs-you-hub.js +2 -18
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +2 -45
- package/dist/needs-you.js +2 -26
- package/dist/needs-you.js.map +1 -1
- package/dist/office-share-page.js +3 -3
- package/dist/office-share-page.js.map +1 -1
- package/dist/office-share.d.ts +0 -11
- package/dist/office-share.js +0 -14
- package/dist/office-share.js.map +1 -1
- package/dist/outbound-handlers.d.ts +2 -30
- package/dist/outbound-handlers.js +4 -109
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +1 -71
- package/dist/outbound-schemas.js +14 -36
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-quota-history.d.ts +0 -2
- package/dist/pane-quota-history.js +0 -20
- package/dist/pane-quota-history.js.map +1 -1
- package/dist/pause-marker.d.ts +1 -1
- package/dist/pause-marker.js +1 -1
- package/dist/pause-marker.js.map +1 -1
- package/dist/public-web-gateway.js +0 -16
- 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/quickstart-api.js +5 -9
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +0 -6
- package/dist/quickstart.js +6 -44
- 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/scheduler/task-board-text.js +1 -1
- package/dist/scheduler/task-board-text.js.map +1 -1
- package/dist/scheduler/task-board.d.ts +0 -4
- package/dist/scheduler/task-board.js +3 -9
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/service-installer.d.ts +2 -7
- package/dist/service-installer.js +10 -13
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +0 -12
- package/dist/settings-api.js +7 -487
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +0 -7
- package/dist/settings-baseline.js +1 -3
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.js +7 -35
- 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 -17
- package/dist/settings-effect.js +1 -155
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +0 -4
- package/dist/settings-http-confirmation.js +3 -43
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +1 -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/setup-wizard.js +2 -6
- package/dist/setup-wizard.js.map +1 -1
- package/dist/task-board-tool.d.ts +1 -2
- package/dist/task-board-tool.js +6 -62
- package/dist/task-board-tool.js.map +1 -1
- package/dist/tmux-control.d.ts +1 -2
- package/dist/tmux-control.js +4 -4
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.js +1 -32
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tmux-manager.d.ts +2 -3
- package/dist/tmux-manager.js +36 -45
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.js +3 -4
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js +1 -2
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.js +5 -9
- 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 +0 -3
- package/dist/transcript-monitor.js +51 -27
- 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 -29
- package/dist/ui/app.html +8 -1
- package/dist/ui/backend-signin.js +21 -39
- package/dist/ui/chat-ambient.js +1 -1
- package/dist/ui/chat-md-strings.js +9 -3
- package/dist/ui/chat-render.js +670 -3
- package/dist/ui/chat-store.js +3 -14
- package/dist/ui/chat-strings.js +285 -3
- package/dist/ui/chat-thread.js +969 -3
- package/dist/ui/chat-time.js +80 -3
- package/dist/ui/chat-tour.js +1 -1
- package/dist/ui/fleet-office-pack.d.ts +0 -9
- package/dist/ui/fleet-office-pack.js +4 -76
- package/dist/ui/fleet-office-skin.js +5 -23
- package/dist/ui/fleet-office-store.js +0 -5
- package/dist/ui/fleet-office.js +6 -173
- package/dist/ui/fleet-task-card.js +4 -8
- package/dist/ui/fleet-task-common.js +2 -2
- package/dist/ui/fleet-tasks.js +39 -125
- package/dist/ui/html-attachment.js +40 -3
- package/dist/ui/office-share-page.js +2 -4
- package/dist/ui/panel-chat.js +75 -90
- package/dist/ui/panel-details.js +2 -3
- package/dist/ui/panel-fleet.js +18 -105
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-needs.js +4 -162
- package/dist/ui/panel-notices.js +4 -3
- package/dist/ui/panel-settings.js +202 -281
- package/dist/ui/preview-pages.js +1 -1
- package/dist/ui/preview-panel.js +13 -21
- package/dist/ui/preview-versions.js +1 -1
- package/dist/ui/preview.js +476 -3
- package/dist/ui/search-dialog.js +3 -4
- package/dist/ui/settings-appearance.js +23 -122
- package/dist/ui/settings-catalog.js +10 -37
- package/dist/ui/settings-confirm.js +1 -3
- package/dist/ui/settings-dialogs.js +20 -48
- package/dist/ui/settings-guests.js +14 -27
- package/dist/ui/settings-model.js +1 -10
- package/dist/ui/settings-quota-notice.js +100 -0
- package/dist/ui/settings-registry.js +5 -15
- package/dist/ui/settings-strings.js +32 -105
- package/dist/ui/settings-web-authority.js +13 -18
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-route.js +3 -12
- package/dist/ui/shared/app-session.js +2 -6
- package/dist/ui/shared/app-shell.js +26 -87
- package/dist/ui/shared/app-store.js +2 -3
- package/dist/ui/shared/app-stream.js +1 -3
- package/dist/ui/shared/app.css +5 -1368
- package/dist/ui/shared/app.js +5 -17
- package/dist/ui/shared/header-tools.js +9 -9
- 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/signin.js +6 -211
- 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/vendor/vendor.json +2 -19
- package/dist/ui/shared/view-strings.js +0 -8
- package/dist/ui/signin.html +5 -23
- package/dist/unattended-install.js +1 -2
- package/dist/unattended-install.js.map +1 -1
- package/dist/usage/providers.d.ts +5 -0
- package/dist/usage/providers.js +6 -2
- package/dist/usage/providers.js.map +1 -1
- 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 +1 -0
- package/dist/usage/usage-api.js +16 -0
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/view-api.js +7 -5
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +2 -80
- package/dist/web-api.js +10 -513
- package/dist/web-api.js.map +1 -1
- package/dist/web-backend-login.d.ts +1 -23
- package/dist/web-backend-login.js +17 -11
- package/dist/web-backend-login.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-office-skins.d.ts +0 -9
- package/dist/web-office-skins.js +1 -16
- package/dist/web-office-skins.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.d.ts +0 -42
- package/dist/web-session.js +0 -9
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +1 -3
- package/dist/web-settings-patch.js +1 -4
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-shell-routes.d.ts +1 -10
- package/dist/web-shell-routes.js +2 -14
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-terminal.d.ts +30 -4
- package/dist/web-terminal.js +6 -9
- package/dist/web-terminal.js.map +1 -1
- package/dist/yaml-shared-nodes.js +3 -8
- package/dist/yaml-shared-nodes.js.map +1 -1
- package/launcher/agend-install.cjs +1 -8
- package/launcher/postinstall.cjs +2 -27
- package/package.json +3 -10
- package/templates/launchd.plist.ejs +1 -3
- package/dist/accounts-view.d.ts +0 -97
- package/dist/accounts-view.js +0 -116
- package/dist/accounts-view.js.map +0 -1
- 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 -76
- package/dist/agent-runtime-change.js +0 -114
- package/dist/agent-runtime-change.js.map +0 -1
- package/dist/agent-workspace.d.ts +0 -93
- package/dist/agent-workspace.js +0 -353
- package/dist/agent-workspace.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 -11
- package/dist/backend/native-pane.js +0 -59
- package/dist/backend/native-pane.js.map +0 -1
- package/dist/build-provenance-cli.d.ts +0 -3
- package/dist/build-provenance-cli.js +0 -11
- package/dist/build-provenance-cli.js.map +0 -1
- package/dist/build-provenance.d.ts +0 -20
- package/dist/build-provenance.js +0 -67
- package/dist/build-provenance.js.map +0 -1
- package/dist/build-provenance.json +0 -1
- package/dist/claude-auth-status.d.ts +0 -48
- package/dist/claude-auth-status.js +0 -149
- package/dist/claude-auth-status.js.map +0 -1
- package/dist/fleet-windows-runtime.d.ts +0 -98
- package/dist/fleet-windows-runtime.js +0 -467
- 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 -27
- package/dist/general-role.js.map +0 -1
- package/dist/hub/admission.d.ts +0 -28
- package/dist/hub/admission.js +0 -62
- package/dist/hub/admission.js.map +0 -1
- package/dist/hub/attachments/limits.d.ts +0 -20
- package/dist/hub/attachments/limits.js +0 -48
- package/dist/hub/attachments/limits.js.map +0 -1
- package/dist/hub/attachments/store.d.ts +0 -116
- package/dist/hub/attachments/store.js +0 -246
- package/dist/hub/attachments/store.js.map +0 -1
- package/dist/hub/audit/index.d.ts +0 -62
- package/dist/hub/audit/index.js +0 -344
- package/dist/hub/audit/index.js.map +0 -1
- package/dist/hub/browser-certificate.d.ts +0 -38
- package/dist/hub/browser-certificate.js +0 -247
- package/dist/hub/browser-certificate.js.map +0 -1
- package/dist/hub/buttons-model.d.ts +0 -9
- package/dist/hub/buttons-model.js +0 -42
- package/dist/hub/buttons-model.js.map +0 -1
- package/dist/hub/buttons.d.ts +0 -54
- package/dist/hub/buttons.js +0 -346
- package/dist/hub/buttons.js.map +0 -1
- package/dist/hub/catalog.d.ts +0 -74
- package/dist/hub/catalog.js +0 -195
- package/dist/hub/catalog.js.map +0 -1
- package/dist/hub/client.d.ts +0 -69
- package/dist/hub/client.js +0 -300
- package/dist/hub/client.js.map +0 -1
- package/dist/hub/compose/member.d.ts +0 -139
- package/dist/hub/compose/member.js +0 -450
- package/dist/hub/compose/member.js.map +0 -1
- package/dist/hub/compose/server.d.ts +0 -77
- package/dist/hub/compose/server.js +0 -349
- package/dist/hub/compose/server.js.map +0 -1
- package/dist/hub/compose/views.d.ts +0 -12
- package/dist/hub/compose/views.js +0 -4
- package/dist/hub/compose/views.js.map +0 -1
- package/dist/hub/db.d.ts +0 -56
- package/dist/hub/db.js +0 -188
- package/dist/hub/db.js.map +0 -1
- package/dist/hub/directory/config.d.ts +0 -39
- package/dist/hub/directory/config.js +0 -108
- package/dist/hub/directory/config.js.map +0 -1
- package/dist/hub/directory/directory.d.ts +0 -18
- package/dist/hub/directory/directory.js +0 -320
- package/dist/hub/directory/directory.js.map +0 -1
- package/dist/hub/directory/index.d.ts +0 -7
- package/dist/hub/directory/index.js +0 -4
- package/dist/hub/directory/index.js.map +0 -1
- package/dist/hub/directory/profiles.d.ts +0 -41
- package/dist/hub/directory/profiles.js +0 -90
- package/dist/hub/directory/profiles.js.map +0 -1
- package/dist/hub/directory/types.d.ts +0 -71
- package/dist/hub/directory/types.js +0 -14
- package/dist/hub/directory/types.js.map +0 -1
- package/dist/hub/execution/cli-provider.d.ts +0 -23
- package/dist/hub/execution/cli-provider.js +0 -341
- package/dist/hub/execution/cli-provider.js.map +0 -1
- package/dist/hub/execution/index.d.ts +0 -13
- package/dist/hub/execution/index.js +0 -8
- package/dist/hub/execution/index.js.map +0 -1
- package/dist/hub/execution/model-broker.d.ts +0 -24
- package/dist/hub/execution/model-broker.js +0 -208
- package/dist/hub/execution/model-broker.js.map +0 -1
- package/dist/hub/execution/provider-setup.d.ts +0 -11
- package/dist/hub/execution/provider-setup.js +0 -21
- package/dist/hub/execution/provider-setup.js.map +0 -1
- package/dist/hub/execution/sandbox-runner.d.ts +0 -1
- package/dist/hub/execution/sandbox-runner.js +0 -221
- package/dist/hub/execution/sandbox-runner.js.map +0 -1
- package/dist/hub/execution/service.d.ts +0 -136
- package/dist/hub/execution/service.js +0 -459
- package/dist/hub/execution/service.js.map +0 -1
- package/dist/hub/execution/store.d.ts +0 -61
- package/dist/hub/execution/store.js +0 -182
- package/dist/hub/execution/store.js.map +0 -1
- package/dist/hub/execution/views.d.ts +0 -20
- package/dist/hub/execution/views.js +0 -48
- package/dist/hub/execution/views.js.map +0 -1
- package/dist/hub/http/compose.d.ts +0 -20
- package/dist/hub/http/compose.js +0 -518
- package/dist/hub/http/compose.js.map +0 -1
- package/dist/hub/http/core.d.ts +0 -49
- package/dist/hub/http/core.js +0 -124
- package/dist/hub/http/core.js.map +0 -1
- package/dist/hub/http/deps.d.ts +0 -61
- package/dist/hub/http/deps.js +0 -2
- package/dist/hub/http/deps.js.map +0 -1
- package/dist/hub/http/schema.d.ts +0 -14
- package/dist/hub/http/schema.js +0 -80
- package/dist/hub/http/schema.js.map +0 -1
- package/dist/hub/identity.d.ts +0 -32
- package/dist/hub/identity.js +0 -80
- package/dist/hub/identity.js.map +0 -1
- package/dist/hub/init/browser-certificate.d.ts +0 -9
- package/dist/hub/init/browser-certificate.js +0 -78
- package/dist/hub/init/browser-certificate.js.map +0 -1
- package/dist/hub/init/browser-tls.d.ts +0 -18
- package/dist/hub/init/browser-tls.js +0 -62
- package/dist/hub/init/browser-tls.js.map +0 -1
- package/dist/hub/init/cli.d.ts +0 -3
- package/dist/hub/init/cli.js +0 -83
- package/dist/hub/init/cli.js.map +0 -1
- package/dist/hub/init/directory-certificate.d.ts +0 -24
- package/dist/hub/init/directory-certificate.js +0 -222
- package/dist/hub/init/directory-certificate.js.map +0 -1
- package/dist/hub/init/existing-fleet.d.ts +0 -6
- package/dist/hub/init/existing-fleet.js +0 -58
- package/dist/hub/init/existing-fleet.js.map +0 -1
- package/dist/hub/init/handoff.d.ts +0 -8
- package/dist/hub/init/handoff.js +0 -36
- package/dist/hub/init/handoff.js.map +0 -1
- package/dist/hub/init/identity.d.ts +0 -5
- package/dist/hub/init/identity.js +0 -24
- package/dist/hub/init/identity.js.map +0 -1
- package/dist/hub/init/initializer.d.ts +0 -24
- package/dist/hub/init/initializer.js +0 -385
- package/dist/hub/init/initializer.js.map +0 -1
- package/dist/hub/init/inventory.d.ts +0 -17
- package/dist/hub/init/inventory.js +0 -33
- package/dist/hub/init/inventory.js.map +0 -1
- package/dist/hub/init/layout.d.ts +0 -32
- package/dist/hub/init/layout.js +0 -53
- package/dist/hub/init/layout.js.map +0 -1
- package/dist/hub/init/network.d.ts +0 -18
- package/dist/hub/init/network.js +0 -104
- package/dist/hub/init/network.js.map +0 -1
- package/dist/hub/init/plan-digest.d.ts +0 -5
- package/dist/hub/init/plan-digest.js +0 -47
- package/dist/hub/init/plan-digest.js.map +0 -1
- package/dist/hub/init/prompt.d.ts +0 -26
- package/dist/hub/init/prompt.js +0 -110
- package/dist/hub/init/prompt.js.map +0 -1
- package/dist/hub/init/secret-file.d.ts +0 -1
- package/dist/hub/init/secret-file.js +0 -59
- package/dist/hub/init/secret-file.js.map +0 -1
- package/dist/hub/init/text.d.ts +0 -127
- package/dist/hub/init/text.js +0 -247
- package/dist/hub/init/text.js.map +0 -1
- package/dist/hub/init/types.d.ts +0 -114
- package/dist/hub/init/types.js +0 -9
- package/dist/hub/init/types.js.map +0 -1
- package/dist/hub/init/wizard.d.ts +0 -34
- package/dist/hub/init/wizard.js +0 -554
- package/dist/hub/init/wizard.js.map +0 -1
- package/dist/hub/initialization.d.ts +0 -23
- package/dist/hub/initialization.js +0 -28
- package/dist/hub/initialization.js.map +0 -1
- package/dist/hub/member/agent-mode.d.ts +0 -6
- package/dist/hub/member/agent-mode.js +0 -23
- package/dist/hub/member/agent-mode.js.map +0 -1
- package/dist/hub/member/attachments.d.ts +0 -29
- package/dist/hub/member/attachments.js +0 -107
- package/dist/hub/member/attachments.js.map +0 -1
- package/dist/hub/member/exposure-api.d.ts +0 -87
- package/dist/hub/member/exposure-api.js +0 -64
- package/dist/hub/member/exposure-api.js.map +0 -1
- package/dist/hub/member/exposures.d.ts +0 -123
- package/dist/hub/member/exposures.js +0 -282
- package/dist/hub/member/exposures.js.map +0 -1
- package/dist/hub/member/pairing-api.d.ts +0 -85
- package/dist/hub/member/pairing-api.js +0 -385
- package/dist/hub/member/pairing-api.js.map +0 -1
- package/dist/hub/member/quota.d.ts +0 -20
- package/dist/hub/member/quota.js +0 -98
- package/dist/hub/member/quota.js.map +0 -1
- package/dist/hub/member-journal.d.ts +0 -104
- package/dist/hub/member-journal.js +0 -336
- package/dist/hub/member-journal.js.map +0 -1
- package/dist/hub/member-reconciliation.d.ts +0 -14
- package/dist/hub/member-reconciliation.js +0 -97
- package/dist/hub/member-reconciliation.js.map +0 -1
- package/dist/hub/mount.d.ts +0 -39
- package/dist/hub/mount.js +0 -123
- package/dist/hub/mount.js.map +0 -1
- package/dist/hub/pairing-client.d.ts +0 -17
- package/dist/hub/pairing-client.js +0 -108
- package/dist/hub/pairing-client.js.map +0 -1
- package/dist/hub/pairing.d.ts +0 -65
- package/dist/hub/pairing.js +0 -211
- package/dist/hub/pairing.js.map +0 -1
- package/dist/hub/policy.d.ts +0 -63
- package/dist/hub/policy.js +0 -147
- package/dist/hub/policy.js.map +0 -1
- package/dist/hub/preview.d.ts +0 -32
- package/dist/hub/preview.js +0 -64
- package/dist/hub/preview.js.map +0 -1
- package/dist/hub/private-files.d.ts +0 -5
- package/dist/hub/private-files.js +0 -44
- package/dist/hub/private-files.js.map +0 -1
- package/dist/hub/profile.d.ts +0 -59
- package/dist/hub/profile.js +0 -73
- package/dist/hub/profile.js.map +0 -1
- package/dist/hub/protocol.d.ts +0 -779
- package/dist/hub/protocol.js +0 -93
- package/dist/hub/protocol.js.map +0 -1
- package/dist/hub/quota.d.ts +0 -24
- package/dist/hub/quota.js +0 -112
- package/dist/hub/quota.js.map +0 -1
- package/dist/hub/representative.d.ts +0 -141
- package/dist/hub/representative.js +0 -528
- package/dist/hub/representative.js.map +0 -1
- package/dist/hub/retention.d.ts +0 -17
- package/dist/hub/retention.js +0 -45
- package/dist/hub/retention.js.map +0 -1
- package/dist/hub/rooms.d.ts +0 -120
- package/dist/hub/rooms.js +0 -535
- package/dist/hub/rooms.js.map +0 -1
- package/dist/hub/runtime.d.ts +0 -106
- package/dist/hub/runtime.js +0 -298
- package/dist/hub/runtime.js.map +0 -1
- package/dist/hub/server.d.ts +0 -56
- package/dist/hub/server.js +0 -202
- package/dist/hub/server.js.map +0 -1
- package/dist/hub/service-start.d.ts +0 -17
- package/dist/hub/service-start.js +0 -109
- package/dist/hub/service-start.js.map +0 -1
- package/dist/hub/sessions.d.ts +0 -53
- package/dist/hub/sessions.js +0 -196
- package/dist/hub/sessions.js.map +0 -1
- package/dist/hub/socket.d.ts +0 -24
- package/dist/hub/socket.js +0 -79
- package/dist/hub/socket.js.map +0 -1
- package/dist/hub/store.d.ts +0 -77
- package/dist/hub/store.js +0 -88
- package/dist/hub/store.js.map +0 -1
- package/dist/hub/tls.d.ts +0 -31
- package/dist/hub/tls.js +0 -135
- package/dist/hub/tls.js.map +0 -1
- package/dist/hub/types.d.ts +0 -401
- package/dist/hub/types.js +0 -2
- package/dist/hub/types.js.map +0 -1
- package/dist/hub/validation.d.ts +0 -33
- package/dist/hub/validation.js +0 -136
- package/dist/hub/validation.js.map +0 -1
- package/dist/hub/version-floor.d.ts +0 -10
- package/dist/hub/version-floor.js +0 -45
- package/dist/hub/version-floor.js.map +0 -1
- package/dist/hub-browser-certificate-policy.d.ts +0 -31
- package/dist/hub-browser-certificate-policy.js +0 -25
- package/dist/hub-browser-certificate-policy.js.map +0 -1
- package/dist/hub-membership-settings.d.ts +0 -6
- package/dist/hub-membership-settings.js +0 -21
- package/dist/hub-membership-settings.js.map +0 -1
- package/dist/hub-mode.d.ts +0 -15
- package/dist/hub-mode.js +0 -17
- package/dist/hub-mode.js.map +0 -1
- package/dist/hub-pairing-summary.d.ts +0 -48
- package/dist/hub-pairing-summary.js +0 -36
- package/dist/hub-pairing-summary.js.map +0 -1
- package/dist/hub-report-target.d.ts +0 -32
- package/dist/hub-report-target.js +0 -33
- package/dist/hub-report-target.js.map +0 -1
- package/dist/hub-retention-policy.d.ts +0 -14
- package/dist/hub-retention-policy.js +0 -15
- package/dist/hub-retention-policy.js.map +0 -1
- package/dist/launchd-service-domain.d.ts +0 -5
- package/dist/launchd-service-domain.js +0 -21
- package/dist/launchd-service-domain.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 -13
- package/dist/native-instance-api.js +0 -217
- package/dist/native-instance-api.js.map +0 -1
- package/dist/native-instance-input.d.ts +0 -87
- package/dist/native-instance-input.js +0 -59
- package/dist/native-instance-input.js.map +0 -1
- package/dist/native-instance-registry.d.ts +0 -38
- package/dist/native-instance-registry.js +0 -129
- package/dist/native-instance-registry.js.map +0 -1
- package/dist/native-mcp.d.ts +0 -43
- package/dist/native-mcp.js +0 -291
- 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 -73
- package/dist/native-pane-lifecycle.js +0 -239
- 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 -592
- 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/office-talk.d.ts +0 -26
- package/dist/office-talk.js +0 -50
- package/dist/office-talk.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 -10
- package/dist/runtime-api.js +0 -189
- 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 -59
- package/dist/runtime-build-info.js.map +0 -1
- package/dist/runtime-bundle.d.ts +0 -22
- package/dist/runtime-bundle.js +0 -158
- package/dist/runtime-bundle.js.map +0 -1
- package/dist/runtime-cli.d.ts +0 -14
- package/dist/runtime-cli.js +0 -271
- package/dist/runtime-cli.js.map +0 -1
- package/dist/runtime-client-store.d.ts +0 -75
- package/dist/runtime-client-store.js +0 -372
- package/dist/runtime-client-store.js.map +0 -1
- package/dist/runtime-client.d.ts +0 -174
- package/dist/runtime-client.js +0 -1010
- 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 -98
- package/dist/runtime-coordinator.js +0 -1089
- package/dist/runtime-coordinator.js.map +0 -1
- package/dist/runtime-credential-profiles.d.ts +0 -78
- package/dist/runtime-credential-profiles.js +0 -280
- package/dist/runtime-credential-profiles.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-install.d.ts +0 -50
- package/dist/runtime-install.js +0 -186
- package/dist/runtime-install.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 -10
- package/dist/runtime-pane-codex-index.js +0 -151
- 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 -63
- package/dist/runtime-pane-host.js +0 -467
- 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 -47
- package/dist/runtime-pane-link.js +0 -337
- 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 -18
- package/dist/runtime-pane-mcp-relay.js +0 -80
- package/dist/runtime-pane-mcp-relay.js.map +0 -1
- package/dist/runtime-pane-mcp.d.ts +0 -55
- package/dist/runtime-pane-mcp.js +0 -153
- package/dist/runtime-pane-mcp.js.map +0 -1
- package/dist/runtime-pane-native.d.ts +0 -75
- package/dist/runtime-pane-native.js +0 -114
- 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 -144
- package/dist/runtime-pane-port.js +0 -574
- 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 -117
- package/dist/runtime-pane-process.js.map +0 -1
- package/dist/runtime-pane-protocol.d.ts +0 -182
- package/dist/runtime-pane-protocol.js +0 -217
- package/dist/runtime-pane-protocol.js.map +0 -1
- package/dist/runtime-pane-quota-history.d.ts +0 -6
- package/dist/runtime-pane-quota-history.js +0 -44
- package/dist/runtime-pane-quota-history.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 -16
- package/dist/runtime-pane-service.js +0 -256
- 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 -50
- package/dist/runtime-pane-transcript.js +0 -666
- 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 -167
- package/dist/runtime-pane-worker.js.map +0 -1
- package/dist/runtime-protocol.d.ts +0 -177
- package/dist/runtime-protocol.js +0 -49
- 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-update-activity.d.ts +0 -21
- package/dist/runtime-update-activity.js +0 -51
- package/dist/runtime-update-activity.js.map +0 -1
- package/dist/runtime-update-artifact.d.ts +0 -31
- package/dist/runtime-update-artifact.js +0 -252
- package/dist/runtime-update-artifact.js.map +0 -1
- package/dist/runtime-update-install.d.ts +0 -31
- package/dist/runtime-update-install.js +0 -205
- package/dist/runtime-update-install.js.map +0 -1
- package/dist/runtime-update-journal.d.ts +0 -44
- package/dist/runtime-update-journal.js +0 -121
- package/dist/runtime-update-journal.js.map +0 -1
- package/dist/runtime-update-lock.d.ts +0 -48
- package/dist/runtime-update-lock.js +0 -217
- package/dist/runtime-update-lock.js.map +0 -1
- package/dist/runtime-update-owners.d.ts +0 -29
- package/dist/runtime-update-owners.js +0 -240
- package/dist/runtime-update-owners.js.map +0 -1
- package/dist/runtime-update-protocol.d.ts +0 -15
- package/dist/runtime-update-protocol.js +0 -13
- package/dist/runtime-update-protocol.js.map +0 -1
- package/dist/runtime-windows-bridge.d.ts +0 -42
- package/dist/runtime-windows-bridge.js +0 -167
- package/dist/runtime-windows-bridge.js.map +0 -1
- package/dist/service-drain.d.ts +0 -19
- package/dist/service-drain.js +0 -64
- package/dist/service-drain.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-binary.d.ts +0 -59
- package/dist/tmux-binary.js +0 -200
- package/dist/tmux-binary.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 -42
- package/dist/transcript-needles.js +0 -166
- package/dist/transcript-needles.js.map +0 -1
- package/dist/transcript-records.d.ts +0 -21
- package/dist/transcript-records.js +0 -141
- package/dist/transcript-records.js.map +0 -1
- package/dist/ui/account-identity.js +0 -27
- package/dist/ui/accounts-view.js +0 -214
- package/dist/ui/agent-proposals.js +0 -90
- package/dist/ui/agent-runtime-settings.js +0 -68
- package/dist/ui/agent-runtime.js +0 -124
- package/dist/ui/cli-picker.js +0 -42
- package/dist/ui/credential-profile-select.js +0 -54
- package/dist/ui/fleet-office-dialogue.d.ts +0 -30
- package/dist/ui/fleet-office-dialogue.js +0 -382
- package/dist/ui/fleet-task-menu.js +0 -188
- package/dist/ui/fleet-task-stats.js +0 -124
- package/dist/ui/fleet-task-view.js +0 -340
- package/dist/ui/general-location.js +0 -71
- package/dist/ui/hub-agent-copy.js +0 -23
- package/dist/ui/hub-button-actions.js +0 -65
- package/dist/ui/hub-chat-store.js +0 -158
- package/dist/ui/hub-chat-strings.js +0 -77
- package/dist/ui/hub-client.js +0 -329
- package/dist/ui/hub-owner-strings.js +0 -51
- package/dist/ui/hub-provider-guidance.js +0 -31
- package/dist/ui/hub-quota.js +0 -85
- package/dist/ui/hub-strings.js +0 -162
- package/dist/ui/hub-switcher.js +0 -27
- package/dist/ui/native-instance-settings.js +0 -44
- package/dist/ui/native-pane-recovery.js +0 -45
- package/dist/ui/panel-hub.js +0 -619
- package/dist/ui/panel-runtimes.js +0 -425
- package/dist/ui/panel-windows-agent.js +0 -86
- package/dist/ui/panel-windows-cli.js +0 -189
- package/dist/ui/provider-marks.js +0 -83
- package/dist/ui/runtime-catalog.js +0 -55
- package/dist/ui/runtime-commands.d.ts +0 -4
- package/dist/ui/runtime-commands.js +0 -59
- package/dist/ui/settings-access-strings.js +0 -42
- package/dist/ui/settings-agent-filters.js +0 -94
- package/dist/ui/settings-build-version.js +0 -35
- package/dist/ui/settings-devices.js +0 -253
- package/dist/ui/settings-hub-browser-certificate.js +0 -74
- package/dist/ui/settings-hub-membership.js +0 -72
- package/dist/ui/settings-hub-retention.js +0 -52
- package/dist/ui/settings-hub.js +0 -196
- package/dist/ui/settings-layout.js +0 -242
- package/dist/ui/settings-outside.js +0 -242
- package/dist/ui/settings-shared-strings.js +0 -143
- package/dist/ui/settings-shared.js +0 -345
- package/dist/ui/settings-shortcuts.js +0 -65
- package/dist/ui/shared/accounts.css +0 -15
- package/dist/ui/shared/chat-composer.js +0 -68
- package/dist/ui/shared/chat-md-strings.js +0 -9
- package/dist/ui/shared/chat-render.js +0 -682
- package/dist/ui/shared/chat-strings.js +0 -333
- package/dist/ui/shared/chat-thread.js +0 -969
- package/dist/ui/shared/chat-time.js +0 -80
- package/dist/ui/shared/html-attachment.js +0 -42
- package/dist/ui/shared/hub-chat.css +0 -85
- package/dist/ui/shared/hub-owner.css +0 -33
- package/dist/ui/shared/hub-quota.css +0 -8
- package/dist/ui/shared/hub.css +0 -71
- package/dist/ui/shared/machine-name.js +0 -13
- package/dist/ui/shared/page-head.js +0 -8
- package/dist/ui/shared/preview.js +0 -476
- package/dist/ui/shared/qrcode.module.js +0 -2237
- package/dist/ui/shared/runtime-install.css +0 -26
- package/dist/ui/shared/settings-width.js +0 -31
- package/dist/ui/shared/side-rail.js +0 -15
- package/dist/ui/shared/task-board.css +0 -95
- package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
- package/dist/ui/shared/workspace.css +0 -20
- package/dist/ui/windows-agents-nav.js +0 -2
- package/dist/ui/windows-cli-catalog.js +0 -108
- package/dist/ui/workspace-panel.js +0 -189
- package/dist/ui/workspace-strings.js +0 -35
- package/dist/web-device-login.d.ts +0 -153
- package/dist/web-device-login.js +0 -278
- package/dist/web-device-login.js.map +0 -1
- 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 -127
- package/dist/windows-agents.js +0 -491
- package/dist/windows-agents.js.map +0 -1
- package/dist/windows-cli-api.d.ts +0 -34
- package/dist/windows-cli-api.js +0 -185
- package/dist/windows-cli-api.js.map +0 -1
- package/dist/windows-cli-providers.d.ts +0 -106
- package/dist/windows-cli-providers.js +0 -424
- package/dist/windows-cli-providers.js.map +0 -1
- package/dist/windows-cli-worker.d.ts +0 -83
- package/dist/windows-cli-worker.js +0 -570
- package/dist/windows-cli-worker.js.map +0 -1
- package/dist/windows-cli.d.ts +0 -126
- package/dist/windows-cli.js +0 -416
- 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/launcher/launchd-session-type.cjs +0 -14
- package/launcher/tmux-bundle.cjs +0 -247
- 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/templates/runtime-install/install.ps1 +0 -270
package/dist/ui/shared/app.js
CHANGED
|
@@ -33,10 +33,6 @@ appStore.set({ viewOnly: mode === "view-only" });
|
|
|
33
33
|
// #1920 phase 3: a guest's page has its chats and nothing else — no panel, notifier, theme list or owner CSS a guest
|
|
34
34
|
// would be refused.
|
|
35
35
|
const guest = guestPage();
|
|
36
|
-
// AgEnD Hub P1 (S3b): a Hub's own workspace (the mark its listener sets). It boots Hub-only: no fleet stream, chat,
|
|
37
|
-
// Needs you, notices, preferences, themes or owner CSS — none of the fleet's endpoints exist at the Hub's origin, and
|
|
38
|
-
// who is signed in is the Hub's own session (/hub/v1/session), read by its pages.
|
|
39
|
-
const hubPage = mode === "full" && !guest && String(boot.hub || "").split(/\s+/).includes("hub");
|
|
40
36
|
|
|
41
37
|
// A failed load can be retried (the panel's Retry): each retry asks for a fresh URL, since a browser may keep a failed
|
|
42
38
|
// module import cached under the first one. boot() runs once, whichever attempt succeeds.
|
|
@@ -46,12 +42,7 @@ const loadView = retryable((a) => import(retryUrl("/assets/panel-view.js", a)));
|
|
|
46
42
|
const panels = new Map([["view", { load: () => loadView().then((m) => m.ViewPanel) }]]);
|
|
47
43
|
let onNewInstance = null;
|
|
48
44
|
|
|
49
|
-
if (
|
|
50
|
-
const loadHub = retryable((a) => import(retryUrl("/ui/js/panel-hub.js", a)));
|
|
51
|
-
panels.set("hub", { load: () => loadHub().then((m) => m.HubPanel) });
|
|
52
|
-
appStore.set({ connection: "none" });
|
|
53
|
-
if (!location.pathname.startsWith("/ui/hub")) history.replaceState(history.state, "", "/ui/hub");
|
|
54
|
-
} else if (mode === "full") {
|
|
45
|
+
if (mode === "full") {
|
|
55
46
|
const stream = createStream({ mode, transport: boot.webTransport });
|
|
56
47
|
stream.on("status", applyStatus);
|
|
57
48
|
stream.on("activity", applyActivity);
|
|
@@ -65,7 +56,8 @@ if (hubPage) {
|
|
|
65
56
|
// A chat that loaded late catches up on what is open now; the shell shows that while it is not done, with Retry.
|
|
66
57
|
stream.on("hydration", (hydration) => appStore.set({ hydration }));
|
|
67
58
|
appStore.set({ retryHydration: () => stream.catchUp() });
|
|
68
|
-
|
|
59
|
+
appStore.set({ needsLoaded: false });
|
|
60
|
+
stream.on("needs", (d) => appStore.set({ needsLoaded: true, needs: Array.isArray(d && d.items) ? d.items : [] }));
|
|
69
61
|
// #1218: a panel's way to hear one stream event (the Log's steps_tick), unsubscribed by its lease.
|
|
70
62
|
appStore.set({ streamOn: (name, fn) => stream.on(name, fn) });
|
|
71
63
|
appStore.set({ connection: stream.connection() });
|
|
@@ -94,8 +86,6 @@ if (hubPage) {
|
|
|
94
86
|
let chatLoads = 0;
|
|
95
87
|
panels.set("chat", { load: () => (chatLoads++ === 0 ? chatBoot : loadChat()).then((m) => m.ChatPanel) });
|
|
96
88
|
if (!guest) {
|
|
97
|
-
const loadWindowsAgent = retryable((a) => import(retryUrl("/ui/js/panel-windows-agent.js", a)));
|
|
98
|
-
panels.set("windows-agent", { load: () => loadWindowsAgent().then((m) => m.WindowsAgentPanel) });
|
|
99
89
|
panels.set("fleet", { load: () => loadFleet().then((m) => m.FleetPanel) });
|
|
100
90
|
panels.set("settings", { load: () => loadSettings().then((m) => m.SettingsPanel) });
|
|
101
91
|
// #2347: the restart banner's Restart now, in any panel — the Settings runner (behind the session) does it.
|
|
@@ -131,8 +121,6 @@ if (hubPage) {
|
|
|
131
121
|
startNeedsNotifier({ open: (instance) => navigate(chatPath(instance)) });
|
|
132
122
|
// #2233: a backend sign-in running anywhere is shown on every admin page (the module lives behind the session gate).
|
|
133
123
|
import("/ui/js/backend-signin.js").then((m) => m.installSignIn(), () => {});
|
|
134
|
-
// alpha.2 (M-2300): an agent's Windows request waiting for a web-only fleet's owner — counted in Needs you everywhere.
|
|
135
|
-
import("/ui/js/agent-proposals.js").then((m) => m.installProposals(), () => {});
|
|
136
124
|
}
|
|
137
125
|
// #1665: this device's first upload of its own choices (once), then another device's changes at each status frame.
|
|
138
126
|
// A guest's page (#2855) uploads and saves only its own keys (prefsWritable(key)); another device's changes reach it at
|
|
@@ -152,7 +140,7 @@ if (hubPage) {
|
|
|
152
140
|
startRouter(window);
|
|
153
141
|
// #1629 r4 §3: the person's owner CSS (full app only; never on Settings, in safe mode or where this device turned it off;
|
|
154
142
|
// never a guest's — owner CSS is an admin's).
|
|
155
|
-
if (!guest
|
|
143
|
+
if (!guest) installOwnerCss();
|
|
156
144
|
// /ui on its own opens the chat this browser had open last (an unknown name shows the panel's "not found").
|
|
157
145
|
{
|
|
158
146
|
const r = navStore.get().route;
|
|
@@ -163,7 +151,7 @@ if (!guest && !hubPage) installOwnerCss();
|
|
|
163
151
|
|
|
164
152
|
document.addEventListener("keydown", handleKey);
|
|
165
153
|
// #2293: Ctrl+K / ⌘K (and Ctrl+F in a chat) — an admin's full app, and a trusted guest's (#2855: what it can see).
|
|
166
|
-
if (mode === "full" &&
|
|
154
|
+
if (mode === "full" && (!guest || guestTrusted())) document.addEventListener("keydown", handleSearchKey);
|
|
167
155
|
// #2342: Ctrl/⌘+Z and Ctrl+Shift+Z / Ctrl+Y / ⌘⇧Z in every text field, one history per field (the browser's is one
|
|
168
156
|
// for the whole page, and any script write wipes it).
|
|
169
157
|
installTextUndo({ mac: isMacLike() });
|
|
@@ -7,10 +7,9 @@
|
|
|
7
7
|
// Fleet read (#1300: no style attribute). View's terminal multiplies its fitted size by VIEW_SCALE, as its density did.
|
|
8
8
|
import { html, useEffect, useState } from "./app-html.js";
|
|
9
9
|
import { t } from "./app-i18n.js";
|
|
10
|
-
import {
|
|
10
|
+
import { createStore, useStore } from "./app-store.js";
|
|
11
11
|
import { Icon } from "./ui-icons.js";
|
|
12
12
|
import { UsageBody, UsageCompactToggle, UsageDialog } from "./usage-dialog.js";
|
|
13
|
-
import { RailFrame } from "./side-rail.js";
|
|
14
13
|
|
|
15
14
|
export const TEXT_SIZE_KEY = "agend_text_size";
|
|
16
15
|
export const VIEW_FIT_KEY = "agend_view_fit";
|
|
@@ -125,11 +124,12 @@ export function useRailWidth() {
|
|
|
125
124
|
export function UsageRail({ route }) {
|
|
126
125
|
const wide = useRailWidth();
|
|
127
126
|
const { open } = useStore(usageRailStore);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
if (!wide || !open || !route || !RAIL_PANELS.includes(route.panel) || !usageOffered()) return null;
|
|
128
|
+
return html`<aside data-trust="usage" class="u-rail" aria-label=${t("view.usage.title_plain")}>
|
|
129
|
+
<div class="u-rail-head"><h2>${t("view.usage.title")}</h2><${UsageCompactToggle} />
|
|
130
|
+
<button type="button" class="icon-btn" onClick=${() => setUsageRail(false)} aria-label=${t("app.usageHide")} title=${t("app.usageHide")}><${Icon} name="close" size=${16} /></button></div>
|
|
131
|
+
<div class="u-rail-body"><${UsageBody} owner="usage-rail" /></div>
|
|
132
|
+
</aside>`;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
/**
|
|
@@ -154,8 +154,8 @@ export function UsageButton({ navKey }) {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/** The shared controls, in the one order every page uses. `navKey`: the page's navigation (the usage dialog's owner). */
|
|
157
|
-
export function HeaderTools({ view = false, navKey
|
|
158
|
-
return html`<${TextSizeButton} view=${view}
|
|
157
|
+
export function HeaderTools({ view = false, navKey }) {
|
|
158
|
+
return html`<${TextSizeButton} view=${view} /><${UsageButton} navKey=${navKey} />`;
|
|
159
159
|
}
|
|
160
160
|
/** Where a page with no control of its own after the shared ones (Log) keeps the room Chat's ⋯ takes: the same box on every tab. */
|
|
161
161
|
export function HeaderSlot() {
|
|
@@ -18,7 +18,6 @@ import { viewStore } from "./view-roster-store.js";
|
|
|
18
18
|
import { onPrefsChanged, prefInForce, prefsWritable, savePref } from "./app-prefs.js";
|
|
19
19
|
import "./view-strings.js";
|
|
20
20
|
import { themesShown, themesStore } from "./app-themes.js";
|
|
21
|
-
import { machineName } from "./machine-name.js";
|
|
22
21
|
import { identityClasses, identityOf, paintIdentity, useIdentityColors } from "./identity-color.js";
|
|
23
22
|
|
|
24
23
|
/** view.* text with named values. */
|
|
@@ -80,14 +79,6 @@ export function modelText(it, raw = it && it.model) {
|
|
|
80
79
|
}
|
|
81
80
|
const BACKEND_LABELS = { "claude-code": "Claude Code", "kiro-cli": "Kiro CLI", codex: "Codex", grok: "Grok Build", antigravity: "Antigravity", opencode: "OpenCode" };
|
|
82
81
|
export function backendLabel(backend) { return BACKEND_LABELS[backend] || backend || "Unknown"; }
|
|
83
|
-
export function runtimeLabel(runtime) { return runtime === "windows" ? "Windows" : runtime === "wsl" ? "WSL / Linux" : runtime || ""; }
|
|
84
|
-
/** Missing capabilities preserve the existing Linux UI; native runtimes expose only implemented controls. */
|
|
85
|
-
export function supportsInstanceFeature(instance, feature) {
|
|
86
|
-
const key = feature === "view" ? "terminal" : feature;
|
|
87
|
-
if (typeof instance?.capabilities?.[key] === "boolean") return instance.capabilities[key];
|
|
88
|
-
if (feature === "log" && typeof instance?.capabilities?.terminal === "boolean") return instance.capabilities.terminal;
|
|
89
|
-
return instance?.runtime !== "windows" || !["terminal","view","log","details","attachments","commands","effort","send_while_busy"].includes(feature);
|
|
90
|
-
}
|
|
91
82
|
export const KNOWN_BACKENDS = new Set(Object.keys(BACKEND_LABELS));
|
|
92
83
|
export const STATUS_KEYS = { running: "statusRunning", paused: "statusPaused", stopped: "statusStopped", crashed: "statusCrashed" };
|
|
93
84
|
|
|
@@ -106,7 +97,7 @@ export function normalizeFilter(query) { return String(query == null ? "" : quer
|
|
|
106
97
|
/** Case-insensitive substring on name (incl. display name), model and backend. */
|
|
107
98
|
export function instanceMatchesFilter(it, needle, labelOf) {
|
|
108
99
|
if (!needle) return true;
|
|
109
|
-
const fields = [nameOf(it), it.display_name, it.model, it.backend,
|
|
100
|
+
const fields = [nameOf(it), it.display_name, it.model, it.backend, labelOf ? labelOf(it.backend) : null];
|
|
110
101
|
return fields.some((value) => typeof value === "string" && value.toLowerCase().includes(needle));
|
|
111
102
|
}
|
|
112
103
|
/**
|
|
@@ -145,9 +136,6 @@ export function instanceTooltip(it) {
|
|
|
145
136
|
if (it.display_name && it.display_name !== name) lines.push(it.display_name, `(${name})`);
|
|
146
137
|
else lines.push(name);
|
|
147
138
|
lines.push(line("tooltipBackend", backendLabel(it.backend)));
|
|
148
|
-
if (it.runtime) lines.push(`Runtime: ${runtimeLabel(it.runtime)}`);
|
|
149
|
-
if (it.machine_id) lines.push(line("tooltipMachine",machineName(it.machine_id,it.machine_name)));
|
|
150
|
-
if (it.machine_id && it.machine_status !== "online") lines.push(tn(it.machine_status === "revoked" ? "machineRevoked" : "machineOffline"));
|
|
151
139
|
const src = (s) => (s === "instance" || s === "classic" ? tn("srcConfigured") : s === "fleet-default" ? tn("srcFleetDefault") : "");
|
|
152
140
|
lines.push(line("tooltipModel", (modelText(it) || tn("tooltipUnavailable")) + src(it.model_source)));
|
|
153
141
|
lines.push(line("tooltipStatus", status));
|
|
@@ -295,8 +283,6 @@ function writeFacetsOpen(open) { try { localStorage.setItem(FACETS_KEY, JSON.str
|
|
|
295
283
|
|
|
296
284
|
/** The Favorites group's key among the tag groups: no tag can be it (a group name is never a control character). */
|
|
297
285
|
const FAV_GROUP = "\u0000favorites";
|
|
298
|
-
/** #3008 G2: a web-only fleet's General (its status row says `general: true`), pinned first under its own head. */
|
|
299
|
-
const GENERAL_GROUP = "\u0000general";
|
|
300
286
|
/** #1936: the open instance, pinned on top while a filter is on. */
|
|
301
287
|
const PINNED_GROUP = "\u0000pinned";
|
|
302
288
|
function persistOrder(groupNames, instByGroup) {
|
|
@@ -504,11 +490,9 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
504
490
|
const [editing, setEditing] = useState(false);
|
|
505
491
|
// Where a row goes: the view the page is in (#1523 §3.1). View → View; Details → Details; everywhere else, a Fleet tab
|
|
506
492
|
// included (#1917: the user's call, replacing Q4 = A), → Chat. The anonymous reader only ever has View.
|
|
507
|
-
const
|
|
493
|
+
const rowPath = viewOnly || (route && route.panel === "view") ? viewPath
|
|
508
494
|
: route && route.panel === "log" ? logPath // #1218: Log → Log
|
|
509
495
|
: route && route.panel === "details" ? detailsPath : chatPath;
|
|
510
|
-
const rowPath = (name) => byName.get(name)?.runtime === "windows" && ["view", "log", "details"].includes(route?.panel)
|
|
511
|
-
? chatPath(name) : panelPath(name);
|
|
512
496
|
const active = route && (route.panel === "chat" || route.panel === "view" || route.panel === "log" || route.panel === "details") ? route.instance : null;
|
|
513
497
|
const own = (map, name) => Object.prototype.hasOwnProperty.call(map, name);
|
|
514
498
|
const byName = new Map(items.map((it) => [nameOf(it), it]));
|
|
@@ -518,10 +502,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
518
502
|
// their order. Changing them: a signed-in page that may write preferences (not the public link, not the anonymous
|
|
519
503
|
// reader — they still see the list).
|
|
520
504
|
const known = new Set(byName.keys());
|
|
521
|
-
|
|
522
|
-
const general = items.find((it) => it && it.general === true);
|
|
523
|
-
const generalName = general ? nameOf(general) : null;
|
|
524
|
-
const favs = nav.favorites.filter((n) => known.has(n) && n !== generalName);
|
|
505
|
+
const favs = nav.favorites.filter((n) => known.has(n));
|
|
525
506
|
const favSet = new Set(favs);
|
|
526
507
|
const canStar = !viewOnly && prefsWritable("nav.favorites");
|
|
527
508
|
// #1920: a guest's list is not reordered (the order is the host's). #2855: it stars, sorts and filters as its own
|
|
@@ -539,15 +520,14 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
539
520
|
let shownGroups, shownInsts;
|
|
540
521
|
if (recent) {
|
|
541
522
|
const sortRecent = byRecentReply(ageOf);
|
|
542
|
-
const rest = groupNames.flatMap((g) => instByGroup.get(g) || []).filter((n) => !favSet.has(n)
|
|
523
|
+
const rest = groupNames.flatMap((g) => instByGroup.get(g) || []).filter((n) => !favSet.has(n)).sort(sortRecent);
|
|
543
524
|
shownGroups = [...(favs.length ? [FAV_GROUP] : []), ...(rest.length ? [RECENT_GROUP] : [])];
|
|
544
525
|
shownInsts = new Map([[FAV_GROUP, favsSorted ? [...favs].sort(sortRecent) : favs], [RECENT_GROUP, rest]]);
|
|
545
526
|
} else {
|
|
546
527
|
shownGroups = favs.length ? [FAV_GROUP, ...groupNames] : groupNames;
|
|
547
|
-
shownInsts = new Map([...instByGroup].map(([g, names]) => [g, names.filter((n) => !favSet.has(n)
|
|
528
|
+
shownInsts = new Map([...instByGroup].map(([g, names]) => [g, names.filter((n) => !favSet.has(n))]));
|
|
548
529
|
if (favs.length) shownInsts.set(FAV_GROUP, favs);
|
|
549
530
|
}
|
|
550
|
-
if (generalName) { shownGroups = [GENERAL_GROUP, ...shownGroups]; shownInsts.set(GENERAL_GROUP, [generalName]); }
|
|
551
531
|
const f = nav.filter;
|
|
552
532
|
const shown = filterSidebar(shownGroups, shownInsts, byName, f.q, backendLabel, { status: f.status, cli: f.cli, statusOf: facetOf });
|
|
553
533
|
// #1936: while a filter is on, the instance you have open stays on top, pinned and marked "Current", whether or not
|
|
@@ -609,9 +589,7 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
609
589
|
const row = (name, g, i, count) => {
|
|
610
590
|
const it = byName.get(name);
|
|
611
591
|
// #1722: both names, the preferred one first; one line when there is no other.
|
|
612
|
-
const
|
|
613
|
-
const label = it.runtime === "windows" ? it.display_name || preferred.primary : preferred.primary;
|
|
614
|
-
const secondary = it.runtime === "windows" ? backendLabel(it.backend) : preferred.secondary;
|
|
592
|
+
const { primary: label, secondary } = namesOf(it, names.primary);
|
|
615
593
|
const facet = facetOf(name);
|
|
616
594
|
const waiting = own(awaiting, name) ? awaiting[name] : null;
|
|
617
595
|
const on = name === active;
|
|
@@ -628,10 +606,9 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
628
606
|
aria-current=${on ? "page" : undefined} onClick=${onPick} ...${fav ? {} : dragProps({ type: "instance", name, group: g })}>
|
|
629
607
|
<${InstanceAvatar} it=${it} state=${dotState(it, own(exec, name) ? exec[name] : null, waiting)} cli=${true} />
|
|
630
608
|
<span class="inst-text"><span class="inst-line"><span class="inst-name" title=${label}>${label}</span>
|
|
631
|
-
<span class="v-meta">${it.
|
|
609
|
+
<span class="v-meta">${it.context_pct != null ? `${Math.round(it.context_pct)}%` : ""}</span></span>
|
|
632
610
|
${two ? html`<span class="inst-line inst-line2"><span class="inst-alt" title=${secondary || undefined}>${secondary || ""}</span>
|
|
633
611
|
${mins != null ? html`<span class=${`inst-when${fade > 0 ? " fresh" : ""}`} title=${tn("replyTitle", { time: new Date(Date.parse(it.last_reply)).toLocaleString() })}>${replyText(mins)}</span>` : null}</span>` : null}
|
|
634
|
-
${it.machine_id ? html`<span class=${`inst-machine${it.machine_status !== "online" ? " offline" : ""}`} title=${tn("tooltipMachine",{value:machineName(it.machine_id,it.machine_name)})}><span class="inst-machine-name">${machineName(it.machine_id,it.machine_name)}</span>${it.machine_status !== "online" ? html`<span class="inst-machine-status">${tn(it.machine_status === "revoked" ? "machineRevoked" : "machineOffline")}</span>` : null}</span>` : null}
|
|
635
612
|
${facet === "needs" ? html`<span class="inst-sub"><span class="badge-await" title=${waiting || t("app.approxNote")}>${t("app.needsYou")}</span></span>` : null}
|
|
636
613
|
<span class="sr-only">${tn("tooltipBackend", { value: backendLabel(it.backend) })}</span></span>
|
|
637
614
|
</a>${fav && editing && canStar ? html`<button type="button" class="icon-btn inst-move" aria-label=${tn("favUp", { name: label })}
|
|
@@ -662,10 +639,6 @@ export function InstanceNav({ route, items, loaded = true, exec = {}, awaiting =
|
|
|
662
639
|
if (g === RECENT_GROUP) return html`<div key=${g} class="v-group v-recent" role="group" aria-label=${tn("recentOthers")}>
|
|
663
640
|
<div class="v-group-head recent-head"><${Icon} name="clock" size=${14} /><span class="grow">${tn("recentOthers")}</span><span class="count">${names.length}</span></div>
|
|
664
641
|
<ul class="inst-list">${names.map((name, i) => row(name, g, i, names.length))}</ul></div>`;
|
|
665
|
-
// #3008 G2: the General — always open, first, not dragged or starred into another place.
|
|
666
|
-
if (g === GENERAL_GROUP) return html`<div key=${g} class="v-group v-general" role="group" aria-label=${tn("generalGroup")}>
|
|
667
|
-
<div class="v-group-head general-head"><span class="grow">${tn("generalGroup")}</span></div>
|
|
668
|
-
<ul class="inst-list">${names.map((name, i) => row(name, g, i, names.length))}</ul></div>`;
|
|
669
642
|
// #1664: Favorites — always open, not dragged (↑ ↓ in Edit), named in the page's language.
|
|
670
643
|
if (g === FAV_GROUP) return html`<div key=${g} class="v-group v-fav" role="group" aria-label=${tn("favorites")}>
|
|
671
644
|
<div class="v-group-head fav-head"><${Icon} name="star" size=${14} cls="fav-mark" /><span class="grow">${tn("favorites")}</span><span class="count">${names.length}</span></div>
|
|
@@ -7,20 +7,19 @@ import { html } from "./app-html.js";
|
|
|
7
7
|
import { openSearch } from "./app-shell.js";
|
|
8
8
|
import { t } from "./app-i18n.js";
|
|
9
9
|
import { chatPath, detailsPath, logPath, viewPath } from "./app-route.js";
|
|
10
|
-
import { supportsInstanceFeature } from "./instance-nav.js";
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* current: "chat" | "view" | "log" | "details". #1218: Log sits between View and Details. `data-label`: each tab is as
|
|
14
13
|
* wide as its label in the current tab's weight (app.css), so the bar keeps its size whichever tab is current.
|
|
15
14
|
*/
|
|
16
|
-
export function InstanceSwitch({ name, current, guest = false
|
|
15
|
+
export function InstanceSwitch({ name, current, guest = false }) {
|
|
17
16
|
const seg = (key, href, label) => html`<a key=${key} class=${`seg-item${current === key ? " active" : ""}`} href=${href}
|
|
18
17
|
aria-current=${current === key ? "page" : undefined} data-label=${label}>${label}</a>`;
|
|
19
18
|
if (guest) return html`<nav class="inst-switch seg" aria-label=${t("app.instanceViews", name)}>
|
|
20
|
-
${seg("chat", chatPath(name), t("app.chat"))}${
|
|
19
|
+
${seg("chat", chatPath(name), t("app.chat"))}${seg("view", viewPath(name), t("app.view"))}<button key="search" type="button" class="seg-item"
|
|
21
20
|
data-label=${t("app.search")} onClick=${() => openSearch({ instance: name })}>${t("app.search")}</button>
|
|
22
21
|
</nav>`;
|
|
23
22
|
return html`<nav class="inst-switch seg" aria-label=${t("app.instanceViews", name)}>
|
|
24
|
-
${seg("chat", chatPath(name), t("app.chat"))}${
|
|
23
|
+
${seg("chat", chatPath(name), t("app.chat"))}${seg("view", viewPath(name), t("app.view"))}${seg("log", logPath(name), t("app.log"))}${seg("details", detailsPath(name), t("app.details"))}
|
|
25
24
|
</nav>`;
|
|
26
25
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* The shared Skeleton's calm content shapes, including before the app's modules arrive. No shimmer or spinner. */
|
|
2
|
+
.skeleton { box-sizing: border-box; width: 100%; min-width: 0; }
|
|
3
|
+
.skeleton > [aria-hidden] { display: flex; flex-direction: column; gap: 14px; width: 100%; }
|
|
4
|
+
.skeleton .sk-line { height: 14px; flex-shrink: 0; background: var(--surface-2, #e8e8eb); border-radius: 5px; }
|
|
5
|
+
.sk-row { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 8px 0; }
|
|
6
|
+
.sk-row .sk-thumb { width: 36px; height: 36px; border-radius: 9px; }
|
|
7
|
+
.sk-row .sk-copy { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 9px; }
|
|
8
|
+
.sk-row .sk-copy .sk-line { width: 76%; height: 12px; }
|
|
9
|
+
.sk-row .sk-copy .sk-line + .sk-line { width: 51%; height: 10px; }
|
|
10
|
+
.sk-row .sk-pill { width: 52px; height: 22px; border-radius: 99px; }
|
|
11
|
+
.sk-cards .sk-row { min-height: 104px; border-bottom: 1px solid var(--border, #ddd); }
|
|
12
|
+
.sk-inline { max-width: 140px; min-width: 90px; padding: 0; margin: 0; }
|
|
13
|
+
.s-profile { position: relative; }
|
|
14
|
+
.s-profile-fields { display: flex; flex-direction: column; gap: var(--s-3, 12px); }
|
|
15
|
+
.sk-reserve { visibility: hidden; pointer-events: none; }
|
|
16
|
+
.sk-profile-cover { position: absolute; inset: 52px 16px 16px; }
|
|
17
|
+
.s-pref-profile-fields > .sk-profile-cover { inset: 0; }
|
|
18
|
+
.sk-profile-cover .skeleton { padding: 0; margin: 0; max-width: none; }
|
|
19
|
+
.sk-form .sk-line:nth-child(3) { width: 100%; height: 40px; }
|
|
20
|
+
.sk-form .sk-line:nth-child(4) { width: 48%; height: 32px; border-radius: 99px; }
|
|
21
|
+
.sk-boot { display: flex; height: 100dvh; background: var(--bg, #f6f6f8); }
|
|
22
|
+
.sk-boot-side { width: var(--sidebar-w, 248px); padding: 28px 20px; border-right: 1px solid var(--border, #ddd); }
|
|
23
|
+
.sk-boot-main { flex: 1; min-width: 0; }
|
|
24
|
+
.sk-boot-head { height: 64px; border-bottom: 1px solid var(--border, #ddd); }
|
|
25
|
+
.sk-boot-head .sk-line { width: 160px; }
|
|
26
|
+
.sk-boot .skeleton { margin: 0; max-width: 760px; opacity: 1; animation: none; }
|
|
27
|
+
.sk-boot .sk-line { height: 14px; background: var(--surface-2, #e8e8eb); }
|
|
28
|
+
.signin-card { position: relative; }
|
|
29
|
+
/* Reserve the real, translated form's size while the session is checked; hidden fields cannot be focused. */
|
|
30
|
+
.signin-card:has(#checking:not([hidden])) #form[hidden] { display: block !important; visibility: hidden; pointer-events: none; }
|
|
31
|
+
.sk-signin { position: absolute; inset: 72px 24px 28px; width: auto; padding: 0; margin: 0; max-width: none; }
|
|
32
|
+
.sk-signin > [aria-hidden] { gap: 18px; }
|
|
33
|
+
.sk-signin .sk-line:first-child { width: 70%; height: 26px; }
|
|
34
|
+
.sk-signin .sk-line:nth-child(3) { width: 100%; height: 48px; }
|
|
35
|
+
.sk-signin .sk-line:nth-child(4) { width: 100%; height: 42px; border-radius: 99px; }
|
|
36
|
+
@media (max-width: 899px) { .sk-boot-side { display: none; } }
|
|
37
|
+
@media (prefers-reduced-motion: reduce) { .skeleton { animation: none; opacity: 1; } }
|
package/dist/ui/shared/signin.js
CHANGED
|
@@ -27,21 +27,6 @@
|
|
|
27
27
|
hint_web: "On the AgEnD computer, run agend web --code to get a sign-in code.",
|
|
28
28
|
refused_web: "The code is invalid or no longer works. Run agend web --code on the AgEnD computer for a new one.",
|
|
29
29
|
resend_refused_web: "A new code could not be sent. Run agend web --code on the AgEnD computer for one.",
|
|
30
|
-
// #3008: through the link "Allow connections from outside" opened — the authenticator app's code (the leader's wording).
|
|
31
|
-
label_outside: "Authenticator code", lead_outside: "Open your authenticator app and enter the 6-digit code for AgEnD.",
|
|
32
|
-
hint_outside: "Lost your phone? On the AgEnD computer, choose \u201cSet up again\u201d.",
|
|
33
|
-
refused_outside: "That code didn't work. Check that your phone's clock is right and try the newest code.",
|
|
34
|
-
paused_outside: "Too many wrong codes. Try again in {duration}.",
|
|
35
|
-
minutes: "{0} minutes", minute: "1 minute", hours: "{0} hours", hour: "1 hour",
|
|
36
|
-
// #3061: sign in with another device — an 8-character code shown here, approved on a device that is already signed in.
|
|
37
|
-
another: "Sign in with another device", dev_title: "Sign in with another device",
|
|
38
|
-
dev_lead: "On a device that is already signed in to AgEnD as the owner, open Settings → Access & security, choose Add device under Devices & sign-in, and enter this code.",
|
|
39
|
-
dev_waiting: "Waiting for approval… Expires in {time}.", dev_approved: "Approved — signing in…",
|
|
40
|
-
dev_expired: "This code has expired.", dev_denied: "This request was denied.", dev_new: "Get a new code", dev_back: "Back",
|
|
41
|
-
dev_busy: "Too many devices are waiting right now. Try again in a moment.", dev_limited: "Too many codes asked for. Try again in {duration}.",
|
|
42
|
-
dev_unavailable: "Signing in with another device isn't available here.", dev_failed: "Could not get a code. Check the connection and try again.",
|
|
43
|
-
dev_lost: "Could not reach AgEnD. Still trying…",
|
|
44
|
-
dev_qr: "Or scan this QR code with a device that is already signed in as the owner. It holds this page's address and the code above, nothing else.",
|
|
45
30
|
},
|
|
46
31
|
"zh-TW": {
|
|
47
32
|
checking: "正在確認登入狀態…", title: "登入 AgEnD", lead: "輸入登入碼。",
|
|
@@ -59,48 +44,16 @@
|
|
|
59
44
|
hint_web: "在 AgEnD 電腦上執行 agend web --code 取得登入碼。",
|
|
60
45
|
refused_web: "登入碼無效或已失效。請在 AgEnD 電腦上執行 agend web --code 取得新碼。",
|
|
61
46
|
resend_refused_web: "無法傳送新的登入碼。請在 AgEnD 電腦上執行 agend web --code 取得。",
|
|
62
|
-
label_outside: "驗證器代碼", lead_outside: "打開驗證器 App,輸入 AgEnD 的 6 位數代碼。",
|
|
63
|
-
hint_outside: "手機遺失?請在 AgEnD 電腦上選「重新設定」。",
|
|
64
|
-
refused_outside: "代碼不對。請確認手機時間正確,並輸入最新的代碼。",
|
|
65
|
-
paused_outside: "錯誤次數太多,請 {duration} 後再試。",
|
|
66
|
-
minutes: "{0} 分鐘", minute: "1 分鐘", hours: "{0} 小時", hour: "1 小時",
|
|
67
|
-
another: "使用其他裝置登入", dev_title: "使用其他裝置登入",
|
|
68
|
-
dev_lead: "在已登入且已驗證擁有者的裝置上,開啟「設定 → 存取與安全」,在「裝置與登入」選「新增裝置」,輸入這組代碼。",
|
|
69
|
-
dev_waiting: "等待核准中… {time} 後失效。", dev_approved: "已核准,登入中…",
|
|
70
|
-
dev_expired: "這組代碼已失效。", dev_denied: "這個請求已被拒絕。", dev_new: "取得新代碼", dev_back: "返回",
|
|
71
|
-
dev_busy: "目前等待核准的裝置太多,請稍後再試。", dev_limited: "要求代碼的次數太多,請 {duration} 後再試。",
|
|
72
|
-
dev_unavailable: "這裡無法使用其他裝置登入。", dev_failed: "無法取得代碼。請檢查連線後再試。",
|
|
73
|
-
dev_lost: "連不上 AgEnD,仍在重試…",
|
|
74
|
-
dev_qr: "也可以用已登入且已驗證擁有者的裝置掃描這個 QR Code。裡面只有這個頁面的網址和上面的代碼,沒有其他東西。",
|
|
75
47
|
},
|
|
76
48
|
};
|
|
77
49
|
const lang = /^zh/i.test(navigator.language || "") ? "zh-TW" : "en";
|
|
78
50
|
// #2910 D5: the server marks a web-only fleet's page (<body data-web-only="1">): its own words where it has them.
|
|
79
51
|
const webOnly = !!document.body && document.body.getAttribute("data-web-only") === "1";
|
|
80
|
-
|
|
81
|
-
// is the authenticator app's code, posted to /auth/totp.
|
|
82
|
-
const outside = webOnly && document.body.getAttribute("data-outside") === "1";
|
|
83
|
-
// #3061: …and one on this computer's own listener (<body data-device-login="1">, never the public link) offers "Sign in
|
|
84
|
-
// with another device".
|
|
85
|
-
const deviceLogin = webOnly && !outside && document.body.getAttribute("data-device-login") === "1";
|
|
86
|
-
// #3061 (P2b): …and, when `web.login_qr` is on (<body data-login-qr="1">), it also draws the QR code of the approve link.
|
|
87
|
-
const loginQr = deviceLogin && document.body.getAttribute("data-login-qr") === "1";
|
|
88
|
-
const t = (k) => (outside && (T[lang][`${k}_outside`] || T.en[`${k}_outside`])) || (webOnly && (T[lang][`${k}_web`] || T.en[`${k}_web`])) || T[lang][k] || T.en[k] || k;
|
|
89
|
-
/** A wait as words: "15 minutes" / 「15 分鐘」, "2 hours" / 「2 小時」 (rounded up). */
|
|
90
|
-
const duration = (ms) => {
|
|
91
|
-
const minutes = Math.max(1, Math.ceil(ms / 60000));
|
|
92
|
-
if (minutes < 60) return minutes === 1 ? t("minute") : t("minutes").replace("{0}", String(minutes));
|
|
93
|
-
const hours = Math.ceil(minutes / 60);
|
|
94
|
-
return hours === 1 ? t("hour") : t("hours").replace("{0}", String(hours));
|
|
95
|
-
};
|
|
52
|
+
const t = (k) => (webOnly && (T[lang][`${k}_web`] || T.en[`${k}_web`])) || T[lang][k] || T.en[k] || k;
|
|
96
53
|
// …and no "No chat bot?" help: the hint above already is it.
|
|
97
54
|
if (webOnly) document.querySelectorAll("details.help").forEach((d) => { if (d.querySelector && d.querySelector('[data-i18n="nobot"]')) d.hidden = true; });
|
|
98
55
|
document.documentElement.lang = lang === "zh-TW" ? "zh-Hant" : "en";
|
|
99
|
-
|
|
100
|
-
const input = $("code");
|
|
101
|
-
input.setAttribute("inputmode", "numeric"); input.setAttribute("maxlength", "7"); input.setAttribute("placeholder", "123456");
|
|
102
|
-
input.setAttribute("pattern", "[0-9 ]*");
|
|
103
|
-
}
|
|
56
|
+
$("checking").setAttribute?.("aria-label", t("checking"));
|
|
104
57
|
|
|
105
58
|
// An old dashboard link carries `?token=`. It is not a credential any more (the server ignored it and
|
|
106
59
|
// answered with this page), but it is still the fleet's token: take it out of the address bar and
|
|
@@ -171,13 +124,10 @@
|
|
|
171
124
|
} catch { /* private mode */ }
|
|
172
125
|
$("code").focus();
|
|
173
126
|
offerResend();
|
|
174
|
-
if (deviceLogin) $("another").hidden = false;
|
|
175
127
|
}
|
|
176
128
|
|
|
177
|
-
// Only a returning device gets the button; the answer is a boolean and asking has no side effect.
|
|
178
|
-
// (#3008): the code there is the app's, nothing is sent.
|
|
129
|
+
// Only a returning device gets the button; the answer is a boolean and asking has no side effect.
|
|
179
130
|
async function offerResend() {
|
|
180
|
-
if (outside) return;
|
|
181
131
|
try {
|
|
182
132
|
const r = await fetch("/auth/device", { credentials: "same-origin", cache: "no-store" });
|
|
183
133
|
if (r.ok && (await r.json()).returning === true) $("resend").hidden = false;
|
|
@@ -203,155 +153,6 @@
|
|
|
203
153
|
button.disabled = false;
|
|
204
154
|
});
|
|
205
155
|
|
|
206
|
-
// ── #3061: sign in with another device ──
|
|
207
|
-
// POST /auth/device-login → the code to show (and an HttpOnly cookie that is this browser's request); then POST
|
|
208
|
-
// /auth/device-login/poll every couple of seconds until a signed-in owner has approved it (the poll that finds it
|
|
209
|
-
// approved is what signs this browser in, so nothing is handed over by the approving device), denied it, or it ran out.
|
|
210
|
-
// Never a GET: asking and polling both change state, and a preview must not.
|
|
211
|
-
const DEV_POLL_MS = 2000;
|
|
212
|
-
let dev = null;
|
|
213
|
-
// One call at a time, in the order they were asked for. Every one of the three answers may carry a Set-Cookie for the
|
|
214
|
-
// request's cookie (asking sets it, cancelling and a poll that finds it spent clear it), and the browser applies a cookie when
|
|
215
|
-
// the answer ARRIVES, not when this page chose to ask. So a stale call's late answer would replace or expire the cookie of the
|
|
216
|
-
// attempt that came after it (Back, then a new attempt, while the first attempt's create or cancel was still on the wire):
|
|
217
|
-
// the new attempt would poll with the wrong request, or none, and read "expired" after its owner had approved it. Each call
|
|
218
|
-
// therefore starts only when the one before it has finished: answered, or given up on after DEV_CALL_MS by aborting it. A response
|
|
219
|
-
// that has not arrived when its call is aborted is dropped by the browser, its Set-Cookie never processed; one whose headers had
|
|
220
|
-
// already arrived has applied its cookie before the next call is sent. Either way a call carries, and leaves behind, what the last
|
|
221
|
-
// one left. (An aborted request may still have been handled by the server; at worst that leaves an unused request that expires on
|
|
222
|
-
// its own.) `mine`: the attempt a create or poll belongs to; one that was stopped before its turn comes is not sent at all.
|
|
223
|
-
const DEV_CALL_MS = 15000;
|
|
224
|
-
let devTurn = Promise.resolve();
|
|
225
|
-
function devCall(path, mine) {
|
|
226
|
-
const run = async () => {
|
|
227
|
-
if (mine && mine.stopped) return null;
|
|
228
|
-
const ctl = typeof AbortController === "function" ? new AbortController() : null;
|
|
229
|
-
const timer = ctl ? setTimeout(() => ctl.abort(), DEV_CALL_MS) : 0;
|
|
230
|
-
try {
|
|
231
|
-
const r = await fetch(`/auth/device-login${path}`, { method: "POST", credentials: "same-origin", cache: "no-store", headers: { "Content-Type": "application/json" }, body: "{}", ...(ctl ? { signal: ctl.signal } : {}) });
|
|
232
|
-
let body = null;
|
|
233
|
-
try { body = await r.json(); } catch { /* no body, or not JSON */ }
|
|
234
|
-
return { r, body };
|
|
235
|
-
} finally { clearTimeout(timer); }
|
|
236
|
-
};
|
|
237
|
-
const call = devTurn.then(run);
|
|
238
|
-
devTurn = call.then(() => undefined, () => undefined);
|
|
239
|
-
return call;
|
|
240
|
-
}
|
|
241
|
-
const clock = (ms) => { const s = Math.max(0, Math.ceil(ms / 1000)); return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; };
|
|
242
|
-
function devStop() {
|
|
243
|
-
hideQr();
|
|
244
|
-
if (!dev) return;
|
|
245
|
-
dev.stopped = true;
|
|
246
|
-
clearTimeout(dev.poll); clearInterval(dev.tick);
|
|
247
|
-
dev = null;
|
|
248
|
-
}
|
|
249
|
-
function devSay(text, bad, spent) {
|
|
250
|
-
$("devStatus").textContent = text;
|
|
251
|
-
$("devStatus").classList?.[bad ? "add" : "remove"]("bad");
|
|
252
|
-
$("devCode").classList?.[spent ? "add" : "remove"]("spent");
|
|
253
|
-
}
|
|
254
|
-
function devEnded(text, bad) {
|
|
255
|
-
devStop();
|
|
256
|
-
devSay(text, bad, true);
|
|
257
|
-
$("devNew").hidden = false;
|
|
258
|
-
hideQr();
|
|
259
|
-
}
|
|
260
|
-
// ── #3061 (P2b): the approve link as a QR code ──
|
|
261
|
-
// The link is THIS page's own address plus the code on screen — /settings/access?approve=XXXX-XXXX — and nothing else: no
|
|
262
|
-
// request id, no cookie, no token (the request's poll cookie is HttpOnly and never leaves this browser). A device that
|
|
263
|
-
// opens it has to be signed in as the verified owner to do anything with it, and what it opens is the same "Add device"
|
|
264
|
-
// dialog with the code filled in: the person still presses Continue, sees who is asking, and presses Allow. A sign-in page
|
|
265
|
-
// reached as localhost cannot be opened from another device, so no code is drawn there.
|
|
266
|
-
const reachableFromElsewhere = () => !/^(localhost|.*\.localhost|127(\.\d{1,3}){3}|\[?::1\]?)$/i.test(location.hostname);
|
|
267
|
-
function hideQr() { if (!loginQr) return; $("devQr").hidden = true; $("devQrSvg").replaceChildren(); }
|
|
268
|
-
async function showQr(code, mine) {
|
|
269
|
-
if (!loginQr || !reachableFromElsewhere()) return;
|
|
270
|
-
let make;
|
|
271
|
-
try { const m = await import("/assets/qrcode.module.js"); make = m.default || m.qrcode; } catch { return; }
|
|
272
|
-
if (dev !== mine || mine.stopped) return; // this request ended, or a newer one began, while the encoder loaded
|
|
273
|
-
const qr = make(0, "M");
|
|
274
|
-
qr.addData(`${location.origin}/settings/access?approve=${encodeURIComponent(code)}`);
|
|
275
|
-
qr.make();
|
|
276
|
-
const n = qr.getModuleCount(), size = n + 8;
|
|
277
|
-
let d = "";
|
|
278
|
-
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`;
|
|
279
|
-
const NS = "http://www.w3.org/2000/svg", svg = $("devQrSvg");
|
|
280
|
-
svg.setAttribute("viewBox", `0 0 ${size} ${size}`);
|
|
281
|
-
const back = document.createElementNS(NS, "rect"), dark = document.createElementNS(NS, "path");
|
|
282
|
-
back.setAttribute("width", String(size)); back.setAttribute("height", String(size)); back.setAttribute("fill", "#fff");
|
|
283
|
-
dark.setAttribute("d", d); dark.setAttribute("fill", "#000");
|
|
284
|
-
svg.replaceChildren(back, dark);
|
|
285
|
-
$("devQr").hidden = false;
|
|
286
|
-
}
|
|
287
|
-
async function devStart() {
|
|
288
|
-
devStop();
|
|
289
|
-
$("form").hidden = true; $("device").hidden = false; $("devNew").hidden = true;
|
|
290
|
-
hideQr();
|
|
291
|
-
$("devCode").textContent = "XXXX-XXXX";
|
|
292
|
-
devSay("", false, true);
|
|
293
|
-
const mine = { stopped: false, poll: 0, tick: 0, deadline: 0, lost: 0 };
|
|
294
|
-
dev = mine;
|
|
295
|
-
let made;
|
|
296
|
-
try { made = await devCall("", mine); } catch { if (!mine.stopped) devEnded(t("dev_failed"), true); return; }
|
|
297
|
-
if (mine.stopped || !made) return;
|
|
298
|
-
const { r, body } = made;
|
|
299
|
-
if (!r.ok || !body || typeof body.code !== "string") {
|
|
300
|
-
if (r.status === 429) {
|
|
301
|
-
let wait = Number(r.headers.get("Retry-After")) * 1000;
|
|
302
|
-
if (Number.isFinite(body && body.retryAfterMs)) wait = body.retryAfterMs;
|
|
303
|
-
devEnded(t("dev_limited").replace("{duration}", duration(Number.isFinite(wait) && wait > 0 ? wait : 60000)), true);
|
|
304
|
-
} else devEnded(r.status === 503 ? t("dev_busy") : r.status === 404 ? t("dev_unavailable") : t("dev_failed"), true);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
$("devCode").textContent = body.code;
|
|
308
|
-
$("devCode").classList?.remove("spent");
|
|
309
|
-
showQr(body.code, mine);
|
|
310
|
-
// The countdown runs on this browser's own clock from when the code arrived (the server's is the authority: its poll
|
|
311
|
-
// says `expired` when it is).
|
|
312
|
-
mine.deadline = Date.now() + (Number.isFinite(body.ttlMs) && body.ttlMs > 0 ? body.ttlMs : 300000);
|
|
313
|
-
const waiting = () => devSay(t("dev_waiting").replace("{time}", clock(mine.deadline - Date.now())), false, false);
|
|
314
|
-
waiting();
|
|
315
|
-
mine.tick = setInterval(() => { if (!mine.stopped && !mine.approved) waiting(); }, 1000);
|
|
316
|
-
const again = () => { if (!mine.stopped) mine.poll = setTimeout(ask, DEV_POLL_MS); };
|
|
317
|
-
const ask = async () => {
|
|
318
|
-
let asked = null;
|
|
319
|
-
try { asked = await devCall("/poll", mine); } catch { /* below */ }
|
|
320
|
-
if (mine.stopped) return;
|
|
321
|
-
const p = asked && asked.r, state = asked && asked.body && asked.body.state;
|
|
322
|
-
if (state === "approved" && p && p.ok) {
|
|
323
|
-
mine.approved = true;
|
|
324
|
-
devSay(t("dev_approved"), false, false);
|
|
325
|
-
clearBounce(); location.replace(nextTarget());
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
if (p && p.status === 404) { devEnded(t("dev_unavailable"), true); return; } // closed while waiting (e.g. web authorization turned off)
|
|
329
|
-
if (state === "denied") { devEnded(t("dev_denied"), true); return; }
|
|
330
|
-
if (state === "expired") { devEnded(t("dev_expired"), true); return; }
|
|
331
|
-
if (state === "pending") { mine.lost = 0; again(); return; }
|
|
332
|
-
// The network, or an answer that is none of these: keep trying — the server ends the request when it is time —
|
|
333
|
-
// but say so after a few, and stop waiting once the code's own time is well past.
|
|
334
|
-
if (Date.now() > mine.deadline + 15000) { devEnded(t("dev_expired"), true); return; }
|
|
335
|
-
if (++mine.lost >= 3) devSay(t("dev_lost"), true, false);
|
|
336
|
-
again();
|
|
337
|
-
};
|
|
338
|
-
again();
|
|
339
|
-
}
|
|
340
|
-
async function devBack() {
|
|
341
|
-
const mine = dev;
|
|
342
|
-
devStop();
|
|
343
|
-
$("device").hidden = true; $("form").hidden = false;
|
|
344
|
-
$("code").focus();
|
|
345
|
-
// Queued behind a create or poll of this attempt that is still on the wire (it needs the cookie that call sets), and ahead of
|
|
346
|
-
// whatever the person asks for next: a new attempt never starts while this one's cancel is still out.
|
|
347
|
-
if (mine && !mine.approved) { try { await devCall("/cancel"); } catch { /* it expires by itself */ } }
|
|
348
|
-
}
|
|
349
|
-
if (deviceLogin) {
|
|
350
|
-
$("another").addEventListener("click", () => { devStart(); });
|
|
351
|
-
$("devNew").addEventListener("click", () => { devStart(); });
|
|
352
|
-
$("devBack").addEventListener("click", () => { devBack(); });
|
|
353
|
-
}
|
|
354
|
-
|
|
355
156
|
async function probe() {
|
|
356
157
|
// A second bounce inside ten seconds means the cookie is valid but not being sent on the
|
|
357
158
|
// navigation; going round again would loop, so stop and let the person type a code.
|
|
@@ -373,24 +174,18 @@
|
|
|
373
174
|
button.disabled = true;
|
|
374
175
|
button.textContent = t("working");
|
|
375
176
|
try {
|
|
376
|
-
const r = await fetch(
|
|
177
|
+
const r = await fetch("/auth/login", {
|
|
377
178
|
method: "POST",
|
|
378
179
|
credentials: "same-origin",
|
|
379
180
|
headers: { "Content-Type": "application/json" },
|
|
380
181
|
body: JSON.stringify({ code: $("code").value }),
|
|
381
182
|
});
|
|
382
183
|
if (r.ok) { clearBounce(); location.replace(nextTarget()); return; }
|
|
383
|
-
if (outside && r.status === 429) {
|
|
384
|
-
let wait = Number(r.headers.get("Retry-After")) * 1000;
|
|
385
|
-
try { const body = await r.json(); if (Number.isFinite(body && body.retryAfterMs)) wait = body.retryAfterMs; } catch { /* the header's */ }
|
|
386
|
-
msg.textContent = t("paused").replace("{duration}", duration(Number.isFinite(wait) && wait > 0 ? wait : 60000));
|
|
387
|
-
throw "shown";
|
|
388
|
-
}
|
|
389
184
|
// #1854: a 5xx is the server failing to confirm the sign-in (503: a public link's notice did not go out), not a
|
|
390
185
|
// wrong code — say so. The code is spent either way: the way on is a new one.
|
|
391
186
|
msg.textContent = r.status === 429 ? t("paused") : r.status >= 500 ? t("unconfirmed") : t("refused");
|
|
392
|
-
} catch
|
|
393
|
-
|
|
187
|
+
} catch {
|
|
188
|
+
msg.textContent = t("network");
|
|
394
189
|
}
|
|
395
190
|
button.disabled = false;
|
|
396
191
|
button.textContent = t("submit");
|
|
@@ -46,7 +46,6 @@
|
|
|
46
46
|
|
|
47
47
|
/* ── Layout ── */
|
|
48
48
|
--col: 768px; /* the conversation column */
|
|
49
|
-
--settings-width: 1200px; /* settings workspace, including its horizontal padding */
|
|
50
49
|
--sidebar-w: 260px;
|
|
51
50
|
--header-h: 52px;
|
|
52
51
|
--tap: 44px; /* the smallest touch target on a phone */
|
|
@@ -10,7 +10,7 @@ import { t } from "./app-i18n.js";
|
|
|
10
10
|
* <${Dialog} title="Create task" onClose=${…} actions=${html`…`}>…body…</${Dialog}>
|
|
11
11
|
* Rendered = open; the parent unmounts it to close. `busy` keeps Esc and the backdrop from closing it mid-request.
|
|
12
12
|
*/
|
|
13
|
-
export function Dialog({ title, onClose, actions, children, busy = false, wide = false, drawer = false, label, tools = null
|
|
13
|
+
export function Dialog({ title, onClose, actions, children, busy = false, wide = false, drawer = false, label, tools = null }) {
|
|
14
14
|
const ref = useRef(null);
|
|
15
15
|
const opener = useRef(null);
|
|
16
16
|
const busyRef = useRef(busy);
|
|
@@ -41,7 +41,7 @@ export function Dialog({ title, onClose, actions, children, busy = false, wide =
|
|
|
41
41
|
d.addEventListener("click", onClick);
|
|
42
42
|
return () => { d.removeEventListener("cancel", onCancel); d.removeEventListener("click", onClick); };
|
|
43
43
|
}, [onClose]);
|
|
44
|
-
return html`<dialog data-trust="dialog" ref=${ref} class=${`dlg${wide ? " dlg-wide" : ""}${drawer ? " dlg-drawer" : ""}
|
|
44
|
+
return html`<dialog data-trust="dialog" ref=${ref} class=${`dlg${wide ? " dlg-wide" : ""}${drawer ? " dlg-drawer" : ""}`} aria-label=${label || title}>
|
|
45
45
|
<div class="dlg-box" tabindex="-1">
|
|
46
46
|
<div class="dlg-head"><h2 class="dlg-title">${title}</h2>${tools ? html`<span class="dlg-tools">${tools}</span>` : null}
|
|
47
47
|
<button type="button" class="icon-btn dlg-x" aria-label=${t("app.close")} title=${t("app.close")} onClick=${() => { if (!busyRef.current) onClose(); }}><${Icon} name="close" /></button></div>
|