@intentius/chant 0.124.13 → 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.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.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.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.js +75 -0
- 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.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 +3 -0
- 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/lexicon-module.ts +3 -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/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/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 +1 -1
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chant#3090 — the file-system half of fold's import resolution: which file a
|
|
3
|
+
* relative specifier names, which file a package's `exports` map names for a
|
|
4
|
+
* subpath, and which file a tsconfig `paths` entry names.
|
|
5
|
+
*
|
|
6
|
+
* The rules follow TypeScript's `bundler` resolution with `noDtsResolution`,
|
|
7
|
+
* the resolver `tsc` and the editor use for these specifiers:
|
|
8
|
+
*
|
|
9
|
+
* - `./x.js` names `./x.ts` (or `./x.tsx`) when that file exists, and the
|
|
10
|
+
* `.js` file only otherwise. `.mjs` maps to `.mts`, `.cjs` to `.cts` and
|
|
11
|
+
* `.jsx` to `.tsx` the same way.
|
|
12
|
+
* - A package's `exports` map is read for the root and for subpaths, with
|
|
13
|
+
* one `*` per pattern key, and its condition objects are read in key order
|
|
14
|
+
* against the `import`, `node` and `default` conditions, as an ESM import
|
|
15
|
+
* in Node reads them.
|
|
16
|
+
* - A `paths` entry from the nearest `tsconfig.json` resolves relative to
|
|
17
|
+
* `baseUrl` when the config chain sets one and to the directory of the
|
|
18
|
+
* config that declares `paths` otherwise.
|
|
19
|
+
*
|
|
20
|
+
* Nothing here calls Node's `Module._resolveFilename`: every answer comes from
|
|
21
|
+
* `statSync` and `readFileSync`, which is what keeps the cold-resolution cost
|
|
22
|
+
* of chant#1020 off this path.
|
|
23
|
+
*/
|
|
24
|
+
import * as ts from "typescript";
|
|
25
|
+
import { readFileSync, statSync } from "node:fs";
|
|
26
|
+
import { dirname, extname, isAbsolute, join, resolve as resolvePath } from "node:path";
|
|
27
|
+
/** True when `path` is an existing regular file. */
|
|
28
|
+
export function isFile(path) {
|
|
29
|
+
try {
|
|
30
|
+
return statSync(path, { throwIfNoEntry: false })?.isFile() ?? false;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** True when `path` is an existing directory. */
|
|
37
|
+
function isDirectory(path) {
|
|
38
|
+
try {
|
|
39
|
+
return statSync(path, { throwIfNoEntry: false })?.isDirectory() ?? false;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** The TypeScript source extensions a JavaScript extension in a specifier stands for, in the order `tsc` tries them. */
|
|
46
|
+
const TS_SOURCE_FOR_JS_EXTENSION = {
|
|
47
|
+
".js": [".ts", ".tsx"],
|
|
48
|
+
".jsx": [".tsx"],
|
|
49
|
+
".mjs": [".mts"],
|
|
50
|
+
".cjs": [".cts"],
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* The file an absolute module base path names, or `undefined` when none of
|
|
54
|
+
* the probed files exists. A JavaScript extension is first swapped for its
|
|
55
|
+
* TypeScript source extension. Then the path itself, the path with `.ts`,
|
|
56
|
+
* `.tsx`, `.js` and `.mjs` appended, and `index.ts` and `index.js` under it
|
|
57
|
+
* are tried in that order.
|
|
58
|
+
*/
|
|
59
|
+
export function probeModuleFile(base) {
|
|
60
|
+
const ext = extname(base);
|
|
61
|
+
const sourceExts = TS_SOURCE_FOR_JS_EXTENSION[ext];
|
|
62
|
+
if (sourceExts) {
|
|
63
|
+
const stem = base.slice(0, -ext.length);
|
|
64
|
+
for (const sourceExt of sourceExts) {
|
|
65
|
+
if (isFile(stem + sourceExt))
|
|
66
|
+
return stem + sourceExt;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const candidates = [
|
|
70
|
+
base,
|
|
71
|
+
`${base}.ts`,
|
|
72
|
+
`${base}.tsx`,
|
|
73
|
+
`${base}.js`,
|
|
74
|
+
`${base}.mjs`,
|
|
75
|
+
join(base, "index.ts"),
|
|
76
|
+
join(base, "index.js"),
|
|
77
|
+
];
|
|
78
|
+
return candidates.find(isFile);
|
|
79
|
+
}
|
|
80
|
+
/** A bare specifier split into its package name and the subpath after it (`"."` for the root). */
|
|
81
|
+
export function splitBareSpecifier(specifier) {
|
|
82
|
+
const segments = specifier.split("/");
|
|
83
|
+
const nameLength = specifier.startsWith("@") ? 2 : 1;
|
|
84
|
+
if (segments.length < nameLength || segments.slice(0, nameLength).some((s) => s === ""))
|
|
85
|
+
return undefined;
|
|
86
|
+
const name = segments.slice(0, nameLength).join("/");
|
|
87
|
+
const rest = segments.slice(nameLength).join("/");
|
|
88
|
+
return { name, subpath: rest === "" ? "." : `./${rest}` };
|
|
89
|
+
}
|
|
90
|
+
/** The conditions an ESM import in Node matches, which is what the run path does. */
|
|
91
|
+
const EXPORT_CONDITIONS = new Set(["import", "node", "default"]);
|
|
92
|
+
/**
|
|
93
|
+
* The target an `exports` value selects, with `star` substituted for each `*`
|
|
94
|
+
* when it came from a pattern key. A string is the target; an array yields its
|
|
95
|
+
* first resolvable entry; a condition object is read in key order and the
|
|
96
|
+
* first matching condition that resolves wins. `null`, and a condition object
|
|
97
|
+
* with no matching condition, resolve to nothing.
|
|
98
|
+
*/
|
|
99
|
+
function exportsValueTarget(value, star) {
|
|
100
|
+
if (typeof value === "string")
|
|
101
|
+
return star === undefined ? value : value.split("*").join(star);
|
|
102
|
+
if (Array.isArray(value)) {
|
|
103
|
+
for (const entry of value) {
|
|
104
|
+
const target = exportsValueTarget(entry, star);
|
|
105
|
+
if (target !== undefined)
|
|
106
|
+
return target;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
if (typeof value !== "object" || value === null)
|
|
111
|
+
return undefined;
|
|
112
|
+
for (const [condition, conditional] of Object.entries(value)) {
|
|
113
|
+
if (!EXPORT_CONDITIONS.has(condition))
|
|
114
|
+
continue;
|
|
115
|
+
const target = exportsValueTarget(conditional, star);
|
|
116
|
+
if (target !== undefined)
|
|
117
|
+
return target;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The target `exportsField` gives `subpath` (`"."` or `"./x"`), relative to
|
|
123
|
+
* the package directory, or `undefined` when the map does not export it. An
|
|
124
|
+
* exact key wins over a pattern; among patterns, the longest prefix before the
|
|
125
|
+
* `*` wins, as in Node's own resolver.
|
|
126
|
+
*/
|
|
127
|
+
export function packageExportsTarget(exportsField, subpath) {
|
|
128
|
+
const isSubpathMap = typeof exportsField === "object" &&
|
|
129
|
+
exportsField !== null &&
|
|
130
|
+
!Array.isArray(exportsField) &&
|
|
131
|
+
Object.keys(exportsField).some((k) => k.startsWith("."));
|
|
132
|
+
if (!isSubpathMap)
|
|
133
|
+
return subpath === "." ? exportsValueTarget(exportsField, undefined) : undefined;
|
|
134
|
+
const map = exportsField;
|
|
135
|
+
if (Object.prototype.hasOwnProperty.call(map, subpath) && !subpath.includes("*"))
|
|
136
|
+
return exportsValueTarget(map[subpath], undefined);
|
|
137
|
+
let bestKey;
|
|
138
|
+
let bestStar;
|
|
139
|
+
for (const key of Object.keys(map)) {
|
|
140
|
+
const starAt = key.indexOf("*");
|
|
141
|
+
if (starAt === -1 || key.indexOf("*", starAt + 1) !== -1)
|
|
142
|
+
continue;
|
|
143
|
+
const prefix = key.slice(0, starAt);
|
|
144
|
+
const suffix = key.slice(starAt + 1);
|
|
145
|
+
if (!subpath.startsWith(prefix) || subpath === prefix)
|
|
146
|
+
continue;
|
|
147
|
+
if (suffix !== "" && (!subpath.endsWith(suffix) || subpath.length < key.length))
|
|
148
|
+
continue;
|
|
149
|
+
if (bestKey === undefined || prefix.length > bestKey.indexOf("*") || (prefix.length === bestKey.indexOf("*") && key.length > bestKey.length)) {
|
|
150
|
+
bestKey = key;
|
|
151
|
+
bestStar = subpath.slice(prefix.length, subpath.length - suffix.length);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return bestKey === undefined ? undefined : exportsValueTarget(map[bestKey], bestStar);
|
|
155
|
+
}
|
|
156
|
+
/** Nearest `tsconfig.json` for a directory (`null` when there is none). */
|
|
157
|
+
const nearestTsconfigCache = new Map();
|
|
158
|
+
/** Parsed config chains by leaf config path, re-read when a file in the chain changes. */
|
|
159
|
+
const tsconfigCache = new Map();
|
|
160
|
+
function nearestTsconfig(dir) {
|
|
161
|
+
const cached = nearestTsconfigCache.get(dir);
|
|
162
|
+
if (cached !== undefined)
|
|
163
|
+
return cached;
|
|
164
|
+
const candidate = join(dir, "tsconfig.json");
|
|
165
|
+
let found;
|
|
166
|
+
if (isFile(candidate))
|
|
167
|
+
found = candidate;
|
|
168
|
+
else {
|
|
169
|
+
const parent = dirname(dir);
|
|
170
|
+
found = parent === dir ? null : nearestTsconfig(parent);
|
|
171
|
+
}
|
|
172
|
+
nearestTsconfigCache.set(dir, found);
|
|
173
|
+
return found;
|
|
174
|
+
}
|
|
175
|
+
function mtimeOf(path) {
|
|
176
|
+
try {
|
|
177
|
+
return statSync(path, { throwIfNoEntry: false })?.mtimeMs ?? -1;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return -1;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** The config file an `extends` entry names, or `undefined` when it cannot be found. */
|
|
184
|
+
function resolveExtends(entry, fromConfig) {
|
|
185
|
+
const fromDir = dirname(fromConfig);
|
|
186
|
+
if (entry.startsWith(".") || isAbsolute(entry)) {
|
|
187
|
+
const path = resolvePath(fromDir, entry);
|
|
188
|
+
if (isFile(path))
|
|
189
|
+
return path;
|
|
190
|
+
if (!path.endsWith(".json") && isFile(`${path}.json`))
|
|
191
|
+
return `${path}.json`;
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
// A package's config, looked up in `node_modules` the way `tsc` does for
|
|
195
|
+
// the common shapes: the file itself, the file plus `.json`, or the
|
|
196
|
+
// package directory's `tsconfig.json`.
|
|
197
|
+
for (let dir = fromDir;;) {
|
|
198
|
+
const path = join(dir, "node_modules", entry);
|
|
199
|
+
if (isFile(path))
|
|
200
|
+
return path;
|
|
201
|
+
if (!path.endsWith(".json") && isFile(`${path}.json`))
|
|
202
|
+
return `${path}.json`;
|
|
203
|
+
if (isDirectory(path) && isFile(join(path, "tsconfig.json")))
|
|
204
|
+
return join(path, "tsconfig.json");
|
|
205
|
+
const parent = dirname(dir);
|
|
206
|
+
if (parent === dir)
|
|
207
|
+
return undefined;
|
|
208
|
+
dir = parent;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/** Read `configPath` and everything it extends, later configs overriding earlier ones. */
|
|
212
|
+
function readConfigChain(configPath, files, seen) {
|
|
213
|
+
if (seen.has(configPath))
|
|
214
|
+
return {};
|
|
215
|
+
seen.add(configPath);
|
|
216
|
+
files.push(configPath);
|
|
217
|
+
let text;
|
|
218
|
+
try {
|
|
219
|
+
text = readFileSync(configPath, "utf-8");
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return {};
|
|
223
|
+
}
|
|
224
|
+
const { config } = ts.parseConfigFileTextToJson(configPath, text);
|
|
225
|
+
if (typeof config !== "object" || config === null)
|
|
226
|
+
return {};
|
|
227
|
+
const raw = config;
|
|
228
|
+
const merged = {};
|
|
229
|
+
const parents = typeof raw.extends === "string" ? [raw.extends] : Array.isArray(raw.extends) ? raw.extends : [];
|
|
230
|
+
for (const parent of parents) {
|
|
231
|
+
if (typeof parent !== "string")
|
|
232
|
+
continue;
|
|
233
|
+
const parentPath = resolveExtends(parent, configPath);
|
|
234
|
+
if (parentPath === undefined)
|
|
235
|
+
continue;
|
|
236
|
+
const inherited = readConfigChain(parentPath, files, seen);
|
|
237
|
+
if (inherited.paths)
|
|
238
|
+
merged.paths = inherited.paths;
|
|
239
|
+
if (inherited.baseUrl !== undefined)
|
|
240
|
+
merged.baseUrl = inherited.baseUrl;
|
|
241
|
+
}
|
|
242
|
+
const options = raw.compilerOptions;
|
|
243
|
+
if (options && typeof options.paths === "object" && options.paths !== null && !Array.isArray(options.paths)) {
|
|
244
|
+
merged.paths = { value: options.paths, declaredIn: dirname(configPath) };
|
|
245
|
+
}
|
|
246
|
+
if (options && typeof options.baseUrl === "string")
|
|
247
|
+
merged.baseUrl = resolvePath(dirname(configPath), options.baseUrl);
|
|
248
|
+
return merged;
|
|
249
|
+
}
|
|
250
|
+
function parsePaths(chain) {
|
|
251
|
+
if (!chain.paths)
|
|
252
|
+
return undefined;
|
|
253
|
+
const patterns = [];
|
|
254
|
+
for (const [key, value] of Object.entries(chain.paths.value)) {
|
|
255
|
+
if (!Array.isArray(value))
|
|
256
|
+
continue;
|
|
257
|
+
const substitutions = value.filter((s) => typeof s === "string");
|
|
258
|
+
const starAt = key.indexOf("*");
|
|
259
|
+
if (starAt !== -1 && key.indexOf("*", starAt + 1) !== -1)
|
|
260
|
+
continue;
|
|
261
|
+
patterns.push(starAt === -1
|
|
262
|
+
? { key, prefix: key, suffix: undefined, substitutions }
|
|
263
|
+
: { key, prefix: key.slice(0, starAt), suffix: key.slice(starAt + 1), substitutions });
|
|
264
|
+
}
|
|
265
|
+
return { base: chain.baseUrl ?? chain.paths.declaredIn, patterns };
|
|
266
|
+
}
|
|
267
|
+
function tsconfigPathsFor(configPath) {
|
|
268
|
+
const cached = tsconfigCache.get(configPath);
|
|
269
|
+
if (cached && cached.stamps.every(([file, mtime]) => mtimeOf(file) === mtime))
|
|
270
|
+
return cached.paths;
|
|
271
|
+
const files = [];
|
|
272
|
+
const paths = parsePaths(readConfigChain(configPath, files, new Set()));
|
|
273
|
+
tsconfigCache.set(configPath, { stamps: files.map((f) => [f, mtimeOf(f)]), paths });
|
|
274
|
+
return paths;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* The tsconfig `paths` entry that matches a bare `specifier` imported by
|
|
278
|
+
* `fromFile`, read from the nearest `tsconfig.json` above it, and the file it
|
|
279
|
+
* maps the specifier to (`target`, `undefined` when no substitution names an
|
|
280
|
+
* existing file). `undefined` when no entry matches. An exact key wins over a
|
|
281
|
+
* pattern, and among patterns the longest prefix wins, as in `tsc`.
|
|
282
|
+
* Substitutions are tried in order with {@link probeModuleFile}.
|
|
283
|
+
*/
|
|
284
|
+
export function tsconfigPathsMatch(specifier, fromFile) {
|
|
285
|
+
const configPath = nearestTsconfig(dirname(fromFile));
|
|
286
|
+
if (configPath === null)
|
|
287
|
+
return undefined;
|
|
288
|
+
const paths = tsconfigPathsFor(configPath);
|
|
289
|
+
if (!paths)
|
|
290
|
+
return undefined;
|
|
291
|
+
let best;
|
|
292
|
+
for (const pattern of paths.patterns) {
|
|
293
|
+
if (pattern.suffix === undefined) {
|
|
294
|
+
if (pattern.key === specifier) {
|
|
295
|
+
best = pattern;
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (specifier.length >= pattern.prefix.length + pattern.suffix.length &&
|
|
301
|
+
specifier.startsWith(pattern.prefix) &&
|
|
302
|
+
specifier.endsWith(pattern.suffix) &&
|
|
303
|
+
(best === undefined || pattern.prefix.length > best.prefix.length)) {
|
|
304
|
+
best = pattern;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (!best)
|
|
308
|
+
return undefined;
|
|
309
|
+
const star = best.suffix === undefined ? "" : specifier.slice(best.prefix.length, specifier.length - best.suffix.length);
|
|
310
|
+
for (const substitution of best.substitutions) {
|
|
311
|
+
const target = probeModuleFile(resolvePath(paths.base, substitution.split("*").join(star)));
|
|
312
|
+
if (target !== undefined)
|
|
313
|
+
return { key: best.key, target };
|
|
314
|
+
}
|
|
315
|
+
return { key: best.key, target: undefined };
|
|
316
|
+
}
|
|
317
|
+
/** The file {@link tsconfigPathsMatch} maps `specifier` to, or `undefined`. */
|
|
318
|
+
export function tsconfigPathsTarget(specifier, fromFile) {
|
|
319
|
+
return tsconfigPathsMatch(specifier, fromFile)?.target;
|
|
320
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one discovery walk (chant#2527).
|
|
3
|
+
*
|
|
4
|
+
* Every command that decides which files chant reads walks the tree here:
|
|
5
|
+
* source discovery (`./files.ts`'s `findInfraFiles`, behind build, graph,
|
|
6
|
+
* list, explain and lexicon detection), `chant lint`, component discovery,
|
|
7
|
+
* Op discovery and the `chant audit` walk. They used to have five walkers
|
|
8
|
+
* with five sets of rules. v0.80.0 warned about every file whose status the
|
|
9
|
+
* convergence changes (#2571), and this module is that convergence. It is on
|
|
10
|
+
* #2525's level-0 exception list.
|
|
11
|
+
*
|
|
12
|
+
* The rules, for every walker:
|
|
13
|
+
*
|
|
14
|
+
* - `node_modules` and `.git` are never entered.
|
|
15
|
+
* - Dot-directories are skipped. The audit walk keeps `.github` and
|
|
16
|
+
* `.forgejo`, which hold the CI files it audits.
|
|
17
|
+
* - `dist` is skipped.
|
|
18
|
+
* - Git-ignored paths are skipped, nested `.gitignore` files, `.git/info/exclude`
|
|
19
|
+
* and the global excludes file included, the way git itself decides. Only
|
|
20
|
+
* paths below the scan root are asked about: when the scan root is itself
|
|
21
|
+
* ignored, nothing under it is dropped for being ignored, so building or
|
|
22
|
+
* linting an ignored directory still reads it.
|
|
23
|
+
* - When the scan root is inside a chant project, a child directory holding a
|
|
24
|
+
* project config is a boundary and is not entered. A `chant.config.json`
|
|
25
|
+
* holding only lint keys is a fragment, not a project config, and is not a
|
|
26
|
+
* boundary. A `chant.config.ts` always is one, since telling a lint-only one
|
|
27
|
+
* apart would mean running it. When the scan root is outside every project,
|
|
28
|
+
* every child project is read. Op discovery always stops at child projects
|
|
29
|
+
* below its root.
|
|
30
|
+
* - The project's `exclude` globs (#2519) drop what they match, and its
|
|
31
|
+
* `include` globs re-admit what `exclude` or any rule above would skip.
|
|
32
|
+
* `node_modules`, `.git` and workspace members are the exceptions: include
|
|
33
|
+
* never re-admits them.
|
|
34
|
+
* - Workspace members and group matches leave the root project's walk
|
|
35
|
+
* (#2525 rule 3), and only when a workspace declaration exists. Without one nothing is loaded and
|
|
36
|
+
* nothing is excluded; see {@link workspaceMemberDirs}.
|
|
37
|
+
*
|
|
38
|
+
* The walk is synchronous: the audit walk it replaced was, and the glob and
|
|
39
|
+
* ignore facts are gathered once before it starts.
|
|
40
|
+
*/
|
|
41
|
+
import { execFileSync } from "node:child_process";
|
|
42
|
+
import { closeSync, existsSync, openSync, readdirSync, readSync, statSync } from "node:fs";
|
|
43
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
44
|
+
// @ts-ignore — picomatch has no types declaration
|
|
45
|
+
import picomatch from "picomatch";
|
|
46
|
+
import { findProjectConfig, findWorkspaceRoot } from "../project-root.js";
|
|
47
|
+
import { isLintOnlyFragment } from "../config.js";
|
|
48
|
+
/** Dot-directories the audit walk enters anyway, since they hold the CI files it audits. */
|
|
49
|
+
export const AUDIT_DOT_DIRS = new Set([".github", ".forgejo"]);
|
|
50
|
+
/** Directories no rule and no glob ever lets the walk into. */
|
|
51
|
+
const NEVER_ENTER = new Set(["node_modules", ".git"]);
|
|
52
|
+
/** Path parts below `home`, or undefined for `home` itself or a path outside it. */
|
|
53
|
+
function partsBelow(home, full) {
|
|
54
|
+
const rel = relative(home, resolve(full));
|
|
55
|
+
if (rel === "" || rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel))
|
|
56
|
+
return undefined;
|
|
57
|
+
return rel.split(sep);
|
|
58
|
+
}
|
|
59
|
+
function compileGlobs(globs) {
|
|
60
|
+
if (!globs || (globs.exclude.length === 0 && globs.include.length === 0))
|
|
61
|
+
return undefined;
|
|
62
|
+
const home = resolve(globs.root);
|
|
63
|
+
const matcher = (patterns) => {
|
|
64
|
+
if (patterns.length === 0)
|
|
65
|
+
return () => false;
|
|
66
|
+
const match = picomatch(patterns, { dot: true });
|
|
67
|
+
return (full) => {
|
|
68
|
+
const parts = partsBelow(home, full);
|
|
69
|
+
return parts !== undefined && parts.some((_, i) => match(parts.slice(0, i + 1).join("/")));
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
// The literal directory part of each include pattern: `.cache/keep/**`
|
|
73
|
+
// gives `.cache/keep`. The walk enters a skipped directory on the way to it.
|
|
74
|
+
const bases = globs.include.map((p) => picomatch.scan(p).base).filter((b) => b !== "");
|
|
75
|
+
return {
|
|
76
|
+
excluded: matcher(globs.exclude),
|
|
77
|
+
included: matcher(globs.include),
|
|
78
|
+
includeBelow: (full) => {
|
|
79
|
+
const parts = partsBelow(home, full);
|
|
80
|
+
if (parts === undefined)
|
|
81
|
+
return false;
|
|
82
|
+
const rel = parts.join("/");
|
|
83
|
+
return bases.some((b) => b.startsWith(`${rel}/`));
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// ── Git ──────────────────────────────────────────────────────────────────────
|
|
88
|
+
/**
|
|
89
|
+
* The untracked paths git ignores under `root`, absolute, with fully ignored
|
|
90
|
+
* directories listed once. One `git ls-files` call. A tree outside git, a
|
|
91
|
+
* missing `git`, or a root that is itself ignored yields an empty set: ignore
|
|
92
|
+
* rules are asked only about paths below the scan root.
|
|
93
|
+
*/
|
|
94
|
+
export function gitIgnoredBelow(root) {
|
|
95
|
+
let out;
|
|
96
|
+
try {
|
|
97
|
+
out = execFileSync("git", ["ls-files", "-z", "--others", "--ignored", "--exclude-standard", "--directory"], {
|
|
98
|
+
cwd: root,
|
|
99
|
+
encoding: "utf-8",
|
|
100
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
101
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return new Set();
|
|
106
|
+
}
|
|
107
|
+
const ignored = new Set();
|
|
108
|
+
const abs = resolve(root);
|
|
109
|
+
for (const entry of out.split("\0")) {
|
|
110
|
+
if (entry === "")
|
|
111
|
+
continue;
|
|
112
|
+
const rel = entry.endsWith("/") ? entry.slice(0, -1) : entry;
|
|
113
|
+
// `./` (or `.`): the scan root is itself ignored.
|
|
114
|
+
if (rel === "." || rel === "")
|
|
115
|
+
return new Set();
|
|
116
|
+
ignored.add(join(abs, rel));
|
|
117
|
+
}
|
|
118
|
+
return ignored;
|
|
119
|
+
}
|
|
120
|
+
// ── Boundaries ───────────────────────────────────────────────────────────────
|
|
121
|
+
/** A directory that holds a project config: `chant.config.ts`, or a `chant.config.json` that is not a lint-only fragment. */
|
|
122
|
+
export function isProjectBoundary(dir) {
|
|
123
|
+
if (existsSync(join(dir, "chant.config.ts")))
|
|
124
|
+
return true;
|
|
125
|
+
const json = join(dir, "chant.config.json");
|
|
126
|
+
return existsSync(json) && !isLintOnlyFragment(json);
|
|
127
|
+
}
|
|
128
|
+
/** Whether child projects end the walk from `root`: always for Ops, otherwise when `root` is inside a project. */
|
|
129
|
+
export function childProjectsAreBoundaries(walker, root) {
|
|
130
|
+
return walker === "ops" || findProjectConfig(root).configPath !== undefined;
|
|
131
|
+
}
|
|
132
|
+
// ── Workspace members ────────────────────────────────────────────────────────
|
|
133
|
+
/**
|
|
134
|
+
* The directories a workspace declaration moves out of the root project's
|
|
135
|
+
* discovery (#2525 rule 3), absolute and strictly below `root`, or none:
|
|
136
|
+
* every member's directory but the root's, and every group match
|
|
137
|
+
* (`rootExclusions` in `../workspace/declaration.ts`).
|
|
138
|
+
*
|
|
139
|
+
* Level 0 pays for `findWorkspaceRoot`, which only tests whether a
|
|
140
|
+
* `chant.workspace.json` or `.jsonc` exists from `root` up to the git root,
|
|
141
|
+
* and loads nothing. Only when a declaration is found are the workspace
|
|
142
|
+
* modules loaded to read it. A declaration that fails to read excludes
|
|
143
|
+
* nothing here; `chant workspace ls` is where its errors are reported. This
|
|
144
|
+
* is the only place discovery asks about workspaces; the walkers pass the
|
|
145
|
+
* result as `excludeDirs`.
|
|
146
|
+
*/
|
|
147
|
+
export async function workspaceMemberDirs(root) {
|
|
148
|
+
const found = findWorkspaceRoot(root);
|
|
149
|
+
if (!found)
|
|
150
|
+
return [];
|
|
151
|
+
const start = resolve(root);
|
|
152
|
+
const [{ readDeclaration, resolveGroups, rootExclusions }, { workingTree }] = await Promise.all([
|
|
153
|
+
import("../workspace/declaration.js"),
|
|
154
|
+
import("../workspace/tree.js"),
|
|
155
|
+
]);
|
|
156
|
+
let dirs;
|
|
157
|
+
try {
|
|
158
|
+
const tree = workingTree(found.dir);
|
|
159
|
+
const declaration = readDeclaration(tree);
|
|
160
|
+
dirs = rootExclusions(declaration, resolveGroups(declaration, tree)).map((e) => resolve(found.dir, e.dir));
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
return dirs.filter((d) => partsBelow(start, d) !== undefined);
|
|
166
|
+
}
|
|
167
|
+
// ── Markers ──────────────────────────────────────────────────────────────────
|
|
168
|
+
/** The first `bytes` of a file as UTF-8, or "" when it can't be read. */
|
|
169
|
+
export function readHead(file, bytes) {
|
|
170
|
+
let fd;
|
|
171
|
+
try {
|
|
172
|
+
fd = openSync(file, "r");
|
|
173
|
+
const buf = Buffer.alloc(bytes);
|
|
174
|
+
const n = readSync(fd, buf, 0, bytes, 0);
|
|
175
|
+
return buf.toString("utf8", 0, n);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return "";
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
if (fd !== undefined)
|
|
182
|
+
closeSync(fd);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// ── The walk ─────────────────────────────────────────────────────────────────
|
|
186
|
+
/** Walk `opts.root` under the rules in the module doc and return the files `accept` took. */
|
|
187
|
+
export function walkDiscovery(opts) {
|
|
188
|
+
const out = [];
|
|
189
|
+
const globs = compileGlobs(opts.globs);
|
|
190
|
+
const ignored = gitIgnoredBelow(opts.root);
|
|
191
|
+
const boundaries = childProjectsAreBoundaries(opts.walker, opts.root);
|
|
192
|
+
const excludeDirs = new Set((opts.excludeDirs ?? []).map((d) => resolve(d)));
|
|
193
|
+
const dotDirsKept = opts.walker === "audit" ? AUDIT_DOT_DIRS : new Set();
|
|
194
|
+
const limit = opts.limit;
|
|
195
|
+
const isIgnored = (full) => ignored.size > 0 && ignored.has(resolve(full));
|
|
196
|
+
/** Take a path; false once the limit is reached. */
|
|
197
|
+
const take = (full) => {
|
|
198
|
+
if (limit && out.length >= limit.max) {
|
|
199
|
+
limit.truncated = true;
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
out.push(full);
|
|
203
|
+
return true;
|
|
204
|
+
};
|
|
205
|
+
const kind = (dir, e) => {
|
|
206
|
+
if (e.isDirectory())
|
|
207
|
+
return "dir";
|
|
208
|
+
if (e.isFile())
|
|
209
|
+
return "file";
|
|
210
|
+
if (opts.followSymlinks && e.isSymbolicLink()) {
|
|
211
|
+
try {
|
|
212
|
+
const s = statSync(join(dir, e.name));
|
|
213
|
+
return s.isDirectory() ? "dir" : s.isFile() ? "file" : undefined;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return undefined;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Walk `dir`. `probing` is true below a directory a rule skipped that the
|
|
223
|
+
* walk entered only because an `include` pattern names something inside
|
|
224
|
+
* it: there, only what `include` matches is taken.
|
|
225
|
+
*/
|
|
226
|
+
const walk = (dir, probing) => {
|
|
227
|
+
let entries;
|
|
228
|
+
try {
|
|
229
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
if (opts.sorted)
|
|
235
|
+
entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
|
|
236
|
+
for (const e of entries) {
|
|
237
|
+
if (limit?.truncated)
|
|
238
|
+
return false;
|
|
239
|
+
const full = join(dir, e.name);
|
|
240
|
+
const type = kind(dir, e);
|
|
241
|
+
if (type === "dir") {
|
|
242
|
+
if (NEVER_ENTER.has(e.name) || excludeDirs.has(resolve(full)))
|
|
243
|
+
continue;
|
|
244
|
+
const dotSkip = e.name.startsWith(".") && !dotDirsKept.has(e.name);
|
|
245
|
+
if (dotSkip && opts.takeSkippedDir?.(e.name, full)) {
|
|
246
|
+
if (!take(full))
|
|
247
|
+
return false;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const ruleSkip = dotSkip ||
|
|
251
|
+
e.name === "dist" ||
|
|
252
|
+
(isIgnored(full) && !opts.keepIgnored?.(full)) ||
|
|
253
|
+
(boundaries && isProjectBoundary(full));
|
|
254
|
+
if (ruleSkip || probing) {
|
|
255
|
+
if (globs?.included(full)) {
|
|
256
|
+
if (!walk(full, false))
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
else if (globs?.includeBelow(full)) {
|
|
260
|
+
if (!walk(full, true))
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
if (!walk(full, false))
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
else if (type === "file") {
|
|
269
|
+
const skipped = probing ||
|
|
270
|
+
(isIgnored(full) && !opts.keepIgnored?.(full)) ||
|
|
271
|
+
(globs?.excluded(full) ?? false);
|
|
272
|
+
if (skipped && !globs?.included(full))
|
|
273
|
+
continue;
|
|
274
|
+
if (!opts.accept(e.name, full))
|
|
275
|
+
continue;
|
|
276
|
+
if (!take(full))
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return true;
|
|
281
|
+
};
|
|
282
|
+
walk(opts.root, false);
|
|
283
|
+
return out;
|
|
284
|
+
}
|