@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
|
@@ -143,6 +143,7 @@
|
|
|
143
143
|
<span class="rail-button-label">System</span>
|
|
144
144
|
</button>
|
|
145
145
|
</div>
|
|
146
|
+
<div id="appearanceRoot"></div>
|
|
146
147
|
<div class="rail-spacer"></div>
|
|
147
148
|
<div class="rail-runtime">
|
|
148
149
|
<select
|
|
@@ -206,6 +207,10 @@
|
|
|
206
207
|
<h1 id="sessionsHeading">Conversations</h1>
|
|
207
208
|
</div>
|
|
208
209
|
<div class="sheet-heading-actions">
|
|
210
|
+
<button id="sessionSearchToggleButton" class="icon-button" type="button"
|
|
211
|
+
aria-label="Search conversations" title="Search conversations" aria-controls="sessionSearchField" aria-expanded="false">
|
|
212
|
+
<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="6.5" /><path d="m16 16 4 4" /></svg>
|
|
213
|
+
</button>
|
|
209
214
|
<button
|
|
210
215
|
id="refreshSessionsButton"
|
|
211
216
|
class="icon-button"
|
|
@@ -233,7 +238,16 @@
|
|
|
233
238
|
</div>
|
|
234
239
|
</div>
|
|
235
240
|
|
|
236
|
-
<div class="session-
|
|
241
|
+
<div class="session-navigation-tools">
|
|
242
|
+
<label id="sessionSearchField" class="session-search" hidden>
|
|
243
|
+
<span class="sr-only">Search conversations</span>
|
|
244
|
+
<input
|
|
245
|
+
id="sessionSearchInput"
|
|
246
|
+
type="search"
|
|
247
|
+
placeholder="Search conversations"
|
|
248
|
+
autocomplete="off"
|
|
249
|
+
/>
|
|
250
|
+
</label>
|
|
237
251
|
<button
|
|
238
252
|
id="newSessionButton"
|
|
239
253
|
class="sessions-new-button"
|
|
@@ -246,41 +260,25 @@
|
|
|
246
260
|
</svg>
|
|
247
261
|
<span>New chat</span>
|
|
248
262
|
</button>
|
|
249
|
-
<button
|
|
250
|
-
id="newProjectButton"
|
|
251
|
-
class="sessions-project-button"
|
|
252
|
-
type="button"
|
|
253
|
-
disabled
|
|
254
|
-
aria-label="Create a project"
|
|
255
|
-
title="Create a project"
|
|
256
|
-
aria-controls="projectCreationRoot"
|
|
257
|
-
>
|
|
258
|
-
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
259
|
-
<path d="M3 7V5h6l2 2h10v13H3ZM12 10v7M8.5 13.5h7" />
|
|
260
|
-
</svg>
|
|
261
|
-
<span>New project</span>
|
|
262
|
-
</button>
|
|
263
263
|
</div>
|
|
264
264
|
|
|
265
265
|
<section class="sessions-section" aria-labelledby="sessionsHeading">
|
|
266
|
-
<div class="sessions-
|
|
267
|
-
<
|
|
268
|
-
|
|
266
|
+
<div id="sessionsList" class="sessions-list">
|
|
267
|
+
<button
|
|
268
|
+
id="newProjectButton"
|
|
269
|
+
class="sessions-project-button"
|
|
270
|
+
type="button"
|
|
271
|
+
disabled
|
|
272
|
+
aria-label="Create a project"
|
|
273
|
+
title="Create a project"
|
|
274
|
+
aria-controls="projectCreationRoot"
|
|
275
|
+
>
|
|
276
|
+
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
277
|
+
<path d="M3 7V5h6l2 2h10v13H3ZM12 10v7M8.5 13.5h7" />
|
|
278
|
+
</svg>
|
|
279
|
+
<span>New project</span>
|
|
280
|
+
</button>
|
|
269
281
|
</div>
|
|
270
|
-
<label class="session-search">
|
|
271
|
-
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
272
|
-
<circle cx="11" cy="11" r="6.5" />
|
|
273
|
-
<path d="m16 16 4 4" />
|
|
274
|
-
</svg>
|
|
275
|
-
<span class="sr-only">Search conversations</span>
|
|
276
|
-
<input
|
|
277
|
-
id="sessionSearchInput"
|
|
278
|
-
type="search"
|
|
279
|
-
placeholder="Search conversations"
|
|
280
|
-
autocomplete="off"
|
|
281
|
-
/>
|
|
282
|
-
</label>
|
|
283
|
-
<div id="sessionsList" class="sessions-list"></div>
|
|
284
282
|
</section>
|
|
285
283
|
</aside>
|
|
286
284
|
|
|
@@ -437,6 +435,14 @@
|
|
|
437
435
|
</button>
|
|
438
436
|
<div id="agentModeMenu" class="agent-mode-menu"></div>
|
|
439
437
|
</div>
|
|
438
|
+
<div id="reasoningBudgetControl" class="control-cluster reasoning-budget-control" hidden>
|
|
439
|
+
<span class="control-label">Budget</span>
|
|
440
|
+
<button id="reasoningBudgetButton" class="agent-mode-button reasoning-budget-button"
|
|
441
|
+
type="button" aria-controls="reasoningBudgetMenu" aria-haspopup="dialog" aria-expanded="false">
|
|
442
|
+
Profile default
|
|
443
|
+
</button>
|
|
444
|
+
<div id="reasoningBudgetMenu" class="agent-mode-menu reasoning-budget-menu" hidden></div>
|
|
445
|
+
</div>
|
|
440
446
|
<div
|
|
441
447
|
id="composerContextWindow"
|
|
442
448
|
class="composer-context-window"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const PALETTE_PREFERENCE_KEY: "abot-web.colorPalette";
|
|
2
|
+
export const DEFAULT_PALETTE_ID: "harbor";
|
|
3
|
+
export type ColorPaletteId = "harbor" | "midnight" | "graphite" | "charcoal" | "onyx" | "sand";
|
|
4
|
+
export interface ColorPalette {
|
|
5
|
+
id: ColorPaletteId;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
background: string;
|
|
9
|
+
panel: string;
|
|
10
|
+
accent: string;
|
|
11
|
+
}
|
|
12
|
+
export const COLOR_PALETTES: ColorPalette[];
|
|
13
|
+
export function isColorPaletteId(value: unknown): value is ColorPaletteId;
|
|
14
|
+
export function savedColorPalette(storage: {
|
|
15
|
+
getItem(key: string): string | null;
|
|
16
|
+
snapshot?(): { preferences: Record<string, string> } | null;
|
|
17
|
+
}): ColorPaletteId;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const PALETTE_PREFERENCE_KEY = "abot-web.colorPalette";
|
|
2
|
+
export const DEFAULT_PALETTE_ID = "harbor";
|
|
3
|
+
export const COLOR_PALETTES = [
|
|
4
|
+
{ id: "harbor", name: "Harbor", description: "Deep blue · sea glass", background: "#090f17", panel: "#0d151e", accent: "#82d4c2" },
|
|
5
|
+
{ id: "midnight", name: "Midnight", description: "Near black · ice blue", background: "#090b10", panel: "#10131b", accent: "#97bdff" },
|
|
6
|
+
{ id: "graphite", name: "Graphite", description: "Soft charcoal · lilac", background: "#101012", panel: "#18181c", accent: "#c4b5ed" },
|
|
7
|
+
{ id: "charcoal", name: "Onyx Soft", description: "Soft black · silver", background: "#0d0d0d", panel: "#151515", accent: "#c7c7c7" },
|
|
8
|
+
{ id: "onyx", name: "Onyx", description: "Pure black · soft white", background: "#070707", panel: "#101010", accent: "#d4d4d4" },
|
|
9
|
+
{ id: "sand", name: "Onyx Steel", description: "Cool black · steel", background: "#080b0e", panel: "#101519", accent: "#b5c6d2" },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
export function isColorPaletteId(value) {
|
|
13
|
+
return COLOR_PALETTES.some((palette) => palette.id === value);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function savedColorPalette(storage) {
|
|
17
|
+
const acknowledged = storage.snapshot?.();
|
|
18
|
+
const value = acknowledged ? acknowledged.preferences[PALETTE_PREFERENCE_KEY] : storage.getItem(PALETTE_PREFERENCE_KEY);
|
|
19
|
+
return isColorPaletteId(value) ? value : DEFAULT_PALETTE_ID;
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type MemoryActivity = {
|
|
2
|
+
state: "active" | "done" | "failed" | "incomplete";
|
|
3
|
+
label: string;
|
|
4
|
+
detail: string;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export declare function isMemoryRetrievalEvent(event: unknown): boolean;
|
|
8
|
+
export declare function buildMemoryActivities(input?: {
|
|
9
|
+
requestId?: string;
|
|
10
|
+
events?: Record<string, unknown>[];
|
|
11
|
+
streaming?: boolean;
|
|
12
|
+
}): MemoryActivity[];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { textOf } from "./text-format.js";
|
|
2
|
+
|
|
3
|
+
const RETRIEVAL_STATES = Object.freeze({
|
|
4
|
+
"memory.retrieval.started": "active",
|
|
5
|
+
"memory.retrieval.completed": "done",
|
|
6
|
+
"memory.retrieval.failed": "failed",
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export function isMemoryRetrievalEvent(event) {
|
|
10
|
+
return Object.hasOwn(RETRIEVAL_STATES, memoryEventName(event));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function memoryEventName(event) {
|
|
14
|
+
return textOf(event?.eventName || event?.name || event?.rawType || event?.type);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function sequenceOf(event, field) {
|
|
18
|
+
const value = field === "replay" ? event.lastSeqNo ?? event.seqNo : event.eventSequence;
|
|
19
|
+
return Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function hasCompleteMemoryOrdering(events, field) {
|
|
23
|
+
return events.every((event) => sequenceOf(event, field) !== null);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function orderedMemoryEvents(events) {
|
|
27
|
+
for (const field of ["runtime", "replay"]) {
|
|
28
|
+
if (!hasCompleteMemoryOrdering(events, field)) continue;
|
|
29
|
+
const unique = new Map();
|
|
30
|
+
for (const event of events) {
|
|
31
|
+
const sequence = sequenceOf(event, field);
|
|
32
|
+
if (!unique.has(sequence)) unique.set(sequence, event);
|
|
33
|
+
}
|
|
34
|
+
return [...unique.entries()].sort(([left], [right]) => left - right).map(([, event]) => event);
|
|
35
|
+
}
|
|
36
|
+
return events;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function memoryActivity(event, streaming) {
|
|
40
|
+
const recordedState = RETRIEVAL_STATES[memoryEventName(event)];
|
|
41
|
+
const state = recordedState === "active" && !streaming ? "incomplete" : recordedState;
|
|
42
|
+
const labels = {
|
|
43
|
+
active: "Checking memory…",
|
|
44
|
+
done: "Memory checked",
|
|
45
|
+
failed: "Memory retrieval failed",
|
|
46
|
+
incomplete: "Memory check incomplete",
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
state,
|
|
50
|
+
label: labels[state],
|
|
51
|
+
detail: state === "failed" ? textOf(event.summary || event.reason || event.error) : "",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Show the latest retrieval status for this request; recorded events stay intact. */
|
|
56
|
+
export function buildMemoryActivities({ requestId, events = [], streaming = false } = {}) {
|
|
57
|
+
const scoped = events.filter((event) =>
|
|
58
|
+
textOf(event?.requestId) === requestId && isMemoryRetrievalEvent(event));
|
|
59
|
+
const latest = orderedMemoryEvents(scoped).at(-1);
|
|
60
|
+
return latest ? [memoryActivity(latest, streaming)] : [];
|
|
61
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const NAVIGATION_PREFERENCE_KEY: "abot-web.navigationDisplay";
|
|
2
|
+
export const DEFAULT_NAVIGATION_MODE: "labels";
|
|
3
|
+
export type NavigationMode = "labels" | "icons";
|
|
4
|
+
export function isNavigationMode(value: unknown): value is NavigationMode;
|
|
5
|
+
export function savedNavigationMode(storage: {
|
|
6
|
+
getItem(key: string): string | null;
|
|
7
|
+
snapshot?(): { preferences: Record<string, string> } | null;
|
|
8
|
+
}): NavigationMode;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const NAVIGATION_PREFERENCE_KEY = "abot-web.navigationDisplay";
|
|
2
|
+
export const DEFAULT_NAVIGATION_MODE = "labels";
|
|
3
|
+
|
|
4
|
+
export function isNavigationMode(value) {
|
|
5
|
+
return value === "labels" || value === "icons";
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function savedNavigationMode(storage) {
|
|
9
|
+
const acknowledged = storage.snapshot?.();
|
|
10
|
+
const value = acknowledged ? acknowledged.preferences[NAVIGATION_PREFERENCE_KEY] : storage.getItem(NAVIGATION_PREFERENCE_KEY);
|
|
11
|
+
return isNavigationMode(value) ? value : DEFAULT_NAVIGATION_MODE;
|
|
12
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { reasoningPreferenceLabel, renderReasoningPreferenceField, syncReasoningPreferenceField } from "./reasoning-preference.js";
|
|
1
2
|
import { escapeHtml } from "./text-format.js";
|
|
2
3
|
|
|
3
|
-
export function displayReasoningMode(mode) {
|
|
4
|
+
export function displayReasoningMode(mode, preference) {
|
|
5
|
+
if (preference) return `${agentModeMeta(mode).label} · ${reasoningPreferenceLabel(preference)}`;
|
|
4
6
|
if (mode === "fast") return "Low";
|
|
5
7
|
return mode;
|
|
6
8
|
}
|
|
@@ -16,10 +18,34 @@ export function reasoningModeOptions(mode, enabled, modes = ["fast", "reasoning"
|
|
|
16
18
|
return modes.map((value) => `<option value="${escapeHtml(value)}"${value === mode ? " selected" : ""}>${escapeHtml(labels[value] || value)}</option>`).join("");
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
export function
|
|
21
|
+
export function agentModeMeta(mode) {
|
|
22
|
+
const modes = {
|
|
23
|
+
auto: { label: "Auto", description: "Lets the agent choose", icon: "*" },
|
|
24
|
+
fast: { label: "Low", description: "Shorter and quicker", icon: "!" },
|
|
25
|
+
reasoning: { label: "Reasoning", description: "Balanced speed and thinking", icon: "R" },
|
|
26
|
+
deep: { label: "Deep", description: "More careful responses", icon: "D" },
|
|
27
|
+
};
|
|
28
|
+
return modes[mode] || modes.reasoning;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function renderReasoningModeButtons(mode, modes, disabled = false) {
|
|
32
|
+
return modes.map((value) => {
|
|
33
|
+
const item = agentModeMeta(value);
|
|
34
|
+
const selected = value === mode;
|
|
35
|
+
return `<button class="agent-mode-option ${selected ? "selected" : ""}" type="button"
|
|
36
|
+
role="menuitemradio" aria-checked="${selected}" tabindex="${selected ? "0" : "-1"}"
|
|
37
|
+
data-mode="${escapeHtml(value)}" ${disabled ? "disabled" : ""}>
|
|
38
|
+
<span class="agent-mode-option-icon">${escapeHtml(item.icon)}</span>
|
|
39
|
+
<span><strong>${escapeHtml(item.label)}</strong><small>${escapeHtml(item.description)}</small></span>
|
|
40
|
+
</button>`;
|
|
41
|
+
}).join("");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function renderReasoningModeField(mode, profile, modes, preference) {
|
|
20
45
|
const enabled = canChooseReasoning(profile);
|
|
21
|
-
return `<label>Reasoning depth<select name="agentMode" data-reasoning-mode${enabled ? "" : " disabled"}>${reasoningModeOptions(mode, enabled, modes)}</select>
|
|
22
|
-
<small data-reasoning-mode-note${enabled ? " hidden" : ""}>Uses the provider default. Enable reasoning controls for this model in Models.</small
|
|
46
|
+
return `<label data-legacy-reasoning>Reasoning depth<select name="agentMode" data-reasoning-mode data-retained-mode="${escapeHtml(mode || "reasoning")}"${enabled ? "" : " disabled"}>${reasoningModeOptions(mode, enabled, modes)}</select>
|
|
47
|
+
<small data-reasoning-mode-note${enabled ? " hidden" : ""}>Uses the provider default. Enable reasoning controls for this model in Models.</small>
|
|
48
|
+
<small data-reasoning-default-note${enabled ? "" : " hidden"}>Sets the default depth; model profile and calibration settings may override it. Token budgets are separate. Changing the mode turns Thinking Off back on.</small></label>${renderReasoningPreferenceField(profile, preference)}`;
|
|
23
49
|
}
|
|
24
50
|
|
|
25
51
|
export function syncReasoningModeField(form, profiles, modes) {
|
|
@@ -28,13 +54,28 @@ export function syncReasoningModeField(form, profiles, modes) {
|
|
|
28
54
|
const profileId = form.querySelector('[name="modelProfileId"]')?.value;
|
|
29
55
|
const profile = profiles?.find((item) => item.id === profileId);
|
|
30
56
|
const enabled = canChooseReasoning(profile);
|
|
31
|
-
|
|
57
|
+
syncReasoningPreferenceField(form, profile);
|
|
58
|
+
const mode = select.value || select.dataset.retainedMode || "reasoning";
|
|
59
|
+
select.dataset.retainedMode = mode;
|
|
32
60
|
select.innerHTML = reasoningModeOptions(mode, enabled, modes);
|
|
33
61
|
select.disabled = !enabled;
|
|
34
62
|
const note = form.querySelector("[data-reasoning-mode-note]");
|
|
35
63
|
if (note) note.hidden = enabled;
|
|
64
|
+
const defaultNote = form.querySelector("[data-reasoning-default-note]");
|
|
65
|
+
if (defaultNote) defaultNote.hidden = !enabled;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function clearReasoningOffForMode(form, profiles, modes) {
|
|
69
|
+
const select = form.querySelector("[data-reasoning-mode]");
|
|
70
|
+
if (!select?.value || select.disabled) return;
|
|
71
|
+
select.dataset.retainedMode = select.value;
|
|
72
|
+
const preferenceMode = form.querySelector("[data-reasoning-preference-mode]");
|
|
73
|
+
if (preferenceMode?.value !== "off") return;
|
|
74
|
+
preferenceMode.value = "inherit";
|
|
75
|
+
syncReasoningModeField(form, profiles, modes);
|
|
36
76
|
}
|
|
37
77
|
|
|
38
78
|
export function retainedReasoningMode(form, fallback) {
|
|
39
|
-
|
|
79
|
+
const select = form.querySelector("[data-reasoning-mode]");
|
|
80
|
+
return select?.value || select?.dataset.retainedMode || fallback;
|
|
40
81
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ModelReasoningPreference } from "../../../shared/model-reasoning.js";
|
|
2
|
+
export type ReasoningProfile = { id?: string; supportsThinking?: boolean; reasoningControls?: { budgetTokens: boolean } };
|
|
3
|
+
export declare const MAX_REASONING_BUDGET_TOKENS: number;
|
|
4
|
+
export declare function canChooseReasoningBudget(profile: ReasoningProfile | null | undefined): boolean;
|
|
5
|
+
export declare function isReasoningPreference(value: unknown): value is ModelReasoningPreference;
|
|
6
|
+
export declare function reasoningPreferenceLabel(preference?: ModelReasoningPreference): string;
|
|
7
|
+
export declare function renderReasoningPreferenceField(profile?: ReasoningProfile | null, preference?: ModelReasoningPreference): string;
|
|
8
|
+
export declare function syncReasoningPreferenceField(form: ParentNode, profile?: ReasoningProfile | null): void;
|
|
9
|
+
export declare function readReasoningPreferenceField(form: ParentNode): ModelReasoningPreference | undefined;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { escapeHtml } from "./text-format.js";
|
|
2
|
+
|
|
3
|
+
export const MAX_REASONING_BUDGET_TOKENS = 2147483647;
|
|
4
|
+
export function canChooseReasoningBudget(profile) {
|
|
5
|
+
return profile?.supportsThinking === true && profile?.reasoningControls?.budgetTokens === true;
|
|
6
|
+
}
|
|
7
|
+
export function isReasoningPreference(value) {
|
|
8
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
9
|
+
if (typeof value.profileId !== "string" || !value.profileId.trim()) return false;
|
|
10
|
+
if (!["off", "budget", "server-default"].includes(value.mode)) return false;
|
|
11
|
+
const fields = value.mode === "budget" ? ["profileId", "mode", "budgetTokens"] : ["profileId", "mode"];
|
|
12
|
+
if (Object.keys(value).some((key) => !fields.includes(key))) return false;
|
|
13
|
+
return value.mode !== "budget" || (Number.isInteger(value.budgetTokens)
|
|
14
|
+
&& value.budgetTokens >= 0 && value.budgetTokens <= MAX_REASONING_BUDGET_TOKENS);
|
|
15
|
+
}
|
|
16
|
+
export function reasoningPreferenceLabel(preference) {
|
|
17
|
+
const zeroBudgetDisablesThinking = preference?.mode === "budget" && preference.budgetTokens === 0;
|
|
18
|
+
if (zeroBudgetDisablesThinking) return "Thinking off";
|
|
19
|
+
if (preference?.mode === "budget") return `${preference.budgetTokens} thinking tokens`;
|
|
20
|
+
if (preference?.mode === "off") return "Thinking off";
|
|
21
|
+
if (preference?.mode === "server-default") return "Server thinking default";
|
|
22
|
+
return "Profile default";
|
|
23
|
+
}
|
|
24
|
+
export function renderReasoningPreferenceField(profile, preference) {
|
|
25
|
+
const available = canChooseReasoningBudget(profile);
|
|
26
|
+
const mode = preference?.mode || "inherit";
|
|
27
|
+
const profileId = profile?.id || preference?.profileId || "";
|
|
28
|
+
return `<div data-reasoning-preference data-profile-id="${escapeHtml(profileId)}" data-budget-available="${available}"${available || preference ? "" : " hidden"}>
|
|
29
|
+
<label>Thinking budget<select name="reasoningPreferenceMode" data-reasoning-preference-mode>
|
|
30
|
+
${[["inherit", "Profile default"], ["off", "Off"], ["budget", "Custom token budget"], ["server-default", "Server default"]].map(([value, label]) => `<option value="${value}"${value === mode ? " selected" : ""}${!available && value !== "inherit" ? " disabled" : ""}>${label}</option>`).join("")}
|
|
31
|
+
</select></label>
|
|
32
|
+
<label data-reasoning-budget-label${mode === "budget" ? "" : " hidden"}>Thinking tokens<input name="reasoningBudgetTokens" data-reasoning-budget type="number" min="0" max="${MAX_REASONING_BUDGET_TOKENS}" step="1" inputmode="numeric" value="${preference?.mode === "budget" ? escapeHtml(String(preference.budgetTokens)) : ""}"${mode === "budget" ? " required" : " disabled"}></label>
|
|
33
|
+
<small data-reasoning-preference-note>${available ? "The token limit is independent of reasoning depth and counts toward the total output limit. Off or a token limit of 0 disables thinking." : "This model cannot use the saved thinking budget. Choose Profile default to clear it."}</small>
|
|
34
|
+
</div><small data-reasoning-model-change-note hidden>Changing the model reset the thinking budget to Profile default.</small>`;
|
|
35
|
+
}
|
|
36
|
+
export function syncReasoningPreferenceField(form, profile) {
|
|
37
|
+
const field = form?.querySelector("[data-reasoning-preference]");
|
|
38
|
+
if (!field) return;
|
|
39
|
+
const changed = field.dataset.profileId !== (profile?.id || "");
|
|
40
|
+
const mode = field.querySelector("[data-reasoning-preference-mode]");
|
|
41
|
+
const notice = form.querySelector("[data-reasoning-model-change-note]");
|
|
42
|
+
if (changed) {
|
|
43
|
+
if (notice) notice.hidden = mode.value === "inherit";
|
|
44
|
+
field.dataset.profileId = profile?.id || "";
|
|
45
|
+
mode.value = "inherit";
|
|
46
|
+
field.querySelector("[data-reasoning-budget]").value = "";
|
|
47
|
+
}
|
|
48
|
+
const available = canChooseReasoningBudget(profile);
|
|
49
|
+
field.dataset.budgetAvailable = String(available);
|
|
50
|
+
field.hidden = !available && mode.value === "inherit";
|
|
51
|
+
for (const option of mode.querySelectorAll("option")) option.disabled = !available && option.value !== "inherit";
|
|
52
|
+
if (!changed && mode.value !== "inherit" && notice) notice.hidden = true;
|
|
53
|
+
const custom = mode.value === "budget";
|
|
54
|
+
field.querySelector("[data-reasoning-budget-label]").hidden = !custom;
|
|
55
|
+
const input = field.querySelector("[data-reasoning-budget]");
|
|
56
|
+
input.disabled = !custom; input.required = custom;
|
|
57
|
+
}
|
|
58
|
+
function readReasoningBudgetTokens(field) {
|
|
59
|
+
const raw = field.querySelector("[data-reasoning-budget]").value;
|
|
60
|
+
if (raw.trim() === "") return NaN;
|
|
61
|
+
return Number(raw);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function readReasoningPreferenceField(form) {
|
|
65
|
+
const field = form?.querySelector("[data-reasoning-preference]");
|
|
66
|
+
const mode = field?.querySelector("[data-reasoning-preference-mode]")?.value || "inherit";
|
|
67
|
+
if (mode === "inherit") return undefined;
|
|
68
|
+
if (field.dataset.budgetAvailable !== "true")
|
|
69
|
+
throw new Error("This model does not support thinking budgets. Choose Profile default.");
|
|
70
|
+
const preference = { profileId: field.dataset.profileId, mode };
|
|
71
|
+
if (mode === "budget") preference.budgetTokens = readReasoningBudgetTokens(field);
|
|
72
|
+
if (!isReasoningPreference(preference))
|
|
73
|
+
throw new Error(`Enter a whole thinking token budget from 0 to ${MAX_REASONING_BUDGET_TOKENS}; 0 disables thinking.`);
|
|
74
|
+
return preference;
|
|
75
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ModelReasoningPreference } from "../../../shared/model-reasoning.js";
|
|
2
|
+
|
|
1
3
|
export interface SessionComposerQueueScope {
|
|
2
4
|
environmentId: string;
|
|
3
5
|
sessionId: string;
|
|
@@ -10,6 +12,7 @@ export interface SessionComposerQueueItem {
|
|
|
10
12
|
waitForRequestId: string;
|
|
11
13
|
text: string;
|
|
12
14
|
attachments: SessionComposerAttachmentRef[];
|
|
15
|
+
reasoningPreference?: ModelReasoningPreference;
|
|
13
16
|
agentMode: string;
|
|
14
17
|
toolPermissionMode: string;
|
|
15
18
|
modelPreference: SessionComposerModelPreference | null;
|
|
@@ -19,6 +22,7 @@ export interface SessionComposerQueueItemInput {
|
|
|
19
22
|
waitForRequestId: string;
|
|
20
23
|
text: string;
|
|
21
24
|
attachments: SessionComposerAttachmentRef[];
|
|
25
|
+
reasoningPreference?: ModelReasoningPreference;
|
|
22
26
|
agentMode: string;
|
|
23
27
|
toolPermissionMode: string;
|
|
24
28
|
modelPreference?: SessionComposerModelPreference | null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isReasoningPreference } from "./reasoning-preference.js";
|
|
1
2
|
import { hasValidQueueOwnership, canUpdateBlockedRelease, canBindBlockedRelease, createQueueOwnership } from "./session-composer-queue-ownership.js";
|
|
2
3
|
|
|
3
4
|
export const SESSION_COMPOSER_QUEUE_STORAGE_KEY =
|
|
@@ -53,6 +54,8 @@ function isQueueItem(value) {
|
|
|
53
54
|
value.attachments.every(isAttachmentRef) &&
|
|
54
55
|
isNonEmptyString(value.agentMode) &&
|
|
55
56
|
isNonEmptyString(value.toolPermissionMode) &&
|
|
57
|
+
(value.reasoningPreference === undefined || (isReasoningPreference(value.reasoningPreference)
|
|
58
|
+
&& value.reasoningPreference.profileId === value.modelPreference?.profileId)) &&
|
|
56
59
|
(value.modelPreference === null ||
|
|
57
60
|
(isRecord(value.modelPreference) && isJsonValue(value.modelPreference))),
|
|
58
61
|
);
|
|
@@ -114,6 +117,7 @@ function snapshotQueueItem(item) {
|
|
|
114
117
|
agentMode: item?.agentMode,
|
|
115
118
|
toolPermissionMode: item?.toolPermissionMode,
|
|
116
119
|
modelPreference: item?.modelPreference ?? null,
|
|
120
|
+
...(item?.reasoningPreference !== undefined ? { reasoningPreference: item.reasoningPreference } : {}),
|
|
117
121
|
};
|
|
118
122
|
if (!isQueueItem(snapshot)) {
|
|
119
123
|
throw new TypeError("Invalid session composer queue item");
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function sessionProjectId(session, deletedProjectIds = []) {
|
|
2
|
+
const projectId = session.projectId || session.project?.id;
|
|
3
|
+
if (deletedProjectIds.includes(projectId)) return undefined;
|
|
4
|
+
return projectId;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** Group by actual project identity without changing session workspace bindings. */
|
|
8
|
+
export function projectSessionDisplayGroups(projects, sessions, deletedProjectIds = []) {
|
|
9
|
+
const deletedProjects = new Set(deletedProjectIds);
|
|
10
|
+
const groups = new Map(projects.filter((project) => !deletedProjects.has(project.id))
|
|
11
|
+
.map((project) => [project.id, { ...project, sessions: [] }]));
|
|
12
|
+
const ordinary = [];
|
|
13
|
+
for (const session of sessions) {
|
|
14
|
+
const projectId = sessionProjectId(session);
|
|
15
|
+
const isOrdinarySession = !projectId || deletedProjects.has(projectId);
|
|
16
|
+
if (isOrdinarySession) {
|
|
17
|
+
ordinary.push(session);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const group = groups.get(projectId) ?? {
|
|
21
|
+
id: projectId, name: session.project?.name || "Project",
|
|
22
|
+
directory: session.project?.directory || "", sessions: [],
|
|
23
|
+
};
|
|
24
|
+
group.sessions.push(session);
|
|
25
|
+
groups.set(projectId, group);
|
|
26
|
+
}
|
|
27
|
+
return { groups: [...groups.values()], ordinary };
|
|
28
|
+
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import { sessionProjectId } from "./session-project-groups.js";
|
|
2
|
+
|
|
3
|
+
export function sessionSidebarGroup(session, pinnedSessionIds, deletedProjectIds = []) {
|
|
2
4
|
if (pinnedSessionIds.includes(session.id)) return "pinned";
|
|
3
|
-
const projectId = session
|
|
5
|
+
const projectId = sessionProjectId(session, deletedProjectIds);
|
|
4
6
|
if (projectId) return `project:${projectId}`;
|
|
5
7
|
return "ordinary";
|
|
6
8
|
}
|
|
7
9
|
|
|
8
|
-
export function canReorderSidebarSessions(source, target, pinnedSessionIds) {
|
|
10
|
+
export function canReorderSidebarSessions(source, target, pinnedSessionIds, deletedProjectIds = []) {
|
|
9
11
|
if (!source || !target) return false;
|
|
10
12
|
if (source.id === target.id) return false;
|
|
11
|
-
return sessionSidebarGroup(source, pinnedSessionIds) ===
|
|
12
|
-
sessionSidebarGroup(target, pinnedSessionIds);
|
|
13
|
+
return sessionSidebarGroup(source, pinnedSessionIds, deletedProjectIds) ===
|
|
14
|
+
sessionSidebarGroup(target, pinnedSessionIds, deletedProjectIds);
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export function orderSidebarSessions(sessions, pinnedSessionIds, orderedSessionIds) {
|
|
@@ -198,6 +198,7 @@ export function projectToolActivityEvent(message) {
|
|
|
198
198
|
const activity = skill ?? automationActivityFields(meta, tool);
|
|
199
199
|
return {
|
|
200
200
|
...(fileReference ? { fileReference } : {}),
|
|
201
|
+
...(skill?.skillRead ? { skillRead: true } : {}),
|
|
201
202
|
...(activity?.activityTitle ? { activityTitle: activity.activityTitle } : {}),
|
|
202
203
|
name,
|
|
203
204
|
tool,
|
|
@@ -95,6 +95,7 @@ function applyPhase(action, evidence) {
|
|
|
95
95
|
|
|
96
96
|
function applyEvidence(action, evidence) {
|
|
97
97
|
if (evidence.activityTitle) action.title = evidence.activityTitle;
|
|
98
|
+
if (evidence.skillRead) action.skillRead = true;
|
|
98
99
|
if (isSettledToolEvent(evidence)) delete action.fileReference;
|
|
99
100
|
if (evidence.fileReference) action.fileReference = evidence.fileReference;
|
|
100
101
|
if (evidence.executorRole) action.executorRole = evidence.executorRole;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Window-local drafts belong to the exact action, never to a conversation outbox. */
|
|
2
|
+
export function approvalRejectionIdentity(approval) {
|
|
3
|
+
return JSON.stringify([
|
|
4
|
+
approval.environmentId,
|
|
5
|
+
approval.sessionId,
|
|
6
|
+
approval.requestId,
|
|
7
|
+
approval.approvalId,
|
|
8
|
+
approval.generation,
|
|
9
|
+
approval.waitId,
|
|
10
|
+
]);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function createApprovalRejectionDrafts() {
|
|
14
|
+
const drafts = new Map();
|
|
15
|
+
|
|
16
|
+
function get(approval) {
|
|
17
|
+
const key = approvalRejectionIdentity(approval);
|
|
18
|
+
if (!drafts.has(key)) drafts.set(key, { text: "", expanded: false });
|
|
19
|
+
return drafts.get(key);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function promoteBoundApprovalDraft(approval) {
|
|
23
|
+
const key = approvalRejectionIdentity(approval);
|
|
24
|
+
if (drafts.has(key)) return;
|
|
25
|
+
const liveKey = approvalRejectionIdentity({
|
|
26
|
+
...approval,
|
|
27
|
+
generation: undefined,
|
|
28
|
+
waitId: undefined,
|
|
29
|
+
});
|
|
30
|
+
const liveDraft = drafts.get(liveKey);
|
|
31
|
+
if (!liveDraft) return;
|
|
32
|
+
drafts.set(key, liveDraft);
|
|
33
|
+
drafts.delete(liveKey);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function retain(approvals) {
|
|
37
|
+
for (const approval of approvals) promoteBoundApprovalDraft(approval);
|
|
38
|
+
const pending = new Set(approvals.map(approvalRejectionIdentity));
|
|
39
|
+
for (const key of drafts.keys()) {
|
|
40
|
+
if (!pending.has(key)) drafts.delete(key);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return { get, retain, clear: () => drafts.clear() };
|
|
45
|
+
}
|
|
@@ -46,5 +46,5 @@ export function skillActivityFields(meta, tool, completed, ok) {
|
|
|
46
46
|
? boundedSkillText(meta.skillTitle, 160)
|
|
47
47
|
: "";
|
|
48
48
|
if (skillId) sent.push({ label: action === "read_skills" ? "Skill references" : referenceLabel, value: skillId });
|
|
49
|
-
return { activityTitle, target: skillTitle || boundedSkillText(meta.skillName, 160) || skillId, sent };
|
|
49
|
+
return { activityTitle, target: skillTitle || boundedSkillText(meta.skillName, 160) || skillId, sent, skillRead: readAction };
|
|
50
50
|
}
|
|
@@ -17,8 +17,13 @@ export function createNotificationsFeature({ dom, state, client, shell, getEnvir
|
|
|
17
17
|
let environmentRevision = 0;
|
|
18
18
|
const homeEntry = createHomeNotificationsEntry({
|
|
19
19
|
homePanel: dom.homeWorkspacePanel,
|
|
20
|
-
onOpen: () => {
|
|
21
|
-
|
|
20
|
+
onOpen: async () => {
|
|
21
|
+
const environment = getEnvironmentId();
|
|
22
|
+
const revision = environmentRevision;
|
|
23
|
+
const activate = await shell.prepareWorkspaceActivation("notifications");
|
|
24
|
+
if (!activate || revision !== environmentRevision) return;
|
|
25
|
+
if (environment !== getEnvironmentId()) return;
|
|
26
|
+
if (!activate()) return;
|
|
22
27
|
controller.setFilter("unread");
|
|
23
28
|
},
|
|
24
29
|
});
|
|
@@ -53,14 +58,17 @@ export function createNotificationsFeature({ dom, state, client, shell, getEnvir
|
|
|
53
58
|
if (!source) return;
|
|
54
59
|
const environmentVersion = environmentRevision;
|
|
55
60
|
const navigationVersion = shell.navigationRevision();
|
|
61
|
+
const navigationRequest = shell.navigationRequestRevision?.();
|
|
56
62
|
await controller.markRead(item.id, true);
|
|
57
63
|
if (!canOpenNotificationSource(item)) return;
|
|
58
64
|
if (environmentVersion !== environmentRevision) return;
|
|
59
65
|
if (navigationVersion !== shell.navigationRevision()) return;
|
|
66
|
+
if (navigationRequest !== shell.navigationRequestRevision?.()) return;
|
|
60
67
|
if (await openCompanionSource(item, source)) return;
|
|
61
68
|
if (!canOpenNotificationSource(item)) return;
|
|
62
69
|
if (environmentVersion !== environmentRevision) return;
|
|
63
70
|
if (navigationVersion !== shell.navigationRevision()) return;
|
|
71
|
+
if (navigationRequest !== shell.navigationRequestRevision?.()) return;
|
|
64
72
|
window.location.assign(source);
|
|
65
73
|
}
|
|
66
74
|
function refreshAvailability() {
|
|
@@ -47,8 +47,8 @@ export function createPassiveLearningFeature({
|
|
|
47
47
|
home = createPassiveLearningHome({
|
|
48
48
|
actions,
|
|
49
49
|
openLearning,
|
|
50
|
-
openSetup: () => {
|
|
51
|
-
if (openLearning() === false) return;
|
|
50
|
+
openSetup: async () => {
|
|
51
|
+
if (await openLearning() === false) return;
|
|
52
52
|
if (learningRoot) selectLearningView(learningRoot, "settings");
|
|
53
53
|
},
|
|
54
54
|
});
|