@a1st/aix-core 0.0.4 → 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.
Files changed (129) hide show
  1. package/dist/cache/index.d.ts +1 -1
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/index.js +1 -1
  4. package/dist/cache/index.js.map +1 -1
  5. package/dist/cache/paths.d.ts +9 -0
  6. package/dist/cache/paths.d.ts.map +1 -1
  7. package/dist/cache/paths.js +13 -0
  8. package/dist/cache/paths.js.map +1 -1
  9. package/dist/editors/adapters/base.d.ts +5 -0
  10. package/dist/editors/adapters/base.d.ts.map +1 -1
  11. package/dist/editors/adapters/base.js +1 -1
  12. package/dist/editors/adapters/base.js.map +1 -1
  13. package/dist/editors/adapters/claude-code.d.ts +2 -1
  14. package/dist/editors/adapters/claude-code.d.ts.map +1 -1
  15. package/dist/editors/adapters/claude-code.js +11 -4
  16. package/dist/editors/adapters/claude-code.js.map +1 -1
  17. package/dist/editors/adapters/codex.d.ts +1 -0
  18. package/dist/editors/adapters/codex.d.ts.map +1 -1
  19. package/dist/editors/adapters/codex.js +7 -0
  20. package/dist/editors/adapters/codex.js.map +1 -1
  21. package/dist/editors/adapters/cursor.d.ts +1 -0
  22. package/dist/editors/adapters/cursor.d.ts.map +1 -1
  23. package/dist/editors/adapters/cursor.js +7 -0
  24. package/dist/editors/adapters/cursor.js.map +1 -1
  25. package/dist/editors/adapters/vscode.d.ts +1 -0
  26. package/dist/editors/adapters/vscode.d.ts.map +1 -1
  27. package/dist/editors/adapters/vscode.js +7 -0
  28. package/dist/editors/adapters/vscode.js.map +1 -1
  29. package/dist/editors/adapters/windsurf.d.ts +1 -0
  30. package/dist/editors/adapters/windsurf.d.ts.map +1 -1
  31. package/dist/editors/adapters/windsurf.js +7 -0
  32. package/dist/editors/adapters/windsurf.js.map +1 -1
  33. package/dist/editors/adapters/zed.d.ts +1 -0
  34. package/dist/editors/adapters/zed.d.ts.map +1 -1
  35. package/dist/editors/adapters/zed.js +7 -0
  36. package/dist/editors/adapters/zed.js.map +1 -1
  37. package/dist/editors/import.d.ts +2 -1
  38. package/dist/editors/import.d.ts.map +1 -1
  39. package/dist/editors/import.js +12 -9
  40. package/dist/editors/import.js.map +1 -1
  41. package/dist/editors/install.d.ts.map +1 -1
  42. package/dist/editors/install.js +1 -36
  43. package/dist/editors/install.js.map +1 -1
  44. package/dist/editors/strategies/claude-code/mcp.d.ts +6 -2
  45. package/dist/editors/strategies/claude-code/mcp.d.ts.map +1 -1
  46. package/dist/editors/strategies/claude-code/mcp.js +40 -2
  47. package/dist/editors/strategies/claude-code/mcp.js.map +1 -1
  48. package/dist/editors/strategies/claude-code/prompts.d.ts +11 -1
  49. package/dist/editors/strategies/claude-code/prompts.d.ts.map +1 -1
  50. package/dist/editors/strategies/claude-code/prompts.js +29 -0
  51. package/dist/editors/strategies/claude-code/prompts.js.map +1 -1
  52. package/dist/editors/strategies/claude-code/rules.d.ts +12 -1
  53. package/dist/editors/strategies/claude-code/rules.d.ts.map +1 -1
  54. package/dist/editors/strategies/claude-code/rules.js +49 -5
  55. package/dist/editors/strategies/claude-code/rules.js.map +1 -1
  56. package/dist/editors/strategies/codex/prompts.d.ts +11 -1
  57. package/dist/editors/strategies/codex/prompts.d.ts.map +1 -1
  58. package/dist/editors/strategies/codex/prompts.js +34 -0
  59. package/dist/editors/strategies/codex/prompts.js.map +1 -1
  60. package/dist/editors/strategies/cursor/rules.d.ts +14 -1
  61. package/dist/editors/strategies/cursor/rules.d.ts.map +1 -1
  62. package/dist/editors/strategies/cursor/rules.js +51 -5
  63. package/dist/editors/strategies/cursor/rules.js.map +1 -1
  64. package/dist/editors/strategies/shared/standard-mcp.d.ts +3 -1
  65. package/dist/editors/strategies/shared/standard-mcp.d.ts.map +1 -1
  66. package/dist/editors/strategies/shared/standard-mcp.js +5 -1
  67. package/dist/editors/strategies/shared/standard-mcp.js.map +1 -1
  68. package/dist/editors/strategies/types.d.ts +48 -2
  69. package/dist/editors/strategies/types.d.ts.map +1 -1
  70. package/dist/editors/strategies/vscode/prompts.d.ts +11 -1
  71. package/dist/editors/strategies/vscode/prompts.d.ts.map +1 -1
  72. package/dist/editors/strategies/vscode/prompts.js +29 -0
  73. package/dist/editors/strategies/vscode/prompts.js.map +1 -1
  74. package/dist/editors/strategies/windsurf/prompts.d.ts +11 -1
  75. package/dist/editors/strategies/windsurf/prompts.d.ts.map +1 -1
  76. package/dist/editors/strategies/windsurf/prompts.js +29 -0
  77. package/dist/editors/strategies/windsurf/prompts.js.map +1 -1
  78. package/dist/editors/strategies/windsurf/rules.d.ts +14 -1
  79. package/dist/editors/strategies/windsurf/rules.d.ts.map +1 -1
  80. package/dist/editors/strategies/windsurf/rules.js +43 -5
  81. package/dist/editors/strategies/windsurf/rules.js.map +1 -1
  82. package/dist/editors/types.d.ts +5 -0
  83. package/dist/editors/types.d.ts.map +1 -1
  84. package/dist/frontmatter-parser.d.ts +24 -0
  85. package/dist/frontmatter-parser.d.ts.map +1 -0
  86. package/dist/frontmatter-parser.js +137 -0
  87. package/dist/frontmatter-parser.js.map +1 -0
  88. package/dist/frontmatter-utils.d.ts +36 -0
  89. package/dist/frontmatter-utils.d.ts.map +1 -0
  90. package/dist/frontmatter-utils.js +109 -0
  91. package/dist/frontmatter-utils.js.map +1 -0
  92. package/dist/git-download.d.ts +18 -0
  93. package/dist/git-download.d.ts.map +1 -0
  94. package/dist/git-download.js +49 -0
  95. package/dist/git-download.js.map +1 -0
  96. package/dist/import-writer.d.ts +6 -1
  97. package/dist/import-writer.d.ts.map +1 -1
  98. package/dist/import-writer.js +8 -5
  99. package/dist/import-writer.js.map +1 -1
  100. package/dist/inheritance.d.ts +2 -0
  101. package/dist/inheritance.d.ts.map +1 -1
  102. package/dist/inheritance.js +172 -41
  103. package/dist/inheritance.js.map +1 -1
  104. package/dist/loader.d.ts.map +1 -1
  105. package/dist/loader.js +2 -1
  106. package/dist/loader.js.map +1 -1
  107. package/dist/prompts/loader.d.ts.map +1 -1
  108. package/dist/prompts/loader.js +11 -39
  109. package/dist/prompts/loader.js.map +1 -1
  110. package/dist/remote-loader.d.ts.map +1 -1
  111. package/dist/remote-loader.js +19 -44
  112. package/dist/remote-loader.js.map +1 -1
  113. package/dist/rules/loader.d.ts.map +1 -1
  114. package/dist/rules/loader.js +23 -13
  115. package/dist/rules/loader.js.map +1 -1
  116. package/dist/skills/parser.d.ts +3 -1
  117. package/dist/skills/parser.d.ts.map +1 -1
  118. package/dist/skills/parser.js +22 -10
  119. package/dist/skills/parser.js.map +1 -1
  120. package/dist/skills/validate.js +1 -1
  121. package/dist/skills/validate.js.map +1 -1
  122. package/dist/updater.d.ts.map +1 -1
  123. package/dist/updater.js +5 -12
  124. package/dist/updater.js.map +1 -1
  125. package/dist/url-parsing.d.ts +1 -7
  126. package/dist/url-parsing.d.ts.map +1 -1
  127. package/dist/url-parsing.js +2 -19
  128. package/dist/url-parsing.js.map +1 -1
  129. package/package.json +8 -1
@@ -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 and Claude Code. Uses `mcp.json` with a `mcpServers` object.
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;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACpD,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM;IAIvB,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
+ {"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 and Claude Code. Uses `mcp.json` with a `mcpServers` object.
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":"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"}
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
- /** Get the MCP config file path relative to the editor config dir (e.g., 'mcp.json') */
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":"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"}
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;AAEnD;;;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;CAgDrE"}
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":"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"}
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;AAGnC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEnF;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAC/B,WAAW;QACR,OAAO,IAAI,CAAC;IACf,CAAC;IAED,aAAa;QACV,+DAA+D;QAC/D,OAAO,oBAAoB,CAAC;IAC/B,CAAC;IAED,gBAAgB;QACb,OAAO,YAAY,CAAC;IACvB,CAAC;IAED,oBAAoB;QACjB,MAAM,KAAK,GAA2B;YACnC,MAAM,EAAE,+CAA+C;YACvD,KAAK,EAAE,2BAA2B;YAClC,KAAK,EAAE,mCAAmC;SAC5C,CAAC;QAEF,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,MAAoB;QAC9B,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtB,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAChD,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACvB,WAAW,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB,CACrB,KAAe,EACf,QAA+C;QAE/C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAO1F,MAAM,OAAO,GAAkB,MAAM,IAAI,CACtC,OAAO,EACP,KAAK,EAAE,IAAI,EAAwB,EAAE;YAClC,IAAI,CAAC;gBACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,OAAO;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC/B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;qBACzB,CAAC;gBACL,CAAC;gBACD,OAAO,IAAI,CAAC;YACf,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACZ,OAAO;oBACJ,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,yBAAyB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE;iBACrE,CAAC;YACL,CAAC;QACJ,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACpB,CAAC;QAEF,MAAM,OAAO,GAA2B,EAAE,EACpC,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACX,SAAS;YACZ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACzC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAChC,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,EAC/B,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,SAAS,EACrD,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;QAE9D,OAAO,OAAO,IAAI,QAAQ,CAAC;IAC9B,CAAC;IAED;;;OAGG;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,CAAC;QAClC,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAC/B,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAuB,EACxE,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE,eAAe,CAAuB,CAAC;QAElF,OAAO;YACJ,OAAO;YACP,WAAW;YACX,YAAY;SACd,CAAC;IACL,CAAC;CACH"}
@@ -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;AAEnD;;;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;CA8CrE"}
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":"AAGA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACjC,WAAW;QACR,OAAO,IAAI,CAAC;IACf,CAAC;IAED,aAAa;QACV,OAAO,WAAW,CAAC;IACtB,CAAC;IAED,gBAAgB;QACb,OAAO,KAAK,CAAC;IAChB,CAAC;IAED,oBAAoB;QACjB,OAAO,oCAAoC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,MAAoB;QAC9B,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEtB,6DAA6D;QAC7D,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpE,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB,CACrB,KAAe,EACf,QAA+C;QAE/C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAOvD,MAAM,OAAO,GAAkB,MAAM,OAAO,CAAC,GAAG,CAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAwB,EAAE;YAC9C,IAAI,CAAC;gBACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,OAAO;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC/B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;qBACzB,CAAC;gBACL,CAAC;gBACD,OAAO,IAAI,CAAC;YACf,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACZ,OAAO;oBACJ,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,yBAAyB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE;iBACrE,CAAC;YACL,CAAC;QACJ,CAAC,CAAC,CACJ,CAAC;QAEF,MAAM,OAAO,GAA2B,EAAE,EACpC,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACX,SAAS;YACZ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACzC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACH"}
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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;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;IAsCpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;CAQ5E"}
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;QAEtB,+FAA+F;QAC/F,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAElE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,OAAe;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;CACH"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/windsurf/rules.ts"],"names":[],"mappings":"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"}
@@ -151,6 +151,11 @@ export interface ApplyResult {
151
151
  export interface EditorAdapter {
152
152
  readonly name: EditorName;
153
153
  readonly configDir: string;
154
+ /**
155
+ * Get the global data/config paths for this editor by platform. Used to detect if the editor is
156
+ * installed globally on the system. Paths are relative to the user's home directory.
157
+ */
158
+ getGlobalDataPaths(): Partial<Record<NodeJS.Platform, string[]>>;
154
159
  /**
155
160
  * Check if this editor's config directory exists in the project.
156
161
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/editors/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/editors/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Auto-detecting frontmatter parser that uses editor-specific strategies to parse frontmatter.
3
+ * Uses ordered priority for detection: Windsurf → Cursor → Claude Code → VS Code.
4
+ */
5
+ import type { ParsedRuleFrontmatter, ParsedPromptFrontmatter, RulesStrategy, PromptsStrategy } from './editors/strategies/types.js';
6
+ /**
7
+ * Parse rule frontmatter using auto-detection. Tries each strategy in priority order and uses the
8
+ * first one that detects its format. Falls back to generic parsing if no strategy matches.
9
+ *
10
+ * @param rawContent - Raw markdown content potentially containing front-matter
11
+ * @param strategy - Optional specific strategy to use (skips auto-detection)
12
+ * @returns Parsed frontmatter with unified metadata
13
+ */
14
+ export declare function parseRuleFrontmatter(rawContent: string, strategy?: RulesStrategy): ParsedRuleFrontmatter;
15
+ /**
16
+ * Parse prompt frontmatter using auto-detection. Tries each strategy in priority order and uses
17
+ * the first one that detects its format. Falls back to generic parsing if no strategy matches.
18
+ *
19
+ * @param rawContent - Raw markdown content potentially containing front-matter
20
+ * @param strategy - Optional specific strategy to use (skips auto-detection)
21
+ * @returns Parsed frontmatter with unified fields
22
+ */
23
+ export declare function parsePromptFrontmatter(rawContent: string, strategy?: PromptsStrategy): ParsedPromptFrontmatter;
24
+ //# sourceMappingURL=frontmatter-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter-parser.d.ts","sourceRoot":"","sources":["../src/frontmatter-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAyBpI;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,aAAa,GACxB,qBAAqB,CAevB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,eAAe,GAC1B,uBAAuB,CAezB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Auto-detecting frontmatter parser that uses editor-specific strategies to parse frontmatter.
3
+ * Uses ordered priority for detection: Windsurf → Cursor → Claude Code → VS Code.
4
+ */
5
+ import { WindsurfRulesStrategy } from './editors/strategies/windsurf/rules.js';
6
+ import { WindsurfPromptsStrategy } from './editors/strategies/windsurf/prompts.js';
7
+ import { CursorRulesStrategy } from './editors/strategies/cursor/rules.js';
8
+ import { ClaudeCodeRulesStrategy } from './editors/strategies/claude-code/rules.js';
9
+ import { ClaudeCodePromptsStrategy } from './editors/strategies/claude-code/prompts.js';
10
+ import { VSCodePromptsStrategy } from './editors/strategies/vscode/prompts.js';
11
+ import { CodexPromptsStrategy } from './editors/strategies/codex/prompts.js';
12
+ import { extractFrontmatter, parseYamlValue } from './frontmatter-utils.js';
13
+ /** Ordered list of rules strategies for auto-detection (priority order) */
14
+ const RULES_STRATEGIES = [
15
+ new WindsurfRulesStrategy(),
16
+ new CursorRulesStrategy(),
17
+ new ClaudeCodeRulesStrategy(),
18
+ ];
19
+ /** Ordered list of prompts strategies for auto-detection (priority order) */
20
+ const PROMPTS_STRATEGIES = [
21
+ new WindsurfPromptsStrategy(),
22
+ new ClaudeCodePromptsStrategy(),
23
+ new VSCodePromptsStrategy(),
24
+ new CodexPromptsStrategy(),
25
+ ];
26
+ /**
27
+ * Parse rule frontmatter using auto-detection. Tries each strategy in priority order and uses the
28
+ * first one that detects its format. Falls back to generic parsing if no strategy matches.
29
+ *
30
+ * @param rawContent - Raw markdown content potentially containing front-matter
31
+ * @param strategy - Optional specific strategy to use (skips auto-detection)
32
+ * @returns Parsed frontmatter with unified metadata
33
+ */
34
+ export function parseRuleFrontmatter(rawContent, strategy) {
35
+ // Use provided strategy if given
36
+ if (strategy?.parseFrontmatter) {
37
+ return strategy.parseFrontmatter(rawContent);
38
+ }
39
+ // Try auto-detection with priority order
40
+ for (const strat of RULES_STRATEGIES) {
41
+ if (strat.detectFormat?.(rawContent)) {
42
+ return strat.parseFrontmatter(rawContent);
43
+ }
44
+ }
45
+ // Fall back to generic parsing
46
+ return parseGenericRuleFrontmatter(rawContent);
47
+ }
48
+ /**
49
+ * Parse prompt frontmatter using auto-detection. Tries each strategy in priority order and uses
50
+ * the first one that detects its format. Falls back to generic parsing if no strategy matches.
51
+ *
52
+ * @param rawContent - Raw markdown content potentially containing front-matter
53
+ * @param strategy - Optional specific strategy to use (skips auto-detection)
54
+ * @returns Parsed frontmatter with unified fields
55
+ */
56
+ export function parsePromptFrontmatter(rawContent, strategy) {
57
+ // Use provided strategy if given
58
+ if (strategy?.parseFrontmatter) {
59
+ return strategy.parseFrontmatter(rawContent);
60
+ }
61
+ // Try auto-detection with priority order
62
+ for (const strat of PROMPTS_STRATEGIES) {
63
+ if (strat.detectFormat?.(rawContent)) {
64
+ return strat.parseFrontmatter(rawContent);
65
+ }
66
+ }
67
+ // Fall back to generic parsing
68
+ return parseGenericPromptFrontmatter(rawContent);
69
+ }
70
+ /**
71
+ * Generic rule frontmatter parsing that handles common fields across editors.
72
+ * Used as fallback when no editor-specific format is detected.
73
+ */
74
+ function parseGenericRuleFrontmatter(rawContent) {
75
+ const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
76
+ if (!hasFrontmatter) {
77
+ return { content: rawContent, metadata: {} };
78
+ }
79
+ const lines = frontmatter.split('\n'), description = parseYamlValue(lines, 'description'), globs = parseYamlValue(lines, 'globs'), paths = parseYamlValue(lines, 'paths'), trigger = parseYamlValue(lines, 'trigger'), alwaysApply = parseYamlValue(lines, 'alwaysApply');
80
+ // Parse globs from various sources
81
+ let globsArray;
82
+ if (typeof globs === 'string') {
83
+ globsArray = globs.split(',').map((g) => g.trim());
84
+ }
85
+ else if (Array.isArray(globs)) {
86
+ globsArray = globs;
87
+ }
88
+ else if (Array.isArray(paths)) {
89
+ globsArray = paths;
90
+ }
91
+ // Determine activation mode from various editor formats
92
+ let activation;
93
+ // Windsurf trigger values
94
+ const triggerToActivation = {
95
+ always_on: 'always',
96
+ model_decision: 'auto',
97
+ glob: 'glob',
98
+ manual: 'manual',
99
+ };
100
+ if (trigger && triggerToActivation[trigger]) {
101
+ activation = triggerToActivation[trigger];
102
+ }
103
+ else if (alwaysApply === true) {
104
+ activation = 'always';
105
+ }
106
+ else if (globsArray && globsArray.length > 0) {
107
+ activation = 'glob';
108
+ }
109
+ else if (alwaysApply === false) {
110
+ activation = description ? 'auto' : 'manual';
111
+ }
112
+ return {
113
+ content,
114
+ metadata: {
115
+ activation,
116
+ description,
117
+ globs: globsArray,
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * Generic prompt frontmatter parsing that handles common fields across editors.
123
+ * Used as fallback when no editor-specific format is detected.
124
+ */
125
+ function parseGenericPromptFrontmatter(rawContent) {
126
+ const { frontmatter, content, hasFrontmatter } = extractFrontmatter(rawContent);
127
+ if (!hasFrontmatter) {
128
+ return { content: rawContent };
129
+ }
130
+ const lines = frontmatter.split('\n'), description = parseYamlValue(lines, 'description'), argumentHint = parseYamlValue(lines, 'argument-hint');
131
+ return {
132
+ content,
133
+ description,
134
+ argumentHint,
135
+ };
136
+ }
137
+ //# sourceMappingURL=frontmatter-parser.js.map