@rudderjs/cli 0.0.6 → 1.0.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 (80) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/command-list.d.ts +3 -0
  3. package/dist/commands/command-list.d.ts.map +1 -0
  4. package/dist/commands/command-list.js +57 -0
  5. package/dist/commands/command-list.js.map +1 -0
  6. package/dist/commands/make/_shared.d.ts +19 -0
  7. package/dist/commands/make/_shared.d.ts.map +1 -0
  8. package/dist/commands/make/_shared.js +27 -0
  9. package/dist/commands/make/_shared.js.map +1 -0
  10. package/dist/commands/make/command.d.ts.map +1 -1
  11. package/dist/commands/make/command.js +11 -18
  12. package/dist/commands/make/command.js.map +1 -1
  13. package/dist/commands/make/controller.d.ts.map +1 -1
  14. package/dist/commands/make/controller.js +8 -21
  15. package/dist/commands/make/controller.js.map +1 -1
  16. package/dist/commands/make/event.d.ts.map +1 -1
  17. package/dist/commands/make/event.js +7 -20
  18. package/dist/commands/make/event.js.map +1 -1
  19. package/dist/commands/make/job.d.ts.map +1 -1
  20. package/dist/commands/make/job.js +7 -20
  21. package/dist/commands/make/job.js.map +1 -1
  22. package/dist/commands/make/listener.d.ts.map +1 -1
  23. package/dist/commands/make/listener.js +7 -20
  24. package/dist/commands/make/listener.js.map +1 -1
  25. package/dist/commands/make/mail.d.ts.map +1 -1
  26. package/dist/commands/make/mail.js +7 -20
  27. package/dist/commands/make/mail.js.map +1 -1
  28. package/dist/commands/make/middleware.d.ts.map +1 -1
  29. package/dist/commands/make/middleware.js +8 -20
  30. package/dist/commands/make/middleware.js.map +1 -1
  31. package/dist/commands/make/model.d.ts.map +1 -1
  32. package/dist/commands/make/model.js +7 -21
  33. package/dist/commands/make/model.js.map +1 -1
  34. package/dist/commands/make/provider.d.ts.map +1 -1
  35. package/dist/commands/make/provider.js +8 -20
  36. package/dist/commands/make/provider.js.map +1 -1
  37. package/dist/commands/make/request.d.ts.map +1 -1
  38. package/dist/commands/make/request.js +8 -20
  39. package/dist/commands/make/request.js.map +1 -1
  40. package/dist/commands/make.d.ts.map +1 -1
  41. package/dist/commands/make.js +19 -10
  42. package/dist/commands/make.js.map +1 -1
  43. package/dist/commands/providers-discover.d.ts +8 -0
  44. package/dist/commands/providers-discover.d.ts.map +1 -0
  45. package/dist/commands/providers-discover.js +77 -0
  46. package/dist/commands/providers-discover.js.map +1 -0
  47. package/dist/commands/vendor-publish.d.ts.map +1 -1
  48. package/dist/commands/vendor-publish.js +16 -2
  49. package/dist/commands/vendor-publish.js.map +1 -1
  50. package/dist/errors.d.ts +10 -0
  51. package/dist/errors.d.ts.map +1 -0
  52. package/dist/errors.js +14 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/index.js +139 -85
  55. package/dist/index.js.map +1 -1
  56. package/package.json +12 -3
  57. package/dist/commands/make/agent.d.ts +0 -4
  58. package/dist/commands/make/agent.d.ts.map +0 -1
  59. package/dist/commands/make/agent.js +0 -41
  60. package/dist/commands/make/agent.js.map +0 -1
  61. package/dist/commands/make/mcp-prompt.d.ts +0 -4
  62. package/dist/commands/make/mcp-prompt.d.ts.map +0 -1
  63. package/dist/commands/make/mcp-prompt.js +0 -45
  64. package/dist/commands/make/mcp-prompt.js.map +0 -1
  65. package/dist/commands/make/mcp-resource.d.ts +0 -4
  66. package/dist/commands/make/mcp-resource.d.ts.map +0 -1
  67. package/dist/commands/make/mcp-resource.js +0 -44
  68. package/dist/commands/make/mcp-resource.js.map +0 -1
  69. package/dist/commands/make/mcp-server.d.ts +0 -4
  70. package/dist/commands/make/mcp-server.d.ts.map +0 -1
  71. package/dist/commands/make/mcp-server.js +0 -46
  72. package/dist/commands/make/mcp-server.js.map +0 -1
  73. package/dist/commands/make/mcp-tool.d.ts +0 -4
  74. package/dist/commands/make/mcp-tool.d.ts.map +0 -1
  75. package/dist/commands/make/mcp-tool.js +0 -43
  76. package/dist/commands/make/mcp-tool.js.map +0 -1
  77. package/dist/commands/migrate.d.ts +0 -11
  78. package/dist/commands/migrate.d.ts.map +0 -1
  79. package/dist/commands/migrate.js +0 -152
  80. package/dist/commands/migrate.js.map +0 -1
package/dist/index.js CHANGED
@@ -5,8 +5,10 @@ import fs from 'node:fs/promises';
5
5
  import { makeCommand } from './commands/make.js';
6
6
  import { moduleCommand } from './commands/module.js';
7
7
  import { vendorPublishCommand } from './commands/vendor-publish.js';
8
- import { migrateCommands } from './commands/migrate.js';
9
- import { rudder, parseSignature } from '@rudderjs/rudder';
8
+ import { providersDiscoverCommand } from './commands/providers-discover.js';
9
+ import { commandListCommand } from './commands/command-list.js';
10
+ import { rudder, parseSignature, CancelledError, commandObservers } from '@rudderjs/rudder';
11
+ import { CliError } from './errors.js';
10
12
  const C = {
11
13
  green: (s) => `\x1b[32m${s}\x1b[0m`,
12
14
  yellow: (s) => `\x1b[33m${s}\x1b[0m`,
@@ -88,6 +90,77 @@ async function bootApp() {
88
90
  console.error = saved.error;
89
91
  }
90
92
  }
93
+ /**
94
+ * Run a command action and emit a CommandObservation to any subscribed
95
+ * observers (e.g. telescope's CommandCollector). The observation fires
96
+ * even when the action throws — telescope wants to record failures too.
97
+ */
98
+ async function observeCommand(name, args, opts, source, fn) {
99
+ const start = Date.now();
100
+ let exitCode = 0;
101
+ let error;
102
+ try {
103
+ await fn();
104
+ }
105
+ catch (e) {
106
+ exitCode = e instanceof CancelledError ? 130 : 1;
107
+ error = e instanceof Error ? e : new Error(String(e));
108
+ throw e;
109
+ }
110
+ finally {
111
+ const obs = {
112
+ name, args, opts, source,
113
+ duration: Date.now() - start,
114
+ exitCode,
115
+ };
116
+ if (error)
117
+ obs.error = error;
118
+ commandObservers.emit(obs);
119
+ }
120
+ }
121
+ /**
122
+ * Eagerly import commands from installed packages.
123
+ * Packages register make specs (scaffolders) and runtime commands here so
124
+ * they work both with and without full app boot.
125
+ *
126
+ * Dynamic import paths are built at runtime so TypeScript doesn't try to
127
+ * resolve them at compile time (these packages are optional).
128
+ */
129
+ async function loadPackageCommands() {
130
+ const { registerMakeSpecs, rudder } = await import('@rudderjs/rudder');
131
+ // Helper: import a subpath from a package, swallow if not installed
132
+ const tryImport = (pkg, subpath) => import(/* @vite-ignore */ `${pkg}/${subpath}`);
133
+ const loaders = [
134
+ // @rudderjs/ai → make:agent
135
+ async () => {
136
+ const mod = await tryImport('@rudderjs/ai', 'commands/make-agent');
137
+ registerMakeSpecs(mod['makeAgentSpec']);
138
+ },
139
+ // @rudderjs/mcp → make:mcp-*
140
+ async () => {
141
+ const [server, tool, resource, prompt] = await Promise.all([
142
+ tryImport('@rudderjs/mcp', 'commands/make-mcp-server'),
143
+ tryImport('@rudderjs/mcp', 'commands/make-mcp-tool'),
144
+ tryImport('@rudderjs/mcp', 'commands/make-mcp-resource'),
145
+ tryImport('@rudderjs/mcp', 'commands/make-mcp-prompt'),
146
+ ]);
147
+ registerMakeSpecs(server['makeMcpServerSpec'], tool['makeMcpToolSpec'], resource['makeMcpResourceSpec'], prompt['makeMcpPromptSpec']);
148
+ },
149
+ // @rudderjs/orm → migrate, migrate:fresh, migrate:status, make:migration, db:push, db:generate
150
+ async () => {
151
+ const mod = await tryImport('@rudderjs/orm', 'commands/migrate');
152
+ const register = mod['registerMigrateCommands'];
153
+ register(rudder);
154
+ },
155
+ // @rudderjs/router → route:list
156
+ async () => {
157
+ const mod = await tryImport('@rudderjs/router', 'commands/route-list');
158
+ const register = mod['registerRouteListCommand'];
159
+ register(rudder);
160
+ },
161
+ ];
162
+ await Promise.all(loaders.map(fn => fn().catch(() => { })));
163
+ }
91
164
  async function main() {
92
165
  program
93
166
  .name('rudder')
@@ -96,6 +169,33 @@ async function main() {
96
169
  // Laravel-style custom help output
97
170
  program.configureHelp({
98
171
  formatHelp: (cmd, helper) => {
172
+ // Subcommand help: show description, usage, args, options (Laravel-ish)
173
+ if (cmd.parent) {
174
+ const args = helper.visibleArguments(cmd);
175
+ const opts = helper.visibleOptions(cmd);
176
+ const argLabel = (a) => {
177
+ const n = a.variadic ? `${a.name()}...` : a.name();
178
+ return a.required ? `<${n}>` : `[${n}]`;
179
+ };
180
+ let out = `\n ${C.dim('Description:')}\n ${cmd.description()}\n`;
181
+ out += `\n ${C.dim('Usage:')}\n ${cmd.name()}${opts.length ? ' [options]' : ''}${args.map(a => ` ${argLabel(a)}`).join('')}\n`;
182
+ if (args.length > 0) {
183
+ const w = Math.max(...args.map(a => argLabel(a).length)) + 2;
184
+ out += `\n ${C.dim('Arguments:')}\n`;
185
+ for (const a of args) {
186
+ out += ` ${C.green(argLabel(a).padEnd(w))} ${helper.argumentDescription(a)}\n`;
187
+ }
188
+ }
189
+ if (opts.length > 0) {
190
+ const w = Math.max(...opts.map(o => helper.optionTerm(o).length)) + 2;
191
+ out += `\n ${C.dim('Options:')}\n`;
192
+ for (const o of opts) {
193
+ out += ` ${C.green(helper.optionTerm(o).padEnd(w))} ${helper.optionDescription(o)}\n`;
194
+ }
195
+ }
196
+ return out + '\n';
197
+ }
198
+ // Top-level help: list all commands grouped by namespace
99
199
  const cmds = helper.visibleCommands(cmd).filter(c => c.name() !== 'help');
100
200
  const nameWidth = Math.max(...cmds.map(c => c.name().length), 8) + 4;
101
201
  // Group by namespace (the part before ':')
@@ -124,88 +224,31 @@ async function main() {
124
224
  return out + '\n';
125
225
  },
126
226
  });
127
- makeCommand(program);
128
227
  moduleCommand(program);
129
228
  vendorPublishCommand(program);
130
- migrateCommands(program);
229
+ providersDiscoverCommand(program);
230
+ // Commands that scan files / manage tooling state must work even when the
231
+ // app cannot boot (e.g. fresh clone, missing manifest, broken provider config).
232
+ // List them here to skip the bootApp() phase entirely.
233
+ //
234
+ // - Anything starting with `make:` is a scaffolder — reads templates from
235
+ // disk, writes new files, doesn't touch the running app.
236
+ // - `providers:discover` regenerates the manifest the app needs to boot,
237
+ // so it has to work when the app can't.
238
+ // - `module:publish` copies static assets out of node_modules; no app state.
239
+ const NO_BOOT_EXACT = new Set(['providers:discover', 'module:publish']);
240
+ const NO_BOOT_PREFIX = ['make:'];
241
+ const skipBoot = process.argv.slice(2).some(arg => NO_BOOT_EXACT.has(arg) || NO_BOOT_PREFIX.some(p => arg.startsWith(p)));
242
+ // Eagerly load make specs from installed packages so make:* works without boot.
243
+ // Each package exports its MakeSpec objects from a known subpath.
244
+ await loadPackageCommands();
245
+ // Register all make:* commands (CLI-owned + package-contributed)
246
+ makeCommand(program);
131
247
  // Boot the app (providers + route files) so commands can use DB, etc.
132
- await bootApp();
248
+ if (!skipBoot)
249
+ await bootApp();
133
250
  // ── Built-in framework commands ───────────────────────────
134
- program
135
- .command('route:list')
136
- .description('List all registered routes')
137
- .action(async () => {
138
- let apiRoutes = [];
139
- try {
140
- const { router } = await import('@rudderjs/router');
141
- apiRoutes = router.list();
142
- }
143
- catch { /* @rudderjs/router not installed */ }
144
- // ── Scan Vike filesystem routes ──────────────────────
145
- const vikeRoutes = [];
146
- const pagesDir = path.join(process.cwd(), 'pages');
147
- try {
148
- const scanPages = async (dir, base = '') => {
149
- const entries = await fs.readdir(dir, { withFileTypes: true });
150
- const hasPage = entries.some(e => e.isFile() && e.name.startsWith('+Page.'));
151
- if (hasPage) {
152
- const route = base === '' ? '/' : base;
153
- const relDir = path.relative(pagesDir, dir);
154
- vikeRoutes.push({ route, dir: relDir });
155
- }
156
- for (const entry of entries) {
157
- if (!entry.isDirectory() || entry.name.startsWith('_'))
158
- continue;
159
- const segment = entry.name;
160
- const routeSegment = segment.startsWith('@') ? `:${segment.slice(1)}` : segment;
161
- const nextBase = segment === 'index' ? '' : `${base}/${routeSegment}`;
162
- await scanPages(path.join(dir, segment), nextBase);
163
- }
164
- };
165
- await scanPages(pagesDir);
166
- }
167
- catch { /* no pages dir */ }
168
- const methodColor = (m) => {
169
- const colors = {
170
- GET: '\x1b[32m', POST: '\x1b[33m', PUT: '\x1b[34m',
171
- PATCH: '\x1b[35m', DELETE: '\x1b[31m', ALL: '\x1b[36m',
172
- };
173
- return `${colors[m] ?? '\x1b[37m'}${m.padEnd(7)}\x1b[0m`;
174
- };
175
- const allPaths = [...apiRoutes.map(r => r.path), ...vikeRoutes.map(r => r.route)];
176
- const pathWidth = Math.min(Math.max(...allPaths.map(p => p.length), 4), 60);
177
- const mwWidth = 12;
178
- // ── API / Server routes ──────────────────────────────
179
- if (apiRoutes.length > 0) {
180
- console.log('\n \x1b[1mAPI Routes\x1b[0m');
181
- console.log(` ${'METHOD'.padEnd(9)} ${'PATH'.padEnd(pathWidth)} MIDDLEWARE`);
182
- console.log(` ${'─'.repeat(9)} ${'─'.repeat(pathWidth)} ${'─'.repeat(mwWidth)}`);
183
- for (const route of apiRoutes) {
184
- const names = route.middleware
185
- .map((fn) => (typeof fn === 'function' && fn.name) ? fn.name : null)
186
- .filter(Boolean);
187
- const mw = names.length > 0
188
- ? names.join(', ')
189
- : route.middleware.length > 0
190
- ? `${route.middleware.length}×`
191
- : '—';
192
- console.log(` ${methodColor(route.method)} ${route.path.padEnd(pathWidth)} ${mw}`);
193
- }
194
- }
195
- // ── Vike page routes ─────────────────────────────────
196
- if (vikeRoutes.length > 0) {
197
- console.log('\n \x1b[1mPage Routes\x1b[0m \x1b[2m(Vike filesystem routing)\x1b[0m');
198
- console.log(` ${'GET'.padEnd(9)} ${'PATH'.padEnd(pathWidth)} SOURCE`);
199
- console.log(` ${'─'.repeat(9)} ${'─'.repeat(pathWidth)} ${'─'.repeat(mwWidth)}`);
200
- for (const { route, dir } of vikeRoutes) {
201
- console.log(` \x1b[32mGET \x1b[0m ${route.padEnd(pathWidth)} pages/${dir}`);
202
- }
203
- }
204
- if (apiRoutes.length === 0 && vikeRoutes.length === 0) {
205
- console.log('No routes registered.');
206
- }
207
- console.log();
208
- });
251
+ commandListCommand(program);
209
252
  // Inline commands (rudder.command())
210
253
  for (const cmd of rudder.getCommands()) {
211
254
  program
@@ -214,7 +257,7 @@ async function main() {
214
257
  .allowUnknownOption()
215
258
  .action(async (...comArgs) => {
216
259
  const commanderCmd = comArgs[comArgs.length - 1];
217
- await cmd.handler(commanderCmd.args, commanderCmd.opts());
260
+ await observeCommand(cmd.name, { args: commanderCmd.args }, commanderCmd.opts(), 'inline', () => cmd.handler(commanderCmd.args, commanderCmd.opts()));
218
261
  });
219
262
  }
220
263
  // Class-based commands (rudder.register())
@@ -228,13 +271,13 @@ async function main() {
228
271
  : arg.required
229
272
  ? `<${arg.name}>`
230
273
  : `[${arg.name}]`;
231
- sub.argument(token, '', arg.defaultValue);
274
+ sub.argument(token, arg.description ?? '', arg.defaultValue);
232
275
  }
233
276
  for (const opt of opts) {
234
277
  const flag = opt.shorthand
235
278
  ? `-${opt.shorthand}, --${opt.name}${opt.hasValue ? ' <value>' : ''}`
236
279
  : `--${opt.name}${opt.hasValue ? ' <value>' : ''}`;
237
- sub.option(flag, '', opt.defaultValue);
280
+ sub.option(flag, opt.description ?? '', opt.defaultValue);
238
281
  }
239
282
  sub.action(async (...comArgs) => {
240
283
  // Commander passes: arg0, arg1, ..., CommandInstance
@@ -243,11 +286,22 @@ async function main() {
243
286
  args.forEach((a, i) => { parsedArgs[a.name] = comArgs[i]; });
244
287
  const fresh = new CommandClass();
245
288
  fresh._setContext(parsedArgs, commanderCmd.opts());
246
- await fresh.handle();
289
+ await observeCommand(name, parsedArgs, commanderCmd.opts(), 'class', () => fresh.handle());
247
290
  });
248
291
  }
249
292
  program.action(() => program.help());
250
293
  await program.parseAsync();
251
294
  }
252
- main().catch((err) => console.error(err));
295
+ main().catch((err) => {
296
+ if (err instanceof CancelledError) {
297
+ console.log(C.yellow('Cancelled.'));
298
+ process.exit(130);
299
+ }
300
+ if (err instanceof CliError) {
301
+ console.error(`\x1b[31m${err.message}\x1b[0m`);
302
+ process.exit(err.exitCode);
303
+ }
304
+ console.error(err);
305
+ process.exit(1);
306
+ });
253
307
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderjs/cli",
3
- "version": "0.0.6",
3
+ "version": "1.0.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,13 +20,22 @@
20
20
  "commander": "^12.0.0",
21
21
  "chalk": "^5.0.0",
22
22
  "@clack/prompts": "^1.0.0",
23
- "@rudderjs/rudder": "0.0.2"
23
+ "@rudderjs/core": "0.0.10",
24
+ "@rudderjs/rudder": "0.0.3"
25
+ },
26
+ "peerDependencies": {
27
+ "@rudderjs/router": "0.1.0"
28
+ },
29
+ "peerDependenciesMeta": {
30
+ "@rudderjs/router": {
31
+ "optional": true
32
+ }
24
33
  },
25
34
  "devDependencies": {
26
35
  "@types/node": "^20.0.0",
27
36
  "typescript": "^5.4.0",
28
37
  "tsx": "^4.0.0",
29
- "@rudderjs/router": "0.0.3"
38
+ "@rudderjs/router": "0.1.0"
30
39
  },
31
40
  "author": "Suleiman Shahbari",
32
41
  "scripts": {
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function stub(className: string): string;
3
- export declare function makeAgent(program: Command): void;
4
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/make/agent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB9C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBhD"}
@@ -1,41 +0,0 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
- import { resolve, dirname } from 'node:path';
4
- import chalk from 'chalk';
5
- export function stub(className) {
6
- return `import { Agent } from '@rudderjs/ai'
7
- import type { HasTools, AnyTool } from '@rudderjs/ai'
8
-
9
- export class ${className} extends Agent implements HasTools {
10
- instructions(): string {
11
- return 'You are a helpful assistant.'
12
- }
13
-
14
- // model(): string | undefined { return 'anthropic/claude-sonnet-4-5' }
15
-
16
- tools(): AnyTool[] {
17
- return []
18
- }
19
- }
20
- `;
21
- }
22
- export function makeAgent(program) {
23
- program
24
- .command('make:agent <name>')
25
- .description('Create a new AI agent class')
26
- .option('-f, --force', 'Overwrite if file already exists')
27
- .action(async (name, opts) => {
28
- const className = name.endsWith('Agent') ? name : `${name}Agent`;
29
- const relPath = `app/Agents/${className}.ts`;
30
- const outPath = resolve(process.cwd(), relPath);
31
- if (existsSync(outPath) && !opts.force) {
32
- console.error(chalk.red(` ✗ Already exists: ${relPath}`));
33
- console.error(chalk.dim(' Use --force to overwrite.'));
34
- return;
35
- }
36
- await mkdir(dirname(outPath), { recursive: true });
37
- await writeFile(outPath, stub(className));
38
- console.log(chalk.green(' ✔ Agent created:'), chalk.cyan(relPath));
39
- });
40
- }
41
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/commands/make/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;eAGM,SAAS;;;;;;;;;;;CAWvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAA;QAChE,MAAM,OAAO,GAAK,cAAc,SAAS,KAAK,CAAA;QAC9C,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAEjD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function stub(className: string): string;
3
- export declare function makeMcpPrompt(program: Command): void;
4
- //# sourceMappingURL=mcp-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-prompt.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBpD"}
@@ -1,45 +0,0 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
- import { resolve, dirname } from 'node:path';
4
- import chalk from 'chalk';
5
- export function stub(className) {
6
- return `import { McpPrompt, Description } from '@rudderjs/mcp'
7
- import type { McpPromptMessage } from '@rudderjs/mcp'
8
- import { z } from 'zod'
9
-
10
- @Description('Describe what this prompt does.')
11
- export class ${className} extends McpPrompt {
12
- arguments() {
13
- return z.object({
14
- // Define your prompt arguments here
15
- })
16
- }
17
-
18
- async handle(args: Record<string, unknown>): Promise<McpPromptMessage[]> {
19
- return [
20
- { role: 'user', content: 'Summarize the following data...' },
21
- ]
22
- }
23
- }
24
- `;
25
- }
26
- export function makeMcpPrompt(program) {
27
- program
28
- .command('make:mcp-prompt <name>')
29
- .description('Create a new MCP prompt class')
30
- .option('-f, --force', 'Overwrite if file already exists')
31
- .action(async (name, opts) => {
32
- const className = name.endsWith('Prompt') ? name : `${name}Prompt`;
33
- const relPath = `app/Mcp/Prompts/${className}.ts`;
34
- const outPath = resolve(process.cwd(), relPath);
35
- if (existsSync(outPath) && !opts.force) {
36
- console.error(chalk.red(` ✗ Already exists: ${relPath}`));
37
- console.error(chalk.dim(' Use --force to overwrite.'));
38
- return;
39
- }
40
- await mkdir(dirname(outPath), { recursive: true });
41
- await writeFile(outPath, stub(className));
42
- console.log(chalk.green(' ✔ MCP prompt created:'), chalk.cyan(relPath));
43
- });
44
- }
45
- //# sourceMappingURL=mcp-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-prompt.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;;;eAKM,SAAS;;;;;;;;;;;;;CAavB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAA;QAClE,MAAM,OAAO,GAAK,mBAAmB,SAAS,KAAK,CAAA;QACnD,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAEjD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function stub(className: string): string;
3
- export declare function makeMcpResource(program: Command): void;
4
- //# sourceMappingURL=mcp-resource.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-resource.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-resource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmB9C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBtD"}
@@ -1,44 +0,0 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
- import { resolve, dirname } from 'node:path';
4
- import chalk from 'chalk';
5
- export function stub(className) {
6
- return `import { McpResource, Description } from '@rudderjs/mcp'
7
-
8
- @Description('Describe what this resource provides.')
9
- export class ${className} extends McpResource {
10
- uri(): string {
11
- return 'app://${className.replace(/Resource$/, '').toLowerCase()}'
12
- }
13
-
14
- mimeType(): string {
15
- return 'text/plain'
16
- }
17
-
18
- async handle(): Promise<string> {
19
- // Return resource content here
20
- return 'Resource content'
21
- }
22
- }
23
- `;
24
- }
25
- export function makeMcpResource(program) {
26
- program
27
- .command('make:mcp-resource <name>')
28
- .description('Create a new MCP resource class')
29
- .option('-f, --force', 'Overwrite if file already exists')
30
- .action(async (name, opts) => {
31
- const className = name.endsWith('Resource') ? name : `${name}Resource`;
32
- const relPath = `app/Mcp/Resources/${className}.ts`;
33
- const outPath = resolve(process.cwd(), relPath);
34
- if (existsSync(outPath) && !opts.force) {
35
- console.error(chalk.red(` ✗ Already exists: ${relPath}`));
36
- console.error(chalk.dim(' Use --force to overwrite.'));
37
- return;
38
- }
39
- await mkdir(dirname(outPath), { recursive: true });
40
- await writeFile(outPath, stub(className));
41
- console.log(chalk.green(' ✔ MCP resource created:'), chalk.cyan(relPath));
42
- });
43
- }
44
- //# sourceMappingURL=mcp-resource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-resource.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;eAGM,SAAS;;oBAEJ,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;;;;;;;;;;;;CAYnE,CAAA;AACD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAA;QACtE,MAAM,OAAO,GAAK,qBAAqB,SAAS,KAAK,CAAA;QACrD,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAEjD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function stub(className: string): string;
3
- export declare function makeMcpServer(program: Command): void;
4
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqB9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBpD"}
@@ -1,46 +0,0 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
- import { resolve, dirname } from 'node:path';
4
- import chalk from 'chalk';
5
- export function stub(className) {
6
- return `import { McpServer } from '@rudderjs/mcp'
7
- import { Name, Version, Instructions } from '@rudderjs/mcp'
8
-
9
- @Name('${className.replace(/Server$/, '')} Server')
10
- @Version('1.0.0')
11
- @Instructions('Provide a description of this MCP server.')
12
- export class ${className} extends McpServer {
13
- protected tools = [
14
- // Add your tool classes here
15
- ]
16
-
17
- protected resources = [
18
- // Add your resource classes here
19
- ]
20
-
21
- protected prompts = [
22
- // Add your prompt classes here
23
- ]
24
- }
25
- `;
26
- }
27
- export function makeMcpServer(program) {
28
- program
29
- .command('make:mcp-server <name>')
30
- .description('Create a new MCP server class')
31
- .option('-f, --force', 'Overwrite if file already exists')
32
- .action(async (name, opts) => {
33
- const className = name.endsWith('Server') ? name : `${name}Server`;
34
- const relPath = `app/Mcp/Servers/${className}.ts`;
35
- const outPath = resolve(process.cwd(), relPath);
36
- if (existsSync(outPath) && !opts.force) {
37
- console.error(chalk.red(` ✗ Already exists: ${relPath}`));
38
- console.error(chalk.dim(' Use --force to overwrite.'));
39
- return;
40
- }
41
- await mkdir(dirname(outPath), { recursive: true });
42
- await writeFile(outPath, stub(className));
43
- console.log(chalk.green(' ✔ MCP server created:'), chalk.cyan(relPath));
44
- });
45
- }
46
- //# sourceMappingURL=mcp-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/commands/make/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;SAGA,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;;eAG1B,SAAS;;;;;;;;;;;;;CAavB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAA;QAClE,MAAM,OAAO,GAAK,mBAAmB,SAAS,KAAK,CAAA;QACnD,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAEjD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function stub(className: string): string;
3
- export declare function makeMcpTool(program: Command): void;
4
- //# sourceMappingURL=mcp-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-tool.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mcp-tool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBlD"}