@joshuafolkken/kit 1.1514.0 → 1.2114.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/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { command_memory } from '#scripts/gate/command-memory'
|
|
3
4
|
import { core_budget } from '#scripts/gate/core-budget'
|
|
4
5
|
import { unit_worker_share } from '#scripts/test/unit-worker-share'
|
|
5
6
|
import { execa } from 'execa'
|
|
@@ -18,6 +19,11 @@ import { execa } from 'execa'
|
|
|
18
19
|
// being rewritten around it — and a second copy of the claim-run-release dance is the clone
|
|
19
20
|
// `CLAUDE.md` prohibits. The weight is the caller's, passed on the command line beside the command, so
|
|
20
21
|
// the reservation these two conservative numbers stand for lives at the one place a person reads them.
|
|
22
|
+
//
|
|
23
|
+
// **The memory is read off the command, not left at zero** (joshuafolkken/kit#4582): a lane wrapped a
|
|
24
|
+
// four-worker typed eslint here and the 12 GB it held was admitted beside four other lanes. The
|
|
25
|
+
// wrapped command's tool and worker count give its `MEMORY_MB` (`command-memory.ts`); `--memory <MB>`
|
|
26
|
+
// overrides that estimate.
|
|
21
27
|
|
|
22
28
|
// `process.argv` is [runner, script, ...arguments].
|
|
23
29
|
const FIRST_ARGUMENT_INDEX = 2
|
|
@@ -30,24 +36,83 @@ const FAIL_EXIT_CODE = 1
|
|
|
30
36
|
// cumulative sum and let a later reservation admit past the budget the ledger exists to hold.
|
|
31
37
|
const MIN_WEIGHT = 1
|
|
32
38
|
|
|
39
|
+
const MEMORY_FLAG = '--memory'
|
|
40
|
+
// `--memory <MB>`: the flag and its value.
|
|
41
|
+
const MEMORY_OPTION_LENGTH = 2
|
|
42
|
+
// An explicit `--memory` claims at least one MB; zero is the absence the estimate already stands for.
|
|
43
|
+
const MIN_MEMORY_MB = 1
|
|
44
|
+
// An argument that is one shell word with no quoting.
|
|
45
|
+
const PLAIN_WORD = /^[\w./=:@%+,-]+$/u
|
|
46
|
+
// A single quote inside a single-quoted word: close, escaped quote, reopen.
|
|
47
|
+
const ESCAPED_QUOTE = String.raw`'\''`
|
|
48
|
+
|
|
33
49
|
interface ReservedCommand {
|
|
34
50
|
weight: number
|
|
51
|
+
// The explicit `--memory <MB>`, which overrides the estimate read off the command.
|
|
52
|
+
memory_mb: number | undefined
|
|
35
53
|
command: ReadonlyArray<string>
|
|
36
54
|
}
|
|
37
55
|
|
|
38
|
-
|
|
39
|
-
|
|
56
|
+
function is_integer_from(value: number, floor: number): boolean {
|
|
57
|
+
return Number.isSafeInteger(value) && value >= floor
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// The options between the weight and the separator: none, or `--memory <MB>` with a positive integer.
|
|
61
|
+
// `undefined` is a usage error.
|
|
62
|
+
function parse_memory(
|
|
63
|
+
options: ReadonlyArray<string>,
|
|
64
|
+
): { memory_mb: number | undefined } | undefined {
|
|
65
|
+
if (options.length === 0) return { memory_mb: undefined }
|
|
66
|
+
|
|
67
|
+
const memory_mb = Number(options[1])
|
|
68
|
+
const is_memory_option = options.length === MEMORY_OPTION_LENGTH && options[0] === MEMORY_FLAG
|
|
69
|
+
|
|
70
|
+
return is_memory_option && is_integer_from(memory_mb, MIN_MEMORY_MB) ? { memory_mb } : undefined
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// `<weight> [--memory <MB>] -- <command> [args...]`. `undefined` is a usage error: a missing
|
|
74
|
+
// separator, a weight that is not an integer of at least one core, a malformed `--memory`, or nothing
|
|
75
|
+
// to run.
|
|
40
76
|
function parse_arguments(argv: ReadonlyArray<string>): ReservedCommand | undefined {
|
|
41
77
|
const NOT_FOUND = -1
|
|
42
78
|
const separator = argv.indexOf(COMMAND_SEPARATOR)
|
|
43
79
|
const weight = Number(argv[WEIGHT_INDEX])
|
|
44
|
-
const
|
|
80
|
+
const memory = parse_memory(argv.slice(WEIGHT_INDEX + 1, Math.max(separator, 0)))
|
|
81
|
+
const command = argv.slice(separator + 1)
|
|
45
82
|
|
|
46
|
-
if (separator === NOT_FOUND || !
|
|
83
|
+
if (separator === NOT_FOUND || !is_integer_from(weight, MIN_WEIGHT)) return undefined
|
|
47
84
|
|
|
48
|
-
|
|
85
|
+
return memory !== undefined && command.length > 0 ? { weight, ...memory, command } : undefined
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// An argument as one shell word: a plain one as written, anything else single-quoted. **The estimate
|
|
89
|
+
// re-reads the command as a shell line**, so `git commit -m "a; eslint ."` joined bare would be cut at
|
|
90
|
+
// the `;` and reserved as an eslint run.
|
|
91
|
+
function shell_word(argument: string): string {
|
|
92
|
+
if (PLAIN_WORD.test(argument)) return argument
|
|
93
|
+
|
|
94
|
+
return `'${argument.split("'").join(ESCAPED_QUOTE)}'`
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// What the claim carries to the ledger: the command named on the waiting line, and the memory it
|
|
98
|
+
// holds — the explicit `--memory`, else the estimate read off the command (`command-memory.ts`), else
|
|
99
|
+
// none, the 0 MB a command the table does not know counted before.
|
|
100
|
+
function reservation_options(parsed: ReservedCommand): {
|
|
101
|
+
command: string
|
|
102
|
+
memory_mb: number | undefined
|
|
103
|
+
} {
|
|
104
|
+
const command = parsed.command.map((argument) => shell_word(argument)).join(' ')
|
|
105
|
+
|
|
106
|
+
return { command, memory_mb: parsed.memory_mb ?? command_memory.estimated_memory_mb(command) }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// The directory the caller typed the command in. **`pnpm josh` runs from the package root**, so without
|
|
110
|
+
// this a wrapped `eslint rules/a.ts` typed in `scripts/` would lint from the root and match nothing;
|
|
111
|
+
// pnpm records the caller's directory in `INIT_CWD` (joshuafolkken/kit#5147).
|
|
112
|
+
function command_directory(): string {
|
|
113
|
+
const initial = process.env['INIT_CWD']
|
|
49
114
|
|
|
50
|
-
return
|
|
115
|
+
return initial === undefined || initial === '' ? process.cwd() : initial
|
|
51
116
|
}
|
|
52
117
|
|
|
53
118
|
// `stdio: 'inherit'` so the command's own progress reaches the push, and `reject: false` so a failing
|
|
@@ -55,7 +120,11 @@ function parse_arguments(argv: ReadonlyArray<string>): ReservedCommand | undefin
|
|
|
55
120
|
// `with_core_reservation`'s `finally` on either path.
|
|
56
121
|
async function run_command(command: ReadonlyArray<string>): Promise<number> {
|
|
57
122
|
const [file = '', ...args] = command
|
|
58
|
-
const result = await execa(file, args, {
|
|
123
|
+
const result = await execa(file, args, {
|
|
124
|
+
cwd: command_directory(),
|
|
125
|
+
stdio: 'inherit',
|
|
126
|
+
reject: false,
|
|
127
|
+
})
|
|
59
128
|
|
|
60
129
|
return result.exitCode ?? FAIL_EXIT_CODE
|
|
61
130
|
}
|
|
@@ -64,7 +133,9 @@ async function run_reserved(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
64
133
|
const parsed = parse_arguments(argv)
|
|
65
134
|
|
|
66
135
|
if (parsed === undefined) {
|
|
67
|
-
process.stderr.write(
|
|
136
|
+
process.stderr.write(
|
|
137
|
+
'reserved-run: usage: reserved-run <weight> [--memory <MB>] -- <command> [args...]\n',
|
|
138
|
+
)
|
|
68
139
|
|
|
69
140
|
return FAIL_EXIT_CODE
|
|
70
141
|
}
|
|
@@ -78,7 +149,7 @@ async function run_reserved(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
78
149
|
return await core_budget.with_core_reservation(
|
|
79
150
|
parsed.weight,
|
|
80
151
|
async () => await run_command(parsed.command),
|
|
81
|
-
|
|
152
|
+
reservation_options(parsed),
|
|
82
153
|
)
|
|
83
154
|
}
|
|
84
155
|
|
|
@@ -86,6 +157,6 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
|
86
157
|
process.exitCode = await run_reserved(process.argv.slice(FIRST_ARGUMENT_INDEX))
|
|
87
158
|
}
|
|
88
159
|
|
|
89
|
-
const reserved_run = { parse_arguments, run_reserved }
|
|
160
|
+
const reserved_run = { parse_arguments, reservation_options, run_reserved }
|
|
90
161
|
|
|
91
162
|
export { reserved_run }
|
|
@@ -5,12 +5,15 @@
|
|
|
5
5
|
# A hook command in `.claude/settings.json` / `.codex/hooks.json` only moves to the project root
|
|
6
6
|
# (`scripts/init/hook-launch.ts`) and calls this script, so everything every hook shares lives here once:
|
|
7
7
|
#
|
|
8
|
-
# - The
|
|
9
|
-
#
|
|
8
|
+
# - The git location variables a git hook exports are cleared when the checkout resolves without
|
|
9
|
+
# them, so the hook's own git calls act on the checkout it stands in, and kept when the git metadata
|
|
10
|
+
# lives outside the work tree. `git` starts only when one of them is set — a hook runs on every tool
|
|
11
|
+
# call (joshuafolkken/kit#3946, joshuafolkken/kit#4187). The list is `GIT_LOCATION_VARIABLES`
|
|
12
|
+
# (`scripts/git/git-location-environment.ts`), held to it by `run-hook.test.ts`.
|
|
10
13
|
# - The pre-built bundle `dist/hooks/<name>.js` runs once its gate passes; otherwise the live source
|
|
11
14
|
# runs through josh, whose command is the name with its first `-` turned into `:`
|
|
12
15
|
# (`pretool-guard` → `pretool:guard`).
|
|
13
|
-
# - In kit's own checkout the gate is `hook-bundle-ready.ts`, which rebuilds stale bundles
|
|
16
|
+
# - In kit's own checkout the gate is the kit-only `tools/hooks/hook-bundle-ready.ts`, which rebuilds stale bundles
|
|
14
17
|
# (joshuafolkken/kit#2984) and then runs the bundle — or the josh fallback — itself, so a hook call
|
|
15
18
|
# starts node once (joshuafolkken/kit#3327). In an installed package it is a presence check: the
|
|
16
19
|
# published bundles cannot be stale against a source the consumer never edits, and Node strips no
|
|
@@ -19,22 +22,43 @@
|
|
|
19
22
|
# `dirname`, and `node` replaces this shell through `exec` rather than running beside it.
|
|
20
23
|
# - An `if`/`else`, never `&&`/`||`: a guard's refusal is a non-zero exit, and a chain would read it as
|
|
21
24
|
# a missing bundle and run the hook twice.
|
|
25
|
+
# - A hook launched inside one of Claude Code's own worktrees (`EnterWorktree`, an
|
|
26
|
+
# `isolation: "worktree"` subagent) runs in that worktree. Claude Code keeps `CLAUDE_PROJECT_DIR` on
|
|
27
|
+
# the main checkout there, so the prefix lands on it and hands over where the hook was launched in
|
|
28
|
+
# `JOSH_HOOK_CWD` (joshuafolkken/kit#4617). The code still comes from the project root — a fresh
|
|
29
|
+
# worktree has no install and no bundles — so only the working directory moves.
|
|
22
30
|
|
|
23
31
|
hook_name=$1
|
|
24
32
|
shift
|
|
25
33
|
case $0 in
|
|
26
|
-
|
|
27
|
-
|
|
34
|
+
/*) hooks_dir=${0%/*} ;;
|
|
35
|
+
*/*) hooks_dir=$PWD/${0%/*} ;;
|
|
36
|
+
*) hooks_dir=$PWD ;;
|
|
28
37
|
esac
|
|
29
38
|
package_dir="$hooks_dir/../.."
|
|
30
39
|
bundle="$package_dir/dist/hooks/$hook_name.js"
|
|
31
40
|
josh_command="${hook_name%%-*}:${hook_name#*-}"
|
|
32
41
|
|
|
42
|
+
worktrees_dir=$PWD/.claude/worktrees/
|
|
43
|
+
case $JOSH_HOOK_CWD in
|
|
44
|
+
"$worktrees_dir"?*)
|
|
45
|
+
worktree_path=${JOSH_HOOK_CWD#"$worktrees_dir"}
|
|
46
|
+
cd "$worktrees_dir${worktree_path%%/*}" || exit
|
|
47
|
+
;;
|
|
48
|
+
*) ;;
|
|
49
|
+
esac
|
|
50
|
+
|
|
51
|
+
location_variables='GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE'
|
|
52
|
+
if [ -n "$GIT_ALTERNATE_OBJECT_DIRECTORIES$GIT_COMMON_DIR$GIT_DIR$GIT_INDEX_FILE$GIT_NAMESPACE$GIT_OBJECT_DIRECTORY$GIT_WORK_TREE" ] &&
|
|
53
|
+
(unset $location_variables && git rev-parse --show-toplevel >/dev/null 2>&1); then
|
|
54
|
+
unset $location_variables
|
|
55
|
+
fi
|
|
56
|
+
|
|
33
57
|
case $0 in
|
|
34
58
|
*node_modules/*)
|
|
35
59
|
if [ -d "$package_dir/dist/hooks" ]; then exec node "$bundle" "$@"; else exec node "$package_dir/dist/josh.js" "$josh_command" "$@"; fi
|
|
36
60
|
;;
|
|
37
61
|
*)
|
|
38
|
-
exec node --disable-warning=ExperimentalWarning "$
|
|
62
|
+
exec node --disable-warning=ExperimentalWarning "$package_dir/tools/hooks/hook-bundle-ready.ts" "$hook_name" "$josh_command" "$@"
|
|
39
63
|
;;
|
|
40
64
|
esac
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
2
|
+
import { hook_decision } from '#scripts/josh/hook-decision'
|
|
3
|
+
|
|
4
|
+
// The two most-refused Bash rows, `file-body` and `piped-verification`, delivered ahead of the call
|
|
5
|
+
// that would break them. A refusal teaches the rule only after the call was composed, and each
|
|
6
|
+
// refusal is a round trip spent rewriting it (joshuafolkken/kit#3996). The first Bash call of a
|
|
7
|
+
// session comes before any of those, so the hook that sees it carries the two rules as a notice.
|
|
8
|
+
//
|
|
9
|
+
// **The rows themselves are unchanged.** They still refuse on every occurrence; this only puts their
|
|
10
|
+
// text in front of the first call, the way `step-zero-notice.ts` delivers Step 0 at the first edit.
|
|
11
|
+
//
|
|
12
|
+
// **Once per session**, on a stamp keyed by the transcript. A stamp that cannot be written stays
|
|
13
|
+
// silent rather than repeating the notice on every call.
|
|
14
|
+
const STAMP_PREFIX = 'josh-shell-rules-notice-'
|
|
15
|
+
|
|
16
|
+
const NOTICE =
|
|
17
|
+
'Shell rules: change an existing file with Edit or Write, never a script or heredoc that writes it (file-edits.md); run a josh check with no pipe or under `set -o pipefail`, never `| head` (output-bounds.md).'
|
|
18
|
+
|
|
19
|
+
const STAMP = hook_decision.create_refusal_stamp(STAMP_PREFIX)
|
|
20
|
+
|
|
21
|
+
function notice(raw_payload: string): string | undefined {
|
|
22
|
+
const payload = hook_decision.parse_hook_payload(raw_payload)
|
|
23
|
+
|
|
24
|
+
if (payload?.tool_name !== cost_blocks.BASH_TOOL) return undefined
|
|
25
|
+
|
|
26
|
+
const target = STAMP.path(payload.transcript_path)
|
|
27
|
+
|
|
28
|
+
if (STAMP.last_ms(target) !== hook_decision.NEVER_MS || !STAMP.record(target, Date.now())) {
|
|
29
|
+
return undefined
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return NOTICE
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const shell_rules_notice = { NOTICE, notice, stamp_path: STAMP.path }
|
|
36
|
+
|
|
37
|
+
export { shell_rules_notice }
|
|
@@ -58,6 +58,11 @@ function is_candidate(raw_payload: string, root: string): string | undefined {
|
|
|
58
58
|
return has_runtime_file ? payload.transcript_path : undefined
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
// Whether the payload edits a runtime file under `root` — the edit Step 0 and the lane plan precede.
|
|
62
|
+
function is_runtime_edit(raw_payload: string, root: string = process.cwd()): boolean {
|
|
63
|
+
return is_candidate(raw_payload, root) !== undefined
|
|
64
|
+
}
|
|
65
|
+
|
|
61
66
|
function notice(raw_payload: string, root: string = process.cwd()): string | undefined {
|
|
62
67
|
const transcript = is_candidate(raw_payload, root)
|
|
63
68
|
|
|
@@ -72,6 +77,6 @@ function notice(raw_payload: string, root: string = process.cwd()): string | und
|
|
|
72
77
|
return NOTICE
|
|
73
78
|
}
|
|
74
79
|
|
|
75
|
-
const step_zero_notice = { NOTICE, notice, stamp_path: STAMP.path }
|
|
80
|
+
const step_zero_notice = { NOTICE, is_runtime_edit, notice, stamp_path: STAMP.path }
|
|
76
81
|
|
|
77
82
|
export { step_zero_notice }
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { git_gh_repo } from '#scripts/gh/git-gh-repo'
|
|
2
2
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
3
|
-
import { issue_cite_cli } from '#scripts/issue/issue-cite-cli'
|
|
4
3
|
import { session_cite } from '#scripts/issue/session-cite'
|
|
5
4
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
5
|
+
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
6
6
|
import { telegram_test } from '#scripts/notify/telegram-test'
|
|
7
7
|
import type { CliValues } from '#scripts/notify/telegram-test-logic'
|
|
8
|
-
import { issue_citation } from '#scripts/rules/issue-citation'
|
|
9
8
|
import { stop_rules, type StopAction, type StopOutcome } from '#scripts/rules/stop-rules'
|
|
10
9
|
import { run_hold } from '#scripts/run/hold/run-hold'
|
|
11
10
|
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
@@ -14,9 +13,8 @@ import { run_hold_session } from '#scripts/run/hold/run-hold-session'
|
|
|
14
13
|
type NotifyAction = Extract<StopAction, { kind: 'notify' }>
|
|
15
14
|
|
|
16
15
|
// The `Stop` hook running the operations whose answer is fixed (joshuafolkken/kit#3919): the
|
|
17
|
-
// `confirmation` notify
|
|
18
|
-
// `josh
|
|
19
|
-
// launches would spend most of the hook's 20-second budget. What each did reaches the person as a
|
|
16
|
+
// `confirmation` notify and the hold release, through the very calls `josh notify` and
|
|
17
|
+
// `josh run:release` make — in process, since two `pnpm` launches would spend most of the hook's 20-second budget. What each did reaches the person as a
|
|
20
18
|
// `systemMessage`; one that did not take falls back to the refusal it replaced (`stop_rules.fallback_reason`).
|
|
21
19
|
|
|
22
20
|
const SUCCESS_EXIT_CODE = 0
|
|
@@ -108,40 +106,11 @@ async function release(issue: string): Promise<string | undefined> {
|
|
|
108
106
|
return code === SUCCESS_EXIT_CODE ? '🔓 stop:guard released the run:hold record.' : undefined
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
// Every line or none: a citation with a number missing is the half-fix the refusal exists to avoid.
|
|
112
|
-
async function cite(references: ReadonlyArray<string>): Promise<string | undefined> {
|
|
113
|
-
const cited = await issue_cite_cli.cite(issue_citation.cite_arguments(references))
|
|
114
|
-
if (cited === undefined || cited.failures.length > 0) return undefined
|
|
115
|
-
|
|
116
|
-
return ['Issue citations:', ...cited.lines].join(NOTICE_SEPARATOR)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
109
|
// An action's line for the person, or `undefined` when it did not take.
|
|
120
110
|
async function run_action(action: StopAction): Promise<string | undefined> {
|
|
121
111
|
if (action.kind === 'notify') return await notify(action)
|
|
122
|
-
if (action.kind === 'release') return await release(action.issue)
|
|
123
|
-
|
|
124
|
-
return await cite(action.references)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// **The hook's stdout is the decision envelope, so nothing else may reach it**: the reused calls report
|
|
128
|
-
// on stdout (`josh run:release`'s verdict token, the notify's sent line) and are sent to stderr instead.
|
|
129
|
-
type StreamWrite = typeof process.stdout.write
|
|
130
112
|
|
|
131
|
-
|
|
132
|
-
process.stdout.write = stream_write
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
async function on_stderr<T>(work: () => Promise<T>): Promise<T> {
|
|
136
|
-
const saved = { write: process.stdout.write.bind(process.stdout) }
|
|
137
|
-
|
|
138
|
-
set_stdout_write(process.stderr.write.bind(process.stderr))
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
return await work()
|
|
142
|
-
} finally {
|
|
143
|
-
set_stdout_write(saved.write)
|
|
144
|
-
}
|
|
113
|
+
return await release(action.issue)
|
|
145
114
|
}
|
|
146
115
|
|
|
147
116
|
// A throw is an action that did not take, the same as one that answered it had failed.
|
|
@@ -160,7 +129,7 @@ function is_notice(notice: string | undefined): notice is string {
|
|
|
160
129
|
// In order, one at a time: the notify reports the hold the release then ends. The first failure is the
|
|
161
130
|
// one refused with, as the rule order put it first.
|
|
162
131
|
async function settle(actions: ReadonlyArray<StopAction>): Promise<Settled> {
|
|
163
|
-
const notices = await
|
|
132
|
+
const notices = await stdout_on_stderr.run(
|
|
164
133
|
async () => await bounded_pool.bounded_map(actions, SEQUENTIAL, attempt),
|
|
165
134
|
)
|
|
166
135
|
const failed = actions.find((_action, index) => notices[index] === undefined)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
|
-
import { text } from 'node:stream/consumers'
|
|
3
2
|
import { fileURLToPath } from 'node:url'
|
|
4
3
|
import { agent_headless } from '#scripts/agent/agent-headless'
|
|
5
4
|
import { backlog_ready } from '#scripts/backlog/backlog-ready'
|
|
@@ -10,7 +9,7 @@ import { hook_decision } from '#scripts/josh/hook-decision'
|
|
|
10
9
|
import { session_language } from '#scripts/josh/session-language'
|
|
11
10
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
12
11
|
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
13
|
-
import {
|
|
12
|
+
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
14
13
|
import { lane_background } from '#scripts/rules/lane-background'
|
|
15
14
|
import { lane_park } from '#scripts/rules/lane-park'
|
|
16
15
|
import { last_prompt } from '#scripts/rules/last-prompt'
|
|
@@ -18,6 +17,7 @@ import { pre_gate_cut } from '#scripts/rules/pre-gate-cut'
|
|
|
18
17
|
import { stop_decision } from '#scripts/rules/stop-decision'
|
|
19
18
|
import { stop_rules, type StopContext, type StopOutcome } from '#scripts/rules/stop-rules'
|
|
20
19
|
import { tail_commands } from '#scripts/rules/tail-commands'
|
|
20
|
+
import { turn_filings } from '#scripts/rules/turn-filings'
|
|
21
21
|
import { run_carry } from '#scripts/run/carry/run-carry'
|
|
22
22
|
import { run_cut } from '#scripts/run/cut/run-cut'
|
|
23
23
|
import { run_cut_report } from '#scripts/run/cut/run-cut-report'
|
|
@@ -82,10 +82,10 @@ function transcript_tail(transcript_path: string): string {
|
|
|
82
82
|
return time_density_hook.read_tail(transcript)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
// An Issue was filed on this turn — the tail from the last prompt on. The count is `
|
|
86
|
-
// filing a guard refused is not counted, and one an earlier turn made does not stand this turn down.
|
|
85
|
+
// An Issue was filed on this turn — the tail from the last prompt on. The count is `turn_filings`', so
|
|
86
|
+
// a filing a guard refused is not counted, and one an earlier turn made does not stand this turn down.
|
|
87
87
|
function was_filed(tail: string): boolean {
|
|
88
|
-
return
|
|
88
|
+
return turn_filings.turn_filing_count(tail) > 0
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
// This turn ended at a cut — a record still `carried`, or this turn's `run:cut` relaunching a successor.
|
|
@@ -95,13 +95,13 @@ function is_cut_stop(tail: string): boolean {
|
|
|
95
95
|
if (run_cut.carried_cut_sync() !== undefined) return true
|
|
96
96
|
|
|
97
97
|
return tail_commands.answered(
|
|
98
|
-
|
|
98
|
+
turn_filings.current_turn(tail),
|
|
99
99
|
pre_gate_cut.takes_the_cut,
|
|
100
100
|
run_cut_report.RELAUNCHED_CUT_MARKER,
|
|
101
101
|
)
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
// The session language the refusal is written for — `
|
|
104
|
+
// The session language the refusal is written for — `respond_from_stdin` has already loaded the `.env`.
|
|
105
105
|
function session_lang(): string {
|
|
106
106
|
return session_language.resolve_session_lang().lang
|
|
107
107
|
}
|
|
@@ -129,7 +129,7 @@ async function build_context(
|
|
|
129
129
|
...(await hold_facts(tail)),
|
|
130
130
|
tree_clean: !(await run_hold.is_tree_dirty()),
|
|
131
131
|
message: payload_tail.message,
|
|
132
|
-
prompt: last_prompt.
|
|
132
|
+
prompt: last_prompt.person_prompt(tail),
|
|
133
133
|
answers_question: stop_decision.is_question(last_prompt.turn_prompt(tail)),
|
|
134
134
|
stop_hook_active: payload_tail.stop_hook_active,
|
|
135
135
|
cut_pending: is_cut_stop(tail),
|
|
@@ -139,6 +139,7 @@ async function build_context(
|
|
|
139
139
|
headless_refusals: stop_rules.count_headless_refusals(tail),
|
|
140
140
|
background_pending: lane_background.pending_background_ids(tail).length > 0,
|
|
141
141
|
agent_pending: lane_background.pending_agent_ids(tail).length > 0,
|
|
142
|
+
command_pending: lane_background.pending_command_ids(tail).length > 0,
|
|
142
143
|
handed_off: lane_handoff.is_handed_off(process.cwd()),
|
|
143
144
|
session_lang: session_lang(),
|
|
144
145
|
}
|
|
@@ -208,13 +209,18 @@ async function run_report_checks(): Promise<void> {
|
|
|
208
209
|
await run_stranded_detect.run_stranded_check()
|
|
209
210
|
}
|
|
210
211
|
|
|
211
|
-
|
|
212
|
-
// held or the hook acted on it (`stop-actions.ts`).
|
|
213
|
-
async function write_stop_decision(raw_payload: string): Promise<void> {
|
|
214
|
-
hook_decision.load_environment_file()
|
|
212
|
+
async function decided_envelope(raw_payload: string): Promise<string | undefined> {
|
|
215
213
|
await run_report_checks()
|
|
216
214
|
|
|
217
|
-
|
|
215
|
+
return await stop_actions.envelope_of(await outcome_of(raw_payload), session_lang())
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Nothing reaches stdout on an ordinary stop, so what the harness parses stays empty unless the stop is
|
|
219
|
+
// held or the hook acted on it (`stop-actions.ts`). The report checks print too — a strand's skipped
|
|
220
|
+
// notify line — and text ahead of the envelope makes the harness drop the refusal, as the #4091 child's
|
|
221
|
+
// lane-background block was (joshuafolkken/kit#4101), so everything before the write goes to stderr.
|
|
222
|
+
async function write_stop_decision(raw_payload: string): Promise<void> {
|
|
223
|
+
const envelope = await stdout_on_stderr.run(async () => await decided_envelope(raw_payload))
|
|
218
224
|
|
|
219
225
|
if (envelope === undefined) return
|
|
220
226
|
|
|
@@ -224,8 +230,7 @@ async function write_stop_decision(raw_payload: string): Promise<void> {
|
|
|
224
230
|
const stop_guard = { outcome_of, stop_outcome_for_payload }
|
|
225
231
|
|
|
226
232
|
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
227
|
-
|
|
228
|
-
else await write_stop_decision(await text(process.stdin))
|
|
233
|
+
await hook_decision.respond_from_stdin('stop:guard', write_stop_decision)
|
|
229
234
|
}
|
|
230
235
|
|
|
231
236
|
export { stop_guard, write_stop_decision }
|
|
@@ -49,8 +49,23 @@ const PLAIN_KIT_COMMANDS: ReadonlySet<string> = new Set(
|
|
|
49
49
|
'session:lang',
|
|
50
50
|
].map((command) => `${PNPM_JOSH_PREFIX}${command}`),
|
|
51
51
|
)
|
|
52
|
-
// The
|
|
53
|
-
|
|
52
|
+
// The root prefix kit wrote until joshuafolkken/kit#4187 moved the git location variables into the
|
|
53
|
+
// launcher. A consumer's file still carries it until its next sync, which replaces it with the current
|
|
54
|
+
// one. History, never edited; removable from kit 2.0.0.
|
|
55
|
+
const LOCATION_VARIABLES =
|
|
56
|
+
'GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE'
|
|
57
|
+
const ROOT_LOOKUP = 'git rev-parse --show-toplevel'
|
|
58
|
+
const LEGACY_ROOT_PREFIX = `if project_root="$(unset ${LOCATION_VARIABLES}; ${ROOT_LOOKUP} 2>/dev/null)"; then unset ${LOCATION_VARIABLES}; else project_root="$(${ROOT_LOOKUP})"; fi && cd "$project_root" && `
|
|
59
|
+
// The root prefix kit wrote until joshuafolkken/kit#4617 exported the launch directory for a worktree.
|
|
60
|
+
// History, never edited; removable from kit 2.0.0.
|
|
61
|
+
const PRE_WORKTREE_ROOT_PREFIX = `project_root="\${CLAUDE_PROJECT_DIR:-$( (unset ${LOCATION_VARIABLES}; ${ROOT_LOOKUP} 2>/dev/null) || ${ROOT_LOOKUP})}" && cd "$project_root" && `
|
|
62
|
+
// The values below are matched inside raw JSON text, so each root prefix is taken in its escaped form.
|
|
63
|
+
const ROOT_PREFIXES: ReadonlyArray<string> = [
|
|
64
|
+
hook_launch.PROJECT_ROOT_PREFIX,
|
|
65
|
+
PRE_WORKTREE_ROOT_PREFIX,
|
|
66
|
+
LEGACY_ROOT_PREFIX,
|
|
67
|
+
].map((prefix) => JSON.stringify(prefix).slice(1, -1))
|
|
68
|
+
const [PROJECT_ROOT_PREFIX = ''] = ROOT_PREFIXES
|
|
54
69
|
// Capture the value of every `"command"` field, escapes and all, so the rewrites below touch command
|
|
55
70
|
// values alone — never an echo reminder's prose or a `"description"` that merely mentions the string.
|
|
56
71
|
const COMMAND_FIELD = /("command":\s*")((?:[^"\\]|\\.)*)(")/gu
|
|
@@ -76,10 +91,13 @@ function rewrite_command_value(value: string): string {
|
|
|
76
91
|
}
|
|
77
92
|
|
|
78
93
|
// kit's own commands already start from the root (`hook-launch.ts`), and so does an already-rewritten
|
|
79
|
-
// value. The prefix
|
|
80
|
-
// behind the `cd` it depends on and a second
|
|
94
|
+
// value. The prefix — the current one or an earlier one — is taken off before the rewrite and the
|
|
95
|
+
// current one put back after it, so the install guard sits behind the `cd` it depends on and a second
|
|
96
|
+
// pass never doubles the prefix.
|
|
81
97
|
function without_root_prefix(value: string): string {
|
|
82
|
-
|
|
98
|
+
const prefix = ROOT_PREFIXES.find((candidate) => value.startsWith(candidate)) ?? ''
|
|
99
|
+
|
|
100
|
+
return value.slice(prefix.length)
|
|
83
101
|
}
|
|
84
102
|
|
|
85
103
|
function rewrite_hook_commands(content: string, is_codex = false): string {
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { GIT_LOCATION_VARIABLES } from '#scripts/git/git-location-environment'
|
|
2
|
-
|
|
3
1
|
// The shell command a Claude Code hook is launched with, so it starts without a `pnpm` wrapper — and,
|
|
4
2
|
// for a consumer, without the `dist/josh.js` dispatcher re-spawning `tsx` for the hook's `.ts`.
|
|
5
3
|
// Each hook is pre-built to its own `dist/hooks/<name>.js`
|
|
6
4
|
// (`scripts/build/build-hooks.ts`) and launched directly with `node`.
|
|
7
5
|
//
|
|
8
6
|
// **The command starts from the project root, never from wherever the session happens to be**.
|
|
9
|
-
// Every path after the prefix is relative, so a hook fired from a
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// (
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// the shell's own `unset` clears the variables rather than an `env` process, and that one lookup
|
|
19
|
-
// both finds the root and decides whether the variables stay — `git` starts once.
|
|
7
|
+
// Every path after the prefix is relative, so a hook fired from a subdirectory would otherwise miss its
|
|
8
|
+
// script. Claude Code names the root in `CLAUDE_PROJECT_DIR`, so its hooks start no `git` to find it;
|
|
9
|
+
// Codex runs a hook in the session's directory and names no root, so there the root is git's — asked
|
|
10
|
+
// first without the git location variables a git hook leaks, since a relative or bare `GIT_DIR` read
|
|
11
|
+
// from a subdirectory names the wrong work tree, and with them only when the checkout does not resolve
|
|
12
|
+
// without them (its metadata lives outside the work tree). A lookup that fails ends the command before
|
|
13
|
+
// the launcher (joshuafolkken/kit#4187). Inside one of Claude Code's own worktrees `CLAUDE_PROJECT_DIR`
|
|
14
|
+
// still names the main checkout, so the prefix exports where the hook was launched as `JOSH_HOOK_CWD`
|
|
15
|
+
// and the launcher moves the hook's working directory into that worktree (joshuafolkken/kit#4617).
|
|
20
16
|
//
|
|
21
|
-
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh`): the
|
|
22
|
-
// the live-source fallback live there once, so
|
|
17
|
+
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh`): the git location
|
|
18
|
+
// variables a git hook exports, the bundle-ready gate and the live-source fallback live there once, so
|
|
19
|
+
// each hook command names only its hook. The consumer rewrite (`hook-command-rewrite.ts`) keeps this
|
|
20
|
+
// prefix, so both sides stay one mechanism for Claude Code and Codex alike.
|
|
21
|
+
|
|
22
|
+
import { GIT_LOCATION_VARIABLES } from '#scripts/git/git-location-environment'
|
|
23
23
|
|
|
24
24
|
const HOOK_DIST_DIR = 'dist/hooks'
|
|
25
25
|
const RUN_HOOK_SCRIPT = 'scripts/hooks/run-hook.sh'
|
|
26
|
-
const LOCATION_VARIABLES = GIT_LOCATION_VARIABLES.join(' ')
|
|
27
26
|
const ROOT_LOOKUP = 'git rev-parse --show-toplevel'
|
|
28
|
-
const
|
|
27
|
+
const CODEX_ROOT = `$( (unset ${GIT_LOCATION_VARIABLES.join(' ')}; ${ROOT_LOOKUP} 2>/dev/null) || ${ROOT_LOOKUP})`
|
|
28
|
+
const PROJECT_ROOT_PREFIX = `export JOSH_HOOK_CWD="$PWD" && project_root="\${CLAUDE_PROJECT_DIR:-${CODEX_ROOT}}" && cd "$project_root" && `
|
|
29
29
|
|
|
30
30
|
// `name` is the hook's bundle under `dist/hooks` without `.js` (e.g. `pretool-guard`), followed by any
|
|
31
31
|
// arguments it takes (e.g. `codex-hook-adapter pretool`).
|
|
@@ -2,7 +2,6 @@ import { readFileSync } from 'node:fs'
|
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { json_format } from '#scripts/config-merge/json-format'
|
|
4
4
|
import { string_array_schema, vscode_settings_schema } from '#scripts/lib/schemas'
|
|
5
|
-
import { basic_path_migration } from './basic-path-migration'
|
|
6
5
|
import { init_logic } from './init-logic'
|
|
7
6
|
import { package_path, PROJECT_ROOT } from './init-paths'
|
|
8
7
|
import type { ProjectShape } from './project-profile'
|
|
@@ -20,9 +19,6 @@ interface FileAction {
|
|
|
20
19
|
dest: string
|
|
21
20
|
create: () => string
|
|
22
21
|
merge?: (existing: string) => string
|
|
23
|
-
// A merge that only migrates a kit-written line, for a file kit otherwise leaves to the project:
|
|
24
|
-
// when it changes nothing, the file is reported with the sample to add, as one with no merge is.
|
|
25
|
-
should_show_sample_when_unchanged?: boolean
|
|
26
22
|
}
|
|
27
23
|
|
|
28
24
|
function read_package_file(relative_path: string): string {
|
|
@@ -215,8 +211,6 @@ function build_basic_actions(shape: ProjectShape): ReadonlyArray<FileAction> {
|
|
|
215
211
|
dest: BASIC_PRETTIER_CONFIG,
|
|
216
212
|
create: () =>
|
|
217
213
|
"import { config } from '@joshuafolkken/kit/prettier/basic'\n\nexport default config\n",
|
|
218
|
-
merge: (existing) => basic_path_migration.migrate_basic_paths(existing),
|
|
219
|
-
should_show_sample_when_unchanged: true,
|
|
220
214
|
})
|
|
221
215
|
}
|
|
222
216
|
|