@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
|
@@ -24,6 +24,8 @@ import { version_targets } from './version-targets'
|
|
|
24
24
|
const FAILURE_EXIT_CODE = 1
|
|
25
25
|
const ALREADY_UP_TO_DATE = 'Already up to date'
|
|
26
26
|
const NO_QUARANTINE_MINUTES = 0
|
|
27
|
+
// A global install that goes to the network — the same ten minutes `lane-install.ts` gives one.
|
|
28
|
+
const UPGRADE_TIMEOUT_MS = 600_000
|
|
27
29
|
|
|
28
30
|
// What the local minimum-release-age policy permits for one package. Resolved per package because
|
|
29
31
|
// the newest installable release is a property of that package's own publish history. Returns a hold
|
|
@@ -195,8 +197,16 @@ function run_check(config: VersionCommandConfig): void {
|
|
|
195
197
|
)
|
|
196
198
|
}
|
|
197
199
|
|
|
200
|
+
// Through `sh -c` because an upgrade command is the user's own configured string — `pnpm add -g …`,
|
|
201
|
+
// or a chain with `&&` — so it is inside the trust boundary and needs a shell to mean what it says.
|
|
202
|
+
// The bound keeps a registry that never answers from holding `josh version` open forever; a timed-out
|
|
203
|
+
// run has no exit code, so it falls through to the failure code like any other failed step.
|
|
198
204
|
function run_upgrade_command(command: string): number {
|
|
199
|
-
const result = execaSync('sh', ['-c', command], {
|
|
205
|
+
const result = execaSync('sh', ['-c', command], {
|
|
206
|
+
stdio: 'inherit',
|
|
207
|
+
reject: false,
|
|
208
|
+
timeout: UPGRADE_TIMEOUT_MS,
|
|
209
|
+
})
|
|
200
210
|
|
|
201
211
|
return result.exitCode ?? FAILURE_EXIT_CODE
|
|
202
212
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { git_gh_exec } from '#scripts/
|
|
1
|
+
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
2
2
|
import { error_text } from '#scripts/lib/error-message'
|
|
3
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
3
4
|
import { npm_registry } from './npm-registry'
|
|
4
|
-
import { safe_json_parse } from './parse-json'
|
|
5
5
|
import { release_age } from './release-age'
|
|
6
6
|
|
|
7
7
|
// Enough history to reach past a quarantine window into the newest release that has aged out of it.
|
|
@@ -68,7 +68,7 @@ function read_github_release_times(versions_endpoint: string): Record<string, st
|
|
|
68
68
|
const endpoint = with_page_size(versions_endpoint, TIMES_PAGE_SIZE)
|
|
69
69
|
const stdout = git_gh_exec.read_gh_api_sync({ path: endpoint, jq_filter: TIMES_JQ })
|
|
70
70
|
if (stdout === undefined) return undefined
|
|
71
|
-
const parsed = release_age.release_times_schema.safeParse(
|
|
71
|
+
const parsed = release_age.release_times_schema.safeParse(json_value.parse_or_undefined(stdout))
|
|
72
72
|
|
|
73
73
|
return parsed.success ? parsed.data : undefined
|
|
74
74
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
3
|
import { file_reader } from '#scripts/lib/read-file'
|
|
3
4
|
import { package_version_schema, pnpm_ls_global_schema } from '#scripts/lib/schemas'
|
|
4
5
|
import { execaSync } from 'execa'
|
|
5
|
-
import { safe_json_parse } from './parse-json'
|
|
6
6
|
|
|
7
7
|
const NODE_MODULES = 'node_modules'
|
|
8
8
|
const PACKAGE_JSON = 'package.json'
|
|
@@ -15,7 +15,7 @@ function build_pnpm_ls_arguments(package_name: string): Array<string> {
|
|
|
15
15
|
// Read the globally installed version from `pnpm ls -g --json` output. Returns undefined when
|
|
16
16
|
// the package is absent or the output cannot be parsed (e.g. pnpm missing, empty stdout).
|
|
17
17
|
function parse_global_version(stdout: string, package_name: string): string | undefined {
|
|
18
|
-
const parsed = pnpm_ls_global_schema.safeParse(
|
|
18
|
+
const parsed = pnpm_ls_global_schema.safeParse(json_value.parse_or_undefined(stdout))
|
|
19
19
|
if (!parsed.success) return undefined
|
|
20
20
|
|
|
21
21
|
return parsed.data[0]?.dependencies?.[package_name]?.version
|
|
@@ -25,7 +25,7 @@ function parse_global_version(stdout: string, package_name: string): string | un
|
|
|
25
25
|
// file is missing (raw is undefined) or malformed.
|
|
26
26
|
function parse_project_version(raw: string | undefined): string | undefined {
|
|
27
27
|
if (raw === undefined) return undefined
|
|
28
|
-
const parsed = package_version_schema.safeParse(
|
|
28
|
+
const parsed = package_version_schema.safeParse(json_value.parse_or_undefined(raw))
|
|
29
29
|
|
|
30
30
|
return parsed.success ? parsed.data.version : undefined
|
|
31
31
|
}
|
|
@@ -61,7 +61,7 @@ function read_workspace_version(cwd: string): string | undefined {
|
|
|
61
61
|
// `📦 project version: <v>` for the end of a workflow. Both are gone (joshuafolkken/kit#1486): a
|
|
62
62
|
// child no longer bumps, so the local manifest names the *previous* release rather than what the run
|
|
63
63
|
// ships, and every caller now prints the count of unreleased merges instead
|
|
64
|
-
// (`scripts/
|
|
64
|
+
// (`scripts/followup/git-followup-pending.ts`). Removed rather than left unused, so nothing reaches for
|
|
65
65
|
// the misleading reading again.
|
|
66
66
|
|
|
67
67
|
const version_targets = {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Project instructions
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
-
|
|
5
|
-
- HTML
|
|
6
|
-
-
|
|
7
|
-
- JavaScript
|
|
8
|
-
- Git
|
|
3
|
+
- Respect existing files and the user's settings, and read a file's contents before changing it.
|
|
4
|
+
- Verify every change, and report the results you actually observed.
|
|
5
|
+
- Format HTML, CSS and JavaScript files with Prettier when the project has any.
|
|
6
|
+
- After a change that is visible on screen, check its display and interaction in a browser.
|
|
7
|
+
- After changing JavaScript or TypeScript behavior, add an automated test that checks that behavior.
|
|
8
|
+
- Use the Git or GitHub workflow only when you use Git or GitHub.
|
|
@@ -24,7 +24,11 @@ sonar.exclusions=.claude/**,scripts/**
|
|
|
24
24
|
# tooling. A `*-file` flag takes a path the developer typed on their own command
|
|
25
25
|
# line — the same trust level as the command itself — so there is no untrusted
|
|
26
26
|
# input boundary for the taint analysis to protect, exactly as with S4036.
|
|
27
|
-
|
|
27
|
+
#
|
|
28
|
+
# Suppress "await inside a loop" (S9382) everywhere. ESLint's `no-await-in-loop` reports the same
|
|
29
|
+
# pattern in the local gate, and each intentional sequential await carries its reason on an
|
|
30
|
+
# `eslint-disable-next-line` comment — which SonarJS does not read — so ESLint is the single gate.
|
|
31
|
+
sonar.issue.ignore.multicriteria=e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14
|
|
28
32
|
sonar.issue.ignore.multicriteria.e1.ruleKey=typescript:S4036
|
|
29
33
|
sonar.issue.ignore.multicriteria.e1.resourceKey=scripts/**/*
|
|
30
34
|
sonar.issue.ignore.multicriteria.e2.ruleKey=typescript:S4036
|
|
@@ -41,6 +45,29 @@ sonar.issue.ignore.multicriteria.e7.ruleKey=jssecurity:S8707
|
|
|
41
45
|
sonar.issue.ignore.multicriteria.e7.resourceKey=scripts/**/*
|
|
42
46
|
sonar.issue.ignore.multicriteria.e8.ruleKey=jssecurity:S8707
|
|
43
47
|
sonar.issue.ignore.multicriteria.e8.resourceKey=scripts-ai/**/*
|
|
48
|
+
# Suppress "async function without await" (S7503) everywhere. The shared ESLint
|
|
49
|
+
# config enforces `@typescript-eslint/promise-function-async`, so a function that
|
|
50
|
+
# returns a Promise must be `async` even when it has nothing to await; that is why
|
|
51
|
+
# it turns `require-await` off, and S7503 is the same rule under another name —
|
|
52
|
+
# the two cannot both hold.
|
|
53
|
+
sonar.issue.ignore.multicriteria.e9.ruleKey=typescript:S7503
|
|
54
|
+
sonar.issue.ignore.multicriteria.e9.resourceKey=**/*
|
|
55
|
+
sonar.issue.ignore.multicriteria.e10.ruleKey=javascript:S7503
|
|
56
|
+
sonar.issue.ignore.multicriteria.e10.resourceKey=**/*
|
|
57
|
+
# Suppress "prefer Number static properties" (S7773) everywhere. It asks for
|
|
58
|
+
# `Number.NaN`, while the unicorn recommended preset the shared ESLint config
|
|
59
|
+
# enforces asks for the opposite (`prefer-global-number-constants`: `NaN` over
|
|
60
|
+
# `Number.NaN`) — the two cannot both hold. The rest of what S7773 covers
|
|
61
|
+
# (`Number.parseInt`, `Number.isNaN`, …) is already enforced by
|
|
62
|
+
# `unicorn/prefer-number-properties`.
|
|
63
|
+
sonar.issue.ignore.multicriteria.e11.ruleKey=typescript:S7773
|
|
64
|
+
sonar.issue.ignore.multicriteria.e11.resourceKey=**/*
|
|
65
|
+
sonar.issue.ignore.multicriteria.e12.ruleKey=javascript:S7773
|
|
66
|
+
sonar.issue.ignore.multicriteria.e12.resourceKey=**/*
|
|
67
|
+
sonar.issue.ignore.multicriteria.e13.ruleKey=typescript:S9382
|
|
68
|
+
sonar.issue.ignore.multicriteria.e13.resourceKey=**/*
|
|
69
|
+
sonar.issue.ignore.multicriteria.e14.ruleKey=javascript:S9382
|
|
70
|
+
sonar.issue.ignore.multicriteria.e14.resourceKey=**/*
|
|
44
71
|
|
|
45
72
|
# Files to exclude from the duplicate check.
|
|
46
73
|
# Snapshot files (.snap) contain machine-generated repetitive patterns and are not authored code.
|
|
@@ -29,12 +29,11 @@ concurrency:
|
|
|
29
29
|
# list (e.g. `chromium firefox webkit`) instead of editing this file, which josh sync overwrites.
|
|
30
30
|
env:
|
|
31
31
|
JOSH_PLAYWRIGHT_BROWSERS: ${{ vars.JOSH_PLAYWRIGHT_BROWSERS || 'chromium' }}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
SAFE_CHAIN_INSTALLER_SHA256: 0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd
|
|
32
|
+
|
|
33
|
+
# Every job that needs pnpm prepares it through `.github/actions/setup-pnpm`, which `josh sync`
|
|
34
|
+
# writes beside this file: the pnpm version resolution, the store cache, the hash-verified safe-chain
|
|
35
|
+
# installer and the install. kit's own `ci.yml` calls the same action, so the path a consumer runs is
|
|
36
|
+
# the path kit runs (joshuafolkken/kit#3095).
|
|
38
37
|
|
|
39
38
|
jobs:
|
|
40
39
|
playwright-image:
|
|
@@ -126,37 +125,11 @@ jobs:
|
|
|
126
125
|
persist-credentials: false
|
|
127
126
|
|
|
128
127
|
- name: Setup Node.js
|
|
129
|
-
uses: actions/setup-node
|
|
130
|
-
with:
|
|
131
|
-
node-version: '24'
|
|
128
|
+
uses: ./.github/actions/setup-node
|
|
132
129
|
|
|
133
130
|
- name: Configure GitHub Packages authentication for existing projects
|
|
134
131
|
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
135
132
|
|
|
136
|
-
- name: Resolve pnpm version
|
|
137
|
-
id: pnpm-version
|
|
138
|
-
run: |
|
|
139
|
-
version=$(node -p "const m = require('./package.json'); m.packageManager?.match(/^pnpm@([^+]+)/)?.[1] ?? (m.devEngines?.packageManager?.name === 'pnpm' ? m.devEngines.packageManager.version?.split('+')[0] : 'latest') ?? 'latest'")
|
|
140
|
-
test -n "$version"
|
|
141
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
142
|
-
|
|
143
|
-
- name: Setup pnpm
|
|
144
|
-
uses: pnpm/setup@fbda4c85fc2e1e08721cd8763afea8f48d60f024 # v3.0.0
|
|
145
|
-
with:
|
|
146
|
-
version: ${{ steps.pnpm-version.outputs.version }}
|
|
147
|
-
install: false
|
|
148
|
-
|
|
149
|
-
- name: Resolve pnpm store path
|
|
150
|
-
run: echo "PNPM_STORE_PATH=$(pnpm store path)" >> "$GITHUB_ENV"
|
|
151
|
-
|
|
152
|
-
- name: Setup pnpm store cache
|
|
153
|
-
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
154
|
-
with:
|
|
155
|
-
path: ${{ env.PNPM_STORE_PATH }}
|
|
156
|
-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
157
|
-
restore-keys: |
|
|
158
|
-
${{ runner.os }}-pnpm-store-
|
|
159
|
-
|
|
160
133
|
- name: Setup ESLint cache
|
|
161
134
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
162
135
|
id: eslint-cache
|
|
@@ -188,17 +161,10 @@ jobs:
|
|
|
188
161
|
${{ runner.os }}-cspell-cache-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
189
162
|
${{ runner.os }}-cspell-cache-
|
|
190
163
|
|
|
191
|
-
- name: Setup
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
echo "$SAFE_CHAIN_INSTALLER_SHA256 $installer" | sha256sum -c -
|
|
196
|
-
sh "$installer" --ci
|
|
197
|
-
|
|
198
|
-
- name: Install dependencies
|
|
199
|
-
env:
|
|
200
|
-
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
201
|
-
run: pnpm install --frozen-lockfile --ignore-scripts
|
|
164
|
+
- name: Setup pnpm and install dependencies
|
|
165
|
+
uses: ./.github/actions/setup-pnpm
|
|
166
|
+
with:
|
|
167
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
202
168
|
|
|
203
169
|
# A `basic` project has no `prepare`, no build and no SvelteKit, so the ordered steps below
|
|
204
170
|
# would fail on its first pull request (joshuafolkken/kit#2814). The profile is read from
|
|
@@ -399,37 +365,11 @@ jobs:
|
|
|
399
365
|
persist-credentials: false
|
|
400
366
|
|
|
401
367
|
- name: Setup Node.js
|
|
402
|
-
uses: actions/setup-node
|
|
403
|
-
with:
|
|
404
|
-
node-version: '24'
|
|
368
|
+
uses: ./.github/actions/setup-node
|
|
405
369
|
|
|
406
370
|
- name: Configure GitHub Packages authentication for existing projects
|
|
407
371
|
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
408
372
|
|
|
409
|
-
- name: Resolve pnpm version
|
|
410
|
-
id: pnpm-version
|
|
411
|
-
run: |
|
|
412
|
-
version=$(node -p "const m = require('./package.json'); m.packageManager?.match(/^pnpm@([^+]+)/)?.[1] ?? (m.devEngines?.packageManager?.name === 'pnpm' ? m.devEngines.packageManager.version?.split('+')[0] : 'latest') ?? 'latest'")
|
|
413
|
-
test -n "$version"
|
|
414
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
415
|
-
|
|
416
|
-
- name: Setup pnpm
|
|
417
|
-
uses: pnpm/setup@fbda4c85fc2e1e08721cd8763afea8f48d60f024 # v3.0.0
|
|
418
|
-
with:
|
|
419
|
-
version: ${{ steps.pnpm-version.outputs.version }}
|
|
420
|
-
install: false
|
|
421
|
-
|
|
422
|
-
- name: Resolve pnpm store path
|
|
423
|
-
run: echo "PNPM_STORE_PATH=$(pnpm store path)" >> "$GITHUB_ENV"
|
|
424
|
-
|
|
425
|
-
- name: Setup pnpm store cache
|
|
426
|
-
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
427
|
-
with:
|
|
428
|
-
path: ${{ env.PNPM_STORE_PATH }}
|
|
429
|
-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
430
|
-
restore-keys: |
|
|
431
|
-
${{ runner.os }}-pnpm-store-
|
|
432
|
-
|
|
433
373
|
- name: Setup build cache
|
|
434
374
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
435
375
|
id: build-cache
|
|
@@ -441,17 +381,10 @@ jobs:
|
|
|
441
381
|
${{ runner.os }}-build-cache-e2e-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
442
382
|
${{ runner.os }}-build-cache-e2e-
|
|
443
383
|
|
|
444
|
-
- name: Setup
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
echo "$SAFE_CHAIN_INSTALLER_SHA256 $installer" | sha256sum -c -
|
|
449
|
-
sh "$installer" --ci
|
|
450
|
-
|
|
451
|
-
- name: Install dependencies
|
|
452
|
-
env:
|
|
453
|
-
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
454
|
-
run: pnpm install --frozen-lockfile --ignore-scripts
|
|
384
|
+
- name: Setup pnpm and install dependencies
|
|
385
|
+
uses: ./.github/actions/setup-pnpm
|
|
386
|
+
with:
|
|
387
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
455
388
|
|
|
456
389
|
# --ignore-scripts suppresses the install-time `prepare`, so generated framework
|
|
457
390
|
# files never appear. Playwright >= 1.62 hard-throws when a tsconfig `extends`
|
|
@@ -679,6 +612,7 @@ jobs:
|
|
|
679
612
|
needs.e2e-detect.result == 'success' &&
|
|
680
613
|
(needs.e2e.result == 'success' || needs.e2e.result == 'skipped')
|
|
681
614
|
runs-on: ubuntu-latest
|
|
615
|
+
timeout-minutes: 5
|
|
682
616
|
permissions:
|
|
683
617
|
contents: write
|
|
684
618
|
steps:
|
|
@@ -27,6 +27,7 @@ jobs:
|
|
|
27
27
|
# what stays restricted to Dependabot's own events, on the step below.
|
|
28
28
|
auto-merge:
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
|
+
timeout-minutes: 10
|
|
30
31
|
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
31
32
|
steps:
|
|
32
33
|
# Whether the pull request touches a workflow some upstream package overwrites. Decided from
|
|
@@ -50,8 +51,10 @@ jobs:
|
|
|
50
51
|
#
|
|
51
52
|
# Everything comes from the API, so no checkout is needed. `--paginate` is what makes the file
|
|
52
53
|
# list complete rather than the first page of a large diff, and the `select` narrows it to
|
|
53
|
-
# workflows
|
|
54
|
-
#
|
|
54
|
+
# workflows — and the local composite actions under `.github/actions/`, which are stamped and
|
|
55
|
+
# overwritten the same way (joshuafolkken/kit#3013) — inside `--jq` rather than through `grep`:
|
|
56
|
+
# the default shell is `bash -e` without `pipefail`, so a `gh` failure inside a pipeline would
|
|
57
|
+
# be masked by grep's status, and grep
|
|
55
58
|
# itself answers 1 for "no match" and 2 for "I could not look" — two readings this step must
|
|
56
59
|
# not conflate, since one of them means "merge it" (joshuafolkken/kit#844). An assignment
|
|
57
60
|
# carries the command's status, and `case` has no failure mode at all.
|
|
@@ -88,7 +91,7 @@ jobs:
|
|
|
88
91
|
GH_TOKEN: ${{ github.token }}
|
|
89
92
|
run: |
|
|
90
93
|
changed="$(gh api "repos/$REPOSITORY/pulls/$PR_NUMBER/files" --paginate \
|
|
91
|
-
--jq '.[] | select(.filename | startswith(".github/workflows/"))
|
|
94
|
+
--jq '.[] | select(.filename | startswith(".github/workflows/") or startswith(".github/actions/"))
|
|
92
95
|
| [.filename, .contents_url] | @tsv')"
|
|
93
96
|
|
|
94
97
|
has_managed=false
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: GitHub Release
|
|
2
|
+
|
|
3
|
+
# Creates the GitHub Release, with notes generated from `.github/release.yml`, for each tag
|
|
4
|
+
# `josh release` cuts (joshuafolkken/kit#3007). A repository with a Publish workflow gets its release
|
|
5
|
+
# once that workflow has succeeded for the tag; one without it gets the release when auto-tag.yml
|
|
6
|
+
# announces the tag. kit's own release is the `create-release` job of its publish.yml, which runs the
|
|
7
|
+
# same `josh release:github`, so this file is distributed but never runs in kit.
|
|
8
|
+
on:
|
|
9
|
+
workflow_run:
|
|
10
|
+
workflows: [Publish]
|
|
11
|
+
types: [completed]
|
|
12
|
+
repository_dispatch:
|
|
13
|
+
types: [new-tag-created]
|
|
14
|
+
|
|
15
|
+
# Deliberately no `concurrency` block: a later tag waits inside `josh release:github` for the lower
|
|
16
|
+
# tag's release, so serializing the runs would leave the later run holding the slot the lower one needs.
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
release:
|
|
20
|
+
# The Publish run is titled `Publish <tag>`; its head branch is not the tag when it was started by
|
|
21
|
+
# repository_dispatch, so the title is where the tag is read from.
|
|
22
|
+
if: >-
|
|
23
|
+
(github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' &&
|
|
24
|
+
startsWith(github.event.workflow_run.display_title, 'Publish v')) ||
|
|
25
|
+
github.event_name == 'repository_dispatch'
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
timeout-minutes: 65
|
|
28
|
+
permissions:
|
|
29
|
+
actions: read
|
|
30
|
+
contents: write
|
|
31
|
+
packages: read
|
|
32
|
+
steps:
|
|
33
|
+
- name: Checkout code
|
|
34
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
35
|
+
with:
|
|
36
|
+
fetch-depth: 0
|
|
37
|
+
persist-credentials: false
|
|
38
|
+
|
|
39
|
+
# A repository with a Publish workflow is released from the workflow_run above, after its
|
|
40
|
+
# publication, so the tag announcement is left alone there and one tag never starts two releases.
|
|
41
|
+
- name: Select release tag
|
|
42
|
+
id: release
|
|
43
|
+
env:
|
|
44
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
45
|
+
RUN_TITLE: ${{ github.event.workflow_run.display_title }}
|
|
46
|
+
RUN_WORKFLOW: ${{ github.event.workflow_run.workflow_id }}
|
|
47
|
+
DISPATCH_TAG: ${{ github.event.client_payload.tag }}
|
|
48
|
+
run: |
|
|
49
|
+
if [ "$EVENT_NAME" = workflow_run ]; then
|
|
50
|
+
echo "tag=${RUN_TITLE#Publish }" >> "$GITHUB_OUTPUT"
|
|
51
|
+
echo "workflow=$RUN_WORKFLOW" >> "$GITHUB_OUTPUT"
|
|
52
|
+
elif [ -f .github/workflows/publish.yml ]; then
|
|
53
|
+
echo "ℹ️ publish.yml releases this tag once it has published, skipping"
|
|
54
|
+
else
|
|
55
|
+
echo "tag=$DISPATCH_TAG" >> "$GITHUB_OUTPUT"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
- name: Setup Node.js
|
|
59
|
+
if: steps.release.outputs.tag != ''
|
|
60
|
+
uses: ./.github/actions/setup-node
|
|
61
|
+
|
|
62
|
+
- name: Configure GitHub Packages authentication for existing projects
|
|
63
|
+
if: steps.release.outputs.tag != ''
|
|
64
|
+
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
65
|
+
|
|
66
|
+
- name: Setup pnpm and install dependencies
|
|
67
|
+
if: steps.release.outputs.tag != ''
|
|
68
|
+
uses: ./.github/actions/setup-pnpm
|
|
69
|
+
with:
|
|
70
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
71
|
+
cache: 'false'
|
|
72
|
+
|
|
73
|
+
- name: Publish GitHub Release
|
|
74
|
+
if: steps.release.outputs.tag != ''
|
|
75
|
+
run: pnpm josh release:github
|
|
76
|
+
env:
|
|
77
|
+
GH_TOKEN: ${{ github.token }}
|
|
78
|
+
RELEASE_TAG: ${{ steps.release.outputs.tag }}
|
|
79
|
+
RELEASE_WORKFLOW: ${{ steps.release.outputs.workflow }}
|
package/tsconfig.sonar.json
CHANGED
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
+
"extends": "@joshuafolkken/kit/tsconfig/base",
|
|
2
3
|
"compilerOptions": {
|
|
3
|
-
"target": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"moduleResolution": "node",
|
|
7
|
-
"allowImportingTsExtensions": false,
|
|
4
|
+
"target": "ES2022",
|
|
5
|
+
"lib": ["ES2023", "DOM", "DOM.Iterable"],
|
|
6
|
+
"types": ["node"],
|
|
8
7
|
"allowJs": true,
|
|
9
8
|
"checkJs": true,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"forceConsistentCasingInFileNames": true,
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"sourceMap": true,
|
|
15
|
-
"strict": true,
|
|
16
|
-
"noUncheckedIndexedAccess": true,
|
|
17
|
-
"noImplicitOverride": true,
|
|
18
|
-
"noUnusedLocals": true,
|
|
19
|
-
"noUnusedParameters": true,
|
|
20
|
-
"exactOptionalPropertyTypes": true,
|
|
21
|
-
"noFallthroughCasesInSwitch": true,
|
|
22
|
-
"noImplicitReturns": true,
|
|
23
|
-
"noPropertyAccessFromIndexSignature": true,
|
|
24
|
-
"allowUnusedLabels": false,
|
|
25
|
-
"allowUnreachableCode": false,
|
|
26
|
-
"isolatedModules": true,
|
|
27
9
|
"paths": {
|
|
28
10
|
"$lib": ["./src/lib"],
|
|
29
11
|
"$lib/*": ["./src/lib/*"]
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
## リポジトリをまたぐ EPIC
|
|
2
|
-
|
|
3
|
-
**この規則の単一ソースは `.claude/skills/epic-commands/SKILL.md` → "Epics that span repositories" である。** 子の書き方、owner の制限、自動クローズ、公開の完了を待つ依存、配布物を持たない repo、実行のディスパッチ、`owner/repo#N` での参照はすべてそこにある。
|
|
4
|
-
|
|
5
|
-
経緯(公開待ちが要る理由、joshuafolkken/kit#1129)は [`docs/maintainers/epic-commands-rationale.md`](../../docs/maintainers/epic-commands-rationale.md) にある。
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
## `josh epic:audit` — 子 Issue 群を横断して矛盾を検出する
|
|
2
|
-
|
|
3
|
-
**この規則の単一ソースは `.claude/skills/epic-commands/SKILL.md` → "`josh epic:audit <E>` — contradictions across the children" である。** 検査表、警告とエラーの区別、片方が closed の組を警告に降格する規則、孤児検索の 2 つの結果、Tier A の修正、計画時の波及先の点検はすべてそこにある。
|
|
4
|
-
|
|
5
|
-
経緯(joshuafolkken/kit#858 の監査で見つかった矛盾と波及漏れ、joshuafolkken/kit#1010)は [`docs/maintainers/epic-commands-rationale.md`](../../docs/maintainers/epic-commands-rationale.md) にある。
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
## 後から関連が判明した Issue を epic に束ねる
|
|
2
|
-
|
|
3
|
-
**この規則の単一ソースは `.claude/skills/epic-commands/SKILL.md` → "`josh epic:bundle <N>` — does this new issue belong with one already filed?" である。** 発火点、強い信号、候補探索の範囲、決定木、所属先の記録、順序の記録、起票前の `issue:scout` はすべてそこにある。レビュー上限で切り出す後追い Issue の起票と答えへの対応は `prompts/review.md` → "Three-way disposition after the cap" が単一ソースである。
|
|
4
|
-
|
|
5
|
-
経緯(joshuafolkken/kit#943 / #946 / #947 の取りこぼし、CI 待ちに起票を置く根拠の計測)は [`docs/maintainers/epic-commands-rationale.md`](../../docs/maintainers/epic-commands-rationale.md) にある。
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { readdirSync } from 'node:fs'
|
|
2
|
-
import os from 'node:os'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import { claude_plugin_config } from './claude-plugin-config'
|
|
5
|
-
|
|
6
|
-
// `josh init` / `josh sync` declare the kit plugin in the consumer's `.claude/settings.json`, but the
|
|
7
|
-
// CLI does not install it from the declaration alone — a consumer runs `claude plugin install kit@kit`
|
|
8
|
-
// once (joshuafolkken/kit#1930). Nothing said so at the end of init or sync, so a consumer whose
|
|
9
|
-
// skills silently never loaded had no pointer to the one command that fixes it. This prints that
|
|
10
|
-
// command on completion, unless the plugin already appears installed.
|
|
11
|
-
|
|
12
|
-
const PLUGINS_SUBDIR = path.join('.claude', 'plugins')
|
|
13
|
-
|
|
14
|
-
// Best effort: Claude Code records installed marketplaces under `~/.claude/plugins`. The kit
|
|
15
|
-
// marketplace directory being present is the strongest signal available at the shell; the plugin's
|
|
16
|
-
// enabled state is not readable here, so an uncertain read (no directory, no permission) counts as
|
|
17
|
-
// "not installed". A hint shown once too often costs a line; one never shown costs a consumer its skills.
|
|
18
|
-
function is_plugin_installed(home_directory: string = os.homedir()): boolean {
|
|
19
|
-
try {
|
|
20
|
-
return readdirSync(path.join(home_directory, PLUGINS_SUBDIR)).some(
|
|
21
|
-
(entry) =>
|
|
22
|
-
entry === claude_plugin_config.MARKETPLACE_NAME ||
|
|
23
|
-
entry.startsWith(`${claude_plugin_config.MARKETPLACE_NAME}@`),
|
|
24
|
-
)
|
|
25
|
-
} catch {
|
|
26
|
-
return false
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function plugin_install_hint(is_installed: boolean): string | undefined {
|
|
31
|
-
if (is_installed) return undefined
|
|
32
|
-
|
|
33
|
-
return ` ℹ Skills load from the kit plugin. If they are missing, run: claude plugin install ${claude_plugin_config.PLUGIN_ID}`
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function report_plugin_install_hint(home_directory?: string): void {
|
|
37
|
-
const hint = plugin_install_hint(is_plugin_installed(home_directory))
|
|
38
|
-
if (hint !== undefined) console.info(hint)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const plugin_install_hint_module = {
|
|
42
|
-
is_plugin_installed,
|
|
43
|
-
plugin_install_hint,
|
|
44
|
-
report_plugin_install_hint,
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export { plugin_install_hint_module }
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Parse JSON without throwing: returns the parsed value, or undefined when the input is not valid
|
|
2
|
-
// JSON. Single source for the version commands that read package.json / CLI output and hand the
|
|
3
|
-
// result to a schema's `safeParse` (running-binary, version-targets, effective-upstream), so the
|
|
4
|
-
// permissive-parse behavior is defined once rather than re-cloned per reader.
|
|
5
|
-
function safe_json_parse(raw: string): unknown {
|
|
6
|
-
try {
|
|
7
|
-
return JSON.parse(raw)
|
|
8
|
-
} catch {
|
|
9
|
-
return undefined
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { safe_json_parse }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|