@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
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { time_shell } from './time-shell'
|
|
2
|
+
import type { ToolCall } from './time-tool-call'
|
|
3
|
+
|
|
4
|
+
// Which calls are a search, the one answer the investigation guard and the batching guard both read.
|
|
5
|
+
// A search carries no file text but costs a turn, so it is what a run issues one per turn while it
|
|
6
|
+
// locates the next edit.
|
|
7
|
+
|
|
8
|
+
const SEARCH_COMMANDS: ReadonlyArray<string> = ['fd', 'find', 'grep', 'rg']
|
|
9
|
+
const SEARCH_LABELS: ReadonlySet<string> = new Set(
|
|
10
|
+
SEARCH_COMMANDS.map((command) => time_shell.bash_label(command)),
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
// A search chain also prints the lines a search found, so `sed` (read-only) joins it: `grep` → `sed`
|
|
14
|
+
// was measured the second-largest single-call pair in lane children.
|
|
15
|
+
const CHAIN_COMMANDS: ReadonlyArray<string> = [...SEARCH_COMMANDS, 'sed']
|
|
16
|
+
const CHAIN_LABELS: ReadonlySet<string> = new Set(
|
|
17
|
+
CHAIN_COMMANDS.map((command) => time_shell.bash_label(command)),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
type SearchFacts = Pick<ToolCall, 'label' | 'is_bundleable' | 'may_write' | 'is_writing'>
|
|
21
|
+
|
|
22
|
+
// `may_write` over-calls, as the investigation guard's refusal test must.
|
|
23
|
+
function is_read_only_search(call: SearchFacts): boolean {
|
|
24
|
+
return SEARCH_LABELS.has(call.label) && call.is_bundleable && !call.may_write
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// `may_write` holds for every `sed`, so the chain asks `is_writing` — certain, and false for `sed -n`.
|
|
28
|
+
function is_search_chain_call(call: SearchFacts): boolean {
|
|
29
|
+
return CHAIN_LABELS.has(call.label) && call.is_bundleable && !call.is_writing
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const time_search_call = {
|
|
33
|
+
is_read_only_search,
|
|
34
|
+
is_search_chain_call,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type { SearchFacts }
|
|
38
|
+
export { time_search_call }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
2
|
-
import { canonical_command } from '#scripts/josh/josh-
|
|
2
|
+
import { canonical_command } from '#scripts/josh/josh-aliases'
|
|
3
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
4
4
|
|
|
5
5
|
// Reading a shell command well enough to name what it ran.
|
|
@@ -53,10 +53,26 @@ const CHAIN_PATTERN = /&&|\|\||;|\n/u
|
|
|
53
53
|
// body is not shell syntax at all — an `it's` there is prose — so it is removed before the quotes are
|
|
54
54
|
// paired, keeping the rest of its marker line (`cat <<EOF > f && git add f`) where the shell reads it.
|
|
55
55
|
// Without both, a stray quote paired with one much later and erased every command between them.
|
|
56
|
-
|
|
56
|
+
//
|
|
57
|
+
// **A `$(…)` inside double quotes is one atom of the span** (joshuafolkken/kit#4525): the quotes in
|
|
58
|
+
// `"$(gh issue create --title "x")"` belong to the substitution, so the span closes at the outer `"`
|
|
59
|
+
// rather than at the first inner one, which left the substitution cut in half. A `$` is read one way
|
|
60
|
+
// only — the atom where one follows, a character where none does — because a `$` either could take
|
|
61
|
+
// made an unclosed `"` followed by many `$(…)` try every split of them before failing.
|
|
62
|
+
const SUBSTITUTION_ATOM = /\$\([^()]*\)/u
|
|
63
|
+
const LONE_DOLLAR = /\$(?!\([^()]*\))/u
|
|
64
|
+
const QUOTED_SPAN_PATTERN = new RegExp(
|
|
65
|
+
String.raw`\\[\s\S]|'[^']*'|"(?:\\[\s\S]|${SUBSTITUTION_ATOM.source}|${LONE_DOLLAR.source}|[^"\\$])*"`,
|
|
66
|
+
'gu',
|
|
67
|
+
)
|
|
57
68
|
const HEREDOC_MARKER = /(?<!<)<<-?\s*(['"]?)(\w+)\1/u
|
|
58
69
|
const HEREDOC_DELIMITER_GROUP = 2
|
|
59
70
|
const LINE_BREAK = '\n'
|
|
71
|
+
const DOUBLE_QUOTE = '"'
|
|
72
|
+
// A command substitution with no nested parenthesis — the shape a quoted `"$(cmd …)"` is written in —
|
|
73
|
+
// or its backtick spelling. An escaped `\$(` or `` \` `` is literal text inside double quotes, so it
|
|
74
|
+
// runs nothing.
|
|
75
|
+
const SUBSTITUTION_PATTERN = /(?<!\\)\$\((?<dollar>[^()]*)\)|(?<!\\)`(?<tick>[^`]*)`/gu
|
|
60
76
|
// `set -o pipefail` tells the shell to report the pipeline with the first failing command's status,
|
|
61
77
|
// so nothing in it is discarded. The flag letters are loose because `set -eo pipefail` and
|
|
62
78
|
// `set -euo pipefail` are the same instruction, and the `set` word is required so that a path or a
|
|
@@ -77,14 +93,36 @@ const FLAG_PREFIX = '-'
|
|
|
77
93
|
// Two kinds of prefix, and they are not interchangeable. A wrapper runs the command that follows it,
|
|
78
94
|
// so the walk continues past it; a navigation builtin runs nothing, so its segment yields no command
|
|
79
95
|
// at all and the walk moves to the next segment.
|
|
80
|
-
|
|
96
|
+
//
|
|
97
|
+
// **A wrapper is skipped with the flag values and operands it takes, and named by its basename**
|
|
98
|
+
// (joshuafolkken/kit#4525). `/usr/bin/time -f %e pnpm josh gate` left the walk on `%e`, and
|
|
99
|
+
// `timeout 600 pnpm josh gate` stopped at `timeout`, so a refusal keyed on the command was escaped by
|
|
100
|
+
// wrapping it. Every reader that asks which command a segment runs goes through this one walk.
|
|
101
|
+
interface WrapperShape {
|
|
102
|
+
readonly valued: ReadonlySet<string>
|
|
103
|
+
readonly operands: number
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const WRAPPER_COMMANDS: ReadonlyMap<string, WrapperShape> = new Map([
|
|
107
|
+
['time', { valued: new Set(['-f', '-o', '--format', '--output']), operands: 0 }],
|
|
108
|
+
['env', { valued: new Set(['-u', '-C', '-S', '--unset', '--chdir']), operands: 0 }],
|
|
109
|
+
['sudo', { valued: new Set(['-u', '-g', '-C', '-D']), operands: 0 }],
|
|
110
|
+
['timeout', { valued: new Set(['-s', '-k', '--signal', '--kill-after']), operands: 1 }],
|
|
111
|
+
['nohup', { valued: new Set(), operands: 0 }],
|
|
112
|
+
['nice', { valued: new Set(['-n', '--adjustment']), operands: 0 }],
|
|
113
|
+
['command', { valued: new Set(), operands: 0 }],
|
|
114
|
+
['exec', { valued: new Set(['-a']), operands: 0 }],
|
|
115
|
+
['stdbuf', { valued: new Set(['-i', '-o', '-e']), operands: 0 }],
|
|
116
|
+
])
|
|
81
117
|
const NAVIGATION_COMMANDS = new Set(['cd', 'pushd', 'popd', 'export', 'source', 'set', '.'])
|
|
118
|
+
const PATH_SEPARATOR = '/'
|
|
119
|
+
const FLAG_AND_VALUE = 2
|
|
82
120
|
|
|
83
121
|
// Anchored at a segment's command position, not searched anywhere in the string. A loose search
|
|
84
122
|
// charged `git commit -m "ran pnpm josh gate"` to `josh gate`, and this repository's own commit
|
|
85
123
|
// messages and issue comments name josh subcommands constantly. Only the first match counts: a
|
|
86
124
|
// compound command naming two would otherwise charge its whole duration to each.
|
|
87
|
-
const JOSH_PATTERN = /^(?:pnpm\s+(?:exec\s+)?)?josh\s+([a-z][\w:-]*)/u
|
|
125
|
+
const JOSH_PATTERN = /^(?:(?:pnpm|npx)\s+(?:exec\s+)?)?josh\s+([a-z][\w:-]*)/u
|
|
88
126
|
const JOSH_PREFIX = 'josh '
|
|
89
127
|
const COMMAND_KEY = 'command'
|
|
90
128
|
|
|
@@ -99,19 +137,45 @@ function bash_command(input: unknown): string {
|
|
|
99
137
|
// A wrapper's own flags are skipped with it. Skipping only the wrapper word left the walk on a flag,
|
|
100
138
|
// which is not command-shaped, so `env -i pnpm test` yielded no command at all and its duration left
|
|
101
139
|
// the per-command table entirely.
|
|
102
|
-
function
|
|
103
|
-
|
|
140
|
+
function after_flags(
|
|
141
|
+
words: ReadonlyArray<string>,
|
|
142
|
+
start: number,
|
|
143
|
+
valued: ReadonlySet<string>,
|
|
144
|
+
): number {
|
|
145
|
+
let index = start
|
|
146
|
+
|
|
147
|
+
while (words[index]?.startsWith(FLAG_PREFIX) === true) {
|
|
148
|
+
index += valued.has(words[index] ?? '') ? FLAG_AND_VALUE : 1
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return index
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// The index past the prefix word at `index`, or `index` itself when that word is the command.
|
|
155
|
+
function after_prefix_word(words: ReadonlyArray<string>, index: number): number {
|
|
156
|
+
const word = words[index] ?? ''
|
|
157
|
+
|
|
158
|
+
if (word.startsWith(FLAG_PREFIX) || ASSIGNMENT_PATTERN.test(word)) return index + 1
|
|
159
|
+
|
|
160
|
+
const wrapper = WRAPPER_COMMANDS.get(word.slice(word.lastIndexOf(PATH_SEPARATOR) + 1))
|
|
104
161
|
|
|
105
|
-
|
|
162
|
+
if (wrapper === undefined) return index
|
|
163
|
+
|
|
164
|
+
return after_flags(words, index + 1, wrapper.valued) + wrapper.operands
|
|
106
165
|
}
|
|
107
166
|
|
|
108
167
|
// One segment with its leading assignments and wrappers dropped, so the first entry is the command
|
|
109
168
|
// position. Shared by both readers below: what counts as the command is one rule, not two.
|
|
110
169
|
function command_words(segment: string): Array<string> {
|
|
111
170
|
const words = segment.replaceAll(SUBSHELL_OPENER, ' ').trim().split(WHITESPACE_PATTERN)
|
|
112
|
-
|
|
171
|
+
let start = 0
|
|
172
|
+
|
|
173
|
+
for (let next = after_prefix_word(words, start); next !== start;) {
|
|
174
|
+
start = next
|
|
175
|
+
next = after_prefix_word(words, start)
|
|
176
|
+
}
|
|
113
177
|
|
|
114
|
-
return
|
|
178
|
+
return words.slice(start)
|
|
115
179
|
}
|
|
116
180
|
|
|
117
181
|
// The command this segment runs, or nothing. Nothing has two causes and both are deliberate: a
|
|
@@ -186,15 +250,35 @@ function without_heredoc_bodies(command: string): string {
|
|
|
186
250
|
// removal for a different reason — a quoted `sed` script holds `|` and slashes that read as a
|
|
187
251
|
// pipeline and as paths — and two spellings of "remove the quotes" would disagree the first time one
|
|
188
252
|
// of them learned about a quoting form the other did not.
|
|
253
|
+
//
|
|
254
|
+
// **A `$(…)` inside double quotes runs, so it is kept as a command of its own** (joshuafolkken/kit#4525):
|
|
255
|
+
// `out="$(pnpm josh gate)"` runs the gate, and removing the span with its quotes hid it. A single-quoted
|
|
256
|
+
// span expands nothing and goes whole. The substitution's own quoted arguments go as any other.
|
|
257
|
+
function spoken_substitutions(span: string): string {
|
|
258
|
+
if (!span.startsWith(DOUBLE_QUOTE)) return ' '
|
|
259
|
+
|
|
260
|
+
const inner = [...span.matchAll(SUBSTITUTION_PATTERN)].map((match) =>
|
|
261
|
+
(match.groups?.['dollar'] ?? match.groups?.['tick'] ?? '').replaceAll(QUOTED_SPAN_PATTERN, ' '),
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
return inner.length === 0 ? ' ' : ` ; ${inner.join(' ; ')} ; `
|
|
265
|
+
}
|
|
266
|
+
|
|
189
267
|
function unquoted(command: string): string {
|
|
190
|
-
return without_heredoc_bodies(command).replaceAll(QUOTED_SPAN_PATTERN,
|
|
268
|
+
return without_heredoc_bodies(command).replaceAll(QUOTED_SPAN_PATTERN, (span) =>
|
|
269
|
+
spoken_substitutions(span),
|
|
270
|
+
)
|
|
191
271
|
}
|
|
192
272
|
|
|
193
273
|
// Quoted text replaced by spaces of its own length, so an offset found here is the same offset in the
|
|
194
274
|
// command — what a caller cutting the command where the unquoted reading says to needs. `undefined`
|
|
195
275
|
// for a line carrying a heredoc, whose body lines a cut would read as commands of their own.
|
|
276
|
+
function has_heredoc(command: string): boolean {
|
|
277
|
+
return HEREDOC_MARKER.test(command)
|
|
278
|
+
}
|
|
279
|
+
|
|
196
280
|
function blanked(command: string): string | undefined {
|
|
197
|
-
if (
|
|
281
|
+
if (has_heredoc(command)) return undefined
|
|
198
282
|
|
|
199
283
|
return command.replaceAll(QUOTED_SPAN_PATTERN, (span) => ' '.repeat(span.length))
|
|
200
284
|
}
|
|
@@ -344,12 +428,15 @@ const time_shell = {
|
|
|
344
428
|
blanked,
|
|
345
429
|
command_segment,
|
|
346
430
|
discarded_commands,
|
|
431
|
+
has_heredoc,
|
|
347
432
|
josh_arguments,
|
|
348
433
|
josh_command_of,
|
|
434
|
+
josh_command_of_segment,
|
|
349
435
|
josh_commands_of,
|
|
350
436
|
josh_signatures_of,
|
|
351
437
|
leading_word,
|
|
352
438
|
unquoted,
|
|
439
|
+
without_heredoc_bodies,
|
|
353
440
|
}
|
|
354
441
|
|
|
355
442
|
export { time_shell }
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { FollowupStage } from '#scripts/followup/git-followup-stages'
|
|
2
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
transcript_record,
|
|
5
|
+
type TranscriptBlock,
|
|
6
|
+
type TranscriptContent,
|
|
7
|
+
type TranscriptMessage,
|
|
8
|
+
type TranscriptRecord,
|
|
9
|
+
} from '#scripts/lib/transcript-record'
|
|
4
10
|
import { time_background } from './time-background'
|
|
5
11
|
import { time_followup_stage } from './time-followup-stage'
|
|
6
12
|
import { time_instant } from './time-instant'
|
|
@@ -10,56 +16,20 @@ import { time_reported_failure } from './time-reported-failure'
|
|
|
10
16
|
//
|
|
11
17
|
// It moved out of `time-spans.ts` when that file passed its length limit — the seam that file is
|
|
12
18
|
// already cut along elsewhere (`time-shell.ts`, `time-single-check.ts`), where the *reading* of a
|
|
13
|
-
// field lives beside the field and the arithmetic stays next door. What is here is
|
|
14
|
-
//
|
|
15
|
-
// into one.
|
|
19
|
+
// field lives beside the field and the arithmetic stays next door. What is here is nothing about
|
|
20
|
+
// time: the two records a line yields, and the read that turns a parsed line into one.
|
|
16
21
|
//
|
|
17
22
|
// **The block reader is not `cost-blocks.ts` and could not have been.** That module flattens every
|
|
18
23
|
// line into one list of blocks for a token estimate, dropping the `id` / `tool_use_id` pair a call is
|
|
19
24
|
// matched to its result by and the line boundary a timestamp belongs to. Both are the whole input
|
|
20
25
|
// here.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
input: z.unknown().nullish(),
|
|
29
|
-
// Whether the harness wrote this result back as a failure. Present on a
|
|
30
|
-
// `tool_result` block and on nothing else, and absent even there for the tools that never report
|
|
31
|
-
// one — which is why it is read as three answers rather than as a boolean with a default.
|
|
32
|
-
is_error: z.boolean().nullish(),
|
|
33
|
-
// What the call printed. Read only to recover the outcome a pipeline threw away:
|
|
34
|
-
// it is kept as flattened text rather than as blocks, because that is
|
|
35
|
-
// the whole of what `time-reported-failure.ts` asks of it.
|
|
36
|
-
content: z.unknown().nullish(),
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
const CONTENT_SCHEMA = z.union([z.string(), z.array(BLOCK_SCHEMA)])
|
|
40
|
-
// `id` is the assistant *message* the line belongs to, and Claude Code writes one line per content
|
|
41
|
-
// block — a turn that thought and then issued two calls is three lines carrying one id.
|
|
42
|
-
// Anything asking "how many calls did that turn make" therefore has to
|
|
43
|
-
// group by this field; counting one line's blocks answers one, whatever the turn actually did. The
|
|
44
|
-
// same field is what says how many *turns* a run had.
|
|
45
|
-
const MESSAGE_SCHEMA = z.object({ id: z.string().nullish(), content: CONTENT_SCHEMA.nullish() })
|
|
46
|
-
|
|
47
|
-
const LINE_SCHEMA = z.object({
|
|
48
|
-
type: z.string().nullish(),
|
|
49
|
-
timestamp: z.string().nullish(),
|
|
50
|
-
// The branch the line was written on, which is where the issue number lives — `josh git` names a
|
|
51
|
-
// branch `<N>-<slug>`. Read here rather than re-parsed by a second reader so `josh time --issue`
|
|
52
|
-
// and `josh cost --issue` answer from the same field.
|
|
53
|
-
gitBranch: z.string().nullish(),
|
|
54
|
-
// The two fields outside `message` that the harness writes an end-of-task notice on.
|
|
55
|
-
// **Both are read as `unknown` rather than as strings**: a schema
|
|
56
|
-
// insisting on a string here would reject every line whose `content` is a list of blocks — which is
|
|
57
|
-
// most of them — and a rejected line is dropped from the timeline entirely, so the shares would stop
|
|
58
|
-
// reconstructing the elapsed time. The shape is checked at the read below instead.
|
|
59
|
-
content: z.unknown().nullish(),
|
|
60
|
-
attachment: z.unknown().nullish(),
|
|
61
|
-
message: MESSAGE_SCHEMA.nullish(),
|
|
62
|
-
})
|
|
26
|
+
//
|
|
27
|
+
// The line's schema is `transcript-record.ts`'s, shared with every other reader of these lines. A
|
|
28
|
+
// message `id` groups the lines of one assistant turn — Claude Code writes one line per content block
|
|
29
|
+
// — so "how many calls did that turn make" groups by it. `gitBranch` is where the issue number lives
|
|
30
|
+
// (`josh git` names a branch `<N>-<slug>`), read here so `josh time --issue` and `josh cost --issue`
|
|
31
|
+
// answer from the same field. A `tool_result`'s `is_error` is read as three answers — absent for the
|
|
32
|
+
// tools that never report one — and its `content` only to recover the outcome a pipeline threw away.
|
|
63
33
|
|
|
64
34
|
const UNKNOWN_BRANCH = ''
|
|
65
35
|
// The field an attachment line carries the notice in, named rather than written as a literal.
|
|
@@ -137,8 +107,8 @@ interface TranscriptLine {
|
|
|
137
107
|
type: string
|
|
138
108
|
timestamp_ms: number
|
|
139
109
|
branch: string
|
|
140
|
-
// The background run this line is the harness's end-of-task notice for
|
|
141
|
-
// line. It is read here rather than downstream for the reason every
|
|
110
|
+
// The background run this line is the harness's end-of-task notice for — or the `TaskStop` result
|
|
111
|
+
// that stopped it, which gets no notice — and `''` for every other line. It is read here rather than downstream for the reason every
|
|
142
112
|
// derived field above is: the notice is the line's whole content, which a span does not keep, and
|
|
143
113
|
// it is the only thing in a transcript that says a command had *finished* rather than merely been
|
|
144
114
|
// looked at.
|
|
@@ -148,6 +118,9 @@ interface TranscriptLine {
|
|
|
148
118
|
// every line lacking an id would otherwise fall into one bucket spanning the whole file.
|
|
149
119
|
message_id: string
|
|
150
120
|
blocks: Array<Block>
|
|
121
|
+
// The reason a Stop-hook block sent this turn back with, its label stripped, or `''` for every
|
|
122
|
+
// other line.
|
|
123
|
+
stop_feedback: string
|
|
151
124
|
// The guard whose Stop-hook block sent this turn back, or `''` for every other line
|
|
152
125
|
// — read the way `Block.refusal_guard` is, off the reason's opening.
|
|
153
126
|
stop_guard: string
|
|
@@ -156,9 +129,7 @@ interface TranscriptLine {
|
|
|
156
129
|
// The four string fields, defaulted together and apart from the two that are not strings. Split out
|
|
157
130
|
// so neither half carries every `??` in the block: read as one function the defaulting alone reached
|
|
158
131
|
// the complexity limit, and the next field added would have had to be squeezed in beside them.
|
|
159
|
-
function block_names(
|
|
160
|
-
raw: z.infer<typeof BLOCK_SCHEMA>,
|
|
161
|
-
): Pick<Block, 'type' | 'name' | 'id' | 'result_id'> {
|
|
132
|
+
function block_names(raw: TranscriptBlock): Pick<Block, 'type' | 'name' | 'id' | 'result_id'> {
|
|
162
133
|
return {
|
|
163
134
|
type: raw.type ?? '',
|
|
164
135
|
name: raw.name ?? '',
|
|
@@ -167,6 +138,11 @@ function block_names(
|
|
|
167
138
|
}
|
|
168
139
|
}
|
|
169
140
|
|
|
141
|
+
// The body a refusal opens with, the harness's own label stripped — shared with `rule-value.ts`.
|
|
142
|
+
function refusal_body(text: string): string {
|
|
143
|
+
return text.trimStart().replace(HOOK_ERROR_LABEL, '')
|
|
144
|
+
}
|
|
145
|
+
|
|
170
146
|
// **A refusal is identified by what its body opens with, never by what it carries inside**.
|
|
171
147
|
// The hook denies a call on behalf of the one guard whose trigger fired and
|
|
172
148
|
// writes that guard's reason back as the whole result, so the speaker is the token after the `⛔` and
|
|
@@ -178,7 +154,7 @@ function block_names(
|
|
|
178
154
|
// label is stripped before the opening is read. Without it no live refusal
|
|
179
155
|
// carried a guard: the fixtures wrote the bare `⛔` body and passed while every recorded one read `''`.
|
|
180
156
|
function guard_from_refusal(text: string): string {
|
|
181
|
-
const trimmed = text
|
|
157
|
+
const trimmed = refusal_body(text)
|
|
182
158
|
if (!trimmed.startsWith(REFUSAL_MARKER)) return ''
|
|
183
159
|
|
|
184
160
|
const headline = trimmed.slice(REFUSAL_MARKER.length).split('\n', 1)[0]?.trimStart() ?? ''
|
|
@@ -189,12 +165,12 @@ function guard_from_refusal(text: string): string {
|
|
|
189
165
|
|
|
190
166
|
// **Only the harness's own feedback line counts.** It writes a Stop block back as a user turn whose
|
|
191
167
|
// whole body is `Stop hook feedback:` and the reason, so a prompt that merely quotes one never opens
|
|
192
|
-
// with the label and reads `''`.
|
|
193
|
-
function
|
|
168
|
+
// with the label and reads `''`. The reason is kept whole, so `rule-value.ts` can match it to its row.
|
|
169
|
+
function stop_feedback_of(data: TranscriptRecord): string {
|
|
194
170
|
const content = data.message?.content
|
|
195
171
|
if (typeof content !== 'string' || !STOP_FEEDBACK_LABEL.test(content)) return ''
|
|
196
172
|
|
|
197
|
-
return
|
|
173
|
+
return content.replace(STOP_FEEDBACK_LABEL, '').trim()
|
|
198
174
|
}
|
|
199
175
|
|
|
200
176
|
function token_lines_of(text: string): Array<string> {
|
|
@@ -209,7 +185,7 @@ function token_lines_of(text: string): Array<string> {
|
|
|
209
185
|
// content field that may be a string or a list of blocks into one string, and it is idempotent on a
|
|
210
186
|
// string — so passing its own output back to `has_failure_line` reads exactly as passing the raw
|
|
211
187
|
// field did, at one flattening instead of two.
|
|
212
|
-
function to_block(raw:
|
|
188
|
+
function to_block(raw: TranscriptBlock): Block {
|
|
213
189
|
const text = time_reported_failure.result_text(raw.content)
|
|
214
190
|
const is_error = raw.is_error ?? undefined
|
|
215
191
|
|
|
@@ -229,9 +205,7 @@ function to_block(raw: z.infer<typeof BLOCK_SCHEMA>): Block {
|
|
|
229
205
|
|
|
230
206
|
// A user turn written as a bare string carries no blocks, which is exactly right: it is a prompt,
|
|
231
207
|
// and a prompt has no tool result to match.
|
|
232
|
-
function to_blocks(
|
|
233
|
-
content: string | Array<z.infer<typeof BLOCK_SCHEMA>> | null | undefined,
|
|
234
|
-
): Array<Block> {
|
|
208
|
+
function to_blocks(content: TranscriptContent | null | undefined): Array<Block> {
|
|
235
209
|
return typeof content === 'string' || content === null || content === undefined
|
|
236
210
|
? []
|
|
237
211
|
: content.map((block) => to_block(block))
|
|
@@ -241,7 +215,7 @@ function to_blocks(
|
|
|
241
215
|
// is written as one line per content block with the message's id repeated on each, so the id is what
|
|
242
216
|
// says which blocks belonged to the same turn.
|
|
243
217
|
function message_fields(
|
|
244
|
-
message:
|
|
218
|
+
message: TranscriptMessage | null | undefined,
|
|
245
219
|
): Pick<TranscriptLine, 'message_id' | 'blocks'> {
|
|
246
220
|
return { message_id: message?.id ?? NO_MESSAGE_ID, blocks: to_blocks(message?.content) }
|
|
247
221
|
}
|
|
@@ -253,34 +227,58 @@ function message_fields(
|
|
|
253
227
|
// session happened to hold a different one. All three are read, and `time_background.finished_at`
|
|
254
228
|
// keeps the earliest instant per id, so what is paired with the launch is when the task *ended* rather
|
|
255
229
|
// than when the run was told about it.
|
|
256
|
-
function notice_text(data:
|
|
230
|
+
function notice_text(data: TranscriptRecord): string {
|
|
257
231
|
const attachment = json_value.is_record(data.attachment) ? data.attachment[PROMPT_KEY] : undefined
|
|
258
232
|
const carried = [data.message?.content, data.content, attachment]
|
|
259
233
|
|
|
260
234
|
return carried.find((one): one is string => typeof one === 'string') ?? ''
|
|
261
235
|
}
|
|
262
236
|
|
|
237
|
+
// The task a `TaskStop` result on this line stopped, which is an end the harness writes no notice for.
|
|
238
|
+
// Its result body is a plain string, so only string contents are read and nothing is flattened again.
|
|
239
|
+
function stopped_background(content: TranscriptContent | null | undefined): string {
|
|
240
|
+
if (!Array.isArray(content)) return time_background.NO_BACKGROUND
|
|
241
|
+
|
|
242
|
+
const ids = content.map((block) =>
|
|
243
|
+
typeof block.content === 'string' ? time_background.stopped_id(block.content) : '',
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
return ids.find((id) => id !== time_background.NO_BACKGROUND) ?? time_background.NO_BACKGROUND
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// The task this line reports the end of: the harness's notice, or else a `TaskStop` result.
|
|
250
|
+
function finished_background(data: TranscriptRecord): string {
|
|
251
|
+
const notice = time_background.finished_id(notice_text(data))
|
|
252
|
+
|
|
253
|
+
return notice === time_background.NO_BACKGROUND
|
|
254
|
+
? stopped_background(data.message?.content)
|
|
255
|
+
: notice
|
|
256
|
+
}
|
|
257
|
+
|
|
263
258
|
// A line without a parseable timestamp is dropped rather than dated: it has no place on a timeline,
|
|
264
259
|
// and inventing one would move every span around it.
|
|
265
|
-
function to_line(data:
|
|
260
|
+
function to_line(data: TranscriptRecord): TranscriptLine | undefined {
|
|
266
261
|
const timestamp_ms = time_instant.parse_instant(data.timestamp)
|
|
267
262
|
|
|
268
263
|
if (timestamp_ms === undefined) return undefined
|
|
269
264
|
|
|
265
|
+
const stop_feedback = stop_feedback_of(data)
|
|
266
|
+
|
|
270
267
|
return {
|
|
271
268
|
type: data.type ?? '',
|
|
272
269
|
timestamp_ms,
|
|
273
270
|
branch: data.gitBranch ?? UNKNOWN_BRANCH,
|
|
274
|
-
finished_background:
|
|
275
|
-
|
|
271
|
+
finished_background: finished_background(data),
|
|
272
|
+
stop_feedback,
|
|
273
|
+
stop_guard: guard_from_refusal(stop_feedback),
|
|
276
274
|
...message_fields(data.message),
|
|
277
275
|
}
|
|
278
276
|
}
|
|
279
277
|
|
|
280
278
|
function parse_line(line: string): TranscriptLine | undefined {
|
|
281
|
-
const
|
|
279
|
+
const record = transcript_record.parse(line)
|
|
282
280
|
|
|
283
|
-
return
|
|
281
|
+
return record === undefined ? undefined : to_line(record)
|
|
284
282
|
}
|
|
285
283
|
|
|
286
284
|
// A whole transcript's text read as its parsed lines, the unparseable ones dropped.
|
|
@@ -295,6 +293,7 @@ const time_transcript_line = {
|
|
|
295
293
|
guard_from_refusal,
|
|
296
294
|
parse_line,
|
|
297
295
|
parse_text,
|
|
296
|
+
refusal_body,
|
|
298
297
|
}
|
|
299
298
|
|
|
300
299
|
export type { Block, TranscriptLine }
|
|
@@ -11,6 +11,7 @@ import { init_logic_sonar } from '#scripts/init/init-logic-sonar'
|
|
|
11
11
|
import { PACKAGE_DIR, PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
12
12
|
import { project_profile, type ProjectProfile } from '#scripts/init/project-profile'
|
|
13
13
|
import { error_text } from '#scripts/lib/error-message'
|
|
14
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
14
15
|
import { file_reader } from '#scripts/lib/read-file'
|
|
15
16
|
import { PROJECT_CONFIG_FILE } from '#scripts/safe-chain/project-config'
|
|
16
17
|
import { did_refuse_self_run } from '#scripts/self-sync-guard/self-sync-refusal'
|
|
@@ -20,7 +21,6 @@ import { distributed_files } from './distributed-files'
|
|
|
20
21
|
import { IGNORE_FILE, uninstall_plan, type FilePlan } from './uninstall-plan'
|
|
21
22
|
import { uninstall_report, type UninstallPlan } from './uninstall-report'
|
|
22
23
|
|
|
23
|
-
const PACKAGE_JSON = 'package.json'
|
|
24
24
|
const LEFTHOOK_BIN = 'lefthook'
|
|
25
25
|
const ARGUMENT_START_INDEX = 2
|
|
26
26
|
const YES_FLAG = '--yes'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { run_bump_version } from './bump-version'
|
|
4
|
+
|
|
5
|
+
// The `josh bump` entry, kept apart from `bump-version.ts` because `release-publish.ts` imports that
|
|
6
|
+
// one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = run_bump_version(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
import { readFileSync, writeFileSync } from 'node:fs'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import { fileURLToPath } from 'node:url'
|
|
1
|
+
import { writeFileSync } from 'node:fs'
|
|
5
2
|
import { error_text } from '#scripts/lib/error-message'
|
|
3
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
6
4
|
import { json_object_schema, package_with_version_schema } from '#scripts/lib/schemas'
|
|
7
5
|
import semver from 'semver'
|
|
8
6
|
|
|
9
7
|
const VALID_BUMP_TYPES = ['major', 'minor', 'patch'] as const
|
|
10
8
|
type BumpType = (typeof VALID_BUMP_TYPES)[number]
|
|
11
9
|
|
|
10
|
+
const BUMP_TYPE_NAMES: ReadonlySet<string> = new Set(VALID_BUMP_TYPES)
|
|
12
11
|
const PACKAGE_JSON_INDENT = '\t'
|
|
12
|
+
const USAGE = 'Usage: josh bump [major|minor|patch]'
|
|
13
|
+
const FAILURE_EXIT_CODE = 1
|
|
13
14
|
|
|
14
15
|
function compute_new_version(version: string, bump_type: BumpType): string {
|
|
15
16
|
const new_version = semver.inc(version, bump_type)
|
|
@@ -19,28 +20,21 @@ function compute_new_version(version: string, bump_type: BumpType): string {
|
|
|
19
20
|
return new_version
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
function package_json_path(): string {
|
|
23
|
-
return path.join(process.cwd(), 'package.json')
|
|
24
|
-
}
|
|
25
|
-
|
|
26
23
|
// **Set the version to an already-decided number.** `bump_version` below is this plus the decision;
|
|
27
24
|
// `pnpm josh release` supplies its own, because a release raises the version by as many minors as
|
|
28
25
|
// main has taken merges rather than by one. Written once so the two agree
|
|
29
26
|
// on the file's shape and indentation.
|
|
30
27
|
function write_version(new_version: string): void {
|
|
31
|
-
const
|
|
32
|
-
const package_json = json_object_schema.parse(JSON.parse(readFileSync(package_path, 'utf8')))
|
|
28
|
+
const package_json = package_manifest.read_manifest(process.cwd(), json_object_schema)
|
|
33
29
|
|
|
34
30
|
writeFileSync(
|
|
35
|
-
|
|
31
|
+
package_manifest.manifest_path(process.cwd()),
|
|
36
32
|
`${JSON.stringify({ ...package_json, version: new_version }, undefined, PACKAGE_JSON_INDENT)}\n`,
|
|
37
33
|
)
|
|
38
34
|
}
|
|
39
35
|
|
|
40
36
|
function read_current_version(): string {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return package_with_version_schema.parse(JSON.parse(file_content)).version
|
|
37
|
+
return package_manifest.read_manifest(process.cwd(), package_with_version_schema).version
|
|
44
38
|
}
|
|
45
39
|
|
|
46
40
|
function bump_version(bump_type: BumpType): void {
|
|
@@ -50,23 +44,29 @@ function bump_version(bump_type: BumpType): void {
|
|
|
50
44
|
console.info(new_version)
|
|
51
45
|
}
|
|
52
46
|
|
|
53
|
-
function
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
function is_bump_type(value: string): value is BumpType {
|
|
48
|
+
return BUMP_TYPE_NAMES.has(value)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `josh bump`'s body, answering its exit code to `bump-version-main.ts`.
|
|
52
|
+
function run_bump_version(args: ReadonlyArray<string>): number {
|
|
53
|
+
const [bump_type = 'minor'] = args
|
|
56
54
|
|
|
57
|
-
if (!
|
|
58
|
-
console.error(
|
|
59
|
-
|
|
55
|
+
if (!is_bump_type(bump_type)) {
|
|
56
|
+
console.error(USAGE)
|
|
57
|
+
|
|
58
|
+
return FAILURE_EXIT_CODE
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
try {
|
|
63
|
-
bump_version(bump_type
|
|
62
|
+
bump_version(bump_type)
|
|
64
63
|
} catch (error) {
|
|
65
64
|
console.error(error_text.message_of(error))
|
|
66
|
-
|
|
65
|
+
|
|
66
|
+
return FAILURE_EXIT_CODE
|
|
67
67
|
}
|
|
68
|
-
}
|
|
69
68
|
|
|
70
|
-
|
|
69
|
+
return 0
|
|
70
|
+
}
|
|
71
71
|
|
|
72
|
-
export { bump_version, compute_new_version, write_version }
|
|
72
|
+
export { bump_version, compute_new_version, run_bump_version, USAGE, write_version }
|