@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,124 +0,0 @@
|
|
|
1
|
-
// #2246 follow-up, after Linear's Insights (as Circle, ln-dev7/circle, draws them): a project's cards counted — per
|
|
2
|
-
// assignee (each instance's load), status, priority or size — each row a bar split by status, priority or size, with
|
|
3
|
-
// its numbers. Main tasks alone, or every card with the sub tasks (the steps instances work on). It counts what the
|
|
4
|
-
// board shows: its filter, and finished cards as its Done column has them (the last 7 days', or all). No style
|
|
5
|
-
// attribute anywhere (the CSP): the bars are SVG rects coloured by class.
|
|
6
|
-
import { html, useState } from "/assets/app-html.js";
|
|
7
|
-
import { t, register } from "/assets/app-i18n.js";
|
|
8
|
-
import { Dialog } from "/assets/ui-dialog.js";
|
|
9
|
-
import { COLUMNS, Who, readStored, writeStored } from "./fleet-task-common.js";
|
|
10
|
-
|
|
11
|
-
register("taskstats", {
|
|
12
|
-
en: {
|
|
13
|
-
button: "Insights", buttonTip: "Count this project's cards: per assignee, status, priority or size",
|
|
14
|
-
title: "Insights: {0}", count: "Count", countAll: "All cards", countMain: "Main tasks only",
|
|
15
|
-
rows: "Rows", split: "Split by", splitNone: "Nothing",
|
|
16
|
-
"field.assignee": "Assignee", "field.status": "Status", "field.priority": "Priority", "field.size": "Size",
|
|
17
|
-
total: "Total", cards: "{0} cards", empty: "No cards to count here", chart: "{0} by {1}",
|
|
18
|
-
note: "It counts the cards the board shows: with its filter, and finished cards as the Done column has them (the last 7 days, or all).",
|
|
19
|
-
},
|
|
20
|
-
"zh-TW": {
|
|
21
|
-
button: "統計", buttonTip: "統計這個專案的卡:依負責人、狀態、優先度或大小",
|
|
22
|
-
title: "統計:{0}", count: "計算", countAll: "所有卡", countMain: "只算主任務",
|
|
23
|
-
rows: "每一列", split: "細分", splitNone: "不細分",
|
|
24
|
-
"field.assignee": "負責人", "field.status": "狀態", "field.priority": "優先度", "field.size": "大小",
|
|
25
|
-
total: "合計", cards: "{0} 張卡", empty: "這裡沒有可以統計的卡", chart: "{0},依{1}",
|
|
26
|
-
note: "統計的是看板上顯示的卡:套用看板的篩選;已完成的卡照完成欄顯示的算(近 7 天或全部)。",
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// ── The numbers (pure: tests import these) ────────────────
|
|
31
|
-
|
|
32
|
-
export const FIELDS = ["assignee", "status", "priority", "size"];
|
|
33
|
-
const NONE = "~";
|
|
34
|
-
const ORDER = { status: COLUMNS, priority: ["urgent", "high", "normal", "low"], size: ["S", "M", "L", NONE] };
|
|
35
|
-
export const DEFAULT_INSIGHT = Object.freeze({ count: "all", rows: "assignee", split: "status" });
|
|
36
|
-
const KEY = "agend_tasks_insights";
|
|
37
|
-
|
|
38
|
-
/** A card's value for a field: nobody's and not sized are NONE. */
|
|
39
|
-
const valueOf = (card, field) => (field === "assignee" ? card.assignee || NONE : field === "size" ? card.size || NONE : card[field]);
|
|
40
|
-
|
|
41
|
-
/** Choices from anything stored: each one known, else its default; a split on the rows' own field is no split. */
|
|
42
|
-
export function cleanInsight(raw) {
|
|
43
|
-
const d = raw && typeof raw === "object" ? raw : {};
|
|
44
|
-
const rows = FIELDS.includes(d.rows) ? d.rows : DEFAULT_INSIGHT.rows;
|
|
45
|
-
const split = d.split === "none" || (FIELDS.includes(d.split) && d.split !== "assignee") ? d.split : DEFAULT_INSIGHT.split;
|
|
46
|
-
return { count: d.count === "main" ? "main" : "all", rows, split: split === rows ? "none" : split };
|
|
47
|
-
}
|
|
48
|
-
export function readInsight() {
|
|
49
|
-
try { return cleanInsight(JSON.parse(readStored(KEY, "{}"))); } catch { return { ...DEFAULT_INSIGHT }; }
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The project's cards counted: a row per value of `rows` (assignees by most cards first, nobody last; statuses as the
|
|
54
|
-
* columns; priorities from urgent; sizes S, M, L, not sized), each with its parts per value of `split` and its total.
|
|
55
|
-
*/
|
|
56
|
-
export function insight(cards, choice) {
|
|
57
|
-
const counted = choice.count === "main" ? cards.filter((c) => c.kind === "main") : cards;
|
|
58
|
-
const parts = choice.split === "none" ? ["all"] : ORDER[choice.split];
|
|
59
|
-
const by = new Map();
|
|
60
|
-
for (const c of counted) {
|
|
61
|
-
const k = valueOf(c, choice.rows);
|
|
62
|
-
const row = by.get(k) || { key: k, total: 0, parts: Object.fromEntries(parts.map((p) => [p, 0])) };
|
|
63
|
-
row.total++;
|
|
64
|
-
const p = choice.split === "none" ? "all" : valueOf(c, choice.split);
|
|
65
|
-
if (p in row.parts) row.parts[p]++;
|
|
66
|
-
by.set(k, row);
|
|
67
|
-
}
|
|
68
|
-
let rows = [...by.values()];
|
|
69
|
-
if (choice.rows === "assignee") rows.sort((a, b) => (a.key === NONE) - (b.key === NONE) || b.total - a.total || a.key.localeCompare(b.key));
|
|
70
|
-
else rows = ORDER[choice.rows].filter((k) => by.has(k)).map((k) => by.get(k));
|
|
71
|
-
return { rows, parts, max: Math.max(0, ...rows.map((r) => r.total)), total: counted.length };
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// ── The dialog ────────────────────────────────────────────
|
|
75
|
-
|
|
76
|
-
const word = (field, v) => {
|
|
77
|
-
if (v === NONE) return field === "size" ? t("tasks.sizeNone") : t("tasks.nobody");
|
|
78
|
-
return field === "size" ? t(`tasks.size${v}`) : t(`tasks.${v}`);
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/** One row's bar: its parts side by side, the longest row's total the full width. */
|
|
82
|
-
function Bar({ row, parts, split, max }) {
|
|
83
|
-
let x = 0;
|
|
84
|
-
return html`<svg class="ts-bar" viewBox="0 0 100 10" preserveAspectRatio="none" aria-hidden="true" focusable="false">
|
|
85
|
-
<rect class="ts-track" width="100" height="10" />
|
|
86
|
-
${parts.map((p) => {
|
|
87
|
-
const w = max ? (row.parts[p] / max) * 100 : 0;
|
|
88
|
-
const seg = w > 0 ? html`<rect key=${p} class=${`ts-seg ${split}-${p === NONE ? "none" : p}`} x=${x} width=${w} height="10" />` : null;
|
|
89
|
-
x += w;
|
|
90
|
-
return seg;
|
|
91
|
-
})}</svg>`;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** Insights on a project's cards (those the board has): the choices, a bar per row, the numbers, a legend. */
|
|
95
|
-
export function InsightsDialog({ name, cards, onClose }) {
|
|
96
|
-
const [choice, setRaw] = useState(readInsight);
|
|
97
|
-
const set = (patch) => { const next = cleanInsight({ ...choice, ...patch }); setRaw(next); writeStored(KEY, JSON.stringify(next)); };
|
|
98
|
-
const data = insight(cards, choice);
|
|
99
|
-
const split = choice.split;
|
|
100
|
-
const select = (label, value, options, onChange) => html`<label class="field ts-pick"><span>${label}</span>
|
|
101
|
-
<select class="tb-select" value=${value} onChange=${(e) => onChange(e.target.value)}>${options.map(([v, l]) => html`<option key=${v} value=${v}>${l}</option>`)}</select></label>`;
|
|
102
|
-
return html`<${Dialog} title=${t("taskstats.title", name)} onClose=${onClose} wide drawer>
|
|
103
|
-
<div class="ts">
|
|
104
|
-
<div class="ts-choices">
|
|
105
|
-
${select(t("taskstats.count"), choice.count, [["all", t("taskstats.countAll")], ["main", t("taskstats.countMain")]], (v) => set({ count: v }))}
|
|
106
|
-
${select(t("taskstats.rows"), choice.rows, FIELDS.map((f) => [f, t(`taskstats.field.${f}`)]), (v) => set({ rows: v }))}
|
|
107
|
-
${select(t("taskstats.split"), split, [["none", t("taskstats.splitNone")], ...FIELDS.filter((f) => f !== "assignee" && f !== choice.rows).map((f) => [f, t(`taskstats.field.${f}`)])], (v) => set({ split: v }))}
|
|
108
|
-
</div>
|
|
109
|
-
${data.rows.length === 0 ? html`<p class="muted">${t("taskstats.empty")}</p>` : html`
|
|
110
|
-
<p class="ts-sum"><b>${t("taskstats.cards", data.total)}</b></p>
|
|
111
|
-
${split === "none" ? null : html`<ul class="ts-legend" aria-hidden="true">${data.parts.map((p) => html`<li key=${p}><span class=${`ts-key ${split}-${p === NONE ? "none" : p}`}></span>${word(split, p)}</li>`)}</ul>`}
|
|
112
|
-
<div class="ts-scroll"><table class="ts-table">
|
|
113
|
-
<caption class="sr-only">${t("taskstats.chart", t(`taskstats.field.${choice.rows}`), split === "none" ? t("taskstats.total") : t(`taskstats.field.${split}`))}</caption>
|
|
114
|
-
<thead><tr><th scope="col">${t(`taskstats.field.${choice.rows}`)}</th><th scope="col" class="ts-n">${t("taskstats.total")}</th><th scope="col" class="ts-bar-col"></th>
|
|
115
|
-
${split === "none" ? null : data.parts.map((p) => html`<th key=${p} scope="col" class="ts-n ts-part">${word(split, p)}</th>`)}</tr></thead>
|
|
116
|
-
<tbody>${data.rows.map((r) => html`<tr key=${r.key}>
|
|
117
|
-
<th scope="row">${choice.rows === "assignee" ? html`<${Who} name=${r.key === NONE ? null : r.key} empty=${t("tasks.nobody")} />` : word(choice.rows, r.key)}</th>
|
|
118
|
-
<td class="ts-n ts-total">${r.total}</td>
|
|
119
|
-
<td class="ts-bar-col"><${Bar} row=${r} parts=${data.parts} split=${split} max=${data.max} /></td>
|
|
120
|
-
${split === "none" ? null : data.parts.map((p) => html`<td key=${p} class=${`ts-n ts-part${r.parts[p] ? "" : " zero"}`}>${r.parts[p]}</td>`)}</tr>`)}</tbody>
|
|
121
|
-
</table></div>`}
|
|
122
|
-
<p class="muted ts-note">${t("taskstats.note")}</p>
|
|
123
|
-
</div></${Dialog}>`;
|
|
124
|
-
}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
// #2246 follow-up, after Linear's Display and Filter (as Circle, ln-dev7/circle, draws them): a project's main tasks as
|
|
2
|
-
// a list beside the board, and filters (Fleet › Tasks). The board keeps its status columns (a drop there moves the
|
|
3
|
-
// card); the list shows the same main tasks a row each, grouped by status, assignee or priority, in the board's order,
|
|
4
|
-
// by priority, by last change, newest first or by title — and their sub tasks as rows of their own when asked.
|
|
5
|
-
// Filters stack (each "is" or "is not" some values; a main task stays when it or one of its sub tasks matches them all)
|
|
6
|
-
// and ride in the address with the project (`?tp=`, `?tf=`), so a filtered board can be sent as a link; the last ones
|
|
7
|
-
// and the display choices are remembered on this device. No style attribute anywhere (the CSP).
|
|
8
|
-
import { html } from "/assets/app-html.js";
|
|
9
|
-
import { t, register, lang } from "/assets/app-i18n.js";
|
|
10
|
-
import { Icon } from "/assets/ui-icons.js";
|
|
11
|
-
import { Menu } from "/assets/ui-menu.js";
|
|
12
|
-
import { COLUMNS, ProgressBar, UNASSIGNED, Who, readStored, recentlyDone, relTime, reviewLabel, waitsForYou, wrapUpText, writeStored } from "./fleet-task-common.js";
|
|
13
|
-
|
|
14
|
-
/** The task board's stylesheet, linked once (a tab opened before an upgrade has an app.css without these rules). */
|
|
15
|
-
export function linkTaskBoardCss(doc = typeof document !== "undefined" ? document : null) {
|
|
16
|
-
try {
|
|
17
|
-
if (!doc || !doc.head || doc.querySelector('link[data-tb-css="1"]')) return;
|
|
18
|
-
const link = doc.createElement("link");
|
|
19
|
-
link.setAttribute("rel", "stylesheet"); link.setAttribute("href", "/assets/task-board.css"); link.setAttribute("data-tb-css", "1");
|
|
20
|
-
doc.head.appendChild(link);
|
|
21
|
-
} catch { /* the board still works without it */ }
|
|
22
|
-
}
|
|
23
|
-
linkTaskBoardCss();
|
|
24
|
-
|
|
25
|
-
// The Filter icon, drawn here: a tab opened before an upgrade has a ui-icons.js without it.
|
|
26
|
-
const FilterIcon = () => html`<svg class="icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
27
|
-
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M3 5h18l-7 8.5V19l-4 2v-7.5z"/></svg>`;
|
|
28
|
-
/** A labelled menu button, with only the Menu props an older cached ui-menu.js has (`trigger`, `triggerClass`). */
|
|
29
|
-
function TextMenu({ cls, icon, text, tip, active = false, items }) {
|
|
30
|
-
const glyph = icon === "filter" ? html`<${FilterIcon} />` : icon ? html`<${Icon} name=${icon} size=${16} />` : null;
|
|
31
|
-
return html`<${Menu} cls=${cls} label=${tip ? `${text}, ${tip}` : text} active=${active} items=${items}
|
|
32
|
-
triggerClass="btn btn-sm menu-text" trigger=${html`${glyph}<span>${text}</span>`} />`;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
register("taskview", {
|
|
36
|
-
en: {
|
|
37
|
-
display: "Display", displayTip: "Board or list, grouping, order, finished cards", filter: "Filter", filterTip: "Show only some cards",
|
|
38
|
-
view: "View", board: "Board", list: "List", groupBy: "Group by", orderBy: "Order by", finished: "Finished cards", doneHide: "Hidden",
|
|
39
|
-
"group.status": "Status", "group.assignee": "Assignee", "group.priority": "Priority", "group.none": "No grouping",
|
|
40
|
-
"order.manual": "Board order", "order.priority": "Priority", "order.updated": "Last change", "order.created": "Newest first", "order.title": "Title",
|
|
41
|
-
subsRows: "Sub tasks as rows of their own",
|
|
42
|
-
fieldstatus: "Status", fieldassignee: "Assignee", fieldpriority: "Priority", fieldsize: "Size",
|
|
43
|
-
filters: "Filters", is: "is", isNot: "is not", opTip: "Switch between is and is not", values: "{0}: choose values",
|
|
44
|
-
nValues: "{0} values", remove: "Remove this filter", clear: "Clear filters", changed: "Changed {0}", inMain: "Sub task of {0} {1}",
|
|
45
|
-
},
|
|
46
|
-
"zh-TW": {
|
|
47
|
-
display: "顯示", displayTip: "看板或清單、分組、排序、已完成的卡", filter: "篩選", filterTip: "只看部分卡片",
|
|
48
|
-
view: "檢視", board: "看板", list: "清單", groupBy: "分組", orderBy: "排序", finished: "已完成的卡", doneHide: "隱藏",
|
|
49
|
-
"group.status": "狀態", "group.assignee": "負責人", "group.priority": "優先度", "group.none": "不分組",
|
|
50
|
-
"order.manual": "看板順序", "order.priority": "優先度", "order.updated": "最近變動", "order.created": "最新建立", "order.title": "標題",
|
|
51
|
-
subsRows: "子任務也各列一行",
|
|
52
|
-
fieldstatus: "狀態", fieldassignee: "負責人", fieldpriority: "優先度", fieldsize: "大小",
|
|
53
|
-
filters: "篩選條件", is: "是", isNot: "不是", opTip: "切換「是」與「不是」", values: "{0}:選擇項目",
|
|
54
|
-
nValues: "{0} 項", remove: "移除這個條件", clear: "清除篩選", changed: "{0}變動", inMain: "{0} {1} 的子任務",
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// ── What is shown (pure: tests import these) ─────────────────
|
|
59
|
-
|
|
60
|
-
export const VIEWS = ["board", "list"];
|
|
61
|
-
export const GROUPS = ["status", "assignee", "priority", "none"];
|
|
62
|
-
export const ORDERS = ["manual", "priority", "updated", "created", "title"];
|
|
63
|
-
export const DONE_SHOWN = ["recent", "all", "hide"];
|
|
64
|
-
export const DEFAULT_DISPLAY = Object.freeze({ view: "board", group: "status", order: "manual", done: "recent", subs: false });
|
|
65
|
-
const DISPLAY_KEY = "agend_tasks_display";
|
|
66
|
-
|
|
67
|
-
/** Display choices from anything (a stored value, an older page's): each one known, else its default. */
|
|
68
|
-
export function cleanDisplay(raw) {
|
|
69
|
-
const d = raw && typeof raw === "object" ? raw : {};
|
|
70
|
-
const pick = (k, list) => (list.includes(d[k]) ? d[k] : DEFAULT_DISPLAY[k]);
|
|
71
|
-
return { view: pick("view", VIEWS), group: pick("group", GROUPS), order: pick("order", ORDERS), done: pick("done", DONE_SHOWN), subs: d.subs === true };
|
|
72
|
-
}
|
|
73
|
-
export function readDisplay() {
|
|
74
|
-
try { return cleanDisplay(JSON.parse(readStored(DISPLAY_KEY, "{}"))); } catch { return { ...DEFAULT_DISPLAY }; }
|
|
75
|
-
}
|
|
76
|
-
export const writeDisplay = (d) => writeStored(DISPLAY_KEY, JSON.stringify(cleanDisplay(d)));
|
|
77
|
-
|
|
78
|
-
/** Whether a card is shown for its finish: unfinished always; finished ones of the last 7 days (the default), all, or none. */
|
|
79
|
-
export function doneShown(card, done, now = Date.now()) {
|
|
80
|
-
if (card.status !== "done") return true;
|
|
81
|
-
return done === "all" || (done === "recent" && recentlyDone(card, now));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export const FILTER_FIELDS = ["status", "assignee", "priority", "size"];
|
|
85
|
-
/** A filter's value for "nobody" (assignee) and "not sized" (size). */
|
|
86
|
-
export const NONE = "~";
|
|
87
|
-
const PRIORITIES = ["urgent", "high", "normal", "low"];
|
|
88
|
-
const KNOWN = { status: COLUMNS, priority: PRIORITIES, size: ["S", "M", "L", NONE] };
|
|
89
|
-
const FILTERS_KEY = "agend_tasks_filters";
|
|
90
|
-
const LEGACY_ASSIGNEE = "agend_tasks_assignee"; // the board's one assignee filter before these
|
|
91
|
-
|
|
92
|
-
/** A card's value for a filter's field. */
|
|
93
|
-
export function valueOf(card, field) {
|
|
94
|
-
if (field === "assignee") return card.assignee || NONE;
|
|
95
|
-
if (field === "size") return card.size || NONE;
|
|
96
|
-
return card[field];
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Whether a card matches every filter. */
|
|
100
|
-
export const cardMatches = (card, filters) => filters.every((f) => f.values.includes(valueOf(card, f.field)) !== f.not);
|
|
101
|
-
|
|
102
|
-
/** A main task stays when it, or one of its sub tasks, matches every filter. */
|
|
103
|
-
export const mainMatches = (main, subs, filters) => cardMatches(main, filters) || (subs || []).some((s) => cardMatches(s, filters));
|
|
104
|
-
|
|
105
|
-
// In the address: `field:a,b;field!:c` — "!" is "is not"; a value's own , ; : ! % ~ are %-escaped, so a bare ~ is NONE.
|
|
106
|
-
const esc = (v) => (v === NONE ? NONE : v.replace(/[%,;:!~]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`));
|
|
107
|
-
|
|
108
|
-
export function formatFilters(filters) {
|
|
109
|
-
return filters.map((f) => `${f.field}${f.not ? "!" : ""}:${f.values.map(esc).join(",")}`).join(";");
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/** Filters from their address form: unknown fields and values are dropped, and a field counts once (its first). */
|
|
113
|
-
export function parseFilters(text) {
|
|
114
|
-
const out = [];
|
|
115
|
-
for (const part of String(text || "").split(";")) {
|
|
116
|
-
const m = /^([a-z]+)(!?):(.*)$/.exec(part);
|
|
117
|
-
if (!m || !FILTER_FIELDS.includes(m[1]) || out.some((f) => f.field === m[1])) continue;
|
|
118
|
-
const values = [];
|
|
119
|
-
for (const raw of m[3].split(",")) {
|
|
120
|
-
let v = raw;
|
|
121
|
-
if (raw !== NONE) { try { v = decodeURIComponent(raw); } catch { continue; } }
|
|
122
|
-
if (!v || values.includes(v) || (KNOWN[m[1]] && !KNOWN[m[1]].includes(v))) continue;
|
|
123
|
-
values.push(v);
|
|
124
|
-
}
|
|
125
|
-
if (values.length) out.push({ field: m[1], not: m[2] === "!", values });
|
|
126
|
-
}
|
|
127
|
-
return out;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** The filters a board starts with: the address's, else the last ones on this device (or the old assignee filter's). */
|
|
131
|
-
export function startFilters(search) {
|
|
132
|
-
let q;
|
|
133
|
-
try { q = new URLSearchParams(search || ""); } catch { q = new URLSearchParams(); }
|
|
134
|
-
if (q.has("tf")) return parseFilters(q.get("tf"));
|
|
135
|
-
const kept = readStored(FILTERS_KEY, null);
|
|
136
|
-
if (kept !== null) return parseFilters(kept);
|
|
137
|
-
const legacy = readStored(LEGACY_ASSIGNEE, "");
|
|
138
|
-
return legacy ? [{ field: "assignee", not: false, values: [legacy === UNASSIGNED ? NONE : legacy] }] : [];
|
|
139
|
-
}
|
|
140
|
-
export function keepFilters(filters) {
|
|
141
|
-
writeStored(FILTERS_KEY, formatFilters(filters));
|
|
142
|
-
writeStored(LEGACY_ASSIGNEE, null);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/** Ticking a value: into that field's filter (made when there is none), or out of it (gone with its last value). */
|
|
146
|
-
export function toggleValue(filters, field, v) {
|
|
147
|
-
const f = filters.find((x) => x.field === field);
|
|
148
|
-
if (!f) return [...filters, { field, not: false, values: [v] }];
|
|
149
|
-
const values = f.values.includes(v) ? f.values.filter((x) => x !== v) : [...f.values, v];
|
|
150
|
-
return values.length ? filters.map((x) => (x === f ? { ...f, values } : x)) : filters.filter((x) => x !== f);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** The values a field offers: every status, priority and size; the assignees of the project's cards (and the filter's). */
|
|
154
|
-
export function fieldValues(field, cards, filter = null) {
|
|
155
|
-
if (field !== "assignee") return KNOWN[field];
|
|
156
|
-
const names = new Set(cards.map((c) => c.assignee).filter(Boolean));
|
|
157
|
-
for (const v of filter ? filter.values : []) if (v !== NONE) names.add(v);
|
|
158
|
-
return [...names].sort((a, b) => a.localeCompare(b)).concat(NONE);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* The list's rows: the main tasks shown — or, with sub tasks as rows, each main task that matches the filters itself
|
|
163
|
-
* and its sub tasks that do (and are shown for their finish), each sub task right after its main task.
|
|
164
|
-
*/
|
|
165
|
-
export function listRows(mains, subsOf, display, filters, now = Date.now()) {
|
|
166
|
-
if (!display.subs) return mains;
|
|
167
|
-
const out = [];
|
|
168
|
-
for (const m of mains) {
|
|
169
|
-
if (cardMatches(m, filters)) out.push(m);
|
|
170
|
-
for (const s of subsOf.get(m.id) || []) if (doneShown(s, display.done, now) && cardMatches(s, filters)) out.push(s);
|
|
171
|
-
}
|
|
172
|
-
return out;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const PRIORITY_RANK = { urgent: 0, high: 1, normal: 2, low: 3 };
|
|
176
|
-
/** Rows in an order: the board's (a sub task right after its main task), by priority, last change, newest, or title. */
|
|
177
|
-
export function orderRows(rows, order, byId = new Map()) {
|
|
178
|
-
const place = (c) => {
|
|
179
|
-
const main = c.kind === "sub" ? byId.get(c.parentId) : null;
|
|
180
|
-
return main ? [main.sort, 1, c.sort] : [c.sort, 0, 0];
|
|
181
|
-
};
|
|
182
|
-
const manual = (a, b) => { const x = place(a), y = place(b); return x[0] - y[0] || x[1] - y[1] || x[2] - y[2]; };
|
|
183
|
-
const by = {
|
|
184
|
-
manual,
|
|
185
|
-
priority: (a, b) => (PRIORITY_RANK[a.priority] ?? 2) - (PRIORITY_RANK[b.priority] ?? 2) || manual(a, b),
|
|
186
|
-
updated: (a, b) => String(b.updatedAt).localeCompare(String(a.updatedAt)) || manual(a, b),
|
|
187
|
-
created: (a, b) => String(b.createdAt).localeCompare(String(a.createdAt)) || manual(a, b),
|
|
188
|
-
title: (a, b) => a.title.localeCompare(b.title, lang()) || manual(a, b),
|
|
189
|
-
}[order] || manual;
|
|
190
|
-
return [...rows].sort(by);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/** Rows in groups, in a fixed order: statuses as the board's columns, priorities from urgent, assignees by name (nobody last). */
|
|
194
|
-
export function groupRows(rows, group) {
|
|
195
|
-
if (group === "none") return rows.length ? [{ key: "all", rows }] : [];
|
|
196
|
-
const keys = group === "status" ? COLUMNS : group === "priority" ? PRIORITIES
|
|
197
|
-
: [...new Set(rows.map((r) => r.assignee).filter(Boolean))].sort((a, b) => a.localeCompare(b)).concat(NONE);
|
|
198
|
-
return keys.map((key) => ({ key, rows: rows.filter((r) => valueOf(r, group) === key) })).filter((g) => g.rows.length);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/** A filter value in words: a status, a priority, a size, an assignee (nobody: "Unassigned"; not sized: "Not sized"). */
|
|
202
|
-
export function valueWord(field, v) {
|
|
203
|
-
if (v === NONE) return field === "size" ? t("tasks.sizeNone") : t("tasks.nobody");
|
|
204
|
-
if (field === "status" || field === "priority") return t(`tasks.${v}`);
|
|
205
|
-
if (field === "size") return t(`tasks.size${v}`);
|
|
206
|
-
return v;
|
|
207
|
-
}
|
|
208
|
-
const listJoin = (words) => words.join(lang() === "zh-TW" ? "、" : ", ");
|
|
209
|
-
|
|
210
|
-
// ── The header's Filter and Display, and the filters' chips ───────
|
|
211
|
-
|
|
212
|
-
/** Filter: each field's values, ticked when its filter has them; a tick adds the value to (or takes it from) the filter. */
|
|
213
|
-
export function FilterMenu({ cards, filters, onChange }) {
|
|
214
|
-
const items = [];
|
|
215
|
-
for (const field of FILTER_FIELDS) {
|
|
216
|
-
const f = filters.find((x) => x.field === field) || null;
|
|
217
|
-
items.push({ key: `h-${field}`, heading: true, label: t(`taskview.field${field}`) });
|
|
218
|
-
for (const v of fieldValues(field, cards, f)) {
|
|
219
|
-
items.push({ key: `${field}:${v}`, checkbox: true, checked: !!f && f.values.includes(v), label: valueWord(field, v), onSelect: () => onChange(toggleValue(filters, field, v)) });
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return html`<${TextMenu} cls="tb-filter-menu" icon="filter" text=${t("taskview.filter")} tip=${t("taskview.filterTip")} active=${filters.length > 0} items=${items} />`;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** Display: board or list; the list's grouping, order and sub-task rows; which finished cards show. */
|
|
226
|
-
export function DisplayMenu({ display, onChange }) {
|
|
227
|
-
const d = display;
|
|
228
|
-
const list = d.view === "list";
|
|
229
|
-
const radio = (k, v, label) => ({ key: `${k}-${v}`, label, checked: d[k] === v, onSelect: () => onChange({ ...d, [k]: v }) });
|
|
230
|
-
const items = [
|
|
231
|
-
{ key: "h-view", heading: true, label: t("taskview.view") },
|
|
232
|
-
radio("view", "board", t("taskview.board")), radio("view", "list", t("taskview.list")),
|
|
233
|
-
list && { key: "h-group", heading: true, label: t("taskview.groupBy") },
|
|
234
|
-
...(list ? GROUPS.map((g) => radio("group", g, t(`taskview.group.${g}`))) : []),
|
|
235
|
-
list && { key: "h-order", heading: true, label: t("taskview.orderBy") },
|
|
236
|
-
...(list ? ORDERS.map((o) => radio("order", o, t(`taskview.order.${o}`))) : []),
|
|
237
|
-
list && { key: "subs", checkbox: true, checked: d.subs, label: t("taskview.subsRows"), onSelect: () => onChange({ ...d, subs: !d.subs }) },
|
|
238
|
-
{ key: "h-done", heading: true, label: t("taskview.finished") },
|
|
239
|
-
radio("done", "recent", t("tasks.recent")), radio("done", "all", t("tasks.all")), radio("done", "hide", t("taskview.doneHide")),
|
|
240
|
-
];
|
|
241
|
-
// Pressed while it shows something other than the defaults (beyond board or list, which is plain to see).
|
|
242
|
-
const changed = ["group", "order", "done", "subs"].some((k) => d[k] !== DEFAULT_DISPLAY[k]);
|
|
243
|
-
return html`<${TextMenu} cls="tb-view-menu" icon="sliders" text=${t("taskview.display")} tip=${t("taskview.displayTip")} active=${changed} items=${items} />`;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/** The filters in force, a chip each: its field, is / is not (a click switches), its values (a menu), and remove. */
|
|
247
|
-
export function FilterBar({ cards, filters, onChange }) {
|
|
248
|
-
if (!filters.length) return null;
|
|
249
|
-
return html`<div class="tb-filters" role="group" aria-label=${t("taskview.filters")}>
|
|
250
|
-
${filters.map((f) => {
|
|
251
|
-
const field = t(`taskview.field${f.field}`);
|
|
252
|
-
const shown = f.values.length <= 2 ? listJoin(f.values.map((v) => valueWord(f.field, v))) : t("taskview.nValues", f.values.length);
|
|
253
|
-
return html`<span key=${f.field} class=${`tb-chip${f.not ? " not" : ""}`}>
|
|
254
|
-
<span class="tb-chip-field">${field}</span>
|
|
255
|
-
<button type="button" class="tb-chip-op" title=${t("taskview.opTip")} aria-label=${`${field} ${f.not ? t("taskview.isNot") : t("taskview.is")} — ${t("taskview.opTip")}`}
|
|
256
|
-
onClick=${() => onChange(filters.map((x) => (x === f ? { ...f, not: !f.not } : x)))}>${f.not ? t("taskview.isNot") : t("taskview.is")}</button>
|
|
257
|
-
<${TextMenu} cls="tb-chip-menu" icon="" text=${shown} tip=${t("taskview.values", field)}
|
|
258
|
-
items=${fieldValues(f.field, cards, f).map((v) => ({ key: v, checkbox: true, checked: f.values.includes(v), label: valueWord(f.field, v), onSelect: () => onChange(toggleValue(filters, f.field, v)) }))} />
|
|
259
|
-
<button type="button" class="tb-chip-x" title=${t("taskview.remove")} aria-label=${`${t("taskview.remove")}: ${field}`} onClick=${() => onChange(filters.filter((x) => x !== f))}><${Icon} name="close" size=${14} /></button>
|
|
260
|
-
</span>`;
|
|
261
|
-
})}
|
|
262
|
-
<button type="button" class="tb-link" onClick=${() => onChange([])}>${t("taskview.clear")}</button>
|
|
263
|
-
</div>`;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// ── The list ──────────────────────────────────────────────
|
|
267
|
-
|
|
268
|
-
/** A main task's sub tasks, opened up under it (the board's tile and the list's row). */
|
|
269
|
-
export function SubList({ subs, older = 0, onOpen }) {
|
|
270
|
-
return html`<ul class="tb-subs" onClick=${(e) => e.stopPropagation()}>
|
|
271
|
-
${subs.map((s) => html`<li key=${s.id}><button type="button" onClick=${() => onOpen(s.id)} title=${`${s.id} ${s.title} (${t(`tasks.${s.status}`)})`}>
|
|
272
|
-
<span class=${`tb-dot st-${s.status}`} aria-label=${t(`tasks.${s.status}`)}></span><span class="tb-code">${s.id}</span><span class="tb-sub-title">${s.title}</span>
|
|
273
|
-
${s.assignee ? html`<span class="tb-who">${s.assignee}</span>` : null}</button>
|
|
274
|
-
${s.status === "blocked" && s.blockedReason ? html`<div class="tb-sub-blocked">${s.blockedReason}</div>` : null}</li>`)}
|
|
275
|
-
${older > 0 ? html`<li class="muted tb-sub-more">${t("tasks.olderSubs", older)}</li>` : null}
|
|
276
|
-
</ul>`;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function groupHead(group, key) {
|
|
280
|
-
if (group === "status") return html`<span class=${`tb-dot st-${key}`}></span><span>${t(`tasks.${key}`)}</span>`;
|
|
281
|
-
if (group === "assignee") return html`<${Who} name=${key === NONE ? null : key} empty=${t("tasks.nobody")} />`;
|
|
282
|
-
return html`<span class=${`tb-tag p-${key}`}>${t(`tasks.${key}`)}</span>`;
|
|
283
|
-
}
|
|
284
|
-
const groupWord = (group, key) => (group === "assignee" ? (key === NONE ? t("tasks.nobody") : key) : t(`tasks.${key}`));
|
|
285
|
-
const longTime = (iso) => { const d = new Date(iso); return Number.isFinite(d.getTime()) ? d.toLocaleString(lang() === "zh-TW" ? "zh-TW" : "en") : ""; };
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* The list: a row per card in groups, each headed by its status, assignee or priority with its count. A row opens its
|
|
289
|
-
* card; a main task's sub-task progress opens up its sub tasks under it (unless they are rows already).
|
|
290
|
-
*/
|
|
291
|
-
export function ListView({ rows, display, subsOf, byId, flashed, now, expanded, onToggleSubs, onOpen }) {
|
|
292
|
-
const groups = groupRows(orderRows(rows, display.order, byId), display.group);
|
|
293
|
-
return html`<div class="tb-list">${groups.map((g) => html`<section key=${g.key} class="tb-group" aria-label=${display.group === "none" ? null : groupWord(display.group, g.key)}>
|
|
294
|
-
${display.group === "none" ? null : html`<h3 class=${`tb-group-head g-${display.group}`}>${groupHead(display.group, g.key)}<span class="tb-count">${g.rows.length}</span></h3>`}
|
|
295
|
-
<ul class="tb-rows">${g.rows.map((c) => {
|
|
296
|
-
const subs = subsOf.get(c.id) || [];
|
|
297
|
-
const lit = Math.max(flashed.get(c.id) || 0, ...(display.subs ? [] : subs.map((s) => flashed.get(s.id) || 0)));
|
|
298
|
-
return html`<${Row} key=${c.id} card=${c} subs=${subs} main=${c.kind === "sub" ? byId.get(c.parentId) : null} flash=${now - lit < 4000} now=${now}
|
|
299
|
-
subsAsRows=${display.subs} who=${display.group !== "assignee"} expanded=${!!expanded[c.id]} onToggleSubs=${() => onToggleSubs(c.id)} onOpen=${onOpen} />`;
|
|
300
|
-
})}</ul>
|
|
301
|
-
</section>`)}</div>`;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/** One card's row; its assignee is left out under an assignee's own heading. */
|
|
305
|
-
function Row({ card, subs, main, flash, now, subsAsRows, who, expanded, onToggleSubs, onOpen }) {
|
|
306
|
-
const progress = card.progress;
|
|
307
|
-
const hasSubs = card.kind === "main" && !!progress && progress.total > 0;
|
|
308
|
-
const accepted = card.acceptance.filter((a) => a.done).length;
|
|
309
|
-
const gap = card.status === "review" ? wrapUpText(card) : "";
|
|
310
|
-
const replied = card.lastComment && card.lastComment.authorKind !== "person";
|
|
311
|
-
const bar = hasSubs ? html`<${ProgressBar} progress=${progress} /><span>${t("tasks.subProgress", progress.done, progress.total)}</span>` : null;
|
|
312
|
-
return html`<li class=${`tb-row st-${card.status}${card.kind === "sub" ? " is-sub" : ""}${flash ? " flash" : ""}`} data-row=${card.id} onClick=${() => onOpen(card.id)}>
|
|
313
|
-
<div class="tb-row-line">
|
|
314
|
-
<span class=${`tb-dot st-${card.status}`} role="img" aria-label=${t(`tasks.${card.status}`)} title=${t(`tasks.${card.status}`)}></span>
|
|
315
|
-
<span class="tb-code">${card.id}</span>
|
|
316
|
-
${main ? html`<span class="tb-row-main" title=${t("taskview.inMain", main.id, main.title)}>${main.id} ›</span>` : null}
|
|
317
|
-
<span class="tb-row-text">
|
|
318
|
-
<button type="button" class="tb-row-title" onClick=${(e) => { e.stopPropagation(); onOpen(card.id); }}>${card.title}</button>
|
|
319
|
-
${card.status === "blocked" && card.blockedReason ? html`<span class="tb-row-note">${card.blockedReason}</span>` : null}
|
|
320
|
-
</span>
|
|
321
|
-
<span class="tb-row-tags">
|
|
322
|
-
${card.priority === "urgent" || card.priority === "high" ? html`<span class=${`tb-tag p-${card.priority}`}>${t(card.priority === "urgent" ? "tasks.urgentTag" : "tasks.highTag")}</span>` : null}
|
|
323
|
-
${card.status === "review" ? html`<span class=${`tb-tag st-review${waitsForYou(card) ? " you" : ""}`}>${reviewLabel(card)}</span>` : null}
|
|
324
|
-
${gap ? html`<span class="tb-tag wrapup" title=${t("tasks.wrapLine", gap)}>${t("tasks.wrapTag")}</span>` : null}
|
|
325
|
-
${card.size ? html`<span class="tb-size" title=${t("tasks.size")}>${t(`tasks.size${card.size}`)}</span>` : null}
|
|
326
|
-
</span>
|
|
327
|
-
${!hasSubs ? null : subsAsRows ? html`<span class="tb-row-progress">${bar}</span>`
|
|
328
|
-
: html`<button type="button" class="tb-row-progress" aria-expanded=${expanded ? "true" : "false"} title=${expanded ? t("tasks.hideSubs") : t("tasks.showSubs")}
|
|
329
|
-
onClick=${(e) => { e.stopPropagation(); onToggleSubs(); }}>${bar}<${Icon} name="chevron" size=${14} cls=${expanded ? "tb-chev open" : "tb-chev"} /></button>`}
|
|
330
|
-
<span class="tb-tile-stats">
|
|
331
|
-
${card.acceptance.length ? html`<span class=${accepted === card.acceptance.length ? "all" : ""} title=${t(card.kind === "main" ? "tasks.definition" : "tasks.acceptance")}><${Icon} name="check" size=${13} />${accepted}/${card.acceptance.length}</span>` : null}
|
|
332
|
-
${card.unmetDeps.length ? html`<span title=${t("tasks.waitsFor", card.unmetDeps.join(", "))}><${Icon} name="clock" size=${13} /></span>` : null}
|
|
333
|
-
${card.commentCount ? html`<span class=${replied ? "reply" : ""} title=${replied ? t("tasks.agentReplied") : t("tasks.comments")}><${Icon} name="chat" size=${13} />${card.commentCount}</span>` : null}
|
|
334
|
-
</span>
|
|
335
|
-
${who ? html`<span class="tb-row-who"><${Who} name=${card.assignee} empty=${t("tasks.nobody")} /></span>` : null}
|
|
336
|
-
<span class="tb-row-time muted" title=${t("taskview.changed", longTime(card.updatedAt))}>${relTime(card.updatedAt, now)}</span>
|
|
337
|
-
</div>
|
|
338
|
-
${hasSubs && expanded && !subsAsRows ? html`<${SubList} subs=${subs} older=${progress.total - subs.length} onOpen=${onOpen} />` : null}
|
|
339
|
-
</li>`;
|
|
340
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// The location is a separate revision-bound Settings operation, never an agent-config patch.
|
|
2
|
-
import { html, useEffect, useRef, useState } from "/assets/app-html.js";
|
|
3
|
-
import { t, register } from "/assets/app-i18n.js";
|
|
4
|
-
import { appStore, useStore, guestPage } from "/assets/app-store.js";
|
|
5
|
-
import { useLease } from "/assets/app-ctx.js";
|
|
6
|
-
import { toast } from "/assets/ui-toast.js";
|
|
7
|
-
import { confirmedWrite, newKey } from "./settings-confirm.js";
|
|
8
|
-
import { ModelSelect } from "./settings-dialogs.js";
|
|
9
|
-
register("generalLocation", {
|
|
10
|
-
en: {
|
|
11
|
-
label: "Run General on", host: "This AgEnD host", windows: "Paired Windows PC",
|
|
12
|
-
offline: "General’s Windows PC is offline. AgEnD is still running here. Reconnect that PC, or switch General back to this host in Settings. Pending or uncertain requests will not be sent again automatically.",
|
|
13
|
-
exit: "General was not switched: the previous process has not been confirmed stopped. Reconnect its PC or use the existing stopped-process recovery, then try again. No replacement was started.",
|
|
14
|
-
start: "General’s location was saved, but it could not start. Check Needs you and choose Start or switch back. Its previous conversation is kept; no input was replayed.",
|
|
15
|
-
history: "Host and Windows conversations stay separate. Switching does not copy or merge their history.",
|
|
16
|
-
},
|
|
17
|
-
"zh-TW": {
|
|
18
|
-
label: "General 執行位置", host: "這台 AgEnD 主機", windows: "已配對的 Windows 電腦",
|
|
19
|
-
offline: "General 所在的 Windows 電腦已離線。AgEnD 仍在這台主機運作。請重新連線那台電腦,或到設定把 General 切回這台主機。待處理或結果不明的請求不會自動重送。",
|
|
20
|
-
exit: "General 尚未切換:還無法確認前一個程序已停止。請重新連線那台電腦,或完成現有的程序停止復原,再重試。沒有啟動替代程序。",
|
|
21
|
-
start: "General 的執行位置已儲存,但未能啟動。請查看「等你處理」,選擇啟動或切回原位置。先前的對話已保留,沒有重送輸入。",
|
|
22
|
-
history: "主機與 Windows 各自保留對話,切換時不會複製或合併對話紀錄。",
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
const tr = key => t(`generalLocation.${key}`);
|
|
26
|
-
export function GeneralLocation({ name, attentionOnly = false }) {
|
|
27
|
-
const app = useStore(appStore);
|
|
28
|
-
const attentionKey = JSON.stringify((app.needs || []).filter(item => item.generalLocation && (!name || item.instance === name)).map(item => item.id));
|
|
29
|
-
const lease = useLease("general-location"), [data, setData] = useState(null), [error, setError] = useState(null);
|
|
30
|
-
const read = async () => {
|
|
31
|
-
try { const response = await lease.fetch("/api/settings/general-location"); const result = await response.json();
|
|
32
|
-
if (lease.current()) { if (response.ok) { setData(result); setError(null); } else setError(result.error); }
|
|
33
|
-
} catch (err) { if (lease.current()) setError(err.message); }
|
|
34
|
-
};
|
|
35
|
-
useEffect(() => { if (!guestPage()) void read(); }, [name, attentionKey]);
|
|
36
|
-
if (guestPage()) return null;
|
|
37
|
-
return html`<section id="general-location" class="card general-location"><h2>${tr("label")}</h2>
|
|
38
|
-
${error ? html`<p role="alert">${error}</p>` : null}
|
|
39
|
-
${(data?.generals || []).filter(row => !name || row.name === name).map(row => html`<${LocationRow} key=${row.name + row.revision} row=${row} machines=${data.machines || []} attentionOnly=${attentionOnly} refresh=${read} />`)}
|
|
40
|
-
${!attentionOnly ? html`<button type="button" class="btn btn-sm" onClick=${read}>${t("settings.refresh")}</button>` : null}
|
|
41
|
-
</section>`;
|
|
42
|
-
}
|
|
43
|
-
function LocationRow({ row, machines, attentionOnly, refresh }) {
|
|
44
|
-
const [target, setTarget] = useState("host"), [cli, setCli] = useState("claude-code"), [model, setModel] = useState("");
|
|
45
|
-
const [busy, setBusy] = useState(false), flight = useRef(false);
|
|
46
|
-
const lease = useLease("general-location-row");
|
|
47
|
-
const machine = machines.find(item => item.id === target);
|
|
48
|
-
// The rendered revision stays with this click. Never re-read and silently retry a stale proposal.
|
|
49
|
-
const propose = async next => {
|
|
50
|
-
if (flight.current || !lease.current()) return; flight.current = true; setBusy(true);
|
|
51
|
-
try { const result = await confirmedWrite("/api/settings/general-location", { body: { name: row.name, revision: row.revision, target: next }, key: newKey("general"), label: tr("label") });
|
|
52
|
-
if (lease.current()) { toast(result.body?.message || result.body?.error || t(result.ok ? "app.saved" : "app.failed"), result.ok); await refresh(); }
|
|
53
|
-
} catch (err) { if (lease.current()) toast(err.message, false); }
|
|
54
|
-
finally { flight.current = false; if (lease.current()) setBusy(false); }
|
|
55
|
-
};
|
|
56
|
-
if (attentionOnly && !row.offline && !row.hold) return null;
|
|
57
|
-
return html`<div class="general-location-row" data-general=${row.name}>
|
|
58
|
-
<strong>${row.displayName}</strong><p>${row.location === "host" ? tr("host") : `${machines.find(item => item.id === row.machineId)?.name || tr("windows")} · ${row.cli}`}</p>
|
|
59
|
-
${row.offline || row.hold ? html`<p role="alert">${tr(row.hold || "offline")}</p>` : null}
|
|
60
|
-
<p class="note">${tr("history")}</p>
|
|
61
|
-
${row.canSwitchBack ? html`<button type="button" class="btn" disabled=${busy || row.switching} onClick=${() => propose({ location: "host" })}>${tr("host")}</button>` : null}
|
|
62
|
-
${row.hold === "start" ? html`<button type="button" class="btn" disabled=${busy || row.switching} onClick=${() => propose(row.retryTarget || (row.location === "host" ? { location: "host" } : { location: "windows", machineId: row.machineId, cli: row.cli, model: row.model }))}>${t("chat.start")}</button>` : null}
|
|
63
|
-
${!attentionOnly ? html`<label>${tr("label")}<select value=${target} disabled=${busy || row.switching} onChange=${e => { setTarget(e.target.value); setModel(""); }}>
|
|
64
|
-
<option value="host">${tr("host")}</option>${machines.map(item => html`<option value=${item.id} disabled=${!item.online}>${item.name}</option>`)}
|
|
65
|
-
</select></label>
|
|
66
|
-
${target !== "host" ? html`<label>${t("settings.backend")}<select value=${cli} onChange=${e => { setCli(e.target.value); setModel(""); }}>
|
|
67
|
-
${["claude-code", "codex"].map(id => html`<option value=${id} disabled=${!machine?.clis.some(item => item.id === id)}>${id}</option>`)}
|
|
68
|
-
</select></label><${ModelSelect} value=${model} onChange=${setModel} backend=${cli} runtime="windows" machineId=${target} instance=${row.name} />` : null}
|
|
69
|
-
<button type="button" class="btn btn-primary" disabled=${busy || row.switching || target === "host" && !row.canSwitchBack || target !== "host" && (!machine?.online || !machine.clis.some(item => item.id === cli))} onClick=${() => propose(target === "host" ? { location: "host" } : { location: "windows", machineId: target, cli, model })}>${t("settings.save")}</button>` : null}
|
|
70
|
-
</div>`;
|
|
71
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Lazy, fixed local-owner copy for the representative-agent share (docs/design/hub-representative-agent.md).
|
|
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
|
-
agentLead: "Every agent is private unless you share it. A shared agent answers Hub questions in its own conversation, with its own folder and the tools its Settings allow. Actions that need approval still come to you.",
|
|
7
|
-
agentShared: "Shared: Hub questions go to this agent's own conversation.",
|
|
8
|
-
republishRequired: "Shared under the older restricted mode. Hub questions are refused until you share this agent again.",
|
|
9
|
-
shareAgain: "Share again",
|
|
10
|
-
agentNotShareable: "This agent can't be shared right now. Reload the page and try again.",
|
|
11
|
-
agentDeliveryUnavailable: "Sharing isn't available on this fleet yet: Hub questions can't reach an agent here.",
|
|
12
|
-
},
|
|
13
|
-
"zh-TW": {
|
|
14
|
-
agentLead: "每個 Agent 預設都不公開。公開後,Agent 會在自己的對話中回答 Hub 的提問,使用它自己的資料夾和設定允許的工具。需要核准的動作仍會交給你。",
|
|
15
|
-
agentShared: "已公開:Hub 的提問會送到這個 Agent 自己的對話。",
|
|
16
|
-
republishRequired: "這是舊的受限模式公開。重新公開這個 Agent 之前,Hub 的提問都會被拒絕。",
|
|
17
|
-
shareAgain: "重新公開",
|
|
18
|
-
agentNotShareable: "目前無法公開這個 Agent。請重新整理頁面後再試一次。",
|
|
19
|
-
agentDeliveryUnavailable: "這個 Fleet 還不能公開:Hub 的提問目前無法送到這裡的 Agent。",
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
/** What a Share sends: the agent itself, no Hub tools (agent-mode.ts on the member). */
|
|
23
|
-
export const AGENT_CHOICE = Object.freeze({ dataViewId: "agent", tools: Object.freeze([]) });
|