@danieljvdm/dev-kit 0.6.0 → 0.7.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/README.md +123 -56
- package/dev-kit.example.jsonc +7 -3
- package/package.json +19 -16
- package/schema/dev-kit.schema.json +38 -0
- package/skill-sources.jsonc +8 -12
- package/skill-sources.lock.json +3 -9
- package/skills/dev-kit/SKILL.md +52 -17
- package/skills/effect-ts/agents/openai.yaml +0 -1
- package/skills/effect-ts/references/audit-services.md +11 -11
- package/skills/effect-ts/references/guide-effect.md +56 -69
- package/skills/effect-ts/references/guide-error-handling.md +64 -73
- package/skills/effect-ts/references/guide-layers.md +187 -215
- package/skills/effect-ts/references/guide-observability.md +91 -116
- package/skills/effect-ts/references/guide-retries.md +32 -44
- package/skills/effect-ts/references/guide-schedule.md +26 -40
- package/skills/effect-ts/references/guide-schema.md +50 -57
- package/skills/effect-ts/references/guide-sql.md +47 -50
- package/skills/effect-ts/references/guide-testing.md +96 -98
- package/skills/effect-ts/references/guide-type-safety-and-boundaries.md +7 -7
- package/skills/effect-ts/references/version-and-source.md +0 -1
- package/src/bin/dev-kit.ts +61 -28
- package/src/catalog-manager.ts +86 -34
- package/src/catalog.ts +71 -33
- package/src/cli-ui.ts +20 -16
- package/src/effect-source.ts +49 -19
- package/src/effect-tsgo.ts +66 -35
- package/src/gitignore.ts +19 -6
- package/src/index.ts +6 -0
- package/src/manifest.ts +38 -3
- package/src/node-symbolic-link.ts +3 -0
- package/src/oxlint-plugin-effect.js +3 -0
- package/src/oxlint-plugin-style.d.ts +8 -0
- package/src/oxlint-plugin-style.js +8 -0
- package/src/oxlint.js +14 -0
- package/src/oxlint.ts +14 -0
- package/src/package-skill-source.ts +189 -52
- package/src/path-digest.ts +31 -11
- package/src/project-package.ts +44 -19
- package/src/project-process-lock.ts +19 -12
- package/src/project-state.ts +11 -0
- package/src/skill-manager.ts +134 -55
- package/src/skill-selector.ts +8 -2
- package/src/source-manifest.ts +2 -6
- package/src/sync.ts +371 -103
- package/src/vendor.ts +112 -42
- package/src/vite-plus-hooks.ts +174 -0
- package/src/vite-plus-quality.ts +49 -0
- package/templates/vite-plus/github-actions-check.yml +44 -0
- package/templates/vite-plus/vite.config.ts +22 -0
package/README.md
CHANGED
|
@@ -61,8 +61,8 @@ or use `--no-apply` to edit the manifest without syncing yet.
|
|
|
61
61
|
"include": ["dev-kit", "effect"],
|
|
62
62
|
"targets": {
|
|
63
63
|
"agents": { "enabled": true, "mode": "copy" },
|
|
64
|
-
"claude": { "enabled": true, "mode": "symlink" }
|
|
65
|
-
}
|
|
64
|
+
"claude": { "enabled": true, "mode": "symlink" },
|
|
65
|
+
},
|
|
66
66
|
}
|
|
67
67
|
```
|
|
68
68
|
|
|
@@ -79,8 +79,8 @@ converge owned outputs automatically when installed packages change:
|
|
|
79
79
|
```jsonc
|
|
80
80
|
{
|
|
81
81
|
"scripts": {
|
|
82
|
-
"postinstall": "dev-kit apply"
|
|
83
|
-
}
|
|
82
|
+
"postinstall": "dev-kit apply",
|
|
83
|
+
},
|
|
84
84
|
}
|
|
85
85
|
```
|
|
86
86
|
|
|
@@ -115,29 +115,29 @@ the root package itself.
|
|
|
115
115
|
|
|
116
116
|
## Commands
|
|
117
117
|
|
|
118
|
-
| Command
|
|
119
|
-
|
|
|
120
|
-
| `dev-kit`
|
|
121
|
-
| `dev-kit init`
|
|
122
|
-
| `dev-kit add <skill...>`
|
|
123
|
-
| `dev-kit remove <skill...>`
|
|
124
|
-
| `dev-kit list [--all]`
|
|
125
|
-
| `dev-kit search <words...>`
|
|
126
|
-
| `dev-kit info <skill>`
|
|
127
|
-
| `dev-kit status`
|
|
128
|
-
| `dev-kit sync`
|
|
129
|
-
| `dev-kit plan`
|
|
130
|
-
| `dev-kit apply`
|
|
131
|
-
| `dev-kit apply --locked`
|
|
132
|
-
| `dev-kit gitignore`
|
|
133
|
-
| `dev-kit effect sync`
|
|
134
|
-
| `dev-kit tsgo patch`
|
|
135
|
-
| `dev-kit catalog refresh`
|
|
136
|
-
| `dev-kit catalog add <repository>`
|
|
137
|
-
| `dev-kit catalog remove <source-or-skill>` | Revoke an approval (`--yes` outside a terminal).
|
|
138
|
-
| `dev-kit catalog list`
|
|
139
|
-
| `dev-kit catalog info <source>`
|
|
140
|
-
| `dev-kit catalog verify`
|
|
118
|
+
| Command | Purpose |
|
|
119
|
+
| ------------------------------------------ | --------------------------------------------------------- |
|
|
120
|
+
| `dev-kit` | Show selected skills and the four common next actions. |
|
|
121
|
+
| `dev-kit init` | Create a minimal `dev-kit.jsonc`. |
|
|
122
|
+
| `dev-kit add <skill...>` | Select and immediately install skills. |
|
|
123
|
+
| `dev-kit remove <skill...>` | Deselect and uninstall skills safely. |
|
|
124
|
+
| `dev-kit list [--all]` | List selected skills or browse the catalog. |
|
|
125
|
+
| `dev-kit search <words...>` | Search names and descriptions. |
|
|
126
|
+
| `dev-kit info <skill>` | Show description and Git or installed-package provenance. |
|
|
127
|
+
| `dev-kit status` | Check whether the project matches its selection. |
|
|
128
|
+
| `dev-kit sync` | Apply the current manifest. |
|
|
129
|
+
| `dev-kit plan` | Preview project changes without writing files. |
|
|
130
|
+
| `dev-kit apply` | Apply the manifest and update `dev-kit.lock.json`. |
|
|
131
|
+
| `dev-kit apply --locked` | Reproduce the committed lock or fail on drift. |
|
|
132
|
+
| `dev-kit gitignore` | Add `.repos/` and `.dev-kit/` to `.gitignore`. |
|
|
133
|
+
| `dev-kit effect sync` | Sync `.repos/effect` to the installed Effect version. |
|
|
134
|
+
| `dev-kit tsgo patch` | Validate and patch Effect TypeScript-Go directly. |
|
|
135
|
+
| `dev-kit catalog refresh` | Maintainer command to approve current upstream refs. |
|
|
136
|
+
| `dev-kit catalog add <repository>` | Inspect a repository and approve selected skills. |
|
|
137
|
+
| `dev-kit catalog remove <source-or-skill>` | Revoke an approval (`--yes` outside a terminal). |
|
|
138
|
+
| `dev-kit catalog list` | List approved upstream repositories. |
|
|
139
|
+
| `dev-kit catalog info <source>` | Show a source, commit, and approved skills. |
|
|
140
|
+
| `dev-kit catalog verify` | Verify the committed snapshot without advancing refs. |
|
|
141
141
|
|
|
142
142
|
Options vary by command and include `--dry-run`, `--manifest`, `--lockfile`,
|
|
143
143
|
and `--project-dir`. Run any command with `--help` for its complete usage.
|
|
@@ -146,11 +146,11 @@ and `--project-dir`. Run any command with `--help` for its complete usage.
|
|
|
146
146
|
|
|
147
147
|
Dev Kit uses three project-local files:
|
|
148
148
|
|
|
149
|
-
| Path
|
|
150
|
-
|
|
|
151
|
-
| `dev-kit.jsonc`
|
|
152
|
-
| `dev-kit.lock.json`
|
|
153
|
-
| `.dev-kit/state.json` | Local ownership receipts used during apply and cleanup. | No
|
|
149
|
+
| Path | Role | Commit it? |
|
|
150
|
+
| --------------------- | ------------------------------------------------------- | ---------- |
|
|
151
|
+
| `dev-kit.jsonc` | Desired skills, targets, and setup tasks. | Yes |
|
|
152
|
+
| `dev-kit.lock.json` | Resolved content digests and setup-tool versions. | Yes |
|
|
153
|
+
| `.dev-kit/state.json` | Local ownership receipts used during apply and cleanup. | No |
|
|
154
154
|
|
|
155
155
|
Skills are copied into `.agents/skills` by default. Other harness targets can
|
|
156
156
|
copy or symlink those project-local skills.
|
|
@@ -177,18 +177,18 @@ tool versions. A project-local process lock also prevents concurrent applies.
|
|
|
177
177
|
"workers-best-practices",
|
|
178
178
|
"wrangler",
|
|
179
179
|
"serve-sim",
|
|
180
|
-
"@tanstack/ai#ai-core"
|
|
180
|
+
"@tanstack/ai#ai-core",
|
|
181
181
|
],
|
|
182
182
|
"exclude": ["animation-vocabulary"],
|
|
183
183
|
"setup": {
|
|
184
184
|
"agentInstructions": { "enabled": true },
|
|
185
|
-
"claudeInstructions": { "enabled": true }
|
|
185
|
+
"claudeInstructions": { "enabled": true },
|
|
186
186
|
},
|
|
187
187
|
"targets": {
|
|
188
188
|
"agents": { "enabled": true, "mode": "copy" },
|
|
189
189
|
"claude": { "enabled": true, "mode": "symlink" },
|
|
190
|
-
"opencode": { "enabled": false, "mode": "symlink" }
|
|
191
|
-
}
|
|
190
|
+
"opencode": { "enabled": false, "mode": "symlink" },
|
|
191
|
+
},
|
|
192
192
|
}
|
|
193
193
|
```
|
|
194
194
|
|
|
@@ -218,8 +218,8 @@ bridge in the manifest:
|
|
|
218
218
|
"include": ["dev-kit"],
|
|
219
219
|
"setup": {
|
|
220
220
|
"agentInstructions": { "enabled": true },
|
|
221
|
-
"claudeInstructions": { "enabled": true }
|
|
222
|
-
}
|
|
221
|
+
"claudeInstructions": { "enabled": true },
|
|
222
|
+
},
|
|
223
223
|
}
|
|
224
224
|
```
|
|
225
225
|
|
|
@@ -236,6 +236,58 @@ the wrapper task is disabled. Both outputs are recorded independently in the
|
|
|
236
236
|
lockfile and local ownership state. Dev Kit refuses to replace unowned files
|
|
237
237
|
and removes only unchanged owned outputs.
|
|
238
238
|
|
|
239
|
+
## Vite+ Git hooks
|
|
240
|
+
|
|
241
|
+
Enable Vite+'s project-local Git hook dispatcher in the manifest:
|
|
242
|
+
|
|
243
|
+
```jsonc
|
|
244
|
+
{
|
|
245
|
+
"include": ["dev-kit"],
|
|
246
|
+
"setup": {
|
|
247
|
+
"vitePlus": { "hooks": { "enabled": true } },
|
|
248
|
+
},
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
`dev-kit apply` requires `vite-plus` as an installed direct dependency and runs
|
|
253
|
+
its project-local `vp config --no-agent` command when hook setup is missing. The
|
|
254
|
+
generated `.vite-hooks/_` dispatcher is ignored by Git, so every linked
|
|
255
|
+
worktree converges its own copy during install while the project-owned
|
|
256
|
+
`.vite-hooks/pre-commit` hook remains portable. Dev Kit preserves an unrelated
|
|
257
|
+
`core.hooksPath` instead of replacing another hook manager. Set
|
|
258
|
+
`VITE_GIT_HOOKS=0` (or `HUSKY=0`) to skip the task for that invocation.
|
|
259
|
+
|
|
260
|
+
## Vite+ quality setup
|
|
261
|
+
|
|
262
|
+
Supported Vite+/Effect repositories can explicitly opt into Dev Kit's canonical
|
|
263
|
+
quality configuration and GitHub Actions workflow:
|
|
264
|
+
|
|
265
|
+
```jsonc
|
|
266
|
+
{
|
|
267
|
+
"include": ["dev-kit", "effect"],
|
|
268
|
+
"setup": {
|
|
269
|
+
"effectTsgo": { "enabled": true },
|
|
270
|
+
"vitePlus": {
|
|
271
|
+
"hooks": { "enabled": true },
|
|
272
|
+
"quality": { "enabled": true },
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
The quality task requires direct `@danieljvdm/dev-kit`, `vite-plus`, `effect`,
|
|
279
|
+
`@effect/tsgo`, and native TypeScript dependencies, plus the enabled Effect
|
|
280
|
+
TypeScript-Go patch. It manages `vite.config.ts` and
|
|
281
|
+
`.github/workflows/check.yml` as digest-owned files. Existing custom files or
|
|
282
|
+
conflicting `check`/`typecheck` package scripts are rejected instead of merged
|
|
283
|
+
or overwritten. Exact canonical files can be adopted; disabling the task
|
|
284
|
+
removes only unchanged owned files.
|
|
285
|
+
|
|
286
|
+
The managed Vite config composes the shared Oxfmt and Oxlint presets, configures
|
|
287
|
+
`vp staged`, and defines `vp run check` and `vp run typecheck`. The check task
|
|
288
|
+
and CI run `vp fmt --check`, `vp lint`, `vp test`, then the Effect-patched
|
|
289
|
+
compiler through `vp run typecheck`.
|
|
290
|
+
|
|
239
291
|
## Effect source checkout
|
|
240
292
|
|
|
241
293
|
Enable a local checkout of the exact installed Effect release in the manifest:
|
|
@@ -244,8 +296,8 @@ Enable a local checkout of the exact installed Effect release in the manifest:
|
|
|
244
296
|
{
|
|
245
297
|
"include": ["effect"],
|
|
246
298
|
"setup": {
|
|
247
|
-
"effectSource": { "enabled": true }
|
|
248
|
-
}
|
|
299
|
+
"effectSource": { "enabled": true },
|
|
300
|
+
},
|
|
249
301
|
}
|
|
250
302
|
```
|
|
251
303
|
|
|
@@ -267,8 +319,8 @@ Enable Effect TypeScript-Go in the same manifest:
|
|
|
267
319
|
"include": ["effect"],
|
|
268
320
|
"setup": {
|
|
269
321
|
"effectSource": { "enabled": true },
|
|
270
|
-
"effectTsgo": { "enabled": true }
|
|
271
|
-
}
|
|
322
|
+
"effectTsgo": { "enabled": true },
|
|
323
|
+
},
|
|
272
324
|
}
|
|
273
325
|
```
|
|
274
326
|
|
|
@@ -279,8 +331,8 @@ Pin the compatible packages in the consuming project:
|
|
|
279
331
|
"devDependencies": {
|
|
280
332
|
"@danieljvdm/dev-kit": "^0.2.0",
|
|
281
333
|
"@effect/tsgo": "0.24.3",
|
|
282
|
-
"typescript": "7.0.2"
|
|
283
|
-
}
|
|
334
|
+
"typescript": "7.0.2",
|
|
335
|
+
},
|
|
284
336
|
}
|
|
285
337
|
```
|
|
286
338
|
|
|
@@ -288,8 +340,8 @@ Pin the compatible packages in the consuming project:
|
|
|
288
340
|
{
|
|
289
341
|
"$schema": "./node_modules/@effect/tsgo/schema.json",
|
|
290
342
|
"compilerOptions": {
|
|
291
|
-
"plugins": [{ "name": "@effect/language-service" }]
|
|
292
|
-
}
|
|
343
|
+
"plugins": [{ "name": "@effect/language-service" }],
|
|
344
|
+
},
|
|
293
345
|
}
|
|
294
346
|
```
|
|
295
347
|
|
|
@@ -298,8 +350,8 @@ native TypeScript compiler. It does not download dependencies and skips an
|
|
|
298
350
|
installation that is already patched. Use `dev-kit tsgo patch --dry-run` when
|
|
299
351
|
troubleshooting the task directly.
|
|
300
352
|
|
|
301
|
-
|
|
302
|
-
|
|
353
|
+
Dependency and `tsconfig.json` edits remain explicit. Enable the Vite+ quality
|
|
354
|
+
task only when Dev Kit can own the canonical root config and GitHub workflow.
|
|
303
355
|
|
|
304
356
|
## Installed package skills
|
|
305
357
|
|
|
@@ -371,9 +423,9 @@ This repository remains an opinionated catalog for Git-hosted skills.
|
|
|
371
423
|
"ref": "main",
|
|
372
424
|
"skillsPath": "skills",
|
|
373
425
|
"include": ["*"],
|
|
374
|
-
"licensePath": "LICENSE"
|
|
375
|
-
}
|
|
376
|
-
]
|
|
426
|
+
"licensePath": "LICENSE",
|
|
427
|
+
},
|
|
428
|
+
],
|
|
377
429
|
}
|
|
378
430
|
```
|
|
379
431
|
|
|
@@ -430,7 +482,18 @@ export default defineConfig({
|
|
|
430
482
|
|
|
431
483
|
Use `lint.extends` rather than a shallow object spread so Vite+ composes the
|
|
432
484
|
nested plugin and rule configuration correctly. Oxfmt has no `extends`, so
|
|
433
|
-
spread its configuration before project-local formatter options.
|
|
485
|
+
spread its configuration before project-local formatter options. The shared
|
|
486
|
+
lint preset enables `typeAware` for semantic lint rules but leaves `typeCheck`
|
|
487
|
+
disabled. The opt-in `setup.vitePlus.quality` task manages this composition for
|
|
488
|
+
repositories that use the canonical config; custom configs keep the task
|
|
489
|
+
disabled and compose the exports manually. Effect TypeScript-Go projects run:
|
|
490
|
+
|
|
491
|
+
```sh
|
|
492
|
+
vp fmt --check
|
|
493
|
+
vp lint
|
|
494
|
+
vp test
|
|
495
|
+
vp run typecheck
|
|
496
|
+
```
|
|
434
497
|
|
|
435
498
|
Standalone projects import the same objects from their native config files:
|
|
436
499
|
|
|
@@ -454,7 +517,12 @@ export default defineConfig({
|
|
|
454
517
|
});
|
|
455
518
|
```
|
|
456
519
|
|
|
457
|
-
The Oxlint preset
|
|
520
|
+
The Oxlint preset enables `stylistic/padding-line-between-statements`: adjacent
|
|
521
|
+
variable declarations remain grouped, while the next logical statement and
|
|
522
|
+
all `return` statements require a separating blank line. The rule is fixable,
|
|
523
|
+
so `vp lint --fix` repairs missing spacing automatically.
|
|
524
|
+
|
|
525
|
+
The preset also registers the shared `effect` JavaScript plugin. Effect
|
|
458
526
|
projects opt into its rules in path-specific overrides, for example
|
|
459
527
|
`effect/no-effect-run`, `effect/no-unsafe-promise`, and
|
|
460
528
|
`effect/no-untyped-throw`. The package exports the plugin directly from
|
|
@@ -465,7 +533,6 @@ consumer-scoped because application and host boundaries differ by repository.
|
|
|
465
533
|
## Development
|
|
466
534
|
|
|
467
535
|
```bash
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
vitest run --config vitest.config.ts
|
|
536
|
+
vp install
|
|
537
|
+
vp run check
|
|
471
538
|
```
|
package/dev-kit.example.jsonc
CHANGED
|
@@ -5,11 +5,15 @@
|
|
|
5
5
|
"agentInstructions": { "enabled": true },
|
|
6
6
|
"claudeInstructions": { "enabled": true },
|
|
7
7
|
"effectSource": { "enabled": true },
|
|
8
|
-
"effectTsgo": { "enabled": true }
|
|
8
|
+
"effectTsgo": { "enabled": true },
|
|
9
|
+
"vitePlus": {
|
|
10
|
+
"hooks": { "enabled": true },
|
|
11
|
+
"quality": { "enabled": true },
|
|
12
|
+
},
|
|
9
13
|
},
|
|
10
14
|
"targets": {
|
|
11
15
|
"agents": { "enabled": true, "mode": "copy" },
|
|
12
16
|
"claude": { "enabled": true, "mode": "symlink" },
|
|
13
|
-
"opencode": { "enabled": false, "mode": "symlink" }
|
|
14
|
-
}
|
|
17
|
+
"opencode": { "enabled": false, "mode": "symlink" },
|
|
18
|
+
},
|
|
15
19
|
}
|
package/package.json
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danieljvdm/dev-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"type": "module",
|
|
6
5
|
"description": "Declarative project development toolkit with portable agent skills.",
|
|
6
|
+
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git+https://github.com/danieljvdm/dev-kit.git"
|
|
10
10
|
},
|
|
11
|
-
"license": "MIT",
|
|
12
11
|
"bin": {
|
|
13
12
|
"dev-kit": "bin/dev-kit.mjs"
|
|
14
13
|
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dev-kit.example.jsonc",
|
|
16
|
+
"bin/",
|
|
17
|
+
"schema/",
|
|
18
|
+
"skills/",
|
|
19
|
+
"skill-sources.jsonc",
|
|
20
|
+
"skill-sources.lock.json",
|
|
21
|
+
"src/",
|
|
22
|
+
"templates/"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
15
25
|
"exports": {
|
|
16
26
|
".": {
|
|
17
27
|
"types": "./src/index.ts",
|
|
@@ -31,39 +41,32 @@
|
|
|
31
41
|
"./oxlint-plugin-effect": {
|
|
32
42
|
"types": "./src/oxlint-plugin-effect.d.ts",
|
|
33
43
|
"default": "./src/oxlint-plugin-effect.js"
|
|
44
|
+
},
|
|
45
|
+
"./oxlint-plugin-style": {
|
|
46
|
+
"types": "./src/oxlint-plugin-style.d.ts",
|
|
47
|
+
"default": "./src/oxlint-plugin-style.js"
|
|
34
48
|
}
|
|
35
49
|
},
|
|
36
|
-
"files": [
|
|
37
|
-
"dev-kit.example.jsonc",
|
|
38
|
-
"bin/",
|
|
39
|
-
"schema/",
|
|
40
|
-
"skills/",
|
|
41
|
-
"skill-sources.jsonc",
|
|
42
|
-
"skill-sources.lock.json",
|
|
43
|
-
"src/",
|
|
44
|
-
"templates/"
|
|
45
|
-
],
|
|
46
50
|
"scripts": {
|
|
47
51
|
"prepare": "./bin/dev-kit.mjs apply --locked",
|
|
48
52
|
"dev-kit": "./bin/dev-kit.mjs",
|
|
49
53
|
"changeset": "changeset",
|
|
50
54
|
"version-packages": "changeset version && ./bin/dev-kit.mjs apply",
|
|
51
55
|
"release": "changeset publish",
|
|
52
|
-
"check": "tsc --noEmit && vp lint",
|
|
53
56
|
"lint": "vp lint",
|
|
54
57
|
"plan": "./bin/dev-kit.mjs plan",
|
|
55
58
|
"apply": "./bin/dev-kit.mjs apply",
|
|
56
59
|
"gitignore": "./bin/dev-kit.mjs gitignore",
|
|
57
60
|
"effect:sync": "./bin/dev-kit.mjs effect sync",
|
|
58
|
-
"test": "
|
|
61
|
+
"test": "vp test",
|
|
59
62
|
"test:watch": "vitest --config vitest.config.ts",
|
|
60
63
|
"tsgo:patch": "./bin/dev-kit.mjs tsgo patch",
|
|
61
|
-
"typecheck": "tsc --noEmit",
|
|
62
64
|
"catalog:refresh": "./bin/dev-kit.mjs catalog refresh",
|
|
63
65
|
"catalog:check": "./bin/dev-kit.mjs catalog verify"
|
|
64
66
|
},
|
|
65
67
|
"dependencies": {
|
|
66
68
|
"@effect/platform-node": "4.0.0-beta.102",
|
|
69
|
+
"@stylistic/eslint-plugin": "5.10.0",
|
|
67
70
|
"effect": "4.0.0-beta.102",
|
|
68
71
|
"jsonc-parser": "3.3.1",
|
|
69
72
|
"tsx": "4.22.4"
|
|
@@ -45,6 +45,9 @@
|
|
|
45
45
|
},
|
|
46
46
|
"effectTsgo": {
|
|
47
47
|
"$ref": "#/$defs/effectTsgoSetup"
|
|
48
|
+
},
|
|
49
|
+
"vitePlus": {
|
|
50
|
+
"$ref": "#/$defs/vitePlusSetup"
|
|
48
51
|
}
|
|
49
52
|
},
|
|
50
53
|
"default": {}
|
|
@@ -133,6 +136,41 @@
|
|
|
133
136
|
}
|
|
134
137
|
}
|
|
135
138
|
},
|
|
139
|
+
"vitePlusSetup": {
|
|
140
|
+
"description": "Manage project-local Vite+ setup tasks.",
|
|
141
|
+
"type": "object",
|
|
142
|
+
"additionalProperties": false,
|
|
143
|
+
"properties": {
|
|
144
|
+
"hooks": {
|
|
145
|
+
"$ref": "#/$defs/vitePlusHooksSetup"
|
|
146
|
+
},
|
|
147
|
+
"quality": {
|
|
148
|
+
"$ref": "#/$defs/vitePlusQualitySetup"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"vitePlusHooksSetup": {
|
|
153
|
+
"description": "Run the installed Vite+ configurator to converge Git hook dispatchers in each worktree.",
|
|
154
|
+
"type": "object",
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"properties": {
|
|
157
|
+
"enabled": {
|
|
158
|
+
"type": "boolean",
|
|
159
|
+
"default": false
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"vitePlusQualitySetup": {
|
|
164
|
+
"description": "Manage the canonical Vite+ quality config and GitHub Actions workflow for supported Effect TypeScript-Go repositories.",
|
|
165
|
+
"type": "object",
|
|
166
|
+
"additionalProperties": false,
|
|
167
|
+
"properties": {
|
|
168
|
+
"enabled": {
|
|
169
|
+
"type": "boolean",
|
|
170
|
+
"default": false
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
136
174
|
"target": {
|
|
137
175
|
"type": "object",
|
|
138
176
|
"additionalProperties": false,
|
package/skill-sources.jsonc
CHANGED
|
@@ -14,12 +14,10 @@
|
|
|
14
14
|
"improve-animations",
|
|
15
15
|
"pick-ui-library",
|
|
16
16
|
"prototype",
|
|
17
|
-
"review-animations"
|
|
17
|
+
"review-animations",
|
|
18
18
|
],
|
|
19
19
|
"licensePath": "LICENSE",
|
|
20
|
-
"stripFrontmatter": [
|
|
21
|
-
"disable-model-invocation"
|
|
22
|
-
]
|
|
20
|
+
"stripFrontmatter": ["disable-model-invocation"],
|
|
23
21
|
},
|
|
24
22
|
{
|
|
25
23
|
"id": "cloudflare-skills",
|
|
@@ -37,19 +35,17 @@
|
|
|
37
35
|
"turnstile-spin",
|
|
38
36
|
"web-perf",
|
|
39
37
|
"workers-best-practices",
|
|
40
|
-
"wrangler"
|
|
38
|
+
"wrangler",
|
|
41
39
|
],
|
|
42
|
-
"licensePath": "LICENSE"
|
|
40
|
+
"licensePath": "LICENSE",
|
|
43
41
|
},
|
|
44
42
|
{
|
|
45
43
|
"id": "evanbacon-serve-sim",
|
|
46
44
|
"repository": "https://github.com/EvanBacon/serve-sim.git",
|
|
47
45
|
"ref": "main",
|
|
48
46
|
"skillsPath": "skills",
|
|
49
|
-
"include": [
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
]
|
|
47
|
+
"include": ["serve-sim"],
|
|
48
|
+
"licensePath": "LICENSE",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
55
51
|
}
|
package/skill-sources.lock.json
CHANGED
|
@@ -48,9 +48,7 @@
|
|
|
48
48
|
"review-animations": "sha256:d78c312f4102c0243fb524f85d1fd999e8c413a5afbef9ac3c7fe054fbb84570"
|
|
49
49
|
},
|
|
50
50
|
"licensePath": "LICENSE",
|
|
51
|
-
"stripFrontmatter": [
|
|
52
|
-
"disable-model-invocation"
|
|
53
|
-
]
|
|
51
|
+
"stripFrontmatter": ["disable-model-invocation"]
|
|
54
52
|
},
|
|
55
53
|
{
|
|
56
54
|
"id": "cloudflare-skills",
|
|
@@ -118,12 +116,8 @@
|
|
|
118
116
|
"ref": "main",
|
|
119
117
|
"resolved": "14ad57ff922551bf7be81e907ddfcfa6191e64f2",
|
|
120
118
|
"skillsPath": "skills",
|
|
121
|
-
"include": [
|
|
122
|
-
|
|
123
|
-
],
|
|
124
|
-
"skills": [
|
|
125
|
-
"serve-sim"
|
|
126
|
-
],
|
|
119
|
+
"include": ["serve-sim"],
|
|
120
|
+
"skills": ["serve-sim"],
|
|
127
121
|
"descriptions": {
|
|
128
122
|
"serve-sim": "Control and stream a running iOS, iPad, or Apple Watch Simulator with npx serve-sim. Use for simulator preview, taps, gestures, hardware buttons, rotation, camera injection, permissions, accessibility, and CoreAnimation debug."
|
|
129
123
|
},
|
package/skills/dev-kit/SKILL.md
CHANGED
|
@@ -28,7 +28,7 @@ stores explicit skill names and exact commit/content digests.
|
|
|
28
28
|
repository actually uses; do not infer capabilities from a product or
|
|
29
29
|
company name alone.
|
|
30
30
|
2. Run `dev-kit list --all`, then use `dev-kit search <terms>` and `dev-kit info
|
|
31
|
-
|
|
31
|
+
<skill>` for each capability in the inventory. Compare every candidate's
|
|
32
32
|
trigger description with concrete repository evidence. Keep explicitly
|
|
33
33
|
requested creative or advisory skills even when they have no mechanical
|
|
34
34
|
dependency signal.
|
|
@@ -73,13 +73,17 @@ skill as `dev-kit` when project agents should carry the toolkit procedure.
|
|
|
73
73
|
"exclude": [],
|
|
74
74
|
"setup": {
|
|
75
75
|
"agentInstructions": { "enabled": true },
|
|
76
|
-
"claudeInstructions": { "enabled": true }
|
|
76
|
+
"claudeInstructions": { "enabled": true },
|
|
77
|
+
"vitePlus": {
|
|
78
|
+
"hooks": { "enabled": true },
|
|
79
|
+
"quality": { "enabled": true },
|
|
80
|
+
},
|
|
77
81
|
},
|
|
78
82
|
"targets": {
|
|
79
83
|
"agents": { "enabled": true, "mode": "copy" },
|
|
80
84
|
"claude": { "enabled": true, "mode": "symlink" },
|
|
81
|
-
"opencode": { "enabled": false, "mode": "symlink" }
|
|
82
|
-
}
|
|
85
|
+
"opencode": { "enabled": false, "mode": "symlink" },
|
|
86
|
+
},
|
|
83
87
|
}
|
|
84
88
|
```
|
|
85
89
|
|
|
@@ -97,6 +101,28 @@ wrapper or to an existing regular `AGENTS.md`. Preserve conflicting paths;
|
|
|
97
101
|
when disabled, dev-kit removes only unchanged outputs recorded in local
|
|
98
102
|
ownership state.
|
|
99
103
|
|
|
104
|
+
Enable `setup.vitePlus.hooks` when an installed direct `vite-plus` dependency
|
|
105
|
+
should manage Git hooks. Each apply checks the local `.vite-hooks/_` dispatcher,
|
|
106
|
+
the portable `.vite-hooks/pre-commit` hook, and `core.hooksPath`, then runs the
|
|
107
|
+
project-local `vp config --no-agent` when they need convergence. This recreates
|
|
108
|
+
ignored dispatchers in linked worktrees. Preserve other hook managers; Dev Kit
|
|
109
|
+
refuses to replace an unrelated `core.hooksPath`. Use `VITE_GIT_HOOKS=0` or
|
|
110
|
+
`HUSKY=0` to skip hook setup for an invocation.
|
|
111
|
+
|
|
112
|
+
Enable `setup.vitePlus.quality` only in supported Vite+/Effect repositories
|
|
113
|
+
that explicitly want Dev Kit to own the canonical root `vite.config.ts` and
|
|
114
|
+
`.github/workflows/check.yml`. It requires direct Dev Kit, Vite+, Effect,
|
|
115
|
+
Effect TypeScript-Go, and native TypeScript dependencies, as well as
|
|
116
|
+
`setup.effectTsgo.enabled`. It refuses custom destination files and conflicting
|
|
117
|
+
`check` or `typecheck` package scripts. Exact canonical files can be adopted;
|
|
118
|
+
later updates and cleanup occur only while the owned files remain unchanged.
|
|
119
|
+
|
|
120
|
+
The managed Vite config composes the shared formatter and linter presets,
|
|
121
|
+
configures `vp staged`, and defines cached `check` and `typecheck` Vite tasks.
|
|
122
|
+
The check task and GitHub Actions workflow run `vp fmt --check`, `vp lint`,
|
|
123
|
+
`vp test`, and finally `vp run typecheck` so Effect diagnostics come from the
|
|
124
|
+
patched native compiler.
|
|
125
|
+
|
|
100
126
|
## Ownership and conflicts
|
|
101
127
|
|
|
102
128
|
Dev-kit adopts an existing destination only when its digest exactly matches a
|
|
@@ -126,8 +152,8 @@ For one lifecycle entry point, configure:
|
|
|
126
152
|
```jsonc
|
|
127
153
|
{
|
|
128
154
|
"scripts": {
|
|
129
|
-
"postinstall": "dev-kit apply"
|
|
130
|
-
}
|
|
155
|
+
"postinstall": "dev-kit apply",
|
|
156
|
+
},
|
|
131
157
|
}
|
|
132
158
|
```
|
|
133
159
|
|
|
@@ -145,8 +171,8 @@ installed Effect package:
|
|
|
145
171
|
```jsonc
|
|
146
172
|
{
|
|
147
173
|
"setup": {
|
|
148
|
-
"effectSource": { "enabled": true }
|
|
149
|
-
}
|
|
174
|
+
"effectSource": { "enabled": true },
|
|
175
|
+
},
|
|
150
176
|
}
|
|
151
177
|
```
|
|
152
178
|
|
|
@@ -165,8 +191,8 @@ Enable the setup task in the same manifest:
|
|
|
165
191
|
```jsonc
|
|
166
192
|
{
|
|
167
193
|
"setup": {
|
|
168
|
-
"effectTsgo": { "enabled": true }
|
|
169
|
-
}
|
|
194
|
+
"effectTsgo": { "enabled": true },
|
|
195
|
+
},
|
|
170
196
|
}
|
|
171
197
|
```
|
|
172
198
|
|
|
@@ -205,7 +231,16 @@ Use `lint.extends` instead of spreading the object so Vite+ composes nested
|
|
|
205
231
|
rule maps correctly. Oxfmt has no inheritance mechanism, so spread its object
|
|
206
232
|
before project-local options. Standalone `oxlint.config.ts` uses the same
|
|
207
233
|
`extends: [recommendedOxlintConfig]`; standalone `oxfmt.config.ts` spreads the
|
|
208
|
-
same `recommendedOxfmtConfig`.
|
|
234
|
+
same `recommendedOxfmtConfig`. The shared lint preset enables `typeAware` for
|
|
235
|
+
semantic lint rules but leaves `typeCheck` disabled. Effect TypeScript-Go
|
|
236
|
+
projects must run the patched native compiler separately with
|
|
237
|
+
`vp run typecheck` after `vp fmt --check`, `vp lint`, and `vp test`; Oxlint's
|
|
238
|
+
bundled `tsgolint` does not use the Effect patch.
|
|
239
|
+
|
|
240
|
+
The Oxlint preset enables the fixable
|
|
241
|
+
`stylistic/padding-line-between-statements` rule. It keeps adjacent variable
|
|
242
|
+
declarations grouped, requires a blank line before the next logical statement,
|
|
243
|
+
and separates every `return` statement from the preceding statement.
|
|
209
244
|
|
|
210
245
|
The Oxlint preset registers Dev Kit's shared Effect plugin as `effect`, but
|
|
211
246
|
does not enable its scope-sensitive rules globally. Effect projects should
|
|
@@ -219,9 +254,9 @@ in the consuming project.
|
|
|
219
254
|
## Current boundary
|
|
220
255
|
|
|
221
256
|
Manage skill outputs, the `setup.agentInstructions` wrapper, the
|
|
222
|
-
`setup.claudeInstructions` link, the
|
|
223
|
-
`setup.
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
257
|
+
`setup.claudeInstructions` link, the `setup.vitePlus.hooks` dispatcher, the
|
|
258
|
+
opt-in `setup.vitePlus.quality` config and GitHub workflow, the
|
|
259
|
+
`setup.effectSource` checkout, and the explicit `setup.effectTsgo` task.
|
|
260
|
+
Dependency and `tsconfig.json` contributions remain deliberate user-owned
|
|
261
|
+
edits. Custom Vite configs compose the Oxlint and Oxfmt package exports manually
|
|
262
|
+
and leave the canonical quality task disabled.
|