rivet-design 0.9.2 → 0.9.4

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 (157) hide show
  1. package/dist/mcp/agent-variants/SessionStore.d.ts +78 -2
  2. package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
  3. package/dist/mcp/agent-variants/SessionStore.js +464 -62
  4. package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
  5. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +331 -9
  6. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  7. package/dist/mcp/agent-variants/WorktreeOrchestrator.js +1985 -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 +2508 -10
  14. package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
  15. package/dist/mcp/agent-variants/contracts.js +295 -5
  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 +241 -0
  22. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -0
  23. package/dist/mcp/agent-variants/createZeroToOneTool.js +213 -0
  24. package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -0
  25. package/dist/mcp/agent-variants/designContextStore.d.ts +160 -0
  26. package/dist/mcp/agent-variants/designContextStore.d.ts.map +1 -0
  27. package/dist/mcp/agent-variants/designContextStore.js +295 -0
  28. package/dist/mcp/agent-variants/designContextStore.js.map +1 -0
  29. package/dist/mcp/agent-variants/elementRefToTarget.d.ts +21 -0
  30. package/dist/mcp/agent-variants/elementRefToTarget.d.ts.map +1 -0
  31. package/dist/mcp/agent-variants/elementRefToTarget.js +47 -0
  32. package/dist/mcp/agent-variants/elementRefToTarget.js.map +1 -0
  33. package/dist/mcp/agent-variants/errors.d.ts +1 -1
  34. package/dist/mcp/agent-variants/errors.d.ts.map +1 -1
  35. package/dist/mcp/agent-variants/errors.js +7 -0
  36. package/dist/mcp/agent-variants/errors.js.map +1 -1
  37. package/dist/mcp/agent-variants/index.d.ts +4 -2
  38. package/dist/mcp/agent-variants/index.d.ts.map +1 -1
  39. package/dist/mcp/agent-variants/index.js +7 -1
  40. package/dist/mcp/agent-variants/index.js.map +1 -1
  41. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts +440 -0
  42. package/dist/mcp/agent-variants/inspirationDesignContext.d.ts.map +1 -0
  43. package/dist/mcp/agent-variants/inspirationDesignContext.js +2467 -0
  44. package/dist/mcp/agent-variants/inspirationDesignContext.js.map +1 -0
  45. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts.map +1 -1
  46. package/dist/mcp/agent-variants/pendingChangesAdapter.js +21 -7
  47. package/dist/mcp/agent-variants/pendingChangesAdapter.js.map +1 -1
  48. package/dist/mcp/agent-variants/previewQa.d.ts +61 -0
  49. package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -0
  50. package/dist/mcp/agent-variants/previewQa.js +374 -0
  51. package/dist/mcp/agent-variants/previewQa.js.map +1 -0
  52. package/dist/mcp/agent-variants/sourceContext.d.ts +8 -0
  53. package/dist/mcp/agent-variants/sourceContext.d.ts.map +1 -0
  54. package/dist/mcp/agent-variants/sourceContext.js +183 -0
  55. package/dist/mcp/agent-variants/sourceContext.js.map +1 -0
  56. package/dist/mcp/agent-variants/tools.d.ts +36 -0
  57. package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
  58. package/dist/mcp/agent-variants/tools.js +451 -19
  59. package/dist/mcp/agent-variants/tools.js.map +1 -1
  60. package/dist/mcp/changeBatchClassification.d.ts +30 -0
  61. package/dist/mcp/changeBatchClassification.d.ts.map +1 -0
  62. package/dist/mcp/changeBatchClassification.js +65 -0
  63. package/dist/mcp/changeBatchClassification.js.map +1 -0
  64. package/dist/mcp/server.d.ts.map +1 -1
  65. package/dist/mcp/server.js +258 -41
  66. package/dist/mcp/server.js.map +1 -1
  67. package/dist/prompts/agentModPrompts.js +4 -4
  68. package/dist/prompts/agentModPrompts.js.map +1 -1
  69. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  70. package/dist/proxy-middleware/proxy-config.js +1 -15
  71. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  72. package/dist/routes/agentVariants.d.ts +3 -1
  73. package/dist/routes/agentVariants.d.ts.map +1 -1
  74. package/dist/routes/agentVariants.js +138 -13
  75. package/dist/routes/agentVariants.js.map +1 -1
  76. package/dist/routes/mcp.d.ts +7 -1
  77. package/dist/routes/mcp.d.ts.map +1 -1
  78. package/dist/routes/mcp.js +139 -16
  79. package/dist/routes/mcp.js.map +1 -1
  80. package/dist/server.d.ts.map +1 -1
  81. package/dist/server.js +23 -5
  82. package/dist/server.js.map +1 -1
  83. package/dist/services/ProjectDetectionService.d.ts.map +1 -1
  84. package/dist/services/ProjectDetectionService.js +9 -0
  85. package/dist/services/ProjectDetectionService.js.map +1 -1
  86. package/dist/services/SessionBridgeService.d.ts +22 -0
  87. package/dist/services/SessionBridgeService.d.ts.map +1 -1
  88. package/dist/services/SessionBridgeService.js +61 -0
  89. package/dist/services/SessionBridgeService.js.map +1 -1
  90. package/dist/services/TelemetryService.d.ts +121 -0
  91. package/dist/services/TelemetryService.d.ts.map +1 -1
  92. package/dist/services/TelemetryService.js +155 -0
  93. package/dist/services/TelemetryService.js.map +1 -1
  94. package/dist/services/WorktreeManager.d.ts +116 -6
  95. package/dist/services/WorktreeManager.d.ts.map +1 -1
  96. package/dist/services/WorktreeManager.js +394 -19
  97. package/dist/services/WorktreeManager.js.map +1 -1
  98. package/dist/services/agent/AgentModService.js +6 -6
  99. package/dist/services/agent/AgentModService.js.map +1 -1
  100. package/dist/services/templates/designCatalog.d.ts +27 -0
  101. package/dist/services/templates/designCatalog.d.ts.map +1 -0
  102. package/dist/services/templates/designCatalog.js +141 -0
  103. package/dist/services/templates/designCatalog.js.map +1 -0
  104. package/dist/services/templates/designmd/airbnb.md +545 -0
  105. package/dist/services/templates/designmd/airtable.md +554 -0
  106. package/dist/services/templates/designmd/apple.md +562 -0
  107. package/dist/services/templates/designmd/binance.md +634 -0
  108. package/dist/services/templates/designmd/bmw-m.md +503 -0
  109. package/dist/services/templates/designmd/bmw.md +544 -0
  110. package/dist/services/templates/designmd/bugatti.md +454 -0
  111. package/dist/services/templates/designmd/cal.md +542 -0
  112. package/dist/services/templates/designmd/claude.md +589 -0
  113. package/dist/services/templates/designmd/clay.md +541 -0
  114. package/dist/services/templates/designmd/cohere.md +451 -0
  115. package/dist/services/templates/designmd/cursor.md +537 -0
  116. package/dist/services/templates/designmd/expo.md +526 -0
  117. package/dist/services/templates/designmd/figma.md +578 -0
  118. package/dist/services/templates/designmd/framer.md +544 -0
  119. package/dist/services/templates/designmd/hp.md +670 -0
  120. package/dist/services/templates/designmd/linear.app.md +548 -0
  121. package/dist/services/templates/designmd/mintlify.md +852 -0
  122. package/dist/services/templates/designmd/miro.md +825 -0
  123. package/dist/services/templates/designmd/notion.md +821 -0
  124. package/dist/services/templates/designmd/raycast.md +669 -0
  125. package/dist/services/templates/designmd/resend.md +585 -0
  126. package/dist/services/templates/designmd/sentry.md +262 -0
  127. package/dist/services/templates/designmd/shopify.md +350 -0
  128. package/dist/services/templates/designmd/spotify.md +246 -0
  129. package/dist/services/templates/designmd/stripe.md +322 -0
  130. package/dist/services/templates/designmd/supabase.md +255 -0
  131. package/dist/services/templates/designmd/superhuman.md +252 -0
  132. package/dist/services/templates/designmd/uber.md +295 -0
  133. package/dist/services/templates/designmd/vercel.md +310 -0
  134. package/dist/services/templates/viteReactTs.d.ts +48 -0
  135. package/dist/services/templates/viteReactTs.d.ts.map +1 -0
  136. package/dist/services/templates/viteReactTs.js +274 -0
  137. package/dist/services/templates/viteReactTs.js.map +1 -0
  138. package/dist/types/change-request-types.d.ts +29 -3
  139. package/dist/types/change-request-types.d.ts.map +1 -1
  140. package/dist/utils/skills/claude-skill.d.ts +2 -2
  141. package/dist/utils/skills/claude-skill.d.ts.map +1 -1
  142. package/dist/utils/skills/claude-skill.js +19 -98
  143. package/dist/utils/skills/claude-skill.js.map +1 -1
  144. package/dist/utils/skills/cursor-rules.d.ts +2 -2
  145. package/dist/utils/skills/cursor-rules.d.ts.map +1 -1
  146. package/dist/utils/skills/cursor-rules.js +15 -80
  147. package/dist/utils/skills/cursor-rules.js.map +1 -1
  148. package/dist/utils/skills/shared-variants-protocol.d.ts +23 -0
  149. package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -0
  150. package/dist/utils/skills/shared-variants-protocol.js +130 -0
  151. package/dist/utils/skills/shared-variants-protocol.js.map +1 -0
  152. package/package.json +6 -6
  153. package/src/ui/dist/assets/main-CpX7fB64.js +382 -0
  154. package/src/ui/dist/assets/main-Qqe2_oMT.css +1 -0
  155. package/src/ui/dist/index.html +2 -2
  156. package/src/ui/dist/assets/main-AsPCtLsx.js +0 -382
  157. package/src/ui/dist/assets/main-BzmseUDd.css +0 -1
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.writeCreateProjectManifestFile = exports.createProjectManifest = exports.createVariantsHistoryManifestPath = exports.createVariantsHistoryPath = exports.createProjectDesignSelectedPath = exports.createProjectDesignManifestPath = exports.createProjectDesignMdPath = exports.createProjectVariantIndexPath = exports.createProjectVariantSnapshotPath = exports.createProjectVariantDiffPath = exports.createProjectVariantBriefPath = exports.createProjectVariantManifestPath = exports.createProjectVariantSessionManifestPath = exports.createProjectVariantPath = exports.createProjectVariantSessionPath = exports.createProjectVariantsPath = exports.createProjectManifestPath = exports.createProjectRivetPath = exports.createProjectVariantSlug = exports.createProjectArtifactsPath = exports.CREATE_PROJECT_MANIFEST_SCHEMA_VERSION = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const CREATE_PROJECT_ARTIFACT_SEGMENTS = ['.rivet', 'create-project'];
10
+ const VARIANTS_HISTORY_SUFFIX = '-variants';
11
+ const RIVET_DIRNAME = '.rivet';
12
+ const VARIANTS_DIRNAME = 'variants';
13
+ const DESIGN_MD_DIRNAME = 'design-md';
14
+ const MANIFEST_FILENAME = 'manifest.json';
15
+ const SELECTED_DESIGN_FILENAME = 'selected.md';
16
+ const BRIEF_FILENAME = 'brief.md';
17
+ const DIFF_FILENAME = 'diff.patch';
18
+ const INDEX_FILENAME = 'index.html';
19
+ exports.CREATE_PROJECT_MANIFEST_SCHEMA_VERSION = 1;
20
+ const ensureManifestParentDirectory = (manifestPath) => {
21
+ fs_1.default.mkdirSync(path_1.default.dirname(manifestPath), { recursive: true });
22
+ };
23
+ const createProjectArtifactsPath = (projectPath) => {
24
+ return path_1.default.join(projectPath, ...CREATE_PROJECT_ARTIFACT_SEGMENTS);
25
+ };
26
+ exports.createProjectArtifactsPath = createProjectArtifactsPath;
27
+ const createProjectVariantSlug = (variantName) => {
28
+ const slug = variantName
29
+ .trim()
30
+ .toLowerCase()
31
+ .replace(/[^a-z0-9]+/g, '-')
32
+ .replace(/^-+|-+$/g, '')
33
+ .slice(0, 80);
34
+ return slug || 'variant';
35
+ };
36
+ exports.createProjectVariantSlug = createProjectVariantSlug;
37
+ const createProjectRivetPath = (projectPath) => {
38
+ return path_1.default.join(projectPath, RIVET_DIRNAME);
39
+ };
40
+ exports.createProjectRivetPath = createProjectRivetPath;
41
+ const createProjectManifestPath = (projectPath) => {
42
+ return path_1.default.join((0, exports.createProjectArtifactsPath)(projectPath), MANIFEST_FILENAME);
43
+ };
44
+ exports.createProjectManifestPath = createProjectManifestPath;
45
+ const createProjectVariantsPath = (projectPath) => {
46
+ return path_1.default.join((0, exports.createProjectArtifactsPath)(projectPath), VARIANTS_DIRNAME);
47
+ };
48
+ exports.createProjectVariantsPath = createProjectVariantsPath;
49
+ const createProjectVariantSessionPath = (projectPath, sessionId) => {
50
+ return path_1.default.join((0, exports.createProjectVariantsPath)(projectPath), sessionId);
51
+ };
52
+ exports.createProjectVariantSessionPath = createProjectVariantSessionPath;
53
+ const createProjectVariantPath = (projectPath, variantFolderName) => {
54
+ return path_1.default.join((0, exports.createProjectRivetPath)(projectPath), variantFolderName);
55
+ };
56
+ exports.createProjectVariantPath = createProjectVariantPath;
57
+ const createProjectVariantSessionManifestPath = (projectPath, sessionId) => {
58
+ return path_1.default.join((0, exports.createProjectVariantSessionPath)(projectPath, sessionId), MANIFEST_FILENAME);
59
+ };
60
+ exports.createProjectVariantSessionManifestPath = createProjectVariantSessionManifestPath;
61
+ const createProjectVariantManifestPath = (projectPath, variantFolderName) => {
62
+ return path_1.default.join((0, exports.createProjectVariantPath)(projectPath, variantFolderName), MANIFEST_FILENAME);
63
+ };
64
+ exports.createProjectVariantManifestPath = createProjectVariantManifestPath;
65
+ const createProjectVariantBriefPath = (projectPath, variantFolderName) => {
66
+ return path_1.default.join((0, exports.createProjectVariantPath)(projectPath, variantFolderName), BRIEF_FILENAME);
67
+ };
68
+ exports.createProjectVariantBriefPath = createProjectVariantBriefPath;
69
+ const createProjectVariantDiffPath = (projectPath, variantFolderName) => {
70
+ return path_1.default.join((0, exports.createProjectVariantPath)(projectPath, variantFolderName), DIFF_FILENAME);
71
+ };
72
+ exports.createProjectVariantDiffPath = createProjectVariantDiffPath;
73
+ const createProjectVariantSnapshotPath = (projectPath, variantFolderName) => {
74
+ return (0, exports.createProjectVariantPath)(projectPath, variantFolderName);
75
+ };
76
+ exports.createProjectVariantSnapshotPath = createProjectVariantSnapshotPath;
77
+ const createProjectVariantIndexPath = (projectPath, variantFolderName) => {
78
+ return path_1.default.join((0, exports.createProjectVariantPath)(projectPath, variantFolderName), INDEX_FILENAME);
79
+ };
80
+ exports.createProjectVariantIndexPath = createProjectVariantIndexPath;
81
+ const createProjectDesignMdPath = (projectPath) => {
82
+ return path_1.default.join((0, exports.createProjectArtifactsPath)(projectPath), DESIGN_MD_DIRNAME);
83
+ };
84
+ exports.createProjectDesignMdPath = createProjectDesignMdPath;
85
+ const createProjectDesignManifestPath = (projectPath) => {
86
+ return path_1.default.join((0, exports.createProjectDesignMdPath)(projectPath), MANIFEST_FILENAME);
87
+ };
88
+ exports.createProjectDesignManifestPath = createProjectDesignManifestPath;
89
+ const createProjectDesignSelectedPath = (projectPath) => {
90
+ return path_1.default.join((0, exports.createProjectDesignMdPath)(projectPath), SELECTED_DESIGN_FILENAME);
91
+ };
92
+ exports.createProjectDesignSelectedPath = createProjectDesignSelectedPath;
93
+ /**
94
+ * Path to the sibling-history directory that preserves unchosen vite_app
95
+ * variants after a commit, alongside the chosen project. Layout:
96
+ *
97
+ * <destinationParent>/<slug>/ (chosen project, promoted in place)
98
+ * <destinationParent>/<slug>-variants/ (history dir — contains 4 unchosen)
99
+ */
100
+ const createVariantsHistoryPath = (destinationParent, slug) => {
101
+ return path_1.default.join(destinationParent, `${slug}${VARIANTS_HISTORY_SUFFIX}`);
102
+ };
103
+ exports.createVariantsHistoryPath = createVariantsHistoryPath;
104
+ const createVariantsHistoryManifestPath = (destinationParent, slug) => {
105
+ return path_1.default.join((0, exports.createVariantsHistoryPath)(destinationParent, slug), MANIFEST_FILENAME);
106
+ };
107
+ exports.createVariantsHistoryManifestPath = createVariantsHistoryManifestPath;
108
+ const createProjectManifest = (input) => {
109
+ return {
110
+ schemaVersion: exports.CREATE_PROJECT_MANIFEST_SCHEMA_VERSION,
111
+ ...input,
112
+ };
113
+ };
114
+ exports.createProjectManifest = createProjectManifest;
115
+ /**
116
+ * Write a manifest into the project-local artifact area.
117
+ */
118
+ const writeCreateProjectManifestFile = (manifestPath, manifest) => {
119
+ ensureManifestParentDirectory(manifestPath);
120
+ fs_1.default.writeFileSync(`${manifestPath}`, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
121
+ };
122
+ exports.writeCreateProjectManifestFile = writeCreateProjectManifestFile;
123
+ //# sourceMappingURL=createProjectArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProjectArtifacts.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/createProjectArtifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { z } from 'zod/v3';
2
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { sourceContextInputSchema, type VisualEditorAttachment } from './contracts';
4
+ import type { ToolDeps } from './tools';
5
+ export declare const createZeroToOneInput: {
6
+ prompt: z.ZodString;
7
+ count: z.ZodOptional<z.ZodNumber>;
8
+ destinationParent: z.ZodOptional<z.ZodString>;
9
+ framework: z.ZodOptional<z.ZodEnum<["vite"]>>;
10
+ sourceContext: z.ZodOptional<z.ZodObject<{
11
+ sourceUrls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
+ preserveBrand: z.ZodOptional<z.ZodBoolean>;
13
+ sourceArtifacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
14
+ kind: z.ZodEnum<["urlText", "siteBrief", "visualBrief", "screenshotNotes"]>;
15
+ label: z.ZodString;
16
+ content: z.ZodString;
17
+ }, "strip", z.ZodTypeAny, {
18
+ kind: "urlText" | "siteBrief" | "visualBrief" | "screenshotNotes";
19
+ label: string;
20
+ content: string;
21
+ }, {
22
+ kind: "urlText" | "siteBrief" | "visualBrief" | "screenshotNotes";
23
+ label: string;
24
+ content: string;
25
+ }>, "many">>;
26
+ artifact: z.ZodOptional<z.ZodObject<{
27
+ sourceFindings: z.ZodArray<z.ZodString, "many">;
28
+ sectionInventory: z.ZodArray<z.ZodString, "many">;
29
+ visualObservations: z.ZodArray<z.ZodString, "many">;
30
+ sourceRoles: z.ZodArray<z.ZodObject<{
31
+ url: z.ZodString;
32
+ role: z.ZodEnum<["primary", "inspiration", "competitor"]>;
33
+ rationale: z.ZodOptional<z.ZodString>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ url: string;
36
+ role: "primary" | "inspiration" | "competitor";
37
+ rationale?: string | undefined;
38
+ }, {
39
+ url: string;
40
+ role: "primary" | "inspiration" | "competitor";
41
+ rationale?: string | undefined;
42
+ }>, "many">;
43
+ qualityBar: z.ZodArray<z.ZodString, "many">;
44
+ screenshotReferences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
45
+ risks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ sourceFindings: string[];
48
+ sectionInventory: string[];
49
+ visualObservations: string[];
50
+ sourceRoles: {
51
+ url: string;
52
+ role: "primary" | "inspiration" | "competitor";
53
+ rationale?: string | undefined;
54
+ }[];
55
+ qualityBar: string[];
56
+ screenshotReferences?: string[] | undefined;
57
+ risks?: string[] | undefined;
58
+ }, {
59
+ sourceFindings: string[];
60
+ sectionInventory: string[];
61
+ visualObservations: string[];
62
+ sourceRoles: {
63
+ url: string;
64
+ role: "primary" | "inspiration" | "competitor";
65
+ rationale?: string | undefined;
66
+ }[];
67
+ qualityBar: string[];
68
+ screenshotReferences?: string[] | undefined;
69
+ risks?: string[] | undefined;
70
+ }>>;
71
+ sourceIntent: z.ZodOptional<z.ZodObject<{
72
+ sources: z.ZodArray<z.ZodObject<{
73
+ url: z.ZodString;
74
+ role: z.ZodEnum<["design_source", "interaction_reference", "asset_source", "content_reference", "other"]>;
75
+ confidence: z.ZodEnum<["low", "medium", "high"]>;
76
+ reason: z.ZodString;
77
+ }, "strip", z.ZodTypeAny, {
78
+ reason: string;
79
+ url: string;
80
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
81
+ confidence: "low" | "medium" | "high";
82
+ }, {
83
+ reason: string;
84
+ url: string;
85
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
86
+ confidence: "low" | "medium" | "high";
87
+ }>, "many">;
88
+ }, "strip", z.ZodTypeAny, {
89
+ sources: {
90
+ reason: string;
91
+ url: string;
92
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
93
+ confidence: "low" | "medium" | "high";
94
+ }[];
95
+ }, {
96
+ sources: {
97
+ reason: string;
98
+ url: string;
99
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
100
+ confidence: "low" | "medium" | "high";
101
+ }[];
102
+ }>>;
103
+ designDecision: z.ZodOptional<z.ZodEnum<["let_rivet_choose", "go_custom"]>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ sourceUrls?: string[] | undefined;
106
+ preserveBrand?: boolean | undefined;
107
+ sourceArtifacts?: {
108
+ kind: "urlText" | "siteBrief" | "visualBrief" | "screenshotNotes";
109
+ label: string;
110
+ content: string;
111
+ }[] | undefined;
112
+ artifact?: {
113
+ sourceFindings: string[];
114
+ sectionInventory: string[];
115
+ visualObservations: string[];
116
+ sourceRoles: {
117
+ url: string;
118
+ role: "primary" | "inspiration" | "competitor";
119
+ rationale?: string | undefined;
120
+ }[];
121
+ qualityBar: string[];
122
+ screenshotReferences?: string[] | undefined;
123
+ risks?: string[] | undefined;
124
+ } | undefined;
125
+ sourceIntent?: {
126
+ sources: {
127
+ reason: string;
128
+ url: string;
129
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
130
+ confidence: "low" | "medium" | "high";
131
+ }[];
132
+ } | undefined;
133
+ designDecision?: "let_rivet_choose" | "go_custom" | undefined;
134
+ }, {
135
+ sourceUrls?: string[] | undefined;
136
+ preserveBrand?: boolean | undefined;
137
+ sourceArtifacts?: {
138
+ kind: "urlText" | "siteBrief" | "visualBrief" | "screenshotNotes";
139
+ label: string;
140
+ content: string;
141
+ }[] | undefined;
142
+ artifact?: {
143
+ sourceFindings: string[];
144
+ sectionInventory: string[];
145
+ visualObservations: string[];
146
+ sourceRoles: {
147
+ url: string;
148
+ role: "primary" | "inspiration" | "competitor";
149
+ rationale?: string | undefined;
150
+ }[];
151
+ qualityBar: string[];
152
+ screenshotReferences?: string[] | undefined;
153
+ risks?: string[] | undefined;
154
+ } | undefined;
155
+ sourceIntent?: {
156
+ sources: {
157
+ reason: string;
158
+ url: string;
159
+ role: "other" | "design_source" | "interaction_reference" | "asset_source" | "content_reference";
160
+ confidence: "low" | "medium" | "high";
161
+ }[];
162
+ } | undefined;
163
+ designDecision?: "let_rivet_choose" | "go_custom" | undefined;
164
+ }>>;
165
+ sessionId: z.ZodOptional<z.ZodString>;
166
+ };
167
+ export type CreateZeroToOneInput = {
168
+ prompt: string;
169
+ count?: number;
170
+ destinationParent?: string;
171
+ framework?: 'vite';
172
+ sourceContext?: z.infer<typeof sourceContextInputSchema>;
173
+ sessionId?: string;
174
+ };
175
+ /**
176
+ * Slugify a prompt into a directory-safe kebab-case name with a short random
177
+ * suffix so concurrent calls with the same prompt don't collide.
178
+ */
179
+ export declare const slugifyPrompt: (prompt: string) => string;
180
+ interface CreateZeroToOneDeps extends ToolDeps {
181
+ /** Optional homedir resolver — overridden in tests. */
182
+ homedir?: () => string;
183
+ /**
184
+ * Resolves the path of the editor-bound project (e.g. `bridge.getProjectPath()`).
185
+ * Used as the default `destinationParent` when the caller omits it, so new
186
+ * projects land alongside the user's open workspace instead of `~`. Returns
187
+ * `null` when no project is bound, in which case the tool falls back to
188
+ * `homedir()`.
189
+ */
190
+ getProjectPath?: () => string | null;
191
+ /** Ensure the Rivet UI server exists so the variants panel can attach. */
192
+ ensureVisualEditorOpen?: (input: {
193
+ projectPath: string;
194
+ framework: 'vite';
195
+ }) => Promise<VisualEditorAttachment>;
196
+ telemetry?: {
197
+ track(event: string, properties: Record<string, unknown>): void;
198
+ trackAgentVariantsSourceContextQuality?: (data: {
199
+ sessionId: string;
200
+ sourceUrlCount: number;
201
+ artifactCount: number;
202
+ hasScreenshotReferences: boolean;
203
+ preserveBrand: boolean;
204
+ }) => void;
205
+ /**
206
+ * Outcome metadata only — counts of links, successes, low-signal pages,
207
+ * fetch failures, blocked targets, the merge strategy, and the cache
208
+ * outcome counts. Full URLs, fetched HTML, file paths, and extracted
209
+ * text MUST NOT be forwarded. Coarse age/confidence buckets and
210
+ * cache-hit/miss/stale/version/regeneration counts are safe.
211
+ */
212
+ trackAgentVariantsInspirationExtraction?: (data: {
213
+ sessionId: string;
214
+ inspirationLinkCount: number;
215
+ referenceLinkCount: number;
216
+ successfulExtractions: number;
217
+ lowSignalCount: number;
218
+ fetchFailureCount: number;
219
+ blockedTargetCount: number;
220
+ mergeStrategy: 'merge' | 'separate' | 'none';
221
+ cacheHitCount: number;
222
+ cacheMissCount: number;
223
+ cacheStaleCount: number;
224
+ cacheVersionMismatchCount: number;
225
+ cacheLowConfidenceCount: number;
226
+ cacheRegenerationCount: number;
227
+ cacheForcedRefresh: boolean;
228
+ cacheReuseAgeBucket?: 'lt_1h' | '1h_24h' | '1d_7d' | '7d_30d' | 'gt_30d';
229
+ cacheReuseConfidenceBucket?: 'low' | 'medium' | 'high';
230
+ }) => void;
231
+ };
232
+ }
233
+ /**
234
+ * Register the `create_zero_to_one_project` convenience MCP tool. Normalizes
235
+ * the variant count, slugifies the prompt to derive a destination directory,
236
+ * validates the framework, and delegates to `proposeVariantsHandler` with
237
+ * `projectContext.kind = 'fresh'`.
238
+ */
239
+ export declare const registerCreateZeroToOneTool: (mcp: McpServer, deps: CreateZeroToOneDeps) => void;
240
+ export {};
241
+ //# sourceMappingURL=createZeroToOneTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createZeroToOneTool.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/createZeroToOneTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerCreateZeroToOneTool = exports.slugifyPrompt = exports.createZeroToOneInput = void 0;
7
+ const crypto_1 = require("crypto");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const v3_1 = require("zod/v3");
12
+ const viteReactTs_1 = require("../../services/templates/viteReactTs");
13
+ const contracts_1 = require("./contracts");
14
+ const errors_1 = require("./errors");
15
+ const SessionStore_1 = require("./SessionStore");
16
+ const sourceContext_1 = require("./sourceContext");
17
+ const DEFAULT_VARIANT_COUNT = 3;
18
+ const MIN_VARIANT_COUNT = 2;
19
+ const MAX_VARIANT_COUNT = 8;
20
+ const SLUG_SUFFIX_BYTES = 2;
21
+ exports.createZeroToOneInput = {
22
+ prompt: v3_1.z.string().min(1),
23
+ count: v3_1.z.number().int().min(MIN_VARIANT_COUNT).max(MAX_VARIANT_COUNT).optional(),
24
+ destinationParent: v3_1.z.string().optional(),
25
+ framework: v3_1.z.enum(['vite']).optional(),
26
+ sourceContext: contracts_1.sourceContextInputSchema.optional(),
27
+ sessionId: v3_1.z.string().optional(),
28
+ };
29
+ /**
30
+ * Slugify a prompt into a directory-safe kebab-case name with a short random
31
+ * suffix so concurrent calls with the same prompt don't collide.
32
+ */
33
+ const slugifyPrompt = (prompt) => {
34
+ const base = prompt
35
+ .toLowerCase()
36
+ .replace(/[^a-z0-9]+/g, '-')
37
+ .replace(/^-+|-+$/g, '')
38
+ .slice(0, 40);
39
+ const suffix = (0, crypto_1.randomBytes)(SLUG_SUFFIX_BYTES).toString('hex');
40
+ return base ? `${base}-${suffix}` : `rivet-app-${suffix}`;
41
+ };
42
+ exports.slugifyPrompt = slugifyPrompt;
43
+ const failed = (code, message) => ({
44
+ stage: 'failed',
45
+ errorCode: code,
46
+ message,
47
+ });
48
+ /**
49
+ * Returns true when a file-copy root is specific enough to authorize asset
50
+ * reads. Broad roots such as the home directory or filesystem root would let
51
+ * an agent-controlled asset plan copy unrelated personal files.
52
+ */
53
+ const isSpecificAssetSourceRoot = (root, homePath) => {
54
+ const resolvedRoot = path_1.default.resolve(root);
55
+ return (resolvedRoot !== path_1.default.resolve(homePath) &&
56
+ resolvedRoot !== path_1.default.parse(resolvedRoot).root);
57
+ };
58
+ /**
59
+ * Register the `create_zero_to_one_project` convenience MCP tool. Normalizes
60
+ * the variant count, slugifies the prompt to derive a destination directory,
61
+ * validates the framework, and delegates to `proposeVariantsHandler` with
62
+ * `projectContext.kind = 'fresh'`.
63
+ */
64
+ const registerCreateZeroToOneTool = (mcp, deps) => {
65
+ const homedir = deps.homedir ?? os_1.default.homedir;
66
+ mcp.tool('create_zero_to_one_project', 'Entry point for source-grounded fresh projects (inspiration URLs, custom design context). Slugifies the prompt into a destination directory under the user home, runs the source-research flow with an in-chat brief approval gate, and outputs static_preview HTML/CSS deliverables. Prefer start_variants(mode="zero_to_one") for prompt-only fresh projects without inspiration sources. Full protocol in the rivet skill.', exports.createZeroToOneInput, async (args) => {
67
+ try {
68
+ const framework = args.framework ?? 'vite';
69
+ if (framework !== 'vite') {
70
+ return jsonResponse(failed('UNSUPPORTED_FRAMEWORK', `create_zero_to_one_project only supports framework='vite' in v1; got '${framework}'.`));
71
+ }
72
+ const count = clampCount(args.count);
73
+ const inputSourceUrls = args.sourceContext?.sourceUrls ?? [];
74
+ const sourceUrls = (0, sourceContext_1.resolveSourceUrls)(args.prompt, args.sourceContext);
75
+ // Compare raw inputs in their normalized form so URLs that only
76
+ // differ by hash fragments or trailing punctuation aren't reported
77
+ // as dropped when they were in fact included.
78
+ const resolvedSet = new Set(sourceUrls);
79
+ const droppedUrls = inputSourceUrls.filter((u) => {
80
+ const normalized = (0, sourceContext_1.normalizeUrl)(u);
81
+ return normalized === null || !resolvedSet.has(normalized);
82
+ });
83
+ const warnings = droppedUrls.map((url) => `Skipped source URL '${url}' — failed validation (private network, unsupported scheme, or unreachable).`);
84
+ const sourceArtifacts = (0, sourceContext_1.normalizeSourceArtifacts)(args.sourceContext?.sourceArtifacts);
85
+ const projectPath = deps.getProjectPath?.() ?? undefined;
86
+ const destinationParent = args.destinationParent ?? projectPath ?? homedir();
87
+ if (!path_1.default.isAbsolute(destinationParent)) {
88
+ return jsonResponse(failed('SCHEMA_VALIDATION_FAILED', `destinationParent must be absolute; got '${destinationParent}'.`));
89
+ }
90
+ const slug = (0, exports.slugifyPrompt)(args.prompt);
91
+ const destinationPath = path_1.default.join(destinationParent, slug);
92
+ if (!(0, viteReactTs_1.isDestinationEmpty)(destinationPath)) {
93
+ return jsonResponse(failed('DESTINATION_NOT_EMPTY', `Destination '${destinationPath}' is not empty.`));
94
+ }
95
+ const assetSourceRoot = projectPath && isSpecificAssetSourceRoot(projectPath, homedir())
96
+ ? path_1.default.resolve(projectPath)
97
+ : undefined;
98
+ const projectContext = {
99
+ kind: 'fresh',
100
+ workspacePath: destinationPath,
101
+ framework: 'vite',
102
+ ...(assetSourceRoot ? { assetSourceRoot } : {}),
103
+ ...(sourceUrls.length > 0 ||
104
+ sourceArtifacts.length > 0 ||
105
+ args.sourceContext?.preserveBrand !== undefined
106
+ ? {
107
+ sourceContext: {
108
+ ...(sourceUrls.length > 0 ? { sourceUrls } : {}),
109
+ ...(sourceArtifacts.length > 0 ? { sourceArtifacts } : {}),
110
+ ...(args.sourceContext?.preserveBrand !== undefined
111
+ ? { preserveBrand: args.sourceContext.preserveBrand }
112
+ : {}),
113
+ },
114
+ }
115
+ : {}),
116
+ };
117
+ // Ensure the destination's parent exists so the materialize step at
118
+ // commit time has a directory to write into. The destination itself
119
+ // is created during materialize.
120
+ fs_1.default.mkdirSync(destinationParent, { recursive: true });
121
+ const proposeInput = {
122
+ sessionId: args.sessionId,
123
+ prompt: args.prompt,
124
+ count,
125
+ projectContext,
126
+ };
127
+ // Validate via the shared schema before delegating, so the proxy and
128
+ // direct callers see the same rejection shape.
129
+ const parsed = v3_1.z.object(contracts_1.proposeVariantsInput).safeParse(proposeInput);
130
+ if (!parsed.success) {
131
+ return jsonResponse(failed('SCHEMA_VALIDATION_FAILED', parsed.error.message));
132
+ }
133
+ const visualEditor = deps.ensureVisualEditorOpen
134
+ ? await deps.ensureVisualEditorOpen({
135
+ projectPath: destinationPath,
136
+ framework: 'vite',
137
+ })
138
+ : undefined;
139
+ const result = deps.orchestrator.propose(parsed.data);
140
+ if (sourceUrls.length > 0 || sourceArtifacts.length > 0) {
141
+ deps.telemetry?.trackAgentVariantsSourceContextQuality?.({
142
+ sessionId: result.sessionId,
143
+ sourceUrlCount: sourceUrls.length,
144
+ artifactCount: sourceArtifacts.length,
145
+ hasScreenshotReferences: sourceArtifacts.some((artifact) => artifact.kind === 'screenshotNotes'),
146
+ preserveBrand: Boolean(args.sourceContext?.preserveBrand),
147
+ });
148
+ }
149
+ if (result.stage === 'awaiting_source_plan') {
150
+ return jsonResponse({
151
+ sessionId: result.sessionId,
152
+ stage: 'awaiting_source_plan',
153
+ sourcePlanWorkItem: {
154
+ id: result.sourcePlanWorkItem.id,
155
+ kind: 'source_plan',
156
+ attempt: result.sourcePlanWorkItem.attempt,
157
+ input: result.sourcePlanWorkItem.input,
158
+ output_schema: SessionStore_1.SOURCE_PLAN_OUTPUT_SCHEMA,
159
+ },
160
+ nextAction: 'continue_variants',
161
+ ...(visualEditor ? { visualEditor } : {}),
162
+ ...(warnings.length > 0 ? { warnings } : {}),
163
+ });
164
+ }
165
+ return jsonResponse({
166
+ sessionId: result.sessionId,
167
+ stage: 'awaiting_briefs',
168
+ briefWorkItem: {
169
+ id: result.briefWorkItem.id,
170
+ kind: 'brief',
171
+ attempt: result.briefWorkItem.attempt,
172
+ input: result.briefWorkItem.input,
173
+ output_schema: { briefs: 'Array<{briefId, label, body}>' },
174
+ },
175
+ nextAction: 'report_variant_briefs',
176
+ ...(visualEditor ? { visualEditor } : {}),
177
+ ...(warnings.length > 0 ? { warnings } : {}),
178
+ });
179
+ }
180
+ catch (err) {
181
+ const code = err instanceof errors_1.AgentVariantsError
182
+ ? err.code
183
+ : 'SCHEMA_VALIDATION_FAILED';
184
+ const message = err instanceof Error
185
+ ? err.message
186
+ : 'Unknown error in create_zero_to_one_project';
187
+ return jsonResponse({
188
+ stage: 'failed',
189
+ errorCode: code,
190
+ message,
191
+ });
192
+ }
193
+ });
194
+ };
195
+ exports.registerCreateZeroToOneTool = registerCreateZeroToOneTool;
196
+ const clampCount = (count) => {
197
+ if (count === undefined)
198
+ return DEFAULT_VARIANT_COUNT;
199
+ if (count < MIN_VARIANT_COUNT)
200
+ return MIN_VARIANT_COUNT;
201
+ if (count > MAX_VARIANT_COUNT)
202
+ return MAX_VARIANT_COUNT;
203
+ return count;
204
+ };
205
+ const jsonResponse = (payload) => ({
206
+ content: [
207
+ {
208
+ type: 'text',
209
+ text: JSON.stringify(payload),
210
+ },
211
+ ],
212
+ });
213
+ //# sourceMappingURL=createZeroToOneTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createZeroToOneTool.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/createZeroToOneTool.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAqC;AACrC,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,+BAA2B;AAE3B,sEAA0E;AAC1E,2CAOqB;AACrB,qCAA8D;AAC9D,iDAA2D;AAC3D,mDAIyB;AAGzB,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEf,QAAA,oBAAoB,GAAG;IAClC,MAAM,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IAChF,iBAAiB,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,SAAS,EAAE,MAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,aAAa,EAAE,oCAAwB,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;AAWF;;;GAGG;AACI,MAAM,aAAa,GAAG,CAAC,MAAc,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM;SAChB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC;AAC5D,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB;AAEF,MAAM,MAAM,GAAG,CAAC,IAAe,EAAE,OAAe,EAAyB,EAAE,CAAC,CAAC;IAC3E,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,IAAI;IACf,OAAO;CACR,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAW,EAAE;IAC5E,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CACL,YAAY,KAAK,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,YAAY,KAAK,cAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAC/C,CAAC;AACJ,CAAC,CAAC;AAwDF;;;;;GAKG;AACI,MAAM,2BAA2B,GAAG,CACzC,GAAc,EACd,IAAyB,EACnB,EAAE;IACR,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,YAAE,CAAC,OAAO,CAAC;IAC3C,GAAG,CAAC,IAAI,CACN,4BAA4B,EAC5B,+ZAA+Z,EAC/Z,4BAAoB,EACpB,KAAK,EAAE,IAA0B,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;YAC3C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,YAAY,CACjB,MAAM,CACJ,uBAAuB,EACvB,yEAAyE,SAAS,IAAI,CACvF,CACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,IAAI,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAA,iCAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACtE,gEAAgE;YAChE,mEAAmE;YACnE,8CAA8C;YAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/C,MAAM,UAAU,GAAG,IAAA,4BAAY,EAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,UAAU,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAa,WAAW,CAAC,GAAG,CACxC,CAAC,GAAG,EAAE,EAAE,CACN,uBAAuB,GAAG,8EAA8E,CAC3G,CAAC;YACF,MAAM,eAAe,GAAG,IAAA,wCAAwB,EAC9C,IAAI,CAAC,aAAa,EAAE,eAAe,CACpC,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,SAAS,CAAC;YACzD,MAAM,iBAAiB,GACrB,IAAI,CAAC,iBAAiB,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YACrD,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxC,OAAO,YAAY,CACjB,MAAM,CACJ,0BAA0B,EAC1B,4CAA4C,iBAAiB,IAAI,CAClE,CACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAA,gCAAkB,EAAC,eAAe,CAAC,EAAE,CAAC;gBACzC,OAAO,YAAY,CACjB,MAAM,CACJ,uBAAuB,EACvB,gBAAgB,eAAe,iBAAiB,CACjD,CACF,CAAC;YACJ,CAAC;YACD,MAAM,eAAe,GACnB,WAAW,IAAI,yBAAyB,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;gBAC9D,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,cAAc,GAAmB;gBACrC,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,eAAe;gBAC9B,SAAS,EAAE,MAAM;gBACjB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;oBACzB,eAAe,CAAC,MAAM,GAAG,CAAC;oBAC1B,IAAI,CAAC,aAAa,EAAE,aAAa,KAAK,SAAS;oBAC7C,CAAC,CAAC;wBACE,aAAa,EAAE;4BACb,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAChD,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC1D,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,KAAK,SAAS;gCACjD,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;gCACrD,CAAC,CAAC,EAAE,CAAC;yBACR;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YAEF,oEAAoE;YACpE,oEAAoE;YACpE,iCAAiC;YACjC,YAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,MAAM,YAAY,GAAyB;gBACzC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK;gBACL,cAAc;aACf,CAAC;YAEF,qEAAqE;YACrE,+CAA+C;YAC/C,MAAM,MAAM,GAAG,MAAC,CAAC,MAAM,CAAC,gCAAoB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,YAAY,CACjB,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CACzD,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB;gBAC9C,CAAC,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC;oBAChC,WAAW,EAAE,eAAe;oBAC5B,SAAS,EAAE,MAAM;iBAClB,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,SAAS,EAAE,sCAAsC,EAAE,CAAC;oBACvD,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,cAAc,EAAE,UAAU,CAAC,MAAM;oBACjC,aAAa,EAAE,eAAe,CAAC,MAAM;oBACrC,uBAAuB,EAAE,eAAe,CAAC,IAAI,CAC3C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,iBAAiB,CAClD;oBACD,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;iBAC1D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,YAAY,CAAC;oBAClB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,KAAK,EAAE,sBAAsB;oBAC7B,kBAAkB,EAAE;wBAClB,EAAE,EAAE,MAAM,CAAC,kBAAmB,CAAC,EAAE;wBACjC,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,MAAM,CAAC,kBAAmB,CAAC,OAAO;wBAC3C,KAAK,EAAE,MAAM,CAAC,kBAAmB,CAAC,KAAK;wBACvC,aAAa,EAAE,wCAAyB;qBACzC;oBACD,UAAU,EAAE,mBAAmB;oBAC/B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC;YACD,OAAO,YAAY,CAAC;gBAClB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,iBAAiB;gBACxB,aAAa,EAAE;oBACb,EAAE,EAAE,MAAM,CAAC,aAAc,CAAC,EAAE;oBAC5B,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,MAAM,CAAC,aAAc,CAAC,OAAO;oBACtC,KAAK,EAAE,MAAM,CAAC,aAAc,CAAC,KAAK;oBAClC,aAAa,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE;iBAC3D;gBACD,UAAU,EAAE,uBAAuB;gBACnC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GACR,GAAG,YAAY,2BAAkB;gBAC/B,CAAC,CAAC,GAAG,CAAC,IAAI;gBACV,CAAC,CAAC,0BAA0B,CAAC;YACjC,MAAM,OAAO,GACX,GAAG,YAAY,KAAK;gBAClB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,6CAA6C,CAAC;YACpD,OAAO,YAAY,CAAC;gBAClB,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,IAAI;gBACf,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AA9KW,QAAA,2BAA2B,+BA8KtC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAU,EAAE;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAC;IACtD,IAAI,KAAK,GAAG,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IACxD,IAAI,KAAK,GAAG,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAI,OAAU,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B;KACF;CACF,CAAC,CAAC"}