init project
This commit is contained in:
Vendored
+157
@@ -0,0 +1,157 @@
|
||||
import { z } from 'zod';
|
||||
export function registerPrompts(server) {
|
||||
server.registerPrompt('new-feature', {
|
||||
title: 'New Feature',
|
||||
description: 'Guides the agent through implementing a new feature: detect the framework, scaffold/implement code, run tests, and verify in a browser.',
|
||||
argsSchema: {
|
||||
name: z
|
||||
.string()
|
||||
.min(1)
|
||||
.describe('Short name of the feature, e.g. "user-profile" or "todo-list".'),
|
||||
description: z
|
||||
.string()
|
||||
.optional()
|
||||
.describe('A one-sentence description of what the feature should do.'),
|
||||
},
|
||||
}, async ({ name, description }) => ({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: [
|
||||
`Implement a new feature called "${name}".${description ? ` ${description}` : ''}`,
|
||||
'',
|
||||
'Follow this workflow:',
|
||||
'1. Call detect_framework to understand the workspace (backend, frontend, or both).',
|
||||
'2. If needed, scaffold the relevant pieces (e.g. generate_component, generate_api_route, or generate_laravel_resource).',
|
||||
'3. Implement the feature code, keeping existing conventions and not escaping the workspace root.',
|
||||
'4. Run run_tests and/or run_lint to validate the change.',
|
||||
'5. If a frontend exists, start_dev_server and browser_navigate/screenshot to verify the UI visually.',
|
||||
'6. Return a concise summary of files changed, test results, and any remaining TODOs.',
|
||||
].join('\n'),
|
||||
},
|
||||
},
|
||||
],
|
||||
}));
|
||||
server.registerPrompt('new-laravel-resource', {
|
||||
title: 'New Laravel Resource',
|
||||
description: 'Guides the agent through scaffolding a full Laravel resource, running migrations, writing a feature test, and verifying routes.',
|
||||
argsSchema: {
|
||||
name: z.string().min(1).describe('Resource name, e.g. "Post" or "Order".'),
|
||||
},
|
||||
}, async ({ name }) => ({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: [
|
||||
`Create a new Laravel API resource for "${name}".`,
|
||||
'',
|
||||
'Workflow:',
|
||||
`1. Call generate_laravel_resource with name "${name}" and api: true.`,
|
||||
'2. Run artisan migrate (or artisan with command migrate and confirm: true) to create the table.',
|
||||
'3. Fill in the migration fields and model $fillable based on the resource requirements.',
|
||||
'4. Write a feature test with artisan make:test and run it via run_phpunit or run_pest.',
|
||||
'5. Verify the routes with artisan route:list.',
|
||||
'6. Optionally use laravel_tinker_eval to inspect a model instance.',
|
||||
].join('\n'),
|
||||
},
|
||||
},
|
||||
],
|
||||
}));
|
||||
server.registerPrompt('new-codeigniter-resource', {
|
||||
title: 'New CodeIgniter Resource',
|
||||
description: 'Guides the agent through scaffolding a full CodeIgniter 4 resource, running migrations, and writing a test.',
|
||||
argsSchema: {
|
||||
name: z.string().min(1).describe('Resource name, e.g. "Post" or "Order".'),
|
||||
},
|
||||
}, async ({ name }) => ({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: [
|
||||
`Create a new CodeIgniter 4 resource for "${name}".`,
|
||||
'',
|
||||
'Workflow:',
|
||||
`1. Call generate_codeigniter_resource with name "${name}".`,
|
||||
'2. Run spark migrate to create the table.',
|
||||
'3. Fill in the migration fields and model properties as needed.',
|
||||
'4. Write a test with spark make:test and run it via run_codeigniter_tests.',
|
||||
'5. Verify the routes with spark routes.',
|
||||
].join('\n'),
|
||||
},
|
||||
},
|
||||
],
|
||||
}));
|
||||
server.registerPrompt('new-react-component', {
|
||||
title: 'New React Component',
|
||||
description: 'Guides the agent through generating a React component, wiring it into a route/page, and verifying it in the browser.',
|
||||
argsSchema: {
|
||||
name: z.string().min(1).describe('Component name, e.g. "UserProfile".'),
|
||||
route: z.string().optional().describe('Optional route path to wire the component to, e.g. "/users".'),
|
||||
},
|
||||
}, async ({ name, route }) => ({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: [
|
||||
`Create a new React component called "${name}"${route ? ` and wire it to route "${route}"` : ''}.`,
|
||||
'',
|
||||
'Workflow:',
|
||||
`1. Call generate_component (or generate_react_component) with name "${name}" and withTest: true.`,
|
||||
route ? `2. Call add_react_route with path "${route}" and component "${name}".` : '2. (No route requested) Add the component to the appropriate existing page or parent component.',
|
||||
'3. Run run_tests to verify the component test passes.',
|
||||
'4. Start the dev server with start_dev_server, navigate with browser_navigate, and capture a browser_screenshot to verify the UI.',
|
||||
].join('\n'),
|
||||
},
|
||||
},
|
||||
],
|
||||
}));
|
||||
server.registerPrompt('visual-diff-ci', {
|
||||
title: 'Visual Diff CI',
|
||||
description: 'Guides the agent through a CI-style visual regression check: baselines, live screenshots, and browser_visual_diff thresholds.',
|
||||
argsSchema: {
|
||||
url: z.string().min(1).describe('Page URL to check, e.g. http://127.0.0.1:5173/'),
|
||||
baseline: z
|
||||
.string()
|
||||
.optional()
|
||||
.describe('Baseline name under .web-dev-mcp/baselines/ (without .png). Defaults to "home".'),
|
||||
thresholdPercent: z
|
||||
.string()
|
||||
.optional()
|
||||
.describe('Max allowed mismatch percent as a string, e.g. "0.5". Defaults to "1".'),
|
||||
},
|
||||
}, async ({ url, baseline, thresholdPercent }) => {
|
||||
const name = baseline?.trim() || 'home';
|
||||
const threshold = thresholdPercent?.trim() || '1';
|
||||
return {
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: {
|
||||
type: 'text',
|
||||
text: [
|
||||
`Run a visual regression check for "${url}" against baseline "${name}" (fail if mismatch > ${threshold}%).`,
|
||||
'',
|
||||
'Workflow:',
|
||||
'1. Call detect_framework (and start_dev_server if the URL is a local app that is not already running).',
|
||||
`2. Call browser_navigate with url "${url}".`,
|
||||
`3. If .web-dev-mcp/baselines/${name}.png is missing, call browser_screenshot_baseline with name "${name}" and treat this run as baseline creation (report that CI should re-run on the next change).`,
|
||||
`4. Otherwise call browser_visual_diff with name "${name}" (and the same page still open).`,
|
||||
`5. If mismatchPercent > ${threshold}, treat as FAILED: keep the diff PNG path in the summary and list likely UI regressions.`,
|
||||
`6. If mismatchPercent <= ${threshold}, treat as PASSED.`,
|
||||
'7. Return a concise CI-style summary: baseline name, mismatch %, pass/fail, and artifact paths.',
|
||||
].join('\n'),
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=index.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/prompts/index.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user