@vercel/factory 0.0.14 → 0.0.16
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/CHANGELOG.md +356 -0
- package/README.md +96 -2
- package/dist/agent-routes.d.mts +113 -0
- package/dist/agent-routes.mjs +91 -0
- package/dist/agent-routes.mjs.map +1 -0
- package/dist/api-contracts.d.mts +1768 -0
- package/dist/api-contracts.mjs +119 -0
- package/dist/api-contracts.mjs.map +1 -0
- package/dist/api-images.d.mts +30 -0
- package/dist/api-images.mjs +28 -0
- package/dist/api-images.mjs.map +1 -0
- package/dist/api-task-graph.mjs +57 -0
- package/dist/api-task-graph.mjs.map +1 -0
- package/dist/api.d.mts +111 -216
- package/dist/api.mjs +1063 -99
- package/dist/api.mjs.map +1 -1
- package/dist/approval-access.d.mts +39 -0
- package/dist/approval-access.mjs +62 -0
- package/dist/approval-access.mjs.map +1 -0
- package/dist/approval-contracts.d.mts +698 -0
- package/dist/approval-contracts.mjs +27 -0
- package/dist/approval-contracts.mjs.map +1 -0
- package/dist/approval.d.mts +49 -0
- package/dist/approval.mjs +39 -0
- package/dist/approval.mjs.map +1 -0
- package/dist/blob/artifacts.d.mts +37 -0
- package/dist/blob/artifacts.mjs +45 -0
- package/dist/blob/artifacts.mjs.map +1 -0
- package/dist/blob/index.d.mts +84 -12
- package/dist/blob/index.mjs +179 -45
- package/dist/blob/index.mjs.map +1 -1
- package/dist/budget.d.mts +115 -0
- package/dist/budget.mjs +147 -0
- package/dist/budget.mjs.map +1 -0
- package/dist/budgets.d.mts +4 -0
- package/dist/budgets.mjs +4 -0
- package/dist/build-factory.d.mts +7 -4
- package/dist/build-factory.mjs +2 -1
- package/dist/build-factory.mjs.map +1 -1
- package/dist/change-verification/brief.d.mts +9 -0
- package/dist/change-verification/brief.mjs +13 -0
- package/dist/change-verification/brief.mjs.map +1 -0
- package/dist/change-verification/dispatch.d.mts +37 -0
- package/dist/change-verification/dispatch.mjs +83 -0
- package/dist/change-verification/dispatch.mjs.map +1 -0
- package/dist/change-verification/eve-tool.d.mts +61 -0
- package/dist/change-verification/eve-tool.mjs +89 -0
- package/dist/change-verification/eve-tool.mjs.map +1 -0
- package/dist/change-verification/result.mjs +130 -0
- package/dist/change-verification/result.mjs.map +1 -0
- package/dist/changes/eve-record-change.d.mts +56 -0
- package/dist/changes/eve-record-change.mjs +131 -0
- package/dist/changes/eve-record-change.mjs.map +1 -0
- package/dist/changes/presentation.d.mts +14 -0
- package/dist/changes.d.mts +24 -0
- package/dist/changes.mjs +29 -0
- package/dist/changes.mjs.map +1 -0
- package/dist/client-events.d.mts +25 -0
- package/dist/client-events.mjs +45 -0
- package/dist/client-events.mjs.map +1 -0
- package/dist/client-stream.d.mts +28 -0
- package/dist/client-stream.mjs +210 -0
- package/dist/client-stream.mjs.map +1 -0
- package/dist/client-transcript.d.mts +41 -0
- package/dist/client-transcript.mjs +233 -0
- package/dist/client-transcript.mjs.map +1 -0
- package/dist/client.d.mts +343 -0
- package/dist/client.mjs +366 -0
- package/dist/client.mjs.map +1 -0
- package/dist/code-review/contracts.d.mts +27 -0
- package/dist/code-review/eve-post-review.d.mts +70 -0
- package/dist/code-review/eve-post-review.mjs +195 -0
- package/dist/code-review/eve-post-review.mjs.map +1 -0
- package/dist/code-review/eve-review-comments.d.mts +75 -0
- package/dist/code-review/eve-review-comments.mjs +193 -0
- package/dist/code-review/eve-review-comments.mjs.map +1 -0
- package/dist/code-review/github-contracts.d.mts +10 -0
- package/dist/code-review/github-reporter.d.mts +46 -0
- package/dist/code-review/github-reporter.mjs +262 -0
- package/dist/code-review/github-reporter.mjs.map +1 -0
- package/dist/code-review/preparation.d.mts +34 -0
- package/dist/code-review/preparation.mjs +23 -0
- package/dist/code-review/preparation.mjs.map +1 -0
- package/dist/code-review/stall.d.mts +17 -0
- package/dist/code-review/stall.mjs +30 -0
- package/dist/code-review/stall.mjs.map +1 -0
- package/dist/code-review.d.mts +7 -0
- package/dist/code-review.mjs +5 -0
- package/dist/communication.d.mts +9 -0
- package/dist/communication.mjs +9 -0
- package/dist/connectors/github.d.mts +26 -0
- package/dist/connectors/github.mjs +55 -0
- package/dist/connectors/github.mjs.map +1 -0
- package/dist/connectors/index.d.mts +35 -3
- package/dist/connectors/index.mjs +3 -52
- package/dist/connectors/index.mjs.map +1 -1
- package/dist/connectors/outbox.d.mts +34 -0
- package/dist/connectors/outbox.mjs +50 -0
- package/dist/connectors/outbox.mjs.map +1 -0
- package/dist/connectors/slack-approval-blocks.mjs +136 -0
- package/dist/connectors/slack-approval-blocks.mjs.map +1 -0
- package/dist/connectors/slack-approvals.d.mts +29 -0
- package/dist/connectors/slack-approvals.mjs +346 -0
- package/dist/connectors/slack-approvals.mjs.map +1 -0
- package/dist/connectors/slack.d.mts +35 -52
- package/dist/connectors/slack.mjs +13 -85
- package/dist/connectors/slack.mjs.map +1 -1
- package/dist/deepsec/eve-tool.d.mts +110 -0
- package/dist/deepsec/eve-tool.mjs +166 -0
- package/dist/deepsec/eve-tool.mjs.map +1 -0
- package/dist/deepsec/finding.d.mts +84 -0
- package/dist/deepsec/finding.mjs +56 -0
- package/dist/deepsec/finding.mjs.map +1 -0
- package/dist/deepsec.d.mts +3 -0
- package/dist/delivery-metrics/metrics.d.mts +93 -0
- package/dist/delivery-metrics/metrics.mjs +200 -0
- package/dist/delivery-metrics/metrics.mjs.map +1 -0
- package/dist/delivery-metrics.d.mts +2 -0
- package/dist/delivery-metrics.mjs +2 -0
- package/dist/dispatch.d.mts +152 -0
- package/dist/dispatch.mjs +199 -0
- package/dist/dispatch.mjs.map +1 -0
- package/dist/errors.d.mts +15 -0
- package/dist/errors.mjs +38 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/eve/index.d.mts +209 -1277
- package/dist/eve/index.mjs +312 -1073
- package/dist/eve/index.mjs.map +1 -1
- package/dist/eve/invoke.d.mts +144 -0
- package/dist/eve/invoke.mjs +254 -0
- package/dist/eve/invoke.mjs.map +1 -0
- package/dist/eve/session-client.d.mts +186 -0
- package/dist/eve/session-client.mjs +245 -0
- package/dist/eve/session-client.mjs.map +1 -0
- package/dist/eve/task-execution.d.mts +380 -0
- package/dist/eve/task-execution.mjs +73 -0
- package/dist/eve/task-execution.mjs.map +1 -0
- package/dist/eve/task-session.d.mts +129 -0
- package/dist/eve/task-session.mjs +245 -0
- package/dist/eve/task-session.mjs.map +1 -0
- package/dist/eve/transcript.d.mts +37 -0
- package/dist/eve/transcript.mjs +69 -0
- package/dist/eve/transcript.mjs.map +1 -0
- package/dist/execution-public.d.mts +8 -0
- package/dist/execution-public.mjs +7 -0
- package/dist/execution.d.mts +183 -0
- package/dist/execution.mjs +223 -0
- package/dist/execution.mjs.map +1 -0
- package/dist/finding-remediation/admission.d.mts +53 -0
- package/dist/finding-remediation/admission.mjs +90 -0
- package/dist/finding-remediation/admission.mjs.map +1 -0
- package/dist/finding-remediation/brief.d.mts +14 -0
- package/dist/finding-remediation/brief.mjs +25 -0
- package/dist/finding-remediation/brief.mjs.map +1 -0
- package/dist/finding-remediation/eve-tool.d.mts +29 -0
- package/dist/finding-remediation/eve-tool.mjs +34 -0
- package/dist/finding-remediation/eve-tool.mjs.map +1 -0
- package/dist/findings/fingerprint.d.mts +14 -0
- package/dist/findings/fingerprint.mjs +28 -0
- package/dist/findings/fingerprint.mjs.map +1 -0
- package/dist/findings.d.mts +7 -0
- package/dist/findings.mjs +6 -0
- package/dist/github-app.d.mts +54 -0
- package/dist/github-app.mjs +121 -0
- package/dist/github-app.mjs.map +1 -0
- package/dist/github-publication.d.mts +199 -0
- package/dist/github-publication.mjs +442 -0
- package/dist/github-publication.mjs.map +1 -0
- package/dist/github-transfer.d.mts +81 -0
- package/dist/github-transfer.mjs +273 -0
- package/dist/github-transfer.mjs.map +1 -0
- package/dist/github.d.mts +446 -2
- package/dist/github.mjs +357 -56
- package/dist/github.mjs.map +1 -1
- package/dist/image-input.d.mts +51 -0
- package/dist/image-input.mjs +63 -0
- package/dist/image-input.mjs.map +1 -0
- package/dist/inbox-activity.d.mts +53 -0
- package/dist/inbox-activity.mjs +41 -0
- package/dist/inbox-activity.mjs.map +1 -0
- package/dist/index.d.mts +16 -484
- package/dist/index.mjs +15 -522
- package/dist/intake-contracts.d.mts +55 -0
- package/dist/intake-contracts.mjs +33 -0
- package/dist/intake-contracts.mjs.map +1 -0
- package/dist/integrations/deepsec.d.mts +5 -0
- package/dist/integrations/deepsec.mjs +3 -0
- package/dist/integrations/github.d.mts +11 -0
- package/dist/integrations/github.mjs +9 -0
- package/dist/integrations/slack.d.mts +5 -0
- package/dist/integrations/slack.mjs +5 -0
- package/dist/integrations/vercel.d.mts +5 -0
- package/dist/integrations/vercel.mjs +4 -0
- package/dist/merge-resolution/contracts.d.mts +17 -0
- package/dist/merge-resolution/contracts.mjs +19 -0
- package/dist/merge-resolution/contracts.mjs.map +1 -0
- package/dist/merge-resolution/eve-tools.d.mts +47 -0
- package/dist/merge-resolution/eve-tools.mjs +122 -0
- package/dist/merge-resolution/eve-tools.mjs.map +1 -0
- package/dist/model-settings.d.mts +41 -0
- package/dist/model-settings.mjs +35 -0
- package/dist/model-settings.mjs.map +1 -0
- package/dist/multi-repository-changes/coordination.d.mts +49 -0
- package/dist/multi-repository-changes/coordination.mjs +115 -0
- package/dist/multi-repository-changes/coordination.mjs.map +1 -0
- package/dist/planning/cancellation.mjs +82 -0
- package/dist/planning/cancellation.mjs.map +1 -0
- package/dist/planning/configuration.d.mts +23 -0
- package/dist/planning/configuration.mjs +56 -0
- package/dist/planning/configuration.mjs.map +1 -0
- package/dist/planning/contracts.d.mts +136 -0
- package/dist/planning/contracts.mjs +42 -0
- package/dist/planning/contracts.mjs.map +1 -0
- package/dist/planning/dependencies.mjs +44 -0
- package/dist/planning/dependencies.mjs.map +1 -0
- package/dist/planning/effects.mjs +122 -0
- package/dist/planning/effects.mjs.map +1 -0
- package/dist/planning/reconcile.mjs +279 -0
- package/dist/planning/reconcile.mjs.map +1 -0
- package/dist/planning/runtime.d.mts +27 -0
- package/dist/planning/runtime.mjs +25 -0
- package/dist/planning/runtime.mjs.map +1 -0
- package/dist/planning/state.mjs +92 -0
- package/dist/planning/state.mjs.map +1 -0
- package/dist/planning/turns.mjs +262 -0
- package/dist/planning/turns.mjs.map +1 -0
- package/dist/planning/validation.mjs +106 -0
- package/dist/planning/validation.mjs.map +1 -0
- package/dist/postgres/index.d.mts +48 -1
- package/dist/postgres/index.mjs +45 -3
- package/dist/postgres/index.mjs.map +1 -1
- package/dist/presets/software-development/approval.d.mts +14 -0
- package/dist/presets/software-development/approval.mjs +21 -0
- package/dist/presets/software-development/approval.mjs.map +1 -0
- package/dist/presets/software-development/deepsec-brief.d.mts +8 -0
- package/dist/presets/software-development/deepsec-brief.mjs +14 -0
- package/dist/presets/software-development/deepsec-brief.mjs.map +1 -0
- package/dist/presets/software-development/dispatch.d.mts +56 -0
- package/dist/presets/software-development/dispatch.mjs +67 -0
- package/dist/presets/software-development/dispatch.mjs.map +1 -0
- package/dist/presets/software-development/eve-delegation-policy.d.mts +7 -0
- package/dist/presets/software-development/eve-delegation-policy.mjs +34 -0
- package/dist/presets/software-development/eve-delegation-policy.mjs.map +1 -0
- package/dist/presets/software-development/eve.d.mts +18 -0
- package/dist/presets/software-development/eve.mjs +19 -0
- package/dist/presets/software-development/eve.mjs.map +1 -0
- package/dist/presets/software-development/finish-task-policy.d.mts +7 -0
- package/dist/presets/software-development/finish-task-policy.mjs +9 -0
- package/dist/presets/software-development/finish-task-policy.mjs.map +1 -0
- package/dist/presets/software-development/recovery.d.mts +32 -0
- package/dist/presets/software-development/recovery.mjs +120 -0
- package/dist/presets/software-development/recovery.mjs.map +1 -0
- package/dist/presets/software-development/task-communication.d.mts +24 -0
- package/dist/presets/software-development/task-communication.mjs +157 -0
- package/dist/presets/software-development/task-communication.mjs.map +1 -0
- package/dist/presets/software-development.d.mts +10 -0
- package/dist/presets/software-development.mjs +9 -0
- package/dist/pull-requests/contracts.d.mts +72 -0
- package/dist/pull-requests/eve-fetch.d.mts +57 -0
- package/dist/pull-requests/eve-fetch.mjs +151 -0
- package/dist/pull-requests/eve-fetch.mjs.map +1 -0
- package/dist/pull-requests/github-label-manager.d.mts +27 -0
- package/dist/pull-requests/github-label-manager.mjs +40 -0
- package/dist/pull-requests/github-label-manager.mjs.map +1 -0
- package/dist/pull-requests/github-publisher.d.mts +67 -0
- package/dist/pull-requests/github-publisher.mjs +405 -0
- package/dist/pull-requests/github-publisher.mjs.map +1 -0
- package/dist/pull-requests.d.mts +6 -0
- package/dist/pull-requests.mjs +4 -0
- package/dist/receipts.d.mts +4 -0
- package/dist/receipts.mjs +3 -0
- package/dist/repositories.d.mts +18 -0
- package/dist/repositories.mjs +33 -0
- package/dist/repositories.mjs.map +1 -0
- package/dist/sandbox/command.d.mts +18 -0
- package/dist/sandbox/execution-abort.d.mts +16 -0
- package/dist/sandbox/execution-abort.mjs +49 -0
- package/dist/sandbox/execution-abort.mjs.map +1 -0
- package/dist/sandbox/execution-environment.d.mts +25 -0
- package/dist/sandbox/execution-run-ledger.d.mts +115 -0
- package/dist/sandbox/execution-run-ledger.mjs +209 -0
- package/dist/sandbox/execution-run-ledger.mjs.map +1 -0
- package/dist/sandbox/execution.d.mts +54 -0
- package/dist/sandbox/execution.mjs +228 -0
- package/dist/sandbox/execution.mjs.map +1 -0
- package/dist/sandbox/harness-runner.d.mts +79 -0
- package/dist/sandbox/harness-runner.mjs +162 -0
- package/dist/sandbox/harness-runner.mjs.map +1 -0
- package/dist/sandbox/index.d.mts +10 -0
- package/dist/sandbox/index.mjs +7 -0
- package/dist/sandbox/task-environment.d.mts +50 -0
- package/dist/sandbox/task-environment.mjs +140 -0
- package/dist/sandbox/task-environment.mjs.map +1 -0
- package/dist/sandbox/workspace.d.mts +29 -0
- package/dist/sandbox/workspace.mjs +28 -0
- package/dist/sandbox/workspace.mjs.map +1 -0
- package/dist/schema/agent-route.d.mts +40 -0
- package/dist/schema/agent-route.mjs +33 -0
- package/dist/schema/agent-route.mjs.map +1 -0
- package/dist/schema/answer.d.mts +23 -0
- package/dist/schema/answer.mjs +21 -0
- package/dist/schema/answer.mjs.map +1 -0
- package/dist/schema/budget.d.mts +38 -0
- package/dist/schema/budget.mjs +30 -0
- package/dist/schema/budget.mjs.map +1 -0
- package/dist/schema/catalog.mjs +72 -0
- package/dist/schema/catalog.mjs.map +1 -0
- package/dist/schema/change.d.mts +117 -0
- package/dist/schema/change.mjs +68 -0
- package/dist/schema/change.mjs.map +1 -0
- package/dist/schema/common.d.mts +33 -0
- package/dist/{id-BLIkCVue.mjs → schema/common.mjs} +7 -16
- package/dist/schema/common.mjs.map +1 -0
- package/dist/schema/communication.d.mts +52 -0
- package/dist/{communication-Kd9nU5RP.mjs → schema/communication.mjs} +8 -3
- package/dist/schema/communication.mjs.map +1 -0
- package/dist/schema/execution.d.mts +101 -0
- package/dist/schema/execution.mjs +86 -0
- package/dist/schema/execution.mjs.map +1 -0
- package/dist/schema/factory-config.d.mts +122 -0
- package/dist/schema/factory-config.mjs +90 -0
- package/dist/schema/factory-config.mjs.map +1 -0
- package/dist/schema/finding.d.mts +125 -0
- package/dist/schema/finding.mjs +67 -0
- package/dist/schema/finding.mjs.map +1 -0
- package/dist/schema/id.d.mts +43 -0
- package/dist/schema/id.mjs +32 -0
- package/dist/schema/id.mjs.map +1 -0
- package/dist/schema/outbox.d.mts +240 -0
- package/dist/schema/outbox.mjs +53 -0
- package/dist/schema/outbox.mjs.map +1 -0
- package/dist/schema/question-route.mjs +16 -0
- package/dist/schema/question-route.mjs.map +1 -0
- package/dist/schema/receipt.d.mts +81 -0
- package/dist/schema/receipt.mjs +94 -0
- package/dist/schema/receipt.mjs.map +1 -0
- package/dist/schema/repository.d.mts +30 -0
- package/dist/schema/repository.mjs +29 -0
- package/dist/schema/repository.mjs.map +1 -0
- package/dist/schema/session.d.mts +136 -0
- package/dist/schema/session.mjs +54 -0
- package/dist/schema/session.mjs.map +1 -0
- package/dist/schema/signal.d.mts +105 -0
- package/dist/schema/signal.mjs +81 -0
- package/dist/schema/signal.mjs.map +1 -0
- package/dist/schema/slack-pr-notifications.d.mts +12 -0
- package/dist/schema/slack-pr-notifications.mjs +11 -0
- package/dist/schema/slack-pr-notifications.mjs.map +1 -0
- package/dist/schema/stored-session.mjs +10 -0
- package/dist/schema/stored-session.mjs.map +1 -0
- package/dist/schema/stored-task.mjs +20 -0
- package/dist/schema/stored-task.mjs.map +1 -0
- package/dist/schema/task-effect.d.mts +39 -0
- package/dist/schema/task-effect.mjs +29 -0
- package/dist/schema/task-effect.mjs.map +1 -0
- package/dist/schema/task-graph.d.mts +3173 -0
- package/dist/schema/task-graph.mjs +97 -0
- package/dist/schema/task-graph.mjs.map +1 -0
- package/dist/schema/task-message.d.mts +254 -0
- package/dist/schema/task-message.mjs +189 -0
- package/dist/schema/task-message.mjs.map +1 -0
- package/dist/schema/task.d.mts +273 -0
- package/dist/schema/task.mjs +200 -0
- package/dist/schema/task.mjs.map +1 -0
- package/dist/schema/transcript.d.mts +176 -0
- package/dist/schema/transcript.mjs +87 -0
- package/dist/schema/transcript.mjs.map +1 -0
- package/dist/schema/transitions.d.mts +50 -0
- package/dist/schema/transitions.mjs +303 -0
- package/dist/schema/transitions.mjs.map +1 -0
- package/dist/schema/work.d.mts +150 -0
- package/dist/schema/work.mjs +102 -0
- package/dist/schema/work.mjs.map +1 -0
- package/dist/session-previews.d.mts +76 -0
- package/dist/session-previews.mjs +55 -0
- package/dist/session-previews.mjs.map +1 -0
- package/dist/session-review.d.mts +120 -0
- package/dist/session-review.mjs +79 -0
- package/dist/session-review.mjs.map +1 -0
- package/dist/signal-triage.d.mts +20 -0
- package/dist/signal-triage.mjs +85 -0
- package/dist/signal-triage.mjs.map +1 -0
- package/dist/signals.d.mts +20 -0
- package/dist/signals.mjs +19 -0
- package/dist/signals.mjs.map +1 -0
- package/dist/stall.d.mts +41 -0
- package/dist/stall.mjs +83 -0
- package/dist/stall.mjs.map +1 -0
- package/dist/storage.d.mts +4 -0
- package/dist/storage.mjs +4 -0
- package/dist/store/driver.d.mts +65 -0
- package/dist/store/driver.mjs +42 -0
- package/dist/store/driver.mjs.map +1 -0
- package/dist/store/engine.d.mts +683 -0
- package/dist/store/engine.mjs +2309 -0
- package/dist/store/engine.mjs.map +1 -0
- package/dist/store/memory.d.mts +24 -0
- package/dist/store/memory.mjs +69 -0
- package/dist/store/memory.mjs.map +1 -0
- package/dist/store/slack-pr-notifications.d.mts +44 -0
- package/dist/store/slack-pr-notifications.mjs +121 -0
- package/dist/store/slack-pr-notifications.mjs.map +1 -0
- package/dist/store/task-effects.d.mts +38 -0
- package/dist/store/task-effects.mjs +118 -0
- package/dist/store/task-effects.mjs.map +1 -0
- package/dist/store/task-graphs.d.mts +60 -0
- package/dist/store/task-graphs.mjs +212 -0
- package/dist/store/task-graphs.mjs.map +1 -0
- package/dist/store/task-messages.d.mts +136 -0
- package/dist/store/task-messages.mjs +475 -0
- package/dist/store/task-messages.mjs.map +1 -0
- package/dist/store/task-work.d.mts +180 -0
- package/dist/store/task-work.mjs +137 -0
- package/dist/store/task-work.mjs.map +1 -0
- package/dist/store/work-notifications.d.mts +19 -0
- package/dist/store/work-notifications.mjs +48 -0
- package/dist/store/work-notifications.mjs.map +1 -0
- package/dist/sweep.d.mts +79 -0
- package/dist/sweep.mjs +171 -0
- package/dist/sweep.mjs.map +1 -0
- package/dist/task-communication.d.mts +35 -0
- package/dist/task-communication.mjs +47 -0
- package/dist/task-communication.mjs.map +1 -0
- package/dist/task-graph-view.d.mts +267 -0
- package/dist/task-graph-view.mjs +17 -0
- package/dist/task-graph-view.mjs.map +1 -0
- package/dist/task-message-processing.d.mts +60 -0
- package/dist/task-message-processing.mjs +200 -0
- package/dist/task-message-processing.mjs.map +1 -0
- package/dist/task-protocols.d.mts +80 -0
- package/dist/task-protocols.mjs +47 -0
- package/dist/task-protocols.mjs.map +1 -0
- package/dist/tasks.d.mts +17 -0
- package/dist/tasks.mjs +17 -0
- package/dist/vercel-git.d.mts +53 -0
- package/dist/vercel-git.mjs +344 -0
- package/dist/vercel-git.mjs.map +1 -0
- package/dist/vercel-github-api.d.mts +103 -0
- package/dist/vercel-github-api.mjs +363 -0
- package/dist/vercel-github-api.mjs.map +1 -0
- package/dist/vercel.d.mts +34 -2
- package/dist/vercel.mjs +49 -3
- package/dist/vercel.mjs.map +1 -1
- package/dist/work-triage/eve-tool.d.mts +29 -0
- package/dist/work-triage/eve-tool.mjs +32 -0
- package/dist/work-triage/eve-tool.mjs.map +1 -0
- package/dist/work-triage/find-existing-work.d.mts +32 -0
- package/dist/work-triage/find-existing-work.mjs +31 -0
- package/dist/work-triage/find-existing-work.mjs.map +1 -0
- package/dist/work-triage/github.d.mts +15 -0
- package/dist/work-triage/github.mjs +14 -0
- package/dist/work-triage/github.mjs.map +1 -0
- package/dist/work-triage.d.mts +4 -0
- package/dist/work-triage.mjs +3 -0
- package/dist/workflows.d.mts +146 -0
- package/dist/workflows.mjs +139 -0
- package/dist/workflows.mjs.map +1 -0
- package/dist/workspace-diff-assembly.d.mts +33 -0
- package/dist/workspace-diff-assembly.mjs +95 -0
- package/dist/workspace-diff-assembly.mjs.map +1 -0
- package/dist/workspace-diff.d.mts +90 -0
- package/dist/workspace-diff.mjs +61 -0
- package/dist/workspace-diff.mjs.map +1 -0
- package/dist/workspace-files-git.d.mts +15 -0
- package/dist/workspace-files-git.mjs +61 -0
- package/dist/workspace-files-git.mjs.map +1 -0
- package/dist/workspace-files.d.mts +107 -0
- package/dist/workspace-files.mjs +74 -0
- package/dist/workspace-files.mjs.map +1 -0
- package/dist/workspace-snapshot.d.mts +26 -0
- package/dist/workspace-snapshot.mjs +80 -0
- package/dist/workspace-snapshot.mjs.map +1 -0
- package/docs/getting-started.md +104 -0
- package/docs/index.md +100 -0
- package/docs/recipes/cancellation.md +215 -0
- package/docs/recipes/custom-workflow.md +153 -0
- package/docs/recipes/dependent-tasks.md +207 -0
- package/docs/recipes/eve-agent.md +277 -0
- package/docs/recipes/human-input.md +204 -0
- package/docs/recipes/persistence-recovery.md +268 -0
- package/docs/recipes/retry-recovery.md +241 -0
- package/docs/recipes/task-messaging.md +215 -0
- package/docs/recipes/typed-eve-result.md +161 -0
- package/docs/runtime-integration.md +137 -0
- package/package.json +142 -46
- package/dist/approval-JX2Px9IC.mjs +0 -132
- package/dist/approval-JX2Px9IC.mjs.map +0 -1
- package/dist/budget-DzSiIA4t.mjs +0 -42
- package/dist/budget-DzSiIA4t.mjs.map +0 -1
- package/dist/change-D2U6v7Ek.mjs +0 -554
- package/dist/change-D2U6v7Ek.mjs.map +0 -1
- package/dist/communication-Kd9nU5RP.mjs.map +0 -1
- package/dist/coordination-Cq08hb1l.mjs +0 -76
- package/dist/coordination-Cq08hb1l.mjs.map +0 -1
- package/dist/dispatch-BaZS3PT8.d.mts +0 -76
- package/dist/driver-BC0Mt5KG.d.mts +0 -34
- package/dist/driver-Bbd25rNM.mjs +0 -23
- package/dist/driver-Bbd25rNM.mjs.map +0 -1
- package/dist/engine-DFHU2Pe-.d.mts +0 -781
- package/dist/engine-WaUM2cGA.mjs +0 -1068
- package/dist/engine-WaUM2cGA.mjs.map +0 -1
- package/dist/factory-config-BoRXOw43.mjs +0 -50
- package/dist/factory-config-BoRXOw43.mjs.map +0 -1
- package/dist/factory-config-D2yU3G0c.d.mts +0 -58
- package/dist/github-C5HNBN6p.d.mts +0 -279
- package/dist/id-BLIkCVue.mjs.map +0 -1
- package/dist/index-Bw6hggoH.d.mts +0 -40
- package/dist/index.mjs.map +0 -1
- package/dist/task-CcOyOJ3k.mjs +0 -154
- package/dist/task-CcOyOJ3k.mjs.map +0 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { taskIdSchema } from "./schema/id.mjs";
|
|
2
|
+
import { isoDateTimeSchema, schemaVersionSchema } from "./schema/common.mjs";
|
|
3
|
+
import { jsonValueSchema, workflowBindingSchema } from "./schema/work.mjs";
|
|
4
|
+
import { taskAttemptRefSchema } from "./schema/execution.mjs";
|
|
5
|
+
import { RecordExistsError } from "./store/driver.mjs";
|
|
6
|
+
import { defineTaskMessageProtocol, taskMessageIdSchema, taskMessagePrincipalSchema } from "./schema/task-message.mjs";
|
|
7
|
+
import { createHash } from "node:crypto";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { isDeepStrictEqual } from "node:util";
|
|
10
|
+
//#region src/task-message-processing.ts
|
|
11
|
+
const decisionRecordSchema = z.strictObject({
|
|
12
|
+
schemaVersion: schemaVersionSchema,
|
|
13
|
+
id: z.string().regex(/^decision_[a-f0-9]{64}$/).describe("Immutable workflow and message decision identity."),
|
|
14
|
+
toTaskId: taskIdSchema.describe("Authorized recipient Task of the decided message."),
|
|
15
|
+
messageId: taskMessageIdSchema,
|
|
16
|
+
workflow: workflowBindingSchema.describe("Exact workflow contract that produced this decision."),
|
|
17
|
+
decision: jsonValueSchema.describe("Schema-validated bounded decision; never credentials or execution context."),
|
|
18
|
+
createdAt: isoDateTimeSchema.describe("Timestamp of the first committed decision.")
|
|
19
|
+
});
|
|
20
|
+
function snapshotProtocol(protocol) {
|
|
21
|
+
const snapshot = defineTaskMessageProtocol(protocol);
|
|
22
|
+
if (!isDeepStrictEqual(snapshot.binding, protocol.binding)) throw new Error("Task-message protocol binding must match its definition");
|
|
23
|
+
return snapshot;
|
|
24
|
+
}
|
|
25
|
+
function validateProtocolMessage(protocol, message) {
|
|
26
|
+
if (message.type.id !== protocol.id || message.type.version !== protocol.version) throw new Error(`Task message ${message.id} requires exact protocol ${protocol.id}@${protocol.version}`);
|
|
27
|
+
const json = structuredClone(jsonValueSchema.parse(message.payload));
|
|
28
|
+
const payload = jsonValueSchema.parse((protocol.storedPayload ?? protocol.payload).parse(structuredClone(json)));
|
|
29
|
+
if (!isDeepStrictEqual(json, payload)) throw new Error("Stored message protocol validation must preserve canonical JSON; provide storedPayload for transforming protocols");
|
|
30
|
+
return structuredClone({
|
|
31
|
+
...message,
|
|
32
|
+
type: protocol.binding,
|
|
33
|
+
payload
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function validateStoredDecision(schema, value) {
|
|
37
|
+
const json = structuredClone(jsonValueSchema.parse(value));
|
|
38
|
+
const parsed = schema.parse(structuredClone(json));
|
|
39
|
+
const validated = jsonValueSchema.parse(parsed);
|
|
40
|
+
if (!isDeepStrictEqual(json, validated)) throw new Error("Decision schema must preserve canonical JSON; non-idempotent transforms are not permitted");
|
|
41
|
+
return structuredClone(parsed);
|
|
42
|
+
}
|
|
43
|
+
function decisionIdentity(workflow, messageId) {
|
|
44
|
+
return `decision_${createHash("sha256").update(JSON.stringify([
|
|
45
|
+
workflow.id,
|
|
46
|
+
workflow.version,
|
|
47
|
+
messageId
|
|
48
|
+
])).digest("hex")}`;
|
|
49
|
+
}
|
|
50
|
+
/** Authorized typed inspection; null means no committed decision, not permission to decide for a terminal Task. */
|
|
51
|
+
async function readTaskMessageDecision(options, messageId) {
|
|
52
|
+
const workflow = workflowBindingSchema.parse(options.workflow);
|
|
53
|
+
const task = await options.stores.tasks.get(options.task.taskId);
|
|
54
|
+
if (!task || !isDeepStrictEqual(task.work.workflow, workflow)) throw new Error("Exact recipient workflow required");
|
|
55
|
+
if (!await options.stores.messages.get({
|
|
56
|
+
principal: options.principal,
|
|
57
|
+
toTaskId: task.id,
|
|
58
|
+
messageId
|
|
59
|
+
})) return null;
|
|
60
|
+
const id = decisionIdentity(workflow, messageId);
|
|
61
|
+
const stored = await options.stores.workflowRecords.get("taskMessageDecisions", id);
|
|
62
|
+
if (!stored) return null;
|
|
63
|
+
const record = decisionRecordSchema.parse(stored.value);
|
|
64
|
+
if (record.id !== id || record.toTaskId !== task.id || record.messageId !== messageId || !isDeepStrictEqual(record.workflow, workflow)) throw new Error("Stored Task message decision identity mismatch");
|
|
65
|
+
return validateStoredDecision(options.decisionSchema, record.decision);
|
|
66
|
+
}
|
|
67
|
+
/** Process one authorized inbox head. Idle means empty or already leased, not necessarily drained. */
|
|
68
|
+
async function processTaskMessage(options) {
|
|
69
|
+
const { stores, decisionSchema, decide, apply } = options;
|
|
70
|
+
const protocol = snapshotProtocol(options.protocol);
|
|
71
|
+
const driver = stores.workflowRecords;
|
|
72
|
+
const workflow = workflowBindingSchema.parse(options.workflow);
|
|
73
|
+
const principal = taskMessagePrincipalSchema.parse(options.principal);
|
|
74
|
+
const { taskId, attempt } = taskAttemptRefSchema.parse(options.task);
|
|
75
|
+
const loadTask = async () => {
|
|
76
|
+
const task = await stores.tasks.get(taskId);
|
|
77
|
+
if (!task || task.id !== taskId || !isDeepStrictEqual(task.work.workflow, workflow)) throw new Error(`Task ${taskId} requires exact workflow ${workflow.id}@${workflow.version}`);
|
|
78
|
+
if (task.state === "cancelled") throw new Error(`Cancelled Task ${taskId} cannot replay message effects`);
|
|
79
|
+
return task;
|
|
80
|
+
};
|
|
81
|
+
const completed = (task) => task.state === "succeeded" || task.state === "failed";
|
|
82
|
+
const decisionId = (messageId) => decisionIdentity(workflow, messageId);
|
|
83
|
+
const readDecision = (value, messageId) => {
|
|
84
|
+
const record = decisionRecordSchema.parse(value);
|
|
85
|
+
if (record.id !== decisionId(messageId) || record.toTaskId !== taskId || record.messageId !== messageId || !isDeepStrictEqual(record.workflow, workflow)) throw new Error("Stored Task message decision identity does not match its recipient, message, and workflow");
|
|
86
|
+
return validateStoredDecision(decisionSchema, record.decision);
|
|
87
|
+
};
|
|
88
|
+
let task = await loadTask();
|
|
89
|
+
if (options.expectMessageId !== void 0) {
|
|
90
|
+
const head = (await stores.messages.pending({
|
|
91
|
+
principal,
|
|
92
|
+
toTaskId: taskId
|
|
93
|
+
}))[0];
|
|
94
|
+
if (head?.id !== options.expectMessageId) throw new Error("Inbox head differs from expected message");
|
|
95
|
+
if (head) validateProtocolMessage(protocol, head);
|
|
96
|
+
}
|
|
97
|
+
let recoveryMessageId;
|
|
98
|
+
if (completed(task)) {
|
|
99
|
+
const head = (await stores.messages.pending({
|
|
100
|
+
principal,
|
|
101
|
+
toTaskId: taskId
|
|
102
|
+
}))[0];
|
|
103
|
+
if (!head) return { status: "idle" };
|
|
104
|
+
validateProtocolMessage(protocol, head);
|
|
105
|
+
const stored = await driver.get("taskMessageDecisions", decisionId(head.id));
|
|
106
|
+
if (!stored) throw new Error(`Completed Task ${taskId} requires an existing decision for message recovery`);
|
|
107
|
+
readDecision(stored.value, head.id);
|
|
108
|
+
recoveryMessageId = head.id;
|
|
109
|
+
}
|
|
110
|
+
const claimed = await stores.messages.claim({
|
|
111
|
+
principal,
|
|
112
|
+
task: {
|
|
113
|
+
taskId,
|
|
114
|
+
attempt
|
|
115
|
+
},
|
|
116
|
+
leaseMs: options.leaseMs,
|
|
117
|
+
...recoveryMessageId === void 0 ? {} : { recoverCompleted: true }
|
|
118
|
+
});
|
|
119
|
+
if (!claimed) return { status: "idle" };
|
|
120
|
+
const { claim, message: claimedMessage } = claimed;
|
|
121
|
+
const message = validateProtocolMessage(protocol, claimedMessage);
|
|
122
|
+
if (options.expectMessageId !== void 0 && message.id !== options.expectMessageId) throw new Error("Claimed message differs from expected message");
|
|
123
|
+
if (recoveryMessageId !== void 0 && message.id !== recoveryMessageId) throw new Error("Claimed message differs from the validated terminal recovery head");
|
|
124
|
+
task = await loadTask();
|
|
125
|
+
const id = decisionId(message.id);
|
|
126
|
+
const effectKey = stores.messages.effectKey({
|
|
127
|
+
messageId: message.id,
|
|
128
|
+
operation: `workflow:${workflow.id}@${workflow.version}`
|
|
129
|
+
});
|
|
130
|
+
await stores.messages.assertClaim({
|
|
131
|
+
principal,
|
|
132
|
+
claim
|
|
133
|
+
});
|
|
134
|
+
const existing = await driver.get("taskMessageDecisions", id);
|
|
135
|
+
let decision;
|
|
136
|
+
if (existing) decision = readDecision(existing.value, message.id);
|
|
137
|
+
else {
|
|
138
|
+
if (recoveryMessageId !== void 0 || completed(task)) throw new Error(`Completed Task ${taskId} requires an existing decision for message recovery`);
|
|
139
|
+
const raw = jsonValueSchema.parse(await decide({
|
|
140
|
+
task: structuredClone(task),
|
|
141
|
+
message: structuredClone(message)
|
|
142
|
+
}));
|
|
143
|
+
decision = validateStoredDecision(decisionSchema, jsonValueSchema.parse(decisionSchema.parse(structuredClone(raw))));
|
|
144
|
+
const record = decisionRecordSchema.parse({
|
|
145
|
+
schemaVersion: 1,
|
|
146
|
+
id,
|
|
147
|
+
toTaskId: taskId,
|
|
148
|
+
messageId: message.id,
|
|
149
|
+
workflow,
|
|
150
|
+
decision,
|
|
151
|
+
createdAt: (options.now ?? (() => (/* @__PURE__ */ new Date()).toISOString()))()
|
|
152
|
+
});
|
|
153
|
+
await stores.messages.assertClaim({
|
|
154
|
+
principal,
|
|
155
|
+
claim
|
|
156
|
+
});
|
|
157
|
+
try {
|
|
158
|
+
await driver.insert({
|
|
159
|
+
collection: "taskMessageDecisions",
|
|
160
|
+
id,
|
|
161
|
+
value: record
|
|
162
|
+
});
|
|
163
|
+
} catch (error) {
|
|
164
|
+
if (!(error instanceof RecordExistsError)) throw error;
|
|
165
|
+
const winner = await driver.get("taskMessageDecisions", id);
|
|
166
|
+
if (!winner) throw new Error("Winning Task message decision is missing", { cause: error });
|
|
167
|
+
decision = readDecision(winner.value, message.id);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
task = await loadTask();
|
|
171
|
+
await stores.messages.assertClaim({
|
|
172
|
+
principal,
|
|
173
|
+
claim
|
|
174
|
+
});
|
|
175
|
+
await apply({
|
|
176
|
+
task: structuredClone(task),
|
|
177
|
+
message: structuredClone(message),
|
|
178
|
+
decision: structuredClone(decision),
|
|
179
|
+
effectKey
|
|
180
|
+
});
|
|
181
|
+
await stores.messages.assertClaim({
|
|
182
|
+
principal,
|
|
183
|
+
claim
|
|
184
|
+
});
|
|
185
|
+
await stores.messages.complete({
|
|
186
|
+
principal,
|
|
187
|
+
claim,
|
|
188
|
+
effectsCommitted: true
|
|
189
|
+
});
|
|
190
|
+
return {
|
|
191
|
+
status: "processed",
|
|
192
|
+
messageId: message.id,
|
|
193
|
+
decision,
|
|
194
|
+
effectKey
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//#endregion
|
|
198
|
+
export { processTaskMessage, readTaskMessageDecision };
|
|
199
|
+
|
|
200
|
+
//# sourceMappingURL=task-message-processing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-message-processing.mjs","names":[],"sources":["../src/task-message-processing.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { z } from \"zod\";\nimport {\n isoDateTimeSchema,\n schemaVersionSchema,\n SCHEMA_VERSION,\n type IsoDateTimeClock,\n} from \"./schema/common\";\nimport { taskAttemptRefSchema, type TaskAttemptRef } from \"./schema/execution\";\nimport { taskIdSchema } from \"./schema/id\";\nimport type { Task } from \"./schema/task\";\nimport {\n defineTaskMessageProtocol,\n taskMessageIdSchema,\n taskMessagePrincipalSchema,\n type TaskMessage,\n type TaskMessageForProtocol,\n type TaskMessageId,\n type TaskMessagePrincipal,\n type TaskMessageProtocol,\n} from \"./schema/task-message\";\nimport { jsonValueSchema, workflowBindingSchema, type WorkflowBinding } from \"./schema/work\";\nimport { RecordExistsError } from \"./store/driver\";\nimport type { FactoryStores } from \"./store/engine\";\n\n/** Minimal persistence capabilities required to decide and apply one Task message. */\nexport type TaskMessageProcessingStores = Pick<\n FactoryStores,\n \"messages\" | \"tasks\" | \"workflowRecords\"\n>;\n\nconst decisionRecordSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z\n .string()\n .regex(/^decision_[a-f0-9]{64}$/)\n .describe(\"Immutable workflow and message decision identity.\"),\n toTaskId: taskIdSchema.describe(\"Authorized recipient Task of the decided message.\"),\n messageId: taskMessageIdSchema,\n workflow: workflowBindingSchema.describe(\"Exact workflow contract that produced this decision.\"),\n decision: jsonValueSchema.describe(\n \"Schema-validated bounded decision; never credentials or execution context.\",\n ),\n createdAt: isoDateTimeSchema.describe(\"Timestamp of the first committed decision.\"),\n});\n\n/** Trusted dependencies and pure/effectful callbacks for processing one Task inbox head. */\nexport interface ProcessTaskMessageOptions<\n Schema extends z.ZodType,\n Protocol extends TaskMessageProtocol = TaskMessageProtocol,\n> {\n readonly stores: TaskMessageProcessingStores;\n /** Authenticated externally; the message store enforces its configured claim policy. */\n readonly principal: TaskMessagePrincipal;\n /** Exact recipient Task attempt authorized to process the inbox head. */\n readonly task: TaskAttemptRef;\n /** Refuse a different inbox head before deciding or replaying effects. */\n readonly expectMessageId?: TaskMessageId;\n readonly leaseMs: number;\n readonly workflow: WorkflowBinding;\n /** Exact protocol required for the claimed message and exposed to typed callbacks. */\n readonly protocol: Protocol;\n /** Trusted UTC clock for decision timestamps; defaults to the system clock. */\n readonly now?: IsoDateTimeClock;\n /** Must accept its canonical JSON output unchanged. Exclude secrets from the decision contract. */\n readonly decisionSchema: Schema;\n /** Pure computation: may run concurrently or repeat until a decision is durably inserted. */\n decide(\n context: Readonly<{ task: Task; message: TaskMessageForProtocol<Protocol> }>,\n ): Promise<z.input<Schema>>;\n /**\n * Honor effectKey for every external write (derive stable subkeys for multiple effects).\n * Lease checks cannot fence external systems: apply may repeat, overlap, or outlive its claim.\n * Resolve only after all effects commit; never mutate the decision to select different effects.\n */\n apply(\n context: Readonly<{\n task: Task;\n message: TaskMessageForProtocol<Protocol>;\n decision: z.output<Schema>;\n effectKey: string;\n }>,\n ): Promise<void>;\n}\n\n/** Result of finding no claimable work or durably processing one Task message. */\nexport type ProcessTaskMessageResult<Decision> =\n | { status: \"idle\" }\n | { status: \"processed\"; messageId: TaskMessageId; decision: Decision; effectKey: string };\n\nfunction snapshotProtocol<Protocol extends TaskMessageProtocol>(\n protocol: Protocol,\n): Readonly<Protocol> {\n const snapshot = defineTaskMessageProtocol(protocol);\n if (!isDeepStrictEqual(snapshot.binding, protocol.binding))\n throw new Error(\"Task-message protocol binding must match its definition\");\n return snapshot as Readonly<Protocol>;\n}\n\nfunction validateProtocolMessage<Protocol extends TaskMessageProtocol>(\n protocol: Protocol,\n message: TaskMessage,\n): TaskMessageForProtocol<Protocol> {\n if (message.type.id !== protocol.id || message.type.version !== protocol.version) {\n throw new Error(\n `Task message ${message.id} requires exact protocol ${protocol.id}@${protocol.version}`,\n );\n }\n const json = structuredClone(jsonValueSchema.parse(message.payload));\n const payload = jsonValueSchema.parse(\n (protocol.storedPayload ?? protocol.payload).parse(structuredClone(json)),\n );\n if (!isDeepStrictEqual(json, payload)) {\n throw new Error(\n \"Stored message protocol validation must preserve canonical JSON; provide storedPayload for transforming protocols\",\n );\n }\n return structuredClone({\n ...message,\n type: protocol.binding,\n payload,\n }) as TaskMessageForProtocol<Protocol>;\n}\n\nfunction validateStoredDecision<Schema extends z.ZodType>(\n schema: Schema,\n value: unknown,\n): z.output<Schema> {\n const json = structuredClone(jsonValueSchema.parse(value));\n const parsed = schema.parse(structuredClone(json));\n const validated = jsonValueSchema.parse(parsed);\n if (!isDeepStrictEqual(json, validated)) {\n throw new Error(\n \"Decision schema must preserve canonical JSON; non-idempotent transforms are not permitted\",\n );\n }\n return structuredClone(parsed);\n}\n\nfunction decisionIdentity(workflow: WorkflowBinding, messageId: TaskMessageId): string {\n return `decision_${createHash(\"sha256\")\n .update(JSON.stringify([workflow.id, workflow.version, messageId]))\n .digest(\"hex\")}`;\n}\n\n/** Authorized typed inspection; null means no committed decision, not permission to decide for a terminal Task. */\nexport async function readTaskMessageDecision<Schema extends z.ZodType>(\n options: Pick<\n ProcessTaskMessageOptions<Schema>,\n \"stores\" | \"principal\" | \"task\" | \"workflow\" | \"decisionSchema\"\n >,\n messageId: TaskMessageId,\n): Promise<z.output<Schema> | null> {\n const workflow = workflowBindingSchema.parse(options.workflow);\n const task = await options.stores.tasks.get(options.task.taskId);\n if (!task || !isDeepStrictEqual(task.work.workflow, workflow))\n throw new Error(\"Exact recipient workflow required\");\n if (\n !(await options.stores.messages.get({\n principal: options.principal,\n toTaskId: task.id,\n messageId,\n }))\n )\n return null;\n const id = decisionIdentity(workflow, messageId);\n const stored = await options.stores.workflowRecords.get(\"taskMessageDecisions\", id);\n if (!stored) return null;\n const record = decisionRecordSchema.parse(stored.value);\n if (\n record.id !== id ||\n record.toTaskId !== task.id ||\n record.messageId !== messageId ||\n !isDeepStrictEqual(record.workflow, workflow)\n )\n throw new Error(\"Stored Task message decision identity mismatch\");\n return validateStoredDecision(options.decisionSchema, record.decision);\n}\n\n/** Process one authorized inbox head. Idle means empty or already leased, not necessarily drained. */\nexport async function processTaskMessage<\n Schema extends z.ZodType,\n Protocol extends TaskMessageProtocol = TaskMessageProtocol,\n>(\n options: ProcessTaskMessageOptions<Schema, Protocol>,\n): Promise<ProcessTaskMessageResult<z.output<Schema>>> {\n const { stores, decisionSchema, decide, apply } = options;\n const protocol = snapshotProtocol(options.protocol);\n const driver = stores.workflowRecords;\n const workflow = workflowBindingSchema.parse(options.workflow);\n const principal = taskMessagePrincipalSchema.parse(options.principal);\n const { taskId, attempt } = taskAttemptRefSchema.parse(options.task);\n const loadTask = async (): Promise<Task> => {\n const task = await stores.tasks.get(taskId);\n if (!task || task.id !== taskId || !isDeepStrictEqual(task.work.workflow, workflow)) {\n throw new Error(`Task ${taskId} requires exact workflow ${workflow.id}@${workflow.version}`);\n }\n if (task.state === \"cancelled\")\n throw new Error(`Cancelled Task ${taskId} cannot replay message effects`);\n return task;\n };\n const completed = (task: Task): boolean => task.state === \"succeeded\" || task.state === \"failed\";\n const decisionId = (messageId: TaskMessageId): string => decisionIdentity(workflow, messageId);\n const readDecision = (value: unknown, messageId: TaskMessageId): z.output<Schema> => {\n const record = decisionRecordSchema.parse(value);\n if (\n record.id !== decisionId(messageId) ||\n record.toTaskId !== taskId ||\n record.messageId !== messageId ||\n !isDeepStrictEqual(record.workflow, workflow)\n ) {\n throw new Error(\n \"Stored Task message decision identity does not match its recipient, message, and workflow\",\n );\n }\n return validateStoredDecision(decisionSchema, record.decision);\n };\n\n let task = await loadTask();\n if (options.expectMessageId !== undefined) {\n const head = (await stores.messages.pending({ principal, toTaskId: taskId }))[0];\n if (head?.id !== options.expectMessageId)\n throw new Error(\"Inbox head differs from expected message\");\n if (head) validateProtocolMessage(protocol, head);\n }\n let recoveryMessageId: TaskMessageId | undefined;\n if (completed(task)) {\n const head = (await stores.messages.pending({ principal, toTaskId: taskId }))[0];\n if (!head) return { status: \"idle\" };\n validateProtocolMessage(protocol, head);\n const stored = await driver.get(\"taskMessageDecisions\", decisionId(head.id));\n if (!stored)\n throw new Error(\n `Completed Task ${taskId} requires an existing decision for message recovery`,\n );\n readDecision(stored.value, head.id);\n recoveryMessageId = head.id;\n }\n const claimed = await stores.messages.claim({\n principal,\n task: { taskId, attempt },\n leaseMs: options.leaseMs,\n ...(recoveryMessageId === undefined ? {} : { recoverCompleted: true }),\n });\n if (!claimed) return { status: \"idle\" };\n const { claim, message: claimedMessage } = claimed;\n const message = validateProtocolMessage(protocol, claimedMessage);\n if (options.expectMessageId !== undefined && message.id !== options.expectMessageId) {\n throw new Error(\"Claimed message differs from expected message\");\n }\n if (recoveryMessageId !== undefined && message.id !== recoveryMessageId) {\n throw new Error(\"Claimed message differs from the validated terminal recovery head\");\n }\n task = await loadTask();\n const id = decisionId(message.id);\n const effectKey = stores.messages.effectKey({\n messageId: message.id,\n operation: `workflow:${workflow.id}@${workflow.version}`,\n });\n await stores.messages.assertClaim({ principal, claim });\n const existing = await driver.get(\"taskMessageDecisions\", id);\n let decision: z.output<Schema>;\n if (existing) {\n decision = readDecision(existing.value, message.id);\n } else {\n if (recoveryMessageId !== undefined || completed(task)) {\n throw new Error(\n `Completed Task ${taskId} requires an existing decision for message recovery`,\n );\n }\n const raw = jsonValueSchema.parse(\n await decide({ task: structuredClone(task), message: structuredClone(message) }),\n );\n const canonical = jsonValueSchema.parse(decisionSchema.parse(structuredClone(raw)));\n decision = validateStoredDecision(decisionSchema, canonical);\n const record = decisionRecordSchema.parse({\n schemaVersion: SCHEMA_VERSION,\n id,\n toTaskId: taskId,\n messageId: message.id,\n workflow,\n decision,\n createdAt: (options.now ?? (() => new Date().toISOString()))(),\n });\n await stores.messages.assertClaim({ principal, claim });\n try {\n await driver.insert({ collection: \"taskMessageDecisions\", id, value: record });\n } catch (error) {\n if (!(error instanceof RecordExistsError)) throw error;\n const winner = await driver.get(\"taskMessageDecisions\", id);\n if (!winner) throw new Error(\"Winning Task message decision is missing\", { cause: error });\n decision = readDecision(winner.value, message.id);\n }\n }\n\n task = await loadTask();\n await stores.messages.assertClaim({ principal, claim });\n await apply({\n task: structuredClone(task),\n message: structuredClone(message),\n decision: structuredClone(decision),\n effectKey,\n });\n await stores.messages.assertClaim({ principal, claim });\n await stores.messages.complete({ principal, claim, effectsCommitted: true });\n return { status: \"processed\", messageId: message.id, decision, effectKey };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { JsonValue } from "./schema/work.mjs";
|
|
2
|
+
import "./workflows.mjs";
|
|
3
|
+
import { TaskMessageProtocol, TaskMessageProtocols } from "./schema/task-message.mjs";
|
|
4
|
+
import "./tasks.mjs";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
//#region src/task-protocols.d.ts
|
|
7
|
+
/** Validates bounded instructions and explicit context for the supplied assignment protocol. */
|
|
8
|
+
declare const assignmentPayloadSchema: z.ZodObject<{
|
|
9
|
+
instructions: z.ZodString;
|
|
10
|
+
context: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
/** Validates a bounded outcome, evidence, and concerns for the supplied handoff protocol. */
|
|
13
|
+
declare const handoffPayloadSchema: z.ZodObject<{
|
|
14
|
+
outcome: z.ZodEnum<{
|
|
15
|
+
failed: "failed";
|
|
16
|
+
completed: "completed";
|
|
17
|
+
needs_input: "needs_input";
|
|
18
|
+
}>;
|
|
19
|
+
summary: z.ZodString;
|
|
20
|
+
output: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
21
|
+
artifacts: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
22
|
+
kind: z.ZodString;
|
|
23
|
+
ref: z.ZodString;
|
|
24
|
+
}, z.core.$strict>>>;
|
|
25
|
+
concerns: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
26
|
+
deviations: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
/** Validated assignment instructions and optional bounded context. */
|
|
29
|
+
type AssignmentPayload = z.infer<typeof assignmentPayloadSchema>;
|
|
30
|
+
/** Validated handoff outcome, evidence, concerns, and deviations. */
|
|
31
|
+
type HandoffPayload = z.infer<typeof handoffPayloadSchema>;
|
|
32
|
+
/** Standard exact `assignment@1` protocol definition. */
|
|
33
|
+
declare const assignmentTaskMessageProtocol: Readonly<TaskMessageProtocol<z.ZodObject<{
|
|
34
|
+
instructions: z.ZodString;
|
|
35
|
+
context: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
36
|
+
}, z.core.$strict>, "assignment", 1>>;
|
|
37
|
+
/** Standard exact `handoff@1` protocol definition. */
|
|
38
|
+
declare const handoffTaskMessageProtocol: Readonly<TaskMessageProtocol<z.ZodObject<{
|
|
39
|
+
outcome: z.ZodEnum<{
|
|
40
|
+
failed: "failed";
|
|
41
|
+
completed: "completed";
|
|
42
|
+
needs_input: "needs_input";
|
|
43
|
+
}>;
|
|
44
|
+
summary: z.ZodString;
|
|
45
|
+
output: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
46
|
+
artifacts: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
47
|
+
kind: z.ZodString;
|
|
48
|
+
ref: z.ZodString;
|
|
49
|
+
}, z.core.$strict>>>;
|
|
50
|
+
concerns: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
51
|
+
deviations: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
52
|
+
}, z.core.$strict>, "handoff", 1>>;
|
|
53
|
+
/** Replaceable protocol definitions, not mandatory message vocabulary. */
|
|
54
|
+
declare const standardTaskMessageProtocols: readonly (Readonly<TaskMessageProtocol<z.ZodObject<{
|
|
55
|
+
instructions: z.ZodString;
|
|
56
|
+
context: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
57
|
+
}, z.core.$strict>, "assignment", 1>> | Readonly<TaskMessageProtocol<z.ZodObject<{
|
|
58
|
+
outcome: z.ZodEnum<{
|
|
59
|
+
failed: "failed";
|
|
60
|
+
completed: "completed";
|
|
61
|
+
needs_input: "needs_input";
|
|
62
|
+
}>;
|
|
63
|
+
summary: z.ZodString;
|
|
64
|
+
output: z.ZodOptional<z.ZodCustom<JsonValue, JsonValue>>;
|
|
65
|
+
artifacts: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
66
|
+
kind: z.ZodString;
|
|
67
|
+
ref: z.ZodString;
|
|
68
|
+
}, z.core.$strict>>>;
|
|
69
|
+
concerns: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
70
|
+
deviations: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
71
|
+
}, z.core.$strict>, "handoff", 1>>)[];
|
|
72
|
+
/** One of the supplied standard Task-message protocol definitions. */
|
|
73
|
+
type StandardTaskMessageProtocol = (typeof standardTaskMessageProtocols)[number];
|
|
74
|
+
/** Registry type containing the supplied standard Task-message protocols. */
|
|
75
|
+
type DefaultTaskMessageProtocols = TaskMessageProtocols<StandardTaskMessageProtocol>;
|
|
76
|
+
/** Creates a registry containing the supplied `assignment@1` and `handoff@1` protocols. */
|
|
77
|
+
declare function createDefaultTaskMessageProtocols(): DefaultTaskMessageProtocols;
|
|
78
|
+
//#endregion
|
|
79
|
+
export { AssignmentPayload, DefaultTaskMessageProtocols, HandoffPayload, StandardTaskMessageProtocol, assignmentPayloadSchema, assignmentTaskMessageProtocol, createDefaultTaskMessageProtocols, handoffPayloadSchema, handoffTaskMessageProtocol, standardTaskMessageProtocols };
|
|
80
|
+
//# sourceMappingURL=task-protocols.d.mts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsonValueSchema } from "./schema/work.mjs";
|
|
2
|
+
import { defineTaskMessageProtocol, defineTaskMessageProtocols } from "./schema/task-message.mjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/task-protocols.ts
|
|
5
|
+
/** Validates bounded instructions and explicit context for the supplied assignment protocol. */
|
|
6
|
+
const assignmentPayloadSchema = z.strictObject({
|
|
7
|
+
instructions: z.string().min(1).max(16e3).describe("Bounded instructions for the recipient's delegated scope."),
|
|
8
|
+
context: jsonValueSchema.optional().describe("Optional explicit context; not implicit access to another Task's data.")
|
|
9
|
+
});
|
|
10
|
+
/** Validates a bounded outcome, evidence, and concerns for the supplied handoff protocol. */
|
|
11
|
+
const handoffPayloadSchema = z.strictObject({
|
|
12
|
+
outcome: z.enum([
|
|
13
|
+
"completed",
|
|
14
|
+
"failed",
|
|
15
|
+
"needs_input"
|
|
16
|
+
]).describe("Reported outcome; a message never changes Task lifecycle by itself."),
|
|
17
|
+
summary: z.string().min(1).max(8e3).describe("Summary of work and its result."),
|
|
18
|
+
output: jsonValueSchema.optional().describe("Bounded result; the receiving workflow validates the required output contract."),
|
|
19
|
+
artifacts: z.array(z.strictObject({
|
|
20
|
+
kind: z.string().min(1).max(64).describe("Application-defined artifact kind."),
|
|
21
|
+
ref: z.string().min(1).max(2048).describe("Opaque artifact reference; receiving this reference grants no read authority.")
|
|
22
|
+
})).max(32).readonly().describe("References to evidence and large outputs; not embedded artifact contents."),
|
|
23
|
+
concerns: z.array(z.string().min(1).max(2048)).max(32).readonly().describe("Findings or concerns requiring the scope owner's attention."),
|
|
24
|
+
deviations: z.array(z.string().min(1).max(2048)).max(32).readonly().describe("Departures from the assignment or expected approach.")
|
|
25
|
+
});
|
|
26
|
+
/** Standard exact `assignment@1` protocol definition. */
|
|
27
|
+
const assignmentTaskMessageProtocol = defineTaskMessageProtocol({
|
|
28
|
+
id: "assignment",
|
|
29
|
+
version: 1,
|
|
30
|
+
payload: assignmentPayloadSchema
|
|
31
|
+
});
|
|
32
|
+
/** Standard exact `handoff@1` protocol definition. */
|
|
33
|
+
const handoffTaskMessageProtocol = defineTaskMessageProtocol({
|
|
34
|
+
id: "handoff",
|
|
35
|
+
version: 1,
|
|
36
|
+
payload: handoffPayloadSchema
|
|
37
|
+
});
|
|
38
|
+
/** Replaceable protocol definitions, not mandatory message vocabulary. */
|
|
39
|
+
const standardTaskMessageProtocols = Object.freeze([assignmentTaskMessageProtocol, handoffTaskMessageProtocol]);
|
|
40
|
+
/** Creates a registry containing the supplied `assignment@1` and `handoff@1` protocols. */
|
|
41
|
+
function createDefaultTaskMessageProtocols() {
|
|
42
|
+
return defineTaskMessageProtocols(standardTaskMessageProtocols);
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { assignmentPayloadSchema, assignmentTaskMessageProtocol, createDefaultTaskMessageProtocols, handoffPayloadSchema, handoffTaskMessageProtocol, standardTaskMessageProtocols };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=task-protocols.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-protocols.mjs","names":[],"sources":["../src/task-protocols.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n defineTaskMessageProtocol,\n defineTaskMessageProtocols,\n type TaskMessageProtocols,\n} from \"./schema/task-message\";\nimport { jsonValueSchema } from \"./schema/work\";\n\n/** Validates bounded instructions and explicit context for the supplied assignment protocol. */\nexport const assignmentPayloadSchema = z.strictObject({\n instructions: z\n .string()\n .min(1)\n .max(16_000)\n .describe(\"Bounded instructions for the recipient's delegated scope.\"),\n context: jsonValueSchema\n .optional()\n .describe(\"Optional explicit context; not implicit access to another Task's data.\"),\n});\n\n/** Validates a bounded outcome, evidence, and concerns for the supplied handoff protocol. */\nexport const handoffPayloadSchema = z.strictObject({\n outcome: z\n .enum([\"completed\", \"failed\", \"needs_input\"])\n .describe(\"Reported outcome; a message never changes Task lifecycle by itself.\"),\n summary: z.string().min(1).max(8000).describe(\"Summary of work and its result.\"),\n output: jsonValueSchema\n .optional()\n .describe(\"Bounded result; the receiving workflow validates the required output contract.\"),\n artifacts: z\n .array(\n z.strictObject({\n kind: z.string().min(1).max(64).describe(\"Application-defined artifact kind.\"),\n ref: z\n .string()\n .min(1)\n .max(2048)\n .describe(\n \"Opaque artifact reference; receiving this reference grants no read authority.\",\n ),\n }),\n )\n .max(32)\n .readonly()\n .describe(\"References to evidence and large outputs; not embedded artifact contents.\"),\n concerns: z\n .array(z.string().min(1).max(2048))\n .max(32)\n .readonly()\n .describe(\"Findings or concerns requiring the scope owner's attention.\"),\n deviations: z\n .array(z.string().min(1).max(2048))\n .max(32)\n .readonly()\n .describe(\"Departures from the assignment or expected approach.\"),\n});\n\n/** Validated assignment instructions and optional bounded context. */\nexport type AssignmentPayload = z.infer<typeof assignmentPayloadSchema>;\n/** Validated handoff outcome, evidence, concerns, and deviations. */\nexport type HandoffPayload = z.infer<typeof handoffPayloadSchema>;\n\n/** Standard exact `assignment@1` protocol definition. */\nexport const assignmentTaskMessageProtocol = defineTaskMessageProtocol({\n id: \"assignment\",\n version: 1,\n payload: assignmentPayloadSchema,\n});\n\n/** Standard exact `handoff@1` protocol definition. */\nexport const handoffTaskMessageProtocol = defineTaskMessageProtocol({\n id: \"handoff\",\n version: 1,\n payload: handoffPayloadSchema,\n});\n\n/** Replaceable protocol definitions, not mandatory message vocabulary. */\nexport const standardTaskMessageProtocols = Object.freeze([\n assignmentTaskMessageProtocol,\n handoffTaskMessageProtocol,\n]);\n\n/** One of the supplied standard Task-message protocol definitions. */\nexport type StandardTaskMessageProtocol = (typeof standardTaskMessageProtocols)[number];\n/** Registry type containing the supplied standard Task-message protocols. */\nexport type DefaultTaskMessageProtocols = TaskMessageProtocols<StandardTaskMessageProtocol>;\n\n/** Creates a registry containing the supplied `assignment@1` and `handoff@1` protocols. */\nexport function createDefaultTaskMessageProtocols(): DefaultTaskMessageProtocols {\n return defineTaskMessageProtocols(standardTaskMessageProtocols);\n}\n"],"mappings":";;;;;AASA,MAAa,0BAA0B,EAAE,aAAa;CACpD,cAAc,EACX,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,IAAI,IAAM,CAAC,CACX,SAAS,2DAA2D;CACvE,SAAS,gBACN,SAAS,CAAC,CACV,SAAS,wEAAwE;AACtF,CAAC;;AAGD,MAAa,uBAAuB,EAAE,aAAa;CACjD,SAAS,EACN,KAAK;EAAC;EAAa;EAAU;CAAa,CAAC,CAAC,CAC5C,SAAS,qEAAqE;CACjF,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAI,CAAC,CAAC,SAAS,iCAAiC;CAC/E,QAAQ,gBACL,SAAS,CAAC,CACV,SAAS,gFAAgF;CAC5F,WAAW,EACR,MACC,EAAE,aAAa;EACb,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,oCAAoC;EAC7E,KAAK,EACF,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,IAAI,IAAI,CAAC,CACT,SACC,+EACF;CACJ,CAAC,CACH,CAAC,CACA,IAAI,EAAE,CAAC,CACP,SAAS,CAAC,CACV,SAAS,2EAA2E;CACvF,UAAU,EACP,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAClC,IAAI,EAAE,CAAC,CACP,SAAS,CAAC,CACV,SAAS,6DAA6D;CACzE,YAAY,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAClC,IAAI,EAAE,CAAC,CACP,SAAS,CAAC,CACV,SAAS,sDAAsD;AACpE,CAAC;;AAQD,MAAa,gCAAgC,0BAA0B;CACrE,IAAI;CACJ,SAAS;CACT,SAAS;AACX,CAAC;;AAGD,MAAa,6BAA6B,0BAA0B;CAClE,IAAI;CACJ,SAAS;CACT,SAAS;AACX,CAAC;;AAGD,MAAa,+BAA+B,OAAO,OAAO,CACxD,+BACA,0BACF,CAAC;;AAQD,SAAgB,oCAAiE;CAC/E,OAAO,2BAA2B,4BAA4B;AAChE"}
|
package/dist/tasks.d.mts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ApprovalPolicy, ApprovalPriority, ApprovalRule, ApprovalSubject, allowByDefaultApprovalPolicy, approvalPolicySchema, approvalPrioritySchema, approvalRuleSchema, requiresApproval } from "./approval.mjs";
|
|
2
|
+
import { AnswerId, TaskId, answerIdSchema, taskIdSchema } from "./schema/id.mjs";
|
|
3
|
+
import { ExecutionReference, MessageWaitingTask, NeedsHumanTask, SucceededTask, Task, TaskApproval, TaskKind, TaskOrigin, TaskQuestion, TaskState, TaskUsage, executionReferenceSchema, harnessSchema, isMessageWaitingTask, isNeedsHumanTask, isSucceededTask, standardTaskKinds, taskApprovalSchema, taskExecutionRepositoryIdsSchema, taskKindSchema, taskOriginSchema, taskQuestionSchema, taskSchema, taskStateSchema, taskUsageSchema } from "./schema/task.mjs";
|
|
4
|
+
import { MAX_TASK_INBOX_PENDING, SendTaskMessageInput, TaskInbox, TaskMessage, TaskMessageClaim, TaskMessageDiscard, TaskMessageForProtocol, TaskMessageId, TaskMessageOperationId, TaskMessagePrincipal, TaskMessageProcessing, TaskMessageProtocol, TaskMessageProtocolBinding, TaskMessageProtocolBindingInput, TaskMessageProtocolInput, TaskMessageProtocolInputPayload, TaskMessageProtocolStoredPayload, TaskMessageProtocols, defineTaskMessageProtocol, defineTaskMessageProtocols, parseTaskMessageProtocolBinding, sendTaskMessageInputSchema, taskInboxSchema, taskMessageClaimSchema, taskMessageDiscardSchema, taskMessageIdSchema, taskMessageInput, taskMessageOperationIdSchema, taskMessagePrincipalSchema, taskMessageProcessingSchema, taskMessageProtocolBindingSchema, taskMessageProtocolSchema, taskMessageReservationSchema, taskMessageSchema } from "./schema/task-message.mjs";
|
|
5
|
+
import { AssertTaskMessageClaimInput, ClaimTaskMessageInput, ClaimTaskMessageResult, CompleteTaskMessageInput, CreateTaskMessageStoreOptions, DiscardTaskMessageInput, TaskMessageAction, TaskMessageAuthorizationError, TaskMessageAuthorizationInput, TaskMessageAuthorize, TaskMessageConflictError, TaskMessageEffectKeyInput, TaskMessageError, TaskMessageLeaseError, TaskMessageLookupInput, TaskMessageRecipientInput, TaskMessageSendInput, TaskMessageSourceFenceError, TaskMessageStore, createTaskMessageStore, taskBoundMessagePolicy } from "./store/task-messages.mjs";
|
|
6
|
+
import { MAX_TASK_GRAPH_DEPENDENCIES, MAX_TASK_GRAPH_NODES, TaskGraph, TaskGraphNode, taskGraphAdmissionSchema, taskGraphDependenciesSchema, taskGraphNodeSchema, taskGraphSchema } from "./schema/task-graph.mjs";
|
|
7
|
+
import { AdmitTaskGraphInput, AssertTaskAdmissionInput, CreateTaskGraphStoreOptions, SetTaskGraphDependenciesInput, TaskGraphConflictError, TaskGraphNodeRef, TaskGraphStore, assertTaskAdmission, createTaskGraphStore } from "./store/task-graphs.mjs";
|
|
8
|
+
import { TaskEffect, TaskEffectKey, TaskEffectReference, taskEffectKeySchema, taskEffectReferenceSchema, taskEffectSchema } from "./schema/task-effect.mjs";
|
|
9
|
+
import { CreateTaskEffectStoreOptions, RecordTaskEffectInput, ResolveTaskEffectInput, TaskEffectLookupInput, TaskEffectStore, createTaskEffectStore } from "./store/task-effects.mjs";
|
|
10
|
+
import { CompleteTaskWorkInput, CompleteWorkflowTaskWorkInput, CreateTaskWorkStoreOptions, ResumeTaskWorkInput, TaskWorkCompletionFence, TaskWorkStore, TaskWorkStores, TaskWorkUsage, WaitForTaskMessagesInput, createTaskWorkStore } from "./store/task-work.mjs";
|
|
11
|
+
import { AnswerEvent, answerEventSchema } from "./schema/answer.mjs";
|
|
12
|
+
import { AgentSessionBinding, AnswerEventConflictError, AnswerQuestionInput, AnswerQuestionResult, ApprovalDecision, ApprovalError, CreateTaskInput, RejectionDecision, RootTaskOrigin, TaskAttemptConflictError, TaskPatch, TaskTransitionArguments, TaskTransitionOptions } from "./store/engine.mjs";
|
|
13
|
+
import { ApprovalAccess, ApprovalAccessDecisionInput, ApprovalAccessError, ApprovalAccessOptions, ApprovalAccessStores, createApprovalAccess } from "./approval-access.mjs";
|
|
14
|
+
import { taskInitialState, taskTransitions } from "./schema/transitions.mjs";
|
|
15
|
+
import { ProcessTaskMessageOptions, ProcessTaskMessageResult, TaskMessageProcessingStores, processTaskMessage, readTaskMessageDecision } from "./task-message-processing.mjs";
|
|
16
|
+
import { AssignmentPayload, DefaultTaskMessageProtocols, HandoffPayload, StandardTaskMessageProtocol, assignmentPayloadSchema, assignmentTaskMessageProtocol, createDefaultTaskMessageProtocols, handoffPayloadSchema, handoffTaskMessageProtocol, standardTaskMessageProtocols } from "./task-protocols.mjs";
|
|
17
|
+
export { type AdmitTaskGraphInput, type AgentSessionBinding, type AnswerEvent, AnswerEventConflictError, type AnswerId, type AnswerQuestionInput, type AnswerQuestionResult, type ApprovalAccess, type ApprovalAccessDecisionInput, ApprovalAccessError, type ApprovalAccessOptions, type ApprovalAccessStores, type ApprovalDecision, ApprovalError, type ApprovalPolicy, type ApprovalPriority, type ApprovalRule, type ApprovalSubject, type AssertTaskAdmissionInput, type AssertTaskMessageClaimInput, type AssignmentPayload, type ClaimTaskMessageInput, type ClaimTaskMessageResult, type CompleteTaskMessageInput, type CompleteTaskWorkInput, type CompleteWorkflowTaskWorkInput, type CreateTaskEffectStoreOptions, type CreateTaskGraphStoreOptions, type CreateTaskInput, type CreateTaskMessageStoreOptions, type CreateTaskWorkStoreOptions, type DefaultTaskMessageProtocols, type DiscardTaskMessageInput, type ExecutionReference, type HandoffPayload, MAX_TASK_GRAPH_DEPENDENCIES, MAX_TASK_GRAPH_NODES, MAX_TASK_INBOX_PENDING, type MessageWaitingTask, type NeedsHumanTask, type ProcessTaskMessageOptions, type ProcessTaskMessageResult, type RecordTaskEffectInput, type RejectionDecision, type ResolveTaskEffectInput, type ResumeTaskWorkInput, type RootTaskOrigin, type SendTaskMessageInput, type SetTaskGraphDependenciesInput, type StandardTaskMessageProtocol, type SucceededTask, type Task, type TaskApproval, TaskAttemptConflictError, type TaskEffect, type TaskEffectKey, type TaskEffectLookupInput, type TaskEffectReference, type TaskEffectStore, type TaskGraph, TaskGraphConflictError, type TaskGraphNode, type TaskGraphNodeRef, type TaskGraphStore, type TaskId, type TaskInbox, type TaskKind, type TaskMessage, type TaskMessageAction, TaskMessageAuthorizationError, type TaskMessageAuthorizationInput, type TaskMessageAuthorize, type TaskMessageClaim, TaskMessageConflictError, type TaskMessageDiscard, type TaskMessageEffectKeyInput, TaskMessageError, type TaskMessageForProtocol, type TaskMessageId, TaskMessageLeaseError, type TaskMessageLookupInput, type TaskMessageOperationId, type TaskMessagePrincipal, type TaskMessageProcessing, type TaskMessageProcessingStores, type TaskMessageProtocol, type TaskMessageProtocolBinding, type TaskMessageProtocolBindingInput, type TaskMessageProtocolInput, type TaskMessageProtocolInputPayload, type TaskMessageProtocolStoredPayload, type TaskMessageProtocols, type TaskMessageRecipientInput, type TaskMessageSendInput, TaskMessageSourceFenceError, type TaskMessageStore, type TaskOrigin, type TaskPatch, type TaskQuestion, type TaskState, type TaskTransitionArguments, type TaskTransitionOptions, type TaskUsage, type TaskWorkCompletionFence, type TaskWorkStore, type TaskWorkStores, type TaskWorkUsage, type WaitForTaskMessagesInput, allowByDefaultApprovalPolicy, answerEventSchema, answerIdSchema, approvalPolicySchema, approvalPrioritySchema, approvalRuleSchema, assertTaskAdmission, assignmentPayloadSchema, assignmentTaskMessageProtocol, createApprovalAccess, createDefaultTaskMessageProtocols, createTaskEffectStore, createTaskGraphStore, createTaskMessageStore, createTaskWorkStore, defineTaskMessageProtocol, defineTaskMessageProtocols, executionReferenceSchema, handoffPayloadSchema, handoffTaskMessageProtocol, harnessSchema, isMessageWaitingTask, isNeedsHumanTask, isSucceededTask, parseTaskMessageProtocolBinding, processTaskMessage, readTaskMessageDecision, requiresApproval, sendTaskMessageInputSchema, standardTaskKinds, standardTaskMessageProtocols, taskApprovalSchema, taskBoundMessagePolicy, taskEffectKeySchema, taskEffectReferenceSchema, taskEffectSchema, taskExecutionRepositoryIdsSchema, taskGraphAdmissionSchema, taskGraphDependenciesSchema, taskGraphNodeSchema, taskGraphSchema, taskIdSchema, taskInboxSchema, taskInitialState, taskKindSchema, taskMessageClaimSchema, taskMessageDiscardSchema, taskMessageIdSchema, taskMessageInput, taskMessageOperationIdSchema, taskMessagePrincipalSchema, taskMessageProcessingSchema, taskMessageProtocolBindingSchema, taskMessageProtocolSchema, taskMessageReservationSchema, taskMessageSchema, taskOriginSchema, taskQuestionSchema, taskSchema, taskStateSchema, taskTransitions, taskUsageSchema };
|
package/dist/tasks.mjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { answerIdSchema, taskIdSchema } from "./schema/id.mjs";
|
|
2
|
+
import { executionReferenceSchema, harnessSchema, isMessageWaitingTask, isNeedsHumanTask, isSucceededTask, standardTaskKinds, taskApprovalSchema, taskExecutionRepositoryIdsSchema, taskKindSchema, taskOriginSchema, taskQuestionSchema, taskSchema, taskStateSchema, taskUsageSchema } from "./schema/task.mjs";
|
|
3
|
+
import { allowByDefaultApprovalPolicy, approvalPolicySchema, approvalPrioritySchema, approvalRuleSchema, requiresApproval } from "./approval.mjs";
|
|
4
|
+
import { taskInitialState, taskTransitions } from "./schema/transitions.mjs";
|
|
5
|
+
import { ApprovalAccessError, createApprovalAccess } from "./approval-access.mjs";
|
|
6
|
+
import { answerEventSchema } from "./schema/answer.mjs";
|
|
7
|
+
import { MAX_TASK_GRAPH_DEPENDENCIES, MAX_TASK_GRAPH_NODES, taskGraphAdmissionSchema, taskGraphDependenciesSchema, taskGraphNodeSchema, taskGraphSchema } from "./schema/task-graph.mjs";
|
|
8
|
+
import { MAX_TASK_INBOX_PENDING, defineTaskMessageProtocol, defineTaskMessageProtocols, parseTaskMessageProtocolBinding, sendTaskMessageInputSchema, taskInboxSchema, taskMessageClaimSchema, taskMessageDiscardSchema, taskMessageIdSchema, taskMessageInput, taskMessageOperationIdSchema, taskMessagePrincipalSchema, taskMessageProcessingSchema, taskMessageProtocolBindingSchema, taskMessageProtocolSchema, taskMessageReservationSchema, taskMessageSchema } from "./schema/task-message.mjs";
|
|
9
|
+
import { taskEffectKeySchema, taskEffectReferenceSchema, taskEffectSchema } from "./schema/task-effect.mjs";
|
|
10
|
+
import { TaskGraphConflictError, assertTaskAdmission, createTaskGraphStore } from "./store/task-graphs.mjs";
|
|
11
|
+
import { TaskMessageAuthorizationError, TaskMessageConflictError, TaskMessageError, TaskMessageLeaseError, TaskMessageSourceFenceError, createTaskMessageStore, taskBoundMessagePolicy } from "./store/task-messages.mjs";
|
|
12
|
+
import { createTaskWorkStore } from "./store/task-work.mjs";
|
|
13
|
+
import { createTaskEffectStore } from "./store/task-effects.mjs";
|
|
14
|
+
import { processTaskMessage, readTaskMessageDecision } from "./task-message-processing.mjs";
|
|
15
|
+
import { assignmentPayloadSchema, assignmentTaskMessageProtocol, createDefaultTaskMessageProtocols, handoffPayloadSchema, handoffTaskMessageProtocol, standardTaskMessageProtocols } from "./task-protocols.mjs";
|
|
16
|
+
import { AnswerEventConflictError, ApprovalError, TaskAttemptConflictError } from "./store/engine.mjs";
|
|
17
|
+
export { AnswerEventConflictError, ApprovalAccessError, ApprovalError, MAX_TASK_GRAPH_DEPENDENCIES, MAX_TASK_GRAPH_NODES, MAX_TASK_INBOX_PENDING, TaskAttemptConflictError, TaskGraphConflictError, TaskMessageAuthorizationError, TaskMessageConflictError, TaskMessageError, TaskMessageLeaseError, TaskMessageSourceFenceError, allowByDefaultApprovalPolicy, answerEventSchema, answerIdSchema, approvalPolicySchema, approvalPrioritySchema, approvalRuleSchema, assertTaskAdmission, assignmentPayloadSchema, assignmentTaskMessageProtocol, createApprovalAccess, createDefaultTaskMessageProtocols, createTaskEffectStore, createTaskGraphStore, createTaskMessageStore, createTaskWorkStore, defineTaskMessageProtocol, defineTaskMessageProtocols, executionReferenceSchema, handoffPayloadSchema, handoffTaskMessageProtocol, harnessSchema, isMessageWaitingTask, isNeedsHumanTask, isSucceededTask, parseTaskMessageProtocolBinding, processTaskMessage, readTaskMessageDecision, requiresApproval, sendTaskMessageInputSchema, standardTaskKinds, standardTaskMessageProtocols, taskApprovalSchema, taskBoundMessagePolicy, taskEffectKeySchema, taskEffectReferenceSchema, taskEffectSchema, taskExecutionRepositoryIdsSchema, taskGraphAdmissionSchema, taskGraphDependenciesSchema, taskGraphNodeSchema, taskGraphSchema, taskIdSchema, taskInboxSchema, taskInitialState, taskKindSchema, taskMessageClaimSchema, taskMessageDiscardSchema, taskMessageIdSchema, taskMessageInput, taskMessageOperationIdSchema, taskMessagePrincipalSchema, taskMessageProcessingSchema, taskMessageProtocolBindingSchema, taskMessageProtocolSchema, taskMessageReservationSchema, taskMessageSchema, taskOriginSchema, taskQuestionSchema, taskSchema, taskStateSchema, taskTransitions, taskUsageSchema };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { RepositorySlug } from "./schema/repository.mjs";
|
|
2
|
+
import { GitHubGitTransport } from "./github-transfer.mjs";
|
|
3
|
+
import { NetworkPolicy, Sandbox } from "@vercel/sandbox";
|
|
4
|
+
//#region src/vercel-git.d.ts
|
|
5
|
+
type TrustedGitSandbox = Pick<Sandbox, "cwd" | "runCommand" | "writeFiles" | "readFile" | "updateNetworkPolicy" | "stop">;
|
|
6
|
+
/** Exact creation request for a fresh Vercel-managed trusted Git publication Sandbox. */
|
|
7
|
+
interface VercelManagedGitHubSandboxCreateInput {
|
|
8
|
+
source: {
|
|
9
|
+
type: "git";
|
|
10
|
+
url: string;
|
|
11
|
+
};
|
|
12
|
+
__source_credentials: true;
|
|
13
|
+
__commitAs: {
|
|
14
|
+
name: string;
|
|
15
|
+
email: string;
|
|
16
|
+
};
|
|
17
|
+
networkPolicy: NetworkPolicy;
|
|
18
|
+
persistent: false;
|
|
19
|
+
resources: {
|
|
20
|
+
vcpus: 6;
|
|
21
|
+
};
|
|
22
|
+
runtime: "node24";
|
|
23
|
+
timeout: number;
|
|
24
|
+
}
|
|
25
|
+
/** Repository and access level used to mint one trusted Git transport token. */
|
|
26
|
+
interface VercelGitHubTokenInput {
|
|
27
|
+
repository: RepositorySlug;
|
|
28
|
+
access: "read" | "write";
|
|
29
|
+
}
|
|
30
|
+
/** Configures fresh trusted sandboxes and repository-scoped Git tokens. */
|
|
31
|
+
interface VercelGitHubGitTransportOptions {
|
|
32
|
+
/** Reads must mint contents:read credentials; writes are confined to the supplied repository. */
|
|
33
|
+
token(input: VercelGitHubTokenInput): Promise<string>;
|
|
34
|
+
/** Creates a fresh sandbox, without a snapshot, repository, or running agent. */
|
|
35
|
+
createSandbox?: () => Promise<TrustedGitSandbox>;
|
|
36
|
+
}
|
|
37
|
+
/** Configures Vercel-managed Git reads and signed publication. */
|
|
38
|
+
interface VercelManagedGitHubGitTransportOptions {
|
|
39
|
+
/** Attribution metadata supplied for managed signed commits. */
|
|
40
|
+
commitIdentity: {
|
|
41
|
+
name: string;
|
|
42
|
+
email: string;
|
|
43
|
+
};
|
|
44
|
+
/** Creates one unnamed Sandbox from the exact managed credential request. */
|
|
45
|
+
createSandbox?: (input: VercelManagedGitHubSandboxCreateInput) => Promise<TrustedGitSandbox>;
|
|
46
|
+
}
|
|
47
|
+
/** Transfer Git objects through fresh trusted sandboxes; credentials never reach an agent sandbox. */
|
|
48
|
+
declare function createVercelGitHubGitTransport(options: VercelGitHubGitTransportOptions): GitHubGitTransport;
|
|
49
|
+
/** Use fresh Vercel-managed trusted Sandboxes for Git reads and signed publication. */
|
|
50
|
+
declare function createVercelManagedGitHubGitTransport(options: VercelManagedGitHubGitTransportOptions): GitHubGitTransport;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { VercelGitHubGitTransportOptions, VercelGitHubTokenInput, VercelManagedGitHubGitTransportOptions, VercelManagedGitHubSandboxCreateInput, createVercelGitHubGitTransport, createVercelManagedGitHubGitTransport };
|
|
53
|
+
//# sourceMappingURL=vercel-git.d.mts.map
|