@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync, readdirSync, readFileSync } from "fs";
|
|
2
|
+
import { join, resolve, dirname } from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
import { createInterface } from "readline";
|
|
5
|
+
import { formatSuccess, formatWarning } from "../format.js";
|
|
6
|
+
import { loadPlugin, recordProjectLexicons, unknownPathLexiconsNotice } from "../plugins.js";
|
|
7
|
+
import { lexiconModulePath, lexiconSourceLabel } from "../../lexicon-module.js";
|
|
8
|
+
import { MCP_CONFIG_FILENAME, detectPackageManager, generateMcpConfig, mcpConfigPath } from "../mcp-config.js";
|
|
9
|
+
/** Read the current chant package version from our own package.json. */
|
|
10
|
+
export function getChantVersion() {
|
|
11
|
+
try {
|
|
12
|
+
const pkgDir = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))));
|
|
13
|
+
const pkg = JSON.parse(readFileSync(join(pkgDir, "package.json"), "utf-8"));
|
|
14
|
+
return pkg.version ?? "0.0.13";
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return "0.0.13";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The devDependencies a scaffolded project gets, from `chant init` and from
|
|
22
|
+
* `chant carve` (#3233). The project's TypeScript is for its editor and `tsc`
|
|
23
|
+
* only; chant parses with its own copy, so any 5.9+ or 7 release works (#3089).
|
|
24
|
+
*/
|
|
25
|
+
export const SCAFFOLD_DEV_DEPENDENCIES = {
|
|
26
|
+
"@types/node": "^24.0.0",
|
|
27
|
+
typescript: "^5.9.3 || ^7.0.0",
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Generate package.json content
|
|
31
|
+
*/
|
|
32
|
+
function generatePackageJson(lexicon, extraScripts, lexiconIsPackage = true) {
|
|
33
|
+
const ver = getChantVersion();
|
|
34
|
+
const dependencies = {
|
|
35
|
+
"@intentius/chant": `^${ver}`,
|
|
36
|
+
// chant#2578 — a lexicon declared by path is not a package to depend on.
|
|
37
|
+
...(lexiconIsPackage ? { [`@intentius/chant-lexicon-${lexicon}`]: `^${ver}` } : {}),
|
|
38
|
+
};
|
|
39
|
+
const pkg = {
|
|
40
|
+
name: "chant-project",
|
|
41
|
+
version: ver,
|
|
42
|
+
type: "module",
|
|
43
|
+
scripts: {
|
|
44
|
+
build: `chant build src --lexicon ${lexicon}`,
|
|
45
|
+
lint: "chant lint src",
|
|
46
|
+
dev: `chant build src --lexicon ${lexicon} --watch`,
|
|
47
|
+
...extraScripts,
|
|
48
|
+
},
|
|
49
|
+
dependencies,
|
|
50
|
+
devDependencies: { ...SCAFFOLD_DEV_DEPENDENCIES },
|
|
51
|
+
};
|
|
52
|
+
return JSON.stringify(pkg, null, 2);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate tsconfig.json content.
|
|
56
|
+
*
|
|
57
|
+
* `bundler` resolution, because chant resolves a project's imports the way tsx
|
|
58
|
+
* and fold do: `./config` with no extension. NodeNext rejects that form
|
|
59
|
+
* (TS2835), and its suggested `./config.js` makes fold fall back to running the
|
|
60
|
+
* file (#3089). `types` names node because TypeScript 6 and later no longer load
|
|
61
|
+
* every `@types` package by default.
|
|
62
|
+
*/
|
|
63
|
+
export function generateTsConfig() {
|
|
64
|
+
const config = {
|
|
65
|
+
compilerOptions: {
|
|
66
|
+
target: "ES2022",
|
|
67
|
+
module: "esnext",
|
|
68
|
+
moduleResolution: "bundler",
|
|
69
|
+
types: ["node"],
|
|
70
|
+
strict: true,
|
|
71
|
+
esModuleInterop: true,
|
|
72
|
+
skipLibCheck: true,
|
|
73
|
+
declaration: true,
|
|
74
|
+
outDir: "./dist",
|
|
75
|
+
rootDir: "./src",
|
|
76
|
+
},
|
|
77
|
+
include: ["src"],
|
|
78
|
+
exclude: ["node_modules", "dist"],
|
|
79
|
+
};
|
|
80
|
+
return JSON.stringify(config, null, 2);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Generate chant.config.ts content
|
|
84
|
+
*/
|
|
85
|
+
function generateChantConfig(lexicon) {
|
|
86
|
+
return `import type { ChantConfig } from "@intentius/chant";
|
|
87
|
+
|
|
88
|
+
export default {
|
|
89
|
+
lexicons: ["${lexicon}"],
|
|
90
|
+
} satisfies ChantConfig;
|
|
91
|
+
`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate .gitignore content
|
|
95
|
+
*/
|
|
96
|
+
function generateGitignore() {
|
|
97
|
+
return `dist/
|
|
98
|
+
node_modules/
|
|
99
|
+
.chant/types/
|
|
100
|
+
.chant/meta/
|
|
101
|
+
.chant/rules/
|
|
102
|
+
skills/
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate embedded core type definitions for .chant/types/core/
|
|
107
|
+
*/
|
|
108
|
+
function generateCoreTypeDefs() {
|
|
109
|
+
return `// @intentius/chant — core type definitions
|
|
110
|
+
// Run "chant update" to sync the latest types
|
|
111
|
+
|
|
112
|
+
/** Wraps a value that may be a literal or an intrinsic expression */
|
|
113
|
+
export type Value<T> = T | Intrinsic;
|
|
114
|
+
|
|
115
|
+
/** Marker interface for intrinsic functions (Ref, Sub, etc.) */
|
|
116
|
+
export interface Intrinsic {
|
|
117
|
+
toJSON(): unknown;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Serializer interface for chant specifications */
|
|
121
|
+
export interface Serializer {
|
|
122
|
+
name: string;
|
|
123
|
+
rulePrefix: string;
|
|
124
|
+
serialize(entities: Map<string, Declarable>, outputs?: LexiconOutput[]): string;
|
|
125
|
+
serializeCrossRef?(output: LexiconOutput): unknown;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Base interface for all declarable entities */
|
|
129
|
+
export interface Declarable {
|
|
130
|
+
readonly lexicon: string;
|
|
131
|
+
readonly entityType: string;
|
|
132
|
+
readonly kind?: "resource" | "property";
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Cross-lexicon output reference */
|
|
136
|
+
export interface LexiconOutput {
|
|
137
|
+
readonly outputName: string;
|
|
138
|
+
readonly sourceEntity: string;
|
|
139
|
+
readonly sourceAttribute: string;
|
|
140
|
+
readonly lexicon: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Top-level project configuration */
|
|
144
|
+
export interface ChantConfig {
|
|
145
|
+
lexicons?: string[];
|
|
146
|
+
lint?: {
|
|
147
|
+
rules?: Record<string, string | [string, Record<string, unknown>]>;
|
|
148
|
+
extends?: string[];
|
|
149
|
+
plugins?: string[];
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Prompt user for install
|
|
157
|
+
*/
|
|
158
|
+
async function promptInstall() {
|
|
159
|
+
const rl = createInterface({
|
|
160
|
+
input: process.stdin,
|
|
161
|
+
output: process.stdout,
|
|
162
|
+
});
|
|
163
|
+
return new Promise((resolve) => {
|
|
164
|
+
rl.question("Install dependencies? (Y/n) ", (answer) => {
|
|
165
|
+
rl.close();
|
|
166
|
+
const trimmed = answer.trim().toLowerCase();
|
|
167
|
+
resolve(trimmed === "" || trimmed === "y" || trimmed === "yes");
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Write a file if it doesn't exist, tracking created files and warnings
|
|
173
|
+
*/
|
|
174
|
+
function writeIfNotExists(filePath, content, relativePath, createdFiles, warnings) {
|
|
175
|
+
if (!existsSync(filePath)) {
|
|
176
|
+
writeFileSync(filePath, content);
|
|
177
|
+
createdFiles.push(relativePath);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
warnings.push(`${relativePath} already exists, skipping`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Execute the init command
|
|
185
|
+
*/
|
|
186
|
+
export async function initCommand(options) {
|
|
187
|
+
const targetDir = resolve(options.path ?? ".");
|
|
188
|
+
const createdFiles = [];
|
|
189
|
+
const warnings = [];
|
|
190
|
+
// Check if directory is non-empty
|
|
191
|
+
if (existsSync(targetDir)) {
|
|
192
|
+
const contents = readdirSync(targetDir);
|
|
193
|
+
const nonHiddenFiles = contents.filter((f) => !f.startsWith("."));
|
|
194
|
+
if (nonHiddenFiles.length > 0 && !options.force) {
|
|
195
|
+
return {
|
|
196
|
+
success: false,
|
|
197
|
+
createdFiles: [],
|
|
198
|
+
warnings: [],
|
|
199
|
+
error: `Directory is not empty. Use --force to initialize anyway.`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
if (nonHiddenFiles.length > 0) {
|
|
203
|
+
warnings.push("Initializing in non-empty directory");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Create target directory if it doesn't exist
|
|
207
|
+
if (!existsSync(targetDir)) {
|
|
208
|
+
mkdirSync(targetDir, { recursive: true });
|
|
209
|
+
}
|
|
210
|
+
// chant#2578 — `--force` into an existing project keeps its chant.config.
|
|
211
|
+
// When that config declares the lexicon by path, it loads from the module
|
|
212
|
+
// and there is no package to depend on or install. chant#2591 — the config
|
|
213
|
+
// is read without running it; when that fails, init says so and treats the
|
|
214
|
+
// lexicon as a package.
|
|
215
|
+
let lexiconModule;
|
|
216
|
+
if (existsSync(join(targetDir, "chant.config.ts")) || existsSync(join(targetDir, "chant.config.json"))) {
|
|
217
|
+
const notice = unknownPathLexiconsNotice(recordProjectLexicons(targetDir));
|
|
218
|
+
if (notice !== undefined)
|
|
219
|
+
warnings.push(notice);
|
|
220
|
+
if (lexiconModulePath(options.lexicon) !== undefined) {
|
|
221
|
+
lexiconModule = lexiconSourceLabel(options.lexicon, targetDir);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Load plugin early to get template set (used for scripts + source files)
|
|
225
|
+
let templateSet;
|
|
226
|
+
try {
|
|
227
|
+
const plugin = await loadPlugin(options.lexicon);
|
|
228
|
+
if (plugin.initTemplates) {
|
|
229
|
+
templateSet = plugin.initTemplates(options.template);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Plugin not yet installed — no source files to scaffold
|
|
234
|
+
}
|
|
235
|
+
// Create src directory
|
|
236
|
+
const srcDir = join(targetDir, "src");
|
|
237
|
+
if (!existsSync(srcDir)) {
|
|
238
|
+
mkdirSync(srcDir, { recursive: true });
|
|
239
|
+
}
|
|
240
|
+
// Generate package.json
|
|
241
|
+
writeIfNotExists(join(targetDir, "package.json"), generatePackageJson(options.lexicon, templateSet?.scripts, lexiconModule === undefined), "package.json", createdFiles, warnings);
|
|
242
|
+
// Generate tsconfig.json
|
|
243
|
+
writeIfNotExists(join(targetDir, "tsconfig.json"), generateTsConfig(), "tsconfig.json", createdFiles, warnings);
|
|
244
|
+
// Generate chant.config.ts. A template that ships its own wins: core's
|
|
245
|
+
// version knows only the lexicon name, while a template that declares a
|
|
246
|
+
// config namespace (fountain's steward scaffold and its `fountain.profiles`
|
|
247
|
+
// block, chant #2129) is scaffolding a project that needs it to run at all.
|
|
248
|
+
// The root-file loop below runs *after* this write, and `writeIfNotExists`
|
|
249
|
+
// keeps the first file, so a template's config would otherwise be discarded
|
|
250
|
+
// in silence — see lexicons/cedar/src/init-templates.ts, which documents
|
|
251
|
+
// having had to work around exactly that.
|
|
252
|
+
writeIfNotExists(join(targetDir, "chant.config.ts"), templateSet?.root?.["chant.config.ts"] ?? generateChantConfig(options.lexicon), "chant.config.ts", createdFiles, warnings);
|
|
253
|
+
// Generate .gitignore
|
|
254
|
+
writeIfNotExists(join(targetDir, ".gitignore"), generateGitignore(), ".gitignore", createdFiles, warnings);
|
|
255
|
+
// Write source files from plugin template set
|
|
256
|
+
if (templateSet) {
|
|
257
|
+
for (const [filename, content] of Object.entries(templateSet.src)) {
|
|
258
|
+
writeIfNotExists(join(srcDir, filename), content, `src/${filename}`, createdFiles, warnings);
|
|
259
|
+
}
|
|
260
|
+
// Write root scaffold files (e.g. index.js, test.js, Dockerfile).
|
|
261
|
+
// `chant.config.ts` is skipped: it was already written above, from this
|
|
262
|
+
// same template set, and re-offering it here would only produce an
|
|
263
|
+
// "already exists, skipping" warning about a file the template supplied.
|
|
264
|
+
if (templateSet.root) {
|
|
265
|
+
for (const [filename, content] of Object.entries(templateSet.root)) {
|
|
266
|
+
if (filename === "chant.config.ts")
|
|
267
|
+
continue;
|
|
268
|
+
writeIfNotExists(join(targetDir, filename), content, filename, createdFiles, warnings);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Scaffold .chant/types/core/ with embedded type definitions
|
|
273
|
+
const coreTypesDir = join(targetDir, ".chant", "types", "core");
|
|
274
|
+
mkdirSync(coreTypesDir, { recursive: true });
|
|
275
|
+
writeIfNotExists(join(coreTypesDir, "package.json"), JSON.stringify({ name: "@intentius/chant", version: "0.0.0", types: "./index.d.ts" }, null, 2), ".chant/types/core/package.json", createdFiles, warnings);
|
|
276
|
+
writeIfNotExists(join(coreTypesDir, "index.d.ts"), generateCoreTypeDefs(), ".chant/types/core/index.d.ts", createdFiles, warnings);
|
|
277
|
+
// Scaffold .chant/types/lexicon-{lexicon}/ stub. A lexicon declared by path
|
|
278
|
+
// is imported by its path, so it has no package name to stub (chant#2578).
|
|
279
|
+
if (lexiconModule === undefined) {
|
|
280
|
+
const lexiconTypesDir = join(targetDir, ".chant", "types", `lexicon-${options.lexicon}`);
|
|
281
|
+
mkdirSync(lexiconTypesDir, { recursive: true });
|
|
282
|
+
writeIfNotExists(join(lexiconTypesDir, "package.json"), JSON.stringify({ name: `@intentius/chant-lexicon-${options.lexicon}`, version: "0.0.0", types: "./index.d.ts" }, null, 2), `.chant/types/lexicon-${options.lexicon}/package.json`, createdFiles, warnings);
|
|
283
|
+
writeIfNotExists(join(lexiconTypesDir, "index.d.ts"), `// Lexicon type stubs — run "chant update" to sync full types\nexport {};\n`, `.chant/types/lexicon-${options.lexicon}/index.d.ts`, createdFiles, warnings);
|
|
284
|
+
}
|
|
285
|
+
// Generate the project's MCP config. It lands in the directory init was
|
|
286
|
+
// pointed at, like everything else init produces, and at the path
|
|
287
|
+
// `chant doctor` checks — see ../mcp-config.ts for why project scope, and
|
|
288
|
+
// chant #2383 for the three-way disagreement that came of writing it into
|
|
289
|
+
// the user's home directory instead.
|
|
290
|
+
if (!options.skipMcp) {
|
|
291
|
+
writeIfNotExists(mcpConfigPath(targetDir), generateMcpConfig(detectPackageManager(targetDir)), MCP_CONFIG_FILENAME, createdFiles, warnings);
|
|
292
|
+
}
|
|
293
|
+
// Install skills from the lexicon's plugin. With --skill, install only
|
|
294
|
+
// the matching skill; without, install all.
|
|
295
|
+
try {
|
|
296
|
+
const plugin = await loadPlugin(options.lexicon);
|
|
297
|
+
if (plugin.skills) {
|
|
298
|
+
const all = plugin.skills();
|
|
299
|
+
const skills = options.skill ? all.filter((s) => s.name === options.skill) : all;
|
|
300
|
+
if (options.skill && skills.length === 0) {
|
|
301
|
+
warnings.push(`No skill named "${options.skill}" in lexicon ${options.lexicon}; nothing installed`);
|
|
302
|
+
}
|
|
303
|
+
for (const skill of skills) {
|
|
304
|
+
const skillDir = join(targetDir, "skills", skill.name);
|
|
305
|
+
mkdirSync(skillDir, { recursive: true });
|
|
306
|
+
writeFileSync(join(skillDir, "SKILL.md"), skill.content);
|
|
307
|
+
createdFiles.push(`skills/${skill.name}/SKILL.md`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
// Skills are optional — don't fail init if plugin isn't installed yet
|
|
313
|
+
}
|
|
314
|
+
// `--template` records where the files came from (#2540, ws-047). Plain
|
|
315
|
+
// init writes no lock and never loads the lineage module.
|
|
316
|
+
if (options.template && templateSet) {
|
|
317
|
+
const { writeTemplateLock } = await import("../../workspace/lineage-init.js");
|
|
318
|
+
const lock = writeTemplateLock({
|
|
319
|
+
targetDir,
|
|
320
|
+
lexicon: options.lexicon,
|
|
321
|
+
template: options.template,
|
|
322
|
+
createdFiles,
|
|
323
|
+
chantVersion: getChantVersion(),
|
|
324
|
+
lexiconModule,
|
|
325
|
+
});
|
|
326
|
+
if (lock)
|
|
327
|
+
createdFiles.push(lock);
|
|
328
|
+
else
|
|
329
|
+
warnings.push(".chant/workspace.lock.json already exists, skipping");
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
success: true,
|
|
333
|
+
createdFiles,
|
|
334
|
+
warnings,
|
|
335
|
+
...(lexiconModule !== undefined ? { lexiconModule } : {}),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Print init result and prompt for install
|
|
340
|
+
*/
|
|
341
|
+
export async function printInitResult(result, options) {
|
|
342
|
+
if (!result.success) {
|
|
343
|
+
console.error(result.error);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
for (const warning of result.warnings) {
|
|
347
|
+
console.error(formatWarning({ message: warning }));
|
|
348
|
+
}
|
|
349
|
+
if (result.createdFiles.length > 0) {
|
|
350
|
+
console.log(formatSuccess("Created:"));
|
|
351
|
+
for (const file of result.createdFiles) {
|
|
352
|
+
console.log(` ${file}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
console.log("");
|
|
356
|
+
if (result.lexiconModule !== undefined) {
|
|
357
|
+
console.log(`The lexicon loads from ${result.lexiconModule}, as chant.config.ts declares. It has no package to install.`);
|
|
358
|
+
console.log("");
|
|
359
|
+
}
|
|
360
|
+
const pm = detectPackageManager(options?.cwd);
|
|
361
|
+
// Interactive install prompt
|
|
362
|
+
if (!options?.skipInstall) {
|
|
363
|
+
const shouldInstall = await promptInstall();
|
|
364
|
+
if (shouldInstall) {
|
|
365
|
+
const { execSync } = await import("child_process");
|
|
366
|
+
const cwd = options?.cwd ?? ".";
|
|
367
|
+
console.log("Installing dependencies...");
|
|
368
|
+
try {
|
|
369
|
+
execSync(`${pm} install`, { cwd, stdio: "inherit" });
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
console.error(formatWarning({ message: `Install failed. Run '${pm} install' manually.` }));
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
console.log("");
|
|
377
|
+
console.log("Next steps:");
|
|
378
|
+
console.log(" 1. Edit src/config.ts");
|
|
379
|
+
console.log(" 2. Add resources in src/");
|
|
380
|
+
console.log(` 3. ${pm} run build`);
|
|
381
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant dev rolling-upgrade <lexicon-dir>` command implementation.
|
|
3
|
+
*
|
|
4
|
+
* Detects rolling-spec drift for the aws, azure, and github lexicons. These
|
|
5
|
+
* lexicons pin no version constant — "latest" is fetched on every regen. This
|
|
6
|
+
* command regenerates from current-latest, diffs the produced API surface
|
|
7
|
+
* against the committed baseline (surface.snapshot.json), and REPORTS the
|
|
8
|
+
* result. It is a dry run: it never opens a PR, updates a branch, or writes the
|
|
9
|
+
* baseline. PR automation and scheduling live in #527.
|
|
10
|
+
*
|
|
11
|
+
* The PR label an eventual automation would apply is derived from severity:
|
|
12
|
+
* additive → `minor`, breaking → `major`. This command only prints it.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from "fs";
|
|
15
|
+
import { resolve } from "path";
|
|
16
|
+
import { checkRollingUpgrade, } from "../../codegen/rolling-upgrade.js";
|
|
17
|
+
// ── Main entry ────────────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Run the rolling-upgrade check and return the result.
|
|
20
|
+
* Returns a synthetic failed result when the directory is missing.
|
|
21
|
+
*/
|
|
22
|
+
export async function runRollingUpgrade(opts) {
|
|
23
|
+
const dir = resolve(opts.lexiconDir);
|
|
24
|
+
if (!existsSync(dir)) {
|
|
25
|
+
return {
|
|
26
|
+
lexicon: "aws",
|
|
27
|
+
hasUpgrade: false,
|
|
28
|
+
severity: "none",
|
|
29
|
+
delta: { added: [], changed: [], removed: [], renamed: [], severity: "none" },
|
|
30
|
+
deltaText: "",
|
|
31
|
+
validationOk: false,
|
|
32
|
+
failures: [{ step: "setup", output: `Lexicon directory not found: ${dir}` }],
|
|
33
|
+
apiVersionDelta: [],
|
|
34
|
+
freshSnapshot: null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return checkRollingUpgrade({
|
|
38
|
+
lexiconDir: dir,
|
|
39
|
+
force: opts.force,
|
|
40
|
+
verbose: opts.verbose,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Map surface severity to the semver PR label an upgrade would carry.
|
|
45
|
+
* additive → minor, breaking → major, none → none.
|
|
46
|
+
*/
|
|
47
|
+
export function severityToLabel(severity) {
|
|
48
|
+
if (severity === "breaking")
|
|
49
|
+
return "major";
|
|
50
|
+
if (severity === "additive")
|
|
51
|
+
return "minor";
|
|
52
|
+
return "none";
|
|
53
|
+
}
|
|
54
|
+
// ── Human-readable output ─────────────────────────────────────────────
|
|
55
|
+
const COLORS = {
|
|
56
|
+
green: "\x1b[32m",
|
|
57
|
+
yellow: "\x1b[33m",
|
|
58
|
+
red: "\x1b[31m",
|
|
59
|
+
gray: "\x1b[90m",
|
|
60
|
+
bold: "\x1b[1m",
|
|
61
|
+
reset: "\x1b[0m",
|
|
62
|
+
};
|
|
63
|
+
function useColors() {
|
|
64
|
+
return !process.env.NO_COLOR && process.stdout.isTTY !== false;
|
|
65
|
+
}
|
|
66
|
+
function c(text, code) {
|
|
67
|
+
return useColors() ? `${code}${text}${COLORS.reset}` : text;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Print the rolling-upgrade result to stdout.
|
|
71
|
+
*/
|
|
72
|
+
export function printRollingUpgradeResult(result, json) {
|
|
73
|
+
if (json) {
|
|
74
|
+
console.log(JSON.stringify({
|
|
75
|
+
lexicon: result.lexicon,
|
|
76
|
+
hasUpgrade: result.hasUpgrade,
|
|
77
|
+
severity: result.severity,
|
|
78
|
+
label: severityToLabel(result.severity),
|
|
79
|
+
validationOk: result.validationOk,
|
|
80
|
+
delta: result.delta,
|
|
81
|
+
apiVersionDelta: result.apiVersionDelta,
|
|
82
|
+
failures: result.failures,
|
|
83
|
+
}, null, 2));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
console.log(c(`Rolling upgrade check: ${result.lexicon}`, COLORS.bold));
|
|
87
|
+
console.log("");
|
|
88
|
+
// Surface delta — the review payload
|
|
89
|
+
if (result.deltaText) {
|
|
90
|
+
console.log(result.deltaText);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log(c("No surface changes.", COLORS.green));
|
|
94
|
+
}
|
|
95
|
+
// azure API-version delta
|
|
96
|
+
if (result.apiVersionDelta.length > 0) {
|
|
97
|
+
console.log("");
|
|
98
|
+
console.log(c(`API version changes (${result.apiVersionDelta.length}):`, COLORS.bold));
|
|
99
|
+
for (const v of result.apiVersionDelta) {
|
|
100
|
+
const arrow = v.kind === "added"
|
|
101
|
+
? `+ ${v.provider} (${v.after})`
|
|
102
|
+
: v.kind === "removed"
|
|
103
|
+
? `- ${v.provider} (was ${v.before})`
|
|
104
|
+
: `~ ${v.provider}: ${v.before} -> ${v.after}`;
|
|
105
|
+
console.log(` ${arrow}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Failures
|
|
109
|
+
if (result.failures.length > 0) {
|
|
110
|
+
console.log("");
|
|
111
|
+
console.log(c(`${result.failures.length} step(s) failed:`, COLORS.bold));
|
|
112
|
+
for (const f of result.failures) {
|
|
113
|
+
console.log(c(` FAIL [${f.step}]${f.exitCode !== undefined ? ` (exit ${f.exitCode})` : ""}`, COLORS.red));
|
|
114
|
+
if (f.output) {
|
|
115
|
+
const indented = f.output
|
|
116
|
+
.split("\n")
|
|
117
|
+
.map((l) => ` ${l}`)
|
|
118
|
+
.join("\n");
|
|
119
|
+
console.log(c(indented, COLORS.gray));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
console.log("");
|
|
124
|
+
// Decision line
|
|
125
|
+
const severityColor = result.severity === "breaking"
|
|
126
|
+
? COLORS.red
|
|
127
|
+
: result.severity === "additive"
|
|
128
|
+
? COLORS.yellow
|
|
129
|
+
: COLORS.green;
|
|
130
|
+
const label = severityToLabel(result.severity);
|
|
131
|
+
const validationLabel = result.validationOk
|
|
132
|
+
? c("ok", COLORS.green)
|
|
133
|
+
: c("FAILED", COLORS.red);
|
|
134
|
+
console.log(`Upgrade: ${result.hasUpgrade} Severity: ${c(result.severity, severityColor)} ` +
|
|
135
|
+
`Label: ${label} Validation: ${validationLabel}`);
|
|
136
|
+
if (result.hasUpgrade && result.validationOk) {
|
|
137
|
+
console.log(c(`A PR would be opened: chore(${result.lexicon}): regen from latest spec [${label}]`, COLORS.gray));
|
|
138
|
+
}
|
|
139
|
+
else if (result.hasUpgrade && !result.validationOk) {
|
|
140
|
+
console.log(c("Surface moved but validation failed — no PR; surfaces as a report/issue (#527).", COLORS.yellow));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.log(c("No surface change — no PR.", COLORS.gray));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant dev surface-diff <lexicon-dir>` command implementation.
|
|
3
|
+
*
|
|
4
|
+
* Regenerates a lexicon from its spec, validates the result, extracts the
|
|
5
|
+
* public API surface, and diffs it against the committed baseline snapshot.
|
|
6
|
+
*
|
|
7
|
+
* Outputs a human-readable delta to stdout and optionally a machine-readable
|
|
8
|
+
* JSON result to a file. Never auto-fixes: failures are captured and reported.
|
|
9
|
+
*
|
|
10
|
+
* The snapshot file is written to `<lexicon-dir>/surface.snapshot.json`.
|
|
11
|
+
* Pass `--update-snapshot` to commit the fresh snapshot after a successful run.
|
|
12
|
+
*
|
|
13
|
+
* An update run is exempt from the `surface-matches-snapshot` validate check
|
|
14
|
+
* and from nothing else (#1825): that check fails on the stale baseline the
|
|
15
|
+
* run exists to replace, and with an `"always"` gate (#1475) the documented
|
|
16
|
+
* re-baseline flow would deadlock. Any other failing step still refuses the
|
|
17
|
+
* write, so a broken generate cannot be baselined.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync } from "fs";
|
|
20
|
+
import { resolve, join } from "path";
|
|
21
|
+
import { regenLexicon, writeSurfaceSnapshot, SNAPSHOT_FILENAME } from "../../codegen/lexicon-regen.js";
|
|
22
|
+
import { bumpForSeverity, bumpPackageJsonVersion } from "../../codegen/version-bump.js";
|
|
23
|
+
// ── Main entry ────────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Run the surface-diff pipeline and return the result.
|
|
26
|
+
* Logs human-readable output to stderr; machine-readable JSON goes to the caller.
|
|
27
|
+
*/
|
|
28
|
+
export async function runSurfaceDiff(opts) {
|
|
29
|
+
const dir = resolve(opts.lexiconDir);
|
|
30
|
+
if (!existsSync(dir)) {
|
|
31
|
+
const failure = {
|
|
32
|
+
step: "setup",
|
|
33
|
+
output: `Lexicon directory not found: ${dir}`,
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
ok: false,
|
|
37
|
+
changed: false,
|
|
38
|
+
severity: "none",
|
|
39
|
+
delta: { added: [], changed: [], removed: [], renamed: [], severity: "none" },
|
|
40
|
+
deltaText: "",
|
|
41
|
+
failures: [failure],
|
|
42
|
+
freshSnapshot: null,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const result = await regenLexicon({
|
|
46
|
+
lexiconDir: dir,
|
|
47
|
+
force: opts.force,
|
|
48
|
+
verbose: opts.verbose,
|
|
49
|
+
skipBundle: opts.skipBundle,
|
|
50
|
+
skipBuild: opts.skipBuild,
|
|
51
|
+
skipLint: opts.skipLint,
|
|
52
|
+
skipExamples: !opts.runExamples,
|
|
53
|
+
pinnedDigestPath: opts.pinnedDigestPath,
|
|
54
|
+
// The update run skips only the surface-matches-snapshot validate check —
|
|
55
|
+
// the staleness it is about to fix (#1825).
|
|
56
|
+
updatingSnapshot: opts.updateSnapshot,
|
|
57
|
+
});
|
|
58
|
+
// Update snapshot when requested and the run succeeded
|
|
59
|
+
if (opts.updateSnapshot && result.ok && result.freshSnapshot) {
|
|
60
|
+
writeSurfaceSnapshot(dir, result.freshSnapshot);
|
|
61
|
+
process.stderr.write(`Snapshot updated: ${dir}/${SNAPSHOT_FILENAME}\n`);
|
|
62
|
+
// #616: accepting drift on a rolling lexicon changes the surface but nothing
|
|
63
|
+
// bumps the version — so skip-if-unchanged would strand the new surface at
|
|
64
|
+
// publish time. `--bump` raises the version by the drift severity (0.x-aware)
|
|
65
|
+
// so the accepted drift actually ships.
|
|
66
|
+
if (opts.bump && result.changed && result.severity !== "none") {
|
|
67
|
+
const pkgPath = join(dir, "package.json");
|
|
68
|
+
if (existsSync(pkgPath)) {
|
|
69
|
+
const current = JSON.parse(readFileSync(pkgPath, "utf-8")).version ?? "0.0.0";
|
|
70
|
+
const bumped = bumpForSeverity(current, result.severity);
|
|
71
|
+
if (bumped) {
|
|
72
|
+
bumpPackageJsonVersion(pkgPath, bumped);
|
|
73
|
+
process.stderr.write(`Version bumped: ${current} -> ${bumped} (${result.severity})\n`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
process.stderr.write(`Version unchanged: could not bump ${current} for severity ${result.severity}\n`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
// ── Human-readable output ─────────────────────────────────────────────
|
|
84
|
+
const COLORS = {
|
|
85
|
+
green: "\x1b[32m",
|
|
86
|
+
yellow: "\x1b[33m",
|
|
87
|
+
red: "\x1b[31m",
|
|
88
|
+
gray: "\x1b[90m",
|
|
89
|
+
bold: "\x1b[1m",
|
|
90
|
+
reset: "\x1b[0m",
|
|
91
|
+
};
|
|
92
|
+
function useColors() {
|
|
93
|
+
return !process.env.NO_COLOR && process.stdout.isTTY !== false;
|
|
94
|
+
}
|
|
95
|
+
function c(text, code) {
|
|
96
|
+
return useColors() ? `${code}${text}${COLORS.reset}` : text;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Print the surface-diff result as human-readable text to stdout.
|
|
100
|
+
*/
|
|
101
|
+
export function printSurfaceDiffResult(result, json) {
|
|
102
|
+
if (json) {
|
|
103
|
+
console.log(JSON.stringify({
|
|
104
|
+
ok: result.ok,
|
|
105
|
+
changed: result.changed,
|
|
106
|
+
severity: result.severity,
|
|
107
|
+
delta: result.delta,
|
|
108
|
+
failures: result.failures,
|
|
109
|
+
}, null, 2));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Surface delta
|
|
113
|
+
if (result.deltaText) {
|
|
114
|
+
console.log(result.deltaText);
|
|
115
|
+
}
|
|
116
|
+
else if (result.changed) {
|
|
117
|
+
console.log("Surface changed (no baseline to diff against).");
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(c("No surface changes.", COLORS.green));
|
|
121
|
+
}
|
|
122
|
+
// Failures
|
|
123
|
+
if (result.failures.length > 0) {
|
|
124
|
+
console.log("");
|
|
125
|
+
console.log(c(`${result.failures.length} step(s) failed:`, COLORS.bold));
|
|
126
|
+
for (const f of result.failures) {
|
|
127
|
+
console.log(c(` FAIL [${f.step}]${f.exitCode !== undefined ? ` (exit ${f.exitCode})` : ""}`, COLORS.red));
|
|
128
|
+
if (f.output) {
|
|
129
|
+
const indented = f.output
|
|
130
|
+
.split("\n")
|
|
131
|
+
.map((l) => ` ${l}`)
|
|
132
|
+
.join("\n");
|
|
133
|
+
console.log(c(indented, COLORS.gray));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
console.log("");
|
|
138
|
+
// Summary line
|
|
139
|
+
const severityColor = result.severity === "breaking" ? COLORS.red :
|
|
140
|
+
result.severity === "additive" ? COLORS.yellow :
|
|
141
|
+
COLORS.green;
|
|
142
|
+
const statusLabel = result.ok ? c("ok", COLORS.green) : c("FAILED", COLORS.red);
|
|
143
|
+
const severityLabel = c(result.severity, severityColor);
|
|
144
|
+
console.log(`Status: ${statusLabel} Severity: ${severityLabel} Changed: ${result.changed}`);
|
|
145
|
+
}
|