@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,139 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import { resolveBuildParams } from "../build-params.js";
|
|
4
|
+
import { formatError, formatInfo } from "./format.js";
|
|
5
|
+
/**
|
|
6
|
+
* Shared CLI-layer wiring for chant #1064's build-time parameters, factored
|
|
7
|
+
* out (chant #1108) so every command that discovers project source before
|
|
8
|
+
* running it resolves `chant.config.ts`'s declared `buildParams` the exact
|
|
9
|
+
* same way: `chant build` (`../commands/build.ts`'s `buildCommand`), the
|
|
10
|
+
* component deploy driver (`./handlers/run.ts`'s `chant run --components`),
|
|
11
|
+
* and generate mode (`./handlers/build.ts`'s
|
|
12
|
+
* `chant build --components --generate <lexicon>`).
|
|
13
|
+
*
|
|
14
|
+
* Before #1108, only `buildCommand` ran this sequence — `chant run
|
|
15
|
+
* --components` never resolved `--param`/`--params-file`/a declared `env`
|
|
16
|
+
* mapping at all, so a `*.component.ts` file reading `params.<name>`
|
|
17
|
+
* (`@intentius/chant/params`) always saw `{}`, no matter what a CI job
|
|
18
|
+
* exported into the environment. See ../build-params.ts's module doc for the
|
|
19
|
+
* full precedence rules this wraps.
|
|
20
|
+
*/
|
|
21
|
+
/** Parse repeated `--param name=value` flags into a flat `{ name: value }` record — the raw (unvalidated) strings {@link resolveCliBuildParams} resolves against a project's declared `buildParams`. `undefined` when no `--param` flag was given, matching `resolveBuildParams`'s "no cli input" shape. */
|
|
22
|
+
export function parseParamFlags(entries) {
|
|
23
|
+
if (!entries?.length)
|
|
24
|
+
return undefined;
|
|
25
|
+
return Object.fromEntries(entries.map((entry) => {
|
|
26
|
+
const eq = entry.indexOf("=");
|
|
27
|
+
return eq === -1 ? [entry, ""] : [entry.slice(0, eq), entry.slice(eq + 1)];
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve this invocation's declared build-time parameters (`chant.config.ts`'s
|
|
32
|
+
* `buildParams`) against `args`/the process environment, and log each
|
|
33
|
+
* resolved value — the identical resolution + logging sequence `chant build`
|
|
34
|
+
* runs (`../commands/build.ts`'s `buildCommand`), factored out so every other
|
|
35
|
+
* command that discovers project source runs it too (chant #1108).
|
|
36
|
+
*
|
|
37
|
+
* A resolution failure (an unknown `--param`/`--params-file` name, a missing
|
|
38
|
+
* required value, a type/enum mismatch, or an unreadable `--params-file`) is
|
|
39
|
+
* returned as `{ success: false, errors }` — never thrown — so the caller can
|
|
40
|
+
* print each message and exit non-zero exactly like a build error, matching
|
|
41
|
+
* chant #1064's acceptance criterion that this never surfaces as a thrown
|
|
42
|
+
* error from inside user source.
|
|
43
|
+
*
|
|
44
|
+
* On success, the resolution is summarized on one `console.error` line —
|
|
45
|
+
* `N build parameters resolved (a default, b from cli, ...); --verbose to
|
|
46
|
+
* list` — so silence never means "no parameters reached us", and the count
|
|
47
|
+
* by source says whether an override arrived. Under `--verbose` (or
|
|
48
|
+
* `CHANT_PARAM_ECHO=all`) every parameter is listed as
|
|
49
|
+
* `[param] <name> = <value> (<source>)` instead (#1424).
|
|
50
|
+
*/
|
|
51
|
+
export function resolveCliBuildParams(buildParamsConfig, args) {
|
|
52
|
+
const errors = [];
|
|
53
|
+
let fromFile;
|
|
54
|
+
if (args.paramsFile) {
|
|
55
|
+
try {
|
|
56
|
+
fromFile = JSON.parse(readFileSync(resolve(args.paramsFile), "utf-8"));
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
errors.push(formatError({
|
|
60
|
+
message: `Failed to read/parse --params-file "${args.paramsFile}": ${err instanceof Error ? err.message : String(err)}`,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const resolution = resolveBuildParams(buildParamsConfig, {
|
|
65
|
+
cli: args.cli,
|
|
66
|
+
fromFile,
|
|
67
|
+
env: process.env,
|
|
68
|
+
});
|
|
69
|
+
for (const message of resolution.errors) {
|
|
70
|
+
errors.push(formatError({ message }));
|
|
71
|
+
}
|
|
72
|
+
if (errors.length > 0) {
|
|
73
|
+
return { success: false, provenance: [], errors };
|
|
74
|
+
}
|
|
75
|
+
// #1424 — one line by default. A project with two dozen declared
|
|
76
|
+
// parameters printed two dozen grey lines on every build, ahead of the
|
|
77
|
+
// warnings the reader actually needed. The count by source still answers
|
|
78
|
+
// "did my override reach the build" (the failure mode
|
|
79
|
+
// warnIfParamsCannotReachProject exists for); --verbose names every value.
|
|
80
|
+
const verbose = args.verbose === true || process.env.CHANT_PARAM_ECHO === "all";
|
|
81
|
+
if (verbose) {
|
|
82
|
+
for (const p of resolution.provenance) {
|
|
83
|
+
console.error(formatInfo(`[param] ${p.name} = ${JSON.stringify(p.value)} (${p.source})`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (resolution.provenance.length > 0) {
|
|
87
|
+
console.error(formatInfo(summarizeBuildParams(resolution.provenance)));
|
|
88
|
+
}
|
|
89
|
+
return { success: true, provenance: resolution.provenance, errors: [] };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* `N build parameters resolved (1 from cli, 3 default); --verbose to list` —
|
|
93
|
+
* the non-verbose echo of a successful resolution (#1424). Sources appear in
|
|
94
|
+
* precedence order; a source nobody used is left out.
|
|
95
|
+
*/
|
|
96
|
+
export function summarizeBuildParams(provenance) {
|
|
97
|
+
const counts = new Map();
|
|
98
|
+
for (const p of provenance)
|
|
99
|
+
counts.set(p.source, (counts.get(p.source) ?? 0) + 1);
|
|
100
|
+
const order = ["cli", "params-file", "env", "default"];
|
|
101
|
+
const rank = (s) => (order.includes(s) ? order.indexOf(s) : order.length);
|
|
102
|
+
const parts = [...counts.keys()]
|
|
103
|
+
.sort((a, b) => rank(a) - rank(b))
|
|
104
|
+
.map((source) => (source === "default" ? `${counts.get(source)} default` : `${counts.get(source)} from ${source}`));
|
|
105
|
+
const n = provenance.length;
|
|
106
|
+
return `${n} build parameter${n === 1 ? "" : "s"} resolved (${parts.join(", ")}); --verbose to list`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Resolve a command's declared build-time parameters, the same way `chant
|
|
110
|
+
* build` does, so a `build()`/`discover()` on the declared side sees the values
|
|
111
|
+
* the source will actually read.
|
|
112
|
+
*
|
|
113
|
+
* Every command that reads declared source needs this and only `chant build`
|
|
114
|
+
* had it. `chant graph` was fixed in #1483; the lifecycle family — `diff`,
|
|
115
|
+
* `snapshot`, `plan`, and `components status --live` — built the declared side
|
|
116
|
+
* on parameter *defaults* while the live side was whatever is really deployed.
|
|
117
|
+
*
|
|
118
|
+
* For a project whose parameters choose which resources *exist* that is not a
|
|
119
|
+
* near miss. `chant lifecycle diff dev --live` on kubemicrovm-ops returned
|
|
120
|
+
* byte-identical output at `KMV_TIER=minimal` and `KMV_TIER=prod-ha`, and
|
|
121
|
+
* reported the tier label itself as drift — `minimal → prod-ha`, declared
|
|
122
|
+
* against live — which is the comparison announcing it is against the wrong
|
|
123
|
+
* declaration.
|
|
124
|
+
*
|
|
125
|
+
* Returns `undefined` when resolution failed, having printed why: the caller
|
|
126
|
+
* should stop rather than compare against source that will not build.
|
|
127
|
+
*/
|
|
128
|
+
export async function commandBuildParams(buildParamsConfig, args) {
|
|
129
|
+
const resolution = resolveCliBuildParams(buildParamsConfig, {
|
|
130
|
+
cli: parseParamFlags(args.param),
|
|
131
|
+
paramsFile: args.paramsFile,
|
|
132
|
+
});
|
|
133
|
+
if (!resolution.success) {
|
|
134
|
+
for (const message of resolution.errors)
|
|
135
|
+
console.error(message);
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
return resolution.provenance;
|
|
139
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level command words core's own static registry already owns
|
|
3
|
+
* (`packages/core/src/cli/main.ts`'s `registry`). A lexicon's `commands()`
|
|
4
|
+
* group name colliding with one of these is always unreachable — core's own
|
|
5
|
+
* registry is resolved first, unconditionally — so `checkConflicts`
|
|
6
|
+
* (./conflict-check.ts) treats a collision as a hard, loud failure at
|
|
7
|
+
* plugin-load time rather than a silently-ignored command group. Hand
|
|
8
|
+
* maintained alongside the registry; update both together.
|
|
9
|
+
*
|
|
10
|
+
* `workspace` is reserved before core has the command (#2529, #2524 D12), so
|
|
11
|
+
* no lexicon can claim the word first and later be shadowed by it. Only a
|
|
12
|
+
* command-group name is reserved: a lexicon's own config field or flag
|
|
13
|
+
* called `workspace` (the terraform lexicon's root config has one) is
|
|
14
|
+
* untouched.
|
|
15
|
+
*/
|
|
16
|
+
export const RESERVED_COMMAND_NAMES = new Set([
|
|
17
|
+
"build", "lint", "list", "describe", "import", "audit", "migrate", "carve",
|
|
18
|
+
"init", "update", "doctor", "dev", "run", "graph", "vendor", "lifecycle",
|
|
19
|
+
"lc", "components", "emulator", "serve", "operator", "approve",
|
|
20
|
+
"workspace",
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* chant #1127 — split a joined `--flag=value` token into two array elements
|
|
24
|
+
* (`--flag`, `value`), the same discipline core's own `parseArgs` applies,
|
|
25
|
+
* generalized so a lexicon's mounted command can reuse it for its own flag
|
|
26
|
+
* vocabulary instead of reimplementing the split. Throws the same shape of
|
|
27
|
+
* error as core's parser when `flag` is declared boolean but was given a
|
|
28
|
+
* value — a boolean has nothing to assign, and silently reinterpreting the
|
|
29
|
+
* joined value as the next positional would be exactly the silent misparse
|
|
30
|
+
* #1127 closed for core's own flags.
|
|
31
|
+
*/
|
|
32
|
+
export function splitJoinedFlags(args, booleanFlags = new Set()) {
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const arg of args) {
|
|
35
|
+
if (arg.startsWith("--") && arg.includes("=")) {
|
|
36
|
+
const eq = arg.indexOf("=");
|
|
37
|
+
const flag = arg.slice(0, eq);
|
|
38
|
+
const value = arg.slice(eq + 1);
|
|
39
|
+
if (booleanFlags.has(flag)) {
|
|
40
|
+
throw new Error(`${arg} — ${flag} is a boolean flag and does not take a value. Pass ${flag} on its own.`);
|
|
41
|
+
}
|
|
42
|
+
out.push(flag, value);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
out.push(arg);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Same "Unknown flag" error shape core's own `parseArgs` throws (#1127), for
|
|
52
|
+
* a mounted command's own flag vocabulary — core doesn't know that
|
|
53
|
+
* vocabulary, so it can't produce this error itself; the handler does, using
|
|
54
|
+
* this helper for a consistent message.
|
|
55
|
+
*/
|
|
56
|
+
export function unknownFlagError(flag, hint = `Run "chant --help" to see supported flags.`) {
|
|
57
|
+
return new Error(`Unknown flag: ${flag}\n${hint}`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Find the plugin (if any) whose `commands()` group is named `groupName`,
|
|
61
|
+
* and the verb within it named `verbName`. Pure — does no I/O, calls
|
|
62
|
+
* `plugin.commands()` at most once per plugin (registration, not execution:
|
|
63
|
+
* this never invokes a verb's handler).
|
|
64
|
+
*/
|
|
65
|
+
export function resolveCommandGroupVerb(plugins, groupName, verbName) {
|
|
66
|
+
for (const plugin of plugins) {
|
|
67
|
+
const group = plugin.commands?.();
|
|
68
|
+
if (!group || group.name !== groupName)
|
|
69
|
+
continue;
|
|
70
|
+
if (verbName === undefined)
|
|
71
|
+
return { kind: "no-verb", group };
|
|
72
|
+
const command = group.commands.find((c) => c.name === verbName);
|
|
73
|
+
if (!command)
|
|
74
|
+
return { kind: "unknown-verb", group };
|
|
75
|
+
return { kind: "matched", plugin, group, command };
|
|
76
|
+
}
|
|
77
|
+
return { kind: "no-group" };
|
|
78
|
+
}
|
|
79
|
+
/** Every command group contributed by the given loaded plugins, in plugin order. */
|
|
80
|
+
export function collectCommandGroups(plugins) {
|
|
81
|
+
const groups = [];
|
|
82
|
+
for (const plugin of plugins) {
|
|
83
|
+
const group = plugin.commands?.();
|
|
84
|
+
if (group)
|
|
85
|
+
groups.push(group);
|
|
86
|
+
}
|
|
87
|
+
return groups;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve `groupName`/`verbName` against the loaded plugins and, if matched,
|
|
91
|
+
* run the verb's handler with `rawArgs`. Returns `{ kind: "no-group" }` when
|
|
92
|
+
* nothing claims `groupName` at all — the caller's cue to fall back to its
|
|
93
|
+
* own "unknown command" handling — and a printable usage error when the
|
|
94
|
+
* group matched but the verb didn't (or was omitted).
|
|
95
|
+
*/
|
|
96
|
+
export async function dispatchCommandGroup(plugins, groupName, verbName, rawArgs) {
|
|
97
|
+
const lookup = resolveCommandGroupVerb(plugins, groupName, verbName);
|
|
98
|
+
if (lookup.kind === "no-group")
|
|
99
|
+
return { kind: "no-group" };
|
|
100
|
+
if (lookup.kind === "matched") {
|
|
101
|
+
const exitCode = await lookup.command.handler({ verb: verbName, rawArgs });
|
|
102
|
+
return { kind: "ran", exitCode };
|
|
103
|
+
}
|
|
104
|
+
const verbs = lookup.group.commands.map((c) => ` ${c.name.padEnd(14)} ${c.description}`).join("\n");
|
|
105
|
+
const message = lookup.kind === "unknown-verb"
|
|
106
|
+
? `Unknown ${groupName} subcommand: ${verbName}`
|
|
107
|
+
: `Usage: chant ${groupName} <verb> [args...]`;
|
|
108
|
+
return { kind: "usage-error", message, hint: `Available verbs:\n${verbs}` };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Render the `--help` section listing every lexicon-contributed command
|
|
112
|
+
* group. Empty string when there are none, so a caller can splice it in
|
|
113
|
+
* unconditionally without an extra length check.
|
|
114
|
+
*/
|
|
115
|
+
export function formatCommandGroupsHelp(groups) {
|
|
116
|
+
if (groups.length === 0)
|
|
117
|
+
return "";
|
|
118
|
+
const lines = groups.flatMap((g) => [
|
|
119
|
+
` ${g.name.padEnd(20)} ${g.description}`,
|
|
120
|
+
...g.commands.map((c) => ` ${g.name} ${c.name.padEnd(Math.max(1, 17 - g.name.length))}${c.description}`),
|
|
121
|
+
]);
|
|
122
|
+
return `Lexicon commands:\n${lines.join("\n")}\n`;
|
|
123
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant audit --agents` — audit the agent configuration on this machine.
|
|
3
|
+
*
|
|
4
|
+
* This is a different *subject* from the rest of `chant audit` (a machine, not
|
|
5
|
+
* a repo) but deliberately the same *product*: the same tiering, the same
|
|
6
|
+
* five output formats, the same rule-catalog links. A reader who already knows
|
|
7
|
+
* how to read a chant audit report can read this one, and the HTML/SARIF/JSON
|
|
8
|
+
* consumers downstream need no changes.
|
|
9
|
+
*
|
|
10
|
+
* The bridge is {@link toAuditFindings}: an `AgentFinding` is projected onto
|
|
11
|
+
* the `AuditFinding` shape the renderers already take, with the site id in
|
|
12
|
+
* `entity` so a reader can tell which configuration a finding came from.
|
|
13
|
+
*
|
|
14
|
+
* Two things this command adds that a repo audit has no need for:
|
|
15
|
+
*
|
|
16
|
+
* - **An inventory.** "What is configured on this machine" is the primary
|
|
17
|
+
* question here; findings are secondary. A clean scan should still print
|
|
18
|
+
* the sites it found, because most users have never seen the full list.
|
|
19
|
+
* - **Coverage honesty.** The scan probes a fixed set of locations, so it can
|
|
20
|
+
* state what it looked for and didn't find, what it couldn't parse, and how
|
|
21
|
+
* many registered projects it did not visit. An inventory that quietly
|
|
22
|
+
* omits half the machine is worse than no inventory.
|
|
23
|
+
*/
|
|
24
|
+
import { writeFileSync } from "fs";
|
|
25
|
+
import { homedir } from "os";
|
|
26
|
+
import { resolve } from "path";
|
|
27
|
+
import { scanAgentConfigs, unscannedProjectCount } from "../../agents/discover.js";
|
|
28
|
+
import { checkAgentConfigs } from "../../agents/checks.js";
|
|
29
|
+
import { AGENT_RUNTIMES, AGENT_SCOPES } from "../../agents/types.js";
|
|
30
|
+
import { RULE_CATALOG, ruleDocUrl } from "../../audit/catalog.js";
|
|
31
|
+
import { renderMarkdown } from "../../audit/report.js";
|
|
32
|
+
import { renderHtml } from "../../audit/report-html.js";
|
|
33
|
+
import { buildReportJson } from "../../audit/report-model.js";
|
|
34
|
+
/**
|
|
35
|
+
* Project an agent finding onto the audit renderers' finding shape.
|
|
36
|
+
*
|
|
37
|
+
* `lexicon` is set to `"agents"` — the renderers only use it as a grouping
|
|
38
|
+
* label, and calling this family what it is keeps a mixed report readable.
|
|
39
|
+
*/
|
|
40
|
+
export function toAuditFindings(findings) {
|
|
41
|
+
return findings.map((f) => ({
|
|
42
|
+
checkId: f.checkId,
|
|
43
|
+
severity: f.severity,
|
|
44
|
+
message: f.message,
|
|
45
|
+
file: f.file,
|
|
46
|
+
lexicon: "agents",
|
|
47
|
+
entity: f.entity ? `${f.siteId} › ${f.entity}` : f.siteId,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
function isMergeWorthy(f, catalog) {
|
|
51
|
+
return catalog[f.checkId]?.tier === "merge-worthy";
|
|
52
|
+
}
|
|
53
|
+
function exitCodeFor(findings, failOn, catalog) {
|
|
54
|
+
if (failOn === "merge-worthy")
|
|
55
|
+
return findings.some((f) => isMergeWorthy(f, catalog)) ? 1 : 0;
|
|
56
|
+
if (failOn === "warning")
|
|
57
|
+
return findings.some((f) => f.severity === "error" || f.severity === "warning") ? 1 : 0;
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
/** One-line summary of what a site carries, e.g. `3 MCP servers · 11 skills`. */
|
|
61
|
+
export function siteSummary(site) {
|
|
62
|
+
const parts = [];
|
|
63
|
+
const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
|
|
64
|
+
if (site.instructions.length > 0)
|
|
65
|
+
parts.push(plural(site.instructions.length, "instruction file"));
|
|
66
|
+
if (site.mcpServers.length > 0)
|
|
67
|
+
parts.push(plural(site.mcpServers.length, "MCP server"));
|
|
68
|
+
if (site.skills.length > 0)
|
|
69
|
+
parts.push(plural(site.skills.length, "skill"));
|
|
70
|
+
if (site.subagents.length > 0)
|
|
71
|
+
parts.push(plural(site.subagents.length, "subagent"));
|
|
72
|
+
if (site.commands.length > 0)
|
|
73
|
+
parts.push(plural(site.commands.length, "command"));
|
|
74
|
+
if (site.plugins.length > 0)
|
|
75
|
+
parts.push(plural(site.plugins.length, "plugin"));
|
|
76
|
+
const envCount = Object.keys(site.env).length;
|
|
77
|
+
if (envCount > 0)
|
|
78
|
+
parts.push(plural(envCount, "env var"));
|
|
79
|
+
if (site.model)
|
|
80
|
+
parts.push(`model ${site.model}`);
|
|
81
|
+
return parts.length > 0 ? parts.join(" · ") : "no content";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Coverage caveats. Stated even when empty-ish, because the value of an
|
|
85
|
+
* inventory depends entirely on the reader knowing its edges.
|
|
86
|
+
*/
|
|
87
|
+
export function agentCoverageNotes(scan, opts) {
|
|
88
|
+
const notes = [];
|
|
89
|
+
if (opts.scopes.includes("project")) {
|
|
90
|
+
const roots = opts.projectRoots.length;
|
|
91
|
+
const unscanned = unscannedProjectCount(opts.home, opts.projectRoots);
|
|
92
|
+
if (unscanned > 0) {
|
|
93
|
+
notes.push(`Scanned ${roots} project root${roots === 1 ? "" : "s"}; ` +
|
|
94
|
+
`${unscanned} more ${unscanned === 1 ? "is" : "are"} registered in ~/.claude.json and ${unscanned === 1 ? "was" : "were"} not visited. ` +
|
|
95
|
+
// The path is positional (`chant audit <path>`), not a `--path` flag.
|
|
96
|
+
`Scan one with \`chant audit --agents --scope project <dir>\`, or all of them with \`--all-projects\`.`);
|
|
97
|
+
}
|
|
98
|
+
else if (roots > 1) {
|
|
99
|
+
// Breadth is worth stating even when nothing was missed — a reader
|
|
100
|
+
// seeing four findings should know whether that was across one project
|
|
101
|
+
// or sixty-five.
|
|
102
|
+
notes.push(`Scanned ${roots} project roots — every project registered in ~/.claude.json whose directory still exists.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (scan.unreadable.length > 0) {
|
|
106
|
+
notes.push(`${scan.unreadable.length} file${scan.unreadable.length === 1 ? "" : "s"} existed but could not be parsed, so ` +
|
|
107
|
+
`${scan.unreadable.length === 1 ? "its" : "their"} contents are not covered: ` +
|
|
108
|
+
scan.unreadable.map((u) => `${u.path} (${u.reason})`).join("; "));
|
|
109
|
+
}
|
|
110
|
+
const skippedScopes = AGENT_SCOPES.filter((s) => !opts.scopes.includes(s));
|
|
111
|
+
if (skippedScopes.length > 0)
|
|
112
|
+
notes.push(`Scope${skippedScopes.length === 1 ? "" : "s"} not scanned: ${skippedScopes.join(", ")}.`);
|
|
113
|
+
return notes;
|
|
114
|
+
}
|
|
115
|
+
/** Render the inventory section — what was found, before any judgement about it. */
|
|
116
|
+
function renderInventory(scan) {
|
|
117
|
+
const lines = [];
|
|
118
|
+
if (scan.sites.length === 0) {
|
|
119
|
+
lines.push("No agent configuration found.");
|
|
120
|
+
return lines;
|
|
121
|
+
}
|
|
122
|
+
lines.push(`Found ${scan.sites.length} agent config${scan.sites.length === 1 ? "" : "s"}:`);
|
|
123
|
+
let lastScope;
|
|
124
|
+
for (const site of scan.sites) {
|
|
125
|
+
if (site.scope !== lastScope) {
|
|
126
|
+
lines.push("", ` ${site.scope}:`);
|
|
127
|
+
lastScope = site.scope;
|
|
128
|
+
}
|
|
129
|
+
lines.push(` ${site.runtime.padEnd(9)} ${site.root}`);
|
|
130
|
+
lines.push(` ${siteSummary(site)}`);
|
|
131
|
+
lines.push(` from ${site.sources.length} file${site.sources.length === 1 ? "" : "s"}`);
|
|
132
|
+
}
|
|
133
|
+
return lines;
|
|
134
|
+
}
|
|
135
|
+
function renderStylish(scan, findings, notes, catalog) {
|
|
136
|
+
const lines = [...renderInventory(scan), ""];
|
|
137
|
+
for (const note of notes)
|
|
138
|
+
lines.push(`Note: ${note}`);
|
|
139
|
+
if (notes.length > 0)
|
|
140
|
+
lines.push("");
|
|
141
|
+
const mw = findings.filter((f) => isMergeWorthy(f, catalog));
|
|
142
|
+
const ro = findings.filter((f) => !isMergeWorthy(f, catalog));
|
|
143
|
+
lines.push(`${findings.length} finding${findings.length === 1 ? "" : "s"} (${mw.length} merge-worthy, ${ro.length} report-only).`);
|
|
144
|
+
const section = (title, list) => {
|
|
145
|
+
if (list.length === 0)
|
|
146
|
+
return;
|
|
147
|
+
lines.push("", title);
|
|
148
|
+
for (const f of list) {
|
|
149
|
+
lines.push(` [${f.checkId}] ${f.severity} ${f.entity}`);
|
|
150
|
+
lines.push(` ${f.message}`);
|
|
151
|
+
lines.push(` ${f.file}`);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
section("Merge-worthy:", mw);
|
|
155
|
+
section("Report-only:", ro);
|
|
156
|
+
return lines.join("\n");
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Provenance for the machine-readable and HTML reports. `target` is the home
|
|
160
|
+
* directory rather than a repo URL, and `files` lists the config sources that
|
|
161
|
+
* contributed — the machine-scope analogue of "which workflow files were read".
|
|
162
|
+
*/
|
|
163
|
+
function buildSnapshot(scan, home, opts) {
|
|
164
|
+
return {
|
|
165
|
+
target: home,
|
|
166
|
+
files: scan.sites.flatMap((s) => s.sources),
|
|
167
|
+
generatedAt: opts.now ?? new Date().toISOString(),
|
|
168
|
+
toolVersion: opts.toolVersion ?? "0.0.0",
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** The JSON report: the full inventory plus findings, so a consumer can do its own analysis. */
|
|
172
|
+
function renderJson(scan, agentFindings, findings, notes, catalog, snapshot) {
|
|
173
|
+
const base = buildReportJson(findings, { snapshot, toolVersion: snapshot.toolVersion, catalog });
|
|
174
|
+
return JSON.stringify({
|
|
175
|
+
...base,
|
|
176
|
+
subject: "agent-configuration",
|
|
177
|
+
notes,
|
|
178
|
+
sites: scan.sites.map((site) => ({
|
|
179
|
+
id: site.id,
|
|
180
|
+
scope: site.scope,
|
|
181
|
+
runtime: site.runtime,
|
|
182
|
+
root: site.root,
|
|
183
|
+
sources: site.sources,
|
|
184
|
+
summary: siteSummary(site),
|
|
185
|
+
instructions: site.instructions.map((i) => ({ path: i.path, bytes: i.bytes })),
|
|
186
|
+
mcpServers: site.mcpServers,
|
|
187
|
+
skills: site.skills.map((s) => ({ name: s.name, origin: s.origin, path: s.path, source: s.source, ref: s.ref })),
|
|
188
|
+
subagents: site.subagents,
|
|
189
|
+
commands: site.commands,
|
|
190
|
+
plugins: site.plugins,
|
|
191
|
+
env: Object.keys(site.env),
|
|
192
|
+
permissions: site.permissions,
|
|
193
|
+
model: site.model,
|
|
194
|
+
})),
|
|
195
|
+
agentFindings,
|
|
196
|
+
coverage: { probed: scan.probed, unreadable: scan.unreadable },
|
|
197
|
+
}, null, 2);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* SARIF (2.1.0) export for the agent scan. Same property bag the repository
|
|
201
|
+
* audit emits (#442, #444) — `category`/`dimension` per rule and `tier` per
|
|
202
|
+
* result — so a consumer that triages one SARIF file can triage the other
|
|
203
|
+
* without special-casing the driver. `helpUri` points at the rule's own docs
|
|
204
|
+
* anchor rather than its authority citation: an AGT finding is about a local
|
|
205
|
+
* file, and the chant page is what explains what to do with it.
|
|
206
|
+
*/
|
|
207
|
+
function renderSarif(findings, catalog) {
|
|
208
|
+
const ids = [...new Set(findings.map((f) => f.checkId))].sort();
|
|
209
|
+
return JSON.stringify({
|
|
210
|
+
$schema: "https://json.schemastore.org/sarif-2.1.0.json",
|
|
211
|
+
version: "2.1.0",
|
|
212
|
+
runs: [
|
|
213
|
+
{
|
|
214
|
+
tool: {
|
|
215
|
+
driver: {
|
|
216
|
+
name: "chant audit --agents",
|
|
217
|
+
informationUri: "https://intentius.io/chant/cli/audit/",
|
|
218
|
+
rules: ids.map((id) => {
|
|
219
|
+
const m = catalog[id];
|
|
220
|
+
return {
|
|
221
|
+
id,
|
|
222
|
+
name: m?.title ?? id,
|
|
223
|
+
shortDescription: { text: m?.title ?? id },
|
|
224
|
+
fullDescription: { text: m?.remediation ?? "" },
|
|
225
|
+
...(m?.remediation ? { help: { text: m.remediation } } : {}),
|
|
226
|
+
helpUri: ruleDocUrl(id),
|
|
227
|
+
...(m?.category ? { properties: { category: m.category, dimension: m.category } } : {}),
|
|
228
|
+
};
|
|
229
|
+
}),
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
results: findings.map((f) => {
|
|
233
|
+
const tier = catalog[f.checkId]?.tier;
|
|
234
|
+
return {
|
|
235
|
+
ruleId: f.checkId,
|
|
236
|
+
level: f.severity === "error" ? "error" : f.severity === "warning" ? "warning" : "note",
|
|
237
|
+
message: { text: f.message },
|
|
238
|
+
locations: [{ physicalLocation: { artifactLocation: { uri: f.file } } }],
|
|
239
|
+
...(tier ? { properties: { tier } } : {}),
|
|
240
|
+
};
|
|
241
|
+
}),
|
|
242
|
+
},
|
|
243
|
+
],
|
|
244
|
+
}, null, 2);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Scan the machine's agent configuration and render a report.
|
|
248
|
+
*
|
|
249
|
+
* Pure with respect to the filesystem apart from the scan itself and an
|
|
250
|
+
* optional `--output` write, so it can be driven from tests against a fixture
|
|
251
|
+
* home directory.
|
|
252
|
+
*/
|
|
253
|
+
export function auditAgentsCommand(opts = {}) {
|
|
254
|
+
const home = opts.home ?? homedir();
|
|
255
|
+
const scopes = opts.scopes ?? AGENT_SCOPES;
|
|
256
|
+
const runtimes = opts.runtimes ?? AGENT_RUNTIMES;
|
|
257
|
+
const projectRoots = (opts.projectRoots ?? [process.cwd()]).map((p) => resolve(p));
|
|
258
|
+
const format = opts.format ?? "stylish";
|
|
259
|
+
const tier = opts.tier ?? "all";
|
|
260
|
+
const failOn = opts.failOn ?? "none";
|
|
261
|
+
const catalog = RULE_CATALOG;
|
|
262
|
+
const scan = scanAgentConfigs({ scopes, runtimes, projectRoots, home, platform: opts.platform });
|
|
263
|
+
const all = checkAgentConfigs(scan);
|
|
264
|
+
const agentFindings = tier === "merge-worthy" ? all.filter((f) => catalog[f.checkId]?.tier === "merge-worthy") : all;
|
|
265
|
+
const findings = toAuditFindings(agentFindings);
|
|
266
|
+
const notes = agentCoverageNotes(scan, { home, projectRoots, scopes });
|
|
267
|
+
const snapshot = buildSnapshot(scan, home, opts);
|
|
268
|
+
let output;
|
|
269
|
+
switch (format) {
|
|
270
|
+
case "json":
|
|
271
|
+
output = renderJson(scan, agentFindings, findings, notes, catalog, snapshot);
|
|
272
|
+
break;
|
|
273
|
+
case "sarif":
|
|
274
|
+
output = renderSarif(findings, catalog);
|
|
275
|
+
break;
|
|
276
|
+
case "markdown":
|
|
277
|
+
output = [
|
|
278
|
+
"# Agent configuration audit",
|
|
279
|
+
"",
|
|
280
|
+
"## Inventory",
|
|
281
|
+
"",
|
|
282
|
+
"```",
|
|
283
|
+
renderInventory(scan).join("\n"),
|
|
284
|
+
"```",
|
|
285
|
+
"",
|
|
286
|
+
renderMarkdown(findings, { target: home, notes, catalog, title: "Findings", headingLevel: 2 }),
|
|
287
|
+
].join("\n");
|
|
288
|
+
break;
|
|
289
|
+
case "html":
|
|
290
|
+
output = renderHtml(findings, {
|
|
291
|
+
notes,
|
|
292
|
+
catalog,
|
|
293
|
+
snapshot,
|
|
294
|
+
theme: opts.theme,
|
|
295
|
+
template: opts.template,
|
|
296
|
+
});
|
|
297
|
+
break;
|
|
298
|
+
default:
|
|
299
|
+
output = renderStylish(scan, findings, notes, catalog);
|
|
300
|
+
}
|
|
301
|
+
let wroteTo;
|
|
302
|
+
if (opts.output) {
|
|
303
|
+
try {
|
|
304
|
+
writeFileSync(opts.output, output, "utf-8");
|
|
305
|
+
wroteTo = opts.output;
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
return {
|
|
309
|
+
success: false,
|
|
310
|
+
output: "",
|
|
311
|
+
findings: agentFindings,
|
|
312
|
+
scan,
|
|
313
|
+
exitCode: 1,
|
|
314
|
+
error: `Failed to write ${opts.output}: ${err instanceof Error ? err.message : String(err)}`,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
success: true,
|
|
320
|
+
output,
|
|
321
|
+
findings: agentFindings,
|
|
322
|
+
scan,
|
|
323
|
+
exitCode: exitCodeFor(findings, failOn, catalog),
|
|
324
|
+
wroteTo,
|
|
325
|
+
};
|
|
326
|
+
}
|