@intentius/chant 0.124.31 → 0.124.33
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 +7 -2
- package/dist/ci-jobs.d.ts +4 -0
- package/dist/ci-jobs.d.ts.map +1 -1
- package/dist/ci-jobs.js +9 -2
- package/dist/cli/commands/check-lexicon-plugin.d.ts +7 -4
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +10 -7
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.js +18 -12
- package/dist/cli/commands/import.d.ts +10 -0
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/project.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/project.js +4 -3
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/onboard.js +8 -4
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +2 -1
- package/dist/cli/dependencies.d.ts +18 -0
- package/dist/cli/dependencies.d.ts.map +1 -0
- package/dist/cli/dependencies.js +120 -0
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +38 -4
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +12 -4
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +16 -6
- package/dist/cli/handlers/lifecycle-health.d.ts +16 -0
- package/dist/cli/handlers/lifecycle-health.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-health.js +150 -0
- package/dist/cli/handlers/lifecycle.d.ts +26 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +1 -1
- package/dist/cli/handlers/lint.d.ts.map +1 -1
- package/dist/cli/handlers/lint.js +6 -0
- package/dist/cli/handlers/operator.d.ts +2 -2
- package/dist/cli/handlers/operator.js +3 -3
- package/dist/cli/handlers/pr.d.ts +16 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +610 -32
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +19 -2
- package/dist/cli/handlers/release.d.ts +16 -1
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +83 -11
- package/dist/cli/handlers/run.d.ts +13 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +38 -15
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +121 -33
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +37 -0
- package/dist/cli/registry.d.ts +29 -6
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +6 -2
- package/dist/codegen/generate-post-synth-barrel.js +2 -2
- package/dist/codegen/lexicon-regen.d.ts +4 -0
- package/dist/codegen/lexicon-regen.d.ts.map +1 -1
- package/dist/codegen/lexicon-regen.js +1 -1
- package/dist/codegen/pinned-upgrade.js +2 -2
- package/dist/components/capability.d.ts +44 -3
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/capability.js +21 -0
- package/dist/components/changed-files.d.ts +7 -1
- package/dist/components/changed-files.d.ts.map +1 -1
- package/dist/components/changed-files.js +9 -1
- package/dist/components/deploy-inputs.d.ts +91 -0
- package/dist/components/deploy-inputs.d.ts.map +1 -0
- package/dist/components/deploy-inputs.js +184 -0
- package/dist/components/driver.d.ts +38 -0
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +56 -6
- package/dist/components/fan-out-record.d.ts +6 -1
- package/dist/components/fan-out-record.d.ts.map +1 -1
- package/dist/components/fan-out-record.js +24 -0
- package/dist/components/fan-out-run.d.ts +20 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +21 -1
- package/dist/components/gate-plan.d.ts +8 -0
- package/dist/components/gate-plan.d.ts.map +1 -1
- package/dist/components/gate-plan.js +6 -0
- package/dist/components/pr-pipeline.d.ts +98 -12
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +146 -23
- package/dist/components/pr-run.d.ts +128 -30
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +290 -70
- package/dist/components/release-compile.d.ts +37 -2
- package/dist/components/release-compile.d.ts.map +1 -1
- package/dist/components/release-compile.js +64 -8
- package/dist/components/release-promote.d.ts +17 -3
- package/dist/components/release-promote.d.ts.map +1 -1
- package/dist/components/release-promote.js +79 -18
- package/dist/components/verbs/bom-writer.d.ts +1 -1
- package/dist/components/verbs/bom-writer.d.ts.map +1 -1
- package/dist/components/verbs/lockfile-sbom-generator.d.ts +20 -0
- package/dist/components/verbs/lockfile-sbom-generator.d.ts.map +1 -1
- package/dist/components/verbs/lockfile-sbom-generator.js +41 -4
- package/dist/components/wave-plan.d.ts +15 -2
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +44 -5
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +16 -6
- package/dist/discovery/sandbox/bundle.d.ts.map +1 -1
- package/dist/discovery/sandbox/bundle.js +6 -0
- package/dist/discovery/specifier-resolve.d.ts.map +1 -1
- package/dist/discovery/specifier-resolve.js +8 -2
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/fold/fold.js +68 -1
- package/dist/fold/subset.d.ts +37 -0
- package/dist/fold/subset.d.ts.map +1 -1
- package/dist/fold/subset.js +88 -0
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +32 -7
- package/dist/health.d.ts +110 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +105 -0
- package/dist/health.schema.json +191 -0
- package/dist/lexicon-module.d.ts +10 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +53 -8
- package/dist/lexicon-plugin-helpers.d.ts.map +1 -1
- package/dist/lexicon-plugin-helpers.js +6 -4
- package/dist/lexicon.d.ts +29 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/affected.d.ts.map +1 -1
- package/dist/lifecycle/affected.js +7 -1
- package/dist/lifecycle/merge-record.d.ts +104 -0
- package/dist/lifecycle/merge-record.d.ts.map +1 -0
- package/dist/lifecycle/merge-record.js +102 -0
- package/dist/lifecycle/publish-attachments.d.ts +8 -5
- package/dist/lifecycle/publish-attachments.d.ts.map +1 -1
- package/dist/lifecycle/publish-attachments.js +27 -13
- package/dist/lifecycle/publish-npm.d.ts +3 -2
- package/dist/lifecycle/publish-npm.d.ts.map +1 -1
- package/dist/lifecycle/publish-npm.js +4 -3
- package/dist/lifecycle/release-at.d.ts +40 -0
- package/dist/lifecycle/release-at.d.ts.map +1 -0
- package/dist/lifecycle/release-at.js +83 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -1
- package/dist/lifecycle/release-cut.js +23 -12
- package/dist/lifecycle/release-ledger.d.ts +21 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +24 -0
- package/dist/lifecycle/release-publish.d.ts +28 -12
- package/dist/lifecycle/release-publish.d.ts.map +1 -1
- package/dist/lifecycle/release-publish.js +29 -17
- package/dist/lifecycle/release-store.d.ts +25 -2
- package/dist/lifecycle/release-store.d.ts.map +1 -1
- package/dist/lifecycle/release-store.js +40 -13
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lifecycle/work-dir.d.ts +45 -0
- package/dist/lifecycle/work-dir.d.ts.map +1 -0
- package/dist/lifecycle/work-dir.js +78 -0
- package/dist/lint/discover.d.ts +17 -9
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +62 -54
- package/dist/lint/rules/op/index.d.ts +2 -1
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +4 -2
- package/dist/lint/rules/op/ops018-shell-image-digest.d.ts +10 -0
- package/dist/lint/rules/op/ops018-shell-image-digest.d.ts.map +1 -0
- package/dist/lint/rules/op/ops018-shell-image-digest.js +38 -0
- package/dist/module-source.d.ts +57 -0
- package/dist/module-source.d.ts.map +1 -0
- package/dist/module-source.js +104 -0
- package/dist/op/activities/activity-contracts.d.ts +5 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +3 -0
- package/dist/op/activities/factory.js +1 -1
- package/dist/op/activities/shell.d.ts +38 -0
- package/dist/op/activities/shell.d.ts.map +1 -1
- package/dist/op/activities/shell.js +89 -3
- package/dist/op/builders.d.ts +7 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +7 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +13 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +3 -0
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +20 -5
- package/dist/op/operator.d.ts +2 -2
- package/dist/op/operator.js +2 -2
- package/dist/op/runtime.d.ts +2 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/steward.d.ts +6 -4
- package/dist/op/steward.d.ts.map +1 -1
- package/dist/op/steward.js +5 -3
- package/dist/op/work-lease-run.d.ts +20 -7
- package/dist/op/work-lease-run.d.ts.map +1 -1
- package/dist/op/work-lease-run.js +56 -12
- package/dist/pr-forge.d.ts +10 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +39 -0
- package/dist/pr-loop.d.ts +155 -7
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +137 -11
- package/dist/pr-report-url.d.ts +4 -4
- package/dist/pr-report-url.d.ts.map +1 -1
- package/dist/pr-report-url.js +5 -5
- package/dist/runner-start.d.ts +179 -0
- package/dist/runner-start.d.ts.map +1 -0
- package/dist/runner-start.js +277 -0
- package/dist/ts-loader.d.ts +38 -4
- package/dist/ts-loader.d.ts.map +1 -1
- package/dist/ts-loader.js +190 -16
- package/dist/wave-runtime.mjs +238 -231
- package/dist/workspace/chant-migrations/fountain-retired-kinds.d.ts +34 -0
- package/dist/workspace/chant-migrations/fountain-retired-kinds.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/fountain-retired-kinds.js +176 -0
- package/dist/workspace/chant-migrations.d.ts.map +1 -1
- package/dist/workspace/chant-migrations.js +2 -0
- package/dist/workspace/check.schema.json +70 -2
- package/dist/workspace/checks/boxes.d.ts +6 -6
- package/dist/workspace/checks/boxes.js +9 -9
- package/dist/workspace/checks/security.d.ts +35 -0
- package/dist/workspace/checks/security.d.ts.map +1 -0
- package/dist/workspace/checks/security.js +305 -0
- package/dist/workspace/checks.d.ts +2 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +5 -0
- package/dist/workspace/ci-builds.d.ts +163 -0
- package/dist/workspace/ci-builds.d.ts.map +1 -0
- package/dist/workspace/ci-builds.js +315 -0
- package/dist/workspace/ci-green-cli.d.ts +2 -1
- package/dist/workspace/ci-green-cli.d.ts.map +1 -1
- package/dist/workspace/ci-green-cli.js +25 -5
- package/dist/workspace/ci-green-forge.d.ts +18 -4
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green-forge.js +12 -0
- package/dist/workspace/ci-green-workflow.d.ts +55 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +128 -1
- package/dist/workspace/ci-green.d.ts +117 -16
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +358 -43
- package/dist/workspace/ci-last-green.schema.json +49 -0
- package/dist/workspace/ci-list.schema.json +47 -7
- package/dist/workspace/ci-report-url.d.ts +18 -0
- package/dist/workspace/ci-report-url.d.ts.map +1 -0
- package/dist/workspace/ci-report-url.js +33 -0
- package/dist/workspace/ci-run-index.d.ts +13 -1
- package/dist/workspace/ci-run-index.d.ts.map +1 -1
- package/dist/workspace/ci-run-index.js +6 -4
- package/dist/workspace/ci-run-index.schema.json +6 -4
- package/dist/workspace/ci-run.d.ts +85 -6
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +262 -64
- package/dist/workspace/ci-runner-key.d.ts +16 -3
- package/dist/workspace/ci-runner-key.d.ts.map +1 -1
- package/dist/workspace/ci-runner-key.js +30 -10
- package/dist/workspace/ci-runner-start.d.ts +77 -0
- package/dist/workspace/ci-runner-start.d.ts.map +1 -0
- package/dist/workspace/ci-runner-start.js +185 -0
- package/dist/workspace/ci-serve.d.ts +130 -11
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +323 -40
- package/dist/workspace/declaration.d.ts +25 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +14 -2
- package/dist/workspace/declaration.schema.json +30 -2
- package/dist/workspace/export.d.ts +1 -1
- package/dist/workspace/export.d.ts.map +1 -1
- package/dist/workspace/export.js +7 -3
- package/dist/workspace/ls.d.ts +8 -1
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +2 -1
- package/dist/workspace/ls.schema.json +9 -2
- package/dist/workspace/member-pipeline.d.ts +1 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -1
- package/dist/workspace/member-pipeline.js +2 -0
- package/dist/workspace/merge-record.schema.json +49 -0
- package/dist/workspace/pin-integrity.d.ts.map +1 -1
- package/dist/workspace/pin-integrity.js +3 -2
- package/dist/workspace/pr-report.schema.json +75 -8
- package/dist/workspace/reason-codes.d.ts +18 -1
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +20 -2
- package/dist/workspace/release-candidates.d.ts +129 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -0
- package/dist/workspace/release-candidates.js +233 -0
- package/dist/workspace/release-candidates.schema.json +353 -0
- package/dist/workspace/run-event.schema.json +3 -1
- package/dist/workspace/security.d.ts +40 -0
- package/dist/workspace/security.d.ts.map +1 -0
- package/dist/workspace/security.js +99 -0
- package/dist/workspace/status.schema.json +3 -1
- package/dist/workspace/write-scope.d.ts +9 -0
- package/dist/workspace/write-scope.d.ts.map +1 -1
- package/dist/workspace/write-scope.js +11 -1
- package/package.json +8 -1
- package/src/__fixtures__/pr-loop/pr-apply-wave-waiting.note.golden.md +48 -0
- package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +1 -1
- package/src/ci-jobs.ts +11 -2
- package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +3 -3
- package/src/cli/commands/audit.test.ts +2 -2
- package/src/cli/commands/check-lexicon-plugin.test.ts +9 -0
- package/src/cli/commands/check-lexicon-plugin.ts +11 -8
- package/src/cli/commands/check-lexicon.test.ts +1 -1
- package/src/cli/commands/check-lexicon.ts +16 -11
- package/src/cli/commands/import.ts +40 -0
- package/src/cli/commands/init-lexicon/templates/project.ts +4 -3
- package/src/cli/commands/init-lexicon.test.ts +8 -5
- package/src/cli/commands/onboard.test.ts +45 -0
- package/src/cli/commands/onboard.ts +8 -4
- package/src/cli/commands/update.test.ts +6 -0
- package/src/cli/commands/update.ts +4 -1
- package/src/cli/compiled-cli.e2e.test.ts +76 -11
- package/src/cli/dependencies.e2e.test.ts +101 -0
- package/src/cli/dependencies.test.ts +93 -0
- package/src/cli/dependencies.ts +122 -0
- package/src/cli/handlers/build.test.ts +105 -0
- package/src/cli/handlers/build.ts +35 -4
- package/src/cli/handlers/fan-out.test.ts +73 -0
- package/src/cli/handlers/fan-out.ts +11 -4
- package/src/cli/handlers/graph.test.ts +76 -0
- package/src/cli/handlers/graph.ts +19 -12
- package/src/cli/handlers/lifecycle-health.test.ts +123 -0
- package/src/cli/handlers/lifecycle-health.ts +157 -0
- package/src/cli/handlers/lifecycle.ts +1 -1
- package/src/cli/handlers/lint.test.ts +42 -0
- package/src/cli/handlers/lint.ts +6 -0
- package/src/cli/handlers/operator.ts +3 -3
- package/src/cli/handlers/pr-deploy-inputs.test.ts +209 -0
- package/src/cli/handlers/pr-record.test.ts +201 -0
- package/src/cli/handlers/pr-waves.test.ts +449 -0
- package/src/cli/handlers/pr.test.ts +156 -0
- package/src/cli/handlers/pr.ts +648 -33
- package/src/cli/handlers/promote.test.ts +43 -1
- package/src/cli/handlers/promote.ts +19 -3
- package/src/cli/handlers/release-cut-at.e2e.test.ts +115 -0
- package/src/cli/handlers/release-publish-targets.e2e.test.ts +2 -2
- package/src/cli/handlers/release-verify.e2e.test.ts +12 -10
- package/src/cli/handlers/release.e2e.test.ts +19 -28
- package/src/cli/handlers/release.ts +81 -11
- package/src/cli/handlers/run-components-exit.test.ts +99 -0
- package/src/cli/handlers/run-signer.test.ts +79 -0
- package/src/cli/handlers/run.ts +34 -16
- package/src/cli/main.test.ts +18 -0
- package/src/cli/main.ts +120 -33
- package/src/cli/parse-args.ts +28 -0
- package/src/cli/registry.ts +35 -8
- package/src/codegen/generate-post-synth-barrel.ts +2 -2
- package/src/codegen/lexicon-regen.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -2
- package/src/codegen/post-synth-barrel-guards.test.ts +6 -11
- package/src/components/capability.ts +51 -3
- package/src/components/changed-files.test.ts +16 -1
- package/src/components/changed-files.ts +9 -1
- package/src/components/deploy-inputs.test.ts +108 -0
- package/src/components/deploy-inputs.ts +225 -0
- package/src/components/driver.test.ts +36 -1
- package/src/components/driver.ts +87 -4
- package/src/components/fan-out-record.ts +29 -1
- package/src/components/fan-out-run.test.ts +35 -0
- package/src/components/fan-out-run.ts +40 -1
- package/src/components/gate-plan.ts +9 -0
- package/src/components/pr-pipeline.test.ts +100 -0
- package/src/components/pr-pipeline.ts +184 -28
- package/src/components/pr-run.test.ts +323 -18
- package/src/components/pr-run.ts +355 -76
- package/src/components/release-compile.test.ts +34 -0
- package/src/components/release-compile.ts +89 -8
- package/src/components/release-promote.test.ts +55 -2
- package/src/components/release-promote.ts +93 -23
- package/src/components/verbs/bom-writer.ts +1 -1
- package/src/components/verbs/lockfile-sbom-generator.test.ts +36 -0
- package/src/components/verbs/lockfile-sbom-generator.ts +43 -5
- package/src/components/wave-plan.ts +48 -8
- package/src/discovery/fold-host-method.test.ts +87 -0
- package/src/discovery/fold-import.ts +15 -5
- package/src/discovery/fold-package-composite.test.ts +27 -0
- package/src/discovery/fold-specifiers.test.ts +8 -0
- package/src/discovery/sandbox/bundle.ts +6 -0
- package/src/discovery/specifier-resolve.ts +8 -2
- package/src/fold/fold.test.ts +72 -0
- package/src/fold/fold.ts +71 -0
- package/src/fold/subset.test.ts +31 -0
- package/src/fold/subset.ts +99 -0
- package/src/graph-detail.test.ts +57 -0
- package/src/graph-detail.ts +33 -7
- package/src/health.schema.json +191 -0
- package/src/health.test.ts +62 -0
- package/src/health.ts +178 -0
- package/src/lexicon-dist.e2e.test.ts +254 -0
- package/src/lexicon-module.test.ts +47 -0
- package/src/lexicon-module.ts +49 -7
- package/src/lexicon-plugin-helpers.ts +6 -4
- package/src/lexicon.ts +43 -1
- package/src/lifecycle/affected.test.ts +7 -0
- package/src/lifecycle/affected.ts +6 -1
- package/src/lifecycle/merge-record.test.ts +111 -0
- package/src/lifecycle/merge-record.ts +154 -0
- package/src/lifecycle/publish-attachments.ts +25 -13
- package/src/lifecycle/publish-npm.ts +4 -3
- package/src/lifecycle/publish-targets.test.ts +34 -4
- package/src/lifecycle/release-at.test.ts +48 -0
- package/src/lifecycle/release-at.ts +100 -0
- package/src/lifecycle/release-cut.test.ts +41 -0
- package/src/lifecycle/release-cut.ts +22 -11
- package/src/lifecycle/release-ledger.ts +34 -0
- package/src/lifecycle/release-publish.test.ts +43 -13
- package/src/lifecycle/release-publish.ts +38 -18
- package/src/lifecycle/release-store.ts +57 -13
- package/src/lifecycle/run-ledger.test.ts +13 -0
- package/src/lifecycle/run-ledger.ts +1 -0
- package/src/lifecycle/work-dir.test.ts +77 -0
- package/src/lifecycle/work-dir.ts +82 -0
- package/src/lint/discover.test.ts +46 -2
- package/src/lint/discover.ts +55 -49
- package/src/lint/rules/op/index.ts +4 -2
- package/src/lint/rules/op/ops018-shell-image-digest.test.ts +60 -0
- package/src/lint/rules/op/ops018-shell-image-digest.ts +48 -0
- package/src/module-source.test.ts +85 -0
- package/src/module-source.ts +112 -0
- package/src/op/activities/activity-contracts.ts +3 -0
- package/src/op/activities/factory.ts +1 -1
- package/src/op/activities/shell-container.e2e.test.ts +67 -0
- package/src/op/activities/shell.test.ts +44 -1
- package/src/op/activities/shell.ts +110 -3
- package/src/op/builders.ts +7 -0
- package/src/op/discover-root.test.ts +31 -2
- package/src/op/discover.ts +14 -4
- package/src/op/gate.test.ts +30 -0
- package/src/op/gate.ts +3 -0
- package/src/op/op-waves-run.ts +20 -5
- package/src/op/op-waves.test.ts +49 -0
- package/src/op/operator.ts +2 -2
- package/src/op/runtime.ts +2 -0
- package/src/op/step-console.test.ts +4 -2
- package/src/op/steward.ts +6 -4
- package/src/op/work-lease-run.test.ts +88 -2
- package/src/op/work-lease-run.ts +52 -12
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +42 -0
- package/src/pr-forge.ts +40 -0
- package/src/pr-loop-bundle.test.ts +2 -1
- package/src/pr-loop.test.ts +146 -1
- package/src/pr-loop.ts +278 -17
- package/src/pr-report-url.ts +7 -7
- package/src/runner-start-bundle.test.ts +29 -0
- package/src/runner-start.test.ts +179 -0
- package/src/runner-start.ts +329 -0
- package/src/terraform/__fixtures__/advise.test.ts +21 -2
- package/src/ts-loader.test.ts +89 -1
- package/src/ts-loader.ts +180 -13
- package/src/workspace/changes.test.ts +1 -1
- package/src/workspace/chant-migrations/fountain-retired-kinds.test.ts +33 -0
- package/src/workspace/chant-migrations/fountain-retired-kinds.ts +190 -0
- package/src/workspace/chant-migrations.e2e.test.ts +5 -0
- package/src/workspace/chant-migrations.ts +2 -0
- package/src/workspace/check-contract.test.ts +3 -2
- package/src/workspace/check.schema.json +70 -2
- package/src/workspace/checks/boxes.ts +9 -9
- package/src/workspace/checks/security.test.ts +138 -0
- package/src/workspace/checks/security.ts +305 -0
- package/src/workspace/checks.ts +5 -0
- package/src/workspace/ci-builds.e2e.test.ts +208 -0
- package/src/workspace/ci-builds.test.ts +174 -0
- package/src/workspace/ci-builds.ts +385 -0
- package/src/workspace/ci-green-builds.test.ts +180 -0
- package/src/workspace/ci-green-cli.test.ts +54 -0
- package/src/workspace/ci-green-cli.ts +26 -5
- package/src/workspace/ci-green-forge.ts +30 -4
- package/src/workspace/ci-green-runs.test.ts +53 -11
- package/src/workspace/ci-green-workflow.test.ts +84 -1
- package/src/workspace/ci-green-workflow.ts +139 -2
- package/src/workspace/ci-green.test.ts +6 -3
- package/src/workspace/ci-green.ts +408 -48
- package/src/workspace/ci-last-green.schema.json +49 -0
- package/src/workspace/ci-list.schema.json +47 -7
- package/src/workspace/ci-report-url.test.ts +220 -0
- package/src/workspace/ci-report-url.ts +33 -0
- package/src/workspace/ci-run-index.schema.json +6 -4
- package/src/workspace/ci-run-index.test.ts +42 -3
- package/src/workspace/ci-run-index.ts +19 -5
- package/src/workspace/ci-run.test.ts +203 -8
- package/src/workspace/ci-run.ts +295 -63
- package/src/workspace/ci-runner-key.test.ts +55 -17
- package/src/workspace/ci-runner-key.ts +36 -11
- package/src/workspace/ci-runner-start.test.ts +151 -0
- package/src/workspace/ci-runner-start.ts +193 -0
- package/src/workspace/ci-serve-builds.test.ts +86 -0
- package/src/workspace/ci-serve.test.ts +209 -6
- package/src/workspace/ci-serve.ts +341 -42
- package/src/workspace/declaration.schema.json +30 -2
- package/src/workspace/declaration.test.ts +40 -0
- package/src/workspace/declaration.ts +40 -3
- package/src/workspace/export.ts +6 -3
- package/src/workspace/ls.schema.json +9 -2
- package/src/workspace/ls.ts +10 -4
- package/src/workspace/member-pipeline.ts +2 -1
- package/src/workspace/merge-record.schema.json +49 -0
- package/src/workspace/pin-integrity.test.ts +5 -0
- package/src/workspace/pin-integrity.ts +3 -2
- package/src/workspace/pr-report.schema.json +75 -8
- package/src/workspace/reason-codes.test.ts +2 -0
- package/src/workspace/reason-codes.ts +20 -2
- package/src/workspace/release-candidates.schema.json +353 -0
- package/src/workspace/release-candidates.test.ts +106 -0
- package/src/workspace/release-candidates.ts +315 -0
- package/src/workspace/run-event.schema.json +3 -1
- package/src/workspace/security.test.ts +70 -0
- package/src/workspace/security.ts +118 -0
- package/src/workspace/status.schema.json +3 -1
- package/src/workspace/write-scope.test.ts +29 -1
- package/src/workspace/write-scope.ts +12 -1
package/dist/health.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime health (#4177): whether a declared thing is up, read separately from
|
|
3
|
+
* drift.
|
|
4
|
+
*
|
|
5
|
+
* The observation family answers what is deployed (`describeResources`), what
|
|
6
|
+
* its properties are (`observeResourcesDeep`) and what it would do
|
|
7
|
+
* (`predictBehaviour`). None of them says whether a service is serving. A
|
|
8
|
+
* lexicon that can read that implements {@link HealthLexicon.observeHealth}
|
|
9
|
+
* for the types it names in `healthTypes`, and `chant lifecycle health` reports
|
|
10
|
+
* the answers in the {@link HEALTH_SCHEMA} shape.
|
|
11
|
+
*
|
|
12
|
+
* The verdicts follow #1089's rule. Every entity the caller asks about lands in
|
|
13
|
+
* exactly one place: `entities` (read, with a state), `unobserved` (the read
|
|
14
|
+
* failed, a hole with a reason) or `absent` (the provider says it is not
|
|
15
|
+
* deployed). A failed read is never `unhealthy`: `unhealthy` is something the
|
|
16
|
+
* provider said.
|
|
17
|
+
*
|
|
18
|
+
* Routing is not modelled. A consumer that wants rotation (a latency record
|
|
19
|
+
* whose health check is unhealthy is out of rotation) derives it from the
|
|
20
|
+
* graph's edges and these states.
|
|
21
|
+
*/
|
|
22
|
+
import type { UnobservedEntity, UnobservedReason } from "./observation.js";
|
|
23
|
+
/** The versioned shape `chant lifecycle health --json` prints. The JSON Schema is `./health.schema.json`. */
|
|
24
|
+
export declare const HEALTH_SCHEMA = "chant-health/v1";
|
|
25
|
+
/** The `$id` of `./health.schema.json`, which the package exports as `@intentius/chant/health.schema.json`. */
|
|
26
|
+
export declare const HEALTH_SCHEMA_ID = "https://intentius.io/chant/schemas/health/v1/health.schema.json";
|
|
27
|
+
/**
|
|
28
|
+
* `healthy` and `unhealthy` are what the provider reported. `unknown` means the
|
|
29
|
+
* read succeeded and the provider's answer does not decide either way (a
|
|
30
|
+
* deployment still rolling, a service scaled to zero, a condition pending).
|
|
31
|
+
*/
|
|
32
|
+
export type HealthState = "healthy" | "unhealthy" | "unknown";
|
|
33
|
+
export interface HealthEntry {
|
|
34
|
+
/** Entity type, e.g. `AWS::ECS::Service`. */
|
|
35
|
+
type: string;
|
|
36
|
+
state: HealthState;
|
|
37
|
+
/** One short line saying why, in the provider's terms. */
|
|
38
|
+
detail: string;
|
|
39
|
+
/** When chant read it (ISO 8601). */
|
|
40
|
+
observedAt: string;
|
|
41
|
+
/** When the provider last checked or changed the state, when it says (ISO 8601). */
|
|
42
|
+
checkedAt?: string;
|
|
43
|
+
}
|
|
44
|
+
/** What one lexicon's health read returns. */
|
|
45
|
+
export interface HealthReadResult {
|
|
46
|
+
/** Read, keyed by chant entity name, which is the graph's node id. */
|
|
47
|
+
entities: Record<string, HealthEntry>;
|
|
48
|
+
/** Could not be read. Never folded into `unhealthy`. */
|
|
49
|
+
unobserved: Record<string, UnobservedEntity>;
|
|
50
|
+
/** The provider says these are not deployed. */
|
|
51
|
+
absent: string[];
|
|
52
|
+
}
|
|
53
|
+
/** The options core passes a lexicon's health read. They mirror `observeResourcesDeep`'s. */
|
|
54
|
+
export interface HealthReadOptions {
|
|
55
|
+
environment: string;
|
|
56
|
+
buildOutput: string;
|
|
57
|
+
/** Only entities whose type is in the lexicon's `healthTypes`. */
|
|
58
|
+
entities: Map<string, {
|
|
59
|
+
entityType: string;
|
|
60
|
+
props: Record<string, unknown>;
|
|
61
|
+
}>;
|
|
62
|
+
stack?: string;
|
|
63
|
+
region?: string;
|
|
64
|
+
}
|
|
65
|
+
/** The two plugin members a lexicon implements to answer a health read. */
|
|
66
|
+
export interface HealthLexicon {
|
|
67
|
+
name: string;
|
|
68
|
+
/** Entity types {@link observeHealth} can read. Data, so core picks the entities without calling the reader. */
|
|
69
|
+
healthTypes?: readonly string[];
|
|
70
|
+
observeHealth?(options: HealthReadOptions): Promise<HealthReadResult>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The entities of one lexicon a health read applies to: those whose type the
|
|
74
|
+
* lexicon names in `healthTypes`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function healthApplicable(plugin: HealthLexicon, entities: Map<string, {
|
|
77
|
+
entityType: string;
|
|
78
|
+
props: Record<string, unknown>;
|
|
79
|
+
}>): Map<string, {
|
|
80
|
+
entityType: string;
|
|
81
|
+
props: Record<string, unknown>;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Run one lexicon's health read. Never throws: a thrown reader reports every
|
|
85
|
+
* applicable entity `read-failed`. The result is made total, so an entity the
|
|
86
|
+
* reader forgot comes back `unobserved` rather than missing.
|
|
87
|
+
*/
|
|
88
|
+
export declare function observeHealthFor(plugin: HealthLexicon, options: HealthReadOptions): Promise<HealthReadResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Put every asked-about name in exactly one of the three places. A name in
|
|
91
|
+
* `entities` wins over the others, then `absent`, then `unobserved`; a name in
|
|
92
|
+
* none of them becomes `read-failed`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function totalHealth(names: string[], result: HealthReadResult, types?: Map<string, {
|
|
95
|
+
entityType: string;
|
|
96
|
+
}>): HealthReadResult;
|
|
97
|
+
/** Counts across a health read, for the summary line and `--json`. */
|
|
98
|
+
export interface HealthSummary {
|
|
99
|
+
healthy: number;
|
|
100
|
+
unhealthy: number;
|
|
101
|
+
unknown: number;
|
|
102
|
+
unobserved: number;
|
|
103
|
+
absent: number;
|
|
104
|
+
}
|
|
105
|
+
export declare function summarizeHealth(results: Iterable<HealthReadResult>): HealthSummary;
|
|
106
|
+
/** A health entry, for a reader building its result. */
|
|
107
|
+
export declare function healthEntry(type: string, state: HealthState, detail: string, observedAt: string, checkedAt?: string): HealthEntry;
|
|
108
|
+
/** A hole, for a reader building its result. */
|
|
109
|
+
export declare function healthHole(type: string, reason: UnobservedReason, detail: string): UnobservedEntity;
|
|
110
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGxE,6GAA6G;AAC7G,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,+GAA+G;AAC/G,eAAO,MAAM,gBAAgB,oEAAoE,CAAC;AAElG;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,gDAAgD;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,6FAA6F;AAC7F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gHAAgH;IAChH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC5E,GAAG,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAKrE;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAkB3B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,gBAAgB,EACxB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C,gBAAgB,CAalB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAQlF;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CAEb;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAEnG"}
|
package/dist/health.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime health (#4177): whether a declared thing is up, read separately from
|
|
3
|
+
* drift.
|
|
4
|
+
*
|
|
5
|
+
* The observation family answers what is deployed (`describeResources`), what
|
|
6
|
+
* its properties are (`observeResourcesDeep`) and what it would do
|
|
7
|
+
* (`predictBehaviour`). None of them says whether a service is serving. A
|
|
8
|
+
* lexicon that can read that implements {@link HealthLexicon.observeHealth}
|
|
9
|
+
* for the types it names in `healthTypes`, and `chant lifecycle health` reports
|
|
10
|
+
* the answers in the {@link HEALTH_SCHEMA} shape.
|
|
11
|
+
*
|
|
12
|
+
* The verdicts follow #1089's rule. Every entity the caller asks about lands in
|
|
13
|
+
* exactly one place: `entities` (read, with a state), `unobserved` (the read
|
|
14
|
+
* failed, a hole with a reason) or `absent` (the provider says it is not
|
|
15
|
+
* deployed). A failed read is never `unhealthy`: `unhealthy` is something the
|
|
16
|
+
* provider said.
|
|
17
|
+
*
|
|
18
|
+
* Routing is not modelled. A consumer that wants rotation (a latency record
|
|
19
|
+
* whose health check is unhealthy is out of rotation) derives it from the
|
|
20
|
+
* graph's edges and these states.
|
|
21
|
+
*/
|
|
22
|
+
import { unobservedAll } from "./observation.js";
|
|
23
|
+
/** The versioned shape `chant lifecycle health --json` prints. The JSON Schema is `./health.schema.json`. */
|
|
24
|
+
export const HEALTH_SCHEMA = "chant-health/v1";
|
|
25
|
+
/** The `$id` of `./health.schema.json`, which the package exports as `@intentius/chant/health.schema.json`. */
|
|
26
|
+
export const HEALTH_SCHEMA_ID = "https://intentius.io/chant/schemas/health/v1/health.schema.json";
|
|
27
|
+
/**
|
|
28
|
+
* The entities of one lexicon a health read applies to: those whose type the
|
|
29
|
+
* lexicon names in `healthTypes`.
|
|
30
|
+
*/
|
|
31
|
+
export function healthApplicable(plugin, entities) {
|
|
32
|
+
const types = new Set(plugin.healthTypes ?? []);
|
|
33
|
+
const out = new Map();
|
|
34
|
+
for (const [name, entity] of entities)
|
|
35
|
+
if (types.has(entity.entityType))
|
|
36
|
+
out.set(name, entity);
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Run one lexicon's health read. Never throws: a thrown reader reports every
|
|
41
|
+
* applicable entity `read-failed`. The result is made total, so an entity the
|
|
42
|
+
* reader forgot comes back `unobserved` rather than missing.
|
|
43
|
+
*/
|
|
44
|
+
export async function observeHealthFor(plugin, options) {
|
|
45
|
+
const names = [...options.entities.keys()];
|
|
46
|
+
if (names.length === 0)
|
|
47
|
+
return { entities: {}, unobserved: {}, absent: [] };
|
|
48
|
+
if (!plugin.observeHealth) {
|
|
49
|
+
return {
|
|
50
|
+
entities: {},
|
|
51
|
+
unobserved: unobservedAll(names, "unsupported-kind", `${plugin.name} has no health read`, options.entities),
|
|
52
|
+
absent: [],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
let result;
|
|
56
|
+
try {
|
|
57
|
+
result = await plugin.observeHealth(options);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
61
|
+
return { entities: {}, unobserved: unobservedAll(names, "read-failed", message, options.entities), absent: [] };
|
|
62
|
+
}
|
|
63
|
+
return totalHealth(names, result, options.entities);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Put every asked-about name in exactly one of the three places. A name in
|
|
67
|
+
* `entities` wins over the others, then `absent`, then `unobserved`; a name in
|
|
68
|
+
* none of them becomes `read-failed`.
|
|
69
|
+
*/
|
|
70
|
+
export function totalHealth(names, result, types) {
|
|
71
|
+
const entities = {};
|
|
72
|
+
const unobserved = {};
|
|
73
|
+
const absentSet = new Set(result.absent ?? []);
|
|
74
|
+
const absent = [];
|
|
75
|
+
for (const name of names) {
|
|
76
|
+
const entry = result.entities?.[name];
|
|
77
|
+
if (entry)
|
|
78
|
+
entities[name] = entry;
|
|
79
|
+
else if (absentSet.has(name))
|
|
80
|
+
absent.push(name);
|
|
81
|
+
else if (result.unobserved?.[name])
|
|
82
|
+
unobserved[name] = result.unobserved[name];
|
|
83
|
+
else
|
|
84
|
+
Object.assign(unobserved, unobservedAll([name], "read-failed", "the health read returned no answer for this entity", types));
|
|
85
|
+
}
|
|
86
|
+
return { entities, unobserved, absent };
|
|
87
|
+
}
|
|
88
|
+
export function summarizeHealth(results) {
|
|
89
|
+
const summary = { healthy: 0, unhealthy: 0, unknown: 0, unobserved: 0, absent: 0 };
|
|
90
|
+
for (const r of results) {
|
|
91
|
+
for (const entry of Object.values(r.entities))
|
|
92
|
+
summary[entry.state]++;
|
|
93
|
+
summary.unobserved += Object.keys(r.unobserved).length;
|
|
94
|
+
summary.absent += r.absent.length;
|
|
95
|
+
}
|
|
96
|
+
return summary;
|
|
97
|
+
}
|
|
98
|
+
/** A health entry, for a reader building its result. */
|
|
99
|
+
export function healthEntry(type, state, detail, observedAt, checkedAt) {
|
|
100
|
+
return { type, state, detail, observedAt, ...(checkedAt ? { checkedAt } : {}) };
|
|
101
|
+
}
|
|
102
|
+
/** A hole, for a reader building its result. */
|
|
103
|
+
export function healthHole(type, reason, detail) {
|
|
104
|
+
return { type, reason, detail };
|
|
105
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/chant/schemas/health/v1/health.schema.json",
|
|
4
|
+
"title": "chant-health/v1",
|
|
5
|
+
"description": "What `chant lifecycle health <env> --json` prints (#4177): whether each declared resource that has a health read is up, read separately from drift. Every entity a read applies to lands in exactly one of `entities` (read, with a state), `unobserved` (the read failed, never folded into unhealthy) or `absent` (the provider says it is not deployed). Entity names are the graph's node ids. A single-stack project puts `lexicons` at the top level; a multi-stack one nests them under `stacks`. Written by the first chant release after 0.124.32. Readers ignore fields they do not know; a field is only ever added within a version.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schema",
|
|
9
|
+
"chantVersion",
|
|
10
|
+
"environment",
|
|
11
|
+
"observedAt",
|
|
12
|
+
"summary"
|
|
13
|
+
],
|
|
14
|
+
"properties": {
|
|
15
|
+
"schema": {
|
|
16
|
+
"const": "chant-health/v1"
|
|
17
|
+
},
|
|
18
|
+
"chantVersion": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "The chant that ran the read."
|
|
21
|
+
},
|
|
22
|
+
"environment": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "The environment named on the command line."
|
|
25
|
+
},
|
|
26
|
+
"observedAt": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "When the command started reading, ISO 8601 UTC."
|
|
29
|
+
},
|
|
30
|
+
"summary": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"required": [
|
|
33
|
+
"healthy",
|
|
34
|
+
"unhealthy",
|
|
35
|
+
"unknown",
|
|
36
|
+
"unobserved",
|
|
37
|
+
"absent"
|
|
38
|
+
],
|
|
39
|
+
"description": "Counts over every lexicon and stack.",
|
|
40
|
+
"properties": {
|
|
41
|
+
"healthy": {
|
|
42
|
+
"type": "integer",
|
|
43
|
+
"minimum": 0
|
|
44
|
+
},
|
|
45
|
+
"unhealthy": {
|
|
46
|
+
"type": "integer",
|
|
47
|
+
"minimum": 0
|
|
48
|
+
},
|
|
49
|
+
"unknown": {
|
|
50
|
+
"type": "integer",
|
|
51
|
+
"minimum": 0
|
|
52
|
+
},
|
|
53
|
+
"unobserved": {
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"minimum": 0
|
|
56
|
+
},
|
|
57
|
+
"absent": {
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"minimum": 0
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"oneOf": [
|
|
65
|
+
{
|
|
66
|
+
"required": [
|
|
67
|
+
"lexicons"
|
|
68
|
+
],
|
|
69
|
+
"properties": {
|
|
70
|
+
"lexicons": {
|
|
71
|
+
"$ref": "#/$defs/byLexicon"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"required": [
|
|
77
|
+
"stacks"
|
|
78
|
+
],
|
|
79
|
+
"properties": {
|
|
80
|
+
"stacks": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"description": "Per stack name, the same per-lexicon results.",
|
|
83
|
+
"additionalProperties": {
|
|
84
|
+
"$ref": "#/$defs/byLexicon"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"$defs": {
|
|
91
|
+
"byLexicon": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"description": "Per lexicon name, that lexicon's read. A lexicon with no applicable entity is left out.",
|
|
94
|
+
"additionalProperties": {
|
|
95
|
+
"$ref": "#/$defs/read"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"read": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"required": [
|
|
101
|
+
"entities",
|
|
102
|
+
"unobserved",
|
|
103
|
+
"absent"
|
|
104
|
+
],
|
|
105
|
+
"properties": {
|
|
106
|
+
"entities": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"additionalProperties": {
|
|
109
|
+
"$ref": "#/$defs/entry"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"unobserved": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"additionalProperties": {
|
|
115
|
+
"$ref": "#/$defs/hole"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"absent": {
|
|
119
|
+
"type": "array",
|
|
120
|
+
"items": {
|
|
121
|
+
"type": "string"
|
|
122
|
+
},
|
|
123
|
+
"description": "Entity names the provider says are not deployed."
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"entry": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"required": [
|
|
130
|
+
"type",
|
|
131
|
+
"state",
|
|
132
|
+
"detail",
|
|
133
|
+
"observedAt"
|
|
134
|
+
],
|
|
135
|
+
"properties": {
|
|
136
|
+
"type": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"description": "Entity type, such as AWS::ECS::Service."
|
|
139
|
+
},
|
|
140
|
+
"state": {
|
|
141
|
+
"enum": [
|
|
142
|
+
"healthy",
|
|
143
|
+
"unhealthy",
|
|
144
|
+
"unknown"
|
|
145
|
+
],
|
|
146
|
+
"description": "healthy and unhealthy are what the provider reported. unknown means the read succeeded and the answer decides neither way: a rollout in progress, a service scaled to zero, a condition pending."
|
|
147
|
+
},
|
|
148
|
+
"detail": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"description": "One short line saying why, in the provider's terms."
|
|
151
|
+
},
|
|
152
|
+
"observedAt": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"description": "When chant read it, ISO 8601."
|
|
155
|
+
},
|
|
156
|
+
"checkedAt": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"description": "When the provider last checked or changed the state, when it says, ISO 8601."
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"hole": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"required": [
|
|
165
|
+
"reason"
|
|
166
|
+
],
|
|
167
|
+
"description": "A read that failed. Never counted as unhealthy.",
|
|
168
|
+
"properties": {
|
|
169
|
+
"type": {
|
|
170
|
+
"type": "string"
|
|
171
|
+
},
|
|
172
|
+
"reason": {
|
|
173
|
+
"enum": [
|
|
174
|
+
"read-failed",
|
|
175
|
+
"no-credentials",
|
|
176
|
+
"no-binding",
|
|
177
|
+
"unsupported-kind",
|
|
178
|
+
"filtered"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
"detail": {
|
|
182
|
+
"type": "string"
|
|
183
|
+
},
|
|
184
|
+
"queried": {
|
|
185
|
+
"type": "string",
|
|
186
|
+
"description": "The address the read was issued against, when the lexicon reports it."
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
package/dist/lexicon-module.d.ts
CHANGED
|
@@ -97,6 +97,9 @@ export declare function resetLexiconModules(): void;
|
|
|
97
97
|
* `typeScript: false` imports it with plain node, without registering tsx
|
|
98
98
|
* (#3276): tsx's ESM hooks run on a thread of their own, which costs the
|
|
99
99
|
* compiled CLI about 200 MB, so a caller whose module is JavaScript says so.
|
|
100
|
+
* Left out, the module's extension decides (#3981): a `.js` or `.mjs` module
|
|
101
|
+
* imports with plain node, and anything else (`.ts`, or no extension, which
|
|
102
|
+
* only tsx's resolver completes) registers tsx first.
|
|
100
103
|
*/
|
|
101
104
|
export declare function importLexiconModule(name: string, options?: {
|
|
102
105
|
typeScript?: boolean;
|
|
@@ -133,6 +136,13 @@ export declare function resolveFromProject(spec: string, fromDir?: string): stri
|
|
|
133
136
|
* that installs its lexicons in its own node_modules, it is resolved from
|
|
134
137
|
* `fromDir` (the project) and imported from there. Any other failure, and a
|
|
135
138
|
* package the project doesn't have either, rethrows the first error.
|
|
139
|
+
*
|
|
140
|
+
* #3981 — tsx is registered only when the module resolves to TypeScript. A
|
|
141
|
+
* lexicon that ships compiled JS imports with plain node. The module is
|
|
142
|
+
* resolved before it is imported, because a failed import is cached: one
|
|
143
|
+
* tried without tsx cannot be tried again with it. A resolution that fails
|
|
144
|
+
* for any reason but a missing package registers tsx, whose resolver may
|
|
145
|
+
* still complete it.
|
|
136
146
|
*/
|
|
137
147
|
export declare function importLexiconPackage(spec: string, fromDir?: string): Promise<Record<string, unknown>>;
|
|
138
148
|
//# sourceMappingURL=lexicon-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon-module.d.ts","sourceRoot":"","sources":["../src/lexicon-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"lexicon-module.d.ts","sourceRoot":"","sources":["../src/lexicon-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AASH;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1F,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAExE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;AAC/E,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAiBvG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,EAAE,MAAM,EACf,SAAS,SAAM,GACd;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAgBrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,EAClD,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3G;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAa9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAsB,EAC/B,KAAK,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAe,GAC/C,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAe,GAC/C,MAAM,EAAE,CAEV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI9D;AAUD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAMpG;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqB1H"}
|
package/dist/lexicon-module.js
CHANGED
|
@@ -26,8 +26,9 @@
|
|
|
26
26
|
import { createRequire } from "node:module";
|
|
27
27
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
28
28
|
import { pathToFileURL } from "node:url";
|
|
29
|
-
import { ensureTypeScriptLoader } from "./ts-loader.js";
|
|
29
|
+
import { ensureTypeScriptLoader, ensureTypeScriptLoaderFor, typeScriptLoaderPending } from "./ts-loader.js";
|
|
30
30
|
import { esModuleNamespace } from "./module-interop.js";
|
|
31
|
+
import { isJavaScriptModule } from "./module-source.js";
|
|
31
32
|
/** The lexicon name an entry declares, whichever form it takes. */
|
|
32
33
|
export function lexiconDeclarationName(entry) {
|
|
33
34
|
return typeof entry === "string" ? entry : entry.name;
|
|
@@ -154,13 +155,17 @@ export function resetLexiconModules() {
|
|
|
154
155
|
* `typeScript: false` imports it with plain node, without registering tsx
|
|
155
156
|
* (#3276): tsx's ESM hooks run on a thread of their own, which costs the
|
|
156
157
|
* compiled CLI about 200 MB, so a caller whose module is JavaScript says so.
|
|
158
|
+
* Left out, the module's extension decides (#3981): a `.js` or `.mjs` module
|
|
159
|
+
* imports with plain node, and anything else (`.ts`, or no extension, which
|
|
160
|
+
* only tsx's resolver completes) registers tsx first.
|
|
157
161
|
*/
|
|
158
162
|
export async function importLexiconModule(name, options = {}) {
|
|
159
163
|
const path = modulePaths.get(name);
|
|
160
164
|
if (path === undefined)
|
|
161
165
|
return undefined;
|
|
162
166
|
try {
|
|
163
|
-
|
|
167
|
+
const typeScript = options.typeScript ?? !isJavaScriptModule(path);
|
|
168
|
+
if (typeScript)
|
|
164
169
|
ensureTypeScriptLoader();
|
|
165
170
|
return esModuleNamespace((await import(path)));
|
|
166
171
|
}
|
|
@@ -221,6 +226,19 @@ export function resolveFromProject(spec, fromDir = process.cwd()) {
|
|
|
221
226
|
return undefined;
|
|
222
227
|
}
|
|
223
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* #3981 — where `spec` resolves from this module, as `import(spec)` here
|
|
231
|
+
* would resolve it. Throws as the import would when it cannot be resolved.
|
|
232
|
+
* An absolute path is its own file URL.
|
|
233
|
+
*/
|
|
234
|
+
function resolveImport(spec) {
|
|
235
|
+
if (isAbsolute(spec))
|
|
236
|
+
return pathToFileURL(spec).href;
|
|
237
|
+
const resolveMeta = import.meta.resolve;
|
|
238
|
+
if (typeof resolveMeta === "function")
|
|
239
|
+
return resolveMeta(spec);
|
|
240
|
+
return pathToFileURL(createRequire(import.meta.url).resolve(spec)).href;
|
|
241
|
+
}
|
|
224
242
|
/**
|
|
225
243
|
* chant#2845 — import a lexicon package, or one of its subpaths, by its bare
|
|
226
244
|
* specifier. chant's own install is tried first, as a bare `import()` always
|
|
@@ -229,19 +247,46 @@ export function resolveFromProject(spec, fromDir = process.cwd()) {
|
|
|
229
247
|
* that installs its lexicons in its own node_modules, it is resolved from
|
|
230
248
|
* `fromDir` (the project) and imported from there. Any other failure, and a
|
|
231
249
|
* package the project doesn't have either, rethrows the first error.
|
|
250
|
+
*
|
|
251
|
+
* #3981 — tsx is registered only when the module resolves to TypeScript. A
|
|
252
|
+
* lexicon that ships compiled JS imports with plain node. The module is
|
|
253
|
+
* resolved before it is imported, because a failed import is cached: one
|
|
254
|
+
* tried without tsx cannot be tried again with it. A resolution that fails
|
|
255
|
+
* for any reason but a missing package registers tsx, whose resolver may
|
|
256
|
+
* still complete it.
|
|
232
257
|
*/
|
|
233
258
|
export async function importLexiconPackage(spec, fromDir = process.cwd()) {
|
|
259
|
+
const pkg = packageNameOf(spec);
|
|
260
|
+
if (typeScriptLoaderPending()) {
|
|
261
|
+
let resolved;
|
|
262
|
+
try {
|
|
263
|
+
resolved = resolveImport(spec);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
if (pkg === undefined || !isPackageNotFound(err, pkg)) {
|
|
267
|
+
ensureTypeScriptLoader();
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
return importFromProject(spec, fromDir, err);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (resolved !== undefined)
|
|
274
|
+
ensureTypeScriptLoaderFor(resolved);
|
|
275
|
+
}
|
|
234
276
|
try {
|
|
235
|
-
ensureTypeScriptLoader();
|
|
236
277
|
return esModuleNamespace((await import(spec)));
|
|
237
278
|
}
|
|
238
279
|
catch (err) {
|
|
239
|
-
const pkg = packageNameOf(spec);
|
|
240
280
|
if (pkg === undefined || !isPackageNotFound(err, pkg))
|
|
241
281
|
throw err;
|
|
242
|
-
|
|
243
|
-
if (resolved === undefined)
|
|
244
|
-
throw err;
|
|
245
|
-
return esModuleNamespace((await import(pathToFileURL(resolved).href)));
|
|
282
|
+
return importFromProject(spec, fromDir, err);
|
|
246
283
|
}
|
|
247
284
|
}
|
|
285
|
+
/** The project's copy of `spec`, for {@link importLexiconPackage}. Rethrows `err` when the project has none. */
|
|
286
|
+
async function importFromProject(spec, fromDir, err) {
|
|
287
|
+
const resolved = resolveFromProject(spec, fromDir);
|
|
288
|
+
if (resolved === undefined)
|
|
289
|
+
throw err;
|
|
290
|
+
ensureTypeScriptLoaderFor(resolved);
|
|
291
|
+
return esModuleNamespace((await import(pathToFileURL(resolved).href)));
|
|
292
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon-plugin-helpers.d.ts","sourceRoot":"","sources":["../src/lexicon-plugin-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAC7D,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,EAAE,GACrB,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"lexicon-plugin-helpers.d.ts","sourceRoot":"","sources":["../src/lexicon-plugin-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAC7D,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,EAAE,GACrB,MAAM,eAAe,EAAE,CAazB;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAsBrB;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,uBAAuB,CAoBzB"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* MCP diff tool, and MCP catalog resource.
|
|
7
7
|
*/
|
|
8
8
|
import { readFileSync } from "fs";
|
|
9
|
-
import { join
|
|
10
|
-
import {
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { moduleSourceDir } from "./module-source.js";
|
|
11
11
|
/**
|
|
12
12
|
* Create a skills loader that reads .md files from a lexicon's skills directory.
|
|
13
13
|
*
|
|
@@ -25,7 +25,8 @@ import { fileURLToPath } from "url";
|
|
|
25
25
|
*/
|
|
26
26
|
export function createSkillsLoader(importMetaUrl, specs) {
|
|
27
27
|
return () => {
|
|
28
|
-
|
|
28
|
+
// Skills are markdown beside the source; a compiled plugin finds them under src/ (#3981).
|
|
29
|
+
const skillsDir = join(moduleSourceDir(importMetaUrl), "skills");
|
|
29
30
|
return specs.map(({ file, ...meta }) => {
|
|
30
31
|
try {
|
|
31
32
|
const content = readFileSync(join(skillsDir, file), "utf-8");
|
|
@@ -91,7 +92,8 @@ export function createCatalogResource(importMetaUrl, name, description, lexiconJ
|
|
|
91
92
|
description,
|
|
92
93
|
mimeType: "application/json",
|
|
93
94
|
async handler() {
|
|
94
|
-
|
|
95
|
+
// Generated JSON sits beside the source; a compiled plugin finds it under src/ (#3981).
|
|
96
|
+
const dir = moduleSourceDir(importMetaUrl);
|
|
95
97
|
const lexicon = JSON.parse(readFileSync(join(dir, "generated", lexiconJsonFile), "utf-8"));
|
|
96
98
|
const entries = Object.entries(lexicon).map(([className, entry]) => ({
|
|
97
99
|
className,
|
package/dist/lexicon.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ export type { CommandGroup, CommandGroupCommand, CommandGroupContext } from "./c
|
|
|
41
41
|
export type { ReferenceCatalog, IdentityRule, RefRule } from "./graph-refs.js";
|
|
42
42
|
export type { IREdge } from "./graph-ir.js";
|
|
43
43
|
export type { DescribeResourcesResult, ObservationResult, NormalizedObservation, UnobservedEntity, UnobservedReason, } from "./observation.js";
|
|
44
|
+
export type { HealthEntry, HealthReadOptions, HealthReadResult, HealthState, } from "./health.js";
|
|
44
45
|
export type { DescribeIdentityOptions, DescribeIdentityResult, ResolvedIdentity, UnresolvedIdentity, IdentityRow, IdentityStatus, } from "./identity.js";
|
|
45
46
|
export type { Disruption, DisruptionQuery, DisruptionVerdict, DisruptionClassifier, } from "./lifecycle/disruption.js";
|
|
46
47
|
export type { DeepObservationResult, DeepResourceObservation, NormalizedDeepObservation, DeepNormalizationHooks, DeepNode, DeepArrayElement, DeepSide, } from "./deep-observation.js";
|
|
@@ -470,6 +471,8 @@ export interface ComponentPipelineOptions {
|
|
|
470
471
|
* `wave-<k>` runs `chant components fan-out --wave-gate <gate> --wave <k>`
|
|
471
472
|
* and hands the attempt record to the next job. See
|
|
472
473
|
* `components/gated-wave-pipeline.ts`. Unset, the pipeline is unchanged.
|
|
474
|
+
* Beside `prLoop` (#4003) it gives the pull request's apply a gate per
|
|
475
|
+
* wave instead: one apply job per wave (`prLoopWithWaves`).
|
|
473
476
|
*/
|
|
474
477
|
gatedWaves?: GatedWavePipelineOptions;
|
|
475
478
|
/**
|
|
@@ -587,6 +590,15 @@ export type OpTrigger = {
|
|
|
587
590
|
} | {
|
|
588
591
|
kind: "push";
|
|
589
592
|
branches?: string[];
|
|
593
|
+
/**
|
|
594
|
+
* Which pushes run the Op (#4169), for an Op a `ci.green` phase names
|
|
595
|
+
* with `build` and the tick reads from chant runs. `every`: each
|
|
596
|
+
* commit, in a run of its own that no later push cancels. `newest`:
|
|
597
|
+
* one run at a time, the newest push waiting and the ones between
|
|
598
|
+
* dropped, plus a run at each `ci/build/<sha>` tag the tick or `ci run
|
|
599
|
+
* --at` pushes. Absent: one run at a time per Op, as before.
|
|
600
|
+
*/
|
|
601
|
+
build?: "every" | "newest";
|
|
590
602
|
};
|
|
591
603
|
/**
|
|
592
604
|
* One step a generated Op job runs between the checkout and the
|
|
@@ -1615,6 +1627,23 @@ export interface LexiconPlugin {
|
|
|
1615
1627
|
/** Restrict to chant-owned resources (#119). A lexicon with no marker channel on this path says so. */
|
|
1616
1628
|
owned?: boolean;
|
|
1617
1629
|
}): Promise<DeepObservationResult>;
|
|
1630
|
+
/**
|
|
1631
|
+
* Entity types {@link observeHealth} reads (#4177). Data, not a method, so
|
|
1632
|
+
* core picks the entities a health read applies to without calling it.
|
|
1633
|
+
*/
|
|
1634
|
+
healthTypes?: readonly string[];
|
|
1635
|
+
/**
|
|
1636
|
+
* Whether each declared entity of a {@link healthTypes} type is up (#4177),
|
|
1637
|
+
* read separately from drift: a service's running count, a health check's
|
|
1638
|
+
* checkers, a revision's running state, a Ready condition.
|
|
1639
|
+
*
|
|
1640
|
+
* Every entity in `options.entities` lands in exactly one of `entities`,
|
|
1641
|
+
* `unobserved` or `absent`. A read that failed is `unobserved` with a reason,
|
|
1642
|
+
* never `unhealthy`: `unhealthy` is something the provider said. Throwing is
|
|
1643
|
+
* the whole-lexicon failure, and core reports every entity `read-failed`.
|
|
1644
|
+
* Endpoint overrides apply as on the other reads, so an emulator answers.
|
|
1645
|
+
*/
|
|
1646
|
+
observeHealth?(options: import("./health.js").HealthReadOptions): Promise<import("./health.js").HealthReadResult>;
|
|
1618
1647
|
/**
|
|
1619
1648
|
* This lexicon's noise rules for deep observation (#1014): which fields are
|
|
1620
1649
|
* read-only / server-populated / controller-managed / provider-defaulted, and
|