agentinit 1.4.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +209 -0
  3. package/dist/agentinit-1.6.0.tgz +0 -0
  4. package/dist/agents/Agent.d.ts +110 -0
  5. package/dist/agents/Agent.d.ts.map +1 -0
  6. package/dist/agents/Agent.js +174 -0
  7. package/dist/agents/Agent.js.map +1 -0
  8. package/dist/agents/ClaudeAgent.d.ts +50 -0
  9. package/dist/agents/ClaudeAgent.d.ts.map +1 -0
  10. package/dist/agents/ClaudeAgent.js +249 -0
  11. package/dist/agents/ClaudeAgent.js.map +1 -0
  12. package/dist/agents/ClaudeDesktopAgent.d.ts +49 -0
  13. package/dist/agents/ClaudeDesktopAgent.d.ts.map +1 -0
  14. package/dist/agents/ClaudeDesktopAgent.js +143 -0
  15. package/dist/agents/ClaudeDesktopAgent.js.map +1 -0
  16. package/dist/agents/CodexCliAgent.d.ts +48 -0
  17. package/dist/agents/CodexCliAgent.d.ts.map +1 -0
  18. package/dist/agents/CodexCliAgent.js +262 -0
  19. package/dist/agents/CodexCliAgent.js.map +1 -0
  20. package/dist/agents/CursorAgent.d.ts +44 -0
  21. package/dist/agents/CursorAgent.d.ts.map +1 -0
  22. package/dist/agents/CursorAgent.js +231 -0
  23. package/dist/agents/CursorAgent.js.map +1 -0
  24. package/dist/agents/DroidAgent.d.ts +52 -0
  25. package/dist/agents/DroidAgent.d.ts.map +1 -0
  26. package/dist/agents/DroidAgent.js +228 -0
  27. package/dist/agents/DroidAgent.js.map +1 -0
  28. package/dist/agents/GeminiCliAgent.d.ts +40 -0
  29. package/dist/agents/GeminiCliAgent.d.ts.map +1 -0
  30. package/dist/agents/GeminiCliAgent.js +195 -0
  31. package/dist/agents/GeminiCliAgent.js.map +1 -0
  32. package/dist/cli.d.ts +3 -0
  33. package/dist/cli.d.ts.map +1 -0
  34. package/dist/cli.js +33365 -0
  35. package/dist/cli.js.map +1 -0
  36. package/dist/commands/apply.d.ts +2 -0
  37. package/dist/commands/apply.d.ts.map +1 -0
  38. package/dist/commands/apply.js +468 -0
  39. package/dist/commands/apply.js.map +1 -0
  40. package/dist/commands/config.d.ts +8 -0
  41. package/dist/commands/config.d.ts.map +1 -0
  42. package/dist/commands/config.js +6 -0
  43. package/dist/commands/config.js.map +1 -0
  44. package/dist/commands/detect.d.ts +6 -0
  45. package/dist/commands/detect.d.ts.map +1 -0
  46. package/dist/commands/detect.js +55 -0
  47. package/dist/commands/detect.js.map +1 -0
  48. package/dist/commands/init.d.ts +7 -0
  49. package/dist/commands/init.d.ts.map +1 -0
  50. package/dist/commands/init.js +105 -0
  51. package/dist/commands/init.js.map +1 -0
  52. package/dist/commands/mcp.d.ts +8 -0
  53. package/dist/commands/mcp.d.ts.map +1 -0
  54. package/dist/commands/mcp.js +127 -0
  55. package/dist/commands/mcp.js.map +1 -0
  56. package/dist/commands/subagents.d.ts +9 -0
  57. package/dist/commands/subagents.d.ts.map +1 -0
  58. package/dist/commands/subagents.js +6 -0
  59. package/dist/commands/subagents.js.map +1 -0
  60. package/dist/commands/sync.d.ts +7 -0
  61. package/dist/commands/sync.d.ts.map +1 -0
  62. package/dist/commands/sync.js +49 -0
  63. package/dist/commands/sync.js.map +1 -0
  64. package/dist/commands/verifyMcp.d.ts +2 -0
  65. package/dist/commands/verifyMcp.d.ts.map +1 -0
  66. package/dist/commands/verifyMcp.js +215 -0
  67. package/dist/commands/verifyMcp.js.map +1 -0
  68. package/dist/constants/index.d.ts +3 -0
  69. package/dist/constants/index.d.ts.map +1 -0
  70. package/dist/constants/index.js +3 -0
  71. package/dist/constants/index.js.map +1 -0
  72. package/dist/constants/mcp.d.ts +9 -0
  73. package/dist/constants/mcp.d.ts.map +1 -0
  74. package/dist/constants/mcp.js +28 -0
  75. package/dist/constants/mcp.js.map +1 -0
  76. package/dist/constants/tokens.d.ts +6 -0
  77. package/dist/constants/tokens.d.ts.map +1 -0
  78. package/dist/constants/tokens.js +5 -0
  79. package/dist/constants/tokens.js.map +1 -0
  80. package/dist/core/agentDetector.d.ts +9 -0
  81. package/dist/core/agentDetector.d.ts.map +1 -0
  82. package/dist/core/agentDetector.js +51 -0
  83. package/dist/core/agentDetector.js.map +1 -0
  84. package/dist/core/agentManager.d.ts +55 -0
  85. package/dist/core/agentManager.d.ts.map +1 -0
  86. package/dist/core/agentManager.js +113 -0
  87. package/dist/core/agentManager.js.map +1 -0
  88. package/dist/core/configMerger.d.ts +49 -0
  89. package/dist/core/configMerger.d.ts.map +1 -0
  90. package/dist/core/configMerger.js +180 -0
  91. package/dist/core/configMerger.js.map +1 -0
  92. package/dist/core/mcpClient.d.ts +38 -0
  93. package/dist/core/mcpClient.d.ts.map +1 -0
  94. package/dist/core/mcpClient.js +416 -0
  95. package/dist/core/mcpClient.js.map +1 -0
  96. package/dist/core/mcpFilter.d.ts +44 -0
  97. package/dist/core/mcpFilter.d.ts.map +1 -0
  98. package/dist/core/mcpFilter.js +126 -0
  99. package/dist/core/mcpFilter.js.map +1 -0
  100. package/dist/core/mcpParser.d.ts +25 -0
  101. package/dist/core/mcpParser.d.ts.map +1 -0
  102. package/dist/core/mcpParser.js +297 -0
  103. package/dist/core/mcpParser.js.map +1 -0
  104. package/dist/core/propagator.d.ts +25 -0
  105. package/dist/core/propagator.d.ts.map +1 -0
  106. package/dist/core/propagator.js +154 -0
  107. package/dist/core/propagator.js.map +1 -0
  108. package/dist/core/rulesApplicator.d.ts +29 -0
  109. package/dist/core/rulesApplicator.d.ts.map +1 -0
  110. package/dist/core/rulesApplicator.js +181 -0
  111. package/dist/core/rulesApplicator.js.map +1 -0
  112. package/dist/core/rulesParser.d.ts +41 -0
  113. package/dist/core/rulesParser.d.ts.map +1 -0
  114. package/dist/core/rulesParser.js +260 -0
  115. package/dist/core/rulesParser.js.map +1 -0
  116. package/dist/core/rulesTemplateLoader.d.ts +31 -0
  117. package/dist/core/rulesTemplateLoader.d.ts.map +1 -0
  118. package/dist/core/rulesTemplateLoader.js +75 -0
  119. package/dist/core/rulesTemplateLoader.js.map +1 -0
  120. package/dist/core/stackDetector.d.ts +16 -0
  121. package/dist/core/stackDetector.d.ts.map +1 -0
  122. package/dist/core/stackDetector.js +234 -0
  123. package/dist/core/stackDetector.js.map +1 -0
  124. package/dist/core/templateEngine.d.ts +15 -0
  125. package/dist/core/templateEngine.d.ts.map +1 -0
  126. package/dist/core/templateEngine.js +260 -0
  127. package/dist/core/templateEngine.js.map +1 -0
  128. package/dist/core/tomlGenerator.d.ts +24 -0
  129. package/dist/core/tomlGenerator.d.ts.map +1 -0
  130. package/dist/core/tomlGenerator.js +185 -0
  131. package/dist/core/tomlGenerator.js.map +1 -0
  132. package/dist/index.d.ts +21 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +21 -33195
  135. package/dist/index.js.map +1 -0
  136. package/dist/lib/index.d.ts +39 -0
  137. package/dist/lib/index.d.ts.map +1 -0
  138. package/dist/lib/index.js +40 -0
  139. package/dist/lib/index.js.map +1 -0
  140. package/dist/lib/types/index.d.ts +23 -0
  141. package/dist/lib/types/index.d.ts.map +1 -0
  142. package/dist/lib/types/index.js +23 -0
  143. package/dist/lib/types/index.js.map +1 -0
  144. package/dist/lib/utils/index.d.ts +18 -0
  145. package/dist/lib/utils/index.d.ts.map +1 -0
  146. package/dist/lib/utils/index.js +21 -0
  147. package/dist/lib/utils/index.js.map +1 -0
  148. package/dist/lib/verifier/index.d.ts +22 -0
  149. package/dist/lib/verifier/index.d.ts.map +1 -0
  150. package/dist/lib/verifier/index.js +22 -0
  151. package/dist/lib/verifier/index.js.map +1 -0
  152. package/dist/registry/mcpRegistry.d.ts +12 -0
  153. package/dist/registry/mcpRegistry.d.ts.map +1 -0
  154. package/dist/registry/mcpRegistry.js +114 -0
  155. package/dist/registry/mcpRegistry.js.map +1 -0
  156. package/dist/types/index.d.ts +180 -0
  157. package/dist/types/index.d.ts.map +1 -0
  158. package/dist/types/index.js +21 -0
  159. package/dist/types/index.js.map +1 -0
  160. package/dist/types/rules.d.ts +51 -0
  161. package/dist/types/rules.d.ts.map +1 -0
  162. package/dist/types/rules.js +2 -0
  163. package/dist/types/rules.js.map +1 -0
  164. package/dist/utils/fs.d.ts +12 -0
  165. package/dist/utils/fs.d.ts.map +1 -0
  166. package/dist/utils/fs.js +91 -0
  167. package/dist/utils/fs.js.map +1 -0
  168. package/dist/utils/logger.d.ts +14 -0
  169. package/dist/utils/logger.d.ts.map +1 -0
  170. package/dist/utils/logger.js +36 -0
  171. package/dist/utils/logger.js.map +1 -0
  172. package/dist/utils/paths.d.ts +77 -0
  173. package/dist/utils/paths.d.ts.map +1 -0
  174. package/dist/utils/paths.js +140 -0
  175. package/dist/utils/paths.js.map +1 -0
  176. package/package.json +30 -6
  177. package/dist/agentinit-1.4.1.tgz +0 -0
@@ -0,0 +1,297 @@
1
+ import { MCPServerType } from '../types/index.js';
2
+ export class MCPParseError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'MCPParseError';
6
+ }
7
+ }
8
+ export class MCPParser {
9
+ /**
10
+ * Parse command line arguments to extract MCP server configurations
11
+ */
12
+ static parseArguments(args) {
13
+ const servers = [];
14
+ let i = 0;
15
+ while (i < args.length) {
16
+ const arg = args[i];
17
+ if (arg === '--mcp-stdio') {
18
+ const result = this.parseStdioMCP(args, i);
19
+ if (result.server) {
20
+ servers.push(result.server);
21
+ }
22
+ i = result.nextIndex;
23
+ }
24
+ else if (arg === '--mcp-http') {
25
+ const result = this.parseHttpMCP(args, i);
26
+ if (result.server) {
27
+ servers.push(result.server);
28
+ }
29
+ i = result.nextIndex;
30
+ }
31
+ else if (arg === '--mcp-sse') {
32
+ const result = this.parseSSEMCP(args, i);
33
+ if (result.server) {
34
+ servers.push(result.server);
35
+ }
36
+ i = result.nextIndex;
37
+ }
38
+ else {
39
+ i++;
40
+ }
41
+ }
42
+ return { servers };
43
+ }
44
+ static parseStdioMCP(args, startIndex) {
45
+ let i = startIndex + 1;
46
+ if (i >= args.length) {
47
+ return { server: null, nextIndex: i };
48
+ }
49
+ const serverName = args[i];
50
+ if (!serverName) {
51
+ return { server: null, nextIndex: i + 1 };
52
+ }
53
+ // Validate that the name doesn't look like a command (old syntax)
54
+ if (this.looksLikeCommand(serverName)) {
55
+ throw new MCPParseError(`Invalid MCP name: "${serverName}"\n` +
56
+ `The name appears to be a command. New syntax requires explicit names:\n` +
57
+ ` Correct: --mcp-stdio myname "npx -y @package/name"\n` +
58
+ ` Incorrect: --mcp-stdio "npx -y @package/name"`);
59
+ }
60
+ i++;
61
+ if (i >= args.length) {
62
+ throw new MCPParseError(`Missing command for MCP server "${serverName}"\n` +
63
+ `Usage: --mcp-stdio <name> <command>`);
64
+ }
65
+ const commandStr = args[i];
66
+ if (!commandStr) {
67
+ return { server: null, nextIndex: i + 1 };
68
+ }
69
+ i++;
70
+ // Parse command and initial args
71
+ const [command, ...initialArgs] = this.parseCommand(commandStr);
72
+ if (!command) {
73
+ return { server: null, nextIndex: i };
74
+ }
75
+ const server = {
76
+ name: serverName,
77
+ type: MCPServerType.STDIO,
78
+ command,
79
+ args: [...initialArgs],
80
+ env: {}
81
+ };
82
+ // Look for --args and --env modifiers
83
+ while (i < args.length) {
84
+ const nextArg = args[i];
85
+ if (!nextArg) {
86
+ i++;
87
+ continue;
88
+ }
89
+ if (nextArg === '--args' && i + 1 < args.length) {
90
+ const argsStr = args[i + 1];
91
+ if (argsStr) {
92
+ const additionalArgs = this.parseArgsString(argsStr);
93
+ server.args = [...(server.args || []), ...additionalArgs];
94
+ }
95
+ i += 2;
96
+ }
97
+ else if (nextArg === '--env' && i + 1 < args.length) {
98
+ const envStr = args[i + 1];
99
+ if (envStr) {
100
+ const envVars = this.parseEnvString(envStr);
101
+ server.env = { ...server.env, ...envVars };
102
+ }
103
+ i += 2;
104
+ }
105
+ else if (nextArg.startsWith('--mcp-')) {
106
+ // Next MCP command, stop parsing this one
107
+ break;
108
+ }
109
+ else {
110
+ i++;
111
+ }
112
+ }
113
+ return { server, nextIndex: i };
114
+ }
115
+ static parseHttpMCP(args, startIndex) {
116
+ let i = startIndex + 1;
117
+ if (i >= args.length) {
118
+ return { server: null, nextIndex: i };
119
+ }
120
+ const serverName = args[i];
121
+ if (!serverName) {
122
+ return { server: null, nextIndex: i + 1 };
123
+ }
124
+ // Validate that the name doesn't look like a URL (old syntax)
125
+ if (this.looksLikeUrl(serverName)) {
126
+ throw new MCPParseError(`Invalid MCP name: "${serverName}"\n` +
127
+ `The name appears to be a URL. New syntax requires explicit names:\n` +
128
+ ` Correct: --mcp-http myname "https://example.com/mcp"\n` +
129
+ ` Incorrect: --mcp-http "https://example.com/mcp"`);
130
+ }
131
+ i++;
132
+ if (i >= args.length) {
133
+ throw new MCPParseError(`Missing URL for MCP server "${serverName}"\n` +
134
+ `Usage: --mcp-http <name> <url>`);
135
+ }
136
+ const url = args[i];
137
+ if (!url) {
138
+ return { server: null, nextIndex: i + 1 };
139
+ }
140
+ i++;
141
+ const server = {
142
+ name: serverName,
143
+ type: MCPServerType.HTTP,
144
+ url,
145
+ headers: {}
146
+ };
147
+ // Look for --auth and --header modifiers
148
+ while (i < args.length) {
149
+ const nextArg = args[i];
150
+ if (!nextArg) {
151
+ i++;
152
+ continue;
153
+ }
154
+ if (nextArg === '--auth' && i + 1 < args.length) {
155
+ const authHeader = args[i + 1];
156
+ if (authHeader) {
157
+ if (authHeader.startsWith('Bearer ')) {
158
+ server.headers['Authorization'] = authHeader;
159
+ }
160
+ else {
161
+ server.headers['Authorization'] = `Bearer ${authHeader}`;
162
+ }
163
+ }
164
+ i += 2;
165
+ }
166
+ else if (nextArg === '--header' && i + 1 < args.length) {
167
+ const headerStr = args[i + 1];
168
+ if (headerStr) {
169
+ const colonIndex = headerStr.indexOf(':');
170
+ if (colonIndex > 0 && colonIndex < headerStr.length - 1) {
171
+ const key = headerStr.substring(0, colonIndex).trim();
172
+ const value = headerStr.substring(colonIndex + 1).trim();
173
+ if (key && value) {
174
+ server.headers[key] = value;
175
+ }
176
+ }
177
+ }
178
+ i += 2;
179
+ }
180
+ else if (nextArg.startsWith('--mcp-')) {
181
+ // Next MCP command, stop parsing this one
182
+ break;
183
+ }
184
+ else {
185
+ i++;
186
+ }
187
+ }
188
+ return { server, nextIndex: i };
189
+ }
190
+ static parseSSEMCP(args, startIndex) {
191
+ let i = startIndex + 1;
192
+ if (i >= args.length) {
193
+ return { server: null, nextIndex: i };
194
+ }
195
+ const serverName = args[i];
196
+ if (!serverName) {
197
+ return { server: null, nextIndex: i + 1 };
198
+ }
199
+ // Validate that the name doesn't look like a URL (old syntax)
200
+ if (this.looksLikeUrl(serverName)) {
201
+ throw new MCPParseError(`Invalid MCP name: "${serverName}"\n` +
202
+ `The name appears to be a URL. New syntax requires explicit names:\n` +
203
+ ` Correct: --mcp-sse myname "https://example.com/sse"\n` +
204
+ ` Incorrect: --mcp-sse "https://example.com/sse"`);
205
+ }
206
+ i++;
207
+ if (i >= args.length) {
208
+ throw new MCPParseError(`Missing URL for MCP server "${serverName}"\n` +
209
+ `Usage: --mcp-sse <name> <url>`);
210
+ }
211
+ const url = args[i];
212
+ if (!url) {
213
+ return { server: null, nextIndex: i + 1 };
214
+ }
215
+ i++;
216
+ const server = {
217
+ name: serverName,
218
+ type: MCPServerType.SSE,
219
+ url
220
+ };
221
+ // Skip to next MCP command
222
+ while (i < args.length && !args[i]?.startsWith('--mcp-')) {
223
+ i++;
224
+ }
225
+ return { server, nextIndex: i };
226
+ }
227
+ static parseCommand(commandStr) {
228
+ // Handle quoted arguments in command string
229
+ const parts = [];
230
+ let current = '';
231
+ let inQuotes = false;
232
+ let quoteChar = '';
233
+ for (let i = 0; i < commandStr.length; i++) {
234
+ const char = commandStr[i];
235
+ if ((char === '"' || char === "'") && !inQuotes) {
236
+ inQuotes = true;
237
+ quoteChar = char;
238
+ }
239
+ else if (char === quoteChar && inQuotes) {
240
+ inQuotes = false;
241
+ quoteChar = '';
242
+ }
243
+ else if (char === ' ' && !inQuotes) {
244
+ if (current.trim()) {
245
+ parts.push(current.trim());
246
+ current = '';
247
+ }
248
+ }
249
+ else {
250
+ current += char;
251
+ }
252
+ }
253
+ if (current.trim()) {
254
+ parts.push(current.trim());
255
+ }
256
+ return parts;
257
+ }
258
+ static parseArgsString(argsStr) {
259
+ return this.parseCommand(argsStr);
260
+ }
261
+ static parseEnvString(envStr) {
262
+ const env = {};
263
+ // Handle format like: "KEY1=value1 KEY2=value2" or "KEY=value"
264
+ const pairs = envStr.split(' ').filter(pair => pair.includes('='));
265
+ for (const pair of pairs) {
266
+ const [key, ...valueParts] = pair.split('=');
267
+ const value = valueParts.join('='); // Handle values with = in them
268
+ if (key && value !== undefined) {
269
+ env[key] = value;
270
+ }
271
+ }
272
+ return env;
273
+ }
274
+ /**
275
+ * Check if a string looks like a command (indicates old syntax usage)
276
+ */
277
+ static looksLikeCommand(name) {
278
+ const commandPatterns = [
279
+ /^(npx|npm|node|docker|python|pip|cargo|go)\s/, // Starts with common commands
280
+ /\s/, // Contains spaces (likely a command string)
281
+ /^["'].*["']$/, // Wrapped in quotes (likely a command string)
282
+ ];
283
+ return commandPatterns.some(pattern => pattern.test(name));
284
+ }
285
+ /**
286
+ * Check if a string looks like a URL (indicates old syntax usage)
287
+ */
288
+ static looksLikeUrl(name) {
289
+ const urlPatterns = [
290
+ /^https?:\/\//, // Starts with http:// or https://
291
+ /^localhost:\d+/, // Starts with localhost:port
292
+ /\.[a-z]{2,}(\/|$)/i, // Contains domain-like pattern (.com, .org, etc.)
293
+ ];
294
+ return urlPatterns.some(pattern => pattern.test(name));
295
+ }
296
+ }
297
+ //# sourceMappingURL=mcpParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpParser.js","sourceRoot":"","sources":["../../src/core/mcpParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface SyncOptions {
2
+ dryRun?: boolean;
3
+ backup?: boolean;
4
+ }
5
+ export interface SyncResult {
6
+ success: boolean;
7
+ changes: Array<{
8
+ agent: string;
9
+ action: 'created' | 'updated' | 'backed_up';
10
+ file: string;
11
+ }>;
12
+ errors: string[];
13
+ }
14
+ export declare class Propagator {
15
+ private readonly agentAdapters;
16
+ constructor();
17
+ syncAgentsFile(projectPath: string, options?: SyncOptions): Promise<SyncResult>;
18
+ private syncAgent;
19
+ private getDefaultTargets;
20
+ private initializeAdapters;
21
+ private formatForClaude;
22
+ private formatForCursor;
23
+ private formatForWindsurf;
24
+ }
25
+ //# sourceMappingURL=propagator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagator.d.ts","sourceRoot":"","sources":["../../src/core/propagator.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;;IAM3D,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;YA8D3E,SAAS;IA6CvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,iBAAiB;CAY1B"}
@@ -0,0 +1,154 @@
1
+ import { resolve } from 'path';
2
+ import matter from 'gray-matter';
3
+ import { fileExists, readFileIfExists, writeFile, copyFile } from '../utils/fs.js';
4
+ export class Propagator {
5
+ agentAdapters = new Map();
6
+ constructor() {
7
+ this.initializeAdapters();
8
+ }
9
+ async syncAgentsFile(projectPath, options = {}) {
10
+ const result = {
11
+ success: true,
12
+ changes: [],
13
+ errors: []
14
+ };
15
+ const agentsPath = resolve(projectPath, 'agents.md');
16
+ if (!await fileExists(agentsPath)) {
17
+ result.success = false;
18
+ result.errors.push('agents.md not found. Run `agentinit init` first.');
19
+ return result;
20
+ }
21
+ try {
22
+ const agentsContent = await readFileIfExists(agentsPath);
23
+ if (!agentsContent) {
24
+ result.errors.push('Failed to read agents.md');
25
+ result.success = false;
26
+ return result;
27
+ }
28
+ const parsed = matter(agentsContent);
29
+ const targets = parsed.data.targets || this.getDefaultTargets();
30
+ for (const target of targets) {
31
+ const adapter = this.agentAdapters.get(target);
32
+ if (!adapter) {
33
+ result.errors.push(`No adapter found for agent: ${target}`);
34
+ continue;
35
+ }
36
+ try {
37
+ const syncResult = await this.syncAgent(projectPath, target, adapter, parsed.content, options);
38
+ result.changes.push(...syncResult.changes);
39
+ if (!syncResult.success) {
40
+ result.errors.push(...syncResult.errors);
41
+ }
42
+ }
43
+ catch (error) {
44
+ result.errors.push(`Failed to sync ${target}: ${error instanceof Error ? error.message : 'Unknown error'}`);
45
+ }
46
+ }
47
+ result.success = result.errors.length === 0;
48
+ }
49
+ catch (error) {
50
+ result.success = false;
51
+ result.errors.push(`Failed to parse agents.md: ${error instanceof Error ? error.message : 'Unknown error'}`);
52
+ }
53
+ return result;
54
+ }
55
+ async syncAgent(projectPath, agentName, adapter, content, options) {
56
+ const result = {
57
+ success: true,
58
+ changes: [],
59
+ errors: []
60
+ };
61
+ const targetPath = resolve(projectPath, adapter.configPath);
62
+ const agentContent = adapter.transformContent(content);
63
+ // Create backup if requested and file exists
64
+ if (options.backup && await fileExists(targetPath)) {
65
+ const backupPath = `${targetPath}.agentinit.backup`;
66
+ if (!options.dryRun) {
67
+ await copyFile(targetPath, backupPath);
68
+ }
69
+ result.changes.push({
70
+ agent: agentName,
71
+ action: 'backed_up',
72
+ file: backupPath
73
+ });
74
+ }
75
+ const exists = await fileExists(targetPath);
76
+ const action = exists ? 'updated' : 'created';
77
+ if (!options.dryRun) {
78
+ await writeFile(targetPath, agentContent);
79
+ }
80
+ result.changes.push({
81
+ agent: agentName,
82
+ action,
83
+ file: targetPath
84
+ });
85
+ return result;
86
+ }
87
+ getDefaultTargets() {
88
+ return ['claude', 'cursor'];
89
+ }
90
+ initializeAdapters() {
91
+ this.agentAdapters.set('claude', {
92
+ configPath: 'CLAUDE.md',
93
+ transformContent: (content) => this.formatForClaude(content)
94
+ });
95
+ this.agentAdapters.set('cursor', {
96
+ configPath: '.cursorrules',
97
+ transformContent: (content) => this.formatForCursor(content)
98
+ });
99
+ this.agentAdapters.set('windsurf', {
100
+ configPath: '.windsurfrules',
101
+ transformContent: (content) => this.formatForWindsurf(content)
102
+ });
103
+ }
104
+ formatForClaude(content) {
105
+ return `# Claude Configuration
106
+
107
+ ${content}
108
+
109
+ ## Additional Claude-Specific Instructions
110
+
111
+ - Use Claude's long-form thinking when needed for complex problems
112
+ - Provide detailed explanations for complex code
113
+ - Break down large tasks into smaller, manageable steps
114
+ - Use Claude's code analysis capabilities effectively
115
+ `;
116
+ }
117
+ formatForCursor(content) {
118
+ // Convert markdown to a more concise format for Cursor
119
+ const lines = content.split('\n');
120
+ const rules = [];
121
+ let inCodeBlock = false;
122
+ for (const line of lines) {
123
+ if (line.startsWith('```')) {
124
+ inCodeBlock = !inCodeBlock;
125
+ continue;
126
+ }
127
+ if (inCodeBlock)
128
+ continue;
129
+ if (line.startsWith('### ') || line.startsWith('## ')) {
130
+ rules.push(`\n// ${line.replace(/#+\s/, '')}`);
131
+ }
132
+ else if (line.startsWith('- ')) {
133
+ rules.push(`// ${line.substring(2)}`);
134
+ }
135
+ else if (line.trim() && !line.startsWith('#') && !line.startsWith('*')) {
136
+ rules.push(`// ${line}`);
137
+ }
138
+ }
139
+ return rules.join('\n').replace(/\n\n+/g, '\n\n');
140
+ }
141
+ formatForWindsurf(content) {
142
+ return `// Windsurf Configuration
143
+ // Generated from agents.md
144
+
145
+ ${content}
146
+
147
+ // Windsurf-Specific Notes:
148
+ // - Use Windsurf's AI pair programming features
149
+ // - Leverage real-time collaboration capabilities
150
+ // - Follow Windsurf's code suggestion patterns
151
+ `;
152
+ }
153
+ }
154
+ //# sourceMappingURL=propagator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagator.js","sourceRoot":"","sources":["../../src/core/propagator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Agent } from '../agents/Agent.js';
2
+ import type { AppliedRules, RuleApplicationResult } from '../types/rules.js';
3
+ export declare class RulesApplicator {
4
+ /**
5
+ * Apply rules to an agent's configuration
6
+ */
7
+ applyRulesToAgent(agent: Agent, rules: AppliedRules, projectPath: string, isGlobal?: boolean): Promise<RuleApplicationResult>;
8
+ /**
9
+ * Apply rules using agent-specific methods
10
+ */
11
+ private applyRulesByAgentType;
12
+ /**
13
+ * Merge new sections with existing ones
14
+ */
15
+ private mergeSections;
16
+ /**
17
+ * Count total tokens in the entire config file
18
+ */
19
+ private countTotalFileTokens;
20
+ /**
21
+ * Count tokens in the rules
22
+ */
23
+ private countRulesTokens;
24
+ /**
25
+ * Get the appropriate rules config path for an agent
26
+ */
27
+ private getAgentRulesPath;
28
+ }
29
+ //# sourceMappingURL=rulesApplicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesApplicator.d.ts","sourceRoot":"","sources":["../../src/core/rulesApplicator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,qBAAa,eAAe;IAE1B;;OAEG;IACG,iBAAiB,CACrB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,qBAAqB,CAAC;IA4EjC;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqCrB;;OAEG;YACW,oBAAoB;IAalC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}