rivet-design 0.10.7 → 0.10.9

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 (170) hide show
  1. package/dist/index.d.ts +54 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +302 -129
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp/agent-variants/SessionStore.d.ts +23 -1
  6. package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
  7. package/dist/mcp/agent-variants/SessionStore.js +42 -0
  8. package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
  9. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +99 -2
  10. package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  11. package/dist/mcp/agent-variants/WorktreeOrchestrator.js +734 -74
  12. package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
  13. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +8 -2
  14. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
  15. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +24 -5
  16. package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
  17. package/dist/mcp/agent-variants/contracts.d.ts +1175 -233
  18. package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
  19. package/dist/mcp/agent-variants/contracts.js +12 -4
  20. package/dist/mcp/agent-variants/contracts.js.map +1 -1
  21. package/dist/mcp/agent-variants/designCritique.d.ts +163 -0
  22. package/dist/mcp/agent-variants/designCritique.d.ts.map +1 -0
  23. package/dist/mcp/agent-variants/designCritique.js +710 -0
  24. package/dist/mcp/agent-variants/designCritique.js.map +1 -0
  25. package/dist/mcp/agent-variants/diffQa.d.ts +7 -0
  26. package/dist/mcp/agent-variants/diffQa.d.ts.map +1 -0
  27. package/dist/mcp/agent-variants/diffQa.js +67 -0
  28. package/dist/mcp/agent-variants/diffQa.js.map +1 -0
  29. package/dist/mcp/agent-variants/index.d.ts +2 -2
  30. package/dist/mcp/agent-variants/index.d.ts.map +1 -1
  31. package/dist/mcp/agent-variants/index.js +2 -1
  32. package/dist/mcp/agent-variants/index.js.map +1 -1
  33. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
  34. package/dist/mcp/agent-variants/pinterestSourceContext.js +11 -1
  35. package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
  36. package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -1
  37. package/dist/mcp/agent-variants/previewQa.js +7 -0
  38. package/dist/mcp/agent-variants/previewQa.js.map +1 -1
  39. package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
  40. package/dist/mcp/agent-variants/tools.js +15 -5
  41. package/dist/mcp/agent-variants/tools.js.map +1 -1
  42. package/dist/mcp/auth/httpOAuthProvider.d.ts +103 -0
  43. package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -0
  44. package/dist/mcp/auth/httpOAuthProvider.js +454 -0
  45. package/dist/mcp/auth/httpOAuthProvider.js.map +1 -0
  46. package/dist/mcp/auth/tools.d.ts +2 -0
  47. package/dist/mcp/auth/tools.d.ts.map +1 -1
  48. package/dist/mcp/auth/tools.js +12 -5
  49. package/dist/mcp/auth/tools.js.map +1 -1
  50. package/dist/mcp/httpServer.d.ts +36 -0
  51. package/dist/mcp/httpServer.d.ts.map +1 -0
  52. package/dist/mcp/httpServer.js +307 -0
  53. package/dist/mcp/httpServer.js.map +1 -0
  54. package/dist/mcp/server.d.ts +17 -0
  55. package/dist/mcp/server.d.ts.map +1 -1
  56. package/dist/mcp/server.js +50 -29
  57. package/dist/mcp/server.js.map +1 -1
  58. package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
  59. package/dist/proxy-middleware/proxy-config.js +5 -2
  60. package/dist/proxy-middleware/proxy-config.js.map +1 -1
  61. package/dist/routes/agentVariants.d.ts +2 -1
  62. package/dist/routes/agentVariants.d.ts.map +1 -1
  63. package/dist/routes/agentVariants.js +268 -19
  64. package/dist/routes/agentVariants.js.map +1 -1
  65. package/dist/routes/design.d.ts.map +1 -1
  66. package/dist/routes/design.js +0 -122
  67. package/dist/routes/design.js.map +1 -1
  68. package/dist/routes/mcp.d.ts.map +1 -1
  69. package/dist/routes/mcp.js +2 -1
  70. package/dist/routes/mcp.js.map +1 -1
  71. package/dist/server.d.ts +15 -0
  72. package/dist/server.d.ts.map +1 -1
  73. package/dist/server.js +24 -11
  74. package/dist/server.js.map +1 -1
  75. package/dist/services/AgentSessionService.d.ts +5 -1
  76. package/dist/services/AgentSessionService.d.ts.map +1 -1
  77. package/dist/services/AgentSessionService.js +11 -4
  78. package/dist/services/AgentSessionService.js.map +1 -1
  79. package/dist/services/AuthService.d.ts +1 -0
  80. package/dist/services/AuthService.d.ts.map +1 -1
  81. package/dist/services/AuthService.js +11 -1
  82. package/dist/services/AuthService.js.map +1 -1
  83. package/dist/services/ConfigManager.d.ts +5 -0
  84. package/dist/services/ConfigManager.d.ts.map +1 -1
  85. package/dist/services/ConfigManager.js +25 -3
  86. package/dist/services/ConfigManager.js.map +1 -1
  87. package/dist/services/DevServerRuntimeService.d.ts +119 -0
  88. package/dist/services/DevServerRuntimeService.d.ts.map +1 -0
  89. package/dist/services/DevServerRuntimeService.js +657 -0
  90. package/dist/services/DevServerRuntimeService.js.map +1 -0
  91. package/dist/services/GatewayClient.d.ts +25 -0
  92. package/dist/services/GatewayClient.d.ts.map +1 -1
  93. package/dist/services/GatewayClient.js +70 -11
  94. package/dist/services/GatewayClient.js.map +1 -1
  95. package/dist/services/InlineVariantGenerationService.d.ts +2 -3
  96. package/dist/services/InlineVariantGenerationService.d.ts.map +1 -1
  97. package/dist/services/InlineVariantGenerationService.js +7 -5
  98. package/dist/services/InlineVariantGenerationService.js.map +1 -1
  99. package/dist/services/IntegrationsClient.d.ts +20 -0
  100. package/dist/services/IntegrationsClient.d.ts.map +1 -1
  101. package/dist/services/IntegrationsClient.js +82 -24
  102. package/dist/services/IntegrationsClient.js.map +1 -1
  103. package/dist/services/RequestAuthContext.d.ts +7 -1
  104. package/dist/services/RequestAuthContext.d.ts.map +1 -1
  105. package/dist/services/RequestAuthContext.js +15 -2
  106. package/dist/services/RequestAuthContext.js.map +1 -1
  107. package/dist/services/SessionBridgeService.d.ts +1 -0
  108. package/dist/services/SessionBridgeService.d.ts.map +1 -1
  109. package/dist/services/SessionBridgeService.js +16 -1
  110. package/dist/services/SessionBridgeService.js.map +1 -1
  111. package/dist/services/TelemetryService.d.ts +2 -0
  112. package/dist/services/TelemetryService.d.ts.map +1 -1
  113. package/dist/services/TelemetryService.js +2 -0
  114. package/dist/services/TelemetryService.js.map +1 -1
  115. package/dist/services/VariantHistoryService.d.ts +8 -0
  116. package/dist/services/VariantHistoryService.d.ts.map +1 -1
  117. package/dist/services/VariantHistoryService.js +23 -0
  118. package/dist/services/VariantHistoryService.js.map +1 -1
  119. package/dist/services/VariantRunService.d.ts +56 -0
  120. package/dist/services/VariantRunService.d.ts.map +1 -0
  121. package/dist/services/VariantRunService.js +56 -0
  122. package/dist/services/VariantRunService.js.map +1 -0
  123. package/dist/services/VariantsRuntime.d.ts +22 -0
  124. package/dist/services/VariantsRuntime.d.ts.map +1 -0
  125. package/dist/services/VariantsRuntime.js +32 -0
  126. package/dist/services/VariantsRuntime.js.map +1 -0
  127. package/dist/services/VisualVariantAgentRunner.d.ts +20 -0
  128. package/dist/services/VisualVariantAgentRunner.d.ts.map +1 -0
  129. package/dist/services/VisualVariantAgentRunner.js +66 -0
  130. package/dist/services/VisualVariantAgentRunner.js.map +1 -0
  131. package/dist/services/WorktreeManager.d.ts +34 -0
  132. package/dist/services/WorktreeManager.d.ts.map +1 -1
  133. package/dist/services/WorktreeManager.js +172 -23
  134. package/dist/services/WorktreeManager.js.map +1 -1
  135. package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
  136. package/dist/services/createAgentVariantsOrchestrator.js +9 -0
  137. package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
  138. package/dist/utils/devServerCommand.d.ts +11 -4
  139. package/dist/utils/devServerCommand.d.ts.map +1 -1
  140. package/dist/utils/devServerCommand.js +17 -8
  141. package/dist/utils/devServerCommand.js.map +1 -1
  142. package/dist/utils/devServerError.d.ts +34 -0
  143. package/dist/utils/devServerError.d.ts.map +1 -0
  144. package/dist/utils/devServerError.js +39 -0
  145. package/dist/utils/devServerError.js.map +1 -0
  146. package/dist/utils/elementRefToContext.d.ts +4 -0
  147. package/dist/utils/elementRefToContext.d.ts.map +1 -0
  148. package/dist/utils/elementRefToContext.js +63 -0
  149. package/dist/utils/elementRefToContext.js.map +1 -0
  150. package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
  151. package/dist/utils/skills/shared-variants-protocol.js +5 -2
  152. package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
  153. package/dist/utils/variantSessionStart.d.ts +3 -0
  154. package/dist/utils/variantSessionStart.d.ts.map +1 -0
  155. package/dist/utils/variantSessionStart.js +7 -0
  156. package/dist/utils/variantSessionStart.js.map +1 -0
  157. package/package.json +3 -1
  158. package/src/ui/dist/assets/main-Cwwhwfjq.js +645 -0
  159. package/src/ui/dist/assets/main-Do6whVIm.css +1 -0
  160. package/src/ui/dist/index.html +2 -2
  161. package/dist/services/CommentVariationService.d.ts +0 -34
  162. package/dist/services/CommentVariationService.d.ts.map +0 -1
  163. package/dist/services/CommentVariationService.js +0 -136
  164. package/dist/services/CommentVariationService.js.map +0 -1
  165. package/dist/services/VariantCodeGeneratorService.d.ts +0 -39
  166. package/dist/services/VariantCodeGeneratorService.d.ts.map +0 -1
  167. package/dist/services/VariantCodeGeneratorService.js +0 -109
  168. package/dist/services/VariantCodeGeneratorService.js.map +0 -1
  169. package/src/ui/dist/assets/main-DUIrSkV3.css +0 -1
  170. package/src/ui/dist/assets/main-DYpxGvCu.js +0 -646
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
+ import { ProjectDetectionService } from './index-core';
1
2
  import { TerminalAgentRunner, type EmbeddedAgentKind } from './services/TerminalAgentRunner';
3
+ import { SessionBridgeService } from './services/SessionBridgeService';
2
4
  import type { Framework } from './services/ProjectDetectionService';
5
+ import { DevServerRuntimeService, type StartDevServerResult } from './services/DevServerRuntimeService';
3
6
  export type CLIOptions = {
4
7
  userPort?: number;
5
8
  rivetPort?: number;
@@ -31,20 +34,62 @@ export type CLIOptions = {
31
34
  export declare const DEFAULT_PORT = 4000;
32
35
  export declare const DEFAULT_USER_PORT = 3000;
33
36
  type AgentDevServerContext = {
34
- ownership: 'external' | 'none';
37
+ ownership: 'external' | 'none' | 'rivet_owned';
35
38
  host: string | null;
36
39
  port: number | null;
37
- startedByRivet: false;
40
+ startedByRivet: boolean;
41
+ };
42
+ type AgentDevServerHealth = AgentDevServerContext & {
43
+ isReachable: boolean | null;
44
+ reason: 'healthy' | 'unknown';
45
+ lastCheckedAt: number | null;
38
46
  };
39
47
  type AgentDevServerContextOptions = {
40
48
  framework: Framework;
49
+ ownership?: AgentDevServerContext['ownership'];
41
50
  devServerHost?: string;
42
51
  userDevServerPort: number;
52
+ startedByRivet?: boolean;
43
53
  };
44
54
  /**
45
55
  * Builds the dev-server context advertised to the embedded agent UI.
46
56
  */
47
- export declare const buildAgentDevServerContext: ({ framework, devServerHost, userDevServerPort, }: AgentDevServerContextOptions) => AgentDevServerContext;
57
+ export declare const buildAgentDevServerContext: ({ framework, ownership, devServerHost, userDevServerPort, startedByRivet, }: AgentDevServerContextOptions) => AgentDevServerContext;
58
+ type AgentProject = {
59
+ id: string;
60
+ path: string;
61
+ devServerPort: number;
62
+ devServerHost?: string;
63
+ status: 'detected' | 'connected' | 'error';
64
+ packageManager: 'npm' | 'yarn' | 'pnpm';
65
+ framework: Framework;
66
+ entryPoint?: string;
67
+ };
68
+ type AgentDevServerResolution = {
69
+ project: AgentProject;
70
+ userDevServerPort: number;
71
+ devServerContext: AgentDevServerContext;
72
+ cleanup?: () => Promise<void>;
73
+ ownedProcess?: Extract<StartDevServerResult, {
74
+ success: true;
75
+ }>['process'];
76
+ };
77
+ type AgentDevServerResolverOptions = {
78
+ projectPath: string;
79
+ options: Pick<CLIOptions, 'framework' | 'entry' | 'userPort'>;
80
+ detection?: Pick<ProjectDetectionService, 'detectProject' | 'detectFramework' | 'detectPackageManager' | 'readConfiguredPort' | 'findRunningDevServer'>;
81
+ runtime?: DevServerRuntimeService;
82
+ };
83
+ /**
84
+ * Resolves the target app endpoint for embedded agent mode.
85
+ */
86
+ export declare const resolveAgentDevServer: ({ projectPath, options, detection, runtime, }: AgentDevServerResolverOptions) => Promise<AgentDevServerResolution>;
87
+ /** Builds the current preview server health state used by variant preview routing. */
88
+ export declare const buildAgentDevServerHealth: (context: AgentDevServerContext) => AgentDevServerHealth;
89
+ /**
90
+ * Updates bridge health when the active owned app dev server exits.
91
+ */
92
+ export declare const updateOwnedDevServerHealthOnExit: (bridge: Pick<SessionBridgeService, "getDevServerHealth" | "isActive" | "updateDevServerHealth">, ownedDevServerPort: number | null) => void;
48
93
  /**
49
94
  * Returns whether embedded agent variants can be offered for this runtime.
50
95
  */
@@ -53,6 +98,12 @@ export declare const isAgentVariantsEnabled: (options: Pick<CLIOptions, "noGit">
53
98
  * @effect Stops active terminal agent processes before the CLI exits on OS signals.
54
99
  */
55
100
  export declare const registerAgentSignalHandlers: (runner: Pick<TerminalAgentRunner, "stopActiveRuns">) => void;
101
+ /**
102
+ * @effect Sends a best-effort signal to an owned app dev server before process exit.
103
+ */
104
+ export declare const registerOwnedDevServerSignalHandlers: (options: {
105
+ kill: (signal: NodeJS.Signals) => unknown;
106
+ }) => void;
56
107
  export declare const main: (args?: string[]) => Promise<void>;
57
108
  export declare const parseArgs: (args: string[]) => CLIOptions;
58
109
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,mBAAmB,EAEnB,KAAK,iBAAiB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AASpE,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAI,kDAIxC,4BAA4B,KAAG,qBAgBjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,KACjC,OAAyB,CAAC;AAE7B;;GAEG;AACH,eAAO,MAAM,2BAA2B,GACtC,QAAQ,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,KAClD,IAIF,CAAC;AAgBF,eAAO,MAAM,IAAI,GACf,OAAM,MAAM,EAA0B,KACrC,OAAO,CAAC,IAAI,CA0Ud,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,KAAG,UA8K1C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.parseArgs = exports.main = exports.registerAgentSignalHandlers = exports.isAgentVariantsEnabled = exports.buildAgentDevServerContext = exports.DEFAULT_USER_PORT = exports.DEFAULT_PORT = void 0;
39
+ exports.parseArgs = exports.main = exports.registerOwnedDevServerSignalHandlers = exports.registerAgentSignalHandlers = exports.isAgentVariantsEnabled = exports.updateOwnedDevServerHealthOnExit = exports.buildAgentDevServerHealth = exports.resolveAgentDevServer = exports.buildAgentDevServerContext = exports.DEFAULT_USER_PORT = exports.DEFAULT_PORT = void 0;
40
40
  /* eslint-disable no-console */
41
41
  const child_process_1 = require("child_process");
42
42
  const dotenv = __importStar(require("dotenv"));
@@ -51,18 +51,19 @@ const AgentSessionService_1 = require("./services/AgentSessionService");
51
51
  const TerminalAgentRunner_1 = require("./services/TerminalAgentRunner");
52
52
  const ConfigManager_1 = require("./services/ConfigManager");
53
53
  const SessionBridgeService_1 = require("./services/SessionBridgeService");
54
+ const DevServerRuntimeService_1 = require("./services/DevServerRuntimeService");
54
55
  const TelemetryService_1 = require("./services/TelemetryService");
55
56
  const skillWriter_1 = require("./utils/skillWriter");
56
57
  const portUtils_1 = require("./utils/portUtils");
57
- const createAgentVariantsOrchestrator_1 = require("./services/createAgentVariantsOrchestrator");
58
- const InlineVariantGenerationService_1 = require("./services/InlineVariantGenerationService");
58
+ const VariantsRuntime_1 = require("./services/VariantsRuntime");
59
+ const VisualVariantAgentRunner_1 = require("./services/VisualVariantAgentRunner");
59
60
  const log = (0, index_core_1.createLogger)('RivetCLI');
60
61
  exports.DEFAULT_PORT = 4000;
61
62
  exports.DEFAULT_USER_PORT = 3000;
62
63
  /**
63
64
  * Builds the dev-server context advertised to the embedded agent UI.
64
65
  */
65
- const buildAgentDevServerContext = ({ framework, devServerHost, userDevServerPort, }) => {
66
+ const buildAgentDevServerContext = ({ framework, ownership, devServerHost, userDevServerPort, startedByRivet, }) => {
66
67
  if (framework === 'static' || userDevServerPort === 0) {
67
68
  return {
68
69
  ownership: 'none',
@@ -72,13 +73,161 @@ const buildAgentDevServerContext = ({ framework, devServerHost, userDevServerPor
72
73
  };
73
74
  }
74
75
  return {
75
- ownership: 'external',
76
+ ownership: ownership ?? 'external',
76
77
  host: devServerHost ?? 'localhost',
77
78
  port: userDevServerPort,
78
- startedByRivet: false,
79
+ startedByRivet: startedByRivet ?? false,
79
80
  };
80
81
  };
81
82
  exports.buildAgentDevServerContext = buildAgentDevServerContext;
83
+ /**
84
+ * Resolves the target app endpoint for embedded agent mode.
85
+ */
86
+ const resolveAgentDevServer = async ({ projectPath, options, detection = new index_core_1.ProjectDetectionService(), runtime = (0, DevServerRuntimeService_1.createDevServerRuntimeService)(), }) => {
87
+ if (options.userPort) {
88
+ const framework = options.framework ?? 'nextjs';
89
+ const packageManager = await detection.detectPackageManager(projectPath);
90
+ const project = {
91
+ id: path_1.default.basename(projectPath),
92
+ framework,
93
+ path: projectPath,
94
+ devServerPort: options.userPort,
95
+ devServerHost: 'localhost',
96
+ status: 'detected',
97
+ packageManager,
98
+ };
99
+ return {
100
+ project,
101
+ userDevServerPort: options.userPort,
102
+ devServerContext: (0, exports.buildAgentDevServerContext)({
103
+ framework,
104
+ devServerHost: project.devServerHost,
105
+ userDevServerPort: options.userPort,
106
+ }),
107
+ };
108
+ }
109
+ try {
110
+ const project = (await detection.detectProject(projectPath, options.framework, options.entry, [], options.userPort));
111
+ const userDevServerPort = project.devServerPort;
112
+ return {
113
+ project,
114
+ userDevServerPort,
115
+ devServerContext: (0, exports.buildAgentDevServerContext)({
116
+ framework: project.framework,
117
+ devServerHost: project.devServerHost,
118
+ userDevServerPort,
119
+ }),
120
+ };
121
+ }
122
+ catch (error) {
123
+ const isNoServerError = error instanceof Error && error.message.includes('No running dev server');
124
+ if (!isNoServerError) {
125
+ throw error;
126
+ }
127
+ }
128
+ const framework = options.framework ?? detection.detectFramework(projectPath);
129
+ const packageManager = await detection.detectPackageManager(projectPath);
130
+ if (framework === 'static') {
131
+ const project = {
132
+ id: path_1.default.basename(projectPath),
133
+ framework,
134
+ path: projectPath,
135
+ devServerPort: 0,
136
+ devServerHost: 'localhost',
137
+ status: 'detected',
138
+ packageManager,
139
+ entryPoint: options.entry ?? 'index.html',
140
+ };
141
+ return {
142
+ project,
143
+ userDevServerPort: 0,
144
+ devServerContext: (0, exports.buildAgentDevServerContext)({
145
+ framework,
146
+ userDevServerPort: 0,
147
+ }),
148
+ };
149
+ }
150
+ const runningServer = await detection.findRunningDevServer(projectPath, []);
151
+ if (runningServer) {
152
+ const project = {
153
+ id: path_1.default.basename(projectPath),
154
+ framework,
155
+ path: projectPath,
156
+ devServerPort: runningServer.port,
157
+ devServerHost: runningServer.host,
158
+ status: 'detected',
159
+ packageManager,
160
+ };
161
+ return {
162
+ project,
163
+ userDevServerPort: runningServer.port,
164
+ devServerContext: (0, exports.buildAgentDevServerContext)({
165
+ framework,
166
+ devServerHost: runningServer.host,
167
+ userDevServerPort: runningServer.port,
168
+ }),
169
+ };
170
+ }
171
+ const preferredPort = detection.readConfiguredPort(projectPath) ??
172
+ (framework === 'vite' || framework === 'svelte' ? 5173 : exports.DEFAULT_USER_PORT);
173
+ const started = await runtime.start({
174
+ projectPath,
175
+ framework,
176
+ packageManager,
177
+ preferredPort,
178
+ });
179
+ if (!started.success) {
180
+ throw new Error(started.error);
181
+ }
182
+ const project = {
183
+ id: path_1.default.basename(projectPath),
184
+ framework,
185
+ path: projectPath,
186
+ devServerPort: started.port,
187
+ devServerHost: started.host,
188
+ status: 'detected',
189
+ packageManager,
190
+ };
191
+ return {
192
+ project,
193
+ userDevServerPort: started.port,
194
+ devServerContext: (0, exports.buildAgentDevServerContext)({
195
+ framework,
196
+ ownership: 'rivet_owned',
197
+ devServerHost: started.host,
198
+ userDevServerPort: started.port,
199
+ startedByRivet: true,
200
+ }),
201
+ cleanup: started.stop,
202
+ ownedProcess: started.process,
203
+ };
204
+ };
205
+ exports.resolveAgentDevServer = resolveAgentDevServer;
206
+ /** Builds the current preview server health state used by variant preview routing. */
207
+ const buildAgentDevServerHealth = (context) => ({
208
+ ...context,
209
+ isReachable: context.ownership === 'none' ? null : true,
210
+ reason: context.ownership === 'none' ? 'unknown' : 'healthy',
211
+ lastCheckedAt: Date.now(),
212
+ });
213
+ exports.buildAgentDevServerHealth = buildAgentDevServerHealth;
214
+ /**
215
+ * Updates bridge health when the active owned app dev server exits.
216
+ */
217
+ const updateOwnedDevServerHealthOnExit = (bridge, ownedDevServerPort) => {
218
+ const currentHealth = bridge.getDevServerHealth();
219
+ if (!bridge.isActive() ||
220
+ currentHealth.ownership !== 'rivet_owned' ||
221
+ currentHealth.port !== ownedDevServerPort) {
222
+ return;
223
+ }
224
+ bridge.updateDevServerHealth({
225
+ isReachable: false,
226
+ reason: 'upstream_unreachable',
227
+ lastCheckedAt: Date.now(),
228
+ });
229
+ };
230
+ exports.updateOwnedDevServerHealthOnExit = updateOwnedDevServerHealthOnExit;
82
231
  /**
83
232
  * Returns whether embedded agent variants can be offered for this runtime.
84
233
  */
@@ -93,6 +242,22 @@ const registerAgentSignalHandlers = (runner) => {
93
242
  process.prependOnceListener('SIGTERM', stopAgentChildren);
94
243
  };
95
244
  exports.registerAgentSignalHandlers = registerAgentSignalHandlers;
245
+ /**
246
+ * @effect Sends a best-effort signal to an owned app dev server before process exit.
247
+ */
248
+ const registerOwnedDevServerSignalHandlers = (options) => {
249
+ const stopOwnedDevServer = () => {
250
+ try {
251
+ options.kill('SIGTERM');
252
+ }
253
+ catch {
254
+ // The process may have already exited; async shutdown remains authoritative.
255
+ }
256
+ };
257
+ process.prependOnceListener('SIGINT', stopOwnedDevServer);
258
+ process.prependOnceListener('SIGTERM', stopOwnedDevServer);
259
+ };
260
+ exports.registerOwnedDevServerSignalHandlers = registerOwnedDevServerSignalHandlers;
96
261
  /** Host for production hosted tryout; aligns with `DEMO_PUBLIC_BASE_URL` on Render. */
97
262
  const DEMO_TRYOUT_PUBLIC_HOST = 'demo.rivet.design';
98
263
  const isDemoTryoutPublicBaseUrl = (url) => {
@@ -120,9 +285,25 @@ const main = async (args = process.argv.slice(2)) => {
120
285
  return;
121
286
  }
122
287
  if (command === 'mcp') {
123
- const { startMCPServer } = await Promise.resolve().then(() => __importStar(require('./mcp/server')));
124
288
  const editorFlagIndex = args.indexOf('--editor');
125
289
  const mcpEditor = editorFlagIndex !== -1 ? args[editorFlagIndex + 1] : undefined;
290
+ if (args.includes('--http')) {
291
+ // Streamable HTTP + MCP OAuth so clients (Cursor/Claude/Codex) can
292
+ // offer their native "Connect" sign-in instead of the stdio login tool.
293
+ const { startMCPServerHttp } = await Promise.resolve().then(() => __importStar(require('./mcp/httpServer')));
294
+ const portFlagIndex = args.indexOf('--port');
295
+ const parsedPort = portFlagIndex !== -1
296
+ ? Number.parseInt(args[portFlagIndex + 1] ?? '', 10)
297
+ : Number.NaN;
298
+ await startMCPServerHttp({
299
+ port: Number.isInteger(parsedPort) && parsedPort > 0
300
+ ? parsedPort
301
+ : undefined,
302
+ mcpEditor,
303
+ });
304
+ return;
305
+ }
306
+ const { startMCPServer } = await Promise.resolve().then(() => __importStar(require('./mcp/server')));
126
307
  await startMCPServer(mcpEditor);
127
308
  return;
128
309
  }
@@ -238,6 +419,20 @@ const main = async (args = process.argv.slice(2)) => {
238
419
  debugMode: options.debug,
239
420
  });
240
421
  log.debug(`📡 Connecting to project dev server on port ${userDevServerPort}${options.userPort ? ' (user-specified)' : ' (detected)'}`);
422
+ const devServerContext = (0, exports.buildAgentDevServerContext)({
423
+ framework: project.framework,
424
+ devServerHost: project.devServerHost,
425
+ userDevServerPort,
426
+ });
427
+ const variantsRuntime = (0, exports.isAgentVariantsEnabled)(options)
428
+ ? (0, VariantsRuntime_1.createVariantsRuntime)({
429
+ projectPath,
430
+ telemetry,
431
+ runner: new VisualVariantAgentRunner_1.VisualVariantAgentRunner(),
432
+ devServerContext,
433
+ devServerHealth: (0, exports.buildAgentDevServerHealth)(devServerContext),
434
+ })
435
+ : undefined;
241
436
  // Start server; on EADDRINUSE retry with next available port (handles race when desktop or another instance binds first).
242
437
  let serverStarted = false;
243
438
  let retries = 0;
@@ -252,6 +447,7 @@ const main = async (args = process.argv.slice(2)) => {
252
447
  staticEntry: project.entryPoint,
253
448
  styleFramework: options.styleFramework,
254
449
  tailwindConfig: options.tailwindConfig,
450
+ variantsRuntime,
255
451
  rivetPort,
256
452
  skipProcessHandlers: retries > 0,
257
453
  isGitEnabled: options.noGit ? false : true,
@@ -559,139 +755,116 @@ const handleAgent = async (args) => {
559
755
  const agentLabel = agentKind === 'codex' ? 'Codex' : 'Claude Code';
560
756
  console.log(`\n⚠️ Rivet agent mode uses ${agentLabel} bypass permissions.`);
561
757
  console.log('Only run this in local projects you trust.\n');
562
- const projectDetection = new index_core_1.ProjectDetectionService();
563
758
  const projectPath = process.cwd();
564
- let project;
565
- let userDevServerPort;
566
- try {
567
- project = await projectDetection.detectProject(projectPath, options.framework, options.entry, [], options.userPort);
568
- userDevServerPort = options.userPort || project.devServerPort;
569
- }
570
- catch (error) {
571
- if (options.userPort) {
572
- userDevServerPort = options.userPort;
573
- project = {
574
- id: path_1.default.basename(projectPath),
575
- framework: (options.framework || 'nextjs'),
576
- path: projectPath,
577
- devServerPort: options.userPort,
578
- devServerHost: 'localhost',
579
- status: 'detected',
580
- packageManager: 'npm',
581
- };
582
- }
583
- else {
584
- const isNoServerError = error instanceof Error &&
585
- error.message.includes('No running dev server');
586
- if (!isNoServerError) {
587
- throw error;
588
- }
589
- log.error('❌ No dev server detected.');
590
- log.error(' Please start your dev server first (e.g., npm run dev), then run rivet agent again.');
591
- process.exit(1);
592
- }
593
- }
594
- if (userDevServerPort === undefined) {
595
- log.error('❌ Could not determine dev server port.');
596
- process.exit(1);
597
- }
598
- let rivetPort = options.rivetPort ?? (await (0, portUtils_1.findAvailablePort)(exports.DEFAULT_PORT));
599
- const bridge = new SessionBridgeService_1.SessionBridgeService();
600
- const sessionId = bridge.startSession(projectPath);
601
- const devServerContext = (0, exports.buildAgentDevServerContext)({
602
- framework: project.framework,
603
- devServerHost: project.devServerHost,
604
- userDevServerPort,
605
- });
606
- bridge.setDevServerContext(devServerContext);
607
- bridge.updateDevServerHealth({
608
- isReachable: devServerContext.ownership === 'none' ? null : true,
609
- reason: devServerContext.ownership === 'none' ? 'unknown' : 'healthy',
610
- lastCheckedAt: Date.now(),
611
- });
612
- const runner = new TerminalAgentRunner_1.TerminalAgentRunner({
613
- agent: agentKind,
614
- agentBin: options.agentBin,
615
- claudeBin: options.claudeBin,
616
- model: options.model,
617
- timeoutSeconds: options.agentTimeoutSeconds ?? TerminalAgentRunner_1.DEFAULT_AGENT_TIMEOUT_SECONDS,
618
- });
619
- const areAgentVariantsEnabled = (0, exports.isAgentVariantsEnabled)(options);
620
- const agentVariantsOrchestrator = areAgentVariantsEnabled
621
- ? (0, createAgentVariantsOrchestrator_1.createAgentVariantsOrchestrator)({
622
- bridge,
623
- telemetry,
624
- projectPathFallback: projectPath,
625
- })
626
- : undefined;
627
- const inlineVariantService = agentVariantsOrchestrator
628
- ? new InlineVariantGenerationService_1.InlineVariantGenerationService({
629
- bridge,
630
- orchestrator: agentVariantsOrchestrator,
631
- runner,
632
- })
633
- : undefined;
634
- const agentSession = new AgentSessionService_1.AgentSessionService({
635
- bridge,
759
+ const agentDevServer = await (0, exports.resolveAgentDevServer)({
636
760
  projectPath,
637
- runner,
638
- inlineVariantService,
639
- worktreeProjectLocator: agentVariantsOrchestrator,
761
+ options,
640
762
  });
641
- let serverStarted = false;
642
- let retries = 0;
643
- const maxRetries = 5;
644
- while (!serverStarted && retries < maxRetries) {
645
- try {
646
- await (0, server_1.startServer)({
647
- userPort: userDevServerPort,
648
- userHost: project.devServerHost,
649
- framework: project.framework,
650
- telemetry,
763
+ const { project, userDevServerPort, devServerContext } = agentDevServer;
764
+ try {
765
+ let rivetPort = options.rivetPort ?? (await (0, portUtils_1.findAvailablePort)(exports.DEFAULT_PORT));
766
+ const runner = new TerminalAgentRunner_1.TerminalAgentRunner({
767
+ agent: agentKind,
768
+ agentBin: options.agentBin,
769
+ claudeBin: options.claudeBin,
770
+ model: options.model,
771
+ timeoutSeconds: options.agentTimeoutSeconds ?? TerminalAgentRunner_1.DEFAULT_AGENT_TIMEOUT_SECONDS,
772
+ });
773
+ const areAgentVariantsEnabled = (0, exports.isAgentVariantsEnabled)(options);
774
+ const variantsRuntime = areAgentVariantsEnabled
775
+ ? (0, VariantsRuntime_1.createVariantsRuntime)({
651
776
  projectPath,
652
- staticEntry: project.entryPoint,
653
- styleFramework: options.styleFramework,
654
- tailwindConfig: options.tailwindConfig,
655
- sessionBridge: bridge,
656
- agentVariantsOrchestrator,
657
- mcpEditor: agentKind === 'codex' ? 'codex' : 'claude',
658
- agentApplyMode: 'embedded',
659
- agentRunController: agentSession,
660
- rivetPort,
661
- isGitEnabled: options.noGit ? false : true,
662
- skipProcessHandlers: retries > 0,
777
+ telemetry,
778
+ runner,
779
+ devServerContext,
780
+ devServerHealth: (0, exports.buildAgentDevServerHealth)(devServerContext),
781
+ })
782
+ : undefined;
783
+ const bridge = variantsRuntime?.bridge ?? new SessionBridgeService_1.SessionBridgeService();
784
+ if (!variantsRuntime) {
785
+ bridge.startSession(projectPath);
786
+ bridge.setDevServerContext(devServerContext);
787
+ bridge.updateDevServerHealth((0, exports.buildAgentDevServerHealth)(devServerContext));
788
+ }
789
+ const sessionId = bridge.getSessionId() ?? bridge.startSession(projectPath);
790
+ if (agentDevServer.ownedProcess) {
791
+ const ownedDevServerPort = devServerContext.port;
792
+ (0, exports.registerOwnedDevServerSignalHandlers)(agentDevServer.ownedProcess);
793
+ agentDevServer.ownedProcess.once('exit', () => {
794
+ (0, exports.updateOwnedDevServerHealthOnExit)(bridge, ownedDevServerPort);
663
795
  });
664
- serverStarted = true;
665
796
  }
666
- catch (err) {
667
- const code = err?.code;
668
- if (code === 'EADDRINUSE' && !options.rivetPort) {
669
- retries++;
670
- rivetPort = await (0, portUtils_1.findAvailablePort)(rivetPort + 1);
671
- log.debug(`Port in use, retrying with port ${rivetPort} (attempt ${retries}/${maxRetries})`);
797
+ const agentVariantsOrchestrator = variantsRuntime?.orchestrator;
798
+ const variantRunService = variantsRuntime?.runService;
799
+ const agentSession = new AgentSessionService_1.AgentSessionService({
800
+ bridge,
801
+ projectPath,
802
+ runner,
803
+ variantRunService,
804
+ worktreeProjectLocator: agentVariantsOrchestrator,
805
+ });
806
+ let serverStarted = false;
807
+ let retries = 0;
808
+ const maxRetries = 5;
809
+ while (!serverStarted && retries < maxRetries) {
810
+ try {
811
+ await (0, server_1.startServer)({
812
+ userPort: userDevServerPort,
813
+ userHost: project.devServerHost,
814
+ framework: project.framework,
815
+ telemetry,
816
+ projectPath,
817
+ staticEntry: project.entryPoint,
818
+ styleFramework: options.styleFramework,
819
+ tailwindConfig: options.tailwindConfig,
820
+ sessionBridge: bridge,
821
+ variantsRuntime,
822
+ mcpEditor: agentKind === 'codex' ? 'codex' : 'claude',
823
+ agentApplyMode: 'embedded',
824
+ agentRunController: agentSession,
825
+ rivetPort,
826
+ isGitEnabled: options.noGit ? false : true,
827
+ skipProcessHandlers: retries > 0,
828
+ beforeShutdown: agentDevServer.cleanup,
829
+ });
830
+ serverStarted = true;
672
831
  }
673
- else {
674
- throw err;
832
+ catch (err) {
833
+ const code = err?.code;
834
+ if (code === 'EADDRINUSE' && !options.rivetPort) {
835
+ retries++;
836
+ rivetPort = await (0, portUtils_1.findAvailablePort)(rivetPort + 1);
837
+ log.debug(`Port in use, retrying with port ${rivetPort} (attempt ${retries}/${maxRetries})`);
838
+ }
839
+ else {
840
+ await agentDevServer.cleanup?.();
841
+ throw err;
842
+ }
675
843
  }
676
844
  }
845
+ if (!serverStarted) {
846
+ await agentDevServer.cleanup?.();
847
+ log.error(`❌ Could not start Rivet server after ${maxRetries} attempts.`);
848
+ process.exit(1);
849
+ }
850
+ agentSession.start();
851
+ (0, exports.registerAgentSignalHandlers)(runner);
852
+ log.info(`✅ Rivet agent server started on http://${agentHost}:${rivetPort}`);
853
+ log.info(`${runner.getDisplayName()} session: ${agentSession.getContinuousSessionId()}`);
854
+ if (!options.noBrowser) {
855
+ const rivetUiPath = project.framework === 'static' ? '/' : '/rivet';
856
+ await (0, open_1.default)(`http://${agentHost}:${rivetPort}${rivetUiPath}`);
857
+ log.info('🌐 Opened Rivet in your browser');
858
+ }
859
+ log.info(`✅ Rivet agent connected to your ${project.framework} project`);
860
+ log.info(`Bridge session: ${sessionId}`);
861
+ log.info('Press Ctrl+C to stop');
862
+ await new Promise(() => { });
677
863
  }
678
- if (!serverStarted) {
679
- log.error(`❌ Could not start Rivet server after ${maxRetries} attempts.`);
680
- process.exit(1);
864
+ catch (error) {
865
+ await agentDevServer.cleanup?.();
866
+ throw error;
681
867
  }
682
- agentSession.start();
683
- (0, exports.registerAgentSignalHandlers)(runner);
684
- log.info(`✅ Rivet agent server started on http://${agentHost}:${rivetPort}`);
685
- log.info(`${runner.getDisplayName()} session: ${agentSession.getContinuousSessionId()}`);
686
- if (!options.noBrowser) {
687
- const rivetUiPath = project.framework === 'static' ? '/' : '/rivet';
688
- await (0, open_1.default)(`http://${agentHost}:${rivetPort}${rivetUiPath}`);
689
- log.info('🌐 Opened Rivet in your browser');
690
- }
691
- log.info(`✅ Rivet agent connected to your ${project.framework} project`);
692
- log.info(`Bridge session: ${sessionId}`);
693
- log.info('Press Ctrl+C to stop');
694
- await new Promise(() => { });
695
868
  };
696
869
  const showHelp = () => {
697
870
  console.log(`