@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,801 @@
|
|
|
1
|
+
import { OpResource } from "./resource.js";
|
|
2
|
+
import { workLeaseProblems } from "./work-lease-decl.js";
|
|
3
|
+
import { WORK_LEASE_STEP_ID } from "./types.js";
|
|
4
|
+
import { isEffectReceipt } from "../effect-receipt.js";
|
|
5
|
+
import { receiptCheckInput } from "./receipt-store.js";
|
|
6
|
+
import { gateApprovalProblems } from "./gate-approval.js";
|
|
7
|
+
import { gatePointProblems } from "./gate-point.js";
|
|
8
|
+
import { makeOutProxy, stepOutput } from "./step-output-ref.js";
|
|
9
|
+
import { isValidCronExpression, cronSyntaxMessage } from "./cron.js";
|
|
10
|
+
// ── Core builders ─────────────────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Declare a named, phased Op.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* export default Op({
|
|
17
|
+
* name: "alb-deploy",
|
|
18
|
+
* overview: "Build and deploy the ALB multi-service stack",
|
|
19
|
+
* phases: [
|
|
20
|
+
* phase("Build", [build("examples/gitlab-aws-alb-infra")], { parallel: true }),
|
|
21
|
+
* phase("Deploy", [kubectlApply("dist/alb-infra.yaml")]),
|
|
22
|
+
* ],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* A `schedule` may be supplied for an Op that runs on a cadence (#2120); its
|
|
27
|
+
* cron is validated here, at construction, so a typo fails on `chant build`
|
|
28
|
+
* rather than becoming a schedule that silently never fires.
|
|
29
|
+
*/
|
|
30
|
+
export function Op(config) {
|
|
31
|
+
if (config.schedule && !isValidCronExpression(config.schedule.cron)) {
|
|
32
|
+
throw new Error(`Op "${config.name}": ${cronSyntaxMessage(config.schedule.cron)}`);
|
|
33
|
+
}
|
|
34
|
+
// #2748: a work lease declared badly, or a change to the checkout with none,
|
|
35
|
+
// fails on `chant build` rather than on the first run.
|
|
36
|
+
const leaseProblems = workLeaseProblems(config);
|
|
37
|
+
if (leaseProblems.length > 0)
|
|
38
|
+
throw new Error(leaseProblems.join("\n"));
|
|
39
|
+
return new OpResource(config);
|
|
40
|
+
}
|
|
41
|
+
/** Define a named execution phase containing one or more steps. */
|
|
42
|
+
export function phase(name, steps, opts) {
|
|
43
|
+
return { name, steps, ...(opts?.parallel ? { parallel: true } : {}) };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reference a pre-built or custom activity by function name.
|
|
47
|
+
*
|
|
48
|
+
* The third argument is a profile string (unchanged) or, to name the step
|
|
49
|
+
* so a later step can reference its output (#1290), an options object:
|
|
50
|
+
* `activity("lifecycleDiff", { env: "prod" }, { id: "diff" })`. Named or
|
|
51
|
+
* not, the result carries `.out` — `diff.out.driftedStacks` builds a
|
|
52
|
+
* reference to this step's declared return value; see `stepOutput()` in
|
|
53
|
+
* `@intentius/chant/op` for the equivalent on a step authored as a plain
|
|
54
|
+
* object literal instead of via this builder.
|
|
55
|
+
*/
|
|
56
|
+
export function activity(fn, args, opts) {
|
|
57
|
+
const profile = typeof opts === "string" ? opts : opts?.profile;
|
|
58
|
+
const id = typeof opts === "string" ? undefined : opts?.id;
|
|
59
|
+
const timeout = typeof opts === "string" ? undefined : opts?.timeout;
|
|
60
|
+
const step = {
|
|
61
|
+
kind: "activity",
|
|
62
|
+
fn,
|
|
63
|
+
...(args && Object.keys(args).length > 0 ? { args } : {}),
|
|
64
|
+
...(profile ? { profile } : {}),
|
|
65
|
+
...(id ? { id } : {}),
|
|
66
|
+
...(timeout !== undefined ? { timeout } : {}),
|
|
67
|
+
};
|
|
68
|
+
Object.defineProperty(step, "out", {
|
|
69
|
+
enumerable: false,
|
|
70
|
+
get() {
|
|
71
|
+
if (!step.id) {
|
|
72
|
+
throw new Error(`activity(${JSON.stringify(fn)}, ...).out: this step has no id — pass one via ` +
|
|
73
|
+
`activity(fn, args, { id: "..." }) before referencing its output.`);
|
|
74
|
+
}
|
|
75
|
+
return makeOutProxy(step.id);
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
return step;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Insert a human gate. A gate is a fact on the gate ledger, not a wait: a run
|
|
82
|
+
* that reaches this step with no resolution newer than its pending fact
|
|
83
|
+
* records the pending fact and ends `gated`. `chant approve <op> <gate>`
|
|
84
|
+
* writes the resolution, and the next run walks through carrying the approver.
|
|
85
|
+
*
|
|
86
|
+
* Pass `plan` to bind the approval to a specific plan (#2300) — normally the
|
|
87
|
+
* Plan phase's own digest, `plan.out.planDigest`. Then a resolution counts
|
|
88
|
+
* only for that plan, and a run whose fresh plan differs is refused by name
|
|
89
|
+
* instead of applying a change nobody approved. See {@link GateStep.plan}.
|
|
90
|
+
*
|
|
91
|
+
* Pass `approval` to require a quorum of human approvers, or to evaluate a
|
|
92
|
+
* policy for each approval (#2508). See {@link GateStep.approval}.
|
|
93
|
+
*
|
|
94
|
+
* Pass `point` to have the gate ask a declared decision point instead
|
|
95
|
+
* (#3170): `gate("apply", { plan: plan.out.digest, point: "prod-apply" })`.
|
|
96
|
+
* The point's deciders and quorum decide, `chant workspace points answer`
|
|
97
|
+
* answers an open question, and the run passes on the answer. See
|
|
98
|
+
* {@link GateStep.point}.
|
|
99
|
+
*/
|
|
100
|
+
export function gate(name, opts) {
|
|
101
|
+
if (opts?.approval !== undefined) {
|
|
102
|
+
const problems = gateApprovalProblems(opts.approval);
|
|
103
|
+
if (problems.length > 0)
|
|
104
|
+
throw new Error(`gate(${JSON.stringify(name)}): ${problems[0]}`);
|
|
105
|
+
}
|
|
106
|
+
if (opts?.point !== undefined) {
|
|
107
|
+
const problems = gatePointProblems(opts.point, opts.approval !== undefined);
|
|
108
|
+
if (problems.length > 0)
|
|
109
|
+
throw new Error(`gate(${JSON.stringify(name)}): ${problems[0]}`);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
kind: "gate",
|
|
113
|
+
gate: name,
|
|
114
|
+
...(opts?.timeout ? { timeout: opts.timeout } : {}),
|
|
115
|
+
...(opts?.description ? { description: opts.description } : {}),
|
|
116
|
+
...(opts?.plan !== undefined ? { plan: opts.plan } : {}),
|
|
117
|
+
...(opts?.approval !== undefined ? { approval: opts.approval } : {}),
|
|
118
|
+
...(opts?.point !== undefined ? { point: opts.point } : {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Wrap nested steps in read-compare-run-write over an effect receipt (#1834,
|
|
123
|
+
* epic #1703). At run: read the live receipt through the receipt store,
|
|
124
|
+
* compare it against the resolved expectation, and on a match skip the nested
|
|
125
|
+
* steps ("effect already applied"). On a mismatch the nested steps run in
|
|
126
|
+
* authored order, and ONLY when every one of them succeeds is the receipt
|
|
127
|
+
* written — last, once. This step is the sole writer of a receipt (decision
|
|
128
|
+
* 3); a nested-step failure leaves the receipt untouched (stale), so the next
|
|
129
|
+
* run re-proposes the effect.
|
|
130
|
+
*
|
|
131
|
+
* `receipt` is the typed EffectReceipt declaration — import the const from
|
|
132
|
+
* your receipts module. There is no string form: a receipt named by string
|
|
133
|
+
* would sever the step from the declaration that lint, plan, and the lexicon
|
|
134
|
+
* row all key on.
|
|
135
|
+
*
|
|
136
|
+
* A gate authored inside `steps` is reached only when the effect will fire
|
|
137
|
+
* (the matched path never reaches it). The receipt-store activities
|
|
138
|
+
* (`receiptRead`, `receiptWrite`) are provided by the receipt row's lexicon
|
|
139
|
+
* (#1835 aws, #2074 k8s), or in a sql-only project by the sql lexicon's
|
|
140
|
+
* store on the database server (#3657).
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* import { seededReceipt } from "./receipts";
|
|
145
|
+
* phase("Seed", [
|
|
146
|
+
* effect(seededReceipt, [
|
|
147
|
+
* shell("npm run db:seed"),
|
|
148
|
+
* ]),
|
|
149
|
+
* ]),
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export function effect(receipt, steps, opts) {
|
|
153
|
+
if (!isEffectReceipt(receipt)) {
|
|
154
|
+
throw new Error("effect(): `receipt` must be the EffectReceipt declaration itself — import the const; there is no string form");
|
|
155
|
+
}
|
|
156
|
+
for (const step of steps) {
|
|
157
|
+
if (step.kind === "effect") {
|
|
158
|
+
throw new Error(`effect("${receipt.name}"): effect steps do not nest — one receipt witnesses one effect`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const { receipt: ref, expectation } = receiptCheckInput(receipt);
|
|
162
|
+
return {
|
|
163
|
+
kind: "effect",
|
|
164
|
+
receipt: ref,
|
|
165
|
+
...(expectation !== undefined ? { expectation } : {}),
|
|
166
|
+
steps,
|
|
167
|
+
...(opts?.description ? { description: opts.description } : {}),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// ── Pre-built activity shortcuts ──────────────────────────────────────────────
|
|
171
|
+
/**
|
|
172
|
+
* Pull an optional `profile` override out of an opts bag, returning the
|
|
173
|
+
* remaining keys (which become activity args) separately.
|
|
174
|
+
*
|
|
175
|
+
* Without this, a `profile` passed in opts would spread into the activity's
|
|
176
|
+
* **args** rather than set the step's `profile` — a silent no-op on the step's
|
|
177
|
+
* timeout. The activity then runs under the default profile, so a step the
|
|
178
|
+
* author tagged `longInfra` (20m) would still get the 5m default. Routing it
|
|
179
|
+
* here lets every shortcut accept a `profile` override that actually takes.
|
|
180
|
+
*/
|
|
181
|
+
function takeProfile(opts) {
|
|
182
|
+
if (!opts)
|
|
183
|
+
return { args: {} };
|
|
184
|
+
const { profile, ...args } = opts;
|
|
185
|
+
return { args, profile };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* {@link takeProfile}'s sibling for the typed, lexicon-owned step-builder
|
|
189
|
+
* wrappers added in chant #1288 Stage 2 (e.g. `kubectlApply` in
|
|
190
|
+
* `@intentius/chant-lexicon-k8s`): also pulls `id` out of the opts bag so it
|
|
191
|
+
* routes to the step's `id` field (enabling `.out` — #1290) instead of
|
|
192
|
+
* leaking into the activity's args, the same way `profile` would without
|
|
193
|
+
* this split.
|
|
194
|
+
*/
|
|
195
|
+
export function takeProfileAndId(opts) {
|
|
196
|
+
if (!opts)
|
|
197
|
+
return { args: {} };
|
|
198
|
+
const { profile, id, ...args } = opts;
|
|
199
|
+
return { args, profile, id };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Run an npm build script in the given project directory. `opts` is
|
|
203
|
+
* {@link ChantBuildArgs} itself, minus the positional `path` — `script`
|
|
204
|
+
* selects the npm script (default `build`, e.g. `build:aws`), `env` adds
|
|
205
|
+
* env vars.
|
|
206
|
+
*/
|
|
207
|
+
export const build = (path, opts) => {
|
|
208
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
209
|
+
return activity("chantBuild", { path, ...args }, { ...(profile ? { profile } : {}), ...(id ? { id } : {}) });
|
|
210
|
+
};
|
|
211
|
+
/** Run `kubectl apply -f <manifest>`. Defaults to the `longInfra` profile (override via `opts.profile`). */
|
|
212
|
+
export const kubectlApply = (manifest, opts) => {
|
|
213
|
+
const { args, profile } = takeProfile(opts);
|
|
214
|
+
return activity("kubectlApply", { manifest, ...args }, profile ?? "longInfra");
|
|
215
|
+
};
|
|
216
|
+
/** Run `helm upgrade --install`. Defaults to the `longInfra` profile (override via `opts.profile`). */
|
|
217
|
+
export const helmInstall = (name, chart, opts) => {
|
|
218
|
+
const { args, profile } = takeProfile(opts);
|
|
219
|
+
return activity("helmInstall", { name, chart, ...args }, profile ?? "longInfra");
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Deploy a recorded pinned render by its `sha256:` content digest (chant
|
|
223
|
+
* #1242): the helm lexicon's `helmInstall` activity loads the render from
|
|
224
|
+
* the render store, verifies the digest, and installs those exact bytes as
|
|
225
|
+
* a structure-preserving wrapper chart — no deploy-time render. Defaults to
|
|
226
|
+
* the `longInfra` profile (override via `opts.profile`).
|
|
227
|
+
*/
|
|
228
|
+
export const helmInstallPinned = (name, contentDigest, opts) => {
|
|
229
|
+
const { args, profile } = takeProfile(opts);
|
|
230
|
+
return activity("helmInstall", { name, contentDigest, ...args }, profile ?? "longInfra");
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* Poll until a Kubernetes Deployment/StatefulSet is fully rolled out. `opts` is
|
|
234
|
+
* {@link WaitForStackArgs} itself, minus the positional `name`. Defaults to the
|
|
235
|
+
* `k8sWait` profile (override via `opts.profile`).
|
|
236
|
+
*/
|
|
237
|
+
export const waitForStack = (name, opts) => {
|
|
238
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
239
|
+
return activity("waitForStack", { name, ...args }, { profile: profile ?? "k8sWait", ...(id ? { id } : {}) });
|
|
240
|
+
};
|
|
241
|
+
/** Poll any operator-backed Kubernetes resource until it reports ready, driven by a data-only readiness spec (CRD-aware; #365). Defaults to the `k8sWait` profile (override via `opts.profile`). */
|
|
242
|
+
export const waitForReady = (kind, name, opts) => {
|
|
243
|
+
const { args, profile } = takeProfile(opts);
|
|
244
|
+
return activity("waitForReady", { kind, name, ...args }, profile ?? "k8sWait");
|
|
245
|
+
};
|
|
246
|
+
/** Trigger and wait for a GitLab CI pipeline to complete. Defaults to the `longInfra` profile (override via `opts.profile`). */
|
|
247
|
+
export const gitlabPipeline = (name, opts) => {
|
|
248
|
+
const { args, profile } = takeProfile(opts);
|
|
249
|
+
return activity("gitlabPipeline", { name, ...args }, profile ?? "longInfra");
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* Take a chant lifecycle snapshot for the given environment.
|
|
253
|
+
* {@link LifecycleSnapshotArgs} has only `env`, which is positional here, so
|
|
254
|
+
* `opts` carries nothing but the step's `id` (for `.out`).
|
|
255
|
+
*/
|
|
256
|
+
export const lifecycleSnapshot = (env, opts) => activity("lifecycleSnapshot", { env }, opts?.id ? { id: opts.id } : undefined);
|
|
257
|
+
/**
|
|
258
|
+
* Run an arbitrary shell command.
|
|
259
|
+
*
|
|
260
|
+
* Defaults to the `atMostOnce` profile: twenty minutes, one attempt (#2411).
|
|
261
|
+
* This is the one activity chant cannot know is idempotent, because its
|
|
262
|
+
* purpose is to run something chant does not model, so a failed command is
|
|
263
|
+
* not repeated unless the author says it may be. Name `fastIdempotent` or
|
|
264
|
+
* `longInfra` to get retries back for a command that is safe to repeat.
|
|
265
|
+
*
|
|
266
|
+
* Give the step an `id` and later steps can read what it produced —
|
|
267
|
+
* `sh.out.stdout`, `sh.out.stderr`, `sh.out.exitCode` (#2413) — and a value
|
|
268
|
+
* from an earlier step reaches the command through `env` (#2414):
|
|
269
|
+
*
|
|
270
|
+
* ```ts
|
|
271
|
+
* const host = shell("terraform output -raw host", { id: "host" });
|
|
272
|
+
* shell("./smoke.sh", { env: { HOST: host.out.stdout } });
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* With `json: true`, stdout is parsed as JSON and published as `json`
|
|
276
|
+
* (#2787), so a list or an object reaches the next step or the Op's work
|
|
277
|
+
* lease as itself. A pick step that prints `["W-3","W-7"]` hands
|
|
278
|
+
* `workLease.item` its candidates:
|
|
279
|
+
*
|
|
280
|
+
* ```ts
|
|
281
|
+
* const pick = shell("node pick.mjs", { id: "pick", json: true });
|
|
282
|
+
* Op({ workLease: { item: pick.out.json }, ... });
|
|
283
|
+
* ```
|
|
284
|
+
*
|
|
285
|
+
* `timeout` sets how long the one attempt may run, in place of the profile's
|
|
286
|
+
* twenty minutes, and keeps the profile's retries: `shell("./build.sh", {
|
|
287
|
+
* timeout: "45m" })`. At most six hours (`MAX_STEP_TIMEOUT`).
|
|
288
|
+
*
|
|
289
|
+
* `cmd` stays a plain `string` and takes no references. A value spliced into
|
|
290
|
+
* a command line is a quoting decision chant would then be making on the
|
|
291
|
+
* author's behalf, and `env` carries the same value into the same command
|
|
292
|
+
* with the shell's own rules intact.
|
|
293
|
+
*/
|
|
294
|
+
export const shell = (cmd, opts) => {
|
|
295
|
+
const { timeout, ...rest } = (opts ?? {});
|
|
296
|
+
const { args, profile, id } = takeProfileAndId(rest);
|
|
297
|
+
return activity("shellCmd", { cmd, ...args }, { profile: profile ?? "atMostOnce", ...(id ? { id } : {}), ...(timeout !== undefined ? { timeout } : {}) });
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* Archive one directory of HEAD as a release artifact (#2782): a tar written by
|
|
301
|
+
* `git archive`, named by its sha256, the same bytes for the same commit.
|
|
302
|
+
* Defaults to the `fastIdempotent` profile.
|
|
303
|
+
*
|
|
304
|
+
* ```ts
|
|
305
|
+
* const archive = sourceArchive("../app", { id: "archive" });
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
export const sourceArchive = (path, opts) => {
|
|
309
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
310
|
+
return activity("sourceArchive", { path, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
311
|
+
};
|
|
312
|
+
/**
|
|
313
|
+
* Plan a release (#2782): a JSON object named by the sha256 of its canonical
|
|
314
|
+
* form, which the ship gate binds to (`gate("ship", { plan: plan.out.digest })`)
|
|
315
|
+
* and the release ledger records. Defaults to the `fastIdempotent` profile.
|
|
316
|
+
*/
|
|
317
|
+
export const releasePlan = (args) => {
|
|
318
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
319
|
+
return activity("releasePlan", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Join members' change-set parts into one document (#3181). Its `digest` is
|
|
323
|
+
* what a combined run's gate binds: `gate("approve", { plan:
|
|
324
|
+
* changeSet.out.digest })`. Defaults to the `fastIdempotent` profile.
|
|
325
|
+
*/
|
|
326
|
+
export const composeChangeSet = (args) => {
|
|
327
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
328
|
+
return activity("composeChangeSet", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
329
|
+
};
|
|
330
|
+
/** A chant member's change-set part, from `chant lifecycle plan <env> --json` (#3181). Its `part` feeds {@link composeChangeSet}. */
|
|
331
|
+
export const lifecyclePlanChangeSet = (args) => {
|
|
332
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
333
|
+
return activity("lifecyclePlanChangeSet", rest, { profile: profile ?? "longInfra", ...(id ? { id } : {}) });
|
|
334
|
+
};
|
|
335
|
+
/** A member's change-set part from a plan file a chant or warden run wrote (#3181). Its `part` feeds {@link composeChangeSet}. */
|
|
336
|
+
export const readChangeSetPart = (args) => {
|
|
337
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
338
|
+
return activity("readChangeSetPart", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
339
|
+
};
|
|
340
|
+
/**
|
|
341
|
+
* Record a release in the release ledger with its plan (#2782, ws-055), once:
|
|
342
|
+
* a retry whose release the ledger already names records nothing. Defaults to
|
|
343
|
+
* the `fastIdempotent` profile.
|
|
344
|
+
*/
|
|
345
|
+
export const releaseRecord = (args) => {
|
|
346
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
347
|
+
return activity("releaseRecord", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
348
|
+
};
|
|
349
|
+
/**
|
|
350
|
+
* Ask a decision point and record its answer (ws-058, #2740): the `decide`
|
|
351
|
+
* activity, core's since #2828. `opts` is the activity's own
|
|
352
|
+
* {@link DecideArgs}, minus the positional `point`, so the builder and the
|
|
353
|
+
* activity cannot drift. Defaults to the `fastIdempotent` profile: asking
|
|
354
|
+
* again with the same point, declaration and inputs returns the record
|
|
355
|
+
* already written. An open question stops the run `waiting`.
|
|
356
|
+
*
|
|
357
|
+
* ```ts
|
|
358
|
+
* decide("slice-tier", { read: { "work-item": "W-002" }, subject: "W-002" })
|
|
359
|
+
* ```
|
|
360
|
+
*/
|
|
361
|
+
export const decide = (point, opts) => {
|
|
362
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
363
|
+
return activity("decide", { point, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Plan a rollback of a source release (#2800): the release the site served
|
|
367
|
+
* before the latest one (or `to`), its plan read back from the ledger, and its
|
|
368
|
+
* source tree archived again from its commit and refused unless it hashes to
|
|
369
|
+
* the digest that plan recorded. Writes a rollback plan named by its own
|
|
370
|
+
* sha256, which the rollback gate binds to (`gate("rollback", { plan:
|
|
371
|
+
* plan.out.digest })`). Defaults to the `fastIdempotent` profile.
|
|
372
|
+
*/
|
|
373
|
+
export const releaseRollbackPlan = (args) => {
|
|
374
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
375
|
+
return activity("releaseRollbackPlan", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* Record a rollback in the release ledger (#2800): the restored release's
|
|
379
|
+
* digest and commit, `restores` naming that release, the actor and the gate's
|
|
380
|
+
* approver, once. Defaults to the `fastIdempotent` profile.
|
|
381
|
+
*/
|
|
382
|
+
export const releaseRollbackRecord = (args) => {
|
|
383
|
+
const { args: rest, profile, id } = takeProfileAndId(args);
|
|
384
|
+
return activity("releaseRollbackRecord", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
385
|
+
};
|
|
386
|
+
/**
|
|
387
|
+
* Ensure a `generated-once` secret exists in the target store (#1829, epic
|
|
388
|
+
* #1365). The op-step surface over the same engine as the `ensure-secret`
|
|
389
|
+
* capability verb (`ensureSecretMaterialization`, core's
|
|
390
|
+
* secret-materialization module): read-then-write — if the secret exists, its
|
|
391
|
+
* declared key-set and any declared `metadata` are verified and the step
|
|
392
|
+
* stops (present means done); if absent, one value per key is minted at
|
|
393
|
+
* apply time and written straight to the store. Never mints over an existing
|
|
394
|
+
* value, never rotates implicitly; a mismatch fails the step loudly, naming
|
|
395
|
+
* key names and metadata keys — never values. No output of the activity
|
|
396
|
+
* carries secret material. The backing activity is provided by the store's
|
|
397
|
+
* lexicon (k8s, #1830).
|
|
398
|
+
*/
|
|
399
|
+
export const ensureSecret = (name, keys, opts) => {
|
|
400
|
+
const { args, profile } = takeProfile(opts);
|
|
401
|
+
return activity("ensureSecret", { name, keys, ...args }, profile);
|
|
402
|
+
};
|
|
403
|
+
/**
|
|
404
|
+
* Run `chant teardown` in the given project directory. Fixed `longInfra`
|
|
405
|
+
* profile (not overridable). {@link ChantTeardownArgs} has only `path`
|
|
406
|
+
* (positional), so `opts` is just the step's `id` (for `.out`).
|
|
407
|
+
*/
|
|
408
|
+
export const teardown = (path, opts) => activity("chantTeardown", { path }, { profile: "longInfra", ...(opts?.id ? { id: opts.id } : {}) });
|
|
409
|
+
/**
|
|
410
|
+
* Tear down one environment's marker-owned resources — the durable form of
|
|
411
|
+
* `chant lifecycle teardown <env> --yes` (#1222). The activity runs core's
|
|
412
|
+
* teardown engine in-process: enumerate by ownership marker (this project's
|
|
413
|
+
* `ownership.stack` + `env`), delete through each lexicon's `executeTeardown`
|
|
414
|
+
* capability, retry failures once, and fail the step when any candidate is
|
|
415
|
+
* still failed. Distinct from {@link teardown}, which runs a project's own
|
|
416
|
+
* `npm run teardown` script.
|
|
417
|
+
*
|
|
418
|
+
* The CLI's guards apply unchanged, and a production-like environment name
|
|
419
|
+
* needs `confirmProd: true` in `opts` — the authored counterpart of
|
|
420
|
+
* `--confirm-prod`, since an Op never prompts. An ordinary {@link gate} step
|
|
421
|
+
* placed before this one composes as usual (steps run in authored order), so
|
|
422
|
+
* a human approval can precede the deletion:
|
|
423
|
+
*
|
|
424
|
+
* ```ts
|
|
425
|
+
* phase("Teardown", [
|
|
426
|
+
* gate("approve-teardown", { description: "Release the staging teardown" }),
|
|
427
|
+
* envTeardown("staging"),
|
|
428
|
+
* ]),
|
|
429
|
+
* ```
|
|
430
|
+
*
|
|
431
|
+
* `opts` also accepts `path` (the chant project directory, default the chant
|
|
432
|
+
* process's cwd). Defaults to the `longInfra` profile (override via
|
|
433
|
+
* `opts.profile`).
|
|
434
|
+
*/
|
|
435
|
+
export const envTeardown = (env, opts) => {
|
|
436
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
437
|
+
return activity("envTeardown", { env, ...args }, { profile: profile ?? "longInfra", ...(id ? { id } : {}) });
|
|
438
|
+
};
|
|
439
|
+
/**
|
|
440
|
+
* Create a local k3d cluster (vanilla Kubernetes in Docker). Idempotent: skips
|
|
441
|
+
* creation if a cluster of the same name already exists. Defaults to the
|
|
442
|
+
* `longInfra` profile (creating a cluster may pull the k3s image); override via
|
|
443
|
+
* `opts.profile`.
|
|
444
|
+
*
|
|
445
|
+
* The implementation lives in the k3d lexicon (chant #1410) — the project's
|
|
446
|
+
* `chant.config.ts` must list `"k3d"` in `lexicons` for the activity to load.
|
|
447
|
+
* Unlike the upstream CLI, the activity leaves the caller's default kubeconfig
|
|
448
|
+
* and current context alone by default (chant #1411); pass
|
|
449
|
+
* `updateDefaultKubeconfig: true` / `switchCurrentContext: true` to opt back
|
|
450
|
+
* in. It resolves `{ context, kubeconfigPath? }` for reaching the cluster.
|
|
451
|
+
*
|
|
452
|
+
* `opts` accepts `servers`, `agents`, `image`, `ports` (e.g.
|
|
453
|
+
* `["8080:80@loadbalancer"]`), `registryCreate`, `configFile`, `timeout`,
|
|
454
|
+
* `updateDefaultKubeconfig`, and `switchCurrentContext`.
|
|
455
|
+
*/
|
|
456
|
+
export const k3dUp = (name, opts) => {
|
|
457
|
+
const { args, profile } = takeProfile(opts);
|
|
458
|
+
return activity("k3dUp", { name, ...args }, profile ?? "longInfra");
|
|
459
|
+
};
|
|
460
|
+
/**
|
|
461
|
+
* Delete a local k3d cluster. Defaults to the `fastIdempotent` profile
|
|
462
|
+
* (override via `opts.profile`). Implementation lives in the k3d lexicon
|
|
463
|
+
* (chant #1410) — requires `"k3d"` in the project's `lexicons`.
|
|
464
|
+
*/
|
|
465
|
+
export const k3dDown = (name, opts) => {
|
|
466
|
+
const { args, profile } = takeProfile(opts);
|
|
467
|
+
return activity("k3dDown", { name, ...args }, profile ?? "fastIdempotent");
|
|
468
|
+
};
|
|
469
|
+
/**
|
|
470
|
+
* Run the pinned k3s installer against a reachable host (`role`: `"server"`
|
|
471
|
+
* or `"agent"`). Idempotent on an already-installed matching version.
|
|
472
|
+
* Defaults to the `longInfra` profile (the installer downloads and starts
|
|
473
|
+
* the binary); override via `opts.profile`.
|
|
474
|
+
*
|
|
475
|
+
* The implementation lives in the k3s lexicon (chant #1601) — the project's
|
|
476
|
+
* `chant.config.ts` must list `"k3s"` in `lexicons` for the activity to load.
|
|
477
|
+
* Bounded exactly as `k3dUp`/`k3dDown` (chant #1410): drives the reachable-host
|
|
478
|
+
* case only, no host provisioning, no SSH orchestration.
|
|
479
|
+
*
|
|
480
|
+
* `opts` accepts `configFile` (required — path to the chant-emitted
|
|
481
|
+
* config.yaml, passed as `--config`), `version` (overrides the lexicon's
|
|
482
|
+
* pinned `INSTALL_K3S_VERSION`), and `tokenFile` (path to a file holding the
|
|
483
|
+
* join token, passed to the installer as `K3S_TOKEN_FILE`). There is no
|
|
484
|
+
* `token` option — the join secret's value never travels through this step;
|
|
485
|
+
* only a file path does (the #1601 token boundary, same stance as #1365).
|
|
486
|
+
*/
|
|
487
|
+
export const k3sInstall = (role, opts) => {
|
|
488
|
+
const { args, profile } = takeProfile(opts);
|
|
489
|
+
return activity("k3sInstall", { role, ...args }, profile ?? "longInfra");
|
|
490
|
+
};
|
|
491
|
+
/**
|
|
492
|
+
* Uninstall k3s from a reachable host (`role`: `"server"` or `"agent"`).
|
|
493
|
+
* Defaults to the `fastIdempotent` profile (override via `opts.profile`).
|
|
494
|
+
* Implementation lives in the k3s lexicon (chant #1601) — requires `"k3s"`
|
|
495
|
+
* in the project's `lexicons`. A host where k3s was never installed is a
|
|
496
|
+
* no-op success, the same shape as `k3dDown` against an already-gone
|
|
497
|
+
* cluster.
|
|
498
|
+
*/
|
|
499
|
+
export const k3sUninstall = (role, opts) => {
|
|
500
|
+
const { args, profile } = takeProfile(opts);
|
|
501
|
+
return activity("k3sUninstall", { role, ...args }, profile ?? "fastIdempotent");
|
|
502
|
+
};
|
|
503
|
+
/**
|
|
504
|
+
* Boot a local Floci AWS emulator in Docker and point subsequent steps at it —
|
|
505
|
+
* sets `AWS_ENDPOINT_URL` + test creds in the process env so a following
|
|
506
|
+
* `cloudformation` apply targets the emulator (local executor). Idempotent:
|
|
507
|
+
* reuses a running container of the same name. Defaults to the `longInfra`
|
|
508
|
+
* profile (the image may pull); override via `opts.profile`.
|
|
509
|
+
*
|
|
510
|
+
* `opts` accepts `name`, `port`, `image`, `dockerSocket` (mount the docker
|
|
511
|
+
* socket for the ECR backing registry), `region`, `readyService`, `timeoutMs`.
|
|
512
|
+
*/
|
|
513
|
+
export const flociUp = (opts) => {
|
|
514
|
+
const { args, profile } = takeProfile(opts);
|
|
515
|
+
return activity("flociUp", args, profile ?? "longInfra");
|
|
516
|
+
};
|
|
517
|
+
/** Stop and remove the local Floci emulator container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
|
|
518
|
+
export const flociDown = (opts) => {
|
|
519
|
+
const { args, profile } = takeProfile(opts);
|
|
520
|
+
return activity("flociDown", args, profile ?? "fastIdempotent");
|
|
521
|
+
};
|
|
522
|
+
/**
|
|
523
|
+
* Boot a local floci-az (Azure emulator) and return its ARM `endpoint` — the
|
|
524
|
+
* typed twin of {@link flociUp} for `azApply`, so the emulator lifecycle is a
|
|
525
|
+
* modeled step, not a `docker run` shell. Provided by the azure lexicon; loaded
|
|
526
|
+
* when the project lists `azure`. Idempotent; defaults to the `longInfra`
|
|
527
|
+
* profile. `opts` accepts `name`, `port`, `image`, `timeoutMs`, `intervalMs`.
|
|
528
|
+
*/
|
|
529
|
+
export const flociAzUp = (opts) => {
|
|
530
|
+
const { args, profile } = takeProfile(opts);
|
|
531
|
+
return activity("flociAzUp", args, profile ?? "longInfra");
|
|
532
|
+
};
|
|
533
|
+
/** Stop and remove the local floci-az container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
|
|
534
|
+
export const flociAzDown = (opts) => {
|
|
535
|
+
const { args, profile } = takeProfile(opts);
|
|
536
|
+
return activity("flociAzDown", args, profile ?? "fastIdempotent");
|
|
537
|
+
};
|
|
538
|
+
/**
|
|
539
|
+
* Boot a local floci-gcp (GCP emulator) and return its `endpoint` — the typed
|
|
540
|
+
* twin of {@link flociUp} for `gcpApply`, so the emulator lifecycle is a modeled
|
|
541
|
+
* step, not a `docker run` shell. Provided by the gcp lexicon; loaded when the
|
|
542
|
+
* project lists `gcp`. Idempotent; defaults to the `longInfra` profile. `opts`
|
|
543
|
+
* accepts `name`, `port`, `image`, `timeoutMs`, `intervalMs`.
|
|
544
|
+
*/
|
|
545
|
+
export const flociGcpUp = (opts) => {
|
|
546
|
+
const { args, profile } = takeProfile(opts);
|
|
547
|
+
return activity("flociGcpUp", args, profile ?? "longInfra");
|
|
548
|
+
};
|
|
549
|
+
/** Stop and remove the local floci-gcp container. Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
|
|
550
|
+
export const flociGcpDown = (opts) => {
|
|
551
|
+
const { args, profile } = takeProfile(opts);
|
|
552
|
+
return activity("flociGcpDown", args, profile ?? "fastIdempotent");
|
|
553
|
+
};
|
|
554
|
+
/**
|
|
555
|
+
* Assert an HTTP endpoint responds as expected — a typed verify step replacing
|
|
556
|
+
* `shell("curl -fs ...")`. Fails the phase if the status/body doesn't match.
|
|
557
|
+
* Defaults to the `fastIdempotent` profile. `opts` accepts `method`, `status`
|
|
558
|
+
* (default any 2xx), `contains` (body substring), `retries`, `intervalMs`.
|
|
559
|
+
*/
|
|
560
|
+
export const httpCheck = (url, opts) => {
|
|
561
|
+
const { args, profile, id } = takeProfileAndId(opts);
|
|
562
|
+
return activity("httpCheck", { url, ...args }, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
563
|
+
};
|
|
564
|
+
/**
|
|
565
|
+
* Ensure an Azure resource group exists before an ARM apply. `az deployment
|
|
566
|
+
* group create` (the `arm` apply target) fails without its group, so place this
|
|
567
|
+
* before the deploy phase. Idempotent. Defaults to the `fastIdempotent` profile
|
|
568
|
+
* (override via `opts.profile`). `opts` accepts `location` (default `eastus`).
|
|
569
|
+
*/
|
|
570
|
+
export const azGroupEnsure = (resourceGroup, opts) => {
|
|
571
|
+
const { args, profile } = takeProfile(opts);
|
|
572
|
+
return activity("azGroupEnsure", { resourceGroup, ...args }, profile ?? "fastIdempotent");
|
|
573
|
+
};
|
|
574
|
+
/** Delete an Azure resource group and its contents (non-blocking). Defaults to the `fastIdempotent` profile (override via `opts.profile`). */
|
|
575
|
+
export const azGroupDelete = (resourceGroup, opts) => {
|
|
576
|
+
const { args, profile } = takeProfile(opts);
|
|
577
|
+
return activity("azGroupDelete", { resourceGroup, ...args }, profile ?? "fastIdempotent");
|
|
578
|
+
};
|
|
579
|
+
/**
|
|
580
|
+
* Apply chant's built ARM template directly to the ARM resource API — the Azure
|
|
581
|
+
* twin of {@link gcpApply}. Targets floci-az's resource CRUD (which `az deployment`
|
|
582
|
+
* can't, floci-az having no deployments provider) or real Azure by endpoint
|
|
583
|
+
* override; ensures the resource group first. Defaults to the `longInfra` profile.
|
|
584
|
+
*
|
|
585
|
+
* `opts` requires `resourceGroup`; accepts `location`, `endpoint` (floci-az
|
|
586
|
+
* `http://localhost:4577`), `subscriptionId`, and `prune` (owned-only prune of
|
|
587
|
+
* chant-managed resources no longer in the template — destructive, off by default).
|
|
588
|
+
*/
|
|
589
|
+
export const azApply = (templatePath, opts) => {
|
|
590
|
+
const { args, profile } = takeProfile(opts);
|
|
591
|
+
return activity("azApply", { templatePath, ...args }, profile ?? "longInfra");
|
|
592
|
+
};
|
|
593
|
+
/** Delete the Azure (ARM) resources in a built template — the inverse of {@link azApply}. Defaults to the `longInfra` profile (override via `opts.profile`). `opts` requires `resourceGroup`. */
|
|
594
|
+
export const azDelete = (templatePath, opts) => {
|
|
595
|
+
const { args, profile } = takeProfile(opts);
|
|
596
|
+
return activity("azDelete", { templatePath, ...args }, profile ?? "longInfra");
|
|
597
|
+
};
|
|
598
|
+
/**
|
|
599
|
+
* Deploy a built CloudFormation template by calling the CloudFormation API
|
|
600
|
+
* directly (create-or-update + poll) — the direct twin of {@link azApply} /
|
|
601
|
+
* {@link gcpApply} for AWS, targeting a local Floci emulator or real AWS by
|
|
602
|
+
* endpoint override. Speaks the CFN API over HTTP rather than shelling `aws` —
|
|
603
|
+
* `nativeApply({ target: "cloudformation" })` routes here too (#1449). Provided by
|
|
604
|
+
* the aws lexicon; loaded when the project lists `aws`. Defaults to the
|
|
605
|
+
* `longInfra` profile. `opts` requires `stackName`; accepts `endpoint`, `region`,
|
|
606
|
+
* `capabilities`, `timeoutMs`, `intervalMs`.
|
|
607
|
+
*/
|
|
608
|
+
export const awsApply = (templatePath, opts) => {
|
|
609
|
+
const { args, profile } = takeProfile(opts);
|
|
610
|
+
return activity("awsApply", { templatePath, ...args }, profile ?? "longInfra");
|
|
611
|
+
};
|
|
612
|
+
/** Delete a CloudFormation stack — the inverse of {@link awsApply}. Defaults to the `longInfra` profile (override via `opts.profile`). `opts` requires `stackName`. */
|
|
613
|
+
export const awsDelete = (templatePath, opts) => {
|
|
614
|
+
const { args, profile } = takeProfile(opts);
|
|
615
|
+
return activity("awsDelete", { templatePath, ...args }, profile ?? "longInfra");
|
|
616
|
+
};
|
|
617
|
+
/**
|
|
618
|
+
* Apply chant's built GCP (CNRM) resources directly to their GCP REST APIs,
|
|
619
|
+
* targeting a local floci-gcp emulator or real GCP by endpoint override — the
|
|
620
|
+
* native GCP applier (#706 starter #711). `nativeApply({ target: "gcp" })`
|
|
621
|
+
* routes here too (#1449). Defaults to the `longInfra` profile (override via
|
|
622
|
+
* `opts.profile`).
|
|
623
|
+
*
|
|
624
|
+
* `opts` accepts `endpoint` (default `GCP_ENDPOINT_URL` env / each kind's
|
|
625
|
+
* real-GCP host) and `project` (default `GOOGLE_CLOUD_PROJECT` env / the CNRM
|
|
626
|
+
* project-id annotation).
|
|
627
|
+
*/
|
|
628
|
+
export const gcpApply = (manifestPath, opts) => {
|
|
629
|
+
const { args, profile } = takeProfile(opts);
|
|
630
|
+
return activity("gcpApply", { manifestPath, ...args }, profile ?? "longInfra");
|
|
631
|
+
};
|
|
632
|
+
/** Delete the GCP (CNRM) resources in a built manifest — the inverse of {@link gcpApply}. Defaults to the `longInfra` profile (override via `opts.profile`). */
|
|
633
|
+
export const gcpDelete = (manifestPath, opts) => {
|
|
634
|
+
const { args, profile } = takeProfile(opts);
|
|
635
|
+
return activity("gcpDelete", { manifestPath, ...args }, profile ?? "longInfra");
|
|
636
|
+
};
|
|
637
|
+
// ── Sprites (#762) — imperative, checkpointable sandbox steps ──────────────────
|
|
638
|
+
//
|
|
639
|
+
// The builder and the executor-side activity function share a name (e.g.
|
|
640
|
+
// `spriteCreate`), and that is intentional: the builder here returns an
|
|
641
|
+
// `activity("spriteCreate", ...)` step; `loadActivities` loads the function of
|
|
642
|
+
// the same name from the fly lexicon to run the HTTP. They live in
|
|
643
|
+
// different modules and are both exported — exactly how `flapsUp`/`flapsDown`
|
|
644
|
+
// already work. Op files import these builders; the executor resolves the
|
|
645
|
+
// function by name. Endpoint override + bearer are read by the activity from
|
|
646
|
+
// `SPRITES_BASE_URL` / `SPRITES_API_TOKEN` (or an explicit `endpoint` arg).
|
|
647
|
+
/** Create a sprite with a caller-chosen `name` (used as its id). Defaults to the `longInfra` profile (override via `profile`). */
|
|
648
|
+
export const spriteCreate = (args) => {
|
|
649
|
+
const { profile, ...rest } = args;
|
|
650
|
+
return activity("spriteCreate", rest, profile ?? "longInfra");
|
|
651
|
+
};
|
|
652
|
+
/** Run a command in a sprite; a non-zero exit fails the step. Defaults to the `longInfra` profile (override via `profile`). */
|
|
653
|
+
export const spriteExec = (args) => {
|
|
654
|
+
const { profile, ...rest } = args;
|
|
655
|
+
return activity("spriteExec", rest, profile ?? "longInfra");
|
|
656
|
+
};
|
|
657
|
+
/** Checkpoint a sprite under a caller-chosen `comment` (the transactional boundary). Defaults to the `longInfra` profile (override via `profile`). */
|
|
658
|
+
export const spriteCheckpoint = (args) => {
|
|
659
|
+
const { profile, ...rest } = args;
|
|
660
|
+
return activity("spriteCheckpoint", rest, profile ?? "longInfra");
|
|
661
|
+
};
|
|
662
|
+
/**
|
|
663
|
+
* Restore a sprite — the checkpoint-as-compensation step (S5). Target an
|
|
664
|
+
* explicit `checkpoint` id, or the newest checkpoint carrying `comment`, or (with
|
|
665
|
+
* neither) the newest checkpoint overall. Defaults to the `longInfra` profile
|
|
666
|
+
* (override via `profile`).
|
|
667
|
+
*/
|
|
668
|
+
export const spriteRestore = (args) => {
|
|
669
|
+
const { profile, ...rest } = args;
|
|
670
|
+
return activity("spriteRestore", rest, profile ?? "longInfra");
|
|
671
|
+
};
|
|
672
|
+
/** List a sprite's checkpoints (`[{ id, comment, create_time, is_auto }]`). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
673
|
+
export const listCheckpoints = (args) => {
|
|
674
|
+
const { profile, ...rest } = args;
|
|
675
|
+
return activity("listCheckpoints", rest, profile ?? "fastIdempotent");
|
|
676
|
+
};
|
|
677
|
+
/** Destroy a sprite (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
678
|
+
export const spriteDestroy = (args) => {
|
|
679
|
+
const { profile, ...rest } = args;
|
|
680
|
+
return activity("spriteDestroy", rest, profile ?? "fastIdempotent");
|
|
681
|
+
};
|
|
682
|
+
// ── Sprite filesystem steps (#848) — stage inputs / read results without exec ──
|
|
683
|
+
//
|
|
684
|
+
// Same builder/activity split as the lifecycle steps above: these author
|
|
685
|
+
// `activity("spriteWriteFile", ...)` steps; `loadActivities(["fly"])` binds them
|
|
686
|
+
// to the implementations in fly's `op/activities/sprite-fs.ts`. All default to
|
|
687
|
+
// `fastIdempotent` — write/remove converge on the same end state under retry.
|
|
688
|
+
/** Write a file into a sprite. Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
689
|
+
export const spriteWriteFile = (args) => {
|
|
690
|
+
const { profile, ...rest } = args;
|
|
691
|
+
return activity("spriteWriteFile", rest, profile ?? "fastIdempotent");
|
|
692
|
+
};
|
|
693
|
+
/** Read a file from a sprite (returns `{ content }`). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
694
|
+
export const spriteReadFile = (args) => {
|
|
695
|
+
const { profile, ...rest } = args;
|
|
696
|
+
return activity("spriteReadFile", rest, profile ?? "fastIdempotent");
|
|
697
|
+
};
|
|
698
|
+
/** List a directory in a sprite (returns `[{ name, type, size? }]`). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
699
|
+
export const spriteListDir = (args) => {
|
|
700
|
+
const { profile, ...rest } = args;
|
|
701
|
+
return activity("spriteListDir", rest, profile ?? "fastIdempotent");
|
|
702
|
+
};
|
|
703
|
+
/** Remove a path in a sprite (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
704
|
+
export const spriteRemove = (args) => {
|
|
705
|
+
const { profile, ...rest } = args;
|
|
706
|
+
return activity("spriteRemove", rest, profile ?? "fastIdempotent");
|
|
707
|
+
};
|
|
708
|
+
// ── Sprite config reconcile steps (#849) — desired-state on a live Sprite ──────
|
|
709
|
+
//
|
|
710
|
+
// Apply-activities, not a declarable resource: `spriteApplyNetworkPolicy`
|
|
711
|
+
// whole-object-replaces the outbound policy; `spriteApplyServices` create-or-
|
|
712
|
+
// updates each desired background service (optionally starting them in
|
|
713
|
+
// dependency order). Validation runs pure before any HTTP. `loadActivities(["fly"])`
|
|
714
|
+
// binds the impls in fly's `op/activities/sprite-config.ts`.
|
|
715
|
+
/** Reconcile a sprite's outbound network policy (whole-object replace). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
716
|
+
export const spriteApplyNetworkPolicy = (args) => {
|
|
717
|
+
const { profile, ...rest } = args;
|
|
718
|
+
return activity("spriteApplyNetworkPolicy", rest, profile ?? "fastIdempotent");
|
|
719
|
+
};
|
|
720
|
+
/**
|
|
721
|
+
* Reconcile a sprite's background services (create-or-update, optionally
|
|
722
|
+
* start). With an `id`, through the Sprites API and its `services`; without
|
|
723
|
+
* one, inside the sprite through sprite-env, applying the box block's
|
|
724
|
+
* services (`box: true`, #2880): `only` names some of them, `start` starts
|
|
725
|
+
* the applied ones that are not running, `restart` restarts the converged
|
|
726
|
+
* ones. Defaults to the `fastIdempotent` profile (override via `profile`).
|
|
727
|
+
*/
|
|
728
|
+
export const spriteApplyServices = (args) => {
|
|
729
|
+
const { profile, ...rest } = args;
|
|
730
|
+
return activity("spriteApplyServices", rest, profile ?? "fastIdempotent");
|
|
731
|
+
};
|
|
732
|
+
// ── Sprite keep-alive Task steps (#847) — hold a Sprite active for a session ──
|
|
733
|
+
//
|
|
734
|
+
// A hold stops the Sprite pausing while a session runs; release frees it. A
|
|
735
|
+
// session that can outlast the 1-hour task cap refreshes in its own loop.
|
|
736
|
+
// `loadActivities(["fly"])` binds the impls in fly's `op/activities/sprite-tasks.ts`.
|
|
737
|
+
/** Create a keep-alive task holding the sprite active. Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
738
|
+
export const spriteTaskCreate = (args) => {
|
|
739
|
+
const { profile, ...rest } = args;
|
|
740
|
+
return activity("spriteTaskCreate", rest, profile ?? "fastIdempotent");
|
|
741
|
+
};
|
|
742
|
+
/** Refresh a keep-alive task's expiry. Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
743
|
+
export const spriteTaskRefresh = (args) => {
|
|
744
|
+
const { profile, ...rest } = args;
|
|
745
|
+
return activity("spriteTaskRefresh", rest, profile ?? "fastIdempotent");
|
|
746
|
+
};
|
|
747
|
+
/** Release a keep-alive task (idempotent). Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
748
|
+
export const spriteTaskRelease = (args) => {
|
|
749
|
+
const { profile, ...rest } = args;
|
|
750
|
+
return activity("spriteTaskRelease", rest, profile ?? "fastIdempotent");
|
|
751
|
+
};
|
|
752
|
+
/**
|
|
753
|
+
* Boot a local spritzer (Fly Sprites API emulator) in Docker — the typed twin of
|
|
754
|
+
* `flociGcpUp` for Sprites. Resolves to the `spritesUp` activity. Defaults to the
|
|
755
|
+
* `longInfra` profile (the image may pull); override via `profile`.
|
|
756
|
+
*/
|
|
757
|
+
export const spritesUp = (args = {}) => {
|
|
758
|
+
const { profile, ...rest } = args;
|
|
759
|
+
return activity("spritesUp", rest, profile ?? "longInfra");
|
|
760
|
+
};
|
|
761
|
+
/** Stop and remove the local spritzer container. Resolves to the `spritesDown` activity. Defaults to the `fastIdempotent` profile (override via `profile`). */
|
|
762
|
+
export const spritesDown = (args = {}) => {
|
|
763
|
+
const { profile, ...rest } = args;
|
|
764
|
+
return activity("spritesDown", rest, profile ?? "fastIdempotent");
|
|
765
|
+
};
|
|
766
|
+
/**
|
|
767
|
+
* Gate an apply on organizational policy: build the project and run its
|
|
768
|
+
* `lint.policies` over the resolved resources, failing the step on any
|
|
769
|
+
* violation so no later phase runs. Place it before the apply phase. `env` (or `ownership.env`) lets a
|
|
770
|
+
* policy branch on environment. Single-attempt (`policyCheck` profile) — a
|
|
771
|
+
* deterministic violation is not retried.
|
|
772
|
+
*/
|
|
773
|
+
export const policyGate = (opts) => {
|
|
774
|
+
const path = opts?.path ?? ".";
|
|
775
|
+
const env = opts?.env;
|
|
776
|
+
return activity("policyGate", { path, ...(env !== undefined ? { env } : {}) }, { profile: "policyCheck", ...(opts?.id ? { id: opts.id } : {}) });
|
|
777
|
+
};
|
|
778
|
+
/**
|
|
779
|
+
* Attach evidence to an acceptance criterion of the work item the run holds
|
|
780
|
+
* the lease on (#2772), for an Op that declares `workLease`. The run's lease
|
|
781
|
+
* is passed for it, so the write happens only while the lease is still the
|
|
782
|
+
* run's. `opts` takes the `result` (pass or fail), a `title`, and a `url` or a
|
|
783
|
+
* workspace `path` to pin by hash. A `manual` criterion is refused: the run
|
|
784
|
+
* is the item's implementer. The `atMostOnce` profile: each attempt appends.
|
|
785
|
+
*/
|
|
786
|
+
export const workEvidence = (criterion, opts) => {
|
|
787
|
+
const { id, ...rest } = opts;
|
|
788
|
+
return activity("workEvidence", { criterion, lease: stepOutput(WORK_LEASE_STEP_ID), ...rest }, { profile: "atMostOnce", ...(id ? { id } : {}) });
|
|
789
|
+
};
|
|
790
|
+
/**
|
|
791
|
+
* Run an external CloudFormation Guard rules pack against the project's built
|
|
792
|
+
* CloudFormation template (chant #522). `opts` is {@link GuardValidateArgs}
|
|
793
|
+
* itself, minus the positional `rules`; `template` defaults (inside the
|
|
794
|
+
* activity) to `<path>/template.json`. Fixed `policyCheck` profile — same
|
|
795
|
+
* reasoning as {@link policyGate}: a deterministic policy check is
|
|
796
|
+
* single-attempt — and not overridable.
|
|
797
|
+
*/
|
|
798
|
+
export const guardValidate = (rules, opts) => {
|
|
799
|
+
const { id, ...rest } = (opts ?? {});
|
|
800
|
+
return activity("guardValidate", { rules, ...rest }, { profile: "policyCheck", ...(id ? { id } : {}) });
|
|
801
|
+
};
|