@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { readSnapshot } from "../../lifecycle/git.js";
|
|
3
|
+
import { build } from "../../build.js";
|
|
4
|
+
import { computeBuildDigest, diffDigests } from "../../lifecycle/digest.js";
|
|
5
|
+
import { takeSnapshot } from "../../lifecycle/snapshot.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create lifecycle-snapshot tool definition and handler
|
|
8
|
+
*/
|
|
9
|
+
export function createSnapshotTool(plugins) {
|
|
10
|
+
return {
|
|
11
|
+
definition: {
|
|
12
|
+
name: "lifecycle-snapshot",
|
|
13
|
+
description: "Capture deployed state for an environment",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
environment: { type: "string", description: "Target environment" },
|
|
18
|
+
lexicon: { type: "string", description: "Optional — snapshot all lexicons if omitted" },
|
|
19
|
+
},
|
|
20
|
+
required: ["environment"],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
handler: async (params) => {
|
|
24
|
+
const env = params.environment;
|
|
25
|
+
const lexiconFilter = params.lexicon;
|
|
26
|
+
const targetPlugins = lexiconFilter
|
|
27
|
+
? plugins.filter((p) => p.name === lexiconFilter)
|
|
28
|
+
: plugins;
|
|
29
|
+
const pluginsWithDescribe = targetPlugins.filter((p) => p.describeResources);
|
|
30
|
+
if (pluginsWithDescribe.length === 0)
|
|
31
|
+
return "No plugins implement describeResources";
|
|
32
|
+
const serializers = plugins.map((p) => p.serializer);
|
|
33
|
+
const buildResult = await build(resolve("."), serializers);
|
|
34
|
+
if (buildResult.errors.length > 0)
|
|
35
|
+
return "Build failed";
|
|
36
|
+
const result = await takeSnapshot(env, pluginsWithDescribe, buildResult);
|
|
37
|
+
return { snapshots: result.snapshots.length, warnings: result.warnings, errors: result.errors };
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create lifecycle-diff tool definition and handler
|
|
43
|
+
*/
|
|
44
|
+
export function createDiffTool(plugins) {
|
|
45
|
+
return {
|
|
46
|
+
definition: {
|
|
47
|
+
name: "lifecycle-diff",
|
|
48
|
+
description: "Compare current build declarations against last snapshot's digest",
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: "object",
|
|
51
|
+
properties: {
|
|
52
|
+
environment: { type: "string", description: "Target environment" },
|
|
53
|
+
lexicon: { type: "string", description: "Optional — diff all lexicons if omitted" },
|
|
54
|
+
},
|
|
55
|
+
required: ["environment"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
handler: async (params) => {
|
|
59
|
+
const env = params.environment;
|
|
60
|
+
const lexiconFilter = params.lexicon;
|
|
61
|
+
const serializers = plugins.map((p) => p.serializer);
|
|
62
|
+
const buildResult = await build(resolve("."), serializers);
|
|
63
|
+
if (buildResult.errors.length > 0)
|
|
64
|
+
return "Build failed";
|
|
65
|
+
const currentDigest = computeBuildDigest(buildResult);
|
|
66
|
+
const lexicons = lexiconFilter ? [lexiconFilter] : buildResult.manifest.lexicons;
|
|
67
|
+
const results = {};
|
|
68
|
+
for (const lex of lexicons) {
|
|
69
|
+
const content = await readSnapshot(env, lex);
|
|
70
|
+
let previousDigest = undefined;
|
|
71
|
+
if (content) {
|
|
72
|
+
const snapshot = JSON.parse(content);
|
|
73
|
+
previousDigest = snapshot.digest;
|
|
74
|
+
}
|
|
75
|
+
results[lex] = diffDigests(currentDigest, previousDigest);
|
|
76
|
+
}
|
|
77
|
+
return results;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools over Ops — on the runtime seam (#2121), not on any one runtime's
|
|
3
|
+
* own client.
|
|
4
|
+
*
|
|
5
|
+
* Every tool here goes through an {@link OpRuntimeProvider} — the built-in
|
|
6
|
+
* `local` one by default, or the `runtime` argument's lexicon `opRuntime` when
|
|
7
|
+
* an agent names one. One provider is built per call, so a long-lived server
|
|
8
|
+
* picks up a project's config as it is now rather than as it was at boot; the
|
|
9
|
+
* local provider's in-process run history is the exception and is held for the
|
|
10
|
+
* life of the module, so `op-status` can answer for a run `op-run` started.
|
|
11
|
+
*
|
|
12
|
+
* #2118 owns the ledger-backed record shape; when it lands, `status`/`log`
|
|
13
|
+
* read the ledger and this file stops depending on the process outliving the
|
|
14
|
+
* run.
|
|
15
|
+
*/
|
|
16
|
+
import { lexiconNames } from "../../lexicon-module.js";
|
|
17
|
+
import { resolve } from "node:path";
|
|
18
|
+
import { discoverOps } from "../../op/discover.js";
|
|
19
|
+
import { createLocalOpRuntime } from "../../op/runtimes/local.js";
|
|
20
|
+
import { loadChantConfig } from "../../config.js";
|
|
21
|
+
import { loadPlugins } from "../plugins.js";
|
|
22
|
+
import { readGateLedger, latestPendingGate } from "../../lifecycle/gate-ledger.js";
|
|
23
|
+
import { recordGateApproval } from "../handlers/operator.js";
|
|
24
|
+
/** The `local` provider, shared so an `op-run` is visible to a later `op-status`. */
|
|
25
|
+
let localRuntime;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the runtime a tool call addresses. `runtime` names a configured
|
|
28
|
+
* lexicon's `opRuntime`; omitted (or `local`) it is core's built-in provider.
|
|
29
|
+
* Throws with an actionable message — the MCP layer turns that into `isError`.
|
|
30
|
+
*/
|
|
31
|
+
async function runtimeFor(name) {
|
|
32
|
+
const wanted = typeof name === "string" && name.length > 0 ? name : "local";
|
|
33
|
+
if (wanted === "local") {
|
|
34
|
+
localRuntime ?? (localRuntime = createLocalOpRuntime({ projectPath: resolve(".") }));
|
|
35
|
+
return localRuntime;
|
|
36
|
+
}
|
|
37
|
+
const configured = await loadChantConfig(resolve("."))
|
|
38
|
+
.then(({ config }) => lexiconNames(config.lexicons ?? []))
|
|
39
|
+
.catch(() => []);
|
|
40
|
+
if (!configured.includes(wanted)) {
|
|
41
|
+
throw new Error(`runtime "${wanted}" is not a configured lexicon` +
|
|
42
|
+
(configured.length > 0 ? ` (configured: ${configured.join(", ")})` : ""));
|
|
43
|
+
}
|
|
44
|
+
const plugin = (await loadPlugins([wanted]))[0];
|
|
45
|
+
if (!plugin?.opRuntime)
|
|
46
|
+
throw new Error(`lexicon "${wanted}" does not host Op runs`);
|
|
47
|
+
return plugin.opRuntime;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The refusal for an Op that declares `neverOverMcp`, or `undefined` when MCP
|
|
51
|
+
* may act on it. It names the rule and the way through, which is a person at a
|
|
52
|
+
* shell. An Op that is not discovered is left to the caller's own not-found
|
|
53
|
+
* handling.
|
|
54
|
+
*/
|
|
55
|
+
async function neverOverMcpRefusal(name, action, gate) {
|
|
56
|
+
const { ops } = await discoverOps();
|
|
57
|
+
let declared = Boolean(ops.get(name)?.config.neverOverMcp);
|
|
58
|
+
// An Op that is not discovered (fan-out) declares nothing, so its gate
|
|
59
|
+
// records the rule itself (chant#3485).
|
|
60
|
+
if (!declared && action === "approve" && gate !== undefined) {
|
|
61
|
+
const { pending } = await readGateLedger(name).catch(() => ({ pending: [] }));
|
|
62
|
+
declared = Boolean(latestPendingGate(pending, gate)?.neverOverMcp);
|
|
63
|
+
}
|
|
64
|
+
if (!declared)
|
|
65
|
+
return undefined;
|
|
66
|
+
return action === "run"
|
|
67
|
+
? `Op "${name}" declares neverOverMcp, so it is not run over MCP. Run it at a shell with \`chant run ${name}\`; op-status and op-report still answer here.`
|
|
68
|
+
: `Op "${name}" declares neverOverMcp, so its gates are not resolved over MCP, whichever channel reached them. ` +
|
|
69
|
+
`Approvals belong to people: approve at a shell with \`chant approve ${name} <gate>\`.`;
|
|
70
|
+
}
|
|
71
|
+
const RUNTIME_PARAM = {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: 'Runtime to address: a lexicon name with an opRuntime, or "local" (the default)',
|
|
74
|
+
};
|
|
75
|
+
export function createOpListTool() {
|
|
76
|
+
return {
|
|
77
|
+
definition: {
|
|
78
|
+
name: "op-list",
|
|
79
|
+
description: "List all Op definitions discovered from *.op.ts files with their current run state",
|
|
80
|
+
inputSchema: {
|
|
81
|
+
type: "object",
|
|
82
|
+
properties: {
|
|
83
|
+
runtime: RUNTIME_PARAM,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
handler: async (params) => {
|
|
88
|
+
const { ops, errors } = await discoverOps();
|
|
89
|
+
let states = new Map();
|
|
90
|
+
try {
|
|
91
|
+
const runtime = await runtimeFor(params.runtime);
|
|
92
|
+
states = await runtime.list([...ops.values()].map((d) => d.config));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Runtime unavailable — the definitions are still worth listing.
|
|
96
|
+
}
|
|
97
|
+
const result = [];
|
|
98
|
+
for (const [name, { config }] of ops) {
|
|
99
|
+
result.push({
|
|
100
|
+
name,
|
|
101
|
+
overview: config.overview,
|
|
102
|
+
phases: config.phases.length,
|
|
103
|
+
labels: config.labels ?? {},
|
|
104
|
+
depends: config.depends ?? [],
|
|
105
|
+
runState: states.get(name)?.state ?? "—",
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return { ops: result, errors };
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function createOpRunTool() {
|
|
113
|
+
return {
|
|
114
|
+
definition: {
|
|
115
|
+
name: "op-run",
|
|
116
|
+
description: "Run an Op on a runtime and return its result. Defaults to the built-in local runtime, which executes the Op in this process. " +
|
|
117
|
+
"Refuses an Op that declares neverOverMcp.",
|
|
118
|
+
inputSchema: {
|
|
119
|
+
type: "object",
|
|
120
|
+
properties: {
|
|
121
|
+
name: { type: "string", description: "Op name (e.g. alb-deploy)" },
|
|
122
|
+
// chant#3560 — what `chant run --env` passes: the environment the
|
|
123
|
+
// run targets. Omitted, the runtime uses its own default.
|
|
124
|
+
env: { type: "string", description: "Environment the run targets (defaults to the runtime's own)" },
|
|
125
|
+
runtime: RUNTIME_PARAM,
|
|
126
|
+
},
|
|
127
|
+
required: ["name"],
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
handler: async (params) => {
|
|
131
|
+
const name = params.name;
|
|
132
|
+
const { ops } = await discoverOps();
|
|
133
|
+
const refusal = await neverOverMcpRefusal(name, "run");
|
|
134
|
+
if (refusal)
|
|
135
|
+
throw new Error(refusal);
|
|
136
|
+
if (!ops.has(name)) {
|
|
137
|
+
const available = [...ops.keys()];
|
|
138
|
+
return `Op "${name}" not found. Available: ${available.join(", ") || "none"}`;
|
|
139
|
+
}
|
|
140
|
+
const runtime = await runtimeFor(params.runtime);
|
|
141
|
+
const env = typeof params.env === "string" && params.env !== "" ? params.env : undefined;
|
|
142
|
+
const handle = await runtime.start(ops.get(name).config, env !== undefined ? { env } : {});
|
|
143
|
+
const status = await handle.result();
|
|
144
|
+
return {
|
|
145
|
+
op: status.op,
|
|
146
|
+
runId: status.runId,
|
|
147
|
+
state: status.state,
|
|
148
|
+
startedAt: status.startedAt,
|
|
149
|
+
endedAt: status.endedAt ?? null,
|
|
150
|
+
...(status.records ? { records: status.records } : {}),
|
|
151
|
+
...(status.gate ? { gate: status.gate } : {}),
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export function createOpStatusTool() {
|
|
157
|
+
return {
|
|
158
|
+
definition: {
|
|
159
|
+
name: "op-status",
|
|
160
|
+
description: "Return the current run state of an Op on a runtime",
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: "object",
|
|
163
|
+
properties: {
|
|
164
|
+
name: { type: "string", description: "Op name (e.g. alb-deploy)" },
|
|
165
|
+
runtime: RUNTIME_PARAM,
|
|
166
|
+
},
|
|
167
|
+
required: ["name"],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
handler: async (params) => {
|
|
171
|
+
const name = params.name;
|
|
172
|
+
const { ops } = await discoverOps();
|
|
173
|
+
if (!ops.has(name))
|
|
174
|
+
throw new Error(`Op "${name}" not found`);
|
|
175
|
+
const runtime = await runtimeFor(params.runtime);
|
|
176
|
+
const status = await runtime.status(name);
|
|
177
|
+
if (!status)
|
|
178
|
+
return { op: name, runtime: runtime.name, state: null, message: "no run recorded" };
|
|
179
|
+
return {
|
|
180
|
+
op: status.op,
|
|
181
|
+
runtime: runtime.name,
|
|
182
|
+
runId: status.runId,
|
|
183
|
+
state: status.state,
|
|
184
|
+
startedAt: status.startedAt,
|
|
185
|
+
endedAt: status.endedAt ?? null,
|
|
186
|
+
...(status.records ? { records: status.records } : {}),
|
|
187
|
+
gate: status.gate ?? null,
|
|
188
|
+
};
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export function createOpApproveTool() {
|
|
193
|
+
return {
|
|
194
|
+
definition: {
|
|
195
|
+
name: "op-approve",
|
|
196
|
+
description: "Record a gate's resolution on the gate ledger and wake the runtime hosting the gated run. " +
|
|
197
|
+
"Refuses a gate this same channel reached: a run started with op-run must be approved from " +
|
|
198
|
+
"somewhere else, normally `chant approve <op> <gate>` at a shell. The approver is recorded as " +
|
|
199
|
+
"unattested, because this channel cannot verify a name. Also refuses every gate of an Op that " +
|
|
200
|
+
"declares neverOverMcp, whatever channel reached the gate.",
|
|
201
|
+
inputSchema: {
|
|
202
|
+
type: "object",
|
|
203
|
+
properties: {
|
|
204
|
+
name: { type: "string", description: "Op name (e.g. alb-deploy)" },
|
|
205
|
+
gate: { type: "string", description: "Gate name (e.g. gate-dns-delegation)" },
|
|
206
|
+
// chant#2384 — no `approver`. It was free text on a channel that
|
|
207
|
+
// cannot verify one, so the model named itself whatever it liked and
|
|
208
|
+
// the ledger recorded it indistinguishably from a name a person gave.
|
|
209
|
+
note: { type: "string", description: "Free-text context recorded on the resolution" },
|
|
210
|
+
url: { type: "string", description: "Absolute http/https URL this resolution happened at" },
|
|
211
|
+
// chant#3555 — what `chant run approve --env` passes: the
|
|
212
|
+
// environment the woken run runs in. Omitted, the runtime keeps the
|
|
213
|
+
// gated run's.
|
|
214
|
+
env: { type: "string", description: "Environment the woken run runs in (defaults to the gated run's)" },
|
|
215
|
+
runtime: RUNTIME_PARAM,
|
|
216
|
+
},
|
|
217
|
+
required: ["name", "gate"],
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
handler: async (params) => {
|
|
221
|
+
const name = params.name;
|
|
222
|
+
const gate = params.gate;
|
|
223
|
+
if (!name || !gate)
|
|
224
|
+
throw new Error("op-approve needs both an Op name and a gate name");
|
|
225
|
+
const refusal = await neverOverMcpRefusal(name, "approve", gate);
|
|
226
|
+
if (refusal)
|
|
227
|
+
throw new Error(refusal);
|
|
228
|
+
const runtime = await runtimeFor(params.runtime);
|
|
229
|
+
const outcome = await recordGateApproval(name, gate, {
|
|
230
|
+
note: params.note,
|
|
231
|
+
url: params.url,
|
|
232
|
+
// Named rather than left to the ambient value, so this tool states its
|
|
233
|
+
// own channel even if it is ever registered on a server that did not.
|
|
234
|
+
origin: "mcp",
|
|
235
|
+
});
|
|
236
|
+
if (!outcome.ok) {
|
|
237
|
+
throw new Error(`Gate "${gate}" on "${name}" was not recorded. If the gate was reached over MCP, it cannot ` +
|
|
238
|
+
`also be resolved over MCP — approve it from another channel, normally ` +
|
|
239
|
+
`\`chant approve ${name} ${gate}\` at a shell.`);
|
|
240
|
+
}
|
|
241
|
+
if (runtime.resolveGate) {
|
|
242
|
+
const env = typeof params.env === "string" && params.env !== "" ? params.env : undefined;
|
|
243
|
+
if (env !== undefined)
|
|
244
|
+
await runtime.resolveGate(name, gate, outcome.record, { env });
|
|
245
|
+
else
|
|
246
|
+
await runtime.resolveGate(name, gate, outcome.record);
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
op: name,
|
|
250
|
+
gate,
|
|
251
|
+
resolvedBy: outcome.record.resolvedBy,
|
|
252
|
+
origin: outcome.record.origin,
|
|
253
|
+
timestamp: outcome.record.timestamp,
|
|
254
|
+
runtimeNotified: Boolean(runtime.resolveGate),
|
|
255
|
+
};
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
export function createOpReportTool() {
|
|
260
|
+
return {
|
|
261
|
+
definition: {
|
|
262
|
+
name: "op-report",
|
|
263
|
+
description: "Return a markdown report for the latest run of an Op on a runtime",
|
|
264
|
+
inputSchema: {
|
|
265
|
+
type: "object",
|
|
266
|
+
properties: {
|
|
267
|
+
name: { type: "string", description: "Op name (e.g. alb-deploy)" },
|
|
268
|
+
runtime: RUNTIME_PARAM,
|
|
269
|
+
},
|
|
270
|
+
required: ["name"],
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
handler: async (params) => {
|
|
274
|
+
const name = params.name;
|
|
275
|
+
const { ops } = await discoverOps();
|
|
276
|
+
if (!ops.has(name))
|
|
277
|
+
return `Op "${name}" not found`;
|
|
278
|
+
const { config } = ops.get(name);
|
|
279
|
+
const runtime = await runtimeFor(params.runtime);
|
|
280
|
+
const status = await runtime.status(name);
|
|
281
|
+
if (!status)
|
|
282
|
+
return `# ${name}\n\n${config.overview}\n\nNo run is recorded on the "${runtime.name}" runtime.\n`;
|
|
283
|
+
const lines = [
|
|
284
|
+
`# ${name}`,
|
|
285
|
+
"",
|
|
286
|
+
config.overview,
|
|
287
|
+
"",
|
|
288
|
+
`- Runtime: ${runtime.name}`,
|
|
289
|
+
`- Run: ${status.runId}`,
|
|
290
|
+
`- State: ${status.state}`,
|
|
291
|
+
`- Started: ${status.startedAt}`,
|
|
292
|
+
...(status.endedAt ? [`- Ended: ${status.endedAt}`] : []),
|
|
293
|
+
...(status.gate ? [`- Gate: ${status.gate.name} (pending since ${status.gate.since})`] : []),
|
|
294
|
+
"",
|
|
295
|
+
];
|
|
296
|
+
if (status.records?.length) {
|
|
297
|
+
lines.push("| Phase | Step | Status | Duration |", "|---|---|---|---|");
|
|
298
|
+
for (const record of status.records) {
|
|
299
|
+
lines.push(`| ${record.phase} | ${record.fn} | ${record.status} | ${record.durationMs}ms |`);
|
|
300
|
+
}
|
|
301
|
+
lines.push("");
|
|
302
|
+
}
|
|
303
|
+
return lines.join("\n");
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { resolve, join, dirname } from "node:path";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { collectComposites } from "./tools/composites.js";
|
|
4
|
+
import { getContext } from "./resources/context.js";
|
|
5
|
+
import { readSnapshot, readEnvironmentSnapshots } from "../../lifecycle/git.js";
|
|
6
|
+
import { discoverOps } from "../../op/discover.js";
|
|
7
|
+
import { createLocalOpRuntime } from "../../op/runtimes/local.js";
|
|
8
|
+
import { loadOkfBundle } from "../../okf-read.js";
|
|
9
|
+
import { loadChantConfigUpward, resolveKnowledgeDir } from "../../config.js";
|
|
10
|
+
/**
|
|
11
|
+
* Core resource definitions (always present regardless of plugins)
|
|
12
|
+
*/
|
|
13
|
+
export const coreResourceDefinitions = [
|
|
14
|
+
{
|
|
15
|
+
uri: "chant://context",
|
|
16
|
+
name: "chant Context",
|
|
17
|
+
description: "Lexicon-specific instructions and patterns for chant development",
|
|
18
|
+
mimeType: "text/markdown",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
uri: "chant://examples/list",
|
|
22
|
+
name: "Examples List",
|
|
23
|
+
description: "List of available chant examples",
|
|
24
|
+
mimeType: "application/json",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
uri: "chant://ops",
|
|
28
|
+
name: "Ops",
|
|
29
|
+
description: "All Op definitions discovered from *.op.ts files",
|
|
30
|
+
mimeType: "application/json",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
uri: "chant://ops/{name}/runs",
|
|
34
|
+
name: "Op run history",
|
|
35
|
+
description: "Run history for a named Op, newest first",
|
|
36
|
+
mimeType: "application/json",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
uri: "chant://ops/{name}/runs/latest",
|
|
40
|
+
name: "Op latest run",
|
|
41
|
+
description: "Latest run state for a named Op",
|
|
42
|
+
mimeType: "application/json",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
uri: "chant://composites",
|
|
46
|
+
name: "Composite catalog",
|
|
47
|
+
description: "Every composite the loaded lexicons export, with what each bundles and its parameters (#2662)",
|
|
48
|
+
mimeType: "application/json",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
uri: "chant://knowledge",
|
|
52
|
+
name: "Knowledge bundle",
|
|
53
|
+
description: "The project's OKF knowledge bundle (#1864, #1059): index.md and every authored concept, empty when no bundle exists",
|
|
54
|
+
mimeType: "application/json",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
uri: "chant://state/{environment}",
|
|
58
|
+
name: "State (all lexicons)",
|
|
59
|
+
description: "All lexicon snapshots for an environment",
|
|
60
|
+
mimeType: "application/json",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
uri: "chant://state/{environment}/{lexicon}",
|
|
64
|
+
name: "State (single lexicon)",
|
|
65
|
+
description: "Single lexicon snapshot for an environment",
|
|
66
|
+
mimeType: "application/json",
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Build the full resources list merging core + plugin resources
|
|
71
|
+
*/
|
|
72
|
+
export function buildResourcesList(pluginResources) {
|
|
73
|
+
const resources = [...coreResourceDefinitions];
|
|
74
|
+
for (const { definition } of pluginResources.values()) {
|
|
75
|
+
resources.push(definition);
|
|
76
|
+
}
|
|
77
|
+
return { resources };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Collect example resources from plugins whose URI contains "examples/"
|
|
81
|
+
*/
|
|
82
|
+
export function collectExamples(pluginResources) {
|
|
83
|
+
const examples = [];
|
|
84
|
+
for (const [uri, { definition }] of pluginResources.entries()) {
|
|
85
|
+
if (uri.includes("/examples/")) {
|
|
86
|
+
const name = uri.replace(/^chant:\/\/[^/]+\/examples\//, "");
|
|
87
|
+
examples.push({ name, description: definition.description });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return examples;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Handle resources/read request — checks plugin resources after core
|
|
94
|
+
*/
|
|
95
|
+
export async function handleResourcesRead(params, pluginResources, plugins = []) {
|
|
96
|
+
const uri = params.uri;
|
|
97
|
+
// The whole composite catalog (#2662), static data from each lexicon's
|
|
98
|
+
// `composites()`; the `composites` tool filters the same list.
|
|
99
|
+
if (uri === "chant://composites") {
|
|
100
|
+
return {
|
|
101
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(collectComposites(plugins), null, 2) }],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (uri === "chant://context") {
|
|
105
|
+
return {
|
|
106
|
+
contents: [
|
|
107
|
+
{
|
|
108
|
+
uri,
|
|
109
|
+
mimeType: "text/markdown",
|
|
110
|
+
text: getContext(),
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (uri === "chant://examples/list") {
|
|
116
|
+
return {
|
|
117
|
+
contents: [
|
|
118
|
+
{
|
|
119
|
+
uri,
|
|
120
|
+
mimeType: "application/json",
|
|
121
|
+
text: JSON.stringify(collectExamples(pluginResources)),
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// Authored knowledge (#1867, #1864, design #1059): same bundle the CLI's
|
|
127
|
+
// `chant explain` reads, over MCP — the resource path has no local
|
|
128
|
+
// filesystem, so this is the only way an MCP client sees the `knowledge/`
|
|
129
|
+
// directory's contents at all. Resolved from cwd, matching every other
|
|
130
|
+
// path-less resource here (`chant://ops`, `chant://state/...`). A missing
|
|
131
|
+
// bundle is not an error — `loadOkfBundle` already treats it as empty, and
|
|
132
|
+
// a missing `index.md` reads as `index: null` rather than throwing.
|
|
133
|
+
if (uri === "chant://knowledge") {
|
|
134
|
+
const cwd = resolve(".");
|
|
135
|
+
const loaded = await loadChantConfigUpward(cwd);
|
|
136
|
+
const projectRoot = loaded.configPath ? dirname(loaded.configPath) : cwd;
|
|
137
|
+
const dir = resolveKnowledgeDir(loaded.config, projectRoot);
|
|
138
|
+
const bundle = await loadOkfBundle(dir);
|
|
139
|
+
let index = null;
|
|
140
|
+
try {
|
|
141
|
+
index = await readFile(join(dir, "index.md"), "utf8");
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
index = null;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
contents: [{
|
|
148
|
+
uri,
|
|
149
|
+
mimeType: "application/json",
|
|
150
|
+
text: JSON.stringify({ dir, index, concepts: bundle.concepts }, null, 2),
|
|
151
|
+
}],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Op resources
|
|
155
|
+
if (uri === "chant://ops") {
|
|
156
|
+
const { ops } = await discoverOps();
|
|
157
|
+
const list = Array.from(ops.values()).map(({ config }) => ({
|
|
158
|
+
name: config.name,
|
|
159
|
+
overview: config.overview,
|
|
160
|
+
phases: config.phases.length,
|
|
161
|
+
labels: config.labels ?? {},
|
|
162
|
+
depends: config.depends ?? [],
|
|
163
|
+
}));
|
|
164
|
+
return {
|
|
165
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(list, null, 2) }],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Both run resources read the built-in local runtime (#2121, #2116) — the
|
|
169
|
+
// one an MCP client can address without naming a lexicon. `status` and `log`
|
|
170
|
+
// answer from the run ledger (#2118), so a run that ended in an earlier
|
|
171
|
+
// process still reads back here.
|
|
172
|
+
if (uri.startsWith("chant://ops/") && uri.endsWith("/runs/latest")) {
|
|
173
|
+
const name = uri.replace("chant://ops/", "").replace("/runs/latest", "");
|
|
174
|
+
try {
|
|
175
|
+
const status = await createLocalOpRuntime({ projectPath: resolve(".") }).status(name);
|
|
176
|
+
return {
|
|
177
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(status ?? null, null, 2) }],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
return {
|
|
182
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (uri.startsWith("chant://ops/") && uri.endsWith("/runs")) {
|
|
187
|
+
const name = uri.replace("chant://ops/", "").replace("/runs", "");
|
|
188
|
+
try {
|
|
189
|
+
const runs = await createLocalOpRuntime({ projectPath: resolve(".") }).log(name);
|
|
190
|
+
return {
|
|
191
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(runs, null, 2) }],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
return {
|
|
196
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// State resources: chant://state/{environment} and chant://state/{environment}/{lexicon}
|
|
201
|
+
if (uri.startsWith("chant://state/")) {
|
|
202
|
+
const parts = uri.replace("chant://state/", "").split("/");
|
|
203
|
+
const environment = parts[0];
|
|
204
|
+
const lexicon = parts[1];
|
|
205
|
+
if (lexicon) {
|
|
206
|
+
const content = await readSnapshot(environment, lexicon);
|
|
207
|
+
if (!content)
|
|
208
|
+
throw new Error(`No snapshot found for ${environment}/${lexicon}`);
|
|
209
|
+
return {
|
|
210
|
+
contents: [{ uri, mimeType: "application/json", text: content }],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
const snapshots = await readEnvironmentSnapshots(environment);
|
|
215
|
+
const result = {};
|
|
216
|
+
for (const [lex, content] of snapshots) {
|
|
217
|
+
result[lex] = JSON.parse(content);
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
contents: [{ uri, mimeType: "application/json", text: JSON.stringify(result, null, 2) }],
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (uri.startsWith("chant://examples/")) {
|
|
225
|
+
// Look up example in plugin resources
|
|
226
|
+
const name = uri.replace("chant://examples/", "");
|
|
227
|
+
for (const [pluginUri, pluginResource] of pluginResources.entries()) {
|
|
228
|
+
if (pluginUri.endsWith(`/examples/${name}`)) {
|
|
229
|
+
const text = await pluginResource.handler();
|
|
230
|
+
return {
|
|
231
|
+
contents: [
|
|
232
|
+
{
|
|
233
|
+
uri,
|
|
234
|
+
mimeType: pluginResource.definition.mimeType ?? "text/typescript",
|
|
235
|
+
text,
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
throw new Error(`Example not found: ${name}`);
|
|
242
|
+
}
|
|
243
|
+
// Check plugin resources
|
|
244
|
+
const pluginResource = pluginResources.get(uri);
|
|
245
|
+
if (pluginResource) {
|
|
246
|
+
const text = await pluginResource.handler();
|
|
247
|
+
return {
|
|
248
|
+
contents: [
|
|
249
|
+
{
|
|
250
|
+
uri,
|
|
251
|
+
mimeType: pluginResource.definition.mimeType ?? "text/plain",
|
|
252
|
+
text,
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
258
|
+
}
|