@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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface TreeseedVerificationCacheEntry {
|
|
2
|
+
key: string;
|
|
3
|
+
repoName: string;
|
|
4
|
+
repoPath: string;
|
|
5
|
+
headSha: string;
|
|
6
|
+
command: string;
|
|
7
|
+
status: 'passed' | 'failed';
|
|
8
|
+
createdAt: string;
|
|
9
|
+
durationMs: number;
|
|
10
|
+
logsPath?: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface TreeseedVerificationCacheInput {
|
|
13
|
+
workspaceRoot: string;
|
|
14
|
+
repoName: string;
|
|
15
|
+
repoPath: string;
|
|
16
|
+
command: string;
|
|
17
|
+
verifyMode: string;
|
|
18
|
+
env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
|
|
19
|
+
}
|
|
20
|
+
export declare function treeseedVerificationCacheKey(input: TreeseedVerificationCacheInput): {
|
|
21
|
+
key: string;
|
|
22
|
+
headSha: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function readTreeseedVerificationCache(input: TreeseedVerificationCacheInput): TreeseedVerificationCacheEntry | null;
|
|
25
|
+
export declare function writeTreeseedVerificationCache(input: TreeseedVerificationCacheInput, durationMs: number): TreeseedVerificationCacheEntry | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { headCommit } from "./git-workflow.js";
|
|
5
|
+
function sha256(value) {
|
|
6
|
+
return createHash("sha256").update(value).digest("hex");
|
|
7
|
+
}
|
|
8
|
+
function fileHash(path) {
|
|
9
|
+
if (!existsSync(path)) return null;
|
|
10
|
+
return sha256(readFileSync(path));
|
|
11
|
+
}
|
|
12
|
+
function cacheEnabled(env = process.env) {
|
|
13
|
+
const value = String(env.TREESEED_VERIFY_CACHE ?? "").trim().toLowerCase();
|
|
14
|
+
if (value === "0" || value === "false" || value === "off") return false;
|
|
15
|
+
if (env.GITHUB_ACTIONS === "true") return value === "1" || value === "true" || value === "on";
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
function treeseedVerificationCacheKey(input) {
|
|
19
|
+
const headSha = headCommit(input.repoPath);
|
|
20
|
+
const payload = {
|
|
21
|
+
repoPath: resolve(input.repoPath),
|
|
22
|
+
headSha,
|
|
23
|
+
packageJson: fileHash(resolve(input.repoPath, "package.json")),
|
|
24
|
+
packageLock: fileHash(resolve(input.repoPath, "package-lock.json")),
|
|
25
|
+
command: input.command,
|
|
26
|
+
nodeMajor: process.versions.node.split(".")[0],
|
|
27
|
+
verifyMode: input.verifyMode
|
|
28
|
+
};
|
|
29
|
+
return { key: sha256(JSON.stringify(payload)), headSha };
|
|
30
|
+
}
|
|
31
|
+
function cachePath(input, key) {
|
|
32
|
+
return resolve(input.workspaceRoot, ".treeseed", "cache", "verification", `${key}.json`);
|
|
33
|
+
}
|
|
34
|
+
function readTreeseedVerificationCache(input) {
|
|
35
|
+
if (!cacheEnabled(input.env)) return null;
|
|
36
|
+
const { key, headSha } = treeseedVerificationCacheKey(input);
|
|
37
|
+
const path = cachePath(input, key);
|
|
38
|
+
if (!existsSync(path)) return null;
|
|
39
|
+
try {
|
|
40
|
+
const entry = JSON.parse(readFileSync(path, "utf8"));
|
|
41
|
+
if (entry.key !== key || entry.headSha !== headSha || entry.status !== "passed") return null;
|
|
42
|
+
return entry;
|
|
43
|
+
} catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function writeTreeseedVerificationCache(input, durationMs) {
|
|
48
|
+
if (!cacheEnabled(input.env)) return null;
|
|
49
|
+
const { key, headSha } = treeseedVerificationCacheKey(input);
|
|
50
|
+
const path = cachePath(input, key);
|
|
51
|
+
const entry = {
|
|
52
|
+
key,
|
|
53
|
+
repoName: input.repoName,
|
|
54
|
+
repoPath: resolve(input.repoPath),
|
|
55
|
+
headSha,
|
|
56
|
+
command: input.command,
|
|
57
|
+
status: "passed",
|
|
58
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
59
|
+
durationMs,
|
|
60
|
+
logsPath: null
|
|
61
|
+
};
|
|
62
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
63
|
+
writeFileSync(path, `${JSON.stringify(entry, null, 2)}
|
|
64
|
+
`, "utf8");
|
|
65
|
+
return entry;
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
readTreeseedVerificationCache,
|
|
69
|
+
treeseedVerificationCacheKey,
|
|
70
|
+
writeTreeseedVerificationCache
|
|
71
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type TreeseedWorkflowPhaseStatus = 'passed' | 'failed' | 'skipped';
|
|
2
|
+
export type TreeseedWorkflowTimingPhase = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
startedAt: string;
|
|
6
|
+
finishedAt: string;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
status: TreeseedWorkflowPhaseStatus;
|
|
9
|
+
};
|
|
10
|
+
export type TreeseedWorkflowTiming = {
|
|
11
|
+
startedAt: string;
|
|
12
|
+
finishedAt: string;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
phases: TreeseedWorkflowTimingPhase[];
|
|
15
|
+
};
|
|
16
|
+
export type TreeseedWorkflowTimer = {
|
|
17
|
+
readonly startedAt: string;
|
|
18
|
+
phase<T>(id: string, label: string, action: () => T): T;
|
|
19
|
+
phaseAsync<T>(id: string, label: string, action: () => Promise<T>): Promise<T>;
|
|
20
|
+
skip(id: string, label: string): void;
|
|
21
|
+
finish(): TreeseedWorkflowTiming;
|
|
22
|
+
};
|
|
23
|
+
export declare function createTreeseedWorkflowTimer(startedAt?: string): TreeseedWorkflowTimer;
|
|
24
|
+
export declare function formatTreeseedDuration(durationMs: number): string;
|
|
25
|
+
export declare function slowestTreeseedWorkflowPhases(timing: TreeseedWorkflowTiming, limit?: number): TreeseedWorkflowTimingPhase[];
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
function nowIso() {
|
|
2
|
+
return (/* @__PURE__ */ new Date()).toISOString();
|
|
3
|
+
}
|
|
4
|
+
function durationSince(startMs) {
|
|
5
|
+
return Math.max(0, Date.now() - startMs);
|
|
6
|
+
}
|
|
7
|
+
function createTreeseedWorkflowTimer(startedAt = nowIso()) {
|
|
8
|
+
const startMs = Date.parse(startedAt);
|
|
9
|
+
const phases = [];
|
|
10
|
+
function record(id, label, started, startedMs, status) {
|
|
11
|
+
const finishedAt = nowIso();
|
|
12
|
+
phases.push({
|
|
13
|
+
id,
|
|
14
|
+
label,
|
|
15
|
+
startedAt: started,
|
|
16
|
+
finishedAt,
|
|
17
|
+
durationMs: durationSince(startedMs),
|
|
18
|
+
status
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
startedAt,
|
|
23
|
+
phase(id, label, action) {
|
|
24
|
+
const phaseStartedAt = nowIso();
|
|
25
|
+
const phaseStartedMs = Date.now();
|
|
26
|
+
try {
|
|
27
|
+
const result = action();
|
|
28
|
+
record(id, label, phaseStartedAt, phaseStartedMs, "passed");
|
|
29
|
+
return result;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
record(id, label, phaseStartedAt, phaseStartedMs, "failed");
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
async phaseAsync(id, label, action) {
|
|
36
|
+
const phaseStartedAt = nowIso();
|
|
37
|
+
const phaseStartedMs = Date.now();
|
|
38
|
+
try {
|
|
39
|
+
const result = await action();
|
|
40
|
+
record(id, label, phaseStartedAt, phaseStartedMs, "passed");
|
|
41
|
+
return result;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
record(id, label, phaseStartedAt, phaseStartedMs, "failed");
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
skip(id, label) {
|
|
48
|
+
const phaseStartedAt = nowIso();
|
|
49
|
+
record(id, label, phaseStartedAt, Date.now(), "skipped");
|
|
50
|
+
},
|
|
51
|
+
finish() {
|
|
52
|
+
const finishedAt = nowIso();
|
|
53
|
+
return {
|
|
54
|
+
startedAt,
|
|
55
|
+
finishedAt,
|
|
56
|
+
durationMs: Math.max(0, Date.parse(finishedAt) - startMs),
|
|
57
|
+
phases: [...phases]
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function formatTreeseedDuration(durationMs) {
|
|
63
|
+
const totalSeconds = Math.max(0, Math.round(durationMs / 1e3));
|
|
64
|
+
if (totalSeconds < 60) return `${totalSeconds}s`;
|
|
65
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
66
|
+
const seconds = totalSeconds % 60;
|
|
67
|
+
if (minutes < 60) return seconds === 0 ? `${minutes}m` : `${minutes}m${seconds}s`;
|
|
68
|
+
const hours = Math.floor(minutes / 60);
|
|
69
|
+
const remainingMinutes = minutes % 60;
|
|
70
|
+
return remainingMinutes === 0 ? `${hours}h` : `${hours}h${remainingMinutes}m`;
|
|
71
|
+
}
|
|
72
|
+
function slowestTreeseedWorkflowPhases(timing, limit = 5) {
|
|
73
|
+
return [...timing.phases].sort((left, right) => right.durationMs - left.durationMs).slice(0, Math.max(0, limit));
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
createTreeseedWorkflowTimer,
|
|
77
|
+
formatTreeseedDuration,
|
|
78
|
+
slowestTreeseedWorkflowPhases
|
|
79
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, relative, resolve } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { runTreeseedGit } from "./git-runner.js";
|
|
4
4
|
import { workspacePackages, workspaceRoot } from "./workspace-tools.js";
|
|
5
5
|
const METADATA_VERSION = 1;
|
|
6
6
|
const INTERNAL_DEPENDENCY_FIELDS = ["dependencies", "optionalDependencies", "peerDependencies", "devDependencies"];
|
|
@@ -65,10 +65,10 @@ function writeMetadata(root, links) {
|
|
|
65
65
|
`, "utf8");
|
|
66
66
|
}
|
|
67
67
|
function gitInfoExcludePath(repoPath) {
|
|
68
|
-
const result =
|
|
68
|
+
const result = runTreeseedGit(["rev-parse", "--git-common-dir"], {
|
|
69
69
|
cwd: repoPath,
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
mode: "read",
|
|
71
|
+
allowFailure: true
|
|
72
72
|
});
|
|
73
73
|
if (result.status !== 0) return null;
|
|
74
74
|
const gitDir = result.stdout.trim();
|
|
@@ -128,6 +128,14 @@ function dependencySpec(packageJson, field, packageName) {
|
|
|
128
128
|
const value = deps[packageName];
|
|
129
129
|
return typeof value === "string" ? value : null;
|
|
130
130
|
}
|
|
131
|
+
function dependencySpecsMatch(manifestSpec, lockSpec) {
|
|
132
|
+
if (lockSpec === manifestSpec) return true;
|
|
133
|
+
const manifestVersion = manifestSpec.replace(/^[~^]/u, "");
|
|
134
|
+
const lockRef = lockSpec.includes("#") ? lockSpec.slice(lockSpec.lastIndexOf("#") + 1) : null;
|
|
135
|
+
return Boolean(
|
|
136
|
+
lockRef && manifestVersion.includes("-dev.") && lockRef === manifestVersion && /^(?:github:|git\+https:\/\/github\.com\/|git\+ssh:\/\/git@github\.com[:/])/u.test(lockSpec)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
131
139
|
function normalizedPathValue(value) {
|
|
132
140
|
return value.replaceAll("\\", "/").replace(/^\.\//u, "").replace(/\/$/u, "");
|
|
133
141
|
}
|
|
@@ -175,7 +183,7 @@ function collectPackageLockConsistencyIssues(filePath, packageJson, packages, wo
|
|
|
175
183
|
const manifestSpec = dependencySpec(packageJson, field, packageName);
|
|
176
184
|
if (!manifestSpec) continue;
|
|
177
185
|
const lockSpec = dependencySpec(rootLockEntry ?? {}, field, packageName);
|
|
178
|
-
if (lockSpec
|
|
186
|
+
if (!lockSpec || !dependencySpecsMatch(manifestSpec, lockSpec)) {
|
|
179
187
|
issues.push({
|
|
180
188
|
filePath,
|
|
181
189
|
packageName,
|
|
@@ -260,6 +268,40 @@ function createLink(link) {
|
|
|
260
268
|
const relativeTarget = relative(dirname(link.linkPath), link.targetPath) || ".";
|
|
261
269
|
symlinkSync(relativeTarget, link.linkPath, process.platform === "win32" ? "junction" : "dir");
|
|
262
270
|
}
|
|
271
|
+
function packageBinEntries(packageJson) {
|
|
272
|
+
const bin = packageJson.bin;
|
|
273
|
+
if (typeof bin === "string" && typeof packageJson.name === "string") {
|
|
274
|
+
return [[packageDirName(packageJson.name), bin]];
|
|
275
|
+
}
|
|
276
|
+
if (!bin || typeof bin !== "object" || Array.isArray(bin)) return [];
|
|
277
|
+
return Object.entries(bin).filter((entry) => typeof entry[1] === "string");
|
|
278
|
+
}
|
|
279
|
+
function syncPackageBinLinks(link) {
|
|
280
|
+
const packageJson = readJson(resolve(link.targetPath, "package.json"));
|
|
281
|
+
const binEntries = packageBinEntries(packageJson);
|
|
282
|
+
if (binEntries.length === 0) return [];
|
|
283
|
+
const binDir = resolve(link.ownerPath, "node_modules", ".bin");
|
|
284
|
+
mkdirSync(binDir, { recursive: true });
|
|
285
|
+
const created = [];
|
|
286
|
+
for (const [binName, binTarget] of binEntries) {
|
|
287
|
+
const linkPath = resolve(binDir, binName);
|
|
288
|
+
const targetPath = resolve(link.linkPath, binTarget);
|
|
289
|
+
const relativeTarget = relative(dirname(linkPath), targetPath) || targetPath;
|
|
290
|
+
const stat = safeLstat(linkPath);
|
|
291
|
+
if (stat?.isSymbolicLink()) {
|
|
292
|
+
const currentTarget = readlinkSync(linkPath);
|
|
293
|
+
if (currentTarget === relativeTarget || resolve(dirname(linkPath), currentTarget) === targetPath) {
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
unlinkSync(linkPath);
|
|
297
|
+
} else if (stat) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
symlinkSync(relativeTarget, linkPath);
|
|
301
|
+
created.push(linkPath);
|
|
302
|
+
}
|
|
303
|
+
return created;
|
|
304
|
+
}
|
|
263
305
|
function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
|
|
264
306
|
const enabled = workspaceLinksEnabled(options.mode, options.env);
|
|
265
307
|
const links = discoverWorkspaceLinks(root);
|
|
@@ -276,6 +318,9 @@ function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
|
|
|
276
318
|
createLink(link);
|
|
277
319
|
created.push(link.linkPath);
|
|
278
320
|
}
|
|
321
|
+
for (const link of links) {
|
|
322
|
+
created.push(...syncPackageBinLinks(link));
|
|
323
|
+
}
|
|
279
324
|
writeMetadata(root, links);
|
|
280
325
|
return {
|
|
281
326
|
...inspectWorkspaceDependencyMode(root, { mode: options.mode, env: options.env }),
|
|
@@ -51,27 +51,27 @@ function envTokenStatus(keys, label, values = process.env) {
|
|
|
51
51
|
}
|
|
52
52
|
function parseGitHubAuthStatus(values = process.env) {
|
|
53
53
|
return {
|
|
54
|
-
authenticated: envTokenStatus(["
|
|
55
|
-
detail: envTokenStatus(["
|
|
54
|
+
authenticated: envTokenStatus(["TREESEED_GITHUB_TOKEN"], "GitHub", values).ready,
|
|
55
|
+
detail: envTokenStatus(["TREESEED_GITHUB_TOKEN"], "GitHub", values).detail
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
function parseWranglerWhoAmI(values = process.env) {
|
|
59
59
|
return {
|
|
60
|
-
authenticated: envTokenStatus(["
|
|
61
|
-
detail: envTokenStatus(["
|
|
60
|
+
authenticated: envTokenStatus(["TREESEED_CLOUDFLARE_API_TOKEN"], "Cloudflare", values).ready,
|
|
61
|
+
detail: envTokenStatus(["TREESEED_CLOUDFLARE_API_TOKEN"], "Cloudflare", values).detail
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
function parseRailwayWhoAmI(values = process.env) {
|
|
65
65
|
return {
|
|
66
|
-
authenticated: envTokenStatus(["
|
|
67
|
-
detail: envTokenStatus(["
|
|
66
|
+
authenticated: envTokenStatus(["TREESEED_RAILWAY_API_TOKEN"], "Railway", values).ready,
|
|
67
|
+
detail: envTokenStatus(["TREESEED_RAILWAY_API_TOKEN"], "Railway", values).detail
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
function parseCopilotSessionStatus(values = process.env) {
|
|
71
|
-
const status = envTokenStatus(["
|
|
71
|
+
const status = envTokenStatus(["TREESEED_GITHUB_COPILOT_TOKEN", "TREESEED_GITHUB_TOKEN"], "GitHub Copilot", values);
|
|
72
72
|
return {
|
|
73
73
|
configured: status.ready,
|
|
74
|
-
detail: status.ready ? "GitHub token detected from configured Treeseed environment for Copilot-backed workflows." : "GitHub token is not configured. Set
|
|
74
|
+
detail: status.ready ? "GitHub Copilot token detected from configured Treeseed environment for Copilot-backed workflows." : "GitHub Copilot token is not configured. Set TREESEED_GITHUB_COPILOT_TOKEN for Copilot-backed workflows. TREESEED_GITHUB_TOKEN is accepted as a compatibility fallback."
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
function collectCliPreflight({ cwd = process.cwd(), requireAuth = false } = {}) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TreeseedWorkflowResult } from '../../workflow.
|
|
1
|
+
import type { TreeseedWorkflowResult } from '../../workflow.js';
|
|
2
2
|
export type SaveScriptArgs = {
|
|
3
3
|
hotfix: boolean;
|
|
4
4
|
message: string;
|
|
@@ -7,12 +7,12 @@ export declare function parseWorkspaceSaveScriptArgs(argv: string[]): SaveScript
|
|
|
7
7
|
export declare function formatWorkspaceSaveSuccessReport(result: TreeseedWorkflowResult<Record<string, unknown>>): {
|
|
8
8
|
ok: boolean;
|
|
9
9
|
kind: string;
|
|
10
|
-
operation: import("../../workflow.
|
|
10
|
+
operation: import("../../workflow.js").TreeseedWorkflowOperationId;
|
|
11
11
|
};
|
|
12
12
|
export declare function formatWorkspaceSaveFailureReport(error: unknown): {
|
|
13
13
|
ok: boolean;
|
|
14
|
-
kind: import("../../workflow.
|
|
15
|
-
operation: import("../../workflow.
|
|
14
|
+
kind: import("../../workflow.js").TreeseedWorkflowErrorCode;
|
|
15
|
+
operation: import("../../workflow.js").TreeseedWorkflowOperationId;
|
|
16
16
|
message: string;
|
|
17
17
|
details: Record<string, unknown> | null;
|
|
18
18
|
exitCode: number;
|
|
@@ -59,6 +59,7 @@ export declare function countConflictMarkers(source: any): {
|
|
|
59
59
|
};
|
|
60
60
|
export declare function collectMergeConflictReport(repoDir: any): {
|
|
61
61
|
branch: string;
|
|
62
|
+
mergeInProgress: boolean;
|
|
62
63
|
rebaseInProgress: boolean;
|
|
63
64
|
conflictedFiles: string[];
|
|
64
65
|
status: string;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { changedWorkspacePackages, publishableWorkspacePackages,
|
|
1
|
+
import { existsSync, lstatSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, resolve } from "node:path";
|
|
3
|
+
import { changedWorkspacePackages, publishableWorkspacePackages, sortWorkspacePackages, workspacePackages, workspaceRoot } from "./workspace-tools.js";
|
|
4
|
+
import { classifyTreeseedGitMode, runTreeseedGitText } from "./git-runner.js";
|
|
5
|
+
function runGit(args, options) {
|
|
6
|
+
return runTreeseedGitText(args, {
|
|
7
|
+
cwd: options.cwd,
|
|
8
|
+
mode: classifyTreeseedGitMode(args),
|
|
9
|
+
timeoutMs: options.timeoutMs,
|
|
10
|
+
maxBuffer: options.maxBuffer
|
|
11
|
+
});
|
|
12
|
+
}
|
|
4
13
|
const MERGE_CONFLICT_EXIT_CODE = 12;
|
|
5
|
-
const TREESEED_PUBLIC_RELEASE_PACKAGE_NAMES = ["@treeseed/sdk", "@treeseed/core", "@treeseed/cli", "@treeseed/agent"];
|
|
14
|
+
const TREESEED_PUBLIC_RELEASE_PACKAGE_NAMES = ["@treeseed/sdk", "@treeseed/ui", "@treeseed/core", "@treeseed/admin", "@treeseed/cli", "@treeseed/agent"];
|
|
6
15
|
function parseSemver(version) {
|
|
7
16
|
const match = String(version).trim().match(/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/);
|
|
8
17
|
if (!match) {
|
|
@@ -60,7 +69,7 @@ function versionForLine(line, patch = 0) {
|
|
|
60
69
|
}
|
|
61
70
|
function localGitTagExists(repoDir, tagName) {
|
|
62
71
|
try {
|
|
63
|
-
return
|
|
72
|
+
return runGit(["tag", "--list", tagName], { cwd: repoDir, capture: true }).trim() === tagName;
|
|
64
73
|
} catch {
|
|
65
74
|
return false;
|
|
66
75
|
}
|
|
@@ -68,7 +77,7 @@ function localGitTagExists(repoDir, tagName) {
|
|
|
68
77
|
function highestStableGitTagOnLine(repoDir, lineLabel) {
|
|
69
78
|
const line = parseVersionLine(lineLabel);
|
|
70
79
|
try {
|
|
71
|
-
const tags =
|
|
80
|
+
const tags = runGit(["tag", "--list", `${line.label}.*`], { cwd: repoDir, capture: true }).split(/\r?\n/u).map((tag) => tag.trim()).filter(Boolean).map((tag) => {
|
|
72
81
|
try {
|
|
73
82
|
const parsed = parseSemver(tag);
|
|
74
83
|
if (parsed.prerelease || parsed.major !== line.major || parsed.minor !== line.minor) return null;
|
|
@@ -340,16 +349,16 @@ function assertWorkspaceVersionConsistency(root = workspaceRoot()) {
|
|
|
340
349
|
);
|
|
341
350
|
}
|
|
342
351
|
function repoRoot(cwd = workspaceRoot()) {
|
|
343
|
-
return
|
|
352
|
+
return runGit(["rev-parse", "--show-toplevel"], { cwd, capture: true }).trim();
|
|
344
353
|
}
|
|
345
354
|
function currentBranch(repoDir) {
|
|
346
|
-
return
|
|
355
|
+
return runGit(["branch", "--show-current"], { cwd: repoDir, capture: true }).trim();
|
|
347
356
|
}
|
|
348
357
|
function originRemoteUrl(repoDir) {
|
|
349
|
-
return
|
|
358
|
+
return runGit(["remote", "get-url", "origin"], { cwd: repoDir, capture: true }).trim();
|
|
350
359
|
}
|
|
351
360
|
function gitStatusPorcelain(repoDir) {
|
|
352
|
-
return
|
|
361
|
+
return runGit(["status", "--porcelain"], { cwd: repoDir, capture: true }).trim();
|
|
353
362
|
}
|
|
354
363
|
function hasMeaningfulChanges(repoDir) {
|
|
355
364
|
return gitStatusPorcelain(repoDir).length > 0;
|
|
@@ -361,25 +370,38 @@ function countConflictMarkers(source) {
|
|
|
361
370
|
end: (source.match(/^>{7} /gm) ?? []).length
|
|
362
371
|
};
|
|
363
372
|
}
|
|
373
|
+
function gitPathExists(repoDir, gitPath) {
|
|
374
|
+
try {
|
|
375
|
+
const resolved = runGit(["rev-parse", "--git-path", gitPath], {
|
|
376
|
+
cwd: repoDir,
|
|
377
|
+
capture: true
|
|
378
|
+
}).trim();
|
|
379
|
+
const fullPath = resolved && (isAbsolute(resolved) ? resolved : resolve(repoDir, resolved));
|
|
380
|
+
return Boolean(fullPath) && existsSync(fullPath);
|
|
381
|
+
} catch {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
364
385
|
function collectMergeConflictReport(repoDir) {
|
|
365
386
|
const branch = currentBranch(repoDir);
|
|
366
|
-
const conflictedFiles =
|
|
387
|
+
const conflictedFiles = runGit(["diff", "--name-only", "--diff-filter=U"], {
|
|
367
388
|
cwd: repoDir,
|
|
368
389
|
capture: true
|
|
369
390
|
}).split("\n").map((line) => line.trim()).filter(Boolean);
|
|
370
|
-
const status =
|
|
391
|
+
const status = runGit(["status", "--short"], { cwd: repoDir, capture: true });
|
|
371
392
|
const perFile = conflictedFiles.map((filePath) => {
|
|
372
393
|
const fullPath = resolve(repoDir, filePath);
|
|
373
|
-
const source = existsSync(fullPath) ? readFileSync(fullPath, "utf8") : "";
|
|
394
|
+
const source = existsSync(fullPath) && !lstatSync(fullPath).isDirectory() ? readFileSync(fullPath, "utf8") : "";
|
|
374
395
|
return {
|
|
375
396
|
filePath,
|
|
376
397
|
markers: countConflictMarkers(source),
|
|
377
|
-
diff:
|
|
398
|
+
diff: runGit(["diff", "--", filePath], { cwd: repoDir, capture: true })
|
|
378
399
|
};
|
|
379
400
|
});
|
|
380
401
|
return {
|
|
381
402
|
branch,
|
|
382
|
-
|
|
403
|
+
mergeInProgress: gitPathExists(repoDir, "MERGE_HEAD"),
|
|
404
|
+
rebaseInProgress: gitPathExists(repoDir, "rebase-merge") || gitPathExists(repoDir, "rebase-apply"),
|
|
383
405
|
conflictedFiles,
|
|
384
406
|
status,
|
|
385
407
|
perFile
|
|
@@ -387,9 +409,10 @@ function collectMergeConflictReport(repoDir) {
|
|
|
387
409
|
}
|
|
388
410
|
function formatMergeConflictReport(report, repoDir, targetBranch = "main") {
|
|
389
411
|
const lines = [
|
|
390
|
-
`Treeseed
|
|
412
|
+
`Treeseed workflow failed due to Git integration conflicts while updating ${targetBranch}.`,
|
|
391
413
|
`Repository root: ${repoDir}`,
|
|
392
414
|
`Branch: ${report.branch}`,
|
|
415
|
+
`Merge in progress: ${report.mergeInProgress ? "yes" : "no"}`,
|
|
393
416
|
`Rebase in progress: ${report.rebaseInProgress ? "yes" : "no"}`,
|
|
394
417
|
"Git status:",
|
|
395
418
|
report.status || "(no git status output)",
|
|
@@ -402,9 +425,9 @@ function formatMergeConflictReport(report, repoDir, targetBranch = "main") {
|
|
|
402
425
|
lines.push(file.diff || " (no diff output)");
|
|
403
426
|
}
|
|
404
427
|
lines.push("Next steps:");
|
|
405
|
-
lines.push("- Inspect conflicted files and reconcile local vs
|
|
406
|
-
lines.push("-
|
|
407
|
-
lines.push("-
|
|
428
|
+
lines.push("- Inspect conflicted files and reconcile local vs target-branch changes on your task branch.");
|
|
429
|
+
lines.push("- Save the resolved task branch, then retry the interrupted Treeseed workflow.");
|
|
430
|
+
lines.push("- If a Git merge or rebase is still active, abort it before retrying.");
|
|
408
431
|
return lines.join("\n");
|
|
409
432
|
}
|
|
410
433
|
export {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync } from "node:fs";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { classifyTreeseedGitMode, runTreeseedGit, runTreeseedGitText } from "./git-runner.js";
|
|
3
4
|
import { join, relative, resolve } from "node:path";
|
|
4
|
-
const TREESEED_WORKSPACE_PACKAGE_DIRS = ["sdk", "core", "cli", "agent"];
|
|
5
|
+
const TREESEED_WORKSPACE_PACKAGE_DIRS = ["sdk", "ui", "core", "admin", "cli", "agent", "api", "treedx"];
|
|
5
6
|
function packageSortWeight(pkg) {
|
|
6
7
|
const relativeDir = String(pkg.relativeDir ?? "");
|
|
7
8
|
const dirName = relativeDir.split("/").pop() ?? "";
|
|
@@ -19,6 +20,14 @@ function compareWorkspacePackages(left, right) {
|
|
|
19
20
|
function escapeRegex(source) {
|
|
20
21
|
return source.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
|
|
21
22
|
}
|
|
23
|
+
function runGit(args, options) {
|
|
24
|
+
return runTreeseedGitText(args, {
|
|
25
|
+
cwd: options.cwd,
|
|
26
|
+
mode: classifyTreeseedGitMode(args),
|
|
27
|
+
timeoutMs: options.timeoutMs,
|
|
28
|
+
maxBuffer: options.maxBuffer
|
|
29
|
+
});
|
|
30
|
+
}
|
|
22
31
|
function segmentPatternToRegex(pattern) {
|
|
23
32
|
return new RegExp(`^${escapeRegex(pattern).replaceAll("*", ".*")}$`);
|
|
24
33
|
}
|
|
@@ -76,7 +85,10 @@ function isWorkspaceRoot(root = process.cwd()) {
|
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
87
|
function hasCompleteTreeseedPackageCheckout(root = process.cwd()) {
|
|
79
|
-
return TREESEED_WORKSPACE_PACKAGE_DIRS.every((dirName) =>
|
|
88
|
+
return TREESEED_WORKSPACE_PACKAGE_DIRS.every((dirName) => {
|
|
89
|
+
const packageDir = resolve(root, "packages", dirName);
|
|
90
|
+
return existsSync(resolve(packageDir, "package.json")) || existsSync(resolve(packageDir, "treeseed.package.yaml"));
|
|
91
|
+
});
|
|
80
92
|
}
|
|
81
93
|
function findNearestTreeseedWorkspaceRoot(startCwd = process.cwd()) {
|
|
82
94
|
const tenantRoot = findNearestTreeseedRoot(startCwd);
|
|
@@ -89,9 +101,15 @@ function readJson(filePath) {
|
|
|
89
101
|
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
90
102
|
}
|
|
91
103
|
function workspacePackageJson(root = workspaceRoot()) {
|
|
104
|
+
if (!existsSync(resolve(root, "package.json"))) {
|
|
105
|
+
return {};
|
|
106
|
+
}
|
|
92
107
|
return readJson(resolve(root, "package.json"));
|
|
93
108
|
}
|
|
94
109
|
function workspacePatterns(root = workspaceRoot()) {
|
|
110
|
+
if (!existsSync(resolve(root, "package.json"))) {
|
|
111
|
+
return hasCompleteTreeseedPackageCheckout(root) ? ["packages/*"] : [];
|
|
112
|
+
}
|
|
95
113
|
const packageJson = workspacePackageJson(root);
|
|
96
114
|
const workspaces = Array.isArray(packageJson.workspaces) ? packageJson.workspaces : Array.isArray(packageJson.workspaces?.packages) ? packageJson.workspaces.packages : [];
|
|
97
115
|
const patterns = workspaces.filter((value) => typeof value === "string" && value.trim().length > 0);
|
|
@@ -172,12 +190,29 @@ function packagesWithScript(scriptName, root = workspaceRoot()) {
|
|
|
172
190
|
);
|
|
173
191
|
}
|
|
174
192
|
function run(command, args, options = {}) {
|
|
193
|
+
if (command === "git") {
|
|
194
|
+
const result2 = runTreeseedGit(args, {
|
|
195
|
+
cwd: options.cwd ?? workspaceRoot(),
|
|
196
|
+
mode: classifyTreeseedGitMode(args),
|
|
197
|
+
allowFailure: false,
|
|
198
|
+
timeoutMs: options.timeoutMs,
|
|
199
|
+
maxBuffer: options.maxBuffer
|
|
200
|
+
});
|
|
201
|
+
if (!options.capture && result2.stdout) {
|
|
202
|
+
process.stdout.write(result2.stdout);
|
|
203
|
+
}
|
|
204
|
+
if (!options.capture && result2.stderr) {
|
|
205
|
+
process.stderr.write(result2.stderr);
|
|
206
|
+
}
|
|
207
|
+
return (result2.stdout ?? "").trim();
|
|
208
|
+
}
|
|
175
209
|
const result = spawnSync(command, args, {
|
|
176
210
|
cwd: options.cwd ?? workspaceRoot(),
|
|
177
211
|
env: { ...process.env, ...options.env ?? {} },
|
|
178
212
|
stdio: options.capture ? "pipe" : "inherit",
|
|
179
213
|
encoding: "utf8",
|
|
180
|
-
timeout: options.timeoutMs
|
|
214
|
+
timeout: options.timeoutMs,
|
|
215
|
+
maxBuffer: options.maxBuffer ?? 1024 * 1024 * 32
|
|
181
216
|
});
|
|
182
217
|
if (result.status !== 0) {
|
|
183
218
|
const message = (result.error?.message ? `${result.error.message}
|
|
@@ -187,10 +222,10 @@ function run(command, args, options = {}) {
|
|
|
187
222
|
return (result.stdout ?? "").trim();
|
|
188
223
|
}
|
|
189
224
|
function canResolveGitRef(baseRef, cwd = workspaceRoot()) {
|
|
190
|
-
const result =
|
|
225
|
+
const result = runTreeseedGit(["rev-parse", "--verify", baseRef], {
|
|
191
226
|
cwd,
|
|
192
|
-
|
|
193
|
-
|
|
227
|
+
mode: "read",
|
|
228
|
+
allowFailure: true
|
|
194
229
|
});
|
|
195
230
|
return result.status === 0;
|
|
196
231
|
}
|
|
@@ -212,7 +247,7 @@ function changedWorkspaceFiles(baseRef, cwd = workspaceRoot()) {
|
|
|
212
247
|
diffCommands.unshift(["diff", "--name-only", resolvedBaseRef, "HEAD"]);
|
|
213
248
|
}
|
|
214
249
|
for (const args of diffCommands) {
|
|
215
|
-
const output =
|
|
250
|
+
const output = runGit(args, { cwd, capture: true });
|
|
216
251
|
for (const line of output.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
|
|
217
252
|
changedFiles.add(line);
|
|
218
253
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TreeseedOperationMetadata } from './operations-types.
|
|
1
|
+
import type { TreeseedOperationMetadata } from './operations-types.js';
|
|
2
2
|
export declare const TRESEED_OPERATION_SPECS: TreeseedOperationMetadata[];
|
|
3
3
|
export declare const TRESEED_OPERATION_INDEX: Map<string, TreeseedOperationMetadata>;
|
|
4
4
|
export declare function findTreeseedOperation(name: string | null | undefined): TreeseedOperationMetadata | null;
|
|
@@ -8,9 +8,11 @@ const TRESEED_OPERATION_SPECS = [
|
|
|
8
8
|
operation({ id: "branch.tasks", name: "tasks", aliases: [], group: "Workflow", summary: "List task branches plus package branch alignment.", description: "List task branches from market and checked-out package repos, including preview metadata and branch/pointer alignment state.", provider: "default", related: ["status", "switch", "close"] }),
|
|
9
9
|
operation({ id: "branch.switch", name: "switch", aliases: [], group: "Workflow", summary: "Create or resume a recursive task branch.", description: "Create or resume the task branch in market and any checked-out package repos, with optional preview provisioning.", provider: "default", related: ["tasks", "dev", "save"] }),
|
|
10
10
|
operation({ id: "branch.save", name: "save", aliases: [], group: "Workflow", summary: "Recursively verify, commit, and push the current task checkpoint.", description: "Save dirty package repos in dependency order, then verify, commit, push, and optionally refresh preview for market.", provider: "default", related: ["switch", "stage", "status"] }),
|
|
11
|
-
operation({ id: "branch.
|
|
12
|
-
operation({ id: "branch.
|
|
13
|
-
operation({ id: "
|
|
11
|
+
operation({ id: "branch.update", name: "update", aliases: [], group: "Workflow", summary: "Merge staging into the current task branch.", description: "Merge the selected upstream branch, staging by default, into the current task branch across market and checked-out package repos.", provider: "default", related: ["status", "save", "stage", "switch"] }),
|
|
12
|
+
operation({ id: "branch.close", name: "close", aliases: [], group: "Workflow", summary: "Recursively archive and delete a task branch.", description: "Auto-save if needed, clean preview resources, and remove the task branch across market and checked-out package repos.", provider: "default", related: ["tasks", "switch", "stage"] }),
|
|
13
|
+
operation({ id: "branch.stage", name: "stage", aliases: [], group: "Workflow", summary: "Promote a locally verified task branch to staging across market and packages.", description: "Merge staging down into the task branch first, run local proof, promote exact verified root and package refs to staging, verify remote staging refs, and clean up only after promotion succeeds.", provider: "default", related: ["save", "release", "close"] }),
|
|
14
|
+
operation({ id: "release.candidate", name: "release-candidate", aliases: [], group: "Validation", summary: "Plan and run reusable release proof records for staging promotion.", description: "Build the exact-SHA proof graph for package, hosted workflow, and provider verification. GitHub-hosted workflow proof is authoritative; local and action-simulation proof is reusable but not a hosted CI substitute.", provider: "default", related: ["stage", "release", "save"] }),
|
|
15
|
+
operation({ id: "release.proof", name: "proof", aliases: [], group: "Validation", summary: "Plan, run, and inspect reusable release proof records.", description: "Manage exact-SHA release proof records for packages, hosted workflows, and provider verification. GitHub-hosted workflow proof is authoritative; local action simulation is advisory.", provider: "default", related: ["save", "release-candidate", "ci"] }),
|
|
14
16
|
operation({ id: "workspace.resume", name: "resume", aliases: [], group: "Workflow", summary: "Resume an interrupted workflow run.", description: "Continue a failed journaled workflow run from its next incomplete step after validating current workspace preconditions.", provider: "default", related: ["recover", "status"] }),
|
|
15
17
|
operation({ id: "workspace.recover", name: "recover", aliases: [], group: "Workflow", summary: "Inspect active workflow locks and interrupted runs.", description: "List active workflow locks, resumable interrupted runs, and the exact commands needed to continue or recover the workspace state.", provider: "default", related: ["resume", "status"] }),
|
|
16
18
|
operation({ id: "workspace.links.status", name: workspaceCommand("status"), aliases: [], group: "Utilities", summary: "Inspect local workspace dependency links.", description: "Inspect whether Treeseed package dependencies are linked to local package checkouts or resolved through deployment references.", provider: "default", related: ["dev", "save"] }),
|
|
@@ -68,9 +70,6 @@ const TRESEED_OPERATION_SPECS = [
|
|
|
68
70
|
operation({ id: "release.verify", name: "test:release:full", aliases: ["release:verify"], group: "Release Utilities", summary: "Run the full release verification path.", description: "Run the full release verification path.", provider: "default" }),
|
|
69
71
|
operation({ id: "release.publishChanged", name: "release:publish:changed", aliases: [], group: "Release Utilities", summary: "Publish changed Treeseed workspace packages.", description: "Publish changed Treeseed workspace packages.", provider: "default" }),
|
|
70
72
|
operation({ id: "tools.astro", name: "astro", aliases: [], group: "Passthrough", summary: "Pass through to the packaged Astro CLI wrapper.", description: "Pass through to the packaged Astro CLI wrapper.", provider: "default" }),
|
|
71
|
-
operation({ id: "services.mailpitUp", name: "mailpit:up", aliases: [], group: "Utilities", summary: "Start the package-managed Mailpit service.", description: "Start the package-managed Mailpit service.", provider: "default" }),
|
|
72
|
-
operation({ id: "services.mailpitDown", name: "mailpit:down", aliases: [], group: "Utilities", summary: "Stop the package-managed Mailpit service.", description: "Stop the package-managed Mailpit service.", provider: "default" }),
|
|
73
|
-
operation({ id: "services.mailpitLogs", name: "mailpit:logs", aliases: [], group: "Utilities", summary: "Show Mailpit logs.", description: "Show Mailpit logs.", provider: "default" }),
|
|
74
73
|
operation({ id: "data.d1MigrateLocal", name: "d1:migrate:local", aliases: [], group: "Utilities", summary: "Apply local D1 migrations.", description: "Apply local D1 migrations.", provider: "default" }),
|
|
75
74
|
operation({ id: "content.cleanupMarkdown", name: "cleanup:markdown", aliases: [], group: "Utilities", summary: "Normalize Markdown and MDX files.", description: "Normalize Markdown and MDX files.", provider: "default" }),
|
|
76
75
|
operation({ id: "content.cleanupMarkdownCheck", name: "cleanup:markdown:check", aliases: [], group: "Utilities", summary: "Check Markdown and MDX formatting without rewriting files.", description: "Check Markdown and MDX formatting without rewriting files.", provider: "default" }),
|