@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receipt store seam (#1834, epic #1703) — how the `effect()` step and the
|
|
3
|
+
* receipt-reading Ops reach a materialized receipt without knowing which
|
|
4
|
+
* lexicon materializes it.
|
|
5
|
+
*
|
|
6
|
+
* The store is injectable: core defines the {@link ReceiptStore} interface and
|
|
7
|
+
* the activity contracts; the receipt row's lexicon implements the store over
|
|
8
|
+
* its own resource (#1835's aws row over `AWS::SSM::Parameter`) and exports
|
|
9
|
+
* the bound activities (`receiptRead`, `receiptWrite`, `receiptStaleness`)
|
|
10
|
+
* from its `op/activities` module via {@link receiptActivities}. The activity
|
|
11
|
+
* registry then resolves them by name, exactly like `ensureSecret`
|
|
12
|
+
* (#1829/#1830, provided by the k8s lexicon). Tests bind a mock store the
|
|
13
|
+
* same way.
|
|
14
|
+
*
|
|
15
|
+
* Write discipline (epic #1703 decision log, item 3): the `effect()` step is
|
|
16
|
+
* the SOLE writer of a receipt — on success of its nested steps, last. The
|
|
17
|
+
* store interface carries a `write`, but only the effect step's emitted
|
|
18
|
+
* read-compare-run-write (and its local-executor twin) reaches it.
|
|
19
|
+
* `receiptStaleness` — the WatchOp phase (#1834) — is read-only by
|
|
20
|
+
* construction: it never touches `write` and runs nothing.
|
|
21
|
+
*
|
|
22
|
+
* Expectation resolution follows the resolution split (decision 5): a fully
|
|
23
|
+
* static receipt's expectation is stamped at synthesis and rides the step
|
|
24
|
+
* data ({@link receiptCheckInput}); a hash-flavor receipt with reference
|
|
25
|
+
* inputs resolves at run, through the store lexicon's
|
|
26
|
+
* {@link ReceiptActivityOptions.resolveExpectation} hook — never by hashing
|
|
27
|
+
* placeholders.
|
|
28
|
+
*/
|
|
29
|
+
import { EXISTENCE_EXPECTATION, isEffectReceipt, receiptExpectation, referenceInputPaths, } from "../effect-receipt.js";
|
|
30
|
+
/**
|
|
31
|
+
* Snapshot a typed receipt declaration into check-input data: the
|
|
32
|
+
* {@link EffectReceiptRef} plus the synthesis-time expectation when the
|
|
33
|
+
* receipt is fully static. Used by the `effect()` builder and by WatchOp's
|
|
34
|
+
* staleness phase — the single place "static enough to hash now" is decided.
|
|
35
|
+
*/
|
|
36
|
+
export function receiptCheckInput(receipt) {
|
|
37
|
+
if (!isEffectReceipt(receipt)) {
|
|
38
|
+
throw new Error("receiptCheckInput: expected an EffectReceipt declaration — import the exported const; there is no string form");
|
|
39
|
+
}
|
|
40
|
+
const ref = {
|
|
41
|
+
name: receipt.name,
|
|
42
|
+
effect: receipt.effect,
|
|
43
|
+
flavor: receipt.flavor,
|
|
44
|
+
inputs: receipt.inputs,
|
|
45
|
+
};
|
|
46
|
+
// An existence receipt's expectation is a constant, references or not; a
|
|
47
|
+
// hash receipt is static only when no reference inputs remain.
|
|
48
|
+
const isStatic = receipt.flavor === "existence" || referenceInputPaths(receipt).length === 0;
|
|
49
|
+
return isStatic ? { receipt: ref, expectation: receiptExpectation(receipt) } : { receipt: ref };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Bind the receipt activities to a store. The store's lexicon calls this once
|
|
53
|
+
* and re-exports the result from its `op/activities` module; the activity
|
|
54
|
+
* registry picks the functions up by name for both executors.
|
|
55
|
+
*/
|
|
56
|
+
export function receiptActivities(store, opts) {
|
|
57
|
+
const expectationOf = async (input) => {
|
|
58
|
+
if (input.expectation !== undefined)
|
|
59
|
+
return input.expectation;
|
|
60
|
+
if (input.receipt.flavor === "existence")
|
|
61
|
+
return EXISTENCE_EXPECTATION;
|
|
62
|
+
if (opts?.resolveExpectation)
|
|
63
|
+
return await opts.resolveExpectation(input.receipt);
|
|
64
|
+
throw new Error(`receipt "${input.receipt.name}": no synthesis-time expectation and no resolveExpectation hook — ` +
|
|
65
|
+
`a hash-flavor receipt with reference inputs resolves at run (#1703 decision 5), ` +
|
|
66
|
+
`and hashing placeholders would be a wrong expectation`);
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
async receiptRead(args) {
|
|
70
|
+
const expectation = await expectationOf(args);
|
|
71
|
+
const current = await store.read(args.receipt);
|
|
72
|
+
return { current: current ?? null, expectation, applied: current === expectation };
|
|
73
|
+
},
|
|
74
|
+
async receiptWrite(args) {
|
|
75
|
+
await store.write(args.receipt, args.expectation);
|
|
76
|
+
return { written: true, receipt: args.receipt.name };
|
|
77
|
+
},
|
|
78
|
+
// Read-only: reads and reports, runs nothing, never writes.
|
|
79
|
+
async receiptStaleness(args) {
|
|
80
|
+
const findings = [];
|
|
81
|
+
for (const input of args.receipts) {
|
|
82
|
+
const expected = await expectationOf(input);
|
|
83
|
+
const current = await store.read(input.receipt);
|
|
84
|
+
if (current === undefined) {
|
|
85
|
+
findings.push({ receipt: input.receipt.name, effect: input.receipt.effect, kind: "absent", expected });
|
|
86
|
+
}
|
|
87
|
+
else if (current !== expected) {
|
|
88
|
+
findings.push({ receipt: input.receipt.name, effect: input.receipt.effect, kind: "differs", expected, current });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { stale: findings.length > 0, findings };
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createResource } from "../runtime.js";
|
|
2
|
+
/**
|
|
3
|
+
* The Declarable resource backing an Op definition.
|
|
4
|
+
* entityType: "Chant::Op", lexicon: "chant"
|
|
5
|
+
* Discovered automatically alongside infra files — no pipeline changes needed.
|
|
6
|
+
*
|
|
7
|
+
* An Op is chant's own verb, not a runtime's (#2118, epic #2114): the model,
|
|
8
|
+
* the executor and the ledger all live in core, and a lexicon that hosts runs
|
|
9
|
+
* is one runtime among several. The entity type says so.
|
|
10
|
+
*/
|
|
11
|
+
export const OP_ENTITY_TYPE = "Chant::Op";
|
|
12
|
+
export const OpResource = createResource(OP_ENTITY_TYPE, "chant", {});
|
|
13
|
+
/**
|
|
14
|
+
* Is this entity an Op declaration?
|
|
15
|
+
*
|
|
16
|
+
* Duck-typed on `entityType` rather than `instanceof OpResource` for the same
|
|
17
|
+
* reason `../build.ts`'s dependency inference is: an entity can be built
|
|
18
|
+
* against a different copy of core (a linked lexicon, a child project) and
|
|
19
|
+
* still be the same declaration.
|
|
20
|
+
*/
|
|
21
|
+
export function isOpEntity(entity) {
|
|
22
|
+
return entity?.entityType === OP_ENTITY_TYPE;
|
|
23
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run an activity is part of (#2522).
|
|
3
|
+
*
|
|
4
|
+
* An activity is called as `fn(args, signal)`, which says nothing about the
|
|
5
|
+
* run around it. An activity that deploys somewhere needs the environment the
|
|
6
|
+
* run was asked for, one that appends a ledger record of its own needs the run
|
|
7
|
+
* id to name the run that made it, and a step after a gate may need to know the
|
|
8
|
+
* gate passed and who approved it.
|
|
9
|
+
*
|
|
10
|
+
* `runOpLocally` (`./local-executor.ts`) sets this for the whole run, and
|
|
11
|
+
* {@link currentOpRun} reads it from inside an activity. It is backed by
|
|
12
|
+
* `AsyncLocalStorage`, so it follows the activity through every `await` and is
|
|
13
|
+
* `undefined` outside a run.
|
|
14
|
+
*/
|
|
15
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
16
|
+
const store = new AsyncLocalStorage();
|
|
17
|
+
/**
|
|
18
|
+
* The run the calling activity is part of, or `undefined` outside a run.
|
|
19
|
+
* `passedGates` is a copy taken at the time of the call.
|
|
20
|
+
*/
|
|
21
|
+
export function currentOpRun() {
|
|
22
|
+
const ctx = store.getStore();
|
|
23
|
+
return ctx ? { ...ctx, passedGates: [...ctx.passedGates] } : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Run `fn` with `ctx` as the current run. The executor calls this. A runtime that calls activities itself can too. */
|
|
26
|
+
export function withOpRunContext(ctx, fn) {
|
|
27
|
+
return store.run(ctx, fn);
|
|
28
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The in-flight run record: what an Op run is doing while it runs.
|
|
3
|
+
*
|
|
4
|
+
* The run ledger (`../lifecycle/run-ledger.ts`) gets one record when a run
|
|
5
|
+
* settles, so until then a reader sees the previous run. A run that writes to
|
|
6
|
+
* the ledger (the executor's `ledger` option) also keeps two files beside the
|
|
7
|
+
* checkout's git directory, outside the working tree and the lifecycle branch:
|
|
8
|
+
*
|
|
9
|
+
* - `<git-common-dir>/chant/runs/<key>.json`, the run's id, steward, work
|
|
10
|
+
* item, current phase and step, and the phases it has finished with their
|
|
11
|
+
* durations, rewritten whole as the run moves;
|
|
12
|
+
* - `<git-common-dir>/chant/runs/<key>.activity.jsonl`, lines a step's
|
|
13
|
+
* process appends while it works, one per line.
|
|
14
|
+
*
|
|
15
|
+
* `<key>` folds the member's ledger prefix, the env and the Op's name into one
|
|
16
|
+
* file name. Both files are removed once the run's ledger record is written.
|
|
17
|
+
* A run that died without removing them is recognised by its process: a record
|
|
18
|
+
* whose host is this one and whose pid is gone is not in flight.
|
|
19
|
+
*
|
|
20
|
+
* A step's process finds the activity file in `CHANT_RUN_ACTIVITY`, which the
|
|
21
|
+
* `shellCmd` activity sets for a run that keeps one, and appends a line to it:
|
|
22
|
+
* a JSON object `{"at": "<ISO-8601>", "text": "..."}`, or plain text. An
|
|
23
|
+
* in-process activity calls {@link reportRunActivity}.
|
|
24
|
+
*/
|
|
25
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
26
|
+
import { execFile } from "node:child_process";
|
|
27
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
28
|
+
import { hostname } from "node:os";
|
|
29
|
+
import { isAbsolute, join, resolve } from "node:path";
|
|
30
|
+
import { promisify } from "node:util";
|
|
31
|
+
import { resolveMemberLedger } from "../lifecycle/member-ledger.js";
|
|
32
|
+
const execFileAsync = promisify(execFile);
|
|
33
|
+
/** The environment variable naming the activity file, for a step's process. */
|
|
34
|
+
export const RUN_ACTIVITY_ENV = "CHANT_RUN_ACTIVITY";
|
|
35
|
+
/** The environment variable naming the run, for a step's process. */
|
|
36
|
+
export const RUN_ID_ENV = "CHANT_RUN_ID";
|
|
37
|
+
/** How many activity lines a reader gets by default: the newest ones. */
|
|
38
|
+
export const IN_FLIGHT_ACTIVITY_LINES = 20;
|
|
39
|
+
/** The file name a run's record is kept under, the prefix and env folded in. */
|
|
40
|
+
function keyOf(prefix, env, op) {
|
|
41
|
+
return `${prefix}${env}/${op}`.replace(/[\/\\]/g, "__").replace(/[^A-Za-z0-9._@-]/g, "_");
|
|
42
|
+
}
|
|
43
|
+
/** The checkout's shared git directory (the same for every worktree), or null outside a checkout. */
|
|
44
|
+
async function gitCommonDir(cwd) {
|
|
45
|
+
try {
|
|
46
|
+
const { stdout } = await execFileAsync("git", ["rev-parse", "--git-common-dir"], { cwd });
|
|
47
|
+
const dir = stdout.trim();
|
|
48
|
+
return dir === "" ? null : isAbsolute(dir) ? dir : resolve(cwd, dir);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Where the run of `op` in `env` for the project at `cwd` keeps its files, or null outside a checkout. */
|
|
55
|
+
export async function inFlightPaths(cwd, env, op) {
|
|
56
|
+
const common = await gitCommonDir(cwd);
|
|
57
|
+
if (!common)
|
|
58
|
+
return null;
|
|
59
|
+
const { prefix } = await resolveMemberLedger(cwd);
|
|
60
|
+
const base = join(common, "chant", "runs", keyOf(prefix, env, op));
|
|
61
|
+
return { record: `${base}.json`, activity: `${base}.activity.jsonl` };
|
|
62
|
+
}
|
|
63
|
+
function processAlive(pid) {
|
|
64
|
+
try {
|
|
65
|
+
process.kill(pid, 0);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return err.code === "EPERM";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** One activity line appended to `file`. Never throws: a report is not worth failing a step for. */
|
|
73
|
+
function appendActivity(file, text) {
|
|
74
|
+
const line = text.replace(/\s+/g, " ").trim();
|
|
75
|
+
if (line === "")
|
|
76
|
+
return;
|
|
77
|
+
try {
|
|
78
|
+
appendFileSync(file, `${JSON.stringify({ at: new Date().toISOString(), text: line })}\n`);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// The run's files are gone or unwritable: the line is dropped.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A running Op's in-flight record. The executor opens one per run that
|
|
86
|
+
* writes to the ledger and calls it as the run moves. Every write is
|
|
87
|
+
* best-effort: a record that can't be written leaves the run as it was.
|
|
88
|
+
*/
|
|
89
|
+
export class LiveRun {
|
|
90
|
+
constructor(paths, rec) {
|
|
91
|
+
this.paths = paths;
|
|
92
|
+
this.running = [];
|
|
93
|
+
this.rec = rec;
|
|
94
|
+
}
|
|
95
|
+
/** Open the record for a run starting now, or undefined when the project is not a checkout. */
|
|
96
|
+
static async open(opts) {
|
|
97
|
+
let paths;
|
|
98
|
+
try {
|
|
99
|
+
paths = await inFlightPaths(opts.cwd, opts.env, opts.op);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
if (!paths)
|
|
105
|
+
return undefined;
|
|
106
|
+
const run = new LiveRun(paths, {
|
|
107
|
+
version: 1,
|
|
108
|
+
id: opts.id,
|
|
109
|
+
op: opts.op,
|
|
110
|
+
env: opts.env,
|
|
111
|
+
steward: opts.steward ?? null,
|
|
112
|
+
item: null,
|
|
113
|
+
started: opts.started,
|
|
114
|
+
updated: opts.started,
|
|
115
|
+
host: hostname(),
|
|
116
|
+
pid: process.pid,
|
|
117
|
+
phase: null,
|
|
118
|
+
step: null,
|
|
119
|
+
phases: [],
|
|
120
|
+
});
|
|
121
|
+
try {
|
|
122
|
+
mkdirSync(join(paths.record, ".."), { recursive: true });
|
|
123
|
+
writeFileSync(paths.activity, "");
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
run.write();
|
|
129
|
+
return run;
|
|
130
|
+
}
|
|
131
|
+
/** The file a step's process appends activity lines to. */
|
|
132
|
+
get activityFile() {
|
|
133
|
+
return this.paths.activity;
|
|
134
|
+
}
|
|
135
|
+
get id() {
|
|
136
|
+
return this.rec.id;
|
|
137
|
+
}
|
|
138
|
+
phaseStarted(name) {
|
|
139
|
+
this.rec.phase = { name, started: new Date().toISOString() };
|
|
140
|
+
this.write();
|
|
141
|
+
}
|
|
142
|
+
phaseEnded(name, status, durationMs) {
|
|
143
|
+
this.rec.phases.push({ name, status, durationMs });
|
|
144
|
+
if (this.rec.phase?.name === name)
|
|
145
|
+
this.rec.phase = null;
|
|
146
|
+
this.write();
|
|
147
|
+
}
|
|
148
|
+
/** A step started; the returned function says it ended. */
|
|
149
|
+
stepStarted(fn, id) {
|
|
150
|
+
const step = { name: id ?? fn, fn, started: new Date().toISOString() };
|
|
151
|
+
this.running.push(step);
|
|
152
|
+
this.rec.step = step;
|
|
153
|
+
this.write();
|
|
154
|
+
return () => {
|
|
155
|
+
const at = this.running.indexOf(step);
|
|
156
|
+
if (at >= 0)
|
|
157
|
+
this.running.splice(at, 1);
|
|
158
|
+
this.rec.step = this.running.at(-1) ?? null;
|
|
159
|
+
this.write();
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
item(item) {
|
|
163
|
+
this.rec.item = item;
|
|
164
|
+
this.write();
|
|
165
|
+
}
|
|
166
|
+
report(text) {
|
|
167
|
+
appendActivity(this.paths.activity, text);
|
|
168
|
+
}
|
|
169
|
+
/** The run has settled and its ledger record is written: remove its files. */
|
|
170
|
+
close() {
|
|
171
|
+
for (const file of [this.paths.record, this.paths.activity]) {
|
|
172
|
+
try {
|
|
173
|
+
rmSync(file, { force: true });
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Left behind; a reader drops it once this process is gone.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
write() {
|
|
181
|
+
this.rec.updated = new Date().toISOString();
|
|
182
|
+
const tmp = `${this.paths.record}.${process.pid}.tmp`;
|
|
183
|
+
try {
|
|
184
|
+
writeFileSync(tmp, JSON.stringify(this.rec));
|
|
185
|
+
renameSync(tmp, this.paths.record);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Best-effort, as the module doc says.
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const context = new AsyncLocalStorage();
|
|
193
|
+
/** Run `fn` as part of `live`'s run, so the steps under it find it. */
|
|
194
|
+
export function withLiveRun(live, fn) {
|
|
195
|
+
return live ? context.run(live, fn) : fn();
|
|
196
|
+
}
|
|
197
|
+
/** The run the calling step is part of, when it keeps an in-flight record. */
|
|
198
|
+
export function currentLiveRun() {
|
|
199
|
+
return context.getStore();
|
|
200
|
+
}
|
|
201
|
+
/** The variables a step's child process gets so it can report activity. Empty outside such a run. */
|
|
202
|
+
export function liveRunEnv() {
|
|
203
|
+
const live = context.getStore();
|
|
204
|
+
return live ? { [RUN_ACTIVITY_ENV]: live.activityFile, [RUN_ID_ENV]: live.id } : {};
|
|
205
|
+
}
|
|
206
|
+
/** Append an activity line to the run the calling activity is part of. A no-op outside one. */
|
|
207
|
+
export function reportRunActivity(text) {
|
|
208
|
+
context.getStore()?.report(text);
|
|
209
|
+
}
|
|
210
|
+
function parseActivity(content, limit) {
|
|
211
|
+
const raw = content.split("\n").filter((l) => l.trim() !== "");
|
|
212
|
+
const from = Math.max(0, raw.length - limit);
|
|
213
|
+
const lines = raw.slice(from).map((line, i) => {
|
|
214
|
+
const seq = from + i + 1;
|
|
215
|
+
try {
|
|
216
|
+
const parsed = JSON.parse(line);
|
|
217
|
+
if (parsed && typeof parsed === "object" && typeof parsed.text === "string") {
|
|
218
|
+
return { seq, at: typeof parsed.at === "string" ? parsed.at : null, text: parsed.text };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Plain text.
|
|
223
|
+
}
|
|
224
|
+
return { seq, at: null, text: line.trim() };
|
|
225
|
+
});
|
|
226
|
+
return { total: raw.length, lines };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The run of `op` in `env` in flight for the project at `cwd`, with its
|
|
230
|
+
* newest `limit` activity lines, or null when none is. A record left by a
|
|
231
|
+
* process on this host that is gone is not in flight.
|
|
232
|
+
*/
|
|
233
|
+
export async function readInFlightRun(cwd, env, op, limit = IN_FLIGHT_ACTIVITY_LINES) {
|
|
234
|
+
const paths = await inFlightPaths(cwd, env, op);
|
|
235
|
+
if (!paths || !existsSync(paths.record))
|
|
236
|
+
return null;
|
|
237
|
+
let rec;
|
|
238
|
+
try {
|
|
239
|
+
rec = JSON.parse(readFileSync(paths.record, "utf8"));
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
if (rec.version !== 1 || typeof rec.id !== "string" || typeof rec.started !== "string")
|
|
245
|
+
return null;
|
|
246
|
+
if (rec.host === hostname() && typeof rec.pid === "number" && !processAlive(rec.pid))
|
|
247
|
+
return null;
|
|
248
|
+
let content = "";
|
|
249
|
+
try {
|
|
250
|
+
content = readFileSync(paths.activity, "utf8");
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// No activity yet.
|
|
254
|
+
}
|
|
255
|
+
return { ...rec, phases: Array.isArray(rec.phases) ? rec.phases : [], activity: parseActivity(content, limit) };
|
|
256
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The op-runtime seam (#2121, epic #2114).
|
|
3
|
+
*
|
|
4
|
+
* An Op is a convergent verb; *where* it runs is a separate question from
|
|
5
|
+
* *what* it does. This module states that question once, as a provider
|
|
6
|
+
* contract, so `chant run` has one dispatch path instead of a branch per
|
|
7
|
+
* runtime. Core ships the `local` provider (./runtimes/local.ts) and never
|
|
8
|
+
* imports a hosting lexicon; a lexicon that hosts runs implements
|
|
9
|
+
* {@link OpRuntimeProvider} and hangs it off `LexiconPlugin.opRuntime`, where
|
|
10
|
+
* `chant run <op> --on <lexicon>` finds it.
|
|
11
|
+
*
|
|
12
|
+
* The record shapes below are the run ledger's (#2118): what a run wrote to
|
|
13
|
+
* `<env>/runs__<op>.jsonl` is what a provider's `status` and `log` read back,
|
|
14
|
+
* so a run's outcome survives the process that produced it. A provider with no
|
|
15
|
+
* ledger behind it (a hosting lexicon reporting a live run) fills the same
|
|
16
|
+
* shape from whatever it does know.
|
|
17
|
+
*/
|
|
18
|
+
/** Map a settled run's ledger status onto the coarser runtime state. */
|
|
19
|
+
export function runStateOf(status) {
|
|
20
|
+
return status === "ok" ? "completed" : status === "gated" ? "gated" : status === "waiting" ? "waiting" : "failed";
|
|
21
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in `local` op runtime (#2121, epic #2114).
|
|
3
|
+
*
|
|
4
|
+
* Wraps `runOpLocally` (../local-executor.ts) in the {@link OpRuntimeProvider}
|
|
5
|
+
* contract so `chant run <op>` has one dispatch path whether the run is hosted
|
|
6
|
+
* here or by a lexicon's `opRuntime`. Behaviour is the executor's, unchanged:
|
|
7
|
+
* activities and profiles come from the project's configured lexicons, a gate
|
|
8
|
+
* is decided against the gate ledger and ends the run `gated` (#2119), and
|
|
9
|
+
* Ctrl-C aborts through the caller's `AbortSignal`.
|
|
10
|
+
*
|
|
11
|
+
* Status, log and list read the run ledger (#2118): every run this provider
|
|
12
|
+
* starts appends one `OpRunRecord` to `<env>/runs__<op>.jsonl` on the
|
|
13
|
+
* lifecycle branch, so an answer here outlives the process that produced it
|
|
14
|
+
* and a run started by cron, CI or another machine is visible too. The
|
|
15
|
+
* in-memory history stays as the fallback for the case the ledger cannot cover
|
|
16
|
+
* — a project that is not a checkout, or a run whose append failed — so a
|
|
17
|
+
* `chant run` followed by `chant run status` in the same process still
|
|
18
|
+
* answers.
|
|
19
|
+
*/
|
|
20
|
+
import { lexiconNames } from "../../lexicon-module.js";
|
|
21
|
+
import { loadChantConfig } from "../../config.js";
|
|
22
|
+
import { loadActivities, loadProfiles } from "../activity-registry.js";
|
|
23
|
+
import { runOpLocally, OpRunFailure } from "../local-executor.js";
|
|
24
|
+
import { runComponents } from "../../components/cli-support.js";
|
|
25
|
+
import { discoverOps } from "../discover.js";
|
|
26
|
+
import { readRunLedger, runEnvOf, DEFAULT_RUN_ENV } from "../../lifecycle/run-ledger.js";
|
|
27
|
+
import { runStateOf, } from "../runtime.js";
|
|
28
|
+
function statusFrom(op, runId, startedAt, result) {
|
|
29
|
+
return {
|
|
30
|
+
op,
|
|
31
|
+
runId,
|
|
32
|
+
state: runStateOf(result.status),
|
|
33
|
+
startedAt,
|
|
34
|
+
endedAt: new Date().toISOString(),
|
|
35
|
+
records: result.records,
|
|
36
|
+
result,
|
|
37
|
+
...(result.gate ? { gate: { name: result.gate.gate, since: result.gate.timestamp, ...(result.gate.op !== op ? { op: result.gate.op } : {}) } } : {}),
|
|
38
|
+
...(result.record.point ? { point: result.record.point } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A ledger record read back as a runtime status. `records` and `result` are
|
|
43
|
+
* absent on purpose: the ledger keeps each step's verdict, not the activity
|
|
44
|
+
* return values a live `OpRunResult` carries, and inventing them would make a
|
|
45
|
+
* replayed answer look like a live one.
|
|
46
|
+
*/
|
|
47
|
+
function statusFromRecord(record) {
|
|
48
|
+
return {
|
|
49
|
+
op: record.op,
|
|
50
|
+
runId: record.id,
|
|
51
|
+
state: runStateOf(record.status),
|
|
52
|
+
startedAt: record.started,
|
|
53
|
+
endedAt: record.ended,
|
|
54
|
+
...(record.gate ? { gate: record.gate } : {}),
|
|
55
|
+
...(record.point ? { point: record.point } : {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build the local provider. `projectPath` is where `chant.config.ts` is read
|
|
60
|
+
* from to decide which cloud appliers to load — the same best-effort read the
|
|
61
|
+
* CLI did inline before the seam existed.
|
|
62
|
+
*/
|
|
63
|
+
export function createLocalOpRuntime(opts = {}) {
|
|
64
|
+
const runs = new Map();
|
|
65
|
+
const projectPath = opts.projectPath ?? process.cwd();
|
|
66
|
+
const record = (status) => {
|
|
67
|
+
const existing = runs.get(status.op);
|
|
68
|
+
if (existing)
|
|
69
|
+
existing.push(status);
|
|
70
|
+
else
|
|
71
|
+
runs.set(status.op, [status]);
|
|
72
|
+
};
|
|
73
|
+
// A run ledger is keyed `<env>/runs__<op>.jsonl`, and `status`/`log` are
|
|
74
|
+
// handed a name rather than a config. `start` and `list` know the config and
|
|
75
|
+
// seed this; otherwise the same `*.op.ts` scan that found the Op in the
|
|
76
|
+
// first place resolves its `labels.Env`.
|
|
77
|
+
const envs = new Map();
|
|
78
|
+
const noteEnv = (op) => {
|
|
79
|
+
const env = runEnvOf(op);
|
|
80
|
+
envs.set(op.name, env);
|
|
81
|
+
return env;
|
|
82
|
+
};
|
|
83
|
+
const envFor = async (op) => {
|
|
84
|
+
const known = envs.get(op);
|
|
85
|
+
if (known)
|
|
86
|
+
return known;
|
|
87
|
+
try {
|
|
88
|
+
const { ops } = await discoverOps({ cwd: projectPath });
|
|
89
|
+
for (const discovered of ops.values())
|
|
90
|
+
noteEnv(discovered.config);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Not a checkout — nothing to scan; fall through to the default env.
|
|
94
|
+
}
|
|
95
|
+
return envs.get(op) ?? DEFAULT_RUN_ENV;
|
|
96
|
+
};
|
|
97
|
+
/** This op's ledger history, oldest first. Empty when there is no ledger to read. */
|
|
98
|
+
const ledgerFor = async (op, env) => {
|
|
99
|
+
try {
|
|
100
|
+
const { records } = await readRunLedger(env ?? (await envFor(op)), op, { cwd: projectPath });
|
|
101
|
+
return records;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
name: "local",
|
|
109
|
+
async start(op, startOpts) {
|
|
110
|
+
// The project's configured lexicons decide which cloud appliers to load
|
|
111
|
+
// (aws -> floci, gcp -> gcpApply, azure -> az group). Best-effort: an
|
|
112
|
+
// unreadable config just yields the base activities.
|
|
113
|
+
let lexicons = [];
|
|
114
|
+
try {
|
|
115
|
+
lexicons = lexiconNames((await loadChantConfig(projectPath)).config.lexicons ?? []);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// No/invalid chant.config — base activities only.
|
|
119
|
+
}
|
|
120
|
+
const [activities, profiles] = await Promise.all([loadActivities(lexicons), loadProfiles()]);
|
|
121
|
+
// A caller that names the run (#3539: `chant acp` on fountain passes the
|
|
122
|
+
// conversation id) gets its id on the record; otherwise one is minted.
|
|
123
|
+
const runId = startOpts.runId ?? `local-${Date.now()}`;
|
|
124
|
+
const startedAt = new Date().toISOString();
|
|
125
|
+
noteEnv(op);
|
|
126
|
+
const settled = (async () => {
|
|
127
|
+
try {
|
|
128
|
+
const result = await runOpLocally(op, activities, profiles, startOpts.signal, {
|
|
129
|
+
runId,
|
|
130
|
+
// #2522: `--env` reaches the activities through the run context.
|
|
131
|
+
...(startOpts.env !== undefined ? { env: startOpts.env } : {}),
|
|
132
|
+
// The run's outcome is a durable fact (#2118): the executor
|
|
133
|
+
// appends it here, at the one seam every local run passes
|
|
134
|
+
// through, rather than in the CLI handler above it.
|
|
135
|
+
ledger: { cwd: projectPath },
|
|
136
|
+
// #2301: the run-ledger append goes through the same
|
|
137
|
+
// `chant/lifecycle` write as the gate does, so it dies for the
|
|
138
|
+
// same reasons — and this runtime declared no sink for it, so
|
|
139
|
+
// the failure was caught by `settle` and dropped on the floor.
|
|
140
|
+
// A run whose outcome never reached the ledger says so now;
|
|
141
|
+
// `chant run status` and `chant run log` will not have it.
|
|
142
|
+
onLedgerError: (err) => process.stderr.write(`warning: run "${runId}" of "${op.name}" finished, but its record could not be ` +
|
|
143
|
+
`appended to the run ledger: ${err instanceof Error ? err.message : String(err)}\n`),
|
|
144
|
+
...(startOpts.progress ? { onRecord: startOpts.progress } : {}),
|
|
145
|
+
...(startOpts.work ? { work: startOpts.work } : {}),
|
|
146
|
+
onWorkLeaseWarning: (message) => process.stderr.write(`warning: "${op.name}" could not renew its work lease, retrying at the next beat: ${message}\n`),
|
|
147
|
+
});
|
|
148
|
+
const status = statusFrom(op.name, runId, startedAt, result);
|
|
149
|
+
record(status);
|
|
150
|
+
return status;
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
if (err instanceof OpRunFailure) {
|
|
154
|
+
const status = statusFrom(op.name, runId, startedAt, err.result);
|
|
155
|
+
record(status);
|
|
156
|
+
return status;
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
})();
|
|
161
|
+
return { op: op.name, runId, result: () => settled };
|
|
162
|
+
},
|
|
163
|
+
async status(op) {
|
|
164
|
+
const newest = (await ledgerFor(op)).at(-1);
|
|
165
|
+
if (newest)
|
|
166
|
+
return statusFromRecord(newest);
|
|
167
|
+
const history = runs.get(op);
|
|
168
|
+
return history?.[history.length - 1];
|
|
169
|
+
},
|
|
170
|
+
async log(op, logOpts) {
|
|
171
|
+
const history = (await ledgerFor(op)).reverse();
|
|
172
|
+
return logOpts?.limit === undefined ? history : history.slice(0, logOpts.limit);
|
|
173
|
+
},
|
|
174
|
+
async list(ops) {
|
|
175
|
+
const out = new Map();
|
|
176
|
+
for (const op of ops) {
|
|
177
|
+
const newest = (await ledgerFor(op.name, noteEnv(op))).at(-1);
|
|
178
|
+
if (newest) {
|
|
179
|
+
out.set(op.name, statusFromRecord(newest));
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const history = runs.get(op.name);
|
|
183
|
+
out.set(op.name, history?.[history.length - 1]);
|
|
184
|
+
}
|
|
185
|
+
return out;
|
|
186
|
+
},
|
|
187
|
+
async cancel(op) {
|
|
188
|
+
throw new Error(`the local runtime runs "${op}" in the foreground — there is no detached run to cancel. ` +
|
|
189
|
+
`Press Ctrl-C in the terminal running it, or pass --on <lexicon> for a hosted run.`);
|
|
190
|
+
},
|
|
191
|
+
runComponents(path, selector, options) {
|
|
192
|
+
return runComponents(path, selector, options);
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|