@abot-ai/runtime 1.2.0 → 1.3.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 +14 -0
- package/dist/scripts/init-runtime.js +4 -13
- package/dist/scripts/runtime-setup-directories.d.ts +2 -0
- package/dist/scripts/runtime-setup-directories.js +38 -0
- package/dist/src/bridge/request-steering.d.ts +2 -1
- package/dist/src/bridge/request-steering.js +4 -2
- package/dist/src/bridge/runtime-replay.js +2 -19
- package/dist/src/bridge/start-agent-bridge.js +1 -1
- package/dist/src/capabilities/normal-invocation/validator.js +1 -1
- package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
- package/dist/src/capabilities/tool-definition-validator/event-result-metadata.d.ts +2 -0
- package/dist/src/capabilities/tool-definition-validator/event-result-metadata.js +74 -0
- package/dist/src/capabilities/tool-event-metadata.js +3 -0
- package/dist/src/capabilities/tool-result-event-projection.d.ts +3 -0
- package/dist/src/capabilities/tool-result-event-projection.js +82 -0
- package/dist/src/capabilities/tool-types.d.ts +5 -0
- package/dist/src/cli/abot.js +2 -11
- package/dist/src/runtime/adapters/in-memory-session-store.js +1 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +11 -2
- package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +2 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.d.ts +2 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.js +40 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +3 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +9 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts +13 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.js +25 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +18 -2
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +8 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +7 -3
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +17 -2
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.d.ts +9 -0
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.js +8 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +16 -1
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +2 -2
- package/dist/src/runtime/adapters/scheduled-request-outcome.d.ts +11 -0
- package/dist/src/runtime/adapters/scheduled-request-outcome.js +41 -0
- package/dist/src/runtime/adapters/scheduler-runtime.d.ts +19 -0
- package/dist/src/runtime/adapters/scheduler-runtime.js +138 -0
- package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +55 -0
- package/dist/src/runtime/capabilities/scheduling/create-operations.js +30 -0
- package/dist/src/runtime/capabilities/scheduling/create-time-zone.d.ts +1 -0
- package/dist/src/runtime/capabilities/scheduling/create-time-zone.js +11 -0
- package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +25 -0
- package/dist/src/runtime/capabilities/scheduling/job-list-page.js +40 -0
- package/dist/src/runtime/capabilities/scheduling/model-validation.d.ts +2 -0
- package/dist/src/runtime/capabilities/scheduling/model-validation.js +15 -0
- package/dist/src/runtime/capabilities/scheduling/tool-contract.d.ts +2 -0
- package/dist/src/runtime/capabilities/scheduling/tool-contract.js +35 -0
- package/dist/src/runtime/capabilities/scheduling/tool-input-properties.d.ts +43 -0
- package/dist/src/runtime/capabilities/scheduling/tool-input-properties.js +27 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.d.ts +4 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.js +158 -0
- package/dist/src/runtime/capabilities/scheduling/update-operations.d.ts +2 -0
- package/dist/src/runtime/capabilities/scheduling/update-operations.js +49 -0
- package/dist/src/runtime/composition.d.ts +23 -3
- package/dist/src/runtime/composition.js +12 -17
- package/dist/src/runtime/config/environment-paths.d.ts +10 -0
- package/dist/src/runtime/config/environment-paths.js +31 -0
- package/dist/src/runtime/config/environment-storage.d.ts +9 -0
- package/dist/src/runtime/config/environment-storage.js +65 -0
- package/dist/src/runtime/config/fields.js +7 -0
- package/dist/src/runtime/config/long-term-memory.js +15 -0
- package/dist/src/runtime/config/schema.js +8 -0
- package/dist/src/runtime/config.js +9 -5
- package/dist/src/runtime/context/scheduled-execution-context.d.ts +10 -0
- package/dist/src/runtime/context/scheduled-execution-context.js +52 -0
- package/dist/src/runtime/default-adapters.d.ts +3 -32
- package/dist/src/runtime/default-adapters.js +3 -270
- package/dist/src/runtime/default-environment-adapters.d.ts +19 -0
- package/dist/src/runtime/default-environment-adapters.js +144 -0
- package/dist/src/runtime/index.d.ts +5 -0
- package/dist/src/runtime/index.js +4 -0
- package/dist/src/runtime/local-application.d.ts +22 -0
- package/dist/src/runtime/local-application.js +81 -0
- package/dist/src/runtime/local-host/app-memory-dispatch.d.ts +11 -0
- package/dist/src/runtime/local-host/app-memory-dispatch.js +103 -0
- package/dist/src/runtime/local-host/app-owner.d.ts +4 -0
- package/dist/src/runtime/local-host/app-owner.js +119 -0
- package/dist/src/runtime/local-host/app-request-control.d.ts +24 -0
- package/dist/src/runtime/local-host/app-request-control.js +135 -0
- package/dist/src/runtime/local-host/app-service-dispatch.d.ts +5 -0
- package/dist/src/runtime/local-host/app-service-dispatch.js +64 -0
- package/dist/src/runtime/local-host/client-identity.d.ts +3 -0
- package/dist/src/runtime/local-host/client-identity.js +17 -0
- package/dist/src/runtime/local-host/client-memory.d.ts +7 -0
- package/dist/src/runtime/local-host/client-memory.js +54 -0
- package/dist/src/runtime/local-host/client-requests.d.ts +19 -0
- package/dist/src/runtime/local-host/client-requests.js +145 -0
- package/dist/src/runtime/local-host/client-services.d.ts +10 -0
- package/dist/src/runtime/local-host/client-services.js +14 -0
- package/dist/src/runtime/local-host/contracts.d.ts +36 -0
- package/dist/src/runtime/local-host/contracts.js +1 -0
- package/dist/src/runtime/local-host/endpoint.d.ts +7 -0
- package/dist/src/runtime/local-host/endpoint.js +79 -0
- package/dist/src/runtime/local-host/owner-activity.d.ts +10 -0
- package/dist/src/runtime/local-host/owner-activity.js +30 -0
- package/dist/src/runtime/local-host/owner-retirement.d.ts +3 -0
- package/dist/src/runtime/local-host/owner-retirement.js +15 -0
- package/dist/src/runtime/local-host/owner-server.d.ts +6 -0
- package/dist/src/runtime/local-host/owner-server.js +88 -0
- package/dist/src/runtime/local-host/private-access.d.ts +2 -0
- package/dist/src/runtime/local-host/private-access.js +16 -0
- package/dist/src/runtime/local-host/private-directory.d.ts +1 -0
- package/dist/src/runtime/local-host/private-directory.js +57 -0
- package/dist/src/runtime/local-host/rpc-peer.d.ts +22 -0
- package/dist/src/runtime/local-host/rpc-peer.js +168 -0
- package/dist/src/runtime/local-host/rpc-protocol.d.ts +21 -0
- package/dist/src/runtime/local-host/rpc-protocol.js +46 -0
- package/dist/src/runtime/local-host/startup-connection.d.ts +5 -0
- package/dist/src/runtime/local-host/startup-connection.js +72 -0
- package/dist/src/runtime/local-host/transport.d.ts +3 -0
- package/dist/src/runtime/local-host/transport.js +88 -0
- package/dist/src/runtime/local-host/windows-private-access.d.ts +1 -0
- package/dist/src/runtime/local-host/windows-private-access.js +51 -0
- package/dist/src/runtime/long-term-memory/onboarding/configuration.js +6 -0
- package/dist/src/runtime/long-term-memory/recall-binding.d.ts +3 -0
- package/dist/src/runtime/long-term-memory/recall-binding.js +27 -0
- package/dist/src/runtime/long-term-memory/recall-context.d.ts +20 -0
- package/dist/src/runtime/long-term-memory/recall-context.js +101 -0
- package/dist/src/runtime/long-term-memory/recall-continuation.d.ts +8 -0
- package/dist/src/runtime/long-term-memory/recall-continuation.js +36 -0
- package/dist/src/runtime/long-term-memory/recall-policy.d.ts +7 -0
- package/dist/src/runtime/long-term-memory/recall-policy.js +14 -0
- package/dist/src/runtime/long-term-memory/recall-result.d.ts +5 -0
- package/dist/src/runtime/long-term-memory/recall-result.js +54 -0
- package/dist/src/runtime/long-term-memory/repository-state.d.ts +2 -1
- package/dist/src/runtime/long-term-memory/repository-state.js +2 -2
- package/dist/src/runtime/model/invoke-raw-step.d.ts +1 -0
- package/dist/src/runtime/model/invoke-raw-step.js +1 -0
- package/dist/src/runtime/model/invoke-step.js +6 -0
- package/dist/src/runtime/model/invoke-structured-step.d.ts +1 -0
- package/dist/src/runtime/model/invoke-structured-step.js +1 -0
- package/dist/src/runtime/model/model-step-port.d.ts +2 -0
- package/dist/src/runtime/model/model-step-steering.d.ts +8 -0
- package/dist/src/runtime/model/model-step-steering.js +19 -0
- package/dist/src/runtime/orchestration/final-response/authoring-contract.js +1 -1
- package/dist/src/runtime/orchestration/final-response/invoke.d.ts +1 -0
- package/dist/src/runtime/orchestration/final-response/invoke.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +9 -49
- package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.d.ts +9 -0
- package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +17 -8
- package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.d.ts +2 -0
- package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.js +62 -0
- package/dist/src/runtime/orchestration/role-calls/command-decoder.js +4 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.d.ts +4 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.js +89 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +5 -0
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +9 -7
- package/dist/src/runtime/orchestration/role-calls/contracts.js +2 -2
- package/dist/src/runtime/orchestration/role-calls/diagnostics.js +3 -0
- package/dist/src/runtime/orchestration/role-calls/index.d.ts +1 -0
- package/dist/src/runtime/orchestration/role-calls/index.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +51 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.js +4 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.d.ts +6 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.js +147 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.d.ts +5 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.js +27 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +3 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +121 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.d.ts +3 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.js +44 -0
- package/dist/src/runtime/orchestration/role-calls/reducer.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/transaction-effect.d.ts +5 -0
- package/dist/src/runtime/orchestration/role-calls/transaction-effect.js +14 -0
- package/dist/src/runtime/orchestration/role-calls/transactions.js +3 -24
- package/dist/src/runtime/plugins/manifest-validator.js +4 -1
- package/dist/src/runtime/ports.d.ts +4 -0
- package/dist/src/runtime/request/bound-runtime-handler.d.ts +2 -0
- package/dist/src/runtime/request/bound-runtime-handler.js +25 -0
- package/dist/src/runtime/request/contracts.d.ts +6 -0
- package/dist/src/runtime/request/execution-agent-root-execution.js +12 -0
- package/dist/src/runtime/request/execution-facets.js +6 -0
- package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
- package/dist/src/runtime/request/execution-scope.d.ts +1 -1
- package/dist/src/runtime/request/handler.js +6 -0
- package/dist/src/runtime/request/root-contract.d.ts +7 -1
- package/dist/src/runtime/request/root-execution-kernel.js +33 -37
- package/dist/src/runtime/request/root-memory-recall.d.ts +11 -0
- package/dist/src/runtime/request/root-memory-recall.js +71 -0
- package/dist/src/runtime/request/root-observation-handoff.d.ts +17 -0
- package/dist/src/runtime/request/root-observation-handoff.js +44 -0
- package/dist/src/runtime/request/scheduled-execution.d.ts +9 -0
- package/dist/src/runtime/request/scheduled-execution.js +32 -0
- package/dist/src/runtime/request/session-admission.d.ts +17 -0
- package/dist/src/runtime/request/session-admission.js +88 -0
- package/dist/src/runtime/request/supervisor-root-execution-diagnostics.d.ts +1 -1
- package/dist/src/runtime/request/supervisor-root-execution.js +8 -0
- package/dist/src/runtime/runtime-environment.d.ts +31 -0
- package/dist/src/runtime/runtime-environment.js +102 -0
- package/dist/src/runtime/runtime-host-environment.d.ts +8 -0
- package/dist/src/runtime/runtime-host-environment.js +57 -0
- package/dist/src/runtime/runtime-host-lifecycle.d.ts +4 -0
- package/dist/src/runtime/runtime-host-lifecycle.js +64 -0
- package/dist/src/runtime/runtime-host-scheduler-ownership.d.ts +5 -0
- package/dist/src/runtime/runtime-host-scheduler-ownership.js +67 -0
- package/dist/src/runtime/runtime-host.d.ts +19 -0
- package/dist/src/runtime/runtime-host.js +63 -0
- package/dist/src/runtime/scheduler/calendar-time.d.ts +10 -0
- package/dist/src/runtime/scheduler/calendar-time.js +58 -0
- package/dist/src/runtime/scheduler/contracts.d.ts +143 -0
- package/dist/src/runtime/scheduler/contracts.js +1 -0
- package/dist/src/runtime/scheduler/file-store.d.ts +2 -0
- package/dist/src/runtime/scheduler/file-store.js +76 -0
- package/dist/src/runtime/scheduler/instant-validation.d.ts +4 -0
- package/dist/src/runtime/scheduler/instant-validation.js +69 -0
- package/dist/src/runtime/scheduler/interval-range.d.ts +8 -0
- package/dist/src/runtime/scheduler/interval-range.js +24 -0
- package/dist/src/runtime/scheduler/job-management.d.ts +8 -0
- package/dist/src/runtime/scheduler/job-management.js +212 -0
- package/dist/src/runtime/scheduler/journal-checkpoint.d.ts +9 -0
- package/dist/src/runtime/scheduler/journal-checkpoint.js +45 -0
- package/dist/src/runtime/scheduler/journal-durability.d.ts +8 -0
- package/dist/src/runtime/scheduler/journal-durability.js +59 -0
- package/dist/src/runtime/scheduler/journal-files.d.ts +14 -0
- package/dist/src/runtime/scheduler/journal-files.js +59 -0
- package/dist/src/runtime/scheduler/journal-head.d.ts +21 -0
- package/dist/src/runtime/scheduler/journal-head.js +81 -0
- package/dist/src/runtime/scheduler/journal-index-state.d.ts +31 -0
- package/dist/src/runtime/scheduler/journal-index-state.js +137 -0
- package/dist/src/runtime/scheduler/journal-index.d.ts +22 -0
- package/dist/src/runtime/scheduler/journal-index.js +195 -0
- package/dist/src/runtime/scheduler/journal-store.d.ts +21 -0
- package/dist/src/runtime/scheduler/journal-store.js +184 -0
- package/dist/src/runtime/scheduler/journal-transaction.d.ts +14 -0
- package/dist/src/runtime/scheduler/journal-transaction.js +104 -0
- package/dist/src/runtime/scheduler/next-occurrence.d.ts +3 -0
- package/dist/src/runtime/scheduler/next-occurrence.js +39 -0
- package/dist/src/runtime/scheduler/run-completion.d.ts +12 -0
- package/dist/src/runtime/scheduler/run-completion.js +77 -0
- package/dist/src/runtime/scheduler/run-list-query.d.ts +5 -0
- package/dist/src/runtime/scheduler/run-list-query.js +38 -0
- package/dist/src/runtime/scheduler/run-records.d.ts +6 -0
- package/dist/src/runtime/scheduler/run-records.js +41 -0
- package/dist/src/runtime/scheduler/schedule-update.d.ts +3 -0
- package/dist/src/runtime/scheduler/schedule-update.js +22 -0
- package/dist/src/runtime/scheduler/schedule-validation.d.ts +10 -0
- package/dist/src/runtime/scheduler/schedule-validation.js +132 -0
- package/dist/src/runtime/scheduler/scheduler-engine.d.ts +2 -0
- package/dist/src/runtime/scheduler/scheduler-engine.js +174 -0
- package/dist/src/runtime/scheduler/scheduler-service.d.ts +10 -0
- package/dist/src/runtime/scheduler/scheduler-service.js +115 -0
- package/dist/src/runtime/scheduler/service-context.d.ts +21 -0
- package/dist/src/runtime/scheduler/service-context.js +26 -0
- package/dist/src/runtime/scheduler/session-deletion-state.d.ts +9 -0
- package/dist/src/runtime/scheduler/session-deletion-state.js +30 -0
- package/dist/src/runtime/scheduler/snapshot-validation.d.ts +4 -0
- package/dist/src/runtime/scheduler/snapshot-validation.js +112 -0
- package/dist/src/runtime/scheduler/startup-recovery.d.ts +2 -0
- package/dist/src/runtime/scheduler/startup-recovery.js +38 -0
- package/dist/src/runtime/scheduler/validation-error.d.ts +4 -0
- package/dist/src/runtime/scheduler/validation-error.js +8 -0
- package/dist/src/runtime/scheduler/working-store.d.ts +3 -0
- package/dist/src/runtime/scheduler/working-store.js +8 -0
- package/dist/src/runtime/session/request-session.d.ts +1 -0
- package/dist/src/runtime/session/request-session.js +14 -1
- package/dist/src/runtime/session/session-attachment-deletion.d.ts +8 -0
- package/dist/src/runtime/session/session-attachment-deletion.js +87 -0
- package/dist/src/runtime/session/session-deletion-boundary.d.ts +10 -0
- package/dist/src/runtime/session/session-deletion-boundary.js +39 -0
- package/dist/src/runtime/session/session-deletion-cleanup.d.ts +7 -0
- package/dist/src/runtime/session/session-deletion-cleanup.js +62 -0
- package/dist/src/runtime/session/session-deletion-finalization.d.ts +7 -0
- package/dist/src/runtime/session/session-deletion-finalization.js +34 -0
- package/dist/src/runtime/session/session-deletion-receipts.d.ts +7 -0
- package/dist/src/runtime/session/session-deletion-receipts.js +18 -0
- package/dist/src/runtime/session/session-lifecycle-store.d.ts +21 -0
- package/dist/src/runtime/session/session-lifecycle-store.js +72 -0
- package/dist/src/runtime/session/session-mutation-queue.d.ts +3 -0
- package/dist/src/runtime/session/session-mutation-queue.js +15 -0
- package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.d.ts +16 -0
- package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.js +165 -0
- package/dist/src/runtime/steps/execution-agent/contracts.d.ts +3 -1
- package/dist/src/runtime/steps/execution-agent/decision-parsing.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/decision-parsing.js +195 -0
- package/dist/src/runtime/steps/execution-agent/decision-validation.d.ts +30 -0
- package/dist/src/runtime/steps/execution-agent/decision-validation.js +127 -0
- package/dist/src/runtime/steps/execution-agent/format.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/format.js +12 -0
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -1
- package/dist/src/runtime/steps/execution-agent/input.js +17 -2
- package/dist/src/runtime/steps/execution-agent/parser.d.ts +1 -2
- package/dist/src/runtime/steps/execution-agent/parser.js +1 -472
- package/dist/src/runtime/steps/execution-agent/prompt.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
- package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +4 -3
- package/dist/src/runtime/steps/execution-agent/response-input.js +5 -4
- package/dist/src/runtime/steps/execution-agent/response-run.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +7 -3
- package/dist/src/runtime/steps/execution-agent/run.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/run.js +2 -0
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -1
- package/dist/src/runtime/steps/execution-agent/state-context.js +13 -5
- package/dist/src/runtime/steps/memory-recall-decision.d.ts +30 -0
- package/dist/src/runtime/steps/memory-recall-decision.js +101 -0
- package/dist/src/runtime/steps/memory-recall-prompt.d.ts +1 -0
- package/dist/src/runtime/steps/memory-recall-prompt.js +15 -0
- package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +4 -2
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +13 -6
- package/dist/src/runtime/steps/supervisor-decision/format.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/format.js +41 -2
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +5 -1
- package/dist/src/runtime/steps/supervisor-decision/input.js +25 -5
- package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.js +32 -0
- package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/parser.js +36 -1
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +16 -8
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +13 -0
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +32 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.js +13 -0
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +19 -0
- package/dist/src/runtime/steps/supervisor-decision/working-directory.js +7 -1
- package/dist/src/runtime/steps/supervisor-response/diagnostics.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-response/diagnostics.js +1 -0
- package/dist/src/runtime/steps/supervisor-response/input.d.ts +2 -1
- package/dist/src/runtime/steps/supervisor-response/input.js +17 -4
- package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +4 -0
- package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-response/prompt.js +8 -2
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +25 -0
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +6 -1
- package/dist/src/runtime/steps/supervisor-response/run.js +26 -7
- package/dist/src/sessions/record/projection.js +1 -0
- package/dist/src/sessions/schedule-metadata.d.ts +8 -0
- package/dist/src/sessions/schedule-metadata.js +1 -0
- package/dist/src/sessions/session-service.d.ts +1 -0
- package/dist/src/sessions/session-service.js +1 -0
- package/dist/src/sessions/types.d.ts +2 -0
- package/dist/src/shared/directory-authority/bootstrap.d.ts +1 -0
- package/dist/src/shared/directory-authority/bootstrap.js +118 -0
- package/dist/src/shared/directory-authority/command.d.ts +8 -0
- package/dist/src/shared/directory-authority/command.js +27 -0
- package/dist/src/shared/directory-authority/errors.d.ts +5 -0
- package/dist/src/shared/directory-authority/errors.js +10 -0
- package/dist/src/shared/directory-authority/index.d.ts +3 -0
- package/dist/src/shared/directory-authority/index.js +3 -0
- package/dist/src/shared/directory-authority/protocol.d.ts +11 -0
- package/dist/src/shared/directory-authority/protocol.js +62 -0
- package/dist/src/shared/directory-authority/task.d.ts +7 -0
- package/dist/src/shared/directory-authority/task.js +97 -0
- package/dist/src/shared/http-server-shutdown.d.ts +4 -0
- package/dist/src/shared/http-server-shutdown.js +17 -0
- package/dist/src/shared/public-http/aggregate-gate.d.ts +3 -0
- package/dist/src/shared/public-http/aggregate-gate.js +87 -0
- package/dist/src/shared/public-http/deadline.d.ts +2 -0
- package/dist/src/shared/public-http/deadline.js +29 -0
- package/dist/src/shared/public-http/errors.d.ts +6 -0
- package/dist/src/shared/public-http/errors.js +11 -0
- package/dist/src/shared/public-http/limits.d.ts +8 -0
- package/dist/src/shared/public-http/limits.js +8 -0
- package/dist/src/shared/public-http/network-policy.d.ts +11 -0
- package/dist/src/shared/public-http/network-policy.js +178 -0
- package/dist/src/shared/public-http/public-http.d.ts +24 -0
- package/dist/src/shared/public-http/public-http.js +85 -0
- package/dist/src/shared/public-http/request-hop.d.ts +18 -0
- package/dist/src/shared/public-http/request-hop.js +140 -0
- package/dist/src/web-ui/app/ARCHITECTURE.md +66 -4
- package/dist/src/web-ui/app/app-bootstrap.js +53 -0
- package/dist/src/web-ui/app/app-dom.js +80 -0
- package/dist/src/web-ui/app/app.js +195 -212
- package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
- package/dist/src/web-ui/app/components/conversation-activity.js +34 -7
- package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +1 -0
- package/dist/src/web-ui/app/components/conversation-role-cards.js +61 -5
- package/dist/src/web-ui/app/components/conversation-schedule.js +71 -0
- package/dist/src/web-ui/app/components/conversation-status.js +65 -0
- package/dist/src/web-ui/app/components/conversation-tools.d.ts +13 -0
- package/dist/src/web-ui/app/components/conversation-tools.js +284 -0
- package/dist/src/web-ui/app/components/conversation-view.js +39 -11
- package/dist/src/web-ui/app/components/dashboard/activity.js +61 -0
- package/dist/src/web-ui/app/components/dashboard/icons.js +23 -0
- package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +64 -0
- package/dist/src/web-ui/app/components/dashboard/workspace.js +107 -0
- package/dist/src/web-ui/app/components/message-link-previews.d.ts +16 -0
- package/dist/src/web-ui/app/components/message-link-previews.js +179 -0
- package/dist/src/web-ui/app/components/schedules/details.js +101 -0
- package/dist/src/web-ui/app/components/schedules/form.d.ts +13 -0
- package/dist/src/web-ui/app/components/schedules/form.js +246 -0
- package/dist/src/web-ui/app/components/schedules/workspace-state.js +59 -0
- package/dist/src/web-ui/app/components/schedules/workspace.js +165 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +48 -2
- package/dist/src/web-ui/app/configuration-feature.js +72 -0
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +17 -6
- package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +2 -0
- package/dist/src/web-ui/app/controllers/composer-submit-controller.js +15 -1
- package/dist/src/web-ui/app/controllers/composer-surface-controller.js +58 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +53 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +180 -0
- package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +23 -0
- package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +82 -0
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +8 -0
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +28 -39
- package/dist/src/web-ui/app/controllers/dashboard-controller.js +127 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +40 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.js +119 -0
- package/dist/src/web-ui/app/controllers/home-conversation-activation.js +37 -0
- package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +1 -0
- package/dist/src/web-ui/app/controllers/realtime-event-controller.js +74 -3
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +2 -1
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +15 -14
- package/dist/src/web-ui/app/controllers/schedule-realtime.js +118 -0
- package/dist/src/web-ui/app/controllers/schedules-controller.js +421 -0
- package/dist/src/web-ui/app/controllers/session-controller.js +30 -3
- package/dist/src/web-ui/app/dashboard-feature.js +44 -0
- package/dist/src/web-ui/app/index.html +53 -1
- package/dist/src/web-ui/app/lib/composer-submission-scope.d.ts +21 -0
- package/dist/src/web-ui/app/lib/composer-submission-scope.js +13 -0
- package/dist/src/web-ui/app/lib/context-window-snapshot-order.d.ts +15 -0
- package/dist/src/web-ui/app/lib/context-window-snapshot-order.js +31 -0
- package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +10 -1
- package/dist/src/web-ui/app/lib/conversation-role-model.js +97 -15
- package/dist/src/web-ui/app/lib/conversation-status-model.d.ts +12 -0
- package/dist/src/web-ui/app/lib/conversation-status-model.js +116 -0
- package/dist/src/web-ui/app/lib/dashboard-job-templates.js +41 -0
- package/dist/src/web-ui/app/lib/dashboard-presentation.js +126 -0
- package/dist/src/web-ui/app/lib/message-markdown.d.ts +5 -0
- package/dist/src/web-ui/app/lib/message-markdown.js +99 -0
- package/dist/src/web-ui/app/lib/message-url-policy.d.ts +1 -0
- package/dist/src/web-ui/app/lib/message-url-policy.js +13 -0
- package/dist/src/web-ui/app/lib/schedule-errors.js +29 -0
- package/dist/src/web-ui/app/lib/schedule-message.js +30 -0
- package/dist/src/web-ui/app/lib/schedule-presentation.js +81 -0
- package/dist/src/web-ui/app/lib/session-read-state.d.ts +22 -0
- package/dist/src/web-ui/app/lib/session-read-state.js +63 -0
- package/dist/src/web-ui/app/lib/text-format.js +2 -143
- package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +26 -0
- package/dist/src/web-ui/app/lib/tool-activity-event.js +228 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +41 -0
- package/dist/src/web-ui/app/lib/tool-activity-model.js +255 -0
- package/dist/src/web-ui/app/lib/tool-timeline.d.ts +3 -0
- package/dist/src/web-ui/app/lib/tool-timeline.js +18 -0
- package/dist/src/web-ui/app/schedules-feature.js +87 -0
- package/dist/src/web-ui/app/services/message-link-preview-client.d.ts +14 -0
- package/dist/src/web-ui/app/services/message-link-preview-client.js +96 -0
- package/dist/src/web-ui/app/services/runtime-web-client/schedules.js +51 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +37 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +13 -8
- package/dist/src/web-ui/app/styles/00-tokens-base.css +11 -11
- package/dist/src/web-ui/app/styles/18-dashboard.css +384 -0
- package/dist/src/web-ui/app/styles/20-chat-composer.css +1 -130
- package/dist/src/web-ui/app/styles/26-message-content.css +295 -0
- package/dist/src/web-ui/app/styles/27-conversation-tools.css +266 -0
- package/dist/src/web-ui/app/styles/28-conversation-status.css +52 -0
- package/dist/src/web-ui/app/styles/38-schedule-workspace.css +263 -0
- package/dist/src/web-ui/app/styles/38-schedules.css +352 -0
- package/dist/src/web-ui/app/styles/90-responsive.css +14 -0
- package/dist/src/web-ui/app/styles/91-schedules-responsive.css +72 -0
- package/dist/src/web-ui/app/styles/92-dashboard-responsive.css +88 -0
- package/dist/src/web-ui/app/styles.css +8 -0
- package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
- package/dist/src/web-ui/app/ui-behavior.js +3 -1
- package/dist/src/web-ui/app/vendor/README.md +15 -0
- package/dist/src/web-ui/app/vendor/markdown-it.LICENSE +22 -0
- package/dist/src/web-ui/app/vendor/markdown-it.js +3003 -0
- package/dist/src/web-ui/link-preview/metadata.d.ts +9 -0
- package/dist/src/web-ui/link-preview/metadata.js +97 -0
- package/dist/src/web-ui/link-preview/preview-cache.d.ts +4 -0
- package/dist/src/web-ui/link-preview/preview-cache.js +23 -0
- package/dist/src/web-ui/link-preview/raster-response.d.ts +9 -0
- package/dist/src/web-ui/link-preview/raster-response.js +49 -0
- package/dist/src/web-ui/link-preview/routes.d.ts +3 -0
- package/dist/src/web-ui/link-preview/routes.js +97 -0
- package/dist/src/web-ui/link-preview/service.d.ts +11 -0
- package/dist/src/web-ui/link-preview/service.js +117 -0
- package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -1
- package/dist/src/web-ui/local-runtime/api-router.js +42 -73
- package/dist/src/web-ui/local-runtime/contracts.d.ts +2 -2
- package/dist/src/web-ui/local-runtime/environment-registry.d.ts +12 -1
- package/dist/src/web-ui/local-runtime/environment-registry.js +38 -3
- package/dist/src/web-ui/local-runtime/realtime-controller.js +3 -1
- package/dist/src/web-ui/local-runtime/request-execution.d.ts +5 -1
- package/dist/src/web-ui/local-runtime/request-execution.js +38 -2
- package/dist/src/web-ui/local-runtime/schedule-job-creation.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/schedule-job-creation.js +62 -0
- package/dist/src/web-ui/local-runtime/schedule-management-routes.d.ts +30 -0
- package/dist/src/web-ui/local-runtime/schedule-management-routes.js +134 -0
- package/dist/src/web-ui/local-runtime/schedule-run-page.d.ts +5 -0
- package/dist/src/web-ui/local-runtime/schedule-run-page.js +23 -0
- package/dist/src/web-ui/local-runtime/session-routes.d.ts +17 -0
- package/dist/src/web-ui/local-runtime/session-routes.js +74 -0
- package/dist/src/web-ui/local-runtime-backend.d.ts +2 -0
- package/dist/src/web-ui/local-runtime-backend.js +11 -1
- package/dist/src/web-ui/schedule-creation-contract.d.ts +7 -0
- package/dist/src/web-ui/schedule-creation-contract.js +1 -0
- package/dist/src/web-ui/server-shutdown.d.ts +4 -0
- package/dist/src/web-ui/server-shutdown.js +32 -0
- package/dist/src/web-ui/server.js +13 -10
- package/dist/src/web-ui/session-read-state/availability.d.ts +16 -0
- package/dist/src/web-ui/session-read-state/availability.js +20 -0
- package/dist/src/web-ui/session-read-state/projection.d.ts +17 -0
- package/dist/src/web-ui/session-read-state/projection.js +71 -0
- package/dist/src/web-ui/session-read-state/service.d.ts +86 -0
- package/dist/src/web-ui/session-read-state/service.js +89 -0
- package/dist/src/web-ui/session-read-state/store.d.ts +22 -0
- package/dist/src/web-ui/session-read-state/store.js +110 -0
- package/docs/configuration.md +41 -1
- package/docs/long-term-memory.md +46 -5
- package/docs/plugins.md +15 -9
- package/docs/runtime-invariant-coverage.md +1 -1
- package/docs/runtime-library.md +23 -0
- package/docs/runtime-public-contracts.md +32 -1
- package/package.json +3 -1
- package/plugins/code-outline/plugin.json +15 -0
- package/plugins/document-reader/plugin.json +17 -0
- package/plugins/exec/plugin.json +3 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +1 -1
- package/plugins/exec/source/process-manager.ts +1 -20
- package/plugins/exec/source/shell-platform.ts +29 -0
- package/plugins/exec/src/index.cjs +25 -18
- package/plugins/filesystem/plugin.json +17 -2
- package/plugins/filesystem/source/atomic-write.ts +9 -0
- package/plugins/filesystem/source/bounded-io.ts +5 -99
- package/plugins/filesystem/source/directory-authority-write.ts +64 -0
- package/plugins/filesystem/source/directory-sample-task.ts +23 -0
- package/plugins/filesystem/source/directory-sample.ts +132 -0
- package/plugins/filesystem/source/directory-write-task.ts +160 -0
- package/plugins/filesystem/source/mutation-parent.ts +11 -0
- package/plugins/filesystem/src/index.cjs +693 -118
- package/plugins/json-inspector/plugin.json +12 -0
- package/plugins/local-search/plugin.json +12 -0
- package/plugins/local-search/source/index.ts +2 -0
- package/plugins/local-search/source/paths.ts +30 -7
- package/plugins/local-search/source/ripgrep-process.ts +69 -0
- package/plugins/local-search/source/ripgrep.ts +19 -23
- package/plugins/local-search/src/index.cjs +295 -32
- package/plugins/memory/plugin.json +26 -1
- package/plugins/memory/source/index.ts +10 -6
- package/plugins/memory/src/index.cjs +11 -7
- package/plugins/project-orientation/plugin.json +14 -0
- package/plugins/web/source/aggregate-gate.ts +8 -130
- package/plugins/web/source/deadline.ts +14 -50
- package/plugins/web/source/errors.ts +17 -11
- package/plugins/web/source/limits.ts +3 -6
- package/plugins/web/source/network-policy.ts +28 -226
- package/plugins/web/source/public-http.ts +17 -142
- package/plugins/web/source/request-hop.ts +11 -191
- package/plugins/web/src/index.cjs +119 -59
- package/runtime.config.schema.json +7 -0
- package/src/runtime/README.md +105 -1
- package/src/runtime/local-host/README.md +86 -0
- package/src/runtime/scheduler/README.md +166 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { nextSchedulerOccurrence } from "./next-occurrence.js";
|
|
2
|
+
import { makeSchedulerRun } from "./run-records.js";
|
|
3
|
+
export function recoverSchedulerSnapshot(state, environmentId, now) {
|
|
4
|
+
const at = new Date(now).toISOString();
|
|
5
|
+
for (const job of state.jobs) {
|
|
6
|
+
if (job.environmentId !== environmentId)
|
|
7
|
+
throw new Error("scheduler_environment_mismatch");
|
|
8
|
+
}
|
|
9
|
+
for (const run of state.runs) {
|
|
10
|
+
if (run.status === "running") {
|
|
11
|
+
run.status = "interrupted";
|
|
12
|
+
run.finishedAt = at;
|
|
13
|
+
run.error = "scheduler_process_stopped";
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (run.status !== "pending")
|
|
17
|
+
continue;
|
|
18
|
+
run.status = "missed";
|
|
19
|
+
run.finishedAt = at;
|
|
20
|
+
run.error = "scheduler_offline_no_catchup";
|
|
21
|
+
}
|
|
22
|
+
for (const job of state.jobs) {
|
|
23
|
+
if (job.state !== "active")
|
|
24
|
+
continue;
|
|
25
|
+
if (!job.nextRunAt)
|
|
26
|
+
continue;
|
|
27
|
+
if (Date.parse(job.nextRunAt) > now)
|
|
28
|
+
continue;
|
|
29
|
+
const missed = makeSchedulerRun(job, job.nextRunAt, "schedule");
|
|
30
|
+
missed.status = "missed";
|
|
31
|
+
missed.finishedAt = at;
|
|
32
|
+
missed.error = "scheduler_offline_no_catchup";
|
|
33
|
+
state.runs.push(missed);
|
|
34
|
+
job.nextRunAt = nextSchedulerOccurrence(job.schedule, job.timeZone, now);
|
|
35
|
+
if (!job.nextRunAt)
|
|
36
|
+
job.state = "completed";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Older injected stores may ignore the view and still satisfy the full contract. */
|
|
2
|
+
export function createSchedulerWorkingStore(store) {
|
|
3
|
+
return {
|
|
4
|
+
acquire: () => store.acquire(),
|
|
5
|
+
read: () => store.read("active"),
|
|
6
|
+
update: (mutate) => store.update(mutate, "active"),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
@@ -25,6 +25,7 @@ export declare function initializeRequestSession(params: {
|
|
|
25
25
|
sessionStore: RequestSessionStore;
|
|
26
26
|
attachmentStore?: RuntimeAttachmentStore;
|
|
27
27
|
events: EventSink;
|
|
28
|
+
schedule?: import("../../sessions/schedule-metadata.js").ScheduleMessageReference;
|
|
28
29
|
}): Promise<Readonly<{
|
|
29
30
|
prompt: string;
|
|
30
31
|
modelAttachments: ModelGatewayAttachment[];
|
|
@@ -15,13 +15,26 @@ export async function openRequestSession(params) {
|
|
|
15
15
|
}
|
|
16
16
|
export async function initializeRequestSession(params) {
|
|
17
17
|
params.events.event("thinking.started");
|
|
18
|
-
await params.sessionStore.appendMessage(params.sessionId, "user", params.prompt, {
|
|
18
|
+
const persisted = await params.sessionStore.appendMessage(params.sessionId, "user", params.prompt, {
|
|
19
19
|
lastAgentMode: params.agentMode,
|
|
20
20
|
requestId: params.requestId,
|
|
21
|
+
...(params.schedule
|
|
22
|
+
? { source: "cron", schedule: params.schedule }
|
|
23
|
+
: {}),
|
|
21
24
|
...(params.opened.attachments.length > 0
|
|
22
25
|
? { attachments: params.opened.attachments }
|
|
23
26
|
: {}),
|
|
24
27
|
});
|
|
28
|
+
if (params.schedule) {
|
|
29
|
+
const message = persisted.messages.find((entry) => entry.requestId === params.requestId && entry.role === "user");
|
|
30
|
+
params.events.event("schedule.triggered", {
|
|
31
|
+
sessionId: params.sessionId,
|
|
32
|
+
schedule: params.schedule,
|
|
33
|
+
messageId: message?.id,
|
|
34
|
+
text: params.prompt,
|
|
35
|
+
createdAt: message?.createdAt,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
25
38
|
const [modelAttachments, toolAttachments] = await Promise.all([
|
|
26
39
|
resolveModelGatewayAttachments({
|
|
27
40
|
attachments: params.opened.attachments,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RuntimeAttachmentStore } from "../attachments/store.js";
|
|
2
|
+
import type { SessionStore } from "../ports.js";
|
|
3
|
+
type DeletionStore = Pick<SessionStore, "deleteSessionWithStats">;
|
|
4
|
+
/** The composed owner already finalizes attachments within its session transaction. */
|
|
5
|
+
export declare function bindManagedSessionAttachmentDeletion(sessions: DeletionStore, attachments: RuntimeAttachmentStore): void;
|
|
6
|
+
export declare function deleteSessionWithAttachments(sessions: DeletionStore, attachments: RuntimeAttachmentStore | undefined, sessionId: string): Promise<import("../../sessions/types.js").SessionDeleteResult>;
|
|
7
|
+
export declare function deleteSessionAttachmentsIfSupported(attachments: RuntimeAttachmentStore | undefined, sessionId: string): Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { assertValidSessionId } from "../../sessions/record/rules.js";
|
|
2
|
+
import { createSessionDeletionBoundary } from "./session-deletion-boundary.js";
|
|
3
|
+
import { createSessionMutationQueue } from "./session-mutation-queue.js";
|
|
4
|
+
// Adapter composition metadata. Each bound operation owns its deletion lifetime.
|
|
5
|
+
const bindings = new WeakMap();
|
|
6
|
+
function attachmentBindings(sessions) {
|
|
7
|
+
const existing = bindings.get(sessions);
|
|
8
|
+
if (existing)
|
|
9
|
+
return existing;
|
|
10
|
+
const bound = new WeakMap();
|
|
11
|
+
bindings.set(sessions, bound);
|
|
12
|
+
return bound;
|
|
13
|
+
}
|
|
14
|
+
/** The composed owner already finalizes attachments within its session transaction. */
|
|
15
|
+
export function bindManagedSessionAttachmentDeletion(sessions, attachments) {
|
|
16
|
+
attachmentBindings(sessions).set(attachments, (id) => sessions.deleteSessionWithStats(id));
|
|
17
|
+
}
|
|
18
|
+
export async function deleteSessionWithAttachments(sessions, attachments, sessionId) {
|
|
19
|
+
assertValidSessionId(sessionId);
|
|
20
|
+
if (!attachments)
|
|
21
|
+
return sessions.deleteSessionWithStats(sessionId);
|
|
22
|
+
const bound = attachmentBindings(sessions);
|
|
23
|
+
const existing = bound.get(attachments);
|
|
24
|
+
if (existing)
|
|
25
|
+
return existing(sessionId);
|
|
26
|
+
const remove = createCompatibilitySessionDeletion(sessions, attachments);
|
|
27
|
+
bound.set(attachments, remove);
|
|
28
|
+
return remove(sessionId);
|
|
29
|
+
}
|
|
30
|
+
function createCompatibilitySessionDeletion(sessions, attachments) {
|
|
31
|
+
const enqueue = createSessionMutationQueue();
|
|
32
|
+
const pending = new Map();
|
|
33
|
+
return async (sessionId) => {
|
|
34
|
+
let current = pending.get(sessionId);
|
|
35
|
+
if (!current) {
|
|
36
|
+
current = {
|
|
37
|
+
deletion: createSessionDeletionBoundary(sessions, enqueue, (result) => deleteSessionAttachmentsIfSupported(attachments, result.sessionId)),
|
|
38
|
+
attempt: undefined,
|
|
39
|
+
callers: 0,
|
|
40
|
+
delivered: false,
|
|
41
|
+
};
|
|
42
|
+
pending.set(sessionId, current);
|
|
43
|
+
}
|
|
44
|
+
current.callers += 1;
|
|
45
|
+
try {
|
|
46
|
+
current.attempt ??= current.deletion.deleteSessionWithStats(sessionId);
|
|
47
|
+
const result = await current.attempt;
|
|
48
|
+
if (current.delivered) {
|
|
49
|
+
return {
|
|
50
|
+
sessionId,
|
|
51
|
+
deleted: false,
|
|
52
|
+
deletedMessages: 0,
|
|
53
|
+
deletedRequests: 0,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
current.delivered = true;
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
current.callers -= 1;
|
|
61
|
+
// Concurrent callers share failure; only a later explicit call may retry.
|
|
62
|
+
if (current.callers === 0)
|
|
63
|
+
current.attempt = undefined;
|
|
64
|
+
// Raw stores may reuse IDs after successful deletion; retain only failed work.
|
|
65
|
+
if (canReleaseCompatibilityDeletion(current))
|
|
66
|
+
pending.delete(sessionId);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function canReleaseCompatibilityDeletion(state) {
|
|
71
|
+
return state.callers === 0 && state.delivered;
|
|
72
|
+
}
|
|
73
|
+
export async function deleteSessionAttachmentsIfSupported(attachments, sessionId) {
|
|
74
|
+
if (!attachments)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
await attachments.deleteSessionAttachments(sessionId);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (isUnsupportedAttachmentOwner(error))
|
|
81
|
+
return;
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function isUnsupportedAttachmentOwner(error) {
|
|
86
|
+
return error instanceof Error && error.message === "attachment_owner_invalid";
|
|
87
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SessionDeleteResult } from "../../sessions/types.js";
|
|
2
|
+
import type { SessionStore } from "../ports.js";
|
|
3
|
+
import { type SessionDeletionFinalizer } from "./session-deletion-finalization.js";
|
|
4
|
+
import type { SessionMutationQueue } from "./session-mutation-queue.js";
|
|
5
|
+
/** Shared transaction for managed stores and compatibility deletion adapters. */
|
|
6
|
+
export declare function createSessionDeletionBoundary(base: Pick<SessionStore, "deleteSessionWithStats">, enqueue: SessionMutationQueue, finalize?: SessionDeletionFinalizer): {
|
|
7
|
+
deleteSessionWithStats: (sessionId: string) => Promise<SessionDeleteResult>;
|
|
8
|
+
isDeleted: (sessionId: string) => boolean;
|
|
9
|
+
onDeleted: (listener: import("./session-deletion-cleanup.js").SessionDeletionListener) => () => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { assertValidSessionId } from "../../sessions/record/rules.js";
|
|
2
|
+
import { createSessionDeletionCleanup } from "./session-deletion-cleanup.js";
|
|
3
|
+
import { createSessionDeletionFinalization, } from "./session-deletion-finalization.js";
|
|
4
|
+
import { createSessionDeletionReceipts } from "./session-deletion-receipts.js";
|
|
5
|
+
/** Shared transaction for managed stores and compatibility deletion adapters. */
|
|
6
|
+
export function createSessionDeletionBoundary(base, enqueue, finalize) {
|
|
7
|
+
const cleanup = createSessionDeletionCleanup();
|
|
8
|
+
const receipts = createSessionDeletionReceipts(base);
|
|
9
|
+
const finalization = finalize
|
|
10
|
+
? createSessionDeletionFinalization(finalize)
|
|
11
|
+
: undefined;
|
|
12
|
+
if (finalization)
|
|
13
|
+
cleanup.onDeleted(finalization.finalizeDeletedSession);
|
|
14
|
+
async function deleteSessionWithStats(sessionId) {
|
|
15
|
+
assertValidSessionId(sessionId);
|
|
16
|
+
const settlePhysical = finalization?.prepare(sessionId);
|
|
17
|
+
let notification;
|
|
18
|
+
// Reserve before invoking listeners: synchronous reentry must queue behind us.
|
|
19
|
+
const result = enqueue(sessionId, async () => {
|
|
20
|
+
const [deletion] = await Promise.allSettled([receipts.remove(sessionId)]);
|
|
21
|
+
settlePhysical?.(deletion);
|
|
22
|
+
const [notified] = await notification;
|
|
23
|
+
if (deletion.status === "rejected")
|
|
24
|
+
throw deletion.reason;
|
|
25
|
+
if (notified.status === "rejected")
|
|
26
|
+
throw notified.reason;
|
|
27
|
+
receipts.acknowledge(sessionId);
|
|
28
|
+
return deletion.value;
|
|
29
|
+
});
|
|
30
|
+
// The queue is deferred; intent and cleanup are still installed synchronously.
|
|
31
|
+
notification = Promise.allSettled([cleanup.notify(sessionId)]);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
deleteSessionWithStats,
|
|
36
|
+
isDeleted: cleanup.isDeleted,
|
|
37
|
+
onDeleted: cleanup.onDeleted,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SessionDeletionListener = (sessionId: string) => void | Promise<void>;
|
|
2
|
+
/** Tombstones and original cleanup obligations last for this environment lifetime. */
|
|
3
|
+
export declare function createSessionDeletionCleanup(): {
|
|
4
|
+
isDeleted: (sessionId: string) => boolean;
|
|
5
|
+
onDeleted: (listener: SessionDeletionListener) => () => void;
|
|
6
|
+
notify: (sessionId: string) => Promise<void>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Tombstones and original cleanup obligations last for this environment lifetime. */
|
|
2
|
+
export function createSessionDeletionCleanup() {
|
|
3
|
+
const listeners = new Set();
|
|
4
|
+
const deletedSessions = new Map();
|
|
5
|
+
function deletionState(sessionId) {
|
|
6
|
+
const existing = deletedSessions.get(sessionId);
|
|
7
|
+
if (existing)
|
|
8
|
+
return existing;
|
|
9
|
+
const state = { pending: new Set(listeners) };
|
|
10
|
+
deletedSessions.set(sessionId, state);
|
|
11
|
+
return state;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
isDeleted: (sessionId) => deletedSessions.has(sessionId),
|
|
15
|
+
onDeleted: (listener) => {
|
|
16
|
+
listeners.add(listener);
|
|
17
|
+
return () => {
|
|
18
|
+
listeners.delete(listener);
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
notify: (sessionId) => {
|
|
22
|
+
// Install the tombstone before invoking any listener or yielding.
|
|
23
|
+
const state = deletionState(sessionId);
|
|
24
|
+
if (state.attempt)
|
|
25
|
+
return state.attempt;
|
|
26
|
+
if (state.pending.size === 0)
|
|
27
|
+
return Promise.resolve();
|
|
28
|
+
return startCleanupAttempt(sessionId, state);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function startCleanupAttempt(sessionId, state) {
|
|
33
|
+
let resolveAttempt;
|
|
34
|
+
let rejectAttempt;
|
|
35
|
+
const attempt = new Promise((resolve, reject) => {
|
|
36
|
+
resolveAttempt = resolve;
|
|
37
|
+
rejectAttempt = reject;
|
|
38
|
+
});
|
|
39
|
+
// Reentrant or concurrent deletion sees this same attempt immediately.
|
|
40
|
+
state.attempt = attempt;
|
|
41
|
+
void settleCleanupListeners(sessionId, state).then(() => {
|
|
42
|
+
state.attempt = undefined;
|
|
43
|
+
resolveAttempt();
|
|
44
|
+
}, (error) => {
|
|
45
|
+
state.attempt = undefined;
|
|
46
|
+
rejectAttempt(error);
|
|
47
|
+
});
|
|
48
|
+
return attempt;
|
|
49
|
+
}
|
|
50
|
+
async function settleCleanupListeners(sessionId, state) {
|
|
51
|
+
const outcomes = await Promise.allSettled([...state.pending].map(async (listener) => {
|
|
52
|
+
await listener(sessionId);
|
|
53
|
+
state.pending.delete(listener);
|
|
54
|
+
}));
|
|
55
|
+
// Keep only failed obligations, and wait for every listener before a retry.
|
|
56
|
+
const failure = outcomes.find(isFailedCleanup);
|
|
57
|
+
if (failure)
|
|
58
|
+
throw failure.reason;
|
|
59
|
+
}
|
|
60
|
+
function isFailedCleanup(outcome) {
|
|
61
|
+
return outcome.status === "rejected";
|
|
62
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SessionDeleteResult } from "../../sessions/types.js";
|
|
2
|
+
export type SessionDeletionFinalizer = (result: SessionDeleteResult) => void | Promise<void>;
|
|
3
|
+
/** Cleanup captures its physical-result promise before another call can replace it. */
|
|
4
|
+
export declare function createSessionDeletionFinalization(finalize: SessionDeletionFinalizer): {
|
|
5
|
+
prepare(sessionId: string): (outcome: PromiseSettledResult<SessionDeleteResult>) => void;
|
|
6
|
+
finalizeDeletedSession(sessionId: string): Promise<void>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Cleanup captures its physical-result promise before another call can replace it. */
|
|
2
|
+
export function createSessionDeletionFinalization(finalize) {
|
|
3
|
+
const physicalResults = new Map();
|
|
4
|
+
return {
|
|
5
|
+
prepare(sessionId) {
|
|
6
|
+
let resolve;
|
|
7
|
+
let reject;
|
|
8
|
+
const physical = new Promise((onResult, onError) => {
|
|
9
|
+
resolve = onResult;
|
|
10
|
+
reject = onError;
|
|
11
|
+
});
|
|
12
|
+
// Concurrent callers share cleanup, so some prepared results have no listener.
|
|
13
|
+
void physical.catch(() => undefined);
|
|
14
|
+
physicalResults.set(sessionId, physical);
|
|
15
|
+
return (outcome) => {
|
|
16
|
+
if (outcome.status === "fulfilled")
|
|
17
|
+
resolve(outcome.value);
|
|
18
|
+
else
|
|
19
|
+
reject(outcome.reason);
|
|
20
|
+
if (physicalResults.get(sessionId) === physical)
|
|
21
|
+
physicalResults.delete(sessionId);
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
async finalizeDeletedSession(sessionId) {
|
|
25
|
+
const physical = physicalResults.get(sessionId);
|
|
26
|
+
if (!physical)
|
|
27
|
+
throw new Error("session_deletion_attempt_missing");
|
|
28
|
+
const result = await physical;
|
|
29
|
+
if (!result.deleted)
|
|
30
|
+
return;
|
|
31
|
+
await finalize(result);
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SessionDeleteResult } from "../../sessions/types.js";
|
|
2
|
+
import type { SessionStore } from "../ports.js";
|
|
3
|
+
/** Accessed only inside the owning lifecycle's per-session mutation queue. */
|
|
4
|
+
export declare function createSessionDeletionReceipts(base: Pick<SessionStore, "deleteSessionWithStats">): {
|
|
5
|
+
remove(sessionId: string): Promise<SessionDeleteResult>;
|
|
6
|
+
acknowledge(sessionId: string): void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Accessed only inside the owning lifecycle's per-session mutation queue. */
|
|
2
|
+
export function createSessionDeletionReceipts(base) {
|
|
3
|
+
const undelivered = new Map();
|
|
4
|
+
return {
|
|
5
|
+
async remove(sessionId) {
|
|
6
|
+
const existing = undelivered.get(sessionId);
|
|
7
|
+
if (existing)
|
|
8
|
+
return existing;
|
|
9
|
+
// Keep exact physical counts when later lifecycle cleanup rejects.
|
|
10
|
+
const receipt = { ...(await base.deleteSessionWithStats(sessionId)) };
|
|
11
|
+
undelivered.set(sessionId, receipt);
|
|
12
|
+
return receipt;
|
|
13
|
+
},
|
|
14
|
+
acknowledge(sessionId) {
|
|
15
|
+
undelivered.delete(sessionId);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SessionStore } from "../ports.js";
|
|
2
|
+
import type { SessionDeletionListener } from "./session-deletion-cleanup.js";
|
|
3
|
+
import type { SessionDeletionFinalizer } from "./session-deletion-finalization.js";
|
|
4
|
+
export type { SessionDeletionListener } from "./session-deletion-cleanup.js";
|
|
5
|
+
export declare class SessionDeletedError extends Error {
|
|
6
|
+
readonly sessionId: string;
|
|
7
|
+
readonly code = "session_deleted";
|
|
8
|
+
constructor(sessionId: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function isSessionDeletedError(error: unknown): error is SessionDeletedError;
|
|
11
|
+
export type SessionLifecycleStore = Readonly<{
|
|
12
|
+
store: SessionStore;
|
|
13
|
+
isDeleted: (sessionId: string) => boolean;
|
|
14
|
+
onDeleted: (listener: SessionDeletionListener) => () => void;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Environment-owned deletion boundary. Every caller must use the wrapped store:
|
|
18
|
+
* an in-flight write finishes before deletion, while queued and later writes fail.
|
|
19
|
+
* Tombstones last for this application lifetime; deleted IDs cannot be reused.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSessionLifecycleStore(base: SessionStore, finalizeDeletion?: SessionDeletionFinalizer): SessionLifecycleStore;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createSessionDeletionBoundary } from "./session-deletion-boundary.js";
|
|
2
|
+
import { createSessionMutationQueue } from "./session-mutation-queue.js";
|
|
3
|
+
export class SessionDeletedError extends Error {
|
|
4
|
+
sessionId;
|
|
5
|
+
code = "session_deleted";
|
|
6
|
+
constructor(sessionId) {
|
|
7
|
+
super(`Session ${sessionId} has been deleted`);
|
|
8
|
+
this.sessionId = sessionId;
|
|
9
|
+
this.name = "SessionDeletedError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function isSessionDeletedError(error) {
|
|
13
|
+
return error instanceof SessionDeletedError;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Environment-owned deletion boundary. Every caller must use the wrapped store:
|
|
17
|
+
* an in-flight write finishes before deletion, while queued and later writes fail.
|
|
18
|
+
* Tombstones last for this application lifetime; deleted IDs cannot be reused.
|
|
19
|
+
*/
|
|
20
|
+
export function createSessionLifecycleStore(base, finalizeDeletion) {
|
|
21
|
+
const enqueueSessionMutation = createSessionMutationQueue();
|
|
22
|
+
const deletion = createSessionDeletionBoundary(base, enqueueSessionMutation, finalizeDeletion);
|
|
23
|
+
function assertSessionNotDeleted(sessionId) {
|
|
24
|
+
if (deletion.isDeleted(sessionId)) {
|
|
25
|
+
throw new SessionDeletedError(sessionId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function wrapSessionMutation(operation) {
|
|
29
|
+
return async (...args) => {
|
|
30
|
+
assertSessionNotDeleted(args[0]);
|
|
31
|
+
return enqueueSessionMutation(args[0], async () => {
|
|
32
|
+
assertSessionNotDeleted(args[0]);
|
|
33
|
+
return operation.apply(base, args);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const store = {
|
|
38
|
+
getAllSessions: base.getAllSessions.bind(base),
|
|
39
|
+
listSessions: base.listSessions.bind(base),
|
|
40
|
+
getSessionById: base.getSessionById.bind(base),
|
|
41
|
+
getSessionSnapshot: base.getSessionSnapshot.bind(base),
|
|
42
|
+
getRequestReplayById: base.getRequestReplayById.bind(base),
|
|
43
|
+
getOrCreateSession: wrapSessionMutation(base.getOrCreateSession),
|
|
44
|
+
updateSessionTitle: wrapSessionMutation(base.updateSessionTitle),
|
|
45
|
+
appendMessage: wrapSessionMutation(base.appendMessage),
|
|
46
|
+
startRequestStream: wrapSessionMutation(base.startRequestStream),
|
|
47
|
+
appendRequestEvent: wrapSessionMutation(base.appendRequestEvent),
|
|
48
|
+
compareAndSwapSessionMemoryCheckpoint: wrapSessionMutation(base.compareAndSwapSessionMemoryCheckpoint),
|
|
49
|
+
resetSession: wrapSessionMutation(base.resetSession),
|
|
50
|
+
clearSessionMessages: wrapSessionMutation(base.clearSessionMessages),
|
|
51
|
+
deleteMessage: wrapSessionMutation(base.deleteMessage),
|
|
52
|
+
deleteMessageWithStats: wrapSessionMutation(base.deleteMessageWithStats),
|
|
53
|
+
deleteSession: async (sessionId) => (await deletion.deleteSessionWithStats(sessionId)).deleted,
|
|
54
|
+
deleteSessionWithStats: deletion.deleteSessionWithStats,
|
|
55
|
+
...(base.updateSessionRuntimeMode
|
|
56
|
+
? {
|
|
57
|
+
updateSessionRuntimeMode: wrapSessionMutation(base.updateSessionRuntimeMode),
|
|
58
|
+
}
|
|
59
|
+
: {}),
|
|
60
|
+
...(base.appendContextEntry
|
|
61
|
+
? { appendContextEntry: wrapSessionMutation(base.appendContextEntry) }
|
|
62
|
+
: {}),
|
|
63
|
+
...(base.upsertArtifactPaths
|
|
64
|
+
? { upsertArtifactPaths: wrapSessionMutation(base.upsertArtifactPaths) }
|
|
65
|
+
: {}),
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
store,
|
|
69
|
+
isDeleted: deletion.isDeleted,
|
|
70
|
+
onDeleted: deletion.onDeleted,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** One queue per store lifetime; unrelated sessions remain independent. */
|
|
2
|
+
export function createSessionMutationQueue() {
|
|
3
|
+
const queues = new Map();
|
|
4
|
+
return (sessionId, operation) => {
|
|
5
|
+
const predecessor = queues.get(sessionId) ?? Promise.resolve();
|
|
6
|
+
const result = predecessor.then(operation);
|
|
7
|
+
const settled = result.then(() => undefined, () => undefined);
|
|
8
|
+
queues.set(sessionId, settled);
|
|
9
|
+
void settled.then(() => {
|
|
10
|
+
if (queues.get(sessionId) === settled)
|
|
11
|
+
queues.delete(sessionId);
|
|
12
|
+
});
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ExecutionAgentCapabilityInvocation, type ExecutionAgentDecisionValidationIssue } from "./contracts.js";
|
|
2
|
+
import type { PreparedExecutionAgentCapability, PreparedExecutionAgentDecisionContract } from "./format.js";
|
|
3
|
+
export declare function parseCapabilityCatalogGroupIds(value: unknown, offeredCatalogGroupIds: readonly string[], issues: ExecutionAgentDecisionValidationIssue[]): readonly string[] | undefined;
|
|
4
|
+
export declare function parseCapabilityBatch(value: unknown, contract: PreparedExecutionAgentDecisionContract, issues: ExecutionAgentDecisionValidationIssue[]): readonly ExecutionAgentCapabilityInvocation[] | undefined;
|
|
5
|
+
export declare function parseCapabilityInvocation(params: Readonly<{
|
|
6
|
+
value: unknown;
|
|
7
|
+
path: string;
|
|
8
|
+
capabilities: readonly PreparedExecutionAgentCapability[];
|
|
9
|
+
observationOnly: boolean;
|
|
10
|
+
includesAction: boolean;
|
|
11
|
+
issues: ExecutionAgentDecisionValidationIssue[];
|
|
12
|
+
}>): Readonly<{
|
|
13
|
+
value?: ExecutionAgentCapabilityInvocation;
|
|
14
|
+
expectedKeys: readonly string[];
|
|
15
|
+
}>;
|
|
16
|
+
export declare function parseWorkingDirectory(record: Record<string, unknown>, contract: PreparedExecutionAgentDecisionContract, issues: ExecutionAgentDecisionValidationIssue[]): string | undefined;
|