@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 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/rules",
34
- commandsPath: ".cursor/commands",
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/rules",
51
- format: "markdown",
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/rules",
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/rules",
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
- instructionsFile: ".gemini/styleguide.md",
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: ".nvaid/skills",
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-compatible tool (catch-all)",
88
- skillsPath: ".nvaid/skills",
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, format) {
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, agent.format);
137
+ return withHeader(substituted);
148
138
  }
149
139
  function skillTarget(projectRoot, agent, skill) {
150
- const ext = agent.format === "mdc" ? "mdc" : "md";
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}.${ext}`);
145
+ return join(projectRoot, agent.commandsPath, "nvaid", `${base}.md`);
158
146
  }
159
- return join(projectRoot, agent.skillsPath, "nvaid-commands", `nvaid-${base}.${ext}`);
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
- const commandsDir = agent.commandsPath ? join(projectRoot, agent.commandsPath, "nvaid") : join(projectRoot, agent.skillsPath, "nvaid-commands");
216
- if (existsSync(commandsDir)) await rm(commandsDir, { recursive: true, force: true });
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.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": {
@@ -84,4 +84,4 @@ context: ""
84
84
 
85
85
  # nvaid version this repo was last generated against. `nvaid validate` compares the
86
86
  # installed CLI version to this and flags drift.
87
- generated_with: "0.2.2"
87
+ generated_with: "0.2.3"