@abot-ai/runtime 1.7.0 → 1.8.1
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/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
- package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
- package/dist/src/capabilities/tool-types.d.ts +4 -0
- package/dist/src/cli/abot.js +2 -0
- package/dist/src/cli/host-companion-bundle.mjs +751 -333
- package/dist/src/computer-access/collection-consent.d.ts +9 -0
- package/dist/src/computer-access/collection-consent.js +47 -0
- package/dist/src/computer-access/command-output-capture.d.ts +17 -6
- package/dist/src/computer-access/command-output-capture.js +134 -68
- package/dist/src/computer-access/command-output-protection.d.ts +17 -0
- package/dist/src/computer-access/command-output-protection.js +59 -0
- package/dist/src/computer-access/companion/command-output.d.ts +1 -0
- package/dist/src/computer-access/companion/command-output.js +23 -6
- package/dist/src/computer-access/companion/install-link-macos.js +2 -1
- package/dist/src/computer-access/companion/native-notifications.js +3 -2
- package/dist/src/computer-access/companion/native-session.js +6 -2
- package/dist/src/computer-access/companion/observation-filter.js +2 -26
- package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
- package/dist/src/computer-access/companion/observation-process.js +51 -25
- package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
- package/dist/src/computer-access/companion/observation-redaction.js +2 -111
- package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
- package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
- package/dist/src/computer-access/computer/companion-sessions.js +7 -6
- package/dist/src/computer-access/computer/unix-native-process.js +23 -11
- package/dist/src/computer-access/handlers.d.ts +2 -1
- package/dist/src/computer-access/handlers.js +79 -11
- package/dist/src/computer-access/host-observation.d.ts +3 -3
- package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
- package/dist/src/computer-access/native-observation-connection.js +78 -0
- package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
- package/dist/src/computer-access/native-observation-ownership.js +55 -0
- package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
- package/dist/src/computer-access/native-observation-shutdown.js +58 -0
- package/dist/src/computer-access/observation-source.d.ts +6 -0
- package/dist/src/computer-access/observation-source.js +10 -0
- package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
- package/dist/src/computer-access/security/desktop-result.js +146 -0
- package/dist/src/computer-access/security/observed-error.d.ts +2 -0
- package/dist/src/computer-access/security/observed-error.js +10 -0
- package/dist/src/computer-access/security/secret-text.d.ts +7 -0
- package/dist/src/computer-access/security/secret-text.js +111 -0
- package/dist/src/computer-access/security/system-results.d.ts +2 -0
- package/dist/src/computer-access/security/system-results.js +53 -0
- package/dist/src/computer-access/system-result-protection.d.ts +11 -0
- package/dist/src/computer-access/system-result-protection.js +1 -0
- package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
- package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
- package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
- package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
- package/dist/src/model-gateway/observability/provider-trace.js +30 -8
- 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/providers/ollama/adapter.js +8 -2
- package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
- package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
- package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
- package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
- package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
- package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
- package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
- package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
- package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
- package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
- package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
- package/dist/src/model-gateway/providers/openai/payload.js +6 -23
- package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
- package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
- package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
- package/dist/src/model-gateway/providers/openai/stream.js +13 -41
- package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
- package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
- 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/model-gateway/server.js +5 -1
- package/dist/src/plugin-contract/index.d.ts +1 -0
- package/dist/src/plugin-contract/index.js +1 -0
- package/dist/src/plugin-contract/manifest.d.ts +2 -0
- package/dist/src/plugin-contract/manifest.js +1 -0
- package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
- package/dist/src/plugin-contract/platform-compatibility.js +3 -0
- package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
- package/dist/src/plugin-sdk/computer-access.js +1 -0
- package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
- package/dist/src/plugin-sdk/files-windows/process.js +93 -0
- package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
- package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
- package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
- package/dist/src/plugin-sdk/files-windows/read.js +56 -0
- package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
- package/dist/src/plugin-sdk/files-windows/result.js +67 -0
- package/dist/src/plugin-sdk/files.js +4 -0
- package/dist/src/plugin-sdk/index.d.ts +1 -0
- package/dist/src/plugin-sdk/index.js +1 -0
- package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
- package/dist/src/plugin-sdk/mutation-result.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
- package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
- package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
- package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
- 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/adapters/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/capabilities/tool-availability.js +6 -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/local-host/windows-private-access.js +2 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -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/orchestration/role-calls/candidate-validation.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
- 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/worker-capabilities/contracts.d.ts +3 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
- 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/passive-learning/application-catalog.js +3 -1
- package/dist/src/runtime/passive-learning/collection-source.js +7 -0
- package/dist/src/runtime/passive-learning/service.js +2 -3
- package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
- package/dist/src/runtime/passive-learning/status-projection.js +9 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
- package/dist/src/runtime/plugins/installation/package.js +2 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
- package/dist/src/runtime/plugins/loader.js +24 -14
- package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
- package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
- package/dist/src/runtime/plugins/manifest-projection.js +3 -0
- package/dist/src/runtime/plugins/manifest-validator.js +9 -1
- package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
- package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
- package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
- package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
- package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
- package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/request/root-contract.d.ts +2 -0
- package/dist/src/runtime/request/root-execution-kernel.js +1 -0
- package/dist/src/runtime/request/runner.js +9 -3
- package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
- 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 +4 -3
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/input.js +22 -1
- 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 +7 -8
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
- package/dist/src/runtime/steps/execution-agent/run.js +4 -1
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
- package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
- package/dist/src/sessions/durable-session-commit.js +3 -3
- package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
- package/dist/src/sessions/prepared-session-replacement.js +46 -0
- package/dist/src/sessions/session-store.js +3 -3
- package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
- package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
- package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/authority-script.js +94 -0
- package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
- package/dist/src/shared/windows-file-io/native-script.js +120 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
- package/dist/src/shared/windows-job-object.d.ts +2 -0
- package/dist/src/shared/windows-job-object.js +66 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
- package/dist/src/web-ui/app/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +54 -156
- package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
- package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
- package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
- 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/home-guidance/daily-review.js +2 -2
- package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
- package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
- package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
- package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
- package/dist/src/web-ui/app/components/operations-summary.js +2 -1
- package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
- package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
- package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
- 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 +11 -3
- package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
- package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
- package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
- package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
- package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
- package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
- package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
- package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
- package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
- package/dist/src/web-ui/app/components/schedules/details.js +3 -2
- package/dist/src/web-ui/app/components/schedules/form.js +10 -8
- package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
- package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
- package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
- package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
- 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/macos-permissions.js +2 -0
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
- package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/computer-access-feature.js +13 -1
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +11 -1
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
- package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
- package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
- package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
- package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
- package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
- package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
- package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
- package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
- package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
- package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
- package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
- package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
- package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
- package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
- package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
- package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
- package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
- package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
- package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
- package/dist/src/web-ui/app/dashboard-feature.js +12 -2
- package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
- package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
- package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
- package/dist/src/web-ui/app/schedules-feature.js +5 -3
- package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
- package/dist/src/web-ui/app/services/client-preferences.js +25 -16
- package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
- package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
- package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
- package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
- package/dist/src/web-ui/app/services/workspace-state.js +27 -0
- package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
- package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
- package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
- package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
- package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
- package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
- package/dist/src/web-ui/app/styles.css +3 -0
- package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
- package/dist/src/web-ui/client-state/contracts.js +13 -0
- package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
- package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
- package/dist/src/web-ui/client-state/preferences.js +84 -0
- package/dist/src/web-ui/client-state/queue.d.ts +3 -0
- package/dist/src/web-ui/client-state/queue.js +43 -0
- package/dist/src/web-ui/client-state/routes.d.ts +7 -0
- package/dist/src/web-ui/client-state/routes.js +58 -0
- package/dist/src/web-ui/client-state/store.d.ts +14 -0
- package/dist/src/web-ui/client-state/store.js +88 -0
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
- package/dist/src/web-ui/local-runtime/http.js +11 -2
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
- package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
- package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
- package/dist/src/web-ui/local-runtime-backend.js +14 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
- package/dist/src/web-ui/plugin-management-catalog.js +3 -1
- package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
- package/dist/src/web-ui/server-readiness.d.ts +3 -0
- package/dist/src/web-ui/server-readiness.js +36 -0
- package/dist/src/web-ui/server.d.ts +2 -0
- package/dist/src/web-ui/server.js +23 -1
- package/dist/src/web-ui/system-host-service.js +13 -2
- package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
- package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
- package/docs/installation.md +44 -5
- package/docs/plugins.md +174 -28
- package/docs/tool-execution-result-evidence-contract.md +57 -0
- package/docs/windows-companion-store.md +5 -0
- package/package.json +4 -2
- package/plugins/capability-brief/plugin.json +5 -1
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +2 -1
- package/plugins/code-outline/source/index.ts +16 -20
- package/plugins/code-outline/source/read-failure.ts +40 -0
- package/plugins/code-outline/src/index.cjs +614 -29
- package/plugins/document-reader/README.md +33 -0
- package/plugins/document-reader/plugin.json +2 -1
- package/plugins/document-reader/source/pdf-contract.ts +57 -0
- package/plugins/document-reader/source/pdf-parser.ts +139 -0
- package/plugins/document-reader/source/pdf-process-main.ts +56 -0
- package/plugins/document-reader/source/pdf-process.ts +207 -0
- package/plugins/document-reader/source/pdf-result.ts +79 -0
- package/plugins/document-reader/source/pdf-worker.ts +39 -303
- package/plugins/document-reader/source/pdf.ts +4 -1
- package/plugins/document-reader/source/read-failure.ts +37 -0
- package/plugins/document-reader/source/reader.ts +3 -19
- package/plugins/document-reader/src/index.cjs +995 -211
- package/plugins/exec/README.md +19 -0
- package/plugins/exec/plugin.json +4 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
- package/plugins/exec/source/filesystem-file-observer.ts +98 -0
- package/plugins/exec/source/filesystem-observer.ts +8 -79
- package/plugins/exec/source/output-files.ts +12 -6
- package/plugins/exec/source/paths.ts +3 -1
- package/plugins/exec/source/process-manager.ts +8 -24
- package/plugins/exec/source/shell-platform.ts +19 -3
- package/plugins/exec/source/shell-process.ts +55 -0
- package/plugins/exec/source/windows-job-source.ts +1 -0
- package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
- package/plugins/exec/src/index.cjs +252 -96
- package/plugins/filesystem/README.md +65 -0
- package/plugins/filesystem/plugin.json +7 -3
- package/plugins/filesystem/source/atomic-write.ts +2 -0
- package/plugins/filesystem/source/bounded-io.ts +80 -306
- package/plugins/filesystem/source/directory-sample.ts +2 -0
- package/plugins/filesystem/source/errors.ts +14 -0
- package/plugins/filesystem/source/file-observation.ts +151 -0
- package/plugins/filesystem/source/file-version.ts +41 -0
- package/plugins/filesystem/source/index.ts +6 -0
- package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
- package/plugins/filesystem/source/windows/authority-script.ts +1 -0
- package/plugins/filesystem/source/windows/native-script.ts +1 -0
- package/plugins/filesystem/source/windows/operations.ts +197 -0
- package/plugins/filesystem/source/windows/process.ts +214 -0
- package/plugins/filesystem/source/windows/publication-script.ts +29 -0
- package/plugins/filesystem/source/windows/read-script.ts +63 -0
- package/plugins/filesystem/source/windows/request-availability.ts +67 -0
- package/plugins/filesystem/source/windows/source.ts +42 -0
- package/plugins/filesystem/source/windows/storage-script.ts +11 -0
- package/plugins/filesystem/source/windows/streams-script.ts +24 -0
- package/plugins/filesystem/source/windows/write-script.ts +86 -0
- package/plugins/filesystem/src/index.cjs +1208 -322
- package/plugins/json-inspector/README.md +18 -0
- package/plugins/json-inspector/plugin.json +2 -1
- package/plugins/json-inspector/source/index.ts +16 -19
- package/plugins/json-inspector/source/read-failure.ts +42 -0
- package/plugins/json-inspector/src/index.cjs +612 -27
- package/plugins/local-search/README.md +29 -0
- package/plugins/local-search/plugin.json +2 -1
- package/plugins/local-search/source/errors.ts +2 -0
- package/plugins/local-search/source/paths.ts +3 -0
- package/plugins/local-search/source/ripgrep-process.ts +31 -5
- package/plugins/local-search/source/ripgrep.ts +3 -3
- package/plugins/local-search/source/windows-authority.ts +99 -0
- package/plugins/local-search/source/windows-search-lease.ts +49 -0
- package/plugins/local-search/source/windows-search-process.ts +91 -0
- package/plugins/local-search/source/windows-search-script.ts +52 -0
- package/plugins/local-search/src/index.cjs +595 -26
- package/plugins/memory/plugin.json +5 -1
- package/plugins/memory/source/lock-directory-claim.ts +56 -0
- package/plugins/memory/source/lock-owner-file.ts +71 -0
- package/plugins/memory/source/lock-path-observation.ts +26 -0
- package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
- package/plugins/memory/source/store-lock.ts +12 -7
- package/plugins/memory/source/store.ts +3 -2
- package/plugins/memory/src/index.cjs +174 -25
- package/plugins/project-orientation/README.md +23 -0
- package/plugins/project-orientation/plugin.json +2 -1
- package/plugins/project-orientation/source/index.ts +12 -9
- package/plugins/project-orientation/source/inspection-failure.ts +70 -0
- package/plugins/project-orientation/source/manifest-summary.ts +9 -2
- package/plugins/project-orientation/source/tree.ts +6 -0
- package/plugins/project-orientation/src/index.cjs +647 -31
- package/plugins/system/README.md +51 -15
- package/plugins/system/plugin.json +6 -2
- package/plugins/system/skills/system_actions/SKILL.md +1 -1
- package/plugins/system/source/command-working-directory.ts +47 -0
- package/plugins/system/source/computer/handlers.ts +13 -9
- package/plugins/system/source/computer/observation-result.ts +10 -5
- package/plugins/system/source/computer/request-computers.ts +10 -3
- package/plugins/system/source/computer/request-modules.ts +3 -6
- package/plugins/system/source/computer/runtime-platform.ts +18 -0
- package/plugins/system/source/host-dispatch.ts +18 -2
- package/plugins/system/source/index.ts +5 -3
- package/plugins/system/source/local-command-output-retention.ts +16 -0
- package/plugins/system/source/local-command-output.ts +16 -8
- package/plugins/system/source/request-system-modules.ts +12 -2
- package/plugins/system/source/request-target-snapshot.ts +2 -1
- package/plugins/system/source/security/desktop-result.ts +177 -0
- package/plugins/system/source/security/observed-error.ts +10 -0
- package/plugins/system/source/security/secret-text.ts +118 -0
- package/plugins/system/source/security/system-results.ts +62 -0
- package/plugins/system/source/security/windows-output-directory.ts +82 -0
- package/plugins/system/src/index.cjs +837 -151
- package/plugins/system-probe/plugin.json +9 -3
- package/plugins/system-probe/source/disk-path.ts +8 -0
- package/plugins/system-probe/source/index.ts +10 -5
- package/plugins/system-probe/source/machine-load.ts +33 -0
- package/plugins/system-probe/source/metrics.ts +6 -8
- package/plugins/system-probe/src/index.cjs +49 -16
- package/plugins/web/plugin.json +5 -1
|
@@ -24,6 +24,10 @@ export async function readBoundedRegularFile(absolutePath, options) {
|
|
|
24
24
|
throw new RangeError("maxBytes must be a non-negative safe integer");
|
|
25
25
|
}
|
|
26
26
|
throwIfAborted(options.signal);
|
|
27
|
+
if (process.platform === "win32") {
|
|
28
|
+
const { readWindowsBoundedRegularFile } = await import("./files-windows/read.js");
|
|
29
|
+
return readWindowsBoundedRegularFile(absolutePath, options);
|
|
30
|
+
}
|
|
27
31
|
if (typeof constants.O_NOFOLLOW !== "number") {
|
|
28
32
|
return Object.freeze({ ok: false, reason: "safe_open_unsupported" });
|
|
29
33
|
}
|
|
@@ -4,6 +4,7 @@ export * from "./parameters.js";
|
|
|
4
4
|
export * from "./paths.js";
|
|
5
5
|
export * from "./plugin.js";
|
|
6
6
|
export * from "./results.js";
|
|
7
|
+
export * from "./mutation-result.js";
|
|
7
8
|
export * from "./context-text-result.js";
|
|
8
9
|
export * from "../capabilities/tool-media.js";
|
|
9
10
|
export * from "./tool-availability-brief.js";
|
|
@@ -4,6 +4,7 @@ export * from "./parameters.js";
|
|
|
4
4
|
export * from "./paths.js";
|
|
5
5
|
export * from "./plugin.js";
|
|
6
6
|
export * from "./results.js";
|
|
7
|
+
export * from "./mutation-result.js";
|
|
7
8
|
export * from "./context-text-result.js";
|
|
8
9
|
export * from "../capabilities/tool-media.js";
|
|
9
10
|
export * from "./tool-availability-brief.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolImplementationOutput } from "../plugin-contract/entrypoint.js";
|
|
2
|
+
import { type SuccessResultInput, type ToolResultBudget } from "./results.js";
|
|
3
|
+
/**
|
|
4
|
+
* Reports a mutation already confirmed by the owning plugin. This helper
|
|
5
|
+
* preserves its receipt; it does not execute or independently verify a change.
|
|
6
|
+
*/
|
|
7
|
+
export declare function mutationSuccessResult(input: SuccessResultInput, resultBudget?: ToolResultBudget): ToolImplementationOutput;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { successResult, } from "./results.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reports a mutation already confirmed by the owning plugin. This helper
|
|
4
|
+
* preserves its receipt; it does not execute or independently verify a change.
|
|
5
|
+
*/
|
|
6
|
+
export function mutationSuccessResult(input, resultBudget) {
|
|
7
|
+
return successResult({
|
|
8
|
+
...input,
|
|
9
|
+
data: { ...input.data, mutationEvidence: true },
|
|
10
|
+
}, resultBudget);
|
|
11
|
+
}
|
|
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { removeEmptyLockTree, removeObservedOwner } from "./cleanup.js";
|
|
3
3
|
import { fileSystemErrorCode, INCOMPLETE_LOCK_GRACE_MS, LOCK_ACQUIRE_TIMEOUT_MS, LOCK_RETRY_DELAY_MS, ownerFileName, } from "./contracts.js";
|
|
4
4
|
import { installLockDirectory } from "./install.js";
|
|
5
|
+
import { isWindowsLockReadDenial } from "./path-observation.js";
|
|
5
6
|
import { readLockSnapshot } from "./snapshot.js";
|
|
6
7
|
import { removeObservedOwnerSynchronously } from "./synchronous-release.js";
|
|
7
8
|
export async function acquireFileLock(lockPath, options) {
|
|
@@ -18,7 +19,7 @@ export async function acquireFileLock(lockPath, options) {
|
|
|
18
19
|
catch (error) {
|
|
19
20
|
if (!isLockContention(error))
|
|
20
21
|
throw error;
|
|
21
|
-
const removed = await removeAbandonedLock(lockPath, processIsAlive);
|
|
22
|
+
const removed = await removeAbandonedLock(lockPath, processIsAlive, deadline, retryDelayMs);
|
|
22
23
|
if (removed)
|
|
23
24
|
continue;
|
|
24
25
|
if (Date.now() >= deadline) {
|
|
@@ -45,8 +46,8 @@ function createRelease(lockPath, token, releaseMode) {
|
|
|
45
46
|
function requiresSynchronousRelease(mode) {
|
|
46
47
|
return mode === "synchronous";
|
|
47
48
|
}
|
|
48
|
-
async function removeAbandonedLock(lockPath, processIsAlive) {
|
|
49
|
-
const snapshot = await
|
|
49
|
+
async function removeAbandonedLock(lockPath, processIsAlive, deadline, retryDelayMs) {
|
|
50
|
+
const snapshot = await readContendedSnapshot(lockPath, deadline, retryDelayMs);
|
|
50
51
|
if (!snapshot)
|
|
51
52
|
return true;
|
|
52
53
|
if (snapshot.kind === "legacy_file" || !snapshot.reclaimable)
|
|
@@ -64,6 +65,22 @@ async function removeAbandonedLock(lockPath, processIsAlive) {
|
|
|
64
65
|
}
|
|
65
66
|
return removeEmptyLockTree(lockPath, snapshot.hasLeaseDirectory);
|
|
66
67
|
}
|
|
68
|
+
async function readContendedSnapshot(lockPath, deadline, retryDelayMs) {
|
|
69
|
+
for (;;) {
|
|
70
|
+
try {
|
|
71
|
+
return await readLockSnapshot(lockPath);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (!isWindowsLockReadDenial(error))
|
|
75
|
+
throw error;
|
|
76
|
+
if (Date.now() >= deadline)
|
|
77
|
+
throw error;
|
|
78
|
+
// Windows can deny a pending deletion while stat still sees the directory.
|
|
79
|
+
// Wait within the acquisition budget; an unreadable owner is never reclaimed.
|
|
80
|
+
await delay(Math.min(retryDelayMs, Math.max(deadline - Date.now(), 0)));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
67
84
|
async function hasLiveObservedOwner(snapshot, processIsAlive) {
|
|
68
85
|
if (snapshot.ownerPid === undefined)
|
|
69
86
|
return false;
|
|
@@ -3,10 +3,12 @@ import { open } from "node:fs/promises";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { directorySnapshot, fileSystemErrorCode, LEASE_DIRECTORY_NAME, MAX_LOCK_RECORD_BYTES, } from "./contracts.js";
|
|
5
5
|
import { isLockOwnerIdentity } from "./owner-identity.js";
|
|
6
|
+
import { observeLockReadFailure } from "./path-observation.js";
|
|
6
7
|
export async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModifiedAtMs) {
|
|
7
8
|
let handle;
|
|
8
9
|
try {
|
|
9
|
-
|
|
10
|
+
const ownerPath = join(lockPath, LEASE_DIRECTORY_NAME, entryName);
|
|
11
|
+
handle = await open(ownerPath, constants.O_RDONLY | constants.O_NOFOLLOW).catch(async (error) => { throw await observeLockReadFailure(ownerPath, error); });
|
|
10
12
|
const before = await handle.stat({ bigint: true });
|
|
11
13
|
const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(before.mtimeMs));
|
|
12
14
|
const hasReadableRecord = before.isFile() &&
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { lstat } from "node:fs/promises";
|
|
2
|
+
import { fileSystemErrorCode } from "./contracts.js";
|
|
3
|
+
/** Only confirmed disappearance can normalize a Windows pending-delete denial. */
|
|
4
|
+
export async function observeLockReadFailure(path, error) {
|
|
5
|
+
if (!isWindowsLockReadDenial(error))
|
|
6
|
+
return error;
|
|
7
|
+
try {
|
|
8
|
+
await lstat(path);
|
|
9
|
+
}
|
|
10
|
+
catch (observedError) {
|
|
11
|
+
if (fileSystemErrorCode(observedError) === "ENOENT")
|
|
12
|
+
return observedError;
|
|
13
|
+
}
|
|
14
|
+
return error;
|
|
15
|
+
}
|
|
16
|
+
export function isWindowsLockReadDenial(error) {
|
|
17
|
+
if (process.platform !== "win32")
|
|
18
|
+
return false;
|
|
19
|
+
return fileSystemErrorCode(error) === "EPERM";
|
|
20
|
+
}
|
|
@@ -2,6 +2,7 @@ import { lstat, readdir } from "node:fs/promises";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { directorySnapshot, fileSystemErrorCode, LEASE_DIRECTORY_NAME, OWNER_FILE_PATTERN, } from "./contracts.js";
|
|
4
4
|
import { readOwnerRecord } from "./owner-record.js";
|
|
5
|
+
import { observeLockReadFailure } from "./path-observation.js";
|
|
5
6
|
export async function readLockSnapshot(lockPath) {
|
|
6
7
|
const lockInfo = await readLockInfo(lockPath);
|
|
7
8
|
if (!lockInfo)
|
|
@@ -13,7 +14,8 @@ export async function readLockSnapshot(lockPath) {
|
|
|
13
14
|
try {
|
|
14
15
|
lockEntries = await readdir(lockPath, { withFileTypes: true });
|
|
15
16
|
}
|
|
16
|
-
catch (
|
|
17
|
+
catch (readError) {
|
|
18
|
+
const error = await observeLockReadFailure(lockPath, readError);
|
|
17
19
|
const code = fileSystemErrorCode(error);
|
|
18
20
|
if (code === "ENOENT")
|
|
19
21
|
return undefined;
|
|
@@ -45,7 +47,8 @@ async function readLockInfo(lockPath) {
|
|
|
45
47
|
try {
|
|
46
48
|
return await lstat(lockPath);
|
|
47
49
|
}
|
|
48
|
-
catch (
|
|
50
|
+
catch (readError) {
|
|
51
|
+
const error = await observeLockReadFailure(lockPath, readError);
|
|
49
52
|
if (fileSystemErrorCode(error) === "ENOENT")
|
|
50
53
|
return undefined;
|
|
51
54
|
throw error;
|
|
@@ -62,7 +65,8 @@ async function readLeaseSnapshot(lockPath, lockModifiedAtMs) {
|
|
|
62
65
|
}
|
|
63
66
|
leaseEntries = await readdir(leasePath, { withFileTypes: true });
|
|
64
67
|
}
|
|
65
|
-
catch (
|
|
68
|
+
catch (readError) {
|
|
69
|
+
const error = await observeLockReadFailure(leasePath, readError);
|
|
66
70
|
if (fileSystemErrorCode(error) === "ENOENT") {
|
|
67
71
|
return invalidLeaseSnapshot(lockModifiedAtMs);
|
|
68
72
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuntimeConfig, ModelGatewayClient, SessionStore } from "../ports.js";
|
|
2
2
|
import type { LongTermMemoryService } from "../long-term-memory/contracts.js";
|
|
3
3
|
import type { SessionRequestAdmission } from "../request/session-admission.js";
|
|
4
|
-
/** The environment owns learning; the
|
|
4
|
+
/** The environment owns learning; the collection adapter owns the selected desktop source. */
|
|
5
5
|
export declare function createRuntimePassiveLearning(params: {
|
|
6
6
|
config: RuntimeConfig;
|
|
7
7
|
models: ModelGatewayClient;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { connectRuntimeObservations } from "./runtime-observation-connection.js";
|
|
4
4
|
import { createPassiveLearningService } from "../passive-learning/service.js";
|
|
5
5
|
import { createRuntimePassiveLearningModel } from "../passive-learning/model.js";
|
|
6
6
|
import { createCoWorkerResourceDependencies } from "./co-worker-resources.js";
|
|
7
|
-
/** The environment owns learning; the
|
|
7
|
+
/** The environment owns learning; the collection adapter owns the selected desktop source. */
|
|
8
8
|
export function createRuntimePassiveLearning(params) {
|
|
9
9
|
const { config, models, memory } = params;
|
|
10
10
|
const ownerId = createHash("sha256")
|
|
@@ -19,7 +19,7 @@ export function createRuntimePassiveLearning(params) {
|
|
|
19
19
|
config, models, memory, context, ownerId, directory: join(config.paths.runtimeDir, "passive-learning"),
|
|
20
20
|
sessions: params.sessions, deliveryAdmission: params.deliveryAdmission,
|
|
21
21
|
}),
|
|
22
|
-
connect: (input) =>
|
|
22
|
+
connect: (input) => connectRuntimeObservations({
|
|
23
23
|
...input,
|
|
24
24
|
ownerId,
|
|
25
25
|
rootDir: config.paths.rootDir,
|
package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CapabilityAdapterResult } from "../../orchestration/capability-adapters/index.js";
|
|
2
2
|
import type { WorkerCapabilityAdapterResult, WorkerCapabilityExecutionFreshness } from "../../orchestration/worker-capabilities/index.js";
|
|
3
3
|
import type { PayloadLifecycleEmitter } from "./payload-observability.js";
|
|
4
|
-
|
|
5
|
-
export
|
|
4
|
+
import { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY } from "../../orchestration/worker-capabilities/execution/execution-freshness.js";
|
|
5
|
+
export { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, };
|
|
6
6
|
export type PayloadLifecycleContext = Readonly<Omit<Parameters<PayloadLifecycleEmitter["emitPayloadLifecycle"]>[0], "phase" | "errorCode">>;
|
|
7
7
|
export declare function rejectPayloadLifecycle(params: {
|
|
8
8
|
executor: PayloadLifecycleEmitter;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { boundedSummary, requireCapabilityAdapterResult, } from "./result-observer.js";
|
|
2
2
|
import { createRegisteredToolWorkerFailureOutcomeFingerprint } from "./failure-outcome-fingerprint.js";
|
|
3
|
-
|
|
4
|
-
export
|
|
3
|
+
import { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, } from "../../orchestration/worker-capabilities/execution/execution-freshness.js";
|
|
4
|
+
export { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, };
|
|
5
5
|
export function rejectPayloadLifecycle(params) {
|
|
6
6
|
const failed = params.executor.emitPayloadLifecycle({
|
|
7
7
|
...params.lifecycle,
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import { traceRegisteredToolWorkerCapabilityExecutionStarted, traceRegisteredToolWorkerCapabilityExecutionCompleted, traceRegisteredToolWorkerCapabilityExecutionFailed, } from "../registered-tool-worker-capability-diagnostics.js";
|
|
2
2
|
import { executionFreshnessRejection } from "./payload-lifecycle.js";
|
|
3
|
+
import { payloadRejection } from "./payload-rejection.js";
|
|
3
4
|
import { RegisteredToolWorkerCapabilityExecutionError } from "./errors.js";
|
|
4
5
|
import { observeExternalResult, attachTargetReferences, } from "./result-observer.js";
|
|
5
6
|
export function createPreparedWorkerInvocation(params, input, normalPreparation, selectedTargetReferences, payloadObservability) {
|
|
6
7
|
const operationId = params.projection.operation.operationId;
|
|
8
|
+
const rejectBeforeExecution = (executionId, code, message) => {
|
|
9
|
+
payloadObservability.release(executionId);
|
|
10
|
+
const rejectedExecution = payloadRejection(code, message);
|
|
11
|
+
normalPreparation.emitRejection({
|
|
12
|
+
executionId,
|
|
13
|
+
executorIdentity: input.call,
|
|
14
|
+
errorCode: code,
|
|
15
|
+
});
|
|
16
|
+
return attachTargetReferences({
|
|
17
|
+
...rejectedExecution.result,
|
|
18
|
+
exactResult: rejectedExecution.exactResult,
|
|
19
|
+
}, selectedTargetReferences);
|
|
20
|
+
};
|
|
7
21
|
return Object.freeze({
|
|
8
22
|
actionFingerprint: normalPreparation.actionFingerprint,
|
|
9
23
|
acceptedControls: normalPreparation.acceptedControls,
|
|
@@ -18,22 +32,14 @@ export function createPreparedWorkerInvocation(params, input, normalPreparation,
|
|
|
18
32
|
: {}),
|
|
19
33
|
applyApprovalDecision: normalPreparation.applyApprovalDecision,
|
|
20
34
|
onAdmitted: payloadObservability.release,
|
|
35
|
+
rejectBeforeExecution,
|
|
21
36
|
execute: async (executionId) => {
|
|
22
37
|
try {
|
|
23
38
|
payloadObservability.release(executionId);
|
|
24
39
|
traceRegisteredToolWorkerCapabilityExecutionStarted(params.diagnostic, operationId, input.call, executionId, input.intent.length, Object.keys(input.controls).length);
|
|
25
40
|
const rejectedExecution = executionFreshnessRejection(input.executionFreshness);
|
|
26
|
-
if (rejectedExecution)
|
|
27
|
-
|
|
28
|
-
executionId,
|
|
29
|
-
executorIdentity: input.call,
|
|
30
|
-
errorCode: rejectedExecution.sourceIssueCode,
|
|
31
|
-
});
|
|
32
|
-
return attachTargetReferences({
|
|
33
|
-
...rejectedExecution.result,
|
|
34
|
-
exactResult: rejectedExecution.exactResult,
|
|
35
|
-
}, selectedTargetReferences);
|
|
36
|
-
}
|
|
41
|
+
if (rejectedExecution)
|
|
42
|
+
return rejectBeforeExecution(executionId, rejectedExecution.sourceIssueCode, rejectedExecution.result.summary);
|
|
37
43
|
const externalResult = await normalPreparation.execute(executionId, input.call, selectedTargetReferences);
|
|
38
44
|
const observed = observeExternalResult(externalResult, params.projection.operation.effect, input.call.parentCallId === null, selectedTargetReferences);
|
|
39
45
|
const observedResult = observed.result;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HostObservationSubscription } from "../../shared/passive-observation.js";
|
|
2
|
+
/** Installation consent gates every collection route before transport or helper startup. */
|
|
3
|
+
export declare function connectRuntimeObservations(options: HostObservationSubscription): Promise<Readonly<{
|
|
4
|
+
close(): void;
|
|
5
|
+
}>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { connectHostObservations } from "../../computer-access/companion/observation-client.js";
|
|
2
|
+
import { connectNativeObservations } from "../../computer-access/native-observation-connection.js";
|
|
3
|
+
import { requireCollectionConsent } from "../../computer-access/collection-consent.js";
|
|
4
|
+
import { readRuntimeCollectionSource } from "../../computer-access/observation-source.js";
|
|
5
|
+
/** Installation consent gates every collection route before transport or helper startup. */
|
|
6
|
+
export async function connectRuntimeObservations(options) {
|
|
7
|
+
options.abortSignal.throwIfAborted();
|
|
8
|
+
await requireCollectionConsent(options.rootDir);
|
|
9
|
+
options.abortSignal.throwIfAborted();
|
|
10
|
+
if (readRuntimeCollectionSource().mode === "native")
|
|
11
|
+
return connectNativeObservations(options);
|
|
12
|
+
return connectHostObservations(options);
|
|
13
|
+
}
|
|
@@ -3,6 +3,12 @@ export function projectAvailableTools(registrations) {
|
|
|
3
3
|
return undefined;
|
|
4
4
|
const entries = registrations.flatMap((registration) => registration.contract.operations.map((operation) => Object.freeze({
|
|
5
5
|
toolName: registration.toolName,
|
|
6
|
+
...(registration.definition.pluginName !== undefined
|
|
7
|
+
? { pluginName: registration.definition.pluginName }
|
|
8
|
+
: {}),
|
|
9
|
+
...(registration.definition.pluginDescription !== undefined
|
|
10
|
+
? { pluginDescription: registration.definition.pluginDescription }
|
|
11
|
+
: {}),
|
|
6
12
|
operationId: operation.operationId,
|
|
7
13
|
summary: operation.summary,
|
|
8
14
|
catalogGroups: Object.freeze([
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { ChatMessage, ModelTokenEstimationConfig } from "../../model-gateway/types.js";
|
|
2
2
|
import type { ToolAvailabilityEntry } from "../../capabilities/tool-types.js";
|
|
3
|
-
import { type ToolAvailabilityOverviewGroup
|
|
3
|
+
import { type ToolAvailabilityOverviewGroup } from "../../plugin-sdk/tool-availability-overview.js";
|
|
4
4
|
import type { projectRequestContext } from "./request-context.js";
|
|
5
5
|
export declare const CAPABILITY_BRIEF_KIND = "runtime_capability_brief_v1";
|
|
6
6
|
export declare const CAPABILITY_BRIEF_MAX_TOKENS = 512;
|
|
7
|
-
export type CapabilityBriefLevel =
|
|
7
|
+
export type CapabilityBriefLevel = "groups" | "descriptions" | "none";
|
|
8
8
|
export type CapabilityBriefProjection = Readonly<{
|
|
9
9
|
level: CapabilityBriefLevel;
|
|
10
10
|
message?: ChatMessage;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildToolAvailabilityOverview, } from "../../plugin-sdk/tool-availability-overview.js";
|
|
2
2
|
import { resolveCapabilityBriefHeadroom } from "./capability-brief-budget.js";
|
|
3
|
-
import {
|
|
3
|
+
import { buildPluginDiscoveryCatalogText } from "./capability-descriptions.js";
|
|
4
4
|
import { estimateMessageTokens } from "./token-estimator.js";
|
|
5
5
|
export const CAPABILITY_BRIEF_KIND = "runtime_capability_brief_v1";
|
|
6
6
|
export const CAPABILITY_BRIEF_MAX_TOKENS = 512;
|
|
@@ -22,12 +22,12 @@ export function projectCapabilityBriefAtHeadroom(params) {
|
|
|
22
22
|
return omittedBrief(compactBudgetTokens, "empty_catalog");
|
|
23
23
|
}
|
|
24
24
|
const levels = hasCompleteCapabilityBriefEntries(params.entries, params.groups)
|
|
25
|
-
? ["descriptions", "
|
|
25
|
+
? ["descriptions", "groups"]
|
|
26
26
|
: ["groups"];
|
|
27
27
|
for (const level of levels) {
|
|
28
28
|
const budgetTokens = level === "descriptions" ? headroom : compactBudgetTokens;
|
|
29
29
|
const body = level === "descriptions"
|
|
30
|
-
?
|
|
30
|
+
? buildPluginDiscoveryCatalogText(params.groups.map(({ groupId }) => groupId), params.entries)
|
|
31
31
|
: buildToolAvailabilityOverview(params.entries ?? [], params.groups, level);
|
|
32
32
|
const message = Object.freeze({
|
|
33
33
|
role: "system",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { ToolAvailabilityEntry } from "../../capabilities/tool-types.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export declare const PLUGIN_DISCOVERY_CATALOG_HEADER = "Tool groups:";
|
|
3
|
+
/** Passive discovery: selectable groups first, with plugin descriptions once. */
|
|
4
|
+
export declare function buildPluginDiscoveryCatalogText(catalogGroupIds: readonly string[], entries?: readonly ToolAvailabilityEntry[]): string;
|
|
@@ -1,23 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
export const PLUGIN_DISCOVERY_CATALOG_HEADER = "Tool groups:";
|
|
2
|
+
/** Passive discovery: selectable groups first, with plugin descriptions once. */
|
|
3
|
+
export function buildPluginDiscoveryCatalogText(catalogGroupIds, entries = []) {
|
|
4
|
+
const offeredGroups = new Set(catalogGroupIds);
|
|
5
|
+
const toolsByGroup = new Map();
|
|
6
|
+
const descriptions = new Map();
|
|
7
|
+
for (const entry of entries) {
|
|
8
|
+
const groupIds = entry.catalogGroups.filter((id) => offeredGroups.has(id));
|
|
9
|
+
if (groupIds.length === 0)
|
|
10
|
+
continue;
|
|
11
|
+
// The empty owner denotes a native tool, never a fabricated plugin.
|
|
12
|
+
const owner = entry.pluginName ?? "";
|
|
13
|
+
for (const id of groupIds) {
|
|
14
|
+
const owners = toolsByGroup.get(id) ?? new Map();
|
|
15
|
+
const toolNames = owners.get(owner) ?? new Set();
|
|
16
|
+
toolNames.add(entry.toolName);
|
|
17
|
+
owners.set(owner, toolNames);
|
|
18
|
+
toolsByGroup.set(id, owners);
|
|
19
|
+
}
|
|
20
|
+
if (!entry.pluginName)
|
|
21
|
+
continue;
|
|
22
|
+
const description = descriptions.get(entry.pluginName)
|
|
23
|
+
|| formatPluginDiscoveryDescription(entry.pluginDescription);
|
|
24
|
+
if (description)
|
|
25
|
+
descriptions.set(entry.pluginName, description);
|
|
26
|
+
}
|
|
27
|
+
const hasOfferedToolBindings = toolsByGroup.size > 0;
|
|
28
|
+
if (!hasOfferedToolBindings) {
|
|
29
|
+
return catalogGroupIds.length > 0
|
|
30
|
+
? `${PLUGIN_DISCOVERY_CATALOG_HEADER} ${catalogGroupIds.join(", ")}`
|
|
31
|
+
: PLUGIN_DISCOVERY_CATALOG_HEADER;
|
|
32
|
+
}
|
|
33
|
+
const groupEntries = [...offeredGroups].sort().map((id) => {
|
|
34
|
+
const owners = toolsByGroup.get(id);
|
|
35
|
+
if (!owners)
|
|
36
|
+
return id;
|
|
37
|
+
const bindings = [...owners.keys()].sort().map((owner) => {
|
|
38
|
+
const names = [...owners.get(owner)].sort().map(formatPluginDiscoveryToolName).join(", ");
|
|
39
|
+
return owner ? `${owner} [${names}]` : names;
|
|
40
|
+
});
|
|
41
|
+
return `${id}: ${bindings.join(", ")}`;
|
|
42
|
+
});
|
|
43
|
+
const catalog = `${PLUGIN_DISCOVERY_CATALOG_HEADER} ${groupEntries.join(" | ")}`;
|
|
44
|
+
const pluginDescriptions = [...descriptions.keys()].sort().map((name) => `${name}: ${descriptions.get(name)}`);
|
|
45
|
+
return pluginDescriptions.length > 0
|
|
46
|
+
? `${catalog}\nPlugin descriptions: ${pluginDescriptions.join(" | ")}`
|
|
47
|
+
: catalog;
|
|
10
48
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
if (byOperation !== 0)
|
|
14
|
-
return byOperation;
|
|
15
|
-
return compareAscii(left.toolName, right.toolName);
|
|
49
|
+
function formatPluginDiscoveryToolName(name) {
|
|
50
|
+
return name.replace(/[%\\[\],;:|\s\u0000-\u001f\u007f]/gu, (character) => encodeURIComponent(character));
|
|
16
51
|
}
|
|
17
|
-
function
|
|
18
|
-
if (
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
52
|
+
function formatPluginDiscoveryDescription(description) {
|
|
53
|
+
if (description === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
const normalized = description.replaceAll("|", "/").replace(/\s+/gu, " ").trim();
|
|
56
|
+
const characters = Array.from(normalized);
|
|
57
|
+
if (characters.length <= 160)
|
|
58
|
+
return normalized;
|
|
59
|
+
return `${characters.slice(0, 160).join("")}....`;
|
|
23
60
|
}
|
|
@@ -2,7 +2,9 @@ import { execFile } from "node:child_process";
|
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
3
|
const execute = promisify(execFile);
|
|
4
4
|
// Paths travel through an environment value, never through shell interpolation.
|
|
5
|
+
// PowerShell 7 callers can pass incompatible modules to Windows PowerShell 5.1.
|
|
5
6
|
const privateAccessScript = `
|
|
7
|
+
$env:PSModulePath = "$PSHOME\\Modules"
|
|
6
8
|
$ErrorActionPreference = 'Stop'
|
|
7
9
|
$target = $env:ABOT_LOCAL_HOST_PRIVATE_PATH
|
|
8
10
|
$current = [System.Security.Principal.WindowsIdentity]::GetCurrent().User
|
|
@@ -1,7 +1,7 @@
|
|
|
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;
|
|
@@ -12,3 +12,8 @@ export type ConversationMemoryAuthoringContext = Readonly<{
|
|
|
12
12
|
export declare function canAuthorConversationMemory(request: Pick<RequestExecutionScope, "longTermMemory">, context: ConversationMemoryAuthoringContext | undefined): boolean;
|
|
13
13
|
/** Request-local authoring reference; never part of ordinary recall or routing. */
|
|
14
14
|
export declare function prepareConversationMemoryAuthoring(request: Pick<RequestExecutionScope, "longTermMemory" | "requestId" | "sessionId" | "prompt" | "abortSignal">, steering: RequestSteeringSnapshot): Promise<ConversationMemoryAuthoringContext | undefined>;
|
|
15
|
+
export declare function prepareConversationMemoryKnowledge(request: Pick<RequestExecutionScope, "longTermMemory" | "requestId" | "sessionId" | "prompt" | "abortSignal">, steering: RequestSteeringSnapshot): Promise<LearningKnowledgeContext | undefined>;
|
|
16
|
+
/** Shared deterministic binding for decision and response authoring. No retrieval. */
|
|
17
|
+
export declare function buildConversationMemoryAuthoringContext(request: Pick<RequestExecutionScope, "requestId" | "sessionId" | "prompt">, steering: RequestSteeringSnapshot, context: Pick<LearningKnowledgeContext, "entries" | "omitted" | "referenceTime">): ConversationMemoryAuthoringContext;
|
|
18
|
+
/** The same contract projection must precede ledger cloning and durable approval capture. */
|
|
19
|
+
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,
|
|
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,17 @@
|
|
|
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
|
+
userMessages: readonly string[];
|
|
13
|
+
message: ChatMessage;
|
|
14
|
+
}> | undefined;
|
|
15
|
+
authoringEnabled: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
export type ExecutionMemoryProjection = ReturnType<typeof projectExecutionAgentMemory>;
|