@abot-ai/runtime 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -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/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/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/filesystem/plugin.json +17 -2
- package/plugins/json-inspector/plugin.json +12 -0
- package/plugins/local-search/plugin.json +12 -0
- 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,184 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { SchedulerJournalIndex, isActiveSchedulerRun, } from "./journal-index.js";
|
|
4
|
+
import { cleanObsoleteJournalGenerations, createJournalGeneration, initialJournalTransaction, isMissingJournalFile, journalTransactionName, loadJournalIndex, SCHEDULER_MANIFEST, writeJournalJson, } from "./journal-files.js";
|
|
5
|
+
import { hasSchedulerTransactionChanges, schedulerTransaction, } from "./journal-transaction.js";
|
|
6
|
+
import { querySchedulerRuns } from "./run-list-query.js";
|
|
7
|
+
import { parseSchedulerSnapshot } from "./snapshot-validation.js";
|
|
8
|
+
import { MAX_JOURNAL_SUFFIX, readJournalHead, } from "./journal-head.js";
|
|
9
|
+
import { cleanObsoleteJournalCheckpoints, loadCheckpointJournalIndex, writeJournalCheckpoint, } from "./journal-checkpoint.js";
|
|
10
|
+
import { JournalPublicationSyncError, syncJournalDirectory, syncJournalDirectoryPath, } from "./journal-durability.js";
|
|
11
|
+
export class SchedulerJournalStore {
|
|
12
|
+
directory;
|
|
13
|
+
index = new SchedulerJournalIndex();
|
|
14
|
+
sequence = 0;
|
|
15
|
+
generation;
|
|
16
|
+
head;
|
|
17
|
+
legacy;
|
|
18
|
+
publicationFailure;
|
|
19
|
+
ownedDirectoriesSynced = false;
|
|
20
|
+
constructor(directory) {
|
|
21
|
+
this.directory = directory;
|
|
22
|
+
}
|
|
23
|
+
async load() {
|
|
24
|
+
const head = await readJournalHead(this.directory);
|
|
25
|
+
this.generation = head?.generation;
|
|
26
|
+
if (head?.schemaVersion === 3) {
|
|
27
|
+
const loaded = await loadCheckpointJournalIndex(this.directory, head);
|
|
28
|
+
this.index = loaded.index;
|
|
29
|
+
this.sequence = loaded.sequence;
|
|
30
|
+
this.head = head;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
if (this.generation) {
|
|
34
|
+
const loaded = await loadJournalIndex(this.directory, this.generation);
|
|
35
|
+
this.index = loaded.index;
|
|
36
|
+
this.sequence = loaded.sequence;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
this.legacy = parseSchedulerSnapshot(JSON.parse(await readFile(join(this.directory, "scheduler.json"), "utf8")));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (!isMissingJournalFile(error))
|
|
44
|
+
throw error;
|
|
45
|
+
this.legacy = { schemaVersion: 1, jobs: [], runs: [] };
|
|
46
|
+
}
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
async prepareOwned() {
|
|
50
|
+
this.requireDurablePublication();
|
|
51
|
+
await this.ensureOwnedDirectoriesSynced();
|
|
52
|
+
await cleanObsoleteJournalGenerations(this.directory, this.generation);
|
|
53
|
+
if (this.legacy)
|
|
54
|
+
await this.replaceGeneration(this.legacy);
|
|
55
|
+
if (requiresJournalCheckpoint(this.head, this.sequence)) {
|
|
56
|
+
const head = await writeJournalCheckpoint(this.directory, this.generation, this.sequence, this.index);
|
|
57
|
+
await this.publishHead(head);
|
|
58
|
+
this.head = head;
|
|
59
|
+
}
|
|
60
|
+
await cleanObsoleteJournalCheckpoints(this.directory, this.head);
|
|
61
|
+
}
|
|
62
|
+
async snapshot(view) {
|
|
63
|
+
this.requireDurablePublication();
|
|
64
|
+
if (!this.legacy)
|
|
65
|
+
return this.index.snapshot(view);
|
|
66
|
+
const runs = view === "active"
|
|
67
|
+
? this.legacy.runs.filter(isActiveSchedulerRun)
|
|
68
|
+
: this.legacy.runs;
|
|
69
|
+
return structuredClone({ ...this.legacy, runs });
|
|
70
|
+
}
|
|
71
|
+
async readRuns(jobId, query) {
|
|
72
|
+
this.requireDurablePublication();
|
|
73
|
+
if (!this.legacy)
|
|
74
|
+
return this.index.readRuns(jobId, query);
|
|
75
|
+
return structuredClone(querySchedulerRuns(this.legacy.runs, jobId, query));
|
|
76
|
+
}
|
|
77
|
+
async update(mutate, view) {
|
|
78
|
+
// Retry storage cleanup before, never after committing an ordinary mutation.
|
|
79
|
+
await this.prepareOwned();
|
|
80
|
+
const before = await this.snapshot(view);
|
|
81
|
+
const candidate = structuredClone(before);
|
|
82
|
+
const result = structuredClone(mutate(candidate));
|
|
83
|
+
const after = parseSchedulerSnapshot(structuredClone(candidate));
|
|
84
|
+
const delta = schedulerTransaction(before, after, view);
|
|
85
|
+
if (!hasSchedulerTransactionChanges(delta))
|
|
86
|
+
return result;
|
|
87
|
+
this.index.validate(delta);
|
|
88
|
+
if (hasJournalRemovals(delta)) {
|
|
89
|
+
const complete = view === "active"
|
|
90
|
+
? applyWorkingChanges(await this.snapshot(), delta)
|
|
91
|
+
: after;
|
|
92
|
+
await this.replaceGeneration(complete);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
const file = join(this.directory, this.generation, journalTransactionName(this.sequence + 1));
|
|
96
|
+
await writeJournalJson(file, delta);
|
|
97
|
+
const head = { ...this.head, sequence: this.sequence + 1 };
|
|
98
|
+
await this.publishHead(head);
|
|
99
|
+
this.index.apply(delta, file);
|
|
100
|
+
this.sequence += 1;
|
|
101
|
+
this.head = head;
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
async replaceGeneration(snapshot) {
|
|
105
|
+
const generation = await createJournalGeneration(this.directory);
|
|
106
|
+
const index = new SchedulerJournalIndex();
|
|
107
|
+
let sequence = 0;
|
|
108
|
+
const append = async (delta) => {
|
|
109
|
+
const file = join(this.directory, generation, journalTransactionName(++sequence));
|
|
110
|
+
index.validate(delta);
|
|
111
|
+
await writeJournalJson(file, delta);
|
|
112
|
+
index.apply(delta, file);
|
|
113
|
+
};
|
|
114
|
+
await append({ ...initialJournalTransaction(), jobs: snapshot.jobs });
|
|
115
|
+
// Bound boot/import transaction payloads; ordinary commits contain only changes.
|
|
116
|
+
for (let offset = 0; offset < snapshot.runs.length; offset += 32) {
|
|
117
|
+
await append({
|
|
118
|
+
...initialJournalTransaction(),
|
|
119
|
+
runs: snapshot.runs.slice(offset, offset + 32),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const head = await writeJournalCheckpoint(this.directory, generation, sequence, index);
|
|
123
|
+
await this.publishHead(head);
|
|
124
|
+
this.index = index;
|
|
125
|
+
this.sequence = sequence;
|
|
126
|
+
this.generation = generation;
|
|
127
|
+
this.head = head;
|
|
128
|
+
this.legacy = undefined;
|
|
129
|
+
// Failed physical removal remains discoverable on the next explicit operation.
|
|
130
|
+
await cleanObsoleteJournalGenerations(this.directory, generation);
|
|
131
|
+
}
|
|
132
|
+
async ensureOwnedDirectoriesSynced() {
|
|
133
|
+
if (this.ownedDirectoriesSynced)
|
|
134
|
+
return;
|
|
135
|
+
// Older writers synced files only; establish their selected entries before cleanup.
|
|
136
|
+
if (this.head)
|
|
137
|
+
await syncJournalDirectory(join(this.directory, this.head.generation, "checkpoints"));
|
|
138
|
+
if (this.generation)
|
|
139
|
+
await syncJournalDirectory(join(this.directory, this.generation));
|
|
140
|
+
await syncJournalDirectoryPath(this.directory);
|
|
141
|
+
this.ownedDirectoriesSynced = true;
|
|
142
|
+
}
|
|
143
|
+
async publishHead(head) {
|
|
144
|
+
try {
|
|
145
|
+
await writeJournalJson(join(this.directory, SCHEDULER_MANIFEST), head);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (error instanceof JournalPublicationSyncError)
|
|
149
|
+
this.publicationFailure = error;
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
requireDurablePublication() {
|
|
154
|
+
// A visible head may differ from this cache; only a new owned load may accept it.
|
|
155
|
+
if (this.publicationFailure)
|
|
156
|
+
throw this.publicationFailure;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function requiresJournalCheckpoint(head, sequence) {
|
|
160
|
+
if (!head)
|
|
161
|
+
return true;
|
|
162
|
+
return sequence - head.checkpoint.sequence >= MAX_JOURNAL_SUFFIX;
|
|
163
|
+
}
|
|
164
|
+
function hasJournalRemovals(delta) {
|
|
165
|
+
return delta.deletedJobs.length > 0 || delta.deletedRuns.length > 0;
|
|
166
|
+
}
|
|
167
|
+
function applyWorkingChanges(snapshot, delta) {
|
|
168
|
+
const jobs = new Map(snapshot.jobs.map((job) => [job.id, job]));
|
|
169
|
+
const runs = new Map(snapshot.runs.map((run) => [run.id, run]));
|
|
170
|
+
for (const id of delta.deletedJobs)
|
|
171
|
+
jobs.delete(id);
|
|
172
|
+
for (const job of delta.jobs)
|
|
173
|
+
jobs.set(job.id, job);
|
|
174
|
+
for (const id of delta.deletedRuns)
|
|
175
|
+
runs.delete(id);
|
|
176
|
+
for (const run of delta.runs)
|
|
177
|
+
runs.set(run.id, run);
|
|
178
|
+
const jobOrder = delta.jobOrder ?? [...jobs.keys()];
|
|
179
|
+
return {
|
|
180
|
+
schemaVersion: 1,
|
|
181
|
+
jobs: jobOrder.map((id) => jobs.get(id)),
|
|
182
|
+
runs: [...runs.values()].filter((run) => jobs.has(run.jobId)),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SchedulerJob, SchedulerRun, SchedulerSnapshot } from "./contracts.js";
|
|
2
|
+
export interface SchedulerTransaction {
|
|
3
|
+
version: 1;
|
|
4
|
+
jobs: SchedulerJob[];
|
|
5
|
+
runs: SchedulerRun[];
|
|
6
|
+
deletedJobs: string[];
|
|
7
|
+
deletedRuns: string[];
|
|
8
|
+
jobOrder?: string[];
|
|
9
|
+
runOrder?: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function parseSchedulerTransaction(value: unknown): SchedulerTransaction;
|
|
12
|
+
export declare function assertJournalTransactionIds(transaction: SchedulerTransaction): void;
|
|
13
|
+
export declare function schedulerTransaction(before: SchedulerSnapshot, after: SchedulerSnapshot, view?: "active"): SchedulerTransaction;
|
|
14
|
+
export declare function hasSchedulerTransactionChanges(value: SchedulerTransaction): boolean;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { parseStoredJob, parseStoredRun } from "./snapshot-validation.js";
|
|
2
|
+
export function parseSchedulerTransaction(value) {
|
|
3
|
+
if (!isSchedulerTransactionRecord(value))
|
|
4
|
+
throw new Error("scheduler_store_corrupt");
|
|
5
|
+
const raw = value;
|
|
6
|
+
if (!hasSchedulerTransactionCollections(raw))
|
|
7
|
+
throw new Error("scheduler_store_corrupt");
|
|
8
|
+
const transaction = {
|
|
9
|
+
version: 1,
|
|
10
|
+
jobs: raw.jobs.map(parseStoredJob),
|
|
11
|
+
runs: raw.runs.map(parseStoredRun),
|
|
12
|
+
deletedJobs: requireJournalIds(raw.deletedJobs),
|
|
13
|
+
deletedRuns: requireJournalIds(raw.deletedRuns),
|
|
14
|
+
...(raw.jobOrder === undefined
|
|
15
|
+
? {}
|
|
16
|
+
: { jobOrder: requireJournalIds(raw.jobOrder) }),
|
|
17
|
+
...(raw.runOrder === undefined
|
|
18
|
+
? {}
|
|
19
|
+
: { runOrder: requireJournalIds(raw.runOrder) }),
|
|
20
|
+
};
|
|
21
|
+
assertJournalTransactionIds(transaction);
|
|
22
|
+
return transaction;
|
|
23
|
+
}
|
|
24
|
+
function isSchedulerTransactionRecord(value) {
|
|
25
|
+
if (!value || typeof value !== "object")
|
|
26
|
+
return false;
|
|
27
|
+
return !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
function hasSchedulerTransactionCollections(value) {
|
|
30
|
+
if (value.version !== 1)
|
|
31
|
+
return false;
|
|
32
|
+
if (!Array.isArray(value.jobs))
|
|
33
|
+
return false;
|
|
34
|
+
return Array.isArray(value.runs);
|
|
35
|
+
}
|
|
36
|
+
export function assertJournalTransactionIds(transaction) {
|
|
37
|
+
assertDisjointJournalRecords(transaction.jobs, transaction.deletedJobs);
|
|
38
|
+
assertDisjointJournalRecords(transaction.runs, transaction.deletedRuns);
|
|
39
|
+
if (transaction.jobOrder)
|
|
40
|
+
requireJournalIds(transaction.jobOrder);
|
|
41
|
+
if (transaction.runOrder)
|
|
42
|
+
requireJournalIds(transaction.runOrder);
|
|
43
|
+
}
|
|
44
|
+
function assertDisjointJournalRecords(records, deleted) {
|
|
45
|
+
const ids = new Set(requireJournalIds(records.map((record) => record.id)));
|
|
46
|
+
if (hasOverlappingJournalIds(ids, requireJournalIds(deleted)))
|
|
47
|
+
throw new Error("scheduler_store_corrupt");
|
|
48
|
+
}
|
|
49
|
+
function hasOverlappingJournalIds(upserted, deleted) {
|
|
50
|
+
return deleted.some((id) => upserted.has(id));
|
|
51
|
+
}
|
|
52
|
+
function requireJournalIds(value) {
|
|
53
|
+
if (!Array.isArray(value))
|
|
54
|
+
throw new Error("scheduler_store_corrupt");
|
|
55
|
+
if (!hasOnlyJournalIdStrings(value))
|
|
56
|
+
throw new Error("scheduler_store_corrupt");
|
|
57
|
+
if (hasDuplicateJournalIds(value))
|
|
58
|
+
throw new Error("scheduler_store_corrupt");
|
|
59
|
+
return [...value];
|
|
60
|
+
}
|
|
61
|
+
function hasOnlyJournalIdStrings(value) {
|
|
62
|
+
return value.every((id) => typeof id === "string");
|
|
63
|
+
}
|
|
64
|
+
function hasDuplicateJournalIds(value) {
|
|
65
|
+
return new Set(value).size !== value.length;
|
|
66
|
+
}
|
|
67
|
+
function changedRecords(before, after) {
|
|
68
|
+
const originals = new Map(before.map((item) => [item.id, item]));
|
|
69
|
+
return after.filter((item) => JSON.stringify(originals.get(item.id)) !== JSON.stringify(item));
|
|
70
|
+
}
|
|
71
|
+
function removedRecords(before, after) {
|
|
72
|
+
const retained = new Set(after.map((item) => item.id));
|
|
73
|
+
return before.filter((item) => !retained.has(item.id)).map((item) => item.id);
|
|
74
|
+
}
|
|
75
|
+
export function schedulerTransaction(before, after, view) {
|
|
76
|
+
const jobOrder = after.jobs.map((item) => item.id);
|
|
77
|
+
const runOrder = after.runs.map((item) => item.id);
|
|
78
|
+
return {
|
|
79
|
+
version: 1,
|
|
80
|
+
jobs: changedRecords(before.jobs, after.jobs),
|
|
81
|
+
runs: changedRecords(before.runs, after.runs),
|
|
82
|
+
deletedJobs: removedRecords(before.jobs, after.jobs),
|
|
83
|
+
deletedRuns: removedRecords(before.runs, after.runs),
|
|
84
|
+
...(hasJournalOrderChanged(before.jobs, jobOrder) ? { jobOrder } : {}),
|
|
85
|
+
...(shouldPersistRunOrder(view, before.runs, runOrder) ? { runOrder } : {}),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function hasJournalOrderChanged(before, order) {
|
|
89
|
+
if (before.length !== order.length)
|
|
90
|
+
return true;
|
|
91
|
+
return before.some((record, index) => record.id !== order[index]);
|
|
92
|
+
}
|
|
93
|
+
function shouldPersistRunOrder(view, before, order) {
|
|
94
|
+
if (view === "active")
|
|
95
|
+
return false;
|
|
96
|
+
return hasJournalOrderChanged(before, order);
|
|
97
|
+
}
|
|
98
|
+
export function hasSchedulerTransactionChanges(value) {
|
|
99
|
+
if (value.jobs.length || value.runs.length)
|
|
100
|
+
return true;
|
|
101
|
+
if (value.deletedJobs.length || value.deletedRuns.length)
|
|
102
|
+
return true;
|
|
103
|
+
return value.jobOrder !== undefined || value.runOrder !== undefined;
|
|
104
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SchedulerSchedule } from "./contracts.js";
|
|
2
|
+
/** Strictly after the supplied instant. Never shifts missing calendar dates or times. */
|
|
3
|
+
export declare function nextSchedulerOccurrence(schedule: SchedulerSchedule, timeZone: string, after: number): string | null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { isSupportedSchedulerInstant, schedulerInstantFromMilliseconds, } from "./instant-validation.js";
|
|
2
|
+
import { nextIntervalOccurrence } from "./interval-range.js";
|
|
3
|
+
import { addCalendarDays, calendarDateAt, calendarWeekday, resolveCalendarTime, } from "./calendar-time.js";
|
|
4
|
+
/** Strictly after the supplied instant. Never shifts missing calendar dates or times. */
|
|
5
|
+
export function nextSchedulerOccurrence(schedule, timeZone, after) {
|
|
6
|
+
switch (schedule.kind) {
|
|
7
|
+
case "timer":
|
|
8
|
+
case "once":
|
|
9
|
+
return Date.parse(schedule.at) > after ? schedule.at : null;
|
|
10
|
+
case "interval":
|
|
11
|
+
return nextIntervalOccurrence(schedule, after);
|
|
12
|
+
default:
|
|
13
|
+
return nextCalendarOccurrence(schedule, timeZone, after);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function nextCalendarOccurrence(schedule, timeZone, after) {
|
|
17
|
+
const start = calendarDateAt(after, timeZone);
|
|
18
|
+
for (let offset = 0; offset < 370; offset += 1) {
|
|
19
|
+
const date = addCalendarDays(start, offset);
|
|
20
|
+
if (!matchesCalendarDay(schedule, date))
|
|
21
|
+
continue;
|
|
22
|
+
const instant = resolveCalendarTime(date, schedule.at, timeZone);
|
|
23
|
+
if (instant === null)
|
|
24
|
+
continue;
|
|
25
|
+
if (instant <= after)
|
|
26
|
+
continue;
|
|
27
|
+
if (!isSupportedSchedulerInstant(instant))
|
|
28
|
+
return null;
|
|
29
|
+
return schedulerInstantFromMilliseconds(instant);
|
|
30
|
+
}
|
|
31
|
+
throw new Error("scheduler_next_occurrence_unavailable");
|
|
32
|
+
}
|
|
33
|
+
function matchesCalendarDay(schedule, date) {
|
|
34
|
+
if (schedule.kind === "daily")
|
|
35
|
+
return true;
|
|
36
|
+
if (schedule.kind === "monthly")
|
|
37
|
+
return date.day === schedule.dayOfMonth;
|
|
38
|
+
return schedule.weekdays.includes(calendarWeekday(date));
|
|
39
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SchedulerRun, SchedulerRunOutcome } from "./contracts.js";
|
|
2
|
+
import type { SchedulerContext } from "./service-context.js";
|
|
3
|
+
export interface SchedulerRunCompletion {
|
|
4
|
+
runId: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
requestId: string;
|
|
7
|
+
generation: number;
|
|
8
|
+
outcome: SchedulerRunOutcome;
|
|
9
|
+
finishedAt: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function settleSchedulerRun(context: SchedulerContext, run: SchedulerRun, generation: number, execution: Promise<SchedulerRunOutcome>, release: () => void): Promise<void>;
|
|
12
|
+
export declare function reconcileSchedulerCompletions(context: SchedulerContext): Promise<void>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export async function settleSchedulerRun(context, run, generation, execution, release) {
|
|
2
|
+
const identity = {
|
|
3
|
+
runId: run.id,
|
|
4
|
+
sessionId: run.sessionId,
|
|
5
|
+
requestId: run.requestId,
|
|
6
|
+
};
|
|
7
|
+
try {
|
|
8
|
+
const outcome = await execution.catch((error) => ({
|
|
9
|
+
status: "failed",
|
|
10
|
+
error: error instanceof Error ? error.message : String(error),
|
|
11
|
+
}));
|
|
12
|
+
const completion = {
|
|
13
|
+
...identity,
|
|
14
|
+
generation,
|
|
15
|
+
outcome: { ...outcome },
|
|
16
|
+
finishedAt: new Date(context.now()).toISOString(),
|
|
17
|
+
};
|
|
18
|
+
await context.enqueue(async () => {
|
|
19
|
+
if (!canPersistCompletion(context, completion))
|
|
20
|
+
return;
|
|
21
|
+
context.pendingCompletions.set(completion.runId, completion);
|
|
22
|
+
await persistCompletion(context, completion);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
context.onError(error);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
release();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function reconcileSchedulerCompletions(context) {
|
|
33
|
+
// Each ordinary tick attempts retained writes once, without executing work.
|
|
34
|
+
for (const completion of context.pendingCompletions.values()) {
|
|
35
|
+
await persistCompletion(context, completion);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function persistCompletion(context, completion) {
|
|
39
|
+
if (!canPersistCompletion(context, completion)) {
|
|
40
|
+
context.pendingCompletions.delete(completion.runId);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
await context.store.update((state) => {
|
|
45
|
+
// Stop and session deletion can arrive while the store awaits its read.
|
|
46
|
+
if (!canPersistCompletion(context, completion))
|
|
47
|
+
return;
|
|
48
|
+
const run = state.runs.find((candidate) => candidate.id === completion.runId);
|
|
49
|
+
if (!isUnsettledCapturedRun(run, completion))
|
|
50
|
+
return;
|
|
51
|
+
Object.assign(run, completion.outcome, {
|
|
52
|
+
finishedAt: completion.finishedAt,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
context.pendingCompletions.delete(completion.runId);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Keep the captured outcome for a later clock tick, not an execution retry.
|
|
59
|
+
context.onError(error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function canPersistCompletion(context, completion) {
|
|
63
|
+
if (!context.running)
|
|
64
|
+
return false;
|
|
65
|
+
if (context.generation !== completion.generation)
|
|
66
|
+
return false;
|
|
67
|
+
return !context.deletedSessions.has(completion.sessionId);
|
|
68
|
+
}
|
|
69
|
+
function isUnsettledCapturedRun(run, completion) {
|
|
70
|
+
if (!run)
|
|
71
|
+
return false;
|
|
72
|
+
if (run.status !== "running")
|
|
73
|
+
return false;
|
|
74
|
+
if (run.sessionId !== completion.sessionId)
|
|
75
|
+
return false;
|
|
76
|
+
return run.requestId === completion.requestId;
|
|
77
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SchedulerRun, SchedulerRunListQuery } from "./contracts.js";
|
|
2
|
+
/** Omitted queries retain the public service's complete, chronological result. */
|
|
3
|
+
type RunListIdentity = Pick<SchedulerRun, "id" | "jobId" | "scheduledAt">;
|
|
4
|
+
export declare function querySchedulerRuns<T extends RunListIdentity>(runs: readonly T[], jobId: string | undefined, query: SchedulerRunListQuery | undefined): T[];
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function querySchedulerRuns(runs, jobId, query) {
|
|
2
|
+
const scoped = runs.filter((run) => jobId === undefined || run.jobId === jobId);
|
|
3
|
+
if (query === undefined)
|
|
4
|
+
return scoped;
|
|
5
|
+
const limit = requireRunPageLimit(query?.limit);
|
|
6
|
+
const ordered = scoped.sort(compareNewestRuns);
|
|
7
|
+
const offset = runCursorOffset(ordered, query.cursor);
|
|
8
|
+
return ordered.slice(offset, offset + limit);
|
|
9
|
+
}
|
|
10
|
+
function requireRunPageLimit(limit) {
|
|
11
|
+
if (!Number.isSafeInteger(limit))
|
|
12
|
+
throw new Error("scheduler_run_page_limit_invalid");
|
|
13
|
+
if (Number(limit) < 1)
|
|
14
|
+
throw new Error("scheduler_run_page_limit_invalid");
|
|
15
|
+
if (Number(limit) > 101)
|
|
16
|
+
throw new Error("scheduler_run_page_limit_invalid");
|
|
17
|
+
return Number(limit);
|
|
18
|
+
}
|
|
19
|
+
function runCursorOffset(runs, cursor) {
|
|
20
|
+
if (cursor === undefined)
|
|
21
|
+
return 0;
|
|
22
|
+
if (typeof cursor !== "string")
|
|
23
|
+
throw new Error("scheduler_run_cursor_invalid");
|
|
24
|
+
if (!cursor)
|
|
25
|
+
throw new Error("scheduler_run_cursor_invalid");
|
|
26
|
+
const index = runs.findIndex((run) => run.id === cursor);
|
|
27
|
+
if (index < 0)
|
|
28
|
+
throw new Error("scheduler_run_cursor_not_found");
|
|
29
|
+
return index + 1;
|
|
30
|
+
}
|
|
31
|
+
function compareNewestRuns(left, right) {
|
|
32
|
+
const scheduled = Date.parse(right.scheduledAt) - Date.parse(left.scheduledAt);
|
|
33
|
+
if (scheduled !== 0)
|
|
34
|
+
return scheduled;
|
|
35
|
+
if (left.id === right.id)
|
|
36
|
+
return 0;
|
|
37
|
+
return left.id < right.id ? 1 : -1;
|
|
38
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SchedulerJob, SchedulerRun, SchedulerSnapshot } from "./contracts.js";
|
|
2
|
+
export declare function makeSchedulerRun(job: SchedulerJob, scheduledAt: string, trigger: SchedulerRun["trigger"]): SchedulerRun;
|
|
3
|
+
export declare function findPendingRun(state: SchedulerSnapshot, jobId: string): SchedulerRun | undefined;
|
|
4
|
+
export declare function cancelPendingRuns(state: SchedulerSnapshot, jobId: string, at: string): void;
|
|
5
|
+
export declare function requireSchedulerJob(state: SchedulerSnapshot, jobId: string): SchedulerJob;
|
|
6
|
+
export declare function hasRunningSession(state: SchedulerSnapshot, sessionId: string): boolean;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
export function makeSchedulerRun(job, scheduledAt, trigger) {
|
|
3
|
+
return {
|
|
4
|
+
id: randomUUID(),
|
|
5
|
+
requestId: randomUUID(),
|
|
6
|
+
jobId: job.id,
|
|
7
|
+
environmentId: job.environmentId,
|
|
8
|
+
sessionId: job.sessionId,
|
|
9
|
+
title: job.title,
|
|
10
|
+
prompt: job.prompt,
|
|
11
|
+
modelProfileId: job.modelProfileId,
|
|
12
|
+
agentMode: job.agentMode,
|
|
13
|
+
timeZone: job.timeZone,
|
|
14
|
+
jobRevision: job.revision,
|
|
15
|
+
scheduledAt,
|
|
16
|
+
trigger,
|
|
17
|
+
status: "pending",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function findPendingRun(state, jobId) {
|
|
21
|
+
return state.runs.find((run) => run.jobId === jobId && run.status === "pending");
|
|
22
|
+
}
|
|
23
|
+
export function cancelPendingRuns(state, jobId, at) {
|
|
24
|
+
for (const run of state.runs) {
|
|
25
|
+
if (run.jobId !== jobId)
|
|
26
|
+
continue;
|
|
27
|
+
if (run.status !== "pending")
|
|
28
|
+
continue;
|
|
29
|
+
run.status = "cancelled";
|
|
30
|
+
run.finishedAt = at;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function requireSchedulerJob(state, jobId) {
|
|
34
|
+
const job = state.jobs.find((candidate) => candidate.id === jobId);
|
|
35
|
+
if (!job)
|
|
36
|
+
throw new Error("scheduler_job_not_found");
|
|
37
|
+
return job;
|
|
38
|
+
}
|
|
39
|
+
export function hasRunningSession(state, sessionId) {
|
|
40
|
+
return state.runs.some((run) => run.sessionId === sessionId && run.status === "running");
|
|
41
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SchedulerSchedule, SchedulerScheduleInput } from "./contracts.js";
|
|
2
|
+
/** PATCH preserves omitted or exact stored timing; actual edits are new input. */
|
|
3
|
+
export declare function normalizeSchedulerScheduleUpdate(stored: SchedulerSchedule, input: SchedulerScheduleInput | undefined, now: number): SchedulerSchedule;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { normalizeSchedulerSchedule } from "./schedule-validation.js";
|
|
2
|
+
/** PATCH preserves omitted or exact stored timing; actual edits are new input. */
|
|
3
|
+
export function normalizeSchedulerScheduleUpdate(stored, input, now) {
|
|
4
|
+
if (input === undefined)
|
|
5
|
+
return stored;
|
|
6
|
+
if (isExactStoredTimerSchedule(stored, input))
|
|
7
|
+
return stored;
|
|
8
|
+
return normalizeSchedulerSchedule(input, now);
|
|
9
|
+
}
|
|
10
|
+
function isExactStoredTimerSchedule(stored, input) {
|
|
11
|
+
if (!input || typeof input !== "object")
|
|
12
|
+
return false;
|
|
13
|
+
if (stored.kind !== "timer")
|
|
14
|
+
return false;
|
|
15
|
+
if (input.kind !== "timer")
|
|
16
|
+
return false;
|
|
17
|
+
if (input.delayMs !== stored.delayMs)
|
|
18
|
+
return false;
|
|
19
|
+
if (!("at" in input))
|
|
20
|
+
return false;
|
|
21
|
+
return input.at === stored.at;
|
|
22
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CreateSchedulerJobInput, SchedulerSchedule, SchedulerScheduleInput } from "./contracts.js";
|
|
2
|
+
export { SchedulerValidationError } from "./validation-error.js";
|
|
3
|
+
export { parseSchedulerInstant } from "./instant-validation.js";
|
|
4
|
+
export declare function requireSchedulerText(value: unknown, field: string): string;
|
|
5
|
+
export declare function validateSchedulerJobInput(input: CreateSchedulerJobInput): void;
|
|
6
|
+
export declare function validateTimeZone(timeZone: string): void;
|
|
7
|
+
export declare function requireCalendarHour(value: unknown): string;
|
|
8
|
+
export declare function normalizeSchedulerSchedule(input: SchedulerScheduleInput, now: number): SchedulerSchedule;
|
|
9
|
+
/** Stored timer deadlines are canonical state, not new relative timer input. */
|
|
10
|
+
export declare function normalizeStoredSchedulerSchedule(schedule: SchedulerSchedule): SchedulerSchedule;
|