@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,45 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { discover } from "./discovery/index.js";
|
|
3
|
+
import { buildGraphIr } from "./graph-ir.js";
|
|
4
|
+
/**
|
|
5
|
+
* Build the DECLARED graph for a multi-stack project, scoped per stack (#1162).
|
|
6
|
+
*
|
|
7
|
+
* A whole-project discovery disambiguates colliding logical names by module path
|
|
8
|
+
* (two `server`s become `UsEast1Srcserver` / `UsWest1Srcserver`) — names that
|
|
9
|
+
* never appear in any deployed template, because each stack deploys its OWN
|
|
10
|
+
* scoped source with BARE LogicalResourceIds. Observation therefore keys live
|
|
11
|
+
* nodes by `${stack}::${logicalId}` (bare id). To make the declared side join
|
|
12
|
+
* that live side, build each stack's `src` in isolation and qualify its node ids
|
|
13
|
+
* and edge endpoints the same way. Stacks are merged into one graph.
|
|
14
|
+
*
|
|
15
|
+
* A stack without `src` contributes nothing here — it has no declared source to
|
|
16
|
+
* scope to (its live nodes still show as foreign in the overlay).
|
|
17
|
+
*/
|
|
18
|
+
export async function buildDeclaredPerStack(stacks, projectPath) {
|
|
19
|
+
var _a;
|
|
20
|
+
const nodes = [];
|
|
21
|
+
const edges = [];
|
|
22
|
+
// Which nodes belong to which stack (#1433). This is not derived or guessed:
|
|
23
|
+
// the stack is declared in config and every node here is being renamed with
|
|
24
|
+
// its name on the line below. The membership was always known and thrown
|
|
25
|
+
// away, which left `byStack` — the axis consumers draw boundary boxes from —
|
|
26
|
+
// empty for the one project shape that genuinely has side-by-side stacks.
|
|
27
|
+
const byStack = {};
|
|
28
|
+
for (const st of stacks) {
|
|
29
|
+
if (!st.src)
|
|
30
|
+
continue;
|
|
31
|
+
const g = buildGraphIr((await discover(resolve(projectPath, st.src))).entities, projectPath);
|
|
32
|
+
const q = (id) => `${st.name}::${id}`;
|
|
33
|
+
for (const n of g.nodes) {
|
|
34
|
+
const id = q(n.id);
|
|
35
|
+
nodes.push({ ...n, id });
|
|
36
|
+
(byStack[_a = st.name] ?? (byStack[_a] = [])).push(id);
|
|
37
|
+
}
|
|
38
|
+
for (const e of g.edges)
|
|
39
|
+
edges.push({ ...e, from: q(e.from), to: q(e.to) });
|
|
40
|
+
}
|
|
41
|
+
for (const ids of Object.values(byStack))
|
|
42
|
+
ids.sort();
|
|
43
|
+
const groups = Object.keys(byStack).length ? { byStack } : {};
|
|
44
|
+
return { nodes, edges, groups };
|
|
45
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
export const DETAIL = {
|
|
2
|
+
STACKS: 0,
|
|
3
|
+
COMPOSITES: 1,
|
|
4
|
+
DECLARABLES: 2,
|
|
5
|
+
ATTRIBUTES: 3,
|
|
6
|
+
};
|
|
7
|
+
/** Apply a detail tier to the base (declarable-level) IR. */
|
|
8
|
+
export function applyDetail(ir, level) {
|
|
9
|
+
switch (level) {
|
|
10
|
+
case 0:
|
|
11
|
+
return toStacks(ir);
|
|
12
|
+
case 1:
|
|
13
|
+
return toComposites(ir);
|
|
14
|
+
case 3:
|
|
15
|
+
return toAttributes(ir);
|
|
16
|
+
case 2:
|
|
17
|
+
default:
|
|
18
|
+
return toDeclarables(ir);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Overlay paint (`_status`, `_unobserved`, …) is a verdict about the node,
|
|
22
|
+
* not a property of the resource — it survives every tier above STACKS so a
|
|
23
|
+
* zoomed-out drift view keeps its colours. */
|
|
24
|
+
function paintAttrs(attrs) {
|
|
25
|
+
const out = {};
|
|
26
|
+
for (const [k, v] of Object.entries(attrs))
|
|
27
|
+
if (k.startsWith("_"))
|
|
28
|
+
out[k] = v;
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
/** A `{ $ref: "producer.attribute" }` envelope — a reference, not a property tree. */
|
|
32
|
+
function isRefEnvelope(v) {
|
|
33
|
+
return (typeof v === "object" &&
|
|
34
|
+
v !== null &&
|
|
35
|
+
!Array.isArray(v) &&
|
|
36
|
+
typeof v.$ref === "string");
|
|
37
|
+
}
|
|
38
|
+
/** T2's resource view of a node's attrs: overlay paint, scalar fields
|
|
39
|
+
* (identity, status-relevant values), and top-level reference envelopes.
|
|
40
|
+
* Nested property trees — a k8s `spec`/`metadata`, a Tags list — wait for T3. */
|
|
41
|
+
function resourceAttrs(attrs) {
|
|
42
|
+
const out = {};
|
|
43
|
+
for (const [k, v] of Object.entries(attrs)) {
|
|
44
|
+
if (k.startsWith("_") || v === null || typeof v !== "object" || isRefEnvelope(v)) {
|
|
45
|
+
out[k] = v;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
function edgeSortKey(e) {
|
|
51
|
+
return `${e.from}\0${e.to}\0${e.viaAttr ?? ""}`;
|
|
52
|
+
}
|
|
53
|
+
function sortEdges(edges) {
|
|
54
|
+
return edges.sort((a, b) => edgeSortKey(a).localeCompare(edgeSortKey(b)));
|
|
55
|
+
}
|
|
56
|
+
function byLexiconOf(nodes) {
|
|
57
|
+
var _a;
|
|
58
|
+
const out = {};
|
|
59
|
+
for (const n of nodes)
|
|
60
|
+
(out[_a = n.lexicon] ?? (out[_a] = [])).push(n.id);
|
|
61
|
+
const sorted = {};
|
|
62
|
+
for (const k of Object.keys(out).sort())
|
|
63
|
+
sorted[k] = out[k].sort();
|
|
64
|
+
return sorted;
|
|
65
|
+
}
|
|
66
|
+
/** T0 — collapse every resource to its lexicon; edges become cross-lexicon deps. */
|
|
67
|
+
function toStacks(ir) {
|
|
68
|
+
const lexOf = new Map(ir.nodes.map((n) => [n.id, n.lexicon]));
|
|
69
|
+
const lexicons = [...new Set(ir.nodes.map((n) => n.lexicon))].sort();
|
|
70
|
+
const nodes = lexicons.map((l) => ({ id: l, kind: "stack", lexicon: l, attrs: {} }));
|
|
71
|
+
const seen = new Map();
|
|
72
|
+
for (const e of ir.edges) {
|
|
73
|
+
const from = lexOf.get(e.from);
|
|
74
|
+
const to = lexOf.get(e.to);
|
|
75
|
+
if (!from || !to || from === to)
|
|
76
|
+
continue;
|
|
77
|
+
const key = `${from}\0${to}`;
|
|
78
|
+
if (!seen.has(key))
|
|
79
|
+
seen.set(key, { from, to, kind: "ref" });
|
|
80
|
+
}
|
|
81
|
+
return { nodes, edges: sortEdges([...seen.values()]), groups: {} };
|
|
82
|
+
}
|
|
83
|
+
/** T2 — every resource, each carrying the resource view of its attrs (the
|
|
84
|
+
* scalar/reference projection; the full property tree is T3's addition). */
|
|
85
|
+
function toDeclarables(ir) {
|
|
86
|
+
return { ...ir, nodes: ir.nodes.map((n) => ({ ...n, attrs: resourceAttrs(n.attrs) })) };
|
|
87
|
+
}
|
|
88
|
+
/** T1 — collapse each composite instance to one node; internal edges disappear.
|
|
89
|
+
* Topology view: surviving plain nodes keep only overlay paint, not properties. */
|
|
90
|
+
function toComposites(ir) {
|
|
91
|
+
const idMap = new Map();
|
|
92
|
+
for (const n of ir.nodes)
|
|
93
|
+
idMap.set(n.id, n.compositeInstance ?? n.id);
|
|
94
|
+
const instances = new Map();
|
|
95
|
+
const plain = [];
|
|
96
|
+
for (const n of ir.nodes) {
|
|
97
|
+
if (n.compositeInstance) {
|
|
98
|
+
const arr = instances.get(n.compositeInstance) ?? [];
|
|
99
|
+
arr.push(n);
|
|
100
|
+
instances.set(n.compositeInstance, arr);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
plain.push({ ...n, attrs: paintAttrs(n.attrs) });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const nodes = [...plain];
|
|
107
|
+
for (const [inst, members] of instances) {
|
|
108
|
+
const types = new Set(members.map((m) => m.compositeParent).filter(Boolean));
|
|
109
|
+
const lexicons = new Set(members.map((m) => m.lexicon));
|
|
110
|
+
nodes.push({
|
|
111
|
+
id: inst,
|
|
112
|
+
kind: types.size === 1 ? [...types][0] : "Composite",
|
|
113
|
+
lexicon: lexicons.size === 1 ? [...lexicons][0] : "multi",
|
|
114
|
+
attrs: { members: members.length },
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const seen = new Map();
|
|
118
|
+
for (const e of ir.edges) {
|
|
119
|
+
const from = idMap.get(e.from) ?? e.from;
|
|
120
|
+
const to = idMap.get(e.to) ?? e.to;
|
|
121
|
+
if (from === to)
|
|
122
|
+
continue; // edge internal to a composite
|
|
123
|
+
// A property label only makes sense when neither endpoint was collapsed.
|
|
124
|
+
const collapsed = from !== e.from || to !== e.to;
|
|
125
|
+
const edge = collapsed
|
|
126
|
+
? { from, to, kind: "ref" }
|
|
127
|
+
: { from, to, kind: "ref", viaAttr: e.viaAttr };
|
|
128
|
+
const key = `${from}\0${to}\0${edge.viaAttr ?? ""}`;
|
|
129
|
+
if (!seen.has(key))
|
|
130
|
+
seen.set(key, edge);
|
|
131
|
+
}
|
|
132
|
+
nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
133
|
+
// Carry the cross-stack import list forward: parameter/import nodes aren't
|
|
134
|
+
// composites, so they survive the collapse as plain nodes — a viewer that
|
|
135
|
+
// hides imports (or matches them across stacks) needs `imports` at every tier,
|
|
136
|
+
// not just the base + ATTRIBUTES. Filter to handles whose node survived.
|
|
137
|
+
const surviving = new Set(nodes.map((n) => n.id));
|
|
138
|
+
const imports = ir.imports?.filter((i) => surviving.has(i.node));
|
|
139
|
+
return {
|
|
140
|
+
nodes,
|
|
141
|
+
edges: sortEdges([...seen.values()]),
|
|
142
|
+
groups: { byLexicon: byLexiconOf(nodes) },
|
|
143
|
+
...(imports && imports.length ? { imports } : {}),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** T3 — annotate each edge with the producer attribute it references. */
|
|
147
|
+
function toAttributes(ir) {
|
|
148
|
+
const nodeById = new Map(ir.nodes.map((n) => [n.id, n]));
|
|
149
|
+
const edges = ir.edges.map((e) => {
|
|
150
|
+
const node = nodeById.get(e.from);
|
|
151
|
+
const toAttr = node ? findRefAttr(node.attrs, e.to) : undefined;
|
|
152
|
+
return toAttr ? { ...e, toAttr } : { ...e };
|
|
153
|
+
});
|
|
154
|
+
return { ...ir, edges };
|
|
155
|
+
}
|
|
156
|
+
/** Find the attribute in a `{ $ref: "producer.attribute" }` envelope under attrs. */
|
|
157
|
+
function findRefAttr(attrs, producer) {
|
|
158
|
+
let found;
|
|
159
|
+
const visit = (v) => {
|
|
160
|
+
if (found !== undefined || v === null || typeof v !== "object")
|
|
161
|
+
return;
|
|
162
|
+
if (Array.isArray(v)) {
|
|
163
|
+
for (const item of v)
|
|
164
|
+
visit(item);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const ref = v.$ref;
|
|
168
|
+
if (typeof ref === "string") {
|
|
169
|
+
const dot = ref.indexOf(".");
|
|
170
|
+
if (dot > 0 && ref.slice(0, dot) === producer) {
|
|
171
|
+
found = ref.slice(dot + 1);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
for (const val of Object.values(v))
|
|
176
|
+
visit(val);
|
|
177
|
+
};
|
|
178
|
+
visit(attrs);
|
|
179
|
+
return found;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* chant #1489 — the message to print when `--detail 3` changed nothing.
|
|
183
|
+
*
|
|
184
|
+
* T3 adds two things over T2: the full property tree on each node and the
|
|
185
|
+
* producer attribute on `$ref`-derived edges. A graph whose nodes carry no
|
|
186
|
+
* properties beyond the resource view AND whose edges reference nothing (they
|
|
187
|
+
* link by name or label convention) gains neither, so levels 2 and 3 come out
|
|
188
|
+
* byte-identical — which reads as a broken dial from any consumer stepping
|
|
189
|
+
* through the levels (behold#131 was filed over exactly this). Accepting a
|
|
190
|
+
* value that changes nothing without saying so is the bug; this names it.
|
|
191
|
+
*
|
|
192
|
+
* Returns the warning text, or undefined when detail 3 did add something.
|
|
193
|
+
* `base` is the pre-detail IR the caller already holds (the same one it fed
|
|
194
|
+
* `applyDetail`); the T2 view to compare against is derived here, so callers
|
|
195
|
+
* don't run the projection twice for a message. Pure — no I/O.
|
|
196
|
+
*/
|
|
197
|
+
export function detailInertNotice(base, detailed) {
|
|
198
|
+
if (JSON.stringify(detailed) !== JSON.stringify(toDeclarables(base)))
|
|
199
|
+
return undefined;
|
|
200
|
+
const edges = base.edges.length;
|
|
201
|
+
const why = edges === 0
|
|
202
|
+
? "this graph has no edges at all"
|
|
203
|
+
: `none of this graph's ${edges} edge(s) reference a producer attribute — they link by name or label convention`;
|
|
204
|
+
return (`--detail 3 adds each node's full property tree and the producer attribute on reference edges, ` +
|
|
205
|
+
`but every node's properties already fit the resource view and ${why}, ` +
|
|
206
|
+
`so the output is identical to --detail 2.`);
|
|
207
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render the graph IR as Graphviz DOT. Pure text — no `dot` needed to produce
|
|
3
|
+
* it. Two consumers: render directly with `dot -Tsvg` (mingrammer-style), or
|
|
4
|
+
* feed it to a layout engine for node positions that a custom painter draws
|
|
5
|
+
* (the rackattack pattern; see {@link toLayout}). See issue #497 / epic #492.
|
|
6
|
+
*
|
|
7
|
+
* Consumes whatever IR it is given, so `--detail` (and future `--lens`) flow
|
|
8
|
+
* through for free.
|
|
9
|
+
*/
|
|
10
|
+
export function toDot(ir) {
|
|
11
|
+
const lines = ["digraph chant {", " rankdir=TB;", ' node [shape=box];'];
|
|
12
|
+
// Cluster by wave (component graph) when present, else by lexicon (entity graph).
|
|
13
|
+
const clusters = ir.groups.byWave ?? ir.groups.byLexicon;
|
|
14
|
+
const grouped = new Set();
|
|
15
|
+
if (clusters) {
|
|
16
|
+
for (const [name, members] of Object.entries(clusters)) {
|
|
17
|
+
lines.push(` subgraph ${q(`cluster_${name}`)} {`);
|
|
18
|
+
lines.push(` label=${q(name)};`);
|
|
19
|
+
for (const id of members) {
|
|
20
|
+
const node = ir.nodes.find((n) => n.id === id);
|
|
21
|
+
if (!node)
|
|
22
|
+
continue;
|
|
23
|
+
grouped.add(id);
|
|
24
|
+
lines.push(` ${nodeLine(node)}`);
|
|
25
|
+
}
|
|
26
|
+
lines.push(" }");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const node of ir.nodes) {
|
|
30
|
+
if (grouped.has(node.id))
|
|
31
|
+
continue;
|
|
32
|
+
lines.push(` ${nodeLine(node)}`);
|
|
33
|
+
}
|
|
34
|
+
for (const e of ir.edges)
|
|
35
|
+
lines.push(` ${edgeLine(e)}`);
|
|
36
|
+
lines.push("}");
|
|
37
|
+
return lines.join("\n") + "\n";
|
|
38
|
+
}
|
|
39
|
+
function nodeLine(node) {
|
|
40
|
+
const label = node.kind && node.kind !== node.id ? `${node.id}\n${node.kind}` : node.id;
|
|
41
|
+
return `${q(node.id)} [label=${q(label)}];`;
|
|
42
|
+
}
|
|
43
|
+
function edgeLine(e) {
|
|
44
|
+
const from = q(e.from);
|
|
45
|
+
const to = q(e.to);
|
|
46
|
+
const label = [e.viaAttr, e.toAttr].filter(Boolean).join(" → ");
|
|
47
|
+
return label ? `${from} -> ${to} [label=${q(label)}];` : `${from} -> ${to};`;
|
|
48
|
+
}
|
|
49
|
+
/** Quote a DOT identifier/label. Graphviz accepts any string in double quotes;
|
|
50
|
+
* a real newline becomes the DOT line-break escape. */
|
|
51
|
+
function q(s) {
|
|
52
|
+
const esc = s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
|
|
53
|
+
return `"${esc}"`;
|
|
54
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fold DERIVED reachability facts onto EC2 instance nodes so a single-node query
|
|
3
|
+
* can answer questions that are otherwise a multi-hop join with a union (#1139).
|
|
4
|
+
*
|
|
5
|
+
* Two facts, both things a live AWS-CLI sweep gets wrong because it can't cheaply
|
|
6
|
+
* resolve the topology:
|
|
7
|
+
*
|
|
8
|
+
* - `effectiveIngress` — the union of security-group ingress rules reachable
|
|
9
|
+
* from the instance, BOTH directly (`SecurityGroupIds`) AND through its launch
|
|
10
|
+
* template (`LaunchTemplate → LaunchTemplateData → SecurityGroupIds`). The
|
|
11
|
+
* launch-template hop is exactly what a CLI agent misses (it under-counts
|
|
12
|
+
* SSH-reachable instances). Each rule is normalized to `proto:port:cidr`
|
|
13
|
+
* (e.g. `tcp:22:0.0.0.0/0`) so it is precisely queryable.
|
|
14
|
+
* - `internetFacing` — whether the instance's subnet routes to an Internet
|
|
15
|
+
* Gateway (`subnet ← SubnetRouteTableAssociation → RouteTable ← Route →
|
|
16
|
+
* InternetGateway`). "Public subnet" means an IGW route, not
|
|
17
|
+
* `MapPublicIpOnLaunch`.
|
|
18
|
+
*
|
|
19
|
+
* With these, "instances SSH-reachable from the internet" is one predicate:
|
|
20
|
+
* `kind:EC2::Instance attr:internetFacing=true attr:effectiveIngress=tcp:22:0.0.0.0/0`
|
|
21
|
+
* — no hand-joined CLI sweep, no over/under-counting.
|
|
22
|
+
*/
|
|
23
|
+
export function enrichEffectiveTopology(ir) {
|
|
24
|
+
const byId = new Map(ir.nodes.map((n) => [n.id, n]));
|
|
25
|
+
const edges = ir.edges ?? [];
|
|
26
|
+
const kind = (n) => n?.kind ?? "";
|
|
27
|
+
const isKind = (n, suffix) => !!n && (kind(n) === suffix || kind(n).endsWith("::" + suffix));
|
|
28
|
+
const via = (...names) => (v) => names.includes(v);
|
|
29
|
+
/** Out-neighbours of `id` (edges from → to), optionally filtered by viaAttr. */
|
|
30
|
+
const out = (id, pred) => edges
|
|
31
|
+
.filter((e) => e.from === id && (!pred || pred(e.viaAttr ?? e.kind ?? "")))
|
|
32
|
+
.map((e) => byId.get(e.to))
|
|
33
|
+
.filter((x) => !!x);
|
|
34
|
+
/** In-neighbours of `id` (edges to ← from), optionally filtered by viaAttr. */
|
|
35
|
+
const incoming = (id, pred) => edges
|
|
36
|
+
.filter((e) => e.to === id && (!pred || pred(e.viaAttr ?? e.kind ?? "")))
|
|
37
|
+
.map((e) => byId.get(e.from))
|
|
38
|
+
.filter((x) => !!x);
|
|
39
|
+
const normalizeIngress = (sg) => {
|
|
40
|
+
const rules = sg.attrs?.["SecurityGroupIngress"];
|
|
41
|
+
if (!Array.isArray(rules))
|
|
42
|
+
return [];
|
|
43
|
+
return rules.map((r) => {
|
|
44
|
+
const rule = r;
|
|
45
|
+
const proto = String(rule.IpProtocol ?? "-1");
|
|
46
|
+
const from = rule.FromPort;
|
|
47
|
+
const to = rule.ToPort;
|
|
48
|
+
const port = from == null ? "all" : from === to ? `${from}` : `${from}-${to}`;
|
|
49
|
+
const cidr = rule.CidrIp ??
|
|
50
|
+
rule.CidrIpv6 ??
|
|
51
|
+
(rule.SourceSecurityGroupId ? `sg:${String(rule.SourceSecurityGroupId)}` : "?");
|
|
52
|
+
return `${proto}:${port}:${cidr}`;
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
/** Security groups reachable from an instance — direct and via launch template. */
|
|
56
|
+
const effectiveSgs = (inst) => {
|
|
57
|
+
const direct = out(inst.id, via("SecurityGroupIds", "SecurityGroupId"));
|
|
58
|
+
const templates = out(inst.id, via("LaunchTemplate", "LaunchTemplateId"));
|
|
59
|
+
const viaTemplate = templates
|
|
60
|
+
.flatMap((lt) => out(lt.id, via("LaunchTemplateData", "SecurityGroupIds", "SecurityGroupId")))
|
|
61
|
+
.filter((n) => isKind(n, "SecurityGroup"));
|
|
62
|
+
const all = [...direct.filter((n) => isKind(n, "SecurityGroup")), ...viaTemplate];
|
|
63
|
+
return [...new Map(all.map((s) => [s.id, s])).values()];
|
|
64
|
+
};
|
|
65
|
+
/** The IGW an instance's subnet routes to (evidence), or undefined. */
|
|
66
|
+
const internetFacingVia = (inst) => {
|
|
67
|
+
for (const subnet of out(inst.id, via("SubnetId")).filter((n) => isKind(n, "Subnet"))) {
|
|
68
|
+
const assocs = incoming(subnet.id, via("SubnetId")).filter((a) => isKind(a, "SubnetRouteTableAssociation"));
|
|
69
|
+
const routeTables = assocs.flatMap((a) => out(a.id, via("RouteTableId")).filter((n) => isKind(n, "RouteTable")));
|
|
70
|
+
for (const rt of routeTables) {
|
|
71
|
+
const routes = incoming(rt.id, via("RouteTableId")).filter((n) => isKind(n, "Route"));
|
|
72
|
+
for (const route of routes) {
|
|
73
|
+
const dest = route.attrs?.["DestinationCidrBlock"];
|
|
74
|
+
const igw = out(route.id, via("GatewayId")).find((g) => isKind(g, "InternetGateway"));
|
|
75
|
+
if (igw && (dest == null || dest === "0.0.0.0/0")) {
|
|
76
|
+
const id = igw.id.includes("::") ? igw.id.slice(igw.id.lastIndexOf("::") + 2) : igw.id;
|
|
77
|
+
return `${rt.id.includes("::") ? rt.id.slice(rt.id.lastIndexOf("::") + 2) : rt.id} → ${id}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
};
|
|
84
|
+
const nodes = ir.nodes.map((n) => {
|
|
85
|
+
if (!isKind(n, "Instance"))
|
|
86
|
+
return n;
|
|
87
|
+
const effectiveIngress = effectiveSgs(n).flatMap(normalizeIngress);
|
|
88
|
+
// A live enrichment may already have set internetFacing (+ its evidence) for
|
|
89
|
+
// a subnet chant doesn't model declaratively (e.g. the account's default
|
|
90
|
+
// VPC). Keep that truth; otherwise derive it from the declared route topology.
|
|
91
|
+
const attrs = (n.attrs ?? {});
|
|
92
|
+
const liveFacing = attrs["internetFacing"] === true;
|
|
93
|
+
const declaredVia = internetFacingVia(n);
|
|
94
|
+
const via = attrs["internetFacingVia"] ?? declaredVia;
|
|
95
|
+
return {
|
|
96
|
+
...n,
|
|
97
|
+
attrs: { ...attrs, effectiveIngress, internetFacing: liveFacing || !!declaredVia, ...(via ? { internetFacingVia: via } : {}) },
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
// Record what this pass computed, so a caller can report the graph's derived surface
|
|
101
|
+
// without hardcoding attribute names. Only kinds actually enriched are listed.
|
|
102
|
+
const enriched = nodes.some((n) => isKind(n, "Instance"));
|
|
103
|
+
const derivedAttrs = enriched
|
|
104
|
+
? { ...(ir.derivedAttrs ?? {}), Instance: ["internetFacing", "effectiveIngress"] }
|
|
105
|
+
: ir.derivedAttrs;
|
|
106
|
+
return { ...ir, nodes, ...(derivedAttrs ? { derivedAttrs } : {}) };
|
|
107
|
+
}
|