@treeseed/sdk 0.11.0 → 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 +9 -4
- 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 +117 -60
- package/dist/capacity-provider.js +215 -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 +2 -2
- 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 +49037 -11843
- package/dist/db/market-schema.js +1788 -50
- package/dist/db/node-sqlite.d.ts +1 -232
- 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 +1 -1
- package/dist/hosting/builtins.d.ts +1 -1
- package/dist/hosting/builtins.js +9 -198
- package/dist/hosting/contracts.d.ts +3 -2
- package/dist/hosting/graph.d.ts +24 -21
- package/dist/hosting/graph.js +280 -294
- package/dist/hosting/index.d.ts +4 -4
- package/dist/index.d.ts +88 -74
- package/dist/index.js +81 -10
- 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 -8
- package/dist/market-client.d.ts +265 -7
- package/dist/market-client.js +381 -9
- 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 +1 -1
- 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 +73 -19
- package/dist/operations/services/config-runtime.js +276 -100
- package/dist/operations/services/deploy.d.ts +41 -622
- package/dist/operations/services/deploy.js +181 -213
- package/dist/operations/services/deployment-readiness.d.ts +1 -1
- package/dist/operations/services/deployment-readiness.js +38 -7
- 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 +43 -5
- package/dist/operations/services/git-workflow.js +242 -20
- package/dist/operations/services/github-actions-verification.d.ts +3 -1
- package/dist/operations/services/github-actions-verification.js +11 -3
- package/dist/operations/services/github-api.js +21 -5
- package/dist/operations/services/github-automation.d.ts +3 -3
- package/dist/operations/services/github-automation.js +15 -18
- package/dist/operations/services/github-credentials.js +2 -1
- package/dist/operations/services/hosted-service-checks.d.ts +19 -1
- package/dist/operations/services/hosted-service-checks.js +162 -11
- 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 +19 -14
- package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
- package/dist/operations/services/live-hosted-service-checks.js +193 -80
- 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-repositories.d.ts +37 -0
- package/dist/operations/services/managed-repositories.js +177 -0
- package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
- package/dist/operations/services/operations-runner-smoke.js +22 -4
- package/dist/operations/services/package-adapters.d.ts +77 -2
- package/dist/operations/services/package-adapters.js +627 -56
- package/dist/operations/services/package-reference-policy.d.ts +12 -88
- package/dist/operations/services/package-reference-policy.js +81 -213
- package/dist/operations/services/project-host-operations.d.ts +4 -4
- package/dist/operations/services/project-platform.d.ts +19 -193
- package/dist/operations/services/project-platform.js +31 -103
- package/dist/operations/services/project-web-monitor.d.ts +2 -2
- package/dist/operations/services/project-web-monitor.js +97 -2
- package/dist/operations/services/railway-api.d.ts +36 -7
- package/dist/operations/services/railway-api.js +331 -100
- package/dist/operations/services/railway-deploy.d.ts +7 -95
- package/dist/operations/services/railway-deploy.js +334 -742
- 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 +6 -7
- package/dist/operations/services/repository-save-orchestrator.js +353 -174
- 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 -192
- package/dist/operations/services/runtime-tools.js +4 -444
- 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/workflow-timing.d.ts +25 -0
- package/dist/operations/services/workflow-timing.js +79 -0
- package/dist/operations/services/workspace-dependency-mode.js +41 -4
- 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 +41 -18
- package/dist/operations/services/workspace-tools.js +40 -6
- 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 +6 -1
- package/dist/platform/deploy-config.d.ts +1 -1
- package/dist/platform/deploy-config.js +7 -1
- 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 +414 -19
- package/dist/platform/environment.d.ts +2 -2
- package/dist/platform/environment.js +54 -22
- 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 +5 -5
- 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/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 +3 -3
- package/dist/reconcile/builtin-adapters.d.ts +7 -1
- package/dist/reconcile/builtin-adapters.js +2924 -346
- package/dist/reconcile/contracts.d.ts +15 -2
- package/dist/reconcile/desired-state.d.ts +2 -193
- package/dist/reconcile/desired-state.js +24 -33
- package/dist/reconcile/engine.d.ts +60 -397
- package/dist/reconcile/engine.js +182 -18
- package/dist/reconcile/index.d.ts +10 -10
- package/dist/reconcile/live-acceptance.d.ts +22 -1
- package/dist/reconcile/live-acceptance.js +456 -44
- 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 +3 -40
- package/dist/reconcile/units.d.ts +1 -1
- package/dist/reconcile/units.js +7 -1
- 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/migrate-journey-csv-to-guarantees.js +140 -0
- package/dist/scripts/package-tools.js +12 -1
- package/dist/scripts/prepare.js +3 -7
- package/dist/scripts/release-verify.js +2 -5
- 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/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 +1184 -113
- package/dist/sdk-types.js +393 -0
- package/dist/sdk.d.ts +74 -79
- package/dist/sdk.js +27 -36
- 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-ui.d.ts +2 -2
- package/dist/treedx/adapters.d.ts +6 -6
- package/dist/treedx/client.d.ts +1 -1
- package/dist/treedx/errors.d.ts +1 -1
- package/dist/treedx/federated-client.d.ts +3 -3
- package/dist/treedx/graph-adapter.d.ts +2 -2
- package/dist/treedx/index.d.ts +14 -14
- package/dist/treedx/market-integration.d.ts +1 -1
- package/dist/treedx/ports.d.ts +30 -30
- package/dist/treedx/query-adapter.d.ts +3 -3
- package/dist/treedx/registry-client.d.ts +2 -2
- package/dist/treedx/repository-adapter.d.ts +4 -4
- package/dist/treedx/repository-adapter.js +14 -3
- package/dist/treedx/sdk-integration.d.ts +3 -3
- package/dist/treedx/types.d.ts +2 -2
- package/dist/treedx/workspace-adapter.d.ts +2 -2
- package/dist/treedx-backends.d.ts +13 -11
- package/dist/treedx-backends.js +52 -50
- package/dist/treedx-client.d.ts +3 -0
- package/dist/treedx-client.js +10 -1
- package/dist/treeseed/services/compose.yml +2 -3
- package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
- 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 +510 -559
- package/dist/workflow/operations.js +1891 -1342
- 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 +5 -5
- package/dist/workflow-state.js +27 -17
- package/dist/workflow-support.d.ts +26 -25
- package/dist/workflow-support.js +27 -31
- package/dist/workflow.d.ts +46 -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/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 +75 -18
- package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
- package/templates/github/deploy-web.workflow.yml +12 -8
- 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 -60
- package/dist/operations/services/release-candidate.js +0 -953
- 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,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;
|
|
@@ -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
|
+
};
|
|
@@ -1,92 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
},
|
|
1
|
+
const DEFAULT_BUILD_WARNING_RULES = [
|
|
2
|
+
{
|
|
3
|
+
label: "vite-browser-external-libsodium-url",
|
|
4
|
+
pattern: /(?:Module "url" has been externalized for browser compatibility, imported by|Automatically externalized node built-in module "url" imported from) ".*libsodium-sumo.*"/u
|
|
5
|
+
}
|
|
7
6
|
];
|
|
8
|
-
|
|
9
7
|
const ANSI_CONTROL_SEQUENCE_PATTERN = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/gu;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return String(line ?? '').replace(ANSI_CONTROL_SEQUENCE_PATTERN, '');
|
|
8
|
+
function normalizeBuildWarningLine(line) {
|
|
9
|
+
return String(line ?? "").replace(ANSI_CONTROL_SEQUENCE_PATTERN, "");
|
|
13
10
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
];
|
|
11
|
+
function createBuildWarningRules(options = {}) {
|
|
12
|
+
const useDefaultPolicy = options.useDefaultPolicy !== false;
|
|
13
|
+
const customAllow = Array.isArray(options.allow) ? options.allow : [];
|
|
14
|
+
return [
|
|
15
|
+
...useDefaultPolicy ? DEFAULT_BUILD_WARNING_RULES : [],
|
|
16
|
+
...customAllow.map((pattern) => ({
|
|
17
|
+
label: `custom:${pattern}`,
|
|
18
|
+
pattern: pattern instanceof RegExp ? pattern : new RegExp(String(pattern))
|
|
19
|
+
}))
|
|
20
|
+
];
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return { kind: 'unexpected', line: value };
|
|
22
|
+
function classifyBuildWarningLine(line, options = {}) {
|
|
23
|
+
const value = normalizeBuildWarningLine(line);
|
|
24
|
+
if (!value.includes("[WARN]")) {
|
|
25
|
+
return { kind: "not-warning" };
|
|
26
|
+
}
|
|
27
|
+
const allowed = createBuildWarningRules(options).find((rule) => rule.pattern.test(value));
|
|
28
|
+
if (allowed) {
|
|
29
|
+
return { kind: "allowed", label: allowed.label };
|
|
30
|
+
}
|
|
31
|
+
return { kind: "unexpected", line: value };
|
|
37
32
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
33
|
+
function createBuildWarningSummary() {
|
|
34
|
+
const allowedWarnings = /* @__PURE__ */ new Map();
|
|
35
|
+
const unexpectedWarnings = [];
|
|
36
|
+
return {
|
|
37
|
+
allowedWarnings,
|
|
38
|
+
unexpectedWarnings,
|
|
39
|
+
record(line, options = {}) {
|
|
40
|
+
const classified = classifyBuildWarningLine(line, options);
|
|
41
|
+
if (classified.kind === "allowed") {
|
|
42
|
+
allowedWarnings.set(classified.label, (allowedWarnings.get(classified.label) ?? 0) + 1);
|
|
43
|
+
return classified;
|
|
44
|
+
}
|
|
45
|
+
if (classified.kind === "unexpected") {
|
|
46
|
+
unexpectedWarnings.push(classified.line);
|
|
47
|
+
}
|
|
48
|
+
return classified;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
57
51
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return target;
|
|
52
|
+
function mergeAllowedBuildWarnings(target, source) {
|
|
53
|
+
for (const [label, count] of source.entries()) {
|
|
54
|
+
target.set(label, (target.get(label) ?? 0) + count);
|
|
55
|
+
}
|
|
56
|
+
return target;
|
|
64
57
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return [...allowedWarnings.values()].reduce((sum, count) => sum + count, 0);
|
|
58
|
+
function countAllowedBuildWarnings(allowedWarnings) {
|
|
59
|
+
return [...allowedWarnings.values()].reduce((sum, count) => sum + count, 0);
|
|
68
60
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
79
|
-
.map(([label, count]) => `- ${label}: ${count}`),
|
|
80
|
-
];
|
|
61
|
+
function formatAllowedBuildWarnings(allowedWarnings) {
|
|
62
|
+
const total = countAllowedBuildWarnings(allowedWarnings);
|
|
63
|
+
if (total === 0) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
return [
|
|
67
|
+
`Allowed build warnings: ${total}`,
|
|
68
|
+
...[...allowedWarnings.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([label, count]) => `- ${label}: ${count}`)
|
|
69
|
+
];
|
|
81
70
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
};
|
|
71
|
+
function scanBuildWarningText(text, options = {}) {
|
|
72
|
+
const summary = createBuildWarningSummary();
|
|
73
|
+
for (const line of String(text ?? "").split(/\r?\n/u)) {
|
|
74
|
+
summary.record(line, options);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
allowedWarnings: summary.allowedWarnings,
|
|
78
|
+
unexpectedWarnings: summary.unexpectedWarnings
|
|
79
|
+
};
|
|
92
80
|
}
|
|
81
|
+
export {
|
|
82
|
+
DEFAULT_BUILD_WARNING_RULES,
|
|
83
|
+
classifyBuildWarningLine,
|
|
84
|
+
countAllowedBuildWarnings,
|
|
85
|
+
createBuildWarningRules,
|
|
86
|
+
createBuildWarningSummary,
|
|
87
|
+
formatAllowedBuildWarnings,
|
|
88
|
+
mergeAllowedBuildWarnings,
|
|
89
|
+
normalizeBuildWarningLine,
|
|
90
|
+
scanBuildWarningText
|
|
91
|
+
};
|
|
@@ -412,11 +412,11 @@ function extractCloudflareText(payload) {
|
|
|
412
412
|
return null;
|
|
413
413
|
}
|
|
414
414
|
async function generateCloudflareCommitMessage(context, env, fetchImpl) {
|
|
415
|
-
const token = envValue(env, "
|
|
416
|
-
const accountId = envValue(env, "
|
|
415
|
+
const token = envValue(env, "TREESEED_CLOUDFLARE_API_TOKEN");
|
|
416
|
+
const accountId = envValue(env, "TREESEED_CLOUDFLARE_ACCOUNT_ID");
|
|
417
417
|
const model = envValue(env, "TREESEED_COMMIT_AI_MODEL") ?? DEFAULT_COMMIT_AI_MODEL;
|
|
418
418
|
if (!token || !accountId) {
|
|
419
|
-
throw new Error("Cloudflare commit AI requires
|
|
419
|
+
throw new Error("Cloudflare commit AI requires TREESEED_CLOUDFLARE_API_TOKEN and TREESEED_CLOUDFLARE_ACCOUNT_ID.");
|
|
420
420
|
}
|
|
421
421
|
const timeoutMs = parseNumber(envValue(env, "TREESEED_COMMIT_AI_TIMEOUT_MS"), defaultTimeoutMs);
|
|
422
422
|
const maxDiffChars = parseNumber(envValue(env, "TREESEED_COMMIT_AI_MAX_DIFF_CHARS"), defaultMaxDiffChars);
|
|
@@ -469,7 +469,7 @@ async function generateRepositoryCommitMessage(context, options = {}) {
|
|
|
469
469
|
return { message: fallback(), provider: "fallback", fallbackUsed: true, error: error instanceof Error ? error.message : String(error) };
|
|
470
470
|
}
|
|
471
471
|
}
|
|
472
|
-
const hasCloudflareConfig = Boolean(envValue(env, "
|
|
472
|
+
const hasCloudflareConfig = Boolean(envValue(env, "TREESEED_CLOUDFLARE_API_TOKEN") && envValue(env, "TREESEED_CLOUDFLARE_ACCOUNT_ID"));
|
|
473
473
|
if ((mode === "auto" || mode === "generated") && !hasCloudflareConfig) {
|
|
474
474
|
return { message: fallback(), provider: "fallback", fallbackUsed: false, error: null };
|
|
475
475
|
}
|