@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
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
// #2861 (design: hxhsandy): the Office's dialogue box — a visual-novel box at the foot of the stage when a person talks
|
|
2
|
-
// to an agent shown there. docs/design/office-dialogue-2861.md.
|
|
3
|
-
//
|
|
4
|
-
// - Heard: a person's message (the stream's `message`, role "user") → the box slides up: their portrait on the left,
|
|
5
|
-
// their name, their words (the first TEXT_MAX characters, typed out).
|
|
6
|
-
// - Working: while the agent works, its portrait on the right and a status line (its own office_set line, else
|
|
7
|
-
// "Working…").
|
|
8
|
-
// - Answered: its reply (role "agent") replaces the line (TEXT_MAX), the speaker is the agent; the box fades HOLD_MS
|
|
9
|
-
// later. Concurrent conversations queue, newest first; the box shows the first one it may and "+N" for the rest.
|
|
10
|
-
// - On a share link (`share`: the host's `talk`, never any text): a faceless visitor, "Received a message", "Replied".
|
|
11
|
-
// - Only news: a message stamped within FRESH_MS of the server's clock (a replay on reconnect, a poll's catch-up, is not).
|
|
12
|
-
// - Drawn on the Office's canvas, in the stage's CSS px, after the scene (it never pans or zooms with it), so it needs no
|
|
13
|
-
// CSS rule (a tab opened before an upgrade keeps its old app.css: the box is still right).
|
|
14
|
-
// - Reduced motion: no slide, no typing, no fade.
|
|
15
|
-
// Off unless the Office bar's Dialogue box is ticked (per browser): then nothing here runs at all.
|
|
16
|
-
import { own, PORTRAIT_STATES } from "./fleet-office-pack.js";
|
|
17
|
-
|
|
18
|
-
export const DLG = {
|
|
19
|
-
TEXT_MAX: 120,
|
|
20
|
-
/** A message older than this on the server's clock is not news (a replay, a catch-up). */
|
|
21
|
-
FRESH_MS: 90_000,
|
|
22
|
-
/** How long an answer stays before it fades. */
|
|
23
|
-
HOLD_MS: 6000,
|
|
24
|
-
FADE_MS: 500,
|
|
25
|
-
SLIDE_MS: 220,
|
|
26
|
-
/** A conversation with no answer goes after this. */
|
|
27
|
-
WAIT_MS: 180_000,
|
|
28
|
-
/** Typed out at this many characters a second. */
|
|
29
|
-
CPS: 40,
|
|
30
|
-
/** At most this many conversations are kept (the oldest go). */
|
|
31
|
-
MAX: 24,
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const GRAPHEMES = typeof Intl !== "undefined" && Intl.Segmenter ? new Intl.Segmenter(undefined, { granularity: "grapheme" }) : null;
|
|
35
|
-
const chars = (s) => (GRAPHEMES ? [...GRAPHEMES.segment(s)].map((x) => x.segment) : [...s]);
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* What the box says of a message: one line of plain words — whitespace folded, a code block as "…", the markdown marks
|
|
39
|
-
* at a line's start (#, >, *, -) and emphasis marks dropped — cut to `max` characters with "…".
|
|
40
|
-
*/
|
|
41
|
-
export function clip(text, max = DLG.TEXT_MAX) {
|
|
42
|
-
let s = String(text ?? "").replace(/```[\s\S]*?(```|$)/g, " … ");
|
|
43
|
-
s = s.split("\n").map((l) => l.replace(/^\s*(?:#{1,6}\s+|>\s?|[*+-]\s+|\d+\.\s+)/, "")).join(" ");
|
|
44
|
-
s = s.replace(/(\*\*|__|~~|`)/g, "").replace(/\s+/g, " ").trim();
|
|
45
|
-
const c = chars(s);
|
|
46
|
-
return c.length > max ? `${c.slice(0, max - 1).join("").trimEnd()}…` : s;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The conversations: `heard(instance, person, text, t)` a person's message (`person` { name, account } — null on a
|
|
51
|
-
* share: no one named); `answered(instance, text, t)` the agent's reply (none heard: nothing); `sweep(t)` drops what is
|
|
52
|
-
* over; `list()` newest first. `t` is the page's monotonic clock. Each change bumps `rev()`.
|
|
53
|
-
*/
|
|
54
|
-
export function createDialogue() {
|
|
55
|
-
const convs = new Map();
|
|
56
|
-
let seq = 0, rev = 0;
|
|
57
|
-
return {
|
|
58
|
-
heard(instance, person, text, t) {
|
|
59
|
-
if (typeof instance !== "string" || !instance) return null;
|
|
60
|
-
convs.delete(instance);
|
|
61
|
-
const c = { id: ++seq, instance, person: person || null, text: text == null ? null : clip(text), reply: null, heardAt: t, answeredAt: null, shownAt: null, replyShownAt: null };
|
|
62
|
-
convs.set(instance, c);
|
|
63
|
-
while (convs.size > DLG.MAX) convs.delete(convs.keys().next().value);
|
|
64
|
-
rev++;
|
|
65
|
-
return c;
|
|
66
|
-
},
|
|
67
|
-
answered(instance, text, t) {
|
|
68
|
-
const c = convs.get(instance);
|
|
69
|
-
if (!c || c.answeredAt !== null) return null;
|
|
70
|
-
c.reply = text == null ? null : clip(text);
|
|
71
|
-
c.answeredAt = t;
|
|
72
|
-
rev++;
|
|
73
|
-
return c;
|
|
74
|
-
},
|
|
75
|
-
/**
|
|
76
|
-
* Drop what is over; whether anything went. An answer shown: HOLD_MS (and its fade) from when the box first showed
|
|
77
|
-
* it (stageOf's replyShownAt) — never from when it came, so one queued behind another is seen in full when its turn
|
|
78
|
-
* comes; an answer never shown (its agent not drawn here, or waiting in the queue): WAIT_MS after it came. A
|
|
79
|
-
* conversation never answered: WAIT_MS after it was heard.
|
|
80
|
-
*/
|
|
81
|
-
sweep(t, still = false) {
|
|
82
|
-
let gone = false;
|
|
83
|
-
for (const [k, c] of convs) {
|
|
84
|
-
const over = c.answeredAt === null ? t >= c.heardAt + DLG.WAIT_MS
|
|
85
|
-
: c.replyShownAt !== null ? t >= c.replyShownAt + DLG.HOLD_MS + (still ? 0 : DLG.FADE_MS) : t >= c.answeredAt + DLG.WAIT_MS;
|
|
86
|
-
if (over) { convs.delete(k); gone = true; }
|
|
87
|
-
}
|
|
88
|
-
if (gone) rev++;
|
|
89
|
-
return gone;
|
|
90
|
-
},
|
|
91
|
-
list: () => [...convs.values()].sort((a, b) => b.heardAt - a.heardAt || b.id - a.id),
|
|
92
|
-
size: () => convs.size,
|
|
93
|
-
rev: () => rev,
|
|
94
|
-
clear() { if (convs.size) { convs.clear(); rev++; } },
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* The conversation the box shows and how many more wait: the newest whose agent is shown here (`shown(name)`) and
|
|
100
|
-
* awake (`asleep(name)` false: paused, stopped, or in bed at bedtime — it waits until they wake to work, or expires);
|
|
101
|
-
* `more`: the others shown here.
|
|
102
|
-
*/
|
|
103
|
-
export function pickFront(list, shown, asleep) {
|
|
104
|
-
const here = list.filter((c) => shown(c.instance));
|
|
105
|
-
const front = here.find((c) => !asleep(c.instance)) || null;
|
|
106
|
-
return { front, more: front ? here.length - 1 : 0 };
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* A stream `message` as the box takes it: { kind: "heard", instance, person, text } (a person's: role "user") or
|
|
111
|
-
* { kind: "answered", instance, text } (the agent's reply: role "agent"), when it is news — stamped within FRESH_MS of
|
|
112
|
-
* the server's time `serverNow`; else null. A status line is never one.
|
|
113
|
-
*/
|
|
114
|
-
export function messageOf(m, serverNow) {
|
|
115
|
-
if (!m || typeof m !== "object" || typeof m.instance !== "string" || !m.instance) return null;
|
|
116
|
-
if (m.role !== "user" && m.role !== "agent") return null;
|
|
117
|
-
const at = typeof m.ts === "string" ? Date.parse(m.ts) : NaN;
|
|
118
|
-
if (!Number.isFinite(at) || Math.abs(serverNow - at) > DLG.FRESH_MS) return null;
|
|
119
|
-
const files = Array.isArray(m.attachments) && m.attachments.length > 0;
|
|
120
|
-
const said = m.click && typeof m.click.label === "string" ? m.click.label : typeof m.text === "string" ? m.text : "";
|
|
121
|
-
const text = said.trim() ? said : files ? "" : null;
|
|
122
|
-
if (text === null) return null;
|
|
123
|
-
if (m.role === "agent") return { kind: "answered", instance: m.instance, text, files: files && !said.trim() };
|
|
124
|
-
const name = typeof m.sender === "string" && m.sender.trim() ? m.sender.trim() : "";
|
|
125
|
-
const account = typeof m.from === "string" && /^[^\s:]{1,64}:[^\s:]{1,128}$/.test(m.from) ? m.from : null;
|
|
126
|
-
return { kind: "heard", instance: m.instance, person: { name, account }, text, files: files && !said.trim() };
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/** A share's `talk` (the host's: { now, items: [{ instance, kind, at }] }), checked: the items that are news. */
|
|
130
|
-
export function talkOf(d) {
|
|
131
|
-
if (!d || typeof d !== "object" || typeof d.now !== "number" || !Array.isArray(d.items)) return [];
|
|
132
|
-
return d.items.filter((x) => x && typeof x === "object" && typeof x.instance === "string" && x.instance && (x.kind === "heard" || x.kind === "answered")
|
|
133
|
-
&& typeof x.at === "number" && Number.isFinite(x.at) && Math.abs(d.now - x.at) <= DLG.FRESH_MS).sort((a, b) => a.at - b.at);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/** The expression a portrait shows for a state: its own, else idle, else any it has. */
|
|
137
|
-
const expressionOf = (p, state) => (p ? own(p, state) || own(p, "idle") || PORTRAIT_STATES.map((k) => own(p, k)).find(Boolean) || null : null);
|
|
138
|
-
/** A state's expression: working, a call (needs, crashed, looks stuck), else idle. */
|
|
139
|
-
export const portraitState = (state) => (state === "working" ? "working" : state === "needs" || state === "crashed" || state === "stuck" ? "needs" : "idle");
|
|
140
|
-
/**
|
|
141
|
-
* The pack's portrait file for an agent ({ agent: name, state }) or a person ({ account }), or null: an agent's
|
|
142
|
-
* byInstance, else the pack's default; a person's byUser (the default is the agents').
|
|
143
|
-
*/
|
|
144
|
-
export function portraitSrc(pack, who) {
|
|
145
|
-
const p = pack && pack.portraits;
|
|
146
|
-
if (!p || !who) return null;
|
|
147
|
-
if (who.agent) return expressionOf(own(p.byInstance, who.agent) || p.default || null, portraitState(who.state));
|
|
148
|
-
if (who.account) return expressionOf(own(p.byUser, who.account), "idle");
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Where everything goes on a stage `W`×`H` (CSS px): the box (centred, at most 960 wide, at the foot), the portraits'
|
|
154
|
-
* height and their two feet (left: the person, right: the agent — standing behind the box, VN style), the text's
|
|
155
|
-
* place and lines, the name plate.
|
|
156
|
-
*/
|
|
157
|
-
export function boxLayout(W, H) {
|
|
158
|
-
const narrow = W < 560;
|
|
159
|
-
const m = narrow ? 8 : 16, w = Math.max(160, Math.min(960, W - 2 * m)), h = Math.round(Math.min(narrow ? 120 : 132, Math.max(narrow ? 100 : 96, H * (narrow ? 0.24 : 0.2))));
|
|
160
|
-
const x = Math.round((W - w) / 2), y = Math.round(H - m - h);
|
|
161
|
-
const ph = Math.round(Math.max(h * 1.4, Math.min(narrow ? 220 : 340, H * 0.42))), foot = Math.round(y + h * 0.55);
|
|
162
|
-
const pad = narrow ? 12 : 18, font = narrow ? 14 : 15, lineH = Math.round(font * 1.4), statusH = narrow ? 18 : 20;
|
|
163
|
-
const nameH = 22;
|
|
164
|
-
return { narrow, box: { x, y, w, h }, portrait: { h: Math.min(ph, foot - 8), foot, maxW: Math.round(w * (narrow ? 0.36 : 0.3)), left: Math.round(x + w * 0.14), right: Math.round(x + w * 0.86) },
|
|
165
|
-
pad, font, lineH, nameH, statusH, face: narrow ? 52 : 64,
|
|
166
|
-
text: { x: x + pad, y: y + pad + 4, w: w - 2 * pad, lines: Math.max(2, Math.floor((h - 2 * pad - 4 - statusH) / lineH)) } };
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* The layout with its box as tall as its words need (`n` lines, and the agent's line when `status`), at least two
|
|
170
|
-
* lines' worth, still standing on the stage's foot: the portraits' feet and the text move with its top.
|
|
171
|
-
*/
|
|
172
|
-
export function fitBox(L, n, status) {
|
|
173
|
-
const want = Math.round(L.pad * 2 + 4 + Math.max(2, n) * L.lineH + (status ? L.statusH : 0));
|
|
174
|
-
const h = Math.min(L.box.h, Math.max(want, L.narrow ? 64 : 72)), dy = L.box.h - h;
|
|
175
|
-
if (dy <= 0) return L;
|
|
176
|
-
return { ...L, box: { ...L.box, y: L.box.y + dy, h }, portrait: { ...L.portrait, foot: L.portrait.foot + dy, h: Math.min(L.portrait.h, L.portrait.foot + dy - 8) },
|
|
177
|
-
text: { ...L.text, y: L.text.y + dy } };
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const CJK = /[⺀-鿿가-豈-- -〿]/;
|
|
181
|
-
/**
|
|
182
|
-
* `text` in lines at most `maxW` wide (measured), at most `max` lines (the last cut with "…" when there is more):
|
|
183
|
-
* words for Latin text, any character for CJK; a word wider than a line is broken by character.
|
|
184
|
-
*/
|
|
185
|
-
export function wrap(measure, text, maxW, max) {
|
|
186
|
-
const tokens = [];
|
|
187
|
-
for (const g of chars(String(text ?? ""))) {
|
|
188
|
-
const last = tokens[tokens.length - 1];
|
|
189
|
-
if (/\s/.test(g)) { tokens.push(" "); continue; }
|
|
190
|
-
if (CJK.test(g) || !last || last === " " || CJK.test(last[last.length - 1] || "")) tokens.push(g);
|
|
191
|
-
else tokens[tokens.length - 1] = last + g;
|
|
192
|
-
}
|
|
193
|
-
const lines = [];
|
|
194
|
-
let cur = "";
|
|
195
|
-
const push = () => { lines.push(cur.trimEnd()); cur = ""; };
|
|
196
|
-
for (const tk of tokens) {
|
|
197
|
-
if (tk === " ") { if (cur) cur += " "; continue; }
|
|
198
|
-
if (measure(cur + tk) <= maxW) { cur += tk; continue; }
|
|
199
|
-
if (cur.trim()) push();
|
|
200
|
-
if (measure(tk) <= maxW) { cur = tk; continue; }
|
|
201
|
-
for (const g of chars(tk)) { if (cur && measure(cur + g) > maxW) push(); cur += g; }
|
|
202
|
-
}
|
|
203
|
-
if (cur.trim()) push();
|
|
204
|
-
if (lines.length <= max) return lines;
|
|
205
|
-
const out = lines.slice(0, max);
|
|
206
|
-
let lastLine = out[max - 1];
|
|
207
|
-
while (lastLine && measure(`${lastLine}…`) > maxW) lastLine = chars(lastLine).slice(0, -1).join("");
|
|
208
|
-
out[max - 1] = `${lastLine.trimEnd()}…`;
|
|
209
|
-
return out;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/** The first `n` characters of `lines`, line by line (what the typing has reached). */
|
|
213
|
-
export function typed(lines, n) {
|
|
214
|
-
const out = [];
|
|
215
|
-
let left = n;
|
|
216
|
-
for (const l of lines) {
|
|
217
|
-
if (left <= 0) break;
|
|
218
|
-
const c = chars(l);
|
|
219
|
-
out.push(c.slice(0, left).join(""));
|
|
220
|
-
left -= c.length;
|
|
221
|
-
}
|
|
222
|
-
return out;
|
|
223
|
-
}
|
|
224
|
-
const lengthOf = (lines) => lines.reduce((a, l) => a + chars(l).length, 0);
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* What the box is now, from its conversation `c` at `t`: { phase: "heard" | "working" | "answered", speaker
|
|
228
|
-
* ("left": the person, "right": the agent), slide (0–1: how far it has risen), alpha, typedAt (when the speaker's line
|
|
229
|
-
* began typing), done (gone) }. `working`: the agent works now. Reduced motion (`still`): risen, whole, no fade.
|
|
230
|
-
*/
|
|
231
|
-
export function stageOf(c, t, working, still) {
|
|
232
|
-
if (c.shownAt === null) c.shownAt = t;
|
|
233
|
-
if (c.answeredAt !== null && c.replyShownAt === null) c.replyShownAt = t;
|
|
234
|
-
const phase = c.answeredAt !== null ? "answered" : working ? "working" : "heard";
|
|
235
|
-
const slide = still ? 1 : Math.min(1, (t - c.shownAt) / DLG.SLIDE_MS);
|
|
236
|
-
const fadeFrom = c.answeredAt !== null ? Math.max(c.answeredAt, c.replyShownAt) + DLG.HOLD_MS : Infinity;
|
|
237
|
-
const alpha = t < fadeFrom ? 1 : still ? 0 : Math.max(0, 1 - (t - fadeFrom) / DLG.FADE_MS);
|
|
238
|
-
return { phase, speaker: phase === "answered" ? "right" : "left", slide: 1 - (1 - slide) ** 3, alpha, typedAt: phase === "answered" ? c.replyShownAt : c.shownAt, done: alpha <= 0 };
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/** The box's colours: the pack's dialogBox, else the dashboard's tokens. */
|
|
242
|
-
export function boxColours(dialogBox, pal) {
|
|
243
|
-
const d = dialogBox || {};
|
|
244
|
-
return { background: d.background || pal.surface, border: d.border || pal.border, text: d.text || pal.text, name: d.name || pal.accent, sub: pal.text2 };
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const roundRect = (ctx, x, y, w, h, r) => {
|
|
248
|
-
ctx.beginPath();
|
|
249
|
-
if (typeof ctx.roundRect === "function") ctx.roundRect(x, y, w, h, r);
|
|
250
|
-
else ctx.rect(x, y, w, h);
|
|
251
|
-
};
|
|
252
|
-
/** A 9-slice frame `im` over (x, y, w, h): `s` image px a side, drawn `k` CSS px an image px (unsmoothed). */
|
|
253
|
-
function nineSlice(ctx, im, s, x, y, w, h, k) {
|
|
254
|
-
const iw = im.naturalWidth || im.width, ih = im.naturalHeight || im.height, d = s * k;
|
|
255
|
-
if (!iw || !ih || w < 2 * d || h < 2 * d) return false;
|
|
256
|
-
const sx = [0, s, iw - s, iw], sy = [0, s, ih - s, ih], dx = [x, x + d, x + w - d, x + w], dy = [y, y + d, y + h - d, y + h];
|
|
257
|
-
for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) {
|
|
258
|
-
const sw = sx[i + 1] - sx[i], sh = sy[j + 1] - sy[j], dw = dx[i + 1] - dx[i], dh = dy[j + 1] - dy[j];
|
|
259
|
-
if (sw > 0 && sh > 0 && dw > 0 && dh > 0) ctx.drawImage(im, sx[i], sy[j], sw, sh, dx[i], dy[j], dw, dh);
|
|
260
|
-
}
|
|
261
|
-
return true;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* One face where a portrait stands (its feet at (cx, foot)): a portrait (`{ kind: "portrait", im }`, its height `h`,
|
|
266
|
-
* at most `maxW` wide, bottom-anchored), else a framed square (`face` px) sitting just above the box — a picture
|
|
267
|
-
* (`image`), an emoji, or an initial on the identity colour. `dim`: the one not speaking.
|
|
268
|
-
*/
|
|
269
|
-
function drawFace(ctx, face, cx, L, top, dim, env) {
|
|
270
|
-
if (!face) return;
|
|
271
|
-
ctx.save();
|
|
272
|
-
ctx.globalAlpha *= dim ? 0.55 : 1;
|
|
273
|
-
if (face.kind === "portrait" && face.im) {
|
|
274
|
-
const iw = face.im.naturalWidth || face.im.width, ih = face.im.naturalHeight || face.im.height;
|
|
275
|
-
if (iw && ih) {
|
|
276
|
-
const k = Math.min(L.portrait.h / ih, L.portrait.maxW / iw), w = iw * k, h = ih * k;
|
|
277
|
-
ctx.imageSmoothingEnabled = k < 1; // a pixel-art portrait scaled up stays crisp
|
|
278
|
-
ctx.drawImage(face.im, Math.round(cx - w / 2), Math.round(L.portrait.foot - h), Math.round(w), Math.round(h));
|
|
279
|
-
}
|
|
280
|
-
ctx.restore();
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
const s = L.face, x = Math.round(cx - s / 2), y = Math.round(top - s - 6);
|
|
284
|
-
ctx.fillStyle = env.pal.surface2; ctx.strokeStyle = env.pal.border; ctx.lineWidth = 2;
|
|
285
|
-
roundRect(ctx, x, y, s, s, 10); ctx.fill(); ctx.stroke();
|
|
286
|
-
ctx.save(); roundRect(ctx, x + 3, y + 3, s - 6, s - 6, 8); ctx.clip();
|
|
287
|
-
if (face.kind === "image" && face.im) { ctx.imageSmoothingEnabled = true; ctx.drawImage(face.im, x + 3, y + 3, s - 6, s - 6); }
|
|
288
|
-
else {
|
|
289
|
-
if (face.kind === "initial") { ctx.fillStyle = face.color || env.pal.accent; ctx.fillRect(x + 3, y + 3, s - 6, s - 6); }
|
|
290
|
-
ctx.fillStyle = face.kind === "initial" ? "#ffffff" : env.pal.text;
|
|
291
|
-
ctx.font = `${face.kind === "emoji" ? 400 : 700} ${Math.round(s * (face.kind === "emoji" ? 0.5 : 0.44))}px system-ui, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`;
|
|
292
|
-
ctx.textAlign = "center"; ctx.textBaseline = "middle";
|
|
293
|
-
ctx.fillText(face.text || "?", x + s / 2, y + s / 2 + 1);
|
|
294
|
-
}
|
|
295
|
-
ctx.restore();
|
|
296
|
-
ctx.restore();
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Draw the box on `ctx` (its transform: CSS px of the stage) — `v`: { L (boxLayout), stage (stageOf), left/right faces,
|
|
301
|
-
* name (the plate), lines (the speaker's whole text, wrapped), status (the agent's line while it works, or null),
|
|
302
|
-
* statusName, more, colours, frame ({ im, slice, k }) }. Whether it is still moving (rising, typing or fading).
|
|
303
|
-
*/
|
|
304
|
-
export function drawBox(ctx, v, t, env) {
|
|
305
|
-
const { L, stage } = v, b = L.box;
|
|
306
|
-
if (stage.done) return false;
|
|
307
|
-
const rise = Math.round((1 - stage.slide) * (b.h + 40));
|
|
308
|
-
ctx.save();
|
|
309
|
-
ctx.globalAlpha = stage.alpha;
|
|
310
|
-
ctx.translate(0, rise);
|
|
311
|
-
// The portraits stand behind the box: the person's on the left, the agent's on the right (once it works or answers).
|
|
312
|
-
drawFace(ctx, v.left, L.portrait.left, L, b.y, stage.speaker !== "left", env);
|
|
313
|
-
if (v.right) drawFace(ctx, v.right, L.portrait.right, L, b.y, stage.speaker !== "right", env);
|
|
314
|
-
const c = v.colours;
|
|
315
|
-
ctx.save();
|
|
316
|
-
// Opaque (the portraits stand behind it and must not show through); a pack's frame is drawn over the fill.
|
|
317
|
-
ctx.fillStyle = c.background; roundRect(ctx, b.x, b.y, b.w, b.h, 12); ctx.fill();
|
|
318
|
-
if (!(v.frame && v.frame.im && nineSlice(ctx, v.frame.im, v.frame.slice, b.x, b.y, b.w, b.h, v.frame.k))) {
|
|
319
|
-
ctx.strokeStyle = c.border; ctx.lineWidth = 2; roundRect(ctx, b.x + 1, b.y + 1, b.w - 2, b.h - 2, 11); ctx.stroke();
|
|
320
|
-
}
|
|
321
|
-
ctx.restore();
|
|
322
|
-
// The name plate: over the box's top edge, on the speaker's side.
|
|
323
|
-
ctx.font = "700 13px system-ui, sans-serif";
|
|
324
|
-
const nw = Math.min(b.w * 0.6, Math.ceil(ctx.measureText(v.name).width) + 20), nx = stage.speaker === "left" ? b.x + 14 : b.x + b.w - 14 - nw, ny = b.y - Math.round(L.nameH / 2);
|
|
325
|
-
ctx.fillStyle = c.background; ctx.strokeStyle = c.name; ctx.lineWidth = 2;
|
|
326
|
-
roundRect(ctx, nx, ny, nw, L.nameH, 6); ctx.fill(); ctx.stroke();
|
|
327
|
-
ctx.fillStyle = c.name; ctx.textAlign = "left"; ctx.textBaseline = "middle";
|
|
328
|
-
ctx.fillText(fit(ctx, v.name, nw - 16), nx + 10, ny + L.nameH / 2 + 1);
|
|
329
|
-
// The words, typed out.
|
|
330
|
-
const n = env.still ? Infinity : Math.floor(((t - stage.typedAt) * DLG.CPS) / 1000);
|
|
331
|
-
ctx.font = `400 ${L.font}px system-ui, sans-serif`; ctx.fillStyle = c.text; ctx.textBaseline = "top";
|
|
332
|
-
const shown = typed(v.lines, n);
|
|
333
|
-
shown.forEach((l, i) => ctx.fillText(l, L.text.x, L.text.y + 6 + i * L.lineH));
|
|
334
|
-
// The agent's line while it works; "+N" for the conversations waiting.
|
|
335
|
-
ctx.font = `italic 600 ${L.narrow ? 12 : 13}px system-ui, sans-serif`; ctx.textBaseline = "bottom";
|
|
336
|
-
if (v.status) { ctx.fillStyle = c.name; ctx.textAlign = "right"; ctx.fillText(fit(ctx, v.status, b.w - 2 * L.pad), b.x + b.w - L.pad, b.y + b.h - Math.round(L.pad * 0.75)); }
|
|
337
|
-
ctx.font = `600 ${L.narrow ? 11 : 12}px system-ui, sans-serif`;
|
|
338
|
-
if (v.more > 0) {
|
|
339
|
-
ctx.font = "700 13px system-ui, sans-serif";
|
|
340
|
-
const tag = `+${v.more}`, tw = ctx.measureText(tag).width + 18, th = 22, tx = stage.speaker === "left" ? b.x + b.w - tw - L.pad : b.x + L.pad, ty = b.y + L.pad - 4;
|
|
341
|
-
ctx.fillStyle = c.name; roundRect(ctx, tx, ty, tw, th, th / 2); ctx.fill();
|
|
342
|
-
ctx.fillStyle = c.background; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillText(tag, tx + tw / 2, ty + th / 2 + 1);
|
|
343
|
-
}
|
|
344
|
-
ctx.restore();
|
|
345
|
-
return stage.slide < 1 || n < lengthOf(v.lines) || stage.alpha < 1;
|
|
346
|
-
}
|
|
347
|
-
/** `s` cut to `w` px with "…". */
|
|
348
|
-
function fit(ctx, s, w) {
|
|
349
|
-
if (ctx.measureText(s).width <= w) return s;
|
|
350
|
-
let c = chars(s);
|
|
351
|
-
while (c.length > 1 && ctx.measureText(`${c.join("")}…`).width > w) c = c.slice(0, -1);
|
|
352
|
-
return `${c.join("")}…`;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/** Whether (x, y) — the stage's CSS px — is on the box (with the slide it has now). */
|
|
356
|
-
export const onBox = (L, stage, x, y) => !!L && !!stage && !stage.done && stage.alpha > 0.2
|
|
357
|
-
&& x >= L.box.x && x < L.box.x + L.box.w && y >= L.box.y + Math.round((1 - stage.slide) * (L.box.h + 40)) - L.nameH / 2 && y < L.box.y + L.box.h + (1 - stage.slide) * (L.box.h + 40);
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Pictures the box draws that are not a pack's: an avatar's `/ui/img/…` (avatarOf's), read once each; `get(src, done)`
|
|
361
|
-
* the picture or null (not in yet: `done` once it is).
|
|
362
|
-
*/
|
|
363
|
-
export function createFaces(load = defaultLoad) {
|
|
364
|
-
const seen = new Map();
|
|
365
|
-
return (src, done) => {
|
|
366
|
-
if (!src) return null;
|
|
367
|
-
const had = seen.get(src);
|
|
368
|
-
if (had) { if (had.im === undefined && done) had.waiting.add(done); return had.im || null; }
|
|
369
|
-
const e = { im: undefined, waiting: new Set(done ? [done] : []) };
|
|
370
|
-
seen.set(src, e);
|
|
371
|
-
Promise.resolve(load(src)).catch(() => null).then((im) => { e.im = im || null; for (const fn of e.waiting) { try { fn(); } catch { /* the page's */ } } e.waiting.clear(); });
|
|
372
|
-
return null;
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
function defaultLoad(src) {
|
|
376
|
-
return new Promise((resolve) => {
|
|
377
|
-
if (typeof Image !== "function") { resolve(null); return; }
|
|
378
|
-
const im = new Image();
|
|
379
|
-
im.onload = () => resolve(im); im.onerror = () => resolve(null);
|
|
380
|
-
im.src = src;
|
|
381
|
-
});
|
|
382
|
-
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
// #2246 follow-up, after Linear (as Circle, ln-dev7/circle, draws it): a card's own menu on the task board, and
|
|
2
|
-
// stepping from the open card to the next. A right click on a card — a board tile, a list row, a waiting row — or the
|
|
3
|
-
// keyboard's menu key (Shift+F10) on it opens its menu there: open it; confirm, send back or answer it when it waits for
|
|
4
|
-
// you; move it to another status; give it to another instance; change its priority; copy its link or number; cancel
|
|
5
|
-
// it. Each choice goes through the same calls and questions as the card's dialog (a reason to block, to send back).
|
|
6
|
-
// The dialog's Previous / Next (K / J) walk the cards in the order the page showed them when the card was opened.
|
|
7
|
-
// No style attribute anywhere (the CSP): the menu is placed through the CSSOM.
|
|
8
|
-
import { html, useEffect, useLayoutEffect, useRef } from "/assets/app-html.js";
|
|
9
|
-
import { t, register } from "/assets/app-i18n.js";
|
|
10
|
-
import { Icon } from "/assets/ui-icons.js";
|
|
11
|
-
import { COLUMNS, followsSubs, waitsForYou } from "./fleet-task-common.js";
|
|
12
|
-
|
|
13
|
-
register("taskmenu", {
|
|
14
|
-
en: {
|
|
15
|
-
label: "{0}: actions", open: "Open", moveTo: "Move to", assignee: "Assignee", priority: "Priority",
|
|
16
|
-
copyLink: "Copy link", copyId: "Copy card number", copied: "Copied {0}", cancel: "Cancel this card…",
|
|
17
|
-
prev: "Previous card (K)", next: "Next card (J)", position: "{0} / {1}",
|
|
18
|
-
},
|
|
19
|
-
"zh-TW": {
|
|
20
|
-
label: "{0}:動作", open: "打開", moveTo: "移到", assignee: "負責人", priority: "優先度",
|
|
21
|
-
copyLink: "複製連結", copyId: "複製卡號", copied: "已複製 {0}", cancel: "取消這張卡…",
|
|
22
|
-
prev: "上一張(K)", next: "下一張(J)", position: "{0} / {1}",
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
// ── What a card's menu offers (pure: tests import these) ─────
|
|
27
|
-
|
|
28
|
-
const PRIORITIES = ["urgent", "high", "normal", "low"];
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* The statuses a person may move a card to by hand, as a drop on the board allows: any, except that a main task that
|
|
32
|
-
* follows its sub tasks is only confirmed or sent back from review, blocked, or resumed when blocked.
|
|
33
|
-
*/
|
|
34
|
-
export function movesFor(card) {
|
|
35
|
-
if (card.status === "cancelled") return [];
|
|
36
|
-
const derived = followsSubs(card);
|
|
37
|
-
return COLUMNS.filter((to) => to !== card.status && (!derived || (card.status === "review" && (to === "done" || to === "claimed"))
|
|
38
|
-
|| (to === "blocked" && card.status !== "done") || (card.status === "blocked" && to === "claimed")));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* A card's menu items. `act` runs a choice: { kind: "open" | "confirm" | "sendBack" | "answer" | "move" | "assign" |
|
|
43
|
-
* "assignOther" | "priority" | "copyLink" | "copyId" | "cancel", to?, value? }. `names`: the assignees offered (the
|
|
44
|
-
* project's — a fleet can have dozens of instances; Other… names any). Over the public link only open and copy.
|
|
45
|
-
*/
|
|
46
|
-
export function cardMenuItems(card, { writable, names, act }) {
|
|
47
|
-
const yours = writable && waitsForYou(card);
|
|
48
|
-
const items = [{ key: "open", label: t("taskmenu.open"), icon: "external", onSelect: () => act({ kind: "open" }) }];
|
|
49
|
-
if (yours && card.status === "review") {
|
|
50
|
-
items.push({ key: "confirm", label: t("tasks.confirm"), icon: "check", onSelect: () => act({ kind: "confirm" }) });
|
|
51
|
-
items.push({ key: "sendBack", label: t("tasks.sendBack"), icon: "back", onSelect: () => act({ kind: "sendBack" }) });
|
|
52
|
-
}
|
|
53
|
-
if (yours && card.status === "blocked") items.push({ key: "answer", label: t("tasks.answer"), icon: "chat", onSelect: () => act({ kind: "answer" }) });
|
|
54
|
-
if (writable) {
|
|
55
|
-
const moves = movesFor(card);
|
|
56
|
-
if (moves.length) {
|
|
57
|
-
items.push({ key: "h-move", heading: true, label: t("taskmenu.moveTo") });
|
|
58
|
-
for (const to of moves) items.push({ key: `move-${to}`, label: t(`tasks.${to}`), dot: to, onSelect: () => act({ kind: "move", to }) });
|
|
59
|
-
}
|
|
60
|
-
if (card.status !== "done" && card.status !== "cancelled") {
|
|
61
|
-
items.push({ key: "h-assignee", heading: true, label: t("taskmenu.assignee") });
|
|
62
|
-
const all = [...new Set([...names, card.assignee].filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
63
|
-
for (const name of [...all, null]) {
|
|
64
|
-
items.push({ key: `assign-${name ?? ""}`, label: name ?? t("tasks.nobody"), checked: card.assignee === name, onSelect: () => act({ kind: "assign", value: name }) });
|
|
65
|
-
}
|
|
66
|
-
items.push({ key: "assign-other", label: t("taskcard.other"), onSelect: () => act({ kind: "assignOther" }) });
|
|
67
|
-
}
|
|
68
|
-
items.push({ key: "h-priority", heading: true, label: t("taskmenu.priority") });
|
|
69
|
-
for (const p of PRIORITIES) items.push({ key: `priority-${p}`, label: t(`tasks.${p}`), checked: card.priority === p, onSelect: () => act({ kind: "priority", value: p }) });
|
|
70
|
-
}
|
|
71
|
-
items.push({ key: "h-copy", heading: true, label: "" });
|
|
72
|
-
items.push({ key: "copyLink", label: t("taskmenu.copyLink"), icon: "copy", onSelect: () => act({ kind: "copyLink" }) });
|
|
73
|
-
items.push({ key: "copyId", label: t("taskmenu.copyId"), icon: "copy", onSelect: () => act({ kind: "copyId" }) });
|
|
74
|
-
if (writable && card.status !== "done" && card.status !== "cancelled") {
|
|
75
|
-
items.push({ key: "cancel", label: t("taskmenu.cancel"), icon: "trash", danger: true, onSelect: () => act({ kind: "cancel" }) });
|
|
76
|
-
}
|
|
77
|
-
return items;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* The card a right click (or the menu key) lands on: a board tile, a list row, a waiting row — its number, or null.
|
|
82
|
-
* The browser's own menu stays, as on a chat message, with Shift, over selected text, and on a link or a field.
|
|
83
|
-
*/
|
|
84
|
-
export function cardAt(e) {
|
|
85
|
-
const target = e && e.target;
|
|
86
|
-
if (!target || typeof target.closest !== "function" || e.shiftKey) return null;
|
|
87
|
-
const sel = globalThis.getSelection ? globalThis.getSelection() : null;
|
|
88
|
-
if (sel && !sel.isCollapsed && String(sel).trim()) return null;
|
|
89
|
-
if (target.closest("a[href], input, textarea, select, [contenteditable='true']")) return null;
|
|
90
|
-
const el = target.closest("[data-tile], [data-row], [data-wait]");
|
|
91
|
-
return el ? { id: el.getAttribute("data-tile") || el.getAttribute("data-row") || el.getAttribute("data-wait"), el } : null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** The cards in the page's order — the board's columns, the list's rows, the waiting rows — each once. */
|
|
95
|
-
export function pageOrder(root = globalThis.document) {
|
|
96
|
-
if (!root || typeof root.querySelectorAll !== "function") return [];
|
|
97
|
-
const ids = [...root.querySelectorAll(".tb [data-tile], .tb [data-row], .tb [data-wait]")]
|
|
98
|
-
.map((el) => el.getAttribute("data-tile") || el.getAttribute("data-row") || el.getAttribute("data-wait"));
|
|
99
|
-
return [...new Set(ids.filter(Boolean))];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Where the open card is in a walk: the page's order when it is in it, else (a sub task opened from its main task)
|
|
104
|
-
* among its main task's sub tasks; null with nowhere to step.
|
|
105
|
-
*/
|
|
106
|
-
export function stepsOf(trail, id, cards) {
|
|
107
|
-
let ids = trail;
|
|
108
|
-
if (!ids.includes(id)) {
|
|
109
|
-
const card = cards.find((c) => c.id === id);
|
|
110
|
-
if (!card || card.kind !== "sub") return null;
|
|
111
|
-
ids = cards.filter((c) => c.kind === "sub" && c.parentId === card.parentId && c.status !== "cancelled").sort((a, b) => a.sort - b.sort).map((c) => c.id);
|
|
112
|
-
}
|
|
113
|
-
const i = ids.indexOf(id);
|
|
114
|
-
if (i < 0 || ids.length < 2) return null;
|
|
115
|
-
return { at: i + 1, total: ids.length, prev: ids[i - 1] ?? null, next: ids[i + 1] ?? null };
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// ── The menu ──────────────────────────────────────────────
|
|
119
|
-
|
|
120
|
-
const ITEM = "[role=menuitem]:not([disabled]), [role=menuitemradio]:not([disabled])";
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* A card's menu at a point (a right click's; under the card for the keyboard), kept inside the window. Arrow keys move,
|
|
124
|
-
* Enter chooses, Esc or a click elsewhere closes it, and the focus goes back to the card.
|
|
125
|
-
*/
|
|
126
|
-
export function CardMenu({ at, items, label, onClose }) {
|
|
127
|
-
const list = useRef(null);
|
|
128
|
-
useLayoutEffect(() => {
|
|
129
|
-
const el = list.current;
|
|
130
|
-
if (!el) return;
|
|
131
|
-
const w = globalThis.innerWidth || Infinity, h = globalThis.innerHeight || Infinity;
|
|
132
|
-
const r = typeof el.getBoundingClientRect === "function" ? el.getBoundingClientRect() : { width: 0, height: 0 };
|
|
133
|
-
el.style.left = `${Math.max(8, Math.min(at.x, w - r.width - 8))}px`;
|
|
134
|
-
el.style.top = `${Math.max(8, Math.min(at.y, h - r.height - 8))}px`;
|
|
135
|
-
}, [at.x, at.y]);
|
|
136
|
-
useEffect(() => {
|
|
137
|
-
const first = list.current && list.current.querySelector(ITEM);
|
|
138
|
-
if (first) first.focus();
|
|
139
|
-
const outside = (e) => { if (list.current && !list.current.contains(e.target)) onClose(false); };
|
|
140
|
-
const away = () => onClose(false);
|
|
141
|
-
document.addEventListener("pointerdown", outside, true);
|
|
142
|
-
globalThis.addEventListener?.("resize", away);
|
|
143
|
-
return () => { document.removeEventListener("pointerdown", outside, true); globalThis.removeEventListener?.("resize", away); };
|
|
144
|
-
}, []);
|
|
145
|
-
function onKey(e) {
|
|
146
|
-
const all = [...list.current.querySelectorAll(ITEM)];
|
|
147
|
-
const i = all.indexOf(document.activeElement);
|
|
148
|
-
if (e.key === "Escape") { e.preventDefault(); e.stopPropagation(); onClose(true); }
|
|
149
|
-
else if (e.key === "ArrowDown") { e.preventDefault(); (all[(i + 1) % all.length] || all[0])?.focus(); }
|
|
150
|
-
else if (e.key === "ArrowUp") { e.preventDefault(); (all[(i - 1 + all.length) % all.length] || all[0])?.focus(); }
|
|
151
|
-
else if (e.key === "Home") { e.preventDefault(); all[0]?.focus(); }
|
|
152
|
-
else if (e.key === "End") { e.preventDefault(); all[all.length - 1]?.focus(); }
|
|
153
|
-
else if (e.key === "Tab") onClose(false);
|
|
154
|
-
}
|
|
155
|
-
const choose = (item) => { onClose(true); item.onSelect(); };
|
|
156
|
-
return html`<div data-trust="menu" ref=${list} class="menu-list tb-card-menu" role="menu" aria-label=${label} onKeyDown=${onKey} onContextMenu=${(e) => e.preventDefault()}>
|
|
157
|
-
${items.map((item) => item.heading
|
|
158
|
-
? html`<div key=${item.key} class=${`menu-heading${item.label ? "" : " bare"}`} role="presentation">${item.label}</div>`
|
|
159
|
-
: item.checked !== undefined
|
|
160
|
-
? html`<button key=${item.key} type="button" role="menuitemradio" aria-checked=${item.checked ? "true" : "false"} class="menu-item menu-radio" onClick=${() => choose(item)}>
|
|
161
|
-
<span class="menu-tick" aria-hidden="true">${item.checked ? html`<${Icon} name="check" size=${16} />` : null}</span><span>${item.label}</span></button>`
|
|
162
|
-
: html`<button key=${item.key} type="button" role="menuitem" class=${`menu-item${item.danger ? " danger" : ""}`} onClick=${() => choose(item)}>
|
|
163
|
-
${item.dot ? html`<span class=${`tb-dot st-${item.dot}`} aria-hidden="true"></span>` : item.icon ? html`<${Icon} name=${item.icon} size=${16} />` : null}<span>${item.label}</span></button>`)}
|
|
164
|
-
</div>`;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** The open card's Previous / Next, with where it is ("3 of 12"), for the dialog's header. */
|
|
168
|
-
export function StepButtons({ steps, onOpen }) {
|
|
169
|
-
// K / J step as Linear's do — not while typing (a field, a select, an editable text) nor with a modifier.
|
|
170
|
-
useEffect(() => {
|
|
171
|
-
const onKey = (e) => {
|
|
172
|
-
if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || (e.key !== "j" && e.key !== "k")) return;
|
|
173
|
-
const el = e.target;
|
|
174
|
-
if (el && (el.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName || ""))) return;
|
|
175
|
-
const to = e.key === "j" ? steps.next : steps.prev;
|
|
176
|
-
if (!to) return;
|
|
177
|
-
e.preventDefault();
|
|
178
|
-
onOpen(to);
|
|
179
|
-
};
|
|
180
|
-
document.addEventListener("keydown", onKey);
|
|
181
|
-
return () => document.removeEventListener("keydown", onKey);
|
|
182
|
-
}, [steps.prev, steps.next]);
|
|
183
|
-
return html`<span class="tc-steps">
|
|
184
|
-
<button type="button" class="icon-btn" disabled=${!steps.prev} title=${t("taskmenu.prev")} aria-label=${t("taskmenu.prev")} onClick=${() => steps.prev && onOpen(steps.prev)}><${Icon} name="up" size=${16} /></button>
|
|
185
|
-
<span class="muted tc-step-at" aria-live="polite">${t("taskmenu.position", steps.at, steps.total)}</span>
|
|
186
|
-
<button type="button" class="icon-btn" disabled=${!steps.next} title=${t("taskmenu.next")} aria-label=${t("taskmenu.next")} onClick=${() => steps.next && onOpen(steps.next)}><${Icon} name="down" size=${16} /></button>
|
|
187
|
-
</span>`;
|
|
188
|
-
}
|