init project
This commit is contained in:
Vendored
+57
@@ -0,0 +1,57 @@
|
||||
import { z } from 'zod';
|
||||
import { config } from '../../config.js';
|
||||
import { runCommand } from '../../lib/runCommand.js';
|
||||
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
||||
import { requirePhpBackend } from './requireLaravel.js';
|
||||
/**
|
||||
* Composer helpers shared by Laravel and CodeIgniter (both are Composer-based).
|
||||
* Mirrors `add_dependency` but is explicitly for PHP packages.
|
||||
*/
|
||||
export function registerComposerTools(server) {
|
||||
server.registerTool('composer_require', {
|
||||
title: 'Composer Require',
|
||||
description: 'Add a Composer dependency to the detected PHP backend (Laravel or CodeIgniter). Equivalent to `composer require`.',
|
||||
inputSchema: {
|
||||
packages: z.array(z.string().min(1)).min(1).describe('Packagist package names, e.g. ["laravel/sanctum"].'),
|
||||
dev: z.boolean().optional().default(false).describe('Install into require-dev (--dev).'),
|
||||
},
|
||||
}, async ({ packages, dev }) => {
|
||||
try {
|
||||
const backend = requirePhpBackend();
|
||||
const args = ['require', ...(dev ? ['--dev'] : []), ...packages, '--no-interaction'];
|
||||
const result = await runCommand('composer', args, {
|
||||
cwd: backend.root,
|
||||
timeoutMs: config.scaffoldCommandTimeoutMs,
|
||||
});
|
||||
return jsonResult({ adapter: backend.label, packages, dev, ...result });
|
||||
}
|
||||
catch (error) {
|
||||
return errorResult(toErrorMessage(error));
|
||||
}
|
||||
});
|
||||
server.registerTool('composer_remove', {
|
||||
title: 'Composer Remove',
|
||||
description: 'Remove a Composer dependency from the detected PHP backend (Laravel or CodeIgniter). Requires confirm: true.',
|
||||
inputSchema: {
|
||||
packages: z.array(z.string().min(1)).min(1).describe('Packagist package names to remove.'),
|
||||
confirm: z
|
||||
.literal(true)
|
||||
.describe('Must be exactly true; removing dependencies is a deliberate opt-in.'),
|
||||
},
|
||||
}, async ({ packages, confirm }) => {
|
||||
if (!confirm)
|
||||
return errorResult('confirm: true is required to run composer_remove.');
|
||||
try {
|
||||
const backend = requirePhpBackend();
|
||||
const result = await runCommand('composer', ['remove', ...packages, '--no-interaction'], {
|
||||
cwd: backend.root,
|
||||
timeoutMs: config.scaffoldCommandTimeoutMs,
|
||||
});
|
||||
return jsonResult({ adapter: backend.label, packages, ...result });
|
||||
}
|
||||
catch (error) {
|
||||
return errorResult(toErrorMessage(error));
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=composer.js.map
|
||||
Reference in New Issue
Block a user