@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.
Files changed (135) hide show
  1. package/README.md +39 -0
  2. package/dist/cache/index.d.ts +1 -1
  3. package/dist/cache/index.d.ts.map +1 -1
  4. package/dist/cache/index.js +1 -1
  5. package/dist/cache/index.js.map +1 -1
  6. package/dist/cache/paths.d.ts +13 -8
  7. package/dist/cache/paths.d.ts.map +1 -1
  8. package/dist/cache/paths.js +19 -12
  9. package/dist/cache/paths.js.map +1 -1
  10. package/dist/editors/adapters/base.d.ts +9 -1
  11. package/dist/editors/adapters/base.d.ts.map +1 -1
  12. package/dist/editors/adapters/base.js +7 -5
  13. package/dist/editors/adapters/base.js.map +1 -1
  14. package/dist/editors/adapters/claude-code.d.ts +2 -1
  15. package/dist/editors/adapters/claude-code.d.ts.map +1 -1
  16. package/dist/editors/adapters/claude-code.js +13 -5
  17. package/dist/editors/adapters/claude-code.js.map +1 -1
  18. package/dist/editors/adapters/codex.d.ts +1 -0
  19. package/dist/editors/adapters/codex.d.ts.map +1 -1
  20. package/dist/editors/adapters/codex.js +9 -1
  21. package/dist/editors/adapters/codex.js.map +1 -1
  22. package/dist/editors/adapters/cursor.d.ts +1 -0
  23. package/dist/editors/adapters/cursor.d.ts.map +1 -1
  24. package/dist/editors/adapters/cursor.js +9 -1
  25. package/dist/editors/adapters/cursor.js.map +1 -1
  26. package/dist/editors/adapters/vscode.d.ts +1 -0
  27. package/dist/editors/adapters/vscode.d.ts.map +1 -1
  28. package/dist/editors/adapters/vscode.js +9 -1
  29. package/dist/editors/adapters/vscode.js.map +1 -1
  30. package/dist/editors/adapters/windsurf.d.ts +1 -0
  31. package/dist/editors/adapters/windsurf.d.ts.map +1 -1
  32. package/dist/editors/adapters/windsurf.js +9 -1
  33. package/dist/editors/adapters/windsurf.js.map +1 -1
  34. package/dist/editors/adapters/zed.d.ts +1 -0
  35. package/dist/editors/adapters/zed.d.ts.map +1 -1
  36. package/dist/editors/adapters/zed.js +9 -1
  37. package/dist/editors/adapters/zed.js.map +1 -1
  38. package/dist/editors/import.d.ts +2 -1
  39. package/dist/editors/import.d.ts.map +1 -1
  40. package/dist/editors/import.js +12 -9
  41. package/dist/editors/import.js.map +1 -1
  42. package/dist/editors/install.d.ts.map +1 -1
  43. package/dist/editors/install.js +1 -36
  44. package/dist/editors/install.js.map +1 -1
  45. package/dist/editors/strategies/claude-code/mcp.d.ts +6 -2
  46. package/dist/editors/strategies/claude-code/mcp.d.ts.map +1 -1
  47. package/dist/editors/strategies/claude-code/mcp.js +40 -2
  48. package/dist/editors/strategies/claude-code/mcp.js.map +1 -1
  49. package/dist/editors/strategies/claude-code/prompts.d.ts +11 -1
  50. package/dist/editors/strategies/claude-code/prompts.d.ts.map +1 -1
  51. package/dist/editors/strategies/claude-code/prompts.js +29 -0
  52. package/dist/editors/strategies/claude-code/prompts.js.map +1 -1
  53. package/dist/editors/strategies/claude-code/rules.d.ts +12 -1
  54. package/dist/editors/strategies/claude-code/rules.d.ts.map +1 -1
  55. package/dist/editors/strategies/claude-code/rules.js +49 -5
  56. package/dist/editors/strategies/claude-code/rules.js.map +1 -1
  57. package/dist/editors/strategies/codex/prompts.d.ts +11 -1
  58. package/dist/editors/strategies/codex/prompts.d.ts.map +1 -1
  59. package/dist/editors/strategies/codex/prompts.js +34 -0
  60. package/dist/editors/strategies/codex/prompts.js.map +1 -1
  61. package/dist/editors/strategies/cursor/rules.d.ts +14 -1
  62. package/dist/editors/strategies/cursor/rules.d.ts.map +1 -1
  63. package/dist/editors/strategies/cursor/rules.js +51 -5
  64. package/dist/editors/strategies/cursor/rules.js.map +1 -1
  65. package/dist/editors/strategies/shared/standard-mcp.d.ts +3 -1
  66. package/dist/editors/strategies/shared/standard-mcp.d.ts.map +1 -1
  67. package/dist/editors/strategies/shared/standard-mcp.js +5 -1
  68. package/dist/editors/strategies/shared/standard-mcp.js.map +1 -1
  69. package/dist/editors/strategies/types.d.ts +48 -2
  70. package/dist/editors/strategies/types.d.ts.map +1 -1
  71. package/dist/editors/strategies/vscode/prompts.d.ts +11 -1
  72. package/dist/editors/strategies/vscode/prompts.d.ts.map +1 -1
  73. package/dist/editors/strategies/vscode/prompts.js +29 -0
  74. package/dist/editors/strategies/vscode/prompts.js.map +1 -1
  75. package/dist/editors/strategies/windsurf/prompts.d.ts +11 -1
  76. package/dist/editors/strategies/windsurf/prompts.d.ts.map +1 -1
  77. package/dist/editors/strategies/windsurf/prompts.js +29 -0
  78. package/dist/editors/strategies/windsurf/prompts.js.map +1 -1
  79. package/dist/editors/strategies/windsurf/rules.d.ts +14 -1
  80. package/dist/editors/strategies/windsurf/rules.d.ts.map +1 -1
  81. package/dist/editors/strategies/windsurf/rules.js +43 -5
  82. package/dist/editors/strategies/windsurf/rules.js.map +1 -1
  83. package/dist/editors/types.d.ts +12 -0
  84. package/dist/editors/types.d.ts.map +1 -1
  85. package/dist/frontmatter-parser.d.ts +24 -0
  86. package/dist/frontmatter-parser.d.ts.map +1 -0
  87. package/dist/frontmatter-parser.js +137 -0
  88. package/dist/frontmatter-parser.js.map +1 -0
  89. package/dist/frontmatter-utils.d.ts +36 -0
  90. package/dist/frontmatter-utils.d.ts.map +1 -0
  91. package/dist/frontmatter-utils.js +109 -0
  92. package/dist/frontmatter-utils.js.map +1 -0
  93. package/dist/git-download.d.ts +18 -0
  94. package/dist/git-download.d.ts.map +1 -0
  95. package/dist/git-download.js +49 -0
  96. package/dist/git-download.js.map +1 -0
  97. package/dist/import-writer.d.ts +54 -10
  98. package/dist/import-writer.d.ts.map +1 -1
  99. package/dist/import-writer.js +305 -44
  100. package/dist/import-writer.js.map +1 -1
  101. package/dist/inheritance.d.ts +2 -0
  102. package/dist/inheritance.d.ts.map +1 -1
  103. package/dist/inheritance.js +172 -41
  104. package/dist/inheritance.js.map +1 -1
  105. package/dist/loader.d.ts +13 -0
  106. package/dist/loader.d.ts.map +1 -1
  107. package/dist/loader.js +5 -1
  108. package/dist/loader.js.map +1 -1
  109. package/dist/prompts/loader.d.ts.map +1 -1
  110. package/dist/prompts/loader.js +11 -39
  111. package/dist/prompts/loader.js.map +1 -1
  112. package/dist/remote-loader.d.ts +17 -1
  113. package/dist/remote-loader.d.ts.map +1 -1
  114. package/dist/remote-loader.js +76 -44
  115. package/dist/remote-loader.js.map +1 -1
  116. package/dist/rules/loader.d.ts.map +1 -1
  117. package/dist/rules/loader.js +23 -13
  118. package/dist/rules/loader.js.map +1 -1
  119. package/dist/skills/parser.d.ts +3 -1
  120. package/dist/skills/parser.d.ts.map +1 -1
  121. package/dist/skills/parser.js +22 -10
  122. package/dist/skills/parser.js.map +1 -1
  123. package/dist/skills/resolvers/git.d.ts.map +1 -1
  124. package/dist/skills/resolvers/git.js +10 -2
  125. package/dist/skills/resolvers/git.js.map +1 -1
  126. package/dist/skills/validate.js +1 -1
  127. package/dist/skills/validate.js.map +1 -1
  128. package/dist/updater.d.ts.map +1 -1
  129. package/dist/updater.js +5 -12
  130. package/dist/updater.js.map +1 -1
  131. package/dist/url-parsing.d.ts +1 -4
  132. package/dist/url-parsing.d.ts.map +1 -1
  133. package/dist/url-parsing.js +2 -6
  134. package/dist/url-parsing.js.map +1 -1
  135. 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;AAEnD;;;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;CAGrE"}
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;AAI7B;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAC9B;;OAEG;IACH,WAAW;QACR,OAAO,IAAI,CAAC;IACf,CAAC;IAED;;OAEG;IACH,YAAY;QACT,OAAO,IAAI,CAAC;IACf,CAAC;IAED,aAAa;QACV,OAAO,EAAE,CAAC;IACb,CAAC;IAED,gBAAgB;QACb,OAAO,KAAK,CAAC;IAChB,CAAC;IAED,oBAAoB;QACjB,OAAO,gBAAgB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,qBAAqB;QAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAEpE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAEpE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACF,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACf,CAAC;IACJ,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,MAAgB,EAChB,SAAgD;QAEhD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;CACH"}
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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;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;IA6BpC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;CAG7E"}
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;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,QAAgB;QAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;CACH"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/editors/strategies/cursor/rules.ts"],"names":[],"mappings":"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"}
@@ -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":"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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;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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"}