@joshuafolkken/kit 1.1050.0 → 1.1128.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/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/workflow-commands/SKILL.md +20 -12
- package/.claude/skills/workflow-commands/background-commands.md +36 -84
- package/.claude/skills/workflow-commands/backlogrun-child.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +8 -6
- package/.claude/skills/workflow-commands/backlogrun-progress.md +30 -33
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +4 -2
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +1 -1
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +8 -6
- package/.claude/skills/workflow-commands/halfrun.md +19 -21
- package/.claude/skills/workflow-commands/issue-comments.md +1 -1
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +8 -16
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +3 -3
- package/.claude/skills/workflow-commands/pre-gate-cut.md +4 -8
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +4 -18
- package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-node/action.yml +33 -0
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +2 -3
- package/.github/workflows/ci.yml +31 -134
- package/.github/workflows/dependabot-auto-merge.yml +1 -0
- package/.github/workflows/pr-classification.yml +6 -44
- package/.github/workflows/production.yml +1 -0
- package/.github/workflows/publish.yml +43 -47
- package/.github/workflows/sonar-qube.yml +41 -4
- package/.pnpmfile.mjs +29 -0
- package/AGENTS.md +5 -2
- package/CLAUDE.md +33 -27
- package/GEMINI.md +5 -2
- package/README.md +66 -20
- package/SECURITY.md +37 -6
- package/cspell/index.yaml +6 -1
- package/dist/CLAUDE.basic.md +6 -6
- package/dist/CLAUDE.md +33 -27
- package/dist/CLAUDE.static.md +6 -6
- package/dist/config-merge/index.js +48 -12
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-7VPDUBRN.js → chunk-4JZDP5X5.js} +152 -155
- package/dist/hooks/{chunk-HJIISEAC.js → chunk-5SD2YM7Z.js} +5 -13
- package/dist/hooks/{chunk-NAS4C7GP.js → chunk-77J7IEQM.js} +2 -2
- package/dist/hooks/{chunk-DMQN45FN.js → chunk-7HVB7SZG.js} +3 -3
- package/dist/hooks/{chunk-RLDX5SOC.js → chunk-AIOIOMPX.js} +4413 -1970
- package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M7QKEKWO.js} +873 -2049
- package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-MKVGBQPA.js} +2 -2
- package/dist/hooks/{chunk-EJDX2TOB.js → chunk-NXYMNPUQ.js} +7 -88
- package/dist/hooks/{chunk-NJQOBE6L.js → chunk-QVLT52OV.js} +2 -7
- package/dist/hooks/{chunk-GQ7KP45M.js → chunk-XYUIQOW3.js} +2 -2
- package/dist/hooks/codex-hook-adapter.js +12 -48
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +280 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +9 -9
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +192 -333
- package/dist/josh.js +240 -148
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +70 -78
- package/eslint/rules/promise.js +5 -0
- package/eslint/rules/unicorn.js +3 -2
- package/package.json +26 -5
- package/pnpm-workspace.yaml +5 -7
- package/prompts/collaboration-workflow/glossary.md +17 -0
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/issue-template.md +1 -1
- package/prompts/collaboration-workflow/operating-rules.md +5 -5
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/principles.md +9 -0
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +3 -3
- package/prompts/collaboration-workflow/rule-delivery.md +1 -1
- package/prompts/collaboration-workflow/turn-batching.md +3 -3
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +25 -22
- package/prompts/collaboration-workflow.md +6 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +11 -3
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +0 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +6 -16
- package/scripts/backlog/backlog-arrival.ts +30 -10
- package/scripts/backlog/backlog-budget-cli.ts +15 -16
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +9 -15
- package/scripts/backlog/backlog-offer-cli.ts +6 -19
- package/scripts/backlog/backlog-plan-cli.ts +1 -7
- package/scripts/backlog/backlog-plan.ts +30 -19
- package/scripts/backlog/backlog-pool.ts +3 -6
- package/scripts/backlog/backlog-rank.ts +2 -2
- package/scripts/backlog/backlog-ready.ts +39 -10
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +5 -2
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +85 -9
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/parse-jsonc.ts +33 -3
- package/scripts/config-merge/patch-json-key.ts +13 -6
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +3 -10
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +0 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +6 -10
- package/scripts/doctor/doctor-io.ts +9 -13
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/backlogrun-parent-read-set.ts +12 -1
- package/scripts/document/document-byte-budget.ts +5 -5
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +21 -7
- package/scripts/document/entry-read-set.ts +32 -8
- package/scripts/document/lane-child-read-set.ts +8 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +9 -3
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +4 -2
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +8 -22
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +9 -8
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +2 -2
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +3 -2
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +13 -10
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-issue-write.ts +4 -1
- package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +4 -1
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-command.ts +6 -1
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +2 -2
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-spawn-sync.ts +65 -0
- package/scripts/git/git-spawn.ts +5 -4
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +1 -0
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +2 -7
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +2 -0
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard.ts +22 -4
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-file-action.ts +54 -0
- package/scripts/init/init-logic-migrate.ts +35 -17
- package/scripts/init/init-logic-secretlint.ts +1 -1
- package/scripts/init/init-logic.ts +10 -19
- package/scripts/init/init.ts +11 -71
- package/scripts/init/kit-written-paths.ts +2 -0
- package/scripts/init/project-profile.ts +9 -17
- package/scripts/init/start-exec.ts +1 -1
- package/scripts/init/start-setup-pr.ts +6 -6
- package/scripts/init/start-steps.ts +3 -1
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +64 -23
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +3 -3
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-backlinks.ts +7 -14
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +12 -8
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +7 -14
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +8 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/{git → issue}/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +21 -6
- package/scripts/issue/measure-rerun-cli.ts +74 -15
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +8 -1
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +7 -1
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +3 -3
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/run-github-prerequisite.ts +3 -6
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +46 -19
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-cli.ts +1 -4
- package/scripts/lane/lane-close.ts +5 -4
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +31 -27
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +7 -1
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/cli-flags.ts +31 -2
- package/scripts/lib/error-message.ts +12 -1
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/line-targets.ts +0 -11
- package/scripts/lines/lines-command.ts +5 -4
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +3 -10
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +0 -2
- package/scripts/propagate/propagate-steps.ts +3 -5
- package/scripts/propagate/propagate-targets.ts +0 -4
- package/scripts/propagate/propagate.ts +0 -4
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +28 -21
- package/scripts/registry-migration/migrate.ts +25 -14
- package/scripts/release/github-release-cli.ts +19 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +38 -5
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/release/release-worktree.ts +97 -2
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +4 -16
- package/scripts/review/review-brief-cli.ts +23 -6
- package/scripts/review/review-brief.ts +21 -8
- package/scripts/review/review-checkout.ts +3 -2
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +10 -17
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +0 -3
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/early-heartbeat.ts +4 -3
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +0 -1
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-park.ts +22 -6
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +20 -9
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-args.ts +8 -12
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-args.ts +1 -6
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +2 -6
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +133 -25
- package/scripts/run/run-entry-stop.ts +104 -0
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream-emit.ts +7 -2
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +2 -2
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +29 -6
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +2 -6
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +7 -23
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +4 -2
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +6 -3
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-args.ts +20 -4
- package/scripts/run/run-progress-cli.ts +35 -36
- package/scripts/run/run-progress-clock.ts +10 -35
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +1 -2
- package/scripts/run/run-progress.ts +1 -2
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +29 -19
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +1 -1
- package/scripts/run/run-ship-probe.ts +4 -1
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +18 -4
- package/scripts/run/run-ship-review.ts +11 -0
- package/scripts/run/run-ship-scoped.ts +1 -0
- package/scripts/run/run-ship-steps.ts +1 -1
- package/scripts/run/run-ship.ts +0 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +3 -16
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +6 -2
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -13
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +18 -12
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/pack-hook.ts +92 -0
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-ai-files.ts +4 -0
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-changed.ts +13 -16
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +3 -9
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +0 -1
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-commands.ts +11 -1
- package/scripts/version/version-remote.ts +3 -3
- package/scripts/version/version-targets.ts +4 -4
- package/templates/CLAUDE.basic.md +6 -6
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/ci.yml +16 -82
- package/templates/workflows/dependabot-auto-merge.yml +6 -3
- package/templates/workflows/github-release.yml +79 -0
- package/tsconfig.sonar.json +4 -22
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
|
@@ -3,6 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { run_halfrun_resume } from './run-halfrun-resume'
|
|
4
4
|
import { run_hold, type HoldRead, type RunHold } from './run-hold'
|
|
5
5
|
import { run_preflight, type PreflightDecision } from './run-preflight'
|
|
6
|
+
import { run_prrun_resume } from './run-prrun-resume'
|
|
6
7
|
import { run_tidy_cli } from './run-tidy-cli'
|
|
7
8
|
|
|
8
9
|
// `josh run:hold [<N>]` and `josh run:release [<N> | --force]` — the working-tree guard the typed
|
|
@@ -48,11 +49,13 @@ const FORCE_FLAG = '--force'
|
|
|
48
49
|
// implementation cut outside a lane resumes as `fullrun #N` (joshuafolkken/kit#2760).
|
|
49
50
|
const FULLRUN_FLAG = '--fullrun'
|
|
50
51
|
const HALFRUN_STOP_FLAG = '--halfrun-stop'
|
|
52
|
+
// A `prrun`'s stop before merge (joshuafolkken/kit#3023): its record keeps the commit it stopped on.
|
|
53
|
+
const PRRUN_STOP_FLAG = '--prrun-stop'
|
|
51
54
|
// The most a claim reads: the issue number and the one flag after it.
|
|
52
55
|
const MAX_CLAIM_ARGUMENTS = 2
|
|
53
56
|
const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
|
|
54
57
|
const USAGE =
|
|
55
|
-
'Usage: josh run:hold [<issue-number> [--fullrun | --halfrun-stop]] | josh run:release [<issue-number> | --force]'
|
|
58
|
+
'Usage: josh run:hold [<issue-number> [--fullrun | --halfrun-stop | --prrun-stop]] | josh run:release [<issue-number> | --force]'
|
|
56
59
|
|
|
57
60
|
const HOLD_VERDICT = 'hold'
|
|
58
61
|
const BUSY_VERDICT = 'busy'
|
|
@@ -65,6 +68,7 @@ const HELD_VERDICT = 'held'
|
|
|
65
68
|
|
|
66
69
|
const FORCE_RELEASE_KIND = 'force-release'
|
|
67
70
|
const HALFRUN_STOP_KIND = 'halfrun-stop'
|
|
71
|
+
const PRRUN_STOP_KIND = 'prrun-stop'
|
|
68
72
|
|
|
69
73
|
interface ClaimRequest {
|
|
70
74
|
kind: 'claim'
|
|
@@ -72,11 +76,20 @@ interface ClaimRequest {
|
|
|
72
76
|
is_fullrun?: boolean
|
|
73
77
|
}
|
|
74
78
|
|
|
79
|
+
interface StopRequest {
|
|
80
|
+
kind: typeof HALFRUN_STOP_KIND | typeof PRRUN_STOP_KIND
|
|
81
|
+
issue: string
|
|
82
|
+
}
|
|
83
|
+
|
|
75
84
|
type HoldRequest =
|
|
76
85
|
| ClaimRequest
|
|
86
|
+
| StopRequest
|
|
77
87
|
| { kind: 'release'; claimant: string }
|
|
78
88
|
| { kind: typeof FORCE_RELEASE_KIND }
|
|
79
|
-
|
|
89
|
+
|
|
90
|
+
function is_stop_request(request: HoldRequest): request is StopRequest {
|
|
91
|
+
return request.kind === HALFRUN_STOP_KIND || request.kind === PRRUN_STOP_KIND
|
|
92
|
+
}
|
|
80
93
|
|
|
81
94
|
const FORCE_RELEASE_REQUEST: HoldRequest = { kind: FORCE_RELEASE_KIND }
|
|
82
95
|
|
|
@@ -84,12 +97,20 @@ function release_request(claimant: string): HoldRequest {
|
|
|
84
97
|
return { kind: 'release', claimant }
|
|
85
98
|
}
|
|
86
99
|
|
|
87
|
-
|
|
88
|
-
|
|
100
|
+
const STOP_KIND_BY_FLAG: ReadonlyMap<string, typeof HALFRUN_STOP_KIND | typeof PRRUN_STOP_KIND> =
|
|
101
|
+
new Map([
|
|
102
|
+
[HALFRUN_STOP_FLAG, HALFRUN_STOP_KIND],
|
|
103
|
+
[PRRUN_STOP_FLAG, PRRUN_STOP_KIND],
|
|
104
|
+
])
|
|
105
|
+
|
|
106
|
+
// The flag after a numbered claim: absent, `--fullrun`, `--halfrun-stop` or `--prrun-stop`. Anything
|
|
107
|
+
// else is a usage error.
|
|
89
108
|
function numbered_claim(issue: string, flag: string | undefined): HoldRequest | undefined {
|
|
90
109
|
if (flag === undefined) return { kind: 'claim', issue }
|
|
91
110
|
|
|
92
|
-
|
|
111
|
+
const stop_kind = STOP_KIND_BY_FLAG.get(flag)
|
|
112
|
+
|
|
113
|
+
if (stop_kind !== undefined) return { kind: stop_kind, issue }
|
|
93
114
|
|
|
94
115
|
return flag === FULLRUN_FLAG ? { kind: 'claim', issue, is_fullrun: true } : undefined
|
|
95
116
|
}
|
|
@@ -293,8 +314,12 @@ async function read_worktree(): Promise<string | undefined> {
|
|
|
293
314
|
|
|
294
315
|
// **A `halfrun` stop marks its own record** (joshuafolkken/kit#2796) — the positive "this run has ended
|
|
295
316
|
// over its verified diff" that `run:entry` adopts on `fullrun #N`. Another run's record is left alone.
|
|
296
|
-
|
|
297
|
-
|
|
317
|
+
// A `prrun` stop marks its record the same way, with the commit it stopped on (joshuafolkken/kit#3023).
|
|
318
|
+
async function mark_stop(target: string, request: StopRequest): Promise<number> {
|
|
319
|
+
const mark =
|
|
320
|
+
request.kind === PRRUN_STOP_KIND
|
|
321
|
+
? await run_prrun_resume.mark_stop_at(target, request.issue)
|
|
322
|
+
: run_halfrun_resume.mark_stop_at(target, request.issue)
|
|
298
323
|
|
|
299
324
|
if (mark === run_halfrun_resume.MARKED) return report_hold()
|
|
300
325
|
|
|
@@ -306,7 +331,7 @@ function mark_halfrun_stop(target: string, issue: string): number {
|
|
|
306
331
|
async function dispatch(request: HoldRequest, target: string, is_linked: boolean): Promise<number> {
|
|
307
332
|
if (request.kind === 'claim') return await claim(target, request, is_linked)
|
|
308
333
|
|
|
309
|
-
if (request
|
|
334
|
+
if (is_stop_request(request)) return await mark_stop(target, request)
|
|
310
335
|
|
|
311
336
|
if (request.kind === FORCE_RELEASE_KIND) return force_release(target)
|
|
312
337
|
|
|
@@ -351,8 +376,6 @@ const run_hold_cli = {
|
|
|
351
376
|
RELEASED_VERDICT,
|
|
352
377
|
UNKNOWN_VERDICT,
|
|
353
378
|
USAGE,
|
|
354
|
-
blocking_message,
|
|
355
|
-
main,
|
|
356
379
|
parse_request,
|
|
357
380
|
run,
|
|
358
381
|
}
|
package/scripts/run/run-hold.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
2
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
3
4
|
import { z } from 'zod'
|
|
4
5
|
|
|
5
6
|
// joshuafolkken/kit#1091: `epicrun` asks `epic-busy.ts` whether a *repository* already has a child in
|
|
@@ -52,6 +53,10 @@ interface RunHold {
|
|
|
52
53
|
// the positive record that the run has *ended* over its verified diff, which is what lets
|
|
53
54
|
// `fullrun #N` adopt the hold. A running `halfrun` or a `backlogrun` child never carries it.
|
|
54
55
|
is_halfrun_stop?: boolean | undefined
|
|
56
|
+
// Set only at a `prrun`'s stop before merge (`run:hold <N> --prrun-stop`, joshuafolkken/kit#3023): the
|
|
57
|
+
// commit the green pull request stood on, so `fullrun #N` can tell an untouched branch — merge it —
|
|
58
|
+
// from one that moved since and has to pass the gate and the review again.
|
|
59
|
+
prrun_stop_head?: string | undefined
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
type HoldRead =
|
|
@@ -92,6 +97,7 @@ const run_hold_schema = z.object({
|
|
|
92
97
|
pid: z.number(),
|
|
93
98
|
is_fullrun: z.boolean().optional(),
|
|
94
99
|
is_halfrun_stop: z.boolean().optional(),
|
|
100
|
+
prrun_stop_head: z.string().optional(),
|
|
95
101
|
})
|
|
96
102
|
|
|
97
103
|
// `undefined` for anything that is not a well-formed record, so the caller decides what a broken one
|
|
@@ -161,9 +167,24 @@ function create_hold(
|
|
|
161
167
|
return stamp_file.create_stamp(target, build_hold(issue, now, is_fullrun))
|
|
162
168
|
}
|
|
163
169
|
|
|
164
|
-
//
|
|
170
|
+
// What a stopped run's record carries on top of the claim: the `halfrun` stop's flag, or the commit a
|
|
171
|
+
// `prrun` stop stood on (joshuafolkken/kit#3023).
|
|
172
|
+
type StopMarkFields = Pick<RunHold, 'is_halfrun_stop' | 'prrun_stop_head'>
|
|
173
|
+
|
|
174
|
+
const HALFRUN_STOP_FIELDS: StopMarkFields = { is_halfrun_stop: true }
|
|
175
|
+
|
|
176
|
+
// The claim a stop leaves behind: the same exclusive create, carrying the stop mark.
|
|
177
|
+
function create_stop_hold(
|
|
178
|
+
target: string,
|
|
179
|
+
issue: string,
|
|
180
|
+
mark: StopMarkFields,
|
|
181
|
+
now: Date = new Date(),
|
|
182
|
+
): boolean {
|
|
183
|
+
return stamp_file.create_stamp(target, { ...build_hold(issue, now), ...mark })
|
|
184
|
+
}
|
|
185
|
+
|
|
165
186
|
function create_halfrun_stop_hold(target: string, issue: string, now: Date = new Date()): boolean {
|
|
166
|
-
return
|
|
187
|
+
return create_stop_hold(target, issue, HALFRUN_STOP_FIELDS, now)
|
|
167
188
|
}
|
|
168
189
|
|
|
169
190
|
// **A tree with uncommitted work in it is never handed over, however old its record is.** No age can
|
|
@@ -176,7 +197,9 @@ async function is_tree_dirty(directory?: string): Promise<boolean> {
|
|
|
176
197
|
const status = await git_command.status(directory)
|
|
177
198
|
|
|
178
199
|
return status.trim() !== ''
|
|
179
|
-
} catch {
|
|
200
|
+
} catch (error) {
|
|
201
|
+
error_text.trace_swallowed('run_hold.is_tree_dirty', error)
|
|
202
|
+
|
|
180
203
|
return true
|
|
181
204
|
}
|
|
182
205
|
}
|
|
@@ -260,8 +283,9 @@ const run_hold = {
|
|
|
260
283
|
UNNUMBERED_ISSUE,
|
|
261
284
|
classify,
|
|
262
285
|
create_halfrun_stop_hold,
|
|
286
|
+
create_stop_hold,
|
|
287
|
+
HALFRUN_STOP_FIELDS,
|
|
263
288
|
create_hold,
|
|
264
|
-
describe_holder,
|
|
265
289
|
foreign_release_message,
|
|
266
290
|
forced_release_message,
|
|
267
291
|
held_message,
|
|
@@ -270,7 +294,6 @@ const run_hold = {
|
|
|
270
294
|
is_own_hold,
|
|
271
295
|
is_tree_dirty,
|
|
272
296
|
own_release_command,
|
|
273
|
-
parse_hold,
|
|
274
297
|
race_message,
|
|
275
298
|
read_hold,
|
|
276
299
|
release_hold,
|
|
@@ -282,5 +305,5 @@ const run_hold = {
|
|
|
282
305
|
write_hold,
|
|
283
306
|
}
|
|
284
307
|
|
|
285
|
-
export type { HoldRead, RunHold }
|
|
308
|
+
export type { HoldRead, RunHold, StopMarkFields }
|
|
286
309
|
export { run_hold }
|
|
@@ -14,6 +14,6 @@ function require_issue_number(issue: string): void {
|
|
|
14
14
|
if (!ISSUE_NUMBER_PATTERN.test(issue)) throw new Error(`${BAD_ISSUE_MESSAGE}${issue}`)
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const run_issue_number = {
|
|
17
|
+
const run_issue_number = { ISSUE_NUMBER_PATTERN, require_issue_number }
|
|
18
18
|
|
|
19
19
|
export { run_issue_number }
|
|
@@ -89,10 +89,6 @@ interface ParsedArguments {
|
|
|
89
89
|
values: ParsedValues
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
function read_arguments(argv: ReadonlyArray<string>): ParsedArguments | undefined {
|
|
93
|
-
return cli_flags.parse_or_undefined({ args: [...argv], options: OPTIONS, allowPositionals: true })
|
|
94
|
-
}
|
|
95
|
-
|
|
96
92
|
function is_valid_target(parsed: ParsedArguments): boolean {
|
|
97
93
|
return (
|
|
98
94
|
parsed.positionals.length === 1 &&
|
|
@@ -136,7 +132,7 @@ function to_request(parsed: ParsedArguments): LivenessRequest {
|
|
|
136
132
|
}
|
|
137
133
|
|
|
138
134
|
function parse_request(argv: ReadonlyArray<string>): LivenessRequest | undefined {
|
|
139
|
-
const parsed =
|
|
135
|
+
const parsed = cli_flags.arguments_of(argv, OPTIONS)
|
|
140
136
|
|
|
141
137
|
if (parsed === undefined || !is_valid(parsed)) return undefined
|
|
142
138
|
|
|
@@ -159,7 +155,7 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
159
155
|
process.exitCode = await run(argv)
|
|
160
156
|
}
|
|
161
157
|
|
|
162
|
-
const run_liveness_cli = { USAGE,
|
|
158
|
+
const run_liveness_cli = { USAGE, parse_request, run }
|
|
163
159
|
|
|
164
160
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
165
161
|
|
|
@@ -3,8 +3,8 @@ import { homedir, tmpdir } from 'node:os'
|
|
|
3
3
|
import path from 'node:path'
|
|
4
4
|
import { setTimeout as sleep } from 'node:timers/promises'
|
|
5
5
|
import { agent_event, type AgentEventState } from '#scripts/agent/agent-event'
|
|
6
|
-
import { git_gh_issue_read } from '#scripts/
|
|
7
|
-
import { ALREADY_DONE_LABEL, NEEDS_DECISION_LABEL } from '#scripts/
|
|
6
|
+
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
7
|
+
import { ALREADY_DONE_LABEL, NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
8
8
|
import { issue_state } from '#scripts/issue/issue-state'
|
|
9
9
|
import { PLATFORM_TEMP_ROOT } from '#scripts/josh/platform-temporary'
|
|
10
10
|
import { run_hold } from './run-hold'
|
|
@@ -401,7 +401,6 @@ const run_liveness = {
|
|
|
401
401
|
decide,
|
|
402
402
|
describe_agent_state,
|
|
403
403
|
read_child_settled,
|
|
404
|
-
read_agent_state,
|
|
405
404
|
read_output_frozen,
|
|
406
405
|
sample_output,
|
|
407
406
|
to_safe_path,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { parseArgs } from 'node:util'
|
|
4
3
|
import { api_outage } from '#scripts/agent/api-outage'
|
|
5
4
|
import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-threshold'
|
|
6
5
|
import { issue_closing_pr } from '#scripts/issue/issue-closing-pr'
|
|
7
6
|
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
7
|
+
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
8
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
8
9
|
import { run_carry, type CarryOwner, type RunCarry } from './run-carry'
|
|
9
10
|
import { run_ending } from './run-ending'
|
|
10
11
|
import { run_event_stream } from './run-event-stream'
|
|
@@ -12,8 +13,6 @@ import { run_event_stream_emit } from './run-event-stream-emit'
|
|
|
12
13
|
import { run_issue_number } from './run-issue-number'
|
|
13
14
|
import { run_merge, type ChildOutcome, type EndingSignals } from './run-merge'
|
|
14
15
|
import { run_merge_steps, type MergeContext } from './run-merge-steps'
|
|
15
|
-
import { run_ship_detach } from './run-ship-detach'
|
|
16
|
-
import { run_ship_probe } from './run-ship-probe'
|
|
17
16
|
|
|
18
17
|
// `josh run:merge <N>` — one composite command for a `backlogrun` merge event (joshuafolkken/kit#2024).
|
|
19
18
|
// The parent's context is the largest and its per-turn cost the highest, and the event was two turns:
|
|
@@ -70,14 +69,6 @@ interface ParsedArguments {
|
|
|
70
69
|
values: Partial<Record<'epic' | 'output' | 'over' | 'owner' | 'repo', string>>
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
function read_args(argv: ReadonlyArray<string>): ParsedArguments | undefined {
|
|
74
|
-
try {
|
|
75
|
-
return parseArgs({ args: [...argv], options: OPTIONS, allowPositionals: true, strict: true })
|
|
76
|
-
} catch {
|
|
77
|
-
return undefined
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
72
|
// Absent owner is "no owner declared", which the carry guard reads as not provably foreign; a present
|
|
82
73
|
// but malformed pid invalidates the invocation rather than silently counting unguarded.
|
|
83
74
|
function to_owner(raw: string | undefined): CarryOwner | undefined {
|
|
@@ -171,7 +162,7 @@ function to_context(parsed: ParsedArguments): MergeContext | undefined {
|
|
|
171
162
|
}
|
|
172
163
|
|
|
173
164
|
function parse(argv: ReadonlyArray<string>): MergeContext | undefined {
|
|
174
|
-
const parsed =
|
|
165
|
+
const parsed = cli_flags.arguments_of(argv, OPTIONS)
|
|
175
166
|
|
|
176
167
|
return parsed === undefined ? undefined : to_context(parsed)
|
|
177
168
|
}
|
|
@@ -316,7 +307,10 @@ async function on_cut(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
316
307
|
|
|
317
308
|
// A child that parked itself: nothing is counted, but the park is written to the stream as a failed
|
|
318
309
|
// child's is, so a reader restoring the run from its events sees the child settled (joshuafolkken/kit#2508).
|
|
310
|
+
// Its `in-progress` is dropped as a failed child's is: left on, it outlived the `needs-decision` a
|
|
311
|
+
// person later lifted, and a `run:solo` child then held the whole backlog (joshuafolkken/kit#3017).
|
|
319
312
|
async function on_parked(ctx: MergeContext): Promise<MergeVerdict> {
|
|
313
|
+
await run_merge_steps.remove_in_progress(ctx.child)
|
|
320
314
|
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.PARK, `#${ctx.child} parked`)
|
|
321
315
|
|
|
322
316
|
return emit(await run_merge_steps.ask_next(ctx), SUCCESS_EXIT_CODE)
|
|
@@ -355,18 +349,10 @@ const HANDLERS: Readonly<Record<ChildOutcome, (ctx: MergeContext) => Promise<Mer
|
|
|
355
349
|
shipping: on_shipping,
|
|
356
350
|
}
|
|
357
351
|
|
|
358
|
-
async function is_ship_running(child: string): Promise<boolean> {
|
|
359
|
-
const repository = await run_ship_probe.repository_directory()
|
|
360
|
-
|
|
361
|
-
return (
|
|
362
|
-
repository !== undefined && run_ship_detach.read_result(repository, child)?.result === 'running'
|
|
363
|
-
)
|
|
364
|
-
}
|
|
365
|
-
|
|
366
352
|
// The whole merge event for one returned child, in-process: read its state, classify it, and run the
|
|
367
353
|
// handler. The CLI prints the token; `backlog:drive` branches on the outcome (joshuafolkken/kit#2508).
|
|
368
354
|
async function merge_child(ctx: MergeContext): Promise<MergeResult> {
|
|
369
|
-
if (
|
|
355
|
+
if (lane_handoff.is_ship_running(ctx.child, process.cwd())) {
|
|
370
356
|
return { outcome: 'shipping', ...(await on_shipping()) }
|
|
371
357
|
}
|
|
372
358
|
|
|
@@ -405,8 +391,6 @@ const run_merge_cli = {
|
|
|
405
391
|
RESUMED_TOKEN,
|
|
406
392
|
RETRY_TOKEN,
|
|
407
393
|
STOP_TOKEN,
|
|
408
|
-
USAGE,
|
|
409
|
-
main,
|
|
410
394
|
merge_child,
|
|
411
395
|
parse,
|
|
412
396
|
run,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
-
import { git_followup_issue_close } from '#scripts/
|
|
4
|
-
import { git_gh_issue_write } from '#scripts/
|
|
5
|
-
import { git_stash } from '#scripts/git/git-stash'
|
|
6
|
-
import { IN_PROGRESS_LABEL, NEEDS_DECISION_LABEL } from '#scripts/
|
|
3
|
+
import { git_followup_issue_close } from '#scripts/followup/git-followup-issue-close'
|
|
4
|
+
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
5
|
+
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
6
|
+
import { IN_PROGRESS_LABEL, NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
7
7
|
import { josh_command, type JoshResult } from '#scripts/josh/josh-run'
|
|
8
8
|
import { lane_close } from '#scripts/lane/lane-close'
|
|
9
9
|
import { lane_reap } from '#scripts/lane/lane-reap'
|
|
@@ -347,7 +347,6 @@ async function ask_next(ctx: MergeContext): Promise<string> {
|
|
|
347
347
|
|
|
348
348
|
const run_merge_steps = {
|
|
349
349
|
CUT_RELAUNCH_CAUSE,
|
|
350
|
-
apply_carry,
|
|
351
350
|
ask_next,
|
|
352
351
|
do_failed,
|
|
353
352
|
do_merged,
|
|
@@ -355,6 +354,7 @@ const run_merge_steps = {
|
|
|
355
354
|
has_resumable_cut,
|
|
356
355
|
is_over_budget,
|
|
357
356
|
refused_carry,
|
|
357
|
+
remove_in_progress,
|
|
358
358
|
resume_cut,
|
|
359
359
|
}
|
|
360
360
|
|
package/scripts/run/run-merge.ts
CHANGED
|
@@ -41,7 +41,7 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
41
41
|
process.exitCode = await run(argv)
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
const run_next_cli = {
|
|
44
|
+
const run_next_cli = { run }
|
|
45
45
|
|
|
46
46
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
47
47
|
|
|
@@ -3,6 +3,7 @@ import { cost_cli, type CostVerdict } from '#scripts/cost-runtime/cost-cli'
|
|
|
3
3
|
import { cost_format } from '#scripts/cost-runtime/cost-format'
|
|
4
4
|
import { cost_verdict } from '#scripts/cost-runtime/cost-verdict'
|
|
5
5
|
import { hook_decision } from '#scripts/josh/hook-decision'
|
|
6
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
6
7
|
import { implementation_cut_verdict } from '#scripts/rules/implementation-cut-verdict'
|
|
7
8
|
import { run_carry, type RunCarry } from './run-carry'
|
|
8
9
|
import { run_headless } from './run-headless'
|
|
@@ -104,7 +105,9 @@ async function refusal_for(
|
|
|
104
105
|
function is_unit_call(raw_payload: string): boolean {
|
|
105
106
|
try {
|
|
106
107
|
return (hook_decision.parse_hook_payload(raw_payload)?.agent_id ?? '') !== ''
|
|
107
|
-
} catch {
|
|
108
|
+
} catch (error) {
|
|
109
|
+
error_text.trace_swallowed('run_parent_cut_hook.is_unit_call', error)
|
|
110
|
+
|
|
108
111
|
return false
|
|
109
112
|
}
|
|
110
113
|
}
|
|
@@ -135,7 +138,6 @@ async function parent_cut_reason(
|
|
|
135
138
|
const run_parent_cut_hook = {
|
|
136
139
|
PARENT_CUT_REASON,
|
|
137
140
|
QUIET_WINDOW_MS,
|
|
138
|
-
STAMP_PREFIX,
|
|
139
141
|
SWITCH_ENV_KEY,
|
|
140
142
|
parent_cut_reason,
|
|
141
143
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { git_gh_pr_read } from '#scripts/gh/git-gh-pr-read'
|
|
1
2
|
import { git_command } from '#scripts/git/git-command'
|
|
2
|
-
import { git_gh_pr_read } from '#scripts/git/git-gh-pr-read'
|
|
3
3
|
import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
|
|
4
4
|
import { z } from 'zod'
|
|
5
5
|
import { run_hold } from './run-hold'
|
|
@@ -89,7 +89,7 @@ const STASH_LABEL_PREFIX = 'run:hold reclaimed before #'
|
|
|
89
89
|
// so the shape it may take is pinned beside the interpolation rather than only in the CLI that
|
|
90
90
|
// happens to be today's single caller. `run:liveness` interpolates it the same way, so the pattern
|
|
91
91
|
// and the refusal live in one module both read (joshuafolkken/kit#1485).
|
|
92
|
-
const {
|
|
92
|
+
const { require_issue_number } = run_issue_number
|
|
93
93
|
const UNREADABLE_PR_MESSAGE = 'The pull request could not be read for branch '
|
|
94
94
|
|
|
95
95
|
function needs_reclaim(tree: TreeState): boolean {
|
|
@@ -385,15 +385,8 @@ async function check(issue: string): Promise<PreflightDecision> {
|
|
|
385
385
|
}
|
|
386
386
|
|
|
387
387
|
const run_preflight = {
|
|
388
|
-
CLEAN_ADVICE,
|
|
389
|
-
CLEAN_REASON,
|
|
390
388
|
CLEAN_VERDICT,
|
|
391
|
-
ISSUE_NUMBER_PATTERN,
|
|
392
|
-
PARK_ADVICE,
|
|
393
|
-
PARK_VERDICT,
|
|
394
|
-
RECLAIM_VERDICT,
|
|
395
389
|
RESUME_ADVICE,
|
|
396
|
-
RESUME_VERDICT,
|
|
397
390
|
MERGED_PR,
|
|
398
391
|
STASH_LABEL_PREFIX,
|
|
399
392
|
check,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { git_stash } from '#scripts/git/git-stash'
|
|
3
|
+
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
4
4
|
import { issue_read_cli, type BlockRead } from '#scripts/issue/issue-read-cli'
|
|
5
5
|
import { issue_state_cli, type StateRead } from '#scripts/issue/issue-state-cli'
|
|
6
6
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
7
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
7
8
|
import { latest_scope_cli } from '#scripts/version/latest-scope-cli'
|
|
8
9
|
import { run_prep, type PrepParts } from './run-prep'
|
|
9
10
|
import { run_prep_locate } from './run-prep-locate'
|
|
@@ -82,7 +83,9 @@ async function lane_has_changes(): Promise<boolean> {
|
|
|
82
83
|
|
|
83
84
|
try {
|
|
84
85
|
return await git_stash.has_changes(process.cwd())
|
|
85
|
-
} catch {
|
|
86
|
+
} catch (error) {
|
|
87
|
+
error_text.trace_swallowed('run_prep_cli.lane_has_changes', error)
|
|
88
|
+
|
|
86
89
|
return false
|
|
87
90
|
}
|
|
88
91
|
}
|
|
@@ -150,7 +153,7 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
150
153
|
// `gather` and `to_parts` are exported so `run:next` reads the same state from the same three reads
|
|
151
154
|
// rather than growing a second copy of the gather (joshuafolkken/kit#2188) — `run:next` is the
|
|
152
155
|
// consumer of `run:prep` the epic #2166 wanted.
|
|
153
|
-
const run_prep_cli = {
|
|
156
|
+
const run_prep_cli = { gather, parse_number, run, to_parts }
|
|
154
157
|
|
|
155
158
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
156
159
|
|
|
@@ -159,7 +159,7 @@ async function locate(text: string): Promise<string> {
|
|
|
159
159
|
return format_locations(located)
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
const run_prep_locate = { extract_targets,
|
|
162
|
+
const run_prep_locate = { extract_targets, locate, parse_hits }
|
|
163
163
|
|
|
164
164
|
export type { Hit, Located }
|
|
165
165
|
export { run_prep_locate }
|
|
@@ -12,6 +12,12 @@ import { run_progress_config } from './run-progress-config'
|
|
|
12
12
|
// only a heartbeat the caller restarts on the next interval, so the two guard different things and
|
|
13
13
|
// only one has anything to lose by being short.
|
|
14
14
|
const DEFAULT_MAX_HOURS = 1
|
|
15
|
+
// **`--wait` is bounded by a run, not by three intervals** (joshuafolkken/kit#3102). It no longer exits
|
|
16
|
+
// at its first report — the reports go to the event stream — so its one-hour bound would be the last
|
|
17
|
+
// wake that asks the parent for no judgement, a restart an hour. Eight hours is `run:hold`'s expiry;
|
|
18
|
+
// what ends a finished run's watcher sooner is `josh followup` removing its life record, and a stop
|
|
19
|
+
// tearing it down in the same turn.
|
|
20
|
+
const DEFAULT_WAIT_MAX_HOURS = 8
|
|
15
21
|
const MS_PER_HOUR = 3_600_000
|
|
16
22
|
|
|
17
23
|
const OPTIONS = {
|
|
@@ -37,7 +43,7 @@ interface ParsedValues {
|
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
function read_arguments(argv: ReadonlyArray<string>): ParsedValues | undefined {
|
|
40
|
-
return cli_flags.
|
|
46
|
+
return cli_flags.values_of(argv, OPTIONS)
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
// A hand-typed `--interval` outranks the environment, the environment outranks the interval the
|
|
@@ -48,14 +54,24 @@ function to_interval_ms(raw: string | undefined): number {
|
|
|
48
54
|
return run_progress_config.resolve_interval_ms(raw)
|
|
49
55
|
}
|
|
50
56
|
|
|
51
|
-
function
|
|
57
|
+
function default_hours(is_wait: boolean): number {
|
|
58
|
+
return is_wait ? DEFAULT_WAIT_MAX_HOURS : DEFAULT_MAX_HOURS
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function to_max_ms(raw: string | undefined, is_wait = false): number {
|
|
52
62
|
const hours = Number(raw)
|
|
53
63
|
const is_usable = raw !== undefined && Number.isFinite(hours) && hours > 0
|
|
54
64
|
|
|
55
|
-
return (is_usable ? hours :
|
|
65
|
+
return (is_usable ? hours : default_hours(is_wait)) * MS_PER_HOUR
|
|
56
66
|
}
|
|
57
67
|
|
|
58
|
-
const run_progress_args = {
|
|
68
|
+
const run_progress_args = {
|
|
69
|
+
DEFAULT_MAX_HOURS,
|
|
70
|
+
DEFAULT_WAIT_MAX_HOURS,
|
|
71
|
+
read_arguments,
|
|
72
|
+
to_interval_ms,
|
|
73
|
+
to_max_ms,
|
|
74
|
+
}
|
|
59
75
|
|
|
60
76
|
export type { ParsedValues }
|
|
61
77
|
export { run_progress_args }
|