@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,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Source Manager Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract between work sources and the scheduler/runner.
|
|
5
|
+
* The scheduler uses this interface to fetch work, report outcomes,
|
|
6
|
+
* and manage work source instances per agent.
|
|
7
|
+
*
|
|
8
|
+
* This module defines ONLY the interface - no scheduler logic is implemented here.
|
|
9
|
+
* The scheduler implementation will import and use this interface.
|
|
10
|
+
*
|
|
11
|
+
* @example Scheduler Usage Pattern
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // The scheduler will use the manager like this:
|
|
14
|
+
* const manager: WorkSourceManager = getWorkSourceManager();
|
|
15
|
+
*
|
|
16
|
+
* // 1. Get next available work for an agent
|
|
17
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
18
|
+
* if (!workItem) {
|
|
19
|
+
* // No work available, scheduler may check other agents or wait
|
|
20
|
+
* return;
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* // 2. Work item is already claimed by getNextWorkItem()
|
|
24
|
+
* // Build prompt from work item and execute job
|
|
25
|
+
* const prompt = buildPromptFromWorkItem(workItem);
|
|
26
|
+
* const result = await executeJob({ agent, prompt, ... });
|
|
27
|
+
*
|
|
28
|
+
* // 3. Report outcome to update external system
|
|
29
|
+
* await manager.reportOutcome(workItem.id, {
|
|
30
|
+
* outcome: result.success ? 'success' : 'failure',
|
|
31
|
+
* summary: result.summary ?? 'Job completed',
|
|
32
|
+
* error: result.error?.message,
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example Error Handling Pattern
|
|
37
|
+
* ```typescript
|
|
38
|
+
* try {
|
|
39
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
40
|
+
* // ... execute work ...
|
|
41
|
+
* await manager.reportOutcome(workItem.id, { outcome: 'success', summary: '...' });
|
|
42
|
+
* } catch (error) {
|
|
43
|
+
* // On unexpected error, release the work item back to available pool
|
|
44
|
+
* if (workItem) {
|
|
45
|
+
* await manager.releaseWorkItem(workItem.id, `Unexpected error: ${error.message}`);
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @example Multiple Agents Pattern
|
|
51
|
+
* ```typescript
|
|
52
|
+
* // Manager caches adapters per agent to avoid repeated instantiation
|
|
53
|
+
* for (const agent of agents) {
|
|
54
|
+
* // Each call uses cached adapter for the agent's work source
|
|
55
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
56
|
+
* // ...
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
import type { ResolvedAgent } from "../config/loader.js";
|
|
61
|
+
import type { WorkItem, WorkResult, ClaimResult, ReleaseResult, ReleaseOptions, FetchOptions } from "./types.js";
|
|
62
|
+
import type { WorkSourceAdapter } from "./index.js";
|
|
63
|
+
/**
|
|
64
|
+
* Options for fetching the next work item
|
|
65
|
+
*
|
|
66
|
+
* Allows the scheduler to customize work item selection beyond
|
|
67
|
+
* what's configured in the agent's work source.
|
|
68
|
+
*/
|
|
69
|
+
export interface GetNextWorkItemOptions {
|
|
70
|
+
/**
|
|
71
|
+
* Additional labels to filter by (combined with agent's configured labels)
|
|
72
|
+
*/
|
|
73
|
+
labels?: string[];
|
|
74
|
+
/**
|
|
75
|
+
* Whether to automatically claim the work item
|
|
76
|
+
* Defaults to true - the scheduler typically wants to claim immediately
|
|
77
|
+
*/
|
|
78
|
+
autoClaim?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Custom fetch options to pass to the adapter
|
|
81
|
+
* These override the default options for this specific fetch
|
|
82
|
+
*/
|
|
83
|
+
fetchOptions?: Partial<FetchOptions>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Result of getting the next work item
|
|
87
|
+
*
|
|
88
|
+
* Includes both the work item (if found) and claim status (if autoClaim was true).
|
|
89
|
+
* This allows the scheduler to handle various scenarios:
|
|
90
|
+
* - No work available (item is null)
|
|
91
|
+
* - Work found and claimed successfully
|
|
92
|
+
* - Work found but claim failed (race condition with another agent)
|
|
93
|
+
*/
|
|
94
|
+
export interface GetNextWorkItemResult {
|
|
95
|
+
/**
|
|
96
|
+
* The work item, or null if no work is available
|
|
97
|
+
*/
|
|
98
|
+
item: WorkItem | null;
|
|
99
|
+
/**
|
|
100
|
+
* Whether the work item was claimed
|
|
101
|
+
* Only relevant when autoClaim is true and item is not null
|
|
102
|
+
*/
|
|
103
|
+
claimed: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Claim result details if claiming was attempted
|
|
106
|
+
* Contains failure reason if claimed is false
|
|
107
|
+
*/
|
|
108
|
+
claimResult?: ClaimResult;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Options for releasing a work item
|
|
112
|
+
*/
|
|
113
|
+
export interface ReleaseWorkItemOptions extends ReleaseOptions {
|
|
114
|
+
/**
|
|
115
|
+
* The agent that claimed the work item
|
|
116
|
+
* Used to resolve the correct adapter for the release operation
|
|
117
|
+
*/
|
|
118
|
+
agent: ResolvedAgent;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Options for reporting work outcome
|
|
122
|
+
*/
|
|
123
|
+
export interface ReportOutcomeOptions {
|
|
124
|
+
/**
|
|
125
|
+
* The agent that processed the work item
|
|
126
|
+
* Used to resolve the correct adapter for the completion operation
|
|
127
|
+
*/
|
|
128
|
+
agent: ResolvedAgent;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Interface for managing work sources and coordinating with the scheduler
|
|
132
|
+
*
|
|
133
|
+
* The WorkSourceManager provides a high-level interface for the scheduler to:
|
|
134
|
+
* 1. Fetch available work items for agents
|
|
135
|
+
* 2. Claim work items to prevent race conditions
|
|
136
|
+
* 3. Report outcomes after job completion
|
|
137
|
+
* 4. Release work items on error/timeout
|
|
138
|
+
*
|
|
139
|
+
* The manager handles:
|
|
140
|
+
* - Work source adapter instantiation and caching per agent
|
|
141
|
+
* - Resolving work source configuration from agent configs
|
|
142
|
+
* - Coordinating claim/release lifecycle
|
|
143
|
+
*
|
|
144
|
+
* Implementation Notes for Scheduler Authors:
|
|
145
|
+
* - Call getNextWorkItem() with autoClaim=true (default) for atomic fetch+claim
|
|
146
|
+
* - Always call reportOutcome() or releaseWorkItem() after processing
|
|
147
|
+
* - The manager caches adapters, so repeated calls are efficient
|
|
148
|
+
* - If an agent has no work_source configured, getNextWorkItem returns { item: null }
|
|
149
|
+
*
|
|
150
|
+
* @example Basic Scheduler Loop
|
|
151
|
+
* ```typescript
|
|
152
|
+
* async function processAgent(manager: WorkSourceManager, agent: ResolvedAgent) {
|
|
153
|
+
* // Check if we can run more instances
|
|
154
|
+
* if (activeJobs[agent.name] >= (agent.instances?.max_concurrent ?? 1)) {
|
|
155
|
+
* return; // Already at capacity
|
|
156
|
+
* }
|
|
157
|
+
*
|
|
158
|
+
* // Try to get work
|
|
159
|
+
* const { item, claimed, claimResult } = await manager.getNextWorkItem(agent);
|
|
160
|
+
*
|
|
161
|
+
* if (!item) {
|
|
162
|
+
* return; // No work available
|
|
163
|
+
* }
|
|
164
|
+
*
|
|
165
|
+
* if (!claimed) {
|
|
166
|
+
* // Someone else claimed it first (race condition)
|
|
167
|
+
* console.log(`Work ${item.id} claimed by another agent: ${claimResult?.reason}`);
|
|
168
|
+
* return;
|
|
169
|
+
* }
|
|
170
|
+
*
|
|
171
|
+
* // Execute the job
|
|
172
|
+
* try {
|
|
173
|
+
* const result = await executeJob(agent, item);
|
|
174
|
+
* await manager.reportOutcome(item.id, result, { agent });
|
|
175
|
+
* } catch (error) {
|
|
176
|
+
* await manager.releaseWorkItem(item.id, {
|
|
177
|
+
* agent,
|
|
178
|
+
* reason: error.message,
|
|
179
|
+
* addComment: true,
|
|
180
|
+
* });
|
|
181
|
+
* }
|
|
182
|
+
* }
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
export interface WorkSourceManager {
|
|
186
|
+
/**
|
|
187
|
+
* Get the next available work item for an agent
|
|
188
|
+
*
|
|
189
|
+
* Fetches the highest priority available work item from the agent's
|
|
190
|
+
* configured work source. By default, also claims the item atomically
|
|
191
|
+
* to prevent race conditions with other agents.
|
|
192
|
+
*
|
|
193
|
+
* @param agent - The resolved agent configuration
|
|
194
|
+
* @param options - Options for fetching and claiming
|
|
195
|
+
* @returns Result containing the work item (if any) and claim status
|
|
196
|
+
*
|
|
197
|
+
* @remarks
|
|
198
|
+
* - Returns { item: null, claimed: false } if agent has no work_source
|
|
199
|
+
* - Returns { item: null, claimed: false } if no work is available
|
|
200
|
+
* - With autoClaim=true, claimed=false means another agent claimed it first
|
|
201
|
+
* - The scheduler should handle claim failures by retrying or moving on
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* const result = await manager.getNextWorkItem(agent);
|
|
206
|
+
*
|
|
207
|
+
* if (!result.item) {
|
|
208
|
+
* console.log('No work available for agent:', agent.name);
|
|
209
|
+
* return;
|
|
210
|
+
* }
|
|
211
|
+
*
|
|
212
|
+
* if (!result.claimed) {
|
|
213
|
+
* console.log('Work was claimed by another agent');
|
|
214
|
+
* return;
|
|
215
|
+
* }
|
|
216
|
+
*
|
|
217
|
+
* // Safe to process the work item
|
|
218
|
+
* console.log('Processing:', result.item.title);
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
getNextWorkItem(agent: ResolvedAgent, options?: GetNextWorkItemOptions): Promise<GetNextWorkItemResult>;
|
|
222
|
+
/**
|
|
223
|
+
* Report the outcome of processing a work item
|
|
224
|
+
*
|
|
225
|
+
* Updates the external system (GitHub, Linear, etc.) with the job result.
|
|
226
|
+
* This typically involves:
|
|
227
|
+
* - Adding a comment with the summary
|
|
228
|
+
* - Closing the issue/task if successful
|
|
229
|
+
* - Removing in-progress labels
|
|
230
|
+
* - Adding completion labels
|
|
231
|
+
*
|
|
232
|
+
* @param taskId - The work item ID (from WorkItem.id)
|
|
233
|
+
* @param result - The outcome of the work
|
|
234
|
+
* @param options - Options including the agent that processed the item
|
|
235
|
+
*
|
|
236
|
+
* @remarks
|
|
237
|
+
* - Must be called after job completion (success or failure)
|
|
238
|
+
* - For failures, use result.outcome='failure' and include result.error
|
|
239
|
+
* - The external system behavior depends on the adapter implementation
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* // Success case
|
|
244
|
+
* await manager.reportOutcome(
|
|
245
|
+
* workItem.id,
|
|
246
|
+
* {
|
|
247
|
+
* outcome: 'success',
|
|
248
|
+
* summary: 'Fixed the authentication bug',
|
|
249
|
+
* details: 'Updated the JWT validation logic...',
|
|
250
|
+
* artifacts: ['https://github.com/org/repo/pull/123'],
|
|
251
|
+
* },
|
|
252
|
+
* { agent }
|
|
253
|
+
* );
|
|
254
|
+
*
|
|
255
|
+
* // Failure case
|
|
256
|
+
* await manager.reportOutcome(
|
|
257
|
+
* workItem.id,
|
|
258
|
+
* {
|
|
259
|
+
* outcome: 'failure',
|
|
260
|
+
* summary: 'Unable to reproduce the issue',
|
|
261
|
+
* error: 'Tests pass on all environments',
|
|
262
|
+
* },
|
|
263
|
+
* { agent }
|
|
264
|
+
* );
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
reportOutcome(taskId: string, result: WorkResult, options: ReportOutcomeOptions): Promise<void>;
|
|
268
|
+
/**
|
|
269
|
+
* Release a claimed work item without completing it
|
|
270
|
+
*
|
|
271
|
+
* Returns the work item to the available pool so other agents can claim it.
|
|
272
|
+
* Use this when:
|
|
273
|
+
* - Job times out
|
|
274
|
+
* - Unexpected error prevents completion
|
|
275
|
+
* - Agent is shutting down mid-task
|
|
276
|
+
* - Manual intervention is needed
|
|
277
|
+
*
|
|
278
|
+
* @param taskId - The work item ID (from WorkItem.id)
|
|
279
|
+
* @param options - Release options including reason and agent
|
|
280
|
+
* @returns Result indicating if the release was successful
|
|
281
|
+
*
|
|
282
|
+
* @remarks
|
|
283
|
+
* - Always call this or reportOutcome after claiming work
|
|
284
|
+
* - If addComment is true, posts a comment explaining the release
|
|
285
|
+
* - The work item becomes available for other agents to claim
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```typescript
|
|
289
|
+
* // On timeout
|
|
290
|
+
* await manager.releaseWorkItem(workItem.id, {
|
|
291
|
+
* agent,
|
|
292
|
+
* reason: 'Job timed out after 30 minutes',
|
|
293
|
+
* addComment: true,
|
|
294
|
+
* });
|
|
295
|
+
*
|
|
296
|
+
* // On error
|
|
297
|
+
* await manager.releaseWorkItem(workItem.id, {
|
|
298
|
+
* agent,
|
|
299
|
+
* reason: `Unexpected error: ${error.message}`,
|
|
300
|
+
* addComment: true,
|
|
301
|
+
* });
|
|
302
|
+
* ```
|
|
303
|
+
*/
|
|
304
|
+
releaseWorkItem(taskId: string, options: ReleaseWorkItemOptions): Promise<ReleaseResult>;
|
|
305
|
+
/**
|
|
306
|
+
* Get the work source adapter for an agent
|
|
307
|
+
*
|
|
308
|
+
* Returns the cached adapter instance for the agent's work source,
|
|
309
|
+
* or null if the agent has no work source configured.
|
|
310
|
+
*
|
|
311
|
+
* This is useful for:
|
|
312
|
+
* - Direct adapter operations not covered by the manager
|
|
313
|
+
* - Inspecting adapter state or configuration
|
|
314
|
+
* - Testing and debugging
|
|
315
|
+
*
|
|
316
|
+
* @param agent - The resolved agent configuration
|
|
317
|
+
* @returns The adapter instance or null
|
|
318
|
+
*
|
|
319
|
+
* @remarks
|
|
320
|
+
* - Adapters are cached per agent (by agent name + work source type)
|
|
321
|
+
* - Creating new adapters is cheap but caching improves consistency
|
|
322
|
+
* - The adapter is created lazily on first access
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```typescript
|
|
326
|
+
* const adapter = await manager.getAdapter(agent);
|
|
327
|
+
*
|
|
328
|
+
* if (!adapter) {
|
|
329
|
+
* console.log('Agent has no work source configured');
|
|
330
|
+
* return;
|
|
331
|
+
* }
|
|
332
|
+
*
|
|
333
|
+
* // Direct adapter operations
|
|
334
|
+
* const workItem = await adapter.getWork('github:12345');
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
getAdapter(agent: ResolvedAgent): Promise<WorkSourceAdapter | null>;
|
|
338
|
+
/**
|
|
339
|
+
* Clear the adapter cache
|
|
340
|
+
*
|
|
341
|
+
* Removes all cached adapter instances. Use this when:
|
|
342
|
+
* - Configuration has changed and adapters need to be recreated
|
|
343
|
+
* - Testing requires fresh adapter instances
|
|
344
|
+
* - Memory cleanup is needed
|
|
345
|
+
*
|
|
346
|
+
* @remarks
|
|
347
|
+
* - Subsequent getAdapter/getNextWorkItem calls will create new adapters
|
|
348
|
+
* - In-flight operations on old adapters are not affected
|
|
349
|
+
* - Does not affect external system state
|
|
350
|
+
*/
|
|
351
|
+
clearCache(): void;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Factory function for creating WorkSourceManager instances
|
|
355
|
+
*
|
|
356
|
+
* The scheduler will use this to get a manager instance. The default
|
|
357
|
+
* implementation is provided by the work-sources module, but this can
|
|
358
|
+
* be customized for testing or advanced use cases.
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* // Default usage
|
|
363
|
+
* const manager = createWorkSourceManager();
|
|
364
|
+
*
|
|
365
|
+
* // With custom options (future extension point)
|
|
366
|
+
* const manager = createWorkSourceManager({ cache: customCache });
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
export type WorkSourceManagerFactory = () => WorkSourceManager;
|
|
370
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/work-sources/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEtB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D;;;OAGG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,eAAe,CACb,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAEpE;;;;;;;;;;;;OAYG;IACH,UAAU,IAAI,IAAI,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Source Manager Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract between work sources and the scheduler/runner.
|
|
5
|
+
* The scheduler uses this interface to fetch work, report outcomes,
|
|
6
|
+
* and manage work source instances per agent.
|
|
7
|
+
*
|
|
8
|
+
* This module defines ONLY the interface - no scheduler logic is implemented here.
|
|
9
|
+
* The scheduler implementation will import and use this interface.
|
|
10
|
+
*
|
|
11
|
+
* @example Scheduler Usage Pattern
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // The scheduler will use the manager like this:
|
|
14
|
+
* const manager: WorkSourceManager = getWorkSourceManager();
|
|
15
|
+
*
|
|
16
|
+
* // 1. Get next available work for an agent
|
|
17
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
18
|
+
* if (!workItem) {
|
|
19
|
+
* // No work available, scheduler may check other agents or wait
|
|
20
|
+
* return;
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* // 2. Work item is already claimed by getNextWorkItem()
|
|
24
|
+
* // Build prompt from work item and execute job
|
|
25
|
+
* const prompt = buildPromptFromWorkItem(workItem);
|
|
26
|
+
* const result = await executeJob({ agent, prompt, ... });
|
|
27
|
+
*
|
|
28
|
+
* // 3. Report outcome to update external system
|
|
29
|
+
* await manager.reportOutcome(workItem.id, {
|
|
30
|
+
* outcome: result.success ? 'success' : 'failure',
|
|
31
|
+
* summary: result.summary ?? 'Job completed',
|
|
32
|
+
* error: result.error?.message,
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example Error Handling Pattern
|
|
37
|
+
* ```typescript
|
|
38
|
+
* try {
|
|
39
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
40
|
+
* // ... execute work ...
|
|
41
|
+
* await manager.reportOutcome(workItem.id, { outcome: 'success', summary: '...' });
|
|
42
|
+
* } catch (error) {
|
|
43
|
+
* // On unexpected error, release the work item back to available pool
|
|
44
|
+
* if (workItem) {
|
|
45
|
+
* await manager.releaseWorkItem(workItem.id, `Unexpected error: ${error.message}`);
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @example Multiple Agents Pattern
|
|
51
|
+
* ```typescript
|
|
52
|
+
* // Manager caches adapters per agent to avoid repeated instantiation
|
|
53
|
+
* for (const agent of agents) {
|
|
54
|
+
* // Each call uses cached adapter for the agent's work source
|
|
55
|
+
* const workItem = await manager.getNextWorkItem(agent);
|
|
56
|
+
* // ...
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/work-sources/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Source Registry
|
|
3
|
+
*
|
|
4
|
+
* Provides a singleton registry for work source adapters.
|
|
5
|
+
* Allows registration of factory functions that create adapter instances
|
|
6
|
+
* based on configuration.
|
|
7
|
+
*/
|
|
8
|
+
import type { WorkSourceAdapter } from "./index.js";
|
|
9
|
+
import type { WorkSourceLabels } from "../config/schema.js";
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for a work source adapter
|
|
12
|
+
*
|
|
13
|
+
* This is a flexible configuration type that allows any work source type
|
|
14
|
+
* to be registered. For type-safe configuration of known types, use the
|
|
15
|
+
* specific config types (e.g., GitHubWorkSourceConfig).
|
|
16
|
+
*/
|
|
17
|
+
export interface WorkSourceConfig {
|
|
18
|
+
/** The type identifier for this work source (e.g., 'github', 'linear') */
|
|
19
|
+
type: string;
|
|
20
|
+
/** Label configuration for work item states */
|
|
21
|
+
labels?: WorkSourceLabels;
|
|
22
|
+
/** Whether to clean up in-progress labels on startup */
|
|
23
|
+
cleanup_in_progress?: boolean;
|
|
24
|
+
/** Additional adapter-specific configuration */
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Factory function that creates a work source adapter instance
|
|
29
|
+
*
|
|
30
|
+
* @param config - The configuration for the work source
|
|
31
|
+
* @returns A configured WorkSourceAdapter instance
|
|
32
|
+
*/
|
|
33
|
+
export type WorkSourceFactory = (config: WorkSourceConfig) => WorkSourceAdapter;
|
|
34
|
+
/**
|
|
35
|
+
* Register a work source adapter factory
|
|
36
|
+
*
|
|
37
|
+
* Registers a factory function that will be used to create adapter instances
|
|
38
|
+
* for the specified type. The factory is called when `getWorkSource()` is
|
|
39
|
+
* invoked with a matching type.
|
|
40
|
+
*
|
|
41
|
+
* @param type - The unique type identifier (e.g., 'github', 'linear')
|
|
42
|
+
* @param factory - Factory function that creates adapter instances
|
|
43
|
+
* @throws {DuplicateWorkSourceError} If the type is already registered
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* registerWorkSource('github', (config) => new GitHubAdapter(config));
|
|
48
|
+
* registerWorkSource('linear', (config) => new LinearAdapter(config));
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function registerWorkSource(type: string, factory: WorkSourceFactory): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get a configured work source adapter instance
|
|
54
|
+
*
|
|
55
|
+
* Looks up the factory for the specified type and calls it with the
|
|
56
|
+
* provided configuration to create an adapter instance.
|
|
57
|
+
*
|
|
58
|
+
* @param config - The work source configuration (must include `type`)
|
|
59
|
+
* @returns A configured WorkSourceAdapter instance
|
|
60
|
+
* @throws {UnknownWorkSourceError} If no factory is registered for the type
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const adapter = getWorkSource({
|
|
65
|
+
* type: 'github',
|
|
66
|
+
* labels: { ready: 'agent-ready', in_progress: 'agent-working' }
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* const { items } = await adapter.fetchAvailableWork();
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function getWorkSource(config: WorkSourceConfig): WorkSourceAdapter;
|
|
73
|
+
/**
|
|
74
|
+
* Get a list of all registered work source types
|
|
75
|
+
*
|
|
76
|
+
* @returns Array of registered type identifiers
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const types = getRegisteredTypes();
|
|
81
|
+
* // ['github', 'linear', 'jira']
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare function getRegisteredTypes(): string[];
|
|
85
|
+
/**
|
|
86
|
+
* Check if a work source type is registered
|
|
87
|
+
*
|
|
88
|
+
* @param type - The type identifier to check
|
|
89
|
+
* @returns True if the type is registered
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* if (isWorkSourceRegistered('github')) {
|
|
94
|
+
* const adapter = getWorkSource({ type: 'github' });
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function isWorkSourceRegistered(type: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Unregister a work source adapter factory
|
|
101
|
+
*
|
|
102
|
+
* Removes the factory for the specified type. Primarily useful for testing.
|
|
103
|
+
*
|
|
104
|
+
* @param type - The type identifier to unregister
|
|
105
|
+
* @returns True if the type was registered and removed, false otherwise
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* // In tests
|
|
110
|
+
* unregisterWorkSource('github');
|
|
111
|
+
* registerWorkSource('github', mockFactory);
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function unregisterWorkSource(type: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Clear all registered work source factories
|
|
117
|
+
*
|
|
118
|
+
* Removes all registered factories. Primarily useful for testing.
|
|
119
|
+
* Note: This will also clear built-in adapters.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* // In test setup/teardown
|
|
124
|
+
* clearWorkSourceRegistry();
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export declare function clearWorkSourceRegistry(): void;
|
|
128
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/work-sources/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gDAAgD;IAChD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;AAehF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAKN;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAQzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|