@intentius/chant 0.124.13 → 0.124.15
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.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -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.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -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.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -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.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -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.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -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 +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- 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 +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -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.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -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.d.ts +1 -1
- 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.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -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.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -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.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- 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.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- 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 +462 -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.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -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.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -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 +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -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/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- 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/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- 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/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexicons declared by module path (chant #2520).
|
|
3
|
+
*
|
|
4
|
+
* A `lexicons` entry has always been a bare name, and chant resolves a name to
|
|
5
|
+
* the package `@intentius/chant-lexicon-<name>`. A project that writes its own
|
|
6
|
+
* lexicon in the same repo can instead point at the module:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* export default {
|
|
10
|
+
* lexicons: ["fly", { name: "site", module: "./lexicon/index.ts" }],
|
|
11
|
+
* } satisfies ChantConfig;
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The path is resolved against the directory holding `chant.config.ts`. That
|
|
15
|
+
* module is the whole lexicon: its `LexiconPlugin` export is the plugin, the
|
|
16
|
+
* plugin's `activities()` and `activityContracts()` members stand in for the
|
|
17
|
+
* `op/activities` and `op/activity-contracts` subpaths, a `CapabilityPlugin`
|
|
18
|
+
* export feeds the capability registry, and an `evaluateGatePolicy` export
|
|
19
|
+
* stands in for the `gate-policy` subpath.
|
|
20
|
+
*
|
|
21
|
+
* Loaders take lexicon names, so the config loader records each path-declared
|
|
22
|
+
* name here and every loader asks {@link lexiconModulePath} before falling back
|
|
23
|
+
* to the package name. A name declared as a plain string is never recorded, so
|
|
24
|
+
* a project that names lexicons by package takes exactly the path it always did.
|
|
25
|
+
*/
|
|
26
|
+
import { createRequire } from "node:module";
|
|
27
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
28
|
+
import { pathToFileURL } from "node:url";
|
|
29
|
+
import { ensureTypeScriptLoader } from "./ts-loader.js";
|
|
30
|
+
/** The lexicon name an entry declares, whichever form it takes. */
|
|
31
|
+
export function lexiconDeclarationName(entry) {
|
|
32
|
+
return typeof entry === "string" ? entry : entry.name;
|
|
33
|
+
}
|
|
34
|
+
export function lexiconNames(entries) {
|
|
35
|
+
return entries?.map(lexiconDeclarationName);
|
|
36
|
+
}
|
|
37
|
+
/** Name to absolute module path, for the lexicons declared by path in the configs loaded so far. */
|
|
38
|
+
const modulePaths = new Map();
|
|
39
|
+
/** Name to the absolute directory fold trusts for that lexicon (chant#2590). Absent: only the module is trusted. */
|
|
40
|
+
const moduleRoots = new Map();
|
|
41
|
+
/** True when `path` is `dir` itself or lies under it. Both are absolute. */
|
|
42
|
+
function isWithin(path, dir) {
|
|
43
|
+
const rel = relative(dir, path);
|
|
44
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* chant#2590 — the directory fold trusts for a lexicon declared by path.
|
|
48
|
+
*
|
|
49
|
+
* A package has a root that bounds its subpaths. A module path has none, so
|
|
50
|
+
* the directory is either the one `root` names, resolved like `module`, or the
|
|
51
|
+
* module's own directory. It must lie inside the project (`baseDir`, the
|
|
52
|
+
* directory holding `chant.config.ts`) and must not contain the project's
|
|
53
|
+
* source directory (`sourceDir`, relative to `baseDir`, default `.`). The
|
|
54
|
+
* module must lie inside it.
|
|
55
|
+
*
|
|
56
|
+
* Returns the directory, or `undefined` when only the module file is trusted.
|
|
57
|
+
* A declared `root` that breaks a rule returns a `problem` to report; the
|
|
58
|
+
* module's own directory breaking one (a module at the project root, say)
|
|
59
|
+
* just leaves the lexicon with its module file.
|
|
60
|
+
*/
|
|
61
|
+
export function pathLexiconRoot(entry, baseDir, sourceDir = ".") {
|
|
62
|
+
const modulePath = isAbsolute(entry.module) ? entry.module : resolve(baseDir, entry.module);
|
|
63
|
+
const declared = entry.root !== undefined;
|
|
64
|
+
const candidate = declared
|
|
65
|
+
? isAbsolute(entry.root)
|
|
66
|
+
? resolve(entry.root)
|
|
67
|
+
: resolve(baseDir, entry.root)
|
|
68
|
+
: dirname(modulePath);
|
|
69
|
+
const project = resolve(baseDir);
|
|
70
|
+
const source = resolve(baseDir, sourceDir);
|
|
71
|
+
let problem;
|
|
72
|
+
if (!isWithin(candidate, project))
|
|
73
|
+
problem = `${candidate} is outside the project (${project})`;
|
|
74
|
+
else if (isWithin(source, candidate))
|
|
75
|
+
problem = `${candidate} contains the project's source directory (${source})`;
|
|
76
|
+
else if (!isWithin(modulePath, candidate))
|
|
77
|
+
problem = `the module ${modulePath} is not inside ${candidate}`;
|
|
78
|
+
if (problem === undefined)
|
|
79
|
+
return { root: candidate };
|
|
80
|
+
return declared ? { problem } : {};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Record the path-declared entries of one loaded config. `baseDir` is the
|
|
84
|
+
* directory the config file sits in. A plain-string entry for a name removes
|
|
85
|
+
* any path recorded for it earlier in this process, so loading a second
|
|
86
|
+
* project (the example harness does) cannot leave the first one's module in
|
|
87
|
+
* place of a package.
|
|
88
|
+
*
|
|
89
|
+
* Returns the recorded name-to-path map for this config, empty when every
|
|
90
|
+
* entry is a plain name.
|
|
91
|
+
*/
|
|
92
|
+
export function registerLexiconDeclarations(entries, baseDir, sourceDir) {
|
|
93
|
+
const recorded = {};
|
|
94
|
+
for (const entry of entries ?? []) {
|
|
95
|
+
if (typeof entry === "string") {
|
|
96
|
+
modulePaths.delete(entry);
|
|
97
|
+
moduleRoots.delete(entry);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const path = declaredModulePath(entry, baseDir);
|
|
101
|
+
modulePaths.set(entry.name, path);
|
|
102
|
+
recorded[entry.name] = path;
|
|
103
|
+
const { root } = pathLexiconRoot(entry, baseDir, sourceDir);
|
|
104
|
+
if (root === undefined)
|
|
105
|
+
moduleRoots.delete(entry.name);
|
|
106
|
+
else
|
|
107
|
+
moduleRoots.set(entry.name, root);
|
|
108
|
+
}
|
|
109
|
+
return recorded;
|
|
110
|
+
}
|
|
111
|
+
function declaredModulePath(entry, baseDir) {
|
|
112
|
+
return isAbsolute(entry.module) ? entry.module : resolve(baseDir, entry.module);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* chant#2589 — the name-to-path map `entries` declare, without recording it.
|
|
116
|
+
* For a caller that must name path lexicons in its messages but must never
|
|
117
|
+
* let a loader import one (`chant audit` runs no project code).
|
|
118
|
+
*/
|
|
119
|
+
export function pathLexiconMap(entries, baseDir) {
|
|
120
|
+
const map = new Map();
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
if (typeof entry !== "string")
|
|
123
|
+
map.set(entry.name, declaredModulePath(entry, baseDir));
|
|
124
|
+
}
|
|
125
|
+
return map;
|
|
126
|
+
}
|
|
127
|
+
/** A copy of the paths recorded so far in this process. */
|
|
128
|
+
export function recordedLexiconModules() {
|
|
129
|
+
return new Map(modulePaths);
|
|
130
|
+
}
|
|
131
|
+
/** The absolute module path `name` was declared with, or `undefined` for a package-backed lexicon. */
|
|
132
|
+
export function lexiconModulePath(name) {
|
|
133
|
+
return modulePaths.get(name);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* chant#2590 — the directory fold trusts for a path-declared lexicon, or
|
|
137
|
+
* `undefined` when only its module file is trusted (or `name` is package-backed).
|
|
138
|
+
* See {@link pathLexiconRoot}.
|
|
139
|
+
*/
|
|
140
|
+
export function lexiconModuleRoot(name) {
|
|
141
|
+
return moduleRoots.get(name);
|
|
142
|
+
}
|
|
143
|
+
/** Forget every recorded path. For tests. */
|
|
144
|
+
export function resetLexiconModules() {
|
|
145
|
+
modulePaths.clear();
|
|
146
|
+
moduleRoots.clear();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Import the module a path-declared lexicon names. Returns `undefined` when
|
|
150
|
+
* `name` is package-backed, so a caller falls through to its package import.
|
|
151
|
+
* An import failure is thrown with the declared path in the message.
|
|
152
|
+
*/
|
|
153
|
+
export async function importLexiconModule(name) {
|
|
154
|
+
const path = modulePaths.get(name);
|
|
155
|
+
if (path === undefined)
|
|
156
|
+
return undefined;
|
|
157
|
+
try {
|
|
158
|
+
ensureTypeScriptLoader();
|
|
159
|
+
return (await import(path));
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
throw new Error(`lexicon "${name}" is declared with module ${path}, which could not be loaded: ` +
|
|
163
|
+
(err instanceof Error ? err.message : String(err)));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* chant#2578 — how a message should name a lexicon. A package-backed name is
|
|
168
|
+
* its npm package; a lexicon declared by path is that path, relative to
|
|
169
|
+
* `fromDir` when it sits under it. `paths` defaults to the paths recorded in
|
|
170
|
+
* this process; see {@link pathLexiconMap} for a map that is not recorded.
|
|
171
|
+
*/
|
|
172
|
+
export function lexiconSourceLabel(name, fromDir = process.cwd(), paths = modulePaths) {
|
|
173
|
+
const path = paths.get(name);
|
|
174
|
+
if (path === undefined)
|
|
175
|
+
return `@intentius/chant-lexicon-${name}`;
|
|
176
|
+
const rel = relative(fromDir, path);
|
|
177
|
+
return rel === "" || rel.startsWith("..") || isAbsolute(rel) ? path : `./${rel.split(sep).join("/")}`;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The npm packages that provide `names`, leaving out every lexicon declared by
|
|
181
|
+
* path: those have nothing to install. `paths` as in {@link lexiconSourceLabel}.
|
|
182
|
+
*/
|
|
183
|
+
export function lexiconPackagesToInstall(names, paths = modulePaths) {
|
|
184
|
+
return names.filter((name) => !paths.has(name)).map((name) => `@intentius/chant-lexicon-${name}`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* chant#2845 — the npm package a bare specifier names: `@scope/name` for a
|
|
188
|
+
* scoped one, else its first segment. `undefined` for a relative or absolute
|
|
189
|
+
* path, which is not a package.
|
|
190
|
+
*/
|
|
191
|
+
export function packageNameOf(spec) {
|
|
192
|
+
if (spec.startsWith(".") || isAbsolute(spec) || spec.startsWith("file:"))
|
|
193
|
+
return undefined;
|
|
194
|
+
const parts = spec.split("/");
|
|
195
|
+
return spec.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
196
|
+
}
|
|
197
|
+
/** True when `err` says the package `pkg` itself could not be found, not something it imports. */
|
|
198
|
+
function isPackageNotFound(err, pkg) {
|
|
199
|
+
const code = err?.code;
|
|
200
|
+
if (code !== "ERR_MODULE_NOT_FOUND" && code !== "MODULE_NOT_FOUND")
|
|
201
|
+
return false;
|
|
202
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
203
|
+
return message.includes(`'${pkg}'`) || message.includes(`"${pkg}"`) || message.includes(`${pkg}/`);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* chant#2845 — resolve `spec` (a lexicon package or one of its subpaths) from
|
|
207
|
+
* `fromDir` instead of from chant's own install, or `undefined` when the
|
|
208
|
+
* project doesn't have it either.
|
|
209
|
+
*/
|
|
210
|
+
export function resolveFromProject(spec, fromDir = process.cwd()) {
|
|
211
|
+
try {
|
|
212
|
+
return createRequire(join(fromDir, "package.json")).resolve(spec);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* chant#2845 — import a lexicon package, or one of its subpaths, by its bare
|
|
220
|
+
* specifier. chant's own install is tried first, as a bare `import()` always
|
|
221
|
+
* did, so a lexicon chant can reach loads exactly as before. When the package
|
|
222
|
+
* isn't there, which is the case for a chant installed globally and a project
|
|
223
|
+
* that installs its lexicons in its own node_modules, it is resolved from
|
|
224
|
+
* `fromDir` (the project) and imported from there. Any other failure, and a
|
|
225
|
+
* package the project doesn't have either, rethrows the first error.
|
|
226
|
+
*/
|
|
227
|
+
export async function importLexiconPackage(spec, fromDir = process.cwd()) {
|
|
228
|
+
try {
|
|
229
|
+
ensureTypeScriptLoader();
|
|
230
|
+
return (await import(spec));
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
const pkg = packageNameOf(spec);
|
|
234
|
+
if (pkg === undefined || !isPackageNotFound(err, pkg))
|
|
235
|
+
throw err;
|
|
236
|
+
const resolved = resolveFromProject(spec, fromDir);
|
|
237
|
+
if (resolved === undefined)
|
|
238
|
+
throw err;
|
|
239
|
+
return (await import(pathToFileURL(resolved).href));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { INTRINSIC_MARKER, isIntrinsic } from "./intrinsic.js";
|
|
3
|
+
import { isAttrRefLike } from "./utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* Marker symbol for LexiconOutput identification (chant #1122).
|
|
6
|
+
*
|
|
7
|
+
* A GLOBAL symbol (via `Symbol.for`), like every other chant-core brand
|
|
8
|
+
* check — `DECLARABLE_MARKER`, `STACK_OUTPUT_MARKER`, `INTRINSIC_MARKER` —
|
|
9
|
+
* holds across separately-loaded copies of chant-core the way `instanceof`
|
|
10
|
+
* does not. Two copies in one process is a plain npm-dedupe outcome: a
|
|
11
|
+
* lexicon pinned to a chant range that does not overlap the project's own
|
|
12
|
+
* gets a nested `node_modules/@intentius/chant`, and a project file
|
|
13
|
+
* importing `output` from that lexicon then holds a different `LexiconOutput`
|
|
14
|
+
* class than the CLI does. `instanceof LexiconOutput` returns false for a
|
|
15
|
+
* real output built by the other copy, and every `Outputs` entry vanishes
|
|
16
|
+
* silently.
|
|
17
|
+
*
|
|
18
|
+
* Installed non-enumerably in the constructor (not as a public class field)
|
|
19
|
+
* so a shallow spread/clone of a real instance — which would already lack
|
|
20
|
+
* its prototype methods (`getOutputValue()`, `_setSourceEntity()`, …) — does
|
|
21
|
+
* not silently pick up the marker and pass this guard too.
|
|
22
|
+
*/
|
|
23
|
+
export const LEXICON_OUTPUT_MARKER = Symbol.for("chant.lexiconOutput");
|
|
24
|
+
/**
|
|
25
|
+
* Sanitize auto-generated Output name parts into a valid CloudFormation
|
|
26
|
+
* logical id. Real CloudFormation logical ids (including `Outputs` keys)
|
|
27
|
+
* must match `^[A-Za-z0-9]+$` — no dots, underscores, or other punctuation.
|
|
28
|
+
*
|
|
29
|
+
* Splits every part on runs of non-alphanumeric characters (dots from a
|
|
30
|
+
* nested `Fn::GetAtt` attribute path, underscores, hyphens, etc.) and
|
|
31
|
+
* re-joins the resulting segments in camelCase. This keeps the id
|
|
32
|
+
* deterministic and unique per (entityName, attribute) pair while
|
|
33
|
+
* discarding only punctuation — no information is lost, so two distinct
|
|
34
|
+
* inputs only collide if they already differ solely by punctuation.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export function sanitizeLogicalId(...parts) {
|
|
39
|
+
const segments = parts
|
|
40
|
+
.join("_")
|
|
41
|
+
.split(/[^A-Za-z0-9]+/)
|
|
42
|
+
.filter((segment) => segment.length > 0);
|
|
43
|
+
if (segments.length === 0)
|
|
44
|
+
return "Output";
|
|
45
|
+
return segments
|
|
46
|
+
.map((segment, i) => (i === 0 ? segment : segment.charAt(0).toUpperCase() + segment.slice(1)))
|
|
47
|
+
.join("");
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Represents a cross-lexicon output that bridges a producing lexicon (e.g. AWS)
|
|
51
|
+
* with any consuming lexicon (e.g. GitHub, Cloudflare).
|
|
52
|
+
*
|
|
53
|
+
* Implements Intrinsic so it can be used as Value<string> anywhere.
|
|
54
|
+
*
|
|
55
|
+
* Accepts an AttrRef (resource attribute reference), any Intrinsic (e.g. Sub,
|
|
56
|
+
* Join) for computed output values like constructed URLs, or an already-
|
|
57
|
+
* resolved literal (string/number/boolean) — a constant the author's code
|
|
58
|
+
* computed rather than a reference to anything (chant #1121).
|
|
59
|
+
*/
|
|
60
|
+
export class LexiconOutput {
|
|
61
|
+
constructor(ref, name) {
|
|
62
|
+
this[_a] = true;
|
|
63
|
+
Object.defineProperty(this, LEXICON_OUTPUT_MARKER, {
|
|
64
|
+
value: true,
|
|
65
|
+
enumerable: false,
|
|
66
|
+
});
|
|
67
|
+
// Duck-type, not `instanceof` (chant #1137): a lexicon built against a
|
|
68
|
+
// separate copy of `@intentius/chant` produces AttrRefs that fail
|
|
69
|
+
// `instanceof AttrRef` here but carry the same shape — and since AttrRef
|
|
70
|
+
// also implements Intrinsic, missing this branch does not fail loud.
|
|
71
|
+
// The value instead falls into the `isIntrinsic(ref)` branch below,
|
|
72
|
+
// stored as `_intrinsic` rather than an AttrRef-sourced output, so
|
|
73
|
+
// `getOutputValue()` later calls the foreign AttrRef's own `toJSON()`
|
|
74
|
+
// (the `{__attrRef}` wire envelope) instead of emitting `Fn::GetAtt` —
|
|
75
|
+
// a broken Output emitted with no error at synth time.
|
|
76
|
+
if (isAttrRefLike(ref)) {
|
|
77
|
+
const parent = ref.parent.deref();
|
|
78
|
+
if (!parent) {
|
|
79
|
+
throw new Error("Cannot create LexiconOutput: parent entity has been garbage collected");
|
|
80
|
+
}
|
|
81
|
+
if (!("lexicon" in parent) || typeof parent.lexicon !== "string") {
|
|
82
|
+
throw new Error("Cannot create LexiconOutput: parent entity has no lexicon field");
|
|
83
|
+
}
|
|
84
|
+
this.sourceLexicon = parent.lexicon;
|
|
85
|
+
this.sourceEntity = "";
|
|
86
|
+
this.sourceAttribute = ref.attribute;
|
|
87
|
+
this.outputName = name;
|
|
88
|
+
this._sourceParent = ref.parent;
|
|
89
|
+
this._intrinsic = null;
|
|
90
|
+
this._literalValue = null;
|
|
91
|
+
}
|
|
92
|
+
else if (isIntrinsic(ref)) {
|
|
93
|
+
// Intrinsic (Sub, Join, Ref, etc.) — no parent entity tracking needed.
|
|
94
|
+
this.sourceLexicon = "";
|
|
95
|
+
this.sourceEntity = "";
|
|
96
|
+
this.sourceAttribute = null;
|
|
97
|
+
this.outputName = name;
|
|
98
|
+
this._sourceParent = null;
|
|
99
|
+
this._intrinsic = ref;
|
|
100
|
+
this._literalValue = null;
|
|
101
|
+
}
|
|
102
|
+
else if (typeof ref === "string" || typeof ref === "number" || typeof ref === "boolean") {
|
|
103
|
+
// An already-resolved literal — a real string/number/boolean the
|
|
104
|
+
// caller computed (a prop, a template string, a plain constant), not
|
|
105
|
+
// a reference to anything. The `string` arm of the exported type
|
|
106
|
+
// exists for a documented reason: a generated resource's attribute
|
|
107
|
+
// accessor is typed `string` at the TypeScript level but is a real
|
|
108
|
+
// `AttrRef` at runtime, caught by the `isAttrRefLike` check above — so
|
|
109
|
+
// anything that reaches this branch genuinely has no source entity
|
|
110
|
+
// or attribute, and is recorded to be emitted as a plain `Value`
|
|
111
|
+
// rather than a fabricated `Fn::GetAtt` (chant #1121).
|
|
112
|
+
this.sourceLexicon = "";
|
|
113
|
+
this.sourceEntity = "";
|
|
114
|
+
this.sourceAttribute = null;
|
|
115
|
+
this.outputName = name;
|
|
116
|
+
this._sourceParent = null;
|
|
117
|
+
this._intrinsic = null;
|
|
118
|
+
this._literalValue = ref;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Neither a reference NOR a resolved value — most commonly `undefined`
|
|
122
|
+
// from accessing a resource member that looks like an attribute but
|
|
123
|
+
// isn't one (a typo, or a genuine prop that was never wired onto the
|
|
124
|
+
// instance as either an AttrRef or an echoed literal). Silently
|
|
125
|
+
// treating this as a literal would trade one invalid Output (a
|
|
126
|
+
// fabricated `Fn::GetAtt`) for another (a `Value` that is missing or
|
|
127
|
+
// `null`) — fail loudly instead, the same call `stackOutput()` already
|
|
128
|
+
// makes for a ref it cannot anchor (chant #1121).
|
|
129
|
+
throw new Error(`output(ref, "${name}"): ref must be an AttrRef, an Intrinsic, or an already-resolved string/number/boolean — got ${ref === null ? "null" : typeof ref} instead. If this came from a resource member access (e.g. "resource.SomeField"), that member is neither a generated attribute nor a real value here — check for a typo or a property that CloudFormation does not expose via Fn::GetAtt.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set the source entity logical name.
|
|
134
|
+
* Called during build when entity names are resolved.
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
_setSourceEntity(name) {
|
|
138
|
+
this.sourceEntity = name;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns the CloudFormation Output Value for this output.
|
|
142
|
+
* For a literal output: the resolved value itself, verbatim.
|
|
143
|
+
* For AttrRef-based outputs: emits Fn::GetAtt.
|
|
144
|
+
* For Intrinsic-based outputs: delegates to the intrinsic's toJSON().
|
|
145
|
+
*/
|
|
146
|
+
getOutputValue() {
|
|
147
|
+
if (this._literalValue !== null) {
|
|
148
|
+
return this._literalValue;
|
|
149
|
+
}
|
|
150
|
+
if (this._intrinsic) {
|
|
151
|
+
return this._intrinsic.toJSON();
|
|
152
|
+
}
|
|
153
|
+
return { "Fn::GetAtt": [this.sourceEntity, this.sourceAttribute] };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a LexiconOutput with an auto-generated name from entity name and attribute.
|
|
157
|
+
* Used during cross-lexicon ref auto-detection.
|
|
158
|
+
*
|
|
159
|
+
* The name is sanitized to a valid CloudFormation logical id (see
|
|
160
|
+
* {@link sanitizeLogicalId}) since it is used verbatim as the `Outputs`
|
|
161
|
+
* key by lexicon serializers (e.g. AWS CloudFormation), which reject
|
|
162
|
+
* dots or underscores in logical ids.
|
|
163
|
+
*
|
|
164
|
+
* @param ref - The AttrRef pointing to the source entity
|
|
165
|
+
* @param entityName - The logical name of the source entity
|
|
166
|
+
* @returns A LexiconOutput with a name derived from `{entityName}{Attribute}`
|
|
167
|
+
*/
|
|
168
|
+
static auto(ref, entityName) {
|
|
169
|
+
const name = sanitizeLogicalId(entityName, ref.attribute);
|
|
170
|
+
const output = new LexiconOutput(ref, name);
|
|
171
|
+
output._setSourceEntity(entityName);
|
|
172
|
+
return output;
|
|
173
|
+
}
|
|
174
|
+
toJSON() {
|
|
175
|
+
return { "chant::output": this.outputName };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
_a = INTRINSIC_MARKER;
|
|
179
|
+
/**
|
|
180
|
+
* Create a LexiconOutput from an AttrRef, an Intrinsic, or an already-
|
|
181
|
+
* resolved literal, and a user-provided output name.
|
|
182
|
+
*
|
|
183
|
+
* Usage with AttrRef:
|
|
184
|
+
* ```ts
|
|
185
|
+
* const bucketArn = output(dataBucket.arn, "DataBucketArn");
|
|
186
|
+
* ```
|
|
187
|
+
*
|
|
188
|
+
* Usage with an intrinsic (e.g. a constructed URL):
|
|
189
|
+
* ```ts
|
|
190
|
+
* const solrUrl = output(Sub`http://${Ref(albDnsName)}/solr`, "solrUrl");
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* Usage with a literal (chant #1121) — a real value the caller already
|
|
194
|
+
* computed, not a reference:
|
|
195
|
+
* ```ts
|
|
196
|
+
* const apiVersion = output("v1", "ApiVersion");
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export function output(ref, name) {
|
|
200
|
+
return new LexiconOutput(ref, name);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Type guard to check if a value is a LexiconOutput.
|
|
204
|
+
*
|
|
205
|
+
* Structural, not `instanceof` (chant #1122) — keys off {@link
|
|
206
|
+
* LEXICON_OUTPUT_MARKER}, a global symbol, so it holds across separately-
|
|
207
|
+
* loaded copies of chant-core the way `instanceof` does not. Every caller
|
|
208
|
+
* (`collect.ts`, `build.ts`, `graph-ir.ts`, `entity-wire-codec.ts`) reads
|
|
209
|
+
* only own-prototype members off the result (`outputName`, `_sourceParent`,
|
|
210
|
+
* `_setSourceEntity()`, `getOutputValue()`), all of which work identically
|
|
211
|
+
* on a cross-copy instance.
|
|
212
|
+
*/
|
|
213
|
+
export function isLexiconOutput(value) {
|
|
214
|
+
return (typeof value === "object" &&
|
|
215
|
+
value !== null &&
|
|
216
|
+
LEXICON_OUTPUT_MARKER in value &&
|
|
217
|
+
value[LEXICON_OUTPUT_MARKER] === true);
|
|
218
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for lexicon plugin implementations.
|
|
3
|
+
*
|
|
4
|
+
* Eliminates boilerplate across the 15 lexicon plugins that use it by providing
|
|
5
|
+
* factory functions for common plugin methods: skills loading,
|
|
6
|
+
* MCP diff tool, and MCP catalog resource.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from "fs";
|
|
9
|
+
import { join, dirname } from "path";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
/**
|
|
12
|
+
* Create a skills loader that reads .md files from a lexicon's skills directory.
|
|
13
|
+
*
|
|
14
|
+
* Usage in a plugin:
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { createSkillsLoader } from "@intentius/chant/lexicon-plugin-helpers";
|
|
17
|
+
*
|
|
18
|
+
* const loadSkills = createSkillsLoader(import.meta.url, [
|
|
19
|
+
* { file: "chant-aws.md", name: "chant-aws", description: "..." },
|
|
20
|
+
* ]);
|
|
21
|
+
*
|
|
22
|
+
* // In plugin:
|
|
23
|
+
* skills() { return loadSkills(); }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function createSkillsLoader(importMetaUrl, specs) {
|
|
27
|
+
return () => {
|
|
28
|
+
const skillsDir = join(dirname(fileURLToPath(importMetaUrl)), "skills");
|
|
29
|
+
return specs.map(({ file, ...meta }) => {
|
|
30
|
+
try {
|
|
31
|
+
const content = readFileSync(join(skillsDir, file), "utf-8");
|
|
32
|
+
return { ...meta, content };
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { ...meta, content: "" };
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// ── MCP Diff Tool ─────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Create an MCP diff tool contribution for a lexicon.
|
|
43
|
+
*
|
|
44
|
+
* All lexicons (except Azure) expose an identical-shape "diff" tool that
|
|
45
|
+
* compares current build output against previous output using the lexicon's
|
|
46
|
+
* serializer. The tool name is namespaced by `lexiconName` (e.g. `gcp:diff`)
|
|
47
|
+
* so multiple lexicons loaded together don't collide on the same tool key.
|
|
48
|
+
*/
|
|
49
|
+
export function createDiffTool(serializer, description, lexiconName) {
|
|
50
|
+
return {
|
|
51
|
+
name: `${lexiconName}:diff`,
|
|
52
|
+
description,
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
path: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Path to the infrastructure project directory",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
async handler(params) {
|
|
63
|
+
const { diffCommand } = await import("./cli/commands/diff.js");
|
|
64
|
+
const result = await diffCommand({
|
|
65
|
+
path: params.path ?? ".",
|
|
66
|
+
serializers: [serializer],
|
|
67
|
+
});
|
|
68
|
+
return result;
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// ── MCP Catalog Resource ──────────────────────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Create an MCP resource that serves the lexicon's meta.json as a catalog.
|
|
75
|
+
*
|
|
76
|
+
* Most lexicons expose a "resource-catalog" resource with identical
|
|
77
|
+
* structure. The URI is namespaced by `lexiconName` (e.g.
|
|
78
|
+
* `gcp:resource-catalog`) so multiple lexicons loaded together don't
|
|
79
|
+
* collide on the same resource key.
|
|
80
|
+
*
|
|
81
|
+
* @param importMetaUrl — The plugin's import.meta.url (used to locate generated JSON)
|
|
82
|
+
* @param name — Display name (e.g. "AWS Resource Catalog")
|
|
83
|
+
* @param description — Resource description
|
|
84
|
+
* @param lexiconJsonFile — Filename of the generated lexicon JSON (e.g. "lexicon-aws.json")
|
|
85
|
+
* @param lexiconName — Short lexicon name (e.g. "aws", "gcp"). Becomes the URI prefix.
|
|
86
|
+
*/
|
|
87
|
+
export function createCatalogResource(importMetaUrl, name, description, lexiconJsonFile, lexiconName) {
|
|
88
|
+
return {
|
|
89
|
+
uri: `${lexiconName}:resource-catalog`,
|
|
90
|
+
name,
|
|
91
|
+
description,
|
|
92
|
+
mimeType: "application/json",
|
|
93
|
+
async handler() {
|
|
94
|
+
const dir = dirname(fileURLToPath(importMetaUrl));
|
|
95
|
+
const lexicon = JSON.parse(readFileSync(join(dir, "generated", lexiconJsonFile), "utf-8"));
|
|
96
|
+
const entries = Object.entries(lexicon).map(([className, entry]) => ({
|
|
97
|
+
className,
|
|
98
|
+
resourceType: entry.resourceType,
|
|
99
|
+
kind: entry.kind,
|
|
100
|
+
}));
|
|
101
|
+
return JSON.stringify(entries);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|