@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,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
effectiveReasoningBudgetEffort,
|
|
3
|
+
isTokenBudgetModel,
|
|
4
|
+
reasoningBudgetStatusText,
|
|
5
|
+
} from "./reasoning-budget.js";
|
|
6
|
+
|
|
7
|
+
function isReasoningGenerationPath(path) {
|
|
8
|
+
if (!Array.isArray(path)) return false;
|
|
9
|
+
if (path.length === 1) return path[0] === "generation";
|
|
10
|
+
if (path.length !== 3) return false;
|
|
11
|
+
return path[0] === "calibration" && typeof path[1] === "string" &&
|
|
12
|
+
path[2] === "generation";
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function budgetEditGenerationPath(path) {
|
|
16
|
+
const budgetIndex = path.lastIndexOf("reasoningBudget");
|
|
17
|
+
if (budgetIndex < 0) return undefined;
|
|
18
|
+
const generation = path.slice(0, budgetIndex);
|
|
19
|
+
return isReasoningGenerationPath(generation) ? generation : undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function reasoningStatusGenerationPath(element) {
|
|
23
|
+
try {
|
|
24
|
+
const path = JSON.parse(element.dataset.reasoningGenerationPath);
|
|
25
|
+
return isReasoningGenerationPath(path) ? path : undefined;
|
|
26
|
+
} catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function generationCalibration(file, path) {
|
|
32
|
+
if (path[0] !== "calibration") return undefined;
|
|
33
|
+
return file.config.calibration?.[path[1]];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function hasPositiveReasoningTokenLimit(value) {
|
|
37
|
+
if (!Number.isInteger(value)) return false;
|
|
38
|
+
if (value <= 0) return false;
|
|
39
|
+
return value <= 2147483647;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function budgetModeEnablesThinking(value) {
|
|
43
|
+
if (value?.mode === "server-default") return true;
|
|
44
|
+
if (value?.mode !== "tokens") return false;
|
|
45
|
+
return hasPositiveReasoningTokenLimit(value.tokens);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function explicitlyEnablesBudget(path, value) {
|
|
49
|
+
if (path.at(-1) === "reasoningBudget")
|
|
50
|
+
return budgetModeEnablesThinking(value);
|
|
51
|
+
if (path.at(-1) !== "tokens" || path.at(-2) !== "reasoningBudget")
|
|
52
|
+
return false;
|
|
53
|
+
return hasPositiveReasoningTokenLimit(value);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** A form budget action enables only the edited generation scope. */
|
|
57
|
+
export function activateEditedReasoningBudget(
|
|
58
|
+
file,
|
|
59
|
+
dashboard,
|
|
60
|
+
path,
|
|
61
|
+
value,
|
|
62
|
+
setConfigPathValue,
|
|
63
|
+
) {
|
|
64
|
+
if (file.kind !== "model" || !explicitlyEnablesBudget(path, value))
|
|
65
|
+
return undefined;
|
|
66
|
+
const generationPath = budgetEditGenerationPath(path);
|
|
67
|
+
if (!generationPath) return undefined;
|
|
68
|
+
const calibration = generationCalibration(file, generationPath);
|
|
69
|
+
if (!isTokenBudgetModel(file, dashboard, calibration)) return undefined;
|
|
70
|
+
const effort = effectiveReasoningBudgetEffort(
|
|
71
|
+
file,
|
|
72
|
+
dashboard,
|
|
73
|
+
generationPath,
|
|
74
|
+
);
|
|
75
|
+
if (effort !== undefined && effort !== "none") return undefined;
|
|
76
|
+
setConfigPathValue(
|
|
77
|
+
file.config,
|
|
78
|
+
[...generationPath, "reasoningEffort"],
|
|
79
|
+
"medium",
|
|
80
|
+
);
|
|
81
|
+
return generationPath;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function matchesReasoningControl(element, file) {
|
|
85
|
+
return element.dataset.kind === file.kind && element.dataset.id === file.id;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Numeric input keeps focus while the coupled select and status update. */
|
|
89
|
+
export function syncActivatedReasoningBudget(
|
|
90
|
+
root,
|
|
91
|
+
file,
|
|
92
|
+
dashboard,
|
|
93
|
+
generationPath,
|
|
94
|
+
) {
|
|
95
|
+
const effortPath = JSON.stringify([...generationPath, "reasoningEffort"]);
|
|
96
|
+
for (const element of root.querySelectorAll(
|
|
97
|
+
'select[data-config-action="field"]',
|
|
98
|
+
)) {
|
|
99
|
+
if (!matchesReasoningControl(element, file)) continue;
|
|
100
|
+
if (element.dataset.path !== effortPath) continue;
|
|
101
|
+
element.value = "medium";
|
|
102
|
+
}
|
|
103
|
+
for (const element of root.querySelectorAll(
|
|
104
|
+
"[data-reasoning-generation-path]",
|
|
105
|
+
)) {
|
|
106
|
+
if (!matchesReasoningControl(element, file)) continue;
|
|
107
|
+
const statusPath = reasoningStatusGenerationPath(element);
|
|
108
|
+
if (!statusPath) continue;
|
|
109
|
+
const calibration = generationCalibration(file, statusPath);
|
|
110
|
+
if (!isTokenBudgetModel(file, dashboard, calibration)) continue;
|
|
111
|
+
element.textContent = reasoningBudgetStatusText(file, dashboard, statusPath);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function isTokenBudgetModel(file: { id?: string; config?: Record<string, unknown> }, dashboard: unknown, calibration?: { profileId?: string }): boolean;
|
|
2
|
+
export declare function shouldRefreshReasoningBudgetFields(
|
|
3
|
+
file: { kind: string },
|
|
4
|
+
path: string[],
|
|
5
|
+
valueType?: string,
|
|
6
|
+
): boolean;
|
|
7
|
+
export declare function parseReasoningBudgetMode(value: string, previous?: { mode: string; tokens?: number }): { mode: string; tokens?: number } | undefined;
|
|
8
|
+
export declare function renderReasoningBudget(
|
|
9
|
+
file: { kind: string; id: string; config: Record<string, unknown> },
|
|
10
|
+
generationPath: string[],
|
|
11
|
+
renderConfigInput: (...args: unknown[]) => string,
|
|
12
|
+
options?: { supported?: boolean; dashboard?: unknown },
|
|
13
|
+
): string;
|
|
14
|
+
export declare function effectiveReasoningBudgetEffort(file: { config: Record<string, any> }, dashboard: unknown, generationPath: string[]): string | undefined;
|
|
15
|
+
export declare function reasoningBudgetStatusText(file: { config: Record<string, any> }, dashboard: unknown, generationPath: string[]): string;
|
|
16
|
+
export declare function renderReasoningEffort(file: { config: Record<string, any> }, generationPath: string[], renderConfigInput: (...args: unknown[]) => string): string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { escapeAttribute } from "../../lib/text-format.js";
|
|
2
|
+
|
|
3
|
+
function reasoningBudgetTarget(file, dashboard, calibration) {
|
|
4
|
+
const targetId = calibration?.profileId;
|
|
5
|
+
return targetId && targetId !== file.id
|
|
6
|
+
? dashboard?.files?.models?.find((model) => model.id === targetId)
|
|
7
|
+
: file;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isTokenBudgetModel(file, dashboard, calibration) {
|
|
11
|
+
const target = reasoningBudgetTarget(file, dashboard, calibration);
|
|
12
|
+
if (target?.config?.supportsThinking !== true) return false;
|
|
13
|
+
const providerId = target.config.provider;
|
|
14
|
+
return dashboard?.files?.runtime?.config?.models?.providers?.[providerId]?.type === "llamacpp";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function shouldRefreshReasoningBudgetFields(file, path, valueType) {
|
|
18
|
+
if (valueType === "reasoning-budget-mode") return true;
|
|
19
|
+
if (valueType === "reasoning-mode-budgets") return true;
|
|
20
|
+
if (file.kind !== "model") return false;
|
|
21
|
+
if (path.at(-1) === "reasoningEffort") return true;
|
|
22
|
+
if (path.length !== 1) return false;
|
|
23
|
+
return path[0] === "supportsThinking" || path[0] === "provider";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function parseReasoningBudgetMode(value, previous) {
|
|
27
|
+
if (value === "inherit") return undefined;
|
|
28
|
+
if (value === "server-default") return { mode: "server-default" };
|
|
29
|
+
return { mode: "tokens", tokens: previous?.mode === "tokens" ? previous.tokens : 0 };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function effectiveReasoningBudgetEffort(file, dashboard, generationPath) {
|
|
33
|
+
const generation = generationPath.reduce((value, key) => value?.[key], file.config);
|
|
34
|
+
if (generation?.reasoningEffort !== undefined) return generation.reasoningEffort;
|
|
35
|
+
if (generationPath[0] !== "calibration") return undefined;
|
|
36
|
+
const calibration = file.config?.calibration?.[generationPath[1]];
|
|
37
|
+
return reasoningBudgetTarget(file, dashboard, calibration)?.config?.generation?.reasoningEffort;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function reasoningBudgetStatusText(file, dashboard, generationPath) {
|
|
41
|
+
const budget = generationPath.reduce((value, key) => value?.[key], file.config)?.reasoningBudget;
|
|
42
|
+
const savedBudgetIsOff = budget !== undefined &&
|
|
43
|
+
effectiveReasoningBudgetEffort(file, dashboard, generationPath) === "none";
|
|
44
|
+
if (savedBudgetIsOff)
|
|
45
|
+
return "Inactive while reasoning is Off. Choose a positive token limit or Server default to enable thinking.";
|
|
46
|
+
return "Per reasoning segment. Zero disables thinking; a positive budget enables it. Off keeps the saved budget inactive.";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function renderReasoningEffort(file, generationPath, renderConfigInput) {
|
|
50
|
+
return `<label><span>Reasoning effort</span>${renderConfigInput(file, [...generationPath, "reasoningEffort"], {
|
|
51
|
+
type: "select", values: ["", "none", "minimal", "low", "medium", "high", "xhigh"],
|
|
52
|
+
})}<small>Default inherits the profile or request mode. None disables thinking unless a mode token limit or request setting enables it.</small></label>`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function renderReasoningBudget(file, generationPath, renderConfigInput, { supported = true, dashboard } = {}) {
|
|
56
|
+
const budget = generationPath.reduce((value, key) => value?.[key], file.config)?.reasoningBudget;
|
|
57
|
+
if (!supported && budget === undefined) return "";
|
|
58
|
+
const path = [...generationPath, "reasoningBudget"];
|
|
59
|
+
const mode = budget?.mode || "inherit";
|
|
60
|
+
const attributes = `data-config-action="field" data-kind="${escapeAttribute(file.kind)}" data-id="${escapeAttribute(file.id)}" data-path="${escapeAttribute(JSON.stringify(path))}" data-value-type="reasoning-budget-mode"`;
|
|
61
|
+
return `<label><span>Thinking budget</span><select ${attributes}>
|
|
62
|
+
<option value="inherit" ${mode === "inherit" ? "selected" : ""}>Inherit (no override)</option>
|
|
63
|
+
${supported ? `<option value="server-default" ${mode === "server-default" ? "selected" : ""}>Server default</option>
|
|
64
|
+
<option value="tokens" ${mode === "tokens" ? "selected" : ""}>Token limit</option>` : `<option value="${escapeAttribute(mode)}" selected disabled>Saved override (unsupported target)</option>`}
|
|
65
|
+
</select><small data-reasoning-generation-path="${escapeAttribute(JSON.stringify(generationPath))}" data-kind="${escapeAttribute(file.kind)}" data-id="${escapeAttribute(file.id)}">${supported ? reasoningBudgetStatusText(file, dashboard, generationPath) : "This target does not support token budgets. Choose Inherit to remove this override."}</small></label>
|
|
66
|
+
${supported && mode === "tokens" ? `<label><span>Thinking tokens</span>${renderConfigInput(file, [...path, "tokens"], { type: "number", min: "0", step: "1" })}<small>Enter a non-negative whole number; 0 disables thinking. The answer also needs capacity within the total output limit.</small></label>` : ""}`;
|
|
67
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function parseReasoningModeBudgets(value: string, previous?: Record<string, number>): Record<string, number> | undefined;
|
|
2
|
+
export declare function renderReasoningModeBudgets(
|
|
3
|
+
file: { kind: string; id: string; config: Record<string, any> },
|
|
4
|
+
generationPath: string[],
|
|
5
|
+
renderConfigInput: (...args: any[]) => string,
|
|
6
|
+
options?: { supported?: boolean },
|
|
7
|
+
): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { escapeAttribute } from "../../lib/text-format.js";
|
|
2
|
+
|
|
3
|
+
const REASONING_MODES = [["fast", "Low"], ["reasoning", "Reasoning"], ["deep", "Deep"]];
|
|
4
|
+
|
|
5
|
+
export function parseReasoningModeBudgets(value, previous) {
|
|
6
|
+
if (value === "inherit") return undefined;
|
|
7
|
+
return previous ?? {};
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function renderReasoningModeBudgets(file, generationPath, renderConfigInput, { supported = true } = {}) {
|
|
11
|
+
const generation = generationPath.reduce((value, key) => value?.[key], file.config);
|
|
12
|
+
const budgets = generation?.reasoningBudgetByMode;
|
|
13
|
+
if (!supported && budgets === undefined) return "";
|
|
14
|
+
const path = [...generationPath, "reasoningBudgetByMode"];
|
|
15
|
+
const custom = budgets !== undefined;
|
|
16
|
+
const attributes = `data-config-action="field" data-kind="${escapeAttribute(file.kind)}" data-id="${escapeAttribute(file.id)}" data-path="${escapeAttribute(JSON.stringify(path))}" data-value-type="reasoning-mode-budgets"`;
|
|
17
|
+
const selector = `<label><span>Mode token overrides</span><select ${attributes}>
|
|
18
|
+
<option value="inherit" ${custom ? "" : "selected"}>Inherit (no override)</option>
|
|
19
|
+
${supported ? `<option value="custom" ${custom ? "selected" : ""}>Custom limits by mode</option>` : '<option value="custom" selected disabled>Saved override (unsupported target)</option>'}
|
|
20
|
+
</select><small>${supported
|
|
21
|
+
? "Optional limits for main model steps. A custom map replaces inherited mode limits; blank entries use the ordinary effort and budget settings."
|
|
22
|
+
: "This target does not support token budgets. Choose Inherit to remove this override."}</small></label>`;
|
|
23
|
+
if (!supported || !custom) return selector;
|
|
24
|
+
return selector + REASONING_MODES.map(([mode, label]) => `<label><span>${label} thinking tokens</span>${renderConfigInput(file, [...path, mode], { type: "number", min: "0", step: "1" })}<small>Optional non-negative integer. Zero disables thinking; positive values enable it for this mode, including Low. Explicit request or invocation Off still wins.</small></label>`).join("");
|
|
25
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { activateEditedReasoningBudget, syncActivatedReasoningBudget } from "./reasoning-budget-edit.js";
|
|
2
|
+
import { shouldRefreshReasoningBudgetFields } from "./reasoning-budget.js";
|
|
1
3
|
import { rememberCalibrationDisclosure } from "./calibration-disclosure.js";
|
|
2
4
|
import { textOf } from "../../lib/text-format.js";
|
|
3
5
|
import { resolveModelExecutionRoute } from "./config-model.js";
|
|
@@ -72,10 +74,17 @@ export function createConfigWorkspaceEvents({
|
|
|
72
74
|
action === "step-value"
|
|
73
75
|
? element.value
|
|
74
76
|
: parseConfigInputValue(element, file, path);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
let activatedGeneration;
|
|
78
|
+
mutateConfigFile(element.dataset.kind, element.dataset.id, (config) => {
|
|
79
|
+
applyConfigFieldValue(config, element, path, value);
|
|
80
|
+
activatedGeneration = activateEditedReasoningBudget(
|
|
81
|
+
file, state.configDashboard, path, value, setConfigPathValue,
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
if (activatedGeneration)
|
|
85
|
+
syncActivatedReasoningBudget(dom.configDashboard, file, state.configDashboard, activatedGeneration);
|
|
78
86
|
syncExecutionRouteDescription(element);
|
|
87
|
+
if (shouldRefreshReasoningBudgetFields(file, path, element.dataset.valueType)) renderConfigDashboard();
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
function handleDashboardInput(event) {
|
|
@@ -90,8 +99,7 @@ export function createConfigWorkspaceEvents({
|
|
|
90
99
|
if (dashboardIsBusy()) return;
|
|
91
100
|
const element = event.target;
|
|
92
101
|
if (element?.id === "configRawFileSelect") {
|
|
93
|
-
changeRawFile(element.value, element);
|
|
94
|
-
return;
|
|
102
|
+
return changeRawFile(element.value, element);
|
|
95
103
|
}
|
|
96
104
|
const actionElement = element?.closest?.("[data-config-action]");
|
|
97
105
|
if (!actionElement) return;
|
|
@@ -273,9 +281,9 @@ export function createConfigWorkspaceEvents({
|
|
|
273
281
|
function bind() {
|
|
274
282
|
if (state.bound) return;
|
|
275
283
|
state.bound = true;
|
|
276
|
-
dom.refreshConfigButton.addEventListener("click", () => {
|
|
284
|
+
dom.refreshConfigButton.addEventListener("click", async () => {
|
|
277
285
|
if (dashboardIsBusy()) return;
|
|
278
|
-
if (!confirmDiscardChanges("refresh configuration")) return;
|
|
286
|
+
if (!await confirmDiscardChanges("refresh configuration")) return;
|
|
279
287
|
void loadRuntimeConfig({ protectUnsaved: false });
|
|
280
288
|
});
|
|
281
289
|
dom.configDashboard.addEventListener("click", handleDashboardClick);
|
|
@@ -29,6 +29,8 @@ export function createConfigWorkspaceMutations({
|
|
|
29
29
|
setWorkspaceStatus,
|
|
30
30
|
syncDirtyPresentation,
|
|
31
31
|
}) {
|
|
32
|
+
let discardRequest = 0;
|
|
33
|
+
|
|
32
34
|
function mutateConfigFile(kind, id, mutator, options = {}) {
|
|
33
35
|
const file = findConfigFile(kind, id);
|
|
34
36
|
if (!file) return;
|
|
@@ -79,7 +81,8 @@ export function createConfigWorkspaceMutations({
|
|
|
79
81
|
renderConfigDashboard();
|
|
80
82
|
}
|
|
81
83
|
|
|
82
|
-
function prepareDiscardChanges(reason = "leave configuration") {
|
|
84
|
+
async function prepareDiscardChanges(reason = "leave configuration") {
|
|
85
|
+
discardRequest += 1;
|
|
83
86
|
if (state.externalRuntimeMutationInFlight) {
|
|
84
87
|
setWorkspaceStatus(
|
|
85
88
|
`Wait for the current Runtime update before you ${reason}.`,
|
|
@@ -97,13 +100,14 @@ export function createConfigWorkspaceMutations({
|
|
|
97
100
|
const changed = dirtyFiles();
|
|
98
101
|
if (!changed.length) return prepareConfigDiscardCommit(false);
|
|
99
102
|
const count = changed.length;
|
|
100
|
-
const
|
|
103
|
+
const discard = prepareConfigDiscardCommit(true);
|
|
104
|
+
const confirmed = await confirmDiscard(
|
|
101
105
|
`Discard unsaved changes in ${count} config ${
|
|
102
106
|
count === 1 ? "file" : "files"
|
|
103
107
|
} and ${reason}?`,
|
|
104
108
|
);
|
|
105
|
-
if (!confirmed) return null;
|
|
106
|
-
return
|
|
109
|
+
if (!confirmed || !discard.canCommit()) return null;
|
|
110
|
+
return discard;
|
|
107
111
|
}
|
|
108
112
|
|
|
109
113
|
function configDraftFingerprint() {
|
|
@@ -114,10 +118,16 @@ export function createConfigWorkspaceMutations({
|
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
function prepareConfigDiscardCommit(hasChanges) {
|
|
121
|
+
const request = discardRequest;
|
|
117
122
|
const dashboard = state.configDashboard;
|
|
118
123
|
const fingerprint = configDraftFingerprint();
|
|
119
|
-
const commit = () => {
|
|
124
|
+
const commit = () => {
|
|
125
|
+
if (!commit.canCommit()) return false;
|
|
126
|
+
if (hasChanges) discardAllChanges();
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
120
129
|
commit.canCommit = () => {
|
|
130
|
+
if (request !== discardRequest) return false;
|
|
121
131
|
if (state.externalRuntimeMutationInFlight) return false;
|
|
122
132
|
if (state.savingKeys.size > 0) return false;
|
|
123
133
|
if (state.configDashboard !== dashboard) return false;
|
|
@@ -126,9 +136,9 @@ export function createConfigWorkspaceMutations({
|
|
|
126
136
|
return commit;
|
|
127
137
|
}
|
|
128
138
|
|
|
129
|
-
function confirmDiscardChanges(reason = "leave configuration") {
|
|
130
|
-
const discardChanges = prepareDiscardChanges(reason);
|
|
131
|
-
if (!discardChanges) return false;
|
|
139
|
+
async function confirmDiscardChanges(reason = "leave configuration") {
|
|
140
|
+
const discardChanges = await prepareDiscardChanges(reason);
|
|
141
|
+
if (!discardChanges || !discardChanges.canCommit()) return false;
|
|
132
142
|
discardChanges();
|
|
133
143
|
return true;
|
|
134
144
|
}
|
|
@@ -197,13 +207,16 @@ export function createConfigWorkspaceMutations({
|
|
|
197
207
|
}
|
|
198
208
|
}
|
|
199
209
|
|
|
200
|
-
function keepOrDiscardCurrentRawDraft(currentFile, select) {
|
|
210
|
+
async function keepOrDiscardCurrentRawDraft(currentFile, select) {
|
|
211
|
+
discardRequest += 1;
|
|
201
212
|
if (!currentFile || !hasRawDraftChanges(currentFile)) return true;
|
|
202
|
-
const
|
|
213
|
+
const original = prepareConfigDiscardCommit(false);
|
|
214
|
+
const confirmed = await confirmDiscard(
|
|
203
215
|
`Discard the unapplied raw draft for ${textOf(
|
|
204
216
|
currentFile.label || currentFile.id,
|
|
205
217
|
)}?`,
|
|
206
218
|
);
|
|
219
|
+
if (!original.canCommit()) return false;
|
|
207
220
|
if (!confirmed) {
|
|
208
221
|
select.value = state.selectedRawConfigKey;
|
|
209
222
|
return false;
|
|
@@ -217,9 +230,16 @@ export function createConfigWorkspaceMutations({
|
|
|
217
230
|
return true;
|
|
218
231
|
}
|
|
219
232
|
|
|
220
|
-
function changeRawFile(nextKey, select) {
|
|
233
|
+
async function changeRawFile(nextKey, select) {
|
|
221
234
|
const currentFile = selectedRawConfigFile();
|
|
222
|
-
|
|
235
|
+
const dashboard = state.configDashboard;
|
|
236
|
+
const currentKey = state.selectedRawConfigKey;
|
|
237
|
+
const pending = keepOrDiscardCurrentRawDraft(currentFile, select);
|
|
238
|
+
const request = discardRequest;
|
|
239
|
+
if (!await pending) return;
|
|
240
|
+
if (request !== discardRequest) return;
|
|
241
|
+
if (dashboard !== state.configDashboard) return;
|
|
242
|
+
if (currentKey !== state.selectedRawConfigKey) return;
|
|
223
243
|
state.selectedRawConfigKey = nextKey;
|
|
224
244
|
syncDirtyPresentation({ syncRawEditor: true });
|
|
225
245
|
}
|
|
@@ -78,7 +78,7 @@ export function createConfigWorkspacePersistence({
|
|
|
78
78
|
|
|
79
79
|
async function loadRuntimeConfig(options = {}) {
|
|
80
80
|
const protectUnsaved = options.protectUnsaved !== false;
|
|
81
|
-
if (protectUnsaved && !confirmDiscardChanges("refresh configuration")) {
|
|
81
|
+
if (protectUnsaved && !await confirmDiscardChanges("refresh configuration")) {
|
|
82
82
|
return false;
|
|
83
83
|
}
|
|
84
84
|
if (options.clearBeforeLoad === true) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { confirmDialog } from "./confirmation-dialog.js";
|
|
1
2
|
import { createModelPluginViewState } from "./config-workspace/model-plugin-view-state.js";
|
|
2
3
|
import { createConfigCalibrationDisclosure } from "./config-workspace/calibration-disclosure.js";
|
|
3
4
|
import { createConfigDashboardRendering } from "./config-workspace/dashboard-rendering.js";
|
|
@@ -33,7 +34,7 @@ export function createConfigWorkspace({
|
|
|
33
34
|
onRemoveModel,
|
|
34
35
|
onNavigationChange = () => {},
|
|
35
36
|
recordControlEvent,
|
|
36
|
-
confirmDiscard = (message) =>
|
|
37
|
+
confirmDiscard = (message) => confirmDialog(message, { title: "Discard configuration changes", confirmLabel: "Discard changes", tone: "danger" }),
|
|
37
38
|
eventTarget = window,
|
|
38
39
|
}) {
|
|
39
40
|
const workspaceModel = createConfigWorkspaceModel();
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const dialogs = new WeakMap();
|
|
2
|
+
let nextDialogId = 0;
|
|
3
|
+
|
|
4
|
+
/** Shared, non-blocking confirmation. Overlapping requests fail closed. */
|
|
5
|
+
export function createConfirmationDialog({ documentRoot = globalThis.document } = {}) {
|
|
6
|
+
const dialog = documentRoot.createElement("dialog");
|
|
7
|
+
const id = `confirmation-${++nextDialogId}`;
|
|
8
|
+
dialog.className = "confirmation-dialog";
|
|
9
|
+
dialog.setAttribute("aria-labelledby", `${id}-title`);
|
|
10
|
+
dialog.setAttribute("aria-describedby", `${id}-description`);
|
|
11
|
+
dialog.innerHTML = `<div class="confirmation-content">
|
|
12
|
+
<header class="confirmation-heading"><h2 id="${id}-title"></h2>
|
|
13
|
+
<button type="button" class="confirmation-close" aria-label="Close confirmation">×</button></header>
|
|
14
|
+
<p id="${id}-description" class="confirmation-description"></p>
|
|
15
|
+
<footer class="confirmation-actions"><button type="button" data-confirmation-cancel>Cancel</button>
|
|
16
|
+
<button type="button" data-confirmation-accept>Continue</button></footer>
|
|
17
|
+
</div>`;
|
|
18
|
+
documentRoot.body.append(dialog);
|
|
19
|
+
const heading = dialog.querySelector("h2");
|
|
20
|
+
const description = dialog.querySelector(".confirmation-description");
|
|
21
|
+
const cancel = dialog.querySelector("[data-confirmation-cancel]");
|
|
22
|
+
const accept = dialog.querySelector("[data-confirmation-accept]");
|
|
23
|
+
let pending;
|
|
24
|
+
let returnFocus;
|
|
25
|
+
let destroyed = false;
|
|
26
|
+
|
|
27
|
+
function finish(approved) {
|
|
28
|
+
if (!pending) return;
|
|
29
|
+
const resolve = pending;
|
|
30
|
+
pending = undefined;
|
|
31
|
+
if (dialog.open) dialog.close();
|
|
32
|
+
if (returnFocus?.isConnected && !returnFocus.closest("[hidden], [inert]")) returnFocus.focus();
|
|
33
|
+
returnFocus = undefined;
|
|
34
|
+
resolve(approved);
|
|
35
|
+
}
|
|
36
|
+
cancel.addEventListener("click", () => finish(false));
|
|
37
|
+
dialog.querySelector(".confirmation-close").addEventListener("click", () => finish(false));
|
|
38
|
+
accept.addEventListener("click", () => finish(true));
|
|
39
|
+
dialog.addEventListener("keydown", (event) => {
|
|
40
|
+
if (event.key !== "Escape" || event.isComposing) return;
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
event.stopPropagation();
|
|
43
|
+
finish(false);
|
|
44
|
+
});
|
|
45
|
+
dialog.addEventListener("cancel", (event) => { event.preventDefault(); finish(false); });
|
|
46
|
+
// A delayed close event from the previous request must not cancel a newly opened one.
|
|
47
|
+
dialog.addEventListener("close", () => { if (!dialog.open) finish(false); });
|
|
48
|
+
const onPageHide = () => finish(false);
|
|
49
|
+
documentRoot.defaultView?.addEventListener("pagehide", onPageHide);
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
confirm(message, { title = "Confirm action", confirmLabel = "Continue", tone = "default" } = {}) {
|
|
53
|
+
if (pending || destroyed) return Promise.resolve(false);
|
|
54
|
+
heading.textContent = title;
|
|
55
|
+
description.textContent = message;
|
|
56
|
+
accept.textContent = confirmLabel;
|
|
57
|
+
dialog.dataset.tone = tone === "danger" ? "danger" : "default";
|
|
58
|
+
returnFocus = documentRoot.activeElement;
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
pending = resolve;
|
|
61
|
+
try {
|
|
62
|
+
dialog.showModal();
|
|
63
|
+
cancel.focus();
|
|
64
|
+
} catch {
|
|
65
|
+
finish(false);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
cancel() { finish(false); },
|
|
70
|
+
destroy() {
|
|
71
|
+
destroyed = true;
|
|
72
|
+
finish(false);
|
|
73
|
+
documentRoot.defaultView?.removeEventListener("pagehide", onPageHide);
|
|
74
|
+
dialog.remove();
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function confirmDialog(message, options) {
|
|
80
|
+
const documentRoot = globalThis.document;
|
|
81
|
+
if (!documentRoot?.body) return Promise.resolve(false);
|
|
82
|
+
let instance = dialogs.get(documentRoot);
|
|
83
|
+
if (!instance) {
|
|
84
|
+
instance = createConfirmationDialog({ documentRoot });
|
|
85
|
+
dialogs.set(documentRoot, instance);
|
|
86
|
+
}
|
|
87
|
+
return instance.confirm(message, options);
|
|
88
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MemoryActivity } from "../lib/memory-activity-model.js";
|
|
1
2
|
import type { ContextWindowDisplay } from "../lib/context-window-state.js";
|
|
2
3
|
import type { ConversationFileReference } from "../lib/conversation-file-reference.js";
|
|
3
4
|
import type { buildConversationRoleCards } from "../lib/conversation-role-model.js";
|
|
@@ -25,6 +26,7 @@ export declare function buildConversationActivityModel(
|
|
|
25
26
|
): {
|
|
26
27
|
requestId: string;
|
|
27
28
|
events: ConversationActivityEvent[];
|
|
29
|
+
memoryActivities: MemoryActivity[];
|
|
28
30
|
roleCards: ReturnType<typeof buildConversationRoleCards>;
|
|
29
31
|
sources: ConversationSourcesGroup[];
|
|
30
32
|
toolActions: ConversationToolAction[];
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
summarizeConversationTools,
|
|
17
17
|
} from "../lib/tool-activity-model.js";
|
|
18
18
|
import { isNonToolTimelineEvent } from "../lib/tool-timeline.js";
|
|
19
|
+
import { buildMemoryActivities, isMemoryRetrievalEvent } from "../lib/memory-activity-model.js";
|
|
20
|
+
import { createConversationMemoryActivity } from "./conversation-memory-activity.js";
|
|
19
21
|
|
|
20
22
|
function textOf(value, fallback = "") {
|
|
21
23
|
return typeof value === "string" ? value : fallback;
|
|
@@ -113,6 +115,7 @@ export function buildConversationActivityModel({
|
|
|
113
115
|
return {
|
|
114
116
|
requestId: "",
|
|
115
117
|
events: [],
|
|
118
|
+
memoryActivities: [],
|
|
116
119
|
roleCards: [],
|
|
117
120
|
sources: [],
|
|
118
121
|
toolActions: [],
|
|
@@ -134,7 +137,12 @@ export function buildConversationActivityModel({
|
|
|
134
137
|
.map(presentEvent)
|
|
135
138
|
: [];
|
|
136
139
|
const toolCount = countToolInvocations(scopedEvents);
|
|
137
|
-
const
|
|
140
|
+
const memoryActivities = buildMemoryActivities({
|
|
141
|
+
requestId: normalizedRequestId, events: scopedEvents, streaming,
|
|
142
|
+
});
|
|
143
|
+
const timeline = buildEventTimelineEntries(scopedEvents.filter(
|
|
144
|
+
(event) => !isMemoryRetrievalEvent(event),
|
|
145
|
+
));
|
|
138
146
|
const progress = normalizeProgress(taskProgress, normalizedRequestId);
|
|
139
147
|
const contextWindowModel = projectContextWindowDisplay(
|
|
140
148
|
contextWindow,
|
|
@@ -155,6 +163,7 @@ export function buildConversationActivityModel({
|
|
|
155
163
|
return {
|
|
156
164
|
requestId: normalizedRequestId,
|
|
157
165
|
events: timeline,
|
|
166
|
+
memoryActivities,
|
|
158
167
|
roleCards: buildConversationRoleCards({
|
|
159
168
|
requestId: normalizedRequestId,
|
|
160
169
|
events: scopedEvents,
|
|
@@ -179,7 +188,7 @@ export function buildConversationActivityModel({
|
|
|
179
188
|
"Working"
|
|
180
189
|
: "",
|
|
181
190
|
openByDefault: Boolean(streaming),
|
|
182
|
-
hasContent: Boolean(progress || timeline.length > 0),
|
|
191
|
+
hasContent: Boolean(progress || timeline.length > 0 || memoryActivities.length > 0),
|
|
183
192
|
};
|
|
184
193
|
}
|
|
185
194
|
|
|
@@ -263,6 +272,25 @@ export function createConversationActivity({
|
|
|
263
272
|
function createNode(input = {}) {
|
|
264
273
|
const model = buildConversationActivityModel(input);
|
|
265
274
|
if (!model.hasContent) return null;
|
|
275
|
+
if (model.roleCards.length > 0) return createActivityNode(model);
|
|
276
|
+
const memory = createConversationMemoryActivity({
|
|
277
|
+
documentRoot, activities: model.memoryActivities,
|
|
278
|
+
});
|
|
279
|
+
const bubble = documentRoot.createElement("div");
|
|
280
|
+
bubble.className = "conversation-role-message conversation-memory-bubble";
|
|
281
|
+
bubble.dataset.requestId = model.requestId;
|
|
282
|
+
if (memory) bubble.appendChild(memory);
|
|
283
|
+
if (!model.events.length && !model.progress) return bubble;
|
|
284
|
+
const activity = createActivityNode(model);
|
|
285
|
+
if (!memory) return activity;
|
|
286
|
+
const group = documentRoot.createElement("div");
|
|
287
|
+
group.className = "conversation-activity-group";
|
|
288
|
+
group.dataset.requestId = model.requestId;
|
|
289
|
+
group.append(bubble, activity);
|
|
290
|
+
return group;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function createActivityNode(model) {
|
|
266
294
|
const hasFailures = model.failureCount > 0;
|
|
267
295
|
const hasRoleCards = model.roleCards.length > 0;
|
|
268
296
|
|
|
@@ -352,12 +380,13 @@ export function createConversationActivity({
|
|
|
352
380
|
|
|
353
381
|
const body = documentRoot.createElement("div");
|
|
354
382
|
body.className = "conversation-activity-body";
|
|
355
|
-
if (model.events.length > 0) {
|
|
383
|
+
if (model.events.length > 0 || hasRoleCards) {
|
|
356
384
|
const timelineEvents = model.events.filter(isNonToolTimelineEvent);
|
|
357
385
|
body.appendChild(
|
|
358
386
|
roleCards.createNode({
|
|
359
387
|
requestId: model.requestId,
|
|
360
388
|
cards: model.roleCards,
|
|
389
|
+
memoryActivities: model.memoryActivities,
|
|
361
390
|
heading: summary,
|
|
362
391
|
timeline: renderTimeline(documentRoot, timelineEvents),
|
|
363
392
|
hasTimeline: timelineEvents.length > 0,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function createConversationMemoryActivity({
|
|
2
|
+
documentRoot = document,
|
|
3
|
+
activities = [],
|
|
4
|
+
} = {}) {
|
|
5
|
+
if (activities.length === 0) return null;
|
|
6
|
+
const section = documentRoot.createElement("section");
|
|
7
|
+
section.className = "conversation-memory-activity";
|
|
8
|
+
section.setAttribute("aria-label", "Memory activity");
|
|
9
|
+
for (const activity of activities) {
|
|
10
|
+
const row = documentRoot.createElement("div");
|
|
11
|
+
row.className = "conversation-memory-row";
|
|
12
|
+
row.dataset.state = activity.state;
|
|
13
|
+
const icon = documentRoot.createElement("span");
|
|
14
|
+
icon.className = "conversation-memory-icon";
|
|
15
|
+
icon.setAttribute("aria-hidden", "true");
|
|
16
|
+
icon.innerHTML = '<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="10" cy="4.5" rx="6" ry="2.5"/><path d="M4 4.5v10c0 1.4 2.7 2.5 6 2.5s6-1.1 6-2.5v-10M4 9.5c0 1.4 2.7 2.5 6 2.5s6-1.1 6-2.5"/></svg>';
|
|
17
|
+
const label = documentRoot.createElement("span");
|
|
18
|
+
label.className = "conversation-memory-label";
|
|
19
|
+
label.textContent = activity.label;
|
|
20
|
+
row.append(icon, label);
|
|
21
|
+
if (activity.detail) {
|
|
22
|
+
const detail = documentRoot.createElement("span");
|
|
23
|
+
detail.className = "conversation-memory-detail";
|
|
24
|
+
detail.setAttribute("dir", "auto");
|
|
25
|
+
detail.textContent = activity.detail;
|
|
26
|
+
row.appendChild(detail);
|
|
27
|
+
}
|
|
28
|
+
section.appendChild(row);
|
|
29
|
+
}
|
|
30
|
+
return section;
|
|
31
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ConversationFileReference } from "../lib/conversation-file-reference.js";
|
|
2
2
|
import type { buildConversationRoleCards } from "../lib/conversation-role-model.js";
|
|
3
|
+
import type { MemoryActivity } from "../lib/memory-activity-model.js";
|
|
3
4
|
|
|
4
5
|
export declare function createConversationRoleCards(options?: {
|
|
5
6
|
documentRoot?: Document;
|
|
@@ -12,6 +13,7 @@ export declare function createConversationRoleCards(options?: {
|
|
|
12
13
|
createNode(input: {
|
|
13
14
|
requestId: string;
|
|
14
15
|
cards: ReturnType<typeof buildConversationRoleCards>;
|
|
16
|
+
memoryActivities?: MemoryActivity[];
|
|
15
17
|
heading?: HTMLElement;
|
|
16
18
|
timeline: HTMLElement;
|
|
17
19
|
hasTimeline: boolean;
|