@kvasar/google-stitch 0.1.13 → 0.1.15
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/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
package/skills/SKILL.md
CHANGED
|
@@ -135,6 +135,33 @@ Always structure the tool call as:
|
|
|
135
135
|
|
|
136
136
|
Never call the tool with only a string prompt.
|
|
137
137
|
|
|
138
|
+
### List screens
|
|
139
|
+
|
|
140
|
+
Lists all screens within a given Stitch project.
|
|
141
|
+
|
|
142
|
+
- `list_screens`
|
|
143
|
+
|
|
144
|
+
Required parameters:
|
|
145
|
+
- `projectId`: the Stitch project ID (without the `projects/` prefix)
|
|
146
|
+
|
|
147
|
+
Use this tool when the user wants to:
|
|
148
|
+
- see all generated screens in a project
|
|
149
|
+
- review existing designs
|
|
150
|
+
- inspect project screens before updating or exporting
|
|
151
|
+
|
|
152
|
+
Example prompts:
|
|
153
|
+
- List all screens in project 12345
|
|
154
|
+
- Show me all screens for project 4044680601076201931
|
|
155
|
+
- What screens are in project 12345?
|
|
156
|
+
- Show me the designs in this project
|
|
157
|
+
- List the generated UI screens for project 12345
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
- Array of `Screen` objects
|
|
161
|
+
- Includes fields such as `name`, `title`, `prompt`, `deviceType`, `width`, `height`, and grouping metadata
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
138
165
|
### Screen editing
|
|
139
166
|
|
|
140
167
|
For modifying existing screens:
|
|
@@ -93,22 +93,32 @@ export function generateScreenFromTextTool(client: StitchMCPClient) {
|
|
|
93
93
|
const screen = result.screen;
|
|
94
94
|
const firstComponent = result.output_components?.[0];
|
|
95
95
|
|
|
96
|
+
// Extract model's conversational text and suggestion
|
|
97
|
+
const modelText = firstComponent?.text;
|
|
98
|
+
const suggestion = firstComponent?.suggestion;
|
|
99
|
+
|
|
100
|
+
// Try image URL response
|
|
96
101
|
const imageUrl =
|
|
97
102
|
screen?.screenshot?.url ||
|
|
98
103
|
firstComponent?.design?.screenshot?.url;
|
|
99
104
|
|
|
100
105
|
if (imageUrl) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
106
|
+
const content: Array<{ type: string; [key: string]: any }> = [];
|
|
107
|
+
if (modelText) {
|
|
108
|
+
content.push({ type: "text", text: modelText });
|
|
109
|
+
}
|
|
110
|
+
content.push({
|
|
111
|
+
type: "image",
|
|
112
|
+
url: imageUrl,
|
|
113
|
+
caption: screen?.title || "Generated by Google Stitch"
|
|
114
|
+
});
|
|
115
|
+
if (suggestion) {
|
|
116
|
+
content.push({ type: "text", text: suggestion });
|
|
117
|
+
}
|
|
118
|
+
return { content };
|
|
110
119
|
}
|
|
111
120
|
|
|
121
|
+
// Try image bytes response
|
|
112
122
|
const imageBytes =
|
|
113
123
|
screen?.screenshot?.bytes ||
|
|
114
124
|
firstComponent?.design?.screenshot?.bytes;
|
|
@@ -124,33 +134,41 @@ export function generateScreenFromTextTool(client: StitchMCPClient) {
|
|
|
124
134
|
Buffer.from(imageBytes, "base64")
|
|
125
135
|
);
|
|
126
136
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
};
|
|
137
|
+
const content: Array<{ type: string; [key: string]: any }> = [];
|
|
138
|
+
if (modelText) {
|
|
139
|
+
content.push({ type: "text", text: modelText });
|
|
140
|
+
}
|
|
141
|
+
content.push({
|
|
142
|
+
type: "image",
|
|
143
|
+
path: tempFilePath,
|
|
144
|
+
caption: screen?.title || "Generated by Google Stitch"
|
|
145
|
+
});
|
|
146
|
+
if (suggestion) {
|
|
147
|
+
content.push({ type: "text", text: suggestion });
|
|
148
|
+
}
|
|
149
|
+
return { content };
|
|
136
150
|
}
|
|
137
151
|
|
|
138
|
-
|
|
152
|
+
// HTML fallback (either provided or minimal placeholder)
|
|
153
|
+
let html =
|
|
139
154
|
screen?.htmlCode?.content ||
|
|
140
|
-
firstComponent?.design?.htmlCode?.content
|
|
141
|
-
|
|
155
|
+
firstComponent?.design?.htmlCode?.content;
|
|
156
|
+
|
|
157
|
+
if (!html) {
|
|
158
|
+
html = `<div style="padding:16px">
|
|
142
159
|
<h3>${escapeHtml(screen?.title || "Generated screen")}</h3>
|
|
143
|
-
<p>${escapeHtml(firstComponent?.text || "")}</p>
|
|
144
160
|
</div>`;
|
|
161
|
+
}
|
|
145
162
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
163
|
+
const content: Array<{ type: string; [key: string]: any }> = [];
|
|
164
|
+
if (modelText) {
|
|
165
|
+
content.push({ type: "text", text: modelText });
|
|
166
|
+
}
|
|
167
|
+
content.push({ type: "html", html });
|
|
168
|
+
if (suggestion) {
|
|
169
|
+
content.push({ type: "text", text: suggestion });
|
|
170
|
+
}
|
|
171
|
+
return { content };
|
|
154
172
|
}
|
|
155
173
|
};
|
|
156
174
|
}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import { StitchMCPClient } from "../services/stitch-mcp-client.js";
|
|
2
|
+
|
|
3
|
+
interface ListScreensParams {
|
|
4
|
+
projectId: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const listScreensTool = (client: StitchMCPClient) => ({
|
|
2
8
|
name: "list_screens",
|
|
3
|
-
description: "
|
|
4
|
-
|
|
5
|
-
|
|
9
|
+
description: "Lists all screens within a given Stitch project",
|
|
10
|
+
|
|
11
|
+
async execute(_: string, params: ListScreensParams) {
|
|
12
|
+
if (!params?.projectId) {
|
|
13
|
+
throw new Error("projectId is required");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return client.request("list_screens", {
|
|
17
|
+
projectId: params.projectId,
|
|
18
|
+
});
|
|
6
19
|
},
|
|
7
|
-
});
|
|
20
|
+
});
|