rivet-design 0.21.9 → 0.22.0

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 (225) hide show
  1. package/README.md +5 -1
  2. package/README.npm.md +5 -1
  3. package/bin/rivet.js +4 -0
  4. package/dist/agent-variants/PreviewRuntime.d.ts.map +1 -1
  5. package/dist/agent-variants/PreviewRuntime.js +3 -5
  6. package/dist/agent-variants/PreviewRuntime.js.map +1 -1
  7. package/dist/agent-variants/SessionStore.d.ts +21 -2
  8. package/dist/agent-variants/SessionStore.d.ts.map +1 -1
  9. package/dist/agent-variants/SessionStore.js +88 -71
  10. package/dist/agent-variants/SessionStore.js.map +1 -1
  11. package/dist/agent-variants/VariantWorkspaceManager.d.ts.map +1 -1
  12. package/dist/agent-variants/VariantWorkspaceManager.js +8 -14
  13. package/dist/agent-variants/VariantWorkspaceManager.js.map +1 -1
  14. package/dist/agent-variants/WorkspaceProvisioning.d.ts.map +1 -1
  15. package/dist/agent-variants/WorkspaceProvisioning.js +32 -21
  16. package/dist/agent-variants/WorkspaceProvisioning.js.map +1 -1
  17. package/dist/agent-variants/WorktreeOrchestrator.d.ts +7 -37
  18. package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  19. package/dist/agent-variants/WorktreeOrchestrator.js +148 -103
  20. package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -1
  21. package/dist/agent-variants/contextAssets.d.ts.map +1 -1
  22. package/dist/agent-variants/contextAssets.js +2 -8
  23. package/dist/agent-variants/contextAssets.js.map +1 -1
  24. package/dist/agent-variants/contracts.d.ts +103 -63
  25. package/dist/agent-variants/contracts.d.ts.map +1 -1
  26. package/dist/agent-variants/contracts.js.map +1 -1
  27. package/dist/agent-variants/staticPreviewFiles.d.ts +33 -0
  28. package/dist/agent-variants/staticPreviewFiles.d.ts.map +1 -0
  29. package/dist/agent-variants/staticPreviewFiles.js +109 -0
  30. package/dist/agent-variants/staticPreviewFiles.js.map +1 -0
  31. package/dist/agent-variants/staticPreviewRefinements.d.ts.map +1 -1
  32. package/dist/agent-variants/staticPreviewRefinements.js +3 -3
  33. package/dist/agent-variants/staticPreviewRefinements.js.map +1 -1
  34. package/dist/agent-variants/variantContext.d.ts.map +1 -1
  35. package/dist/agent-variants/variantContext.js +2 -8
  36. package/dist/agent-variants/variantContext.js.map +1 -1
  37. package/dist/agent-variants/variantWorkspaceFiles.d.ts +0 -1
  38. package/dist/agent-variants/variantWorkspaceFiles.d.ts.map +1 -1
  39. package/dist/agent-variants/variantWorkspaceFiles.js +5 -10
  40. package/dist/agent-variants/variantWorkspaceFiles.js.map +1 -1
  41. package/dist/agent-variants/workItemBriefing.d.ts.map +1 -1
  42. package/dist/agent-variants/workItemBriefing.js +4 -0
  43. package/dist/agent-variants/workItemBriefing.js.map +1 -1
  44. package/dist/agent-variants/workItemInput.d.ts +5950 -0
  45. package/dist/agent-variants/workItemInput.d.ts.map +1 -0
  46. package/dist/agent-variants/workItemInput.js +76 -0
  47. package/dist/agent-variants/workItemInput.js.map +1 -0
  48. package/dist/agent-variants/workItemPreviewRoutes.d.ts +23 -0
  49. package/dist/agent-variants/workItemPreviewRoutes.d.ts.map +1 -0
  50. package/dist/agent-variants/workItemPreviewRoutes.js +95 -0
  51. package/dist/agent-variants/workItemPreviewRoutes.js.map +1 -0
  52. package/dist/cli/handoff.d.ts +5 -0
  53. package/dist/cli/handoff.d.ts.map +1 -1
  54. package/dist/cli/handoff.js +13 -10
  55. package/dist/cli/handoff.js.map +1 -1
  56. package/dist/config/proxy.d.ts +3 -0
  57. package/dist/config/proxy.d.ts.map +1 -1
  58. package/dist/config/proxy.js +7 -5
  59. package/dist/config/proxy.js.map +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +46 -7
  62. package/dist/index.js.map +1 -1
  63. package/dist/install/agentSkill.d.ts +16 -0
  64. package/dist/install/agentSkill.d.ts.map +1 -0
  65. package/dist/install/agentSkill.js +54 -0
  66. package/dist/install/agentSkill.js.map +1 -0
  67. package/dist/install/allowlists.d.ts +3 -1
  68. package/dist/install/allowlists.d.ts.map +1 -1
  69. package/dist/install/allowlists.js +89 -27
  70. package/dist/install/allowlists.js.map +1 -1
  71. package/dist/install/automaticCliUpdate.d.ts.map +1 -1
  72. package/dist/install/automaticCliUpdate.js +6 -11
  73. package/dist/install/automaticCliUpdate.js.map +1 -1
  74. package/dist/install/channelCli.d.ts.map +1 -1
  75. package/dist/install/channelCli.js +2 -37
  76. package/dist/install/channelCli.js.map +1 -1
  77. package/dist/install/channelManager.d.ts +2 -1
  78. package/dist/install/channelManager.d.ts.map +1 -1
  79. package/dist/install/channelManager.js +23 -20
  80. package/dist/install/channelManager.js.map +1 -1
  81. package/dist/install/codexSkill.d.ts +1 -8
  82. package/dist/install/codexSkill.d.ts.map +1 -1
  83. package/dist/install/codexSkill.js +9 -50
  84. package/dist/install/codexSkill.js.map +1 -1
  85. package/dist/install/cursorSkill.d.ts +6 -0
  86. package/dist/install/cursorSkill.d.ts.map +1 -0
  87. package/dist/install/cursorSkill.js +36 -0
  88. package/dist/install/cursorSkill.js.map +1 -0
  89. package/dist/install/globalBootstrap.d.ts +3 -2
  90. package/dist/install/globalBootstrap.d.ts.map +1 -1
  91. package/dist/install/globalBootstrap.js +9 -41
  92. package/dist/install/globalBootstrap.js.map +1 -1
  93. package/dist/install/harnesses.d.ts +27 -0
  94. package/dist/install/harnesses.d.ts.map +1 -1
  95. package/dist/install/harnesses.js +174 -76
  96. package/dist/install/harnesses.js.map +1 -1
  97. package/dist/library/importFiles.d.ts.map +1 -1
  98. package/dist/library/importFiles.js +3 -3
  99. package/dist/library/importFiles.js.map +1 -1
  100. package/dist/prototype-host.js +2 -1
  101. package/dist/prototype-host.js.map +1 -1
  102. package/dist/proxy-middleware/proxy-config.d.ts +10 -0
  103. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  104. package/dist/proxy-middleware/proxy-config.js +20 -29
  105. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  106. package/dist/routes/agentVariants.d.ts +1 -5
  107. package/dist/routes/agentVariants.d.ts.map +1 -1
  108. package/dist/routes/agentVariants.js +42 -85
  109. package/dist/routes/agentVariants.js.map +1 -1
  110. package/dist/routes/library/staticPreview.d.ts.map +1 -1
  111. package/dist/routes/library/staticPreview.js +9 -7
  112. package/dist/routes/library/staticPreview.js.map +1 -1
  113. package/dist/routes/prototypeHost.d.ts.map +1 -1
  114. package/dist/routes/prototypeHost.js +3 -3
  115. package/dist/routes/prototypeHost.js.map +1 -1
  116. package/dist/routes/staticPreviewPolicy.d.ts +13 -0
  117. package/dist/routes/staticPreviewPolicy.d.ts.map +1 -0
  118. package/dist/routes/staticPreviewPolicy.js +61 -0
  119. package/dist/routes/staticPreviewPolicy.js.map +1 -0
  120. package/dist/routes/variantRequestSchema.d.ts +4 -4
  121. package/dist/services/AuthService.js +3 -3
  122. package/dist/services/AuthService.js.map +1 -1
  123. package/dist/services/BundleStore.d.ts.map +1 -1
  124. package/dist/services/BundleStore.js +4 -8
  125. package/dist/services/BundleStore.js.map +1 -1
  126. package/dist/services/DependencyPreparationService.d.ts.map +1 -1
  127. package/dist/services/DependencyPreparationService.js +4 -3
  128. package/dist/services/DependencyPreparationService.js.map +1 -1
  129. package/dist/services/OperatingSystemServices.d.ts +5 -0
  130. package/dist/services/OperatingSystemServices.d.ts.map +1 -1
  131. package/dist/services/OperatingSystemServices.js +9 -3
  132. package/dist/services/OperatingSystemServices.js.map +1 -1
  133. package/dist/services/ProjectImport.d.ts.map +1 -1
  134. package/dist/services/ProjectImport.js +2 -1
  135. package/dist/services/ProjectImport.js.map +1 -1
  136. package/dist/services/ProjectPackageManager.d.ts +0 -1
  137. package/dist/services/ProjectPackageManager.d.ts.map +1 -1
  138. package/dist/services/ProjectPackageManager.js +5 -12
  139. package/dist/services/ProjectPackageManager.js.map +1 -1
  140. package/dist/services/PrototypeBuildService.d.ts.map +1 -1
  141. package/dist/services/PrototypeBuildService.js +10 -6
  142. package/dist/services/PrototypeBuildService.js.map +1 -1
  143. package/dist/services/VariantHistoryService.d.ts +3 -0
  144. package/dist/services/VariantHistoryService.d.ts.map +1 -1
  145. package/dist/services/VariantHistoryService.js +36 -12
  146. package/dist/services/VariantHistoryService.js.map +1 -1
  147. package/dist/services/WorktreeManager.d.ts.map +1 -1
  148. package/dist/services/WorktreeManager.js +4 -4
  149. package/dist/services/WorktreeManager.js.map +1 -1
  150. package/dist/services/packageManagerProcess.d.ts +20 -0
  151. package/dist/services/packageManagerProcess.d.ts.map +1 -0
  152. package/dist/services/packageManagerProcess.js +55 -0
  153. package/dist/services/packageManagerProcess.js.map +1 -0
  154. package/dist/services/referenceImages.d.ts.map +1 -1
  155. package/dist/services/referenceImages.js +4 -4
  156. package/dist/services/referenceImages.js.map +1 -1
  157. package/dist/services/staticProjectTarget.d.ts.map +1 -1
  158. package/dist/services/staticProjectTarget.js +3 -5
  159. package/dist/services/staticProjectTarget.js.map +1 -1
  160. package/dist/storage/library/ProjectPreviewCache.d.ts +2 -2
  161. package/dist/types/preview-routes.d.ts +6 -0
  162. package/dist/types/preview-routes.d.ts.map +1 -0
  163. package/dist/types/preview-routes.js +35 -0
  164. package/dist/types/preview-routes.js.map +1 -0
  165. package/dist/types/variant-history.d.ts +6 -0
  166. package/dist/types/variant-history.d.ts.map +1 -1
  167. package/dist/utils/pathContainment.d.ts +15 -0
  168. package/dist/utils/pathContainment.d.ts.map +1 -0
  169. package/dist/utils/pathContainment.js +46 -0
  170. package/dist/utils/pathContainment.js.map +1 -0
  171. package/dist/utils/skillWriter.d.ts +5 -2
  172. package/dist/utils/skillWriter.d.ts.map +1 -1
  173. package/dist/utils/skillWriter.js +93 -34
  174. package/dist/utils/skillWriter.js.map +1 -1
  175. package/dist/utils/staticPreviewPage.d.ts +11 -0
  176. package/dist/utils/staticPreviewPage.d.ts.map +1 -0
  177. package/dist/utils/staticPreviewPage.js +40 -0
  178. package/dist/utils/staticPreviewPage.js.map +1 -0
  179. package/package.json +6 -2
  180. package/src/ui/dist/assets/{LibraryEntry-BaphzdNv.js → LibraryEntry-CjxmVfhv.js} +8 -8
  181. package/src/ui/dist/assets/main-CdSzrhWD.js +435 -0
  182. package/src/ui/dist/assets/main-DVb3ws41.css +1 -0
  183. package/src/ui/dist/index.html +2 -2
  184. package/dist/agent-variants/elementRefToTarget.d.ts +0 -4
  185. package/dist/agent-variants/elementRefToTarget.d.ts.map +0 -1
  186. package/dist/agent-variants/elementRefToTarget.js +0 -30
  187. package/dist/agent-variants/elementRefToTarget.js.map +0 -1
  188. package/dist/prompts/commentVariationPromptConfig.d.ts +0 -7
  189. package/dist/prompts/commentVariationPromptConfig.d.ts.map +0 -1
  190. package/dist/prompts/commentVariationPromptConfig.js +0 -12
  191. package/dist/prompts/commentVariationPromptConfig.js.map +0 -1
  192. package/dist/prompts/commentVariationPromptSnapshot.d.ts +0 -3
  193. package/dist/prompts/commentVariationPromptSnapshot.d.ts.map +0 -1
  194. package/dist/prompts/commentVariationPromptSnapshot.js +0 -31
  195. package/dist/prompts/commentVariationPromptSnapshot.js.map +0 -1
  196. package/dist/prompts/commentVariationPrompts.d.ts +0 -7
  197. package/dist/prompts/commentVariationPrompts.d.ts.map +0 -1
  198. package/dist/prompts/commentVariationPrompts.js +0 -54
  199. package/dist/prompts/commentVariationPrompts.js.map +0 -1
  200. package/dist/services/adapters/TailwindTokenAdapter.d.ts +0 -17
  201. package/dist/services/adapters/TailwindTokenAdapter.d.ts.map +0 -1
  202. package/dist/services/adapters/TailwindTokenAdapter.js +0 -284
  203. package/dist/services/adapters/TailwindTokenAdapter.js.map +0 -1
  204. package/dist/services/extractors/CSSVariableExtractor.d.ts +0 -10
  205. package/dist/services/extractors/CSSVariableExtractor.d.ts.map +0 -1
  206. package/dist/services/extractors/CSSVariableExtractor.js +0 -110
  207. package/dist/services/extractors/CSSVariableExtractor.js.map +0 -1
  208. package/dist/services/staticStarter.d.ts +0 -3
  209. package/dist/services/staticStarter.d.ts.map +0 -1
  210. package/dist/services/staticStarter.js +0 -129
  211. package/dist/services/staticStarter.js.map +0 -1
  212. package/dist/utils/elementFileHintSignals.d.ts +0 -3
  213. package/dist/utils/elementFileHintSignals.d.ts.map +0 -1
  214. package/dist/utils/elementFileHintSignals.js +0 -35
  215. package/dist/utils/elementFileHintSignals.js.map +0 -1
  216. package/dist/utils/formatElementTargetingContext.d.ts +0 -28
  217. package/dist/utils/formatElementTargetingContext.d.ts.map +0 -1
  218. package/dist/utils/formatElementTargetingContext.js +0 -82
  219. package/dist/utils/formatElementTargetingContext.js.map +0 -1
  220. package/dist/utils/variantPreviewPort.d.ts +0 -15
  221. package/dist/utils/variantPreviewPort.d.ts.map +0 -1
  222. package/dist/utils/variantPreviewPort.js +0 -25
  223. package/dist/utils/variantPreviewPort.js.map +0 -1
  224. package/src/ui/dist/assets/main-CVCXVenP.js +0 -435
  225. package/src/ui/dist/assets/main-vcYlLdli.css +0 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SessionStore = exports.buildImageRefs = exports.SOURCE_PLAN_ACTION_OPTIONS = exports.SOURCE_PLAN_OUTPUT_SCHEMA = exports.SCAFFOLD_LEASE_TTL_MS = exports.DEFAULT_LEASE_TTL_MS = void 0;
4
+ const preview_routes_1 = require("../types/preview-routes");
4
5
  const variant_reference_1 = require("../types/variant-reference");
5
6
  const crypto_1 = require("crypto");
6
7
  const errors_1 = require("./errors");
@@ -8,6 +9,7 @@ const contracts_1 = require("./contracts");
8
9
  const briefContent_1 = require("./briefContent");
9
10
  const runLabel_1 = require("./runLabel");
10
11
  const runPlan_1 = require("./runPlan");
12
+ const workItemInput_1 = require("./workItemInput");
11
13
  const MAX_SUBTITLE_WORDS = 10;
12
14
  const MAX_RELEVANT_FILES = 12;
13
15
  const capSubtitleWords = (text) => {
@@ -21,11 +23,10 @@ exports.DEFAULT_LEASE_TTL_MS = 20 * 60 * 1000;
21
23
  exports.SCAFFOLD_LEASE_TTL_MS = 30 * 60 * 1000;
22
24
  const SYSTEM_CLOCK = { now: () => Date.now() };
23
25
  function isAdoptedVariant(item) {
24
- return Boolean(item.input.adoptedFrom);
26
+ return (0, workItemInput_1.isVariantWorkItem)(item) && Boolean(item.input.adoptedFrom);
25
27
  }
26
28
  function isForkedStaticPreviewVariant(item) {
27
- return (item.kind === 'static_preview' &&
28
- Boolean(item.input.sourceVariantId));
29
+ return item.kind === 'static_preview' && Boolean(item.input.sourceVariantId);
29
30
  }
30
31
  function fingerprint(parts) {
31
32
  return parts.map((p) => (p === undefined ? '∅' : String(p))).join('|');
@@ -761,12 +762,13 @@ class SessionStore {
761
762
  item.error = args.error;
762
763
  if (args.runtime)
763
764
  item.runtime = args.runtime;
764
- if (args.status === 'succeeded' && (args.title || args.description)) {
765
- const input = item.input;
765
+ if (args.status === 'succeeded' &&
766
+ (args.title || args.description) &&
767
+ (0, workItemInput_1.isVariantWorkItem)(item)) {
766
768
  if (args.title)
767
- input.briefLabel = args.title.trim().slice(0, 80);
769
+ item.input.briefLabel = args.title.trim().slice(0, 80);
768
770
  if (args.description)
769
- input.briefBody = args.description.trim();
771
+ item.input.briefBody = args.description.trim();
770
772
  }
771
773
  item.acceptedReports.push(fp);
772
774
  item.lease = undefined;
@@ -796,8 +798,8 @@ class SessionStore {
796
798
  item.lease = undefined;
797
799
  item.output = undefined;
798
800
  item.error = undefined;
799
- const input = (item.input ?? {});
800
- item.input = { ...input, qaRetry: args.qaRetry };
801
+ if ((0, workItemInput_1.isVariantWorkItem)(item))
802
+ item.input = { ...item.input, qaRetry: args.qaRetry };
801
803
  const result = {
802
804
  stage: session.stage,
803
805
  progress: this.progressOf(session),
@@ -817,8 +819,7 @@ class SessionStore {
817
819
  const activeRefinement = [...session.workItems.values()].find((item) => {
818
820
  if (item.kind !== 'refine_variant')
819
821
  return false;
820
- const input = item.input;
821
- return input.variantId === args.variantId && item.status === 'pending';
822
+ return (item.input.variantId === args.variantId && item.status === 'pending');
822
823
  });
823
824
  if (activeRefinement) {
824
825
  throw new errors_1.AgentVariantsError('PENDING_CHANGE_CONFLICT', 'A refinement is already queued for this variant');
@@ -846,7 +847,7 @@ class SessionStore {
846
847
  ...(args.currentHtml ? { currentHtml: args.currentHtml } : {}),
847
848
  ...(args.targetElement ? { targetElement: args.targetElement } : {}),
848
849
  ...(args.requestId ? { requestId: args.requestId } : {}),
849
- projectContext: targetInput.projectContext ?? session.projectContext,
850
+ projectContext: targetInput.projectContext,
850
851
  ...(targetInput.context ? { context: targetInput.context } : {}),
851
852
  ...(relevantFiles.length > 0 ? { relevantFiles } : {}),
852
853
  },
@@ -869,8 +870,7 @@ class SessionStore {
869
870
  const activeRefinement = [...session.workItems.values()].find((item) => {
870
871
  if (item.kind !== 'refine_variant')
871
872
  return false;
872
- const input = item.input;
873
- return (input.variantId === args.sourceVariantId &&
873
+ return (item.input.variantId === args.sourceVariantId &&
874
874
  (item.status === 'pending' || item.status === 'running'));
875
875
  });
876
876
  if (activeRefinement) {
@@ -878,6 +878,7 @@ class SessionStore {
878
878
  }
879
879
  const sourceInput = source.input;
880
880
  const relevantFiles = mergeRelevantFiles(sourceInput.relevantFiles, args.relevantFiles);
881
+ const previewRoutes = (0, preview_routes_1.mergePreviewRoutes)(args.previewRoutes, sourceInput.previewRoutes);
881
882
  const seedHtml = args.currentHtml ??
882
883
  source.output?.html;
883
884
  const briefs = args.briefs?.map(briefContent_1.normalizeBriefContent);
@@ -925,6 +926,7 @@ class SessionStore {
925
926
  briefId: `${sourceInput.briefId ?? 'v'}-vary-${(0, crypto_1.randomUUID)().slice(0, 8)}`,
926
927
  briefLabel: brief?.label ?? `${labelBase}${suffix}`,
927
928
  briefBody: brief?.body ?? prettyInstruction,
929
+ ...(previewRoutes.length ? { previewRoutes } : {}),
928
930
  references: (0, variant_reference_1.mergeVariantReferences)(sourceInput.references, context?.references),
929
931
  ...(args.runLabel ? { runLabel: args.runLabel } : {}),
930
932
  ...(brief?.visualReferenceUrl
@@ -943,7 +945,7 @@ class SessionStore {
943
945
  ...(args.targetElement ? { targetElement: args.targetElement } : {}),
944
946
  ...(args.requestId ? { requestId: args.requestId } : {}),
945
947
  ...(args.fidelity ? { fidelity: args.fidelity } : {}),
946
- projectContext: sourceInput.projectContext ?? session.projectContext,
948
+ projectContext: sourceInput.projectContext,
947
949
  ...(context ? { context } : {}),
948
950
  ...(relevantFiles.length > 0 ? { relevantFiles } : {}),
949
951
  },
@@ -981,16 +983,15 @@ class SessionStore {
981
983
  const activeRefinement = [...session.workItems.values()].find((item) => {
982
984
  if (item.kind !== 'refine_variant')
983
985
  return false;
984
- const input = item.input;
985
- return (input.variantId === args.sourceVariantId &&
986
+ return (item.input.variantId === args.sourceVariantId &&
986
987
  (item.status === 'pending' || item.status === 'running'));
987
988
  });
988
989
  if (activeRefinement) {
989
990
  throw new errors_1.AgentVariantsError('PENDING_CHANGE_CONFLICT', 'Cannot vary a variant while an in-place refinement is pending or running');
990
991
  }
991
992
  }
992
- const sourceInput = (source?.input ?? {});
993
- const relevantFiles = mergeRelevantFiles(sourceInput.relevantFiles, args.relevantFiles);
993
+ const sourceInput = source && (0, workItemInput_1.isVariantWorkItem)(source) ? source.input : undefined;
994
+ const relevantFiles = mergeRelevantFiles(sourceInput?.relevantFiles, args.relevantFiles);
994
995
  const createdWorkItemIds = [];
995
996
  for (const [batchSlotIndex, brief] of args.briefs.entries()) {
996
997
  const context = resolveVariantWorkItemContext({
@@ -1012,7 +1013,7 @@ class SessionStore {
1012
1013
  briefId: brief.briefId,
1013
1014
  briefLabel: brief.label,
1014
1015
  briefBody: brief.body,
1015
- references: (0, variant_reference_1.mergeVariantReferences)(sourceInput.references, context?.references),
1016
+ references: (0, variant_reference_1.mergeVariantReferences)(sourceInput?.references, context?.references),
1016
1017
  instruction: args.instruction,
1017
1018
  guidance: args.guidance ?? [],
1018
1019
  ...(brief.notes ? { briefNotes: brief.notes } : {}),
@@ -1021,10 +1022,10 @@ class SessionStore {
1021
1022
  ...(args.sourceVariantId
1022
1023
  ? { sourceVariantId: args.sourceVariantId }
1023
1024
  : {}),
1024
- ...(source && sourceInput.briefLabel
1025
+ ...(sourceInput?.briefLabel
1025
1026
  ? { sourceLabel: sourceInput.briefLabel }
1026
1027
  : {}),
1027
- ...(source && sourceInput.briefBody
1028
+ ...(sourceInput?.briefBody
1028
1029
  ? { sourceBody: sourceInput.briefBody }
1029
1030
  : {}),
1030
1031
  target: session.target,
@@ -1050,10 +1051,9 @@ class SessionStore {
1050
1051
  }
1051
1052
  const existing = this.findAdoptedVariant(session, args.source);
1052
1053
  if (existing) {
1053
- const input = existing.input;
1054
1054
  return {
1055
1055
  workItemId: existing.id,
1056
- briefId: input.briefId ?? '',
1056
+ briefId: existing.input.briefId ?? '',
1057
1057
  created: false,
1058
1058
  };
1059
1059
  }
@@ -1074,6 +1074,7 @@ class SessionStore {
1074
1074
  ...(args.runLabel ? { runLabel: args.runLabel } : {}),
1075
1075
  adoptedFrom: { ...args.source },
1076
1076
  references: (0, variant_reference_1.mergeVariantReferences)(args.references),
1077
+ previewRoutes: args.previewRoutes,
1077
1078
  projectContext: session.projectContext,
1078
1079
  },
1079
1080
  acceptedReports: [],
@@ -1106,6 +1107,7 @@ class SessionStore {
1106
1107
  label: args.label,
1107
1108
  description: args.description,
1108
1109
  references: args.references,
1110
+ previewRoutes: args.previewRoutes,
1109
1111
  runLabel: args.runLabel,
1110
1112
  });
1111
1113
  return {
@@ -1116,10 +1118,9 @@ class SessionStore {
1116
1118
  }
1117
1119
  findAdoptedVariant(session, source) {
1118
1120
  for (const item of session.workItems.values()) {
1119
- if (item.removed)
1121
+ if (item.removed || !(0, workItemInput_1.isVariantWorkItem)(item))
1120
1122
  continue;
1121
- const adoptedFrom = item.input
1122
- .adoptedFrom;
1123
+ const { adoptedFrom } = item.input;
1123
1124
  if (adoptedFrom &&
1124
1125
  adoptedFrom.sessionId === source.sessionId &&
1125
1126
  adoptedFrom.variantId === source.variantId) {
@@ -1128,29 +1129,41 @@ class SessionStore {
1128
1129
  }
1129
1130
  return undefined;
1130
1131
  }
1132
+ assignVariantPreviewRoutes(args) {
1133
+ const session = this.requireSession(args.sessionId);
1134
+ const source = args.sourceVariantId
1135
+ ? this.requireWorkItem(session, args.sourceVariantId)
1136
+ : undefined;
1137
+ const merged = (0, preview_routes_1.mergePreviewRoutes)(args.previewRoutes, source && (0, workItemInput_1.isVariantWorkItem)(source)
1138
+ ? source.input.previewRoutes
1139
+ : undefined);
1140
+ if (!merged.length)
1141
+ return;
1142
+ const previewRoutes = preview_routes_1.previewRoutesSchema.parse(merged);
1143
+ for (const workItemId of args.workItemIds) {
1144
+ const item = this.requireWorkItem(session, workItemId);
1145
+ if ((0, workItemInput_1.isVariantWorkItem)(item))
1146
+ item.input = { ...item.input, previewRoutes: [...previewRoutes] };
1147
+ }
1148
+ }
1131
1149
  assignVariantRequestId(sessionId, workItemIds, requestId) {
1132
1150
  const session = this.requireSession(sessionId);
1133
1151
  for (const id of workItemIds) {
1134
1152
  const item = session.workItems.get(id);
1135
- if (!item)
1136
- continue;
1137
- const input = (item.input ?? {});
1138
- item.input = { ...input, requestId };
1153
+ if (item && (0, workItemInput_1.isVariantWorkItem)(item))
1154
+ item.input = { ...item.input, requestId };
1139
1155
  }
1140
1156
  }
1141
1157
  getPendingRefinement(sessionId, variantId) {
1142
- return [...this.requireSession(sessionId).workItems.values()].find((item) => {
1143
- if (item.kind !== 'refine_variant')
1144
- return false;
1145
- const input = item.input;
1146
- return input.variantId === variantId && item.status === 'pending';
1147
- });
1158
+ return [...this.requireSession(sessionId).workItems.values()].find((item) => item.kind === 'refine_variant' &&
1159
+ item.input.variantId === variantId &&
1160
+ item.status === 'pending');
1148
1161
  }
1149
1162
  appendPendingRefineVariantInstruction(args) {
1150
1163
  const refineItem = this.getPendingRefinement(args.sessionId, args.variantId);
1151
1164
  if (!refineItem)
1152
1165
  return false;
1153
- const input = refineItem.input;
1166
+ const { input } = refineItem;
1154
1167
  input.guidance = args.guidance ?? [];
1155
1168
  input.requestId = args.requestId;
1156
1169
  input.instruction =
@@ -1170,7 +1183,7 @@ class SessionStore {
1170
1183
  const runningRefinement = [...session.workItems.values()].find((item) => {
1171
1184
  if (item.kind !== 'refine_variant')
1172
1185
  return false;
1173
- const input = item.input;
1186
+ const { input } = item;
1174
1187
  return input.variantId === args.variantId && item.status === 'running';
1175
1188
  });
1176
1189
  if (runningRefinement) {
@@ -1179,7 +1192,7 @@ class SessionStore {
1179
1192
  const refineItem = [...session.workItems.values()].find((item) => {
1180
1193
  if (item.kind !== 'refine_variant')
1181
1194
  return false;
1182
- const input = item.input;
1195
+ const { input } = item;
1183
1196
  return input.variantId === args.variantId && item.status === 'pending';
1184
1197
  });
1185
1198
  if (!refineItem) {
@@ -1277,7 +1290,7 @@ class SessionStore {
1277
1290
  for (const other of session.workItems.values()) {
1278
1291
  if (other.kind !== 'refine_variant')
1279
1292
  continue;
1280
- const input = other.input;
1293
+ const { input } = other;
1281
1294
  if (input.variantId !== item.id)
1282
1295
  continue;
1283
1296
  if (other.status === 'pending' || other.status === 'running') {
@@ -1296,8 +1309,8 @@ class SessionStore {
1296
1309
  renameWorkItem(args) {
1297
1310
  const session = this.requireSession(args.sessionId);
1298
1311
  const item = this.requireWorkItem(session, args.workItemId);
1299
- const input = item.input;
1300
- input.briefLabel = args.label;
1312
+ if ((0, workItemInput_1.isVariantWorkItem)(item))
1313
+ item.input.briefLabel = args.label;
1301
1314
  return {
1302
1315
  workItemId: item.id,
1303
1316
  label: args.label,
@@ -1310,9 +1323,9 @@ class SessionStore {
1310
1323
  const workItemIds = [];
1311
1324
  for (const id of session.workItemOrder) {
1312
1325
  const item = session.workItems.get(id);
1313
- if (!item || item.removed)
1326
+ if (!item || item.removed || !(0, workItemInput_1.isVariantWorkItem)(item))
1314
1327
  continue;
1315
- const input = item.input;
1328
+ const { input } = item;
1316
1329
  if (input.requestId !== args.requestId)
1317
1330
  continue;
1318
1331
  const effective = input.runLabel ?? sessionFallback;
@@ -1379,12 +1392,7 @@ class SessionStore {
1379
1392
  const { lease } = item;
1380
1393
  if (!lease || item.status !== 'running')
1381
1394
  return [];
1382
- const input = item.input && typeof item.input === 'object'
1383
- ? item.input
1384
- : {};
1385
- const variantId = item.kind === 'refine_variant' && typeof input.variantId === 'string'
1386
- ? input.variantId
1387
- : item.id;
1395
+ const variantId = (item.kind === 'refine_variant' && item.input.variantId) || item.id;
1388
1396
  return {
1389
1397
  workId: item.id,
1390
1398
  variantId,
@@ -1410,14 +1418,25 @@ class SessionStore {
1410
1418
  hasSession(sessionId) {
1411
1419
  return this.sessions.has(sessionId);
1412
1420
  }
1413
- getWorkItemInput(sessionId, workItemId) {
1421
+ getVariantWorkItemInput(sessionId, workItemId) {
1414
1422
  const session = this.requireSession(sessionId);
1415
1423
  const item = this.requireWorkItem(session, workItemId);
1416
- return item.input;
1424
+ return (0, workItemInput_1.isVariantWorkItem)(item)
1425
+ ? (0, workItemInput_1.parseVariantWorkItemInput)(item)
1426
+ : undefined;
1427
+ }
1428
+ requireVariantWorkItemInput(args) {
1429
+ const session = this.requireSession(args.sessionId);
1430
+ const item = this.requireWorkItem(session, args.workItemId);
1431
+ const kind = args.kinds.find((candidate) => candidate === item.kind);
1432
+ if (!kind) {
1433
+ throw new errors_1.AgentVariantsError('WORK_ITEM_NOT_FOUND', `Work item ${item.id} is a ${item.kind} work item, not ${args.kinds.join(' or ')}`);
1434
+ }
1435
+ return (0, workItemInput_1.parseVariantWorkItemInput)({ id: item.id, kind, input: item.input });
1417
1436
  }
1418
1437
  getWorkItemIdsForRequest(sessionId, requestId) {
1419
1438
  return [...this.requireSession(sessionId).workItems.values()]
1420
- .filter((item) => item.input.requestId === requestId)
1439
+ .filter((item) => (0, workItemInput_1.isVariantWorkItem)(item) && item.input.requestId === requestId)
1421
1440
  .map((item) => item.id);
1422
1441
  }
1423
1442
  getWorkItemOutput(sessionId, workItemId) {
@@ -1441,7 +1460,7 @@ class SessionStore {
1441
1460
  }
1442
1461
  isVaryForkWorkItem(sessionId, workItemId) {
1443
1462
  const item = this.sessions.get(sessionId)?.workItems.get(workItemId);
1444
- return Boolean(item && item.input.sourceVariantId);
1463
+ return Boolean(item && (0, workItemInput_1.isVariantWorkItem)(item) && item.input.sourceVariantId);
1445
1464
  }
1446
1465
  isWorkItemAborted(sessionId, workItemId) {
1447
1466
  const session = this.sessions.get(sessionId);
@@ -1529,8 +1548,7 @@ class SessionStore {
1529
1548
  return out;
1530
1549
  }
1531
1550
  hasLeasableCodeGenForStaticPreview(session, staticPreview) {
1532
- const staticInput = staticPreview.input;
1533
- if (!staticInput.briefId)
1551
+ if (!(0, workItemInput_1.isVariantWorkItem)(staticPreview) || !staticPreview.input.briefId)
1534
1552
  return false;
1535
1553
  for (const candidate of session.workItems.values()) {
1536
1554
  if (candidate.kind !== 'code_gen')
@@ -1539,8 +1557,7 @@ class SessionStore {
1539
1557
  continue;
1540
1558
  if (!this.dependenciesMet(session, candidate))
1541
1559
  continue;
1542
- const codeInput = candidate.input;
1543
- if (codeInput.briefId === staticInput.briefId)
1560
+ if (candidate.input.briefId === staticPreview.input.briefId)
1544
1561
  return true;
1545
1562
  }
1546
1563
  return false;
@@ -1639,14 +1656,11 @@ class SessionStore {
1639
1656
  successCount: items.filter((i) => i.status === 'succeeded').length,
1640
1657
  failureCount: items.filter((i) => i.status === 'failed').length,
1641
1658
  cancelledCount: items.filter((i) => i.status === 'cancelled').length,
1642
- variants: items.map((i) => {
1643
- const input = i.input;
1644
- return {
1645
- workItemId: i.id,
1646
- status: i.status,
1647
- label: input.briefLabel,
1648
- };
1649
- }),
1659
+ variants: items.map((i) => ({
1660
+ workItemId: i.id,
1661
+ status: i.status,
1662
+ label: (0, workItemInput_1.isVariantWorkItem)(i) ? i.input.briefLabel : undefined,
1663
+ })),
1650
1664
  };
1651
1665
  }
1652
1666
  refinementSnapshotPriority(item) {
@@ -1662,7 +1676,7 @@ class SessionStore {
1662
1676
  for (const item of session.workItems.values()) {
1663
1677
  if (item.kind !== 'refine_variant')
1664
1678
  continue;
1665
- const input = item.input;
1679
+ const { input } = item;
1666
1680
  if (!input.variantId)
1667
1681
  continue;
1668
1682
  const existing = refinementsByVariantId.get(input.variantId);
@@ -1676,16 +1690,19 @@ class SessionStore {
1676
1690
  .map((id) => session.workItems.get(id))
1677
1691
  .filter((i) => !!i &&
1678
1692
  !i.removed &&
1693
+ (0, workItemInput_1.isVariantWorkItem)(i) &&
1679
1694
  (i.kind === kind ||
1680
1695
  isAdoptedVariant(i) ||
1681
1696
  isForkedStaticPreviewVariant(i)))
1682
1697
  .map((item) => {
1683
- const input = item.input;
1698
+ const { input } = item;
1684
1699
  const refineItem = refinementsByVariantId.get(item.id);
1685
- const refineRequestId = refineItem?.input
1686
- ?.requestId;
1700
+ const refineRequestId = refineItem?.input.requestId;
1687
1701
  return {
1688
1702
  workItemId: item.id,
1703
+ ...(input.previewRoutes
1704
+ ? { previewRoutes: [...input.previewRoutes] }
1705
+ : {}),
1689
1706
  briefId: input.briefId ?? '',
1690
1707
  label: input.briefLabel ?? 'Variant',
1691
1708
  references: input.references,