@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.
Files changed (49) hide show
  1. package/README.md +123 -56
  2. package/dev-kit.example.jsonc +7 -3
  3. package/package.json +19 -16
  4. package/schema/dev-kit.schema.json +38 -0
  5. package/skill-sources.jsonc +8 -12
  6. package/skill-sources.lock.json +3 -9
  7. package/skills/dev-kit/SKILL.md +52 -17
  8. package/skills/effect-ts/agents/openai.yaml +0 -1
  9. package/skills/effect-ts/references/audit-services.md +11 -11
  10. package/skills/effect-ts/references/guide-effect.md +56 -69
  11. package/skills/effect-ts/references/guide-error-handling.md +64 -73
  12. package/skills/effect-ts/references/guide-layers.md +187 -215
  13. package/skills/effect-ts/references/guide-observability.md +91 -116
  14. package/skills/effect-ts/references/guide-retries.md +32 -44
  15. package/skills/effect-ts/references/guide-schedule.md +26 -40
  16. package/skills/effect-ts/references/guide-schema.md +50 -57
  17. package/skills/effect-ts/references/guide-sql.md +47 -50
  18. package/skills/effect-ts/references/guide-testing.md +96 -98
  19. package/skills/effect-ts/references/guide-type-safety-and-boundaries.md +7 -7
  20. package/skills/effect-ts/references/version-and-source.md +0 -1
  21. package/src/bin/dev-kit.ts +61 -28
  22. package/src/catalog-manager.ts +86 -34
  23. package/src/catalog.ts +71 -33
  24. package/src/cli-ui.ts +20 -16
  25. package/src/effect-source.ts +49 -19
  26. package/src/effect-tsgo.ts +66 -35
  27. package/src/gitignore.ts +19 -6
  28. package/src/index.ts +6 -0
  29. package/src/manifest.ts +38 -3
  30. package/src/node-symbolic-link.ts +3 -0
  31. package/src/oxlint-plugin-effect.js +3 -0
  32. package/src/oxlint-plugin-style.d.ts +8 -0
  33. package/src/oxlint-plugin-style.js +8 -0
  34. package/src/oxlint.js +14 -0
  35. package/src/oxlint.ts +14 -0
  36. package/src/package-skill-source.ts +189 -52
  37. package/src/path-digest.ts +31 -11
  38. package/src/project-package.ts +44 -19
  39. package/src/project-process-lock.ts +19 -12
  40. package/src/project-state.ts +11 -0
  41. package/src/skill-manager.ts +134 -55
  42. package/src/skill-selector.ts +8 -2
  43. package/src/source-manifest.ts +2 -6
  44. package/src/sync.ts +371 -103
  45. package/src/vendor.ts +112 -42
  46. package/src/vite-plus-hooks.ts +174 -0
  47. package/src/vite-plus-quality.ts +49 -0
  48. package/templates/vite-plus/github-actions-check.yml +44 -0
  49. 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 | 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. |
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 | 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 |
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
- Package and tsconfig edits remain explicit until Dev Kit can safely own parts
302
- of shared JSONC files.
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 also registers the shared `effect` JavaScript plugin. Effect
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
- bun install
469
- bun run check
470
- vitest run --config vitest.config.ts
536
+ vp install
537
+ vp run check
471
538
  ```
@@ -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.6.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": "vitest run --config vitest.config.ts",
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,
@@ -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
- "serve-sim"
51
- ],
52
- "licensePath": "LICENSE"
53
- }
54
- ]
47
+ "include": ["serve-sim"],
48
+ "licensePath": "LICENSE",
49
+ },
50
+ ],
55
51
  }
@@ -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
- "serve-sim"
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
  },
@@ -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
- <skill>` for each capability in the inventory. Compare every candidate's
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.effectSource` checkout, and the explicit `setup.effectTsgo` task. Edit
224
- shared `package.json` and `tsconfig.json`
225
- contributions deliberately. The Oxlint and Oxfmt configurations are composable
226
- package exports, not manifest-managed outputs. Treat broader setup tasks as
227
- future manifest capabilities until the installed CLI exposes them.
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.
@@ -2,4 +2,3 @@ interface:
2
2
  display_name: "Effect Expert"
3
3
  short_description: "Apply current Effect v4 patterns and tooling"
4
4
  default_prompt: "Use $effect-ts to apply the relevant Effect architecture, schema, service, error, testing, HTTP, SQL, observability, or CLI guidance."
5
-