@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Peelability scoring for the carve-out advisor (#214 T3).
|
|
3
|
+
*
|
|
4
|
+
* The model, verbatim from #197:
|
|
5
|
+
*
|
|
6
|
+
* score = 100
|
|
7
|
+
* - 12 * inbound # survivors that depend on this → each a TF data-source patch
|
|
8
|
+
* - 4 * outbound # this depends on survivors → a deferred deploy-time input
|
|
9
|
+
* - 4 * outputs # an output block reads this → a one-line rewrite (#1638)
|
|
10
|
+
* - 15 * (tier - 1) # native-spec map: tier1=0, tier2=-15, tier3=-30
|
|
11
|
+
* - 10 * has_dynamic # count / for_each / data present
|
|
12
|
+
* - 3 * (instances - 1) # state-expanded instance count
|
|
13
|
+
* clamp 0..100 (unsupported provider/type → 0)
|
|
14
|
+
*
|
|
15
|
+
* An `output` block referencing the target is a real inbound dependency — the
|
|
16
|
+
* surviving plan errors on the dangling reference — so it cannot score as
|
|
17
|
+
* free. It is not a data-source patch either: bridging it rewrites one
|
|
18
|
+
* expression in a block that manages no infrastructure, the same order of work
|
|
19
|
+
* as recording an outbound deferred input. Hence 4, not 12.
|
|
20
|
+
*
|
|
21
|
+
* Sub-resources that inline into a parent (see `foldParentOf`) are folded into the
|
|
22
|
+
* parent's carve set: they are removed from the ranking and their edge to the
|
|
23
|
+
* parent is not counted as inbound — inlining them is free, not boundary work.
|
|
24
|
+
*
|
|
25
|
+
* The model itself is not Terraform-specific — the CDK cloud-assembly advisor
|
|
26
|
+
* (#1056) scores construct units with the same arithmetic. What differs per
|
|
27
|
+
* source is the type→tier lookup and the extra signals that source can see, so
|
|
28
|
+
* both are injectable via `ScoreOptions` rather than forked into a second
|
|
29
|
+
* scorer. Everything else — the six penalty terms, the clamp, the bands — is
|
|
30
|
+
* shared verbatim.
|
|
31
|
+
*/
|
|
32
|
+
import { inboundEdges, outboundEdges } from "./graph.js";
|
|
33
|
+
import { foldParentOf, resolveTier } from "./tier-map.js";
|
|
34
|
+
const clamp = (n) => Math.max(0, Math.min(100, n));
|
|
35
|
+
/**
|
|
36
|
+
* `-12 * 0` is `-0`, and JSON has no notation for it — a report written to a
|
|
37
|
+
* file would not equal the one held in memory. A term that costs nothing is 0.
|
|
38
|
+
*/
|
|
39
|
+
const term = (n) => (n === 0 ? 0 : n);
|
|
40
|
+
export function bandFor(score) {
|
|
41
|
+
if (score >= 80)
|
|
42
|
+
return "clean leaf";
|
|
43
|
+
if (score >= 50)
|
|
44
|
+
return "carvable w/ edits";
|
|
45
|
+
return "leave in Terraform";
|
|
46
|
+
}
|
|
47
|
+
/** Module tier: a module maps to a chant composite — reshaping, so tier 2 by default. */
|
|
48
|
+
const MODULE_TIER = 2;
|
|
49
|
+
/**
|
|
50
|
+
* Build the set of addresses that fold into a parent present in the estate, plus
|
|
51
|
+
* the reverse lookup (parent → its folded children), so a parent can discount
|
|
52
|
+
* inbound edges coming from its own folded sub-resources.
|
|
53
|
+
*/
|
|
54
|
+
function computeFolds(graph) {
|
|
55
|
+
const byAddress = new Map(graph.nodes.map((n) => [n.address, n]));
|
|
56
|
+
const folded = new Set();
|
|
57
|
+
const childrenOf = new Map();
|
|
58
|
+
for (const node of graph.nodes) {
|
|
59
|
+
if (node.kind !== "resource" || !node.type)
|
|
60
|
+
continue;
|
|
61
|
+
const parentType = foldParentOf(node.type);
|
|
62
|
+
if (!parentType)
|
|
63
|
+
continue;
|
|
64
|
+
const parentAddress = `${parentType}.${node.name}`;
|
|
65
|
+
if (!byAddress.has(parentAddress))
|
|
66
|
+
continue; // sub-resource without its parent → score it on its own
|
|
67
|
+
folded.add(node.address);
|
|
68
|
+
if (!childrenOf.has(parentAddress))
|
|
69
|
+
childrenOf.set(parentAddress, new Set());
|
|
70
|
+
childrenOf.get(parentAddress).add(node.address);
|
|
71
|
+
}
|
|
72
|
+
return { folded, childrenOf };
|
|
73
|
+
}
|
|
74
|
+
function scoreNode(node, graph, foldedChildren, opts) {
|
|
75
|
+
// Inbound excludes edges from this node's own folded sub-resources, and
|
|
76
|
+
// counts output blocks separately — they cost less to bridge (#1638).
|
|
77
|
+
const inboundAll = inboundEdges(graph, node.address).filter((e) => !foldedChildren.has(e.from));
|
|
78
|
+
const inbound = inboundAll.filter((e) => e.fromKind !== "output").length;
|
|
79
|
+
const outputs = inboundAll.length - inbound;
|
|
80
|
+
const outbound = outboundEdges(graph, node.address).length;
|
|
81
|
+
const signals = opts.signalsFor?.(node) ?? {};
|
|
82
|
+
const extra = { ...(signals.penalties ?? {}) };
|
|
83
|
+
const trimmings = {
|
|
84
|
+
...(signals.notes?.length ? { notes: signals.notes } : {}),
|
|
85
|
+
...(signals.members?.length ? { members: signals.members } : {}),
|
|
86
|
+
};
|
|
87
|
+
const tierOf = opts.tierOf ?? resolveTier;
|
|
88
|
+
const tierInfo = node.kind === "module" ? { tier: MODULE_TIER, mapsTo: undefined } : node.type ? tierOf(node.type) : null;
|
|
89
|
+
const tier = tierInfo ? tierInfo.tier : null;
|
|
90
|
+
// Unsupported provider/type, or a source-specific disqualification → 0, no
|
|
91
|
+
// partial credit. The extra penalties are dropped with the rest of the
|
|
92
|
+
// arithmetic: there is no score left for them to reduce.
|
|
93
|
+
if (tier === null || signals.disqualified) {
|
|
94
|
+
return {
|
|
95
|
+
address: node.address,
|
|
96
|
+
kind: node.kind,
|
|
97
|
+
score: 0,
|
|
98
|
+
band: "leave in Terraform",
|
|
99
|
+
...(tier === null ? {} : { mapsTo: tierInfo && "mapsTo" in tierInfo ? tierInfo.mapsTo : undefined }),
|
|
100
|
+
breakdown: {
|
|
101
|
+
inbound,
|
|
102
|
+
outbound,
|
|
103
|
+
outputs,
|
|
104
|
+
tier,
|
|
105
|
+
hasDynamic: node.hasDynamic,
|
|
106
|
+
instances: node.instances,
|
|
107
|
+
penalties: { inbound: 0, outbound: 0, outputs: 0, tier: 0, dynamic: 0, instances: 0 },
|
|
108
|
+
},
|
|
109
|
+
...trimmings,
|
|
110
|
+
...(signals.disqualified ? { notes: [signals.disqualified, ...(signals.notes ?? [])] } : {}),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const penalties = {
|
|
114
|
+
inbound: term(-12 * inbound),
|
|
115
|
+
outbound: term(-4 * outbound),
|
|
116
|
+
outputs: term(-4 * outputs),
|
|
117
|
+
tier: term(-15 * (tier - 1)),
|
|
118
|
+
dynamic: node.hasDynamic ? -10 : 0,
|
|
119
|
+
instances: term(-3 * Math.max(0, node.instances - 1)),
|
|
120
|
+
...Object.fromEntries(Object.entries(extra).map(([key, value]) => [key, term(value)])),
|
|
121
|
+
};
|
|
122
|
+
const score = clamp(100 + Object.values(penalties).reduce((sum, n) => sum + n, 0));
|
|
123
|
+
return {
|
|
124
|
+
address: node.address,
|
|
125
|
+
kind: node.kind,
|
|
126
|
+
score,
|
|
127
|
+
band: bandFor(score),
|
|
128
|
+
mapsTo: tierInfo && "mapsTo" in tierInfo ? tierInfo.mapsTo : undefined,
|
|
129
|
+
breakdown: {
|
|
130
|
+
inbound,
|
|
131
|
+
outbound,
|
|
132
|
+
outputs,
|
|
133
|
+
tier,
|
|
134
|
+
hasDynamic: node.hasDynamic,
|
|
135
|
+
instances: node.instances,
|
|
136
|
+
penalties,
|
|
137
|
+
},
|
|
138
|
+
...trimmings,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Score every carvable node in the estate, ranked most-peelable first. Folded
|
|
143
|
+
* sub-resources are omitted (they carve with their parent, not on their own).
|
|
144
|
+
*/
|
|
145
|
+
export function scoreEstate(graph, opts = {}) {
|
|
146
|
+
const { folded, childrenOf } = computeFolds(graph);
|
|
147
|
+
return graph.nodes
|
|
148
|
+
.filter((n) => !folded.has(n.address))
|
|
149
|
+
.map((n) => scoreNode(n, graph, childrenOf.get(n.address) ?? new Set(), opts))
|
|
150
|
+
.sort((a, b) => b.score - a.score || (a.address < b.address ? -1 : a.address > b.address ? 1 : 0));
|
|
151
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in `.tfstate` reader for the carve-out advisor (#214 T2).
|
|
3
|
+
*
|
|
4
|
+
* A `.tf`-only parse cannot know how many instances a `count`/`for_each` block
|
|
5
|
+
* expands to — it reports 1 and flags the node dynamic. State is where those
|
|
6
|
+
* are unrolled: each managed resource carries an `instances` array with one
|
|
7
|
+
* entry per expansion. Feeding state in makes the `-3*(instances-1)` penalty
|
|
8
|
+
* accurate, so a 200-instance fan-out ranks as the boundary work it really is.
|
|
9
|
+
*
|
|
10
|
+
* This is deliberately separate and opt-in (`--state <path>`): a pure-`.tf`
|
|
11
|
+
* parse is a plain file read, while reading state pulls in a state backend's
|
|
12
|
+
* output. JSON only — no HCL, no wasm.
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync } from "fs";
|
|
15
|
+
/**
|
|
16
|
+
* Read one root-module managed resource's resolved attributes from state, by
|
|
17
|
+
* Terraform address (`aws_s3_bucket.assets`). This is the true source of a
|
|
18
|
+
* Terraform-managed resource's live shape — unlike a CloudFormation export, it
|
|
19
|
+
* exists whether or not the resource was ever in a CFN stack. Returns null if
|
|
20
|
+
* the address is absent, is a data source, or is module-nested.
|
|
21
|
+
*/
|
|
22
|
+
export function readStateResource(statePath, address) {
|
|
23
|
+
const state = JSON.parse(readFileSync(statePath, "utf-8"));
|
|
24
|
+
for (const res of state.resources ?? []) {
|
|
25
|
+
if (res.mode === "data" || res.module)
|
|
26
|
+
continue;
|
|
27
|
+
if (`${res.type}.${res.name}` !== address)
|
|
28
|
+
continue;
|
|
29
|
+
const attributes = res.instances?.[0]?.attributes;
|
|
30
|
+
if (!attributes)
|
|
31
|
+
return null;
|
|
32
|
+
return { type: res.type, name: res.name, attributes };
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Map each root-module managed resource address to its state-expanded instance
|
|
38
|
+
* count. Resources nested in a `module` are skipped: the `.tf` graph models a
|
|
39
|
+
* module as a single node, so there is no per-resource node to attach the count
|
|
40
|
+
* to (a documented v1 limitation — module internals are not descended into).
|
|
41
|
+
*/
|
|
42
|
+
export function readStateInstanceCounts(statePath) {
|
|
43
|
+
const raw = readFileSync(statePath, "utf-8");
|
|
44
|
+
const state = JSON.parse(raw);
|
|
45
|
+
const counts = new Map();
|
|
46
|
+
for (const res of state.resources ?? []) {
|
|
47
|
+
if (res.mode === "data")
|
|
48
|
+
continue; // data sources are not carvable nodes
|
|
49
|
+
if (res.module)
|
|
50
|
+
continue; // nested in a module → no top-level node to map
|
|
51
|
+
const address = `${res.type}.${res.name}`;
|
|
52
|
+
counts.set(address, Array.isArray(res.instances) ? res.instances.length : 1);
|
|
53
|
+
}
|
|
54
|
+
return counts;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Overlay state instance counts onto a graph in place. Nodes absent from state
|
|
58
|
+
* keep their `.tf`-derived count of 1. Returns the same graph for chaining.
|
|
59
|
+
*/
|
|
60
|
+
export function applyStateCounts(graph, counts) {
|
|
61
|
+
for (const node of graph.nodes) {
|
|
62
|
+
const n = counts.get(node.address);
|
|
63
|
+
if (n !== undefined)
|
|
64
|
+
node.instances = Math.max(1, n);
|
|
65
|
+
}
|
|
66
|
+
return graph;
|
|
67
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terraform-type → native-spec ranking for the carve-out advisor (#214 T3),
|
|
3
|
+
* resolved through the carve provider registry (`carve-provider.ts`, #2016).
|
|
4
|
+
*
|
|
5
|
+
* Every entry comes from a registered provider: the AWS ones from the single
|
|
6
|
+
* AWS carve-out table (`providers/aws.ts` over `aws-resources.ts`), so the
|
|
7
|
+
* advisor ranks exactly the AWS types `carve emit` can produce — no advise↔emit
|
|
8
|
+
* cliff — and the Kubernetes ones from `providers/kubernetes.ts`, which emits
|
|
9
|
+
* `kubernetes_manifest` and ranks the typed provider resources it does not.
|
|
10
|
+
*
|
|
11
|
+
* tier 1 — a clean 1:1 native resource
|
|
12
|
+
* tier 2 — maps, but with reshaping
|
|
13
|
+
* tier 3 — a hard/partial map
|
|
14
|
+
* null — no known native mapping (unsupported provider/type) → score 0
|
|
15
|
+
*
|
|
16
|
+
* These are functions, not frozen constants: the registry is open, so a
|
|
17
|
+
* provider registered after module load has to be visible here.
|
|
18
|
+
*/
|
|
19
|
+
import { carveDataSourceShape, carveFoldParent, carveIdentityAttr, carveTierMap, resolveEmitProvider, } from "./carve-provider.js";
|
|
20
|
+
export { carveEmitTypes } from "./carve-provider.js";
|
|
21
|
+
/** TF resource type → native tier, over every registered provider. Absent = unsupported (score 0). */
|
|
22
|
+
export function tierMap() {
|
|
23
|
+
return carveTierMap();
|
|
24
|
+
}
|
|
25
|
+
export function resolveTier(tfType) {
|
|
26
|
+
return carveTierMap()[tfType] ?? null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The HCL attribute carrying a resource's physical name. A dotted entry is a
|
|
30
|
+
* path into nested blocks (`manifest.metadata.name`). Used for the graph's
|
|
31
|
+
* identity and the live-import hint. Absent → fall back to the TF logical name.
|
|
32
|
+
*/
|
|
33
|
+
export function identityAttrOf(tfType) {
|
|
34
|
+
return carveIdentityAttr(tfType);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The parent Terraform type a sub-resource folds into, if any. Terraform splits
|
|
38
|
+
* configuration the native spec keeps in one resource; a sub-resource sharing
|
|
39
|
+
* its parent's name carves with the parent rather than being ranked on its own.
|
|
40
|
+
*/
|
|
41
|
+
export function foldParentOf(tfType) {
|
|
42
|
+
return carveFoldParent(tfType);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Can `chant carve emit` produce chant source for this type? Narrower than
|
|
46
|
+
* `resolveTier`: providers also rank types no emit path can adopt (the typed
|
|
47
|
+
* `kubernetes_*` resources, whose manifest only the provider schema knows how
|
|
48
|
+
* to reassemble). Both emit paths — `--state` and `--env` — gate on this, so a
|
|
49
|
+
* type either command refuses is refused by the other with the same message.
|
|
50
|
+
*/
|
|
51
|
+
export function canCarveEmit(tfType) {
|
|
52
|
+
return resolveEmitProvider(tfType) !== undefined;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* How `chant carve bridge` reads this type back as a `data` source: the
|
|
56
|
+
* data-source type, where each argument comes from in the carved body, and how
|
|
57
|
+
* a survivor's attribute path translates (#2034). Undefined when the type
|
|
58
|
+
* cannot be read back at all.
|
|
59
|
+
*/
|
|
60
|
+
export function dataSourceShapeOf(tfType) {
|
|
61
|
+
return carveDataSourceShape(tfType);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Can `chant carve bridge` render a Terraform `data` source for this type?
|
|
65
|
+
* True whenever its provider contributes a shape — declared, or implied by a
|
|
66
|
+
* plain identity attribute. False for a dotted identity attribute with no
|
|
67
|
+
* declared shape: that is a path into nested values, and a flat `attr = value`
|
|
68
|
+
* body cannot express it (`manifest.metadata.name = "x"` is not valid HCL). A
|
|
69
|
+
* type with no identity attribute at all still bridges; the bridge writes a
|
|
70
|
+
* TODO comment for the body.
|
|
71
|
+
*/
|
|
72
|
+
export function canBridge(tfType) {
|
|
73
|
+
return carveDataSourceShape(tfType) !== undefined;
|
|
74
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the read-only Terraform carve-out advisor (#214).
|
|
3
|
+
*
|
|
4
|
+
* The advisor never emits, patches, or mutates state. It parses a Terraform
|
|
5
|
+
* estate into a dependency graph and scores each resource/module by
|
|
6
|
+
* "peelability" — how cleanly it could later be carved into native chant
|
|
7
|
+
* source (the emit/boundary/apply phases stay in #197, gated on demand).
|
|
8
|
+
*
|
|
9
|
+
* The graph layer here is intentionally pure: it consumes the JSON shape
|
|
10
|
+
* `@cdktn/hcl2json` produces (see `parse.ts`), so the graph and scoring can
|
|
11
|
+
* be tested without loading the wasm parser.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal unified-diff generator for the carve bridge patch (#998). Emits
|
|
3
|
+
* git-applyable hunks (`git apply`, or plain `patch -p1`) so the whole survivor
|
|
4
|
+
* edit — data sources plus rewired references — lands in one reviewable file.
|
|
5
|
+
* LCS-based; bridge inputs are hand-sized `.tf` files, so O(n·m) is fine.
|
|
6
|
+
*/
|
|
7
|
+
/** One file's diff, `a/<path>` → `b/<path>`, with git headers. Empty when unchanged. */
|
|
8
|
+
export function unifiedDiff(path, oldText, newText, context = 3) {
|
|
9
|
+
if (oldText === newText)
|
|
10
|
+
return "";
|
|
11
|
+
const oldLines = splitLines(oldText);
|
|
12
|
+
const newLines = splitLines(newText);
|
|
13
|
+
const ops = diffOps(oldLines.lines, newLines.lines);
|
|
14
|
+
const hunks = buildHunks(ops, context);
|
|
15
|
+
if (hunks.length === 0)
|
|
16
|
+
return "";
|
|
17
|
+
const L = [];
|
|
18
|
+
L.push(`diff --git a/${path} b/${path}`);
|
|
19
|
+
L.push(`--- a/${path}`);
|
|
20
|
+
L.push(`+++ b/${path}`);
|
|
21
|
+
for (const hunk of hunks) {
|
|
22
|
+
L.push(`@@ -${hunkRange(hunk.oldStart, hunk.oldCount)} +${hunkRange(hunk.newStart, hunk.newCount)} @@`);
|
|
23
|
+
for (const op of hunk.ops) {
|
|
24
|
+
L.push(`${op.kind === "add" ? "+" : op.kind === "del" ? "-" : " "}${op.line}`);
|
|
25
|
+
if (op.kind !== "add" && op.oldIndex === oldLines.lines.length - 1 && !oldLines.trailingNewline) {
|
|
26
|
+
L.push("\");
|
|
27
|
+
}
|
|
28
|
+
if (op.kind !== "del" && op.newIndex === newLines.lines.length - 1 && !newLines.trailingNewline) {
|
|
29
|
+
L.push("\");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return L.join("\n") + "\n";
|
|
34
|
+
}
|
|
35
|
+
/** A new-file diff (`/dev/null` → `b/<path>`), git-applyable. */
|
|
36
|
+
export function newFileDiff(path, text) {
|
|
37
|
+
const { lines, trailingNewline } = splitLines(text);
|
|
38
|
+
const L = [];
|
|
39
|
+
L.push(`diff --git a/${path} b/${path}`);
|
|
40
|
+
L.push("new file mode 100644");
|
|
41
|
+
L.push("--- /dev/null");
|
|
42
|
+
L.push(`+++ b/${path}`);
|
|
43
|
+
if (lines.length > 0) {
|
|
44
|
+
L.push(`@@ -0,0 +${hunkRange(1, lines.length)} @@`);
|
|
45
|
+
for (const line of lines)
|
|
46
|
+
L.push(`+${line}`);
|
|
47
|
+
if (!trailingNewline)
|
|
48
|
+
L.push("\");
|
|
49
|
+
}
|
|
50
|
+
return L.join("\n") + "\n";
|
|
51
|
+
}
|
|
52
|
+
function hunkRange(start, count) {
|
|
53
|
+
return count === 1 ? String(start) : `${count === 0 ? start - 1 : start},${count}`;
|
|
54
|
+
}
|
|
55
|
+
function splitLines(text) {
|
|
56
|
+
if (text === "")
|
|
57
|
+
return { lines: [], trailingNewline: true };
|
|
58
|
+
const trailingNewline = text.endsWith("\n");
|
|
59
|
+
const lines = text.split("\n");
|
|
60
|
+
if (trailingNewline)
|
|
61
|
+
lines.pop();
|
|
62
|
+
return { lines, trailingNewline };
|
|
63
|
+
}
|
|
64
|
+
/** Line-level LCS diff as a flat op list. */
|
|
65
|
+
function diffOps(a, b) {
|
|
66
|
+
const n = a.length;
|
|
67
|
+
const m = b.length;
|
|
68
|
+
// lcs[i][j] = LCS length of a[i..] and b[j..]
|
|
69
|
+
const lcs = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
|
|
70
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
71
|
+
for (let j = m - 1; j >= 0; j--) {
|
|
72
|
+
lcs[i][j] = a[i] === b[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const ops = [];
|
|
76
|
+
let i = 0;
|
|
77
|
+
let j = 0;
|
|
78
|
+
while (i < n && j < m) {
|
|
79
|
+
if (a[i] === b[j]) {
|
|
80
|
+
ops.push({ kind: "keep", line: a[i], oldIndex: i, newIndex: j });
|
|
81
|
+
i++;
|
|
82
|
+
j++;
|
|
83
|
+
}
|
|
84
|
+
else if (lcs[i + 1][j] >= lcs[i][j + 1]) {
|
|
85
|
+
ops.push({ kind: "del", line: a[i], oldIndex: i, newIndex: j });
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
ops.push({ kind: "add", line: b[j], oldIndex: i, newIndex: j });
|
|
90
|
+
j++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (; i < n; i++)
|
|
94
|
+
ops.push({ kind: "del", line: a[i], oldIndex: i, newIndex: j });
|
|
95
|
+
for (; j < m; j++)
|
|
96
|
+
ops.push({ kind: "add", line: b[j], oldIndex: i, newIndex: j });
|
|
97
|
+
return ops;
|
|
98
|
+
}
|
|
99
|
+
/** Group change ops into hunks with `context` lines of surrounding keeps. */
|
|
100
|
+
function buildHunks(ops, context) {
|
|
101
|
+
const changed = ops.map((op) => op.kind !== "keep");
|
|
102
|
+
const include = new Array(ops.length).fill(false);
|
|
103
|
+
for (let k = 0; k < ops.length; k++) {
|
|
104
|
+
if (!changed[k])
|
|
105
|
+
continue;
|
|
106
|
+
for (let c = Math.max(0, k - context); c <= Math.min(ops.length - 1, k + context); c++) {
|
|
107
|
+
include[c] = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const hunks = [];
|
|
111
|
+
let k = 0;
|
|
112
|
+
while (k < ops.length) {
|
|
113
|
+
if (!include[k]) {
|
|
114
|
+
k++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const start = k;
|
|
118
|
+
while (k < ops.length && include[k])
|
|
119
|
+
k++;
|
|
120
|
+
const slice = ops.slice(start, k);
|
|
121
|
+
const oldOps = slice.filter((op) => op.kind !== "add");
|
|
122
|
+
const newOps = slice.filter((op) => op.kind !== "del");
|
|
123
|
+
hunks.push({
|
|
124
|
+
oldStart: (oldOps[0]?.oldIndex ?? slice[0].oldIndex) + 1,
|
|
125
|
+
oldCount: oldOps.length,
|
|
126
|
+
newStart: (newOps[0]?.newIndex ?? slice[0].newIndex) + 1,
|
|
127
|
+
newCount: newOps.length,
|
|
128
|
+
ops: slice,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return hunks;
|
|
132
|
+
}
|