@joshuafolkken/kit 1.872.0 → 1.879.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/.github/workflows/publish.yml +39 -2
- package/README.md +3 -3
- package/package.json +6 -2
- package/scripts/init/distributed-paths.ts +14 -11
- package/scripts/init/hook-command-bootstrap.ts +51 -0
- package/scripts/init/hook-command-rewrite.ts +9 -1
- package/scripts/init/init-logic.ts +2 -8
- package/templates/workflows/ci.yml +6 -2
- package/dist/hooks/chunk-25JL6FMS.js +0 -4970
- package/dist/hooks/chunk-2ANGT3XM.js +0 -375
- package/dist/hooks/chunk-2EI5GBSW.js +0 -42
- package/dist/hooks/chunk-2OT5XE2N.js +0 -5014
- package/dist/hooks/chunk-33ELOKEV.js +0 -910
- package/dist/hooks/chunk-33YRTKM7.js +0 -230
- package/dist/hooks/chunk-36JQU5NN.js +0 -77
- package/dist/hooks/chunk-3EJBTWVS.js +0 -1769
- package/dist/hooks/chunk-3FK5SFAC.js +0 -432
- package/dist/hooks/chunk-3PWPYDD2.js +0 -240
- package/dist/hooks/chunk-3TQU7TDH.js +0 -375
- package/dist/hooks/chunk-3TVLSFZ6.js +0 -432
- package/dist/hooks/chunk-3VXYCB4E.js +0 -77
- package/dist/hooks/chunk-44M6JXGV.js +0 -3398
- package/dist/hooks/chunk-46EEEHC3.js +0 -240
- package/dist/hooks/chunk-4A7UVP2P.js +0 -364
- package/dist/hooks/chunk-4LFQEZS4.js +0 -137
- package/dist/hooks/chunk-4OCX3V2T.js +0 -469
- package/dist/hooks/chunk-4OHA5DE7.js +0 -49
- package/dist/hooks/chunk-4PMDW3YD.js +0 -68
- package/dist/hooks/chunk-4QHBNAI4.js +0 -68
- package/dist/hooks/chunk-4SSB3FEE.js +0 -3273
- package/dist/hooks/chunk-5A2WQ2CQ.js +0 -5390
- package/dist/hooks/chunk-5EVA2JQB.js +0 -5390
- package/dist/hooks/chunk-5P7VF5VE.js +0 -3230
- package/dist/hooks/chunk-5QWJGGZP.js +0 -49
- package/dist/hooks/chunk-5U5EZYG6.js +0 -77
- package/dist/hooks/chunk-5VUUF3ZV.js +0 -240
- package/dist/hooks/chunk-5WA7UBT3.js +0 -374
- package/dist/hooks/chunk-6EBGRQ3Q.js +0 -301
- package/dist/hooks/chunk-6TVHWMD3.js +0 -432
- package/dist/hooks/chunk-6VAGLEMB.js +0 -68
- package/dist/hooks/chunk-75BTXKFJ.js +0 -3424
- package/dist/hooks/chunk-75RHN67S.js +0 -137
- package/dist/hooks/chunk-76KC3BDD.js +0 -3414
- package/dist/hooks/chunk-76SLS7CZ.js +0 -898
- package/dist/hooks/chunk-7DHZ4DWT.js +0 -5015
- package/dist/hooks/chunk-7INSJDGE.js +0 -458
- package/dist/hooks/chunk-7VJ4FTDX.js +0 -268
- package/dist/hooks/chunk-7XCYNHQK.js +0 -77
- package/dist/hooks/chunk-A5YJ3H7E.js +0 -375
- package/dist/hooks/chunk-AAEXXUUL.js +0 -268
- package/dist/hooks/chunk-ABVEVV2M.js +0 -432
- package/dist/hooks/chunk-ACN3YXFL.js +0 -68
- package/dist/hooks/chunk-AD3XE3QZ.js +0 -397
- package/dist/hooks/chunk-AENFZPZH.js +0 -230
- package/dist/hooks/chunk-AFKRFQ6W.js +0 -68
- package/dist/hooks/chunk-AHD5IPWI.js +0 -375
- package/dist/hooks/chunk-AMK5JGV7.js +0 -77
- package/dist/hooks/chunk-ARN7NCQI.js +0 -425
- package/dist/hooks/chunk-AUFY653N.js +0 -3425
- package/dist/hooks/chunk-AXQBNFEF.js +0 -375
- package/dist/hooks/chunk-AYC7R6U4.js +0 -3316
- package/dist/hooks/chunk-AYEA2FJ7.js +0 -5015
- package/dist/hooks/chunk-B4HPNY2I.js +0 -375
- package/dist/hooks/chunk-B57S3VWT.js +0 -922
- package/dist/hooks/chunk-BINZ3PLI.js +0 -364
- package/dist/hooks/chunk-BODUSXKK.js +0 -410
- package/dist/hooks/chunk-BQBAT2YK.js +0 -375
- package/dist/hooks/chunk-BUJEBW75.js +0 -391
- package/dist/hooks/chunk-BVNWORKA.js +0 -72
- package/dist/hooks/chunk-BWI47LQS.js +0 -5205
- package/dist/hooks/chunk-C25HRMJX.js +0 -137
- package/dist/hooks/chunk-CBFZNC74.js +0 -375
- package/dist/hooks/chunk-CECYXS4Y.js +0 -3424
- package/dist/hooks/chunk-CELGUP5F.js +0 -49
- package/dist/hooks/chunk-CMHANU3F.js +0 -3442
- package/dist/hooks/chunk-CMN372LI.js +0 -68
- package/dist/hooks/chunk-CPGZLMMK.js +0 -3299
- package/dist/hooks/chunk-CTQKXDC7.js +0 -268
- package/dist/hooks/chunk-CYAT4RIT.js +0 -68
- package/dist/hooks/chunk-CYTWYCH2.js +0 -5014
- package/dist/hooks/chunk-CZSOLRBA.js +0 -77
- package/dist/hooks/chunk-D2PIDYJR.js +0 -3438
- package/dist/hooks/chunk-DE57HI6T.js +0 -137
- package/dist/hooks/chunk-DGXDGAPG.js +0 -5306
- package/dist/hooks/chunk-DNYRSYQG.js +0 -5014
- package/dist/hooks/chunk-DTAXH2A2.js +0 -240
- package/dist/hooks/chunk-E2IZUWI5.js +0 -375
- package/dist/hooks/chunk-E4L2K2BL.js +0 -397
- package/dist/hooks/chunk-ECXVCCVD.js +0 -3079
- package/dist/hooks/chunk-EPHO443D.js +0 -68
- package/dist/hooks/chunk-EUFK2BI2.js +0 -375
- package/dist/hooks/chunk-EYCD5ZAV.js +0 -137
- package/dist/hooks/chunk-F2SDYJU4.js +0 -240
- package/dist/hooks/chunk-F4B5D5TF.js +0 -68
- package/dist/hooks/chunk-FGEO3NDX.js +0 -432
- package/dist/hooks/chunk-FJYI52RE.js +0 -137
- package/dist/hooks/chunk-FYTZHIY4.js +0 -3085
- package/dist/hooks/chunk-G7JL2A5K.js +0 -375
- package/dist/hooks/chunk-GA3ITDBW.js +0 -42
- package/dist/hooks/chunk-GDR4H4SV.js +0 -469
- package/dist/hooks/chunk-GFKDXPSM.js +0 -2855
- package/dist/hooks/chunk-GIMRTKFU.js +0 -566
- package/dist/hooks/chunk-GOPHRLGO.js +0 -240
- package/dist/hooks/chunk-GX4HO7SJ.js +0 -230
- package/dist/hooks/chunk-GZ6FUVIK.js +0 -566
- package/dist/hooks/chunk-H5HPY5M5.js +0 -2869
- package/dist/hooks/chunk-HCF3OGEE.js +0 -1829
- package/dist/hooks/chunk-HDEXAOUM.js +0 -469
- package/dist/hooks/chunk-HM2TY3TN.js +0 -469
- package/dist/hooks/chunk-HOA7NXA2.js +0 -55
- package/dist/hooks/chunk-HOFEWH6H.js +0 -240
- package/dist/hooks/chunk-HUUI6S5J.js +0 -2669
- package/dist/hooks/chunk-I4D3NVUD.js +0 -469
- package/dist/hooks/chunk-I4Q6WAJE.js +0 -68
- package/dist/hooks/chunk-IB6N4CR2.js +0 -432
- package/dist/hooks/chunk-IFLDYJMD.js +0 -469
- package/dist/hooks/chunk-IGU466YD.js +0 -77
- package/dist/hooks/chunk-IJCQUHKY.js +0 -375
- package/dist/hooks/chunk-IKUMBDJB.js +0 -230
- package/dist/hooks/chunk-IM3BDIBJ.js +0 -5005
- package/dist/hooks/chunk-IMYMAODK.js +0 -3431
- package/dist/hooks/chunk-IN2ZVGXA.js +0 -5005
- package/dist/hooks/chunk-ITVJ2MKQ.js +0 -18
- package/dist/hooks/chunk-J5RIJYTM.js +0 -2669
- package/dist/hooks/chunk-JFLMH4K5.js +0 -3460
- package/dist/hooks/chunk-JR25IFML.js +0 -77
- package/dist/hooks/chunk-JT5AUXFI.js +0 -432
- package/dist/hooks/chunk-JY5YVN6N.js +0 -3234
- package/dist/hooks/chunk-K5Q4ETVI.js +0 -391
- package/dist/hooks/chunk-K67V2F24.js +0 -137
- package/dist/hooks/chunk-KATZESEC.js +0 -3273
- package/dist/hooks/chunk-KFH4H7W7.js +0 -469
- package/dist/hooks/chunk-KMUEI6RX.js +0 -910
- package/dist/hooks/chunk-KMV4OY77.js +0 -3438
- package/dist/hooks/chunk-KQAZNWEY.js +0 -137
- package/dist/hooks/chunk-KZZR6JER.js +0 -5015
- package/dist/hooks/chunk-LAR6DREP.js +0 -77
- package/dist/hooks/chunk-LNCJWEZD.js +0 -5015
- package/dist/hooks/chunk-LRYD2GLM.js +0 -6
- package/dist/hooks/chunk-LXBKYHDV.js +0 -77
- package/dist/hooks/chunk-LYLKIUNE.js +0 -5024
- package/dist/hooks/chunk-LZKCFOVC.js +0 -432
- package/dist/hooks/chunk-M4FCIYRI.js +0 -77
- package/dist/hooks/chunk-M5M7327Q.js +0 -3425
- package/dist/hooks/chunk-MF72MHSX.js +0 -3455
- package/dist/hooks/chunk-MK56LKDO.js +0 -397
- package/dist/hooks/chunk-N3MJADY7.js +0 -240
- package/dist/hooks/chunk-NFQSUDBN.js +0 -458
- package/dist/hooks/chunk-NHREKY45.js +0 -137
- package/dist/hooks/chunk-NP5TTAAW.js +0 -375
- package/dist/hooks/chunk-NQTLTKTJ.js +0 -2993
- package/dist/hooks/chunk-NVRCZPBZ.js +0 -391
- package/dist/hooks/chunk-O46HMMLJ.js +0 -469
- package/dist/hooks/chunk-OFJGH2L4.js +0 -240
- package/dist/hooks/chunk-OLFMCZH5.js +0 -240
- package/dist/hooks/chunk-OMCZS46I.js +0 -49
- package/dist/hooks/chunk-OQZEZW5G.js +0 -469
- package/dist/hooks/chunk-P2MDAT2Y.js +0 -1897
- package/dist/hooks/chunk-P3M2JJIF.js +0 -68
- package/dist/hooks/chunk-PDVHQITQ.js +0 -3453
- package/dist/hooks/chunk-PNT2AMDH.js +0 -391
- package/dist/hooks/chunk-PR2LVSY6.js +0 -3445
- package/dist/hooks/chunk-PRR5R4JK.js +0 -137
- package/dist/hooks/chunk-PXT44QVN.js +0 -566
- package/dist/hooks/chunk-PZLWJLAP.js +0 -469
- package/dist/hooks/chunk-Q2FEAZJ2.js +0 -77
- package/dist/hooks/chunk-Q32WETDO.js +0 -3265
- package/dist/hooks/chunk-Q45DUBLE.js +0 -3600
- package/dist/hooks/chunk-Q7NZSWQ5.js +0 -240
- package/dist/hooks/chunk-QH2JNAMK.js +0 -3085
- package/dist/hooks/chunk-QPU5H2OS.js +0 -68
- package/dist/hooks/chunk-QRAHZ5TO.js +0 -1829
- package/dist/hooks/chunk-QUZ5HPIE.js +0 -469
- package/dist/hooks/chunk-QVCRG34O.js +0 -2893
- package/dist/hooks/chunk-R3MY4E3S.js +0 -1675
- package/dist/hooks/chunk-R6TXJJXP.js +0 -77
- package/dist/hooks/chunk-REJU6VT7.js +0 -1829
- package/dist/hooks/chunk-REQAQLRC.js +0 -2993
- package/dist/hooks/chunk-RFCXPAHH.js +0 -391
- package/dist/hooks/chunk-RHI6Y22X.js +0 -137
- package/dist/hooks/chunk-RKZVOBBS.js +0 -469
- package/dist/hooks/chunk-RL57TT2Y.js +0 -566
- package/dist/hooks/chunk-RORDOD4S.js +0 -3321
- package/dist/hooks/chunk-RZKYW5P2.js +0 -77
- package/dist/hooks/chunk-SJPJ6VSI.js +0 -391
- package/dist/hooks/chunk-SKSIJQQQ.js +0 -432
- package/dist/hooks/chunk-SSQDZKXG.js +0 -268
- package/dist/hooks/chunk-SYHFKE4C.js +0 -77
- package/dist/hooks/chunk-TCGNI2ZY.js +0 -42
- package/dist/hooks/chunk-TG3WXJF5.js +0 -137
- package/dist/hooks/chunk-TH7IJAY5.js +0 -77
- package/dist/hooks/chunk-TLZ27PCY.js +0 -240
- package/dist/hooks/chunk-U652FXTN.js +0 -566
- package/dist/hooks/chunk-UEK47YUF.js +0 -268
- package/dist/hooks/chunk-UIO45H3O.js +0 -432
- package/dist/hooks/chunk-UNLZEEVH.js +0 -5005
- package/dist/hooks/chunk-UNRVF3SZ.js +0 -432
- package/dist/hooks/chunk-USLFAFOI.js +0 -3453
- package/dist/hooks/chunk-VAEELMLL.js +0 -442
- package/dist/hooks/chunk-VALSWLDQ.js +0 -3453
- package/dist/hooks/chunk-VC5JEPNY.js +0 -3398
- package/dist/hooks/chunk-VEZVK6C7.js +0 -230
- package/dist/hooks/chunk-VK5JKFAR.js +0 -49
- package/dist/hooks/chunk-VNF2KP7Z.js +0 -469
- package/dist/hooks/chunk-VWWCUMW6.js +0 -2669
- package/dist/hooks/chunk-W4JARUQV.js +0 -137
- package/dist/hooks/chunk-WEOBMNJG.js +0 -2993
- package/dist/hooks/chunk-WKJU3J5Y.js +0 -5390
- package/dist/hooks/chunk-WMN4TSVF.js +0 -3299
- package/dist/hooks/chunk-WNON54PT.js +0 -3469
- package/dist/hooks/chunk-WOVKBPPX.js +0 -137
- package/dist/hooks/chunk-WRVFORYJ.js +0 -432
- package/dist/hooks/chunk-WUBVYGQZ.js +0 -240
- package/dist/hooks/chunk-WWULTUOM.js +0 -68
- package/dist/hooks/chunk-WXHKKB45.js +0 -4962
- package/dist/hooks/chunk-XAI3YTHJ.js +0 -469
- package/dist/hooks/chunk-XFZH6JZJ.js +0 -77
- package/dist/hooks/chunk-XGPWX6IA.js +0 -137
- package/dist/hooks/chunk-XIXXIVGY.js +0 -566
- package/dist/hooks/chunk-XKDOYJGA.js +0 -922
- package/dist/hooks/chunk-YALTVBHM.js +0 -432
- package/dist/hooks/chunk-YEBEPBFK.js +0 -5014
- package/dist/hooks/chunk-YI2BQ3DK.js +0 -3441
- package/dist/hooks/chunk-YVNBCFGG.js +0 -1829
- package/dist/hooks/chunk-YXBN3RGG.js +0 -432
- package/dist/hooks/chunk-Z2OOJSW3.js +0 -3163
- package/dist/hooks/chunk-ZA3HVBOY.js +0 -2644
- package/dist/hooks/chunk-ZKID46U3.js +0 -137
- package/dist/hooks/chunk-ZPMU2JV6.js +0 -49
- package/dist/hooks/chunk-ZRKY4W7O.js +0 -432
- package/dist/hooks/chunk-ZTMRB7LJ.js +0 -268
- package/dist/hooks/chunk-ZVPPBQ3L.js +0 -3413
|
@@ -5,7 +5,7 @@ on:
|
|
|
5
5
|
types: [new-tag-created]
|
|
6
6
|
|
|
7
7
|
jobs:
|
|
8
|
-
publish:
|
|
8
|
+
publish-github:
|
|
9
9
|
runs-on: ubuntu-latest
|
|
10
10
|
timeout-minutes: 10
|
|
11
11
|
permissions:
|
|
@@ -13,6 +13,8 @@ jobs:
|
|
|
13
13
|
packages: write
|
|
14
14
|
steps:
|
|
15
15
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
16
|
+
with:
|
|
17
|
+
ref: ${{ github.event.client_payload.tag }}
|
|
16
18
|
|
|
17
19
|
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
18
20
|
with:
|
|
@@ -34,6 +36,41 @@ jobs:
|
|
|
34
36
|
|
|
35
37
|
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
36
38
|
|
|
37
|
-
- run: pnpm publish --no-git-checks --tag latest
|
|
39
|
+
- run: pnpm publish --no-git-checks --tag latest --registry https://npm.pkg.github.com
|
|
38
40
|
env:
|
|
39
41
|
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
42
|
+
|
|
43
|
+
publish-npm:
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
timeout-minutes: 10
|
|
46
|
+
permissions:
|
|
47
|
+
contents: read
|
|
48
|
+
id-token: write
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
51
|
+
with:
|
|
52
|
+
ref: ${{ github.event.client_payload.tag }}
|
|
53
|
+
|
|
54
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
55
|
+
with:
|
|
56
|
+
node-version: 24
|
|
57
|
+
registry-url: 'https://registry.npmjs.org'
|
|
58
|
+
|
|
59
|
+
- name: Resolve pnpm version
|
|
60
|
+
id: pnpm-version
|
|
61
|
+
run: |
|
|
62
|
+
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'")
|
|
63
|
+
test -n "$version"
|
|
64
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
65
|
+
|
|
66
|
+
- uses: pnpm/setup@fbda4c85fc2e1e08721cd8763afea8f48d60f024 # v3.0.0
|
|
67
|
+
with:
|
|
68
|
+
version: ${{ steps.pnpm-version.outputs.version }}
|
|
69
|
+
install: false
|
|
70
|
+
|
|
71
|
+
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
72
|
+
|
|
73
|
+
- run: pnpm pack --out "$RUNNER_TEMP/kit.tgz"
|
|
74
|
+
|
|
75
|
+
- name: Publish to npm
|
|
76
|
+
run: cd "$RUNNER_TEMP" && npm publish kit.tgz --access public --tag latest --registry https://registry.npmjs.org --userconfig /dev/null
|
package/README.md
CHANGED
|
@@ -8,12 +8,11 @@ Shared toolchain config and CLI for TypeScript projects — ESLint, Prettier, Ty
|
|
|
8
8
|
## Prerequisites
|
|
9
9
|
|
|
10
10
|
- [Node.js](https://nodejs.org/) with [pnpm](https://pnpm.io/)
|
|
11
|
-
- [gh CLI](https://cli.github.com/)
|
|
11
|
+
- [gh CLI](https://cli.github.com/) for `josh version` and existing GitHub Packages consumers. It is not required to install kit from public npm; see [authentication.md](./docs/authentication.md) for setup when needed.
|
|
12
12
|
|
|
13
13
|
## Quick start
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
gh auth login --scopes read:packages # see docs/authentication.md for the full setup
|
|
17
16
|
pnpm add -g @joshuafolkken/kit # install the josh CLI globally
|
|
18
17
|
josh help
|
|
19
18
|
```
|
|
@@ -25,9 +24,10 @@ Using the kit inside a project? See [docs/package.md](./docs/package.md).
|
|
|
25
24
|
| Guide | What it covers |
|
|
26
25
|
| ----------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
27
26
|
| [why.md](./docs/why.md) | Why kit exists — the AI-development problems it solves, for practitioners |
|
|
28
|
-
| [authentication.md](./docs/authentication.md) |
|
|
27
|
+
| [authentication.md](./docs/authentication.md) | GitHub Packages auth for existing projects |
|
|
29
28
|
| [cli.md](./docs/cli.md) | Install and use the global `josh` CLI |
|
|
30
29
|
| [package.md](./docs/package.md) | Use the kit as a project devDependency — configs, prompts, scripts, `josh init` |
|
|
30
|
+
| [publishing.md](./docs/publishing.md) | First public npm release and trusted publishing setup |
|
|
31
31
|
| [josh-commands.md](./docs/josh-commands.md) | Full `josh` CLI command reference |
|
|
32
32
|
| [overview.md](./docs/overview.md) | What the kit provides and how it works |
|
|
33
33
|
| [troubleshooting.md](./docs/troubleshooting.md) | `401`/`404` auth errors, `josh: command not found`, stale shim, version mismatch |
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.879.0",
|
|
3
3
|
"name": "@joshuafolkken/kit",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/joshuafolkken/kit.git"
|
|
9
|
+
},
|
|
6
10
|
"engines": {
|
|
7
11
|
"node": ">=22.19.0"
|
|
8
12
|
},
|
|
@@ -166,4 +170,4 @@
|
|
|
166
170
|
"build": "tsx scripts/build/build-bin.ts && tsx scripts/build/build-hooks.ts && tsx scripts/build/build-version.ts && tsx scripts/build/build-config-merge.ts && tsx scripts/build/build-managed-marker.ts && tsx scripts/build/build-self-sync-guard.ts && tsx scripts/build/build-claude-md.ts",
|
|
167
171
|
"josh": "tsx scripts/josh/josh.ts"
|
|
168
172
|
}
|
|
169
|
-
}
|
|
173
|
+
}
|
|
@@ -17,11 +17,11 @@ const ESLINT_PACKAGE_PREFIX = `${KIT_PACKAGE_PATH_PREFIX}eslint/`
|
|
|
17
17
|
const GITHUB_REPO_BLOB_BASE = 'https://github.com/joshuafolkken/kit/blob/main/'
|
|
18
18
|
const GITHUB_REPO_TREE_BASE = 'https://github.com/joshuafolkken/kit/tree/main/'
|
|
19
19
|
|
|
20
|
-
// The
|
|
21
|
-
//
|
|
22
|
-
// dist/CLAUDE.md (build-claude-md.ts) rather than byte-copied at sync time, so a package update alone
|
|
23
|
-
// keeps the rules current (joshuafolkken/kit#1878).
|
|
20
|
+
// The consumer imports kit's published, already path-transformed rules. A tracked bootstrap note
|
|
21
|
+
// remains readable before installation, while the rule body stays in the package (kit#1878).
|
|
24
22
|
const CLAUDE_MD_IMPORT_LINE = '@node_modules/@joshuafolkken/kit/dist/CLAUDE.md'
|
|
23
|
+
const CLAUDE_MD_BOOTSTRAP =
|
|
24
|
+
'> Fresh checkout: if kit is not installed, run `pnpm install` first, then reread this file before doing any other work.'
|
|
25
25
|
|
|
26
26
|
// A span containing `*` is excluded: it is a **glob**, not a reference to a file a consumer can
|
|
27
27
|
// open. A distributed document that writes a directory set as `prompts/**` means "anything beneath
|
|
@@ -79,15 +79,18 @@ function transform_distributed_paths(content: string): string {
|
|
|
79
79
|
return transform_documentation_paths(with_tests)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
// the line alone, a file already carrying it is returned untouched, and any other file keeps all its
|
|
85
|
-
// content with the import prepended. The substring check makes it idempotent.
|
|
82
|
+
// Keep the bootstrap note ahead of the import so an agent can read it in a fresh checkout. Preserve
|
|
83
|
+
// project additions and update older one-line files without duplicating either line.
|
|
86
84
|
function ensure_claude_md_import(existing: string | undefined): string {
|
|
87
|
-
if (existing === undefined) return `${CLAUDE_MD_IMPORT_LINE}\n`
|
|
88
|
-
if (existing.includes(CLAUDE_MD_IMPORT_LINE)) return existing
|
|
85
|
+
if (existing === undefined) return `${CLAUDE_MD_BOOTSTRAP}\n\n${CLAUDE_MD_IMPORT_LINE}\n`
|
|
89
86
|
|
|
90
|
-
|
|
87
|
+
if (existing.includes(CLAUDE_MD_IMPORT_LINE)) {
|
|
88
|
+
if (existing.includes(CLAUDE_MD_BOOTSTRAP)) return existing
|
|
89
|
+
|
|
90
|
+
return `${CLAUDE_MD_BOOTSTRAP}\n\n${existing}`
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return `${CLAUDE_MD_BOOTSTRAP}\n\n${CLAUDE_MD_IMPORT_LINE}\n\n${existing}`
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
const distributed_paths = {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process'
|
|
2
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
|
|
3
|
+
import { tmpdir } from 'node:os'
|
|
4
|
+
import path from 'node:path'
|
|
5
|
+
import { git_location_environment } from '#scripts/git/git-location-environment'
|
|
6
|
+
|
|
7
|
+
interface HookResult {
|
|
8
|
+
status: number | null
|
|
9
|
+
stdout: string
|
|
10
|
+
stderr: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function create_partial_install(temporary_root: string): void {
|
|
14
|
+
const package_root = path.join(temporary_root, 'node_modules/@joshuafolkken/kit')
|
|
15
|
+
const hook_path = path.join(package_root, 'dist/hooks/pretool-guard.js')
|
|
16
|
+
|
|
17
|
+
mkdirSync(path.dirname(hook_path), { recursive: true })
|
|
18
|
+
writeFileSync(path.join(package_root, 'package.json'), '{}')
|
|
19
|
+
writeFileSync(hook_path, "process.stdout.write('guard ran')")
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function run_in_temporary_checkout(command: string, is_partial_install = false): HookResult {
|
|
23
|
+
const temporary_root = mkdtempSync(path.join(tmpdir(), 'kit-hook-bootstrap-'))
|
|
24
|
+
const git_environment = {
|
|
25
|
+
...process.env,
|
|
26
|
+
...git_location_environment.location_free_environment(),
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
spawnSync('git', ['init', '-q'], {
|
|
31
|
+
cwd: temporary_root,
|
|
32
|
+
env: git_environment,
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
if (is_partial_install) create_partial_install(temporary_root)
|
|
36
|
+
|
|
37
|
+
const { status, stdout, stderr } = spawnSync('sh', ['-c', command], {
|
|
38
|
+
cwd: temporary_root,
|
|
39
|
+
encoding: 'utf8',
|
|
40
|
+
env: git_environment,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return { status, stdout, stderr }
|
|
44
|
+
} finally {
|
|
45
|
+
rmSync(temporary_root, { recursive: true, force: true })
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const hook_command_bootstrap = { run_in_temporary_checkout }
|
|
50
|
+
|
|
51
|
+
export { hook_command_bootstrap }
|
|
@@ -21,6 +21,9 @@ const BUNDLE_INVOCATION = `node ${claude_plugin_config.MARKETPLACE_PATH}/dist/jo
|
|
|
21
21
|
// The per-hook bundle directory a fresh clone builds, and where it lives inside the installed package.
|
|
22
22
|
const HOOK_BUNDLE_DIR = `${hook_launch.HOOK_DIST_DIR}/`
|
|
23
23
|
const CONSUMER_HOOK_BUNDLE_DIR = `${claude_plugin_config.MARKETPLACE_PATH}/${HOOK_BUNDLE_DIR}`
|
|
24
|
+
const CONSUMER_PACKAGE_MANIFEST = `${claude_plugin_config.MARKETPLACE_PATH}/package.json`
|
|
25
|
+
const MISSING_INSTALL_NOTICE = 'kit hooks inactive: run pnpm install, then reread CLAUDE.md'
|
|
26
|
+
const MISSING_INSTALL_GUARD = `if [ ! -f ${CONSUMER_PACKAGE_MANIFEST} ]; then echo '${MISSING_INSTALL_NOTICE}' >&2; exit 0; fi; `
|
|
24
27
|
const CODEX_ADAPTER_BUNDLE = `node ${CONSUMER_HOOK_BUNDLE_DIR}codex-hook-adapter.js`
|
|
25
28
|
const CODEX_HOOKS_DESTINATION = '.codex/hooks.json'
|
|
26
29
|
const CODEX_ROOT_PREFIX = String.raw`cd \"$(git rev-parse --show-toplevel)\" && `
|
|
@@ -43,11 +46,16 @@ function rebase_bundle_directory(value: string): string {
|
|
|
43
46
|
// independent whichever order they run. The fallback rewrite is idempotent too (`BUNDLE_INVOCATION`
|
|
44
47
|
// holds no `pnpm josh `), so the whole rewrite is safe to run more than once.
|
|
45
48
|
function rewrite_command_value(value: string): string {
|
|
46
|
-
|
|
49
|
+
const rewritten = rebase_bundle_directory(value)
|
|
47
50
|
.split(PNPM_JOSH_PREFIX)
|
|
48
51
|
.join(BUNDLE_INVOCATION)
|
|
49
52
|
.split(CODEX_ADAPTER_SOURCE)
|
|
50
53
|
.join(CODEX_ADAPTER_BUNDLE)
|
|
54
|
+
|
|
55
|
+
if (!rewritten.includes(claude_plugin_config.MARKETPLACE_PATH)) return rewritten
|
|
56
|
+
if (rewritten.includes(MISSING_INSTALL_GUARD)) return rewritten
|
|
57
|
+
|
|
58
|
+
return `${MISSING_INSTALL_GUARD}${rewritten}`
|
|
51
59
|
}
|
|
52
60
|
|
|
53
61
|
function rewrite_hook_commands(content: string, is_codex = false): string {
|
|
@@ -13,15 +13,9 @@ const DEV_ENGINES_VALUE = {
|
|
|
13
13
|
packageManager: { name: 'pnpm', version: '>=12.1.0', onFail: 'error' },
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// deliberately absent: by default pnpm >= 11.6 refuses to expand environment variables in
|
|
19
|
-
// credentials read from a project .npmrc (the file is committed, so expansion could leak the
|
|
20
|
-
// token to an attacker-controlled registry), so distributing the line would only add an
|
|
21
|
-
// `Ignored project-level auth setting` warning on every command. Not distributing it is not the
|
|
22
|
-
// same as removing it — see merge_npmrc.
|
|
16
|
+
// New projects resolve kit from public npm. Existing registry and auth lines remain untouched
|
|
17
|
+
// by merge_npmrc so consumers of other GitHub Packages can migrate separately.
|
|
23
18
|
const NPMRC_LINES: ReadonlyArray<string> = [
|
|
24
|
-
'@joshuafolkken:registry=https://npm.pkg.github.com',
|
|
25
19
|
'engine-strict=true',
|
|
26
20
|
'minimum-release-age=1440',
|
|
27
21
|
'confirmModulesPurge=false',
|
|
@@ -118,7 +118,9 @@ jobs:
|
|
|
118
118
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
119
119
|
with:
|
|
120
120
|
node-version: '24'
|
|
121
|
-
|
|
121
|
+
|
|
122
|
+
- name: Configure GitHub Packages authentication for existing projects
|
|
123
|
+
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
122
124
|
|
|
123
125
|
- name: Resolve pnpm version
|
|
124
126
|
id: pnpm-version
|
|
@@ -358,7 +360,9 @@ jobs:
|
|
|
358
360
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
359
361
|
with:
|
|
360
362
|
node-version: '24'
|
|
361
|
-
|
|
363
|
+
|
|
364
|
+
- name: Configure GitHub Packages authentication for existing projects
|
|
365
|
+
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
362
366
|
|
|
363
367
|
- name: Resolve pnpm version
|
|
364
368
|
id: pnpm-version
|