@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
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createInitialWorkspaceShellState,
|
|
3
|
-
normalizeWorkspaceDestination,
|
|
4
3
|
toggleWorkspaceSheet,
|
|
5
4
|
} from "../ui-behavior.js";
|
|
6
5
|
import { createOnboardingWorkspaceAccess } from "./onboarding-workspace-access.js";
|
|
@@ -10,6 +9,8 @@ import {
|
|
|
10
9
|
resolveConversationSidebarLayout,
|
|
11
10
|
} from "./conversation-sidebar-layout.js";
|
|
12
11
|
import { createOperationsSection } from "./operations-section.js";
|
|
12
|
+
import { createWorkspaceTransitions } from "./workspace-transitions.js";
|
|
13
|
+
import { captureSessionListViewport, restoreSessionListViewport } from "./session-list-viewport.js";
|
|
13
14
|
import { isConfigurationWorkspace, renderConfigurationPageHeading } from "../lib/configuration-pages.js";
|
|
14
15
|
|
|
15
16
|
export function createWorkspaceShell({
|
|
@@ -31,6 +32,12 @@ export function createWorkspaceShell({
|
|
|
31
32
|
const workspaceListeners = new Set();
|
|
32
33
|
const runtimeAvailabilityListeners = new Set();
|
|
33
34
|
const workspaceGuards = new Set();
|
|
35
|
+
const transitions = createWorkspaceTransitions({
|
|
36
|
+
getWorkspace: () => shellState.workspace,
|
|
37
|
+
getNavigationRevision: () => navigationRevision,
|
|
38
|
+
isAvailable: workspaceAccess.isAvailable,
|
|
39
|
+
getGuards: () => [beforeWorkspaceChange, ...workspaceGuards],
|
|
40
|
+
});
|
|
34
41
|
function notifyWorkspaceListeners(workspace) {
|
|
35
42
|
onWorkspaceChange(workspace);
|
|
36
43
|
for (const listener of workspaceListeners) listener(workspace);
|
|
@@ -66,6 +73,7 @@ export function createWorkspaceShell({
|
|
|
66
73
|
}
|
|
67
74
|
|
|
68
75
|
function syncShell() {
|
|
76
|
+
captureSessionListViewport(dom.sessionsList);
|
|
69
77
|
workspaceAccess.render();
|
|
70
78
|
const homeWorkspace = shellState.workspace === "home";
|
|
71
79
|
const chatWorkspace = shellState.workspace === "chat";
|
|
@@ -142,6 +150,7 @@ export function createWorkspaceShell({
|
|
|
142
150
|
}
|
|
143
151
|
setCurrentPage(dom.notificationsWorkspaceButton, notificationsWorkspace);
|
|
144
152
|
dom.sessionsPanel.hidden = !sessions.visible;
|
|
153
|
+
restoreSessionListViewport(dom.sessionsList);
|
|
145
154
|
dom.sessionsPanel.inert = !sessions.visible;
|
|
146
155
|
dom.sessionsPanel.setAttribute(
|
|
147
156
|
"aria-hidden",
|
|
@@ -183,7 +192,7 @@ export function createWorkspaceShell({
|
|
|
183
192
|
dom.closeSessionsButton.focus();
|
|
184
193
|
return;
|
|
185
194
|
}
|
|
186
|
-
const sidebarControl = dom.
|
|
195
|
+
const sidebarControl = dom.sessionSearchToggleButton ?? dom.refreshSessionsButton;
|
|
187
196
|
(sidebarControl ?? dom.chatWorkspaceButton).focus();
|
|
188
197
|
}
|
|
189
198
|
|
|
@@ -218,35 +227,9 @@ export function createWorkspaceShell({
|
|
|
218
227
|
visibleNavigationButton.focus();
|
|
219
228
|
}
|
|
220
229
|
|
|
221
|
-
function prepareWorkspaceTransition(destination) {
|
|
222
|
-
const nextWorkspace = normalizeWorkspaceDestination(destination);
|
|
223
|
-
if (!workspaceAccess.isAvailable(nextWorkspace)) return null;
|
|
224
|
-
if (nextWorkspace === shellState.workspace) {
|
|
225
|
-
return { nextWorkspace, commitBeforeChange: () => {} };
|
|
226
|
-
}
|
|
227
|
-
const preparedChange = beforeWorkspaceChange({
|
|
228
|
-
from: shellState.workspace,
|
|
229
|
-
to: nextWorkspace,
|
|
230
|
-
});
|
|
231
|
-
if (preparedChange === false || preparedChange === null) return null;
|
|
232
|
-
const additionalChanges = [];
|
|
233
|
-
for (const guard of workspaceGuards) {
|
|
234
|
-
const change = guard({ from: shellState.workspace, to: nextWorkspace });
|
|
235
|
-
if (change === false || change === null) return null;
|
|
236
|
-
if (typeof change === "function") additionalChanges.push(change);
|
|
237
|
-
}
|
|
238
|
-
return {
|
|
239
|
-
nextWorkspace,
|
|
240
|
-
commitBeforeChange() {
|
|
241
|
-
if (typeof preparedChange === "function") preparedChange();
|
|
242
|
-
for (const change of additionalChanges) change();
|
|
243
|
-
},
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
|
|
247
230
|
function commitWorkspaceActivation(preparedTransition, options = {}) {
|
|
248
231
|
if (!workspaceAccess.isAvailable(preparedTransition.nextWorkspace)) return false;
|
|
249
|
-
preparedTransition.commitBeforeChange();
|
|
232
|
+
if (!preparedTransition.commitBeforeChange()) return false;
|
|
250
233
|
const nextWorkspace = preparedTransition.nextWorkspace;
|
|
251
234
|
const previousWorkspace = shellState.workspace;
|
|
252
235
|
const previousSheet = shellState.activeSheet;
|
|
@@ -285,27 +268,34 @@ export function createWorkspaceShell({
|
|
|
285
268
|
return true;
|
|
286
269
|
}
|
|
287
270
|
|
|
288
|
-
function prepareWorkspaceActivation(destination, options = {}) {
|
|
289
|
-
const preparedTransition =
|
|
271
|
+
async function prepareWorkspaceActivation(destination, options = {}) {
|
|
272
|
+
const preparedTransition = await transitions.prepare(destination);
|
|
290
273
|
if (!preparedTransition) return null;
|
|
291
274
|
let committed = false;
|
|
292
|
-
|
|
275
|
+
const activate = () => {
|
|
293
276
|
if (committed) return true;
|
|
294
277
|
const activated = commitWorkspaceActivation(preparedTransition, options);
|
|
295
278
|
committed = activated;
|
|
296
279
|
return activated;
|
|
297
280
|
};
|
|
281
|
+
activate.canCommit = () => committed || preparedTransition.canCommit();
|
|
282
|
+
return activate;
|
|
298
283
|
}
|
|
299
284
|
|
|
300
|
-
function activateWorkspace(destination, options = {}) {
|
|
301
|
-
const preparedActivation = prepareWorkspaceActivation(destination, options);
|
|
285
|
+
async function activateWorkspace(destination, options = {}) {
|
|
286
|
+
const preparedActivation = await prepareWorkspaceActivation(destination, options);
|
|
302
287
|
return preparedActivation ? preparedActivation() : false;
|
|
303
288
|
}
|
|
304
289
|
|
|
305
290
|
function setSessionsDrawerOpen(open, options = {}) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
291
|
+
if (shellState.workspace === "chat") return commitSessionsDrawer(open, options);
|
|
292
|
+
return transitions.prepare("chat").then((prepared) => {
|
|
293
|
+
if (!prepared?.commitBeforeChange()) return false;
|
|
294
|
+
return commitSessionsDrawer(open, options);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function commitSessionsDrawer(open, options) {
|
|
309
299
|
const wasOpen = shellState.activeSheet === "sessions";
|
|
310
300
|
shellState.workspace = "chat";
|
|
311
301
|
const useDrawer = open && sidebarViewport?.matches !== true;
|
|
@@ -351,7 +341,8 @@ export function createWorkspaceShell({
|
|
|
351
341
|
return true;
|
|
352
342
|
}
|
|
353
343
|
if (["config", "models", "plugins", "schedules", "automations", "learning", "memory", "skills", "notifications"].includes(shellState.workspace)) {
|
|
354
|
-
|
|
344
|
+
void activateWorkspace("chat");
|
|
345
|
+
return true;
|
|
355
346
|
}
|
|
356
347
|
return false;
|
|
357
348
|
}
|
|
@@ -433,6 +424,7 @@ export function createWorkspaceShell({
|
|
|
433
424
|
runtimeAvailabilityChanged,
|
|
434
425
|
workspaceUnavailableMessage: workspaceAccess.unavailableMessage,
|
|
435
426
|
navigationRevision: () => navigationRevision,
|
|
427
|
+
navigationRequestRevision: transitions.requestRevision,
|
|
436
428
|
subscribeRuntimeAvailabilityChange(listener) {
|
|
437
429
|
runtimeAvailabilityListeners.add(listener);
|
|
438
430
|
return () => runtimeAvailabilityListeners.delete(listener);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { normalizeWorkspaceDestination } from "../ui-behavior.js";
|
|
2
|
+
|
|
3
|
+
export function createWorkspaceTransitions({ getWorkspace, getNavigationRevision, isAvailable, getGuards }) {
|
|
4
|
+
let requestRevision = 0;
|
|
5
|
+
async function prepare(destination) {
|
|
6
|
+
const request = ++requestRevision;
|
|
7
|
+
const from = getWorkspace();
|
|
8
|
+
const revision = getNavigationRevision();
|
|
9
|
+
const nextWorkspace = normalizeWorkspaceDestination(destination);
|
|
10
|
+
const changes = [];
|
|
11
|
+
function isCurrentTransitionRequest() {
|
|
12
|
+
if (request !== requestRevision) return false;
|
|
13
|
+
if (from !== getWorkspace()) return false;
|
|
14
|
+
if (revision !== getNavigationRevision()) return false;
|
|
15
|
+
return isAvailable(nextWorkspace);
|
|
16
|
+
}
|
|
17
|
+
function canCommitTransition() {
|
|
18
|
+
if (!isCurrentTransitionRequest()) return false;
|
|
19
|
+
return changes.every((change) => change?.canCommit?.() !== false);
|
|
20
|
+
}
|
|
21
|
+
if (!isCurrentTransitionRequest()) return null;
|
|
22
|
+
const guards = nextWorkspace === from ? [] : getGuards();
|
|
23
|
+
for (const guard of guards) {
|
|
24
|
+
const change = await guard({ from, to: nextWorkspace });
|
|
25
|
+
if (!canCommitTransition()) return null;
|
|
26
|
+
if (change === false || change === null) return null;
|
|
27
|
+
changes.push(change);
|
|
28
|
+
}
|
|
29
|
+
if (!canCommitTransition()) return null;
|
|
30
|
+
return {
|
|
31
|
+
nextWorkspace, canCommit: canCommitTransition,
|
|
32
|
+
commitBeforeChange() {
|
|
33
|
+
if (!canCommitTransition()) return false;
|
|
34
|
+
for (const change of changes) {
|
|
35
|
+
if (typeof change === "function" && change() === false) return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return { prepare, requestRevision: () => requestRevision };
|
|
42
|
+
}
|
|
@@ -6,6 +6,7 @@ import { createHomeGuidance } from "./components/home-guidance/home-guidance.js"
|
|
|
6
6
|
import { createConfigWorkspace } from "./components/config-workspace.js";
|
|
7
7
|
import { createModelRemovalController } from "./components/config-workspace/model-removal.js";
|
|
8
8
|
import { createLongTermMemorySetup } from "./components/long-term-memory-setup.js";
|
|
9
|
+
import { createMemoryEmbeddingConnectionFeature } from "./components/long-term-memory/embedding-connection-feature.js";
|
|
9
10
|
import { createLongTermMemoryManager } from "./components/long-term-memory/manager.js";
|
|
10
11
|
import { createMemoryWorkspace } from "./components/long-term-memory/workspace.js";
|
|
11
12
|
import { createLongTermMemoryController } from "./controllers/long-term-memory/controller.js";
|
|
@@ -28,7 +29,24 @@ export function createConfigurationFeature({
|
|
|
28
29
|
let activation;
|
|
29
30
|
let modelSetup;
|
|
30
31
|
let modelRemoval;
|
|
32
|
+
const memoryConnection = createMemoryEmbeddingConnectionFeature({
|
|
33
|
+
root: dom.memoryWorkspacePanel,
|
|
34
|
+
runtimeClient,
|
|
35
|
+
getEnvironmentId: selectedEnvironmentId,
|
|
36
|
+
getWorkspace: () => configWorkspace,
|
|
37
|
+
canOpen: () => !modelSetup?.isOpen() && !pluginManager.hasConfigurationDraft(),
|
|
38
|
+
refreshMemory: () => longTermMemorySetup.load({ preserveInputs: false }),
|
|
39
|
+
onSaved: () => activation?.markPending(),
|
|
40
|
+
onApplied: async () => {
|
|
41
|
+
activation?.markApplied();
|
|
42
|
+
pluginManager.markApplied?.();
|
|
43
|
+
await onConfigurationApplied();
|
|
44
|
+
},
|
|
45
|
+
onClosed: () => onConfigurationSettled(),
|
|
46
|
+
});
|
|
31
47
|
const longTermMemorySetup = createLongTermMemorySetup({
|
|
48
|
+
onAddConnection: (options) => memoryConnection.open(options),
|
|
49
|
+
onEnvironmentChanged: () => memoryConnection.environmentChanged(),
|
|
32
50
|
getEnvironmentId: selectedEnvironmentId,
|
|
33
51
|
loadStatus: (environmentId) =>
|
|
34
52
|
runtimeClient.loadLongTermMemoryStatus(environmentId),
|
|
@@ -45,6 +63,10 @@ export function createConfigurationFeature({
|
|
|
45
63
|
activation?.markPending();
|
|
46
64
|
return result;
|
|
47
65
|
},
|
|
66
|
+
saveProfile: (input, environmentId) =>
|
|
67
|
+
runtimeClient.saveMemoryEmbeddingProfile(input, environmentId),
|
|
68
|
+
removeProfile: (input, environmentId) =>
|
|
69
|
+
runtimeClient.removeMemoryEmbeddingProfile(input, environmentId),
|
|
48
70
|
disableMemory: async (environmentId) => {
|
|
49
71
|
const result = await runtimeClient.disableLongTermMemory(environmentId);
|
|
50
72
|
activation?.markPending();
|
|
@@ -67,6 +89,7 @@ export function createConfigurationFeature({
|
|
|
67
89
|
});
|
|
68
90
|
longTermMemoryManager = createLongTermMemoryManager({
|
|
69
91
|
actions: longTermMemoryController,
|
|
92
|
+
getEnvironmentId: selectedEnvironmentId,
|
|
70
93
|
});
|
|
71
94
|
longTermMemorySetup.mount(dom.memorySetupRoot);
|
|
72
95
|
longTermMemoryManager.mount(dom.memoryManagementRoot);
|
|
@@ -140,7 +163,7 @@ export function createConfigurationFeature({
|
|
|
140
163
|
getOperationsSummary,
|
|
141
164
|
onNavigationChange,
|
|
142
165
|
onRemoveModel: (model) => {
|
|
143
|
-
if (modelSetup?.isOpen()) return;
|
|
166
|
+
if (modelSetup?.isOpen() || memoryConnection.isOpen()) return;
|
|
144
167
|
return modelRemoval.remove(model);
|
|
145
168
|
},
|
|
146
169
|
dom: {
|
|
@@ -164,7 +187,7 @@ export function createConfigurationFeature({
|
|
|
164
187
|
return result;
|
|
165
188
|
},
|
|
166
189
|
onAddModel: async (options) => {
|
|
167
|
-
if (modelSetup?.isOpen()) return;
|
|
190
|
+
if (modelSetup?.isOpen() || memoryConnection.isOpen()) return;
|
|
168
191
|
if (!configWorkspace.beginExternalRuntimeMutation("model setup")) return;
|
|
169
192
|
configWorkspace.endExternalRuntimeMutation();
|
|
170
193
|
try {
|
|
@@ -215,6 +238,7 @@ export function createConfigurationFeature({
|
|
|
215
238
|
root: dom.configDashboard.parentElement,
|
|
216
239
|
getEnvironmentId: selectedEnvironmentId,
|
|
217
240
|
loadSetup: () => runtimeClient.loadModelSetup(selectedEnvironmentId()),
|
|
241
|
+
inspectConnection: (input) => runtimeClient.inspectModelConnection(input, selectedEnvironmentId()),
|
|
218
242
|
saveModel: (input) =>
|
|
219
243
|
runtimeClient.addRuntimeModel(input, selectedEnvironmentId()),
|
|
220
244
|
applySetup: () =>
|
|
@@ -269,7 +293,7 @@ export function createConfigurationFeature({
|
|
|
269
293
|
void longTermMemoryController.setOriginFilter("passive_observation");
|
|
270
294
|
longTermMemoryManager.focus();
|
|
271
295
|
},
|
|
272
|
-
prepareDiscardChanges: (...args) => {
|
|
296
|
+
prepareDiscardChanges: async (...args) => {
|
|
273
297
|
if (pluginManager.hasConfigurationDraft()) {
|
|
274
298
|
dom.configStatus.textContent =
|
|
275
299
|
"Finish or cancel plugin configuration before leaving.";
|
|
@@ -280,12 +304,18 @@ export function createConfigurationFeature({
|
|
|
280
304
|
"Finish or cancel model setup before leaving configuration.";
|
|
281
305
|
return null;
|
|
282
306
|
}
|
|
283
|
-
|
|
307
|
+
if (memoryConnection.isOpen()) {
|
|
308
|
+
dom.configStatus.textContent =
|
|
309
|
+
"Finish or cancel embedding connection setup before leaving.";
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
const prepared = await prepareDiscardChanges(...args);
|
|
284
313
|
if (typeof prepared !== "function") return prepared;
|
|
285
314
|
const commit = () => prepared();
|
|
286
315
|
commit.canCommit = () => {
|
|
287
316
|
if (pluginManager.hasConfigurationDraft()) return false;
|
|
288
317
|
if (modelSetup.isOpen()) return false;
|
|
318
|
+
if (memoryConnection.isOpen()) return false;
|
|
289
319
|
return prepared.canCommit?.() !== false;
|
|
290
320
|
};
|
|
291
321
|
return commit;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { bindSessionSearchDisclosure } from "../components/session-search-disclosure.js";
|
|
2
|
+
import { bindReasoningBudgetMenu } from "./reasoning-budget-menu-events.js";
|
|
1
3
|
import { beginConversationNavigation, canNavigateConversation } from "./conversation-navigation-intent.js";
|
|
2
4
|
import {
|
|
3
5
|
focusSelectedMenuItem,
|
|
@@ -34,6 +36,7 @@ export function createAppEventBindings({
|
|
|
34
36
|
}
|
|
35
37
|
const isCurrentNavigation = beginConversationNavigation(state);
|
|
36
38
|
const navigationRevision = shell.navigationRevision?.();
|
|
39
|
+
const navigationRequest = shell.navigationRequestRevision?.();
|
|
37
40
|
const environment = actions.selectedEnvironmentId?.();
|
|
38
41
|
const session = state.currentSessionId;
|
|
39
42
|
const prepared = await prepareQueueRecovery();
|
|
@@ -43,6 +46,7 @@ export function createAppEventBindings({
|
|
|
43
46
|
if (prepared?.canCommit?.() === false) return false;
|
|
44
47
|
const hasCurrentWorkspaceNavigation = navigationRevision === shell.navigationRevision?.();
|
|
45
48
|
if (!hasCurrentWorkspaceNavigation) return false;
|
|
49
|
+
if (navigationRequest !== shell.navigationRequestRevision?.()) return false;
|
|
46
50
|
if (actions.selectedEnvironmentId?.() !== environment) return false;
|
|
47
51
|
if (state.currentSessionId !== session) return false;
|
|
48
52
|
return () => {
|
|
@@ -57,7 +61,42 @@ export function createAppEventBindings({
|
|
|
57
61
|
};
|
|
58
62
|
}
|
|
59
63
|
|
|
64
|
+
async function newConversation({ canCommit = () => true } = {}) {
|
|
65
|
+
if (!canCommit()) return false;
|
|
66
|
+
const recovery = await prepareCurrentQueueRecovery();
|
|
67
|
+
if (!recovery || !canCommit()) return false;
|
|
68
|
+
const preparedWorkspaceActivation = await shell.prepareWorkspaceActivation(
|
|
69
|
+
"chat",
|
|
70
|
+
{ focus: false },
|
|
71
|
+
);
|
|
72
|
+
if (!preparedWorkspaceActivation || !canCommit()) return false;
|
|
73
|
+
if (preparedWorkspaceActivation.canCommit?.() === false) return false;
|
|
74
|
+
if (recovery() === false) return false;
|
|
75
|
+
if (preparedWorkspaceActivation() === false) return false;
|
|
76
|
+
state.currentSessionId = createWebSessionId();
|
|
77
|
+
onSessionCreated(state.currentSessionId);
|
|
78
|
+
actions.saveSessionId(
|
|
79
|
+
actions.selectedEnvironmentId(),
|
|
80
|
+
state.currentSessionId,
|
|
81
|
+
);
|
|
82
|
+
actions.rememberModelSelection();
|
|
83
|
+
state.messages = [];
|
|
84
|
+
actions.resetLiveRequestView();
|
|
85
|
+
actions.setCurrentSessionTitle(state.currentSessionId);
|
|
86
|
+
actions.applyConversationChrome();
|
|
87
|
+
actions.subscribeSession(state.currentSessionId);
|
|
88
|
+
actions.renderSessions();
|
|
89
|
+
actions.renderMessages();
|
|
90
|
+
shell.setSessionsDrawerOpen(false);
|
|
91
|
+
dom.composerInput.focus();
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
|
|
60
95
|
function bind() {
|
|
96
|
+
bindReasoningBudgetMenu({ state, dom, actions, modelSelector, documentRoot });
|
|
97
|
+
bindSessionSearchDisclosure({
|
|
98
|
+
toggle: dom.sessionSearchToggleButton, field: dom.sessionSearchField, input: dom.sessionSearchInput,
|
|
99
|
+
});
|
|
61
100
|
let searchTimer;
|
|
62
101
|
dom.sessionSearchInput.addEventListener("input", () => {
|
|
63
102
|
state.sessionQuery = dom.sessionSearchInput.value;
|
|
@@ -69,33 +108,7 @@ export function createAppEventBindings({
|
|
|
69
108
|
"click",
|
|
70
109
|
() => void actions.loadSessions(),
|
|
71
110
|
);
|
|
72
|
-
dom.newSessionButton.addEventListener("click",
|
|
73
|
-
const recovery = await prepareCurrentQueueRecovery();
|
|
74
|
-
if (!recovery) return;
|
|
75
|
-
const preparedWorkspaceActivation = shell.prepareWorkspaceActivation(
|
|
76
|
-
"chat",
|
|
77
|
-
{ focus: false },
|
|
78
|
-
);
|
|
79
|
-
if (!preparedWorkspaceActivation) return;
|
|
80
|
-
if (recovery() === false) return;
|
|
81
|
-
if (preparedWorkspaceActivation() === false) return;
|
|
82
|
-
state.currentSessionId = createWebSessionId();
|
|
83
|
-
onSessionCreated(state.currentSessionId);
|
|
84
|
-
actions.saveSessionId(
|
|
85
|
-
actions.selectedEnvironmentId(),
|
|
86
|
-
state.currentSessionId,
|
|
87
|
-
);
|
|
88
|
-
actions.rememberModelSelection();
|
|
89
|
-
state.messages = [];
|
|
90
|
-
actions.resetLiveRequestView();
|
|
91
|
-
actions.setCurrentSessionTitle(state.currentSessionId);
|
|
92
|
-
actions.applyConversationChrome();
|
|
93
|
-
actions.subscribeSession(state.currentSessionId);
|
|
94
|
-
actions.renderSessions();
|
|
95
|
-
actions.renderMessages();
|
|
96
|
-
shell.setSessionsDrawerOpen(false);
|
|
97
|
-
dom.composerInput.focus();
|
|
98
|
-
});
|
|
111
|
+
dom.newSessionButton.addEventListener("click", () => newConversation());
|
|
99
112
|
dom.environmentSelect.addEventListener("change", environmentTransition.onSelectChange, true);
|
|
100
113
|
dom.agentPickerButton.addEventListener("click", (event) => {
|
|
101
114
|
event.stopPropagation();
|
|
@@ -199,7 +212,9 @@ export function createAppEventBindings({
|
|
|
199
212
|
actions.renderPermissionMode();
|
|
200
213
|
}
|
|
201
214
|
actions.renderAgentMode();
|
|
202
|
-
if (state.agentModeMenuOpen)
|
|
215
|
+
if (state.agentModeMenuOpen) {
|
|
216
|
+
focusSelectedMenuItem(dom.agentModeMenu);
|
|
217
|
+
}
|
|
203
218
|
});
|
|
204
219
|
dom.agentModeButton.addEventListener("keydown", (event) => {
|
|
205
220
|
if (event.key !== "ArrowDown" && event.key !== "ArrowUp") return;
|
|
@@ -218,7 +233,7 @@ export function createAppEventBindings({
|
|
|
218
233
|
event.stopPropagation(),
|
|
219
234
|
);
|
|
220
235
|
dom.agentModeMenu.addEventListener("keydown", (event) => {
|
|
221
|
-
handleMenuNavigation(event, dom.agentModeMenu);
|
|
236
|
+
if (event.target.closest?.("[data-mode]")) handleMenuNavigation(event, dom.agentModeMenu);
|
|
222
237
|
});
|
|
223
238
|
documentRoot.addEventListener("click", (event) => {
|
|
224
239
|
if (
|
|
@@ -306,6 +321,7 @@ export function createAppEventBindings({
|
|
|
306
321
|
|
|
307
322
|
return {
|
|
308
323
|
bind,
|
|
324
|
+
newConversation,
|
|
309
325
|
...environmentTransition,
|
|
310
326
|
};
|
|
311
327
|
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { isColorPaletteId, PALETTE_PREFERENCE_KEY, savedColorPalette } from "../lib/color-palettes.js";
|
|
2
|
+
import { isNavigationMode, NAVIGATION_PREFERENCE_KEY, savedNavigationMode } from "../lib/navigation-display.js";
|
|
3
|
+
|
|
4
|
+
export function createAppearanceController({ storage, applyPalette, applyNavigationMode = () => {}, onChange = () => {} }) {
|
|
5
|
+
let savedId = savedColorPalette(storage);
|
|
6
|
+
let selectedId = savedId;
|
|
7
|
+
let savedNavigation = savedNavigationMode(storage);
|
|
8
|
+
let selectedNavigation = savedNavigation;
|
|
9
|
+
let open = false;
|
|
10
|
+
let pending = false;
|
|
11
|
+
let error = "";
|
|
12
|
+
const state = () => ({ savedId, selectedId, savedNavigationMode: savedNavigation, selectedNavigationMode: selectedNavigation, open, pending, error });
|
|
13
|
+
const render = () => onChange(state());
|
|
14
|
+
const canPreviewAppearance = () => open && !pending;
|
|
15
|
+
applyPalette(savedId);
|
|
16
|
+
applyNavigationMode(savedNavigation);
|
|
17
|
+
|
|
18
|
+
function restoreAcknowledgedAppearance() {
|
|
19
|
+
savedId = savedColorPalette(storage);
|
|
20
|
+
selectedId = savedId;
|
|
21
|
+
savedNavigation = savedNavigationMode(storage);
|
|
22
|
+
selectedNavigation = savedNavigation;
|
|
23
|
+
applyPalette(savedId);
|
|
24
|
+
applyNavigationMode(savedNavigation);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const unsubscribe = storage.subscribe?.(() => {
|
|
28
|
+
const previousSavedId = savedId;
|
|
29
|
+
const previousSavedNavigation = savedNavigation;
|
|
30
|
+
savedId = savedColorPalette(storage);
|
|
31
|
+
savedNavigation = savedNavigationMode(storage);
|
|
32
|
+
if (followsSavedAppearance(open, selectedId, previousSavedId)) {
|
|
33
|
+
selectedId = savedId;
|
|
34
|
+
applyPalette(savedId);
|
|
35
|
+
}
|
|
36
|
+
if (followsSavedAppearance(open, selectedNavigation, previousSavedNavigation)) {
|
|
37
|
+
selectedNavigation = savedNavigation;
|
|
38
|
+
applyNavigationMode(savedNavigation);
|
|
39
|
+
}
|
|
40
|
+
render();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
state,
|
|
45
|
+
open() {
|
|
46
|
+
if (open) return;
|
|
47
|
+
restoreAcknowledgedAppearance();
|
|
48
|
+
error = "";
|
|
49
|
+
open = true;
|
|
50
|
+
render();
|
|
51
|
+
},
|
|
52
|
+
select(id) {
|
|
53
|
+
if (!canPreviewAppearance()) return;
|
|
54
|
+
if (!isColorPaletteId(id)) return;
|
|
55
|
+
selectedId = id;
|
|
56
|
+
error = "";
|
|
57
|
+
applyPalette(id);
|
|
58
|
+
render();
|
|
59
|
+
},
|
|
60
|
+
selectNavigationMode(mode) {
|
|
61
|
+
if (!canPreviewAppearance()) return;
|
|
62
|
+
if (!isNavigationMode(mode)) return;
|
|
63
|
+
selectedNavigation = mode;
|
|
64
|
+
error = "";
|
|
65
|
+
applyNavigationMode(mode);
|
|
66
|
+
render();
|
|
67
|
+
},
|
|
68
|
+
close() {
|
|
69
|
+
if (pending) return false;
|
|
70
|
+
open = false;
|
|
71
|
+
restoreAcknowledgedAppearance();
|
|
72
|
+
render();
|
|
73
|
+
return true;
|
|
74
|
+
},
|
|
75
|
+
async save() {
|
|
76
|
+
if (!canPreviewAppearance()) return;
|
|
77
|
+
const paletteToSave = selectedId;
|
|
78
|
+
const navigationToSave = selectedNavigation;
|
|
79
|
+
pending = true;
|
|
80
|
+
error = "";
|
|
81
|
+
render();
|
|
82
|
+
try {
|
|
83
|
+
if (paletteToSave !== savedColorPalette(storage))
|
|
84
|
+
await storage.setItem(PALETTE_PREFERENCE_KEY, paletteToSave);
|
|
85
|
+
if (navigationToSave !== savedNavigationMode(storage))
|
|
86
|
+
await storage.setItem(NAVIGATION_PREFERENCE_KEY, navigationToSave);
|
|
87
|
+
open = false;
|
|
88
|
+
} catch (failure) {
|
|
89
|
+
error = failure?.message || "Could not save appearance settings. Reload and try again.";
|
|
90
|
+
} finally {
|
|
91
|
+
pending = false;
|
|
92
|
+
restoreAcknowledgedAppearance();
|
|
93
|
+
render();
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
destroy() {
|
|
97
|
+
unsubscribe?.();
|
|
98
|
+
restoreAcknowledgedAppearance();
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function followsSavedAppearance(open, selected, previouslySaved) {
|
|
104
|
+
return !open || selected === previouslySaved;
|
|
105
|
+
}
|
|
@@ -380,8 +380,16 @@ export function createAutomationsController({
|
|
|
380
380
|
eventRefresh.schedule();
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
+
function captureActionScope() {
|
|
384
|
+
const continuation = captureView().captureContinuation();
|
|
385
|
+
const draftRevision = state.draft?.revision;
|
|
386
|
+
const publishedRevision = state.publishedDefinition?.revision;
|
|
387
|
+
return () => continuation.isCurrent() && draftRevision === state.draft?.revision &&
|
|
388
|
+
publishedRevision === state.publishedDefinition?.revision;
|
|
389
|
+
}
|
|
390
|
+
|
|
383
391
|
return {
|
|
384
|
-
snapshot, openRoute, refresh, create,
|
|
392
|
+
snapshot, openRoute, refresh, create, captureActionScope,
|
|
385
393
|
createTemplate: (templateId) => create(templateId), deleteDraft, mutateDraft, saveDefinition,
|
|
386
394
|
saveNode, saveAgent, validate, publishDefinition, setActive, undoDraftMove, restorePublishedDraft,
|
|
387
395
|
archive: () => changeArchiveState(true), restore: () => changeArchiveState(false),
|
|
@@ -52,7 +52,7 @@ export interface ComposerFeatureOptions {
|
|
|
52
52
|
recordControlEvent: ReturnType<typeof createRealtimeEventController>["recordControlEvent"];
|
|
53
53
|
drafts?: ComposerDrafts;
|
|
54
54
|
onChange?(): void;
|
|
55
|
-
confirmReview?(message: string): boolean
|
|
55
|
+
confirmReview?(message: string, options?: { title: string; confirmLabel: string }): boolean | Promise<boolean>;
|
|
56
56
|
}
|
|
57
57
|
export interface ComposerFeature extends ComposerSurface {
|
|
58
58
|
queue: ComposerQueueController;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { confirmDialog } from "../components/confirmation-dialog.js";
|
|
1
2
|
import { createComposerDrafts } from "./composer-drafts.js";
|
|
2
3
|
import { createComposerSubmissionLifecycle, ComposerSubmissionRefused } from "./composer-submission-lifecycle.js";
|
|
3
4
|
import { createComposerAttachmentsController } from "./composer-attachments-controller.js";
|
|
@@ -14,7 +15,7 @@ export function createComposerFeature({
|
|
|
14
15
|
getSubmissionBlock, onSubmissionBlocked, isVisible = () => true,
|
|
15
16
|
renderSessions, renderMessages, applyConversationChrome, setMessageStatus, recordControlEvent,
|
|
16
17
|
drafts = createComposerDrafts(), onChange = () => {},
|
|
17
|
-
confirmReview =
|
|
18
|
+
confirmReview = confirmDialog,
|
|
18
19
|
}) {
|
|
19
20
|
const surfaces = [];
|
|
20
21
|
let queue;
|
|
@@ -49,7 +50,12 @@ export function createComposerFeature({
|
|
|
49
50
|
canDeleteAttachment: (file) => !drafts.contains(file) && !lifecycle.ownsAttachment(file) && !queue.ownsAttachment(file),
|
|
50
51
|
});
|
|
51
52
|
const notice = createComposerSubmissionNotice({ form: surfaceDom.composerForm, review: async (attempt) => {
|
|
52
|
-
|
|
53
|
+
const draft = currentDraft();
|
|
54
|
+
const revision = draft.revision;
|
|
55
|
+
if (!await confirmReview("Check the conversation first: this message may already have been sent. Restore it for manual review? Sending it again may repeat its actions.",
|
|
56
|
+
{ title: "Review paused message", confirmLabel: "Restore for review" })) return;
|
|
57
|
+
if (!visible() || currentDraft() !== draft || draft.revision !== revision) return;
|
|
58
|
+
if (!lifecycle.paused(draft.scope).includes(attempt)) return;
|
|
53
59
|
try { await lifecycle.restoreForManualReview(attempt.id, queue.authorizeReview); }
|
|
54
60
|
catch (error) { reportFailure(attempt.payload.scope, error.message); }
|
|
55
61
|
}, recover: async (scope) => {
|
|
@@ -75,7 +81,8 @@ export function createComposerFeature({
|
|
|
75
81
|
function send(action) {
|
|
76
82
|
let draft = currentDraft();
|
|
77
83
|
draft.text = surfaceDom.composerInput.value.trim();
|
|
78
|
-
const
|
|
84
|
+
const configured = getSettings();
|
|
85
|
+
const settings = { ...configured, ...(configured.reasoningPreference ? { reasoningPreference: { ...configured.reasoningPreference } } : {}) };
|
|
79
86
|
if (!draft.scope.sessionId) { ensureBoundSession(); draft = currentDraft(); }
|
|
80
87
|
const activeRequestId = allowsActiveRequest ? state.activeRequestId : "";
|
|
81
88
|
return lifecycle.submit({ draft, action, settings,
|
|
@@ -22,7 +22,7 @@ export interface ComposerQueueControllerOptions {
|
|
|
22
22
|
reportFailure(scope: ComposerScope, summary: string): void;
|
|
23
23
|
reportRecovery?(scope: ComposerScope, summary: string): void;
|
|
24
24
|
onChange?(): void;
|
|
25
|
-
confirmTakeover?(message: string): boolean
|
|
25
|
+
confirmTakeover?(message: string, options?: { title: string; confirmLabel: string }): boolean | Promise<boolean>;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export interface ComposerQueueController {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { confirmDialog } from "../components/confirmation-dialog.js";
|
|
1
2
|
import { ComposerSubmissionRefused, isDefiniteSubmissionRefusal } from "./composer-submission-lifecycle.js";
|
|
2
3
|
|
|
3
4
|
const scopeKey = (scope) => JSON.stringify([scope.environmentId, scope.sessionId]);
|
|
@@ -11,7 +12,7 @@ function hasConversationQueueScope(scope) {
|
|
|
11
12
|
export function createComposerQueueController({
|
|
12
13
|
queue, drafts, lifecycle, getDraft, requests, getSettings,
|
|
13
14
|
isCurrentScope, reportFailure, reportRecovery = () => {}, onChange = () => {},
|
|
14
|
-
confirmTakeover =
|
|
15
|
+
confirmTakeover = confirmDialog,
|
|
15
16
|
}) {
|
|
16
17
|
const processing = new Map();
|
|
17
18
|
const bindings = new Map();
|
|
@@ -112,8 +113,13 @@ export function createComposerQueueController({
|
|
|
112
113
|
}
|
|
113
114
|
let claimed = await queue.claimBlockedRelease(scope, release.releaseToken);
|
|
114
115
|
if (!claimed) {
|
|
115
|
-
|
|
116
|
+
if (!isCurrentScope(scope)) return false;
|
|
117
|
+
const revision = draft.revision;
|
|
118
|
+
const approved = await confirmTakeover("This queued message may have been sent or may belong to another window. Close that window and check the conversation before taking ownership for manual review. Sending it again may repeat its actions. Continue?",
|
|
119
|
+
{ title: "Review queued message", confirmLabel: "Take ownership" });
|
|
116
120
|
if (!approved) return false;
|
|
121
|
+
if (!isCurrentScope(scope) || draft.revision !== revision) return false;
|
|
122
|
+
if (queue.getBlockedRelease(scope)?.releaseToken !== release.releaseToken) return false;
|
|
117
123
|
claimed = await queue.claimBlockedRelease(scope, release.releaseToken, { takeover: true });
|
|
118
124
|
}
|
|
119
125
|
if (!claimed) throw new Error("This queued message changed before it could be recovered.");
|
|
@@ -168,7 +174,7 @@ export function createComposerQueueController({
|
|
|
168
174
|
const item = released.item;
|
|
169
175
|
const attempt = await lifecycle.submitCaptured({
|
|
170
176
|
action: "send", payload: { scope, text: item.text, attachments: item.attachments, release: released },
|
|
171
|
-
settings: { agentMode: item.agentMode, toolPermissionMode: item.toolPermissionMode, modelPreference: item.modelPreference },
|
|
177
|
+
settings: { agentMode: item.agentMode, toolPermissionMode: item.toolPermissionMode, modelPreference: item.modelPreference, ...(item.reasoningPreference ? { reasoningPreference: item.reasoningPreference } : {}) },
|
|
172
178
|
prepare: async (submission) => { await prepareManualSend(submission); requests.prepareView(submission); },
|
|
173
179
|
execute: send, accepted: bindAccepted, prepareRestore,
|
|
174
180
|
});
|
|
@@ -2,7 +2,7 @@ import type { SessionComposerQueueItem, ReleasedSessionComposerQueueItem } from
|
|
|
2
2
|
import type { ComposerAttachment, ComposerDraft, ComposerDraftSnapshot, ComposerDrafts, ComposerScope } from "./composer-drafts.js";
|
|
3
3
|
|
|
4
4
|
export type ComposerSubmissionAction = "send" | "send_next" | "steer";
|
|
5
|
-
export type ComposerSubmissionSettings = Pick<SessionComposerQueueItem, "agentMode" | "toolPermissionMode" | "modelPreference">;
|
|
5
|
+
export type ComposerSubmissionSettings = Pick<SessionComposerQueueItem, "agentMode" | "toolPermissionMode" | "modelPreference" | "reasoningPreference">;
|
|
6
6
|
export type ComposerSubmissionPhase = "preparing" | "sending" | "accepted" | "refused" | "uncertain" | "restored";
|
|
7
7
|
|
|
8
8
|
export interface ComposerSubmissionAttempt<Settings = unknown, Result = unknown> {
|