@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,214 @@
|
|
|
1
|
+
import * as esbuild from "esbuild";
|
|
2
|
+
import { existsSync, mkdtempSync, readFileSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { dirname, join, resolve as resolvePath } from "node:path";
|
|
6
|
+
/**
|
|
7
|
+
* chant #1045 Phase 2 — bundles the generated sandbox driver (`./driver.ts`)
|
|
8
|
+
* into one self-contained ESM file with esbuild, so the sandboxed child never
|
|
9
|
+
* needs to resolve a module from disk at runtime (see `./driver.ts`'s doc for
|
|
10
|
+
* why that's what lets the permission allowlist stay this narrow).
|
|
11
|
+
*
|
|
12
|
+
* A fresh temp directory per call — not a shared cache directory — keeps
|
|
13
|
+
* concurrent builds (nested stacks, parallel test workers) from racing on the
|
|
14
|
+
* same output path; callers are responsible for cleaning it up (`./run.ts`
|
|
15
|
+
* does, in a `finally`) once the child has reported back.
|
|
16
|
+
*/
|
|
17
|
+
const HERE = import.meta.dirname;
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
/**
|
|
20
|
+
* Packages that must NOT be bundled — see {@link resolveExternalPackages}'s
|
|
21
|
+
* doc for why. Every lexicon that ships a lint rule doing AST-based analysis
|
|
22
|
+
* (`aws`, `azure`, `fly`, `gcp`, `github`, `gitlab`, `helm`, `k8s` all do)
|
|
23
|
+
* imports `typescript` at the top of that rule module, and lexicon plugin
|
|
24
|
+
* objects re-export their lint rules eagerly — so bundling ANY run-fallback
|
|
25
|
+
* file that imports a lexicon package pulls `typescript` in transitively,
|
|
26
|
+
* every time, not just for the rare file that uses the compiler itself.
|
|
27
|
+
*
|
|
28
|
+
* `@cdktn/hcl2json` is here for the same reason and by a longer road. It is
|
|
29
|
+
* an OPTIONAL dependency — `../../terraform/hcl2json.ts` reaches it through
|
|
30
|
+
* `await import(...)` and turns a missing module into an actionable "npm
|
|
31
|
+
* install -D @cdktn/hcl2json" — but esbuild follows a dynamic import as
|
|
32
|
+
* eagerly as a static one, and the package ships a Go `wasm_exec` shim whose
|
|
33
|
+
* `performance` reference does not resolve under `platform: "node"`. So a
|
|
34
|
+
* bundle that merely *reaches* the carve commands fails outright. Reaching
|
|
35
|
+
* them is easy: the fountain lexicon's ACP server dynamically imports
|
|
36
|
+
* `cli/main` to resolve a prompt against chant's verb registry (chant #2125),
|
|
37
|
+
* so every project that imports `@intentius/chant-lexicon-fountain` and needs
|
|
38
|
+
* the run fallback — a `Steward` declaration does, since a composite call
|
|
39
|
+
* cannot fold — pulled the whole CLI, and carve with it, into its sandbox
|
|
40
|
+
* bundle (chant #2129).
|
|
41
|
+
*/
|
|
42
|
+
const EXTERNAL_PACKAGES = ["typescript", "@cdktn/hcl2json"];
|
|
43
|
+
/**
|
|
44
|
+
* Resolve each of {@link EXTERNAL_PACKAGES} to its real, absolute path on
|
|
45
|
+
* disk (from THIS file's own location — the same package.json dependency
|
|
46
|
+
* chant's own `fold-import.ts` already resolves "typescript" through) and
|
|
47
|
+
* return an esbuild plugin that rewrites any import of that bare specifier
|
|
48
|
+
* to the resolved absolute path, marked external.
|
|
49
|
+
*
|
|
50
|
+
* Why external at all: `typescript` is itself a large, over-eager CJS
|
|
51
|
+
* package — its own internal `getNodeSystem()`-style helpers call
|
|
52
|
+
* `require("fs")`/`require("path")` from deep inside factory functions, not
|
|
53
|
+
* from top-level imports esbuild can safely rewrite. Bundled into ESM
|
|
54
|
+
* output, that nested `require` has no real binding and esbuild's shim
|
|
55
|
+
* throws `Dynamic require of "fs" is not supported` — a build that just
|
|
56
|
+
* transitively imports `typescript` never even gets to execute the run-
|
|
57
|
+
* fallback file it was meant for. Left external and resolved to an absolute
|
|
58
|
+
* path, Node loads the REAL `typescript` package directly (no bare-specifier
|
|
59
|
+
* `node_modules` walk needed, so no broader `--allow-fs-read` grant beyond
|
|
60
|
+
* that one resolved path — see `./run.ts`), with its own native `require`
|
|
61
|
+
* intact — no interop shim, no problem.
|
|
62
|
+
*
|
|
63
|
+
* `typescript` is trusted, chant-shipped infrastructure (a dependency of
|
|
64
|
+
* chant itself and every lexicon that lints), never something project
|
|
65
|
+
* source controls the content of, so resolving and exposing it this way
|
|
66
|
+
* doesn't weaken the boundary around untrusted project code.
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* chant #1020 hang fix — process-wide memo for resolving {@link
|
|
70
|
+
* EXTERNAL_PACKAGES} from {@link HERE}. Both are fixed constants (this
|
|
71
|
+
* file's own location, and a hardcoded package list) — the answer can never
|
|
72
|
+
* change for the lifetime of the process, so caching it is exactly as safe
|
|
73
|
+
* as Node's own assumption that a running process's `node_modules` doesn't
|
|
74
|
+
* shift under it. `require.resolve(name, { paths: [HERE] })` is ordinarily
|
|
75
|
+
* cheap, but profiling traced it to the same pathological slowness (upwards
|
|
76
|
+
* of a minute) as `../fold-import.ts`'s `resolveModulePath` — see that
|
|
77
|
+
* file's `bareSpecifierPathCache` doc for the full mechanism: this is the
|
|
78
|
+
* SAME underlying cost (`createRequire`/`require.resolve`'s bare-specifier
|
|
79
|
+
* branch, first call inside a session started right after vitest's
|
|
80
|
+
* `vi.resetModules()`), just reached via `bundleDriver()` (called once per
|
|
81
|
+
* `runFallbackFilesSandboxed()`) instead of a cross-file fold resolution.
|
|
82
|
+
*
|
|
83
|
+
* Parked on `globalThis`, not a plain module-level `const`: unlike
|
|
84
|
+
* `fold-import.ts` (reached only via a STATIC import chain from the test
|
|
85
|
+
* file's own top-level import, so vite-node never re-evaluates it),
|
|
86
|
+
* `./bundle.ts` is reached only through `./run.ts`'s dynamic
|
|
87
|
+
* `await import("./sandbox/run")` (deliberately dynamic — see that file's
|
|
88
|
+
* own doc on why). `vi.resetModules()` DOES re-evaluate a module reached
|
|
89
|
+
* only dynamically, which would re-run this file's whole top level and
|
|
90
|
+
* silently replace a plain module-level cache with a fresh, empty `Map` on
|
|
91
|
+
* every retry — measured to happen intermittently (which call site hits the
|
|
92
|
+
* slow, uncached path first varies run to run), reproducing the exact same
|
|
93
|
+
* multi-minute stall this fix exists to remove. A `globalThis` slot is
|
|
94
|
+
* outside any module's own scope, so it survives being re-evaluated.
|
|
95
|
+
*/
|
|
96
|
+
function getExternalPackagePathCache() {
|
|
97
|
+
const g = globalThis;
|
|
98
|
+
return (g.__chantExternalPackagePathCache ?? (g.__chantExternalPackagePathCache = new Map()));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* chant #1020 hang fix — best-effort fast path mirroring
|
|
102
|
+
* `../fold-import.ts`'s `fastResolveBareSpecifier` (see its own doc for the
|
|
103
|
+
* full mechanism and why this is faster than `require.resolve` at all):
|
|
104
|
+
* walks `node_modules` from `fromDir` with plain `existsSync`/`readFileSync`
|
|
105
|
+
* and reads `package.json`'s "main" field by hand (`typescript` ships no
|
|
106
|
+
* "exports" field, just "main" — verified), never throwing. Returns
|
|
107
|
+
* `undefined` for anything it doesn't confidently recognize, so the caller
|
|
108
|
+
* falls back to the slow-but-authoritative `require.resolve`.
|
|
109
|
+
*/
|
|
110
|
+
function fastResolvePackage(specifier, fromDir) {
|
|
111
|
+
let dir = fromDir;
|
|
112
|
+
for (;;) {
|
|
113
|
+
const packageDir = join(dir, "node_modules", specifier);
|
|
114
|
+
if (existsSync(packageDir)) {
|
|
115
|
+
const pkgJsonPath = join(packageDir, "package.json");
|
|
116
|
+
if (!existsSync(pkgJsonPath))
|
|
117
|
+
return undefined;
|
|
118
|
+
let pkg;
|
|
119
|
+
try {
|
|
120
|
+
pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
if (typeof pkg !== "object" || pkg === null || pkg.exports !== undefined) {
|
|
126
|
+
return undefined; // has an "exports" field — not the simple shape this fast path handles
|
|
127
|
+
}
|
|
128
|
+
const main = pkg.main;
|
|
129
|
+
const entry = typeof main === "string" ? main : "index.js";
|
|
130
|
+
const resolved = resolvePath(packageDir, entry);
|
|
131
|
+
if (!existsSync(resolved) || !statSync(resolved).isFile())
|
|
132
|
+
return undefined;
|
|
133
|
+
try {
|
|
134
|
+
return realpathSync(resolved);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const parent = dirname(dir);
|
|
141
|
+
if (parent === dir)
|
|
142
|
+
return undefined;
|
|
143
|
+
dir = parent;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function externalTrustedPackagesPlugin() {
|
|
147
|
+
const readPaths = [];
|
|
148
|
+
const resolved = new Map();
|
|
149
|
+
const pathCache = getExternalPackagePathCache();
|
|
150
|
+
for (const name of EXTERNAL_PACKAGES) {
|
|
151
|
+
try {
|
|
152
|
+
let path = pathCache.get(name);
|
|
153
|
+
if (path === undefined && !pathCache.has(name)) {
|
|
154
|
+
// chant #1020 hang fix — try the same fast, plain-fs node_modules
|
|
155
|
+
// walk `../fold-import.ts`'s `fastResolveBareSpecifier` uses before
|
|
156
|
+
// falling back to `require.resolve`'s pathologically-slow-when-cold
|
|
157
|
+
// path (see this file's own `getExternalPackagePathCache` doc).
|
|
158
|
+
path = fastResolvePackage(name, HERE) ?? require.resolve(name, { paths: [HERE] });
|
|
159
|
+
pathCache.set(name, path);
|
|
160
|
+
}
|
|
161
|
+
if (path === undefined)
|
|
162
|
+
continue; // cached miss — see the catch below
|
|
163
|
+
resolved.set(name, path);
|
|
164
|
+
readPaths.push(dirname(path));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
pathCache.set(name, undefined);
|
|
168
|
+
// Not installed/resolvable from here — nothing to externalize; a run-
|
|
169
|
+
// fallback file that imports it will simply fail to resolve inside the
|
|
170
|
+
// sandbox, same as any other genuinely missing dependency would.
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const plugin = {
|
|
174
|
+
name: "chant-sandbox-external-trusted-packages",
|
|
175
|
+
setup(build) {
|
|
176
|
+
for (const [name, path] of resolved) {
|
|
177
|
+
const filter = new RegExp(`^${name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}$`);
|
|
178
|
+
build.onResolve({ filter }, () => ({ path, external: true }));
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
return { plugin, readPaths };
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Bundle `driverSource` (see {@link import("./driver.js").generateDriverSource})
|
|
186
|
+
* into a single self-contained ESM file.
|
|
187
|
+
*/
|
|
188
|
+
export async function bundleDriver(driverSource) {
|
|
189
|
+
const bundleDir = realpathSync(mkdtempSync(join(tmpdir(), "chant-sandbox-")));
|
|
190
|
+
const entryPath = join(bundleDir, "driver.mts");
|
|
191
|
+
writeFileSync(entryPath, driverSource, "utf-8");
|
|
192
|
+
const outfile = join(bundleDir, "child.mjs");
|
|
193
|
+
const { plugin, readPaths } = externalTrustedPackagesPlugin();
|
|
194
|
+
const start = performance.now();
|
|
195
|
+
try {
|
|
196
|
+
await esbuild.build({
|
|
197
|
+
entryPoints: [entryPath],
|
|
198
|
+
outfile,
|
|
199
|
+
bundle: true,
|
|
200
|
+
platform: "node",
|
|
201
|
+
format: "esm",
|
|
202
|
+
absWorkingDir: bundleDir,
|
|
203
|
+
logLevel: "silent",
|
|
204
|
+
plugins: [plugin],
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
rmSync(bundleDir, { recursive: true, force: true });
|
|
209
|
+
throw err;
|
|
210
|
+
}
|
|
211
|
+
const durationMs = performance.now() - start;
|
|
212
|
+
const bytes = statSync(outfile).size;
|
|
213
|
+
return { bundlePath: outfile, bundleDir, externalReadPaths: readPaths, durationMs, bytes };
|
|
214
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DiscoveryError } from "../../errors.js";
|
|
2
|
+
function isPermissionDenied(err) {
|
|
3
|
+
return typeof err === "object" && err !== null && err.code === "ERR_ACCESS_DENIED";
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Classify one error raised while executing run-fallback project source (or
|
|
7
|
+
* chant's own collect/resolve/encode step) inside the sandboxed child.
|
|
8
|
+
*
|
|
9
|
+
* @param file - The project source file being executed when `err` was
|
|
10
|
+
* thrown, or `""` for an error not attributable to one specific file (e.g.
|
|
11
|
+
* `collectEntities`/`resolveAttrRefs` over the whole batch).
|
|
12
|
+
* @param fallbackType - The {@link DiscoveryErrorType} to use when `err`
|
|
13
|
+
* isn't a permission denial — mirrors how `discover()` itself types a
|
|
14
|
+
* plain import failure `"import"` vs. a collection/resolution failure
|
|
15
|
+
* `"resolution"`.
|
|
16
|
+
*/
|
|
17
|
+
export function classifyChildError(file, err, fallbackType = "import") {
|
|
18
|
+
if (isPermissionDenied(err)) {
|
|
19
|
+
const operation = typeof err.permission === "string" ? err.permission : "an unrecognized sandboxed operation";
|
|
20
|
+
const resource = typeof err.resource === "string" ? ` (${err.resource})` : "";
|
|
21
|
+
const where = file ? `"${file}"` : "sandboxed run-fallback code";
|
|
22
|
+
return new DiscoveryError(file, `sandbox denied ${operation}${resource}: ${where} attempted an operation outside the sandbox's allowlist`, "permission");
|
|
23
|
+
}
|
|
24
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
25
|
+
return new DiscoveryError(file, message, fallbackType);
|
|
26
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { realpathSync, rmSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { bundleDriver } from "./bundle.js";
|
|
4
|
+
import { generateConfigDriverSource } from "./driver.js";
|
|
5
|
+
import { formatConfigWireOffenders } from "./config-wire.js";
|
|
6
|
+
import { forkSandboxed } from "./fork.js";
|
|
7
|
+
import { ENV_VAR } from "../../env.js";
|
|
8
|
+
/**
|
|
9
|
+
* chant #1113 — evaluates a project's `chant.config.ts` inside the same
|
|
10
|
+
* sandboxed child `--sandbox` already uses for run-fallback source, and brings
|
|
11
|
+
* back plain JSON.
|
|
12
|
+
*
|
|
13
|
+
* This closes the residual chant #1093 documented and #1113 filed: `loadConfig`
|
|
14
|
+
* imported the project's own `chant.config.ts` into the CLI process, so a
|
|
15
|
+
* hostile repo's config executed with full CLI trust even under `--sandbox`.
|
|
16
|
+
* The config is project-authored code like any other file in the repo; the
|
|
17
|
+
* only reason it was ever treated differently is that the CLI has to read it
|
|
18
|
+
* before it knows anything else about the project.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately the same machinery, not a parallel one:
|
|
21
|
+
* - `./bundle.ts` bundles the generated driver (`./driver.ts`'s
|
|
22
|
+
* `generateConfigDriverSource`) with esbuild, so the child needs no runtime
|
|
23
|
+
* module resolution and no TypeScript loader.
|
|
24
|
+
* - `./fork.ts` spawns it with the identical `--permission` profile
|
|
25
|
+
* `runFallbackFilesSandboxed` uses — one function, so the two cannot drift.
|
|
26
|
+
* - `./child-errors.ts` classifies whatever it throws, so a permission denial
|
|
27
|
+
* names the config file instead of leaking `ERR_ACCESS_DENIED`.
|
|
28
|
+
*
|
|
29
|
+
* The one deliberate difference from the run-fallback child is `CHANT_ENV`.
|
|
30
|
+
* `../../cli/main.ts` sets it from `--env` *before* loading the config,
|
|
31
|
+
* specifically because a config may branch on the environment; dropping it
|
|
32
|
+
* would silently produce a different configuration under `--sandbox` than
|
|
33
|
+
* without. It is a value the user typed on the command line, not an ambient
|
|
34
|
+
* secret, so forwarding exactly that one key — and nothing else from
|
|
35
|
+
* `process.env` — keeps the scrub meaningful while keeping `--env` honest.
|
|
36
|
+
*/
|
|
37
|
+
/** How long to wait for the config child. A config is one small module; anything approaching this is hung, not slow. */
|
|
38
|
+
const CONFIG_CHILD_TIMEOUT_MS = 60000;
|
|
39
|
+
function isConfigChildResponse(value) {
|
|
40
|
+
return (typeof value === "object" &&
|
|
41
|
+
value !== null &&
|
|
42
|
+
value.kind === "chant-config" &&
|
|
43
|
+
typeof value.ok === "boolean");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Evaluate `configPath` in a sandboxed child and return its configuration as
|
|
47
|
+
* plain data.
|
|
48
|
+
*
|
|
49
|
+
* Throws — rather than degrading to an in-process import or to defaults — when
|
|
50
|
+
* the config cannot be evaluated inside the boundary or cannot cross it as
|
|
51
|
+
* JSON. Under `--sandbox` a config that "almost" loaded is not a safe thing to
|
|
52
|
+
* proceed with, and quietly falling back would give away the property the flag
|
|
53
|
+
* exists to provide.
|
|
54
|
+
*
|
|
55
|
+
* @param configPath - Absolute path to the project's `chant.config.ts`.
|
|
56
|
+
* @param projectRoot - Directory the child is granted `--allow-fs-read` for
|
|
57
|
+
* (the config's own project root, i.e. `findProjectConfig`'s `dir`).
|
|
58
|
+
*/
|
|
59
|
+
export async function evaluateConfigSandboxed(configPath, projectRoot) {
|
|
60
|
+
const driverSource = generateConfigDriverSource(configPath);
|
|
61
|
+
const { bundlePath, bundleDir, externalReadPaths, durationMs, bytes } = await bundleDriver(driverSource);
|
|
62
|
+
try {
|
|
63
|
+
let projectRealpath;
|
|
64
|
+
try {
|
|
65
|
+
projectRealpath = realpathSync(resolve(projectRoot));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
projectRealpath = resolve(projectRoot);
|
|
69
|
+
}
|
|
70
|
+
const env = { PATH: process.env.PATH ?? "" };
|
|
71
|
+
// See the module doc: the one forwarded variable, and only when set.
|
|
72
|
+
const activeEnv = process.env[ENV_VAR];
|
|
73
|
+
if (activeEnv)
|
|
74
|
+
env[ENV_VAR] = activeEnv;
|
|
75
|
+
const response = await forkSandboxed({
|
|
76
|
+
bundlePath,
|
|
77
|
+
bundleDir,
|
|
78
|
+
projectRealpath,
|
|
79
|
+
externalReadPaths,
|
|
80
|
+
env,
|
|
81
|
+
timeoutMs: CONFIG_CHILD_TIMEOUT_MS,
|
|
82
|
+
label: `sandboxed evaluation of ${configPath}`,
|
|
83
|
+
// chant #1148 — the config's own console.log/error no longer goes
|
|
84
|
+
// nowhere; see `./fork.ts`'s `outputPrefix` doc.
|
|
85
|
+
outputPrefix: "[sandbox:config]",
|
|
86
|
+
}, isConfigChildResponse);
|
|
87
|
+
if (!response.ok) {
|
|
88
|
+
if (response.offenders && response.offenders.length > 0) {
|
|
89
|
+
throw new Error(formatConfigWireOffenders(configPath, response.offenders));
|
|
90
|
+
}
|
|
91
|
+
throw new Error(response.error?.message
|
|
92
|
+
? `Failed to evaluate ${configPath} inside the --sandbox boundary: ${response.error.message}`
|
|
93
|
+
: `Failed to evaluate ${configPath} inside the --sandbox boundary`);
|
|
94
|
+
}
|
|
95
|
+
return { config: response.config ?? {}, bundleMs: durationMs, bundleBytes: bytes };
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
rmSync(bundleDir, { recursive: true, force: true });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chant #1113 — what a `chant.config.ts` may contain if it is to be evaluated
|
|
3
|
+
* inside the sandbox boundary and handed back to the CLI as data.
|
|
4
|
+
*
|
|
5
|
+
* Under `--sandbox` the config file is evaluated in a child process (see
|
|
6
|
+
* `./config-run.ts`), so the only thing that can come back is what survives a
|
|
7
|
+
* process boundary: JSON. Node's IPC channel serializes with `JSON.stringify`
|
|
8
|
+
* by default, and `JSON.stringify` is *lossy without complaining* — a function
|
|
9
|
+
* property vanishes, a `Date` becomes a string, a `Map` becomes `{}`, `NaN`
|
|
10
|
+
* becomes `null`. Silently handing the CLI a config that differs from the one
|
|
11
|
+
* the project wrote is the worst available outcome for a security feature, so
|
|
12
|
+
* this module walks the value FIRST and reports every offending key path.
|
|
13
|
+
* `./config-run.ts` turns a non-empty report into a build error that names the
|
|
14
|
+
* keys; nothing is ever dropped quietly.
|
|
15
|
+
*
|
|
16
|
+
* This module is bundled INTO the generated config driver (`./driver.ts`'s
|
|
17
|
+
* `generateConfigDriverSource`) and runs inside the sandboxed child, next to
|
|
18
|
+
* the project code it is inspecting — so it must not import anything, and must
|
|
19
|
+
* not touch the filesystem, the environment or the process.
|
|
20
|
+
*
|
|
21
|
+
* chant #1131 reuses the same walk for the OTHER direction: a `lint.policies`
|
|
22
|
+
* check runs inside a sandboxed child and its `PostSynthDiagnostic[]` has to
|
|
23
|
+
* come back as data (`./policy-wire.ts`). That is the same "JSON is lossy
|
|
24
|
+
* without complaining" problem with a different root value, so the walk is
|
|
25
|
+
* exported as {@link scanValueWireSafety} rather than copied.
|
|
26
|
+
*
|
|
27
|
+
* ## What `ChantConfig` legally holds
|
|
28
|
+
*
|
|
29
|
+
* Every field of `ChantConfig` (`../../config.ts`) is JSON data: string arrays
|
|
30
|
+
* (`lexicons`, `capabilities`), strings (`sourceDir`), an array of strings or
|
|
31
|
+
* plain `{ name, endpoint }` objects (`environments`, #1166), nested plain
|
|
32
|
+
* objects of strings/booleans (`ownership`, `build`, `release`, `sbom`,
|
|
33
|
+
* `signing`, `vulnPolicy`), arrays of plain objects (`stacks`), and records of
|
|
34
|
+
* plain objects (`buildParams`). `lint` is a `LintConfig`, whose rule values
|
|
35
|
+
* are a severity string or a `[severity, options]` tuple, and whose `plugins`
|
|
36
|
+
* / `policies` are file *paths* — chant loads those modules itself, they are
|
|
37
|
+
* not functions embedded in the config. So the declared type admits nothing
|
|
38
|
+
* that fails the check below.
|
|
39
|
+
*
|
|
40
|
+
* The one way to get there is `ChantConfigSchema`'s `.passthrough()`, which
|
|
41
|
+
* accepts unknown extra keys of any type (that is how a lexicon extends the
|
|
42
|
+
* config — a lexicon's own namespace key, itself pure data). A project that
|
|
43
|
+
* parks a function under such a key gets a clear
|
|
44
|
+
* error naming it, rather than a config that silently lost it.
|
|
45
|
+
*
|
|
46
|
+
* ## The one accepted lossy case: `undefined` object properties
|
|
47
|
+
*
|
|
48
|
+
* `{ sourceDir: undefined }` and `{}` are indistinguishable to every reader of
|
|
49
|
+
* `ChantConfig` — each field is optional and every resolver tests
|
|
50
|
+
* `config.x === undefined` / `?.` — so an `undefined`-valued property is
|
|
51
|
+
* dropped rather than rejected, exactly as omitting the key would be. An
|
|
52
|
+
* `undefined` inside an ARRAY is a different story (`JSON.stringify` rewrites
|
|
53
|
+
* it to `null`, changing the element), and is reported.
|
|
54
|
+
*/
|
|
55
|
+
/** Deepest nesting `scanConfigWireSafety` will walk before reporting the path as too deep (also the cycle backstop for exotic self-referential structures). */
|
|
56
|
+
const MAX_DEPTH = 64;
|
|
57
|
+
function describe(value) {
|
|
58
|
+
const t = typeof value;
|
|
59
|
+
if (t === "function")
|
|
60
|
+
return "a function";
|
|
61
|
+
if (t === "symbol")
|
|
62
|
+
return "a symbol";
|
|
63
|
+
if (t === "bigint")
|
|
64
|
+
return "a bigint";
|
|
65
|
+
if (t === "number")
|
|
66
|
+
return Number.isNaN(value) ? "NaN" : "a non-finite number";
|
|
67
|
+
if (value instanceof Date)
|
|
68
|
+
return "a Date";
|
|
69
|
+
if (value instanceof RegExp)
|
|
70
|
+
return "a RegExp";
|
|
71
|
+
if (value instanceof Map)
|
|
72
|
+
return "a Map";
|
|
73
|
+
if (value instanceof Set)
|
|
74
|
+
return "a Set";
|
|
75
|
+
if (value instanceof Promise)
|
|
76
|
+
return "a Promise";
|
|
77
|
+
if (value instanceof Error)
|
|
78
|
+
return "an Error";
|
|
79
|
+
const ctor = value?.constructor?.name;
|
|
80
|
+
return typeof ctor === "string" && ctor !== "Object" ? `a ${ctor} instance` : "a non-plain object";
|
|
81
|
+
}
|
|
82
|
+
/** A plain object literal (or a null-prototype object) — anything else with `typeof "object"` is a class instance chant refuses to guess at. */
|
|
83
|
+
function isPlainObject(value) {
|
|
84
|
+
const proto = Object.getPrototypeOf(value);
|
|
85
|
+
return proto === Object.prototype || proto === null;
|
|
86
|
+
}
|
|
87
|
+
function walk(value, path, depth, seen, out) {
|
|
88
|
+
if (value === null)
|
|
89
|
+
return;
|
|
90
|
+
const t = typeof value;
|
|
91
|
+
if (t === "string" || t === "boolean")
|
|
92
|
+
return;
|
|
93
|
+
if (t === "number") {
|
|
94
|
+
if (!Number.isFinite(value))
|
|
95
|
+
out.push({ path, found: describe(value) });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (t === "function" || t === "symbol" || t === "bigint" || t === "undefined") {
|
|
99
|
+
// `undefined` reaches here only from an array slot — an object property
|
|
100
|
+
// holding `undefined` is skipped by the caller (see the module doc).
|
|
101
|
+
out.push({ path, found: t === "undefined" ? "undefined" : describe(value) });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const obj = value;
|
|
105
|
+
if (seen.has(obj)) {
|
|
106
|
+
out.push({ path, found: "a circular reference" });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (depth > MAX_DEPTH) {
|
|
110
|
+
out.push({ path, found: `nested more than ${MAX_DEPTH} levels deep` });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (Array.isArray(obj)) {
|
|
114
|
+
seen.add(obj);
|
|
115
|
+
for (let i = 0; i < obj.length; i++)
|
|
116
|
+
walk(obj[i], `${path}[${i}]`, depth + 1, seen, out);
|
|
117
|
+
seen.delete(obj);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (!isPlainObject(obj)) {
|
|
121
|
+
out.push({ path, found: describe(obj) });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
seen.add(obj);
|
|
125
|
+
for (const key of Object.keys(obj)) {
|
|
126
|
+
const child = obj[key];
|
|
127
|
+
if (child === undefined)
|
|
128
|
+
continue; // dropped, equivalent to omitting the key — see the module doc
|
|
129
|
+
const childPath = path ? `${path}.${key}` : key;
|
|
130
|
+
walk(child, childPath, depth + 1, seen, out);
|
|
131
|
+
}
|
|
132
|
+
seen.delete(obj);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* chant #1131 — report every value ANYWHERE in `value` that cannot cross the
|
|
136
|
+
* sandbox boundary as JSON, with paths rooted at `rootPath`.
|
|
137
|
+
*
|
|
138
|
+
* {@link scanConfigWireSafety} is the config-shaped entry point (it tolerates a
|
|
139
|
+
* module namespace object at the root); this one takes the value as given, so
|
|
140
|
+
* an array root (`diagnostics`) or a plain object root both work. Same rules,
|
|
141
|
+
* same `undefined`-object-property allowance — see the module doc.
|
|
142
|
+
*/
|
|
143
|
+
export function scanValueWireSafety(value, rootPath = "") {
|
|
144
|
+
const out = [];
|
|
145
|
+
walk(value, rootPath, 0, new Set(), out);
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Report every value in `config` that cannot cross the sandbox boundary as
|
|
150
|
+
* JSON. An empty array means a `JSON.parse(JSON.stringify(config))` round-trip
|
|
151
|
+
* preserves the configuration exactly (modulo `undefined` object properties,
|
|
152
|
+
* which are dropped — see the module doc).
|
|
153
|
+
*
|
|
154
|
+
* `config` itself may be a module namespace object (`await import(...)` with
|
|
155
|
+
* no `default` export), which is not a plain object; its own enumerable keys
|
|
156
|
+
* are walked the same way rather than being reported wholesale.
|
|
157
|
+
*/
|
|
158
|
+
export function scanConfigWireSafety(config) {
|
|
159
|
+
const out = [];
|
|
160
|
+
if (config === null || typeof config !== "object") {
|
|
161
|
+
// A non-object config is what `normalizeConfig` already rejects in the
|
|
162
|
+
// parent; nothing to say about serializability.
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
165
|
+
const seen = new Set();
|
|
166
|
+
seen.add(config);
|
|
167
|
+
for (const key of Object.keys(config)) {
|
|
168
|
+
const child = config[key];
|
|
169
|
+
if (child === undefined)
|
|
170
|
+
continue;
|
|
171
|
+
walk(child, key, 1, seen, out);
|
|
172
|
+
}
|
|
173
|
+
return out;
|
|
174
|
+
}
|
|
175
|
+
/** Render a {@link ConfigWireOffender} list as the body of a build error — one line per offending key, most specific information first. */
|
|
176
|
+
export function formatConfigWireOffenders(configPath, offenders) {
|
|
177
|
+
const lines = offenders.map((o) => ` ${o.path || "<root>"}: ${o.found}`);
|
|
178
|
+
return [
|
|
179
|
+
`Cannot evaluate ${configPath} inside the --sandbox boundary: it holds values that are not data.`,
|
|
180
|
+
...lines,
|
|
181
|
+
`Under --sandbox the config is evaluated in an isolated child process and only JSON crosses back, so every value must be a string, number, boolean, null, array or plain object. Move the offending value out of chant.config.ts (lint rule plugins and policy checks are referenced by path, not embedded), or drop --sandbox for this build.`,
|
|
182
|
+
].join("\n");
|
|
183
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/discovery/sandbox/driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/discovery/sandbox/driver.ts"],"names":[],"mappings":"AA8DA,MAAM,WAAW,qBAAqB;IACpC,qIAAqI;IACrI,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,oNAAoN;IACpN,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,EAAE,CAsB3E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAoH3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA6CrE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAgGjF"}
|