@veloxts/mcp 0.6.23
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.
- package/LICENSE +21 -0
- package/dist/bin.d.ts +17 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +25 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/templates.d.ts +75 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/prompts/templates.js +442 -0
- package/dist/prompts/templates.js.map +1 -0
- package/dist/resources/errors.d.ts +45 -0
- package/dist/resources/errors.d.ts.map +1 -0
- package/dist/resources/errors.js +117 -0
- package/dist/resources/errors.js.map +1 -0
- package/dist/resources/index.d.ts +14 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +10 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/procedures.d.ts +61 -0
- package/dist/resources/procedures.d.ts.map +1 -0
- package/dist/resources/procedures.js +147 -0
- package/dist/resources/procedures.js.map +1 -0
- package/dist/resources/routes.d.ts +44 -0
- package/dist/resources/routes.d.ts.map +1 -0
- package/dist/resources/routes.js +115 -0
- package/dist/resources/routes.js.map +1 -0
- package/dist/resources/schemas.d.ts +41 -0
- package/dist/resources/schemas.d.ts.map +1 -0
- package/dist/resources/schemas.js +143 -0
- package/dist/resources/schemas.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +371 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/generate.d.ts +64 -0
- package/dist/tools/generate.d.ts.map +1 -0
- package/dist/tools/generate.js +155 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/migrate.d.ts +72 -0
- package/dist/tools/migrate.d.ts.map +1 -0
- package/dist/tools/migrate.js +163 -0
- package/dist/tools/migrate.js.map +1 -0
- package/dist/utils/project.d.ts +49 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +133 -0
- package/dist/utils/project.js.map +1 -0
- package/package.json +63 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VeloxTS MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server that exposes VeloxTS project context to AI tools.
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { getPromptTemplate, listPromptTemplates } from './prompts/index.js';
|
|
11
|
+
import { formatErrorsAsText, formatProceduresAsText, formatRoutesAsText, formatSchemasAsText, getErrors, getProcedures, getRoutes, getSchemas, } from './resources/index.js';
|
|
12
|
+
import { formatGenerateResult, generate } from './tools/generate.js';
|
|
13
|
+
import { formatMigrateResult, migrate } from './tools/migrate.js';
|
|
14
|
+
import { findProjectRoot, getProjectInfo } from './utils/project.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Tool Argument Schemas (Zod validation)
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Schema for velox_generate tool arguments
|
|
20
|
+
*/
|
|
21
|
+
const GenerateArgsSchema = z.object({
|
|
22
|
+
type: z
|
|
23
|
+
.enum(['procedure', 'schema', 'model', 'migration', 'test', 'resource', 'seeder', 'factory'])
|
|
24
|
+
.describe('Type of code to generate'),
|
|
25
|
+
name: z.string().min(1).describe('Entity name (e.g., User, Post)'),
|
|
26
|
+
crud: z.boolean().optional().describe('Generate full CRUD operations'),
|
|
27
|
+
dryRun: z.boolean().optional().describe('Preview without writing files'),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Schema for velox_migrate tool arguments
|
|
31
|
+
*/
|
|
32
|
+
const MigrateArgsSchema = z.object({
|
|
33
|
+
action: z
|
|
34
|
+
.enum(['status', 'run', 'rollback', 'fresh', 'reset'])
|
|
35
|
+
.describe('Migration action to perform'),
|
|
36
|
+
dev: z.boolean().optional().describe('Development mode (creates migration from schema diff)'),
|
|
37
|
+
dryRun: z.boolean().optional().describe('Preview without executing'),
|
|
38
|
+
});
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Server Factory
|
|
41
|
+
// ============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Create a VeloxTS MCP server
|
|
44
|
+
*/
|
|
45
|
+
export function createVeloxMCPServer(options = {}) {
|
|
46
|
+
const projectRoot = options.projectRoot ?? findProjectRoot() ?? process.cwd();
|
|
47
|
+
const debug = options.debug ?? false;
|
|
48
|
+
const serverName = options.name ?? 'veloxts-mcp';
|
|
49
|
+
const serverVersion = options.version ?? '0.5.0';
|
|
50
|
+
const server = new Server({
|
|
51
|
+
name: serverName,
|
|
52
|
+
version: serverVersion,
|
|
53
|
+
}, {
|
|
54
|
+
capabilities: {
|
|
55
|
+
resources: {},
|
|
56
|
+
tools: {},
|
|
57
|
+
prompts: {},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
// Debug logging helper
|
|
61
|
+
const log = debug ? (message) => console.error(`[${serverName}] ${message}`) : () => { };
|
|
62
|
+
// ===========================================================================
|
|
63
|
+
// Resources
|
|
64
|
+
// ===========================================================================
|
|
65
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
66
|
+
log('Listing resources');
|
|
67
|
+
return {
|
|
68
|
+
resources: [
|
|
69
|
+
{
|
|
70
|
+
uri: 'velox://procedures',
|
|
71
|
+
name: 'VeloxTS Procedures',
|
|
72
|
+
description: 'List all registered procedures with their types, inputs, outputs, and routes',
|
|
73
|
+
mimeType: 'text/plain',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
uri: 'velox://routes',
|
|
77
|
+
name: 'REST Routes',
|
|
78
|
+
description: 'REST route mappings generated from procedures',
|
|
79
|
+
mimeType: 'text/plain',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
uri: 'velox://schemas',
|
|
83
|
+
name: 'Zod Schemas',
|
|
84
|
+
description: 'All Zod validation schemas in the project',
|
|
85
|
+
mimeType: 'text/plain',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
uri: 'velox://errors',
|
|
89
|
+
name: 'Error Catalog',
|
|
90
|
+
description: 'VeloxTS error codes with messages and fix suggestions',
|
|
91
|
+
mimeType: 'text/plain',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
uri: 'velox://project',
|
|
95
|
+
name: 'Project Info',
|
|
96
|
+
description: 'VeloxTS project information and structure',
|
|
97
|
+
mimeType: 'text/plain',
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
103
|
+
const uri = request.params.uri;
|
|
104
|
+
log(`Reading resource: ${uri}`);
|
|
105
|
+
switch (uri) {
|
|
106
|
+
case 'velox://procedures': {
|
|
107
|
+
const data = await getProcedures(projectRoot);
|
|
108
|
+
return {
|
|
109
|
+
contents: [
|
|
110
|
+
{
|
|
111
|
+
uri,
|
|
112
|
+
mimeType: 'text/plain',
|
|
113
|
+
text: formatProceduresAsText(data),
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
case 'velox://routes': {
|
|
119
|
+
const data = await getRoutes(projectRoot);
|
|
120
|
+
return {
|
|
121
|
+
contents: [
|
|
122
|
+
{
|
|
123
|
+
uri,
|
|
124
|
+
mimeType: 'text/plain',
|
|
125
|
+
text: formatRoutesAsText(data),
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
case 'velox://schemas': {
|
|
131
|
+
const data = await getSchemas(projectRoot);
|
|
132
|
+
return {
|
|
133
|
+
contents: [
|
|
134
|
+
{
|
|
135
|
+
uri,
|
|
136
|
+
mimeType: 'text/plain',
|
|
137
|
+
text: formatSchemasAsText(data),
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
case 'velox://errors': {
|
|
143
|
+
const data = getErrors();
|
|
144
|
+
return {
|
|
145
|
+
contents: [
|
|
146
|
+
{
|
|
147
|
+
uri,
|
|
148
|
+
mimeType: 'text/plain',
|
|
149
|
+
text: formatErrorsAsText(data),
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
case 'velox://project': {
|
|
155
|
+
const info = await getProjectInfo(projectRoot);
|
|
156
|
+
const text = info
|
|
157
|
+
? [
|
|
158
|
+
'# VeloxTS Project',
|
|
159
|
+
'',
|
|
160
|
+
`Name: ${info.name}`,
|
|
161
|
+
`Version: ${info.version}`,
|
|
162
|
+
`Root: ${info.root}`,
|
|
163
|
+
'',
|
|
164
|
+
'## Paths',
|
|
165
|
+
info.apiPath ? `API: ${info.apiPath}` : null,
|
|
166
|
+
info.webPath ? `Web: ${info.webPath}` : null,
|
|
167
|
+
info.proceduresPath ? `Procedures: ${info.proceduresPath}` : null,
|
|
168
|
+
info.schemasPath ? `Schemas: ${info.schemasPath}` : null,
|
|
169
|
+
info.prismaSchemaPath ? `Prisma Schema: ${info.prismaSchemaPath}` : null,
|
|
170
|
+
]
|
|
171
|
+
.filter(Boolean)
|
|
172
|
+
.join('\n')
|
|
173
|
+
: 'No VeloxTS project detected in current directory.';
|
|
174
|
+
return {
|
|
175
|
+
contents: [
|
|
176
|
+
{
|
|
177
|
+
uri,
|
|
178
|
+
mimeType: 'text/plain',
|
|
179
|
+
text,
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
default:
|
|
185
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// ===========================================================================
|
|
189
|
+
// Tools
|
|
190
|
+
// ===========================================================================
|
|
191
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
192
|
+
log('Listing tools');
|
|
193
|
+
return {
|
|
194
|
+
tools: [
|
|
195
|
+
{
|
|
196
|
+
name: 'velox_generate',
|
|
197
|
+
description: 'Generate VeloxTS code (procedures, schemas, resources, etc.)',
|
|
198
|
+
inputSchema: {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
type: {
|
|
202
|
+
type: 'string',
|
|
203
|
+
enum: [
|
|
204
|
+
'procedure',
|
|
205
|
+
'schema',
|
|
206
|
+
'model',
|
|
207
|
+
'migration',
|
|
208
|
+
'test',
|
|
209
|
+
'resource',
|
|
210
|
+
'seeder',
|
|
211
|
+
'factory',
|
|
212
|
+
],
|
|
213
|
+
description: 'Type of code to generate',
|
|
214
|
+
},
|
|
215
|
+
name: {
|
|
216
|
+
type: 'string',
|
|
217
|
+
description: 'Entity name (e.g., User, Post)',
|
|
218
|
+
},
|
|
219
|
+
crud: {
|
|
220
|
+
type: 'boolean',
|
|
221
|
+
description: 'Generate full CRUD operations',
|
|
222
|
+
},
|
|
223
|
+
dryRun: {
|
|
224
|
+
type: 'boolean',
|
|
225
|
+
description: 'Preview without writing files',
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
required: ['type', 'name'],
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'velox_migrate',
|
|
233
|
+
description: 'Run database migrations',
|
|
234
|
+
inputSchema: {
|
|
235
|
+
type: 'object',
|
|
236
|
+
properties: {
|
|
237
|
+
action: {
|
|
238
|
+
type: 'string',
|
|
239
|
+
enum: ['status', 'run', 'rollback', 'fresh', 'reset'],
|
|
240
|
+
description: 'Migration action to perform',
|
|
241
|
+
},
|
|
242
|
+
dev: {
|
|
243
|
+
type: 'boolean',
|
|
244
|
+
description: 'Development mode (creates migration from schema diff)',
|
|
245
|
+
},
|
|
246
|
+
dryRun: {
|
|
247
|
+
type: 'boolean',
|
|
248
|
+
description: 'Preview without executing',
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
required: ['action'],
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
};
|
|
256
|
+
});
|
|
257
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
258
|
+
const { name, arguments: args } = request.params;
|
|
259
|
+
log(`Calling tool: ${name}`);
|
|
260
|
+
switch (name) {
|
|
261
|
+
case 'velox_generate': {
|
|
262
|
+
// Validate arguments with Zod
|
|
263
|
+
const parsed = GenerateArgsSchema.safeParse(args);
|
|
264
|
+
if (!parsed.success) {
|
|
265
|
+
const errors = parsed.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`);
|
|
266
|
+
return {
|
|
267
|
+
content: [
|
|
268
|
+
{
|
|
269
|
+
type: 'text',
|
|
270
|
+
text: `Invalid arguments for velox_generate:\n${errors.join('\n')}`,
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
isError: true,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
const result = await generate({
|
|
277
|
+
type: parsed.data.type,
|
|
278
|
+
name: parsed.data.name,
|
|
279
|
+
crud: parsed.data.crud,
|
|
280
|
+
dryRun: parsed.data.dryRun,
|
|
281
|
+
json: true,
|
|
282
|
+
});
|
|
283
|
+
return {
|
|
284
|
+
content: [
|
|
285
|
+
{
|
|
286
|
+
type: 'text',
|
|
287
|
+
text: formatGenerateResult(result),
|
|
288
|
+
},
|
|
289
|
+
],
|
|
290
|
+
isError: !result.success,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
case 'velox_migrate': {
|
|
294
|
+
// Validate arguments with Zod
|
|
295
|
+
const parsed = MigrateArgsSchema.safeParse(args);
|
|
296
|
+
if (!parsed.success) {
|
|
297
|
+
const errors = parsed.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`);
|
|
298
|
+
return {
|
|
299
|
+
content: [
|
|
300
|
+
{
|
|
301
|
+
type: 'text',
|
|
302
|
+
text: `Invalid arguments for velox_migrate:\n${errors.join('\n')}`,
|
|
303
|
+
},
|
|
304
|
+
],
|
|
305
|
+
isError: true,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
const result = await migrate({
|
|
309
|
+
action: parsed.data.action,
|
|
310
|
+
dev: parsed.data.dev,
|
|
311
|
+
dryRun: parsed.data.dryRun,
|
|
312
|
+
json: true,
|
|
313
|
+
});
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: 'text',
|
|
318
|
+
text: formatMigrateResult(result),
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
isError: !result.success,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
default:
|
|
325
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
// ===========================================================================
|
|
329
|
+
// Prompts
|
|
330
|
+
// ===========================================================================
|
|
331
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
332
|
+
log('Listing prompts');
|
|
333
|
+
const prompts = listPromptTemplates();
|
|
334
|
+
return {
|
|
335
|
+
prompts: prompts.map((p) => ({
|
|
336
|
+
name: p.name,
|
|
337
|
+
description: p.description,
|
|
338
|
+
})),
|
|
339
|
+
};
|
|
340
|
+
});
|
|
341
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
342
|
+
const { name } = request.params;
|
|
343
|
+
log(`Getting prompt: ${name}`);
|
|
344
|
+
const template = getPromptTemplate(name);
|
|
345
|
+
if (!template) {
|
|
346
|
+
throw new Error(`Unknown prompt: ${name}`);
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
description: template.description,
|
|
350
|
+
messages: [
|
|
351
|
+
{
|
|
352
|
+
role: 'user',
|
|
353
|
+
content: {
|
|
354
|
+
type: 'text',
|
|
355
|
+
text: template.content,
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
],
|
|
359
|
+
};
|
|
360
|
+
});
|
|
361
|
+
return server;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Run the MCP server with stdio transport
|
|
365
|
+
*/
|
|
366
|
+
export async function runMCPServer(options = {}) {
|
|
367
|
+
const server = createVeloxMCPServer(options);
|
|
368
|
+
const transport = new StdioServerTransport();
|
|
369
|
+
await server.connect(transport);
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Tool
|
|
3
|
+
*
|
|
4
|
+
* Wraps `velox make` commands for AI tool invocation.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generator types available via `velox make`
|
|
8
|
+
*/
|
|
9
|
+
export type GeneratorType = 'procedure' | 'schema' | 'model' | 'migration' | 'test' | 'resource' | 'seeder' | 'factory';
|
|
10
|
+
/**
|
|
11
|
+
* Generator options
|
|
12
|
+
*/
|
|
13
|
+
export interface GenerateOptions {
|
|
14
|
+
/** Generator type */
|
|
15
|
+
type: GeneratorType;
|
|
16
|
+
/** Entity name (e.g., 'User', 'Post') */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Generate full CRUD operations */
|
|
19
|
+
crud?: boolean;
|
|
20
|
+
/** Include pagination for list */
|
|
21
|
+
paginated?: boolean;
|
|
22
|
+
/** Add soft delete support */
|
|
23
|
+
softDelete?: boolean;
|
|
24
|
+
/** Include timestamps */
|
|
25
|
+
timestamps?: boolean;
|
|
26
|
+
/** Force overwrite existing files */
|
|
27
|
+
force?: boolean;
|
|
28
|
+
/** Dry run - preview without writing */
|
|
29
|
+
dryRun?: boolean;
|
|
30
|
+
/** Output as JSON */
|
|
31
|
+
json?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate tool result
|
|
35
|
+
*/
|
|
36
|
+
export interface GenerateResult {
|
|
37
|
+
success: boolean;
|
|
38
|
+
type: GeneratorType;
|
|
39
|
+
name: string;
|
|
40
|
+
files?: string[];
|
|
41
|
+
output?: string;
|
|
42
|
+
error?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Execute velox make command
|
|
46
|
+
*/
|
|
47
|
+
export declare function generate(options: GenerateOptions): Promise<GenerateResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Generate a procedure
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateProcedure(name: string, options?: Partial<Omit<GenerateOptions, 'type' | 'name'>>): Promise<GenerateResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Generate a schema
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateSchema(name: string, options?: Partial<Omit<GenerateOptions, 'type' | 'name'>>): Promise<GenerateResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Generate a full resource (procedure + schema + model)
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateResource(name: string, options?: Partial<Omit<GenerateOptions, 'type' | 'name'>>): Promise<GenerateResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Format generate result as text
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatGenerateResult(result: GenerateResult): string;
|
|
64
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyBH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAgFhF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GACxD,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GACxD,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GACxD,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAanE"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Tool
|
|
3
|
+
*
|
|
4
|
+
* Wraps `velox make` commands for AI tool invocation.
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from 'node:child_process';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { findProjectRoot } from '../utils/project.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Output Validation Schemas
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Schema for velox make JSON output
|
|
14
|
+
*/
|
|
15
|
+
const GenerateOutputSchema = z.object({
|
|
16
|
+
files: z.array(z.string()).optional(),
|
|
17
|
+
success: z.boolean().optional(),
|
|
18
|
+
message: z.string().optional(),
|
|
19
|
+
});
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Tool Handler
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Build CLI arguments for velox make command
|
|
25
|
+
*/
|
|
26
|
+
function buildArgs(options) {
|
|
27
|
+
const args = ['make', options.type, options.name];
|
|
28
|
+
if (options.crud)
|
|
29
|
+
args.push('--crud');
|
|
30
|
+
if (options.paginated)
|
|
31
|
+
args.push('--paginated');
|
|
32
|
+
if (options.softDelete)
|
|
33
|
+
args.push('--soft-delete');
|
|
34
|
+
if (options.timestamps)
|
|
35
|
+
args.push('--timestamps');
|
|
36
|
+
if (options.force)
|
|
37
|
+
args.push('--force');
|
|
38
|
+
if (options.dryRun)
|
|
39
|
+
args.push('--dry-run');
|
|
40
|
+
if (options.json)
|
|
41
|
+
args.push('--json');
|
|
42
|
+
return args;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Execute velox make command
|
|
46
|
+
*/
|
|
47
|
+
export async function generate(options) {
|
|
48
|
+
const projectRoot = findProjectRoot();
|
|
49
|
+
if (!projectRoot) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
type: options.type,
|
|
53
|
+
name: options.name,
|
|
54
|
+
error: 'Not in a VeloxTS project. Run this command from your project root.',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const args = buildArgs(options);
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
const child = spawn('npx', ['velox', ...args], {
|
|
60
|
+
cwd: projectRoot,
|
|
61
|
+
shell: true,
|
|
62
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
63
|
+
});
|
|
64
|
+
let stdout = '';
|
|
65
|
+
let stderr = '';
|
|
66
|
+
child.stdout?.on('data', (data) => {
|
|
67
|
+
stdout += data.toString();
|
|
68
|
+
});
|
|
69
|
+
child.stderr?.on('data', (data) => {
|
|
70
|
+
stderr += data.toString();
|
|
71
|
+
});
|
|
72
|
+
child.on('close', (code) => {
|
|
73
|
+
if (code === 0) {
|
|
74
|
+
// Try to parse and validate JSON output if requested
|
|
75
|
+
if (options.json) {
|
|
76
|
+
try {
|
|
77
|
+
const jsonData = JSON.parse(stdout);
|
|
78
|
+
const parsed = GenerateOutputSchema.safeParse(jsonData);
|
|
79
|
+
if (parsed.success) {
|
|
80
|
+
resolve({
|
|
81
|
+
success: true,
|
|
82
|
+
type: options.type,
|
|
83
|
+
name: options.name,
|
|
84
|
+
files: parsed.data.files,
|
|
85
|
+
output: stdout,
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Invalid JSON structure - fall through to plain output
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// JSON parse failed - fall through to plain output
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
resolve({
|
|
96
|
+
success: true,
|
|
97
|
+
type: options.type,
|
|
98
|
+
name: options.name,
|
|
99
|
+
output: stdout,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
resolve({
|
|
104
|
+
success: false,
|
|
105
|
+
type: options.type,
|
|
106
|
+
name: options.name,
|
|
107
|
+
error: stderr || stdout || `Command failed with exit code ${code}`,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
child.on('error', (err) => {
|
|
112
|
+
resolve({
|
|
113
|
+
success: false,
|
|
114
|
+
type: options.type,
|
|
115
|
+
name: options.name,
|
|
116
|
+
error: err.message,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Generate a procedure
|
|
123
|
+
*/
|
|
124
|
+
export async function generateProcedure(name, options) {
|
|
125
|
+
return generate({ type: 'procedure', name, ...options });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Generate a schema
|
|
129
|
+
*/
|
|
130
|
+
export async function generateSchema(name, options) {
|
|
131
|
+
return generate({ type: 'schema', name, ...options });
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Generate a full resource (procedure + schema + model)
|
|
135
|
+
*/
|
|
136
|
+
export async function generateResource(name, options) {
|
|
137
|
+
return generate({ type: 'resource', name, crud: true, ...options });
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Format generate result as text
|
|
141
|
+
*/
|
|
142
|
+
export function formatGenerateResult(result) {
|
|
143
|
+
if (result.success) {
|
|
144
|
+
const lines = [`Generated ${result.type}: ${result.name}`];
|
|
145
|
+
if (result.files?.length) {
|
|
146
|
+
lines.push('', 'Created files:');
|
|
147
|
+
for (const file of result.files) {
|
|
148
|
+
lines.push(` - ${file}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return lines.join('\n');
|
|
152
|
+
}
|
|
153
|
+
return `Failed to generate ${result.type} "${result.name}": ${result.error}`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools provide actions that AI assistants can invoke.
|
|
5
|
+
*/
|
|
6
|
+
export type { GenerateOptions, GenerateResult, GeneratorType } from './generate.js';
|
|
7
|
+
export { formatGenerateResult, generate, generateProcedure, generateResource, generateSchema, } from './generate.js';
|
|
8
|
+
export type { MigrateAction, MigrateOptions, MigrateResult, MigrationInfo } from './migrate.js';
|
|
9
|
+
export { formatMigrateResult, migrate, migrateFresh, migrateReset, migrateRollback, migrateRun, migrateStatus, } from './migrate.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools provide actions that AI assistants can invoke.
|
|
5
|
+
*/
|
|
6
|
+
export { formatGenerateResult, generate, generateProcedure, generateResource, generateSchema, } from './generate.js';
|
|
7
|
+
export { formatMigrateResult, migrate, migrateFresh, migrateReset, migrateRollback, migrateRun, migrateStatus, } from './migrate.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC"}
|