@abot-ai/runtime 1.7.0 → 1.8.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 +216 -222
- package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
- package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
- package/dist/src/capabilities/tool-types.d.ts +4 -0
- package/dist/src/cli/abot.js +2 -0
- package/dist/src/cli/host-companion-bundle.mjs +751 -333
- package/dist/src/computer-access/collection-consent.d.ts +9 -0
- package/dist/src/computer-access/collection-consent.js +47 -0
- package/dist/src/computer-access/command-output-capture.d.ts +17 -6
- package/dist/src/computer-access/command-output-capture.js +134 -68
- package/dist/src/computer-access/command-output-protection.d.ts +17 -0
- package/dist/src/computer-access/command-output-protection.js +59 -0
- package/dist/src/computer-access/companion/command-output.d.ts +1 -0
- package/dist/src/computer-access/companion/command-output.js +23 -6
- package/dist/src/computer-access/companion/install-link-macos.js +2 -1
- package/dist/src/computer-access/companion/native-notifications.js +3 -2
- package/dist/src/computer-access/companion/native-session.js +6 -2
- package/dist/src/computer-access/companion/observation-filter.js +2 -26
- package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
- package/dist/src/computer-access/companion/observation-process.js +51 -25
- package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
- package/dist/src/computer-access/companion/observation-redaction.js +2 -111
- package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
- package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
- package/dist/src/computer-access/computer/companion-sessions.js +7 -6
- package/dist/src/computer-access/computer/unix-native-process.js +23 -11
- package/dist/src/computer-access/handlers.d.ts +2 -1
- package/dist/src/computer-access/handlers.js +79 -11
- package/dist/src/computer-access/host-observation.d.ts +3 -3
- package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
- package/dist/src/computer-access/native-observation-connection.js +78 -0
- package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
- package/dist/src/computer-access/native-observation-ownership.js +55 -0
- package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
- package/dist/src/computer-access/native-observation-shutdown.js +58 -0
- package/dist/src/computer-access/observation-source.d.ts +6 -0
- package/dist/src/computer-access/observation-source.js +10 -0
- package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
- package/dist/src/computer-access/security/desktop-result.js +146 -0
- package/dist/src/computer-access/security/observed-error.d.ts +2 -0
- package/dist/src/computer-access/security/observed-error.js +10 -0
- package/dist/src/computer-access/security/secret-text.d.ts +7 -0
- package/dist/src/computer-access/security/secret-text.js +111 -0
- package/dist/src/computer-access/security/system-results.d.ts +2 -0
- package/dist/src/computer-access/security/system-results.js +53 -0
- package/dist/src/computer-access/system-result-protection.d.ts +11 -0
- package/dist/src/computer-access/system-result-protection.js +1 -0
- package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
- package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
- package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
- package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
- package/dist/src/model-gateway/observability/provider-trace.js +30 -8
- package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
- package/dist/src/model-gateway/protocol/message-contract.js +1 -1
- package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
- package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
- package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
- package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
- package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
- package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
- package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
- package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
- package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
- package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
- package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
- package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
- package/dist/src/model-gateway/providers/openai/payload.js +6 -23
- package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
- package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
- package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
- package/dist/src/model-gateway/providers/openai/stream.js +13 -41
- package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
- package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
- package/dist/src/model-gateway/server/chat-handler.js +5 -7
- package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
- package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
- package/dist/src/model-gateway/server.js +5 -1
- package/dist/src/plugin-contract/index.d.ts +1 -0
- package/dist/src/plugin-contract/index.js +1 -0
- package/dist/src/plugin-contract/manifest.d.ts +2 -0
- package/dist/src/plugin-contract/manifest.js +1 -0
- package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
- package/dist/src/plugin-contract/platform-compatibility.js +3 -0
- package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
- package/dist/src/plugin-sdk/computer-access.js +1 -0
- package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
- package/dist/src/plugin-sdk/files-windows/process.js +93 -0
- package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
- package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
- package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
- package/dist/src/plugin-sdk/files-windows/read.js +56 -0
- package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
- package/dist/src/plugin-sdk/files-windows/result.js +67 -0
- package/dist/src/plugin-sdk/files.js +4 -0
- package/dist/src/plugin-sdk/index.d.ts +1 -0
- package/dist/src/plugin-sdk/index.js +1 -0
- package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
- package/dist/src/plugin-sdk/mutation-result.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
- package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
- package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
- package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
- package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/capabilities/tool-availability.js +6 -0
- package/dist/src/runtime/context/capability-brief.d.ts +2 -2
- package/dist/src/runtime/context/capability-brief.js +3 -3
- package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
- package/dist/src/runtime/context/capability-descriptions.js +57 -20
- package/dist/src/runtime/local-host/windows-private-access.js +2 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
- package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
- package/dist/src/runtime/long-term-memory/projection.js +1 -1
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
- package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
- package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
- package/dist/src/runtime/passive-learning/collection-source.js +7 -0
- package/dist/src/runtime/passive-learning/service.js +2 -3
- package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
- package/dist/src/runtime/passive-learning/status-projection.js +9 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
- package/dist/src/runtime/plugins/installation/package.js +2 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
- package/dist/src/runtime/plugins/loader.js +24 -14
- package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
- package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
- package/dist/src/runtime/plugins/manifest-projection.js +3 -0
- package/dist/src/runtime/plugins/manifest-validator.js +9 -1
- package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
- package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
- package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
- package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
- package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
- package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/request/root-contract.d.ts +2 -0
- package/dist/src/runtime/request/root-execution-kernel.js +1 -0
- package/dist/src/runtime/request/runner.js +9 -3
- package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
- package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
- package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
- package/dist/src/runtime/steps/execution-agent/format.js +4 -3
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/input.js +22 -1
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
- package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +7 -8
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
- package/dist/src/runtime/steps/execution-agent/run.js +4 -1
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
- package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
- package/dist/src/sessions/durable-session-commit.js +3 -3
- package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
- package/dist/src/sessions/prepared-session-replacement.js +46 -0
- package/dist/src/sessions/session-store.js +3 -3
- package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
- package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
- package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/authority-script.js +94 -0
- package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
- package/dist/src/shared/windows-file-io/native-script.js +120 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
- package/dist/src/shared/windows-job-object.d.ts +2 -0
- package/dist/src/shared/windows-job-object.js +66 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
- package/dist/src/web-ui/app/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +54 -156
- package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
- package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
- package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
- package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
- package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
- package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
- package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
- package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
- package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
- package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
- package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
- package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
- package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
- package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
- package/dist/src/web-ui/app/components/operations-summary.js +2 -1
- package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
- package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
- package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +11 -3
- package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
- package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
- package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
- package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
- package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
- package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
- package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
- package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
- package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
- package/dist/src/web-ui/app/components/schedules/details.js +3 -2
- package/dist/src/web-ui/app/components/schedules/form.js +10 -8
- package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
- package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
- package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
- package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
- package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
- package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
- package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
- package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
- package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/computer-access-feature.js +13 -1
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +11 -1
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
- package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
- package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
- package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
- package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
- package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
- package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
- package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
- package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
- package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
- package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
- package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
- package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
- package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
- package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
- package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
- package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
- package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
- package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
- package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
- package/dist/src/web-ui/app/dashboard-feature.js +12 -2
- package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
- package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
- package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
- package/dist/src/web-ui/app/schedules-feature.js +5 -3
- package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
- package/dist/src/web-ui/app/services/client-preferences.js +25 -16
- package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
- package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
- package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
- package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
- package/dist/src/web-ui/app/services/workspace-state.js +27 -0
- package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
- package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
- package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
- package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
- package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
- package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
- package/dist/src/web-ui/app/styles.css +3 -0
- package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
- package/dist/src/web-ui/client-state/contracts.js +13 -0
- package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
- package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
- package/dist/src/web-ui/client-state/preferences.js +84 -0
- package/dist/src/web-ui/client-state/queue.d.ts +3 -0
- package/dist/src/web-ui/client-state/queue.js +43 -0
- package/dist/src/web-ui/client-state/routes.d.ts +7 -0
- package/dist/src/web-ui/client-state/routes.js +58 -0
- package/dist/src/web-ui/client-state/store.d.ts +14 -0
- package/dist/src/web-ui/client-state/store.js +88 -0
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
- package/dist/src/web-ui/local-runtime/http.js +11 -2
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
- package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
- package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
- package/dist/src/web-ui/local-runtime-backend.js +14 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
- package/dist/src/web-ui/plugin-management-catalog.js +3 -1
- package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
- package/dist/src/web-ui/server-readiness.d.ts +3 -0
- package/dist/src/web-ui/server-readiness.js +36 -0
- package/dist/src/web-ui/server.d.ts +2 -0
- package/dist/src/web-ui/server.js +23 -1
- package/dist/src/web-ui/system-host-service.js +13 -2
- package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
- package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
- package/docs/installation.md +44 -5
- package/docs/plugins.md +174 -28
- package/docs/tool-execution-result-evidence-contract.md +57 -0
- package/docs/windows-companion-store.md +5 -0
- package/package.json +4 -2
- package/plugins/capability-brief/plugin.json +5 -1
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +2 -1
- package/plugins/code-outline/source/index.ts +16 -20
- package/plugins/code-outline/source/read-failure.ts +40 -0
- package/plugins/code-outline/src/index.cjs +614 -29
- package/plugins/document-reader/README.md +33 -0
- package/plugins/document-reader/plugin.json +2 -1
- package/plugins/document-reader/source/pdf-contract.ts +57 -0
- package/plugins/document-reader/source/pdf-parser.ts +139 -0
- package/plugins/document-reader/source/pdf-process-main.ts +56 -0
- package/plugins/document-reader/source/pdf-process.ts +207 -0
- package/plugins/document-reader/source/pdf-result.ts +79 -0
- package/plugins/document-reader/source/pdf-worker.ts +39 -303
- package/plugins/document-reader/source/pdf.ts +4 -1
- package/plugins/document-reader/source/read-failure.ts +37 -0
- package/plugins/document-reader/source/reader.ts +3 -19
- package/plugins/document-reader/src/index.cjs +995 -211
- package/plugins/exec/README.md +19 -0
- package/plugins/exec/plugin.json +4 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
- package/plugins/exec/source/filesystem-file-observer.ts +98 -0
- package/plugins/exec/source/filesystem-observer.ts +8 -79
- package/plugins/exec/source/output-files.ts +12 -6
- package/plugins/exec/source/paths.ts +3 -1
- package/plugins/exec/source/process-manager.ts +8 -24
- package/plugins/exec/source/shell-platform.ts +19 -3
- package/plugins/exec/source/shell-process.ts +55 -0
- package/plugins/exec/source/windows-job-source.ts +1 -0
- package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
- package/plugins/exec/src/index.cjs +252 -96
- package/plugins/filesystem/README.md +65 -0
- package/plugins/filesystem/plugin.json +7 -3
- package/plugins/filesystem/source/atomic-write.ts +2 -0
- package/plugins/filesystem/source/bounded-io.ts +80 -306
- package/plugins/filesystem/source/directory-sample.ts +2 -0
- package/plugins/filesystem/source/errors.ts +14 -0
- package/plugins/filesystem/source/file-observation.ts +151 -0
- package/plugins/filesystem/source/file-version.ts +41 -0
- package/plugins/filesystem/source/index.ts +6 -0
- package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
- package/plugins/filesystem/source/windows/authority-script.ts +1 -0
- package/plugins/filesystem/source/windows/native-script.ts +1 -0
- package/plugins/filesystem/source/windows/operations.ts +197 -0
- package/plugins/filesystem/source/windows/process.ts +214 -0
- package/plugins/filesystem/source/windows/publication-script.ts +29 -0
- package/plugins/filesystem/source/windows/read-script.ts +63 -0
- package/plugins/filesystem/source/windows/request-availability.ts +67 -0
- package/plugins/filesystem/source/windows/source.ts +42 -0
- package/plugins/filesystem/source/windows/storage-script.ts +11 -0
- package/plugins/filesystem/source/windows/streams-script.ts +24 -0
- package/plugins/filesystem/source/windows/write-script.ts +86 -0
- package/plugins/filesystem/src/index.cjs +1208 -322
- package/plugins/json-inspector/README.md +18 -0
- package/plugins/json-inspector/plugin.json +2 -1
- package/plugins/json-inspector/source/index.ts +16 -19
- package/plugins/json-inspector/source/read-failure.ts +42 -0
- package/plugins/json-inspector/src/index.cjs +612 -27
- package/plugins/local-search/README.md +29 -0
- package/plugins/local-search/plugin.json +2 -1
- package/plugins/local-search/source/errors.ts +2 -0
- package/plugins/local-search/source/paths.ts +3 -0
- package/plugins/local-search/source/ripgrep-process.ts +31 -5
- package/plugins/local-search/source/ripgrep.ts +3 -3
- package/plugins/local-search/source/windows-authority.ts +99 -0
- package/plugins/local-search/source/windows-search-lease.ts +49 -0
- package/plugins/local-search/source/windows-search-process.ts +91 -0
- package/plugins/local-search/source/windows-search-script.ts +52 -0
- package/plugins/local-search/src/index.cjs +595 -26
- package/plugins/memory/plugin.json +5 -1
- package/plugins/memory/source/lock-directory-claim.ts +56 -0
- package/plugins/memory/source/lock-owner-file.ts +71 -0
- package/plugins/memory/source/lock-path-observation.ts +26 -0
- package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
- package/plugins/memory/source/store-lock.ts +12 -7
- package/plugins/memory/source/store.ts +3 -2
- package/plugins/memory/src/index.cjs +174 -25
- package/plugins/project-orientation/README.md +23 -0
- package/plugins/project-orientation/plugin.json +2 -1
- package/plugins/project-orientation/source/index.ts +12 -9
- package/plugins/project-orientation/source/inspection-failure.ts +70 -0
- package/plugins/project-orientation/source/manifest-summary.ts +9 -2
- package/plugins/project-orientation/source/tree.ts +6 -0
- package/plugins/project-orientation/src/index.cjs +647 -31
- package/plugins/system/README.md +51 -15
- package/plugins/system/plugin.json +6 -2
- package/plugins/system/skills/system_actions/SKILL.md +1 -1
- package/plugins/system/source/command-working-directory.ts +47 -0
- package/plugins/system/source/computer/handlers.ts +13 -9
- package/plugins/system/source/computer/observation-result.ts +10 -5
- package/plugins/system/source/computer/request-computers.ts +10 -3
- package/plugins/system/source/computer/request-modules.ts +3 -6
- package/plugins/system/source/computer/runtime-platform.ts +18 -0
- package/plugins/system/source/host-dispatch.ts +18 -2
- package/plugins/system/source/index.ts +5 -3
- package/plugins/system/source/local-command-output-retention.ts +16 -0
- package/plugins/system/source/local-command-output.ts +16 -8
- package/plugins/system/source/request-system-modules.ts +12 -2
- package/plugins/system/source/request-target-snapshot.ts +2 -1
- package/plugins/system/source/security/desktop-result.ts +177 -0
- package/plugins/system/source/security/observed-error.ts +10 -0
- package/plugins/system/source/security/secret-text.ts +118 -0
- package/plugins/system/source/security/system-results.ts +62 -0
- package/plugins/system/source/security/windows-output-directory.ts +82 -0
- package/plugins/system/src/index.cjs +837 -151
- package/plugins/system-probe/plugin.json +9 -3
- package/plugins/system-probe/source/disk-path.ts +8 -0
- package/plugins/system-probe/source/index.ts +10 -5
- package/plugins/system-probe/source/machine-load.ts +33 -0
- package/plugins/system-probe/source/metrics.ts +6 -8
- package/plugins/system-probe/src/index.cjs +49 -16
- package/plugins/web/plugin.json +5 -1
|
@@ -1,33 +1,11 @@
|
|
|
1
1
|
import { escapeAttribute, escapeHtml, textOf } from "../lib/text-format.js";
|
|
2
2
|
import { normalizeToolPermissionMode } from "../lib/tool-permission-mode.js";
|
|
3
|
+
import { createReasoningModeController } from "./reasoning-mode-controller.js";
|
|
3
4
|
import { createToolPermissionModeController } from "./tool-permission-mode-controller.js";
|
|
4
5
|
|
|
5
6
|
export { normalizeToolPermissionMode } from "../lib/tool-permission-mode.js";
|
|
6
7
|
|
|
7
|
-
export
|
|
8
|
-
const normalized = textOf(mode).trim().toLowerCase();
|
|
9
|
-
return ["fast", "reasoning", "deep", "auto"].includes(normalized)
|
|
10
|
-
? normalized
|
|
11
|
-
: "reasoning";
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function agentModeMeta(mode) {
|
|
15
|
-
const modes = {
|
|
16
|
-
auto: { label: "Auto", description: "Lets the agent choose", icon: "*" },
|
|
17
|
-
fast: { label: "Fast", description: "Shorter and quicker", icon: "!" },
|
|
18
|
-
deep: {
|
|
19
|
-
label: "Deep analysis",
|
|
20
|
-
description: "More careful responses",
|
|
21
|
-
icon: "D",
|
|
22
|
-
},
|
|
23
|
-
reasoning: {
|
|
24
|
-
label: "Reasoning",
|
|
25
|
-
description: "Balanced speed and thinking",
|
|
26
|
-
icon: "R",
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
return modes[normalizeAgentMode(mode)] || modes.reasoning;
|
|
30
|
-
}
|
|
8
|
+
export { normalizeAgentMode } from "./reasoning-mode-controller.js";
|
|
31
9
|
|
|
32
10
|
export function createRuntimeSelectionController({
|
|
33
11
|
state,
|
|
@@ -41,18 +19,14 @@ export function createRuntimeSelectionController({
|
|
|
41
19
|
onModelCatalogLoading = () => {},
|
|
42
20
|
onModelCatalogLoaded = () => {},
|
|
43
21
|
onModelCatalogUnavailable = () => {},
|
|
22
|
+
onReasoningConfigurationApplied,
|
|
44
23
|
}) {
|
|
45
|
-
let
|
|
46
|
-
const agentModeMutationRevisions = new Map();
|
|
47
|
-
let agentModeMutationInFlight = false;
|
|
24
|
+
let modelCatalogEnvironmentId = null;
|
|
48
25
|
let modelCatalogLoadRevision = 0;
|
|
49
26
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
function configuredEnvironmentOptions() {
|
|
54
|
-
const raw = Array.isArray(state.config?.environments)
|
|
55
|
-
? state.config.environments
|
|
27
|
+
function configuredEnvironmentOptions(config = state.config) {
|
|
28
|
+
const raw = Array.isArray(config?.environments)
|
|
29
|
+
? config.environments
|
|
56
30
|
: [];
|
|
57
31
|
const options = raw
|
|
58
32
|
.map((entry) => {
|
|
@@ -63,7 +37,7 @@ export function createRuntimeSelectionController({
|
|
|
63
37
|
})
|
|
64
38
|
.filter(Boolean);
|
|
65
39
|
if (options.length > 0) return options;
|
|
66
|
-
const fallback = textOf(
|
|
40
|
+
const fallback = textOf(config?.defaultEnvironmentId).trim();
|
|
67
41
|
return fallback ? [{ value: fallback, label: fallback }] : [];
|
|
68
42
|
}
|
|
69
43
|
|
|
@@ -166,6 +140,7 @@ export function createRuntimeSelectionController({
|
|
|
166
140
|
function applyModelSelection() {
|
|
167
141
|
if (!dom.modelSelect.options.length) {
|
|
168
142
|
modelSelector.sync();
|
|
143
|
+
renderAgentMode();
|
|
169
144
|
return;
|
|
170
145
|
}
|
|
171
146
|
const target =
|
|
@@ -179,6 +154,7 @@ export function createRuntimeSelectionController({
|
|
|
179
154
|
dom.modelSelect.value = target;
|
|
180
155
|
}
|
|
181
156
|
modelSelector.sync();
|
|
157
|
+
renderAgentMode();
|
|
182
158
|
}
|
|
183
159
|
|
|
184
160
|
function rememberModelSelection() {
|
|
@@ -188,6 +164,7 @@ export function createRuntimeSelectionController({
|
|
|
188
164
|
if (getComposerSessionId())
|
|
189
165
|
state.sessionModels[getComposerSessionId()] = profileId;
|
|
190
166
|
saveModelPreferences();
|
|
167
|
+
renderAgentMode();
|
|
191
168
|
}
|
|
192
169
|
|
|
193
170
|
const {
|
|
@@ -197,127 +174,11 @@ export function createRuntimeSelectionController({
|
|
|
197
174
|
state, dom, preferences, recordControlEvent, getComposerSessionId,
|
|
198
175
|
});
|
|
199
176
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
dom.agentModeButton.innerHTML = `
|
|
206
|
-
<span class="agent-mode-icon">${escapeHtml(meta.icon)}</span>
|
|
207
|
-
<span>${escapeHtml(meta.label)}</span>`;
|
|
208
|
-
dom.agentModeButton.classList.toggle("open", state.agentModeMenuOpen);
|
|
209
|
-
dom.agentModeButton.setAttribute(
|
|
210
|
-
"aria-expanded",
|
|
211
|
-
state.agentModeMenuOpen ? "true" : "false",
|
|
212
|
-
);
|
|
213
|
-
dom.agentModeMenu.classList.toggle("open", state.agentModeMenuOpen);
|
|
214
|
-
dom.agentModeMenu.hidden = !state.agentModeMenuOpen;
|
|
215
|
-
dom.agentModeMenu.setAttribute("role", "menu");
|
|
216
|
-
dom.agentModeMenu.innerHTML = state.supportedAgentModes
|
|
217
|
-
.map((mode) => {
|
|
218
|
-
const item = agentModeMeta(mode);
|
|
219
|
-
const selected = normalizeAgentMode(mode) === state.agentMode;
|
|
220
|
-
return `
|
|
221
|
-
<button class="agent-mode-option ${selected ? "selected" : ""}" type="button"
|
|
222
|
-
role="menuitemradio" aria-checked="${selected ? "true" : "false"}"
|
|
223
|
-
tabindex="${selected ? "0" : "-1"}" data-mode="${escapeAttribute(mode)}" ${agentModeMutationInFlight ? "disabled" : ""}>
|
|
224
|
-
<span class="agent-mode-option-icon">${escapeHtml(item.icon)}</span>
|
|
225
|
-
<span><strong>${escapeHtml(item.label)}</strong><small>${escapeHtml(item.description)}</small></span>
|
|
226
|
-
</button>`;
|
|
227
|
-
})
|
|
228
|
-
.join("");
|
|
229
|
-
dom.agentModeMenu
|
|
230
|
-
.querySelectorAll(".agent-mode-option")
|
|
231
|
-
.forEach((button) => {
|
|
232
|
-
button.addEventListener(
|
|
233
|
-
"click",
|
|
234
|
-
() => void setAgentMode(button.dataset.mode),
|
|
235
|
-
);
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
async function loadAgentMode() {
|
|
240
|
-
const revision = ++agentModeLoadRevision;
|
|
241
|
-
const environmentId = selectedEnvironmentId();
|
|
242
|
-
const mutationRevision = agentModeMutationRevisionFor(environmentId);
|
|
243
|
-
renderAgentMode();
|
|
244
|
-
try {
|
|
245
|
-
const payload = await client.getAgentMode(environmentId);
|
|
246
|
-
if (
|
|
247
|
-
revision !== agentModeLoadRevision ||
|
|
248
|
-
mutationRevision !== agentModeMutationRevisionFor(environmentId) ||
|
|
249
|
-
environmentId !== selectedEnvironmentId()
|
|
250
|
-
) {
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
state.agentMode = normalizeAgentMode(payload.mode);
|
|
254
|
-
state.supportedAgentModes = Array.isArray(payload.supportedModes)
|
|
255
|
-
? payload.supportedModes.map(normalizeAgentMode)
|
|
256
|
-
: state.supportedAgentModes;
|
|
257
|
-
renderAgentMode();
|
|
258
|
-
return true;
|
|
259
|
-
} catch {
|
|
260
|
-
if (
|
|
261
|
-
revision !== agentModeLoadRevision ||
|
|
262
|
-
mutationRevision !== agentModeMutationRevisionFor(environmentId) ||
|
|
263
|
-
environmentId !== selectedEnvironmentId()
|
|
264
|
-
) {
|
|
265
|
-
return false;
|
|
266
|
-
}
|
|
267
|
-
state.agentMode = "reasoning";
|
|
268
|
-
renderAgentMode();
|
|
269
|
-
return false;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
async function setAgentMode(mode) {
|
|
274
|
-
if (agentModeMutationInFlight) return false;
|
|
275
|
-
agentModeMutationInFlight = true;
|
|
276
|
-
const environmentId = selectedEnvironmentId();
|
|
277
|
-
const revision = agentModeMutationRevisionFor(environmentId) + 1;
|
|
278
|
-
agentModeMutationRevisions.set(environmentId, revision);
|
|
279
|
-
const loadRevisionAtStart = ++agentModeLoadRevision;
|
|
280
|
-
const previousMode = state.agentMode;
|
|
281
|
-
const requestedMode = normalizeAgentMode(mode);
|
|
282
|
-
state.agentMode = requestedMode;
|
|
283
|
-
state.agentModeMenuOpen = false;
|
|
284
|
-
renderAgentMode();
|
|
285
|
-
dom.agentModeButton.focus();
|
|
286
|
-
try {
|
|
287
|
-
const payload = await client.setAgentMode(requestedMode, environmentId);
|
|
288
|
-
if (
|
|
289
|
-
revision !== agentModeMutationRevisionFor(environmentId) ||
|
|
290
|
-
environmentId !== selectedEnvironmentId()
|
|
291
|
-
) {
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
294
|
-
agentModeLoadRevision += 1;
|
|
295
|
-
state.agentMode = normalizeAgentMode(payload.mode);
|
|
296
|
-
renderAgentMode();
|
|
297
|
-
return true;
|
|
298
|
-
} catch (error) {
|
|
299
|
-
if (
|
|
300
|
-
revision !== agentModeMutationRevisionFor(environmentId) ||
|
|
301
|
-
environmentId !== selectedEnvironmentId()
|
|
302
|
-
) {
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
if (agentModeLoadRevision === loadRevisionAtStart) {
|
|
306
|
-
state.agentMode = previousMode;
|
|
307
|
-
renderAgentMode();
|
|
308
|
-
}
|
|
309
|
-
recordControlEvent({
|
|
310
|
-
type: "control",
|
|
311
|
-
name: "Reasoning mode update failed",
|
|
312
|
-
tone: "failed",
|
|
313
|
-
summary: error instanceof Error ? error.message : String(error),
|
|
314
|
-
});
|
|
315
|
-
return false;
|
|
316
|
-
} finally {
|
|
317
|
-
agentModeMutationInFlight = false;
|
|
318
|
-
renderAgentMode();
|
|
319
|
-
}
|
|
320
|
-
}
|
|
177
|
+
const { renderAgentMode, loadAgentMode, setAgentMode } = createReasoningModeController({
|
|
178
|
+
state, dom, client, selectedEnvironmentId,
|
|
179
|
+
selectedModelProfile: () => modelCatalogEnvironmentId !== null && modelCatalogEnvironmentId !== selectedEnvironmentId() ? null : selectedModelProfile(),
|
|
180
|
+
reloadModels: onReasoningConfigurationApplied || loadModels, recordControlEvent,
|
|
181
|
+
});
|
|
321
182
|
|
|
322
183
|
function renderModels() {
|
|
323
184
|
dom.modelSelect.innerHTML = "";
|
|
@@ -328,6 +189,7 @@ export function createRuntimeSelectionController({
|
|
|
328
189
|
option.textContent = "No models configured";
|
|
329
190
|
dom.modelSelect.appendChild(option);
|
|
330
191
|
modelSelector.sync();
|
|
192
|
+
renderAgentMode();
|
|
331
193
|
return;
|
|
332
194
|
}
|
|
333
195
|
for (const profile of state.modelProfiles) {
|
|
@@ -345,6 +207,7 @@ export function createRuntimeSelectionController({
|
|
|
345
207
|
async function loadModels() {
|
|
346
208
|
const revision = ++modelCatalogLoadRevision;
|
|
347
209
|
const environmentId = selectedEnvironmentId();
|
|
210
|
+
renderAgentMode();
|
|
348
211
|
onModelCatalogLoading();
|
|
349
212
|
let payload = null;
|
|
350
213
|
try {
|
|
@@ -355,6 +218,7 @@ export function createRuntimeSelectionController({
|
|
|
355
218
|
) {
|
|
356
219
|
return false;
|
|
357
220
|
}
|
|
221
|
+
modelCatalogEnvironmentId = environmentId;
|
|
358
222
|
state.defaultModelProfileId = textOf(payload.defaultProfileId);
|
|
359
223
|
state.modelProfiles = Array.isArray(payload.profiles)
|
|
360
224
|
? payload.profiles
|
|
@@ -366,6 +230,7 @@ export function createRuntimeSelectionController({
|
|
|
366
230
|
) {
|
|
367
231
|
return false;
|
|
368
232
|
}
|
|
233
|
+
modelCatalogEnvironmentId = environmentId;
|
|
369
234
|
state.defaultModelProfileId = "";
|
|
370
235
|
state.modelProfiles = [];
|
|
371
236
|
renderModels();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createSessionPinUpdates } from "./session-pin-updates.js";
|
|
1
2
|
import {
|
|
2
3
|
isOlderSessionReadState,
|
|
3
4
|
isSessionReadStateUnavailable,
|
|
@@ -19,6 +20,7 @@ export function createSessionController({
|
|
|
19
20
|
selectedEnvironmentId,
|
|
20
21
|
onOpen,
|
|
21
22
|
onClearCurrent,
|
|
23
|
+
onSessionAttachmentsCleared = () => {},
|
|
22
24
|
onClearSessionMode,
|
|
23
25
|
onSaveModelPreferences,
|
|
24
26
|
onReload,
|
|
@@ -28,13 +30,14 @@ export function createSessionController({
|
|
|
28
30
|
copyText = (value) => navigator.clipboard.writeText(value),
|
|
29
31
|
}) {
|
|
30
32
|
let pagination;
|
|
33
|
+
const updatePinnedSessions = createSessionPinUpdates({ state, preferences });
|
|
31
34
|
const titleOf = (session) =>
|
|
32
35
|
textOf(session?.displayName || session?.title || session?.id);
|
|
33
36
|
const byId = (sessionId) =>
|
|
34
37
|
state.sessions.find((session) => textOf(session.id) === sessionId);
|
|
35
38
|
const isPinned = (sessionId) => state.pinnedSessionIds.includes(sessionId);
|
|
36
39
|
const sidebar = createSessionSidebarController({
|
|
37
|
-
state, preferences, selectedEnvironmentId, showToast: shell?.showToast,
|
|
40
|
+
state, preferences, updatePinnedSessions, selectedEnvironmentId, showToast: shell?.showToast,
|
|
38
41
|
render: () => { (onSidebarChange ?? render)(); void pagination?.load(); }, getFilteredSessions: filtered,
|
|
39
42
|
getPageInfo: () => pagination?.info(),
|
|
40
43
|
});
|
|
@@ -98,7 +101,7 @@ export function createSessionController({
|
|
|
98
101
|
<button class="session-action pin-action" type="button" role="menuitem" tabindex="-1" title="${pinned ? "Unpin session" : "Pin session"}">${pinned ? "Unpin" : "Pin"}</button>
|
|
99
102
|
<button class="session-action move-up-action" type="button" role="menuitem" tabindex="-1">Move up</button>
|
|
100
103
|
<button class="session-action move-down-action" type="button" role="menuitem" tabindex="-1">Move down</button>
|
|
101
|
-
<button class="session-action archive-action" type="button" role="menuitem" tabindex="-1" title="Hide or restore this conversation in this
|
|
104
|
+
<button class="session-action archive-action" type="button" role="menuitem" tabindex="-1" title="Hide or restore this conversation in this ABot installation and environment">${sidebar.isArchiveView() ? "Restore" : "Archive"}</button>
|
|
102
105
|
<button class="session-action copy-filename-action" type="button" role="menuitem" tabindex="-1" title="Copy session filename">Copy filename</button>
|
|
103
106
|
<button class="session-action clear-action" type="button" role="menuitem" tabindex="-1" title="Reset messages">Reset</button>
|
|
104
107
|
<button class="session-action delete-action" type="button" role="menuitem" tabindex="-1" title="Delete session">Delete</button>
|
|
@@ -227,12 +230,13 @@ export function createSessionController({
|
|
|
227
230
|
render();
|
|
228
231
|
}
|
|
229
232
|
|
|
230
|
-
function togglePinned(sessionId) {
|
|
233
|
+
async function togglePinned(sessionId) {
|
|
231
234
|
if (!sessionId) return;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
235
|
+
try {
|
|
236
|
+
await updatePinnedSessions((pins) => pins.includes(sessionId)
|
|
237
|
+
? pins.filter((item) => item !== sessionId) : [sessionId, ...pins]);
|
|
238
|
+
}
|
|
239
|
+
catch { shell.showToast("Could not save pinned conversations", "failed"); return; }
|
|
236
240
|
render();
|
|
237
241
|
void pagination?.load();
|
|
238
242
|
}
|
|
@@ -255,13 +259,17 @@ export function createSessionController({
|
|
|
255
259
|
)
|
|
256
260
|
)
|
|
257
261
|
return;
|
|
262
|
+
const scope = { environmentId: selectedEnvironmentId(), sessionId };
|
|
258
263
|
setBusy(sessionId, true);
|
|
259
264
|
try {
|
|
260
|
-
await client.clearSessionMessages(sessionId,
|
|
265
|
+
await client.clearSessionMessages(sessionId, scope.environmentId);
|
|
266
|
+
onSessionAttachmentsCleared(scope);
|
|
267
|
+
if (selectedEnvironmentId() !== scope.environmentId) return;
|
|
261
268
|
onClearSessionMode(sessionId);
|
|
262
269
|
if (state.currentSessionId === sessionId) onClearCurrent(false);
|
|
263
270
|
await onReload();
|
|
264
271
|
} catch (error) {
|
|
272
|
+
if (selectedEnvironmentId() !== scope.environmentId) return;
|
|
265
273
|
onControlEvent({
|
|
266
274
|
type: "control",
|
|
267
275
|
name: "Session clear failed",
|
|
@@ -269,7 +277,8 @@ export function createSessionController({
|
|
|
269
277
|
summary: error instanceof Error ? error.message : String(error),
|
|
270
278
|
});
|
|
271
279
|
} finally {
|
|
272
|
-
|
|
280
|
+
state.busySessionIds.delete(sessionId);
|
|
281
|
+
if (selectedEnvironmentId() === scope.environmentId) render();
|
|
273
282
|
}
|
|
274
283
|
}
|
|
275
284
|
|
|
@@ -281,21 +290,26 @@ export function createSessionController({
|
|
|
281
290
|
)
|
|
282
291
|
)
|
|
283
292
|
return;
|
|
293
|
+
const scope = { environmentId: selectedEnvironmentId(), sessionId };
|
|
284
294
|
setBusy(sessionId, true);
|
|
285
295
|
try {
|
|
286
|
-
await client.deleteSession(sessionId,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
)
|
|
290
|
-
|
|
296
|
+
await client.deleteSession(sessionId, scope.environmentId);
|
|
297
|
+
onSessionAttachmentsCleared(scope);
|
|
298
|
+
if (selectedEnvironmentId() !== scope.environmentId) return;
|
|
299
|
+
void updatePinnedSessions((pins) => pins.filter((item) => item !== sessionId))
|
|
300
|
+
.then(() => { if (selectedEnvironmentId() === scope.environmentId) render(); })
|
|
301
|
+
.catch(() => {
|
|
302
|
+
if (selectedEnvironmentId() === scope.environmentId)
|
|
303
|
+
shell.showToast("Conversation deleted, but its saved pin could not be removed", "failed");
|
|
304
|
+
});
|
|
291
305
|
onClearSessionMode(sessionId);
|
|
292
306
|
delete state.sessionModels[sessionId];
|
|
293
307
|
onSaveModelPreferences();
|
|
294
308
|
if (
|
|
295
|
-
preferences.sessionIdForEnvironment(
|
|
309
|
+
preferences.sessionIdForEnvironment(scope.environmentId) ===
|
|
296
310
|
sessionId
|
|
297
311
|
) {
|
|
298
|
-
preferences.saveSessionIdForEnvironment(
|
|
312
|
+
preferences.saveSessionIdForEnvironment(scope.environmentId, "");
|
|
299
313
|
}
|
|
300
314
|
state.sessions = state.sessions.filter(
|
|
301
315
|
(session) => session.id !== sessionId,
|
|
@@ -304,6 +318,7 @@ export function createSessionController({
|
|
|
304
318
|
render();
|
|
305
319
|
await onReload();
|
|
306
320
|
} catch (error) {
|
|
321
|
+
if (selectedEnvironmentId() !== scope.environmentId) return;
|
|
307
322
|
onControlEvent({
|
|
308
323
|
type: "control",
|
|
309
324
|
name: "Session delete failed",
|
|
@@ -311,7 +326,8 @@ export function createSessionController({
|
|
|
311
326
|
summary: error instanceof Error ? error.message : String(error),
|
|
312
327
|
});
|
|
313
328
|
} finally {
|
|
314
|
-
|
|
329
|
+
state.busySessionIds.delete(sessionId);
|
|
330
|
+
if (selectedEnvironmentId() === scope.environmentId) render();
|
|
315
331
|
}
|
|
316
332
|
}
|
|
317
333
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Apply explicit pin actions in order, publishing only acknowledged values. */
|
|
2
|
+
export function createSessionPinUpdates({ state, preferences }) {
|
|
3
|
+
let pending = Promise.resolve();
|
|
4
|
+
return function updatePinnedSessions(change) {
|
|
5
|
+
const saving = pending.then(async () => {
|
|
6
|
+
const next = change(state.pinnedSessionIds);
|
|
7
|
+
await preferences.savePinnedSessions(next);
|
|
8
|
+
state.pinnedSessionIds = next;
|
|
9
|
+
});
|
|
10
|
+
// A rejected action must not prevent a later explicit action from settling.
|
|
11
|
+
pending = saving.catch(() => {});
|
|
12
|
+
return saving;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -6,7 +6,7 @@ import { renderSessionSidebarSections } from "../components/session-sidebar-sect
|
|
|
6
6
|
import { filterSessionsByArchiveState } from "../lib/session-archive-visibility.js";
|
|
7
7
|
|
|
8
8
|
export function createSessionSidebarController({
|
|
9
|
-
state, preferences, selectedEnvironmentId = () => "", render, showToast, getFilteredSessions, getPageInfo = () => undefined,
|
|
9
|
+
state, preferences, updatePinnedSessions, selectedEnvironmentId = () => "", render, showToast, getFilteredSessions, getPageInfo = () => undefined,
|
|
10
10
|
}) {
|
|
11
11
|
let showingArchived = false;
|
|
12
12
|
let environmentId = selectedEnvironmentId();
|
|
@@ -42,27 +42,25 @@ export function createSessionSidebarController({
|
|
|
42
42
|
);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function saveSidebar(value) {
|
|
45
|
+
async function saveSidebar(value) {
|
|
46
46
|
try {
|
|
47
|
-
preferences.saveSessionSidebar(environmentId, value);
|
|
47
|
+
await preferences.saveSessionSidebar(environmentId, value);
|
|
48
48
|
return true;
|
|
49
49
|
} catch {
|
|
50
|
-
showToast?.("Could not save conversation preferences in
|
|
50
|
+
showToast?.("Could not save conversation preferences in ABot", "failed");
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
function move(sourceId, targetId, placement) {
|
|
55
|
+
async function move(sourceId, targetId, placement) {
|
|
56
56
|
if (!canMoveSidebarSession(sourceId, targetId)) return;
|
|
57
57
|
if (state.pinnedSessionIds.includes(sourceId)) {
|
|
58
|
-
const pinned = moveSidebarSession(state.pinnedSessionIds, sourceId, targetId, placement);
|
|
59
58
|
try {
|
|
60
|
-
|
|
59
|
+
await updatePinnedSessions((pins) => moveSidebarSession(pins, sourceId, targetId, placement));
|
|
61
60
|
} catch {
|
|
62
61
|
showToast?.("Could not save pinned conversation order", "failed");
|
|
63
62
|
return;
|
|
64
63
|
}
|
|
65
|
-
state.pinnedSessionIds = pinned;
|
|
66
64
|
render();
|
|
67
65
|
return;
|
|
68
66
|
}
|
|
@@ -72,10 +70,10 @@ export function createSessionSidebarController({
|
|
|
72
70
|
saved.orderedSessionIds = moveSidebarSession(
|
|
73
71
|
[...unrankedIds, ...saved.orderedSessionIds], sourceId, targetId, placement,
|
|
74
72
|
);
|
|
75
|
-
if (saveSidebar(saved)) render();
|
|
73
|
+
if (await saveSidebar(saved)) render();
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
function moveInDirection(session, direction) {
|
|
76
|
+
async function moveInDirection(session, direction) {
|
|
79
77
|
const group = sessionSidebarGroup(session, state.pinnedSessionIds);
|
|
80
78
|
const siblings = getFilteredSessions().filter(isSessionVisibleInSidebar).filter((candidate) =>
|
|
81
79
|
sessionSidebarGroup(candidate, state.pinnedSessionIds) === group,
|
|
@@ -84,7 +82,7 @@ export function createSessionSidebarController({
|
|
|
84
82
|
if (index < 0) return;
|
|
85
83
|
const target = siblings[index + direction];
|
|
86
84
|
if (!target) return;
|
|
87
|
-
move(session.id, target.id, direction < 0 ? "before" : "after");
|
|
85
|
+
await move(session.id, target.id, direction < 0 ? "before" : "after");
|
|
88
86
|
document.getElementById(`session-open-${encodeURIComponent(session.id)}`)?.focus();
|
|
89
87
|
}
|
|
90
88
|
|
|
@@ -97,17 +95,17 @@ export function createSessionSidebarController({
|
|
|
97
95
|
return true;
|
|
98
96
|
}
|
|
99
97
|
|
|
100
|
-
function setSessionArchived(sessionId, archived) {
|
|
98
|
+
async function setSessionArchived(sessionId, archived) {
|
|
101
99
|
if (!sessionId) return false;
|
|
102
100
|
const saved = savedPreferences();
|
|
103
101
|
if (saved.archivedSessionIds.includes(sessionId) === archived) return true;
|
|
104
102
|
saved.archivedSessionIds = archived
|
|
105
103
|
? [...saved.archivedSessionIds, sessionId]
|
|
106
104
|
: saved.archivedSessionIds.filter((id) => id !== sessionId);
|
|
107
|
-
if (!saveSidebar(saved)) return false;
|
|
105
|
+
if (!await saveSidebar(saved)) return false;
|
|
108
106
|
render();
|
|
109
107
|
sidebarRoot?.querySelector(".session-archive-toggle")?.focus();
|
|
110
|
-
showToast?.(archived ? "Conversation archived
|
|
108
|
+
showToast?.(archived ? "Conversation archived" : "Conversation restored");
|
|
111
109
|
return true;
|
|
112
110
|
}
|
|
113
111
|
|
|
@@ -95,7 +95,7 @@ export function createSparkChatSync({
|
|
|
95
95
|
try {
|
|
96
96
|
const result = await client.loadSparkChat(environmentId);
|
|
97
97
|
if (!isCurrentRead(environmentId, readRevision)) return;
|
|
98
|
-
if (modelCatalogEnvironment !== environmentId || !modelProfiles.some((profile) => profile.id === result.modelProfileId)) {
|
|
98
|
+
if (consolidateNext || modelCatalogEnvironment !== environmentId || !modelProfiles.some((profile) => profile.id === result.modelProfileId)) {
|
|
99
99
|
const catalog = await client.listModels(environmentId);
|
|
100
100
|
if (!isCurrentRead(environmentId, readRevision)) return;
|
|
101
101
|
modelProfiles = catalog.profiles || catalog.models || [];
|
|
@@ -111,7 +111,7 @@ export function createSparkChatSync({
|
|
|
111
111
|
onHistoryReset();
|
|
112
112
|
}
|
|
113
113
|
if (hasReadableGeneration(result.readState)) readGeneration = result.readState.readGeneration;
|
|
114
|
-
onConfiguration({ ...result, supportsImageInput, modelAvailable: Boolean(profile) });
|
|
114
|
+
onConfiguration({ ...result, supportsImageInput, supportsThinking: profile?.supportsThinking === true, modelAvailable: Boolean(profile) });
|
|
115
115
|
onReadState(result.readState);
|
|
116
116
|
const snapshot = result.snapshot;
|
|
117
117
|
if (shouldHydrateSparkConversation(initialized, rehydrate, snapshot, state)) {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ComposerSubmissionRefused } from "./composer-submission-lifecycle.js";
|
|
2
|
+
|
|
1
3
|
function createSteerId() {
|
|
2
4
|
const randomId = globalThis.crypto?.randomUUID?.();
|
|
3
5
|
if (randomId) return `web-steer-${randomId}`;
|
|
@@ -28,7 +30,7 @@ export function createSteerController({
|
|
|
28
30
|
if (message.accepted === true) pending.resolve(message);
|
|
29
31
|
else {
|
|
30
32
|
pending.reject(
|
|
31
|
-
new
|
|
33
|
+
new ComposerSubmissionRefused(String(message.reason || "Steer was not accepted.")),
|
|
32
34
|
);
|
|
33
35
|
}
|
|
34
36
|
return true;
|
|
@@ -43,13 +45,13 @@ export function createSteerController({
|
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
|
|
46
|
-
async function steer(text) {
|
|
47
|
-
const { requestId, environmentId, sessionId } = getScope();
|
|
48
|
+
async function steer(text, captured = {}) {
|
|
49
|
+
const { requestId, environmentId, sessionId } = captured.scope ?? getScope();
|
|
48
50
|
if (!requestId || !sessionId) {
|
|
49
|
-
throw new
|
|
51
|
+
throw new ComposerSubmissionRefused("There is no active request to steer.");
|
|
50
52
|
}
|
|
51
|
-
if (getPendingAttachmentCount() > 0) {
|
|
52
|
-
throw new
|
|
53
|
+
if ((captured.pendingAttachmentCount ?? getPendingAttachmentCount()) > 0) {
|
|
54
|
+
throw new ComposerSubmissionRefused("Attachments can only be sent with Send next.");
|
|
53
55
|
}
|
|
54
56
|
const steerId = createSteerId();
|
|
55
57
|
const acknowledgement = new Promise((resolve, reject) => {
|
|
@@ -81,7 +83,7 @@ export function createSteerController({
|
|
|
81
83
|
const pending = pendingSteers.get(steerId);
|
|
82
84
|
pendingSteers.delete(steerId);
|
|
83
85
|
if (pending) clearTimer(pending.timeoutId);
|
|
84
|
-
throw new
|
|
86
|
+
throw new ComposerSubmissionRefused("Realtime connection is not available.");
|
|
85
87
|
}
|
|
86
88
|
await acknowledgement;
|
|
87
89
|
const current = getScope();
|
|
@@ -20,7 +20,7 @@ export function createToolPermissionModeController({
|
|
|
20
20
|
function currentToolPermissionMode() {
|
|
21
21
|
const sessionId = getComposerSessionId();
|
|
22
22
|
if (!sessionId) return preferences.loadLastToolPermissionMode(normalizeToolPermissionMode);
|
|
23
|
-
return normalizeToolPermissionMode(sessionModeFor(sessionId).toolPermissionMode);
|
|
23
|
+
return normalizeToolPermissionMode(sessionModeFor(sessionId).toolPermissionMode || "ask");
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function clearSessionMode(sessionId) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { canNavigateConversation } from "./conversation-navigation-intent.js";
|
|
2
|
+
|
|
3
|
+
/** Prepare the session and recovered draft before committing its workspace. */
|
|
4
|
+
export function createWorkspaceConversationOpener({ state, shell, openSession }) {
|
|
5
|
+
return async (sessionId, options) => {
|
|
6
|
+
if (!sessionId) return false;
|
|
7
|
+
if (!canNavigateConversation(state)) {
|
|
8
|
+
shell.showToast?.("Wait for the environment change to finish before opening a conversation.", "neutral");
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const activate = shell.prepareWorkspaceActivation("chat");
|
|
12
|
+
if (!activate) return false;
|
|
13
|
+
let navigationRevision = shell.navigationRevision?.();
|
|
14
|
+
function isConversationWorkspaceNavigationCurrent() {
|
|
15
|
+
if (!canNavigateConversation(state)) return false;
|
|
16
|
+
return shell.navigationRevision?.() === navigationRevision;
|
|
17
|
+
}
|
|
18
|
+
let committed = false;
|
|
19
|
+
const opened = await openSession(sessionId, {
|
|
20
|
+
...options,
|
|
21
|
+
isRouteCurrent: isConversationWorkspaceNavigationCurrent,
|
|
22
|
+
commitRouteNavigation: () => {
|
|
23
|
+
if (!isConversationWorkspaceNavigationCurrent()) return false;
|
|
24
|
+
committed = activate() === true;
|
|
25
|
+
navigationRevision = shell.navigationRevision?.();
|
|
26
|
+
return committed;
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
if (opened !== true) return false;
|
|
30
|
+
if (!committed) return false;
|
|
31
|
+
if (!isConversationWorkspaceNavigationCurrent()) return false;
|
|
32
|
+
return state.currentSessionId === sessionId;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createWorkspaceConversationOpener } from "./controllers/workspace-conversation-opener.js";
|
|
1
2
|
import { createDashboardWorkspace } from "./components/dashboard/workspace.js";
|
|
2
3
|
import { createDashboardController } from "./controllers/dashboard-controller.js";
|
|
3
4
|
import { createDashboardApprovalsController } from "./controllers/dashboard-approvals-controller.js";
|
|
@@ -17,6 +18,7 @@ export function createDashboardFeature({
|
|
|
17
18
|
isComposerAvailable,
|
|
18
19
|
passiveLearning,
|
|
19
20
|
}) {
|
|
21
|
+
const openConversation = createWorkspaceConversationOpener({ state, shell, openSession });
|
|
20
22
|
let view;
|
|
21
23
|
let controller;
|
|
22
24
|
const approvals = createDashboardApprovalsController({
|
|
@@ -50,9 +52,8 @@ export function createDashboardFeature({
|
|
|
50
52
|
refresh: controller.refresh,
|
|
51
53
|
decideApproval: approvals.submit,
|
|
52
54
|
openConversation: async (sessionId, requestId) => {
|
|
53
|
-
if (!shell.activateWorkspace("chat")) return;
|
|
54
55
|
try {
|
|
55
|
-
await
|
|
56
|
+
if (!await openConversation(sessionId, { page: { targetRequestId: requestId } })) return;
|
|
56
57
|
if (state.currentSessionId !== sessionId) return;
|
|
57
58
|
if (!requestId) return;
|
|
58
59
|
requestAnimationFrame(() => {
|
|
@@ -74,6 +75,15 @@ export function createDashboardFeature({
|
|
|
74
75
|
document.addEventListener("visibilitychange", controller.visibilityChanged);
|
|
75
76
|
return {
|
|
76
77
|
...controller,
|
|
78
|
+
compactWidgets: view.compactWidgets,
|
|
79
|
+
setActive(value) {
|
|
80
|
+
view.compactWidgets.setWorkspace(value ? "home" : "other");
|
|
81
|
+
controller.setActive(value);
|
|
82
|
+
},
|
|
83
|
+
environmentChanged() {
|
|
84
|
+
view.compactWidgets.close({ restoreFocus: false });
|
|
85
|
+
controller.environmentChanged();
|
|
86
|
+
},
|
|
77
87
|
composerHost: view.composerHost,
|
|
78
88
|
setupHost: view.setupHost,
|
|
79
89
|
};
|