@a1st/aix-core 0.0.3 → 0.0.6
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 +39 -0
- package/dist/cache/index.d.ts +1 -1
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/paths.d.ts +13 -8
- package/dist/cache/paths.d.ts.map +1 -1
- package/dist/cache/paths.js +19 -12
- package/dist/cache/paths.js.map +1 -1
- package/dist/editors/adapters/base.d.ts +9 -1
- package/dist/editors/adapters/base.d.ts.map +1 -1
- package/dist/editors/adapters/base.js +7 -5
- package/dist/editors/adapters/base.js.map +1 -1
- package/dist/editors/adapters/claude-code.d.ts +2 -1
- package/dist/editors/adapters/claude-code.d.ts.map +1 -1
- package/dist/editors/adapters/claude-code.js +13 -5
- package/dist/editors/adapters/claude-code.js.map +1 -1
- package/dist/editors/adapters/codex.d.ts +1 -0
- package/dist/editors/adapters/codex.d.ts.map +1 -1
- package/dist/editors/adapters/codex.js +9 -1
- package/dist/editors/adapters/codex.js.map +1 -1
- package/dist/editors/adapters/cursor.d.ts +1 -0
- package/dist/editors/adapters/cursor.d.ts.map +1 -1
- package/dist/editors/adapters/cursor.js +9 -1
- package/dist/editors/adapters/cursor.js.map +1 -1
- package/dist/editors/adapters/vscode.d.ts +1 -0
- package/dist/editors/adapters/vscode.d.ts.map +1 -1
- package/dist/editors/adapters/vscode.js +9 -1
- package/dist/editors/adapters/vscode.js.map +1 -1
- package/dist/editors/adapters/windsurf.d.ts +1 -0
- package/dist/editors/adapters/windsurf.d.ts.map +1 -1
- package/dist/editors/adapters/windsurf.js +9 -1
- package/dist/editors/adapters/windsurf.js.map +1 -1
- package/dist/editors/adapters/zed.d.ts +1 -0
- package/dist/editors/adapters/zed.d.ts.map +1 -1
- package/dist/editors/adapters/zed.js +9 -1
- package/dist/editors/adapters/zed.js.map +1 -1
- package/dist/editors/import.d.ts +2 -1
- package/dist/editors/import.d.ts.map +1 -1
- package/dist/editors/import.js +12 -9
- package/dist/editors/import.js.map +1 -1
- package/dist/editors/install.d.ts.map +1 -1
- package/dist/editors/install.js +1 -36
- package/dist/editors/install.js.map +1 -1
- package/dist/editors/strategies/claude-code/mcp.d.ts +6 -2
- package/dist/editors/strategies/claude-code/mcp.d.ts.map +1 -1
- package/dist/editors/strategies/claude-code/mcp.js +40 -2
- package/dist/editors/strategies/claude-code/mcp.js.map +1 -1
- package/dist/editors/strategies/claude-code/prompts.d.ts +11 -1
- package/dist/editors/strategies/claude-code/prompts.d.ts.map +1 -1
- package/dist/editors/strategies/claude-code/prompts.js +29 -0
- package/dist/editors/strategies/claude-code/prompts.js.map +1 -1
- package/dist/editors/strategies/claude-code/rules.d.ts +12 -1
- package/dist/editors/strategies/claude-code/rules.d.ts.map +1 -1
- package/dist/editors/strategies/claude-code/rules.js +49 -5
- package/dist/editors/strategies/claude-code/rules.js.map +1 -1
- package/dist/editors/strategies/codex/prompts.d.ts +11 -1
- package/dist/editors/strategies/codex/prompts.d.ts.map +1 -1
- package/dist/editors/strategies/codex/prompts.js +34 -0
- package/dist/editors/strategies/codex/prompts.js.map +1 -1
- package/dist/editors/strategies/cursor/rules.d.ts +14 -1
- package/dist/editors/strategies/cursor/rules.d.ts.map +1 -1
- package/dist/editors/strategies/cursor/rules.js +51 -5
- package/dist/editors/strategies/cursor/rules.js.map +1 -1
- package/dist/editors/strategies/shared/standard-mcp.d.ts +3 -1
- package/dist/editors/strategies/shared/standard-mcp.d.ts.map +1 -1
- package/dist/editors/strategies/shared/standard-mcp.js +5 -1
- package/dist/editors/strategies/shared/standard-mcp.js.map +1 -1
- package/dist/editors/strategies/types.d.ts +48 -2
- package/dist/editors/strategies/types.d.ts.map +1 -1
- package/dist/editors/strategies/vscode/prompts.d.ts +11 -1
- package/dist/editors/strategies/vscode/prompts.d.ts.map +1 -1
- package/dist/editors/strategies/vscode/prompts.js +29 -0
- package/dist/editors/strategies/vscode/prompts.js.map +1 -1
- package/dist/editors/strategies/windsurf/prompts.d.ts +11 -1
- package/dist/editors/strategies/windsurf/prompts.d.ts.map +1 -1
- package/dist/editors/strategies/windsurf/prompts.js +29 -0
- package/dist/editors/strategies/windsurf/prompts.js.map +1 -1
- package/dist/editors/strategies/windsurf/rules.d.ts +14 -1
- package/dist/editors/strategies/windsurf/rules.d.ts.map +1 -1
- package/dist/editors/strategies/windsurf/rules.js +43 -5
- package/dist/editors/strategies/windsurf/rules.js.map +1 -1
- package/dist/editors/types.d.ts +12 -0
- package/dist/editors/types.d.ts.map +1 -1
- package/dist/frontmatter-parser.d.ts +24 -0
- package/dist/frontmatter-parser.d.ts.map +1 -0
- package/dist/frontmatter-parser.js +137 -0
- package/dist/frontmatter-parser.js.map +1 -0
- package/dist/frontmatter-utils.d.ts +36 -0
- package/dist/frontmatter-utils.d.ts.map +1 -0
- package/dist/frontmatter-utils.js +109 -0
- package/dist/frontmatter-utils.js.map +1 -0
- package/dist/git-download.d.ts +18 -0
- package/dist/git-download.d.ts.map +1 -0
- package/dist/git-download.js +49 -0
- package/dist/git-download.js.map +1 -0
- package/dist/import-writer.d.ts +54 -10
- package/dist/import-writer.d.ts.map +1 -1
- package/dist/import-writer.js +305 -44
- package/dist/import-writer.js.map +1 -1
- package/dist/inheritance.d.ts +2 -0
- package/dist/inheritance.d.ts.map +1 -1
- package/dist/inheritance.js +172 -41
- package/dist/inheritance.js.map +1 -1
- package/dist/loader.d.ts +13 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +5 -1
- package/dist/loader.js.map +1 -1
- package/dist/prompts/loader.d.ts.map +1 -1
- package/dist/prompts/loader.js +11 -39
- package/dist/prompts/loader.js.map +1 -1
- package/dist/remote-loader.d.ts +17 -1
- package/dist/remote-loader.d.ts.map +1 -1
- package/dist/remote-loader.js +76 -44
- package/dist/remote-loader.js.map +1 -1
- package/dist/rules/loader.d.ts.map +1 -1
- package/dist/rules/loader.js +23 -13
- package/dist/rules/loader.js.map +1 -1
- package/dist/skills/parser.d.ts +3 -1
- package/dist/skills/parser.d.ts.map +1 -1
- package/dist/skills/parser.js +22 -10
- package/dist/skills/parser.js.map +1 -1
- package/dist/skills/resolvers/git.d.ts.map +1 -1
- package/dist/skills/resolvers/git.js +10 -2
- package/dist/skills/resolvers/git.js.map +1 -1
- package/dist/skills/validate.js +1 -1
- package/dist/skills/validate.js.map +1 -1
- package/dist/updater.d.ts.map +1 -1
- package/dist/updater.js +5 -12
- package/dist/updater.js.map +1 -1
- package/dist/url-parsing.d.ts +1 -4
- package/dist/url-parsing.d.ts.map +1 -1
- package/dist/url-parsing.js +2 -6
- package/dist/url-parsing.js.map +1 -1
- package/package.json +11 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/codex/prompts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/codex/prompts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5E;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,eAAe;IACzD;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB,aAAa,IAAI,MAAM;IAIvB,gBAAgB,IAAI,MAAM;IAI1B,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IActD,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAyBpC,kBAAkB,CACrB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAChD,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAInE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAiBtC;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB;CAiB/D"}
|
|
@@ -2,6 +2,7 @@ import { readFile } from 'node:fs/promises';
|
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'pathe';
|
|
5
|
+
import { extractFrontmatter, parseYamlValue } from '../../../frontmatter-utils.js';
|
|
5
6
|
/**
|
|
6
7
|
* Codex prompts strategy. Codex prompts are global-only (`~/.codex/prompts/`).
|
|
7
8
|
* The install flow handles global config management with user confirmation.
|
|
@@ -78,5 +79,38 @@ export class CodexPromptsStrategy {
|
|
|
78
79
|
async parseGlobalPrompts(_files, _readFile) {
|
|
79
80
|
return { prompts: {}, warnings: [] };
|
|
80
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect if content appears to be in Codex's prompt frontmatter format.
|
|
84
|
+
* Codex prompts use `description:` and optionally `argument-hint:` fields (similar to VS Code).
|
|
85
|
+
*/
|
|
86
|
+
detectFormat(content) {
|
|
87
|
+
const { frontmatter, hasFrontmatter } = extractFrontmatter(content);
|
|
88
|
+
if (!hasFrontmatter) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const lines = frontmatter.split('\n');
|
|
92
|
+
// Codex uses description/argument-hint but NOT mode/tools (VS Code) or allowed-tools (Claude)
|
|
93
|
+
return parseYamlValue(lines, 'description') !== undefined
|
|
94
|
+
&& parseYamlValue(lines, 'mode') === undefined
|
|
95
|
+
&& parseYamlValue(lines, 'tools') === undefined
|
|
96
|
+
&& parseYamlValue(lines, 'allowed-tools') === undefined
|
|
97
|
+
&& parseYamlValue(lines, 'context') === undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse Codex-specific frontmatter into unified format.
|
|
101
|
+
* Extracts `description` and `argument-hint` fields.
|
|
102
|
+
*/
|
|
103
|
+
parseFrontmatter(rawContent) {
|
|
104
|
+
const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
|
|
105
|
+
if (!hasFrontmatter) {
|
|
106
|
+
return { content: rawContent };
|
|
107
|
+
}
|
|
108
|
+
const lines = frontmatter.split('\n'), description = parseYamlValue(lines, 'description'), argumentHint = parseYamlValue(lines, 'argument-hint');
|
|
109
|
+
return {
|
|
110
|
+
content,
|
|
111
|
+
description,
|
|
112
|
+
argumentHint,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
81
115
|
}
|
|
82
116
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/codex/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/codex/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RulesStrategy } from '../types.js';
|
|
1
|
+
import type { ParsedRuleFrontmatter, RulesStrategy } from '../types.js';
|
|
2
2
|
import type { EditorRule } from '../../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Cursor rules strategy. Uses `.mdc` files (Markdown with YAML frontmatter) containing
|
|
@@ -13,5 +13,18 @@ export declare class CursorRulesStrategy implements RulesStrategy {
|
|
|
13
13
|
rules: string[];
|
|
14
14
|
warnings: string[];
|
|
15
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Detect if content appears to be in Cursor's frontmatter format.
|
|
18
|
+
* Cursor uses `alwaysApply:` field in frontmatter.
|
|
19
|
+
*/
|
|
20
|
+
detectFormat(content: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Parse Cursor-specific frontmatter into unified format.
|
|
23
|
+
* - `alwaysApply: true` → `activation: 'always'`
|
|
24
|
+
* - `alwaysApply: false` + `globs:` → `activation: 'glob'`
|
|
25
|
+
* - `alwaysApply: false` + `description:` (no globs) → `activation: 'auto'`
|
|
26
|
+
* - `alwaysApply: false` (no globs, no description) → `activation: 'manual'`
|
|
27
|
+
*/
|
|
28
|
+
parseFrontmatter(rawContent: string): ParsedRuleFrontmatter;
|
|
16
29
|
}
|
|
17
30
|
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/cursor/rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/cursor/rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACtD,WAAW,IAAI,MAAM;IAIrB,gBAAgB,IAAI,MAAM;IAI1B,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAKnC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAqBpC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAI3E;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAYtC;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB;CAqC7D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extractFrontmatter, parseYamlValue } from '../../../frontmatter-utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Cursor rules strategy. Uses `.mdc` files (Markdown with YAML frontmatter) containing
|
|
3
4
|
* `alwaysApply`, `globs`, and `description` fields.
|
|
@@ -26,16 +27,61 @@ export class CursorRulesStrategy {
|
|
|
26
27
|
// alwaysApply is true for 'always' activation, false otherwise
|
|
27
28
|
lines.push(`alwaysApply: ${rule.activation.type === 'always'}`);
|
|
28
29
|
lines.push('---', '');
|
|
29
|
-
// Include rule name as heading for context, but only if content doesn't already start with one
|
|
30
|
-
const contentStartsWithHeading = /^#\s/.test(rule.content.trim());
|
|
31
|
-
if (rule.name && !contentStartsWithHeading) {
|
|
32
|
-
lines.push(`# ${rule.name}`, '');
|
|
33
|
-
}
|
|
34
30
|
lines.push(rule.content);
|
|
35
31
|
return lines.join('\n');
|
|
36
32
|
}
|
|
37
33
|
parseGlobalRules(_content) {
|
|
38
34
|
return { rules: [], warnings: [] };
|
|
39
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Detect if content appears to be in Cursor's frontmatter format.
|
|
38
|
+
* Cursor uses `alwaysApply:` field in frontmatter.
|
|
39
|
+
*/
|
|
40
|
+
detectFormat(content) {
|
|
41
|
+
const { frontmatter, hasFrontmatter } = extractFrontmatter(content);
|
|
42
|
+
if (!hasFrontmatter) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const lines = frontmatter.split('\n');
|
|
46
|
+
return parseYamlValue(lines, 'alwaysApply') !== undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse Cursor-specific frontmatter into unified format.
|
|
50
|
+
* - `alwaysApply: true` → `activation: 'always'`
|
|
51
|
+
* - `alwaysApply: false` + `globs:` → `activation: 'glob'`
|
|
52
|
+
* - `alwaysApply: false` + `description:` (no globs) → `activation: 'auto'`
|
|
53
|
+
* - `alwaysApply: false` (no globs, no description) → `activation: 'manual'`
|
|
54
|
+
*/
|
|
55
|
+
parseFrontmatter(rawContent) {
|
|
56
|
+
const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
|
|
57
|
+
if (!hasFrontmatter) {
|
|
58
|
+
return { content: rawContent, metadata: {} };
|
|
59
|
+
}
|
|
60
|
+
const lines = frontmatter.split('\n'), alwaysApply = parseYamlValue(lines, 'alwaysApply'), description = parseYamlValue(lines, 'description'), globs = parseYamlValue(lines, 'globs');
|
|
61
|
+
// Parse globs (can be comma-separated string or array)
|
|
62
|
+
const globsArray = typeof globs === 'string' ? globs.split(',').map((g) => g.trim()) : globs;
|
|
63
|
+
// Determine activation mode based on Cursor's rules
|
|
64
|
+
let activation;
|
|
65
|
+
if (alwaysApply === true) {
|
|
66
|
+
activation = 'always';
|
|
67
|
+
}
|
|
68
|
+
else if (globsArray && globsArray.length > 0) {
|
|
69
|
+
activation = 'glob';
|
|
70
|
+
}
|
|
71
|
+
else if (description) {
|
|
72
|
+
activation = 'auto';
|
|
73
|
+
}
|
|
74
|
+
else if (alwaysApply === false) {
|
|
75
|
+
activation = 'manual';
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
content,
|
|
79
|
+
metadata: {
|
|
80
|
+
activation,
|
|
81
|
+
description,
|
|
82
|
+
globs: globsArray,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
40
86
|
}
|
|
41
87
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/cursor/rules.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAC7B,WAAW;QACR,OAAO,OAAO,CAAC;IAClB,CAAC;IAED,gBAAgB;QACb,OAAO,MAAM,CAAC;IACjB,CAAC;IAED,kBAAkB;QACf,mEAAmE;QACnE,OAAO,IAAI,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAgB;QACxB,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,+DAA+D;QAC/D,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;QAEhE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/cursor/rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEnF;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAC7B,WAAW;QACR,OAAO,OAAO,CAAC;IAClB,CAAC;IAED,gBAAgB;QACb,OAAO,MAAM,CAAC;IACjB,CAAC;IAED,kBAAkB;QACf,mEAAmE;QACnE,OAAO,IAAI,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAgB;QACxB,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,+DAA+D;QAC/D,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;QAEhE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAe;QACzB,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEpE,IAAI,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,SAAS,CAAC;IAC7D,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAkB;QAChC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAC/B,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAwB,EACzE,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAuB,EACxE,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7C,uDAAuD;QACvD,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,KAA8B,CAAC;QAEvH,oDAAoD;QACpD,IAAI,UAAsC,CAAC;QAE3C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACxB,UAAU,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,UAAU,GAAG,MAAM,CAAC;QACvB,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACtB,UAAU,GAAG,MAAM,CAAC;QACvB,CAAC;aAAM,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAChC,UAAU,GAAG,QAAQ,CAAC;QACzB,CAAC;QAED,OAAO;YACJ,OAAO;YACP,QAAQ,EAAE;gBACP,UAAU;gBACV,WAAW;gBACX,KAAK,EAAE,UAAU;aACnB;SACH,CAAC;IACL,CAAC;CACH"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { McpServerConfig } from '@a1st/aix-schema';
|
|
2
2
|
import type { McpStrategy } from '../types.js';
|
|
3
3
|
/**
|
|
4
|
-
* Standard MCP strategy used by Cursor
|
|
4
|
+
* Standard MCP strategy used by Cursor. Uses `mcp.json` with a `mcpServers` object. Claude Code
|
|
5
|
+
* extends this with {@link ClaudeCodeMcpStrategy} for its `.mcp.json` (dot-prefixed) filename.
|
|
5
6
|
*/
|
|
6
7
|
export declare class StandardMcpStrategy implements McpStrategy {
|
|
7
8
|
isSupported(): boolean;
|
|
8
9
|
getConfigPath(): string;
|
|
10
|
+
isProjectRootConfig(): boolean;
|
|
9
11
|
getGlobalMcpConfigPath(): string | null;
|
|
10
12
|
formatConfig(mcp: Record<string, McpServerConfig>): string;
|
|
11
13
|
parseGlobalMcpConfig(content: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-mcp.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/shared/standard-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"standard-mcp.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/shared/standard-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACpD,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAIvB,mBAAmB,IAAI,OAAO;IAI9B,sBAAsB,IAAI,MAAM,GAAG,IAAI;IAIvC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM;IA0B1D,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACrB;CAsCH"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Standard MCP strategy used by Cursor
|
|
2
|
+
* Standard MCP strategy used by Cursor. Uses `mcp.json` with a `mcpServers` object. Claude Code
|
|
3
|
+
* extends this with {@link ClaudeCodeMcpStrategy} for its `.mcp.json` (dot-prefixed) filename.
|
|
3
4
|
*/
|
|
4
5
|
export class StandardMcpStrategy {
|
|
5
6
|
isSupported() {
|
|
@@ -8,6 +9,9 @@ export class StandardMcpStrategy {
|
|
|
8
9
|
getConfigPath() {
|
|
9
10
|
return 'mcp.json';
|
|
10
11
|
}
|
|
12
|
+
isProjectRootConfig() {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
11
15
|
getGlobalMcpConfigPath() {
|
|
12
16
|
return '.cursor/mcp.json';
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-mcp.js","sourceRoot":"","sources":["../../../../src/editors/strategies/shared/standard-mcp.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"standard-mcp.js","sourceRoot":"","sources":["../../../../src/editors/strategies/shared/standard-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,33 @@
|
|
|
1
|
-
import type { McpServerConfig, ParsedSkill, HooksConfig } from '@a1st/aix-schema';
|
|
1
|
+
import type { McpServerConfig, ParsedSkill, HooksConfig, ActivationMode } from '@a1st/aix-schema';
|
|
2
2
|
import type { EditorPrompt, EditorRule, FileChange } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result of parsing editor-specific frontmatter for rules.
|
|
5
|
+
*/
|
|
6
|
+
export interface ParsedRuleFrontmatter {
|
|
7
|
+
/** Content without front-matter */
|
|
8
|
+
content: string;
|
|
9
|
+
/** Extracted metadata from front-matter */
|
|
10
|
+
metadata: {
|
|
11
|
+
activation?: ActivationMode;
|
|
12
|
+
description?: string;
|
|
13
|
+
globs?: string[];
|
|
14
|
+
};
|
|
15
|
+
/** Raw frontmatter fields for round-tripping unknown fields */
|
|
16
|
+
rawFrontmatter?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Result of parsing editor-specific frontmatter for prompts.
|
|
20
|
+
*/
|
|
21
|
+
export interface ParsedPromptFrontmatter {
|
|
22
|
+
/** Content without front-matter */
|
|
23
|
+
content: string;
|
|
24
|
+
/** Description extracted from frontmatter */
|
|
25
|
+
description?: string;
|
|
26
|
+
/** Argument hint extracted from frontmatter */
|
|
27
|
+
argumentHint?: string;
|
|
28
|
+
/** Raw frontmatter fields for round-tripping unknown fields */
|
|
29
|
+
rawFrontmatter?: Record<string, unknown>;
|
|
30
|
+
}
|
|
3
31
|
/**
|
|
4
32
|
* Strategy for formatting and writing rules to an editor. Each editor has different rule file
|
|
5
33
|
* formats and activation mode syntax.
|
|
@@ -18,6 +46,10 @@ export interface RulesStrategy {
|
|
|
18
46
|
rules: string[];
|
|
19
47
|
warnings: string[];
|
|
20
48
|
};
|
|
49
|
+
/** Detect if raw content appears to be in this editor's frontmatter format */
|
|
50
|
+
detectFormat?(content: string): boolean;
|
|
51
|
+
/** Parse editor-specific frontmatter into unified LoadedRule metadata */
|
|
52
|
+
parseFrontmatter?(content: string): ParsedRuleFrontmatter;
|
|
21
53
|
}
|
|
22
54
|
/**
|
|
23
55
|
* Strategy for formatting and writing MCP configuration to an editor. Each editor has different
|
|
@@ -33,8 +65,18 @@ export interface McpStrategy {
|
|
|
33
65
|
isGlobalOnly?(): boolean;
|
|
34
66
|
/** Format MCP config for this editor */
|
|
35
67
|
formatConfig(mcp: Record<string, McpServerConfig>): string;
|
|
36
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Get the MCP config file path. By default this is relative to the editor config dir (e.g.,
|
|
70
|
+
* `'mcp.json'` → `{configDir}/mcp.json`). When {@link isProjectRootConfig} returns `true`, the
|
|
71
|
+
* path is relative to the project root instead (e.g., `'.mcp.json'` → `{projectRoot}/.mcp.json`).
|
|
72
|
+
*/
|
|
37
73
|
getConfigPath(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Whether the MCP config file lives at the project root rather than inside the editor config
|
|
76
|
+
* dir. Defaults to `false` when not implemented. Claude Code uses this because it reads
|
|
77
|
+
* `.mcp.json` from the project root, not from `.claude/`.
|
|
78
|
+
*/
|
|
79
|
+
isProjectRootConfig?(): boolean;
|
|
38
80
|
/** Get the global MCP config path relative to home directory, or null if not supported */
|
|
39
81
|
getGlobalMcpConfigPath(): string | null;
|
|
40
82
|
/** Parse MCP config from file content */
|
|
@@ -102,6 +144,10 @@ export interface PromptsStrategy {
|
|
|
102
144
|
prompts: Record<string, string>;
|
|
103
145
|
warnings: string[];
|
|
104
146
|
}>;
|
|
147
|
+
/** Detect if raw content appears to be in this editor's frontmatter format */
|
|
148
|
+
detectFormat?(content: string): boolean;
|
|
149
|
+
/** Parse editor-specific frontmatter into unified LoadedPrompt fields */
|
|
150
|
+
parseFrontmatter?(content: string): ParsedPromptFrontmatter;
|
|
105
151
|
}
|
|
106
152
|
/**
|
|
107
153
|
* Strategy for formatting and writing hooks to an editor. Each editor has different hook event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editors/strategies/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editors/strategies/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EditorPrompt } from '../../types.js';
|
|
2
|
-
import type { PromptsStrategy } from '../types.js';
|
|
2
|
+
import type { ParsedPromptFrontmatter, PromptsStrategy } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* VS Code prompts strategy. Uses markdown files with YAML frontmatter in `.github/prompts/`.
|
|
5
5
|
* Files use `.prompt.md` extension. Supports `description` and `argument-hint` frontmatter fields.
|
|
@@ -14,5 +14,15 @@ export declare class VSCodePromptsStrategy implements PromptsStrategy {
|
|
|
14
14
|
prompts: Record<string, string>;
|
|
15
15
|
warnings: string[];
|
|
16
16
|
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Detect if content appears to be in VS Code's prompt frontmatter format.
|
|
19
|
+
* VS Code prompts use `mode:` or `tools:` fields.
|
|
20
|
+
*/
|
|
21
|
+
detectFormat(content: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Parse VS Code-specific frontmatter into unified format.
|
|
24
|
+
* Extracts `description` and `argument-hint` fields.
|
|
25
|
+
*/
|
|
26
|
+
parseFrontmatter(rawContent: string): ParsedPromptFrontmatter;
|
|
17
27
|
}
|
|
18
28
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/vscode/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/vscode/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5E;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,eAAe;IAC1D,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAKvB,gBAAgB,IAAI,MAAM;IAI1B,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAUrC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAyBpC,kBAAkB,CACrB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiDnE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IActC;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB;CAiB/D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import pMap from 'p-map';
|
|
2
2
|
import { platform } from 'node:os';
|
|
3
|
+
import { extractFrontmatter, parseYamlValue } from '../../../frontmatter-utils.js';
|
|
3
4
|
/**
|
|
4
5
|
* VS Code prompts strategy. Uses markdown files with YAML frontmatter in `.github/prompts/`.
|
|
5
6
|
* Files use `.prompt.md` extension. Supports `description` and `argument-hint` frontmatter fields.
|
|
@@ -77,5 +78,33 @@ export class VSCodePromptsStrategy {
|
|
|
77
78
|
}
|
|
78
79
|
return { prompts, warnings };
|
|
79
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Detect if content appears to be in VS Code's prompt frontmatter format.
|
|
83
|
+
* VS Code prompts use `mode:` or `tools:` fields.
|
|
84
|
+
*/
|
|
85
|
+
detectFormat(content) {
|
|
86
|
+
const { frontmatter, hasFrontmatter } = extractFrontmatter(content);
|
|
87
|
+
if (!hasFrontmatter) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const lines = frontmatter.split('\n'), hasMode = parseYamlValue(lines, 'mode') !== undefined, hasTools = parseYamlValue(lines, 'tools') !== undefined;
|
|
91
|
+
return hasMode || hasTools;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parse VS Code-specific frontmatter into unified format.
|
|
95
|
+
* Extracts `description` and `argument-hint` fields.
|
|
96
|
+
*/
|
|
97
|
+
parseFrontmatter(rawContent) {
|
|
98
|
+
const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
|
|
99
|
+
if (!hasFrontmatter) {
|
|
100
|
+
return { content: rawContent };
|
|
101
|
+
}
|
|
102
|
+
const lines = frontmatter.split('\n'), description = parseYamlValue(lines, 'description'), argumentHint = parseYamlValue(lines, 'argument-hint');
|
|
103
|
+
return {
|
|
104
|
+
content,
|
|
105
|
+
description,
|
|
106
|
+
argumentHint,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
80
109
|
}
|
|
81
110
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/vscode/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/vscode/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EditorPrompt } from '../../types.js';
|
|
2
|
-
import type { PromptsStrategy } from '../types.js';
|
|
2
|
+
import type { ParsedPromptFrontmatter, PromptsStrategy } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Windsurf prompts strategy. Uses markdown files with YAML frontmatter in `.windsurf/workflows/`.
|
|
5
5
|
* Supports `description` frontmatter field.
|
|
@@ -14,5 +14,15 @@ export declare class WindsurfPromptsStrategy implements PromptsStrategy {
|
|
|
14
14
|
prompts: Record<string, string>;
|
|
15
15
|
warnings: string[];
|
|
16
16
|
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Detect if content appears to be in Windsurf's workflow frontmatter format.
|
|
19
|
+
* Windsurf workflows use `description:` in frontmatter (but not rules-specific fields like `trigger`).
|
|
20
|
+
*/
|
|
21
|
+
detectFormat(content: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Parse Windsurf-specific frontmatter into unified format.
|
|
24
|
+
* Only extracts `description` field.
|
|
25
|
+
*/
|
|
26
|
+
parseFrontmatter(rawContent: string): ParsedPromptFrontmatter;
|
|
17
27
|
}
|
|
18
28
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5E;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC5D,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAIvB,gBAAgB,IAAI,MAAM;IAI1B,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAoBpC,kBAAkB,CACrB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA+CnE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAetC;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB;CAe/D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extractFrontmatter, parseYamlValue } from '../../../frontmatter-utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Windsurf prompts strategy. Uses markdown files with YAML frontmatter in `.windsurf/workflows/`.
|
|
3
4
|
* Supports `description` frontmatter field.
|
|
@@ -64,5 +65,33 @@ export class WindsurfPromptsStrategy {
|
|
|
64
65
|
}
|
|
65
66
|
return { prompts, warnings };
|
|
66
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Detect if content appears to be in Windsurf's workflow frontmatter format.
|
|
70
|
+
* Windsurf workflows use `description:` in frontmatter (but not rules-specific fields like `trigger`).
|
|
71
|
+
*/
|
|
72
|
+
detectFormat(content) {
|
|
73
|
+
const { frontmatter, hasFrontmatter } = extractFrontmatter(content);
|
|
74
|
+
if (!hasFrontmatter) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const lines = frontmatter.split('\n'), hasDescription = parseYamlValue(lines, 'description') !== undefined, hasTrigger = parseYamlValue(lines, 'trigger') !== undefined;
|
|
78
|
+
// Windsurf prompts have description but NOT trigger (trigger is rules-specific)
|
|
79
|
+
return hasDescription && !hasTrigger;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse Windsurf-specific frontmatter into unified format.
|
|
83
|
+
* Only extracts `description` field.
|
|
84
|
+
*/
|
|
85
|
+
parseFrontmatter(rawContent) {
|
|
86
|
+
const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
|
|
87
|
+
if (!hasFrontmatter) {
|
|
88
|
+
return { content: rawContent };
|
|
89
|
+
}
|
|
90
|
+
const lines = frontmatter.split('\n'), description = parseYamlValue(lines, 'description');
|
|
91
|
+
return {
|
|
92
|
+
content,
|
|
93
|
+
description,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
67
96
|
}
|
|
68
97
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RulesStrategy } from '../types.js';
|
|
1
|
+
import type { ParsedRuleFrontmatter, RulesStrategy } from '../types.js';
|
|
2
2
|
import type { EditorRule } from '../../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Windsurf rules strategy. Uses markdown files with YAML frontmatter containing a `trigger` field
|
|
@@ -13,5 +13,18 @@ export declare class WindsurfRulesStrategy implements RulesStrategy {
|
|
|
13
13
|
rules: string[];
|
|
14
14
|
warnings: string[];
|
|
15
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Detect if content appears to be in Windsurf's frontmatter format.
|
|
18
|
+
* Windsurf uses `trigger:` field in frontmatter.
|
|
19
|
+
*/
|
|
20
|
+
detectFormat(content: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Parse Windsurf-specific frontmatter into unified format.
|
|
23
|
+
* - `trigger: always_on` → `activation: 'always'`
|
|
24
|
+
* - `trigger: model_decision` → `activation: 'auto'`
|
|
25
|
+
* - `trigger: glob` → `activation: 'glob'`
|
|
26
|
+
* - `trigger: manual` → `activation: 'manual'`
|
|
27
|
+
*/
|
|
28
|
+
parseFrontmatter(rawContent: string): ParsedRuleFrontmatter;
|
|
16
29
|
}
|
|
17
30
|
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACxD,WAAW,IAAI,MAAM;IAIrB,gBAAgB,IAAI,MAAM;IAI1B,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAInC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IA8BpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAS1E;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAYtC;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB;CAgC7D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extractFrontmatter, parseYamlValue } from '../../../frontmatter-utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Windsurf rules strategy. Uses markdown files with YAML frontmatter containing a `trigger` field
|
|
3
4
|
* for activation mode.
|
|
@@ -36,11 +37,6 @@ export class WindsurfRulesStrategy {
|
|
|
36
37
|
break;
|
|
37
38
|
}
|
|
38
39
|
lines.push('---', '');
|
|
39
|
-
// Include rule name as heading for context, but only if content doesn't already start with one
|
|
40
|
-
const contentStartsWithHeading = /^#\s/.test(rule.content.trim());
|
|
41
|
-
if (rule.name && !contentStartsWithHeading) {
|
|
42
|
-
lines.push(`# ${rule.name}`, '');
|
|
43
|
-
}
|
|
44
40
|
lines.push(rule.content);
|
|
45
41
|
return lines.join('\n');
|
|
46
42
|
}
|
|
@@ -51,5 +47,47 @@ export class WindsurfRulesStrategy {
|
|
|
51
47
|
}
|
|
52
48
|
return { rules, warnings: [] };
|
|
53
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Detect if content appears to be in Windsurf's frontmatter format.
|
|
52
|
+
* Windsurf uses `trigger:` field in frontmatter.
|
|
53
|
+
*/
|
|
54
|
+
detectFormat(content) {
|
|
55
|
+
const { frontmatter, hasFrontmatter } = extractFrontmatter(content);
|
|
56
|
+
if (!hasFrontmatter) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const lines = frontmatter.split('\n');
|
|
60
|
+
return parseYamlValue(lines, 'trigger') !== undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Parse Windsurf-specific frontmatter into unified format.
|
|
64
|
+
* - `trigger: always_on` → `activation: 'always'`
|
|
65
|
+
* - `trigger: model_decision` → `activation: 'auto'`
|
|
66
|
+
* - `trigger: glob` → `activation: 'glob'`
|
|
67
|
+
* - `trigger: manual` → `activation: 'manual'`
|
|
68
|
+
*/
|
|
69
|
+
parseFrontmatter(rawContent) {
|
|
70
|
+
const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
|
|
71
|
+
if (!hasFrontmatter) {
|
|
72
|
+
return { content: rawContent, metadata: {} };
|
|
73
|
+
}
|
|
74
|
+
const lines = frontmatter.split('\n'), trigger = parseYamlValue(lines, 'trigger'), description = parseYamlValue(lines, 'description'), globs = parseYamlValue(lines, 'globs');
|
|
75
|
+
// Map Windsurf trigger values to unified activation modes
|
|
76
|
+
const triggerToActivation = {
|
|
77
|
+
always_on: 'always',
|
|
78
|
+
model_decision: 'auto',
|
|
79
|
+
glob: 'glob',
|
|
80
|
+
manual: 'manual',
|
|
81
|
+
};
|
|
82
|
+
const activation = trigger ? triggerToActivation[trigger] : undefined, globsArray = typeof globs === 'string' ? globs.split(',').map((g) => g.trim()) : globs;
|
|
83
|
+
return {
|
|
84
|
+
content,
|
|
85
|
+
metadata: {
|
|
86
|
+
activation,
|
|
87
|
+
description,
|
|
88
|
+
globs: globsArray,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
54
92
|
}
|
|
55
93
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/rules.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAC/B,WAAW;QACR,OAAO,OAAO,CAAC;IAClB,CAAC;IAED,gBAAgB;QACb,OAAO,KAAK,CAAC;IAChB,CAAC;IAED,kBAAkB;QACf,OAAO,4CAA4C,CAAC;IACvD,CAAC;IAED,UAAU,CAAC,IAAgB;QACxB,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;QAEhC,iDAAiD;QACjD,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC/B,KAAK,QAAQ;gBACV,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACjC,MAAM;YACT,KAAK,MAAM;gBACR,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM;YACT,KAAK,MAAM;gBACR,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM;YACT,KAAK,QAAQ;gBACV,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,MAAM;QACT,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/rules.ts"],"names":[],"mappings":"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"}
|