@mindstudio-ai/remy 0.1.129 → 0.1.131
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 +27 -14
- package/dist/index.js +27 -14
- package/dist/subagents/productVision/prompt.md +1 -1
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -2823,6 +2823,7 @@ Current date: ${dateStr}`;
|
|
|
2823
2823
|
let turns = 0;
|
|
2824
2824
|
const run = async () => {
|
|
2825
2825
|
const historyLen = (history ?? []).length;
|
|
2826
|
+
const subAgentMessages = /* @__PURE__ */ new Map();
|
|
2826
2827
|
const messages = [
|
|
2827
2828
|
...history ?? [],
|
|
2828
2829
|
{ role: "user", content: task }
|
|
@@ -3015,7 +3016,13 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3015
3016
|
name: tc.name,
|
|
3016
3017
|
result: line
|
|
3017
3018
|
});
|
|
3018
|
-
result = await executeTool2(
|
|
3019
|
+
result = await executeTool2(
|
|
3020
|
+
tc.name,
|
|
3021
|
+
input,
|
|
3022
|
+
tc.id,
|
|
3023
|
+
onLog,
|
|
3024
|
+
subAgentMessages
|
|
3025
|
+
);
|
|
3019
3026
|
}
|
|
3020
3027
|
safeSettle(result, result.startsWith("Error"));
|
|
3021
3028
|
} catch (err) {
|
|
@@ -3074,6 +3081,10 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3074
3081
|
block.result = r.result;
|
|
3075
3082
|
block.isError = r.isError;
|
|
3076
3083
|
block.completedAt = Date.now();
|
|
3084
|
+
const innerMsgs = subAgentMessages.get(r.id);
|
|
3085
|
+
if (innerMsgs) {
|
|
3086
|
+
block.subAgentMessages = innerMsgs;
|
|
3087
|
+
}
|
|
3077
3088
|
}
|
|
3078
3089
|
messages.push({
|
|
3079
3090
|
role: "user",
|
|
@@ -4542,12 +4553,18 @@ var designExpertTool = {
|
|
|
4542
4553
|
history: history.length > 0 ? history : void 0,
|
|
4543
4554
|
tools: DESIGN_EXPERT_TOOLS,
|
|
4544
4555
|
externalTools: /* @__PURE__ */ new Set(),
|
|
4545
|
-
executeTool: (name, input2, toolCallId, onLog) => {
|
|
4556
|
+
executeTool: (name, input2, toolCallId, onLog, sams) => {
|
|
4557
|
+
const childCtx = toolCallId ? { ...deriveContext(context, toolCallId), subAgentMessages: sams } : { ...context, subAgentMessages: sams };
|
|
4546
4558
|
if (COMMON_READ_TOOL_NAMES.has(name)) {
|
|
4547
|
-
const childCtx = toolCallId ? deriveContext(context, toolCallId) : context;
|
|
4548
4559
|
return executeTool(name, input2, childCtx);
|
|
4549
4560
|
}
|
|
4550
|
-
return executeDesignExpertTool(
|
|
4561
|
+
return executeDesignExpertTool(
|
|
4562
|
+
name,
|
|
4563
|
+
input2,
|
|
4564
|
+
childCtx,
|
|
4565
|
+
toolCallId,
|
|
4566
|
+
onLog
|
|
4567
|
+
);
|
|
4551
4568
|
},
|
|
4552
4569
|
apiConfig: context.apiConfig,
|
|
4553
4570
|
model: context.model,
|
|
@@ -4685,15 +4702,15 @@ ${unifiedDiff(filePath, oldContent, "")}`;
|
|
|
4685
4702
|
|
|
4686
4703
|
We are building the pitch deck for the app. Using the provided <pitch_content>, as well as the app's spec data, think about what would make a compelling, interactive, self-contained horizontally-scrolling HTML slide deck for this product. Keep it simple, clean, powerful. Giant text, large logo, big, bold stats and claims. Edit the content as necessary to create the most impactful, bold, and beautiful slides. This should not feel like an essay, and it should not feel like a landing page \u2014 it should feel like a modern interactive presentation that leaves the user wowed by the product and excited about its future.
|
|
4687
4704
|
|
|
4688
|
-
Use <current_deck> as your starting point and replace or update the content as needed, maintaining the bones of the presentation scaffolding.
|
|
4705
|
+
Use <current_deck> as your starting point and replace or update the content as needed, maintaining the bones of the presentation scaffolding. Always keep the progress bar, chevron navigation, and keyboard navigation - they are part of the scaffold.
|
|
4689
4706
|
|
|
4690
4707
|
### Rules
|
|
4691
4708
|
- The deck must be a single HTML file \u2014 it will be rendered in an iframe.
|
|
4692
4709
|
- Must look beautiful on desktop and mobile.
|
|
4693
|
-
- Animation between slides must be seamless, no flicker or flashing.
|
|
4710
|
+
- Animation between slides must be seamless, no flicker or flashing. For reveal animations: hide elements with CSS \`opacity: 0\` only (no transform in CSS). Let GSAP handle transforms via inline styles and never use \`clearProps\`.
|
|
4694
4711
|
- Be bold and impactful.
|
|
4695
|
-
- 6-8 slides max. No fluff, just impact.
|
|
4696
4712
|
- Code must be clean, bug free, and easy to parse. Use GSAP for animations.
|
|
4713
|
+
- Keep the progress bar and edge chevrons from the shell \u2014 they are part of the navigation UX.
|
|
4697
4714
|
|
|
4698
4715
|
Respond only with the complete HTML file and absolutely no other text. Your response will be written directly to an html file.`;
|
|
4699
4716
|
const result = await designExpertTool.execute({ task }, context);
|
|
@@ -4701,12 +4718,8 @@ Respond only with the complete HTML file and absolutely no other text. Your resp
|
|
|
4701
4718
|
/```(?:html|wireframe)\n([\s\S]*?)```/
|
|
4702
4719
|
);
|
|
4703
4720
|
const html = htmlMatch ? htmlMatch[1].trim() : result;
|
|
4704
|
-
const oldContent = fs16.existsSync(filePath) ? fs16.readFileSync(filePath, "utf-8") : "";
|
|
4705
4721
|
fs16.writeFileSync(filePath, html, "utf-8");
|
|
4706
|
-
|
|
4707
|
-
const label = oldContent ? "Wrote" : "Created";
|
|
4708
|
-
return `${label} ${filePath} (${lineCount} lines)
|
|
4709
|
-
${unifiedDiff(filePath, oldContent, html)}`;
|
|
4722
|
+
return `Pitch deck written successfully.`;
|
|
4710
4723
|
} catch (err) {
|
|
4711
4724
|
return `Error generating pitch deck: ${err.message}`;
|
|
4712
4725
|
}
|
|
@@ -4764,8 +4777,8 @@ var productVisionTool = {
|
|
|
4764
4777
|
history: history.length > 0 ? history : void 0,
|
|
4765
4778
|
tools: VISION_TOOLS,
|
|
4766
4779
|
externalTools: /* @__PURE__ */ new Set(),
|
|
4767
|
-
executeTool: (name, input2, toolCallId) => {
|
|
4768
|
-
const childCtx = toolCallId ? deriveContext(context, toolCallId) : context;
|
|
4780
|
+
executeTool: (name, input2, toolCallId, _onLog, sams) => {
|
|
4781
|
+
const childCtx = toolCallId ? { ...deriveContext(context, toolCallId), subAgentMessages: sams } : { ...context, subAgentMessages: sams };
|
|
4769
4782
|
if (COMMON_READ_TOOL_NAMES.has(name)) {
|
|
4770
4783
|
return executeTool(name, input2, childCtx);
|
|
4771
4784
|
}
|
package/dist/index.js
CHANGED
|
@@ -2536,6 +2536,7 @@ Current date: ${dateStr}`;
|
|
|
2536
2536
|
let turns = 0;
|
|
2537
2537
|
const run = async () => {
|
|
2538
2538
|
const historyLen = (history ?? []).length;
|
|
2539
|
+
const subAgentMessages = /* @__PURE__ */ new Map();
|
|
2539
2540
|
const messages = [
|
|
2540
2541
|
...history ?? [],
|
|
2541
2542
|
{ role: "user", content: task }
|
|
@@ -2728,7 +2729,13 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
2728
2729
|
name: tc.name,
|
|
2729
2730
|
result: line
|
|
2730
2731
|
});
|
|
2731
|
-
result = await executeTool2(
|
|
2732
|
+
result = await executeTool2(
|
|
2733
|
+
tc.name,
|
|
2734
|
+
input,
|
|
2735
|
+
tc.id,
|
|
2736
|
+
onLog,
|
|
2737
|
+
subAgentMessages
|
|
2738
|
+
);
|
|
2732
2739
|
}
|
|
2733
2740
|
safeSettle(result, result.startsWith("Error"));
|
|
2734
2741
|
} catch (err) {
|
|
@@ -2787,6 +2794,10 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
2787
2794
|
block.result = r.result;
|
|
2788
2795
|
block.isError = r.isError;
|
|
2789
2796
|
block.completedAt = Date.now();
|
|
2797
|
+
const innerMsgs = subAgentMessages.get(r.id);
|
|
2798
|
+
if (innerMsgs) {
|
|
2799
|
+
block.subAgentMessages = innerMsgs;
|
|
2800
|
+
}
|
|
2790
2801
|
}
|
|
2791
2802
|
messages.push({
|
|
2792
2803
|
role: "user",
|
|
@@ -4495,12 +4506,18 @@ Visual design expert. Describe the situation and what you need \u2014 the agent
|
|
|
4495
4506
|
history: history.length > 0 ? history : void 0,
|
|
4496
4507
|
tools: DESIGN_EXPERT_TOOLS,
|
|
4497
4508
|
externalTools: /* @__PURE__ */ new Set(),
|
|
4498
|
-
executeTool: (name, input2, toolCallId, onLog) => {
|
|
4509
|
+
executeTool: (name, input2, toolCallId, onLog, sams) => {
|
|
4510
|
+
const childCtx = toolCallId ? { ...deriveContext(context, toolCallId), subAgentMessages: sams } : { ...context, subAgentMessages: sams };
|
|
4499
4511
|
if (COMMON_READ_TOOL_NAMES.has(name)) {
|
|
4500
|
-
const childCtx = toolCallId ? deriveContext(context, toolCallId) : context;
|
|
4501
4512
|
return executeTool(name, input2, childCtx);
|
|
4502
4513
|
}
|
|
4503
|
-
return executeDesignExpertTool(
|
|
4514
|
+
return executeDesignExpertTool(
|
|
4515
|
+
name,
|
|
4516
|
+
input2,
|
|
4517
|
+
childCtx,
|
|
4518
|
+
toolCallId,
|
|
4519
|
+
onLog
|
|
4520
|
+
);
|
|
4504
4521
|
},
|
|
4505
4522
|
apiConfig: context.apiConfig,
|
|
4506
4523
|
model: context.model,
|
|
@@ -4642,15 +4659,15 @@ ${unifiedDiff(filePath, oldContent, "")}`;
|
|
|
4642
4659
|
|
|
4643
4660
|
We are building the pitch deck for the app. Using the provided <pitch_content>, as well as the app's spec data, think about what would make a compelling, interactive, self-contained horizontally-scrolling HTML slide deck for this product. Keep it simple, clean, powerful. Giant text, large logo, big, bold stats and claims. Edit the content as necessary to create the most impactful, bold, and beautiful slides. This should not feel like an essay, and it should not feel like a landing page \u2014 it should feel like a modern interactive presentation that leaves the user wowed by the product and excited about its future.
|
|
4644
4661
|
|
|
4645
|
-
Use <current_deck> as your starting point and replace or update the content as needed, maintaining the bones of the presentation scaffolding.
|
|
4662
|
+
Use <current_deck> as your starting point and replace or update the content as needed, maintaining the bones of the presentation scaffolding. Always keep the progress bar, chevron navigation, and keyboard navigation - they are part of the scaffold.
|
|
4646
4663
|
|
|
4647
4664
|
### Rules
|
|
4648
4665
|
- The deck must be a single HTML file \u2014 it will be rendered in an iframe.
|
|
4649
4666
|
- Must look beautiful on desktop and mobile.
|
|
4650
|
-
- Animation between slides must be seamless, no flicker or flashing.
|
|
4667
|
+
- Animation between slides must be seamless, no flicker or flashing. For reveal animations: hide elements with CSS \`opacity: 0\` only (no transform in CSS). Let GSAP handle transforms via inline styles and never use \`clearProps\`.
|
|
4651
4668
|
- Be bold and impactful.
|
|
4652
|
-
- 6-8 slides max. No fluff, just impact.
|
|
4653
4669
|
- Code must be clean, bug free, and easy to parse. Use GSAP for animations.
|
|
4670
|
+
- Keep the progress bar and edge chevrons from the shell \u2014 they are part of the navigation UX.
|
|
4654
4671
|
|
|
4655
4672
|
Respond only with the complete HTML file and absolutely no other text. Your response will be written directly to an html file.`;
|
|
4656
4673
|
const result = await designExpertTool.execute({ task }, context);
|
|
@@ -4658,12 +4675,8 @@ Respond only with the complete HTML file and absolutely no other text. Your resp
|
|
|
4658
4675
|
/```(?:html|wireframe)\n([\s\S]*?)```/
|
|
4659
4676
|
);
|
|
4660
4677
|
const html = htmlMatch ? htmlMatch[1].trim() : result;
|
|
4661
|
-
const oldContent = fs14.existsSync(filePath) ? fs14.readFileSync(filePath, "utf-8") : "";
|
|
4662
4678
|
fs14.writeFileSync(filePath, html, "utf-8");
|
|
4663
|
-
|
|
4664
|
-
const label = oldContent ? "Wrote" : "Created";
|
|
4665
|
-
return `${label} ${filePath} (${lineCount} lines)
|
|
4666
|
-
${unifiedDiff(filePath, oldContent, html)}`;
|
|
4679
|
+
return `Pitch deck written successfully.`;
|
|
4667
4680
|
} catch (err) {
|
|
4668
4681
|
return `Error generating pitch deck: ${err.message}`;
|
|
4669
4682
|
}
|
|
@@ -4756,8 +4769,8 @@ var init_productVision = __esm({
|
|
|
4756
4769
|
history: history.length > 0 ? history : void 0,
|
|
4757
4770
|
tools: VISION_TOOLS,
|
|
4758
4771
|
externalTools: /* @__PURE__ */ new Set(),
|
|
4759
|
-
executeTool: (name, input2, toolCallId) => {
|
|
4760
|
-
const childCtx = toolCallId ? deriveContext(context, toolCallId) : context;
|
|
4772
|
+
executeTool: (name, input2, toolCallId, _onLog, sams) => {
|
|
4773
|
+
const childCtx = toolCallId ? { ...deriveContext(context, toolCallId), subAgentMessages: sams } : { ...context, subAgentMessages: sams };
|
|
4761
4774
|
if (COMMON_READ_TOOL_NAMES.has(name)) {
|
|
4762
4775
|
return executeTool(name, input2, childCtx);
|
|
4763
4776
|
}
|
|
@@ -88,7 +88,7 @@ Common operations:
|
|
|
88
88
|
|
|
89
89
|
For each new roadmap item:
|
|
90
90
|
- **name** — short, exciting, user-facing. No technical jargon.
|
|
91
|
-
- **description** — 1-
|
|
91
|
+
- **description** — 1 sentence, high-level elevator pitch/teaser for the feature. Used as a subtitle when displaying roadmap items in cards.
|
|
92
92
|
- **effort** — `quick`, `small`, `medium`, or `large`
|
|
93
93
|
- **body** — a structured MSFM document - keep it brief and focused on the big picture, it will be filled in later:
|
|
94
94
|
|