@joshuafolkken/kit 1.1471.0 → 1.1784.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/settings.json +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/auto-ok/auto-ok-cli.ts +14 -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 +6 -7
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- 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 +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +54 -7
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -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 +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +69 -0
- 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 +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +137 -18
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- 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/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- 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 +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- 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-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-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +31 -60
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +65 -129
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/gh/git-pr.ts +13 -1
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -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 +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +39 -14
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- 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 +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +5 -16
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -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 +34 -78
- 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/expected-effect-lint.ts +60 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -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 +81 -90
- package/scripts/issue/issue-lint-cli.ts +7 -13
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -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 +111 -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.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- 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 +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +19 -25
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- 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 +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +111 -71
- 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 +31 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +112 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -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 +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- package/scripts/josh/process-identity.ts +13 -4
- 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 +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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/read-file.ts +3 -1
- 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/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.ts +265 -0
- package/scripts/lint/format.ts +14 -5
- package/scripts/lint/import-graph.ts +279 -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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +12 -11
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- 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 +18 -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 +6 -15
- package/scripts/report/report-format-reference.ts +4 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +82 -16
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -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 +67 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +90 -3
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +76 -7
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -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 +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +240 -61
- package/scripts/run/board/run-board-length.ts +52 -0
- 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 +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -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 +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +2 -2
- package/scripts/run/board/run-board-state.ts +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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.ts +9 -4
- package/scripts/run/cut/run-cut-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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.ts +2 -1
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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 +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-step.ts +1 -1
- 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 +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- package/scripts/run/ship/run-ship.ts +30 -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-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- 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 +3 -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 +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- 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 +15 -0
- package/scripts/split/split-measure.ts +65 -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/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +55 -6
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +54 -21
- package/scripts/test/unit-count-file.ts +37 -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 +71 -137
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- 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 +10 -1
- package/scripts/time-runtime/time-shell.ts +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- 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/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -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 +10 -3
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- 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/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/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
|
|
2
2
|
|
|
3
|
+
const PR_TITLE = '"PR title #N"'
|
|
4
|
+
const BODY_FILE_NOTE =
|
|
5
|
+
'(`-` reads stdin); use this whenever the body carries a backtick or `$`. Passing both forms is refused.'
|
|
6
|
+
const ISSUE_URL = '--issue-url "https://..."'
|
|
7
|
+
const REVIEW_ISSUE = '--issue 2325'
|
|
8
|
+
const CHECK = '--check'
|
|
9
|
+
const YES = '-y'
|
|
10
|
+
const SKIP_COMMIT = '--skip-commit'
|
|
11
|
+
const SKIP_PUSH = '--skip-push'
|
|
12
|
+
|
|
3
13
|
const GIT_WORKFLOW_SCRIPT = 'scripts/git/git-workflow.ts'
|
|
4
14
|
const GIT_MESSAGE_ARGUMENTS = '[-y] <message>'
|
|
5
15
|
|
|
@@ -10,6 +20,28 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
10
20
|
description: 'Git workflow helper',
|
|
11
21
|
category: 'Workflow',
|
|
12
22
|
reference: [GIT_MESSAGE_ARGUMENTS, 'developer', ['git', 'network']],
|
|
23
|
+
usage: {
|
|
24
|
+
examples: [
|
|
25
|
+
{ arguments: '', note: 'interactive' },
|
|
26
|
+
{ arguments: YES, note: 'unattended (no TTY required)' },
|
|
27
|
+
{ arguments: '-y "title"', note: 'set commit message prefix' },
|
|
28
|
+
{ arguments: '-y "<title> #<N>"', note: 'follow-up commit on the same branch' },
|
|
29
|
+
{
|
|
30
|
+
arguments: '-y --skip-commit --skip-push',
|
|
31
|
+
note: 'open the PR without committing/pushing',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
flags: [
|
|
35
|
+
{
|
|
36
|
+
names: [YES, '--yes'],
|
|
37
|
+
description: 'run non-interactively; works without a TTY (agent or CI shell).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
names: [SKIP_COMMIT, SKIP_PUSH],
|
|
41
|
+
description: 'recover/open a PR without a new commit or push.',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
13
45
|
},
|
|
14
46
|
pr: {
|
|
15
47
|
script: GIT_WORKFLOW_SCRIPT,
|
|
@@ -18,7 +50,8 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
18
50
|
// Not `GIT_MESSAGE_ARGUMENTS`: `-y` is already in the default arguments below, so advertising
|
|
19
51
|
// it would document a flag that cannot change what this command does.
|
|
20
52
|
reference: ['<message>', 'developer', ['network']],
|
|
21
|
-
default_script_arguments: [
|
|
53
|
+
default_script_arguments: [YES, SKIP_COMMIT, SKIP_PUSH],
|
|
54
|
+
usage: { examples: [{ arguments: '', note: 'open the PR for the current <N>-<slug> branch' }] },
|
|
22
55
|
},
|
|
23
56
|
// **The optional form, on both**. The mandatory `--env-file=.env` is resolved by node before the
|
|
24
57
|
// script's first line: on a machine with no `.env` it dies as `.env: not found` with exit code 9,
|
|
@@ -41,9 +74,37 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
41
74
|
['git', 'network', 'notifications'],
|
|
42
75
|
],
|
|
43
76
|
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
77
|
+
usage: {
|
|
78
|
+
examples: [
|
|
79
|
+
{ arguments: PR_TITLE, note: 'merges (default)' },
|
|
80
|
+
{ arguments: String.raw`${PR_TITLE} --notify-message "Implemented X:\n- change 1"` },
|
|
81
|
+
{ arguments: `${PR_TITLE} --notify-message-file completion.md` },
|
|
82
|
+
{ arguments: `${PR_TITLE} --ai-review-ignore-reason "false positive"` },
|
|
83
|
+
{ arguments: `${PR_TITLE} --no-merge`, note: 'do the work, leave the PR open' },
|
|
84
|
+
],
|
|
85
|
+
flags: [
|
|
86
|
+
{
|
|
87
|
+
names: ['--no-merge'],
|
|
88
|
+
description:
|
|
89
|
+
'do the follow-up work but do not merge; leaves the PR open (the only flag that stops the merge). `--merge` is a deprecated no-op. A PR already merged by hand skips the CI wait, the AI-review scan and the merge and runs only the post-merge tail; a completion report already on the Issue is not posted again.',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
names: ['--notify-message'],
|
|
93
|
+
description: 'inline completion body; `\\n` expands to newlines.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
names: ['--notify-message-file'],
|
|
97
|
+
description: `read the completion body from a file ${BODY_FILE_NOTE}`,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
names: ['--ai-review-ignore-reason'],
|
|
101
|
+
description: 'reason to dismiss an AI-review finding.',
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
44
105
|
},
|
|
45
106
|
notify: {
|
|
46
|
-
script: 'scripts/notify/telegram-test.ts',
|
|
107
|
+
script: 'scripts/notify/telegram-test-main.ts',
|
|
47
108
|
description: 'Send Telegram notification',
|
|
48
109
|
category: 'Workflow',
|
|
49
110
|
reference: [
|
|
@@ -52,6 +113,38 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
52
113
|
['notifications'],
|
|
53
114
|
],
|
|
54
115
|
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
116
|
+
usage: {
|
|
117
|
+
examples: [
|
|
118
|
+
{
|
|
119
|
+
arguments: String.raw`--task-type planning ${ISSUE_URL} --body="- bullet 1\n- bullet 2"`,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
arguments: `--task-type confirmation ${ISSUE_URL} --body-file r.md --recommended "Go" --alternative "Wait"`,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
flags: [
|
|
126
|
+
{
|
|
127
|
+
names: ['--task-type'],
|
|
128
|
+
description:
|
|
129
|
+
'one of `planning` 📋, `completion` ✅, `failure` ❌, `warning` ⚠️, `kickoff_retry` 🔄, `confirmation` ⏸️. Do not send `completion` or `warning` by hand — `josh followup` sends them.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
names: ['--body', "--body=$'…'"],
|
|
133
|
+
description: "inline body; use `--body=$'…'` when it starts with `-`.",
|
|
134
|
+
},
|
|
135
|
+
{ names: ['--body-file'], description: `read the body from a file ${BODY_FILE_NOTE}` },
|
|
136
|
+
{
|
|
137
|
+
names: ['--repo-name', '--issue-url', '--pr-url'],
|
|
138
|
+
description:
|
|
139
|
+
'header repository, resolved in that order, then the working directory. The issue title is read from `--issue-url`.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
names: ['--recommended', '--alternative'],
|
|
143
|
+
description:
|
|
144
|
+
'the choices appended under `JOSH_SESSION_LANG` headings; `--recommended` is required for `confirmation`, `--alternative` is repeatable.',
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
},
|
|
55
148
|
},
|
|
56
149
|
// One observation-ledger sighting: the key's count, the append and the second-sighting verdict,
|
|
57
150
|
// which a run used to type as a `cat | grep -c` and judge by hand.
|
|
@@ -60,6 +153,21 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
60
153
|
description: 'Record an observation sighting and answer whether it is now filed',
|
|
61
154
|
category: 'Workflow',
|
|
62
155
|
reference: ['<key> <depth> <where> <what> [--checkout <path>]', 'automation', ['files']],
|
|
156
|
+
usage: {
|
|
157
|
+
examples: [
|
|
158
|
+
{ arguments: "flaky-e2e d1 'tests/e2e/login.test.ts' 'times out on CI only'" },
|
|
159
|
+
{
|
|
160
|
+
arguments: "flaky-e2e d1 'src/app.ts' 'fails there too' --checkout ~/Development/app",
|
|
161
|
+
note: "another repository's ledger",
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
flags: [
|
|
165
|
+
{
|
|
166
|
+
names: ['--checkout <path>'],
|
|
167
|
+
description: "count and append in that repository's `.josh/observations/` instead.",
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
},
|
|
63
171
|
},
|
|
64
172
|
// The observation ledger's commit path for the lines no run's own commit carried:
|
|
65
173
|
// a lane's lines sit in the primary checkout, which
|
|
@@ -69,20 +177,46 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
69
177
|
description: 'Commit the observation ledger as a pull request of its own, and merge it',
|
|
70
178
|
category: 'Workflow',
|
|
71
179
|
reference: ['', 'automation', ['git', 'network']],
|
|
180
|
+
usage: { examples: [{ arguments: '' }] },
|
|
72
181
|
},
|
|
73
182
|
// The one write path for a `/code-review` round's findings, plus the
|
|
74
183
|
// `--check` gate `followup` runs before it merges. It appends a `- rf:`
|
|
75
184
|
// line per finding — or one zero-finding line for a clean round — to the observation ledger, so
|
|
76
185
|
// `observations:flush` commits them and the recurrence count survives the run.
|
|
77
186
|
'review:record': {
|
|
78
|
-
script: 'scripts/review/review-record-
|
|
187
|
+
script: 'scripts/review/review-record-main.ts',
|
|
79
188
|
description: 'Record a review round’s findings, or check a round was recorded',
|
|
80
189
|
category: 'Workflow',
|
|
81
190
|
reference: [
|
|
82
|
-
'--issue <N> [--comment] [<category>:<severity>:<file> ...] | --check --issue <N>',
|
|
191
|
+
'--issue <N> [--comment | --interaction] [<category>:<severity>:<file> ...] | --check [--interaction] --issue <N>',
|
|
83
192
|
'automation',
|
|
84
193
|
['files', 'network'],
|
|
85
194
|
],
|
|
195
|
+
usage: {
|
|
196
|
+
examples: [
|
|
197
|
+
{ arguments: `${REVIEW_ISSUE} bug-risks:medium:src/foo.ts:42 tests:low:a.test.ts` },
|
|
198
|
+
{ arguments: REVIEW_ISSUE, note: 'a zero-finding round — records one `none` line' },
|
|
199
|
+
{
|
|
200
|
+
arguments: `${REVIEW_ISSUE} --comment`,
|
|
201
|
+
note: 'a round that passed after the PR opened — an Issue comment, no append',
|
|
202
|
+
},
|
|
203
|
+
{ arguments: `${CHECK} ${REVIEW_ISSUE}`, note: 'the merge gate: was it recorded?' },
|
|
204
|
+
{
|
|
205
|
+
arguments: `${REVIEW_ISSUE} --interaction`,
|
|
206
|
+
note: 'the interaction review’s pass — a `- ri:` line',
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
// The reader over the durable review stop log: each finding that stopped a ship, with its file:line
|
|
212
|
+
// and first sentence, so a period's stops are classified without reading ship logs.
|
|
213
|
+
'review:stops': {
|
|
214
|
+
script: 'scripts/review/review-stops-cli.ts',
|
|
215
|
+
description:
|
|
216
|
+
'List the review findings that stopped a josh ship over a period, by kind, file:line and first sentence',
|
|
217
|
+
category: 'Workflow',
|
|
218
|
+
reference: ['[--period <days>]', 'developer', ['none']],
|
|
219
|
+
usage: { examples: [{ arguments: '--period 30', note: 'the last 30 days (default 7)' }] },
|
|
86
220
|
},
|
|
87
221
|
// The reader over what `review:record` wrote: each recurring category’s
|
|
88
222
|
// count, and the number of zero-finding rounds that distinguishes a quiet category from an unwatched one.
|
|
@@ -91,6 +225,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
91
225
|
description: 'Count review findings by category from the observation ledger',
|
|
92
226
|
category: 'Workflow',
|
|
93
227
|
reference: ['', 'developer', ['files']],
|
|
228
|
+
usage: { examples: [{ arguments: '' }] },
|
|
94
229
|
},
|
|
95
230
|
// After a behavior-change Issue merges, re-run its declared baseline and print before/after; a value
|
|
96
231
|
// that did not move appends a refuted-premise line to the observation ledger.
|
|
@@ -99,24 +234,32 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
99
234
|
description: 'Re-run a merged issue’s baseline command and print the before/after pair',
|
|
100
235
|
category: 'Workflow',
|
|
101
236
|
reference: ['<issue-number>', 'automation', ['network', 'processes', 'files']],
|
|
237
|
+
usage: { examples: [{ arguments: '2212' }] },
|
|
102
238
|
},
|
|
103
239
|
// A script rather than an `sh -c` chain, because it has a precondition to enforce: run inside a
|
|
104
240
|
// linked work tree it would hijack the default branch from every other one.
|
|
105
241
|
'main:sync': {
|
|
106
|
-
script: 'scripts/git/main-sync.ts',
|
|
242
|
+
script: 'scripts/git/main-sync-main.ts',
|
|
107
243
|
description:
|
|
108
244
|
'Checkout default branch, pull latest, and prune merged remote-gone branches (refuses inside a lane)',
|
|
109
245
|
category: 'Workflow',
|
|
110
246
|
reference: ['', 'developer', ['git', 'network']],
|
|
247
|
+
usage: { examples: [{ arguments: '' }] },
|
|
111
248
|
},
|
|
112
249
|
// A script rather than an `sh -c` chain, because the strategy has to be named rather than left to
|
|
113
250
|
// the caller's git configuration: a bare `git pull` aborts with `Need to specify how to reconcile
|
|
114
251
|
// divergent branches` on exactly the diverged branch the command exists for.
|
|
252
|
+
//
|
|
253
|
+
// **It declares no core weight, by measurement** (joshuafolkken/kit#3944): its own work is git, and
|
|
254
|
+
// the catalog it may regenerate took 0.6s of CPU. The heavy processes seen beside it are commit
|
|
255
|
+
// hooks — its regenerated catalog's commit runs them — which reserve themselves, and a weight here
|
|
256
|
+
// would set the held mark they inherit, folding the parallel hook tools into this one place.
|
|
115
257
|
'main:merge': {
|
|
116
|
-
script: 'scripts/git/main-merge.ts',
|
|
258
|
+
script: 'scripts/git/main-merge-main.ts',
|
|
117
259
|
description: 'Merge origin default branch into the current branch',
|
|
118
260
|
category: 'Workflow',
|
|
119
261
|
reference: ['', 'developer', ['git', 'network']],
|
|
262
|
+
usage: { examples: [{ arguments: '' }] },
|
|
120
263
|
},
|
|
121
264
|
}
|
|
122
265
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { fileURLToPath } from 'node:url'
|
|
4
4
|
import { resolve_local_bin, resolve_package_bin } from '#scripts/build/local-bin'
|
|
5
5
|
import { core_budget } from '#scripts/gate/core-budget'
|
|
6
|
-
import {
|
|
6
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
7
7
|
import { package_version_schema } from '#scripts/lib/schemas'
|
|
8
8
|
import { resolve_spawn_exit } from '#scripts/lib/spawn-exit'
|
|
9
9
|
import { execaSync } from 'execa'
|
|
@@ -18,13 +18,13 @@ import {
|
|
|
18
18
|
import { composite_arguments, USAGE_ERROR_EXIT_CODE } from './josh-composite-arguments'
|
|
19
19
|
import { josh_in_process } from './josh-in-process'
|
|
20
20
|
import { kit_only } from './kit-only'
|
|
21
|
+
import { find_package_directory } from './package-directory'
|
|
21
22
|
import { run_github_prerequisite } from './run-github-prerequisite'
|
|
22
23
|
|
|
23
24
|
const COLUMN_WIDTH = 26
|
|
24
25
|
const ALIAS_PAD_WIDTH = 2
|
|
25
26
|
const TSX_BIN = 'tsx'
|
|
26
27
|
const TSX_PACKAGE = 'tsx'
|
|
27
|
-
const PACKAGE_JSON = 'package.json'
|
|
28
28
|
// Not an exit code the shell ever sees: `josh.ts` reads it as "no such command" and answers with
|
|
29
29
|
// the listing on stderr. It is named because `run_command` now reports through a promise, where a
|
|
30
30
|
// bare `-1` is one step further from the check that reads it.
|
|
@@ -35,17 +35,6 @@ interface TsxRunner {
|
|
|
35
35
|
leading_arguments: ReadonlyArray<string>
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
// Resolve the kit package root by ascending to the nearest package.json. This works both
|
|
39
|
-
// from the bundled dist/josh.js (one level under the root) and from the tsx source at
|
|
40
|
-
// scripts/josh/ (two levels), so this file's depth no longer has to be hard-coded.
|
|
41
|
-
function find_package_directory(start_directory: string): string {
|
|
42
|
-
return (
|
|
43
|
-
ancestor_directories.nearest(start_directory, (directory) =>
|
|
44
|
-
existsSync(path.join(directory, PACKAGE_JSON)),
|
|
45
|
-
) ?? start_directory
|
|
46
|
-
)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
38
|
const PACKAGE_DIR = find_package_directory(path.dirname(fileURLToPath(import.meta.url)))
|
|
50
39
|
|
|
51
40
|
function resolve_tsx_executable(): string {
|
|
@@ -82,9 +71,7 @@ function resolve_tsx_runner(): TsxRunner {
|
|
|
82
71
|
}
|
|
83
72
|
|
|
84
73
|
function read_package_version(): string {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return package_version_schema.parse(JSON.parse(raw)).version
|
|
74
|
+
return package_manifest.read_manifest(PACKAGE_DIR, package_version_schema).version
|
|
88
75
|
}
|
|
89
76
|
|
|
90
77
|
const HEADER = `josh v${read_package_version()} — Joshua Folkken's dev toolkit`
|
|
@@ -176,16 +163,11 @@ function format_unknown_command(cmd: string): string {
|
|
|
176
163
|
return `Unknown command: ${cmd}.${hint} Run 'josh --help' for common commands or 'josh --all' for the full list.`
|
|
177
164
|
}
|
|
178
165
|
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
function should_use_shell(executable: string): boolean {
|
|
182
|
-
return process.platform === 'win32' && executable !== process.execPath
|
|
183
|
-
}
|
|
184
|
-
|
|
166
|
+
// No `shell` option on purpose: execa runs a Windows `.cmd` shim itself and escapes the arguments
|
|
167
|
+
// for cmd.exe, which the shell would receive unescaped.
|
|
185
168
|
function spawn_script(tsx_executable: string, script_arguments: Array<string>): number {
|
|
186
169
|
const result = execaSync(tsx_executable, script_arguments, {
|
|
187
170
|
stdio: 'inherit',
|
|
188
|
-
shell: should_use_shell(tsx_executable),
|
|
189
171
|
reject: false,
|
|
190
172
|
})
|
|
191
173
|
|
|
@@ -287,6 +269,7 @@ function declared(value: number | (() => number) | undefined): number | undefine
|
|
|
287
269
|
// without claiming a place. A command under a parent that already holds its cores claims nothing:
|
|
288
270
|
// `core_budget.with_command_reservation` reads the mark that parent set.
|
|
289
271
|
async function dispatch_entry(
|
|
272
|
+
command: string,
|
|
290
273
|
entry: CommandEntry,
|
|
291
274
|
subcommand_arguments: Array<string>,
|
|
292
275
|
): Promise<number> {
|
|
@@ -297,7 +280,7 @@ async function dispatch_entry(
|
|
|
297
280
|
return await core_budget.with_command_reservation(
|
|
298
281
|
weight,
|
|
299
282
|
async () => await run_entry(entry, subcommand_arguments),
|
|
300
|
-
{ memory_mb: declared(entry.memory_mb) },
|
|
283
|
+
{ memory_mb: declared(entry.memory_mb), command, is_unit: entry.is_unit_claim },
|
|
301
284
|
)
|
|
302
285
|
}
|
|
303
286
|
|
|
@@ -314,7 +297,7 @@ async function run_command(
|
|
|
314
297
|
const early_exit = pre_dispatch_exit(resolved, entry, subcommand_arguments, is_consumer)
|
|
315
298
|
if (early_exit !== undefined) return early_exit
|
|
316
299
|
|
|
317
|
-
return await dispatch_entry(entry, subcommand_arguments)
|
|
300
|
+
return await dispatch_entry(resolved, entry, subcommand_arguments)
|
|
318
301
|
}
|
|
319
302
|
|
|
320
303
|
const josh_logic = {
|
|
@@ -330,10 +313,11 @@ export { ALIASES, COMMAND_MAP } from './josh-command-map'
|
|
|
330
313
|
export { SPAWN_ERROR_EXIT_CODE } from '#scripts/lib/spawn-exit'
|
|
331
314
|
export { composite_arguments, USAGE_ERROR_EXIT_CODE } from './josh-composite-arguments'
|
|
332
315
|
export {
|
|
333
|
-
find_package_directory,
|
|
334
316
|
josh_logic,
|
|
335
317
|
resolve_alias,
|
|
336
318
|
resolve_tsx_executable,
|
|
337
319
|
resolve_tsx_runner,
|
|
338
320
|
UNKNOWN_COMMAND_EXIT_CODE,
|
|
339
321
|
}
|
|
322
|
+
|
|
323
|
+
export { find_package_directory } from './package-directory'
|
package/scripts/josh/josh.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { doctor_consumer } from '#scripts/doctor/doctor-consumer'
|
|
2
|
+
import { command_usage } from './command-usage'
|
|
2
3
|
import { find_package_directory, josh_logic, UNKNOWN_COMMAND_EXIT_CODE } from './josh-logic'
|
|
3
4
|
|
|
4
5
|
const ARGV_OFFSET = 2
|
|
@@ -12,10 +13,6 @@ const HELP_COMMANDS: ReadonlySet<string> = new Set(['help', '--help', '-h'])
|
|
|
12
13
|
// A bare `--all` in the command slot is a help request, not a command.
|
|
13
14
|
const ALL_FLAG = '--all'
|
|
14
15
|
|
|
15
|
-
function print_help(is_all: boolean, is_consumer: boolean): void {
|
|
16
|
-
console.info(josh_logic.format_help(is_all, is_consumer))
|
|
17
|
-
}
|
|
18
|
-
|
|
19
16
|
// Both halves go to stderr. The help listing is a diagnosis here, not the answer, and a shell
|
|
20
17
|
// wiring `--port $(josh port dev)` reads stdout alone, so a command name this kit cannot resolve
|
|
21
18
|
// has to leave that stream empty rather than substitute the whole toolkit index (#825).
|
|
@@ -24,6 +21,18 @@ function handle_unknown(cmd: string): never {
|
|
|
24
21
|
process.exit(1)
|
|
25
22
|
}
|
|
26
23
|
|
|
24
|
+
// `josh help <command>` prints that one command's usage — the text its reference page renders
|
|
25
|
+
// (#3932); a flag in the topic slot is still a listing request (`josh --help --all`).
|
|
26
|
+
function print_help(is_all: boolean, is_consumer: boolean, topic: string | undefined): void {
|
|
27
|
+
if (topic === undefined || topic.startsWith('-')) {
|
|
28
|
+
console.info(josh_logic.format_help(is_all, is_consumer))
|
|
29
|
+
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
console.info(command_usage.format_command_help(topic) ?? handle_unknown(topic))
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
// `process.exit` truncates a piped stdout at its buffer size, and the output at risk is the script's
|
|
28
37
|
// own — `scripts/gate/verification-gate.ts` writes its per-check blocks
|
|
29
38
|
// and its failure summary through this process, and sets `process.exitCode` rather than exiting for
|
|
@@ -44,7 +53,7 @@ async function main(): Promise<void> {
|
|
|
44
53
|
const is_consumer = doctor_consumer.is_kit_consumer(find_package_directory(process.cwd()))
|
|
45
54
|
|
|
46
55
|
if (!cmd || cmd === ALL_FLAG || HELP_COMMANDS.has(cmd)) {
|
|
47
|
-
print_help(is_all, is_consumer)
|
|
56
|
+
print_help(is_all, is_consumer, process.argv[ARGV_OFFSET + 1])
|
|
48
57
|
|
|
49
58
|
return
|
|
50
59
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
|
+
import { ancestor_directories } from '#scripts/lib/ancestor-directories'
|
|
3
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
4
|
+
|
|
5
|
+
// Resolve the kit package root by ascending to the nearest package.json. This works both
|
|
6
|
+
// from the bundled dist/josh.js (one level under the root) and from the tsx source at
|
|
7
|
+
// scripts/josh/ (two levels), so this file's depth no longer has to be hard-coded.
|
|
8
|
+
// A leaf apart from `josh-logic`, so a bundled command can import it without pulling the
|
|
9
|
+
// dispatcher's main-guarded closure into its single-file bundle.
|
|
10
|
+
function find_package_directory(start_directory: string): string {
|
|
11
|
+
return (
|
|
12
|
+
ancestor_directories.nearest(start_directory, (directory) =>
|
|
13
|
+
existsSync(package_manifest.manifest_path(directory)),
|
|
14
|
+
) ?? start_directory
|
|
15
|
+
)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { find_package_directory }
|
|
@@ -3,8 +3,8 @@ import { randomUUID } from 'node:crypto'
|
|
|
3
3
|
import { readFileSync, rmSync } from 'node:fs'
|
|
4
4
|
import { createServer, type Server } from 'node:net'
|
|
5
5
|
import path from 'node:path'
|
|
6
|
+
import { PLATFORM_TEMP_ROOT } from '#scripts/josh/platform-temporary'
|
|
6
7
|
import { PROBE_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
7
|
-
import { PLATFORM_TEMP_ROOT } from './platform-temporary'
|
|
8
8
|
|
|
9
9
|
// Whether the process a record names is still the one that wrote it.
|
|
10
10
|
//
|
|
@@ -30,7 +30,7 @@ import { PLATFORM_TEMP_ROOT } from './platform-temporary'
|
|
|
30
30
|
// `Tue Sep 8 09:15:33 2026` in one shell and `Tue Sep 8 02:15:33 2026` in another that exported
|
|
31
31
|
// `TZ=UTC` — and a writer and reader disagreeing about `TZ` would read a live process as a stranger.
|
|
32
32
|
// That failure is worse than the one this module fixes, because it fires on a gate that really is
|
|
33
|
-
// running: `unit-
|
|
33
|
+
// running: `unit-run-marker` would sweep the marker of a live run and put every suite back on the
|
|
34
34
|
// whole machine, and `bench-guard` would clear the caches out from under a running gate. The probe
|
|
35
35
|
// therefore pins `TZ` and `LC_ALL` rather than inheriting them.
|
|
36
36
|
|
|
@@ -237,11 +237,16 @@ function beacon_target(token: string): string | undefined {
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
// No status is a probe killed by its timeout or a signal — unknown, the same as its own timeout.
|
|
240
|
-
|
|
240
|
+
// `kill_after_ms` is a parameter so a test can ask what the probe itself reports for a socket
|
|
241
|
+
// without a loaded machine's slow start turning the answer into the timeout's.
|
|
242
|
+
function run_socket_probe(
|
|
243
|
+
target: string,
|
|
244
|
+
kill_after_ms: number = PROBE_TIMEOUT_MS,
|
|
245
|
+
): number | undefined {
|
|
241
246
|
return (
|
|
242
247
|
spawnSync(process.execPath, ['-e', SOCKET_PROBE_SOURCE, target], {
|
|
243
248
|
stdio: 'ignore',
|
|
244
|
-
timeout:
|
|
249
|
+
timeout: kill_after_ms,
|
|
245
250
|
}).status ?? undefined
|
|
246
251
|
)
|
|
247
252
|
}
|
|
@@ -359,6 +364,9 @@ function is_own_process(pid: number | undefined, recorded_start: string | undefi
|
|
|
359
364
|
}
|
|
360
365
|
|
|
361
366
|
const process_identity = {
|
|
367
|
+
PROBE_ENVIRONMENT,
|
|
368
|
+
START_PROBES,
|
|
369
|
+
START_TIME_FORMAT,
|
|
362
370
|
close_beacon,
|
|
363
371
|
is_live_beacon,
|
|
364
372
|
is_live_pid,
|
|
@@ -371,6 +379,7 @@ const process_identity = {
|
|
|
371
379
|
own_start,
|
|
372
380
|
read_start,
|
|
373
381
|
resolve_own_start,
|
|
382
|
+
run_socket_probe,
|
|
374
383
|
}
|
|
375
384
|
|
|
376
385
|
export { process_identity }
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { backlogrun_launch } from '#scripts/backlog/backlogrun-launch'
|
|
4
2
|
import { run_carry } from '#scripts/run/carry/run-carry'
|
|
5
|
-
import { josh_environment_file } from './josh-environment-file'
|
|
6
3
|
import { session_language, type Resolution } from './session-language'
|
|
7
4
|
|
|
8
5
|
// `josh session:lang` — say, on stdout, which language this session writes in, so a
|
|
@@ -43,7 +40,8 @@ const LIVE_PORTS: LivePorts = {
|
|
|
43
40
|
is_running: backlogrun_launch.is_running,
|
|
44
41
|
}
|
|
45
42
|
|
|
46
|
-
// The file load happens in `main`, on the command path only; the resolver reads
|
|
43
|
+
// The file load happens in `session-language-main.ts`, on the command path only; the resolver reads
|
|
44
|
+
// the environment.
|
|
47
45
|
// The line carries the value alone: what the language covers is `CLAUDE.md` → "Output language",
|
|
48
46
|
// already in context every turn, so repeating it here only spent context on each prompt. The default
|
|
49
47
|
// prints nothing — that resident line already names `ja`.
|
|
@@ -68,8 +66,7 @@ function prompt_lines(resolution: Resolution, is_live: boolean): Array<string> {
|
|
|
68
66
|
return [format_line(resolution), is_live ? BOARD_LINE : ''].filter((line) => line !== '')
|
|
69
67
|
}
|
|
70
68
|
|
|
71
|
-
async function
|
|
72
|
-
josh_environment_file.load_environment_file()
|
|
69
|
+
async function print_prompt_lines(): Promise<void> {
|
|
73
70
|
const lines = prompt_lines(resolve_session_lang(), await is_run_live())
|
|
74
71
|
|
|
75
72
|
for (const line of lines) console.info(line)
|
|
@@ -81,11 +78,10 @@ const session_language_cli = {
|
|
|
81
78
|
ENV_KEY,
|
|
82
79
|
format_line,
|
|
83
80
|
is_run_live,
|
|
81
|
+
print_prompt_lines,
|
|
84
82
|
prompt_lines,
|
|
85
83
|
resolve_session_lang,
|
|
86
84
|
}
|
|
87
85
|
|
|
88
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
89
|
-
|
|
90
86
|
export type { LivePorts }
|
|
91
87
|
export { session_language_cli }
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { josh_environment_file } from './josh-environment-file'
|
|
4
|
+
import { session_language_cli } from './session-language-cli'
|
|
5
|
+
|
|
6
|
+
// The `josh session:lang` entry and the `session-lang` hook bundle, kept apart from
|
|
7
|
+
// `session-language-cli.ts` because `metrics-logic.ts` imports that one: a bundle is one file, so a
|
|
8
|
+
// main guard there would fire for every command that carries it (joshuafolkken/kit#4186). `.env` is
|
|
9
|
+
// read here, inside the guard, so a developer's own `.env` cannot decide what the unit tests see.
|
|
10
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
11
|
+
josh_environment_file.load_environment_file()
|
|
12
|
+
await session_language_cli.print_prompt_lines()
|
|
13
|
+
}
|
|
@@ -24,7 +24,12 @@ function resolve_session_lang(): Resolution {
|
|
|
24
24
|
return { lang: DEFAULT_SESSION_LANG, is_default: true }
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
// `ja` and any regional form of it (`ja-JP`) is Japanese; every other language is the English fallback.
|
|
28
|
+
function is_japanese(lang: string): boolean {
|
|
29
|
+
return lang.toLowerCase().startsWith(DEFAULT_SESSION_LANG)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const session_language = { DEFAULT_SESSION_LANG, ENV_KEY, resolve_session_lang, is_japanese }
|
|
28
33
|
|
|
29
34
|
export type { Resolution }
|
|
30
35
|
export { session_language }
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { git_common_directory } from '#scripts/git/git-common-directory'
|
|
2
|
+
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
3
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
4
|
+
import { z } from 'zod'
|
|
5
|
+
import { stamp_file } from './stamp-file'
|
|
6
|
+
|
|
7
|
+
// An answer one josh process read from GitHub, kept for the next process to reuse while it is fresh
|
|
8
|
+
// (joshuafolkken/kit#4550).
|
|
9
|
+
//
|
|
10
|
+
// **Keyed to the repository's common git directory, so every work tree shares one record.** A
|
|
11
|
+
// backlogrun asks the same question from its drive, its arrival probe and every lane at once; keying on
|
|
12
|
+
// `PROJECT_ROOT` would give each work tree its own copy and each would read GitHub again.
|
|
13
|
+
//
|
|
14
|
+
// One record per slot: a different `key` replaces it rather than accumulating beside it, so the temp
|
|
15
|
+
// directory holds at most one file per slot however many keys a run walks through.
|
|
16
|
+
|
|
17
|
+
interface CacheSlot {
|
|
18
|
+
prefix: string
|
|
19
|
+
ttl_ms: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const record_schema = z.object({
|
|
23
|
+
key: z.string(),
|
|
24
|
+
saved_at: z.number(),
|
|
25
|
+
value: z.unknown(),
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
function slot_path(slot: CacheSlot): string {
|
|
29
|
+
return stamp_file.stamp_path(slot.prefix, git_common_directory.repository() ?? PROJECT_ROOT)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function is_fresh(saved_at: number, slot: CacheSlot, now_ms: number): boolean {
|
|
33
|
+
return saved_at <= now_ms && now_ms - saved_at < slot.ttl_ms
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function read_value(slot: CacheSlot, key: string, now_ms: number): unknown {
|
|
37
|
+
const raw = stamp_file.read_stamp_text(slot_path(slot))
|
|
38
|
+
const record = raw === undefined ? undefined : json_value.parse_with(raw, record_schema)
|
|
39
|
+
|
|
40
|
+
return record?.key === key && is_fresh(record.saved_at, slot, now_ms) ? record.value : undefined
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// `undefined` is a miss: no record, another key's record, a stale one, or one that does not parse.
|
|
44
|
+
function read<T>(
|
|
45
|
+
slot: CacheSlot,
|
|
46
|
+
key: string,
|
|
47
|
+
schema: z.ZodType<T>,
|
|
48
|
+
now_ms: number,
|
|
49
|
+
): T | undefined {
|
|
50
|
+
const parsed = schema.safeParse(read_value(slot, key, now_ms))
|
|
51
|
+
|
|
52
|
+
return parsed.success ? parsed.data : undefined
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// A write that fails leaves the next process to read GitHub itself — the answer this process already
|
|
56
|
+
// has is still right, so the failure is not its caller's to handle.
|
|
57
|
+
function write(slot: CacheSlot, key: string, value: unknown, now_ms: number): void {
|
|
58
|
+
try {
|
|
59
|
+
stamp_file.replace_stamp(slot_path(slot), { key, saved_at: now_ms, value })
|
|
60
|
+
} catch {
|
|
61
|
+
// The record is an optimization; a missing one costs one read.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The cached answer for `key`, or `compute`'s — stored only when it is defined, so a failed read is
|
|
66
|
+
// asked again by the next process rather than remembered for the whole TTL.
|
|
67
|
+
async function remember<T>(
|
|
68
|
+
request: { slot: CacheSlot; key: string; schema: z.ZodType<T> },
|
|
69
|
+
compute: () => Promise<T | undefined>,
|
|
70
|
+
now_ms: number = Date.now(),
|
|
71
|
+
): Promise<T | undefined> {
|
|
72
|
+
const cached = read(request.slot, request.key, request.schema, now_ms)
|
|
73
|
+
|
|
74
|
+
if (cached !== undefined) return cached
|
|
75
|
+
|
|
76
|
+
const value = await compute()
|
|
77
|
+
|
|
78
|
+
if (value !== undefined) write(request.slot, request.key, value, now_ms)
|
|
79
|
+
|
|
80
|
+
return value
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function clear(slot: CacheSlot): void {
|
|
84
|
+
stamp_file.remove_stamp(slot_path(slot))
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const shared_cache = { clear, read, remember, write }
|
|
88
|
+
|
|
89
|
+
export { shared_cache }
|
|
90
|
+
export type { CacheSlot }
|