framlit-mcp 0.1.0 → 0.2.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 (45) hide show
  1. package/README.md +100 -42
  2. package/dist/api/client.d.ts +10 -0
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +13 -4
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/cli/index.d.ts +26 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +439 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/output.d.ts +15 -0
  11. package/dist/cli/output.d.ts.map +1 -0
  12. package/dist/cli/output.js +41 -0
  13. package/dist/cli/output.js.map +1 -0
  14. package/dist/core/handlers.d.ts +49 -0
  15. package/dist/core/handlers.d.ts.map +1 -0
  16. package/dist/core/handlers.js +148 -0
  17. package/dist/core/handlers.js.map +1 -0
  18. package/dist/core/registry.d.ts +25 -0
  19. package/dist/core/registry.d.ts.map +1 -0
  20. package/dist/core/registry.js +221 -0
  21. package/dist/core/registry.js.map +1 -0
  22. package/dist/core/schemas.d.ts +94 -0
  23. package/dist/core/schemas.d.ts.map +1 -0
  24. package/dist/core/schemas.js +69 -0
  25. package/dist/core/schemas.js.map +1 -0
  26. package/dist/index.d.ts +3 -5
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -178
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp/server.d.ts +9 -0
  31. package/dist/mcp/server.d.ts.map +1 -0
  32. package/dist/mcp/server.js +143 -0
  33. package/dist/mcp/server.js.map +1 -0
  34. package/dist/tools/credits.js +2 -2
  35. package/dist/tools/generate.d.ts.map +1 -1
  36. package/dist/tools/generate.js +10 -2
  37. package/dist/tools/generate.js.map +1 -1
  38. package/dist/tools/preview.d.ts +15 -0
  39. package/dist/tools/preview.d.ts.map +1 -0
  40. package/dist/tools/preview.js +40 -0
  41. package/dist/tools/preview.js.map +1 -0
  42. package/dist/tools/projects.js +2 -2
  43. package/dist/tools/projects.js.map +1 -1
  44. package/dist/tools/templates.js +1 -1
  45. package/package.json +10 -6
@@ -0,0 +1,439 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Framlit CLI
5
+ *
6
+ * Human-friendly and agent-friendly CLI for Framlit.
7
+ * Shares core logic with the MCP server.
8
+ *
9
+ * Usage:
10
+ * framlit generate <prompt> [--format landscape|portrait|square] [--output json|text] [--dry-run]
11
+ * framlit modify --code <code|file> --instruction <text> [--output json|text] [--dry-run]
12
+ * framlit projects list [--output json|text]
13
+ * framlit projects get <id>
14
+ * framlit projects create <name> --code <code|file> [--format landscape|portrait|square] [--dry-run]
15
+ * framlit projects update <id> [--name <name>] [--code <code|file>] [--dry-run]
16
+ * framlit render <projectId> [--dry-run]
17
+ * framlit render status <renderId> [--poll] [--output json|text]
18
+ * framlit templates [--category <cat>] [--official]
19
+ * framlit preview <code|file>
20
+ * framlit credits [--output json|text]
21
+ * framlit schema [tool-name]
22
+ * framlit mcp
23
+ * framlit version
24
+ * framlit help
25
+ */
26
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ var desc = Object.getOwnPropertyDescriptor(m, k);
29
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
30
+ desc = { enumerable: true, get: function() { return m[k]; } };
31
+ }
32
+ Object.defineProperty(o, k2, desc);
33
+ }) : (function(o, m, k, k2) {
34
+ if (k2 === undefined) k2 = k;
35
+ o[k2] = m[k];
36
+ }));
37
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
38
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
39
+ }) : function(o, v) {
40
+ o["default"] = v;
41
+ });
42
+ var __importStar = (this && this.__importStar) || (function () {
43
+ var ownKeys = function(o) {
44
+ ownKeys = Object.getOwnPropertyNames || function (o) {
45
+ var ar = [];
46
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
47
+ return ar;
48
+ };
49
+ return ownKeys(o);
50
+ };
51
+ return function (mod) {
52
+ if (mod && mod.__esModule) return mod;
53
+ var result = {};
54
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
55
+ __setModuleDefault(result, mod);
56
+ return result;
57
+ };
58
+ })();
59
+ Object.defineProperty(exports, "__esModule", { value: true });
60
+ const node_util_1 = require("node:util");
61
+ const node_fs_1 = require("node:fs");
62
+ const client_js_1 = require("../api/client.js");
63
+ const registry_js_1 = require("../core/registry.js");
64
+ const handlers = __importStar(require("../core/handlers.js"));
65
+ const output_js_1 = require("./output.js");
66
+ // ---------------------------------------------------------------------------
67
+ // Helpers
68
+ // ---------------------------------------------------------------------------
69
+ const VERSION = '0.2.0';
70
+ function getApiKey() {
71
+ const key = process.env.FRAMLIT_API_KEY;
72
+ if (!key) {
73
+ console.error('Error: FRAMLIT_API_KEY environment variable is required');
74
+ console.error('Get your API key at https://framlit.app/settings/api-keys');
75
+ process.exit(1);
76
+ }
77
+ return key;
78
+ }
79
+ /**
80
+ * Resolve a value that could be either inline text or a file path.
81
+ */
82
+ function resolveCodeValue(value) {
83
+ if ((0, node_fs_1.existsSync)(value) && !value.includes('\n')) {
84
+ return (0, node_fs_1.readFileSync)(value, 'utf-8');
85
+ }
86
+ return value;
87
+ }
88
+ function printHelp() {
89
+ console.log(`Framlit CLI v${VERSION} — AI-powered video generation
90
+
91
+ USAGE
92
+ framlit <command> [options]
93
+
94
+ COMMANDS
95
+ generate <prompt> Generate Remotion video code from text
96
+ modify Modify existing Remotion code
97
+ projects list List your projects
98
+ projects get <id> Get project details
99
+ projects create <name> Create a new project
100
+ projects update <id> Update a project
101
+ render <projectId> Start video rendering
102
+ render status <id> Check render status
103
+ templates Browse video templates
104
+ preview <code|file> Create a preview URL
105
+ credits Check credit balance
106
+ schema [tool-name] Show tool schemas (agent discovery)
107
+ mcp Start MCP server (for IDE integration)
108
+ version Show version
109
+ help Show this help
110
+
111
+ GLOBAL OPTIONS
112
+ --output json|text Output format (auto: JSON when piped)
113
+ --json '{"key":"val"}' Raw JSON input (bypass arg parsing)
114
+ --dry-run Preview request without executing
115
+
116
+ EXAMPLES
117
+ framlit generate "Logo animation with rotating 3D text"
118
+ framlit generate "Product demo" --format portrait --output json
119
+ framlit modify --code ./video.tsx --instruction "Change background to blue"
120
+ framlit render abc123 --dry-run
121
+ framlit render status xyz789 --poll
122
+ framlit schema framlit_generate_code
123
+ echo '{"prompt":"test"}' | framlit generate --json -
124
+
125
+ ENVIRONMENT
126
+ FRAMLIT_API_KEY Your Framlit API key (required)
127
+ FRAMLIT_API_URL Custom API URL (optional, for development)
128
+
129
+ More info: https://framlit.app/developers`);
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Command implementations
133
+ // ---------------------------------------------------------------------------
134
+ async function cmdGenerate(positionals, options) {
135
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
136
+ const jsonInput = options.json;
137
+ let prompt;
138
+ let format;
139
+ if (jsonInput) {
140
+ const input = jsonInput === '-'
141
+ ? (0, node_fs_1.readFileSync)(0, 'utf-8')
142
+ : jsonInput;
143
+ const parsed = JSON.parse(input);
144
+ prompt = parsed.prompt;
145
+ format = parsed.format;
146
+ }
147
+ else {
148
+ prompt = positionals.join(' ');
149
+ format = options.format;
150
+ }
151
+ if (!prompt) {
152
+ console.error((0, output_js_1.formatError)('prompt is required. Usage: framlit generate <prompt>', outputMode));
153
+ process.exit(1);
154
+ }
155
+ if (options['dry-run']) {
156
+ const payload = { prompt, format: format ?? 'landscape' };
157
+ console.log((0, output_js_1.formatOutput)(payload, `[dry-run] Would generate code with prompt: "${prompt}"`, outputMode));
158
+ return;
159
+ }
160
+ const client = new client_js_1.FramlitClient(getApiKey());
161
+ const result = await handlers.handleGenerateCode(client, { prompt, format });
162
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
163
+ }
164
+ async function cmdModify(positionals, options) {
165
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
166
+ const jsonInput = options.json;
167
+ let code;
168
+ let instruction;
169
+ if (jsonInput) {
170
+ const input = jsonInput === '-' ? (0, node_fs_1.readFileSync)(0, 'utf-8') : jsonInput;
171
+ const parsed = JSON.parse(input);
172
+ code = parsed.code;
173
+ instruction = parsed.instruction;
174
+ }
175
+ else {
176
+ code = resolveCodeValue(options.code || '');
177
+ instruction = options.instruction || positionals.join(' ');
178
+ }
179
+ if (!code || !instruction) {
180
+ console.error((0, output_js_1.formatError)('--code and --instruction are required', outputMode));
181
+ process.exit(1);
182
+ }
183
+ if (options['dry-run']) {
184
+ const payload = { code: code.substring(0, 100) + '...', instruction };
185
+ console.log((0, output_js_1.formatOutput)(payload, `[dry-run] Would modify code with instruction: "${instruction}"`, outputMode));
186
+ return;
187
+ }
188
+ const client = new client_js_1.FramlitClient(getApiKey());
189
+ const result = await handlers.handleModifyCode(client, { code, instruction });
190
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
191
+ }
192
+ async function cmdProjects(positionals, options) {
193
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
194
+ const sub = positionals[0];
195
+ const client = new client_js_1.FramlitClient(getApiKey());
196
+ switch (sub) {
197
+ case 'list':
198
+ case undefined: {
199
+ const result = await handlers.handleListProjects(client);
200
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
201
+ break;
202
+ }
203
+ case 'get': {
204
+ const id = positionals[1];
205
+ if (!id) {
206
+ console.error((0, output_js_1.formatError)('Project ID required', outputMode));
207
+ process.exit(1);
208
+ }
209
+ const result = await handlers.handleGetProject(client, { projectId: id });
210
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
211
+ break;
212
+ }
213
+ case 'create': {
214
+ const name = positionals[1];
215
+ if (!name) {
216
+ console.error((0, output_js_1.formatError)('Project name required', outputMode));
217
+ process.exit(1);
218
+ }
219
+ const code = options.code ? resolveCodeValue(options.code) : undefined;
220
+ const format = options.format;
221
+ if (options['dry-run']) {
222
+ console.log((0, output_js_1.formatOutput)({ name, format: format ?? 'landscape', hasCode: !!code }, `[dry-run] Would create project: "${name}"`, outputMode));
223
+ return;
224
+ }
225
+ const result = await handlers.handleCreateProject(client, { name, code, format });
226
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
227
+ break;
228
+ }
229
+ case 'update': {
230
+ const id = positionals[1];
231
+ if (!id) {
232
+ console.error((0, output_js_1.formatError)('Project ID required', outputMode));
233
+ process.exit(1);
234
+ }
235
+ const name = options.name;
236
+ const code = options.code ? resolveCodeValue(options.code) : undefined;
237
+ if (options['dry-run']) {
238
+ console.log((0, output_js_1.formatOutput)({ projectId: id, name, hasCode: !!code }, `[dry-run] Would update project: ${id}`, outputMode));
239
+ return;
240
+ }
241
+ const result = await handlers.handleUpdateProject(client, { projectId: id, name, code });
242
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
243
+ break;
244
+ }
245
+ default:
246
+ console.error((0, output_js_1.formatError)(`Unknown projects subcommand: ${sub}`, outputMode));
247
+ process.exit(1);
248
+ }
249
+ }
250
+ async function cmdRender(positionals, options) {
251
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
252
+ const client = new client_js_1.FramlitClient(getApiKey());
253
+ // framlit render status <renderId>
254
+ if (positionals[0] === 'status') {
255
+ const renderId = positionals[1];
256
+ if (!renderId) {
257
+ console.error((0, output_js_1.formatError)('Render ID required', outputMode));
258
+ process.exit(1);
259
+ }
260
+ if (options.poll) {
261
+ // Poll mode: stream NDJSON until completion
262
+ let done = false;
263
+ while (!done) {
264
+ const result = await handlers.handleGetRenderStatus(client, { renderId });
265
+ const data = result.data;
266
+ (0, output_js_1.writeNdjsonLine)(result.data);
267
+ if (data.status === 'completed' || data.status === 'failed') {
268
+ done = true;
269
+ }
270
+ else {
271
+ await new Promise((r) => setTimeout(r, 2000));
272
+ }
273
+ }
274
+ }
275
+ else {
276
+ const result = await handlers.handleGetRenderStatus(client, { renderId });
277
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
278
+ }
279
+ return;
280
+ }
281
+ // framlit render <projectId>
282
+ const projectId = positionals[0];
283
+ if (!projectId) {
284
+ console.error((0, output_js_1.formatError)('Project ID required', outputMode));
285
+ process.exit(1);
286
+ }
287
+ if (options['dry-run']) {
288
+ console.log((0, output_js_1.formatOutput)({ projectId }, `[dry-run] Would start render for project: ${projectId}`, outputMode));
289
+ return;
290
+ }
291
+ const result = await handlers.handleRenderVideo(client, { projectId });
292
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
293
+ }
294
+ async function cmdTemplates(_positionals, options) {
295
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
296
+ const client = new client_js_1.FramlitClient(getApiKey());
297
+ const category = options.category;
298
+ const official = options.official;
299
+ const result = await handlers.handleListTemplates(client, { category, official });
300
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
301
+ }
302
+ async function cmdPreview(positionals, options) {
303
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
304
+ const codeInput = positionals[0];
305
+ if (!codeInput) {
306
+ console.error((0, output_js_1.formatError)('Code or file path required', outputMode));
307
+ process.exit(1);
308
+ }
309
+ const code = resolveCodeValue(codeInput);
310
+ const client = new client_js_1.FramlitClient(getApiKey());
311
+ const result = await handlers.handlePreviewCode(client, { code });
312
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
313
+ }
314
+ async function cmdCredits(options) {
315
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
316
+ const client = new client_js_1.FramlitClient(getApiKey());
317
+ const result = await handlers.handleGetCredits(client);
318
+ console.log((0, output_js_1.formatOutput)(result.data, result.message, outputMode));
319
+ }
320
+ function cmdSchema(positionals, options) {
321
+ const outputMode = (0, output_js_1.detectOutputMode)(options.output);
322
+ const toolName = positionals[0];
323
+ if (toolName) {
324
+ const entry = (0, registry_js_1.getToolByName)(toolName);
325
+ if (!entry) {
326
+ console.error((0, output_js_1.formatError)(`Unknown tool: ${toolName}. Run "framlit schema" to list all tools.`, outputMode));
327
+ process.exit(1);
328
+ }
329
+ const schema = {
330
+ name: entry.name,
331
+ description: entry.description,
332
+ credits: entry.credits,
333
+ category: entry.category,
334
+ inputSchema: (0, registry_js_1.zodToJsonSchema)(entry.schema),
335
+ };
336
+ console.log(JSON.stringify(schema, null, 2));
337
+ }
338
+ else {
339
+ // List all tools
340
+ const tools = registry_js_1.TOOL_REGISTRY.map((t) => ({
341
+ name: t.name,
342
+ description: t.description.split('\n')[0],
343
+ credits: t.credits,
344
+ category: t.category,
345
+ }));
346
+ if (outputMode === 'json') {
347
+ console.log(JSON.stringify(tools, null, 2));
348
+ }
349
+ else {
350
+ console.log(`Available tools (${tools.length}):\n`);
351
+ for (const t of tools) {
352
+ const creditLabel = t.credits === 0 ? 'free' : `${t.credits} cr`;
353
+ console.log(` ${t.name.padEnd(30)} ${creditLabel.padEnd(8)} ${t.description}`);
354
+ }
355
+ console.log(`\nRun "framlit schema <tool-name>" for detailed schema.`);
356
+ }
357
+ }
358
+ }
359
+ // ---------------------------------------------------------------------------
360
+ // Main
361
+ // ---------------------------------------------------------------------------
362
+ async function main() {
363
+ const { values, positionals } = (0, node_util_1.parseArgs)({
364
+ allowPositionals: true,
365
+ strict: false,
366
+ options: {
367
+ // Global
368
+ output: { type: 'string', short: 'o' },
369
+ json: { type: 'string', short: 'j' },
370
+ 'dry-run': { type: 'boolean' },
371
+ help: { type: 'boolean', short: 'h' },
372
+ // generate / projects create
373
+ format: { type: 'string', short: 'f' },
374
+ // modify
375
+ code: { type: 'string', short: 'c' },
376
+ instruction: { type: 'string', short: 'i' },
377
+ // projects update
378
+ name: { type: 'string', short: 'n' },
379
+ // templates
380
+ category: { type: 'string' },
381
+ official: { type: 'boolean' },
382
+ // render status
383
+ poll: { type: 'boolean' },
384
+ },
385
+ });
386
+ const command = positionals[0];
387
+ const rest = positionals.slice(1);
388
+ if (values.help || !command || command === 'help') {
389
+ printHelp();
390
+ return;
391
+ }
392
+ try {
393
+ switch (command) {
394
+ case 'generate':
395
+ await cmdGenerate(rest, values);
396
+ break;
397
+ case 'modify':
398
+ await cmdModify(rest, values);
399
+ break;
400
+ case 'projects':
401
+ await cmdProjects(rest, values);
402
+ break;
403
+ case 'render':
404
+ await cmdRender(rest, values);
405
+ break;
406
+ case 'templates':
407
+ await cmdTemplates(rest, values);
408
+ break;
409
+ case 'preview':
410
+ await cmdPreview(rest, values);
411
+ break;
412
+ case 'credits':
413
+ await cmdCredits(values);
414
+ break;
415
+ case 'schema':
416
+ cmdSchema(rest, values);
417
+ break;
418
+ case 'mcp': {
419
+ // Start the MCP server — dynamic import to avoid loading MCP deps for CLI commands
420
+ await import('../mcp/server.js');
421
+ break;
422
+ }
423
+ case 'version':
424
+ console.log(VERSION);
425
+ break;
426
+ default:
427
+ console.error(`Unknown command: ${command}\nRun "framlit help" for usage.`);
428
+ process.exit(1);
429
+ }
430
+ }
431
+ catch (error) {
432
+ const mode = (0, output_js_1.detectOutputMode)(values.output);
433
+ const msg = error instanceof Error ? error.message : 'Unknown error';
434
+ console.error((0, output_js_1.formatError)(msg, mode));
435
+ process.exit(1);
436
+ }
437
+ }
438
+ main();
439
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CLI Output Formatters
3
+ *
4
+ * Handles text/JSON/NDJSON output for the CLI.
5
+ * Auto-detects piped output and defaults to JSON.
6
+ */
7
+ export type OutputMode = 'text' | 'json';
8
+ export declare function detectOutputMode(explicit?: string): OutputMode;
9
+ export declare function formatOutput(data: unknown, message: string, mode: OutputMode): string;
10
+ export declare function formatError(error: string, mode: OutputMode): string;
11
+ /**
12
+ * Write a single NDJSON line to stdout (for --poll streaming).
13
+ */
14
+ export declare function writeNdjsonLine(data: unknown): void;
15
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAM9D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAKrF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAKnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEnD"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Output Formatters
4
+ *
5
+ * Handles text/JSON/NDJSON output for the CLI.
6
+ * Auto-detects piped output and defaults to JSON.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.detectOutputMode = detectOutputMode;
10
+ exports.formatOutput = formatOutput;
11
+ exports.formatError = formatError;
12
+ exports.writeNdjsonLine = writeNdjsonLine;
13
+ function detectOutputMode(explicit) {
14
+ if (explicit === 'json')
15
+ return 'json';
16
+ if (explicit === 'text')
17
+ return 'text';
18
+ // If stdout is not a TTY (piped), default to JSON for agent-friendliness
19
+ if (!process.stdout.isTTY)
20
+ return 'json';
21
+ return 'text';
22
+ }
23
+ function formatOutput(data, message, mode) {
24
+ if (mode === 'json') {
25
+ return JSON.stringify(data, null, 2);
26
+ }
27
+ return message;
28
+ }
29
+ function formatError(error, mode) {
30
+ if (mode === 'json') {
31
+ return JSON.stringify({ error }, null, 2);
32
+ }
33
+ return `Error: ${error}`;
34
+ }
35
+ /**
36
+ * Write a single NDJSON line to stdout (for --poll streaming).
37
+ */
38
+ function writeNdjsonLine(data) {
39
+ process.stdout.write(JSON.stringify(data) + '\n');
40
+ }
41
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAIH,4CAMC;AAED,oCAKC;AAED,kCAKC;AAKD,0CAEC;AA3BD,SAAgB,gBAAgB,CAAC,QAAiB;IAChD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,YAAY,CAAC,IAAa,EAAE,OAAe,EAAE,IAAgB;IAC3E,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAgB;IACzD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Core Handlers
3
+ *
4
+ * Pure handler functions shared by MCP and CLI.
5
+ * Each handler takes (client, args) and returns a HandlerResult.
6
+ */
7
+ import { FramlitClient } from '../api/client.js';
8
+ export interface HandlerResult {
9
+ data: unknown;
10
+ message: string;
11
+ isError?: boolean;
12
+ }
13
+ export declare function handleGenerateCode(client: FramlitClient, args: {
14
+ prompt: string;
15
+ format?: 'landscape' | 'portrait' | 'square';
16
+ }): Promise<HandlerResult>;
17
+ export declare function handleModifyCode(client: FramlitClient, args: {
18
+ code: string;
19
+ instruction: string;
20
+ }): Promise<HandlerResult>;
21
+ export declare function handleListProjects(client: FramlitClient): Promise<HandlerResult>;
22
+ export declare function handleGetProject(client: FramlitClient, args: {
23
+ projectId: string;
24
+ }): Promise<HandlerResult>;
25
+ export declare function handleCreateProject(client: FramlitClient, args: {
26
+ name: string;
27
+ code?: string;
28
+ format?: 'landscape' | 'portrait' | 'square';
29
+ }): Promise<HandlerResult>;
30
+ export declare function handleUpdateProject(client: FramlitClient, args: {
31
+ projectId: string;
32
+ name?: string;
33
+ code?: string;
34
+ }): Promise<HandlerResult>;
35
+ export declare function handleRenderVideo(client: FramlitClient, args: {
36
+ projectId: string;
37
+ }): Promise<HandlerResult>;
38
+ export declare function handleGetRenderStatus(client: FramlitClient, args: {
39
+ renderId: string;
40
+ }): Promise<HandlerResult>;
41
+ export declare function handleListTemplates(client: FramlitClient, args: {
42
+ category?: string;
43
+ official?: boolean;
44
+ }): Promise<HandlerResult>;
45
+ export declare function handleGetCredits(client: FramlitClient): Promise<HandlerResult>;
46
+ export declare function handlePreviewCode(client: FramlitClient, args: {
47
+ code: string;
48
+ }): Promise<HandlerResult>;
49
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/core/handlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;CAAE,GACrE,OAAO,CAAC,aAAa,CAAC,CASxB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,aAAa,CAAC,CASxB;AAMD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;CAAE,GAClF,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,aAAa,CAAC,CAQxB;AAMD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,aAAa,CAAC,CAWxB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,aAAa,CAAC,CAcxB;AAMD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9C,OAAO,CAAC,aAAa,CAAC,CAexB;AAMD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CAyBxB;AAMD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACrB,OAAO,CAAC,aAAa,CAAC,CAOxB"}