@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,140 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { Sandbox } from "@vercel/sandbox";
|
|
3
|
+
//#region src/sandbox/task-environment.ts
|
|
4
|
+
const livenessByStatus = {
|
|
5
|
+
pending: "transitioning",
|
|
6
|
+
running: "live",
|
|
7
|
+
stopping: "terminal",
|
|
8
|
+
stopped: "terminal",
|
|
9
|
+
failed: "terminal",
|
|
10
|
+
aborted: "terminal",
|
|
11
|
+
snapshotting: "terminal"
|
|
12
|
+
};
|
|
13
|
+
function observe(sandbox) {
|
|
14
|
+
const liveness = livenessByStatus[sandbox.status];
|
|
15
|
+
if (liveness === void 0) throw new Error("Unsupported sandbox liveness state");
|
|
16
|
+
return {
|
|
17
|
+
sandbox,
|
|
18
|
+
liveness
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const discoveryTagKey = "factoryTask";
|
|
22
|
+
const defaultSeededMarker = "/workspace/.factory-seeded";
|
|
23
|
+
const defaultBridgePorts = [4e3];
|
|
24
|
+
/** Derive a deterministic provider sandbox name from a scoped Task-attempt identity. */
|
|
25
|
+
function taskSandboxName(key, scope) {
|
|
26
|
+
return `factory-task-${createHash("sha256").update(`${scope}:${key.taskId}:${key.attempt}`).digest("hex").slice(0, 16)}`;
|
|
27
|
+
}
|
|
28
|
+
/** Build the complete tag set used to discover and re-verify a Task sandbox. */
|
|
29
|
+
function taskSandboxTags(key, scope) {
|
|
30
|
+
return {
|
|
31
|
+
[discoveryTagKey]: taskSandboxName(key, scope),
|
|
32
|
+
factoryScope: createHash("sha256").update(scope).digest("hex").slice(0, 16),
|
|
33
|
+
factoryTaskId: key.taskId,
|
|
34
|
+
factoryTaskAttempt: String(key.attempt)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function verifyTags(key, scope, name, tags) {
|
|
38
|
+
const expected = taskSandboxTags(key, scope);
|
|
39
|
+
if (name !== taskSandboxName(key, scope) || tags?.[discoveryTagKey] !== expected[discoveryTagKey] || tags?.factoryScope !== expected.factoryScope || tags?.factoryTaskId !== expected.factoryTaskId || tags?.factoryTaskAttempt !== expected.factoryTaskAttempt) throw new Error(`Sandbox ${name} does not carry the identity of Task ${key.taskId} attempt ${key.attempt}`);
|
|
40
|
+
}
|
|
41
|
+
async function isSeeded(sandbox, marker) {
|
|
42
|
+
return (await sandbox.runCommand({
|
|
43
|
+
cmd: "test",
|
|
44
|
+
args: ["-f", marker],
|
|
45
|
+
timeoutMs: 1e4
|
|
46
|
+
})).exitCode === 0;
|
|
47
|
+
}
|
|
48
|
+
async function markSeeded(sandbox, marker) {
|
|
49
|
+
await sandbox.writeFiles([{
|
|
50
|
+
path: marker,
|
|
51
|
+
content: "seeded"
|
|
52
|
+
}]);
|
|
53
|
+
}
|
|
54
|
+
/** Create or recover the exact sandbox for a Task attempt and ensure seeding completed. */
|
|
55
|
+
async function ensureTaskSandbox(key, options) {
|
|
56
|
+
const api = options.api ?? Sandbox;
|
|
57
|
+
const name = taskSandboxName(key, options.scope);
|
|
58
|
+
const seededMarker = options.seededMarker ?? defaultSeededMarker;
|
|
59
|
+
const sandbox = await api.getOrCreate({
|
|
60
|
+
name,
|
|
61
|
+
runtime: options.runtime ?? "node24",
|
|
62
|
+
ports: [...options.ports ?? defaultBridgePorts],
|
|
63
|
+
timeout: options.timeoutMs,
|
|
64
|
+
tags: taskSandboxTags(key, options.scope),
|
|
65
|
+
async onCreate(created) {
|
|
66
|
+
await options.seed(created);
|
|
67
|
+
await markSeeded(created, seededMarker);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
verifyTags(key, options.scope, sandbox.name, sandbox.tags);
|
|
71
|
+
if (!await isSeeded(sandbox, seededMarker)) {
|
|
72
|
+
await options.seed(sandbox);
|
|
73
|
+
await markSeeded(sandbox, seededMarker);
|
|
74
|
+
}
|
|
75
|
+
return sandbox;
|
|
76
|
+
}
|
|
77
|
+
/** Discover an existing Task sandbox without resuming or replacing it. */
|
|
78
|
+
async function findTaskSandbox(key, options) {
|
|
79
|
+
const api = options.api ?? Sandbox;
|
|
80
|
+
const name = taskSandboxName(key, options.scope);
|
|
81
|
+
const matches = await api.list({
|
|
82
|
+
tags: { [discoveryTagKey]: name },
|
|
83
|
+
limit: 2
|
|
84
|
+
});
|
|
85
|
+
if (matches.sandboxes.length === 0) return null;
|
|
86
|
+
if (matches.sandboxes.length > 1 || matches.pagination.next) throw new Error(`More than one sandbox matches Task ${key.taskId} attempt ${key.attempt}; refusing to select one`);
|
|
87
|
+
const candidate = matches.sandboxes[0];
|
|
88
|
+
verifyTags(key, options.scope, candidate.name, candidate.tags);
|
|
89
|
+
let sandbox;
|
|
90
|
+
try {
|
|
91
|
+
sandbox = await api.get({
|
|
92
|
+
name: candidate.name,
|
|
93
|
+
resume: false
|
|
94
|
+
});
|
|
95
|
+
} catch (error) {
|
|
96
|
+
if (isMissing(error)) return null;
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
verifyTags(key, options.scope, sandbox.name, sandbox.tags);
|
|
100
|
+
return sandbox;
|
|
101
|
+
}
|
|
102
|
+
/** Stop a live Task sandbox idempotently while treating provider disappearance as success. */
|
|
103
|
+
async function stopTaskSandbox(sandbox) {
|
|
104
|
+
if (observe(sandbox).liveness === "terminal") return;
|
|
105
|
+
try {
|
|
106
|
+
await sandbox.stop();
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (!isMissing(error)) throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function isMissing(error) {
|
|
112
|
+
return typeof error === "object" && error !== null && ("status" in error && error.status === 404 || "response" in error && error.response instanceof Response && error.response.status === 404);
|
|
113
|
+
}
|
|
114
|
+
/** Adapt scoped Vercel Sandbox creation and discovery to the execution-environment contract. */
|
|
115
|
+
function createTaskSandboxEnvironment(options) {
|
|
116
|
+
return {
|
|
117
|
+
name: (key) => taskSandboxName(key, options.scope),
|
|
118
|
+
ensure: (key, { timeoutMs, request }) => ensureTaskSandbox(key, {
|
|
119
|
+
scope: options.scope,
|
|
120
|
+
timeoutMs,
|
|
121
|
+
seed: (sandbox) => options.seed(request, sandbox),
|
|
122
|
+
...options.runtime ? { runtime: options.runtime } : {},
|
|
123
|
+
...options.ports ? { ports: options.ports } : {},
|
|
124
|
+
...options.seededMarker ? { seededMarker: options.seededMarker } : {},
|
|
125
|
+
api: options.api
|
|
126
|
+
}).then(observe),
|
|
127
|
+
find: async (key) => {
|
|
128
|
+
const sandbox = await findTaskSandbox(key, {
|
|
129
|
+
scope: options.scope,
|
|
130
|
+
api: options.api
|
|
131
|
+
});
|
|
132
|
+
return sandbox ? observe(sandbox) : null;
|
|
133
|
+
},
|
|
134
|
+
stop: stopTaskSandbox
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
export { createTaskSandboxEnvironment, ensureTaskSandbox, findTaskSandbox, stopTaskSandbox, taskSandboxName, taskSandboxTags };
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=task-environment.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-environment.mjs","names":[],"sources":["../../src/sandbox/task-environment.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { Sandbox } from \"@vercel/sandbox\";\nimport type { CodingExecutionRequest, TaskAttemptRef } from \"../schema/execution\";\nimport type { ExecutionEnvironment, EnvironmentLiveness } from \"./execution-environment\";\n\nconst livenessByStatus: Record<Sandbox[\"status\"], EnvironmentLiveness> = {\n pending: \"transitioning\",\n running: \"live\",\n stopping: \"terminal\",\n stopped: \"terminal\",\n failed: \"terminal\",\n aborted: \"terminal\",\n snapshotting: \"terminal\",\n};\n\nfunction observe(sandbox: Sandbox) {\n const liveness = livenessByStatus[sandbox.status];\n if (liveness === undefined) throw new Error(\"Unsupported sandbox liveness state\");\n return { sandbox, liveness };\n}\n\n/** Isolates stores that reuse Task IDs within the project's shared sandbox namespace. */\nexport interface TaskSandboxScope {\n scope: string;\n}\n\n/** Injectable subset of the Vercel Sandbox API used for creation and exact identity discovery. */\nexport type SandboxApi = Pick<typeof Sandbox, \"getOrCreate\" | \"get\" | \"list\">;\n\nconst discoveryTagKey = \"factoryTask\";\nconst defaultSeededMarker = \"/workspace/.factory-seeded\";\n// The harness bridge listens on port 4000.\nconst defaultBridgePorts = [4000];\n\n/** Derive a deterministic provider sandbox name from a scoped Task-attempt identity. */\nexport function taskSandboxName(key: TaskAttemptRef, scope: string): string {\n const digest = createHash(\"sha256\")\n .update(`${scope}:${key.taskId}:${key.attempt}`)\n .digest(\"hex\")\n .slice(0, 16);\n return `factory-task-${digest}`;\n}\n\n/** Build the complete tag set used to discover and re-verify a Task sandbox. */\nexport function taskSandboxTags(key: TaskAttemptRef, scope: string): Record<string, string> {\n return {\n [discoveryTagKey]: taskSandboxName(key, scope),\n factoryScope: createHash(\"sha256\").update(scope).digest(\"hex\").slice(0, 16),\n factoryTaskId: key.taskId,\n factoryTaskAttempt: String(key.attempt),\n };\n}\n\nfunction verifyTags(\n key: TaskAttemptRef,\n scope: string,\n name: string,\n tags: Record<string, string> | undefined,\n) {\n const expected = taskSandboxTags(key, scope);\n if (\n name !== taskSandboxName(key, scope) ||\n tags?.[discoveryTagKey] !== expected[discoveryTagKey] ||\n tags?.factoryScope !== expected.factoryScope ||\n tags?.factoryTaskId !== expected.factoryTaskId ||\n tags?.factoryTaskAttempt !== expected.factoryTaskAttempt\n ) {\n throw new Error(\n `Sandbox ${name} does not carry the identity of Task ${key.taskId} attempt ${key.attempt}`,\n );\n }\n}\n\nasync function isSeeded(sandbox: Sandbox, marker: string): Promise<boolean> {\n const command = await sandbox.runCommand({\n cmd: \"test\",\n args: [\"-f\", marker],\n timeoutMs: 10_000,\n });\n return command.exitCode === 0;\n}\n\nasync function markSeeded(sandbox: Sandbox, marker: string): Promise<void> {\n await sandbox.writeFiles([{ path: marker, content: \"seeded\" }]);\n}\n\n/** Configures idempotent creation and workspace seeding for a Task sandbox. */\nexport interface EnsureTaskSandboxOptions extends TaskSandboxScope {\n /** Sandbox lifetime; callers add margin over the execution timeout. */\n timeoutMs: number;\n /** Seeds the workspace; must be idempotent because a crashed seed reruns. */\n seed(sandbox: Sandbox): Promise<void>;\n runtime?: string;\n ports?: readonly number[];\n seededMarker?: string;\n api?: SandboxApi;\n}\n\n/** Create or recover the exact sandbox for a Task attempt and ensure seeding completed. */\nexport async function ensureTaskSandbox(\n key: TaskAttemptRef,\n options: EnsureTaskSandboxOptions,\n): Promise<Sandbox> {\n const api = options.api ?? Sandbox;\n const name = taskSandboxName(key, options.scope);\n const seededMarker = options.seededMarker ?? defaultSeededMarker;\n const sandbox = await api.getOrCreate({\n name,\n runtime: options.runtime ?? \"node24\",\n ports: [...(options.ports ?? defaultBridgePorts)],\n timeout: options.timeoutMs,\n tags: taskSandboxTags(key, options.scope),\n async onCreate(created) {\n await options.seed(created);\n await markSeeded(created, seededMarker);\n },\n });\n verifyTags(key, options.scope, sandbox.name, sandbox.tags);\n // onCreate can crash between creation and the marker; finish seeding here.\n if (!(await isSeeded(sandbox, seededMarker))) {\n await options.seed(sandbox);\n await markSeeded(sandbox, seededMarker);\n }\n return sandbox;\n}\n\n/** Scope and provider API used to discover an existing Task sandbox. */\nexport interface FindTaskSandboxOptions extends TaskSandboxScope {\n api?: SandboxApi;\n}\n\n/** Discover an existing Task sandbox without resuming or replacing it. */\nexport async function findTaskSandbox(\n key: TaskAttemptRef,\n options: FindTaskSandboxOptions,\n): Promise<Sandbox | null> {\n const api = options.api ?? Sandbox;\n const name = taskSandboxName(key, options.scope);\n // The Sandbox API accepts only one tag filter; all tags are re-verified below.\n const matches = await api.list({ tags: { [discoveryTagKey]: name }, limit: 2 });\n if (matches.sandboxes.length === 0) return null;\n if (matches.sandboxes.length > 1 || matches.pagination.next) {\n throw new Error(\n `More than one sandbox matches Task ${key.taskId} attempt ${key.attempt}; refusing to select one`,\n );\n }\n const candidate = matches.sandboxes[0]!;\n verifyTags(key, options.scope, candidate.name, candidate.tags);\n let sandbox: Sandbox;\n try {\n sandbox = await api.get({ name: candidate.name, resume: false });\n } catch (error) {\n if (isMissing(error)) return null;\n throw error;\n }\n verifyTags(key, options.scope, sandbox.name, sandbox.tags);\n return sandbox;\n}\n\n/** Stop a live Task sandbox idempotently while treating provider disappearance as success. */\nexport async function stopTaskSandbox(sandbox: Sandbox): Promise<void> {\n if (observe(sandbox).liveness === \"terminal\") return;\n try {\n await sandbox.stop();\n } catch (error) {\n if (!isMissing(error)) throw error;\n }\n}\n\nfunction isMissing(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n ((\"status\" in error && error.status === 404) ||\n (\"response\" in error && error.response instanceof Response && error.response.status === 404))\n );\n}\n\n/** Scoped creation, seeding, and provider dependencies for a Task sandbox environment. */\nexport interface TaskSandboxEnvironmentOptions {\n /** Deployment- or run-unique namespace; see {@link TaskSandboxScope}. */\n scope: string;\n seed(request: CodingExecutionRequest, sandbox: Sandbox): Promise<void>;\n runtime?: EnsureTaskSandboxOptions[\"runtime\"];\n ports?: readonly number[];\n seededMarker?: string;\n api?: SandboxApi;\n}\n\n/** Adapt scoped Vercel Sandbox creation and discovery to the execution-environment contract. */\nexport function createTaskSandboxEnvironment(\n options: TaskSandboxEnvironmentOptions,\n): ExecutionEnvironment<Sandbox> {\n return {\n name: (key) => taskSandboxName(key, options.scope),\n ensure: (key, { timeoutMs, request }) =>\n ensureTaskSandbox(key, {\n scope: options.scope,\n timeoutMs,\n seed: (sandbox) => options.seed(request, sandbox),\n ...(options.runtime ? { runtime: options.runtime } : {}),\n ...(options.ports ? { ports: options.ports } : {}),\n ...(options.seededMarker ? { seededMarker: options.seededMarker } : {}),\n api: options.api,\n }).then(observe),\n find: async (key) => {\n const sandbox = await findTaskSandbox(key, { scope: options.scope, api: options.api });\n return sandbox ? observe(sandbox) : null;\n },\n stop: stopTaskSandbox,\n };\n}\n"],"mappings":";;;AAKA,MAAM,mBAAmE;CACvE,SAAS;CACT,SAAS;CACT,UAAU;CACV,SAAS;CACT,QAAQ;CACR,SAAS;CACT,cAAc;AAChB;AAEA,SAAS,QAAQ,SAAkB;CACjC,MAAM,WAAW,iBAAiB,QAAQ;CAC1C,IAAI,aAAa,KAAA,GAAW,MAAM,IAAI,MAAM,oCAAoC;CAChF,OAAO;EAAE;EAAS;CAAS;AAC7B;AAUA,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAE5B,MAAM,qBAAqB,CAAC,GAAI;;AAGhC,SAAgB,gBAAgB,KAAqB,OAAuB;CAK1E,OAAO,gBAJQ,WAAW,QAAQ,CAAC,CAChC,OAAO,GAAG,MAAM,GAAG,IAAI,OAAO,GAAG,IAAI,SAAS,CAAC,CAC/C,OAAO,KAAK,CAAC,CACb,MAAM,GAAG,EACgB;AAC9B;;AAGA,SAAgB,gBAAgB,KAAqB,OAAuC;CAC1F,OAAO;GACJ,kBAAkB,gBAAgB,KAAK,KAAK;EAC7C,cAAc,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;EAC1E,eAAe,IAAI;EACnB,oBAAoB,OAAO,IAAI,OAAO;CACxC;AACF;AAEA,SAAS,WACP,KACA,OACA,MACA,MACA;CACA,MAAM,WAAW,gBAAgB,KAAK,KAAK;CAC3C,IACE,SAAS,gBAAgB,KAAK,KAAK,KACnC,OAAO,qBAAqB,SAAS,oBACrC,MAAM,iBAAiB,SAAS,gBAChC,MAAM,kBAAkB,SAAS,iBACjC,MAAM,uBAAuB,SAAS,oBAEtC,MAAM,IAAI,MACR,WAAW,KAAK,uCAAuC,IAAI,OAAO,WAAW,IAAI,SACnF;AAEJ;AAEA,eAAe,SAAS,SAAkB,QAAkC;CAM1E,QAAO,MALe,QAAQ,WAAW;EACvC,KAAK;EACL,MAAM,CAAC,MAAM,MAAM;EACnB,WAAW;CACb,CAAC,EAAA,CACc,aAAa;AAC9B;AAEA,eAAe,WAAW,SAAkB,QAA+B;CACzE,MAAM,QAAQ,WAAW,CAAC;EAAE,MAAM;EAAQ,SAAS;CAAS,CAAC,CAAC;AAChE;;AAeA,eAAsB,kBACpB,KACA,SACkB;CAClB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,OAAO,gBAAgB,KAAK,QAAQ,KAAK;CAC/C,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,MAAM,UAAU,MAAM,IAAI,YAAY;EACpC;EACA,SAAS,QAAQ,WAAW;EAC5B,OAAO,CAAC,GAAI,QAAQ,SAAS,kBAAmB;EAChD,SAAS,QAAQ;EACjB,MAAM,gBAAgB,KAAK,QAAQ,KAAK;EACxC,MAAM,SAAS,SAAS;GACtB,MAAM,QAAQ,KAAK,OAAO;GAC1B,MAAM,WAAW,SAAS,YAAY;EACxC;CACF,CAAC;CACD,WAAW,KAAK,QAAQ,OAAO,QAAQ,MAAM,QAAQ,IAAI;CAEzD,IAAI,CAAE,MAAM,SAAS,SAAS,YAAY,GAAI;EAC5C,MAAM,QAAQ,KAAK,OAAO;EAC1B,MAAM,WAAW,SAAS,YAAY;CACxC;CACA,OAAO;AACT;;AAQA,eAAsB,gBACpB,KACA,SACyB;CACzB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,OAAO,gBAAgB,KAAK,QAAQ,KAAK;CAE/C,MAAM,UAAU,MAAM,IAAI,KAAK;EAAE,MAAM,GAAG,kBAAkB,KAAK;EAAG,OAAO;CAAE,CAAC;CAC9E,IAAI,QAAQ,UAAU,WAAW,GAAG,OAAO;CAC3C,IAAI,QAAQ,UAAU,SAAS,KAAK,QAAQ,WAAW,MACrD,MAAM,IAAI,MACR,sCAAsC,IAAI,OAAO,WAAW,IAAI,QAAQ,yBAC1E;CAEF,MAAM,YAAY,QAAQ,UAAU;CACpC,WAAW,KAAK,QAAQ,OAAO,UAAU,MAAM,UAAU,IAAI;CAC7D,IAAI;CACJ,IAAI;EACF,UAAU,MAAM,IAAI,IAAI;GAAE,MAAM,UAAU;GAAM,QAAQ;EAAM,CAAC;CACjE,SAAS,OAAO;EACd,IAAI,UAAU,KAAK,GAAG,OAAO;EAC7B,MAAM;CACR;CACA,WAAW,KAAK,QAAQ,OAAO,QAAQ,MAAM,QAAQ,IAAI;CACzD,OAAO;AACT;;AAGA,eAAsB,gBAAgB,SAAiC;CACrE,IAAI,QAAQ,OAAO,CAAC,CAAC,aAAa,YAAY;CAC9C,IAAI;EACF,MAAM,QAAQ,KAAK;CACrB,SAAS,OAAO;EACd,IAAI,CAAC,UAAU,KAAK,GAAG,MAAM;CAC/B;AACF;AAEA,SAAS,UAAU,OAAyB;CAC1C,OACE,OAAO,UAAU,YACjB,UAAU,SACR,YAAY,SAAS,MAAM,WAAW,OACrC,cAAc,SAAS,MAAM,oBAAoB,YAAY,MAAM,SAAS,WAAW;AAE9F;;AAcA,SAAgB,6BACd,SAC+B;CAC/B,OAAO;EACL,OAAO,QAAQ,gBAAgB,KAAK,QAAQ,KAAK;EACjD,SAAS,KAAK,EAAE,WAAW,cACzB,kBAAkB,KAAK;GACrB,OAAO,QAAQ;GACf;GACA,OAAO,YAAY,QAAQ,KAAK,SAAS,OAAO;GAChD,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;GACtD,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;GAChD,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;GACrE,KAAK,QAAQ;EACf,CAAC,CAAC,CAAC,KAAK,OAAO;EACjB,MAAM,OAAO,QAAQ;GACnB,MAAM,UAAU,MAAM,gBAAgB,KAAK;IAAE,OAAO,QAAQ;IAAO,KAAK,QAAQ;GAAI,CAAC;GACrF,OAAO,UAAU,QAAQ,OAAO,IAAI;EACtC;EACA,MAAM;CACR;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/sandbox/workspace.d.ts
|
|
3
|
+
declare const outputPathSchema: z.core.$ZodBranded<z.ZodString, "SandboxOutputPath", "out">;
|
|
4
|
+
/** An absolute, normalized artifact path confined to the configured sandbox output directory. */
|
|
5
|
+
type SandboxOutputPath = z.infer<typeof outputPathSchema>;
|
|
6
|
+
/** Current working directory reported by a sandbox session. */
|
|
7
|
+
interface SandboxSession {
|
|
8
|
+
cwd: string;
|
|
9
|
+
}
|
|
10
|
+
/** Minimal sandbox session boundary needed to derive workspace paths. */
|
|
11
|
+
interface SandboxWorkspaceHandle {
|
|
12
|
+
currentSession(): SandboxSession;
|
|
13
|
+
}
|
|
14
|
+
/** Standard repository, output, and artifact paths inside a harness workspace. */
|
|
15
|
+
interface HarnessWorkspace {
|
|
16
|
+
root: string;
|
|
17
|
+
repo: string;
|
|
18
|
+
out: string;
|
|
19
|
+
artifacts: string;
|
|
20
|
+
}
|
|
21
|
+
/** File existence, symlinks, and read limits are checked by the sandbox reader. */
|
|
22
|
+
declare function parseSandboxOutputPath(value: unknown, outputDirectory: string): SandboxOutputPath;
|
|
23
|
+
/** Default harness SDK working directory beneath the sandbox session root. */
|
|
24
|
+
declare const defaultHarnessWorkDir = "workspace";
|
|
25
|
+
/** Resolve the standard repository, output, and artifact paths for a harness workspace. */
|
|
26
|
+
declare function harnessWorkspace(sandbox: SandboxWorkspaceHandle): HarnessWorkspace;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { HarnessWorkspace, SandboxOutputPath, SandboxSession, SandboxWorkspaceHandle, defaultHarnessWorkDir, harnessWorkspace, parseSandboxOutputPath };
|
|
29
|
+
//# sourceMappingURL=workspace.d.mts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { posix } from "node:path";
|
|
3
|
+
//#region src/sandbox/workspace.ts
|
|
4
|
+
const outputPathSchema = z.string().refine((value) => posix.isAbsolute(value) && posix.normalize(value) === value && !value.includes("\0"), "Artifact paths must stay inside the captured workspace output").brand();
|
|
5
|
+
/** File existence, symlinks, and read limits are checked by the sandbox reader. */
|
|
6
|
+
function parseSandboxOutputPath(value, outputDirectory) {
|
|
7
|
+
const path = outputPathSchema.parse(value);
|
|
8
|
+
if (!path.startsWith(`${outputDirectory}/`)) throw new Error("Artifact paths must stay inside the captured workspace output");
|
|
9
|
+
return path;
|
|
10
|
+
}
|
|
11
|
+
/** Default harness SDK working directory beneath the sandbox session root. */
|
|
12
|
+
const defaultHarnessWorkDir = "workspace";
|
|
13
|
+
/** Resolve the standard repository, output, and artifact paths for a harness workspace. */
|
|
14
|
+
function harnessWorkspace(sandbox) {
|
|
15
|
+
const cwd = sandbox.currentSession().cwd;
|
|
16
|
+
if (!posix.isAbsolute(cwd)) throw new Error("The sandbox working directory must be absolute");
|
|
17
|
+
const root = posix.join(cwd, defaultHarnessWorkDir);
|
|
18
|
+
return {
|
|
19
|
+
root,
|
|
20
|
+
repo: posix.join(root, "repo"),
|
|
21
|
+
out: posix.join(root, "out"),
|
|
22
|
+
artifacts: posix.join(root, "artifacts")
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { defaultHarnessWorkDir, harnessWorkspace, parseSandboxOutputPath };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=workspace.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.mjs","names":[],"sources":["../../src/sandbox/workspace.ts"],"sourcesContent":["import { posix } from \"node:path\";\nimport { z } from \"zod\";\n\nconst outputPathSchema = z\n .string()\n .refine(\n (value) => posix.isAbsolute(value) && posix.normalize(value) === value && !value.includes(\"\\0\"),\n \"Artifact paths must stay inside the captured workspace output\",\n )\n .brand<\"SandboxOutputPath\">();\n\n/** An absolute, normalized artifact path confined to the configured sandbox output directory. */\nexport type SandboxOutputPath = z.infer<typeof outputPathSchema>;\n\n/** Current working directory reported by a sandbox session. */\nexport interface SandboxSession {\n cwd: string;\n}\n\n/** Minimal sandbox session boundary needed to derive workspace paths. */\nexport interface SandboxWorkspaceHandle {\n currentSession(): SandboxSession;\n}\n\n/** Standard repository, output, and artifact paths inside a harness workspace. */\nexport interface HarnessWorkspace {\n root: string;\n repo: string;\n out: string;\n artifacts: string;\n}\n\n/** File existence, symlinks, and read limits are checked by the sandbox reader. */\nexport function parseSandboxOutputPath(value: unknown, outputDirectory: string): SandboxOutputPath {\n const path = outputPathSchema.parse(value);\n if (!path.startsWith(`${outputDirectory}/`))\n throw new Error(\"Artifact paths must stay inside the captured workspace output\");\n return path;\n}\n\n/** Default harness SDK working directory beneath the sandbox session root. */\nexport const defaultHarnessWorkDir = \"workspace\";\n\n/** Resolve the standard repository, output, and artifact paths for a harness workspace. */\nexport function harnessWorkspace(sandbox: SandboxWorkspaceHandle): HarnessWorkspace {\n const cwd = sandbox.currentSession().cwd;\n if (!posix.isAbsolute(cwd)) throw new Error(\"The sandbox working directory must be absolute\");\n const root = posix.join(cwd, defaultHarnessWorkDir);\n return {\n root,\n repo: posix.join(root, \"repo\"),\n out: posix.join(root, \"out\"),\n artifacts: posix.join(root, \"artifacts\"),\n };\n}\n"],"mappings":";;;AAGA,MAAM,mBAAmB,EACtB,OAAO,CAAC,CACR,QACE,UAAU,MAAM,WAAW,KAAK,KAAK,MAAM,UAAU,KAAK,MAAM,SAAS,CAAC,MAAM,SAAS,IAAI,GAC9F,+DACF,CAAC,CACA,MAA2B;;AAwB9B,SAAgB,uBAAuB,OAAgB,iBAA4C;CACjG,MAAM,OAAO,iBAAiB,MAAM,KAAK;CACzC,IAAI,CAAC,KAAK,WAAW,GAAG,gBAAgB,EAAE,GACxC,MAAM,IAAI,MAAM,+DAA+D;CACjF,OAAO;AACT;;AAGA,MAAa,wBAAwB;;AAGrC,SAAgB,iBAAiB,SAAmD;CAClF,MAAM,MAAM,QAAQ,eAAe,CAAC,CAAC;CACrC,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG,MAAM,IAAI,MAAM,gDAAgD;CAC5F,MAAM,OAAO,MAAM,KAAK,KAAK,qBAAqB;CAClD,OAAO;EACL;EACA,MAAM,MAAM,KAAK,MAAM,MAAM;EAC7B,KAAK,MAAM,KAAK,MAAM,KAAK;EAC3B,WAAW,MAAM,KAAK,MAAM,WAAW;CACzC;AACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/schema/agent-route.d.ts
|
|
3
|
+
/** Validates an exact agent-route identity used for lookup and persisted recovery. */
|
|
4
|
+
declare const agentRouteBindingSchema: z.core.$ZodBranded<z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
version: z.ZodNumber;
|
|
7
|
+
}, z.core.$strict>, "AgentRouteBinding", "out">;
|
|
8
|
+
/** Exact identifier and version selecting one registered agent route. */
|
|
9
|
+
type AgentRouteBinding<Id extends string = string, Version extends number = number> = z.infer<typeof agentRouteBindingSchema> & {
|
|
10
|
+
readonly id: Id;
|
|
11
|
+
readonly version: Version;
|
|
12
|
+
};
|
|
13
|
+
/** Plain identifier and version accepted when constructing an agent-route binding. */
|
|
14
|
+
interface AgentRouteBindingInput<Id extends string = string, Version extends number = number> {
|
|
15
|
+
readonly id: Id;
|
|
16
|
+
readonly version: Version;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates and brands an exact agent-route binding while preserving literal identity.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* This creates an identity value only; it does not prove that the route is registered. Resolve it
|
|
23
|
+
* through `defineAgentRoutes(...).get(binding)` or let dispatch compare it with the Task's stored
|
|
24
|
+
* route. Both ID and version are required, so recovery never selects an implicit latest version.
|
|
25
|
+
*
|
|
26
|
+
* @param input - Plain route ID and positive exact version.
|
|
27
|
+
* @returns A validated binding retaining the input's literal ID and version types.
|
|
28
|
+
* @throws A Zod validation error when either field is invalid.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { parseAgentRouteBinding } from "@vercel/factory/workflows";
|
|
33
|
+
*
|
|
34
|
+
* const route = parseAgentRouteBinding({ id: "incident-worker", version: 1 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
declare function parseAgentRouteBinding<const Input extends AgentRouteBindingInput>(input: Input): AgentRouteBinding<Input["id"], Input["version"]>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { AgentRouteBinding, AgentRouteBindingInput, agentRouteBindingSchema, parseAgentRouteBinding };
|
|
40
|
+
//# sourceMappingURL=agent-route.d.mts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/schema/agent-route.ts
|
|
3
|
+
/** Validates an exact agent-route identity used for lookup and persisted recovery. */
|
|
4
|
+
const agentRouteBindingSchema = z.strictObject({
|
|
5
|
+
id: z.string().regex(/^[a-z][a-z0-9-]{0,63}$/u).describe("Stable route identifier selected by a workflow."),
|
|
6
|
+
version: z.number().int().positive().describe("Exact positive version of the selected route.")
|
|
7
|
+
}).describe("Exact agent-route identity; lookup never defaults or selects a latest version.").brand();
|
|
8
|
+
/**
|
|
9
|
+
* Validates and brands an exact agent-route binding while preserving literal identity.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* This creates an identity value only; it does not prove that the route is registered. Resolve it
|
|
13
|
+
* through `defineAgentRoutes(...).get(binding)` or let dispatch compare it with the Task's stored
|
|
14
|
+
* route. Both ID and version are required, so recovery never selects an implicit latest version.
|
|
15
|
+
*
|
|
16
|
+
* @param input - Plain route ID and positive exact version.
|
|
17
|
+
* @returns A validated binding retaining the input's literal ID and version types.
|
|
18
|
+
* @throws A Zod validation error when either field is invalid.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { parseAgentRouteBinding } from "@vercel/factory/workflows";
|
|
23
|
+
*
|
|
24
|
+
* const route = parseAgentRouteBinding({ id: "incident-worker", version: 1 });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function parseAgentRouteBinding(input) {
|
|
28
|
+
return agentRouteBindingSchema.parse(input);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { agentRouteBindingSchema, parseAgentRouteBinding };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=agent-route.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-route.mjs","names":[],"sources":["../../src/schema/agent-route.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Validates an exact agent-route identity used for lookup and persisted recovery. */\nexport const agentRouteBindingSchema = z\n .strictObject({\n id: z\n .string()\n .regex(/^[a-z][a-z0-9-]{0,63}$/u)\n .describe(\"Stable route identifier selected by a workflow.\"),\n version: z.number().int().positive().describe(\"Exact positive version of the selected route.\"),\n })\n .describe(\"Exact agent-route identity; lookup never defaults or selects a latest version.\")\n .brand<\"AgentRouteBinding\">();\n\n/** Exact identifier and version selecting one registered agent route. */\nexport type AgentRouteBinding<\n Id extends string = string,\n Version extends number = number,\n> = z.infer<typeof agentRouteBindingSchema> & {\n readonly id: Id;\n readonly version: Version;\n};\n\n/** Plain identifier and version accepted when constructing an agent-route binding. */\nexport interface AgentRouteBindingInput<\n Id extends string = string,\n Version extends number = number,\n> {\n readonly id: Id;\n readonly version: Version;\n}\n\n/**\n * Validates and brands an exact agent-route binding while preserving literal identity.\n *\n * @remarks\n * This creates an identity value only; it does not prove that the route is registered. Resolve it\n * through `defineAgentRoutes(...).get(binding)` or let dispatch compare it with the Task's stored\n * route. Both ID and version are required, so recovery never selects an implicit latest version.\n *\n * @param input - Plain route ID and positive exact version.\n * @returns A validated binding retaining the input's literal ID and version types.\n * @throws A Zod validation error when either field is invalid.\n *\n * @example\n * ```ts\n * import { parseAgentRouteBinding } from \"@vercel/factory/workflows\";\n *\n * const route = parseAgentRouteBinding({ id: \"incident-worker\", version: 1 });\n * ```\n */\nexport function parseAgentRouteBinding<const Input extends AgentRouteBindingInput>(\n input: Input,\n): AgentRouteBinding<Input[\"id\"], Input[\"version\"]> {\n return agentRouteBindingSchema.parse(input) as AgentRouteBinding<Input[\"id\"], Input[\"version\"]>;\n}\n"],"mappings":";;;AAGA,MAAa,0BAA0B,EACpC,aAAa;CACZ,IAAI,EACD,OAAO,CAAC,CACR,MAAM,yBAAyB,CAAC,CAChC,SAAS,iDAAiD;CAC7D,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+CAA+C;AAC/F,CAAC,CAAC,CACD,SAAS,gFAAgF,CAAC,CAC1F,MAA2B;;;;;;;;;;;;;;;;;;;;AAuC9B,SAAgB,uBACd,OACkD;CAClD,OAAO,wBAAwB,MAAM,KAAK;AAC5C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/schema/answer.d.ts
|
|
3
|
+
/** Validates an immutable authenticated answer to a workflow QuestionTask. */
|
|
4
|
+
declare const answerEventSchema: z.ZodObject<{
|
|
5
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
6
|
+
id: z.ZodType<`ans_${string}`, string, z.core.$ZodTypeInternals<`ans_${string}`, string>>;
|
|
7
|
+
questionTaskId: z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>;
|
|
8
|
+
parentTaskId: z.ZodOptional<z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>>;
|
|
9
|
+
repositoryIds: z.ZodReadonly<z.ZodTuple<[z.ZodType<`repo_${string}`, string, z.core.$ZodTypeInternals<`repo_${string}`, string>>], z.ZodType<`repo_${string}`, string, z.core.$ZodTypeInternals<`repo_${string}`, string>>>>;
|
|
10
|
+
replyTo: z.ZodObject<{
|
|
11
|
+
channel: z.ZodString;
|
|
12
|
+
address: z.ZodString;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
question: z.ZodString;
|
|
15
|
+
answer: z.ZodString;
|
|
16
|
+
answeredBy: z.ZodString;
|
|
17
|
+
recordedAt: z.ZodISODateTime;
|
|
18
|
+
}, z.core.$strict>;
|
|
19
|
+
/** Immutable authenticated answer projected onto a question and its parent Task. */
|
|
20
|
+
type AnswerEvent = z.infer<typeof answerEventSchema>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { AnswerEvent, answerEventSchema };
|
|
23
|
+
//# sourceMappingURL=answer.d.mts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { answerIdSchema, repositoryIdsSchema, taskIdSchema } from "./id.mjs";
|
|
2
|
+
import { isoDateTimeSchema, replyToSchema, schemaVersionSchema } from "./common.mjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/schema/answer.ts
|
|
5
|
+
/** Validates an immutable authenticated answer to a workflow QuestionTask. */
|
|
6
|
+
const answerEventSchema = z.strictObject({
|
|
7
|
+
schemaVersion: schemaVersionSchema,
|
|
8
|
+
id: answerIdSchema,
|
|
9
|
+
questionTaskId: taskIdSchema,
|
|
10
|
+
parentTaskId: taskIdSchema.optional(),
|
|
11
|
+
repositoryIds: repositoryIdsSchema,
|
|
12
|
+
replyTo: replyToSchema,
|
|
13
|
+
question: z.string().min(1),
|
|
14
|
+
answer: z.string().min(1).max(4e3),
|
|
15
|
+
answeredBy: z.string().min(1),
|
|
16
|
+
recordedAt: isoDateTimeSchema
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
export { answerEventSchema };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=answer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer.mjs","names":[],"sources":["../../src/schema/answer.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { isoDateTimeSchema, replyToSchema, schemaVersionSchema } from \"./common\";\nimport { answerIdSchema, repositoryIdsSchema, taskIdSchema } from \"./id\";\n\n/** Validates an immutable authenticated answer to a workflow QuestionTask. */\nexport const answerEventSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: answerIdSchema,\n questionTaskId: taskIdSchema,\n parentTaskId: taskIdSchema.optional(),\n repositoryIds: repositoryIdsSchema,\n replyTo: replyToSchema,\n question: z.string().min(1),\n answer: z.string().min(1).max(4000),\n answeredBy: z.string().min(1),\n recordedAt: isoDateTimeSchema,\n});\n\n/** Immutable authenticated answer projected onto a question and its parent Task. */\nexport type AnswerEvent = z.infer<typeof answerEventSchema>;\n"],"mappings":";;;;;AAKA,MAAa,oBAAoB,EAAE,aAAa;CAC9C,eAAe;CACf,IAAI;CACJ,gBAAgB;CAChB,cAAc,aAAa,SAAS;CACpC,eAAe;CACf,SAAS;CACT,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAI;CAClC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,YAAY;AACd,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/schema/budget.d.ts
|
|
3
|
+
/** UTC calendar month key in `YYYY-MM` form. */
|
|
4
|
+
type BudgetMonth = `${number}-${"01" | "02" | "03" | "04" | "05" | "06" | "07" | "08" | "09" | "10" | "11" | "12"}`;
|
|
5
|
+
/** Validates the UTC calendar month key used for a Factory budget. */
|
|
6
|
+
declare const budgetMonthSchema: z.ZodType<BudgetMonth, string>;
|
|
7
|
+
/** Validates Factory-wide, investigative, per-Task, and optional repository spending limits. */
|
|
8
|
+
declare const budgetLimitsSchema: z.ZodReadonly<z.ZodObject<{
|
|
9
|
+
totalUsd: z.ZodNumber;
|
|
10
|
+
investigationUsd: z.ZodNumber;
|
|
11
|
+
perTaskReservationUsd: z.ZodNumber;
|
|
12
|
+
warningPercent: z.ZodNumber;
|
|
13
|
+
perRepositoryUsd: z.ZodOptional<z.ZodReadonly<z.ZodRecord<z.ZodType<`${string}/${string}`, string, z.core.$ZodTypeInternals<`${string}/${string}`, string>>, z.ZodNumber>>>;
|
|
14
|
+
}, z.core.$strict>>;
|
|
15
|
+
/** Validates one persisted monthly Factory budget and its emitted-notice state. */
|
|
16
|
+
declare const budgetSchema: z.ZodReadonly<z.ZodObject<{
|
|
17
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
18
|
+
factoryId: z.ZodType<`fac_${string}`, string, z.core.$ZodTypeInternals<`fac_${string}`, string>>;
|
|
19
|
+
month: z.ZodType<`${number}-01` | `${number}-02` | `${number}-03` | `${number}-04` | `${number}-05` | `${number}-06` | `${number}-07` | `${number}-08` | `${number}-09` | `${number}-10` | `${number}-11` | `${number}-12`, string, z.core.$ZodTypeInternals<`${number}-01` | `${number}-02` | `${number}-03` | `${number}-04` | `${number}-05` | `${number}-06` | `${number}-07` | `${number}-08` | `${number}-09` | `${number}-10` | `${number}-11` | `${number}-12`, string>>;
|
|
20
|
+
limits: z.ZodReadonly<z.ZodObject<{
|
|
21
|
+
totalUsd: z.ZodNumber;
|
|
22
|
+
investigationUsd: z.ZodNumber;
|
|
23
|
+
perTaskReservationUsd: z.ZodNumber;
|
|
24
|
+
warningPercent: z.ZodNumber;
|
|
25
|
+
perRepositoryUsd: z.ZodOptional<z.ZodReadonly<z.ZodRecord<z.ZodType<`${string}/${string}`, string, z.core.$ZodTypeInternals<`${string}/${string}`, string>>, z.ZodNumber>>>;
|
|
26
|
+
}, z.core.$strict>>;
|
|
27
|
+
notices: z.ZodReadonly<z.ZodObject<{
|
|
28
|
+
warningAt: z.ZodOptional<z.ZodISODateTime>;
|
|
29
|
+
exhaustedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
30
|
+
}, z.core.$strict>>;
|
|
31
|
+
}, z.core.$strict>>;
|
|
32
|
+
/** Spending limits and warning threshold enforced for a monthly Factory budget. */
|
|
33
|
+
type BudgetLimits = z.infer<typeof budgetLimitsSchema>;
|
|
34
|
+
/** Persisted monthly Factory budget configuration and notice state. */
|
|
35
|
+
type Budget = z.infer<typeof budgetSchema>;
|
|
36
|
+
//#endregion
|
|
37
|
+
export { Budget, BudgetLimits, BudgetMonth, budgetLimitsSchema, budgetMonthSchema, budgetSchema };
|
|
38
|
+
//# sourceMappingURL=budget.d.mts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { factoryIdSchema } from "./id.mjs";
|
|
2
|
+
import { isoDateTimeSchema, schemaVersionSchema, usdSchema } from "./common.mjs";
|
|
3
|
+
import { repositorySlugSchema } from "./repository.mjs";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
//#region src/schema/budget.ts
|
|
6
|
+
/** Validates the UTC calendar month key used for a Factory budget. */
|
|
7
|
+
const budgetMonthSchema = z.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/u, "Expected a UTC calendar month in YYYY-MM form");
|
|
8
|
+
/** Validates Factory-wide, investigative, per-Task, and optional repository spending limits. */
|
|
9
|
+
const budgetLimitsSchema = z.strictObject({
|
|
10
|
+
totalUsd: usdSchema,
|
|
11
|
+
investigationUsd: usdSchema,
|
|
12
|
+
perTaskReservationUsd: usdSchema,
|
|
13
|
+
warningPercent: z.number().int().min(1).max(100),
|
|
14
|
+
perRepositoryUsd: z.record(repositorySlugSchema, usdSchema).readonly().optional()
|
|
15
|
+
}).readonly();
|
|
16
|
+
/** Validates one persisted monthly Factory budget and its emitted-notice state. */
|
|
17
|
+
const budgetSchema = z.strictObject({
|
|
18
|
+
schemaVersion: schemaVersionSchema,
|
|
19
|
+
factoryId: factoryIdSchema,
|
|
20
|
+
month: budgetMonthSchema,
|
|
21
|
+
limits: budgetLimitsSchema,
|
|
22
|
+
notices: z.strictObject({
|
|
23
|
+
warningAt: isoDateTimeSchema.optional(),
|
|
24
|
+
exhaustedAt: isoDateTimeSchema.optional()
|
|
25
|
+
}).readonly()
|
|
26
|
+
}).readonly();
|
|
27
|
+
//#endregion
|
|
28
|
+
export { budgetLimitsSchema, budgetMonthSchema, budgetSchema };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=budget.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.mjs","names":[],"sources":["../../src/schema/budget.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { isoDateTimeSchema, schemaVersionSchema, usdSchema } from \"./common\";\nimport { factoryIdSchema } from \"./id\";\nimport { repositorySlugSchema } from \"./repository\";\n\n/** UTC calendar month key in `YYYY-MM` form. */\nexport type BudgetMonth = `${number}-${\n | \"01\"\n | \"02\"\n | \"03\"\n | \"04\"\n | \"05\"\n | \"06\"\n | \"07\"\n | \"08\"\n | \"09\"\n | \"10\"\n | \"11\"\n | \"12\"}`;\n\n/** Validates the UTC calendar month key used for a Factory budget. */\nexport const budgetMonthSchema = z\n .string()\n .regex(/^\\d{4}-(0[1-9]|1[0-2])$/u, \"Expected a UTC calendar month in YYYY-MM form\") as z.ZodType<\n BudgetMonth,\n string\n>;\n\n/** Validates Factory-wide, investigative, per-Task, and optional repository spending limits. */\nexport const budgetLimitsSchema = z\n .strictObject({\n totalUsd: usdSchema,\n investigationUsd: usdSchema,\n perTaskReservationUsd: usdSchema,\n warningPercent: z.number().int().min(1).max(100),\n perRepositoryUsd: z.record(repositorySlugSchema, usdSchema).readonly().optional(),\n })\n .readonly();\n\n/** Validates one persisted monthly Factory budget and its emitted-notice state. */\nexport const budgetSchema = z\n .strictObject({\n schemaVersion: schemaVersionSchema,\n factoryId: factoryIdSchema,\n month: budgetMonthSchema,\n limits: budgetLimitsSchema,\n notices: z\n .strictObject({\n warningAt: isoDateTimeSchema.optional(),\n exhaustedAt: isoDateTimeSchema.optional(),\n })\n .readonly(),\n })\n .readonly();\n\n/** Spending limits and warning threshold enforced for a monthly Factory budget. */\nexport type BudgetLimits = z.infer<typeof budgetLimitsSchema>;\n/** Persisted monthly Factory budget configuration and notice state. */\nexport type Budget = z.infer<typeof budgetSchema>;\n"],"mappings":";;;;;;AAqBA,MAAa,oBAAoB,EAC9B,OAAO,CAAC,CACR,MAAM,4BAA4B,+CAA+C;;AAMpF,MAAa,qBAAqB,EAC/B,aAAa;CACZ,UAAU;CACV,kBAAkB;CAClB,uBAAuB;CACvB,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;CAC/C,kBAAkB,EAAE,OAAO,sBAAsB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;AAClF,CAAC,CAAC,CACD,SAAS;;AAGZ,MAAa,eAAe,EACzB,aAAa;CACZ,eAAe;CACf,WAAW;CACX,OAAO;CACP,QAAQ;CACR,SAAS,EACN,aAAa;EACZ,WAAW,kBAAkB,SAAS;EACtC,aAAa,kBAAkB,SAAS;CAC1C,CAAC,CAAC,CACD,SAAS;AACd,CAAC,CAAC,CACD,SAAS"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { isoDateTimeSchema, replyToSchema, schemaVersionSchema } from "./common.mjs";
|
|
2
|
+
import { externalSessionSchema, storedSessionSchema } from "./stored-session.mjs";
|
|
3
|
+
import { changeSchema } from "./change.mjs";
|
|
4
|
+
import { storedTaskSchema } from "./stored-task.mjs";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
//#region src/schema/catalog.ts
|
|
7
|
+
const shardSchema = z.string().regex(/^[0-9a-f]$/u);
|
|
8
|
+
const sourceVersionSchema = z.number().int().positive();
|
|
9
|
+
const repairSchema = z.strictObject({
|
|
10
|
+
id: z.string().min(1),
|
|
11
|
+
sourceVersion: sourceVersionSchema
|
|
12
|
+
});
|
|
13
|
+
/** Validates one fixed shard of the recoverable Task discovery index. */
|
|
14
|
+
const taskCatalogSchema = z.strictObject({
|
|
15
|
+
schemaVersion: schemaVersionSchema,
|
|
16
|
+
id: z.templateLiteral(["tasks-", shardSchema]),
|
|
17
|
+
entries: z.array(z.strictObject({
|
|
18
|
+
sourceVersion: sourceVersionSchema,
|
|
19
|
+
value: storedTaskSchema
|
|
20
|
+
})),
|
|
21
|
+
repairs: z.array(repairSchema).default([]),
|
|
22
|
+
updatedAt: isoDateTimeSchema
|
|
23
|
+
});
|
|
24
|
+
/** Validates one fixed shard of the recoverable Change discovery index. */
|
|
25
|
+
const changeCatalogSchema = z.strictObject({
|
|
26
|
+
schemaVersion: schemaVersionSchema,
|
|
27
|
+
id: z.templateLiteral(["changes-", shardSchema]),
|
|
28
|
+
entries: z.array(z.strictObject({
|
|
29
|
+
sourceVersion: sourceVersionSchema,
|
|
30
|
+
value: changeSchema
|
|
31
|
+
})),
|
|
32
|
+
repairs: z.array(repairSchema).default([]),
|
|
33
|
+
updatedAt: isoDateTimeSchema
|
|
34
|
+
});
|
|
35
|
+
/** Validates one fixed shard of the recoverable operator-session discovery index. */
|
|
36
|
+
const sessionCatalogSchema = z.strictObject({
|
|
37
|
+
schemaVersion: schemaVersionSchema,
|
|
38
|
+
id: z.templateLiteral(["sessions-", shardSchema]),
|
|
39
|
+
entries: z.array(z.strictObject({
|
|
40
|
+
sourceVersion: sourceVersionSchema,
|
|
41
|
+
value: storedSessionSchema
|
|
42
|
+
})),
|
|
43
|
+
repairs: z.array(repairSchema).default([]),
|
|
44
|
+
updatedAt: isoDateTimeSchema
|
|
45
|
+
});
|
|
46
|
+
/** Validates one fixed shard of the external-conversation discovery index. */
|
|
47
|
+
const externalSessionCatalogSchema = z.strictObject({
|
|
48
|
+
schemaVersion: schemaVersionSchema,
|
|
49
|
+
id: z.templateLiteral(["external-sessions-", shardSchema]),
|
|
50
|
+
entries: z.array(z.strictObject({
|
|
51
|
+
sourceVersion: sourceVersionSchema,
|
|
52
|
+
value: externalSessionSchema
|
|
53
|
+
})),
|
|
54
|
+
repairs: z.array(repairSchema).default([]),
|
|
55
|
+
updatedAt: isoDateTimeSchema
|
|
56
|
+
});
|
|
57
|
+
/** Validates the directly addressed Task index for one reply destination. */
|
|
58
|
+
const taskRouteSchema = z.strictObject({
|
|
59
|
+
schemaVersion: schemaVersionSchema,
|
|
60
|
+
id: z.string().regex(/^task-route_[a-z0-9]{6,64}$/u),
|
|
61
|
+
replyTo: replyToSchema,
|
|
62
|
+
entries: z.array(z.strictObject({
|
|
63
|
+
sourceVersion: sourceVersionSchema,
|
|
64
|
+
value: storedTaskSchema
|
|
65
|
+
})),
|
|
66
|
+
repairs: z.array(repairSchema).default([]),
|
|
67
|
+
updatedAt: isoDateTimeSchema
|
|
68
|
+
});
|
|
69
|
+
//#endregion
|
|
70
|
+
export { changeCatalogSchema, externalSessionCatalogSchema, sessionCatalogSchema, taskCatalogSchema, taskRouteSchema };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=catalog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.mjs","names":[],"sources":["../../src/schema/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { isoDateTimeSchema, replyToSchema, schemaVersionSchema } from \"./common\";\nimport { changeSchema } from \"./change\";\nimport { externalSessionSchema, storedSessionSchema } from \"./stored-session\";\nimport { storedTaskSchema } from \"./stored-task\";\n\nconst shardSchema = z.string().regex(/^[0-9a-f]$/u);\nconst sourceVersionSchema = z.number().int().positive();\nconst repairSchema = z.strictObject({\n id: z.string().min(1),\n sourceVersion: sourceVersionSchema,\n});\n\n/** Validates one fixed shard of the recoverable Task discovery index. */\nexport const taskCatalogSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z.templateLiteral([\"tasks-\", shardSchema]),\n entries: z.array(z.strictObject({ sourceVersion: sourceVersionSchema, value: storedTaskSchema })),\n repairs: z.array(repairSchema).default([]),\n updatedAt: isoDateTimeSchema,\n});\n\n/** Validates one fixed shard of the recoverable Change discovery index. */\nexport const changeCatalogSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z.templateLiteral([\"changes-\", shardSchema]),\n entries: z.array(z.strictObject({ sourceVersion: sourceVersionSchema, value: changeSchema })),\n repairs: z.array(repairSchema).default([]),\n updatedAt: isoDateTimeSchema,\n});\n\n/** Validates one fixed shard of the recoverable operator-session discovery index. */\nexport const sessionCatalogSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z.templateLiteral([\"sessions-\", shardSchema]),\n entries: z.array(\n z.strictObject({ sourceVersion: sourceVersionSchema, value: storedSessionSchema }),\n ),\n repairs: z.array(repairSchema).default([]),\n updatedAt: isoDateTimeSchema,\n});\n\n/** Validates one fixed shard of the external-conversation discovery index. */\nexport const externalSessionCatalogSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z.templateLiteral([\"external-sessions-\", shardSchema]),\n entries: z.array(\n z.strictObject({ sourceVersion: sourceVersionSchema, value: externalSessionSchema }),\n ),\n repairs: z.array(repairSchema).default([]),\n updatedAt: isoDateTimeSchema,\n});\n\n/** Validates the directly addressed Task index for one reply destination. */\nexport const taskRouteSchema = z.strictObject({\n schemaVersion: schemaVersionSchema,\n id: z.string().regex(/^task-route_[a-z0-9]{6,64}$/u),\n replyTo: replyToSchema,\n entries: z.array(z.strictObject({ sourceVersion: sourceVersionSchema, value: storedTaskSchema })),\n repairs: z.array(repairSchema).default([]),\n updatedAt: isoDateTimeSchema,\n});\n"],"mappings":";;;;;;AAMA,MAAM,cAAc,EAAE,OAAO,CAAC,CAAC,MAAM,aAAa;AAClD,MAAM,sBAAsB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;AACtD,MAAM,eAAe,EAAE,aAAa;CAClC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACpB,eAAe;AACjB,CAAC;;AAGD,MAAa,oBAAoB,EAAE,aAAa;CAC9C,eAAe;CACf,IAAI,EAAE,gBAAgB,CAAC,UAAU,WAAW,CAAC;CAC7C,SAAS,EAAE,MAAM,EAAE,aAAa;EAAE,eAAe;EAAqB,OAAO;CAAiB,CAAC,CAAC;CAChG,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzC,WAAW;AACb,CAAC;;AAGD,MAAa,sBAAsB,EAAE,aAAa;CAChD,eAAe;CACf,IAAI,EAAE,gBAAgB,CAAC,YAAY,WAAW,CAAC;CAC/C,SAAS,EAAE,MAAM,EAAE,aAAa;EAAE,eAAe;EAAqB,OAAO;CAAa,CAAC,CAAC;CAC5F,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzC,WAAW;AACb,CAAC;;AAGD,MAAa,uBAAuB,EAAE,aAAa;CACjD,eAAe;CACf,IAAI,EAAE,gBAAgB,CAAC,aAAa,WAAW,CAAC;CAChD,SAAS,EAAE,MACT,EAAE,aAAa;EAAE,eAAe;EAAqB,OAAO;CAAoB,CAAC,CACnF;CACA,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzC,WAAW;AACb,CAAC;;AAGD,MAAa,+BAA+B,EAAE,aAAa;CACzD,eAAe;CACf,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,WAAW,CAAC;CACzD,SAAS,EAAE,MACT,EAAE,aAAa;EAAE,eAAe;EAAqB,OAAO;CAAsB,CAAC,CACrF;CACA,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzC,WAAW;AACb,CAAC;;AAGD,MAAa,kBAAkB,EAAE,aAAa;CAC5C,eAAe;CACf,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,8BAA8B;CACnD,SAAS;CACT,SAAS,EAAE,MAAM,EAAE,aAAa;EAAE,eAAe;EAAqB,OAAO;CAAiB,CAAC,CAAC;CAChG,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzC,WAAW;AACb,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/schema/change.d.ts
|
|
3
|
+
/** Validates the shared ordinal scale used for risk and confidence. */
|
|
4
|
+
declare const changeLevelSchema: z.ZodEnum<{
|
|
5
|
+
low: "low";
|
|
6
|
+
medium: "medium";
|
|
7
|
+
high: "high";
|
|
8
|
+
}>;
|
|
9
|
+
/** Validates the durable lifecycle state of a pull-request Change. */
|
|
10
|
+
declare const changeStateSchema: z.ZodEnum<{
|
|
11
|
+
verifying: "verifying";
|
|
12
|
+
ready: "ready";
|
|
13
|
+
merged: "merged";
|
|
14
|
+
deployed: "deployed";
|
|
15
|
+
rolled_out: "rolled_out";
|
|
16
|
+
rolled_back: "rolled_back";
|
|
17
|
+
closed: "closed";
|
|
18
|
+
}>;
|
|
19
|
+
/** Validates the verification evidence used to assess a Change. */
|
|
20
|
+
declare const changeEvidenceSchema: z.ZodObject<{
|
|
21
|
+
reproVerified: z.ZodBoolean;
|
|
22
|
+
testsAdded: z.ZodNumber;
|
|
23
|
+
checksGreen: z.ZodBoolean;
|
|
24
|
+
attackPassed: z.ZodBoolean;
|
|
25
|
+
scopeMatches: z.ZodBoolean;
|
|
26
|
+
previewUrl: z.ZodOptional<z.ZodURL>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
/** Validates a persisted human-visible pull-request Change and its trust evidence. */
|
|
29
|
+
declare const changeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
30
|
+
state: z.ZodEnum<{
|
|
31
|
+
verifying: "verifying";
|
|
32
|
+
ready: "ready";
|
|
33
|
+
closed: "closed";
|
|
34
|
+
}>;
|
|
35
|
+
decidedBy: z.ZodOptional<z.ZodString>;
|
|
36
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
37
|
+
id: z.ZodType<`chg_${string}`, string, z.core.$ZodTypeInternals<`chg_${string}`, string>>;
|
|
38
|
+
repositoryId: z.ZodType<`repo_${string}`, string, z.core.$ZodTypeInternals<`repo_${string}`, string>>;
|
|
39
|
+
taskId: z.ZodOptional<z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>>;
|
|
40
|
+
groupId: z.ZodOptional<z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>>;
|
|
41
|
+
prNumber: z.ZodNumber;
|
|
42
|
+
prUrl: z.ZodURL;
|
|
43
|
+
author: z.ZodString;
|
|
44
|
+
risk: z.ZodEnum<{
|
|
45
|
+
low: "low";
|
|
46
|
+
medium: "medium";
|
|
47
|
+
high: "high";
|
|
48
|
+
}>;
|
|
49
|
+
confidence: z.ZodEnum<{
|
|
50
|
+
low: "low";
|
|
51
|
+
medium: "medium";
|
|
52
|
+
high: "high";
|
|
53
|
+
}>;
|
|
54
|
+
evidence: z.ZodObject<{
|
|
55
|
+
reproVerified: z.ZodBoolean;
|
|
56
|
+
testsAdded: z.ZodNumber;
|
|
57
|
+
checksGreen: z.ZodBoolean;
|
|
58
|
+
attackPassed: z.ZodBoolean;
|
|
59
|
+
scopeMatches: z.ZodBoolean;
|
|
60
|
+
previewUrl: z.ZodOptional<z.ZodURL>;
|
|
61
|
+
}, z.core.$strict>;
|
|
62
|
+
mergeSha: z.ZodOptional<z.ZodString>;
|
|
63
|
+
createdAt: z.ZodISODateTime;
|
|
64
|
+
updatedAt: z.ZodISODateTime;
|
|
65
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
66
|
+
state: z.ZodEnum<{
|
|
67
|
+
merged: "merged";
|
|
68
|
+
deployed: "deployed";
|
|
69
|
+
rolled_out: "rolled_out";
|
|
70
|
+
rolled_back: "rolled_back";
|
|
71
|
+
}>;
|
|
72
|
+
decidedBy: z.ZodString;
|
|
73
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
74
|
+
id: z.ZodType<`chg_${string}`, string, z.core.$ZodTypeInternals<`chg_${string}`, string>>;
|
|
75
|
+
repositoryId: z.ZodType<`repo_${string}`, string, z.core.$ZodTypeInternals<`repo_${string}`, string>>;
|
|
76
|
+
taskId: z.ZodOptional<z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>>;
|
|
77
|
+
groupId: z.ZodOptional<z.ZodType<`task_${string}`, string, z.core.$ZodTypeInternals<`task_${string}`, string>>>;
|
|
78
|
+
prNumber: z.ZodNumber;
|
|
79
|
+
prUrl: z.ZodURL;
|
|
80
|
+
author: z.ZodString;
|
|
81
|
+
risk: z.ZodEnum<{
|
|
82
|
+
low: "low";
|
|
83
|
+
medium: "medium";
|
|
84
|
+
high: "high";
|
|
85
|
+
}>;
|
|
86
|
+
confidence: z.ZodEnum<{
|
|
87
|
+
low: "low";
|
|
88
|
+
medium: "medium";
|
|
89
|
+
high: "high";
|
|
90
|
+
}>;
|
|
91
|
+
evidence: z.ZodObject<{
|
|
92
|
+
reproVerified: z.ZodBoolean;
|
|
93
|
+
testsAdded: z.ZodNumber;
|
|
94
|
+
checksGreen: z.ZodBoolean;
|
|
95
|
+
attackPassed: z.ZodBoolean;
|
|
96
|
+
scopeMatches: z.ZodBoolean;
|
|
97
|
+
previewUrl: z.ZodOptional<z.ZodURL>;
|
|
98
|
+
}, z.core.$strict>;
|
|
99
|
+
mergeSha: z.ZodOptional<z.ZodString>;
|
|
100
|
+
createdAt: z.ZodISODateTime;
|
|
101
|
+
updatedAt: z.ZodISODateTime;
|
|
102
|
+
}, z.core.$strict>], "state">;
|
|
103
|
+
/** Shared low-to-high ordinal value used for risk and confidence. */
|
|
104
|
+
type ChangeLevel = z.infer<typeof changeLevelSchema>;
|
|
105
|
+
/** Durable lifecycle state of a human-visible pull-request Change. */
|
|
106
|
+
type ChangeState = z.infer<typeof changeStateSchema>;
|
|
107
|
+
/** Verification facts supporting the risk and confidence assigned to a Change. */
|
|
108
|
+
type ChangeEvidence = z.infer<typeof changeEvidenceSchema>;
|
|
109
|
+
/** Persisted pull-request Change tracked independently from the Tasks that produced it. */
|
|
110
|
+
type Change = z.infer<typeof changeSchema>;
|
|
111
|
+
/** Change read model narrowed to one exact lifecycle state. */
|
|
112
|
+
type ChangeInState<State extends ChangeState> = Change & {
|
|
113
|
+
readonly state: State;
|
|
114
|
+
};
|
|
115
|
+
//#endregion
|
|
116
|
+
export { Change, ChangeEvidence, ChangeInState, ChangeLevel, ChangeState, changeEvidenceSchema, changeLevelSchema, changeSchema, changeStateSchema };
|
|
117
|
+
//# sourceMappingURL=change.d.mts.map
|