@treeseed/sdk 0.10.28 → 0.12.4
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/README.md +213 -7
- package/dist/agent-capacity.d.ts +916 -0
- package/dist/agent-capacity.js +1600 -0
- package/dist/agent-tools.d.ts +37 -0
- package/dist/agent-tools.js +301 -0
- package/dist/api/app.d.ts +1 -1
- package/dist/api/auth/d1-database.d.ts +2 -2
- package/dist/api/auth/d1-provider.d.ts +4 -4
- package/dist/api/auth/d1-store.d.ts +2 -2
- package/dist/api/auth/memory-provider.d.ts +1 -1
- package/dist/api/auth/tokens.d.ts +1 -1
- package/dist/api/config.d.ts +3 -1
- package/dist/api/config.js +34 -10
- package/dist/api/http.d.ts +2 -2
- package/dist/api/index.d.ts +10 -10
- package/dist/api/index.js +4 -2
- package/dist/api/operations-routes.d.ts +3 -3
- package/dist/api/operations.d.ts +1 -1
- package/dist/api/providers.d.ts +1 -1
- package/dist/api/providers.js +21 -4
- package/dist/api/railway.d.ts +3 -2
- package/dist/api/sdk-dispatch.d.ts +4 -4
- package/dist/api/sdk-routes.d.ts +2 -2
- package/dist/api/templates.d.ts +2 -2
- package/dist/api/types.d.ts +3 -2
- package/dist/capacity-provider.d.ts +118 -59
- package/dist/capacity-provider.js +235 -43
- package/dist/capacity.d.ts +2 -2
- package/dist/cli-tools.d.ts +1 -1
- package/dist/content-operations.d.ts +97 -0
- package/dist/content-operations.js +250 -0
- package/dist/content-store.d.ts +4 -4
- package/dist/control-plane-client.d.ts +13 -18
- package/dist/control-plane-client.js +8 -86
- package/dist/control-plane.d.ts +3 -2
- package/dist/control-plane.js +38 -13
- package/dist/copilot.d.ts +3 -0
- package/dist/copilot.js +16 -1
- package/dist/d1-http.d.ts +1 -1
- package/dist/d1-store.d.ts +32 -57
- package/dist/d1-store.js +115 -318
- package/dist/db/d1.d.ts +1 -232
- package/dist/db/index.d.ts +3 -3
- package/dist/db/market-schema.d.ts +50900 -11018
- package/dist/db/market-schema.js +2313 -467
- package/dist/db/node-sqlite.d.ts +1 -232
- package/dist/db/node-sqlite.js +7 -2
- package/dist/db/schema.d.ts +0 -462
- package/dist/db/schema.js +2 -22
- package/dist/dispatch.d.ts +1 -1
- package/dist/dispatch.js +0 -11
- package/dist/fixture-support.js +52 -4
- package/dist/governance.d.ts +133 -0
- package/dist/governance.js +285 -0
- package/dist/graph/build.d.ts +2 -2
- package/dist/graph/context-query-contracts.d.ts +1 -1
- package/dist/graph/dsl.d.ts +1 -1
- package/dist/graph/query.d.ts +4 -4
- package/dist/graph/ranking.d.ts +1 -1
- package/dist/graph/schema.d.ts +1 -1
- package/dist/graph.d.ts +11 -11
- package/dist/guarantees/index.d.ts +425 -0
- package/dist/guarantees/index.js +1146 -0
- package/dist/hosting/apps.d.ts +12 -0
- package/dist/hosting/apps.js +107 -0
- package/dist/hosting/builtins.d.ts +25 -0
- package/dist/hosting/builtins.js +602 -0
- package/dist/hosting/contracts.d.ts +208 -0
- package/dist/hosting/contracts.js +0 -0
- package/dist/hosting/graph.d.ts +195 -0
- package/dist/hosting/graph.js +1092 -0
- package/dist/hosting/index.d.ts +4 -0
- package/dist/hosting/index.js +4 -0
- package/dist/index.d.ts +88 -67
- package/dist/index.js +142 -14
- package/dist/local-dev/managed-dev.d.ts +85 -0
- package/dist/local-dev/managed-dev.js +368 -0
- package/dist/managed-dependencies.d.ts +9 -0
- package/dist/managed-dependencies.js +10 -9
- package/dist/market-client.d.ts +327 -9
- package/dist/market-client.js +464 -20
- package/dist/model-registry.d.ts +1 -1
- package/dist/model-registry.js +19 -19
- package/dist/operations/agent-tools.d.ts +2 -11
- package/dist/operations/agent-tools.js +2 -14
- package/dist/operations/providers/default.d.ts +1 -1
- package/dist/operations/providers/default.js +20 -37
- package/dist/operations/repository-operations.d.ts +26 -2
- package/dist/operations/repository-operations.js +159 -1
- package/dist/operations/runtime.d.ts +3 -3
- package/dist/operations/services/bootstrap-runner.d.ts +4 -2
- package/dist/operations/services/bootstrap-runner.js +22 -2
- package/dist/operations/services/build-warning-policy.d.ts +34 -0
- package/dist/operations/services/build-warning-policy.js +81 -82
- package/dist/operations/services/commit-message-provider.js +4 -4
- package/dist/operations/services/config-runtime.d.ts +83 -24
- package/dist/operations/services/config-runtime.js +449 -130
- package/dist/operations/services/deploy.d.ts +106 -624
- package/dist/operations/services/deploy.js +746 -263
- package/dist/operations/services/deployment-readiness.d.ts +30 -0
- package/dist/operations/services/deployment-readiness.js +206 -0
- package/dist/operations/services/git-remote-policy.js +12 -4
- package/dist/operations/services/git-runner.d.ts +66 -0
- package/dist/operations/services/git-runner.js +479 -0
- package/dist/operations/services/git-workflow.d.ts +45 -6
- package/dist/operations/services/git-workflow.js +251 -23
- package/dist/operations/services/github-actions-verification.d.ts +4 -1
- package/dist/operations/services/github-actions-verification.js +12 -3
- package/dist/operations/services/github-api.js +22 -6
- package/dist/operations/services/github-automation.d.ts +4 -4
- package/dist/operations/services/github-automation.js +19 -21
- package/dist/operations/services/github-credentials.d.ts +13 -0
- package/dist/operations/services/github-credentials.js +59 -0
- package/dist/operations/services/hosted-service-checks.d.ts +81 -0
- package/dist/operations/services/hosted-service-checks.js +478 -0
- package/dist/operations/services/hosting-audit.d.ts +2 -2
- package/dist/operations/services/hosting-audit.js +7 -7
- package/dist/operations/services/hub-launch.d.ts +1 -1
- package/dist/operations/services/hub-provider-launch.d.ts +5 -5
- package/dist/operations/services/hub-provider-launch.js +22 -17
- package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
- package/dist/operations/services/live-hosted-service-checks.js +463 -0
- package/dist/operations/services/local-dev.js +0 -1
- package/dist/operations/services/managed-host-security.d.ts +1 -1
- package/dist/operations/services/managed-host-security.js +1 -1
- package/dist/operations/services/managed-repositories.d.ts +37 -0
- package/dist/operations/services/managed-repositories.js +177 -0
- package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
- package/dist/operations/services/operations-runner-smoke.js +198 -0
- package/dist/operations/services/package-adapters.d.ts +170 -0
- package/dist/operations/services/package-adapters.js +859 -0
- package/dist/operations/services/package-reference-policy.d.ts +13 -88
- package/dist/operations/services/package-reference-policy.js +96 -215
- package/dist/operations/services/project-host-operations.d.ts +4 -4
- package/dist/operations/services/project-platform.d.ts +57 -173
- package/dist/operations/services/project-platform.js +80 -111
- package/dist/operations/services/project-web-monitor.d.ts +2 -2
- package/dist/operations/services/project-web-monitor.js +122 -5
- package/dist/operations/services/railway-api.d.ts +117 -5
- package/dist/operations/services/railway-api.js +915 -93
- package/dist/operations/services/railway-deploy.d.ts +30 -112
- package/dist/operations/services/railway-deploy.js +521 -961
- package/dist/operations/services/release-history.js +3 -4
- package/dist/operations/services/release-proof-ledger.d.ts +13 -0
- package/dist/operations/services/release-proof-ledger.js +81 -0
- package/dist/operations/services/release-proof-planner.d.ts +48 -0
- package/dist/operations/services/release-proof-planner.js +195 -0
- package/dist/operations/services/release-proof-runner.d.ts +16 -0
- package/dist/operations/services/release-proof-runner.js +169 -0
- package/dist/operations/services/release-proof.d.ts +81 -0
- package/dist/operations/services/release-proof.js +79 -0
- package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
- package/dist/operations/services/repository-save-orchestrator.js +604 -212
- package/dist/operations/services/runtime-paths.d.ts +1 -3
- package/dist/operations/services/runtime-paths.js +0 -4
- package/dist/operations/services/runtime-tools.d.ts +1 -191
- package/dist/operations/services/runtime-tools.js +4 -443
- package/dist/operations/services/save-deploy-preflight.js +9 -1
- package/dist/operations/services/template-host-bindings.d.ts +2 -2
- package/dist/operations/services/template-host-bindings.js +3 -2
- package/dist/operations/services/template-registry.d.ts +6 -6
- package/dist/operations/services/template-registry.js +33 -14
- package/dist/operations/services/template-secret-sync.d.ts +3 -3
- package/dist/operations/services/verification-cache.d.ts +25 -0
- package/dist/operations/services/verification-cache.js +71 -0
- package/dist/operations/services/workflow-timing.d.ts +25 -0
- package/dist/operations/services/workflow-timing.js +79 -0
- package/dist/operations/services/workspace-dependency-mode.js +50 -5
- package/dist/operations/services/workspace-preflight.js +8 -8
- package/dist/operations/services/workspace-save-script.d.ts +4 -4
- package/dist/operations/services/workspace-save.d.ts +1 -0
- package/dist/operations/services/workspace-save.js +42 -19
- package/dist/operations/services/workspace-tools.js +42 -7
- package/dist/operations-registry.d.ts +1 -1
- package/dist/operations-registry.js +5 -6
- package/dist/operations-types.d.ts +1 -1
- package/dist/operations.d.ts +17 -11
- package/dist/operations.js +57 -3
- package/dist/platform/book-export.js +2 -0
- package/dist/platform/books-data.d.ts +1 -1
- package/dist/platform/config.d.ts +27 -0
- package/dist/platform/config.js +100 -0
- package/dist/platform/content-runtime-source.d.ts +54 -0
- package/dist/platform/content-runtime-source.js +169 -0
- package/dist/platform/contracts.d.ts +38 -2
- package/dist/platform/deploy-config.d.ts +1 -1
- package/dist/platform/deploy-config.js +80 -9
- package/dist/platform/deploy-runtime.d.ts +1 -1
- package/dist/platform/desired-state.d.ts +63 -0
- package/dist/platform/desired-state.js +1021 -0
- package/dist/platform/env.yaml +568 -45
- package/dist/platform/environment.d.ts +3 -2
- package/dist/platform/environment.js +122 -21
- package/dist/platform/local-content-materialization.d.ts +9 -0
- package/dist/platform/local-content-materialization.js +212 -0
- package/dist/platform/plugin.d.ts +13 -4
- package/dist/platform/plugins/runtime.d.ts +3 -3
- package/dist/platform/plugins/runtime.js +62 -1
- package/dist/platform/plugins.d.ts +6 -6
- package/dist/platform/published-content-pipeline.d.ts +3 -3
- package/dist/platform/published-content-pipeline.js +5 -1
- package/dist/platform/published-content.d.ts +4 -3
- package/dist/platform/site-config-schema.d.ts +1 -0
- package/dist/platform/site-config-schema.js +4 -1
- package/dist/platform/tenant/runtime-config.d.ts +152 -2
- package/dist/platform/tenant-config.d.ts +1 -1
- package/dist/platform/utils/site-config-schema.d.ts +154 -0
- package/dist/platform/utils/site-config-schema.js +400 -461
- package/dist/platform-operation-store.d.ts +1 -1
- package/dist/platform-operation-store.js +2 -2
- package/dist/platform-operations.js +1 -1
- package/dist/plugin-default.d.ts +1 -1
- package/dist/plugin-default.js +27 -12
- package/dist/project-import.d.ts +91 -0
- package/dist/project-import.js +257 -0
- package/dist/project-workflow.d.ts +1 -1
- package/dist/reconcile/bootstrap-systems.d.ts +2 -2
- package/dist/reconcile/bootstrap-systems.js +5 -5
- package/dist/reconcile/builtin-adapters.d.ts +7 -1
- package/dist/reconcile/builtin-adapters.js +3190 -429
- package/dist/reconcile/contracts.d.ts +23 -6
- package/dist/reconcile/desired-state.d.ts +2 -192
- package/dist/reconcile/desired-state.js +29 -38
- package/dist/reconcile/engine.d.ts +61 -395
- package/dist/reconcile/engine.js +229 -44
- package/dist/reconcile/index.d.ts +10 -8
- package/dist/reconcile/index.js +2 -0
- package/dist/reconcile/live-acceptance.d.ts +100 -0
- package/dist/reconcile/live-acceptance.js +2027 -0
- package/dist/reconcile/platform.d.ts +104 -0
- package/dist/reconcile/platform.js +100 -0
- package/dist/reconcile/providers/docker-private.d.ts +54 -0
- package/dist/reconcile/providers/docker-private.js +101 -0
- package/dist/reconcile/providers/github-private.d.ts +65 -0
- package/dist/reconcile/providers/github-private.js +119 -0
- package/dist/reconcile/providers/local-private.d.ts +28 -0
- package/dist/reconcile/providers/local-private.js +75 -0
- package/dist/reconcile/providers/railway-iac.d.ts +66 -0
- package/dist/reconcile/providers/railway-iac.js +275 -0
- package/dist/reconcile/providers/release-private.d.ts +92 -0
- package/dist/reconcile/providers/release-private.js +152 -0
- package/dist/reconcile/registry.d.ts +2 -2
- package/dist/reconcile/registry.js +16 -1
- package/dist/reconcile/state.d.ts +1 -1
- package/dist/reconcile/state.js +7 -44
- package/dist/reconcile/units.d.ts +1 -1
- package/dist/reconcile/units.js +9 -3
- package/dist/remote.d.ts +6 -6
- package/dist/scenes/artifacts.d.ts +16 -0
- package/dist/scenes/artifacts.js +61 -0
- package/dist/scenes/auth.d.ts +2 -0
- package/dist/scenes/auth.js +28 -0
- package/dist/scenes/base-url.d.ts +12 -0
- package/dist/scenes/base-url.js +123 -0
- package/dist/scenes/builtin-plugins.d.ts +2 -0
- package/dist/scenes/builtin-plugins.js +447 -0
- package/dist/scenes/checkpoints.d.ts +14 -0
- package/dist/scenes/checkpoints.js +33 -0
- package/dist/scenes/device-matrix.d.ts +2 -0
- package/dist/scenes/device-matrix.js +97 -0
- package/dist/scenes/devices.d.ts +11 -0
- package/dist/scenes/devices.js +22 -0
- package/dist/scenes/diagnostics.d.ts +5 -0
- package/dist/scenes/diagnostics.js +22 -0
- package/dist/scenes/diagram-providers.d.ts +2 -0
- package/dist/scenes/diagram-providers.js +181 -0
- package/dist/scenes/diagram-validation.d.ts +22 -0
- package/dist/scenes/diagram-validation.js +74 -0
- package/dist/scenes/environment.d.ts +2 -0
- package/dist/scenes/environment.js +65 -0
- package/dist/scenes/evidence-bundle.d.ts +5 -0
- package/dist/scenes/evidence-bundle.js +42 -0
- package/dist/scenes/evidence-report.d.ts +10 -0
- package/dist/scenes/evidence-report.js +73 -0
- package/dist/scenes/evidence.d.ts +16 -0
- package/dist/scenes/evidence.js +277 -0
- package/dist/scenes/index.d.ts +48 -0
- package/dist/scenes/index.js +312 -0
- package/dist/scenes/inspect.d.ts +9 -0
- package/dist/scenes/inspect.js +64 -0
- package/dist/scenes/loader.d.ts +3 -0
- package/dist/scenes/loader.js +38 -0
- package/dist/scenes/logs.d.ts +2 -0
- package/dist/scenes/logs.js +47 -0
- package/dist/scenes/operations.d.ts +3 -0
- package/dist/scenes/operations.js +128 -0
- package/dist/scenes/phase0.d.ts +9 -0
- package/dist/scenes/phase0.js +637 -0
- package/dist/scenes/planner.d.ts +12 -0
- package/dist/scenes/planner.js +166 -0
- package/dist/scenes/playwright-adapter.d.ts +2 -0
- package/dist/scenes/playwright-adapter.js +63 -0
- package/dist/scenes/plugins.d.ts +5 -0
- package/dist/scenes/plugins.js +115 -0
- package/dist/scenes/progress.d.ts +17 -0
- package/dist/scenes/progress.js +24 -0
- package/dist/scenes/publish-destinations.d.ts +12 -0
- package/dist/scenes/publish-destinations.js +99 -0
- package/dist/scenes/publish-plan-report.d.ts +10 -0
- package/dist/scenes/publish-plan-report.js +70 -0
- package/dist/scenes/publish-plan.d.ts +15 -0
- package/dist/scenes/publish-plan.js +248 -0
- package/dist/scenes/publish-redaction.d.ts +16 -0
- package/dist/scenes/publish-redaction.js +148 -0
- package/dist/scenes/publish-release-record.d.ts +13 -0
- package/dist/scenes/publish-release-record.js +34 -0
- package/dist/scenes/publish-report.d.ts +10 -0
- package/dist/scenes/publish-report.js +67 -0
- package/dist/scenes/publish.d.ts +16 -0
- package/dist/scenes/publish.js +298 -0
- package/dist/scenes/registry.d.ts +12 -0
- package/dist/scenes/registry.js +65 -0
- package/dist/scenes/remotion-adapter.d.ts +3 -0
- package/dist/scenes/remotion-adapter.js +94 -0
- package/dist/scenes/remotion-composition-registry.d.ts +2 -0
- package/dist/scenes/remotion-composition-registry.js +12 -0
- package/dist/scenes/remotion-compositions.d.ts +15 -0
- package/dist/scenes/remotion-compositions.js +464 -0
- package/dist/scenes/remotion-diagrams.d.ts +9 -0
- package/dist/scenes/remotion-diagrams.js +188 -0
- package/dist/scenes/remotion-input.d.ts +13 -0
- package/dist/scenes/remotion-input.js +291 -0
- package/dist/scenes/remotion-visuals.d.ts +29 -0
- package/dist/scenes/remotion-visuals.js +198 -0
- package/dist/scenes/render-media-assets.d.ts +9 -0
- package/dist/scenes/render-media-assets.js +117 -0
- package/dist/scenes/render-report.d.ts +10 -0
- package/dist/scenes/render-report.js +27 -0
- package/dist/scenes/render.d.ts +2 -0
- package/dist/scenes/render.js +218 -0
- package/dist/scenes/reporter.d.ts +3 -0
- package/dist/scenes/reporter.js +101 -0
- package/dist/scenes/resume.d.ts +2 -0
- package/dist/scenes/resume.js +79 -0
- package/dist/scenes/runner.d.ts +2 -0
- package/dist/scenes/runner.js +674 -0
- package/dist/scenes/schema.d.ts +6 -0
- package/dist/scenes/schema.js +994 -0
- package/dist/scenes/seed.d.ts +2 -0
- package/dist/scenes/seed.js +83 -0
- package/dist/scenes/segments.d.ts +15 -0
- package/dist/scenes/segments.js +79 -0
- package/dist/scenes/selectors.d.ts +3 -0
- package/dist/scenes/selectors.js +21 -0
- package/dist/scenes/timeline.d.ts +11 -0
- package/dist/scenes/timeline.js +26 -0
- package/dist/scenes/timeouts.d.ts +6 -0
- package/dist/scenes/timeouts.js +17 -0
- package/dist/scenes/training-captions.d.ts +14 -0
- package/dist/scenes/training-captions.js +98 -0
- package/dist/scenes/training-report.d.ts +10 -0
- package/dist/scenes/training-report.js +78 -0
- package/dist/scenes/training-transcript.d.ts +24 -0
- package/dist/scenes/training-transcript.js +204 -0
- package/dist/scenes/training.d.ts +10 -0
- package/dist/scenes/training.js +134 -0
- package/dist/scenes/types.d.ts +1872 -0
- package/dist/scenes/types.js +8 -0
- package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
- package/dist/scenes/visual-audit-contact-sheets.js +119 -0
- package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
- package/dist/scenes/visual-audit-fixtures.js +210 -0
- package/dist/scenes/visual-audit-report.d.ts +11 -0
- package/dist/scenes/visual-audit-report.js +85 -0
- package/dist/scenes/visual-audit-review.d.ts +23 -0
- package/dist/scenes/visual-audit-review.js +829 -0
- package/dist/scenes/visual-audit-routes.d.ts +13 -0
- package/dist/scenes/visual-audit-routes.js +308 -0
- package/dist/scenes/visual-audit.d.ts +3 -0
- package/dist/scenes/visual-audit.js +596 -0
- package/dist/scripts/build-dist.js +154 -40
- package/dist/scripts/check-build-warnings.js +42 -53
- package/dist/scripts/cleanup-markdown.js +1 -1
- package/dist/scripts/cli-test-fixtures.js +24 -28
- package/dist/scripts/deployment-readiness.js +20 -0
- package/dist/scripts/generate-treedx-openapi-types.js +186 -0
- package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
- package/dist/scripts/operations-runner-smoke.js +16 -0
- package/dist/scripts/package-tools.js +12 -1
- package/dist/scripts/prepare.js +3 -7
- package/dist/scripts/release-verify.js +6 -6
- package/dist/scripts/run-fixture-astro-command.js +1 -1
- package/dist/scripts/template-catalog.test.js +68 -82
- package/dist/scripts/tenant-dev.js +0 -10
- package/dist/scripts/tenant-workflow-action.js +10 -1
- package/dist/scripts/test-cloudflare-local.js +1 -1
- package/dist/scripts/test-scaffold.js +0 -1
- package/dist/scripts/test-smoke.js +3 -3
- package/dist/scripts/treeseed-build-dist.js +4 -7
- package/dist/scripts/treeseed-release-verify.js +1 -1
- package/dist/scripts/verify-driver.js +30 -21
- package/dist/scripts/workflow-commands.test.js +18 -27
- package/dist/scripts/workspace-command-e2e.js +1 -1
- package/dist/scripts/workspace-lint.js +6 -0
- package/dist/scripts/workspace-release-test.js +90 -1
- package/dist/scripts/workspace-test.js +6 -0
- package/dist/sdk-dispatch.d.ts +1 -1
- package/dist/sdk-dispatch.js +0 -16
- package/dist/sdk-fields.d.ts +1 -1
- package/dist/sdk-filters.d.ts +1 -1
- package/dist/sdk-types.d.ts +1352 -116
- package/dist/sdk-types.js +413 -2
- package/dist/sdk.d.ts +106 -100
- package/dist/sdk.js +211 -51
- package/dist/secrets-capability.d.ts +421 -0
- package/dist/secrets-capability.js +530 -0
- package/dist/seeds/normalize.js +1 -0
- package/dist/seeds/planner.js +38 -0
- package/dist/seeds/schema.js +293 -4
- package/dist/seeds/types.d.ts +60 -0
- package/dist/seeds/types.js +9 -1
- package/dist/service-credentials.d.ts +54 -0
- package/dist/service-credentials.js +112 -0
- package/dist/stores/cursor-store.d.ts +2 -2
- package/dist/stores/envelopes.d.ts +1 -1
- package/dist/stores/helpers.d.ts +1 -1
- package/dist/stores/lease-store.d.ts +2 -2
- package/dist/stores/message-store.d.ts +2 -2
- package/dist/stores/operational-store.d.ts +3 -26
- package/dist/stores/operational-store.js +0 -225
- package/dist/stores/project-workflow-store.d.ts +2 -2
- package/dist/stores/run-store.d.ts +2 -3
- package/dist/stores/run-store.js +0 -98
- package/dist/stores/subscription-store.d.ts +2 -3
- package/dist/stores/subscription-store.js +0 -100
- package/dist/template-catalog.d.ts +1 -1
- package/dist/template-launch-requirements.d.ts +2 -2
- package/dist/template-launch-requirements.js +9 -0
- package/dist/template-launch-ui.d.ts +2 -2
- package/dist/treedx/adapters.d.ts +6 -0
- package/dist/treedx/adapters.js +36 -0
- package/dist/treedx/client.d.ts +222 -0
- package/dist/treedx/client.js +871 -0
- package/dist/treedx/errors.d.ts +13 -0
- package/dist/treedx/errors.js +17 -0
- package/dist/treedx/federated-client.d.ts +27 -0
- package/dist/treedx/federated-client.js +158 -0
- package/dist/treedx/generated/openapi-types.d.ts +3558 -0
- package/dist/treedx/generated/openapi-types.js +0 -0
- package/dist/treedx/graph-adapter.d.ts +33 -0
- package/dist/treedx/graph-adapter.js +156 -0
- package/dist/treedx/index.d.ts +14 -0
- package/dist/treedx/index.js +48 -0
- package/dist/treedx/market-integration.d.ts +27 -0
- package/dist/treedx/market-integration.js +131 -0
- package/dist/treedx/ports.d.ts +166 -0
- package/dist/treedx/ports.js +231 -0
- package/dist/treedx/query-adapter.d.ts +19 -0
- package/dist/treedx/query-adapter.js +62 -0
- package/dist/treedx/registry-client.d.ts +11 -0
- package/dist/treedx/registry-client.js +19 -0
- package/dist/treedx/repository-adapter.d.ts +45 -0
- package/dist/treedx/repository-adapter.js +319 -0
- package/dist/treedx/sdk-integration.d.ts +27 -0
- package/dist/treedx/sdk-integration.js +63 -0
- package/dist/treedx/types.d.ts +1084 -0
- package/dist/treedx/types.js +8 -0
- package/dist/treedx/workspace-adapter.d.ts +27 -0
- package/dist/treedx/workspace-adapter.js +65 -0
- package/dist/treedx-backends.d.ts +220 -0
- package/dist/treedx-backends.js +634 -0
- package/dist/treedx-client.d.ts +89 -0
- package/dist/treedx-client.js +184 -0
- package/dist/treeseed/services/compose.yml +2 -3
- package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
- package/dist/types/agents.d.ts +256 -0
- package/dist/types/agents.js +42 -1
- package/dist/verification.d.ts +1 -0
- package/dist/verification.js +143 -14
- package/dist/workflow/operations.d.ts +580 -523
- package/dist/workflow/operations.js +2084 -1279
- package/dist/workflow/policy.js +19 -7
- package/dist/workflow/runs.d.ts +9 -3
- package/dist/workflow/runs.js +66 -26
- package/dist/workflow/session.d.ts +4 -1
- package/dist/workflow/session.js +50 -10
- package/dist/workflow/worktrees.d.ts +6 -2
- package/dist/workflow/worktrees.js +98 -15
- package/dist/workflow-state.d.ts +17 -4
- package/dist/workflow-state.js +68 -41
- package/dist/workflow-support.d.ts +26 -17
- package/dist/workflow-support.js +84 -24
- package/dist/workflow.d.ts +51 -16
- package/dist/workflow.js +19 -7
- package/drizzle/d1/0000_treeseed_d1.sql +0 -18
- package/drizzle/market/0000_market_control_plane.sql +1793 -1499
- package/drizzle/market/0004_treedx_market_integration.sql +99 -0
- package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
- package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
- package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
- package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
- package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
- package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
- package/drizzle/market/0011_github_app_adapter.sql +47 -0
- package/drizzle/market/0012_workday_test_runs.sql +44 -0
- package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
- package/drizzle/market/0014_governance_pipeline.sql +189 -0
- package/package.json +106 -18
- package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
- package/templates/github/deploy-web.workflow.yml +49 -12
- package/dist/operations/services/mailpit-runtime.d.ts +0 -20
- package/dist/operations/services/mailpit-runtime.js +0 -67
- package/dist/operations/services/release-candidate.d.ts +0 -41
- package/dist/operations/services/release-candidate.js +0 -616
- package/dist/scripts/ensure-mailpit.js +0 -48
- package/dist/scripts/logs-mailpit.js +0 -2
- package/dist/scripts/run-ts.js +0 -45
- package/dist/scripts/stop-mailpit.js +0 -5
- package/dist/scripts/treeseed-run-ts.js +0 -45
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
export declare const AGENT_OPERATION_NAMES: readonly ["switch", "dev", "verify", "save", "
|
|
1
|
+
export declare const AGENT_OPERATION_NAMES: readonly ["switch", "dev", "verify", "save", "update", "stage", "close", "release"];
|
|
2
2
|
export declare const AGENT_OPERATION_MODES: readonly ["dry_run", "read_only", "mutating"];
|
|
3
3
|
export type AgentOperationName = (typeof AGENT_OPERATION_NAMES)[number];
|
|
4
4
|
export type AgentOperationMode = (typeof AGENT_OPERATION_MODES)[number];
|
|
5
5
|
export type AgentOperationStatus = 'completed' | 'waiting' | 'failed' | 'skipped' | 'retry_created';
|
|
6
|
-
export interface AgentOperationApprovalRef {
|
|
7
|
-
id: string;
|
|
8
|
-
kind?: string;
|
|
9
|
-
state: 'pending' | 'approved' | 'rejected' | 'expired' | 'superseded';
|
|
10
|
-
}
|
|
11
6
|
export interface AgentOperationRequest {
|
|
12
7
|
operation: AgentOperationName;
|
|
13
8
|
mode: AgentOperationMode;
|
|
@@ -22,8 +17,6 @@ export interface AgentOperationRequest {
|
|
|
22
17
|
worktreeRoot?: string;
|
|
23
18
|
featureBranch?: string;
|
|
24
19
|
stagingBranch?: string;
|
|
25
|
-
approvalId?: string;
|
|
26
|
-
approval?: AgentOperationApprovalRef;
|
|
27
20
|
permissionGrantId?: string;
|
|
28
21
|
allowedPaths?: string[];
|
|
29
22
|
forbiddenPaths?: string[];
|
|
@@ -48,8 +41,6 @@ export interface AgentOperationGrant {
|
|
|
48
41
|
environments?: string[];
|
|
49
42
|
allowedPaths?: string[];
|
|
50
43
|
forbiddenPaths?: string[];
|
|
51
|
-
requiresApproval?: boolean;
|
|
52
|
-
approvalIds?: string[];
|
|
53
44
|
expiresAt?: string;
|
|
54
45
|
metadata?: Record<string, unknown>;
|
|
55
46
|
}
|
|
@@ -80,7 +71,7 @@ export interface AgentOperationResult {
|
|
|
80
71
|
};
|
|
81
72
|
metadata: Record<string, unknown>;
|
|
82
73
|
}
|
|
83
|
-
export type AgentOperationPermissionCode = 'allowed' | 'invalid_operation' | 'operation_permission_required' | 'operation_grant_inactive' | 'operation_grant_expired' | 'operation_mode_not_granted' | 'operation_role_not_granted' | 'operation_task_kind_not_granted' | 'operation_project_not_granted' | 'operation_environment_not_granted' | '
|
|
74
|
+
export type AgentOperationPermissionCode = 'allowed' | 'invalid_operation' | 'operation_permission_required' | 'operation_grant_inactive' | 'operation_grant_expired' | 'operation_mode_not_granted' | 'operation_role_not_granted' | 'operation_task_kind_not_granted' | 'operation_project_not_granted' | 'operation_environment_not_granted' | 'operation_worktree_required' | 'operation_allowed_paths_required' | 'operation_path_not_allowed' | 'operation_path_forbidden';
|
|
84
75
|
export interface AgentOperationPermissionDecision {
|
|
85
76
|
allowed: boolean;
|
|
86
77
|
status: 'completed' | 'waiting' | 'failed';
|
|
@@ -3,8 +3,8 @@ const AGENT_OPERATION_NAMES = [
|
|
|
3
3
|
"dev",
|
|
4
4
|
"verify",
|
|
5
5
|
"save",
|
|
6
|
+
"update",
|
|
6
7
|
"stage",
|
|
7
|
-
"merge_to_staging",
|
|
8
8
|
"close",
|
|
9
9
|
"release"
|
|
10
10
|
];
|
|
@@ -73,12 +73,6 @@ function decideAgentOperationPermission(input) {
|
|
|
73
73
|
if (!isAgentOperationName(request.operation)) {
|
|
74
74
|
return deny("invalid_operation", `Unsupported agent operation "${String(request.operation)}".`, { status: "failed" });
|
|
75
75
|
}
|
|
76
|
-
if (request.operation === "release") {
|
|
77
|
-
const approval = request.approval;
|
|
78
|
-
if (!approval || approval.state !== "approved" || request.approvalId && approval.id !== request.approvalId) {
|
|
79
|
-
return deny("operation_release_approval_required", "Release requires an explicit approved release approval.");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
76
|
const grant = resolveAgentOperationGrant(request, input.grants, now);
|
|
83
77
|
if (!grant) {
|
|
84
78
|
return deny("operation_permission_required", `No operation grant allows ${request.agentRole} to run ${request.operation}.`);
|
|
@@ -102,19 +96,13 @@ function decideAgentOperationPermission(input) {
|
|
|
102
96
|
if (!listMatches(request.environment, grant.environments)) {
|
|
103
97
|
return deny("operation_environment_not_granted", `Operation grant ${grant.id} does not allow environment ${request.environment}.`, { grant });
|
|
104
98
|
}
|
|
105
|
-
if (grant.requiresApproval && (!request.approval || request.approval.state !== "approved")) {
|
|
106
|
-
return deny("operation_approval_required", `Operation grant ${grant.id} requires approval.`, { grant });
|
|
107
|
-
}
|
|
108
|
-
if (grant.approvalIds?.length && (!request.approval || !grant.approvalIds.includes(request.approval.id) || request.approval.state !== "approved")) {
|
|
109
|
-
return deny("operation_approval_required", `Operation grant ${grant.id} requires one of its approved approval ids.`, { grant });
|
|
110
|
-
}
|
|
111
99
|
if (request.mode === "mutating" && !request.worktreeRoot && request.operation !== "release") {
|
|
112
100
|
return deny("operation_worktree_required", `Mutating operation ${request.operation} requires an assigned worktree root.`, { grant });
|
|
113
101
|
}
|
|
114
102
|
const allowedPaths = request.allowedPaths?.length ? request.allowedPaths : grant.allowedPaths ?? [];
|
|
115
103
|
const forbiddenPaths = [...grant.forbiddenPaths ?? [], ...request.forbiddenPaths ?? []];
|
|
116
104
|
const changedPaths = request.changedPaths ?? [];
|
|
117
|
-
if (
|
|
105
|
+
if (request.operation === "stage" && allowedPaths.length === 0) {
|
|
118
106
|
return deny("operation_allowed_paths_required", `${request.operation} requires allowed paths.`, { grant });
|
|
119
107
|
}
|
|
120
108
|
for (const changedPath of changedPaths) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TreeseedOperationImplementation, TreeseedOperationMetadata, TreeseedOperationProvider } from '../../operations-types.
|
|
1
|
+
import type { TreeseedOperationImplementation, TreeseedOperationMetadata, TreeseedOperationProvider } from '../../operations-types.js';
|
|
2
2
|
export declare class DefaultTreeseedOperationsProvider implements TreeseedOperationProvider {
|
|
3
3
|
readonly id = "default";
|
|
4
4
|
private readonly operations;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync, mkdtempSync, mkdirSync, readdirSync, readFileSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
3
|
import { join, relative, resolve } from "node:path";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
4
|
import { RemoteTreeseedAuthClient, RemoteTreeseedClient } from "../../remote.js";
|
|
5
|
+
import { classifyTreeseedGitMode, runTreeseedGitText } from "../../operations/services/git-runner.js";
|
|
6
6
|
import {
|
|
7
7
|
findTreeseedOperation,
|
|
8
8
|
TRESEED_OPERATION_SPECS
|
|
@@ -28,11 +28,6 @@ import {
|
|
|
28
28
|
finalizeDeploymentState,
|
|
29
29
|
loadDeployState
|
|
30
30
|
} from "../../operations/services/deploy.js";
|
|
31
|
-
import {
|
|
32
|
-
dockerIsAvailable,
|
|
33
|
-
findRunningMailpitContainer,
|
|
34
|
-
stopKnownMailpitContainers
|
|
35
|
-
} from "../../operations/services/mailpit-runtime.js";
|
|
36
31
|
import {
|
|
37
32
|
loadCliDeployConfig,
|
|
38
33
|
packageScriptPath,
|
|
@@ -67,7 +62,6 @@ import {
|
|
|
67
62
|
parseProjectLaunchHostBindingSpecs,
|
|
68
63
|
resolveProjectLaunchHostBindings
|
|
69
64
|
} from "../../template-launch-requirements.js";
|
|
70
|
-
import { run } from "../../operations/services/workspace-tools.js";
|
|
71
65
|
import { resolveTreeseedWorkflowState } from "../../workflow-state.js";
|
|
72
66
|
import { TreeseedWorkflowError, TreeseedWorkflowSdk } from "../../workflow.js";
|
|
73
67
|
import {
|
|
@@ -75,6 +69,14 @@ import {
|
|
|
75
69
|
formatTreeseedDependencyReport,
|
|
76
70
|
installTreeseedDependencies
|
|
77
71
|
} from "../../managed-dependencies.js";
|
|
72
|
+
function runGit(args, options) {
|
|
73
|
+
return runTreeseedGitText(args, {
|
|
74
|
+
cwd: options.cwd,
|
|
75
|
+
mode: classifyTreeseedGitMode(args),
|
|
76
|
+
timeoutMs: options.timeoutMs,
|
|
77
|
+
maxBuffer: options.maxBuffer
|
|
78
|
+
});
|
|
79
|
+
}
|
|
78
80
|
function operationResult(metadata, payload, options = {}) {
|
|
79
81
|
return {
|
|
80
82
|
operation: metadata.id,
|
|
@@ -184,12 +186,17 @@ function copyFileIfExists(sourceFile, targetFile) {
|
|
|
184
186
|
mkdirSync(resolve(targetFile, ".."), { recursive: true });
|
|
185
187
|
writeFileSync(targetFile, readFileSync(sourceFile));
|
|
186
188
|
}
|
|
189
|
+
function providerTempRoot(tenantRoot, scope) {
|
|
190
|
+
const base = resolve(tenantRoot, ".treeseed", "tmp", scope);
|
|
191
|
+
mkdirSync(base, { recursive: true });
|
|
192
|
+
return base;
|
|
193
|
+
}
|
|
187
194
|
function prepareContentPublishRoot(tenantRoot, contentRepositoryRoot) {
|
|
188
195
|
if (!contentRepositoryRoot || resolve(contentRepositoryRoot) === resolve(tenantRoot)) {
|
|
189
196
|
return { root: tenantRoot, cleanup: () => {
|
|
190
197
|
} };
|
|
191
198
|
}
|
|
192
|
-
const tempRoot = mkdtempSync(join(
|
|
199
|
+
const tempRoot = mkdtempSync(join(providerTempRoot(tenantRoot, "content-repo-publish"), "treeseed-content-repo-publish-"));
|
|
193
200
|
copyFileIfExists(resolve(tenantRoot, "treeseed.site.yaml"), resolve(tempRoot, "treeseed.site.yaml"));
|
|
194
201
|
copyFileIfExists(resolve(tenantRoot, "package.json"), resolve(tempRoot, "package.json"));
|
|
195
202
|
copyFileIfExists(resolve(tenantRoot, "src", "manifest.yaml"), resolve(tempRoot, "src", "manifest.yaml"));
|
|
@@ -1092,12 +1099,13 @@ class RollbackOperation extends BaseOperation {
|
|
|
1092
1099
|
}
|
|
1093
1100
|
const gitRoot = repoRoot(tenantRoot);
|
|
1094
1101
|
const tenantRelativePath = relative(gitRoot, tenantRoot);
|
|
1095
|
-
const
|
|
1102
|
+
const rollbackBase = providerTempRoot(tenantRoot, "rollback");
|
|
1103
|
+
const tempRoot = mkdtempSync(join(rollbackBase, "treeseed-rollback-"));
|
|
1096
1104
|
const tempTenantRoot = resolve(tempRoot, tenantRelativePath);
|
|
1097
1105
|
const currentNodeModules = resolve(tenantRoot, "node_modules");
|
|
1098
1106
|
let finalizedState = null;
|
|
1099
1107
|
try {
|
|
1100
|
-
|
|
1108
|
+
runGit(["worktree", "add", "--detach", tempRoot, rollbackCommit], { cwd: gitRoot, capture: true });
|
|
1101
1109
|
copyTreeseedOperationalState(tenantRoot, tempTenantRoot);
|
|
1102
1110
|
if (existsSync(currentNodeModules) && !existsSync(resolve(tempTenantRoot, "node_modules"))) {
|
|
1103
1111
|
symlinkSync(currentNodeModules, resolve(tempTenantRoot, "node_modules"), "dir");
|
|
@@ -1129,7 +1137,7 @@ class RollbackOperation extends BaseOperation {
|
|
|
1129
1137
|
}
|
|
1130
1138
|
} finally {
|
|
1131
1139
|
try {
|
|
1132
|
-
|
|
1140
|
+
runGit(["worktree", "remove", "--force", tempRoot], { cwd: gitRoot, capture: true });
|
|
1133
1141
|
} catch {
|
|
1134
1142
|
}
|
|
1135
1143
|
}
|
|
@@ -1142,29 +1150,6 @@ class RollbackOperation extends BaseOperation {
|
|
|
1142
1150
|
});
|
|
1143
1151
|
}
|
|
1144
1152
|
}
|
|
1145
|
-
class MailpitUpOperation extends BaseOperation {
|
|
1146
|
-
async execute(_input, context) {
|
|
1147
|
-
if (!dockerIsAvailable()) {
|
|
1148
|
-
return failureResult(this.metadata, "Docker is required for Treeseed form email testing.");
|
|
1149
|
-
}
|
|
1150
|
-
const existing = findRunningMailpitContainer();
|
|
1151
|
-
if (existing) {
|
|
1152
|
-
return operationResult(this.metadata, { reused: true, container: existing });
|
|
1153
|
-
}
|
|
1154
|
-
return runNodeScript(this.metadata, "ensure-mailpit", [], context);
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
class MailpitDownOperation extends BaseOperation {
|
|
1158
|
-
async execute(_input, _context) {
|
|
1159
|
-
const stopped = stopKnownMailpitContainers();
|
|
1160
|
-
return operationResult(this.metadata, { stopped }, { ok: stopped, exitCode: stopped ? 0 : 1 });
|
|
1161
|
-
}
|
|
1162
|
-
}
|
|
1163
|
-
class MailpitLogsOperation extends BaseOperation {
|
|
1164
|
-
async execute(_input, context) {
|
|
1165
|
-
return runNodeScript(this.metadata, "logs-mailpit", [], context);
|
|
1166
|
-
}
|
|
1167
|
-
}
|
|
1168
1153
|
class DefaultTreeseedOperationsProvider {
|
|
1169
1154
|
id = "default";
|
|
1170
1155
|
operations;
|
|
@@ -1175,6 +1160,7 @@ class DefaultTreeseedOperationsProvider {
|
|
|
1175
1160
|
new WorkflowOperation("tasks"),
|
|
1176
1161
|
new WorkflowOperation("switch", "switch"),
|
|
1177
1162
|
new WorkflowOperation("save"),
|
|
1163
|
+
new WorkflowOperation("update"),
|
|
1178
1164
|
new WorkflowOperation("close"),
|
|
1179
1165
|
new WorkflowOperation("stage"),
|
|
1180
1166
|
new WorkflowOperation("resume"),
|
|
@@ -1231,9 +1217,6 @@ class DefaultTreeseedOperationsProvider {
|
|
|
1231
1217
|
new ScriptOperation("test:release:full", "workspace-release-verify", ["--full-smoke"]),
|
|
1232
1218
|
new ScriptOperation("release:publish:changed", "workspace-publish-changed-packages"),
|
|
1233
1219
|
new ScriptOperation("astro", "tenant-astro-command"),
|
|
1234
|
-
new MailpitUpOperation("mailpit:up"),
|
|
1235
|
-
new MailpitDownOperation("mailpit:down"),
|
|
1236
|
-
new MailpitLogsOperation("mailpit:logs"),
|
|
1237
1220
|
new ScriptOperation("d1:migrate:local", "tenant-d1-migrate-local"),
|
|
1238
1221
|
new ScriptOperation("cleanup:markdown", "cleanup-markdown", ["--write"]),
|
|
1239
1222
|
new ScriptOperation("cleanup:markdown:check", "cleanup-markdown", ["--check"]),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ApplyProjectLaunchHostBindingConfigOptions } from './services/template-host-bindings.
|
|
1
|
+
import { type ApplyProjectLaunchHostBindingConfigOptions } from './services/template-host-bindings.js';
|
|
2
2
|
export declare const PLATFORM_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions", "agents"];
|
|
3
3
|
export declare const PLATFORM_WORK_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions"];
|
|
4
4
|
export type PlatformContentCollection = (typeof PLATFORM_CONTENT_COLLECTIONS)[number];
|
|
@@ -50,11 +50,30 @@ export interface PlatformRepositoryOperationInput {
|
|
|
50
50
|
teamId?: string;
|
|
51
51
|
createdBy?: string;
|
|
52
52
|
repository: PlatformRepositoryDescriptor;
|
|
53
|
+
architecture?: Record<string, unknown>;
|
|
54
|
+
scaffoldFiles?: PlatformRepositoryScaffoldFile[];
|
|
53
55
|
collection?: string;
|
|
54
56
|
parentCollection?: string;
|
|
55
57
|
parentSlug?: string;
|
|
56
58
|
targetCollection?: string;
|
|
57
59
|
proposalSlugs?: string[];
|
|
60
|
+
proposalSlug?: string;
|
|
61
|
+
proposalId?: string;
|
|
62
|
+
proposalVersion?: number;
|
|
63
|
+
proposalContentHash?: string;
|
|
64
|
+
proposalSnapshot?: Record<string, unknown>;
|
|
65
|
+
contentProposalSlug?: string;
|
|
66
|
+
contentDecisionSlug?: string;
|
|
67
|
+
governanceDecision?: Record<string, unknown>;
|
|
68
|
+
governanceDecisionId?: string;
|
|
69
|
+
governanceProviderId?: string;
|
|
70
|
+
governanceRule?: Record<string, unknown>;
|
|
71
|
+
electorateSnapshot?: Record<string, unknown>;
|
|
72
|
+
voteResult?: Record<string, unknown>;
|
|
73
|
+
voterReasons?: Record<string, unknown>[];
|
|
74
|
+
decidedAt?: string;
|
|
75
|
+
decisionSnapshotHash?: string;
|
|
76
|
+
authority?: string;
|
|
58
77
|
decisionType?: string;
|
|
59
78
|
reason?: string;
|
|
60
79
|
title?: string;
|
|
@@ -69,6 +88,11 @@ export interface PlatformRepositoryOperationInput {
|
|
|
69
88
|
launchInput?: ApplyProjectLaunchHostBindingConfigOptions['launchInput'];
|
|
70
89
|
derived?: ApplyProjectLaunchHostBindingConfigOptions['derived'];
|
|
71
90
|
}
|
|
91
|
+
export interface PlatformRepositoryScaffoldFile {
|
|
92
|
+
path: string;
|
|
93
|
+
content: string;
|
|
94
|
+
overwrite?: boolean;
|
|
95
|
+
}
|
|
72
96
|
export interface PlatformRepositoryOperationOptions {
|
|
73
97
|
workspaceRoot: string;
|
|
74
98
|
environment?: string;
|
|
@@ -131,4 +155,4 @@ export declare function normalizePlatformContentInput(collection: string, body:
|
|
|
131
155
|
export declare function derivePlatformRepositoryKey(repository: PlatformRepositoryDescriptor): string;
|
|
132
156
|
export declare function resolvePlatformRepositoryWorkspacePath(workspaceRoot: string, repository: PlatformRepositoryDescriptor): string;
|
|
133
157
|
export declare function createPlatformRepositoryClaim(input: PlatformRepositoryClaimInput): PlatformRepositoryClaim;
|
|
134
|
-
export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | 'apply_host_binding_config' | 'audit_host_binding_config' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
|
|
158
|
+
export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | 'create_decision_from_governance_proposal' | 'apply_host_binding_config' | 'audit_host_binding_config' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
|
|
@@ -51,7 +51,7 @@ const CONTENT_DEFAULTS = {
|
|
|
51
51
|
extension: "mdx",
|
|
52
52
|
fields: {
|
|
53
53
|
name: "",
|
|
54
|
-
handler: "
|
|
54
|
+
handler: "plan",
|
|
55
55
|
enabled: true,
|
|
56
56
|
operator: "TreeSeed platform",
|
|
57
57
|
runtimeStatus: "active",
|
|
@@ -182,6 +182,14 @@ function normalizePlatformContentInput(collection, body) {
|
|
|
182
182
|
frontmatter.relatedQuestions = normalizePlatformRelationArray(body.relatedQuestions);
|
|
183
183
|
frontmatter.relatedNotes = normalizePlatformRelationArray(body.relatedNotes);
|
|
184
184
|
frontmatter.decision = optionalTrimmedString(body.decision) ?? void 0;
|
|
185
|
+
frontmatter.governanceId = optionalTrimmedString(body.governanceId) ?? void 0;
|
|
186
|
+
frontmatter.governanceProviderId = optionalTrimmedString(body.governanceProviderId) ?? void 0;
|
|
187
|
+
frontmatter.governancePolicyId = optionalTrimmedString(body.governancePolicyId) ?? void 0;
|
|
188
|
+
frontmatter.governanceStatus = optionalTrimmedString(body.governanceStatus) ?? void 0;
|
|
189
|
+
frontmatter.proposalVersion = Number.isInteger(Number(body.proposalVersion)) ? Number(body.proposalVersion) : void 0;
|
|
190
|
+
frontmatter.proposalContentHash = optionalTrimmedString(body.proposalContentHash) ?? void 0;
|
|
191
|
+
frontmatter.votingStartsAt = optionalTrimmedString(body.votingStartsAt) ?? void 0;
|
|
192
|
+
frontmatter.votingEndsAt = optionalTrimmedString(body.votingEndsAt) ?? void 0;
|
|
185
193
|
} else if (collection === "decisions") {
|
|
186
194
|
frontmatter.primaryContributor = optionalTrimmedString(body.primaryContributor) ?? frontmatter.primaryContributor;
|
|
187
195
|
frontmatter.decisionType = enumValue(body.decisionType, DECISION_TYPE_VALUES, String(frontmatter.decisionType));
|
|
@@ -191,6 +199,18 @@ function normalizePlatformContentInput(collection, body) {
|
|
|
191
199
|
frontmatter.relatedQuestions = normalizePlatformRelationArray(body.relatedQuestions);
|
|
192
200
|
frontmatter.relatedNotes = normalizePlatformRelationArray(body.relatedNotes);
|
|
193
201
|
frontmatter.relatedProposals = normalizePlatformRelationArray(body.relatedProposals);
|
|
202
|
+
frontmatter.immutable = body.immutable === true ? true : void 0;
|
|
203
|
+
frontmatter.governanceDecisionId = optionalTrimmedString(body.governanceDecisionId) ?? void 0;
|
|
204
|
+
frontmatter.governanceProviderId = optionalTrimmedString(body.governanceProviderId) ?? void 0;
|
|
205
|
+
frontmatter.sourceProposalGovernanceId = optionalTrimmedString(body.sourceProposalGovernanceId) ?? void 0;
|
|
206
|
+
frontmatter.sourceProposalVersion = Number.isInteger(Number(body.sourceProposalVersion)) ? Number(body.sourceProposalVersion) : void 0;
|
|
207
|
+
frontmatter.sourceProposalHash = optionalTrimmedString(body.sourceProposalHash) ?? void 0;
|
|
208
|
+
frontmatter.governanceRule = body.governanceRule && typeof body.governanceRule === "object" && !Array.isArray(body.governanceRule) ? body.governanceRule : void 0;
|
|
209
|
+
frontmatter.electorateSnapshot = body.electorateSnapshot && typeof body.electorateSnapshot === "object" && !Array.isArray(body.electorateSnapshot) ? body.electorateSnapshot : void 0;
|
|
210
|
+
frontmatter.voteResult = body.voteResult && typeof body.voteResult === "object" && !Array.isArray(body.voteResult) ? body.voteResult : void 0;
|
|
211
|
+
frontmatter.voterReasons = Array.isArray(body.voterReasons) ? body.voterReasons : void 0;
|
|
212
|
+
frontmatter.decidedAt = optionalTrimmedString(body.decidedAt) ?? void 0;
|
|
213
|
+
frontmatter.decisionSnapshotHash = optionalTrimmedString(body.decisionSnapshotHash) ?? void 0;
|
|
194
214
|
}
|
|
195
215
|
return {
|
|
196
216
|
slug,
|
|
@@ -283,6 +303,54 @@ function assertAllowedPath(repoPath, targetPath) {
|
|
|
283
303
|
}
|
|
284
304
|
return relativePath;
|
|
285
305
|
}
|
|
306
|
+
function safeRepositoryRelativePath(repoPath, rawPath) {
|
|
307
|
+
const value = typeof rawPath === "string" ? rawPath.trim() : "";
|
|
308
|
+
if (!value || value.startsWith("/") || value.includes("\0")) {
|
|
309
|
+
throw new Error("Repository initialization scaffold path must be repository-relative.");
|
|
310
|
+
}
|
|
311
|
+
const target = resolve(repoPath, value);
|
|
312
|
+
const relativePath = relative(repoPath, target);
|
|
313
|
+
if (relativePath.startsWith("..") || relativePath.includes("..") || relativePath.startsWith("/")) {
|
|
314
|
+
throw new Error(`Repository initialization scaffold path is outside the repository: ${value}`);
|
|
315
|
+
}
|
|
316
|
+
return { target, relativePath };
|
|
317
|
+
}
|
|
318
|
+
function secretLookingText(value) {
|
|
319
|
+
return /(?:ghp_|github_pat_|sk-[A-Za-z0-9]|xox[baprs]-|BEGIN (?:RSA |OPENSSH |EC )?PRIVATE KEY|TREESEED_GITHUB_TOKEN\s*=|password\s*=|passphrase\s*=|secretValue|rawSecret|unencrypted)/iu.test(value);
|
|
320
|
+
}
|
|
321
|
+
async function initializeLinkedRepository(repoPath, input) {
|
|
322
|
+
const architecture = input.architecture && typeof input.architecture === "object" && !Array.isArray(input.architecture) ? {
|
|
323
|
+
topology: input.architecture.topology ?? null,
|
|
324
|
+
rootPath: input.architecture.rootPath ?? ".",
|
|
325
|
+
sitePath: input.architecture.sitePath ?? null,
|
|
326
|
+
contentPath: input.architecture.contentPath ?? null,
|
|
327
|
+
contentRuntimeSource: input.architecture.contentRuntimeSource ?? null,
|
|
328
|
+
localContentMaterialization: input.architecture.localContentMaterialization ?? null
|
|
329
|
+
} : null;
|
|
330
|
+
const scaffoldFiles = Array.isArray(input.scaffoldFiles) ? input.scaffoldFiles : [];
|
|
331
|
+
const scaffoldedPaths = [];
|
|
332
|
+
for (const file of scaffoldFiles) {
|
|
333
|
+
if (!file || typeof file !== "object") throw new Error("Repository initialization scaffold files must be objects.");
|
|
334
|
+
const content = typeof file.content === "string" ? file.content : null;
|
|
335
|
+
if (content == null) throw new Error("Repository initialization scaffold file content must be a string.");
|
|
336
|
+
if (secretLookingText(content) || secretLookingText(file.path)) {
|
|
337
|
+
throw new Error("Repository initialization scaffold files must not contain token-like or plaintext secret material.");
|
|
338
|
+
}
|
|
339
|
+
const { target, relativePath } = safeRepositoryRelativePath(repoPath, file.path);
|
|
340
|
+
if (existsSync(target) && file.overwrite !== true) continue;
|
|
341
|
+
await mkdir(dirname(target), { recursive: true });
|
|
342
|
+
await writeFile(target, content, "utf8");
|
|
343
|
+
scaffoldedPaths.push(relativePath);
|
|
344
|
+
}
|
|
345
|
+
return {
|
|
346
|
+
kind: "linked_repository_initialization",
|
|
347
|
+
projectId: input.projectId ?? null,
|
|
348
|
+
teamId: input.teamId ?? null,
|
|
349
|
+
mode: scaffoldedPaths.length > 0 ? "template_scaffold" : "adopt_existing",
|
|
350
|
+
architecture,
|
|
351
|
+
scaffoldedPaths
|
|
352
|
+
};
|
|
353
|
+
}
|
|
286
354
|
async function readContentRecord(repoPath, collection, slug) {
|
|
287
355
|
if (!WORK_CONTENT_COLLECTION_SET.has(collection)) throw new Error("Unsupported content collection.");
|
|
288
356
|
const target = safeContentPath(repoPath, collection, slug);
|
|
@@ -463,6 +531,92 @@ async function createDecisionFromProposals(repoPath, input) {
|
|
|
463
531
|
changedPaths: changedPaths2
|
|
464
532
|
};
|
|
465
533
|
}
|
|
534
|
+
async function createDecisionFromGovernanceProposal(repoPath, input) {
|
|
535
|
+
const proposalSnapshot = input.proposalSnapshot && typeof input.proposalSnapshot === "object" ? input.proposalSnapshot : {};
|
|
536
|
+
const governanceDecision = input.governanceDecision && typeof input.governanceDecision === "object" ? input.governanceDecision : {};
|
|
537
|
+
const proposalSlug = slugifyPlatformContent(
|
|
538
|
+
input.contentProposalSlug ?? input.proposalSlug ?? proposalSnapshot.slug ?? proposalSnapshot.contentProposalSlug ?? governanceDecision.contentProposalSlug ?? ""
|
|
539
|
+
);
|
|
540
|
+
if (!proposalSlug) throw new Error("A safe source proposal slug is required.");
|
|
541
|
+
const sourceHash = optionalTrimmedString(input.proposalContentHash) ?? optionalTrimmedString(proposalSnapshot.contentHash) ?? optionalTrimmedString(proposalSnapshot.proposalContentHash);
|
|
542
|
+
if (!sourceHash) throw new Error("Accepted proposal content hash is required.");
|
|
543
|
+
const proposalVersion = Number(input.proposalVersion ?? proposalSnapshot.version ?? proposalSnapshot.proposalVersion ?? 1);
|
|
544
|
+
if (!Number.isInteger(proposalVersion) || proposalVersion < 1) throw new Error("Accepted proposal version is invalid.");
|
|
545
|
+
const title = optionalTrimmedString(input.title) ?? optionalTrimmedString(governanceDecision.title) ?? optionalTrimmedString(proposalSnapshot.title) ?? `Decision for ${proposalSlug}`;
|
|
546
|
+
const summary = optionalTrimmedString(input.summary) ?? optionalTrimmedString(governanceDecision.summary) ?? optionalTrimmedString(proposalSnapshot.summary) ?? "Accepted governance decision.";
|
|
547
|
+
const decisionSlug = slugifyPlatformContent(input.slug || input.contentDecisionSlug || governanceDecision.contentDecisionSlug || title);
|
|
548
|
+
if (!decisionSlug) throw new Error("A safe decision slug is required.");
|
|
549
|
+
const decisionTarget = safeContentPath(repoPath, "decisions", decisionSlug, "mdx");
|
|
550
|
+
if (existsSync(decisionTarget)) throw new Error("A decision with that slug already exists.");
|
|
551
|
+
let proposal = null;
|
|
552
|
+
try {
|
|
553
|
+
proposal = await readContentRecord(repoPath, "proposals", proposalSlug);
|
|
554
|
+
} catch {
|
|
555
|
+
throw new Error(`Proposal ${proposalSlug} was not found.`);
|
|
556
|
+
}
|
|
557
|
+
const voteResult = input.voteResult && typeof input.voteResult === "object" ? input.voteResult : governanceDecision.voteResult ?? {};
|
|
558
|
+
const voterReasons = Array.isArray(input.voterReasons) ? input.voterReasons : Array.isArray(governanceDecision.voterReasons) ? governanceDecision.voterReasons : [];
|
|
559
|
+
const decidedAt = optionalTrimmedString(input.decidedAt) ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
560
|
+
const body = optionalTrimmedString(input.payload?.body) ?? [
|
|
561
|
+
"## Accepted Proposal Snapshot",
|
|
562
|
+
optionalTrimmedString(proposalSnapshot.body) ?? proposal.body.trim(),
|
|
563
|
+
"",
|
|
564
|
+
"## Governance Result",
|
|
565
|
+
JSON.stringify(voteResult, null, 2)
|
|
566
|
+
].join("\n");
|
|
567
|
+
const decision = await writeContentRecord(repoPath, "decisions", {
|
|
568
|
+
...input.payload ?? {},
|
|
569
|
+
projectId: input.projectId,
|
|
570
|
+
teamId: input.teamId,
|
|
571
|
+
slug: decisionSlug,
|
|
572
|
+
title,
|
|
573
|
+
status: "live",
|
|
574
|
+
decisionType: "approved",
|
|
575
|
+
description: optionalTrimmedString(input.payload?.description) ?? summary,
|
|
576
|
+
summary,
|
|
577
|
+
rationale: optionalTrimmedString(input.reason) ?? "Accepted by governance.",
|
|
578
|
+
authority: optionalTrimmedString(input.authority) ?? "governance",
|
|
579
|
+
relatedProposals: [proposalSlug],
|
|
580
|
+
immutable: true,
|
|
581
|
+
governanceDecisionId: optionalTrimmedString(input.governanceDecisionId) ?? optionalTrimmedString(governanceDecision.id),
|
|
582
|
+
governanceProviderId: optionalTrimmedString(input.governanceProviderId) ?? optionalTrimmedString(governanceDecision.governanceProviderId),
|
|
583
|
+
sourceProposalGovernanceId: optionalTrimmedString(input.proposalId) ?? optionalTrimmedString(governanceDecision.proposalId),
|
|
584
|
+
sourceProposalVersion: proposalVersion,
|
|
585
|
+
sourceProposalHash: sourceHash,
|
|
586
|
+
governanceRule: input.governanceRule ?? governanceDecision.governanceRule ?? {},
|
|
587
|
+
electorateSnapshot: input.electorateSnapshot ?? governanceDecision.electorateSnapshot ?? {},
|
|
588
|
+
voteResult,
|
|
589
|
+
voterReasons,
|
|
590
|
+
decidedAt,
|
|
591
|
+
decisionSnapshotHash: optionalTrimmedString(input.decisionSnapshotHash),
|
|
592
|
+
body
|
|
593
|
+
});
|
|
594
|
+
const originalProposal = {
|
|
595
|
+
...proposal,
|
|
596
|
+
frontmatter: { ...proposal.frontmatter },
|
|
597
|
+
body: proposal.body
|
|
598
|
+
};
|
|
599
|
+
const changedPaths2 = [decision.path];
|
|
600
|
+
try {
|
|
601
|
+
proposal.frontmatter.decision = decisionSlug;
|
|
602
|
+
proposal.frontmatter.governanceStatus = "accepted";
|
|
603
|
+
proposal.frontmatter.proposalVersion = proposalVersion;
|
|
604
|
+
proposal.frontmatter.proposalContentHash = sourceHash;
|
|
605
|
+
changedPaths2.push(await writeParsedRecord(repoPath, proposal));
|
|
606
|
+
} catch (error) {
|
|
607
|
+
await rm(decisionTarget, { force: true }).catch(() => {
|
|
608
|
+
});
|
|
609
|
+
await writeParsedRecord(repoPath, originalProposal).catch(() => {
|
|
610
|
+
});
|
|
611
|
+
throw error;
|
|
612
|
+
}
|
|
613
|
+
return {
|
|
614
|
+
decision,
|
|
615
|
+
proposal: { collection: "proposals", slug: proposalSlug, href: `/app/work/proposals/${encodeURIComponent(proposalSlug)}` },
|
|
616
|
+
href: decision.href,
|
|
617
|
+
changedPaths: changedPaths2
|
|
618
|
+
};
|
|
619
|
+
}
|
|
466
620
|
async function changedPaths(repoPath) {
|
|
467
621
|
const output = await runGit(["status", "--porcelain", "--untracked-files=all"], repoPath).catch(() => "");
|
|
468
622
|
return output.split("\n").map((line) => line.slice(3).trim()).filter(Boolean);
|
|
@@ -609,6 +763,8 @@ async function executePlatformRepositoryOperation(operation, input, options) {
|
|
|
609
763
|
output = await createRelatedContent(repoPath, input);
|
|
610
764
|
} else if (operation === "create_decision_from_proposals") {
|
|
611
765
|
output = await createDecisionFromProposals(repoPath, input);
|
|
766
|
+
} else if (operation === "create_decision_from_governance_proposal") {
|
|
767
|
+
output = await createDecisionFromGovernanceProposal(repoPath, input);
|
|
612
768
|
} else if (operation === "apply_host_binding_config") {
|
|
613
769
|
const hostBindingConfig = applyProjectLaunchHostBindingConfig({
|
|
614
770
|
projectRoot: repoPath,
|
|
@@ -633,6 +789,8 @@ async function executePlatformRepositoryOperation(operation, input, options) {
|
|
|
633
789
|
hostBindingAudit,
|
|
634
790
|
changedPaths: []
|
|
635
791
|
};
|
|
792
|
+
} else if (operation === "initialize_linked_repository") {
|
|
793
|
+
output = await initializeLinkedRepository(repoPath, input);
|
|
636
794
|
} else {
|
|
637
795
|
throw new Error(`Unsupported repository operation "${operation}".`);
|
|
638
796
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type TreeseedOperationContext, type TreeseedOperationRequest } from '../operations-types.
|
|
1
|
+
import { type TreeseedOperationContext, type TreeseedOperationRequest } from '../operations-types.js';
|
|
2
2
|
export declare class TreeseedOperationsSdk {
|
|
3
|
-
listOperations(): import("../operations-types.
|
|
4
|
-
findOperation(name: string | null | undefined): import("../operations-types.
|
|
3
|
+
listOperations(): import("../operations-types.js").TreeseedOperationMetadata[];
|
|
4
|
+
findOperation(name: string | null | undefined): import("../operations-types.js").TreeseedOperationMetadata | null;
|
|
5
5
|
resolveProvider(cwd?: string): any;
|
|
6
6
|
execute(request: TreeseedOperationRequest, contextOverrides?: Partial<TreeseedOperationContext>): Promise<any>;
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type TreeseedTimingEntry } from '../../timing.
|
|
1
|
+
import { type TreeseedTimingEntry } from '../../timing.js';
|
|
2
2
|
export type TreeseedBootstrapExecution = 'parallel' | 'sequential';
|
|
3
3
|
export type TreeseedBootstrapStream = 'stdout' | 'stderr';
|
|
4
4
|
export type TreeseedBootstrapWriter = (line: string, stream?: TreeseedBootstrapStream) => void;
|
|
@@ -24,14 +24,16 @@ export declare function runTreeseedBootstrapDag<TResult = unknown>({ nodes, exec
|
|
|
24
24
|
timings?: TreeseedTimingEntry[];
|
|
25
25
|
}): Promise<Map<string, TResult>>;
|
|
26
26
|
export declare function sleep(milliseconds: number): Promise<void>;
|
|
27
|
-
export declare function runPrefixedCommand(command: string, args: string[], { cwd, env, input, write, prefix, }: {
|
|
27
|
+
export declare function runPrefixedCommand(command: string, args: string[], { cwd, env, input, write, prefix, timeoutMs, }: {
|
|
28
28
|
cwd: string;
|
|
29
29
|
env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
|
|
30
30
|
input?: string;
|
|
31
31
|
write?: TreeseedBootstrapWriter;
|
|
32
32
|
prefix: TreeseedBootstrapTaskPrefix;
|
|
33
|
+
timeoutMs?: number;
|
|
33
34
|
}): Promise<{
|
|
34
35
|
status: number | null;
|
|
35
36
|
stdout: string;
|
|
36
37
|
stderr: string;
|
|
38
|
+
timedOut?: boolean;
|
|
37
39
|
}>;
|
|
@@ -99,7 +99,8 @@ async function runPrefixedCommand(command, args, {
|
|
|
99
99
|
env = process.env,
|
|
100
100
|
input,
|
|
101
101
|
write,
|
|
102
|
-
prefix
|
|
102
|
+
prefix,
|
|
103
|
+
timeoutMs
|
|
103
104
|
}) {
|
|
104
105
|
return await new Promise((resolvePromise, reject) => {
|
|
105
106
|
const childEnv = {};
|
|
@@ -117,6 +118,19 @@ async function runPrefixedCommand(command, args, {
|
|
|
117
118
|
let stderr = "";
|
|
118
119
|
let stdoutBuffer = "";
|
|
119
120
|
let stderrBuffer = "";
|
|
121
|
+
let timedOut = false;
|
|
122
|
+
let forceKillTimer = null;
|
|
123
|
+
const timeoutTimer = Number.isFinite(timeoutMs) && Number(timeoutMs) > 0 ? setTimeout(() => {
|
|
124
|
+
timedOut = true;
|
|
125
|
+
const message = `Command timed out after ${Math.round(Number(timeoutMs) / 1e3)}s: ${command} ${args.join(" ")}`;
|
|
126
|
+
stderr += `${stderr.endsWith("\n") || stderr.length === 0 ? "" : "\n"}${message}
|
|
127
|
+
`;
|
|
128
|
+
stderrBuffer += `${stderrBuffer.endsWith("\n") || stderrBuffer.length === 0 ? "" : "\n"}${message}
|
|
129
|
+
`;
|
|
130
|
+
flush("stderr");
|
|
131
|
+
child.kill("SIGTERM");
|
|
132
|
+
forceKillTimer = setTimeout(() => child.kill("SIGKILL"), 5e3);
|
|
133
|
+
}, Number(timeoutMs)) : null;
|
|
120
134
|
const flush = (stream, force = false) => {
|
|
121
135
|
let buffer = stream === "stdout" ? stdoutBuffer : stderrBuffer;
|
|
122
136
|
let newlineIndex = buffer.search(/\r?\n/u);
|
|
@@ -150,9 +164,15 @@ async function runPrefixedCommand(command, args, {
|
|
|
150
164
|
});
|
|
151
165
|
child.on("error", reject);
|
|
152
166
|
child.on("close", (status) => {
|
|
167
|
+
if (timeoutTimer) {
|
|
168
|
+
clearTimeout(timeoutTimer);
|
|
169
|
+
}
|
|
170
|
+
if (forceKillTimer) {
|
|
171
|
+
clearTimeout(forceKillTimer);
|
|
172
|
+
}
|
|
153
173
|
flush("stdout", true);
|
|
154
174
|
flush("stderr", true);
|
|
155
|
-
resolvePromise({ status, stdout, stderr });
|
|
175
|
+
resolvePromise({ status, stdout, stderr, ...timedOut ? { timedOut: true } : {} });
|
|
156
176
|
});
|
|
157
177
|
if (input !== void 0) {
|
|
158
178
|
child.stdin.end(input);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface BuildWarningRule {
|
|
2
|
+
label: string;
|
|
3
|
+
pattern: RegExp;
|
|
4
|
+
}
|
|
5
|
+
export interface BuildWarningScanOptions {
|
|
6
|
+
useDefaultPolicy?: boolean;
|
|
7
|
+
allow?: Array<string | RegExp>;
|
|
8
|
+
}
|
|
9
|
+
export type BuildWarningClassification = {
|
|
10
|
+
kind: 'not-warning';
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'allowed';
|
|
13
|
+
label: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'unexpected';
|
|
16
|
+
line: string;
|
|
17
|
+
};
|
|
18
|
+
export interface BuildWarningSummary {
|
|
19
|
+
allowedWarnings: Map<string, number>;
|
|
20
|
+
unexpectedWarnings: string[];
|
|
21
|
+
record(line: unknown, options?: BuildWarningScanOptions): BuildWarningClassification;
|
|
22
|
+
}
|
|
23
|
+
export declare const DEFAULT_BUILD_WARNING_RULES: BuildWarningRule[];
|
|
24
|
+
export declare function normalizeBuildWarningLine(line: unknown): string;
|
|
25
|
+
export declare function createBuildWarningRules(options?: BuildWarningScanOptions): BuildWarningRule[];
|
|
26
|
+
export declare function classifyBuildWarningLine(line: unknown, options?: BuildWarningScanOptions): BuildWarningClassification;
|
|
27
|
+
export declare function createBuildWarningSummary(): BuildWarningSummary;
|
|
28
|
+
export declare function mergeAllowedBuildWarnings(target: Map<string, number>, source: Map<string, number>): Map<string, number>;
|
|
29
|
+
export declare function countAllowedBuildWarnings(allowedWarnings: Map<string, number>): number;
|
|
30
|
+
export declare function formatAllowedBuildWarnings(allowedWarnings: Map<string, number>): string[];
|
|
31
|
+
export declare function scanBuildWarningText(text: unknown, options?: BuildWarningScanOptions): {
|
|
32
|
+
allowedWarnings: Map<string, number>;
|
|
33
|
+
unexpectedWarnings: string[];
|
|
34
|
+
};
|