@intentius/chant 0.124.12 → 0.124.14
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/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A chant member's outputs and parameters, read from its source without
|
|
3
|
+
* running it (#2539, #2524 D6).
|
|
4
|
+
*
|
|
5
|
+
* `chant workspace check` resolves member links in source and never runs
|
|
6
|
+
* member code, so it can't build a member to learn its outputs. This reader
|
|
7
|
+
* parses the member's TypeScript files and picks out the two handles a join
|
|
8
|
+
* uses, the way the graph IR names them (`exports` and `imports`):
|
|
9
|
+
*
|
|
10
|
+
* - an output is the name passed to `output(ref, "Name")`, or the binding of
|
|
11
|
+
* `export const name = stackOutput(ref)`;
|
|
12
|
+
* - a parameter is the binding of `export const name = new Parameter(...)`.
|
|
13
|
+
*
|
|
14
|
+
* Only calls whose function is imported from `@intentius/chant` or a chant
|
|
15
|
+
* lexicon count. An output name must be a string literal, or a `const` in the
|
|
16
|
+
* same file that is one. Any other name can't be read without running the
|
|
17
|
+
* code, so it is a gap: the member's list of outputs is then incomplete, and a
|
|
18
|
+
* link to a name the reader didn't find is unresolved rather than missing.
|
|
19
|
+
*
|
|
20
|
+
* The reader loads the TypeScript parser and nothing else from the project.
|
|
21
|
+
*/
|
|
22
|
+
import * as ts from "typescript";
|
|
23
|
+
import { isInside } from "./declaration.js";
|
|
24
|
+
import { kindHandles } from "./links.js";
|
|
25
|
+
import { joinPath, skippedDir } from "./tree.js";
|
|
26
|
+
const memberDir = (dir) => (dir === "." ? "" : dir);
|
|
27
|
+
/** Directories inside a member that hold no project source. */
|
|
28
|
+
const NOT_SOURCE = new Set(["dist", "coverage", "generated"]);
|
|
29
|
+
const CHANT_MODULE = /^@intentius\/chant(-lexicon-[a-z0-9-]+)?(\/.*)?$/;
|
|
30
|
+
function isSourceFile(name) {
|
|
31
|
+
if (!/\.(m?ts|tsx)$/.test(name) || name.endsWith(".d.ts"))
|
|
32
|
+
return false;
|
|
33
|
+
if (/\.(test|spec)\.m?tsx?$/.test(name))
|
|
34
|
+
return false;
|
|
35
|
+
return !name.startsWith("chant.config.");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Every source file under `dir` (tree-relative), leaving out `exclude`d
|
|
39
|
+
* directories (other members, group matches), `node_modules`, dot
|
|
40
|
+
* directories and build output.
|
|
41
|
+
*/
|
|
42
|
+
function sourceFiles(tree, dir, exclude) {
|
|
43
|
+
const out = [];
|
|
44
|
+
const walk = (at) => {
|
|
45
|
+
for (const e of tree.list(at) ?? []) {
|
|
46
|
+
const path = joinPath(at, e.name);
|
|
47
|
+
if (e.type === "dir") {
|
|
48
|
+
if (skippedDir(e.name) || NOT_SOURCE.has(e.name) || exclude.has(path))
|
|
49
|
+
continue;
|
|
50
|
+
walk(path);
|
|
51
|
+
}
|
|
52
|
+
else if (isSourceFile(e.name)) {
|
|
53
|
+
out.push(path);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
walk(dir);
|
|
58
|
+
return out.sort();
|
|
59
|
+
}
|
|
60
|
+
function chantImports(source) {
|
|
61
|
+
const names = new Map();
|
|
62
|
+
const namespaces = new Set();
|
|
63
|
+
for (const s of source.statements) {
|
|
64
|
+
if (!ts.isImportDeclaration(s) || !ts.isStringLiteral(s.moduleSpecifier))
|
|
65
|
+
continue;
|
|
66
|
+
const from = s.moduleSpecifier.text;
|
|
67
|
+
// The components API has its own stackOutput(stack, name), which reads an output rather than declaring one.
|
|
68
|
+
if (!CHANT_MODULE.test(from) || from.includes("/components"))
|
|
69
|
+
continue;
|
|
70
|
+
const bindings = s.importClause?.namedBindings;
|
|
71
|
+
if (!bindings)
|
|
72
|
+
continue;
|
|
73
|
+
if (ts.isNamespaceImport(bindings))
|
|
74
|
+
namespaces.add(bindings.name.text);
|
|
75
|
+
else
|
|
76
|
+
for (const el of bindings.elements)
|
|
77
|
+
names.set(el.name.text, (el.propertyName ?? el.name).text);
|
|
78
|
+
}
|
|
79
|
+
return { names, namespaces };
|
|
80
|
+
}
|
|
81
|
+
/** The chant function a callee names (`output`, `ns.Parameter`), or undefined. */
|
|
82
|
+
function chantCallee(expr, imports) {
|
|
83
|
+
if (ts.isIdentifier(expr))
|
|
84
|
+
return imports.names.get(expr.text);
|
|
85
|
+
if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression) && imports.namespaces.has(expr.expression.text)) {
|
|
86
|
+
return expr.name.text;
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
/** The top-level `const` initializers of a file, for reading a name held in one. */
|
|
91
|
+
function fileConsts(source) {
|
|
92
|
+
const consts = new Map();
|
|
93
|
+
for (const s of source.statements) {
|
|
94
|
+
if (!ts.isVariableStatement(s) || (s.declarationList.flags & ts.NodeFlags.Const) === 0)
|
|
95
|
+
continue;
|
|
96
|
+
for (const d of s.declarationList.declarations)
|
|
97
|
+
if (ts.isIdentifier(d.name) && d.initializer)
|
|
98
|
+
consts.set(d.name.text, d.initializer);
|
|
99
|
+
}
|
|
100
|
+
return consts;
|
|
101
|
+
}
|
|
102
|
+
/** A string the expression is without running anything, or undefined. */
|
|
103
|
+
function literalString(expr, consts, seen = new Set()) {
|
|
104
|
+
if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr))
|
|
105
|
+
return expr.text;
|
|
106
|
+
if (ts.isParenthesizedExpression(expr) || ts.isAsExpression(expr) || ts.isSatisfiesExpression(expr))
|
|
107
|
+
return literalString(expr.expression, consts, seen);
|
|
108
|
+
if (ts.isIdentifier(expr) && !seen.has(expr.text)) {
|
|
109
|
+
const init = consts.get(expr.text);
|
|
110
|
+
if (init)
|
|
111
|
+
return literalString(init, consts, new Set([...seen, expr.text]));
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
function isExported(s) {
|
|
116
|
+
return (ts.canHaveModifiers(s) ? ts.getModifiers(s) : undefined)?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
117
|
+
}
|
|
118
|
+
/** Read one file's outputs and parameters into `out`. */
|
|
119
|
+
function readFile(path, text, out) {
|
|
120
|
+
const source = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, false);
|
|
121
|
+
const imports = chantImports(source);
|
|
122
|
+
if (imports.names.size === 0 && imports.namespaces.size === 0)
|
|
123
|
+
return;
|
|
124
|
+
const consts = fileConsts(source);
|
|
125
|
+
const lineOf = (node) => source.getLineAndCharacterOfPosition(node.getStart(source)).line + 1;
|
|
126
|
+
// Exported bindings: stackOutput outputs and Parameter inputs are named by them.
|
|
127
|
+
for (const s of source.statements) {
|
|
128
|
+
if (!ts.isVariableStatement(s) || !isExported(s))
|
|
129
|
+
continue;
|
|
130
|
+
for (const d of s.declarationList.declarations) {
|
|
131
|
+
if (!ts.isIdentifier(d.name) || !d.initializer)
|
|
132
|
+
continue;
|
|
133
|
+
const init = d.initializer;
|
|
134
|
+
if (ts.isNewExpression(init) && chantCallee(init.expression, imports) === "Parameter") {
|
|
135
|
+
out.inputs.push({ name: d.name.text, file: path, line: lineOf(d) });
|
|
136
|
+
}
|
|
137
|
+
else if (ts.isCallExpression(init) && chantCallee(init.expression, imports) === "stackOutput") {
|
|
138
|
+
const first = init.arguments[0];
|
|
139
|
+
if (first && !ts.isStringLiteralLike(first))
|
|
140
|
+
out.outputs.push({ name: d.name.text, file: path, line: lineOf(d) });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// output(ref, "Name") anywhere in the file.
|
|
145
|
+
const visit = (node) => {
|
|
146
|
+
if (ts.isCallExpression(node) && chantCallee(node.expression, imports) === "output" && node.arguments.length >= 2) {
|
|
147
|
+
const name = literalString(node.arguments[1], consts);
|
|
148
|
+
if (name !== undefined)
|
|
149
|
+
out.outputs.push({ name, file: path, line: lineOf(node) });
|
|
150
|
+
else
|
|
151
|
+
out.gaps.push(`${path}:${lineOf(node)}: an output whose name is not a string literal`);
|
|
152
|
+
}
|
|
153
|
+
ts.forEachChild(node, visit);
|
|
154
|
+
};
|
|
155
|
+
visit(source);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Read a chant member's outputs and parameters from the source under `dir`
|
|
159
|
+
* (tree-relative, `""` for the root), leaving out the `exclude`d directories.
|
|
160
|
+
* Runs no member code.
|
|
161
|
+
*/
|
|
162
|
+
export function readSourceHandles(tree, dir, exclude = new Set()) {
|
|
163
|
+
const out = { outputs: [], inputs: [], gaps: [] };
|
|
164
|
+
for (const file of sourceFiles(tree, dir, exclude)) {
|
|
165
|
+
let text;
|
|
166
|
+
try {
|
|
167
|
+
text = tree.read(file);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
out.gaps.push(`${file}: the file could not be read`);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
readFile(file, text, out);
|
|
174
|
+
}
|
|
175
|
+
return out;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Every member's handles, read in source for `chant workspace check`. A
|
|
179
|
+
* `chant` member's outputs and parameters are parsed from its TypeScript
|
|
180
|
+
* without running it; other kinds expose what the kind and the entry list.
|
|
181
|
+
* A member whose directory is missing or whose kind is unknown is left out,
|
|
182
|
+
* so links to it are unresolved.
|
|
183
|
+
*/
|
|
184
|
+
export function sourceMemberHandles(declaration, tree, groups, kinds) {
|
|
185
|
+
const out = new Map();
|
|
186
|
+
for (const m of declaration.members) {
|
|
187
|
+
const kind = kinds.get(m.kind);
|
|
188
|
+
if (!kind || tree.stat(memberDir(m.dir)) !== "dir")
|
|
189
|
+
continue;
|
|
190
|
+
const listed = kindHandles(m, kind);
|
|
191
|
+
if (listed) {
|
|
192
|
+
out.set(m.name, listed);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Other members' directories and group matches inside this one are not its source.
|
|
196
|
+
const exclude = new Set();
|
|
197
|
+
for (const o of declaration.members)
|
|
198
|
+
if (o !== m && o.dir !== "." && isInside(o.dir, m.dir))
|
|
199
|
+
exclude.add(o.dir);
|
|
200
|
+
for (const g of groups)
|
|
201
|
+
for (const dir of g.matches)
|
|
202
|
+
if (isInside(dir, m.dir))
|
|
203
|
+
exclude.add(dir);
|
|
204
|
+
const read = readSourceHandles(tree, memberDir(m.dir), exclude);
|
|
205
|
+
out.set(m.name, {
|
|
206
|
+
member: m.name,
|
|
207
|
+
outputs: read.outputs.map((o) => ({ name: o.name })),
|
|
208
|
+
inputs: read.inputs.map((i) => ({ name: i.name })),
|
|
209
|
+
complete: read.gaps.length === 0,
|
|
210
|
+
why: read.gaps.length === 0 ? null : read.gaps.length === 1 ? read.gaps[0] : `${read.gaps[0]}, and ${read.gaps.length - 1} more`,
|
|
211
|
+
exposesNone: false,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-member CI pipelines (#2542; #2524 D19, ws-041 and ws-042).
|
|
3
|
+
*
|
|
4
|
+
* When `chant build --components --generate` or `chant run --generate` runs
|
|
5
|
+
* for a project inside a workspace member, the generator is told which
|
|
6
|
+
* member it is generating for ({@link PipelineMember}). The generated
|
|
7
|
+
* pipeline is then filtered to the member's paths, its jobs run in the
|
|
8
|
+
* member's directory, and its file is named after the member so two members
|
|
9
|
+
* never write the same file.
|
|
10
|
+
*
|
|
11
|
+
* Forges read CI files from fixed paths at the repository root, outside any
|
|
12
|
+
* member's directory. The member whose command generates such a file owns
|
|
13
|
+
* it (ws-042), and records it in its list of generated files. That list
|
|
14
|
+
* belongs in the member's `generated` entry in `chant.workspace.json` once
|
|
15
|
+
* #2541 lands. Until then it is `.chant/generated.json` in the member's
|
|
16
|
+
* directory ({@link GENERATED_RECORD_FILE}), which `WSP081` reads to allow
|
|
17
|
+
* one declarer per file (./checks/pipelines.ts).
|
|
18
|
+
*
|
|
19
|
+
* The command handlers import this module only after `findWorkspaceRoot`
|
|
20
|
+
* has found a declaration, so a project outside any workspace never loads it.
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
|
|
23
|
+
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
24
|
+
import { GENERATED_MARKER } from "../discovery/files.js";
|
|
25
|
+
import { ownerOf, readDeclaration, resolveGroups, rootExclusions, WorkspaceReadError } from "./declaration.js";
|
|
26
|
+
import { gitTop, workingTree } from "./tree.js";
|
|
27
|
+
/**
|
|
28
|
+
* TODO(#2541): the interim home of a member's generated-file list, relative
|
|
29
|
+
* to the member's directory. #2541 moves the list into the member's entry in
|
|
30
|
+
* the declaration, and this file goes away.
|
|
31
|
+
*/
|
|
32
|
+
export const GENERATED_RECORD_FILE = ".chant/generated.json";
|
|
33
|
+
function real(path) {
|
|
34
|
+
try {
|
|
35
|
+
return realpathSync(path);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return resolve(path);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** `path` relative to `from`, `/`-separated, `"."` for `from` itself. */
|
|
42
|
+
function relPath(from, path) {
|
|
43
|
+
const rel = relative(from, path).split(sep).join("/");
|
|
44
|
+
return rel === "" ? "." : rel;
|
|
45
|
+
}
|
|
46
|
+
function joinRel(prefix, dir) {
|
|
47
|
+
if (prefix === ".")
|
|
48
|
+
return dir;
|
|
49
|
+
return dir === "." ? prefix : `${prefix}/${dir}`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The member that owns `projectDir`, given the declaration `findWorkspaceRoot`
|
|
53
|
+
* found. Undefined when no member owns it: the directory sits in an example
|
|
54
|
+
* group's match, or outside every member of a workspace with no root member.
|
|
55
|
+
* Throws `WorkspaceReadError` when the declaration can't be read.
|
|
56
|
+
*/
|
|
57
|
+
export function resolveMemberContext(projectDir, found) {
|
|
58
|
+
const workspaceRoot = real(found.dir);
|
|
59
|
+
const tree = workingTree(workspaceRoot);
|
|
60
|
+
const declaration = readDeclaration(tree);
|
|
61
|
+
const groups = resolveGroups(declaration, tree);
|
|
62
|
+
const at = relPath(workspaceRoot, real(projectDir));
|
|
63
|
+
if (at.startsWith(".."))
|
|
64
|
+
return undefined;
|
|
65
|
+
const owner = ownerOf(declaration, groups, at);
|
|
66
|
+
if (!owner || !("member" in owner))
|
|
67
|
+
return undefined;
|
|
68
|
+
const member = owner.member;
|
|
69
|
+
const repoRoot = real(gitTop(workspaceRoot) ?? workspaceRoot);
|
|
70
|
+
const prefix = relPath(repoRoot, workspaceRoot);
|
|
71
|
+
const pipeline = { name: member.name, dir: joinRel(prefix, member.dir) };
|
|
72
|
+
if (member.dir === ".") {
|
|
73
|
+
const exclude = rootExclusions(declaration, groups).map((e) => joinRel(prefix, e.dir));
|
|
74
|
+
if (exclude.length > 0)
|
|
75
|
+
pipeline.exclude = exclude;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
declaration,
|
|
79
|
+
member,
|
|
80
|
+
workspaceRoot,
|
|
81
|
+
repoRoot,
|
|
82
|
+
memberRoot: member.dir === "." ? workspaceRoot : join(workspaceRoot, member.dir),
|
|
83
|
+
pipeline,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Where each forge reads a member's component pipeline from, relative to the repository root. */
|
|
87
|
+
const PIPELINE_DIRS = {
|
|
88
|
+
github: ".github/workflows",
|
|
89
|
+
forgejo: ".forgejo/workflows",
|
|
90
|
+
// GitLab reads only .gitlab-ci.yml, which includes these (`include: local: .gitlab/ci/*.gitlab-ci.yml`).
|
|
91
|
+
gitlab: ".gitlab/ci",
|
|
92
|
+
};
|
|
93
|
+
/** The directory a forge's generated files go in for a member, relative to the repository root, or undefined for a forge chant doesn't know. */
|
|
94
|
+
export function memberPipelineDir(provider) {
|
|
95
|
+
return PIPELINE_DIRS[provider];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The default path of a member's component pipeline for one environment,
|
|
99
|
+
* relative to the repository root: `chant-<member>-<env>.yml` in the forge's
|
|
100
|
+
* workflow directory, or `.gitlab/ci/chant-<member>-<env>.gitlab-ci.yml`.
|
|
101
|
+
* A pull-request pipeline (`kind` `"pr"`, #3465) is `chant-pr.<member>.<env>`, with the dots the apply group uses so no
|
|
102
|
+
* two member and environment pairs share one name, and it sits beside the
|
|
103
|
+
* member's deploy pipeline for the same environment.
|
|
104
|
+
*/
|
|
105
|
+
export function memberPipelineFile(provider, member, env, kind = "components") {
|
|
106
|
+
const dir = PIPELINE_DIRS[provider];
|
|
107
|
+
if (dir === undefined)
|
|
108
|
+
return undefined;
|
|
109
|
+
const stem = kind === "pr" ? `chant-pr.${member}.${env}` : `chant-${member}-${env}`;
|
|
110
|
+
return `${dir}/${stem}${provider === "gitlab" ? ".gitlab-ci.yml" : ".yml"}`;
|
|
111
|
+
}
|
|
112
|
+
/** A repository-relative path for an absolute one. */
|
|
113
|
+
export function repoRelative(ctx, absolute) {
|
|
114
|
+
return relPath(ctx.repoRoot, resolve(absolute));
|
|
115
|
+
}
|
|
116
|
+
/** Read a member's generated-file record, or an empty one. */
|
|
117
|
+
export function readGeneratedRecord(memberRoot) {
|
|
118
|
+
const file = join(memberRoot, GENERATED_RECORD_FILE);
|
|
119
|
+
if (!existsSync(file))
|
|
120
|
+
return { schema: 1, files: [] };
|
|
121
|
+
const parsed = JSON.parse(readFileSync(file, "utf-8"));
|
|
122
|
+
return { schema: 1, files: Array.isArray(parsed.files) ? parsed.files : [] };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Add or replace entries in a member's generated-file record, keyed by path,
|
|
126
|
+
* and write it back sorted, so regenerating the same files leaves it
|
|
127
|
+
* byte-identical.
|
|
128
|
+
*/
|
|
129
|
+
export function recordGeneratedFiles(memberRoot, entries) {
|
|
130
|
+
const record = readGeneratedRecord(memberRoot);
|
|
131
|
+
const byPath = new Map(record.files.map((f) => [f.path, f]));
|
|
132
|
+
for (const e of entries)
|
|
133
|
+
byPath.set(e.path, e);
|
|
134
|
+
const files = [...byPath.values()].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
135
|
+
const file = join(memberRoot, GENERATED_RECORD_FILE);
|
|
136
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
137
|
+
writeFileSync(file, JSON.stringify({ schema: 1, files }, null, 2) + "\n");
|
|
138
|
+
return file;
|
|
139
|
+
}
|
|
140
|
+
/** Quote one argument for a recorded command line when it needs it. */
|
|
141
|
+
export function shellArg(arg) {
|
|
142
|
+
return /^[A-Za-z0-9._\/=:@%+,-]+$/.test(arg) ? arg : `'${arg.replace(/'/g, `'\\''`)}'`;
|
|
143
|
+
}
|
|
144
|
+
/** The first line of a member's generated pipeline, naming the command that regenerates it. */
|
|
145
|
+
export function generatedHeader(command) {
|
|
146
|
+
return `# ${GENERATED_MARKER}. Regenerate with: ${command} (in the member's directory)\n`;
|
|
147
|
+
}
|
|
148
|
+
/** The generators' own default environment when `--env` is not given. */
|
|
149
|
+
const DEFAULT_ENV = "production";
|
|
150
|
+
/**
|
|
151
|
+
* Plan a member's component pipeline: which member, which file and which
|
|
152
|
+
* command. Undefined when the project belongs to no member. Throws with a
|
|
153
|
+
* readable message when there is no default file for the forge and no
|
|
154
|
+
* `--output`.
|
|
155
|
+
*/
|
|
156
|
+
export function planMemberComponentPipeline(input) {
|
|
157
|
+
const ctx = resolveMemberContext(input.projectDir, input.found);
|
|
158
|
+
if (!ctx)
|
|
159
|
+
return undefined;
|
|
160
|
+
const env = input.env ?? DEFAULT_ENV;
|
|
161
|
+
let target;
|
|
162
|
+
if (input.output) {
|
|
163
|
+
target = resolve(input.output);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const file = memberPipelineFile(input.lexicon, ctx.member.name, env, input.prLoop ? "pr" : "components");
|
|
167
|
+
if (file === undefined) {
|
|
168
|
+
throw new Error(`there is no default pipeline path for ${input.lexicon} in a workspace member; pass --output <file>`);
|
|
169
|
+
}
|
|
170
|
+
target = join(ctx.repoRoot, file);
|
|
171
|
+
}
|
|
172
|
+
const file = repoRelative(ctx, target);
|
|
173
|
+
const parts = ["chant", "build", "--components", "--generate", input.lexicon, "--env", env];
|
|
174
|
+
if (input.promoteTo)
|
|
175
|
+
parts.push("--promote-to", input.promoteTo);
|
|
176
|
+
if (input.waveGate) {
|
|
177
|
+
parts.push("--wave-gate", input.waveGate.gate);
|
|
178
|
+
if (input.waveGate.canary?.length)
|
|
179
|
+
parts.push("--canary", input.waveGate.canary.join(","));
|
|
180
|
+
if (input.waveGate.base)
|
|
181
|
+
parts.push("--base", input.waveGate.base);
|
|
182
|
+
}
|
|
183
|
+
if (input.prLoop) {
|
|
184
|
+
parts.push("--pr-loop");
|
|
185
|
+
if (input.prLoop.gate)
|
|
186
|
+
parts.push("--gate", input.prLoop.gate);
|
|
187
|
+
if (input.prLoop.branch)
|
|
188
|
+
parts.push("--branch", input.prLoop.branch);
|
|
189
|
+
}
|
|
190
|
+
for (const p of input.params ?? [])
|
|
191
|
+
parts.push("--param", p);
|
|
192
|
+
if (input.paramsFile)
|
|
193
|
+
parts.push("--params-file", relPath(ctx.memberRoot, resolve(input.paramsFile)));
|
|
194
|
+
if (input.output)
|
|
195
|
+
parts.push("--output", relPath(ctx.memberRoot, target));
|
|
196
|
+
return {
|
|
197
|
+
ctx,
|
|
198
|
+
member: { ...ctx.pipeline, file },
|
|
199
|
+
file,
|
|
200
|
+
target,
|
|
201
|
+
command: parts.map(shellArg).join(" "),
|
|
202
|
+
env,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** Write a member's pipeline with its header and record it as the member's generated file. */
|
|
206
|
+
export function writeMemberComponentPipeline(plan, yaml) {
|
|
207
|
+
mkdirSync(dirname(plan.target), { recursive: true });
|
|
208
|
+
writeFileSync(plan.target, generatedHeader(plan.command) + yaml);
|
|
209
|
+
recordGeneratedFiles(plan.ctx.memberRoot, [{ path: plan.file, command: plan.command, env: plan.env }]);
|
|
210
|
+
}
|
|
211
|
+
/** Plan a member's Op pipelines. Undefined when the directory belongs to no member. */
|
|
212
|
+
export function planMemberOpPipelines(input) {
|
|
213
|
+
const ctx = resolveMemberContext(input.projectDir, input.found);
|
|
214
|
+
if (!ctx)
|
|
215
|
+
return undefined;
|
|
216
|
+
let outDir;
|
|
217
|
+
if (input.output) {
|
|
218
|
+
outDir = resolve(input.output);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const dir = memberPipelineDir(input.provider);
|
|
222
|
+
if (dir === undefined) {
|
|
223
|
+
throw new Error(`there is no default pipeline directory for ${input.provider} in a workspace member; pass --output <dir>`);
|
|
224
|
+
}
|
|
225
|
+
outDir = join(ctx.repoRoot, dir);
|
|
226
|
+
}
|
|
227
|
+
const parts = ["chant", "run", "--generate", input.provider];
|
|
228
|
+
if (input.specFile)
|
|
229
|
+
parts.push("--spec", relPath(ctx.memberRoot, resolve(input.specFile)));
|
|
230
|
+
if (input.output)
|
|
231
|
+
parts.push("--output", relPath(ctx.memberRoot, outDir));
|
|
232
|
+
return {
|
|
233
|
+
ctx,
|
|
234
|
+
member: { ...ctx.pipeline, fileDir: repoRelative(ctx, outDir) },
|
|
235
|
+
outDir,
|
|
236
|
+
command: parts.map(shellArg).join(" "),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/** Write a member's Op pipeline files with their header and record them. Returns the paths written, relative to the current directory. */
|
|
240
|
+
export function writeMemberOpPipelines(plan, files) {
|
|
241
|
+
const written = [];
|
|
242
|
+
const entries = [];
|
|
243
|
+
for (const f of files) {
|
|
244
|
+
const target = join(plan.outDir, f.name);
|
|
245
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
246
|
+
writeFileSync(target, generatedHeader(plan.command) + f.yaml);
|
|
247
|
+
entries.push({ path: repoRelative(plan.ctx, target), command: plan.command });
|
|
248
|
+
written.push(relative(process.cwd(), target) || target);
|
|
249
|
+
}
|
|
250
|
+
recordGeneratedFiles(plan.ctx.memberRoot, entries);
|
|
251
|
+
return written;
|
|
252
|
+
}
|
|
253
|
+
/** A message for an error from planning: a declaration error with its file and line, or the error's own message. */
|
|
254
|
+
export function describeError(err) {
|
|
255
|
+
if (err instanceof WorkspaceReadError)
|
|
256
|
+
return err.describe();
|
|
257
|
+
return err instanceof Error ? err.message : String(err);
|
|
258
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace member-run` (#2537): the one process a toolchain runs for
|
|
3
|
+
* `chant workspace build|lint|audit|graph`.
|
|
4
|
+
*
|
|
5
|
+
* `member-commands.ts` groups the members by the chant each one resolves
|
|
6
|
+
* (#2524 D3, "one process per toolchain identity") and spawns that chant's
|
|
7
|
+
* `workspace member-run` once per group. The request arrives as JSON on
|
|
8
|
+
* stdin: the level-0 command line for each member, and the member's
|
|
9
|
+
* directory. This process runs them one after another, in-process, from
|
|
10
|
+
* inside each directory, so every member gets what `chant <verb> .` would
|
|
11
|
+
* print there. It answers on stdout with one {@link PROTOCOL_PREFIX} line per
|
|
12
|
+
* member, after a header line naming the protocol and this chant's version.
|
|
13
|
+
*
|
|
14
|
+
* A chant older than this command has no header to print. The caller sees
|
|
15
|
+
* that and falls back to one level-0 process per member.
|
|
16
|
+
*
|
|
17
|
+
* Internal: not listed in `chant --help`, and the protocol may change with
|
|
18
|
+
* the caller, which is always a chant of the same or a newer release.
|
|
19
|
+
*/
|
|
20
|
+
import { ENV_VAR } from "../env.js";
|
|
21
|
+
import { readerVersion } from "./declaration.js";
|
|
22
|
+
/** Marks the lines of this protocol on stdout; anything else there is stray output. */
|
|
23
|
+
export const PROTOCOL_PREFIX = "@@chant-member-run@@ ";
|
|
24
|
+
export const MEMBER_RUN_PROTOCOL = 1;
|
|
25
|
+
/** A `process.exit` inside a command, turned into a value. */
|
|
26
|
+
class ExitRequest extends Error {
|
|
27
|
+
constructor(code) {
|
|
28
|
+
super(`process.exit(${code})`);
|
|
29
|
+
this.code = code;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Run `fn` with stdout, stderr and `process.exit` captured. Commands print
|
|
34
|
+
* through `console`, which writes through the stream's `write` at call time,
|
|
35
|
+
* so replacing `write` catches everything they print.
|
|
36
|
+
*/
|
|
37
|
+
export async function captureRun(fn) {
|
|
38
|
+
const out = [];
|
|
39
|
+
const err = [];
|
|
40
|
+
const sink = (into) => ((chunk, encoding, cb) => {
|
|
41
|
+
into.push(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf8"));
|
|
42
|
+
const done = typeof encoding === "function" ? encoding : cb;
|
|
43
|
+
if (typeof done === "function")
|
|
44
|
+
done();
|
|
45
|
+
return true;
|
|
46
|
+
});
|
|
47
|
+
const saved = { out: process.stdout.write, err: process.stderr.write, exit: process.exit };
|
|
48
|
+
process.stdout.write = sink(out);
|
|
49
|
+
process.stderr.write = sink(err);
|
|
50
|
+
process.exit = ((code) => {
|
|
51
|
+
throw new ExitRequest(typeof code === "number" ? code : 0);
|
|
52
|
+
});
|
|
53
|
+
let exitCode;
|
|
54
|
+
try {
|
|
55
|
+
exitCode = await fn();
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
if (e instanceof ExitRequest) {
|
|
59
|
+
exitCode = e.code;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
err.push(`${e instanceof Error ? e.message : String(e)}\n`);
|
|
63
|
+
exitCode = 1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
process.stdout.write = saved.out;
|
|
68
|
+
process.stderr.write = saved.err;
|
|
69
|
+
process.exit = saved.exit;
|
|
70
|
+
}
|
|
71
|
+
return { exitCode, stdout: out.join(""), stderr: err.join("") };
|
|
72
|
+
}
|
|
73
|
+
function emit(line) {
|
|
74
|
+
process.stdout.write(`${PROTOCOL_PREFIX}${JSON.stringify(line)}\n`);
|
|
75
|
+
}
|
|
76
|
+
async function readStdin() {
|
|
77
|
+
const chunks = [];
|
|
78
|
+
for await (const chunk of process.stdin)
|
|
79
|
+
chunks.push(chunk);
|
|
80
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
81
|
+
}
|
|
82
|
+
/** Run each unit of `request` in turn, answering on stdout. */
|
|
83
|
+
export async function runMemberUnits(request, run) {
|
|
84
|
+
emit({ type: "header", protocol: MEMBER_RUN_PROTOCOL, chant: readerVersion() });
|
|
85
|
+
const startDir = process.cwd();
|
|
86
|
+
const startEnv = process.env[ENV_VAR];
|
|
87
|
+
for (const unit of request.units) {
|
|
88
|
+
const result = await captureRun(async () => {
|
|
89
|
+
process.chdir(unit.dir);
|
|
90
|
+
// `unit.exclude` needs no action here: discovery reads the declaration
|
|
91
|
+
// itself and leaves member `.`'s exclusions out of every walk (#2527).
|
|
92
|
+
return run(unit.argv);
|
|
93
|
+
});
|
|
94
|
+
if (startEnv === undefined)
|
|
95
|
+
delete process.env[ENV_VAR];
|
|
96
|
+
else
|
|
97
|
+
process.env[ENV_VAR] = startEnv;
|
|
98
|
+
process.chdir(startDir);
|
|
99
|
+
emit({ type: "result", id: unit.id, ...result, finishedAt: new Date().toISOString() });
|
|
100
|
+
}
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
export async function runWorkspaceMemberRun(_ctx, run) {
|
|
104
|
+
let request;
|
|
105
|
+
try {
|
|
106
|
+
request = JSON.parse(await readStdin());
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(`chant workspace member-run: the request on stdin is not JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
if (request.protocol !== MEMBER_RUN_PROTOCOL || !Array.isArray(request.units)) {
|
|
113
|
+
console.error(`chant workspace member-run: this chant speaks protocol ${MEMBER_RUN_PROTOCOL}, and the request asks for ${String(request.protocol)}`);
|
|
114
|
+
return 1;
|
|
115
|
+
}
|
|
116
|
+
return runMemberUnits(request, run);
|
|
117
|
+
}
|