@songsid/agend 2.3.5-alpha.4 → 2.3.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/README.zh-TW.md +0 -2
- package/THIRD_PARTY_NOTICES.md +12 -28
- package/dist/agent-cli-instructions.md +1 -1
- package/dist/agent-credentials.d.ts +24 -0
- package/dist/agent-credentials.js +66 -0
- package/dist/agent-credentials.js.map +1 -0
- package/dist/agent-endpoint.d.ts +4 -6
- package/dist/agent-endpoint.js +15 -12
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/auth-api.d.ts +0 -21
- package/dist/auth-api.js +8 -93
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +30 -4
- package/dist/authority/session-authorizations.js +69 -17
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/authority/web-authority.d.ts +2 -12
- package/dist/authority/web-authority.js +4 -25
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.js +3 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +12 -15
- package/dist/backend/claude-code.js +133 -152
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +14 -0
- package/dist/backend/codex-metadata.js +45 -0
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-package.d.ts +2 -5
- package/dist/backend/codex-package.js +5 -1
- package/dist/backend/codex-package.js.map +1 -1
- package/dist/backend/codex-quota-history.d.ts +7 -0
- package/dist/backend/codex-quota-history.js +72 -0
- package/dist/backend/codex-quota-history.js.map +1 -0
- package/dist/backend/codex-session-lookup.d.ts +6 -0
- package/dist/backend/codex-session-lookup.js +1 -1
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex-speed.d.ts +14 -0
- package/dist/backend/codex-speed.js +35 -0
- package/dist/backend/codex-speed.js.map +1 -0
- package/dist/backend/codex.d.ts +116 -136
- package/dist/backend/codex.js +912 -942
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok-weekly-reset.d.ts +24 -0
- package/dist/backend/grok-weekly-reset.js +95 -0
- package/dist/backend/grok-weekly-reset.js.map +1 -0
- package/dist/backend/grok.d.ts +30 -3
- package/dist/backend/grok.js +301 -76
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +50 -2
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +5 -3
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +15 -8
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/bundled-tmux-guard.d.ts +21 -0
- package/dist/bundled-tmux-guard.js +96 -0
- package/dist/bundled-tmux-guard.js.map +1 -0
- package/dist/cache-ledger.d.ts +95 -0
- package/dist/cache-ledger.js +276 -4
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-service.d.ts +5 -0
- package/dist/cache-service.js +16 -4
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.js +11 -3
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +51 -0
- package/dist/channel/adapters/telegram.js +235 -17
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/ipc-bridge.d.ts +0 -2
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/classic-channel-manager.d.ts +2 -0
- package/dist/classic-channel-manager.js +5 -1
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +14 -10
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +30 -71
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +3 -17
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +10 -0
- package/dist/cross-instance-notice.js +67 -5
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +70 -68
- package/dist/daemon.js +774 -846
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +8 -0
- package/dist/dashboard-permissions.js +16 -0
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +26 -16
- package/dist/delivery-consumed-watch.js +31 -26
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.d.ts +0 -5
- package/dist/delivery-outbox.js +4 -32
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +42 -2
- package/dist/delivery-reconciliation.js +164 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/export-import.d.ts +7 -0
- package/dist/export-import.js +44 -10
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +4 -2
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +0 -2
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +108 -245
- package/dist/fleet-manager.js +656 -2028
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-instance.d.ts +0 -7
- package/dist/general-instance.js +3 -20
- package/dist/general-instance.js.map +1 -1
- package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +9 -3
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/instance-config-impact.js +6 -7
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +19 -23
- package/dist/instance-lifecycle.js +216 -383
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-topic-delete.d.ts +77 -0
- package/dist/instance-topic-delete.js +123 -0
- package/dist/instance-topic-delete.js.map +1 -0
- package/dist/instructions.d.ts +1 -3
- package/dist/instructions.js +1 -7
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +11 -0
- package/dist/kiro-engine-status.js +6 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/locale.js +63 -86
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +28 -0
- package/dist/log-service.js +29 -0
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +4 -3
- package/dist/log-steps.js +32 -7
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.d.ts +16 -2
- package/dist/logger.js +346 -66
- package/dist/logger.js.map +1 -1
- package/dist/login-flows.d.ts +7 -0
- package/dist/login-flows.js +5 -2
- package/dist/login-flows.js.map +1 -1
- package/dist/login-manager.js +25 -4
- package/dist/login-manager.js.map +1 -1
- package/dist/missed-offline.d.ts +25 -0
- package/dist/missed-offline.js +79 -0
- package/dist/missed-offline.js.map +1 -0
- package/dist/muse-usage-relay.d.ts +2 -0
- package/dist/muse-usage-relay.js +5 -3
- package/dist/muse-usage-relay.js.map +1 -1
- package/dist/needs-you-hub.d.ts +6 -3
- package/dist/needs-you-hub.js +31 -9
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +20 -18
- package/dist/needs-you.js +18 -14
- package/dist/needs-you.js.map +1 -1
- package/dist/office-share-page.js +1 -1
- package/dist/office-share-page.js.map +1 -1
- package/dist/outbound-handlers.d.ts +2 -16
- package/dist/outbound-handlers.js +10 -72
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +0 -38
- package/dist/outbound-schemas.js +5 -14
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-quota-history.d.ts +7 -0
- package/dist/pane-quota-history.js +47 -0
- package/dist/pane-quota-history.js.map +1 -0
- package/dist/platform-general.d.ts +46 -0
- package/dist/platform-general.js +91 -0
- package/dist/platform-general.js.map +1 -0
- package/dist/public-web-gateway.js +0 -9
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +0 -11
- package/dist/public-web-link.js +0 -13
- package/dist/public-web-link.js.map +1 -1
- package/dist/queued-handoffs.d.ts +33 -0
- package/dist/queued-handoffs.js +75 -0
- package/dist/queued-handoffs.js.map +1 -0
- package/dist/quickstart-api.js +5 -9
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +8 -1
- package/dist/quickstart.js +42 -4
- package/dist/quickstart.js.map +1 -1
- package/dist/quota-notice-config.d.ts +22 -0
- package/dist/quota-notice-config.js +41 -0
- package/dist/quota-notice-config.js.map +1 -0
- package/dist/quota-notice.d.ts +7 -0
- package/dist/quota-notice.js +40 -0
- package/dist/quota-notice.js.map +1 -1
- package/dist/reply-buttons-controller.js +10 -6
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-polls.d.ts +2 -2
- package/dist/reply-polls.js +3 -3
- package/dist/reply-polls.js.map +1 -1
- package/dist/scheduler/db.d.ts +2 -1
- package/dist/scheduler/db.js +23 -9
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/task-board.d.ts +9 -0
- package/dist/scheduler/task-board.js +19 -0
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/settings-api.d.ts +13 -5
- package/dist/settings-api.js +26 -96
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +0 -1
- package/dist/settings-baseline.js +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.js +23 -28
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +1 -16
- package/dist/settings-confirmation.js +9 -47
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.d.ts +0 -4
- package/dist/settings-effect.js +1 -58
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +0 -4
- package/dist/settings-http-confirmation.js +3 -31
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-instance-patch.js +28 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/settings-request-capability.d.ts +0 -2
- package/dist/settings-request-capability.js +0 -4
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-transaction.d.ts +0 -4
- package/dist/settings-transaction.js +0 -9
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-form.js +3 -6
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-i18n.js +0 -3
- package/dist/setup-i18n.js.map +1 -1
- package/dist/task-board-tool.d.ts +11 -0
- package/dist/task-board-tool.js +44 -0
- package/dist/task-board-tool.js.map +1 -1
- package/dist/task-board-waker.d.ts +6 -0
- package/dist/task-board-waker.js +4 -0
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-control.d.ts +1 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +1 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -2
- package/dist/tool-permissions.js +7 -7
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.d.ts +2 -0
- package/dist/tool-progress.js +19 -3
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.js +4 -3
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +1 -1
- package/dist/transcript-delta-reader.js +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-monitor.d.ts +20 -3
- package/dist/transcript-monitor.js +92 -24
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +0 -5
- package/dist/transcript-sources.js +79 -8
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +3 -23
- package/dist/ui/app.html +8 -1
- package/dist/ui/backend-signin.js +21 -36
- package/dist/ui/chat-md-strings.js +9 -0
- package/dist/ui/chat-store.js +2 -13
- package/dist/ui/chat-strings.js +2 -50
- package/dist/ui/chat-thread.js +53 -3
- package/dist/ui/fleet-task-card.js +3 -3
- package/dist/ui/fleet-task-common.js +10 -0
- package/dist/ui/fleet-tasks.js +7 -5
- package/dist/ui/fleet-usage.js +90 -27
- package/dist/ui/panel-chat.js +37 -66
- package/dist/ui/panel-details.js +1 -2
- package/dist/ui/panel-fleet.js +88 -107
- package/dist/ui/panel-needs.js +21 -163
- package/dist/ui/panel-notices.js +4 -3
- package/dist/ui/panel-settings.js +149 -239
- package/dist/ui/preview-panel.js +84 -6
- package/dist/ui/search-dialog.js +3 -2
- package/dist/ui/settings-appearance.js +23 -122
- package/dist/ui/settings-catalog.js +10 -37
- package/dist/ui/settings-codex-copy.js +19 -0
- package/dist/ui/settings-confirm.js +1 -3
- package/dist/ui/settings-dialogs.js +20 -27
- package/dist/ui/settings-guests.js +14 -27
- package/dist/ui/settings-model.js +17 -12
- package/dist/ui/settings-quota-notice.js +100 -0
- package/dist/ui/settings-registry.js +4 -11
- package/dist/ui/settings-strings.js +4 -113
- package/dist/ui/settings-web-authority.js +13 -15
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-needs.js +1 -1
- package/dist/ui/shared/app-route.js +2 -6
- package/dist/ui/shared/app-shell.js +18 -23
- package/dist/ui/shared/app-store.js +2 -3
- package/dist/ui/shared/app-stream.js +1 -3
- package/dist/ui/shared/app.css +40 -1312
- package/dist/ui/shared/app.js +2 -5
- package/dist/ui/shared/header-tools.js +4 -6
- package/dist/ui/shared/instance-nav.js +7 -34
- package/dist/ui/shared/instance-switch.js +3 -4
- package/dist/ui/shared/loading.css +37 -0
- package/dist/ui/shared/panel-view.js +77 -4
- package/dist/ui/shared/signin.js +6 -39
- package/dist/ui/shared/tokens.css +0 -1
- package/dist/ui/shared/ui-dialog.js +2 -2
- package/dist/ui/shared/ui-menu.js +10 -30
- package/dist/ui/shared/ui-states.js +14 -3
- package/dist/ui/shared/usage-dialog.js +18 -1
- package/dist/ui/shared/vendor/vendor.json +2 -19
- package/dist/ui/shared/view-history.css +17 -0
- package/dist/ui/shared/view-history.js +438 -0
- package/dist/ui/shared/view-strings.js +16 -8
- package/dist/ui/signin.html +5 -2
- package/dist/unattended-install.d.ts +11 -2
- package/dist/unattended-install.js +39 -5
- package/dist/unattended-install.js.map +1 -1
- package/dist/usage/capacity.d.ts +69 -0
- package/dist/usage/capacity.js +119 -0
- package/dist/usage/capacity.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +3 -0
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/profile-timeline.d.ts +16 -0
- package/dist/usage/profile-timeline.js +58 -0
- package/dist/usage/profile-timeline.js.map +1 -0
- package/dist/usage/providers.d.ts +5 -0
- package/dist/usage/providers.js +5 -0
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/quota-history.d.ts +43 -0
- package/dist/usage/quota-history.js +168 -0
- package/dist/usage/quota-history.js.map +1 -0
- package/dist/usage/quota-notices.d.ts +38 -0
- package/dist/usage/quota-notices.js +160 -0
- package/dist/usage/quota-notices.js.map +1 -0
- package/dist/usage/usage-api.d.ts +32 -0
- package/dist/usage/usage-api.js +96 -1
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.d.ts +25 -1
- package/dist/usage-report.js +55 -4
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +6 -1
- package/dist/usage-rollup.js +16 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/view-api.d.ts +16 -0
- package/dist/view-api.js +100 -16
- package/dist/view-api.js.map +1 -1
- package/dist/view-history.d.ts +84 -0
- package/dist/view-history.js +116 -0
- package/dist/view-history.js.map +1 -0
- package/dist/web-api.d.ts +6 -38
- package/dist/web-api.js +20 -255
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +2 -19
- package/dist/web-chat-history.js +3 -72
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-only-fleet.d.ts +0 -20
- package/dist/web-only-fleet.js +0 -21
- package/dist/web-only-fleet.js.map +1 -1
- package/dist/web-session-authorization.d.ts +13 -2
- package/dist/web-session-authorization.js +10 -3
- package/dist/web-session-authorization.js.map +1 -1
- package/dist/web-session.d.ts +0 -7
- package/dist/web-session.js +0 -2
- package/dist/web-session.js.map +1 -1
- package/dist/web-shell-routes.d.ts +1 -4
- package/dist/web-shell-routes.js +2 -7
- package/dist/web-shell-routes.js.map +1 -1
- package/launcher/private-home.cjs +1 -1
- package/package.json +3 -9
- package/dist/agent-runtime-api.d.ts +0 -4
- package/dist/agent-runtime-api.js +0 -59
- package/dist/agent-runtime-api.js.map +0 -1
- package/dist/agent-runtime-change.d.ts +0 -74
- package/dist/agent-runtime-change.js +0 -102
- package/dist/agent-runtime-change.js.map +0 -1
- package/dist/backend/grok-model-cache.d.ts +0 -7
- package/dist/backend/grok-model-cache.js +0 -65
- package/dist/backend/grok-model-cache.js.map +0 -1
- package/dist/backend/native-pane.d.ts +0 -9
- package/dist/backend/native-pane.js +0 -59
- package/dist/backend/native-pane.js.map +0 -1
- package/dist/fleet-windows-runtime.d.ts +0 -97
- package/dist/fleet-windows-runtime.js +0 -449
- package/dist/fleet-windows-runtime.js.map +0 -1
- package/dist/general-binding.d.ts +0 -85
- package/dist/general-binding.js +0 -298
- package/dist/general-binding.js.map +0 -1
- package/dist/general-host-owner.d.ts +0 -8
- package/dist/general-host-owner.js +0 -26
- package/dist/general-host-owner.js.map +0 -1
- package/dist/general-role.d.ts +0 -5
- package/dist/general-role.js +0 -26
- package/dist/general-role.js.map +0 -1
- package/dist/local-pane-endpoint.d.ts +0 -46
- package/dist/local-pane-endpoint.js +0 -189
- package/dist/local-pane-endpoint.js.map +0 -1
- package/dist/local-pane-launcher.d.ts +0 -2
- package/dist/local-pane-launcher.js +0 -38
- package/dist/local-pane-launcher.js.map +0 -1
- package/dist/local-pane-stage.ps1 +0 -101
- package/dist/model-catalog-defaults.d.ts +0 -14
- package/dist/model-catalog-defaults.js +0 -20
- package/dist/model-catalog-defaults.js.map +0 -1
- package/dist/native-agent-admission.d.ts +0 -7
- package/dist/native-agent-admission.js +0 -26
- package/dist/native-agent-admission.js.map +0 -1
- package/dist/native-daemon-client.d.ts +0 -13
- package/dist/native-daemon-client.js +0 -28
- package/dist/native-daemon-client.js.map +0 -1
- package/dist/native-instance-api.d.ts +0 -14
- package/dist/native-instance-api.js +0 -205
- package/dist/native-instance-api.js.map +0 -1
- package/dist/native-instance-input.d.ts +0 -84
- package/dist/native-instance-input.js +0 -54
- package/dist/native-instance-input.js.map +0 -1
- package/dist/native-instance-registry.d.ts +0 -32
- package/dist/native-instance-registry.js +0 -105
- package/dist/native-instance-registry.js.map +0 -1
- package/dist/native-mcp.d.ts +0 -40
- package/dist/native-mcp.js +0 -278
- package/dist/native-mcp.js.map +0 -1
- package/dist/native-model-catalog.d.ts +0 -5
- package/dist/native-model-catalog.js +0 -76
- package/dist/native-model-catalog.js.map +0 -1
- package/dist/native-pane-crash-budget.d.ts +0 -20
- package/dist/native-pane-crash-budget.js +0 -60
- package/dist/native-pane-crash-budget.js.map +0 -1
- package/dist/native-pane-create.d.ts +0 -26
- package/dist/native-pane-create.js +0 -53
- package/dist/native-pane-create.js.map +0 -1
- package/dist/native-pane-lifecycle.d.ts +0 -65
- package/dist/native-pane-lifecycle.js +0 -230
- package/dist/native-pane-lifecycle.js.map +0 -1
- package/dist/native-pane-manager.d.ts +0 -59
- package/dist/native-pane-manager.js +0 -584
- package/dist/native-pane-manager.js.map +0 -1
- package/dist/native-pane-output-log.d.ts +0 -15
- package/dist/native-pane-output-log.js +0 -108
- package/dist/native-pane-output-log.js.map +0 -1
- package/dist/native-pane-reconciliation.d.ts +0 -4
- package/dist/native-pane-reconciliation.js +0 -40
- package/dist/native-pane-reconciliation.js.map +0 -1
- package/dist/native-pane-recovery.d.ts +0 -12
- package/dist/native-pane-recovery.js +0 -10
- package/dist/native-pane-recovery.js.map +0 -1
- package/dist/native-pane-tools.d.ts +0 -2
- package/dist/native-pane-tools.js +0 -14
- package/dist/native-pane-tools.js.map +0 -1
- package/dist/pane-port.d.ts +0 -118
- package/dist/pane-port.js +0 -2
- package/dist/pane-port.js.map +0 -1
- package/dist/runtime-api.d.ts +0 -8
- package/dist/runtime-api.js +0 -171
- package/dist/runtime-api.js.map +0 -1
- package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +0 -21
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +0 -2
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +0 -19
- package/dist/runtime-assets/@xterm/addon-serialize/package.json +0 -29
- package/dist/runtime-assets/@xterm/headless/LICENSE +0 -21
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +0 -2
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +0 -46
- package/dist/runtime-assets/@xterm/headless/package.json +0 -29
- package/dist/runtime-assets/node-pty/CONPTY-LICENSE +0 -21
- package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +0 -503
- package/dist/runtime-assets/node-pty/LICENSE +0 -69
- package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +0 -16
- package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +0 -47
- package/dist/runtime-assets/node-pty/lib/index.js +0 -52
- package/dist/runtime-assets/node-pty/lib/interfaces.js +0 -7
- package/dist/runtime-assets/node-pty/lib/shared/conout.js +0 -11
- package/dist/runtime-assets/node-pty/lib/terminal.js +0 -190
- package/dist/runtime-assets/node-pty/lib/types.js +0 -7
- package/dist/runtime-assets/node-pty/lib/unixTerminal.js +0 -346
- package/dist/runtime-assets/node-pty/lib/utils.js +0 -39
- package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +0 -125
- package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +0 -320
- package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +0 -199
- package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +0 -22
- package/dist/runtime-assets/node-pty/package.json +0 -64
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/dist/runtime-build-info.d.ts +0 -9
- package/dist/runtime-build-info.js +0 -57
- package/dist/runtime-build-info.js.map +0 -1
- package/dist/runtime-bundle.d.ts +0 -19
- package/dist/runtime-bundle.js +0 -156
- package/dist/runtime-bundle.js.map +0 -1
- package/dist/runtime-cli.d.ts +0 -7
- package/dist/runtime-cli.js +0 -152
- package/dist/runtime-cli.js.map +0 -1
- package/dist/runtime-client-store.d.ts +0 -68
- package/dist/runtime-client-store.js +0 -344
- package/dist/runtime-client-store.js.map +0 -1
- package/dist/runtime-client.d.ts +0 -112
- package/dist/runtime-client.js +0 -736
- package/dist/runtime-client.js.map +0 -1
- package/dist/runtime-connection.d.ts +0 -22
- package/dist/runtime-connection.js +0 -93
- package/dist/runtime-connection.js.map +0 -1
- package/dist/runtime-coordinator.d.ts +0 -91
- package/dist/runtime-coordinator.js +0 -911
- package/dist/runtime-coordinator.js.map +0 -1
- package/dist/runtime-general-protocol.d.ts +0 -22
- package/dist/runtime-general-protocol.js +0 -57
- package/dist/runtime-general-protocol.js.map +0 -1
- package/dist/runtime-general-workspace.d.ts +0 -17
- package/dist/runtime-general-workspace.js +0 -213
- package/dist/runtime-general-workspace.js.map +0 -1
- package/dist/runtime-pane-assets.d.ts +0 -17
- package/dist/runtime-pane-assets.js +0 -23
- package/dist/runtime-pane-assets.js.map +0 -1
- package/dist/runtime-pane-boot.d.ts +0 -9
- package/dist/runtime-pane-boot.js +0 -47
- package/dist/runtime-pane-boot.js.map +0 -1
- package/dist/runtime-pane-codex-index.d.ts +0 -1
- package/dist/runtime-pane-codex-index.js +0 -47
- package/dist/runtime-pane-codex-index.js.map +0 -1
- package/dist/runtime-pane-config.d.ts +0 -16
- package/dist/runtime-pane-config.js +0 -54
- package/dist/runtime-pane-config.js.map +0 -1
- package/dist/runtime-pane-host.d.ts +0 -44
- package/dist/runtime-pane-host.js +0 -424
- package/dist/runtime-pane-host.js.map +0 -1
- package/dist/runtime-pane-job-owner.d.ts +0 -1
- package/dist/runtime-pane-job-owner.js +0 -29
- package/dist/runtime-pane-job-owner.js.map +0 -1
- package/dist/runtime-pane-job.ps1 +0 -116
- package/dist/runtime-pane-link.d.ts +0 -40
- package/dist/runtime-pane-link.js +0 -246
- package/dist/runtime-pane-link.js.map +0 -1
- package/dist/runtime-pane-mcp-protocol.d.ts +0 -32
- package/dist/runtime-pane-mcp-protocol.js +0 -39
- package/dist/runtime-pane-mcp-protocol.js.map +0 -1
- package/dist/runtime-pane-mcp-relay.d.ts +0 -17
- package/dist/runtime-pane-mcp-relay.js +0 -70
- package/dist/runtime-pane-mcp-relay.js.map +0 -1
- package/dist/runtime-pane-mcp.d.ts +0 -51
- package/dist/runtime-pane-mcp.js +0 -150
- package/dist/runtime-pane-mcp.js.map +0 -1
- package/dist/runtime-pane-native.d.ts +0 -45
- package/dist/runtime-pane-native.js +0 -65
- package/dist/runtime-pane-native.js.map +0 -1
- package/dist/runtime-pane-output.d.ts +0 -19
- package/dist/runtime-pane-output.js +0 -53
- package/dist/runtime-pane-output.js.map +0 -1
- package/dist/runtime-pane-port.d.ts +0 -139
- package/dist/runtime-pane-port.js +0 -558
- package/dist/runtime-pane-port.js.map +0 -1
- package/dist/runtime-pane-private.d.ts +0 -14
- package/dist/runtime-pane-private.js +0 -51
- package/dist/runtime-pane-private.js.map +0 -1
- package/dist/runtime-pane-private.ps1 +0 -14
- package/dist/runtime-pane-process.d.ts +0 -4
- package/dist/runtime-pane-process.js +0 -108
- package/dist/runtime-pane-process.js.map +0 -1
- package/dist/runtime-pane-protocol.d.ts +0 -172
- package/dist/runtime-pane-protocol.js +0 -195
- package/dist/runtime-pane-protocol.js.map +0 -1
- package/dist/runtime-pane-screen.d.ts +0 -19
- package/dist/runtime-pane-screen.js +0 -76
- package/dist/runtime-pane-screen.js.map +0 -1
- package/dist/runtime-pane-service.d.ts +0 -11
- package/dist/runtime-pane-service.js +0 -221
- package/dist/runtime-pane-service.js.map +0 -1
- package/dist/runtime-pane-stdio-protocol.d.ts +0 -54
- package/dist/runtime-pane-stdio-protocol.js +0 -94
- package/dist/runtime-pane-stdio-protocol.js.map +0 -1
- package/dist/runtime-pane-stdio.d.ts +0 -3
- package/dist/runtime-pane-stdio.js +0 -123
- package/dist/runtime-pane-stdio.js.map +0 -1
- package/dist/runtime-pane-store.d.ts +0 -33
- package/dist/runtime-pane-store.js +0 -164
- package/dist/runtime-pane-store.js.map +0 -1
- package/dist/runtime-pane-transcript-protocol.d.ts +0 -43
- package/dist/runtime-pane-transcript-protocol.js +0 -58
- package/dist/runtime-pane-transcript-protocol.js.map +0 -1
- package/dist/runtime-pane-transcript.d.ts +0 -45
- package/dist/runtime-pane-transcript.js +0 -605
- package/dist/runtime-pane-transcript.js.map +0 -1
- package/dist/runtime-pane-worker.d.ts +0 -1
- package/dist/runtime-pane-worker.js +0 -154
- package/dist/runtime-pane-worker.js.map +0 -1
- package/dist/runtime-protocol.d.ts +0 -162
- package/dist/runtime-protocol.js +0 -37
- package/dist/runtime-protocol.js.map +0 -1
- package/dist/runtime-switches.d.ts +0 -79
- package/dist/runtime-switches.js +0 -90
- package/dist/runtime-switches.js.map +0 -1
- package/dist/runtime-transcript-delta-reader.d.ts +0 -23
- package/dist/runtime-transcript-delta-reader.js +0 -74
- package/dist/runtime-transcript-delta-reader.js.map +0 -1
- package/dist/runtime-transcript-source.d.ts +0 -36
- package/dist/runtime-transcript-source.js +0 -189
- package/dist/runtime-transcript-source.js.map +0 -1
- package/dist/runtime-windows-bridge.d.ts +0 -41
- package/dist/runtime-windows-bridge.js +0 -157
- package/dist/runtime-windows-bridge.js.map +0 -1
- package/dist/settings-route-lifetime.d.ts +0 -14
- package/dist/settings-route-lifetime.js +0 -48
- package/dist/settings-route-lifetime.js.map +0 -1
- package/dist/tmux-pane-host.d.ts +0 -26
- package/dist/tmux-pane-host.js +0 -25
- package/dist/tmux-pane-host.js.map +0 -1
- package/dist/transcript-needles.d.ts +0 -35
- package/dist/transcript-needles.js +0 -158
- package/dist/transcript-needles.js.map +0 -1
- package/dist/transcript-records.d.ts +0 -21
- package/dist/transcript-records.js +0 -140
- package/dist/transcript-records.js.map +0 -1
- package/dist/ui/agent-proposals.js +0 -90
- package/dist/ui/agent-runtime-settings.js +0 -67
- package/dist/ui/agent-runtime.js +0 -124
- package/dist/ui/cli-picker.js +0 -42
- package/dist/ui/general-location.js +0 -71
- package/dist/ui/native-instance-settings.js +0 -44
- package/dist/ui/native-pane-recovery.js +0 -45
- package/dist/ui/panel-runtimes.js +0 -334
- package/dist/ui/panel-windows-agent.js +0 -86
- package/dist/ui/panel-windows-cli.js +0 -179
- package/dist/ui/provider-marks.js +0 -83
- package/dist/ui/runtime-catalog.js +0 -55
- package/dist/ui/settings-agent-filters.js +0 -94
- package/dist/ui/settings-layout.js +0 -245
- package/dist/ui/settings-outside.js +0 -176
- package/dist/ui/settings-shortcuts.js +0 -65
- package/dist/ui/shared/machine-name.js +0 -13
- package/dist/ui/shared/qrcode.module.js +0 -2237
- package/dist/ui/shared/settings-width.js +0 -31
- package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
- package/dist/ui/windows-agents-nav.js +0 -2
- package/dist/ui/windows-cli-catalog.js +0 -108
- package/dist/web-remote-access.d.ts +0 -152
- package/dist/web-remote-access.js +0 -368
- package/dist/web-remote-access.js.map +0 -1
- package/dist/windows-agents.d.ts +0 -126
- package/dist/windows-agents.js +0 -490
- package/dist/windows-agents.js.map +0 -1
- package/dist/windows-cli-api.d.ts +0 -23
- package/dist/windows-cli-api.js +0 -159
- package/dist/windows-cli-api.js.map +0 -1
- package/dist/windows-cli-providers.d.ts +0 -115
- package/dist/windows-cli-providers.js +0 -429
- package/dist/windows-cli-providers.js.map +0 -1
- package/dist/windows-cli-worker.d.ts +0 -59
- package/dist/windows-cli-worker.js +0 -479
- package/dist/windows-cli-worker.js.map +0 -1
- package/dist/windows-cli.d.ts +0 -116
- package/dist/windows-cli.js +0 -407
- package/dist/windows-cli.js.map +0 -1
- package/dist/windows-native-mcp.d.ts +0 -19
- package/dist/windows-native-mcp.js +0 -143
- package/dist/windows-native-mcp.js.map +0 -1
- package/dist/windows-pane-mcp.d.ts +0 -26
- package/dist/windows-pane-mcp.js +0 -187
- package/dist/windows-pane-mcp.js.map +0 -1
- package/templates/runtime-assets/conpty-LICENSE +0 -21
- package/templates/runtime-assets/conpty-NOTICE.md +0 -503
- package/templates/runtime-assets/local-pane-stage.ps1 +0 -101
- package/templates/runtime-assets/runtime-pane-job.ps1 +0 -116
- package/templates/runtime-assets/runtime-pane-private.ps1 +0 -14
- package/templates/runtime-assets/xterm-LICENSE +0 -21
package/dist/types.d.ts
CHANGED
|
@@ -93,19 +93,9 @@ export declare function resolveDeliveryWorkerMode(config: {
|
|
|
93
93
|
delivery_worker?: unknown;
|
|
94
94
|
}>;
|
|
95
95
|
} | null | undefined, name: string): DeliveryWorkerMode;
|
|
96
|
+
import type { QuotaNoticeRule, QuotaNoticeSettings } from "./quota-notice-config.js";
|
|
96
97
|
export interface InstanceConfig {
|
|
97
|
-
|
|
98
|
-
runtime?: "wsl" | "windows";
|
|
99
|
-
/** Paired execution machine. Unset keeps the existing local runtime and provider session. */
|
|
100
|
-
machine_id?: string;
|
|
101
|
-
/** Stable native conversation/profile identity; set only for Windows instances. */
|
|
102
|
-
native_agent_id?: string;
|
|
103
|
-
/** Persistent terminal opt-in. Unset/exec preserves the per-turn adapter and rollback. */
|
|
104
|
-
native_adapter?: "exec" | "pane";
|
|
105
|
-
/** Internal administrator-created General binding; runner computes its dedicated workspace. */
|
|
106
|
-
native_general_binding?: string;
|
|
107
|
-
/** Native CLI permission selection; independent of Linux terminal permissions. */
|
|
108
|
-
native_sandbox?: "read-only" | "workspace-write";
|
|
98
|
+
quota_notice?: QuotaNoticeRule;
|
|
109
99
|
/** Proactive interrupted-work continuation; defaults true, inherited from fleet defaults. */
|
|
110
100
|
resume_interrupted_work?: boolean;
|
|
111
101
|
working_directory: string;
|
|
@@ -277,6 +267,7 @@ export interface WebhookConfig {
|
|
|
277
267
|
headers?: Record<string, string>;
|
|
278
268
|
}
|
|
279
269
|
export interface FleetDefaults extends Partial<InstanceConfig> {
|
|
270
|
+
quota_notice?: QuotaNoticeSettings;
|
|
280
271
|
/** UI/notification language for user-facing text: "en" or "zh-TW". Auto-detects from timezone if unset. */
|
|
281
272
|
locale?: string;
|
|
282
273
|
/** Seconds before the cancel button starts showing elapsed time (default 30). */
|
|
@@ -649,17 +640,6 @@ export interface FleetConfig {
|
|
|
649
640
|
fleet_label?: string;
|
|
650
641
|
login?: LoginConfig;
|
|
651
642
|
web_terminal?: WebTerminalConfig;
|
|
652
|
-
/**
|
|
653
|
-
* M-2255: Settings → Runtime. `windows_cli`: agents may run this PC's Windows CLIs (through WSL); `remote_runtime`:
|
|
654
|
-
* other Windows computers may pair with this fleet and run its agents. Both off by default; AGEND_WINDOWS_CLI /
|
|
655
|
-
* AGEND_REMOTE_RUNTIME ("1" on, "0" off) override them. `max_agents_per_machine` (#2953 1.8): Windows agents running at
|
|
656
|
-
* once on each Windows computer, 1..16, default 4.
|
|
657
|
-
*/
|
|
658
|
-
runtimes?: {
|
|
659
|
-
windows_cli?: boolean;
|
|
660
|
-
remote_runtime?: boolean;
|
|
661
|
-
max_agents_per_machine?: number;
|
|
662
|
-
};
|
|
663
643
|
}
|
|
664
644
|
/**
|
|
665
645
|
* User-authored fleet.yaml before defaults are merged into instances.
|
package/dist/ui/app.html
CHANGED
|
@@ -13,11 +13,18 @@
|
|
|
13
13
|
<script src="/assets/theme.js"></script>
|
|
14
14
|
<link rel="stylesheet" href="/assets/tokens.css">
|
|
15
15
|
<link rel="stylesheet" href="/assets/app.css">
|
|
16
|
+
<link rel="stylesheet" href="/assets/loading.css">
|
|
16
17
|
<script src="/assets/agend-auth.js"></script>
|
|
17
18
|
<script type="module" src="/assets/app.js"></script>
|
|
18
19
|
</head>
|
|
19
20
|
<body>
|
|
20
|
-
<div id="app" class="app-root"
|
|
21
|
+
<div id="app" class="app-root"><div class="sk-boot" role="status" aria-busy="true" aria-label="Loading…">
|
|
22
|
+
<div class="sk-boot-side" aria-hidden="true"><div class="skeleton"><div class="sk-line"></div><div class="sk-line"></div><div class="sk-line"></div></div></div>
|
|
23
|
+
<div class="sk-boot-main" aria-hidden="true"><div class="sk-boot-head skeleton"><div class="sk-line"></div></div>
|
|
24
|
+
<div class="skeleton sk-rows"><div class="sk-row"><div class="sk-line sk-thumb"></div><div class="sk-copy"><div class="sk-line"></div><div class="sk-line"></div></div><div class="sk-line sk-pill"></div></div>
|
|
25
|
+
<div class="sk-row"><div class="sk-line sk-thumb"></div><div class="sk-copy"><div class="sk-line"></div><div class="sk-line"></div></div><div class="sk-line sk-pill"></div></div>
|
|
26
|
+
<div class="sk-row"><div class="sk-line sk-thumb"></div><div class="sk-copy"><div class="sk-line"></div><div class="sk-line"></div></div><div class="sk-line sk-pill"></div></div></div>
|
|
27
|
+
</div></div></div>
|
|
21
28
|
<noscript><p class="noscript">AgEnD's web app needs JavaScript.</p></noscript>
|
|
22
29
|
</body>
|
|
23
30
|
</html>
|
|
@@ -12,7 +12,6 @@ import { closeDialog, shellStore, showDialog } from "/assets/app-shell.js";
|
|
|
12
12
|
import { Dialog } from "/assets/ui-dialog.js";
|
|
13
13
|
import { toast } from "/assets/ui-toast.js";
|
|
14
14
|
import { mountStructuredSignIns } from "./structured-signin.js";
|
|
15
|
-
import { CliProductMark, cliLabel } from "./cli-picker.js";
|
|
16
15
|
|
|
17
16
|
register("signin", {
|
|
18
17
|
en: {
|
|
@@ -232,12 +231,11 @@ export function BrowserSignInDialog({ backend, backends, onClose }) {
|
|
|
232
231
|
if (!result.ok) { toast(tn("failed")); return; }
|
|
233
232
|
showDialog(SignInDialog, { backend: chosen });
|
|
234
233
|
};
|
|
235
|
-
|
|
234
|
+
return html`<${Dialog} title=${backends ? tn("listTitle") : tn("title", backend)} onClose=${close}>
|
|
235
|
+
<div ref=${root}></div>
|
|
236
236
|
${backends ? backends.filter(b => b !== "antigravity").map(b => html`<button type="button" class="btn" onClick=${() => fallback(b)}>${b} · ${tn("consoleFallback")}</button>`) : null}
|
|
237
|
-
|
|
238
|
-
<button type="button" class="btn" onClick=${close}>${tn("close")}</button></div
|
|
239
|
-
return html`<${Dialog} title=${backends ? tn("listTitle") : tn("title", cliLabel(backend))} onClose=${close} actions=${actions}>
|
|
240
|
-
<div class="signin-browser" ref=${root}></div>
|
|
237
|
+
<div class="s-actions">${backend ? html`<button type="button" class="btn" onClick=${() => fallback(backend)}>${tn("consoleFallback")}</button>` : null}
|
|
238
|
+
<button type="button" class="btn" onClick=${close}>${tn("close")}</button></div>
|
|
241
239
|
</${Dialog}>`;
|
|
242
240
|
}
|
|
243
241
|
|
|
@@ -329,41 +327,28 @@ export function SignInLine() {
|
|
|
329
327
|
|
|
330
328
|
const STATE_KEY = { usable: "stUsable", not_signed_in: "stNotSignedIn", not_installed: "stNotInstalled", too_old: "stTooOld", unknown: "stUnknown" };
|
|
331
329
|
|
|
332
|
-
|
|
333
|
-
en: {
|
|
334
|
-
hostTitle: "CLI sign-ins", hostHint: "Accounts used by CLIs on the host running AgEnD.",
|
|
335
|
-
hostBadge: "AgEnD host", hostProfile: "Credential profile: {0}", hostLoading: "Reading CLI sign-ins…", hostEmpty: "No CLI sign-ins were reported on this host.",
|
|
336
|
-
installHelp: "Installation instructions", updateHelp: "Update instructions", hostHelp: "Sign-in instructions",
|
|
337
|
-
commandHint: "Run these instructions in a terminal on the host running AgEnD.",
|
|
338
|
-
},
|
|
339
|
-
"zh-TW": {
|
|
340
|
-
hostTitle: "CLI 登入", hostHint: "執行 AgEnD 的主機上,各個 CLI 使用的帳號。",
|
|
341
|
-
hostBadge: "AgEnD 主機", hostProfile: "憑證設定檔:{0}", hostLoading: "正在讀取 CLI 登入狀態…", hostEmpty: "這台主機尚未回報 CLI 登入項目。",
|
|
342
|
-
installHelp: "安裝說明", updateHelp: "更新說明", hostHelp: "登入說明",
|
|
343
|
-
commandHint: "請在執行 AgEnD 的主機終端機中操作。",
|
|
344
|
-
},
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
/** Settings → Agents: existing host sign-in actions, with commands disclosed only when needed. */
|
|
330
|
+
/** Settings → Agents: each login on this machine, with Sign in where the dashboard can do it. */
|
|
348
331
|
export function SignInList() {
|
|
349
332
|
const { targets, loaded, login, structured } = useStore(signInStore);
|
|
350
|
-
//
|
|
333
|
+
// Not over the temporary public link: only the dashboard reached directly signs a backend in, and the link does not
|
|
334
|
+
// serve this read (it was a 404 in the console there, found by smoke-1939-authorize-defaults).
|
|
351
335
|
const offered = signInOffered();
|
|
352
336
|
useEffect(() => { if (offered) void refreshSignIn(); }, []);
|
|
353
|
-
if (!offered) return null;
|
|
337
|
+
if (!offered || !loaded || !targets.length) return null;
|
|
354
338
|
const active = structured?.login;
|
|
355
339
|
const running = (login && login.phase === "running") || (active && active.phase !== "done" && !(active.phase === "failed" && active.reason));
|
|
356
|
-
return html`<section class="s-group signin-list
|
|
357
|
-
<
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
340
|
+
return html`<section class="s-group signin-list" aria-label=${tn("listTitle")}>
|
|
341
|
+
<div class="list-head"><span>${tn("listTitle")}</span></div>
|
|
342
|
+
<p class="sub">${tn("listHint")}</p>
|
|
343
|
+
${targets.map((x) => html`<div key=${`${x.backend}:${x.profile || ""}`} class="s-row">
|
|
344
|
+
<span class="s-name">${shownOf(x.backend, x.profile)}</span>
|
|
345
|
+
<span class="tag">${tn(STATE_KEY[x.state] || "stUnknown")}</span>
|
|
346
|
+
<span class="s-br" aria-hidden="true"></span>
|
|
347
|
+
${x.install ? html`<span class="s-meta"><code>${tn("install", x.install)}</code></span>` : null}
|
|
348
|
+
${x.update ? html`<span class="s-meta"><code>${tn("update", x.update)}</code></span>` : null}
|
|
349
|
+
${x.hostCommand ? html`<span class="s-meta"><code>${tn("onHost", x.hostCommand)}</code></span>` : null}
|
|
350
|
+
<span class="s-actions">${x.signIn ? html`<button type="button" class=${x.state === "not_signed_in" ? "btn btn-sm btn-primary" : "btn btn-sm"} disabled=${!!running}
|
|
351
|
+
onClick=${() => openSignIn(x)}>${x.state === "usable" ? tn("signInAgain") : tn("signIn")}</button>` : null}</span>
|
|
352
|
+
</div>`)}
|
|
368
353
|
</section>`;
|
|
369
354
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// M-2448 (Prism on #3155): the Markdown side panel's own words, registered by the panel's module (preview-panel.js). A
|
|
2
|
+
// page that opened Log or Details before an upgrade may hold an older chat-strings.js without them; these keep the
|
|
3
|
+
// panel saying what it shows, never a raw key.
|
|
4
|
+
import { register } from "/assets/app-i18n.js";
|
|
5
|
+
|
|
6
|
+
register("chat", {
|
|
7
|
+
en: { pvMdPanel: "Markdown preview", pvMdRendered: "Formatted", pvMdSource: "Source" },
|
|
8
|
+
"zh-TW": { pvMdPanel: "Markdown 預覽", pvMdRendered: "排版", pvMdSource: "原始內容" },
|
|
9
|
+
});
|
package/dist/ui/chat-store.js
CHANGED
|
@@ -70,14 +70,7 @@ export function createChatStore(deps) {
|
|
|
70
70
|
const r = await deps.fetch(path, o);
|
|
71
71
|
return r.json();
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
// Keep the sender heuristic only for older messages that do not carry a recognized role.
|
|
75
|
-
const isUser = (x, instance) => {
|
|
76
|
-
if (x.role === "user") return true;
|
|
77
|
-
if (x.role === "agent" || x.role === "status") return false;
|
|
78
|
-
const sender = typeof x.sender === "string" ? x.sender : "";
|
|
79
|
-
return sender === "web-user" || (!sender.startsWith("agend") && sender !== instance && sender !== "general");
|
|
80
|
-
};
|
|
73
|
+
const isUser = (x, instance) => x.sender === "web-user" || (!x.sender.startsWith("agend") && x.sender !== instance && x.sender !== "general");
|
|
81
74
|
|
|
82
75
|
// ── The turn (#1307): when this page saw the agent start working (its own monotonic clock, so approximate), a Stop
|
|
83
76
|
// on its way, and an instance waiting on a terminal prompt.
|
|
@@ -400,11 +393,7 @@ export function createChatStore(deps) {
|
|
|
400
393
|
if (r && r.reason === "reply_gone") { e.quote = undefined; e.replyTo = undefined; }
|
|
401
394
|
const why = r && r.reason;
|
|
402
395
|
const key = typeof why === "string" ? `chat.sendFailure_${why}` : "";
|
|
403
|
-
|
|
404
|
-
const holders = why === "machine_limit" && Array.isArray(r.holders)
|
|
405
|
-
? r.holders.filter((h) => h && typeof h.name === "string").map((h) => (h.unknown ? t("chat.machineLimitUnknown", h.name) : h.name)).join(", ")
|
|
406
|
-
: "";
|
|
407
|
-
const localized = key ? (why === "machine_limit" ? t(key, String(r.limit ?? "?"), holders || "?") : t(key)) : "";
|
|
396
|
+
const localized = key ? t(key) : "";
|
|
408
397
|
e.outgoing = { state: "failed", error: localized && localized !== key ? localized : (r && r.error ? r.error : t("chat.disconnected")) };
|
|
409
398
|
changed(target, "msgs"); changed(target);
|
|
410
399
|
deps.toast(e.outgoing.error, false);
|
package/dist/ui/chat-strings.js
CHANGED
|
@@ -3,28 +3,6 @@ import { register } from "/assets/app-i18n.js";
|
|
|
3
3
|
|
|
4
4
|
register("chat", {
|
|
5
5
|
en: {
|
|
6
|
-
runtimeNoAttachments: "This runtime does not support attachments yet. Paste text instead.",
|
|
7
|
-
runtimeNoCommands: "This runtime does not support this CLI command yet. Use Agent settings instead.",
|
|
8
|
-
nativeBusy: "Windows CLI is running another task. Your draft is kept until it is ready.",
|
|
9
|
-
nativeBlocked: "The last Windows execution outcome is unknown. Verify its processes have stopped before unlocking.",
|
|
10
|
-
nativeRecover: "Processes stopped — unlock agent",
|
|
11
|
-
paneHostUpgrade: "This Windows pane host uses an older adapter. Stop its Windows agents, restart Windows, then choose Start. Saved conversations are kept.",
|
|
12
|
-
paneCodexSessionUnconfirmed: "Windows Codex's saved conversation could not be checked. This agent is stopped; an administrator can start a new conversation.",
|
|
13
|
-
paneSessionUnconfirmed: "Windows Claude's saved conversation could not be checked. This agent is stopped; an administrator can start a new conversation.",
|
|
14
|
-
paneNewConversation: "Start a new conversation",
|
|
15
|
-
paneNewConversationConfirm: "Start a new conversation for {0}? The previous session ID stays in its receipt; old input will not be replayed.",
|
|
16
|
-
paneRecoveryNeeded: "The previous Windows pane exit is unconfirmed. Its saved conversation is kept and no old input will be replayed. An administrator can recover it after stopping its Windows processes.",
|
|
17
|
-
paneRecover: "Recover saved session",
|
|
18
|
-
paneRecoverConfirm: "Recover {0} without replaying its previous input. Confirm that all Windows processes belonging to this agent have stopped. Then choose Start to resume its saved conversation.",
|
|
19
|
-
paneProcessesStopped: "I have stopped all Windows processes belonging to this agent.",
|
|
20
|
-
paneRecoverConfirmed: "Processes stopped — recover session",
|
|
21
|
-
nativeComposerHint: "Enter to send · Shift+Enter for a new line",
|
|
22
|
-
nativeComposerHintTouch: "Return adds a line · tap Send to send",
|
|
23
|
-
machineOffline: "Computer offline",
|
|
24
|
-
machineRevoked: "Connection revoked",
|
|
25
|
-
machineRevokedHint: "Runtime access for {0} was revoked. Your draft and conversation are kept. Check Settings → Runtime.",
|
|
26
|
-
machineUnavailable: "The Runtime on {0} is not connected. Your draft is kept. Reconnect it before sending.",
|
|
27
|
-
machineName: "Computer: {0}",
|
|
28
6
|
waking: "Waking {0}…", retrySend: "Retry send",
|
|
29
7
|
// A message being sent (its own bubble at once) and its files' uploads.
|
|
30
8
|
you: "You", sending: "Sending…", uploadingFile: "Uploading {0}", uploadWaiting: "waiting", uploadFailed: "failed",
|
|
@@ -34,8 +12,6 @@ register("chat", {
|
|
|
34
12
|
sendFailure_wake_timeout: "The instance did not become ready in time. Retry, or check its status on the host.",
|
|
35
13
|
sendFailure_instance_stopped: "This instance was stopped or removed. Start it on the host before retrying.",
|
|
36
14
|
sendFailure_delivery_unavailable: "The instance could not receive this message. Check its status on the host, then retry.",
|
|
37
|
-
sendFailure_machine_limit: "This Windows computer already runs its limit of {0} agents: {1}. Stop one of them (or check and unlock one marked “outcome unknown”), then retry.",
|
|
38
|
-
machineLimitUnknown: "{0} (outcome unknown)",
|
|
39
15
|
sendFailure_delivery_changed: "The session or instance changed before this message was sent. Sign in again if needed, then retry.",
|
|
40
16
|
sendFailure_reply_gone: "The message you replied to is no longer in this chat. Your text is still here: send it without the reply, or reply to another message.",
|
|
41
17
|
reply: "Reply", replyingTo: "Replying to {0}", replyCancel: "Cancel the reply (Esc)", replyHidden: "an earlier message", replyPhoto: "[Photo]", replyFile: "[File]",
|
|
@@ -144,7 +120,7 @@ register("chat", {
|
|
|
144
120
|
pick: "Choose an agent to start chatting.", noAgents: "Create an agent to start chatting.", newAgent: "New agent", notFound: "No instance called “{0}”", notFoundHint: "It may have been deleted or renamed.", backToList: "Choose an agent",
|
|
145
121
|
details: "Instance details", fullWidth: "Full width", start: "Start instance", stopInstance: "Stop instance", restart: "Restart instance", delete: "Delete instance…",
|
|
146
122
|
started: "{0} started", stoppedInst: "{0} stopped", restarted: "{0} restarted", instanceDeleted: "{0} was deleted",
|
|
147
|
-
deleteTitle: "Delete {0}?", deleteHelp: "This removes the instance from the fleet and stops it. Its working directory is kept. Type “delete {0}” to confirm.", deleteGo: "Delete", cancel: "Cancel",
|
|
123
|
+
deleteTitle: "Delete {0}?", deleteHelp: "This removes the instance from the fleet and stops it, and deletes its chat topic (on Discord, its channel and history). Its working directory is kept. Type “delete {0}” to confirm.", deleteGo: "Delete", cancel: "Cancel",
|
|
148
124
|
loadFailed: "Failed to load", tour: "Chat tour", tourBtnTitle: "Show the chat tour on an agent's chat", tourNoAgent: "Choose an agent before opening the chat tour.",
|
|
149
125
|
dName: "Name", dStatus: "Status", dDisplay: "Display name", dDescription: "Description", dDirectory: "Directory", dBackend: "Backend", dModel: "Model", dEffort: "Effort",
|
|
150
126
|
dCost: "Cost", dCostNote: "(session accumulated)", dContext: "Context", dRate5: "Rate 5h", dRate7: "Rate 7d", dActivity: "Recent activity", dInstance: "Instance", dRuntime: "Runtime",
|
|
@@ -171,28 +147,6 @@ register("chat", {
|
|
|
171
147
|
configured: "(configured)", fleetDefault: "(fleet default)",
|
|
172
148
|
},
|
|
173
149
|
"zh-TW": {
|
|
174
|
-
runtimeNoAttachments: "這個 Runtime 目前不支援附件,請貼上文字。",
|
|
175
|
-
runtimeNoCommands: "這個 Runtime 目前不支援此 CLI 指令,請在 Agent 設定中調整。",
|
|
176
|
-
nativeBusy: "Windows CLI 正在執行其他任務,完成後即可傳送;輸入內容會保留。",
|
|
177
|
-
nativeBlocked: "上次 Windows 執行的結束狀態不明。請先確認相關程序已停止,再解除鎖定。",
|
|
178
|
-
nativeRecover: "已確認程序停止,解除鎖定",
|
|
179
|
-
paneHostUpgrade: "這台 Windows 的終端主機仍使用舊版轉接器。請先停止這台電腦的 Windows 代理,重新啟動 Windows,再按「啟動」。已儲存的對話會保留。",
|
|
180
|
-
paneCodexSessionUnconfirmed: "無法確認 Windows Codex 已儲存的對話。這個代理已停止,管理員可以開始新對話。",
|
|
181
|
-
paneSessionUnconfirmed: "無法確認 Windows Claude 已儲存的對話。這個代理已停止,管理員可以開始新對話。",
|
|
182
|
-
paneNewConversation: "開始新對話",
|
|
183
|
-
paneNewConversationConfirm: "要為 {0} 開始新對話嗎?原本的對話識別碼會保留在收據中,也不會重送舊輸入。",
|
|
184
|
-
paneRecoveryNeeded: "無法確認上一個 Windows 終端是否已結束。已儲存的對話會保留,也不會重送舊輸入。管理員可在停止這個代理的 Windows 程序後復原。",
|
|
185
|
-
paneRecover: "復原已儲存的對話",
|
|
186
|
-
paneRecoverConfirm: "復原 {0},不重送先前的輸入。請確認這個代理在 Windows 上的所有程序都已停止,再按「啟動」接續已儲存的對話。",
|
|
187
|
-
paneProcessesStopped: "我已停止這個代理在 Windows 上的所有程序。",
|
|
188
|
-
paneRecoverConfirmed: "已停止程序,復原對話",
|
|
189
|
-
nativeComposerHint: "Enter 送出 · Shift+Enter 換行",
|
|
190
|
-
nativeComposerHintTouch: "Return 換行 · 按「送出」傳送",
|
|
191
|
-
machineOffline: "電腦離線",
|
|
192
|
-
machineRevoked: "連線已撤銷",
|
|
193
|
-
machineRevokedHint: "{0} 的 Runtime 存取權已撤銷,輸入與對話會保留。請前往設定 → Runtime 檢查。",
|
|
194
|
-
machineUnavailable: "{0} 的 Runtime 尚未連線,輸入內容會保留。請先恢復連線再傳送。",
|
|
195
|
-
machineName: "電腦:{0}",
|
|
196
150
|
waking: "正在喚醒 {0}…", retrySend: "重試傳送",
|
|
197
151
|
you: "你", sending: "傳送中…", uploadingFile: "正在上傳 {0}", uploadWaiting: "等待中", uploadFailed: "失敗",
|
|
198
152
|
uploadNoConnection: "上傳中斷了,請檢查網路連線", sendNoConnection: "沒有送到 AgEnD,請檢查網路連線", notSentBecause: "沒有送出:{0}", deleteUnsent: "刪除",
|
|
@@ -201,8 +155,6 @@ register("chat", {
|
|
|
201
155
|
sendFailure_wake_timeout: "實例未能及時就緒。請重試,或在主機檢查它的狀態。",
|
|
202
156
|
sendFailure_instance_stopped: "這個實例已停止或移除。請先在主機啟動它,再重試。",
|
|
203
157
|
sendFailure_delivery_unavailable: "實例目前無法接收這則訊息。請在主機檢查它的狀態,再重試。",
|
|
204
|
-
sendFailure_machine_limit: "這台 Windows 電腦同時執行的 agent 已達上限 {0} 個:{1}。請先停止其中一個(或檢查並解鎖標示「結果未知」的那個),再重試。",
|
|
205
|
-
machineLimitUnknown: "{0}(結果未知)",
|
|
206
158
|
sendFailure_delivery_changed: "訊息送出前,登入或實例狀態已改變。必要時請重新登入,再重試。",
|
|
207
159
|
sendFailure_reply_gone: "你回覆的訊息已不在這個聊天裡。內容還在:可以不帶回覆直接送出,或改回覆其他訊息。",
|
|
208
160
|
reply: "回覆", replyingTo: "回覆 {0}", replyCancel: "取消回覆(Esc)", replyHidden: "之前的一則訊息", replyPhoto: "[圖片]", replyFile: "[檔案]",
|
|
@@ -307,7 +259,7 @@ register("chat", {
|
|
|
307
259
|
pick: "選一個 Agent 開始聊天。", noAgents: "先建立一個 Agent,再開始聊天。", newAgent: "新增 Agent", notFound: "沒有叫「{0}」的 instance", notFoundHint: "它可能已被刪除或改名。", backToList: "選擇 Agent",
|
|
308
260
|
details: "Instance 詳細資料", fullWidth: "全寬", start: "啟動 instance", stopInstance: "停止 instance", restart: "重新啟動 instance", delete: "刪除 instance…",
|
|
309
261
|
started: "{0} 已啟動", stoppedInst: "{0} 已停止", restarted: "{0} 已重新啟動", instanceDeleted: "{0} 已刪除",
|
|
310
|
-
deleteTitle: "要刪除 {0} 嗎?", deleteHelp: "這會把 instance 從 fleet
|
|
262
|
+
deleteTitle: "要刪除 {0} 嗎?", deleteHelp: "這會把 instance 從 fleet 移除並停止它,並刪除它的聊天 topic(在 Discord 上是它的頻道與訊息記錄)。工作目錄會保留。請輸入「delete {0}」確認。", deleteGo: "刪除", cancel: "取消",
|
|
311
263
|
loadFailed: "載入失敗", tour: "聊天導覽", tourBtnTitle: "在 Agent 的聊天上開啟聊天導覽", tourNoAgent: "請先選一個 Agent,再開啟聊天導覽。",
|
|
312
264
|
dName: "名稱", dStatus: "狀態", dDisplay: "顯示名稱", dDescription: "說明", dDirectory: "目錄", dBackend: "Backend", dModel: "模型", dEffort: "Effort",
|
|
313
265
|
dCost: "花費", dCostNote: "(本次 session 累計)", dContext: "Context", dRate5: "5 小時額度", dRate7: "7 天額度", dActivity: "最近活動", dInstance: "Instance", dRuntime: "執行環境",
|
package/dist/ui/chat-thread.js
CHANGED
|
@@ -45,6 +45,47 @@ const COPY = '<svg class="icon" width="14" height="14" viewBox="0 0 24 24" fill=
|
|
|
45
45
|
/** Escapes & " ' < >: safe for text and inside a quoted attribute. */
|
|
46
46
|
export function escAttr(s) { return String(s == null ? "" : s).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">"); }
|
|
47
47
|
export const msgKey = (x) => `${x.boot}-${x.id}`;
|
|
48
|
+
/** How many elements an HTML string would build: its opening tags (escaped text has none). */
|
|
49
|
+
function tagsIn(html) {
|
|
50
|
+
let n = 0;
|
|
51
|
+
for (let i = html.indexOf("<"); i !== -1; i = html.indexOf("<", i + 1)) { const c = html.charCodeAt(i + 1); if ((c | 32) >= 97 && (c | 32) <= 122) n++; }
|
|
52
|
+
return n;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* M-2448: a Markdown file drawn into `el` for the side panel — renderMarkdown, which escapes first (no raw HTML, no
|
|
56
|
+
* script: the same renderer and the same output as the chat's Markdown card), or the text as plain text when its
|
|
57
|
+
* formatting would build more than TEXT_PREVIEW_NODES elements. This module is the one that writes rendered Markdown
|
|
58
|
+
* (web-csp-1268); the panel asks it. Returns "md" or "plain".
|
|
59
|
+
*/
|
|
60
|
+
export function drawMarkdown(el, src) {
|
|
61
|
+
const doc = el.ownerDocument;
|
|
62
|
+
el.textContent = "";
|
|
63
|
+
const html = globalThis.AgendChatRender.renderMarkdown(String(src));
|
|
64
|
+
// Each code block gains three elements below (its frame, head and label): counted before anything is built.
|
|
65
|
+
const pres = (html.match(/<pre[\s>]/g) || []).length;
|
|
66
|
+
if (tagsIn(html) + 3 * pres > TEXT_PREVIEW_NODES) {
|
|
67
|
+
const pre = doc.createElement("pre"), code = doc.createElement("code");
|
|
68
|
+
pre.className = "tc-pre"; code.textContent = String(src); pre.append(code); el.append(pre);
|
|
69
|
+
return "plain";
|
|
70
|
+
}
|
|
71
|
+
// Inside the chat's own message container, so the chat's Markdown look applies as it is (lists, links, tables, code)
|
|
72
|
+
// — also with a stylesheet from before this panel existed.
|
|
73
|
+
const msg = doc.createElement("div"), md = doc.createElement("div");
|
|
74
|
+
msg.className = "msg pv-md-msg";
|
|
75
|
+
md.className = "md";
|
|
76
|
+
md.innerHTML = html;
|
|
77
|
+
// Code blocks in the chat's frame, with their language (the thread's Wrap/Copy controls belong to the thread).
|
|
78
|
+
for (const pre of md.querySelectorAll("pre")) {
|
|
79
|
+
const box = doc.createElement("div"), head = doc.createElement("div"), lang = doc.createElement("span");
|
|
80
|
+
box.className = "codeblock"; head.className = "cb-head"; lang.className = "cb-lang";
|
|
81
|
+
lang.textContent = pre.dataset.lang || "text";
|
|
82
|
+
head.append(lang);
|
|
83
|
+
pre.replaceWith(box); box.append(head, pre);
|
|
84
|
+
}
|
|
85
|
+
msg.append(md);
|
|
86
|
+
el.append(msg);
|
|
87
|
+
return "md";
|
|
88
|
+
}
|
|
48
89
|
/**
|
|
49
90
|
* Board 00ef2430: a thread opens with only its newest messages drawn — enough for a screen — so switching chats paints
|
|
50
91
|
* at once; the older ones are drawn after that, a chunk at a time between frames, the reader's place kept.
|
|
@@ -365,10 +406,10 @@ export function createThread(list, scroller, opts) {
|
|
|
365
406
|
const att = atts.find(a => a && a.id === ph.dataset.att);
|
|
366
407
|
const type = att ? R().attachmentPreviewType(att) : null;
|
|
367
408
|
if (!att || !type || type !== ph.dataset.type) continue;
|
|
368
|
-
buildTextCard(ph, att, type);
|
|
409
|
+
buildTextCard(ph, att, type, x);
|
|
369
410
|
}
|
|
370
411
|
}
|
|
371
|
-
function buildTextCard(ph, att, type) {
|
|
412
|
+
function buildTextCard(ph, att, type, x) {
|
|
372
413
|
const doc = list.ownerDocument;
|
|
373
414
|
const el = (tag, cls, text) => { const e = doc.createElement(tag); if (cls) e.className = cls; if (text != null) e.textContent = text; return e; };
|
|
374
415
|
ph.textContent = "";
|
|
@@ -376,7 +417,16 @@ export function createThread(list, scroller, opts) {
|
|
|
376
417
|
const label = el("span", "tc-label", att.name);
|
|
377
418
|
const show = el("button", "btn btn-sm tc-show", tr("chat.tcShow")); show.type = "button";
|
|
378
419
|
const dl = el("a", "btn btn-sm tc-dl", tr("chat.tcDownload")); dl.href = `/ui/file/${att.id}`; dl.setAttribute("download", att.name);
|
|
379
|
-
head.append(label, show
|
|
420
|
+
head.append(label, show);
|
|
421
|
+
// M-2448: a Markdown file opens in the side panel too (the panel reads it, or takes what Show already read).
|
|
422
|
+
const panel = opts.panel || null;
|
|
423
|
+
if (type === "md" && panel && typeof panel.openMarkdown === "function" && x) {
|
|
424
|
+
const toPanel = el("button", "btn btn-sm btn-ghost tc-panel", tr("chat.pvOpenPanel")); toPanel.type = "button";
|
|
425
|
+
toPanel.onclick = () => panel.openMarkdown({ key: `${msgKey(x)}:m${att.id}`, instance: x.instance, msgKey: msgKey(x),
|
|
426
|
+
att: { id: att.id, name: att.name, size: att.size }, sender: x.sender, ts: x.ts, ...(text !== null ? { text } : {}) });
|
|
427
|
+
head.append(toPanel);
|
|
428
|
+
}
|
|
429
|
+
head.append(dl);
|
|
380
430
|
const note = el("div", "pv-note"); note.setAttribute("data-trust", "thread-control");
|
|
381
431
|
const body = el("div", "tc-body"); body.hidden = true;
|
|
382
432
|
ph.append(head, note, body);
|
|
@@ -8,7 +8,7 @@ import { appStore, useStore } from "/assets/app-store.js";
|
|
|
8
8
|
import { Dialog } from "/assets/ui-dialog.js";
|
|
9
9
|
import { Icon } from "/assets/ui-icons.js";
|
|
10
10
|
import { toast } from "/assets/ui-toast.js";
|
|
11
|
-
import { StatusPill, Who, answerBlocked, askText, boardApi, currentWork, errorText, followsSubs, moveCard, notesForPeople, relTime, wrapUpText } from "./fleet-task-common.js";
|
|
11
|
+
import { AssigneeOption, StatusPill, Who, answerBlocked, askText, boardApi, currentWork, errorText, followsSubs, moveCard, notesForPeople, relTime, wrapUpText } from "./fleet-task-common.js";
|
|
12
12
|
|
|
13
13
|
register("taskcard", {
|
|
14
14
|
en: {
|
|
@@ -85,7 +85,7 @@ const fieldName = (k) => { const key = `taskcard.f${k[0].toUpperCase()}${k.slice
|
|
|
85
85
|
* `writable`: false over the public link (the card is shown, nothing on it changes). `place`: up and down in its column,
|
|
86
86
|
* for touch and keyboard (null when it cannot move).
|
|
87
87
|
*/
|
|
88
|
-
export function CardDialog({ id, tick, projects, writable = true, place = null, onClose, onOpen, reloadBoard }) {
|
|
88
|
+
export function CardDialog({ id, tick, projects, boardOff = [], writable = true, place = null, onClose, onOpen, reloadBoard }) {
|
|
89
89
|
const { instances } = useStore(appStore);
|
|
90
90
|
const [detail, setDetail] = useState(null);
|
|
91
91
|
const [missing, setMissing] = useState(false);
|
|
@@ -199,7 +199,7 @@ export function CardDialog({ id, tick, projects, writable = true, place = null,
|
|
|
199
199
|
${writable ? html`<select class="tb-select" value="\u0000pick" aria-label=${t("taskcard.assignee")} onChange=${(e) => { const v = e.target.value; e.target.value = "\u0000pick"; void chooseAssignee(v); }}>
|
|
200
200
|
<option value="\u0000pick" disabled hidden>${t("taskcard.change")}</option>
|
|
201
201
|
${card.assignee ? html`<option value="\u0000none">${t("taskcard.unassign")}</option>` : null}
|
|
202
|
-
${names.filter((n) => n !== card.assignee).map((n) => html
|
|
202
|
+
${names.filter((n) => n !== card.assignee).map((n) => html`<${AssigneeOption} key=${n} name=${n} boardOff=${boardOff} />`)}
|
|
203
203
|
<option value="\u0000other">${t("taskcard.other")}</option>
|
|
204
204
|
</select>` : null}</dd>
|
|
205
205
|
${isMain && children.length ? html`<dt>${t("taskcard.now")}</dt><dd>${(() => {
|
|
@@ -42,6 +42,7 @@ register("tasks", {
|
|
|
42
42
|
definitionHint: "One per line: conditions anyone can check", acceptanceHint: "One per line",
|
|
43
43
|
context: "Context", contextHint: "Paths, related cards, decisions already made (pointers only)",
|
|
44
44
|
assignee: "Assignee", assigneeHint: "Which instance", project: "Project", size: "Size", priority: "Priority",
|
|
45
|
+
boardOff: "{0} (task board off)", boardOffHint: "Instances with the task board switched off cannot be handed cards: they have no task tool to read them with.",
|
|
45
46
|
reviewBox: "Stop at review for my confirmation", created: "Opened {0}", titleRequired: "A title is required",
|
|
46
47
|
search: "Search cards", searchHint: "Search titles, fields, checklists and comments", searchEmpty: "No cards match", inField: "in {0}",
|
|
47
48
|
fieldgoal: "goal", fieldscope: "scope", fieldcontext: "context", fieldstate: "state", fieldresult: "result", fieldblockedReason: "blocked reason",
|
|
@@ -71,6 +72,7 @@ register("tasks", {
|
|
|
71
72
|
"err.dep_own_main": "A sub task cannot depend on its own main task {0}", "err.dep_own_sub": "A main task cannot depend on its own sub task {0}",
|
|
72
73
|
"err.dep_cycle": "These dependencies would wait on each other forever: {0}", "err.conflict": "{0} was changed meanwhile (last by {1})",
|
|
73
74
|
"err.signed_in_only": "The task board takes changes from a signed-in dashboard", "err.unavailable": "The task board is not available right now", "err.not_over_public_link": "The public link can only read the board",
|
|
75
|
+
"err.assignee_board_off": "{0} has the task board switched off: it cannot read or move cards. Switch it on for {0} (Settings → the agent → Dashboard access), or hand it the work in the chat",
|
|
74
76
|
"note.review_waiting": "{0} “{1}”: every sub task is done — it waits for your confirmation",
|
|
75
77
|
"note.back_to": "{0} has unfinished sub tasks again: it is back to {1}", "note.deps_done": "{0}'s dependencies are all done: it can start",
|
|
76
78
|
"note.deps_unmet": "Note: {0} not done yet",
|
|
@@ -115,6 +117,7 @@ register("tasks", {
|
|
|
115
117
|
definitionHint: "一行一項:能客觀判斷是否達成的條件", acceptanceHint: "一行一項",
|
|
116
118
|
context: "背景", contextHint: "檔案路徑、相關卡號、已經做的決定(只放指引)",
|
|
117
119
|
assignee: "負責人", assigneeHint: "交給哪個 instance", project: "專案", size: "大小", priority: "優先度",
|
|
120
|
+
boardOff: "{0}(看板已關閉)", boardOffHint: "關閉任務看板的 instance 不能被派卡:它沒有 task 工具,讀不到卡片。",
|
|
118
121
|
reviewBox: "做完要停在待確認,等我確認", created: "已開 {0}", titleRequired: "標題必填",
|
|
119
122
|
search: "搜尋卡片", searchHint: "搜尋標題、各欄位、驗收條件和留言", searchEmpty: "沒有符合的卡片", inField: "在{0}",
|
|
120
123
|
fieldgoal: "目標", fieldscope: "範圍", fieldcontext: "背景", fieldstate: "目前狀態", fieldresult: "產出", fieldblockedReason: "卡住原因",
|
|
@@ -144,6 +147,7 @@ register("tasks", {
|
|
|
144
147
|
"err.dep_own_main": "子任務不能相依自己的主任務 {0}", "err.dep_own_sub": "主任務不能相依自己的子任務 {0}",
|
|
145
148
|
"err.dep_cycle": "相依會形成循環,大家會互相等待:{0}", "err.conflict": "{0} 已經被改過(最後由 {1} 修改)",
|
|
146
149
|
"err.signed_in_only": "看板只接受已登入網頁的修改", "err.unavailable": "看板目前無法使用", "err.not_over_public_link": "公開連結只能看看板,不能修改",
|
|
150
|
+
"err.assignee_board_off": "{0} 關閉了任務看板,讀不到也動不了卡片。請先替 {0} 開啟(Settings → 該 agent → Dashboard access),或改在聊天中交辦",
|
|
147
151
|
"note.review_waiting": "{0}「{1}」的子任務都完成了,等你確認",
|
|
148
152
|
"note.back_to": "{0} 又有沒完成的子任務,已回到{1}", "note.deps_done": "{0} 的相依都完成了,可以開始",
|
|
149
153
|
"note.deps_unmet": "提醒:{0} 還沒完成",
|
|
@@ -322,6 +326,12 @@ function word(key, arg, i) {
|
|
|
322
326
|
return arg;
|
|
323
327
|
}
|
|
324
328
|
|
|
329
|
+
/** An assignee picker's choice: an instance with the task board switched off is shown, greyed out — the board refuses it. */
|
|
330
|
+
export function AssigneeOption({ name, boardOff = [] }) {
|
|
331
|
+
const off = boardOff.includes(name);
|
|
332
|
+
return html`<option value=${name} disabled=${off} title=${off ? t("tasks.boardOffHint") : undefined}>${off ? t("tasks.boardOff", name) : name}</option>`;
|
|
333
|
+
}
|
|
334
|
+
|
|
325
335
|
/** A refusal in the page's language when the board named it (tasks.err.<key>), else the board's own sentence. */
|
|
326
336
|
export function errorText(err) {
|
|
327
337
|
if (err && err.key) {
|
package/dist/ui/fleet-tasks.js
CHANGED
|
@@ -15,7 +15,7 @@ import { Empty, ErrorState, Skeleton } from "/assets/ui-states.js";
|
|
|
15
15
|
import { Icon } from "/assets/ui-icons.js";
|
|
16
16
|
import { Menu } from "/assets/ui-menu.js";
|
|
17
17
|
import { toast } from "/assets/ui-toast.js";
|
|
18
|
-
import { AskHost, COLUMNS, NO_PROJECT, ProgressBar, StatusPill, UNASSIGNED, Who, answerBlocked, boardApi, currentWork, dropNeighbours, errorText, followsSubs, moveCard, onPublicLink, projectKey, projectStats, readStored, recentlyDone, relTime, reviewLabel, waitsForYou, workersOf, wrapUpText, writeStored } from "./fleet-task-common.js";
|
|
18
|
+
import { AskHost, AssigneeOption, COLUMNS, NO_PROJECT, ProgressBar, StatusPill, UNASSIGNED, Who, answerBlocked, boardApi, currentWork, dropNeighbours, errorText, followsSubs, moveCard, onPublicLink, projectKey, projectStats, readStored, recentlyDone, relTime, reviewLabel, waitsForYou, workersOf, wrapUpText, writeStored } from "./fleet-task-common.js";
|
|
19
19
|
import { CardDialog } from "./fleet-task-card.js";
|
|
20
20
|
import { InstancesDrawer } from "./fleet-task-work.js";
|
|
21
21
|
|
|
@@ -107,6 +107,8 @@ export function TaskBoardTab({ lease }) {
|
|
|
107
107
|
const projects = Array.isArray(state.data.projects) ? state.data.projects : [];
|
|
108
108
|
// #2355 review: the names a project's lead may be, as the server accepts them (the fleet's instances).
|
|
109
109
|
const leads = Array.isArray(state.data.leads) ? state.data.leads : [];
|
|
110
|
+
// The instances with the task board switched off: the board hands them no cards, so the pickers do not offer them.
|
|
111
|
+
const boardOff = Array.isArray(state.data.boardOff) ? state.data.boardOff : [];
|
|
110
112
|
// The server's numbers cover every card (finished ones are not all on the board); computed here only without them.
|
|
111
113
|
const stats = (key) => (state.data.stats && state.data.stats[String(key)]) || projectStats(key, cards);
|
|
112
114
|
const project = at === null ? null : at === NO_PROJECT ? NO_PROJECT : projects.find((p) => p.id === at) || null;
|
|
@@ -117,9 +119,9 @@ export function TaskBoardTab({ lease }) {
|
|
|
117
119
|
return html`<div class="tb">
|
|
118
120
|
${writable ? null : html`<p class="tb-readonly" role="note"><${Icon} name="eye" size=${16} />${t("tasks.readOnly")}</p>`}
|
|
119
121
|
${body}
|
|
120
|
-
${openId ? html`<${CardDialog} key=${openId} id=${openId} tick=${tick} projects=${projects} writable=${writable} place=${writable ? placeOf(cards, openId, reload) : null}
|
|
122
|
+
${openId ? html`<${CardDialog} key=${openId} id=${openId} tick=${tick} projects=${projects} boardOff=${boardOff} writable=${writable} place=${writable ? placeOf(cards, openId, reload) : null}
|
|
121
123
|
onClose=${closeCard} onOpen=${openCard} reloadBoard=${reload} />` : null}
|
|
122
|
-
${dialog && dialog.kind === "main" ? html`<${CreateMainDialog} projects=${projects} project=${dialog.project} onClose=${() => setDialog(null)}
|
|
124
|
+
${dialog && dialog.kind === "main" ? html`<${CreateMainDialog} projects=${projects} project=${dialog.project} boardOff=${boardOff} onClose=${() => setDialog(null)}
|
|
123
125
|
onCreated=${(id) => { if (!lease.current()) return; setDialog(null); reload(); openCard(id); }} />` : null}
|
|
124
126
|
${dialog && dialog.kind === "instances" ? html`<${InstancesDrawer} tick=${tick} onClose=${() => setDialog(null)} onOpen=${(id) => { setDialog(null); openCard(id); }} />` : null}
|
|
125
127
|
${dialog && dialog.kind === "project" ? html`<${ProjectDialog} project=${dialog.project} leads=${leads} onClose=${() => setDialog(null)}
|
|
@@ -471,7 +473,7 @@ function Tile({ card, dragging, flash, subs = [], expanded, writable, onToggleSu
|
|
|
471
473
|
|
|
472
474
|
// ── Dialogs: a new main task, a project ───────────────────
|
|
473
475
|
|
|
474
|
-
function CreateMainDialog({ projects, project, onClose, onCreated }) {
|
|
476
|
+
function CreateMainDialog({ projects, project, boardOff = [], onClose, onCreated }) {
|
|
475
477
|
const { instances } = useStore(appStore);
|
|
476
478
|
const active = projects.filter((p) => !p.archived);
|
|
477
479
|
const [f, setF] = useState({ project: project === null || project === undefined ? "" : String(project), title: "", goal: "", scope: "", acceptance: "", context: "", size: "", priority: "normal", assignee: "", needsReview: true });
|
|
@@ -502,7 +504,7 @@ function CreateMainDialog({ projects, project, onClose, onCreated }) {
|
|
|
502
504
|
${field(t("tasks.definition"), html`<textarea rows="3" placeholder=${t("tasks.definitionHint")} value=${f.acceptance} onInput=${set("acceptance")}></textarea>`)}
|
|
503
505
|
${field(t("tasks.context"), html`<textarea rows="2" maxlength="1000" placeholder=${t("tasks.contextHint")} value=${f.context} onInput=${set("context")}></textarea>`)}
|
|
504
506
|
<div class="tb-form-row">
|
|
505
|
-
${field(t("tasks.assignee"), html`<select value=${f.assignee} onChange=${set("assignee")}><option value="">${t("tasks.nobody")}</option>${instances.map((i) => html
|
|
507
|
+
${field(t("tasks.assignee"), html`<select value=${f.assignee} onChange=${set("assignee")}><option value="">${t("tasks.nobody")}</option>${instances.map((i) => html`<${AssigneeOption} key=${i.name} name=${i.name} boardOff=${boardOff} />`)}</select>`)}
|
|
506
508
|
${field(t("tasks.size"), html`<select value=${f.size} onChange=${set("size")}><option value="">${t("tasks.sizeNone")}</option><option value="S">${t("tasks.sizeS")}</option><option value="M">${t("tasks.sizeM")}</option><option value="L">${t("tasks.sizeL")}</option></select>`)}
|
|
507
509
|
${field(t("tasks.priority"), html`<select value=${f.priority} onChange=${set("priority")}>${["urgent", "high", "normal", "low"].map((p) => html`<option key=${p} value=${p}>${t(`tasks.${p}`)}</option>`)}</select>`)}
|
|
508
510
|
</div>
|