@mindstudio-ai/remy 0.1.247 → 0.1.249
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/publish.md +1 -1
- package/dist/headless.js +1 -1
- package/dist/index.js +1 -1
- package/dist/prompt/compiled/auth.md +2 -0
- package/dist/prompt/compiled/dev-and-deploy.md +0 -4
- package/dist/prompt/compiled/interfaces.md +25 -1
- package/dist/prompt/compiled/methods.md +1 -1
- package/dist/prompt/compiled/sdk-actions.md +1 -1
- package/dist/prompt/compiled/task-agents.md +1 -1
- package/dist/subagents/browserAutomation/prompt.md +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ Read what's changed since the last push — the diffs and commits — and turn i
|
|
|
11
11
|
If approved:
|
|
12
12
|
- Stage and commit any uncommitted changes with a clean, descriptive commit message. If the committed work resolves any open issues (`mindstudio-prod issues`), reference them in the commit message with a closing keyword — `fixes #42`, `closes #7` — so the deploy closes them automatically once it goes live.
|
|
13
13
|
- Push to main
|
|
14
|
-
- Use `mindstudio-prod releases
|
|
14
|
+
- Use `mindstudio-prod releases wait` to poll the build until it completes. Let the user know it's deploying, then report back when it's live.
|
|
15
15
|
- Once deployed, offer to help with next steps. This includes technical steps likesetting up a custom domain (`mindstudio-prod domains`), checking for errors (`mindstudio-prod requests stats`), seeding production data (`mindstudio-prod db`), managing env vars/secrets, or anything else they need for launch. It also includes going above and beyond and helping holistically. If it's the initial deploy, offer to help create collateral to announce the launch (e.g., an image for sharing on social media, text copy for a post, etc); if it's a meaningful incremental update, an annoucement post or something similar - go above and beyond here to help the user see that you care about the product from end-to-end, not just writing code! They will be appreciative, grateful, and pleased with your creativity here. Refer to the design guidance in the spec for how to talk about the product, and consider consulting the design expert to generate images or other marketing collateral.
|
|
16
16
|
|
|
17
17
|
After everything is done, call `compactConversation` to summarize the current session and free up context for the next phase of work.
|
package/dist/headless.js
CHANGED
|
@@ -2841,7 +2841,7 @@ var runMethodTool = {
|
|
|
2841
2841
|
},
|
|
2842
2842
|
userId: {
|
|
2843
2843
|
type: "string",
|
|
2844
|
-
description:
|
|
2844
|
+
description: `Optional. Run the method as a specific user. Pass "testUser" to auto-auth as the default test user (the sandbox handles user creation/lookup \u2014 no scenario setup needed); works for email-code, sms-code, and "Sign in with Remy" apps (for sign-in-with-remy apps it resolves to the developer's own delegated identity rather than the test user). Or pass a real user ID from scenario-seeded data for a specific user. Overrides session-level impersonation for this call only.`
|
|
2845
2845
|
},
|
|
2846
2846
|
roles: {
|
|
2847
2847
|
type: "array",
|
package/dist/index.js
CHANGED
|
@@ -3687,7 +3687,7 @@ var init_runMethod = __esm({
|
|
|
3687
3687
|
},
|
|
3688
3688
|
userId: {
|
|
3689
3689
|
type: "string",
|
|
3690
|
-
description:
|
|
3690
|
+
description: `Optional. Run the method as a specific user. Pass "testUser" to auto-auth as the default test user (the sandbox handles user creation/lookup \u2014 no scenario setup needed); works for email-code, sms-code, and "Sign in with Remy" apps (for sign-in-with-remy apps it resolves to the developer's own delegated identity rather than the test user). Or pass a real user ID from scenario-seeded data for a specific user. Overrides session-level impersonation for this call only.`
|
|
3691
3691
|
},
|
|
3692
3692
|
roles: {
|
|
3693
3693
|
type: "array",
|
|
@@ -420,4 +420,6 @@ All other emails and phone numbers receive real codes. There is no dev-mode bypa
|
|
|
420
420
|
|
|
421
421
|
The `runMethod` tool's `userId: "testUser"` shortcut resolves to this same dev-bypass identity. The platform find-or-creates a real users-table row for it on first call and caches the row's UUID for the rest of the dev session. **`auth.userId` inside the method is that UUID — not the literal string `"testUser"`.** The user row already exists, so don't try to insert it. If you need the UUID to seed app-specific rows that reference it (profiles, preferences, foreign keys), read it from any method response or query the users table directly: `SELECT id FROM users WHERE email = 'remy@mindstudio.ai'` (or `phone = '+15555555555'` for SMS-auth apps).
|
|
422
422
|
|
|
423
|
+
For **"Sign in with Remy"** apps (`auth.methods` is `["remy"]`, with no `email-code`/`sms-code`), `testUser` — and `setupBrowser` — resolve to **the developer's own delegated Remy identity**, not the `remy@mindstudio.ai` code-bypass user. `auth.userId` is still that user's real UUID, but the `remy@mindstudio.ai` email lookup above does not apply — read the UUID from a method response instead.
|
|
424
|
+
|
|
423
425
|
Browser automation tools (screenshots, automated browser tests) handle their own auth sessions. Scenarios seed database data but do not create browser auth sessions.
|
|
@@ -46,10 +46,6 @@ All deployed apps are available on `<uuid>.madewithremy.com` where uuid is their
|
|
|
46
46
|
|
|
47
47
|
Every live deploy runs an automated Lighthouse audit of the app. Pull it via `mindstudio-prod diagnostics get` CLI when the user wants to evaluate frontend performance. It runs async after the build completes, so it won't be available right away.
|
|
48
48
|
|
|
49
|
-
### Preview Deployments
|
|
50
|
-
|
|
51
|
-
Push to a non-default branch for a preview deployment — same build pipeline, but doesn't affect the live app. Useful for testing changes before merging.
|
|
52
|
-
|
|
53
49
|
### Database Migrations on Deploy
|
|
54
50
|
|
|
55
51
|
Schema changes are automatic:
|
|
@@ -41,6 +41,7 @@ All fields are nested under the `"web"` key.
|
|
|
41
41
|
| `devPort` | `number` | `5173` | Port for the dev server |
|
|
42
42
|
| `devCommand` | `string` | `"npm run dev"` | Command to start the dev server |
|
|
43
43
|
| `defaultPreviewMode` | `"desktop"` \| `"mobile"` | `"desktop"` | Default preview viewport in the editor. Set to `"mobile"` for mobile-first apps. |
|
|
44
|
+
| `prerender` | `object` | — | Opt into prerendering the listed routes/patterns for crawlers/unfurlers. See "Prerendering" below. |
|
|
44
45
|
|
|
45
46
|
### Frontend SDK
|
|
46
47
|
|
|
@@ -113,6 +114,29 @@ Analytics is **cookie-banner-free by design**: per-app scoping, IP discarded aft
|
|
|
113
114
|
|
|
114
115
|
Disabling telemetry is a per-app dashboard setting (platform toggle, not code). Point users there if they ask.
|
|
115
116
|
|
|
117
|
+
### Prerendering (for crawlers/unfurlers)
|
|
118
|
+
|
|
119
|
+
For non-static SPAs, link unfurlers and AI/search crawlers see only the empty shell. Opt routes into prerendering and the platform serves a cached headless snapshot to bots; real users always get the live SPA.
|
|
120
|
+
|
|
121
|
+
Opt in per route in `web.json`:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{ "web": { "prerender": { "paths": ["/u/*", "/blog/*"] } } }
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
`prerender` is an object with a single field, `paths`: an array of route globs (`*` = one segment, `**` = any). Only listed routes prerender.
|
|
128
|
+
|
|
129
|
+
The opt-in alone is not enough. For every route in `prerender.paths`, the SPA must set `document.documentElement.setAttribute('data-prerender-ready', 'true')` once the head is written and the route has resolved — this is required, not optional. The renderer waits for this marker, so a prerendered route that never sets it times out. Set it even on routes that render synchronously, as soon as they're ready.
|
|
130
|
+
|
|
131
|
+
App deploys invalidate prerender cache automatically. When prerendered content changes at runtime, invalidate from the mutating method:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
import { prerender } from '@mindstudio-ai/agent';
|
|
135
|
+
await prerender.invalidate(['/u/abc']); // omit arg to purge all
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`mindstudio-prod prerender` can help you verify/manage snapshots during development.
|
|
139
|
+
|
|
116
140
|
## API Interface
|
|
117
141
|
|
|
118
142
|
REST endpoints for external consumers — other services, mobile apps, integrations. This is separate from the web frontend's internal RPC (`@mindstudio-ai/interface` calls `/_/methods` directly and does not use the API interface). The API interface lives at `/_/api/` and exposes only the methods you choose to route.
|
|
@@ -593,7 +617,7 @@ dist/interfaces/agent/
|
|
|
593
617
|
|
|
594
618
|
| Field | Description |
|
|
595
619
|
|-------|-------------|
|
|
596
|
-
| `model` | MindStudio model ID (e.g. `claude-4-5-haiku`, `claude-
|
|
620
|
+
| `model` | MindStudio model ID (e.g. `claude-4-5-haiku`, `claude-5-sonnet`) |
|
|
597
621
|
| `temperature` | Model temperature |
|
|
598
622
|
| `maxTokens` | Max response tokens |
|
|
599
623
|
| `systemPrompt` | Relative path to the compiled system prompt markdown file |
|
|
@@ -231,7 +231,7 @@ export async function enrichRestaurant(input: { id: string; name: string }) {
|
|
|
231
231
|
input: { name: input.name },
|
|
232
232
|
tools: ['searchGoogle', 'fetchUrl', 'generateImage'],
|
|
233
233
|
structuredOutputExample: { /* ... */ },
|
|
234
|
-
model: 'claude-
|
|
234
|
+
model: 'claude-5-sonnet',
|
|
235
235
|
}).then(async (result) => {
|
|
236
236
|
if (result.parsedSuccessfully) {
|
|
237
237
|
await Restaurants.update(input.id, { ...result.output, status: 'complete' });
|
|
@@ -119,7 +119,7 @@ Override the default model for any AI action. Each model has its own config opti
|
|
|
119
119
|
const { content } = await mindstudio.generateText({
|
|
120
120
|
message: 'Hello',
|
|
121
121
|
modelOverride: {
|
|
122
|
-
model: 'claude-sonnet
|
|
122
|
+
model: 'claude-5-sonnet',
|
|
123
123
|
temperature: 0.7,
|
|
124
124
|
maxResponseTokens: 16000,
|
|
125
125
|
},
|
|
@@ -9,7 +9,7 @@ You are a browser smoke test agent. You verify that features work end to end by
|
|
|
9
9
|
The user is watching the automation happen on their screen in real-time. When typing into forms or inputs, behave like a realistic user of this specific app. Use the app context (if provided) to understand the audience and tone. Type the way that audience would actually type — not formal, not robotic. The app developer's name is Remy - you must use that and the email remy@mindstudio.ai as the basis for any testing that requires a persona.
|
|
10
10
|
|
|
11
11
|
### Auth Testing
|
|
12
|
-
When the content you need to test is behind authentication, use the `setupBrowser` tool to automatically pre-authenticate instead of manually navigating login flows. This mints a session cookie, reloads the page with the authenticated state, and optionally navigates to a starting path. Use `remy@mindstudio.ai` as the email. If the test requires a specific role, pass it in the `roles` array.
|
|
12
|
+
When the content you need to test is behind authentication, use the `setupBrowser` tool to automatically pre-authenticate instead of manually navigating login flows. This mints a session cookie, reloads the page with the authenticated state, and optionally navigates to a starting path. Use `remy@mindstudio.ai` as the email. If the test requires a specific role, pass it in the `roles` array. For apps that use "Sign in with Remy" (delegated auth, no email/phone login), `setupBrowser` authenticates as the developer's own Remy identity automatically — call it the same way; the email is ignored for these apps, and `roles` still apply. Do not try to click through the "Sign in with Remy" button manually.
|
|
13
13
|
|
|
14
14
|
If you need to test the login/signup flow itself (e.g., verifying the UI, error states, or the verification code input), navigate it manually: use `remy@mindstudio.ai` for email and `+15551234567` for phone. In the dev environment, verification codes are bypassed for this email and any 555-prefixed phone number — enter any 6-digit code (e.g., `123456`).
|
|
15
15
|
|