@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,224 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync, } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { pyRepr } from "../scm/py-format.js";
|
|
5
|
+
export const DEFAULT_LOG_PATH = resolve(import.meta.dirname, "..", "..", "..", "..", "vbrief", ".eval", "candidates.jsonl");
|
|
6
|
+
const VALID_DECISIONS = new Set([
|
|
7
|
+
"accept",
|
|
8
|
+
"reject",
|
|
9
|
+
"defer",
|
|
10
|
+
"needs-ac",
|
|
11
|
+
"mark-duplicate",
|
|
12
|
+
"reset",
|
|
13
|
+
"resume-eligible",
|
|
14
|
+
]);
|
|
15
|
+
const PRIOR_REQUIRED_DECISIONS = new Set(["reset", "resume-eligible"]);
|
|
16
|
+
const REQUIRED_FIELDS = [
|
|
17
|
+
"decision_id",
|
|
18
|
+
"timestamp",
|
|
19
|
+
"repo",
|
|
20
|
+
"issue_number",
|
|
21
|
+
"decision",
|
|
22
|
+
"actor",
|
|
23
|
+
];
|
|
24
|
+
const OPTIONAL_FIELDS = ["reason", "resume_on", "linked_to", "prior_decision_id"];
|
|
25
|
+
const ALLOWED_FIELDS = new Set([...REQUIRED_FIELDS, ...OPTIONAL_FIELDS]);
|
|
26
|
+
const UUID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
27
|
+
const REPO_PATTERN = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/;
|
|
28
|
+
const ISO8601_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/;
|
|
29
|
+
let threadLocked = false;
|
|
30
|
+
export class CandidatesLogError extends Error {
|
|
31
|
+
constructor(message) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = "CandidatesLogError";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function validateEntry(entry) {
|
|
37
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
38
|
+
throw new CandidatesLogError(`entry must be a dict, got ${typeof entry}`);
|
|
39
|
+
}
|
|
40
|
+
const obj = entry;
|
|
41
|
+
const missing = REQUIRED_FIELDS.filter((f) => !(f in obj));
|
|
42
|
+
if (missing.length > 0) {
|
|
43
|
+
throw new CandidatesLogError(`entry missing required field(s): ${pyRepr(missing)}`);
|
|
44
|
+
}
|
|
45
|
+
const extras = [...Object.keys(obj)].filter((k) => !ALLOWED_FIELDS.has(k)).sort();
|
|
46
|
+
if (extras.length > 0) {
|
|
47
|
+
throw new CandidatesLogError(`entry has unknown field(s): ${pyRepr(extras)}`);
|
|
48
|
+
}
|
|
49
|
+
const decisionId = obj.decision_id;
|
|
50
|
+
if (typeof decisionId !== "string" || !UUID_PATTERN.test(decisionId)) {
|
|
51
|
+
throw new CandidatesLogError(`decision_id must be a UUID string, got ${JSON.stringify(decisionId)}`);
|
|
52
|
+
}
|
|
53
|
+
const timestamp = obj.timestamp;
|
|
54
|
+
if (typeof timestamp !== "string" || !ISO8601_PATTERN.test(timestamp)) {
|
|
55
|
+
throw new CandidatesLogError(`timestamp must be ISO-8601 UTC with Z suffix (e.g. 2026-05-03T16:32:54Z), got ${JSON.stringify(timestamp)}`);
|
|
56
|
+
}
|
|
57
|
+
const repo = obj.repo;
|
|
58
|
+
if (typeof repo !== "string" || !REPO_PATTERN.test(repo)) {
|
|
59
|
+
throw new CandidatesLogError(`repo must match 'owner/name', got ${JSON.stringify(repo)}`);
|
|
60
|
+
}
|
|
61
|
+
const issueNumber = obj.issue_number;
|
|
62
|
+
if (typeof issueNumber !== "number" || !Number.isInteger(issueNumber) || issueNumber < 1) {
|
|
63
|
+
throw new CandidatesLogError(`issue_number must be a positive int, got ${JSON.stringify(issueNumber)}`);
|
|
64
|
+
}
|
|
65
|
+
const decision = obj.decision;
|
|
66
|
+
if (typeof decision !== "string" || !VALID_DECISIONS.has(decision)) {
|
|
67
|
+
throw new CandidatesLogError(`decision must be one of ${JSON.stringify([...VALID_DECISIONS].sort())}, got ${JSON.stringify(decision)}`);
|
|
68
|
+
}
|
|
69
|
+
const actor = obj.actor;
|
|
70
|
+
if (typeof actor !== "string" || actor.length === 0) {
|
|
71
|
+
throw new CandidatesLogError(`actor must be a non-empty string, got ${JSON.stringify(actor)}`);
|
|
72
|
+
}
|
|
73
|
+
if ("reason" in obj && typeof obj.reason !== "string") {
|
|
74
|
+
throw new CandidatesLogError(`reason must be a string, got ${typeof obj.reason}`);
|
|
75
|
+
}
|
|
76
|
+
if ("resume_on" in obj) {
|
|
77
|
+
const resumeOn = obj.resume_on;
|
|
78
|
+
if (typeof resumeOn !== "string" || resumeOn.length === 0) {
|
|
79
|
+
throw new CandidatesLogError(`resume_on must be a non-empty string, got ${JSON.stringify(resumeOn)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (decision === "mark-duplicate") {
|
|
83
|
+
if (!("linked_to" in obj)) {
|
|
84
|
+
throw new CandidatesLogError("decision 'mark-duplicate' requires 'linked_to'");
|
|
85
|
+
}
|
|
86
|
+
const linkedTo = obj.linked_to;
|
|
87
|
+
if (typeof linkedTo !== "number" || !Number.isInteger(linkedTo) || linkedTo < 1) {
|
|
88
|
+
throw new CandidatesLogError(`linked_to must be a positive int, got ${JSON.stringify(linkedTo)}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if ("linked_to" in obj) {
|
|
92
|
+
throw new CandidatesLogError("'linked_to' is only valid for decision='mark-duplicate'");
|
|
93
|
+
}
|
|
94
|
+
if (PRIOR_REQUIRED_DECISIONS.has(decision)) {
|
|
95
|
+
if (!("prior_decision_id" in obj)) {
|
|
96
|
+
throw new CandidatesLogError(`decision ${JSON.stringify(decision)} requires 'prior_decision_id'`);
|
|
97
|
+
}
|
|
98
|
+
const pid = obj.prior_decision_id;
|
|
99
|
+
if (typeof pid !== "string" || !UUID_PATTERN.test(pid)) {
|
|
100
|
+
throw new CandidatesLogError(`prior_decision_id must be a UUID string, got ${JSON.stringify(pid)}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if ("prior_decision_id" in obj) {
|
|
104
|
+
throw new CandidatesLogError(`'prior_decision_id' is only valid for decision in ${JSON.stringify([...PRIOR_REQUIRED_DECISIONS].sort())}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function resolvePath(path) {
|
|
108
|
+
return path !== undefined && path !== null ? resolve(path) : DEFAULT_LOG_PATH;
|
|
109
|
+
}
|
|
110
|
+
function acquireAppendLock(logPath) {
|
|
111
|
+
while (threadLocked) {
|
|
112
|
+
// spin-wait for in-process serialization
|
|
113
|
+
}
|
|
114
|
+
threadLocked = true;
|
|
115
|
+
const lockPath = join(dirname(logPath), `${logPath.split(/[/\\]/).pop()}.lock`);
|
|
116
|
+
mkdirSync(dirname(lockPath), { recursive: true });
|
|
117
|
+
const deadline = Date.now() + 30_000;
|
|
118
|
+
let fd = null;
|
|
119
|
+
while (fd === null) {
|
|
120
|
+
try {
|
|
121
|
+
fd = openSync(lockPath, "wx");
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
if (Date.now() > deadline) {
|
|
125
|
+
threadLocked = false;
|
|
126
|
+
throw new CandidatesLogError("timed out acquiring candidates log lock");
|
|
127
|
+
}
|
|
128
|
+
const spinEnd = Date.now() + 20;
|
|
129
|
+
while (Date.now() < spinEnd) {
|
|
130
|
+
// brief spin
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
writeSync(fd, Buffer.from("\0"));
|
|
135
|
+
return () => {
|
|
136
|
+
try {
|
|
137
|
+
if (fd !== null) {
|
|
138
|
+
closeSync(fd);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// ignore
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
unlinkSync(lockPath);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// ignore
|
|
149
|
+
}
|
|
150
|
+
threadLocked = false;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function validateCandidatesEntry(entry) {
|
|
154
|
+
validateEntry(entry);
|
|
155
|
+
}
|
|
156
|
+
export function append(entry, options = {}) {
|
|
157
|
+
validateEntry(entry);
|
|
158
|
+
const logPath = resolvePath(options.path);
|
|
159
|
+
mkdirSync(dirname(logPath), { recursive: true });
|
|
160
|
+
const line = JSON.stringify(entry, Object.keys(entry).sort());
|
|
161
|
+
const release = acquireAppendLock(logPath);
|
|
162
|
+
try {
|
|
163
|
+
const fd = openSync(logPath, "a");
|
|
164
|
+
try {
|
|
165
|
+
writeSync(fd, Buffer.from(`${line}\n`, "utf8"));
|
|
166
|
+
fsyncSync(fd);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
closeSync(fd);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
release();
|
|
174
|
+
}
|
|
175
|
+
return String(entry.decision_id);
|
|
176
|
+
}
|
|
177
|
+
export function readAll(repo = null, options = {}) {
|
|
178
|
+
const logPath = resolvePath(options.path);
|
|
179
|
+
if (!existsSync(logPath)) {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
const warn = options.warn ?? (() => { });
|
|
183
|
+
const out = [];
|
|
184
|
+
const lines = readFileSync(logPath, "utf8").split("\n");
|
|
185
|
+
for (let lineno = 0; lineno < lines.length; lineno += 1) {
|
|
186
|
+
const stripped = lines[lineno]?.trim() ?? "";
|
|
187
|
+
if (stripped.length === 0) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
let obj;
|
|
191
|
+
try {
|
|
192
|
+
obj = JSON.parse(stripped);
|
|
193
|
+
}
|
|
194
|
+
catch (exc) {
|
|
195
|
+
warn(`candidates.jsonl: skipping malformed JSON on line ${lineno + 1}: ${String(exc)}`);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
|
|
199
|
+
warn(`candidates.jsonl: skipping non-object entry on line ${lineno + 1} (got ${typeof obj})`);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const record = obj;
|
|
203
|
+
if (repo !== null && record.repo !== repo) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
out.push(record);
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
export function findByIssue(issueNumber, repo, options = {}) {
|
|
211
|
+
return readAll(repo, options).filter((e) => e.issue_number === issueNumber);
|
|
212
|
+
}
|
|
213
|
+
export function latestDecision(issueNumber, repo, options = {}) {
|
|
214
|
+
const rows = findByIssue(issueNumber, repo, options);
|
|
215
|
+
if (rows.length === 0) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
rows.sort((a, b) => String(a.timestamp ?? "").localeCompare(String(b.timestamp ?? "")));
|
|
219
|
+
return rows[rows.length - 1] ?? null;
|
|
220
|
+
}
|
|
221
|
+
export function newDecisionId() {
|
|
222
|
+
return randomUUID();
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=candidates-log.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { githubAuthModesMain } from "./github-auth-modes.js";
|
|
4
|
+
function parseArgs(argv) {
|
|
5
|
+
const out = {};
|
|
6
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
7
|
+
const arg = argv[i];
|
|
8
|
+
if (arg === "--json")
|
|
9
|
+
out.json = true;
|
|
10
|
+
else if (arg === "--repo")
|
|
11
|
+
out.repo = argv[++i];
|
|
12
|
+
else if (arg === "--github-auth-mode")
|
|
13
|
+
out.githubAuthMode = argv[++i];
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
export function mainEntry(argv = process.argv.slice(2)) {
|
|
18
|
+
return githubAuthModesMain(parseArgs(argv));
|
|
19
|
+
}
|
|
20
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
21
|
+
process.exit(mainEntry());
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=github-auth-modes-cli.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type CompletedProcess } from "../scm/call.js";
|
|
2
|
+
import { probeRuntimeCapabilities, type RuntimeCapabilityReport } from "./platform-capabilities.js";
|
|
3
|
+
export declare const GITHUB_AUTH_MODE_INJECTED_TOKEN = "injected-token";
|
|
4
|
+
export declare const GITHUB_AUTH_MODE_HOST_GH = "host-gh";
|
|
5
|
+
export declare const KNOWN_GITHUB_AUTH_MODES: Set<string>;
|
|
6
|
+
export declare const DEFAULT_VALIDATION_REPO = "deftai/directive";
|
|
7
|
+
export declare const FAILURE_MISSING_INJECTED_TOKEN = "missing_injected_token";
|
|
8
|
+
export declare const FAILURE_GH_AUTH = "gh_auth_failed";
|
|
9
|
+
export declare const FAILURE_API_UNREACHABLE = "api_unreachable";
|
|
10
|
+
export declare const FAILURE_REPO_ACCESS = "repo_access_denied";
|
|
11
|
+
export declare const FAILURE_INVALID_MODE = "invalid_auth_mode";
|
|
12
|
+
export interface GitHubAuthValidationResult {
|
|
13
|
+
readonly ok: boolean;
|
|
14
|
+
readonly githubAuthMode: string;
|
|
15
|
+
readonly runtimeMode: string | null;
|
|
16
|
+
readonly failureKind: string | null;
|
|
17
|
+
readonly detail: string;
|
|
18
|
+
readonly remediation: string | null;
|
|
19
|
+
readonly login: string | null;
|
|
20
|
+
}
|
|
21
|
+
export type GhRunner = (args: readonly string[], environ: NodeJS.ProcessEnv) => CompletedProcess;
|
|
22
|
+
export declare function findInjectedToken(environ: NodeJS.ProcessEnv): string | null;
|
|
23
|
+
export declare function inferGithubAuthMode(runtimeReport: RuntimeCapabilityReport): string;
|
|
24
|
+
export declare function validateInjectedTokenMode(environ: NodeJS.ProcessEnv, options?: {
|
|
25
|
+
repo?: string;
|
|
26
|
+
runtimeMode?: string | null;
|
|
27
|
+
runGh?: GhRunner;
|
|
28
|
+
}): GitHubAuthValidationResult;
|
|
29
|
+
export declare function validateHostGhMode(environ: NodeJS.ProcessEnv, options?: {
|
|
30
|
+
repo?: string;
|
|
31
|
+
runtimeMode?: string | null;
|
|
32
|
+
runGh?: GhRunner;
|
|
33
|
+
}): GitHubAuthValidationResult;
|
|
34
|
+
export declare function validateGithubAuth(githubAuthMode: string, options?: {
|
|
35
|
+
environ?: NodeJS.ProcessEnv;
|
|
36
|
+
runtimeReport?: RuntimeCapabilityReport | null;
|
|
37
|
+
repo?: string;
|
|
38
|
+
runGh?: GhRunner;
|
|
39
|
+
}): GitHubAuthValidationResult;
|
|
40
|
+
export declare function validateGithubAuthForWorker(githubAuthMode?: string | null, options?: {
|
|
41
|
+
environ?: NodeJS.ProcessEnv;
|
|
42
|
+
runtimeReport?: RuntimeCapabilityReport | null;
|
|
43
|
+
repo?: string;
|
|
44
|
+
runGh?: GhRunner;
|
|
45
|
+
}): GitHubAuthValidationResult;
|
|
46
|
+
export declare function resultToDict(result: GitHubAuthValidationResult): Record<string, unknown>;
|
|
47
|
+
export interface GitHubAuthModesCliArgs {
|
|
48
|
+
githubAuthMode?: string | null;
|
|
49
|
+
repo?: string;
|
|
50
|
+
json?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export declare function githubAuthModesMain(args: GitHubAuthModesCliArgs): number;
|
|
53
|
+
export { probeRuntimeCapabilities };
|
|
54
|
+
//# sourceMappingURL=github-auth-modes.d.ts.map
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { call } from "../scm/call.js";
|
|
2
|
+
import { pyRepr } from "../scm/py-format.js";
|
|
3
|
+
import { getPlatformCapabilities, probeRuntimeCapabilities, RUNTIME_MODE_CLOUD_HEADLESS, RUNTIME_MODE_CURSOR_NATIVE_SANDBOX, } from "./platform-capabilities.js";
|
|
4
|
+
export const GITHUB_AUTH_MODE_INJECTED_TOKEN = "injected-token";
|
|
5
|
+
export const GITHUB_AUTH_MODE_HOST_GH = "host-gh";
|
|
6
|
+
export const KNOWN_GITHUB_AUTH_MODES = new Set([
|
|
7
|
+
GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
8
|
+
GITHUB_AUTH_MODE_HOST_GH,
|
|
9
|
+
]);
|
|
10
|
+
export const DEFAULT_VALIDATION_REPO = "deftai/directive";
|
|
11
|
+
export const FAILURE_MISSING_INJECTED_TOKEN = "missing_injected_token";
|
|
12
|
+
export const FAILURE_GH_AUTH = "gh_auth_failed";
|
|
13
|
+
export const FAILURE_API_UNREACHABLE = "api_unreachable";
|
|
14
|
+
export const FAILURE_REPO_ACCESS = "repo_access_denied";
|
|
15
|
+
export const FAILURE_INVALID_MODE = "invalid_auth_mode";
|
|
16
|
+
const INJECTED_TOKEN_ENV_VARS = ["GH_TOKEN", "GITHUB_TOKEN", "GH_ENTERPRISE_TOKEN"];
|
|
17
|
+
const SANDBOX_REMEDIATION = "Remediation options for worker sandbox GitHub auth failures:\n" +
|
|
18
|
+
" - Run the GitHub step with full-access execution\n" +
|
|
19
|
+
" - Allowlist the trusted gh command path for the worker sandbox\n" +
|
|
20
|
+
" - Use injected-token handoff (keep token values out of prompts and transcripts)";
|
|
21
|
+
const REPO_ACCESS_REMEDIATION = "Remediation options for repo-access failures:\n" +
|
|
22
|
+
" - Confirm the worker credential can read the target repository\n" +
|
|
23
|
+
" - Run the GitHub step with full-access execution if host gh has access\n" +
|
|
24
|
+
" - Use injected-token handoff scoped to the required repository";
|
|
25
|
+
export function findInjectedToken(environ) {
|
|
26
|
+
for (const name of INJECTED_TOKEN_ENV_VARS) {
|
|
27
|
+
const value = environ[name]?.trim() ?? "";
|
|
28
|
+
if (value.length > 0) {
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
export function inferGithubAuthMode(runtimeReport) {
|
|
35
|
+
if (runtimeReport.runtimeMode === RUNTIME_MODE_CLOUD_HEADLESS) {
|
|
36
|
+
return GITHUB_AUTH_MODE_INJECTED_TOKEN;
|
|
37
|
+
}
|
|
38
|
+
return GITHUB_AUTH_MODE_HOST_GH;
|
|
39
|
+
}
|
|
40
|
+
function defaultRunGh(args, environ) {
|
|
41
|
+
const verb = args[0];
|
|
42
|
+
return call("github-issue", verb, args.slice(1), { env: environ, timeout: 30 });
|
|
43
|
+
}
|
|
44
|
+
function splitRepo(repo) {
|
|
45
|
+
const idx = repo.indexOf("/");
|
|
46
|
+
if (idx <= 0 || idx >= repo.length - 1) {
|
|
47
|
+
throw new Error(`invalid repository slug: ${JSON.stringify(repo)} (expected owner/repo)`);
|
|
48
|
+
}
|
|
49
|
+
return [repo.slice(0, idx), repo.slice(idx + 1)];
|
|
50
|
+
}
|
|
51
|
+
function sandboxRemediation(runtimeMode, failureKind) {
|
|
52
|
+
if (runtimeMode !== RUNTIME_MODE_CURSOR_NATIVE_SANDBOX) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (failureKind === FAILURE_GH_AUTH ||
|
|
56
|
+
failureKind === FAILURE_API_UNREACHABLE ||
|
|
57
|
+
failureKind === FAILURE_REPO_ACCESS) {
|
|
58
|
+
return SANDBOX_REMEDIATION;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function repoAccessRemediation(failureKind) {
|
|
63
|
+
return failureKind === FAILURE_REPO_ACCESS ? REPO_ACCESS_REMEDIATION : null;
|
|
64
|
+
}
|
|
65
|
+
function mergeRemediation(runtimeMode, failureKind) {
|
|
66
|
+
const parts = [];
|
|
67
|
+
const sandbox = sandboxRemediation(runtimeMode, failureKind);
|
|
68
|
+
if (sandbox !== null) {
|
|
69
|
+
parts.push(sandbox);
|
|
70
|
+
}
|
|
71
|
+
const repo = repoAccessRemediation(failureKind);
|
|
72
|
+
if (repo !== null && !parts.includes(repo)) {
|
|
73
|
+
parts.push(repo);
|
|
74
|
+
}
|
|
75
|
+
return parts.length > 0 ? parts.join("\n\n") : null;
|
|
76
|
+
}
|
|
77
|
+
function parseLogin(stdout) {
|
|
78
|
+
const text = stdout.trim();
|
|
79
|
+
if (text.length === 0) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const payload = JSON.parse(text);
|
|
84
|
+
if (typeof payload === "string" && payload.length > 0) {
|
|
85
|
+
return payload;
|
|
86
|
+
}
|
|
87
|
+
if (payload !== null && typeof payload === "object" && !Array.isArray(payload)) {
|
|
88
|
+
const login = payload.login;
|
|
89
|
+
if (typeof login === "string" && login.length > 0) {
|
|
90
|
+
return login;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return text;
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
export function validateInjectedTokenMode(environ, options = {}) {
|
|
100
|
+
const runner = options.runGh ?? defaultRunGh;
|
|
101
|
+
const repo = options.repo ?? DEFAULT_VALIDATION_REPO;
|
|
102
|
+
const runtimeMode = options.runtimeMode ?? null;
|
|
103
|
+
const token = findInjectedToken(environ);
|
|
104
|
+
if (token === null) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
githubAuthMode: GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
108
|
+
runtimeMode,
|
|
109
|
+
failureKind: FAILURE_MISSING_INJECTED_TOKEN,
|
|
110
|
+
detail: "injected-token mode requires GH_TOKEN, GITHUB_TOKEN, or GH_ENTERPRISE_TOKEN; host gh credential store is not used",
|
|
111
|
+
remediation: null,
|
|
112
|
+
login: null,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const authStatus = runner(["auth", "status"], environ);
|
|
116
|
+
if (authStatus.returncode !== 0) {
|
|
117
|
+
return {
|
|
118
|
+
ok: false,
|
|
119
|
+
githubAuthMode: GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
120
|
+
runtimeMode,
|
|
121
|
+
failureKind: FAILURE_GH_AUTH,
|
|
122
|
+
detail: "injected token present but gh auth status failed in worker",
|
|
123
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_GH_AUTH),
|
|
124
|
+
login: null,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const userApi = runner(["api", "user", "--jq", ".login"], environ);
|
|
128
|
+
if (userApi.returncode !== 0) {
|
|
129
|
+
return {
|
|
130
|
+
ok: false,
|
|
131
|
+
githubAuthMode: GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
132
|
+
runtimeMode,
|
|
133
|
+
failureKind: FAILURE_API_UNREACHABLE,
|
|
134
|
+
detail: "injected token present but GitHub API is unreachable",
|
|
135
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_API_UNREACHABLE),
|
|
136
|
+
login: null,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const login = parseLogin(userApi.stdout);
|
|
140
|
+
const [owner, name] = splitRepo(repo);
|
|
141
|
+
const repoApi = runner(["api", `repos/${owner}/${name}`], environ);
|
|
142
|
+
if (repoApi.returncode !== 0) {
|
|
143
|
+
return {
|
|
144
|
+
ok: false,
|
|
145
|
+
githubAuthMode: GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
146
|
+
runtimeMode,
|
|
147
|
+
failureKind: FAILURE_REPO_ACCESS,
|
|
148
|
+
detail: `injected token can reach GitHub API but cannot access ${repo}`,
|
|
149
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_REPO_ACCESS),
|
|
150
|
+
login,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
ok: true,
|
|
155
|
+
githubAuthMode: GITHUB_AUTH_MODE_INJECTED_TOKEN,
|
|
156
|
+
runtimeMode,
|
|
157
|
+
failureKind: null,
|
|
158
|
+
detail: "injected-token mode validated in worker environment",
|
|
159
|
+
remediation: null,
|
|
160
|
+
login,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function validateHostGhMode(environ, options = {}) {
|
|
164
|
+
const runner = options.runGh ?? defaultRunGh;
|
|
165
|
+
const repo = options.repo ?? DEFAULT_VALIDATION_REPO;
|
|
166
|
+
const runtimeMode = options.runtimeMode ?? null;
|
|
167
|
+
const authStatus = runner(["auth", "status"], environ);
|
|
168
|
+
if (authStatus.returncode !== 0) {
|
|
169
|
+
return {
|
|
170
|
+
ok: false,
|
|
171
|
+
githubAuthMode: GITHUB_AUTH_MODE_HOST_GH,
|
|
172
|
+
runtimeMode,
|
|
173
|
+
failureKind: FAILURE_GH_AUTH,
|
|
174
|
+
detail: "gh auth status failed in worker environment",
|
|
175
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_GH_AUTH),
|
|
176
|
+
login: null,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const userApi = runner(["api", "user", "--jq", ".login"], environ);
|
|
180
|
+
if (userApi.returncode !== 0) {
|
|
181
|
+
return {
|
|
182
|
+
ok: false,
|
|
183
|
+
githubAuthMode: GITHUB_AUTH_MODE_HOST_GH,
|
|
184
|
+
runtimeMode,
|
|
185
|
+
failureKind: FAILURE_API_UNREACHABLE,
|
|
186
|
+
detail: "gh auth status passed but GitHub API is unreachable",
|
|
187
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_API_UNREACHABLE),
|
|
188
|
+
login: null,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const [owner, name] = splitRepo(repo);
|
|
192
|
+
const repoApi = runner(["api", `repos/${owner}/${name}`], environ);
|
|
193
|
+
if (repoApi.returncode !== 0) {
|
|
194
|
+
return {
|
|
195
|
+
ok: false,
|
|
196
|
+
githubAuthMode: GITHUB_AUTH_MODE_HOST_GH,
|
|
197
|
+
runtimeMode,
|
|
198
|
+
failureKind: FAILURE_REPO_ACCESS,
|
|
199
|
+
detail: `GitHub API reachable but repository access failed for ${repo}`,
|
|
200
|
+
remediation: mergeRemediation(runtimeMode, FAILURE_REPO_ACCESS),
|
|
201
|
+
login: parseLogin(userApi.stdout),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
ok: true,
|
|
206
|
+
githubAuthMode: GITHUB_AUTH_MODE_HOST_GH,
|
|
207
|
+
runtimeMode,
|
|
208
|
+
failureKind: null,
|
|
209
|
+
detail: "host-gh mode validated in worker environment",
|
|
210
|
+
remediation: null,
|
|
211
|
+
login: parseLogin(userApi.stdout),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
export function validateGithubAuth(githubAuthMode, options = {}) {
|
|
215
|
+
const env = options.environ ?? process.env;
|
|
216
|
+
const runtimeMode = options.runtimeReport?.runtimeMode ?? null;
|
|
217
|
+
if (!KNOWN_GITHUB_AUTH_MODES.has(githubAuthMode)) {
|
|
218
|
+
return {
|
|
219
|
+
ok: false,
|
|
220
|
+
githubAuthMode,
|
|
221
|
+
runtimeMode,
|
|
222
|
+
failureKind: FAILURE_INVALID_MODE,
|
|
223
|
+
detail: `unknown github_auth_mode ${pyRepr(githubAuthMode)}; expected one of ${pyRepr([...KNOWN_GITHUB_AUTH_MODES].sort())}`,
|
|
224
|
+
remediation: null,
|
|
225
|
+
login: null,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (githubAuthMode === GITHUB_AUTH_MODE_INJECTED_TOKEN) {
|
|
229
|
+
return validateInjectedTokenMode(env, {
|
|
230
|
+
repo: options.repo,
|
|
231
|
+
runtimeMode,
|
|
232
|
+
runGh: options.runGh,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return validateHostGhMode(env, {
|
|
236
|
+
repo: options.repo,
|
|
237
|
+
runtimeMode,
|
|
238
|
+
runGh: options.runGh,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
export function validateGithubAuthForWorker(githubAuthMode = null, options = {}) {
|
|
242
|
+
const report = options.runtimeReport ?? getPlatformCapabilities();
|
|
243
|
+
const mode = githubAuthMode ?? inferGithubAuthMode(report);
|
|
244
|
+
return validateGithubAuth(mode, { ...options, runtimeReport: report });
|
|
245
|
+
}
|
|
246
|
+
export function resultToDict(result) {
|
|
247
|
+
return {
|
|
248
|
+
ok: result.ok,
|
|
249
|
+
github_auth_mode: result.githubAuthMode,
|
|
250
|
+
runtime_mode: result.runtimeMode,
|
|
251
|
+
failure_kind: result.failureKind,
|
|
252
|
+
detail: result.detail,
|
|
253
|
+
remediation: result.remediation,
|
|
254
|
+
login: result.login,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
export function githubAuthModesMain(args) {
|
|
258
|
+
const result = validateGithubAuthForWorker(args.githubAuthMode ?? null, {
|
|
259
|
+
repo: args.repo ?? DEFAULT_VALIDATION_REPO,
|
|
260
|
+
});
|
|
261
|
+
if (args.json) {
|
|
262
|
+
process.stdout.write(`${JSON.stringify(resultToDict(result), null, 2)}\n`);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
const status = result.ok ? "ok" : "failed";
|
|
266
|
+
process.stdout.write(`github_auth_mode=${result.githubAuthMode} status=${status}\n`);
|
|
267
|
+
process.stdout.write(`detail=${result.detail}\n`);
|
|
268
|
+
if (result.remediation !== null) {
|
|
269
|
+
process.stdout.write(`${result.remediation}\n`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return result.ok ? 0 : 1;
|
|
273
|
+
}
|
|
274
|
+
export { probeRuntimeCapabilities };
|
|
275
|
+
//# sourceMappingURL=github-auth-modes.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { githubBodyMain } from "./github-body.js";
|
|
4
|
+
function parseArgs(argv) {
|
|
5
|
+
const out = { command: argv[0] ?? "" };
|
|
6
|
+
for (let i = 1; i < argv.length; i += 1) {
|
|
7
|
+
const arg = argv[i];
|
|
8
|
+
if (arg === "--repo")
|
|
9
|
+
out.repo = argv[++i];
|
|
10
|
+
else if (arg === "--title")
|
|
11
|
+
out.title = argv[++i];
|
|
12
|
+
else if (arg === "--issue")
|
|
13
|
+
out.issue = Number.parseInt(argv[++i], 10);
|
|
14
|
+
else if (arg === "--comment")
|
|
15
|
+
out.comment = Number.parseInt(argv[++i], 10);
|
|
16
|
+
else if (arg === "--pr")
|
|
17
|
+
out.pr = Number.parseInt(argv[++i], 10);
|
|
18
|
+
else if (arg === "--body-file")
|
|
19
|
+
out.bodyFile = argv[++i];
|
|
20
|
+
}
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
export function mainEntry(argv = process.argv.slice(2)) {
|
|
24
|
+
const parsed = parseArgs(argv);
|
|
25
|
+
return githubBodyMain(parsed);
|
|
26
|
+
}
|
|
27
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
28
|
+
process.exit(mainEntry());
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=github-body-cli.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const DEFAULT_TIMEOUT_SECONDS = 60;
|
|
2
|
+
export declare class GitHubBodyError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export type RunGhApiFn = (args: readonly string[], options?: {
|
|
6
|
+
inputText?: string | null;
|
|
7
|
+
binary?: string;
|
|
8
|
+
}) => Record<string, unknown>;
|
|
9
|
+
/** Resolve the live GitHub CLI used for writes and mutation read-back. */
|
|
10
|
+
export declare function resolveLiveGh(): string;
|
|
11
|
+
export declare function readBody(bodyFile: string, stdinText?: string | null): string;
|
|
12
|
+
export declare function createIssue(repo: string, options: {
|
|
13
|
+
title: string;
|
|
14
|
+
body: string;
|
|
15
|
+
binary?: string | null;
|
|
16
|
+
runFn?: RunGhApiFn;
|
|
17
|
+
}): Record<string, unknown>;
|
|
18
|
+
export declare function editIssueBody(repo: string, issue: number, options: {
|
|
19
|
+
body: string;
|
|
20
|
+
binary?: string | null;
|
|
21
|
+
runFn?: RunGhApiFn;
|
|
22
|
+
}): Record<string, unknown>;
|
|
23
|
+
export declare function createIssueComment(repo: string, issue: number, options: {
|
|
24
|
+
body: string;
|
|
25
|
+
binary?: string | null;
|
|
26
|
+
runFn?: RunGhApiFn;
|
|
27
|
+
}): Record<string, unknown>;
|
|
28
|
+
export declare function editIssueCommentBody(repo: string, commentId: number, options: {
|
|
29
|
+
body: string;
|
|
30
|
+
binary?: string | null;
|
|
31
|
+
runFn?: RunGhApiFn;
|
|
32
|
+
}): Record<string, unknown>;
|
|
33
|
+
export declare function editPrBody(repo: string, pr: number, options: {
|
|
34
|
+
body: string;
|
|
35
|
+
binary?: string | null;
|
|
36
|
+
runFn?: RunGhApiFn;
|
|
37
|
+
}): Record<string, unknown>;
|
|
38
|
+
export interface GitHubBodyCliArgs {
|
|
39
|
+
command: string;
|
|
40
|
+
repo?: string;
|
|
41
|
+
title?: string;
|
|
42
|
+
issue?: number;
|
|
43
|
+
comment?: number;
|
|
44
|
+
pr?: number;
|
|
45
|
+
bodyFile?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function githubBodyMain(args: GitHubBodyCliArgs): number;
|
|
48
|
+
//# sourceMappingURL=github-body.d.ts.map
|