@mindstudio-ai/remy 0.1.45 → 0.1.47
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
CHANGED
|
@@ -2157,7 +2157,10 @@ var runMethodTool = {
|
|
|
2157
2157
|
|
|
2158
2158
|
// src/subagents/common/analyzeImage.ts
|
|
2159
2159
|
var VISION_MODEL = "gemini-3-flash";
|
|
2160
|
-
var VISION_MODEL_OVERRIDE = JSON.stringify({
|
|
2160
|
+
var VISION_MODEL_OVERRIDE = JSON.stringify({
|
|
2161
|
+
model: VISION_MODEL,
|
|
2162
|
+
config: { thinkingBudget: "off" }
|
|
2163
|
+
});
|
|
2161
2164
|
async function analyzeImage(params) {
|
|
2162
2165
|
const { prompt, imageUrl, timeout = 2e5, onLog } = params;
|
|
2163
2166
|
return runCli(
|
|
@@ -3080,6 +3083,11 @@ __export(generateImages_exports, {
|
|
|
3080
3083
|
});
|
|
3081
3084
|
|
|
3082
3085
|
// src/subagents/designExpert/tools/images/enhancePrompt.ts
|
|
3086
|
+
var ENHANCE_MODEL = "gemini-3-flash";
|
|
3087
|
+
var MODEL_OVERRIDE = JSON.stringify({
|
|
3088
|
+
model: ENHANCE_MODEL,
|
|
3089
|
+
config: { thinkingBudget: "off" }
|
|
3090
|
+
});
|
|
3083
3091
|
var SYSTEM_PROMPT = readAsset(
|
|
3084
3092
|
"subagents/designExpert/tools/images/enhance-image-prompt.md"
|
|
3085
3093
|
);
|
|
@@ -3104,7 +3112,7 @@ ${context}
|
|
|
3104
3112
|
${brief}
|
|
3105
3113
|
</brief>`;
|
|
3106
3114
|
const enhanced = await runCli(
|
|
3107
|
-
`mindstudio generate-text --message ${JSON.stringify(message)} --output-key content --no-meta`,
|
|
3115
|
+
`mindstudio generate-text --message ${JSON.stringify(message)} --model-override ${JSON.stringify(MODEL_OVERRIDE)} --output-key content --no-meta`,
|
|
3108
3116
|
{ timeout: 6e4, onLog }
|
|
3109
3117
|
);
|
|
3110
3118
|
return enhanced.trim();
|
package/dist/index.js
CHANGED
|
@@ -2085,7 +2085,10 @@ var init_analyzeImage = __esm({
|
|
|
2085
2085
|
"use strict";
|
|
2086
2086
|
init_runCli();
|
|
2087
2087
|
VISION_MODEL = "gemini-3-flash";
|
|
2088
|
-
VISION_MODEL_OVERRIDE = JSON.stringify({
|
|
2088
|
+
VISION_MODEL_OVERRIDE = JSON.stringify({
|
|
2089
|
+
model: VISION_MODEL,
|
|
2090
|
+
config: { thinkingBudget: "off" }
|
|
2091
|
+
});
|
|
2089
2092
|
}
|
|
2090
2093
|
});
|
|
2091
2094
|
|
|
@@ -3157,17 +3160,22 @@ ${context}
|
|
|
3157
3160
|
${brief}
|
|
3158
3161
|
</brief>`;
|
|
3159
3162
|
const enhanced = await runCli(
|
|
3160
|
-
`mindstudio generate-text --message ${JSON.stringify(message)} --output-key content --no-meta`,
|
|
3163
|
+
`mindstudio generate-text --message ${JSON.stringify(message)} --model-override ${JSON.stringify(MODEL_OVERRIDE)} --output-key content --no-meta`,
|
|
3161
3164
|
{ timeout: 6e4, onLog }
|
|
3162
3165
|
);
|
|
3163
3166
|
return enhanced.trim();
|
|
3164
3167
|
}
|
|
3165
|
-
var SYSTEM_PROMPT;
|
|
3168
|
+
var ENHANCE_MODEL, MODEL_OVERRIDE, SYSTEM_PROMPT;
|
|
3166
3169
|
var init_enhancePrompt = __esm({
|
|
3167
3170
|
"src/subagents/designExpert/tools/images/enhancePrompt.ts"() {
|
|
3168
3171
|
"use strict";
|
|
3169
3172
|
init_runCli();
|
|
3170
3173
|
init_assets();
|
|
3174
|
+
ENHANCE_MODEL = "gemini-3-flash";
|
|
3175
|
+
MODEL_OVERRIDE = JSON.stringify({
|
|
3176
|
+
model: ENHANCE_MODEL,
|
|
3177
|
+
config: { thinkingBudget: "off" }
|
|
3178
|
+
});
|
|
3171
3179
|
SYSTEM_PROMPT = readAsset(
|
|
3172
3180
|
"subagents/designExpert/tools/images/enhance-image-prompt.md"
|
|
3173
3181
|
);
|
|
@@ -82,7 +82,7 @@ The UI should feel instant. Never make the user wait for a server round-trip to
|
|
|
82
82
|
|
|
83
83
|
## FTUE
|
|
84
84
|
|
|
85
|
-
All interactive apps must be intuitive and easy to use. Form elements must be well-labelled. Complex interfaces should have descriptions or tooltips when helpful. Complex apps benefit from a beautiful simple onboarding modal on first use or a simple click tour. Even if the app is intuitive and easy to use, users showing up for the first time might still be overwhelmed or confused, and we have an opportunity to set expectations, provide context, and make the user confident as they use our product. Don't neglect this.
|
|
85
|
+
All interactive apps must be intuitive and easy to use. Form elements must be well-labelled. Complex interfaces should have descriptions or tooltips when helpful. Complex apps benefit from a beautiful simple onboarding modal on first use or a simple click tour. Mobile apps need a beautiful welcome screen sequence that orients the user to the app. Ask the visualDesignExpert for advice here. Even if the app is intuitive and easy to use, users showing up for the first time might still be overwhelmed or confused, and we have an opportunity to set expectations, provide context, and make the user confident as they use our product. Don't neglect this.
|
|
86
86
|
|
|
87
87
|
## What to Actively Avoid At All Costs
|
|
88
88
|
|
|
@@ -101,3 +101,7 @@ When a scenario runs, the platform:
|
|
|
101
101
|
3. **Impersonates** the roles from the scenario's `roles` field (the app renders from that user's perspective)
|
|
102
102
|
|
|
103
103
|
This is deterministic — same scenario always produces the same state.
|
|
104
|
+
|
|
105
|
+
## Scenario Images
|
|
106
|
+
|
|
107
|
+
When scenarios seed data that includes image URLs (profile photos, product images, cover art, etc.), ask the `visualDesignExpert` to generate a small batch of images that fit the app's aesthetic before writing the scenario code. A handful of bespoke photos make scenarios feel dramatically more real than placeholder services. Use the CDN URLs directly in your `db.push()` calls.
|
|
@@ -47,6 +47,16 @@ export const Users = db.defineTable<User>('users', {
|
|
|
47
47
|
| `object` / `array` / JSON types | TEXT | Stored as JSON string, parsed on read |
|
|
48
48
|
| `User` (branded type) | TEXT | User ID with `@@user@@` prefix (transparent — your code works with clean UUIDs) |
|
|
49
49
|
|
|
50
|
+
### When to Use JSON Columns vs Separate Tables
|
|
51
|
+
|
|
52
|
+
Every table operation is a network round-trip — not a local SQLite query. There are no JOINs. Fetching related data across tables means multiple sequential or batched HTTP calls. Design your schema around how data is accessed, not traditional normalization rules. Remember that databases in these apps are usually quite small - often single or a handful of users - we need to optimize for speed, not normalization.
|
|
53
|
+
|
|
54
|
+
**Use a JSON column** when the data is always read and written with its parent. A product with a list of variant options, a form submission with its answers etc — these are single units that load together and save together. One row, one round-trip.
|
|
55
|
+
|
|
56
|
+
**Use a separate table** when you need to query the child data independently, when the child set could grow unbounded, or when children are updated individually without touching the parent.
|
|
57
|
+
|
|
58
|
+
Most 1:1 and 1:few relationships belong in JSON columns. Separate tables are for genuinely independent entities that happen to reference each other.
|
|
59
|
+
|
|
50
60
|
### System Columns
|
|
51
61
|
|
|
52
62
|
Every table automatically has these columns. The SDK adds them to the TypeScript return type automatically — you can access them on any row returned from `get()`, `filter()`, `push()`, etc. without declaring them in your interface. They're also stripped from write inputs, so you never pass them to `push()` or `update()`.
|