@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
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function embeddingProviderOptions(providers) {
|
|
2
|
+
const choices = providers.map((provider) => ({
|
|
3
|
+
id: provider.id,
|
|
4
|
+
label: `${provider.id} · ${provider.type}`,
|
|
5
|
+
}));
|
|
6
|
+
const labels = { openai: "OpenAI", ollama: "Ollama", llamacpp: "llama.cpp" };
|
|
7
|
+
for (const type of Object.keys(labels)) {
|
|
8
|
+
if (
|
|
9
|
+
type !== "llamacpp" &&
|
|
10
|
+
providers.some((provider) => provider.type === type)
|
|
11
|
+
)
|
|
12
|
+
continue;
|
|
13
|
+
choices.push({
|
|
14
|
+
id: `new:${type}`,
|
|
15
|
+
label: `${labels[type]} · new connection`,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return choices;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function isNewEmbeddingProviderChoice(choice, providers) {
|
|
22
|
+
return embeddingProviderOptions(providers).some(
|
|
23
|
+
(option) => option.id === choice && choice.startsWith("new:"),
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function suggestEmbeddingConnectionId(providers) {
|
|
28
|
+
const occupied = new Set(providers.map((provider) => provider.id));
|
|
29
|
+
let id = "llamacpp-embedding";
|
|
30
|
+
for (let suffix = 2; occupied.has(id); suffix += 1)
|
|
31
|
+
id = `llamacpp-embedding-${suffix}`;
|
|
32
|
+
return id;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function isValidEmbeddingConnectionId(id) {
|
|
36
|
+
return (
|
|
37
|
+
typeof id === "string" &&
|
|
38
|
+
id.length <= 128 &&
|
|
39
|
+
/^[A-Za-z][A-Za-z0-9._-]*$/.test(id) &&
|
|
40
|
+
!["__proto__", "prototype", "constructor"].includes(id)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function embeddingProviderHasAddress(type) {
|
|
45
|
+
return type === "ollama" || type === "llamacpp";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function embeddingProviderAcceptsCredential(type, provider) {
|
|
49
|
+
if (type === "openai") return true;
|
|
50
|
+
if (type !== "llamacpp") return false;
|
|
51
|
+
if (!provider) return true;
|
|
52
|
+
if (provider.credentialConfigured === true) return true;
|
|
53
|
+
return provider.requiresApiKey !== false;
|
|
54
|
+
}
|
|
@@ -8,6 +8,7 @@ function isSavedEmbeddingProviderReceipt(payload, selection) {
|
|
|
8
8
|
if (typeof receipt.type !== "string" || !receipt.type.trim()) return false;
|
|
9
9
|
if (receipt.type !== selection.type) return false;
|
|
10
10
|
if (selection.providerId) return receipt.id === selection.providerId;
|
|
11
|
+
if (selection.newProviderId) return receipt.id === selection.newProviderId;
|
|
11
12
|
return true;
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -20,6 +21,8 @@ export function applySavedEmbeddingProviderReceipt(state, payload, selection) {
|
|
|
20
21
|
typeof payload.savedProvider.credentialConfigured === "boolean";
|
|
21
22
|
if (hasCredentialStatus)
|
|
22
23
|
receipt.credentialConfigured = payload.savedProvider.credentialConfigured;
|
|
24
|
+
if (typeof payload.savedProvider.requiresApiKey === "boolean")
|
|
25
|
+
receipt.requiresApiKey = payload.savedProvider.requiresApiKey;
|
|
23
26
|
const existing = state.providers.find((provider) => provider.id === id);
|
|
24
27
|
const providers = state.providers.map((provider) =>
|
|
25
28
|
provider.id === id ? { ...provider, ...receipt } : provider,
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
embeddingProviderOptions,
|
|
3
|
+
embeddingProviderHasAddress,
|
|
4
|
+
embeddingProviderAcceptsCredential,
|
|
5
|
+
} from "./embedding-provider-options.js";
|
|
1
6
|
import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
|
|
2
7
|
|
|
3
8
|
function field(
|
|
@@ -11,16 +16,23 @@ function field(
|
|
|
11
16
|
return `<label class="runtime-setup-field"><span>${label}</span><input data-runtime-setup-field="${field}" type="${type}" value="${escapeAttribute(value)}" placeholder="${escapeAttribute(placeholder)}" autocomplete="${type === "password" ? "new-password" : "off"}" spellcheck="false" ${field === "embedding-model" ? 'list="runtimeEmbeddingModels"' : ""} />${help ? `<small>${help}</small>` : ""}</label>`;
|
|
12
17
|
}
|
|
13
18
|
|
|
14
|
-
function renderEmbeddingCredential(provider) {
|
|
19
|
+
function renderEmbeddingCredential(provider, providerType) {
|
|
15
20
|
const credentialConfigured = provider?.credentialConfigured === true;
|
|
21
|
+
let help =
|
|
22
|
+
"Saved privately on the ABot server. Leave blank to keep a configured key.";
|
|
23
|
+
if (providerType === "llamacpp" && !provider)
|
|
24
|
+
help =
|
|
25
|
+
"Optional for a server without authentication. Saved privately on the ABot server.";
|
|
26
|
+
if (credentialConfigured)
|
|
27
|
+
help = "API key already saved. Leave blank to use it.";
|
|
16
28
|
return field(
|
|
17
29
|
"embedding-key",
|
|
18
|
-
|
|
30
|
+
providerType === "llamacpp" && !provider
|
|
31
|
+
? "API key (optional)"
|
|
32
|
+
: "API key (optional if already saved)",
|
|
19
33
|
"",
|
|
20
34
|
"password",
|
|
21
|
-
|
|
22
|
-
? "API key already saved. Leave blank to use it."
|
|
23
|
-
: "Saved privately on the ABot server. Leave blank to keep a configured key.",
|
|
35
|
+
help,
|
|
24
36
|
credentialConfigured ? "••••••••" : "",
|
|
25
37
|
);
|
|
26
38
|
}
|
|
@@ -28,28 +40,16 @@ function renderEmbeddingCredential(provider) {
|
|
|
28
40
|
export function renderEmbeddingSetup(state, providerType, configuredProvider) {
|
|
29
41
|
if (!state.loaded)
|
|
30
42
|
return `<p class="runtime-setup-feedback" role="${state.error ? "alert" : "status"}">${escapeHtml(state.error || "Loading embedding options…")}</p>${state.error ? '<button type="button" class="runtime-setup-inline-action" data-runtime-setup-action="embedding-reload">Try again</button>' : ""}`;
|
|
31
|
-
const providers =
|
|
32
|
-
...state.providers.map((provider) => ({
|
|
33
|
-
id: provider.id,
|
|
34
|
-
label: `${provider.id} · ${provider.type}`,
|
|
35
|
-
})),
|
|
36
|
-
...["openai", "ollama"]
|
|
37
|
-
.filter(
|
|
38
|
-
(type) => !state.providers.some((provider) => provider.type === type),
|
|
39
|
-
)
|
|
40
|
-
.map((type) => ({
|
|
41
|
-
id: `new:${type}`,
|
|
42
|
-
label: `${type === "openai" ? "OpenAI" : "Ollama"} · new connection`,
|
|
43
|
-
})),
|
|
44
|
-
];
|
|
43
|
+
const providers = embeddingProviderOptions(state.providers);
|
|
45
44
|
return `<div class="runtime-embedding-fields">
|
|
46
45
|
${state.status?.enabled ? '<p class="runtime-setup-feedback">Memory is already configured. You can keep it or test and save changes.</p>' : ""}
|
|
47
46
|
<label class="runtime-setup-field"><span>Embedding provider</span><select data-runtime-setup-field="embedding-provider">${providers.map((provider) => `<option value="${escapeAttribute(provider.id)}" ${state.provider === provider.id ? "selected" : ""}>${escapeHtml(provider.label)}</option>`).join("")}</select></label>
|
|
47
|
+
${providerType === "llamacpp" && !configuredProvider ? field("embedding-connection-id", "Connection ID", state.newProviderId, "text", "A separate connection keeps your chat server settings unchanged.") : ""}
|
|
48
48
|
${field("embedding-model", "Embedding model ID", state.model, "text", "Choose a model that supports embeddings. ABot will not install or select one for you.")}
|
|
49
49
|
<datalist id="runtimeEmbeddingModels">${state.models.map((model) => `<option value="${escapeAttribute(model)}"></option>`).join("")}</datalist>
|
|
50
|
-
${providerType
|
|
51
|
-
${providerType
|
|
52
|
-
${configuredProvider ? '<button type="button" class="runtime-setup-inline-action" data-runtime-setup-action="embedding-discover"><svg aria-hidden="true" viewBox="0 0 24 24"><circle cx="10.5" cy="10.5" r="6.5"/><path d="m16 16 4.5 4.5"/></svg><span>Discover models</span></button>' : ""}
|
|
50
|
+
${embeddingProviderAcceptsCredential(providerType, configuredProvider) ? renderEmbeddingCredential(configuredProvider, providerType) : ""}
|
|
51
|
+
${embeddingProviderHasAddress(providerType) && !configuredProvider ? field("embedding-url", providerType === "llamacpp" ? "llama.cpp address" : "Ollama address", state.baseUrl, "url", "Use the address reachable from the computer running ABot.") : ""}
|
|
52
|
+
${configuredProvider && providerType !== "llamacpp" ? '<button type="button" class="runtime-setup-inline-action" data-runtime-setup-action="embedding-discover"><svg aria-hidden="true" viewBox="0 0 24 24"><circle cx="10.5" cy="10.5" r="6.5"/><path d="m16 16 4.5 4.5"/></svg><span>Discover models</span></button>' : ""}
|
|
53
53
|
<p class="runtime-setup-feedback">Test and save sends one embedding request to your provider. You can also configure this later in Settings.</p>
|
|
54
54
|
${state.error ? `<p class="runtime-setup-feedback error" role="alert">${escapeHtml(state.error)}</p>` : state.message ? `<p class="runtime-setup-feedback" role="status">${escapeHtml(state.message)}</p>` : ""}
|
|
55
55
|
${state.busy ? '<p class="runtime-setup-feedback" role="status">Checking embedding settings…</p>' : ""}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
embeddingProviderAcceptsCredential,
|
|
3
|
+
embeddingProviderHasAddress,
|
|
4
|
+
isNewEmbeddingProviderChoice,
|
|
5
|
+
isValidEmbeddingConnectionId,
|
|
6
|
+
suggestEmbeddingConnectionId,
|
|
7
|
+
} from "./embedding-provider-options.js";
|
|
1
8
|
import { applySavedEmbeddingProviderReceipt } from "./embedding-provider-receipt.js";
|
|
2
9
|
import { textOf } from "../../lib/text-format.js";
|
|
3
10
|
import { renderEmbeddingSetup } from "./embedding-rendering.js";
|
|
4
11
|
import {
|
|
5
12
|
DEFAULT_OLLAMA_BASE_URL,
|
|
13
|
+
defaultSetupProviderAddress,
|
|
6
14
|
validateRuntimeSetupBaseUrl,
|
|
7
15
|
validateRuntimeSetupModelId,
|
|
8
16
|
} from "./validation.js";
|
|
@@ -22,6 +30,8 @@ export function createEmbeddingSetupStep({
|
|
|
22
30
|
providers: [],
|
|
23
31
|
provider: "",
|
|
24
32
|
model: "",
|
|
33
|
+
newProviderId: "",
|
|
34
|
+
useApiKey: false,
|
|
25
35
|
baseUrl: DEFAULT_OLLAMA_BASE_URL,
|
|
26
36
|
models: [],
|
|
27
37
|
busy: false,
|
|
@@ -60,6 +70,8 @@ export function createEmbeddingSetupStep({
|
|
|
60
70
|
providers: [],
|
|
61
71
|
provider: "",
|
|
62
72
|
model: "",
|
|
73
|
+
newProviderId: "",
|
|
74
|
+
useApiKey: false,
|
|
63
75
|
baseUrl: DEFAULT_OLLAMA_BASE_URL,
|
|
64
76
|
models: [],
|
|
65
77
|
busy: false,
|
|
@@ -70,28 +82,22 @@ export function createEmbeddingSetupStep({
|
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
function invalidateConnection() {
|
|
73
|
-
const { provider, model, baseUrl } = state;
|
|
85
|
+
const { provider, model, baseUrl, newProviderId, useApiKey } = state;
|
|
74
86
|
const connectionProviderChanged =
|
|
75
87
|
loadedConnectionProvider !== getPreferredProvider();
|
|
76
88
|
reset();
|
|
77
89
|
preferConnectionProvider = connectionProviderChanged;
|
|
78
90
|
state.baseUrl = baseUrl;
|
|
79
91
|
if (connectionProviderChanged) return;
|
|
80
|
-
Object.assign(state, { provider, model });
|
|
92
|
+
Object.assign(state, { provider, model, newProviderId, useApiKey });
|
|
81
93
|
}
|
|
82
94
|
|
|
83
95
|
function retainedEmbeddingProvider() {
|
|
84
96
|
const configured = selectedProvider();
|
|
85
97
|
if (configured) return configured.id;
|
|
86
|
-
|
|
87
|
-
state.provider
|
|
88
|
-
|
|
89
|
-
if (!isNewProviderChoice) return "";
|
|
90
|
-
const hasConfiguredType = state.providers.some(
|
|
91
|
-
(provider) => provider.type === state.provider.slice(4),
|
|
92
|
-
);
|
|
93
|
-
if (hasConfiguredType) return "";
|
|
94
|
-
return state.provider;
|
|
98
|
+
return isNewEmbeddingProviderChoice(state.provider, state.providers)
|
|
99
|
+
? state.provider
|
|
100
|
+
: "";
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
function initialEmbeddingProvider(connectionProvider) {
|
|
@@ -164,7 +170,12 @@ export function createEmbeddingSetupStep({
|
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
async function discover() {
|
|
167
|
-
if (
|
|
173
|
+
if (
|
|
174
|
+
state.busy ||
|
|
175
|
+
!selectedProvider() ||
|
|
176
|
+
selectedProviderType() === "llamacpp"
|
|
177
|
+
)
|
|
178
|
+
return;
|
|
168
179
|
await run(
|
|
169
180
|
() => discoverModels(state.provider),
|
|
170
181
|
(payload) => {
|
|
@@ -181,7 +192,13 @@ export function createEmbeddingSetupStep({
|
|
|
181
192
|
}
|
|
182
193
|
|
|
183
194
|
function apiKeyValue() {
|
|
184
|
-
if (
|
|
195
|
+
if (
|
|
196
|
+
!embeddingProviderAcceptsCredential(
|
|
197
|
+
selectedProviderType(),
|
|
198
|
+
selectedProvider(),
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
return "";
|
|
185
202
|
return textOf(
|
|
186
203
|
container.querySelector('[data-runtime-setup-field="embedding-key"]')
|
|
187
204
|
?.value,
|
|
@@ -207,7 +224,10 @@ export function createEmbeddingSetupStep({
|
|
|
207
224
|
const input = selectedProvider()
|
|
208
225
|
? { providerId: state.provider, model: model.value }
|
|
209
226
|
: { provider: selectedProviderType(), model: model.value };
|
|
210
|
-
if (
|
|
227
|
+
if (
|
|
228
|
+
!selectedProvider() &&
|
|
229
|
+
embeddingProviderHasAddress(selectedProviderType())
|
|
230
|
+
) {
|
|
211
231
|
const address = validateRuntimeSetupBaseUrl(state.baseUrl);
|
|
212
232
|
if (!address.valid) {
|
|
213
233
|
state.error = address.message;
|
|
@@ -216,10 +236,22 @@ export function createEmbeddingSetupStep({
|
|
|
216
236
|
}
|
|
217
237
|
input.baseUrl = address.value;
|
|
218
238
|
}
|
|
219
|
-
if (
|
|
239
|
+
if (state.provider === "new:llamacpp") {
|
|
240
|
+
if (!isValidEmbeddingConnectionId(state.newProviderId)) {
|
|
241
|
+
state.error =
|
|
242
|
+
"Enter a connection ID starting with a letter, using letters, numbers, dots, underscores or hyphens.";
|
|
243
|
+
onChange();
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
state.useApiKey = state.useApiKey || Boolean(apiKey);
|
|
247
|
+
input.newProviderId = state.newProviderId;
|
|
248
|
+
input.useApiKey = state.useApiKey;
|
|
249
|
+
}
|
|
250
|
+
if (apiKey) input.apiKey = apiKey;
|
|
220
251
|
const providerSelection = {
|
|
221
252
|
type: selectedProviderType(),
|
|
222
253
|
providerId: input.providerId,
|
|
254
|
+
newProviderId: input.newProviderId,
|
|
223
255
|
};
|
|
224
256
|
let saved = false;
|
|
225
257
|
try {
|
|
@@ -247,7 +279,14 @@ export function createEmbeddingSetupStep({
|
|
|
247
279
|
function input(field, value) {
|
|
248
280
|
if (state.busy) return;
|
|
249
281
|
if (field === "embedding-model") state.model = value;
|
|
250
|
-
if (field === "embedding-url")
|
|
282
|
+
if (field === "embedding-url") {
|
|
283
|
+
if (state.baseUrl !== value) state.useApiKey = false;
|
|
284
|
+
state.baseUrl = value;
|
|
285
|
+
}
|
|
286
|
+
if (field === "embedding-connection-id") {
|
|
287
|
+
if (state.newProviderId !== value) state.useApiKey = false;
|
|
288
|
+
state.newProviderId = value;
|
|
289
|
+
}
|
|
251
290
|
const action = container.querySelector(
|
|
252
291
|
'.runtime-setup-action[type="submit"]',
|
|
253
292
|
);
|
|
@@ -258,6 +297,11 @@ export function createEmbeddingSetupStep({
|
|
|
258
297
|
if (state.busy || field !== "embedding-provider") return;
|
|
259
298
|
clearSecret();
|
|
260
299
|
state.provider = value;
|
|
300
|
+
state.useApiKey = false;
|
|
301
|
+
if (value.startsWith("new:"))
|
|
302
|
+
state.baseUrl = defaultSetupProviderAddress(selectedProviderType());
|
|
303
|
+
if (value === "new:llamacpp")
|
|
304
|
+
state.newProviderId = suggestEmbeddingConnectionId(state.providers);
|
|
261
305
|
state.models = [];
|
|
262
306
|
state.message = "";
|
|
263
307
|
state.error = "";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ModelReasoningBudget } from "../../../../shared/model-reasoning.js";
|
|
2
|
+
export type SetupReasoningState = {
|
|
3
|
+
provider?: string;
|
|
4
|
+
providerType?: string;
|
|
5
|
+
supportsThinking?: boolean;
|
|
6
|
+
reasoningBudgetMode?: string;
|
|
7
|
+
reasoningBudgetTokens?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function setupReasoningState(model?: { supportsThinking?: boolean; reasoningBudget?: ModelReasoningBudget }): SetupReasoningState;
|
|
10
|
+
export declare function updateSetupReasoningField(state: SetupReasoningState, field: string, value: string | boolean): boolean;
|
|
11
|
+
export declare function renderSetupReasoningFields(state: SetupReasoningState, readonly?: boolean): string;
|
|
12
|
+
export declare function validateSetupReasoningFields(state: SetupReasoningState): {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
input?: { supportsThinking?: boolean; reasoningBudget?: ModelReasoningBudget };
|
|
15
|
+
field?: string;
|
|
16
|
+
message?: string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { escapeAttribute } from "../../lib/text-format.js";
|
|
2
|
+
|
|
3
|
+
export function setupReasoningState(model = {}) {
|
|
4
|
+
return {
|
|
5
|
+
supportsThinking: model.supportsThinking,
|
|
6
|
+
reasoningBudgetMode: model.reasoningBudget?.mode || "inherit",
|
|
7
|
+
reasoningBudgetTokens: model.reasoningBudget?.tokens?.toString() || "",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function updateSetupReasoningField(state, field, value) {
|
|
12
|
+
if (field === "supports-thinking") state.supportsThinking = value === true;
|
|
13
|
+
if (field === "reasoning-budget-mode") state.reasoningBudgetMode = value;
|
|
14
|
+
if (field === "reasoning-budget-tokens") state.reasoningBudgetTokens = value;
|
|
15
|
+
return ["supports-thinking", "reasoning-budget-mode"].includes(field);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function renderSetupReasoningFields(state, readonly = false) {
|
|
19
|
+
const hasTokenBudget = (state.providerType || state.provider) === "llamacpp";
|
|
20
|
+
const disabled = readonly ? "disabled" : "";
|
|
21
|
+
const mode = state.reasoningBudgetMode || "inherit";
|
|
22
|
+
const supportsThinking = state.supportsThinking === true;
|
|
23
|
+
return `<label class="runtime-setup-field runtime-setup-reasoning-toggle"><span class="runtime-setup-reasoning-toggle-label"><input type="checkbox" data-runtime-setup-field="supports-thinking" ${supportsThinking ? "checked" : ""} ${disabled} /> This model supports thinking</span><small>Enable only for a model and chat template that support reasoning. Connection readiness does not verify this.</small></label>
|
|
24
|
+
${supportsThinking && hasTokenBudget ? `<label class="runtime-setup-field"><span>Default thinking budget</span><select data-runtime-setup-field="reasoning-budget-mode" ${disabled}>
|
|
25
|
+
<option value="inherit" ${mode === "inherit" ? "selected" : ""}>Inherit (no override)</option>
|
|
26
|
+
<option value="server-default" ${mode === "server-default" ? "selected" : ""}>Server default</option>
|
|
27
|
+
<option value="tokens" ${mode === "tokens" ? "selected" : ""}>Token limit</option>
|
|
28
|
+
</select><small>Applies to each reasoning segment. It is not a time limit or a total request budget.</small></label>
|
|
29
|
+
${mode === "tokens" ? `<label class="runtime-setup-field"><span>Thinking tokens</span><input type="number" min="0" max="2147483647" step="1" data-runtime-setup-field="reasoning-budget-tokens" value="${escapeAttribute(state.reasoningBudgetTokens ?? "")}" ${disabled} required /><small>Zero disables thinking. The server forces the reasoning segment to close at a positive limit; the answer still needs output capacity.</small></label>` : ""}` : ""}`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function isSetupReasoningTokenBudget(state, mode, tokens) {
|
|
33
|
+
if (mode !== "tokens") return false;
|
|
34
|
+
if (String(state.reasoningBudgetTokens ?? "").trim() === "") return false;
|
|
35
|
+
if (!Number.isSafeInteger(tokens)) return false;
|
|
36
|
+
if (tokens < 0) return false;
|
|
37
|
+
return tokens <= 2147483647;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function validateSetupReasoningFields(state) {
|
|
41
|
+
if (state.providerType !== "llamacpp")
|
|
42
|
+
return { valid: true, input: state.supportsThinking === undefined ? {} : { supportsThinking: state.supportsThinking === true } };
|
|
43
|
+
const supportsThinking = state.supportsThinking === true;
|
|
44
|
+
const input = { supportsThinking };
|
|
45
|
+
if (!supportsThinking) return { valid: true, input };
|
|
46
|
+
const mode = state.reasoningBudgetMode || "inherit";
|
|
47
|
+
if (mode === "inherit") return { valid: true, input };
|
|
48
|
+
if (mode === "server-default")
|
|
49
|
+
return { valid: true, input: { ...input, reasoningBudget: { mode } } };
|
|
50
|
+
const tokens = Number(state.reasoningBudgetTokens);
|
|
51
|
+
if (!isSetupReasoningTokenBudget(state, mode, tokens))
|
|
52
|
+
return { valid: false, field: "reasoning-budget-tokens", message: "Enter a whole number of thinking tokens from 0 to 2147483647; 0 disables thinking." };
|
|
53
|
+
return { valid: true, input: { ...input, reasoningBudget: { mode, tokens } } };
|
|
54
|
+
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { textOf } from "../../lib/text-format.js";
|
|
2
2
|
|
|
3
|
-
const PROVIDERS = new Set(["ollama", "openai"]);
|
|
3
|
+
const PROVIDERS = new Set(["ollama", "openai", "llamacpp"]);
|
|
4
4
|
const SAFE_MODEL_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_@+.:/=-]*$/;
|
|
5
5
|
const SAFE_ORIGIN_HOST_PATTERN =
|
|
6
6
|
/^(?:\[[0-9A-Fa-f:.]+\]|[A-Za-z0-9._-]+)(?::[0-9]+)?$/;
|
|
7
7
|
export const DEFAULT_OLLAMA_BASE_URL = "http://127.0.0.1:11434";
|
|
8
|
+
export const DEFAULT_LLAMACPP_BASE_URL = "http://127.0.0.1:8080";
|
|
9
|
+
export function defaultSetupProviderAddress(provider) {
|
|
10
|
+
return provider === "llamacpp" ? DEFAULT_LLAMACPP_BASE_URL : DEFAULT_OLLAMA_BASE_URL;
|
|
11
|
+
}
|
|
8
12
|
|
|
9
13
|
export function normalizeProvider(value) {
|
|
10
14
|
const provider = textOf(value).trim().toLowerCase();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ModelReasoningBudget } from "../../../shared/model-reasoning.js";
|
|
1
2
|
import type { SetupEmbeddingInput } from "../../local-runtime/setup-embedding-input.js";
|
|
2
3
|
|
|
3
4
|
export type RuntimeSetupValidation = Readonly<{
|
|
@@ -12,7 +13,7 @@ export type RuntimeSetupCommands = Readonly<{
|
|
|
12
13
|
"web-ui": string;
|
|
13
14
|
}>;
|
|
14
15
|
export type RuntimeSetupProvider = Readonly<{
|
|
15
|
-
id: "openai" | "ollama";
|
|
16
|
+
id: "openai" | "ollama" | "llamacpp";
|
|
16
17
|
label: string;
|
|
17
18
|
requiresApiKey: boolean;
|
|
18
19
|
credentialConfigured: boolean;
|
|
@@ -26,16 +27,20 @@ export type RuntimeSetupSnapshot = Readonly<{
|
|
|
26
27
|
defaultContextWindowTokens: number;
|
|
27
28
|
editableConnection?: { revision: string };
|
|
28
29
|
existingModel?: {
|
|
29
|
-
provider: "openai" | "ollama";
|
|
30
|
+
provider: "openai" | "ollama" | "llamacpp";
|
|
30
31
|
model: string;
|
|
31
32
|
contextWindowTokens?: number;
|
|
33
|
+
supportsThinking?: boolean;
|
|
34
|
+
reasoningBudget?: ModelReasoningBudget;
|
|
32
35
|
baseUrl?: string;
|
|
33
36
|
};
|
|
34
37
|
}>;
|
|
35
38
|
export type RuntimeSetupInput = {
|
|
36
|
-
provider: "openai" | "ollama";
|
|
39
|
+
provider: "openai" | "ollama" | "llamacpp";
|
|
37
40
|
model: string;
|
|
38
41
|
contextWindowTokens?: number;
|
|
42
|
+
supportsThinking?: boolean;
|
|
43
|
+
reasoningBudget?: ModelReasoningBudget;
|
|
39
44
|
baseUrl?: string;
|
|
40
45
|
apiKey?: string;
|
|
41
46
|
deferActivation?: boolean;
|
|
@@ -49,6 +54,7 @@ export type RuntimeSetupResponse = {
|
|
|
49
54
|
export interface RuntimeSetupGuideDependencies {
|
|
50
55
|
readonly container: HTMLElement;
|
|
51
56
|
readonly conversationRegion: HTMLElement;
|
|
57
|
+
readonly inspectConnection?: (input: Record<string, unknown>) => Promise<{ connection: { models: readonly string[] } }>;
|
|
52
58
|
readonly loadSetup: () => Promise<{ setup: RuntimeSetupSnapshot }>;
|
|
53
59
|
readonly applySetup: () => Promise<{
|
|
54
60
|
activation: RuntimeSetupResponse["activation"];
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { runtimeSetupConnectionInput } from "./runtime-setup/connection-input.js";
|
|
2
|
+
import { createConnectionInspection } from "./runtime-setup/connection-inspection.js";
|
|
3
|
+
import { setupReasoningState } from "./runtime-setup/reasoning-fields.js";
|
|
1
4
|
import { textOf } from "../lib/text-format.js";
|
|
2
5
|
import { renderRuntimeSetup } from "./runtime-setup/rendering.js";
|
|
3
6
|
import { createSetupOptionalSteps } from "./runtime-setup/optional-steps.js";
|
|
@@ -20,7 +23,6 @@ import {
|
|
|
20
23
|
import {
|
|
21
24
|
clearConnectionSecret,
|
|
22
25
|
readConnectionSecret,
|
|
23
|
-
validateConnectionFields,
|
|
24
26
|
showConnectionFieldError,
|
|
25
27
|
} from "./runtime-setup/connection-form.js";
|
|
26
28
|
import {
|
|
@@ -42,6 +44,7 @@ export function createRuntimeSetupGuide({
|
|
|
42
44
|
container,
|
|
43
45
|
conversationRegion,
|
|
44
46
|
loadSetup,
|
|
47
|
+
inspectConnection,
|
|
45
48
|
saveSetup,
|
|
46
49
|
applySetup,
|
|
47
50
|
loadEmbeddingStatus,
|
|
@@ -60,6 +63,7 @@ export function createRuntimeSetupGuide({
|
|
|
60
63
|
openConfiguration = () => {},
|
|
61
64
|
}) {
|
|
62
65
|
const state = {
|
|
66
|
+
...setupReasoningState(),
|
|
63
67
|
providers: [],
|
|
64
68
|
provider: "",
|
|
65
69
|
modelId: "",
|
|
@@ -84,6 +88,7 @@ export function createRuntimeSetupGuide({
|
|
|
84
88
|
let onCheckAgain = () => {};
|
|
85
89
|
let onApplied = () => {};
|
|
86
90
|
const viewState = createSetupViewState(container);
|
|
91
|
+
const connectionInspection = createConnectionInspection({ state, container, inspectConnection, onChange: paint, getEnvironmentId });
|
|
87
92
|
const optionalSteps = createSetupOptionalSteps({
|
|
88
93
|
container, getEnvironmentId, getPreferredProvider: () => state.provider,
|
|
89
94
|
loadEmbeddingStatus, discoverEmbeddingModels, saveEmbedding, loadPlugins,
|
|
@@ -106,13 +111,15 @@ export function createRuntimeSetupGuide({
|
|
|
106
111
|
}
|
|
107
112
|
|
|
108
113
|
function reset() {
|
|
114
|
+
connectionInspection.reset();
|
|
109
115
|
clearSetupContextWindowFeedback(state, container);
|
|
110
116
|
revision += 1;
|
|
111
117
|
optionalSteps.reset();
|
|
112
118
|
viewState.reset();
|
|
113
119
|
clearSecret();
|
|
114
120
|
Object.assign(state, {
|
|
115
|
-
|
|
121
|
+
...setupReasoningState(),
|
|
122
|
+
providers: [],
|
|
116
123
|
provider: "",
|
|
117
124
|
modelId: "",
|
|
118
125
|
contextWindowTokens: "",
|
|
@@ -196,31 +203,7 @@ export function createRuntimeSetupGuide({
|
|
|
196
203
|
showConnectionFieldError(container, field);
|
|
197
204
|
}
|
|
198
205
|
|
|
199
|
-
|
|
200
|
-
const result = validateConnectionFields({
|
|
201
|
-
modelId: state.modelId,
|
|
202
|
-
contextWindowTokens: state.contextWindowTokens,
|
|
203
|
-
providerType: state.provider,
|
|
204
|
-
baseUrl: state.baseUrl,
|
|
205
|
-
});
|
|
206
|
-
if (!result.valid) {
|
|
207
|
-
fieldError(result.field, result.message);
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
const input = { provider: state.provider, ...result.input };
|
|
211
|
-
if (state.editableConnection?.revision)
|
|
212
|
-
input.connectionRevision = state.editableConnection.revision;
|
|
213
|
-
if (state.provider === "ollama") return input;
|
|
214
|
-
const apiKey = readConnectionSecret(container);
|
|
215
|
-
const provider = state.providers.find(
|
|
216
|
-
(entry) => entry.id === state.provider,
|
|
217
|
-
);
|
|
218
|
-
if (provider?.credentialConfigured !== true && !apiKey) {
|
|
219
|
-
fieldError("api-key", "Enter your OpenAI API key.");
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
return apiKey ? { ...input, apiKey } : input;
|
|
223
|
-
}
|
|
206
|
+
const connectionInput = () => runtimeSetupConnectionInput(state, container, fieldError);
|
|
224
207
|
|
|
225
208
|
async function submitConnection() {
|
|
226
209
|
const input = connectionInput();
|
|
@@ -307,6 +290,7 @@ export function createRuntimeSetupGuide({
|
|
|
307
290
|
function controlsAreBusy() {
|
|
308
291
|
if (requiresConfigurationRecovery(availability)) return true;
|
|
309
292
|
if (
|
|
293
|
+
state.checkingConnection ||
|
|
310
294
|
state.loading ||
|
|
311
295
|
state.saving ||
|
|
312
296
|
state.applying ||
|
|
@@ -354,6 +338,7 @@ export function createRuntimeSetupGuide({
|
|
|
354
338
|
return;
|
|
355
339
|
}
|
|
356
340
|
if (!action || controlsAreBusy()) return;
|
|
341
|
+
if (action === "inspect-model-connection" && state.step === 1) { void connectionInspection.check(); return; }
|
|
357
342
|
const setupWasApplied =
|
|
358
343
|
state.finishAttempted && state.activation?.status === "ready";
|
|
359
344
|
if (setupWasApplied && action !== "check") return;
|
|
@@ -404,11 +389,17 @@ export function createRuntimeSetupGuide({
|
|
|
404
389
|
}
|
|
405
390
|
clearSetupContextWindowFeedback(state, container);
|
|
406
391
|
field.removeAttribute?.("aria-invalid");
|
|
407
|
-
updateSetupConnectionField(
|
|
392
|
+
const rerender = updateSetupConnectionField(
|
|
408
393
|
state,
|
|
409
394
|
field.dataset.runtimeSetupField,
|
|
410
|
-
textOf(field.value),
|
|
395
|
+
field.type === "checkbox" ? field.checked : textOf(field.value),
|
|
411
396
|
);
|
|
397
|
+
if (rerender) {
|
|
398
|
+
const key = readConnectionSecret(container);
|
|
399
|
+
paint();
|
|
400
|
+
const input = container.querySelector('[data-runtime-setup-field="api-key"]');
|
|
401
|
+
if (input) input.value = key;
|
|
402
|
+
}
|
|
412
403
|
const action = container.querySelector(
|
|
413
404
|
'.runtime-setup-action[type="submit"]',
|
|
414
405
|
);
|
|
@@ -34,7 +34,7 @@ function runMarkup(run) {
|
|
|
34
34
|
return `<article class="schedule-run" data-run-id="${escapeHtml(run.id)}">
|
|
35
35
|
<div class="schedule-run-heading"><strong>${scheduleTimeLabel(run.scheduledAt, timeZone)}</strong><span class="schedule-badge" data-state="${escapeHtml(run.status)}">${escapeHtml(run.status)}</span></div>
|
|
36
36
|
<div class="schedule-run-meta">${run.trigger === "manual" ? "Manual run" : "Scheduled run"}${run.startedAt ? ` · Started ${scheduleTimeLabel(run.startedAt, timeZone)}` : ""}${run.finishedAt ? ` · Finished ${scheduleTimeLabel(run.finishedAt, timeZone)}` : ""}</div>
|
|
37
|
-
<dl class="schedule-run-settings">${fact("Model", run.modelProfileId)}${fact("Mode", displayReasoningMode(run.agentMode))}${fact("Tool access", toolPermissionModeMeta(run.toolPermissionMode).label)}${fact("Time zone", run.timeZone)}${fact("Job revision", String(run.jobRevision ?? "—"))}</dl>
|
|
37
|
+
<dl class="schedule-run-settings">${fact("Model", run.modelProfileId)}${fact("Mode", displayReasoningMode(run.agentMode, run.reasoningPreference))}${fact("Tool access", toolPermissionModeMeta(run.toolPermissionMode).label)}${fact("Time zone", run.timeZone)}${fact("Job revision", String(run.jobRevision ?? "—"))}</dl>
|
|
38
38
|
${run.error ? `<p class="schedule-error" dir="auto">${escapeHtml(run.error)}</p>` : ""}
|
|
39
39
|
${run.resultText ? `<details class="schedule-result" data-disclosure-id="result:${escapeHtml(run.id)}"><summary>View result</summary><pre dir="auto">${escapeHtml(run.resultText)}</pre></details>` : ""}
|
|
40
40
|
<details class="schedule-prompt-disclosure" data-disclosure-id="run:${escapeHtml(run.id)}"><summary>View invocation prompt</summary><pre dir="auto">${escapeHtml(run.prompt)}</pre></details>
|
|
@@ -68,7 +68,7 @@ export function renderScheduleDetails({ root, snapshot, actions }) {
|
|
|
68
68
|
const conversationLabel = scheduleConversationLabel(job.sessionId, snapshot.sessions);
|
|
69
69
|
const markup = `<div class="schedule-detail-heading"><span class="schedule-eyebrow">Scheduled task</span><h3 dir="auto">${escapeHtml(job.title)}</h3><span class="schedule-badge" data-state="${job.state}">${job.state}</span></div>
|
|
70
70
|
<div class="schedule-action-row">${actionsMarkup(job, snapshot.mutation)}</div>
|
|
71
|
-
<dl class="schedule-facts">${fact("Schedule", scheduleDescription(job))}${fact("Next run", scheduleTimeLabel(job.nextRunAt, job.timeZone))}${fact("Time zone", job.timeZone)}${fact("Model", job.modelProfileId)}${fact("Mode", displayReasoningMode(job.agentMode))}${fact("Tool access", toolPermissionModeMeta(job.toolPermissionMode).label)}${fact("Created", scheduleTimeLabel(job.createdAt, job.timeZone))}${fact("Updated", scheduleTimeLabel(job.updatedAt, job.timeZone))}</dl>
|
|
71
|
+
<dl class="schedule-facts">${fact("Schedule", scheduleDescription(job))}${fact("Next run", scheduleTimeLabel(job.nextRunAt, job.timeZone))}${fact("Time zone", job.timeZone)}${fact("Model", job.modelProfileId)}${fact("Mode", displayReasoningMode(job.agentMode, job.reasoningPreference))}${fact("Tool access", toolPermissionModeMeta(job.toolPermissionMode).label)}${fact("Created", scheduleTimeLabel(job.createdAt, job.timeZone))}${fact("Updated", scheduleTimeLabel(job.updatedAt, job.timeZone))}</dl>
|
|
72
72
|
<button type="button" class="schedule-conversation-link" data-open-conversation>↗ <span dir="auto">${escapeHtml(conversationLabel)}</span></button>
|
|
73
73
|
<details class="schedule-prompt-disclosure" data-disclosure-id="job:${escapeHtml(job.id)}"><summary>View task prompt</summary><pre dir="auto">${escapeHtml(job.prompt)}</pre></details>
|
|
74
74
|
<small class="schedule-id">Job ${escapeHtml(job.id)} · Revision ${job.revision}</small>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readReasoningPreferenceField } from "../../lib/reasoning-preference.js";
|
|
2
|
+
import { clearReasoningOffForMode, renderReasoningModeField, syncReasoningModeField, retainedReasoningMode } from "../../lib/reasoning-controls.js";
|
|
2
3
|
import { escapeHtml } from "../../lib/text-format.js";
|
|
3
4
|
import { SCHEDULE_WEEKDAYS } from "../../lib/schedule-presentation.js";
|
|
4
5
|
import { scheduleErrorMessage } from "../../lib/schedule-errors.js";
|
|
@@ -89,7 +90,7 @@ export function createScheduleForm({
|
|
|
89
90
|
<label>Task prompt<textarea name="prompt" rows="5" required dir="auto" placeholder="What should ABot do when this schedule runs?">${escapeHtml(values.prompt || "")}</textarea></label>
|
|
90
91
|
<div class="schedule-form-grid">${scheduleFields(values)}</div>
|
|
91
92
|
<div class="schedule-form-grid"><label>Model<select name="modelProfileId" required><option value="">Choose a model</option>${options(modelOptions, values.modelProfileId)}</select></label>
|
|
92
|
-
${renderReasoningModeField(values.agentMode || "reasoning", models.find((model) => model.id === values.modelProfileId), modes.filter((mode) => mode !== "auto"))}</div>
|
|
93
|
+
${renderReasoningModeField(values.agentMode || "reasoning", models.find((model) => model.id === values.modelProfileId), modes.filter((mode) => mode !== "auto"), values.reasoningPreference)}</div>
|
|
93
94
|
<label>Tool access<select name="toolPermissionMode">${options(
|
|
94
95
|
[
|
|
95
96
|
{ value: "full_access", label: "Full" },
|
|
@@ -112,12 +113,18 @@ export function createScheduleForm({
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
const readInput = () => {
|
|
116
|
+
const readInput = (initial = false) => {
|
|
116
117
|
const data = new FormData(form);
|
|
117
118
|
data.set("agentMode", retainedReasoningMode(form, values.agentMode || "reasoning"));
|
|
118
|
-
|
|
119
|
+
const input = scheduleFormInput(data, job?.schedule);
|
|
120
|
+
const preference = initial ? values.reasoningPreference : readReasoningPreferenceField(form);
|
|
121
|
+
if (preference) input.reasoningPreference = preference;
|
|
122
|
+
else if (job?.reasoningPreference) input.reasoningPreference = null;
|
|
123
|
+
return input;
|
|
119
124
|
};
|
|
120
125
|
fields.namedItem("modelProfileId").addEventListener("change", () => syncReasoningModeField(form, models, modes.filter((mode) => mode !== "auto")));
|
|
126
|
+
form.querySelector("[data-reasoning-mode]")?.addEventListener("change", () => clearReasoningOffForMode(form, models, modes.filter((mode) => mode !== "auto")));
|
|
127
|
+
form.querySelector("[data-reasoning-preference-mode]")?.addEventListener("change", () => syncReasoningModeField(form, models, modes.filter((mode) => mode !== "auto")));
|
|
121
128
|
let initialInput;
|
|
122
129
|
form.querySelector("[data-cancel]").addEventListener("click", onCancel);
|
|
123
130
|
fields.namedItem("kind").addEventListener("change", syncKind);
|
|
@@ -139,7 +146,7 @@ export function createScheduleForm({
|
|
|
139
146
|
}
|
|
140
147
|
});
|
|
141
148
|
syncKind();
|
|
142
|
-
if (job) initialInput = readInput();
|
|
149
|
+
if (job) initialInput = readInput(true);
|
|
143
150
|
const initialFields = JSON.stringify([...new FormData(form)]);
|
|
144
151
|
function trackScheduleDraft() {
|
|
145
152
|
form.dataset.dirty = String(
|