@mindstudio-ai/remy 0.1.50 → 0.1.52
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 +19 -0
- package/dist/automatedActions/buildFromRoadmap.md +15 -0
- package/dist/automatedActions/publish.md +16 -0
- package/dist/automatedActions/reviseFromAnnotatedImage.md +5 -0
- package/dist/automatedActions/sync.md +23 -0
- package/dist/headless.js +18 -1
- package/dist/index.js +18 -1
- package/dist/prompt/static/authoring.md +1 -1
- package/dist/prompt/static/team.md +3 -1
- package/dist/subagents/designExpert/prompts/animation.md +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: buildFromInitialSpec
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
This is an automated action triggered by the user pressing "Build" in the editor after reviewing the spec.
|
|
6
|
+
|
|
7
|
+
The user has reviewed the spec and is ready to build.
|
|
8
|
+
|
|
9
|
+
Think about your approach and then get a quick sanity check from `codeSanityCheck` to make sure you aren't missing anything.
|
|
10
|
+
|
|
11
|
+
Then, build everything in one turn: methods, tables, interfaces, manifest updates, and scenarios, using the spec as the master plan.
|
|
12
|
+
|
|
13
|
+
When code generation is complete, verify your work:
|
|
14
|
+
- First, run use `runScenario` to seed test data, then use `runMethod` to confirm a method works
|
|
15
|
+
- If the app has a web frontend, check the browser logs to make sure there are no errors rendering it.
|
|
16
|
+
- Ask the `visualDesignExpert` to take a screenshot and verity that the visual design looks correct. Fix any issues it flags - we want the user's first time seeing the finished product to truly wow them.
|
|
17
|
+
- Finally, use `runAutomatedBrowserTest` to smoke-test the main UI flow. The dev database is a disposable snapshot, so don't worry about being destructive. Fix any errors before finishing.
|
|
18
|
+
|
|
19
|
+
When everything is working, use `productVision` to mark the MVP roadmap item as done, then call `setProjectOnboardingState({ state: "onboardingFinished" })`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: buildFromRoadmap
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
This is an automated action triggered by the user pressing "Build Now" on the roadmap item {{path}}
|
|
6
|
+
|
|
7
|
+
First, review the specific item and think about how it fits with the existing spec and the existing codebase.
|
|
8
|
+
|
|
9
|
+
Then, ask the user clarifying questions about anything that is ambiguous or requires additional input. Consult the team for any design work, architecture review, or SDK guidance - even if they're just quick questions (that's what the team is there for - they want to help and feel valuable!).
|
|
10
|
+
|
|
11
|
+
Then, put together a plan to build out the feature. Present the plan to the user for their approval.
|
|
12
|
+
|
|
13
|
+
When they've approved the plan, be sure to update the spec first - remember, the spec is the source of truth about the product. Then, build everything in one turn, using the spec as the master plan.
|
|
14
|
+
|
|
15
|
+
When you're finished, verify your work, then tell`productVision` what was done so it can update the roadmap to reflect the progress. Give the user a summary of what was done.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: publish
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
This is an automated action triggered by the user pressing "Publish" in the editor.
|
|
6
|
+
|
|
7
|
+
The user wants to deploy their app. Pushing to the `main` branch triggers a production deploy.
|
|
8
|
+
|
|
9
|
+
Review the current state of the working tree — what has changed since the last commit, what's been committed since the last push, and the overall shape of recent work. Write a user-friendly changelog with `presentPublishPlan` — summarize what changed in plain language ("added vendor approval workflow", "fixed invoice totals", "updated the dashboard layout"). Reference specific code or file paths only when it helps clarity. This is what the user will see before deploying.
|
|
10
|
+
|
|
11
|
+
If approved:
|
|
12
|
+
- Stage and commit any uncommitted changes with a clean, descriptive commit message
|
|
13
|
+
- Push to main
|
|
14
|
+
- Let the user know their app is deploying
|
|
15
|
+
|
|
16
|
+
If dismissed, acknowledge and do nothing.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: sync
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
This is an automated action triggered by the user pressing "Sync" in the editor.
|
|
6
|
+
|
|
7
|
+
The user has manually edited files since the last sync. The `refs/sync-point` git ref marks the last known-good sync state. It's created using a temporary git index that captures the full working tree (including unstaged changes) as a tree object — so it represents exactly what the files looked like at sync time, not just what was committed.
|
|
8
|
+
|
|
9
|
+
To see what the user changed, run: `git diff refs/sync-point -- src/ dist/`
|
|
10
|
+
|
|
11
|
+
This compares the sync-point tree against the current working tree. Do not add `HEAD` or any other ref — the command as written diffs directly against the working tree, which is what you want.
|
|
12
|
+
|
|
13
|
+
In the diff output: lines prefixed with `-` are what was in the file at last sync. Lines prefixed with `+` are the user's current edits. Sync should bring the other side in line with the `+` side.
|
|
14
|
+
|
|
15
|
+
Analyze the changes and write a sync plan with `presentSyncPlan` — a clear markdown summary of what changed and what you intend to update. Write it for a human: describe changes in plain language ("renamed the greeting field", "added a note about error handling"), not as a list of file paths and code diffs. Reference specific code or file paths only when it helps clarity. The user will review and approve before you make changes.
|
|
16
|
+
|
|
17
|
+
If approved:
|
|
18
|
+
- If spec files (`src/`) changed, update the corresponding code in `dist/` to match
|
|
19
|
+
- If code files (`dist/`) changed, update the corresponding spec in `src/` to match
|
|
20
|
+
- If both changed, reconcile — spec is the source of truth for intent, but respect code changes that add implementation detail
|
|
21
|
+
- When all files are synced, call `clearSyncStatus`
|
|
22
|
+
|
|
23
|
+
If dismissed, acknowledge and do nothing.
|
package/dist/headless.js
CHANGED
|
@@ -406,6 +406,8 @@ ${isLspConfigured() ? `<typescript_lsp>
|
|
|
406
406
|
|
|
407
407
|
{{static/instructions.md}}
|
|
408
408
|
|
|
409
|
+
<!-- cache_breakpoint -->
|
|
410
|
+
|
|
409
411
|
<project_onboarding>
|
|
410
412
|
New projects progress through four onboarding states. The user might skip this entirely and jump straight into working on the existing scaffold (which defaults to onboardingFinished), but ideally new projects move through each phase:
|
|
411
413
|
|
|
@@ -2768,6 +2770,8 @@ function getBrowserAutomationPrompt() {
|
|
|
2768
2770
|
const appSpec = fs13.readFileSync("src/app.md", "utf-8").trim();
|
|
2769
2771
|
return `${BASE_PROMPT}
|
|
2770
2772
|
|
|
2773
|
+
<!-- cache_breakpoint -->
|
|
2774
|
+
|
|
2771
2775
|
<app_context>
|
|
2772
2776
|
${appSpec}
|
|
2773
2777
|
</app_context>`;
|
|
@@ -3570,6 +3574,7 @@ function getDesignExpertPrompt() {
|
|
|
3570
3574
|
"{{font_library}}",
|
|
3571
3575
|
getFontLibrarySample()
|
|
3572
3576
|
).replace("{{visual_design_references}}", getDesignReferencesSample()).replace("{{ui_case_studies}}", getUiInspirationSample());
|
|
3577
|
+
prompt += "\n\n<!-- cache_breakpoint -->";
|
|
3573
3578
|
if (specContext) {
|
|
3574
3579
|
prompt += `
|
|
3575
3580
|
|
|
@@ -3873,6 +3878,7 @@ function getProductVisionPrompt() {
|
|
|
3873
3878
|
const specContext = loadSpecContext();
|
|
3874
3879
|
const roadmapContext = loadRoadmapContext();
|
|
3875
3880
|
const parts = [BASE_PROMPT2, loadPlatformBrief()];
|
|
3881
|
+
parts.push("<!-- cache_breakpoint -->");
|
|
3876
3882
|
if (specContext) {
|
|
3877
3883
|
parts.push(specContext);
|
|
3878
3884
|
}
|
|
@@ -4050,6 +4056,7 @@ var codeSanityCheckTool = {
|
|
|
4050
4056
|
}
|
|
4051
4057
|
const specContext = loadSpecContext();
|
|
4052
4058
|
const parts = [BASE_PROMPT3, loadPlatformBrief()];
|
|
4059
|
+
parts.push("<!-- cache_breakpoint -->");
|
|
4053
4060
|
if (specContext) {
|
|
4054
4061
|
parts.push(specContext);
|
|
4055
4062
|
}
|
|
@@ -5280,7 +5287,17 @@ ${xmlParts}
|
|
|
5280
5287
|
);
|
|
5281
5288
|
}
|
|
5282
5289
|
let userMessage = parsed.text ?? "";
|
|
5283
|
-
|
|
5290
|
+
let resolved = null;
|
|
5291
|
+
try {
|
|
5292
|
+
resolved = resolveAction(userMessage);
|
|
5293
|
+
} catch (err) {
|
|
5294
|
+
emit(
|
|
5295
|
+
"completed",
|
|
5296
|
+
{ success: false, error: err.message || "Failed to resolve action" },
|
|
5297
|
+
requestId
|
|
5298
|
+
);
|
|
5299
|
+
return;
|
|
5300
|
+
}
|
|
5284
5301
|
if (resolved !== null) {
|
|
5285
5302
|
userMessage = resolved;
|
|
5286
5303
|
}
|
package/dist/index.js
CHANGED
|
@@ -2770,6 +2770,8 @@ function getBrowserAutomationPrompt() {
|
|
|
2770
2770
|
const appSpec = fs11.readFileSync("src/app.md", "utf-8").trim();
|
|
2771
2771
|
return `${BASE_PROMPT}
|
|
2772
2772
|
|
|
2773
|
+
<!-- cache_breakpoint -->
|
|
2774
|
+
|
|
2773
2775
|
<app_context>
|
|
2774
2776
|
${appSpec}
|
|
2775
2777
|
</app_context>`;
|
|
@@ -3685,6 +3687,7 @@ function getDesignExpertPrompt() {
|
|
|
3685
3687
|
"{{font_library}}",
|
|
3686
3688
|
getFontLibrarySample()
|
|
3687
3689
|
).replace("{{visual_design_references}}", getDesignReferencesSample()).replace("{{ui_case_studies}}", getUiInspirationSample());
|
|
3690
|
+
prompt += "\n\n<!-- cache_breakpoint -->";
|
|
3688
3691
|
if (specContext) {
|
|
3689
3692
|
prompt += `
|
|
3690
3693
|
|
|
@@ -4031,6 +4034,7 @@ function getProductVisionPrompt() {
|
|
|
4031
4034
|
const specContext = loadSpecContext();
|
|
4032
4035
|
const roadmapContext = loadRoadmapContext();
|
|
4033
4036
|
const parts = [BASE_PROMPT2, loadPlatformBrief()];
|
|
4037
|
+
parts.push("<!-- cache_breakpoint -->");
|
|
4034
4038
|
if (specContext) {
|
|
4035
4039
|
parts.push(specContext);
|
|
4036
4040
|
}
|
|
@@ -4243,6 +4247,7 @@ var init_codeSanityCheck = __esm({
|
|
|
4243
4247
|
}
|
|
4244
4248
|
const specContext = loadSpecContext();
|
|
4245
4249
|
const parts = [BASE_PROMPT3, loadPlatformBrief()];
|
|
4250
|
+
parts.push("<!-- cache_breakpoint -->");
|
|
4246
4251
|
if (specContext) {
|
|
4247
4252
|
parts.push(specContext);
|
|
4248
4253
|
}
|
|
@@ -5371,6 +5376,8 @@ ${isLspConfigured() ? `<typescript_lsp>
|
|
|
5371
5376
|
|
|
5372
5377
|
{{static/instructions.md}}
|
|
5373
5378
|
|
|
5379
|
+
<!-- cache_breakpoint -->
|
|
5380
|
+
|
|
5374
5381
|
<project_onboarding>
|
|
5375
5382
|
New projects progress through four onboarding states. The user might skip this entirely and jump straight into working on the existing scaffold (which defaults to onboardingFinished), but ideally new projects move through each phase:
|
|
5376
5383
|
|
|
@@ -5876,7 +5883,17 @@ ${xmlParts}
|
|
|
5876
5883
|
);
|
|
5877
5884
|
}
|
|
5878
5885
|
let userMessage = parsed.text ?? "";
|
|
5879
|
-
|
|
5886
|
+
let resolved = null;
|
|
5887
|
+
try {
|
|
5888
|
+
resolved = resolveAction(userMessage);
|
|
5889
|
+
} catch (err) {
|
|
5890
|
+
emit(
|
|
5891
|
+
"completed",
|
|
5892
|
+
{ success: false, error: err.message || "Failed to resolve action" },
|
|
5893
|
+
requestId
|
|
5894
|
+
);
|
|
5895
|
+
return;
|
|
5896
|
+
}
|
|
5880
5897
|
if (resolved !== null) {
|
|
5881
5898
|
userMessage = resolved;
|
|
5882
5899
|
}
|
|
@@ -19,7 +19,7 @@ The scaffold starts with these spec files that cover the full picture of the app
|
|
|
19
19
|
- **`src/interfaces/@brand/voice.md`** — voice and terminology: tone, error messages, word choices
|
|
20
20
|
- **`src/roadmap/`** — feature roadmap. One file per feature (`type: roadmap`). See "Roadmap" below.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
These are starting points, not constraints. Create as many spec files as the project needs — the `src/` folder is your workspace and every `.md` file in it becomes compilation context. If the app has substantial content (presentation slides, copy, lesson plans, menu items, quiz questions), put it in its own file (`src/content.md`, `src/slides.md`, `src/menu.md`, etc.) rather than cramming it into `app.md` or `web.md`. If the domain is complex, split `app.md` into multiple files by area (`src/billing.md`, `src/approvals.md`). Add interface specs for other interface types (`api.md`, `cron.md`, `agent.md`, etc.) if the app uses them. Organize however serves clarity — the platform reads the entire `src/` folder.
|
|
23
23
|
|
|
24
24
|
Users often care about look and feel as much as (or more than) underlying data structures. Don't treat the brand and interface specs as an afterthought — for many users, the visual identity and voice are the first things they want to get right.
|
|
25
25
|
|
|
@@ -16,6 +16,8 @@ The designer will return concrete resources: hex values, font names with CSS URL
|
|
|
16
16
|
|
|
17
17
|
When delegating, describe the design problem — where the asset will be used, what it needs to communicate, what the brand feels like. Do not specify technical details like image formats, pixel dimensions, generation techniques, or workarounds. The design expert makes those decisions.
|
|
18
18
|
|
|
19
|
+
Remember, the design agent starts from scratch each time - it has no history of previous messages you have sent it - so you need to make sure to provide all relevant context, including full context from its previous messages where it is relevant (e.g., "You proposed three different options [describe them in detail].... and the user has descided on XYZ...").
|
|
20
|
+
|
|
19
21
|
Always consult the design expert during intake and before building any new product features from the roadmap.
|
|
20
22
|
|
|
21
23
|
### Product Vision (`productVision`)
|
|
@@ -38,7 +40,7 @@ Always consult the code sanity check before writing code in initialCodegen with
|
|
|
38
40
|
|
|
39
41
|
### QA (`runAutomatedBrowserTest`)
|
|
40
42
|
|
|
41
|
-
For verifying complex stateful interactions: multi-step form submissions, auth flows, real-time updates, flows that require specific data/role setup. This spins up a full chrome browser automation — it's heavyweight. Do not use it for basic rendering or navigation checks. If you can verify something with a screenshot or by reading the code, do that instead. Run a scenario first to seed test data and set user roles. The user is able to watch QA work on their screen via a live browser preview - the cursor will move, type, etc - so you can also use this to demo functionality to the user and help them understand how to use their app.
|
|
43
|
+
For verifying complex stateful interactions: multi-step form submissions, auth flows, real-time updates, flows that require specific data/role setup. This spins up a full chrome browser automation — it's heavyweight. Do not use it for basic rendering or navigation checks. If you can verify something with a screenshot or by reading the code, do that instead. Run a scenario first to seed test data and set user roles. The user is able to watch QA work on their screen via a live browser preview - the cursor will move, type, etc - so you can also use this to demo functionality to the user and help them understand how to use their app. Don't tell the QA agent what values it should use for testing, it will figure that out on its own.
|
|
42
44
|
|
|
43
45
|
### Background Execution
|
|
44
46
|
|
|
@@ -7,7 +7,7 @@ There are two categories of animation and you should think of them separately:
|
|
|
7
7
|
- Design animations: think beautiful layout reveals, dramatic loading and success states for user onboarding, beautiful scroll-driven animations on a landing page. These are the place to show off - and if you're showing off you better get it right. Anything that looks dated or janky will be disappointing to the user. Done correctly, these animations are powerful and transformative - and when the design calls for it, you should take a risk and suggest something big, bold, and creative. Remember, the user can always modify or change things later. It's better to dream big and walk it back than to deliver something generic or bland.
|
|
8
8
|
|
|
9
9
|
### Patterns to Use
|
|
10
|
-
- CSS scroll-driven animations (`animation-timeline:
|
|
10
|
+
- CSS scroll-driven animations (`animation-timeline: view()`) (aka "scrollytelling"). Scroll driven animations that animate based on scrollport are very slick and look beautiful in landing pages. Think about how you can use them.
|
|
11
11
|
- Spring physics for natural-feeling motion
|
|
12
12
|
- Purposeful micro-interactions — scaling, color shifts, depth changes on hover/click
|
|
13
13
|
- Entrance reveals — content animating when it enters the view - can be powerful, but can very easily feel cheap if it is just sections of a page animating in on scroll, for example. Be very thoughtful and intentional when animating in this way.
|