@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs reachability audit for the lexicon completeness contract (#1312).
|
|
3
|
+
*
|
|
4
|
+
* The contract used to check documentation by counting files — "at least 1
|
|
5
|
+
* .mdx page" at tier 1, "at least 8" at tier 2 — and never opened one. That
|
|
6
|
+
* counts a page nothing links to exactly the same as a page a reader can
|
|
7
|
+
* actually find, so azure, helm and github each accumulated
|
|
8
|
+
* hand-added pages that appear in no sidebar and are reachable only by typing
|
|
9
|
+
* their URL. Azure's getting-started, resource reference and composites pages
|
|
10
|
+
* were all invisible while its ≥8-page check passed comfortably — the count
|
|
11
|
+
* check was, if anything, rewarded by the orphans.
|
|
12
|
+
*
|
|
13
|
+
* Starlight does not auto-discover pages (see docs/README.md), so sidebar
|
|
14
|
+
* membership is the whole of reachability for a lexicon site.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, readdirSync, readFileSync } from "fs";
|
|
17
|
+
import { join } from "path";
|
|
18
|
+
/**
|
|
19
|
+
* Slugs the sidebar reaches, including nested group `items`.
|
|
20
|
+
*
|
|
21
|
+
* Read textually rather than by importing the config: `astro.config.mjs` is an
|
|
22
|
+
* ESM module that imports `@astrojs/starlight`, which a lexicon under check is
|
|
23
|
+
* not required to have installed. The generator emits `JSON.stringify` output
|
|
24
|
+
* (double-quoted), but a hand-edited config may use single quotes or a bare
|
|
25
|
+
* key, so accept all three.
|
|
26
|
+
*/
|
|
27
|
+
export function sidebarSlugs(configSource) {
|
|
28
|
+
const slugs = new Set();
|
|
29
|
+
for (const match of configSource.matchAll(/["']?slug["']?\s*:\s*["']([^"']+)["']/g)) {
|
|
30
|
+
slugs.add(match[1]);
|
|
31
|
+
}
|
|
32
|
+
return slugs;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Audit one lexicon directory for doc pages nothing links to.
|
|
36
|
+
*
|
|
37
|
+
* A lexicon with no docs site is not a failure here — tier 1's "at least 1
|
|
38
|
+
* .mdx doc page" already covers that case, and reporting the same absence
|
|
39
|
+
* twice would just be noise.
|
|
40
|
+
*/
|
|
41
|
+
export function auditDocsReachability(lexiconDir) {
|
|
42
|
+
const contentDir = join(lexiconDir, "docs", "src", "content", "docs");
|
|
43
|
+
const configPath = join(lexiconDir, "docs", "astro.config.mjs");
|
|
44
|
+
if (!existsSync(contentDir) || !existsSync(configPath)) {
|
|
45
|
+
return { hasSite: false, pages: [], unreachable: [] };
|
|
46
|
+
}
|
|
47
|
+
const slugs = sidebarSlugs(readFileSync(configPath, "utf-8"));
|
|
48
|
+
const pages = readdirSync(contentDir)
|
|
49
|
+
.filter((f) => f.endsWith(".mdx") || f.endsWith(".md"))
|
|
50
|
+
.map((f) => f.replace(/\.mdx?$/, ""))
|
|
51
|
+
.sort();
|
|
52
|
+
// `index` is the site root; Starlight reaches it without a sidebar entry.
|
|
53
|
+
const unreachable = pages.filter((slug) => slug !== "index" && !slugs.has(slug));
|
|
54
|
+
return { hasSite: true, pages, unreachable };
|
|
55
|
+
}
|
|
56
|
+
const QUADRANTS = new Set(["tutorial", "how-to", "reference", "explanation"]);
|
|
57
|
+
/**
|
|
58
|
+
* Audit docs/pages/ for authored pages with no Diátaxis quadrant (#1731).
|
|
59
|
+
*
|
|
60
|
+
* The docs pipeline throws on the same condition, so this is the cheap
|
|
61
|
+
* pre-flight that reports every offender at once instead of the first one.
|
|
62
|
+
*/
|
|
63
|
+
export function auditDocsClassification(lexiconDir) {
|
|
64
|
+
const pagesDir = join(lexiconDir, "docs", "pages");
|
|
65
|
+
if (!existsSync(pagesDir))
|
|
66
|
+
return { hasPages: false, unclassified: [] };
|
|
67
|
+
const unclassified = [];
|
|
68
|
+
for (const file of readdirSync(pagesDir).sort()) {
|
|
69
|
+
if (!file.endsWith(".mdx") && !file.endsWith(".md"))
|
|
70
|
+
continue;
|
|
71
|
+
const text = readFileSync(join(pagesDir, file), "utf-8");
|
|
72
|
+
const end = text.startsWith("---\n") ? text.indexOf("\n---", 4) : -1;
|
|
73
|
+
const fm = end === -1 ? "" : text.slice(4, end);
|
|
74
|
+
const value = fm.match(/^diataxis:\s*(.+)$/m)?.[1].trim();
|
|
75
|
+
if (!value || !QUADRANTS.has(value))
|
|
76
|
+
unclassified.push(file);
|
|
77
|
+
}
|
|
78
|
+
return { hasPages: true, unclassified };
|
|
79
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Every shipped example builds" (chant #1067) and "every shipped example
|
|
3
|
+
* passes its own lexicon's post-synth checks" (chant #1400).
|
|
4
|
+
*
|
|
5
|
+
* `check-lexicon.ts`'s existing example checks only count directories
|
|
6
|
+
* ("At least 1 example", "At least 3 examples", "At least 5 examples with
|
|
7
|
+
* tests") — nothing ever tries to build one. `lexicons/aws/examples/core-concepts`
|
|
8
|
+
* shipped with a discovery-time error (two files independently exporting a
|
|
9
|
+
* top-level `dataBucket`) and `chant dev check-lexicon lexicons/aws` still
|
|
10
|
+
* reported "All tier-1 checks passed," because none of its 29 checks touch
|
|
11
|
+
* build output. This module closes that gap directly: for every non-empty
|
|
12
|
+
* `examples/<name>/src/` directory, run the same discover-and-serialize
|
|
13
|
+
* pipeline `chant build` runs and report whether it produced output with no
|
|
14
|
+
* structural error.
|
|
15
|
+
*
|
|
16
|
+
* #1067 scoped "builds" to discovery + serialization on purpose, and said
|
|
17
|
+
* so here: three aws examples (lambda-api, lambda-s3, shared-alb) failed
|
|
18
|
+
* WAW042/WAW054 at error severity at the time, for defects that issue never
|
|
19
|
+
* set out to fix. #1400 fixed those three and added the second axis: after
|
|
20
|
+
* serialization, the post-synth checks each loaded plugin ships run against
|
|
21
|
+
* that plugin's own output, exactly as `chant build` runs them (scoped per
|
|
22
|
+
* plugin, `lint.rules` from the example's chant.config applied), and any
|
|
23
|
+
* diagnostic left at `error` severity fails the example. Warnings do not.
|
|
24
|
+
* An example is what a user copies wholesale; it must not teach a pattern
|
|
25
|
+
* the lexicon it demonstrates flags as an error.
|
|
26
|
+
*
|
|
27
|
+
* #2101 added the third axis: core's own Op-model checks (OPS012/OPS013/
|
|
28
|
+
* OPS014, `../../lint/rules/op/`) run over the same result, as `chant build`
|
|
29
|
+
* runs them, so an example carrying an Op has that Op validated here rather
|
|
30
|
+
* than only when a user builds the example themselves. They are given the
|
|
31
|
+
* activity contracts every loaded lexicon declares, resolved the same way
|
|
32
|
+
* `chant build` resolves them, so a step calling that lexicon's own activity
|
|
33
|
+
* validates against its own schemas.
|
|
34
|
+
*/
|
|
35
|
+
import { lexiconNames as declaredLexiconNames } from "../../lexicon-module.js";
|
|
36
|
+
import { existsSync, readdirSync } from "fs";
|
|
37
|
+
import { join } from "path";
|
|
38
|
+
import { build } from "../../build.js";
|
|
39
|
+
import { findInfraFiles } from "../../discovery/files.js";
|
|
40
|
+
import { detectLexicons } from "../../detectLexicon.js";
|
|
41
|
+
import { loadChantConfig } from "../../config.js";
|
|
42
|
+
import { loadPlugins, collectBuildRootContributors } from "../plugins.js";
|
|
43
|
+
import { runPostSynthChecks } from "../../lint/post-synth.js";
|
|
44
|
+
import { coreOpChecks } from "../../lint/rules/op/index.js";
|
|
45
|
+
import { loadActivityContracts } from "../../op/activity-contract-registry.js";
|
|
46
|
+
import { applyConfiguredSeverity } from "../../lint/config.js";
|
|
47
|
+
/**
|
|
48
|
+
* Run core's Op-model checks over the whole result, then each plugin's own
|
|
49
|
+
* post-synth checks against that plugin's output — the same scoping and
|
|
50
|
+
* `lint.rules` severity resolution `cli/commands/build.ts` applies — and
|
|
51
|
+
* return what is left at `error` severity. Project `lint.policies` are not
|
|
52
|
+
* run here: those are the example author's organizational policy, not the
|
|
53
|
+
* lexicon's contract.
|
|
54
|
+
*/
|
|
55
|
+
export function postSynthErrors(plugins, result, lintRules, activityContracts) {
|
|
56
|
+
const errors = [];
|
|
57
|
+
// Core's Op-model checks first (#2101). An Op is recognized by entity type,
|
|
58
|
+
// not by which lexicon declared it, so these run over the FULL result the
|
|
59
|
+
// way `chant build` runs them — unscoped, and regardless of which plugins
|
|
60
|
+
// loaded. Without this an example's Op reached output unvalidated, which is
|
|
61
|
+
// why the terraform, aws and render examples kept their Ops outside `src/`.
|
|
62
|
+
const opDiags = runPostSynthChecks(coreOpChecks(), result, undefined, { activityContracts });
|
|
63
|
+
for (const diag of applyConfiguredSeverity(opDiags, lintRules).diagnostics) {
|
|
64
|
+
if (diag.severity === "error")
|
|
65
|
+
errors.push(diag);
|
|
66
|
+
}
|
|
67
|
+
for (const plugin of plugins) {
|
|
68
|
+
if (!plugin.postSynthChecks)
|
|
69
|
+
continue;
|
|
70
|
+
const checks = plugin.postSynthChecks();
|
|
71
|
+
if (checks.length === 0)
|
|
72
|
+
continue;
|
|
73
|
+
const outputKey = plugin.serializer.name;
|
|
74
|
+
const scopedOutputs = new Map();
|
|
75
|
+
const pluginOutput = result.outputs.get(outputKey);
|
|
76
|
+
if (pluginOutput !== undefined)
|
|
77
|
+
scopedOutputs.set(outputKey, pluginOutput);
|
|
78
|
+
const diags = runPostSynthChecks(checks, { ...result, outputs: scopedOutputs }, undefined, { activityContracts });
|
|
79
|
+
const { diagnostics } = applyConfiguredSeverity(diags, lintRules);
|
|
80
|
+
for (const diag of diagnostics) {
|
|
81
|
+
if (diag.severity === "error")
|
|
82
|
+
errors.push(diag);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return errors;
|
|
86
|
+
}
|
|
87
|
+
function formatPostSynthError(diag) {
|
|
88
|
+
const prefix = diag.entity ? `[${diag.entity}] ` : "";
|
|
89
|
+
return `${diag.checkId}: ${prefix}${diag.message}`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Build every non-empty example under `<lexiconDir>/examples/*\/src` and
|
|
93
|
+
* report per-example pass/fail. Returns `[]` when the lexicon has no
|
|
94
|
+
* `examples/` directory at all (a separate tier-1 check already covers
|
|
95
|
+
* that).
|
|
96
|
+
*/
|
|
97
|
+
export async function checkExamplesBuild(lexiconDir) {
|
|
98
|
+
const examplesDir = join(lexiconDir, "examples");
|
|
99
|
+
if (!existsSync(examplesDir))
|
|
100
|
+
return [];
|
|
101
|
+
const results = [];
|
|
102
|
+
const entries = readdirSync(examplesDir, { withFileTypes: true }).filter((e) => e.isDirectory());
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const srcDir = join(examplesDir, entry.name, "src");
|
|
105
|
+
if (!existsSync(srcDir))
|
|
106
|
+
continue;
|
|
107
|
+
const contents = readdirSync(srcDir);
|
|
108
|
+
if (contents.length === 0 || (contents.length === 1 && contents[0] === ".gitkeep"))
|
|
109
|
+
continue;
|
|
110
|
+
try {
|
|
111
|
+
const files = await findInfraFiles(srcDir);
|
|
112
|
+
if (files.length === 0)
|
|
113
|
+
continue;
|
|
114
|
+
// An example's own chant.config.{ts,json} (living beside src/, not in
|
|
115
|
+
// it) can declare `lexicons` explicitly — the same precedence real
|
|
116
|
+
// `chant build` gives it via resolveProjectLexicons() in ../plugins.ts.
|
|
117
|
+
// Needed for examples like helm's HelmRender ones, whose composite
|
|
118
|
+
// legitimately produces entities tagged with a lexicon (e.g. "k8s")
|
|
119
|
+
// that no source-file import mentions — detection from imports alone
|
|
120
|
+
// can never see it, so the example built with only its "own" lexicon's
|
|
121
|
+
// plugin and silently dropped every entity of the other, undetectable
|
|
122
|
+
// one. Detection from source-file imports (unchanged) remains the
|
|
123
|
+
// fallback for the many examples with no declared `lexicons` list.
|
|
124
|
+
const { config: exampleConfig } = await loadChantConfig(join(examplesDir, entry.name));
|
|
125
|
+
const lexiconNames = exampleConfig.lexicons && exampleConfig.lexicons.length > 0
|
|
126
|
+
? declaredLexiconNames(exampleConfig.lexicons)
|
|
127
|
+
: await detectLexicons(files);
|
|
128
|
+
if (lexiconNames.length === 0) {
|
|
129
|
+
results.push({
|
|
130
|
+
example: entry.name,
|
|
131
|
+
ok: false,
|
|
132
|
+
detail: "no lexicon imports detected in src/ — cannot determine which plugin(s) to build with",
|
|
133
|
+
});
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const plugins = await loadPlugins(lexiconNames);
|
|
137
|
+
// Bind each plugin's `buildRoots()` hook exactly as `chant build` does
|
|
138
|
+
// (#2083): a lexicon whose entities come from config-declared roots
|
|
139
|
+
// rather than typed source (k8s kustomize roots, terraform roots) has
|
|
140
|
+
// nothing to serialize otherwise, and its example would read as
|
|
141
|
+
// "produced no output" for a reason that is this harness's, not the
|
|
142
|
+
// example's.
|
|
143
|
+
const exampleDir = join(examplesDir, entry.name);
|
|
144
|
+
const buildRoots = collectBuildRootContributors(plugins, exampleConfig, exampleDir);
|
|
145
|
+
const result = await build(srcDir, plugins.map((p) => p.serializer), undefined, { buildRoots });
|
|
146
|
+
const structuralErrors = result.errors.map((e) => e.message);
|
|
147
|
+
const producedOutput = result.outputs.size > 0;
|
|
148
|
+
const structurallyOk = structuralErrors.length === 0 && producedOutput;
|
|
149
|
+
// #1400 — only once the build is structurally sound. A discovery error
|
|
150
|
+
// already explains the failure, and partial output is not the output
|
|
151
|
+
// the checks are meant to see.
|
|
152
|
+
const postSynth = structurallyOk
|
|
153
|
+
? postSynthErrors(plugins, result, exampleConfig.lint?.rules, await loadActivityContracts(plugins))
|
|
154
|
+
: [];
|
|
155
|
+
const ok = structurallyOk && postSynth.length === 0;
|
|
156
|
+
results.push({
|
|
157
|
+
example: entry.name,
|
|
158
|
+
ok,
|
|
159
|
+
detail: ok
|
|
160
|
+
? undefined
|
|
161
|
+
: structuralErrors.length > 0
|
|
162
|
+
? structuralErrors.join("; ")
|
|
163
|
+
: !producedOutput
|
|
164
|
+
? "discovered source but produced no output"
|
|
165
|
+
: `post-synth error(s): ${postSynth.map(formatPostSynthError).join("; ")}`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
results.push({
|
|
170
|
+
example: entry.name,
|
|
171
|
+
ok: false,
|
|
172
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return results;
|
|
177
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static audit of a lexicon's intrinsic registrations (chant #1067).
|
|
3
|
+
*
|
|
4
|
+
* `check-lexicon.ts`'s original 29 checks are all existence/count assertions
|
|
5
|
+
* — they never look at whether a registration is actually *correct*.
|
|
6
|
+
* Foldability (`IntrinsicDef.isTag`, ../../lexicon.ts) is the sharpest case:
|
|
7
|
+
* it drives both `chant build --fold` (which registered tags it recognizes)
|
|
8
|
+
* and the generated per-lexicon intrinsics doc page (its "Folds?" column,
|
|
9
|
+
* via `intrinsicFolds()`), so a wrong value doesn't just mislead a reader —
|
|
10
|
+
* it silently changes what `--fold` does. #1039 shipped with the flag wrong
|
|
11
|
+
* in both directions at once (aws's `Sub` missing `isTag` entirely; gitlab's
|
|
12
|
+
* `reference()` claiming `isTag: true` for a plain call) and neither was
|
|
13
|
+
* caught by anything until someone measured fold coverage by hand.
|
|
14
|
+
*
|
|
15
|
+
* This module answers two questions per registered intrinsic, purely by
|
|
16
|
+
* parsing source (no execution, no `chant generate` required first):
|
|
17
|
+
*
|
|
18
|
+
* 1. Is `name` actually exported from the package's public entry
|
|
19
|
+
* (`src/index.ts`)? A registration that names something the package
|
|
20
|
+
* doesn't export is documenting a function that doesn't exist.
|
|
21
|
+
* 2. Does the exported declaration's own shape agree with `isTag`? A tagged
|
|
22
|
+
* template is a function whose first parameter is typed
|
|
23
|
+
* `TemplateStringsArray` — the only shape `fold()` ever recognizes as a
|
|
24
|
+
* tag (see ../../fold/fold.ts). Anything else (a plain function, a class,
|
|
25
|
+
* a const object/proxy) cannot be invoked as `` Name`...` `` and must be
|
|
26
|
+
* `isTag: false`.
|
|
27
|
+
*
|
|
28
|
+
* chant #1044 adds a third question, for the same reason the first two
|
|
29
|
+
* exist: `foldsAsCall` opts an intrinsic's PLAIN-CALL form into folding, so
|
|
30
|
+
* declaring it on something authored as a tagged template claims a form that
|
|
31
|
+
* cannot be called that way. The two flags are mutually exclusive, and a
|
|
32
|
+
* registration setting both is a failure here rather than a silently ignored
|
|
33
|
+
* field.
|
|
34
|
+
*/
|
|
35
|
+
import { existsSync, readFileSync } from "fs";
|
|
36
|
+
import { join, dirname } from "path";
|
|
37
|
+
import * as ts from "typescript";
|
|
38
|
+
// ── Parsing helpers ──────────────────────────────────────────────────
|
|
39
|
+
function parseFile(path) {
|
|
40
|
+
if (!existsSync(path))
|
|
41
|
+
return undefined;
|
|
42
|
+
let text;
|
|
43
|
+
try {
|
|
44
|
+
text = readFileSync(path, "utf-8");
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Find `intrinsics(): IntrinsicDef[] { return [ ... ]; }` (or the arrow-
|
|
53
|
+
* function-property equivalent) in a plugin.ts source file and extract each
|
|
54
|
+
* registered `{ name, isTag, foldsAsCall }` triple from the array literal. Returns
|
|
55
|
+
* `undefined` when no `intrinsics` method exists at all (lexicons with no
|
|
56
|
+
* intrinsics, e.g. gcp/k8s, still return `[]` — that's a real empty array,
|
|
57
|
+
* not `undefined`).
|
|
58
|
+
*/
|
|
59
|
+
function extractDeclaredIntrinsics(pluginPath) {
|
|
60
|
+
const sf = parseFile(pluginPath);
|
|
61
|
+
if (!sf)
|
|
62
|
+
return undefined;
|
|
63
|
+
let arrayLiteral;
|
|
64
|
+
const findReturnedArray = (body) => {
|
|
65
|
+
for (const stmt of body.statements) {
|
|
66
|
+
if (ts.isReturnStatement(stmt) && stmt.expression && ts.isArrayLiteralExpression(stmt.expression)) {
|
|
67
|
+
return stmt.expression;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
};
|
|
72
|
+
const visit = (node) => {
|
|
73
|
+
if (arrayLiteral)
|
|
74
|
+
return;
|
|
75
|
+
if (ts.isMethodDeclaration(node) && node.name && ts.isIdentifier(node.name) && node.name.text === "intrinsics" && node.body) {
|
|
76
|
+
arrayLiteral = findReturnedArray(node.body);
|
|
77
|
+
}
|
|
78
|
+
else if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name) && node.name.text === "intrinsics") {
|
|
79
|
+
const init = node.initializer;
|
|
80
|
+
if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) {
|
|
81
|
+
if (init.body && ts.isBlock(init.body)) {
|
|
82
|
+
arrayLiteral = findReturnedArray(init.body);
|
|
83
|
+
}
|
|
84
|
+
else if (init.body && ts.isArrayLiteralExpression(init.body)) {
|
|
85
|
+
arrayLiteral = init.body;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!arrayLiteral)
|
|
90
|
+
ts.forEachChild(node, visit);
|
|
91
|
+
};
|
|
92
|
+
visit(sf);
|
|
93
|
+
if (!arrayLiteral)
|
|
94
|
+
return undefined;
|
|
95
|
+
const result = [];
|
|
96
|
+
for (const el of arrayLiteral.elements) {
|
|
97
|
+
if (!ts.isObjectLiteralExpression(el))
|
|
98
|
+
continue;
|
|
99
|
+
let name;
|
|
100
|
+
let isTag;
|
|
101
|
+
let foldsAsCall;
|
|
102
|
+
for (const prop of el.properties) {
|
|
103
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
104
|
+
continue;
|
|
105
|
+
const key = prop.name.text;
|
|
106
|
+
if (key === "name" && ts.isStringLiteralLike(prop.initializer)) {
|
|
107
|
+
name = prop.initializer.text;
|
|
108
|
+
}
|
|
109
|
+
else if (key === "isTag") {
|
|
110
|
+
if (prop.initializer.kind === ts.SyntaxKind.TrueKeyword)
|
|
111
|
+
isTag = true;
|
|
112
|
+
else if (prop.initializer.kind === ts.SyntaxKind.FalseKeyword)
|
|
113
|
+
isTag = false;
|
|
114
|
+
}
|
|
115
|
+
else if (key === "foldsAsCall") {
|
|
116
|
+
if (prop.initializer.kind === ts.SyntaxKind.TrueKeyword)
|
|
117
|
+
foldsAsCall = true;
|
|
118
|
+
else if (prop.initializer.kind === ts.SyntaxKind.FalseKeyword)
|
|
119
|
+
foldsAsCall = false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (name !== undefined)
|
|
123
|
+
result.push({ name, isTag, foldsAsCall });
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Build a map of publicly-exported name -> where it's really declared, by
|
|
129
|
+
* parsing `src/index.ts`'s top-level `export { a, b as c } from "./file"`
|
|
130
|
+
* statements (every lexicon's intrinsics are re-exported this way) plus
|
|
131
|
+
* direct top-level exported declarations in index.ts itself (`modulePath:
|
|
132
|
+
* "."`). Wildcard re-exports (`export * from "./generated"`) are not
|
|
133
|
+
* expanded — none of the 8 lexicons that register intrinsics export them
|
|
134
|
+
* that way, so this is a deliberate, documented gap rather than a silent one.
|
|
135
|
+
*/
|
|
136
|
+
function extractExportMap(indexPath) {
|
|
137
|
+
const map = new Map();
|
|
138
|
+
const sf = parseFile(indexPath);
|
|
139
|
+
if (!sf)
|
|
140
|
+
return map;
|
|
141
|
+
const hasExportModifier = (node) => !!ts.canHaveModifiers(node) && (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
142
|
+
for (const stmt of sf.statements) {
|
|
143
|
+
if (ts.isExportDeclaration(stmt) && stmt.moduleSpecifier && ts.isStringLiteralLike(stmt.moduleSpecifier)) {
|
|
144
|
+
const modulePath = stmt.moduleSpecifier.text;
|
|
145
|
+
if (stmt.exportClause && ts.isNamedExports(stmt.exportClause)) {
|
|
146
|
+
for (const spec of stmt.exportClause.elements) {
|
|
147
|
+
const exportedName = spec.name.text;
|
|
148
|
+
const localName = spec.propertyName ? spec.propertyName.text : exportedName;
|
|
149
|
+
map.set(exportedName, { modulePath, localName });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (ts.isFunctionDeclaration(stmt) && stmt.name && hasExportModifier(stmt)) {
|
|
155
|
+
map.set(stmt.name.text, { modulePath: ".", localName: stmt.name.text });
|
|
156
|
+
}
|
|
157
|
+
else if (ts.isClassDeclaration(stmt) && stmt.name && hasExportModifier(stmt)) {
|
|
158
|
+
map.set(stmt.name.text, { modulePath: ".", localName: stmt.name.text });
|
|
159
|
+
}
|
|
160
|
+
else if (ts.isVariableStatement(stmt) && hasExportModifier(stmt)) {
|
|
161
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
162
|
+
if (ts.isIdentifier(decl.name)) {
|
|
163
|
+
map.set(decl.name.text, { modulePath: ".", localName: decl.name.text });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return map;
|
|
169
|
+
}
|
|
170
|
+
/** True when a parameter list's first entry is typed `TemplateStringsArray`. */
|
|
171
|
+
function firstParamIsTemplateStringsArray(params) {
|
|
172
|
+
const first = params[0];
|
|
173
|
+
if (!first?.type || !ts.isTypeReferenceNode(first.type))
|
|
174
|
+
return false;
|
|
175
|
+
const typeName = first.type.typeName;
|
|
176
|
+
const text = ts.isIdentifier(typeName) ? typeName.text : typeName.right.text;
|
|
177
|
+
return text === "TemplateStringsArray";
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Resolve whether the declaration named `target.localName` in the module
|
|
181
|
+
* `target.modulePath` (relative to `indexPath`) is authored as a tagged
|
|
182
|
+
* template. Returns `{ found: false }` when the declaration can't be
|
|
183
|
+
* located — a function declared but never found is treated as unverifiable,
|
|
184
|
+
* not as a pass.
|
|
185
|
+
*/
|
|
186
|
+
function resolveActualIsTag(indexPath, target) {
|
|
187
|
+
const filePath = target.modulePath === "."
|
|
188
|
+
? indexPath
|
|
189
|
+
: join(dirname(indexPath), `${target.modulePath.replace(/^\.\//, "")}.ts`);
|
|
190
|
+
const sf = parseFile(filePath);
|
|
191
|
+
if (!sf)
|
|
192
|
+
return { found: false };
|
|
193
|
+
let result;
|
|
194
|
+
for (const stmt of sf.statements) {
|
|
195
|
+
if (result)
|
|
196
|
+
break;
|
|
197
|
+
if (ts.isFunctionDeclaration(stmt) && stmt.name?.text === target.localName) {
|
|
198
|
+
result = { found: true, isTag: firstParamIsTemplateStringsArray(stmt.parameters) };
|
|
199
|
+
}
|
|
200
|
+
else if (ts.isClassDeclaration(stmt) && stmt.name?.text === target.localName) {
|
|
201
|
+
// A class is invoked with `new X(...)`, never as a tagged template.
|
|
202
|
+
result = { found: true, isTag: false };
|
|
203
|
+
}
|
|
204
|
+
else if (ts.isVariableStatement(stmt)) {
|
|
205
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
206
|
+
if (!ts.isIdentifier(decl.name) || decl.name.text !== target.localName)
|
|
207
|
+
continue;
|
|
208
|
+
const init = decl.initializer;
|
|
209
|
+
if (init && (ts.isArrowFunction(init) || ts.isFunctionExpression(init))) {
|
|
210
|
+
result = { found: true, isTag: firstParamIsTemplateStringsArray(init.parameters) };
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
// A const object, proxy, `new X()`, etc. — not callable as a tag.
|
|
214
|
+
result = { found: true, isTag: false };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return result ?? { found: false };
|
|
220
|
+
}
|
|
221
|
+
// ── Public entry point ───────────────────────────────────────────────
|
|
222
|
+
/**
|
|
223
|
+
* Audit every intrinsic a lexicon registers in `src/plugin.ts` against
|
|
224
|
+
* `src/index.ts`'s real export surface and each export's authored shape.
|
|
225
|
+
* Returns `[]` for a lexicon with no `intrinsics()` method, or one that
|
|
226
|
+
* registers none — nothing to audit either way.
|
|
227
|
+
*/
|
|
228
|
+
export function auditIntrinsics(lexiconDir) {
|
|
229
|
+
const pluginPath = join(lexiconDir, "src/plugin.ts");
|
|
230
|
+
const indexPath = join(lexiconDir, "src/index.ts");
|
|
231
|
+
const declared = extractDeclaredIntrinsics(pluginPath);
|
|
232
|
+
if (!declared || declared.length === 0)
|
|
233
|
+
return [];
|
|
234
|
+
const exportMap = extractExportMap(indexPath);
|
|
235
|
+
const items = [];
|
|
236
|
+
for (const d of declared) {
|
|
237
|
+
const target = exportMap.get(d.name);
|
|
238
|
+
if (!target) {
|
|
239
|
+
items.push({
|
|
240
|
+
name: d.name,
|
|
241
|
+
declaredIsTag: d.isTag,
|
|
242
|
+
declaredFoldsAsCall: d.foldsAsCall,
|
|
243
|
+
exported: false,
|
|
244
|
+
actualIsTag: undefined,
|
|
245
|
+
ok: false,
|
|
246
|
+
detail: `"${d.name}" is registered in plugin.ts intrinsics() but is not exported from src/index.ts`,
|
|
247
|
+
callFormOk: true,
|
|
248
|
+
});
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const resolved = resolveActualIsTag(indexPath, target);
|
|
252
|
+
if (!resolved.found) {
|
|
253
|
+
items.push({
|
|
254
|
+
name: d.name,
|
|
255
|
+
declaredIsTag: d.isTag,
|
|
256
|
+
declaredFoldsAsCall: d.foldsAsCall,
|
|
257
|
+
exported: true,
|
|
258
|
+
actualIsTag: undefined,
|
|
259
|
+
ok: false,
|
|
260
|
+
detail: `could not locate the declaration of "${d.name}" (exported from ${target.modulePath}) to verify it against isTag`,
|
|
261
|
+
callFormOk: true,
|
|
262
|
+
});
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const declaredTag = d.isTag === true;
|
|
266
|
+
const ok = resolved.isTag === declaredTag;
|
|
267
|
+
// chant #1044 — `foldsAsCall` opts the PLAIN-CALL form in, so it is
|
|
268
|
+
// meaningless (and, if honored, wrong) on a tagged template. Judged
|
|
269
|
+
// against how the export is really authored, not against the sibling
|
|
270
|
+
// `isTag` claim, which may itself be the thing that's wrong.
|
|
271
|
+
const callFormOk = !(d.foldsAsCall === true && resolved.isTag === true);
|
|
272
|
+
items.push({
|
|
273
|
+
name: d.name,
|
|
274
|
+
declaredIsTag: d.isTag,
|
|
275
|
+
declaredFoldsAsCall: d.foldsAsCall,
|
|
276
|
+
exported: true,
|
|
277
|
+
actualIsTag: resolved.isTag,
|
|
278
|
+
ok,
|
|
279
|
+
callFormOk,
|
|
280
|
+
callFormDetail: callFormOk
|
|
281
|
+
? undefined
|
|
282
|
+
: `"${d.name}" is authored as a tagged template but registered with foldsAsCall: true — the call-form opt-in applies to plain-call intrinsics only`,
|
|
283
|
+
detail: ok
|
|
284
|
+
? undefined
|
|
285
|
+
: resolved.isTag
|
|
286
|
+
? `"${d.name}" is authored as a tagged template (first param: TemplateStringsArray) but registered with isTag: ${d.isTag ?? "undefined"}`
|
|
287
|
+
: `"${d.name}" is a plain call/declaration (not a tagged template) but registered with isTag: true`,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
return items;
|
|
291
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit of the names a lexicon's MCP contributions are registered under (#1341).
|
|
3
|
+
*
|
|
4
|
+
* Core namespaces every contribution — `<lexicon>:<verb>` for a tool,
|
|
5
|
+
* `chant://<lexicon>/<path>` for a resource — but core is not the only place
|
|
6
|
+
* that applies a prefix. `createDiffTool`/`createCatalogResource`
|
|
7
|
+
* (../../lexicon-plugin-helpers.ts) emit `<lexicon>:diff` and
|
|
8
|
+
* `<lexicon>:resource-catalog`, eleven lexicons write the prefix into the name
|
|
9
|
+
* by hand, and `lexicon-authoring/lsp-mcp.mdx` taught a third form for URIs.
|
|
10
|
+
* Applying the namespace unconditionally shipped `gitlab:gitlab:diff`,
|
|
11
|
+
* `aws:aws:diff`, and `chant://azure/chant://lexicon/azure/catalog` in every
|
|
12
|
+
* `chant serve mcp` session, while every doc named the single-prefixed form.
|
|
13
|
+
*
|
|
14
|
+
* The rule this checks is the one an agent experiences, not the one a lexicon
|
|
15
|
+
* author typed: whatever the declaration style, the registered name must be a
|
|
16
|
+
* single well-formed namespaced identifier. That keeps the check indifferent to
|
|
17
|
+
* which of the three authored forms a lexicon uses, and still fails the moment a
|
|
18
|
+
* name doubles or carries an embedded scheme.
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync } from "fs";
|
|
21
|
+
import { basename, join } from "path";
|
|
22
|
+
import { namespacedToolName, namespacedResourceUri } from "../mcp/server.js";
|
|
23
|
+
/** `@intentius/chant-lexicon-aws` → `aws`; falls back to the directory name. */
|
|
24
|
+
export function lexiconNameFor(dir) {
|
|
25
|
+
try {
|
|
26
|
+
const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
|
|
27
|
+
const match = /chant-lexicon-([a-z0-9-]+)$/.exec(pkg.name ?? "");
|
|
28
|
+
if (match)
|
|
29
|
+
return match[1];
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// fall through to the directory name
|
|
33
|
+
}
|
|
34
|
+
return basename(dir);
|
|
35
|
+
}
|
|
36
|
+
const toolPattern = (lexicon) => new RegExp(`^${lexicon}:[a-z0-9][a-z0-9-]*$`);
|
|
37
|
+
const resourcePattern = (lexicon) => new RegExp(`^chant://${lexicon}/[A-Za-z0-9][A-Za-z0-9._/-]*$`);
|
|
38
|
+
/**
|
|
39
|
+
* The malformed registered names among a lexicon's contributions. Pure, so the
|
|
40
|
+
* rule can be tested without loading a lexicon package.
|
|
41
|
+
*/
|
|
42
|
+
export function mcpNameViolations(lexicon, tools, resources) {
|
|
43
|
+
const violations = [];
|
|
44
|
+
for (const tool of tools) {
|
|
45
|
+
const registered = namespacedToolName(lexicon, tool.name);
|
|
46
|
+
if (!toolPattern(lexicon).test(registered)) {
|
|
47
|
+
violations.push(`tool ${JSON.stringify(tool.name)} registers as ${JSON.stringify(registered)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
for (const resource of resources) {
|
|
51
|
+
const registered = namespacedResourceUri(lexicon, resource.uri);
|
|
52
|
+
if (!resourcePattern(lexicon).test(registered)) {
|
|
53
|
+
violations.push(`resource ${JSON.stringify(resource.uri)} registers as ${JSON.stringify(registered)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return violations;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Register this lexicon's MCP contributions the way the server does and check
|
|
60
|
+
* the resulting names.
|
|
61
|
+
*/
|
|
62
|
+
export async function auditMcpNames(dir) {
|
|
63
|
+
const lexicon = lexiconNameFor(dir);
|
|
64
|
+
let plugin;
|
|
65
|
+
try {
|
|
66
|
+
const { loadPlugins } = await import("../plugins.js");
|
|
67
|
+
const plugins = await loadPlugins([lexicon]);
|
|
68
|
+
if (plugins.length === 0)
|
|
69
|
+
return { checked: 0, violations: [], loaded: false };
|
|
70
|
+
plugin = plugins[0];
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return { checked: 0, violations: [], loaded: false };
|
|
74
|
+
}
|
|
75
|
+
const tools = plugin.mcpTools?.() ?? [];
|
|
76
|
+
const resources = plugin.mcpResources?.() ?? [];
|
|
77
|
+
return {
|
|
78
|
+
checked: tools.length + resources.length,
|
|
79
|
+
violations: mcpNameViolations(lexicon, tools, resources),
|
|
80
|
+
loaded: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-lexicon-plugin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check-lexicon-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"check-lexicon-plugin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check-lexicon-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGpE,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoB9D;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyB5E;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,GAAG,OAAO,CAE/F;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAOvF"}
|