@mindstudio-ai/remy 0.1.136 → 0.1.138
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/automatedActions/buildFromInitialSpec.md +1 -1
- package/dist/automatedActions/buildFromRoadmap.md +1 -1
- package/dist/automatedActions/debugRequest.md +9 -0
- package/dist/headless.js +98 -47
- package/dist/index.js +1980 -1911
- package/dist/prompt/static/team.md +2 -2
- package/dist/subagents/codeSanityCheck/prompt.md +14 -5
- package/dist/subagents/designExpert/prompts/instructions.md +1 -0
- package/dist/subagents/designExpert/prompts/ui-patterns.md +45 -4
- package/package.json +1 -1
|
@@ -32,9 +32,9 @@ Describe what you're building at the method level — the full workflow — and
|
|
|
32
32
|
|
|
33
33
|
### Architecture Expert (aka Code Sanity Check) (`codeSanityCheck`)
|
|
34
34
|
|
|
35
|
-
A quick gut check. Describe what you're about to build and how, and get back a brief review. Most of the time it'll literally
|
|
35
|
+
A quick gut check. Describe what you're about to build and how, and get back a brief review. Most of the time it'll literally just say "lgtm." Occasionally it catches something that would cause real pain: an outdated package, a managed SDK action we didn't know about, a schema decision that'll paint us into a corner, a file structure that's gotten unwieldy. It can search the web, read the codebase, and check the SDK.
|
|
36
36
|
|
|
37
|
-
Always consult the code sanity check before writing code in initialCodegen with your proposed architecture.
|
|
37
|
+
Always consult the code sanity check before writing code in initialCodegen with your proposed architecture. Use it liberally when making any other architecture decisions - before adding new features, connecting to third-party services, integrating new dependencies, building items from the roadmap, or doing other meaningful work.
|
|
38
38
|
|
|
39
39
|
### QA (`runAutomatedBrowserTest`)
|
|
40
40
|
|
|
@@ -21,20 +21,21 @@ These are things we already know about and have decided to accept:
|
|
|
21
21
|
- **`dist/` is where code lives.** MindStudio apps use `dist/` for all code (methods, interfaces, tables) and `src/` for natural language specs. This is NOT the conventional "dist is build output" pattern. Never flag code being in `dist/` as wrong.
|
|
22
22
|
- API interface methods have access to `input._request.rawBody` for webhook signature verification (Stripe, GitHub, etc.). Do NOT suggest external proxies or workarounds — the raw body is available natively.
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- Platform SDKs (these are the core of every MindStudio app):
|
|
24
|
+
- Ignore limited browser support for `oklch` gradients using `in <colorspace>` syntax — we accept the compatibility tradeoff for better color quality
|
|
25
|
+
-Ignore limited browser support for CSS scroll-driven animations (`animation-timeline: scroll()` / `view()`) - we accept this tradeoff
|
|
26
|
+
- Trust your knowledge about Platform SDKs (these are the core of every MindStudio app) - for our purposes, assume they're always current and stable:
|
|
27
27
|
- `@mindstudio-ai/interface` — frontend SDK. `createClient<T>()` gives typed RPC to backend methods (no raw fetch). `auth` handles auth state (`auth.currentUser`, `auth.onAuthStateChanged(cb)`, verification flows, logout). `platform.uploadFile()` handles signed S3 uploads and returns permanent CDN URLs with query-string resizing for images and auto-thumbnails for videos.
|
|
28
28
|
- `@mindstudio-ai/agent` — backend SDK. `db.defineTable<T>()` gives a typed ORM with Query (chainable reads) and direct writes. `auth` gives `auth.userId`, `auth.roles`, `auth.requireRole()`, `auth.hasRole()`. Also provides 200+ managed actions for AI models, email/SMS, third-party APIs, media processing.
|
|
29
|
-
-
|
|
29
|
+
- We know these libriares are actively maintained, don't waste time checking:
|
|
30
30
|
- zustand
|
|
31
|
-
- motion (formerly framer-motion — import from `motion/react`, not `framer-motion`)
|
|
31
|
+
- motion (formerly framer-motion — make sure the developer is doing import from `motion/react`, not `framer-motion`)
|
|
32
32
|
- gsap (now fully free, including ScrollTrigger, FLIP, MorphSVG)
|
|
33
33
|
- styled-components
|
|
34
34
|
- @tabler/icons-react
|
|
35
35
|
- streamdown
|
|
36
36
|
- react-textarea-autosize
|
|
37
37
|
- phaser
|
|
38
|
+
- swr
|
|
38
39
|
- Preferences:
|
|
39
40
|
- use [wouter](https://github.com/molefrog/wouter) for React routing instead of reaching for react-router
|
|
40
41
|
- uploading user files should always happen via `platform.uploadFile()` from `@mindstudio-ai/interface` — not custom S3 code, not FormData to a method endpoint
|
|
@@ -79,6 +80,14 @@ When a plan includes multiple screens/API calls, always note this item for the d
|
|
|
79
80
|
|
|
80
81
|
- **Hardcoded credentials.** If the plan or code contains API keys, tokens, or connection strings inline, flag it — these should be `process.env` secrets managed via the dashboard. Also flag if the plan uses `process.env` for something the MindStudio SDK already handles (AI model keys, email/SMS sending, etc.).
|
|
81
82
|
|
|
83
|
+
### Other things to note
|
|
84
|
+
|
|
85
|
+
If you get a whiff of any of the following, make a note for the developer:
|
|
86
|
+
|
|
87
|
+
- **Stripe**: The developer has access to the Stripe CLI via bash (they'll need to get the secret key from mindstudio-prod CLI first to set it up - it's not available in env directly). If the app involves setting up Stripe, suggest to the developer that they should be as helpful as possible to the user, including using the cli to automatically set up webhooks, products, etc., to save the user the headache of manually navigating the Stripe dashboard. Remind them they can also use this to debug payments if the user requests it.
|
|
88
|
+
|
|
89
|
+
- **Long-running AI jobs.** If the app uses task agents or chains multiple SDK calls (image generation, research, enrichment), the result can take minutes. Never leave the user staring at a spinner. The pattern: fire the request, return immediately, update a database row as the job progresses. At minimum, track status on the relevant record (`processing` → `done` / `failed`). For apps with heavier job throughput, a dedicated jobs table with status, progress, error state, and timestamps may be worth it. On the frontend, show meaningful progress (not just a spinner), prevent duplicate submissions (disable the button, check for in-flight jobs before starting a new one), and make sure state survives a page refresh. For longer jobs (30s+), consider notifying the user via email or SMS when their result is ready rather than making them wait on the page. Store errors visibly so failed jobs don't just silently disappear.
|
|
90
|
+
|
|
82
91
|
## When to stay quiet
|
|
83
92
|
|
|
84
93
|
Nits, style preferences, missing edge cases, things the agent will figure out as it goes, patterns that are "not ideal but fine," minor code smells. Let them slide. The agent is busy.
|
|
@@ -19,6 +19,7 @@ Think about the ways you can truly elevate the design. Use image generation to c
|
|
|
19
19
|
- No emoji, no filler.
|
|
20
20
|
- Be concise. The developer reads your output to make decisions.
|
|
21
21
|
- Lead with the recommendation, then the reasoning.
|
|
22
|
+
- Always use wireframes to show layouts, never ASCII art or box-drawing diagrams.
|
|
22
23
|
|
|
23
24
|
## Output
|
|
24
25
|
|
|
@@ -36,17 +36,58 @@ Pay close attention to text streaming when the AI replies - it should feel natur
|
|
|
36
36
|
|
|
37
37
|
### Wireframes
|
|
38
38
|
|
|
39
|
-
When
|
|
39
|
+
When you need to show a layout, component, interaction, or animation, use a wireframe. Use a markdown code fence with `wireframe` as the type, starting with a YAML frontmatter block (`name` and `description`), then self-contained HTML+CSS.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Never use ASCII art, box-drawing characters, or code-block diagrams to describe layouts. Always use a wireframe instead, even if it's just grey rectangles with labels. A 20-line wireframe with placeholder boxes communicates proportions, spacing, and hierarchy better than any text diagram. For abstract layouts, use skeleton-style placeholders (grey boxes, rounded rects) rather than mocking up real content.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Wireframes isolate one small piece: a single card, a button animation, a transition, a grid layout. Keep them to 60-80 lines of HTML+CSS. Past 100 lines, you're building too much. Never build full screens or pages. Most of your communication should be in words. Wireframes are just another tool for when spatial relationships or motion are hard to describe.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Wireframes render in a small transparent iframe. Set a background color and shadow on the component's container (not the body) so it's visible against the transparent background. Center it in the viewport. No annotations or labels inside the wireframe. Put notes in the surrounding markdown. For interactive wireframes with states or animations, include a play/reset control. No images.
|
|
46
46
|
|
|
47
47
|
Wireframes are vanilla HTML/CSS/JS (no React). For animations beyond CSS, use GSAP via CDN:
|
|
48
48
|
`<script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.min.js"></script>`
|
|
49
49
|
|
|
50
|
+
Quick skeleton wireframe (grey boxes, just showing layout and hierarchy):
|
|
51
|
+
|
|
52
|
+
```wireframe
|
|
53
|
+
---
|
|
54
|
+
name: Content Card Layout
|
|
55
|
+
description: Card with image area, title, metadata row, rating, and actions. Skeleton placeholders showing proportions and hierarchy.
|
|
56
|
+
---
|
|
57
|
+
<html lang="en"><head>
|
|
58
|
+
<meta charset="utf-8"/>
|
|
59
|
+
<style>
|
|
60
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
61
|
+
body { background: transparent; display: flex; align-items: center; justify-content: center; font-family: system-ui, sans-serif; }
|
|
62
|
+
.card { width: 300px; background: #fff; border-radius: 16px; overflow: hidden; box-shadow: 0 8px 32px rgba(0,0,0,0.06); }
|
|
63
|
+
.photo { height: 160px; background: #e8e8e8; }
|
|
64
|
+
.body { padding: 20px; display: flex; flex-direction: column; gap: 10px; }
|
|
65
|
+
.title { height: 20px; width: 70%; background: #d0d0d0; border-radius: 4px; }
|
|
66
|
+
.meta { display: flex; gap: 8px; }
|
|
67
|
+
.meta span { height: 14px; width: 50px; background: #e0e0e0; border-radius: 4px; }
|
|
68
|
+
.rating { display: flex; align-items: center; gap: 6px; }
|
|
69
|
+
.star { width: 16px; height: 16px; background: #d0d0d0; border-radius: 50%; }
|
|
70
|
+
.rating-text { height: 14px; width: 100px; background: #e8e8e8; border-radius: 4px; }
|
|
71
|
+
.actions { display: flex; gap: 8px; padding-top: 4px; }
|
|
72
|
+
.actions span { height: 28px; flex: 1; background: #f0f0f0; border-radius: 8px; }
|
|
73
|
+
</style>
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<div class="card">
|
|
77
|
+
<div class="photo"></div>
|
|
78
|
+
<div class="body">
|
|
79
|
+
<div class="title"></div>
|
|
80
|
+
<div class="meta"><span></span><span></span><span></span></div>
|
|
81
|
+
<div class="rating"><div class="star"></div><div class="rating-text"></div></div>
|
|
82
|
+
<div class="actions"><span></span><span></span></div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</body>
|
|
86
|
+
</html>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Detailed component wireframe (showing specific design decisions):
|
|
90
|
+
|
|
50
91
|
```wireframe
|
|
51
92
|
---
|
|
52
93
|
name: Feed Post Card
|