@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,3 +1,4 @@
|
|
|
1
|
+
import { confirmDialog } from "../confirmation-dialog.js";
|
|
1
2
|
import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
|
|
2
3
|
import {
|
|
3
4
|
readMemoryEditorInput,
|
|
@@ -12,7 +13,8 @@ import {
|
|
|
12
13
|
|
|
13
14
|
export function createLongTermMemoryManager({
|
|
14
15
|
actions,
|
|
15
|
-
|
|
16
|
+
getEnvironmentId = () => "",
|
|
17
|
+
confirmDelete = (message) => confirmDialog(message, { title: "Delete memory", confirmLabel: "Delete memory", tone: "danger" }),
|
|
16
18
|
}) {
|
|
17
19
|
let root = null;
|
|
18
20
|
let view = null;
|
|
@@ -59,7 +61,7 @@ export function createLongTermMemoryManager({
|
|
|
59
61
|
void actions.setOriginFilter(view.originFilter ? "" : "passive_observation");
|
|
60
62
|
if (action === "previous-page") void actions.changePage(-1);
|
|
61
63
|
if (action === "next-page") void actions.changePage(1);
|
|
62
|
-
if (action === "delete") confirmAndDelete(recordId);
|
|
64
|
+
if (action === "delete") void confirmAndDelete(recordId);
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
function handleSubmit(event) {
|
|
@@ -79,11 +81,19 @@ export function createLongTermMemoryManager({
|
|
|
79
81
|
actions.cancelEdit();
|
|
80
82
|
}
|
|
81
83
|
|
|
82
|
-
function confirmAndDelete(recordId) {
|
|
84
|
+
async function confirmAndDelete(recordId) {
|
|
83
85
|
const record = view?.items.find((item) => item.id === recordId);
|
|
84
86
|
if (!record) return;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
const environmentId = getEnvironmentId();
|
|
88
|
+
const targetRoot = root;
|
|
89
|
+
const updatedAt = record.updatedAt;
|
|
90
|
+
if (!await confirmDelete(buildMemoryDeleteConfirmation(record))) return;
|
|
91
|
+
if (environmentId !== getEnvironmentId() || root !== targetRoot) return;
|
|
92
|
+
const snapshot = actions.snapshot();
|
|
93
|
+
if (snapshot.mutation || snapshot.loading) return;
|
|
94
|
+
const current = snapshot.items.find((item) => item.id === recordId);
|
|
95
|
+
if (current !== record || current.updatedAt !== updatedAt) return;
|
|
96
|
+
await actions.deleteMemory(record.id);
|
|
87
97
|
}
|
|
88
98
|
|
|
89
99
|
function toggleMemoryContent(button) {
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
|
|
2
|
+
|
|
3
|
+
export function savedEmbeddingProfiles(status) {
|
|
4
|
+
return Array.isArray(status?.embeddingProfiles) ? status.embeddingProfiles : [];
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function selectedEmbeddingProfile(state) {
|
|
8
|
+
return savedEmbeddingProfiles(state.status).find((profile) => profile.id === state.selectedProfileId);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function hasSavedEmbeddingProvider(state, profile) {
|
|
12
|
+
return state.status?.providers?.some((provider) => provider.id === profile.providerId) === true;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function hasUnavailableSelectedEmbeddingProfile(state) {
|
|
16
|
+
const profile = selectedEmbeddingProfile(state);
|
|
17
|
+
if (!profile) return false;
|
|
18
|
+
return !hasSavedEmbeddingProvider(state, profile);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function matchingSelectedEmbeddingProfile(state, providerId, model) {
|
|
22
|
+
const profile = selectedEmbeddingProfile(state);
|
|
23
|
+
if (profile?.providerId !== providerId) return undefined;
|
|
24
|
+
if (profile.model !== model) return undefined;
|
|
25
|
+
return profile;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function isConfiguredEmbeddingProfile(state, profileId) {
|
|
29
|
+
return state.status?.profileId === profileId;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function renderProfileCard(state, profile, canRemove) {
|
|
33
|
+
const selected = profile.id === state.selectedProfileId;
|
|
34
|
+
const configured = isConfiguredEmbeddingProfile(state, profile.id);
|
|
35
|
+
const available = hasSavedEmbeddingProvider(state, profile);
|
|
36
|
+
const confirming = state.removingProfileId === profile.id;
|
|
37
|
+
const provider = state.status?.providers?.find((entry) => entry.id === profile.providerId);
|
|
38
|
+
const badge = configured ? '<span class="embedding-profile-badge">Configured for memory</span>' : "";
|
|
39
|
+
const remove = canRemove ? `<button type="button" class="embedding-profile-remove"
|
|
40
|
+
data-memory-remove-profile="${escapeAttribute(profile.id)}"
|
|
41
|
+
aria-label="Remove ${escapeAttribute(profile.label)}"
|
|
42
|
+
${state.busy || configured ? "disabled" : ""}
|
|
43
|
+
title="${configured ? "Choose another memory profile before removing this one." : "Remove this saved profile"}">Remove</button>` : "";
|
|
44
|
+
const confirmation = confirming ? `<div class="embedding-profile-confirm" role="group" aria-label="Confirm profile removal">
|
|
45
|
+
<p>Remove this saved profile? Stored memories and the connection will stay.</p>
|
|
46
|
+
<button type="button" data-memory-confirm-remove="${escapeAttribute(profile.id)}" ${state.busy ? "disabled" : ""}>Remove profile</button>
|
|
47
|
+
<button type="button" data-memory-cancel-remove ${state.busy ? "disabled" : ""}>Cancel</button>
|
|
48
|
+
</div>` : "";
|
|
49
|
+
return `<article class="embedding-profile-card ${selected ? "selected" : ""}">
|
|
50
|
+
<button type="button" class="embedding-profile-select"
|
|
51
|
+
data-memory-saved-profile="${escapeAttribute(profile.id)}" aria-pressed="${selected}"
|
|
52
|
+
${state.busy || !available ? "disabled" : ""}>
|
|
53
|
+
<span class="embedding-profile-top"><span class="embedding-profile-provider">${escapeHtml(provider?.type || profile.providerId)}</span>${badge}</span>
|
|
54
|
+
<strong>${escapeHtml(profile.label)}</strong>
|
|
55
|
+
<span class="embedding-profile-model">${escapeHtml(profile.model)}</span>
|
|
56
|
+
<span class="embedding-profile-connection">Connection · ${escapeHtml(profile.providerId)}</span>
|
|
57
|
+
${!available ? '<span class="embedding-profile-unavailable">Connection unavailable</span>' : ""}
|
|
58
|
+
</button>
|
|
59
|
+
<div class="embedding-profile-footer"><span>${selected ? "Selected" : "Saved profile"}</span>${remove}</div>
|
|
60
|
+
${confirmation}
|
|
61
|
+
</article>`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function renderSavedEmbeddingProfiles(state, canRemove) {
|
|
65
|
+
const profiles = savedEmbeddingProfiles(state.status);
|
|
66
|
+
return `<section class="embedding-profiles" aria-label="Saved embedding profiles">
|
|
67
|
+
<div class="embedding-profiles-heading"><div><h5>Embedding profiles</h5>
|
|
68
|
+
<p>Save a model and connection, then select it for memory.</p></div>
|
|
69
|
+
<button type="button" data-memory-new-profile ${state.busy ? "disabled" : ""}>+ New profile</button>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="embedding-profile-grid">${profiles.map((profile) => renderProfileCard(state, profile, canRemove)).join("")}</div>
|
|
72
|
+
${profiles.length ? "" : '<p class="embedding-profile-empty">No saved profiles yet. Create your first one below.</p>'}
|
|
73
|
+
</section>`;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function bindSavedEmbeddingProfiles({ state, onSelected, onRemove, onChange }) {
|
|
77
|
+
state.root.querySelectorAll("[data-memory-saved-profile]").forEach((button) => {
|
|
78
|
+
button.addEventListener("click", () => {
|
|
79
|
+
if (state.busy) return;
|
|
80
|
+
const profile = savedEmbeddingProfiles(state.status).find((entry) => entry.id === button.dataset.memorySavedProfile);
|
|
81
|
+
if (!profile || !hasSavedEmbeddingProvider(state, profile)) return;
|
|
82
|
+
state.selectedProfileId = profile.id;
|
|
83
|
+
state.profileLabel = profile.label;
|
|
84
|
+
state.removingProfileId = "";
|
|
85
|
+
onSelected();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
state.root.querySelector("[data-memory-new-profile]")?.addEventListener("click", () => {
|
|
89
|
+
if (state.busy) return;
|
|
90
|
+
state.selectedProfileId = "";
|
|
91
|
+
state.profileLabel = "";
|
|
92
|
+
state.removingProfileId = "";
|
|
93
|
+
onSelected();
|
|
94
|
+
});
|
|
95
|
+
state.root.querySelector("[data-memory-profile-label]")?.addEventListener?.("input", (event) => {
|
|
96
|
+
state.profileLabel = event.target.value;
|
|
97
|
+
});
|
|
98
|
+
state.root.querySelectorAll("[data-memory-remove-profile]").forEach((button) => {
|
|
99
|
+
button.addEventListener("click", () => {
|
|
100
|
+
if (state.busy || isConfiguredEmbeddingProfile(state, button.dataset.memoryRemoveProfile)) return;
|
|
101
|
+
state.removingProfileId = button.dataset.memoryRemoveProfile;
|
|
102
|
+
onChange();
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
state.root.querySelector("[data-memory-cancel-remove]")?.addEventListener("click", () => {
|
|
106
|
+
if (state.busy) return;
|
|
107
|
+
state.removingProfileId = "";
|
|
108
|
+
onChange();
|
|
109
|
+
});
|
|
110
|
+
const confirm = state.root.querySelector("[data-memory-confirm-remove]");
|
|
111
|
+
confirm?.addEventListener("click", () => {
|
|
112
|
+
void onRemove(confirm.dataset.memoryConfirmRemove);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { escapeAttribute, escapeHtml, textOf } from "../../lib/text-format.js";
|
|
2
|
+
import { renderSavedEmbeddingProfiles, selectedEmbeddingProfile } from "./saved-embedding-profiles.js";
|
|
3
|
+
|
|
4
|
+
export function renderMemorySetup({ state, selectedProvider, selectedModel, canSave, canRemove, canAddConnection, emitClientEvents }) {
|
|
5
|
+
const status = state.status || {};
|
|
6
|
+
const providers = Array.isArray(status.providers) ? status.providers : [];
|
|
7
|
+
const enabled = status.enabled === true;
|
|
8
|
+
const profile = selectedEmbeddingProfile(state);
|
|
9
|
+
const savedSelection = canSave && Boolean(profile);
|
|
10
|
+
const fieldsDisabled = state.busy || savedSelection ? "disabled" : "";
|
|
11
|
+
const busy = state.busy ? "disabled" : "";
|
|
12
|
+
const activation = canSave && !profile ? "" : `<button type="button" class="primary-button" data-memory-action="enable" ${busy}>${state.busy === "enable" ? "Testing connection…" : "Test & enable memory"}</button>`;
|
|
13
|
+
return `<section class="memory-setup-card" aria-busy="${Boolean(state.busy)}">
|
|
14
|
+
<div class="memory-setup-heading">
|
|
15
|
+
<div><p class="eyebrow">passive memory</p><h4>Long-term memory</h4>
|
|
16
|
+
<p>Choose the embedding model used to find relevant memories across conversations.</p></div>
|
|
17
|
+
<span class="memory-status ${enabled ? "enabled" : "disabled"}">${enabled ? "Enabled" : "Disabled"}</span>
|
|
18
|
+
</div>
|
|
19
|
+
${canSave ? renderSavedEmbeddingProfiles(state, canRemove) : ""}
|
|
20
|
+
<section class="embedding-profile-editor" aria-label="${savedSelection ? "Selected profile" : "New embedding profile"}">
|
|
21
|
+
<div class="embedding-editor-heading"><h5>${savedSelection ? "Selected profile" : "New embedding profile"}</h5>
|
|
22
|
+
<p>${savedSelection ? "Test the connection and save this profile as the memory configuration. Apply the configuration separately to use it." : "Save a reusable profile first. Saving does not enable memory or contact the provider."}</p>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="memory-setup-fields">
|
|
25
|
+
${canSave ? `<label class="embedding-profile-name"><span>Profile name</span><input data-memory-profile-label value="${escapeAttribute(state.profileLabel)}" placeholder="For example: Qwen · local server" ${fieldsDisabled} /></label>` : ""}
|
|
26
|
+
<label><span>Connection</span><select data-memory-provider ${fieldsDisabled}>${providerOptions(providers, selectedProvider)}</select></label>
|
|
27
|
+
<label><span>Embedding model</span><input data-memory-model list="memoryEmbeddingModels" value="${escapeAttribute(selectedModel)}" placeholder="For example: text-embedding-3-small" ${fieldsDisabled} />
|
|
28
|
+
<datalist id="memoryEmbeddingModels">${state.models.map((model) => `<option value="${escapeAttribute(textOf(model))}"></option>`).join("")}</datalist></label>
|
|
29
|
+
${savedSelection || !canSave ? `<label class="memory-events-toggle"><input data-memory-events type="checkbox" ${emitClientEvents ? "checked" : ""} ${busy} /><span>Show memory activity in conversations</span></label>` : ""}
|
|
30
|
+
</div>
|
|
31
|
+
<div class="memory-setup-actions">
|
|
32
|
+
${!savedSelection && canSave ? `<button type="button" class="primary-button" data-memory-action="save-profile" ${busy}>${state.busy === "save-profile" ? "Saving…" : "Save profile"}</button>` : ""}
|
|
33
|
+
${activation}
|
|
34
|
+
${!savedSelection ? `<button type="button" data-memory-action="discover" ${busy}>Discover models</button>` : ""}
|
|
35
|
+
${canAddConnection ? `<button type="button" data-memory-action="add-connection" ${busy}>Add connection</button>` : ""}
|
|
36
|
+
${enabled ? `<button type="button" data-memory-action="disable" ${busy}>Disable memory</button>` : ""}
|
|
37
|
+
</div>
|
|
38
|
+
</section>
|
|
39
|
+
${feedbackMarkup(state)}
|
|
40
|
+
</section>`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function providerOptions(providers, selectedProvider) {
|
|
44
|
+
const options = providers.map((provider) => `<option value="${escapeAttribute(provider.id)}" ${provider.id === selectedProvider ? "selected" : ""}>${escapeHtml(provider.id)} · ${escapeHtml(provider.type)}</option>`);
|
|
45
|
+
if (!providers.some((provider) => provider.id === selectedProvider)) {
|
|
46
|
+
options.unshift(`<option value="${escapeAttribute(selectedProvider)}" selected>${escapeHtml(selectedProvider || "Choose a connection")}${selectedProvider ? " (unavailable)" : ""}</option>`);
|
|
47
|
+
}
|
|
48
|
+
return options.join("");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function feedbackMarkup(state) {
|
|
52
|
+
if (state.error) return `<p class="memory-setup-feedback error-text" role="alert">${escapeHtml(state.error)}</p>`;
|
|
53
|
+
if (state.message) return `<p class="memory-setup-feedback" role="status">${escapeHtml(state.message)}</p>`;
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
bindSavedEmbeddingProfiles,
|
|
3
|
+
matchingSelectedEmbeddingProfile,
|
|
4
|
+
hasUnavailableSelectedEmbeddingProfile,
|
|
5
|
+
isConfiguredEmbeddingProfile,
|
|
6
|
+
savedEmbeddingProfiles,
|
|
7
|
+
selectedEmbeddingProfile,
|
|
8
|
+
} from "./long-term-memory/saved-embedding-profiles.js";
|
|
9
|
+
import { renderMemorySetup } from "./long-term-memory/setup-rendering.js";
|
|
10
|
+
import { textOf } from "../lib/text-format.js";
|
|
2
11
|
|
|
3
12
|
export function createLongTermMemorySetup({
|
|
4
13
|
getEnvironmentId = () => "",
|
|
5
14
|
loadStatus,
|
|
6
15
|
discoverModels,
|
|
7
16
|
enableMemory,
|
|
17
|
+
saveProfile,
|
|
18
|
+
removeProfile,
|
|
8
19
|
disableMemory,
|
|
9
20
|
recordControlEvent,
|
|
10
21
|
beginRuntimeMutation = () => true,
|
|
11
22
|
refreshRuntimeConfig = async () => true,
|
|
12
23
|
endRuntimeMutation = () => {},
|
|
24
|
+
onAddConnection,
|
|
25
|
+
onEnvironmentChanged = () => {},
|
|
13
26
|
}) {
|
|
14
27
|
const state = {
|
|
15
28
|
root: null,
|
|
16
29
|
status: null,
|
|
30
|
+
selectedProfileId: "",
|
|
31
|
+
removingProfileId: "",
|
|
32
|
+
profileLabel: "",
|
|
17
33
|
models: [],
|
|
18
34
|
discoverySupported: false,
|
|
19
35
|
busy: "",
|
|
@@ -29,20 +45,25 @@ export function createLongTermMemorySetup({
|
|
|
29
45
|
render();
|
|
30
46
|
}
|
|
31
47
|
|
|
32
|
-
async function load() {
|
|
48
|
+
async function load(options = {}) {
|
|
33
49
|
const revision = ++state.loadRevision;
|
|
34
50
|
state.actionRevision += 1;
|
|
35
51
|
const environmentId = getEnvironmentId();
|
|
36
52
|
const environmentChanged = state.environmentId !== environmentId;
|
|
37
53
|
if (environmentChanged) {
|
|
54
|
+
onEnvironmentChanged();
|
|
38
55
|
state.environmentId = environmentId;
|
|
39
56
|
state.status = null;
|
|
57
|
+
state.selectedProfileId = "";
|
|
58
|
+
state.removingProfileId = "";
|
|
59
|
+
state.profileLabel = "";
|
|
40
60
|
state.models = [];
|
|
41
61
|
state.discoverySupported = false;
|
|
42
62
|
}
|
|
43
63
|
state.busy = "status";
|
|
44
64
|
clearFeedback();
|
|
45
|
-
|
|
65
|
+
const preserveInputs = !environmentChanged && options.preserveInputs !== false;
|
|
66
|
+
render({ preserveInputs });
|
|
46
67
|
try {
|
|
47
68
|
const payload = await loadStatus(environmentId);
|
|
48
69
|
if (
|
|
@@ -51,7 +72,12 @@ export function createLongTermMemorySetup({
|
|
|
51
72
|
) {
|
|
52
73
|
return false;
|
|
53
74
|
}
|
|
75
|
+
const hadStatus = Boolean(state.status);
|
|
54
76
|
state.status = payload.status || null;
|
|
77
|
+
if (!preserveInputs || !hadStatus) {
|
|
78
|
+
state.selectedProfileId = state.status?.profileId || "";
|
|
79
|
+
state.profileLabel = selectedEmbeddingProfile(state)?.label || "";
|
|
80
|
+
}
|
|
55
81
|
return true;
|
|
56
82
|
} catch (error) {
|
|
57
83
|
if (
|
|
@@ -68,7 +94,7 @@ export function createLongTermMemorySetup({
|
|
|
68
94
|
environmentId === getEnvironmentId()
|
|
69
95
|
) {
|
|
70
96
|
state.busy = "";
|
|
71
|
-
render();
|
|
97
|
+
render({ preserveInputs });
|
|
72
98
|
}
|
|
73
99
|
}
|
|
74
100
|
}
|
|
@@ -93,6 +119,15 @@ export function createLongTermMemorySetup({
|
|
|
93
119
|
}
|
|
94
120
|
|
|
95
121
|
async function enable() {
|
|
122
|
+
if (state.busy) return;
|
|
123
|
+
if (saveProfile && !selectedEmbeddingProfile(state)) {
|
|
124
|
+
showError("Save the profile before testing and enabling memory.");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (hasUnavailableSelectedEmbeddingProfile(state)) {
|
|
128
|
+
showError("This saved profile's provider is unavailable. Choose an available profile or connection.");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
96
131
|
const providerId = selectedProviderId();
|
|
97
132
|
const model = textOf(
|
|
98
133
|
state.root?.querySelector("[data-memory-model]")?.value,
|
|
@@ -111,18 +146,50 @@ export function createLongTermMemorySetup({
|
|
|
111
146
|
providerId,
|
|
112
147
|
model,
|
|
113
148
|
emitClientEvents,
|
|
149
|
+
...(matchingSelectedEmbeddingProfile(state, providerId, model)
|
|
150
|
+
? { profileId: state.selectedProfileId }
|
|
151
|
+
: {}),
|
|
114
152
|
},
|
|
115
153
|
environmentId,
|
|
116
154
|
),
|
|
117
155
|
(payload) => {
|
|
118
156
|
state.status = payload.status || null;
|
|
157
|
+
state.selectedProfileId = state.status?.profileId || state.selectedProfileId;
|
|
119
158
|
state.message =
|
|
120
|
-
"
|
|
159
|
+
"Connection test passed. Memory configuration saved. Apply the configuration to use it.";
|
|
121
160
|
recordResult("Long-term memory enabled", payload);
|
|
122
161
|
},
|
|
123
162
|
);
|
|
124
163
|
}
|
|
125
164
|
|
|
165
|
+
async function saveEmbeddingProfile() {
|
|
166
|
+
if (!saveProfile || state.busy || selectedEmbeddingProfile(state)) return;
|
|
167
|
+
if (hasUnavailableSelectedEmbeddingProfile(state)) {
|
|
168
|
+
showError("This saved profile's provider is unavailable. Choose an available profile or connection.");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const providerId = selectedProviderId();
|
|
172
|
+
const model = currentModelValue();
|
|
173
|
+
const label = state.profileLabel.trim();
|
|
174
|
+
if (!providerId || !model || !label) {
|
|
175
|
+
showError("Choose a provider, enter a model ID and give the profile a name.");
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
await runRuntimeMutation(
|
|
179
|
+
"save-profile",
|
|
180
|
+
(environmentId) => saveProfile({ providerId, model, label }, environmentId),
|
|
181
|
+
(payload) => {
|
|
182
|
+
state.status = payload.status || null;
|
|
183
|
+
state.selectedProfileId = payload.profileId || "";
|
|
184
|
+
state.profileLabel = selectedEmbeddingProfile(state)?.label || label;
|
|
185
|
+
state.message = "Embedding profile saved. The active memory configuration has not changed.";
|
|
186
|
+
recordControlEvent({
|
|
187
|
+
type: "control", name: "Embedding profile saved", tone: "done", summary: label,
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
126
193
|
async function disable() {
|
|
127
194
|
await runRuntimeMutation(
|
|
128
195
|
"disable",
|
|
@@ -135,6 +202,19 @@ export function createLongTermMemorySetup({
|
|
|
135
202
|
);
|
|
136
203
|
}
|
|
137
204
|
|
|
205
|
+
async function addConnection() {
|
|
206
|
+
if (state.busy || !onAddConnection) return;
|
|
207
|
+
try {
|
|
208
|
+
await onAddConnection({
|
|
209
|
+
emitClientEvents:
|
|
210
|
+
state.root?.querySelector("[data-memory-events]")?.checked === true,
|
|
211
|
+
...(state.status?.profileId ? { profileId: state.status.profileId } : {}),
|
|
212
|
+
});
|
|
213
|
+
} catch {
|
|
214
|
+
showError("Embedding connection setup could not be opened. Try again.");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
138
218
|
async function runRuntimeMutation(name, request, applyResult) {
|
|
139
219
|
if (!beginRuntimeMutation()) {
|
|
140
220
|
showError(
|
|
@@ -198,67 +278,73 @@ export function createLongTermMemorySetup({
|
|
|
198
278
|
function render(options = {}) {
|
|
199
279
|
if (!state.root) return;
|
|
200
280
|
const status = state.status || {};
|
|
201
|
-
const
|
|
281
|
+
const profile = selectedEmbeddingProfile(state);
|
|
202
282
|
const preserveInputs = options.preserveInputs !== false;
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const selectedModel =
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
<span>Embedding model</span>
|
|
230
|
-
<input data-memory-model list="memoryEmbeddingModels" value="${escapeAttribute(selectedModel)}" placeholder="Enter a provider model ID" ${state.busy ? "disabled" : ""} />
|
|
231
|
-
<datalist id="memoryEmbeddingModels">${state.models
|
|
232
|
-
.map(
|
|
233
|
-
(model) =>
|
|
234
|
-
`<option value="${escapeAttribute(textOf(model))}"></option>`,
|
|
235
|
-
)
|
|
236
|
-
.join("")}</datalist>
|
|
237
|
-
</label>
|
|
238
|
-
<label class="memory-events-toggle">
|
|
239
|
-
<input data-memory-events type="checkbox" ${status.emitClientEvents === true ? "checked" : ""} ${state.busy ? "disabled" : ""} />
|
|
240
|
-
<span>Show bounded memory lifecycle events to clients</span>
|
|
241
|
-
</label>
|
|
242
|
-
</div>
|
|
243
|
-
<div class="memory-setup-actions">
|
|
244
|
-
<button type="button" data-memory-action="discover" ${state.busy ? "disabled" : ""}>Discover models</button>
|
|
245
|
-
<button type="button" data-memory-action="enable" ${state.busy ? "disabled" : ""}>Probe and enable</button>
|
|
246
|
-
<button type="button" data-memory-action="disable" ${!enabled || state.busy ? "disabled" : ""}>Disable</button>
|
|
247
|
-
</div>
|
|
248
|
-
${feedbackMarkup()}
|
|
249
|
-
<p class="memory-setup-note">ABot never chooses or installs an embedding model. Configuration is written only after a real probe succeeds.</p>
|
|
250
|
-
</section>
|
|
251
|
-
`;
|
|
283
|
+
const defaultProvider = profile?.providerId || status.providerId || status.providers?.[0]?.id || "";
|
|
284
|
+
const defaultModel = profile?.model || (saveProfile ? "" : status.model || "");
|
|
285
|
+
const selectedProvider = preserveInputs && !profile
|
|
286
|
+
? state.root.querySelector("[data-memory-provider]")?.value ?? defaultProvider
|
|
287
|
+
: defaultProvider;
|
|
288
|
+
const selectedModel = preserveInputs && !profile
|
|
289
|
+
? state.root.querySelector("[data-memory-model]")?.value ?? defaultModel
|
|
290
|
+
: defaultModel;
|
|
291
|
+
const emitClientEvents = preserveInputs
|
|
292
|
+
? state.root.querySelector("[data-memory-events]")?.checked ?? status.emitClientEvents === true
|
|
293
|
+
: status.emitClientEvents === true;
|
|
294
|
+
state.root.innerHTML = renderMemorySetup({
|
|
295
|
+
state, selectedProvider, selectedModel, emitClientEvents,
|
|
296
|
+
canSave: Boolean(saveProfile), canRemove: Boolean(removeProfile),
|
|
297
|
+
canAddConnection: Boolean(onAddConnection),
|
|
298
|
+
});
|
|
299
|
+
bindSavedEmbeddingProfiles({
|
|
300
|
+
state,
|
|
301
|
+
onSelected: () => {
|
|
302
|
+
state.models = [];
|
|
303
|
+
clearFeedback();
|
|
304
|
+
render({ preserveInputs: false });
|
|
305
|
+
},
|
|
306
|
+
onChange: render,
|
|
307
|
+
onRemove: removeEmbeddingProfile,
|
|
308
|
+
});
|
|
252
309
|
bindActions();
|
|
253
310
|
}
|
|
254
311
|
|
|
312
|
+
async function removeEmbeddingProfile(profileId) {
|
|
313
|
+
if (!removeProfile || state.busy) return;
|
|
314
|
+
if (isConfiguredEmbeddingProfile(state, profileId)) {
|
|
315
|
+
showError("Choose another memory profile before removing this one.");
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const profile = savedEmbeddingProfiles(state.status).find((entry) => entry.id === profileId);
|
|
319
|
+
if (!profile || state.removingProfileId !== profileId) return;
|
|
320
|
+
await runRuntimeMutation(
|
|
321
|
+
"remove-profile",
|
|
322
|
+
(environmentId) => removeProfile({ profileId }, environmentId),
|
|
323
|
+
(payload) => {
|
|
324
|
+
state.status = payload.status || null;
|
|
325
|
+
state.removingProfileId = "";
|
|
326
|
+
if (state.selectedProfileId === profileId) {
|
|
327
|
+
state.selectedProfileId = state.status?.profileId || "";
|
|
328
|
+
state.profileLabel = selectedEmbeddingProfile(state)?.label || "";
|
|
329
|
+
render({ preserveInputs: false });
|
|
330
|
+
}
|
|
331
|
+
state.message = "Profile removed. Stored memories and connections are unchanged.";
|
|
332
|
+
recordControlEvent({
|
|
333
|
+
type: "control", name: "Embedding profile removed", tone: "done", summary: profile.label,
|
|
334
|
+
});
|
|
335
|
+
},
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
255
339
|
function bindActions() {
|
|
256
340
|
state.root.querySelectorAll("[data-memory-action]").forEach((button) => {
|
|
257
341
|
button.addEventListener("click", () => {
|
|
258
342
|
const action = button.dataset.memoryAction;
|
|
259
343
|
if (action === "discover") void discover();
|
|
260
344
|
else if (action === "enable") void enable();
|
|
345
|
+
else if (action === "save-profile") void saveEmbeddingProfile();
|
|
261
346
|
else if (action === "disable") void disable();
|
|
347
|
+
else if (action === "add-connection") void addConnection();
|
|
262
348
|
});
|
|
263
349
|
});
|
|
264
350
|
}
|
|
@@ -294,15 +380,6 @@ export function createLongTermMemorySetup({
|
|
|
294
380
|
: "The provider returned no installed models.";
|
|
295
381
|
}
|
|
296
382
|
|
|
297
|
-
function feedbackMarkup() {
|
|
298
|
-
if (state.error) {
|
|
299
|
-
return `<p class="memory-setup-feedback error-text" role="alert">${escapeHtml(state.error)}</p>`;
|
|
300
|
-
}
|
|
301
|
-
return state.message
|
|
302
|
-
? `<p class="memory-setup-feedback" role="status">${escapeHtml(state.message)}</p>`
|
|
303
|
-
: "";
|
|
304
|
-
}
|
|
305
|
-
|
|
306
383
|
function recordResult(name, payload) {
|
|
307
384
|
recordControlEvent({
|
|
308
385
|
type: "control",
|
|
@@ -317,18 +394,6 @@ export function createLongTermMemorySetup({
|
|
|
317
394
|
return { load, mount };
|
|
318
395
|
}
|
|
319
396
|
|
|
320
|
-
function providerOptions(providers, selectedProvider) {
|
|
321
|
-
if (providers.length === 0) {
|
|
322
|
-
return '<option value="">No configured providers</option>';
|
|
323
|
-
}
|
|
324
|
-
return providers
|
|
325
|
-
.map((provider) => {
|
|
326
|
-
const selected = provider.id === selectedProvider ? "selected" : "";
|
|
327
|
-
return `<option value="${escapeAttribute(provider.id)}" ${selected}>${escapeHtml(provider.id)} · ${escapeHtml(provider.type)}</option>`;
|
|
328
|
-
})
|
|
329
|
-
.join("");
|
|
330
|
-
}
|
|
331
|
-
|
|
332
397
|
function errorMessage(error) {
|
|
333
398
|
return error instanceof Error ? error.message : String(error);
|
|
334
399
|
}
|
|
@@ -34,6 +34,7 @@ export function renderModelProviderChoices(state) {
|
|
|
34
34
|
description: `${provider.id} · ${provider.type} · existing connection`,
|
|
35
35
|
}));
|
|
36
36
|
providers.push(
|
|
37
|
+
{ id: "new:llamacpp", label: "New llama.cpp connection", description: "A separately running server with token reasoning controls" },
|
|
37
38
|
{
|
|
38
39
|
id: "new:openai",
|
|
39
40
|
label: "New OpenAI connection",
|
|
@@ -50,9 +51,9 @@ export function renderModelProviderChoices(state) {
|
|
|
50
51
|
|
|
51
52
|
export function renderModelFields(state) {
|
|
52
53
|
const provider = selectedModelProvider(state);
|
|
53
|
-
const credentialConfigured =
|
|
54
|
+
const credentialConfigured = provider?.credentialConfigured === true || state.credentialSavedFor === (provider?.id || state.newProviderId);
|
|
54
55
|
return `${!provider ? renderConnectionField({ field: "connection-id", label: "Connection ID", value: state.newProviderId, idPrefix: MODEL_SETUP_ID, help: "A unique name for this provider connection." }) : `<p class="runtime-setup-feedback">Using ${escapeHtml(provider.label || provider.id)} · ${escapeHtml(provider.id)}</p>`}
|
|
55
|
-
${renderConnectionFields({ providers: [{ id: state.choice, credentialConfigured }], provider: state.choice, providerType: modelProviderType(state), existingProvider: Boolean(provider), allowCredentialReplacement: false, modelId: state.model, contextWindowTokens: state.contextWindowTokens, baseUrl: state.baseUrl, idPrefix: MODEL_SETUP_ID })}
|
|
56
|
+
${renderConnectionFields({ ...state, providers: [{ id: state.choice, credentialConfigured, requiresApiKey: requiresModelCredential(state) }], provider: state.choice, providerType: modelProviderType(state), existingProvider: Boolean(provider), allowCredentialReplacement: false, modelId: state.model, contextWindowTokens: state.contextWindowTokens, baseUrl: state.baseUrl, idPrefix: MODEL_SETUP_ID })}
|
|
56
57
|
${renderConnectionField({ field: "profile-id", label: "Model profile ID", value: state.profileId, idPrefix: MODEL_SETUP_ID, placeholder: "Suggested from the model ID", help: "A unique name for this model in ABot. Existing model defaults will stay the same." })}`;
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -40,7 +40,7 @@ function validIdentifier(value, provider) {
|
|
|
40
40
|
|
|
41
41
|
export function validateModelDraft(state) {
|
|
42
42
|
const provider = selectedModelProvider(state);
|
|
43
|
-
if (!provider && !["new:openai", "new:ollama"].includes(state.choice))
|
|
43
|
+
if (!provider && !["new:openai", "new:ollama", "new:llamacpp"].includes(state.choice))
|
|
44
44
|
return { valid: false, field: "provider", message: "Choose a provider." };
|
|
45
45
|
if (!provider && !validIdentifier(state.newProviderId, true))
|
|
46
46
|
return {
|
|
@@ -66,6 +66,7 @@ export function validateModelDraft(state) {
|
|
|
66
66
|
message: "Use a model ID of up to 256 characters.",
|
|
67
67
|
};
|
|
68
68
|
const connection = validateConnectionFields({
|
|
69
|
+
...state,
|
|
69
70
|
modelId: state.model,
|
|
70
71
|
contextWindowTokens: state.contextWindowTokens,
|
|
71
72
|
providerType: modelProviderType(state),
|
|
@@ -94,7 +95,7 @@ export function requiresModelCredential(state) {
|
|
|
94
95
|
const configured =
|
|
95
96
|
provider?.credentialConfigured === true ||
|
|
96
97
|
state.credentialSavedFor === (provider?.id || state.newProviderId);
|
|
97
|
-
return modelProviderType(state) === "openai" && !configured;
|
|
98
|
+
return (modelProviderType(state) === "openai" || provider?.requiresApiKey === true) && !configured;
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
export function requiresModelSaveCredential(state) {
|
|
@@ -110,6 +111,7 @@ export function modelSetupInput(state, validated, apiKey) {
|
|
|
110
111
|
newProvider: {
|
|
111
112
|
id: state.newProviderId,
|
|
112
113
|
type: modelProviderType(state),
|
|
114
|
+
...(modelProviderType(state) === "llamacpp" && (apiKey || state.credentialSavedFor === state.newProviderId) ? { useApiKey: true } : {}),
|
|
113
115
|
...(validated.input.baseUrl
|
|
114
116
|
? { baseUrl: validated.input.baseUrl }
|
|
115
117
|
: {}),
|
|
@@ -119,6 +121,8 @@ export function modelSetupInput(state, validated, apiKey) {
|
|
|
119
121
|
profileId: state.profileId,
|
|
120
122
|
model: validated.input.model,
|
|
121
123
|
contextWindowTokens: validated.input.contextWindowTokens,
|
|
124
|
+
...(validated.input.supportsThinking !== undefined ? { supportsThinking: validated.input.supportsThinking } : {}),
|
|
125
|
+
...(validated.input.reasoningBudget ? { reasoningBudget: validated.input.reasoningBudget } : {}),
|
|
122
126
|
...connection,
|
|
123
127
|
...(apiKey ? { apiKey } : {}),
|
|
124
128
|
};
|
|
@@ -16,6 +16,7 @@ export type ModelSetupProvider = Readonly<{
|
|
|
16
16
|
export interface ModelSetupWizardDependencies {
|
|
17
17
|
root: HTMLElement;
|
|
18
18
|
getEnvironmentId?: () => string;
|
|
19
|
+
inspectConnection?: (input: Record<string, unknown>) => Promise<{ connection: { models: readonly string[] } }>;
|
|
19
20
|
loadSetup: () => Promise<{
|
|
20
21
|
providers: readonly ModelSetupProvider[];
|
|
21
22
|
profileIds: readonly string[];
|