@auto-engineer/cli 0.5.20 → 0.6.1

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 (71) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +10 -0
  3. package/README.md +185 -151
  4. package/dist/src/index.js +254 -93
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/manifest-types.d.ts +21 -0
  7. package/dist/src/manifest-types.d.ts.map +1 -0
  8. package/dist/src/manifest-types.js +2 -0
  9. package/dist/src/manifest-types.js.map +1 -0
  10. package/dist/src/plugin-loader.d.ts +49 -0
  11. package/dist/src/plugin-loader.d.ts.map +1 -0
  12. package/dist/src/plugin-loader.js +383 -0
  13. package/dist/src/plugin-loader.js.map +1 -0
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/package.json +29 -28
  16. package/dist/src/commands/check-client.d.ts +0 -6
  17. package/dist/src/commands/check-client.d.ts.map +0 -1
  18. package/dist/src/commands/check-client.js +0 -69
  19. package/dist/src/commands/check-client.js.map +0 -1
  20. package/dist/src/commands/check-lint.d.ts +0 -5
  21. package/dist/src/commands/check-lint.d.ts.map +0 -1
  22. package/dist/src/commands/check-lint.js +0 -96
  23. package/dist/src/commands/check-lint.js.map +0 -1
  24. package/dist/src/commands/check-tests.d.ts +0 -5
  25. package/dist/src/commands/check-tests.d.ts.map +0 -1
  26. package/dist/src/commands/check-tests.js +0 -87
  27. package/dist/src/commands/check-tests.js.map +0 -1
  28. package/dist/src/commands/check-types.d.ts +0 -5
  29. package/dist/src/commands/check-types.d.ts.map +0 -1
  30. package/dist/src/commands/check-types.js +0 -83
  31. package/dist/src/commands/check-types.js.map +0 -1
  32. package/dist/src/commands/copy-example.d.ts +0 -5
  33. package/dist/src/commands/copy-example.d.ts.map +0 -1
  34. package/dist/src/commands/copy-example.js +0 -54
  35. package/dist/src/commands/copy-example.js.map +0 -1
  36. package/dist/src/commands/create-example.d.ts +0 -5
  37. package/dist/src/commands/create-example.d.ts.map +0 -1
  38. package/dist/src/commands/create-example.js +0 -60
  39. package/dist/src/commands/create-example.js.map +0 -1
  40. package/dist/src/commands/export-schema.d.ts +0 -5
  41. package/dist/src/commands/export-schema.d.ts.map +0 -1
  42. package/dist/src/commands/export-schema.js +0 -49
  43. package/dist/src/commands/export-schema.js.map +0 -1
  44. package/dist/src/commands/generate-client.d.ts +0 -5
  45. package/dist/src/commands/generate-client.d.ts.map +0 -1
  46. package/dist/src/commands/generate-client.js +0 -77
  47. package/dist/src/commands/generate-client.js.map +0 -1
  48. package/dist/src/commands/generate-gql-schema.d.ts +0 -5
  49. package/dist/src/commands/generate-gql-schema.d.ts.map +0 -1
  50. package/dist/src/commands/generate-gql-schema.js +0 -57
  51. package/dist/src/commands/generate-gql-schema.js.map +0 -1
  52. package/dist/src/commands/generate-ia.d.ts +0 -5
  53. package/dist/src/commands/generate-ia.d.ts.map +0 -1
  54. package/dist/src/commands/generate-ia.js +0 -54
  55. package/dist/src/commands/generate-ia.js.map +0 -1
  56. package/dist/src/commands/generate-server.d.ts +0 -5
  57. package/dist/src/commands/generate-server.d.ts.map +0 -1
  58. package/dist/src/commands/generate-server.js +0 -50
  59. package/dist/src/commands/generate-server.js.map +0 -1
  60. package/dist/src/commands/implement-client.d.ts +0 -5
  61. package/dist/src/commands/implement-client.d.ts.map +0 -1
  62. package/dist/src/commands/implement-client.js +0 -70
  63. package/dist/src/commands/implement-client.js.map +0 -1
  64. package/dist/src/commands/implement-server.d.ts +0 -5
  65. package/dist/src/commands/implement-server.d.ts.map +0 -1
  66. package/dist/src/commands/implement-server.js +0 -69
  67. package/dist/src/commands/implement-server.js.map +0 -1
  68. package/dist/src/commands/import-design-system.d.ts +0 -5
  69. package/dist/src/commands/import-design-system.d.ts.map +0 -1
  70. package/dist/src/commands/import-design-system.js +0 -62
  71. package/dist/src/commands/import-design-system.js.map +0 -1
@@ -0,0 +1,383 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import { pathToFileURL } from 'url';
4
+ import createJiti from 'jiti';
5
+ import createDebug from 'debug';
6
+ import { createMessageBus } from '@auto-engineer/message-bus';
7
+ const debug = createDebug('cli:plugin-loader');
8
+ const debugConfig = createDebug('cli:plugin-loader:config');
9
+ const debugPlugins = createDebug('cli:plugin-loader:plugins');
10
+ const debugConflicts = createDebug('cli:plugin-loader:conflicts');
11
+ const debugBus = createDebug('cli:plugin-loader:bus');
12
+ // Set non-error-like colors (avoid red/orange)
13
+ // Colors: 0=gray, 1=red, 2=green, 3=yellow, 4=blue, 5=magenta, 6=cyan
14
+ debug.color = '4'; // blue
15
+ debugConfig.color = '6'; // cyan
16
+ debugPlugins.color = '2'; // green
17
+ debugConflicts.color = '3'; // yellow (ok for conflicts)
18
+ debugBus.color = '4'; // blue
19
+ export class PluginLoader {
20
+ constructor() {
21
+ this.commands = new Map();
22
+ this.conflicts = new Map(); // alias -> [package1, package2, ...]
23
+ this.loadedPlugins = new Set(); // Track successfully loaded plugins
24
+ this.messageBus = createMessageBus();
25
+ }
26
+ async loadConfigFile(configPath) {
27
+ try {
28
+ if (this.loadConfig) {
29
+ // Use test override
30
+ return await this.loadConfig(configPath);
31
+ }
32
+ // Handle TypeScript config files
33
+ if (configPath.endsWith('.ts')) {
34
+ debugConfig('Loading TypeScript config file with jiti');
35
+ const jiti = createJiti(import.meta.url, {
36
+ interopDefault: true,
37
+ });
38
+ const config = jiti(configPath);
39
+ debugConfig('TypeScript config loaded successfully');
40
+ return config;
41
+ }
42
+ // Import JavaScript config file directly
43
+ const configUrl = pathToFileURL(path.resolve(configPath)).href;
44
+ debugConfig('Importing JavaScript config from: %s', configUrl);
45
+ const configModule = (await import(configUrl));
46
+ return (configModule.default ?? configModule);
47
+ }
48
+ catch (error) {
49
+ debugConfig('Error loading config: %O', error);
50
+ console.error(`Failed to load config from ${configPath}:`, error);
51
+ return null;
52
+ }
53
+ }
54
+ async loadPlugin(packageName) {
55
+ try {
56
+ const packagePath = path.join(process.cwd(), 'node_modules', packageName, 'dist', 'src', 'cli-manifest.js');
57
+ if (fs.existsSync(packagePath)) {
58
+ const packageUrl = pathToFileURL(packagePath).href;
59
+ debugPlugins('Trying to load plugin from cwd: %s', packageUrl);
60
+ return await import(packageUrl);
61
+ }
62
+ // Try the shorter path for packages that might have different structure
63
+ const altPath = path.join(process.cwd(), 'node_modules', packageName, 'dist', 'cli-manifest.js');
64
+ if (fs.existsSync(altPath)) {
65
+ const packageUrl = pathToFileURL(altPath).href;
66
+ debugPlugins('Trying to load plugin from cwd (alt path): %s', packageUrl);
67
+ return await import(packageUrl);
68
+ }
69
+ throw new Error('Package not found in node_modules');
70
+ }
71
+ catch (e) {
72
+ debugPlugins('Failed to load from cwd, trying default import: %s', e);
73
+ return this.importPlugin ? await this.importPlugin(packageName) : await import(packageName);
74
+ }
75
+ }
76
+ async processPlugin(packageName, aliasMap) {
77
+ debugPlugins('Loading plugin: %s', packageName);
78
+ try {
79
+ const pkg = (await this.loadPlugin(packageName));
80
+ if (!pkg.CLI_MANIFEST) {
81
+ debugPlugins('Package %s does not export CLI_MANIFEST, skipping', packageName);
82
+ return;
83
+ }
84
+ debugPlugins('Found CLI_MANIFEST in %s', packageName);
85
+ const manifest = pkg.CLI_MANIFEST;
86
+ // Track that this plugin was successfully loaded
87
+ this.loadedPlugins.add(packageName);
88
+ // Process each command in the manifest
89
+ for (const [alias, command] of Object.entries(manifest.commands)) {
90
+ debugPlugins('Processing command %s from %s', alias, packageName);
91
+ // Add the category from the manifest to each command
92
+ const commandWithCategory = {
93
+ ...command,
94
+ category: manifest.category ?? packageName,
95
+ };
96
+ // Track all packages that want this alias
97
+ if (!aliasMap.has(alias)) {
98
+ aliasMap.set(alias, []);
99
+ }
100
+ aliasMap.get(alias).push({
101
+ packageName,
102
+ command: commandWithCategory,
103
+ });
104
+ }
105
+ }
106
+ catch (error) {
107
+ debugPlugins('Failed to load plugin %s: %O', packageName, error);
108
+ console.warn(`Failed to load plugin ${packageName}:`, error);
109
+ }
110
+ }
111
+ async findMatchingCandidate(candidates, userOverride) {
112
+ for (const candidate of candidates) {
113
+ try {
114
+ const cmd = candidate.command;
115
+ const module = (await cmd.handler());
116
+ if (module === userOverride ||
117
+ module.default === userOverride ||
118
+ module.handler === userOverride ||
119
+ module.default?.handler === userOverride) {
120
+ return candidate;
121
+ }
122
+ }
123
+ catch (e) {
124
+ debugConflicts('Error checking handler match: %o', e);
125
+ }
126
+ }
127
+ return null;
128
+ }
129
+ async processConflictResolution(alias, candidates, config) {
130
+ const packages = candidates.map((c) => c.packageName);
131
+ debugConflicts('Conflict detected for alias "%s" between packages: %o', alias, packages);
132
+ const userOverride = config.aliases?.[alias];
133
+ if (userOverride === undefined) {
134
+ this.conflicts.set(alias, packages);
135
+ return;
136
+ }
137
+ const isFunction = typeof userOverride === 'function';
138
+ const hasDefault = typeof userOverride.default === 'function';
139
+ if (!isFunction && !hasDefault) {
140
+ console.error(`\n❌ Invalid override for alias "${alias}"`);
141
+ console.error(` Expected a command handler function, got: ${typeof userOverride}`);
142
+ console.error(` Import the handler from one of: ${packages.join(', ')}`);
143
+ this.conflicts.set(alias, packages);
144
+ return;
145
+ }
146
+ const matchingCandidate = await this.findMatchingCandidate(candidates, userOverride);
147
+ if (matchingCandidate !== null) {
148
+ debugConflicts('Using user override for %s with handler from %s', alias, matchingCandidate.packageName);
149
+ await this.registerCommand(alias, matchingCandidate);
150
+ }
151
+ else {
152
+ console.error(`\n❌ Invalid override for alias "${alias}"`);
153
+ console.error(` The provided handler does not match any of the conflicting commands`);
154
+ console.error(` Available packages: ${packages.join(', ')}`);
155
+ this.conflicts.set(alias, packages);
156
+ }
157
+ }
158
+ processStringAlias(alias, target) {
159
+ if (!this.commands.has(target))
160
+ return;
161
+ debugPlugins('Creating alias %s -> %s', alias, target);
162
+ const existingCommand = this.commands.get(target);
163
+ this.commands.set(alias, {
164
+ ...existingCommand,
165
+ description: `Alias for ${target}`,
166
+ });
167
+ }
168
+ processHandlerAlias(alias, target) {
169
+ const t = target;
170
+ debugPlugins('Registering custom alias %s with CommandHandler', alias);
171
+ const commandEntry = {
172
+ handler: async () => ({ default: target }),
173
+ description: t.name !== undefined && t.name !== '' ? `${t.name} command` : `Custom command: ${alias}`,
174
+ package: 'custom-alias',
175
+ };
176
+ this.commands.set(alias, commandEntry);
177
+ // Register with message bus
178
+ const commandHandler = {
179
+ name: alias,
180
+ handle: async (command) => {
181
+ debugBus('Handling custom alias command %s', alias);
182
+ await t.handle(command);
183
+ },
184
+ };
185
+ this.messageBus.registerCommandHandler(commandHandler);
186
+ debugBus('Registered custom alias %s with message bus', alias);
187
+ }
188
+ processFunctionAlias(alias, target) {
189
+ debugPlugins('Registering custom alias %s with handler function', alias);
190
+ const handlerFunc = typeof target === 'function' ? target : target.default;
191
+ this.commands.set(alias, {
192
+ handler: async () => ({ default: handlerFunc }),
193
+ description: `Custom command: ${alias}`,
194
+ package: 'custom-alias',
195
+ });
196
+ }
197
+ processCustomAlias(alias, target) {
198
+ if (typeof target === 'string') {
199
+ this.processStringAlias(alias, target);
200
+ }
201
+ else if (target !== null &&
202
+ target !== undefined &&
203
+ typeof target.handle === 'function') {
204
+ this.processHandlerAlias(alias, target);
205
+ }
206
+ else if (typeof target === 'function' ||
207
+ (target !== null && target !== undefined && typeof target.default === 'function')) {
208
+ this.processFunctionAlias(alias, target);
209
+ }
210
+ }
211
+ async processCustomAliases(config, aliasMap) {
212
+ if (config.aliases === undefined)
213
+ return;
214
+ for (const [alias, target] of Object.entries(config.aliases)) {
215
+ // Skip if this was already processed as a conflict resolution
216
+ if (!aliasMap.has(alias)) {
217
+ this.processCustomAlias(alias, target);
218
+ }
219
+ }
220
+ }
221
+ reportConflicts(config) {
222
+ if (this.conflicts.size === 0)
223
+ return;
224
+ console.error('\n❌ Command alias conflicts detected!\n');
225
+ console.error('Multiple packages are trying to register the same command aliases.');
226
+ console.error('Please add alias overrides to your auto.config.ts file:\n');
227
+ console.error('// Import the specific handler you want to use');
228
+ for (const [alias, packages] of this.conflicts.entries()) {
229
+ console.error(`// For "${alias}", import from one of: ${packages.join(', ')}`);
230
+ const examplePkg = packages[0];
231
+ const handlerName = alias.replace(/[:-]/g, '_') + 'Handler';
232
+ console.error(`import { ${handlerName} } from '${examplePkg}';`);
233
+ }
234
+ console.error('');
235
+ console.error('export default {');
236
+ console.error(' plugins: [');
237
+ for (const plugin of config.plugins ?? []) {
238
+ console.error(` '${plugin}',`);
239
+ }
240
+ console.error(' ],');
241
+ console.error(' aliases: {');
242
+ for (const [alias] of this.conflicts.entries()) {
243
+ const handlerName = alias.replace(/[:-]/g, '_') + 'Handler';
244
+ console.error(` '${alias}': ${handlerName},`);
245
+ }
246
+ console.error(' }');
247
+ console.error('};\n');
248
+ throw new Error('Unresolved command alias conflicts. Please update your configuration.');
249
+ }
250
+ async loadPlugins(configPath) {
251
+ debug('Loading plugins from config: %s', configPath);
252
+ // Check if config file exists (skip for testing)
253
+ if (!this.loadConfig && !fs.existsSync(configPath)) {
254
+ debugConfig('Config file not found, using default empty config');
255
+ return this.commands;
256
+ }
257
+ const config = await this.loadConfigFile(configPath);
258
+ if (!config) {
259
+ return this.commands;
260
+ }
261
+ debugConfig('Config loaded with %d plugins', config.plugins?.length ?? 0);
262
+ // Load each plugin
263
+ const aliasMap = new Map();
264
+ for (const packageName of config.plugins ?? []) {
265
+ await this.processPlugin(packageName, aliasMap);
266
+ }
267
+ // Process aliases and detect conflicts
268
+ for (const [alias, candidates] of aliasMap.entries()) {
269
+ if (candidates.length === 1) {
270
+ // No conflict, register the command
271
+ const candidate = candidates[0];
272
+ debugPlugins('Registering command %s from %s', alias, candidate.packageName);
273
+ await this.registerCommand(alias, candidate);
274
+ }
275
+ else {
276
+ // Conflict detected
277
+ await this.processConflictResolution(alias, candidates, config);
278
+ }
279
+ }
280
+ // Process custom aliases (new command names mapping to handlers or existing commands)
281
+ await this.processCustomAliases(config, aliasMap);
282
+ // Report unresolved conflicts
283
+ this.reportConflicts(config);
284
+ debug('Plugin loading complete. Registered %d commands from %d plugins', this.commands.size, this.loadedPlugins.size);
285
+ return this.commands;
286
+ }
287
+ getLoadedPluginCount() {
288
+ return this.loadedPlugins.size;
289
+ }
290
+ async registerCommand(alias, candidate) {
291
+ // Store the command for CLI use with all metadata
292
+ this.commands.set(alias, {
293
+ handler: candidate.command.handler,
294
+ description: candidate.command.description,
295
+ package: candidate.packageName,
296
+ usage: candidate.command.usage,
297
+ examples: candidate.command.examples,
298
+ args: candidate.command.args,
299
+ options: candidate.command.options,
300
+ category: candidate.command.category,
301
+ });
302
+ // Register the command with the message bus
303
+ debugBus('Registering command %s with message bus', alias);
304
+ // Create a command handler for the message bus
305
+ const commandHandler = {
306
+ name: alias,
307
+ handle: async (command) => {
308
+ debugBus('Handling command %s via message bus', alias);
309
+ try {
310
+ // Load the actual handler from the plugin
311
+ const module = (await candidate.command.handler());
312
+ debugBus('Loaded module for %s', alias);
313
+ // Look for standard handler export patterns
314
+ const handlerName = `handle${alias
315
+ .split(':')
316
+ .map((s) => s[0].toUpperCase() + s.slice(1))
317
+ .join('')}Command`;
318
+ const moduleHandler = module[handlerName];
319
+ const defaultHandler = module.default;
320
+ const namedHandler = module.handler;
321
+ let handler = null;
322
+ if (moduleHandler !== undefined) {
323
+ handler = moduleHandler;
324
+ }
325
+ else if (defaultHandler !== undefined) {
326
+ handler = defaultHandler;
327
+ }
328
+ else if (namedHandler !== undefined) {
329
+ handler = namedHandler;
330
+ }
331
+ if (handler === null) {
332
+ debugBus('Available exports: %o', Object.keys(module));
333
+ throw new Error(`No handler found for command ${alias} in ${candidate.packageName}`);
334
+ }
335
+ debugBus('Found handler for %s, type: %s', alias, typeof handler);
336
+ // Execute the handler with the command
337
+ debugBus('Calling handler with command: %o', command);
338
+ const handlerFunc = handler;
339
+ await handlerFunc(command);
340
+ debugBus('Handler execution complete for %s', alias);
341
+ }
342
+ catch (error) {
343
+ debugBus('Error handling command %s: %O', alias, error);
344
+ throw error;
345
+ }
346
+ },
347
+ };
348
+ // Register with the message bus
349
+ this.messageBus.registerCommandHandler(commandHandler);
350
+ // Set up event listener for command responses if needed
351
+ const responseEventName = `${alias}Response`;
352
+ debugBus('Setting up response listener for %s', responseEventName);
353
+ this.messageBus.subscribeToEvent(responseEventName, {
354
+ name: `${alias}ResponseHandler`,
355
+ handle: async (event) => {
356
+ debugBus('Received response for %s: %O', alias, event);
357
+ // Handle response if needed (logging, analytics, etc.)
358
+ },
359
+ });
360
+ }
361
+ async executeCommand(commandAlias, data) {
362
+ debugBus('Executing command %s through message bus', commandAlias);
363
+ // Create command object that matches the Command interface
364
+ const command = {
365
+ type: commandAlias,
366
+ data: data,
367
+ timestamp: new Date(),
368
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
369
+ };
370
+ await this.messageBus.sendCommand(command);
371
+ }
372
+ getCommands() {
373
+ return this.commands;
374
+ }
375
+ getConflicts() {
376
+ return this.conflicts;
377
+ }
378
+ }
379
+ export async function loadPlugins(configPath) {
380
+ const loader = new PluginLoader();
381
+ return loader.loadPlugins(configPath);
382
+ }
383
+ //# sourceMappingURL=plugin-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/plugin-loader.ts"],"names":[],"mappings":"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"}