@abot-ai/runtime 1.8.0 → 1.9.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 +216 -222
- package/dist/scripts/runtime-setup-files.js +46 -2
- package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
- package/dist/src/capabilities/tool-types.d.ts +4 -0
- package/dist/src/model-gateway/client/chat.js +9 -5
- package/dist/src/model-gateway/client/invocation-error.d.ts +9 -0
- package/dist/src/model-gateway/client/invocation-error.js +30 -0
- package/dist/src/model-gateway/client/stream-consumer.js +9 -2
- package/dist/src/model-gateway/client/stream-parser.js +2 -1
- package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
- package/dist/src/model-gateway/protocol/message-contract.js +1 -1
- package/dist/src/model-gateway/server/chat-handler.js +5 -7
- package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
- package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +5 -1
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +15 -1
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-execution.js +7 -5
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-snapshot.js +9 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
- package/dist/src/runtime/automations/service.d.ts +1 -1
- package/dist/src/runtime/capabilities/automation-builder/tool-module.js +4 -4
- package/dist/src/runtime/capabilities/automations/draft-index.d.ts +1 -1
- package/dist/src/runtime/capabilities/automations/tool-module.js +4 -4
- package/dist/src/runtime/capabilities/core-tool-contracts.d.ts +29 -0
- package/dist/src/runtime/capabilities/core-tool-contracts.js +38 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-many.d.ts +4 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-many.js +21 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-targets.d.ts +13 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-targets.js +44 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.d.ts +141 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.js +58 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-module.d.ts +4 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-module.js +78 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-output.d.ts +12 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-output.js +21 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-contract.d.ts +77 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-contract.js +28 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-operations.d.ts +3 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-operations.js +34 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.js +3 -3
- package/dist/src/runtime/capabilities/tool-availability.js +6 -0
- package/dist/src/runtime/composition.d.ts +5 -0
- package/dist/src/runtime/context/capability-brief.d.ts +2 -2
- package/dist/src/runtime/context/capability-brief.js +3 -3
- package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
- package/dist/src/runtime/context/capability-descriptions.js +57 -20
- package/dist/src/runtime/context/capability-result-compaction-source.d.ts +3 -1
- package/dist/src/runtime/context/capability-result-compaction-source.js +13 -1
- package/dist/src/runtime/context/core-skill-read-context.d.ts +16 -0
- package/dist/src/runtime/context/core-skill-read-context.js +76 -0
- package/dist/src/runtime/context/exact-evidence-match.d.ts +3 -0
- package/dist/src/runtime/context/exact-evidence-match.js +34 -0
- package/dist/src/runtime/context/model-step-compaction.js +20 -6
- package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.d.ts +9 -0
- package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.js +38 -0
- package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +2 -0
- package/dist/src/runtime/context/semantic-compaction/prompt.js +7 -7
- package/dist/src/runtime/context/semantic-compaction/run.js +10 -3
- package/dist/src/runtime/context/semantic-compaction/super-source-integrity.js +33 -3
- package/dist/src/runtime/context/session-artifact-paths.d.ts +2 -1
- package/dist/src/runtime/context/session-artifact-paths.js +2 -1
- package/dist/src/runtime/context/session-memory/model-step-controller.d.ts +2 -2
- package/dist/src/runtime/context/super-worker-compaction-failure.d.ts +1 -1
- package/dist/src/runtime/context/super-worker-compaction-failure.js +2 -1
- package/dist/src/runtime/context/super-worker-compaction-sidecar.d.ts +2 -1
- package/dist/src/runtime/context/super-worker-compaction-sidecar.js +9 -3
- package/dist/src/runtime/default-environment-adapters.d.ts +2 -1
- package/dist/src/runtime/default-environment-adapters.js +5 -1
- package/dist/src/runtime/knowledge-skills/available-skills-projection.d.ts +17 -0
- package/dist/src/runtime/knowledge-skills/available-skills-projection.js +66 -0
- package/dist/src/runtime/knowledge-skills/available-skills.d.ts +7 -0
- package/dist/src/runtime/knowledge-skills/available-skills.js +17 -0
- package/dist/src/runtime/knowledge-skills/builtins/abot-studio.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/abot-studio.js +27 -0
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +34 -0
- package/dist/src/runtime/knowledge-skills/builtins/skill-creator.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/skill-creator.js +29 -0
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +27 -0
- package/dist/src/runtime/knowledge-skills/catalog.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/catalog.js +12 -0
- package/dist/src/runtime/knowledge-skills/personal-contracts.d.ts +48 -0
- package/dist/src/runtime/knowledge-skills/personal-contracts.js +29 -0
- package/dist/src/runtime/knowledge-skills/personal-documents.d.ts +6 -0
- package/dist/src/runtime/knowledge-skills/personal-documents.js +56 -0
- package/dist/src/runtime/knowledge-skills/personal-management.d.ts +9 -0
- package/dist/src/runtime/knowledge-skills/personal-management.js +64 -0
- package/dist/src/runtime/knowledge-skills/personal-repository.d.ts +6 -0
- package/dist/src/runtime/knowledge-skills/personal-repository.js +76 -0
- package/dist/src/runtime/knowledge-skills/personal-store.d.ts +4 -0
- package/dist/src/runtime/knowledge-skills/personal-store.js +33 -0
- package/dist/src/runtime/knowledge-skills/read-evidence.d.ts +3 -0
- package/dist/src/runtime/knowledge-skills/read-evidence.js +13 -0
- package/dist/src/runtime/knowledge-skills/store.d.ts +19 -0
- package/dist/src/runtime/knowledge-skills/store.js +41 -0
- package/dist/src/runtime/local-application.d.ts +2 -1
- package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
- package/dist/src/runtime/local-host/app-service-dispatch.js +5 -0
- package/dist/src/runtime/local-host/client-services.d.ts +3 -1
- package/dist/src/runtime/local-host/client-services.js +3 -2
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +7 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
- package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.d.ts +5 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.js +28 -0
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +18 -0
- package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
- package/dist/src/runtime/long-term-memory/projection.js +1 -1
- package/dist/src/runtime/model/context-compaction-admission.d.ts +1 -0
- package/dist/src/runtime/model/context-compaction-admission.js +35 -1
- package/dist/src/runtime/model/context-compaction-contracts.d.ts +9 -1
- package/dist/src/runtime/model/invoke-step.js +6 -2
- package/dist/src/runtime/model/provider-failure.d.ts +13 -0
- package/dist/src/runtime/model/provider-failure.js +37 -0
- package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +4 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +7 -3
- package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.d.ts +4 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.js +48 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +8 -4
- package/dist/src/runtime/orchestration/role-calls/contracts.js +3 -3
- package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
- package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/skill-read.d.ts +47 -0
- package/dist/src/runtime/orchestration/role-calls/skill-read.js +196 -0
- package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.js +4 -2
- package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +4 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +4 -2
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +2 -2
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +10 -4
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
- package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.d.ts +2 -0
- package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.js +7 -2
- package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.d.ts +19 -0
- package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.js +43 -0
- package/dist/src/runtime/plugins/loader.js +7 -6
- package/dist/src/runtime/plugins/manifest-projection.js +3 -0
- package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
- package/dist/src/runtime/request/bound-runtime-handler.js +1 -0
- package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
- package/dist/src/runtime/request/contracts.d.ts +2 -0
- package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
- package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +2 -2
- package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope-surfaces.js +7 -0
- package/dist/src/runtime/request/execution-scope.d.ts +6 -2
- package/dist/src/runtime/request/execution-scope.js +11 -0
- package/dist/src/runtime/request/payload-settled-evidence.d.ts +11 -0
- package/dist/src/runtime/request/payload-settled-evidence.js +29 -0
- package/dist/src/runtime/request/prepared-execution.js +2 -0
- package/dist/src/runtime/request/role-call-delegation-events.d.ts +19 -0
- package/dist/src/runtime/request/role-call-delegation-events.js +52 -0
- package/dist/src/runtime/request/role-call-return-events.d.ts +19 -0
- package/dist/src/runtime/request/role-call-return-events.js +63 -0
- package/dist/src/runtime/request/role-executor-composition.js +2 -2
- package/dist/src/runtime/request/root-capability-binding.d.ts +24 -0
- package/dist/src/runtime/request/root-capability-binding.js +57 -0
- package/dist/src/runtime/request/root-capability-catalog.d.ts +16 -0
- package/dist/src/runtime/request/root-capability-catalog.js +20 -0
- package/dist/src/runtime/request/root-contract.d.ts +13 -1
- package/dist/src/runtime/request/root-execution-kernel.js +36 -68
- package/dist/src/runtime/request/root-reference-action.d.ts +15 -0
- package/dist/src/runtime/request/root-reference-action.js +48 -0
- package/dist/src/runtime/request/root-skill-read.d.ts +13 -0
- package/dist/src/runtime/request/root-skill-read.js +102 -0
- package/dist/src/runtime/request/runner.js +19 -3
- package/dist/src/runtime/request/super-payload-context-failure.js +13 -4
- package/dist/src/runtime/request/supervisor-root-execution.js +54 -1
- package/dist/src/runtime/request/supervisor-skill-edit-target.d.ts +9 -0
- package/dist/src/runtime/request/supervisor-skill-edit-target.js +25 -0
- package/dist/src/runtime/request/supervisor-skill-payload-context.d.ts +21 -0
- package/dist/src/runtime/request/supervisor-skill-payload-context.js +91 -0
- package/dist/src/runtime/request/supervisor-skill-write-preparation.d.ts +25 -0
- package/dist/src/runtime/request/supervisor-skill-write-preparation.js +71 -0
- package/dist/src/runtime/request/worker-capability-composition.d.ts +4 -1
- package/dist/src/runtime/request/worker-capability-composition.js +4 -1
- package/dist/src/runtime/request/worker-capability-payload.d.ts +1 -1
- package/dist/src/runtime/request/worker-capability-payload.js +44 -37
- package/dist/src/runtime/runtime-environment.d.ts +2 -0
- package/dist/src/runtime/runtime-environment.js +12 -1
- package/dist/src/runtime/scheduler/contracts.d.ts +4 -0
- package/dist/src/runtime/scheduler/run-list-filter.d.ts +11 -0
- package/dist/src/runtime/scheduler/run-list-filter.js +56 -0
- package/dist/src/runtime/scheduler/run-list-query.d.ts +2 -2
- package/dist/src/runtime/scheduler/run-list-query.js +4 -1
- package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +2 -0
- package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +2 -2
- package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +2 -34
- package/dist/src/runtime/steps/auditor-decision/input.js +21 -3
- package/dist/src/runtime/steps/auditor-decision/projection.js +5 -0
- package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
- package/dist/src/runtime/steps/auditor-decision/prompt.js +14 -3
- package/dist/src/runtime/steps/capability-execution-guidance.d.ts +7 -0
- package/dist/src/runtime/steps/capability-execution-guidance.js +28 -0
- package/dist/src/runtime/steps/capability-execution-instructions.d.ts +0 -2
- package/dist/src/runtime/steps/capability-execution-instructions.js +0 -2
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +5 -2
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +22 -3
- package/dist/src/runtime/steps/execution-agent/compaction.d.ts +3 -2
- package/dist/src/runtime/steps/execution-agent/compaction.js +9 -1
- package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
- package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
- package/dist/src/runtime/steps/execution-agent/format.js +2 -0
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/input.js +35 -2
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
- package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +42 -41
- package/dist/src/runtime/steps/execution-agent/refinement-input.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -1
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +6 -12
- package/dist/src/runtime/steps/execution-agent/run.js +5 -2
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
- package/dist/src/runtime/steps/execution-agent/state-context.js +3 -40
- package/dist/src/runtime/steps/knowledge-skill-instructions.d.ts +3 -0
- package/dist/src/runtime/steps/knowledge-skill-instructions.js +3 -0
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +4 -2
- package/dist/src/runtime/steps/planner-decision/capability-brief.js +5 -1
- package/dist/src/runtime/steps/planner-decision/input.d.ts +2 -2
- package/dist/src/runtime/steps/planner-decision/input.js +7 -1
- package/dist/src/runtime/steps/planner-decision/prompt.js +29 -49
- package/dist/src/runtime/steps/planner-graph/input.d.ts +2 -2
- package/dist/src/runtime/steps/planner-graph/input.js +9 -8
- package/dist/src/runtime/steps/planner-graph/prompt.js +2 -2
- package/dist/src/runtime/steps/planner-graph/run.d.ts +2 -2
- package/dist/src/runtime/steps/planner-graph/run.js +5 -5
- package/dist/src/runtime/steps/planner-graph/skill-guidance.d.ts +5 -0
- package/dist/src/runtime/steps/planner-graph/skill-guidance.js +62 -0
- package/dist/src/runtime/steps/reviewer-decision/final-evidence.d.ts +1 -0
- package/dist/src/runtime/steps/reviewer-decision/final-evidence.js +3 -1
- package/dist/src/runtime/steps/reviewer-decision/input.d.ts +3 -1
- package/dist/src/runtime/steps/reviewer-decision/input.js +2 -22
- package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +21 -0
- package/dist/src/runtime/steps/reviewer-decision/model-context.js +32 -1
- package/dist/src/runtime/steps/reviewer-decision/projection.js +4 -0
- package/dist/src/runtime/steps/reviewer-decision/prompt.d.ts +1 -1
- package/dist/src/runtime/steps/reviewer-decision/prompt.js +15 -4
- package/dist/src/runtime/steps/reviewer-decision/run.d.ts +2 -0
- package/dist/src/runtime/steps/reviewer-decision/run.js +6 -0
- package/dist/src/runtime/steps/skill-read-decision.d.ts +34 -0
- package/dist/src/runtime/steps/skill-read-decision.js +91 -0
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +22 -0
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +132 -0
- package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +9 -2
- package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +12 -3
- package/dist/src/runtime/steps/supervisor-decision/contracts.js +3 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +37 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +124 -0
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +5 -1
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +4 -0
- package/dist/src/runtime/steps/supervisor-decision/format.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/format.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +8 -1
- package/dist/src/runtime/steps/supervisor-decision/input.js +35 -11
- package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/parser.js +11 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +26 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +39 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +17 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation.js +65 -0
- package/dist/src/runtime/steps/supervisor-decision/presentation.d.ts +13 -0
- package/dist/src/runtime/steps/supervisor-decision/presentation.js +47 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +5 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +97 -106
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.js +20 -0
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +76 -158
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +21 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +29 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +16 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +44 -0
- package/dist/src/runtime/steps/supervisor-response/input.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-response/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-response/prompt.js +2 -0
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +24 -4
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +7 -0
- package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
- package/dist/src/runtime/steps/supervisor-skill-authoring/contract.d.ts +43 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/contract.js +85 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/input.d.ts +35 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/input.js +87 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/run.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/run.js +35 -0
- package/dist/src/runtime/steps/supervisor-skill-instructions.d.ts +4 -0
- package/dist/src/runtime/steps/supervisor-skill-instructions.js +4 -0
- package/dist/src/runtime/steps/worker-capability-scope-decision.js +14 -1
- package/dist/src/runtime/steps/worker-decision/contracts.d.ts +1 -0
- package/dist/src/runtime/steps/worker-decision/input/execution-guidance.d.ts +5 -0
- package/dist/src/runtime/steps/worker-decision/input/execution-guidance.js +31 -0
- package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +2 -25
- package/dist/src/runtime/steps/worker-decision/input/reference-context.js +4 -0
- package/dist/src/runtime/steps/worker-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/worker-decision/result-author.js +6 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
- package/dist/src/web-ui/app/app-bootstrap.js +3 -0
- package/dist/src/web-ui/app/app.js +7 -1
- package/dist/src/web-ui/app/components/automations/run-history-controls.js +77 -0
- package/dist/src/web-ui/app/components/automations/run-history.js +55 -0
- package/dist/src/web-ui/app/components/automations/run.js +3 -8
- package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
- package/dist/src/web-ui/app/components/automations/workspace.js +11 -2
- package/dist/src/web-ui/app/components/conversation-role-cards.js +27 -0
- package/dist/src/web-ui/app/components/conversation-role-delegations.d.ts +12 -0
- package/dist/src/web-ui/app/components/conversation-role-delegations.js +24 -0
- package/dist/src/web-ui/app/components/conversation-role-history.d.ts +13 -0
- package/dist/src/web-ui/app/components/conversation-role-history.js +81 -0
- package/dist/src/web-ui/app/components/conversation-role-returns.d.ts +12 -0
- package/dist/src/web-ui/app/components/conversation-role-returns.js +23 -0
- package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
- package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
- package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
- package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
- package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
- package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
- package/dist/src/web-ui/app/components/onboarding-workspace-access.js +1 -1
- package/dist/src/web-ui/app/components/operations-summary.js +2 -1
- package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +4 -1
- package/dist/src/web-ui/app/components/schedules/details.js +3 -2
- package/dist/src/web-ui/app/components/skills/workspace.js +119 -0
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
- package/dist/src/web-ui/app/components/spark-chat/settings.js +1 -1
- package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
- package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
- package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +1 -1
- package/dist/src/web-ui/app/components/system-host/rendering.js +3 -3
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
- package/dist/src/web-ui/app/components/workspace-shell.js +11 -1
- package/dist/src/web-ui/app/computer-access-feature.js +13 -1
- package/dist/src/web-ui/app/configuration-feature.js +2 -0
- package/dist/src/web-ui/app/controllers/automation-read-projection.js +8 -4
- package/dist/src/web-ui/app/controllers/automation-run-actions.js +3 -1
- package/dist/src/web-ui/app/controllers/automation-run-history.js +159 -0
- package/dist/src/web-ui/app/controllers/automations-controller.js +27 -11
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +6 -2
- package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
- package/dist/src/web-ui/app/controllers/realtime-event-controller.js +22 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +1 -1
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +7 -1
- package/dist/src/web-ui/app/controllers/skills-controller.js +237 -0
- package/dist/src/web-ui/app/dashboard-feature.js +9 -0
- package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +5 -0
- package/dist/src/web-ui/app/lib/conversation-role-model.js +63 -5
- package/dist/src/web-ui/app/lib/event-presentation.js +34 -0
- package/dist/src/web-ui/app/lib/reasoning-controls.js +6 -1
- package/dist/src/web-ui/app/lib/role-delegation-event.d.ts +18 -0
- package/dist/src/web-ui/app/lib/role-delegation-event.js +47 -0
- package/dist/src/web-ui/app/lib/role-return-event.d.ts +19 -0
- package/dist/src/web-ui/app/lib/role-return-event.js +36 -0
- package/dist/src/web-ui/app/lib/tool-activity-event.js +8 -6
- package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +50 -0
- package/dist/src/web-ui/app/lib/workspace-route.js +1 -0
- package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
- package/dist/src/web-ui/app/services/runtime-web-client/automations.d.ts +9 -1
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/skills.js +23 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/skills-feature.js +36 -0
- package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +58 -0
- package/dist/src/web-ui/app/styles/40-skills.css +34 -0
- package/dist/src/web-ui/app/styles/50-automations.css +24 -3
- package/dist/src/web-ui/app/styles/95-home-widgets.css +110 -0
- package/dist/src/web-ui/app/styles.css +2 -0
- package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
- package/dist/src/web-ui/app/ui-behavior.js +1 -0
- package/dist/src/web-ui/client-state/store.js +3 -2
- package/dist/src/web-ui/client-state/transaction-order.d.ts +2 -0
- package/dist/src/web-ui/client-state/transaction-order.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 +7 -0
- package/dist/src/web-ui/local-runtime/automation-routes.js +2 -1
- package/dist/src/web-ui/local-runtime/automation-run-page.d.ts +5 -0
- package/dist/src/web-ui/local-runtime/automation-run-page.js +26 -0
- package/dist/src/web-ui/local-runtime/skill-management-routes.d.ts +18 -0
- package/dist/src/web-ui/local-runtime/skill-management-routes.js +118 -0
- package/docs/configuration.md +8 -0
- package/docs/plugins.md +37 -32
- package/docs/runtime-public-contracts.md +37 -0
- package/examples/request-runner.config.example.json +3 -0
- package/package.json +1 -1
- package/plugins/capability-brief/plugin.json +1 -1
- package/plugins/code-outline/plugin.json +1 -1
- package/plugins/document-reader/plugin.json +1 -1
- package/plugins/exec/plugin.json +1 -1
- package/plugins/filesystem/plugin.json +1 -1
- package/plugins/json-inspector/plugin.json +1 -1
- package/plugins/local-search/plugin.json +1 -1
- package/plugins/memory/plugin.json +1 -1
- package/plugins/project-orientation/plugin.json +1 -1
- package/plugins/system/plugin.json +1 -1
- package/plugins/system-probe/plugin.json +1 -1
- package/plugins/web/plugin.json +1 -1
- package/plugins/web/skills/web_fetch_skill/SKILL.md +1 -2
- package/plugins/web/skills/web_search_skill/SKILL.md +3 -7
- package/src/runtime/README.md +96 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, fstatSync, openSync, readFileSync } from "node:fs";
|
|
3
|
+
import { mkdir, open, rename, rm } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { withFileLock } from "../adapters/long-term-memory/file-lock.js";
|
|
6
|
+
import { fileSystemErrorCode } from "../adapters/long-term-memory/file-lock/contracts.js";
|
|
7
|
+
import { KnowledgeSkillError, PERSONAL_SKILL_LIMITS } from "./personal-contracts.js";
|
|
8
|
+
import { parsePersonalSkillSnapshot } from "./personal-documents.js";
|
|
9
|
+
/** Runtime-owned storage; no model-provided paths and no packaged-document writes. */
|
|
10
|
+
export function createPersonalSkillRepository(directory) {
|
|
11
|
+
const file = join(directory, "personal.json");
|
|
12
|
+
function read() {
|
|
13
|
+
let descriptor;
|
|
14
|
+
try {
|
|
15
|
+
descriptor = openSync(file, "r");
|
|
16
|
+
if (fstatSync(descriptor).size > PERSONAL_SKILL_LIMITS.storeBytes)
|
|
17
|
+
throw new KnowledgeSkillError("knowledge_skill_storage_too_large");
|
|
18
|
+
const text = readFileSync(descriptor, "utf8");
|
|
19
|
+
try {
|
|
20
|
+
return parsePersonalSkillSnapshot(JSON.parse(text));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new KnowledgeSkillError("knowledge_skill_storage_invalid");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (fileSystemErrorCode(error) === "ENOENT")
|
|
28
|
+
return [];
|
|
29
|
+
if (error instanceof KnowledgeSkillError)
|
|
30
|
+
throw error;
|
|
31
|
+
throw new KnowledgeSkillError("knowledge_skill_storage_unavailable");
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
if (descriptor !== undefined)
|
|
35
|
+
closeSync(descriptor);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function write(documents) {
|
|
39
|
+
const content = JSON.stringify({ schemaVersion: 2, skills: documents });
|
|
40
|
+
if (Buffer.byteLength(content, "utf8") > PERSONAL_SKILL_LIMITS.storeBytes)
|
|
41
|
+
throw new KnowledgeSkillError("knowledge_skill_storage_too_large");
|
|
42
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
43
|
+
try {
|
|
44
|
+
const handle = await open(temporary, "wx", 0o600);
|
|
45
|
+
try {
|
|
46
|
+
await handle.writeFile(content, "utf8");
|
|
47
|
+
await handle.sync();
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await handle.close();
|
|
51
|
+
}
|
|
52
|
+
await rename(temporary, file);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await rm(temporary, { force: true });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
read,
|
|
60
|
+
async update(change) {
|
|
61
|
+
try {
|
|
62
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
63
|
+
return await withFileLock(join(directory, "personal.lock"), async () => {
|
|
64
|
+
const next = change(read());
|
|
65
|
+
await write(next);
|
|
66
|
+
return next;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof KnowledgeSkillError)
|
|
71
|
+
throw error;
|
|
72
|
+
throw new KnowledgeSkillError("knowledge_skill_storage_unavailable");
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { KnowledgeSkillStore } from "./store.js";
|
|
2
|
+
import type { ManagedKnowledgeSkillStore } from "./personal-contracts.js";
|
|
3
|
+
/** One Store binds discovery, reads and personal authoring within one Runtime environment. */
|
|
4
|
+
export declare function createRuntimeKnowledgeSkillStore(runtimeDirectory: string, system?: KnowledgeSkillStore): ManagedKnowledgeSkillStore;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { builtinKnowledgeSkillStore } from "./catalog.js";
|
|
3
|
+
import { createPersonalSkillRepository } from "./personal-repository.js";
|
|
4
|
+
import { projectPersonalSkillDocument } from "./personal-documents.js";
|
|
5
|
+
import { createPersonalSkillManagement } from "./personal-management.js";
|
|
6
|
+
/** One Store binds discovery, reads and personal authoring within one Runtime environment. */
|
|
7
|
+
export function createRuntimeKnowledgeSkillStore(runtimeDirectory, system = builtinKnowledgeSkillStore) {
|
|
8
|
+
const repository = createPersonalSkillRepository(join(runtimeDirectory, "skills"));
|
|
9
|
+
const personal = createPersonalSkillManagement(repository, system);
|
|
10
|
+
return Object.freeze({
|
|
11
|
+
personalSkills: personal.service,
|
|
12
|
+
list() {
|
|
13
|
+
return [
|
|
14
|
+
...system.list().map((skill) => ({ ...skill, source: "system" })),
|
|
15
|
+
...repository.read().filter((skill) => !skill.archived)
|
|
16
|
+
.map(({ skillId, name, description }) => ({ skillId, name, description, source: "personal" })),
|
|
17
|
+
];
|
|
18
|
+
},
|
|
19
|
+
read(skillId) {
|
|
20
|
+
const packaged = system.read(skillId);
|
|
21
|
+
if (packaged)
|
|
22
|
+
return { ...packaged, source: "system" };
|
|
23
|
+
const personal = repository.read().find((skill) => skill.skillId === skillId && !skill.archived);
|
|
24
|
+
return personal ? projectPersonalSkillDocument(personal) : undefined;
|
|
25
|
+
},
|
|
26
|
+
async create(input) {
|
|
27
|
+
return projectPersonalSkillDocument(await personal.create(input));
|
|
28
|
+
},
|
|
29
|
+
async update(skillId, expectedRevision, changes) {
|
|
30
|
+
return projectPersonalSkillDocument(await personal.update(skillId, expectedRevision, changes));
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CapabilityAdapterResult } from "../orchestration/capability-adapters/index.js";
|
|
2
|
+
/** Classify canonical core reads before a consumer discards tool provenance. */
|
|
3
|
+
export declare function isSuccessfulCoreSkillRead(capabilityId: string, outcome: "succeeded" | "failed" | null, result?: CapabilityAdapterResult): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CORE_TOOL_CONTRACTS } from "../capabilities/core-tool-contracts.js";
|
|
2
|
+
/** Classify canonical core reads before a consumer discards tool provenance. */
|
|
3
|
+
export function isSuccessfulCoreSkillRead(capabilityId, outcome, result) {
|
|
4
|
+
if (outcome !== "succeeded")
|
|
5
|
+
return false;
|
|
6
|
+
if (capabilityId !== "read_skill" && capabilityId !== "read_skills")
|
|
7
|
+
return false;
|
|
8
|
+
if (result?.kind !== "registered_tool_execution_result_v1")
|
|
9
|
+
return false;
|
|
10
|
+
if (result.result.tool !== CORE_TOOL_CONTRACTS.skills.name)
|
|
11
|
+
return false;
|
|
12
|
+
return result.result.ok;
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type KnowledgeSkillMetadata = Readonly<{
|
|
2
|
+
skillId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
source?: "system" | "personal";
|
|
6
|
+
}>;
|
|
7
|
+
export type KnowledgeSkillDocument = KnowledgeSkillMetadata & Readonly<{
|
|
8
|
+
content: string;
|
|
9
|
+
revision?: number;
|
|
10
|
+
}>;
|
|
11
|
+
export interface KnowledgeSkillStore {
|
|
12
|
+
list(): readonly KnowledgeSkillMetadata[];
|
|
13
|
+
read(skillId: string): KnowledgeSkillDocument | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare const KNOWLEDGE_SKILL_ID_MAX_LENGTH = 128;
|
|
16
|
+
export declare const KNOWLEDGE_SKILL_READ_MAX_ITEMS = 8;
|
|
17
|
+
export declare function isKnowledgeSkillId(value: unknown): value is string;
|
|
18
|
+
/** An immutable document catalog. It has no role, plugin or context lifecycle. */
|
|
19
|
+
export declare function createKnowledgeSkillStore(definitions: readonly KnowledgeSkillDocument[]): KnowledgeSkillStore;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const KNOWLEDGE_SKILL_ID_MAX_LENGTH = 128;
|
|
2
|
+
export const KNOWLEDGE_SKILL_READ_MAX_ITEMS = 8;
|
|
3
|
+
export function isKnowledgeSkillId(value) {
|
|
4
|
+
if (typeof value !== "string")
|
|
5
|
+
return false;
|
|
6
|
+
if (value.length === 0 || value.length > KNOWLEDGE_SKILL_ID_MAX_LENGTH)
|
|
7
|
+
return false;
|
|
8
|
+
return value.trim() === value;
|
|
9
|
+
}
|
|
10
|
+
function hasKnowledgeSkillDocumentText(document) {
|
|
11
|
+
if (typeof document.name !== "string" || !document.name.trim())
|
|
12
|
+
return false;
|
|
13
|
+
if (typeof document.description !== "string" || !document.description.trim())
|
|
14
|
+
return false;
|
|
15
|
+
return typeof document.content === "string" && document.content.trim().length > 0;
|
|
16
|
+
}
|
|
17
|
+
/** An immutable document catalog. It has no role, plugin or context lifecycle. */
|
|
18
|
+
export function createKnowledgeSkillStore(definitions) {
|
|
19
|
+
const documents = new Map();
|
|
20
|
+
const metadata = [];
|
|
21
|
+
for (const definition of definitions) {
|
|
22
|
+
if (!isKnowledgeSkillId(definition.skillId))
|
|
23
|
+
throw new Error("knowledge_skill_id_invalid");
|
|
24
|
+
if (!hasKnowledgeSkillDocumentText(definition))
|
|
25
|
+
throw new Error("knowledge_skill_document_invalid");
|
|
26
|
+
if (documents.has(definition.skillId))
|
|
27
|
+
throw new Error("knowledge_skill_id_duplicate");
|
|
28
|
+
const entry = Object.freeze({
|
|
29
|
+
skillId: definition.skillId,
|
|
30
|
+
name: definition.name,
|
|
31
|
+
description: definition.description,
|
|
32
|
+
});
|
|
33
|
+
metadata.push(entry);
|
|
34
|
+
documents.set(entry.skillId, Object.freeze({ ...entry, content: definition.content }));
|
|
35
|
+
}
|
|
36
|
+
const catalog = Object.freeze(metadata);
|
|
37
|
+
return Object.freeze({
|
|
38
|
+
list: () => catalog,
|
|
39
|
+
read: (skillId) => documents.get(skillId),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -17,7 +17,7 @@ export declare function createLocalRuntimeApplication(config?: RuntimeConfig, op
|
|
|
17
17
|
latestRunId?: string | undefined;
|
|
18
18
|
latestRunStatus?: import("./scheduler/contracts.js").SchedulerRunStatus | "stopping" | "completed_with_skips" | undefined;
|
|
19
19
|
publishedRevision?: number;
|
|
20
|
-
status: "
|
|
20
|
+
status: "archived" | "active" | "paused" | "draft";
|
|
21
21
|
id: string;
|
|
22
22
|
title: string;
|
|
23
23
|
draftRevision: number;
|
|
@@ -303,6 +303,7 @@ export declare function createLocalRuntimeApplication(config?: RuntimeConfig, op
|
|
|
303
303
|
project: import("../sessions/project-binding.js").SessionProject;
|
|
304
304
|
}>;
|
|
305
305
|
}>;
|
|
306
|
+
personalSkills: import("./knowledge-skills/personal-contracts.js").PersonalSkillManagementService;
|
|
306
307
|
config: RuntimeConfig;
|
|
307
308
|
}>;
|
|
308
309
|
requests: RuntimeRequestHandler;
|
|
@@ -4,4 +4,5 @@ export declare const LOCAL_PROJECT_METHODS: readonly ["list", "get", "create", "
|
|
|
4
4
|
export declare const LOCAL_ATTACHMENT_METHODS: readonly ["saveAttachment", "validateAttachmentReferences", "resolveAttachment", "deleteAttachment", "deleteSessionAttachments"];
|
|
5
5
|
export declare const LOCAL_SCHEDULER_METHODS: readonly ["tick", "create", "list", "get", "update", "pause", "resume", "cancel", "runNow", "deleteSession", "listRuns"];
|
|
6
6
|
export declare const LOCAL_AUTOMATION_METHODS: readonly ["list", "create", "createDraftPlan", "applyDraftPlan", "getDraft", "deleteDraft", "archive", "restore", "getPublishedDefinition", "updateDraft", "getSavedAgent", "listSavedAgents", "saveAgentFromDraft", "validate", "catalog", "getGrant", "replaceGrant", "publish", "activate", "pause", "runNow", "listRuns", "getRun", "getStepEvidence", "stopRun", "rerun"];
|
|
7
|
+
export declare const LOCAL_PERSONAL_SKILL_METHODS: readonly ["list", "get", "create", "updateContent", "archive", "restore"];
|
|
7
8
|
export declare function dispatchLocalServiceCall(services: RuntimeEnvironmentServices, method: string, args: readonly unknown[]): Promise<unknown>;
|
|
@@ -76,6 +76,9 @@ export const LOCAL_AUTOMATION_METHODS = [
|
|
|
76
76
|
"stopRun",
|
|
77
77
|
"rerun",
|
|
78
78
|
];
|
|
79
|
+
export const LOCAL_PERSONAL_SKILL_METHODS = [
|
|
80
|
+
"list", "get", "create", "updateContent", "archive", "restore",
|
|
81
|
+
];
|
|
79
82
|
function selectServiceMethod(target, method, methods) {
|
|
80
83
|
if (!methods.includes(method))
|
|
81
84
|
throw new Error("local_runtime_method_unknown");
|
|
@@ -90,6 +93,8 @@ export async function dispatchLocalServiceCall(services, method, args) {
|
|
|
90
93
|
const [service, operation, extra] = method.split(".");
|
|
91
94
|
if (!operation || extra)
|
|
92
95
|
throw new Error("local_runtime_method_unknown");
|
|
96
|
+
if (service === "personalSkills")
|
|
97
|
+
return selectServiceMethod(services.personalSkills, operation, LOCAL_PERSONAL_SKILL_METHODS)(...args);
|
|
93
98
|
if (service === "sessions")
|
|
94
99
|
return selectServiceMethod(services.sessions, operation, LOCAL_SESSION_METHODS)(...args);
|
|
95
100
|
if (service === "projects")
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PersonalSkillManagementService } from "../knowledge-skills/personal-contracts.js";
|
|
1
2
|
import type { SessionStore } from "../ports.js";
|
|
2
3
|
import type { RuntimeAttachmentStore } from "../attachments/store.js";
|
|
3
4
|
import type { SchedulerService } from "../scheduler/contracts.js";
|
|
@@ -12,7 +13,7 @@ export declare function createLocalServiceClients(call: LocalRuntimeCallHandler)
|
|
|
12
13
|
latestRunId?: string | undefined;
|
|
13
14
|
latestRunStatus?: import("../scheduler/contracts.js").SchedulerRunStatus | "stopping" | "completed_with_skips" | undefined;
|
|
14
15
|
publishedRevision?: number;
|
|
15
|
-
status: "
|
|
16
|
+
status: "archived" | "active" | "paused" | "draft";
|
|
16
17
|
id: string;
|
|
17
18
|
title: string;
|
|
18
19
|
draftRevision: number;
|
|
@@ -298,4 +299,5 @@ export declare function createLocalServiceClients(call: LocalRuntimeCallHandler)
|
|
|
298
299
|
project: import("../../sessions/project-binding.js").SessionProject;
|
|
299
300
|
}>;
|
|
300
301
|
}>;
|
|
302
|
+
personalSkills: PersonalSkillManagementService;
|
|
301
303
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { bindManagedSessionAttachmentDeletion } from "../session/session-attachment-deletion.js";
|
|
2
|
-
import { LOCAL_SESSION_METHODS, LOCAL_PROJECT_METHODS, LOCAL_ATTACHMENT_METHODS, LOCAL_SCHEDULER_METHODS, LOCAL_AUTOMATION_METHODS, } from "./app-service-dispatch.js";
|
|
2
|
+
import { LOCAL_PERSONAL_SKILL_METHODS, LOCAL_SESSION_METHODS, LOCAL_PROJECT_METHODS, LOCAL_ATTACHMENT_METHODS, LOCAL_SCHEDULER_METHODS, LOCAL_AUTOMATION_METHODS, } from "./app-service-dispatch.js";
|
|
3
3
|
/** Projections of owner APIs; lifecycle remains with the managed application. */
|
|
4
4
|
export function createLocalServiceClients(call) {
|
|
5
5
|
const service = (prefix, methods) => Object.fromEntries(methods.map((method) => [
|
|
@@ -12,5 +12,6 @@ export function createLocalServiceClients(call) {
|
|
|
12
12
|
const automations = service("automations", LOCAL_AUTOMATION_METHODS);
|
|
13
13
|
bindManagedSessionAttachmentDeletion(sessions, attachments);
|
|
14
14
|
const projects = service("projects", LOCAL_PROJECT_METHODS);
|
|
15
|
-
|
|
15
|
+
const personalSkills = service("personalSkills", LOCAL_PERSONAL_SKILL_METHODS);
|
|
16
|
+
return { sessions, attachments, scheduler, automations, projects, personalSkills };
|
|
16
17
|
}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import type { ChatMessage } from "../../../model-gateway/types.js";
|
|
2
2
|
import type { RequestExecutionScope } from "../../request/execution-scope.js";
|
|
3
3
|
import type { RequestSteeringSnapshot } from "../../request/request-steering.js";
|
|
4
|
-
import type { LearningKnowledgeEntry } from "../maturation/contracts.js";
|
|
4
|
+
import type { LearningKnowledgeEntry, LearningKnowledgeContext } from "../maturation/contracts.js";
|
|
5
5
|
import type { ConversationMemoryEvidence } from "../maturation/evidence-contracts.js";
|
|
6
6
|
export type ConversationMemoryAuthoringContext = Readonly<{
|
|
7
7
|
evidence: ConversationMemoryEvidence;
|
|
8
8
|
targets: ReadonlyMap<string, LearningKnowledgeEntry>;
|
|
9
|
+
omitted: number;
|
|
9
10
|
userMessages: readonly string[];
|
|
10
11
|
message: ChatMessage;
|
|
11
12
|
}>;
|
|
12
13
|
export declare function canAuthorConversationMemory(request: Pick<RequestExecutionScope, "longTermMemory">, context: ConversationMemoryAuthoringContext | undefined): boolean;
|
|
13
14
|
/** Request-local authoring reference; never part of ordinary recall or routing. */
|
|
14
15
|
export declare function prepareConversationMemoryAuthoring(request: Pick<RequestExecutionScope, "longTermMemory" | "requestId" | "sessionId" | "prompt" | "abortSignal">, steering: RequestSteeringSnapshot): Promise<ConversationMemoryAuthoringContext | undefined>;
|
|
16
|
+
export declare function prepareConversationMemoryKnowledge(request: Pick<RequestExecutionScope, "longTermMemory" | "requestId" | "sessionId" | "prompt" | "abortSignal">, steering: RequestSteeringSnapshot): Promise<LearningKnowledgeContext | undefined>;
|
|
17
|
+
/** Shared deterministic binding for decision and response authoring. No retrieval. */
|
|
18
|
+
export declare function buildConversationMemoryAuthoringContext(request: Pick<RequestExecutionScope, "requestId" | "sessionId" | "prompt">, steering: RequestSteeringSnapshot, context: Pick<LearningKnowledgeContext, "entries" | "omitted" | "referenceTime">): ConversationMemoryAuthoringContext;
|
|
19
|
+
/** The same contract projection must precede ledger cloning and durable approval capture. */
|
|
20
|
+
export declare function projectConversationMemoryKnowledge(context: LearningKnowledgeContext): LearningKnowledgeContext;
|
|
@@ -10,6 +10,10 @@ export function canAuthorConversationMemory(request, context) {
|
|
|
10
10
|
}
|
|
11
11
|
/** Request-local authoring reference; never part of ordinary recall or routing. */
|
|
12
12
|
export async function prepareConversationMemoryAuthoring(request, steering) {
|
|
13
|
+
const context = await prepareConversationMemoryKnowledge(request, steering);
|
|
14
|
+
return context ? buildConversationMemoryAuthoringContext(request, steering, context) : undefined;
|
|
15
|
+
}
|
|
16
|
+
export async function prepareConversationMemoryKnowledge(request, steering) {
|
|
13
17
|
const learning = request.longTermMemory?.learning;
|
|
14
18
|
if (!request.longTermMemory?.enabled || !learning)
|
|
15
19
|
return undefined;
|
|
@@ -19,31 +23,7 @@ export async function prepareConversationMemoryAuthoring(request, steering) {
|
|
|
19
23
|
abortSignal: request.abortSignal,
|
|
20
24
|
debugRequestId: request.requestId,
|
|
21
25
|
});
|
|
22
|
-
|
|
23
|
-
sourceSessionId: request.sessionId,
|
|
24
|
-
sourceRequestId: request.requestId,
|
|
25
|
-
observedAt: context.referenceTime,
|
|
26
|
-
evidenceDigest: createHash("sha256").update(JSON.stringify([
|
|
27
|
-
request.prompt, ...steering.updates.map(({ text }) => text),
|
|
28
|
-
])).digest("hex"),
|
|
29
|
-
});
|
|
30
|
-
const entries = structuredClone(context.entries);
|
|
31
|
-
const targets = new Map(entries.map((entry, index) => [`k${index + 1}`, Object.freeze(entry)]));
|
|
32
|
-
return Object.freeze({
|
|
33
|
-
evidence, targets,
|
|
34
|
-
userMessages: Object.freeze([request.prompt, ...steering.updates.map(({ text }) => text)]),
|
|
35
|
-
message: Object.freeze({ role: "system", content: JSON.stringify({
|
|
36
|
-
kind: "conversation_memory_authoring_reference_v1",
|
|
37
|
-
authority: "passive_memory_reference",
|
|
38
|
-
purpose: "assess_lasting_user_knowledge_and_resolve_optional_update_targets",
|
|
39
|
-
applicability: "memoryCandidates_only",
|
|
40
|
-
presenceEffect: "not_user_intent_fresh_evidence_or_action_authority",
|
|
41
|
-
targetPolicy: "null_creates_candidate_only_use_supplied_mutable_refs_for_updates",
|
|
42
|
-
omitted: context.omitted,
|
|
43
|
-
omissionMeaning: "unlisted_knowledge_is_unknown_and_cannot_be_targeted",
|
|
44
|
-
entries: [...targets].map(([ref, { id: _id, version: _version, ...entry }]) => ({ ref, ...entry })),
|
|
45
|
-
}) }),
|
|
46
|
-
});
|
|
26
|
+
return context;
|
|
47
27
|
}
|
|
48
28
|
catch (error) {
|
|
49
29
|
request.abortSignal.throwIfAborted();
|
|
@@ -53,3 +33,49 @@ export async function prepareConversationMemoryAuthoring(request, steering) {
|
|
|
53
33
|
return undefined;
|
|
54
34
|
}
|
|
55
35
|
}
|
|
36
|
+
/** Shared deterministic binding for decision and response authoring. No retrieval. */
|
|
37
|
+
export function buildConversationMemoryAuthoringContext(request, steering, context) {
|
|
38
|
+
const evidence = Object.freeze({
|
|
39
|
+
sourceSessionId: request.sessionId,
|
|
40
|
+
sourceRequestId: request.requestId,
|
|
41
|
+
observedAt: context.referenceTime,
|
|
42
|
+
evidenceDigest: createHash("sha256").update(JSON.stringify([
|
|
43
|
+
request.prompt, ...steering.updates.map(({ text }) => text),
|
|
44
|
+
])).digest("hex"),
|
|
45
|
+
});
|
|
46
|
+
// Project only contract fields, including when entries come from a saved checkpoint.
|
|
47
|
+
const entries = context.entries.map(projectConversationMemoryKnowledgeEntry);
|
|
48
|
+
const targets = new Map(entries.map((entry, index) => [`k${index + 1}`, Object.freeze(entry)]));
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
evidence, targets, omitted: context.omitted,
|
|
51
|
+
userMessages: Object.freeze([request.prompt, ...steering.updates.map(({ text }) => text)]),
|
|
52
|
+
message: Object.freeze({ role: "system", content: JSON.stringify({
|
|
53
|
+
kind: "conversation_memory_authoring_reference_v1",
|
|
54
|
+
authority: "passive_memory_reference",
|
|
55
|
+
purpose: "assess_lasting_user_knowledge_and_resolve_optional_update_targets",
|
|
56
|
+
applicability: "memoryCandidates_only",
|
|
57
|
+
presenceEffect: "not_user_intent_fresh_evidence_or_action_authority",
|
|
58
|
+
targetPolicy: "null_creates_candidate_only_use_supplied_mutable_refs_for_updates",
|
|
59
|
+
omitted: context.omitted,
|
|
60
|
+
omissionMeaning: "unlisted_knowledge_is_unknown_and_cannot_be_targeted",
|
|
61
|
+
entries: [...targets].map(([ref, { id: _id, version: _version, ...entry }]) => ({ ref, ...entry })),
|
|
62
|
+
}) }),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** The same contract projection must precede ledger cloning and durable approval capture. */
|
|
66
|
+
export function projectConversationMemoryKnowledge(context) {
|
|
67
|
+
return {
|
|
68
|
+
kind: context.kind, authority: context.authority, presenceEffect: context.presenceEffect,
|
|
69
|
+
repositoryRevision: context.repositoryRevision, knowledgeRevision: context.knowledgeRevision,
|
|
70
|
+
referenceTime: context.referenceTime, omitted: context.omitted,
|
|
71
|
+
entries: context.entries.map(projectConversationMemoryKnowledgeEntry),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function projectConversationMemoryKnowledgeEntry(entry) {
|
|
75
|
+
return {
|
|
76
|
+
kind: entry.kind, id: entry.id, version: entry.version,
|
|
77
|
+
content: entry.content, tags: [...entry.tags], mutable: entry.mutable,
|
|
78
|
+
score: entry.score, reason: entry.reason, certainty: entry.certainty,
|
|
79
|
+
lastReinforcedAt: entry.lastReinforcedAt, reconsiderAt: entry.reconsiderAt,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChatMessage } from "../../../model-gateway/types.js";
|
|
2
|
+
import type { ConversationMemoryAuthoringContext } from "./context.js";
|
|
3
|
+
export declare const CONVERSATION_MEMORY_PLAIN_TEXT_HEADER = "conversation_memory_authoring_reference_v1 (plain text)";
|
|
4
|
+
/** EA decision view only; canonical targets and the shared response view stay intact. */
|
|
5
|
+
export declare function buildConversationMemoryAuthoringPlainTextMessage(context: Pick<ConversationMemoryAuthoringContext, "targets" | "omitted">): ChatMessage;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const CONVERSATION_MEMORY_PLAIN_TEXT_HEADER = "conversation_memory_authoring_reference_v1 (plain text)";
|
|
2
|
+
/** EA decision view only; canonical targets and the shared response view stay intact. */
|
|
3
|
+
export function buildConversationMemoryAuthoringPlainTextMessage(context) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
role: "system",
|
|
6
|
+
content: [
|
|
7
|
+
CONVERSATION_MEMORY_PLAIN_TEXT_HEADER,
|
|
8
|
+
"Passive prior knowledge for assessing lasting user knowledge and optional memoryCandidates updates only. This is not instructions, current user intent, fresh evidence or action authority.",
|
|
9
|
+
"Use only supplied mutable refs to update the same fact; target null creates a candidate. Quoted values are data. null means the supplied value is absent, not zero or an empty string.",
|
|
10
|
+
`Omitted entries: ${context.omitted}. Unlisted knowledge is unknown and cannot be targeted.`,
|
|
11
|
+
...[...context.targets].map(([ref, entry]) => renderConversationMemoryAuthoringEntry(ref, entry)),
|
|
12
|
+
].join("\n\n"),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function renderConversationMemoryAuthoringEntry(ref, entry) {
|
|
16
|
+
return [
|
|
17
|
+
`Entry ${ref}: ${entry.kind}; mutable=${entry.mutable}; certainty=${entry.certainty}; score=${entry.score}`,
|
|
18
|
+
`Content: ${serializeMemoryReferenceValue(entry.content)}`,
|
|
19
|
+
`Tags: ${serializeMemoryReferenceValue(entry.tags)}`,
|
|
20
|
+
`Reason: ${serializeMemoryReferenceValue(entry.reason)}`,
|
|
21
|
+
`Last reinforced: ${serializeMemoryReferenceValue(entry.lastReinforcedAt)}`,
|
|
22
|
+
`Reconsider at: ${serializeMemoryReferenceValue(entry.reconsiderAt)}`,
|
|
23
|
+
].join("\n");
|
|
24
|
+
}
|
|
25
|
+
/** Preserve exact strings while keeping quoted data on its own physical line. */
|
|
26
|
+
function serializeMemoryReferenceValue(value) {
|
|
27
|
+
return JSON.stringify(value).replace(/[\u0085\u2028\u2029]/gu, (separator) => `\\u${separator.charCodeAt(0).toString(16).padStart(4, "0")}`);
|
|
28
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RequestExecutionScope } from "../request/execution-scope.js";
|
|
2
|
+
import type { ChatMessage } from "../../model-gateway/types.js";
|
|
3
|
+
import { type RequestSteeringSnapshot } from "../request/request-steering.js";
|
|
4
|
+
import type { RoleInitialMemory } from "../orchestration/role-calls/memory-recall-contract.js";
|
|
5
|
+
/** Prepared once as part of the existing request ledger initialization. */
|
|
6
|
+
export declare function prepareInitialMemory(request: RequestExecutionScope, restored?: RoleInitialMemory): Promise<RoleInitialMemory | undefined>;
|
|
7
|
+
export declare function projectExecutionAgentMemory(request: RequestExecutionScope, initial: RoleInitialMemory | undefined, steering: RequestSteeringSnapshot): Readonly<{
|
|
8
|
+
memoryMessage: ChatMessage | undefined;
|
|
9
|
+
authoringContext: Readonly<{
|
|
10
|
+
evidence: import("./maturation/evidence-contracts.js").ConversationMemoryEvidence;
|
|
11
|
+
targets: ReadonlyMap<string, import("./maturation/contracts.js").LearningKnowledgeEntry>;
|
|
12
|
+
omitted: number;
|
|
13
|
+
userMessages: readonly string[];
|
|
14
|
+
message: ChatMessage;
|
|
15
|
+
}> | undefined;
|
|
16
|
+
authoringEnabled: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
export type ExecutionMemoryProjection = ReturnType<typeof projectExecutionAgentMemory>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { resolveRequestSteeringInbox } from "../request/request-steering.js";
|
|
2
|
+
import { retrieveResponseLongTermMemory } from "./response-context.js";
|
|
3
|
+
import { prepareConversationMemoryKnowledge, buildConversationMemoryAuthoringContext, canAuthorConversationMemory, projectConversationMemoryKnowledge, } from "./conversation-authoring/context.js";
|
|
4
|
+
/** Prepared once as part of the existing request ledger initialization. */
|
|
5
|
+
export async function prepareInitialMemory(request, restored) {
|
|
6
|
+
if (!usesInitialMemory(request))
|
|
7
|
+
return undefined;
|
|
8
|
+
if (restored !== undefined)
|
|
9
|
+
return restored;
|
|
10
|
+
request.abortSignal.throwIfAborted();
|
|
11
|
+
const steering = resolveRequestSteeringInbox(request.requestSteering).snapshot();
|
|
12
|
+
const message = await retrieveResponseLongTermMemory(request, steering);
|
|
13
|
+
request.abortSignal.throwIfAborted();
|
|
14
|
+
// EA prepares authoring targets at startup; Supervisor keeps its terminal step.
|
|
15
|
+
const knowledge = usesInitialExecutionMemory(request)
|
|
16
|
+
? await prepareConversationMemoryKnowledge(request, steering)
|
|
17
|
+
: undefined;
|
|
18
|
+
request.abortSignal.throwIfAborted();
|
|
19
|
+
return Object.freeze({
|
|
20
|
+
...(message ? { message: projectPersistentMemoryMessage(message) } : {}),
|
|
21
|
+
...(knowledge ? { knowledge: projectConversationMemoryKnowledge(knowledge) } : {}),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function projectPersistentMemoryMessage(message) {
|
|
25
|
+
if (!message.attachments)
|
|
26
|
+
return message;
|
|
27
|
+
return { ...message, attachments: message.attachments.filter(isPersistentMemoryAttachment) };
|
|
28
|
+
}
|
|
29
|
+
function isPersistentMemoryAttachment(attachment) {
|
|
30
|
+
return attachment.toolEvidence === undefined;
|
|
31
|
+
}
|
|
32
|
+
function usesInitialMemory(request) {
|
|
33
|
+
if (!request.longTermMemory?.enabled)
|
|
34
|
+
return false;
|
|
35
|
+
if (request.executionPolicy.authority.id === "execution-agent-v1")
|
|
36
|
+
return true;
|
|
37
|
+
return request.executionPolicy.authority.id === "supervisor-worker-v1";
|
|
38
|
+
}
|
|
39
|
+
export function projectExecutionAgentMemory(request, initial, steering) {
|
|
40
|
+
if (!usesInitialExecutionMemory(request))
|
|
41
|
+
return { memoryMessage: undefined, authoringContext: undefined, authoringEnabled: false };
|
|
42
|
+
const authoringContext = initial?.knowledge
|
|
43
|
+
? buildConversationMemoryAuthoringContext(request, steering, {
|
|
44
|
+
...initial.knowledge, referenceTime: new Date().toISOString(),
|
|
45
|
+
})
|
|
46
|
+
: undefined;
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
memoryMessage: initial?.message,
|
|
49
|
+
authoringContext,
|
|
50
|
+
authoringEnabled: canAuthorConversationMemory(request, authoringContext),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function usesInitialExecutionMemory(request) {
|
|
54
|
+
if (!request.longTermMemory?.enabled)
|
|
55
|
+
return false;
|
|
56
|
+
return request.executionPolicy.authority.id === "execution-agent-v1";
|
|
57
|
+
}
|
|
@@ -32,7 +32,7 @@ function serializeProjection(records) {
|
|
|
32
32
|
return JSON.stringify({
|
|
33
33
|
kind: LONG_TERM_MEMORY_MESSAGE_KIND,
|
|
34
34
|
authority: "passive_reference",
|
|
35
|
-
purpose: "
|
|
35
|
+
purpose: "support_root_decisions_and_response_authoring",
|
|
36
36
|
memories: records.map((record) => ({
|
|
37
37
|
content: record.content,
|
|
38
38
|
tags: record.tags,
|
|
@@ -14,6 +14,7 @@ export declare function admitCompactedContext(params: CompactionEnvelope & Reado
|
|
|
14
14
|
controller: ModelStepContextCompactionController | undefined;
|
|
15
15
|
assess(messages: readonly ChatMessage[]): Promise<RequestMessagesBudgetAssessment>;
|
|
16
16
|
assertCurrent(): void;
|
|
17
|
+
boundSteeringVersion?: number;
|
|
17
18
|
abortSignal: AbortSignal;
|
|
18
19
|
identity: ContextCompactionIdentity;
|
|
19
20
|
onEvent?: (name: string, extra?: Record<string, unknown>) => void;
|
|
@@ -2,6 +2,7 @@ import { assertCompactionStagePlan, assertPreparationStageBinding, } from "./con
|
|
|
2
2
|
import { resolveRequestBudgetInputTokens, } from "../context/request-context-budget.js";
|
|
3
3
|
import { ContextCompactionDiagnostics, compactionIssueCode, compactionMeasurement, } from "./context-compaction-diagnostics.js";
|
|
4
4
|
import { isCompactionSteeringSuperseded } from "./model-step-steering.js";
|
|
5
|
+
import { ModelStepTimeoutError } from "../steps/model-step-timeout.js";
|
|
5
6
|
export function requiresContextCompaction(eligible, assessment) {
|
|
6
7
|
if (!eligible)
|
|
7
8
|
return false;
|
|
@@ -39,6 +40,11 @@ function canAdmitReusedCompactedContext(assessment, controller, messages) {
|
|
|
39
40
|
return false;
|
|
40
41
|
return controller?.hasExhaustedVerifiedCompactionSources?.(messages) === true;
|
|
41
42
|
}
|
|
43
|
+
function hasChangedOptionalContextProjection(candidate, previous) {
|
|
44
|
+
if (!candidate)
|
|
45
|
+
return false;
|
|
46
|
+
return candidate !== previous;
|
|
47
|
+
}
|
|
42
48
|
/** The model boundary owns budget decisions; stages own source selection only. */
|
|
43
49
|
export async function admitCompactedContext(params) {
|
|
44
50
|
params.assertCurrent();
|
|
@@ -54,6 +60,23 @@ export async function admitCompactedContext(params) {
|
|
|
54
60
|
let onlyEmptyActiveSource = false;
|
|
55
61
|
try {
|
|
56
62
|
params.assertCurrent();
|
|
63
|
+
const optionalProjection = params.controller?.projectForCompaction?.(current.messages);
|
|
64
|
+
if (hasChangedOptionalContextProjection(optionalProjection, current.messages)) {
|
|
65
|
+
params.assertCurrent();
|
|
66
|
+
const assessment = await params.assess(optionalProjection);
|
|
67
|
+
params.assertCurrent();
|
|
68
|
+
current = { messages: optionalProjection, assessment };
|
|
69
|
+
}
|
|
70
|
+
if (isCompactedEnvelopeAdmissible(current.assessment, params.assessment)) {
|
|
71
|
+
diagnostics.trace("admitted", {
|
|
72
|
+
outcome: "admitted",
|
|
73
|
+
reason: "optional_context_removed_within_budget",
|
|
74
|
+
committedScopes,
|
|
75
|
+
...compactionMeasurement(current.assessment),
|
|
76
|
+
afterInputTokens: resolveRequestBudgetInputTokens(current.assessment.budget),
|
|
77
|
+
});
|
|
78
|
+
return current;
|
|
79
|
+
}
|
|
57
80
|
if (canAdmitReusedCompactedContext(current.assessment, params.controller, current.messages)) {
|
|
58
81
|
params.assertCurrent();
|
|
59
82
|
diagnostics.trace("admitted", {
|
|
@@ -71,7 +94,9 @@ export async function admitCompactedContext(params) {
|
|
|
71
94
|
for (const [stageIndex, stage] of stages.entries()) {
|
|
72
95
|
activeStage = stage;
|
|
73
96
|
params.assertCurrent();
|
|
74
|
-
const outcome = await stage.prepare(current.messages
|
|
97
|
+
const outcome = await stage.prepare(current.messages, {
|
|
98
|
+
boundSteeringVersion: params.boundSteeringVersion,
|
|
99
|
+
});
|
|
75
100
|
params.assertCurrent();
|
|
76
101
|
const stageMetadata = {
|
|
77
102
|
stageIndex,
|
|
@@ -186,6 +211,8 @@ export async function admitCompactedContext(params) {
|
|
|
186
211
|
? {}
|
|
187
212
|
: { secondaryIssueCode: compactionIssueCode(error) }),
|
|
188
213
|
});
|
|
214
|
+
if (isCompactionSteeringSuperseded(primary))
|
|
215
|
+
params.assertCurrent();
|
|
189
216
|
throw primary;
|
|
190
217
|
}
|
|
191
218
|
}
|
|
@@ -208,7 +235,14 @@ function resolveCompactionFailureReason(error, signal) {
|
|
|
208
235
|
return "request_aborted";
|
|
209
236
|
if (isCompactionSteeringSuperseded(error))
|
|
210
237
|
return "steering_superseded";
|
|
238
|
+
if (isCompactionModelStepTimeout(error))
|
|
239
|
+
return "context_compaction_timeout";
|
|
211
240
|
if (compactionIssueCode(error) === "request_context_compaction_required")
|
|
212
241
|
return "context_compaction_controller_unavailable";
|
|
213
242
|
return "semantic_checkpoint_rejected";
|
|
214
243
|
}
|
|
244
|
+
function isCompactionModelStepTimeout(error) {
|
|
245
|
+
if (!(error instanceof ModelStepTimeoutError))
|
|
246
|
+
return false;
|
|
247
|
+
return error.modelStep === "context.compact";
|
|
248
|
+
}
|
|
@@ -20,11 +20,19 @@ export type ModelStepCompactionStageOutcome = Readonly<{
|
|
|
20
20
|
export type ModelStepCompactionStage = Readonly<{
|
|
21
21
|
compactionScope: ModelStepCompactionScope;
|
|
22
22
|
scopeId: string;
|
|
23
|
-
prepare(messages: readonly ChatMessage[]
|
|
23
|
+
prepare(messages: readonly ChatMessage[], context?: Readonly<{
|
|
24
|
+
boundSteeringVersion?: number;
|
|
25
|
+
}>): Promise<ModelStepCompactionStageOutcome>;
|
|
24
26
|
}>;
|
|
25
27
|
export type ModelStepContextCompactionController = Readonly<{
|
|
26
28
|
/** Projects committed state once, before the complete envelope is assessed. */
|
|
27
29
|
project(messages: readonly ChatMessage[]): ChatMessage[];
|
|
30
|
+
/**
|
|
31
|
+
* Drops only owned optional context once before semantic compaction.
|
|
32
|
+
* No model calls or persistent effects; mandatory messages remain unchanged.
|
|
33
|
+
* Return the same array when unchanged to avoid another budget measurement.
|
|
34
|
+
*/
|
|
35
|
+
projectForCompaction?(messages: readonly ChatMessage[]): readonly ChatMessage[];
|
|
28
36
|
/** Trusted projection proof plus a fresh source scan; never model-authored JSON. */
|
|
29
37
|
hasExhaustedVerifiedCompactionSources?(messages: readonly ChatMessage[]): boolean;
|
|
30
38
|
/** Ordered, invocation-local plan; never scans sources or calls the model. */
|