@intentius/chant 0.57.0 → 0.58.0
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/dist/audit/catalog.d.ts +51 -1
- package/dist/audit/catalog.d.ts.map +1 -1
- package/dist/audit/core.d.ts +20 -1
- package/dist/audit/core.d.ts.map +1 -1
- package/dist/audit/discover.d.ts +14 -8
- package/dist/audit/discover.d.ts.map +1 -1
- package/dist/audit/lineage.d.ts +10 -0
- package/dist/audit/lineage.d.ts.map +1 -0
- package/dist/audit/prior-art.d.ts +385 -0
- package/dist/audit/prior-art.d.ts.map +1 -0
- package/dist/audit/proof.d.ts +16 -0
- package/dist/audit/proof.d.ts.map +1 -1
- package/dist/audit/report-html.d.ts.map +1 -1
- package/dist/audit/report-model.d.ts +8 -1
- package/dist/audit/report-model.d.ts.map +1 -1
- package/dist/audit/report.d.ts.map +1 -1
- package/dist/audit/rules-doc.d.ts +3 -0
- package/dist/audit/rules-doc.d.ts.map +1 -1
- package/dist/audit/secrets.d.ts +15 -0
- package/dist/audit/secrets.d.ts.map +1 -1
- package/dist/audit/terraform-state.d.ts +46 -0
- package/dist/audit/terraform-state.d.ts.map +1 -0
- package/dist/build.d.ts +17 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/claimed-fields.d.ts +161 -0
- package/dist/claimed-fields.d.ts.map +1 -0
- package/dist/cli/build-params-cli.d.ts +2 -2
- package/dist/cli/command-group.d.ts +14 -0
- package/dist/cli/command-group.d.ts.map +1 -1
- package/dist/cli/commands/audit.d.ts +17 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-docs.d.ts +1 -1
- package/dist/cli/commands/check-lexicon-examples.d.ts +16 -6
- package/dist/cli/commands/check-lexicon-examples.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/codegen.d.ts +1 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/project.d.ts +7 -0
- package/dist/cli/commands/init-lexicon/templates/project.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/onboard.d.ts +2 -0
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/operator.d.ts +82 -16
- package/dist/cli/handlers/operator.d.ts.map +1 -1
- package/dist/cli/handlers/run.d.ts +49 -42
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/main.d.ts +28 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/mcp/op-tools.d.ts +16 -1
- package/dist/cli/mcp/op-tools.d.ts.map +1 -1
- package/dist/cli/mcp/resource-handlers.d.ts.map +1 -1
- package/dist/cli/mcp/resources/context.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +26 -9
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/codegen/generate-post-synth-barrel.d.ts +1 -1
- package/dist/components/auto-release.d.ts +10 -20
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/capability.d.ts +4 -4
- package/dist/components/cli-support.d.ts +20 -21
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/component.d.ts +3 -3
- package/dist/components/component.d.ts.map +1 -1
- package/dist/components/driver-output.d.ts.map +1 -1
- package/dist/components/driver.d.ts +66 -36
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/manifest-persistence.d.ts +1 -9
- package/dist/components/manifest-persistence.d.ts.map +1 -1
- package/dist/components/run-progress.d.ts +6 -6
- package/dist/components/run-progress.d.ts.map +1 -1
- package/dist/components/verbs/run-agent.d.ts +9 -15
- package/dist/components/verbs/run-agent.d.ts.map +1 -1
- package/dist/components/verbs/verify.d.ts +2 -2
- package/dist/deep-observation.d.ts +17 -0
- package/dist/deep-observation.d.ts.map +1 -1
- package/dist/discovery/files.d.ts +4 -4
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/param-deps.d.ts +33 -0
- package/dist/discovery/param-deps.d.ts.map +1 -1
- package/dist/discovery/sandbox/bundle.d.ts.map +1 -1
- package/dist/discovery/sandbox/config-wire.d.ts +2 -2
- package/dist/fold/foldable-helpers.d.ts +5 -1
- package/dist/fold/foldable-helpers.d.ts.map +1 -1
- package/dist/fold-provenance.d.ts +236 -0
- package/dist/fold-provenance.d.ts.map +1 -0
- package/dist/graph-ops.d.ts +1 -1
- package/dist/held-elsewhere.d.ts +85 -0
- package/dist/held-elsewhere.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/kubectl-context.d.ts +3 -3
- package/dist/lexicon-config.d.ts +4 -4
- package/dist/lexicon-plugin-helpers.d.ts +1 -1
- package/dist/lexicon.d.ts +104 -14
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/change-set.d.ts +13 -0
- package/dist/lifecycle/change-set.d.ts.map +1 -1
- package/dist/lifecycle/deep-diff.d.ts +133 -6
- package/dist/lifecycle/deep-diff.d.ts.map +1 -1
- package/dist/lifecycle/deep-observe.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +71 -3
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/index.d.ts +1 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.d.ts +2 -2
- package/dist/lifecycle/run-ledger.d.ts +53 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -0
- package/dist/lifecycle/symptoms.d.ts +3 -3
- package/dist/lifecycle/symptoms.d.ts.map +1 -1
- package/dist/lint/config.d.ts +81 -2
- package/dist/lint/config.d.ts.map +1 -1
- package/dist/lint/post-synth.d.ts +55 -2
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.d.ts +1 -1
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.d.ts.map +1 -1
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.d.ts +1 -1
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.d.ts.map +1 -1
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.d.ts +44 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.d.ts.map +1 -0
- package/dist/lint/rules/comp/index.d.ts +1 -1
- package/dist/lint/rules/comp/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.d.ts +16 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -0
- package/dist/lint/rules/op/ops012-activity-contract.d.ts +27 -0
- package/dist/lint/rules/op/ops012-activity-contract.d.ts.map +1 -0
- package/dist/lint/rules/op/ops013-step-output-ref.d.ts +61 -0
- package/dist/lint/rules/op/ops013-step-output-ref.d.ts.map +1 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.d.ts +55 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.d.ts.map +1 -0
- package/dist/lint/rules/op/support.d.ts +12 -0
- package/dist/lint/rules/op/support.d.ts.map +1 -0
- package/dist/lint/suppressions.d.ts +108 -0
- package/dist/lint/suppressions.d.ts.map +1 -0
- package/dist/live-endpoint.d.ts +1 -1
- package/dist/op/activities/activity-contracts.d.ts +54 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -0
- package/dist/op/activities/apply.d.ts +262 -0
- package/dist/op/activities/apply.d.ts.map +1 -0
- package/dist/op/activities/build.d.ts +13 -0
- package/dist/op/activities/build.d.ts.map +1 -0
- package/dist/op/activities/converge.d.ts +110 -0
- package/dist/op/activities/converge.d.ts.map +1 -0
- package/dist/op/activities/env-teardown.d.ts +76 -0
- package/dist/op/activities/env-teardown.d.ts.map +1 -0
- package/dist/op/activities/guard-validate.d.ts +64 -0
- package/dist/op/activities/guard-validate.d.ts.map +1 -0
- package/dist/op/activities/http-check.d.ts +34 -0
- package/dist/op/activities/http-check.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +31 -0
- package/dist/op/activities/index.d.ts.map +1 -0
- package/dist/op/activities/lexicon-upgrade.d.ts +182 -0
- package/dist/op/activities/lexicon-upgrade.d.ts.map +1 -0
- package/dist/op/activities/lifecycle.d.ts +42 -0
- package/dist/op/activities/lifecycle.d.ts.map +1 -0
- package/dist/op/activities/pipeline-audit.d.ts +84 -0
- package/dist/op/activities/pipeline-audit.d.ts.map +1 -0
- package/dist/op/activities/policy.d.ts +17 -0
- package/dist/op/activities/policy.d.ts.map +1 -0
- package/dist/op/activities/reconcile.d.ts +89 -0
- package/dist/op/activities/reconcile.d.ts.map +1 -0
- package/dist/op/activities/shell.d.ts +13 -0
- package/dist/op/activities/shell.d.ts.map +1 -0
- package/dist/op/activities/teardown.d.ts +10 -0
- package/dist/op/activities/teardown.d.ts.map +1 -0
- package/dist/op/activities/util.d.ts +7 -0
- package/dist/op/activities/util.d.ts.map +1 -0
- package/dist/op/activities/wait.d.ts +28 -0
- package/dist/op/activities/wait.d.ts.map +1 -0
- package/dist/op/activities/workflow-audit.d.ts +92 -0
- package/dist/op/activities/workflow-audit.d.ts.map +1 -0
- package/dist/op/activity-contract-registry.d.ts +76 -0
- package/dist/op/activity-contract-registry.d.ts.map +1 -0
- package/dist/op/activity-contract.d.ts +25 -18
- package/dist/op/activity-contract.d.ts.map +1 -1
- package/dist/op/activity-failure.d.ts +28 -0
- package/dist/op/activity-failure.d.ts.map +1 -0
- package/dist/op/activity-profiles.d.ts +118 -0
- package/dist/op/activity-profiles.d.ts.map +1 -0
- package/dist/op/activity-registry.d.ts +22 -38
- package/dist/op/activity-registry.d.ts.map +1 -1
- package/dist/op/activity-runtime.d.ts +3 -14
- package/dist/op/activity-runtime.d.ts.map +1 -1
- package/dist/op/builders.d.ts +84 -29
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/composites/apply-op.d.ts +113 -0
- package/dist/op/composites/apply-op.d.ts.map +1 -0
- package/dist/op/composites/converge-op.d.ts +120 -0
- package/dist/op/composites/converge-op.d.ts.map +1 -0
- package/dist/op/composites/index.d.ts +26 -0
- package/dist/op/composites/index.d.ts.map +1 -0
- package/dist/op/composites/lexicon-upgrade-op.d.ts +78 -0
- package/dist/op/composites/lexicon-upgrade-op.d.ts.map +1 -0
- package/dist/op/composites/pipeline-audit-op.d.ts +50 -0
- package/dist/op/composites/pipeline-audit-op.d.ts.map +1 -0
- package/dist/op/composites/reconcile-op.d.ts +57 -0
- package/dist/op/composites/reconcile-op.d.ts.map +1 -0
- package/dist/op/composites/watch-op.d.ts +60 -0
- package/dist/op/composites/watch-op.d.ts.map +1 -0
- package/dist/op/composites/workflow-audit-op.d.ts +57 -0
- package/dist/op/composites/workflow-audit-op.d.ts.map +1 -0
- package/dist/op/converge-rule.d.ts +12 -10
- package/dist/op/converge-rule.d.ts.map +1 -1
- package/dist/op/cron.d.ts +51 -0
- package/dist/op/cron.d.ts.map +1 -0
- package/dist/op/discover.d.ts +9 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/duration.d.ts +11 -0
- package/dist/op/duration.d.ts.map +1 -0
- package/dist/op/emulator-lifecycle.d.ts.map +1 -1
- package/dist/op/gate.d.ts +90 -0
- package/dist/op/gate.d.ts.map +1 -0
- package/dist/op/generate-pipeline.d.ts +9 -0
- package/dist/op/generate-pipeline.d.ts.map +1 -1
- package/dist/op/index.d.ts +23 -7
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/local-executor.d.ts +114 -28
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-output.d.ts +11 -1
- package/dist/op/local-output.d.ts.map +1 -1
- package/dist/op/op-ir.d.ts +184 -0
- package/dist/op/op-ir.d.ts.map +1 -0
- package/dist/op/op-verb-class.d.ts +10 -2
- package/dist/op/op-verb-class.d.ts.map +1 -1
- package/dist/op/operator.d.ts +30 -5
- package/dist/op/operator.d.ts.map +1 -1
- package/dist/op/receipt-store.d.ts +1 -1
- package/dist/op/receipt-store.d.ts.map +1 -1
- package/dist/op/resource.d.ts +15 -1
- package/dist/op/resource.d.ts.map +1 -1
- package/dist/op/runtime.d.ts +200 -0
- package/dist/op/runtime.d.ts.map +1 -0
- package/dist/op/runtimes/local.d.ts +29 -0
- package/dist/op/runtimes/local.d.ts.map +1 -0
- package/dist/op/step-output-ref.d.ts +15 -13
- package/dist/op/step-output-ref.d.ts.map +1 -1
- package/dist/op/types.d.ts +79 -27
- package/dist/op/types.d.ts.map +1 -1
- package/dist/ownership.d.ts +1 -1
- package/dist/provenance.d.ts +21 -0
- package/dist/provenance.d.ts.map +1 -1
- package/dist/serializer-walker.d.ts.map +1 -1
- package/package.json +6 -1
- package/src/audit/catalog.test.ts +79 -3
- package/src/audit/catalog.ts +111 -13
- package/src/audit/core.test.ts +26 -0
- package/src/audit/core.ts +61 -17
- package/src/audit/discover.test.ts +39 -0
- package/src/audit/discover.ts +91 -15
- package/src/audit/lineage.ts +100 -0
- package/src/audit/prior-art.ts +153 -0
- package/src/audit/proof.test.ts +67 -0
- package/src/audit/proof.ts +70 -0
- package/src/audit/report-html.ts +9 -4
- package/src/audit/report-model.ts +16 -2
- package/src/audit/report.test.ts +33 -0
- package/src/audit/report.ts +5 -3
- package/src/audit/rules-doc.test.ts +34 -2
- package/src/audit/rules-doc.ts +82 -9
- package/src/audit/secrets.ts +15 -3
- package/src/audit/terraform-state.test.ts +144 -0
- package/src/audit/terraform-state.ts +131 -0
- package/src/build.ts +31 -1
- package/src/claimed-fields.test.ts +145 -0
- package/src/claimed-fields.ts +208 -0
- package/src/cli/build-params-cli.ts +2 -2
- package/src/cli/command-group.ts +14 -0
- package/src/cli/commands/__fixtures__/audit-terraform/infra/.terraform/providers/lock.txt +1 -0
- package/src/cli/commands/__fixtures__/audit-terraform/infra/main.tf +1 -0
- package/src/cli/commands/__fixtures__/audit-terraform/infra/modules/foo/main.tf +1 -0
- package/src/cli/commands/__fixtures__/audit-terraform/infra/variables.tf +3 -0
- package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +13 -4
- package/src/cli/commands/__fixtures__/init-lexicon-output/src/codegen/docs-cli.ts +4 -0
- package/src/cli/commands/__fixtures__/init-lexicon-output/src/codegen/package.ts +1 -0
- package/src/cli/commands/__fixtures__/init-lexicon-output/src/package-cli.ts +21 -0
- package/src/cli/commands/__snapshots__/init-lexicon.test.ts.snap +1 -0
- package/src/cli/commands/audit.test.ts +189 -11
- package/src/cli/commands/audit.ts +73 -27
- package/src/cli/commands/build.test.ts +292 -9
- package/src/cli/commands/build.ts +156 -24
- package/src/cli/commands/check-lexicon-docs.ts +1 -1
- package/src/cli/commands/check-lexicon-examples.test.ts +29 -1
- package/src/cli/commands/check-lexicon-examples.ts +42 -10
- package/src/cli/commands/init-lexicon/templates/codegen.ts +9 -0
- package/src/cli/commands/init-lexicon/templates/project.ts +44 -4
- package/src/cli/commands/init-lexicon.test.ts +97 -2
- package/src/cli/commands/init-lexicon.ts +4 -2
- package/src/cli/commands/init.test.ts +35 -1
- package/src/cli/commands/init.ts +14 -3
- package/src/cli/commands/lint.test.ts +48 -0
- package/src/cli/commands/lint.ts +123 -0
- package/src/cli/commands/onboard.test.ts +75 -0
- package/src/cli/commands/onboard.ts +54 -23
- package/src/cli/handlers/build.test.ts +81 -1
- package/src/cli/handlers/build.ts +15 -1
- package/src/cli/handlers/graph.test.ts +3 -3
- package/src/cli/handlers/lifecycle.test.ts +195 -12
- package/src/cli/handlers/lifecycle.ts +123 -6
- package/src/cli/handlers/misc.ts +1 -1
- package/src/cli/handlers/operator.test.ts +183 -11
- package/src/cli/handlers/operator.ts +260 -55
- package/src/cli/handlers/run.test.ts +431 -1287
- package/src/cli/handlers/run.ts +365 -915
- package/src/cli/main.test.ts +23 -15
- package/src/cli/main.ts +88 -33
- package/src/cli/mcp/op-tools.ts +147 -88
- package/src/cli/mcp/resource-handlers.ts +10 -37
- package/src/cli/mcp/resources/context.ts +11 -12
- package/src/cli/mcp/server.test.ts +25 -27
- package/src/cli/mcp/server.ts +2 -2
- package/src/cli/registry.ts +26 -9
- package/src/codegen/docs.ts +1 -1
- package/src/codegen/generate-post-synth-barrel.test.ts +1 -1
- package/src/codegen/generate-post-synth-barrel.ts +1 -1
- package/src/components/README.md +3 -2
- package/src/components/auto-release.test.ts +4 -20
- package/src/components/auto-release.ts +17 -42
- package/src/components/capability.ts +4 -4
- package/src/components/cli-support.test.ts +10 -5
- package/src/components/cli-support.ts +52 -44
- package/src/components/component.schema.json +2 -2
- package/src/components/component.ts +3 -3
- package/src/components/driver-output.ts +14 -2
- package/src/components/driver.test.ts +92 -22
- package/src/components/driver.ts +193 -83
- package/src/components/index.ts +1 -6
- package/src/components/manifest-persistence.test.ts +2 -20
- package/src/components/manifest-persistence.ts +4 -24
- package/src/components/pilots/pilots-lint-clean.test.ts +11 -10
- package/src/components/run-progress.ts +6 -6
- package/src/components/verbs/run-agent.ts +11 -17
- package/src/components/verbs/verify.ts +2 -2
- package/src/deep-observation.test.ts +75 -0
- package/src/deep-observation.ts +48 -0
- package/src/discovery/collect.test.ts +3 -3
- package/src/discovery/files.ts +4 -4
- package/src/discovery/fold-import.ts +105 -2
- package/src/discovery/param-deps.test.ts +112 -1
- package/src/discovery/param-deps.ts +193 -0
- package/src/discovery/sandbox/bundle.ts +15 -1
- package/src/discovery/sandbox/config-wire.test.ts +2 -2
- package/src/discovery/sandbox/config-wire.ts +2 -2
- package/src/fold/fold.test.ts +56 -0
- package/src/fold/foldable-helpers.ts +81 -1
- package/src/fold-provenance-exclusion.test.ts +186 -0
- package/src/fold-provenance.test.ts +495 -0
- package/src/fold-provenance.ts +441 -0
- package/src/graph-ops.test.ts +2 -2
- package/src/graph-ops.ts +1 -1
- package/src/held-elsewhere.test.ts +102 -0
- package/src/held-elsewhere.ts +114 -0
- package/src/index.ts +3 -0
- package/src/kubectl-context.ts +3 -3
- package/src/lexicon-config.test.ts +5 -5
- package/src/lexicon-config.ts +4 -4
- package/src/lexicon-plugin-helpers.ts +1 -1
- package/src/lexicon.ts +120 -14
- package/src/lifecycle/change-set.test.ts +49 -0
- package/src/lifecycle/change-set.ts +67 -0
- package/src/lifecycle/converge-ledger.ts +1 -1
- package/src/lifecycle/deep-diff.test.ts +267 -14
- package/src/lifecycle/deep-diff.ts +217 -14
- package/src/lifecycle/deep-observe.test.ts +3 -1
- package/src/lifecycle/deep-observe.ts +16 -6
- package/src/lifecycle/gate-ledger.test.ts +74 -2
- package/src/lifecycle/gate-ledger.ts +143 -36
- package/src/lifecycle/index.ts +1 -0
- package/src/lifecycle/release-ledger.ts +2 -2
- package/src/lifecycle/run-ledger.test.ts +268 -0
- package/src/lifecycle/run-ledger.ts +201 -0
- package/src/lifecycle/symptoms.ts +3 -3
- package/src/lint/config.test.ts +82 -1
- package/src/lint/config.ts +112 -3
- package/src/lint/policy.test.ts +1 -1
- package/src/lint/post-synth.test.ts +31 -0
- package/src/lint/post-synth.ts +54 -1
- package/src/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.ts +2 -2
- package/src/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.ts +1 -1
- package/src/lint/rules/comp/comp.test.ts +1 -1
- package/src/lint/rules/comp/comp004-gate-needs-durable-runtime.ts +74 -0
- package/src/lint/rules/comp/index.ts +3 -3
- package/src/lint/rules/op/index.ts +23 -0
- package/src/lint/rules/op/ops012-activity-contract.test.ts +161 -0
- package/src/lint/rules/op/ops012-activity-contract.ts +64 -0
- package/src/lint/rules/op/ops013-step-output-ref.test.ts +237 -0
- package/src/lint/rules/op/ops013-step-output-ref.ts +98 -0
- package/src/lint/rules/op/ops014-converge-rule-refusals.test.ts +263 -0
- package/src/lint/rules/op/ops014-converge-rule-refusals.ts +179 -0
- package/src/lint/rules/op/support.ts +11 -0
- package/src/lint/suppressions.test.ts +163 -0
- package/src/lint/suppressions.ts +204 -0
- package/src/live-endpoint.ts +1 -1
- package/src/op/activities/activity-contracts.ts +66 -0
- package/src/op/activities/apply.test.ts +567 -0
- package/src/op/activities/apply.ts +662 -0
- package/src/op/activities/build.ts +26 -0
- package/src/op/activities/converge.test.ts +330 -0
- package/src/op/activities/converge.ts +449 -0
- package/src/op/activities/env-teardown.test.ts +187 -0
- package/src/op/activities/env-teardown.ts +171 -0
- package/src/op/activities/guard-validate.test.ts +139 -0
- package/src/op/activities/guard-validate.ts +223 -0
- package/src/op/activities/http-check.test.ts +48 -0
- package/src/op/activities/http-check.ts +55 -0
- package/src/op/activities/index.ts +119 -0
- package/src/op/activities/lexicon-upgrade.test.ts +492 -0
- package/src/op/activities/lexicon-upgrade.ts +673 -0
- package/src/op/activities/lifecycle.ts +85 -0
- package/src/op/activities/pipeline-audit.test.ts +67 -0
- package/src/op/activities/pipeline-audit.ts +201 -0
- package/src/op/activities/policy.test.ts +19 -0
- package/src/op/activities/policy.ts +37 -0
- package/src/op/activities/reconcile.test.ts +81 -0
- package/src/op/activities/reconcile.ts +187 -0
- package/src/op/activities/shell.ts +26 -0
- package/src/op/activities/teardown.ts +22 -0
- package/src/op/activities/util.ts +6 -0
- package/src/op/activities/wait.ts +69 -0
- package/src/op/activities/workflow-audit.test.ts +90 -0
- package/src/op/activities/workflow-audit.ts +203 -0
- package/src/op/activity-contract-registry.test.ts +98 -0
- package/src/op/activity-contract-registry.ts +114 -0
- package/src/op/activity-contract.test.ts +1 -1
- package/src/op/activity-contract.ts +37 -33
- package/src/op/activity-failure.ts +34 -0
- package/src/op/activity-profiles.test.ts +56 -0
- package/src/op/activity-profiles.ts +116 -0
- package/src/op/activity-registry.test.ts +37 -28
- package/src/op/activity-registry.ts +27 -56
- package/src/op/activity-runtime.ts +3 -47
- package/src/op/builders-exports.test.ts +0 -49
- package/src/op/builders-typed.test.ts +164 -0
- package/src/op/builders.ts +123 -39
- package/src/op/composites/apply-op.ts +208 -0
- package/src/op/composites/composites.test.ts +366 -0
- package/src/op/composites/converge-op.test.ts +168 -0
- package/src/op/composites/converge-op.ts +214 -0
- package/src/op/composites/index.ts +26 -0
- package/src/op/composites/lexicon-upgrade-op.test.ts +68 -0
- package/src/op/composites/lexicon-upgrade-op.ts +134 -0
- package/src/op/composites/pipeline-audit-op.test.ts +25 -0
- package/src/op/composites/pipeline-audit-op.ts +78 -0
- package/src/op/composites/reconcile-op.test.ts +51 -0
- package/src/op/composites/reconcile-op.ts +107 -0
- package/src/op/composites/watch-op.ts +108 -0
- package/src/op/composites/workflow-audit-op.test.ts +25 -0
- package/src/op/composites/workflow-audit-op.ts +88 -0
- package/src/op/converge-rule.ts +12 -10
- package/src/op/cron.test.ts +128 -0
- package/src/op/cron.ts +149 -0
- package/src/op/discover-root.test.ts +105 -1
- package/src/op/discover.test.ts +6 -2
- package/src/op/discover.ts +84 -16
- package/src/op/duration.ts +21 -0
- package/src/op/effect-step.test.ts +26 -11
- package/src/op/emulator-lifecycle.ts +1 -2
- package/src/op/gate.ts +155 -0
- package/src/op/generate-pipeline.test.ts +65 -3
- package/src/op/generate-pipeline.ts +19 -2
- package/src/op/index.ts +39 -6
- package/src/op/local-executor.test.ts +163 -34
- package/src/op/local-executor.ts +370 -102
- package/src/op/local-output.test.ts +95 -11
- package/src/op/local-output.ts +33 -4
- package/src/op/op-ir.test.ts +281 -0
- package/src/op/op-ir.ts +417 -0
- package/src/op/op-verb-class.ts +19 -5
- package/src/op/op.test.ts +26 -5
- package/src/op/operator.test.ts +175 -6
- package/src/op/operator.ts +63 -16
- package/src/op/receipt-store.ts +1 -1
- package/src/op/resource.ts +20 -2
- package/src/op/runtime.ts +203 -0
- package/src/op/runtimes/local.test.ts +181 -0
- package/src/op/runtimes/local.ts +212 -0
- package/src/op/step-output-ref.ts +15 -13
- package/src/op/types.ts +84 -24
- package/src/ownership.ts +1 -1
- package/src/provenance.test.ts +6 -0
- package/src/provenance.ts +21 -1
- package/src/serializer-walker.test.ts +42 -0
- package/src/serializer-walker.ts +21 -2
- package/dist/cli/handlers/op-progress.d.ts +0 -90
- package/dist/cli/handlers/op-progress.d.ts.map +0 -1
- package/dist/cli/handlers/run-client.d.ts +0 -127
- package/dist/cli/handlers/run-client.d.ts.map +0 -1
- package/dist/cli/handlers/run-report.d.ts +0 -5
- package/dist/cli/handlers/run-report.d.ts.map +0 -1
- package/dist/components/temporal-codegen-loader.d.ts +0 -27
- package/dist/components/temporal-codegen-loader.d.ts.map +0 -1
- package/dist/lint/rules/comp/comp004-gate-needs-temporal.d.ts +0 -37
- package/dist/lint/rules/comp/comp004-gate-needs-temporal.d.ts.map +0 -1
- package/src/cli/handlers/op-progress.test.ts +0 -268
- package/src/cli/handlers/op-progress.ts +0 -248
- package/src/cli/handlers/run-client.test.ts +0 -82
- package/src/cli/handlers/run-client.ts +0 -219
- package/src/cli/handlers/run-report.test.ts +0 -62
- package/src/cli/handlers/run-report.ts +0 -122
- package/src/components/temporal-codegen-loader.ts +0 -41
- package/src/lint/rules/comp/comp004-gate-needs-temporal.ts +0 -66
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The duration-string parser the Op model uses everywhere a timeout is
|
|
3
|
+
* authored ("5m", "30s", "1h30m", "100ms"). Its own leaf module so both
|
|
4
|
+
* `./local-executor.ts` (activity start-to-close timeouts) and `./gate.ts`
|
|
5
|
+
* (a gate's pending-fact expiry) can reach it without importing each other.
|
|
6
|
+
* Re-exported from `./local-executor.ts`, which is where it lived and where
|
|
7
|
+
* every existing caller still imports it from.
|
|
8
|
+
*/
|
|
9
|
+
/** Parse a duration string ("5m", "30s", "1h30m", "100ms") to milliseconds. Throws when nothing in `s` parses as a quantity+unit. */
|
|
10
|
+
export declare function parseDuration(s: string): number;
|
|
11
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/op/duration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qIAAqI;AACrI,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emulator-lifecycle.d.ts","sourceRoot":"","sources":["../../src/op/emulator-lifecycle.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,aAAa,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,+EAA+E;IAC/E,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE;QACT,0EAA0E;QAC1E,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;AAErF,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,SAAS,GAAG,SAAS,kBAAkB,EAAE,CAGvG;AAKD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAIxE;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"emulator-lifecycle.d.ts","sourceRoot":"","sources":["../../src/op/emulator-lifecycle.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,aAAa,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,+EAA+E;IAC/E,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE;QACT,0EAA0E;QAC1E,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;AAErF,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,SAAS,GAAG,SAAS,kBAAkB,EAAE,CAGvG;AAKD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAIxE;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,CA0EvE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate-as-fact (#2119, epic #2114) — the one place that decides what happens
|
|
3
|
+
* when a run reaches a `gate`, shared by the Op executor
|
|
4
|
+
* (`./local-executor.ts`) and the component driver
|
|
5
|
+
* (`../components/driver.ts`) so the two can never drift.
|
|
6
|
+
*
|
|
7
|
+
* A gate used to be a wait, which meant a runtime that cannot wait had to
|
|
8
|
+
* refuse the whole op before its first step (`LocalGateUnsupportedError`,
|
|
9
|
+
* deleted with this). It is a fact now: the run reads the gate ledger
|
|
10
|
+
* (`../lifecycle/gate-ledger.ts`) for a resolution someone wrote with `chant
|
|
11
|
+
* approve`, and either walks through carrying the approver, or records a
|
|
12
|
+
* pending fact and ends. Nothing blocks, nothing is queued, nothing has to be
|
|
13
|
+
* resumed — the next run re-evaluates from the ledger, which is exactly the
|
|
14
|
+
* level-triggered shape a converge tick already has.
|
|
15
|
+
*
|
|
16
|
+
* The staleness rule is the same one `chant operator status` has applied since
|
|
17
|
+
* #1485: a resolution counts only if it is newer than the newest pending fact
|
|
18
|
+
* for that gate. Approving before the gate was ever reached does not
|
|
19
|
+
* pre-authorize a future run's gate that has since been recorded pending; a
|
|
20
|
+
* resolution from last month does not answer the fact this run just wrote.
|
|
21
|
+
*
|
|
22
|
+
* Ledger access goes through {@link GateLedgerPort} rather than straight to
|
|
23
|
+
* git, so a test (and the operator's own in-memory paths) can drive the
|
|
24
|
+
* decision without an orphan branch on disk.
|
|
25
|
+
*/
|
|
26
|
+
import { type GateResolutionRecord, type PendingGateInput, type PendingGateRecord } from "../lifecycle/gate-ledger.js";
|
|
27
|
+
/** The gate ledger, as the two executors need it: read both kinds of line, append a pending fact. */
|
|
28
|
+
export interface GateLedgerPort {
|
|
29
|
+
read(op: string): Promise<{
|
|
30
|
+
resolutions: GateResolutionRecord[];
|
|
31
|
+
pending: PendingGateRecord[];
|
|
32
|
+
}>;
|
|
33
|
+
appendPending(input: PendingGateInput): Promise<PendingGateRecord>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The real port: the `chant/lifecycle` orphan branch. Pushes best-effort after
|
|
37
|
+
* appending, the same two-step-collapsed-into-one shape `chant approve` uses
|
|
38
|
+
* (`../cli/handlers/operator.ts` calls `pushLifecycle().catch(...)` right after
|
|
39
|
+
* its append) — a pending fact that only ever reaches the local branch is still
|
|
40
|
+
* a correct local answer, so a missing remote never fails the run.
|
|
41
|
+
*/
|
|
42
|
+
export declare function gitGateLedgerPort(opts?: {
|
|
43
|
+
cwd?: string;
|
|
44
|
+
}): GateLedgerPort;
|
|
45
|
+
/** A gate ledger held in memory — what a test, or a caller that has already read the ledger, hands {@link evaluateGate}. */
|
|
46
|
+
export declare function memoryGateLedgerPort(seed?: {
|
|
47
|
+
resolutions?: GateResolutionRecord[];
|
|
48
|
+
pending?: PendingGateRecord[];
|
|
49
|
+
}): GateLedgerPort & {
|
|
50
|
+
appended: PendingGateRecord[];
|
|
51
|
+
};
|
|
52
|
+
/** What a caller has to say about the gate it just reached. */
|
|
53
|
+
export interface GateCheckInput {
|
|
54
|
+
/** The op the gate belongs to — the component's name, on the driver. */
|
|
55
|
+
op: string;
|
|
56
|
+
/** The gate's signal name. */
|
|
57
|
+
gate: string;
|
|
58
|
+
description?: string;
|
|
59
|
+
/** The gate's authored `timeout`, which becomes the pending fact's expiry. Default {@link DEFAULT_GATE_EXPIRY}. */
|
|
60
|
+
timeout?: string;
|
|
61
|
+
/** Identifies the run that reached the gate, when the caller has one. */
|
|
62
|
+
runId?: string;
|
|
63
|
+
/** ISO-8601 "now" — supplied by the caller, so the decision is deterministic under test. */
|
|
64
|
+
now?: string;
|
|
65
|
+
}
|
|
66
|
+
/** Either the gate is answered, or it is a standing fact. */
|
|
67
|
+
export type GateCheck = {
|
|
68
|
+
satisfied: true;
|
|
69
|
+
resolution: GateResolutionRecord;
|
|
70
|
+
} | {
|
|
71
|
+
satisfied: false;
|
|
72
|
+
pending: PendingGateRecord;
|
|
73
|
+
recorded: boolean;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Decide a gate against the ledger, recording the pending fact when it isn't
|
|
77
|
+
* answered.
|
|
78
|
+
*
|
|
79
|
+
* - A resolution newer than the newest pending fact satisfies the gate.
|
|
80
|
+
* - Otherwise, a pending fact that hasn't expired stands as it is: the run
|
|
81
|
+
* ends `gated` and the ledger is left alone, so an operator ticking every
|
|
82
|
+
* minute against an unapproved gate does not append a line a minute.
|
|
83
|
+
* - Otherwise (no pending fact, or the newest one has expired) a fresh pending
|
|
84
|
+
* fact is appended and the run ends `gated`. `recorded` says which of the
|
|
85
|
+
* two happened, so a renderer can tell "just recorded" from "still standing".
|
|
86
|
+
*/
|
|
87
|
+
export declare function evaluateGate(port: GateLedgerPort, input: GateCheckInput): Promise<GateCheck>;
|
|
88
|
+
/** The line every renderer prints to say how a pending gate is cleared. */
|
|
89
|
+
export declare function approveCommand(op: string, gate: string): string;
|
|
90
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/op/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAQL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAIlC,qGAAqG;AACrG,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;QAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC,CAAC;IACjG,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAYzE;AAED,4HAA4H;AAC5H,wBAAgB,oBAAoB,CAClC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAAO,GACjF,cAAc,GAAG;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAgBpD;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GACjB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,oBAAoB,CAAA;CAAE,GACrD;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAKxE;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBlG;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
|
@@ -15,7 +15,16 @@
|
|
|
15
15
|
* separately scheduled cron triggers — so this does not call
|
|
16
16
|
* `resolveComponentGraph`; each `ScheduledOpSpec` is generated independently.
|
|
17
17
|
*/
|
|
18
|
+
import { type DiscoveredOp } from "./discover.js";
|
|
18
19
|
import { type ComponentPipelineOptions, type ScheduledOpSpec, type OpPipelineFile, type OpPipelineJob } from "../lexicon.js";
|
|
20
|
+
/**
|
|
21
|
+
* Copy each discovered Op's own `schedule` (#2120) onto its spec, so a CI
|
|
22
|
+
* generator can render the cron the Op already declares — `WatchOp({ name,
|
|
23
|
+
* schedule })` then needs no second cron in the `generateOpsPipeline` call.
|
|
24
|
+
* The spec's own `trigger`/`schedule` still win; `resolveOpTrigger` reads
|
|
25
|
+
* `opSchedule` last. Specs for Ops with no cadence pass through untouched.
|
|
26
|
+
*/
|
|
27
|
+
export declare function withOpSchedules(specs: ScheduledOpSpec[], discovered: Map<string, DiscoveredOp>): ScheduledOpSpec[];
|
|
19
28
|
/** Result of generating scheduled CI for a set of Ops (generate mode's Op counterpart, #927). */
|
|
20
29
|
export interface GenerateOpsPipelineResult {
|
|
21
30
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-pipeline.d.ts","sourceRoot":"","sources":["../../src/op/generate-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"generate-pipeline.d.ts","sourceRoot":"","sources":["../../src/op/generate-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAsBpB;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACpC,eAAe,EAAE,CAKnB;AAED,iGAAiG;AACjG,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,wDAAwD;IACxD,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EAAE,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,EAClC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,yBAAyB,CAAC,CAyBpC"}
|
package/dist/op/index.d.ts
CHANGED
|
@@ -1,21 +1,37 @@
|
|
|
1
|
-
export { Op, phase, activity, gate, effect, build, kubectlApply, helmInstall, helmInstallPinned, waitForStack, waitForReady, gitlabPipeline, lifecycleSnapshot, shell, ensureSecret, teardown, envTeardown, k3dUp, k3dDown, k3sInstall, k3sUninstall, flociUp, flociDown, flociAzUp, flociAzDown, flociGcpUp, flociGcpDown, httpCheck, azGroupEnsure, azGroupDelete, azApply, azDelete, awsApply, awsDelete, gcpApply, gcpDelete, policyGate, spriteCreate, spriteExec, spriteCheckpoint, spriteRestore, listCheckpoints, spriteDestroy, spriteWriteFile, spriteReadFile, spriteListDir, spriteRemove, spriteApplyNetworkPolicy, spriteApplyServices, spriteTaskCreate, spriteTaskRefresh, spriteTaskRelease, spritesUp, spritesDown } from "./builders.js";
|
|
1
|
+
export { Op, phase, activity, gate, effect, build, kubectlApply, helmInstall, helmInstallPinned, waitForStack, waitForReady, gitlabPipeline, lifecycleSnapshot, shell, ensureSecret, teardown, envTeardown, k3dUp, k3dDown, k3sInstall, k3sUninstall, flociUp, flociDown, flociAzUp, flociAzDown, flociGcpUp, flociGcpDown, httpCheck, azGroupEnsure, azGroupDelete, azApply, azDelete, awsApply, awsDelete, gcpApply, gcpDelete, policyGate, guardValidate, spriteCreate, spriteExec, spriteCheckpoint, spriteRestore, listCheckpoints, spriteDestroy, spriteWriteFile, spriteReadFile, spriteListDir, spriteRemove, spriteApplyNetworkPolicy, spriteApplyServices, spriteTaskCreate, spriteTaskRefresh, spriteTaskRelease, spritesUp, spritesDown } from "./builders.js";
|
|
2
2
|
export { OpResource } from "./resource.js";
|
|
3
|
-
export {
|
|
3
|
+
export { sleep } from "./activity-runtime.js";
|
|
4
4
|
export { emulatorLifecycle, emulatorsOf, endpointEnvVars } from "./emulator-lifecycle.js";
|
|
5
5
|
export type { EmulatorSpec, EmulatorCapability, EmulatorDeclaration, EmulatorUpArgs, EmulatorLifecycle } from "./emulator-lifecycle.js";
|
|
6
6
|
export { checkFreshness, compare, formatResult, latestRelease, parseVersion, unpinned } from "./emulator-freshness.js";
|
|
7
7
|
export type { FreshnessResult } from "./emulator-freshness.js";
|
|
8
|
-
export type { OpConfig, PhaseDefinition, StepDefinition, ActivityStep, GateStep, EffectStep } from "./types.js";
|
|
8
|
+
export type { OpConfig, OpSchedule, PhaseDefinition, StepDefinition, ActivityStep, GateStep, EffectStep, OutcomeAttribute } from "./types.js";
|
|
9
|
+
export { outcomeAttributesOf } from "./types.js";
|
|
10
|
+
export { isValidCronExpression, cronSyntaxMessage, cronMatches, cronDueBetween } from "./cron.js";
|
|
11
|
+
export { WatchOp, ReconcileOp, ApplyOp, ConvergeOp, WorkflowAuditOp, PipelineAuditOp, LexiconUpgradeOp, IN_SCOPE_LEXICONS, } from "./composites/index.js";
|
|
12
|
+
export type { WatchOpConfig, WatchOpResources, ReconcileOpConfig, ReconcileOpResources, ApplyOpConfig, ApplyOpResources, ConvergeOpConfig, ConvergeOpResources, ConvergeDial, WorkflowAuditOpConfig, WorkflowAuditOpResources, PipelineAuditOpConfig, PipelineAuditOpResources, LexiconUpgradeOpConfig, LexiconUpgradeOpResources, } from "./composites/index.js";
|
|
9
13
|
export { receiptActivities, receiptCheckInput } from "./receipt-store.js";
|
|
10
14
|
export type { ReceiptStore, EffectReceiptRef, ReceiptCheckInput, ReceiptActivities, ReceiptActivityOptions, ReceiptReadArgs, ReceiptReadResult, ReceiptWriteArgs, ReceiptStalenessArgs, ReceiptStalenessResult, ReceiptStaleFinding, } from "./receipt-store.js";
|
|
11
15
|
export { discoverOps } from "./discover.js";
|
|
12
16
|
export type { DiscoveredOp, OpDiscoveryResult } from "./discover.js";
|
|
13
|
-
export { generateOpsPipeline } from "./generate-pipeline.js";
|
|
17
|
+
export { generateOpsPipeline, withOpSchedules } from "./generate-pipeline.js";
|
|
14
18
|
export type { GenerateOpsPipelineResult } from "./generate-pipeline.js";
|
|
15
19
|
export { loadActivities, loadProfiles, resolveActivity } from "./activity-registry.js";
|
|
16
|
-
export type { ActivityFn
|
|
17
|
-
export {
|
|
18
|
-
export type {
|
|
20
|
+
export type { ActivityFn } from "./activity-registry.js";
|
|
21
|
+
export { loadActivityContracts, mergeActivityContracts } from "./activity-contract-registry.js";
|
|
22
|
+
export type { LexiconActivityContractContributor } from "./activity-contract-registry.js";
|
|
23
|
+
export { ACTIVITY_PROFILES, ACTIVITY_PROFILE_NAMES } from "./activity-profiles.js";
|
|
24
|
+
export type { ActivityProfile, ActivityProfileName } from "./activity-profiles.js";
|
|
25
|
+
export { NonRetryableActivityError, nonRetryableFailure } from "./activity-failure.js";
|
|
26
|
+
export { runOpLocally, parseDuration, OpRunFailure } from "./local-executor.js";
|
|
27
|
+
export type { StepRecord, OpRunResult, RunOpOptions } from "./local-executor.js";
|
|
28
|
+
export { evaluateGate, gitGateLedgerPort, memoryGateLedgerPort, approveCommand } from "./gate.js";
|
|
29
|
+
export type { GateLedgerPort, GateCheck, GateCheckInput } from "./gate.js";
|
|
30
|
+
export { createLocalOpRuntime } from "./runtimes/local.js";
|
|
31
|
+
export { runStateOf } from "./runtime.js";
|
|
32
|
+
export type { OpRuntimeProvider, OpRunHandle, OpRunStartOptions, OpRunState, OpRunStatus, OpRunRecord, OpRunRecordInput, OpRunPhaseRecord, OpRunStepRecord, } from "./runtime.js";
|
|
33
|
+
export { buildOpIR, serializeOpIR, opConfigFromIR, OP_IR_FORMAT_VERSION } from "./op-ir.js";
|
|
34
|
+
export type { OpIR, OpIRPhase, OpIRStep, OpIRActivityStep, OpIRGateStep, OpIREffectStep, OpIRActivityContract, } from "./op-ir.js";
|
|
19
35
|
export { renderHuman, renderJson } from "./local-output.js";
|
|
20
36
|
export { activityContract, isActivityContract, collectActivityContracts, validateActivitySteps, KNOWN_ACTIVITY_PROFILES, pathExistsInSchema, } from "./activity-contract.js";
|
|
21
37
|
export type { ActivityContract, ActivityContractIssue } from "./activity-contract.js";
|
package/dist/op/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/op/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAClH,cAAc,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAC7F,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAC5C,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAC3D,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EACrG,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EACzF,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAC5D,wBAAwB,EAAE,mBAAmB,EAC7C,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EACtD,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/op/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +1,92 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Local Op executor — runs an Op's phases in
|
|
2
|
+
* Local Op executor — runs an Op's phases in this process.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Ops. Provides phase sequencing, parallel phases, per-step retry + timeout via
|
|
4
|
+
* The default runtime (#2121), and the one dev loops, CI, and drift/observation
|
|
5
|
+
* Ops use. Provides phase sequencing, parallel phases, per-step retry + timeout via
|
|
6
6
|
* activity profiles, `outcomeAttribute` capture, and `onFailure` compensation.
|
|
7
|
-
* Gates and schedules are unsupported and rejected before any phase runs.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
8
|
+
* A gate is a fact, not a wait (#2119). Reaching one, the executor consults the
|
|
9
|
+
* gate ledger through `./gate.ts`: a resolution newer than the gate's newest
|
|
10
|
+
* pending fact lets the step pass, carrying the approver onto its record;
|
|
11
|
+
* anything else records the pending fact and ends the run with status `gated`.
|
|
12
|
+
* No later phase runs and `onFailure` does not run — a gate is not a failure,
|
|
13
|
+
* and there is nothing to compensate for. The next run re-evaluates from the
|
|
14
|
+
* ledger, so `chant approve <op> <gate>` followed by `chant run <op>` is the
|
|
15
|
+
* whole loop.
|
|
16
|
+
*
|
|
17
|
+
* The executor is deliberately decoupled from any lexicon: activity
|
|
10
18
|
* implementations and profiles are passed in (loaded dynamically by the CLI),
|
|
11
|
-
* so core never statically depends on
|
|
19
|
+
* so core never statically depends on one.
|
|
12
20
|
*/
|
|
13
|
-
import type { OpConfig, ActivityStep
|
|
21
|
+
import type { OpConfig, ActivityStep } from "./types.js";
|
|
14
22
|
import { type ActivityFn, type ActivityProfile } from "./activity-registry.js";
|
|
23
|
+
import { type GateLedgerPort } from "./gate.js";
|
|
24
|
+
import type { PendingGateRecord } from "../lifecycle/gate-ledger.js";
|
|
25
|
+
import type { OpRunRecord } from "./runtime.js";
|
|
26
|
+
export { parseDuration } from "./duration.js";
|
|
15
27
|
export interface StepRecord {
|
|
16
28
|
phase: string;
|
|
17
29
|
fn: string;
|
|
18
30
|
/**
|
|
19
|
-
* Present for a local-executor record.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* populated with a guess.
|
|
31
|
+
* Present for a local-executor record. A runtime that reconstructs records
|
|
32
|
+
* from its own run history may not have an activity's scheduled input to
|
|
33
|
+
* hand, and omits the field rather than guessing at it.
|
|
23
34
|
*/
|
|
24
35
|
args?: Record<string, unknown>;
|
|
25
36
|
status: "ok" | "fail" | "skipped";
|
|
26
37
|
durationMs: number;
|
|
38
|
+
/**
|
|
39
|
+
* The first outcome attribute the step published, kept singular because a
|
|
40
|
+
* step publishing one is the ordinary case and every reader of this field
|
|
41
|
+
* predates the plural form. {@link StepRecord.outcomes} is the whole list.
|
|
42
|
+
*/
|
|
27
43
|
outcome?: {
|
|
28
44
|
name: string;
|
|
29
45
|
value: unknown;
|
|
30
46
|
};
|
|
47
|
+
/** Every outcome attribute the step published, in authored order (#2105). Absent when it published none. */
|
|
48
|
+
outcomes?: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
value: unknown;
|
|
51
|
+
}>;
|
|
31
52
|
error?: string;
|
|
53
|
+
/** Set on a `gate` step that passed (#2119): who resolved it, when, and at what address. */
|
|
54
|
+
approval?: {
|
|
55
|
+
gate: string;
|
|
56
|
+
resolvedBy: string;
|
|
57
|
+
timestamp: string;
|
|
58
|
+
url?: string;
|
|
59
|
+
};
|
|
32
60
|
}
|
|
33
61
|
export interface OpRunResult {
|
|
34
62
|
op: string;
|
|
35
63
|
records: StepRecord[];
|
|
36
64
|
totalMs: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Three-state outcome (#2119). `gated` is neither success nor failure: the
|
|
67
|
+
* run reached a gate nobody has approved, recorded the fact, and stopped.
|
|
68
|
+
* The CLI exits 3 for it so CI can tell "waiting on a human" from "broken".
|
|
69
|
+
*
|
|
70
|
+
* Written to the run ledger as the record's own `status` (#2118).
|
|
71
|
+
*/
|
|
72
|
+
status: "ok" | "fail" | "gated";
|
|
73
|
+
/** ISO-8601 start of this run. */
|
|
74
|
+
startedAt: string;
|
|
75
|
+
/** Present when `status === "gated"`: the pending fact the run ended on. */
|
|
76
|
+
gate?: PendingGateRecord;
|
|
77
|
+
/**
|
|
78
|
+
* The run's ledger record (#2118) — always built, whether or not it was
|
|
79
|
+
* appended. `chant run <op> --json` prints exactly this, so what a caller
|
|
80
|
+
* reads on stdout and what a later `readRunLedger` reads back are the same
|
|
81
|
+
* document.
|
|
82
|
+
*/
|
|
83
|
+
record: OpRunRecord;
|
|
43
84
|
}
|
|
44
85
|
/** Thrown on terminal Op failure; carries the partial run result for rendering. */
|
|
45
86
|
export declare class OpRunFailure extends Error {
|
|
46
87
|
readonly result: OpRunResult;
|
|
47
88
|
constructor(result: OpRunResult);
|
|
48
89
|
}
|
|
49
|
-
/** Parse a Temporal duration string ("5m", "30s", "1h30m", "100ms") to ms. */
|
|
50
|
-
export declare function parseDuration(s: string): number;
|
|
51
|
-
/** Find the first gate step anywhere in the Op (phases + onFailure, including
|
|
52
|
-
* gates nested inside effect steps), if any. */
|
|
53
|
-
export declare function findGate(config: OpConfig): GateStep | undefined;
|
|
54
90
|
/**
|
|
55
91
|
* Find the first `policyGate` step anywhere in the Op (phases + `onFailure`,
|
|
56
92
|
* including steps nested inside effect steps), if any.
|
|
@@ -62,14 +98,64 @@ export declare function findGate(config: OpConfig): GateStep | undefined;
|
|
|
62
98
|
* shown to a user who passed a documented flag. The combination cannot be
|
|
63
99
|
* honoured until the gate can build and load policies inside the boundary
|
|
64
100
|
* (#1157), so both `chant run` paths pre-flight it with this and refuse before
|
|
65
|
-
* any phase executes
|
|
101
|
+
* any phase executes. This is the one pre-flight refusal left on the Op path —
|
|
102
|
+
* a `gate` no longer is one (#2119).
|
|
66
103
|
*/
|
|
67
104
|
export declare function findPolicyGateStep(config: OpConfig): ActivityStep | undefined;
|
|
105
|
+
/** How a run reaches the gate ledger, and what it calls itself there (#2119). */
|
|
106
|
+
export interface RunOpOptions {
|
|
107
|
+
/**
|
|
108
|
+
* Where gate facts are read and written. Defaults to the `chant/lifecycle`
|
|
109
|
+
* orphan branch under `cwd`; a test (or a caller that already holds the
|
|
110
|
+
* ledger) passes `memoryGateLedgerPort()` from `./gate.ts` instead.
|
|
111
|
+
*/
|
|
112
|
+
gates?: GateLedgerPort;
|
|
113
|
+
/** Working directory for the default git-backed gate ledger. */
|
|
114
|
+
cwd?: string;
|
|
115
|
+
/** ISO-8601 "now", so a gate decision is deterministic under test. */
|
|
116
|
+
now?: string;
|
|
117
|
+
/** Identifies this run on any pending fact it records. */
|
|
118
|
+
runId?: string;
|
|
119
|
+
/**
|
|
120
|
+
* Called once per settled step, in the order the records are produced
|
|
121
|
+
* (#2121) — what the local op runtime (./runtimes/local.ts) feeds
|
|
122
|
+
* `--progress-json` from. Side-effect free when omitted.
|
|
123
|
+
*/
|
|
124
|
+
onRecord?: (record: StepRecord) => void;
|
|
125
|
+
/**
|
|
126
|
+
* Append the run's {@link OpRunRecord} to the run ledger
|
|
127
|
+
* (`../lifecycle/run-ledger.ts`) when the run settles (#2118). Opt-in on
|
|
128
|
+
* purpose: the executor is called from unit tests and in-process harnesses
|
|
129
|
+
* whose working directory is an ordinary checkout, and a run there must not
|
|
130
|
+
* write to the lifecycle branch. The local runtime (./runtimes/local.ts) and
|
|
131
|
+
* `chant operator` pass it; nothing else does.
|
|
132
|
+
*/
|
|
133
|
+
ledger?: {
|
|
134
|
+
cwd?: string;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Called when the ledger append itself fails. The run's own outcome is
|
|
138
|
+
* already decided by then, so a ledger failure is reported to the caller,
|
|
139
|
+
* never promoted into a run failure.
|
|
140
|
+
*/
|
|
141
|
+
onLedgerError?: (err: unknown) => void;
|
|
142
|
+
}
|
|
68
143
|
/**
|
|
69
|
-
* Execute an Op locally.
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
144
|
+
* Execute an Op locally.
|
|
145
|
+
*
|
|
146
|
+
* Resolves with the run result when every phase succeeds (`status: "ok"`), and
|
|
147
|
+
* also when the run stopped at an unapproved gate (`status: "gated"`, with the
|
|
148
|
+
* pending fact on `result.gate`) — a gate is a fact, not an error, so it is not
|
|
149
|
+
* thrown. Rejects with `OpRunFailure` (carrying the partial result) on terminal
|
|
150
|
+
* failure, after running any `onFailure` phases in reverse order; a gated run
|
|
151
|
+
* runs no `onFailure` phase, because nothing failed and nothing was left
|
|
152
|
+
* half-applied to compensate for.
|
|
153
|
+
*
|
|
154
|
+
* Whichever of the three ways it settles, the run carries an
|
|
155
|
+
* {@link OpRunRecord} on `result.record` (#2118). With `options.ledger` that
|
|
156
|
+
* record is also appended to `<env>/runs__<op>.jsonl` on the lifecycle branch
|
|
157
|
+
* before this returns or rejects, so an Op's outcome outlives the process that
|
|
158
|
+
* produced it.
|
|
73
159
|
*/
|
|
74
|
-
export declare function runOpLocally(config: OpConfig, activities: Map<string, ActivityFn>, profiles: Record<string, ActivityProfile>, signal?: AbortSignal): Promise<OpRunResult>;
|
|
160
|
+
export declare function runOpLocally(config: OpConfig, activities: Map<string, ActivityFn>, profiles: Record<string, ActivityProfile>, signal?: AbortSignal, options?: RunOpOptions): Promise<OpRunResult>;
|
|
75
161
|
//# sourceMappingURL=local-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-executor.d.ts","sourceRoot":"","sources":["../../src/op/local-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"local-executor.d.ts","sourceRoot":"","sources":["../../src/op/local-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,17 @@ type Writer = (line: string) => void;
|
|
|
10
10
|
* stays clean for piping (the `--json` renderer owns stdout).
|
|
11
11
|
*/
|
|
12
12
|
export declare function renderHuman(result: OpRunResult, write?: Writer): void;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Render the run's ledger record as JSON on stdout (and nothing else on
|
|
15
|
+
* stdout).
|
|
16
|
+
*
|
|
17
|
+
* The record, not the whole `OpRunResult` (#2118): what `chant run <op> --json`
|
|
18
|
+
* emits is byte-for-byte what the run appended to `<env>/runs__<op>.jsonl`, so
|
|
19
|
+
* a consumer reading stdout and one reading the ledger back later agree on
|
|
20
|
+
* every field, the run id included. A gated run's record names the gate it
|
|
21
|
+
* stopped on; the `approve` command line rides alongside so a CI job reporting
|
|
22
|
+
* the gate doesn't have to reassemble it from the op and gate names.
|
|
23
|
+
*/
|
|
14
24
|
export declare function renderJson(result: OpRunResult, write?: Writer): void;
|
|
15
25
|
export type { OpRunResult, StepRecord };
|
|
16
26
|
//# sourceMappingURL=local-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-output.d.ts","sourceRoot":"","sources":["../../src/op/local-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-output.d.ts","sourceRoot":"","sources":["../../src/op/local-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGhE,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAerC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAe,GAAG,IAAI,CA6C7E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAe,GAAG,IAAI,CAG5E;AAED,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* op.json IR — chant #1289 ("An Op compiles only to TypeScript, so walk-away
|
|
3
|
+
* cost is zero everywhere except Ops").
|
|
4
|
+
*
|
|
5
|
+
* `OpConfig` is already inert data: every field is a string, number, boolean,
|
|
6
|
+
* or a nested object of those (no functions, no closures, no runtime
|
|
7
|
+
* references — see `./types.ts`). This module is the "second, simpler output
|
|
8
|
+
* from the same walk" the issue asks for: a deterministic
|
|
9
|
+
* `dist/ops/<name>/op.json`, so a foreign runtime (or a dashboard, a policy
|
|
10
|
+
* check, an agent) can read what an Op does without importing chant or
|
|
11
|
+
* parsing generated TypeScript.
|
|
12
|
+
*
|
|
13
|
+
* It lives in core, not in a hosting lexicon (#2118, epic #2114). The IR is a
|
|
14
|
+
* restatement of `OpConfig`, and `OpConfig` is core's — as is the profile
|
|
15
|
+
* table a step's `profile` key names, since #2117. What core does not own is
|
|
16
|
+
* the activity contracts that give a step's args a schema: those stay
|
|
17
|
+
* decentralized, so `buildOpIR` takes the registry as a parameter and defaults
|
|
18
|
+
* it to empty. A caller holding a lexicon's contracts passes them in, and the
|
|
19
|
+
* `activityContracts` section fills out without core ever importing that
|
|
20
|
+
* lexicon.
|
|
21
|
+
*
|
|
22
|
+
* Two things beyond a literal restatement of `OpConfig` earn their place:
|
|
23
|
+
*
|
|
24
|
+
* - Every step's `profile` / gate `timeout` is resolved to its effective
|
|
25
|
+
* value (chant's own default when omitted), and every referenced profile's
|
|
26
|
+
* actual retry/timeout policy rides along out of `ACTIVITY_PROFILES`.
|
|
27
|
+
* Without it a foreign runtime would have to read chant's TypeScript to
|
|
28
|
+
* know what "fastIdempotent" means.
|
|
29
|
+
* - Every step whose `fn` has a registered {@link ActivityContract} in the
|
|
30
|
+
* contract registry the caller passes (chant #1288 Stage 1) gets its args/
|
|
31
|
+
* returns zod schema embedded as JSON Schema (via zod 4's built-in
|
|
32
|
+
* `z.toJSONSchema`), keyed by activity name. This is exactly the payoff
|
|
33
|
+
* the Stage 1 decision comment named: "#1289 (op.json IR) ... build on
|
|
34
|
+
* these [Stage 1] contracts." Ownership stays decentralized — only
|
|
35
|
+
* activities the passed registry knows are covered; a step calling an
|
|
36
|
+
* activity from a lexicon outside it (or one with no registered contract
|
|
37
|
+
* yet) simply has no entry here.
|
|
38
|
+
* - Every step whose contract declares entity-identifying args
|
|
39
|
+
* (`ActivityContract.entities`, chant #2022) gets those args' literal
|
|
40
|
+
* string values resolved into `entities` — the estate join a renderer
|
|
41
|
+
* otherwise had to invent off scope fields like `stackName`. The contract
|
|
42
|
+
* entry echoes the declared key list, so a consumer can resolve values
|
|
43
|
+
* this serialization could not (a step-output ref) itself.
|
|
44
|
+
* JSON-Schema-incompatible contracts (schemas containing transforms or
|
|
45
|
+
* custom types that zod cannot serialize) are skipped gracefully: the
|
|
46
|
+
* activity appears in the Op's step graph but has no entry in
|
|
47
|
+
* activityContracts, consistent with the decentralized and partial
|
|
48
|
+
* coverage philosophy.
|
|
49
|
+
*
|
|
50
|
+
* Resolving defaults loses nothing: parsing `op.json` back into an
|
|
51
|
+
* `OpConfig`-shaped object (`opConfigFromIR`) and re-serializing it produces
|
|
52
|
+
* a byte-identical `op.json`, and a lexicon serializer fed the reconstruction
|
|
53
|
+
* emits byte-identical code (verified by the round-trip tests here) — the
|
|
54
|
+
* issue's own verification criterion.
|
|
55
|
+
*
|
|
56
|
+
* ## Step-output references (chant #1290, #1288 Stage 2 follow-up)
|
|
57
|
+
*
|
|
58
|
+
* A step's `args` may hold a {@link StepOutputRef} (`./step-output-ref.ts`)
|
|
59
|
+
* anywhere in its structure — a placeholder for a
|
|
60
|
+
* prior step's declared return value, which the executor substitutes for at
|
|
61
|
+
* run time from the producing step's record. This module does not
|
|
62
|
+
* special-case it: `irActivityStep` copies `step.args` through as-is (same as
|
|
63
|
+
* every other value), and `JSON.stringify` — both the literal one in
|
|
64
|
+
* `serializeOpIR` and the structural-equality one `z.toJSONSchema`-adjacent
|
|
65
|
+
* consumers would use — drops a `StepOutputRef`'s brand (a `Symbol.for(...)`
|
|
66
|
+
* key; JSON has no symbols) while keeping its three own enumerable string
|
|
67
|
+
* properties. The result is a plain, first-class IR value at exactly the
|
|
68
|
+
* position the reference sat in `args`:
|
|
69
|
+
*
|
|
70
|
+
* ```json
|
|
71
|
+
* { "kind": "step-output-ref", "step": "build-step", "path": "manifestPath" }
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* (`path` omitted when the reference is to the whole return value.) This is
|
|
75
|
+
* deliberate, not an accident of `JSON.stringify`'s symbol-dropping — a
|
|
76
|
+
* foreign consumer of op.json can match on `args.<field>.kind ===
|
|
77
|
+
* "step-output-ref"` to recognize a placeholder and resolve it against
|
|
78
|
+
* `steps[].id`/`activityContracts[fn].returns` itself, without ever loading
|
|
79
|
+
* chant's TypeScript. `op-ir.test.ts` asserts the shape directly so a future
|
|
80
|
+
* change to `StepOutputRef`'s own fields (`./step-output-ref.ts`) that would
|
|
81
|
+
* silently change this JSON shape gets caught here.
|
|
82
|
+
*/
|
|
83
|
+
import type { OutcomeAttribute, OpConfig, OpSchedule } from "./types.js";
|
|
84
|
+
import type { EffectReceiptRef } from "./receipt-store.js";
|
|
85
|
+
import type { ActivityContract } from "./activity-contract.js";
|
|
86
|
+
import { type ActivityProfile } from "./activity-profiles.js";
|
|
87
|
+
/**
|
|
88
|
+
* The op.json IR schema version. Bumped on a breaking change to this
|
|
89
|
+
* module's output shape — additive fields (a new optional key) do not
|
|
90
|
+
* require a bump.
|
|
91
|
+
*
|
|
92
|
+
* `2.0` (#2118): `taskQueue` and `namespace` are gone and `searchAttributes`
|
|
93
|
+
* is replaced by `labels`. Those three were the fields only a workflow engine
|
|
94
|
+
* read; an op.json now states what the Op does, not where it runs.
|
|
95
|
+
*/
|
|
96
|
+
export declare const OP_IR_FORMAT_VERSION = "2.0";
|
|
97
|
+
export interface OpIRActivityStep {
|
|
98
|
+
kind: "activity";
|
|
99
|
+
fn: string;
|
|
100
|
+
/** Always present (defaulted to `{}`) — unlike `ActivityStep.args`, which omits an empty bag. */
|
|
101
|
+
args: Record<string, unknown>;
|
|
102
|
+
/** Resolved to its effective value — `ActivityStep.profile ?? "fastIdempotent"`. */
|
|
103
|
+
profile: string;
|
|
104
|
+
/**
|
|
105
|
+
* What this step's effect touches in the estate (#2022): the string values
|
|
106
|
+
* of the args its contract declares as entity-identifying
|
|
107
|
+
* (`ActivityContract.entities`), resolved per step at serialization the
|
|
108
|
+
* same way `profile` is. Absent when the activity has no contract, the
|
|
109
|
+
* contract declares no entity args, or none of them holds a literal string
|
|
110
|
+
* in this step (a step-output ref resolves at run time, not here).
|
|
111
|
+
*/
|
|
112
|
+
entities?: string[];
|
|
113
|
+
/** One run outcome, or several published off the same result (#2105). */
|
|
114
|
+
outcomeAttribute?: OutcomeAttribute | OutcomeAttribute[];
|
|
115
|
+
}
|
|
116
|
+
export interface OpIRGateStep {
|
|
117
|
+
kind: "gate";
|
|
118
|
+
signalName: string;
|
|
119
|
+
/** Resolved to its effective value — `GateStep.timeout ?? "48h"`. */
|
|
120
|
+
timeout: string;
|
|
121
|
+
description?: string;
|
|
122
|
+
}
|
|
123
|
+
export interface OpIREffectStep {
|
|
124
|
+
kind: "effect";
|
|
125
|
+
receipt: EffectReceiptRef;
|
|
126
|
+
expectation?: string;
|
|
127
|
+
steps: Array<OpIRActivityStep | OpIRGateStep>;
|
|
128
|
+
description?: string;
|
|
129
|
+
}
|
|
130
|
+
export type OpIRStep = OpIRActivityStep | OpIRGateStep | OpIREffectStep;
|
|
131
|
+
export interface OpIRPhase {
|
|
132
|
+
name: string;
|
|
133
|
+
parallel: boolean;
|
|
134
|
+
steps: OpIRStep[];
|
|
135
|
+
}
|
|
136
|
+
/** A registered activity contract's args/returns, restated as JSON Schema. */
|
|
137
|
+
export interface OpIRActivityContract {
|
|
138
|
+
args: Record<string, unknown>;
|
|
139
|
+
returns?: Record<string, unknown>;
|
|
140
|
+
/** Names of args the contract declares as entity-identifying (#2022) — the key a consumer uses to resolve entities out of any step's `args` itself, including values this serialization could not (a step-output ref). */
|
|
141
|
+
entities?: string[];
|
|
142
|
+
}
|
|
143
|
+
export interface OpIR {
|
|
144
|
+
formatVersion: string;
|
|
145
|
+
name: string;
|
|
146
|
+
overview: string;
|
|
147
|
+
depends: string[];
|
|
148
|
+
/** The Op's discovery keys (#2118) — `OpConfig.labels` verbatim, `{}` when it declares none. */
|
|
149
|
+
labels: Record<string, string>;
|
|
150
|
+
/**
|
|
151
|
+
* The Op's cadence (#2120) — `OpConfig.schedule` verbatim, absent when it
|
|
152
|
+
* declares none. Op data, not runtime data: the cron says how often this Op
|
|
153
|
+
* should run, and which scheduler honours it is the reader's business, the
|
|
154
|
+
* same way `profile` states a retry policy without naming a retrier. An
|
|
155
|
+
* additive optional key, so it needs no `formatVersion` bump.
|
|
156
|
+
*/
|
|
157
|
+
schedule?: OpSchedule;
|
|
158
|
+
phases: OpIRPhase[];
|
|
159
|
+
onFailure: OpIRPhase[];
|
|
160
|
+
/** Every activity profile referenced by a step in this Op, keyed by profile name — from the registry passed to {@link buildOpIR}, empty when none was. */
|
|
161
|
+
activityProfiles: Record<string, ActivityProfile>;
|
|
162
|
+
/**
|
|
163
|
+
* JSON Schema for every referenced activity that has a registered contract
|
|
164
|
+
* in the passed registry (chant #1288 Stage 1). Decentralized and partial
|
|
165
|
+
* by design — see the module doc.
|
|
166
|
+
*/
|
|
167
|
+
activityContracts: Record<string, OpIRActivityContract>;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Build the deterministic op.json IR for one Op's config.
|
|
171
|
+
*
|
|
172
|
+
* `contractRegistry` is the one thing core does not own (see the module doc):
|
|
173
|
+
* a caller holding a lexicon's activity contracts passes them in and
|
|
174
|
+
* `activityContracts` fills out. Omitted, that section is empty — the step
|
|
175
|
+
* graph, the labels and every step's resolved `profile` name are unaffected
|
|
176
|
+
* either way. `profileRegistry` defaults to core's own `ACTIVITY_PROFILES`;
|
|
177
|
+
* a test overrides it.
|
|
178
|
+
*/
|
|
179
|
+
export declare function buildOpIR(config: OpConfig, contractRegistry?: ReadonlyMap<string, ActivityContract>, profileRegistry?: Readonly<Record<string, ActivityProfile>>): OpIR;
|
|
180
|
+
/** Serialize one Op's op.json IR to a deterministic JSON string (stable key order, 2-space indent, trailing newline). Takes the same two optional registries as {@link buildOpIR}. */
|
|
181
|
+
export declare function serializeOpIR(config: OpConfig, contractRegistry?: ReadonlyMap<string, ActivityContract>, profileRegistry?: Readonly<Record<string, ActivityProfile>>): string;
|
|
182
|
+
/** Reconstruct an `OpConfig` from its op.json IR. */
|
|
183
|
+
export declare function opConfigFromIR(ir: OpIR): OpConfig;
|
|
184
|
+
//# sourceMappingURL=op-ir.d.ts.map
|