@novare-technologies/nvaid 0.2.2 → 0.2.3
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/dist/cli.js +34 -35
- package/package.json +1 -1
- package/templates/nvaid/config.yml +1 -1
package/dist/cli.js
CHANGED
|
@@ -16,7 +16,6 @@ var AGENTS = [
|
|
|
16
16
|
commandsPath: ".claude/commands",
|
|
17
17
|
// /nvaid:install resolves from .claude/commands/nvaid/install.md
|
|
18
18
|
instructionsFile: "CLAUDE.md",
|
|
19
|
-
format: "markdown",
|
|
20
19
|
bespoke: true
|
|
21
20
|
},
|
|
22
21
|
{
|
|
@@ -24,70 +23,65 @@ var AGENTS = [
|
|
|
24
23
|
label: "Kiro",
|
|
25
24
|
skillsPath: ".kiro/skills",
|
|
26
25
|
instructionsFile: ".kiro/steering/nvaid.md",
|
|
27
|
-
format: "markdown",
|
|
28
26
|
bespoke: true
|
|
29
27
|
},
|
|
30
28
|
{
|
|
31
29
|
id: "cursor",
|
|
32
30
|
label: "Cursor",
|
|
33
|
-
skillsPath: ".cursor/
|
|
34
|
-
|
|
35
|
-
// Cursor reads custom commands from .cursor/commands
|
|
36
|
-
format: "mdc",
|
|
31
|
+
skillsPath: ".cursor/skills",
|
|
32
|
+
// cursor.com/docs/skills
|
|
37
33
|
bespoke: true
|
|
38
34
|
},
|
|
39
35
|
{
|
|
40
36
|
id: "copilot",
|
|
41
37
|
label: "GitHub Copilot",
|
|
42
|
-
skillsPath: ".github",
|
|
38
|
+
skillsPath: ".github/skills",
|
|
39
|
+
// docs.github.com — project skills in .github/skills
|
|
43
40
|
instructionsFile: ".github/copilot-instructions.md",
|
|
44
|
-
format: "markdown",
|
|
45
41
|
bespoke: true
|
|
46
42
|
},
|
|
47
43
|
{
|
|
48
44
|
id: "windsurf",
|
|
49
45
|
label: "Windsurf",
|
|
50
|
-
skillsPath: ".windsurf/
|
|
51
|
-
|
|
46
|
+
skillsPath: ".windsurf/skills",
|
|
47
|
+
// docs.windsurf.com/windsurf/cascade/skills
|
|
52
48
|
bespoke: true
|
|
53
49
|
},
|
|
54
50
|
{
|
|
55
51
|
id: "amazonq",
|
|
56
52
|
label: "Amazon Q",
|
|
57
|
-
skillsPath: ".amazonq/
|
|
58
|
-
format: "markdown",
|
|
53
|
+
skillsPath: ".amazonq/skills",
|
|
59
54
|
bespoke: true
|
|
60
55
|
},
|
|
61
56
|
{
|
|
62
57
|
id: "cline",
|
|
63
58
|
label: "Cline",
|
|
64
|
-
skillsPath: ".cline/
|
|
59
|
+
skillsPath: ".cline/skills",
|
|
60
|
+
// docs.cline.bot/customization/skills
|
|
65
61
|
instructionsFile: ".clinerules",
|
|
66
|
-
format: "markdown",
|
|
67
62
|
bespoke: true
|
|
68
63
|
},
|
|
69
64
|
{
|
|
70
65
|
id: "gemini",
|
|
71
66
|
label: "Gemini Code Assist",
|
|
72
|
-
skillsPath: ".gemini",
|
|
73
|
-
|
|
74
|
-
format: "markdown",
|
|
67
|
+
skillsPath: ".gemini/skills",
|
|
68
|
+
// geminicli.com/docs/cli/skills
|
|
75
69
|
bespoke: true
|
|
76
70
|
},
|
|
77
71
|
{
|
|
78
72
|
id: "aider",
|
|
79
73
|
label: "Aider",
|
|
80
|
-
skillsPath: ".
|
|
74
|
+
skillsPath: ".agents/skills",
|
|
75
|
+
// neutral cross-tool skills location
|
|
81
76
|
instructionsFile: "AGENTS.md",
|
|
82
|
-
format: "markdown",
|
|
83
77
|
bespoke: true
|
|
84
78
|
},
|
|
85
79
|
{
|
|
86
80
|
id: "agents-md",
|
|
87
|
-
label: "Any AGENTS.md
|
|
88
|
-
skillsPath: ".
|
|
81
|
+
label: "Any Agent-Skills / AGENTS.md tool (catch-all)",
|
|
82
|
+
skillsPath: ".agents/skills",
|
|
83
|
+
// the emerging neutral standard (per GitHub Copilot docs)
|
|
89
84
|
instructionsFile: "AGENTS.md",
|
|
90
|
-
format: "markdown",
|
|
91
85
|
bespoke: false
|
|
92
86
|
}
|
|
93
87
|
];
|
|
@@ -124,11 +118,7 @@ function aidlcRootFor(agent) {
|
|
|
124
118
|
void agent;
|
|
125
119
|
return "nvaid/rules";
|
|
126
120
|
}
|
|
127
|
-
function withHeader(body
|
|
128
|
-
if (format === "mdc") {
|
|
129
|
-
return `${DO_NOT_EDIT}
|
|
130
|
-
${body}`;
|
|
131
|
-
}
|
|
121
|
+
function withHeader(body) {
|
|
132
122
|
return `${DO_NOT_EDIT}
|
|
133
123
|
|
|
134
124
|
${body}`;
|
|
@@ -144,19 +134,17 @@ async function listCommandFiles() {
|
|
|
144
134
|
async function renderTemplate(srcFile, agent) {
|
|
145
135
|
const raw = await readFile(srcFile, "utf8");
|
|
146
136
|
const substituted = raw.split(AIDLC_ROOT_TOKEN).join(aidlcRootFor(agent));
|
|
147
|
-
return withHeader(substituted
|
|
137
|
+
return withHeader(substituted);
|
|
148
138
|
}
|
|
149
139
|
function skillTarget(projectRoot, agent, skill) {
|
|
150
|
-
|
|
151
|
-
return join(projectRoot, agent.skillsPath, `${skill}.${ext}`);
|
|
140
|
+
return join(projectRoot, agent.skillsPath, skill, "SKILL.md");
|
|
152
141
|
}
|
|
153
142
|
function commandTarget(projectRoot, agent, cmdFile) {
|
|
154
143
|
const base = cmdFile.replace(/\.md$/, "");
|
|
155
|
-
const ext = agent.format === "mdc" ? "mdc" : "md";
|
|
156
144
|
if (agent.commandsPath) {
|
|
157
|
-
return join(projectRoot, agent.commandsPath, "nvaid", `${base}
|
|
145
|
+
return join(projectRoot, agent.commandsPath, "nvaid", `${base}.md`);
|
|
158
146
|
}
|
|
159
|
-
return join(projectRoot, agent.skillsPath,
|
|
147
|
+
return join(projectRoot, agent.skillsPath, `nvaid-${base}`, "SKILL.md");
|
|
160
148
|
}
|
|
161
149
|
async function writeFileEnsuringDir(path, body, force, result) {
|
|
162
150
|
if (!force && existsSync(path)) {
|
|
@@ -211,11 +199,22 @@ async function diffAgentFiles(opts) {
|
|
|
211
199
|
return drift;
|
|
212
200
|
}
|
|
213
201
|
async function cleanAgentDirs(projectRoot, agents) {
|
|
202
|
+
const skills = await listSkillDirs().catch(() => []);
|
|
214
203
|
for (const agent of agents) {
|
|
215
|
-
|
|
216
|
-
|
|
204
|
+
if (agent.commandsPath) {
|
|
205
|
+
await rmIfExists(join(projectRoot, agent.commandsPath, "nvaid"));
|
|
206
|
+
}
|
|
207
|
+
await rmIfExists(join(projectRoot, agent.skillsPath, "commands"));
|
|
208
|
+
await rmIfExists(join(projectRoot, agent.skillsPath, "nvaid-commands"));
|
|
209
|
+
for (const skill of skills) {
|
|
210
|
+
await rmIfExists(join(projectRoot, agent.skillsPath, `${skill}.md`));
|
|
211
|
+
await rmIfExists(join(projectRoot, agent.skillsPath, `${skill}.mdc`));
|
|
212
|
+
}
|
|
217
213
|
}
|
|
218
214
|
}
|
|
215
|
+
async function rmIfExists(path) {
|
|
216
|
+
if (existsSync(path)) await rm(path, { recursive: true, force: true });
|
|
217
|
+
}
|
|
219
218
|
|
|
220
219
|
// src/scaffold.ts
|
|
221
220
|
import { cp, mkdir as mkdir2, readdir as readdir2 } from "fs/promises";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@novare-technologies/nvaid",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "nvaid — one CLI that installs an AI-DLC skills-and-workflow toolkit into any coding agent, and houses intents, config, and the design-code dictionary in a single nvaid/ folder.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|