@mindstudio-ai/remy 0.1.153 → 0.1.155

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.
@@ -5,11 +5,11 @@
5
5
  This is an automated follow-up after the initial build. The code is written and verified. Now it's time to polish and finalize so we can deliver something beautiful and magical as the user's first experience with our work.
6
6
 
7
7
  ## Polishing
8
- Take a step back and do an explicit polish pass. Re-read the spec files and the design expert's guidance, then walk through each frontend file looking for design details that got skipped in the initial build: layout animations, transitions, hover states, micro-interactions, spring physics, entrance reveals, gesture handling, layout issues, responsiveness, and anything else. We need this to feel truly amazing and wow the user - it's worth it to take the time to get it right.
8
+ Take a step back and do an explicit polish pass focused on UX and interaction quality. Re-read the spec files and the design expert's guidance, then walk through each frontend file looking for behavioral details that got skipped in the initial build: layout animations, transitions, hover states, micro-interactions, spring physics, entrance reveals, gesture handling, responsiveness across breakpoints, focus and keyboard handling, and loading/empty/error states.
9
9
 
10
10
  The initial build prioritizes getting everything connected and functional, but this pass closes the gap between "it works" and "it feels great." In many ways this is *the* most important part of the initial build, as the user's first experience of the deliverable will set their expectations for every iteration that follows. Don't mess this up.
11
11
 
12
- When you have finished, ask the `visualDesignExpert` to take a screenshot and verify 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.
12
+ The visual assets — photography, generated images, brand colors, typography were already locked in upstream by the design expert during intake. Treat them as fixed inputs to this pass. Polish the *behavior* of the page, not the pixels of generated imagery.
13
13
 
14
14
  ## Finalizing
15
15
  When everything is working and polished:
package/dist/headless.js CHANGED
@@ -835,7 +835,7 @@ async function generateSummary(apiConfig, name, compactionPrompt, messagesToSumm
835
835
  let summaryText = "";
836
836
  const useMainCache = !!mainSystem;
837
837
  const system = useMainCache ? mainSystem : compactionPrompt;
838
- const tools2 = useMainCache ? mainTools ?? [] : [];
838
+ const tools2 = [];
839
839
  const userContent = useMainCache ? `${compactionPrompt}
840
840
 
841
841
  ---
@@ -2078,11 +2078,12 @@ ${unifiedDiff(input.path, content, updated)}`;
2078
2078
  import { spawn as spawn2 } from "child_process";
2079
2079
  var DEFAULT_TIMEOUT_MS = 12e4;
2080
2080
  var DEFAULT_MAX_LINES3 = 500;
2081
+ var MAX_OUTPUT_BYTES = 3e4;
2081
2082
  var bashTool = {
2082
2083
  clearable: true,
2083
2084
  definition: {
2084
2085
  name: "bash",
2085
- description: "Run a shell command and return stdout + stderr. 120-second timeout by default (configurable). Use for: npm install/build/test, git operations, tsc --noEmit, or any CLI tool. Prefer dedicated tools over bash when available (use grep instead of bash + rg, readFile instead of bash + cat). Output is truncated to 500 lines by default.",
2086
+ description: "Run a shell command and return stdout + stderr. 120-second timeout by default (configurable). Use for: npm install/build/test, git operations, tsc --noEmit, or any CLI tool. Prefer dedicated tools over bash when available (use grep instead of bash + rg, readFile instead of bash + cat). Output is truncated to 500 lines or 30KB, whichever comes first. If a command would emit a lot of data, narrow it down (grep, head/tail, --short flags) rather than reading everything.",
2086
2087
  inputSchema: {
2087
2088
  type: "object",
2088
2089
  properties: {
@@ -2138,12 +2139,32 @@ var bashTool = {
2138
2139
  }
2139
2140
  return;
2140
2141
  }
2141
- const lines = output.split("\n");
2142
- if (lines.length > maxLines) {
2142
+ const totalBytes = Buffer.byteLength(output, "utf-8");
2143
+ let truncated = output;
2144
+ let byteTruncated = false;
2145
+ if (totalBytes > MAX_OUTPUT_BYTES) {
2146
+ truncated = Buffer.from(output, "utf-8").subarray(0, MAX_OUTPUT_BYTES).toString("utf-8");
2147
+ byteTruncated = true;
2148
+ }
2149
+ const lines = truncated.split("\n");
2150
+ const lineTruncated = lines.length > maxLines;
2151
+ if (lineTruncated) {
2152
+ truncated = lines.slice(0, maxLines).join("\n");
2153
+ }
2154
+ if (byteTruncated || lineTruncated) {
2155
+ const reasons = [];
2156
+ if (lineTruncated) {
2157
+ reasons.push(`${maxLines} lines`);
2158
+ }
2159
+ if (byteTruncated) {
2160
+ reasons.push(
2161
+ `${(MAX_OUTPUT_BYTES / 1024).toFixed(0)}KB of ${(totalBytes / 1024).toFixed(0)}KB`
2162
+ );
2163
+ }
2143
2164
  resolve2(
2144
- lines.slice(0, maxLines).join("\n") + `
2165
+ truncated + `
2145
2166
 
2146
- (truncated at ${maxLines} lines of ${lines.length} total \u2014 increase maxLines to see more)`
2167
+ (truncated at ${reasons.join(" / ")} \u2014 narrow the command (grep, head/tail, smaller paths) instead of increasing limits)`
2147
2168
  );
2148
2169
  } else {
2149
2170
  resolve2(output);
@@ -6057,21 +6078,7 @@ function resolveUniqueFilename(name) {
6057
6078
  }
6058
6079
  return `${base}-${counter}${ext}`;
6059
6080
  }
6060
- var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([
6061
- ".png",
6062
- ".jpg",
6063
- ".jpeg",
6064
- ".gif",
6065
- ".webp",
6066
- ".svg",
6067
- ".bmp",
6068
- ".ico",
6069
- ".tiff",
6070
- ".tif",
6071
- ".avif",
6072
- ".heic",
6073
- ".heif"
6074
- ]);
6081
+ var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".gif", ".webp"]);
6075
6082
  function isImageAttachment(att) {
6076
6083
  const name = att.filename || filenameFromUrl(att.url);
6077
6084
  return IMAGE_EXTENSIONS.has(extname(name).toLowerCase());
package/dist/index.js CHANGED
@@ -1550,7 +1550,7 @@ async function generateSummary(apiConfig, name, compactionPrompt, messagesToSumm
1550
1550
  let summaryText = "";
1551
1551
  const useMainCache = !!mainSystem;
1552
1552
  const system = useMainCache ? mainSystem : compactionPrompt;
1553
- const tools2 = useMainCache ? mainTools ?? [] : [];
1553
+ const tools2 = [];
1554
1554
  const userContent = useMainCache ? `${compactionPrompt}
1555
1555
 
1556
1556
  ---
@@ -2264,17 +2264,18 @@ ${unifiedDiff(input.path, content, updated)}`;
2264
2264
 
2265
2265
  // src/tools/code/bash.ts
2266
2266
  import { spawn as spawn2 } from "child_process";
2267
- var DEFAULT_TIMEOUT_MS, DEFAULT_MAX_LINES3, bashTool;
2267
+ var DEFAULT_TIMEOUT_MS, DEFAULT_MAX_LINES3, MAX_OUTPUT_BYTES, bashTool;
2268
2268
  var init_bash = __esm({
2269
2269
  "src/tools/code/bash.ts"() {
2270
2270
  "use strict";
2271
2271
  DEFAULT_TIMEOUT_MS = 12e4;
2272
2272
  DEFAULT_MAX_LINES3 = 500;
2273
+ MAX_OUTPUT_BYTES = 3e4;
2273
2274
  bashTool = {
2274
2275
  clearable: true,
2275
2276
  definition: {
2276
2277
  name: "bash",
2277
- description: "Run a shell command and return stdout + stderr. 120-second timeout by default (configurable). Use for: npm install/build/test, git operations, tsc --noEmit, or any CLI tool. Prefer dedicated tools over bash when available (use grep instead of bash + rg, readFile instead of bash + cat). Output is truncated to 500 lines by default.",
2278
+ description: "Run a shell command and return stdout + stderr. 120-second timeout by default (configurable). Use for: npm install/build/test, git operations, tsc --noEmit, or any CLI tool. Prefer dedicated tools over bash when available (use grep instead of bash + rg, readFile instead of bash + cat). Output is truncated to 500 lines or 30KB, whichever comes first. If a command would emit a lot of data, narrow it down (grep, head/tail, --short flags) rather than reading everything.",
2278
2279
  inputSchema: {
2279
2280
  type: "object",
2280
2281
  properties: {
@@ -2330,12 +2331,32 @@ var init_bash = __esm({
2330
2331
  }
2331
2332
  return;
2332
2333
  }
2333
- const lines = output.split("\n");
2334
- if (lines.length > maxLines) {
2334
+ const totalBytes = Buffer.byteLength(output, "utf-8");
2335
+ let truncated = output;
2336
+ let byteTruncated = false;
2337
+ if (totalBytes > MAX_OUTPUT_BYTES) {
2338
+ truncated = Buffer.from(output, "utf-8").subarray(0, MAX_OUTPUT_BYTES).toString("utf-8");
2339
+ byteTruncated = true;
2340
+ }
2341
+ const lines = truncated.split("\n");
2342
+ const lineTruncated = lines.length > maxLines;
2343
+ if (lineTruncated) {
2344
+ truncated = lines.slice(0, maxLines).join("\n");
2345
+ }
2346
+ if (byteTruncated || lineTruncated) {
2347
+ const reasons = [];
2348
+ if (lineTruncated) {
2349
+ reasons.push(`${maxLines} lines`);
2350
+ }
2351
+ if (byteTruncated) {
2352
+ reasons.push(
2353
+ `${(MAX_OUTPUT_BYTES / 1024).toFixed(0)}KB of ${(totalBytes / 1024).toFixed(0)}KB`
2354
+ );
2355
+ }
2335
2356
  resolve2(
2336
- lines.slice(0, maxLines).join("\n") + `
2357
+ truncated + `
2337
2358
 
2338
- (truncated at ${maxLines} lines of ${lines.length} total \u2014 increase maxLines to see more)`
2359
+ (truncated at ${reasons.join(" / ")} \u2014 narrow the command (grep, head/tail, smaller paths) instead of increasing limits)`
2339
2360
  );
2340
2361
  } else {
2341
2362
  resolve2(output);
@@ -6822,21 +6843,7 @@ var init_attachments = __esm({
6822
6843
  init_logger();
6823
6844
  log11 = createLogger("headless:attachments");
6824
6845
  UPLOADS_DIR = "src/.user-uploads";
6825
- IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([
6826
- ".png",
6827
- ".jpg",
6828
- ".jpeg",
6829
- ".gif",
6830
- ".webp",
6831
- ".svg",
6832
- ".bmp",
6833
- ".ico",
6834
- ".tiff",
6835
- ".tif",
6836
- ".avif",
6837
- ".heic",
6838
- ".heif"
6839
- ]);
6846
+ IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".gif", ".webp"]);
6840
6847
  }
6841
6848
  });
6842
6849
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/remy",
3
- "version": "0.1.153",
3
+ "version": "0.1.155",
4
4
  "description": "MindStudio coding agent",
5
5
  "repository": {
6
6
  "type": "git",