@intentius/chant 0.124.12 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The client for the `POST /v1/systemone` wire format (#2491): TypeSafe's Jev
|
|
3
|
+
* API, and every server that implements the same request and response.
|
|
4
|
+
*
|
|
5
|
+
* ```
|
|
6
|
+
* POST <url>/v1/systemone Authorization: Bearer <key>
|
|
7
|
+
* { "model": "jev-1.13.0", "state": {...}, "questions": { "<name>": { "type": "noul" | "choice" | "score", "instructions": ..., "criteria": ... } } }
|
|
8
|
+
*
|
|
9
|
+
* { "model": "jev-1.13.0", "answers": { "<name>": { "type": "noul", "noul": 0.22, "reason"?: ... } | { "type": "choice", "choice": ..., "probabilities": {...}, "confidence": ..., "reason"?: ... } | { "type": "score", ..., "reason"?: ... } } }
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* `reason` is optional: the model's own explanation of its answer (#3345).
|
|
13
|
+
* Core keeps it in the answer record beside a proposal, or as `model_reason`
|
|
14
|
+
* in the escalation entry of an answer below the threshold.
|
|
15
|
+
*
|
|
16
|
+
* {@link backendAsk} turns a set of backends into core's `ModelAsk`, the
|
|
17
|
+
* model call `askPoint` takes (`../workspace/points.ts`). This file
|
|
18
|
+
* only speaks the wire format: whether an answer is observed, proposed or
|
|
19
|
+
* escalated, and what a point does when the backend is unreachable, are
|
|
20
|
+
* core's (`runChain`), so they are the same for this client, for a response
|
|
21
|
+
* handed to `points ask --response`, and for any runtime's decider.
|
|
22
|
+
*
|
|
23
|
+
* The model id is sent as the point pins it. An alias such as `jev-latest` is
|
|
24
|
+
* refused where the point is declared, and the response's `model` is compared
|
|
25
|
+
* with the pin by core, so an alias that moved is never recorded as the pin.
|
|
26
|
+
*
|
|
27
|
+
* Anything that stops an answer arriving throws: no key, a network error, a
|
|
28
|
+
* timeout, a non-2xx status (Jev's are 401, 422, 429 and 529), or a response
|
|
29
|
+
* without an answer to the question asked. Core reads a throw as the backend
|
|
30
|
+
* being unreachable and follows the point's `unreachable`.
|
|
31
|
+
*
|
|
32
|
+
* It reads the workspace declaration for a brokered key, so it loads code
|
|
33
|
+
* under `workspace/`: the `decide` activity imports it on first call, never
|
|
34
|
+
* at module load (#2525 rule 5).
|
|
35
|
+
*/
|
|
36
|
+
import { readDeclaration } from "../workspace/declaration.js";
|
|
37
|
+
import { locateWorkspace } from "../workspace/which-chant.js";
|
|
38
|
+
/** The path every Jev-compatible server serves. */
|
|
39
|
+
export const SYSTEMONE_PATH = "/v1/systemone";
|
|
40
|
+
/** How long a call may take before the backend counts as unreachable, when the backend names no `timeoutMs`. */
|
|
41
|
+
export const DEFAULT_TIMEOUT_MS = 30000;
|
|
42
|
+
/**
|
|
43
|
+
* The name a point's question is sent under: the point's own name, so a
|
|
44
|
+
* response reads back the way `points ask --response` reads one, with the
|
|
45
|
+
* answer under `answers["<point>"]`.
|
|
46
|
+
*/
|
|
47
|
+
export const questionName = (point) => point;
|
|
48
|
+
/** A backend or key that is configured wrongly: the activity refuses before asking anything. */
|
|
49
|
+
export class DecideConfigError extends Error {
|
|
50
|
+
constructor(message) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = "DecideConfigError";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The declaration's entry for a brokered key (#2726): the box member that
|
|
57
|
+
* declares the capability, and the broker it names. Read from the workspace
|
|
58
|
+
* declaration nearest above `cwd`, the same declaration `workspace status`
|
|
59
|
+
* reads it from. Throws a {@link DecideConfigError} when no member declares
|
|
60
|
+
* the capability, when more than one does and the key names none, or when the
|
|
61
|
+
* capability names no broker.
|
|
62
|
+
*/
|
|
63
|
+
export function brokeredCapability(key, cwd) {
|
|
64
|
+
let members;
|
|
65
|
+
try {
|
|
66
|
+
members = readDeclaration(locateWorkspace(cwd).tree).members;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
throw new DecideConfigError(`the key names the brokered capability ${key.capability}, and the workspace declaration can't be read: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
+
}
|
|
71
|
+
const declaring = members.filter((m) => (key.member === undefined || m.name === key.member) && m.box?.capabilities.some((c) => c.name === key.capability));
|
|
72
|
+
if (declaring.length === 0) {
|
|
73
|
+
const what = key.member !== undefined ? `member ${key.member}'s box does not declare the capability ${key.capability}` : `no member's box declares the capability ${key.capability}`;
|
|
74
|
+
throw new DecideConfigError(`${what} (box.capabilities in chant.workspace.json, #2726)`);
|
|
75
|
+
}
|
|
76
|
+
if (declaring.length > 1) {
|
|
77
|
+
throw new DecideConfigError(`the capability ${key.capability} is declared by ${declaring.map((m) => m.name).join(" and ")}: name the member in the key`);
|
|
78
|
+
}
|
|
79
|
+
const member = declaring[0];
|
|
80
|
+
const capability = member.box.capabilities.find((c) => c.name === key.capability);
|
|
81
|
+
if (capability.broker === null) {
|
|
82
|
+
throw new DecideConfigError(`member ${member.name}'s capability ${key.capability} names no broker (WSP122), so nothing holds its key`);
|
|
83
|
+
}
|
|
84
|
+
return { member: member.name, broker: capability.broker, scope: capability.scope };
|
|
85
|
+
}
|
|
86
|
+
/** Check a key reference without reading any secret: a string is a literal and refused, and a brokered capability must be declared. */
|
|
87
|
+
export function checkKey(key, where, cwd) {
|
|
88
|
+
if (key === undefined)
|
|
89
|
+
return;
|
|
90
|
+
if (typeof key === "string") {
|
|
91
|
+
throw new DecideConfigError(`${where} is a literal string; a key is { env: "<VARIABLE>" } or a brokered capability, never the key itself (SYS001)`);
|
|
92
|
+
}
|
|
93
|
+
if (key !== null && typeof key === "object" && "capability" in key)
|
|
94
|
+
brokeredCapability(key, cwd);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The bearer key for one call, or undefined when none is sent: a backend with
|
|
98
|
+
* no key, or a brokered capability whose broker is the endpoint. Throws when a
|
|
99
|
+
* variable the key names is unset, which the chain reads as unreachable.
|
|
100
|
+
*/
|
|
101
|
+
export function resolveKey(key, cwd, env = process.env) {
|
|
102
|
+
if (key === undefined)
|
|
103
|
+
return undefined;
|
|
104
|
+
if ("capability" in key) {
|
|
105
|
+
const brokered = brokeredCapability(key, cwd);
|
|
106
|
+
if (key.env === undefined)
|
|
107
|
+
return undefined;
|
|
108
|
+
const value = env[key.env];
|
|
109
|
+
if (!value)
|
|
110
|
+
throw new Error(`the broker ${brokered.broker} has not set ${key.env} for the capability ${key.capability}`);
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
113
|
+
const value = env[key.env];
|
|
114
|
+
if (!value)
|
|
115
|
+
throw new Error(`the environment variable ${key.env} is not set`);
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
function short(text) {
|
|
119
|
+
const flat = text.replace(/\s+/g, " ").trim();
|
|
120
|
+
return flat.length > 300 ? `${flat.slice(0, 300)}...` : flat;
|
|
121
|
+
}
|
|
122
|
+
/** Post one question to one backend and return the model that answered and its answer. */
|
|
123
|
+
export async function postQuestion(backend, name, request, opts) {
|
|
124
|
+
const key = resolveKey(backend.key, opts.cwd, opts.env);
|
|
125
|
+
const question = questionName(request.point);
|
|
126
|
+
const body = {
|
|
127
|
+
model: request.model,
|
|
128
|
+
state: request.state,
|
|
129
|
+
questions: { [question]: { type: request.question.type, instructions: request.question.instructions, criteria: request.question.criteria } },
|
|
130
|
+
};
|
|
131
|
+
const url = `${backend.url.replace(/\/+$/, "")}${SYSTEMONE_PATH}`;
|
|
132
|
+
const timeout = AbortSignal.timeout(backend.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
133
|
+
const signal = opts.signal ? AbortSignal.any([opts.signal, timeout]) : timeout;
|
|
134
|
+
let res;
|
|
135
|
+
try {
|
|
136
|
+
res = await (opts.transport ?? fetch)(url, {
|
|
137
|
+
method: "POST",
|
|
138
|
+
headers: { "content-type": "application/json", accept: "application/json", ...(key ? { authorization: `Bearer ${key}` } : {}) },
|
|
139
|
+
body: JSON.stringify(body),
|
|
140
|
+
signal,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
const why = timeout.aborted ? `no answer within ${backend.timeoutMs ?? DEFAULT_TIMEOUT_MS} ms` : err instanceof Error ? err.message : String(err);
|
|
145
|
+
throw new Error(`${name} at ${url}: ${why}`);
|
|
146
|
+
}
|
|
147
|
+
const text = await res.text();
|
|
148
|
+
if (!res.ok)
|
|
149
|
+
throw new Error(`${name} at ${url} answered ${res.status}${text ? `: ${short(text)}` : ""}`);
|
|
150
|
+
let parsed;
|
|
151
|
+
try {
|
|
152
|
+
parsed = JSON.parse(text);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
throw new Error(`${name} at ${url} answered with something that is not JSON: ${short(text)}`);
|
|
156
|
+
}
|
|
157
|
+
const r = parsed;
|
|
158
|
+
if (r === null || typeof r !== "object")
|
|
159
|
+
throw new Error(`${name} answered with no JSON object`);
|
|
160
|
+
if (typeof r.model !== "string" || r.model === "")
|
|
161
|
+
throw new Error(`${name}'s response names no model`);
|
|
162
|
+
const answer = r.answers?.[question];
|
|
163
|
+
if (answer === null || typeof answer !== "object")
|
|
164
|
+
throw new Error(`${name}'s response has no answer to ${question}`);
|
|
165
|
+
return { model: r.model, answer, response: r };
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The model call for `askPoint`: each request goes to the backend its decider
|
|
169
|
+
* names. A name no backend has throws, and so does anything
|
|
170
|
+
* {@link postQuestion} throws, which the chain reads as unreachable.
|
|
171
|
+
*/
|
|
172
|
+
export function backendAsk(opts) {
|
|
173
|
+
return async (request) => {
|
|
174
|
+
const backend = opts.backends[request.backend];
|
|
175
|
+
if (!backend)
|
|
176
|
+
throw new Error(`no backend named ${request.backend} is configured (decide.backends)`);
|
|
177
|
+
const { model, answer, response } = await postQuestion(backend, request.backend, request, opts);
|
|
178
|
+
opts.onResponse?.(request.backend, response);
|
|
179
|
+
return { model, answer };
|
|
180
|
+
};
|
|
181
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `decide` block in `chant.config.ts`: the backends a decision point's
|
|
3
|
+
* model decider names, which the `decide` Op activity calls (#2828).
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import type { ChantConfig } from "@intentius/chant/config";
|
|
7
|
+
*
|
|
8
|
+
* export default {
|
|
9
|
+
* decide: {
|
|
10
|
+
* backends: {
|
|
11
|
+
* systemone: { url: "https://api.typesafe.ai", key: { env: "TYPESAFE_API_KEY" } },
|
|
12
|
+
* local: { url: "http://127.0.0.1:8080" },
|
|
13
|
+
* studio: { url: "http://127.0.0.1:7071", key: { capability: "inference", member: "box" } },
|
|
14
|
+
* },
|
|
15
|
+
* },
|
|
16
|
+
* } satisfies ChantConfig;
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* A point's model decider says `"backend": "systemone"`, and that name is the
|
|
20
|
+
* key here. A backend is an endpoint that speaks the `POST /v1/systemone` wire
|
|
21
|
+
* format (TypeSafe's, or any server that implements it, #2491) and where its
|
|
22
|
+
* key comes from.
|
|
23
|
+
*
|
|
24
|
+
* The key is never a literal. It is either an environment variable's name, or
|
|
25
|
+
* a capability the workspace declares as brokered on a box member (#2726).
|
|
26
|
+
* With a brokered capability the broker holds the credential: it either sets
|
|
27
|
+
* the variable `env` names for this process, or it is itself the endpoint and
|
|
28
|
+
* adds the key on the way through, in which case no key is sent from here.
|
|
29
|
+
* SYS001 refuses a string literal where a key goes.
|
|
30
|
+
*
|
|
31
|
+
* This module holds only the schemas, so `../config.ts` can validate the
|
|
32
|
+
* block without loading the client or anything under `workspace/`.
|
|
33
|
+
*/
|
|
34
|
+
import { z } from "zod";
|
|
35
|
+
/** A key read from an environment variable at call time. */
|
|
36
|
+
export const envKeySchema = z.strictObject({
|
|
37
|
+
/** The variable's name. */
|
|
38
|
+
env: z.string().min(1),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* A key reached through a capability a box member declares as brokered
|
|
42
|
+
* (`box.capabilities` in `chant.workspace.json`, #2726). The capability must be
|
|
43
|
+
* declared and name a broker, or the call is refused.
|
|
44
|
+
*/
|
|
45
|
+
export const brokeredKeySchema = z.strictObject({
|
|
46
|
+
/** The capability's name in the box block, such as `inference`. */
|
|
47
|
+
capability: z.string().min(1),
|
|
48
|
+
/** The member whose box declares it. Without it, the one member that declares the capability. */
|
|
49
|
+
member: z.string().min(1).optional(),
|
|
50
|
+
/**
|
|
51
|
+
* The environment variable the broker sets with the scoped key. Without it,
|
|
52
|
+
* the broker is the endpoint and adds the key itself, so none is sent.
|
|
53
|
+
*/
|
|
54
|
+
env: z.string().min(1).optional(),
|
|
55
|
+
});
|
|
56
|
+
export const keySchema = z.union([envKeySchema, brokeredKeySchema]);
|
|
57
|
+
export const backendSchema = z.strictObject({
|
|
58
|
+
/** The server's base URL. `/v1/systemone` is appended. */
|
|
59
|
+
url: z.string().min(1),
|
|
60
|
+
/** Where the bearer key comes from. Omitted for a server that takes none, such as a local one. */
|
|
61
|
+
key: keySchema.optional(),
|
|
62
|
+
/** How long to wait for an answer before the backend counts as unreachable, in milliseconds. Default 30000. */
|
|
63
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
64
|
+
});
|
|
65
|
+
export const decideConfigSchema = z.strictObject({
|
|
66
|
+
/** Backend name, as a point's model decider names it, to the backend. */
|
|
67
|
+
backends: z.record(z.string(), backendSchema).optional(),
|
|
68
|
+
});
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A point's inputs, read through the read contract.
|
|
3
|
+
*
|
|
4
|
+
* A point names each input as a read-contract output, optionally with a
|
|
5
|
+
* dotted field: `work-item.criteria` is the `criteria` field of a work item as
|
|
6
|
+
* `records --json` lists it (#2738). The decide activity takes, for each
|
|
7
|
+
* output, what to read (`read: { "work-item": "W-002" }`), reads it the way
|
|
8
|
+
* the read contract does, and gives each input its field. Values passed in
|
|
9
|
+
* `inputs` are taken as given and win over read ones.
|
|
10
|
+
*
|
|
11
|
+
* Read by id or name here:
|
|
12
|
+
*
|
|
13
|
+
* record, decision, work-item a record, by id, from the declared record kinds (`records --json`);
|
|
14
|
+
* a work item also has its size, `criteria`, `files`, `words` and
|
|
15
|
+
* `fits_<tier>`, for the slice-tier point (`../workspace/work-size.ts`, #3150)
|
|
16
|
+
* member a member, by name (`ls --json`)
|
|
17
|
+
*
|
|
18
|
+
* The other outputs a point may name (finding, region, commit, node, gate, release,
|
|
19
|
+
* environment, component) are passed in `inputs`, as the output printed them.
|
|
20
|
+
* These reads never call a model, and never write. The module loads code
|
|
21
|
+
* under `workspace/`, so the `decide` activity imports it on first call.
|
|
22
|
+
*/
|
|
23
|
+
import { declaredKindFiles, queryDeclaredRecords } from "../workspace/records-cli.js";
|
|
24
|
+
import { listWorkspace } from "../workspace/ls.js";
|
|
25
|
+
import { inputOutput } from "../workspace/points.js";
|
|
26
|
+
import { readFileSync } from "node:fs";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { bodyText, loadRecordKind } from "../workspace/records.js";
|
|
29
|
+
import { locateWorkspace } from "../workspace/which-chant.js";
|
|
30
|
+
import { DEFAULT_TIER_LIMITS, measureWorkItem, sizeFields } from "../workspace/work-size.js";
|
|
31
|
+
/** The outputs {@link readInputs} reads by id or name. */
|
|
32
|
+
export const READABLE_OUTPUTS = ["record", "decision", "work-item", "member"];
|
|
33
|
+
/** One output a decide step asked to read that could not be read. */
|
|
34
|
+
export class InputReadError extends Error {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "InputReadError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** A field of `value` by dotted path, or undefined. */
|
|
41
|
+
export function fieldOf(value, path) {
|
|
42
|
+
let at = value;
|
|
43
|
+
for (const part of path.split(".")) {
|
|
44
|
+
if (at === null || typeof at !== "object" || !Object.prototype.hasOwnProperty.call(at, part))
|
|
45
|
+
return undefined;
|
|
46
|
+
at = at[part];
|
|
47
|
+
}
|
|
48
|
+
return at;
|
|
49
|
+
}
|
|
50
|
+
async function readRecord(id, cwd, output) {
|
|
51
|
+
const files = declaredKindFiles(cwd);
|
|
52
|
+
const set = await queryDeclaredRecords(files, { cwd });
|
|
53
|
+
const unread = [];
|
|
54
|
+
for (const [i, doc] of set.kinds.entries()) {
|
|
55
|
+
if ("error" in doc) {
|
|
56
|
+
unread.push(`${doc.declared.path}: ${doc.error.code}`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const found = doc.records.find((r) => r.id === id);
|
|
60
|
+
if (found) {
|
|
61
|
+
const record = found;
|
|
62
|
+
// A work item's size, for the slice-tier point (#3150): criteria, files, words and fits_<tier>.
|
|
63
|
+
return output === "work-item" ? { ...record, ...(await workItemSizeFields(files[i].file, found.path, found.data, cwd)) } : record;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw new InputReadError(`no declared record kind holds a record with id ${id} (read for ${output})${unread.length ? `; not read: ${unread.join(", ")}` : ""}`);
|
|
67
|
+
}
|
|
68
|
+
/** The size fields of a work item of the kind at `kindFile`, measured from its record file. Empty for a kind with no work block. */
|
|
69
|
+
async function workItemSizeFields(kindFile, path, data, cwd) {
|
|
70
|
+
const loaded = await loadRecordKind(kindFile, cwd);
|
|
71
|
+
const work = loaded.kind.work;
|
|
72
|
+
if (!work)
|
|
73
|
+
return {};
|
|
74
|
+
const located = locateWorkspace(cwd);
|
|
75
|
+
let body = "";
|
|
76
|
+
try {
|
|
77
|
+
body = bodyText(readFileSync(join(located.top ?? located.rootOnDisk, ...path.split("/")), "utf-8"));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// A record that can't be read again is measured from its front matter alone.
|
|
81
|
+
}
|
|
82
|
+
const size = measureWorkItem(data, body, work.acceptance?.field ?? "acceptance");
|
|
83
|
+
return sizeFields(size, work.tier?.limits ?? DEFAULT_TIER_LIMITS);
|
|
84
|
+
}
|
|
85
|
+
function readMember(name, cwd) {
|
|
86
|
+
const doc = listWorkspace({ cwd });
|
|
87
|
+
if ("error" in doc)
|
|
88
|
+
throw new InputReadError(`the workspace can't be listed: ${doc.error.code}: ${doc.error.message}`);
|
|
89
|
+
const found = doc.members.find((m) => m.name === name);
|
|
90
|
+
if (!found)
|
|
91
|
+
throw new InputReadError(`the workspace has no member named ${name}`);
|
|
92
|
+
return found;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The value of one declared input from what was read for its output. A
|
|
96
|
+
* record's field is looked up in its front matter first, then in the record
|
|
97
|
+
* as `records --json` lists it (`state`, `valid`, `path`...). An input with no
|
|
98
|
+
* field is the whole value.
|
|
99
|
+
*/
|
|
100
|
+
function inputValue(input, output, read) {
|
|
101
|
+
const field = input.length > output.length ? input.slice(output.length + 1) : "";
|
|
102
|
+
if (field === "")
|
|
103
|
+
return read;
|
|
104
|
+
if (output === "member")
|
|
105
|
+
return fieldOf(read, field);
|
|
106
|
+
const fromData = fieldOf(read.data, field);
|
|
107
|
+
return fromData !== undefined ? fromData : fieldOf(read, field);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Read each output `read` names, and give the point's inputs that name it
|
|
111
|
+
* their values. Throws an {@link InputReadError} for an output this does not
|
|
112
|
+
* read, one the point does not name, or an id that is not there.
|
|
113
|
+
*/
|
|
114
|
+
export async function readInputs(declared, read, cwd) {
|
|
115
|
+
const named = new Set(declared.map(inputOutput));
|
|
116
|
+
for (const output of Object.keys(read)) {
|
|
117
|
+
if (!READABLE_OUTPUTS.includes(output)) {
|
|
118
|
+
throw new InputReadError(`${output} is not read by id here; pass its values in inputs, as the read contract printed them (read takes ${READABLE_OUTPUTS.join(", ")})`);
|
|
119
|
+
}
|
|
120
|
+
if (!named.has(output))
|
|
121
|
+
throw new InputReadError(`the point reads no ${output} input (its inputs are ${declared.join(", ")})`);
|
|
122
|
+
}
|
|
123
|
+
const values = new Map();
|
|
124
|
+
for (const [output, id] of Object.entries(read)) {
|
|
125
|
+
values.set(output, output === "member" ? readMember(id, cwd) : await readRecord(id, cwd, output));
|
|
126
|
+
}
|
|
127
|
+
const inputs = {};
|
|
128
|
+
const missing = [];
|
|
129
|
+
for (const input of declared) {
|
|
130
|
+
const output = inputOutput(input);
|
|
131
|
+
const value = values.get(output);
|
|
132
|
+
if (value === undefined)
|
|
133
|
+
continue;
|
|
134
|
+
const v = inputValue(input, output, value);
|
|
135
|
+
if (v === undefined)
|
|
136
|
+
missing.push(input);
|
|
137
|
+
else
|
|
138
|
+
inputs[input] = v;
|
|
139
|
+
}
|
|
140
|
+
return { inputs, missing };
|
|
141
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/op/discover.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/op/discover.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG1E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA6GD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6CrF;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,wCAAwC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2GAA2G;IAC3G,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA2C/F"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { getRuntime } from "../runtime-adapter.js";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { walkDiscovery, workspaceMemberDirs } from "../discovery/walk.js";
|
|
5
|
+
import { hasDiscoveryMarkerSync } from "../discovery/files.js";
|
|
6
|
+
import { resolveDiscoveryGlobs } from "../config.js";
|
|
7
|
+
import { isStewardDeclaration } from "./steward.js";
|
|
8
|
+
import { ensureTypeScriptLoader } from "../ts-loader.js";
|
|
9
|
+
async function findGitRoot(cwd) {
|
|
10
|
+
const rt = getRuntime();
|
|
11
|
+
const result = await rt.spawn(["git", "rev-parse", "--show-toplevel"], { cwd });
|
|
12
|
+
if (result.exitCode !== 0)
|
|
13
|
+
throw new Error("Not in a git repository");
|
|
14
|
+
return result.stdout.trim();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The root the `*.op.ts` scan starts from (#2058): the nearest chant project
|
|
18
|
+
* root — the directory holding `chant.config.ts`/`chant.config.json`, walking
|
|
19
|
+
* up from `cwd` and never past the git root. #1675's convention keeps Op
|
|
20
|
+
* files OUTSIDE `sourceDir` (`ops/` beside `src/`), which is why discovery
|
|
21
|
+
* walks up at all — but "up" used to mean the git root unconditionally, so a
|
|
22
|
+
* chant project nested in a larger checkout (a monorepo, behold's committed
|
|
23
|
+
* examples) discovered every SIBLING project's Ops as its own. The config
|
|
24
|
+
* file is the project boundary, the same one entity discovery respects.
|
|
25
|
+
* With no config anywhere up to the git root, the git root stands —
|
|
26
|
+
* #1675's original scope, kept for configless layouts.
|
|
27
|
+
*/
|
|
28
|
+
async function findDiscoveryRoot(cwd) {
|
|
29
|
+
const gitRoot = resolve(await findGitRoot(cwd));
|
|
30
|
+
let dir = resolve(cwd ?? process.cwd());
|
|
31
|
+
for (;;) {
|
|
32
|
+
if (existsSync(join(dir, "chant.config.ts")) || existsSync(join(dir, "chant.config.json")))
|
|
33
|
+
return dir;
|
|
34
|
+
if (dir === gitRoot)
|
|
35
|
+
break;
|
|
36
|
+
const parent = dirname(dir);
|
|
37
|
+
if (parent === dir)
|
|
38
|
+
break; // filesystem root — cwd was outside the git root
|
|
39
|
+
dir = parent;
|
|
40
|
+
}
|
|
41
|
+
return gitRoot;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Every `*.op.ts` file below the Op root, through the one discovery walk
|
|
45
|
+
* (`../discovery/walk.ts`, #2527). The walk down stops at child projects
|
|
46
|
+
* whatever the root is, so a configless layout whose Op root is the git root
|
|
47
|
+
* no longer collects its sibling projects' Ops. The project's
|
|
48
|
+
* `exclude`/`include` globs and the skip marker apply.
|
|
49
|
+
*/
|
|
50
|
+
async function collectOpFiles(root) {
|
|
51
|
+
return walkDiscovery({
|
|
52
|
+
walker: "ops",
|
|
53
|
+
root,
|
|
54
|
+
globs: await resolveDiscoveryGlobs(root),
|
|
55
|
+
excludeDirs: await workspaceMemberDirs(root),
|
|
56
|
+
accept: (name, full) => name.endsWith(".op.ts") && !name.endsWith(".test.ts") && !name.endsWith(".spec.ts") && !hasDiscoveryMarkerSync(full),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** The `OpConfig` behind an exported value, or `undefined` when the value is not an Op. An Op entity carries its config on `.props` (`./resource.ts`); `name` and `phases` are what every consumer of a discovered Op reads. */
|
|
60
|
+
function opConfigOf(value) {
|
|
61
|
+
if (!value || typeof value !== "object")
|
|
62
|
+
return undefined;
|
|
63
|
+
const config = value.props;
|
|
64
|
+
if (!config || typeof config.name !== "string" || !Array.isArray(config.phases))
|
|
65
|
+
return undefined;
|
|
66
|
+
return config;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Every Op a module exports, default first (#2171).
|
|
70
|
+
*
|
|
71
|
+
* Discovery used to read `mod.default` and nothing else, which made
|
|
72
|
+
* `export default op` the only shape a runnable Op could take. That is also
|
|
73
|
+
* the one export shape the fold path refuses (`../discovery/fold-import.ts`
|
|
74
|
+
* scans for it by name and falls the whole file back to run), so an Op living
|
|
75
|
+
* under a project's `sourceDir` cost that project its fold coverage, and took
|
|
76
|
+
* every file importing it down too. Accepting a named export removes the
|
|
77
|
+
* conflict without moving the fold's rule: the default export still works, so
|
|
78
|
+
* every Op file written against the documented shape keeps running unchanged.
|
|
79
|
+
*
|
|
80
|
+
* Non-Op exports are skipped in silence, not reported. An Op file is ordinary
|
|
81
|
+
* TypeScript and may export a helper, a config literal or a type alongside its
|
|
82
|
+
* Op; only a file exporting no Op at all is worth an error.
|
|
83
|
+
*
|
|
84
|
+
* A file may carry more than one Op, and each is registered on its own. Ops
|
|
85
|
+
* are keyed by their declared `config.name`, never by the export name or the
|
|
86
|
+
* file, so two Ops in one file are no more ambiguous to `chant run` than two
|
|
87
|
+
* Ops in two files, and the duplicate-name check in {@link discoverOps}
|
|
88
|
+
* covers both the same way. The same object exported twice (`export default
|
|
89
|
+
* op` alongside `export { op }`) is one Op, deduplicated by identity, not a
|
|
90
|
+
* self-collision.
|
|
91
|
+
*
|
|
92
|
+
* Export order is the module namespace's own: `default` first by construction
|
|
93
|
+
* here, then the named exports, which the ECMAScript specification requires a
|
|
94
|
+
* namespace object to enumerate in sorted order. So the discovered set is
|
|
95
|
+
* deterministic across runs and platforms.
|
|
96
|
+
*/
|
|
97
|
+
function opsExportedBy(mod) {
|
|
98
|
+
const found = [];
|
|
99
|
+
const seen = new Set();
|
|
100
|
+
const consider = (exportName, value) => {
|
|
101
|
+
if (seen.has(value))
|
|
102
|
+
return;
|
|
103
|
+
const config = opConfigOf(value);
|
|
104
|
+
if (!config)
|
|
105
|
+
return;
|
|
106
|
+
seen.add(value);
|
|
107
|
+
found.push({ exportName, config });
|
|
108
|
+
};
|
|
109
|
+
consider("default", mod.default);
|
|
110
|
+
for (const exportName of Object.keys(mod)) {
|
|
111
|
+
if (exportName === "default")
|
|
112
|
+
continue;
|
|
113
|
+
consider(exportName, mod[exportName]);
|
|
114
|
+
}
|
|
115
|
+
return found;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Discover all Op definitions from `*.op.ts` files under the nearest chant
|
|
119
|
+
* project root (the directory holding `chant.config.ts`/`.json`, walking up
|
|
120
|
+
* from `cwd`), or under the git root when no config exists — see
|
|
121
|
+
* {@link findDiscoveryRoot} (#2058).
|
|
122
|
+
*
|
|
123
|
+
* An Op may be the file's default export or a named one, and a file may hold
|
|
124
|
+
* several. See {@link opsExportedBy} (#2171).
|
|
125
|
+
*/
|
|
126
|
+
export async function discoverOps(opts) {
|
|
127
|
+
const errors = [];
|
|
128
|
+
const ops = new Map();
|
|
129
|
+
const root = await findDiscoveryRoot(opts?.cwd);
|
|
130
|
+
const files = await collectOpFiles(root);
|
|
131
|
+
const nameToFile = new Map();
|
|
132
|
+
for (const filePath of files) {
|
|
133
|
+
try {
|
|
134
|
+
ensureTypeScriptLoader();
|
|
135
|
+
const mod = (await import(filePath));
|
|
136
|
+
const exported = opsExportedBy(mod);
|
|
137
|
+
// A file may hold a steward and no Op (#2731): the steward sits beside
|
|
138
|
+
// the Ops it runs, and `discoverStewards` reads it from here.
|
|
139
|
+
if (exported.length === 0 && Object.values(mod).some(isStewardDeclaration))
|
|
140
|
+
continue;
|
|
141
|
+
if (exported.length === 0) {
|
|
142
|
+
errors.push(`${filePath}: exports no Op. Expected \`export default Op({...})\` or a named export such as \`export const deploy = Op({...})\``);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
for (const { exportName, config } of exported) {
|
|
146
|
+
const priorFile = nameToFile.get(config.name);
|
|
147
|
+
if (priorFile !== undefined) {
|
|
148
|
+
errors.push(priorFile === filePath
|
|
149
|
+
? `Duplicate Op name "${config.name}" declared twice in ${filePath}`
|
|
150
|
+
: `Duplicate Op name "${config.name}" in ${filePath} and ${priorFile}`);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
nameToFile.set(config.name, filePath);
|
|
154
|
+
ops.set(config.name, { config, filePath, exportName });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
errors.push(`${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { ops, errors };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Every steward declared in the project's `*.op.ts` files (#2731), found the
|
|
165
|
+
* way {@link discoverOps} finds Ops, keyed by the steward's name.
|
|
166
|
+
*
|
|
167
|
+
* Refuses, as errors, the two ways a project could end up with two writers:
|
|
168
|
+
* two stewards of one name, and one Op listed by two stewards. The steward
|
|
169
|
+
* declared first (in file walk order) keeps its entry; the other is dropped
|
|
170
|
+
* and reported in `conflicts`.
|
|
171
|
+
*/
|
|
172
|
+
export async function discoverStewards(opts) {
|
|
173
|
+
const errors = [];
|
|
174
|
+
const conflicts = [];
|
|
175
|
+
const stewards = new Map();
|
|
176
|
+
const opOwner = new Map();
|
|
177
|
+
const root = await findDiscoveryRoot(opts?.cwd);
|
|
178
|
+
const files = await collectOpFiles(root);
|
|
179
|
+
for (const filePath of files) {
|
|
180
|
+
let mod;
|
|
181
|
+
try {
|
|
182
|
+
ensureTypeScriptLoader();
|
|
183
|
+
mod = (await import(filePath));
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
errors.push(`${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const seen = new Set();
|
|
190
|
+
const exportNames = ["default", ...Object.keys(mod).filter((k) => k !== "default")];
|
|
191
|
+
for (const exportName of exportNames) {
|
|
192
|
+
const value = mod[exportName];
|
|
193
|
+
if (!isStewardDeclaration(value) || seen.has(value))
|
|
194
|
+
continue;
|
|
195
|
+
seen.add(value);
|
|
196
|
+
const prior = stewards.get(value.name);
|
|
197
|
+
if (prior) {
|
|
198
|
+
conflicts.push(`Duplicate steward "${value.name}" in ${filePath} and ${prior.filePath}`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const claimed = value.ops.find((op) => opOwner.has(op.name));
|
|
202
|
+
if (claimed) {
|
|
203
|
+
conflicts.push(`${filePath}: steward "${value.name}" lists op "${claimed.name}", which steward "${opOwner.get(claimed.name)}" already runs. ` +
|
|
204
|
+
`Two stewards running one Op are two writers; list it on one of them.`);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
for (const op of value.ops)
|
|
208
|
+
opOwner.set(op.name, value.name);
|
|
209
|
+
stewards.set(value.name, { declaration: value, filePath, exportName });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return { stewards, errors, conflicts };
|
|
213
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 function parseDuration(s) {
|
|
11
|
+
const units = { ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000 };
|
|
12
|
+
let total = 0;
|
|
13
|
+
let matched = false;
|
|
14
|
+
for (const m of s.matchAll(/(\d+)(ms|s|m|h|d)/g)) {
|
|
15
|
+
total += Number(m[1]) * units[m[2]];
|
|
16
|
+
matched = true;
|
|
17
|
+
}
|
|
18
|
+
if (!matched)
|
|
19
|
+
throw new Error(`unparseable duration: "${s}"`);
|
|
20
|
+
return total;
|
|
21
|
+
}
|