@canhta/dsh-autopilot 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +41 -0
- package/CONTEXT.md +39 -0
- package/LICENSE +21 -0
- package/README.md +95 -0
- package/cordis.patch.yml +13 -0
- package/deploy/dsh-autopilot.service +26 -0
- package/docs/CONTRIBUTING.md +60 -0
- package/docs/README.md +34 -0
- package/docs/agents/domain.md +7 -0
- package/docs/agents/issue-tracker.md +21 -0
- package/docs/agents/triage-labels.md +13 -0
- package/docs/assets/banner.png +0 -0
- package/docs/deployment.md +138 -0
- package/docs/engineering.md +43 -0
- package/docs/specs/execution.md +65 -0
- package/docs/specs/integrations.md +89 -0
- package/docs/specs/lifecycle.md +81 -0
- package/docs/specs/operations.md +89 -0
- package/docs/specs/plugin.md +49 -0
- package/docs/specs/providers.md +62 -0
- package/docs/specs/scope.md +35 -0
- package/docs/specs/ui-components.md +96 -0
- package/docs/specs/web-ui.md +64 -0
- package/lib/admission/cancellation-control.d.ts +11 -0
- package/lib/admission/cancellation-control.js +72 -0
- package/lib/admission/cancellation-control.js.map +1 -0
- package/lib/admission/candidates.d.ts +2 -0
- package/lib/admission/candidates.js +23 -0
- package/lib/admission/candidates.js.map +1 -0
- package/lib/admission/composition-claim.d.ts +10 -0
- package/lib/admission/composition-claim.js +13 -0
- package/lib/admission/composition-claim.js.map +1 -0
- package/lib/admission/constants.d.ts +12 -0
- package/lib/admission/constants.js +13 -0
- package/lib/admission/constants.js.map +1 -0
- package/lib/admission/deliveries.d.ts +6 -0
- package/lib/admission/deliveries.js +175 -0
- package/lib/admission/deliveries.js.map +1 -0
- package/lib/admission/delivery-control.d.ts +28 -0
- package/lib/admission/delivery-control.js +294 -0
- package/lib/admission/delivery-control.js.map +1 -0
- package/lib/admission/execution-control.d.ts +29 -0
- package/lib/admission/execution-control.js +177 -0
- package/lib/admission/execution-control.js.map +1 -0
- package/lib/admission/index.d.ts +4 -0
- package/lib/admission/index.js +4 -0
- package/lib/admission/index.js.map +1 -0
- package/lib/admission/model.d.ts +296 -0
- package/lib/admission/model.js +13 -0
- package/lib/admission/model.js.map +1 -0
- package/lib/admission/pause-control.d.ts +44 -0
- package/lib/admission/pause-control.js +220 -0
- package/lib/admission/pause-control.js.map +1 -0
- package/lib/admission/policy.d.ts +39 -0
- package/lib/admission/policy.js +238 -0
- package/lib/admission/policy.js.map +1 -0
- package/lib/admission/ports.d.ts +13 -0
- package/lib/admission/ports.js +2 -0
- package/lib/admission/ports.js.map +1 -0
- package/lib/admission/publication-control.d.ts +16 -0
- package/lib/admission/publication-control.js +153 -0
- package/lib/admission/publication-control.js.map +1 -0
- package/lib/admission/reconciler.d.ts +7 -0
- package/lib/admission/reconciler.js +121 -0
- package/lib/admission/reconciler.js.map +1 -0
- package/lib/admission/resume-control.d.ts +27 -0
- package/lib/admission/resume-control.js +213 -0
- package/lib/admission/resume-control.js.map +1 -0
- package/lib/admission/run-fence.d.ts +11 -0
- package/lib/admission/run-fence.js +49 -0
- package/lib/admission/run-fence.js.map +1 -0
- package/lib/admission/service.d.ts +130 -0
- package/lib/admission/service.js +415 -0
- package/lib/admission/service.js.map +1 -0
- package/lib/admission/state-domain.d.ts +11 -0
- package/lib/admission/state-domain.js +33 -0
- package/lib/admission/state-domain.js.map +1 -0
- package/lib/admission/state-integrity.d.ts +19 -0
- package/lib/admission/state-integrity.js +102 -0
- package/lib/admission/state-integrity.js.map +1 -0
- package/lib/admission/state-migration.d.ts +4 -0
- package/lib/admission/state-migration.js +46 -0
- package/lib/admission/state-migration.js.map +1 -0
- package/lib/admission/state.d.ts +4524 -0
- package/lib/admission/state.js +394 -0
- package/lib/admission/state.js.map +1 -0
- package/lib/admission.d.ts +1 -0
- package/lib/admission.js +2 -0
- package/lib/admission.js.map +1 -0
- package/lib/client-types/client/OperationsAtoms.d.ts +30 -0
- package/lib/client-types/client/OperationsPanel.d.ts +34 -0
- package/lib/client-types/client/RunsView.d.ts +14 -0
- package/lib/client-types/client/SettingsCapabilitySections.d.ts +16 -0
- package/lib/client-types/client/SettingsPanel.d.ts +40 -0
- package/lib/client-types/client/SettingsPolicySections.d.ts +13 -0
- package/lib/client-types/client/SettingsProviderSection.d.ts +21 -0
- package/lib/client-types/client/SummaryView.d.ts +10 -0
- package/lib/client-types/client/WorktreesView.d.ts +9 -0
- package/lib/client-types/client/index.d.ts +9 -0
- package/lib/client-types/client/locales/en.d.ts +154 -0
- package/lib/client-types/client/locales/index.d.ts +9 -0
- package/lib/client-types/client/locales/zh.d.ts +155 -0
- package/lib/client-types/client/settings-draft.d.ts +29 -0
- package/lib/client-types/client/state.d.ts +63 -0
- package/lib/client-types/code-host/index.d.ts +2 -0
- package/lib/client-types/code-host/model.d.ts +118 -0
- package/lib/client-types/code-host/registry.d.ts +23 -0
- package/lib/client-types/code-host/validation.d.ts +51 -0
- package/lib/client-types/code-host.d.ts +2 -0
- package/lib/client-types/config/index.d.ts +2 -0
- package/lib/client-types/config/settings.d.ts +51 -0
- package/lib/client-types/config.d.ts +2 -0
- package/lib/client-types/notification/index.d.ts +2 -0
- package/lib/client-types/notification/model.d.ts +57 -0
- package/lib/client-types/notification/registry.d.ts +16 -0
- package/lib/client-types/notification.d.ts +2 -0
- package/lib/client-types/providers/generation-registry.d.ts +20 -0
- package/lib/client-types/remote.d.ts +65 -0
- package/lib/client-types/tracker/index.d.ts +2 -0
- package/lib/client-types/tracker/model.d.ts +222 -0
- package/lib/client-types/tracker/registry.d.ts +49 -0
- package/lib/client-types/tracker/validation.d.ts +60 -0
- package/lib/client-types/tracker.d.ts +2 -0
- package/lib/client-types/web/contract.d.ts +958 -0
- package/lib/client.js +7961 -0
- package/lib/client.js.map +1 -0
- package/lib/code-host/index.d.ts +2 -0
- package/lib/code-host/index.js +3 -0
- package/lib/code-host/index.js.map +1 -0
- package/lib/code-host/model.d.ts +118 -0
- package/lib/code-host/model.js +23 -0
- package/lib/code-host/model.js.map +1 -0
- package/lib/code-host/registry.d.ts +23 -0
- package/lib/code-host/registry.js +90 -0
- package/lib/code-host/registry.js.map +1 -0
- package/lib/code-host/validation.d.ts +51 -0
- package/lib/code-host/validation.js +30 -0
- package/lib/code-host/validation.js.map +1 -0
- package/lib/code-host.d.ts +2 -0
- package/lib/code-host.js +3 -0
- package/lib/code-host.js.map +1 -0
- package/lib/config/index.d.ts +2 -0
- package/lib/config/index.js +3 -0
- package/lib/config/index.js.map +1 -0
- package/lib/config/settings.d.ts +51 -0
- package/lib/config/settings.js +195 -0
- package/lib/config/settings.js.map +1 -0
- package/lib/config.d.ts +2 -0
- package/lib/config.js +3 -0
- package/lib/config.js.map +1 -0
- package/lib/delivery/index.d.ts +1 -0
- package/lib/delivery/index.js +2 -0
- package/lib/delivery/index.js.map +1 -0
- package/lib/delivery/service.d.ts +29 -0
- package/lib/delivery/service.js +140 -0
- package/lib/delivery/service.js.map +1 -0
- package/lib/delivery.d.ts +2 -0
- package/lib/delivery.js +3 -0
- package/lib/delivery.js.map +1 -0
- package/lib/dispatch/composition.d.ts +18 -0
- package/lib/dispatch/composition.js +109 -0
- package/lib/dispatch/composition.js.map +1 -0
- package/lib/dispatch/contract.d.ts +2 -0
- package/lib/dispatch/contract.js +2 -0
- package/lib/dispatch/contract.js.map +1 -0
- package/lib/dispatch/execute.d.ts +10 -0
- package/lib/dispatch/execute.js +138 -0
- package/lib/dispatch/execute.js.map +1 -0
- package/lib/dispatch/execution-state.d.ts +12 -0
- package/lib/dispatch/execution-state.js +24 -0
- package/lib/dispatch/execution-state.js.map +1 -0
- package/lib/dispatch/git.d.ts +5 -0
- package/lib/dispatch/git.js +95 -0
- package/lib/dispatch/git.js.map +1 -0
- package/lib/dispatch/index.d.ts +2 -0
- package/lib/dispatch/index.js +2 -0
- package/lib/dispatch/index.js.map +1 -0
- package/lib/dispatch/report.d.ts +11 -0
- package/lib/dispatch/report.js +141 -0
- package/lib/dispatch/report.js.map +1 -0
- package/lib/dispatch/resume.d.ts +17 -0
- package/lib/dispatch/resume.js +89 -0
- package/lib/dispatch/resume.js.map +1 -0
- package/lib/dispatch/service.d.ts +56 -0
- package/lib/dispatch/service.js +231 -0
- package/lib/dispatch/service.js.map +1 -0
- package/lib/dispatch/usage.d.ts +10 -0
- package/lib/dispatch/usage.js +47 -0
- package/lib/dispatch/usage.js.map +1 -0
- package/lib/dispatch.d.ts +2 -0
- package/lib/dispatch.js +3 -0
- package/lib/dispatch.js.map +1 -0
- package/lib/github-code-host.d.ts +1 -0
- package/lib/github-code-host.js +2 -0
- package/lib/github-code-host.js.map +1 -0
- package/lib/github-issues.d.ts +1 -0
- package/lib/github-issues.js +2 -0
- package/lib/github-issues.js.map +1 -0
- package/lib/index.d.ts +21 -0
- package/lib/index.js +48 -0
- package/lib/index.js.map +1 -0
- package/lib/ingress.d.ts +2 -0
- package/lib/ingress.js +3 -0
- package/lib/ingress.js.map +1 -0
- package/lib/jira.d.ts +1 -0
- package/lib/jira.js +2 -0
- package/lib/jira.js.map +1 -0
- package/lib/mcp/contracts.d.ts +21 -0
- package/lib/mcp/contracts.js +33 -0
- package/lib/mcp/contracts.js.map +1 -0
- package/lib/mcp/cursor.d.ts +10 -0
- package/lib/mcp/cursor.js +68 -0
- package/lib/mcp/cursor.js.map +1 -0
- package/lib/mcp/definition.d.ts +8 -0
- package/lib/mcp/definition.js +43 -0
- package/lib/mcp/definition.js.map +1 -0
- package/lib/mcp/index.d.ts +6 -0
- package/lib/mcp/index.js +7 -0
- package/lib/mcp/index.js.map +1 -0
- package/lib/mcp/json.d.ts +4 -0
- package/lib/mcp/json.js +20 -0
- package/lib/mcp/json.js.map +1 -0
- package/lib/mcp/mount.d.ts +17 -0
- package/lib/mcp/mount.js +79 -0
- package/lib/mcp/mount.js.map +1 -0
- package/lib/mcp/read-tools.d.ts +27 -0
- package/lib/mcp/read-tools.js +149 -0
- package/lib/mcp/read-tools.js.map +1 -0
- package/lib/notification/index.d.ts +2 -0
- package/lib/notification/index.js +3 -0
- package/lib/notification/index.js.map +1 -0
- package/lib/notification/model.d.ts +57 -0
- package/lib/notification/model.js +20 -0
- package/lib/notification/model.js.map +1 -0
- package/lib/notification/registry.d.ts +16 -0
- package/lib/notification/registry.js +67 -0
- package/lib/notification/registry.js.map +1 -0
- package/lib/notification.d.ts +2 -0
- package/lib/notification.js +3 -0
- package/lib/notification.js.map +1 -0
- package/lib/ntfy-notification.d.ts +1 -0
- package/lib/ntfy-notification.js +2 -0
- package/lib/ntfy-notification.js.map +1 -0
- package/lib/operations/cleanup-inspector.d.ts +16 -0
- package/lib/operations/cleanup-inspector.js +132 -0
- package/lib/operations/cleanup-inspector.js.map +1 -0
- package/lib/operations/cleanup.d.ts +25 -0
- package/lib/operations/cleanup.js +151 -0
- package/lib/operations/cleanup.js.map +1 -0
- package/lib/operations/disposition.d.ts +46 -0
- package/lib/operations/disposition.js +89 -0
- package/lib/operations/disposition.js.map +1 -0
- package/lib/operations/health.d.ts +6 -0
- package/lib/operations/health.js +41 -0
- package/lib/operations/health.js.map +1 -0
- package/lib/operations/index.d.ts +6 -0
- package/lib/operations/index.js +7 -0
- package/lib/operations/index.js.map +1 -0
- package/lib/operations/inspection.d.ts +35 -0
- package/lib/operations/inspection.js +183 -0
- package/lib/operations/inspection.js.map +1 -0
- package/lib/operations/model.d.ts +77 -0
- package/lib/operations/model.js +2 -0
- package/lib/operations/model.js.map +1 -0
- package/lib/operations/recovery.d.ts +11 -0
- package/lib/operations/recovery.js +101 -0
- package/lib/operations/recovery.js.map +1 -0
- package/lib/operations/retention.d.ts +28 -0
- package/lib/operations/retention.js +105 -0
- package/lib/operations/retention.js.map +1 -0
- package/lib/operations/runtime-owner.d.ts +54 -0
- package/lib/operations/runtime-owner.js +281 -0
- package/lib/operations/runtime-owner.js.map +1 -0
- package/lib/operations/service.d.ts +55 -0
- package/lib/operations/service.js +154 -0
- package/lib/operations/service.js.map +1 -0
- package/lib/operations/state.d.ts +79 -0
- package/lib/operations/state.js +51 -0
- package/lib/operations/state.js.map +1 -0
- package/lib/operations/storage-composition.d.ts +16 -0
- package/lib/operations/storage-composition.js +61 -0
- package/lib/operations/storage-composition.js.map +1 -0
- package/lib/operations/store.d.ts +16 -0
- package/lib/operations/store.js +84 -0
- package/lib/operations/store.js.map +1 -0
- package/lib/operations.d.ts +2 -0
- package/lib/operations.js +3 -0
- package/lib/operations.js.map +1 -0
- package/lib/providers/generation-registry.d.ts +20 -0
- package/lib/providers/generation-registry.js +72 -0
- package/lib/providers/generation-registry.js.map +1 -0
- package/lib/providers/github-code-host/contracts.d.ts +224 -0
- package/lib/providers/github-code-host/contracts.js +144 -0
- package/lib/providers/github-code-host/contracts.js.map +1 -0
- package/lib/providers/github-code-host/index.d.ts +2 -0
- package/lib/providers/github-code-host/index.js +2 -0
- package/lib/providers/github-code-host/index.js.map +1 -0
- package/lib/providers/github-code-host/provider.d.ts +5 -0
- package/lib/providers/github-code-host/provider.js +289 -0
- package/lib/providers/github-code-host/provider.js.map +1 -0
- package/lib/providers/github-code-host/schemas.d.ts +81 -0
- package/lib/providers/github-code-host/schemas.js +39 -0
- package/lib/providers/github-code-host/schemas.js.map +1 -0
- package/lib/providers/github-code-host/settings.d.ts +16 -0
- package/lib/providers/github-code-host/settings.js +65 -0
- package/lib/providers/github-code-host/settings.js.map +1 -0
- package/lib/providers/github-issues/contracts.d.ts +151 -0
- package/lib/providers/github-issues/contracts.js +141 -0
- package/lib/providers/github-issues/contracts.js.map +1 -0
- package/lib/providers/github-issues/index.d.ts +1 -0
- package/lib/providers/github-issues/index.js +2 -0
- package/lib/providers/github-issues/index.js.map +1 -0
- package/lib/providers/github-issues/ingress.d.ts +8 -0
- package/lib/providers/github-issues/ingress.js +80 -0
- package/lib/providers/github-issues/ingress.js.map +1 -0
- package/lib/providers/github-issues/normalization.d.ts +11 -0
- package/lib/providers/github-issues/normalization.js +115 -0
- package/lib/providers/github-issues/normalization.js.map +1 -0
- package/lib/providers/github-issues/provider.d.ts +6 -0
- package/lib/providers/github-issues/provider.js +235 -0
- package/lib/providers/github-issues/provider.js.map +1 -0
- package/lib/providers/github-issues/schemas.d.ts +123 -0
- package/lib/providers/github-issues/schemas.js +58 -0
- package/lib/providers/github-issues/schemas.js.map +1 -0
- package/lib/providers/github-issues/settings.d.ts +27 -0
- package/lib/providers/github-issues/settings.js +154 -0
- package/lib/providers/github-issues/settings.js.map +1 -0
- package/lib/providers/jira/contracts.d.ts +193 -0
- package/lib/providers/jira/contracts.js +133 -0
- package/lib/providers/jira/contracts.js.map +1 -0
- package/lib/providers/jira/index.d.ts +1 -0
- package/lib/providers/jira/index.js +2 -0
- package/lib/providers/jira/index.js.map +1 -0
- package/lib/providers/jira/ingress.d.ts +4 -0
- package/lib/providers/jira/ingress.js +60 -0
- package/lib/providers/jira/ingress.js.map +1 -0
- package/lib/providers/jira/normalization.d.ts +8 -0
- package/lib/providers/jira/normalization.js +121 -0
- package/lib/providers/jira/normalization.js.map +1 -0
- package/lib/providers/jira/provider.d.ts +6 -0
- package/lib/providers/jira/provider.js +317 -0
- package/lib/providers/jira/provider.js.map +1 -0
- package/lib/providers/jira/schemas.d.ts +134 -0
- package/lib/providers/jira/schemas.js +76 -0
- package/lib/providers/jira/schemas.js.map +1 -0
- package/lib/providers/jira/settings.d.ts +32 -0
- package/lib/providers/jira/settings.js +163 -0
- package/lib/providers/jira/settings.js.map +1 -0
- package/lib/providers/notification-http.d.ts +13 -0
- package/lib/providers/notification-http.js +136 -0
- package/lib/providers/notification-http.js.map +1 -0
- package/lib/providers/ntfy-notification/index.d.ts +2 -0
- package/lib/providers/ntfy-notification/index.js +2 -0
- package/lib/providers/ntfy-notification/index.js.map +1 -0
- package/lib/providers/ntfy-notification/provider.d.ts +4 -0
- package/lib/providers/ntfy-notification/provider.js +89 -0
- package/lib/providers/ntfy-notification/provider.js.map +1 -0
- package/lib/providers/ntfy-notification/settings.d.ts +12 -0
- package/lib/providers/ntfy-notification/settings.js +34 -0
- package/lib/providers/ntfy-notification/settings.js.map +1 -0
- package/lib/providers/webhook-notification/index.d.ts +2 -0
- package/lib/providers/webhook-notification/index.js +2 -0
- package/lib/providers/webhook-notification/index.js.map +1 -0
- package/lib/providers/webhook-notification/provider.d.ts +4 -0
- package/lib/providers/webhook-notification/provider.js +57 -0
- package/lib/providers/webhook-notification/provider.js.map +1 -0
- package/lib/providers/webhook-notification/settings.d.ts +11 -0
- package/lib/providers/webhook-notification/settings.js +31 -0
- package/lib/providers/webhook-notification/settings.js.map +1 -0
- package/lib/publication/git.d.ts +7 -0
- package/lib/publication/git.js +154 -0
- package/lib/publication/git.js.map +1 -0
- package/lib/publication/index.d.ts +1 -0
- package/lib/publication/index.js +2 -0
- package/lib/publication/index.js.map +1 -0
- package/lib/publication/service.d.ts +27 -0
- package/lib/publication/service.js +166 -0
- package/lib/publication/service.js.map +1 -0
- package/lib/publication.d.ts +2 -0
- package/lib/publication.js +3 -0
- package/lib/publication.js.map +1 -0
- package/lib/reconciliation/index.d.ts +3 -0
- package/lib/reconciliation/index.js +4 -0
- package/lib/reconciliation/index.js.map +1 -0
- package/lib/reconciliation/ingress.d.ts +21 -0
- package/lib/reconciliation/ingress.js +168 -0
- package/lib/reconciliation/ingress.js.map +1 -0
- package/lib/reconciliation/service.d.ts +75 -0
- package/lib/reconciliation/service.js +228 -0
- package/lib/reconciliation/service.js.map +1 -0
- package/lib/reconciliation.d.ts +2 -0
- package/lib/reconciliation.js +3 -0
- package/lib/reconciliation.js.map +1 -0
- package/lib/remote.d.ts +65 -0
- package/lib/remote.js +135 -0
- package/lib/remote.js.map +1 -0
- package/lib/tracker/index.d.ts +2 -0
- package/lib/tracker/index.js +3 -0
- package/lib/tracker/index.js.map +1 -0
- package/lib/tracker/model.d.ts +222 -0
- package/lib/tracker/model.js +66 -0
- package/lib/tracker/model.js.map +1 -0
- package/lib/tracker/registry.d.ts +49 -0
- package/lib/tracker/registry.js +213 -0
- package/lib/tracker/registry.js.map +1 -0
- package/lib/tracker/validation.d.ts +60 -0
- package/lib/tracker/validation.js +52 -0
- package/lib/tracker/validation.js.map +1 -0
- package/lib/tracker.d.ts +2 -0
- package/lib/tracker.js +3 -0
- package/lib/tracker.js.map +1 -0
- package/lib/typert.d.ts +1 -0
- package/lib/typert.js +2 -0
- package/lib/typert.js.map +1 -0
- package/lib/web/commands.d.ts +18 -0
- package/lib/web/commands.js +231 -0
- package/lib/web/commands.js.map +1 -0
- package/lib/web/contract.d.ts +958 -0
- package/lib/web/contract.js +230 -0
- package/lib/web/contract.js.map +1 -0
- package/lib/web/contributions.d.ts +41 -0
- package/lib/web/contributions.js +61 -0
- package/lib/web/contributions.js.map +1 -0
- package/lib/web/integrations.d.ts +13 -0
- package/lib/web/integrations.js +95 -0
- package/lib/web/integrations.js.map +1 -0
- package/lib/web/projection.d.ts +10 -0
- package/lib/web/projection.js +192 -0
- package/lib/web/projection.js.map +1 -0
- package/lib/web/service.d.ts +31 -0
- package/lib/web/service.js +141 -0
- package/lib/web/service.js.map +1 -0
- package/lib/web.d.ts +5 -0
- package/lib/web.js +6 -0
- package/lib/web.js.map +1 -0
- package/lib/webhook-notification.d.ts +1 -0
- package/lib/webhook-notification.js +2 -0
- package/lib/webhook-notification.js.map +1 -0
- package/lib/workflow/index.d.ts +1 -0
- package/lib/workflow/index.js +2 -0
- package/lib/workflow/index.js.map +1 -0
- package/lib/workflow/service.d.ts +31 -0
- package/lib/workflow/service.js +220 -0
- package/lib/workflow/service.js.map +1 -0
- package/lib/workflow.d.ts +2 -0
- package/lib/workflow.js +3 -0
- package/lib/workflow.js.map +1 -0
- package/package.json +276 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
ADDED
package/lib/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Delivery, default } from './service.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { DeliveryRecord } from '../admission.js';
|
|
3
|
+
declare module '@deepseek-ai/cordis' {
|
|
4
|
+
interface Context {
|
|
5
|
+
delivery: Delivery;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** Durable tracker/notification outbox worker; each destination advances independently of run completion. */
|
|
9
|
+
export declare class Delivery extends Service {
|
|
10
|
+
static readonly inject: string[];
|
|
11
|
+
private readonly active;
|
|
12
|
+
private readonly controller;
|
|
13
|
+
private accepting;
|
|
14
|
+
private generation;
|
|
15
|
+
constructor(ctx: Context);
|
|
16
|
+
[Service.init](): AsyncGenerator<() => Promise<void>, void, void>;
|
|
17
|
+
/** Reconcile and attempt every currently due nonterminal destination, preserving failures independently. */
|
|
18
|
+
deliverPending(callerSignal?: AbortSignal): Promise<readonly DeliveryRecord[]>;
|
|
19
|
+
/** Reconcile a single durable intent before mutation; duplicate concurrent callers share one owner promise. */
|
|
20
|
+
deliver(deliveryId: string, callerSignal?: AbortSignal): Promise<DeliveryRecord>;
|
|
21
|
+
/** Requeue one failed destination without changing any successful receipt or repeating code execution. */
|
|
22
|
+
retry(deliveryId: string): Promise<DeliveryRecord>;
|
|
23
|
+
/** Retire a failed mutable projection under an updated provider mapping, then deliver its atomic replacement. */
|
|
24
|
+
repairTrackerProjection(deliveryId: string): Promise<DeliveryRecord>;
|
|
25
|
+
private deliverOwned;
|
|
26
|
+
private assertAccepting;
|
|
27
|
+
private assertGeneration;
|
|
28
|
+
}
|
|
29
|
+
export default Delivery;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
2
|
+
import { SupersededProjectionError } from '../admission/delivery-control.js';
|
|
3
|
+
import { NotificationProviderError } from '../notification.js';
|
|
4
|
+
import { TrackerProviderError } from '../tracker.js';
|
|
5
|
+
/** Durable tracker/notification outbox worker; each destination advances independently of run completion. */
|
|
6
|
+
export class Delivery extends Service {
|
|
7
|
+
static inject = ['admission', 'tracker', 'notifications'];
|
|
8
|
+
active = new Map();
|
|
9
|
+
controller = new AbortController();
|
|
10
|
+
accepting = false;
|
|
11
|
+
generation = 0;
|
|
12
|
+
constructor(ctx) {
|
|
13
|
+
super(ctx, 'delivery');
|
|
14
|
+
}
|
|
15
|
+
async *[Service.init]() {
|
|
16
|
+
this.accepting = true;
|
|
17
|
+
this.generation += 1;
|
|
18
|
+
yield async () => {
|
|
19
|
+
this.accepting = false;
|
|
20
|
+
this.generation += 1;
|
|
21
|
+
this.controller.abort(new Error('delivery owner was disposed'));
|
|
22
|
+
await Promise.allSettled(this.active.values());
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Reconcile and attempt every currently due nonterminal destination, preserving failures independently. */
|
|
26
|
+
async deliverPending(callerSignal) {
|
|
27
|
+
this.assertAccepting();
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
const pending = this.ctx.admission
|
|
30
|
+
.snapshot()
|
|
31
|
+
.runs.flatMap((run) => run.deliveries)
|
|
32
|
+
.filter((delivery) => ['pending', 'uncertain'].includes(delivery.status) ||
|
|
33
|
+
(delivery.status === 'retryable-failure' &&
|
|
34
|
+
(delivery.nextRetryAt === undefined || Date.parse(delivery.nextRetryAt) <= now)));
|
|
35
|
+
const results = await Promise.allSettled(pending.map((delivery) => this.deliver(delivery.id, callerSignal)));
|
|
36
|
+
const failures = results.flatMap((result) => (result.status === 'rejected' ? [result.reason] : []));
|
|
37
|
+
if (failures.length > 0) {
|
|
38
|
+
throw new AggregateError(failures, 'one or more durable deliveries could not record their outcome');
|
|
39
|
+
}
|
|
40
|
+
return results.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));
|
|
41
|
+
}
|
|
42
|
+
/** Reconcile a single durable intent before mutation; duplicate concurrent callers share one owner promise. */
|
|
43
|
+
deliver(deliveryId, callerSignal) {
|
|
44
|
+
this.assertAccepting();
|
|
45
|
+
const current = this.active.get(deliveryId);
|
|
46
|
+
if (current !== undefined)
|
|
47
|
+
return current;
|
|
48
|
+
const generation = this.generation;
|
|
49
|
+
const signal = callerSignal === undefined ? this.controller.signal : AbortSignal.any([this.controller.signal, callerSignal]);
|
|
50
|
+
const operation = this.deliverOwned(deliveryId, generation, signal).finally(() => this.active.delete(deliveryId));
|
|
51
|
+
this.active.set(deliveryId, operation);
|
|
52
|
+
return operation;
|
|
53
|
+
}
|
|
54
|
+
/** Requeue one failed destination without changing any successful receipt or repeating code execution. */
|
|
55
|
+
async retry(deliveryId) {
|
|
56
|
+
this.assertAccepting();
|
|
57
|
+
await this.ctx.admission.retryDelivery(deliveryId);
|
|
58
|
+
return await this.deliver(deliveryId);
|
|
59
|
+
}
|
|
60
|
+
/** Retire a failed mutable projection under an updated provider mapping, then deliver its atomic replacement. */
|
|
61
|
+
async repairTrackerProjection(deliveryId) {
|
|
62
|
+
this.assertAccepting();
|
|
63
|
+
const replacement = await this.ctx.admission.repairTrackerProjection(deliveryId);
|
|
64
|
+
return await this.deliver(replacement.id);
|
|
65
|
+
}
|
|
66
|
+
async deliverOwned(deliveryId, generation, signal) {
|
|
67
|
+
let claimed;
|
|
68
|
+
try {
|
|
69
|
+
claimed = await this.ctx.admission.claimDelivery(deliveryId);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof SupersededProjectionError)
|
|
73
|
+
return error.delivery;
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
const { runId, delivery, owner } = claimed;
|
|
77
|
+
try {
|
|
78
|
+
this.assertGeneration(generation, signal);
|
|
79
|
+
const receipt = delivery.kind === 'notification'
|
|
80
|
+
? await this.ctx.notifications.withProvider(delivery.providerId, async (sender) => {
|
|
81
|
+
const existing = await sender.reconcile(delivery.destinationId, delivery.payload, signal);
|
|
82
|
+
this.assertGeneration(generation, signal);
|
|
83
|
+
if (existing !== undefined)
|
|
84
|
+
return existing;
|
|
85
|
+
this.ctx.admission.assertDeliveryOwner(runId, delivery.id, owner);
|
|
86
|
+
return await sender.deliver(delivery.destinationId, delivery.payload, signal);
|
|
87
|
+
})
|
|
88
|
+
: await this.ctx.tracker.withWriter(delivery.providerId, async (writer) => {
|
|
89
|
+
const existing = await writer.reconcileDelivery(delivery.payload, signal);
|
|
90
|
+
this.assertGeneration(generation, signal);
|
|
91
|
+
if (existing.kind === 'conflict')
|
|
92
|
+
throw new DeliveryConflictError(existing.reason);
|
|
93
|
+
if (existing.kind === 'delivered')
|
|
94
|
+
return existing.receipt;
|
|
95
|
+
this.ctx.admission.assertDeliveryOwner(runId, delivery.id, owner);
|
|
96
|
+
return await writer.deliver(delivery.payload, signal);
|
|
97
|
+
});
|
|
98
|
+
this.assertGeneration(generation, signal);
|
|
99
|
+
return await this.ctx.admission.succeedDelivery(runId, delivery.id, owner, receipt);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const classified = signal.aborted || generation !== this.generation ? { status: 'uncertain' } : classifyFailure(error);
|
|
103
|
+
try {
|
|
104
|
+
return await this.ctx.admission.failDelivery(runId, delivery.id, owner, error, classified.status, classified.retryAfterMs);
|
|
105
|
+
}
|
|
106
|
+
catch (commitError) {
|
|
107
|
+
throw new AggregateError([error, commitError], 'delivery failed and its durable outcome could not be recorded');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
assertAccepting() {
|
|
112
|
+
if (!this.accepting)
|
|
113
|
+
throw new Error('delivery is unavailable while its required services are changing');
|
|
114
|
+
}
|
|
115
|
+
assertGeneration(generation, signal) {
|
|
116
|
+
signal.throwIfAborted();
|
|
117
|
+
if (!this.accepting || generation !== this.generation)
|
|
118
|
+
throw new Error('delivery owner generation was retired');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
class DeliveryConflictError extends Error {
|
|
122
|
+
}
|
|
123
|
+
function classifyFailure(error) {
|
|
124
|
+
if (error instanceof DeliveryConflictError)
|
|
125
|
+
return { status: 'permanent-failure' };
|
|
126
|
+
if (error instanceof TrackerProviderError || error instanceof NotificationProviderError) {
|
|
127
|
+
if (['ambiguous-acknowledgement', 'timeout'].includes(error.code))
|
|
128
|
+
return { status: 'uncertain' };
|
|
129
|
+
if (['rate-limit', 'transient', 'provider-unavailable'].includes(error.code)) {
|
|
130
|
+
return {
|
|
131
|
+
status: 'retryable-failure',
|
|
132
|
+
...(error.retryAfterMs === undefined ? {} : { retryAfterMs: error.retryAfterMs }),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { status: 'permanent-failure' };
|
|
136
|
+
}
|
|
137
|
+
return { status: 'retryable-failure' };
|
|
138
|
+
}
|
|
139
|
+
export default Delivery;
|
|
140
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/delivery/service.ts"],"names":[],"mappings":"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"}
|
package/lib/delivery.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../src/delivery.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { type ModelSelection } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { Session } from '@deepseek-ai/dsh-session';
|
|
4
|
+
import { type PreparedAgentComposition } from '../admission/composition-claim.js';
|
|
5
|
+
import type { AgentExecutionComposition, RunExecutionSnapshot } from '../admission.js';
|
|
6
|
+
export declare class AgentCompositionUnavailableError extends Error {
|
|
7
|
+
constructor(message: string, options?: ErrorOptions);
|
|
8
|
+
}
|
|
9
|
+
/** Resolve and validate the Host's effective DSH defaults before admission can consume a queued run. */
|
|
10
|
+
export declare function prepareAgentComposition(ctx: Context): Promise<PreparedAgentComposition>;
|
|
11
|
+
/** Prove a retained composition still resolves to the exact DSH preset, model, and permission policy it captured. */
|
|
12
|
+
export declare function assertAgentCompositionAvailable(ctx: Context, composition: AgentExecutionComposition): Promise<void>;
|
|
13
|
+
/** Compose a native DSH Agent from the exact defaults captured when its run was claimed. */
|
|
14
|
+
export declare function mountAgentComposition(ctx: Context, agentCtx: Context, composition: AgentExecutionComposition): Promise<void>;
|
|
15
|
+
/** Apply the retained native DSH permission policy before the Agent receives any input. */
|
|
16
|
+
export declare function applyAgentPermission(ctx: Context, session: Session, composition: AgentExecutionComposition): void;
|
|
17
|
+
export declare function requiredAgentComposition(execution: RunExecutionSnapshot): AgentExecutionComposition;
|
|
18
|
+
export declare function modelSelection(composition: AgentExecutionComposition): ModelSelection;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { installModelSelection } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import { ReasoningEffortId } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import { issuePreparedAgentComposition } from '../admission/composition-claim.js';
|
|
5
|
+
export class AgentCompositionUnavailableError extends Error {
|
|
6
|
+
constructor(message, options) {
|
|
7
|
+
super(message, options);
|
|
8
|
+
this.name = 'AgentCompositionUnavailableError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Resolve and validate the Host's effective DSH defaults before admission can consume a queued run. */
|
|
12
|
+
export async function prepareAgentComposition(ctx) {
|
|
13
|
+
const selected = ctx.agentDefaultModel.currentSelection();
|
|
14
|
+
const presetId = ctx.agentPresets.defaultId;
|
|
15
|
+
const permissionPresetId = ctx.permissionPresets.defaultPreset;
|
|
16
|
+
const permission = ctx.permissionPresets.resolve(permissionPresetId);
|
|
17
|
+
if (permission.approval !== 'never' || permission.sandbox !== 'workspace-write') {
|
|
18
|
+
throw new AgentCompositionUnavailableError(`permission preset "${permissionPresetId}" must enforce workspace-write with no interactive approval for unattended runs`);
|
|
19
|
+
}
|
|
20
|
+
const composition = {
|
|
21
|
+
presetId,
|
|
22
|
+
presetFingerprint: await presetFingerprint(ctx, presetId),
|
|
23
|
+
permission: {
|
|
24
|
+
presetId: permissionPresetId,
|
|
25
|
+
sandbox: permission.sandbox,
|
|
26
|
+
approval: permission.approval,
|
|
27
|
+
},
|
|
28
|
+
model: {
|
|
29
|
+
provider: selected.provider,
|
|
30
|
+
model: selected.model,
|
|
31
|
+
...(selected.reasoningEffort === undefined ? {} : { reasoningEffort: String(selected.reasoningEffort) }),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
await assertAgentCompositionAvailable(ctx, composition);
|
|
35
|
+
return issuePreparedAgentComposition(composition);
|
|
36
|
+
}
|
|
37
|
+
/** Prove a retained composition still resolves to the exact DSH preset, model, and permission policy it captured. */
|
|
38
|
+
export async function assertAgentCompositionAvailable(ctx, composition) {
|
|
39
|
+
try {
|
|
40
|
+
const fingerprint = await presetFingerprint(ctx, composition.presetId);
|
|
41
|
+
if (fingerprint !== composition.presetFingerprint) {
|
|
42
|
+
throw new Error(`agent preset "${composition.presetId}" content changed after the run was admitted`);
|
|
43
|
+
}
|
|
44
|
+
const permission = ctx.permissionPresets.resolve(composition.permission.presetId);
|
|
45
|
+
if (permission.approval !== composition.permission.approval ||
|
|
46
|
+
permission.sandbox !== composition.permission.sandbox) {
|
|
47
|
+
throw new Error(`permission preset "${composition.permission.presetId}" changed after the run was admitted`);
|
|
48
|
+
}
|
|
49
|
+
const model = await ctx.llm.resolveModelInfo(composition.model.provider, composition.model.model);
|
|
50
|
+
if (composition.model.reasoningEffort !== undefined &&
|
|
51
|
+
model.reasoning !== undefined &&
|
|
52
|
+
!model.reasoning.efforts.some((effort) => String(effort.id) === composition.model.reasoningEffort)) {
|
|
53
|
+
throw new Error(`model "${composition.model.provider}/${composition.model.model}" does not support reasoning effort "${composition.model.reasoningEffort}"`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (error instanceof AgentCompositionUnavailableError)
|
|
58
|
+
throw error;
|
|
59
|
+
throw new AgentCompositionUnavailableError('the retained DSH agent composition is unavailable', { cause: error });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Compose a native DSH Agent from the exact defaults captured when its run was claimed. */
|
|
63
|
+
export async function mountAgentComposition(ctx, agentCtx, composition) {
|
|
64
|
+
await assertAgentCompositionAvailable(ctx, composition);
|
|
65
|
+
await ctx.agentPresets.mount(agentCtx, composition.presetId);
|
|
66
|
+
await assertAgentCompositionAvailable(ctx, composition);
|
|
67
|
+
const selection = { current: modelSelection(composition), assembled: undefined };
|
|
68
|
+
installModelSelection(agentCtx, selection);
|
|
69
|
+
}
|
|
70
|
+
/** Apply the retained native DSH permission policy before the Agent receives any input. */
|
|
71
|
+
export function applyAgentPermission(ctx, session, composition) {
|
|
72
|
+
ctx.permissionPresets.set(session, composition.permission.presetId);
|
|
73
|
+
}
|
|
74
|
+
export function requiredAgentComposition(execution) {
|
|
75
|
+
if (execution.agent === undefined) {
|
|
76
|
+
throw new AgentCompositionUnavailableError('the retained run predates native DSH composition and cannot be resumed safely');
|
|
77
|
+
}
|
|
78
|
+
return execution.agent;
|
|
79
|
+
}
|
|
80
|
+
async function presetFingerprint(ctx, presetId) {
|
|
81
|
+
await ctx.agentPresets.standingKeyFor(presetId);
|
|
82
|
+
const document = await ctx.agentPresets.readDocument(presetId);
|
|
83
|
+
if (document.trust !== 'system') {
|
|
84
|
+
throw new Error(`agent preset "${presetId}" must be system-trusted for unattended execution`);
|
|
85
|
+
}
|
|
86
|
+
const inventory = (await ctx.agentPresets.compositionInventory()).find((preset) => preset.id === presetId);
|
|
87
|
+
if (inventory === undefined || inventory.broken !== undefined) {
|
|
88
|
+
throw new Error(`agent preset "${presetId}" has no usable composition inventory`);
|
|
89
|
+
}
|
|
90
|
+
const descendantTools = new Set([
|
|
91
|
+
'@deepseek-ai/dsh-tool-subagent',
|
|
92
|
+
'@deepseek-ai/dsh-tool-workflow',
|
|
93
|
+
'@deepseek-ai/dsh-tool-ralph',
|
|
94
|
+
]);
|
|
95
|
+
if (inventory.rows.some((row) => row.enabled !== false && descendantTools.has(row.moduleName))) {
|
|
96
|
+
throw new Error(`agent preset "${presetId}" exposes delegation without run-owned descendant accounting`);
|
|
97
|
+
}
|
|
98
|
+
return createHash('sha256').update(document.content, 'utf8').digest('hex');
|
|
99
|
+
}
|
|
100
|
+
export function modelSelection(composition) {
|
|
101
|
+
return {
|
|
102
|
+
provider: composition.model.provider,
|
|
103
|
+
model: composition.model.model,
|
|
104
|
+
...(composition.model.reasoningEffort === undefined
|
|
105
|
+
? {}
|
|
106
|
+
: { reasoningEffort: ReasoningEffortId(composition.model.reasoningEffort) }),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=composition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/dispatch/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/dispatch/contract.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { AgentHandle } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { Workspace } from '@deepseek-ai/dsh-workspace';
|
|
4
|
+
import type { ImplementingRun, PausingRun } from '../admission.js';
|
|
5
|
+
import type { DispatchResult } from './contract.js';
|
|
6
|
+
import type { ActiveExecution } from './execution-state.js';
|
|
7
|
+
import { type ReportRecorder } from './report.js';
|
|
8
|
+
import { type UsageRecorder } from './usage.js';
|
|
9
|
+
export declare function executeClaimed(ctx: Context, claimed: ImplementingRun, active: ActiveExecution, finishStart: () => void): Promise<DispatchResult>;
|
|
10
|
+
export declare function executeOwnedTurn(ctx: Context, run: ImplementingRun | PausingRun, active: ActiveExecution, handle: AgentHandle, usage: UsageRecorder, report: ReportRecorder, baseHead: string, prompt: string, cancellationReason: string, failureSummary: string, existingWorkspace?: Workspace, beforeCheckpoint?: () => Promise<void>): Promise<DispatchResult>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import { SessionHandleClosedError } from '@deepseek-ai/dsh-session-persistence';
|
|
5
|
+
import { applyAgentPermission, assertAgentCompositionAvailable, modelSelection, mountAgentComposition, requiredAgentComposition, } from './composition.js';
|
|
6
|
+
import { currentRun } from './execution-state.js';
|
|
7
|
+
import { gitCommand, inspectGit } from './git.js';
|
|
8
|
+
import { createReportTool, errorMessage, executionPrompt, truncateUtf8, validatedOutcome, } from './report.js';
|
|
9
|
+
import { registerUsageRecorder, usageSettlement } from './usage.js';
|
|
10
|
+
export async function executeClaimed(ctx, claimed, active, finishStart) {
|
|
11
|
+
let run = claimed;
|
|
12
|
+
const usage = { usage: [], requests: 0 };
|
|
13
|
+
const report = {};
|
|
14
|
+
let git;
|
|
15
|
+
let baseHead;
|
|
16
|
+
let handle;
|
|
17
|
+
let workspace;
|
|
18
|
+
try {
|
|
19
|
+
const composition = requiredAgentComposition(run.execution);
|
|
20
|
+
await assertAgentCompositionAvailable(ctx, composition);
|
|
21
|
+
await mkdir(dirname(run.execution.worktreePath), { recursive: true });
|
|
22
|
+
baseHead = (await gitCommand(ctx.subprocess, run.execution.targetRepository, ['rev-parse', run.execution.baseBranch])).trim();
|
|
23
|
+
await gitCommand(ctx.subprocess, run.execution.targetRepository, [
|
|
24
|
+
'worktree',
|
|
25
|
+
'add',
|
|
26
|
+
'-b',
|
|
27
|
+
run.execution.branch,
|
|
28
|
+
run.execution.worktreePath,
|
|
29
|
+
run.execution.baseBranch,
|
|
30
|
+
]);
|
|
31
|
+
git = await inspectGit(ctx.subprocess, run.execution.worktreePath, baseHead);
|
|
32
|
+
run = await ctx.admission.recordWorktree(run.runId, git);
|
|
33
|
+
workspace = await ctx.workspaceRegistry.create(run.execution.worktreePath, run.displayKey);
|
|
34
|
+
const selected = modelSelection(composition);
|
|
35
|
+
handle = await ctx.agents.create({
|
|
36
|
+
sessionId: run.execution.sessionId,
|
|
37
|
+
meta: { cwd: run.execution.worktreePath, agentPreset: composition.presetId },
|
|
38
|
+
agentOptions: {
|
|
39
|
+
...selected,
|
|
40
|
+
maxTokens: run.budget.capTokens,
|
|
41
|
+
},
|
|
42
|
+
setup: async (agentCtx) => {
|
|
43
|
+
await mountAgentComposition(ctx, agentCtx, composition);
|
|
44
|
+
registerUsageRecorder(agentCtx, run, composition, usage);
|
|
45
|
+
agentCtx.tools.register(createReportTool(report));
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
applyAgentPermission(ctx, handle.agent.session, composition);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
await handle.dispose();
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
active.handle = handle;
|
|
56
|
+
finishStart();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return await settleExecutionFailure(ctx, run, git, usage, error, 'Agent execution failed.');
|
|
60
|
+
}
|
|
61
|
+
return await executeOwnedTurn(ctx, run, active, handle, usage, report, baseHead, executionPrompt(run), 'pause requested before Agent start', 'Agent execution failed.', workspace);
|
|
62
|
+
}
|
|
63
|
+
export async function executeOwnedTurn(ctx, run, active, handle, usage, report, baseHead, prompt, cancellationReason, failureSummary, existingWorkspace, beforeCheckpoint) {
|
|
64
|
+
let git = run.execution.git;
|
|
65
|
+
let rootQuiescent = false;
|
|
66
|
+
let rootDisposed = false;
|
|
67
|
+
let sessionDurable = false;
|
|
68
|
+
let finalGitObserved = false;
|
|
69
|
+
try {
|
|
70
|
+
const workspace = existingWorkspace ?? (await ctx.workspaceRegistry.create(run.execution.worktreePath, run.displayKey));
|
|
71
|
+
try {
|
|
72
|
+
await workspace.attachSession(run.execution.sessionId);
|
|
73
|
+
const current = currentRun(ctx.admission.snapshot(), run.runId);
|
|
74
|
+
if (current.state === 'pausing' || active.pauseRequested) {
|
|
75
|
+
active.pauseRequested = true;
|
|
76
|
+
handle.agent.cancel({ kind: 'hook', reason: cancellationReason }, { keepInbox: true });
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
handle.agent.followup(createUserMessage({
|
|
80
|
+
content: [{ type: 'text', text: prompt }],
|
|
81
|
+
source: { kind: 'plugin', plugin: 'dsh-autopilot' },
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
await handle.agent.whenIdle();
|
|
85
|
+
await beforeCheckpoint?.();
|
|
86
|
+
rootQuiescent = true;
|
|
87
|
+
if (!(await ctx.sessions.flush(handle.agent.session))) {
|
|
88
|
+
throw new Error(`session "${run.execution.sessionId}" has no persistence binding`);
|
|
89
|
+
}
|
|
90
|
+
sessionDurable = true;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
await handle.dispose();
|
|
94
|
+
rootDisposed = true;
|
|
95
|
+
}
|
|
96
|
+
git = await inspectGit(ctx.subprocess, run.execution.worktreePath, baseHead);
|
|
97
|
+
await beforeCheckpoint?.();
|
|
98
|
+
finalGitObserved = true;
|
|
99
|
+
const recorded = await ctx.admission.recordWorktree(run.runId, git);
|
|
100
|
+
await beforeCheckpoint?.();
|
|
101
|
+
const current = currentRun(ctx.admission.snapshot(), run.runId);
|
|
102
|
+
if (recorded.state === 'pausing' || current.state === 'pausing') {
|
|
103
|
+
return await ctx.admission.checkpointPaused(run.runId, git, usageSettlement(usage));
|
|
104
|
+
}
|
|
105
|
+
return await ctx.admission.settle(run.runId, validatedOutcome(report, git), usageSettlement(usage));
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const durableProviderTeardown = rootDisposed && error instanceof SessionHandleClosedError;
|
|
109
|
+
return await settleExecutionFailure(ctx, run, git, usage, error, failureSummary, {
|
|
110
|
+
rootQuiescent,
|
|
111
|
+
sessionDurable: sessionDurable || durableProviderTeardown,
|
|
112
|
+
finalGitObserved,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async function settleExecutionFailure(ctx, run, git, usage, error, failureSummary, checkpoint = { rootQuiescent: false, sessionDurable: false, finalGitObserved: false }) {
|
|
117
|
+
let observedGit = git;
|
|
118
|
+
let finalGitObserved = checkpoint.finalGitObserved;
|
|
119
|
+
if (observedGit !== undefined) {
|
|
120
|
+
try {
|
|
121
|
+
observedGit = await inspectGit(ctx.subprocess, run.execution.worktreePath, observedGit.baseHead);
|
|
122
|
+
finalGitObserved = true;
|
|
123
|
+
await ctx.admission.recordWorktree(run.runId, observedGit);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// The original actionable failure remains authoritative; best-effort evidence must not replace it.
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const current = currentRun(ctx.admission.snapshot(), run.runId);
|
|
130
|
+
if (current.state === 'pausing') {
|
|
131
|
+
if (checkpoint.rootQuiescent && checkpoint.sessionDurable && finalGitObserved && observedGit !== undefined) {
|
|
132
|
+
return await ctx.admission.checkpointPaused(run.runId, observedGit, usageSettlement(usage));
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
return await ctx.admission.settle(run.runId, { kind: 'failed', summary: failureSummary, evidence: [truncateUtf8(errorMessage(error))] }, usageSettlement(usage));
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/dispatch/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentHandle } from '@deepseek-ai/dsh-agent';
|
|
2
|
+
import type { AdmissionSnapshot, AutopilotRun, GitExecutionSnapshot, PausedActiveRun, RunId } from '../admission.js';
|
|
3
|
+
export interface ActiveExecution {
|
|
4
|
+
handle?: AgentHandle;
|
|
5
|
+
pauseRequested: boolean;
|
|
6
|
+
readonly completion: Promise<void>;
|
|
7
|
+
complete(): void;
|
|
8
|
+
}
|
|
9
|
+
export declare function activeExecution(): ActiveExecution;
|
|
10
|
+
export declare function currentRun(snapshot: AdmissionSnapshot, runId: RunId): AutopilotRun;
|
|
11
|
+
export declare function isPausedActive(run: AutopilotRun | undefined): run is PausedActiveRun;
|
|
12
|
+
export declare function sameGit(left: GitExecutionSnapshot, right: GitExecutionSnapshot): boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function activeExecution() {
|
|
2
|
+
let complete;
|
|
3
|
+
const completion = new Promise((resolve) => {
|
|
4
|
+
complete = resolve;
|
|
5
|
+
});
|
|
6
|
+
return {
|
|
7
|
+
pauseRequested: false,
|
|
8
|
+
completion,
|
|
9
|
+
complete: () => complete?.(),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function currentRun(snapshot, runId) {
|
|
13
|
+
const run = snapshot.runs.find((candidate) => candidate.runId === runId);
|
|
14
|
+
if (run === undefined)
|
|
15
|
+
throw new Error(`run "${runId}" disappeared from the admission aggregate`);
|
|
16
|
+
return run;
|
|
17
|
+
}
|
|
18
|
+
export function isPausedActive(run) {
|
|
19
|
+
return run?.state === 'paused' && run.pause.kind === 'active';
|
|
20
|
+
}
|
|
21
|
+
export function sameGit(left, right) {
|
|
22
|
+
return left.baseHead === right.baseHead && left.head === right.head && left.status === right.status;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=execution-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-state.js","sourceRoot":"","sources":["../../src/dispatch/execution-state.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,eAAe;IAC7B,IAAI,QAAkC,CAAA;IACtC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC/C,QAAQ,GAAG,OAAO,CAAA;IACpB,CAAC,CAAC,CAAA;IACF,OAAO;QACL,cAAc,EAAE,KAAK;QACrB,UAAU;QACV,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;KAC7B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAA2B,EAAE,KAAY;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IACxE,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,4CAA4C,CAAC,CAAA;IACjG,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAA6B;IAC1D,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAA0B,EAAE,KAA2B;IAC7E,OAAO,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAA;AACrG,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SubprocessRuntime } from '@deepseek-ai/dsh-subprocess';
|
|
2
|
+
import type { GitExecutionSnapshot, PausedActiveRun } from '../admission.js';
|
|
3
|
+
export declare function inspectRetainedWorktree(subprocess: SubprocessRuntime, run: PausedActiveRun): Promise<GitExecutionSnapshot>;
|
|
4
|
+
export declare function inspectGit(subprocess: SubprocessRuntime, worktreePath: string, baseHead: string): Promise<GitExecutionSnapshot>;
|
|
5
|
+
export declare function gitCommand(subprocess: SubprocessRuntime, cwd: string, args: readonly string[], callerSignal?: AbortSignal): Promise<string>;
|