@joshuafolkken/kit 1.1178.0 → 1.1229.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/.claude-plugin/plugin.json +1 -1
- package/.claude/settings.json +2 -2
- package/.claude/skills/dependency-update/SKILL.md +4 -8
- package/.claude/skills/epic-commands/SKILL.md +2 -2
- package/.claude/skills/epic-commands/epic-bundle.md +1 -1
- package/.claude/skills/workflow-commands/SKILL.md +2 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +6 -4
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +6 -2
- package/.claude/skills/workflow-commands/backlogrun-park.md +23 -2
- package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +4 -3
- package/.claude/skills/workflow-commands/backlogrun-steps.md +21 -13
- package/.claude/skills/workflow-commands/chain-rule.md +1 -1
- package/.claude/skills/workflow-commands/delegation.md +2 -2
- package/.claude/skills/workflow-commands/followup.md +5 -0
- package/.claude/skills/workflow-commands/fullrun-steps.md +1 -1
- package/.claude/skills/workflow-commands/halfrun.md +1 -1
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +1 -1
- package/.claude/skills/workflow-commands/observation-ledger.md +3 -3
- package/.claude/skills/workflow-commands/pre-gate-cut.md +6 -1
- package/.claude/skills/workflow-commands/prerequisite.md +2 -2
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +1 -1
- package/.codex/hooks.json +2 -2
- package/.cursorrules +6 -41
- package/.github/actions/setup-node/action.yml +1 -1
- package/.github/workflows/auto-tag.yml +3 -4
- package/.github/workflows/ci.yml +32 -31
- package/.github/workflows/dependabot-auto-merge.yml +13 -6
- package/.github/workflows/publish.yml +48 -4
- package/.github/workflows/sonar-qube.yml +3 -0
- package/.pnpmfile.mjs +4 -3
- package/.prettierignore +8 -2
- package/CLAUDE.md +18 -20
- package/README.md +26 -19
- package/SECURITY.md +15 -1
- package/dist/CLAUDE.md +18 -20
- package/dist/commands/document-section-cli.js +734 -0
- package/dist/hooks/audit-provision.js +346 -0
- package/dist/hooks/batch-guard.js +5 -4
- package/dist/hooks/{chunk-S6X6WYKR.js → chunk-55HHG5PX.js} +1210 -711
- package/dist/hooks/{chunk-ZAL3NRGL.js → chunk-5VMKCCC4.js} +25 -10
- package/dist/hooks/chunk-5VNDSNG3.js +12 -0
- package/dist/hooks/{chunk-32GQTL4F.js → chunk-6HJJXRBX.js} +4 -2
- package/dist/hooks/chunk-CDY4NFQG.js +15 -0
- package/dist/hooks/chunk-ELCN5LCH.js +135 -0
- package/dist/hooks/{chunk-VESKRQOF.js → chunk-F56MFS4B.js} +3 -3
- package/dist/hooks/{chunk-UAGLLIGZ.js → chunk-FIVDHQGT.js} +7 -6
- package/dist/hooks/{chunk-3V37IID6.js → chunk-JBBMAPC4.js} +23 -14
- package/dist/hooks/{chunk-G6KRCKEC.js → chunk-JUDKDCDP.js} +496 -378
- package/dist/hooks/{chunk-GDS5N2KB.js → chunk-NV2JRZZO.js} +718 -681
- package/dist/hooks/{chunk-VQLLNFNT.js → chunk-RNWHN5BP.js} +3 -3
- package/dist/hooks/{chunk-DO6NWWHU.js → chunk-TQNPDZNH.js} +4 -4
- package/dist/hooks/{chunk-I4XSL4TT.js → chunk-VC3PZPZO.js} +1 -1
- package/dist/hooks/codex-hook-adapter.js +14 -12
- package/dist/hooks/duplicate-read-guard.js +6 -5
- package/dist/hooks/format-edited.js +4 -3
- package/dist/hooks/inputs.json +217 -195
- package/dist/hooks/investigation-guard.js +6 -5
- package/dist/hooks/pretool-guard.js +12 -10
- package/dist/hooks/session-lang.js +2 -4
- package/dist/hooks/stop-guard.js +66 -58
- package/dist/josh.js +868 -74
- package/dist/version/index.d.ts +7 -2
- package/dist/version/index.js +152 -75
- package/eslint/base.js +23 -1
- package/eslint/rules/code-quality.js +3 -0
- package/eslint/rules/early-return-one-liner.js +98 -0
- package/eslint/rules/unicorn.js +16 -1
- package/package.json +7 -6
- package/pnpm-workspace.yaml +9 -4
- package/prettier/basic.d.ts +3 -1
- package/prettier/index.d.ts +3 -1
- package/prettier/static.d.ts +3 -1
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +4 -4
- package/prompts/collaboration-workflow/glossary.md +1 -1
- package/prompts/collaboration-workflow/operating-rules.md +17 -9
- package/prompts/collaboration-workflow/overview.md +2 -2
- package/prompts/collaboration-workflow/principles.md +14 -12
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +6 -6
- package/prompts/collaboration-workflow/shell-body.md +6 -6
- package/prompts/collaboration-workflow/turn-batching.md +1 -1
- package/prompts/collaboration-workflow/upstream-interrupt.md +12 -2
- package/prompts/collaboration-workflow/wip-cap.md +10 -10
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +1 -1
- package/scripts/agent/agent-headless.ts +29 -0
- package/scripts/agent/agent-launch-environment.ts +6 -2
- package/scripts/agent/codex-agent-argv.ts +2 -1
- package/scripts/auto-ok/auto-ok-cli.ts +1 -1
- package/scripts/backlog/backlog-arrival.ts +3 -3
- package/scripts/backlog/backlog-budget.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +135 -0
- package/scripts/backlog/backlog-drive-cli.ts +11 -137
- package/scripts/backlog/backlog-drive-launch.ts +39 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +3 -5
- package/scripts/backlog/backlog-drive-named.ts +3 -3
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-owner.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +1 -1
- package/scripts/backlog/backlog-drive.ts +1 -1
- package/scripts/backlog/backlog-next.ts +16 -5
- package/scripts/backlog/backlog-offer-cli.ts +6 -6
- package/scripts/backlog/backlog-offer.ts +1 -1
- package/scripts/backlog/backlog-plan-cli.ts +1 -1
- package/scripts/backlog/backlog-pool.ts +57 -11
- package/scripts/backlog/backlog-ready.ts +1 -1
- package/scripts/backlog/backlog-scope.ts +1 -1
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +3 -1
- package/scripts/build/build-commands.ts +66 -0
- package/scripts/build/build-hooks.ts +2 -1
- package/scripts/build/build-library.ts +12 -3
- package/scripts/build/build.ts +70 -0
- package/scripts/build/local-bin.ts +3 -13
- package/scripts/delegation/investigation-reads.ts +3 -1
- package/scripts/discovery/repo-origin.ts +5 -5
- package/scripts/doctor/doctor-consumer.ts +2 -2
- package/scripts/doctor/doctor-io.ts +2 -3
- package/scripts/document/capped-print-part.ts +30 -0
- package/scripts/document/capped-print.ts +3 -4
- package/scripts/document/document-byte-budget.ts +11 -2
- package/scripts/document/document-scan.ts +117 -0
- package/scripts/document/document-section.ts +143 -16
- package/scripts/document/entry-read-budget.ts +5 -3
- package/scripts/document/entry-read-set.ts +10 -89
- package/scripts/document/read-set-cost.ts +98 -0
- package/scripts/epic/epic-add-body.ts +1 -0
- package/scripts/epic/epic-audit-checks.ts +1 -1
- package/scripts/epic/epic-audit-rationale.ts +4 -3
- package/scripts/epic/epic-bundle-cli.ts +14 -3
- package/scripts/epic/epic-bundle-poll.ts +41 -0
- package/scripts/epic/epic-busy.ts +1 -1
- package/scripts/epic/epic-candidate-confirm.ts +3 -2
- package/scripts/epic/epic-classify.ts +1 -1
- package/scripts/epic/epic-cli-argv.ts +78 -46
- package/scripts/epic/epic-cli-remove.ts +11 -19
- package/scripts/epic/epic-cli.ts +74 -73
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +1 -1
- package/scripts/epic/epic-cross-repo.ts +5 -5
- package/scripts/epic/epic-graph.ts +1 -1
- package/scripts/epic/epic-index.ts +1 -1
- package/scripts/epic/epic-issue.ts +2 -6
- package/scripts/epic/epic-lane-offer.ts +2 -2
- package/scripts/epic/epic-next.ts +29 -42
- package/scripts/epic/epic-solo-stale.ts +1 -1
- package/scripts/epic/epic-triage.ts +8 -4
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/followup/git-followup-finish.ts +2 -2
- package/scripts/followup/git-followup-label.ts +2 -2
- package/scripts/followup/git-followup-merged.ts +2 -2
- package/scripts/followup/git-pr-followup-checks.ts +142 -0
- package/scripts/followup/git-pr-followup.ts +4 -129
- package/scripts/gate/core-budget.ts +69 -1
- package/scripts/gate/gate-plan.ts +47 -7
- package/scripts/gate/gate-skip.ts +38 -7
- package/scripts/gate/hook-gate-reuse.ts +12 -10
- package/scripts/gate/pre-commit-type-check.ts +4 -1
- package/scripts/gate/project-checks.ts +6 -9
- package/scripts/gate/type-check-step.ts +2 -3
- package/scripts/gate/verification-gate.ts +27 -8
- package/scripts/gh/git-gh-api-path.ts +2 -2
- package/scripts/gh/git-gh-issue-rest.ts +3 -3
- package/scripts/gh/git-gh-issue-write.ts +53 -7
- package/scripts/gh/git-gh-pr-read.ts +64 -19
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr.ts +5 -1
- package/scripts/gh/git-pr-ai-review.ts +1 -1
- package/scripts/gh/git-pr-checks-eval.ts +1 -3
- package/scripts/gh/git-pr-checks-parse.ts +1 -1
- package/scripts/gh/git-pr-checks-watch.ts +6 -5
- package/scripts/gh/git-pr-checks.ts +7 -5
- package/scripts/gh/git-pr-coderabbit.ts +1 -1
- package/scripts/gh/git-pr-error.ts +1 -3
- package/scripts/gh/git-pr.ts +9 -13
- package/scripts/gh/github-issue-url.ts +2 -2
- package/scripts/git/constants.ts +2 -6
- package/scripts/git/git-command.ts +20 -218
- package/scripts/git/git-diff-reads.ts +225 -0
- package/scripts/git/git-error.ts +4 -12
- package/scripts/git/git-pre-push-hook.ts +139 -0
- package/scripts/git/git-prompt.ts +2 -6
- package/scripts/git/git-spawn-sync.ts +3 -1
- package/scripts/git/git-spawn.ts +1 -1
- package/scripts/git/git-staging.ts +4 -6
- package/scripts/git/git-status.ts +3 -9
- package/scripts/hooks/codex-hook-adapter.ts +1 -1
- package/scripts/hooks/edited-cspell.ts +2 -4
- package/scripts/hooks/format-edited-file.ts +3 -12
- package/scripts/hooks/pre-push-unit.ts +31 -9
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/run-hook.sh +5 -4
- package/scripts/hooks/stop-guard.ts +5 -3
- package/scripts/init/init-actions.ts +0 -5
- package/scripts/init/init-ai-copy.ts +13 -2
- package/scripts/init/init-logic-json-merge.ts +19 -0
- package/scripts/init/init-logic-secretlint.ts +7 -7
- package/scripts/init/init-logic-workspace.ts +41 -2
- package/scripts/init/init-logic.ts +16 -26
- package/scripts/init/init.ts +5 -15
- package/scripts/init/initial-commit.ts +4 -4
- package/scripts/init/kit-development-versions.ts +40 -0
- package/scripts/init/kit-setup-state.ts +2 -2
- package/scripts/init/start-exec.ts +68 -19
- package/scripts/init/start-setup-pr.ts +9 -9
- package/scripts/init/start-steps.ts +6 -10
- package/scripts/issue/defect-rate-cli.ts +1 -1
- package/scripts/issue/git-next-issues.ts +1 -1
- package/scripts/issue/issue-auto-ok.ts +1 -1
- package/scripts/issue/issue-backlinks-cli.ts +2 -2
- package/scripts/issue/issue-backlinks.ts +9 -9
- package/scripts/issue/issue-comment-cli.ts +19 -13
- package/scripts/issue/issue-file-cli.ts +45 -18
- package/scripts/issue/issue-file.ts +24 -1
- package/scripts/issue/issue-scout-closed.ts +1 -1
- package/scripts/issue/issue-state-cli.ts +30 -74
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-command-types.ts +11 -0
- package/scripts/josh/josh-commands-ai.ts +4 -4
- package/scripts/josh/josh-commands-backlog.ts +4 -1
- package/scripts/josh/josh-commands-development.ts +10 -0
- package/scripts/josh/josh-commands-document.ts +1 -0
- package/scripts/josh/josh-commands-lane.ts +22 -0
- package/scripts/josh/josh-commands-maintenance.ts +4 -4
- package/scripts/josh/josh-commands-run.ts +12 -7
- package/scripts/josh/josh-in-process.ts +28 -9
- package/scripts/josh/josh-logic.ts +33 -15
- package/scripts/josh/process-identity.ts +1 -3
- package/scripts/josh/session-language-cli.ts +3 -4
- package/scripts/lane/lane-await.ts +5 -1
- package/scripts/lane/lane-child-invocation.ts +2 -2
- package/scripts/lane/lane-cli.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +14 -10
- package/scripts/lane/lane-environment.ts +5 -1
- package/scripts/lane/lane-handoff.ts +1 -1
- package/scripts/lane/lane-install.ts +2 -13
- package/scripts/lane/lane-launch-cli.ts +15 -1
- package/scripts/lane/lane-ledger.ts +145 -0
- package/scripts/lane/lane-leftover.ts +1 -1
- package/scripts/lane/lane-load.ts +108 -0
- package/scripts/lane/lane-measure-cli.ts +149 -0
- package/scripts/lane/lane-occupancy.ts +3 -0
- package/scripts/lane/lane-reap.ts +1 -3
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-stats.ts +224 -0
- package/scripts/lane/lane-vacant.ts +36 -0
- package/scripts/lane/openai-lane-ship.ts +2 -2
- package/scripts/lane/openai-lane-supervisor-owner.ts +180 -0
- package/scripts/lane/openai-lane-supervisor.ts +7 -165
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +35 -0
- package/scripts/lib/animation-helpers.ts +2 -2
- package/scripts/lib/buffered-process.ts +3 -7
- package/scripts/lib/cli-flags.ts +71 -1
- package/scripts/lib/spawn-exit.ts +2 -2
- package/scripts/lib/timeouts.ts +35 -2
- package/scripts/lines/line-budget.ts +4 -6
- package/scripts/notify/telegram-test.ts +6 -0
- package/scripts/observations/observation-ledger-line.ts +6 -6
- package/scripts/observations/observation-ledger-migrate.ts +55 -4
- package/scripts/observations/observation-ledger.ts +26 -7
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/propagate/propagate-git.ts +1 -1
- package/scripts/propagate/propagate-publish.ts +2 -2
- package/scripts/propagate/propagate-steps.ts +20 -15
- package/scripts/propagate/propagate.ts +36 -27
- package/scripts/refactor/import-graph.ts +18 -1
- package/scripts/refactor/refactor-lint.ts +4 -4
- package/scripts/repo/repository-labels.ts +2 -2
- package/scripts/repo/required-checks-logic.ts +1 -3
- package/scripts/review/live-evidence.ts +2 -4
- package/scripts/review/review-brief-cli.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +1 -1
- package/scripts/review/review-findings-cli.ts +1 -3
- package/scripts/rules/decision-oracle-batch.ts +128 -0
- package/scripts/rules/decision-oracle-tokens.ts +21 -0
- package/scripts/rules/decision-oracle.ts +8 -120
- package/scripts/rules/delivered-rules.ts +26 -182
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/early-heartbeat.ts +3 -3
- package/scripts/rules/git-argv.ts +1 -1
- package/scripts/rules/git-force.ts +1 -1
- package/scripts/rules/implementation-cut.ts +2 -2
- package/scripts/rules/index-guard.ts +1 -1
- package/scripts/rules/issue-comments.ts +118 -0
- package/scripts/rules/{issue-fold.ts → issue-fold-rule.ts} +2 -2
- package/scripts/rules/lane-background.ts +2 -2
- package/scripts/rules/lane-park.ts +18 -0
- package/scripts/rules/lane-split-park.ts +128 -0
- package/scripts/rules/oracle-firing.ts +1 -1
- package/scripts/rules/poll-loop.ts +1 -1
- package/scripts/rules/pre-gate-cut.ts +1 -1
- package/scripts/rules/protected-files.ts +59 -4
- package/scripts/rules/{run-tail.ts → run-tail-rule.ts} +2 -2
- package/scripts/rules/shell-body-trigger.ts +1 -1
- package/scripts/rules/stop-rules.ts +18 -7
- package/scripts/rules/test-declared-commit.ts +4 -4
- package/scripts/rules/wip-cap.ts +63 -0
- package/scripts/run/{run-carry-args.ts → carry/run-carry-args.ts} +37 -13
- package/scripts/run/{run-carry-change.ts → carry/run-carry-change.ts} +29 -7
- package/scripts/run/{run-carry-cli.ts → carry/run-carry-cli.ts} +4 -6
- package/scripts/run/{run-carry.ts → carry/run-carry.ts} +1 -1
- package/scripts/run/{run-cut-args.ts → cut/run-cut-args.ts} +1 -1
- package/scripts/run/{run-cut-cli.ts → cut/run-cut-cli.ts} +2 -2
- package/scripts/run/{run-cut.ts → cut/run-cut.ts} +1 -1
- package/scripts/run/{run-entry-cli.ts → entry/run-entry-cli.ts} +11 -11
- package/scripts/run/{run-entry.ts → entry/run-entry.ts} +2 -2
- package/scripts/run/{run-event-scope.ts → event/run-event-scope.ts} +1 -1
- package/scripts/run/{run-event-stream-emit.ts → event/run-event-stream-emit.ts} +1 -1
- package/scripts/run/{run-event-stream.ts → event/run-event-stream.ts} +16 -2
- package/scripts/run/{run-hold-cli.ts → hold/run-hold-cli.ts} +5 -5
- package/scripts/run/{run-merge-cli.ts → merge/run-merge-cli.ts} +10 -5
- package/scripts/run/{run-merge-steps.ts → merge/run-merge-steps.ts} +53 -5
- package/scripts/run/{run-merge.ts → merge/run-merge.ts} +1 -1
- package/scripts/run/{run-progress-cli.ts → progress/run-progress-cli.ts} +1 -1
- package/scripts/run/{run-progress-config.ts → progress/run-progress-config.ts} +2 -17
- package/scripts/run/{run-progress-read.ts → progress/run-progress-read.ts} +5 -5
- package/scripts/run/{run-progress.ts → progress/run-progress.ts} +1 -1
- package/scripts/run/{run-review-steps.ts → review/run-review-steps.ts} +2 -3
- package/scripts/run/run-ending.ts +2 -2
- package/scripts/run/run-halfrun-resume.ts +6 -1
- package/scripts/run/run-headless.ts +1 -1
- package/scripts/run/run-invocation.ts +85 -84
- package/scripts/run/run-liveness.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +1 -1
- package/scripts/run/run-preflight.ts +6 -6
- package/scripts/run/run-prep-cli.ts +1 -1
- package/scripts/run/run-prrun-resume.ts +1 -1
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +2 -2
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +3 -3
- package/scripts/run/run-step.ts +2 -2
- package/scripts/run/run-stop-notify.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +2 -2
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +5 -3
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/run/{run-ship-cli.ts → ship/run-ship-cli.ts} +2 -2
- package/scripts/run/{run-ship-detach.ts → ship/run-ship-detach.ts} +3 -3
- package/scripts/run/ship/run-ship-lock.ts +50 -0
- package/scripts/run/{run-ship-preflight.ts → ship/run-ship-preflight.ts} +6 -2
- package/scripts/run/{run-ship-probe.ts → ship/run-ship-probe.ts} +2 -2
- package/scripts/run/{run-ship-return.ts → ship/run-ship-return.ts} +4 -3
- package/scripts/run/{run-ship-review-steps.ts → ship/run-ship-review-steps.ts} +3 -3
- package/scripts/run/{run-ship-scoped.ts → ship/run-ship-scoped.ts} +10 -1
- package/scripts/run/{run-ship-steps.ts → ship/run-ship-steps.ts} +11 -12
- package/scripts/run/ship/run-ship-stop-text.ts +13 -0
- package/scripts/run/{run-ship-sync.ts → ship/run-ship-sync.ts} +25 -11
- package/scripts/run/{run-tidy-lanes.ts → tidy/run-tidy-lanes.ts} +1 -1
- package/scripts/run/{run-wake-cli.ts → wake/run-wake-cli.ts} +23 -8
- package/scripts/run/{run-wake-describe.ts → wake/run-wake-describe.ts} +3 -3
- package/scripts/run/{run-wake-driver.ts → wake/run-wake-driver.ts} +59 -8
- package/scripts/run/{run-wake-handoff.ts → wake/run-wake-handoff.ts} +1 -1
- package/scripts/run/{run-wake-loop.ts → wake/run-wake-loop.ts} +8 -2
- package/scripts/run/wake/run-wake-restart.ts +58 -0
- package/scripts/run/{run-wake-session.ts → wake/run-wake-session.ts} +3 -3
- package/scripts/run/{run-wake.ts → wake/run-wake.ts} +1 -1
- package/scripts/safe-chain/preinstall-command.ts +20 -21
- package/scripts/safe-chain/project-config.ts +19 -15
- package/scripts/sync/sync-ai-files.ts +1 -1
- package/scripts/sync/sync-configs.ts +2 -1
- package/scripts/sync/sync.ts +15 -2
- package/scripts/test/unit-worker-share.ts +1 -0
- package/scripts/time-runtime/time-background.ts +5 -1
- package/scripts/time-runtime/time-instant.ts +3 -1
- package/scripts/time-runtime/time-spans.ts +6 -139
- package/scripts/time-runtime/time-tool-call.ts +160 -0
- package/scripts/version/effective-upstream.ts +2 -20
- package/scripts/version/latest-corepack.ts +17 -17
- package/scripts/version/latest-regression.ts +1 -1
- package/scripts/version/latest-update.ts +4 -4
- package/scripts/version/npm-registry.ts +20 -5
- package/scripts/version/publishable-range-check.ts +2 -2
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +48 -38
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +40 -0
- package/scripts/version/upgrade-shell-command.ts +48 -8
- package/scripts/version/version-check-logic.ts +23 -14
- package/scripts/version/version-commands.ts +23 -11
- package/scripts/version/version-remote.ts +28 -13
- package/templates/pnpm-workspace.basic.yaml +4 -0
- package/templates/workflows/dependabot-auto-merge.yml +5 -5
- package/templates/workflows/github-release.yml +2 -0
- package/scripts/build/build-config-merge.ts +0 -27
- package/scripts/build/build-managed-marker.ts +0 -27
- package/scripts/build/build-self-sync-guard.ts +0 -27
- package/scripts/build/build-version.ts +0 -26
- package/scripts/version/preinstall-version-update.ts +0 -86
- /package/scripts/git/{schemas.ts → git-schemas.ts} +0 -0
- /package/scripts/overrides/{schemas.ts → overrides-schemas.ts} +0 -0
- /package/scripts/run/{run-carry-conversation.ts → carry/run-carry-conversation.ts} +0 -0
- /package/scripts/run/{run-carry-reclaim.ts → carry/run-carry-reclaim.ts} +0 -0
- /package/scripts/run/{run-carry-stash.ts → carry/run-carry-stash.ts} +0 -0
- /package/scripts/run/{run-carry-streak.ts → carry/run-carry-streak.ts} +0 -0
- /package/scripts/run/{run-cut-handoff.ts → cut/run-cut-handoff.ts} +0 -0
- /package/scripts/run/{run-cut-report.ts → cut/run-cut-report.ts} +0 -0
- /package/scripts/run/{run-entry-stop.ts → entry/run-entry-stop.ts} +0 -0
- /package/scripts/run/{run-event-cli.ts → event/run-event-cli.ts} +0 -0
- /package/scripts/run/{run-event-follow.ts → event/run-event-follow.ts} +0 -0
- /package/scripts/run/{run-event-render.ts → event/run-event-render.ts} +0 -0
- /package/scripts/run/{run-event-watch.ts → event/run-event-watch.ts} +0 -0
- /package/scripts/run/{run-hold.ts → hold/run-hold.ts} +0 -0
- /package/scripts/run/{run-progress-args.ts → progress/run-progress-args.ts} +0 -0
- /package/scripts/run/{run-progress-clock.ts → progress/run-progress-clock.ts} +0 -0
- /package/scripts/run/{run-review-cli.ts → review/run-review-cli.ts} +0 -0
- /package/scripts/run/{run-review.ts → review/run-review.ts} +0 -0
- /package/scripts/run/{run-ship-next.ts → ship/run-ship-next.ts} +0 -0
- /package/scripts/run/{run-ship-pre-detach.ts → ship/run-ship-pre-detach.ts} +0 -0
- /package/scripts/run/{run-ship-review.ts → ship/run-ship-review.ts} +0 -0
- /package/scripts/run/{run-ship-stage.ts → ship/run-ship-stage.ts} +0 -0
- /package/scripts/run/{run-ship.ts → ship/run-ship.ts} +0 -0
- /package/scripts/run/{run-tidy-cli.ts → tidy/run-tidy-cli.ts} +0 -0
- /package/scripts/run/{run-tidy-stashes.ts → tidy/run-tidy-stashes.ts} +0 -0
- /package/scripts/run/{run-tidy.ts → tidy/run-tidy.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
hook_decision
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6HJJXRBX.js";
|
|
4
4
|
import {
|
|
5
5
|
cost_blocks,
|
|
6
6
|
cost_transcript,
|
|
@@ -8,10 +8,25 @@ import {
|
|
|
8
8
|
time_bundle_call,
|
|
9
9
|
time_shell,
|
|
10
10
|
time_spans
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-55HHG5PX.js";
|
|
12
12
|
|
|
13
13
|
// scripts/delegation/investigation-reads.ts
|
|
14
|
+
import path2 from "node:path";
|
|
15
|
+
|
|
16
|
+
// scripts/document/capped-print-part.ts
|
|
14
17
|
import path from "node:path";
|
|
18
|
+
var DIRECTORY_PREFIX = "josh-capped-print-";
|
|
19
|
+
var PART_PREFIX = "part-";
|
|
20
|
+
var PART_SUFFIX = ".md";
|
|
21
|
+
var PART_PATTERN = /^part-[1-9]\d*\.md$/u;
|
|
22
|
+
function part_name(index) {
|
|
23
|
+
return `${PART_PREFIX}${String(index + 1)}${PART_SUFFIX}`;
|
|
24
|
+
}
|
|
25
|
+
function is_part_file(absolute) {
|
|
26
|
+
const parent = path.basename(path.dirname(absolute));
|
|
27
|
+
return parent.startsWith(DIRECTORY_PREFIX) && PART_PATTERN.test(path.basename(absolute));
|
|
28
|
+
}
|
|
29
|
+
var capped_print_part = { DIRECTORY_PREFIX, part_name, is_part_file };
|
|
15
30
|
|
|
16
31
|
// scripts/delegation/delegation-policy.ts
|
|
17
32
|
var DELEGATE_VERDICT = "delegate";
|
|
@@ -165,18 +180,18 @@ var INSTRUCTION_PATHS = ["prompts", ".claude/skills"];
|
|
|
165
180
|
var INSTRUCTION_FILES = /* @__PURE__ */ new Set(["CLAUDE.md", "AGENTS.md", "GEMINI.md"]);
|
|
166
181
|
var REPOSITORY_ROOT = process.cwd();
|
|
167
182
|
function resolved(target) {
|
|
168
|
-
return
|
|
183
|
+
return path2.resolve(REPOSITORY_ROOT, target);
|
|
169
184
|
}
|
|
170
185
|
function repository_relative(absolute) {
|
|
171
|
-
return
|
|
186
|
+
return path2.relative(REPOSITORY_ROOT, absolute);
|
|
172
187
|
}
|
|
173
188
|
function is_instruction_document(target) {
|
|
174
189
|
const relative = repository_relative(resolved(target));
|
|
175
|
-
const segments = relative.split(
|
|
176
|
-
return INSTRUCTION_FILES.has(segments.at(-1) ?? "") || INSTRUCTION_PATHS.some((prefix) => relative.startsWith(`${prefix}${
|
|
190
|
+
const segments = relative.split(path2.sep);
|
|
191
|
+
return INSTRUCTION_FILES.has(segments.at(-1) ?? "") || INSTRUCTION_PATHS.some((prefix) => relative.startsWith(`${prefix}${path2.sep}`));
|
|
177
192
|
}
|
|
178
193
|
var SESSION_TEMP_SEGMENT = /^claude-\d+$/u;
|
|
179
|
-
var SESSION_STATE_SEGMENTS = cost_transcript.TRANSCRIPT_ROOT.split(
|
|
194
|
+
var SESSION_STATE_SEGMENTS = cost_transcript.TRANSCRIPT_ROOT.split(path2.sep);
|
|
180
195
|
var HARNESS_OUTPUT_DIRECTORY = "tasks";
|
|
181
196
|
var HARNESS_OUTPUT_EXTENSION = ".output";
|
|
182
197
|
var FILE_SEGMENT_INDEX = -1;
|
|
@@ -192,9 +207,9 @@ function is_outside_repository(absolute) {
|
|
|
192
207
|
}
|
|
193
208
|
function is_session_artifact(target) {
|
|
194
209
|
const absolute = resolved(target);
|
|
195
|
-
const segments = absolute.split(
|
|
210
|
+
const segments = absolute.split(path2.sep);
|
|
196
211
|
if (!is_outside_repository(absolute)) return false;
|
|
197
|
-
return segments.some((_segment, index) => has_state_root(segments, index)) || is_harness_output(segments);
|
|
212
|
+
return segments.some((_segment, index) => has_state_root(segments, index)) || is_harness_output(segments) || capped_print_part.is_part_file(absolute);
|
|
198
213
|
}
|
|
199
214
|
function is_subject_file(target) {
|
|
200
215
|
return !is_instruction_document(target) && !is_session_artifact(target);
|
|
@@ -291,7 +306,7 @@ function is_rearmed(tally, refused_at_ms) {
|
|
|
291
306
|
return is_at_threshold(tally.pending_since) || is_at_search_threshold(tally.searches_since);
|
|
292
307
|
}
|
|
293
308
|
function is_unit_transcript(transcript) {
|
|
294
|
-
return transcript.split(
|
|
309
|
+
return transcript.split(path2.sep).includes(cost_transcript.UNIT_DIRECTORY);
|
|
295
310
|
}
|
|
296
311
|
function is_unit_run(run) {
|
|
297
312
|
return run !== void 0 && is_unit_transcript(run.transcript);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FETCH_TIMEOUT_MS
|
|
3
|
+
} from "./chunk-ELCN5LCH.js";
|
|
4
|
+
|
|
5
|
+
// scripts/lib/timed-fetch.ts
|
|
6
|
+
async function timed_fetch(url, init = {}, timeout_ms = FETCH_TIMEOUT_MS) {
|
|
7
|
+
return await fetch(url, { ...init, signal: AbortSignal.timeout(timeout_ms) });
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
timed_fetch
|
|
12
|
+
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
lane_paths,
|
|
3
|
-
stamp_file,
|
|
4
3
|
time_density_hook,
|
|
5
4
|
time_hook_transcript
|
|
6
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-55HHG5PX.js";
|
|
7
6
|
import {
|
|
8
7
|
josh_environment_file
|
|
9
8
|
} from "./chunk-WPALEIRX.js";
|
|
9
|
+
import {
|
|
10
|
+
stamp_file
|
|
11
|
+
} from "./chunk-ELCN5LCH.js";
|
|
10
12
|
|
|
11
13
|
// scripts/josh/hook-decision.ts
|
|
12
14
|
import { z } from "zod";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// scripts/lib/error-message.ts
|
|
2
|
+
function message_of(error) {
|
|
3
|
+
return error instanceof Error ? error.message : String(error);
|
|
4
|
+
}
|
|
5
|
+
var DEBUG_ENV_KEY = "JOSH_DEBUG";
|
|
6
|
+
function trace_swallowed(where, error) {
|
|
7
|
+
if ((process.env[DEBUG_ENV_KEY] ?? "").trim() === "") return;
|
|
8
|
+
process.stderr.write(`josh debug: ${where}: ${message_of(error)}
|
|
9
|
+
`);
|
|
10
|
+
}
|
|
11
|
+
var error_text = { message_of, trace_swallowed };
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
error_text
|
|
15
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// scripts/init/init-paths.ts
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
var PACKAGE_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
5
|
+
var PROJECT_ROOT = process.cwd();
|
|
6
|
+
|
|
7
|
+
// scripts/josh/stamp-file.ts
|
|
8
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
9
|
+
import { lstatSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
10
|
+
import path2 from "node:path";
|
|
11
|
+
|
|
12
|
+
// scripts/josh/platform-temporary.ts
|
|
13
|
+
import { accessSync, constants } from "node:fs";
|
|
14
|
+
import { tmpdir } from "node:os";
|
|
15
|
+
var POSIX_TEMP_ROOT = "/tmp";
|
|
16
|
+
var WINDOWS_PLATFORM = "win32";
|
|
17
|
+
function is_writable_directory(directory) {
|
|
18
|
+
try {
|
|
19
|
+
accessSync(directory, constants.W_OK);
|
|
20
|
+
return true;
|
|
21
|
+
} catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function resolve_temporary_root(platform, can_write = is_writable_directory) {
|
|
26
|
+
if (platform === WINDOWS_PLATFORM) return tmpdir();
|
|
27
|
+
return can_write(POSIX_TEMP_ROOT) ? POSIX_TEMP_ROOT : tmpdir();
|
|
28
|
+
}
|
|
29
|
+
var TEMP_ROOT_KEY = "JOSH_TEMP_ROOT";
|
|
30
|
+
function temporary_root(override, platform) {
|
|
31
|
+
return override === void 0 || override === "" ? resolve_temporary_root(platform) : override;
|
|
32
|
+
}
|
|
33
|
+
var PLATFORM_TEMP_ROOT = temporary_root(process.env[TEMP_ROOT_KEY], process.platform);
|
|
34
|
+
|
|
35
|
+
// scripts/josh/stamp-file.ts
|
|
36
|
+
var HASH_ALGORITHM = "sha256";
|
|
37
|
+
var STAMP_SUFFIX = ".json";
|
|
38
|
+
var STAMP_KEY_LENGTH = 16;
|
|
39
|
+
var STAMP_FILE_MODE = 384;
|
|
40
|
+
var STAMP_WRITE_FLAG = "wx";
|
|
41
|
+
var STAMP_CREATE_FLAG = STAMP_WRITE_FLAG;
|
|
42
|
+
var EXISTS_ERROR_CODE = "EEXIST";
|
|
43
|
+
var ACCOUNT_KEY_SEPARATOR = ":";
|
|
44
|
+
function digest(content) {
|
|
45
|
+
return createHash(HASH_ALGORITHM).update(content).digest("hex");
|
|
46
|
+
}
|
|
47
|
+
function account_key() {
|
|
48
|
+
return String(process.getuid?.() ?? "");
|
|
49
|
+
}
|
|
50
|
+
function stamp_path(prefix, root = PACKAGE_DIR, suffix = STAMP_SUFFIX) {
|
|
51
|
+
const key = digest(`${account_key()}${ACCOUNT_KEY_SEPARATOR}${root}`).slice(0, STAMP_KEY_LENGTH);
|
|
52
|
+
return path2.join(PLATFORM_TEMP_ROOT, `${prefix}${key}${suffix}`);
|
|
53
|
+
}
|
|
54
|
+
function write_exclusively(target, content) {
|
|
55
|
+
rmSync(target, { force: true });
|
|
56
|
+
writeFileSync(target, content, { flag: STAMP_WRITE_FLAG, mode: STAMP_FILE_MODE });
|
|
57
|
+
return target;
|
|
58
|
+
}
|
|
59
|
+
function write_stamp(target, payload) {
|
|
60
|
+
return write_exclusively(target, JSON.stringify(payload));
|
|
61
|
+
}
|
|
62
|
+
function replace_stamp(target, payload) {
|
|
63
|
+
const temporary = `${target}.${String(process.pid)}.${randomUUID()}`;
|
|
64
|
+
try {
|
|
65
|
+
writeFileSync(temporary, JSON.stringify(payload), {
|
|
66
|
+
flag: STAMP_CREATE_FLAG,
|
|
67
|
+
mode: STAMP_FILE_MODE
|
|
68
|
+
});
|
|
69
|
+
renameSync(temporary, target);
|
|
70
|
+
return target;
|
|
71
|
+
} finally {
|
|
72
|
+
rmSync(temporary, { force: true });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function write_text_stamp(target, text) {
|
|
76
|
+
return write_exclusively(target, text);
|
|
77
|
+
}
|
|
78
|
+
function create_stamp(target, payload) {
|
|
79
|
+
try {
|
|
80
|
+
writeFileSync(target, JSON.stringify(payload), {
|
|
81
|
+
flag: STAMP_CREATE_FLAG,
|
|
82
|
+
mode: STAMP_FILE_MODE
|
|
83
|
+
});
|
|
84
|
+
return true;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
if (error.code === EXISTS_ERROR_CODE) return false;
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function remove_stamp(target) {
|
|
91
|
+
rmSync(target, { force: true });
|
|
92
|
+
}
|
|
93
|
+
function is_own_regular_file(source) {
|
|
94
|
+
const stats = lstatSync(source);
|
|
95
|
+
if (!stats.isFile()) return false;
|
|
96
|
+
const uid = process.getuid?.();
|
|
97
|
+
return uid === void 0 || stats.uid === uid;
|
|
98
|
+
}
|
|
99
|
+
function read_stamp_text(source) {
|
|
100
|
+
try {
|
|
101
|
+
if (!is_own_regular_file(source)) return void 0;
|
|
102
|
+
return readFileSync(source, "utf8");
|
|
103
|
+
} catch {
|
|
104
|
+
return void 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
var stamp_file = {
|
|
108
|
+
create_stamp,
|
|
109
|
+
digest,
|
|
110
|
+
is_own_regular_file,
|
|
111
|
+
read_stamp_text,
|
|
112
|
+
replace_stamp,
|
|
113
|
+
remove_stamp,
|
|
114
|
+
stamp_path,
|
|
115
|
+
write_stamp,
|
|
116
|
+
write_text_stamp
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// scripts/lib/timeouts.ts
|
|
120
|
+
var PROBE_TIMEOUT_MS = 2e3;
|
|
121
|
+
var FETCH_TIMEOUT_MS = 1e4;
|
|
122
|
+
var GIT_TIMEOUT_MS = 1e4;
|
|
123
|
+
var HOOK_PROCESS_TIMEOUT_MS = 15e3;
|
|
124
|
+
var COMMAND_TIMEOUT_MS = 3e4;
|
|
125
|
+
|
|
126
|
+
export {
|
|
127
|
+
PROJECT_ROOT,
|
|
128
|
+
PLATFORM_TEMP_ROOT,
|
|
129
|
+
stamp_file,
|
|
130
|
+
PROBE_TIMEOUT_MS,
|
|
131
|
+
FETCH_TIMEOUT_MS,
|
|
132
|
+
GIT_TIMEOUT_MS,
|
|
133
|
+
HOOK_PROCESS_TIMEOUT_MS,
|
|
134
|
+
COMMAND_TIMEOUT_MS
|
|
135
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
investigation_reads
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5VMKCCC4.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VC3PZPZO.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6HJJXRBX.js";
|
|
10
10
|
|
|
11
11
|
// scripts/delegation/investigation-guard.ts
|
|
12
12
|
import { text } from "node:stream/consumers";
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolve_local_bin,
|
|
3
3
|
resolve_package_bin
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JBBMAPC4.js";
|
|
5
5
|
import {
|
|
6
6
|
ESLINT_EDIT_CACHE_FLAGS,
|
|
7
7
|
file_reader,
|
|
8
8
|
time_density_hook
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-55HHG5PX.js";
|
|
10
|
+
import {
|
|
11
|
+
HOOK_PROCESS_TIMEOUT_MS
|
|
12
|
+
} from "./chunk-ELCN5LCH.js";
|
|
10
13
|
|
|
11
14
|
// scripts/hooks/format-edited-file.ts
|
|
12
15
|
import { existsSync as existsSync2 } from "node:fs";
|
|
@@ -47,7 +50,6 @@ var CSPELL_ARGS = [
|
|
|
47
50
|
"--no-summary"
|
|
48
51
|
];
|
|
49
52
|
var PNPM = "pnpm";
|
|
50
|
-
var PROCESS_TIMEOUT_MS = 15e3;
|
|
51
53
|
var HEADER = "The edit hook found words cspell does not know; fix them or add them to `cspell.config.yaml` now rather than at the gate:";
|
|
52
54
|
var MAX_DIAGNOSTIC_CHARS = 4e3;
|
|
53
55
|
var TRUNCATION_NOTICE = "\n\u2026(unknown words truncated)";
|
|
@@ -64,7 +66,7 @@ async function run_cspell(file_path, project_root) {
|
|
|
64
66
|
cwd: project_root,
|
|
65
67
|
stdout: "pipe",
|
|
66
68
|
stderr: "ignore",
|
|
67
|
-
timeout:
|
|
69
|
+
timeout: HOOK_PROCESS_TIMEOUT_MS
|
|
68
70
|
});
|
|
69
71
|
return result.stdout;
|
|
70
72
|
}
|
|
@@ -170,7 +172,6 @@ var ESLINT_DAEMON = "eslint_d";
|
|
|
170
172
|
var DAEMON_RESTART = "restart";
|
|
171
173
|
var ESLINT_CONFIG_DIR = "eslint";
|
|
172
174
|
var ESLINT_CONFIG_ENTRY = /^eslint\.config\.[cm]?[jt]s$/u;
|
|
173
|
-
var PROCESS_TIMEOUT_MS2 = 15e3;
|
|
174
175
|
var DIAGNOSTIC_HEADER = "The edit hook could not auto-fix these lint problems; address them now rather than at the gate:";
|
|
175
176
|
var MAX_DIAGNOSTIC_CHARS2 = 4e3;
|
|
176
177
|
var DIAGNOSTIC_TRUNCATION_NOTICE = "\n\u2026(diagnostics truncated)";
|
|
@@ -255,7 +256,7 @@ async function spawn_invocation(invocation, project_root) {
|
|
|
255
256
|
env: { ESLINT_D_MISS: "fail" },
|
|
256
257
|
stdout: "pipe",
|
|
257
258
|
stderr: "ignore",
|
|
258
|
-
timeout:
|
|
259
|
+
timeout: HOOK_PROCESS_TIMEOUT_MS
|
|
259
260
|
});
|
|
260
261
|
return { exit_code: result.exitCode ?? 1, stdout: result.stdout };
|
|
261
262
|
}
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
// scripts/build/local-bin.ts
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
|
+
import path2 from "node:path";
|
|
5
|
+
|
|
6
|
+
// scripts/lib/ancestor-directories.ts
|
|
4
7
|
import path from "node:path";
|
|
8
|
+
var MAX_DEPTH = 64;
|
|
9
|
+
function list(start_directory) {
|
|
10
|
+
const directories = [];
|
|
11
|
+
let current = path.resolve(start_directory);
|
|
12
|
+
while (directories.length < MAX_DEPTH && !directories.includes(current)) {
|
|
13
|
+
directories.push(current);
|
|
14
|
+
current = path.dirname(current);
|
|
15
|
+
}
|
|
16
|
+
return directories;
|
|
17
|
+
}
|
|
18
|
+
function nearest(start_directory, is_match) {
|
|
19
|
+
return list(start_directory).find((directory) => is_match(directory));
|
|
20
|
+
}
|
|
21
|
+
var ancestor_directories = { list, nearest };
|
|
5
22
|
|
|
6
23
|
// scripts/lib/schemas.ts
|
|
7
24
|
import { z } from "zod";
|
|
@@ -43,32 +60,23 @@ var WINDOWS_SHIM_SUFFIX = ".cmd";
|
|
|
43
60
|
var PACKAGE_JSON = "package.json";
|
|
44
61
|
function resolve_local_bin(project_root, bin_name) {
|
|
45
62
|
const shim = process.platform === WINDOWS_PLATFORM ? `${bin_name}${WINDOWS_SHIM_SUFFIX}` : bin_name;
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
function ancestor_directories(start_directory) {
|
|
49
|
-
const directories = [];
|
|
50
|
-
let current = start_directory;
|
|
51
|
-
while (!directories.includes(current)) {
|
|
52
|
-
directories.push(current);
|
|
53
|
-
current = path.dirname(current);
|
|
54
|
-
}
|
|
55
|
-
return directories;
|
|
63
|
+
return path2.join(project_root, NODE_MODULES, BIN_DIR, shim);
|
|
56
64
|
}
|
|
57
65
|
function find_local_bin_upwards(start_directory, bin_name) {
|
|
58
|
-
return ancestor_directories(start_directory).map((directory) => resolve_local_bin(directory, bin_name)).find((candidate) => existsSync(candidate));
|
|
66
|
+
return ancestor_directories.list(start_directory).map((directory) => resolve_local_bin(directory, bin_name)).find((candidate) => existsSync(candidate));
|
|
59
67
|
}
|
|
60
68
|
function read_bin_entry(manifest_path, package_name, bin_name) {
|
|
61
69
|
const { bin } = package_bin_schema.parse(JSON.parse(readFileSync(manifest_path, "utf8")));
|
|
62
|
-
if (typeof bin === "string") return bin_name ===
|
|
70
|
+
if (typeof bin === "string") return bin_name === path2.basename(package_name) ? bin : void 0;
|
|
63
71
|
return bin?.[bin_name];
|
|
64
72
|
}
|
|
65
73
|
function resolve_package_bin(base_directory, package_name, bin_name) {
|
|
66
74
|
try {
|
|
67
|
-
const resolve_from = createRequire(
|
|
75
|
+
const resolve_from = createRequire(path2.join(base_directory, PACKAGE_JSON));
|
|
68
76
|
const manifest_path = resolve_from.resolve(`${package_name}/${PACKAGE_JSON}`);
|
|
69
77
|
const bin_entry = read_bin_entry(manifest_path, package_name, bin_name);
|
|
70
78
|
if (bin_entry === void 0) return void 0;
|
|
71
|
-
const cli_entry =
|
|
79
|
+
const cli_entry = path2.join(path2.dirname(manifest_path), bin_entry);
|
|
72
80
|
return existsSync(cli_entry) ? cli_entry : void 0;
|
|
73
81
|
} catch {
|
|
74
82
|
return void 0;
|
|
@@ -76,6 +84,7 @@ function resolve_package_bin(base_directory, package_name, bin_name) {
|
|
|
76
84
|
}
|
|
77
85
|
|
|
78
86
|
export {
|
|
87
|
+
ancestor_directories,
|
|
79
88
|
resolve_local_bin,
|
|
80
89
|
find_local_bin_upwards,
|
|
81
90
|
resolve_package_bin
|