rivet-design 0.9.3 → 0.9.5

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.
Files changed (105) hide show
  1. package/dist/mcp/agent-variants/SessionStore.d.ts +26 -10
  2. package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
  3. package/dist/mcp/agent-variants/SessionStore.js +189 -44
  4. package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
  5. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +209 -13
  6. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  7. package/dist/mcp/agent-variants/WorktreeOrchestrator.js +1489 -61
  8. package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
  9. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +65 -0
  10. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -0
  11. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +162 -0
  12. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -0
  13. package/dist/mcp/agent-variants/contracts.d.ts +1576 -64
  14. package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
  15. package/dist/mcp/agent-variants/contracts.js +202 -9
  16. package/dist/mcp/agent-variants/contracts.js.map +1 -1
  17. package/dist/mcp/agent-variants/createProjectArtifacts.d.ts +78 -0
  18. package/dist/mcp/agent-variants/createProjectArtifacts.d.ts.map +1 -0
  19. package/dist/mcp/agent-variants/createProjectArtifacts.js +123 -0
  20. package/dist/mcp/agent-variants/createProjectArtifacts.js.map +1 -0
  21. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +67 -25
  22. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
  23. package/dist/mcp/agent-variants/createZeroToOneTool.js +60 -126
  24. package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
  25. package/dist/mcp/agent-variants/errors.d.ts +1 -1
  26. package/dist/mcp/agent-variants/errors.d.ts.map +1 -1
  27. package/dist/mcp/agent-variants/errors.js +1 -0
  28. package/dist/mcp/agent-variants/errors.js.map +1 -1
  29. package/dist/mcp/agent-variants/index.d.ts +3 -4
  30. package/dist/mcp/agent-variants/index.d.ts.map +1 -1
  31. package/dist/mcp/agent-variants/index.js +2 -2
  32. package/dist/mcp/agent-variants/index.js.map +1 -1
  33. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts +10 -0
  34. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts.map +1 -1
  35. package/dist/mcp/agent-variants/inspirationDesignContext.js +104 -16
  36. package/dist/mcp/agent-variants/inspirationDesignContext.js.map +1 -1
  37. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts.map +1 -1
  38. package/dist/mcp/agent-variants/pendingChangesAdapter.js +11 -0
  39. package/dist/mcp/agent-variants/pendingChangesAdapter.js.map +1 -1
  40. package/dist/mcp/agent-variants/previewQa.d.ts +61 -0
  41. package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -0
  42. package/dist/mcp/agent-variants/previewQa.js +374 -0
  43. package/dist/mcp/agent-variants/previewQa.js.map +1 -0
  44. package/dist/mcp/agent-variants/sourceContext.d.ts +1 -0
  45. package/dist/mcp/agent-variants/sourceContext.d.ts.map +1 -1
  46. package/dist/mcp/agent-variants/sourceContext.js +28 -3
  47. package/dist/mcp/agent-variants/sourceContext.js.map +1 -1
  48. package/dist/mcp/agent-variants/tools.d.ts +40 -3
  49. package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
  50. package/dist/mcp/agent-variants/tools.js +262 -38
  51. package/dist/mcp/agent-variants/tools.js.map +1 -1
  52. package/dist/mcp/server.d.ts.map +1 -1
  53. package/dist/mcp/server.js +32 -7
  54. package/dist/mcp/server.js.map +1 -1
  55. package/dist/prompts/agentModPrompts.d.ts.map +1 -1
  56. package/dist/prompts/agentModPrompts.js +11 -10
  57. package/dist/prompts/agentModPrompts.js.map +1 -1
  58. package/dist/proxy-middleware/proxy-config.d.ts +2 -2
  59. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  60. package/dist/proxy-middleware/proxy-config.js +66 -22
  61. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  62. package/dist/routes/agentVariants.d.ts +2 -13
  63. package/dist/routes/agentVariants.d.ts.map +1 -1
  64. package/dist/routes/agentVariants.js +156 -2
  65. package/dist/routes/agentVariants.js.map +1 -1
  66. package/dist/server.d.ts.map +1 -1
  67. package/dist/server.js +79 -4
  68. package/dist/server.js.map +1 -1
  69. package/dist/services/ProjectDetectionService.d.ts.map +1 -1
  70. package/dist/services/ProjectDetectionService.js +21 -0
  71. package/dist/services/ProjectDetectionService.js.map +1 -1
  72. package/dist/services/VariantHistoryService.d.ts +117 -0
  73. package/dist/services/VariantHistoryService.d.ts.map +1 -0
  74. package/dist/services/VariantHistoryService.js +385 -0
  75. package/dist/services/VariantHistoryService.js.map +1 -0
  76. package/dist/services/WorktreeManager.d.ts +67 -9
  77. package/dist/services/WorktreeManager.d.ts.map +1 -1
  78. package/dist/services/WorktreeManager.js +209 -26
  79. package/dist/services/WorktreeManager.js.map +1 -1
  80. package/dist/services/agent/AgentCore.d.ts +1 -1
  81. package/dist/services/agent/AgentCore.d.ts.map +1 -1
  82. package/dist/services/agent/AgentCore.js +24 -1
  83. package/dist/services/agent/AgentCore.js.map +1 -1
  84. package/dist/services/agent/AgentModService.d.ts +1 -1
  85. package/dist/services/agent/AgentModService.js +7 -7
  86. package/dist/services/agent/AgentModService.js.map +1 -1
  87. package/dist/services/templates/viteReactTs.d.ts +6 -0
  88. package/dist/services/templates/viteReactTs.d.ts.map +1 -1
  89. package/dist/services/templates/viteReactTs.js +8 -1
  90. package/dist/services/templates/viteReactTs.js.map +1 -1
  91. package/dist/types/change-request-types.d.ts +14 -0
  92. package/dist/types/change-request-types.d.ts.map +1 -1
  93. package/dist/utils/skills/claude-skill.d.ts +1 -1
  94. package/dist/utils/skills/claude-skill.js +2 -2
  95. package/dist/utils/skills/cursor-rules.d.ts +1 -1
  96. package/dist/utils/skills/cursor-rules.js +1 -1
  97. package/dist/utils/skills/shared-variants-protocol.d.ts +1 -1
  98. package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
  99. package/dist/utils/skills/shared-variants-protocol.js +31 -32
  100. package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
  101. package/package.json +4 -5
  102. package/src/ui/dist/assets/main-OdmwI8Od.css +1 -0
  103. package/src/ui/dist/assets/{main-DejhsBWR.js → main-SuZlKEi0.js} +115 -115
  104. package/src/ui/dist/index.html +2 -2
  105. package/src/ui/dist/assets/main-C9jfEp80.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"inspirationDesignContext.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/inspirationDesignContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspirationDesignContext.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/inspirationDesignContext.ts"],"names":[],"mappings":"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"}
@@ -1291,10 +1291,26 @@ const extractComponentTokenDetails = (css) => {
1291
1291
  }
1292
1292
  return Array.from(accum.values()).slice(0, MAX_COMPONENT_DETAILS);
1293
1293
  };
1294
+ // D8: Role-aware palette extraction.
1295
+ // Class-keyed hints (existing) anchor `primary` to explicit primary-CTA
1296
+ // classes. Element/attribute hints (added) anchor it to the visible CSS role
1297
+ // of CTA elements even when no `.primary`/`.btn-primary` class is in play —
1298
+ // many real pages style a bare `button` or `a[class*=cta]` directly and would
1299
+ // otherwise fall through to the frequency-rank fallback (now removed) and
1300
+ // silently promote a neutral background like `#f7f7f7` to `colors.primary`.
1294
1301
  const PRIMARY_SELECTOR_HINTS = [
1295
1302
  /\b(?:btn-primary|button-primary|primary-button|primary-cta)\b/i,
1296
1303
  /\b(?:cta-primary|action-primary)\b/i,
1297
1304
  /(?:^|[\s,>+~])\.primary\b/i,
1305
+ // Element-anchored hints. Match selectors whose final compound is a
1306
+ // `button` element, a `[role="button"]` ARIA-button anchor, a generic
1307
+ // `.btn` class, or an anchor carrying a `cta`/`primary` substring in any
1308
+ // class attribute. These cover the realistic patterns where the brand
1309
+ // color lives on a bare element rule rather than a semantic class name.
1310
+ /(?:^|[\s,>+~])button(?:[.:#[\s,]|$)/i,
1311
+ /(?:^|[\s,>+~])\.btn(?:[.:#[\s,]|$)/i,
1312
+ /\[role\s*=\s*("|')button\1\]/i,
1313
+ /(?:^|[\s,>+~])a\[class\*?=("|')[^"']*(?:cta|primary)/i,
1298
1314
  ];
1299
1315
  const SURFACE_SELECTOR_HINTS = [
1300
1316
  /\bcard\b/i,
@@ -1316,7 +1332,7 @@ const isLikelyNeutralColor = (value) => {
1316
1332
  const named = value.toLowerCase();
1317
1333
  return named === 'black' || named === 'white' || named === 'gray' || named === 'grey';
1318
1334
  };
1319
- const inferColorRoles = (css, palette) => {
1335
+ const inferColorRoles = (css, _palette) => {
1320
1336
  const blocks = extractRuleBlocks(css);
1321
1337
  const roles = {};
1322
1338
  for (const { selector, body } of blocks) {
@@ -1389,11 +1405,12 @@ const inferColorRoles = (css, palette) => {
1389
1405
  }
1390
1406
  }
1391
1407
  }
1392
- if (!roles.primary) {
1393
- const accent = palette.find((color) => !isLikelyNeutralColor(color) && color.startsWith('#'));
1394
- if (accent)
1395
- roles.primary = accent;
1396
- }
1408
+ // D8: No frequency-rank fallback. When no role-anchored color exists,
1409
+ // `roles.primary` stays undefined and the synthesized DESIGN.md surfaces
1410
+ // the gap via the "colors.primary was not observed directly" caveat. This
1411
+ // is intentional: a neutral promoted by frequency (e.g. `#f7f7f7` from
1412
+ // card backgrounds) was the exact failure mode that motivated this
1413
+ // change. Surfacing the gap is more useful than guessing.
1397
1414
  return roles;
1398
1415
  };
1399
1416
  const clampPercentage = (value) => Math.max(0, Math.min(100, Math.round(value)));
@@ -1667,7 +1684,11 @@ const buildInspirationDesignContextMarkdown = (input) => {
1667
1684
  const mergedSignals = mergeSignals(input.signals);
1668
1685
  const sourceHosts = input.sources.map(({ url }) => formatHostForLabel(url));
1669
1686
  const colors = {
1670
- primary: mergedSignals.colors.roles?.primary ?? mergedSignals.colors.accents[0],
1687
+ // D8: do NOT fall back to the most prominent accent. If no role-anchored
1688
+ // primary was found, leave the slot undefined so the Caveat line below
1689
+ // surfaces the gap. Promoting a frequency-ranked accent here was the
1690
+ // SellRaze failure mode this change addresses.
1691
+ primary: mergedSignals.colors.roles?.primary,
1671
1692
  onPrimary: mergedSignals.colors.roles?.onPrimary,
1672
1693
  background: mergedSignals.colors.roles?.background ??
1673
1694
  mergedSignals.colors.palette.find((color) => isLikelyNeutralColor(color)),
@@ -2032,16 +2053,28 @@ const truncateLabel = (label) => {
2032
2053
  return label;
2033
2054
  return label.slice(0, MAX_DESIGN_CONTEXT_LABEL_LENGTH);
2034
2055
  };
2035
- const buildLabel = (hosts, merged, index) => {
2036
- if (hosts.length === 0)
2056
+ const SOURCE_ROLE_LABELS = {
2057
+ primary: 'Primary',
2058
+ inspiration: 'Reference',
2059
+ competitor: 'Reference',
2060
+ };
2061
+ const formatSourceRoleLabel = (source) => {
2062
+ const sourceLabel = source.label ?? formatHostForLabel(source.url);
2063
+ if (!source.role)
2064
+ return sourceLabel;
2065
+ return `${SOURCE_ROLE_LABELS[source.role]}: ${sourceLabel}`;
2066
+ };
2067
+ const buildLabel = (sources, merged, index) => {
2068
+ const labels = sources.map(formatSourceRoleLabel);
2069
+ if (labels.length === 0)
2037
2070
  return DESIGN_CONTEXT_LABEL_DEFAULT;
2038
2071
  if (merged) {
2039
- return truncateLabel(`Merged inspiration: ${hosts.join(', ')}`);
2072
+ return truncateLabel(labels.join(' · '));
2040
2073
  }
2041
2074
  if (typeof index === 'number') {
2042
- return truncateLabel(`Inspiration ${index + 1}: ${hosts[0]}`);
2075
+ return truncateLabel(`Inspiration ${index + 1}: ${labels[0]}`);
2043
2076
  }
2044
- return truncateLabel(`Inspiration: ${hosts[0]}`);
2077
+ return truncateLabel(`Inspiration: ${labels[0]}`);
2045
2078
  };
2046
2079
  const emptyCacheCounters = (forcedRefresh) => ({
2047
2080
  hitCount: 0,
@@ -2128,7 +2161,14 @@ const extractInspirationDesignContext = async (input) => {
2128
2161
  */
2129
2162
  const resolveLink = async (link) => {
2130
2163
  const cacheKey = (0, designContextStore_1.cacheKeyForUrl)(link.url);
2131
- if (store && cacheKey) {
2164
+ // D9: When the caller supplies a `sourceContext.artifact` it represents
2165
+ // explicit, intentional research that may contradict or augment a
2166
+ // cached extraction. Bypassing cache reads (writes still happen) lets
2167
+ // the override take precedence without erasing the cache for other
2168
+ // callers. The presence of `artifact` is sufficient signal — we don't
2169
+ // diff its contents against cached signals.
2170
+ const artifactOverride = Boolean(input.sourceContext?.artifact);
2171
+ if (store && cacheKey && !artifactOverride) {
2132
2172
  let cached;
2133
2173
  try {
2134
2174
  cached = await store.get(cacheKey);
@@ -2238,7 +2278,13 @@ const extractInspirationDesignContext = async (input) => {
2238
2278
  }
2239
2279
  if (store && cacheKey) {
2240
2280
  const markdown = rebuildSingleSourceMarkdown(signals, link);
2241
- const label = buildLabel([formatHostForLabel(link.url)], false);
2281
+ const label = buildLabel([
2282
+ {
2283
+ url: link.url,
2284
+ label: link.label,
2285
+ role: findRoleForUrl(link.url, input.sourceContext),
2286
+ },
2287
+ ], false);
2242
2288
  const entry = {
2243
2289
  metadata: {
2244
2290
  cacheKey,
@@ -2264,6 +2310,8 @@ const extractInspirationDesignContext = async (input) => {
2264
2310
  const resolved = await Promise.all(classification.inspiration.map((link) => resolveLink(link)));
2265
2311
  const successful = resolved.filter((item) => item !== undefined);
2266
2312
  if (successful.length === 0) {
2313
+ const allFetchesFailed = classification.inspiration.length > 0 &&
2314
+ fetchFailureCount === classification.inspiration.length;
2267
2315
  return {
2268
2316
  entries: new Array(input.slotCount).fill(undefined),
2269
2317
  warnings,
@@ -2278,6 +2326,14 @@ const extractInspirationDesignContext = async (input) => {
2278
2326
  cache: cacheCounters,
2279
2327
  },
2280
2328
  ...(lastReuseMetadata ? { cacheReuse: lastReuseMetadata } : {}),
2329
+ ...(allFetchesFailed
2330
+ ? {
2331
+ errorCode: 'INSPIRATION_FETCH_ALL_FAILED',
2332
+ errorMessage: 'All supplied inspiration URLs failed to fetch (DNS, timeout, or non-2xx). ' +
2333
+ 'Consider passing a local asset via `assetUrls` (e.g. a screenshot or sketch) ' +
2334
+ 'so generation can still ground against a visual reference.',
2335
+ }
2336
+ : {}),
2281
2337
  };
2282
2338
  }
2283
2339
  if (classification.mergeStrategy === 'merge') {
@@ -2289,7 +2345,33 @@ const extractInspirationDesignContext = async (input) => {
2289
2345
  })),
2290
2346
  merged: true,
2291
2347
  });
2292
- const label = buildLabel(successful.map((item) => formatHostForLabel(item.link.url)), true);
2348
+ // Dedupe by URL: a link can appear in both `classification.reference`
2349
+ // (explicitly tagged) and `successful` (extracted via inspiration
2350
+ // pipeline). Without dedupe the merged label would list the same URL
2351
+ // twice. Keep the first occurrence (reference) so the role label wins.
2352
+ const mergedSources = [];
2353
+ const seenUrls = new Set();
2354
+ for (const link of classification.reference) {
2355
+ if (seenUrls.has(link.url))
2356
+ continue;
2357
+ seenUrls.add(link.url);
2358
+ mergedSources.push({
2359
+ url: link.url,
2360
+ label: link.label,
2361
+ role: findRoleForUrl(link.url, input.sourceContext),
2362
+ });
2363
+ }
2364
+ for (const item of successful) {
2365
+ if (seenUrls.has(item.link.url))
2366
+ continue;
2367
+ seenUrls.add(item.link.url);
2368
+ mergedSources.push({
2369
+ url: item.link.url,
2370
+ label: item.link.label,
2371
+ role: findRoleForUrl(item.link.url, input.sourceContext),
2372
+ });
2373
+ }
2374
+ const label = buildLabel(mergedSources, true);
2293
2375
  // Use a factory so each slot gets its own object instance; sharing one
2294
2376
  // reference via `fill()` would let any downstream mutation leak across
2295
2377
  // every slot.
@@ -2324,7 +2406,13 @@ const extractInspirationDesignContext = async (input) => {
2324
2406
  });
2325
2407
  entries[i] = {
2326
2408
  kind: 'markdown',
2327
- label: buildLabel([formatHostForLabel(item.link.url)], false, i),
2409
+ label: buildLabel([
2410
+ {
2411
+ url: item.link.url,
2412
+ label: item.link.label,
2413
+ role: findRoleForUrl(item.link.url, input.sourceContext),
2414
+ },
2415
+ ], false, i),
2328
2416
  content: markdown,
2329
2417
  };
2330
2418
  }