stitch-forge 0.3.1
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/.claude/skills/forge-build/SKILL.md +79 -0
- package/.claude/skills/forge-design/SKILL.md +64 -0
- package/.claude/skills/forge-discover/SKILL.md +139 -0
- package/.claude/skills/forge-generate/SKILL.md +77 -0
- package/.claude/skills/forge-preview/SKILL.md +26 -0
- package/.claude/skills/forge-research/SKILL.md +42 -0
- package/.claude/skills/forge-sync/SKILL.md +45 -0
- package/DESIGN.md +113 -0
- package/LICENSE +21 -0
- package/README.es.md +242 -0
- package/README.md +242 -0
- package/dist/adapters/astro.d.ts +8 -0
- package/dist/adapters/astro.js +24 -0
- package/dist/adapters/astro.js.map +1 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +7 -0
- package/dist/adapters/nextjs.js +136 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/adapters/static.d.ts +7 -0
- package/dist/adapters/static.js +43 -0
- package/dist/adapters/static.js.map +1 -0
- package/dist/adapters/types.d.ts +22 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/commands/build.d.ts +7 -0
- package/dist/commands/build.js +98 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/design.d.ts +3 -0
- package/dist/commands/design.js +39 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/discover.d.ts +9 -0
- package/dist/commands/discover.js +91 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/generate.d.ts +7 -0
- package/dist/commands/generate.js +105 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +99 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/preview.d.ts +5 -0
- package/dist/commands/preview.js +41 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/research.d.ts +1 -0
- package/dist/commands/research.js +38 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/sync.d.ts +1 -0
- package/dist/commands/sync.js +53 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/workflow.d.ts +1 -0
- package/dist/commands/workflow.js +38 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/auth.d.ts +15 -0
- package/dist/mcp/auth.js +56 -0
- package/dist/mcp/auth.js.map +1 -0
- package/dist/mcp/client.d.ts +65 -0
- package/dist/mcp/client.js +302 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -0
- package/dist/mcp/tools.js +46 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/research/business-researcher.d.ts +41 -0
- package/dist/research/business-researcher.js +888 -0
- package/dist/research/business-researcher.js.map +1 -0
- package/dist/research/crawler.d.ts +11 -0
- package/dist/research/crawler.js +56 -0
- package/dist/research/crawler.js.map +1 -0
- package/dist/research/design-synthesizer.d.ts +46 -0
- package/dist/research/design-synthesizer.js +628 -0
- package/dist/research/design-synthesizer.js.map +1 -0
- package/dist/research/differ.d.ts +19 -0
- package/dist/research/differ.js +58 -0
- package/dist/research/differ.js.map +1 -0
- package/dist/research/known-state.json +68 -0
- package/dist/research/research-cache.d.ts +6 -0
- package/dist/research/research-cache.js +62 -0
- package/dist/research/research-cache.js.map +1 -0
- package/dist/research/types.d.ts +98 -0
- package/dist/research/types.js +6 -0
- package/dist/research/types.js.map +1 -0
- package/dist/research/updater.d.ts +5 -0
- package/dist/research/updater.js +43 -0
- package/dist/research/updater.js.map +1 -0
- package/dist/templates/design-md.d.ts +52 -0
- package/dist/templates/design-md.js +315 -0
- package/dist/templates/design-md.js.map +1 -0
- package/dist/templates/prompts.d.ts +31 -0
- package/dist/templates/prompts.js +39 -0
- package/dist/templates/prompts.js.map +1 -0
- package/dist/templates/workflows.d.ts +9 -0
- package/dist/templates/workflows.js +21 -0
- package/dist/templates/workflows.js.map +1 -0
- package/dist/tui/App.d.ts +1 -0
- package/dist/tui/App.js +87 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/Dashboard.d.ts +5 -0
- package/dist/tui/Dashboard.js +23 -0
- package/dist/tui/Dashboard.js.map +1 -0
- package/dist/tui/DesignEditor.d.ts +6 -0
- package/dist/tui/DesignEditor.js +76 -0
- package/dist/tui/DesignEditor.js.map +1 -0
- package/dist/tui/PromptBuilder.d.ts +5 -0
- package/dist/tui/PromptBuilder.js +102 -0
- package/dist/tui/PromptBuilder.js.map +1 -0
- package/dist/tui/components/QuotaMeter.d.ts +8 -0
- package/dist/tui/components/QuotaMeter.js +10 -0
- package/dist/tui/components/QuotaMeter.js.map +1 -0
- package/dist/tui/components/ScreenCard.d.ts +7 -0
- package/dist/tui/components/ScreenCard.js +6 -0
- package/dist/tui/components/ScreenCard.js.map +1 -0
- package/dist/tui/components/Spinner.d.ts +5 -0
- package/dist/tui/components/Spinner.js +7 -0
- package/dist/tui/components/Spinner.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +7 -0
- package/dist/tui/components/StatusBar.js +6 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/utils/config.d.ts +26 -0
- package/dist/utils/config.js +66 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/design-validator.d.ts +44 -0
- package/dist/utils/design-validator.js +396 -0
- package/dist/utils/design-validator.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.js +10 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output-validator.d.ts +18 -0
- package/dist/utils/output-validator.js +194 -0
- package/dist/utils/output-validator.js.map +1 -0
- package/dist/utils/preview.d.ts +4 -0
- package/dist/utils/preview.js +49 -0
- package/dist/utils/preview.js.map +1 -0
- package/dist/utils/prompt-enhancer.d.ts +21 -0
- package/dist/utils/prompt-enhancer.js +104 -0
- package/dist/utils/prompt-enhancer.js.map +1 -0
- package/dist/utils/quota.d.ts +18 -0
- package/dist/utils/quota.js +49 -0
- package/dist/utils/quota.js.map +1 -0
- package/dist/utils/validators.d.ts +125 -0
- package/dist/utils/validators.js +110 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Client wrapper for Stitch tools.
|
|
3
|
+
*
|
|
4
|
+
* When running inside Claude Code with the Stitch MCP server configured,
|
|
5
|
+
* tool calls are handled automatically by the MCP protocol.
|
|
6
|
+
*
|
|
7
|
+
* This module provides typed wrappers for standalone CLI usage
|
|
8
|
+
* (outside Claude Code) via direct HTTP calls to the Stitch MCP endpoint.
|
|
9
|
+
*/
|
|
10
|
+
import { getConfig } from '../utils/config.js';
|
|
11
|
+
/**
|
|
12
|
+
* Direct HTTP client for Stitch MCP endpoint.
|
|
13
|
+
* Used when running as standalone CLI (not inside Claude Code).
|
|
14
|
+
*/
|
|
15
|
+
export class StitchMcpClient {
|
|
16
|
+
endpoint;
|
|
17
|
+
apiKey;
|
|
18
|
+
constructor(apiKey, endpoint) {
|
|
19
|
+
const config = getConfig();
|
|
20
|
+
this.apiKey = apiKey || config.apiKey || process.env.STITCH_API_KEY || '';
|
|
21
|
+
this.endpoint = endpoint || 'https://stitch.googleapis.com/mcp';
|
|
22
|
+
if (!this.apiKey) {
|
|
23
|
+
throw new Error('No Stitch API key found. Set STITCH_API_KEY env var or run `forge init`.');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async callTool(toolName, params) {
|
|
27
|
+
const maxRetries = 3;
|
|
28
|
+
// Generation can take 60-90s; other calls are fast
|
|
29
|
+
const timeout = toolName === 'generate_screen_from_text' ? 120000 : 30000;
|
|
30
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(this.endpoint, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
'Accept': 'application/json',
|
|
37
|
+
'X-Goog-Api-Key': this.apiKey,
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
jsonrpc: '2.0',
|
|
41
|
+
id: Date.now(),
|
|
42
|
+
method: 'tools/call',
|
|
43
|
+
params: { name: toolName, arguments: params },
|
|
44
|
+
}),
|
|
45
|
+
signal: AbortSignal.timeout(timeout),
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
if (attempt < maxRetries && this.isRetryable(response.status)) {
|
|
49
|
+
const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000;
|
|
50
|
+
await new Promise(r => setTimeout(r, delay));
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(this.formatError(response.status, await response.text()));
|
|
54
|
+
}
|
|
55
|
+
const data = await response.json();
|
|
56
|
+
// JSON-RPC error
|
|
57
|
+
if (data.error) {
|
|
58
|
+
const err = data.error;
|
|
59
|
+
throw new Error(`Stitch API error: ${err.message || 'Unknown error'} (code ${err.code || 'unknown'})`);
|
|
60
|
+
}
|
|
61
|
+
// MCP tool responses come in result.content[0].text
|
|
62
|
+
const result = data.result;
|
|
63
|
+
if (result && Array.isArray(result.content)) {
|
|
64
|
+
const textContent = result.content
|
|
65
|
+
.find(c => c.type === 'text');
|
|
66
|
+
if (textContent?.text) {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(textContent.text);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return textContent.text;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return (data.result ?? data);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error instanceof Error && error.name === 'TimeoutError') {
|
|
79
|
+
if (attempt < maxRetries) {
|
|
80
|
+
const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000;
|
|
81
|
+
await new Promise(r => setTimeout(r, delay));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
throw new Error('Stitch API request timed out after 30 seconds. Check your network connection.');
|
|
85
|
+
}
|
|
86
|
+
// Re-throw non-retryable errors (our own formatted messages)
|
|
87
|
+
if (error instanceof Error && error.message.startsWith('Stitch')) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
if (attempt < maxRetries) {
|
|
91
|
+
const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000;
|
|
92
|
+
await new Promise(r => setTimeout(r, delay));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
throw new Error('Stitch API: max retries exceeded');
|
|
99
|
+
}
|
|
100
|
+
isRetryable(status) {
|
|
101
|
+
return [429, 500, 502, 503, 504].includes(status);
|
|
102
|
+
}
|
|
103
|
+
formatError(status, body) {
|
|
104
|
+
switch (status) {
|
|
105
|
+
case 400: return `Stitch API: Bad request. Check your parameters. (${body.slice(0, 200)})`;
|
|
106
|
+
case 401: return 'Stitch API: Invalid API key. Run `forge init` to reconfigure.';
|
|
107
|
+
case 403: return 'Stitch API: Access denied. Check your API key permissions.';
|
|
108
|
+
case 404: return 'Stitch API: Resource not found. The project or screen may have been deleted.';
|
|
109
|
+
default: return `Stitch API error (${status}): ${body.slice(0, 200)}`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async listProjects() {
|
|
113
|
+
const raw = await this.callTool('list_projects', {});
|
|
114
|
+
// API returns { projects: [...] } with resource-style names
|
|
115
|
+
const projects = raw.projects || (Array.isArray(raw) ? raw : []);
|
|
116
|
+
return projects.map(p => ({
|
|
117
|
+
id: this.extractId(p.name),
|
|
118
|
+
name: p.title || p.name,
|
|
119
|
+
createdAt: p.createTime || '',
|
|
120
|
+
screenCount: Array.isArray(p.screenInstances) ? p.screenInstances.length : 0,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
async getProject(projectId) {
|
|
124
|
+
const raw = await this.callTool('get_project', {
|
|
125
|
+
projectId: this.toResourceName(projectId, 'projects'),
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
id: this.extractId(raw.name || projectId),
|
|
129
|
+
name: raw.title || projectId,
|
|
130
|
+
createdAt: raw.createTime || '',
|
|
131
|
+
screenCount: Array.isArray(raw.screenInstances) ? raw.screenInstances.length : 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async listScreens(projectId) {
|
|
135
|
+
const raw = await this.callTool('list_screens', {
|
|
136
|
+
projectId: this.toResourceName(projectId, 'projects'),
|
|
137
|
+
});
|
|
138
|
+
const screens = raw.screens || (Array.isArray(raw) ? raw : []);
|
|
139
|
+
return screens.map(s => ({
|
|
140
|
+
id: this.extractId(s.name || ''),
|
|
141
|
+
name: s.title || s.name || '',
|
|
142
|
+
prompt: s.prompt || '',
|
|
143
|
+
createdAt: s.createTime || '',
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
async generateScreen(projectId, prompt, modelId) {
|
|
147
|
+
const projResource = this.toResourceName(projectId, 'projects');
|
|
148
|
+
const projId = this.extractId(projResource);
|
|
149
|
+
const apiModel = this.mapModelId(modelId || 'GEMINI_2_5_FLASH');
|
|
150
|
+
const raw = await this.callTool('generate_screen_from_text', {
|
|
151
|
+
projectId: projId,
|
|
152
|
+
prompt,
|
|
153
|
+
...(apiModel ? { modelId: apiModel } : {}),
|
|
154
|
+
});
|
|
155
|
+
// The API returns { projectId, sessionId, outputComponents }.
|
|
156
|
+
// The screen data is in outputComponents[0].design.screens[0] with:
|
|
157
|
+
// id, name, title, htmlCode.downloadUrl, screenshot.downloadUrl
|
|
158
|
+
const screen = this.extractScreenFromResponse(raw);
|
|
159
|
+
if (screen)
|
|
160
|
+
return { ...screen, projectId: projId };
|
|
161
|
+
// Fallback: list screens and find the latest (may require delay)
|
|
162
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
163
|
+
await new Promise(r => setTimeout(r, (attempt + 1) * 2000));
|
|
164
|
+
const screens = await this.listScreens(projId);
|
|
165
|
+
if (screens.length > 0) {
|
|
166
|
+
const last = screens[screens.length - 1];
|
|
167
|
+
return { screenId: last.id, projectId: projId, name: last.name };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
throw new Error('Screen was generated but could not be retrieved. Try running `forge sync` to pull screens.');
|
|
171
|
+
}
|
|
172
|
+
/** Extract screen data directly from generate_screen_from_text response */
|
|
173
|
+
extractScreenFromResponse(raw) {
|
|
174
|
+
// Primary path: outputComponents[N].design.screens[0]
|
|
175
|
+
try {
|
|
176
|
+
const components = raw.outputComponents;
|
|
177
|
+
if (components?.length) {
|
|
178
|
+
for (const comp of components) {
|
|
179
|
+
const design = comp.design;
|
|
180
|
+
const screens = design?.screens;
|
|
181
|
+
if (screens?.length) {
|
|
182
|
+
const screen = screens[0];
|
|
183
|
+
const htmlCode = screen.htmlCode;
|
|
184
|
+
const screenshot = screen.screenshot;
|
|
185
|
+
if (screen.id || screen.name) {
|
|
186
|
+
return {
|
|
187
|
+
screenId: screen.id || this.extractId(screen.name || ''),
|
|
188
|
+
name: screen.title || screen.name || '',
|
|
189
|
+
htmlCodeUrl: htmlCode?.downloadUrl || undefined,
|
|
190
|
+
screenshotUrl: screenshot?.downloadUrl || undefined,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch { /* fall through to deep search */ }
|
|
198
|
+
// Deep search: find any object with htmlCode.downloadUrl anywhere in the response
|
|
199
|
+
try {
|
|
200
|
+
const json = JSON.stringify(raw);
|
|
201
|
+
const htmlUrlMatch = json.match(/"downloadUrl"\s*:\s*"(https:\/\/contribution[^"]+)"/);
|
|
202
|
+
const idMatch = json.match(/"id"\s*:\s*"([a-f0-9]{32})"/);
|
|
203
|
+
const titleMatch = json.match(/"title"\s*:\s*"([^"]+)"/);
|
|
204
|
+
if (htmlUrlMatch && idMatch) {
|
|
205
|
+
return {
|
|
206
|
+
screenId: idMatch[1],
|
|
207
|
+
name: titleMatch?.[1] || 'generated-screen',
|
|
208
|
+
htmlCodeUrl: htmlUrlMatch[1],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch { /* give up */ }
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
async getScreenCode(projectId, screenId, htmlCodeUrl) {
|
|
216
|
+
// Fast path: if we have a direct download URL from generation response, use it
|
|
217
|
+
if (htmlCodeUrl) {
|
|
218
|
+
const res = await fetch(htmlCodeUrl, { signal: AbortSignal.timeout(30000) });
|
|
219
|
+
if (res.ok)
|
|
220
|
+
return res.text();
|
|
221
|
+
}
|
|
222
|
+
const projResource = this.toResourceName(projectId, 'projects');
|
|
223
|
+
const projId = this.extractId(projResource);
|
|
224
|
+
const screenResource = screenId.includes('/')
|
|
225
|
+
? screenId
|
|
226
|
+
: `${projResource}/screens/${screenId}`;
|
|
227
|
+
const scrId = this.extractId(screenResource);
|
|
228
|
+
// Try get_screen_code proxy tool (from @_davideast/stitch-mcp)
|
|
229
|
+
try {
|
|
230
|
+
const raw = await this.callTool('get_screen_code', {
|
|
231
|
+
projectId: projResource,
|
|
232
|
+
screenId: screenResource,
|
|
233
|
+
});
|
|
234
|
+
if (typeof raw === 'string')
|
|
235
|
+
return raw;
|
|
236
|
+
const obj = raw;
|
|
237
|
+
return obj.html || obj.code || JSON.stringify(raw);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Proxy tool not available, try native API
|
|
241
|
+
}
|
|
242
|
+
// Native API: get_screen returns htmlCode.downloadUrl
|
|
243
|
+
// Retry because the screen may take a few seconds to be queryable
|
|
244
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
245
|
+
try {
|
|
246
|
+
const screen = await this.callTool('get_screen', {
|
|
247
|
+
name: screenResource,
|
|
248
|
+
projectId: projId,
|
|
249
|
+
screenId: scrId,
|
|
250
|
+
});
|
|
251
|
+
const htmlCode = screen.htmlCode;
|
|
252
|
+
if (htmlCode?.downloadUrl) {
|
|
253
|
+
const htmlRes = await fetch(htmlCode.downloadUrl, {
|
|
254
|
+
signal: AbortSignal.timeout(30000),
|
|
255
|
+
});
|
|
256
|
+
if (htmlRes.ok)
|
|
257
|
+
return htmlRes.text();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch { /* retry */ }
|
|
261
|
+
if (attempt < 2)
|
|
262
|
+
await new Promise(r => setTimeout(r, (attempt + 1) * 2000));
|
|
263
|
+
}
|
|
264
|
+
throw new Error('Could not retrieve screen HTML after 3 attempts. The screen may not be ready yet — try `forge sync` to pull screens.');
|
|
265
|
+
}
|
|
266
|
+
async getScreenImage(projectId, screenId) {
|
|
267
|
+
return this.callTool('get_screen_image', {
|
|
268
|
+
projectId: this.toResourceName(projectId, 'projects'),
|
|
269
|
+
screenId: this.toResourceName(screenId, `projects/${projectId}/screens`),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
async buildSite(projectId, routes) {
|
|
273
|
+
return this.callTool('build_site', {
|
|
274
|
+
projectId: this.toResourceName(projectId, 'projects'),
|
|
275
|
+
routes,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
/** Extract numeric ID from resource name like "projects/123" or "screens/456" */
|
|
279
|
+
extractId(resourceName) {
|
|
280
|
+
if (!resourceName)
|
|
281
|
+
return '';
|
|
282
|
+
const parts = resourceName.split('/');
|
|
283
|
+
return parts[parts.length - 1];
|
|
284
|
+
}
|
|
285
|
+
/** Ensure value is a resource name; if it's just an ID, prepend the prefix */
|
|
286
|
+
toResourceName(value, prefix) {
|
|
287
|
+
if (value.includes('/'))
|
|
288
|
+
return value;
|
|
289
|
+
return `${prefix}/${value}`;
|
|
290
|
+
}
|
|
291
|
+
/** Map internal model names to Stitch API model IDs */
|
|
292
|
+
mapModelId(model) {
|
|
293
|
+
const mapping = {
|
|
294
|
+
'GEMINI_2_5_FLASH': 'GEMINI_3_FLASH',
|
|
295
|
+
'GEMINI_3_PRO': 'GEMINI_3_1_PRO',
|
|
296
|
+
'GEMINI_3_FLASH': 'GEMINI_3_FLASH',
|
|
297
|
+
'GEMINI_3_1_PRO': 'GEMINI_3_1_PRO',
|
|
298
|
+
};
|
|
299
|
+
return mapping[model];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool call builders for Stitch MCP.
|
|
3
|
+
*
|
|
4
|
+
* These are used by the standalone CLI (not Claude Code).
|
|
5
|
+
* Inside Claude Code, the MCP protocol handles tool calls automatically —
|
|
6
|
+
* Claude Code just calls the tools directly via the MCP server.
|
|
7
|
+
*
|
|
8
|
+
* This module builds the JSON-RPC payloads for direct HTTP usage.
|
|
9
|
+
*/
|
|
10
|
+
export interface McpToolCall {
|
|
11
|
+
method: 'tools/call';
|
|
12
|
+
params: {
|
|
13
|
+
name: string;
|
|
14
|
+
arguments: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function listProjects(): McpToolCall;
|
|
18
|
+
export declare function getProject(projectId: string): McpToolCall;
|
|
19
|
+
export declare function listScreens(projectId: string): McpToolCall;
|
|
20
|
+
export declare function generateScreen(projectId: string, prompt: string, modelId?: string): McpToolCall;
|
|
21
|
+
export declare function getScreenCode(projectId: string, screenId: string): McpToolCall;
|
|
22
|
+
export declare function getScreenImage(projectId: string, screenId: string): McpToolCall;
|
|
23
|
+
export declare function buildSite(projectId: string, routes: Array<{
|
|
24
|
+
screenId: string;
|
|
25
|
+
route: string;
|
|
26
|
+
}>): McpToolCall;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool call builders for Stitch MCP.
|
|
3
|
+
*
|
|
4
|
+
* These are used by the standalone CLI (not Claude Code).
|
|
5
|
+
* Inside Claude Code, the MCP protocol handles tool calls automatically —
|
|
6
|
+
* Claude Code just calls the tools directly via the MCP server.
|
|
7
|
+
*
|
|
8
|
+
* This module builds the JSON-RPC payloads for direct HTTP usage.
|
|
9
|
+
*/
|
|
10
|
+
export function listProjects() {
|
|
11
|
+
return { method: 'tools/call', params: { name: 'list_projects', arguments: {} } };
|
|
12
|
+
}
|
|
13
|
+
export function getProject(projectId) {
|
|
14
|
+
return { method: 'tools/call', params: { name: 'get_project', arguments: { projectId } } };
|
|
15
|
+
}
|
|
16
|
+
export function listScreens(projectId) {
|
|
17
|
+
return { method: 'tools/call', params: { name: 'list_screens', arguments: { projectId } } };
|
|
18
|
+
}
|
|
19
|
+
export function generateScreen(projectId, prompt, modelId = 'GEMINI_2_5_FLASH') {
|
|
20
|
+
return {
|
|
21
|
+
method: 'tools/call',
|
|
22
|
+
params: {
|
|
23
|
+
name: 'generate_screen_from_text',
|
|
24
|
+
arguments: { projectId, prompt, modelId },
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function getScreenCode(projectId, screenId) {
|
|
29
|
+
return {
|
|
30
|
+
method: 'tools/call',
|
|
31
|
+
params: { name: 'get_screen_code', arguments: { projectId, screenId } },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function getScreenImage(projectId, screenId) {
|
|
35
|
+
return {
|
|
36
|
+
method: 'tools/call',
|
|
37
|
+
params: { name: 'get_screen_image', arguments: { projectId, screenId } },
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function buildSite(projectId, routes) {
|
|
41
|
+
return {
|
|
42
|
+
method: 'tools/call',
|
|
43
|
+
params: { name: 'build_site', arguments: { projectId, routes } },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,MAAc,EACd,OAAO,GAAG,kBAAkB;IAE5B,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,IAAI,EAAE,2BAA2B;YACjC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAgB;IAC/D,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,QAAgB;IAChE,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,MAAkD;IAElD,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;KACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { BusinessBrief, BusinessModelContext, SiteAnalysis, ExtractedPalette, ExtractedTypography, AudienceInsight, MarketPosition, BusinessResearchResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract color palette from HTML by parsing style blocks and inline styles.
|
|
4
|
+
*/
|
|
5
|
+
export declare function extractPalette(html: string): ExtractedPalette;
|
|
6
|
+
/**
|
|
7
|
+
* Extract typography information from HTML.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractTypography(html: string): ExtractedTypography;
|
|
10
|
+
/**
|
|
11
|
+
* Detect common layout patterns from HTML DOM structure.
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectLayoutPatterns(html: string): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Infer audience insights from industry and audience descriptions.
|
|
16
|
+
* Knowledge-base lookup, not web search.
|
|
17
|
+
*/
|
|
18
|
+
export declare function inferAudienceInsights(industry: string, audience: string, locale?: string): AudienceInsight;
|
|
19
|
+
/**
|
|
20
|
+
* Infer market position from the business brief text.
|
|
21
|
+
*/
|
|
22
|
+
export declare function inferMarketPosition(brief: BusinessBrief, _siteAnalysis?: SiteAnalysis): MarketPosition;
|
|
23
|
+
/**
|
|
24
|
+
* Infer what kind of business this is and what the website should (and should NOT) do.
|
|
25
|
+
*
|
|
26
|
+
* Uses a combination of site navigation signals, CTA text, layout patterns, and
|
|
27
|
+
* industry keywords from the brief to determine the business model. This prevents
|
|
28
|
+
* generating e-commerce pages for physical-only retailers, or store locators for SaaS products.
|
|
29
|
+
*/
|
|
30
|
+
export declare function inferBusinessModel(brief: BusinessBrief, siteAnalysis?: SiteAnalysis | null): BusinessModelContext;
|
|
31
|
+
/**
|
|
32
|
+
* Analyze a website by fetching it and extracting design signals.
|
|
33
|
+
* Returns null on fetch failure (graceful degradation).
|
|
34
|
+
*/
|
|
35
|
+
export declare function analyzeSite(url: string): Promise<SiteAnalysis | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Perform complete business research for a brief.
|
|
38
|
+
* Orchestrates site analysis, competitor analysis, audience insights,
|
|
39
|
+
* market positioning, and business model inference.
|
|
40
|
+
*/
|
|
41
|
+
export declare function researchBusiness(brief: BusinessBrief): Promise<BusinessResearchResult>;
|