@intentius/chant 0.124.13 → 0.124.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Member kinds (#2524 D3, #2535; ws-031 for the plugin shape, ws-051 for
|
|
3
|
+
* `examples`).
|
|
4
|
+
*
|
|
5
|
+
* A kind is data: a name, a precedence and a probe that says what its
|
|
6
|
+
* directory holds. Probes run no code (K3). Five kinds are built in: the
|
|
7
|
+
* member kinds `chant`, `workspace`, `design` and `other`, and the group kind
|
|
8
|
+
* `examples`. Every other kind comes from a pinned package, which publishes
|
|
9
|
+
* its kinds as a JSON file at a `./workspace-kinds` subpath, the way a
|
|
10
|
+
* lexicon publishes a slim `./detect` entry (#426). chant finds that file
|
|
11
|
+
* through the package's `package.json` and reads it with the file system, so
|
|
12
|
+
* reading kinds never imports the package and never loads a lexicon.
|
|
13
|
+
*
|
|
14
|
+
* The vocabulary is closed: a member whose kind no registry knows fails
|
|
15
|
+
* closed, and the message lists the known kinds. When the probes of several
|
|
16
|
+
* kinds claim one directory, the highest precedence decides, and a tie
|
|
17
|
+
* fails ({@link resolveKind}).
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync } from "node:fs";
|
|
20
|
+
import { createRequire } from "node:module";
|
|
21
|
+
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
22
|
+
import schema from "./workspace-kinds.schema.json" with { type: "json" };
|
|
23
|
+
import { joinPath, skippedDir } from "./tree.js";
|
|
24
|
+
import { checkPinIntegrity } from "./pin-integrity.js";
|
|
25
|
+
import { dataExportTarget, findInstalledPackage } from "./class-data.js";
|
|
26
|
+
export const KINDS_SCHEMA_ID = schema.$id;
|
|
27
|
+
/** The subpath a package publishes its kinds at. */
|
|
28
|
+
export const KINDS_SUBPATH = "./workspace-kinds";
|
|
29
|
+
/** The group kind (ws-051). An entry of this kind is a group, not a member. */
|
|
30
|
+
export const EXAMPLES_KIND = "examples";
|
|
31
|
+
/** The data member kind that holds design artifacts (#2549, ws-062). */
|
|
32
|
+
export const DESIGN_KIND = "design";
|
|
33
|
+
export const BUILTIN_KINDS = [
|
|
34
|
+
{
|
|
35
|
+
name: "chant",
|
|
36
|
+
description: "a chant project, with a chant.config.ts or chant.config.json in its directory",
|
|
37
|
+
probe: { anyFile: ["chant.config.ts", "chant.config.json"] },
|
|
38
|
+
precedence: 500,
|
|
39
|
+
shape: "member",
|
|
40
|
+
outputs: { from: "chant-source" },
|
|
41
|
+
source: "builtin",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "workspace",
|
|
45
|
+
description: "a nested workspace, with its own chant.workspace.json; the outer one reads it through its own chant workspace graph and never writes inside it",
|
|
46
|
+
probe: { anyFile: ["chant.workspace.json", "chant.workspace.jsonc"] },
|
|
47
|
+
precedence: 1000,
|
|
48
|
+
shape: "member",
|
|
49
|
+
outputs: { from: "none" },
|
|
50
|
+
source: "builtin",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "other",
|
|
54
|
+
description: "a directory chant does not read; the entry says why in `because`",
|
|
55
|
+
probe: { directory: true },
|
|
56
|
+
precedence: 0,
|
|
57
|
+
shape: "member",
|
|
58
|
+
outputs: { from: "declared", names: [] },
|
|
59
|
+
source: "builtin",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: DESIGN_KIND,
|
|
63
|
+
description: "a data member holding the design artifacts the workspace owns; chant reads its files for record pins and builds nothing",
|
|
64
|
+
probe: { directory: true },
|
|
65
|
+
precedence: 0,
|
|
66
|
+
shape: "member",
|
|
67
|
+
outputs: { from: "declared", names: [] },
|
|
68
|
+
source: "builtin",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: EXAMPLES_KIND,
|
|
72
|
+
description: "an example group: every directory its glob matches that holds a chant project is built and linted",
|
|
73
|
+
probe: { chantProject: true },
|
|
74
|
+
precedence: 0,
|
|
75
|
+
shape: "group",
|
|
76
|
+
outputs: { from: "none" },
|
|
77
|
+
source: "builtin",
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
export const BUILTIN_KIND_NAMES = BUILTIN_KINDS.map((k) => k.name);
|
|
81
|
+
/** A registry holding the built-in kinds and then `extra`, which must not repeat a name. */
|
|
82
|
+
export function createKindRegistry(extra = []) {
|
|
83
|
+
const byName = new Map();
|
|
84
|
+
for (const k of [...BUILTIN_KINDS, ...extra]) {
|
|
85
|
+
if (byName.has(k.name))
|
|
86
|
+
throw new Error(`kind ${k.name} is registered twice`);
|
|
87
|
+
byName.set(k.name, k);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
get: (name) => byName.get(name),
|
|
91
|
+
names: () => [...byName.values()].filter((k) => k.shape === "member").map((k) => k.name).sort(),
|
|
92
|
+
all: () => [...byName.values()],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export function builtinKindRegistry() {
|
|
96
|
+
return createKindRegistry();
|
|
97
|
+
}
|
|
98
|
+
/** Whether `dir` (tree-relative) passes `kind`'s probe. The directory is known to exist. */
|
|
99
|
+
export function probeKind(kind, tree, dir) {
|
|
100
|
+
if ("directory" in kind.probe)
|
|
101
|
+
return true;
|
|
102
|
+
if ("chantProject" in kind.probe)
|
|
103
|
+
return holdsChantProject(tree, dir);
|
|
104
|
+
const { anyFile, anyBlock, anyJsonKey } = kind.probe;
|
|
105
|
+
if (anyFile && filesMatching(tree, dir, anyFile).length > 0)
|
|
106
|
+
return true;
|
|
107
|
+
if (anyJsonKey) {
|
|
108
|
+
for (const file of filesMatching(tree, dir, anyJsonKey.in)) {
|
|
109
|
+
try {
|
|
110
|
+
const json = JSON.parse(tree.read(file));
|
|
111
|
+
if (anyJsonKey.pointers.some((p) => atPointer(json, p) !== undefined))
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// A file that isn't JSON is no evidence either way.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (anyBlock) {
|
|
120
|
+
const opener = new RegExp(`^\\s*(?:${anyBlock.blocks.map(escapeRegExp).join("|")})\\s*\\{`, "m");
|
|
121
|
+
for (const file of filesMatching(tree, dir, anyBlock.in)) {
|
|
122
|
+
try {
|
|
123
|
+
if (opener.test(tree.read(file)))
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// An unreadable file is no evidence either way.
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
/** Whether a probe looks at the directory's files, and so can claim it. */
|
|
134
|
+
function isFileProbe(probe) {
|
|
135
|
+
return !("directory" in probe) && !("chantProject" in probe);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The files directly in `dir` (tree-relative paths) whose names match one of
|
|
139
|
+
* `names`. A name without `*` is looked up directly, so the common case needs
|
|
140
|
+
* no listing.
|
|
141
|
+
*/
|
|
142
|
+
function filesMatching(tree, dir, names) {
|
|
143
|
+
const out = [];
|
|
144
|
+
const globs = names.filter((n) => n.includes("*"));
|
|
145
|
+
for (const name of names) {
|
|
146
|
+
if (!name.includes("*") && tree.stat(joinPath(dir, name)) === "file")
|
|
147
|
+
out.push(joinPath(dir, name));
|
|
148
|
+
}
|
|
149
|
+
if (globs.length > 0) {
|
|
150
|
+
const patterns = globs.map((g) => new RegExp(`^${g.split("*").map(escapeRegExp).join("[^/]*")}$`));
|
|
151
|
+
for (const e of tree.list(dir) ?? []) {
|
|
152
|
+
if (e.type === "file" && patterns.some((p) => p.test(e.name)))
|
|
153
|
+
out.push(joinPath(dir, e.name));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return out.sort();
|
|
157
|
+
}
|
|
158
|
+
/** The value at JSON Pointer `pointer` in `json`, or undefined when there is none. */
|
|
159
|
+
function atPointer(json, pointer) {
|
|
160
|
+
let at = json;
|
|
161
|
+
for (const raw of pointer.split("/").slice(1)) {
|
|
162
|
+
const token = raw.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
163
|
+
if (at === null || typeof at !== "object" || !Object.prototype.hasOwnProperty.call(at, token))
|
|
164
|
+
return undefined;
|
|
165
|
+
at = at[token];
|
|
166
|
+
}
|
|
167
|
+
return at;
|
|
168
|
+
}
|
|
169
|
+
function escapeRegExp(text) {
|
|
170
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Which kind's probe claims `dir` (tree-relative). Only member kinds whose
|
|
174
|
+
* probe looks at the directory take part: `other` claims every directory and
|
|
175
|
+
* so claims none, and `examples` is a group kind. `exclude` leaves kinds out,
|
|
176
|
+
* such as `workspace` for the root member, whose directory holds the
|
|
177
|
+
* workspace's own declaration.
|
|
178
|
+
*/
|
|
179
|
+
export function resolveKind(kinds, tree, dir, exclude = []) {
|
|
180
|
+
const claims = kinds
|
|
181
|
+
.all()
|
|
182
|
+
.filter((k) => k.shape === "member" && isFileProbe(k.probe) && !exclude.includes(k.name) && probeKind(k, tree, dir))
|
|
183
|
+
.sort((a, b) => b.precedence - a.precedence || (a.name < b.name ? -1 : 1));
|
|
184
|
+
const top = claims.filter((k) => k.precedence === claims[0]?.precedence);
|
|
185
|
+
return { claims, winner: top.length === 1 ? top[0] : undefined, tie: top.length > 1 ? top : [] };
|
|
186
|
+
}
|
|
187
|
+
const CONFIG_FILES = ["chant.config.ts", "chant.config.json"];
|
|
188
|
+
const PROJECT_SEARCH_DEPTH = 4;
|
|
189
|
+
/**
|
|
190
|
+
* Whether directory `dir` holds a chant project, for an example group's
|
|
191
|
+
* matches (ws-051). That is true when a chant config sits in it or up to four
|
|
192
|
+
* levels below it (many examples keep theirs in `src/`), or when its own
|
|
193
|
+
* `package.json` depends on `@intentius/chant` or a chant lexicon, which is
|
|
194
|
+
* how an example with no config names its lexicon.
|
|
195
|
+
*/
|
|
196
|
+
export function holdsChantProject(tree, dir) {
|
|
197
|
+
const pkg = joinPath(dir, "package.json");
|
|
198
|
+
if (tree.stat(pkg) === "file") {
|
|
199
|
+
try {
|
|
200
|
+
const json = JSON.parse(tree.read(pkg));
|
|
201
|
+
for (const field of ["dependencies", "devDependencies", "peerDependencies"]) {
|
|
202
|
+
const deps = json[field];
|
|
203
|
+
if (deps && typeof deps === "object" && Object.keys(deps).some(isChantPackage))
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// An unreadable package.json names no lexicon; fall through to the config search.
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const search = (at, depth) => {
|
|
212
|
+
const entries = tree.list(at) ?? [];
|
|
213
|
+
if (entries.some((e) => e.type === "file" && CONFIG_FILES.includes(e.name)))
|
|
214
|
+
return true;
|
|
215
|
+
if (depth === PROJECT_SEARCH_DEPTH)
|
|
216
|
+
return false;
|
|
217
|
+
return entries.some((e) => e.type === "dir" && !skippedDir(e.name) && search(joinPath(at, e.name), depth + 1));
|
|
218
|
+
};
|
|
219
|
+
return search(dir, 0);
|
|
220
|
+
}
|
|
221
|
+
function isChantPackage(name) {
|
|
222
|
+
return name === "@intentius/chant" || name.startsWith("@intentius/chant-lexicon-");
|
|
223
|
+
}
|
|
224
|
+
let compiled;
|
|
225
|
+
function validator() {
|
|
226
|
+
if (compiled)
|
|
227
|
+
return compiled;
|
|
228
|
+
const require = createRequire(import.meta.url);
|
|
229
|
+
// ajv is CommonJS; its class is the default export, or that export's own default.
|
|
230
|
+
const mod = require("ajv/dist/2020");
|
|
231
|
+
const Ajv = (mod.default ?? mod);
|
|
232
|
+
compiled = new Ajv({ allErrors: true, strict: true }).compile(schema);
|
|
233
|
+
return compiled;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check the text of a kinds file against `workspace-kinds.schema.json` and
|
|
237
|
+
* the rules the schema can't say: no built-in name, and no name twice.
|
|
238
|
+
* `source` names the package in the kinds and in the messages.
|
|
239
|
+
*/
|
|
240
|
+
export function parseKindData(text, source) {
|
|
241
|
+
let raw;
|
|
242
|
+
try {
|
|
243
|
+
raw = JSON.parse(text);
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
return { kinds: [], problems: [`${source}: the kinds file is not JSON (${err.message})`] };
|
|
247
|
+
}
|
|
248
|
+
const validate = validator();
|
|
249
|
+
if (!validate(raw)) {
|
|
250
|
+
const problems = (validate.errors ?? []).map((e) => `${source}: ${e.instancePath || "the kinds file"} ${e.message ?? "is invalid"}`);
|
|
251
|
+
return { kinds: [], problems: [...new Set(problems)] };
|
|
252
|
+
}
|
|
253
|
+
const problems = [];
|
|
254
|
+
const kinds = [];
|
|
255
|
+
const seen = new Set();
|
|
256
|
+
for (const k of raw.kinds) {
|
|
257
|
+
if (BUILTIN_KIND_NAMES.includes(k.name)) {
|
|
258
|
+
problems.push(`${source}: kind ${k.name} is built in and can't be supplied by a package`);
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (seen.has(k.name)) {
|
|
262
|
+
problems.push(`${source}: kind ${k.name} is listed twice`);
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
seen.add(k.name);
|
|
266
|
+
kinds.push({
|
|
267
|
+
name: k.name,
|
|
268
|
+
description: k.description,
|
|
269
|
+
probe: {
|
|
270
|
+
...(k.probe.anyFile ? { anyFile: [...k.probe.anyFile] } : {}),
|
|
271
|
+
...(k.probe.anyBlock ? { anyBlock: { in: [...k.probe.anyBlock.in], blocks: [...k.probe.anyBlock.blocks] } } : {}),
|
|
272
|
+
...(k.probe.anyJsonKey ? { anyJsonKey: { in: [...k.probe.anyJsonKey.in], pointers: [...k.probe.anyJsonKey.pointers] } } : {}),
|
|
273
|
+
},
|
|
274
|
+
precedence: k.precedence,
|
|
275
|
+
shape: "member",
|
|
276
|
+
outputs: { from: "declared", names: [...(k.outputs ?? [])] },
|
|
277
|
+
source,
|
|
278
|
+
...(k.graph ? { graph: { lexicon: k.graph.lexicon, config: structuredClone(k.graph.config) } } : {}),
|
|
279
|
+
...(k.fields ? { fields: structuredClone(k.fields) } : {}),
|
|
280
|
+
});
|
|
281
|
+
for (const problem of fieldDefaultProblems(k.fields ?? {}))
|
|
282
|
+
problems.push(`${source}: kind ${k.name} ${problem}`);
|
|
283
|
+
}
|
|
284
|
+
return { kinds, problems };
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Where a package's `exports` send `./workspace-kinds` (or another data
|
|
288
|
+
* subpath, such as `./workspace-principals`), or undefined when the package
|
|
289
|
+
* doesn't export it. Only the literal key counts: a `./*` pattern maps the
|
|
290
|
+
* subpath to code, which chant never runs for plugin data.
|
|
291
|
+
*/
|
|
292
|
+
export function kindsExportTarget(pkg, subpath = KINDS_SUBPATH) {
|
|
293
|
+
return dataExportTarget(pkg, subpath);
|
|
294
|
+
}
|
|
295
|
+
/** Read the kinds a package directory publishes. Reads files only; imports nothing. */
|
|
296
|
+
export function readPackageKinds(packageDir, source) {
|
|
297
|
+
const manifest = join(packageDir, "package.json");
|
|
298
|
+
let pkg;
|
|
299
|
+
try {
|
|
300
|
+
pkg = JSON.parse(readFileSync(manifest, "utf-8"));
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return { kinds: [], problems: [`${source ?? packageDir}: no readable package.json in ${packageDir}`], file: undefined };
|
|
304
|
+
}
|
|
305
|
+
const name = source ?? (typeof pkg.name === "string" ? pkg.name : packageDir);
|
|
306
|
+
const target = kindsExportTarget(pkg);
|
|
307
|
+
if (target === undefined)
|
|
308
|
+
return { kinds: [], problems: [], file: undefined };
|
|
309
|
+
if (typeof target !== "string")
|
|
310
|
+
return { kinds: [], problems: [`${name}: ${target.problem}`], file: undefined };
|
|
311
|
+
const file = resolve(packageDir, target);
|
|
312
|
+
const inside = relative(packageDir, file);
|
|
313
|
+
if (inside.startsWith("..") || isAbsolute(inside)) {
|
|
314
|
+
return { kinds: [], problems: [`${name}: exports["${KINDS_SUBPATH}"] points outside the package`], file: undefined };
|
|
315
|
+
}
|
|
316
|
+
let text;
|
|
317
|
+
try {
|
|
318
|
+
text = readFileSync(file, "utf-8");
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return { kinds: [], problems: [`${name}: exports["${KINDS_SUBPATH}"] names ${target}, which does not exist`], file };
|
|
322
|
+
}
|
|
323
|
+
const data = parseKindData(text, name);
|
|
324
|
+
const packageName = typeof pkg.name === "string" ? pkg.name : undefined;
|
|
325
|
+
for (const k of data.kinds) {
|
|
326
|
+
k.packageDir = packageDir;
|
|
327
|
+
if (k.graph && packageName !== lexiconPackageName(k.graph.lexicon)) {
|
|
328
|
+
data.problems.push(`${name}: kind ${k.name} reads its members with lexicon ${k.graph.lexicon}, which is ${lexiconPackageName(k.graph.lexicon)}, ` +
|
|
329
|
+
`and this package is ${packageName ?? "unnamed"}; the kind is kept, and workspace graph lists its members with kind-not-run`);
|
|
330
|
+
delete k.graph;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { ...data, file };
|
|
334
|
+
}
|
|
335
|
+
/** The package a lexicon name resolves to. */
|
|
336
|
+
export function lexiconPackageName(lexicon) {
|
|
337
|
+
return `@intentius/chant-lexicon-${lexicon}`;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* A kind's graph config with `{member}`, `{dir}` and `{workspace}` replaced
|
|
341
|
+
* in every string key and value. Other braces are left as they are.
|
|
342
|
+
*/
|
|
343
|
+
export function substituteGraphConfig(config, at) {
|
|
344
|
+
const text = (v) => v.replace(/\{(member|dir|workspace)\}/g, (_, key) => at[key]);
|
|
345
|
+
const walk = (v) => {
|
|
346
|
+
if (typeof v === "string")
|
|
347
|
+
return text(v);
|
|
348
|
+
if (Array.isArray(v))
|
|
349
|
+
return v.map(walk);
|
|
350
|
+
if (v !== null && typeof v === "object")
|
|
351
|
+
return Object.fromEntries(Object.entries(v).map(([k, x]) => [text(k), walk(x)]));
|
|
352
|
+
return v;
|
|
353
|
+
};
|
|
354
|
+
return walk(config);
|
|
355
|
+
}
|
|
356
|
+
/** Where an installed package is, as Node finds a bare import (`./class-data.ts`, so the gate-decision bundle shares it). */
|
|
357
|
+
export { findInstalledPackage };
|
|
358
|
+
/**
|
|
359
|
+
* The directory a pin's plugin data is read from: an installed package at
|
|
360
|
+
* the pinned version, looked up from `workspaceRoot`, or a path pin's
|
|
361
|
+
* directory, checked against its integrity digest when it has one. Null for
|
|
362
|
+
* a pin that names neither. Shared by the kinds and the principal classes
|
|
363
|
+
* (#3080), so both read a pin the same way.
|
|
364
|
+
*/
|
|
365
|
+
export function pinnedPackageDir(pin, workspaceRoot) {
|
|
366
|
+
if (pin.package) {
|
|
367
|
+
const dir = findInstalledPackage(pin.package, workspaceRoot);
|
|
368
|
+
if (!dir)
|
|
369
|
+
return { problem: `pinned package ${pin.package} is not installed; install it to read the kinds it supplies` };
|
|
370
|
+
let installed;
|
|
371
|
+
try {
|
|
372
|
+
installed = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8")).version;
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
installed = undefined;
|
|
376
|
+
}
|
|
377
|
+
if (pin.version && installed !== pin.version)
|
|
378
|
+
return { problem: `${pin.package} is pinned at ${pin.version}, and ${String(installed ?? "an unknown version")} is installed` };
|
|
379
|
+
return { dir, source: pin.package };
|
|
380
|
+
}
|
|
381
|
+
if (pin.path) {
|
|
382
|
+
const dir = join(workspaceRoot, ...pin.path.split("/"));
|
|
383
|
+
if (pin.integrity) {
|
|
384
|
+
const checked = checkPinIntegrity(dir, pin.integrity, pin.path);
|
|
385
|
+
if (!checked.ok)
|
|
386
|
+
return { problem: checked.message };
|
|
387
|
+
}
|
|
388
|
+
return { dir, source: pin.path };
|
|
389
|
+
}
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Build the registry for a workspace: the built-in kinds plus the kinds
|
|
394
|
+
* every pin publishes. `workspaceRoot` is the absolute workspace root; a
|
|
395
|
+
* package pin is looked up from there, and a path pin is relative to it.
|
|
396
|
+
* An installed version that differs from the pin, a kinds file that doesn't
|
|
397
|
+
* validate, and a kind name two packages both supply are problems; the kinds
|
|
398
|
+
* involved are left out, so members of those kinds read as unknown.
|
|
399
|
+
* Never throws.
|
|
400
|
+
*/
|
|
401
|
+
export function loadKindRegistry(pins, workspaceRoot) {
|
|
402
|
+
const problems = [];
|
|
403
|
+
const extra = [];
|
|
404
|
+
const owner = new Map();
|
|
405
|
+
const clashing = new Set();
|
|
406
|
+
pins.forEach((pin, i) => {
|
|
407
|
+
const found = pinnedPackageDir(pin, workspaceRoot);
|
|
408
|
+
if (found === null)
|
|
409
|
+
return;
|
|
410
|
+
if ("problem" in found) {
|
|
411
|
+
problems.push({ pin: i, message: found.problem });
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
const { dir, source } = found;
|
|
415
|
+
const read = readPackageKinds(dir, source);
|
|
416
|
+
for (const p of read.problems)
|
|
417
|
+
problems.push({ pin: i, message: p });
|
|
418
|
+
for (const k of read.kinds) {
|
|
419
|
+
const first = owner.get(k.name);
|
|
420
|
+
if (first) {
|
|
421
|
+
clashing.add(k.name);
|
|
422
|
+
problems.push({ pin: i, message: `kind ${k.name} is supplied by both ${first} and ${source}; a kind name has one source` });
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
owner.set(k.name, source);
|
|
426
|
+
extra.push(k);
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
// A name two packages both supply is left out altogether: neither reading is safe.
|
|
430
|
+
return { registry: createKindRegistry(extra.filter((k) => !clashing.has(k.name))), problems };
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Whether `file` (absolute, inside `packageDir`) is published, as far as the
|
|
434
|
+
* package's `files` list says. A package with no `files` list publishes
|
|
435
|
+
* everything npm doesn't ignore by default.
|
|
436
|
+
*/
|
|
437
|
+
export function kindsFileShips(packageDir, file) {
|
|
438
|
+
let pkg;
|
|
439
|
+
try {
|
|
440
|
+
pkg = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf-8"));
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
if (!Array.isArray(pkg.files))
|
|
446
|
+
return true;
|
|
447
|
+
const rel = relative(packageDir, file).split("\\").join("/");
|
|
448
|
+
return pkg.files.some((entry) => {
|
|
449
|
+
if (typeof entry !== "string")
|
|
450
|
+
return false;
|
|
451
|
+
const e = entry.replace(/^\.\//, "").replace(/\/+$/, "");
|
|
452
|
+
return rel === e || rel.startsWith(`${e}/`);
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
/** Why a value doesn't fit `field`, phrased to follow "the value", or undefined when it fits. */
|
|
456
|
+
function scalarProblem(field, value) {
|
|
457
|
+
const ok = field.type === "integer" ? typeof value === "number" && Number.isInteger(value) : typeof value === field.type;
|
|
458
|
+
if (!ok)
|
|
459
|
+
return `is ${JSON.stringify(value)}, and the field is ${field.type === "integer" ? "an integer" : `a ${field.type}`}`;
|
|
460
|
+
if (field.pattern !== undefined && typeof value === "string") {
|
|
461
|
+
let re;
|
|
462
|
+
try {
|
|
463
|
+
re = new RegExp(field.pattern, "u");
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
return undefined; // Reported once, against the kind, by fieldDefaultProblems.
|
|
467
|
+
}
|
|
468
|
+
if (!re.test(value))
|
|
469
|
+
return `is ${JSON.stringify(value)}, which does not match ${field.pattern}`;
|
|
470
|
+
}
|
|
471
|
+
return undefined;
|
|
472
|
+
}
|
|
473
|
+
/** What is wrong with a kind's own field declarations: a pattern that isn't a regular expression, or a default of the wrong type. */
|
|
474
|
+
function fieldDefaultProblems(fields) {
|
|
475
|
+
const out = [];
|
|
476
|
+
const scalar = (name, f) => {
|
|
477
|
+
if (f.pattern !== undefined) {
|
|
478
|
+
try {
|
|
479
|
+
new RegExp(f.pattern, "u");
|
|
480
|
+
}
|
|
481
|
+
catch {
|
|
482
|
+
out.push(`declares field ${name} with pattern ${f.pattern}, which is not a regular expression`);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (f.default === undefined)
|
|
487
|
+
return;
|
|
488
|
+
const problem = scalarProblem(f, f.default);
|
|
489
|
+
if (problem)
|
|
490
|
+
out.push(`declares field ${name} whose default ${problem}`);
|
|
491
|
+
};
|
|
492
|
+
for (const [name, f] of Object.entries(fields)) {
|
|
493
|
+
if (f.type === "object")
|
|
494
|
+
for (const [inner, g] of Object.entries(f.properties))
|
|
495
|
+
scalar(`${name}.${inner}`, g);
|
|
496
|
+
else
|
|
497
|
+
scalar(name, f);
|
|
498
|
+
}
|
|
499
|
+
return out;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* A member's fields (#3151): the ones its entry sets, checked against what
|
|
503
|
+
* its kind declares, with every other declared field at its default. A field
|
|
504
|
+
* the kind doesn't declare, or a value of the wrong type, is a problem, and
|
|
505
|
+
* the field reads as its default. A kind no registry knows has no fields to
|
|
506
|
+
* check against, so it reads as null with no problem (WSP003 reports it).
|
|
507
|
+
*/
|
|
508
|
+
export function resolveMemberFields(kind, given) {
|
|
509
|
+
if (kind === undefined)
|
|
510
|
+
return { fields: null, problems: [] };
|
|
511
|
+
const declared = kind.fields;
|
|
512
|
+
const problems = [];
|
|
513
|
+
if (declared === undefined) {
|
|
514
|
+
if (given !== null)
|
|
515
|
+
problems.push({ path: "", message: `kind ${kind.name} declares no fields, and the entry sets ${Object.keys(given).join(", ") || "an empty fields block"}` });
|
|
516
|
+
return { fields: null, problems };
|
|
517
|
+
}
|
|
518
|
+
const set = given ?? {};
|
|
519
|
+
for (const name of Object.keys(set)) {
|
|
520
|
+
if (!(name in declared))
|
|
521
|
+
problems.push({ path: name, message: `kind ${kind.name} declares no field ${name}; its fields are ${Object.keys(declared).join(", ")}` });
|
|
522
|
+
}
|
|
523
|
+
const scalar = (path, field, value) => {
|
|
524
|
+
if (value !== undefined) {
|
|
525
|
+
const problem = scalarProblem(field, value);
|
|
526
|
+
if (!problem)
|
|
527
|
+
return value;
|
|
528
|
+
problems.push({ path, message: `field ${path.replace("/", ".")} ${problem}` });
|
|
529
|
+
}
|
|
530
|
+
return field.default ?? null;
|
|
531
|
+
};
|
|
532
|
+
const fields = {};
|
|
533
|
+
for (const [name, field] of Object.entries(declared)) {
|
|
534
|
+
if (field.type !== "object") {
|
|
535
|
+
fields[name] = scalar(name, field, set[name]);
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
const raw = set[name];
|
|
539
|
+
let inner = {};
|
|
540
|
+
if (raw !== undefined) {
|
|
541
|
+
if (raw !== null && typeof raw === "object" && !Array.isArray(raw))
|
|
542
|
+
inner = raw;
|
|
543
|
+
else
|
|
544
|
+
problems.push({ path: name, message: `field ${name} is ${JSON.stringify(raw)}, and the field is an object` });
|
|
545
|
+
}
|
|
546
|
+
for (const key of Object.keys(inner)) {
|
|
547
|
+
if (!(key in field.properties))
|
|
548
|
+
problems.push({ path: `${name}/${key}`, message: `kind ${kind.name} declares no field ${name}.${key}; ${name} has ${Object.keys(field.properties).join(", ")}` });
|
|
549
|
+
}
|
|
550
|
+
fields[name] = Object.fromEntries(Object.entries(field.properties).map(([key, f]) => [key, scalar(`${name}/${key}`, f, inner[key])]));
|
|
551
|
+
}
|
|
552
|
+
return { fields, problems };
|
|
553
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symbol resolvers a member's lexicons contribute (#3313), for
|
|
3
|
+
* `chant workspace graph --intent <path>#<symbol>` on a file core's own
|
|
4
|
+
* resolver does not read (`symbols.ts`).
|
|
5
|
+
*
|
|
6
|
+
* The lexicons are the ones the member's `chant.config.ts` (or `.json`)
|
|
7
|
+
* names, read without running the config when it can be read statically
|
|
8
|
+
* (`../config-static.ts`), and by loading it as `chant run` does otherwise.
|
|
9
|
+
* Each is loaded as any command loads it (`loadPlugin`), and its plugin's
|
|
10
|
+
* `symbolResolvers()` answers. A lexicon that can't be loaded, or whose
|
|
11
|
+
* resolvers are malformed, contributes nothing, and the reason is kept so a
|
|
12
|
+
* refusal can say why the file has no resolver.
|
|
13
|
+
*/
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { lexiconNames } from "../lexicon-module.js";
|
|
16
|
+
const firstLine = (err) => (err instanceof Error ? err.message : String(err)).split("\n")[0];
|
|
17
|
+
/** A resolver a plugin returned, checked: a language, extensions starting with a dot, and a declarations function. */
|
|
18
|
+
function checked(lexicon, value, problems) {
|
|
19
|
+
const r = value;
|
|
20
|
+
const ok = r !== null &&
|
|
21
|
+
typeof r === "object" &&
|
|
22
|
+
typeof r.language === "string" &&
|
|
23
|
+
Array.isArray(r.extensions) &&
|
|
24
|
+
r.extensions.length > 0 &&
|
|
25
|
+
r.extensions.every((e) => typeof e === "string" && /^\.[^./\\]+$/.test(e)) &&
|
|
26
|
+
typeof r.declarations === "function";
|
|
27
|
+
if (!ok) {
|
|
28
|
+
problems.push(`lexicon "${lexicon}" returned a symbol resolver that is not { language, extensions: [".ext", ...], declarations(path, text) }`);
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const declarations = r.declarations.bind(r);
|
|
32
|
+
return {
|
|
33
|
+
language: `${r.language} (lexicon ${lexicon})`,
|
|
34
|
+
extensions: [...r.extensions],
|
|
35
|
+
// A resolver's output is checked where it is used, so a bad entry is dropped rather than read as lines.
|
|
36
|
+
declarations(path, text) {
|
|
37
|
+
const out = declarations(path, text);
|
|
38
|
+
if (!Array.isArray(out))
|
|
39
|
+
return [];
|
|
40
|
+
return out.filter((d) => d !== null &&
|
|
41
|
+
typeof d === "object" &&
|
|
42
|
+
typeof d.qualified === "string" &&
|
|
43
|
+
d.qualified !== "" &&
|
|
44
|
+
typeof d.kind === "string" &&
|
|
45
|
+
Number.isInteger(d.lines?.start) &&
|
|
46
|
+
Number.isInteger(d.lines?.end) &&
|
|
47
|
+
d.lines.start >= 1 &&
|
|
48
|
+
d.lines.end >= d.lines.start);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** The lexicon names a member's config declares: read statically when it can be, else by loading the config. */
|
|
53
|
+
async function memberLexicons(dir) {
|
|
54
|
+
const { readLexiconDeclarationsStatically } = await import("../config-static.js");
|
|
55
|
+
const read = readLexiconDeclarationsStatically(dir);
|
|
56
|
+
if (read.status === "no-config")
|
|
57
|
+
return [];
|
|
58
|
+
if (read.status === "read") {
|
|
59
|
+
const { registerLexiconDeclarations } = await import("../lexicon-module.js");
|
|
60
|
+
const { dirname } = await import("node:path");
|
|
61
|
+
registerLexiconDeclarations(read.entries, dirname(read.configPath));
|
|
62
|
+
return lexiconNames(read.entries);
|
|
63
|
+
}
|
|
64
|
+
const { loadChantConfig } = await import("../config.js");
|
|
65
|
+
const { config } = await loadChantConfig(dir);
|
|
66
|
+
return lexiconNames(config.lexicons ?? []);
|
|
67
|
+
}
|
|
68
|
+
/** The symbol resolvers the lexicons of the member at `dir` (on disk) contribute, in config order. */
|
|
69
|
+
export async function memberSymbolResolvers(dir, load) {
|
|
70
|
+
const problems = [];
|
|
71
|
+
let names;
|
|
72
|
+
try {
|
|
73
|
+
names = await memberLexicons(dir);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
return { resolvers: [], problems: [`its chant.config could not be read: ${firstLine(err)}`] };
|
|
77
|
+
}
|
|
78
|
+
const loader = load ?? (await import("../cli/plugins.js")).loadPlugin;
|
|
79
|
+
const resolvers = [];
|
|
80
|
+
for (const name of names) {
|
|
81
|
+
let plugin;
|
|
82
|
+
try {
|
|
83
|
+
plugin = await loader(name);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
problems.push(`lexicon "${name}" could not be loaded: ${firstLine(err)}`);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (typeof plugin.symbolResolvers !== "function")
|
|
90
|
+
continue;
|
|
91
|
+
let listed;
|
|
92
|
+
try {
|
|
93
|
+
listed = plugin.symbolResolvers();
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
problems.push(`lexicon "${name}" symbolResolvers() threw: ${firstLine(err)}`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (!Array.isArray(listed)) {
|
|
100
|
+
problems.push(`lexicon "${name}" symbolResolvers() did not return a list`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const r of listed) {
|
|
104
|
+
const ok = checked(name, r, problems);
|
|
105
|
+
if (ok)
|
|
106
|
+
resolvers.push(ok);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { resolvers, problems };
|
|
110
|
+
}
|
|
111
|
+
/** The member directory on disk for a member's `dir` under the workspace root. */
|
|
112
|
+
export const memberDirOnDisk = (root, dir) => (dir === "." ? root : join(root, ...dir.split("/")));
|