rivet-design 0.12.4 → 0.13.1

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 (535) hide show
  1. package/README.md +50 -26
  2. package/README.npm.md +50 -26
  3. package/bin/rivet.js +39 -24
  4. package/dist/{mcp/agent-variants → agent-variants}/SessionStore.d.ts +13 -20
  5. package/dist/agent-variants/SessionStore.d.ts.map +1 -0
  6. package/dist/{mcp/agent-variants → agent-variants}/SessionStore.js +74 -84
  7. package/dist/agent-variants/SessionStore.js.map +1 -0
  8. package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.d.ts +58 -25
  9. package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -0
  10. package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.js +299 -57
  11. package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -0
  12. package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.testHelpers.d.ts +1 -9
  13. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -0
  14. package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.testHelpers.js +3 -18
  15. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -0
  16. package/dist/agent-variants/briefContent.d.ts.map +1 -0
  17. package/dist/agent-variants/briefContent.js.map +1 -0
  18. package/dist/{mcp/agent-variants → agent-variants}/contracts.d.ts +716 -722
  19. package/dist/agent-variants/contracts.d.ts.map +1 -0
  20. package/dist/{mcp/agent-variants → agent-variants}/contracts.js +4 -5
  21. package/dist/agent-variants/contracts.js.map +1 -0
  22. package/dist/agent-variants/createProjectArtifacts.d.ts.map +1 -0
  23. package/dist/agent-variants/createProjectArtifacts.js.map +1 -0
  24. package/dist/agent-variants/diffQa.d.ts.map +1 -0
  25. package/dist/agent-variants/diffQa.js.map +1 -0
  26. package/dist/{mcp/agent-variants → agent-variants}/elementRefToTarget.d.ts +1 -1
  27. package/dist/agent-variants/elementRefToTarget.d.ts.map +1 -0
  28. package/dist/agent-variants/elementRefToTarget.js.map +1 -0
  29. package/dist/agent-variants/errors.d.ts.map +1 -0
  30. package/dist/agent-variants/errors.js.map +1 -0
  31. package/dist/agent-variants/generatedDestination.d.ts +29 -0
  32. package/dist/agent-variants/generatedDestination.d.ts.map +1 -0
  33. package/dist/agent-variants/generatedDestination.js +59 -0
  34. package/dist/agent-variants/generatedDestination.js.map +1 -0
  35. package/dist/{mcp/agent-variants → agent-variants}/index.d.ts +3 -6
  36. package/dist/agent-variants/index.d.ts.map +1 -0
  37. package/dist/{mcp/agent-variants → agent-variants}/index.js +3 -6
  38. package/dist/agent-variants/index.js.map +1 -0
  39. package/dist/agent-variants/previewQa.d.ts.map +1 -0
  40. package/dist/agent-variants/previewQa.js.map +1 -0
  41. package/dist/agent-variants/runLabel.d.ts.map +1 -0
  42. package/dist/agent-variants/runLabel.js.map +1 -0
  43. package/dist/agent-variants/runPlan.d.ts.map +1 -0
  44. package/dist/agent-variants/runPlan.js.map +1 -0
  45. package/dist/agent-variants/sourceContext.d.ts.map +1 -0
  46. package/dist/agent-variants/sourceContext.js.map +1 -0
  47. package/dist/agent-variants/variantContext.d.ts.map +1 -0
  48. package/dist/agent-variants/variantContext.js.map +1 -0
  49. package/dist/cli/client.d.ts +43 -0
  50. package/dist/cli/client.d.ts.map +1 -0
  51. package/dist/cli/client.js +109 -0
  52. package/dist/cli/client.js.map +1 -0
  53. package/dist/cli/commandNames.d.ts +9 -0
  54. package/dist/cli/commandNames.d.ts.map +1 -0
  55. package/dist/cli/commandNames.js +24 -0
  56. package/dist/cli/commandNames.js.map +1 -0
  57. package/dist/cli/commands/auth.d.ts +10 -0
  58. package/dist/cli/commands/auth.d.ts.map +1 -0
  59. package/dist/cli/commands/auth.js +81 -0
  60. package/dist/cli/commands/auth.js.map +1 -0
  61. package/dist/cli/commands/elementSelector.d.ts +10 -0
  62. package/dist/cli/commands/elementSelector.d.ts.map +1 -0
  63. package/dist/cli/commands/elementSelector.js +41 -0
  64. package/dist/cli/commands/elementSelector.js.map +1 -0
  65. package/dist/cli/commands/evidence.d.ts +9 -0
  66. package/dist/cli/commands/evidence.d.ts.map +1 -0
  67. package/dist/cli/commands/evidence.js +85 -0
  68. package/dist/cli/commands/evidence.js.map +1 -0
  69. package/dist/cli/commands/mcpServe.d.ts +40 -0
  70. package/dist/cli/commands/mcpServe.d.ts.map +1 -0
  71. package/dist/cli/commands/mcpServe.js +485 -0
  72. package/dist/cli/commands/mcpServe.js.map +1 -0
  73. package/dist/cli/commands/open.d.ts +28 -0
  74. package/dist/cli/commands/open.d.ts.map +1 -0
  75. package/dist/cli/commands/open.js +280 -0
  76. package/dist/cli/commands/open.js.map +1 -0
  77. package/dist/cli/commands/reference.d.ts +8 -0
  78. package/dist/cli/commands/reference.d.ts.map +1 -0
  79. package/dist/cli/commands/reference.js +101 -0
  80. package/dist/cli/commands/reference.js.map +1 -0
  81. package/dist/cli/commands/serve.d.ts +9 -0
  82. package/dist/cli/commands/serve.d.ts.map +1 -0
  83. package/dist/cli/commands/serve.js +182 -0
  84. package/dist/cli/commands/serve.js.map +1 -0
  85. package/dist/cli/commands/shared.d.ts +31 -0
  86. package/dist/cli/commands/shared.d.ts.map +1 -0
  87. package/dist/cli/commands/shared.js +82 -0
  88. package/dist/cli/commands/shared.js.map +1 -0
  89. package/dist/cli/commands/status.d.ts +10 -0
  90. package/dist/cli/commands/status.d.ts.map +1 -0
  91. package/dist/cli/commands/status.js +61 -0
  92. package/dist/cli/commands/status.js.map +1 -0
  93. package/dist/cli/commands/stop.d.ts +8 -0
  94. package/dist/cli/commands/stop.d.ts.map +1 -0
  95. package/dist/cli/commands/stop.js +41 -0
  96. package/dist/cli/commands/stop.js.map +1 -0
  97. package/dist/cli/commands/variants.d.ts +4 -0
  98. package/dist/cli/commands/variants.d.ts.map +1 -0
  99. package/dist/cli/commands/variants.js +435 -0
  100. package/dist/cli/commands/variants.js.map +1 -0
  101. package/dist/cli/commands/wait.d.ts +10 -0
  102. package/dist/cli/commands/wait.d.ts.map +1 -0
  103. package/dist/cli/commands/wait.js +101 -0
  104. package/dist/cli/commands/wait.js.map +1 -0
  105. package/dist/cli/entry.d.ts +12 -0
  106. package/dist/cli/entry.d.ts.map +1 -0
  107. package/dist/cli/entry.js +61 -0
  108. package/dist/cli/entry.js.map +1 -0
  109. package/dist/cli/envelope.d.ts +60 -0
  110. package/dist/cli/envelope.d.ts.map +1 -0
  111. package/dist/cli/envelope.js +57 -0
  112. package/dist/cli/envelope.js.map +1 -0
  113. package/dist/cli/flags.d.ts +20 -0
  114. package/dist/cli/flags.d.ts.map +1 -0
  115. package/dist/cli/flags.js +72 -0
  116. package/dist/cli/flags.js.map +1 -0
  117. package/dist/cli/handoff.d.ts +54 -0
  118. package/dist/cli/handoff.d.ts.map +1 -0
  119. package/dist/cli/handoff.js +106 -0
  120. package/dist/cli/handoff.js.map +1 -0
  121. package/dist/cli/handoffStore.d.ts +24 -0
  122. package/dist/cli/handoffStore.d.ts.map +1 -0
  123. package/dist/cli/handoffStore.js +49 -0
  124. package/dist/cli/handoffStore.js.map +1 -0
  125. package/dist/cli/hostWorkNextAction.d.ts +45 -0
  126. package/dist/cli/hostWorkNextAction.d.ts.map +1 -0
  127. package/dist/cli/hostWorkNextAction.js +43 -0
  128. package/dist/cli/hostWorkNextAction.js.map +1 -0
  129. package/dist/cli/io.d.ts +17 -0
  130. package/dist/cli/io.d.ts.map +1 -0
  131. package/dist/cli/io.js +19 -0
  132. package/dist/cli/io.js.map +1 -0
  133. package/dist/cli/router.d.ts +23 -0
  134. package/dist/cli/router.d.ts.map +1 -0
  135. package/dist/cli/router.js +236 -0
  136. package/dist/cli/router.js.map +1 -0
  137. package/dist/cli/runnerSelection.d.ts +60 -0
  138. package/dist/cli/runnerSelection.d.ts.map +1 -0
  139. package/dist/cli/runnerSelection.js +93 -0
  140. package/dist/cli/runnerSelection.js.map +1 -0
  141. package/dist/cli/serverHandshake.d.ts +51 -0
  142. package/dist/cli/serverHandshake.d.ts.map +1 -0
  143. package/dist/cli/serverHandshake.js +144 -0
  144. package/dist/cli/serverHandshake.js.map +1 -0
  145. package/dist/index.d.ts +2 -14
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +84 -138
  148. package/dist/index.js.map +1 -1
  149. package/dist/install/allowlists.d.ts +65 -0
  150. package/dist/install/allowlists.d.ts.map +1 -0
  151. package/dist/install/allowlists.js +333 -0
  152. package/dist/install/allowlists.js.map +1 -0
  153. package/dist/install/codexGuidance.d.ts +11 -0
  154. package/dist/install/codexGuidance.d.ts.map +1 -0
  155. package/dist/install/codexGuidance.js +90 -0
  156. package/dist/install/codexGuidance.js.map +1 -0
  157. package/dist/install/harnesses.d.ts +37 -26
  158. package/dist/install/harnesses.d.ts.map +1 -1
  159. package/dist/install/harnesses.js +312 -502
  160. package/dist/install/harnesses.js.map +1 -1
  161. package/dist/install/legacyMcp.d.ts +26 -0
  162. package/dist/install/legacyMcp.d.ts.map +1 -0
  163. package/dist/install/legacyMcp.js +160 -0
  164. package/dist/install/legacyMcp.js.map +1 -0
  165. package/dist/install/mcpRegistration.d.ts +45 -0
  166. package/dist/install/mcpRegistration.d.ts.map +1 -0
  167. package/dist/install/mcpRegistration.js +215 -0
  168. package/dist/install/mcpRegistration.js.map +1 -0
  169. package/dist/mcp/changeBatchClassification.d.ts +20 -20
  170. package/dist/mcp/changeBatchClassification.d.ts.map +1 -1
  171. package/dist/mcp/changeBatchClassification.js +46 -46
  172. package/dist/mcp/changeBatchClassification.js.map +1 -1
  173. package/dist/proxy-middleware/proxy-config.d.ts +6 -0
  174. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  175. package/dist/proxy-middleware/proxy-config.js +162 -5
  176. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  177. package/dist/routes/agentVariants.d.ts +14 -2
  178. package/dist/routes/agentVariants.d.ts.map +1 -1
  179. package/dist/routes/agentVariants.js +366 -65
  180. package/dist/routes/agentVariants.js.map +1 -1
  181. package/dist/routes/cli.d.ts +31 -0
  182. package/dist/routes/cli.d.ts.map +1 -0
  183. package/dist/routes/cli.js +95 -0
  184. package/dist/routes/cli.js.map +1 -0
  185. package/dist/routes/git.d.ts +1 -0
  186. package/dist/routes/git.d.ts.map +1 -1
  187. package/dist/routes/git.js +2 -1
  188. package/dist/routes/git.js.map +1 -1
  189. package/dist/routes/inlineStartTracker.d.ts +23 -0
  190. package/dist/routes/inlineStartTracker.d.ts.map +1 -0
  191. package/dist/routes/inlineStartTracker.js +17 -0
  192. package/dist/routes/inlineStartTracker.js.map +1 -0
  193. package/dist/routes/mcp.d.ts +2 -12
  194. package/dist/routes/mcp.d.ts.map +1 -1
  195. package/dist/routes/mcp.js +4 -785
  196. package/dist/routes/mcp.js.map +1 -1
  197. package/dist/server.d.ts +24 -9
  198. package/dist/server.d.ts.map +1 -1
  199. package/dist/server.js +169 -33
  200. package/dist/server.js.map +1 -1
  201. package/dist/services/CommitMessageGenerator.d.ts +9 -1
  202. package/dist/services/CommitMessageGenerator.d.ts.map +1 -1
  203. package/dist/services/CommitMessageGenerator.js +4 -1
  204. package/dist/services/CommitMessageGenerator.js.map +1 -1
  205. package/dist/services/ComponentSearchService.d.ts +4 -1
  206. package/dist/services/ComponentSearchService.d.ts.map +1 -1
  207. package/dist/services/ComponentSearchService.js.map +1 -1
  208. package/dist/services/ConfigManager.d.ts +8 -0
  209. package/dist/services/ConfigManager.d.ts.map +1 -1
  210. package/dist/services/ConfigManager.js +9 -0
  211. package/dist/services/ConfigManager.js.map +1 -1
  212. package/dist/services/HistoryReplayService.d.ts +20 -9
  213. package/dist/services/HistoryReplayService.d.ts.map +1 -1
  214. package/dist/services/HistoryReplayService.js +99 -43
  215. package/dist/services/HistoryReplayService.js.map +1 -1
  216. package/dist/services/MCPVariantsTelemetry.d.ts +1 -1
  217. package/dist/services/MCPVariantsTelemetry.d.ts.map +1 -1
  218. package/dist/services/MCPVariantsTelemetry.js +1 -0
  219. package/dist/services/MCPVariantsTelemetry.js.map +1 -1
  220. package/dist/services/PRTitleGenerator.d.ts +10 -2
  221. package/dist/services/PRTitleGenerator.d.ts.map +1 -1
  222. package/dist/services/PRTitleGenerator.js +8 -2
  223. package/dist/services/PRTitleGenerator.js.map +1 -1
  224. package/dist/services/ProjectDetectionService.d.ts.map +1 -1
  225. package/dist/services/ProjectDetectionService.js +14 -4
  226. package/dist/services/ProjectDetectionService.js.map +1 -1
  227. package/dist/services/ProjectMetadataStore.d.ts +115 -0
  228. package/dist/services/ProjectMetadataStore.d.ts.map +1 -0
  229. package/dist/services/ProjectMetadataStore.js +336 -0
  230. package/dist/services/ProjectMetadataStore.js.map +1 -0
  231. package/dist/services/SessionBridgeService.d.ts +52 -224
  232. package/dist/services/SessionBridgeService.d.ts.map +1 -1
  233. package/dist/services/SessionBridgeService.js +97 -649
  234. package/dist/services/SessionBridgeService.js.map +1 -1
  235. package/dist/services/SessionService.d.ts +4 -1
  236. package/dist/services/SessionService.d.ts.map +1 -1
  237. package/dist/services/SessionService.js +7 -4
  238. package/dist/services/SessionService.js.map +1 -1
  239. package/dist/services/StaticFileService.d.ts.map +1 -1
  240. package/dist/services/StaticFileService.js +6 -0
  241. package/dist/services/StaticFileService.js.map +1 -1
  242. package/dist/services/TelemetryService.d.ts +16 -80
  243. package/dist/services/TelemetryService.d.ts.map +1 -1
  244. package/dist/services/TelemetryService.js +18 -94
  245. package/dist/services/TelemetryService.js.map +1 -1
  246. package/dist/services/VariantGenerationService.d.ts +45 -0
  247. package/dist/services/VariantGenerationService.d.ts.map +1 -0
  248. package/dist/services/VariantGenerationService.js +214 -0
  249. package/dist/services/VariantGenerationService.js.map +1 -0
  250. package/dist/services/VariantHistoryService.d.ts +37 -1
  251. package/dist/services/VariantHistoryService.d.ts.map +1 -1
  252. package/dist/services/VariantHistoryService.js +122 -1
  253. package/dist/services/VariantHistoryService.js.map +1 -1
  254. package/dist/services/VariantRunService.d.ts +25 -6
  255. package/dist/services/VariantRunService.d.ts.map +1 -1
  256. package/dist/services/VariantRunService.js +99 -4
  257. package/dist/services/VariantRunService.js.map +1 -1
  258. package/dist/services/VariantsRuntime.d.ts +1 -3
  259. package/dist/services/VariantsRuntime.d.ts.map +1 -1
  260. package/dist/services/VariantsRuntime.js +0 -1
  261. package/dist/services/VariantsRuntime.js.map +1 -1
  262. package/dist/services/WorktreeManager.d.ts +1 -1
  263. package/dist/services/WorktreeManager.d.ts.map +1 -1
  264. package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -2
  265. package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
  266. package/dist/services/createAgentVariantsOrchestrator.js +2 -3
  267. package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
  268. package/dist/services/projectMetadataMigrations.d.ts +59 -0
  269. package/dist/services/projectMetadataMigrations.d.ts.map +1 -0
  270. package/dist/services/projectMetadataMigrations.js +109 -0
  271. package/dist/services/projectMetadataMigrations.js.map +1 -0
  272. package/dist/types/change-request-types.d.ts +32 -4
  273. package/dist/types/change-request-types.d.ts.map +1 -1
  274. package/dist/utils/logger.d.ts +2 -1
  275. package/dist/utils/logger.d.ts.map +1 -1
  276. package/dist/utils/logger.js +3 -7
  277. package/dist/utils/logger.js.map +1 -1
  278. package/dist/utils/loopback.d.ts +3 -0
  279. package/dist/utils/loopback.d.ts.map +1 -0
  280. package/dist/utils/loopback.js +13 -0
  281. package/dist/utils/loopback.js.map +1 -0
  282. package/dist/utils/pid.d.ts +3 -0
  283. package/dist/utils/pid.d.ts.map +1 -0
  284. package/dist/utils/pid.js +15 -0
  285. package/dist/utils/pid.js.map +1 -0
  286. package/dist/utils/queueAccess.d.ts +7 -0
  287. package/dist/utils/queueAccess.d.ts.map +1 -1
  288. package/dist/utils/queueAccess.js +8 -1
  289. package/dist/utils/queueAccess.js.map +1 -1
  290. package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts +3 -3
  291. package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts.map +1 -1
  292. package/dist/utils/shouldRecordHostedDemoSessionAction.js +3 -19
  293. package/dist/utils/shouldRecordHostedDemoSessionAction.js.map +1 -1
  294. package/dist/utils/skillWriter.d.ts.map +1 -1
  295. package/dist/utils/skillWriter.js +12 -11
  296. package/dist/utils/skillWriter.js.map +1 -1
  297. package/dist/utils/skills/claude-skill.d.ts +7 -2
  298. package/dist/utils/skills/claude-skill.d.ts.map +1 -1
  299. package/dist/utils/skills/claude-skill.js +10 -83
  300. package/dist/utils/skills/claude-skill.js.map +1 -1
  301. package/dist/utils/skills/cli-guidance.d.ts +12 -0
  302. package/dist/utils/skills/cli-guidance.d.ts.map +1 -0
  303. package/dist/utils/skills/cli-guidance.js +59 -0
  304. package/dist/utils/skills/cli-guidance.js.map +1 -0
  305. package/dist/utils/skills/cursor-rules.d.ts +8 -2
  306. package/dist/utils/skills/cursor-rules.d.ts.map +1 -1
  307. package/dist/utils/skills/cursor-rules.js +11 -80
  308. package/dist/utils/skills/cursor-rules.js.map +1 -1
  309. package/dist/utils/variantSessionStart.d.ts +1 -1
  310. package/dist/utils/variantSessionStart.d.ts.map +1 -1
  311. package/dist/utils/variantSessionStart.js +1 -1
  312. package/dist/utils/variantSessionStart.js.map +1 -1
  313. package/package.json +4 -4
  314. package/src/ui/dist/assets/main-B725ucb9.js +419 -0
  315. package/src/ui/dist/assets/main-Dyos9I29.css +1 -0
  316. package/src/ui/dist/index.html +2 -2
  317. package/dist/mcp/agent-variants/SessionStore.d.ts.map +0 -1
  318. package/dist/mcp/agent-variants/SessionStore.js.map +0 -1
  319. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +0 -1
  320. package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +0 -1
  321. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +0 -1
  322. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +0 -1
  323. package/dist/mcp/agent-variants/areNaSourceContext.d.ts +0 -20
  324. package/dist/mcp/agent-variants/areNaSourceContext.d.ts.map +0 -1
  325. package/dist/mcp/agent-variants/areNaSourceContext.js +0 -118
  326. package/dist/mcp/agent-variants/areNaSourceContext.js.map +0 -1
  327. package/dist/mcp/agent-variants/briefContent.d.ts.map +0 -1
  328. package/dist/mcp/agent-variants/briefContent.js.map +0 -1
  329. package/dist/mcp/agent-variants/contracts.d.ts.map +0 -1
  330. package/dist/mcp/agent-variants/contracts.js.map +0 -1
  331. package/dist/mcp/agent-variants/createProjectArtifacts.d.ts.map +0 -1
  332. package/dist/mcp/agent-variants/createProjectArtifacts.js.map +0 -1
  333. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +0 -63
  334. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +0 -1
  335. package/dist/mcp/agent-variants/createZeroToOneTool.js +0 -265
  336. package/dist/mcp/agent-variants/createZeroToOneTool.js.map +0 -1
  337. package/dist/mcp/agent-variants/diffQa.d.ts.map +0 -1
  338. package/dist/mcp/agent-variants/diffQa.js.map +0 -1
  339. package/dist/mcp/agent-variants/elementRefToTarget.d.ts.map +0 -1
  340. package/dist/mcp/agent-variants/elementRefToTarget.js.map +0 -1
  341. package/dist/mcp/agent-variants/errors.d.ts.map +0 -1
  342. package/dist/mcp/agent-variants/errors.js.map +0 -1
  343. package/dist/mcp/agent-variants/generatedDestination.d.ts +0 -75
  344. package/dist/mcp/agent-variants/generatedDestination.d.ts.map +0 -1
  345. package/dist/mcp/agent-variants/generatedDestination.js +0 -103
  346. package/dist/mcp/agent-variants/generatedDestination.js.map +0 -1
  347. package/dist/mcp/agent-variants/index.d.ts.map +0 -1
  348. package/dist/mcp/agent-variants/index.js.map +0 -1
  349. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts +0 -38
  350. package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts.map +0 -1
  351. package/dist/mcp/agent-variants/pendingChangesAdapter.js +0 -93
  352. package/dist/mcp/agent-variants/pendingChangesAdapter.js.map +0 -1
  353. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +0 -23
  354. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +0 -1
  355. package/dist/mcp/agent-variants/pinterestSourceContext.js +0 -137
  356. package/dist/mcp/agent-variants/pinterestSourceContext.js.map +0 -1
  357. package/dist/mcp/agent-variants/previewQa.d.ts.map +0 -1
  358. package/dist/mcp/agent-variants/previewQa.js.map +0 -1
  359. package/dist/mcp/agent-variants/runLabel.d.ts.map +0 -1
  360. package/dist/mcp/agent-variants/runLabel.js.map +0 -1
  361. package/dist/mcp/agent-variants/runPlan.d.ts.map +0 -1
  362. package/dist/mcp/agent-variants/runPlan.js.map +0 -1
  363. package/dist/mcp/agent-variants/sourceContext.d.ts.map +0 -1
  364. package/dist/mcp/agent-variants/sourceContext.js.map +0 -1
  365. package/dist/mcp/agent-variants/tools.d.ts +0 -187
  366. package/dist/mcp/agent-variants/tools.d.ts.map +0 -1
  367. package/dist/mcp/agent-variants/tools.js +0 -1165
  368. package/dist/mcp/agent-variants/tools.js.map +0 -1
  369. package/dist/mcp/agent-variants/variantContext.d.ts.map +0 -1
  370. package/dist/mcp/agent-variants/variantContext.js.map +0 -1
  371. package/dist/mcp/auth/httpOAuthProvider.d.ts +0 -103
  372. package/dist/mcp/auth/httpOAuthProvider.d.ts.map +0 -1
  373. package/dist/mcp/auth/httpOAuthProvider.js +0 -735
  374. package/dist/mcp/auth/httpOAuthProvider.js.map +0 -1
  375. package/dist/mcp/auth/tools.d.ts +0 -39
  376. package/dist/mcp/auth/tools.d.ts.map +0 -1
  377. package/dist/mcp/auth/tools.js +0 -304
  378. package/dist/mcp/auth/tools.js.map +0 -1
  379. package/dist/mcp/branding.d.ts +0 -4
  380. package/dist/mcp/branding.d.ts.map +0 -1
  381. package/dist/mcp/branding.js +0 -8
  382. package/dist/mcp/branding.js.map +0 -1
  383. package/dist/mcp/hostedServer.d.ts +0 -27
  384. package/dist/mcp/hostedServer.d.ts.map +0 -1
  385. package/dist/mcp/hostedServer.js +0 -71
  386. package/dist/mcp/hostedServer.js.map +0 -1
  387. package/dist/mcp/httpServer.d.ts +0 -63
  388. package/dist/mcp/httpServer.d.ts.map +0 -1
  389. package/dist/mcp/httpServer.js +0 -602
  390. package/dist/mcp/httpServer.js.map +0 -1
  391. package/dist/mcp/instructions.d.ts +0 -25
  392. package/dist/mcp/instructions.d.ts.map +0 -1
  393. package/dist/mcp/instructions.js +0 -39
  394. package/dist/mcp/instructions.js.map +0 -1
  395. package/dist/mcp/integrations/tools.d.ts +0 -19
  396. package/dist/mcp/integrations/tools.d.ts.map +0 -1
  397. package/dist/mcp/integrations/tools.js +0 -101
  398. package/dist/mcp/integrations/tools.js.map +0 -1
  399. package/dist/mcp/server.d.ts +0 -214
  400. package/dist/mcp/server.d.ts.map +0 -1
  401. package/dist/mcp/server.js +0 -2536
  402. package/dist/mcp/server.js.map +0 -1
  403. package/dist/mcp/toolAnalytics.d.ts +0 -26
  404. package/dist/mcp/toolAnalytics.d.ts.map +0 -1
  405. package/dist/mcp/toolAnalytics.js +0 -95
  406. package/dist/mcp/toolAnalytics.js.map +0 -1
  407. package/dist/mcp/types.d.ts +0 -7
  408. package/dist/mcp/types.d.ts.map +0 -1
  409. package/dist/mcp/types.js +0 -3
  410. package/dist/mcp/types.js.map +0 -1
  411. package/dist/mcp/watchLoopResumePrompt.d.ts +0 -16
  412. package/dist/mcp/watchLoopResumePrompt.d.ts.map +0 -1
  413. package/dist/mcp/watchLoopResumePrompt.js +0 -21
  414. package/dist/mcp/watchLoopResumePrompt.js.map +0 -1
  415. package/dist/prompts/agentModPrompts.d.ts +0 -4
  416. package/dist/prompts/agentModPrompts.d.ts.map +0 -1
  417. package/dist/prompts/agentModPrompts.js +0 -34
  418. package/dist/prompts/agentModPrompts.js.map +0 -1
  419. package/dist/prompts/tokenWriterPrompts.d.ts +0 -4
  420. package/dist/prompts/tokenWriterPrompts.d.ts.map +0 -1
  421. package/dist/prompts/tokenWriterPrompts.js +0 -59
  422. package/dist/prompts/tokenWriterPrompts.js.map +0 -1
  423. package/dist/routes/comments.d.ts +0 -3
  424. package/dist/routes/comments.d.ts.map +0 -1
  425. package/dist/routes/comments.js +0 -113
  426. package/dist/routes/comments.js.map +0 -1
  427. package/dist/routes/components.d.ts +0 -7
  428. package/dist/routes/components.d.ts.map +0 -1
  429. package/dist/routes/components.js +0 -88
  430. package/dist/routes/components.js.map +0 -1
  431. package/dist/routes/controls.d.ts +0 -7
  432. package/dist/routes/controls.d.ts.map +0 -1
  433. package/dist/routes/controls.js +0 -50
  434. package/dist/routes/controls.js.map +0 -1
  435. package/dist/routes/design.d.ts +0 -2
  436. package/dist/routes/design.d.ts.map +0 -1
  437. package/dist/routes/design.js +0 -29
  438. package/dist/routes/design.js.map +0 -1
  439. package/dist/routes/modifications.d.ts +0 -10
  440. package/dist/routes/modifications.d.ts.map +0 -1
  441. package/dist/routes/modifications.js +0 -394
  442. package/dist/routes/modifications.js.map +0 -1
  443. package/dist/routes/tokens.d.ts +0 -2
  444. package/dist/routes/tokens.d.ts.map +0 -1
  445. package/dist/routes/tokens.js +0 -115
  446. package/dist/routes/tokens.js.map +0 -1
  447. package/dist/services/AgentSessionService.d.ts +0 -91
  448. package/dist/services/AgentSessionService.d.ts.map +0 -1
  449. package/dist/services/AgentSessionService.js +0 -282
  450. package/dist/services/AgentSessionService.js.map +0 -1
  451. package/dist/services/BridgeBatchPipeline.d.ts +0 -103
  452. package/dist/services/BridgeBatchPipeline.d.ts.map +0 -1
  453. package/dist/services/BridgeBatchPipeline.js +0 -295
  454. package/dist/services/BridgeBatchPipeline.js.map +0 -1
  455. package/dist/services/BridgeQueueStore.d.ts +0 -28
  456. package/dist/services/BridgeQueueStore.d.ts.map +0 -1
  457. package/dist/services/BridgeQueueStore.js +0 -88
  458. package/dist/services/BridgeQueueStore.js.map +0 -1
  459. package/dist/services/CSSTokenWriter.d.ts +0 -22
  460. package/dist/services/CSSTokenWriter.d.ts.map +0 -1
  461. package/dist/services/CSSTokenWriter.js +0 -116
  462. package/dist/services/CSSTokenWriter.js.map +0 -1
  463. package/dist/services/DesignTokenService.d.ts +0 -39
  464. package/dist/services/DesignTokenService.d.ts.map +0 -1
  465. package/dist/services/DesignTokenService.js +0 -100
  466. package/dist/services/DesignTokenService.js.map +0 -1
  467. package/dist/services/InlineVariantGenerationService.d.ts +0 -51
  468. package/dist/services/InlineVariantGenerationService.d.ts.map +0 -1
  469. package/dist/services/InlineVariantGenerationService.js +0 -475
  470. package/dist/services/InlineVariantGenerationService.js.map +0 -1
  471. package/dist/services/InterfaceGenerationService.d.ts +0 -12
  472. package/dist/services/InterfaceGenerationService.d.ts.map +0 -1
  473. package/dist/services/InterfaceGenerationService.js +0 -256
  474. package/dist/services/InterfaceGenerationService.js.map +0 -1
  475. package/dist/services/TailwindConfigWriter.d.ts +0 -24
  476. package/dist/services/TailwindConfigWriter.d.ts.map +0 -1
  477. package/dist/services/TailwindConfigWriter.js +0 -105
  478. package/dist/services/TailwindConfigWriter.js.map +0 -1
  479. package/dist/services/TerminalAgentRunner.d.ts +0 -65
  480. package/dist/services/TerminalAgentRunner.d.ts.map +0 -1
  481. package/dist/services/TerminalAgentRunner.js +0 -511
  482. package/dist/services/TerminalAgentRunner.js.map +0 -1
  483. package/dist/services/VisualVariantAgentRunner.d.ts +0 -20
  484. package/dist/services/VisualVariantAgentRunner.d.ts.map +0 -1
  485. package/dist/services/VisualVariantAgentRunner.js +0 -66
  486. package/dist/services/VisualVariantAgentRunner.js.map +0 -1
  487. package/dist/services/adapters/TailwindCSSTokenAdapter.d.ts +0 -35
  488. package/dist/services/adapters/TailwindCSSTokenAdapter.d.ts.map +0 -1
  489. package/dist/services/adapters/TailwindCSSTokenAdapter.js +0 -278
  490. package/dist/services/adapters/TailwindCSSTokenAdapter.js.map +0 -1
  491. package/dist/services/agent/AgentCore.d.ts +0 -126
  492. package/dist/services/agent/AgentCore.d.ts.map +0 -1
  493. package/dist/services/agent/AgentCore.js +0 -759
  494. package/dist/services/agent/AgentCore.js.map +0 -1
  495. package/dist/services/agent/AgentModService.d.ts +0 -98
  496. package/dist/services/agent/AgentModService.d.ts.map +0 -1
  497. package/dist/services/agent/AgentModService.js +0 -400
  498. package/dist/services/agent/AgentModService.js.map +0 -1
  499. package/dist/services/agent/index.d.ts +0 -2
  500. package/dist/services/agent/index.d.ts.map +0 -1
  501. package/dist/services/agent/index.js +0 -6
  502. package/dist/services/agent/index.js.map +0 -1
  503. package/dist/types/editor-interface-types.d.ts +0 -67
  504. package/dist/types/editor-interface-types.d.ts.map +0 -1
  505. package/dist/types/editor-interface-types.js +0 -12
  506. package/dist/types/editor-interface-types.js.map +0 -1
  507. package/dist/utils/elementRefToContext.d.ts +0 -4
  508. package/dist/utils/elementRefToContext.d.ts.map +0 -1
  509. package/dist/utils/elementRefToContext.js +0 -63
  510. package/dist/utils/elementRefToContext.js.map +0 -1
  511. package/dist/utils/skills/shared-variants-protocol.d.ts +0 -69
  512. package/dist/utils/skills/shared-variants-protocol.d.ts.map +0 -1
  513. package/dist/utils/skills/shared-variants-protocol.js +0 -292
  514. package/dist/utils/skills/shared-variants-protocol.js.map +0 -1
  515. package/src/ui/dist/assets/main-Dnah9pII.css +0 -1
  516. package/src/ui/dist/assets/main-plq7aT76.js +0 -656
  517. /package/dist/{mcp/agent-variants → agent-variants}/briefContent.d.ts +0 -0
  518. /package/dist/{mcp/agent-variants → agent-variants}/briefContent.js +0 -0
  519. /package/dist/{mcp/agent-variants → agent-variants}/createProjectArtifacts.d.ts +0 -0
  520. /package/dist/{mcp/agent-variants → agent-variants}/createProjectArtifacts.js +0 -0
  521. /package/dist/{mcp/agent-variants → agent-variants}/diffQa.d.ts +0 -0
  522. /package/dist/{mcp/agent-variants → agent-variants}/diffQa.js +0 -0
  523. /package/dist/{mcp/agent-variants → agent-variants}/elementRefToTarget.js +0 -0
  524. /package/dist/{mcp/agent-variants → agent-variants}/errors.d.ts +0 -0
  525. /package/dist/{mcp/agent-variants → agent-variants}/errors.js +0 -0
  526. /package/dist/{mcp/agent-variants → agent-variants}/previewQa.d.ts +0 -0
  527. /package/dist/{mcp/agent-variants → agent-variants}/previewQa.js +0 -0
  528. /package/dist/{mcp/agent-variants → agent-variants}/runLabel.d.ts +0 -0
  529. /package/dist/{mcp/agent-variants → agent-variants}/runLabel.js +0 -0
  530. /package/dist/{mcp/agent-variants → agent-variants}/runPlan.d.ts +0 -0
  531. /package/dist/{mcp/agent-variants → agent-variants}/runPlan.js +0 -0
  532. /package/dist/{mcp/agent-variants → agent-variants}/sourceContext.d.ts +0 -0
  533. /package/dist/{mcp/agent-variants → agent-variants}/sourceContext.js +0 -0
  534. /package/dist/{mcp/agent-variants → agent-variants}/variantContext.d.ts +0 -0
  535. /package/dist/{mcp/agent-variants → agent-variants}/variantContext.js +0 -0
@@ -1,735 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RivetOAuthServerProvider = exports.MCP_BROWSER_AUTH_COOKIE_NAME = void 0;
4
- const crypto_1 = require("crypto");
5
- const errors_js_1 = require("@modelcontextprotocol/sdk/server/auth/errors.js");
6
- const accessTokenRefresh_1 = require("../../services/accessTokenRefresh");
7
- const telemetry_1 = require("../../config/telemetry");
8
- const logger_1 = require("../../utils/logger");
9
- const log = (0, logger_1.createLogger)('mcp-http-oauth');
10
- const AUTH_CODE_TTL_MS = 10 * 60_000;
11
- const PENDING_AUTH_TTL_MS = 10 * 60_000;
12
- const TOKEN_VERIFY_CACHE_TTL_MS = 60_000;
13
- const DEFAULT_TOKEN_TTL_SECONDS = 3600;
14
- const TOKEN_POLL_MAX_ATTEMPTS = 120;
15
- const TOKEN_POLL_INTERVAL_MS = 1000;
16
- const PROFILE_FETCH_TIMEOUT_MS = 10_000;
17
- const MCP_OAUTH_SCOPE = 'rivet';
18
- const HOSTED_DASHBOARD_AUTH_URL = 'https://rivet-proxy.onrender.com/dashboard/';
19
- exports.MCP_BROWSER_AUTH_COOKIE_NAME = 'rivet_mcp_oauth';
20
- const CURSOR_DESKTOP_REDIRECT_PROTOCOL = 'cursor:';
21
- const CURSOR_DESKTOP_REDIRECT_HOST = 'anysphere.cursor-mcp';
22
- const CURSOR_DESKTOP_REDIRECT_PATH = '/oauth/callback';
23
- const CURSOR_CLOUD_REDIRECT_HOST = 'www.cursor.com';
24
- const CURSOR_CLOUD_REDIRECT_PATH = '/agents/mcp/oauth/callback';
25
- const LOOPBACK_REDIRECT_HOSTS = new Set([
26
- 'localhost',
27
- '127.0.0.1',
28
- '::1',
29
- '[::1]',
30
- ]);
31
- /** In-memory dynamic client registration store (clients are ephemeral). */
32
- class InMemoryClientsStore {
33
- clients = new Map();
34
- getClient(clientId) {
35
- return this.clients.get(clientId);
36
- }
37
- registerClient(client) {
38
- if (!client.redirect_uris.every(isAllowedRedirectUri)) {
39
- throw new errors_js_1.InvalidClientMetadataError('Rivet MCP OAuth clients must declare valid loopback or Cursor redirect URIs.');
40
- }
41
- const registered = {
42
- ...client,
43
- client_id: client.client_id ?? (0, crypto_1.randomUUID)(),
44
- client_id_issued_at: client.client_id_issued_at ?? Math.floor(Date.now() / 1000),
45
- };
46
- this.clients.set(registered.client_id, registered);
47
- return registered;
48
- }
49
- }
50
- const isLoopbackRedirectUri = (redirectUri) => {
51
- try {
52
- const url = new URL(redirectUri);
53
- return (url.protocol === 'http:' && LOOPBACK_REDIRECT_HOSTS.has(url.hostname));
54
- }
55
- catch {
56
- return false;
57
- }
58
- };
59
- const isAllowedRedirectUri = (redirectUri) => {
60
- try {
61
- const url = new URL(redirectUri);
62
- if (url.hash) {
63
- return false;
64
- }
65
- if (isLoopbackRedirectUri(redirectUri)) {
66
- return true;
67
- }
68
- if (url.protocol === CURSOR_DESKTOP_REDIRECT_PROTOCOL &&
69
- url.hostname === CURSOR_DESKTOP_REDIRECT_HOST &&
70
- url.pathname === CURSOR_DESKTOP_REDIRECT_PATH &&
71
- !url.search) {
72
- return true;
73
- }
74
- return (url.protocol === 'https:' &&
75
- url.hostname.toLowerCase() === CURSOR_CLOUD_REDIRECT_HOST &&
76
- url.pathname === CURSOR_CLOUD_REDIRECT_PATH &&
77
- !url.search &&
78
- !url.port);
79
- }
80
- catch {
81
- return false;
82
- }
83
- };
84
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
85
- const escapeHtml = (value) => value
86
- .replace(/&/g, '&')
87
- .replace(/</g, '&lt;')
88
- .replace(/>/g, '&gt;')
89
- .replace(/"/g, '&quot;')
90
- .replace(/'/g, '&#39;');
91
- const DASHBOARD_AUTH_STYLESHEET_PATH = '/dashboard/auth.css';
92
- const GOOGLE_ICON_URL = 'https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/google.svg';
93
- const getBrowserAuthCookieValue = (sessionId, nonce) => `${sessionId}:${nonce}`;
94
- /**
95
- * Shows the browser user which local OAuth client will receive the code before
96
- * starting Google sign-in.
97
- */
98
- const getClientApprovalHtml = (input) => {
99
- const clientName = input.clientName?.trim() || 'Unknown MCP client';
100
- const escapedAuthUrl = escapeHtml(input.authUrl);
101
- const escapedRedirectUri = escapeHtml(input.redirectUri);
102
- return `<!doctype html>
103
- <html>
104
- <head>
105
- <meta charset="utf-8" />
106
- <meta name="viewport" content="width=device-width, initial-scale=1" />
107
- <title>Approve Rivet MCP sign in</title>
108
- <style>
109
- @font-face {
110
- font-family: 'Satoshi';
111
- src: url('/fonts/Satoshi-Variable.woff2') format('woff2-variations');
112
- font-weight: 300 900;
113
- font-style: normal;
114
- font-display: swap;
115
- }
116
- :root {
117
- color-scheme: dark;
118
- --bg: #1c1c20;
119
- --text: #ffffff;
120
- --text-muted: #d1d5db;
121
- --muted: #9ca3af;
122
- --border: #232328;
123
- --surface-hover: #404040;
124
- --primary: #ff3300;
125
- --primary-hover: #c2410c;
126
- --ease: cubic-bezier(0.4, 0, 0.2, 1);
127
- --shadow-panel:
128
- inset 0 1px 0 rgba(255, 255, 255, 0.04),
129
- inset 0 0 0 1px rgba(255, 255, 255, 0.06),
130
- 0 24px 24px -12px rgba(0, 0, 0, 0.35),
131
- 0 48px 48px -24px rgba(0, 0, 0, 0.35);
132
- }
133
- * {
134
- box-sizing: border-box;
135
- }
136
- body {
137
- margin: 0;
138
- min-height: 100vh;
139
- font-family: 'Satoshi', 'Inter', system-ui, sans-serif;
140
- background:
141
- linear-gradient(
142
- 180deg,
143
- rgba(255, 255, 255, 0.018),
144
- transparent 240px
145
- ),
146
- radial-gradient(
147
- circle at 18% 0%,
148
- rgba(255, 51, 0, 0.05),
149
- transparent 32%
150
- ),
151
- var(--bg);
152
- color: var(--text);
153
- display: flex;
154
- flex-direction: column;
155
- align-items: center;
156
- padding: 0;
157
- -webkit-font-smoothing: antialiased;
158
- -moz-osx-font-smoothing: grayscale;
159
- }
160
- main {
161
- width: 100%;
162
- max-width: 920px;
163
- padding: 28px 20px 96px;
164
- }
165
- .auth-shell {
166
- display: flex;
167
- flex-direction: column;
168
- align-items: center;
169
- justify-content: center;
170
- min-height: 60vh;
171
- width: 100%;
172
- }
173
- .auth-card {
174
- background:
175
- linear-gradient(
176
- 180deg,
177
- rgba(255, 255, 255, 0.025),
178
- rgba(255, 255, 255, 0.01)
179
- ),
180
- var(--bg);
181
- border: 1px solid rgba(255, 255, 255, 0.06);
182
- border-radius: 24px;
183
- padding: 40px;
184
- width: 100%;
185
- max-width: 400px;
186
- display: flex;
187
- flex-direction: column;
188
- align-items: center;
189
- gap: 32px;
190
- backdrop-filter: blur(20px);
191
- -webkit-backdrop-filter: blur(20px);
192
- box-shadow: var(--shadow-panel);
193
- }
194
- .wordmark {
195
- display: block;
196
- width: auto;
197
- height: 32px;
198
- object-fit: contain;
199
- }
200
- .auth-copy {
201
- text-align: center;
202
- }
203
- .auth-heading {
204
- margin: 0 0 8px;
205
- font-size: 20px;
206
- font-weight: 500;
207
- line-height: 1.2;
208
- letter-spacing: 0;
209
- color: var(--text);
210
- }
211
- .auth-subtitle {
212
- margin: 0;
213
- font-size: 14px;
214
- font-weight: 400;
215
- line-height: 1.5;
216
- color: var(--text-muted);
217
- }
218
- .auth-code {
219
- display: block;
220
- margin-top: 12px;
221
- border-radius: 12px;
222
- background: #17171b;
223
- padding: 10px 12px;
224
- color: var(--text);
225
- font-size: 12px;
226
- line-height: 1.5;
227
- word-break: break-all;
228
- }
229
- .auth-actions {
230
- display: flex;
231
- flex-direction: column;
232
- align-items: stretch;
233
- gap: 12px;
234
- width: 100%;
235
- }
236
- .button-link {
237
- display: inline-flex;
238
- align-items: center;
239
- justify-content: center;
240
- gap: 8px;
241
- min-height: 40px;
242
- padding: 10px 18px;
243
- border-radius: 10px;
244
- font-family: inherit;
245
- font-size: 14px;
246
- font-weight: 500;
247
- cursor: pointer;
248
- transition:
249
- background-color 160ms var(--ease),
250
- border-color 160ms var(--ease),
251
- color 160ms var(--ease),
252
- transform 100ms ease;
253
- border: 1px solid transparent;
254
- text-decoration: none;
255
- color: var(--text);
256
- background: rgba(255, 255, 255, 0.015);
257
- backdrop-filter: blur(20px);
258
- -webkit-backdrop-filter: blur(20px);
259
- }
260
- .button-link:hover {
261
- background: rgba(255, 255, 255, 0.1);
262
- }
263
- .button-link:active {
264
- transform: scale(0.98);
265
- }
266
- .auth-google-button {
267
- min-height: 48px;
268
- padding: 14px 32px;
269
- gap: 12px;
270
- border-radius: 12px;
271
- background: rgba(255, 255, 255, 0.015);
272
- border-color: rgba(255, 255, 255, 0.03);
273
- color: var(--text);
274
- font-size: 14px;
275
- font-weight: 500;
276
- }
277
- .auth-google-button:hover {
278
- background: rgba(255, 255, 255, 0.1);
279
- }
280
- .auth-google-icon {
281
- width: 20px;
282
- height: 20px;
283
- filter: brightness(1.1);
284
- flex: 0 0 20px;
285
- }
286
- </style>
287
- <link rel="stylesheet" href="${DASHBOARD_AUTH_STYLESHEET_PATH}" />
288
- </head>
289
- <body>
290
- <main>
291
- <section class="auth-shell">
292
- <div class="auth-card" aria-labelledby="approval-title">
293
- <img class="wordmark" src="/dashboard/assets/logo.png" alt="Rivet" />
294
- <div class="auth-copy">
295
- <h1 id="approval-title" class="auth-heading">Approve Rivet MCP sign in</h1>
296
- <p class="auth-subtitle">
297
- <strong>${escapeHtml(clientName)}</strong> wants to connect to Rivet.
298
- </p>
299
- <p class="auth-subtitle">After sign-in, Rivet will return an OAuth code to:</p>
300
- <p class="auth-subtitle">
301
- <code class="auth-code">${escapedRedirectUri}</code>
302
- </p>
303
- </div>
304
- <div class="auth-actions">
305
- <a
306
- href="${escapedAuthUrl}"
307
- class="button-link auth-google-button"
308
- aria-label="Sign in with Google to approve Rivet MCP"
309
- >
310
- <img
311
- class="auth-google-icon"
312
- src="${GOOGLE_ICON_URL}"
313
- alt="Google"
314
- />
315
- Sign in with Google
316
- </a>
317
- </div>
318
- </div>
319
- </section>
320
- </main>
321
- </body>
322
- </html>`;
323
- };
324
- const getTokenExpiryMs = (token) => {
325
- const secondsUntilExpiry = (0, accessTokenRefresh_1.getJwtSecondsUntilExpiry)(token) ?? DEFAULT_TOKEN_TTL_SECONDS;
326
- return Date.now() + Math.max(secondsUntilExpiry, 1) * 1000;
327
- };
328
- const normalizeProfileUser = (user) => {
329
- if (typeof user?.id !== 'string' || typeof user.email !== 'string') {
330
- return undefined;
331
- }
332
- return { id: user.id, email: user.email };
333
- };
334
- /**
335
- * OAuth authorization server provider that bridges the MCP OAuth spec
336
- * (authorization code + PKCE, dynamic client registration) onto the existing
337
- * Rivet proxy Google login flow:
338
- *
339
- * 1. `authorize` starts a proxy Google login with this server's local
340
- * callback page as the redirect origin and sends the browser to Google.
341
- * 2. The browser returns to the local callback page, which forwards the
342
- * Supabase hash tokens to `completeBrowserCallback`. That completes the
343
- * proxy login, obtains the Rivet access token, and mints a single-use
344
- * authorization code bound to the client's PKCE challenge.
345
- * 3. `exchangeAuthorizationCode` returns opaque MCP OAuth tokens; the Rivet
346
- * proxy tokens stay server-side and are used only after provider validation.
347
- */
348
- class RivetOAuthServerProvider {
349
- clientsStore = new InMemoryClientsStore();
350
- getProxyUrl;
351
- getCallbackUrl;
352
- mcpEditor;
353
- persistTokens;
354
- isRefreshTokenCurrent;
355
- fetchFn;
356
- pollIntervalMs;
357
- pendingAuthorizations = new Map();
358
- authorizationCodes = new Map();
359
- issuedBearerTokens = new Map();
360
- verifiedTokens = new Map();
361
- revokedAccessTokens = new Set();
362
- revokedRefreshTokens = new Set();
363
- activeRefreshTokens = new Map();
364
- constructor(options) {
365
- const { proxyUrl, callbackUrl } = options;
366
- this.getProxyUrl =
367
- typeof proxyUrl === 'function'
368
- ? () => proxyUrl().replace(/\/$/, '')
369
- : () => proxyUrl.replace(/\/$/, '');
370
- this.getCallbackUrl =
371
- typeof callbackUrl === 'function' ? callbackUrl : () => callbackUrl;
372
- this.mcpEditor = options.mcpEditor;
373
- this.persistTokens = options.persistTokens;
374
- this.isRefreshTokenCurrent = options.isRefreshTokenCurrent;
375
- this.fetchFn = options.fetchImpl ?? fetch;
376
- this.pollIntervalMs = options.pollIntervalMs ?? TOKEN_POLL_INTERVAL_MS;
377
- }
378
- getBrowserAuthCookie(sessionId, nonce) {
379
- const callbackUrl = new URL(this.getCallbackUrl());
380
- const attributes = [
381
- `${exports.MCP_BROWSER_AUTH_COOKIE_NAME}=${encodeURIComponent(getBrowserAuthCookieValue(sessionId, nonce))}`,
382
- 'Path=/',
383
- 'HttpOnly',
384
- 'SameSite=Lax',
385
- `Max-Age=${Math.ceil(PENDING_AUTH_TTL_MS / 1000)}`,
386
- ];
387
- if (callbackUrl.protocol === 'https:') {
388
- attributes.push('Secure');
389
- }
390
- return attributes.join('; ');
391
- }
392
- async authorize(client, params, res) {
393
- const response = await this.fetchFn(`${this.getProxyUrl()}/api/auth/google/start`, {
394
- method: 'POST',
395
- headers: { 'Content-Type': 'application/json' },
396
- body: JSON.stringify({
397
- redirectOrigin: this.getCallbackUrl(),
398
- authDestination: HOSTED_DASHBOARD_AUTH_URL,
399
- source: 'mcp',
400
- editor: this.mcpEditor,
401
- version: telemetry_1.RIVET_VERSION,
402
- }),
403
- });
404
- const result = (await response.json().catch(() => null));
405
- if (!response.ok ||
406
- !result?.success ||
407
- !result.authUrl ||
408
- !result.sessionId ||
409
- !result.pollSecret ||
410
- !result.completionSecret) {
411
- log.warn('Proxy login start failed', { status: response.status });
412
- throw new errors_js_1.ServerError('Failed to start Rivet sign-in');
413
- }
414
- this.prunePendingAuthorizations();
415
- const browserNonce = (0, crypto_1.randomBytes)(32).toString('base64url');
416
- this.pendingAuthorizations.set(result.sessionId, {
417
- client,
418
- params,
419
- pollSecret: result.pollSecret,
420
- completionSecret: result.completionSecret,
421
- browserNonce,
422
- expiresAt: Date.now() + PENDING_AUTH_TTL_MS,
423
- });
424
- res.setHeader('Set-Cookie', this.getBrowserAuthCookie(result.sessionId, browserNonce));
425
- res.status(200).type('html').send(getClientApprovalHtml({
426
- authUrl: result.authUrl,
427
- clientName: client.client_name,
428
- redirectUri: params.redirectUri,
429
- }));
430
- }
431
- /**
432
- * Completes a browser login forwarded by the local OAuth callback page:
433
- * finishes the proxy login session, obtains Rivet credentials, mints a
434
- * single-use authorization code, and returns the MCP client redirect URL.
435
- */
436
- async completeBrowserCallback(input) {
437
- const { sessionId, accessToken, refreshToken, browserAuthCookie } = input;
438
- if (!sessionId || !accessToken) {
439
- throw new Error('OAuth callback missing session or token');
440
- }
441
- const pending = this.pendingAuthorizations.get(sessionId);
442
- this.pendingAuthorizations.delete(sessionId);
443
- if (!pending || pending.expiresAt < Date.now()) {
444
- throw new Error('Unknown or expired sign-in session');
445
- }
446
- if (browserAuthCookie !==
447
- getBrowserAuthCookieValue(sessionId, pending.browserNonce)) {
448
- throw new Error('OAuth callback missing browser session');
449
- }
450
- const completeResponse = await this.fetchFn(`${this.getProxyUrl()}/api/auth/google/complete`, {
451
- method: 'POST',
452
- headers: { 'Content-Type': 'application/json' },
453
- body: JSON.stringify({
454
- sessionId,
455
- accessToken,
456
- refreshToken,
457
- completionSecret: pending.completionSecret,
458
- }),
459
- });
460
- const completeResult = (await completeResponse.json().catch(() => null));
461
- if (!completeResponse.ok || !completeResult?.success) {
462
- throw new Error(completeResult?.error ?? 'Rivet sign-in completion failed');
463
- }
464
- const tokens = await this.pollForRivetTokens(sessionId, pending.pollSecret);
465
- try {
466
- this.persistTokens?.(tokens);
467
- }
468
- catch (error) {
469
- log.warn('Failed to persist Rivet tokens after MCP OAuth login:', error);
470
- }
471
- const code = (0, crypto_1.randomBytes)(32).toString('base64url');
472
- this.pruneAuthorizationCodes();
473
- this.authorizationCodes.set(code, {
474
- clientId: pending.client.client_id,
475
- codeChallenge: pending.params.codeChallenge,
476
- redirectUri: pending.params.redirectUri,
477
- accessToken: tokens.token,
478
- refreshToken: tokens.refreshToken,
479
- user: tokens.user,
480
- expiresAt: Date.now() + AUTH_CODE_TTL_MS,
481
- });
482
- const redirectUrl = new URL(pending.params.redirectUri);
483
- redirectUrl.searchParams.set('code', code);
484
- if (pending.params.state) {
485
- redirectUrl.searchParams.set('state', pending.params.state);
486
- }
487
- return { redirectUrl: redirectUrl.toString() };
488
- }
489
- async challengeForAuthorizationCode(client, authorizationCode) {
490
- const entry = this.getValidCodeEntry(client, authorizationCode);
491
- return entry.codeChallenge;
492
- }
493
- async exchangeAuthorizationCode(client, authorizationCode, _codeVerifier, redirectUri) {
494
- const entry = this.getValidCodeEntry(client, authorizationCode);
495
- if (redirectUri && entry.redirectUri !== redirectUri) {
496
- throw new errors_js_1.InvalidGrantError('redirect_uri does not match');
497
- }
498
- this.authorizationCodes.delete(authorizationCode);
499
- const issuedTokens = this.rememberIssuedBearerToken({
500
- proxyAccessToken: entry.accessToken,
501
- proxyRefreshToken: entry.refreshToken,
502
- user: entry.user,
503
- });
504
- return this.toOAuthTokens(issuedTokens.accessToken, issuedTokens.refreshToken, issuedTokens.expiresIn);
505
- }
506
- async exchangeRefreshToken(_client, refreshToken) {
507
- const activeRefreshToken = this.activeRefreshTokens.get(refreshToken);
508
- if (this.revokedRefreshTokens.has(refreshToken) ||
509
- !activeRefreshToken ||
510
- this.isRefreshTokenCurrent?.(activeRefreshToken.proxyRefreshToken) === false) {
511
- throw new errors_js_1.InvalidGrantError('Refresh token was revoked');
512
- }
513
- const refreshed = await (0, accessTokenRefresh_1.refreshAccessTokenViaProxy)({
514
- refreshToken: activeRefreshToken.proxyRefreshToken,
515
- proxyUrl: this.getProxyUrl(),
516
- fetchImpl: this.fetchFn,
517
- });
518
- if (!refreshed) {
519
- throw new errors_js_1.InvalidGrantError('Refresh token was rejected');
520
- }
521
- const nextProxyRefreshToken = refreshed.refreshToken ?? activeRefreshToken.proxyRefreshToken;
522
- try {
523
- this.persistTokens?.({
524
- token: refreshed.token,
525
- refreshToken: nextProxyRefreshToken,
526
- });
527
- }
528
- catch (error) {
529
- log.warn('Failed to persist refreshed Rivet tokens:', error);
530
- }
531
- this.activeRefreshTokens.delete(refreshToken);
532
- this.revokedRefreshTokens.add(refreshToken);
533
- const issuedTokens = this.rememberIssuedBearerToken({
534
- proxyAccessToken: refreshed.token,
535
- proxyRefreshToken: nextProxyRefreshToken,
536
- user: activeRefreshToken.user,
537
- });
538
- return this.toOAuthTokens(issuedTokens.accessToken, issuedTokens.refreshToken, issuedTokens.expiresIn);
539
- }
540
- async revokeToken(_client, request) {
541
- const { token } = request;
542
- const knownAccessToken = this.issuedBearerTokens.get(token);
543
- const knownRefreshToken = this.activeRefreshTokens.has(token);
544
- if (knownAccessToken) {
545
- this.revokeAccessToken(token);
546
- return;
547
- }
548
- if (!knownRefreshToken) {
549
- return;
550
- }
551
- this.revokedRefreshTokens.add(token);
552
- this.activeRefreshTokens.delete(token);
553
- for (const [accessToken, issuedToken] of this.issuedBearerTokens) {
554
- if (issuedToken.refreshToken === token) {
555
- this.revokedAccessTokens.add(accessToken);
556
- this.issuedBearerTokens.delete(accessToken);
557
- this.verifiedTokens.delete(accessToken);
558
- }
559
- }
560
- }
561
- async verifyAccessToken(token) {
562
- if (this.revokedAccessTokens.has(token)) {
563
- this.verifiedTokens.delete(token);
564
- throw new errors_js_1.InvalidTokenError('Access token was revoked');
565
- }
566
- this.pruneIssuedBearerTokens();
567
- const issuedToken = this.issuedBearerTokens.get(token);
568
- if (!issuedToken) {
569
- this.verifiedTokens.delete(token);
570
- throw new errors_js_1.InvalidTokenError('Access token was not issued by this OAuth provider');
571
- }
572
- const cached = this.verifiedTokens.get(token);
573
- if (cached && cached.cachedUntil > Date.now()) {
574
- return cached.authInfo;
575
- }
576
- let response;
577
- try {
578
- response = await this.fetchFn(`${this.getProxyUrl()}/api/user/profile`, {
579
- method: 'GET',
580
- headers: {
581
- 'Content-Type': 'application/json',
582
- Authorization: `Bearer ${issuedToken.proxyAccessToken}`,
583
- },
584
- signal: AbortSignal.timeout(PROFILE_FETCH_TIMEOUT_MS),
585
- });
586
- }
587
- catch (error) {
588
- log.warn('Token verification request failed:', error);
589
- throw new errors_js_1.ServerError('Could not reach the Rivet auth server');
590
- }
591
- const result = (await response.json().catch(() => null));
592
- if (!response.ok || !result?.success) {
593
- this.verifiedTokens.delete(token);
594
- throw new errors_js_1.InvalidTokenError('Rivet rejected the access token');
595
- }
596
- const user = normalizeProfileUser(result.user) ?? issuedToken?.user;
597
- const secondsUntilExpiry = (0, accessTokenRefresh_1.getJwtSecondsUntilExpiry)(issuedToken.proxyAccessToken) ??
598
- DEFAULT_TOKEN_TTL_SECONDS;
599
- const authInfo = {
600
- token: issuedToken.proxyAccessToken,
601
- clientId: 'rivet-mcp',
602
- scopes: [MCP_OAUTH_SCOPE],
603
- expiresAt: Math.floor(Date.now() / 1000) + Math.max(secondsUntilExpiry, 1),
604
- extra: {
605
- mcpAccessToken: token,
606
- ...(issuedToken.proxyRefreshToken
607
- ? { refreshToken: issuedToken.proxyRefreshToken }
608
- : {}),
609
- ...(user ? { email: user.email, userId: user.id } : {}),
610
- },
611
- };
612
- this.pruneVerifiedTokens();
613
- this.verifiedTokens.set(token, {
614
- authInfo,
615
- cachedUntil: Date.now() +
616
- Math.min(TOKEN_VERIFY_CACHE_TTL_MS, Math.max(secondsUntilExpiry, 1) * 1000),
617
- });
618
- return authInfo;
619
- }
620
- /**
621
- * Invalidates a bearer token issued by this OAuth provider and its paired
622
- * refresh token, if the provider knows one.
623
- */
624
- revokeAccessToken(token) {
625
- const issuedToken = this.issuedBearerTokens.get(token);
626
- this.revokedAccessTokens.add(token);
627
- if (issuedToken?.refreshToken) {
628
- this.revokedRefreshTokens.add(issuedToken.refreshToken);
629
- this.activeRefreshTokens.delete(issuedToken.refreshToken);
630
- }
631
- this.issuedBearerTokens.delete(token);
632
- this.verifiedTokens.delete(token);
633
- }
634
- rememberIssuedBearerToken(tokens) {
635
- this.pruneIssuedBearerTokens();
636
- const accessToken = `rivet_mcp_at_${(0, crypto_1.randomBytes)(32).toString('base64url')}`;
637
- const refreshToken = tokens.proxyRefreshToken
638
- ? `rivet_mcp_rt_${(0, crypto_1.randomBytes)(32).toString('base64url')}`
639
- : undefined;
640
- const expiresAt = getTokenExpiryMs(tokens.proxyAccessToken);
641
- this.issuedBearerTokens.set(accessToken, {
642
- proxyAccessToken: tokens.proxyAccessToken,
643
- proxyRefreshToken: tokens.proxyRefreshToken,
644
- refreshToken,
645
- user: tokens.user,
646
- expiresAt,
647
- });
648
- if (refreshToken && tokens.proxyRefreshToken) {
649
- this.activeRefreshTokens.set(refreshToken, {
650
- proxyRefreshToken: tokens.proxyRefreshToken,
651
- user: tokens.user,
652
- });
653
- }
654
- return {
655
- accessToken,
656
- refreshToken,
657
- expiresIn: Math.max(Math.floor((expiresAt - Date.now()) / 1000), 1),
658
- };
659
- }
660
- getValidCodeEntry(client, authorizationCode) {
661
- const entry = this.authorizationCodes.get(authorizationCode);
662
- if (!entry ||
663
- entry.clientId !== client.client_id ||
664
- entry.expiresAt < Date.now()) {
665
- this.authorizationCodes.delete(authorizationCode);
666
- throw new errors_js_1.InvalidGrantError('Invalid or expired authorization code');
667
- }
668
- return entry;
669
- }
670
- toOAuthTokens(accessToken, refreshToken, expiresIn = DEFAULT_TOKEN_TTL_SECONDS) {
671
- return {
672
- access_token: accessToken,
673
- token_type: 'bearer',
674
- expires_in: Math.max(expiresIn, 1),
675
- scope: MCP_OAUTH_SCOPE,
676
- ...(refreshToken ? { refresh_token: refreshToken } : {}),
677
- };
678
- }
679
- async pollForRivetTokens(sessionId, pollSecret) {
680
- for (let attempt = 0; attempt < TOKEN_POLL_MAX_ATTEMPTS; attempt++) {
681
- const response = await this.fetchFn(`${this.getProxyUrl()}/api/auth/google/token`, {
682
- method: 'POST',
683
- headers: { 'Content-Type': 'application/json' },
684
- body: JSON.stringify({ session: sessionId, pollSecret }),
685
- });
686
- const result = (await response.json().catch(() => null));
687
- if (result?.success && result.token) {
688
- return {
689
- token: result.token,
690
- refreshToken: result.refreshToken,
691
- user: result.user,
692
- };
693
- }
694
- if (result?.error && result.error !== 'Pending') {
695
- throw new Error(result.error);
696
- }
697
- await sleep(this.pollIntervalMs);
698
- }
699
- throw new Error('Timed out waiting for Rivet sign-in to complete');
700
- }
701
- prunePendingAuthorizations() {
702
- const now = Date.now();
703
- for (const [key, value] of this.pendingAuthorizations) {
704
- if (value.expiresAt < now) {
705
- this.pendingAuthorizations.delete(key);
706
- }
707
- }
708
- }
709
- pruneAuthorizationCodes() {
710
- const now = Date.now();
711
- for (const [key, value] of this.authorizationCodes) {
712
- if (value.expiresAt < now) {
713
- this.authorizationCodes.delete(key);
714
- }
715
- }
716
- }
717
- pruneVerifiedTokens() {
718
- const now = Date.now();
719
- for (const [key, value] of this.verifiedTokens) {
720
- if (value.cachedUntil < now) {
721
- this.verifiedTokens.delete(key);
722
- }
723
- }
724
- }
725
- pruneIssuedBearerTokens() {
726
- const now = Date.now();
727
- for (const [key, value] of this.issuedBearerTokens) {
728
- if (value.expiresAt < now) {
729
- this.issuedBearerTokens.delete(key);
730
- }
731
- }
732
- }
733
- }
734
- exports.RivetOAuthServerProvider = RivetOAuthServerProvider;
735
- //# sourceMappingURL=httpOAuthProvider.js.map