@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/hub-client.js
DELETED
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
// AgEnD Hub P1, slice 3 (fleet decision 7e5b8a8f; docs/design/hub.md; docs/design/hub-ui-client.md): the one seam
|
|
2
|
-
// between the Hub's web UI and its data. Every Hub page and card (the Hub shell's panels, the member's switcher and
|
|
3
|
-
// "Connect to a Hub") reads and writes through this client — nothing else. Its objects are UI PROJECTIONS
|
|
4
|
-
// (HubPairingView, HubExposureView), never the signed protocol/model records of hub.md.
|
|
5
|
-
//
|
|
6
|
-
// Until slice 1 lands it is a STUB held in this page's memory, shaped as the real answers will be. Re-pointing it at the
|
|
7
|
-
// authenticated member/Hub APIs replaces `createStubClient` (and drops its `control`); the pages do not change. The
|
|
8
|
-
// browser never holds the machine credential or sees wire frames: the real client reads local projections only.
|
|
9
|
-
//
|
|
10
|
-
// Off is the default: the server marks the page (data-hub) only when a switch is on, and nothing here is ever loaded
|
|
11
|
-
// otherwise (app-shell.js and panel-settings.js import the Hub modules only when the mark is present).
|
|
12
|
-
import { appStore } from "/assets/app-store.js";
|
|
13
|
-
|
|
14
|
-
/** The page's Hub marks (presentation only — a mark confers no authority): { hub, member }. */
|
|
15
|
-
export function hubMarks(doc = typeof document !== "undefined" ? document : null) {
|
|
16
|
-
const tokens = String((doc && doc.body && doc.body.dataset && doc.body.dataset.hub) || "").split(/\s+/);
|
|
17
|
-
return { hub: tokens.includes("hub"), member: tokens.includes("member") };
|
|
18
|
-
}
|
|
19
|
-
/** The Hub's operator-chosen name (Hub shell only), from the server's mark; "" when none. */
|
|
20
|
-
export function hubName(doc = typeof document !== "undefined" ? document : null) {
|
|
21
|
-
const v = doc && doc.body && doc.body.dataset ? doc.body.dataset.hubName : "";
|
|
22
|
-
return typeof v === "string" ? v.trim().slice(0, 60) : "";
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* A fingerprint as the page shows it: `digest` is the full SHA-256 (64 hex); people compare at least its first 128 bits
|
|
27
|
-
* (32 hex, 8 groups of 4) and can open the whole. `kind` says what it binds — never compare one kind with another:
|
|
28
|
-
* - "pairing": the whole pairing transcript of this attempt (hub.md §2 step 4), shown while it is pending;
|
|
29
|
-
* - "hub-key": the Hub identity/key this fleet approved (paired), or the one the Hub now offers (key_changed).
|
|
30
|
-
* @typedef {{ kind: "pairing" | "hub-key", digest: string }} HubFingerprintView
|
|
31
|
-
*/
|
|
32
|
-
/**
|
|
33
|
-
* Pairing, as the member's page sees it (a projection of S1's local status):
|
|
34
|
-
* - { state: "unpaired" }
|
|
35
|
-
* - { state: "pending", memberOrigin, fingerprint (pairing), expiresAt, localConfirmed, ownerConfirmed, adminApproved }
|
|
36
|
-
* localConfirmed: this fleet's owner compared and confirmed the fingerprint here (confirmFingerprint);
|
|
37
|
-
* both Hub confirmations are needed: the owner's from a current Hub directory session, the Hub administrator's
|
|
38
|
-
* approval of this exact fingerprint — possession of the code proves neither. On a member they are null (unknown:
|
|
39
|
-
* S1 keeps neither; never derived from the local approval or a claim answer); true/false only from a trusted Hub
|
|
40
|
-
* status projection
|
|
41
|
-
* - { state: "paired", hub: { hubId, name, memberOrigin, webOrigin, fingerprint (hub-key) }, link: "online" | "offline" }
|
|
42
|
-
* memberOrigin: the pinned transport origin; webOrigin: the separately approved browser origin (they may differ)
|
|
43
|
-
* - { state: "key_changed", hub: {…approved, fingerprint (hub-key)}, offered (hub-key) }
|
|
44
|
-
* nothing connects; the offered value is never accepted automatically — re-pair or disconnect
|
|
45
|
-
* - { state: "held", hold, memberOrigin? }
|
|
46
|
-
* a safety hold, visible: hold ∈ "unknown_outcome" | "expired" | "unsaved" | "refused" | "revoked" | "disconnected"
|
|
47
|
-
* — never shown as paired, never as a successful unpair ("unavailable": an older host, shown as one line, not a hold)
|
|
48
|
-
* @typedef {object} HubPairingView
|
|
49
|
-
*/
|
|
50
|
-
/**
|
|
51
|
-
* One of THIS fleet's agents (the local owner's own inventory — never the Hub's), as the exposure list shows it.
|
|
52
|
-
* `agent` is the stable local agent name, never its label. `state` is the local consent; `revision` the exposure policy
|
|
53
|
-
* revision the page shows (enabling refers to it: a stale tab gets "conflict", never a silent widening). `policy`
|
|
54
|
-
* summarises what is shared: P1 shares the agent itself (`{ dataView: "agent", tools: [] }`,
|
|
55
|
-
* docs/design/hub-representative-agent.md). `enforceable` false is never publishable; `reason: "republish_required"`
|
|
56
|
-
* marks a mapping from the older restricted mode that answers nothing until the owner shares the agent again.
|
|
57
|
-
* @typedef {{ agent: string, display: string, exposureId: string | null, revision: number,
|
|
58
|
-
* state: "published" | "withdrawn" | "frozen", policy: { dataView: string, tools: string[] } | null,
|
|
59
|
-
* enforceable: boolean, reason?: string }} HubExposureView
|
|
60
|
-
*/
|
|
61
|
-
/**
|
|
62
|
-
* Results (docs/design/hub-ui-client.md "Results"). A withdrawal or disconnect fences locally at once (even offline) but
|
|
63
|
-
* answers ok only once the local restrictive state is saved; `remote` is "pending" in P1 (S1 has no acknowledgement or
|
|
64
|
-
* remote revoke), shown as a warning — "confirmed" is reserved.
|
|
65
|
-
* @typedef {{ ok: true, pairing: HubPairingView } | { ok: false, error: "address" | "code" | "busy" | "unreachable" | "refused" }} HubConnectResult
|
|
66
|
-
* @typedef {{ ok: true, view: HubExposureView } | { ok: true, pending: { expiresAt: number }, view: HubExposureView, settled: Promise<unknown> }
|
|
67
|
-
* | { ok: false, error: "not_paired" | "unknown_agent" | "unknown_view" | "not_enforceable" | "limit" | "conflict" | "unsaved" | "unavailable" }} HubPublishResult
|
|
68
|
-
* @typedef {{ ok: true, remote: "confirmed" | "pending" } | { ok: false, error: "unsaved" | "conflict" | "unavailable" }} HubWithdrawResult
|
|
69
|
-
*/
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* The client every Hub page uses (one per page): on a Hub's own workspace the Hub's /hub/v1/* API at this page's own
|
|
73
|
-
* origin, with the Hub's session; on a member fleet's Settings card this fleet's /api/hub/member/*; in tests the stub.
|
|
74
|
-
*/
|
|
75
|
-
let client = null;
|
|
76
|
-
/**
|
|
77
|
-
* The Settings confirmation (settings-confirm.js), loaded only when a member fleet's card first needs it — never
|
|
78
|
-
* statically: a Hub's own listener serves only the Hub's three modules (src/hub/http/compose.ts HUB_UI_MODULES), so a
|
|
79
|
-
* static import of a fleet Settings module left the Hub workspace unable to load at all.
|
|
80
|
-
*/
|
|
81
|
-
let confirmModule = null, confirmLoaded = null;
|
|
82
|
-
const loadConfirm = () => (confirmModule ??= import("./settings-confirm.js").then((m) => { confirmLoaded = m; return m; }, (e) => { confirmModule = null; throw e; }));
|
|
83
|
-
const lazyConfirm = {
|
|
84
|
-
async api(path, opts) { return (await loadConfirm()).api(path, opts); },
|
|
85
|
-
// Called before the first request goes out: the same key settings-confirm.js would make.
|
|
86
|
-
newKey(prefix = "k") {
|
|
87
|
-
if (confirmLoaded) return confirmLoaded.newKey(prefix);
|
|
88
|
-
return typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
89
|
-
},
|
|
90
|
-
// Only ever asked of a response api() returned, so the module is loaded by then.
|
|
91
|
-
isPendingResponse(r) { return confirmLoaded ? confirmLoaded.isPendingResponse(r) : false; },
|
|
92
|
-
track(view, label) { return loadConfirm().then((m) => m.track(view, label)); },
|
|
93
|
-
};
|
|
94
|
-
export function hubClient() {
|
|
95
|
-
// S3c: a member fleet's card uses this fleet's own endpoints (createMemberClient); the Hub workspace its own; tests the stub.
|
|
96
|
-
return client ??= hubMarks().hub ? createHubWebClient() : hubMarks().member ? createMemberClient({ confirm: lazyConfirm })
|
|
97
|
-
: createStubClient({ agents: () => (appStore.get().instances || []).filter((i) => i && i.name) });
|
|
98
|
-
}
|
|
99
|
-
/** For tests and the switch-over to slice 1: put another client in place (null: the stub again, fresh). */
|
|
100
|
-
export function setHubClient(next) { client = next; }
|
|
101
|
-
|
|
102
|
-
/** UX checks only (the server parses and canonicalizes): an https:// origin, and a code of the shape people type. */
|
|
103
|
-
export const ADDRESS_HINT = /^https:\/\/[^\s/?#@]+\/?$/i;
|
|
104
|
-
export const CODE_HINT = /^[A-Za-z0-9][A-Za-z0-9 -]{4,62}[A-Za-z0-9]$/;
|
|
105
|
-
/** The part of a fingerprint people compare: its first 32 hex digits (128 bits) in 8 groups of 4. */
|
|
106
|
-
export function compareGroups(digest) { return String(digest || "").replace(/[^0-9a-f]/gi, "").toLowerCase().slice(0, 32).replace(/(.{4})(?=.)/g, "$1 "); }
|
|
107
|
-
/** An origin the switcher may open: the approved webOrigin of a paired Hub, https only, nothing after the host. */
|
|
108
|
-
export function safeWebOrigin(pairing) {
|
|
109
|
-
if (!pairing || pairing.state !== "paired" || !pairing.hub) return null;
|
|
110
|
-
try {
|
|
111
|
-
const u = new URL(String(pairing.hub.webOrigin || ""));
|
|
112
|
-
return u.protocol === "https:" && !u.username && !u.password ? u.origin : null;
|
|
113
|
-
} catch { return null; }
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* The stub: deterministic answers in this page's memory (no request leaves the page). Its fingerprints are placeholders
|
|
118
|
-
* — a real one binds the pairing transcript (S1) and is never derived from the address and code.
|
|
119
|
-
*/
|
|
120
|
-
export function createStubClient({ now = () => Date.now(), agents = () => [] } = {}) {
|
|
121
|
-
let pairing = { state: "unpaired" };
|
|
122
|
-
const consent = new Map(); // agent → { state, revision }
|
|
123
|
-
let enforceable = new Set();
|
|
124
|
-
const listeners = new Set();
|
|
125
|
-
const emit = () => { for (const fn of listeners) { try { fn(pairing); } catch { /* a listener's own failure */ } } };
|
|
126
|
-
let seq = 0;
|
|
127
|
-
const placeholder = () => { seq++; let s = ""; for (let i = 0; i < 64; i++) s += ((i * 7 + seq * 13) % 16).toString(16); return s; };
|
|
128
|
-
const view = (a) => {
|
|
129
|
-
const c = consent.get(a.name) || { state: "withdrawn", revision: 0 };
|
|
130
|
-
const ok = enforceable.has(a.name);
|
|
131
|
-
return { agent: a.name, display: a.display_name || a.name, exposureId: c.revision ? `stub-${a.name}` : null, revision: c.revision,
|
|
132
|
-
state: c.state, policy: ok && c.state === "published" ? { dataView: c.dataView || "agent", tools: c.tools ? [...c.tools] : [] } : null, enforceable: ok, ...(ok ? {} : { reason: "restricted_execution_pending" }),
|
|
133
|
-
// P1 representative agent: the one choice is the agent itself, with no Hub tools; no pending confirmation.
|
|
134
|
-
choices: ok ? { dataViews: [{ id: "agent", label: a.display_name || a.name }], tools: [] } : { dataViews: [], tools: [] },
|
|
135
|
-
pending: null };
|
|
136
|
-
};
|
|
137
|
-
const api = {
|
|
138
|
-
stub: true,
|
|
139
|
-
/** @returns {Promise<HubPairingView>} */
|
|
140
|
-
async pairing() { return pairing; },
|
|
141
|
-
/** @returns {Promise<HubConnectResult>} */
|
|
142
|
-
async connect({ address, code }) {
|
|
143
|
-
const a = String(address || "").trim(), c = String(code || "").trim();
|
|
144
|
-
if (!ADDRESS_HINT.test(a)) return { ok: false, error: "address" };
|
|
145
|
-
if (!CODE_HINT.test(c)) return { ok: false, error: "code" };
|
|
146
|
-
if (pairing.state === "pending" || pairing.state === "paired") return { ok: false, error: "busy" };
|
|
147
|
-
pairing = { state: "pending", memberOrigin: a.replace(/\/$/, ""), fingerprint: { kind: "pairing", digest: placeholder() },
|
|
148
|
-
expiresAt: now() + 10 * 60_000, ownerConfirmed: false, adminApproved: false };
|
|
149
|
-
emit();
|
|
150
|
-
return { ok: true, pairing };
|
|
151
|
-
},
|
|
152
|
-
/** Withdraw a pending request (or clear a hold). */
|
|
153
|
-
async cancel() { if (pairing.state === "pending" || pairing.state === "held") { pairing = { state: "unpaired" }; emit(); } return pairing; },
|
|
154
|
-
/** Leave the Hub: every exposure is withdrawn with it. @returns {Promise<HubWithdrawResult>} */
|
|
155
|
-
async disconnect() {
|
|
156
|
-
const online = pairing.state === "paired" && pairing.link === "online";
|
|
157
|
-
pairing = { state: "unpaired" };
|
|
158
|
-
for (const [k, c] of consent) consent.set(k, { state: "withdrawn", revision: c.revision + 1 });
|
|
159
|
-
emit();
|
|
160
|
-
return { ok: true, remote: online ? "confirmed" : "pending" };
|
|
161
|
-
},
|
|
162
|
-
/** @returns {Promise<HubExposureView[]>} */
|
|
163
|
-
async exposures() { return agents().map(view); },
|
|
164
|
-
/**
|
|
165
|
-
* Publish (on) or withdraw (off) one agent, against the revision the page showed.
|
|
166
|
-
* @returns {Promise<HubPublishResult | HubWithdrawResult>}
|
|
167
|
-
*/
|
|
168
|
-
async setExposed(agent, on, expectedRevision, choice = null) {
|
|
169
|
-
const a = agents().find((x) => x.name === agent);
|
|
170
|
-
if (!a) return { ok: false, error: "unknown_agent" };
|
|
171
|
-
const c = consent.get(agent) || { state: "withdrawn", revision: 0 };
|
|
172
|
-
if (expectedRevision !== c.revision) return { ok: false, error: "conflict" };
|
|
173
|
-
if (!on) {
|
|
174
|
-
consent.set(agent, { state: "withdrawn", revision: c.revision + 1 });
|
|
175
|
-
return { ok: true, remote: pairing.state === "paired" && pairing.link === "online" ? "confirmed" : "pending" };
|
|
176
|
-
}
|
|
177
|
-
if (pairing.state !== "paired") return { ok: false, error: "not_paired" };
|
|
178
|
-
if (!enforceable.has(agent)) return { ok: false, error: "not_enforceable" };
|
|
179
|
-
consent.set(agent, { state: "published", revision: c.revision + 1, dataView: choice && choice.dataViewId, tools: choice && choice.tools });
|
|
180
|
-
return { ok: true, view: view(a) };
|
|
181
|
-
},
|
|
182
|
-
/** Hear pairing changes (slice 1: the member's local status projections). @returns {() => void} */
|
|
183
|
-
subscribe(fn) { listeners.add(fn); return () => listeners.delete(fn); },
|
|
184
|
-
/** The stub's own controls (tests, smokes, a demo) — what the Hub, its administrator and the owner would do. */
|
|
185
|
-
control: {
|
|
186
|
-
ownerConfirmed() { if (pairing.state === "pending") { pairing = { ...pairing, ownerConfirmed: true }; emit(); } },
|
|
187
|
-
approve({ name = "Team Hub", webOrigin } = {}) {
|
|
188
|
-
if (pairing.state !== "pending") return;
|
|
189
|
-
pairing = { state: "paired", hub: { hubId: "00000000-0000-4000-8000-000000000001", name, memberOrigin: pairing.memberOrigin,
|
|
190
|
-
webOrigin: webOrigin || pairing.memberOrigin, fingerprint: { kind: "hub-key", digest: placeholder() } }, link: "online" };
|
|
191
|
-
emit();
|
|
192
|
-
},
|
|
193
|
-
link(state) { if (pairing.state === "paired") { pairing = { ...pairing, link: state }; emit(); } },
|
|
194
|
-
keyChanged() { if (pairing.state === "paired") { pairing = { state: "key_changed", hub: pairing.hub, offered: { kind: "hub-key", digest: placeholder() } }; emit(); } },
|
|
195
|
-
hold(hold) { pairing = { state: "held", hold, ...(pairing.memberOrigin || pairing.hub ? { memberOrigin: pairing.memberOrigin || pairing.hub.memberOrigin } : {}) }; emit(); },
|
|
196
|
-
enforceable(names) { enforceable = new Set(names); },
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
return api;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* AgEnD Hub P1, slice 3b: the Hub workspace's client — /hub/v1/* on this page's own origin (the Hub's), with its own
|
|
204
|
-
* session cookie (HttpOnly; this page never sees it) and the CSRF token /hub/v1/session gives a same-origin read.
|
|
205
|
-
* Every answer is { ok: true, ...body } or { ok: false, status, code }; a 401 also tells the page the session ended.
|
|
206
|
-
*/
|
|
207
|
-
export function createHubWebClient({ fetchImpl = (...a) => fetch(...a) } = {}) {
|
|
208
|
-
let csrf = null;
|
|
209
|
-
const ended = new Set();
|
|
210
|
-
async function call(method, path, body) {
|
|
211
|
-
const headers = { Accept: "application/json" };
|
|
212
|
-
if (body !== undefined) headers["Content-Type"] = "application/json";
|
|
213
|
-
if (method !== "GET" && csrf) headers["X-AgEnD-Hub-CSRF"] = csrf;
|
|
214
|
-
let r;
|
|
215
|
-
try { r = await fetchImpl(path, { method, headers, credentials: "same-origin", cache: "no-store", body: body === undefined ? undefined : JSON.stringify(body) }); }
|
|
216
|
-
catch { return { ok: false, status: 0, code: "unreachable" }; }
|
|
217
|
-
let json = null;
|
|
218
|
-
try { json = await r.json(); } catch { json = null; }
|
|
219
|
-
if (r.status === 401) { csrf = null; for (const fn of ended) { try { fn(); } catch { /* a listener's own failure */ } } }
|
|
220
|
-
if (!r.ok) return { ok: false, status: r.status, code: (json && typeof json.code === "string" && json.code) || "failed", retryAfter: Number(r.headers.get("Retry-After")) || 0 };
|
|
221
|
-
return { ok: true, ...(json && typeof json === "object" ? json : {}) };
|
|
222
|
-
}
|
|
223
|
-
const id = (v) => encodeURIComponent(String(v));
|
|
224
|
-
return {
|
|
225
|
-
stub: false, web: true,
|
|
226
|
-
/** Hear the session end (a 401 anywhere). @returns {() => void} */
|
|
227
|
-
onSignedOut(fn) { ended.add(fn); return () => ended.delete(fn); },
|
|
228
|
-
async session() { const r = await call("GET", "/hub/v1/session"); if (r.ok) csrf = r.signedIn ? r.csrf || null : null; return r; },
|
|
229
|
-
async signIn(login, password) { const r = await call("POST", "/hub/v1/session", { login, password }); if (r.ok) csrf = r.csrf || null; return r; },
|
|
230
|
-
async signOut() { const r = await call("DELETE", "/hub/v1/session"); csrf = null; return r; },
|
|
231
|
-
catalog() { return call("GET", "/hub/v1/exposures"); },
|
|
232
|
-
grant(input) { return call("POST", "/hub/v1/grants", input); },
|
|
233
|
-
revokeGrant(grantId, revision) { return call("DELETE", `/hub/v1/grants/${id(grantId)}?revision=${id(revision)}`); },
|
|
234
|
-
activity(exposureId) { return call("GET", `/hub/v1/exposures/${id(exposureId)}/activity`); },
|
|
235
|
-
freeze(exposureId, revision, admin = false) { return call("POST", `/hub/v1/${admin ? "admin/" : ""}exposures/${id(exposureId)}/freeze`, { revision }); },
|
|
236
|
-
quotaVisibility(exposureId, revision, visible) { return call("POST", `/hub/v1/exposures/${id(exposureId)}/quota`, { revision, visible }); },
|
|
237
|
-
rooms() { return call("GET", "/hub/v1/rooms"); },
|
|
238
|
-
openRoom(exposureId, grantId) { return call("POST", "/hub/v1/rooms", { exposureId, grantId }); },
|
|
239
|
-
ask(roomId, idempotencyKey, text) { return call("POST", `/hub/v1/rooms/${id(roomId)}/messages`, { idempotencyKey, text }); },
|
|
240
|
-
read(roomId, after = 0) { return call("GET", `/hub/v1/rooms/${id(roomId)}/messages?after=${id(after)}`); },
|
|
241
|
-
chooseButtons(roomId, input) { return call("POST", `/hub/v1/rooms/${id(roomId)}/buttons`, input); },
|
|
242
|
-
pairings() { return call("GET", "/hub/v1/pairings"); },
|
|
243
|
-
confirmPairing(pairingId, fingerprint) { return call("POST", `/hub/v1/pairings/${id(pairingId)}/confirm`, { fingerprint }); },
|
|
244
|
-
adminOverview() { return call("GET", "/hub/v1/admin/overview"); },
|
|
245
|
-
createPairing(login) { return call("POST", "/hub/v1/admin/pairings", { login }); },
|
|
246
|
-
approvePairing(pairingId, fingerprint) { return call("POST", `/hub/v1/admin/pairings/${id(pairingId)}/approve`, { fingerprint }); },
|
|
247
|
-
revokeFleet(fleetId) { return call("POST", `/hub/v1/admin/fleets/${id(fleetId)}/revoke`); },
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* S3c (S-55): the member fleet's client — this fleet's own endpoints (/api/hub/member/*, local admin only, never the
|
|
253
|
-
* public link). Exposures: the list; publish/revise through the Settings confirmation (a 202 is "waiting for your
|
|
254
|
-
* confirmation": `pending` and `settled`, a promise of the decision); withdraw at once (ok once saved; remote
|
|
255
|
-
* "pending": the Hub learns it with the next snapshot). An older host (404): { ok: false, error: "unavailable" }.
|
|
256
|
-
* `confirm` is settings-confirm.js (loaded with the card): { api, isPendingResponse, track, newKey }.
|
|
257
|
-
*/
|
|
258
|
-
export function createMemberClient({ confirm, pollMs = 5000, doc = typeof document !== "undefined" ? document : null, timers = globalThis }) {
|
|
259
|
-
const listed = async () => {
|
|
260
|
-
const r = await confirm.api("/api/hub/member/exposures");
|
|
261
|
-
return r.ok && r.body && Array.isArray(r.body.exposures) ? r.body.exposures : r.status === 404 ? null : [];
|
|
262
|
-
};
|
|
263
|
-
const fail = (r) => ({ ok: false, error: r.status === 404 ? "unavailable" : (r.body && typeof r.body.error === "string" ? r.body.error : "unsaved") });
|
|
264
|
-
// Pairing (S3c PR B): GET the projection; connect / confirm / disconnect go through the Settings confirmation (a 202:
|
|
265
|
-
// "sent for confirmation", followed in the background; the poll shows the result); cancel at once.
|
|
266
|
-
const pairingNow = async () => {
|
|
267
|
-
const r = await confirm.api("/api/hub/member/pairing");
|
|
268
|
-
if (r.ok && r.body && r.body.pairing) return r.body.pairing;
|
|
269
|
-
return { state: "held", hold: r.status === 404 ? "unavailable" : "unsaved" };
|
|
270
|
-
};
|
|
271
|
-
const step = async (name, body) => {
|
|
272
|
-
const r = await confirm.api(`/api/hub/member/pairing/${name}`, { method: "POST", headers: { "Idempotency-Key": confirm.newKey("hub") }, body: JSON.stringify(body || {}) });
|
|
273
|
-
if (confirm.isPendingResponse(r)) { void Promise.resolve(confirm.track(r.body.pending_change, "hub")).catch(() => {}); return { ok: true, pendingConfirmation: true, pairing: await pairingNow() }; }
|
|
274
|
-
if (r.status === 404) return { ok: false, error: "unavailable" };
|
|
275
|
-
return r.body && typeof r.body === "object" ? r.body : { ok: false, error: "unsaved" };
|
|
276
|
-
};
|
|
277
|
-
const listeners = new Set();
|
|
278
|
-
let timer = null, inFlight = false;
|
|
279
|
-
const tick = async () => {
|
|
280
|
-
timer = null;
|
|
281
|
-
if (!listeners.size) return;
|
|
282
|
-
if (!(doc && doc.hidden) && !inFlight) {
|
|
283
|
-
inFlight = true;
|
|
284
|
-
try { const p = await pairingNow(); for (const fn of listeners) { try { fn(p); } catch { /* a listener's own failure */ } } } catch { /* the next tick */ }
|
|
285
|
-
finally { inFlight = false; }
|
|
286
|
-
}
|
|
287
|
-
if (listeners.size) timer = timers.setTimeout(tick, pollMs);
|
|
288
|
-
};
|
|
289
|
-
return {
|
|
290
|
-
stub: false, member: true,
|
|
291
|
-
pairing: pairingNow,
|
|
292
|
-
async connect({ address, code }) {
|
|
293
|
-
const a = String(address || "").trim(), c = String(code || "").trim();
|
|
294
|
-
if (!ADDRESS_HINT.test(a)) return { ok: false, error: "address" };
|
|
295
|
-
if (!CODE_HINT.test(c)) return { ok: false, error: "code" };
|
|
296
|
-
return step("connect", { address: a, code: c });
|
|
297
|
-
},
|
|
298
|
-
confirmFingerprint(digest) { return step("confirm", { digest }); },
|
|
299
|
-
/** `shown`: the pairing the page showed when the person chose Disconnect (never re-read after their dialog). */
|
|
300
|
-
async disconnect(shown) {
|
|
301
|
-
// #3115 r2: exactly the pairing shown — its hub and bindingId; the server refuses any other (a replacement, a re-pair).
|
|
302
|
-
const hubId = shown && (shown.hub ? shown.hub.hubId : shown.hubId), binding = shown && shown.binding;
|
|
303
|
-
if (!hubId || !binding) return { ok: false, error: "conflict" };
|
|
304
|
-
const r = await step("disconnect", { hubId, binding }); return r.ok ? { ok: true, remote: "pending", ...(r.pendingConfirmation ? { pendingConfirmation: true } : {}) } : { ok: false, error: r.error === "unsaved" ? "unsaved" : "conflict" }; },
|
|
305
|
-
async cancel() { const r = await confirm.api("/api/hub/member/pairing/cancel", { method: "POST", body: "{}" }); return r.ok && r.body && r.body.pairing ? r.body.pairing : pairingNow(); },
|
|
306
|
-
/** The local status, every pollMs while visible (one request at a time; none while hidden); stops with the last listener. */
|
|
307
|
-
subscribe(fn) { listeners.add(fn); if (!timer) timer = timers.setTimeout(tick, pollMs); return () => { listeners.delete(fn); if (!listeners.size && timer) { timers.clearTimeout(timer); timer = null; } }; },
|
|
308
|
-
async exposures() { const rows = await listed(); return rows || []; },
|
|
309
|
-
async setExposed(agent, on, expectedRevision, choice = null) {
|
|
310
|
-
const rows = await listed();
|
|
311
|
-
if (rows === null) return { ok: false, error: "unavailable" };
|
|
312
|
-
const row = rows.find((x) => x.agent === agent);
|
|
313
|
-
if (!row) return { ok: false, error: "unknown_agent" };
|
|
314
|
-
if (!on) {
|
|
315
|
-
if (!row.exposureId) return { ok: false, error: "conflict" };
|
|
316
|
-
const r = await confirm.api(`/api/hub/member/exposures/${encodeURIComponent(row.exposureId)}/withdraw`, { method: "POST", body: JSON.stringify({ expectedRevision }) });
|
|
317
|
-
return r.ok && r.body && r.body.ok ? { ok: true, remote: r.body.remote === "confirmed" ? "confirmed" : "pending" } : fail(r);
|
|
318
|
-
}
|
|
319
|
-
if (!choice || typeof choice.dataViewId !== "string" || !Array.isArray(choice.tools)) return { ok: false, error: "not_enforceable" };
|
|
320
|
-
const r = await confirm.api("/api/hub/member/exposures", { method: "POST", headers: { "Idempotency-Key": confirm.newKey("hub") },
|
|
321
|
-
body: JSON.stringify({ agent, dataViewId: choice.dataViewId, tools: choice.tools, expectedRevision }) });
|
|
322
|
-
if (confirm.isPendingResponse(r)) {
|
|
323
|
-
const p = r.body.pending_change;
|
|
324
|
-
return { ok: true, pending: { expiresAt: p.expires_at }, view: { ...row, pending: { expiresAt: p.expires_at } }, settled: confirm.track(p, "hub") };
|
|
325
|
-
}
|
|
326
|
-
return r.ok && r.body && r.body.ok ? { ok: true, view: r.body.view } : fail(r);
|
|
327
|
-
},
|
|
328
|
-
};
|
|
329
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
// #3226 C: the words of the Hub's My shared agents and Administration pages, en and zh-TW, and their stylesheet. A module
|
|
2
|
-
// of its own (#3261 review): a tab that loaded B's hub-chat-strings.js / hub-chat.css before C keeps them, so C's words
|
|
3
|
-
// and rules come only from here.
|
|
4
|
-
import { register, t } from "/assets/app-i18n.js";
|
|
5
|
-
|
|
6
|
-
register("hubOwner", {
|
|
7
|
-
en: {
|
|
8
|
-
active: "Active", adminLead: "Pair a fleet with this Hub and see the fleets that are paired. You can't read anyone's chats here.",
|
|
9
|
-
allow: "Allow…", allowDays: "For", allowGo: "Allow", allowLogin: "Their sign-in name",
|
|
10
|
-
allowLoginHint: "The account they sign in to this Hub with.", allowTitle: "Allow someone to ask {0}", approveGo: "Approve…",
|
|
11
|
-
approvedTag: "Approved", backToMine: "My shared agents", codeFor: "Code for {0}", codeUnusedYet: "Not used yet", fleetOf: "{0}'s fleet",
|
|
12
|
-
makeCode: "Make code", mayAsk: "{0} may ask", mayAskNone: "No one may ask yet", mayAskOne: "1 may ask",
|
|
13
|
-
mineLead: "The agents that answer for you on this Hub: who may ask them, until when, and who asked lately. To share or stop sharing one, use your fleet's Settings → Access & security.",
|
|
14
|
-
noFleets: "No fleet is paired yet.", ownerChecked: "The owner confirmed", ownerLogin: "Owner's sign-in name", pairSteps: "Pair a fleet",
|
|
15
|
-
pairedFleets: "Paired fleets · {0}", pauseGo: "Pause…", pauseLead: "No one can ask it until it is shared again. What was asked stays readable.",
|
|
16
|
-
pauseTitle: "Pause questions", pendingLead: "Check that this fingerprint matches the one your fleet shows, then confirm.",
|
|
17
|
-
pendingPairings: "Pairings waiting for you", recent: "Recent questions",
|
|
18
|
-
recentLead: "Who asked and when, and whether it was answered. What they asked stays in your fleet's chat.", recentNone: "No one has asked yet.",
|
|
19
|
-
refresh: "Refresh", revokeItem: "Revoke…", revokedTag: "Revoked", rowMenu: "More for {0}", scopeHub: "This Hub", scopeYou: "Yours",
|
|
20
|
-
sharedCount: "Shared · {0}", stageAnswered: "Answered", stageNot: "Not answered", stageWaiting: "Waiting", statePaused: "Paused",
|
|
21
|
-
stateShared: "Shared", stateWithdrawn: "Withdrawn", stepApprove: "You approve", stepApproveHint: "Check the same fingerprint, then approve.",
|
|
22
|
-
stepCode: "Make a pairing code", stepCodeHint: "For the fleet's owner: they type it in their fleet within 10 minutes; it works once.",
|
|
23
|
-
stepOwner: "The owner checks the fingerprint", stepOwnerHint: "In their fleet, then on this Hub under My shared agents.",
|
|
24
|
-
untilLeft: "until {0} ({1})", waitingOwner: "Waiting for the owner", whoMayAsk: "Who may ask",
|
|
25
|
-
},
|
|
26
|
-
"zh-TW": {
|
|
27
|
-
active: "使用中", adminLead: "把 fleet 配對到這個 Hub,並查看已配對的 fleet。這裡看不到任何人的對話。", allow: "允許提問…", allowDays: "期限", allowGo: "允許", allowLogin: "對方的登入名稱",
|
|
28
|
-
allowLoginHint: "對方登入這個 Hub 用的帳號。", allowTitle: "允許提問 {0}", approveGo: "核准…", approvedTag: "已核准", backToMine: "我分享的 Agent",
|
|
29
|
-
codeFor: "給 {0} 的配對碼", codeUnusedYet: "還沒使用", fleetOf: "{0} 的 fleet", makeCode: "產生配對碼", mayAsk: "{0} 人可以提問", mayAskNone: "還沒有人可以提問",
|
|
30
|
-
mayAskOne: "1 人可以提問", mineLead: "在這個 Hub 上代表你回答的 Agent:誰可以提問、到什麼時候、最近誰問過。要開始或停止分享,請到你 fleet 的 設定 → 存取與安全。", noFleets: "還沒有配對的 fleet。",
|
|
31
|
-
ownerChecked: "擁有者已確認", ownerLogin: "擁有者的登入名稱", pairSteps: "配對一個 fleet", pairedFleets: "已配對的 fleet · {0}", pauseGo: "暫停…",
|
|
32
|
-
pauseLead: "重新分享之前,沒有人能再提問。已經問過的內容仍然看得到。", pauseTitle: "暫停提問", pendingLead: "確認這個指紋和你 fleet 上顯示的一致,再按確認。", pendingPairings: "等你核對的配對",
|
|
33
|
-
recent: "最近的提問", recentLead: "誰問的、什麼時候,有沒有回答。問了什麼留在你 fleet 的聊天裡。", recentNone: "還沒有人問過。", refresh: "重新整理", revokeItem: "撤銷…", revokedTag: "已撤銷",
|
|
34
|
-
rowMenu: "{0} 的更多動作", scopeHub: "這個 Hub", scopeYou: "你的", sharedCount: "分享中 · {0}", stageAnswered: "已回答", stageNot: "未回答", stageWaiting: "等待中",
|
|
35
|
-
statePaused: "已暫停", stateShared: "分享中", stateWithdrawn: "已停止分享", stepApprove: "你核准", stepApproveHint: "核對同一個指紋後核准。", stepCode: "產生配對碼",
|
|
36
|
-
stepCodeHint: "給 fleet 的擁有者:10 分鐘內在他的 fleet 輸入,只能用一次。", stepOwner: "擁有者核對指紋", stepOwnerHint: "在他的 fleet 上,然後在這個 Hub 的「我分享的 Agent」確認。",
|
|
37
|
-
untilLeft: "到 {0}({1})", waitingOwner: "等待擁有者", whoMayAsk: "可以提問的人",
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
/** hubOwner.* words. */
|
|
41
|
-
export const ho = (key, ...values) => t(`hubOwner.${key}`, ...values);
|
|
42
|
-
|
|
43
|
-
/** The owner and admin pages' stylesheet, linked once (an older hub-chat.css lacks these rules). */
|
|
44
|
-
export function linkHubOwnerCss(doc = typeof document !== "undefined" ? document : null) {
|
|
45
|
-
try {
|
|
46
|
-
if (!doc || !doc.head || doc.querySelector('link[data-hub-owner-css="1"]')) return;
|
|
47
|
-
const link = doc.createElement("link");
|
|
48
|
-
link.setAttribute("rel", "stylesheet"); link.setAttribute("href", "/assets/hub-owner.css"); link.setAttribute("data-hub-owner-css", "1");
|
|
49
|
-
doc.head.appendChild(link);
|
|
50
|
-
} catch { /* the pages still work without it */ }
|
|
51
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// Lazy, fixed local-owner copy only. Wire reasons are never rendered as exception text or translation keys.
|
|
2
|
-
// A member switcher may retain the old hub-strings module before Settings loads. Own these new words here.
|
|
3
|
-
import { register } from "/assets/app-i18n.js";
|
|
4
|
-
register("hub", {
|
|
5
|
-
en: {
|
|
6
|
-
"provider_engine-unavailable": "Docker is unavailable. Start the local Docker engine and check access to its configured Unix socket, then reload the member configuration.",
|
|
7
|
-
"provider_engine-unsupported": "This provider requires a Linux/amd64 Docker engine. Use a Linux/amd64 member environment, then reload its configuration.",
|
|
8
|
-
"provider_image-unconfigured": "No provider image is selected. Set imageId to a reviewed local image's immutable SHA-256 ID in the member provider configuration, then reload it.",
|
|
9
|
-
"provider_image-mismatch": "The selected image is missing or does not match this provider. Select the matching reviewed local image and reload the member configuration. Images are never pulled automatically.",
|
|
10
|
-
"provider_credential-unconfigured": "No usable model API key is configured. Set credentialRef to this member's private model API key file, then reload the member configuration.",
|
|
11
|
-
"provider_unavailable": "The isolated provider is unavailable. Review the local member provider configuration and the fleet log, then reload the configuration.",
|
|
12
|
-
},
|
|
13
|
-
"zh-TW": {
|
|
14
|
-
"provider_engine-unavailable": "無法連接 Docker。請啟動本機 Docker 引擎,確認能存取設定的 Unix socket,再重新載入成員設定。",
|
|
15
|
-
"provider_engine-unsupported": "此提供者需要 Linux/amd64 的 Docker 引擎。請改用 Linux/amd64 成員環境,再重新載入設定。",
|
|
16
|
-
"provider_image-unconfigured": "尚未選取提供者映像檔。請在成員提供者設定的 imageId 填入已審查本機映像檔的不可變 SHA-256 識別碼,再重新載入設定。",
|
|
17
|
-
"provider_image-mismatch": "選取的映像檔不存在或與此提供者不符。請選取相符且已審查的本機映像檔,再重新載入成員設定。系統不會自動下載映像檔。",
|
|
18
|
-
"provider_credential-unconfigured": "尚未設定可用的模型 API 金鑰。請將 credentialRef 設為此成員的私密模型 API 金鑰檔案,再重新載入成員設定。",
|
|
19
|
-
"provider_unavailable": "隔離提供者目前無法使用。請檢查本機成員提供者設定與 fleet 記錄,再重新載入設定。",
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
const keys = new Map([
|
|
23
|
-
["engine-unavailable", "provider_engine-unavailable"],
|
|
24
|
-
["engine-unsupported", "provider_engine-unsupported"],
|
|
25
|
-
["image-unconfigured", "provider_image-unconfigured"],
|
|
26
|
-
["image-mismatch", "provider_image-mismatch"],
|
|
27
|
-
["credential-unconfigured", "provider_credential-unconfigured"],
|
|
28
|
-
["unavailable", "provider_unavailable"],
|
|
29
|
-
["provider-unavailable", "provider_unavailable"],
|
|
30
|
-
]);
|
|
31
|
-
export const guidanceFor = (reason) => keys.get(reason) ?? null;
|
package/dist/ui/hub-quota.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
// Lazy B/C seam. New words stay here so a cached Hub dictionary can load this module after an upgrade.
|
|
2
|
-
import { html, useEffect, useState } from "/assets/app-html.js";
|
|
3
|
-
import { register, t } from "/assets/app-i18n.js";
|
|
4
|
-
import { hubClient } from "./hub-client.js";
|
|
5
|
-
|
|
6
|
-
if (typeof document !== "undefined" && !document.querySelector('link[data-hub-quota]')) {
|
|
7
|
-
const css = document.createElement("link"); css.rel = "stylesheet"; css.href = "/assets/hub-quota.css";
|
|
8
|
-
css.setAttribute("data-hub-quota", ""); document.head.appendChild(css);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
register("hubQuota", {
|
|
12
|
-
en: {
|
|
13
|
-
title: "Subscription quota", status: "Availability", available: "Available", near_limit: "Near limit", exhausted: "Exhausted", unknown: "Unknown",
|
|
14
|
-
back: "Exhausted, back about {0}", queue: "Questions will queue until the agent can answer again.",
|
|
15
|
-
coarse: "Only a broad availability band is shared.", visibility: "Show quota to people asking", visibilityHint: "Share this agent's availability band. Exact usage stays in your fleet.",
|
|
16
|
-
failed: "Could not save. Try again.", conflict: "This agent changed. Reload before saving.",
|
|
17
|
-
},
|
|
18
|
-
"zh-TW": {
|
|
19
|
-
title: "訂閱額度", status: "可用狀態", available: "充足", near_limit: "快用完", exhausted: "用完", unknown: "未知",
|
|
20
|
-
back: "用完,約 {0} 恢復", queue: "問題會排隊等候,待 Agent 可以回答時再處理。",
|
|
21
|
-
coarse: "只分享概略的可用狀態。", visibility: "向提問者顯示額度", visibilityHint: "分享這個 Agent 的可用狀態。確切用量留在你的 Fleet。",
|
|
22
|
-
failed: "未能儲存,請再試一次。", conflict: "Agent 已變更,請重新載入後再儲存。",
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
const word = (key, ...args) => t(`hubQuota.${key}`, ...args);
|
|
26
|
-
const bands = new Set(["available", "near_limit", "exhausted", "unknown"]);
|
|
27
|
-
function quotaOf(room) { return room && room.quota && bands.has(room.quota.band) ? room.quota : null; }
|
|
28
|
-
const statusClass = band => band === "available" ? "ok" : band === "near_limit" ? "warn" : band === "exhausted" ? "crit" : "";
|
|
29
|
-
export function quotaLabel(quota) {
|
|
30
|
-
if (!quota || !bands.has(quota.band)) return word("unknown");
|
|
31
|
-
const at = quota.resetsAt;
|
|
32
|
-
if (quota.band === "exhausted" && Number.isSafeInteger(at) && at > 0 && at <= 8.64e15 && at % 300_000 === 0) {
|
|
33
|
-
const date = new Date(at);
|
|
34
|
-
const clock = `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
|
|
35
|
-
return word("back", clock);
|
|
36
|
-
}
|
|
37
|
-
return word(quota.band);
|
|
38
|
-
}
|
|
39
|
-
export function QuotaCard({ room }) {
|
|
40
|
-
const quota = quotaOf(room);
|
|
41
|
-
if (!quota) return null;
|
|
42
|
-
return html`<section class="u-provider hub-quota-card" aria-label=${word("title")}>
|
|
43
|
-
<div class="u-head"><strong>${word("title")}</strong></div>
|
|
44
|
-
<div class="u-metric"><div class="u-row"><span class="u-label">${word("status")}</span>
|
|
45
|
-
<span class=${`u-status ${statusClass(quota.band)}`} role="status">${quotaLabel(quota)}</span></div>
|
|
46
|
-
<div class="u-sub">${word("coarse")}</div></div>
|
|
47
|
-
</section>`;
|
|
48
|
-
}
|
|
49
|
-
export function QuotaChip({ room, fallback = null }) {
|
|
50
|
-
const quota = quotaOf(room);
|
|
51
|
-
if (!quota || quota.band === "available") return fallback;
|
|
52
|
-
return html`<span class=${`tag u-status hub-quota-chip ${statusClass(quota.band)}`} role="status">${quotaLabel(quota)}</span>`;
|
|
53
|
-
}
|
|
54
|
-
export function QuotaBanner({ room }) {
|
|
55
|
-
const quota = quotaOf(room);
|
|
56
|
-
if (!quota || quota.band !== "exhausted") return null;
|
|
57
|
-
return html`<div class="msg status-line hub-quota-banner" role="status"><div class="body"><div class="st-text">
|
|
58
|
-
${quotaLabel(quota)} · ${word("queue")}
|
|
59
|
-
</div></div></div>`;
|
|
60
|
-
}
|
|
61
|
-
export function QuotaVisibilityRow({ exposure, onSaved }) {
|
|
62
|
-
const [visible, setVisible] = useState(exposure.quotaVisible !== false);
|
|
63
|
-
const [busy, setBusy] = useState(false), [error, setError] = useState(null);
|
|
64
|
-
useEffect(() => { setVisible(exposure.quotaVisible !== false); setError(null); }, [exposure.id, exposure.revision, exposure.quotaVisible]);
|
|
65
|
-
const save = async e => {
|
|
66
|
-
if (busy) return;
|
|
67
|
-
const next = e.target.checked;
|
|
68
|
-
const previous = visible;
|
|
69
|
-
setVisible(next); setBusy(true); setError(null);
|
|
70
|
-
let result;
|
|
71
|
-
try {
|
|
72
|
-
const client = hubClient();
|
|
73
|
-
result = typeof client.quotaVisibility === "function" ? await client.quotaVisibility(exposure.id, exposure.revision, next) : { ok: false };
|
|
74
|
-
} catch { result = { ok: false }; }
|
|
75
|
-
setBusy(false);
|
|
76
|
-
if (!result.ok) { setVisible(previous); setError(word(result.code === "conflict" ? "conflict" : "failed")); return; }
|
|
77
|
-
setVisible(result.quotaVisible);
|
|
78
|
-
if (onSaved) onSaved(result);
|
|
79
|
-
};
|
|
80
|
-
return html`<section class="s-sec hub-quota-visibility"><h3>${word("title")}</h3>
|
|
81
|
-
<label class="hub-quota-setting"><span><strong>${word("visibility")}</strong><span class="note">${word("visibilityHint")}</span></span>
|
|
82
|
-
<input class="s-ui-toggle" type="checkbox" role="switch" aria-label=${word("visibility")} checked=${visible} disabled=${busy} onChange=${save} /></label>
|
|
83
|
-
${error ? html`<p class="err" role="alert">${error}</p>` : null}
|
|
84
|
-
</section>`;
|
|
85
|
-
}
|