@abot-ai/runtime 1.9.0 → 2.0.0
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 +5 -1
- package/dist/scripts/add-runtime-model.js +11 -5
- package/dist/scripts/init-runtime.js +15 -10
- package/dist/scripts/runtime-model-addition.js +6 -1
- package/dist/scripts/runtime-setup-command-options.d.ts +11 -0
- package/dist/scripts/runtime-setup-command-options.js +41 -0
- package/dist/scripts/runtime-setup-files.d.ts +3 -2
- package/dist/scripts/runtime-setup-files.js +19 -4
- package/dist/scripts/runtime-setup-model-options.d.ts +8 -0
- package/dist/scripts/runtime-setup-model-options.js +40 -0
- package/dist/scripts/runtime-setup-presentation.js +2 -2
- package/dist/scripts/runtime-setup-provider-options.d.ts +4 -0
- package/dist/scripts/runtime-setup-provider-options.js +20 -0
- package/dist/src/model-gateway/client/contracts.d.ts +3 -0
- package/dist/src/model-gateway/client/input-token-count.js +36 -16
- package/dist/src/model-gateway/client/message-projection.d.ts +2 -0
- package/dist/src/model-gateway/client/message-projection.js +1 -0
- package/dist/src/model-gateway/client/options.js +1 -1
- package/dist/src/model-gateway/client/raw.js +1 -0
- package/dist/src/model-gateway/index.d.ts +1 -1
- package/dist/src/model-gateway/observability/input-token-count-diagnostics.d.ts +26 -0
- package/dist/src/model-gateway/observability/input-token-count-diagnostics.js +178 -0
- package/dist/src/model-gateway/policy/invocation-policy.d.ts +1 -3
- package/dist/src/model-gateway/policy/invocation-policy.js +3 -30
- package/dist/src/model-gateway/policy/reasoning-mode-budget.d.ts +5 -0
- package/dist/src/model-gateway/policy/reasoning-mode-budget.js +13 -0
- package/dist/src/model-gateway/policy/reasoning-policy.d.ts +10 -0
- package/dist/src/model-gateway/policy/reasoning-policy.js +124 -0
- package/dist/src/model-gateway/protocol/openai-embedding-response.d.ts +1 -0
- package/dist/src/model-gateway/protocol/openai-embedding-response.js +28 -0
- package/dist/src/model-gateway/protocol/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/protocol/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/envelope-budget.js +10 -1
- package/dist/src/model-gateway/providers/llamacpp/adapter.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/adapter.js +79 -0
- package/dist/src/model-gateway/providers/llamacpp/connection.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/connection.js +73 -0
- package/dist/src/model-gateway/providers/llamacpp/diagnostics.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/diagnostics.js +17 -0
- package/dist/src/model-gateway/providers/llamacpp/embeddings.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/embeddings.js +56 -0
- package/dist/src/model-gateway/providers/llamacpp/input-token-count.d.ts +3 -0
- package/dist/src/model-gateway/providers/llamacpp/input-token-count.js +59 -0
- package/dist/src/model-gateway/providers/llamacpp/message-projection.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/message-projection.js +33 -0
- package/dist/src/model-gateway/providers/llamacpp/payload.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/payload.js +44 -0
- package/dist/src/model-gateway/providers/llamacpp/response-lifetime.d.ts +1 -0
- package/dist/src/model-gateway/providers/llamacpp/response-lifetime.js +56 -0
- package/dist/src/model-gateway/providers/llamacpp/schema-format.d.ts +2 -0
- package/dist/src/model-gateway/providers/llamacpp/schema-format.js +29 -0
- package/dist/src/model-gateway/providers/llamacpp/settings.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/settings.js +25 -0
- package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.d.ts +10 -0
- package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.js +85 -0
- package/dist/src/model-gateway/providers/llamacpp/stream.d.ts +9 -0
- package/dist/src/model-gateway/providers/llamacpp/stream.js +33 -0
- package/dist/src/model-gateway/providers/openai/embeddings.js +2 -29
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +1 -9
- package/dist/src/model-gateway/providers/openai/sse-data.js +1 -67
- package/dist/src/model-gateway/providers/registry.js +2 -0
- package/dist/src/model-gateway/server/input-token-count-handler.js +10 -1
- package/dist/src/model-gateway/types.d.ts +11 -1
- package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.d.ts +4 -0
- package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +28 -1
- package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +6 -1
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/contracts.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +2 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +2 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +1 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities.js +1 -0
- package/dist/src/runtime/adapters/scheduler-runtime.js +2 -0
- package/dist/src/runtime/automations/agent-step-executor.js +1 -0
- package/dist/src/runtime/automations/catalog.d.ts +3 -0
- package/dist/src/runtime/automations/catalog.js +2 -0
- package/dist/src/runtime/automations/definition-contracts.d.ts +2 -0
- package/dist/src/runtime/automations/definition-input.js +3 -1
- package/dist/src/runtime/automations/draft-mutations.js +5 -1
- package/dist/src/runtime/automations/model-dependency-projection.d.ts +3 -1
- package/dist/src/runtime/automations/model-dependency-projection.js +4 -2
- package/dist/src/runtime/automations/publication-validation.js +7 -0
- package/dist/src/runtime/automations/saved-agent-management.js +1 -0
- package/dist/src/runtime/automations/service.d.ts +3 -0
- package/dist/src/runtime/capabilities/automation-builder/payload-schema.js +7 -5
- package/dist/src/runtime/capabilities/automations/authoring-catalog.d.ts +9 -0
- package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -0
- package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +3 -0
- package/dist/src/runtime/capabilities/automations/tool-contract.js +3 -2
- package/dist/src/runtime/capabilities/automations/tool-module.js +16 -7
- package/dist/src/runtime/capabilities/model-reasoning-controls.d.ts +23 -0
- package/dist/src/runtime/capabilities/model-reasoning-controls.js +56 -0
- package/dist/src/runtime/capabilities/scheduling/create-operations.js +2 -0
- package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +1 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.js +5 -2
- package/dist/src/runtime/capabilities/scheduling/update-operations.js +2 -0
- package/dist/src/runtime/config/builders.js +6 -0
- package/dist/src/runtime/config/effective-model-config-validation.js +4 -0
- package/dist/src/runtime/config/llamacpp-profile-validation.d.ts +3 -0
- package/dist/src/runtime/config/llamacpp-profile-validation.js +15 -0
- package/dist/src/runtime/config/model-reasoning-schema.d.ts +40 -0
- package/dist/src/runtime/config/model-reasoning-schema.js +38 -0
- package/dist/src/runtime/config/model-reasoning-validation.d.ts +3 -0
- package/dist/src/runtime/config/model-reasoning-validation.js +37 -0
- package/dist/src/runtime/config/runner/step-instructions.d.ts +4 -0
- package/dist/src/runtime/config/runner/step-instructions.js +10 -6
- package/dist/src/runtime/config/schema.js +3 -0
- package/dist/src/runtime/config/validation/model-invocation-config-validation.js +14 -0
- package/dist/src/runtime/context/compacted-capability-result-receipt.d.ts +2 -0
- package/dist/src/runtime/context/compacted-capability-result-receipt.js +8 -7
- package/dist/src/runtime/context/execution-compacted-evidence.d.ts +4 -0
- package/dist/src/runtime/context/execution-compacted-evidence.js +2 -23
- package/dist/src/runtime/context/execution-compaction-checkpoint-selection.d.ts +19 -0
- package/dist/src/runtime/context/execution-compaction-checkpoint-selection.js +104 -0
- package/dist/src/runtime/context/model-step-compaction-inheritance.d.ts +12 -0
- package/dist/src/runtime/context/model-step-compaction-inheritance.js +28 -0
- package/dist/src/runtime/context/model-step-compaction-projection.d.ts +12 -0
- package/dist/src/runtime/context/model-step-compaction-projection.js +322 -0
- package/dist/src/runtime/context/model-step-compaction.d.ts +2 -1
- package/dist/src/runtime/context/model-step-compaction.js +25 -316
- package/dist/src/runtime/context/operation-supervision-compacted-evidence.js +7 -1
- package/dist/src/runtime/context/request-context.d.ts +2 -0
- package/dist/src/runtime/context/request-context.js +16 -0
- package/dist/src/runtime/context/request-tool-results-checkpoint.d.ts +2 -1
- package/dist/src/runtime/context/request-tool-results-checkpoint.js +35 -6
- package/dist/src/runtime/context/request-tool-results.js +3 -1
- package/dist/src/runtime/context/semantic-compaction/checkpoint-message.d.ts +5 -1
- package/dist/src/runtime/context/semantic-compaction/checkpoint-message.js +10 -4
- package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.d.ts +4 -0
- package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.js +38 -0
- package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +3 -1
- package/dist/src/runtime/context/semantic-compaction/generation-input.js +15 -10
- package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.d.ts +8 -0
- package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.js +76 -0
- package/dist/src/runtime/context/semantic-compaction/replacement-budget.js +3 -1
- package/dist/src/runtime/context/semantic-compaction/run.js +6 -12
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +1 -1
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +20 -2
- package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.js +27 -0
- package/dist/src/runtime/knowledge-skills/catalog.js +2 -0
- package/dist/src/runtime/local-application.d.ts +5 -0
- package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -1
- package/dist/src/runtime/local-host/app-service-dispatch.js +2 -0
- package/dist/src/runtime/local-host/client-services.d.ts +5 -0
- package/dist/src/runtime/local-host/saved-approvals.js +1 -0
- package/dist/src/runtime/long-term-memory/onboarding/configuration.js +5 -7
- package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +26 -0
- package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.d.ts +1 -0
- package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.js +8 -0
- package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.d.ts +17 -0
- package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.js +77 -0
- package/dist/src/runtime/long-term-memory/onboarding/service.js +40 -10
- package/dist/src/runtime/model/input-token-count.js +1 -0
- package/dist/src/runtime/model/invoke-step.js +12 -0
- package/dist/src/runtime/model/invoke-structured-step.d.ts +4 -1
- package/dist/src/runtime/model/invoke-structured-step.js +4 -0
- package/dist/src/runtime/model/model-catalog.d.ts +3 -0
- package/dist/src/runtime/model/model-catalog.js +2 -0
- package/dist/src/runtime/model/model-context-budget.d.ts +5 -0
- package/dist/src/runtime/model/model-context-budget.js +2 -0
- package/dist/src/runtime/model/model-step-port.d.ts +7 -0
- package/dist/src/runtime/model/optional-context-admission.d.ts +18 -0
- package/dist/src/runtime/model/optional-context-admission.js +23 -0
- package/dist/src/runtime/ports.d.ts +3 -1
- package/dist/src/runtime/projects/contracts.d.ts +6 -0
- package/dist/src/runtime/projects/registry-format.d.ts +3 -0
- package/dist/src/runtime/projects/registry-format.js +50 -0
- package/dist/src/runtime/projects/repository.d.ts +6 -3
- package/dist/src/runtime/projects/repository.js +26 -19
- package/dist/src/runtime/projects/service.js +11 -0
- package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
- package/dist/src/runtime/request/approval-wait/snapshot.d.ts +1 -1
- package/dist/src/runtime/request/approval-wait/snapshot.js +1 -0
- package/dist/src/runtime/request/contracts.d.ts +5 -1
- package/dist/src/runtime/request/execution-facets.js +2 -0
- package/dist/src/runtime/request/execution-payload-artifact-policy.d.ts +3 -0
- package/dist/src/runtime/request/execution-payload-artifact-policy.js +6 -0
- package/dist/src/runtime/request/execution-payload-compacted-evidence.js +1 -0
- package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope-surfaces.js +3 -0
- package/dist/src/runtime/request/execution-scope.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope.js +2 -0
- package/dist/src/runtime/request/input.d.ts +1 -0
- package/dist/src/runtime/request/input.js +1 -0
- package/dist/src/runtime/request/prepared-execution.d.ts +1 -0
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/request/reasoning-preference.d.ts +10 -0
- package/dist/src/runtime/request/reasoning-preference.js +29 -0
- package/dist/src/runtime/request/root-reference-action.js +3 -3
- package/dist/src/runtime/request/root-skill-read-admission.d.ts +4 -0
- package/dist/src/runtime/request/root-skill-read-admission.js +14 -0
- package/dist/src/runtime/request/root-skill-read.js +13 -5
- package/dist/src/runtime/request/supervisor-skill-selection-window.d.ts +16 -0
- package/dist/src/runtime/request/supervisor-skill-selection-window.js +17 -0
- package/dist/src/runtime/request/worker-capability-composition.js +2 -0
- package/dist/src/runtime/scheduler/contracts.d.ts +7 -1
- package/dist/src/runtime/scheduler/job-management.js +7 -1
- package/dist/src/runtime/scheduler/run-records.js +2 -0
- package/dist/src/runtime/scheduler/schedule-validation.js +2 -0
- package/dist/src/runtime/scheduler/scheduler-engine.js +1 -0
- package/dist/src/runtime/scheduler/snapshot-validation.js +2 -0
- package/dist/src/runtime/steps/auditor-decision/projection.js +2 -0
- package/dist/src/runtime/steps/execution-agent/capability-controls-partition.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/capability-controls-partition.js +29 -0
- package/dist/src/runtime/steps/execution-agent/capability-scope.d.ts +17 -0
- package/dist/src/runtime/steps/execution-agent/capability-scope.js +54 -0
- package/dist/src/runtime/steps/execution-agent/compaction.js +22 -6
- package/dist/src/runtime/steps/execution-agent/controls-compacted-evidence.js +2 -0
- package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.js +13 -0
- package/dist/src/runtime/steps/execution-agent/format.js +3 -6
- package/dist/src/runtime/steps/execution-agent/input.d.ts +5 -1
- package/dist/src/runtime/steps/execution-agent/input.js +10 -36
- package/dist/src/runtime/steps/execution-agent/observation-guidance.d.ts +11 -0
- package/dist/src/runtime/steps/execution-agent/observation-guidance.js +33 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
- package/dist/src/runtime/steps/execution-agent/refinement.d.ts +3 -2
- package/dist/src/runtime/steps/execution-agent/refinement.js +17 -6
- package/dist/src/runtime/steps/execution-agent/run.js +7 -1
- package/dist/src/runtime/steps/skill-read-decision.d.ts +1 -0
- package/dist/src/runtime/steps/skill-read-decision.js +9 -4
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +6 -1
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +15 -0
- package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +1 -1
- package/dist/src/runtime/steps/supervisor-decision/contracts.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +22 -3
- package/dist/src/runtime/steps/supervisor-decision/delegation-contract.d.ts +9 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-contract.js +82 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-input.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-input.js +105 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.js +13 -0
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +3 -5
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +5 -21
- package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +4 -1
- package/dist/src/runtime/steps/supervisor-decision/preparation.js +58 -6
- package/dist/src/runtime/steps/supervisor-decision/procedure-entry.d.ts +22 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-entry.js +61 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-gate.d.ts +39 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-gate.js +146 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-memory.d.ts +9 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-memory.js +100 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-recall.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/procedure-recall.js +52 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +3 -16
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -2
- package/dist/src/runtime/steps/supervisor-decision/role-guidance.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/role-guidance.js +20 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +50 -7
- package/dist/src/runtime/steps/supervisor-decision/skill-read-state.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-read-state.js +45 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.d.ts +15 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.js +25 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.js +15 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.js +65 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +3 -1
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +20 -22
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +3 -2
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +62 -15
- package/dist/src/runtime/steps/supervisor-response/prompt.js +18 -4
- package/dist/src/shared/model-reasoning-modes.d.ts +5 -0
- package/dist/src/shared/model-reasoning-modes.js +20 -0
- package/dist/src/shared/model-reasoning-schema.d.ts +38 -0
- package/dist/src/shared/model-reasoning-schema.js +29 -0
- package/dist/src/shared/model-reasoning.d.ts +35 -0
- package/dist/src/shared/model-reasoning.js +100 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +13 -0
- package/dist/src/web-ui/app/app-bootstrap.js +9 -12
- package/dist/src/web-ui/app/app-dom.js +6 -1
- package/dist/src/web-ui/app/app-state.js +1 -0
- package/dist/src/web-ui/app/app.js +8 -3
- package/dist/src/web-ui/app/appearance-feature.js +28 -0
- package/dist/src/web-ui/app/automations-feature.js +20 -11
- package/dist/src/web-ui/app/components/appearance-dialog.js +79 -0
- package/dist/src/web-ui/app/components/automations/archive-actions.js +5 -3
- package/dist/src/web-ui/app/components/automations/authoring-entry.js +26 -7
- package/dist/src/web-ui/app/components/automations/confirmation-actions.js +78 -0
- package/dist/src/web-ui/app/components/automations/draft-recovery-actions.js +1 -0
- package/dist/src/web-ui/app/components/automations/node-inspector.js +5 -1
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +4 -2
- package/dist/src/web-ui/app/components/automations/timeline.js +2 -2
- package/dist/src/web-ui/app/components/automations/workspace-navigation.js +37 -0
- package/dist/src/web-ui/app/components/automations/workspace.js +31 -46
- package/dist/src/web-ui/app/components/config-workspace/config-model.js +6 -0
- package/dist/src/web-ui/app/components/config-workspace/model-removal.js +4 -2
- package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +8 -16
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget-edit.js +113 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.d.ts +16 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.js +67 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.d.ts +7 -0
- package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.js +25 -0
- package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +15 -7
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +32 -12
- package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +1 -1
- package/dist/src/web-ui/app/components/config-workspace.js +2 -1
- package/dist/src/web-ui/app/components/confirmation-dialog.js +88 -0
- package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
- package/dist/src/web-ui/app/components/conversation-activity.js +32 -3
- package/dist/src/web-ui/app/components/conversation-memory-activity.js +31 -0
- package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +2 -0
- package/dist/src/web-ui/app/components/conversation-role-cards.js +14 -11
- package/dist/src/web-ui/app/components/conversation-skill-activity.js +67 -0
- package/dist/src/web-ui/app/components/conversation-tools.js +5 -5
- package/dist/src/web-ui/app/components/conversation-view.js +6 -0
- package/dist/src/web-ui/app/components/dashboard/approvals.js +13 -1
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.d.ts +38 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.js +289 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-feature.js +75 -0
- package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-rendering.js +31 -0
- package/dist/src/web-ui/app/components/long-term-memory/manager.js +15 -5
- package/dist/src/web-ui/app/components/long-term-memory/saved-embedding-profiles.js +114 -0
- package/dist/src/web-ui/app/components/long-term-memory/setup-rendering.js +55 -0
- package/dist/src/web-ui/app/components/long-term-memory-setup.js +141 -76
- package/dist/src/web-ui/app/components/model-setup/rendering.js +3 -2
- package/dist/src/web-ui/app/components/model-setup/validation.js +6 -2
- package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +28 -5
- package/dist/src/web-ui/app/components/passive-learning/memory.js +12 -5
- package/dist/src/web-ui/app/components/plugins/manager.js +14 -0
- package/dist/src/web-ui/app/components/plugins/removal.js +10 -2
- package/dist/src/web-ui/app/components/project-group-actions.js +35 -0
- package/dist/src/web-ui/app/components/project-session-groups.js +17 -31
- package/dist/src/web-ui/app/components/runtime-setup/commands.js +1 -1
- package/dist/src/web-ui/app/components/runtime-setup/connection-form.d.ts +15 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +32 -9
- package/dist/src/web-ui/app/components/runtime-setup/connection-input.js +23 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-inspection.js +57 -0
- package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +18 -4
- package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +3 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-options.js +54 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +3 -0
- package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +22 -22
- package/dist/src/web-ui/app/components/runtime-setup/embedding.js +60 -16
- package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.d.ts +17 -0
- package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.js +54 -0
- package/dist/src/web-ui/app/components/runtime-setup/validation.js +5 -1
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +9 -3
- package/dist/src/web-ui/app/components/runtime-setup-guide.js +20 -29
- package/dist/src/web-ui/app/components/schedules/details.js +2 -2
- package/dist/src/web-ui/app/components/schedules/form.js +12 -5
- package/dist/src/web-ui/app/components/schedules/workspace.js +30 -18
- package/dist/src/web-ui/app/components/session-list-viewport.js +49 -0
- package/dist/src/web-ui/app/components/session-search-disclosure.js +27 -0
- package/dist/src/web-ui/app/components/skills/workspace.js +7 -3
- package/dist/src/web-ui/app/components/spark-chat/panel.js +7 -3
- package/dist/src/web-ui/app/components/spark-chat/settings.js +57 -15
- package/dist/src/web-ui/app/components/tool-approval-card.d.ts +2 -1
- package/dist/src/web-ui/app/components/tool-approval-card.js +10 -2
- package/dist/src/web-ui/app/components/tool-approval-rejection-input.js +116 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +30 -38
- package/dist/src/web-ui/app/components/workspace-transitions.js +42 -0
- package/dist/src/web-ui/app/configuration-feature.js +34 -4
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +45 -29
- package/dist/src/web-ui/app/controllers/appearance-controller.js +105 -0
- package/dist/src/web-ui/app/controllers/automations-controller.js +9 -1
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/composer-feature.js +10 -3
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +9 -3
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +8 -2
- package/dist/src/web-ui/app/controllers/dashboard-approvals-controller.js +10 -9
- package/dist/src/web-ui/app/controllers/environment-transition.js +2 -2
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +9 -7
- package/dist/src/web-ui/app/controllers/preference-view-sync.js +35 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +4 -0
- package/dist/src/web-ui/app/controllers/projects-controller.js +64 -3
- package/dist/src/web-ui/app/controllers/reasoning-budget-controller.d.ts +17 -0
- package/dist/src/web-ui/app/controllers/reasoning-budget-controller.js +80 -0
- package/dist/src/web-ui/app/controllers/reasoning-budget-menu-events.js +45 -0
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +35 -40
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +6 -1
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +16 -3
- package/dist/src/web-ui/app/controllers/session-controller.js +34 -9
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +4 -3
- package/dist/src/web-ui/app/controllers/skills-controller.js +33 -16
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +1 -1
- package/dist/src/web-ui/app/controllers/spark-handoff-navigation.js +7 -1
- package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +2 -1
- package/dist/src/web-ui/app/controllers/tool-approval-controller.js +36 -3
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +8 -2
- package/dist/src/web-ui/app/controllers/workspace-route-controller.js +41 -10
- package/dist/src/web-ui/app/index.html +38 -32
- package/dist/src/web-ui/app/lib/color-palettes.d.ts +17 -0
- package/dist/src/web-ui/app/lib/color-palettes.js +20 -0
- package/dist/src/web-ui/app/lib/memory-activity-model.d.ts +12 -0
- package/dist/src/web-ui/app/lib/memory-activity-model.js +61 -0
- package/dist/src/web-ui/app/lib/navigation-display.d.ts +8 -0
- package/dist/src/web-ui/app/lib/navigation-display.js +12 -0
- package/dist/src/web-ui/app/lib/reasoning-controls.js +47 -6
- package/dist/src/web-ui/app/lib/reasoning-preference.d.ts +9 -0
- package/dist/src/web-ui/app/lib/reasoning-preference.js +75 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +4 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +4 -0
- package/dist/src/web-ui/app/lib/session-project-groups.js +28 -0
- package/dist/src/web-ui/app/lib/session-sidebar-order.js +7 -5
- package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-event.js +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +1 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.js +1 -0
- package/dist/src/web-ui/app/lib/tool-approval-rejection-drafts.js +45 -0
- package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +1 -1
- package/dist/src/web-ui/app/notifications-feature.js +10 -2
- package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
- package/dist/src/web-ui/app/projects-feature.js +40 -10
- package/dist/src/web-ui/app/runtime-onboarding-feature.js +1 -0
- package/dist/src/web-ui/app/schedules-feature.js +28 -5
- package/dist/src/web-ui/app/services/client-preferences.d.ts +4 -1
- package/dist/src/web-ui/app/services/client-preferences.js +2 -0
- package/dist/src/web-ui/app/services/conversation-reasoning-preferences.d.ts +11 -0
- package/dist/src/web-ui/app/services/conversation-reasoning-preferences.js +30 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +6 -4
- package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +5 -0
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +21 -0
- package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +2 -1
- package/dist/src/web-ui/app/services/runtime-web-client/projects.js +4 -0
- package/dist/src/web-ui/app/services/runtime-web-client/tool-approvals.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +16 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +33 -13
- package/dist/src/web-ui/app/skills-feature.js +2 -3
- package/dist/src/web-ui/app/spark-chat-conversation.js +29 -3
- package/dist/src/web-ui/app/spark-chat-feature.js +13 -7
- package/dist/src/web-ui/app/styles/01-color-palettes.css +90 -0
- package/dist/src/web-ui/app/styles/11-product-links.css +6 -2
- package/dist/src/web-ui/app/styles/11-workspace-header-width.css +37 -25
- package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +56 -22
- package/dist/src/web-ui/app/styles/13-projects.css +56 -19
- package/dist/src/web-ui/app/styles/19-runtime-setup.css +16 -0
- package/dist/src/web-ui/app/styles/22-reasoning-budget.css +39 -0
- package/dist/src/web-ui/app/styles/27-conversation-memory.css +45 -0
- package/dist/src/web-ui/app/styles/27-conversation-skills.css +96 -0
- package/dist/src/web-ui/app/styles/28-tool-approval-card.css +38 -1
- package/dist/src/web-ui/app/styles/35-embedding-profiles.css +159 -0
- package/dist/src/web-ui/app/styles/54-spark-chat.css +62 -46
- package/dist/src/web-ui/app/styles/65-appearance.css +60 -0
- package/dist/src/web-ui/app/styles/66-navigation-display.css +30 -0
- package/dist/src/web-ui/app/styles/67-confirmation-dialog.css +32 -0
- package/dist/src/web-ui/app/styles.css +8 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +6 -1
- package/dist/src/web-ui/client-state/preferences.js +8 -2
- package/dist/src/web-ui/client-state/reasoning-preference-shape.d.ts +1 -0
- package/dist/src/web-ui/client-state/reasoning-preference-shape.js +18 -0
- package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/api-router.js +11 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.js +22 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.js +47 -0
- package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +32 -0
- package/dist/src/web-ui/local-runtime/model-connection-inspection.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/model-connection-inspection.js +48 -0
- package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +2 -1
- package/dist/src/web-ui/local-runtime/model-setup-catalog.js +3 -1
- package/dist/src/web-ui/local-runtime/model-setup-identity.js +1 -1
- package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-input.js +29 -6
- package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +1 -1
- package/dist/src/web-ui/local-runtime/model-setup-provider.js +9 -6
- package/dist/src/web-ui/local-runtime/model-setup-retry.js +4 -1
- package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +2 -1
- package/dist/src/web-ui/local-runtime/pending-tool-approvals.js +4 -1
- package/dist/src/web-ui/local-runtime/project-routes.js +10 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +1 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-auth.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-auth.js +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +6 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-input.js +17 -5
- package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +4 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +6 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +11 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +11 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +3 -2
- package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +25 -4
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +19 -9
- package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +3 -1
- package/dist/src/web-ui/local-runtime/setup-embedding-input.js +38 -6
- package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.js +53 -0
- package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +23 -9
- package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +7 -2
- package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +5 -3
- package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +1 -0
- package/docs/configuration.md +10 -8
- package/docs/installation.md +11 -5
- package/docs/llamacpp.md +248 -0
- package/docs/long-term-memory.md +12 -0
- package/docs/running-locally.md +7 -1
- package/package.json +2 -1
- package/plugins/project-orientation/source/index.ts +2 -3
- package/plugins/project-orientation/source/inspection-failure.ts +1 -1
- package/plugins/project-orientation/source/project-target.ts +29 -0
- package/plugins/project-orientation/src/index.cjs +21 -2
- package/runtime.config.schema.json +140 -0
- package/src/runtime/README.md +50 -4
|
@@ -76,6 +76,7 @@ export function createRuntimeSelectionController({
|
|
|
76
76
|
const label = selectedOption?.label || selected || "Environment";
|
|
77
77
|
dom.agentPickerButton.hidden = false;
|
|
78
78
|
dom.agentPickerButton.innerHTML = `
|
|
79
|
+
<span class="rail-icon rail-environment-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="m12 3 9 5-9 5-9-5 9-5Zm-9 9 9 5 9-5M3 16l9 5 9-5" /></svg></span>
|
|
79
80
|
<span class="rail-button-label">${escapeHtml(label)}</span>
|
|
80
81
|
`;
|
|
81
82
|
dom.agentPickerButton.title = `Environment: ${label}`;
|
|
@@ -174,18 +175,29 @@ export function createRuntimeSelectionController({
|
|
|
174
175
|
}
|
|
175
176
|
|
|
176
177
|
const {
|
|
177
|
-
clearSessionMode, currentToolPermissionMode, initializeSessionMode,
|
|
178
|
+
clearSessionMode, currentToolPermissionMode, initializeSessionMode: initializeToolSessionMode,
|
|
178
179
|
renderPermissionMode, setToolPermissionMode,
|
|
179
180
|
} = createToolPermissionModeController({
|
|
180
181
|
state, dom, preferences, recordControlEvent, getComposerSessionId,
|
|
181
182
|
});
|
|
182
183
|
|
|
183
|
-
const { renderAgentMode, loadAgentMode, setAgentMode } = createReasoningModeController({
|
|
184
|
-
state, dom, client, selectedEnvironmentId,
|
|
184
|
+
const { renderAgentMode, loadAgentMode, setAgentMode, selectedReasoningPreference } = createReasoningModeController({
|
|
185
|
+
state, dom, client, selectedEnvironmentId, preferences,
|
|
186
|
+
getScope: () => ({ environmentId: selectedEnvironmentId(), sessionId: getComposerSessionId() }),
|
|
185
187
|
selectedModelProfile: () => hasModelCatalogFromAnotherEnvironment() ? null : selectedModelProfile(),
|
|
186
188
|
reloadModels: onReasoningConfigurationApplied || loadModels, recordControlEvent,
|
|
187
189
|
});
|
|
188
190
|
|
|
191
|
+
function initializeSessionMode(sessionId) {
|
|
192
|
+
initializeToolSessionMode(sessionId);
|
|
193
|
+
const environmentId = selectedEnvironmentId();
|
|
194
|
+
const profileId = dom.modelSelect.value;
|
|
195
|
+
if (preferences.loadReasoningPreference?.({ environmentId, sessionId }, profileId)) return;
|
|
196
|
+
const preference = preferences.loadReasoningPreference?.({ environmentId, sessionId: "" }, profileId);
|
|
197
|
+
if (preference) void Promise.resolve(preferences.saveReasoningPreference({ environmentId, sessionId }, profileId, preference)).catch((error) =>
|
|
198
|
+
recordControlEvent({ type: "control", name: "Thinking preference save failed", tone: "failed", summary: error.message }));
|
|
199
|
+
}
|
|
200
|
+
|
|
189
201
|
function renderModels() {
|
|
190
202
|
dom.modelSelect.innerHTML = "";
|
|
191
203
|
dom.modelSelect.disabled = state.modelProfiles.length === 0;
|
|
@@ -267,6 +279,7 @@ export function createRuntimeSelectionController({
|
|
|
267
279
|
saveModelPreferences,
|
|
268
280
|
selectedEnvironmentId,
|
|
269
281
|
selectedModelPreference,
|
|
282
|
+
selectedReasoningPreference,
|
|
270
283
|
selectedModelSupportsImageInput,
|
|
271
284
|
setAgentMode,
|
|
272
285
|
setToolPermissionMode,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { confirmDialog } from "../components/confirmation-dialog.js";
|
|
1
2
|
import { createSessionPinUpdates } from "./session-pin-updates.js";
|
|
2
3
|
import {
|
|
3
4
|
isOlderSessionReadState,
|
|
@@ -8,12 +9,14 @@ import { matchesSessionQuery } from "../ui-behavior.js";
|
|
|
8
9
|
import { escapeAttribute, escapeHtml, textOf } from "../lib/text-format.js";
|
|
9
10
|
import { getNumber } from "../lib/event-presentation.js";
|
|
10
11
|
import { createSessionSidebarController } from "./session-sidebar-controller.js";
|
|
12
|
+
import { captureSessionListViewport, restoreSessionListViewport } from "../components/session-list-viewport.js";
|
|
11
13
|
|
|
12
14
|
export function createSessionController({
|
|
13
15
|
state,
|
|
14
16
|
dom,
|
|
15
17
|
sessionActionsMenu,
|
|
16
18
|
renderGroups = () => false,
|
|
19
|
+
getDeletedProjectIds = () => [],
|
|
17
20
|
shell,
|
|
18
21
|
preferences,
|
|
19
22
|
client,
|
|
@@ -26,7 +29,7 @@ export function createSessionController({
|
|
|
26
29
|
onReload,
|
|
27
30
|
onControlEvent,
|
|
28
31
|
onSidebarChange,
|
|
29
|
-
confirmAction =
|
|
32
|
+
confirmAction = confirmDialog,
|
|
30
33
|
copyText = (value) => navigator.clipboard.writeText(value),
|
|
31
34
|
}) {
|
|
32
35
|
let pagination;
|
|
@@ -39,7 +42,7 @@ export function createSessionController({
|
|
|
39
42
|
const sidebar = createSessionSidebarController({
|
|
40
43
|
state, preferences, updatePinnedSessions, selectedEnvironmentId, showToast: shell?.showToast,
|
|
41
44
|
render: () => { (onSidebarChange ?? render)(); void pagination?.load(); }, getFilteredSessions: filtered,
|
|
42
|
-
getPageInfo: () => pagination?.info(),
|
|
45
|
+
getPageInfo: () => pagination?.info(), getDeletedProjectIds,
|
|
43
46
|
});
|
|
44
47
|
|
|
45
48
|
function filtered() {
|
|
@@ -56,14 +59,14 @@ export function createSessionController({
|
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
function render() {
|
|
59
|
-
const
|
|
62
|
+
const viewportScope = JSON.stringify([selectedEnvironmentId(), state.sessionQuery, sidebar.isArchiveView()]);
|
|
63
|
+
captureSessionListViewport(dom.sessionsList, viewportScope);
|
|
60
64
|
sessionActionsMenu.reset();
|
|
61
65
|
dom.sessionsList.innerHTML = "";
|
|
62
66
|
const sessions = filtered();
|
|
63
|
-
dom.sessionsCount.textContent = String(pagination?.info().total ?? sessions.length);
|
|
64
67
|
sidebar.renderSections({ root: dom.sessionsList, sessions, createSessionItem, renderGroups });
|
|
65
68
|
pagination?.renderFooter();
|
|
66
|
-
dom.sessionsList
|
|
69
|
+
restoreSessionListViewport(dom.sessionsList);
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
function createSessionItem(session, sessionIndex) {
|
|
@@ -251,15 +254,34 @@ export function createSessionController({
|
|
|
251
254
|
}
|
|
252
255
|
}
|
|
253
256
|
|
|
257
|
+
function captureSessionMutationTarget(sessionId) {
|
|
258
|
+
const session = byId(sessionId);
|
|
259
|
+
return { environmentId: selectedEnvironmentId(), sessionId,
|
|
260
|
+
currentSessionId: state.currentSessionId, viewVersion: state.sessionViewVersion,
|
|
261
|
+
recordRevision: JSON.stringify([Boolean(session), session?.title, session?.updatedAt, session?.latestMessageId]) };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function isCurrentSessionMutationTarget(target) {
|
|
265
|
+
if (selectedEnvironmentId() !== target.environmentId) return false;
|
|
266
|
+
if (state.currentSessionId !== target.currentSessionId) return false;
|
|
267
|
+
if (state.sessionViewVersion !== target.viewVersion) return false;
|
|
268
|
+
if (state.busySessionIds.has(target.sessionId)) return false;
|
|
269
|
+
const session = byId(target.sessionId);
|
|
270
|
+
return JSON.stringify([Boolean(session), session?.title, session?.updatedAt, session?.latestMessageId]) === target.recordRevision;
|
|
271
|
+
}
|
|
272
|
+
|
|
254
273
|
async function clearMessages(sessionId) {
|
|
255
274
|
if (!sessionId || state.busySessionIds.has(sessionId)) return;
|
|
275
|
+
const target = captureSessionMutationTarget(sessionId);
|
|
256
276
|
if (
|
|
257
|
-
!confirmAction(
|
|
277
|
+
!await confirmAction(
|
|
258
278
|
`Clear all messages in "${sessionId}"? The session will stay in the list.`,
|
|
279
|
+
{ title: "Clear conversation", confirmLabel: "Clear messages", tone: "danger" },
|
|
259
280
|
)
|
|
260
281
|
)
|
|
261
282
|
return;
|
|
262
|
-
|
|
283
|
+
if (!isCurrentSessionMutationTarget(target)) return;
|
|
284
|
+
const scope = { environmentId: target.environmentId, sessionId };
|
|
263
285
|
setBusy(sessionId, true);
|
|
264
286
|
try {
|
|
265
287
|
await client.clearSessionMessages(sessionId, scope.environmentId);
|
|
@@ -284,13 +306,16 @@ export function createSessionController({
|
|
|
284
306
|
|
|
285
307
|
async function deleteSession(sessionId) {
|
|
286
308
|
if (!sessionId || state.busySessionIds.has(sessionId)) return;
|
|
309
|
+
const target = captureSessionMutationTarget(sessionId);
|
|
287
310
|
if (
|
|
288
|
-
!confirmAction(
|
|
311
|
+
!await confirmAction(
|
|
289
312
|
`Delete "${sessionId}" from this environment and the server?`,
|
|
313
|
+
{ title: "Delete conversation", confirmLabel: "Delete conversation", tone: "danger" },
|
|
290
314
|
)
|
|
291
315
|
)
|
|
292
316
|
return;
|
|
293
|
-
|
|
317
|
+
if (!isCurrentSessionMutationTarget(target)) return;
|
|
318
|
+
const scope = { environmentId: target.environmentId, sessionId };
|
|
294
319
|
setBusy(sessionId, true);
|
|
295
320
|
try {
|
|
296
321
|
await client.deleteSession(sessionId, scope.environmentId);
|
|
@@ -7,6 +7,7 @@ import { filterSessionsByArchiveState } from "../lib/session-archive-visibility.
|
|
|
7
7
|
|
|
8
8
|
export function createSessionSidebarController({
|
|
9
9
|
state, preferences, updatePinnedSessions, selectedEnvironmentId = () => "", render, showToast, getFilteredSessions, getPageInfo = () => undefined,
|
|
10
|
+
getDeletedProjectIds = () => [],
|
|
10
11
|
}) {
|
|
11
12
|
let showingArchived = false;
|
|
12
13
|
let environmentId = selectedEnvironmentId();
|
|
@@ -38,7 +39,7 @@ export function createSessionSidebarController({
|
|
|
38
39
|
return canReorderSidebarSessions(
|
|
39
40
|
sessions.find((session) => session.id === sourceId),
|
|
40
41
|
sessions.find((session) => session.id === targetId),
|
|
41
|
-
state.pinnedSessionIds,
|
|
42
|
+
state.pinnedSessionIds, getDeletedProjectIds(),
|
|
42
43
|
);
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -74,9 +75,9 @@ export function createSessionSidebarController({
|
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
async function moveInDirection(session, direction) {
|
|
77
|
-
const group = sessionSidebarGroup(session, state.pinnedSessionIds);
|
|
78
|
+
const group = sessionSidebarGroup(session, state.pinnedSessionIds, getDeletedProjectIds());
|
|
78
79
|
const siblings = getFilteredSessions().filter(isSessionVisibleInSidebar).filter((candidate) =>
|
|
79
|
-
sessionSidebarGroup(candidate, state.pinnedSessionIds) === group,
|
|
80
|
+
sessionSidebarGroup(candidate, state.pinnedSessionIds, getDeletedProjectIds()) === group,
|
|
80
81
|
);
|
|
81
82
|
const index = siblings.findIndex((candidate) => candidate.id === session.id);
|
|
82
83
|
if (index < 0) return;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { confirmDialog } from "../components/confirmation-dialog.js";
|
|
1
2
|
/** Owns personal Skill drafts and environment-bound reads/mutations. */
|
|
2
3
|
export function createSkillsController({ client, getEnvironmentId, render,
|
|
3
|
-
confirmDiscard = (message) =>
|
|
4
|
+
confirmDiscard = (message) => confirmDialog(message, { title: "Unsaved Skill", confirmLabel: "Discard changes", tone: "danger" }) }) {
|
|
4
5
|
const state = { items: [], skill: null, draft: "", archived: false, creating: false, name: "", description: "",
|
|
5
6
|
loading: false, reading: false, mutation: "", error: "", message: "" };
|
|
6
7
|
let epoch = 0;
|
|
7
8
|
let listRead = 0;
|
|
8
9
|
let detailRead = 0;
|
|
9
10
|
let draftRevision = 0;
|
|
11
|
+
let leaveRevision = 0;
|
|
10
12
|
let active = false;
|
|
11
13
|
const snapshot = () => ({ ...state, items: [...state.items], dirty: isDirty() });
|
|
12
14
|
const publish = () => render(snapshot());
|
|
@@ -35,24 +37,39 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
35
37
|
if (!state.skill || state.skill.archived) return false;
|
|
36
38
|
return state.skill.source === "personal";
|
|
37
39
|
}
|
|
38
|
-
function prepareLeave() {
|
|
40
|
+
async function prepareLeave() {
|
|
41
|
+
const request = ++leaveRevision;
|
|
39
42
|
if (state.mutation) return false;
|
|
40
43
|
if (!isDirty()) return true;
|
|
41
|
-
if (!confirmDiscard("Discard unsaved Skill changes?")) return false;
|
|
42
44
|
const revision = draftRevision;
|
|
43
45
|
const scope = capture();
|
|
46
|
+
if (!await confirmDiscard("Discard unsaved Skill changes?")) return false;
|
|
47
|
+
if (!isCurrent(scope) || revision !== draftRevision) return false;
|
|
44
48
|
const commit = () => {
|
|
45
|
-
if (!commit.canCommit()) return;
|
|
49
|
+
if (!commit.canCommit()) return false;
|
|
46
50
|
if (state.creating) clearEditor();
|
|
47
51
|
else { state.draft = state.skill.content; draftRevision += 1; }
|
|
48
52
|
publish();
|
|
53
|
+
return true;
|
|
54
|
+
};
|
|
55
|
+
commit.canCommit = () => {
|
|
56
|
+
if (state.mutation) return false;
|
|
57
|
+
if (request !== leaveRevision) return false;
|
|
58
|
+
if (!isCurrent(scope)) return false;
|
|
59
|
+
return revision === draftRevision;
|
|
49
60
|
};
|
|
50
|
-
commit.canCommit = () => isCurrent(scope) && revision === draftRevision;
|
|
51
61
|
return commit;
|
|
52
62
|
}
|
|
53
|
-
function acceptLeave() {
|
|
54
|
-
const
|
|
55
|
-
|
|
63
|
+
async function acceptLeave() {
|
|
64
|
+
const scope = capture();
|
|
65
|
+
const revision = draftRevision;
|
|
66
|
+
const pending = prepareLeave();
|
|
67
|
+
const request = leaveRevision;
|
|
68
|
+
const prepared = await pending;
|
|
69
|
+
if (request !== leaveRevision) return false;
|
|
70
|
+
if (!isCurrent(scope) || revision !== draftRevision) return false;
|
|
71
|
+
if (state.mutation) return false;
|
|
72
|
+
if (prepared === false || prepared?.canCommit?.() === false) return false;
|
|
56
73
|
if (typeof prepared === "function") prepared();
|
|
57
74
|
return true;
|
|
58
75
|
}
|
|
@@ -75,7 +92,7 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
75
92
|
}
|
|
76
93
|
async function select(skillId) {
|
|
77
94
|
if (state.skill?.skillId === skillId) return true;
|
|
78
|
-
if (!acceptLeave()) return false;
|
|
95
|
+
if (!await acceptLeave()) return false;
|
|
79
96
|
if (!state.items.some((item) => item.skillId === skillId)) return false;
|
|
80
97
|
return loadSkill(skillId);
|
|
81
98
|
}
|
|
@@ -109,8 +126,8 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
109
126
|
state.message = "";
|
|
110
127
|
publish();
|
|
111
128
|
}
|
|
112
|
-
function beginCreate() {
|
|
113
|
-
if (!acceptLeave()) return false;
|
|
129
|
+
async function beginCreate() {
|
|
130
|
+
if (!await acceptLeave()) return false;
|
|
114
131
|
clearEditor();
|
|
115
132
|
Object.assign(state, { creating: true, archived: false, error: "", message: "" });
|
|
116
133
|
publish();
|
|
@@ -124,8 +141,8 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
124
141
|
state.message = "";
|
|
125
142
|
publish();
|
|
126
143
|
}
|
|
127
|
-
function cancelCreate() {
|
|
128
|
-
if (!state.creating || !acceptLeave()) return false;
|
|
144
|
+
async function cancelCreate() {
|
|
145
|
+
if (!state.creating || !await acceptLeave()) return false;
|
|
129
146
|
clearEditor();
|
|
130
147
|
state.error = "";
|
|
131
148
|
publish();
|
|
@@ -163,9 +180,9 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
163
180
|
if (isCurrent(scope)) { state.mutation = ""; publish(); }
|
|
164
181
|
}
|
|
165
182
|
}
|
|
166
|
-
function setArchived(archived) {
|
|
183
|
+
async function setArchived(archived) {
|
|
167
184
|
if (state.archived === archived) return true;
|
|
168
|
-
if (!acceptLeave()) return false;
|
|
185
|
+
if (!await acceptLeave()) return false;
|
|
169
186
|
state.archived = archived;
|
|
170
187
|
state.error = "";
|
|
171
188
|
state.message = "";
|
|
@@ -174,7 +191,7 @@ export function createSkillsController({ client, getEnvironmentId, render,
|
|
|
174
191
|
return true;
|
|
175
192
|
}
|
|
176
193
|
async function reloadSelected() {
|
|
177
|
-
if (!state.skill || !acceptLeave()) return false;
|
|
194
|
+
if (!state.skill || !await acceptLeave()) return false;
|
|
178
195
|
return loadSkill(state.skill.skillId);
|
|
179
196
|
}
|
|
180
197
|
async function mutate(action) {
|
|
@@ -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, supportsThinking: profile?.supportsThinking === true, modelAvailable: Boolean(profile) });
|
|
114
|
+
onConfiguration({ ...result, supportsImageInput, supportsThinking: profile?.supportsThinking === true, reasoningControls: profile?.reasoningControls, modelAvailable: Boolean(profile) });
|
|
115
115
|
onReadState(result.readState);
|
|
116
116
|
const snapshot = result.snapshot;
|
|
117
117
|
if (shouldHydrateSparkConversation(initialized, rehydrate, snapshot, state)) {
|
|
@@ -5,8 +5,10 @@ export function createSparkHandoffNavigation({ state, getEnvironmentId, shell, c
|
|
|
5
5
|
const sessionId = state.currentSessionId;
|
|
6
6
|
const viewVersion = state.sessionViewVersion;
|
|
7
7
|
const workspace = shell.activeWorkspace();
|
|
8
|
+
let navigationRequest = shell.navigationRequestRevision?.();
|
|
8
9
|
function navigationIsCurrent() {
|
|
9
10
|
if (environmentId !== getEnvironmentId()) return false;
|
|
11
|
+
if (navigationRequest !== shell.navigationRequestRevision?.()) return false;
|
|
10
12
|
if (sessionId !== state.currentSessionId || viewVersion !== state.sessionViewVersion) return false;
|
|
11
13
|
return workspace === shell.activeWorkspace();
|
|
12
14
|
}
|
|
@@ -14,12 +16,16 @@ export function createSparkHandoffNavigation({ state, getEnvironmentId, shell, c
|
|
|
14
16
|
if (!targetSessionId || !navigationIsCurrent()) return false;
|
|
15
17
|
await conversation.loadSessions();
|
|
16
18
|
if (!navigationIsCurrent()) return false;
|
|
19
|
+
const activate = await shell.prepareWorkspaceActivation("chat");
|
|
20
|
+
if (!activate || activate.canCommit?.() === false) return false;
|
|
21
|
+
navigationRequest = shell.navigationRequestRevision?.();
|
|
22
|
+
if (!navigationIsCurrent()) return false;
|
|
17
23
|
let committed = false;
|
|
18
24
|
await conversation.openSession(targetSessionId, {
|
|
19
25
|
isRouteCurrent: navigationIsCurrent,
|
|
20
26
|
commitRouteNavigation() {
|
|
21
27
|
if (!navigationIsCurrent()) return false;
|
|
22
|
-
committed =
|
|
28
|
+
committed = activate() !== false;
|
|
23
29
|
return committed;
|
|
24
30
|
},
|
|
25
31
|
});
|
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
|
|
6
6
|
export interface ToolApprovalControllerState {
|
|
7
7
|
connected: boolean;
|
|
8
|
+
currentSessionId?: string;
|
|
8
9
|
events: ToolApprovalEvent[];
|
|
9
10
|
submittedToolApprovalIds: Set<string>;
|
|
10
11
|
messages?: Array<Record<string, unknown>>;
|
|
@@ -27,5 +28,5 @@ export declare function createToolApprovalController(
|
|
|
27
28
|
isPending(event: ToolApprovalEvent | undefined): boolean;
|
|
28
29
|
pendingEvent(): ToolApprovalEvent | undefined;
|
|
29
30
|
pendingEvents(): ToolApprovalEvent[];
|
|
30
|
-
submit(approvalId: string, approved: boolean): boolean;
|
|
31
|
+
submit(approvalId: string, approved: boolean, reason?: string): boolean;
|
|
31
32
|
};
|
|
@@ -2,6 +2,10 @@ import { textOf } from "../lib/text-format.js";
|
|
|
2
2
|
import { requestLifecycles } from "../lib/request-lifecycle-view.js";
|
|
3
3
|
import { approvalDecisionCommand } from "../lib/approval-decision-command.js";
|
|
4
4
|
import { projectToolActivityEvent } from "../lib/tool-activity-event.js";
|
|
5
|
+
import {
|
|
6
|
+
approvalRejectionIdentity,
|
|
7
|
+
createApprovalRejectionDrafts,
|
|
8
|
+
} from "../lib/tool-approval-rejection-drafts.js";
|
|
5
9
|
|
|
6
10
|
export function createToolApprovalController({
|
|
7
11
|
state,
|
|
@@ -11,6 +15,16 @@ export function createToolApprovalController({
|
|
|
11
15
|
recordControlEvent,
|
|
12
16
|
createCard: createApprovalCard,
|
|
13
17
|
}) {
|
|
18
|
+
const rejectionDrafts = createApprovalRejectionDrafts();
|
|
19
|
+
|
|
20
|
+
function approvalScope(event) {
|
|
21
|
+
return {
|
|
22
|
+
...event,
|
|
23
|
+
environmentId: selectedEnvironmentId(),
|
|
24
|
+
sessionId: event?.sessionId || state.currentSessionId,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
14
28
|
function isResolved(approvalId) {
|
|
15
29
|
for (const lifecycle of requestLifecycles(state).values()) {
|
|
16
30
|
if (
|
|
@@ -76,10 +90,12 @@ export function createToolApprovalController({
|
|
|
76
90
|
});
|
|
77
91
|
}
|
|
78
92
|
}
|
|
79
|
-
|
|
93
|
+
const events = [...pending.values()];
|
|
94
|
+
rejectionDrafts.retain(events.map(approvalScope));
|
|
95
|
+
return events;
|
|
80
96
|
}
|
|
81
97
|
|
|
82
|
-
function submit(approvalId, approved) {
|
|
98
|
+
function submit(approvalId, approved, reason) {
|
|
83
99
|
if (!state.connected) {
|
|
84
100
|
recordControlEvent({
|
|
85
101
|
type: "control",
|
|
@@ -99,6 +115,7 @@ export function createToolApprovalController({
|
|
|
99
115
|
type: "tool_approval_response",
|
|
100
116
|
approvalId,
|
|
101
117
|
approved,
|
|
118
|
+
...(reason !== undefined ? { reason } : {}),
|
|
102
119
|
environment: selectedEnvironmentId(),
|
|
103
120
|
...(pending.waitId
|
|
104
121
|
? {
|
|
@@ -113,11 +130,27 @@ export function createToolApprovalController({
|
|
|
113
130
|
return sent !== false;
|
|
114
131
|
}
|
|
115
132
|
|
|
133
|
+
function canSubmitFromCard(scope) {
|
|
134
|
+
const pending = pendingEvents().find(
|
|
135
|
+
(event) => event.approvalId === scope.approvalId,
|
|
136
|
+
);
|
|
137
|
+
if (!pending) return false;
|
|
138
|
+
return (
|
|
139
|
+
approvalRejectionIdentity(scope) ===
|
|
140
|
+
approvalRejectionIdentity(approvalScope(pending))
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
116
144
|
function createCard(event) {
|
|
145
|
+
const scope = approvalScope(event);
|
|
117
146
|
return createApprovalCard({
|
|
118
147
|
event,
|
|
148
|
+
rejectionDraft: rejectionDrafts.get(scope),
|
|
119
149
|
submitted: state.submittedToolApprovalIds.has(textOf(event?.approvalId)),
|
|
120
|
-
onDecision:
|
|
150
|
+
onDecision: (approvalId, approved, reason) => {
|
|
151
|
+
if (!canSubmitFromCard(scope)) return false;
|
|
152
|
+
return submit(approvalId, approved, reason);
|
|
153
|
+
},
|
|
121
154
|
});
|
|
122
155
|
}
|
|
123
156
|
|
|
@@ -8,11 +8,17 @@ export function createWorkspaceConversationOpener({ state, shell, openSession })
|
|
|
8
8
|
shell.showToast?.("Wait for the environment change to finish before opening a conversation.", "neutral");
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
|
-
const activate = shell.prepareWorkspaceActivation("chat");
|
|
12
|
-
if (!activate) return false;
|
|
13
11
|
let navigationRevision = shell.navigationRevision?.();
|
|
12
|
+
const sessionIdBefore = state.currentSessionId;
|
|
13
|
+
const viewVersion = state.sessionViewVersion;
|
|
14
|
+
const activate = await shell.prepareWorkspaceActivation("chat");
|
|
15
|
+
if (!activate) return false;
|
|
16
|
+
if (navigationRevision !== shell.navigationRevision?.()) return false;
|
|
17
|
+
if (sessionIdBefore !== state.currentSessionId) return false;
|
|
18
|
+
if (viewVersion !== state.sessionViewVersion) return false;
|
|
14
19
|
function isConversationWorkspaceNavigationCurrent() {
|
|
15
20
|
if (!canNavigateConversation(state)) return false;
|
|
21
|
+
if (!committed && activate.canCommit?.() === false) return false;
|
|
16
22
|
return shell.navigationRevision?.() === navigationRevision;
|
|
17
23
|
}
|
|
18
24
|
let committed = false;
|
|
@@ -109,6 +109,7 @@ export function createWorkspaceRouteController({
|
|
|
109
109
|
function routeNavigationRevisions() {
|
|
110
110
|
return {
|
|
111
111
|
shell: shell.navigationRevision(),
|
|
112
|
+
shellRequest: shell.navigationRequestRevision?.() || 0,
|
|
112
113
|
configuration: configuration.navigationRevision(),
|
|
113
114
|
schedules: schedules.navigationRevision(),
|
|
114
115
|
automations: automations?.navigationRevision() || 0,
|
|
@@ -117,6 +118,7 @@ export function createWorkspaceRouteController({
|
|
|
117
118
|
|
|
118
119
|
function hasCurrentRouteNavigation(revisions) {
|
|
119
120
|
if (shell.navigationRevision() !== revisions.shell) return false;
|
|
121
|
+
if ((shell.navigationRequestRevision?.() || 0) !== revisions.shellRequest) return false;
|
|
120
122
|
if (configuration.navigationRevision() !== revisions.configuration)
|
|
121
123
|
return false;
|
|
122
124
|
if (schedules.navigationRevision() !== revisions.schedules) return false;
|
|
@@ -129,6 +131,7 @@ export function createWorkspaceRouteController({
|
|
|
129
131
|
environmentId,
|
|
130
132
|
routeActivationIsCurrent,
|
|
131
133
|
commitLinkedConversationRoute,
|
|
134
|
+
reloadSessionList,
|
|
132
135
|
) {
|
|
133
136
|
if (route.workspace === "chat" && route.automationRun) return true;
|
|
134
137
|
if (!routeCarriesConversation(route)) {
|
|
@@ -136,7 +139,7 @@ export function createWorkspaceRouteController({
|
|
|
136
139
|
return true;
|
|
137
140
|
}
|
|
138
141
|
if (route.session === getSessionId()) return true;
|
|
139
|
-
await loadSessions();
|
|
142
|
+
if (reloadSessionList) await loadSessions();
|
|
140
143
|
if (!routeActivationIsCurrent()) return false;
|
|
141
144
|
if (environmentId !== getEnvironmentId()) return false;
|
|
142
145
|
let routeCommitted = false;
|
|
@@ -161,7 +164,10 @@ export function createWorkspaceRouteController({
|
|
|
161
164
|
}
|
|
162
165
|
|
|
163
166
|
async function applyRoute(route, { initial = false } = {}) {
|
|
164
|
-
|
|
167
|
+
const navigationRevisions = routeNavigationRevisions();
|
|
168
|
+
const preparedRouteChange = await automations?.prepareRouteChange?.(route);
|
|
169
|
+
if (preparedRouteChange === false || preparedRouteChange === null) return false;
|
|
170
|
+
if (!hasCurrentRouteNavigation(navigationRevisions)) return false;
|
|
165
171
|
if (!routeEnvironmentIsAvailable(route)) {
|
|
166
172
|
shell.showToast("This environment is no longer available.", "failed");
|
|
167
173
|
return false;
|
|
@@ -170,12 +176,22 @@ export function createWorkspaceRouteController({
|
|
|
170
176
|
shell.showToast("This workspace is unavailable with the current backend.", "failed");
|
|
171
177
|
return false;
|
|
172
178
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return false;
|
|
179
|
+
let routeChangeCommitted = false;
|
|
180
|
+
const environmentChanged = routeChangesEnvironment(route, getEnvironmentId());
|
|
181
|
+
if (environmentChanged) {
|
|
182
|
+
const commitRouteChange = () => {
|
|
183
|
+
if (preparedRouteChange?.canCommit?.() === false) return false;
|
|
184
|
+
if (typeof preparedRouteChange === "function" && preparedRouteChange() === false) return false;
|
|
185
|
+
routeChangeCommitted = true;
|
|
186
|
+
return true;
|
|
187
|
+
};
|
|
188
|
+
commitRouteChange.canCommit = () => hasCurrentRouteNavigation(navigationRevisions) &&
|
|
189
|
+
preparedRouteChange?.canCommit?.() !== false;
|
|
190
|
+
const options = { restoreSession: false, commitEnvironmentOptions: commitRouteChange };
|
|
191
|
+
if (!await changeEnvironment(route.environment, options)) return false;
|
|
192
|
+
if (shell.navigationRevision() !== navigationRevisions.shell) return false;
|
|
193
|
+
if ((shell.navigationRequestRevision?.() || 0) !== navigationRevisions.shellRequest) return false;
|
|
194
|
+
Object.assign(navigationRevisions, routeNavigationRevisions());
|
|
179
195
|
}
|
|
180
196
|
if (!hasCurrentRouteNavigation(navigationRevisions)) return false;
|
|
181
197
|
if (!routeWorkspaceIsAvailable(route)) {
|
|
@@ -186,18 +202,26 @@ export function createWorkspaceRouteController({
|
|
|
186
202
|
return false;
|
|
187
203
|
}
|
|
188
204
|
const environmentId = getEnvironmentId();
|
|
189
|
-
const activate = shell.prepareWorkspaceActivation(route.workspace, {
|
|
205
|
+
const activate = await shell.prepareWorkspaceActivation(route.workspace, {
|
|
190
206
|
focus: false,
|
|
191
207
|
});
|
|
192
208
|
if (!activate) return false;
|
|
209
|
+
if (activate.canCommit?.() === false) return false;
|
|
210
|
+
navigationRevisions.shellRequest = shell.navigationRequestRevision?.() || 0;
|
|
211
|
+
if (!hasCurrentRouteNavigation(navigationRevisions)) return false;
|
|
212
|
+
if (environmentId !== getEnvironmentId()) return false;
|
|
193
213
|
let linkedConversationActivated = false;
|
|
194
214
|
function routeActivationIsCurrent() {
|
|
195
215
|
if (!hasCurrentRouteNavigation(navigationRevisions)) return false;
|
|
216
|
+
if (!routeChangeCommitted && preparedRouteChange?.canCommit?.() === false) return false;
|
|
196
217
|
if (environmentId !== getEnvironmentId()) return false;
|
|
197
218
|
return !initialRouteWasSuperseded(initial, pendingInitialHistory);
|
|
198
219
|
}
|
|
199
220
|
function commitLinkedConversationRoute() {
|
|
200
221
|
if (!routeActivationIsCurrent()) return false;
|
|
222
|
+
if (activate.canCommit?.() === false) return false;
|
|
223
|
+
if (!routeChangeCommitted && typeof preparedRouteChange === "function" && preparedRouteChange() === false) return false;
|
|
224
|
+
routeChangeCommitted = true;
|
|
201
225
|
if (!activate()) return false;
|
|
202
226
|
navigationRevisions.shell = shell.navigationRevision();
|
|
203
227
|
linkedConversationActivated = true;
|
|
@@ -210,11 +234,12 @@ export function createWorkspaceRouteController({
|
|
|
210
234
|
environmentId,
|
|
211
235
|
routeActivationIsCurrent,
|
|
212
236
|
commitLinkedConversationRoute,
|
|
237
|
+
shouldReloadRouteSessionList(initial, environmentChanged, shell.activeWorkspace()),
|
|
213
238
|
))
|
|
214
239
|
)
|
|
215
240
|
return false;
|
|
216
241
|
if (!routeActivationIsCurrent()) return false;
|
|
217
|
-
if (!linkedConversationActivated && !
|
|
242
|
+
if (!linkedConversationActivated && !commitLinkedConversationRoute()) return false;
|
|
218
243
|
const category = configurationCategoryForWorkspace(route.workspace);
|
|
219
244
|
if (category) {
|
|
220
245
|
if (configuration.activateCategory(category) === false)
|
|
@@ -356,3 +381,9 @@ function initialRouteWasSuperseded(initial, pendingHistory) {
|
|
|
356
381
|
if (!initial) return false;
|
|
357
382
|
return Boolean(pendingHistory);
|
|
358
383
|
}
|
|
384
|
+
|
|
385
|
+
function shouldReloadRouteSessionList(initial, environmentChanged, currentWorkspace) {
|
|
386
|
+
if (initial) return true;
|
|
387
|
+
if (environmentChanged) return true;
|
|
388
|
+
return currentWorkspace !== "chat";
|
|
389
|
+
}
|