@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/tmux-pane-host.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { TmuxManager } from "./tmux-manager.js";
|
|
2
|
-
import type { PaneHost, PaneObservation, PaneSize } from "./pane-port.js";
|
|
3
|
-
/** Delegation preserves native handle identity, optional read lanes and all existing defaults. */
|
|
4
|
-
export declare class TmuxPaneHost implements PaneHost {
|
|
5
|
-
readonly executionHost: "local";
|
|
6
|
-
bind(session: string, id: string, size?: PaneSize, observation?: PaneObservation): TmuxManager;
|
|
7
|
-
ensureSession(session: string): Promise<void>;
|
|
8
|
-
sessionExists(session: string): Promise<boolean>;
|
|
9
|
-
sessionExistsStrict(session: string): Promise<boolean>;
|
|
10
|
-
killSession(session: string): Promise<void>;
|
|
11
|
-
getServerPid(session: string): Promise<number | null>;
|
|
12
|
-
listWindows(session: string, observation?: PaneObservation): Promise<{
|
|
13
|
-
id: string;
|
|
14
|
-
name: string;
|
|
15
|
-
}[]>;
|
|
16
|
-
listWindowsStrict(session: string, observation?: PaneObservation): Promise<{
|
|
17
|
-
id: string;
|
|
18
|
-
name: string;
|
|
19
|
-
}[]>;
|
|
20
|
-
getPanePid(session: string, id: string, timeoutMs?: number): Promise<number | null>;
|
|
21
|
-
listPanePids(session: string, timeoutMs?: number): Promise<{
|
|
22
|
-
pid: number;
|
|
23
|
-
window: string;
|
|
24
|
-
}[]>;
|
|
25
|
-
}
|
|
26
|
-
export declare const tmuxPaneHost: PaneHost;
|
package/dist/tmux-pane-host.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { TmuxManager } from "./tmux-manager.js";
|
|
2
|
-
/** The control-mode read optimization is local to tmux, not part of a terminal transport. */
|
|
3
|
-
function readPort(observation) {
|
|
4
|
-
const candidate = observation;
|
|
5
|
-
return typeof candidate?.read === "function" && typeof candidate.isFor === "function"
|
|
6
|
-
? candidate : undefined;
|
|
7
|
-
}
|
|
8
|
-
/** Delegation preserves native handle identity, optional read lanes and all existing defaults. */
|
|
9
|
-
export class TmuxPaneHost {
|
|
10
|
-
executionHost = "local";
|
|
11
|
-
bind(session, id, size, observation) {
|
|
12
|
-
return new TmuxManager(session, id, size, readPort(observation));
|
|
13
|
-
}
|
|
14
|
-
ensureSession(session) { return TmuxManager.ensureSession(session); }
|
|
15
|
-
sessionExists(session) { return TmuxManager.sessionExists(session); }
|
|
16
|
-
sessionExistsStrict(session) { return TmuxManager.sessionExistsStrict(session); }
|
|
17
|
-
killSession(session) { return TmuxManager.killSession(session); }
|
|
18
|
-
getServerPid(session) { return TmuxManager.getServerPid(session); }
|
|
19
|
-
listWindows(session, observation) { return TmuxManager.listWindows(session, readPort(observation)); }
|
|
20
|
-
listWindowsStrict(session, observation) { return TmuxManager.listWindowsStrict(session, readPort(observation)); }
|
|
21
|
-
getPanePid(session, id, timeoutMs) { return TmuxManager.getPanePid(session, id, timeoutMs); }
|
|
22
|
-
listPanePids(session, timeoutMs) { return TmuxManager.listPanePids(session, timeoutMs); }
|
|
23
|
-
}
|
|
24
|
-
export const tmuxPaneHost = new TmuxPaneHost();
|
|
25
|
-
//# sourceMappingURL=tmux-pane-host.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-pane-host.js","sourceRoot":"","sources":["../src/tmux-pane-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,6FAA6F;AAC7F,SAAS,QAAQ,CAAC,WAA6B;IAC7C,MAAM,SAAS,GAAG,WAAoE,CAAC;IACvF,OAAO,OAAO,SAAS,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;QACnF,CAAC,CAAC,SAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,kGAAkG;AAClG,MAAM,OAAO,YAAY;IACd,aAAa,GAAG,OAAgB,CAAC;IAC1C,IAAI,CAAC,OAAe,EAAE,EAAU,EAAE,IAAe,EAAE,WAA6B;QAC9E,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,aAAa,CAAC,OAAe,IAAI,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,aAAa,CAAC,OAAe,IAAI,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,mBAAmB,CAAC,OAAe,IAAI,OAAO,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzF,WAAW,CAAC,OAAe,IAAI,OAAO,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,YAAY,CAAC,OAAe,IAAI,OAAO,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3E,WAAW,CAAC,OAAe,EAAE,WAA6B,IAAI,OAAO,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/H,iBAAiB,CAAC,OAAe,EAAE,WAA6B,IAAI,OAAO,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3I,UAAU,CAAC,OAAe,EAAE,EAAU,EAAE,SAAkB,IAAI,OAAO,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtH,YAAY,CAAC,OAAe,EAAE,SAAkB,IAAI,OAAO,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CAC3G;AAED,MAAM,CAAC,MAAM,YAAY,GAAa,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Where a delivery's marker turned up in a transcript delta:
|
|
3
|
-
* - `user` — the CLI consumed it as a user message of its own (the strongest signal);
|
|
4
|
-
* - `absorbed` — consumed INTO a running turn at a tool boundary (#1201). Claude Code 2.1.293 writes no user entry for
|
|
5
|
-
* that: a `queue-operation` remove with `reason: "absorbed_mid_turn"` and an `attachment` of type `queued_command`
|
|
6
|
-
* whose `prompt` is the message (tests/fixtures/claude-2.1.293-steer-consumed-mid-turn.transcript.jsonl);
|
|
7
|
-
* - `queued` — Claude Code's queue-operation enqueue: accepted into its input queue, not consumed yet.
|
|
8
|
-
* Consumed means `user` or `absorbed`.
|
|
9
|
-
*/
|
|
10
|
-
export type TranscriptMarkerKind = "user" | "absorbed" | "queued";
|
|
11
|
-
/** Whether a marker kind means the CLI took the message (as its own turn, or into the running one). */
|
|
12
|
-
export declare function markerConsumed(kind: TranscriptMarkerKind | null | undefined): kind is "user" | "absorbed";
|
|
13
|
-
export declare function transcriptDeltaDeliveryMarker(rawDelta: string, backend: string, deliveryId: string): TranscriptMarkerKind | null;
|
|
14
|
-
/**
|
|
15
|
-
* What a transcript proof looks for: an enveloped delivery's id marker (a delivery id string), or — for a raw paste,
|
|
16
|
-
* which carries no envelope (a silent schedule, a system command) — its exact text (#1647).
|
|
17
|
-
*/
|
|
18
|
-
export type TranscriptNeedle = string | {
|
|
19
|
-
readonly rawText: string;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* #1647: a raw paste's exact text as a user entry of the CLI's own — a message that, whitespace aside and without Claude
|
|
23
|
-
* Code's paste wrapper, IS the pasted text — is the record of the turn that took the paste. The delta starts at the
|
|
24
|
-
* checkpoint taken before the write, so an earlier copy of the same words (a schedule repeats them every run) is never
|
|
25
|
-
* in it. A quote of the text inside a longer message, a tool result or a queued entry is not. Raw text is not unique
|
|
26
|
-
* the way a delivery marker is: the caller must hold a transcript that belongs to the target alone (#1663 P1-2).
|
|
27
|
-
*/
|
|
28
|
-
export declare function transcriptDeltaHasRawText(rawDelta: string, backend: string, rawText: string): boolean;
|
|
29
|
-
/** One needle against one delta: the marker's kind, `user` for a raw paste's own entry, or null. */
|
|
30
|
-
export declare function transcriptDeltaNeedle(rawDelta: string, backend: string, needle: TranscriptNeedle): TranscriptMarkerKind | null;
|
|
31
|
-
/**
|
|
32
|
-
* Whether the CLI consumed the delivery: its unique marker at the start of a persisted user-message body, or of the
|
|
33
|
-
* message Claude Code absorbed into a running turn (#1201).
|
|
34
|
-
*/
|
|
35
|
-
export declare function transcriptDeltaHasDeliveryMarker(rawDelta: string, backend: string, deliveryId: string): boolean;
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/** Pure consumed/absorbed/queued and raw-paste proof grammar shared by local and native readers. */
|
|
2
|
-
import { normalizeTurnText } from "./transcript-turns.js";
|
|
3
|
-
const ENTER_MARKER = (deliveryId) => `[agend-delivery-id:${deliveryId}]`;
|
|
4
|
-
function userTextsFromEntry(entry, backend) {
|
|
5
|
-
if (!entry || typeof entry !== "object")
|
|
6
|
-
return [];
|
|
7
|
-
const value = entry;
|
|
8
|
-
if (backend === "claude-code") {
|
|
9
|
-
const message = value.message;
|
|
10
|
-
if (value.type !== "user" || message?.role !== "user")
|
|
11
|
-
return [];
|
|
12
|
-
const content = message.content;
|
|
13
|
-
if (typeof content === "string")
|
|
14
|
-
return [content];
|
|
15
|
-
if (!Array.isArray(content))
|
|
16
|
-
return [];
|
|
17
|
-
return content.filter((item) => item?.type === "text" && typeof item.text === "string")
|
|
18
|
-
.map((item) => item.text);
|
|
19
|
-
}
|
|
20
|
-
if (backend === "codex") {
|
|
21
|
-
const payload = value.payload;
|
|
22
|
-
if (value.type !== "response_item" || payload?.type !== "message" || payload?.role !== "user")
|
|
23
|
-
return [];
|
|
24
|
-
if (!Array.isArray(payload.content))
|
|
25
|
-
return [];
|
|
26
|
-
return payload.content.filter((item) => item?.type === "input_text" && typeof item.text === "string")
|
|
27
|
-
.map((item) => item.text);
|
|
28
|
-
}
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Claude Code persists a pasted message wrapped in `\n\n<pasted_content id="<hex>">\n` — every paste, small or large
|
|
33
|
-
* (seen on all 640 delivery entries of 2.1.284–2.1.289, none of which begins with the marker itself). The wrapper is the
|
|
34
|
-
* CLI's own, in a fixed shape, so it is the one thing allowed in front of the marker; anything else in front still
|
|
35
|
-
* disqualifies the entry.
|
|
36
|
-
*/
|
|
37
|
-
const CLAUDE_PASTE_WRAPPER = /^\s*<pasted_content id="[0-9a-f]+">\r?\n/;
|
|
38
|
-
/** A unique marker counts only at the start of a persisted body (after the CLI's own paste wrapper, if it adds one). */
|
|
39
|
-
function leadsWithMarker(text, backend, marker) {
|
|
40
|
-
if (text.startsWith(marker))
|
|
41
|
-
return true;
|
|
42
|
-
if (backend !== "claude-code")
|
|
43
|
-
return false;
|
|
44
|
-
const wrapper = CLAUDE_PASTE_WRAPPER.exec(text);
|
|
45
|
-
return !!wrapper && text.startsWith(marker, wrapper[0].length);
|
|
46
|
-
}
|
|
47
|
-
/** Whether a marker kind means the CLI took the message (as its own turn, or into the running one). */
|
|
48
|
-
export function markerConsumed(kind) {
|
|
49
|
-
return kind === "user" || kind === "absorbed";
|
|
50
|
-
}
|
|
51
|
-
/** Claude Code's record of a queued message absorbed into the running turn: the message's own text, or null. */
|
|
52
|
-
function claudeAbsorbedText(value) {
|
|
53
|
-
if (value.type === "attachment" && value.attachment?.type === "queued_command" && typeof value.attachment.prompt === "string") {
|
|
54
|
-
return value.attachment.prompt;
|
|
55
|
-
}
|
|
56
|
-
if (value.type === "queue-operation" && value.operation === "remove" && value.reason === "absorbed_mid_turn"
|
|
57
|
-
&& typeof value.content === "string")
|
|
58
|
-
return value.content;
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
export function transcriptDeltaDeliveryMarker(rawDelta, backend, deliveryId) {
|
|
62
|
-
const marker = ENTER_MARKER(deliveryId);
|
|
63
|
-
let queued = false;
|
|
64
|
-
let absorbed = false;
|
|
65
|
-
for (const line of rawDelta.split(/\r?\n/)) {
|
|
66
|
-
if (!line.trim())
|
|
67
|
-
continue;
|
|
68
|
-
try {
|
|
69
|
-
const entry = JSON.parse(line);
|
|
70
|
-
const firstUserText = userTextsFromEntry(entry, backend)[0];
|
|
71
|
-
if (firstUserText !== undefined && leadsWithMarker(firstUserText, backend, marker))
|
|
72
|
-
return "user";
|
|
73
|
-
const value = entry;
|
|
74
|
-
if (backend !== "claude-code" || !value || typeof value !== "object")
|
|
75
|
-
continue;
|
|
76
|
-
const absorbedText = claudeAbsorbedText(value);
|
|
77
|
-
if (absorbedText !== null && leadsWithMarker(absorbedText, backend, marker))
|
|
78
|
-
absorbed = true;
|
|
79
|
-
if (value.type === "queue-operation" && value.operation === "enqueue"
|
|
80
|
-
&& typeof value.content === "string" && leadsWithMarker(value.content, backend, marker))
|
|
81
|
-
queued = true;
|
|
82
|
-
}
|
|
83
|
-
catch { /* incomplete/malformed JSONL is not proof */ }
|
|
84
|
-
}
|
|
85
|
-
return absorbed ? "absorbed" : queued ? "queued" : null;
|
|
86
|
-
}
|
|
87
|
-
/** Claude Code's closing tag after a persisted paste: `</pasted_content id="<hex>">` (seen on 2.1.29x transcripts). */
|
|
88
|
-
const CLAUDE_PASTE_WRAPPER_END = /\r?\n?<\/pasted_content id="[0-9a-f]+">\s*$/;
|
|
89
|
-
/**
|
|
90
|
-
* #1663 P1-1: the user message's ORIGINAL body when it is one piece of text and nothing else — Claude Code's string
|
|
91
|
-
* content, or a content list of exactly one text block; Codex's content of exactly one input_text. Anything else (a
|
|
92
|
-
* second block of any kind: more text, an image, a file) is not a plain text message, so it is no raw paste's own
|
|
93
|
-
* entry: null. (userTextsFromEntry, which the marker match shares, keeps only the text blocks — not this question.)
|
|
94
|
-
*/
|
|
95
|
-
function soleUserText(entry, backend) {
|
|
96
|
-
if (!entry || typeof entry !== "object")
|
|
97
|
-
return null;
|
|
98
|
-
const value = entry;
|
|
99
|
-
const sole = (content, type) => Array.isArray(content) && content.length === 1 && content[0]?.type === type && typeof content[0].text === "string" ? content[0].text : null;
|
|
100
|
-
if (backend === "claude-code") {
|
|
101
|
-
const message = value.message;
|
|
102
|
-
if (value.type !== "user" || message?.role !== "user")
|
|
103
|
-
return null;
|
|
104
|
-
return typeof message.content === "string" ? message.content : sole(message.content, "text");
|
|
105
|
-
}
|
|
106
|
-
if (backend === "codex") {
|
|
107
|
-
const payload = value.payload;
|
|
108
|
-
if (value.type !== "response_item" || payload?.type !== "message" || payload?.role !== "user")
|
|
109
|
-
return null;
|
|
110
|
-
return sole(payload.content, "input_text");
|
|
111
|
-
}
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
/** A persisted user body without the CLI's own paste wrapper (claude-code wraps a long paste in both tags). */
|
|
115
|
-
function withoutPasteWrapper(text, backend) {
|
|
116
|
-
if (backend !== "claude-code")
|
|
117
|
-
return text;
|
|
118
|
-
const open = CLAUDE_PASTE_WRAPPER.exec(text);
|
|
119
|
-
return open ? text.slice(open[0].length).replace(CLAUDE_PASTE_WRAPPER_END, "") : text;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* #1647: a raw paste's exact text as a user entry of the CLI's own — a message that, whitespace aside and without Claude
|
|
123
|
-
* Code's paste wrapper, IS the pasted text — is the record of the turn that took the paste. The delta starts at the
|
|
124
|
-
* checkpoint taken before the write, so an earlier copy of the same words (a schedule repeats them every run) is never
|
|
125
|
-
* in it. A quote of the text inside a longer message, a tool result or a queued entry is not. Raw text is not unique
|
|
126
|
-
* the way a delivery marker is: the caller must hold a transcript that belongs to the target alone (#1663 P1-2).
|
|
127
|
-
*/
|
|
128
|
-
export function transcriptDeltaHasRawText(rawDelta, backend, rawText) {
|
|
129
|
-
const wanted = normalizeTurnText(rawText);
|
|
130
|
-
if (!wanted)
|
|
131
|
-
return false;
|
|
132
|
-
for (const line of rawDelta.split(/\r?\n/)) {
|
|
133
|
-
if (!line.trim())
|
|
134
|
-
continue;
|
|
135
|
-
try {
|
|
136
|
-
// The WHOLE user message must be the paste: its original body is one text and nothing else (#1663 P1-1).
|
|
137
|
-
const body = soleUserText(JSON.parse(line), backend);
|
|
138
|
-
if (body !== null && normalizeTurnText(withoutPasteWrapper(body, backend)) === wanted)
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
catch { /* incomplete/malformed JSONL is not proof */ }
|
|
142
|
-
}
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
/** One needle against one delta: the marker's kind, `user` for a raw paste's own entry, or null. */
|
|
146
|
-
export function transcriptDeltaNeedle(rawDelta, backend, needle) {
|
|
147
|
-
if (typeof needle === "string")
|
|
148
|
-
return transcriptDeltaDeliveryMarker(rawDelta, backend, needle);
|
|
149
|
-
return transcriptDeltaHasRawText(rawDelta, backend, needle.rawText) ? "user" : null;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Whether the CLI consumed the delivery: its unique marker at the start of a persisted user-message body, or of the
|
|
153
|
-
* message Claude Code absorbed into a running turn (#1201).
|
|
154
|
-
*/
|
|
155
|
-
export function transcriptDeltaHasDeliveryMarker(rawDelta, backend, deliveryId) {
|
|
156
|
-
return markerConsumed(transcriptDeltaDeliveryMarker(rawDelta, backend, deliveryId));
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=transcript-needles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-needles.js","sourceRoot":"","sources":["../src/transcript-needles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/** Provider record grammar only. No filesystem, SQLite, backend construction or account access. */
|
|
2
|
-
import type { TranscriptEvents } from "./transcript-sources.js";
|
|
3
|
-
import type { TranscriptTurnEvent } from "./transcript-turns.js";
|
|
4
|
-
export type TranscriptRecordEvent = ["tool_use", string, unknown] | ["tool_result", string, unknown] | ["assistant_text", string] | ["system_informational", string] | ["api_error", string, number | null, number | null, string | null] | ["user_prompt"];
|
|
5
|
-
export interface CodexRecordState {
|
|
6
|
-
openTurnId: string;
|
|
7
|
-
openTurn: string | null;
|
|
8
|
-
turnKnown: boolean;
|
|
9
|
-
}
|
|
10
|
-
/** The package root a rollout tool output reports a missing code-mode host under, or null. */
|
|
11
|
-
export declare function codexCodeModeHostMissingRoot(output: unknown): string | null;
|
|
12
|
-
export declare function codexTurnRecord(entry: Record<string, unknown>, state: CodexRecordState, turns: TranscriptTurnEvent[]): boolean;
|
|
13
|
-
export declare function codexToolRecord(entry: Record<string, unknown>, events: TranscriptEvents): void;
|
|
14
|
-
export declare function codexWholeLine(head: string): boolean;
|
|
15
|
-
/**
|
|
16
|
-
* #1218 P0: a rollout line too long to parse (an output of MBs, a huge call input) — what its head still says, so the
|
|
17
|
-
* bubble keeps the step: a call by its name, or an output. Turn records and messages are read whole (codexWholeLine).
|
|
18
|
-
*/
|
|
19
|
-
export declare function codexLongHead(head: string, events: TranscriptEvents): void;
|
|
20
|
-
export declare function claudeTranscriptRecord(entry: any, emit: (...event: TranscriptRecordEvent) => void): void;
|
|
21
|
-
export declare function claudeTranscriptLongHead(head: string, emit: (...event: TranscriptRecordEvent) => void): void;
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
const CODE_MODE_HOST_SPAWN_FAILED = /^failed to spawn code-mode host (\/[^\n]*)\/bin\/codex-code-mode-host: No such file or directory \(os error 2\)$/;
|
|
2
|
-
/** The package root a rollout tool output reports a missing code-mode host under, or null. */
|
|
3
|
-
export function codexCodeModeHostMissingRoot(output) {
|
|
4
|
-
return typeof output === "string" ? CODE_MODE_HOST_SPAWN_FAILED.exec(output)?.[1] ?? null : null;
|
|
5
|
-
}
|
|
6
|
-
export function codexTurnRecord(entry, state, turns) {
|
|
7
|
-
const p = entry.payload;
|
|
8
|
-
if (!p)
|
|
9
|
-
return false;
|
|
10
|
-
if (entry.type === "event_msg") {
|
|
11
|
-
if (p.type === "task_started" && typeof p.turn_id === "string") {
|
|
12
|
-
state.openTurnId = p.turn_id;
|
|
13
|
-
state.openTurn = p.turn_id;
|
|
14
|
-
state.turnKnown = true;
|
|
15
|
-
turns.push({ kind: "start", turnId: p.turn_id });
|
|
16
|
-
}
|
|
17
|
-
else if ((p.type === "task_complete" || p.type === "turn_aborted") && typeof p.turn_id === "string") {
|
|
18
|
-
const end = p.type === "turn_aborted" ? "aborted" : p.last_agent_message == null ? "error" : "complete";
|
|
19
|
-
if (state.openTurn === p.turn_id)
|
|
20
|
-
state.openTurn = null;
|
|
21
|
-
state.turnKnown = true;
|
|
22
|
-
turns.push({ kind: "end", turnId: p.turn_id, end });
|
|
23
|
-
}
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
if (entry.type === "response_item" && p.type === "message" && p.role === "user") {
|
|
27
|
-
const text = (p.content ?? [])
|
|
28
|
-
.map(block => typeof block.text === "string" ? block.text : "").join("\n");
|
|
29
|
-
const at = Date.parse(String(entry.timestamp ?? ""));
|
|
30
|
-
if (text.trim() && Number.isFinite(at))
|
|
31
|
-
turns.push({ kind: "user", turnId: state.openTurnId, text, at });
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
export function codexToolRecord(entry, events) {
|
|
37
|
-
const p = entry.payload;
|
|
38
|
-
if (!p || entry.type !== "response_item")
|
|
39
|
-
return;
|
|
40
|
-
if (p.type === "function_call") {
|
|
41
|
-
let input = p.arguments;
|
|
42
|
-
if (typeof input === "string") {
|
|
43
|
-
try {
|
|
44
|
-
input = JSON.parse(input);
|
|
45
|
-
}
|
|
46
|
-
catch { /* keep raw */ }
|
|
47
|
-
}
|
|
48
|
-
events.toolUses.push({ name: String(p.name ?? "unknown"), input });
|
|
49
|
-
}
|
|
50
|
-
else if (p.type === "custom_tool_call") {
|
|
51
|
-
events.toolUses.push({ name: String(p.name ?? "unknown"), input: p.input });
|
|
52
|
-
}
|
|
53
|
-
else if (p.type === "local_shell_call") {
|
|
54
|
-
const action = p.action;
|
|
55
|
-
events.toolUses.push({ name: "shell", input: { command: action?.command } });
|
|
56
|
-
}
|
|
57
|
-
else if (p.type === "function_call_output" || p.type === "custom_tool_call_output") {
|
|
58
|
-
events.toolResults.push({ name: String(p.name ?? "unknown") });
|
|
59
|
-
const root = codexCodeModeHostMissingRoot(p.output);
|
|
60
|
-
if (root)
|
|
61
|
-
(events.codexPackageMissingHost ??= []).push(root);
|
|
62
|
-
}
|
|
63
|
-
else if (p.type === "message" && p.role === "assistant") {
|
|
64
|
-
const content = p.content;
|
|
65
|
-
for (const block of content ?? []) {
|
|
66
|
-
const text = block.text;
|
|
67
|
-
if (typeof text === "string" && text.trim())
|
|
68
|
-
events.assistantTexts.push(text);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export function codexWholeLine(head) {
|
|
73
|
-
return head.includes('"type":"event_msg"') || (head.includes('"type":"response_item"') && /"payload":\{"type":"message"/.test(head));
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* #1218 P0: a rollout line too long to parse (an output of MBs, a huge call input) — what its head still says, so the
|
|
77
|
-
* bubble keeps the step: a call by its name, or an output. Turn records and messages are read whole (codexWholeLine).
|
|
78
|
-
*/
|
|
79
|
-
export function codexLongHead(head, events) {
|
|
80
|
-
if (!head.includes('"type":"response_item"'))
|
|
81
|
-
return;
|
|
82
|
-
const type = /"payload":\{[^{}]{0,400}?"type":"(function_call|custom_tool_call|function_call_output|custom_tool_call_output)"/.exec(head)?.[1];
|
|
83
|
-
if (type === "function_call" || type === "custom_tool_call") {
|
|
84
|
-
const name = /"name":"([^"]{1,200})"/.exec(head)?.[1];
|
|
85
|
-
events.toolUses.push({ name: name ?? "unknown", input: undefined });
|
|
86
|
-
}
|
|
87
|
-
else if (type)
|
|
88
|
-
events.toolResults.push({ name: "unknown" });
|
|
89
|
-
}
|
|
90
|
-
export function claudeTranscriptRecord(entry, emit) {
|
|
91
|
-
// #2834: Claude's own status notes (e.g. its usage-limit auto-continue) — a system record, not model output.
|
|
92
|
-
if (entry.type === "system" && entry.subtype === "informational" && typeof entry.content === "string") {
|
|
93
|
-
emit("system_informational", entry.content);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const msg = entry.message;
|
|
97
|
-
if (!msg?.role || !msg?.content)
|
|
98
|
-
return;
|
|
99
|
-
// #2822: Claude records a failed API call as an assistant record of its own (`isApiErrorMessage`) — the CLI's own
|
|
100
|
-
// error, not model output: told as "api_error", never as "assistant_text".
|
|
101
|
-
if (entry.type === "assistant" && entry.isApiErrorMessage === true) {
|
|
102
|
-
const text = Array.isArray(msg.content)
|
|
103
|
-
? msg.content.map((b) => (b?.type === "text" && typeof b.text === "string" ? b.text : "")).join("")
|
|
104
|
-
: String(msg.content);
|
|
105
|
-
const at = typeof entry.timestamp === "string" ? Date.parse(entry.timestamp) : NaN;
|
|
106
|
-
emit("api_error", text, typeof entry.apiErrorStatus === "number" ? entry.apiErrorStatus : null, Number.isFinite(at) ? at : null, typeof entry.error === "string" ? entry.error : null);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
// #2822: a prompt (a person's message, a system notice; a string, or text/image blocks) — never a meta record or a
|
|
110
|
-
// tool result. The point a later API error is judged against.
|
|
111
|
-
if (entry.type === "user" && entry.isMeta !== true && (typeof msg.content === "string"
|
|
112
|
-
? msg.content.trim() !== ""
|
|
113
|
-
: Array.isArray(msg.content) && msg.content.length > 0 && msg.content.every((b) => b?.type === "text" || b?.type === "image"))) {
|
|
114
|
-
emit("user_prompt");
|
|
115
|
-
}
|
|
116
|
-
const contents = Array.isArray(msg.content) ? msg.content : [{ type: "text", text: msg.content }];
|
|
117
|
-
for (const block of contents) {
|
|
118
|
-
if (block.type === "tool_use") {
|
|
119
|
-
emit("tool_use", block.name ?? "unknown", block.input ?? {});
|
|
120
|
-
}
|
|
121
|
-
else if (block.type === "tool_result") {
|
|
122
|
-
emit("tool_result", block.tool_use_id ?? "unknown", block.content);
|
|
123
|
-
}
|
|
124
|
-
else if (block.type === "text" && msg.role === "assistant" && block.text?.trim()) {
|
|
125
|
-
emit("assistant_text", block.text);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
export function claudeTranscriptLongHead(head, emit) {
|
|
130
|
-
if (head.includes('"type":"tool_result"')) {
|
|
131
|
-
for (const m of head.matchAll(/"tool_use_id":"([^"]{1,200})"/g))
|
|
132
|
-
emit("tool_result", m[1], undefined);
|
|
133
|
-
}
|
|
134
|
-
for (const m of head.matchAll(/"type":"tool_use"/g)) {
|
|
135
|
-
const name = /"name":"([^"]{1,200})"/.exec(head.slice(m.index, m.index + 400));
|
|
136
|
-
if (name)
|
|
137
|
-
emit("tool_use", name[1], {});
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=transcript-records.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-records.js","sourceRoot":"","sources":["../src/transcript-records.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
// alpha.2 (M-2300; #2973's agent requests, junsion's §6): an agent asked for a Windows agent (create_instance with
|
|
2
|
-
// runtime "windows", or update_instance_config on one). On a fleet with no chat connection there is no General card to
|
|
3
|
-
// confirm it in, so its owner — the `agend web --code` session on the AgEnD computer, web-verified (decision 28c2d3a3) —
|
|
4
|
-
// decides it here, in Needs you.
|
|
5
|
-
// - The list is read from GET /ui/agent-proposals, which answers the owner only (anyone else reads an empty list): on
|
|
6
|
-
// install, and each time the stream's `agent_proposals` event (it carries nothing) says it changed.
|
|
7
|
-
// - It lives in the app store (`proposals`), so the Needs you count includes it on every page.
|
|
8
|
-
// - A decision is POST /ui/agent-proposals/<id> {decision}; the server asks the owner, the request and the target machine
|
|
9
|
-
// again, and answers with the request as it now stands (applied, rejected, expired, already decided, failed…).
|
|
10
|
-
// Installed once per admin page (app.js), and by the Needs you panel itself (a tab opened before an upgrade has the new
|
|
11
|
-
// panel but not the new app.js: it installs it when it is first shown).
|
|
12
|
-
import { appStore } from "/assets/app-store.js";
|
|
13
|
-
|
|
14
|
-
let installed = false, reading = null, again = false;
|
|
15
|
-
// #2997 review r2 (Prism P2): the newest revision a status frame showed, and the one the list was last READ at — a read
|
|
16
|
-
// that failed (the network, a 5xx, an answer that is not a list) leaves `loaded` behind, so the next status frame (the
|
|
17
|
-
// same revision included) or the bounded retry reads again; never a revision taken as read before a read succeeded.
|
|
18
|
-
let observed = null, loaded = null, retries = 0, retryTimer = null;
|
|
19
|
-
const RETRY_MS = 5000, RETRY_MAX = 5;
|
|
20
|
-
|
|
21
|
-
/** Read the list again (one read at a time; a change meanwhile reads once more). Resolves true when it was read. */
|
|
22
|
-
export function refreshProposals() {
|
|
23
|
-
if (reading) { again = true; return reading; }
|
|
24
|
-
const want = observed;
|
|
25
|
-
if (retryTimer) { clearTimeout(retryTimer); retryTimer = null; }
|
|
26
|
-
reading = fetch("/ui/agent-proposals", { headers: { Accept: "application/json" } })
|
|
27
|
-
.then((r) => { if (!r.ok) throw new Error(`agent proposals: ${r.status}`); return r.json(); })
|
|
28
|
-
.then((d) => {
|
|
29
|
-
if (!d || !Array.isArray(d.proposals)) throw new Error("agent proposals: not a list");
|
|
30
|
-
appStore.set({ proposals: d.proposals, proposalsOwner: !!d.owner });
|
|
31
|
-
loaded = want; retries = 0;
|
|
32
|
-
return true;
|
|
33
|
-
})
|
|
34
|
-
.catch(() => {
|
|
35
|
-
// Not read: try again a few times on its own (a page whose stream sends no more status frames), and at any status
|
|
36
|
-
// frame meanwhile (its revision is still ahead of `loaded`).
|
|
37
|
-
if (retries < RETRY_MAX && !retryTimer) { retries++; retryTimer = setTimeout(() => { retryTimer = null; void refreshProposals(); }, RETRY_MS); }
|
|
38
|
-
return false;
|
|
39
|
-
})
|
|
40
|
-
.finally(() => {
|
|
41
|
-
reading = null;
|
|
42
|
-
// A change while it was out (a ping, a newer revision): read once more.
|
|
43
|
-
if (again) { again = false; void refreshProposals(); }
|
|
44
|
-
});
|
|
45
|
-
return reading;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Once per page: read once, then again on the stream's `agent_proposals` ping (live) and whenever a status frame shows a
|
|
50
|
-
* revision the list was not read at yet (#2997 review: a page that polls /ui/poll, one that reconnected, and a tab from
|
|
51
|
-
* before the upgrade — whose stream knows no `agent_proposals` event — all still apply status frames; r2: until a read
|
|
52
|
-
* at that revision succeeds). #3008: on the public link too — this computer's admin signed in from outside decides there;
|
|
53
|
-
* anyone else over it reads an empty list (the server answers the owner only).
|
|
54
|
-
*/
|
|
55
|
-
export function installProposals() {
|
|
56
|
-
if (installed) return;
|
|
57
|
-
installed = true;
|
|
58
|
-
const on = appStore.get().streamOn;
|
|
59
|
-
if (typeof on === "function") {
|
|
60
|
-
on("agent_proposals", () => { void refreshProposals(); });
|
|
61
|
-
on("status", (d) => {
|
|
62
|
-
const next = d && Number.isSafeInteger(d.agent_proposals_rev) ? d.agent_proposals_rev : null;
|
|
63
|
-
if (next === null) return;
|
|
64
|
-
observed = next;
|
|
65
|
-
if (observed !== loaded) void refreshProposals(); // a newer revision, or one not yet read successfully
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
void refreshProposals();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* The owner's Approve ("confirm") or Reject. Resolves to { ok, view, agent, message }: the request as the server says
|
|
73
|
-
* it now stands (its outcome), the new agent's name when it was created, or why nothing happened.
|
|
74
|
-
*/
|
|
75
|
-
export async function decideProposal(id, decision) {
|
|
76
|
-
let res, body = null;
|
|
77
|
-
try {
|
|
78
|
-
res = await fetch(`/ui/agent-proposals/${encodeURIComponent(id)}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ decision }) });
|
|
79
|
-
try { body = await res.json(); } catch { body = null; }
|
|
80
|
-
} catch { return { ok: false, view: null, agent: null, message: null }; }
|
|
81
|
-
void refreshProposals();
|
|
82
|
-
return { ok: !!res.ok, view: (body && body.view) || null, agent: (body && body.agent) || null, message: (body && body.message) || null,
|
|
83
|
-
error: (body && typeof body.error === "string" && body.error) || (res.ok ? null : `http_${res.status}`) };
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** For tests: as on a fresh page. */
|
|
87
|
-
export function resetProposals() {
|
|
88
|
-
installed = false; reading = null; again = false; observed = null; loaded = null; retries = 0;
|
|
89
|
-
if (retryTimer) { clearTimeout(retryTimer); retryTimer = null; }
|
|
90
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import {html,useEffect,useRef,useState} from "/assets/app-html.js";
|
|
2
|
-
import {useLease} from "/assets/app-ctx.js";
|
|
3
|
-
import {appStore,useStore} from "/assets/app-store.js";
|
|
4
|
-
import {register,t} from "/assets/app-i18n.js";
|
|
5
|
-
import {sectionPath} from "/assets/app-route.js";
|
|
6
|
-
import {Dialog} from "/assets/ui-dialog.js";
|
|
7
|
-
import {CliPicker,CliProductMark,cliLabel} from "./cli-picker.js";
|
|
8
|
-
import {RuntimePicker,tr} from "./agent-runtime.js";
|
|
9
|
-
import {useRuntimeCatalog,runtimeCliChoices} from "./runtime-catalog.js";
|
|
10
|
-
import {useWindowsCliCatalog} from "./windows-cli-catalog.js";
|
|
11
|
-
import {useBackendRows} from "./settings-catalog.js";
|
|
12
|
-
import {ModelSelect} from "./settings-dialogs.js";
|
|
13
|
-
import {machineLabel} from "./settings-agent-filters.js";
|
|
14
|
-
import {removedBackendReplacement} from "./settings-model.js";
|
|
15
|
-
register("runtimeChange",{
|
|
16
|
-
"zh-TW":{removed:"{0} 已從 AgEnD 移除,無法繼續使用。請改選其他 CLI,建議使用 {1}。",title:"切換 Runtime 與 CLI",change:"切換 Runtime/CLI",current:"執行環境與 CLI",lead:"保留同一個 Agent 與 AgEnD 聊天歷史,在選擇的電腦開始新的 CLI 對話。",configure:"設定新環境",next:"下一步",back:"上一步",cancel:"取消",apply:"儲存切換",loading:"正在讀取 Agent 與 Runtime 狀態…",busy:"正在準備新工作區並關閉舊 CLI…",fresh:"我了解切換後會開始新的 CLI 對話",freshHint:"原有 CLI 對話與檔案會留在原電腦;不會自動複製到新環境。",stopped:"切換後 Agent 會暫停,請從 Agent 列表啟動。",directoryHint:"更換電腦時請填目標電腦的路徑;留空會建立獨立工作區。",dirty:"請先儲存或取消其他編輯,再切換 Runtime。",unknown:"請重新讀取 Agent 狀態再操作,避免重複切換。",reload:"重新讀取狀態",failed:"無法切換 Runtime",noCli:"這台電腦尚無可用的 CLI。請先到 Runtime 偵測或更新清單。",generalMove:"General 的位置不在這裡切換。請到「Agent 預設值 → General 位置」,那裡會暫停投遞並確認舊程式已結束。",generalGo:"前往 General 位置"},
|
|
17
|
-
en:{removed:"{0} was removed from AgEnD and can no longer run. Choose another CLI; {1} is its replacement.",title:"Change runtime and CLI",change:"Change runtime / CLI",current:"Runtime and CLI",lead:"Keep this Agent and its AgEnD chat history. Start a fresh CLI conversation on the selected computer.",configure:"Configure the new environment",next:"Next",back:"Back",cancel:"Cancel",apply:"Save runtime change",loading:"Loading Agent and runtime state…",busy:"Preparing the new workspace and closing the old CLI…",fresh:"I understand this starts a new CLI conversation",freshHint:"Existing CLI conversations and files stay on the original computer. They are not copied to the new environment.",stopped:"The Agent will be paused after switching. Start it from the Agent list.",directoryHint:"Use a path on the target computer. Leave empty for a separate managed workspace.",dirty:"Save or cancel other edits before changing runtime.",unknown:"Read the Agent state again before another operation to avoid switching twice.",reload:"Read state again",failed:"Could not change runtime",noCli:"No runnable CLI is available on this computer. Detect or refresh its inventory in Runtime settings.",generalMove:"General is not moved from here. Use Agent defaults → General location, which holds deliveries and confirms the old process has exited.",generalGo:"Go to General location"}
|
|
18
|
-
});
|
|
19
|
-
const text=(key,...values)=>t(`runtimeChange.${key}`,...values);
|
|
20
|
-
export function AgentRuntimeSettings({name,inst,disabled=false,inherited=null,onChanged}){
|
|
21
|
-
const [open,setOpen]=useState(false),general=inst.general_topic===true||name==="general";
|
|
22
|
-
// The computer's name as the Runtime page shows it; a computer that is revoked or gone says so (with the start of its id), never the whole id.
|
|
23
|
-
const where=inst.runtime==="windows"?(inst.machine_id?machineLabel(inst.machine_id,inst.machine_name,inst.machine_status,inst.machine_missing!==true):null):null;
|
|
24
|
-
const place=inst.runtime==="windows"?(where?where.label:tr("windows")):tr("wsl");
|
|
25
|
-
return html`<section class="agent-runtime-settings"><div><span class="note">${text("current")}</span><p><${CliProductMark} id=${inst.backend} size=${20}/><strong class="agent-runtime-place" title=${where?.title||place}>${place}</strong><span class=${removedBackendReplacement(inst.backend)?"agent-runtime-removed":undefined}>· ${removedBackendReplacement(inst.backend)?t("settings.backendUnavailable",inst.backend):cliLabel(inst.backend)}</span></p>${inherited}</div>${general?html`<p class="note agent-runtime-general">${text("generalMove")} <a href=${`${sectionPath("agent-defaults")}#general-location`}>${text("generalGo")}</a></p>`:html`<button type="button" class="btn btn-sm" disabled=${disabled} title=${disabled?text("dirty"):undefined} onClick=${()=>setOpen(true)}>${text("change")}</button>`}${open&&!general?html`<${AgentRuntimeChangeDialog} name=${name} inst=${inst} onClose=${()=>setOpen(false)} onChanged=${onChanged}/>`:null}</section>`;
|
|
26
|
-
}
|
|
27
|
-
export function AgentRuntimeChangeDialog({name,inst,onClose,onChanged}){
|
|
28
|
-
const lease=useLease(`runtime-change:${name}`),claim=useRef(false);
|
|
29
|
-
const {windowsCli}=useStore(appStore),machinesState=useRuntimeCatalog(),rows=useBackendRows();
|
|
30
|
-
const [source,setSource]=useState(null),[step,setStep]=useState(1),[error,setError]=useState(""),[busy,setBusy]=useState(false),[uncertain,setUncertain]=useState(false);
|
|
31
|
-
const [f,setForm]=useState({runtime:inst.runtime==="windows"?"windows":"wsl",machineId:inst.machine_id||"",backend:inst.backend||"",directory:inst.working_directory||"",model:inst.model||"",access:inst.native_sandbox||"read-only",adapter:inst.native_adapter||"exec",fresh:false});
|
|
32
|
-
const local=useWindowsCliCatalog(windowsCli===true&&f.runtime==="windows"&&!f.machineId),machines=machinesState.data?.machines||[],machine=machines.find(row=>row.id===f.machineId);
|
|
33
|
-
const windows=f.runtime==="windows",inventory=f.machineId?machine?.inventory:local.data;
|
|
34
|
-
const native=windows?(f.machineId?runtimeCliChoices(machine):inventory?.clis||[]).filter(cli=>cli.path&&cli.supports?.execution!==false&&cli.supports?.resume!==false):[];
|
|
35
|
-
const choices=windows?native.map(cli=>({value:cli.id,label:cliLabel(cli.id),disabled:!cli.runnable})): (rows||[]).filter(row=>row.installed!==false).map(row=>({value:row.name,label:cliLabel(row.name),disabled:["not_installed","not_signed_in","too_old"].includes(source?.runtime==="wsl"&&source.backend===row.name?(source.backendState||row.state):row.state)}));
|
|
36
|
-
const selected=native.find(cli=>cli.id===f.backend),targetReady=!!choices.find(choice=>choice.value===f.backend&&!choice.disabled)&&(!f.machineId||machine?.status==="online");
|
|
37
|
-
const allowedRead=!windows||selected?.readOnlySupport!==false;
|
|
38
|
-
const set=(key,value)=>setForm(old=>({...old,[key]:value}));
|
|
39
|
-
const load=async()=>{
|
|
40
|
-
if(claim.current)return;setSource(null);setError("");
|
|
41
|
-
try{const response=await lease.fetch(`/ui/instances/${encodeURIComponent(name)}/runtime`),value=await response.json();if(!lease.current())return;if(!response.ok)throw Error(value.error||text("failed"));
|
|
42
|
-
const {sandbox:access}=value;setSource(value);setUncertain(false);setStep(1);setForm({runtime:value.runtime,machineId:value.machineId||"",backend:value.backend||inst.backend||"",directory:value.directory||"",model:value.model||"",access,adapter:value.adapter,fresh:false});
|
|
43
|
-
}catch(e){if(lease.current())setError(e.message);}
|
|
44
|
-
};
|
|
45
|
-
useEffect(()=>{void load();},[lease]);
|
|
46
|
-
useEffect(()=>{void machinesState.refresh();},[]);
|
|
47
|
-
const choose=(runtime,machineId="")=>setForm(old=>({...old,runtime,machineId,backend:"",model:"",directory:runtime===source?.runtime&&machineId===(source?.machineId||"")?source.directory:"",access:"read-only",adapter:"exec",fresh:false}));
|
|
48
|
-
useEffect(()=>{if(!f.backend&&choices.some(choice=>!choice.disabled))set("backend",choices.find(choice=>!choice.disabled).value);},[f.runtime,f.machineId,f.backend,choices.map(choice=>`${choice.value}:${choice.disabled}`).join(",")]);
|
|
49
|
-
const submit=async()=>{
|
|
50
|
-
if(claim.current||uncertain||!source||!f.fresh||!targetReady||(!allowedRead&&f.access==="read-only"))return;
|
|
51
|
-
claim.current=true;setBusy(true);setError("");
|
|
52
|
-
const body={requestId:crypto.randomUUID(),expectedRevision:source.revision,runtime:f.runtime,...(f.machineId?{machineId:f.machineId}:{}),backend:f.backend,model:f.model.trim(),directory:f.directory.trim(),sandbox:f.access,adapter:windows?f.adapter:"exec",startNewConversation:true};
|
|
53
|
-
try{const response=await lease.fetch(`/ui/instances/${encodeURIComponent(name)}/runtime`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)}),value=await response.json();if(!lease.current())return;
|
|
54
|
-
if(!response.ok||value?.ok!==true)throw Error(value.error||text("failed"));onChanged?.();onClose();
|
|
55
|
-
}catch(e){if(lease.current()){setError(e.message);setUncertain(true);}}
|
|
56
|
-
finally{claim.current=false;if(lease.current())setBusy(false);}
|
|
57
|
-
};
|
|
58
|
-
const close=()=>{if(!claim.current)onClose();};
|
|
59
|
-
return html`<${Dialog} title=${text("title")} cls="agent-runtime-change-dialog" busy=${busy} onClose=${close} wide=${true} actions=${html`<button type="button" class="btn" disabled=${busy} onClick=${close}>${text("cancel")}</button>${step===2?html`<button type="button" class="btn" disabled=${busy||uncertain} onClick=${()=>setStep(1)}>${text("back")}</button>`:null}<button type="button" class="btn btn-primary" disabled=${busy||uncertain||!source||!targetReady||(step===2&&(!f.fresh||!allowedRead&&f.access==="read-only"))} onClick=${step===1?()=>setStep(2):submit}>${text(step===1?"next":"apply")}</button>`}>
|
|
60
|
-
<div class="form agent-runtime-change" aria-busy=${busy}><p>${text("lead")}</p>${!source?html`<p role="status">${text("loading")}</p>`:null}
|
|
61
|
-
${source&&step===1?html`<${RuntimePicker} value=${f.runtime} onChange=${runtime=>choose(runtime)} windowsEnabled=${windowsCli===true} machineId=${f.machineId} machines=${machines} onMachineChange=${id=>choose("windows",id)} onRefresh=${machinesState.refresh} loaded=${!!machinesState.data && !machinesState.error}/><div class="field"><label>${tr("backend")}</label><${CliPicker} value=${f.backend} choices=${choices} label=${tr("backend")} onChange=${backend=>setForm(old=>({...old,backend,model:"",fresh:false}))}/></div>${removedBackendReplacement(f.backend)?html`<p class="note" role="status">${text("removed",f.backend,removedBackendReplacement(f.backend))}</p>`:null}${!choices.length?html`<p class="note">${text("noCli")}</p>`:null}`:null}
|
|
62
|
-
${source&&step===2?html`<h3>${text("configure")}</h3><p><strong>${machine?.name||(windows?tr("windows"):tr("wsl"))}</strong> · ${cliLabel(f.backend)}</p><label class="field"><span>${tr("directory")}</span><input value=${f.directory} disabled=${busy||uncertain} onInput=${event=>set("directory",event.target.value)}/></label><p class="note">${text("directoryHint")}</p><div class="field"><label for="runtime-change-model">${t("settings.model")}</label><${ModelSelect} id="runtime-change-model" disabled=${busy||uncertain} value=${f.model} onChange=${value=>set("model",value)} backend=${f.backend} instance=${!windows&&source.runtime==="wsl"&&source.backend===f.backend?name:undefined} runtime=${f.runtime} machineId=${f.machineId} inherit=${t("settings.modelCliDefault")}/></div>
|
|
63
|
-
${windows?html`<label class="field"><span>${tr("access")}</span><select value=${f.access} disabled=${busy||uncertain} onChange=${event=>set("access",event.target.value)}><option value="read-only" disabled=${!allowedRead}>${tr("read")}</option><option value="workspace-write">${tr("write")}</option></select></label>${!allowedRead?html`<p class="note" role="status">${tr("noReadOnly")}</p>`:null}<label class="field"><span>${tr("adapter")}</span><select value=${f.adapter} disabled=${busy||uncertain} onChange=${event=>set("adapter",event.target.value)}><option value="exec">${tr("adapterExec")}</option><option value="pane" disabled=${!["codex","claude-code"].includes(f.backend)}>${tr("adapterPane")}</option></select></label>`:null}
|
|
64
|
-
<p class="note">${text("freshHint")}</p><p class="note">${text("stopped")}</p><label class="check"><input type="checkbox" checked=${f.fresh} disabled=${busy||uncertain} onChange=${event=>set("fresh",event.target.checked)}/><span>${text("fresh")}</span></label>`:null}
|
|
65
|
-
${busy?html`<p role="status"><span class="out-spin" aria-hidden="true"></span> ${text("busy")}</p>`:null}${error?html`<p class="feedback error" role="alert">${error}</p>`:null}${uncertain?html`<p class="note">${text("unknown")}</p><button type="button" class="btn" onClick=${load}>${text("reload")}</button>`:null}</div>
|
|
66
|
-
</${Dialog}>`;
|
|
67
|
-
}
|