@danieljvdm/dev-kit 0.2.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 +290 -0
- package/bin/dev-kit.mjs +3 -0
- package/dev-kit.example.jsonc +13 -0
- package/package.json +69 -0
- package/schema/dev-kit.schema.json +128 -0
- package/schema/skill-sources.schema.json +83 -0
- package/skill-sources.jsonc +55 -0
- package/skill-sources.lock.json +136 -0
- package/skills/dev-kit/SKILL.md +145 -0
- package/skills/dev-kit/agents/openai.yaml +4 -0
- package/skills/effect-ts/SKILL.md +242 -0
- package/skills/effect-ts/UPSTREAM.md +28 -0
- package/skills/effect-ts/agents/openai.yaml +5 -0
- package/skills/effect-ts/references/audit-services.md +144 -0
- package/skills/effect-ts/references/features.md +525 -0
- package/skills/effect-ts/references/guide-cli.md +106 -0
- package/skills/effect-ts/references/guide-effect.md +453 -0
- package/skills/effect-ts/references/guide-error-handling.md +574 -0
- package/skills/effect-ts/references/guide-http-boundaries.md +55 -0
- package/skills/effect-ts/references/guide-layers.md +1017 -0
- package/skills/effect-ts/references/guide-observability.md +771 -0
- package/skills/effect-ts/references/guide-retries.md +446 -0
- package/skills/effect-ts/references/guide-schedule.md +357 -0
- package/skills/effect-ts/references/guide-schema.md +671 -0
- package/skills/effect-ts/references/guide-sql.md +539 -0
- package/skills/effect-ts/references/guide-testing.md +534 -0
- package/skills/effect-ts/references/guide-type-safety-and-boundaries.md +131 -0
- package/skills/effect-ts/references/version-and-source.md +87 -0
- package/src/bin/dev-kit.ts +372 -0
- package/src/catalog-manager.ts +345 -0
- package/src/catalog.ts +246 -0
- package/src/cli-ui.ts +110 -0
- package/src/effect-source.ts +325 -0
- package/src/effect-tsgo.ts +256 -0
- package/src/gitignore.ts +212 -0
- package/src/index.ts +98 -0
- package/src/manifest.ts +133 -0
- package/src/node-symbolic-link.ts +31 -0
- package/src/path-digest.ts +140 -0
- package/src/project-process-lock.ts +76 -0
- package/src/project-state.ts +67 -0
- package/src/skill-manager.ts +326 -0
- package/src/source-manifest.ts +51 -0
- package/src/sync.ts +900 -0
- package/src/tool-metadata.ts +3 -0
- package/src/typescript-package-name.ts +5 -0
- package/src/vendor.ts +848 -0
package/README.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# Dev Kit
|
|
2
|
+
|
|
3
|
+
Portable agent skills and reproducible project setup, managed from one manifest.
|
|
4
|
+
|
|
5
|
+
Dev Kit gives every project the same development conventions without requiring a
|
|
6
|
+
collection of unrelated postinstall scripts. It can:
|
|
7
|
+
|
|
8
|
+
- install selected skills for Codex, Claude, and OpenCode;
|
|
9
|
+
- run explicit setup tasks such as version-matched Effect source checkout and
|
|
10
|
+
Effect TypeScript-Go patching;
|
|
11
|
+
- preview changes before writing them;
|
|
12
|
+
- lock resolved outputs for reproducible installs; and
|
|
13
|
+
- detect ownership conflicts without overwriting user files.
|
|
14
|
+
|
|
15
|
+
## Quick start
|
|
16
|
+
|
|
17
|
+
Install Dev Kit from GitHub:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
bun add -d github:danieljvdm/agent-skills
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Initialize the project, browse the approved catalog, and add skills:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bunx dev-kit init
|
|
27
|
+
bunx dev-kit list --all
|
|
28
|
+
bunx dev-kit add dev-kit effect
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`add` updates `dev-kit.jsonc` and applies the selection immediately. The
|
|
32
|
+
resulting manifest is ordinary JSONC:
|
|
33
|
+
|
|
34
|
+
In an interactive terminal, `dev-kit add` and `dev-kit remove` with no names
|
|
35
|
+
open a multi-select picker. Pass several names to change them in one command,
|
|
36
|
+
or use `--no-apply` to edit the manifest without syncing yet.
|
|
37
|
+
|
|
38
|
+
```jsonc
|
|
39
|
+
{
|
|
40
|
+
"$schema": "./node_modules/@danieljvdm/dev-kit/schema/dev-kit.schema.json",
|
|
41
|
+
"include": ["dev-kit", "effect"],
|
|
42
|
+
"targets": {
|
|
43
|
+
"agents": { "enabled": true, "mode": "copy" },
|
|
44
|
+
"claude": { "enabled": true, "mode": "symlink" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For review-first workflows, edit the manifest or pass `--no-apply`, then:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
bunx dev-kit plan
|
|
53
|
+
bunx dev-kit apply
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Commit the generated `dev-kit.lock.json`, then use locked mode in your package
|
|
57
|
+
lifecycle:
|
|
58
|
+
|
|
59
|
+
```jsonc
|
|
60
|
+
{
|
|
61
|
+
"scripts": {
|
|
62
|
+
"postinstall": "dev-kit apply --locked"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
That single postinstall applies every task enabled in `dev-kit.jsonc`.
|
|
68
|
+
|
|
69
|
+
This repository dogfoods the same flow with its committed `dev-kit.jsonc` and
|
|
70
|
+
`dev-kit.lock.json`. From this source checkout, invoke the local CLI with:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
bun run dev-kit plan
|
|
74
|
+
bun run dev-kit apply --locked
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`bun x dev-kit` is for consuming projects where installation has created the
|
|
78
|
+
`node_modules/.bin/dev-kit` link; package managers do not create that link for
|
|
79
|
+
the root package itself.
|
|
80
|
+
|
|
81
|
+
## Commands
|
|
82
|
+
|
|
83
|
+
| Command | Purpose |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| `dev-kit` | Show selected skills and the four common next actions. |
|
|
86
|
+
| `dev-kit init` | Create a minimal `dev-kit.jsonc`. |
|
|
87
|
+
| `dev-kit add <skill...>` | Select and immediately install skills. |
|
|
88
|
+
| `dev-kit remove <skill...>` | Deselect and uninstall skills safely. |
|
|
89
|
+
| `dev-kit list [--all]` | List selected skills or browse the catalog. |
|
|
90
|
+
| `dev-kit search <words...>` | Search names and descriptions. |
|
|
91
|
+
| `dev-kit info <skill>` | Show description, source, and approved commit. |
|
|
92
|
+
| `dev-kit status` | Check whether the project matches its selection. |
|
|
93
|
+
| `dev-kit sync` | Apply the current manifest. |
|
|
94
|
+
| `dev-kit plan` | Preview project changes without writing files. |
|
|
95
|
+
| `dev-kit apply` | Apply the manifest and update `dev-kit.lock.json`. |
|
|
96
|
+
| `dev-kit apply --locked` | Reproduce the committed lock or fail on drift. |
|
|
97
|
+
| `dev-kit gitignore` | Add `.repos/` and `.dev-kit/` to `.gitignore`. |
|
|
98
|
+
| `dev-kit effect sync` | Sync `.repos/effect` to the installed Effect version. |
|
|
99
|
+
| `dev-kit tsgo patch` | Validate and patch Effect TypeScript-Go directly. |
|
|
100
|
+
| `dev-kit catalog refresh` | Maintainer command to approve current upstream refs. |
|
|
101
|
+
| `dev-kit catalog add <repository>` | Inspect a repository and approve selected skills. |
|
|
102
|
+
| `dev-kit catalog remove <source-or-skill>` | Revoke an approval (`--yes` outside a terminal). |
|
|
103
|
+
| `dev-kit catalog list` | List approved upstream repositories. |
|
|
104
|
+
| `dev-kit catalog info <source>` | Show a source, commit, and approved skills. |
|
|
105
|
+
| `dev-kit catalog verify` | Verify the committed snapshot without advancing refs. |
|
|
106
|
+
|
|
107
|
+
Options vary by command and include `--dry-run`, `--manifest`, `--lockfile`,
|
|
108
|
+
and `--project-dir`. Run any command with `--help` for its complete usage.
|
|
109
|
+
|
|
110
|
+
## How it works
|
|
111
|
+
|
|
112
|
+
Dev Kit uses three project-local files:
|
|
113
|
+
|
|
114
|
+
| Path | Role | Commit it? |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| `dev-kit.jsonc` | Desired skills, targets, and setup tasks. | Yes |
|
|
117
|
+
| `dev-kit.lock.json` | Resolved content digests and setup-tool versions. | Yes |
|
|
118
|
+
| `.dev-kit/state.json` | Local ownership receipts used during apply and cleanup. | No |
|
|
119
|
+
|
|
120
|
+
Skills are copied into `.agents/skills` by default. Other harness targets can
|
|
121
|
+
copy or symlink those project-local skills.
|
|
122
|
+
|
|
123
|
+
Dev Kit only changes paths represented by the manifest. Existing unknown files,
|
|
124
|
+
modified managed files, and unsafe symlink paths are reported as conflicts and
|
|
125
|
+
left untouched. Cleanup removes only unchanged outputs with a matching local
|
|
126
|
+
ownership receipt.
|
|
127
|
+
|
|
128
|
+
Locked mode rejects changes to the manifest, packaged skill content, or setup
|
|
129
|
+
tool versions. A project-local process lock also prevents concurrent applies.
|
|
130
|
+
|
|
131
|
+
## Manifest
|
|
132
|
+
|
|
133
|
+
`include` accepts individual skill names and skill families:
|
|
134
|
+
|
|
135
|
+
```jsonc
|
|
136
|
+
{
|
|
137
|
+
"$schema": "./node_modules/@danieljvdm/dev-kit/schema/dev-kit.schema.json",
|
|
138
|
+
"include": ["dev-kit", "effect", "emilkowalski-skills"],
|
|
139
|
+
"exclude": ["animation-vocabulary"],
|
|
140
|
+
"targets": {
|
|
141
|
+
"agents": { "enabled": true, "mode": "copy" },
|
|
142
|
+
"claude": { "enabled": true, "mode": "symlink" },
|
|
143
|
+
"opencode": { "enabled": false, "mode": "symlink" }
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- `dev-kit` installs guidance for operating the toolkit itself.
|
|
149
|
+
- `effect` expands to the consolidated `effect-ts` skill.
|
|
150
|
+
- An approved source ID selects every skill from that catalog source.
|
|
151
|
+
- An individual catalog skill can be selected directly.
|
|
152
|
+
|
|
153
|
+
Dev Kit reserves `.repos/<source-id>` for project-local source checkouts. Run
|
|
154
|
+
`dev-kit gitignore` to add `.repos/` and `.dev-kit/` to the project ignore file.
|
|
155
|
+
The patch is idempotent, preserves existing lines, and refuses symlinked
|
|
156
|
+
`.gitignore` files.
|
|
157
|
+
|
|
158
|
+
## Effect source checkout
|
|
159
|
+
|
|
160
|
+
Enable a local checkout of the exact installed Effect release in the manifest:
|
|
161
|
+
|
|
162
|
+
```jsonc
|
|
163
|
+
{
|
|
164
|
+
"include": ["effect"],
|
|
165
|
+
"setup": {
|
|
166
|
+
"effectSource": { "enabled": true }
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`dev-kit apply` reads `node_modules/effect/package.json`, then shallow-clones or
|
|
172
|
+
updates `.repos/effect` to the detached `effect@<version>` tag. It skips the
|
|
173
|
+
checkout in CI, leaves the repository in place when the task is disabled, and
|
|
174
|
+
refuses to switch a checkout with local changes or an unexpected origin.
|
|
175
|
+
|
|
176
|
+
The path, package name, and repository URL may be overridden for compatible
|
|
177
|
+
Effect package layouts. Use `dev-kit effect sync --dry-run` to inspect this
|
|
178
|
+
task directly.
|
|
179
|
+
|
|
180
|
+
## Effect TypeScript-Go
|
|
181
|
+
|
|
182
|
+
Enable Effect TypeScript-Go in the same manifest:
|
|
183
|
+
|
|
184
|
+
```jsonc
|
|
185
|
+
{
|
|
186
|
+
"include": ["effect"],
|
|
187
|
+
"setup": {
|
|
188
|
+
"effectSource": { "enabled": true },
|
|
189
|
+
"effectTsgo": { "enabled": true }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Pin the compatible packages in the consuming project:
|
|
195
|
+
|
|
196
|
+
```jsonc
|
|
197
|
+
{
|
|
198
|
+
"devDependencies": {
|
|
199
|
+
"@danieljvdm/dev-kit": "github:danieljvdm/agent-skills",
|
|
200
|
+
"@effect/tsgo": "0.24.3",
|
|
201
|
+
"typescript": "7.0.2"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```jsonc
|
|
207
|
+
{
|
|
208
|
+
"$schema": "./node_modules/@effect/tsgo/schema.json",
|
|
209
|
+
"compilerOptions": {
|
|
210
|
+
"plugins": [{ "name": "@effect/language-service" }]
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`dev-kit apply` validates both exact version pins and patches the project-local
|
|
216
|
+
native TypeScript compiler. It does not download dependencies and skips an
|
|
217
|
+
installation that is already patched. Use `dev-kit tsgo patch --dry-run` when
|
|
218
|
+
troubleshooting the task directly.
|
|
219
|
+
|
|
220
|
+
Package and tsconfig edits remain explicit until Dev Kit can safely own parts
|
|
221
|
+
of shared JSONC files.
|
|
222
|
+
|
|
223
|
+
## Approved external skills
|
|
224
|
+
|
|
225
|
+
This repository is an opinionated catalog, not a mirror of every upstream skill
|
|
226
|
+
tree. `skill-sources.jsonc` declares sources Dan has approved:
|
|
227
|
+
|
|
228
|
+
```jsonc
|
|
229
|
+
{
|
|
230
|
+
"$schema": "./schema/skill-sources.schema.json",
|
|
231
|
+
"sources": [
|
|
232
|
+
{
|
|
233
|
+
"id": "emilkowalski-skills",
|
|
234
|
+
"repository": "https://github.com/emilkowalski/skills.git",
|
|
235
|
+
"ref": "main",
|
|
236
|
+
"skillsPath": "skills",
|
|
237
|
+
"include": ["*"],
|
|
238
|
+
"licensePath": "LICENSE"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Maintainers approve a new upstream snapshot with:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
bun run catalog:refresh
|
|
248
|
+
bun run catalog:check
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Adding a source does not require editing JSONC:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Opens a skill picker in a terminal
|
|
255
|
+
dev-kit catalog add https://github.com/owner/repository
|
|
256
|
+
|
|
257
|
+
# Explicit and automation-friendly
|
|
258
|
+
dev-kit catalog add https://github.com/owner/repository \
|
|
259
|
+
--skill one --skill two
|
|
260
|
+
dev-kit catalog add https://github.com/owner/repository --all
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
GitHub tree URLs are accepted, so a URL such as
|
|
264
|
+
`https://github.com/owner/repository/tree/main/skills` supplies the repository,
|
|
265
|
+
ref, and skills path together. `--all` expands to the skills discovered at that
|
|
266
|
+
exact snapshot; it never writes a wildcard that could silently approve a future
|
|
267
|
+
upstream addition.
|
|
268
|
+
|
|
269
|
+
The current catalog includes approved snapshots from Emil Kowalski,
|
|
270
|
+
Cloudflare, and Evan Bacon. Inspect them with `dev-kit catalog list` and
|
|
271
|
+
`dev-kit catalog info <source>`.
|
|
272
|
+
|
|
273
|
+
The refresh resolves refs to exact commits, validates names and paths, rejects
|
|
274
|
+
symlinks and collisions, extracts short descriptions, and updates
|
|
275
|
+
`skill-sources.lock.json`. It does not copy upstream skill trees into this
|
|
276
|
+
repository.
|
|
277
|
+
|
|
278
|
+
When a consuming project selects an external skill, Dev Kit fetches that exact
|
|
279
|
+
approved commit into the ignored `.dev-kit/cache`, applies declared compatibility
|
|
280
|
+
transforms, and installs the result through the ownership-safe sync path. Normal
|
|
281
|
+
installs never float to a newer upstream commit; only a reviewed catalog refresh
|
|
282
|
+
changes what is approved.
|
|
283
|
+
|
|
284
|
+
## Development
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
bun install
|
|
288
|
+
bun run check
|
|
289
|
+
vitest run --config vitest.config.ts
|
|
290
|
+
```
|
package/bin/dev-kit.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./schema/dev-kit.schema.json",
|
|
3
|
+
"include": ["dev-kit", "effect", "emilkowalski-skills"],
|
|
4
|
+
"setup": {
|
|
5
|
+
"effectSource": { "enabled": true },
|
|
6
|
+
"effectTsgo": { "enabled": true }
|
|
7
|
+
},
|
|
8
|
+
"targets": {
|
|
9
|
+
"agents": { "enabled": true, "mode": "copy" },
|
|
10
|
+
"claude": { "enabled": true, "mode": "symlink" },
|
|
11
|
+
"opencode": { "enabled": false, "mode": "symlink" }
|
|
12
|
+
}
|
|
13
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@danieljvdm/dev-kit",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Declarative project development toolkit with portable agent skills.",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/danieljvdm/agent-skills.git"
|
|
10
|
+
},
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"bin": {
|
|
13
|
+
"dev-kit": "bin/dev-kit.mjs"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./src/index.ts",
|
|
18
|
+
"default": "./src/index.ts"
|
|
19
|
+
},
|
|
20
|
+
"./schema": "./schema/dev-kit.schema.json",
|
|
21
|
+
"./schema/dev-kit.schema.json": "./schema/dev-kit.schema.json",
|
|
22
|
+
"./schema/skill-sources.schema.json": "./schema/skill-sources.schema.json"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dev-kit.example.jsonc",
|
|
26
|
+
"bin/",
|
|
27
|
+
"schema/",
|
|
28
|
+
"skills/",
|
|
29
|
+
"skill-sources.jsonc",
|
|
30
|
+
"skill-sources.lock.json",
|
|
31
|
+
"src/"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"prepare": "./bin/dev-kit.mjs apply --locked",
|
|
35
|
+
"dev-kit": "./bin/dev-kit.mjs",
|
|
36
|
+
"changeset": "changeset",
|
|
37
|
+
"version-packages": "changeset version",
|
|
38
|
+
"release": "changeset publish",
|
|
39
|
+
"check": "tsc --noEmit",
|
|
40
|
+
"plan": "./bin/dev-kit.mjs plan",
|
|
41
|
+
"apply": "./bin/dev-kit.mjs apply",
|
|
42
|
+
"gitignore": "./bin/dev-kit.mjs gitignore",
|
|
43
|
+
"effect:sync": "./bin/dev-kit.mjs effect sync",
|
|
44
|
+
"test": "vitest run --config vitest.config.ts",
|
|
45
|
+
"test:watch": "vitest --config vitest.config.ts",
|
|
46
|
+
"tsgo:patch": "./bin/dev-kit.mjs tsgo patch",
|
|
47
|
+
"typecheck": "tsc --noEmit",
|
|
48
|
+
"catalog:refresh": "./bin/dev-kit.mjs catalog refresh",
|
|
49
|
+
"catalog:check": "./bin/dev-kit.mjs catalog verify"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@effect/platform-node": "4.0.0-beta.102",
|
|
53
|
+
"effect": "4.0.0-beta.102",
|
|
54
|
+
"jsonc-parser": "3.3.1",
|
|
55
|
+
"tsx": "4.22.4"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@changesets/cli": "3.0.0-next.10",
|
|
59
|
+
"@effect/tsgo": "0.24.3",
|
|
60
|
+
"@effect/vitest": "4.0.0-beta.102",
|
|
61
|
+
"@types/node": "25.9.1",
|
|
62
|
+
"typescript": "7.0.2",
|
|
63
|
+
"vitest": "4.1.10"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=22.12.0"
|
|
67
|
+
},
|
|
68
|
+
"packageManager": "bun@1.3.14"
|
|
69
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/danieljvdm/agent-skills/main/schema/dev-kit.schema.json",
|
|
4
|
+
"title": "Dev Kit Manifest",
|
|
5
|
+
"description": "Project-local desired state for portable skills and explicit dev-kit setup tasks.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string"
|
|
11
|
+
},
|
|
12
|
+
"include": {
|
|
13
|
+
"description": "Skill names or family names to sync. External source ids are available as family names.",
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
18
|
+
},
|
|
19
|
+
"uniqueItems": true,
|
|
20
|
+
"minItems": 0
|
|
21
|
+
},
|
|
22
|
+
"exclude": {
|
|
23
|
+
"description": "Skill names or family names to remove from the selected set after expanding includes.",
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
28
|
+
},
|
|
29
|
+
"uniqueItems": true,
|
|
30
|
+
"default": []
|
|
31
|
+
},
|
|
32
|
+
"setup": {
|
|
33
|
+
"description": "Explicit setup tasks executed by dev-kit apply after dependencies are installed.",
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"properties": {
|
|
37
|
+
"effectSource": {
|
|
38
|
+
"$ref": "#/$defs/effectSourceSetup"
|
|
39
|
+
},
|
|
40
|
+
"effectTsgo": {
|
|
41
|
+
"$ref": "#/$defs/effectTsgoSetup"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"default": {}
|
|
45
|
+
},
|
|
46
|
+
"targets": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"additionalProperties": false,
|
|
49
|
+
"properties": {
|
|
50
|
+
"agents": { "$ref": "#/$defs/target" },
|
|
51
|
+
"claude": { "$ref": "#/$defs/target" },
|
|
52
|
+
"opencode": { "$ref": "#/$defs/target" }
|
|
53
|
+
},
|
|
54
|
+
"default": {
|
|
55
|
+
"agents": { "enabled": true, "mode": "copy" }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"required": ["include"],
|
|
60
|
+
"$defs": {
|
|
61
|
+
"effectSourceSetup": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"additionalProperties": false,
|
|
64
|
+
"properties": {
|
|
65
|
+
"enabled": {
|
|
66
|
+
"type": "boolean",
|
|
67
|
+
"default": false
|
|
68
|
+
},
|
|
69
|
+
"packageName": {
|
|
70
|
+
"description": "Installed package whose exact version selects the Effect source tag.",
|
|
71
|
+
"type": "string",
|
|
72
|
+
"pattern": "^(?:[a-z0-9][a-z0-9._-]*|@[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*)$",
|
|
73
|
+
"default": "effect"
|
|
74
|
+
},
|
|
75
|
+
"path": {
|
|
76
|
+
"description": "Project-relative checkout destination.",
|
|
77
|
+
"type": "string",
|
|
78
|
+
"default": ".repos/effect"
|
|
79
|
+
},
|
|
80
|
+
"repository": {
|
|
81
|
+
"description": "Git repository containing effect@<version> tags.",
|
|
82
|
+
"type": "string",
|
|
83
|
+
"default": "https://github.com/Effect-TS/effect.git"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"effectTsgoSetup": {
|
|
88
|
+
"type": "object",
|
|
89
|
+
"additionalProperties": false,
|
|
90
|
+
"properties": {
|
|
91
|
+
"enabled": {
|
|
92
|
+
"type": "boolean",
|
|
93
|
+
"default": false
|
|
94
|
+
},
|
|
95
|
+
"force": {
|
|
96
|
+
"description": "Pass the unsafe upstream --force escape hatch when no commit-exact binary matches.",
|
|
97
|
+
"type": "boolean",
|
|
98
|
+
"default": false
|
|
99
|
+
},
|
|
100
|
+
"typescriptPackage": {
|
|
101
|
+
"description": "Project-local native TypeScript package or alias for effect-tsgo to patch.",
|
|
102
|
+
"type": "string",
|
|
103
|
+
"pattern": "^(?:[a-z0-9][a-z0-9._-]*|@[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*)$",
|
|
104
|
+
"default": "typescript"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"target": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"properties": {
|
|
112
|
+
"enabled": {
|
|
113
|
+
"type": "boolean",
|
|
114
|
+
"default": true
|
|
115
|
+
},
|
|
116
|
+
"mode": {
|
|
117
|
+
"description": "copy copies from the package source; symlink links to the primary agents target when possible.",
|
|
118
|
+
"enum": ["copy", "symlink"],
|
|
119
|
+
"default": "copy"
|
|
120
|
+
},
|
|
121
|
+
"path": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Project-relative destination directory for skill folders."
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/danieljvdm/agent-skills/main/schema/skill-sources.schema.json",
|
|
4
|
+
"title": "External Agent Skill Sources",
|
|
5
|
+
"description": "Repository-level sources approved for the skill catalog.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string"
|
|
11
|
+
},
|
|
12
|
+
"sources": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"$ref": "#/$defs/source"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"required": ["sources"],
|
|
20
|
+
"$defs": {
|
|
21
|
+
"source": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"properties": {
|
|
25
|
+
"id": {
|
|
26
|
+
"description": "Unique source id. It also becomes a family name in project manifests.",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"description": "Git clone URL.",
|
|
32
|
+
"type": "string",
|
|
33
|
+
"minLength": 1
|
|
34
|
+
},
|
|
35
|
+
"ref": {
|
|
36
|
+
"description": "Git branch, tag, or commit to resolve when updating.",
|
|
37
|
+
"type": "string",
|
|
38
|
+
"minLength": 1
|
|
39
|
+
},
|
|
40
|
+
"skillsPath": {
|
|
41
|
+
"description": "Repository-relative directory containing skill folders.",
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 1
|
|
44
|
+
},
|
|
45
|
+
"include": {
|
|
46
|
+
"description": "Explicit skill names, or [\"*\"] to approve every skill found under skillsPath.",
|
|
47
|
+
"type": "array",
|
|
48
|
+
"items": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^(\\*|[a-z0-9]+(-[a-z0-9]+)*)$"
|
|
51
|
+
},
|
|
52
|
+
"uniqueItems": true,
|
|
53
|
+
"minItems": 1
|
|
54
|
+
},
|
|
55
|
+
"exclude": {
|
|
56
|
+
"description": "Skills to subtract after expanding include, primarily for [\"*\"] sources.",
|
|
57
|
+
"type": "array",
|
|
58
|
+
"items": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
61
|
+
},
|
|
62
|
+
"uniqueItems": true,
|
|
63
|
+
"default": []
|
|
64
|
+
},
|
|
65
|
+
"licensePath": {
|
|
66
|
+
"description": "Optional repository-relative license file validated during catalog refresh.",
|
|
67
|
+
"type": "string",
|
|
68
|
+
"minLength": 1
|
|
69
|
+
},
|
|
70
|
+
"stripFrontmatter": {
|
|
71
|
+
"description": "Optional upstream frontmatter keys to remove for local harness compatibility.",
|
|
72
|
+
"type": "array",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
76
|
+
},
|
|
77
|
+
"uniqueItems": true
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"required": ["id", "repository", "ref", "skillsPath", "include"]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./schema/skill-sources.schema.json",
|
|
3
|
+
"sources": [
|
|
4
|
+
{
|
|
5
|
+
"id": "emilkowalski-skills",
|
|
6
|
+
"repository": "https://github.com/emilkowalski/skills.git",
|
|
7
|
+
"ref": "main",
|
|
8
|
+
"skillsPath": "skills",
|
|
9
|
+
"include": [
|
|
10
|
+
"animation-vocabulary",
|
|
11
|
+
"apple-design",
|
|
12
|
+
"emil-design-eng",
|
|
13
|
+
"find-animation-opportunities",
|
|
14
|
+
"improve-animations",
|
|
15
|
+
"pick-ui-library",
|
|
16
|
+
"prototype",
|
|
17
|
+
"review-animations"
|
|
18
|
+
],
|
|
19
|
+
"licensePath": "LICENSE",
|
|
20
|
+
"stripFrontmatter": [
|
|
21
|
+
"disable-model-invocation"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "cloudflare-skills",
|
|
26
|
+
"repository": "https://github.com/cloudflare/skills.git",
|
|
27
|
+
"ref": "main",
|
|
28
|
+
"skillsPath": "skills",
|
|
29
|
+
"include": [
|
|
30
|
+
"agents-sdk",
|
|
31
|
+
"cloudflare",
|
|
32
|
+
"cloudflare-email-service",
|
|
33
|
+
"cloudflare-one",
|
|
34
|
+
"cloudflare-one-migrations",
|
|
35
|
+
"durable-objects",
|
|
36
|
+
"sandbox-sdk",
|
|
37
|
+
"turnstile-spin",
|
|
38
|
+
"web-perf",
|
|
39
|
+
"workers-best-practices",
|
|
40
|
+
"wrangler"
|
|
41
|
+
],
|
|
42
|
+
"licensePath": "LICENSE"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "evanbacon-serve-sim",
|
|
46
|
+
"repository": "https://github.com/EvanBacon/serve-sim.git",
|
|
47
|
+
"ref": "main",
|
|
48
|
+
"skillsPath": "skills",
|
|
49
|
+
"include": [
|
|
50
|
+
"serve-sim"
|
|
51
|
+
],
|
|
52
|
+
"licensePath": "LICENSE"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|