@mindstudio-ai/remy 0.1.92 → 0.1.94
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 -3
- package/dist/index.js +12 -3
- package/dist/prompt/compiled/design.md +4 -1
- package/dist/prompt/static/intake.md +5 -2
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -1688,7 +1688,7 @@ var setProjectMetadataTool = {
|
|
|
1688
1688
|
type: "string",
|
|
1689
1689
|
description: "Project display name. Keep it short (2-4 words). Use the app's actual name if the user mentioned one, otherwise pick something descriptive."
|
|
1690
1690
|
},
|
|
1691
|
-
|
|
1691
|
+
description: {
|
|
1692
1692
|
type: "string",
|
|
1693
1693
|
description: "Short description for the project - user facing only - appears for the project creator in their list of apps."
|
|
1694
1694
|
},
|
|
@@ -4026,7 +4026,7 @@ var PROMPT_TEMPLATE = readAsset(SUBAGENT, "prompt.md").replace(/\{\{([^}]+)\}\}/
|
|
|
4026
4026
|
const k = key.trim();
|
|
4027
4027
|
return RUNTIME_PLACEHOLDERS.has(k) ? match : readAsset(SUBAGENT, k);
|
|
4028
4028
|
}).replace(/\n{3,}/g, "\n\n");
|
|
4029
|
-
function getDesignExpertPrompt() {
|
|
4029
|
+
function getDesignExpertPrompt(onboardingState) {
|
|
4030
4030
|
const specContext = loadSpecContext();
|
|
4031
4031
|
const indices = getSampleIndices(
|
|
4032
4032
|
{
|
|
@@ -4055,6 +4055,14 @@ function getDesignExpertPrompt() {
|
|
|
4055
4055
|
prompt += `
|
|
4056
4056
|
|
|
4057
4057
|
${specContext}`;
|
|
4058
|
+
}
|
|
4059
|
+
const state = onboardingState ?? "onboardingFinished";
|
|
4060
|
+
if (state !== "onboardingFinished") {
|
|
4061
|
+
prompt += `
|
|
4062
|
+
|
|
4063
|
+
<project_phase>
|
|
4064
|
+
This project is in the "${state}" phase. The codebase is a placeholder scaffold or is being generated for the first time.
|
|
4065
|
+
</project_phase>`;
|
|
4058
4066
|
}
|
|
4059
4067
|
return prompt;
|
|
4060
4068
|
}
|
|
@@ -4133,7 +4141,7 @@ var designExpertTool = {
|
|
|
4133
4141
|
}
|
|
4134
4142
|
const history = context.conversationMessages ? getSubAgentHistory(context.conversationMessages, "visualDesignExpert") : [];
|
|
4135
4143
|
const result = await runSubAgent({
|
|
4136
|
-
system: getDesignExpertPrompt(),
|
|
4144
|
+
system: getDesignExpertPrompt(context.onboardingState),
|
|
4137
4145
|
task: input.task,
|
|
4138
4146
|
history: history.length > 0 ? history : void 0,
|
|
4139
4147
|
tools: DESIGN_EXPERT_TOOLS,
|
|
@@ -5364,6 +5372,7 @@ async function runTurn(params) {
|
|
|
5364
5372
|
resolveExternalTool,
|
|
5365
5373
|
toolCallId: tc.id,
|
|
5366
5374
|
requestId,
|
|
5375
|
+
onboardingState,
|
|
5367
5376
|
subAgentMessages,
|
|
5368
5377
|
conversationMessages: state.messages,
|
|
5369
5378
|
toolRegistry,
|
package/dist/index.js
CHANGED
|
@@ -1228,7 +1228,7 @@ var init_setProjectMetadata = __esm({
|
|
|
1228
1228
|
type: "string",
|
|
1229
1229
|
description: "Project display name. Keep it short (2-4 words). Use the app's actual name if the user mentioned one, otherwise pick something descriptive."
|
|
1230
1230
|
},
|
|
1231
|
-
|
|
1231
|
+
description: {
|
|
1232
1232
|
type: "string",
|
|
1233
1233
|
description: "Short description for the project - user facing only - appears for the project creator in their list of apps."
|
|
1234
1234
|
},
|
|
@@ -3927,7 +3927,7 @@ var init_getUiInspirationSample = __esm({
|
|
|
3927
3927
|
});
|
|
3928
3928
|
|
|
3929
3929
|
// src/subagents/designExpert/prompt.ts
|
|
3930
|
-
function getDesignExpertPrompt() {
|
|
3930
|
+
function getDesignExpertPrompt(onboardingState) {
|
|
3931
3931
|
const specContext = loadSpecContext();
|
|
3932
3932
|
const indices = getSampleIndices(
|
|
3933
3933
|
{
|
|
@@ -3956,6 +3956,14 @@ function getDesignExpertPrompt() {
|
|
|
3956
3956
|
prompt += `
|
|
3957
3957
|
|
|
3958
3958
|
${specContext}`;
|
|
3959
|
+
}
|
|
3960
|
+
const state = onboardingState ?? "onboardingFinished";
|
|
3961
|
+
if (state !== "onboardingFinished") {
|
|
3962
|
+
prompt += `
|
|
3963
|
+
|
|
3964
|
+
<project_phase>
|
|
3965
|
+
This project is in the "${state}" phase. The codebase is a placeholder scaffold or is being generated for the first time.
|
|
3966
|
+
</project_phase>`;
|
|
3959
3967
|
}
|
|
3960
3968
|
return prompt;
|
|
3961
3969
|
}
|
|
@@ -4069,7 +4077,7 @@ Visual design expert. Describe the situation and what you need \u2014 the agent
|
|
|
4069
4077
|
}
|
|
4070
4078
|
const history = context.conversationMessages ? getSubAgentHistory(context.conversationMessages, "visualDesignExpert") : [];
|
|
4071
4079
|
const result = await runSubAgent({
|
|
4072
|
-
system: getDesignExpertPrompt(),
|
|
4080
|
+
system: getDesignExpertPrompt(context.onboardingState),
|
|
4073
4081
|
task: input.task,
|
|
4074
4082
|
history: history.length > 0 ? history : void 0,
|
|
4075
4083
|
tools: DESIGN_EXPERT_TOOLS,
|
|
@@ -5403,6 +5411,7 @@ async function runTurn(params) {
|
|
|
5403
5411
|
resolveExternalTool,
|
|
5404
5412
|
toolCallId: tc.id,
|
|
5405
5413
|
requestId,
|
|
5414
|
+
onboardingState,
|
|
5406
5415
|
subAgentMessages,
|
|
5407
5416
|
conversationMessages: state.messages,
|
|
5408
5417
|
toolRegistry,
|
|
@@ -47,6 +47,9 @@ Every interface must work on both desktop and mobile. Think about how the app wi
|
|
|
47
47
|
- Test at both extremes. A layout that only looks good at one breakpoint is not done.
|
|
48
48
|
- When the app is primarily mobile (e.g., a mobile-first consumer app, a tool designed for on-the-go use), set `"defaultPreviewMode": "mobile"` in `web.json` so the editor previews in a mobile viewport by default.
|
|
49
49
|
|
|
50
|
+
## Images
|
|
51
|
+
The `designExpert` can create and source amazing, high quality images, graphics, illustrations, and logos to use in the interface - both with and without transparency. This is a huge level for upgrading the premium look, feel, and quality of the app. Use image logos directly instead of plain text wordmarks; use images for empty states, onboarding screens, full-screen loading, and more.
|
|
52
|
+
|
|
50
53
|
## Forms
|
|
51
54
|
|
|
52
55
|
Forms should feel like interactions, not paperwork.
|
|
@@ -91,7 +94,7 @@ Authentication moments must feel natural and intuitive - they should not feel ja
|
|
|
91
94
|
|
|
92
95
|
### Rules for building auth screens
|
|
93
96
|
|
|
94
|
-
Consult the `visualDesignExpert` to help you work through authentication at a high level.
|
|
97
|
+
Consult the `visualDesignExpert` to help you work through authentication at a high level. For most apps, a user should never land on auth at the root of an app when opening it for the first time (except in cases where the app is, e.g., an internal tool or some other protected experience). Users should be able to explore public resources, or at least encounter some kind of landing/introduction moment, before they get hit with a signup/login screen. Make auth feel like a natural moment in the user's journey.
|
|
95
98
|
|
|
96
99
|
**Auth modes:** Think about which mode(s) makes the most sense for the type of app you are building. Consumer apps likely to be used on mobile should probably tend toward SMS auth as the default - business apps used on desktop make more sense to use email verification - or allow both, there's no harm in giving the user choice!
|
|
97
100
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
## Intake Mode
|
|
2
2
|
|
|
3
|
-
The user just arrived at a blank project with a full-screen chat. They may have a clear vision or nothing at all. Your job is to help them land on something exciting, specific, and buildable — then scope an MVP that gives them a real taste of it.
|
|
3
|
+
The user just arrived at a blank project with a full-screen chat. They may have a clear vision or nothing at all. Your job is to help them land on something exciting, specific, and buildable — then scope an MVP that gives them a real taste of it.
|
|
4
|
+
|
|
5
|
+
The goal of the intake session is to truly and deeply align with the user on a shared vision for an MVP, not simply to collect requirements. This is a chance to help the user see the full potential of their idea and figure out what it is they *really* want, not just what they *say* they want. The effect of a good intake session is that the user is excited and can't wait to build their app - you have elevated their good ideas, quietly pruned their bad ones, and are ready to build something that will amaze them.
|
|
4
6
|
|
|
5
7
|
### What You're Working With
|
|
6
8
|
|
|
@@ -44,6 +46,7 @@ Your goal is to land on a specific, buildable idea — not to collect every requ
|
|
|
44
46
|
- **If the user has a clear idea:** Acknowledge it briefly and move to a form. Don't over-discuss what's already clear.
|
|
45
47
|
- **If the user is vague or exploring:** Ask what world they're in, what problem bugs them, what would be cool. Help them find a specific angle to build something compelling.
|
|
46
48
|
- **If the user has no idea at all:** Ask what they're into — their work, hobbies, communities, side projects. People build the best apps around things they already care about. Start from who they are, not from what's technically possible.
|
|
49
|
+
- **If the user arrives with a very detailed brief:** They've put real thought into this — acknowledge that. But treat the detail as signal about what they care about, not as a spec to implement literally. A detailed first message reveals priorities and intent: what excites them, what experience they're imagining, what they think matters most. Read through the specifics to understand those things, then bring your own expertise to the architecture. Ask a few questions to figure out which details are deeply held preferences and which are first-draft thinking they'd happily let you improve on. Then write a spec that delivers on their vision, drawing from their ideas where they're strong and making your own calls where your expertise adds value.
|
|
47
50
|
|
|
48
51
|
Push past the generic first answer. When someone says "a todo app" or "a chatbot," that's a starting point, not a destination. What would make theirs *theirs*? Who's it for? What would make someone choose it over the obvious alternative? One good question can turn a forgettable idea into something they're genuinely excited to build.
|
|
49
52
|
|
|
@@ -52,7 +55,7 @@ But know when to stop exploring. Once there's a clear concept with a specific au
|
|
|
52
55
|
### Process
|
|
53
56
|
|
|
54
57
|
1. **Brief chat** — Only when you need to understand the idea. If the user's first message gives you enough to work with, acknowledge it and move to a form. Always include a short text response before calling `promptUser` so the user has context for the form that appears.
|
|
55
|
-
2. **Structured forms** — Use `promptUser` with `type: "form"` to collect details. If you can express your questions as structured options (select, text,
|
|
58
|
+
2. **Structured forms** — Use `promptUser` with `type: "form"` to collect details. If you can express your questions as structured options (select, text, etc), use a form instead of asking in chat. Forms are easier for users than open-ended description, especially when they may not have the language for what they want. Use multiple forms if needed — one to clarify the core concept, another for data and workflows, another for design and brand. Each form should build on what you've already learned. Always use `type: "form"` during intake.
|
|
56
59
|
3. **Write the spec** — Turn everything into a first draft and get it on screen. The spec is a starting point, not a finished product. The user will refine it from there.
|
|
57
60
|
|
|
58
61
|
### What NOT to Do
|