@intentius/chant 0.124.12 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic HTTP fetch with caching and zip extraction utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides the download + cache + zip pattern used by lexicon codegen
|
|
5
|
+
* pipelines that fetch schemas from remote sources.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, statSync, unlinkSync, rmSync } from "fs";
|
|
8
|
+
import { dirname, join } from "path";
|
|
9
|
+
import { debug } from "../cli/debug.js";
|
|
10
|
+
// ── Transient-aware fetch ──────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* HTTP statuses worth retrying. These are transient: a gateway hiccup,
|
|
13
|
+
* a rate limit, or an overloaded upstream — not a permanent 404/403.
|
|
14
|
+
*/
|
|
15
|
+
const RETRYABLE_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504]);
|
|
16
|
+
const DEFAULT_RETRIES = 4;
|
|
17
|
+
const DEFAULT_BACKOFF_MS = 1000;
|
|
18
|
+
/**
|
|
19
|
+
* Per-attempt ceiling, so an upstream that accepts a connection and then stops
|
|
20
|
+
* answering cannot hold a build open.
|
|
21
|
+
*
|
|
22
|
+
* Without one, a hung connect waits on the OS default — which on Linux is over
|
|
23
|
+
* a minute — and five of those plus back-off is enough to run a CI job past its
|
|
24
|
+
* timeout. That is not hypothetical: it is what pushed chant's `check` job from
|
|
25
|
+
* ~9m30s to a cancellation at 10m, twice, on two unreachable spec endpoints
|
|
26
|
+
* whose results are only ever a fallback to a committed snapshot anyway.
|
|
27
|
+
*
|
|
28
|
+
* Generous enough for a slow-but-alive endpoint; the point is a bound, not
|
|
29
|
+
* speed.
|
|
30
|
+
*/
|
|
31
|
+
const DEFAULT_ATTEMPT_TIMEOUT_MS = 15000;
|
|
32
|
+
/** Hard cap on Retry-After delays so a rogue header cannot stall CI indefinitely. */
|
|
33
|
+
const MAX_RETRY_AFTER_MS = 60000;
|
|
34
|
+
function sleep(ms) {
|
|
35
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse the `Retry-After` response header and return a delay in milliseconds.
|
|
39
|
+
*
|
|
40
|
+
* The header value may be an integer number of seconds or an HTTP-date.
|
|
41
|
+
* Returns `null` when the header is absent or unparseable.
|
|
42
|
+
* The returned value is capped at {@link MAX_RETRY_AFTER_MS}.
|
|
43
|
+
*/
|
|
44
|
+
function parseRetryAfter(response) {
|
|
45
|
+
const raw = response.headers.get("retry-after");
|
|
46
|
+
if (!raw)
|
|
47
|
+
return null;
|
|
48
|
+
const seconds = Number(raw.trim());
|
|
49
|
+
if (!Number.isNaN(seconds) && seconds >= 0) {
|
|
50
|
+
return Math.min(Math.ceil(seconds * 1000), MAX_RETRY_AFTER_MS);
|
|
51
|
+
}
|
|
52
|
+
// HTTP-date format: "Wed, 01 Jul 2026 12:00:00 GMT"
|
|
53
|
+
const date = new Date(raw);
|
|
54
|
+
if (!Number.isNaN(date.getTime())) {
|
|
55
|
+
return Math.min(Math.max(0, date.getTime() - Date.now()), MAX_RETRY_AFTER_MS);
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetch a URL, retrying on transient failures (network errors and
|
|
61
|
+
* retryable HTTP statuses) with exponential backoff.
|
|
62
|
+
*
|
|
63
|
+
* Permanent failures (e.g. 404, 403) are not retried — they throw on the
|
|
64
|
+
* first response. The returned response is guaranteed `ok`.
|
|
65
|
+
*
|
|
66
|
+
* When a `Retry-After` header is present on a 429 or 503 response the delay
|
|
67
|
+
* from that header is used instead of the exponential back-off for that
|
|
68
|
+
* specific retry, capped at {@link MAX_RETRY_AFTER_MS}.
|
|
69
|
+
*
|
|
70
|
+
* `init` is passed through to `fetch` on every attempt, so callers that
|
|
71
|
+
* need request headers (e.g. the GitHub API `Accept` header) or an abort
|
|
72
|
+
* signal get retries without duplicating the loop.
|
|
73
|
+
*
|
|
74
|
+
* On exhaustion a descriptive {@link TransientFetchError} is thrown rather
|
|
75
|
+
* than the raw last error so the caller can surface a human-readable message.
|
|
76
|
+
*/
|
|
77
|
+
export async function fetchWithRetry(url, retries = DEFAULT_RETRIES, backoffMs = DEFAULT_BACKOFF_MS, init, attemptTimeoutMs = DEFAULT_ATTEMPT_TIMEOUT_MS) {
|
|
78
|
+
let lastStatus;
|
|
79
|
+
let lastError;
|
|
80
|
+
// When a response carries a Retry-After header, the indicated delay replaces
|
|
81
|
+
// the exponential back-off for that specific next retry.
|
|
82
|
+
let retryAfterOverride = null;
|
|
83
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
84
|
+
if (attempt > 0) {
|
|
85
|
+
const delay = retryAfterOverride ?? backoffMs * 2 ** (attempt - 1);
|
|
86
|
+
debug(`retrying ${url} (attempt ${attempt}/${retries}) after ${delay}ms: ${lastError?.message}`);
|
|
87
|
+
retryAfterOverride = null;
|
|
88
|
+
await sleep(delay);
|
|
89
|
+
}
|
|
90
|
+
let response;
|
|
91
|
+
// A caller's own signal still wins; this only bounds an attempt that would
|
|
92
|
+
// otherwise hang with no signal at all.
|
|
93
|
+
const signal = init?.signal ?? AbortSignal.timeout(attemptTimeoutMs);
|
|
94
|
+
try {
|
|
95
|
+
response = await fetch(url, { ...(init ?? {}), signal });
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
// Network-level failure (DNS, connection reset, timeout). Transient.
|
|
99
|
+
lastError = e instanceof Error ? e : new Error(String(e));
|
|
100
|
+
lastStatus = undefined;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (response.ok)
|
|
104
|
+
return response;
|
|
105
|
+
const err = new Error(`Download from ${url} returned ${response.status}`);
|
|
106
|
+
if (!RETRYABLE_STATUSES.has(response.status))
|
|
107
|
+
throw err;
|
|
108
|
+
lastError = err;
|
|
109
|
+
lastStatus = response.status;
|
|
110
|
+
// Capture Retry-After so the next loop iteration uses it instead of backoff
|
|
111
|
+
const retryAfterMs = parseRetryAfter(response);
|
|
112
|
+
if (retryAfterMs !== null) {
|
|
113
|
+
debug(`Retry-After for ${url}: ${retryAfterMs}ms`);
|
|
114
|
+
retryAfterOverride = retryAfterMs;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
throw new TransientFetchError(url, retries, lastStatus, lastError);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Thrown when {@link fetchWithRetry} exhausts all retry attempts on a
|
|
121
|
+
* transient failure (429 / 5xx / network error).
|
|
122
|
+
*
|
|
123
|
+
* The message is human-readable and actionable: it names the URL, the number
|
|
124
|
+
* of attempts made, and the last HTTP status (if any) so that an upstream Op
|
|
125
|
+
* can route it to a report/issue without exposing a raw stack trace.
|
|
126
|
+
*/
|
|
127
|
+
export class TransientFetchError extends Error {
|
|
128
|
+
constructor(url, retries, lastStatus, cause) {
|
|
129
|
+
const attempts = retries + 1;
|
|
130
|
+
const statusPart = lastStatus !== undefined ? ` (HTTP ${lastStatus})` : "";
|
|
131
|
+
super(`Transient fetch failure for ${url}${statusPart} — failed after ${attempts} attempt${attempts === 1 ? "" : "s"}. ` +
|
|
132
|
+
`This is typically a rate-limit or upstream outage. Retry later or check upstream status.`);
|
|
133
|
+
this.url = url;
|
|
134
|
+
this.retries = retries;
|
|
135
|
+
this.lastStatus = lastStatus;
|
|
136
|
+
this.cause = cause;
|
|
137
|
+
this.name = "TransientFetchError";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ── Fetch with cache ───────────────────────────────────────────────
|
|
141
|
+
const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
142
|
+
/**
|
|
143
|
+
* Fetch a URL with local file caching.
|
|
144
|
+
*
|
|
145
|
+
* Returns cached data if the cache file exists and is younger than cacheTtlMs.
|
|
146
|
+
* Otherwise downloads from the URL, caches the result, and returns it.
|
|
147
|
+
*/
|
|
148
|
+
export async function fetchWithCache(config, force = false) {
|
|
149
|
+
const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
|
|
150
|
+
if (!force) {
|
|
151
|
+
try {
|
|
152
|
+
if (existsSync(config.cacheFile)) {
|
|
153
|
+
const stat = statSync(config.cacheFile);
|
|
154
|
+
if (Date.now() - stat.mtimeMs < ttl) {
|
|
155
|
+
return readFileSync(config.cacheFile);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
debug("cache read failed:", e);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
let response;
|
|
164
|
+
try {
|
|
165
|
+
response = await fetchWithRetry(config.url, config.retries ?? DEFAULT_RETRIES, config.backoffMs ?? DEFAULT_BACKOFF_MS, undefined, config.attemptTimeoutMs ?? DEFAULT_ATTEMPT_TIMEOUT_MS);
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
// A stale copy beats a failed build. The archives this caches are pinned
|
|
169
|
+
// by tag or by version in the URL, so a copy past its TTL is the same
|
|
170
|
+
// bytes; the TTL exists to notice an unpinned URL moving, not to expire
|
|
171
|
+
// good data. `force` means the caller needs fresh bytes, so it still throws.
|
|
172
|
+
if (!force && e instanceof TransientFetchError && existsSync(config.cacheFile)) {
|
|
173
|
+
console.error(`${e.message} Using the cached copy at ${config.cacheFile} from ${new Date(statSync(config.cacheFile).mtimeMs).toISOString()}.`);
|
|
174
|
+
return readFileSync(config.cacheFile);
|
|
175
|
+
}
|
|
176
|
+
throw e;
|
|
177
|
+
}
|
|
178
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
179
|
+
const data = Buffer.from(arrayBuffer);
|
|
180
|
+
try {
|
|
181
|
+
mkdirSync(dirname(config.cacheFile), { recursive: true });
|
|
182
|
+
writeFileSync(config.cacheFile, data);
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
debug("cache write failed:", e);
|
|
186
|
+
}
|
|
187
|
+
return data;
|
|
188
|
+
}
|
|
189
|
+
// ── Zip extraction ─────────────────────────────────────────────────
|
|
190
|
+
/**
|
|
191
|
+
* Extract files from a zip buffer using fflate.
|
|
192
|
+
*
|
|
193
|
+
* @param filter - Optional predicate to select which files to include.
|
|
194
|
+
* Receives the file name (path within the zip). Defaults to all files.
|
|
195
|
+
* @returns Map of filename → Buffer for each extracted file.
|
|
196
|
+
*/
|
|
197
|
+
export async function extractFromZip(zipData, filter) {
|
|
198
|
+
const { unzipSync } = await import("fflate");
|
|
199
|
+
const files = unzipSync(new Uint8Array(zipData));
|
|
200
|
+
const result = new Map();
|
|
201
|
+
for (const [name, data] of Object.entries(files)) {
|
|
202
|
+
if (filter && !filter(name))
|
|
203
|
+
continue;
|
|
204
|
+
result.set(name, Buffer.from(data));
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
// ── Tar extraction ──────────────────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Extract files from an uncompressed tar buffer.
|
|
211
|
+
*
|
|
212
|
+
* The caller handles gunzip (via `fflate.gunzipSync` or `zlib.gunzipSync`)
|
|
213
|
+
* and any prefix stripping. Returns `Map<path, Buffer>`.
|
|
214
|
+
*
|
|
215
|
+
* @param filter - Optional predicate to select which files to include.
|
|
216
|
+
* Receives the full file name (path within the tar). Defaults to all regular files.
|
|
217
|
+
*/
|
|
218
|
+
export function extractFromTar(tarData, filter) {
|
|
219
|
+
const result = new Map();
|
|
220
|
+
let offset = 0;
|
|
221
|
+
let longName = null;
|
|
222
|
+
while (offset < tarData.length - 512) {
|
|
223
|
+
const header = tarData.slice(offset, offset + 512);
|
|
224
|
+
offset += 512;
|
|
225
|
+
// Check for end-of-archive marker (all zeros)
|
|
226
|
+
if (header.every((b) => b === 0))
|
|
227
|
+
break;
|
|
228
|
+
// Parse file name (first 100 bytes)
|
|
229
|
+
const nameBytes = header.slice(0, 100);
|
|
230
|
+
let name = new TextDecoder().decode(nameBytes).replace(/\0+$/, "");
|
|
231
|
+
// Check type flag
|
|
232
|
+
const typeFlag = String.fromCharCode(header[156]);
|
|
233
|
+
// Parse file size (bytes 124-135, octal)
|
|
234
|
+
const sizeStr = new TextDecoder().decode(header.slice(124, 136)).replace(/\0+$/, "").trim();
|
|
235
|
+
const size = parseInt(sizeStr, 8) || 0;
|
|
236
|
+
// Calculate blocks to skip
|
|
237
|
+
const blocks = Math.ceil(size / 512);
|
|
238
|
+
if (typeFlag === "L") {
|
|
239
|
+
// GNU long name: read the name from the next data block
|
|
240
|
+
const longNameData = tarData.slice(offset, offset + size);
|
|
241
|
+
longName = new TextDecoder().decode(longNameData).replace(/\0+$/, "");
|
|
242
|
+
offset += blocks * 512;
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Apply long name from previous GNU 'L' entry
|
|
246
|
+
if (longName !== null) {
|
|
247
|
+
name = longName;
|
|
248
|
+
longName = null;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Check prefix field (bytes 345-500) for USTAR format
|
|
252
|
+
const prefix = new TextDecoder().decode(header.slice(345, 500)).replace(/\0+$/, "");
|
|
253
|
+
if (prefix) {
|
|
254
|
+
name = prefix + "/" + name;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const fileData = tarData.slice(offset, offset + size);
|
|
258
|
+
offset += blocks * 512;
|
|
259
|
+
// Skip non-regular files
|
|
260
|
+
if (typeFlag !== "0" && typeFlag !== "\0")
|
|
261
|
+
continue;
|
|
262
|
+
if (filter && !filter(name))
|
|
263
|
+
continue;
|
|
264
|
+
result.set(name, Buffer.from(fileData));
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
const DEFAULT_TAR_CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
269
|
+
/**
|
|
270
|
+
* Fetch a gzipped tarball, extract files matching `tarPrefix`, and cache them
|
|
271
|
+
* in `destDir`. Returns `destDir`.
|
|
272
|
+
*
|
|
273
|
+
* Checks `destDir` mtime against TTL. If fresh, returns immediately.
|
|
274
|
+
* Otherwise downloads, gunzips, extracts matching files, and writes to `destDir`.
|
|
275
|
+
*
|
|
276
|
+
* @param tarPrefix - Only files whose path (after stripping the top-level directory)
|
|
277
|
+
* starts with this prefix will be extracted.
|
|
278
|
+
* @param force - If true, ignore cache and re-download.
|
|
279
|
+
*/
|
|
280
|
+
export async function fetchAndExtractTar(config, tarPrefix, force = false) {
|
|
281
|
+
const ttl = config.cacheTtlMs ?? DEFAULT_TAR_CACHE_TTL_MS;
|
|
282
|
+
if (!force) {
|
|
283
|
+
try {
|
|
284
|
+
if (existsSync(config.destDir)) {
|
|
285
|
+
const stat = statSync(config.destDir);
|
|
286
|
+
if (Date.now() - stat.mtimeMs < ttl) {
|
|
287
|
+
return config.destDir;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
debug("tar cache check failed:", e);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const resp = await fetchWithRetry(config.url);
|
|
296
|
+
const compressed = new Uint8Array(await resp.arrayBuffer());
|
|
297
|
+
const { gunzipSync } = await import("fflate");
|
|
298
|
+
const tarData = gunzipSync(compressed);
|
|
299
|
+
// Remove old cache
|
|
300
|
+
if (existsSync(config.destDir)) {
|
|
301
|
+
rmSync(config.destDir, { recursive: true });
|
|
302
|
+
}
|
|
303
|
+
// Extract files matching the prefix
|
|
304
|
+
let extracted = 0;
|
|
305
|
+
const files = extractFromTar(tarData);
|
|
306
|
+
for (const [name, data] of files) {
|
|
307
|
+
// Strip top-level directory (e.g. "cfn-lint-main/")
|
|
308
|
+
const slashIdx = name.indexOf("/");
|
|
309
|
+
if (slashIdx < 0)
|
|
310
|
+
continue;
|
|
311
|
+
const relPath = name.slice(slashIdx + 1);
|
|
312
|
+
if (!relPath.startsWith(tarPrefix))
|
|
313
|
+
continue;
|
|
314
|
+
const localPath = relPath.slice(tarPrefix.length);
|
|
315
|
+
if (!localPath)
|
|
316
|
+
continue;
|
|
317
|
+
const fullPath = join(config.destDir, localPath);
|
|
318
|
+
const dir = dirname(fullPath);
|
|
319
|
+
mkdirSync(dir, { recursive: true });
|
|
320
|
+
writeFileSync(fullPath, data);
|
|
321
|
+
extracted++;
|
|
322
|
+
}
|
|
323
|
+
if (extracted === 0) {
|
|
324
|
+
throw new Error(`No files matching prefix "${tarPrefix}" found in tarball`);
|
|
325
|
+
}
|
|
326
|
+
return config.destDir;
|
|
327
|
+
}
|
|
328
|
+
// ── Cache utilities ────────────────────────────────────────────────
|
|
329
|
+
/**
|
|
330
|
+
* Clear a cache file. Ignores errors if the file doesn't exist.
|
|
331
|
+
*/
|
|
332
|
+
export function clearCacheFile(cacheFile) {
|
|
333
|
+
try {
|
|
334
|
+
if (existsSync(cacheFile))
|
|
335
|
+
unlinkSync(cacheFile);
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
debug("cache clear failed:", e);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a static, importable barrel of a lexicon's post-synth checks.
|
|
3
|
+
*
|
|
4
|
+
* The runtime loader (`discoverPostSynthChecks`) readdir-globs the directory and
|
|
5
|
+
* `require()`s each file via tsx — fs- and tsx-coupled, so it can't run in a
|
|
6
|
+
* bundle or on an edge runtime (Cloudflare Workers). This generator produces a
|
|
7
|
+
* committed `lint/post-synth/index.ts` with explicit static imports + an exported
|
|
8
|
+
* `postSynthChecks` array, which bundlers can follow with no fs/tsx/require. See #409.
|
|
9
|
+
*
|
|
10
|
+
* Detection reuses the runtime's own `isPostSynthCheck`, so the barrel contains
|
|
11
|
+
* exactly the checks discovery would — including files whose export name differs
|
|
12
|
+
* from the filename (docker/helm) and excluding helper modules
|
|
13
|
+
* (cf-refs, arm-refs, …) that export no check.
|
|
14
|
+
*/
|
|
15
|
+
import { createRequire } from "module";
|
|
16
|
+
import { listRuleFiles } from "../lint/discover.js";
|
|
17
|
+
import { isPostSynthCheck } from "../lint/post-synth.js";
|
|
18
|
+
/**
|
|
19
|
+
* Scan a post-synth directory and return one entry per exported check.
|
|
20
|
+
* Runs at codegen time on Node (tsx-powered require), never in the shipped path.
|
|
21
|
+
*/
|
|
22
|
+
export function scanPostSynthChecks(dir, importMetaUrl) {
|
|
23
|
+
const require = createRequire(importMetaUrl);
|
|
24
|
+
const entries = [];
|
|
25
|
+
for (const file of listRuleFiles(dir)) {
|
|
26
|
+
const base = file.replace(/\.ts$/, "");
|
|
27
|
+
let mod;
|
|
28
|
+
try {
|
|
29
|
+
mod = require(`${dir}/${base}`);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
continue; // a file that fails to load contributes nothing
|
|
33
|
+
}
|
|
34
|
+
for (const [exportName, value] of Object.entries(mod)) {
|
|
35
|
+
if (isPostSynthCheck(value)) {
|
|
36
|
+
entries.push({ module: `./${base}`, exportName, id: value.id });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return entries;
|
|
41
|
+
}
|
|
42
|
+
/** Render the barrel file content from scanned entries (pure — easy to unit test). */
|
|
43
|
+
export function generatePostSynthBarrel(entries) {
|
|
44
|
+
const sorted = [...entries].sort((a, b) => a.id.localeCompare(b.id));
|
|
45
|
+
const lines = [];
|
|
46
|
+
lines.push("// Code generated by chant generate. DO NOT EDIT.");
|
|
47
|
+
lines.push('import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";');
|
|
48
|
+
for (const e of sorted) {
|
|
49
|
+
lines.push(`import { ${e.exportName} } from ${JSON.stringify(e.module)};`);
|
|
50
|
+
}
|
|
51
|
+
lines.push("");
|
|
52
|
+
lines.push("export const postSynthChecks: PostSynthCheck[] = [");
|
|
53
|
+
for (const e of sorted) {
|
|
54
|
+
lines.push(` ${e.exportName},`);
|
|
55
|
+
}
|
|
56
|
+
lines.push("];");
|
|
57
|
+
lines.push("");
|
|
58
|
+
return lines.join("\n");
|
|
59
|
+
}
|
|
60
|
+
/** Scan a directory and render its barrel in one step. */
|
|
61
|
+
export function renderPostSynthBarrelForDir(dir, importMetaUrl) {
|
|
62
|
+
return generatePostSynthBarrel(scanPostSynthChecks(dir, importMetaUrl));
|
|
63
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic lexicon registry builder.
|
|
3
|
+
*
|
|
4
|
+
* Implements the shared loop: iterate parsed results, resolve naming,
|
|
5
|
+
* build attrs/constraints maps, call format-specific entry builders,
|
|
6
|
+
* handle aliases and property type sub-entries.
|
|
7
|
+
*/
|
|
8
|
+
import { propertyTypeName, extractDefName } from "./naming.js";
|
|
9
|
+
import { constraintsIsEmpty } from "./json-schema.js";
|
|
10
|
+
/**
|
|
11
|
+
* Build a registry of entries from parsed results using the naming strategy.
|
|
12
|
+
*/
|
|
13
|
+
export function buildRegistry(results, naming, config) {
|
|
14
|
+
const entries = {};
|
|
15
|
+
for (const r of results) {
|
|
16
|
+
const typeName = r.typeName;
|
|
17
|
+
const tsName = naming.resolve(typeName);
|
|
18
|
+
if (!tsName)
|
|
19
|
+
continue;
|
|
20
|
+
// Build attrs map: TS key (underscores) → CF attr name (dots)
|
|
21
|
+
let attrs;
|
|
22
|
+
if (r.attributes.length > 0) {
|
|
23
|
+
attrs = {};
|
|
24
|
+
for (const a of r.attributes) {
|
|
25
|
+
const tsKey = a.name.replace(/\./g, "_");
|
|
26
|
+
attrs[tsKey] = a.name;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Build per-property constraints (skip empty)
|
|
30
|
+
let propConstraints;
|
|
31
|
+
for (const p of r.properties) {
|
|
32
|
+
if (!constraintsIsEmpty(p.constraints)) {
|
|
33
|
+
if (!propConstraints)
|
|
34
|
+
propConstraints = {};
|
|
35
|
+
propConstraints[p.name] = p.constraints;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const entry = config.buildEntry(r, tsName, attrs, propConstraints);
|
|
39
|
+
entries[tsName] = entry;
|
|
40
|
+
// Alias entries
|
|
41
|
+
for (const alias of naming.aliases(typeName)) {
|
|
42
|
+
entries[alias] = entry;
|
|
43
|
+
}
|
|
44
|
+
// Property type entries
|
|
45
|
+
const shortName = config.shortName(typeName);
|
|
46
|
+
const ptAliases = naming.propertyTypeAliases(typeName);
|
|
47
|
+
for (const pt of r.propertyTypes) {
|
|
48
|
+
const defName = extractDefName(pt.name, shortName);
|
|
49
|
+
const ptName = propertyTypeName(tsName, defName);
|
|
50
|
+
const ptEntry = config.buildPropertyEntry(typeName, pt.specType);
|
|
51
|
+
entries[ptName] = ptEntry;
|
|
52
|
+
if (ptAliases) {
|
|
53
|
+
const aliasName = ptAliases.get(defName);
|
|
54
|
+
if (aliasName) {
|
|
55
|
+
entries[aliasName] = ptEntry;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sort registry keys and serialize to JSON.
|
|
64
|
+
*/
|
|
65
|
+
export function serializeRegistry(entries) {
|
|
66
|
+
const sorted = {};
|
|
67
|
+
for (const key of Object.keys(entries).sort()) {
|
|
68
|
+
sorted[key] = entries[key];
|
|
69
|
+
}
|
|
70
|
+
return JSON.stringify(sorted, null, 2);
|
|
71
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic runtime index generator for lexicon packages.
|
|
3
|
+
*
|
|
4
|
+
* Produces the `index.ts` file containing factory constructor exports
|
|
5
|
+
* (`createResource`, `createProperty`) and collision-safe re-exports. Each
|
|
6
|
+
* factory call is marked pure, so a bundler drops the classes a caller does
|
|
7
|
+
* not import instead of keeping every one.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generate the runtime index.ts content with factory constructor exports.
|
|
11
|
+
*
|
|
12
|
+
* Phases:
|
|
13
|
+
* 1. Banner + import createResource/createProperty
|
|
14
|
+
* 2. Sort and emit resource exports
|
|
15
|
+
* 3. Sort and emit property exports
|
|
16
|
+
* 4. Collision-safe re-exports of intrinsics and pseudo-parameters
|
|
17
|
+
*/
|
|
18
|
+
export function generateRuntimeIndex(resources, properties, config) {
|
|
19
|
+
const lines = [];
|
|
20
|
+
lines.push("// Code generated by chant generate. DO NOT EDIT.");
|
|
21
|
+
lines.push('import { createResource, createProperty } from "./runtime";');
|
|
22
|
+
lines.push("");
|
|
23
|
+
// Sort and emit resource exports
|
|
24
|
+
const sortedResources = [...resources].sort((a, b) => a.tsName.localeCompare(b.tsName));
|
|
25
|
+
for (const { tsName, resourceType, attrs } of sortedResources) {
|
|
26
|
+
const attrsStr = JSON.stringify(attrs);
|
|
27
|
+
lines.push(`export const ${tsName} = /* @__PURE__ */ createResource(${JSON.stringify(resourceType)}, ${JSON.stringify(config.lexiconName)}, ${attrsStr});`);
|
|
28
|
+
}
|
|
29
|
+
lines.push("");
|
|
30
|
+
// Sort and emit property exports
|
|
31
|
+
const sortedProperties = [...properties].sort((a, b) => a.tsName.localeCompare(b.tsName));
|
|
32
|
+
for (const { tsName, resourceType } of sortedProperties) {
|
|
33
|
+
lines.push(`export const ${tsName} = /* @__PURE__ */ createProperty(${JSON.stringify(resourceType)}, ${JSON.stringify(config.lexiconName)});`);
|
|
34
|
+
}
|
|
35
|
+
lines.push("");
|
|
36
|
+
// Collision-safe re-exports
|
|
37
|
+
const allExportNames = new Set([
|
|
38
|
+
...resources.map((e) => e.tsName),
|
|
39
|
+
...properties.map((e) => e.tsName),
|
|
40
|
+
]);
|
|
41
|
+
lines.push("// Re-exports for convenience");
|
|
42
|
+
if (config.intrinsicReExports) {
|
|
43
|
+
const safe = config.intrinsicReExports.names.filter((n) => !allExportNames.has(n));
|
|
44
|
+
if (safe.length > 0) {
|
|
45
|
+
lines.push(`export { ${safe.join(", ")} } from ${JSON.stringify(config.intrinsicReExports.from)};`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (config.pseudoReExports) {
|
|
49
|
+
const safe = config.pseudoReExports.names.filter((n) => !allExportNames.has(n));
|
|
50
|
+
if (safe.length > 0) {
|
|
51
|
+
lines.push(`export { ${safe.join(", ")} } from ${JSON.stringify(config.pseudoReExports.from)};`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
lines.push("");
|
|
55
|
+
return lines.join("\n");
|
|
56
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic TypeScript declaration (.d.ts) generation utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for writing resource classes, property classes,
|
|
5
|
+
* constructors, and enum types. Lexicon-specific generators use these
|
|
6
|
+
* building blocks with their own orchestration logic.
|
|
7
|
+
*/
|
|
8
|
+
// ── Writers ─────────────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Write a resource class declaration with constructor and readonly attributes.
|
|
11
|
+
*/
|
|
12
|
+
export function writeResourceClass(lines, tsName, properties, attributes, remap, resourceAttributesType) {
|
|
13
|
+
lines.push("");
|
|
14
|
+
lines.push(`export declare class ${tsName} {`);
|
|
15
|
+
writeConstructor(lines, properties, remap, resourceAttributesType);
|
|
16
|
+
// Attributes as readonly properties (sorted)
|
|
17
|
+
const attrs = [...attributes].sort((a, b) => a.name.localeCompare(b.name));
|
|
18
|
+
for (const a of attrs) {
|
|
19
|
+
const attrType = resolveConstructorType(a.type, remap);
|
|
20
|
+
lines.push(` readonly ${a.name}: ${attrType};`);
|
|
21
|
+
}
|
|
22
|
+
lines.push("}");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Write a property class declaration with constructor.
|
|
26
|
+
*/
|
|
27
|
+
export function writePropertyClass(lines, tsName, properties, remap) {
|
|
28
|
+
lines.push("");
|
|
29
|
+
lines.push(`export declare class ${tsName} {`);
|
|
30
|
+
writeConstructor(lines, properties, remap);
|
|
31
|
+
lines.push("}");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Write a constructor with typed props parameter.
|
|
35
|
+
*/
|
|
36
|
+
export function writeConstructor(lines, props, remap, resourceAttributesType) {
|
|
37
|
+
if (props.length === 0) {
|
|
38
|
+
if (resourceAttributesType) {
|
|
39
|
+
lines.push(` constructor(props: Record<string, unknown>, attributes?: ${resourceAttributesType});`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
lines.push(" constructor(props: Record<string, unknown>);");
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Sort: required first, then optional, each group alphabetically
|
|
47
|
+
const sorted = [...props].sort((a, b) => {
|
|
48
|
+
if (a.required !== b.required)
|
|
49
|
+
return a.required ? -1 : 1;
|
|
50
|
+
return a.name.localeCompare(b.name);
|
|
51
|
+
});
|
|
52
|
+
lines.push(" constructor(props: {");
|
|
53
|
+
for (const p of sorted) {
|
|
54
|
+
const optional = p.required ? "" : "?";
|
|
55
|
+
const tsType = resolveConstructorType(p.type, remap);
|
|
56
|
+
if (p.description) {
|
|
57
|
+
// Sanitize: escape */ to prevent breaking JSDoc comments
|
|
58
|
+
const safeDesc = p.description.replace(/\*\//g, "*\\/");
|
|
59
|
+
lines.push(` /** ${safeDesc} */`);
|
|
60
|
+
}
|
|
61
|
+
const safeName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(p.name) ? p.name : JSON.stringify(p.name);
|
|
62
|
+
lines.push(` ${safeName}${optional}: ${tsType};`);
|
|
63
|
+
}
|
|
64
|
+
if (resourceAttributesType) {
|
|
65
|
+
lines.push(` }, attributes?: ${resourceAttributesType});`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
lines.push(" });");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Write an enum union type.
|
|
73
|
+
*/
|
|
74
|
+
export function writeEnumType(lines, tsName, values) {
|
|
75
|
+
const sorted = [...values].sort();
|
|
76
|
+
const quoted = sorted.map((v) => JSON.stringify(v));
|
|
77
|
+
const singleLine = `\nexport type ${tsName} = ${quoted.join(" | ")};`;
|
|
78
|
+
if (singleLine.length <= 100) {
|
|
79
|
+
lines.push(singleLine);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
lines.push("");
|
|
83
|
+
lines.push(`export type ${tsName} =`);
|
|
84
|
+
for (let i = 0; i < quoted.length; i++) {
|
|
85
|
+
const suffix = i < quoted.length - 1 ? "" : ";";
|
|
86
|
+
lines.push(` | ${quoted[i]}${suffix}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolve a type string through the remap table, handling arrays and
|
|
92
|
+
* common type normalization.
|
|
93
|
+
*/
|
|
94
|
+
export function resolveConstructorType(tsType, remap) {
|
|
95
|
+
// Handle array types
|
|
96
|
+
if (tsType.endsWith("[]")) {
|
|
97
|
+
const inner = tsType.slice(0, -2);
|
|
98
|
+
return resolveConstructorType(inner, remap) + "[]";
|
|
99
|
+
}
|
|
100
|
+
// Primitive and pass-through types
|
|
101
|
+
switch (tsType) {
|
|
102
|
+
case "string":
|
|
103
|
+
case "number":
|
|
104
|
+
case "boolean":
|
|
105
|
+
case "any":
|
|
106
|
+
return tsType;
|
|
107
|
+
case "Record<string, any>":
|
|
108
|
+
return "Record<string, unknown>";
|
|
109
|
+
case "Record<string, unknown>":
|
|
110
|
+
return tsType;
|
|
111
|
+
}
|
|
112
|
+
// Remap parser property type names to resolved names
|
|
113
|
+
if (remap) {
|
|
114
|
+
const resolved = remap.get(tsType);
|
|
115
|
+
if (resolved)
|
|
116
|
+
return resolved;
|
|
117
|
+
}
|
|
118
|
+
return tsType;
|
|
119
|
+
}
|