@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
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ hardcoded defaults.
|
|
|
13
13
|
- Configurable local and hosted model providers
|
|
14
14
|
- Persistent conversations, request events, and replay
|
|
15
15
|
- Optional passive long-term memory across sessions
|
|
16
|
+
- Local scheduled requests bound to their conversations
|
|
16
17
|
- Planning, execution, and review workflows
|
|
17
18
|
- Manifest-based tools and plugins with explicit runtime boundaries
|
|
18
19
|
- Workspace, file, skill, and memory capabilities
|
|
@@ -34,11 +35,24 @@ The Web UI supports:
|
|
|
34
35
|
- steering an active request or queuing the next message
|
|
35
36
|
- editing runtime configuration
|
|
36
37
|
- configuring passive long-term memory with a consumer-selected embedding model
|
|
38
|
+
- managing schedules, their saved models, and run history in the Schedules workspace
|
|
37
39
|
- inspecting runtime status, logs, and health
|
|
38
40
|
|
|
39
41
|
The UI is a client of the runtime; persisted sessions, events, and request state
|
|
40
42
|
remain owned by the runtime.
|
|
41
43
|
|
|
44
|
+
Schedules can also be managed through the model's built-in `schedules` capability.
|
|
45
|
+
Every Job belongs to a conversation and runs there with its saved model and FULL
|
|
46
|
+
tool permissions. The chat shows a compact run card; expand it to read the exact
|
|
47
|
+
historical prompt. ABot must be running at the scheduled time. Missed offline
|
|
48
|
+
occurrences and failed runs are not retried. Cancelling a Job or deleting its
|
|
49
|
+
conversation prevents pending starts; an already-started run continues.
|
|
50
|
+
|
|
51
|
+
Timers, one-time requests, intervals, and daily/weekly/monthly schedules are
|
|
52
|
+
supported. Calendar schedules require an exact time and IANA time zone. Jobs and
|
|
53
|
+
run history are stored locally under the environment's runtime directory.
|
|
54
|
+
Scheduling uses the Runtime directly and requires no plugin or external bridge.
|
|
55
|
+
|
|
42
56
|
## Requirements
|
|
43
57
|
|
|
44
58
|
- Node.js `^20.19.0` or `>=22.12.0` (Node.js 21 is not supported)
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
-
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
4
4
|
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { initializeConfiguredRuntimeDirectories } from "./runtime-setup-directories.js";
|
|
5
6
|
import { buildModelConfig, buildProviderConfig, DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES, isRecord, parseBaseUrl, parseProvider, readJsonObject, resolveRuntimePackageRoot, writeJsonObject, } from "./runtime-setup-files.js";
|
|
6
7
|
import { getInitNextSteps, getInitUsage, } from "./runtime-setup-presentation.js";
|
|
7
8
|
const ENV_FILE = ".env";
|
|
@@ -13,16 +14,6 @@ const CONFIG_EXAMPLE_FILE = join("examples", "runtime.config.example.json");
|
|
|
13
14
|
const REQUEST_RUNNER_CONFIG_EXAMPLE_FILE = join("examples", "request-runner.config.example.json");
|
|
14
15
|
const MODEL_CONFIG_EXAMPLE_FILE = join("examples", "models", "default.config.json");
|
|
15
16
|
const REQUIRED_ENV_LINE = "LLM_RUNTIME_CONFIG_FILE=local/runtime.config.json";
|
|
16
|
-
const RUNTIME_DIRS = [
|
|
17
|
-
join(".runtime", "compiled"),
|
|
18
|
-
join(".runtime", "shared", "logs"),
|
|
19
|
-
join(".runtime", "prod"),
|
|
20
|
-
join(".runtime", "prod", "sandbox"),
|
|
21
|
-
join(".runtime", "prod", "sessions"),
|
|
22
|
-
join(".runtime", "dev"),
|
|
23
|
-
join(".runtime", "dev", "sandbox"),
|
|
24
|
-
join(".runtime", "dev", "sessions"),
|
|
25
|
-
];
|
|
26
17
|
function requireValue(argv, index, flag) {
|
|
27
18
|
const value = argv[index + 1]?.trim();
|
|
28
19
|
if (!value || value.startsWith("--")) {
|
|
@@ -238,7 +229,7 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
|
|
|
238
229
|
if (modelConfigStatus !== "kept") {
|
|
239
230
|
await configureModelProfile(modelConfigPath, options.provider, options.model);
|
|
240
231
|
}
|
|
241
|
-
|
|
232
|
+
const runtimeDirectories = await initializeConfiguredRuntimeDirectories(options.rootDir, configPath);
|
|
242
233
|
console.log([
|
|
243
234
|
"abot initialized",
|
|
244
235
|
`root: ${options.rootDir}`,
|
|
@@ -250,7 +241,7 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
|
|
|
250
241
|
`${LOCAL_REQUEST_RUNNER_CONFIG_FILE}: ${requestRunnerConfigStatus}`,
|
|
251
242
|
`${LOCAL_MODEL_CONFIG_FILE}: ${modelConfigStatus}`,
|
|
252
243
|
...methodologyStatuses.map(({ relativePath, status }) => `${relativePath}: ${status}`),
|
|
253
|
-
|
|
244
|
+
`initialized runtime directories: ${runtimeDirectories.map((directory) => relative(options.rootDir, directory) || ".").join(", ")}`,
|
|
254
245
|
"",
|
|
255
246
|
...getInitNextSteps(commandMode),
|
|
256
247
|
].join("\n"));
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { loadRuntimeConfig } from "../src/runtime/config.js";
|
|
4
|
+
import { RUNTIME_LOGS_DIR_NAME } from "../src/runtime/config/layout.js";
|
|
5
|
+
import { isRecord, readJsonObject, } from "./runtime-setup-files.js";
|
|
6
|
+
function configuredEnvironmentIds(config) {
|
|
7
|
+
if (!isRecord(config.environment))
|
|
8
|
+
return [undefined];
|
|
9
|
+
if (!isRecord(config.environment.profiles))
|
|
10
|
+
return [undefined];
|
|
11
|
+
const profileIds = Object.keys(config.environment.profiles);
|
|
12
|
+
const hasConfiguredEnvironments = profileIds.length > 0;
|
|
13
|
+
return hasConfiguredEnvironments ? profileIds : [undefined];
|
|
14
|
+
}
|
|
15
|
+
function runtimeOwnedDirectories(paths) {
|
|
16
|
+
return [
|
|
17
|
+
paths.runtimeDir,
|
|
18
|
+
paths.agentWorkDir,
|
|
19
|
+
paths.sessionsDir,
|
|
20
|
+
paths.attachmentsDir,
|
|
21
|
+
paths.sharedDir,
|
|
22
|
+
paths.compiledDir,
|
|
23
|
+
dirname(paths.traceFile),
|
|
24
|
+
join(paths.sharedDir, RUNTIME_LOGS_DIR_NAME),
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
/** Initialize the preserved configuration's output roots without moving existing state. */
|
|
28
|
+
export async function initializeConfiguredRuntimeDirectories(rootDir, configPath) {
|
|
29
|
+
const config = await readJsonObject(configPath);
|
|
30
|
+
// Resolve every environment before creating any directories. This preserves the
|
|
31
|
+
// canonical guard against silently reassigning existing shared runtime state.
|
|
32
|
+
const configurations = configuredEnvironmentIds(config).map((profileId) => loadRuntimeConfig({ rootDir, configPath, profileId }));
|
|
33
|
+
const directories = [
|
|
34
|
+
...new Set(configurations.flatMap(({ paths }) => runtimeOwnedDirectories(paths))),
|
|
35
|
+
];
|
|
36
|
+
await Promise.all(directories.map((directory) => mkdir(directory, { recursive: true })));
|
|
37
|
+
return directories;
|
|
38
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type WebSocket from "ws";
|
|
2
|
+
import type { RuntimeRequestHandler } from "../runtime/composition.js";
|
|
2
3
|
import { type RequestSteeringInbox } from "../runtime/request/request-steering.js";
|
|
3
4
|
export type BridgeRequestSteeringRegistry = Readonly<{
|
|
4
5
|
close(requestId: string, inbox: RequestSteeringInbox): Promise<void>;
|
|
5
6
|
handleMessage(ws: WebSocket, message: Record<string, unknown>): Promise<boolean>;
|
|
6
7
|
open(requestId: string): RequestSteeringInbox;
|
|
7
8
|
}>;
|
|
8
|
-
export declare function createBridgeRequestSteeringRegistry(): BridgeRequestSteeringRegistry;
|
|
9
|
+
export declare function createBridgeRequestSteeringRegistry(steer?: RuntimeRequestHandler["steer"]): BridgeRequestSteeringRegistry;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { traceDebug } from "../runtime/observability/debug-logger.js";
|
|
2
2
|
import { createRequestSteeringInbox, } from "../runtime/request/request-steering.js";
|
|
3
3
|
const LOG_SCOPE = "agent-bridge.request_steering";
|
|
4
|
-
export function createBridgeRequestSteeringRegistry() {
|
|
4
|
+
export function createBridgeRequestSteeringRegistry(steer) {
|
|
5
5
|
const active = new Map();
|
|
6
6
|
return Object.freeze({
|
|
7
7
|
async close(requestId, inbox) {
|
|
@@ -23,7 +23,9 @@ export function createBridgeRequestSteeringRegistry() {
|
|
|
23
23
|
const steerId = readString(message.steerId).trim();
|
|
24
24
|
const text = readString(message.text).trim();
|
|
25
25
|
const current = active.get(requestId);
|
|
26
|
-
const result =
|
|
26
|
+
const result = (steer && current
|
|
27
|
+
? await steer(requestId, { steerId, text })
|
|
28
|
+
: current?.inbox.append({ steerId, text })) ??
|
|
27
29
|
Object.freeze({
|
|
28
30
|
ok: false,
|
|
29
31
|
reason: "request_not_active",
|
|
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { clearSessionMessages, deleteMessageWithStats, deleteSessionWithStats, getRequestReplayById, getSessionSnapshot, listSessions, } from "../sessions/index.js";
|
|
4
4
|
import { DEFAULT_MAX_ATTACHMENT_BYTES, } from "../runtime/attachments/store.js";
|
|
5
|
+
import { deleteSessionWithAttachments, deleteSessionAttachmentsIfSupported, } from "../runtime/session/session-attachment-deletion.js";
|
|
5
6
|
import { resolveRuntimeAttachmentMimeType } from "../shared/attachments.js";
|
|
6
7
|
const defaultRuntimeReplaySessionStore = {
|
|
7
8
|
clearSessionMessages,
|
|
@@ -344,10 +345,7 @@ async function handleSessionDeleteRequest(ws, msg, sessionStore, attachmentStore
|
|
|
344
345
|
return;
|
|
345
346
|
}
|
|
346
347
|
try {
|
|
347
|
-
const result = await sessionStore
|
|
348
|
-
if (result.deleted) {
|
|
349
|
-
await deleteSessionAttachmentsIfSupported(attachmentStore, sessionId);
|
|
350
|
-
}
|
|
348
|
+
const result = await deleteSessionWithAttachments(sessionStore, attachmentStore, sessionId);
|
|
351
349
|
sendRuntimeReplayResponse(ws, {
|
|
352
350
|
type: "session.delete.response",
|
|
353
351
|
correlationId,
|
|
@@ -402,21 +400,6 @@ async function handleSessionMessagesClearRequest(ws, msg, sessionStore, attachme
|
|
|
402
400
|
}, error instanceof Error ? error.message : String(error));
|
|
403
401
|
}
|
|
404
402
|
}
|
|
405
|
-
async function deleteSessionAttachmentsIfSupported(attachmentStore, sessionId) {
|
|
406
|
-
if (!attachmentStore) {
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
try {
|
|
410
|
-
await attachmentStore.deleteSessionAttachments(sessionId);
|
|
411
|
-
}
|
|
412
|
-
catch (error) {
|
|
413
|
-
if (error instanceof Error &&
|
|
414
|
-
error.message === "attachment_owner_invalid") {
|
|
415
|
-
return;
|
|
416
|
-
}
|
|
417
|
-
throw error;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
403
|
async function deleteAttachmentIfSupported(attachmentStore, attachment, sessionId) {
|
|
421
404
|
if (!attachmentStore?.deleteAttachment) {
|
|
422
405
|
return;
|
|
@@ -109,7 +109,7 @@ export function startAgentBridge(options = {}) {
|
|
|
109
109
|
let lastMessageAt;
|
|
110
110
|
let lastPongAt;
|
|
111
111
|
const pendingToolApprovals = new Map();
|
|
112
|
-
const requestSteering = createBridgeRequestSteeringRegistry();
|
|
112
|
+
const requestSteering = createBridgeRequestSteeringRegistry(requestHandler.steer);
|
|
113
113
|
function getStatus() {
|
|
114
114
|
return {
|
|
115
115
|
runtimeId,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TOOL_NORMAL_INVOCATION_IDENTIFIER_MAX_LENGTH, TOOL_NORMAL_INVOCATION_PAYLOAD_MAX_BYTES, TOOL_NORMAL_INVOCATION_VERSION, } from "./contracts.js";
|
|
2
|
-
const MAX_OPERATIONS =
|
|
2
|
+
const MAX_OPERATIONS = 32;
|
|
3
3
|
const MAX_SUMMARY_LENGTH = 512;
|
|
4
4
|
const MAX_INSTRUCTIONS_LENGTH = 1_024;
|
|
5
5
|
const MAX_PROPERTIES = 16;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isToolDefinitionRecordValue } from "./definition-shape.js";
|
|
2
|
+
import { parseEventResultMetadata } from "./event-result-metadata.js";
|
|
2
3
|
const EVENT_PROJECTION_KINDS = [
|
|
3
4
|
"string",
|
|
4
5
|
"number",
|
|
@@ -16,8 +17,10 @@ export function parseEventPresentation(toolName, raw) {
|
|
|
16
17
|
}
|
|
17
18
|
const metadata = Object.fromEntries(Object.entries(raw.metadata).map(([key, projection]) => parseEventMetadataProjection(toolName, key, projection)));
|
|
18
19
|
const lifecycle = parseEventLifecycle(toolName, raw.lifecycle);
|
|
20
|
+
const resultMetadata = parseEventResultMetadata(raw.resultMetadata, `eventPresentation.resultMetadata (${toolName})`);
|
|
19
21
|
return {
|
|
20
22
|
metadata,
|
|
23
|
+
...(resultMetadata ? { resultMetadata } : {}),
|
|
21
24
|
...(lifecycle ? { lifecycle } : {}),
|
|
22
25
|
};
|
|
23
26
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isToolDefinitionRecordValue } from "./definition-shape.js";
|
|
2
|
+
const RESULT_METADATA_LIMIT = 16;
|
|
3
|
+
const RESULT_PATH_SEGMENT_LIMIT = 4;
|
|
4
|
+
const RESULT_PROJECTION_KINDS = ["preview", "number", "boolean"];
|
|
5
|
+
const FORBIDDEN_PATH_SEGMENTS = new Set([
|
|
6
|
+
"__proto__",
|
|
7
|
+
"prototype",
|
|
8
|
+
"constructor",
|
|
9
|
+
]);
|
|
10
|
+
export function parseEventResultMetadata(raw, path) {
|
|
11
|
+
if (raw === undefined)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (!isToolDefinitionRecordValue(raw)) {
|
|
14
|
+
throw new Error(`${path} must be an object`);
|
|
15
|
+
}
|
|
16
|
+
const entries = Object.entries(raw);
|
|
17
|
+
if (entries.length > RESULT_METADATA_LIMIT) {
|
|
18
|
+
throw new Error(`${path} exceeds ${RESULT_METADATA_LIMIT} projections`);
|
|
19
|
+
}
|
|
20
|
+
const result = Object.fromEntries(entries.map(([key, value]) => {
|
|
21
|
+
if (!hasSupportedResultMetadataKey(key)) {
|
|
22
|
+
throw new Error(`${path} contains an invalid metadata key`);
|
|
23
|
+
}
|
|
24
|
+
if (!isToolDefinitionRecordValue(value)) {
|
|
25
|
+
throw new Error(`${path}.${key} must be an object`);
|
|
26
|
+
}
|
|
27
|
+
if (hasUnknownResultProjectionFields(value)) {
|
|
28
|
+
throw new Error(`${path}.${key} contains an unknown field`);
|
|
29
|
+
}
|
|
30
|
+
if (!hasSupportedResultMetadataPath(value.path)) {
|
|
31
|
+
throw new Error(`${path}.${key}.path must select output or data`);
|
|
32
|
+
}
|
|
33
|
+
if (!isResultProjectionKind(value.kind)) {
|
|
34
|
+
throw new Error(`${path}.${key}.kind is not supported`);
|
|
35
|
+
}
|
|
36
|
+
return [key, { path: value.path, kind: value.kind }];
|
|
37
|
+
}));
|
|
38
|
+
for (const [key, projection] of Object.entries(result)) {
|
|
39
|
+
if (projection.kind !== "preview")
|
|
40
|
+
continue;
|
|
41
|
+
if (Object.hasOwn(result, `${key}Truncated`)) {
|
|
42
|
+
throw new Error(`${path}.${key} conflicts with its truncation metadata`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function hasSupportedResultMetadataKey(key) {
|
|
48
|
+
if (!/^[a-zA-Z][a-zA-Z0-9]{0,63}$/u.test(key))
|
|
49
|
+
return false;
|
|
50
|
+
return !FORBIDDEN_PATH_SEGMENTS.has(key);
|
|
51
|
+
}
|
|
52
|
+
function hasSupportedResultMetadataPath(value) {
|
|
53
|
+
if (typeof value !== "string")
|
|
54
|
+
return false;
|
|
55
|
+
if (value === "output")
|
|
56
|
+
return true;
|
|
57
|
+
const segments = value.split(".");
|
|
58
|
+
if (segments[0] !== "data")
|
|
59
|
+
return false;
|
|
60
|
+
if (segments.length < 2 || segments.length > RESULT_PATH_SEGMENT_LIMIT)
|
|
61
|
+
return false;
|
|
62
|
+
return segments.every(isSupportedResultPathSegment);
|
|
63
|
+
}
|
|
64
|
+
function hasUnknownResultProjectionFields(value) {
|
|
65
|
+
return Object.keys(value).some((field) => field !== "path" && field !== "kind");
|
|
66
|
+
}
|
|
67
|
+
function isSupportedResultPathSegment(segment) {
|
|
68
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_]*$/u.test(segment))
|
|
69
|
+
return false;
|
|
70
|
+
return !FORBIDDEN_PATH_SEGMENTS.has(segment);
|
|
71
|
+
}
|
|
72
|
+
function isResultProjectionKind(value) {
|
|
73
|
+
return RESULT_PROJECTION_KINDS.includes(value);
|
|
74
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { projectToolResultEventMetadata } from "./tool-result-event-projection.js";
|
|
1
2
|
function safeTrim(value) {
|
|
2
3
|
return typeof value === "string" ? value.trim() : "";
|
|
3
4
|
}
|
|
@@ -177,5 +178,7 @@ export function buildToolCompletedEventMetadata(call, result, definition) {
|
|
|
177
178
|
...(buildCallMeta(call, definition) || {}),
|
|
178
179
|
...toolResultData,
|
|
179
180
|
...(buildResultMeta(result, actions) || {}),
|
|
181
|
+
// Explicit result mappings override generic display fallbacks when present.
|
|
182
|
+
...projectToolResultEventMetadata(result, definition?.eventPresentation?.resultMetadata),
|
|
180
183
|
});
|
|
181
184
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ToolEventMetadata, ToolEventPresentation, ToolExecutionResult } from "./tool-types.js";
|
|
2
|
+
/** Derive display metadata without changing canonical tool evidence. */
|
|
3
|
+
export declare function projectToolResultEventMetadata(result: ToolExecutionResult, projections: ToolEventPresentation["resultMetadata"]): ToolEventMetadata | undefined;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const PREVIEW_CHARACTER_LIMIT = 1_200;
|
|
2
|
+
const PREVIEW_LINE_LIMIT = 20;
|
|
3
|
+
const EVENT_PREVIEW_CHARACTER_LIMIT = 2_400;
|
|
4
|
+
/** Derive display metadata without changing canonical tool evidence. */
|
|
5
|
+
export function projectToolResultEventMetadata(result, projections) {
|
|
6
|
+
if (!projections)
|
|
7
|
+
return undefined;
|
|
8
|
+
const metadata = {};
|
|
9
|
+
let remainingCharacters = EVENT_PREVIEW_CHARACTER_LIMIT;
|
|
10
|
+
for (const [key, projection] of Object.entries(projections)) {
|
|
11
|
+
const value = readProjectedResultValue(result, projection);
|
|
12
|
+
if (value === undefined)
|
|
13
|
+
continue;
|
|
14
|
+
if (typeof value !== "string") {
|
|
15
|
+
metadata[key] = value;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const preview = boundResultPreview(value, remainingCharacters);
|
|
19
|
+
metadata[key] = preview.text;
|
|
20
|
+
metadata[`${key}Truncated`] = preview.truncated;
|
|
21
|
+
remainingCharacters -= preview.text.length;
|
|
22
|
+
}
|
|
23
|
+
return Object.keys(metadata).length > 0 ? metadata : undefined;
|
|
24
|
+
}
|
|
25
|
+
function readProjectedResultValue(result, projection) {
|
|
26
|
+
const value = readOwnResultPath(result, projection.path);
|
|
27
|
+
if (projection.kind === "number") {
|
|
28
|
+
return isFiniteResultNumber(value) ? value : undefined;
|
|
29
|
+
}
|
|
30
|
+
if (projection.kind === "boolean") {
|
|
31
|
+
return typeof value === "boolean" ? value : undefined;
|
|
32
|
+
}
|
|
33
|
+
return typeof value === "string" ? value : undefined;
|
|
34
|
+
}
|
|
35
|
+
function readOwnResultPath(result, path) {
|
|
36
|
+
let value = result;
|
|
37
|
+
for (const segment of path.split(".")) {
|
|
38
|
+
if (!isOwnResultContainer(value, segment))
|
|
39
|
+
return undefined;
|
|
40
|
+
value = value[segment];
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function isOwnResultContainer(value, key) {
|
|
45
|
+
if (value === null || typeof value !== "object")
|
|
46
|
+
return false;
|
|
47
|
+
if (Array.isArray(value))
|
|
48
|
+
return false;
|
|
49
|
+
return Object.hasOwn(value, key);
|
|
50
|
+
}
|
|
51
|
+
function isFiniteResultNumber(value) {
|
|
52
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
53
|
+
}
|
|
54
|
+
function boundResultPreview(value, remainingCharacters) {
|
|
55
|
+
const characterLimit = Math.min(PREVIEW_CHARACTER_LIMIT, remainingCharacters);
|
|
56
|
+
let end = Math.min(value.length, characterLimit);
|
|
57
|
+
let lineCount = 1;
|
|
58
|
+
for (let index = 0; index < end; index += 1) {
|
|
59
|
+
if (!startsPreviewLine(value, index))
|
|
60
|
+
continue;
|
|
61
|
+
lineCount += 1;
|
|
62
|
+
if (lineCount <= PREVIEW_LINE_LIMIT)
|
|
63
|
+
continue;
|
|
64
|
+
end = index;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
if (splitsSurrogatePair(value, end))
|
|
68
|
+
end -= 1;
|
|
69
|
+
return { text: value.slice(0, end), truncated: end < value.length };
|
|
70
|
+
}
|
|
71
|
+
function startsPreviewLine(value, index) {
|
|
72
|
+
if (value[index] === "\r")
|
|
73
|
+
return true;
|
|
74
|
+
return value[index] === "\n" && value[index - 1] !== "\r";
|
|
75
|
+
}
|
|
76
|
+
function splitsSurrogatePair(value, end) {
|
|
77
|
+
if (end <= 0 || end >= value.length)
|
|
78
|
+
return false;
|
|
79
|
+
const before = value.charCodeAt(end - 1);
|
|
80
|
+
const after = value.charCodeAt(end);
|
|
81
|
+
return (before >= 0xd800 && before <= 0xdbff && after >= 0xdc00 && after <= 0xdfff);
|
|
82
|
+
}
|
|
@@ -18,8 +18,13 @@ export type ToolEventLifecycleCopy = Readonly<{
|
|
|
18
18
|
status: string;
|
|
19
19
|
message: string;
|
|
20
20
|
}>;
|
|
21
|
+
export type ToolEventResultMetadataProjection = Readonly<{
|
|
22
|
+
path: string;
|
|
23
|
+
kind: "preview" | "number" | "boolean";
|
|
24
|
+
}>;
|
|
21
25
|
export type ToolEventPresentation = Readonly<{
|
|
22
26
|
metadata: Readonly<Record<string, ToolEventMetadataProjection>>;
|
|
27
|
+
resultMetadata?: Readonly<Record<string, ToolEventResultMetadataProjection>>;
|
|
23
28
|
lifecycle?: Readonly<{
|
|
24
29
|
started?: ToolEventLifecycleCopy;
|
|
25
30
|
completed?: ToolEventLifecycleCopy;
|
package/dist/src/cli/abot.js
CHANGED
|
@@ -4,6 +4,7 @@ import { runInitRuntime } from "../../scripts/init-runtime.js";
|
|
|
4
4
|
import { runConfigureLongTermMemory } from "../../scripts/configure-long-term-memory.js";
|
|
5
5
|
import { createModelGatewayServer, resolveProviderAdapters, resolveModelGatewayPort, } from "../model-gateway/server.js";
|
|
6
6
|
import { loadDotEnvFile } from "../shared/load-dotenv.js";
|
|
7
|
+
import { closeHttpServerImmediately } from "../shared/http-server-shutdown.js";
|
|
7
8
|
import { startWebUiServer } from "../web-ui/server.js";
|
|
8
9
|
import { resolveWebUiAddress } from "../web-ui/web-ui-address.js";
|
|
9
10
|
function printHelp() {
|
|
@@ -23,16 +24,6 @@ function printHelp() {
|
|
|
23
24
|
" start Start the local model gateway and Web UI.",
|
|
24
25
|
].join("\n"));
|
|
25
26
|
}
|
|
26
|
-
function closeServer(server) {
|
|
27
|
-
return new Promise((resolveClose, reject) => {
|
|
28
|
-
server.close((error) => {
|
|
29
|
-
if (error)
|
|
30
|
-
reject(error);
|
|
31
|
-
else
|
|
32
|
-
resolveClose();
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
27
|
async function runStart(args) {
|
|
37
28
|
if (args.includes("--help") || args.includes("-h")) {
|
|
38
29
|
console.log("Usage: abot start");
|
|
@@ -75,7 +66,7 @@ async function runStart(args) {
|
|
|
75
66
|
closing = true;
|
|
76
67
|
void Promise.all([
|
|
77
68
|
webUi.close(),
|
|
78
|
-
...(gateway ? [
|
|
69
|
+
...(gateway ? [closeHttpServerImmediately(gateway)] : []),
|
|
79
70
|
]).then(() => resolveExit(), rejectExit);
|
|
80
71
|
};
|
|
81
72
|
process.once("SIGINT", shutdown);
|
|
@@ -175,6 +175,7 @@ class InMemorySessionStore {
|
|
|
175
175
|
taskType: options.taskType,
|
|
176
176
|
requestId: options.requestId,
|
|
177
177
|
cronJobId: options.cronJobId,
|
|
178
|
+
...(options.schedule ? { schedule: options.schedule } : {}),
|
|
178
179
|
cronTitle: options.cronTitle,
|
|
179
180
|
triggerType: options.triggerType,
|
|
180
181
|
attachments: options.attachments,
|
|
@@ -3,6 +3,7 @@ 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
5
|
import { readLockSnapshot } from "./snapshot.js";
|
|
6
|
+
import { removeObservedOwnerSynchronously } from "./synchronous-release.js";
|
|
6
7
|
export async function acquireFileLock(lockPath, options) {
|
|
7
8
|
const waitMs = options.waitMs ?? LOCK_ACQUIRE_TIMEOUT_MS;
|
|
8
9
|
const retryDelayMs = options.retryDelayMs ?? LOCK_RETRY_DELAY_MS;
|
|
@@ -12,7 +13,7 @@ export async function acquireFileLock(lockPath, options) {
|
|
|
12
13
|
const token = randomUUID();
|
|
13
14
|
try {
|
|
14
15
|
await installLockDirectory(lockPath, token);
|
|
15
|
-
return createRelease(lockPath, token);
|
|
16
|
+
return createRelease(lockPath, token, options.releaseMode);
|
|
16
17
|
}
|
|
17
18
|
catch (error) {
|
|
18
19
|
if (!isLockContention(error))
|
|
@@ -27,15 +28,23 @@ export async function acquireFileLock(lockPath, options) {
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
|
-
function createRelease(lockPath, token) {
|
|
31
|
+
function createRelease(lockPath, token, releaseMode) {
|
|
31
32
|
let released = false;
|
|
32
33
|
return async () => {
|
|
33
34
|
if (released)
|
|
34
35
|
return;
|
|
36
|
+
if (requiresSynchronousRelease(releaseMode)) {
|
|
37
|
+
removeObservedOwnerSynchronously(lockPath, ownerFileName(token));
|
|
38
|
+
released = true;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
35
41
|
await removeObservedOwner(lockPath, ownerFileName(token));
|
|
36
42
|
released = true;
|
|
37
43
|
};
|
|
38
44
|
}
|
|
45
|
+
function requiresSynchronousRelease(mode) {
|
|
46
|
+
return mode === "synchronous";
|
|
47
|
+
}
|
|
39
48
|
async function removeAbandonedLock(lockPath, processIsAlive) {
|
|
40
49
|
const snapshot = await readLockSnapshot(lockPath);
|
|
41
50
|
if (!snapshot)
|
|
@@ -8,6 +8,8 @@ export type FileLockOptions = Readonly<{
|
|
|
8
8
|
waitMs?: number;
|
|
9
9
|
retryDelayMs?: number;
|
|
10
10
|
processIsAlive?: (pid: number) => boolean;
|
|
11
|
+
/** Long-lived host leases must finish physical cleanup before process.exit. */
|
|
12
|
+
releaseMode?: "asynchronous" | "synchronous";
|
|
11
13
|
}>;
|
|
12
14
|
export type LockRecord = Readonly<{
|
|
13
15
|
pid: number;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { rmdirSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { fileSystemErrorCode, LEASE_DIRECTORY_NAME } from "./contracts.js";
|
|
4
|
+
/** Keep token removal and directory cleanup indivisible by JavaScript exit. */
|
|
5
|
+
export function removeObservedOwnerSynchronously(lockPath, observedOwnerFileName) {
|
|
6
|
+
try {
|
|
7
|
+
unlinkSync(join(lockPath, LEASE_DIRECTORY_NAME, observedOwnerFileName));
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
if (fileSystemErrorCode(error) === "ENOENT")
|
|
11
|
+
return false;
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
if (!removeReleasedDirectory(join(lockPath, LEASE_DIRECTORY_NAME)))
|
|
15
|
+
return false;
|
|
16
|
+
return removeReleasedDirectory(lockPath);
|
|
17
|
+
}
|
|
18
|
+
function removeReleasedDirectory(path) {
|
|
19
|
+
try {
|
|
20
|
+
rmdirSync(path);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (fileSystemErrorCode(error) === "ENOENT")
|
|
25
|
+
return true;
|
|
26
|
+
if (hasReplacementDirectoryContent(error))
|
|
27
|
+
return false;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function hasReplacementDirectoryContent(error) {
|
|
32
|
+
switch (fileSystemErrorCode(error)) {
|
|
33
|
+
case "EEXIST":
|
|
34
|
+
case "ENOTEMPTY":
|
|
35
|
+
case "ENOTDIR":
|
|
36
|
+
return true;
|
|
37
|
+
default:
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ToolCall } from "../../../../capabilities/tool-types.js";
|
|
2
|
+
import { type ToolEventExecutorIdentity } from "../shared/event-metadata.js";
|
|
2
3
|
import type { ToolApprovalController, ToolPermissionMode } from "../../../ports.js";
|
|
3
4
|
import type { RegisteredToolNormalInvocationRejection } from "../shared/contracts.js";
|
|
4
5
|
export declare function requestNormalInvocationApproval(params: {
|
|
6
|
+
executionId?: string;
|
|
7
|
+
executorIdentity?: ToolEventExecutorIdentity;
|
|
5
8
|
requestId: string;
|
|
6
9
|
abortSignal: AbortSignal;
|
|
7
10
|
toolPermissionMode: ToolPermissionMode;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { buildToolExecutorEventMetadata, } from "../shared/event-metadata.js";
|
|
1
2
|
import { rejectNormalInvocation } from "../shared/rejection.js";
|
|
2
3
|
export async function requestNormalInvocationApproval(params) {
|
|
3
4
|
if (!params.force && params.toolPermissionMode !== "ask") {
|
|
@@ -5,6 +6,8 @@ export async function requestNormalInvocationApproval(params) {
|
|
|
5
6
|
}
|
|
6
7
|
const approvalId = params.nextApprovalId();
|
|
7
8
|
params.onEvent?.("tool.approval.required", {
|
|
9
|
+
...buildToolExecutorEventMetadata(params.executorIdentity),
|
|
10
|
+
...(params.executionId ? { executionId: params.executionId } : {}),
|
|
8
11
|
approvalId,
|
|
9
12
|
tool: params.call.tool,
|
|
10
13
|
...(params.eventMeta ? { meta: params.eventMeta } : {}),
|
|
@@ -12,6 +15,8 @@ export async function requestNormalInvocationApproval(params) {
|
|
|
12
15
|
if (!params.toolApprovalController) {
|
|
13
16
|
const message = "Tool approval is required, but no approval controller is configured.";
|
|
14
17
|
params.onEvent?.("tool.approval.rejected", {
|
|
18
|
+
...buildToolExecutorEventMetadata(params.executorIdentity),
|
|
19
|
+
...(params.executionId ? { executionId: params.executionId } : {}),
|
|
15
20
|
approvalId,
|
|
16
21
|
tool: params.call.tool,
|
|
17
22
|
reason: message,
|
|
@@ -29,6 +34,8 @@ export async function requestNormalInvocationApproval(params) {
|
|
|
29
34
|
}, { abortSignal: params.abortSignal });
|
|
30
35
|
if (decision.approved) {
|
|
31
36
|
params.onEvent?.("tool.approval.granted", {
|
|
37
|
+
...buildToolExecutorEventMetadata(params.executorIdentity),
|
|
38
|
+
...(params.executionId ? { executionId: params.executionId } : {}),
|
|
32
39
|
approvalId,
|
|
33
40
|
tool: params.call.tool,
|
|
34
41
|
});
|
|
@@ -36,6 +43,8 @@ export async function requestNormalInvocationApproval(params) {
|
|
|
36
43
|
}
|
|
37
44
|
const message = decision.reason?.trim() || "Tool execution was rejected.";
|
|
38
45
|
params.onEvent?.("tool.approval.rejected", {
|
|
46
|
+
...buildToolExecutorEventMetadata(params.executorIdentity),
|
|
47
|
+
...(params.executionId ? { executionId: params.executionId } : {}),
|
|
39
48
|
approvalId,
|
|
40
49
|
tool: params.call.tool,
|
|
41
50
|
reason: message,
|
package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BoundOperation, RegisteredToolNormalInvocationExecutor, RegisteredToolNormalInvocationExecutorParams, RegisteredToolPreparedNormalInvocation } from "../shared/contracts.js";
|
|
2
|
+
/** Projects source controls only; rejected calls are never prepared again. */
|
|
3
|
+
export declare function prepareNormalInvocationRejectionEvent(params: {
|
|
4
|
+
operationByHandle: WeakMap<object, BoundOperation>;
|
|
5
|
+
input: Parameters<RegisteredToolNormalInvocationExecutor["prepareRejectionEvent"]>[0];
|
|
6
|
+
onEvent: RegisteredToolNormalInvocationExecutorParams["onEvent"];
|
|
7
|
+
}): ReturnType<RegisteredToolNormalInvocationExecutor["prepareRejectionEvent"]>;
|
|
8
|
+
/** Reports an admitted invocation rejected before the external tool ran. */
|
|
9
|
+
export declare function createPreparedInvocationRejectionEmitter(params: {
|
|
10
|
+
tool: string;
|
|
11
|
+
eventMeta: Record<string, unknown> | undefined;
|
|
12
|
+
onEvent: RegisteredToolNormalInvocationExecutorParams["onEvent"];
|
|
13
|
+
}): RegisteredToolPreparedNormalInvocation["emitRejection"];
|