@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
package/dist/op/gate.js
ADDED
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate-as-fact (#2119, epic #2114) — the one place that decides what happens
|
|
3
|
+
* when a run reaches a `gate`, shared by the Op executor
|
|
4
|
+
* (`./local-executor.ts`) and the component driver
|
|
5
|
+
* (`../components/driver.ts`) so the two can never drift.
|
|
6
|
+
*
|
|
7
|
+
* A gate used to be a wait, which meant a runtime that cannot wait had to
|
|
8
|
+
* refuse the whole op before its first step (`LocalGateUnsupportedError`,
|
|
9
|
+
* deleted with this). It is a fact now: the run reads the gate ledger
|
|
10
|
+
* (`../lifecycle/gate-ledger.ts`) for a resolution someone wrote with `chant
|
|
11
|
+
* approve`, and either walks through carrying the approver, or records a
|
|
12
|
+
* pending fact and ends. Nothing blocks, nothing is queued, nothing has to be
|
|
13
|
+
* resumed — the next run re-evaluates from the ledger, which is exactly the
|
|
14
|
+
* level-triggered shape a converge tick already has.
|
|
15
|
+
*
|
|
16
|
+
* The staleness rule is the same one `chant operator status` has applied since
|
|
17
|
+
* #1485: a resolution counts only if it is newer than the newest pending fact
|
|
18
|
+
* for that gate. Approving before the gate was ever reached does not
|
|
19
|
+
* pre-authorize a future run's gate that has since been recorded pending; a
|
|
20
|
+
* resolution from last month does not answer the fact this run just wrote.
|
|
21
|
+
*
|
|
22
|
+
* Since #2300 a gate can also bind a plan. `GateCheckInput.planDigest` is
|
|
23
|
+
* what this run's Plan phase produced (`../lifecycle/plan-digest.ts`), and a
|
|
24
|
+
* resolution counts only when it was recorded for that same plan — recency
|
|
25
|
+
* demoted from the criterion to the tiebreak. Approve, edit the root, re-run,
|
|
26
|
+
* and the gate refuses by name instead of applying something no approver saw,
|
|
27
|
+
* which is what INTENTIUS/choudoufu#1026 measured it doing. A gate with no
|
|
28
|
+
* `planDigest` decides exactly as it did before.
|
|
29
|
+
*
|
|
30
|
+
* Ledger access goes through {@link GateLedgerPort} rather than straight to
|
|
31
|
+
* git, so a test (and the operator's own in-memory paths) can drive the
|
|
32
|
+
* decision without an orphan branch on disk.
|
|
33
|
+
*/
|
|
34
|
+
import { appendGateResolution, appendPendingGate, isPendingGateExpired, latestPendingGate, latestResolutionForPlan, readGateLedger, resolveApprovalUrl, DEFAULT_GATE_EXPIRY, } from "../lifecycle/gate-ledger.js";
|
|
35
|
+
import { describePlanDigest, samePlanDigest } from "../lifecycle/plan-digest.js";
|
|
36
|
+
import { isModelAuthored } from "../lifecycle/gate-origin.js";
|
|
37
|
+
import { appliedGatePath, isApprovalSpent, parseAppliedGateLines } from "../lifecycle/gate-applied.js";
|
|
38
|
+
import { sortedJsonReplacer } from "../utils.js";
|
|
39
|
+
import { gateContextDigest } from "./gate-approval.js";
|
|
40
|
+
import { pushLifecycleReport, readBlobBySha, readBlobFromPath, readPathSha, requireLifecycleLedger, writeBlobToPath, RefCASConflictError } from "../lifecycle/git.js";
|
|
41
|
+
import { parseDuration } from "./duration.js";
|
|
42
|
+
import { resolveGateRunLocator } from "./gate-run-locator.js";
|
|
43
|
+
/**
|
|
44
|
+
* The real port: the `chant/lifecycle` orphan branch.
|
|
45
|
+
*
|
|
46
|
+
* Appending is always local-first and always lands (#2309's fetch-before-
|
|
47
|
+
* append). The push that follows is reported rather than swallowed (#2310):
|
|
48
|
+
* a pending fact that never reaches the remote is still a correct local
|
|
49
|
+
* answer — the run is right to gate, and does — but an operator elsewhere
|
|
50
|
+
* cannot approve a gate whose pending record they cannot see, so the caller
|
|
51
|
+
* gets `pushed: false` and a reason instead of silence. Mirrors the shape
|
|
52
|
+
* `chant approve` reports through (`../cli/handlers/operator.ts`'s
|
|
53
|
+
* `reportedPush`, #2309 review).
|
|
54
|
+
*/
|
|
55
|
+
export function gitGateLedgerPort(opts) {
|
|
56
|
+
return {
|
|
57
|
+
async read(op) {
|
|
58
|
+
// The ledger branch has to be in the checkout before it is read
|
|
59
|
+
// (#2303): a CI clone fetches the pipeline's own ref and nothing else,
|
|
60
|
+
// and an unfetched branch reads as an empty ledger — which is
|
|
61
|
+
// indistinguishable from "nothing has been approved" and makes a
|
|
62
|
+
// retried job record a second pending fact for a gate that was already
|
|
63
|
+
// approved. Refuses rather than guessing when the fetch cannot settle
|
|
64
|
+
// it; see `requireLifecycleLedger`.
|
|
65
|
+
await requireLifecycleLedger(opts);
|
|
66
|
+
const { resolutions, pending } = await readGateLedger(op, opts);
|
|
67
|
+
return { resolutions, pending };
|
|
68
|
+
},
|
|
69
|
+
async approvalRule(gate, at) {
|
|
70
|
+
// Loaded on demand: the rule lives in the workspace modules, which import the Op modules.
|
|
71
|
+
const { gateAdmission } = await import("../workspace/identity.js");
|
|
72
|
+
return gateAdmission(opts?.cwd ?? process.cwd(), gate, at?.base);
|
|
73
|
+
},
|
|
74
|
+
async appendResolution(input) {
|
|
75
|
+
const { record } = await appendGateResolution(input, opts);
|
|
76
|
+
return { record, ...(await pushLifecycleReport(opts)) };
|
|
77
|
+
},
|
|
78
|
+
async appendPending(input) {
|
|
79
|
+
const { record } = await appendPendingGate(input, opts);
|
|
80
|
+
return { record, ...(await pushLifecycleReport(opts)) };
|
|
81
|
+
},
|
|
82
|
+
async readApplied(op) {
|
|
83
|
+
await requireLifecycleLedger(opts);
|
|
84
|
+
const { dir, file } = appliedGatePath(op);
|
|
85
|
+
const text = await readBlobFromPath(dir, file, opts);
|
|
86
|
+
return text ? parseAppliedGateLines(text) : [];
|
|
87
|
+
},
|
|
88
|
+
async appendApplied(record) {
|
|
89
|
+
const { dir, file } = appliedGatePath(record.op);
|
|
90
|
+
const line = JSON.stringify(record, sortedJsonReplacer);
|
|
91
|
+
let lastErr;
|
|
92
|
+
// The same append-and-retry as a ledger line: another writer to the branch is the ordinary case.
|
|
93
|
+
for (let attempt = 1; attempt <= 5; attempt++) {
|
|
94
|
+
try {
|
|
95
|
+
const prior = await readPathSha(dir, file, opts);
|
|
96
|
+
const existing = prior ? await readBlobBySha(prior, opts) : null;
|
|
97
|
+
await writeBlobToPath(dir, file, existing ? `${existing.replace(/\n$/, "")}\n${line}\n` : `${line}\n`, `Applied under ${record.gate}`, {
|
|
98
|
+
...opts,
|
|
99
|
+
expectPriorPathSha: prior,
|
|
100
|
+
});
|
|
101
|
+
return pushLifecycleReport(opts);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (!(err instanceof RefCASConflictError))
|
|
105
|
+
throw err;
|
|
106
|
+
lastErr = err;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
throw lastErr;
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** A gate ledger held in memory — what a test, or a caller that has already read the ledger, hands {@link evaluateGate}. */
|
|
114
|
+
export function memoryGateLedgerPort(seed = {}) {
|
|
115
|
+
const resolutions = [...(seed.resolutions ?? [])];
|
|
116
|
+
const pending = [...(seed.pending ?? [])];
|
|
117
|
+
const appended = [];
|
|
118
|
+
const resolved = [];
|
|
119
|
+
const applied = [...(seed.applied ?? [])];
|
|
120
|
+
return {
|
|
121
|
+
appended,
|
|
122
|
+
resolved,
|
|
123
|
+
applied,
|
|
124
|
+
async readApplied(op) {
|
|
125
|
+
return applied.filter((a) => a.op === op);
|
|
126
|
+
},
|
|
127
|
+
async appendApplied(record) {
|
|
128
|
+
applied.push(record);
|
|
129
|
+
return { pushed: true };
|
|
130
|
+
},
|
|
131
|
+
async read() {
|
|
132
|
+
return { resolutions: [...resolutions], pending: [...pending] };
|
|
133
|
+
},
|
|
134
|
+
async appendResolution(input) {
|
|
135
|
+
const record = { version: 1, ...input };
|
|
136
|
+
resolutions.push(record);
|
|
137
|
+
resolved.push(record);
|
|
138
|
+
return { record, pushed: true };
|
|
139
|
+
},
|
|
140
|
+
async appendPending(input) {
|
|
141
|
+
const record = { version: 1, kind: "pending", ...input };
|
|
142
|
+
pending.push(record);
|
|
143
|
+
appended.push(record);
|
|
144
|
+
// No remote in an in-memory ledger — there is nothing to fail to reach.
|
|
145
|
+
return { record, pushed: true };
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The refusal line for a {@link GateDigestMismatch}: which plan was approved,
|
|
151
|
+
* which was planned, and what closes the gap. One function so the executor's
|
|
152
|
+
* step record, the human render and the CI summary say the same thing.
|
|
153
|
+
*
|
|
154
|
+
* The two cases get different prose because they are different facts. A
|
|
155
|
+
* resolution for another plan means something changed between the approval
|
|
156
|
+
* and this run. A resolution with no plan on it means nothing is known to
|
|
157
|
+
* have changed — the record simply never said what it approved, which is
|
|
158
|
+
* every record written before #2300.
|
|
159
|
+
*/
|
|
160
|
+
export function describeGateMismatch(op, gate, mismatch, sealed = false) {
|
|
161
|
+
const why = mismatch.approved === undefined
|
|
162
|
+
? mismatch.environment !== undefined
|
|
163
|
+
? "That approval predates environment- and plan-bound component gates (#2574) and records neither, " +
|
|
164
|
+
"so it cannot answer for this one. Approving again binds it:"
|
|
165
|
+
: "That resolution predates plan-bound gates (#2300) and records no plan at all, so it cannot " +
|
|
166
|
+
"answer for this one. Approving again binds it:"
|
|
167
|
+
: "The configuration or the live system changed between that approval and this plan, so it needs " +
|
|
168
|
+
"a fresh one:";
|
|
169
|
+
return (`Gate "${gate}" is approved, but not for this plan. ` +
|
|
170
|
+
`approved: ${describePlanDigest(mismatch.approved)} (by ${mismatch.resolvedBy} at ${mismatch.timestamp}); ` +
|
|
171
|
+
`planned: ${mismatch.planned}. ` +
|
|
172
|
+
`${why} ${approveCommand(op, gate, mismatch.environment, undefined, sealed)}`);
|
|
173
|
+
}
|
|
174
|
+
/** How a recorded approval reads: its own `approver`, or for a record written before #2508, a human unless a model-authored channel wrote it. */
|
|
175
|
+
export function approverOf(record) {
|
|
176
|
+
if (record.approver)
|
|
177
|
+
return record.approver;
|
|
178
|
+
return { kind: isModelAuthored(record.origin) ? "agent" : "human" };
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Tally the approvals that answer a gate with an `approval` block (#2508).
|
|
182
|
+
*
|
|
183
|
+
* An approval counts only if it is newer than `sinceIso` (the standing pending
|
|
184
|
+
* fact) and, on a plan-bound gate, recorded for `planDigest`. So a changed
|
|
185
|
+
* plan invalidates every approval collected for the old one, the rule #2300
|
|
186
|
+
* set for a single approval. A human's approval may be older than the
|
|
187
|
+
* standing fact, back to `humansSinceIso` ({@link humanQuorumSince}), so a
|
|
188
|
+
* pending fact re-recorded for a changed mode or context keeps a partly
|
|
189
|
+
* filled quorum (#3206). It defaults to `sinceIso`.
|
|
190
|
+
*
|
|
191
|
+
* Of those, only a human's counts toward the quorum, once per `resolvedBy`,
|
|
192
|
+
* and only with one of the quorum's roles when it names any. An agent counts
|
|
193
|
+
* only through a recorded `allow` in `enforce` mode, evaluated under the
|
|
194
|
+
* policy version the gate declares now, recorded while the gate was in
|
|
195
|
+
* `enforce` (#2512), and evaluated under the context the gate resolves now
|
|
196
|
+
* (#3774). A `log-only` decision never changes the outcome, even
|
|
197
|
+
* after the gate switches to `enforce`, and a `deny` never removes a human's approval: a policy can add
|
|
198
|
+
* a way through the gate but cannot take one away.
|
|
199
|
+
*/
|
|
200
|
+
export function tallyGateApprovals(records, gate, sinceIso, planDigest, approval, humansSinceIso = sinceIso) {
|
|
201
|
+
const since = new Date(sinceIso).getTime();
|
|
202
|
+
const humansSince = Math.min(since, new Date(humansSinceIso).getTime());
|
|
203
|
+
const at = (r) => new Date(r.timestamp).getTime();
|
|
204
|
+
const roles = approval.quorum?.roles;
|
|
205
|
+
const context = gateContextDigest(approval.context);
|
|
206
|
+
const byActor = new Map();
|
|
207
|
+
let permit;
|
|
208
|
+
let mismatched;
|
|
209
|
+
for (const r of records) {
|
|
210
|
+
if (r.gate !== gate || at(r) < humansSince)
|
|
211
|
+
continue;
|
|
212
|
+
if (planDigest !== undefined && !samePlanDigest(r.planDigest, planDigest)) {
|
|
213
|
+
if (at(r) >= since && (!mismatched || at(r) >= at(mismatched)))
|
|
214
|
+
mismatched = r;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const decision = r.policyDecision;
|
|
218
|
+
// #3206: an approval from before the standing fact can only be a human's
|
|
219
|
+
// toward the quorum. A permit is anchored on the standing fact, the one
|
|
220
|
+
// `chant approve` evaluated it under.
|
|
221
|
+
const sinceStanding = at(r) >= since;
|
|
222
|
+
// #2512: the decision must also have been recorded under `enforce`. An
|
|
223
|
+
// allow recorded while the gate was log-only was never binding, and a
|
|
224
|
+
// later switch to enforce does not make it binding. #3774: and under
|
|
225
|
+
// the context this run resolved, since the run checks approvals before it
|
|
226
|
+
// re-records the pending fact for a changed context.
|
|
227
|
+
if (sinceStanding && approval.mode === "enforce" && approval.policy && decision?.decision === "allow" &&
|
|
228
|
+
decision.mode === "enforce" && decision.version === approval.policy.version &&
|
|
229
|
+
decision.contextDigest === context && (!permit || at(r) >= at(permit))) {
|
|
230
|
+
permit = r;
|
|
231
|
+
}
|
|
232
|
+
const approver = approverOf(r);
|
|
233
|
+
if (approver.kind !== "human")
|
|
234
|
+
continue;
|
|
235
|
+
if (roles && !(approver.roles ?? []).some((role) => roles.includes(role)))
|
|
236
|
+
continue;
|
|
237
|
+
const prior = byActor.get(r.resolvedBy);
|
|
238
|
+
if (!prior || at(r) >= at(prior))
|
|
239
|
+
byActor.set(r.resolvedBy, r);
|
|
240
|
+
}
|
|
241
|
+
const counted = [...byActor.values()].sort((a, b) => at(a) - at(b));
|
|
242
|
+
return {
|
|
243
|
+
counted,
|
|
244
|
+
need: approval.quorum?.count ?? 1,
|
|
245
|
+
...(permit ? { permit } : {}),
|
|
246
|
+
...(mismatched ? { mismatched } : {}),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Where a gate's human quorum starts counting (#3206): the oldest pending fact
|
|
251
|
+
* in the unbroken run of facts, newest first from `standing`, recorded for
|
|
252
|
+
* `standing`'s plan and policy version.
|
|
253
|
+
*
|
|
254
|
+
* A pending fact is re-recorded when anything in the approval block changes,
|
|
255
|
+
* the mode and the context included, so `chant approve` evaluates the policy
|
|
256
|
+
* under what the gate now declares. A human's approval counts for the plan
|
|
257
|
+
* it names whatever the mode or context was, so re-recording for one of
|
|
258
|
+
* those must not drop it. The run stops at a fact for another plan or policy
|
|
259
|
+
* version, which needs fresh approvals, and at one that had expired by the
|
|
260
|
+
* time the next was recorded, which expiry already closed.
|
|
261
|
+
*
|
|
262
|
+
* `pending` may hold every pending fact in the ledger; only `standing`'s gate
|
|
263
|
+
* and environment are read.
|
|
264
|
+
*/
|
|
265
|
+
export function humanQuorumSince(pending, standing) {
|
|
266
|
+
const at = (p) => new Date(p.timestamp).getTime();
|
|
267
|
+
const version = (p) => p.approval?.policy?.version;
|
|
268
|
+
const sameKey = (p) => samePlanDigest(p.planDigest, standing.planDigest) && version(p) === version(standing);
|
|
269
|
+
const older = pending
|
|
270
|
+
.filter((p) => p !== standing && p.gate === standing.gate && p.environment === standing.environment && at(p) <= at(standing))
|
|
271
|
+
.sort((a, b) => at(b) - at(a));
|
|
272
|
+
let anchor = standing;
|
|
273
|
+
for (const p of older) {
|
|
274
|
+
if (!sameKey(p) || isPendingGateExpired(p, anchor.timestamp))
|
|
275
|
+
break;
|
|
276
|
+
anchor = p;
|
|
277
|
+
}
|
|
278
|
+
return anchor.timestamp;
|
|
279
|
+
}
|
|
280
|
+
/** Whether two resolved approval blocks are the same, so a standing pending fact still describes this gate. */
|
|
281
|
+
function sameApproval(a, b) {
|
|
282
|
+
return JSON.stringify(a ?? null, sortedJsonReplacer) === JSON.stringify(b ?? null, sortedJsonReplacer);
|
|
283
|
+
}
|
|
284
|
+
/** The beginning of time — the anchor for a gate that has never been recorded pending, so any resolution for it counts. */
|
|
285
|
+
const EPOCH = new Date(0).toISOString();
|
|
286
|
+
/**
|
|
287
|
+
* Decide a gate against the ledger, recording the pending fact when it isn't
|
|
288
|
+
* answered.
|
|
289
|
+
*
|
|
290
|
+
* - A resolution recorded for this run's own plan, newer than the newest
|
|
291
|
+
* pending fact, satisfies the gate. On a gate that binds no plan
|
|
292
|
+
* (`input.planDigest` absent) the plan half of that drops out and the rule
|
|
293
|
+
* is the pre-#2300 one: any resolution newer than the pending fact.
|
|
294
|
+
* - A resolution that stands for the gate but for a different plan does not
|
|
295
|
+
* satisfy it (#2300). The run is gated, `mismatch` names both plans, and a
|
|
296
|
+
* fresh pending fact is recorded for the plan that actually ran — so
|
|
297
|
+
* `chant approve` has something current to approve and the loop closes in
|
|
298
|
+
* one more command rather than needing the digest typed out.
|
|
299
|
+
* - Otherwise, a pending fact that hasn't expired *and was recorded for this
|
|
300
|
+
* same plan* stands as it is: the run ends `gated` and the ledger is left
|
|
301
|
+
* alone, so an operator ticking every minute against an unapproved gate
|
|
302
|
+
* does not append a line a minute. A pending fact for a different plan is
|
|
303
|
+
* stale in the way that matters and is replaced.
|
|
304
|
+
* - Otherwise (no pending fact, or the newest one has expired, or it is for
|
|
305
|
+
* another plan) a fresh pending fact is appended and the run ends `gated`.
|
|
306
|
+
* `recorded` says which of the two happened, so a renderer can tell "just
|
|
307
|
+
* recorded" from "still standing".
|
|
308
|
+
*/
|
|
309
|
+
export async function evaluateGate(port, input) {
|
|
310
|
+
const now = input.now ?? new Date().toISOString();
|
|
311
|
+
const ledger = await port.read(input.op);
|
|
312
|
+
// #2574: a component's ledger holds every environment's facts. This run
|
|
313
|
+
// answers only to its own environment's pending facts and approvals. An
|
|
314
|
+
// approval that records no environment at all is kept, so it comes back as
|
|
315
|
+
// a mismatch with a message instead of silently not counting.
|
|
316
|
+
const env = input.environment;
|
|
317
|
+
const pending = env === undefined ? ledger.pending : ledger.pending.filter((p) => p.environment === env);
|
|
318
|
+
// #3163: a gate the workspace's identity.gates names counts only signed approvals from its class.
|
|
319
|
+
const rule = (await port.approvalRule?.(input.gate)) ?? null;
|
|
320
|
+
const standing = latestPendingGate(pending, input.gate);
|
|
321
|
+
const since = standing?.timestamp ?? EPOCH;
|
|
322
|
+
// #3841: an approval of this plan the rule refuses is named, so a wait says why.
|
|
323
|
+
const refused = [];
|
|
324
|
+
const resolutions = (env === undefined
|
|
325
|
+
? ledger.resolutions
|
|
326
|
+
: ledger.resolutions.filter((r) => r.environment === undefined || r.environment === env))
|
|
327
|
+
.filter((r) => input.spent === undefined || r.gate !== input.gate || !isApprovalSpent(input.spent, r))
|
|
328
|
+
.filter((r) => {
|
|
329
|
+
if (rule === null || r.gate !== input.gate)
|
|
330
|
+
return true;
|
|
331
|
+
const reason = rule.refuses(r);
|
|
332
|
+
if (reason === null)
|
|
333
|
+
return true;
|
|
334
|
+
if (samePlanDigest(r.planDigest, input.planDigest) && new Date(r.timestamp).getTime() >= new Date(since).getTime())
|
|
335
|
+
refused.push({ resolution: r, reason });
|
|
336
|
+
return false;
|
|
337
|
+
});
|
|
338
|
+
refused.sort((a, b) => new Date(a.resolution.timestamp).getTime() - new Date(b.resolution.timestamp).getTime());
|
|
339
|
+
let mismatched;
|
|
340
|
+
let quorum;
|
|
341
|
+
if (input.approval) {
|
|
342
|
+
// #3206: the humans' anchor reaches back past facts re-recorded for this
|
|
343
|
+
// plan and policy version, so a mode or context change keeps the quorum.
|
|
344
|
+
const humansSince = standing && samePlanDigest(standing.planDigest, input.planDigest) &&
|
|
345
|
+
standing.approval?.policy?.version === input.approval.policy?.version
|
|
346
|
+
? humanQuorumSince(pending, standing)
|
|
347
|
+
: since;
|
|
348
|
+
const tally = tallyGateApprovals(resolutions, input.gate, since, input.planDigest, input.approval, humansSince);
|
|
349
|
+
if (tally.permit) {
|
|
350
|
+
return { satisfied: true, resolution: tally.permit, via: "policy", approvals: tally.counted };
|
|
351
|
+
}
|
|
352
|
+
if (tally.counted.length >= tally.need) {
|
|
353
|
+
return {
|
|
354
|
+
satisfied: true,
|
|
355
|
+
resolution: tally.counted[tally.counted.length - 1],
|
|
356
|
+
via: "quorum",
|
|
357
|
+
approvals: tally.counted,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
mismatched = tally.mismatched;
|
|
361
|
+
quorum = { approvers: tally.counted.map((r) => r.resolvedBy), need: tally.need };
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const found = latestResolutionForPlan(resolutions, input.gate, since, input.planDigest);
|
|
365
|
+
if (found.resolution)
|
|
366
|
+
return { satisfied: true, resolution: found.resolution };
|
|
367
|
+
mismatched = found.mismatched;
|
|
368
|
+
}
|
|
369
|
+
// `input.planDigest` is defined whenever `mismatched` is — `latestResolutionForPlan`
|
|
370
|
+
// returns a mismatch only on the plan-bound path.
|
|
371
|
+
const mismatch = mismatched
|
|
372
|
+
? {
|
|
373
|
+
...(mismatched.planDigest !== undefined ? { approved: mismatched.planDigest } : {}),
|
|
374
|
+
planned: input.planDigest,
|
|
375
|
+
resolvedBy: mismatched.resolvedBy,
|
|
376
|
+
timestamp: mismatched.timestamp,
|
|
377
|
+
...(env !== undefined ? { environment: env } : {}),
|
|
378
|
+
}
|
|
379
|
+
: undefined;
|
|
380
|
+
const asMismatch = { ...(mismatch ? { mismatch } : {}), ...(quorum ? { quorum } : {}), ...(refused.length > 0 ? { refused } : {}) };
|
|
381
|
+
// A standing fact only stands for the plan it was recorded against. When
|
|
382
|
+
// the plan has moved, re-recording is what gives `chant approve` (which
|
|
383
|
+
// defaults to the newest pending fact's digest) the current plan to
|
|
384
|
+
// approve; leaving the old fact standing would make the common path
|
|
385
|
+
// approve a plan that is no longer the one being run.
|
|
386
|
+
// The same holds for the approval block (#2508): a pending fact recorded
|
|
387
|
+
// under another policy version or another context would have `chant
|
|
388
|
+
// approve` evaluate the policy against something this run no longer has.
|
|
389
|
+
if (standing && !isPendingGateExpired(standing, now) && samePlanDigest(standing.planDigest, input.planDigest) &&
|
|
390
|
+
sameApproval(standing.approval, input.approval)) {
|
|
391
|
+
return { satisfied: false, pending: standing, recorded: false, ...asMismatch };
|
|
392
|
+
}
|
|
393
|
+
const url = resolveApprovalUrl();
|
|
394
|
+
// #3683: in CI, where this job runs, so an approval can start it again.
|
|
395
|
+
const resume = resolveGateRunLocator();
|
|
396
|
+
const { record, pushed, pushWarning } = await port.appendPending({
|
|
397
|
+
...input.fields,
|
|
398
|
+
op: input.op,
|
|
399
|
+
gate: input.gate,
|
|
400
|
+
timestamp: now,
|
|
401
|
+
expiresAt: new Date(new Date(now).getTime() + parseDuration(input.timeout ?? DEFAULT_GATE_EXPIRY)).toISOString(),
|
|
402
|
+
...(input.description ? { description: input.description } : {}),
|
|
403
|
+
...(input.runId ? { runId: input.runId } : {}),
|
|
404
|
+
...(url ? { url } : {}),
|
|
405
|
+
...(resume ? { resume } : {}),
|
|
406
|
+
...(input.planDigest !== undefined ? { planDigest: input.planDigest } : {}),
|
|
407
|
+
...(env !== undefined ? { environment: env } : {}),
|
|
408
|
+
...(input.approval ? { approval: input.approval } : {}),
|
|
409
|
+
...(input.neverOverMcp ? { neverOverMcp: true } : {}),
|
|
410
|
+
});
|
|
411
|
+
return {
|
|
412
|
+
satisfied: false,
|
|
413
|
+
pending: record,
|
|
414
|
+
recorded: true,
|
|
415
|
+
pushed,
|
|
416
|
+
...(pushWarning ? { pushWarning } : {}),
|
|
417
|
+
...asMismatch,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* The line every renderer prints to say how a pending gate is cleared. A
|
|
422
|
+
* component gate names its environment (#2574), so the approval picks that
|
|
423
|
+
* environment's pending fact when others stand beside it. A gate bound to a
|
|
424
|
+
* plan (#2300) gets `--plan <digest>` too (#2832), so the line approves the
|
|
425
|
+
* plan the reader was shown and not whatever is pending by the time they run
|
|
426
|
+
* it.
|
|
427
|
+
*/
|
|
428
|
+
export function approveCommand(op, gate, environment, planDigest, sealed = false) {
|
|
429
|
+
return `chant approve ${op} ${gate}` +
|
|
430
|
+
(environment === undefined ? "" : ` --env ${environment}`) +
|
|
431
|
+
(planDigest === undefined ? "" : ` --plan ${planDigest}`) +
|
|
432
|
+
(sealed ? " --sign" : "");
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Whether the workspace seals `gate` (`identity.gates`), so an approval
|
|
436
|
+
* without `--sign` doesn't count. Callers pass the answer to
|
|
437
|
+
* {@link approveCommand} so the hint names the flag. Loaded on demand, as the
|
|
438
|
+
* git ledger port does: the workspace modules import the Op modules. A read
|
|
439
|
+
* that throws counts as unsealed, since the hint is advice and not the check.
|
|
440
|
+
*/
|
|
441
|
+
export async function gateIsSealed(gate, cwd = process.cwd()) {
|
|
442
|
+
try {
|
|
443
|
+
const { gateAdmission } = await import("../workspace/identity.js");
|
|
444
|
+
return gateAdmission(cwd, gate) !== null;
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
return false;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate mode's Op counterpart (#927): synthesize scheduled CI for
|
|
3
|
+
* stateless Ops — the cron-triggered sibling of `generateComponentsPipeline`
|
|
4
|
+
* (../components/cli-support.ts, #563/#688). A component pipeline triggers a
|
|
5
|
+
* deploy-time graph on `workflow_dispatch`; this triggers already-built Ops
|
|
6
|
+
* on a cron, each via `chant run <name>` on the local executor — the same
|
|
7
|
+
* one-shot invocation documented at docs/src/content/docs/guide/ops.mdx. Core
|
|
8
|
+
* owns only Op discovery, so a typo'd name fails fast before any CI is
|
|
9
|
+
* generated; the CI-specific synthesis is contributed by the target
|
|
10
|
+
* lexicon's `generateOpPipeline` (../lexicon.ts), exactly like
|
|
11
|
+
* `generateComponentPipeline`.
|
|
12
|
+
*
|
|
13
|
+
* There is no dependency graph between scheduled Ops the way there is
|
|
14
|
+
* between components — `Op.depends` orders phases within one run, not
|
|
15
|
+
* separately scheduled cron triggers — so this does not call
|
|
16
|
+
* `resolveComponentGraph`; each `ScheduledOpSpec` is generated independently.
|
|
17
|
+
*/
|
|
18
|
+
import { discoverOps } from "./discover.js";
|
|
19
|
+
import { lexiconModulePath, importLexiconPackage } from "../lexicon-module.js";
|
|
20
|
+
import { isLexiconPlugin, } from "../lexicon.js";
|
|
21
|
+
import { assertOpWavesSpec } from "./op-waves.js";
|
|
22
|
+
/**
|
|
23
|
+
* Load a lexicon's plugin (`@intentius/chant-lexicon-<name>`) to reach its
|
|
24
|
+
* `generateOpPipeline`. Tolerant: returns null when the package can't be
|
|
25
|
+
* resolved. Kept local (rather than imported from
|
|
26
|
+
* `../components/cli-support.ts`) so this module carries no dependency on
|
|
27
|
+
* `components/`.
|
|
28
|
+
*/
|
|
29
|
+
async function loadLexiconPlugin(name) {
|
|
30
|
+
let mod;
|
|
31
|
+
try {
|
|
32
|
+
mod = (await importLexiconPackage(lexiconModulePath(name) ?? `@intentius/chant-lexicon-${name}`));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
for (const value of Object.values(mod)) {
|
|
38
|
+
if (isLexiconPlugin(value))
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Copy each discovered Op's own `schedule` (#2120) onto its spec, so a CI
|
|
45
|
+
* generator can render the cron the Op already declares — `WatchOp({ name,
|
|
46
|
+
* schedule })` then needs no second cron in the `generateOpsPipeline` call.
|
|
47
|
+
* The spec's own `trigger`/`schedule` still win; `resolveOpTrigger` reads
|
|
48
|
+
* `opSchedule` last. Specs for Ops with no cadence pass through untouched.
|
|
49
|
+
*/
|
|
50
|
+
export function withOpSchedules(specs, discovered) {
|
|
51
|
+
return specs.map((spec) => {
|
|
52
|
+
const schedule = discovered.get(spec.name)?.config.schedule;
|
|
53
|
+
return schedule ? { ...spec, opSchedule: schedule } : spec;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Synthesize scheduled CI for `ops` targeting `lexicon`: validate every named
|
|
58
|
+
* Op exists (`discoverOps`, under the git root — mirrors `chant run <name>`'s
|
|
59
|
+
* own resolution), then dispatch to the lexicon's `generateOpPipeline`. No
|
|
60
|
+
* deploy/audit logic is inlined into the generated YAML — the finding-mode
|
|
61
|
+
* behavior lives in the Op's own activity args, set by the composite that
|
|
62
|
+
* built it (`WorkflowAuditOp`, `PipelineAuditOp`, `ReconcileOp`, …); this
|
|
63
|
+
* function only wires the cron trigger and the token/permission surface the
|
|
64
|
+
* declared `findingMode` needs.
|
|
65
|
+
*/
|
|
66
|
+
export async function generateOpsPipeline(ops, lexicon, options, cwd) {
|
|
67
|
+
const plugin = await loadLexiconPlugin(lexicon);
|
|
68
|
+
if (!plugin?.generateOpPipeline) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: `Lexicon "${lexicon}" does not support Op generate mode (no generateOpPipeline). GitLab, GitHub, and Forgejo are supported today.`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const discovered = await discoverOps({ cwd });
|
|
75
|
+
if (discovered.errors.length > 0) {
|
|
76
|
+
return { success: false, error: discovered.errors.join("\n") };
|
|
77
|
+
}
|
|
78
|
+
const unknown = ops.filter((spec) => !discovered.ops.has(spec.name));
|
|
79
|
+
if (unknown.length > 0) {
|
|
80
|
+
const known = [...discovered.ops.keys()].sort().join(", ");
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
error: `Unknown Op(s): ${unknown.map((s) => s.name).join(", ")}.${known ? ` Known Ops: ${known}` : " No Ops discovered."}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const { files, jobs } = plugin.generateOpPipeline(withOpSchedules(ops, discovered.ops), options);
|
|
87
|
+
return { success: true, files, jobs };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Render ordered waves of Op runs for `lexicon` (#3679, `./op-waves.ts`):
|
|
91
|
+
* check the spec, check that every Op it names exists, then hand it to the
|
|
92
|
+
* lexicon's `generateOpWavesPipeline`.
|
|
93
|
+
*/
|
|
94
|
+
export async function generateOpWavesPipeline(spec, lexicon, options, cwd) {
|
|
95
|
+
const plugin = await loadLexiconPlugin(lexicon);
|
|
96
|
+
if (!plugin?.generateOpWavesPipeline) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
error: `Lexicon "${lexicon}" does not render Op waves (no generateOpWavesPipeline). GitLab, GitHub, and Forgejo do.`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
assertOpWavesSpec(spec);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
107
|
+
}
|
|
108
|
+
const discovered = await discoverOps({ cwd });
|
|
109
|
+
if (discovered.errors.length > 0)
|
|
110
|
+
return { success: false, error: discovered.errors.join("\n") };
|
|
111
|
+
const named = [...new Set([spec.op, ...spec.waves.flatMap((w) => w.runs.map((r) => r.op ?? spec.op))])];
|
|
112
|
+
const unknown = named.filter((name) => !discovered.ops.has(name));
|
|
113
|
+
if (unknown.length > 0) {
|
|
114
|
+
const known = [...discovered.ops.keys()].sort().join(", ");
|
|
115
|
+
return { success: false, error: `Unknown Op(s): ${unknown.join(", ")}.${known ? ` Known Ops: ${known}` : " No Ops discovered."}` };
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const { files, jobs } = plugin.generateOpWavesPipeline(spec, options);
|
|
119
|
+
return { success: true, files, jobs };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
123
|
+
}
|
|
124
|
+
}
|
package/dist/op/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export { Op, phase, activity, gate, effect, build, kubectlApply, helmInstall, helmInstallPinned, waitForStack, waitForReady, gitlabPipeline, lifecycleSnapshot, shell, sourceArchive, releasePlan, releaseRecord, composeChangeSet, lifecyclePlanChangeSet, readChangeSetPart, releaseRollbackPlan, releaseRollbackRecord, decide, ensureSecret, teardown, envTeardown, k3dUp, k3dDown, k3sInstall, k3sUninstall, flociUp, flociDown, flociAzUp, flociAzDown, flociGcpUp, flociGcpDown, httpCheck, azGroupEnsure, azGroupDelete, azApply, azDelete, awsApply, awsDelete, gcpApply, gcpDelete, policyGate, guardValidate, workEvidence, spriteCreate, spriteExec, spriteCheckpoint, spriteRestore, listCheckpoints, spriteDestroy, spriteWriteFile, spriteReadFile, spriteListDir, spriteRemove, spriteApplyNetworkPolicy, spriteApplyServices, spriteTaskCreate, spriteTaskRefresh, spriteTaskRelease, spritesUp, spritesDown } from "./builders.js";
|
|
2
|
+
export { OpResource } from "./resource.js";
|
|
3
|
+
export { sleep } from "./activity-runtime.js";
|
|
4
|
+
export { clientHosts, emulatorLifecycle, emulatorsOf, endpointEnvVars, endpointOnHost, hostPortInUse, parsePublishedAddresses, pickReachableEndpoint } from "./emulator-lifecycle.js";
|
|
5
|
+
export { checkFreshness, compare, formatResult, latestRelease, parseVersion, unpinned } from "./emulator-freshness.js";
|
|
6
|
+
export { outcomeAttributesOf, WORK_LEASE_STEP_ID, DRIFT_EXIT_CODE } from "./types.js";
|
|
7
|
+
export { RunWorkLease, workLeaseOutput, stewardWorkHolder, workLeaseProblems, workLeaseNeedsRunItem, LEASE_LOST, WORK_BRANCH_PREFIX, } from "./work-lease-run.js";
|
|
8
|
+
export { isValidCronExpression, cronSyntaxMessage, cronMatches, cronDueBetween } from "./cron.js";
|
|
9
|
+
export { WatchOp, ReconcileOp, ApplyOp, ConvergeOp, WorkflowAuditOp, PipelineAuditOp, LexiconUpgradeOp, IN_SCOPE_LEXICONS, BehaviourOp, } from "./composites/index.js";
|
|
10
|
+
export { parseResourceObservation, CONVERGE_RESOURCE_ENV } from "../lifecycle/symptoms.js";
|
|
11
|
+
export { receiptActivities, receiptCheckInput } from "./receipt-store.js";
|
|
12
|
+
export { discoverOps } from "./discover.js";
|
|
13
|
+
export { generateOpsPipeline, generateOpWavesPipeline, withOpSchedules } from "./generate-pipeline.js";
|
|
14
|
+
export { OP_WAVE_APPLY_HOOKS_RUNNERS, OP_WAVE_DEFAULT_APPLY, OP_WAVE_DEFAULT_GATE_NAME, OP_WAVE_GATE_POLICIES, OP_WAVE_HOOK_MOMENTS, assertOpWaveHooks, assertOpWavesSpec, opWaveApplyHooksRunBy, opWaveGateName, opWaveHooksAt, opWaveJobs, opWaveRecordPath, opWaveShare, } from "./op-waves.js";
|
|
15
|
+
export { OP_WAVE_APPLY_OUTCOMES, OP_WAVE_MAX_REPLANS, opWaveHooksAtBase, opWaveNeedsApproval, opWavePlansPath, opWaveRunsPath, opWaveSetDigest, parseOpWavesSpec, recordOpWaveHeadPlans, readOpWaveHooksFile, readOpWavePolicy, runOpWave, runOpWaveApplyHooks, } from "./op-waves-run.js";
|
|
16
|
+
export { notifyOpWave, opWaveNotifyFields } from "./op-waves-notify.js";
|
|
17
|
+
export { loadActivities, loadProfiles, resolveActivity } from "./activity-registry.js";
|
|
18
|
+
export { loadActivityContracts, mergeActivityContracts } from "./activity-contract-registry.js";
|
|
19
|
+
export { ACTIVITY_PROFILES, ACTIVITY_PROFILE_NAMES, MAX_STEP_TIMEOUT } from "./activity-profiles.js";
|
|
20
|
+
export { NonRetryableActivityError, nonRetryableFailure } from "./activity-failure.js";
|
|
21
|
+
export { runOpLocally, parseDuration, OpRunFailure } from "./local-executor.js";
|
|
22
|
+
export { currentOpRun, withOpRunContext } from "./run-context.js";
|
|
23
|
+
export { evaluateGate, gitGateLedgerPort, memoryGateLedgerPort, approveCommand, describeGateMismatch, gateIsSealed } from "./gate.js";
|
|
24
|
+
export { tallyGateApprovals, humanQuorumSince, approverOf } from "./gate.js";
|
|
25
|
+
export { planGateResumes, standingGateFacts } from "./gate-resume-plan.js";
|
|
26
|
+
export { gateApprovalProblems, gateContextDigest, gatePolicyRequest, gatePolicyVersion, isGatePolicyRef, loadGatePolicyEvaluator, GATE_APPROVAL_MODES, } from "./gate-approval.js";
|
|
27
|
+
export { gatePlanSummary, gatePlanSummaryOfResult, changeSetOfResult, GATE_PLAN_CONTEXT_KEY, GATE_PLAN_ADDRESS_LIMIT, } from "./gate-plan-context.js";
|
|
28
|
+
export { computePlanDigest, isPlanDigest, describePlanDigest, samePlanDigest, PLAN_DIGEST_ALGORITHM, PLAN_DIGEST_PREFIX, } from "../lifecycle/plan-digest.js";
|
|
29
|
+
export { gateName, usesDeprecatedGateKey, DEPRECATED_GATE_KEY_WARNING } from "./gate-name.js";
|
|
30
|
+
export { gatePointOf, gatePointProblems, gatePointInputs, gateSubject, GATE_POINT_INPUTS, DEFAULT_GATE_POINT_PASS } from "./gate-point.js";
|
|
31
|
+
export { evaluatePointGate, workspaceGatePointAsker } from "./gate-point-run.js";
|
|
32
|
+
export { createLocalOpRuntime } from "./runtimes/local.js";
|
|
33
|
+
export { runStateOf } from "./runtime.js";
|
|
34
|
+
export { buildOpIR, serializeOpIR, opConfigFromIR, OP_IR_FORMAT_VERSION } from "./op-ir.js";
|
|
35
|
+
export { renderHuman, renderJson } from "./local-output.js";
|
|
36
|
+
export { activityContract, isActivityContract, collectActivityContracts, validateActivitySteps, KNOWN_ACTIVITY_PROFILES, pathExistsInSchema, } from "./activity-contract.js";
|
|
37
|
+
export { stepOutput, isStepOutputRef, collectStepOutputRefs, validateStepOutputRefs, validateStepOutputRefScope, makeOutProxy } from "./step-output-ref.js";
|
|
38
|
+
export { eq, neq, gt, gte, lt, lte, truthy, falsy, allOf, anyOf, evaluatePredicate, isWellFormedPredicate, predicateReferencesField, run, report, when, duplicateRuleIds, DEFAULT_FLAP_THRESHOLD, } from "./converge-rule.js";
|
|
39
|
+
export { discoverConvergeOps, runOperatorRound, runOperatorForever, formatRoundLine, formatSignalLine, DEFAULT_OPERATOR_INTERVAL_MS, acquireStewardLease, acquireStewardTurn, STEWARD_TURN_WAIT_MS, createBesideState, waitForBesideRuns, stopBesideRuns, } from "./operator.js";
|
|
40
|
+
export { spawnBesideRun, inProcessBesideLauncher, holdBesideLease, askReady, DEFAULT_READY_TIMEOUT_MS, } from "./steward-beside.js";
|
|
41
|
+
export { declareSteward, isStewardDeclaration, stewardFormFor, stewardOpConfig, normaliseStewardForm, stewardLeaseName, stewardTurnLeaseName, stewardBesideOf, stewardBesideFor, stewardTurnOps, readinessKeys, STEWARD_KIND, STEWARD_FORMS, STEWARD_NAME_PATTERN, DEFAULT_STEWARD_ENV, } from "./steward.js";
|
|
42
|
+
export { discoverStewards } from "./discover.js";
|
|
43
|
+
export { askPointInRun, brokeredModelAsk, isPointWait, PointWait, DEFAULT_INFERENCE_CAPABILITY, } from "./steward-points.js";
|
|
44
|
+
export { GateWait, isGateWait } from "./gate-wait.js";
|
|
45
|
+
export { currentStewardTurn, enterStewardTurn, setStewardTurn, resetStewardTurn, STEWARD_ENV, } from "./steward-turn.js";
|
|
46
|
+
export { reportRunActivity, readInFlightRun, RUN_ACTIVITY_ENV, RUN_ID_ENV } from "./run-live.js";
|
|
47
|
+
export { createChangeSignalGate, DEFAULT_SIGNAL_FLOOR_MS } from "./change-signal.js";
|
|
48
|
+
export { classifyOpVerbClass, isGated } from "./op-verb-class.js";
|
|
49
|
+
export { takeProfileAndId } from "./builders.js";
|
|
50
|
+
// The factory reference Op (#3406, ws-087).
|
|
51
|
+
export { factoryOp, factoryOpConfig, factoryReady } from "./factory.js";
|