rivet-design 0.10.8 → 0.11.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 (156) hide show
  1. package/dist/index.d.ts +47 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +277 -123
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp/agent-variants/SessionStore.d.ts +28 -4
  6. package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
  7. package/dist/mcp/agent-variants/SessionStore.js +356 -123
  8. package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
  9. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +84 -4
  10. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  11. package/dist/mcp/agent-variants/WorktreeOrchestrator.js +744 -145
  12. package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
  13. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +8 -3
  14. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
  15. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +8 -3
  16. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
  17. package/dist/mcp/agent-variants/contracts.d.ts +7984 -1625
  18. package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
  19. package/dist/mcp/agent-variants/contracts.js +312 -154
  20. package/dist/mcp/agent-variants/contracts.js.map +1 -1
  21. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +2 -3
  22. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
  23. package/dist/mcp/agent-variants/createZeroToOneTool.js +49 -39
  24. package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
  25. package/dist/mcp/agent-variants/designCritique.d.ts +167 -0
  26. package/dist/mcp/agent-variants/designCritique.d.ts.map +1 -0
  27. package/dist/mcp/agent-variants/designCritique.js +717 -0
  28. package/dist/mcp/agent-variants/designCritique.js.map +1 -0
  29. package/dist/mcp/agent-variants/diffQa.d.ts +7 -0
  30. package/dist/mcp/agent-variants/diffQa.d.ts.map +1 -0
  31. package/dist/mcp/agent-variants/diffQa.js +67 -0
  32. package/dist/mcp/agent-variants/diffQa.js.map +1 -0
  33. package/dist/mcp/agent-variants/index.d.ts +3 -3
  34. package/dist/mcp/agent-variants/index.d.ts.map +1 -1
  35. package/dist/mcp/agent-variants/index.js +2 -1
  36. package/dist/mcp/agent-variants/index.js.map +1 -1
  37. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +4 -2
  38. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
  39. package/dist/mcp/agent-variants/pinterestSourceContext.js +7 -6
  40. package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
  41. package/dist/mcp/agent-variants/previewQa.d.ts +6 -4
  42. package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -1
  43. package/dist/mcp/agent-variants/previewQa.js +140 -13
  44. package/dist/mcp/agent-variants/previewQa.js.map +1 -1
  45. package/dist/mcp/agent-variants/sourceContext.d.ts +20 -5
  46. package/dist/mcp/agent-variants/sourceContext.d.ts.map +1 -1
  47. package/dist/mcp/agent-variants/sourceContext.js +99 -115
  48. package/dist/mcp/agent-variants/sourceContext.js.map +1 -1
  49. package/dist/mcp/agent-variants/tools.d.ts +7 -0
  50. package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
  51. package/dist/mcp/agent-variants/tools.js +216 -15
  52. package/dist/mcp/agent-variants/tools.js.map +1 -1
  53. package/dist/mcp/agent-variants/variantContext.d.ts +19 -0
  54. package/dist/mcp/agent-variants/variantContext.d.ts.map +1 -0
  55. package/dist/mcp/agent-variants/variantContext.js +355 -0
  56. package/dist/mcp/agent-variants/variantContext.js.map +1 -0
  57. package/dist/mcp/auth/httpOAuthProvider.d.ts +103 -0
  58. package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -0
  59. package/dist/mcp/auth/httpOAuthProvider.js +454 -0
  60. package/dist/mcp/auth/httpOAuthProvider.js.map +1 -0
  61. package/dist/mcp/auth/tools.d.ts +2 -0
  62. package/dist/mcp/auth/tools.d.ts.map +1 -1
  63. package/dist/mcp/auth/tools.js +12 -5
  64. package/dist/mcp/auth/tools.js.map +1 -1
  65. package/dist/mcp/httpServer.d.ts +36 -0
  66. package/dist/mcp/httpServer.d.ts.map +1 -0
  67. package/dist/mcp/httpServer.js +307 -0
  68. package/dist/mcp/httpServer.js.map +1 -0
  69. package/dist/mcp/server.d.ts +17 -0
  70. package/dist/mcp/server.d.ts.map +1 -1
  71. package/dist/mcp/server.js +41 -19
  72. package/dist/mcp/server.js.map +1 -1
  73. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  74. package/dist/proxy-middleware/proxy-config.js +5 -2
  75. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  76. package/dist/routes/agentVariants.d.ts.map +1 -1
  77. package/dist/routes/agentVariants.js +6 -4
  78. package/dist/routes/agentVariants.js.map +1 -1
  79. package/dist/routes/mcp.d.ts.map +1 -1
  80. package/dist/routes/mcp.js +2 -1
  81. package/dist/routes/mcp.js.map +1 -1
  82. package/dist/server.d.ts +9 -0
  83. package/dist/server.d.ts.map +1 -1
  84. package/dist/server.js +13 -5
  85. package/dist/server.js.map +1 -1
  86. package/dist/services/AuthService.d.ts +1 -0
  87. package/dist/services/AuthService.d.ts.map +1 -1
  88. package/dist/services/AuthService.js +11 -1
  89. package/dist/services/AuthService.js.map +1 -1
  90. package/dist/services/BrowserAgentClient.d.ts +54 -0
  91. package/dist/services/BrowserAgentClient.d.ts.map +1 -0
  92. package/dist/services/BrowserAgentClient.js +126 -0
  93. package/dist/services/BrowserAgentClient.js.map +1 -0
  94. package/dist/services/ConfigManager.d.ts +5 -0
  95. package/dist/services/ConfigManager.d.ts.map +1 -1
  96. package/dist/services/ConfigManager.js +25 -3
  97. package/dist/services/ConfigManager.js.map +1 -1
  98. package/dist/services/DevServerRuntimeService.d.ts +119 -0
  99. package/dist/services/DevServerRuntimeService.d.ts.map +1 -0
  100. package/dist/services/DevServerRuntimeService.js +657 -0
  101. package/dist/services/DevServerRuntimeService.js.map +1 -0
  102. package/dist/services/GatewayClient.d.ts +25 -0
  103. package/dist/services/GatewayClient.d.ts.map +1 -1
  104. package/dist/services/GatewayClient.js +70 -11
  105. package/dist/services/GatewayClient.js.map +1 -1
  106. package/dist/services/InlineVariantGenerationService.d.ts +2 -0
  107. package/dist/services/InlineVariantGenerationService.d.ts.map +1 -1
  108. package/dist/services/InlineVariantGenerationService.js +70 -3
  109. package/dist/services/InlineVariantGenerationService.js.map +1 -1
  110. package/dist/services/RequestAuthContext.d.ts +7 -1
  111. package/dist/services/RequestAuthContext.d.ts.map +1 -1
  112. package/dist/services/RequestAuthContext.js +15 -2
  113. package/dist/services/RequestAuthContext.js.map +1 -1
  114. package/dist/services/SessionBridgeService.d.ts +1 -0
  115. package/dist/services/SessionBridgeService.d.ts.map +1 -1
  116. package/dist/services/SessionBridgeService.js +16 -1
  117. package/dist/services/SessionBridgeService.js.map +1 -1
  118. package/dist/services/VariantRunService.d.ts +1 -0
  119. package/dist/services/VariantRunService.d.ts.map +1 -1
  120. package/dist/services/VariantRunService.js +1 -0
  121. package/dist/services/VariantRunService.js.map +1 -1
  122. package/dist/services/VariantsRuntime.d.ts.map +1 -1
  123. package/dist/services/VariantsRuntime.js +1 -0
  124. package/dist/services/VariantsRuntime.js.map +1 -1
  125. package/dist/services/WorktreeManager.d.ts +1 -8
  126. package/dist/services/WorktreeManager.d.ts.map +1 -1
  127. package/dist/services/WorktreeManager.js +1 -28
  128. package/dist/services/WorktreeManager.js.map +1 -1
  129. package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
  130. package/dist/services/createAgentVariantsOrchestrator.js +7 -0
  131. package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
  132. package/dist/utils/skills/describe-motion-protocol.d.ts +2 -3
  133. package/dist/utils/skills/describe-motion-protocol.d.ts.map +1 -1
  134. package/dist/utils/skills/describe-motion-protocol.js +50 -35
  135. package/dist/utils/skills/describe-motion-protocol.js.map +1 -1
  136. package/dist/utils/skills/shared-variants-protocol.d.ts +1 -1
  137. package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
  138. package/dist/utils/skills/shared-variants-protocol.js +21 -15
  139. package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
  140. package/dist/utils/variantSessionStart.d.ts +3 -0
  141. package/dist/utils/variantSessionStart.d.ts.map +1 -0
  142. package/dist/utils/variantSessionStart.js +7 -0
  143. package/dist/utils/variantSessionStart.js.map +1 -0
  144. package/package.json +2 -1
  145. package/src/ui/dist/assets/{main-WqlDU4Ou.js → main-Cw6Pd8ye.js} +204 -204
  146. package/src/ui/dist/assets/main-DkCj7b2K.css +1 -0
  147. package/src/ui/dist/index.html +2 -2
  148. package/dist/mcp/agent-variants/designContextStore.d.ts +0 -160
  149. package/dist/mcp/agent-variants/designContextStore.d.ts.map +0 -1
  150. package/dist/mcp/agent-variants/designContextStore.js +0 -295
  151. package/dist/mcp/agent-variants/designContextStore.js.map +0 -1
  152. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts +0 -440
  153. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts.map +0 -1
  154. package/dist/mcp/agent-variants/inspirationDesignContext.js +0 -2467
  155. package/dist/mcp/agent-variants/inspirationDesignContext.js.map +0 -1
  156. package/src/ui/dist/assets/main-auZA25j4.css +0 -1
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ERROR_CODES = exports.getVariantInput = exports.listPastVariantsInput = exports.variantHistoryStatusSchema = exports.startVariantsInput = exports.startVariantsBriefContent = exports.startVariantsMode = exports.cancelVariantInput = exports.cancelVariantsInput = exports.extractInspirationContextInput = exports.reportVariantCompleteInput = exports.reportVariantCompleteStatus = exports.continueVariantsInput = exports.continueVariantsAction = exports.commitVariantInput = exports.approveVariantBriefsInput = exports.reportSourcePlanInput = exports.sourcePlanArtifactSchema = exports.reportVariantBriefsInput = exports.proposeVariantsInput = exports.runLabelSchema = exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.briefSchema = exports.targetSchema = exports.VARIANT_ARTIFACT_KINDS = exports.projectContextSchema = exports.projectContextFresh = exports.executionCapabilityPlanSchema = exports.assetPlanEntrySchema = exports.executionConfidenceSchema = exports.executionModeSchema = exports.sourceContextInputSchema = exports.sourceContextArtifactSchema = exports.sourceRoleEntrySchema = exports.sourceRoleSchema = exports.sourceArtifactInputSchema = exports.sourceArtifactKindSchema = exports.designContextEntrySchema = exports.sourceIntentArtifactSchema = exports.sourceIntentEntrySchema = exports.sourceIntentConfidenceSchema = exports.sourceIntentRoleSchema = exports.projectContextExisting = exports.WORK_ITEM_STATUSES = exports.WORK_ITEM_KINDS = exports.TERMINAL_STAGES = exports.STAGES = void 0;
3
+ exports.ERROR_CODES = exports.getVariantInput = exports.captureDesignEvidenceInput = exports.listPastVariantsInput = exports.variantHistoryStatusSchema = exports.startVariantsInput = exports.startVariantsBriefContent = exports.startVariantsMode = exports.cancelVariantInput = exports.cancelVariantsInput = exports.reportVariantCompleteInput = exports.reportVariantCompleteStatus = exports.continueVariantsInput = exports.continueVariantsAction = exports.commitVariantInput = exports.approveVariantBriefsInput = exports.reportSourcePlanInput = exports.sourcePlanArtifactSchema = exports.reportVariantBriefsInput = exports.proposeVariantsInput = exports.runLabelSchema = exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.variantWorkItemContextSchema = exports.briefSchema = exports.targetSchema = exports.VARIANT_ARTIFACT_KINDS = exports.projectContextInputSchema = exports.projectContextSchema = exports.projectContextFresh = exports.projectContextExisting = exports.variantContextBundleSchema = exports.executionCapabilityPlanSchema = exports.assetPlanEntrySchema = exports.executionConfidenceSchema = exports.executionModeSchema = exports.variantContextBindingSchema = exports.rivetMetadataSchema = exports.sourcePlanActionOptionSchema = exports.rivetContextActionSchema = exports.rivetContextActionKindSchema = exports.storedUserContextSourceRecordSchema = exports.rawUserContextSourceSchema = exports.rawUserContextInputSchema = exports.sourceRoleSchema = exports.designContextEntrySchema = exports.WORK_ITEM_STATUSES = exports.WORK_ITEM_KINDS = exports.TERMINAL_STAGES = exports.STAGES = void 0;
4
4
  const v3_1 = require("zod/v3");
5
5
  const errors_1 = require("./errors");
6
6
  Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_1.ERROR_CODES; } });
7
- const inspirationDesignContext_1 = require("./inspirationDesignContext");
7
+ const sourceContext_1 = require("./sourceContext");
8
8
  // --- Stages ---------------------------------------------------------------
9
9
  exports.STAGES = [
10
10
  'awaiting_source_plan',
@@ -41,49 +41,16 @@ exports.WORK_ITEM_STATUSES = [
41
41
  'cancelled',
42
42
  ];
43
43
  // --- Project context ------------------------------------------------------
44
- exports.projectContextExisting = v3_1.z.object({
45
- kind: v3_1.z.literal('existing'),
46
- });
47
44
  const DESIGN_CONTEXT_MARKDOWN_MAX_LENGTH = 50_000;
48
45
  const DESIGN_CONTEXT_SLUG_MAX_LENGTH = 120;
49
46
  const SOURCE_URL_MAX_LENGTH = 2_048;
50
- const SOURCE_ARTIFACT_LABEL_MAX_LENGTH = 80;
51
- const SOURCE_ARTIFACT_CONTENT_MAX_LENGTH = 8_000;
52
47
  const SOURCE_FINDING_MAX_LENGTH = 400;
53
48
  const SOURCE_LIST_MAX_ITEMS = 24;
54
- const SOURCE_SCREENSHOT_MAX_ITEMS = 16;
55
- // --- Source intent ---------------------------------------------------------
56
- exports.sourceIntentRoleSchema = v3_1.z.enum([
57
- 'design_source',
58
- 'interaction_reference',
59
- 'asset_source',
60
- 'content_reference',
61
- 'other',
62
- ]);
63
- exports.sourceIntentConfidenceSchema = v3_1.z.enum(['low', 'medium', 'high']);
64
- /**
65
- * One classified source in the agent's `sourceIntent`. Identified by exactly
66
- * one of:
67
- * - `url`: an inspiration URL the user provided
68
- * - `imageRef`: a stable per-session reference of the form `image:<index>`
69
- * pointing at an image-kind entry in `sourceArtifacts` (visualBrief or
70
- * screenshotNotes). Indexed over image-kind artifacts only, so the ref
71
- * survives reordering of text-only artifacts.
72
- */
73
- exports.sourceIntentEntrySchema = v3_1.z
74
- .object({
75
- url: v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH).optional(),
76
- imageRef: v3_1.z.string().min(1).max(64).optional(),
77
- role: exports.sourceIntentRoleSchema,
78
- confidence: exports.sourceIntentConfidenceSchema,
79
- reason: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH),
80
- })
81
- .refine((entry) => Boolean(entry.url) !== Boolean(entry.imageRef), {
82
- message: 'sourceIntent entry must specify exactly one of `url` or `imageRef`.',
83
- });
84
- exports.sourceIntentArtifactSchema = v3_1.z.object({
85
- sources: v3_1.z.array(exports.sourceIntentEntrySchema).min(1).max(SOURCE_LIST_MAX_ITEMS),
86
- });
49
+ const USER_CONTEXT_LABEL_MAX_LENGTH = 80;
50
+ const USER_CONTEXT_TEXT_MAX_LENGTH = 50_000;
51
+ const USER_CONTEXT_PATH_MAX_LENGTH = 2_048;
52
+ const USER_CONTEXT_UPLOAD_DATA_URL_MAX_LENGTH = 70_000_000;
53
+ // --- Design context --------------------------------------------------------
87
54
  exports.designContextEntrySchema = v3_1.z.discriminatedUnion('kind', [
88
55
  v3_1.z.object({
89
56
  kind: v3_1.z.literal('slug'),
@@ -95,69 +62,232 @@ exports.designContextEntrySchema = v3_1.z.discriminatedUnion('kind', [
95
62
  label: v3_1.z.string().min(1).max(60),
96
63
  }),
97
64
  ]);
98
- exports.sourceArtifactKindSchema = v3_1.z.enum([
99
- 'urlText',
100
- 'siteBrief',
101
- 'visualBrief',
102
- 'screenshotNotes',
103
- 'motionBrief',
104
- ]);
105
- exports.sourceArtifactInputSchema = v3_1.z.object({
106
- kind: exports.sourceArtifactKindSchema,
107
- label: v3_1.z.string().min(1).max(SOURCE_ARTIFACT_LABEL_MAX_LENGTH),
108
- content: v3_1.z.string().min(1).max(SOURCE_ARTIFACT_CONTENT_MAX_LENGTH),
109
- });
65
+ /**
66
+ * Role a raw source plays in `design_system` action metadata. Retained because
67
+ * `rivetMetadataSchema` references it; the legacy summary-first
68
+ * `sourceContext`/`sourceIntent` intake shapes that also used it are gone.
69
+ */
110
70
  exports.sourceRoleSchema = v3_1.z.enum([
111
71
  'primary',
112
72
  'inspiration',
113
73
  'competitor',
114
74
  ]);
115
- exports.sourceRoleEntrySchema = v3_1.z.object({
116
- url: v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH),
117
- role: exports.sourceRoleSchema,
118
- rationale: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
119
- });
120
- exports.sourceContextArtifactSchema = v3_1.z.object({
121
- sourceFindings: v3_1.z
122
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
123
- .min(1)
124
- .max(SOURCE_LIST_MAX_ITEMS),
125
- sectionInventory: v3_1.z
126
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
127
- .min(1)
128
- .max(SOURCE_LIST_MAX_ITEMS),
129
- visualObservations: v3_1.z
130
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
131
- .min(1)
132
- .max(SOURCE_LIST_MAX_ITEMS),
133
- sourceRoles: v3_1.z.array(exports.sourceRoleEntrySchema).min(1).max(SOURCE_LIST_MAX_ITEMS),
134
- qualityBar: v3_1.z
135
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
136
- .min(1)
137
- .max(SOURCE_LIST_MAX_ITEMS),
138
- screenshotReferences: v3_1.z
139
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
140
- .max(SOURCE_SCREENSHOT_MAX_ITEMS)
141
- .optional(),
142
- risks: v3_1.z
143
- .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
144
- .max(SOURCE_LIST_MAX_ITEMS)
75
+ // --- Native user context ---------------------------------------------------
76
+ exports.rawUserContextInputSchema = v3_1.z.discriminatedUnion('transport', [
77
+ v3_1.z.object({
78
+ transport: v3_1.z.literal('url'),
79
+ url: v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH),
80
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
81
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
82
+ }),
83
+ v3_1.z.object({
84
+ transport: v3_1.z.literal('file_path'),
85
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
86
+ mimeType: v3_1.z.string().min(1).max(120).optional(),
87
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
88
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
89
+ }),
90
+ v3_1.z.object({
91
+ transport: v3_1.z.literal('upload'),
92
+ dataUrl: v3_1.z.string().min(1).max(USER_CONTEXT_UPLOAD_DATA_URL_MAX_LENGTH),
93
+ filename: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
94
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
95
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
96
+ }),
97
+ v3_1.z.object({
98
+ transport: v3_1.z.literal('directory_path'),
99
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
100
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
101
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
102
+ }),
103
+ v3_1.z.object({
104
+ transport: v3_1.z.literal('text'),
105
+ content: v3_1.z.string().min(1).max(USER_CONTEXT_TEXT_MAX_LENGTH),
106
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
107
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
108
+ }),
109
+ ]);
110
+ exports.rawUserContextSourceSchema = v3_1.z.discriminatedUnion('transport', [
111
+ v3_1.z.object({
112
+ id: v3_1.z.string().min(1),
113
+ transport: v3_1.z.literal('prompt'),
114
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
115
+ }),
116
+ v3_1.z.object({
117
+ id: v3_1.z.string().min(1),
118
+ transport: v3_1.z.literal('url'),
119
+ url: v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH),
120
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
121
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
122
+ }),
123
+ v3_1.z.object({
124
+ id: v3_1.z.string().min(1),
125
+ transport: v3_1.z.literal('file'),
126
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
127
+ mimeType: v3_1.z.string().min(1).max(120).optional(),
128
+ originalFilename: v3_1.z
129
+ .string()
130
+ .min(1)
131
+ .max(USER_CONTEXT_LABEL_MAX_LENGTH)
132
+ .optional(),
133
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
134
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
135
+ }),
136
+ v3_1.z.object({
137
+ id: v3_1.z.string().min(1),
138
+ transport: v3_1.z.literal('directory'),
139
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
140
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
141
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
142
+ }),
143
+ v3_1.z.object({
144
+ id: v3_1.z.string().min(1),
145
+ transport: v3_1.z.literal('text'),
146
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
147
+ label: v3_1.z.string().min(1).max(USER_CONTEXT_LABEL_MAX_LENGTH).optional(),
148
+ userIntent: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
149
+ }),
150
+ ]);
151
+ exports.storedUserContextSourceRecordSchema = v3_1.z.object({
152
+ source: exports.rawUserContextSourceSchema,
153
+ storage: v3_1.z
154
+ .object({
155
+ sizeBytes: v3_1.z.number().int().nonnegative().optional(),
156
+ sha256: v3_1.z.string().min(1).optional(),
157
+ originalFilename: v3_1.z.string().min(1).optional(),
158
+ })
145
159
  .optional(),
146
160
  });
147
- exports.sourceContextInputSchema = v3_1.z.object({
148
- sourceUrls: v3_1.z
149
- .array(v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH))
161
+ exports.rivetContextActionKindSchema = v3_1.z.enum([
162
+ 'extract_design_system',
163
+ 'describe_motion',
164
+ ]);
165
+ exports.rivetContextActionSchema = v3_1.z.object({
166
+ id: v3_1.z.string().min(1),
167
+ kind: exports.rivetContextActionKindSchema,
168
+ sourceIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
169
+ reason: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH),
170
+ outputMetadataIds: v3_1.z
171
+ .array(v3_1.z.string().min(1))
150
172
  .max(SOURCE_LIST_MAX_ITEMS)
151
173
  .optional(),
152
- preserveBrand: v3_1.z.boolean().optional(),
153
- sourceArtifacts: v3_1.z
154
- .array(exports.sourceArtifactInputSchema)
174
+ });
175
+ exports.sourcePlanActionOptionSchema = v3_1.z.object({
176
+ kind: exports.rivetContextActionKindSchema,
177
+ sourceTransports: v3_1.z
178
+ .array(v3_1.z.enum(['prompt', 'url', 'file', 'directory', 'text']))
179
+ .min(1)
180
+ .max(SOURCE_LIST_MAX_ITEMS),
181
+ capability: v3_1.z.enum(['extract_inspiration_context', 'rivet_describe_motion']),
182
+ produces: v3_1.z.enum(['design_system', 'motion_guidance']),
183
+ instructions: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH),
184
+ });
185
+ const rivetMetadataBaseSchema = v3_1.z.object({
186
+ id: v3_1.z.string().min(1),
187
+ sourceIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
188
+ actionId: v3_1.z.string().min(1).optional(),
189
+ producedBy: v3_1.z.enum(['rivet', 'agent', 'browser', 'skill']),
190
+ path: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH).optional(),
191
+ warnings: v3_1.z
192
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
155
193
  .max(SOURCE_LIST_MAX_ITEMS)
156
194
  .optional(),
157
- artifact: exports.sourceContextArtifactSchema.optional(),
158
- sourceIntent: exports.sourceIntentArtifactSchema.optional(),
159
- designDecision: v3_1.z.enum(['let_rivet_choose', 'go_custom']).optional(),
160
195
  });
196
+ exports.rivetMetadataSchema = v3_1.z.discriminatedUnion('kind', [
197
+ rivetMetadataBaseSchema.extend({
198
+ kind: v3_1.z.literal('design_system'),
199
+ data: v3_1.z.object({
200
+ designMarkdown: v3_1.z
201
+ .string()
202
+ .min(1)
203
+ .max(DESIGN_CONTEXT_MARKDOWN_MAX_LENGTH)
204
+ .optional(),
205
+ /**
206
+ * Provenance for the design system: `captured` = derived from rendered
207
+ * browser evidence (e.g. `capture_design_evidence`); `partial` = some
208
+ * evidence, gaps filled by inference; `inferred` = no rendered evidence
209
+ * (static fetch / native inspection only). Keeps DESIGN.md honest about
210
+ * extracted-vs-guessed values.
211
+ */
212
+ evidenceStatus: v3_1.z.enum(['captured', 'partial', 'inferred']).optional(),
213
+ sourceFindings: v3_1.z
214
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
215
+ .min(1)
216
+ .max(SOURCE_LIST_MAX_ITEMS),
217
+ sectionInventory: v3_1.z
218
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
219
+ .min(1)
220
+ .max(SOURCE_LIST_MAX_ITEMS),
221
+ visualObservations: v3_1.z
222
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
223
+ .min(1)
224
+ .max(SOURCE_LIST_MAX_ITEMS),
225
+ sourceRoles: v3_1.z
226
+ .array(v3_1.z.object({
227
+ sourceId: v3_1.z.string().min(1),
228
+ role: exports.sourceRoleSchema,
229
+ rationale: v3_1.z
230
+ .string()
231
+ .min(1)
232
+ .max(SOURCE_FINDING_MAX_LENGTH)
233
+ .optional(),
234
+ }))
235
+ .min(1)
236
+ .max(SOURCE_LIST_MAX_ITEMS),
237
+ qualityBar: v3_1.z
238
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
239
+ .min(1)
240
+ .max(SOURCE_LIST_MAX_ITEMS),
241
+ risks: v3_1.z
242
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
243
+ .max(SOURCE_LIST_MAX_ITEMS)
244
+ .optional(),
245
+ }),
246
+ }),
247
+ rivetMetadataBaseSchema.extend({
248
+ kind: v3_1.z.literal('motion_guidance'),
249
+ data: v3_1.z.object({
250
+ motionMarkdown: v3_1.z
251
+ .string()
252
+ .min(1)
253
+ .max(DESIGN_CONTEXT_MARKDOWN_MAX_LENGTH)
254
+ .optional(),
255
+ notes: v3_1.z
256
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
257
+ .min(1)
258
+ .max(SOURCE_LIST_MAX_ITEMS),
259
+ timings: v3_1.z
260
+ .array(v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH))
261
+ .max(SOURCE_LIST_MAX_ITEMS)
262
+ .optional(),
263
+ }),
264
+ }),
265
+ ]);
266
+ exports.variantContextBindingSchema = v3_1.z.discriminatedUnion('kind', [
267
+ v3_1.z.object({
268
+ kind: v3_1.z.literal('global'),
269
+ sourceIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
270
+ actionIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
271
+ metadataIds: v3_1.z
272
+ .array(v3_1.z.string().min(1))
273
+ .max(SOURCE_LIST_MAX_ITEMS)
274
+ .optional(),
275
+ }),
276
+ v3_1.z.object({
277
+ kind: v3_1.z.literal('slot'),
278
+ slotIndex: v3_1.z
279
+ .number()
280
+ .int()
281
+ .nonnegative()
282
+ .max(SOURCE_LIST_MAX_ITEMS - 1),
283
+ sourceIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
284
+ actionIds: v3_1.z.array(v3_1.z.string().min(1)).max(SOURCE_LIST_MAX_ITEMS),
285
+ metadataIds: v3_1.z
286
+ .array(v3_1.z.string().min(1))
287
+ .max(SOURCE_LIST_MAX_ITEMS)
288
+ .optional(),
289
+ }),
290
+ ]);
161
291
  // --- Execution capability planning ---------------------------------------
162
292
  exports.executionModeSchema = v3_1.z.enum(['static_preview', 'vite_app']);
163
293
  exports.executionConfidenceSchema = v3_1.z.enum(['low', 'medium', 'high']);
@@ -187,6 +317,30 @@ exports.executionCapabilityPlanSchema = v3_1.z.object({
187
317
  .optional(),
188
318
  userQuestion: v3_1.z.string().min(1).max(SOURCE_FINDING_MAX_LENGTH).optional(),
189
319
  });
320
+ exports.variantContextBundleSchema = v3_1.z.object({
321
+ version: v3_1.z.literal(1),
322
+ sessionId: v3_1.z.string().min(1),
323
+ contextBundlePath: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
324
+ userContext: v3_1.z
325
+ .array(exports.rawUserContextSourceSchema)
326
+ .min(1)
327
+ .max(SOURCE_LIST_MAX_ITEMS + 1),
328
+ rivetActions: v3_1.z.array(exports.rivetContextActionSchema).max(SOURCE_LIST_MAX_ITEMS),
329
+ rivetMetadata: v3_1.z.array(exports.rivetMetadataSchema).max(SOURCE_LIST_MAX_ITEMS),
330
+ bindings: v3_1.z.array(exports.variantContextBindingSchema).optional(),
331
+ executionPlan: exports.executionCapabilityPlanSchema.optional(),
332
+ });
333
+ exports.projectContextExisting = v3_1.z.object({
334
+ kind: v3_1.z.literal('existing'),
335
+ /** Absolute project path requested for this existing-project run. Present
336
+ * when callers target a nested project inside a larger git worktree. */
337
+ projectPath: v3_1.z.string().min(1).optional(),
338
+ /** Optional design context supplied by agents/benchmarks for existing
339
+ * project runs with visual references. Surfaced as DesignMD artifacts and
340
+ * available to QA gates, but does not trigger a source-plan stage. */
341
+ designContext: v3_1.z.array(exports.designContextEntrySchema).optional(),
342
+ variantContext: exports.variantContextBundleSchema.optional(),
343
+ });
190
344
  exports.projectContextFresh = v3_1.z.object({
191
345
  kind: v3_1.z.literal('fresh'),
192
346
  /** Where the generated subproject's files live (e.g.
@@ -206,7 +360,7 @@ exports.projectContextFresh = v3_1.z.object({
206
360
  * markdown; markdown entries are written directly as `DESIGN.md`. The
207
361
  * order matches code-gen variant slot order. */
208
362
  designContext: v3_1.z.array(exports.designContextEntrySchema).optional(),
209
- sourceContext: exports.sourceContextInputSchema.optional(),
363
+ variantContext: exports.variantContextBundleSchema.optional(),
210
364
  /** Agent-supplied execution plan from `report_source_plan`. Drives the
211
365
  * generation routing decision at approve() time: `static_preview` keeps
212
366
  * the lightweight HTML-only path; `vite_app` provisions a real Vite
@@ -217,6 +371,16 @@ exports.projectContextSchema = v3_1.z.discriminatedUnion('kind', [
217
371
  exports.projectContextExisting,
218
372
  exports.projectContextFresh,
219
373
  ]);
374
+ const projectContextExistingInput = exports.projectContextExisting.omit({
375
+ variantContext: true,
376
+ });
377
+ const projectContextFreshInput = exports.projectContextFresh.omit({
378
+ variantContext: true,
379
+ });
380
+ exports.projectContextInputSchema = v3_1.z.discriminatedUnion('kind', [
381
+ projectContextExistingInput,
382
+ projectContextFreshInput,
383
+ ]);
220
384
  // --- Variant session artifacts -------------------------------------------
221
385
  /**
222
386
  * Kinds of supporting artifact a variants session can surface to the UI.
@@ -256,12 +420,21 @@ exports.briefSchema = v3_1.z.object({
256
420
  visualReferenceUrl: v3_1.z
257
421
  .string()
258
422
  .url()
259
- .refine((url) => (0, inspirationDesignContext_1.validateInspirationUrl)(url).ok, {
423
+ .refine((url) => (0, sourceContext_1.validateInspirationUrl)(url).ok, {
260
424
  message: 'visualReferenceUrl must be an HTTP(S) URL that does not target local or private networks',
261
425
  })
262
426
  .optional()
263
427
  .describe('Optional HTTP(S) inspiration URL. Subject to SSRF guard — must not resolve to local or private network targets.'),
264
428
  });
429
+ exports.variantWorkItemContextSchema = v3_1.z.object({
430
+ contextBundlePath: v3_1.z.string().min(1).max(USER_CONTEXT_PATH_MAX_LENGTH),
431
+ userContext: v3_1.z
432
+ .array(exports.rawUserContextSourceSchema)
433
+ .max(SOURCE_LIST_MAX_ITEMS + 1),
434
+ rivetMetadata: v3_1.z.array(exports.rivetMetadataSchema).max(SOURCE_LIST_MAX_ITEMS),
435
+ brief: exports.briefSchema,
436
+ executionMode: exports.executionModeSchema.optional(),
437
+ });
265
438
  // --- Tool I/O — propose_variants ------------------------------------------
266
439
  /**
267
440
  * Inclusive bounds for the number of variants a single propose_variants run
@@ -290,7 +463,7 @@ exports.proposeVariantsInput = {
290
463
  .max(exports.VARIANT_COUNT_MAX)
291
464
  .optional(),
292
465
  target: exports.targetSchema.optional(),
293
- projectContext: exports.projectContextSchema.optional(),
466
+ projectContext: exports.projectContextInputSchema.optional(),
294
467
  runLabel: exports.runLabelSchema,
295
468
  };
296
469
  // --- Tool I/O — report_variant_briefs -------------------------------------
@@ -300,38 +473,25 @@ exports.reportVariantBriefsInput = {
300
473
  attempt: v3_1.z.number().int().nonnegative(),
301
474
  leaseId: v3_1.z.string().optional(),
302
475
  briefs: v3_1.z.array(exports.briefSchema).min(1).max(8),
476
+ bindings: v3_1.z.array(exports.variantContextBindingSchema).max(8).optional(),
303
477
  };
304
478
  // --- Tool I/O — report_source_plan ----------------------------------------
305
479
  /**
306
- * One agent-extracted DESIGN.md, keyed by exactly one of:
307
- * - `url`: the inspiration URL the agent fetched via browser extraction
308
- * - `imageRef`: a stable `image:<index>` reference matching an image-kind
309
- * entry in the session's `sourceArtifacts` (see `buildImageRefs` in
310
- * SessionStore for index semantics)
311
- */
312
- const browserDesignContextSchema = v3_1.z
313
- .object({
314
- url: v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH).optional(),
315
- imageRef: v3_1.z.string().min(1).max(64).optional(),
316
- label: v3_1.z.string().min(1).max(60),
317
- markdown: v3_1.z.string().min(1).max(DESIGN_CONTEXT_MARKDOWN_MAX_LENGTH),
318
- })
319
- .refine((entry) => Boolean(entry.url) !== Boolean(entry.imageRef), {
320
- message: 'designContexts entry must specify exactly one of `url` or `imageRef`.',
321
- });
322
- /**
323
- * Consolidated planning artifact reported by the agent in a single tool call.
324
- * Combines URL/role classification, research findings, browser-extracted
325
- * DESIGN.md per design_source URL, and the static_preview vs vite_app
326
- * execution decision. Replaces the prior `report_source_intent` +
327
- * `report_source_context` round-trips so source-grounded sessions only need
328
- * one planning hop before briefs.
480
+ * Canonical planning artifact reported by the agent in a single tool call.
481
+ * The agent inspects raw `userContext` natively, selects Rivet actions from
482
+ * `input.availableActions`, and reports the additive metadata those actions
483
+ * produce plus the static_preview vs vite_app execution decision. `actions`
484
+ * and `metadata` are required (each reported action must produce its matching
485
+ * metadata kind); `bindings` is optional and scopes context per variant slot.
486
+ * The legacy summary-first fields (`sourceIntent`, `sourceContext`,
487
+ * `designContexts`) are intentionally absent — derived guidance now comes
488
+ * from action metadata.
329
489
  */
330
490
  exports.sourcePlanArtifactSchema = v3_1.z.object({
331
- sourceIntent: exports.sourceIntentArtifactSchema,
332
- sourceContext: exports.sourceContextArtifactSchema,
333
- designContexts: v3_1.z
334
- .array(browserDesignContextSchema)
491
+ actions: v3_1.z.array(exports.rivetContextActionSchema).max(SOURCE_LIST_MAX_ITEMS),
492
+ metadata: v3_1.z.array(exports.rivetMetadataSchema).max(SOURCE_LIST_MAX_ITEMS),
493
+ bindings: v3_1.z
494
+ .array(exports.variantContextBindingSchema)
335
495
  .max(SOURCE_LIST_MAX_ITEMS)
336
496
  .optional(),
337
497
  executionPlan: exports.executionCapabilityPlanSchema,
@@ -407,32 +567,6 @@ exports.reportVariantCompleteInput = {
407
567
  tokensOut: v3_1.z.number().int().nonnegative().optional(),
408
568
  model: v3_1.z.string().optional(),
409
569
  };
410
- // --- Tool I/O — extract_inspiration_context ------------------------------
411
- /**
412
- * Stateless inspiration-extraction kickoff. Agents call this before
413
- * `start_variants(mode='zero_to_one')` when the user provides inspiration
414
- * URLs or other source artifacts, then pass the returned `designContext`
415
- * (and optional `sourceContext` echo) into `start_variants`.
416
- */
417
- exports.extractInspirationContextInput = {
418
- prompt: v3_1.z.string().min(1),
419
- count: v3_1.z.number().int().min(exports.VARIANT_COUNT_MIN).max(exports.VARIANT_COUNT_MAX),
420
- urls: v3_1.z
421
- .array(v3_1.z.string().min(1).max(SOURCE_URL_MAX_LENGTH))
422
- .max(SOURCE_LIST_MAX_ITEMS)
423
- .optional(),
424
- preserveBrand: v3_1.z.boolean().optional(),
425
- sourceArtifacts: v3_1.z
426
- .array(exports.sourceArtifactInputSchema)
427
- .max(SOURCE_LIST_MAX_ITEMS)
428
- .optional(),
429
- /** When true, bypass any cache entry and force a fresh fetch + extract. */
430
- forceRefresh: v3_1.z.boolean().optional(),
431
- /** Caller-supplied correlation id, echoed into telemetry so this stateless
432
- * extraction can be tied to the subsequent `start_variants` call (which
433
- * accepts the same field) even though no session exists yet. */
434
- clientRequestId: v3_1.z.string().optional(),
435
- };
436
570
  // --- Tool I/O — cancel_variants -------------------------------------------
437
571
  exports.cancelVariantsInput = {
438
572
  sessionId: v3_1.z.string().min(1),
@@ -488,14 +622,20 @@ exports.startVariantsInput = {
488
622
  * server's current working directory. Used to detect framework and
489
623
  * auto-open the visual editor without a separate detect_project call. */
490
624
  projectPath: v3_1.z.string().optional(),
491
- /** Zero-to-one only: per-variant-slot design context produced upstream by
492
- * `extract_inspiration_context`. Threaded into the fresh worktree as
493
- * DESIGN.md per slot. Slot order matches variant order. */
625
+ /** Per-variant-slot design context (slug entries resolve bundled catalog
626
+ * markdown; markdown entries are written directly as DESIGN.md). Slot order
627
+ * matches variant order. */
494
628
  designContext: v3_1.z.array(exports.designContextEntrySchema).optional(),
495
- /** Zero-to-one only: optional source-context metadata (inspiration URLs,
496
- * preserveBrand flag, sourceArtifacts). Forwarded to the worktree
497
- * scaffold so SOURCE_CONTEXT.md is written. */
498
- sourceContext: exports.sourceContextInputSchema.optional(),
629
+ /** Optional raw sources attached by the caller — inspiration URLs, local
630
+ * images/videos, uploaded image data URLs, directories, or pasted text.
631
+ * Rivet stores these as
632
+ * read-only user context (the variant context bundle) and, for fresh
633
+ * source-grounded runs, lets source planning decide what metadata actions
634
+ * to derive. The sole source-intake field. */
635
+ userContext: v3_1.z
636
+ .array(exports.rawUserContextInputSchema)
637
+ .max(SOURCE_LIST_MAX_ITEMS)
638
+ .optional(),
499
639
  clientRequestId: v3_1.z.string().optional(),
500
640
  };
501
641
  // --- Tool I/O — list_past_variants / get_variant ------------------------
@@ -512,6 +652,24 @@ exports.listPastVariantsInput = {
512
652
  limit: v3_1.z.number().int().min(1).max(500).optional(),
513
653
  status: exports.variantHistoryStatusSchema.optional(),
514
654
  };
655
+ // --- Tool I/O — capture_design_evidence ----------------------------------
656
+ // Renders a reference URL on a remote browser (via the proxy / browser agent)
657
+ // and returns DESIGN.md-shaped markdown derived from rendered DOM + resolved
658
+ // computed styles. The source-plan agent calls this for URL sources before
659
+ // reporting design_system, so the system is extracted rather than inferred.
660
+ exports.captureDesignEvidenceInput = {
661
+ /** Correlation only; safe to omit. */
662
+ sessionId: v3_1.z.string().min(1).optional(),
663
+ /** The reference URL to render. */
664
+ url: v3_1.z.string().url(),
665
+ /** Optional viewport override; defaults to desktop 1440x1000. */
666
+ viewport: v3_1.z
667
+ .object({
668
+ width: v3_1.z.number().int().min(320).max(3840),
669
+ height: v3_1.z.number().int().min(320).max(2160),
670
+ })
671
+ .optional(),
672
+ };
515
673
  exports.getVariantInput = {
516
674
  projectPath: v3_1.z.string().optional(),
517
675
  sessionId: v3_1.z.string().min(1),