@a16njs/plugin-cursor 0.2.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,eAAe,EAQrB,MAAM,gBAAgB,CAAC;AAiQxB;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA+BrE"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,eAAe,EAQrB,MAAM,gBAAgB,CAAC;AAybxB;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoCrE"}
package/dist/discover.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as fs from 'fs/promises';
2
- import * as path from 'path';
2
+ import * as nodePath from 'path';
3
3
  import { CustomizationType, WarningCode, createId, } from '@a16njs/models';
4
4
  import { parseMdc } from './mdc.js';
5
5
  /**
@@ -12,7 +12,7 @@ import { parseMdc } from './mdc.js';
12
12
  async function findMdcFiles(rulesDir, relativePath = '') {
13
13
  const results = [];
14
14
  try {
15
- const entries = await fs.readdir(path.join(rulesDir, relativePath), { withFileTypes: true });
15
+ const entries = await fs.readdir(nodePath.join(rulesDir, relativePath), { withFileTypes: true });
16
16
  for (const entry of entries) {
17
17
  const entryRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
18
18
  if (entry.isFile() && entry.name.endsWith('.mdc')) {
@@ -47,7 +47,7 @@ function parseGlobs(globsString) {
47
47
  * 1. alwaysApply: true → GlobalPrompt
48
48
  * 2. globs: present → FileRule
49
49
  * 3. description: present → AgentSkill
50
- * 4. None of above → GlobalPrompt (fallback)
50
+ * 4. None of above → ManualPrompt (agent-requestable, invoked via slash command)
51
51
  */
52
52
  function classifyRule(frontmatter, body, sourcePath) {
53
53
  // Priority 1: alwaysApply: true → GlobalPrompt
@@ -60,17 +60,21 @@ function classifyRule(frontmatter, body, sourcePath) {
60
60
  metadata: { ...frontmatter },
61
61
  };
62
62
  }
63
- // Priority 2: globs present → FileRule
63
+ // Priority 2: globs present AND non-empty → FileRule
64
+ // Note: frontmatter.globs may be truthy (e.g., whitespace) but parse to empty array
64
65
  if (frontmatter.globs) {
65
66
  const globs = parseGlobs(frontmatter.globs);
66
- return {
67
- id: createId(CustomizationType.FileRule, sourcePath),
68
- type: CustomizationType.FileRule,
69
- sourcePath,
70
- content: body,
71
- globs,
72
- metadata: { ...frontmatter },
73
- };
67
+ if (globs.length > 0) {
68
+ return {
69
+ id: createId(CustomizationType.FileRule, sourcePath),
70
+ type: CustomizationType.FileRule,
71
+ sourcePath,
72
+ content: body,
73
+ globs,
74
+ metadata: { ...frontmatter },
75
+ };
76
+ }
77
+ // Fall through to next priority if globs is empty after parsing
74
78
  }
75
79
  // Priority 3: description present → AgentSkill
76
80
  if (frontmatter.description) {
@@ -83,12 +87,15 @@ function classifyRule(frontmatter, body, sourcePath) {
83
87
  metadata: { ...frontmatter },
84
88
  };
85
89
  }
86
- // Priority 4: FallbackGlobalPrompt
90
+ // Priority 4: No activation criteria ManualPrompt (Phase 7)
91
+ // Rules without alwaysApply: true, globs, or description are agent-requestable
92
+ const promptName = nodePath.basename(sourcePath, nodePath.extname(sourcePath));
87
93
  return {
88
- id: createId(CustomizationType.GlobalPrompt, sourcePath),
89
- type: CustomizationType.GlobalPrompt,
94
+ id: createId(CustomizationType.ManualPrompt, sourcePath),
95
+ type: CustomizationType.ManualPrompt,
90
96
  sourcePath,
91
97
  content: body,
98
+ promptName,
92
99
  metadata: { ...frontmatter },
93
100
  };
94
101
  }
@@ -132,7 +139,7 @@ function isComplexCommand(content) {
132
139
  async function findCommandFiles(commandsDir, relativePath = '') {
133
140
  const results = [];
134
141
  try {
135
- const entries = await fs.readdir(path.join(commandsDir, relativePath), { withFileTypes: true });
142
+ const entries = await fs.readdir(nodePath.join(commandsDir, relativePath), { withFileTypes: true });
136
143
  for (const entry of entries) {
137
144
  const entryRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
138
145
  if (entry.isFile() && entry.name.endsWith('.md')) {
@@ -151,49 +158,192 @@ async function findCommandFiles(commandsDir, relativePath = '') {
151
158
  }
152
159
  /**
153
160
  * Discover commands from .cursor/commands/**\/*.md
154
- * - Simple commands → AgentCommand
161
+ * - Simple commands → ManualPrompt
155
162
  * - Complex commands → Skip with warning
156
163
  */
157
164
  async function discoverCommands(root) {
158
165
  const items = [];
159
166
  const warnings = [];
160
- const commandsDir = path.join(root, '.cursor', 'commands');
167
+ const commandsDir = nodePath.join(root, '.cursor', 'commands');
161
168
  const commandFiles = await findCommandFiles(commandsDir);
162
169
  for (const file of commandFiles) {
163
- const filePath = path.join(commandsDir, file);
170
+ const filePath = nodePath.join(commandsDir, file);
164
171
  const content = await fs.readFile(filePath, 'utf-8');
165
172
  const sourcePath = `.cursor/commands/${file}`;
166
173
  // Check for complex features
167
174
  const { isComplex, reasons } = isComplexCommand(content);
168
175
  if (isComplex) {
169
- // Extract command name for warning message
170
- const commandName = path.basename(file, '.md');
176
+ // Extract prompt name for warning message
177
+ const promptName = nodePath.basename(file, '.md');
171
178
  warnings.push({
172
179
  code: WarningCode.Skipped,
173
- message: `Skipped command '${commandName}': Contains ${reasons.join(', ')} (not convertible to Claude)`,
180
+ message: `Skipped command '${promptName}': Contains ${reasons.join(', ')} (not convertible to Claude)`,
174
181
  sources: [sourcePath],
175
182
  });
176
183
  continue;
177
184
  }
178
- // Simple command - create AgentCommand
179
- const commandName = path.basename(file, '.md');
185
+ // Simple command - create ManualPrompt
186
+ const promptName = nodePath.basename(file, '.md');
180
187
  items.push({
181
- id: createId(CustomizationType.AgentCommand, sourcePath),
182
- type: CustomizationType.AgentCommand,
188
+ id: createId(CustomizationType.ManualPrompt, sourcePath),
189
+ type: CustomizationType.ManualPrompt,
183
190
  sourcePath,
184
191
  content,
185
- commandName,
192
+ promptName,
186
193
  metadata: {},
187
194
  });
188
195
  }
189
196
  return { items, warnings };
190
197
  }
198
+ function parseSkillFrontmatter(content) {
199
+ const lines = content.split('\n');
200
+ let frontmatterStart = -1;
201
+ let frontmatterEnd = -1;
202
+ for (let i = 0; i < lines.length; i++) {
203
+ const line = lines[i]?.trim();
204
+ if (line === '---') {
205
+ if (frontmatterStart === -1) {
206
+ frontmatterStart = i;
207
+ }
208
+ else {
209
+ frontmatterEnd = i;
210
+ break;
211
+ }
212
+ }
213
+ }
214
+ // No frontmatter found
215
+ if (frontmatterStart === -1 || frontmatterEnd === -1) {
216
+ return {
217
+ frontmatter: {},
218
+ body: content.trim(),
219
+ };
220
+ }
221
+ const frontmatter = {};
222
+ // Parse frontmatter lines
223
+ for (let i = frontmatterStart + 1; i < frontmatterEnd; i++) {
224
+ const line = lines[i];
225
+ if (!line)
226
+ continue;
227
+ // Parse disable-model-invocation: true
228
+ const disableMatch = line.match(/^disable-model-invocation:\s*(true|false)\s*$/);
229
+ if (disableMatch) {
230
+ frontmatter.disableModelInvocation = disableMatch[1] === 'true';
231
+ continue;
232
+ }
233
+ // Parse description: "..."
234
+ const descriptionMatch = line.match(/^description:\s*["']?(.+?)["']?\s*$/);
235
+ if (descriptionMatch) {
236
+ frontmatter.description = descriptionMatch[1];
237
+ continue;
238
+ }
239
+ // Parse name: "..."
240
+ const nameMatch = line.match(/^name:\s*["']?(.+?)["']?\s*$/);
241
+ if (nameMatch) {
242
+ frontmatter.name = nameMatch[1];
243
+ continue;
244
+ }
245
+ }
246
+ // Extract body (everything after second ---)
247
+ const bodyLines = lines.slice(frontmatterEnd + 1);
248
+ const body = bodyLines.join('\n').trim();
249
+ return { frontmatter, body };
250
+ }
251
+ /**
252
+ * Find all SKILL.md files in .cursor/skills/ subdirectories.
253
+ * Returns paths like ".cursor/skills/deploy/SKILL.md"
254
+ */
255
+ async function findSkillFiles(root) {
256
+ const results = [];
257
+ const skillsDir = nodePath.join(root, '.cursor', 'skills');
258
+ try {
259
+ const entries = await fs.readdir(skillsDir, { withFileTypes: true });
260
+ for (const entry of entries) {
261
+ if (entry.isDirectory()) {
262
+ const skillFile = nodePath.join(skillsDir, entry.name, 'SKILL.md');
263
+ try {
264
+ await fs.access(skillFile);
265
+ results.push(`.cursor/skills/${entry.name}/SKILL.md`);
266
+ }
267
+ catch {
268
+ // No SKILL.md in this directory
269
+ }
270
+ }
271
+ }
272
+ }
273
+ catch {
274
+ // .cursor/skills doesn't exist
275
+ }
276
+ return results;
277
+ }
278
+ /**
279
+ * Discover skills from .cursor/skills/*\/SKILL.md
280
+ * - Skills with description -> AgentSkill
281
+ * - Skills with disable-model-invocation: true -> ManualPrompt
282
+ * - Skills without either -> Skip with warning
283
+ */
284
+ async function discoverSkills(root) {
285
+ const items = [];
286
+ const warnings = [];
287
+ const skillFiles = await findSkillFiles(root);
288
+ for (const skillPath of skillFiles) {
289
+ const fullPath = nodePath.join(root, skillPath);
290
+ try {
291
+ const content = await fs.readFile(fullPath, 'utf-8');
292
+ const { frontmatter, body } = parseSkillFrontmatter(content);
293
+ // Extract skill name from path or frontmatter
294
+ const dirName = skillPath.split('/')[2] || 'unknown';
295
+ const skillName = frontmatter.name || dirName;
296
+ // Classification priority:
297
+ // 1. disable-model-invocation: true → ManualPrompt
298
+ // 2. description present → AgentSkill
299
+ // 3. Neither → Skip with warning
300
+ if (frontmatter.disableModelInvocation === true) {
301
+ // ManualPrompt
302
+ items.push({
303
+ id: createId(CustomizationType.ManualPrompt, skillPath),
304
+ type: CustomizationType.ManualPrompt,
305
+ sourcePath: skillPath,
306
+ content: body,
307
+ promptName: skillName,
308
+ metadata: { name: frontmatter.name },
309
+ });
310
+ }
311
+ else if (frontmatter.description) {
312
+ // AgentSkill
313
+ items.push({
314
+ id: createId(CustomizationType.AgentSkill, skillPath),
315
+ type: CustomizationType.AgentSkill,
316
+ sourcePath: skillPath,
317
+ content: body,
318
+ description: frontmatter.description,
319
+ metadata: { name: frontmatter.name },
320
+ });
321
+ }
322
+ else {
323
+ // Skip with warning
324
+ warnings.push({
325
+ code: WarningCode.Skipped,
326
+ message: `Skipped skill '${skillName}': Missing description or disable-model-invocation (not convertible)`,
327
+ sources: [skillPath],
328
+ });
329
+ }
330
+ }
331
+ catch (error) {
332
+ warnings.push({
333
+ code: WarningCode.Skipped,
334
+ message: `Could not read ${skillPath}: ${error.message}`,
335
+ sources: [skillPath],
336
+ });
337
+ }
338
+ }
339
+ return { items, warnings };
340
+ }
191
341
  /**
192
342
  * Discover .cursorignore file and parse its patterns.
193
343
  * Returns null if file doesn't exist or has no valid patterns.
194
344
  */
195
345
  async function discoverCursorIgnore(root) {
196
- const ignorePath = path.join(root, '.cursorignore');
346
+ const ignorePath = nodePath.join(root, '.cursorignore');
197
347
  try {
198
348
  const content = await fs.readFile(ignorePath, 'utf-8');
199
349
  const patterns = content
@@ -232,10 +382,10 @@ export async function discover(root) {
232
382
  const items = [];
233
383
  const warnings = [];
234
384
  // Find .cursor/rules/*.mdc files
235
- const rulesDir = path.join(root, '.cursor', 'rules');
385
+ const rulesDir = nodePath.join(root, '.cursor', 'rules');
236
386
  const mdcFiles = await findMdcFiles(rulesDir);
237
387
  for (const file of mdcFiles) {
238
- const filePath = path.join(rulesDir, file);
388
+ const filePath = nodePath.join(rulesDir, file);
239
389
  const content = await fs.readFile(filePath, 'utf-8');
240
390
  const { frontmatter, body } = parseMdc(content);
241
391
  // Classify and add all rules (Phase 2: supports GlobalPrompt, FileRule, AgentSkill)
@@ -247,6 +397,10 @@ export async function discover(root) {
247
397
  const commandResult = await discoverCommands(root);
248
398
  items.push(...commandResult.items);
249
399
  warnings.push(...commandResult.warnings);
400
+ // Discover skills from .cursor/skills/ (Phase 7)
401
+ const skillResult = await discoverSkills(root);
402
+ items.push(...skillResult.items);
403
+ warnings.push(...skillResult.warnings);
250
404
  // Discover .cursorignore (Phase 3)
251
405
  const agentIgnore = await discoverCursorIgnore(root);
252
406
  if (agentIgnore) {
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
package/dist/emit.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { type AgentCustomization, type EmitResult } from '@a16njs/models';
1
+ import { type AgentCustomization, type EmitResult, type EmitOptions } from '@a16njs/models';
2
2
  /**
3
3
  * Emit agent customizations to Cursor format.
4
4
  * - GlobalPrompt → .mdc with alwaysApply: true
5
5
  * - FileRule → .mdc with globs:
6
6
  * - AgentSkill → .mdc with description:
7
7
  */
8
- export declare function emit(models: AgentCustomization[], root: string): Promise<EmitResult>;
8
+ export declare function emit(models: AgentCustomization[], root: string, options?: EmitOptions): Promise<EmitResult>;
9
9
  //# sourceMappingURL=emit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAYhB,MAAM,gBAAgB,CAAC;AAsGxB;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,kBAAkB,EAAE,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAgLrB"}
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,WAAW,EAYjB,MAAM,gBAAgB,CAAC;AA4IxB;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,kBAAkB,EAAE,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA4PrB"}
package/dist/emit.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'fs/promises';
2
2
  import * as path from 'path';
3
- import { CustomizationType, WarningCode, isGlobalPrompt, isFileRule, isAgentSkill, isAgentIgnore, isAgentCommand, } from '@a16njs/models';
3
+ import { CustomizationType, WarningCode, isGlobalPrompt, isFileRule, isAgentSkill, isAgentIgnore, isManualPrompt, } from '@a16njs/models';
4
4
  /**
5
5
  * Sanitize a filename to be safe for the filesystem.
6
6
  * Converts to lowercase, replaces spaces and special chars with hyphens.
@@ -20,12 +20,12 @@ function sanitizeFilename(sourcePath) {
20
20
  return sanitized || 'rule';
21
21
  }
22
22
  /**
23
- * Sanitize a command name to prevent path traversal and ensure filesystem safety.
23
+ * Sanitize a prompt name to prevent path traversal and ensure filesystem safety.
24
24
  * Returns a safe string with only alphanumeric characters and hyphens.
25
25
  */
26
- function sanitizeCommandName(commandName) {
26
+ function sanitizePromptName(promptName) {
27
27
  // Remove any path separators and normalize
28
- const sanitized = commandName
28
+ const sanitized = promptName
29
29
  .toLowerCase()
30
30
  .replace(/[/\\]/g, '-') // Replace path separators with hyphens
31
31
  .replace(/[^a-z0-9]+/g, '-') // Replace other unsafe chars with hyphens
@@ -76,6 +76,7 @@ ${content}
76
76
  }
77
77
  /**
78
78
  * Format content as MDC with AgentSkill frontmatter (description).
79
+ * Used for legacy .cursor/rules/*.mdc emission.
79
80
  */
80
81
  function formatAgentSkillMdc(content, description) {
81
82
  // Quote description if it contains special YAML characters
@@ -88,13 +89,47 @@ description: ${quotedDesc}
88
89
  ${content}
89
90
  `;
90
91
  }
92
+ /**
93
+ * Format AgentSkill as a SKILL.md file.
94
+ * Used for .cursor/skills/ emission (Phase 7).
95
+ */
96
+ function formatAgentSkillMd(skill) {
97
+ const skillName = skill.metadata?.name || sanitizeFilename(skill.sourcePath);
98
+ const safeName = JSON.stringify(skillName);
99
+ const safeDescription = JSON.stringify(skill.description);
100
+ return `---
101
+ name: ${safeName}
102
+ description: ${safeDescription}
103
+ ---
104
+
105
+ ${skill.content}
106
+ `;
107
+ }
108
+ /**
109
+ * Format ManualPrompt as a SKILL.md file with disable-model-invocation.
110
+ * Used for .cursor/skills/ emission (Phase 7).
111
+ */
112
+ function formatManualPromptSkillMd(prompt) {
113
+ const safeName = JSON.stringify(prompt.promptName);
114
+ const description = `Invoke with /${prompt.promptName}`;
115
+ const safeDescription = JSON.stringify(description);
116
+ return `---
117
+ name: ${safeName}
118
+ description: ${safeDescription}
119
+ disable-model-invocation: true
120
+ ---
121
+
122
+ ${prompt.content}
123
+ `;
124
+ }
91
125
  /**
92
126
  * Emit agent customizations to Cursor format.
93
127
  * - GlobalPrompt → .mdc with alwaysApply: true
94
128
  * - FileRule → .mdc with globs:
95
129
  * - AgentSkill → .mdc with description:
96
130
  */
97
- export async function emit(models, root) {
131
+ export async function emit(models, root, options) {
132
+ const dryRun = options?.dryRun ?? false;
98
133
  const written = [];
99
134
  const warnings = [];
100
135
  const unsupported = [];
@@ -104,25 +139,30 @@ export async function emit(models, root) {
104
139
  const fileRules = models.filter(isFileRule);
105
140
  const agentSkills = models.filter(isAgentSkill);
106
141
  const agentIgnores = models.filter(isAgentIgnore);
107
- const agentCommands = models.filter(isAgentCommand);
142
+ const manualPrompts = models.filter(isManualPrompt);
108
143
  // Track unsupported types (future types)
109
144
  for (const model of models) {
110
- if (!isGlobalPrompt(model) && !isFileRule(model) && !isAgentSkill(model) && !isAgentIgnore(model) && !isAgentCommand(model)) {
145
+ if (!isGlobalPrompt(model) && !isFileRule(model) && !isAgentSkill(model) && !isAgentIgnore(model) && !isManualPrompt(model)) {
111
146
  unsupported.push(model);
112
147
  }
113
148
  }
114
- const allItems = [...globalPrompts, ...fileRules, ...agentSkills];
115
- // Early return only if no items at all (including agentIgnores and agentCommands)
116
- if (allItems.length === 0 && agentIgnores.length === 0 && agentCommands.length === 0) {
149
+ // Items that go to .cursor/rules/*.mdc
150
+ const mdcItems = [...globalPrompts, ...fileRules];
151
+ // Items that go to .cursor/skills/*/SKILL.md (Phase 7)
152
+ const skillItems = [...agentSkills, ...manualPrompts];
153
+ // Early return only if no items at all (including agentIgnores)
154
+ if (mdcItems.length === 0 && skillItems.length === 0 && agentIgnores.length === 0) {
117
155
  return { written, warnings, unsupported };
118
156
  }
119
157
  // Track sources that had collisions for warning
120
158
  const collisionSources = [];
121
- // Ensure .cursor/rules directory exists (only if we have mdc items)
159
+ // Ensure .cursor/rules directory exists (only if we have mdc items, skip in dry-run)
122
160
  const rulesDir = path.join(root, '.cursor', 'rules');
123
- if (allItems.length > 0) {
161
+ if (mdcItems.length > 0 && !dryRun) {
124
162
  await fs.mkdir(rulesDir, { recursive: true });
125
163
  }
164
+ // Track used skill names for .cursor/skills/ collision detection
165
+ const usedSkillNames = new Set();
126
166
  // Emit each GlobalPrompt as a separate .mdc file
127
167
  for (const gp of globalPrompts) {
128
168
  const baseName = sanitizeFilename(gp.sourcePath) + '.mdc';
@@ -132,11 +172,24 @@ export async function emit(models, root) {
132
172
  }
133
173
  const filepath = path.join(rulesDir, filename);
134
174
  const content = formatGlobalPromptMdc(gp.content);
135
- await fs.writeFile(filepath, content, 'utf-8');
175
+ // Check if file exists before writing
176
+ let isNewFile = true;
177
+ try {
178
+ await fs.access(filepath);
179
+ isNewFile = false; // File exists
180
+ }
181
+ catch {
182
+ isNewFile = true; // File does not exist
183
+ }
184
+ if (!dryRun) {
185
+ await fs.writeFile(filepath, content, 'utf-8');
186
+ }
136
187
  written.push({
137
188
  path: filepath,
138
189
  type: CustomizationType.GlobalPrompt,
139
190
  itemCount: 1,
191
+ isNewFile,
192
+ sourceItems: [gp],
140
193
  });
141
194
  }
142
195
  // Emit each FileRule as a separate .mdc file with globs
@@ -148,27 +201,66 @@ export async function emit(models, root) {
148
201
  }
149
202
  const filepath = path.join(rulesDir, filename);
150
203
  const content = formatFileRuleMdc(fr.content, fr.globs);
151
- await fs.writeFile(filepath, content, 'utf-8');
204
+ // Check if file exists before writing
205
+ let isNewFile = true;
206
+ try {
207
+ await fs.access(filepath);
208
+ isNewFile = false; // File exists
209
+ }
210
+ catch {
211
+ isNewFile = true; // File does not exist
212
+ }
213
+ if (!dryRun) {
214
+ await fs.writeFile(filepath, content, 'utf-8');
215
+ }
152
216
  written.push({
153
217
  path: filepath,
154
218
  type: CustomizationType.FileRule,
155
219
  itemCount: 1,
220
+ isNewFile,
221
+ sourceItems: [fr],
156
222
  });
157
223
  }
158
- // Emit each AgentSkill as a separate .mdc file with description
224
+ // === Emit AgentSkills as .cursor/skills/*/SKILL.md (Phase 7) ===
159
225
  for (const skill of agentSkills) {
160
- const baseName = sanitizeFilename(skill.sourcePath) + '.mdc';
161
- const { filename, collision } = getUniqueFilename(baseName, usedFilenames);
162
- if (collision) {
226
+ // Get skill name from metadata or sourcePath
227
+ const skillName = skill.metadata?.name || sanitizeFilename(skill.sourcePath);
228
+ const baseName = sanitizePromptName(skillName);
229
+ // Get unique name to avoid collisions
230
+ let dirName = baseName;
231
+ if (usedSkillNames.has(dirName)) {
163
232
  collisionSources.push(skill.sourcePath);
233
+ let counter = 1;
234
+ while (usedSkillNames.has(`${baseName}-${counter}`)) {
235
+ counter++;
236
+ }
237
+ dirName = `${baseName}-${counter}`;
238
+ }
239
+ usedSkillNames.add(dirName);
240
+ const skillDir = path.join(root, '.cursor', 'skills', dirName);
241
+ if (!dryRun) {
242
+ await fs.mkdir(skillDir, { recursive: true });
243
+ }
244
+ const filepath = path.join(skillDir, 'SKILL.md');
245
+ const content = formatAgentSkillMd(skill);
246
+ // Check if file exists before writing
247
+ let isNewFile = true;
248
+ try {
249
+ await fs.access(filepath);
250
+ isNewFile = false; // File exists
251
+ }
252
+ catch {
253
+ isNewFile = true; // File does not exist
254
+ }
255
+ if (!dryRun) {
256
+ await fs.writeFile(filepath, content, 'utf-8');
164
257
  }
165
- const filepath = path.join(rulesDir, filename);
166
- const content = formatAgentSkillMdc(skill.content, skill.description);
167
- await fs.writeFile(filepath, content, 'utf-8');
168
258
  written.push({
169
259
  path: filepath,
170
260
  type: CustomizationType.AgentSkill,
171
261
  itemCount: 1,
262
+ isNewFile,
263
+ sourceItems: [skill],
172
264
  });
173
265
  }
174
266
  // Emit warning if any collisions occurred
@@ -184,11 +276,24 @@ export async function emit(models, root) {
184
276
  const allPatterns = agentIgnores.flatMap(ai => ai.patterns);
185
277
  const uniquePatterns = [...new Set(allPatterns)];
186
278
  const filepath = path.join(root, '.cursorignore');
187
- await fs.writeFile(filepath, uniquePatterns.join('\n') + '\n', 'utf-8');
279
+ // Check if file exists before writing
280
+ let isNewFile = true;
281
+ try {
282
+ await fs.access(filepath);
283
+ isNewFile = false; // File exists
284
+ }
285
+ catch {
286
+ isNewFile = true; // File does not exist
287
+ }
288
+ if (!dryRun) {
289
+ await fs.writeFile(filepath, uniquePatterns.join('\n') + '\n', 'utf-8');
290
+ }
188
291
  written.push({
189
292
  path: filepath,
190
293
  type: CustomizationType.AgentIgnore,
191
294
  itemCount: agentIgnores.length,
295
+ isNewFile,
296
+ sourceItems: agentIgnores,
192
297
  });
193
298
  if (agentIgnores.length > 1) {
194
299
  warnings.push({
@@ -198,43 +303,46 @@ export async function emit(models, root) {
198
303
  });
199
304
  }
200
305
  }
201
- // === Emit AgentCommands as .cursor/commands/*.md ===
202
- if (agentCommands.length > 0) {
203
- const commandsDir = path.join(root, '.cursor', 'commands');
204
- await fs.mkdir(commandsDir, { recursive: true });
205
- const usedCommandNames = new Set();
206
- const commandCollisionSources = [];
207
- for (const command of agentCommands) {
208
- // Sanitize command name to prevent path traversal
209
- const baseName = sanitizeCommandName(command.commandName);
210
- // Get unique filename to avoid collisions
211
- let filename = `${baseName}.md`;
212
- if (usedCommandNames.has(filename)) {
213
- // Collision detected - track for warning
214
- commandCollisionSources.push(command.sourcePath);
215
- let counter = 2;
216
- while (usedCommandNames.has(`${baseName}-${counter}.md`)) {
217
- counter++;
218
- }
219
- filename = `${baseName}-${counter}.md`;
306
+ // === Emit ManualPrompts as .cursor/skills/*/SKILL.md (Phase 7) ===
307
+ for (const prompt of manualPrompts) {
308
+ // Sanitize prompt name to prevent path traversal
309
+ const baseName = sanitizePromptName(prompt.promptName);
310
+ // Get unique name to avoid collisions (shared with AgentSkills)
311
+ let dirName = baseName;
312
+ if (usedSkillNames.has(dirName)) {
313
+ collisionSources.push(prompt.sourcePath);
314
+ let counter = 1;
315
+ while (usedSkillNames.has(`${baseName}-${counter}`)) {
316
+ counter++;
220
317
  }
221
- usedCommandNames.add(filename);
222
- const commandPath = path.join(commandsDir, filename);
223
- await fs.writeFile(commandPath, command.content, 'utf-8');
224
- written.push({
225
- path: commandPath,
226
- type: CustomizationType.AgentCommand,
227
- itemCount: 1,
228
- });
318
+ dirName = `${baseName}-${counter}`;
229
319
  }
230
- // Emit warning if any command collisions occurred
231
- if (commandCollisionSources.length > 0) {
232
- warnings.push({
233
- code: WarningCode.FileRenamed,
234
- message: `Command filename collision: ${commandCollisionSources.length} file(s) renamed to avoid overwrite`,
235
- sources: commandCollisionSources,
236
- });
320
+ usedSkillNames.add(dirName);
321
+ const skillDir = path.join(root, '.cursor', 'skills', dirName);
322
+ if (!dryRun) {
323
+ await fs.mkdir(skillDir, { recursive: true });
324
+ }
325
+ const filepath = path.join(skillDir, 'SKILL.md');
326
+ const content = formatManualPromptSkillMd(prompt);
327
+ // Check if file exists before writing
328
+ let isNewFile = true;
329
+ try {
330
+ await fs.access(filepath);
331
+ isNewFile = false; // File exists
332
+ }
333
+ catch {
334
+ isNewFile = true; // File does not exist
237
335
  }
336
+ if (!dryRun) {
337
+ await fs.writeFile(filepath, content, 'utf-8');
338
+ }
339
+ written.push({
340
+ path: filepath,
341
+ type: CustomizationType.ManualPrompt,
342
+ itemCount: 1,
343
+ isNewFile,
344
+ sourceItems: [prompt],
345
+ });
238
346
  }
239
347
  return { written, warnings, unsupported };
240
348
  }
package/dist/emit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAIpE;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,UAWnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAIpE;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,UAYnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ const cursorPlugin = {
12
12
  CustomizationType.GlobalPrompt,
13
13
  CustomizationType.FileRule,
14
14
  CustomizationType.AgentSkill,
15
+ CustomizationType.ManualPrompt,
15
16
  ],
16
17
  discover,
17
18
  emit,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,YAAY,GAAe;IAC/B,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE;QACR,iBAAiB,CAAC,YAAY;QAC9B,iBAAiB,CAAC,QAAQ;QAC1B,iBAAiB,CAAC,UAAU;KAC7B;IAED,QAAQ;IACR,IAAI;CACL,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,YAAY,GAAe;IAC/B,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE;QACR,iBAAiB,CAAC,YAAY;QAC9B,iBAAiB,CAAC,QAAQ;QAC1B,iBAAiB,CAAC,UAAU;QAC5B,iBAAiB,CAAC,YAAY;KAC/B;IAED,QAAQ;IACR,IAAI;CACL,CAAC;AAEF,eAAe,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a16njs/plugin-cursor",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Cursor IDE plugin for a16n",
5
5
  "license": "AGPL-3.0",
6
6
  "author": "Texarkanine",
@@ -33,7 +33,7 @@
33
33
  "dist"
34
34
  ],
35
35
  "dependencies": {
36
- "@a16njs/models": "0.1.0"
36
+ "@a16njs/models": "0.3.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^20.0.0",