@joshuafolkken/kit 1.1166.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 +9 -5
- package/.claude/skills/workflow-commands/backlogrun-park.md +29 -9
- 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 +24 -15
- 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 +10 -5
- 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 +47 -33
- 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-DYAVAM6S.js → chunk-55HHG5PX.js} +1405 -631
- package/dist/hooks/{chunk-A6P7PN7P.js → chunk-5VMKCCC4.js} +25 -10
- package/dist/hooks/chunk-5VNDSNG3.js +12 -0
- package/dist/hooks/{chunk-5KTCMCOT.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-ENA7P5FB.js → chunk-F56MFS4B.js} +3 -3
- package/dist/hooks/{chunk-ANJ2WGFD.js → chunk-FIVDHQGT.js} +7 -6
- package/dist/hooks/{chunk-3V37IID6.js → chunk-JBBMAPC4.js} +23 -14
- package/dist/hooks/{chunk-GU5MATVE.js → chunk-JUDKDCDP.js} +499 -389
- package/dist/hooks/{chunk-ZDZ555YH.js → chunk-NV2JRZZO.js} +743 -909
- package/dist/hooks/{chunk-V2BTOZHT.js → chunk-RNWHN5BP.js} +3 -3
- package/dist/hooks/{chunk-URJA6XY4.js → chunk-TQNPDZNH.js} +4 -4
- package/dist/hooks/{chunk-GYNGP7HI.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 +232 -210
- 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 +81 -59
- package/dist/josh.js +872 -75
- 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 +31 -9
- package/scripts/backlog/backlog-offer-cli.ts +6 -6
- package/scripts/backlog/backlog-offer.ts +1 -1
- package/scripts/backlog/backlog-plan-cli.ts +7 -6
- package/scripts/backlog/backlog-pool.ts +57 -11
- package/scripts/backlog/backlog-rank.ts +18 -9
- package/scripts/backlog/backlog-ready.ts +1 -1
- package/scripts/backlog/backlog-restructure.ts +152 -0
- 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/backlog/backlog-waves.ts +15 -17
- 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/cost-runtime/context-cut-threshold.ts +1 -9
- package/scripts/cost-runtime/cost-verdict.ts +15 -28
- 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-followup-stages.ts +9 -0
- package/scripts/followup/git-pr-followup-checks.ts +142 -0
- package/scripts/followup/git-pr-followup.ts +5 -130
- 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-issue.ts +5 -3
- package/scripts/gh/git-gh-pr-read.ts +68 -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 +9 -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 +18 -6
- 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 +12 -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/{schemas.ts → git-schemas.ts} +2 -0
- 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/git/main-merge.ts +57 -21
- 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 +11 -1
- 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 +35 -3
- 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-notify.ts +26 -1
- 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 +3 -3
- 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} +12 -6
- 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} +3 -3
- package/scripts/run/{run-cut-report.ts → cut/run-cut-report.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} +29 -8
- 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-next.ts → ship/run-ship-next.ts} +13 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +66 -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} +10 -6
- 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-stage.ts → ship/run-ship-stage.ts} +13 -0
- package/scripts/run/{run-ship-steps.ts → ship/run-ship-steps.ts} +15 -8
- package/scripts/run/ship/run-ship-stop-text.ts +13 -0
- package/scripts/run/ship/run-ship-sync.ts +128 -0
- package/scripts/run/{run-ship.ts → ship/run-ship.ts} +6 -0
- 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} +31 -9
- 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} +99 -17
- 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/test-red-logic.ts +17 -2
- package/scripts/test/test-red.ts +8 -7
- 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/time-runtime/time-transcript-line.ts +27 -1
- 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/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-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-review.ts → ship/run-ship-review.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
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import {
|
|
3
|
+
timed_fetch
|
|
4
|
+
} from "./chunk-5VNDSNG3.js";
|
|
5
|
+
import {
|
|
6
|
+
error_text
|
|
7
|
+
} from "./chunk-CDY4NFQG.js";
|
|
8
|
+
import {
|
|
9
|
+
PROJECT_ROOT,
|
|
10
|
+
stamp_file
|
|
11
|
+
} from "./chunk-ELCN5LCH.js";
|
|
12
|
+
|
|
13
|
+
// scripts/security/security-audit-provision.ts
|
|
14
|
+
import { chmodSync, mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
15
|
+
import path2 from "node:path";
|
|
16
|
+
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
17
|
+
|
|
18
|
+
// scripts/security/security-audit.ts
|
|
19
|
+
import { accessSync, constants, statSync } from "node:fs";
|
|
20
|
+
import { fileURLToPath } from "node:url";
|
|
21
|
+
import { execaSync } from "execa";
|
|
22
|
+
|
|
23
|
+
// scripts/security/security-audit-logic.ts
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
var BINARY_NAME = "osv-scanner";
|
|
26
|
+
var LOCKFILE_PATH = "pnpm-lock.yaml";
|
|
27
|
+
var MANAGED_TOOL_SEGMENTS = ["node_modules", ".cache", "josh-tools"];
|
|
28
|
+
var WINDOWS_PLATFORM = "win32";
|
|
29
|
+
var WINDOWS_BINARY_SUFFIX = ".exe";
|
|
30
|
+
var INSTALL_INSTRUCTIONS = [
|
|
31
|
+
"",
|
|
32
|
+
"Install options:",
|
|
33
|
+
" Managed: pnpm josh audit:provision",
|
|
34
|
+
" macOS: brew install osv-scanner",
|
|
35
|
+
" Go: go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest",
|
|
36
|
+
' Docker: docker run --rm -v "$PWD:/src" ghcr.io/google/osv-scanner --lockfile=/src/pnpm-lock.yaml',
|
|
37
|
+
"",
|
|
38
|
+
"Docs: https://google.github.io/osv-scanner/"
|
|
39
|
+
].join("\n");
|
|
40
|
+
function build_scanner_arguments(lockfile_path) {
|
|
41
|
+
return [`--lockfile=${lockfile_path}`];
|
|
42
|
+
}
|
|
43
|
+
function build_managed_binary_path(project_root, platform) {
|
|
44
|
+
const suffix = platform === WINDOWS_PLATFORM ? WINDOWS_BINARY_SUFFIX : "";
|
|
45
|
+
return path.join(project_root, ...MANAGED_TOOL_SEGMENTS, `${BINARY_NAME}${suffix}`);
|
|
46
|
+
}
|
|
47
|
+
function format_missing_binary_error(binary_name) {
|
|
48
|
+
return `${binary_name} is not installed.
|
|
49
|
+
${INSTALL_INSTRUCTIONS}`;
|
|
50
|
+
}
|
|
51
|
+
var security_audit_logic = {
|
|
52
|
+
BINARY_NAME,
|
|
53
|
+
LOCKFILE_PATH,
|
|
54
|
+
build_managed_binary_path,
|
|
55
|
+
build_scanner_arguments,
|
|
56
|
+
format_missing_binary_error
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// scripts/security/security-audit-provision-logic.ts
|
|
60
|
+
var SCANNER_VERSION = "2.6.0";
|
|
61
|
+
var MINIMUM_SCANNER_VERSION = SCANNER_VERSION;
|
|
62
|
+
var RELEASE_BASE_URL = "https://github.com/google/osv-scanner/releases/download";
|
|
63
|
+
var WINDOWS_PLATFORM2 = "win32";
|
|
64
|
+
var WINDOWS_ASSET_SUFFIX = ".exe";
|
|
65
|
+
var STAGING_SUFFIX = ".download";
|
|
66
|
+
var SESSION_DOWNLOAD_TIMEOUT_MS = 6e4;
|
|
67
|
+
var FORCED_DOWNLOAD_TIMEOUT_MS = 6e5;
|
|
68
|
+
function build_download_timeout(is_forced) {
|
|
69
|
+
return is_forced ? FORCED_DOWNLOAD_TIMEOUT_MS : SESSION_DOWNLOAD_TIMEOUT_MS;
|
|
70
|
+
}
|
|
71
|
+
var MS_PER_HOUR = 36e5;
|
|
72
|
+
var HOURS_BEFORE_RETRY = 6;
|
|
73
|
+
var RETRY_INTERVAL_MS = HOURS_BEFORE_RETRY * MS_PER_HOUR;
|
|
74
|
+
var PLATFORM_NAMES = {
|
|
75
|
+
darwin: "darwin",
|
|
76
|
+
linux: "linux",
|
|
77
|
+
win32: "windows"
|
|
78
|
+
};
|
|
79
|
+
var ARCHITECTURE_NAMES = {
|
|
80
|
+
arm64: "arm64",
|
|
81
|
+
x64: "amd64"
|
|
82
|
+
};
|
|
83
|
+
var ASSET_CHECKSUMS = {
|
|
84
|
+
"osv-scanner_darwin_amd64": "60c5296637e977b28eeda5c7f13573e447659a632922737f94d11fa7e30ad6ca",
|
|
85
|
+
"osv-scanner_darwin_arm64": "98c460dcd37de25819babd757d04542045b6243113e209edcd4d89fedb0256b4",
|
|
86
|
+
"osv-scanner_linux_amd64": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108",
|
|
87
|
+
"osv-scanner_linux_arm64": "2c71403eb443d05891c4f268c3ad771cf4f16e5443463fd7851ef8f454d3c7e4",
|
|
88
|
+
"osv-scanner_windows_amd64.exe": "e0ed7644118b717b028c249ee9d3515024e55e8510747ca08906eb96765354d6",
|
|
89
|
+
"osv-scanner_windows_arm64.exe": "ca1379da0e408279ef2c85cde0846a903495738a91c7b065a208048437c1686c"
|
|
90
|
+
};
|
|
91
|
+
function build_asset_name(platform, architecture) {
|
|
92
|
+
const platform_name = PLATFORM_NAMES[platform];
|
|
93
|
+
const architecture_name = ARCHITECTURE_NAMES[architecture];
|
|
94
|
+
if (platform_name === void 0 || architecture_name === void 0) return void 0;
|
|
95
|
+
const suffix = platform === WINDOWS_PLATFORM2 ? WINDOWS_ASSET_SUFFIX : "";
|
|
96
|
+
return `${security_audit_logic.BINARY_NAME}_${platform_name}_${architecture_name}${suffix}`;
|
|
97
|
+
}
|
|
98
|
+
function build_download_url(asset_name) {
|
|
99
|
+
return `${RELEASE_BASE_URL}/v${SCANNER_VERSION}/${asset_name}`;
|
|
100
|
+
}
|
|
101
|
+
function build_staging_path(target_path, process_id) {
|
|
102
|
+
return `${target_path}.${String(process_id)}${STAGING_SUFFIX}`;
|
|
103
|
+
}
|
|
104
|
+
function resolve_asset(platform, architecture) {
|
|
105
|
+
const name = build_asset_name(platform, architecture);
|
|
106
|
+
if (name === void 0) return void 0;
|
|
107
|
+
const sha256 = ASSET_CHECKSUMS[name];
|
|
108
|
+
if (sha256 === void 0) return void 0;
|
|
109
|
+
return { name, sha256, url: build_download_url(name) };
|
|
110
|
+
}
|
|
111
|
+
function format_already_present(location) {
|
|
112
|
+
return `osv-scanner is already available (${location}); nothing to provision.`;
|
|
113
|
+
}
|
|
114
|
+
function format_unsupported_platform(platform, architecture) {
|
|
115
|
+
return `No pinned osv-scanner build for ${platform}/${architecture}; install it manually to run the pre-push audit.`;
|
|
116
|
+
}
|
|
117
|
+
function format_download_failure(url, reason) {
|
|
118
|
+
return `Could not fetch osv-scanner from ${url}: ${reason}. Run \`pnpm josh audit:provision --force\` to retry with a longer timeout; until then the pre-push audit will report the missing binary.`;
|
|
119
|
+
}
|
|
120
|
+
function format_checksum_mismatch(asset_name, expected, actual) {
|
|
121
|
+
return `Checksum mismatch for ${asset_name}: expected ${expected}, got ${actual}. Nothing was installed.`;
|
|
122
|
+
}
|
|
123
|
+
function format_installed(target_path) {
|
|
124
|
+
return `Installed osv-scanner v${SCANNER_VERSION} at ${target_path}.`;
|
|
125
|
+
}
|
|
126
|
+
function format_recent_failure() {
|
|
127
|
+
return `A previous attempt to provision osv-scanner failed less than ${String(HOURS_BEFORE_RETRY)} hours ago; not retrying at session start. Run \`pnpm josh audit:provision --force\` to try again now.`;
|
|
128
|
+
}
|
|
129
|
+
function format_provision_error(reason) {
|
|
130
|
+
return `Could not provision osv-scanner: ${reason}. The pre-push audit will report the missing binary.`;
|
|
131
|
+
}
|
|
132
|
+
var SCANNER_VERSION_PATTERN = /osv-scanner version:\s*(\d+\.\d+\.\d+)/u;
|
|
133
|
+
function parse_scanner_version(version_output) {
|
|
134
|
+
return SCANNER_VERSION_PATTERN.exec(version_output)?.[1];
|
|
135
|
+
}
|
|
136
|
+
function to_version_parts(version) {
|
|
137
|
+
return version.split(".").map(Number);
|
|
138
|
+
}
|
|
139
|
+
function compare_versions(left, right) {
|
|
140
|
+
const left_parts = to_version_parts(left);
|
|
141
|
+
const right_parts = to_version_parts(right);
|
|
142
|
+
const length = Math.max(left_parts.length, right_parts.length);
|
|
143
|
+
for (let index = 0; index < length; index += 1) {
|
|
144
|
+
const difference = (left_parts[index] ?? 0) - (right_parts[index] ?? 0);
|
|
145
|
+
if (difference !== 0) return difference;
|
|
146
|
+
}
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
function meets_version_floor(version) {
|
|
150
|
+
return compare_versions(version, MINIMUM_SCANNER_VERSION) >= 0;
|
|
151
|
+
}
|
|
152
|
+
function format_below_floor(version) {
|
|
153
|
+
return `osv-scanner ${version} is below the required v${MINIMUM_SCANNER_VERSION}; older builds parse only part of pnpm-lock.yaml, so a clean result here is not proof the lockfile is clean. Run \`pnpm josh audit:provision --force\` to install v${SCANNER_VERSION}.`;
|
|
154
|
+
}
|
|
155
|
+
var security_audit_provision_logic = {
|
|
156
|
+
RETRY_INTERVAL_MS,
|
|
157
|
+
SESSION_DOWNLOAD_TIMEOUT_MS,
|
|
158
|
+
SCANNER_VERSION,
|
|
159
|
+
MINIMUM_SCANNER_VERSION,
|
|
160
|
+
build_asset_name,
|
|
161
|
+
build_download_timeout,
|
|
162
|
+
build_download_url,
|
|
163
|
+
build_staging_path,
|
|
164
|
+
format_already_present,
|
|
165
|
+
format_below_floor,
|
|
166
|
+
format_checksum_mismatch,
|
|
167
|
+
format_download_failure,
|
|
168
|
+
format_installed,
|
|
169
|
+
format_provision_error,
|
|
170
|
+
format_recent_failure,
|
|
171
|
+
format_unsupported_platform,
|
|
172
|
+
meets_version_floor,
|
|
173
|
+
parse_scanner_version,
|
|
174
|
+
resolve_asset
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// scripts/security/security-audit.ts
|
|
178
|
+
var FAILURE_EXIT_CODE = 1;
|
|
179
|
+
var UNKNOWN_VERSION = "unknown";
|
|
180
|
+
function is_binary_available(binary_name) {
|
|
181
|
+
const result = execaSync(binary_name, ["--version"], { stdio: "ignore", reject: false });
|
|
182
|
+
return result.exitCode !== void 0;
|
|
183
|
+
}
|
|
184
|
+
function scanner_version(binary_or_path) {
|
|
185
|
+
const result = execaSync(binary_or_path, ["--version"], { reject: false });
|
|
186
|
+
if (result.exitCode === void 0) return void 0;
|
|
187
|
+
return security_audit_provision_logic.parse_scanner_version(result.stdout);
|
|
188
|
+
}
|
|
189
|
+
function meets_floor(binary_or_path) {
|
|
190
|
+
const version = scanner_version(binary_or_path);
|
|
191
|
+
return version !== void 0 && security_audit_provision_logic.meets_version_floor(version);
|
|
192
|
+
}
|
|
193
|
+
function is_executable_file(candidate_path) {
|
|
194
|
+
try {
|
|
195
|
+
accessSync(candidate_path, constants.X_OK);
|
|
196
|
+
const stats = statSync(candidate_path);
|
|
197
|
+
return stats.isFile() && stats.size > 0;
|
|
198
|
+
} catch {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function managed_scanner(project_root, platform) {
|
|
203
|
+
const managed_path = security_audit_logic.build_managed_binary_path(project_root, platform);
|
|
204
|
+
return is_executable_file(managed_path) && meets_floor(managed_path) ? managed_path : void 0;
|
|
205
|
+
}
|
|
206
|
+
function resolve_scanner(project_root, platform) {
|
|
207
|
+
const { BINARY_NAME: BINARY_NAME2 } = security_audit_logic;
|
|
208
|
+
const has_path_binary = is_binary_available(BINARY_NAME2);
|
|
209
|
+
if (has_path_binary && meets_floor(BINARY_NAME2)) {
|
|
210
|
+
return { path: BINARY_NAME2, is_below_floor: false };
|
|
211
|
+
}
|
|
212
|
+
const managed = managed_scanner(project_root, platform);
|
|
213
|
+
if (managed !== void 0) return { path: managed, is_below_floor: false };
|
|
214
|
+
return has_path_binary ? { path: BINARY_NAME2, is_below_floor: true } : void 0;
|
|
215
|
+
}
|
|
216
|
+
var FORWARDED_OUTPUT = ["inherit", "pipe"];
|
|
217
|
+
function run_scanner(scanner_path) {
|
|
218
|
+
const { LOCKFILE_PATH: LOCKFILE_PATH2, build_scanner_arguments: build_scanner_arguments2 } = security_audit_logic;
|
|
219
|
+
const result = execaSync(scanner_path, [...build_scanner_arguments2(LOCKFILE_PATH2)], {
|
|
220
|
+
stdin: "inherit",
|
|
221
|
+
stdout: FORWARDED_OUTPUT,
|
|
222
|
+
stderr: FORWARDED_OUTPUT,
|
|
223
|
+
reject: false
|
|
224
|
+
});
|
|
225
|
+
return result.exitCode ?? FAILURE_EXIT_CODE;
|
|
226
|
+
}
|
|
227
|
+
function warn_below_floor(scanner_path) {
|
|
228
|
+
const version = scanner_version(scanner_path) ?? UNKNOWN_VERSION;
|
|
229
|
+
console.warn(security_audit_provision_logic.format_below_floor(version));
|
|
230
|
+
}
|
|
231
|
+
function main() {
|
|
232
|
+
const { BINARY_NAME: BINARY_NAME2, format_missing_binary_error: format_missing_binary_error2 } = security_audit_logic;
|
|
233
|
+
const choice = resolve_scanner(PROJECT_ROOT, process.platform);
|
|
234
|
+
if (choice === void 0) {
|
|
235
|
+
console.error(format_missing_binary_error2(BINARY_NAME2));
|
|
236
|
+
process.exit(FAILURE_EXIT_CODE);
|
|
237
|
+
}
|
|
238
|
+
if (choice.is_below_floor) warn_below_floor(choice.path);
|
|
239
|
+
process.exit(run_scanner(choice.path));
|
|
240
|
+
}
|
|
241
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) main();
|
|
242
|
+
var security_audit = {
|
|
243
|
+
is_binary_available,
|
|
244
|
+
is_executable_file,
|
|
245
|
+
meets_floor,
|
|
246
|
+
resolve_scanner,
|
|
247
|
+
run_scanner
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
// scripts/security/security-audit-provision.ts
|
|
251
|
+
var EXECUTABLE_MODE = 493;
|
|
252
|
+
var FAILURE_STAMP_PREFIX = "josh-audit-provision-";
|
|
253
|
+
var FORCE_FLAG = "--force";
|
|
254
|
+
var PATH_LOCATION = "on PATH";
|
|
255
|
+
var { RETRY_INTERVAL_MS: RETRY_INTERVAL_MS2 } = security_audit_provision_logic;
|
|
256
|
+
async function download(url, timeout_ms) {
|
|
257
|
+
try {
|
|
258
|
+
const response = await timed_fetch(url, {}, timeout_ms);
|
|
259
|
+
if (!response.ok) return { reason: `HTTP ${String(response.status)}` };
|
|
260
|
+
return { content: Buffer.from(await response.arrayBuffer()), reason: "" };
|
|
261
|
+
} catch (error) {
|
|
262
|
+
return { reason: error_text.message_of(error) };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function install(target_path, content) {
|
|
266
|
+
const staging_path = security_audit_provision_logic.build_staging_path(target_path, process.pid);
|
|
267
|
+
mkdirSync(path2.dirname(target_path), { recursive: true });
|
|
268
|
+
try {
|
|
269
|
+
writeFileSync(staging_path, content);
|
|
270
|
+
chmodSync(staging_path, EXECUTABLE_MODE);
|
|
271
|
+
renameSync(staging_path, target_path);
|
|
272
|
+
} finally {
|
|
273
|
+
rmSync(staging_path, { force: true });
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function failure_stamp_path(target_path) {
|
|
277
|
+
return stamp_file.stamp_path(FAILURE_STAMP_PREFIX, target_path);
|
|
278
|
+
}
|
|
279
|
+
function is_in_backoff(target_path) {
|
|
280
|
+
const recorded = Number(stamp_file.read_stamp_text(failure_stamp_path(target_path)));
|
|
281
|
+
return Number.isFinite(recorded) && Date.now() - recorded < RETRY_INTERVAL_MS2;
|
|
282
|
+
}
|
|
283
|
+
function record_failure(target_path, message) {
|
|
284
|
+
stamp_file.write_stamp(failure_stamp_path(target_path), Date.now());
|
|
285
|
+
return message;
|
|
286
|
+
}
|
|
287
|
+
async function provision(target_path, asset, timeout_ms) {
|
|
288
|
+
const { format_checksum_mismatch: format_checksum_mismatch2, format_download_failure: format_download_failure2, format_installed: format_installed2 } = security_audit_provision_logic;
|
|
289
|
+
const outcome = await download(asset.url, timeout_ms);
|
|
290
|
+
if (outcome.content === void 0) {
|
|
291
|
+
return { is_installed: false, message: format_download_failure2(asset.url, outcome.reason) };
|
|
292
|
+
}
|
|
293
|
+
const actual = stamp_file.digest(outcome.content);
|
|
294
|
+
if (actual !== asset.sha256) {
|
|
295
|
+
return {
|
|
296
|
+
is_installed: false,
|
|
297
|
+
message: format_checksum_mismatch2(asset.name, asset.sha256, actual)
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
install(target_path, outcome.content);
|
|
301
|
+
return { is_installed: true, message: format_installed2(target_path) };
|
|
302
|
+
}
|
|
303
|
+
async function attempt(target_path, asset, timeout_ms) {
|
|
304
|
+
try {
|
|
305
|
+
const outcome = await provision(target_path, asset, timeout_ms);
|
|
306
|
+
if (!outcome.is_installed) return record_failure(target_path, outcome.message);
|
|
307
|
+
stamp_file.remove_stamp(failure_stamp_path(target_path));
|
|
308
|
+
return outcome.message;
|
|
309
|
+
} catch (error) {
|
|
310
|
+
return record_failure(
|
|
311
|
+
target_path,
|
|
312
|
+
security_audit_provision_logic.format_provision_error(error_text.message_of(error))
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function existing_scanner(target_path) {
|
|
317
|
+
const { BINARY_NAME: BINARY_NAME2 } = security_audit_logic;
|
|
318
|
+
if (security_audit.meets_floor(BINARY_NAME2)) return PATH_LOCATION;
|
|
319
|
+
const is_managed_usable = security_audit.is_executable_file(target_path) && security_audit.meets_floor(target_path);
|
|
320
|
+
return is_managed_usable ? target_path : void 0;
|
|
321
|
+
}
|
|
322
|
+
async function report(project_root, platform, architecture, is_forced) {
|
|
323
|
+
const logic = security_audit_provision_logic;
|
|
324
|
+
const target_path = security_audit_logic.build_managed_binary_path(project_root, platform);
|
|
325
|
+
const existing = existing_scanner(target_path);
|
|
326
|
+
if (existing !== void 0) return logic.format_already_present(existing);
|
|
327
|
+
const asset = logic.resolve_asset(platform, architecture);
|
|
328
|
+
if (asset === void 0) return logic.format_unsupported_platform(platform, architecture);
|
|
329
|
+
if (!is_forced && is_in_backoff(target_path)) return logic.format_recent_failure();
|
|
330
|
+
return await attempt(target_path, asset, logic.build_download_timeout(is_forced));
|
|
331
|
+
}
|
|
332
|
+
async function main2() {
|
|
333
|
+
const is_forced = process.argv.includes(FORCE_FLAG);
|
|
334
|
+
try {
|
|
335
|
+
console.info(await report(PROJECT_ROOT, process.platform, process.arch, is_forced));
|
|
336
|
+
} catch (error) {
|
|
337
|
+
console.warn(
|
|
338
|
+
security_audit_provision_logic.format_provision_error(error_text.message_of(error))
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (process.argv[1] === fileURLToPath2(import.meta.url)) await main2();
|
|
343
|
+
var security_audit_provision = { attempt, provision, report };
|
|
344
|
+
export {
|
|
345
|
+
security_audit_provision
|
|
346
|
+
};
|
|
@@ -9,12 +9,13 @@ import {
|
|
|
9
9
|
load_environment_file,
|
|
10
10
|
notice_refusal_path,
|
|
11
11
|
refusal_path
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-RNWHN5BP.js";
|
|
13
|
+
import "./chunk-VC3PZPZO.js";
|
|
14
|
+
import "./chunk-6HJJXRBX.js";
|
|
15
|
+
import "./chunk-55HHG5PX.js";
|
|
16
16
|
import "./chunk-WPALEIRX.js";
|
|
17
17
|
import "./chunk-RKUAD3I6.js";
|
|
18
|
+
import "./chunk-ELCN5LCH.js";
|
|
18
19
|
export {
|
|
19
20
|
DISABLED_VALUES,
|
|
20
21
|
SWITCH_ENV_KEY,
|