@mindstudio-ai/remy 0.1.10 → 0.1.11
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/dist/headless.js +12 -6
- package/dist/index.js +12 -6
- package/dist/prompt/sources/frontend-design-notes.md +2 -0
- package/dist/subagents/designExpert/prompt.md +4 -4
- package/dist/subagents/designExpert/prompts/frontend-design-notes.md +2 -0
- package/dist/subagents/designExpert/prompts/identity.md +2 -0
- package/dist/subagents/designExpert/prompts/images.md +8 -4
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -1985,6 +1985,7 @@ var restartProcessTool = {
|
|
|
1985
1985
|
async execute(input) {
|
|
1986
1986
|
const data = await lspRequest("/restart-process", { name: input.name });
|
|
1987
1987
|
if (data.ok) {
|
|
1988
|
+
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
1988
1989
|
return `Restarted ${input.name}.`;
|
|
1989
1990
|
}
|
|
1990
1991
|
return `Error: unexpected response: ${JSON.stringify(data)}`;
|
|
@@ -2613,7 +2614,7 @@ function sample(arr, n) {
|
|
|
2613
2614
|
function getDesignResearchPrompt() {
|
|
2614
2615
|
const fonts = sample(fontData.fonts, 30);
|
|
2615
2616
|
const pairings = sample(fontData.pairings, 20);
|
|
2616
|
-
const images = sample(inspirationImages,
|
|
2617
|
+
const images = sample(inspirationImages, 15);
|
|
2617
2618
|
const fontList = fonts.map((f) => {
|
|
2618
2619
|
const tags = f.tags.length ? ` (${f.tags.join(", ")})` : "";
|
|
2619
2620
|
let cssInfo = "";
|
|
@@ -2645,7 +2646,7 @@ ${pairingList}
|
|
|
2645
2646
|
const inspirationSection = images.length ? `<inspiration_images>
|
|
2646
2647
|
## Design inspiration
|
|
2647
2648
|
|
|
2648
|
-
A random sample of pre-analyzed design references. Use these observations to inform your recommendations.
|
|
2649
|
+
A random sample of pre-analyzed design references. Use these observations to inform your recommendations and build something creative, unique, and compelling.
|
|
2649
2650
|
|
|
2650
2651
|
${imageList}
|
|
2651
2652
|
</inspiration_images>` : "";
|
|
@@ -2657,7 +2658,7 @@ ${imageList}
|
|
|
2657
2658
|
|
|
2658
2659
|
// src/subagents/designExpert/index.ts
|
|
2659
2660
|
var DESCRIPTION = `
|
|
2660
|
-
A dedicated visual design expert. You have a lot on your plate as a coding agent, and design is a specialized skill \u2014 delegate visual design
|
|
2661
|
+
A dedicated visual design expert. You have a lot on your plate as a coding agent, and design is a specialized skill \u2014 delegate visual design here rather than making those decisions yourself. This agent has curated font catalogs, color theory knowledge, access to design inspiration galleries, ability to create beautiful photos and images, and strong opinions about what looks good. It can answer from expertise alone or research the web when needed.
|
|
2661
2662
|
|
|
2662
2663
|
The visual design expert can be used for all things visual design, from quick questions to comprehensive plans:
|
|
2663
2664
|
- Font selection and pairings ("suggest fonts for a <x> app")
|
|
@@ -2665,12 +2666,12 @@ The visual design expert can be used for all things visual design, from quick qu
|
|
|
2665
2666
|
- Gradient, animation, and visual effect recommendations
|
|
2666
2667
|
- Layout and composition ideas that go beyond generic AI defaults
|
|
2667
2668
|
- Analyzing a reference site or screenshot for design insights (it can take screenshots and do research on its own)
|
|
2668
|
-
-
|
|
2669
|
+
- Beautiful layout images or photos
|
|
2669
2670
|
- Icon recommendations
|
|
2670
2671
|
- Proposing full visual directions during intake
|
|
2671
2672
|
|
|
2672
2673
|
**How to write the task:**
|
|
2673
|
-
Include context about the app \u2014 what it does, who uses it, what mood or feeling the interface should convey. More context produces better results. For quick questions ("three font pairings for a <x> app"), brief is fine. You can ask for multiple topics, multiple options, etc.
|
|
2674
|
+
Include context about the app \u2014 what it does, who uses it, what mood or feeling the interface should convey. If the user has any specific requirements, be sure to include them. The agent can not see your conversation with the user, so you need to include all details. More context produces better results. For quick questions ("three font pairings for a <x> app"), brief is fine. You can ask for multiple topics, multiple options, etc.
|
|
2674
2675
|
|
|
2675
2676
|
**What it returns:**
|
|
2676
2677
|
Concrete resources: hex values, font names with CSS URLs, image URLs, layout descriptions. Use the results directly in brand spec files or as guidance when building the interface.
|
|
@@ -3020,9 +3021,10 @@ function startStatusWatcher(config) {
|
|
|
3020
3021
|
const { apiConfig, getContext, onStatus, interval = 3e3, signal } = config;
|
|
3021
3022
|
let lastLabel = "";
|
|
3022
3023
|
let inflight = false;
|
|
3024
|
+
let stopped = false;
|
|
3023
3025
|
const url = `${apiConfig.baseUrl}/_internal/v2/agent/remy/generate-status`;
|
|
3024
3026
|
async function tick() {
|
|
3025
|
-
if (signal?.aborted || inflight) {
|
|
3027
|
+
if (stopped || signal?.aborted || inflight) {
|
|
3026
3028
|
return;
|
|
3027
3029
|
}
|
|
3028
3030
|
inflight = true;
|
|
@@ -3067,6 +3069,9 @@ function startStatusWatcher(config) {
|
|
|
3067
3069
|
return;
|
|
3068
3070
|
}
|
|
3069
3071
|
lastLabel = data.label;
|
|
3072
|
+
if (stopped) {
|
|
3073
|
+
return;
|
|
3074
|
+
}
|
|
3070
3075
|
log.debug("Status watcher: emitting", { label: data.label });
|
|
3071
3076
|
onStatus(data.label);
|
|
3072
3077
|
} catch (err) {
|
|
@@ -3081,6 +3086,7 @@ function startStatusWatcher(config) {
|
|
|
3081
3086
|
log.debug("Status watcher started", { interval });
|
|
3082
3087
|
return {
|
|
3083
3088
|
stop() {
|
|
3089
|
+
stopped = true;
|
|
3084
3090
|
clearInterval(timer);
|
|
3085
3091
|
log.debug("Status watcher stopped");
|
|
3086
3092
|
}
|
package/dist/index.js
CHANGED
|
@@ -1897,6 +1897,7 @@ var init_restartProcess = __esm({
|
|
|
1897
1897
|
async execute(input) {
|
|
1898
1898
|
const data = await lspRequest("/restart-process", { name: input.name });
|
|
1899
1899
|
if (data.ok) {
|
|
1900
|
+
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
1900
1901
|
return `Restarted ${input.name}.`;
|
|
1901
1902
|
}
|
|
1902
1903
|
return `Error: unexpected response: ${JSON.stringify(data)}`;
|
|
@@ -2562,7 +2563,7 @@ function sample(arr, n) {
|
|
|
2562
2563
|
function getDesignResearchPrompt() {
|
|
2563
2564
|
const fonts = sample(fontData.fonts, 30);
|
|
2564
2565
|
const pairings = sample(fontData.pairings, 20);
|
|
2565
|
-
const images = sample(inspirationImages,
|
|
2566
|
+
const images = sample(inspirationImages, 15);
|
|
2566
2567
|
const fontList = fonts.map((f) => {
|
|
2567
2568
|
const tags = f.tags.length ? ` (${f.tags.join(", ")})` : "";
|
|
2568
2569
|
let cssInfo = "";
|
|
@@ -2594,7 +2595,7 @@ ${pairingList}
|
|
|
2594
2595
|
const inspirationSection = images.length ? `<inspiration_images>
|
|
2595
2596
|
## Design inspiration
|
|
2596
2597
|
|
|
2597
|
-
A random sample of pre-analyzed design references. Use these observations to inform your recommendations.
|
|
2598
|
+
A random sample of pre-analyzed design references. Use these observations to inform your recommendations and build something creative, unique, and compelling.
|
|
2598
2599
|
|
|
2599
2600
|
${imageList}
|
|
2600
2601
|
</inspiration_images>` : "";
|
|
@@ -2636,7 +2637,7 @@ var init_designExpert = __esm({
|
|
|
2636
2637
|
init_tools2();
|
|
2637
2638
|
init_prompt2();
|
|
2638
2639
|
DESCRIPTION = `
|
|
2639
|
-
A dedicated visual design expert. You have a lot on your plate as a coding agent, and design is a specialized skill \u2014 delegate visual design
|
|
2640
|
+
A dedicated visual design expert. You have a lot on your plate as a coding agent, and design is a specialized skill \u2014 delegate visual design here rather than making those decisions yourself. This agent has curated font catalogs, color theory knowledge, access to design inspiration galleries, ability to create beautiful photos and images, and strong opinions about what looks good. It can answer from expertise alone or research the web when needed.
|
|
2640
2641
|
|
|
2641
2642
|
The visual design expert can be used for all things visual design, from quick questions to comprehensive plans:
|
|
2642
2643
|
- Font selection and pairings ("suggest fonts for a <x> app")
|
|
@@ -2644,12 +2645,12 @@ The visual design expert can be used for all things visual design, from quick qu
|
|
|
2644
2645
|
- Gradient, animation, and visual effect recommendations
|
|
2645
2646
|
- Layout and composition ideas that go beyond generic AI defaults
|
|
2646
2647
|
- Analyzing a reference site or screenshot for design insights (it can take screenshots and do research on its own)
|
|
2647
|
-
-
|
|
2648
|
+
- Beautiful layout images or photos
|
|
2648
2649
|
- Icon recommendations
|
|
2649
2650
|
- Proposing full visual directions during intake
|
|
2650
2651
|
|
|
2651
2652
|
**How to write the task:**
|
|
2652
|
-
Include context about the app \u2014 what it does, who uses it, what mood or feeling the interface should convey. More context produces better results. For quick questions ("three font pairings for a <x> app"), brief is fine. You can ask for multiple topics, multiple options, etc.
|
|
2653
|
+
Include context about the app \u2014 what it does, who uses it, what mood or feeling the interface should convey. If the user has any specific requirements, be sure to include them. The agent can not see your conversation with the user, so you need to include all details. More context produces better results. For quick questions ("three font pairings for a <x> app"), brief is fine. You can ask for multiple topics, multiple options, etc.
|
|
2653
2654
|
|
|
2654
2655
|
**What it returns:**
|
|
2655
2656
|
Concrete resources: hex values, font names with CSS URLs, image URLs, layout descriptions. Use the results directly in brand spec files or as guidance when building the interface.
|
|
@@ -3049,9 +3050,10 @@ function startStatusWatcher(config) {
|
|
|
3049
3050
|
const { apiConfig, getContext, onStatus, interval = 3e3, signal } = config;
|
|
3050
3051
|
let lastLabel = "";
|
|
3051
3052
|
let inflight = false;
|
|
3053
|
+
let stopped = false;
|
|
3052
3054
|
const url = `${apiConfig.baseUrl}/_internal/v2/agent/remy/generate-status`;
|
|
3053
3055
|
async function tick() {
|
|
3054
|
-
if (signal?.aborted || inflight) {
|
|
3056
|
+
if (stopped || signal?.aborted || inflight) {
|
|
3055
3057
|
return;
|
|
3056
3058
|
}
|
|
3057
3059
|
inflight = true;
|
|
@@ -3096,6 +3098,9 @@ function startStatusWatcher(config) {
|
|
|
3096
3098
|
return;
|
|
3097
3099
|
}
|
|
3098
3100
|
lastLabel = data.label;
|
|
3101
|
+
if (stopped) {
|
|
3102
|
+
return;
|
|
3103
|
+
}
|
|
3099
3104
|
log.debug("Status watcher: emitting", { label: data.label });
|
|
3100
3105
|
onStatus(data.label);
|
|
3101
3106
|
} catch (err) {
|
|
@@ -3110,6 +3115,7 @@ function startStatusWatcher(config) {
|
|
|
3110
3115
|
log.debug("Status watcher started", { interval });
|
|
3111
3116
|
return {
|
|
3112
3117
|
stop() {
|
|
3118
|
+
stopped = true;
|
|
3113
3119
|
clearInterval(timer);
|
|
3114
3120
|
log.debug("Status watcher stopped");
|
|
3115
3121
|
}
|
|
@@ -83,6 +83,7 @@ Interfaces run fullscreen in the user's browser or a wrapped webview mobile app.
|
|
|
83
83
|
- **No long scrolling pages.** Use structured layouts: cards, split panes, steppers, tabs, grouped sections that fit the viewport. The interface should feel like a single-purpose tool, not a document.
|
|
84
84
|
- **On mobile**, scrolling may be necessary, but use sticky headers, fixed CTAs, and anchored navigation to keep key actions within reach.
|
|
85
85
|
- Think of every screen as something the user opens, uses, and closes — not something they read.
|
|
86
|
+
- Even landing pages can be creative. Resist the urge to default to boring bootstrap-style landinage page elements - simple, tired grids, cliche testimonials rows, etc. - be creative and use the ideas from the inspiration to craft something truly compelling and modern.
|
|
86
87
|
|
|
87
88
|
## Visual Design
|
|
88
89
|
|
|
@@ -108,6 +109,7 @@ Layout shift is never acceptable. Elements jumping around as content loads or st
|
|
|
108
109
|
- Loading-to-loaded transitions should swap content in-place without changing container size.
|
|
109
110
|
- Buttons must not change size during loading states. Use a fixed width or `min-width`, and swap the label for a spinner or short text that fits the same space. "Submit" becoming "Submitting..." should not make the button wider and push adjacent elements around.
|
|
110
111
|
- Conditional UI should use opacity/overlay transitions, not insertion into flow that displaces existing content.
|
|
112
|
+
- This is especially important to keep in mind when building things that display AI generated text, especially if the text streams in. Make sure to never shift layout because of streaming AI text.
|
|
111
113
|
|
|
112
114
|
## Responsive Design
|
|
113
115
|
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
{{prompts/frontend-design-notes.md}}
|
|
5
5
|
</frontend_design_standards>
|
|
6
6
|
|
|
7
|
-
{{fonts_to_consider}}
|
|
8
|
-
|
|
9
|
-
{{inspiration_images}}
|
|
10
|
-
|
|
11
7
|
<design_guidelines>
|
|
12
8
|
{{prompts/icons.md}}
|
|
13
9
|
{{prompts/images.md}}
|
|
@@ -16,4 +12,8 @@
|
|
|
16
12
|
{{prompts/layout.md}}
|
|
17
13
|
</design_guidelines>
|
|
18
14
|
|
|
15
|
+
{{fonts_to_consider}}
|
|
16
|
+
|
|
17
|
+
{{inspiration_images}}
|
|
18
|
+
|
|
19
19
|
{{prompts/instructions.md}}
|
|
@@ -83,6 +83,7 @@ Interfaces run fullscreen in the user's browser or a wrapped webview mobile app.
|
|
|
83
83
|
- **No long scrolling pages.** Use structured layouts: cards, split panes, steppers, tabs, grouped sections that fit the viewport. The interface should feel like a single-purpose tool, not a document.
|
|
84
84
|
- **On mobile**, scrolling may be necessary, but use sticky headers, fixed CTAs, and anchored navigation to keep key actions within reach.
|
|
85
85
|
- Think of every screen as something the user opens, uses, and closes — not something they read.
|
|
86
|
+
- Even landing pages can be creative. Resist the urge to default to boring bootstrap-style landinage page elements - simple, tired grids, cliche testimonials rows, etc. - be creative and use the ideas from the inspiration to craft something truly compelling and modern.
|
|
86
87
|
|
|
87
88
|
## Visual Design
|
|
88
89
|
|
|
@@ -108,6 +109,7 @@ Layout shift is never acceptable. Elements jumping around as content loads or st
|
|
|
108
109
|
- Loading-to-loaded transitions should swap content in-place without changing container size.
|
|
109
110
|
- Buttons must not change size during loading states. Use a fixed width or `min-width`, and swap the label for a spinner or short text that fits the same space. "Submit" becoming "Submitting..." should not make the button wider and push adjacent elements around.
|
|
110
111
|
- Conditional UI should use opacity/overlay transitions, not insertion into flow that displaces existing content.
|
|
112
|
+
- This is especially important to keep in mind when building things that display AI generated text, especially if the text streams in. Make sure to never shift layout because of streaming AI text.
|
|
111
113
|
|
|
112
114
|
## Responsive Design
|
|
113
115
|
|
|
@@ -26,6 +26,8 @@ Sometimes you already know the answer. If asked for font pairings for a poetry a
|
|
|
26
26
|
|
|
27
27
|
Include concrete resources (URLs, hex values, font names with CSS links) in your responses. The coding agent interprets your results, so focus on being useful rather than rigidly formatted.
|
|
28
28
|
|
|
29
|
+
When giving longer responses like full design plans, be sure to include specific notes from <frontend_design_standards> for things the coding agent should pay extra close attention to as it builds the project.
|
|
30
|
+
|
|
29
31
|
### Color palettes
|
|
30
32
|
|
|
31
33
|
3 or 4 brand colors with evocative names (not CSS property names like "Background" or "Border"). The `description` field is short and functional — what the color is used for, not why you chose it. Keep descriptions under 10 words.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
## Photos and Images
|
|
2
2
|
|
|
3
|
+
When the design calls for imagery, include actual image URLs so the coding agent can use them immediately. Prefer images with strong subjects: people, scenes - dramatic, eye catching, and beautiful.
|
|
4
|
+
|
|
3
5
|
Not every interface needs images. A productivity dashboard, a finance tool, or a data-heavy app is better served by strong typography, color, and layout than by shoehorned photography. Use images when they genuinely add to the experience — landing pages, marketing sites, content-driven apps — not as decoration on every project.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Do not provide images as "references" - images must be ready-to-use assets that can be included directly in the design.
|
|
6
8
|
|
|
7
9
|
### Two sources
|
|
8
10
|
|
|
9
|
-
**AI-generated photos and images** (`generateImages`) — Seedream produces high-quality results for both photorealistic images and abstract/creative visuals. You have full control over the output: style, composition, colors, mood. When generating multiple images, batch them in a single `generateImages` call — they run in parallel.
|
|
11
|
+
**AI-generated photos and images** (`generateImages`) — Seedream produces high-quality results for both photorealistic images and abstract/creative visuals. You have full control over the output: style, composition, colors, mood. When generating multiple images, batch them in a single `generateImages` call — they run in parallel. Generated images are production assets, not mockups or concepts — they are hosted on MindStudio CDN at full resolution and will be used directly in the final interface.
|
|
10
12
|
|
|
11
13
|
**Stock photography** (`searchStockPhotos`) — Pexels has modern, editorial-style photos. Useful for quick placeholders, mockups, or when you need a specific real-world subject (a specific city, a recognizable object, etc.). Write specific queries: "person writing in notebook at minimalist desk, natural light" not "office."
|
|
12
14
|
|
|
@@ -17,11 +19,13 @@ Lead with the visual style, then describe the content. This order helps the mode
|
|
|
17
19
|
**Structure:** Style/medium first, then subject, then details.
|
|
18
20
|
- "Digital photography, soft natural window light, shallow depth of field. A ceramic coffee cup on a marble countertop, morning light casting long shadows, warm tones."
|
|
19
21
|
- "Flat vector illustration, clean lines, limited color palette. An isometric view of a workspace with a laptop, plant, and notebook."
|
|
20
|
-
- "Abstract digital art, fluid gradients, high contrast. Deep navy
|
|
22
|
+
- "Abstract digital art, fluid gradients, high contrast. Deep navy flowing into warm amber, organic liquid shapes, editorial feel."
|
|
21
23
|
|
|
22
24
|
**For photorealistic images:** Specify the photography style (editorial, portrait, product, aerial), lighting (natural, studio, golden hour, direct flash), and camera characteristics (close-up, wide angle, shallow depth of field, slightly grainy texture).
|
|
23
25
|
|
|
24
|
-
**Avoid:**
|
|
26
|
+
**Avoid:**
|
|
27
|
+
- Hex codes in prompts — the model renders them as visible text. Describe colors by name instead.
|
|
28
|
+
- Describing positions of arms, legs, or specific limb arrangements — this confuses image models.
|
|
25
29
|
|
|
26
30
|
### What makes good photos and images
|
|
27
31
|
|