@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/providers/webhook-notification/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAOhE,MAAM,CAAC,MAAM,iCAAiC,GAAmC,CAAC,CAAC,MAAM,CAAC;IACxF,YAAY,EAAE,CAAC;SACZ,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1B,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACnD,CAAC,CACH;SACA,OAAO,CAAC,EAAE,CAAC;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC7D,CAAC,CAAA;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAmC;IACzE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAA;IAClG,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAA;IAC5G,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9C,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;QAC1F,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACvB,sBAAsB,CAAC,WAAW,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;QAClE,IAAI,WAAW,CAAC,0BAA0B,KAAK,EAAE;YAAE,aAAa,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAA;IAC1G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SubprocessRuntime } from '@deepseek-ai/dsh-subprocess';
|
|
2
|
+
import type { TerminalRun } from '../admission.js';
|
|
3
|
+
import type { CodeHostPublication } from '../code-host.js';
|
|
4
|
+
/** Reconstruct and verify the bounded publication artifact from the exact durable local Git identities. */
|
|
5
|
+
export declare function preparePublication(subprocess: SubprocessRuntime, run: TerminalRun, signal?: AbortSignal): Promise<CodeHostPublication>;
|
|
6
|
+
/** Reconstruct the immutable durable publication identity for read-only remote reconciliation during cleanup. */
|
|
7
|
+
export declare function preparePublicationReconciliation(subprocess: SubprocessRuntime, run: TerminalRun, signal?: AbortSignal): Promise<CodeHostPublication>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { lstat, readFile, realpath } from 'node:fs/promises';
|
|
2
|
+
import { dirname, relative, resolve } from 'node:path';
|
|
3
|
+
import { gitCommand } from '../dispatch/git.js';
|
|
4
|
+
const MAX_FILES = 100;
|
|
5
|
+
const MAX_TREE_ENTRIES = 10_000;
|
|
6
|
+
const MAX_FILE_BYTES = 512 * 1024;
|
|
7
|
+
const MAX_TOTAL_BYTES = 2 * 1024 * 1024;
|
|
8
|
+
/** Reconstruct and verify the bounded publication artifact from the exact durable local Git identities. */
|
|
9
|
+
export async function preparePublication(subprocess, run, signal) {
|
|
10
|
+
if ((run.state !== 'publishing' && run.state !== 'completed') ||
|
|
11
|
+
run.outcome.kind !== 'verified' ||
|
|
12
|
+
run.publication === undefined) {
|
|
13
|
+
throw new Error('run is not a verified publication candidate');
|
|
14
|
+
}
|
|
15
|
+
const intent = run.publication;
|
|
16
|
+
const worktree = await realpath(run.execution.worktreePath);
|
|
17
|
+
signal?.throwIfAborted();
|
|
18
|
+
const root = await realpath((await gitCommand(subprocess, worktree, ['rev-parse', '--show-toplevel'], signal)).trim());
|
|
19
|
+
if (root !== worktree)
|
|
20
|
+
throw new Error('publication path is not the recorded Git worktree root');
|
|
21
|
+
const branch = (await gitCommand(subprocess, worktree, ['rev-parse', '--abbrev-ref', 'HEAD'], signal)).trim();
|
|
22
|
+
if (branch !== intent.headBranch)
|
|
23
|
+
throw new Error('publication worktree branch changed after verification');
|
|
24
|
+
const head = (await gitCommand(subprocess, worktree, ['rev-parse', 'HEAD'], signal)).trim();
|
|
25
|
+
const baseHead = (await gitCommand(subprocess, worktree, ['rev-parse', intent.baseBranch], signal)).trim();
|
|
26
|
+
const status = await gitCommand(subprocess, worktree, ['status', '--porcelain'], signal);
|
|
27
|
+
if (head !== intent.localHead || head !== run.outcome.reportedGit.head || status !== run.outcome.reportedGit.status) {
|
|
28
|
+
throw new Error('publication Git facts no longer match the verified outcome');
|
|
29
|
+
}
|
|
30
|
+
if (status !== '')
|
|
31
|
+
throw new Error('publication requires a clean worktree');
|
|
32
|
+
if (baseHead !== intent.baseHead)
|
|
33
|
+
throw new Error('publication base changed after verification');
|
|
34
|
+
if (head === baseHead)
|
|
35
|
+
throw new Error('publication requires at least one committed change');
|
|
36
|
+
await gitCommand(subprocess, worktree, ['merge-base', '--is-ancestor', baseHead, head], signal);
|
|
37
|
+
const commitCount = Number((await gitCommand(subprocess, worktree, ['rev-list', '--count', `${baseHead}..${head}`], signal)).trim());
|
|
38
|
+
if (!Number.isSafeInteger(commitCount) || commitCount < 1 || commitCount > 100) {
|
|
39
|
+
throw new Error('publication commit range exceeds its safety bound');
|
|
40
|
+
}
|
|
41
|
+
if (run.outcome.verification.length === 0 ||
|
|
42
|
+
run.outcome.verification.some((check) => check.status === 'failed' || (check.status === 'skipped' && check.reason === undefined))) {
|
|
43
|
+
throw new Error('publication verification results are incomplete or failed');
|
|
44
|
+
}
|
|
45
|
+
const changed = parseChangedFiles(await gitCommand(subprocess, worktree, ['diff', '--name-status', '--no-renames', '-z', `${baseHead}..${head}`, '--'], signal));
|
|
46
|
+
if (changed.length === 0 || changed.length > MAX_FILES)
|
|
47
|
+
throw new Error('publication file set is empty or too large');
|
|
48
|
+
if (changed.some((entry) => entry.status !== 'A' && entry.status !== 'M')) {
|
|
49
|
+
throw new Error('GitHub MCP publication does not support deleted or renamed paths');
|
|
50
|
+
}
|
|
51
|
+
if (!run.execution.codeHost.allowWorkflowChanges && changed.some((entry) => isWorkflow(entry.path))) {
|
|
52
|
+
throw new Error('publication contains a workflow-file change forbidden by deployment policy');
|
|
53
|
+
}
|
|
54
|
+
let totalBytes = 0;
|
|
55
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
56
|
+
const files = [];
|
|
57
|
+
for (const entry of changed) {
|
|
58
|
+
signal?.throwIfAborted();
|
|
59
|
+
const absolute = resolve(worktree, entry.path);
|
|
60
|
+
if (relative(worktree, absolute).startsWith('..') || dirname(absolute) === absolute) {
|
|
61
|
+
throw new Error('publication contains an unsafe Git path');
|
|
62
|
+
}
|
|
63
|
+
const metadata = await lstat(absolute);
|
|
64
|
+
if (!metadata.isFile() || metadata.size > MAX_FILE_BYTES) {
|
|
65
|
+
throw new Error('GitHub MCP publication supports only bounded regular files');
|
|
66
|
+
}
|
|
67
|
+
const bytes = await readFile(absolute);
|
|
68
|
+
totalBytes += bytes.byteLength;
|
|
69
|
+
if (totalBytes > MAX_TOTAL_BYTES)
|
|
70
|
+
throw new Error('publication file content exceeds its safety bound');
|
|
71
|
+
let content;
|
|
72
|
+
try {
|
|
73
|
+
content = decoder.decode(bytes);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new Error('GitHub MCP publication supports only UTF-8 file content');
|
|
77
|
+
}
|
|
78
|
+
files.push({ path: entry.path, content });
|
|
79
|
+
}
|
|
80
|
+
const tree = parseTree(await gitCommand(subprocess, worktree, ['ls-tree', '-r', '-z', head], signal));
|
|
81
|
+
return {
|
|
82
|
+
bindingId: intent.bindingId,
|
|
83
|
+
repositoryId: intent.repositoryId,
|
|
84
|
+
repository: intent.repository,
|
|
85
|
+
baseBranch: intent.baseBranch,
|
|
86
|
+
headBranch: intent.headBranch,
|
|
87
|
+
baseHead: intent.baseHead,
|
|
88
|
+
localHead: intent.localHead,
|
|
89
|
+
tree,
|
|
90
|
+
files,
|
|
91
|
+
title: intent.title,
|
|
92
|
+
body: intent.body,
|
|
93
|
+
marker: intent.marker,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Reconstruct the immutable durable publication identity for read-only remote reconciliation during cleanup. */
|
|
97
|
+
export async function preparePublicationReconciliation(subprocess, run, signal) {
|
|
98
|
+
if ((run.state !== 'publishing' && run.state !== 'completed') ||
|
|
99
|
+
run.outcome.kind !== 'verified' ||
|
|
100
|
+
run.publication === undefined) {
|
|
101
|
+
throw new Error('run has no verified publication identity');
|
|
102
|
+
}
|
|
103
|
+
const intent = run.publication;
|
|
104
|
+
const tree = parseTree(await gitCommand(subprocess, run.execution.worktreePath, ['ls-tree', '-r', '-z', intent.localHead], signal));
|
|
105
|
+
return {
|
|
106
|
+
bindingId: intent.bindingId,
|
|
107
|
+
repositoryId: intent.repositoryId,
|
|
108
|
+
repository: intent.repository,
|
|
109
|
+
baseBranch: intent.baseBranch,
|
|
110
|
+
headBranch: intent.headBranch,
|
|
111
|
+
baseHead: intent.baseHead,
|
|
112
|
+
localHead: intent.localHead,
|
|
113
|
+
tree,
|
|
114
|
+
files: [],
|
|
115
|
+
title: intent.title,
|
|
116
|
+
body: intent.body,
|
|
117
|
+
marker: intent.marker,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function parseChangedFiles(value) {
|
|
121
|
+
const parts = value.split('\0');
|
|
122
|
+
if (parts.at(-1) === '')
|
|
123
|
+
parts.pop();
|
|
124
|
+
if (parts.length % 2 !== 0)
|
|
125
|
+
throw new Error('Git returned a malformed changed-file list');
|
|
126
|
+
const result = [];
|
|
127
|
+
for (let index = 0; index < parts.length; index += 2) {
|
|
128
|
+
const status = parts[index];
|
|
129
|
+
const path = parts[index + 1];
|
|
130
|
+
if (status === undefined || path === undefined || !/^[A-Z]$/.test(status) || path.length === 0) {
|
|
131
|
+
throw new Error('Git returned a malformed changed-file entry');
|
|
132
|
+
}
|
|
133
|
+
result.push({ status, path });
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
function parseTree(value) {
|
|
138
|
+
const records = value.split('\0');
|
|
139
|
+
if (records.at(-1) === '')
|
|
140
|
+
records.pop();
|
|
141
|
+
if (records.length > MAX_TREE_ENTRIES)
|
|
142
|
+
throw new Error('publication tree exceeds its safety bound');
|
|
143
|
+
return records.map((record) => {
|
|
144
|
+
const match = /^(100644|100755) blob ([a-f0-9]{40})\t(.+)$/.exec(record);
|
|
145
|
+
if (match?.[1] === undefined || match[2] === undefined || match[3] === undefined) {
|
|
146
|
+
throw new Error('GitHub MCP publication supports only regular SHA-1 blob entries');
|
|
147
|
+
}
|
|
148
|
+
return { mode: match[1], type: 'blob', sha: match[2], path: match[3] };
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function isWorkflow(path) {
|
|
152
|
+
return path.startsWith('.github/workflows/') && (path.endsWith('.yml') || path.endsWith('.yaml'));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/publication/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, Publication } from './service.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { RunId, TerminalRun } from '../admission.js';
|
|
3
|
+
declare module '@deepseek-ai/cordis' {
|
|
4
|
+
interface Context {
|
|
5
|
+
publication: Publication;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** Sole Host owner of recoverable branch and ready-for-review pull-request publication. */
|
|
9
|
+
export declare class Publication 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
|
+
/**
|
|
18
|
+
* Claim and reconcile one persisted verified intent, revalidate local Git, and create at most one deterministic branch
|
|
19
|
+
* and ready PR. Ambiguous writes remain `publishing/uncertain`; bounded definite failures end the run as `failed`.
|
|
20
|
+
*/
|
|
21
|
+
publish(runId: RunId, callerSignal?: AbortSignal): Promise<TerminalRun>;
|
|
22
|
+
private publishOwned;
|
|
23
|
+
private reconcileAndPublish;
|
|
24
|
+
private assertAccepting;
|
|
25
|
+
private assertGeneration;
|
|
26
|
+
}
|
|
27
|
+
export default Publication;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
2
|
+
import { CodeHostProviderError } from '../code-host.js';
|
|
3
|
+
import { preparePublication } from './git.js';
|
|
4
|
+
/** Sole Host owner of recoverable branch and ready-for-review pull-request publication. */
|
|
5
|
+
export class Publication extends Service {
|
|
6
|
+
static inject = ['admission', 'codeHost', 'subprocess'];
|
|
7
|
+
active = new Map();
|
|
8
|
+
controller = new AbortController();
|
|
9
|
+
accepting = false;
|
|
10
|
+
generation = 0;
|
|
11
|
+
constructor(ctx) {
|
|
12
|
+
super(ctx, 'publication');
|
|
13
|
+
}
|
|
14
|
+
async *[Service.init]() {
|
|
15
|
+
this.accepting = true;
|
|
16
|
+
this.generation += 1;
|
|
17
|
+
yield async () => {
|
|
18
|
+
this.accepting = false;
|
|
19
|
+
this.generation += 1;
|
|
20
|
+
this.controller.abort(new Error('publication owner was disposed'));
|
|
21
|
+
await Promise.allSettled(this.active.values());
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Claim and reconcile one persisted verified intent, revalidate local Git, and create at most one deterministic branch
|
|
26
|
+
* and ready PR. Ambiguous writes remain `publishing/uncertain`; bounded definite failures end the run as `failed`.
|
|
27
|
+
*/
|
|
28
|
+
publish(runId, callerSignal) {
|
|
29
|
+
this.assertAccepting();
|
|
30
|
+
const current = this.active.get(runId);
|
|
31
|
+
if (current !== undefined)
|
|
32
|
+
return current;
|
|
33
|
+
const generation = this.generation;
|
|
34
|
+
const signal = callerSignal === undefined ? this.controller.signal : AbortSignal.any([this.controller.signal, callerSignal]);
|
|
35
|
+
const operation = this.publishOwned(runId, generation, signal).finally(() => this.active.delete(runId));
|
|
36
|
+
this.active.set(runId, operation);
|
|
37
|
+
return operation;
|
|
38
|
+
}
|
|
39
|
+
async publishOwned(runId, generation, signal) {
|
|
40
|
+
const { run, owner } = await this.ctx.admission.claimPublication(runId);
|
|
41
|
+
try {
|
|
42
|
+
this.assertGeneration(generation, signal);
|
|
43
|
+
const publication = await preparePublication(this.ctx.subprocess, run, signal);
|
|
44
|
+
this.assertGeneration(generation, signal);
|
|
45
|
+
return await this.ctx.codeHost.withProvider(run.publication?.providerId ?? publicationProviderMissing(), (provider) => this.reconcileAndPublish(runId, owner, provider, publication, generation, signal));
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const failure = classifyFailure(error, signal.aborted || generation !== this.generation);
|
|
49
|
+
try {
|
|
50
|
+
return await this.ctx.admission.failPublication(runId, owner, error, failure.status, failure.retryAfterMs);
|
|
51
|
+
}
|
|
52
|
+
catch (commitError) {
|
|
53
|
+
throw new AggregateError([error, commitError], 'publication failed and its durable outcome could not be recorded');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async reconcileAndPublish(runId, owner, provider, publication, generation, signal) {
|
|
58
|
+
let observed = await provider.reconcile(publication, signal);
|
|
59
|
+
this.assertGeneration(generation, signal);
|
|
60
|
+
assertBaseAndConflict(publication.baseHead, observed);
|
|
61
|
+
if (observed.pullRequest.kind === 'matching') {
|
|
62
|
+
assertReadyReceipt(observed.pullRequest.receipt, publication, observed);
|
|
63
|
+
this.assertGeneration(generation, signal);
|
|
64
|
+
await this.ctx.admission.recordPublicationBranch(runId, owner, observed.pullRequest.receipt.remoteHead);
|
|
65
|
+
return await this.ctx.admission.completePublication(runId, owner, observed.pullRequest.receipt);
|
|
66
|
+
}
|
|
67
|
+
if (observed.branch.kind === 'missing') {
|
|
68
|
+
this.ctx.admission.assertPublicationOwner(runId, owner);
|
|
69
|
+
this.assertGeneration(generation, signal);
|
|
70
|
+
await provider.createBranch(publication, signal);
|
|
71
|
+
this.assertGeneration(generation, signal);
|
|
72
|
+
observed = await provider.reconcile(publication, signal);
|
|
73
|
+
this.assertGeneration(generation, signal);
|
|
74
|
+
assertBaseAndConflict(publication.baseHead, observed);
|
|
75
|
+
}
|
|
76
|
+
if (observed.branch.kind === 'base') {
|
|
77
|
+
this.ctx.admission.assertPublicationOwner(runId, owner);
|
|
78
|
+
this.assertGeneration(generation, signal);
|
|
79
|
+
await provider.publishChanges(publication, signal);
|
|
80
|
+
this.assertGeneration(generation, signal);
|
|
81
|
+
observed = await provider.reconcile(publication, signal);
|
|
82
|
+
this.assertGeneration(generation, signal);
|
|
83
|
+
assertBaseAndConflict(publication.baseHead, observed);
|
|
84
|
+
}
|
|
85
|
+
if (observed.branch.kind !== 'published') {
|
|
86
|
+
throw new CodeHostProviderError('conflict', 'code-host branch did not reconcile to the verified tree');
|
|
87
|
+
}
|
|
88
|
+
this.assertGeneration(generation, signal);
|
|
89
|
+
await this.ctx.admission.recordPublicationBranch(runId, owner, observed.branch.remoteHead);
|
|
90
|
+
if (observed.pullRequest.kind === 'missing') {
|
|
91
|
+
this.ctx.admission.assertPublicationOwner(runId, owner);
|
|
92
|
+
this.assertGeneration(generation, signal);
|
|
93
|
+
const receipt = await provider.createPullRequest(publication, signal);
|
|
94
|
+
try {
|
|
95
|
+
this.assertGeneration(generation, signal);
|
|
96
|
+
assertReadyReceipt(receipt, publication, observed);
|
|
97
|
+
observed = await provider.reconcile(publication, signal);
|
|
98
|
+
this.assertGeneration(generation, signal);
|
|
99
|
+
assertBaseAndConflict(publication.baseHead, observed);
|
|
100
|
+
if (observed.pullRequest.kind !== 'matching') {
|
|
101
|
+
throw new CodeHostProviderError('conflict', 'code-host pull request could not be reconciled by deterministic identity');
|
|
102
|
+
}
|
|
103
|
+
assertReadyReceipt(observed.pullRequest.receipt, publication, observed);
|
|
104
|
+
this.assertGeneration(generation, signal);
|
|
105
|
+
return await this.ctx.admission.completePublication(runId, owner, observed.pullRequest.receipt);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new CodeHostProviderError('ambiguous-acknowledgement', 'pull-request creation succeeded but its durable identity could not be confirmed');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (observed.pullRequest.kind !== 'matching') {
|
|
112
|
+
throw new CodeHostProviderError('conflict', 'code-host pull request could not be reconciled by deterministic identity');
|
|
113
|
+
}
|
|
114
|
+
assertReadyReceipt(observed.pullRequest.receipt, publication, observed);
|
|
115
|
+
this.assertGeneration(generation, signal);
|
|
116
|
+
return await this.ctx.admission.completePublication(runId, owner, observed.pullRequest.receipt);
|
|
117
|
+
}
|
|
118
|
+
assertAccepting() {
|
|
119
|
+
if (!this.accepting)
|
|
120
|
+
throw new Error('publication is unavailable while its required services are changing');
|
|
121
|
+
}
|
|
122
|
+
assertGeneration(generation, signal) {
|
|
123
|
+
signal.throwIfAborted();
|
|
124
|
+
if (!this.accepting || generation !== this.generation)
|
|
125
|
+
throw new Error('publication owner generation was retired');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function assertBaseAndConflict(expectedBase, observed) {
|
|
129
|
+
if (observed.baseHead !== expectedBase)
|
|
130
|
+
throw new CodeHostProviderError('conflict', 'remote base changed after verification');
|
|
131
|
+
if (observed.branch.kind === 'conflict')
|
|
132
|
+
throw new CodeHostProviderError('conflict', 'deterministic branch is unrelated');
|
|
133
|
+
if (observed.pullRequest.kind === 'conflict') {
|
|
134
|
+
throw new CodeHostProviderError('conflict', 'deterministic pull-request identity is unrelated or closed');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function assertReadyReceipt(receipt, publication, observed) {
|
|
138
|
+
const remoteHead = observed.branch.kind === 'missing' ? undefined : observed.branch.remoteHead;
|
|
139
|
+
if (receipt.state !== 'open' ||
|
|
140
|
+
receipt.baseBranch !== publication.baseBranch ||
|
|
141
|
+
receipt.headBranch !== publication.headBranch ||
|
|
142
|
+
remoteHead === undefined ||
|
|
143
|
+
receipt.remoteHead !== remoteHead) {
|
|
144
|
+
throw new CodeHostProviderError('conflict', 'pull request is not a ready open handoff for the published branch');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function classifyFailure(error, ownerRetired) {
|
|
148
|
+
if (ownerRetired)
|
|
149
|
+
return { status: 'uncertain' };
|
|
150
|
+
if (error instanceof CodeHostProviderError) {
|
|
151
|
+
if (['ambiguous-acknowledgement', 'timeout'].includes(error.code))
|
|
152
|
+
return { status: 'uncertain' };
|
|
153
|
+
if (['rate-limit', 'transient', 'provider-unavailable'].includes(error.code)) {
|
|
154
|
+
return {
|
|
155
|
+
status: 'retryable-failure',
|
|
156
|
+
...(error.retryAfterMs === undefined ? {} : { retryAfterMs: error.retryAfterMs }),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return { status: 'failed' };
|
|
161
|
+
}
|
|
162
|
+
function publicationProviderMissing() {
|
|
163
|
+
throw new Error('publication intent has no provider identity');
|
|
164
|
+
}
|
|
165
|
+
export default Publication;
|
|
166
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/publication/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAmD,MAAM,iBAAiB,CAAA;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAQ7C,2FAA2F;AAC3F,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,MAAM,CAAU,MAAM,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAA;IAC/C,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAC3C,SAAS,GAAG,KAAK,CAAA;IACjB,UAAU,GAAG,CAAC,CAAA;IAEtB,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;QACpB,MAAM,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAClE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAChD,CAAC,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,KAAY,EAAE,YAA0B;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAA;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,MAAM,MAAM,GACV,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;QAC/G,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACvG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACjC,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAY,EAAE,UAAkB,EAAE,MAAmB;QAC9E,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvE,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAC9E,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CACzC,GAAG,CAAC,WAAW,EAAE,UAAU,IAAI,0BAA0B,EAAE,EAC3D,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAChG,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAA;YACxF,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;YAC5G,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,cAAc,CACtB,CAAC,KAAK,EAAE,WAAW,CAAC,EACpB,kEAAkE,CACnE,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAY,EACZ,KAAa,EACb,QAA2B,EAC3B,WAA2D,EAC3D,UAAkB,EAClB,MAAmB;QAEnB,IAAI,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAC5D,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACzC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACrD,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7C,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;YACvE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YACvG,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjG,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YACxD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAClD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YACxD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACzC,MAAM,IAAI,qBAAqB,CAAC,UAAU,EAAE,yDAAyD,CAAC,CAAA;QACxG,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAE1F,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YACrE,IAAI,CAAC;gBACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBACzC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBAClD,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;gBACxD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBACzC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBACrD,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7C,MAAM,IAAI,qBAAqB,CAC7B,UAAU,EACV,0EAA0E,CAC3E,CAAA;gBACH,CAAC;gBACD,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACvE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBACzC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,qBAAqB,CAC7B,2BAA2B,EAC3B,iFAAiF,CAClF,CAAA;YACH,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7C,MAAM,IAAI,qBAAqB,CAC7B,UAAU,EACV,0EAA0E,CAC3E,CAAA;QACH,CAAC;QACD,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QACvE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACzC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACjG,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;IAC7G,CAAC;IAEO,gBAAgB,CAAC,UAAkB,EAAE,MAAmB;QAC9D,MAAM,CAAC,cAAc,EAAE,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IACpH,CAAC;CACF;AAED,SAAS,qBAAqB,CAC5B,YAAoB,EACpB,QAA6D;IAE7D,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY;QACpC,MAAM,IAAI,qBAAqB,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAA;IACvF,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;QACrC,MAAM,IAAI,qBAAqB,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAA;IAClF,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7C,MAAM,IAAI,qBAAqB,CAAC,UAAU,EAAE,4DAA4D,CAAC,CAAA;IAC3G,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA2B,EAC3B,WAA2D,EAC3D,QAA6D;IAE7D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAA;IAC9F,IACE,OAAO,CAAC,KAAK,KAAK,MAAM;QACxB,OAAO,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU;QAC7C,OAAO,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU;QAC7C,UAAU,KAAK,SAAS;QACxB,OAAO,CAAC,UAAU,KAAK,UAAU,EACjC,CAAC;QACD,MAAM,IAAI,qBAAqB,CAAC,UAAU,EAAE,mEAAmE,CAAC,CAAA;IAClH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,YAAqB;IAErB,IAAI,YAAY;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;IAChD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,IAAI,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;QACjG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7E,OAAO;gBACL,MAAM,EAAE,mBAAmB;gBAC3B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;aAClF,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC7B,CAAC;AAED,SAAS,0BAA0B;IACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;AAChE,CAAC;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication.js","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reconciliation/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
2
|
+
/** Exact Host route that accepts provider-authenticated tracker deliveries. */
|
|
3
|
+
export declare const TRACKER_INGRESS_PATH = "/dsh-autopilot/tracker";
|
|
4
|
+
/**
|
|
5
|
+
* Own the bounded Host HTTP adapter for provider-authenticated durable reconciliation.
|
|
6
|
+
*
|
|
7
|
+
* Mounting registers one exact route. Disposal first unregisters it, then aborts partial body reads and drains every
|
|
8
|
+
* active handler, so a retired route cannot call a replacement reconciliation owner. Responses expose only bounded
|
|
9
|
+
* status text; provider, admission, and reconciliation details remain in sanitized operator diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Ingress extends Service {
|
|
12
|
+
static readonly inject: string[];
|
|
13
|
+
private readonly controller;
|
|
14
|
+
private readonly activeHandlers;
|
|
15
|
+
private stopping;
|
|
16
|
+
constructor(ctx: Context);
|
|
17
|
+
[Service.init](): AsyncGenerator<() => Promise<void>, void, void>;
|
|
18
|
+
private dispatch;
|
|
19
|
+
private handle;
|
|
20
|
+
}
|
|
21
|
+
export default Ingress;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
2
|
+
import { AdmissionIngressError } from '../admission.js';
|
|
3
|
+
import { TrackerProviderError } from '../tracker.js';
|
|
4
|
+
import { ReconciliationError } from './service.js';
|
|
5
|
+
/** Exact Host route that accepts provider-authenticated tracker deliveries. */
|
|
6
|
+
export const TRACKER_INGRESS_PATH = '/dsh-autopilot/tracker';
|
|
7
|
+
const MAX_INGRESS_BODY_BYTES = 256 * 1024;
|
|
8
|
+
const MAX_CONCURRENT_INGRESS_HANDLERS = 32;
|
|
9
|
+
class PayloadTooLargeError extends Error {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Own the bounded Host HTTP adapter for provider-authenticated durable reconciliation.
|
|
13
|
+
*
|
|
14
|
+
* Mounting registers one exact route. Disposal first unregisters it, then aborts partial body reads and drains every
|
|
15
|
+
* active handler, so a retired route cannot call a replacement reconciliation owner. Responses expose only bounded
|
|
16
|
+
* status text; provider, admission, and reconciliation details remain in sanitized operator diagnostics.
|
|
17
|
+
*/
|
|
18
|
+
export class Ingress extends Service {
|
|
19
|
+
static inject = ['autopilotReconciliation', 'webServer'];
|
|
20
|
+
controller = new AbortController();
|
|
21
|
+
activeHandlers = new Set();
|
|
22
|
+
stopping = false;
|
|
23
|
+
constructor(ctx) {
|
|
24
|
+
super(ctx, 'autopilotIngress');
|
|
25
|
+
}
|
|
26
|
+
async *[Service.init]() {
|
|
27
|
+
const unregister = this.ctx.webServer.register({
|
|
28
|
+
kind: 'exact',
|
|
29
|
+
path: TRACKER_INGRESS_PATH,
|
|
30
|
+
handler: (request, response) => this.dispatch(request, response),
|
|
31
|
+
});
|
|
32
|
+
yield async () => {
|
|
33
|
+
this.stopping = true;
|
|
34
|
+
unregister();
|
|
35
|
+
this.controller.abort(new Error('tracker ingress route was disposed'));
|
|
36
|
+
await Promise.allSettled(this.activeHandlers);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
dispatch(request, response) {
|
|
40
|
+
if (this.stopping) {
|
|
41
|
+
writeResponse(response, 503);
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
}
|
|
44
|
+
if (this.activeHandlers.size >= MAX_CONCURRENT_INGRESS_HANDLERS) {
|
|
45
|
+
writeResponse(response, 429, 1);
|
|
46
|
+
return Promise.resolve();
|
|
47
|
+
}
|
|
48
|
+
let active;
|
|
49
|
+
active = this.handle(request, response).finally(() => {
|
|
50
|
+
this.activeHandlers.delete(active);
|
|
51
|
+
});
|
|
52
|
+
this.activeHandlers.add(active);
|
|
53
|
+
return active;
|
|
54
|
+
}
|
|
55
|
+
async handle(request, response) {
|
|
56
|
+
try {
|
|
57
|
+
const body = await readBoundedBody(request, this.controller.signal);
|
|
58
|
+
await this.ctx.autopilotReconciliation.acceptIngress({
|
|
59
|
+
method: request.method ?? '',
|
|
60
|
+
headers: rawHeaders(request),
|
|
61
|
+
body,
|
|
62
|
+
}, this.controller.signal);
|
|
63
|
+
writeResponse(response, 204);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (response.destroyed || response.writableEnded)
|
|
67
|
+
return;
|
|
68
|
+
const { status, retryAfterSeconds } = httpFailure(error);
|
|
69
|
+
writeResponse(response, status, retryAfterSeconds);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function readBoundedBody(request, signal) {
|
|
74
|
+
signal.throwIfAborted();
|
|
75
|
+
const declared = request.headers['content-length'];
|
|
76
|
+
if (declared !== undefined) {
|
|
77
|
+
const length = Number(declared);
|
|
78
|
+
if (!Number.isSafeInteger(length) || length < 0)
|
|
79
|
+
throw new TrackerProviderError('invalid-response', 'invalid body');
|
|
80
|
+
if (length > MAX_INGRESS_BODY_BYTES)
|
|
81
|
+
throw new PayloadTooLargeError();
|
|
82
|
+
}
|
|
83
|
+
const chunks = [];
|
|
84
|
+
let total = 0;
|
|
85
|
+
const abort = () => {
|
|
86
|
+
request.destroy(signal.reason instanceof Error ? signal.reason : new Error('tracker ingress body read was aborted'));
|
|
87
|
+
};
|
|
88
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
89
|
+
try {
|
|
90
|
+
for await (const chunk of request) {
|
|
91
|
+
signal.throwIfAborted();
|
|
92
|
+
const bytes = typeof chunk === 'string' ? new TextEncoder().encode(chunk) : new Uint8Array(chunk);
|
|
93
|
+
total += bytes.byteLength;
|
|
94
|
+
if (total > MAX_INGRESS_BODY_BYTES)
|
|
95
|
+
throw new PayloadTooLargeError();
|
|
96
|
+
chunks.push(bytes);
|
|
97
|
+
}
|
|
98
|
+
signal.throwIfAborted();
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
signal.removeEventListener('abort', abort);
|
|
102
|
+
}
|
|
103
|
+
const body = new Uint8Array(total);
|
|
104
|
+
let offset = 0;
|
|
105
|
+
for (const chunk of chunks) {
|
|
106
|
+
body.set(chunk, offset);
|
|
107
|
+
offset += chunk.byteLength;
|
|
108
|
+
}
|
|
109
|
+
return body;
|
|
110
|
+
}
|
|
111
|
+
function rawHeaders(request) {
|
|
112
|
+
const headers = [];
|
|
113
|
+
for (let index = 0; index < request.rawHeaders.length; index += 2) {
|
|
114
|
+
const name = request.rawHeaders[index];
|
|
115
|
+
const value = request.rawHeaders[index + 1];
|
|
116
|
+
if (name !== undefined && value !== undefined)
|
|
117
|
+
headers.push({ name: name.toLowerCase(), value });
|
|
118
|
+
}
|
|
119
|
+
return headers;
|
|
120
|
+
}
|
|
121
|
+
function httpFailure(error) {
|
|
122
|
+
if (error instanceof PayloadTooLargeError)
|
|
123
|
+
return { status: 413 };
|
|
124
|
+
if (error instanceof AdmissionIngressError) {
|
|
125
|
+
return error.code === 'queue-capacity' ? { status: 429, retryAfterSeconds: 1 } : { status: 503 };
|
|
126
|
+
}
|
|
127
|
+
if (error instanceof ReconciliationError) {
|
|
128
|
+
return error.code === 'overloaded' ? { status: 429, retryAfterSeconds: 1 } : { status: 503 };
|
|
129
|
+
}
|
|
130
|
+
if (!(error instanceof TrackerProviderError))
|
|
131
|
+
return { status: 503 };
|
|
132
|
+
switch (error.code) {
|
|
133
|
+
case 'authentication':
|
|
134
|
+
return { status: 401 };
|
|
135
|
+
case 'permission':
|
|
136
|
+
return { status: 403 };
|
|
137
|
+
case 'invalid-response':
|
|
138
|
+
return { status: 400 };
|
|
139
|
+
case 'conflict':
|
|
140
|
+
case 'ambiguous-acknowledgement':
|
|
141
|
+
return { status: 409 };
|
|
142
|
+
case 'rate-limit':
|
|
143
|
+
return {
|
|
144
|
+
status: 429,
|
|
145
|
+
...(error.retryAfterMs === undefined ? {} : { retryAfterSeconds: Math.ceil(error.retryAfterMs / 1000) }),
|
|
146
|
+
};
|
|
147
|
+
case 'timeout':
|
|
148
|
+
return { status: 504 };
|
|
149
|
+
case 'invalid-configuration':
|
|
150
|
+
case 'not-found':
|
|
151
|
+
case 'transient':
|
|
152
|
+
case 'unsupported-capability':
|
|
153
|
+
case 'provider-unavailable':
|
|
154
|
+
return { status: 503 };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function writeResponse(response, status, retryAfterSeconds) {
|
|
158
|
+
if (response.destroyed || response.writableEnded)
|
|
159
|
+
return;
|
|
160
|
+
response.writeHead(status, {
|
|
161
|
+
'cache-control': 'no-store',
|
|
162
|
+
...(status === 204 ? {} : { 'content-type': 'text/plain; charset=utf-8' }),
|
|
163
|
+
...(retryAfterSeconds === undefined ? {} : { 'retry-after': String(retryAfterSeconds) }),
|
|
164
|
+
});
|
|
165
|
+
response.end(status === 204 ? undefined : status === 401 ? 'unauthorized' : 'webhook rejected');
|
|
166
|
+
}
|
|
167
|
+
export default Ingress;
|
|
168
|
+
//# sourceMappingURL=ingress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../src/reconciliation/ingress.ts"],"names":[],"mappings":"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"}
|