@intentius/chant 0.124.12 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { importLexiconModule, importLexiconPackage, lexiconModulePath, lexiconNames, registerLexiconDeclarations, resolveFromProject } from "../lexicon-module.js";
|
|
2
|
+
import { readLexiconDeclarationsStatically } from "../config-static.js";
|
|
3
|
+
export { unknownPathLexiconsNotice } from "../config-static.js";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
8
|
+
import { isLexiconPlugin } from "../lexicon.js";
|
|
9
|
+
import { loadChantConfigUpward } from "../config.js";
|
|
10
|
+
import { findInfraFiles, detectLexicons } from "../index.js";
|
|
11
|
+
import { isNoLexiconDetected } from "../detectLexicon.js";
|
|
12
|
+
import { checkConflicts, describeConflict } from "./conflict-check.js";
|
|
13
|
+
import { prepareProjectCodegen } from "../project-codegen.js";
|
|
14
|
+
/**
|
|
15
|
+
* chant#2591 — record the lexicons the chant.config nearest `dir` declares by
|
|
16
|
+
* path (../lexicon-module.ts), for a command that does not otherwise read the
|
|
17
|
+
* config: `init --force`, `dev onboard` and `import --agents`.
|
|
18
|
+
*
|
|
19
|
+
* The config is read statically (../config-static.ts) and never evaluated,
|
|
20
|
+
* so these commands run no project code to learn it. When the `lexicons`
|
|
21
|
+
* value cannot be read that way, nothing is recorded, every lexicon keeps its
|
|
22
|
+
* package behaviour, and the returned read carries the reason; the caller
|
|
23
|
+
* prints {@link unknownPathLexiconsNotice} for it.
|
|
24
|
+
*/
|
|
25
|
+
export function recordProjectLexicons(dir) {
|
|
26
|
+
const read = readLexiconDeclarationsStatically(dir);
|
|
27
|
+
if (read.status === "read")
|
|
28
|
+
registerLexiconDeclarations(read.entries, dirname(read.configPath));
|
|
29
|
+
return read;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load a single lexicon plugin by lexicon name.
|
|
33
|
+
*
|
|
34
|
+
* Dynamically imports `@intentius/chant-lexicon-{name}` and looks for a
|
|
35
|
+
* LexiconPlugin export. Falls back to wrapping a raw Serializer export.
|
|
36
|
+
*/
|
|
37
|
+
export async function loadPlugin(lexiconName) {
|
|
38
|
+
// chant #2520 — a lexicon declared by module path loads from that module.
|
|
39
|
+
const modulePath = lexiconModulePath(lexiconName);
|
|
40
|
+
if (modulePath !== undefined) {
|
|
41
|
+
const mod = (await importLexiconModule(lexiconName));
|
|
42
|
+
for (const value of Object.values(mod)) {
|
|
43
|
+
if (isLexiconPlugin(value)) {
|
|
44
|
+
if (value.name !== lexiconName) {
|
|
45
|
+
throw new Error(`lexicon "${lexiconName}" is declared with module ${modulePath}, but the plugin it exports is named "${value.name}"`);
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`Module ${modulePath} (lexicon "${lexiconName}") does not export a LexiconPlugin`);
|
|
51
|
+
}
|
|
52
|
+
const packageName = `@intentius/chant-lexicon-${lexiconName}`;
|
|
53
|
+
const mod = (await importLexiconPackage(packageName));
|
|
54
|
+
// Look for an explicit LexiconPlugin export
|
|
55
|
+
for (const value of Object.values(mod)) {
|
|
56
|
+
if (isLexiconPlugin(value)) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Fallback: wrap a raw Serializer export into a minimal plugin
|
|
61
|
+
const serializer = mod.serializer ?? mod.default?.serializer ?? mod[`${lexiconName}Serializer`];
|
|
62
|
+
if (serializer && typeof serializer === "object" && "name" in serializer && "serialize" in serializer) {
|
|
63
|
+
const notSupported = (op) => async () => {
|
|
64
|
+
throw new Error(`${serializer.name}: ${op} is not supported (raw serializer fallback)`);
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
name: serializer.name,
|
|
68
|
+
serializer,
|
|
69
|
+
generate: notSupported("generate"),
|
|
70
|
+
validate: notSupported("validate"),
|
|
71
|
+
coverage: notSupported("coverage"),
|
|
72
|
+
package: notSupported("package"),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
throw new Error(`Package ${packageName} does not export a LexiconPlugin or Serializer`);
|
|
76
|
+
}
|
|
77
|
+
const LEXICON_PACKAGE_PREFIX = "chant-lexicon-";
|
|
78
|
+
/**
|
|
79
|
+
* The names of the lexicon packages installed where {@link loadPlugin} can
|
|
80
|
+
* load them (#2965), sorted. `loadPlugin` imports
|
|
81
|
+
* `@intentius/chant-lexicon-<name>` from chant's own install and then from the
|
|
82
|
+
* project (`importLexiconPackage`), so this lists the `@intentius` scope of
|
|
83
|
+
* every `node_modules` directory Node would search from either place: each
|
|
84
|
+
* ancestor of chant's own module and each ancestor of `projectDir`. A name
|
|
85
|
+
* being listed does not promise it loads; the caller still handles a failure.
|
|
86
|
+
*/
|
|
87
|
+
export function listInstalledLexicons(projectDir = process.cwd()) {
|
|
88
|
+
const names = new Set();
|
|
89
|
+
const starts = [dirname(fileURLToPath(import.meta.url)), resolve(projectDir)];
|
|
90
|
+
for (const start of starts) {
|
|
91
|
+
let dir = start;
|
|
92
|
+
for (;;) {
|
|
93
|
+
const scope = join(dir, "node_modules", "@intentius");
|
|
94
|
+
let entries = [];
|
|
95
|
+
try {
|
|
96
|
+
entries = readdirSync(scope, { withFileTypes: true });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// No @intentius scope here.
|
|
100
|
+
}
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
if (!entry.name.startsWith(LEXICON_PACKAGE_PREFIX))
|
|
103
|
+
continue;
|
|
104
|
+
if (!entry.isDirectory() && !entry.isSymbolicLink())
|
|
105
|
+
continue;
|
|
106
|
+
const name = entry.name.slice(LEXICON_PACKAGE_PREFIX.length);
|
|
107
|
+
if (name !== "")
|
|
108
|
+
names.add(name);
|
|
109
|
+
}
|
|
110
|
+
const parent = dirname(dir);
|
|
111
|
+
if (parent === dir)
|
|
112
|
+
break;
|
|
113
|
+
dir = parent;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return [...names].sort();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The installed version of each named lexicon package (chant #1442).
|
|
120
|
+
*
|
|
121
|
+
* A `LexiconPlugin` does not carry its own version — `LexiconManifest` does,
|
|
122
|
+
* but that is an artifact type describing generated output, not something the
|
|
123
|
+
* plugin object exposes. The version wanted here is a property of the
|
|
124
|
+
* *installed package*, so it is read from the package's own `package.json`.
|
|
125
|
+
*
|
|
126
|
+
* Resolved by walking up from the package's entry point rather than resolving
|
|
127
|
+
* `<pkg>/package.json` directly: lexicon packages declare an `exports` map
|
|
128
|
+
* that does not include `./package.json`, so the direct specifier is blocked
|
|
129
|
+
* by Node. `./manifest` (→ `dist/manifest.json`) is not used either — it is a
|
|
130
|
+
* `prepack` build artifact, absent in a monorepo dev tree, and its absence
|
|
131
|
+
* once read as four unrelated bugs (#1367).
|
|
132
|
+
*
|
|
133
|
+
* A lexicon whose version cannot be determined is omitted rather than
|
|
134
|
+
* recorded as `"unknown"`: a digest that says nothing is honest, one that
|
|
135
|
+
* says `unknown` compares unequal to itself across builds.
|
|
136
|
+
*/
|
|
137
|
+
export function resolveLexiconVersions(lexiconNames) {
|
|
138
|
+
const require_ = createRequire(import.meta.url);
|
|
139
|
+
const versions = {};
|
|
140
|
+
for (const name of lexiconNames) {
|
|
141
|
+
// chant #2520 — a lexicon declared by module path is not an installed
|
|
142
|
+
// package, so it has no package version to report.
|
|
143
|
+
if (lexiconModulePath(name) !== undefined)
|
|
144
|
+
continue;
|
|
145
|
+
const packageName = `@intentius/chant-lexicon-${name}`;
|
|
146
|
+
try {
|
|
147
|
+
// chant#2845 — a lexicon chant's own install can't reach is resolved from the project.
|
|
148
|
+
let entry;
|
|
149
|
+
try {
|
|
150
|
+
entry = require_.resolve(packageName);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
entry = resolveFromProject(packageName);
|
|
154
|
+
if (entry === undefined)
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
157
|
+
let dir = dirname(entry);
|
|
158
|
+
// Bounded walk — a resolved entry point is never deeply nested inside
|
|
159
|
+
// its own package, and an unbounded loop here would climb to `/`.
|
|
160
|
+
for (let depth = 0; depth < 10; depth++) {
|
|
161
|
+
const candidate = join(dir, "package.json");
|
|
162
|
+
if (existsSync(candidate)) {
|
|
163
|
+
const pkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
164
|
+
// Only the lexicon's OWN package.json — a nested dependency's
|
|
165
|
+
// manifest would otherwise be read as the lexicon's version.
|
|
166
|
+
if (pkg.name === packageName && pkg.version) {
|
|
167
|
+
versions[name] = pkg.version;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const parent = dirname(dir);
|
|
172
|
+
if (parent === dir)
|
|
173
|
+
break;
|
|
174
|
+
dir = parent;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Not installed, or not resolvable from here — omit it.
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return versions;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Bind each loaded plugin's `buildRoots` hook (#1548 piece 3) to this
|
|
185
|
+
* invocation's config and project root, producing the closures
|
|
186
|
+
* `BuildOptions.buildRoots` takes — the same extract-then-thread shape the
|
|
187
|
+
* CLI uses for `intrinsics`. Plugins without the hook contribute nothing;
|
|
188
|
+
* an empty array is the common case and `build()` treats it as absent.
|
|
189
|
+
*/
|
|
190
|
+
export function collectBuildRootContributors(plugins, config, projectRoot) {
|
|
191
|
+
// Project-local codegen (../project-codegen.ts) rides the same seam: every
|
|
192
|
+
// build path that renders build roots also has to refuse generated code
|
|
193
|
+
// that drifted from its declared sources, and to let the lexicon load that
|
|
194
|
+
// code (the k8s kinds its serializer must know) before serialization. Its
|
|
195
|
+
// contributor adds no entities; a drift is thrown, which the merge reports
|
|
196
|
+
// as a build error. Runs first, so a build-root hook sees loaded kinds.
|
|
197
|
+
const codegen = (plugins ?? [])
|
|
198
|
+
.filter((plugin) => typeof plugin.projectCodegen === "function")
|
|
199
|
+
.map((plugin) => async () => {
|
|
200
|
+
await prepareProjectCodegen(plugin, projectRoot, config);
|
|
201
|
+
return { entities: new Map() };
|
|
202
|
+
});
|
|
203
|
+
const roots = (plugins ?? [])
|
|
204
|
+
.filter((plugin) => typeof plugin.buildRoots === "function")
|
|
205
|
+
// `entities` is not bindable here — discovery has not run — so the merge
|
|
206
|
+
// hands it in when it calls the closure (#1828 / SOPS provenance).
|
|
207
|
+
.map((plugin) => (ctx) => plugin.buildRoots({ projectRoot, config, entities: ctx?.entities, ...(ctx?.sourceDir !== undefined ? { sourceDir: ctx.sourceDir } : {}) }));
|
|
208
|
+
return [...codegen, ...roots];
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Bind each loaded plugin's `subscribeChanges` seam (#1981) to one environment
|
|
212
|
+
* and its declared entities, producing the `ChangeSubscriber` list `chant
|
|
213
|
+
* operator`'s loop takes, in the same extract-then-thread shape
|
|
214
|
+
* {@link collectBuildRootContributors} uses, and for the same reason: core's
|
|
215
|
+
* operator must not import plugins.
|
|
216
|
+
*
|
|
217
|
+
* Plugins without the seam contribute nothing, so a project whose lexicons all
|
|
218
|
+
* lack it gets a loop that is exactly the timer it always was. `entities` is
|
|
219
|
+
* the per-lexicon slice of a build's declared entities, which is the bound on
|
|
220
|
+
* what a subscription may watch; a lexicon with no declared entities is
|
|
221
|
+
* skipped rather than handed an empty scope to widen.
|
|
222
|
+
*/
|
|
223
|
+
export function collectChangeSubscribers(plugins, options) {
|
|
224
|
+
return (plugins ?? [])
|
|
225
|
+
.filter((plugin) => typeof plugin.subscribeChanges === "function")
|
|
226
|
+
.filter((plugin) => (options.entities.get(plugin.name)?.size ?? 0) > 0)
|
|
227
|
+
.map((plugin) => ({
|
|
228
|
+
lexicon: plugin.name,
|
|
229
|
+
subscribe: (ctx) => plugin.subscribeChanges({
|
|
230
|
+
environment: options.environment,
|
|
231
|
+
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
232
|
+
entities: options.entities.get(plugin.name),
|
|
233
|
+
onChange: ctx.onChange,
|
|
234
|
+
onError: ctx.onError,
|
|
235
|
+
signal: ctx.signal,
|
|
236
|
+
}),
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Load plugins for all detected lexicon names.
|
|
241
|
+
* Calls `init()` on each plugin if present.
|
|
242
|
+
*/
|
|
243
|
+
export async function loadPlugins(lexiconNames) {
|
|
244
|
+
const plugins = [];
|
|
245
|
+
for (const name of lexiconNames) {
|
|
246
|
+
const plugin = await loadPlugin(name);
|
|
247
|
+
if (plugin.init) {
|
|
248
|
+
await plugin.init();
|
|
249
|
+
}
|
|
250
|
+
plugins.push(plugin);
|
|
251
|
+
}
|
|
252
|
+
// Cross-lexicon conflict detection
|
|
253
|
+
const report = checkConflicts(plugins);
|
|
254
|
+
for (const warning of report.warnings) {
|
|
255
|
+
console.warn(`[chant] warning: ${warning.type} "${warning.key}" is provided by multiple lexicons: ${warning.plugins.join(", ")}`);
|
|
256
|
+
}
|
|
257
|
+
if (report.conflicts.length > 0) {
|
|
258
|
+
const details = report.conflicts.map(describeConflict).join("\n");
|
|
259
|
+
throw new Error(`Cross-lexicon conflicts detected:\n${details}`);
|
|
260
|
+
}
|
|
261
|
+
return plugins;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Resolve lexicon names for a project directory.
|
|
265
|
+
*
|
|
266
|
+
* Reads `lexicons` from `chant.config.ts` / `chant.config.json` if present.
|
|
267
|
+
* Falls back to source-file detection via `detectLexicons()`.
|
|
268
|
+
*
|
|
269
|
+
* chant #1045 Phase 2 — this used to fall back to a full `discover()` call
|
|
270
|
+
* just to read its `sourceFiles` list, which imports and RUNS every project
|
|
271
|
+
* source file to collect entities that are then discarded here. That ran
|
|
272
|
+
* unconditionally, on every command that reaches this function without an
|
|
273
|
+
* explicit `chant.config.ts` `lexicons` list (`build`, `lint`, `doctor`,
|
|
274
|
+
* `import`, `graph`, the MCP server — effectively the whole CLI), with no
|
|
275
|
+
* `--fold`/`--sandbox` involved at all: a project could omit `lexicons` and
|
|
276
|
+
* every file would execute here, in the CLI's own process, before the
|
|
277
|
+
* caller's OWN (possibly folded, possibly sandboxed) build ever ran. Fixed
|
|
278
|
+
* by using `findInfraFiles()` alone — the pure directory walk `discover()`
|
|
279
|
+
* itself starts from, no import, no execution — since `detectLexicons()` is
|
|
280
|
+
* already a plain text/regex scan over file contents (`../detectLexicon.ts`)
|
|
281
|
+
* that never needed live module exports to begin with. This is strictly
|
|
282
|
+
* better than routing the detection through the sandbox: it removes the
|
|
283
|
+
* execution entirely rather than containing it, at no bundling/spawn cost.
|
|
284
|
+
*
|
|
285
|
+
* chant #1117 — walks up from `projectPath` to the project root
|
|
286
|
+
* (`loadChantConfigUpward`) rather than reading `projectPath` alone: `chant
|
|
287
|
+
* build src/<stack>` calls this with the stack's own subdirectory, and a
|
|
288
|
+
* project that declares `lexicons` only in its root `chant.config.ts` (never
|
|
289
|
+
* detectable by `detectLexicons()`'s import scan alone, e.g. a lexicon that's
|
|
290
|
+
* loaded but never imported by name in that particular stack's files) would
|
|
291
|
+
* otherwise silently miss it.
|
|
292
|
+
*/
|
|
293
|
+
export async function resolveProjectLexicons(projectPath, options = {}) {
|
|
294
|
+
const requested = options.lexicon;
|
|
295
|
+
const { config } = await loadChantConfigUpward(projectPath);
|
|
296
|
+
let names;
|
|
297
|
+
if (config.lexicons && config.lexicons.length > 0) {
|
|
298
|
+
names = lexiconNames(config.lexicons);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
// Fallback: detect from source imports — a pure text scan, no execution.
|
|
302
|
+
const files = await findInfraFiles(projectPath);
|
|
303
|
+
try {
|
|
304
|
+
names = await detectLexicons(files);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
if (requested && isNoLexiconDetected(error))
|
|
308
|
+
return [requested];
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return requested && !names.includes(requested) ? [...names, requested] : names;
|
|
313
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a command from parsed CLI args against the registry.
|
|
3
|
+
*
|
|
4
|
+
* Supports compound commands like "dev generate" where args.command="dev"
|
|
5
|
+
* and args.path="generate". Falls back to simple command matching.
|
|
6
|
+
*/
|
|
7
|
+
/** Short command aliases. `chant lc …` is sugar for `chant lifecycle …`. */
|
|
8
|
+
const COMMAND_ALIASES = { lc: "lifecycle" };
|
|
9
|
+
export function resolveCommand(args, registry) {
|
|
10
|
+
const command = COMMAND_ALIASES[args.command] ?? args.command;
|
|
11
|
+
// Try compound command first: "dev generate", "serve lsp", "init lexicon"
|
|
12
|
+
const compound = `${command} ${args.path}`;
|
|
13
|
+
const compoundMatch = registry.find((c) => c.name === compound);
|
|
14
|
+
if (compoundMatch) {
|
|
15
|
+
return { def: compoundMatch, compound: true };
|
|
16
|
+
}
|
|
17
|
+
// Try simple command
|
|
18
|
+
const simpleMatch = registry.find((c) => c.name === command);
|
|
19
|
+
if (simpleMatch) {
|
|
20
|
+
return { def: simpleMatch, compound: false };
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { pathToFileURL } from "node:url";
|
|
2
|
+
/**
|
|
3
|
+
* ANSI color codes
|
|
4
|
+
*/
|
|
5
|
+
const colors = {
|
|
6
|
+
red: "\x1b[31m",
|
|
7
|
+
yellow: "\x1b[33m",
|
|
8
|
+
green: "\x1b[32m",
|
|
9
|
+
cyan: "\x1b[36m",
|
|
10
|
+
gray: "\x1b[90m",
|
|
11
|
+
reset: "\x1b[0m",
|
|
12
|
+
bold: "\x1b[1m",
|
|
13
|
+
underline: "\x1b[4m",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Check if colors should be used
|
|
17
|
+
*/
|
|
18
|
+
function useColors() {
|
|
19
|
+
return !process.env.NO_COLOR && process.stdout.isTTY !== false;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Apply color if enabled
|
|
23
|
+
*/
|
|
24
|
+
function color(text, colorCode) {
|
|
25
|
+
if (!useColors())
|
|
26
|
+
return text;
|
|
27
|
+
return `${colorCode}${text}${colors.reset}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Format diagnostics in stylish format (similar to ESLint)
|
|
31
|
+
* Groups by file, shows severity, message, and rule ID
|
|
32
|
+
*
|
|
33
|
+
* @param diagnostics - Active (non-suppressed) diagnostics
|
|
34
|
+
* @param suppressed - Suppressed diagnostics with optional reason (optional). When
|
|
35
|
+
* present and non-empty, a "Suppressed" section is appended (#1866, design #1059)
|
|
36
|
+
* below the active diagnostics, mirroring SARIF's `suppressed` param on
|
|
37
|
+
* {@link formatSarif} rather than changing what "diagnostics" means here.
|
|
38
|
+
* @param bundle - The project's loaded OKF knowledge bundle (`../../okf-read`'s
|
|
39
|
+
* `loadOkfBundle`), used to resolve `okf:` citations in suppression reasons.
|
|
40
|
+
* Omitted (or a bundle with no matching concept) falls back to printing the
|
|
41
|
+
* raw reason with a warning — this never affects suppression itself, only
|
|
42
|
+
* how a cited reason renders.
|
|
43
|
+
*/
|
|
44
|
+
export function formatStylish(diagnostics, suppressed, bundle) {
|
|
45
|
+
const hasSuppressed = suppressed !== undefined && suppressed.length > 0;
|
|
46
|
+
if (diagnostics.length === 0 && !hasSuppressed) {
|
|
47
|
+
return formatSummary(0, 0);
|
|
48
|
+
}
|
|
49
|
+
const lines = [];
|
|
50
|
+
let errorCount = 0;
|
|
51
|
+
let warningCount = 0;
|
|
52
|
+
if (diagnostics.length > 0) {
|
|
53
|
+
// Group by file
|
|
54
|
+
const byFile = new Map();
|
|
55
|
+
for (const diag of diagnostics) {
|
|
56
|
+
const existing = byFile.get(diag.file) ?? [];
|
|
57
|
+
existing.push(diag);
|
|
58
|
+
byFile.set(diag.file, existing);
|
|
59
|
+
}
|
|
60
|
+
for (const [file, fileDiags] of byFile) {
|
|
61
|
+
// File header with underline
|
|
62
|
+
lines.push("");
|
|
63
|
+
lines.push(color(file, colors.underline));
|
|
64
|
+
// Sort by line, then column
|
|
65
|
+
fileDiags.sort((a, b) => {
|
|
66
|
+
if (a.line !== b.line)
|
|
67
|
+
return a.line - b.line;
|
|
68
|
+
return a.column - b.column;
|
|
69
|
+
});
|
|
70
|
+
for (const diag of fileDiags) {
|
|
71
|
+
// Count errors and warnings
|
|
72
|
+
if (diag.severity === "error") {
|
|
73
|
+
errorCount++;
|
|
74
|
+
}
|
|
75
|
+
else if (diag.severity === "warning") {
|
|
76
|
+
warningCount++;
|
|
77
|
+
}
|
|
78
|
+
// Format: " line:col severity message ruleId"
|
|
79
|
+
const location = color(`${String(diag.line).padStart(4)}:${String(diag.column).padEnd(3)}`, colors.gray);
|
|
80
|
+
const severityColor = diag.severity === "error" ? colors.red : colors.yellow;
|
|
81
|
+
const severity = color(diag.severity.padEnd(7), severityColor);
|
|
82
|
+
const ruleId = color(diag.ruleId, colors.gray);
|
|
83
|
+
lines.push(` ${location} ${severity} ${diag.message} ${ruleId}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (hasSuppressed) {
|
|
88
|
+
lines.push(...formatSuppressedSection(suppressed, bundle));
|
|
89
|
+
}
|
|
90
|
+
// Summary line
|
|
91
|
+
lines.push("");
|
|
92
|
+
const summary = formatSummary(errorCount, warningCount);
|
|
93
|
+
lines.push(summary);
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Resolve a suppression reason's `okf:<path>` citation (#1866, design #1059)
|
|
98
|
+
* against a loaded bundle's concepts, matched on `OkfConcept.path`. Not an
|
|
99
|
+
* `okf:` citation at all: returns `null`, and the reason renders as plain
|
|
100
|
+
* text, same as before this section existed. A leading `/` on the cited path
|
|
101
|
+
* is accepted and stripped — `okf-read.ts`'s bundle-relative paths never
|
|
102
|
+
* carry one, but the design doc's worked example writes citations with one
|
|
103
|
+
* (mirroring an absolute-from-bundle-root reading), so both forms resolve.
|
|
104
|
+
*/
|
|
105
|
+
function resolveOkfCitation(reason, bundle) {
|
|
106
|
+
const prefix = "okf:";
|
|
107
|
+
if (!reason.startsWith(prefix))
|
|
108
|
+
return null;
|
|
109
|
+
const token = reason.slice(prefix.length).trim().replace(/^\/+/, "");
|
|
110
|
+
const concept = bundle?.concepts.find((c) => c.path === token);
|
|
111
|
+
if (concept) {
|
|
112
|
+
return { label: concept.title ?? concept.path, path: concept.path, unresolved: false };
|
|
113
|
+
}
|
|
114
|
+
return { label: reason, unresolved: true };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Render the "Suppressed" section: every suppressed diagnostic, grouped by
|
|
118
|
+
* file like the active section above, with an `okf:` reason resolved to its
|
|
119
|
+
* concept's title (and bundle-relative path on the line below) when
|
|
120
|
+
* `bundle` has a match. A citation naming no concept — including when no
|
|
121
|
+
* `bundle` was loaded at all — prints the raw reason plus a warning; a
|
|
122
|
+
* plain (non-`okf:`) reason prints as-is. Never affects which diagnostics
|
|
123
|
+
* are suppressed, only how the reason renders (design #1059: "a cited
|
|
124
|
+
* suppression suppresses exactly as an uncited one does").
|
|
125
|
+
*/
|
|
126
|
+
function formatSuppressedSection(suppressed, bundle) {
|
|
127
|
+
const lines = [];
|
|
128
|
+
const byFile = new Map();
|
|
129
|
+
for (const diag of suppressed) {
|
|
130
|
+
const existing = byFile.get(diag.file) ?? [];
|
|
131
|
+
existing.push(diag);
|
|
132
|
+
byFile.set(diag.file, existing);
|
|
133
|
+
}
|
|
134
|
+
lines.push("");
|
|
135
|
+
lines.push(color("Suppressed", colors.underline));
|
|
136
|
+
for (const [file, fileDiags] of byFile) {
|
|
137
|
+
lines.push("");
|
|
138
|
+
lines.push(color(file, colors.underline));
|
|
139
|
+
fileDiags.sort((a, b) => {
|
|
140
|
+
if (a.line !== b.line)
|
|
141
|
+
return a.line - b.line;
|
|
142
|
+
return a.column - b.column;
|
|
143
|
+
});
|
|
144
|
+
for (const diag of fileDiags) {
|
|
145
|
+
const locationPlain = `${String(diag.line).padStart(4)}:${String(diag.column).padEnd(3)}`;
|
|
146
|
+
const location = color(locationPlain, colors.gray);
|
|
147
|
+
const severity = color("suppressed", colors.cyan);
|
|
148
|
+
const ruleId = color(diag.ruleId, colors.gray);
|
|
149
|
+
const citation = diag.reason ? resolveOkfCitation(diag.reason, bundle) : null;
|
|
150
|
+
const indent = " ".repeat(2 + locationPlain.length + 2 + "suppressed".length + 2 + diag.ruleId.length + 2);
|
|
151
|
+
if (citation) {
|
|
152
|
+
lines.push(` ${location} ${severity} ${ruleId} ${citation.label}`);
|
|
153
|
+
if (!citation.unresolved) {
|
|
154
|
+
lines.push(`${indent}${color(citation.path, colors.gray)}`);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
lines.push(`${indent}${color("⚠ unresolved okf citation", colors.yellow)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (diag.reason) {
|
|
161
|
+
lines.push(` ${location} ${severity} ${ruleId} ${diag.reason}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
lines.push(` ${location} ${severity} ${ruleId}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return lines;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Format the summary line
|
|
172
|
+
*/
|
|
173
|
+
export function formatSummary(errorCount, warningCount) {
|
|
174
|
+
const parts = [];
|
|
175
|
+
if (errorCount > 0) {
|
|
176
|
+
parts.push(color(`${errorCount} error${errorCount === 1 ? "" : "s"}`, colors.red));
|
|
177
|
+
}
|
|
178
|
+
if (warningCount > 0) {
|
|
179
|
+
parts.push(color(`${warningCount} warning${warningCount === 1 ? "" : "s"}`, colors.yellow));
|
|
180
|
+
}
|
|
181
|
+
if (parts.length === 0) {
|
|
182
|
+
return color("✓ No problems found", colors.green);
|
|
183
|
+
}
|
|
184
|
+
const symbol = errorCount > 0 ? "✖" : "⚠";
|
|
185
|
+
return `${symbol} ${parts.join(", ")}`;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Format diagnostics as JSON
|
|
189
|
+
*/
|
|
190
|
+
export function formatJson(diagnostics) {
|
|
191
|
+
return JSON.stringify(diagnostics, null, 2);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Map lint severity to SARIF level
|
|
195
|
+
*/
|
|
196
|
+
function mapSeverity(severity) {
|
|
197
|
+
if (severity === "error")
|
|
198
|
+
return "error";
|
|
199
|
+
if (severity === "warning")
|
|
200
|
+
return "warning";
|
|
201
|
+
return "note";
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Build a SARIF region object, only including endLine/endColumn when available
|
|
205
|
+
*/
|
|
206
|
+
function buildRegion(diag) {
|
|
207
|
+
const region = {
|
|
208
|
+
startLine: diag.line,
|
|
209
|
+
startColumn: diag.column,
|
|
210
|
+
};
|
|
211
|
+
if (diag.endLine !== undefined)
|
|
212
|
+
region.endLine = diag.endLine;
|
|
213
|
+
if (diag.endColumn !== undefined)
|
|
214
|
+
region.endColumn = diag.endColumn;
|
|
215
|
+
return region;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Build a SARIF result from a diagnostic
|
|
219
|
+
*/
|
|
220
|
+
function buildSarifResult(diag, ruleIndex) {
|
|
221
|
+
const result = {
|
|
222
|
+
ruleId: diag.ruleId,
|
|
223
|
+
ruleIndex: ruleIndex.get(diag.ruleId),
|
|
224
|
+
level: mapSeverity(diag.severity),
|
|
225
|
+
message: { text: diag.message },
|
|
226
|
+
locations: [
|
|
227
|
+
{
|
|
228
|
+
physicalLocation: {
|
|
229
|
+
artifactLocation: {
|
|
230
|
+
uri: diag.file.startsWith("/") ? pathToFileURL(diag.file).href : diag.file,
|
|
231
|
+
},
|
|
232
|
+
region: buildRegion(diag),
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
fingerprints: {
|
|
237
|
+
"chant/v1": `${diag.ruleId}:${diag.file}:${diag.line}:${diag.column}`,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Format diagnostics as SARIF (Static Analysis Results Interchange Format)
|
|
244
|
+
*
|
|
245
|
+
* @param diagnostics - Active (non-suppressed) diagnostics
|
|
246
|
+
* @param rules - Full list of loaded LintRules for rich metadata (optional)
|
|
247
|
+
* @param suppressed - Suppressed diagnostics with optional reason (optional)
|
|
248
|
+
* @param version - Tool version string (optional, defaults to "0.1.0")
|
|
249
|
+
*/
|
|
250
|
+
export function formatSarif(diagnostics, rules, suppressed, version) {
|
|
251
|
+
// Build rule metadata from LintRule objects when available, otherwise from diagnostics
|
|
252
|
+
const { sarifRules, ruleIndex } = buildRuleMetadata(diagnostics, suppressed ?? [], rules);
|
|
253
|
+
// Build active results
|
|
254
|
+
const results = diagnostics.map((diag) => buildSarifResult(diag, ruleIndex));
|
|
255
|
+
// Append suppressed results with SARIF suppressions
|
|
256
|
+
if (suppressed) {
|
|
257
|
+
for (const diag of suppressed) {
|
|
258
|
+
const result = buildSarifResult(diag, ruleIndex);
|
|
259
|
+
result.suppressions = [
|
|
260
|
+
{
|
|
261
|
+
kind: "inSource",
|
|
262
|
+
...(diag.reason ? { justification: diag.reason } : {}),
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
results.push(result);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const sarif = {
|
|
269
|
+
$schema: "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
|
|
270
|
+
version: "2.1.0",
|
|
271
|
+
runs: [
|
|
272
|
+
{
|
|
273
|
+
tool: {
|
|
274
|
+
driver: {
|
|
275
|
+
name: "chant",
|
|
276
|
+
version: version ?? "0.1.0",
|
|
277
|
+
informationUri: "https://intentius.io/chant",
|
|
278
|
+
rules: sarifRules,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
results,
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
};
|
|
285
|
+
return JSON.stringify(sarif, null, 2);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Build SARIF rule metadata from loaded LintRules and/or diagnostics.
|
|
289
|
+
* Returns both the rules array and a ruleId→index map for result references.
|
|
290
|
+
*/
|
|
291
|
+
function buildRuleMetadata(diagnostics, suppressed, rules) {
|
|
292
|
+
// Build a lookup from rule objects
|
|
293
|
+
const ruleMap = new Map();
|
|
294
|
+
if (rules) {
|
|
295
|
+
for (const r of rules) {
|
|
296
|
+
ruleMap.set(r.id, r);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Collect all unique rule IDs from diagnostics + suppressed
|
|
300
|
+
const seen = new Set();
|
|
301
|
+
const orderedIds = [];
|
|
302
|
+
for (const diag of [...diagnostics, ...suppressed]) {
|
|
303
|
+
if (!seen.has(diag.ruleId)) {
|
|
304
|
+
seen.add(diag.ruleId);
|
|
305
|
+
orderedIds.push(diag.ruleId);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
const sarifRules = [];
|
|
309
|
+
const ruleIndex = new Map();
|
|
310
|
+
for (const id of orderedIds) {
|
|
311
|
+
const rule = ruleMap.get(id);
|
|
312
|
+
const descText = rule?.description || id;
|
|
313
|
+
const entry = {
|
|
314
|
+
id,
|
|
315
|
+
shortDescription: { text: descText },
|
|
316
|
+
fullDescription: { text: descText },
|
|
317
|
+
helpUri: rule?.helpUri || `https://intentius.io/chant/lint-rules/${id.toLowerCase()}`,
|
|
318
|
+
defaultConfiguration: {
|
|
319
|
+
level: mapSeverity(rule?.severity ?? "warning"),
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
if (rule?.category) {
|
|
323
|
+
entry.properties = { category: rule.category };
|
|
324
|
+
}
|
|
325
|
+
ruleIndex.set(id, sarifRules.length);
|
|
326
|
+
sarifRules.push(entry);
|
|
327
|
+
}
|
|
328
|
+
return { sarifRules, ruleIndex };
|
|
329
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
/**
|
|
3
|
+
* The installed chant's version, read from `@intentius/chant`'s own
|
|
4
|
+
* package.json, or "0.0.0" when it can't be read. The path is the same from
|
|
5
|
+
* `src/cli/` and `dist/cli/`, so it holds whether chant runs from source or
|
|
6
|
+
* from its build.
|
|
7
|
+
*/
|
|
8
|
+
export const CHANT_VERSION = (() => {
|
|
9
|
+
try {
|
|
10
|
+
return createRequire(import.meta.url)("../../package.json").version ?? "0.0.0";
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return "0.0.0";
|
|
14
|
+
}
|
|
15
|
+
})();
|