@deftai/directive 0.126.2 → 0.128.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/bin/deft-hook +14 -0
- package/bin/deft-hook.cmd +14 -0
- package/dist/bin.js +4319 -3
- package/package.json +11 -21
- package/dist/agents-refresh.d.ts +0 -11
- package/dist/agents-refresh.js +0 -90
- package/dist/authz.d.ts +0 -7
- package/dist/authz.js +0 -732
- package/dist/bin.d.ts +0 -3
- package/dist/branch-fixtures.d.ts +0 -45
- package/dist/branch-fixtures.js +0 -156
- package/dist/cache.d.ts +0 -4
- package/dist/cache.js +0 -10
- package/dist/capacity-backfill.d.ts +0 -3
- package/dist/capacity-backfill.js +0 -9
- package/dist/capacity-show.d.ts +0 -3
- package/dist/capacity-show.js +0 -9
- package/dist/change-init.d.ts +0 -3
- package/dist/change-init.js +0 -59
- package/dist/changelog-check.d.ts +0 -3
- package/dist/changelog-check.js +0 -52
- package/dist/check.d.ts +0 -15
- package/dist/check.js +0 -150
- package/dist/cli-package-version.d.ts +0 -3
- package/dist/cli-package-version.js +0 -23
- package/dist/cli-router/index.d.ts +0 -8
- package/dist/cli-router/index.js +0 -44
- package/dist/cli-router/route-argv.d.ts +0 -40
- package/dist/cli-router/route-argv.js +0 -371
- package/dist/codebase-default-extractor.d.ts +0 -3
- package/dist/codebase-default-extractor.js +0 -9
- package/dist/codebase-map-fresh.d.ts +0 -3
- package/dist/codebase-map-fresh.js +0 -9
- package/dist/codebase-map.d.ts +0 -3
- package/dist/codebase-map.js +0 -9
- package/dist/codebase-projection-registry.d.ts +0 -3
- package/dist/codebase-projection-registry.js +0 -9
- package/dist/codebase-provider.d.ts +0 -3
- package/dist/codebase-provider.js +0 -9
- package/dist/commit-lint.d.ts +0 -3
- package/dist/commit-lint.js +0 -44
- package/dist/content-validate-cli/validate-links.d.ts +0 -11
- package/dist/content-validate-cli/validate-links.js +0 -37
- package/dist/content-validate-cli/validate-strategy-output.d.ts +0 -13
- package/dist/content-validate-cli/validate-strategy-output.js +0 -56
- package/dist/content-validate-cli/verify-capacity.d.ts +0 -12
- package/dist/content-validate-cli/verify-capacity.js +0 -54
- package/dist/coverage-hotspots.d.ts +0 -21
- package/dist/coverage-hotspots.js +0 -198
- package/dist/design-critique-spend-resolve.d.ts +0 -18
- package/dist/design-critique-spend-resolve.js +0 -191
- package/dist/directive-finish-loop.d.ts +0 -3
- package/dist/directive-finish-loop.js +0 -10
- package/dist/dispatch.d.ts +0 -193
- package/dist/dispatch.js +0 -3091
- package/dist/doctor.d.ts +0 -19
- package/dist/doctor.js +0 -155
- package/dist/entrypoint.d.ts +0 -6
- package/dist/entrypoint.js +0 -19
- package/dist/escalation-cli.d.ts +0 -4
- package/dist/escalation-cli.js +0 -301
- package/dist/eval-health.d.ts +0 -13
- package/dist/eval-health.js +0 -63
- package/dist/eval-report.d.ts +0 -15
- package/dist/eval-report.js +0 -97
- package/dist/eval-run.d.ts +0 -17
- package/dist/eval-run.js +0 -122
- package/dist/eval-triggers.d.ts +0 -12
- package/dist/eval-triggers.js +0 -56
- package/dist/framework-check-updates.d.ts +0 -10
- package/dist/framework-check-updates.js +0 -68
- package/dist/gates-cli/_helpers.d.ts +0 -24
- package/dist/gates-cli/_helpers.js +0 -115
- package/dist/gates-cli/verify-bridge-drift.d.ts +0 -11
- package/dist/gates-cli/verify-bridge-drift.js +0 -47
- package/dist/gates-cli/verify-go-freeze.d.ts +0 -11
- package/dist/gates-cli/verify-go-freeze.js +0 -48
- package/dist/hook-bin.d.ts +0 -3
- package/dist/hook-bin.js +0 -11
- package/dist/hook-dispatch.d.ts +0 -80
- package/dist/hook-dispatch.js +0 -186
- package/dist/human-presence-mint.d.ts +0 -70
- package/dist/human-presence-mint.js +0 -204
- package/dist/identity-banner.d.ts +0 -13
- package/dist/identity-banner.js +0 -19
- package/dist/index.d.ts +0 -11
- package/dist/index.js +0 -14
- package/dist/init-cli/constants.d.ts +0 -42
- package/dist/init-cli/constants.js +0 -42
- package/dist/init-cli/help.d.ts +0 -9
- package/dist/init-cli/help.js +0 -43
- package/dist/init-cli/init.d.ts +0 -26
- package/dist/init-cli/init.js +0 -80
- package/dist/init-cli/migrate.d.ts +0 -3
- package/dist/init-cli/migrate.js +0 -51
- package/dist/init-cli/resolve-binary.d.ts +0 -34
- package/dist/init-cli/resolve-binary.js +0 -78
- package/dist/init-cli/run-deft-install.d.ts +0 -23
- package/dist/init-cli/run-deft-install.js +0 -71
- package/dist/init-cli/update.d.ts +0 -5
- package/dist/init-cli/update.js +0 -38
- package/dist/install-cli/coverage-map.d.ts +0 -14
- package/dist/install-cli/coverage-map.js +0 -113
- package/dist/install-uninstall.d.ts +0 -3
- package/dist/install-uninstall.js +0 -44
- package/dist/install-upgrade.d.ts +0 -41
- package/dist/install-upgrade.js +0 -86
- package/dist/lifecycle-cli/coverage-map.d.ts +0 -16
- package/dist/lifecycle-cli/coverage-map.js +0 -254
- package/dist/lifecycle-cli/helpers.d.ts +0 -8
- package/dist/lifecycle-cli/helpers.js +0 -20
- package/dist/lifecycle-event.d.ts +0 -11
- package/dist/lifecycle-event.js +0 -45
- package/dist/lifecycle-stats.d.ts +0 -12
- package/dist/lifecycle-stats.js +0 -100
- package/dist/migrate-category-b.d.ts +0 -9
- package/dist/migrate-category-b.js +0 -52
- package/dist/migrate-preflight.d.ts +0 -10
- package/dist/migrate-preflight.js +0 -85
- package/dist/migrate-xbrief.d.ts +0 -11
- package/dist/migrate-xbrief.js +0 -88
- package/dist/occupancy-grant.d.ts +0 -18
- package/dist/occupancy-grant.js +0 -121
- package/dist/occupancy-heartbeat.d.ts +0 -8
- package/dist/occupancy-heartbeat.js +0 -63
- package/dist/occupancy-release.d.ts +0 -23
- package/dist/occupancy-release.js +0 -102
- package/dist/occupancy-steal.d.ts +0 -10
- package/dist/occupancy-steal.js +0 -83
- package/dist/occupancy-unrecognized.d.ts +0 -3
- package/dist/occupancy-unrecognized.js +0 -5
- package/dist/orchestration-cli/coverage-map.d.ts +0 -21
- package/dist/orchestration-cli/coverage-map.js +0 -225
- package/dist/orchestration-cli/helpers.d.ts +0 -11
- package/dist/orchestration-cli/helpers.js +0 -35
- package/dist/ownership-doctor.d.ts +0 -10
- package/dist/ownership-doctor.js +0 -96
- package/dist/ownership-fix.d.ts +0 -10
- package/dist/ownership-fix.js +0 -93
- package/dist/plan-sequence.d.ts +0 -14
- package/dist/plan-sequence.js +0 -258
- package/dist/policy-fixtures.d.ts +0 -33
- package/dist/policy-fixtures.js +0 -118
- package/dist/policy.d.ts +0 -37
- package/dist/policy.js +0 -744
- package/dist/pr-closing-keywords.d.ts +0 -3
- package/dist/pr-closing-keywords.js +0 -10
- package/dist/pr-finish-loop.d.ts +0 -3
- package/dist/pr-finish-loop.js +0 -10
- package/dist/pr-merge-readiness.d.ts +0 -3
- package/dist/pr-merge-readiness.js +0 -10
- package/dist/pr-monitor.d.ts +0 -3
- package/dist/pr-monitor.js +0 -10
- package/dist/pr-protected-issues.d.ts +0 -3
- package/dist/pr-protected-issues.js +0 -10
- package/dist/pr-wait-mergeable.d.ts +0 -3
- package/dist/pr-wait-mergeable.js +0 -10
- package/dist/pr-watch.d.ts +0 -3
- package/dist/pr-watch.js +0 -10
- package/dist/pre-pr-run.d.ts +0 -39
- package/dist/pre-pr-run.js +0 -514
- package/dist/preflight-cache.d.ts +0 -18
- package/dist/preflight-cache.js +0 -113
- package/dist/preflight-gh.d.ts +0 -15
- package/dist/preflight-gh.js +0 -143
- package/dist/probe-session.d.ts +0 -3
- package/dist/probe-session.js +0 -10
- package/dist/release-e2e-fixtures.d.ts +0 -29
- package/dist/release-e2e-fixtures.js +0 -38
- package/dist/release-e2e.d.ts +0 -3
- package/dist/release-e2e.js +0 -10
- package/dist/release-publish.d.ts +0 -3
- package/dist/release-publish.js +0 -10
- package/dist/release-rollback.d.ts +0 -3
- package/dist/release-rollback.js +0 -10
- package/dist/release-wait-npm.d.ts +0 -3
- package/dist/release-wait-npm.js +0 -10
- package/dist/release.d.ts +0 -3
- package/dist/release.js +0 -10
- package/dist/render-cli/deft-ts-runner.d.ts +0 -17
- package/dist/render-cli/deft-ts-runner.js +0 -19
- package/dist/render-cli/export-spec-cli.d.ts +0 -2
- package/dist/render-cli/export-spec-cli.js +0 -6
- package/dist/render-cli/prd-render-cli.d.ts +0 -2
- package/dist/render-cli/prd-render-cli.js +0 -37
- package/dist/render-cli/project-render-cli.d.ts +0 -2
- package/dist/render-cli/project-render-cli.js +0 -6
- package/dist/render-cli/rule-map-cli.d.ts +0 -2
- package/dist/render-cli/rule-map-cli.js +0 -5
- package/dist/render-cli/spec-reconstruct-cli.d.ts +0 -3
- package/dist/render-cli/spec-reconstruct-cli.js +0 -15
- package/dist/render-cli/spec-render-cli.d.ts +0 -2
- package/dist/render-cli/spec-render-cli.js +0 -39
- package/dist/render-cli/spec-validate-cli.d.ts +0 -2
- package/dist/render-cli/spec-validate-cli.js +0 -38
- package/dist/review-monitor-register.d.ts +0 -19
- package/dist/review-monitor-register.js +0 -183
- package/dist/review-monitor-release.d.ts +0 -14
- package/dist/review-monitor-release.js +0 -123
- package/dist/scm-sync-default.d.ts +0 -34
- package/dist/scm-sync-default.js +0 -210
- package/dist/scope-lifecycle.d.ts +0 -4
- package/dist/scope-lifecycle.js +0 -34
- package/dist/scope-record-approved-scope.d.ts +0 -29
- package/dist/scope-record-approved-scope.js +0 -319
- package/dist/scope-record-intent-constraint.d.ts +0 -16
- package/dist/scope-record-intent-constraint.js +0 -202
- package/dist/scope-record-observable-scope.d.ts +0 -16
- package/dist/scope-record-observable-scope.js +0 -204
- package/dist/session-ready.d.ts +0 -15
- package/dist/session-ready.js +0 -144
- package/dist/session-start.d.ts +0 -56
- package/dist/session-start.js +0 -581
- package/dist/slice.d.ts +0 -4
- package/dist/slice.js +0 -34
- package/dist/story-ready-fixtures.d.ts +0 -47
- package/dist/story-ready-fixtures.js +0 -137
- package/dist/subagent-monitor.d.ts +0 -3
- package/dist/subagent-monitor.js +0 -10
- package/dist/subagent-pre-cancel.d.ts +0 -21
- package/dist/subagent-pre-cancel.js +0 -240
- package/dist/subagent-steer-write.d.ts +0 -41
- package/dist/subagent-steer-write.js +0 -333
- package/dist/toolchain-check.d.ts +0 -8
- package/dist/toolchain-check.js +0 -54
- package/dist/triage-actions.d.ts +0 -23
- package/dist/triage-actions.js +0 -233
- package/dist/triage-aux-a-fixtures.d.ts +0 -33
- package/dist/triage-aux-a-fixtures.js +0 -107
- package/dist/triage-aux-b-fixtures.d.ts +0 -30
- package/dist/triage-aux-b-fixtures.js +0 -167
- package/dist/triage-bootstrap-fixtures.d.ts +0 -42
- package/dist/triage-bootstrap-fixtures.js +0 -139
- package/dist/triage-bootstrap.d.ts +0 -24
- package/dist/triage-bootstrap.js +0 -175
- package/dist/triage-bulk.d.ts +0 -17
- package/dist/triage-bulk.js +0 -154
- package/dist/triage-classify-fixtures.d.ts +0 -38
- package/dist/triage-classify-fixtures.js +0 -137
- package/dist/triage-classify.d.ts +0 -45
- package/dist/triage-classify.js +0 -287
- package/dist/triage-evaluate.d.ts +0 -14
- package/dist/triage-evaluate.js +0 -153
- package/dist/triage-help.d.ts +0 -3
- package/dist/triage-help.js +0 -10
- package/dist/triage-queue-fixtures.d.ts +0 -59
- package/dist/triage-queue-fixtures.js +0 -284
- package/dist/triage-queue.d.ts +0 -38
- package/dist/triage-queue.js +0 -391
- package/dist/triage-reconcile.d.ts +0 -11
- package/dist/triage-reconcile.js +0 -76
- package/dist/triage-refresh.d.ts +0 -7
- package/dist/triage-refresh.js +0 -37
- package/dist/triage-scope-drift.d.ts +0 -12
- package/dist/triage-scope-drift.js +0 -117
- package/dist/triage-scope-fixtures.d.ts +0 -32
- package/dist/triage-scope-fixtures.js +0 -131
- package/dist/triage-scope.d.ts +0 -4
- package/dist/triage-scope.js +0 -34
- package/dist/triage-smoketest.d.ts +0 -3
- package/dist/triage-smoketest.js +0 -43
- package/dist/triage-strip-withdrawn.d.ts +0 -21
- package/dist/triage-strip-withdrawn.js +0 -102
- package/dist/triage-subscribe.d.ts +0 -15
- package/dist/triage-subscribe.js +0 -157
- package/dist/triage-summary.d.ts +0 -14
- package/dist/triage-summary.js +0 -83
- package/dist/triage-welcome.d.ts +0 -14
- package/dist/triage-welcome.js +0 -121
- package/dist/ts-check-lane.d.ts +0 -9
- package/dist/ts-check-lane.js +0 -49
- package/dist/umbrella-current-shape.d.ts +0 -9
- package/dist/umbrella-current-shape.js +0 -56
- package/dist/vbrief-activate.d.ts +0 -3
- package/dist/vbrief-activate.js +0 -7
- package/dist/vbrief-build.d.ts +0 -3
- package/dist/vbrief-build.js +0 -8
- package/dist/vbrief-preflight-fixtures.d.ts +0 -32
- package/dist/vbrief-preflight-fixtures.js +0 -79
- package/dist/vbrief-preflight.d.ts +0 -13
- package/dist/vbrief-preflight.js +0 -141
- package/dist/vbrief-reconcile.d.ts +0 -3
- package/dist/vbrief-reconcile.js +0 -7
- package/dist/vbrief-validate.d.ts +0 -3
- package/dist/vbrief-validate.js +0 -8
- package/dist/vbrief-validation.d.ts +0 -3
- package/dist/vbrief-validation.js +0 -8
- package/dist/verify-ac.d.ts +0 -28
- package/dist/verify-ac.js +0 -439
- package/dist/verify-agents-md-advisory.d.ts +0 -19
- package/dist/verify-agents-md-advisory.js +0 -65
- package/dist/verify-agents-md-budget.d.ts +0 -12
- package/dist/verify-agents-md-budget.js +0 -71
- package/dist/verify-branch.d.ts +0 -14
- package/dist/verify-branch.js +0 -81
- package/dist/verify-class-checks.d.ts +0 -11
- package/dist/verify-class-checks.js +0 -71
- package/dist/verify-cohort-review-monitors.d.ts +0 -5
- package/dist/verify-cohort-review-monitors.js +0 -11
- package/dist/verify-completed-tracked.d.ts +0 -19
- package/dist/verify-completed-tracked.js +0 -202
- package/dist/verify-completed-write-guard.d.ts +0 -13
- package/dist/verify-completed-write-guard.js +0 -84
- package/dist/verify-consumer-check-contract.d.ts +0 -12
- package/dist/verify-consumer-check-contract.js +0 -70
- package/dist/verify-consumer-header-placeholder.d.ts +0 -12
- package/dist/verify-consumer-header-placeholder.js +0 -73
- package/dist/verify-consumer-test-lane.d.ts +0 -12
- package/dist/verify-consumer-test-lane.js +0 -57
- package/dist/verify-durable-effect-acquisition.d.ts +0 -13
- package/dist/verify-durable-effect-acquisition.js +0 -70
- package/dist/verify-encoding.d.ts +0 -15
- package/dist/verify-encoding.js +0 -83
- package/dist/verify-eval-health-relocation.d.ts +0 -16
- package/dist/verify-eval-health-relocation.js +0 -93
- package/dist/verify-eval-triggers-relocation.d.ts +0 -14
- package/dist/verify-eval-triggers-relocation.js +0 -74
- package/dist/verify-evaluator-surface.d.ts +0 -15
- package/dist/verify-evaluator-surface.js +0 -87
- package/dist/verify-forward-coverage.d.ts +0 -19
- package/dist/verify-forward-coverage.js +0 -144
- package/dist/verify-hooks-installed.d.ts +0 -24
- package/dist/verify-hooks-installed.js +0 -140
- package/dist/verify-intent-constraint.d.ts +0 -17
- package/dist/verify-intent-constraint.js +0 -110
- package/dist/verify-investigation.d.ts +0 -3
- package/dist/verify-investigation.js +0 -10
- package/dist/verify-judgment-gates.d.ts +0 -3
- package/dist/verify-judgment-gates.js +0 -10
- package/dist/verify-l4-owner.d.ts +0 -15
- package/dist/verify-l4-owner.js +0 -132
- package/dist/verify-lifecycle-visible.d.ts +0 -13
- package/dist/verify-lifecycle-visible.js +0 -68
- package/dist/verify-literal-ac.d.ts +0 -14
- package/dist/verify-literal-ac.js +0 -168
- package/dist/verify-no-task-runtime.d.ts +0 -3
- package/dist/verify-no-task-runtime.js +0 -16
- package/dist/verify-observable-scope.d.ts +0 -17
- package/dist/verify-observable-scope.js +0 -110
- package/dist/verify-operator-scope-limit.d.ts +0 -17
- package/dist/verify-operator-scope-limit.js +0 -285
- package/dist/verify-orphan-active.d.ts +0 -17
- package/dist/verify-orphan-active.js +0 -135
- package/dist/verify-ownership.d.ts +0 -10
- package/dist/verify-ownership.js +0 -90
- package/dist/verify-persisted-planning-narratives.d.ts +0 -12
- package/dist/verify-persisted-planning-narratives.js +0 -82
- package/dist/verify-plan-sequence.d.ts +0 -14
- package/dist/verify-plan-sequence.js +0 -138
- package/dist/verify-pr-closeout-attestable.d.ts +0 -15
- package/dist/verify-pr-closeout-attestable.js +0 -114
- package/dist/verify-presentation-ceiling.d.ts +0 -11
- package/dist/verify-presentation-ceiling.js +0 -71
- package/dist/verify-presentation-coverage.d.ts +0 -14
- package/dist/verify-presentation-coverage.js +0 -90
- package/dist/verify-review-monitor.d.ts +0 -32
- package/dist/verify-review-monitor.js +0 -362
- package/dist/verify-scope-provenance.d.ts +0 -16
- package/dist/verify-scope-provenance.js +0 -91
- package/dist/verify-session-ritual.d.ts +0 -23
- package/dist/verify-session-ritual.js +0 -144
- package/dist/verify-source-cli/rule-ownership-lint.d.ts +0 -12
- package/dist/verify-source-cli/rule-ownership-lint.js +0 -61
- package/dist/verify-source-cli/verify-biome-config.d.ts +0 -11
- package/dist/verify-source-cli/verify-biome-config.js +0 -46
- package/dist/verify-source-cli/verify-closing-keywords.d.ts +0 -35
- package/dist/verify-source-cli/verify-closing-keywords.js +0 -139
- package/dist/verify-source-cli/verify-consumer-hard-stops.d.ts +0 -16
- package/dist/verify-source-cli/verify-consumer-hard-stops.js +0 -99
- package/dist/verify-source-cli/verify-contained-writes.d.ts +0 -13
- package/dist/verify-source-cli/verify-contained-writes.js +0 -67
- package/dist/verify-source-cli/verify-content-manifest.d.ts +0 -12
- package/dist/verify-source-cli/verify-content-manifest.js +0 -61
- package/dist/verify-source-cli/verify-contract-drift.d.ts +0 -11
- package/dist/verify-source-cli/verify-contract-drift.js +0 -47
- package/dist/verify-source-cli/verify-cursor-tier1.d.ts +0 -12
- package/dist/verify-source-cli/verify-cursor-tier1.js +0 -51
- package/dist/verify-source-cli/verify-deposit-closure.d.ts +0 -12
- package/dist/verify-source-cli/verify-deposit-closure.js +0 -52
- package/dist/verify-source-cli/verify-openclaw-tier1.d.ts +0 -12
- package/dist/verify-source-cli/verify-openclaw-tier1.js +0 -51
- package/dist/verify-source-cli/verify-scm-boundary.d.ts +0 -13
- package/dist/verify-source-cli/verify-scm-boundary.js +0 -66
- package/dist/verify-source-cli/verify-semantic-single-source.d.ts +0 -11
- package/dist/verify-source-cli/verify-semantic-single-source.js +0 -49
- package/dist/verify-source-cli/verify-skill-external-fetch-gate.d.ts +0 -11
- package/dist/verify-source-cli/verify-skill-external-fetch-gate.js +0 -46
- package/dist/verify-source-cli/verify-spec-drift.d.ts +0 -3
- package/dist/verify-source-cli/verify-spec-drift.js +0 -15
- package/dist/verify-source-cli/verify-spec-prd-fresh.d.ts +0 -3
- package/dist/verify-source-cli/verify-spec-prd-fresh.js +0 -15
- package/dist/verify-source-cli/verify-stubs.d.ts +0 -11
- package/dist/verify-source-cli/verify-stubs.js +0 -27
- package/dist/verify-source-cli/verify-telemetry-coverage.d.ts +0 -13
- package/dist/verify-source-cli/verify-telemetry-coverage.js +0 -67
- package/dist/verify-source-cli/verify-xbrief-drift.d.ts +0 -15
- package/dist/verify-source-cli/verify-xbrief-drift.js +0 -80
- package/dist/verify-story-ready.d.ts +0 -18
- package/dist/verify-story-ready.js +0 -190
- package/dist/verify-subagent-alive.d.ts +0 -21
- package/dist/verify-subagent-alive.js +0 -219
- package/dist/verify-subagent-steer.d.ts +0 -19
- package/dist/verify-subagent-steer.js +0 -136
- package/dist/verify-test-boundary.d.ts +0 -12
- package/dist/verify-test-boundary.js +0 -80
- package/dist/verify-tools.d.ts +0 -13
- package/dist/verify-tools.js +0 -67
- package/dist/verify-wip-cap.d.ts +0 -13
- package/dist/verify-wip-cap.js +0 -62
- package/dist/windows-bin-ps1.d.ts +0 -39
- package/dist/windows-bin-ps1.js +0 -226
- package/dist/wip-cap-fixtures.d.ts +0 -37
- package/dist/wip-cap-fixtures.js +0 -122
- package/dist/wsl-ownership-guard.d.ts +0 -2
- package/dist/wsl-ownership-guard.js +0 -15
- package/dist/xbrief-create.d.ts +0 -3
- package/dist/xbrief-create.js +0 -9
- package/dist/xbrief-verify.d.ts +0 -3
- package/dist/xbrief-verify.js +0 -9
- package/scripts/remove-windows-ps1-shims.mjs +0 -26
package/dist/triage-bulk.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
interface ParsedArgs {
|
|
3
|
-
action: string;
|
|
4
|
-
repo: string;
|
|
5
|
-
label: string | null;
|
|
6
|
-
author: string | null;
|
|
7
|
-
ageDays: number | null;
|
|
8
|
-
cluster: string | null;
|
|
9
|
-
reason: string | null;
|
|
10
|
-
reAction: boolean;
|
|
11
|
-
showHelp: boolean;
|
|
12
|
-
error?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
15
|
-
export declare function run(argv: string[]): number;
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=triage-bulk.d.ts.map
|
package/dist/triage-bulk.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { bulkActionWithDefaults, CacheEmptyError, } from "@deftai/directive-core/dist/triage/bulk/index.js";
|
|
4
|
-
import { interceptHelp } from "@deftai/directive-core/dist/triage/help/index.js";
|
|
5
|
-
export function parseArgs(argv) {
|
|
6
|
-
const parsed = {
|
|
7
|
-
action: "",
|
|
8
|
-
repo: "",
|
|
9
|
-
label: null,
|
|
10
|
-
author: null,
|
|
11
|
-
ageDays: null,
|
|
12
|
-
cluster: null,
|
|
13
|
-
reason: null,
|
|
14
|
-
reAction: false,
|
|
15
|
-
showHelp: false,
|
|
16
|
-
};
|
|
17
|
-
const positional = [];
|
|
18
|
-
for (let i = 0; i < argv.length; i += 1) {
|
|
19
|
-
const arg = argv[i];
|
|
20
|
-
if (arg === undefined)
|
|
21
|
-
continue;
|
|
22
|
-
if (arg === "--help" || arg === "-h") {
|
|
23
|
-
parsed.showHelp = true;
|
|
24
|
-
}
|
|
25
|
-
else if (arg === "--re-action") {
|
|
26
|
-
parsed.reAction = true;
|
|
27
|
-
}
|
|
28
|
-
else if (arg === "--repo") {
|
|
29
|
-
const value = argv[i + 1];
|
|
30
|
-
if (value === undefined) {
|
|
31
|
-
return { ...parsed, error: "argument --repo: expected one argument" };
|
|
32
|
-
}
|
|
33
|
-
parsed.repo = value;
|
|
34
|
-
i += 1;
|
|
35
|
-
}
|
|
36
|
-
else if (arg.startsWith("--repo=")) {
|
|
37
|
-
parsed.repo = arg.slice("--repo=".length);
|
|
38
|
-
}
|
|
39
|
-
else if (arg === "--label") {
|
|
40
|
-
const value = argv[i + 1];
|
|
41
|
-
if (value === undefined) {
|
|
42
|
-
return { ...parsed, error: "argument --label: expected one argument" };
|
|
43
|
-
}
|
|
44
|
-
parsed.label = value;
|
|
45
|
-
i += 1;
|
|
46
|
-
}
|
|
47
|
-
else if (arg.startsWith("--label=")) {
|
|
48
|
-
parsed.label = arg.slice("--label=".length);
|
|
49
|
-
}
|
|
50
|
-
else if (arg === "--author") {
|
|
51
|
-
const value = argv[i + 1];
|
|
52
|
-
if (value === undefined) {
|
|
53
|
-
return { ...parsed, error: "argument --author: expected one argument" };
|
|
54
|
-
}
|
|
55
|
-
parsed.author = value;
|
|
56
|
-
i += 1;
|
|
57
|
-
}
|
|
58
|
-
else if (arg.startsWith("--author=")) {
|
|
59
|
-
parsed.author = arg.slice("--author=".length);
|
|
60
|
-
}
|
|
61
|
-
else if (arg === "--age-days") {
|
|
62
|
-
const value = argv[i + 1];
|
|
63
|
-
if (value === undefined) {
|
|
64
|
-
return { ...parsed, error: "argument --age-days: expected one argument" };
|
|
65
|
-
}
|
|
66
|
-
parsed.ageDays = Number.parseInt(value, 10);
|
|
67
|
-
i += 1;
|
|
68
|
-
}
|
|
69
|
-
else if (arg.startsWith("--age-days=")) {
|
|
70
|
-
parsed.ageDays = Number.parseInt(arg.slice("--age-days=".length), 10);
|
|
71
|
-
}
|
|
72
|
-
else if (arg === "--cluster") {
|
|
73
|
-
const value = argv[i + 1];
|
|
74
|
-
if (value === undefined) {
|
|
75
|
-
return { ...parsed, error: "argument --cluster: expected one argument" };
|
|
76
|
-
}
|
|
77
|
-
parsed.cluster = value;
|
|
78
|
-
i += 1;
|
|
79
|
-
}
|
|
80
|
-
else if (arg.startsWith("--cluster=")) {
|
|
81
|
-
parsed.cluster = arg.slice("--cluster=".length);
|
|
82
|
-
}
|
|
83
|
-
else if (arg === "--reason") {
|
|
84
|
-
const value = argv[i + 1];
|
|
85
|
-
if (value === undefined) {
|
|
86
|
-
return { ...parsed, error: "argument --reason: expected one argument" };
|
|
87
|
-
}
|
|
88
|
-
parsed.reason = value;
|
|
89
|
-
i += 1;
|
|
90
|
-
}
|
|
91
|
-
else if (arg.startsWith("--reason=")) {
|
|
92
|
-
parsed.reason = arg.slice("--reason=".length);
|
|
93
|
-
}
|
|
94
|
-
else if (arg.startsWith("-")) {
|
|
95
|
-
return { ...parsed, error: `unrecognized arguments: ${arg}` };
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
positional.push(arg);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (positional.length > 0 && positional[0] !== undefined) {
|
|
102
|
-
parsed.action = positional[0];
|
|
103
|
-
}
|
|
104
|
-
return parsed;
|
|
105
|
-
}
|
|
106
|
-
export function run(argv) {
|
|
107
|
-
const helpRc = interceptHelp("triage_bulk", argv);
|
|
108
|
-
if (helpRc !== null) {
|
|
109
|
-
return helpRc;
|
|
110
|
-
}
|
|
111
|
-
const args = parseArgs(argv);
|
|
112
|
-
if (args.showHelp && args.action === "") {
|
|
113
|
-
return 0;
|
|
114
|
-
}
|
|
115
|
-
if (args.error !== undefined) {
|
|
116
|
-
process.stderr.write(`${args.error}\n`);
|
|
117
|
-
return 2;
|
|
118
|
-
}
|
|
119
|
-
if (!["accept", "reject", "defer", "needs-ac"].includes(args.action)) {
|
|
120
|
-
process.stderr.write("triage_bulk: action required (accept|reject|defer|needs-ac)\n");
|
|
121
|
-
return 2;
|
|
122
|
-
}
|
|
123
|
-
if (args.repo === "") {
|
|
124
|
-
process.stderr.write("triage_bulk: --repo is required\n");
|
|
125
|
-
return 2;
|
|
126
|
-
}
|
|
127
|
-
// #2279: the bulk path defaults to native TypeScript actions. It no longer
|
|
128
|
-
// resolves a project/DEFT_ROOT `scripts/` dir, so an attacker-planted
|
|
129
|
-
// `scripts/triage_actions.py` can never be executed. Pass only projectRoot.
|
|
130
|
-
const projectRoot = process.cwd();
|
|
131
|
-
try {
|
|
132
|
-
bulkActionWithDefaults(args.action, args.repo, {
|
|
133
|
-
label: args.label,
|
|
134
|
-
author: args.author,
|
|
135
|
-
ageDays: args.ageDays,
|
|
136
|
-
cluster: args.cluster,
|
|
137
|
-
reason: args.reason,
|
|
138
|
-
reAction: args.reAction,
|
|
139
|
-
projectRoot,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
catch (exc) {
|
|
143
|
-
if (exc instanceof CacheEmptyError) {
|
|
144
|
-
process.stderr.write(`${exc.message}\n`);
|
|
145
|
-
return 2;
|
|
146
|
-
}
|
|
147
|
-
throw exc;
|
|
148
|
-
}
|
|
149
|
-
return 0;
|
|
150
|
-
}
|
|
151
|
-
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
152
|
-
process.exit(run(process.argv.slice(2)));
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=triage-bulk.js.map
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export interface CommandCapture {
|
|
2
|
-
readonly exitCode: number;
|
|
3
|
-
readonly stdout: string;
|
|
4
|
-
readonly stderr: string;
|
|
5
|
-
}
|
|
6
|
-
export interface FixtureOptions {
|
|
7
|
-
readonly plan?: Record<string, unknown>;
|
|
8
|
-
readonly omitProjectDefinition?: boolean;
|
|
9
|
-
readonly rawProjectDefinition?: Record<string, unknown>;
|
|
10
|
-
}
|
|
11
|
-
export interface ParityCase {
|
|
12
|
-
readonly name: string;
|
|
13
|
-
readonly argv: readonly string[];
|
|
14
|
-
readonly fixture?: FixtureOptions;
|
|
15
|
-
readonly useRepoRoot?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface ParityDiff {
|
|
18
|
-
readonly caseName: string;
|
|
19
|
-
readonly exitMismatch: boolean;
|
|
20
|
-
readonly stdoutMismatch: boolean;
|
|
21
|
-
readonly stderrMismatch: boolean;
|
|
22
|
-
readonly pythonExit: number;
|
|
23
|
-
readonly tsExit: number;
|
|
24
|
-
}
|
|
25
|
-
export interface ParityResult {
|
|
26
|
-
readonly ok: boolean;
|
|
27
|
-
readonly diffs: ParityDiff[];
|
|
28
|
-
}
|
|
29
|
-
/** Strip volatile absolute paths before compare. */
|
|
30
|
-
export declare function normalizeOutput(text: string): string;
|
|
31
|
-
/** Build a throwaway project root with optional PROJECT-DEFINITION. */
|
|
32
|
-
export declare function buildFixtureRepo(options?: FixtureOptions): string;
|
|
33
|
-
/** Diff one parity case between Python oracle and TS CLI. */
|
|
34
|
-
export declare function diffCase(python: CommandCapture, ts: CommandCapture, caseName: string): ParityDiff;
|
|
35
|
-
export declare const PARITY_CASES: readonly ParityCase[];
|
|
36
|
-
/** Run all parity cases; returns aggregate result. */
|
|
37
|
-
export declare function renderReport(result: ParityResult): string;
|
|
38
|
-
//# sourceMappingURL=triage-classify-fixtures.d.ts.map
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/** Test fixtures extracted from legacy parity harness (#2083). */
|
|
2
|
-
import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
/** Strip volatile absolute paths before compare. */
|
|
6
|
-
export function normalizeOutput(text) {
|
|
7
|
-
return (text
|
|
8
|
-
.replace(/project_root=[^\s)]+/g, "project_root=<ROOT>")
|
|
9
|
-
// Match the parity temp root regardless of platform tmpdir prefix
|
|
10
|
-
// (/tmp on Linux, /var/folders/... on macOS, etc.).
|
|
11
|
-
.replace(/\S*deft-triage-classify-parity-[^\s/]+/g, "<TMPROOT>"));
|
|
12
|
-
}
|
|
13
|
-
function writeProjectDefinition(root, plan) {
|
|
14
|
-
const dir = join(root, "xbrief");
|
|
15
|
-
mkdirSync(dir, { recursive: true });
|
|
16
|
-
writeFileSync(join(dir, "PROJECT-DEFINITION.xbrief.json"), `${JSON.stringify({
|
|
17
|
-
xBRIEFInfo: { version: "0.8" },
|
|
18
|
-
plan: { title: "T", status: "running", items: [], ...plan },
|
|
19
|
-
}, null, 2)}\n`, { encoding: "utf8" });
|
|
20
|
-
}
|
|
21
|
-
/** Build a throwaway project root with optional PROJECT-DEFINITION. */
|
|
22
|
-
export function buildFixtureRepo(options = {}) {
|
|
23
|
-
const root = mkdtempSync(join(tmpdir(), "deft-triage-classify-parity-"));
|
|
24
|
-
mkdirSync(join(root, "xbrief"), { recursive: true });
|
|
25
|
-
if (options.rawProjectDefinition !== undefined) {
|
|
26
|
-
writeFileSync(join(root, "xbrief", "PROJECT-DEFINITION.xbrief.json"), `${JSON.stringify(options.rawProjectDefinition, null, 2)}\n`, { encoding: "utf8" });
|
|
27
|
-
}
|
|
28
|
-
else if (!options.omitProjectDefinition && options.plan !== undefined) {
|
|
29
|
-
writeProjectDefinition(root, options.plan);
|
|
30
|
-
}
|
|
31
|
-
else if (!options.omitProjectDefinition) {
|
|
32
|
-
writeProjectDefinition(root, {});
|
|
33
|
-
}
|
|
34
|
-
return root;
|
|
35
|
-
}
|
|
36
|
-
/** Diff one parity case between Python oracle and TS CLI. */
|
|
37
|
-
export function diffCase(python, ts, caseName) {
|
|
38
|
-
const pyOut = normalizeOutput(python.stdout);
|
|
39
|
-
const tsOut = normalizeOutput(ts.stdout);
|
|
40
|
-
const pyErr = normalizeOutput(python.stderr);
|
|
41
|
-
const tsErr = normalizeOutput(ts.stderr);
|
|
42
|
-
return {
|
|
43
|
-
caseName,
|
|
44
|
-
exitMismatch: python.exitCode !== ts.exitCode,
|
|
45
|
-
stdoutMismatch: pyOut !== tsOut,
|
|
46
|
-
stderrMismatch: pyErr !== tsErr,
|
|
47
|
-
pythonExit: python.exitCode,
|
|
48
|
-
tsExit: ts.exitCode,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export const PARITY_CASES = [
|
|
52
|
-
{
|
|
53
|
-
name: "list-default-repo-root",
|
|
54
|
-
argv: ["--list"],
|
|
55
|
-
useRepoRoot: true,
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: "list-no-project-definition",
|
|
59
|
-
argv: ["--list"],
|
|
60
|
-
fixture: { omitProjectDefinition: true },
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
name: "validate-no-project-definition",
|
|
64
|
-
argv: ["--validate"],
|
|
65
|
-
fixture: { omitProjectDefinition: true },
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: "validate-valid-consumer-rules",
|
|
69
|
-
argv: ["--validate"],
|
|
70
|
-
fixture: {
|
|
71
|
-
plan: {
|
|
72
|
-
policy: {
|
|
73
|
-
triageAutoClassify: [
|
|
74
|
-
{
|
|
75
|
-
match: { labels: { "any-of": ["bug"] } },
|
|
76
|
-
action: "escalate",
|
|
77
|
-
reason: "p0 bug",
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
triageHoldMarkers: ["BLOCKED", "WONTFIX"],
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: "validate-invalid-empty-match",
|
|
87
|
-
argv: ["--validate"],
|
|
88
|
-
fixture: {
|
|
89
|
-
plan: {
|
|
90
|
-
policy: {
|
|
91
|
-
triageAutoClassify: [{ match: {}, action: "defer", reason: "??" }],
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
name: "validate-invalid-hold-markers",
|
|
98
|
-
argv: ["--validate"],
|
|
99
|
-
fixture: {
|
|
100
|
-
plan: {
|
|
101
|
-
policy: {
|
|
102
|
-
triageHoldMarkers: "",
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
name: "validate-malformed-plan",
|
|
109
|
-
argv: ["--validate"],
|
|
110
|
-
fixture: {
|
|
111
|
-
rawProjectDefinition: {
|
|
112
|
-
xBRIEFInfo: { version: "0.8" },
|
|
113
|
-
plan: null,
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
];
|
|
118
|
-
/** Run all parity cases; returns aggregate result. */
|
|
119
|
-
export function renderReport(result) {
|
|
120
|
-
if (result.ok) {
|
|
121
|
-
return `triage:classify parity: CLEAN -- Python and TS agree on ${PARITY_CASES.length} cases.`;
|
|
122
|
-
}
|
|
123
|
-
const lines = ["triage:classify parity: DIVERGENCE"];
|
|
124
|
-
for (const d of result.diffs) {
|
|
125
|
-
if (d.exitMismatch || d.stdoutMismatch || d.stderrMismatch) {
|
|
126
|
-
lines.push(` case: ${d.caseName}`);
|
|
127
|
-
if (d.exitMismatch)
|
|
128
|
-
lines.push(` exit: python=${d.pythonExit} ts=${d.tsExit}`);
|
|
129
|
-
if (d.stdoutMismatch)
|
|
130
|
-
lines.push(" stdout mismatch");
|
|
131
|
-
if (d.stderrMismatch)
|
|
132
|
-
lines.push(" stderr mismatch");
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return lines.join("\n");
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=triage-classify-fixtures.js.map
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import type { ResolveAuthenticatedLogin } from "@deftai/directive-core/dist/triage/author-filter.js";
|
|
3
|
-
import type { LabelClient } from "@deftai/directive-core/dist/vbrief-reconcile/types.js";
|
|
4
|
-
export interface ParsedArgs {
|
|
5
|
-
projectRoot: string;
|
|
6
|
-
doList: boolean;
|
|
7
|
-
doValidate: boolean;
|
|
8
|
-
doMirror: boolean;
|
|
9
|
-
apply: boolean;
|
|
10
|
-
json: boolean;
|
|
11
|
-
repo: string | null;
|
|
12
|
-
allowCrossRepo: boolean;
|
|
13
|
-
/** Opt-in: include closed issues (default open-only, #3125). */
|
|
14
|
-
includeClosed: boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Opt-in re-enrich: re-plan already-stamped issues with additive label deltas
|
|
17
|
-
* (#3197). Requires --mirror; dry-run by default until --apply.
|
|
18
|
-
*/
|
|
19
|
-
reEnrich: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Dismiss SCM label-mirror discovery tip without running a dry-run (#3124).
|
|
22
|
-
* Standalone production entry for recordMirrorDiscoveryAcked.
|
|
23
|
-
*/
|
|
24
|
-
ackDiscovery: boolean;
|
|
25
|
-
/** Raw --author value (LOGIN, @me, comma allow-list); null = no filter (#3129). */
|
|
26
|
-
author: string | null;
|
|
27
|
-
/** Apply batch size (rate-limit awareness). */
|
|
28
|
-
batchSize: number | null;
|
|
29
|
-
/** Delay ms between apply batches. */
|
|
30
|
-
delayMs: number | null;
|
|
31
|
-
/** Max samples in human digest. */
|
|
32
|
-
sampleLimit: number | null;
|
|
33
|
-
error?: string;
|
|
34
|
-
}
|
|
35
|
-
/** Parse triage-classify CLI args (#1129 + #1423 Wave 1/2 mirror flags). */
|
|
36
|
-
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
37
|
-
export interface RunOptions {
|
|
38
|
-
/** Injected LabelClient for tests (apply path). */
|
|
39
|
-
readonly labelClient?: LabelClient;
|
|
40
|
-
/** Override `@me` resolution for hermetic tests (#3129). */
|
|
41
|
-
readonly resolveAuthenticatedLogin?: ResolveAuthenticatedLogin;
|
|
42
|
-
}
|
|
43
|
-
/** Run the CLI and return the process exit code. */
|
|
44
|
-
export declare function run(argv: string[], _options?: RunOptions): number;
|
|
45
|
-
//# sourceMappingURL=triage-classify.d.ts.map
|
package/dist/triage-classify.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { statSync } from "node:fs";
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { CLASSIFY_MIRROR_WITHDRAWN_EXIT_CODE, CLASSIFY_MIRROR_WITHDRAWN_MESSAGE, listProject, mirrorDiscoveryStateExists, recordMirrorDiscoveryAcked, validateProject, } from "@deftai/directive-core/dist/triage/classify/index.js";
|
|
6
|
-
function parseNonNegInt(raw, flag) {
|
|
7
|
-
const n = Number.parseInt(raw, 10);
|
|
8
|
-
if (!Number.isFinite(n) || String(n) !== raw.trim() || n < 0) {
|
|
9
|
-
return { error: `argument ${flag}: expected a non-negative integer` };
|
|
10
|
-
}
|
|
11
|
-
return { value: n };
|
|
12
|
-
}
|
|
13
|
-
/** Batch size must be >= 1 (0 would silently fall back in core). */
|
|
14
|
-
function parseBatchSize(raw) {
|
|
15
|
-
const parsed = parseNonNegInt(raw, "--batch-size");
|
|
16
|
-
if (parsed.error !== undefined) {
|
|
17
|
-
return parsed;
|
|
18
|
-
}
|
|
19
|
-
if ((parsed.value ?? 0) < 1) {
|
|
20
|
-
return {
|
|
21
|
-
error: "argument --batch-size: expected an integer >= 1 (omit flag for default 10)",
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
return parsed;
|
|
25
|
-
}
|
|
26
|
-
/** Parse triage-classify CLI args (#1129 + #1423 Wave 1/2 mirror flags). */
|
|
27
|
-
export function parseArgs(argv) {
|
|
28
|
-
const parsed = {
|
|
29
|
-
projectRoot: ".",
|
|
30
|
-
doList: false,
|
|
31
|
-
doValidate: false,
|
|
32
|
-
doMirror: false,
|
|
33
|
-
apply: false,
|
|
34
|
-
json: false,
|
|
35
|
-
repo: null,
|
|
36
|
-
allowCrossRepo: false,
|
|
37
|
-
includeClosed: false,
|
|
38
|
-
reEnrich: false,
|
|
39
|
-
ackDiscovery: false,
|
|
40
|
-
author: null,
|
|
41
|
-
batchSize: null,
|
|
42
|
-
delayMs: null,
|
|
43
|
-
sampleLimit: null,
|
|
44
|
-
};
|
|
45
|
-
for (let i = 0; i < argv.length; i += 1) {
|
|
46
|
-
const arg = argv[i];
|
|
47
|
-
if (arg === "--list") {
|
|
48
|
-
parsed.doList = true;
|
|
49
|
-
}
|
|
50
|
-
else if (arg === "--validate") {
|
|
51
|
-
parsed.doValidate = true;
|
|
52
|
-
}
|
|
53
|
-
else if (arg === "--mirror") {
|
|
54
|
-
parsed.doMirror = true;
|
|
55
|
-
}
|
|
56
|
-
else if (arg === "--apply") {
|
|
57
|
-
parsed.apply = true;
|
|
58
|
-
}
|
|
59
|
-
else if (arg === "--json") {
|
|
60
|
-
parsed.json = true;
|
|
61
|
-
}
|
|
62
|
-
else if (arg === "--allow-cross-repo") {
|
|
63
|
-
parsed.allowCrossRepo = true;
|
|
64
|
-
}
|
|
65
|
-
else if (arg === "--include-closed") {
|
|
66
|
-
parsed.includeClosed = true;
|
|
67
|
-
}
|
|
68
|
-
else if (arg === "--re-enrich") {
|
|
69
|
-
parsed.reEnrich = true;
|
|
70
|
-
}
|
|
71
|
-
else if (arg === "--ack-discovery") {
|
|
72
|
-
parsed.ackDiscovery = true;
|
|
73
|
-
}
|
|
74
|
-
else if (arg === "--author-mine") {
|
|
75
|
-
parsed.author = "@me";
|
|
76
|
-
}
|
|
77
|
-
else if (arg === "--author") {
|
|
78
|
-
const value = argv[i + 1];
|
|
79
|
-
if (value === undefined) {
|
|
80
|
-
return { ...parsed, error: "argument --author: expected one argument" };
|
|
81
|
-
}
|
|
82
|
-
// Reject adjacent flags (e.g. `--author --apply`) so they are not
|
|
83
|
-
// swallowed as logins (#3129 Greptile P1 adjacent-option).
|
|
84
|
-
if (value.startsWith("-")) {
|
|
85
|
-
return {
|
|
86
|
-
...parsed,
|
|
87
|
-
error: `argument --author: expected a login (or @me), got flag token '${value}'`,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
parsed.author = value;
|
|
91
|
-
i += 1;
|
|
92
|
-
}
|
|
93
|
-
else if (arg?.startsWith("--author=")) {
|
|
94
|
-
const value = arg.slice("--author=".length);
|
|
95
|
-
if (value.startsWith("-") && value.length > 1) {
|
|
96
|
-
return {
|
|
97
|
-
...parsed,
|
|
98
|
-
error: `argument --author: expected a login (or @me), got flag token '${value}'`,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
parsed.author = value;
|
|
102
|
-
}
|
|
103
|
-
else if (arg === "--repo") {
|
|
104
|
-
const value = argv[i + 1];
|
|
105
|
-
if (value === undefined) {
|
|
106
|
-
return { ...parsed, error: "argument --repo: expected one argument" };
|
|
107
|
-
}
|
|
108
|
-
parsed.repo = value;
|
|
109
|
-
i += 1;
|
|
110
|
-
}
|
|
111
|
-
else if (arg?.startsWith("--repo=")) {
|
|
112
|
-
parsed.repo = arg.slice("--repo=".length);
|
|
113
|
-
}
|
|
114
|
-
else if (arg === "--batch-size") {
|
|
115
|
-
const value = argv[i + 1];
|
|
116
|
-
if (value === undefined) {
|
|
117
|
-
return { ...parsed, error: "argument --batch-size: expected one argument" };
|
|
118
|
-
}
|
|
119
|
-
const parsedInt = parseBatchSize(value);
|
|
120
|
-
if (parsedInt.error !== undefined) {
|
|
121
|
-
return { ...parsed, error: parsedInt.error };
|
|
122
|
-
}
|
|
123
|
-
parsed.batchSize = parsedInt.value ?? null;
|
|
124
|
-
i += 1;
|
|
125
|
-
}
|
|
126
|
-
else if (arg?.startsWith("--batch-size=")) {
|
|
127
|
-
const parsedInt = parseBatchSize(arg.slice("--batch-size=".length));
|
|
128
|
-
if (parsedInt.error !== undefined) {
|
|
129
|
-
return { ...parsed, error: parsedInt.error };
|
|
130
|
-
}
|
|
131
|
-
parsed.batchSize = parsedInt.value ?? null;
|
|
132
|
-
}
|
|
133
|
-
else if (arg === "--delay-ms") {
|
|
134
|
-
const value = argv[i + 1];
|
|
135
|
-
if (value === undefined) {
|
|
136
|
-
return { ...parsed, error: "argument --delay-ms: expected one argument" };
|
|
137
|
-
}
|
|
138
|
-
const parsedInt = parseNonNegInt(value, "--delay-ms");
|
|
139
|
-
if (parsedInt.error !== undefined) {
|
|
140
|
-
return { ...parsed, error: parsedInt.error };
|
|
141
|
-
}
|
|
142
|
-
parsed.delayMs = parsedInt.value ?? null;
|
|
143
|
-
i += 1;
|
|
144
|
-
}
|
|
145
|
-
else if (arg?.startsWith("--delay-ms=")) {
|
|
146
|
-
const parsedInt = parseNonNegInt(arg.slice("--delay-ms=".length), "--delay-ms");
|
|
147
|
-
if (parsedInt.error !== undefined) {
|
|
148
|
-
return { ...parsed, error: parsedInt.error };
|
|
149
|
-
}
|
|
150
|
-
parsed.delayMs = parsedInt.value ?? null;
|
|
151
|
-
}
|
|
152
|
-
else if (arg === "--sample-limit") {
|
|
153
|
-
const value = argv[i + 1];
|
|
154
|
-
if (value === undefined) {
|
|
155
|
-
return { ...parsed, error: "argument --sample-limit: expected one argument" };
|
|
156
|
-
}
|
|
157
|
-
const parsedInt = parseNonNegInt(value, "--sample-limit");
|
|
158
|
-
if (parsedInt.error !== undefined) {
|
|
159
|
-
return { ...parsed, error: parsedInt.error };
|
|
160
|
-
}
|
|
161
|
-
parsed.sampleLimit = parsedInt.value ?? null;
|
|
162
|
-
i += 1;
|
|
163
|
-
}
|
|
164
|
-
else if (arg?.startsWith("--sample-limit=")) {
|
|
165
|
-
const parsedInt = parseNonNegInt(arg.slice("--sample-limit=".length), "--sample-limit");
|
|
166
|
-
if (parsedInt.error !== undefined) {
|
|
167
|
-
return { ...parsed, error: parsedInt.error };
|
|
168
|
-
}
|
|
169
|
-
parsed.sampleLimit = parsedInt.value ?? null;
|
|
170
|
-
}
|
|
171
|
-
else if (arg === "--project-root") {
|
|
172
|
-
const value = argv[i + 1];
|
|
173
|
-
if (value === undefined) {
|
|
174
|
-
return { ...parsed, error: "argument --project-root: expected one argument" };
|
|
175
|
-
}
|
|
176
|
-
parsed.projectRoot = value;
|
|
177
|
-
i += 1;
|
|
178
|
-
}
|
|
179
|
-
else if (arg?.startsWith("--project-root=")) {
|
|
180
|
-
parsed.projectRoot = arg.slice("--project-root=".length);
|
|
181
|
-
}
|
|
182
|
-
else if (arg === "--help" || arg === "-h") {
|
|
183
|
-
return parsed;
|
|
184
|
-
}
|
|
185
|
-
else if (arg === "--") {
|
|
186
|
-
}
|
|
187
|
-
else if (arg?.startsWith("-")) {
|
|
188
|
-
return { ...parsed, error: `unrecognized arguments: ${arg}` };
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
if (parsed.apply && !parsed.doMirror) {
|
|
192
|
-
return {
|
|
193
|
-
...parsed,
|
|
194
|
-
error: "--apply requires --mirror (Tier-1 label mirror / bootstrap mass-triage, #1423)",
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
if (parsed.reEnrich && !parsed.doMirror) {
|
|
198
|
-
return {
|
|
199
|
-
...parsed,
|
|
200
|
-
error: "--re-enrich requires --mirror (additive re-plan of already-stamped issues, #3197)",
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
if ((parsed.includeClosed ||
|
|
204
|
-
parsed.author !== null ||
|
|
205
|
-
parsed.batchSize !== null ||
|
|
206
|
-
parsed.delayMs !== null ||
|
|
207
|
-
parsed.sampleLimit !== null) &&
|
|
208
|
-
!parsed.doMirror) {
|
|
209
|
-
return {
|
|
210
|
-
...parsed,
|
|
211
|
-
error: "--include-closed / --author / --batch-size / --delay-ms / --sample-limit require --mirror (#3125 / #3129)",
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
// --ack-discovery is standalone (production entry for tip dismissal without dry-run).
|
|
215
|
-
// Combining with --mirror is allowed: ack runs first, then mirror proceeds.
|
|
216
|
-
if (parsed.ackDiscovery && (parsed.doList || parsed.doValidate) && !parsed.doMirror) {
|
|
217
|
-
return {
|
|
218
|
-
...parsed,
|
|
219
|
-
error: "--ack-discovery cannot combine with --list/--validate without --mirror",
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
return parsed;
|
|
223
|
-
}
|
|
224
|
-
/** Run the CLI and return the process exit code. */
|
|
225
|
-
export function run(argv, _options = {}) {
|
|
226
|
-
const args = parseArgs(argv);
|
|
227
|
-
if (args.error !== undefined) {
|
|
228
|
-
process.stderr.write(`ERR: ${args.error}\n`);
|
|
229
|
-
return 2;
|
|
230
|
-
}
|
|
231
|
-
const projectRoot = resolve(args.projectRoot);
|
|
232
|
-
try {
|
|
233
|
-
const st = statSync(projectRoot);
|
|
234
|
-
if (!st.isDirectory()) {
|
|
235
|
-
process.stderr.write(`ERR: --project-root ${projectRoot} does not exist or is not a directory.\n`);
|
|
236
|
-
return 2;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
process.stderr.write(`ERR: --project-root ${projectRoot} does not exist or is not a directory.\n`);
|
|
241
|
-
return 2;
|
|
242
|
-
}
|
|
243
|
-
if (args.doValidate) {
|
|
244
|
-
const result = validateProject(projectRoot);
|
|
245
|
-
if (result.stdout.length > 0) {
|
|
246
|
-
process.stdout.write(result.stdout);
|
|
247
|
-
}
|
|
248
|
-
if (result.stderr.length > 0) {
|
|
249
|
-
process.stderr.write(result.stderr);
|
|
250
|
-
}
|
|
251
|
-
return result.code;
|
|
252
|
-
}
|
|
253
|
-
// #3124: production entry for operator ack (dismiss tip without dry-run).
|
|
254
|
-
if (args.ackDiscovery) {
|
|
255
|
-
try {
|
|
256
|
-
recordMirrorDiscoveryAcked(projectRoot);
|
|
257
|
-
const statePresent = mirrorDiscoveryStateExists(projectRoot);
|
|
258
|
-
if (args.json) {
|
|
259
|
-
process.stdout.write(`${JSON.stringify({ ok: true, ack_discovery: true, projectRoot, statePresent }, null, 2)}\n`);
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
process.stdout.write("[deft triage] SCM label-mirror discovery tip acknowledged " +
|
|
263
|
-
`(state ${statePresent ? "persisted" : "missing"}) — ` +
|
|
264
|
-
"will not re-surface until state is cleared.\n");
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch (err) {
|
|
268
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
269
|
-
process.stderr.write(`ERR: failed to record discovery ack: ${msg}\n`);
|
|
270
|
-
return 1;
|
|
271
|
-
}
|
|
272
|
-
if (!args.doMirror) {
|
|
273
|
-
return 0;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (args.doMirror) {
|
|
277
|
-
process.stderr.write(`${CLASSIFY_MIRROR_WITHDRAWN_MESSAGE}\n`);
|
|
278
|
-
return CLASSIFY_MIRROR_WITHDRAWN_EXIT_CODE;
|
|
279
|
-
}
|
|
280
|
-
// Default / --list: print effective rules
|
|
281
|
-
process.stdout.write(listProject(projectRoot));
|
|
282
|
-
return 0;
|
|
283
|
-
}
|
|
284
|
-
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
285
|
-
process.exit(run(process.argv.slice(2)));
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=triage-classify.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
interface Parsed {
|
|
3
|
-
projectRoot: string;
|
|
4
|
-
repo: string | null;
|
|
5
|
-
issues: number[];
|
|
6
|
-
concurrency: number;
|
|
7
|
-
json: boolean;
|
|
8
|
-
error?: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function parseArgs(argv: string[]): Parsed;
|
|
11
|
-
export declare function run(argv: string[]): Promise<number>;
|
|
12
|
-
export declare function main(argv: string[]): Promise<number>;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=triage-evaluate.d.ts.map
|