@deftai/directive-core 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/architecture/sor-preflight.d.ts +66 -0
- package/dist/architecture/sor-preflight.js +903 -0
- package/dist/branch/evaluate.d.ts +23 -0
- package/dist/branch/evaluate.js +136 -0
- package/dist/branch/git.d.ts +15 -0
- package/dist/branch/git.js +42 -0
- package/dist/branch/index.d.ts +3 -0
- package/dist/branch/index.js +3 -0
- package/dist/cache/cli.d.ts +3 -0
- package/dist/cache/cli.js +8 -0
- package/dist/cache/constants.d.ts +12 -0
- package/dist/cache/constants.js +14 -0
- package/dist/cache/errors.d.ts +34 -0
- package/dist/cache/errors.js +52 -0
- package/dist/cache/fetch.d.ts +101 -0
- package/dist/cache/fetch.js +413 -0
- package/dist/cache/index.d.ts +14 -0
- package/dist/cache/index.js +14 -0
- package/dist/cache/io.d.ts +15 -0
- package/dist/cache/io.js +53 -0
- package/dist/cache/json.d.ts +11 -0
- package/dist/cache/json.js +32 -0
- package/dist/cache/main.d.ts +3 -0
- package/dist/cache/main.js +319 -0
- package/dist/cache/operations.d.ts +34 -0
- package/dist/cache/operations.js +348 -0
- package/dist/cache/paths.d.ts +7 -0
- package/dist/cache/paths.js +27 -0
- package/dist/cache/quota.d.ts +56 -0
- package/dist/cache/quota.js +191 -0
- package/dist/cache/scanner.d.ts +28 -0
- package/dist/cache/scanner.js +362 -0
- package/dist/cache/test-helpers.d.ts +10 -0
- package/dist/cache/test-helpers.js +17 -0
- package/dist/cache/time.d.ts +9 -0
- package/dist/cache/time.js +20 -0
- package/dist/cache/types.d.ts +50 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/validate.d.ts +3 -0
- package/dist/cache/validate.js +118 -0
- package/dist/capacity/backfill.d.ts +52 -0
- package/dist/capacity/backfill.js +429 -0
- package/dist/capacity/index.d.ts +3 -0
- package/dist/capacity/index.js +3 -0
- package/dist/capacity/show.d.ts +73 -0
- package/dist/capacity/show.js +387 -0
- package/dist/check/index.d.ts +3 -0
- package/dist/check/index.js +2 -0
- package/dist/check/orchestrator.d.ts +51 -0
- package/dist/check/orchestrator.js +71 -0
- package/dist/codebase/constants.d.ts +2 -0
- package/dist/codebase/constants.js +2 -0
- package/dist/codebase/default-extractor.d.ts +28 -0
- package/dist/codebase/default-extractor.js +713 -0
- package/dist/codebase/index.d.ts +8 -0
- package/dist/codebase/index.js +8 -0
- package/dist/codebase/json.d.ts +14 -0
- package/dist/codebase/json.js +45 -0
- package/dist/codebase/map-fresh.d.ts +11 -0
- package/dist/codebase/map-fresh.js +125 -0
- package/dist/codebase/map.d.ts +19 -0
- package/dist/codebase/map.js +345 -0
- package/dist/codebase/projection-registry.d.ts +25 -0
- package/dist/codebase/projection-registry.js +93 -0
- package/dist/codebase/provider.d.ts +30 -0
- package/dist/codebase/provider.js +696 -0
- package/dist/content-contracts/skills/greptile-detector.d.ts +56 -0
- package/dist/content-contracts/skills/greptile-detector.js +368 -0
- package/dist/content-contracts/skills/helpers.d.ts +24 -0
- package/dist/content-contracts/skills/helpers.js +73 -0
- package/dist/content-contracts/skills/skill-frontmatter.d.ts +7 -0
- package/dist/content-contracts/skills/skill-frontmatter.js +65 -0
- package/dist/content-contracts/standards/_helpers.d.ts +49 -0
- package/dist/content-contracts/standards/_helpers.js +227 -0
- package/dist/content-contracts/standards/_shapes.d.ts +12 -0
- package/dist/content-contracts/standards/_shapes.js +45 -0
- package/dist/content-contracts/standards/_taskfile-helpers.d.ts +12 -0
- package/dist/content-contracts/standards/_taskfile-helpers.js +61 -0
- package/dist/content-root.d.ts +47 -0
- package/dist/content-root.js +89 -0
- package/dist/doctor/agents-md.d.ts +14 -0
- package/dist/doctor/agents-md.js +263 -0
- package/dist/doctor/checks.d.ts +16 -0
- package/dist/doctor/checks.js +351 -0
- package/dist/doctor/cli.d.ts +2 -0
- package/dist/doctor/cli.js +7 -0
- package/dist/doctor/constants.d.ts +15 -0
- package/dist/doctor/constants.js +40 -0
- package/dist/doctor/doctor-state.d.ts +16 -0
- package/dist/doctor/doctor-state.js +117 -0
- package/dist/doctor/flags.d.ts +5 -0
- package/dist/doctor/flags.js +63 -0
- package/dist/doctor/index.d.ts +14 -0
- package/dist/doctor/index.js +14 -0
- package/dist/doctor/json.d.ts +3 -0
- package/dist/doctor/json.js +21 -0
- package/dist/doctor/main.d.ts +3 -0
- package/dist/doctor/main.js +387 -0
- package/dist/doctor/manifest.d.ts +11 -0
- package/dist/doctor/manifest.js +114 -0
- package/dist/doctor/output.d.ts +19 -0
- package/dist/doctor/output.js +49 -0
- package/dist/doctor/paths.d.ts +16 -0
- package/dist/doctor/paths.js +106 -0
- package/dist/doctor/payload-staleness.d.ts +13 -0
- package/dist/doctor/payload-staleness.js +165 -0
- package/dist/doctor/taskfile.d.ts +6 -0
- package/dist/doctor/taskfile.js +65 -0
- package/dist/doctor/types.d.ts +76 -0
- package/dist/doctor/types.js +4 -0
- package/dist/doctor/which.d.ts +3 -0
- package/dist/doctor/which.js +17 -0
- package/dist/encoding/evaluate.d.ts +19 -0
- package/dist/encoding/evaluate.js +155 -0
- package/dist/encoding/git.d.ts +11 -0
- package/dist/encoding/git.js +36 -0
- package/dist/encoding/index.d.ts +6 -0
- package/dist/encoding/index.js +6 -0
- package/dist/encoding/patterns.d.ts +29 -0
- package/dist/encoding/patterns.js +109 -0
- package/dist/encoding/scan.d.ts +24 -0
- package/dist/encoding/scan.js +182 -0
- package/dist/encoding/text.d.ts +21 -0
- package/dist/encoding/text.js +111 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +55 -0
- package/dist/intake/candidates-log.d.ts +20 -0
- package/dist/intake/candidates-log.js +224 -0
- package/dist/intake/github-auth-modes-cli.d.ts +3 -0
- package/dist/intake/github-auth-modes-cli.js +23 -0
- package/dist/intake/github-auth-modes.d.ts +54 -0
- package/dist/intake/github-auth-modes.js +275 -0
- package/dist/intake/github-body-cli.d.ts +3 -0
- package/dist/intake/github-body-cli.js +30 -0
- package/dist/intake/github-body.d.ts +48 -0
- package/dist/intake/github-body.js +151 -0
- package/dist/intake/index.d.ts +15 -0
- package/dist/intake/index.js +15 -0
- package/dist/intake/issue-emit-cli.d.ts +3 -0
- package/dist/intake/issue-emit-cli.js +34 -0
- package/dist/intake/issue-emit.d.ts +63 -0
- package/dist/intake/issue-emit.js +351 -0
- package/dist/intake/issue-ingest-cli.d.ts +3 -0
- package/dist/intake/issue-ingest-cli.js +33 -0
- package/dist/intake/issue-ingest.d.ts +53 -0
- package/dist/intake/issue-ingest.js +477 -0
- package/dist/intake/markdown-scanners.d.ts +23 -0
- package/dist/intake/markdown-scanners.js +247 -0
- package/dist/intake/parity-scenarios.d.ts +22 -0
- package/dist/intake/parity-scenarios.js +32 -0
- package/dist/intake/platform-capabilities.d.ts +11 -0
- package/dist/intake/platform-capabilities.js +34 -0
- package/dist/intake/reconcile-issues-cli.d.ts +3 -0
- package/dist/intake/reconcile-issues-cli.js +31 -0
- package/dist/intake/reconcile-issues.d.ts +60 -0
- package/dist/intake/reconcile-issues.js +756 -0
- package/dist/integration-e2e/bootstrap-cache-module.d.ts +5 -0
- package/dist/integration-e2e/bootstrap-cache-module.js +21 -0
- package/dist/integration-e2e/helpers.d.ts +28 -0
- package/dist/integration-e2e/helpers.js +157 -0
- package/dist/lifecycle/event-detect.d.ts +32 -0
- package/dist/lifecycle/event-detect.js +172 -0
- package/dist/lifecycle/events.d.ts +45 -0
- package/dist/lifecycle/events.js +340 -0
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/lifecycle-hygiene.d.ts +59 -0
- package/dist/lifecycle/lifecycle-hygiene.js +388 -0
- package/dist/orchestration/index.d.ts +7 -0
- package/dist/orchestration/index.js +7 -0
- package/dist/orchestration/judgment-policy.d.ts +23 -0
- package/dist/orchestration/judgment-policy.js +228 -0
- package/dist/orchestration/pathspec.d.ts +11 -0
- package/dist/orchestration/pathspec.js +95 -0
- package/dist/orchestration/probe-session.d.ts +74 -0
- package/dist/orchestration/probe-session.js +478 -0
- package/dist/orchestration/subagent-monitor.d.ts +64 -0
- package/dist/orchestration/subagent-monitor.js +405 -0
- package/dist/orchestration/verify-investigation.d.ts +27 -0
- package/dist/orchestration/verify-investigation.js +314 -0
- package/dist/orchestration/verify-judgment-gates.d.ts +66 -0
- package/dist/orchestration/verify-judgment-gates.js +710 -0
- package/dist/packs/index.d.ts +4 -0
- package/dist/packs/index.js +4 -0
- package/dist/packs/pack-render.d.ts +31 -0
- package/dist/packs/pack-render.js +357 -0
- package/dist/packs/packs-slice.d.ts +58 -0
- package/dist/packs/packs-slice.js +649 -0
- package/dist/packs/quarantine-ext.d.ts +7 -0
- package/dist/packs/quarantine-ext.js +164 -0
- package/dist/platform/agents-md.d.ts +31 -0
- package/dist/platform/agents-md.js +320 -0
- package/dist/platform/changelog-cli.d.ts +3 -0
- package/dist/platform/changelog-cli.js +64 -0
- package/dist/platform/constants.d.ts +20 -0
- package/dist/platform/constants.js +27 -0
- package/dist/platform/index.d.ts +9 -0
- package/dist/platform/index.js +9 -0
- package/dist/platform/ip-risk.d.ts +10 -0
- package/dist/platform/ip-risk.js +235 -0
- package/dist/platform/linear-scan.d.ts +36 -0
- package/dist/platform/linear-scan.js +174 -0
- package/dist/platform/platform-capabilities.d.ts +45 -0
- package/dist/platform/platform-capabilities.js +190 -0
- package/dist/platform/resolve-changelog-unreleased.d.ts +24 -0
- package/dist/platform/resolve-changelog-unreleased.js +364 -0
- package/dist/platform/resolve-version.d.ts +22 -0
- package/dist/platform/resolve-version.js +303 -0
- package/dist/platform/slug-normalize.d.ts +9 -0
- package/dist/platform/slug-normalize.js +110 -0
- package/dist/policy/autonomy.d.ts +43 -0
- package/dist/policy/autonomy.js +220 -0
- package/dist/policy/capacity.d.ts +45 -0
- package/dist/policy/capacity.js +251 -0
- package/dist/policy/decisions.d.ts +26 -0
- package/dist/policy/decisions.js +114 -0
- package/dist/policy/disclosure.d.ts +4 -0
- package/dist/policy/disclosure.js +19 -0
- package/dist/policy/index.d.ts +43 -0
- package/dist/policy/index.js +298 -0
- package/dist/policy/resolve.d.ts +38 -0
- package/dist/policy/resolve.js +228 -0
- package/dist/policy/wip.d.ts +15 -0
- package/dist/policy/wip.js +81 -0
- package/dist/pr-closing-keywords/constants.d.ts +6 -0
- package/dist/pr-closing-keywords/constants.js +6 -0
- package/dist/pr-closing-keywords/detect.d.ts +5 -0
- package/dist/pr-closing-keywords/detect.js +113 -0
- package/dist/pr-closing-keywords/gh.d.ts +6 -0
- package/dist/pr-closing-keywords/gh.js +129 -0
- package/dist/pr-closing-keywords/index.d.ts +7 -0
- package/dist/pr-closing-keywords/index.js +6 -0
- package/dist/pr-closing-keywords/io.d.ts +3 -0
- package/dist/pr-closing-keywords/io.js +22 -0
- package/dist/pr-closing-keywords/main.d.ts +9 -0
- package/dist/pr-closing-keywords/main.js +246 -0
- package/dist/pr-closing-keywords/types.d.ts +23 -0
- package/dist/pr-closing-keywords/types.js +2 -0
- package/dist/pr-merge-readiness/compute.d.ts +7 -0
- package/dist/pr-merge-readiness/compute.js +210 -0
- package/dist/pr-merge-readiness/constants.d.ts +20 -0
- package/dist/pr-merge-readiness/constants.js +32 -0
- package/dist/pr-merge-readiness/evaluate.d.ts +5 -0
- package/dist/pr-merge-readiness/evaluate.js +48 -0
- package/dist/pr-merge-readiness/gh.d.ts +22 -0
- package/dist/pr-merge-readiness/gh.js +281 -0
- package/dist/pr-merge-readiness/index.d.ts +9 -0
- package/dist/pr-merge-readiness/index.js +8 -0
- package/dist/pr-merge-readiness/main.d.ts +14 -0
- package/dist/pr-merge-readiness/main.js +67 -0
- package/dist/pr-merge-readiness/output.d.ts +7 -0
- package/dist/pr-merge-readiness/output.js +98 -0
- package/dist/pr-merge-readiness/parse.d.ts +6 -0
- package/dist/pr-merge-readiness/parse.js +83 -0
- package/dist/pr-merge-readiness/types.d.ts +29 -0
- package/dist/pr-merge-readiness/types.js +2 -0
- package/dist/pr-monitor/cadence.d.ts +3 -0
- package/dist/pr-monitor/cadence.js +12 -0
- package/dist/pr-monitor/constants.d.ts +8 -0
- package/dist/pr-monitor/constants.js +12 -0
- package/dist/pr-monitor/index.d.ts +7 -0
- package/dist/pr-monitor/index.js +6 -0
- package/dist/pr-monitor/main.d.ts +17 -0
- package/dist/pr-monitor/main.js +169 -0
- package/dist/pr-monitor/monitor.d.ts +9 -0
- package/dist/pr-monitor/monitor.js +106 -0
- package/dist/pr-monitor/readiness.d.ts +6 -0
- package/dist/pr-monitor/readiness.js +64 -0
- package/dist/pr-monitor/types.d.ts +30 -0
- package/dist/pr-monitor/types.js +2 -0
- package/dist/pr-protected-issues/constants.d.ts +7 -0
- package/dist/pr-protected-issues/constants.js +7 -0
- package/dist/pr-protected-issues/gh.d.ts +9 -0
- package/dist/pr-protected-issues/gh.js +96 -0
- package/dist/pr-protected-issues/index.d.ts +6 -0
- package/dist/pr-protected-issues/index.js +5 -0
- package/dist/pr-protected-issues/main.d.ts +14 -0
- package/dist/pr-protected-issues/main.js +128 -0
- package/dist/pr-protected-issues/parse.d.ts +6 -0
- package/dist/pr-protected-issues/parse.js +21 -0
- package/dist/pr-protected-issues/types.d.ts +8 -0
- package/dist/pr-protected-issues/types.js +2 -0
- package/dist/pr-wait-mergeable/cascade.d.ts +12 -0
- package/dist/pr-wait-mergeable/cascade.js +107 -0
- package/dist/pr-wait-mergeable/classify.d.ts +5 -0
- package/dist/pr-wait-mergeable/classify.js +47 -0
- package/dist/pr-wait-mergeable/constants.d.ts +5 -0
- package/dist/pr-wait-mergeable/constants.js +5 -0
- package/dist/pr-wait-mergeable/index.d.ts +8 -0
- package/dist/pr-wait-mergeable/index.js +7 -0
- package/dist/pr-wait-mergeable/main.d.ts +18 -0
- package/dist/pr-wait-mergeable/main.js +213 -0
- package/dist/pr-wait-mergeable/result.d.ts +9 -0
- package/dist/pr-wait-mergeable/result.js +38 -0
- package/dist/pr-wait-mergeable/types.d.ts +16 -0
- package/dist/pr-wait-mergeable/types.js +2 -0
- package/dist/pr-wait-mergeable/wrappers.d.ts +26 -0
- package/dist/pr-wait-mergeable/wrappers.js +103 -0
- package/dist/preflight/evaluate.d.ts +22 -0
- package/dist/preflight/evaluate.js +137 -0
- package/dist/preflight/index.d.ts +3 -0
- package/dist/preflight/index.js +2 -0
- package/dist/preflight-cache/evaluate.d.ts +40 -0
- package/dist/preflight-cache/evaluate.js +481 -0
- package/dist/preflight-cache/index.d.ts +3 -0
- package/dist/preflight-cache/index.js +2 -0
- package/dist/preflight-gh/classifier.d.ts +56 -0
- package/dist/preflight-gh/classifier.js +415 -0
- package/dist/preflight-gh/index.d.ts +3 -0
- package/dist/preflight-gh/index.js +2 -0
- package/dist/release/changelog.d.ts +9 -0
- package/dist/release/changelog.js +105 -0
- package/dist/release/cli.d.ts +2 -0
- package/dist/release/cli.js +7 -0
- package/dist/release/constants.d.ts +22 -0
- package/dist/release/constants.js +85 -0
- package/dist/release/flags.d.ts +4 -0
- package/dist/release/flags.js +131 -0
- package/dist/release/gh.d.ts +16 -0
- package/dist/release/gh.js +210 -0
- package/dist/release/git.d.ts +11 -0
- package/dist/release/git.js +84 -0
- package/dist/release/index.d.ts +14 -0
- package/dist/release/index.js +15 -0
- package/dist/release/main.d.ts +3 -0
- package/dist/release/main.js +47 -0
- package/dist/release/paths.d.ts +6 -0
- package/dist/release/paths.js +39 -0
- package/dist/release/pipeline.d.ts +6 -0
- package/dist/release/pipeline.js +314 -0
- package/dist/release/pyproject-sync.d.ts +6 -0
- package/dist/release/pyproject-sync.js +52 -0
- package/dist/release/pyproject.d.ts +3 -0
- package/dist/release/pyproject.js +33 -0
- package/dist/release/python-bridge.d.ts +7 -0
- package/dist/release/python-bridge.js +144 -0
- package/dist/release/spawn.d.ts +8 -0
- package/dist/release/spawn.js +44 -0
- package/dist/release/types.d.ts +58 -0
- package/dist/release/types.js +2 -0
- package/dist/release/version.d.ts +11 -0
- package/dist/release/version.js +74 -0
- package/dist/release-e2e/constants.d.ts +22 -0
- package/dist/release-e2e/constants.js +43 -0
- package/dist/release-e2e/entrypoint-worker-thread.d.ts +2 -0
- package/dist/release-e2e/entrypoint-worker-thread.js +22 -0
- package/dist/release-e2e/entrypoint-worker.d.ts +13 -0
- package/dist/release-e2e/entrypoint-worker.js +50 -0
- package/dist/release-e2e/entrypoint.d.ts +40 -0
- package/dist/release-e2e/entrypoint.js +257 -0
- package/dist/release-e2e/flags.d.ts +5 -0
- package/dist/release-e2e/flags.js +80 -0
- package/dist/release-e2e/gh-ops.d.ts +5 -0
- package/dist/release-e2e/gh-ops.js +72 -0
- package/dist/release-e2e/git-ops.d.ts +6 -0
- package/dist/release-e2e/git-ops.js +47 -0
- package/dist/release-e2e/index.d.ts +10 -0
- package/dist/release-e2e/index.js +10 -0
- package/dist/release-e2e/main.d.ts +4 -0
- package/dist/release-e2e/main.js +78 -0
- package/dist/release-e2e/npm-ops.d.ts +29 -0
- package/dist/release-e2e/npm-ops.js +149 -0
- package/dist/release-e2e/rehearsal.d.ts +3 -0
- package/dist/release-e2e/rehearsal.js +51 -0
- package/dist/release-e2e/rollback-bridge.d.ts +3 -0
- package/dist/release-e2e/rollback-bridge.js +20 -0
- package/dist/release-e2e/types.d.ts +40 -0
- package/dist/release-e2e/types.js +2 -0
- package/dist/release-publish/cli.d.ts +2 -0
- package/dist/release-publish/cli.js +7 -0
- package/dist/release-publish/constants.d.ts +4 -0
- package/dist/release-publish/constants.js +24 -0
- package/dist/release-publish/flags.d.ts +5 -0
- package/dist/release-publish/flags.js +67 -0
- package/dist/release-publish/gh-api.d.ts +6 -0
- package/dist/release-publish/gh-api.js +102 -0
- package/dist/release-publish/index.d.ts +7 -0
- package/dist/release-publish/index.js +8 -0
- package/dist/release-publish/main.d.ts +3 -0
- package/dist/release-publish/main.js +38 -0
- package/dist/release-publish/pipeline.d.ts +4 -0
- package/dist/release-publish/pipeline.js +46 -0
- package/dist/release-publish/types.d.ts +25 -0
- package/dist/release-publish/types.js +2 -0
- package/dist/release-rollback/constants.d.ts +18 -0
- package/dist/release-rollback/constants.js +55 -0
- package/dist/release-rollback/flags.d.ts +4 -0
- package/dist/release-rollback/flags.js +136 -0
- package/dist/release-rollback/gh.d.ts +5 -0
- package/dist/release-rollback/gh.js +71 -0
- package/dist/release-rollback/git.d.ts +9 -0
- package/dist/release-rollback/git.js +87 -0
- package/dist/release-rollback/guard.d.ts +12 -0
- package/dist/release-rollback/guard.js +97 -0
- package/dist/release-rollback/index.d.ts +9 -0
- package/dist/release-rollback/index.js +10 -0
- package/dist/release-rollback/main.d.ts +3 -0
- package/dist/release-rollback/main.js +51 -0
- package/dist/release-rollback/pipeline.d.ts +7 -0
- package/dist/release-rollback/pipeline.js +221 -0
- package/dist/release-rollback/types.d.ts +41 -0
- package/dist/release-rollback/types.js +2 -0
- package/dist/render/constants.d.ts +16 -0
- package/dist/render/constants.js +78 -0
- package/dist/render/framework-commands.d.ts +41 -0
- package/dist/render/framework-commands.js +416 -0
- package/dist/render/index.d.ts +15 -0
- package/dist/render/index.js +15 -0
- package/dist/render/prd-render.d.ts +14 -0
- package/dist/render/prd-render.js +79 -0
- package/dist/render/project-render.d.ts +20 -0
- package/dist/render/project-render.js +169 -0
- package/dist/render/roadmap-render.d.ts +8 -0
- package/dist/render/roadmap-render.js +387 -0
- package/dist/render/spec-render.d.ts +13 -0
- package/dist/render/spec-render.js +362 -0
- package/dist/render/spec-validate.d.ts +6 -0
- package/dist/render/spec-validate.js +157 -0
- package/dist/render/text-utils.d.ts +8 -0
- package/dist/render/text-utils.js +72 -0
- package/dist/scm/argv.d.ts +7 -0
- package/dist/scm/argv.js +54 -0
- package/dist/scm/binary.d.ts +11 -0
- package/dist/scm/binary.js +35 -0
- package/dist/scm/build-command.d.ts +11 -0
- package/dist/scm/build-command.js +23 -0
- package/dist/scm/call.d.ts +25 -0
- package/dist/scm/call.js +38 -0
- package/dist/scm/cli.d.ts +3 -0
- package/dist/scm/cli.js +7 -0
- package/dist/scm/constants.d.ts +11 -0
- package/dist/scm/constants.js +11 -0
- package/dist/scm/errors.d.ts +5 -0
- package/dist/scm/errors.js +8 -0
- package/dist/scm/gh-rest.d.ts +74 -0
- package/dist/scm/gh-rest.js +326 -0
- package/dist/scm/index.d.ts +11 -0
- package/dist/scm/index.js +11 -0
- package/dist/scm/main.d.ts +12 -0
- package/dist/scm/main.js +65 -0
- package/dist/scm/py-format.d.ts +9 -0
- package/dist/scm/py-format.js +31 -0
- package/dist/scm/rest-dispatch.d.ts +14 -0
- package/dist/scm/rest-dispatch.js +175 -0
- package/dist/scope/audit-log.d.ts +14 -0
- package/dist/scope/audit-log.js +186 -0
- package/dist/scope/capacity-stamp.d.ts +3 -0
- package/dist/scope/capacity-stamp.js +45 -0
- package/dist/scope/cli.d.ts +4 -0
- package/dist/scope/cli.js +11 -0
- package/dist/scope/constants.d.ts +19 -0
- package/dist/scope/constants.js +44 -0
- package/dist/scope/decompose.d.ts +42 -0
- package/dist/scope/decompose.js +1016 -0
- package/dist/scope/decomposed-refs.d.ts +6 -0
- package/dist/scope/decomposed-refs.js +173 -0
- package/dist/scope/demote.d.ts +24 -0
- package/dist/scope/demote.js +209 -0
- package/dist/scope/index.d.ts +12 -0
- package/dist/scope/index.js +12 -0
- package/dist/scope/main.d.ts +30 -0
- package/dist/scope/main.js +365 -0
- package/dist/scope/project-context.d.ts +6 -0
- package/dist/scope/project-context.js +55 -0
- package/dist/scope/project-definition-sync.d.ts +3 -0
- package/dist/scope/project-definition-sync.js +157 -0
- package/dist/scope/transition.d.ts +10 -0
- package/dist/scope/transition.js +133 -0
- package/dist/scope/undo.d.ts +25 -0
- package/dist/scope/undo.js +334 -0
- package/dist/scope/vbrief-json.d.ts +4 -0
- package/dist/scope/vbrief-json.js +8 -0
- package/dist/scope/vbrief-ref.d.ts +11 -0
- package/dist/scope/vbrief-ref.js +100 -0
- package/dist/scope/wip-cap-check.d.ts +11 -0
- package/dist/scope/wip-cap-check.js +23 -0
- package/dist/session/git.d.ts +14 -0
- package/dist/session/git.js +49 -0
- package/dist/session/index.d.ts +9 -0
- package/dist/session/index.js +9 -0
- package/dist/session/json.d.ts +7 -0
- package/dist/session/json.js +29 -0
- package/dist/session/resume-conditions.d.ts +56 -0
- package/dist/session/resume-conditions.js +486 -0
- package/dist/session/ritual-entrypoint.d.ts +20 -0
- package/dist/session/ritual-entrypoint.js +86 -0
- package/dist/session/ritual-sentinel.d.ts +58 -0
- package/dist/session/ritual-sentinel.js +338 -0
- package/dist/session/session-start-hook.d.ts +14 -0
- package/dist/session/session-start-hook.js +53 -0
- package/dist/session/session-start.d.ts +41 -0
- package/dist/session/session-start.js +290 -0
- package/dist/session/staleness.d.ts +8 -0
- package/dist/session/staleness.js +91 -0
- package/dist/session/time.d.ts +5 -0
- package/dist/session/time.js +19 -0
- package/dist/session/verify-session-ritual.d.ts +29 -0
- package/dist/session/verify-session-ritual.js +222 -0
- package/dist/slice/cli.d.ts +21 -0
- package/dist/slice/cli.js +248 -0
- package/dist/slice/constants.d.ts +18 -0
- package/dist/slice/constants.js +30 -0
- package/dist/slice/errors.d.ts +9 -0
- package/dist/slice/errors.js +15 -0
- package/dist/slice/existing.d.ts +53 -0
- package/dist/slice/existing.js +344 -0
- package/dist/slice/index.d.ts +10 -0
- package/dist/slice/index.js +10 -0
- package/dist/slice/json.d.ts +7 -0
- package/dist/slice/json.js +25 -0
- package/dist/slice/lock.d.ts +9 -0
- package/dist/slice/lock.js +59 -0
- package/dist/slice/project-context.d.ts +15 -0
- package/dist/slice/project-context.js +87 -0
- package/dist/slice/record.d.ts +50 -0
- package/dist/slice/record.js +139 -0
- package/dist/slice/validate.d.ts +3 -0
- package/dist/slice/validate.js +86 -0
- package/dist/story-ready/allocation.d.ts +14 -0
- package/dist/story-ready/allocation.js +61 -0
- package/dist/story-ready/evaluate.d.ts +23 -0
- package/dist/story-ready/evaluate.js +161 -0
- package/dist/story-ready/git.d.ts +6 -0
- package/dist/story-ready/git.js +26 -0
- package/dist/story-ready/index.d.ts +4 -0
- package/dist/story-ready/index.js +4 -0
- package/dist/subprocess/max-buffer.d.ts +18 -0
- package/dist/subprocess/max-buffer.js +18 -0
- package/dist/swarm/complete-cohort-cli.d.ts +3 -0
- package/dist/swarm/complete-cohort-cli.js +42 -0
- package/dist/swarm/complete-cohort.d.ts +34 -0
- package/dist/swarm/complete-cohort.js +407 -0
- package/dist/swarm/constants.d.ts +18 -0
- package/dist/swarm/constants.js +24 -0
- package/dist/swarm/index.d.ts +18 -0
- package/dist/swarm/index.js +18 -0
- package/dist/swarm/launch-cli.d.ts +5 -0
- package/dist/swarm/launch-cli.js +111 -0
- package/dist/swarm/launch.d.ts +78 -0
- package/dist/swarm/launch.js +587 -0
- package/dist/swarm/readiness-cli.d.ts +3 -0
- package/dist/swarm/readiness-cli.js +25 -0
- package/dist/swarm/readiness.d.ts +24 -0
- package/dist/swarm/readiness.js +606 -0
- package/dist/swarm/routing-set-cli.d.ts +3 -0
- package/dist/swarm/routing-set-cli.js +82 -0
- package/dist/swarm/routing-verify-cli.d.ts +3 -0
- package/dist/swarm/routing-verify-cli.js +51 -0
- package/dist/swarm/routing-verify.d.ts +20 -0
- package/dist/swarm/routing-verify.js +104 -0
- package/dist/swarm/routing.d.ts +57 -0
- package/dist/swarm/routing.js +173 -0
- package/dist/swarm/subagent-backend.d.ts +22 -0
- package/dist/swarm/subagent-backend.js +162 -0
- package/dist/swarm/subprocess.d.ts +10 -0
- package/dist/swarm/subprocess.js +34 -0
- package/dist/swarm/verify-review-clean-cli.d.ts +3 -0
- package/dist/swarm/verify-review-clean-cli.js +38 -0
- package/dist/swarm/verify-review-clean.d.ts +40 -0
- package/dist/swarm/verify-review-clean.js +240 -0
- package/dist/swarm/worktrees-cli.d.ts +9 -0
- package/dist/swarm/worktrees-cli.js +57 -0
- package/dist/swarm/worktrees.d.ts +39 -0
- package/dist/swarm/worktrees.js +178 -0
- package/dist/text/redos-safe.d.ts +29 -0
- package/dist/text/redos-safe.js +338 -0
- package/dist/triage/actions/candidates-log.d.ts +8 -0
- package/dist/triage/actions/candidates-log.js +195 -0
- package/dist/triage/actions/errors.d.ts +17 -0
- package/dist/triage/actions/errors.js +29 -0
- package/dist/triage/actions/index.d.ts +19 -0
- package/dist/triage/actions/index.js +305 -0
- package/dist/triage/actions/resume-on.d.ts +3 -0
- package/dist/triage/actions/resume-on.js +65 -0
- package/dist/triage/actions/types.d.ts +57 -0
- package/dist/triage/actions/types.js +2 -0
- package/dist/triage/bootstrap/gitignore.d.ts +16 -0
- package/dist/triage/bootstrap/gitignore.js +414 -0
- package/dist/triage/bootstrap/index.d.ts +44 -0
- package/dist/triage/bootstrap/index.js +572 -0
- package/dist/triage/bootstrap/types.d.ts +60 -0
- package/dist/triage/bootstrap/types.js +2 -0
- package/dist/triage/bulk/index.d.ts +99 -0
- package/dist/triage/bulk/index.js +454 -0
- package/dist/triage/classify/index.d.ts +88 -0
- package/dist/triage/classify/index.js +738 -0
- package/dist/triage/help/index.d.ts +25 -0
- package/dist/triage/help/index.js +212 -0
- package/dist/triage/help/registry-data.d.ts +555 -0
- package/dist/triage/help/registry-data.js +841 -0
- package/dist/triage/index.d.ts +23 -0
- package/dist/triage/index.js +23 -0
- package/dist/triage/queue/audit.d.ts +12 -0
- package/dist/triage/queue/audit.js +47 -0
- package/dist/triage/queue/build-queue.d.ts +9 -0
- package/dist/triage/queue/build-queue.js +133 -0
- package/dist/triage/queue/cache.d.ts +20 -0
- package/dist/triage/queue/cache.js +169 -0
- package/dist/triage/queue/constants.d.ts +22 -0
- package/dist/triage/queue/constants.js +28 -0
- package/dist/triage/queue/derive-group.d.ts +7 -0
- package/dist/triage/queue/derive-group.js +20 -0
- package/dist/triage/queue/index.d.ts +12 -0
- package/dist/triage/queue/index.js +12 -0
- package/dist/triage/queue/project.d.ts +6 -0
- package/dist/triage/queue/project.js +18 -0
- package/dist/triage/queue/ranking-labels.d.ts +10 -0
- package/dist/triage/queue/ranking-labels.js +54 -0
- package/dist/triage/queue/render.d.ts +9 -0
- package/dist/triage/queue/render.js +35 -0
- package/dist/triage/queue/repo.d.ts +5 -0
- package/dist/triage/queue/repo.js +36 -0
- package/dist/triage/queue/scope-walk.d.ts +13 -0
- package/dist/triage/queue/scope-walk.js +170 -0
- package/dist/triage/queue/selection.d.ts +28 -0
- package/dist/triage/queue/selection.js +109 -0
- package/dist/triage/queue/types.d.ts +58 -0
- package/dist/triage/queue/types.js +2 -0
- package/dist/triage/reconcile/audit.d.ts +4 -0
- package/dist/triage/reconcile/audit.js +62 -0
- package/dist/triage/reconcile/index.d.ts +5 -0
- package/dist/triage/reconcile/index.js +5 -0
- package/dist/triage/reconcile/parse-uri.d.ts +4 -0
- package/dist/triage/reconcile/parse-uri.js +43 -0
- package/dist/triage/reconcile/reconcile.d.ts +17 -0
- package/dist/triage/reconcile/reconcile.js +163 -0
- package/dist/triage/reconcile/types.d.ts +23 -0
- package/dist/triage/reconcile/types.js +70 -0
- package/dist/triage/refresh/drift.d.ts +15 -0
- package/dist/triage/refresh/drift.js +72 -0
- package/dist/triage/refresh/extract.d.ts +3 -0
- package/dist/triage/refresh/extract.js +43 -0
- package/dist/triage/refresh/index.d.ts +5 -0
- package/dist/triage/refresh/index.js +5 -0
- package/dist/triage/refresh/refresh.d.ts +16 -0
- package/dist/triage/refresh/refresh.js +95 -0
- package/dist/triage/refresh/types.d.ts +18 -0
- package/dist/triage/refresh/types.js +7 -0
- package/dist/triage/scope/cli.d.ts +23 -0
- package/dist/triage/scope/cli.js +257 -0
- package/dist/triage/scope/constants.d.ts +16 -0
- package/dist/triage/scope/constants.js +25 -0
- package/dist/triage/scope/coverage.d.ts +24 -0
- package/dist/triage/scope/coverage.js +96 -0
- package/dist/triage/scope/duration.d.ts +6 -0
- package/dist/triage/scope/duration.js +44 -0
- package/dist/triage/scope/evaluate.d.ts +18 -0
- package/dist/triage/scope/evaluate.js +161 -0
- package/dist/triage/scope/index.d.ts +14 -0
- package/dist/triage/scope/index.js +14 -0
- package/dist/triage/scope/milestone.d.ts +13 -0
- package/dist/triage/scope/milestone.js +178 -0
- package/dist/triage/scope/mutations-core.d.ts +24 -0
- package/dist/triage/scope/mutations-core.js +216 -0
- package/dist/triage/scope/mutations.d.ts +21 -0
- package/dist/triage/scope/mutations.js +203 -0
- package/dist/triage/scope/normalize.d.ts +5 -0
- package/dist/triage/scope/normalize.js +45 -0
- package/dist/triage/scope/python-repr.d.ts +7 -0
- package/dist/triage/scope/python-repr.js +25 -0
- package/dist/triage/scope/renderers.d.ts +9 -0
- package/dist/triage/scope/renderers.js +177 -0
- package/dist/triage/scope/resolve.d.ts +15 -0
- package/dist/triage/scope/resolve.js +122 -0
- package/dist/triage/scope/time.d.ts +6 -0
- package/dist/triage/scope/time.js +18 -0
- package/dist/triage/scope/validate.d.ts +11 -0
- package/dist/triage/scope/validate.js +272 -0
- package/dist/triage/scope-drift/add-ignore.d.ts +10 -0
- package/dist/triage/scope-drift/add-ignore.js +78 -0
- package/dist/triage/scope-drift/cache-walker.d.ts +8 -0
- package/dist/triage/scope-drift/cache-walker.js +103 -0
- package/dist/triage/scope-drift/compute.d.ts +9 -0
- package/dist/triage/scope-drift/compute.js +92 -0
- package/dist/triage/scope-drift/index.d.ts +6 -0
- package/dist/triage/scope-drift/index.js +6 -0
- package/dist/triage/scope-drift/render.d.ts +4 -0
- package/dist/triage/scope-drift/render.js +45 -0
- package/dist/triage/scope-drift/scope-rules.d.ts +16 -0
- package/dist/triage/scope-drift/scope-rules.js +149 -0
- package/dist/triage/scope-drift/types.d.ts +13 -0
- package/dist/triage/scope-drift/types.js +8 -0
- package/dist/triage/smoketest/index.d.ts +81 -0
- package/dist/triage/smoketest/index.js +335 -0
- package/dist/triage/subscribe/index.d.ts +38 -0
- package/dist/triage/subscribe/index.js +303 -0
- package/dist/triage/summary/index.d.ts +70 -0
- package/dist/triage/summary/index.js +431 -0
- package/dist/triage/summary/reconcilable.d.ts +12 -0
- package/dist/triage/summary/reconcilable.js +150 -0
- package/dist/triage/summary/scope-drift.d.ts +5 -0
- package/dist/triage/summary/scope-drift.js +219 -0
- package/dist/triage/welcome/constants.d.ts +24 -0
- package/dist/triage/welcome/constants.js +34 -0
- package/dist/triage/welcome/default-mode.d.ts +21 -0
- package/dist/triage/welcome/default-mode.js +48 -0
- package/dist/triage/welcome/index.d.ts +6 -0
- package/dist/triage/welcome/index.js +6 -0
- package/dist/triage/welcome/prior-state.d.ts +17 -0
- package/dist/triage/welcome/prior-state.js +170 -0
- package/dist/triage/welcome/summary.d.ts +23 -0
- package/dist/triage/welcome/summary.js +303 -0
- package/dist/triage/welcome/writers.d.ts +17 -0
- package/dist/triage/welcome/writers.js +157 -0
- package/dist/ts-check-lane/index.d.ts +3 -0
- package/dist/ts-check-lane/index.js +2 -0
- package/dist/ts-check-lane/run-lane.d.ts +53 -0
- package/dist/ts-check-lane/run-lane.js +98 -0
- package/dist/validate-content/capacity-policy.d.ts +82 -0
- package/dist/validate-content/capacity-policy.js +399 -0
- package/dist/validate-content/capacity-show.d.ts +60 -0
- package/dist/validate-content/capacity-show.js +336 -0
- package/dist/validate-content/filename.d.ts +3 -0
- package/dist/validate-content/filename.js +54 -0
- package/dist/validate-content/index.d.ts +9 -0
- package/dist/validate-content/index.js +9 -0
- package/dist/validate-content/link-parser.d.ts +5 -0
- package/dist/validate-content/link-parser.js +42 -0
- package/dist/validate-content/types.d.ts +8 -0
- package/dist/validate-content/types.js +2 -0
- package/dist/validate-content/validate-links.d.ts +17 -0
- package/dist/validate-content/validate-links.js +114 -0
- package/dist/validate-content/validate-strategy-output.d.ts +11 -0
- package/dist/validate-content/validate-strategy-output.js +120 -0
- package/dist/validate-content/verify-capacity.d.ts +14 -0
- package/dist/validate-content/verify-capacity.js +96 -0
- package/dist/vbrief-activate/activate.d.ts +13 -0
- package/dist/vbrief-activate/activate.js +184 -0
- package/dist/vbrief-activate/constants.d.ts +9 -0
- package/dist/vbrief-activate/constants.js +11 -0
- package/dist/vbrief-activate/index.d.ts +6 -0
- package/dist/vbrief-activate/index.js +4 -0
- package/dist/vbrief-activate/main.d.ts +14 -0
- package/dist/vbrief-activate/main.js +33 -0
- package/dist/vbrief-build/build.d.ts +13 -0
- package/dist/vbrief-build/build.js +123 -0
- package/dist/vbrief-build/constants.d.ts +13 -0
- package/dist/vbrief-build/constants.js +34 -0
- package/dist/vbrief-build/index.d.ts +12 -0
- package/dist/vbrief-build/index.js +11 -0
- package/dist/vbrief-build/json.d.ts +3 -0
- package/dist/vbrief-build/json.js +5 -0
- package/dist/vbrief-build/main.d.ts +5 -0
- package/dist/vbrief-build/main.js +65 -0
- package/dist/vbrief-build/parity-scenarios.d.ts +19 -0
- package/dist/vbrief-build/parity-scenarios.js +321 -0
- package/dist/vbrief-build/project-definition-io.d.ts +13 -0
- package/dist/vbrief-build/project-definition-io.js +117 -0
- package/dist/vbrief-build/routing.d.ts +13 -0
- package/dist/vbrief-build/routing.js +110 -0
- package/dist/vbrief-build/sources.d.ts +16 -0
- package/dist/vbrief-build/sources.js +294 -0
- package/dist/vbrief-build/speckit.d.ts +23 -0
- package/dist/vbrief-build/speckit.js +212 -0
- package/dist/vbrief-build/types.d.ts +18 -0
- package/dist/vbrief-build/types.js +7 -0
- package/dist/vbrief-reconcile/graph.d.ts +11 -0
- package/dist/vbrief-reconcile/graph.js +171 -0
- package/dist/vbrief-reconcile/index.d.ts +10 -0
- package/dist/vbrief-reconcile/index.js +9 -0
- package/dist/vbrief-reconcile/labels.d.ts +22 -0
- package/dist/vbrief-reconcile/labels.js +252 -0
- package/dist/vbrief-reconcile/main.d.ts +18 -0
- package/dist/vbrief-reconcile/main.js +149 -0
- package/dist/vbrief-reconcile/parity-scenarios.d.ts +16 -0
- package/dist/vbrief-reconcile/parity-scenarios.js +385 -0
- package/dist/vbrief-reconcile/py-repr.d.ts +3 -0
- package/dist/vbrief-reconcile/py-repr.js +5 -0
- package/dist/vbrief-reconcile/reconciliation.d.ts +20 -0
- package/dist/vbrief-reconcile/reconciliation.js +542 -0
- package/dist/vbrief-reconcile/swarm-deps.d.ts +8 -0
- package/dist/vbrief-reconcile/swarm-deps.js +142 -0
- package/dist/vbrief-reconcile/types.d.ts +128 -0
- package/dist/vbrief-reconcile/types.js +2 -0
- package/dist/vbrief-reconcile/umbrellas.d.ts +48 -0
- package/dist/vbrief-reconcile/umbrellas.js +462 -0
- package/dist/vbrief-validate/conformance.d.ts +26 -0
- package/dist/vbrief-validate/conformance.js +273 -0
- package/dist/vbrief-validate/constants.d.ts +13 -0
- package/dist/vbrief-validate/constants.js +36 -0
- package/dist/vbrief-validate/decomposition.d.ts +3 -0
- package/dist/vbrief-validate/decomposition.js +38 -0
- package/dist/vbrief-validate/epic-links.d.ts +4 -0
- package/dist/vbrief-validate/epic-links.js +152 -0
- package/dist/vbrief-validate/filename.d.ts +5 -0
- package/dist/vbrief-validate/filename.js +62 -0
- package/dist/vbrief-validate/folder-status.d.ts +4 -0
- package/dist/vbrief-validate/folder-status.js +30 -0
- package/dist/vbrief-validate/index.d.ts +14 -0
- package/dist/vbrief-validate/index.js +11 -0
- package/dist/vbrief-validate/main.d.ts +17 -0
- package/dist/vbrief-validate/main.js +127 -0
- package/dist/vbrief-validate/origin.d.ts +4 -0
- package/dist/vbrief-validate/origin.js +76 -0
- package/dist/vbrief-validate/paths.d.ts +11 -0
- package/dist/vbrief-validate/paths.js +83 -0
- package/dist/vbrief-validate/placeholders.d.ts +3 -0
- package/dist/vbrief-validate/placeholders.js +33 -0
- package/dist/vbrief-validate/plan-hooks.d.ts +9 -0
- package/dist/vbrief-validate/plan-hooks.js +145 -0
- package/dist/vbrief-validate/precutover.d.ts +7 -0
- package/dist/vbrief-validate/precutover.js +30 -0
- package/dist/vbrief-validate/project-definition.d.ts +4 -0
- package/dist/vbrief-validate/project-definition.js +166 -0
- package/dist/vbrief-validate/schema.d.ts +8 -0
- package/dist/vbrief-validate/schema.js +150 -0
- package/dist/vbrief-validate/staleness.d.ts +3 -0
- package/dist/vbrief-validate/staleness.js +106 -0
- package/dist/vbrief-validate/validate-all.d.ts +17 -0
- package/dist/vbrief-validate/validate-all.js +119 -0
- package/dist/vbrief-validation/fidelity.d.ts +22 -0
- package/dist/vbrief-validation/fidelity.js +508 -0
- package/dist/vbrief-validation/index.d.ts +11 -0
- package/dist/vbrief-validation/index.js +8 -0
- package/dist/vbrief-validation/legacy-sections.d.ts +13 -0
- package/dist/vbrief-validation/legacy-sections.js +124 -0
- package/dist/vbrief-validation/main.d.ts +5 -0
- package/dist/vbrief-validation/main.js +65 -0
- package/dist/vbrief-validation/normalize.d.ts +22 -0
- package/dist/vbrief-validation/normalize.js +126 -0
- package/dist/vbrief-validation/parity-scenarios.d.ts +14 -0
- package/dist/vbrief-validation/parity-scenarios.js +523 -0
- package/dist/vbrief-validation/safety.d.ts +38 -0
- package/dist/vbrief-validation/safety.js +422 -0
- package/dist/vbrief-validation/story-quality.d.ts +29 -0
- package/dist/vbrief-validation/story-quality.js +452 -0
- package/dist/vbrief-validation/types.d.ts +58 -0
- package/dist/vbrief-validation/types.js +2 -0
- package/dist/vbrief-validation/validation.d.ts +15 -0
- package/dist/vbrief-validation/validation.js +123 -0
- package/dist/verify-env/index.d.ts +6 -0
- package/dist/verify-env/index.js +6 -0
- package/dist/verify-env/node-runtime.d.ts +6 -0
- package/dist/verify-env/node-runtime.js +11 -0
- package/dist/verify-env/toolchain-check.d.ts +28 -0
- package/dist/verify-env/toolchain-check.js +68 -0
- package/dist/verify-env/verify-hooks-installed.d.ts +21 -0
- package/dist/verify-env/verify-hooks-installed.js +162 -0
- package/dist/verify-env/verify-no-task-runtime.d.ts +20 -0
- package/dist/verify-env/verify-no-task-runtime.js +383 -0
- package/dist/verify-env/verify-tools.d.ts +59 -0
- package/dist/verify-env/verify-tools.js +354 -0
- package/dist/verify-source/code-structure-validate.d.ts +48 -0
- package/dist/verify-source/code-structure-validate.js +678 -0
- package/dist/verify-source/content-manifest.d.ts +102 -0
- package/dist/verify-source/content-manifest.js +282 -0
- package/dist/verify-source/index.d.ts +7 -0
- package/dist/verify-source/index.js +7 -0
- package/dist/verify-source/python-call-scan.d.ts +14 -0
- package/dist/verify-source/python-call-scan.js +137 -0
- package/dist/verify-source/rule-ownership-lint.d.ts +33 -0
- package/dist/verify-source/rule-ownership-lint.js +179 -0
- package/dist/verify-source/scm-boundary.d.ts +26 -0
- package/dist/verify-source/scm-boundary.js +170 -0
- package/dist/verify-source/verify-stubs.d.ts +19 -0
- package/dist/verify-source/verify-stubs.js +185 -0
- package/dist/wip-cap/evaluate.d.ts +17 -0
- package/dist/wip-cap/evaluate.js +62 -0
- package/dist/wip-cap/index.d.ts +2 -0
- package/dist/wip-cap/index.js +2 -0
- package/package.json +206 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { FALLBACK2_NOT_CLEAN_MSG, VIA_ERROR, VIA_FALLBACK1, VIA_FALLBACK2, VIA_PRIMARY, } from "./constants.js";
|
|
2
|
+
import { evaluateGates, isMergeReady } from "./evaluate.js";
|
|
3
|
+
import { fetchCheckRunsRest, fetchGreptileBodyRest, fetchGreptileCommentBody, fetchPrHeadSha, fetchPrHeadShaRest, resolveRepo, } from "./gh.js";
|
|
4
|
+
import { emptyVerdict, parseGreptileBody } from "./parse.js";
|
|
5
|
+
function buildGateResult(prNumber, repo, headSha, body, via, partialData = {}, error = null) {
|
|
6
|
+
const verdict = parseGreptileBody(body);
|
|
7
|
+
const failures = evaluateGates(prNumber, headSha, verdict);
|
|
8
|
+
return {
|
|
9
|
+
prNumber,
|
|
10
|
+
repo,
|
|
11
|
+
headSha,
|
|
12
|
+
verdict,
|
|
13
|
+
failures,
|
|
14
|
+
via,
|
|
15
|
+
partialData,
|
|
16
|
+
error,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function computePrimary(prNumber, repo, runGh) {
|
|
20
|
+
const partial = {};
|
|
21
|
+
const headSha = fetchPrHeadSha(prNumber, repo, runGh);
|
|
22
|
+
if (headSha === null) {
|
|
23
|
+
partial.primary_error = "gh pr view headRefOid returned non-zero";
|
|
24
|
+
return { result: null, partial };
|
|
25
|
+
}
|
|
26
|
+
partial.head_sha = headSha;
|
|
27
|
+
const body = fetchGreptileCommentBody(prNumber, repo, runGh);
|
|
28
|
+
if (body === null) {
|
|
29
|
+
partial.primary_error = "gh api /issues/<N>/comments --jq returned non-zero";
|
|
30
|
+
return { result: null, partial };
|
|
31
|
+
}
|
|
32
|
+
const verdict = parseGreptileBody(body);
|
|
33
|
+
const failures = evaluateGates(prNumber, headSha, verdict);
|
|
34
|
+
return {
|
|
35
|
+
result: {
|
|
36
|
+
prNumber,
|
|
37
|
+
repo,
|
|
38
|
+
headSha,
|
|
39
|
+
verdict,
|
|
40
|
+
failures,
|
|
41
|
+
via: VIA_PRIMARY,
|
|
42
|
+
partialData: {},
|
|
43
|
+
error: null,
|
|
44
|
+
},
|
|
45
|
+
partial,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function computeFallback1(prNumber, repo, primaryPartial, runGh) {
|
|
49
|
+
const partial = { ...primaryPartial };
|
|
50
|
+
const resolved = resolveRepo(repo, runGh);
|
|
51
|
+
if (resolved.repo === null) {
|
|
52
|
+
partial.fallback1_error = resolved.error;
|
|
53
|
+
return { result: null, partial };
|
|
54
|
+
}
|
|
55
|
+
let headSha = typeof partial.head_sha === "string" ? partial.head_sha : null;
|
|
56
|
+
if (!headSha) {
|
|
57
|
+
const head = fetchPrHeadShaRest(prNumber, resolved.repo, runGh);
|
|
58
|
+
if (head.sha === null) {
|
|
59
|
+
partial.fallback1_error = head.error;
|
|
60
|
+
return { result: null, partial };
|
|
61
|
+
}
|
|
62
|
+
headSha = head.sha;
|
|
63
|
+
partial.head_sha = headSha;
|
|
64
|
+
}
|
|
65
|
+
const bodyResult = fetchGreptileBodyRest(prNumber, resolved.repo, runGh);
|
|
66
|
+
if (bodyResult.body === null) {
|
|
67
|
+
partial.fallback1_error = bodyResult.error;
|
|
68
|
+
return { result: null, partial };
|
|
69
|
+
}
|
|
70
|
+
const verdict = parseGreptileBody(bodyResult.body);
|
|
71
|
+
const failures = evaluateGates(prNumber, headSha, verdict);
|
|
72
|
+
const partialData = {};
|
|
73
|
+
for (const [key, value] of Object.entries(partial)) {
|
|
74
|
+
if (key !== "head_sha") {
|
|
75
|
+
partialData[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
result: {
|
|
80
|
+
prNumber,
|
|
81
|
+
repo: resolved.repo,
|
|
82
|
+
headSha,
|
|
83
|
+
verdict,
|
|
84
|
+
failures,
|
|
85
|
+
via: VIA_FALLBACK1,
|
|
86
|
+
partialData,
|
|
87
|
+
error: null,
|
|
88
|
+
},
|
|
89
|
+
partial,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function computeFallback2(prNumber, repo, priorPartial, runGh) {
|
|
93
|
+
const partial = { ...priorPartial };
|
|
94
|
+
const resolved = resolveRepo(repo, runGh);
|
|
95
|
+
if (resolved.repo === null) {
|
|
96
|
+
partial.fallback2_error = resolved.error;
|
|
97
|
+
return { result: null, partial };
|
|
98
|
+
}
|
|
99
|
+
const rc = runGh(["gh", "api", `repos/${resolved.repo}/pulls/${prNumber}`]);
|
|
100
|
+
if (rc.returncode !== 0) {
|
|
101
|
+
partial.fallback2_error = `gh api /pulls/${prNumber} failed: ${rc.stderr.trim()}`;
|
|
102
|
+
return { result: null, partial };
|
|
103
|
+
}
|
|
104
|
+
let prPayload;
|
|
105
|
+
try {
|
|
106
|
+
prPayload = rc.stdout.trim().length > 0 ? JSON.parse(rc.stdout) : null;
|
|
107
|
+
}
|
|
108
|
+
catch (exc) {
|
|
109
|
+
const message = exc instanceof Error ? exc.message : String(exc);
|
|
110
|
+
partial.fallback2_error = `could not parse PR JSON: ${message}`;
|
|
111
|
+
return { result: null, partial };
|
|
112
|
+
}
|
|
113
|
+
if (prPayload === null || typeof prPayload !== "object" || Array.isArray(prPayload)) {
|
|
114
|
+
partial.fallback2_error = "unexpected PR JSON shape (not a dict)";
|
|
115
|
+
return { result: null, partial };
|
|
116
|
+
}
|
|
117
|
+
const pr = prPayload;
|
|
118
|
+
const state = pr.state;
|
|
119
|
+
const merged = Boolean(pr.merged);
|
|
120
|
+
const mergeable = pr.mergeable;
|
|
121
|
+
const mergeableState = pr.mergeable_state;
|
|
122
|
+
let headSha = null;
|
|
123
|
+
const headBlock = pr.head;
|
|
124
|
+
if (headBlock !== null && typeof headBlock === "object" && !Array.isArray(headBlock)) {
|
|
125
|
+
const candidate = headBlock.sha;
|
|
126
|
+
if (typeof candidate === "string" && candidate.length > 0) {
|
|
127
|
+
headSha = candidate;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (headSha === null && typeof partial.head_sha === "string") {
|
|
131
|
+
headSha = partial.head_sha;
|
|
132
|
+
}
|
|
133
|
+
let checkSummary = null;
|
|
134
|
+
if (headSha) {
|
|
135
|
+
const check = fetchCheckRunsRest(headSha, resolved.repo, runGh);
|
|
136
|
+
if (check.summary === null && check.error) {
|
|
137
|
+
partial.fallback2_check_runs_error = check.error;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
checkSummary = check.summary;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const fallbackPartial = {
|
|
144
|
+
pr_state: state,
|
|
145
|
+
merged,
|
|
146
|
+
mergeable,
|
|
147
|
+
mergeable_state: mergeableState,
|
|
148
|
+
check_runs: checkSummary,
|
|
149
|
+
};
|
|
150
|
+
for (const key of ["primary_error", "fallback1_error", "fallback2_check_runs_error"]) {
|
|
151
|
+
if (key in partial) {
|
|
152
|
+
fallbackPartial[key] = partial[key];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
result: {
|
|
157
|
+
prNumber,
|
|
158
|
+
repo: resolved.repo,
|
|
159
|
+
headSha,
|
|
160
|
+
verdict: emptyVerdict(),
|
|
161
|
+
failures: [FALLBACK2_NOT_CLEAN_MSG],
|
|
162
|
+
via: VIA_FALLBACK2,
|
|
163
|
+
partialData: fallbackPartial,
|
|
164
|
+
error: null,
|
|
165
|
+
},
|
|
166
|
+
partial,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function errorResult(prNumber, repo, partial) {
|
|
170
|
+
const pieces = [];
|
|
171
|
+
for (const key of ["primary_error", "fallback1_error", "fallback2_error"]) {
|
|
172
|
+
if (key in partial) {
|
|
173
|
+
pieces.push(`${key}=${String(partial[key])}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const error = pieces.length > 0
|
|
177
|
+
? pieces.join("; ")
|
|
178
|
+
: "every fallback layer failed without a reportable error";
|
|
179
|
+
return {
|
|
180
|
+
prNumber,
|
|
181
|
+
repo,
|
|
182
|
+
headSha: typeof partial.head_sha === "string" ? partial.head_sha : null,
|
|
183
|
+
verdict: emptyVerdict(),
|
|
184
|
+
failures: [
|
|
185
|
+
"pr_merge_readiness external error -- every fallback layer " +
|
|
186
|
+
"failed; see partial_data for diagnostic detail (#1368).",
|
|
187
|
+
],
|
|
188
|
+
via: VIA_ERROR,
|
|
189
|
+
partialData: { ...partial },
|
|
190
|
+
error,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/** Run the primary->fallback1->fallback2 cascade and return a result. */
|
|
194
|
+
export function computeGateResult(prNumber, repo, runGh) {
|
|
195
|
+
let { result, partial } = computePrimary(prNumber, repo, runGh);
|
|
196
|
+
if (result !== null) {
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
({ result, partial } = computeFallback1(prNumber, repo, partial, runGh));
|
|
200
|
+
if (result !== null) {
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
({ result, partial } = computeFallback2(prNumber, repo, partial, runGh));
|
|
204
|
+
if (result !== null) {
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
return errorResult(prNumber, repo, partial);
|
|
208
|
+
}
|
|
209
|
+
export { buildGateResult, isMergeReady };
|
|
210
|
+
//# sourceMappingURL=compute.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const EXIT_OK = 0;
|
|
2
|
+
export declare const EXIT_MERGE_BLOCKED = 1;
|
|
3
|
+
export declare const EXIT_EXTERNAL_ERROR = 2;
|
|
4
|
+
export declare const GREPTILE_LOGIN = "greptile-apps[bot]";
|
|
5
|
+
export declare const GREPTILE_ERRORED_SENTINEL = "Greptile encountered an error while reviewing this PR";
|
|
6
|
+
export declare const LAST_REVIEWED_RE: RegExp;
|
|
7
|
+
export declare const CONFIDENCE_RE: RegExp;
|
|
8
|
+
export declare const P0_BADGE = "<img alt=\"P0\"";
|
|
9
|
+
export declare const P1_BADGE = "<img alt=\"P1\"";
|
|
10
|
+
export declare const SECTION_RE: RegExp;
|
|
11
|
+
export declare const INFORMAL_CLEAN_SIGNAL_RE: RegExp;
|
|
12
|
+
export declare const INFORMAL_CLEAN_STATE = "informal-clean missing-canonical-fields";
|
|
13
|
+
export declare const INFORMAL_CLEAN_DIAGNOSTIC: string;
|
|
14
|
+
export declare const VIA_PRIMARY = "primary";
|
|
15
|
+
export declare const VIA_FALLBACK1 = "fallback1";
|
|
16
|
+
export declare const VIA_FALLBACK2 = "fallback2";
|
|
17
|
+
export declare const VIA_ERROR = "error";
|
|
18
|
+
export declare const FALLBACK2_NOT_CLEAN_MSG: string;
|
|
19
|
+
export declare const GH_TIMEOUT_S = 60;
|
|
20
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const EXIT_OK = 0;
|
|
2
|
+
export const EXIT_MERGE_BLOCKED = 1;
|
|
3
|
+
export const EXIT_EXTERNAL_ERROR = 2;
|
|
4
|
+
export const GREPTILE_LOGIN = "greptile-apps[bot]";
|
|
5
|
+
export const GREPTILE_ERRORED_SENTINEL = "Greptile encountered an error while reviewing this PR";
|
|
6
|
+
export const LAST_REVIEWED_RE = /Last reviewed commit:\s*\[[^\]]*\]\(https?:\/\/github\.com\/[^/]+\/[^/]+\/commit\/(?<sha>[0-9a-f]{7,40})/g;
|
|
7
|
+
export const CONFIDENCE_RE = /Confidence Score:\s*(?<score>\d+)\s*\/\s*5/i;
|
|
8
|
+
export const P0_BADGE = '<img alt="P0"';
|
|
9
|
+
export const P1_BADGE = '<img alt="P1"';
|
|
10
|
+
export const SECTION_RE = /###\s+(?<sev>P[012])\s+findings\s*\((?<count>\d+)\)/gi;
|
|
11
|
+
export const INFORMAL_CLEAN_SIGNAL_RE = /(?:diff is clean|(?:prior |previously flagged )?issues? (?:are )?now resolved|all prior issues resolved|no new issues(?: to flag)?|looks solid|good to proceed)/i;
|
|
12
|
+
export const INFORMAL_CLEAN_STATE = "informal-clean missing-canonical-fields";
|
|
13
|
+
export const INFORMAL_CLEAN_DIAGNOSTIC = `Greptile ${INFORMAL_CLEAN_STATE} state (#1543): the latest Greptile bot ` +
|
|
14
|
+
"comment says the diff is clean / prior issues are resolved, but omits the " +
|
|
15
|
+
"canonical rolling-summary fields `Last reviewed commit:` and " +
|
|
16
|
+
"`Confidence Score: X/5` that merge gates require. Prose alone cannot " +
|
|
17
|
+
"prove review currency or confidence. Recovery: (1) comment " +
|
|
18
|
+
"`@greptileai review` on the PR to retrigger a canonical rolling summary, " +
|
|
19
|
+
"(2) wait for Greptile to edit its primary summary comment with both " +
|
|
20
|
+
"canonical fields on the current HEAD, or (3) document an explicit " +
|
|
21
|
+
"operator override per skills/deft-directive-swarm/SKILL.md Phase 6 " +
|
|
22
|
+
"Step 1. Do NOT keep polling -- this is not 'review still writing'.";
|
|
23
|
+
export const VIA_PRIMARY = "primary";
|
|
24
|
+
export const VIA_FALLBACK1 = "fallback1";
|
|
25
|
+
export const VIA_FALLBACK2 = "fallback2";
|
|
26
|
+
export const VIA_ERROR = "error";
|
|
27
|
+
export const FALLBACK2_NOT_CLEAN_MSG = "fallback2 is a coarse signal, not a CLEAN verdict -- the Greptile " +
|
|
28
|
+
"rolling-summary comment was not reachable on either the primary or " +
|
|
29
|
+
"fallback1 path. PR state / check-runs reported below as a heartbeat " +
|
|
30
|
+
"only; do NOT merge on this verdict alone (#1368).";
|
|
31
|
+
export const GH_TIMEOUT_S = 60;
|
|
32
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { GreptileVerdict } from "./types.js";
|
|
2
|
+
/** Return failure messages (empty list == merge-ready). */
|
|
3
|
+
export declare function evaluateGates(_prNumber: number, headSha: string | null, verdict: GreptileVerdict): string[];
|
|
4
|
+
export declare function isMergeReady(failures: readonly string[]): boolean;
|
|
5
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { INFORMAL_CLEAN_DIAGNOSTIC } from "./constants.js";
|
|
2
|
+
/** Return failure messages (empty list == merge-ready). */
|
|
3
|
+
export function evaluateGates(_prNumber, headSha, verdict) {
|
|
4
|
+
const failures = [];
|
|
5
|
+
if (!verdict.found) {
|
|
6
|
+
failures.push("No Greptile rolling-summary comment found on the PR. " +
|
|
7
|
+
"Either Greptile has not posted yet, or the bot login filter is wrong. " +
|
|
8
|
+
"Wait for the review to land before merging (see #796 late-bot-review re-check).");
|
|
9
|
+
return failures;
|
|
10
|
+
}
|
|
11
|
+
if (verdict.errored) {
|
|
12
|
+
failures.push("Greptile review is in the ERRORED state on the current HEAD (#526). " +
|
|
13
|
+
"Retry via @greptileai or escalate per " +
|
|
14
|
+
"skills/deft-directive-swarm/SKILL.md Phase 6 Step 1.");
|
|
15
|
+
}
|
|
16
|
+
if (verdict.informalClean) {
|
|
17
|
+
failures.push(INFORMAL_CLEAN_DIAGNOSTIC);
|
|
18
|
+
return failures;
|
|
19
|
+
}
|
|
20
|
+
if (verdict.lastReviewedSha === null) {
|
|
21
|
+
failures.push("Could not parse `Last reviewed commit:` from Greptile body. " +
|
|
22
|
+
"The comment may be malformed or Greptile may still be writing it -- re-fetch.");
|
|
23
|
+
}
|
|
24
|
+
else if (headSha &&
|
|
25
|
+
!(headSha.startsWith(verdict.lastReviewedSha) || verdict.lastReviewedSha.startsWith(headSha))) {
|
|
26
|
+
failures.push(`Greptile last reviewed ${verdict.lastReviewedSha} but PR HEAD is ${headSha}. ` +
|
|
27
|
+
"Review is stale -- wait for Greptile to re-review the latest commit.");
|
|
28
|
+
}
|
|
29
|
+
if (verdict.confidence === null) {
|
|
30
|
+
failures.push("Could not parse `Confidence Score: X/5` from Greptile body. " +
|
|
31
|
+
"Confidence is a required exit-condition input per " +
|
|
32
|
+
"skills/deft-directive-review-cycle/SKILL.md Phase 2 Step 6.");
|
|
33
|
+
}
|
|
34
|
+
else if (verdict.confidence <= 3) {
|
|
35
|
+
failures.push(`Greptile confidence is ${verdict.confidence}/5; exit condition requires > 3. ` +
|
|
36
|
+
"Address remaining findings or push clarifying changes.");
|
|
37
|
+
}
|
|
38
|
+
if (verdict.p0Count > 0 || verdict.p1Count > 0) {
|
|
39
|
+
failures.push(`Greptile reports ${verdict.p0Count} P0 and ${verdict.p1Count} P1 findings ` +
|
|
40
|
+
"on the current HEAD. All P0 / P1 findings MUST be addressed before merge " +
|
|
41
|
+
"(P2 findings are non-blocking).");
|
|
42
|
+
}
|
|
43
|
+
return failures;
|
|
44
|
+
}
|
|
45
|
+
export function isMergeReady(failures) {
|
|
46
|
+
return failures.length === 0;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RunGhFn, RunGhResult } from "./types.js";
|
|
2
|
+
/** UTF-8-safe gh capture via execFile (no shell) — mirrors _safe_subprocess.run_text (#1366). */
|
|
3
|
+
export declare function defaultRunGh(cmd: readonly string[]): RunGhResult;
|
|
4
|
+
export declare function fetchPrHeadSha(prNumber: number, repo: string | null, runGh: RunGhFn): string | null;
|
|
5
|
+
export declare function fetchGreptileCommentBody(prNumber: number, repo: string | null, runGh: RunGhFn): string | null;
|
|
6
|
+
export declare function resolveRepo(repo: string | null, runGh: RunGhFn): {
|
|
7
|
+
repo: string | null;
|
|
8
|
+
error: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function fetchGreptileBodyRest(prNumber: number, repo: string, runGh: RunGhFn): {
|
|
11
|
+
body: string | null;
|
|
12
|
+
error: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function fetchPrHeadShaRest(prNumber: number, repo: string, runGh: RunGhFn): {
|
|
15
|
+
sha: string | null;
|
|
16
|
+
error: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function fetchCheckRunsRest(sha: string, repo: string, runGh: RunGhFn): {
|
|
19
|
+
summary: Record<string, unknown> | null;
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=gh.d.ts.map
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { resolveBinary } from "../scm/binary.js";
|
|
3
|
+
import { SUBPROCESS_MAX_BUFFER } from "../subprocess/max-buffer.js";
|
|
4
|
+
import { GH_TIMEOUT_S, GREPTILE_LOGIN } from "./constants.js";
|
|
5
|
+
/** UTF-8-safe gh capture via execFile (no shell) — mirrors _safe_subprocess.run_text (#1366). */
|
|
6
|
+
export function defaultRunGh(cmd) {
|
|
7
|
+
if (cmd.length === 0 || cmd[0] !== "gh") {
|
|
8
|
+
return { returncode: -1, stdout: "", stderr: "expected gh as first argv element" };
|
|
9
|
+
}
|
|
10
|
+
const binary = resolveBinary();
|
|
11
|
+
const args = cmd.slice(1);
|
|
12
|
+
try {
|
|
13
|
+
const stdout = execFileSync(binary, args, {
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
timeout: GH_TIMEOUT_S * 1000,
|
|
16
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
17
|
+
maxBuffer: SUBPROCESS_MAX_BUFFER,
|
|
18
|
+
});
|
|
19
|
+
return { returncode: 0, stdout: typeof stdout === "string" ? stdout : "", stderr: "" };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const e = err;
|
|
23
|
+
if (e.code === "ENOENT") {
|
|
24
|
+
return { returncode: -1, stdout: "", stderr: "gh CLI not found. Install GitHub CLI." };
|
|
25
|
+
}
|
|
26
|
+
if (e.code === "ETIMEDOUT") {
|
|
27
|
+
return { returncode: -1, stdout: "", stderr: `gh CLI timed out: ${cmd.join(" ")}` };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
returncode: typeof e.status === "number" ? e.status : -1,
|
|
31
|
+
stdout: typeof e.stdout === "string" ? e.stdout : "",
|
|
32
|
+
stderr: typeof e.stderr === "string" ? e.stderr : String(e.message ?? ""),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function fetchPrHeadSha(prNumber, repo, runGh) {
|
|
37
|
+
const cmd = ["gh", "pr", "view", String(prNumber), "--json", "headRefOid", "--jq", ".headRefOid"];
|
|
38
|
+
if (repo) {
|
|
39
|
+
cmd.push("--repo", repo);
|
|
40
|
+
}
|
|
41
|
+
const { returncode, stdout, stderr } = runGh(cmd);
|
|
42
|
+
if (returncode !== 0) {
|
|
43
|
+
process.stderr.write(`Error: gh failed fetching PR #${prNumber} headRefOid: ${stderr.trim()}\n`);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const sha = stdout.trim();
|
|
47
|
+
return sha.length > 0 ? sha : null;
|
|
48
|
+
}
|
|
49
|
+
export function fetchGreptileCommentBody(prNumber, repo, runGh) {
|
|
50
|
+
let resolvedRepo = repo;
|
|
51
|
+
if (!resolvedRepo) {
|
|
52
|
+
const rc = runGh(["gh", "repo", "view", "--json", "nameWithOwner", "--jq", ".nameWithOwner"]);
|
|
53
|
+
if (rc.returncode !== 0) {
|
|
54
|
+
process.stderr.write(`Error: could not resolve --repo from cwd: ${rc.stderr.trim()}\n`);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
resolvedRepo = rc.stdout.trim();
|
|
58
|
+
if (!resolvedRepo) {
|
|
59
|
+
process.stderr.write("Error: empty repo from gh repo view (specify --repo OWNER/REPO).\n");
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const cmd = [
|
|
64
|
+
"gh",
|
|
65
|
+
"api",
|
|
66
|
+
`repos/${resolvedRepo}/issues/${prNumber}/comments`,
|
|
67
|
+
"--paginate",
|
|
68
|
+
"--jq",
|
|
69
|
+
`[.[] | select(.user.login == "${GREPTILE_LOGIN}")] | last | .body // ""`,
|
|
70
|
+
];
|
|
71
|
+
const { returncode, stdout, stderr } = runGh(cmd);
|
|
72
|
+
if (returncode !== 0) {
|
|
73
|
+
process.stderr.write(`Error: gh failed fetching comments for PR #${prNumber}: ${stderr.trim()}\n`);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return stdout;
|
|
77
|
+
}
|
|
78
|
+
export function resolveRepo(repo, runGh) {
|
|
79
|
+
if (repo) {
|
|
80
|
+
return { repo, error: "" };
|
|
81
|
+
}
|
|
82
|
+
const rc = runGh(["gh", "repo", "view", "--json", "nameWithOwner", "--jq", ".nameWithOwner"]);
|
|
83
|
+
if (rc.returncode !== 0) {
|
|
84
|
+
return { repo: null, error: `could not resolve --repo from cwd: ${rc.stderr.trim()}` };
|
|
85
|
+
}
|
|
86
|
+
const resolved = rc.stdout.trim();
|
|
87
|
+
if (!resolved) {
|
|
88
|
+
return { repo: null, error: "empty repo from gh repo view (specify --repo OWNER/REPO)" };
|
|
89
|
+
}
|
|
90
|
+
return { repo: resolved, error: "" };
|
|
91
|
+
}
|
|
92
|
+
export function fetchGreptileBodyRest(prNumber, repo, runGh) {
|
|
93
|
+
const rc = runGh(["gh", "api", `repos/${repo}/issues/${prNumber}/comments`, "--paginate"]);
|
|
94
|
+
if (rc.returncode !== 0) {
|
|
95
|
+
return {
|
|
96
|
+
body: null,
|
|
97
|
+
error: `gh api /issues/${prNumber}/comments failed: ${rc.stderr.trim()}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (!rc.stdout.trim()) {
|
|
101
|
+
return { body: "", error: "" };
|
|
102
|
+
}
|
|
103
|
+
return parsePaginatedComments(rc.stdout.trim());
|
|
104
|
+
}
|
|
105
|
+
function parsePaginatedComments(text) {
|
|
106
|
+
const comments = [];
|
|
107
|
+
const decoder = new PaginatedJsonDecoder();
|
|
108
|
+
let idx = 0;
|
|
109
|
+
while (idx < text.length) {
|
|
110
|
+
const result = decoder.rawDecode(text, idx);
|
|
111
|
+
if (result === null) {
|
|
112
|
+
if (idx < text.length) {
|
|
113
|
+
return { body: null, error: "could not parse REST comments JSON: invalid JSON at offset" };
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
const [obj, end] = result;
|
|
118
|
+
if (Array.isArray(obj)) {
|
|
119
|
+
comments.push(...obj);
|
|
120
|
+
}
|
|
121
|
+
else if (obj !== null && typeof obj === "object") {
|
|
122
|
+
comments.push(obj);
|
|
123
|
+
}
|
|
124
|
+
idx = end;
|
|
125
|
+
}
|
|
126
|
+
const greptileBodies = [];
|
|
127
|
+
for (const c of comments) {
|
|
128
|
+
if (c !== null &&
|
|
129
|
+
typeof c === "object" &&
|
|
130
|
+
!Array.isArray(c) &&
|
|
131
|
+
"user" in c &&
|
|
132
|
+
c.user !== null &&
|
|
133
|
+
typeof c.user === "object" &&
|
|
134
|
+
!Array.isArray(c.user) &&
|
|
135
|
+
"login" in c.user &&
|
|
136
|
+
c.user.login === GREPTILE_LOGIN &&
|
|
137
|
+
"body" in c &&
|
|
138
|
+
typeof c.body === "string") {
|
|
139
|
+
greptileBodies.push(c.body);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (greptileBodies.length === 0) {
|
|
143
|
+
return { body: "", error: "" };
|
|
144
|
+
}
|
|
145
|
+
return { body: greptileBodies[greptileBodies.length - 1] ?? "", error: "" };
|
|
146
|
+
}
|
|
147
|
+
/** Mirrors Python json.JSONDecoder.raw_decode for concatenated paginate arrays. */
|
|
148
|
+
class PaginatedJsonDecoder {
|
|
149
|
+
rawDecode(text, idx) {
|
|
150
|
+
let pos = idx;
|
|
151
|
+
while (pos < text.length && /\s/.test(text.charAt(pos))) {
|
|
152
|
+
pos += 1;
|
|
153
|
+
}
|
|
154
|
+
if (pos >= text.length) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
let end = pos;
|
|
159
|
+
let depth = 0;
|
|
160
|
+
let inString = false;
|
|
161
|
+
let isEscaped = false;
|
|
162
|
+
const startChar = text.charAt(pos);
|
|
163
|
+
if (startChar !== "[" && startChar !== "{") {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
for (; end < text.length; end += 1) {
|
|
167
|
+
const ch = text.charAt(end);
|
|
168
|
+
if (inString) {
|
|
169
|
+
if (isEscaped) {
|
|
170
|
+
isEscaped = false;
|
|
171
|
+
}
|
|
172
|
+
else if (ch === "\\") {
|
|
173
|
+
isEscaped = true;
|
|
174
|
+
}
|
|
175
|
+
else if (ch === '"') {
|
|
176
|
+
inString = false;
|
|
177
|
+
}
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (ch === '"') {
|
|
181
|
+
inString = true;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (ch === "[" || ch === "{") {
|
|
185
|
+
depth += 1;
|
|
186
|
+
}
|
|
187
|
+
else if (ch === "]" || ch === "}") {
|
|
188
|
+
depth -= 1;
|
|
189
|
+
if (depth === 0) {
|
|
190
|
+
end += 1;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const slice = text.slice(pos, end);
|
|
196
|
+
const obj = JSON.parse(slice);
|
|
197
|
+
return [obj, end];
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export function fetchPrHeadShaRest(prNumber, repo, runGh) {
|
|
205
|
+
const rc = runGh(["gh", "api", `repos/${repo}/pulls/${prNumber}`]);
|
|
206
|
+
if (rc.returncode !== 0) {
|
|
207
|
+
return { sha: null, error: `gh api /pulls/${prNumber} failed: ${rc.stderr.trim()}` };
|
|
208
|
+
}
|
|
209
|
+
if (!rc.stdout.trim()) {
|
|
210
|
+
return { sha: null, error: "empty body from gh api /pulls/<N>" };
|
|
211
|
+
}
|
|
212
|
+
let payload;
|
|
213
|
+
try {
|
|
214
|
+
payload = JSON.parse(rc.stdout);
|
|
215
|
+
}
|
|
216
|
+
catch (exc) {
|
|
217
|
+
const message = exc instanceof Error ? exc.message : String(exc);
|
|
218
|
+
return { sha: null, error: `could not parse PR JSON: ${message}` };
|
|
219
|
+
}
|
|
220
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
221
|
+
return { sha: null, error: "unexpected PR JSON shape (not a dict)" };
|
|
222
|
+
}
|
|
223
|
+
const head = payload.head;
|
|
224
|
+
if (head !== null && typeof head === "object" && !Array.isArray(head)) {
|
|
225
|
+
const sha = head.sha;
|
|
226
|
+
if (typeof sha === "string" && sha.length > 0) {
|
|
227
|
+
return { sha, error: "" };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return { sha: null, error: "PR JSON missing head.sha" };
|
|
231
|
+
}
|
|
232
|
+
export function fetchCheckRunsRest(sha, repo, runGh) {
|
|
233
|
+
const rc = runGh(["gh", "api", `repos/${repo}/commits/${sha}/check-runs`]);
|
|
234
|
+
if (rc.returncode !== 0) {
|
|
235
|
+
return {
|
|
236
|
+
summary: null,
|
|
237
|
+
error: `gh api /commits/${"<"}sha>/check-runs failed: ${rc.stderr.trim()}`,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
if (!rc.stdout.trim()) {
|
|
241
|
+
return { summary: null, error: "empty body from gh api /commits/<sha>/check-runs" };
|
|
242
|
+
}
|
|
243
|
+
let payload;
|
|
244
|
+
try {
|
|
245
|
+
payload = JSON.parse(rc.stdout);
|
|
246
|
+
}
|
|
247
|
+
catch (exc) {
|
|
248
|
+
const message = exc instanceof Error ? exc.message : String(exc);
|
|
249
|
+
return { summary: null, error: `could not parse check-runs JSON: ${message}` };
|
|
250
|
+
}
|
|
251
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
252
|
+
return { summary: null, error: "unexpected check-runs JSON shape (not a dict)" };
|
|
253
|
+
}
|
|
254
|
+
const runs = payload.check_runs;
|
|
255
|
+
if (!Array.isArray(runs)) {
|
|
256
|
+
return { summary: null, error: "check-runs JSON missing check_runs list" };
|
|
257
|
+
}
|
|
258
|
+
const summary = {
|
|
259
|
+
total: runs.length,
|
|
260
|
+
by_status: {},
|
|
261
|
+
by_conclusion: {},
|
|
262
|
+
greptile_review: null,
|
|
263
|
+
};
|
|
264
|
+
const byStatus = summary.by_status;
|
|
265
|
+
const byConclusion = summary.by_conclusion;
|
|
266
|
+
for (const run of runs) {
|
|
267
|
+
if (run === null || typeof run !== "object" || Array.isArray(run)) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const r = run;
|
|
271
|
+
const status = typeof r.status === "string" ? r.status : "unknown";
|
|
272
|
+
const conclusion = typeof r.conclusion === "string" ? r.conclusion : "none";
|
|
273
|
+
byStatus[status] = (byStatus[status] ?? 0) + 1;
|
|
274
|
+
byConclusion[conclusion] = (byConclusion[conclusion] ?? 0) + 1;
|
|
275
|
+
if (r.name === "Greptile Review") {
|
|
276
|
+
summary.greptile_review = { status, conclusion };
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return { summary, error: "" };
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=gh.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { computeGateResult } from "./compute.js";
|
|
2
|
+
export * from "./constants.js";
|
|
3
|
+
export { evaluateGates, isMergeReady } from "./evaluate.js";
|
|
4
|
+
export { defaultRunGh } from "./gh.js";
|
|
5
|
+
export { cmdPrMergeReadiness, parseArgs, run } from "./main.js";
|
|
6
|
+
export { emitJson, exitCodeFor, gateResultToDict, printHuman } from "./output.js";
|
|
7
|
+
export { emptyVerdict, isInformalCleanMissingCanonicalFields, parseGreptileBody } from "./parse.js";
|
|
8
|
+
export type { GateResult, GreptileVerdict, RunGhFn, RunGhResult } from "./types.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { computeGateResult } from "./compute.js";
|
|
2
|
+
export * from "./constants.js";
|
|
3
|
+
export { evaluateGates, isMergeReady } from "./evaluate.js";
|
|
4
|
+
export { defaultRunGh } from "./gh.js";
|
|
5
|
+
export { cmdPrMergeReadiness, parseArgs, run } from "./main.js";
|
|
6
|
+
export { emitJson, exitCodeFor, gateResultToDict, printHuman } from "./output.js";
|
|
7
|
+
export { emptyVerdict, isInformalCleanMissingCanonicalFields, parseGreptileBody } from "./parse.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RunGhFn } from "./types.js";
|
|
2
|
+
export interface ParsedArgs {
|
|
3
|
+
readonly prNumber: number | null;
|
|
4
|
+
readonly repo: string | null;
|
|
5
|
+
readonly emitJson: boolean;
|
|
6
|
+
readonly error?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
9
|
+
export interface RunOptions {
|
|
10
|
+
readonly runGh?: RunGhFn;
|
|
11
|
+
}
|
|
12
|
+
export declare function run(argv: readonly string[], options?: RunOptions): number;
|
|
13
|
+
export declare function cmdPrMergeReadiness(argv: readonly string[], options?: RunOptions): number;
|
|
14
|
+
//# sourceMappingURL=main.d.ts.map
|