@mindstudio-ai/remy 0.1.130 → 0.1.132

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
@@ -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(tc.name, input, tc.id, onLog);
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(name, input2, context, toolCallId, onLog);
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,14 +4702,13 @@ ${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. 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\`.
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\`. Use the existing scaffold, do not write your own transition logic or slide mechanics.
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.
4697
4713
  - Keep the progress bar and edge chevrons from the shell \u2014 they are part of the navigation UX.
4698
4714
 
@@ -4702,12 +4718,8 @@ Respond only with the complete HTML file and absolutely no other text. Your resp
4702
4718
  /```(?:html|wireframe)\n([\s\S]*?)```/
4703
4719
  );
4704
4720
  const html = htmlMatch ? htmlMatch[1].trim() : result;
4705
- const oldContent = fs16.existsSync(filePath) ? fs16.readFileSync(filePath, "utf-8") : "";
4706
4721
  fs16.writeFileSync(filePath, html, "utf-8");
4707
- const lineCount = html.split("\n").length;
4708
- const label = oldContent ? "Wrote" : "Created";
4709
- return `${label} ${filePath} (${lineCount} lines)
4710
- ${unifiedDiff(filePath, oldContent, html)}`;
4722
+ return `Pitch deck written successfully.`;
4711
4723
  } catch (err) {
4712
4724
  return `Error generating pitch deck: ${err.message}`;
4713
4725
  }
@@ -4765,8 +4777,8 @@ var productVisionTool = {
4765
4777
  history: history.length > 0 ? history : void 0,
4766
4778
  tools: VISION_TOOLS,
4767
4779
  externalTools: /* @__PURE__ */ new Set(),
4768
- executeTool: (name, input2, toolCallId) => {
4769
- 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 };
4770
4782
  if (COMMON_READ_TOOL_NAMES.has(name)) {
4771
4783
  return executeTool(name, input2, childCtx);
4772
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(tc.name, input, tc.id, onLog);
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(name, input2, context, toolCallId, onLog);
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,14 +4659,13 @@ ${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. 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\`.
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\`. Use the existing scaffold, do not write your own transition logic or slide mechanics.
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.
4654
4670
  - Keep the progress bar and edge chevrons from the shell \u2014 they are part of the navigation UX.
4655
4671
 
@@ -4659,12 +4675,8 @@ Respond only with the complete HTML file and absolutely no other text. Your resp
4659
4675
  /```(?:html|wireframe)\n([\s\S]*?)```/
4660
4676
  );
4661
4677
  const html = htmlMatch ? htmlMatch[1].trim() : result;
4662
- const oldContent = fs14.existsSync(filePath) ? fs14.readFileSync(filePath, "utf-8") : "";
4663
4678
  fs14.writeFileSync(filePath, html, "utf-8");
4664
- const lineCount = html.split("\n").length;
4665
- const label = oldContent ? "Wrote" : "Created";
4666
- return `${label} ${filePath} (${lineCount} lines)
4667
- ${unifiedDiff(filePath, oldContent, html)}`;
4679
+ return `Pitch deck written successfully.`;
4668
4680
  } catch (err) {
4669
4681
  return `Error generating pitch deck: ${err.message}`;
4670
4682
  }
@@ -4757,8 +4769,8 @@ var init_productVision = __esm({
4757
4769
  history: history.length > 0 ? history : void 0,
4758
4770
  tools: VISION_TOOLS,
4759
4771
  externalTools: /* @__PURE__ */ new Set(),
4760
- executeTool: (name, input2, toolCallId) => {
4761
- 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 };
4762
4774
  if (COMMON_READ_TOOL_NAMES.has(name)) {
4763
4775
  return executeTool(name, input2, childCtx);
4764
4776
  }
@@ -150,11 +150,14 @@ html, body {
150
150
 
151
151
  @media (max-width: 768px) {
152
152
  .slide { padding: 32px 24px; }
153
- .nav { bottom: 24px; }
154
153
  }
155
154
 
155
+ /* Reveal: elements with data-reveal start hidden, GSAP animates them in */
156
+ [data-reveal] { opacity: 0; }
157
+
156
158
  @media (prefers-reduced-motion: reduce) {
157
159
  *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
160
+ [data-reveal] { opacity: 1 !important; }
158
161
  }
159
162
  </style>
160
163
  </head>
@@ -165,18 +168,18 @@ html, body {
165
168
  <div class="deck" id="deck">
166
169
 
167
170
  <div class="slide slide-dark" data-index="0">
168
- <h1>Slide One</h1>
169
- <p>Placeholder subtitle text</p>
171
+ <h1 data-reveal>Slide One</h1>
172
+ <p data-reveal>Placeholder subtitle text</p>
170
173
  </div>
171
174
 
172
175
  <div class="slide slide-light" data-index="1">
173
- <h1 style="color:var(--text-dark)">Slide Two</h1>
174
- <p>Another placeholder</p>
176
+ <h1 data-reveal style="color:var(--text-dark)">Slide Two</h1>
177
+ <p data-reveal>Another placeholder</p>
175
178
  </div>
176
179
 
177
180
  <div class="slide slide-dark" data-index="2">
178
- <h1>Slide Three</h1>
179
- <p>Final placeholder</p>
181
+ <h1 data-reveal>Slide Three</h1>
182
+ <p data-reveal>Final placeholder</p>
180
183
  </div>
181
184
 
182
185
  </div>
@@ -204,6 +207,8 @@ html, body {
204
207
  const tapPrev = document.getElementById('tapPrev');
205
208
  const tapNext = document.getElementById('tapNext');
206
209
  const progress = document.getElementById('progress');
210
+ const chevronPrev = document.getElementById('chevronPrev');
211
+ const chevronNext = document.getElementById('chevronNext');
207
212
 
208
213
  // Build progress segments
209
214
  for (let i = 0; i < totalSlides; i++) {
@@ -226,15 +231,30 @@ html, body {
226
231
  chevronPrev.classList.toggle('hidden', current === 0);
227
232
  chevronNext.classList.toggle('hidden', current === totalSlides - 1);
228
233
 
229
- // Light/dark adjustment
230
- const isLight = slides[current].classList.contains('slide-light');
234
+ // Light/dark adjustment — checks class or data-theme attribute
235
+ const s = slides[current];
236
+ const isLight = s.classList.contains('slide-light') || s.classList.contains('s-light') || s.dataset.theme === 'light';
231
237
  progress.classList.toggle('light', isLight);
232
238
  chevronPrev.classList.toggle('light', isLight);
233
239
  chevronNext.classList.toggle('light', isLight);
234
240
  }
235
241
 
236
- const chevronPrev = document.getElementById('chevronPrev');
237
- const chevronNext = document.getElementById('chevronNext');
242
+ // Slide content reveal — called once per slide on first visit.
243
+ // Elements with [data-reveal] start hidden (CSS opacity:0) and
244
+ // animate in. Override this function to customize per-slide animations.
245
+ const revealed = new Set();
246
+ function revealSlide(index) {
247
+ if (revealed.has(index)) return;
248
+ revealed.add(index);
249
+ const els = slides[index].querySelectorAll('[data-reveal]');
250
+ els.forEach((el, i) => {
251
+ const delay = (parseFloat(el.dataset.reveal) || 0) + i * 0.04;
252
+ gsap.fromTo(el,
253
+ { opacity: 0, y: 16 },
254
+ { opacity: 1, y: 0, duration: 0.5, delay, ease: 'power2.out' }
255
+ );
256
+ });
257
+ }
238
258
 
239
259
  function goTo(index) {
240
260
  if (index === current || isAnimating || index < 0 || index >= totalSlides) return;
@@ -246,7 +266,10 @@ html, body {
246
266
  x: -current * window.innerWidth,
247
267
  duration: 0.4,
248
268
  ease: 'power2.inOut',
249
- onComplete: () => { isAnimating = false; }
269
+ onComplete: () => {
270
+ revealSlide(current);
271
+ isAnimating = false;
272
+ }
250
273
  });
251
274
  }
252
275
 
@@ -287,9 +310,11 @@ html, body {
287
310
  resizeTimer = setTimeout(() => gsap.set(deck, { x: -current * window.innerWidth }), 100);
288
311
  });
289
312
 
290
- // Init
313
+ // Init — first slide is visible immediately, no reveal animation
291
314
  gsap.set(deck, { x: 0 });
292
315
  updateNav();
316
+ revealed.add(0);
317
+ slides[0].querySelectorAll('[data-reveal]').forEach(el => { el.style.opacity = 1; });
293
318
  })();
294
319
  </script>
295
320
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/remy",
3
- "version": "0.1.130",
3
+ "version": "0.1.132",
4
4
  "description": "MindStudio coding agent",
5
5
  "repository": {
6
6
  "type": "git",