@pratikpsl/agent-skills 0.9.0 → 1.0.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 +59 -99
- package/dist/bin/agent-skills.d.ts.map +1 -1
- package/dist/bin/agent-skills.js +0 -3
- package/dist/bin/agent-skills.js.map +1 -1
- package/dist/cli/index.js +41 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ide-map.d.ts +3 -9
- package/dist/core/ide-map.d.ts.map +1 -1
- package/dist/core/ide-map.js +16 -33
- package/dist/core/ide-map.js.map +1 -1
- package/dist/core/install-template.d.ts +21 -0
- package/dist/core/install-template.d.ts.map +1 -0
- package/dist/core/install-template.js +119 -0
- package/dist/core/install-template.js.map +1 -0
- package/dist/core/resolve-template.d.ts +4 -0
- package/dist/core/resolve-template.d.ts.map +1 -0
- package/dist/core/resolve-template.js +22 -0
- package/dist/core/resolve-template.js.map +1 -0
- package/package.json +2 -2
- package/templates/default/instructions.md +26 -28
- package/templates/dotnet/AgentSkills/agents/architect.agent.md +8 -54
- package/templates/dotnet/AgentSkills/agents/developer.agent.md +8 -83
- package/templates/dotnet/AgentSkills/skills/csharp-xunit/SKILL.md +32 -58
- package/templates/dotnet/AgentSkills/skills/dotnet-best-practices/SKILL.md +62 -153
- package/templates/dotnet/AgentSkills/skills/performance/SKILL.md +18 -0
- package/templates/react/AgentSkills/agents/developer.agent.md +23 -0
- package/templates/react/AgentSkills/skills/performance/SKILL.md +18 -0
- package/templates/react/AgentSkills/skills/react-typescript/SKILL.md +22 -0
- package/templates/react/AgentSkills/skills/testing/SKILL.md +17 -0
- package/templates/shared/AgentSkills/OPERATING.md +15 -0
- package/templates/shared/AgentSkills/agents/architect.agent.md +12 -0
- package/templates/shared/AgentSkills/agents/reviewer.agent.md +26 -0
- package/templates/shared/AgentSkills/skills/security/SKILL.md +18 -0
- package/templates/shared/AgentSkills/skills/standards/SKILL.md +27 -0
- package/templates/shared/entry-points/instructions.md +24 -0
- package/dist/cli/commands/add.d.ts +0 -3
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js +0 -73
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/dotnet-setup.d.ts +0 -5
- package/dist/cli/commands/dotnet-setup.d.ts.map +0 -1
- package/dist/cli/commands/dotnet-setup.js +0 -83
- package/dist/cli/commands/dotnet-setup.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -3
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -36
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/list.d.ts +0 -3
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.js +0 -37
- package/dist/cli/commands/list.js.map +0 -1
- package/dist/cli/commands/setup.d.ts +0 -9
- package/dist/cli/commands/setup.d.ts.map +0 -1
- package/dist/cli/commands/setup.js +0 -77
- package/dist/cli/commands/setup.js.map +0 -1
- package/dist/core/copy-skills.d.ts +0 -30
- package/dist/core/copy-skills.d.ts.map +0 -1
- package/dist/core/copy-skills.js +0 -84
- package/dist/core/copy-skills.js.map +0 -1
- package/dist/core/load-pack.d.ts +0 -15
- package/dist/core/load-pack.d.ts.map +0 -1
- package/dist/core/load-pack.js +0 -35
- package/dist/core/load-pack.js.map +0 -1
- package/dist/core/manifest.d.ts +0 -21
- package/dist/core/manifest.d.ts.map +0 -1
- package/dist/core/manifest.js +0 -170
- package/dist/core/manifest.js.map +0 -1
- package/dist/core/resolve-pack.d.ts +0 -7
- package/dist/core/resolve-pack.d.ts.map +0 -1
- package/dist/core/resolve-pack.js +0 -59
- package/dist/core/resolve-pack.js.map +0 -1
- package/templates/dotnet/AgentSkills/OPERATING.md +0 -85
- package/templates/dotnet/AgentSkills/README.md +0 -64
- package/templates/dotnet/AgentSkills/agents/README.md +0 -16
- package/templates/dotnet/AgentSkills/entry-points/entry-point.md +0 -49
- package/templates/dotnet/AgentSkills/memory/index.md +0 -22
- package/templates/dotnet/AgentSkills/memory/lessons/api.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/auth.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/csharp.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/db.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/design.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/infra.md +0 -8
- package/templates/dotnet/AgentSkills/memory/lessons/mcp.md +0 -3
- package/templates/dotnet/AgentSkills/memory/lessons/testing.md +0 -3
- package/templates/dotnet/AgentSkills/memory/schema.md +0 -26
- package/templates/dotnet/AgentSkills/skills/INDEX.md +0 -21
- package/templates/dotnet/AgentSkills/skills/README.md +0 -14
- package/templates/dotnet/AgentSkills/skills/code-standards/SKILL.md +0 -122
- package/templates/dotnet/AgentSkills/skills/core/SKILL.md +0 -83
- package/templates/dotnet/AgentSkills/skills/design/SKILL.md +0 -108
- package/templates/dotnet/AgentSkills/skills/harness/SKILL.md +0 -62
- package/templates/dotnet/AgentSkills/skills/mcp_dotnet/SKILL.md +0 -54
- package/templates/shared/manifest.json +0 -57
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @pratikpsl/agent-skills
|
|
2
2
|
|
|
3
|
-
> Scaffold and manage AI agent skills across any project —
|
|
3
|
+
> Scaffold and manage AI agent skills across any project — for Cursor, Claude, Codex, Copilot, Antigravity, Windsurf, and Cline.
|
|
4
4
|
|
|
5
|
-
`@pratikpsl/agent-skills` is a single npm package: a TypeScript CLI plus bundled
|
|
5
|
+
`@pratikpsl/agent-skills` is a single npm package: a TypeScript CLI plus bundled templates under `templates/`. No runtime network fetch — templates ship inside the package, so setup works offline after install.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -18,7 +18,7 @@ Running with **no arguments** automatically scaffolds universal single-file agen
|
|
|
18
18
|
# Installs instructions across all IDEs with cross-OS hardlinks by default
|
|
19
19
|
npx @pratikpsl/agent-skills
|
|
20
20
|
|
|
21
|
-
# Or install for a specific IDE directly
|
|
21
|
+
# Or install for a specific IDE / Agent directly
|
|
22
22
|
npx @pratikpsl/agent-skills cursor # → .cursor/rules/instructions.md
|
|
23
23
|
npx @pratikpsl/agent-skills claude # → CLAUDE.md
|
|
24
24
|
npx @pratikpsl/agent-skills codex # → AGENTS.md
|
|
@@ -28,147 +28,107 @@ npx @pratikpsl/agent-skills windsurf # → .windsurfrules
|
|
|
28
28
|
npx @pratikpsl/agent-skills cline # → .clinerules
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
### .NET / C# (Modular Skills Pack)
|
|
31
|
+
### .NET / C# Template
|
|
34
32
|
|
|
35
33
|
```bash
|
|
36
|
-
# Install
|
|
37
|
-
npx @pratikpsl/agent-skills dotnet
|
|
38
|
-
|
|
39
|
-
#
|
|
40
|
-
npx @pratikpsl/agent-skills dotnet
|
|
41
|
-
npx @pratikpsl/agent-skills dotnet
|
|
42
|
-
npx @pratikpsl/agent-skills dotnet-setup codex # → AGENTS.md
|
|
43
|
-
npx @pratikpsl/agent-skills dotnet-setup copilot # → .github/copilot-instructions.md
|
|
44
|
-
npx @pratikpsl/agent-skills dotnet-setup antigravity # → .agents/GEMINI.md
|
|
34
|
+
# Install .NET agent skills + all IDE entry points
|
|
35
|
+
npx @pratikpsl/agent-skills dotnet
|
|
36
|
+
|
|
37
|
+
# Install .NET agent skills + specific agent entry point only
|
|
38
|
+
npx @pratikpsl/agent-skills dotnet --agent codex
|
|
39
|
+
npx @pratikpsl/agent-skills dotnet --agent cursor
|
|
45
40
|
```
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
### React / TypeScript Template
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Install React agent skills + all IDE entry points
|
|
46
|
+
npx @pratikpsl/agent-skills react
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
# Install React agent skills + specific agent entry point only
|
|
49
|
+
npx @pratikpsl/agent-skills react --agent cursor
|
|
50
|
+
npx @pratikpsl/agent-skills react --agent claude
|
|
51
|
+
```
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
| --- | --- |
|
|
53
|
-
| `npx @pratikpsl/agent-skills [ide]` | **Default**: Scaffold single-file instructions with cross-OS hardlinks |
|
|
54
|
-
| `npx @pratikpsl/agent-skills setup [ide]` | Explicit alias for instructions setup |
|
|
55
|
-
| `npx @pratikpsl/agent-skills dotnet-setup [ide]` | Convenience installer for the .NET pack |
|
|
56
|
-
| `npx @pratikpsl/agent-skills init` | Scaffold an empty `AgentSkills/` folder and `index.json` |
|
|
57
|
-
| `npx @pratikpsl/agent-skills list` | List skills in known packs (`default`, `dotnet`) |
|
|
58
|
-
| `npx @pratikpsl/agent-skills list <pack>` | List skills in a specific pack (`default`, `dotnet`, etc.) |
|
|
59
|
-
| `npx @pratikpsl/agent-skills add <pack> <skill>` | Copy one skill into the project |
|
|
60
|
-
| `npx @pratikpsl/agent-skills add <pack> --all` | Copy all skills from a pack |
|
|
61
|
-
| `npx @pratikpsl/agent-skills --help` | Show CLI help |
|
|
62
|
-
| `npx @pratikpsl/agent-skills --version` | Show CLI version |
|
|
53
|
+
*(You can also use `bunx @pratikpsl/agent-skills` in Bun environments).*
|
|
63
54
|
|
|
64
|
-
|
|
55
|
+
---
|
|
65
56
|
|
|
66
|
-
|
|
57
|
+
## CLI Options
|
|
67
58
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
```
|
|
60
|
+
Usage: agent-skills [options] [template]
|
|
61
|
+
|
|
62
|
+
Arguments:
|
|
63
|
+
template Template: default, dotnet, react; agent names install default guidance
|
|
64
|
+
|
|
65
|
+
Options:
|
|
66
|
+
-V, --version output the version number
|
|
67
|
+
--agent <name> Install one agent entry point: antigravity, claude, cline, codex, copilot, cursor, windsurf
|
|
68
|
+
--force Overwrite installed files (default: false)
|
|
69
|
+
--no-hardlink Copy agent entry points instead of hardlinking
|
|
70
|
+
--path <dir> Target project root (default: current working directory)
|
|
71
|
+
-h, --help display help for command
|
|
72
|
+
```
|
|
71
73
|
|
|
72
74
|
---
|
|
73
75
|
|
|
74
|
-
##
|
|
76
|
+
## Bundled Templates
|
|
75
77
|
|
|
76
|
-
|
|
|
78
|
+
| Template | Path | Description |
|
|
77
79
|
| --- | --- | --- |
|
|
78
|
-
| `default` | `templates/default/` | Universal single-file agent instructions, cross-OS hardlinked
|
|
79
|
-
| `dotnet` | `templates/dotnet/` | .NET/C# skills, agents, memory
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- Default pack: `default`, `instructions`, `single-file`, `core`, `standard`, `universal`, `base`, `@pratikpsl/agent-skills`
|
|
83
|
-
- .NET pack: `dotnet`, `skills-dotnet`, `@pratikpsl/agent-skills-dotnet`
|
|
84
|
-
|
|
85
|
-
The repo also contains a `Skills/` tree of additional drafts and a `plugins/` folder. Those are **not** part of the published npm tarball (see `.npmignore` and the `files` whitelist in `package.json`).
|
|
80
|
+
| `default` | `templates/default/` | Universal single-file agent instructions, cross-OS hardlinked |
|
|
81
|
+
| `dotnet` | `templates/dotnet/` | .NET/C# skills, architecture & developer agents, memory |
|
|
82
|
+
| `react` | `templates/react/` | React & TypeScript skills, frontend testing, developer agent |
|
|
83
|
+
| `shared` | `templates/shared/` | Base operating contract, core skills (standards, security), review agents |
|
|
86
84
|
|
|
87
85
|
---
|
|
88
86
|
|
|
89
|
-
## Repository
|
|
87
|
+
## Repository Layout
|
|
90
88
|
|
|
91
89
|
```
|
|
92
90
|
coding-skills-ai/
|
|
93
91
|
├── src/
|
|
94
92
|
│ ├── bin/agent-skills.ts # CLI binary entry
|
|
95
|
-
│ ├── cli/
|
|
96
|
-
│
|
|
97
|
-
│
|
|
93
|
+
│ ├── cli/index.ts # Commander CLI program
|
|
94
|
+
│ └── core/
|
|
95
|
+
│ ├── ide-map.ts # IDE entry point definitions and parser
|
|
96
|
+
│ ├── install-template.ts # Installation & merging engine
|
|
97
|
+
│ └── resolve-template.ts # Bundled template resolver
|
|
98
98
|
├── templates/
|
|
99
|
-
│ ├── default/ #
|
|
100
|
-
│ ├── dotnet/ #
|
|
101
|
-
│
|
|
102
|
-
|
|
103
|
-
├──
|
|
104
|
-
├──
|
|
105
|
-
├── .github/workflows/ # CI + npm publish on version tags
|
|
106
|
-
├── bun.lock # reproducible lockfile
|
|
99
|
+
│ ├── default/ # Single-file instructions
|
|
100
|
+
│ ├── dotnet/ # .NET template
|
|
101
|
+
│ ├── react/ # React template
|
|
102
|
+
│ └── shared/ # Shared operating contract & memory
|
|
103
|
+
├── tests/ # Vitest test suite
|
|
104
|
+
├── bun.lock # Reproducible lockfile
|
|
107
105
|
├── package.json
|
|
108
|
-
├── tsconfig.json
|
|
106
|
+
├── tsconfig.json
|
|
109
107
|
├── vitest.config.ts
|
|
110
|
-
├── SECURITY.md
|
|
108
|
+
├── SECURITY.md
|
|
111
109
|
├── LICENSE # Apache-2.0
|
|
112
110
|
└── README.md
|
|
113
111
|
```
|
|
114
112
|
|
|
115
|
-
Build output: `tsc` compiles `src/` → `dist/`. The published binary is `dist/bin/agent-skills.js`. Pack templates stay at package-root `templates/` (included via `files`).
|
|
116
|
-
|
|
117
113
|
---
|
|
118
114
|
|
|
119
|
-
## Local
|
|
115
|
+
## Local Development
|
|
120
116
|
|
|
121
117
|
```bash
|
|
122
118
|
bun install
|
|
123
119
|
bun run build
|
|
124
120
|
bun test
|
|
125
|
-
|
|
126
|
-
# Optional: try the CLI globally from this checkout
|
|
127
|
-
bun link
|
|
128
|
-
agent-skills --help
|
|
129
|
-
agent-skills list dotnet
|
|
130
121
|
```
|
|
131
122
|
|
|
132
|
-
Useful scripts:
|
|
133
|
-
|
|
134
|
-
| Script | What it does |
|
|
135
|
-
| --- | --- |
|
|
136
|
-
| `bun run build` | `tsc` → `dist/` |
|
|
137
|
-
| `bun test` | Vitest (`tests/**/*.test.ts`) |
|
|
138
|
-
| `bun run test:watch` | Vitest watch mode |
|
|
139
|
-
| `bun run dry-run` | Build + `npm publish --dry-run` |
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Publish checklist (maintainers)
|
|
144
|
-
|
|
145
|
-
1. Ensure `main` is green (CI: Bun — build + test).
|
|
146
|
-
2. Confirm version in `package.json` (and `templates/shared/manifest.json`).
|
|
147
|
-
3. Verify the tarball includes templates and compiled `dist/`:
|
|
148
|
-
```bash
|
|
149
|
-
bun run build
|
|
150
|
-
bun pm pack --dry-run
|
|
151
|
-
# Expect: dist/** and templates/** (not Skills/ or src/)
|
|
152
|
-
```
|
|
153
|
-
4. Publish:
|
|
154
|
-
- **Trusted Publisher (preferred):** push an annotated tag matching `package.json`, e.g. `v0.9.0`. Workflow `.github/workflows/publish.yml` runs tests and `npm publish --provenance`.
|
|
155
|
-
- **Manual:**
|
|
156
|
-
```bash
|
|
157
|
-
npm login
|
|
158
|
-
bun run build && bun test
|
|
159
|
-
npm publish --access public --otp=YOUR_6_DIGIT_OTP
|
|
160
|
-
```
|
|
161
|
-
5. Confirm on npm: https://www.npmjs.com/package/@pratikpsl/agent-skills
|
|
162
|
-
6. Smoke-test: `npx @pratikpsl/agent-skills@0.9.0 --version` and `dotnet-setup` in a throwaway folder.
|
|
163
|
-
|
|
164
123
|
---
|
|
165
124
|
|
|
166
125
|
## Security
|
|
167
126
|
|
|
168
|
-
Please see [`SECURITY.md`](./SECURITY.md) for our security policy
|
|
127
|
+
Please see [`SECURITY.md`](./SECURITY.md) for our security policy and reporting procedures.
|
|
169
128
|
|
|
170
129
|
---
|
|
171
130
|
|
|
172
131
|
## License
|
|
173
132
|
|
|
174
133
|
Apache License 2.0 — see [`LICENSE`](./LICENSE).
|
|
134
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../src/bin/agent-skills.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../src/bin/agent-skills.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC"}
|
package/dist/bin/agent-skills.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../src/bin/agent-skills.ts"],"names":[],"mappings":";AACA,
|
|
1
|
+
{"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../src/bin/agent-skills.ts"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,43 +1,51 @@
|
|
|
1
|
-
// src/cli/index.ts
|
|
2
|
-
// Wires up the root `commander` program and registers all sub-commands.
|
|
3
|
-
// This file is the only place that imports commander; sub-commands receive
|
|
4
|
-
// the program instance so they stay independently testable.
|
|
5
1
|
import { Command } from "commander";
|
|
6
2
|
import { createRequire } from "module";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { dotnetSetupCommand } from "./commands/dotnet-setup.js";
|
|
11
|
-
import { setupCommand, runSetup } from "./commands/setup.js";
|
|
12
|
-
import { VALID_IDE_NAMES } from "../core/ide-map.js";
|
|
13
|
-
// Read version from our own package.json without a JSON import assertion
|
|
14
|
-
// (works in Node 18 without the --experimental-json-modules flag).
|
|
3
|
+
import { installDefaultTemplate, installTemplate } from "../core/install-template.js";
|
|
4
|
+
import { AGENT_NAMES, parseAgentName } from "../core/ide-map.js";
|
|
5
|
+
import { resolveSharedTemplate, resolveTemplate, TEMPLATE_NAMES } from "../core/resolve-template.js";
|
|
15
6
|
const require = createRequire(import.meta.url);
|
|
16
7
|
const { version } = require("../../package.json");
|
|
8
|
+
function runInstall(template, options) {
|
|
9
|
+
const isAgent = template && AGENT_NAMES.includes(template.toLowerCase());
|
|
10
|
+
const implicitAgent = isAgent ? parseAgentName(template) : undefined;
|
|
11
|
+
if (implicitAgent && options.agent) {
|
|
12
|
+
throw new Error("Choose an agent with either the argument or --agent, not both.");
|
|
13
|
+
}
|
|
14
|
+
const selectedTemplate = implicitAgent ? "default" : template ?? "default";
|
|
15
|
+
const agent = implicitAgent ?? parseAgentName(options.agent);
|
|
16
|
+
const targetDir = options.path;
|
|
17
|
+
const hardlink = options.hardlink ?? true;
|
|
18
|
+
const result = selectedTemplate === "default"
|
|
19
|
+
? installDefaultTemplate(resolveTemplate(selectedTemplate), {
|
|
20
|
+
agent,
|
|
21
|
+
force: options.force,
|
|
22
|
+
hardlink,
|
|
23
|
+
targetDir,
|
|
24
|
+
})
|
|
25
|
+
: installTemplate({
|
|
26
|
+
agent,
|
|
27
|
+
force: options.force,
|
|
28
|
+
hardlink,
|
|
29
|
+
sharedDir: resolveSharedTemplate(),
|
|
30
|
+
targetDir,
|
|
31
|
+
templateDir: resolveTemplate(selectedTemplate),
|
|
32
|
+
});
|
|
33
|
+
console.log(`Installed ${selectedTemplate}: ${result.written.length} written, ${result.skipped.length} skipped.`);
|
|
34
|
+
}
|
|
17
35
|
const program = new Command();
|
|
18
36
|
program
|
|
19
37
|
.name("agent-skills")
|
|
20
|
-
.description("
|
|
38
|
+
.description("Install shared coding-agent guidance and a framework template")
|
|
21
39
|
.version(version)
|
|
22
|
-
.argument("[
|
|
23
|
-
.option("--
|
|
24
|
-
.option("--
|
|
25
|
-
.option("--
|
|
26
|
-
.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
});
|
|
33
|
-
setupCommand(program);
|
|
34
|
-
dotnetSetupCommand(program);
|
|
35
|
-
initCommand(program);
|
|
36
|
-
listCommand(program);
|
|
37
|
-
addCommand(program);
|
|
38
|
-
program.parseAsync(process.argv).catch((err) => {
|
|
39
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
40
|
-
console.error(`\n✗ ${message}`);
|
|
41
|
-
process.exit(1);
|
|
40
|
+
.argument("[template]", `Template: ${TEMPLATE_NAMES.join(", ")}; agent names install default guidance`)
|
|
41
|
+
.option("--agent <name>", `Install one agent entry point: ${AGENT_NAMES.join(", ")}`)
|
|
42
|
+
.option("--force", "Overwrite installed files", false)
|
|
43
|
+
.option("--no-hardlink", "Copy agent entry points instead of hardlinking")
|
|
44
|
+
.option("--path <dir>", "Target project root", process.cwd())
|
|
45
|
+
.action((template, options) => runInstall(template, options));
|
|
46
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
47
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
48
|
+
console.error(`Error: ${message}`);
|
|
49
|
+
process.exitCode = 1;
|
|
42
50
|
});
|
|
43
51
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ide-map.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
3
|
-
export declare
|
|
4
|
-
export declare const ENTRY_POINT_PREFIX = "entry-point:";
|
|
5
|
-
/**
|
|
6
|
-
* Filters skills for a given IDE (or all IDEs when undefined).
|
|
7
|
-
* Deduplicates multiple skills targeting the same destination.
|
|
8
|
-
*/
|
|
9
|
-
export declare function filterSkillsForIde(skills: SkillEntry[], ide?: string): SkillEntry[];
|
|
1
|
+
export declare const IDE_ENTRY_POINTS: Record<string, string>;
|
|
2
|
+
export declare const AGENT_NAMES: string[];
|
|
3
|
+
export declare function parseAgentName(value?: string): string | undefined;
|
|
10
4
|
//# sourceMappingURL=ide-map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-map.d.ts","sourceRoot":"","sources":["../../src/core/ide-map.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ide-map.d.ts","sourceRoot":"","sources":["../../src/core/ide-map.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQnD,CAAC;AAEF,eAAO,MAAM,WAAW,UAAgC,CAAC;AAEzD,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjE"}
|
package/dist/core/ide-map.js
CHANGED
|
@@ -1,36 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
windsurf: "entry-point:windsurf",
|
|
10
|
-
cline: "entry-point:cline",
|
|
1
|
+
export const IDE_ENTRY_POINTS = {
|
|
2
|
+
antigravity: ".agents/GEMINI.md",
|
|
3
|
+
claude: "CLAUDE.md",
|
|
4
|
+
cline: ".clinerules",
|
|
5
|
+
codex: "AGENTS.md",
|
|
6
|
+
copilot: ".github/copilot-instructions.md",
|
|
7
|
+
cursor: ".cursor/rules/instructions.md",
|
|
8
|
+
windsurf: ".windsurfrules",
|
|
11
9
|
};
|
|
12
|
-
export const
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const seen = new Set();
|
|
21
|
-
return skills.filter((s) => {
|
|
22
|
-
const dest = s.dest ?? s.path;
|
|
23
|
-
if (seen.has(dest))
|
|
24
|
-
return false;
|
|
25
|
-
seen.add(dest);
|
|
26
|
-
return true;
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
const targetSkillName = IDE_ENTRY_POINT_MAP[ide.toLowerCase()];
|
|
30
|
-
if (!targetSkillName) {
|
|
31
|
-
throw new Error(`Unknown IDE "${ide}". Valid options are: ${VALID_IDE_NAMES}`);
|
|
32
|
-
}
|
|
33
|
-
return skills.filter((s) => (!s.name.startsWith(ENTRY_POINT_PREFIX) && s.name !== "instructions") ||
|
|
34
|
-
s.name === targetSkillName);
|
|
10
|
+
export const AGENT_NAMES = Object.keys(IDE_ENTRY_POINTS);
|
|
11
|
+
export function parseAgentName(value) {
|
|
12
|
+
if (!value)
|
|
13
|
+
return undefined;
|
|
14
|
+
const agent = value.toLowerCase();
|
|
15
|
+
if (agent in IDE_ENTRY_POINTS)
|
|
16
|
+
return agent;
|
|
17
|
+
throw new Error(`Unknown agent "${value}". Choose: ${AGENT_NAMES.join(", ")}.`);
|
|
35
18
|
}
|
|
36
19
|
//# sourceMappingURL=ide-map.js.map
|
package/dist/core/ide-map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-map.js","sourceRoot":"","sources":["../../src/core/ide-map.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"ide-map.js","sourceRoot":"","sources":["../../src/core/ide-map.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,+BAA+B;IACvC,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAEzD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,IAAI,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,cAAc,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface InstallResult {
|
|
2
|
+
written: string[];
|
|
3
|
+
skipped: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface InstallOptions {
|
|
6
|
+
agent?: string;
|
|
7
|
+
force: boolean;
|
|
8
|
+
hardlink: boolean;
|
|
9
|
+
targetDir: string;
|
|
10
|
+
sharedDir: string;
|
|
11
|
+
templateDir: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InstallDefaultOptions {
|
|
14
|
+
agent?: string;
|
|
15
|
+
force: boolean;
|
|
16
|
+
hardlink: boolean;
|
|
17
|
+
targetDir: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function installTemplate(options: InstallOptions): InstallResult;
|
|
20
|
+
export declare function installDefaultTemplate(sourceDir: string, options: InstallDefaultOptions): InstallResult;
|
|
21
|
+
//# sourceMappingURL=install-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-template.d.ts","sourceRoot":"","sources":["../../src/core/install-template.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAkID,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAiBtE;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,GAC7B,aAAa,CAUf"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, linkSync, mkdirSync, readdirSync, rmSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { IDE_ENTRY_POINTS } from "./ide-map.js";
|
|
4
|
+
function relativePath(targetDir, filePath) {
|
|
5
|
+
return path.relative(targetDir, filePath).replaceAll("\\", "/");
|
|
6
|
+
}
|
|
7
|
+
function collectExistingFiles(dir) {
|
|
8
|
+
const files = new Set();
|
|
9
|
+
if (!existsSync(dir))
|
|
10
|
+
return files;
|
|
11
|
+
function walk(current) {
|
|
12
|
+
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
13
|
+
const full = path.join(current, entry.name);
|
|
14
|
+
if (entry.isDirectory()) {
|
|
15
|
+
walk(full);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
files.add(full);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
walk(dir);
|
|
23
|
+
return files;
|
|
24
|
+
}
|
|
25
|
+
function copyFile(source, destination, force, existingBeforeInstall) {
|
|
26
|
+
if (existingBeforeInstall.has(destination) && !force) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (existsSync(destination)) {
|
|
30
|
+
rmSync(destination, { force: true, recursive: true });
|
|
31
|
+
}
|
|
32
|
+
mkdirSync(path.dirname(destination), { recursive: true });
|
|
33
|
+
copyFileSync(source, destination);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
function mergeDirectory(sourceDir, targetDir, projectDir, force, existingBeforeInstall, result) {
|
|
37
|
+
if (!existsSync(sourceDir))
|
|
38
|
+
return;
|
|
39
|
+
mkdirSync(targetDir, { recursive: true });
|
|
40
|
+
for (const entry of readdirSync(sourceDir, { withFileTypes: true })) {
|
|
41
|
+
const source = path.join(sourceDir, entry.name);
|
|
42
|
+
const target = path.join(targetDir, entry.name);
|
|
43
|
+
if (entry.isDirectory()) {
|
|
44
|
+
mergeDirectory(source, target, projectDir, force, existingBeforeInstall, result);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const rel = relativePath(projectDir, target);
|
|
48
|
+
if (copyFile(source, target, force, existingBeforeInstall)) {
|
|
49
|
+
if (!result.written.includes(rel)) {
|
|
50
|
+
result.written.push(rel);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
if (!result.skipped.includes(rel)) {
|
|
55
|
+
result.skipped.push(rel);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function selectedEntryPoints(agent) {
|
|
62
|
+
return agent ? [IDE_ENTRY_POINTS[agent]] : Object.values(IDE_ENTRY_POINTS);
|
|
63
|
+
}
|
|
64
|
+
function linkOrCopy(source, target, primary, options, existingBeforeInstall) {
|
|
65
|
+
if (existingBeforeInstall.has(target) && !options.force) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (existsSync(target)) {
|
|
69
|
+
rmSync(target, { force: true, recursive: true });
|
|
70
|
+
}
|
|
71
|
+
mkdirSync(path.dirname(target), { recursive: true });
|
|
72
|
+
if (options.hardlink && primary) {
|
|
73
|
+
try {
|
|
74
|
+
linkSync(primary, target);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Non-hardlink-compatible filesystems use copy fallback
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
copyFileSync(source, target);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
function installEntryPoints(source, options, existingBeforeInstall, result) {
|
|
85
|
+
let primary;
|
|
86
|
+
for (const destination of selectedEntryPoints(options.agent)) {
|
|
87
|
+
const target = path.join(options.targetDir, destination);
|
|
88
|
+
const rel = relativePath(options.targetDir, target);
|
|
89
|
+
if (linkOrCopy(source, target, primary, options, existingBeforeInstall)) {
|
|
90
|
+
primary ??= target;
|
|
91
|
+
if (!result.written.includes(rel)) {
|
|
92
|
+
result.written.push(rel);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
if (!result.skipped.includes(rel)) {
|
|
97
|
+
result.skipped.push(rel);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function installTemplate(options) {
|
|
103
|
+
const result = { written: [], skipped: [] };
|
|
104
|
+
const existing = collectExistingFiles(options.targetDir);
|
|
105
|
+
const sharedSkills = path.join(options.sharedDir, "AgentSkills");
|
|
106
|
+
const templateSkills = path.join(options.templateDir, "AgentSkills");
|
|
107
|
+
const targetSkills = path.join(options.targetDir, "AgentSkills");
|
|
108
|
+
mergeDirectory(sharedSkills, targetSkills, options.targetDir, options.force, existing, result);
|
|
109
|
+
mergeDirectory(templateSkills, targetSkills, options.targetDir, options.force, existing, result);
|
|
110
|
+
installEntryPoints(path.join(options.sharedDir, "entry-points", "instructions.md"), options, existing, result);
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
export function installDefaultTemplate(sourceDir, options) {
|
|
114
|
+
const result = { written: [], skipped: [] };
|
|
115
|
+
const existing = collectExistingFiles(options.targetDir);
|
|
116
|
+
installEntryPoints(path.join(sourceDir, "instructions.md"), options, existing, result);
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=install-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-template.js","sourceRoot":"","sources":["../../src/core/install-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-template.d.ts","sourceRoot":"","sources":["../../src/core/resolve-template.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,UAAiC,CAAC;AAM7D,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWpD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
export const TEMPLATE_NAMES = ["default", "dotnet", "react"];
|
|
6
|
+
function templatesRoot() {
|
|
7
|
+
return path.resolve(__dirname, "..", "..", "templates");
|
|
8
|
+
}
|
|
9
|
+
export function resolveSharedTemplate() {
|
|
10
|
+
return path.join(templatesRoot(), "shared");
|
|
11
|
+
}
|
|
12
|
+
export function resolveTemplate(name) {
|
|
13
|
+
if (!TEMPLATE_NAMES.includes(name)) {
|
|
14
|
+
throw new Error(`Unknown template "${name}". Choose: ${TEMPLATE_NAMES.join(", ")}.`);
|
|
15
|
+
}
|
|
16
|
+
const templateDir = path.join(templatesRoot(), name);
|
|
17
|
+
if (!existsSync(templateDir)) {
|
|
18
|
+
throw new Error(`Template "${name}" is not bundled with this package.`);
|
|
19
|
+
}
|
|
20
|
+
return templateDir;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=resolve-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-template.js","sourceRoot":"","sources":["../../src/core/resolve-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE7D,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,qCAAqC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|