@joshuafolkken/kit 1.872.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/.claude-plugin/plugin.json +11 -0
- package/.claude/settings.json +110 -0
- package/.claude/skills/dependency-update/SKILL.md +76 -0
- package/.claude/skills/epic-commands/SKILL.md +463 -0
- package/.claude/skills/verify-ui/SKILL.md +96 -0
- package/.claude/skills/workflow-commands/SKILL.md +265 -0
- package/.claude/skills/workflow-commands/background-commands.md +130 -0
- package/.claude/skills/workflow-commands/backlogrun-child.md +364 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +345 -0
- package/.claude/skills/workflow-commands/backlogrun-park.md +179 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +600 -0
- package/.claude/skills/workflow-commands/backlogrun-steps.md +604 -0
- package/.claude/skills/workflow-commands/backlogrun.md +109 -0
- package/.claude/skills/workflow-commands/chain-rule.md +98 -0
- package/.claude/skills/workflow-commands/delegation.md +52 -0
- package/.claude/skills/workflow-commands/followup-reference.md +118 -0
- package/.claude/skills/workflow-commands/followup.md +222 -0
- package/.claude/skills/workflow-commands/fullrun-steps.md +93 -0
- package/.claude/skills/workflow-commands/fullrun.md +82 -0
- package/.claude/skills/workflow-commands/halfrun.md +73 -0
- package/.claude/skills/workflow-commands/into-target.md +48 -0
- package/.claude/skills/workflow-commands/issue-comments.md +109 -0
- package/.claude/skills/workflow-commands/issue-fold-existing.md +27 -0
- package/.claude/skills/workflow-commands/issue-scout.md +45 -0
- package/.claude/skills/workflow-commands/kickoff.md +82 -0
- package/.claude/skills/workflow-commands/latest-gate.md +85 -0
- package/.claude/skills/workflow-commands/needs-human-review.md +64 -0
- package/.claude/skills/workflow-commands/observation-filing.md +349 -0
- package/.claude/skills/workflow-commands/pre-gate-cut.md +340 -0
- package/.claude/skills/workflow-commands/prerequisite.md +62 -0
- package/.claude/skills/workflow-commands/retrospective.md +81 -0
- package/.claude/skills/workflow-commands/rule-residency.md +267 -0
- package/.claude/skills/workflow-commands/split-assessment.md +130 -0
- package/.claude/skills/workflow-commands/target-repository.md +58 -0
- package/.claude/skills/workflow-commands/working-tree-hold.md +66 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.coderabbit.yaml +50 -0
- package/.codex/config.toml +8 -0
- package/.codex/hooks.json +71 -0
- package/.cursorrules +45 -0
- package/.gitattributes +7 -0
- package/.github/dependabot.yml +19 -0
- package/.github/pull_request_template.md +1 -0
- package/.github/release.yml +18 -0
- package/.github/workflows/auto-tag.yml +111 -0
- package/.github/workflows/ci.yml +681 -0
- package/.github/workflows/dependabot-auto-merge.yml +55 -0
- package/.github/workflows/production.yml +47 -0
- package/.github/workflows/publish.yml +39 -0
- package/.github/workflows/sonar-qube.yml +34 -0
- package/.mcp.json +8 -0
- package/.ncurc.json +3 -0
- package/.prettierignore +20 -0
- package/.vscode/extensions.json +21 -0
- package/.vscode/settings.json +41 -0
- package/AGENTS.md +29 -0
- package/CLAUDE.md +207 -0
- package/CODE_OF_CONDUCT.md +132 -0
- package/GEMINI.md +30 -0
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/SECURITY.md +34 -0
- package/cspell/index.yaml +177 -0
- package/dist/CLAUDE.md +207 -0
- package/dist/config-merge/index.d.ts +29 -0
- package/dist/config-merge/index.js +459 -0
- package/dist/hooks/batch-guard.js +28 -0
- package/dist/hooks/chunk-25JL6FMS.js +4970 -0
- package/dist/hooks/chunk-2ANGT3XM.js +375 -0
- package/dist/hooks/chunk-2EI5GBSW.js +42 -0
- package/dist/hooks/chunk-2OT5XE2N.js +5014 -0
- package/dist/hooks/chunk-2RUPMGGV.js +137 -0
- package/dist/hooks/chunk-2XIGZQMQ.js +3299 -0
- package/dist/hooks/chunk-33ELOKEV.js +910 -0
- package/dist/hooks/chunk-33YRTKM7.js +230 -0
- package/dist/hooks/chunk-36JQU5NN.js +77 -0
- package/dist/hooks/chunk-3EJBTWVS.js +1769 -0
- package/dist/hooks/chunk-3FK5SFAC.js +432 -0
- package/dist/hooks/chunk-3PWPYDD2.js +240 -0
- package/dist/hooks/chunk-3TQU7TDH.js +375 -0
- package/dist/hooks/chunk-3TVLSFZ6.js +432 -0
- package/dist/hooks/chunk-3VXYCB4E.js +77 -0
- package/dist/hooks/chunk-44M6JXGV.js +3398 -0
- package/dist/hooks/chunk-46EEEHC3.js +240 -0
- package/dist/hooks/chunk-4A7UVP2P.js +364 -0
- package/dist/hooks/chunk-4LFQEZS4.js +137 -0
- package/dist/hooks/chunk-4OCX3V2T.js +469 -0
- package/dist/hooks/chunk-4OHA5DE7.js +49 -0
- package/dist/hooks/chunk-4PMDW3YD.js +68 -0
- package/dist/hooks/chunk-4QHBNAI4.js +68 -0
- package/dist/hooks/chunk-4SSB3FEE.js +3273 -0
- package/dist/hooks/chunk-5A2WQ2CQ.js +5390 -0
- package/dist/hooks/chunk-5EVA2JQB.js +5390 -0
- package/dist/hooks/chunk-5P7VF5VE.js +3230 -0
- package/dist/hooks/chunk-5QWJGGZP.js +49 -0
- package/dist/hooks/chunk-5U5EZYG6.js +77 -0
- package/dist/hooks/chunk-5VUUF3ZV.js +240 -0
- package/dist/hooks/chunk-5WA7UBT3.js +374 -0
- package/dist/hooks/chunk-6EBGRQ3Q.js +301 -0
- package/dist/hooks/chunk-6TVHWMD3.js +432 -0
- package/dist/hooks/chunk-6V5OPIUU.js +13 -0
- package/dist/hooks/chunk-6VAGLEMB.js +68 -0
- package/dist/hooks/chunk-75BTXKFJ.js +3424 -0
- package/dist/hooks/chunk-75RHN67S.js +137 -0
- package/dist/hooks/chunk-76KC3BDD.js +3414 -0
- package/dist/hooks/chunk-76SLS7CZ.js +898 -0
- package/dist/hooks/chunk-7DHZ4DWT.js +5015 -0
- package/dist/hooks/chunk-7INSJDGE.js +458 -0
- package/dist/hooks/chunk-7VJ4FTDX.js +268 -0
- package/dist/hooks/chunk-7XCYNHQK.js +77 -0
- package/dist/hooks/chunk-A5YJ3H7E.js +375 -0
- package/dist/hooks/chunk-AAEXXUUL.js +268 -0
- package/dist/hooks/chunk-ABVEVV2M.js +432 -0
- package/dist/hooks/chunk-ACN3YXFL.js +68 -0
- package/dist/hooks/chunk-AD3XE3QZ.js +397 -0
- package/dist/hooks/chunk-AENFZPZH.js +230 -0
- package/dist/hooks/chunk-AFKRFQ6W.js +68 -0
- package/dist/hooks/chunk-AHD5IPWI.js +375 -0
- package/dist/hooks/chunk-AMK5JGV7.js +77 -0
- package/dist/hooks/chunk-ARN7NCQI.js +425 -0
- package/dist/hooks/chunk-AUFY653N.js +3425 -0
- package/dist/hooks/chunk-AXQBNFEF.js +375 -0
- package/dist/hooks/chunk-AYC7R6U4.js +3316 -0
- package/dist/hooks/chunk-AYEA2FJ7.js +5015 -0
- package/dist/hooks/chunk-B2LIXYFL.js +77 -0
- package/dist/hooks/chunk-B4HPNY2I.js +375 -0
- package/dist/hooks/chunk-B4YNCUGB.js +469 -0
- package/dist/hooks/chunk-B57S3VWT.js +922 -0
- package/dist/hooks/chunk-BINZ3PLI.js +364 -0
- package/dist/hooks/chunk-BIWLABFK.js +432 -0
- package/dist/hooks/chunk-BODUSXKK.js +410 -0
- package/dist/hooks/chunk-BQBAT2YK.js +375 -0
- package/dist/hooks/chunk-BUJEBW75.js +391 -0
- package/dist/hooks/chunk-BVNWORKA.js +72 -0
- package/dist/hooks/chunk-BWI47LQS.js +5205 -0
- package/dist/hooks/chunk-C25HRMJX.js +137 -0
- package/dist/hooks/chunk-CBFZNC74.js +375 -0
- package/dist/hooks/chunk-CECYXS4Y.js +3424 -0
- package/dist/hooks/chunk-CELGUP5F.js +49 -0
- package/dist/hooks/chunk-CMHANU3F.js +3442 -0
- package/dist/hooks/chunk-CMN372LI.js +68 -0
- package/dist/hooks/chunk-CPGZLMMK.js +3299 -0
- package/dist/hooks/chunk-CTQKXDC7.js +268 -0
- package/dist/hooks/chunk-CYAT4RIT.js +68 -0
- package/dist/hooks/chunk-CYTWYCH2.js +5014 -0
- package/dist/hooks/chunk-CZSOLRBA.js +77 -0
- package/dist/hooks/chunk-D2PIDYJR.js +3438 -0
- package/dist/hooks/chunk-DE57HI6T.js +137 -0
- package/dist/hooks/chunk-DGXDGAPG.js +5306 -0
- package/dist/hooks/chunk-DNYRSYQG.js +5014 -0
- package/dist/hooks/chunk-DTAXH2A2.js +240 -0
- package/dist/hooks/chunk-E2IZUWI5.js +375 -0
- package/dist/hooks/chunk-E4L2K2BL.js +397 -0
- package/dist/hooks/chunk-E55NKX5F.js +68 -0
- package/dist/hooks/chunk-ECXVCCVD.js +3079 -0
- package/dist/hooks/chunk-EPHO443D.js +68 -0
- package/dist/hooks/chunk-EUFK2BI2.js +375 -0
- package/dist/hooks/chunk-EYCD5ZAV.js +137 -0
- package/dist/hooks/chunk-F2SDYJU4.js +240 -0
- package/dist/hooks/chunk-F4B5D5TF.js +68 -0
- package/dist/hooks/chunk-FGEO3NDX.js +432 -0
- package/dist/hooks/chunk-FJYI52RE.js +137 -0
- package/dist/hooks/chunk-FXAKJKTB.js +18 -0
- package/dist/hooks/chunk-FYTZHIY4.js +3085 -0
- package/dist/hooks/chunk-G7JL2A5K.js +375 -0
- package/dist/hooks/chunk-GA3ITDBW.js +42 -0
- package/dist/hooks/chunk-GDR4H4SV.js +469 -0
- package/dist/hooks/chunk-GFKDXPSM.js +2855 -0
- package/dist/hooks/chunk-GIMRTKFU.js +566 -0
- package/dist/hooks/chunk-GOPHRLGO.js +240 -0
- package/dist/hooks/chunk-GX4HO7SJ.js +230 -0
- package/dist/hooks/chunk-GXKKK23T.js +240 -0
- package/dist/hooks/chunk-GZ6FUVIK.js +566 -0
- package/dist/hooks/chunk-H5HPY5M5.js +2869 -0
- package/dist/hooks/chunk-HCF3OGEE.js +1829 -0
- package/dist/hooks/chunk-HDEXAOUM.js +469 -0
- package/dist/hooks/chunk-HM2TY3TN.js +469 -0
- package/dist/hooks/chunk-HOA7NXA2.js +55 -0
- package/dist/hooks/chunk-HOFEWH6H.js +240 -0
- package/dist/hooks/chunk-HUUI6S5J.js +2669 -0
- package/dist/hooks/chunk-I4D3NVUD.js +469 -0
- package/dist/hooks/chunk-I4Q6WAJE.js +68 -0
- package/dist/hooks/chunk-IB6N4CR2.js +432 -0
- package/dist/hooks/chunk-IFLDYJMD.js +469 -0
- package/dist/hooks/chunk-IGU466YD.js +77 -0
- package/dist/hooks/chunk-IJCQUHKY.js +375 -0
- package/dist/hooks/chunk-IKUMBDJB.js +230 -0
- package/dist/hooks/chunk-IM3BDIBJ.js +5005 -0
- package/dist/hooks/chunk-IMYMAODK.js +3431 -0
- package/dist/hooks/chunk-IN2ZVGXA.js +5005 -0
- package/dist/hooks/chunk-ITVJ2MKQ.js +18 -0
- package/dist/hooks/chunk-J5RIJYTM.js +2669 -0
- package/dist/hooks/chunk-JFLMH4K5.js +3460 -0
- package/dist/hooks/chunk-JR25IFML.js +77 -0
- package/dist/hooks/chunk-JT5AUXFI.js +432 -0
- package/dist/hooks/chunk-JY5YVN6N.js +3234 -0
- package/dist/hooks/chunk-K5Q4ETVI.js +391 -0
- package/dist/hooks/chunk-K67V2F24.js +137 -0
- package/dist/hooks/chunk-KABG6AEW.js +3460 -0
- package/dist/hooks/chunk-KATZESEC.js +3273 -0
- package/dist/hooks/chunk-KFH4H7W7.js +469 -0
- package/dist/hooks/chunk-KMUEI6RX.js +910 -0
- package/dist/hooks/chunk-KMV4OY77.js +3438 -0
- package/dist/hooks/chunk-KQAZNWEY.js +137 -0
- package/dist/hooks/chunk-KZZR6JER.js +5015 -0
- package/dist/hooks/chunk-LAR6DREP.js +77 -0
- package/dist/hooks/chunk-LNCJWEZD.js +5015 -0
- package/dist/hooks/chunk-LRYD2GLM.js +6 -0
- package/dist/hooks/chunk-LXBKYHDV.js +77 -0
- package/dist/hooks/chunk-LYLKIUNE.js +5024 -0
- package/dist/hooks/chunk-LZKCFOVC.js +432 -0
- package/dist/hooks/chunk-M4FCIYRI.js +77 -0
- package/dist/hooks/chunk-M5M7327Q.js +3425 -0
- package/dist/hooks/chunk-MF72MHSX.js +3455 -0
- package/dist/hooks/chunk-MK56LKDO.js +397 -0
- package/dist/hooks/chunk-N3MJADY7.js +240 -0
- package/dist/hooks/chunk-NFQSUDBN.js +458 -0
- package/dist/hooks/chunk-NHREKY45.js +137 -0
- package/dist/hooks/chunk-NP5TTAAW.js +375 -0
- package/dist/hooks/chunk-NQTLTKTJ.js +2993 -0
- package/dist/hooks/chunk-NVRCZPBZ.js +391 -0
- package/dist/hooks/chunk-O46HMMLJ.js +469 -0
- package/dist/hooks/chunk-OFJGH2L4.js +240 -0
- package/dist/hooks/chunk-OLFMCZH5.js +240 -0
- package/dist/hooks/chunk-OMCZS46I.js +49 -0
- package/dist/hooks/chunk-OQZEZW5G.js +469 -0
- package/dist/hooks/chunk-P2MDAT2Y.js +1897 -0
- package/dist/hooks/chunk-P3M2JJIF.js +68 -0
- package/dist/hooks/chunk-PDVHQITQ.js +3453 -0
- package/dist/hooks/chunk-PNT2AMDH.js +391 -0
- package/dist/hooks/chunk-PR2LVSY6.js +3445 -0
- package/dist/hooks/chunk-PRR5R4JK.js +137 -0
- package/dist/hooks/chunk-PXT44QVN.js +566 -0
- package/dist/hooks/chunk-PZLWJLAP.js +469 -0
- package/dist/hooks/chunk-Q2FEAZJ2.js +77 -0
- package/dist/hooks/chunk-Q32WETDO.js +3265 -0
- package/dist/hooks/chunk-Q45DUBLE.js +3600 -0
- package/dist/hooks/chunk-Q7NZSWQ5.js +240 -0
- package/dist/hooks/chunk-QH2JNAMK.js +3085 -0
- package/dist/hooks/chunk-QNNWYQ2R.js +375 -0
- package/dist/hooks/chunk-QPU5H2OS.js +68 -0
- package/dist/hooks/chunk-QRAHZ5TO.js +1829 -0
- package/dist/hooks/chunk-QUZ5HPIE.js +469 -0
- package/dist/hooks/chunk-QVCRG34O.js +2893 -0
- package/dist/hooks/chunk-R3MY4E3S.js +1675 -0
- package/dist/hooks/chunk-R6TXJJXP.js +77 -0
- package/dist/hooks/chunk-REJU6VT7.js +1829 -0
- package/dist/hooks/chunk-REQAQLRC.js +2993 -0
- package/dist/hooks/chunk-RFCXPAHH.js +391 -0
- package/dist/hooks/chunk-RHI6Y22X.js +137 -0
- package/dist/hooks/chunk-RKZVOBBS.js +469 -0
- package/dist/hooks/chunk-RL57TT2Y.js +566 -0
- package/dist/hooks/chunk-RORDOD4S.js +3321 -0
- package/dist/hooks/chunk-RZKYW5P2.js +77 -0
- package/dist/hooks/chunk-SJPJ6VSI.js +391 -0
- package/dist/hooks/chunk-SKSIJQQQ.js +432 -0
- package/dist/hooks/chunk-SSQDZKXG.js +268 -0
- package/dist/hooks/chunk-SSX23SJ2.js +89 -0
- package/dist/hooks/chunk-SYHFKE4C.js +77 -0
- package/dist/hooks/chunk-TCGNI2ZY.js +42 -0
- package/dist/hooks/chunk-TG3WXJF5.js +137 -0
- package/dist/hooks/chunk-TH7IJAY5.js +77 -0
- package/dist/hooks/chunk-TLZ27PCY.js +240 -0
- package/dist/hooks/chunk-U652FXTN.js +566 -0
- package/dist/hooks/chunk-UEK47YUF.js +268 -0
- package/dist/hooks/chunk-UIO45H3O.js +432 -0
- package/dist/hooks/chunk-UNLZEEVH.js +5005 -0
- package/dist/hooks/chunk-UNRVF3SZ.js +432 -0
- package/dist/hooks/chunk-USLFAFOI.js +3453 -0
- package/dist/hooks/chunk-VAEELMLL.js +442 -0
- package/dist/hooks/chunk-VALSWLDQ.js +3453 -0
- package/dist/hooks/chunk-VC5JEPNY.js +3398 -0
- package/dist/hooks/chunk-VEZVK6C7.js +230 -0
- package/dist/hooks/chunk-VK5JKFAR.js +49 -0
- package/dist/hooks/chunk-VNF2KP7Z.js +469 -0
- package/dist/hooks/chunk-VWWCUMW6.js +2669 -0
- package/dist/hooks/chunk-W4JARUQV.js +137 -0
- package/dist/hooks/chunk-WCYPBPJC.js +5014 -0
- package/dist/hooks/chunk-WEOBMNJG.js +2993 -0
- package/dist/hooks/chunk-WKJU3J5Y.js +5390 -0
- package/dist/hooks/chunk-WMN4TSVF.js +3299 -0
- package/dist/hooks/chunk-WNON54PT.js +3469 -0
- package/dist/hooks/chunk-WOVKBPPX.js +137 -0
- package/dist/hooks/chunk-WRVFORYJ.js +432 -0
- package/dist/hooks/chunk-WUBVYGQZ.js +240 -0
- package/dist/hooks/chunk-WWULTUOM.js +68 -0
- package/dist/hooks/chunk-WXHKKB45.js +4962 -0
- package/dist/hooks/chunk-XAI3YTHJ.js +469 -0
- package/dist/hooks/chunk-XFZH6JZJ.js +77 -0
- package/dist/hooks/chunk-XGPWX6IA.js +137 -0
- package/dist/hooks/chunk-XIXXIVGY.js +566 -0
- package/dist/hooks/chunk-XKDOYJGA.js +922 -0
- package/dist/hooks/chunk-YALTVBHM.js +432 -0
- package/dist/hooks/chunk-YEBEPBFK.js +5014 -0
- package/dist/hooks/chunk-YI2BQ3DK.js +3441 -0
- package/dist/hooks/chunk-YVNBCFGG.js +1829 -0
- package/dist/hooks/chunk-YXBN3RGG.js +432 -0
- package/dist/hooks/chunk-Z2OOJSW3.js +3163 -0
- package/dist/hooks/chunk-ZA3HVBOY.js +2644 -0
- package/dist/hooks/chunk-ZKID46U3.js +137 -0
- package/dist/hooks/chunk-ZPMU2JV6.js +49 -0
- package/dist/hooks/chunk-ZRKY4W7O.js +432 -0
- package/dist/hooks/chunk-ZTMRB7LJ.js +268 -0
- package/dist/hooks/chunk-ZVPPBQ3L.js +3413 -0
- package/dist/hooks/codex-hook-adapter.js +164 -0
- package/dist/hooks/duplicate-read-guard.js +29 -0
- package/dist/hooks/format-edited.js +37 -0
- package/dist/hooks/investigation-guard.js +31 -0
- package/dist/hooks/pretool-guard.js +21 -0
- package/dist/hooks/session-lang.js +34 -0
- package/dist/hooks/stop-guard.js +1597 -0
- package/dist/josh.js +1795 -0
- package/dist/managed-marker/index.d.ts +10 -0
- package/dist/managed-marker/index.js +32 -0
- package/dist/self-sync-guard/index.d.ts +10 -0
- package/dist/self-sync-guard/index.js +49 -0
- package/dist/version/index.d.ts +93 -0
- package/dist/version/index.js +1024 -0
- package/env/index.d.ts +7 -0
- package/env/index.js +62 -0
- package/eslint/base.js +233 -0
- package/eslint/checkout-rooted-parser.js +34 -0
- package/eslint/config-fingerprint.js +103 -0
- package/eslint/rules/code-quality.js +292 -0
- package/eslint/rules/english-only-prose.js +135 -0
- package/eslint/rules/formatting.js +44 -0
- package/eslint/rules/import.js +83 -0
- package/eslint/rules/namespace-object-export.js +107 -0
- package/eslint/rules/naming-convention.js +109 -0
- package/eslint/rules/promise.js +17 -0
- package/eslint/rules/sonarjs.js +45 -0
- package/eslint/rules/test-filename.js +91 -0
- package/eslint/rules/typescript.js +186 -0
- package/eslint/rules/unicorn.js +191 -0
- package/eslint/vanilla.js +1 -0
- package/evals/scenarios/consult-not-execute.json +20 -0
- package/evals/scenarios/no-implicit-workflow.json +26 -0
- package/evals/scenarios/overrides-both-locations.json +29 -0
- package/evals/scenarios/upstream-interrupt.json +23 -0
- package/evals/scenarios/workflow-skill-loaded.json +16 -0
- package/lefthook/base.yml +131 -0
- package/lefthook/vanilla.yml +7 -0
- package/package.json +169 -0
- package/playwright.config.ts +160 -0
- package/pnpm-workspace.yaml +41 -0
- package/ports/index.d.ts +17 -0
- package/ports/index.js +256 -0
- package/prettier/index.d.ts +3 -0
- package/prettier/index.js +31 -0
- package/prompts/agent-lint-protocol.json +79 -0
- package/prompts/agent-rules.md +63 -0
- package/prompts/coding-standards.md +382 -0
- package/prompts/collaboration-workflow/consultation-vs-execution.md +8 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +54 -0
- package/prompts/collaboration-workflow/distributed-docs.md +7 -0
- package/prompts/collaboration-workflow/durable-rules.md +24 -0
- package/prompts/collaboration-workflow/epic-audit.md +56 -0
- package/prompts/collaboration-workflow/epic-bundle.md +109 -0
- package/prompts/collaboration-workflow/file-edits.md +124 -0
- package/prompts/collaboration-workflow/gh-rest.md +57 -0
- package/prompts/collaboration-workflow/issue-citation.md +38 -0
- package/prompts/collaboration-workflow/issue-template.md +190 -0
- package/prompts/collaboration-workflow/latest-first.md +14 -0
- package/prompts/collaboration-workflow/no-clones.md +11 -0
- package/prompts/collaboration-workflow/operating-rules.md +123 -0
- package/prompts/collaboration-workflow/output-bounds.md +107 -0
- package/prompts/collaboration-workflow/overview.md +35 -0
- package/prompts/collaboration-workflow/plan-comment.md +85 -0
- package/prompts/collaboration-workflow/proposal-request.md +23 -0
- package/prompts/collaboration-workflow/report-format.md +206 -0
- package/prompts/collaboration-workflow/residency.md +94 -0
- package/prompts/collaboration-workflow/rule-delivery.md +146 -0
- package/prompts/collaboration-workflow/shell-body.md +82 -0
- package/prompts/collaboration-workflow/simplicity-first.md +9 -0
- package/prompts/collaboration-workflow/single-source-rules.md +13 -0
- package/prompts/collaboration-workflow/turn-batching.md +137 -0
- package/prompts/collaboration-workflow/upstream-interrupt.md +51 -0
- package/prompts/collaboration-workflow/wip-cap.md +118 -0
- package/prompts/collaboration-workflow.md +52 -0
- package/prompts/refactoring.md +103 -0
- package/prompts/review-rubric.md +338 -0
- package/prompts/review.md +217 -0
- package/prompts/sonar-hotspot-handling.md +77 -0
- package/prompts/testing-guide.md +277 -0
- package/scripts/adopt/adopt-logic.ts +107 -0
- package/scripts/adopt/adopt-toolkits.ts +181 -0
- package/scripts/adopt/adopt.ts +171 -0
- package/scripts/agent/agent-argv.ts +140 -0
- package/scripts/agent/agent-diagnostics.ts +120 -0
- package/scripts/agent/agent-event.ts +173 -0
- package/scripts/agent/agent-exit-record.ts +32 -0
- package/scripts/agent/agent-launch-environment.ts +71 -0
- package/scripts/agent/agent-role-profile.ts +329 -0
- package/scripts/agent/api-outage.ts +51 -0
- package/scripts/agent/claude-agent-argv.ts +151 -0
- package/scripts/agent/claude-result-event.ts +98 -0
- package/scripts/agent/codex-agent-argv.ts +94 -0
- package/scripts/agent/codex-home-source.ts +11 -0
- package/scripts/agent/interactive-ask.ts +91 -0
- package/scripts/auto-ok/auto-ok-cli.ts +516 -0
- package/scripts/backlog/backlog-arrival.ts +147 -0
- package/scripts/backlog/backlog-budget-cli.ts +220 -0
- package/scripts/backlog/backlog-budget.ts +284 -0
- package/scripts/backlog/backlog-defect-priority.ts +77 -0
- package/scripts/backlog/backlog-drive-cli.ts +377 -0
- package/scripts/backlog/backlog-drive-finish.ts +23 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +81 -0
- package/scripts/backlog/backlog-drive-named.ts +101 -0
- package/scripts/backlog/backlog-drive-offer-argv.ts +29 -0
- package/scripts/backlog/backlog-drive-owner.ts +22 -0
- package/scripts/backlog/backlog-drive-restore.ts +67 -0
- package/scripts/backlog/backlog-drive.ts +322 -0
- package/scripts/backlog/backlog-named.ts +164 -0
- package/scripts/backlog/backlog-next.ts +376 -0
- package/scripts/backlog/backlog-offer-cli.ts +279 -0
- package/scripts/backlog/backlog-offer.ts +93 -0
- package/scripts/backlog/backlog-plan-cli.ts +235 -0
- package/scripts/backlog/backlog-plan.ts +231 -0
- package/scripts/backlog/backlog-pool.ts +322 -0
- package/scripts/backlog/backlog-ready.ts +146 -0
- package/scripts/backlog/backlog-scope.ts +144 -0
- package/scripts/backlog/backlog-stalled-cli.ts +30 -0
- package/scripts/backlog/backlog-stalled-detect.ts +143 -0
- package/scripts/backlog/backlog-stalled.ts +118 -0
- package/scripts/behavior/behavior-assertion.ts +87 -0
- package/scripts/behavior/behavior-cli.ts +88 -0
- package/scripts/behavior/behavior-rules.ts +128 -0
- package/scripts/build/build-bin.ts +36 -0
- package/scripts/build/build-claude-md.ts +42 -0
- package/scripts/build/build-config-merge.ts +26 -0
- package/scripts/build/build-hooks.ts +79 -0
- package/scripts/build/build-library.ts +83 -0
- package/scripts/build/build-managed-marker.ts +26 -0
- package/scripts/build/build-self-sync-guard.ts +26 -0
- package/scripts/build/build-version.ts +25 -0
- package/scripts/build/local-bin.ts +97 -0
- package/scripts/build/shim-shell.ts +25 -0
- package/scripts/bytes/bytes-command.ts +181 -0
- package/scripts/cases/cases-cli.ts +48 -0
- package/scripts/cases/cases-logic.ts +100 -0
- package/scripts/claude/skill-meta.ts +37 -0
- package/scripts/claude/workflow-destination.ts +13 -0
- package/scripts/clone/clone-aggregate.ts +76 -0
- package/scripts/clone/clone-fingerprint.ts +96 -0
- package/scripts/clone/clone-scan-cli.ts +39 -0
- package/scripts/clone/clone-scan.ts +158 -0
- package/scripts/config-merge/index.ts +19 -0
- package/scripts/config-merge/json-format.ts +128 -0
- package/scripts/config-merge/list-patch.ts +61 -0
- package/scripts/config-merge/parse-jsonc.ts +14 -0
- package/scripts/config-merge/patch-json-key.ts +439 -0
- package/scripts/config-merge/patch-json-list.ts +38 -0
- package/scripts/config-merge/patch-yaml-list.ts +107 -0
- package/scripts/cost-runtime/codex-usage.ts +119 -0
- package/scripts/cost-runtime/context-cut-payback.ts +77 -0
- package/scripts/cost-runtime/context-cut-threshold.ts +21 -0
- package/scripts/cost-runtime/cost-attribute.ts +168 -0
- package/scripts/cost-runtime/cost-blocks.ts +149 -0
- package/scripts/cost-runtime/cost-cli.ts +318 -0
- package/scripts/cost-runtime/cost-corpus.ts +278 -0
- package/scripts/cost-runtime/cost-format.ts +32 -0
- package/scripts/cost-runtime/cost-pricing.ts +176 -0
- package/scripts/cost-runtime/cost-tokens.ts +84 -0
- package/scripts/cost-runtime/cost-transcript.ts +531 -0
- package/scripts/cost-runtime/cost-usage.ts +287 -0
- package/scripts/cost-runtime/cost-verdict.ts +89 -0
- package/scripts/cost-runtime/own-session.ts +58 -0
- package/scripts/cost-runtime/transcript-cwd.ts +14 -0
- package/scripts/delegation/delegation-cli.ts +91 -0
- package/scripts/delegation/delegation-policy.ts +178 -0
- package/scripts/delegation/duplicate-read-guard.ts +244 -0
- package/scripts/delegation/fanout-cli.ts +61 -0
- package/scripts/delegation/fanout.ts +95 -0
- package/scripts/delegation/investigation-guard.ts +131 -0
- package/scripts/delegation/investigation-reads.ts +637 -0
- package/scripts/discovery/repo-discovery.ts +166 -0
- package/scripts/discovery/repo-map-logic.ts +102 -0
- package/scripts/discovery/repo-origin.ts +153 -0
- package/scripts/discovery/repo-party-cli.ts +69 -0
- package/scripts/discovery/repo-party.ts +46 -0
- package/scripts/doctor/doctor-consumer.ts +181 -0
- package/scripts/doctor/doctor-io.ts +210 -0
- package/scripts/doctor/doctor-logic.ts +122 -0
- package/scripts/doctor/doctor-ports.ts +117 -0
- package/scripts/doctor/doctor.ts +232 -0
- package/scripts/document/backlogrun-parent-read-set.ts +48 -0
- package/scripts/document/bash-output-cap.ts +45 -0
- package/scripts/document/document-byte-budget.ts +183 -0
- package/scripts/document/document-byte-check.ts +131 -0
- package/scripts/document/document-reachability.ts +131 -0
- package/scripts/document/document-read-cli.ts +82 -0
- package/scripts/document/document-scan.ts +108 -0
- package/scripts/document/document-section-cli.ts +101 -0
- package/scripts/document/document-section.ts +156 -0
- package/scripts/document/edit-files-cli.ts +280 -0
- package/scripts/document/entry-read-budget.ts +154 -0
- package/scripts/document/entry-read-set.ts +471 -0
- package/scripts/document/generate-catalog.ts +69 -0
- package/scripts/document/lane-child-read-set.ts +88 -0
- package/scripts/document/read-files-cli.ts +135 -0
- package/scripts/document/read-set-cli.ts +295 -0
- package/scripts/document/read-set-point-of-use.ts +89 -0
- package/scripts/document/read-set-pricing.ts +52 -0
- package/scripts/document/read-set-trim.ts +78 -0
- package/scripts/document/retired-phrases.ts +143 -0
- package/scripts/document/review-agent-type.ts +46 -0
- package/scripts/document/single-source.ts +73 -0
- package/scripts/epic/epic-audit-checks.ts +452 -0
- package/scripts/epic/epic-audit-cli.ts +374 -0
- package/scripts/epic/epic-audit-orphans.ts +142 -0
- package/scripts/epic/epic-audit-rationale.ts +191 -0
- package/scripts/epic/epic-audit-report.ts +101 -0
- package/scripts/epic/epic-audit.ts +240 -0
- package/scripts/epic/epic-bundle-cli.ts +472 -0
- package/scripts/epic/epic-bundle-evidence.ts +147 -0
- package/scripts/epic/epic-bundle-gaps.ts +86 -0
- package/scripts/epic/epic-bundle-referenced.ts +195 -0
- package/scripts/epic/epic-bundle.ts +309 -0
- package/scripts/epic/epic-busy.ts +204 -0
- package/scripts/epic/epic-candidate-confirm.ts +279 -0
- package/scripts/epic/epic-classify.ts +294 -0
- package/scripts/epic/epic-cross-repo.ts +366 -0
- package/scripts/epic/epic-fetch.ts +370 -0
- package/scripts/epic/epic-graph.ts +279 -0
- package/scripts/epic/epic-index.ts +209 -0
- package/scripts/epic/epic-issue.ts +172 -0
- package/scripts/epic/epic-lane-offer.ts +207 -0
- package/scripts/epic/epic-nested.ts +37 -0
- package/scripts/epic/epic-next-read.ts +141 -0
- package/scripts/epic/epic-next-views.ts +144 -0
- package/scripts/epic/epic-next.ts +477 -0
- package/scripts/epic/epic-outside-blocker.ts +113 -0
- package/scripts/epic/epic-relation-recheck.ts +108 -0
- package/scripts/epic/epic-report.ts +200 -0
- package/scripts/gate/core-budget.ts +292 -0
- package/scripts/gate/gate-log.ts +95 -0
- package/scripts/gate/gate-plan.ts +356 -0
- package/scripts/gate/gate-report.ts +207 -0
- package/scripts/gate/gate-skip.ts +123 -0
- package/scripts/gate/gate-tree.ts +49 -0
- package/scripts/gate/hook-gate-reuse.ts +130 -0
- package/scripts/gate/pre-commit-type-check.ts +187 -0
- package/scripts/gate/scoped-green.ts +260 -0
- package/scripts/gate/type-check-step.ts +90 -0
- package/scripts/gate/verification-gate.ts +531 -0
- package/scripts/gh/fix-gh-packages-logic.ts +232 -0
- package/scripts/gh/fix-gh-packages.ts +129 -0
- package/scripts/gh/gh-cli-token.ts +18 -0
- package/scripts/gh/gh-spawn.ts +44 -0
- package/scripts/git/animation-helpers.ts +81 -0
- package/scripts/git/change-base.ts +26 -0
- package/scripts/git/changed-file-scope.ts +209 -0
- package/scripts/git/changed-paths.ts +30 -0
- package/scripts/git/constants.ts +41 -0
- package/scripts/git/git-ai-review-scan.ts +154 -0
- package/scripts/git/git-animation.ts +41 -0
- package/scripts/git/git-branch.ts +127 -0
- package/scripts/git/git-command.ts +587 -0
- package/scripts/git/git-commit.ts +27 -0
- package/scripts/git/git-common-directory.ts +38 -0
- package/scripts/git/git-epic-add-body.ts +365 -0
- package/scripts/git/git-epic-add-plan.ts +421 -0
- package/scripts/git/git-epic-add.ts +249 -0
- package/scripts/git/git-epic-body.ts +150 -0
- package/scripts/git/git-epic-chains.ts +411 -0
- package/scripts/git/git-epic-close-comment.ts +199 -0
- package/scripts/git/git-epic-close.ts +393 -0
- package/scripts/git/git-epic-decision.ts +171 -0
- package/scripts/git/git-epic-parse.ts +351 -0
- package/scripts/git/git-epic-promote.ts +102 -0
- package/scripts/git/git-epic-read.ts +73 -0
- package/scripts/git/git-epic-reconcile.ts +246 -0
- package/scripts/git/git-epic-reference.ts +98 -0
- package/scripts/git/git-epic-relations.ts +78 -0
- package/scripts/git/git-epic-remove-plan.ts +152 -0
- package/scripts/git/git-epic-remove.ts +101 -0
- package/scripts/git/git-epic-run.ts +223 -0
- package/scripts/git/git-epic-sections.ts +98 -0
- package/scripts/git/git-epic-shape.ts +81 -0
- package/scripts/git/git-epic-validate.ts +155 -0
- package/scripts/git/git-error.ts +78 -0
- package/scripts/git/git-execa-error.ts +35 -0
- package/scripts/git/git-fixture-workspace.ts +88 -0
- package/scripts/git/git-followup-cleanup.ts +88 -0
- package/scripts/git/git-followup-flush.ts +63 -0
- package/scripts/git/git-followup-label.ts +67 -0
- package/scripts/git/git-followup-pending.ts +95 -0
- package/scripts/git/git-followup-stages.ts +149 -0
- package/scripts/git/git-gh-api-path.ts +118 -0
- package/scripts/git/git-gh-check.ts +21 -0
- package/scripts/git/git-gh-command.ts +17 -0
- package/scripts/git/git-gh-exec.ts +344 -0
- package/scripts/git/git-gh-failure.ts +103 -0
- package/scripts/git/git-gh-helpers.ts +44 -0
- package/scripts/git/git-gh-issue-list.ts +257 -0
- package/scripts/git/git-gh-issue-read.ts +457 -0
- package/scripts/git/git-gh-issue-rest.ts +238 -0
- package/scripts/git/git-gh-issue-write.ts +285 -0
- package/scripts/git/git-gh-issue.ts +161 -0
- package/scripts/git/git-gh-pr-auto-merge.ts +85 -0
- package/scripts/git/git-gh-pr-read.ts +322 -0
- package/scripts/git/git-gh-pr-rest.ts +172 -0
- package/scripts/git/git-gh-pr-review.ts +103 -0
- package/scripts/git/git-gh-pr-rollup.ts +91 -0
- package/scripts/git/git-gh-pr-snapshot.ts +138 -0
- package/scripts/git/git-gh-pr.ts +219 -0
- package/scripts/git/git-gh-reachability.ts +56 -0
- package/scripts/git/git-gh-repo.ts +37 -0
- package/scripts/git/git-gh-rest-state.ts +14 -0
- package/scripts/git/git-issue.ts +168 -0
- package/scripts/git/git-location-environment.ts +62 -0
- package/scripts/git/git-ls-remote.ts +28 -0
- package/scripts/git/git-next-issues.ts +98 -0
- package/scripts/git/git-notify.ts +104 -0
- package/scripts/git/git-pr-ai-review.ts +180 -0
- package/scripts/git/git-pr-checks-eval.ts +265 -0
- package/scripts/git/git-pr-checks-parse.ts +153 -0
- package/scripts/git/git-pr-checks-watch.ts +184 -0
- package/scripts/git/git-pr-checks.ts +387 -0
- package/scripts/git/git-pr-coderabbit.ts +129 -0
- package/scripts/git/git-pr-confirmation.ts +64 -0
- package/scripts/git/git-pr-error.ts +25 -0
- package/scripts/git/git-pr-followup-wrapup.ts +225 -0
- package/scripts/git/git-pr-followup.ts +436 -0
- package/scripts/git/git-pr-managed-config.ts +69 -0
- package/scripts/git/git-pr-messages.ts +37 -0
- package/scripts/git/git-pr.ts +181 -0
- package/scripts/git/git-prompt-display.ts +22 -0
- package/scripts/git/git-prompt.ts +207 -0
- package/scripts/git/git-push-transport.ts +173 -0
- package/scripts/git/git-push.ts +27 -0
- package/scripts/git/git-remote-branch.ts +40 -0
- package/scripts/git/git-spawn.ts +47 -0
- package/scripts/git/git-staging.ts +128 -0
- package/scripts/git/git-stash.ts +124 -0
- package/scripts/git/git-status.ts +198 -0
- package/scripts/git/git-worktree.ts +110 -0
- package/scripts/git/github-issue-url.ts +105 -0
- package/scripts/git/gone-branch.ts +113 -0
- package/scripts/git/issue-labels.ts +279 -0
- package/scripts/git/listing-cutoff.ts +51 -0
- package/scripts/git/main-merge-guard.ts +134 -0
- package/scripts/git/main-merge.ts +120 -0
- package/scripts/git/main-sync.ts +121 -0
- package/scripts/git/parse-json-array.ts +102 -0
- package/scripts/git/schemas.ts +166 -0
- package/scripts/git/stash-orphans.ts +91 -0
- package/scripts/git/stash-pop-args.ts +59 -0
- package/scripts/git/stash-pop-cli.ts +105 -0
- package/scripts/git/telegram-notify.ts +404 -0
- package/scripts/hooks/batch-guard.ts +144 -0
- package/scripts/hooks/check-commit-message.ts +134 -0
- package/scripts/hooks/codex-hook-adapter.ts +155 -0
- package/scripts/hooks/edited-cspell.ts +128 -0
- package/scripts/hooks/format-edited-file-fixtures.ts +109 -0
- package/scripts/hooks/format-edited-file.ts +510 -0
- package/scripts/hooks/format-rewrite-notice.ts +99 -0
- package/scripts/hooks/pre-push-unit.ts +146 -0
- package/scripts/hooks/pretool-guard.ts +96 -0
- package/scripts/hooks/prevent-main-commit.ts +38 -0
- package/scripts/hooks/prompt-hooks.ts +38 -0
- package/scripts/hooks/reserved-run.ts +90 -0
- package/scripts/hooks/stop-guard.ts +135 -0
- package/scripts/init/claude-plugin-config.ts +51 -0
- package/scripts/init/distributed-paths.ts +100 -0
- package/scripts/init/hook-command-rewrite.ts +85 -0
- package/scripts/init/hook-launch.ts +31 -0
- package/scripts/init/init-actions.ts +147 -0
- package/scripts/init/init-ai-copy.ts +235 -0
- package/scripts/init/init-copy-content.ts +50 -0
- package/scripts/init/init-logic-deploy-vps.ts +43 -0
- package/scripts/init/init-logic-json-merge.ts +340 -0
- package/scripts/init/init-logic-migrate.ts +62 -0
- package/scripts/init/init-logic-package-key-order.ts +50 -0
- package/scripts/init/init-logic-secretlint.ts +36 -0
- package/scripts/init/init-logic-sonar.ts +197 -0
- package/scripts/init/init-logic-templates.ts +142 -0
- package/scripts/init/init-logic-workspace.ts +59 -0
- package/scripts/init/init-logic-yaml-merge.ts +57 -0
- package/scripts/init/init-logic.ts +474 -0
- package/scripts/init/init-paths.ts +11 -0
- package/scripts/init/init-sonar.ts +32 -0
- package/scripts/init/init.ts +219 -0
- package/scripts/init/kit-base-preset.ts +60 -0
- package/scripts/init/plugin-install-hint.ts +47 -0
- package/scripts/init/tsconfig-preset-migration.ts +67 -0
- package/scripts/issue/baseline-measure.ts +105 -0
- package/scripts/issue/behavior-change-lint.ts +122 -0
- package/scripts/issue/defect-rate-cli.ts +167 -0
- package/scripts/issue/defect-rate.ts +145 -0
- package/scripts/issue/issue-backlinks-cli.ts +97 -0
- package/scripts/issue/issue-backlinks.ts +164 -0
- package/scripts/issue/issue-cite-cli.ts +158 -0
- package/scripts/issue/issue-cite.ts +102 -0
- package/scripts/issue/issue-comment-cli.ts +95 -0
- package/scripts/issue/issue-fold-cli.ts +104 -0
- package/scripts/issue/issue-fold-existing-cli.ts +81 -0
- package/scripts/issue/issue-fold-existing.ts +73 -0
- package/scripts/issue/issue-fold.ts +42 -0
- package/scripts/issue/issue-lint-cli.ts +60 -0
- package/scripts/issue/issue-lint.ts +26 -0
- package/scripts/issue/issue-logic.ts +50 -0
- package/scripts/issue/issue-read-cli.ts +190 -0
- package/scripts/issue/issue-read.ts +145 -0
- package/scripts/issue/issue-scout-cli.ts +482 -0
- package/scripts/issue/issue-scout.ts +244 -0
- package/scripts/issue/issue-state-cli.ts +260 -0
- package/scripts/issue/issue-state.ts +109 -0
- package/scripts/issue/markdown-section.ts +39 -0
- package/scripts/issue/measure-rerun-cli.ts +98 -0
- package/scripts/issue/reproduction-measure.ts +59 -0
- package/scripts/josh/__snapshots__/josh-command-map.test.ts.snap +1171 -0
- package/scripts/josh/agent-session-environment.ts +188 -0
- package/scripts/josh/cli-body.ts +96 -0
- package/scripts/josh/command-suggest.ts +57 -0
- package/scripts/josh/file-map-stamp.ts +264 -0
- package/scripts/josh/hook-decision.ts +479 -0
- package/scripts/josh/josh-command-map.ts +196 -0
- package/scripts/josh/josh-command-types.ts +226 -0
- package/scripts/josh/josh-commands-ai.ts +327 -0
- package/scripts/josh/josh-commands-backlog.ts +54 -0
- package/scripts/josh/josh-commands-clone.ts +18 -0
- package/scripts/josh/josh-commands-development.ts +206 -0
- package/scripts/josh/josh-commands-document.ts +45 -0
- package/scripts/josh/josh-commands-guard.ts +38 -0
- package/scripts/josh/josh-commands-hooks.ts +42 -0
- package/scripts/josh/josh-commands-issue.ts +69 -0
- package/scripts/josh/josh-commands-lane.ts +75 -0
- package/scripts/josh/josh-commands-lint.ts +37 -0
- package/scripts/josh/josh-commands-maintenance.ts +80 -0
- package/scripts/josh/josh-commands-project.ts +53 -0
- package/scripts/josh/josh-commands-split.ts +20 -0
- package/scripts/josh/josh-commands-versioning.ts +48 -0
- package/scripts/josh/josh-commands-workflow.ts +116 -0
- package/scripts/josh/josh-composite-arguments.ts +55 -0
- package/scripts/josh/josh-environment-file.ts +31 -0
- package/scripts/josh/josh-in-process.ts +80 -0
- package/scripts/josh/josh-logic.ts +308 -0
- package/scripts/josh/josh-run.ts +53 -0
- package/scripts/josh/josh-script-reader.ts +11 -0
- package/scripts/josh/josh-verdict.ts +111 -0
- package/scripts/josh/josh.ts +60 -0
- package/scripts/josh/kit-only.ts +33 -0
- package/scripts/josh/path-decision.ts +104 -0
- package/scripts/josh/platform-temporary.ts +66 -0
- package/scripts/josh/process-identity.ts +335 -0
- package/scripts/josh/session-language-cli.ts +51 -0
- package/scripts/josh/session-language.ts +30 -0
- package/scripts/josh/stamp-file.ts +194 -0
- package/scripts/lane/lane-await.ts +165 -0
- package/scripts/lane/lane-cache-run.ts +39 -0
- package/scripts/lane/lane-cache.ts +135 -0
- package/scripts/lane/lane-capacity.ts +69 -0
- package/scripts/lane/lane-child-invocation.ts +73 -0
- package/scripts/lane/lane-child-marker.ts +58 -0
- package/scripts/lane/lane-cli.ts +410 -0
- package/scripts/lane/lane-close.ts +197 -0
- package/scripts/lane/lane-dispatch-log.ts +13 -0
- package/scripts/lane/lane-dispatch.ts +458 -0
- package/scripts/lane/lane-environment.ts +253 -0
- package/scripts/lane/lane-guard-policy.ts +136 -0
- package/scripts/lane/lane-install.ts +94 -0
- package/scripts/lane/lane-launch-cli.ts +133 -0
- package/scripts/lane/lane-occupancy.ts +112 -0
- package/scripts/lane/lane-open.ts +275 -0
- package/scripts/lane/lane-output.ts +124 -0
- package/scripts/lane/lane-paths.ts +96 -0
- package/scripts/lane/lane-reap.ts +137 -0
- package/scripts/lane/lane-registry.ts +261 -0
- package/scripts/lane/lane-relaunch.ts +68 -0
- package/scripts/lane/lane-report.ts +95 -0
- package/scripts/lane/lane-resume.ts +61 -0
- package/scripts/lane/lane-seed.ts +44 -0
- package/scripts/lane/lane-start-point.ts +175 -0
- package/scripts/lane/openai-lane-supervisor-cli.ts +32 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +63 -0
- package/scripts/lane/openai-lane-supervisor.ts +337 -0
- package/scripts/lib/bounded-pool.ts +109 -0
- package/scripts/lib/buffered-process.ts +82 -0
- package/scripts/lib/caddy-logs.sh +45 -0
- package/scripts/lib/cli-flags.ts +19 -0
- package/scripts/lib/json-value.ts +24 -0
- package/scripts/lib/poll.ts +57 -0
- package/scripts/lib/read-file.ts +16 -0
- package/scripts/lib/schemas.ts +67 -0
- package/scripts/lib/spawn-exit.ts +45 -0
- package/scripts/lib/status-icons.ts +24 -0
- package/scripts/lines/effective-limit.ts +156 -0
- package/scripts/lines/line-budget.ts +404 -0
- package/scripts/lines/line-targets.ts +80 -0
- package/scripts/lines/lines-command.ts +174 -0
- package/scripts/lint/cspell-cached.ts +41 -0
- package/scripts/lint/lint-parallel.ts +72 -0
- package/scripts/lint/lint-related-scope.ts +128 -0
- package/scripts/lint/lint-related.ts +104 -0
- package/scripts/managed-marker/index.ts +5 -0
- package/scripts/managed-marker/managed-marker-logic.ts +67 -0
- package/scripts/observations/observation-ledger-home.ts +32 -0
- package/scripts/observations/observation-ledger-line.ts +93 -0
- package/scripts/observations/observation-ledger.ts +35 -0
- package/scripts/observations/observations-flush-cli.ts +42 -0
- package/scripts/observations/observations-flush-landing.ts +97 -0
- package/scripts/observations/observations-flush.ts +420 -0
- package/scripts/overrides/lockfile-overrides.ts +105 -0
- package/scripts/overrides/overrides-check.ts +84 -0
- package/scripts/overrides/overrides-files.ts +19 -0
- package/scripts/overrides/overrides-logic.ts +211 -0
- package/scripts/overrides/schemas.ts +49 -0
- package/scripts/package/package-scout-cli.ts +195 -0
- package/scripts/package/package-scout-format.ts +151 -0
- package/scripts/package/package-scout.ts +121 -0
- package/scripts/ports/port-command.ts +87 -0
- package/scripts/propagate/propagate-git-failure.ts +191 -0
- package/scripts/propagate/propagate-git.ts +224 -0
- package/scripts/propagate/propagate-publish.ts +181 -0
- package/scripts/propagate/propagate-run.ts +201 -0
- package/scripts/propagate/propagate-steps.ts +421 -0
- package/scripts/propagate/propagate-targets.ts +160 -0
- package/scripts/propagate/propagate.ts +216 -0
- package/scripts/refactor/import-graph.ts +187 -0
- package/scripts/refactor/refactor-lint.ts +250 -0
- package/scripts/refactor/refactor-scan-cli.ts +10 -0
- package/scripts/refactor/refactor-scan.ts +124 -0
- package/scripts/refactor/refactor-targets.ts +103 -0
- package/scripts/release/release-cli.ts +88 -0
- package/scripts/release/release-history.ts +132 -0
- package/scripts/release/release-plan.ts +130 -0
- package/scripts/release/release-publish.ts +152 -0
- package/scripts/release/release-scope-cli.ts +103 -0
- package/scripts/release/release-tag.ts +93 -0
- package/scripts/release/release-worktree.ts +71 -0
- package/scripts/repo/auto-merge-setting-logic.ts +100 -0
- package/scripts/repo/auto-merge-setting.ts +37 -0
- package/scripts/repo/repo-setting.ts +112 -0
- package/scripts/report/report-lint-cli.ts +49 -0
- package/scripts/report/report-lint.ts +250 -0
- package/scripts/retrospective/retrospective-cli.ts +97 -0
- package/scripts/retrospective/retrospective.ts +127 -0
- package/scripts/review/disposition-cli.ts +44 -0
- package/scripts/review/disposition-logic.ts +45 -0
- package/scripts/review/live-evidence.ts +62 -0
- package/scripts/review/review-attest-cli.ts +115 -0
- package/scripts/review/review-attest.ts +319 -0
- package/scripts/review/review-brief-cli.ts +290 -0
- package/scripts/review/review-brief.ts +440 -0
- package/scripts/review/review-checkout.ts +56 -0
- package/scripts/review/review-finding-ledger.ts +167 -0
- package/scripts/review/review-findings-cli.ts +57 -0
- package/scripts/review/review-level.ts +86 -0
- package/scripts/review/review-record-cli.ts +196 -0
- package/scripts/review/review-record.ts +74 -0
- package/scripts/review/review-round2-cli.ts +84 -0
- package/scripts/review/review-round2.ts +139 -0
- package/scripts/review/review-stamps.ts +113 -0
- package/scripts/review/review-tree.ts +58 -0
- package/scripts/rules/bash-triggers.ts +44 -0
- package/scripts/rules/decision-oracle.ts +342 -0
- package/scripts/rules/delivered-rules-harness.ts +72 -0
- package/scripts/rules/delivered-rules.ts +793 -0
- package/scripts/rules/early-heartbeat.ts +241 -0
- package/scripts/rules/file-body.ts +150 -0
- package/scripts/rules/filing-cap.ts +133 -0
- package/scripts/rules/filing-offer.ts +81 -0
- package/scripts/rules/firing-point.ts +63 -0
- package/scripts/rules/gh-api.ts +65 -0
- package/scripts/rules/git-argv.ts +129 -0
- package/scripts/rules/git-force.ts +104 -0
- package/scripts/rules/implementation-cut-verdict.ts +84 -0
- package/scripts/rules/implementation-cut.ts +202 -0
- package/scripts/rules/issue-citation.ts +242 -0
- package/scripts/rules/issue-fold.ts +73 -0
- package/scripts/rules/issue-scout.ts +64 -0
- package/scripts/rules/josh-git-bare.ts +80 -0
- package/scripts/rules/lane-carry-conflict.ts +96 -0
- package/scripts/rules/lane-interactive-ask.ts +71 -0
- package/scripts/rules/lane-park.ts +122 -0
- package/scripts/rules/lane-switch-main.ts +139 -0
- package/scripts/rules/oracle-consulted.ts +81 -0
- package/scripts/rules/oracle-firing.ts +151 -0
- package/scripts/rules/oracle-list-cli.ts +81 -0
- package/scripts/rules/piped-verification.ts +126 -0
- package/scripts/rules/poll-loop.ts +125 -0
- package/scripts/rules/pre-gate-cut.ts +207 -0
- package/scripts/rules/prior-comment-read.ts +106 -0
- package/scripts/rules/raw-field-body.ts +56 -0
- package/scripts/rules/reply-language.ts +116 -0
- package/scripts/rules/rule-body-guard.ts +206 -0
- package/scripts/rules/rule-guard.ts +23 -0
- package/scripts/rules/rule-value-cli.ts +129 -0
- package/scripts/rules/rule-value.ts +397 -0
- package/scripts/rules/run-tail.ts +178 -0
- package/scripts/rules/shell-body-trigger.ts +204 -0
- package/scripts/rules/shell-segments.ts +45 -0
- package/scripts/rules/stop-rules.ts +329 -0
- package/scripts/rules/tail-commands.ts +35 -0
- package/scripts/rules/test-declared-commit.ts +51 -0
- package/scripts/rules/third-party-write.ts +90 -0
- package/scripts/rules/top-level-scripts-guard.ts +47 -0
- package/scripts/rules/worktree-guard.ts +130 -0
- package/scripts/run/detached-launch.ts +360 -0
- package/scripts/run/run-carry-args.ts +264 -0
- package/scripts/run/run-carry-change.ts +69 -0
- package/scripts/run/run-carry-cli.ts +441 -0
- package/scripts/run/run-carry-flush.ts +63 -0
- package/scripts/run/run-carry-stash.ts +71 -0
- package/scripts/run/run-carry-streak.ts +113 -0
- package/scripts/run/run-carry.ts +550 -0
- package/scripts/run/run-cut-args.ts +132 -0
- package/scripts/run/run-cut-cli.ts +461 -0
- package/scripts/run/run-cut-handoff.ts +126 -0
- package/scripts/run/run-cut.ts +531 -0
- package/scripts/run/run-ending-cli.ts +111 -0
- package/scripts/run/run-ending.ts +239 -0
- package/scripts/run/run-entry-cli.ts +135 -0
- package/scripts/run/run-entry.ts +95 -0
- package/scripts/run/run-event-cli.ts +210 -0
- package/scripts/run/run-event-follow.ts +65 -0
- package/scripts/run/run-event-render.ts +75 -0
- package/scripts/run/run-event-scope.ts +127 -0
- package/scripts/run/run-event-stream-emit.ts +140 -0
- package/scripts/run/run-event-stream.ts +258 -0
- package/scripts/run/run-event-watch.ts +37 -0
- package/scripts/run/run-headless.ts +105 -0
- package/scripts/run/run-hold-cli.ts +310 -0
- package/scripts/run/run-hold.ts +264 -0
- package/scripts/run/run-invocation.ts +237 -0
- package/scripts/run/run-issue-number.ts +19 -0
- package/scripts/run/run-liveness-cli.ts +169 -0
- package/scripts/run/run-liveness.ts +424 -0
- package/scripts/run/run-merge-cli.ts +385 -0
- package/scripts/run/run-merge-steps.ts +326 -0
- package/scripts/run/run-merge.ts +158 -0
- package/scripts/run/run-next-cli.ts +48 -0
- package/scripts/run/run-next.ts +80 -0
- package/scripts/run/run-preflight.ts +337 -0
- package/scripts/run/run-prep-cli.ts +151 -0
- package/scripts/run/run-prep.ts +84 -0
- package/scripts/run/run-progress-args.ts +65 -0
- package/scripts/run/run-progress-cli.ts +508 -0
- package/scripts/run/run-progress-clock.ts +320 -0
- package/scripts/run/run-progress-config.ts +119 -0
- package/scripts/run/run-progress-read.ts +199 -0
- package/scripts/run/run-progress.ts +366 -0
- package/scripts/run/run-report-cli.ts +71 -0
- package/scripts/run/run-report.ts +78 -0
- package/scripts/run/run-review-cli.ts +130 -0
- package/scripts/run/run-review-steps.ts +161 -0
- package/scripts/run/run-review.ts +121 -0
- package/scripts/run/run-ship-cli.ts +431 -0
- package/scripts/run/run-ship-detach.ts +200 -0
- package/scripts/run/run-ship-probe.ts +103 -0
- package/scripts/run/run-ship-return.ts +75 -0
- package/scripts/run/run-ship-review-steps.ts +227 -0
- package/scripts/run/run-ship-review.ts +177 -0
- package/scripts/run/run-ship-stage.ts +150 -0
- package/scripts/run/run-ship.ts +78 -0
- package/scripts/run/run-status-cli.ts +175 -0
- package/scripts/run/run-status.ts +77 -0
- package/scripts/run/run-step-cli.ts +111 -0
- package/scripts/run/run-step.ts +292 -0
- package/scripts/run/run-stop-notify.ts +52 -0
- package/scripts/run/run-stranded-cli.ts +31 -0
- package/scripts/run/run-stranded-detect.ts +134 -0
- package/scripts/run/run-stranded.ts +120 -0
- package/scripts/run/run-tail-cli.ts +105 -0
- package/scripts/run/run-tail.ts +61 -0
- package/scripts/run/run-transcript.golden.txt +57 -0
- package/scripts/run/run-wake-cli.ts +428 -0
- package/scripts/run/run-wake-describe.ts +97 -0
- package/scripts/run/run-wake-driver.ts +80 -0
- package/scripts/run/run-wake-handoff.ts +29 -0
- package/scripts/run/run-wake-loop.ts +223 -0
- package/scripts/run/run-wake-session.ts +150 -0
- package/scripts/run/run-wake-work.ts +104 -0
- package/scripts/run/run-wake.ts +607 -0
- package/scripts/run/run-watcher-guard-cli.ts +37 -0
- package/scripts/run/run-watcher-guard.ts +59 -0
- package/scripts/run/run-watcher-hook.ts +86 -0
- package/scripts/security/secretlint-scan.ts +86 -0
- package/scripts/security/security-audit-logic.ts +51 -0
- package/scripts/security/security-audit-provision-logic.ts +217 -0
- package/scripts/security/security-audit-provision.ts +186 -0
- package/scripts/security/security-audit.ts +132 -0
- package/scripts/security/security-updates-logic.ts +131 -0
- package/scripts/security/security-updates.ts +38 -0
- package/scripts/security/sonar-file.ts +44 -0
- package/scripts/self-sync-guard/index.ts +5 -0
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +98 -0
- package/scripts/self-sync-guard/self-sync-refusal.ts +22 -0
- package/scripts/sonar/sonar-hotspots-cli.ts +149 -0
- package/scripts/sonar/sonar-hotspots.ts +111 -0
- package/scripts/split/split-assess-cli.ts +52 -0
- package/scripts/split/split-assess.ts +124 -0
- package/scripts/sync/dependabot-pin-logic.ts +135 -0
- package/scripts/sync/directory-copy-guard.ts +187 -0
- package/scripts/sync/file-content.ts +49 -0
- package/scripts/sync/managed-config-scope-cli.ts +64 -0
- package/scripts/sync/managed-config-scope.ts +123 -0
- package/scripts/sync/plugin-skill-directories.ts +15 -0
- package/scripts/sync/reconcile-templates.ts +53 -0
- package/scripts/sync/removed-skill-manifest.ts +27 -0
- package/scripts/sync/skill-migration.ts +192 -0
- package/scripts/sync/sync-configs.ts +156 -0
- package/scripts/sync/sync-hook-safety.ts +82 -0
- package/scripts/sync/sync.ts +417 -0
- package/scripts/sync/synced-paths.ts +52 -0
- package/scripts/sync/template-source-logic.ts +122 -0
- package/scripts/sync/workflow-pin-logic.ts +240 -0
- package/scripts/test/classify-isolation.ts +149 -0
- package/scripts/test/e2e-retry-check.ts +150 -0
- package/scripts/test/http-fault-injection.ts +79 -0
- package/scripts/test/josh-harness-environment.ts +260 -0
- package/scripts/test/josh-harness.ts +96 -0
- package/scripts/test/pilot-files.ts +457 -0
- package/scripts/test/pilot-measure.ts +78 -0
- package/scripts/test/test-declared-changed.ts +99 -0
- package/scripts/test/test-declared-logic.ts +91 -0
- package/scripts/test/test-declared-match.ts +106 -0
- package/scripts/test/test-declared.ts +180 -0
- package/scripts/test/test-e2e-guard.ts +86 -0
- package/scripts/test/test-network-guard.ts +453 -0
- package/scripts/test/test-red-commit.ts +51 -0
- package/scripts/test/test-red-logic.ts +76 -0
- package/scripts/test/test-red.ts +154 -0
- package/scripts/test/test-related-scope.ts +115 -0
- package/scripts/test/test-related.ts +73 -0
- package/scripts/test/test-repository-guard.ts +317 -0
- package/scripts/test/test-state-guard.ts +85 -0
- package/scripts/test/test-stdout-guard.ts +54 -0
- package/scripts/test/test-telegram-guard.ts +90 -0
- package/scripts/test/test-type-logic.ts +31 -0
- package/scripts/test/test-unit-guard.ts +185 -0
- package/scripts/test/unit-guard-environment.ts +12 -0
- package/scripts/test/unit-projects.ts +139 -0
- package/scripts/test/unit-worker-share.ts +251 -0
- package/scripts/test/vitest-include-globs.ts +12 -0
- package/scripts/time-runtime/time-agent-bundles.ts +128 -0
- package/scripts/time-runtime/time-background.ts +300 -0
- package/scripts/time-runtime/time-batch-guard-fixtures.ts +66 -0
- package/scripts/time-runtime/time-batch-guard.ts +529 -0
- package/scripts/time-runtime/time-bundle-call.ts +575 -0
- package/scripts/time-runtime/time-bundles.ts +536 -0
- package/scripts/time-runtime/time-call-identity.ts +37 -0
- package/scripts/time-runtime/time-command-key.ts +35 -0
- package/scripts/time-runtime/time-density-hook.ts +166 -0
- package/scripts/time-runtime/time-density.ts +147 -0
- package/scripts/time-runtime/time-followup-stage.ts +107 -0
- package/scripts/time-runtime/time-format.ts +186 -0
- package/scripts/time-runtime/time-hook-transcript.ts +82 -0
- package/scripts/time-runtime/time-instant.ts +20 -0
- package/scripts/time-runtime/time-markers.ts +228 -0
- package/scripts/time-runtime/time-phase-names.ts +123 -0
- package/scripts/time-runtime/time-reported-failure.ts +227 -0
- package/scripts/time-runtime/time-round-trips.ts +279 -0
- package/scripts/time-runtime/time-shell.ts +286 -0
- package/scripts/time-runtime/time-single-check.ts +65 -0
- package/scripts/time-runtime/time-spans.ts +545 -0
- package/scripts/time-runtime/time-transcript-line.ts +253 -0
- package/scripts/time-runtime/time-writes.ts +71 -0
- package/scripts/ui/ui-routes-cli.ts +122 -0
- package/scripts/ui/ui-routes.ts +102 -0
- package/scripts/version/bump-version.ts +71 -0
- package/scripts/version/effective-upstream.ts +93 -0
- package/scripts/version/index.ts +25 -0
- package/scripts/version/kit-descriptor.ts +10 -0
- package/scripts/version/kit-version-config.ts +30 -0
- package/scripts/version/latest-corepack.ts +404 -0
- package/scripts/version/latest-lane-guard.ts +49 -0
- package/scripts/version/latest-regression.ts +93 -0
- package/scripts/version/latest-scope-cli.ts +147 -0
- package/scripts/version/latest-stamp.ts +107 -0
- package/scripts/version/latest-update.ts +198 -0
- package/scripts/version/package-manager-version.ts +95 -0
- package/scripts/version/parse-json.ts +13 -0
- package/scripts/version/preinstall-version-update.ts +84 -0
- package/scripts/version/publishable-range-check.ts +74 -0
- package/scripts/version/publishable-range.ts +123 -0
- package/scripts/version/release-age.ts +146 -0
- package/scripts/version/release-hold.ts +142 -0
- package/scripts/version/running-binary.ts +42 -0
- package/scripts/version/upgrade-command-guard.ts +49 -0
- package/scripts/version/upgrade-shell-command.ts +30 -0
- package/scripts/version/version-check-logic.ts +333 -0
- package/scripts/version/version-check.ts +14 -0
- package/scripts/version/version-command-config.ts +177 -0
- package/scripts/version/version-commands.ts +296 -0
- package/scripts/version/version-remote.ts +86 -0
- package/scripts/version/version-targets.ts +81 -0
- package/scripts/yaml/yaml-document.ts +46 -0
- package/scripts-ai/completion-gate.ts +13 -0
- package/scripts-ai/environment-loader.ts +9 -0
- package/scripts-ai/epic-check.ts +34 -0
- package/scripts-ai/epic-cli-argv.ts +77 -0
- package/scripts-ai/epic-cli-remove.ts +71 -0
- package/scripts-ai/epic-cli.ts +413 -0
- package/scripts-ai/epic.ts +192 -0
- package/scripts-ai/followup-issue-number.ts +31 -0
- package/scripts-ai/git-followup-finish.ts +217 -0
- package/scripts-ai/git-followup-workflow.ts +252 -0
- package/scripts-ai/git-workflow.ts +246 -0
- package/scripts-ai/telegram-test-logic.ts +88 -0
- package/scripts-ai/telegram-test.ts +130 -0
- package/templates/gitignore +76 -0
- package/templates/sonar-project.properties +52 -0
- package/templates/workflows/ci.yml +639 -0
- package/templates/workflows/dependabot-auto-merge.yml +428 -0
- package/tsconfig/base.json +50 -0
- package/tsconfig.sonar.json +34 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PackageVersionConfig } from './version-command-config'
|
|
2
|
+
|
|
3
|
+
function update_scope_flag(is_local: boolean): string {
|
|
4
|
+
return is_local ? '-D' : '-g'
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// The bare `pnpm add` invocation that installs one package at an exact version, in the global or the
|
|
8
|
+
// project (dev-dependency) scope.
|
|
9
|
+
function format_update_command(
|
|
10
|
+
latest: string,
|
|
11
|
+
is_local: boolean,
|
|
12
|
+
config: PackageVersionConfig,
|
|
13
|
+
): string {
|
|
14
|
+
return `pnpm add ${update_scope_flag(is_local)} ${config.package_name}@${latest}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// The full shell command for one upgrade target. A project-scope install is chained with kit's
|
|
18
|
+
// lockfile repair (`fix-gh-packages`), which a global install does not need.
|
|
19
|
+
function build_upgrade_shell_command(
|
|
20
|
+
latest: string,
|
|
21
|
+
is_local: boolean,
|
|
22
|
+
config: PackageVersionConfig,
|
|
23
|
+
): string {
|
|
24
|
+
const add_command = format_update_command(latest, is_local, config)
|
|
25
|
+
if (!is_local) return add_command
|
|
26
|
+
|
|
27
|
+
return `${add_command} && node_modules/.bin/tsx ${config.fix_gh_packages_path}`
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { build_upgrade_shell_command, format_update_command }
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { release_hold } from './release-hold'
|
|
2
|
+
import { is_no_op_upgrade_command, type InstalledVersions } from './upgrade-command-guard'
|
|
3
|
+
import { build_upgrade_shell_command, format_update_command } from './upgrade-shell-command'
|
|
4
|
+
import type { PackageVersionConfig } from './version-command-config'
|
|
5
|
+
|
|
6
|
+
const NOT_INSTALLED = 'not installed'
|
|
7
|
+
const GLOBAL_LABEL = 'Global: '
|
|
8
|
+
const PROJECT_LABEL = 'Project: '
|
|
9
|
+
const LATEST_LABEL = 'Latest: '
|
|
10
|
+
const RUNNING_LABEL = 'Running:'
|
|
11
|
+
const NOTE_LABEL = 'Note:'
|
|
12
|
+
const STATUS_PAD_WIDTH = 12
|
|
13
|
+
|
|
14
|
+
// The three versions a single check reports: the globally installed, the project-local, and the
|
|
15
|
+
// latest published. Global/project are undefined when that target is not installed. Grouped into
|
|
16
|
+
// one object so the formatters stay within the parameter limit alongside the package config.
|
|
17
|
+
interface VersionSnapshot {
|
|
18
|
+
global_version: string | undefined
|
|
19
|
+
project_version: string | undefined
|
|
20
|
+
latest: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// What the local minimum-release-age policy permits an unpinned resolve to reach. Carried only on an
|
|
24
|
+
// upstream report, because only the effective install is peer-resolved — every other target is
|
|
25
|
+
// upgraded by an explicitly pinned command the window does not block. Optional throughout: a package
|
|
26
|
+
// whose publish timestamps could not be read keeps exactly the report it had before
|
|
27
|
+
// (joshuafolkken/kit#808).
|
|
28
|
+
interface ReleaseHold {
|
|
29
|
+
installable: string
|
|
30
|
+
minimum_age_minutes: number
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// The install that is actually executing (`import.meta.url` resolved): version plus the package
|
|
34
|
+
// directory it was loaded from. This restores the running-binary-as-source-of-truth guarantee.
|
|
35
|
+
interface RunningBinary {
|
|
36
|
+
version: string
|
|
37
|
+
path: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Optional extras layered onto the dual-version report: the running-binary line and a PATH
|
|
41
|
+
// shadowing warning. Grouped into one object to keep the formatter within the parameter limit.
|
|
42
|
+
interface VersionOutputExtras {
|
|
43
|
+
running?: RunningBinary
|
|
44
|
+
warning?: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// An upstream's effective (running-relative) install, resolved by the consumer's opt-in hook — the
|
|
48
|
+
// upstream version actually executed when the downstream CLI runs (e.g. the kit bundled inside the
|
|
49
|
+
// running global app-kit, resolved via createRequire, NOT `pnpm ls -g`). `version` is undefined
|
|
50
|
+
// when genuinely unresolved ("not installed"); `upgrade_command` is the consumer's global command
|
|
51
|
+
// that bumps this effective install (e.g. `pnpm add -g @joshuafolkken/app-kit@<latest>` — routed
|
|
52
|
+
// through the downstream CLI, since that is what upgrades the bundled upstream).
|
|
53
|
+
interface UpstreamEffective {
|
|
54
|
+
version: string | undefined
|
|
55
|
+
upgrade_command: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// A stale effective upstream's global upgrade command plus whether running it would provably change
|
|
59
|
+
// nothing — the classification that decides between a `Run:` hint and a `Note:` explanation.
|
|
60
|
+
interface EffectiveUpgradeHint {
|
|
61
|
+
command: string
|
|
62
|
+
is_no_op: boolean
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// One upstream package's check result: the resolved upstream config plus the project version the
|
|
66
|
+
// project-scope report compares, and an optional effective/global install (present only when the
|
|
67
|
+
// consumer opts in). Absent `effective` falls back to the original project/latest-only output.
|
|
68
|
+
//
|
|
69
|
+
// `installed_versions` is populated only when the consumer declared its global upgrade command
|
|
70
|
+
// pin-only (`is_global_upgrade_command_pinned`). It lists the globally-resolved versions kit already
|
|
71
|
+
// knows, so a command whose every pin is already installed can be proven dead and replaced with an
|
|
72
|
+
// explanation instead of a `Run:` hint (#697). Absent, no command is ever suppressed.
|
|
73
|
+
interface UpstreamReport {
|
|
74
|
+
config: PackageVersionConfig
|
|
75
|
+
project_version: string | undefined
|
|
76
|
+
latest: string
|
|
77
|
+
effective?: UpstreamEffective
|
|
78
|
+
installed_versions?: InstalledVersions
|
|
79
|
+
hold?: ReleaseHold
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Render the running-binary line, or nothing when the running binary is unknown.
|
|
83
|
+
function format_running_line(running: RunningBinary | undefined): Array<string> {
|
|
84
|
+
if (running === undefined) return []
|
|
85
|
+
|
|
86
|
+
return [` ${RUNNING_LABEL} ${running.version.padEnd(STATUS_PAD_WIDTH)}(${running.path})`]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// A target needs upgrading only when it is installed (defined) and behind the latest.
|
|
90
|
+
function is_target_stale(version: string | undefined, latest: string): boolean {
|
|
91
|
+
return version !== undefined && version !== latest
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function format_target_status(version: string | undefined, latest: string): string {
|
|
95
|
+
if (version === undefined) return NOT_INSTALLED
|
|
96
|
+
if (version === latest) return `${version.padEnd(STATUS_PAD_WIDTH)}✓`
|
|
97
|
+
|
|
98
|
+
return `${version.padEnd(STATUS_PAD_WIDTH)}⚠ → ${latest}`
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function format_target_line(label: string, version: string | undefined, latest: string): string {
|
|
102
|
+
return ` ${label} ${format_target_status(version, latest)}`
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// One target line, followed by the hold explanation when that target is the one the release-age
|
|
106
|
+
// window is holding back. The note is derived from the target's own version, so a target flagged as
|
|
107
|
+
// held always produces one — the flag and the sentence cannot disagree.
|
|
108
|
+
function format_held_target_line(
|
|
109
|
+
label: string,
|
|
110
|
+
version: string | undefined,
|
|
111
|
+
latest: string,
|
|
112
|
+
hold: ReleaseHold | undefined,
|
|
113
|
+
): Array<string> {
|
|
114
|
+
const notes =
|
|
115
|
+
hold === undefined
|
|
116
|
+
? []
|
|
117
|
+
: release_hold.build_release_hold_notes(
|
|
118
|
+
version,
|
|
119
|
+
latest,
|
|
120
|
+
hold.installable,
|
|
121
|
+
hold.minimum_age_minutes,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return [format_target_line(label, version, latest), ...notes.map((note) => ` ${note}`)]
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Render the upstream's effective/global line, or nothing when the consumer did not opt in. When
|
|
128
|
+
// opted in, an unresolved effective install renders "not installed" (never silently omitted).
|
|
129
|
+
function format_upstream_global_line(report: UpstreamReport): Array<string> {
|
|
130
|
+
if (report.effective === undefined) return []
|
|
131
|
+
|
|
132
|
+
// The effective install is the only peer-resolved target, so it is the only one the window can
|
|
133
|
+
// hold back and the only one that carries the explanation.
|
|
134
|
+
return format_held_target_line(GLOBAL_LABEL, report.effective.version, report.latest, report.hold)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Whether the report carries an effective install that is installed and behind the upstream's latest
|
|
138
|
+
// — the single condition under which a global upgrade command applies at all.
|
|
139
|
+
function is_effective_stale(report: UpstreamReport): boolean {
|
|
140
|
+
const { effective, latest } = report
|
|
141
|
+
if (effective === undefined) return false
|
|
142
|
+
|
|
143
|
+
return is_target_stale(effective.version, latest)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// The consumer's global command for a stale effective upstream, classified by whether it can still
|
|
147
|
+
// change what kit measured. `is_no_op` is true only when the consumer declared the command pin-only
|
|
148
|
+
// and every version it pins is already installed. Undefined when no command applies.
|
|
149
|
+
function resolve_effective_upgrade_hint(report: UpstreamReport): EffectiveUpgradeHint | undefined {
|
|
150
|
+
const command = report.effective?.upgrade_command
|
|
151
|
+
if (command === undefined || !is_effective_stale(report)) return undefined
|
|
152
|
+
|
|
153
|
+
const installed = report.installed_versions
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
command,
|
|
157
|
+
is_no_op: installed !== undefined && is_no_op_upgrade_command(command, installed),
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// The consumer-supplied global upgrade command for a stale effective upstream, or nothing. Skipped
|
|
162
|
+
// when the consumer did not opt in, the effective install is up to date / unresolved, or the command
|
|
163
|
+
// provably cannot change the effective version it was meant to fix (see the note line instead).
|
|
164
|
+
function build_effective_upgrade_commands(report: UpstreamReport): Array<string> {
|
|
165
|
+
const hint = resolve_effective_upgrade_hint(report)
|
|
166
|
+
if (hint === undefined || hint.is_no_op) return []
|
|
167
|
+
|
|
168
|
+
return [hint.command]
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// The explanation that replaces a suppressed `Run:` hint, so a stale effective install is never left
|
|
172
|
+
// with a bare warning and no account of why kit offers no command for it.
|
|
173
|
+
function build_effective_upgrade_notes(report: UpstreamReport): Array<string> {
|
|
174
|
+
const hint = resolve_effective_upgrade_hint(report)
|
|
175
|
+
if (hint?.is_no_op !== true) return []
|
|
176
|
+
|
|
177
|
+
return [
|
|
178
|
+
`${NOTE_LABEL} \`${hint.command}\` is already satisfied; it cannot upgrade ${report.config.package_name} to ${report.latest}`,
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Every upstream's suppressed-hint explanation, in the configured order.
|
|
183
|
+
function build_upstream_upgrade_notes(reports: ReadonlyArray<UpstreamReport>): Array<string> {
|
|
184
|
+
return reports.flatMap((report) => build_effective_upgrade_notes(report))
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Render one upstream's report section: package name header, the optional effective/global line and
|
|
188
|
+
// its suppressed-hint explanation, then the project/latest lines, reusing the staleness markers of
|
|
189
|
+
// the main report. Prefixed with a blank line to separate sections. Global precedes project to
|
|
190
|
+
// mirror the main report's ordering.
|
|
191
|
+
function format_upstream_lines(report: UpstreamReport): Array<string> {
|
|
192
|
+
return [
|
|
193
|
+
'',
|
|
194
|
+
report.config.package_name,
|
|
195
|
+
...format_upstream_global_line(report),
|
|
196
|
+
...build_effective_upgrade_notes(report).map((note) => ` ${note}`),
|
|
197
|
+
format_target_line(PROJECT_LABEL, report.project_version, report.latest),
|
|
198
|
+
` ${LATEST_LABEL} ${report.latest}`,
|
|
199
|
+
]
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Drop repeated commands while preserving first-seen order. A consumer with several upstreams can
|
|
203
|
+
// return the same chain-pinning global command from each of them (game-kit returns one command for
|
|
204
|
+
// both app-kit and kit), which would otherwise print an identical `Run:` line once per upstream.
|
|
205
|
+
function unique_upgrade_commands(commands: ReadonlyArray<string>): Array<string> {
|
|
206
|
+
return [...new Set(commands)]
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// The outcome line for an effective install the upgrade command left exactly where it was.
|
|
210
|
+
function format_unchanged_outcome(report: UpstreamReport, version: string): string {
|
|
211
|
+
const name = report.config.package_name
|
|
212
|
+
|
|
213
|
+
return `${name}: still ${version} — the global upgrade command did not change it (latest ${report.latest})`
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// The outcome line for an effective install the upgrade moved forward without reaching the latest.
|
|
217
|
+
function format_advanced_outcome(report: UpstreamReport, before: string, after: string): string {
|
|
218
|
+
const name = report.config.package_name
|
|
219
|
+
|
|
220
|
+
return `${name}: ${before} → ${after} — still behind latest ${report.latest}`
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Describe what an upgrade run actually did to an upstream's effective install, comparing the
|
|
224
|
+
// re-read version against the one measured before the commands ran. A version that advanced but
|
|
225
|
+
// still trails `latest` is a hold (e.g. a minimum-release-age policy withholding the newest
|
|
226
|
+
// publish), not a failure — reporting the advance keeps `version:upgrade` honest instead of leaving
|
|
227
|
+
// the next `version` to repeat the same warning with no explanation.
|
|
228
|
+
function format_effective_outcome(report: UpstreamReport, after: string | undefined): string {
|
|
229
|
+
const previous = report.effective?.version
|
|
230
|
+
const before = previous ?? NOT_INSTALLED
|
|
231
|
+
if (after === previous) return format_unchanged_outcome(report, before)
|
|
232
|
+
|
|
233
|
+
return format_advanced_outcome(report, before, after ?? NOT_INSTALLED)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// The project-scope upgrade command when the upstream's project dependency is installed and stale.
|
|
237
|
+
// Always local (with lockfile repair), since the project path is the only scope kit resolves.
|
|
238
|
+
function build_project_upgrade_commands(report: UpstreamReport): Array<string> {
|
|
239
|
+
if (!is_target_stale(report.project_version, report.latest)) return []
|
|
240
|
+
|
|
241
|
+
return [build_upgrade_shell_command(report.latest, true, report.config)]
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Build the upgrade commands for every upstream: the consumer's global command for a stale effective
|
|
245
|
+
// install first, then the project-scope command, mirroring the main report's global-before-project
|
|
246
|
+
// order. Upstreams without either stale target contribute nothing.
|
|
247
|
+
function build_upstream_upgrade_commands(reports: ReadonlyArray<UpstreamReport>): Array<string> {
|
|
248
|
+
return reports.flatMap((report) => [
|
|
249
|
+
...build_effective_upgrade_commands(report),
|
|
250
|
+
...build_project_upgrade_commands(report),
|
|
251
|
+
])
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Build the shell upgrade commands for whichever of the two targets are installed and stale.
|
|
255
|
+
// Order: global first, then project (mirrors the display order).
|
|
256
|
+
function build_dual_upgrade_commands(
|
|
257
|
+
snapshot: VersionSnapshot,
|
|
258
|
+
config: PackageVersionConfig,
|
|
259
|
+
): Array<string> {
|
|
260
|
+
const { global_version, project_version, latest } = snapshot
|
|
261
|
+
const commands: Array<string> = []
|
|
262
|
+
|
|
263
|
+
if (is_target_stale(global_version, latest)) {
|
|
264
|
+
commands.push(build_upgrade_shell_command(latest, false, config))
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (is_target_stale(project_version, latest)) {
|
|
268
|
+
commands.push(build_upgrade_shell_command(latest, true, config))
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return commands
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function format_target_lines(snapshot: VersionSnapshot): Array<string> {
|
|
275
|
+
const { global_version, project_version, latest } = snapshot
|
|
276
|
+
|
|
277
|
+
return [
|
|
278
|
+
format_target_line(GLOBAL_LABEL, global_version, latest),
|
|
279
|
+
format_target_line(PROJECT_LABEL, project_version, latest),
|
|
280
|
+
` ${LATEST_LABEL} ${latest}`,
|
|
281
|
+
]
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// The full report: the main package's section, one section per upstream (nearest-first, in the
|
|
285
|
+
// configured order), then the merged upgrade hints and the optional PATH warning.
|
|
286
|
+
function format_dual_version_output(
|
|
287
|
+
snapshot: VersionSnapshot,
|
|
288
|
+
config: PackageVersionConfig,
|
|
289
|
+
extras: VersionOutputExtras = {},
|
|
290
|
+
upstreams: ReadonlyArray<UpstreamReport> = [],
|
|
291
|
+
): string {
|
|
292
|
+
const lines = [
|
|
293
|
+
config.package_name,
|
|
294
|
+
...format_target_lines(snapshot),
|
|
295
|
+
...format_running_line(extras.running),
|
|
296
|
+
...upstreams.flatMap((report) => format_upstream_lines(report)),
|
|
297
|
+
]
|
|
298
|
+
const hints = unique_upgrade_commands([
|
|
299
|
+
...build_dual_upgrade_commands(snapshot, config),
|
|
300
|
+
...build_upstream_upgrade_commands(upstreams),
|
|
301
|
+
]).map((command) => `Run: ${command}`)
|
|
302
|
+
if (hints.length > 0) lines.push('', ...hints)
|
|
303
|
+
if (extras.warning !== undefined) lines.push('', extras.warning)
|
|
304
|
+
|
|
305
|
+
return lines.join('\n')
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const version_check_logic = {
|
|
309
|
+
format_dual_version_output,
|
|
310
|
+
format_running_line,
|
|
311
|
+
format_upstream_lines,
|
|
312
|
+
format_upstream_global_line,
|
|
313
|
+
build_dual_upgrade_commands,
|
|
314
|
+
build_upstream_upgrade_commands,
|
|
315
|
+
build_upstream_upgrade_notes,
|
|
316
|
+
build_effective_upgrade_commands,
|
|
317
|
+
build_effective_upgrade_notes,
|
|
318
|
+
build_project_upgrade_commands,
|
|
319
|
+
format_update_command,
|
|
320
|
+
format_effective_outcome,
|
|
321
|
+
build_upgrade_shell_command,
|
|
322
|
+
unique_upgrade_commands,
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export type {
|
|
326
|
+
ReleaseHold,
|
|
327
|
+
VersionSnapshot,
|
|
328
|
+
RunningBinary,
|
|
329
|
+
VersionOutputExtras,
|
|
330
|
+
UpstreamReport,
|
|
331
|
+
UpstreamEffective,
|
|
332
|
+
}
|
|
333
|
+
export { version_check_logic }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { kit_version_config } from './kit-version-config'
|
|
3
|
+
import { version_commands } from './version-commands'
|
|
4
|
+
|
|
5
|
+
// `version` shows the installed versions; `version --upgrade` updates both the global and the project
|
|
6
|
+
// @joshuafolkken/kit install. The upgrade was a separate `version:upgrade` command until
|
|
7
|
+
// joshuafolkken/kit#1928 folded it into this flag, so the version surface is one command again.
|
|
8
|
+
const UPGRADE_FLAG = '--upgrade'
|
|
9
|
+
|
|
10
|
+
if (process.argv.includes(UPGRADE_FLAG)) {
|
|
11
|
+
process.exit(version_commands.run_upgrade(kit_version_config))
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
version_commands.run_check(kit_version_config)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { KIT_PACKAGE_NAME } from './kit-descriptor'
|
|
2
|
+
|
|
3
|
+
const NODE_MODULES = 'node_modules'
|
|
4
|
+
const FIX_GH_PACKAGES_SCRIPT = 'scripts/gh/fix-gh-packages.ts'
|
|
5
|
+
const SCOPED_PACKAGE_PATTERN = /^@(?<owner>[^/]+)\/(?<name>.+)$/u
|
|
6
|
+
|
|
7
|
+
// fix-gh-packages.ts is published only by kit, so every consumer (kit, app-kit, game-kit) repairs
|
|
8
|
+
// its lockfile with kit's single copy — kit is always present as a (transitive) dependency. Using
|
|
9
|
+
// a per-package path here would point at a script app-kit/game-kit never ship (ERR_MODULE_NOT_FOUND).
|
|
10
|
+
const FIX_GH_PACKAGES_PATH = `${NODE_MODULES}/${KIT_PACKAGE_NAME}/${FIX_GH_PACKAGES_SCRIPT}`
|
|
11
|
+
|
|
12
|
+
// A scoped npm package name split into its scope (the GitHub owner) and unscoped remainder.
|
|
13
|
+
interface ScopedPackageName {
|
|
14
|
+
owner: string
|
|
15
|
+
name: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// The inputs shared by every package the version command can report on and upgrade: the main
|
|
19
|
+
// package itself and each of its upstreams. All three fields are derivable from the package name.
|
|
20
|
+
interface PackageVersionConfig {
|
|
21
|
+
package_name: string
|
|
22
|
+
versions_endpoint: string
|
|
23
|
+
fix_gh_packages_path: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// The context kit passes to a consumer's effective-install hooks, carrying both already-fetched
|
|
27
|
+
// latests so a hook never resolves either a second time. `latest` is the downstream (primary)
|
|
28
|
+
// package's latest — the value kit resolved once for the main report — so a hook that builds a global
|
|
29
|
+
// upgrade command (e.g. `pnpm add -g @joshuafolkken/app-kit@<latest>`) reuses that single fetch.
|
|
30
|
+
// `upstream_latest` is *this* upstream's own latest: the version kit measures the effective install
|
|
31
|
+
// against, so a hook can name the version it was just reported stale for.
|
|
32
|
+
interface UpstreamHookContext {
|
|
33
|
+
latest: string
|
|
34
|
+
upstream_latest: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// The opt-in hooks and options a consumer supplies to report and upgrade an upstream's effective
|
|
38
|
+
// (running-relative) install. `resolve_effective_version` returns the upstream version actually
|
|
39
|
+
// executed (e.g. the kit bundled in the running global app-kit, via createRequire);
|
|
40
|
+
// `resolve_global_upgrade_command` returns the global command that bumps it (e.g.
|
|
41
|
+
// `pnpm add -g @joshuafolkken/app-kit@<latest>`). Both receive the shared `UpstreamHookContext` so
|
|
42
|
+
// they can reuse kit's already-fetched latests. Both are optional and only take effect together —
|
|
43
|
+
// kit itself supplies neither (no upstream).
|
|
44
|
+
//
|
|
45
|
+
// `is_global_upgrade_command_pinned` declares that the command only pins versions and does not force
|
|
46
|
+
// a fresh dependency resolve. Kit can then prove the command is a no-op once every version it pins is
|
|
47
|
+
// already installed, and replaces the dead `Run:` hint with an explanation (#697). Leave it unset for
|
|
48
|
+
// a command that re-resolves (e.g. `pnpm remove -g <pkg> && pnpm add -g <pkg>@<latest>`): such a
|
|
49
|
+
// command changes the graph even when its pin is already installed, so it must never be suppressed.
|
|
50
|
+
interface UpstreamEffectiveHooks {
|
|
51
|
+
resolve_effective_version?: (context: UpstreamHookContext) => string | undefined
|
|
52
|
+
resolve_global_upgrade_command?: (context: UpstreamHookContext) => string
|
|
53
|
+
is_global_upgrade_command_pinned?: boolean
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// A consumer's declaration of one upstream package in its dependency chain (e.g. app-kit declares
|
|
57
|
+
// kit). Only the package name is required — the endpoint and repair path are derived from it; the
|
|
58
|
+
// effective-install hooks are optional so upstreams without a global blind spot are unaffected.
|
|
59
|
+
interface UpstreamDescriptor extends UpstreamEffectiveHooks {
|
|
60
|
+
package_name: string
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// A fully resolved upstream: the per-package config plus the consumer's opt-in effective-install
|
|
64
|
+
// hooks carried through from the descriptor.
|
|
65
|
+
interface UpstreamVersionConfig extends PackageVersionConfig, UpstreamEffectiveHooks {}
|
|
66
|
+
|
|
67
|
+
// The per-package inputs that turn the generic version-command library into a concrete `version`
|
|
68
|
+
// / `version:upgrade` pair. `upstreams` lists the consumer's upstream chain nearest-first (their
|
|
69
|
+
// order is preserved in the report); `self_directory` and `resolve_warning` are optional hooks the
|
|
70
|
+
// consumer's thin wrapper supplies to reproduce kit's running-binary line and PATH warning.
|
|
71
|
+
interface VersionCommandConfig extends PackageVersionConfig {
|
|
72
|
+
upstreams: ReadonlyArray<UpstreamVersionConfig>
|
|
73
|
+
self_directory?: string
|
|
74
|
+
resolve_warning?: () => string | undefined
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Options accepted by the builder: the package name plus the optional upstream chain and display
|
|
78
|
+
// hooks. `versions_endpoint` may be supplied to override the derived GitHub Packages endpoint.
|
|
79
|
+
interface VersionCommandConfigOptions {
|
|
80
|
+
package_name: string
|
|
81
|
+
versions_endpoint?: string
|
|
82
|
+
upstreams?: ReadonlyArray<UpstreamDescriptor>
|
|
83
|
+
self_directory?: string
|
|
84
|
+
resolve_warning?: () => string | undefined
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function parse_scoped_package_name(package_name: string): ScopedPackageName | undefined {
|
|
88
|
+
const groups = SCOPED_PACKAGE_PATTERN.exec(package_name)?.groups
|
|
89
|
+
const { owner, name } = groups ?? {}
|
|
90
|
+
if (owner === undefined || name === undefined) return undefined
|
|
91
|
+
|
|
92
|
+
return { owner, name }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Derive the GitHub Packages versions endpoint from a scoped package name: the scope is the
|
|
96
|
+
// GitHub owner and the unscoped remainder is the package path segment (uniform across
|
|
97
|
+
// kit/app-kit/game-kit), so consumers never hardcode another package's endpoint.
|
|
98
|
+
function derive_versions_endpoint(package_name: string): string {
|
|
99
|
+
const scoped = parse_scoped_package_name(package_name)
|
|
100
|
+
|
|
101
|
+
if (scoped === undefined) {
|
|
102
|
+
throw new Error(`Cannot derive a versions endpoint from unscoped package name: ${package_name}`)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return `/users/${scoped.owner}/packages/npm/${scoped.name}/versions?per_page=1`
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Copy the consumer's opt-in effective-install hooks and options, keeping only the defined ones so
|
|
109
|
+
// the resolved config stays compatible with `exactOptionalPropertyTypes`.
|
|
110
|
+
function pick_effective_hooks(descriptor: UpstreamDescriptor): UpstreamEffectiveHooks {
|
|
111
|
+
const hooks: UpstreamEffectiveHooks = {}
|
|
112
|
+
|
|
113
|
+
if (descriptor.resolve_effective_version !== undefined) {
|
|
114
|
+
hooks.resolve_effective_version = descriptor.resolve_effective_version
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (descriptor.resolve_global_upgrade_command !== undefined) {
|
|
118
|
+
hooks.resolve_global_upgrade_command = descriptor.resolve_global_upgrade_command
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (descriptor.is_global_upgrade_command_pinned !== undefined) {
|
|
122
|
+
hooks.is_global_upgrade_command_pinned = descriptor.is_global_upgrade_command_pinned
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return hooks
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Resolve an upstream descriptor into a full per-package config, carrying through the optional
|
|
129
|
+
// effective-install hooks. Every package in the chain repairs its lockfile with kit's single
|
|
130
|
+
// `fix-gh-packages.ts` (see FIX_GH_PACKAGES_PATH).
|
|
131
|
+
function resolve_upstream(descriptor: UpstreamDescriptor): UpstreamVersionConfig {
|
|
132
|
+
return {
|
|
133
|
+
package_name: descriptor.package_name,
|
|
134
|
+
versions_endpoint: derive_versions_endpoint(descriptor.package_name),
|
|
135
|
+
fix_gh_packages_path: FIX_GH_PACKAGES_PATH,
|
|
136
|
+
...pick_effective_hooks(descriptor),
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Resolve the config's versions endpoint: derive it from the package name when omitted, or reject an
|
|
141
|
+
// explicitly-supplied blank endpoint up front. This fails fast at build time so a mis-built config
|
|
142
|
+
// can never carry an empty endpoint down to `fetch_latest_version`, where it would surface as an
|
|
143
|
+
// opaque `gh api` failure (see the game-kit#395 diagnosis behind this guard).
|
|
144
|
+
function resolve_versions_endpoint(options: VersionCommandConfigOptions): string {
|
|
145
|
+
const { versions_endpoint, package_name } = options
|
|
146
|
+
if (versions_endpoint === undefined) return derive_versions_endpoint(package_name)
|
|
147
|
+
if (versions_endpoint.trim() !== '') return versions_endpoint
|
|
148
|
+
|
|
149
|
+
throw new Error(
|
|
150
|
+
`versions_endpoint for ${package_name} was set to an empty string; omit it to derive the endpoint or pass a non-empty value.`,
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Build a config from a consumer's inputs, assigning the optional hooks only when defined so the
|
|
155
|
+
// object stays compatible with `exactOptionalPropertyTypes`.
|
|
156
|
+
function create_version_command_config(options: VersionCommandConfigOptions): VersionCommandConfig {
|
|
157
|
+
const config: VersionCommandConfig = {
|
|
158
|
+
package_name: options.package_name,
|
|
159
|
+
versions_endpoint: resolve_versions_endpoint(options),
|
|
160
|
+
fix_gh_packages_path: FIX_GH_PACKAGES_PATH,
|
|
161
|
+
upstreams: (options.upstreams ?? []).map((descriptor) => resolve_upstream(descriptor)),
|
|
162
|
+
}
|
|
163
|
+
if (options.self_directory !== undefined) config.self_directory = options.self_directory
|
|
164
|
+
if (options.resolve_warning !== undefined) config.resolve_warning = options.resolve_warning
|
|
165
|
+
|
|
166
|
+
return config
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export type {
|
|
170
|
+
PackageVersionConfig,
|
|
171
|
+
UpstreamDescriptor,
|
|
172
|
+
UpstreamHookContext,
|
|
173
|
+
UpstreamVersionConfig,
|
|
174
|
+
VersionCommandConfig,
|
|
175
|
+
VersionCommandConfigOptions,
|
|
176
|
+
}
|
|
177
|
+
export { create_version_command_config, derive_versions_endpoint }
|