@herdctl/core 0.0.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/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-test.log +219 -0
- package/.turbo/turbo-typecheck.log +4 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +51 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +251 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/config/index.html +191 -0
- package/coverage/src/config/index.ts.html +442 -0
- package/coverage/src/config/interpolate.ts.html +652 -0
- package/coverage/src/config/loader.ts.html +1501 -0
- package/coverage/src/config/merge.ts.html +823 -0
- package/coverage/src/config/parser.ts.html +1213 -0
- package/coverage/src/config/schema.ts.html +1123 -0
- package/coverage/src/fleet-manager/errors.ts.html +2326 -0
- package/coverage/src/fleet-manager/event-types.ts.html +1219 -0
- package/coverage/src/fleet-manager/fleet-manager.ts.html +7030 -0
- package/coverage/src/fleet-manager/index.html +206 -0
- package/coverage/src/fleet-manager/index.ts.html +469 -0
- package/coverage/src/fleet-manager/job-manager.ts.html +2074 -0
- package/coverage/src/fleet-manager/job-queue.ts.html +2479 -0
- package/coverage/src/fleet-manager/types.ts.html +2602 -0
- package/coverage/src/index.html +116 -0
- package/coverage/src/index.ts.html +181 -0
- package/coverage/src/runner/errors.ts.html +1006 -0
- package/coverage/src/runner/index.html +191 -0
- package/coverage/src/runner/index.ts.html +256 -0
- package/coverage/src/runner/job-executor.ts.html +1429 -0
- package/coverage/src/runner/message-processor.ts.html +1150 -0
- package/coverage/src/runner/sdk-adapter.ts.html +658 -0
- package/coverage/src/runner/types.ts.html +559 -0
- package/coverage/src/scheduler/errors.ts.html +388 -0
- package/coverage/src/scheduler/index.html +206 -0
- package/coverage/src/scheduler/index.ts.html +244 -0
- package/coverage/src/scheduler/interval.ts.html +652 -0
- package/coverage/src/scheduler/schedule-runner.ts.html +1411 -0
- package/coverage/src/scheduler/schedule-state.ts.html +718 -0
- package/coverage/src/scheduler/scheduler.ts.html +1795 -0
- package/coverage/src/scheduler/types.ts.html +733 -0
- package/coverage/src/state/directory.ts.html +736 -0
- package/coverage/src/state/errors.ts.html +376 -0
- package/coverage/src/state/fleet-state.ts.html +937 -0
- package/coverage/src/state/index.html +221 -0
- package/coverage/src/state/index.ts.html +322 -0
- package/coverage/src/state/job-metadata.ts.html +1420 -0
- package/coverage/src/state/job-output.ts.html +1033 -0
- package/coverage/src/state/schemas/fleet-state.ts.html +445 -0
- package/coverage/src/state/schemas/index.html +176 -0
- package/coverage/src/state/schemas/index.ts.html +286 -0
- package/coverage/src/state/schemas/job-metadata.ts.html +628 -0
- package/coverage/src/state/schemas/job-output.ts.html +616 -0
- package/coverage/src/state/schemas/session-info.ts.html +361 -0
- package/coverage/src/state/session.ts.html +844 -0
- package/coverage/src/state/types.ts.html +262 -0
- package/coverage/src/state/utils/atomic.ts.html +748 -0
- package/coverage/src/state/utils/index.html +146 -0
- package/coverage/src/state/utils/index.ts.html +103 -0
- package/coverage/src/state/utils/reads.ts.html +1621 -0
- package/coverage/src/work-sources/adapters/github.ts.html +3583 -0
- package/coverage/src/work-sources/adapters/index.html +131 -0
- package/coverage/src/work-sources/adapters/index.ts.html +277 -0
- package/coverage/src/work-sources/errors.ts.html +298 -0
- package/coverage/src/work-sources/index.html +176 -0
- package/coverage/src/work-sources/index.ts.html +529 -0
- package/coverage/src/work-sources/manager.ts.html +1324 -0
- package/coverage/src/work-sources/registry.ts.html +619 -0
- package/coverage/src/work-sources/types.ts.html +568 -0
- package/dist/config/__tests__/agent.test.d.ts +2 -0
- package/dist/config/__tests__/agent.test.d.ts.map +1 -0
- package/dist/config/__tests__/agent.test.js +752 -0
- package/dist/config/__tests__/agent.test.js.map +1 -0
- package/dist/config/__tests__/interpolate.test.d.ts +2 -0
- package/dist/config/__tests__/interpolate.test.d.ts.map +1 -0
- package/dist/config/__tests__/interpolate.test.js +509 -0
- package/dist/config/__tests__/interpolate.test.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +2 -0
- package/dist/config/__tests__/loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/loader.test.js +631 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/__tests__/merge.test.d.ts +2 -0
- package/dist/config/__tests__/merge.test.d.ts.map +1 -0
- package/dist/config/__tests__/merge.test.js +672 -0
- package/dist/config/__tests__/merge.test.js.map +1 -0
- package/dist/config/__tests__/parser.test.d.ts +2 -0
- package/dist/config/__tests__/parser.test.d.ts.map +1 -0
- package/dist/config/__tests__/parser.test.js +476 -0
- package/dist/config/__tests__/parser.test.js.map +1 -0
- package/dist/config/__tests__/schema.test.d.ts +2 -0
- package/dist/config/__tests__/schema.test.d.ts.map +1 -0
- package/dist/config/__tests__/schema.test.js +776 -0
- package/dist/config/__tests__/schema.test.js.map +1 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +26 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/interpolate.d.ts +76 -0
- package/dist/config/interpolate.d.ts.map +1 -0
- package/dist/config/interpolate.js +143 -0
- package/dist/config/interpolate.js.map +1 -0
- package/dist/config/loader.d.ts +147 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +336 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +84 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +138 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/parser.d.ts +143 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +316 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/config/schema.d.ts +1906 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +268 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/fleet-manager/__tests__/coverage.test.d.ts +13 -0
- package/dist/fleet-manager/__tests__/coverage.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/coverage.test.js +2282 -0
- package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/errors.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/errors.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/errors.test.js +557 -0
- package/dist/fleet-manager/__tests__/errors.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/event-helpers.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/event-helpers.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/event-helpers.test.js +368 -0
- package/dist/fleet-manager/__tests__/event-helpers.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/integration.test.d.ts +11 -0
- package/dist/fleet-manager/__tests__/integration.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/integration.test.js +949 -0
- package/dist/fleet-manager/__tests__/integration.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/job-control.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/job-control.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/job-control.test.js +215 -0
- package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/job-manager.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/job-manager.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/job-manager.test.js +659 -0
- package/dist/fleet-manager/__tests__/job-manager.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/job-queue.test.d.ts +5 -0
- package/dist/fleet-manager/__tests__/job-queue.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/job-queue.test.js +315 -0
- package/dist/fleet-manager/__tests__/job-queue.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/reload.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/reload.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/reload.test.js +609 -0
- package/dist/fleet-manager/__tests__/reload.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/status-queries.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/status-queries.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/status-queries.test.js +488 -0
- package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -0
- package/dist/fleet-manager/__tests__/trigger.test.d.ts +7 -0
- package/dist/fleet-manager/__tests__/trigger.test.d.ts.map +1 -0
- package/dist/fleet-manager/__tests__/trigger.test.js +471 -0
- package/dist/fleet-manager/__tests__/trigger.test.js.map +1 -0
- package/dist/fleet-manager/errors.d.ts +407 -0
- package/dist/fleet-manager/errors.d.ts.map +1 -0
- package/dist/fleet-manager/errors.js +569 -0
- package/dist/fleet-manager/errors.js.map +1 -0
- package/dist/fleet-manager/event-types.d.ts +302 -0
- package/dist/fleet-manager/event-types.d.ts.map +1 -0
- package/dist/fleet-manager/event-types.js +9 -0
- package/dist/fleet-manager/event-types.js.map +1 -0
- package/dist/fleet-manager/fleet-manager.d.ts +699 -0
- package/dist/fleet-manager/fleet-manager.d.ts.map +1 -0
- package/dist/fleet-manager/fleet-manager.js +1906 -0
- package/dist/fleet-manager/fleet-manager.js.map +1 -0
- package/dist/fleet-manager/index.d.ts +17 -0
- package/dist/fleet-manager/index.d.ts.map +1 -0
- package/dist/fleet-manager/index.js +29 -0
- package/dist/fleet-manager/index.js.map +1 -0
- package/dist/fleet-manager/job-manager.d.ts +271 -0
- package/dist/fleet-manager/job-manager.d.ts.map +1 -0
- package/dist/fleet-manager/job-manager.js +443 -0
- package/dist/fleet-manager/job-manager.js.map +1 -0
- package/dist/fleet-manager/job-queue.d.ts +422 -0
- package/dist/fleet-manager/job-queue.d.ts.map +1 -0
- package/dist/fleet-manager/job-queue.js +448 -0
- package/dist/fleet-manager/job-queue.js.map +1 -0
- package/dist/fleet-manager/types.d.ts +680 -0
- package/dist/fleet-manager/types.d.ts.map +1 -0
- package/dist/fleet-manager/types.js +8 -0
- package/dist/fleet-manager/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/runner/__tests__/errors.test.d.ts +2 -0
- package/dist/runner/__tests__/errors.test.d.ts.map +1 -0
- package/dist/runner/__tests__/errors.test.js +264 -0
- package/dist/runner/__tests__/errors.test.js.map +1 -0
- package/dist/runner/__tests__/job-executor.test.d.ts +2 -0
- package/dist/runner/__tests__/job-executor.test.d.ts.map +1 -0
- package/dist/runner/__tests__/job-executor.test.js +1345 -0
- package/dist/runner/__tests__/job-executor.test.js.map +1 -0
- package/dist/runner/__tests__/message-processor.test.d.ts +2 -0
- package/dist/runner/__tests__/message-processor.test.d.ts.map +1 -0
- package/dist/runner/__tests__/message-processor.test.js +768 -0
- package/dist/runner/__tests__/message-processor.test.js.map +1 -0
- package/dist/runner/__tests__/sdk-adapter.test.d.ts +2 -0
- package/dist/runner/__tests__/sdk-adapter.test.d.ts.map +1 -0
- package/dist/runner/__tests__/sdk-adapter.test.js +554 -0
- package/dist/runner/__tests__/sdk-adapter.test.js.map +1 -0
- package/dist/runner/errors.d.ts +121 -0
- package/dist/runner/errors.d.ts.map +1 -0
- package/dist/runner/errors.js +212 -0
- package/dist/runner/errors.js.map +1 -0
- package/dist/runner/index.d.ts +12 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +15 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/job-executor.d.ts +98 -0
- package/dist/runner/job-executor.d.ts.map +1 -0
- package/dist/runner/job-executor.js +333 -0
- package/dist/runner/job-executor.js.map +1 -0
- package/dist/runner/message-processor.d.ts +45 -0
- package/dist/runner/message-processor.d.ts.map +1 -0
- package/dist/runner/message-processor.js +294 -0
- package/dist/runner/message-processor.js.map +1 -0
- package/dist/runner/sdk-adapter.d.ts +60 -0
- package/dist/runner/sdk-adapter.d.ts.map +1 -0
- package/dist/runner/sdk-adapter.js +138 -0
- package/dist/runner/sdk-adapter.js.map +1 -0
- package/dist/runner/types.d.ts +135 -0
- package/dist/runner/types.d.ts.map +1 -0
- package/dist/runner/types.js +7 -0
- package/dist/runner/types.js.map +1 -0
- package/dist/scheduler/__tests__/errors.test.d.ts +2 -0
- package/dist/scheduler/__tests__/errors.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/errors.test.js +101 -0
- package/dist/scheduler/__tests__/errors.test.js.map +1 -0
- package/dist/scheduler/__tests__/interval.test.d.ts +2 -0
- package/dist/scheduler/__tests__/interval.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/interval.test.js +419 -0
- package/dist/scheduler/__tests__/interval.test.js.map +1 -0
- package/dist/scheduler/__tests__/schedule-runner.test.d.ts +2 -0
- package/dist/scheduler/__tests__/schedule-runner.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/schedule-runner.test.js +634 -0
- package/dist/scheduler/__tests__/schedule-runner.test.js.map +1 -0
- package/dist/scheduler/__tests__/schedule-state.test.d.ts +2 -0
- package/dist/scheduler/__tests__/schedule-state.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/schedule-state.test.js +572 -0
- package/dist/scheduler/__tests__/schedule-state.test.js.map +1 -0
- package/dist/scheduler/__tests__/scheduler.test.d.ts +2 -0
- package/dist/scheduler/__tests__/scheduler.test.d.ts.map +1 -0
- package/dist/scheduler/__tests__/scheduler.test.js +987 -0
- package/dist/scheduler/__tests__/scheduler.test.js.map +1 -0
- package/dist/scheduler/errors.d.ts +61 -0
- package/dist/scheduler/errors.d.ts.map +1 -0
- package/dist/scheduler/errors.js +81 -0
- package/dist/scheduler/errors.js.map +1 -0
- package/dist/scheduler/index.d.ts +13 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +17 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/interval.d.ts +64 -0
- package/dist/scheduler/interval.d.ts.map +1 -0
- package/dist/scheduler/interval.js +139 -0
- package/dist/scheduler/interval.js.map +1 -0
- package/dist/scheduler/schedule-runner.d.ts +149 -0
- package/dist/scheduler/schedule-runner.d.ts.map +1 -0
- package/dist/scheduler/schedule-runner.js +277 -0
- package/dist/scheduler/schedule-runner.js.map +1 -0
- package/dist/scheduler/schedule-state.d.ts +105 -0
- package/dist/scheduler/schedule-state.d.ts.map +1 -0
- package/dist/scheduler/schedule-state.js +151 -0
- package/dist/scheduler/schedule-state.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +138 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/scheduler.js +423 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/scheduler/types.d.ts +160 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +8 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/state/__tests__/directory.test.d.ts +2 -0
- package/dist/state/__tests__/directory.test.d.ts.map +1 -0
- package/dist/state/__tests__/directory.test.js +414 -0
- package/dist/state/__tests__/directory.test.js.map +1 -0
- package/dist/state/__tests__/fleet-state.test.d.ts +2 -0
- package/dist/state/__tests__/fleet-state.test.d.ts.map +1 -0
- package/dist/state/__tests__/fleet-state.test.js +696 -0
- package/dist/state/__tests__/fleet-state.test.js.map +1 -0
- package/dist/state/__tests__/job-metadata-schema.test.d.ts +2 -0
- package/dist/state/__tests__/job-metadata-schema.test.d.ts.map +1 -0
- package/dist/state/__tests__/job-metadata-schema.test.js +329 -0
- package/dist/state/__tests__/job-metadata-schema.test.js.map +1 -0
- package/dist/state/__tests__/job-metadata.test.d.ts +2 -0
- package/dist/state/__tests__/job-metadata.test.d.ts.map +1 -0
- package/dist/state/__tests__/job-metadata.test.js +667 -0
- package/dist/state/__tests__/job-metadata.test.js.map +1 -0
- package/dist/state/__tests__/job-output.test.d.ts +2 -0
- package/dist/state/__tests__/job-output.test.d.ts.map +1 -0
- package/dist/state/__tests__/job-output.test.js +672 -0
- package/dist/state/__tests__/job-output.test.js.map +1 -0
- package/dist/state/__tests__/session-schema.test.d.ts +2 -0
- package/dist/state/__tests__/session-schema.test.d.ts.map +1 -0
- package/dist/state/__tests__/session-schema.test.js +323 -0
- package/dist/state/__tests__/session-schema.test.js.map +1 -0
- package/dist/state/__tests__/session.test.d.ts +2 -0
- package/dist/state/__tests__/session.test.d.ts.map +1 -0
- package/dist/state/__tests__/session.test.js +468 -0
- package/dist/state/__tests__/session.test.js.map +1 -0
- package/dist/state/directory.d.ts +42 -0
- package/dist/state/directory.d.ts.map +1 -0
- package/dist/state/directory.js +170 -0
- package/dist/state/directory.js.map +1 -0
- package/dist/state/errors.d.ts +44 -0
- package/dist/state/errors.d.ts.map +1 -0
- package/dist/state/errors.js +82 -0
- package/dist/state/errors.js.map +1 -0
- package/dist/state/fleet-state.d.ts +126 -0
- package/dist/state/fleet-state.d.ts.map +1 -0
- package/dist/state/fleet-state.js +196 -0
- package/dist/state/fleet-state.js.map +1 -0
- package/dist/state/index.d.ts +21 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +30 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/job-metadata.d.ts +151 -0
- package/dist/state/job-metadata.d.ts.map +1 -0
- package/dist/state/job-metadata.js +287 -0
- package/dist/state/job-metadata.js.map +1 -0
- package/dist/state/job-output.d.ts +116 -0
- package/dist/state/job-output.d.ts.map +1 -0
- package/dist/state/job-output.js +218 -0
- package/dist/state/job-output.js.map +1 -0
- package/dist/state/schemas/__tests__/job-output.test.d.ts +2 -0
- package/dist/state/schemas/__tests__/job-output.test.d.ts.map +1 -0
- package/dist/state/schemas/__tests__/job-output.test.js +279 -0
- package/dist/state/schemas/__tests__/job-output.test.js.map +1 -0
- package/dist/state/schemas/fleet-state.d.ts +249 -0
- package/dist/state/schemas/fleet-state.d.ts.map +1 -0
- package/dist/state/schemas/fleet-state.js +97 -0
- package/dist/state/schemas/fleet-state.js.map +1 -0
- package/dist/state/schemas/index.d.ts +10 -0
- package/dist/state/schemas/index.d.ts.map +1 -0
- package/dist/state/schemas/index.js +10 -0
- package/dist/state/schemas/index.js.map +1 -0
- package/dist/state/schemas/job-metadata.d.ts +118 -0
- package/dist/state/schemas/job-metadata.d.ts.map +1 -0
- package/dist/state/schemas/job-metadata.js +123 -0
- package/dist/state/schemas/job-metadata.js.map +1 -0
- package/dist/state/schemas/job-output.d.ts +291 -0
- package/dist/state/schemas/job-output.d.ts.map +1 -0
- package/dist/state/schemas/job-output.js +132 -0
- package/dist/state/schemas/job-output.js.map +1 -0
- package/dist/state/schemas/session-info.d.ts +65 -0
- package/dist/state/schemas/session-info.d.ts.map +1 -0
- package/dist/state/schemas/session-info.js +58 -0
- package/dist/state/schemas/session-info.js.map +1 -0
- package/dist/state/session.d.ts +92 -0
- package/dist/state/session.d.ts.map +1 -0
- package/dist/state/session.js +173 -0
- package/dist/state/session.js.map +1 -0
- package/dist/state/types.d.ts +54 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +18 -0
- package/dist/state/types.js.map +1 -0
- package/dist/state/utils/__tests__/atomic.test.d.ts +2 -0
- package/dist/state/utils/__tests__/atomic.test.d.ts.map +1 -0
- package/dist/state/utils/__tests__/atomic.test.js +537 -0
- package/dist/state/utils/__tests__/atomic.test.js.map +1 -0
- package/dist/state/utils/__tests__/reads.test.d.ts +2 -0
- package/dist/state/utils/__tests__/reads.test.d.ts.map +1 -0
- package/dist/state/utils/__tests__/reads.test.js +792 -0
- package/dist/state/utils/__tests__/reads.test.js.map +1 -0
- package/dist/state/utils/atomic.d.ts +89 -0
- package/dist/state/utils/atomic.d.ts.map +1 -0
- package/dist/state/utils/atomic.js +157 -0
- package/dist/state/utils/atomic.js.map +1 -0
- package/dist/state/utils/index.d.ts +6 -0
- package/dist/state/utils/index.d.ts.map +1 -0
- package/dist/state/utils/index.js +6 -0
- package/dist/state/utils/index.js.map +1 -0
- package/dist/state/utils/reads.d.ts +196 -0
- package/dist/state/utils/reads.d.ts.map +1 -0
- package/dist/state/utils/reads.js +346 -0
- package/dist/state/utils/reads.js.map +1 -0
- package/dist/work-sources/__tests__/github.test.d.ts +2 -0
- package/dist/work-sources/__tests__/github.test.d.ts.map +1 -0
- package/dist/work-sources/__tests__/github.test.js +1334 -0
- package/dist/work-sources/__tests__/github.test.js.map +1 -0
- package/dist/work-sources/__tests__/manager.test.d.ts +2 -0
- package/dist/work-sources/__tests__/manager.test.d.ts.map +1 -0
- package/dist/work-sources/__tests__/manager.test.js +424 -0
- package/dist/work-sources/__tests__/manager.test.js.map +1 -0
- package/dist/work-sources/__tests__/registry.test.d.ts +2 -0
- package/dist/work-sources/__tests__/registry.test.d.ts.map +1 -0
- package/dist/work-sources/__tests__/registry.test.js +381 -0
- package/dist/work-sources/__tests__/registry.test.js.map +1 -0
- package/dist/work-sources/__tests__/types.test.d.ts +2 -0
- package/dist/work-sources/__tests__/types.test.d.ts.map +1 -0
- package/dist/work-sources/__tests__/types.test.js +406 -0
- package/dist/work-sources/__tests__/types.test.js.map +1 -0
- package/dist/work-sources/adapters/github.d.ts +290 -0
- package/dist/work-sources/adapters/github.d.ts.map +1 -0
- package/dist/work-sources/adapters/github.js +803 -0
- package/dist/work-sources/adapters/github.js.map +1 -0
- package/dist/work-sources/adapters/index.d.ts +10 -0
- package/dist/work-sources/adapters/index.d.ts.map +1 -0
- package/dist/work-sources/adapters/index.js +31 -0
- package/dist/work-sources/adapters/index.js.map +1 -0
- package/dist/work-sources/errors.d.ts +40 -0
- package/dist/work-sources/errors.d.ts.map +1 -0
- package/dist/work-sources/errors.js +54 -0
- package/dist/work-sources/errors.js.map +1 -0
- package/dist/work-sources/index.d.ts +105 -0
- package/dist/work-sources/index.d.ts.map +1 -0
- package/dist/work-sources/index.js +24 -0
- package/dist/work-sources/index.js.map +1 -0
- package/dist/work-sources/manager.d.ts +370 -0
- package/dist/work-sources/manager.d.ts.map +1 -0
- package/dist/work-sources/manager.js +61 -0
- package/dist/work-sources/manager.js.map +1 -0
- package/dist/work-sources/registry.d.ts +128 -0
- package/dist/work-sources/registry.d.ts.map +1 -0
- package/dist/work-sources/registry.js +132 -0
- package/dist/work-sources/registry.js.map +1 -0
- package/dist/work-sources/types.d.ts +127 -0
- package/dist/work-sources/types.d.ts.map +1 -0
- package/dist/work-sources/types.js +8 -0
- package/dist/work-sources/types.js.map +1 -0
- package/package.json +23 -0
- package/src/config/__tests__/agent.test.ts +864 -0
- package/src/config/__tests__/interpolate.test.ts +644 -0
- package/src/config/__tests__/loader.test.ts +784 -0
- package/src/config/__tests__/merge.test.ts +751 -0
- package/src/config/__tests__/parser.test.ts +533 -0
- package/src/config/__tests__/schema.test.ts +873 -0
- package/src/config/index.ts +119 -0
- package/src/config/interpolate.ts +189 -0
- package/src/config/loader.ts +472 -0
- package/src/config/merge.ts +246 -0
- package/src/config/parser.ts +376 -0
- package/src/config/schema.ts +346 -0
- package/src/fleet-manager/__tests__/coverage.test.ts +2869 -0
- package/src/fleet-manager/__tests__/errors.test.ts +660 -0
- package/src/fleet-manager/__tests__/event-helpers.test.ts +448 -0
- package/src/fleet-manager/__tests__/integration.test.ts +1209 -0
- package/src/fleet-manager/__tests__/job-control.test.ts +283 -0
- package/src/fleet-manager/__tests__/job-manager.test.ts +869 -0
- package/src/fleet-manager/__tests__/job-queue.test.ts +401 -0
- package/src/fleet-manager/__tests__/reload.test.ts +751 -0
- package/src/fleet-manager/__tests__/status-queries.test.ts +595 -0
- package/src/fleet-manager/__tests__/trigger.test.ts +601 -0
- package/src/fleet-manager/errors.ts +747 -0
- package/src/fleet-manager/event-types.ts +378 -0
- package/src/fleet-manager/fleet-manager.ts +2315 -0
- package/src/fleet-manager/index.ts +128 -0
- package/src/fleet-manager/job-manager.ts +663 -0
- package/src/fleet-manager/job-queue.ts +798 -0
- package/src/fleet-manager/types.ts +839 -0
- package/src/index.ts +32 -0
- package/src/runner/__tests__/errors.test.ts +382 -0
- package/src/runner/__tests__/job-executor.test.ts +1708 -0
- package/src/runner/__tests__/message-processor.test.ts +960 -0
- package/src/runner/__tests__/sdk-adapter.test.ts +626 -0
- package/src/runner/errors.ts +307 -0
- package/src/runner/index.ts +57 -0
- package/src/runner/job-executor.ts +448 -0
- package/src/runner/message-processor.ts +355 -0
- package/src/runner/sdk-adapter.ts +191 -0
- package/src/runner/types.ts +158 -0
- package/src/scheduler/__tests__/errors.test.ts +159 -0
- package/src/scheduler/__tests__/interval.test.ts +515 -0
- package/src/scheduler/__tests__/schedule-runner.test.ts +798 -0
- package/src/scheduler/__tests__/schedule-state.test.ts +671 -0
- package/src/scheduler/__tests__/scheduler.test.ts +1280 -0
- package/src/scheduler/errors.ts +101 -0
- package/src/scheduler/index.ts +53 -0
- package/src/scheduler/interval.ts +189 -0
- package/src/scheduler/schedule-runner.ts +442 -0
- package/src/scheduler/schedule-state.ts +211 -0
- package/src/scheduler/scheduler.ts +570 -0
- package/src/scheduler/types.ts +216 -0
- package/src/state/__tests__/directory.test.ts +595 -0
- package/src/state/__tests__/fleet-state.test.ts +868 -0
- package/src/state/__tests__/job-metadata-schema.test.ts +414 -0
- package/src/state/__tests__/job-metadata.test.ts +831 -0
- package/src/state/__tests__/job-output.test.ts +856 -0
- package/src/state/__tests__/session-schema.test.ts +378 -0
- package/src/state/__tests__/session.test.ts +604 -0
- package/src/state/directory.ts +217 -0
- package/src/state/errors.ts +97 -0
- package/src/state/fleet-state.ts +284 -0
- package/src/state/index.ts +79 -0
- package/src/state/job-metadata.ts +445 -0
- package/src/state/job-output.ts +316 -0
- package/src/state/schemas/__tests__/job-output.test.ts +338 -0
- package/src/state/schemas/fleet-state.ts +120 -0
- package/src/state/schemas/index.ts +67 -0
- package/src/state/schemas/job-metadata.ts +181 -0
- package/src/state/schemas/job-output.ts +177 -0
- package/src/state/schemas/session-info.ts +92 -0
- package/src/state/session.ts +253 -0
- package/src/state/types.ts +59 -0
- package/src/state/utils/__tests__/atomic.test.ts +723 -0
- package/src/state/utils/__tests__/reads.test.ts +1071 -0
- package/src/state/utils/atomic.ts +221 -0
- package/src/state/utils/index.ts +6 -0
- package/src/state/utils/reads.ts +512 -0
- package/src/work-sources/__tests__/github.test.ts +1800 -0
- package/src/work-sources/__tests__/manager.test.ts +529 -0
- package/src/work-sources/__tests__/registry.test.ts +477 -0
- package/src/work-sources/__tests__/types.test.ts +479 -0
- package/src/work-sources/adapters/github.ts +1166 -0
- package/src/work-sources/adapters/index.ts +64 -0
- package/src/work-sources/errors.ts +71 -0
- package/src/work-sources/index.ts +148 -0
- package/src/work-sources/manager.ts +413 -0
- package/src/work-sources/registry.ts +178 -0
- package/src/work-sources/types.ts +161 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +19 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Runner for executing triggered schedules
|
|
3
|
+
*
|
|
4
|
+
* Handles the actual execution of scheduled work by:
|
|
5
|
+
* 1. Fetching work items from work sources (if configured)
|
|
6
|
+
* 2. Building prompts from schedule config and work items
|
|
7
|
+
* 3. Invoking the JobExecutor to run the agent
|
|
8
|
+
* 4. Updating schedule state and reporting outcomes
|
|
9
|
+
*/
|
|
10
|
+
import { JobExecutor } from "../runner/index.js";
|
|
11
|
+
import { updateScheduleState, } from "./schedule-state.js";
|
|
12
|
+
import { calculateNextTrigger } from "./interval.js";
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Default Logger
|
|
15
|
+
// =============================================================================
|
|
16
|
+
const defaultLogger = {
|
|
17
|
+
debug: (message) => console.debug(`[schedule-runner] ${message}`),
|
|
18
|
+
info: (message) => console.info(`[schedule-runner] ${message}`),
|
|
19
|
+
warn: (message) => console.warn(`[schedule-runner] ${message}`),
|
|
20
|
+
error: (message) => console.error(`[schedule-runner] ${message}`),
|
|
21
|
+
};
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Build Schedule Prompt
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Build the prompt for a scheduled run
|
|
27
|
+
*
|
|
28
|
+
* Constructs the prompt by combining:
|
|
29
|
+
* 1. The schedule's configured prompt (if any)
|
|
30
|
+
* 2. Work item details (if a work item was fetched)
|
|
31
|
+
*
|
|
32
|
+
* @param schedule - The schedule configuration
|
|
33
|
+
* @param workItem - Optional work item fetched from work source
|
|
34
|
+
* @returns The constructed prompt string
|
|
35
|
+
*
|
|
36
|
+
* @example Without work item
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const prompt = buildSchedulePrompt(
|
|
39
|
+
* { type: 'interval', interval: '1h', prompt: 'Check for updates' }
|
|
40
|
+
* );
|
|
41
|
+
* // => "Check for updates"
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example With work item
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const prompt = buildSchedulePrompt(
|
|
47
|
+
* { type: 'interval', interval: '1h', prompt: 'Process this issue:' },
|
|
48
|
+
* { title: 'Fix bug', description: 'There is a bug in auth.ts', ... }
|
|
49
|
+
* );
|
|
50
|
+
* // => "Process this issue:\n\n## Work Item: Fix bug\n\nThere is a bug in auth.ts\n\n..."
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function buildSchedulePrompt(schedule, workItem) {
|
|
54
|
+
const parts = [];
|
|
55
|
+
// Add schedule prompt if configured
|
|
56
|
+
if (schedule.prompt) {
|
|
57
|
+
parts.push(schedule.prompt);
|
|
58
|
+
}
|
|
59
|
+
// Add work item details if provided
|
|
60
|
+
if (workItem) {
|
|
61
|
+
const workItemSection = formatWorkItem(workItem);
|
|
62
|
+
parts.push(workItemSection);
|
|
63
|
+
}
|
|
64
|
+
// If no prompt and no work item, provide a default
|
|
65
|
+
if (parts.length === 0) {
|
|
66
|
+
return "Execute scheduled task.";
|
|
67
|
+
}
|
|
68
|
+
return parts.join("\n\n");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Format a work item for inclusion in a prompt
|
|
72
|
+
*/
|
|
73
|
+
function formatWorkItem(workItem) {
|
|
74
|
+
const lines = [];
|
|
75
|
+
lines.push(`## Work Item: ${workItem.title}`);
|
|
76
|
+
lines.push("");
|
|
77
|
+
if (workItem.description) {
|
|
78
|
+
lines.push(workItem.description);
|
|
79
|
+
lines.push("");
|
|
80
|
+
}
|
|
81
|
+
// Add metadata
|
|
82
|
+
const metadata = [];
|
|
83
|
+
metadata.push(`- **Source:** ${workItem.source}`);
|
|
84
|
+
metadata.push(`- **ID:** ${workItem.externalId}`);
|
|
85
|
+
metadata.push(`- **Priority:** ${workItem.priority}`);
|
|
86
|
+
if (workItem.labels.length > 0) {
|
|
87
|
+
metadata.push(`- **Labels:** ${workItem.labels.join(", ")}`);
|
|
88
|
+
}
|
|
89
|
+
if (workItem.url) {
|
|
90
|
+
metadata.push(`- **URL:** ${workItem.url}`);
|
|
91
|
+
}
|
|
92
|
+
lines.push(metadata.join("\n"));
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
}
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Run Schedule
|
|
97
|
+
// =============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Execute a triggered schedule
|
|
100
|
+
*
|
|
101
|
+
* This function handles the complete lifecycle of a scheduled execution:
|
|
102
|
+
* 1. Updates schedule state to 'running'
|
|
103
|
+
* 2. Fetches work item from work source (if configured)
|
|
104
|
+
* 3. Builds the prompt from schedule config and work item
|
|
105
|
+
* 4. Invokes the JobExecutor to run the agent
|
|
106
|
+
* 5. Reports outcome to work source (if applicable)
|
|
107
|
+
* 6. Updates schedule state with last_run_at and next_run_at
|
|
108
|
+
*
|
|
109
|
+
* @param options - Options for running the schedule
|
|
110
|
+
* @returns Result of the schedule execution
|
|
111
|
+
*
|
|
112
|
+
* @example Basic usage
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const result = await runSchedule({
|
|
115
|
+
* agent: resolvedAgent,
|
|
116
|
+
* scheduleName: 'hourly',
|
|
117
|
+
* schedule: { type: 'interval', interval: '1h', prompt: 'Check status' },
|
|
118
|
+
* scheduleState: { status: 'idle', last_run_at: null },
|
|
119
|
+
* stateDir: '.herdctl',
|
|
120
|
+
* sdkQuery: query,
|
|
121
|
+
* });
|
|
122
|
+
*
|
|
123
|
+
* console.log(`Job ${result.jobId} completed: ${result.success}`);
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* @example With work source
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const result = await runSchedule({
|
|
129
|
+
* agent: resolvedAgent,
|
|
130
|
+
* scheduleName: 'issue-processor',
|
|
131
|
+
* schedule: {
|
|
132
|
+
* type: 'interval',
|
|
133
|
+
* interval: '5m',
|
|
134
|
+
* prompt: 'Process this GitHub issue:',
|
|
135
|
+
* work_source: { type: 'github', owner: 'org', repo: 'repo' }
|
|
136
|
+
* },
|
|
137
|
+
* scheduleState: { status: 'idle', last_run_at: null },
|
|
138
|
+
* stateDir: '.herdctl',
|
|
139
|
+
* sdkQuery: query,
|
|
140
|
+
* workSourceManager: manager,
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* if (result.workItem) {
|
|
144
|
+
* console.log(`Processed work item: ${result.workItem.title}`);
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export async function runSchedule(options) {
|
|
149
|
+
const { agent, scheduleName, schedule, stateDir, sdkQuery, workSourceManager, logger = defaultLogger, executorOptions, } = options;
|
|
150
|
+
const stateLogger = { warn: logger.warn };
|
|
151
|
+
logger.info(`Running schedule ${agent.name}/${scheduleName}`);
|
|
152
|
+
// Step 1: Update schedule state to 'running'
|
|
153
|
+
await updateScheduleState(stateDir, agent.name, scheduleName, {
|
|
154
|
+
status: "running",
|
|
155
|
+
last_run_at: new Date().toISOString(),
|
|
156
|
+
}, { logger: stateLogger });
|
|
157
|
+
let workItem;
|
|
158
|
+
let processedWorkItem = false;
|
|
159
|
+
try {
|
|
160
|
+
// Step 2: Fetch work item if schedule has work_source configured
|
|
161
|
+
if (schedule.work_source && workSourceManager) {
|
|
162
|
+
logger.debug(`Fetching work item for ${agent.name}/${scheduleName} from ${schedule.work_source.type}`);
|
|
163
|
+
const workResult = await workSourceManager.getNextWorkItem(agent, {
|
|
164
|
+
autoClaim: true,
|
|
165
|
+
});
|
|
166
|
+
if (workResult.item && workResult.claimed) {
|
|
167
|
+
workItem = workResult.item;
|
|
168
|
+
processedWorkItem = true;
|
|
169
|
+
logger.info(`Claimed work item ${workItem.id}: ${workItem.title}`);
|
|
170
|
+
}
|
|
171
|
+
else if (workResult.item && !workResult.claimed) {
|
|
172
|
+
// Work item found but claim failed (race condition)
|
|
173
|
+
logger.warn(`Work item ${workResult.item.id} found but claim failed: ${workResult.claimResult?.reason}`);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// No work available
|
|
177
|
+
logger.debug(`No work items available for ${agent.name}/${scheduleName}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Step 3: Build the prompt
|
|
181
|
+
const prompt = buildSchedulePrompt(schedule, workItem);
|
|
182
|
+
// Step 4: Build trigger metadata
|
|
183
|
+
const triggerMetadata = {
|
|
184
|
+
triggerType: "interval",
|
|
185
|
+
schedule: scheduleName,
|
|
186
|
+
};
|
|
187
|
+
if (workItem) {
|
|
188
|
+
triggerMetadata.workItemId = workItem.id;
|
|
189
|
+
triggerMetadata.workItemTitle = workItem.title;
|
|
190
|
+
}
|
|
191
|
+
// Step 5: Execute the agent via JobExecutor
|
|
192
|
+
const executor = new JobExecutor(sdkQuery, executorOptions);
|
|
193
|
+
const runnerResult = await executor.execute({
|
|
194
|
+
agent,
|
|
195
|
+
prompt,
|
|
196
|
+
stateDir,
|
|
197
|
+
triggerType: "schedule",
|
|
198
|
+
schedule: scheduleName,
|
|
199
|
+
});
|
|
200
|
+
// Step 6: Report outcome to work source if we processed a work item
|
|
201
|
+
if (workItem && workSourceManager) {
|
|
202
|
+
const workResult = buildWorkResult(runnerResult);
|
|
203
|
+
try {
|
|
204
|
+
await workSourceManager.reportOutcome(workItem.id, workResult, {
|
|
205
|
+
agent,
|
|
206
|
+
});
|
|
207
|
+
logger.info(`Reported outcome for work item ${workItem.id}: ${workResult.outcome}`);
|
|
208
|
+
}
|
|
209
|
+
catch (reportError) {
|
|
210
|
+
logger.error(`Failed to report outcome for work item ${workItem.id}: ${reportError.message}`);
|
|
211
|
+
// Don't fail the overall run if reporting fails
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Step 7: Calculate next trigger time
|
|
215
|
+
const nextTrigger = schedule.interval
|
|
216
|
+
? calculateNextTrigger(new Date(), schedule.interval)
|
|
217
|
+
: null;
|
|
218
|
+
// Step 8: Update schedule state with success
|
|
219
|
+
await updateScheduleState(stateDir, agent.name, scheduleName, {
|
|
220
|
+
status: "idle",
|
|
221
|
+
next_run_at: nextTrigger?.toISOString() ?? null,
|
|
222
|
+
last_error: runnerResult.success ? null : runnerResult.error?.message,
|
|
223
|
+
}, { logger: stateLogger });
|
|
224
|
+
logger.info(`Completed schedule ${agent.name}/${scheduleName}: ${runnerResult.success ? "success" : "failed"}`);
|
|
225
|
+
return {
|
|
226
|
+
...runnerResult,
|
|
227
|
+
workItem,
|
|
228
|
+
processedWorkItem,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
233
|
+
logger.error(`Error running schedule ${agent.name}/${scheduleName}: ${errorMessage}`);
|
|
234
|
+
// Release work item if we claimed one and execution failed unexpectedly
|
|
235
|
+
if (workItem && workSourceManager) {
|
|
236
|
+
try {
|
|
237
|
+
await workSourceManager.releaseWorkItem(workItem.id, {
|
|
238
|
+
agent,
|
|
239
|
+
reason: `Unexpected error: ${errorMessage}`,
|
|
240
|
+
addComment: true,
|
|
241
|
+
});
|
|
242
|
+
logger.info(`Released work item ${workItem.id} due to error`);
|
|
243
|
+
}
|
|
244
|
+
catch (releaseError) {
|
|
245
|
+
logger.error(`Failed to release work item ${workItem.id}: ${releaseError.message}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Calculate next trigger time even on error
|
|
249
|
+
const nextTrigger = schedule.interval
|
|
250
|
+
? calculateNextTrigger(new Date(), schedule.interval)
|
|
251
|
+
: null;
|
|
252
|
+
// Update schedule state with error
|
|
253
|
+
await updateScheduleState(stateDir, agent.name, scheduleName, {
|
|
254
|
+
status: "idle",
|
|
255
|
+
next_run_at: nextTrigger?.toISOString() ?? null,
|
|
256
|
+
last_error: errorMessage,
|
|
257
|
+
}, { logger: stateLogger });
|
|
258
|
+
// Re-throw to let caller handle
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// =============================================================================
|
|
263
|
+
// Helper Functions
|
|
264
|
+
// =============================================================================
|
|
265
|
+
/**
|
|
266
|
+
* Build a WorkResult from a RunnerResult for reporting to work sources
|
|
267
|
+
*/
|
|
268
|
+
function buildWorkResult(runnerResult) {
|
|
269
|
+
const outcome = runnerResult.success ? "success" : "failure";
|
|
270
|
+
return {
|
|
271
|
+
outcome,
|
|
272
|
+
summary: runnerResult.summary ?? (runnerResult.success ? "Task completed successfully" : "Task failed"),
|
|
273
|
+
error: runnerResult.error?.message,
|
|
274
|
+
artifacts: runnerResult.jobId ? [`job:${runnerResult.jobId}`] : undefined,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=schedule-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-runner.js","sourceRoot":"","sources":["../../src/scheduler/schedule-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule state management
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for reading and updating schedule state within fleet state.
|
|
5
|
+
* Schedule state is stored per-agent in the `schedules` map within AgentState.
|
|
6
|
+
*/
|
|
7
|
+
import { type ScheduleState } from "../state/schemas/fleet-state.js";
|
|
8
|
+
/**
|
|
9
|
+
* Logger interface for warning messages
|
|
10
|
+
*/
|
|
11
|
+
export interface ScheduleStateLogger {
|
|
12
|
+
warn: (message: string) => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Options for schedule state operations
|
|
16
|
+
*/
|
|
17
|
+
export interface ScheduleStateOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Logger for warning messages
|
|
20
|
+
* Default: console.warn
|
|
21
|
+
*/
|
|
22
|
+
logger?: ScheduleStateLogger;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Partial updates for schedule state
|
|
26
|
+
*/
|
|
27
|
+
export type ScheduleStateUpdates = Partial<ScheduleState>;
|
|
28
|
+
/**
|
|
29
|
+
* Get the schedule state for a specific agent and schedule
|
|
30
|
+
*
|
|
31
|
+
* Returns default state if the agent or schedule doesn't exist.
|
|
32
|
+
*
|
|
33
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
34
|
+
* @param agentName - Name of the agent
|
|
35
|
+
* @param scheduleName - Name of the schedule
|
|
36
|
+
* @param options - Options including logger
|
|
37
|
+
* @returns The schedule state, or default state if not found
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const state = await getScheduleState('.herdctl', 'my-agent', 'hourly');
|
|
42
|
+
* console.log(state.last_run_at);
|
|
43
|
+
* console.log(state.next_run_at);
|
|
44
|
+
* console.log(state.status);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function getScheduleState(stateDir: string, agentName: string, scheduleName: string, options?: ScheduleStateOptions): Promise<ScheduleState>;
|
|
48
|
+
/**
|
|
49
|
+
* Update the schedule state for a specific agent and schedule
|
|
50
|
+
*
|
|
51
|
+
* This function:
|
|
52
|
+
* 1. Reads current fleet state
|
|
53
|
+
* 2. Applies partial updates to the specified schedule
|
|
54
|
+
* 3. Writes the updated state back atomically
|
|
55
|
+
*
|
|
56
|
+
* If the agent or schedule doesn't exist, it will be created.
|
|
57
|
+
*
|
|
58
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
59
|
+
* @param agentName - Name of the agent
|
|
60
|
+
* @param scheduleName - Name of the schedule
|
|
61
|
+
* @param updates - Partial ScheduleState updates to apply
|
|
62
|
+
* @param options - Options including logger
|
|
63
|
+
* @returns The updated ScheduleState
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* // Mark schedule as running
|
|
68
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
69
|
+
* status: 'running',
|
|
70
|
+
* last_run_at: new Date().toISOString(),
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* // Record error
|
|
74
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
75
|
+
* status: 'idle',
|
|
76
|
+
* last_error: 'Container exited with code 1',
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* // Clear error
|
|
80
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
81
|
+
* last_error: null,
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function updateScheduleState(stateDir: string, agentName: string, scheduleName: string, updates: ScheduleStateUpdates, options?: ScheduleStateOptions): Promise<ScheduleState>;
|
|
86
|
+
/**
|
|
87
|
+
* Get all schedule states for a specific agent
|
|
88
|
+
*
|
|
89
|
+
* Returns an empty object if the agent doesn't exist or has no schedules.
|
|
90
|
+
*
|
|
91
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
92
|
+
* @param agentName - Name of the agent
|
|
93
|
+
* @param options - Options including logger
|
|
94
|
+
* @returns Map of schedule names to their state
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const schedules = await getAgentScheduleStates('.herdctl', 'my-agent');
|
|
99
|
+
* for (const [name, state] of Object.entries(schedules)) {
|
|
100
|
+
* console.log(`${name}: ${state.status}, last run: ${state.last_run_at}`);
|
|
101
|
+
* }
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function getAgentScheduleStates(stateDir: string, agentName: string, options?: ScheduleStateOptions): Promise<Record<string, ScheduleState>>;
|
|
105
|
+
//# sourceMappingURL=schedule-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-state.d.ts","sourceRoot":"","sources":["../../src/scheduler/schedule-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,iCAAiC,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AASD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAS1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAexB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAUxC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule state management
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for reading and updating schedule state within fleet state.
|
|
5
|
+
* Schedule state is stored per-agent in the `schedules` map within AgentState.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { createDefaultScheduleState, } from "../state/schemas/fleet-state.js";
|
|
9
|
+
import { readFleetState, writeFleetState } from "../state/fleet-state.js";
|
|
10
|
+
import { STATE_FILE_NAME } from "../state/types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Default console logger
|
|
13
|
+
*/
|
|
14
|
+
const defaultLogger = {
|
|
15
|
+
warn: (message) => console.warn(`[herdctl] ${message}`),
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Get the state file path from a state directory
|
|
19
|
+
*/
|
|
20
|
+
function getStateFilePath(stateDir) {
|
|
21
|
+
return join(stateDir, STATE_FILE_NAME);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the schedule state for a specific agent and schedule
|
|
25
|
+
*
|
|
26
|
+
* Returns default state if the agent or schedule doesn't exist.
|
|
27
|
+
*
|
|
28
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
29
|
+
* @param agentName - Name of the agent
|
|
30
|
+
* @param scheduleName - Name of the schedule
|
|
31
|
+
* @param options - Options including logger
|
|
32
|
+
* @returns The schedule state, or default state if not found
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const state = await getScheduleState('.herdctl', 'my-agent', 'hourly');
|
|
37
|
+
* console.log(state.last_run_at);
|
|
38
|
+
* console.log(state.next_run_at);
|
|
39
|
+
* console.log(state.status);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export async function getScheduleState(stateDir, agentName, scheduleName, options = {}) {
|
|
43
|
+
const stateFilePath = getStateFilePath(stateDir);
|
|
44
|
+
const fleetState = await readFleetState(stateFilePath, options);
|
|
45
|
+
const agentState = fleetState.agents[agentName];
|
|
46
|
+
if (!agentState || !agentState.schedules) {
|
|
47
|
+
return createDefaultScheduleState();
|
|
48
|
+
}
|
|
49
|
+
const scheduleState = agentState.schedules[scheduleName];
|
|
50
|
+
if (!scheduleState) {
|
|
51
|
+
return createDefaultScheduleState();
|
|
52
|
+
}
|
|
53
|
+
return scheduleState;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Update the schedule state for a specific agent and schedule
|
|
57
|
+
*
|
|
58
|
+
* This function:
|
|
59
|
+
* 1. Reads current fleet state
|
|
60
|
+
* 2. Applies partial updates to the specified schedule
|
|
61
|
+
* 3. Writes the updated state back atomically
|
|
62
|
+
*
|
|
63
|
+
* If the agent or schedule doesn't exist, it will be created.
|
|
64
|
+
*
|
|
65
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
66
|
+
* @param agentName - Name of the agent
|
|
67
|
+
* @param scheduleName - Name of the schedule
|
|
68
|
+
* @param updates - Partial ScheduleState updates to apply
|
|
69
|
+
* @param options - Options including logger
|
|
70
|
+
* @returns The updated ScheduleState
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Mark schedule as running
|
|
75
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
76
|
+
* status: 'running',
|
|
77
|
+
* last_run_at: new Date().toISOString(),
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // Record error
|
|
81
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
82
|
+
* status: 'idle',
|
|
83
|
+
* last_error: 'Container exited with code 1',
|
|
84
|
+
* });
|
|
85
|
+
*
|
|
86
|
+
* // Clear error
|
|
87
|
+
* await updateScheduleState('.herdctl', 'my-agent', 'hourly', {
|
|
88
|
+
* last_error: null,
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export async function updateScheduleState(stateDir, agentName, scheduleName, updates, options = {}) {
|
|
93
|
+
const stateFilePath = getStateFilePath(stateDir);
|
|
94
|
+
const fleetState = await readFleetState(stateFilePath, options);
|
|
95
|
+
// Get or create agent state
|
|
96
|
+
const currentAgentState = fleetState.agents[agentName] ?? { status: "idle" };
|
|
97
|
+
// Get current schedules map or create empty one
|
|
98
|
+
const currentSchedules = currentAgentState.schedules ?? {};
|
|
99
|
+
// Get current schedule state or create default
|
|
100
|
+
const currentScheduleState = currentSchedules[scheduleName] ?? createDefaultScheduleState();
|
|
101
|
+
// Merge updates
|
|
102
|
+
const updatedScheduleState = {
|
|
103
|
+
...currentScheduleState,
|
|
104
|
+
...updates,
|
|
105
|
+
};
|
|
106
|
+
// Update the fleet state
|
|
107
|
+
const updatedFleetState = {
|
|
108
|
+
...fleetState,
|
|
109
|
+
agents: {
|
|
110
|
+
...fleetState.agents,
|
|
111
|
+
[agentName]: {
|
|
112
|
+
...currentAgentState,
|
|
113
|
+
schedules: {
|
|
114
|
+
...currentSchedules,
|
|
115
|
+
[scheduleName]: updatedScheduleState,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
// Write back
|
|
121
|
+
await writeFleetState(stateFilePath, updatedFleetState);
|
|
122
|
+
return updatedScheduleState;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get all schedule states for a specific agent
|
|
126
|
+
*
|
|
127
|
+
* Returns an empty object if the agent doesn't exist or has no schedules.
|
|
128
|
+
*
|
|
129
|
+
* @param stateDir - Path to the state directory (e.g., .herdctl)
|
|
130
|
+
* @param agentName - Name of the agent
|
|
131
|
+
* @param options - Options including logger
|
|
132
|
+
* @returns Map of schedule names to their state
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const schedules = await getAgentScheduleStates('.herdctl', 'my-agent');
|
|
137
|
+
* for (const [name, state] of Object.entries(schedules)) {
|
|
138
|
+
* console.log(`${name}: ${state.status}, last run: ${state.last_run_at}`);
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export async function getAgentScheduleStates(stateDir, agentName, options = {}) {
|
|
143
|
+
const stateFilePath = getStateFilePath(stateDir);
|
|
144
|
+
const fleetState = await readFleetState(stateFilePath, options);
|
|
145
|
+
const agentState = fleetState.agents[agentName];
|
|
146
|
+
if (!agentState || !agentState.schedules) {
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
return agentState.schedules;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=schedule-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-state.js","sourceRoot":"","sources":["../../src/scheduler/schedule-state.ts"],"names":[],"mappings":"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"}
|