rivet-design 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +2 -2
  2. package/README.npm.md +2 -2
  3. package/dist/agent-variants/PreviewRuntime.d.ts +1 -20
  4. package/dist/agent-variants/PreviewRuntime.js +1 -102
  5. package/dist/agent-variants/SessionStore.d.ts +1 -8
  6. package/dist/agent-variants/SessionStore.js +2 -32
  7. package/dist/agent-variants/WorkspaceInventory.d.ts +0 -3
  8. package/dist/agent-variants/WorkspaceInventory.js +5 -28
  9. package/dist/agent-variants/WorktreeOrchestrator.d.ts +1 -30
  10. package/dist/agent-variants/WorktreeOrchestrator.js +4 -643
  11. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +0 -7
  12. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js +0 -34
  13. package/dist/agent-variants/contracts.d.ts +0 -60
  14. package/dist/agent-variants/contracts.js +1 -8
  15. package/dist/agent-variants/index.d.ts +1 -1
  16. package/dist/agent-variants/runPlan.d.ts +0 -2
  17. package/dist/agent-variants/runPlan.js +0 -3
  18. package/dist/agent-variants/variant-project-runtime.d.ts +0 -2
  19. package/dist/agent-variants/variantWorkspaceFiles.d.ts +0 -3
  20. package/dist/agent-variants/variantWorkspaceFiles.js +1 -59
  21. package/dist/agent-variants/variantsTelemetry.d.ts +0 -8
  22. package/dist/cli/commands/mcpServe.d.ts +2 -2
  23. package/dist/cli/commands/mcpServe.js +1 -0
  24. package/dist/cli/commands/variants.js +2 -43
  25. package/dist/cli/router.js +3 -2
  26. package/dist/config/flags.d.ts +0 -3
  27. package/dist/config/flags.js +0 -1
  28. package/dist/config/pluginMetrics.js +0 -4
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +20 -8
  31. package/dist/install/mcpRegistration.js +1 -0
  32. package/dist/mcp/explorationTools.js +0 -17
  33. package/dist/routes/account.js +4 -2
  34. package/dist/routes/agentVariants.js +1 -89
  35. package/dist/routes/library/browserAccess.d.ts +3 -1
  36. package/dist/routes/library/browserAccess.js +5 -3
  37. package/dist/routes/library/index.js +1 -0
  38. package/dist/services/AuthService.js +2 -2
  39. package/dist/services/ConfigManager.d.ts +18 -1
  40. package/dist/services/ConfigManager.js +91 -4
  41. package/dist/services/SessionBridgeService.d.ts +0 -2
  42. package/dist/services/SessionBridgeService.js +0 -26
  43. package/dist/services/TelemetryService.d.ts +4 -15
  44. package/dist/services/TelemetryService.js +29 -33
  45. package/dist/services/VariantRunService.d.ts +0 -5
  46. package/dist/services/VariantRunService.js +0 -3
  47. package/dist/services/WorktreeManager.d.ts +0 -3
  48. package/dist/services/WorktreeManager.js +7 -54
  49. package/dist/services/createAgentVariantsOrchestrator.js +0 -1
  50. package/dist/services/profiles/DesignProfiles.js +4 -3
  51. package/dist/utils/skills/claude-skill.d.ts +1 -1
  52. package/dist/utils/skills/claude-skill.js +1 -1
  53. package/dist/utils/skills/cli-guidance.d.ts +1 -1
  54. package/dist/utils/skills/cli-guidance.js +6 -8
  55. package/dist/utils/skills/cursor-rules.d.ts +1 -1
  56. package/dist/utils/skills/cursor-rules.js +1 -1
  57. package/package.json +3 -3
  58. package/src/ui/dist/assets/{LibraryEntry-BJl_pPMq.js → LibraryEntry-CFkd6v_O.js} +9 -9
  59. package/src/ui/dist/assets/main-B_jie9r3.js +439 -0
  60. package/src/ui/dist/index.html +1 -1
  61. package/dist/agent-variants/createProjectArtifacts.d.ts +0 -61
  62. package/dist/agent-variants/createProjectArtifacts.js +0 -113
  63. package/src/ui/dist/assets/main-D1832qVC.js +0 -439
@@ -24,20 +24,13 @@ export declare class FakeWorktreeManager implements WorktreeManagerLike {
24
24
  startDevServer(worktreePath: string, port: number, cmd: string, args: string[], env: Record<string, string>): Promise<never>;
25
25
  stopDevServer(): Promise<void>;
26
26
  getProjectCwdInWorktree(worktreePath: string): Promise<string>;
27
- applyDiffToProjectImpl: (diff: string, projectPath: string) => Promise<void>;
28
- applyDiffToProject(diff: string, projectPath: string): Promise<void>;
29
27
  }
30
28
  export declare const ENV: ProjectEnvironment;
31
29
  export interface OrchestratorHarness {
32
30
  installCalls: Array<{
33
31
  worktreePath: string;
34
32
  }>;
35
- materializeCalls: Array<{
36
- source: string;
37
- destination: string;
38
- }>;
39
33
  installResult: Promise<void>;
40
- materializeResult: Promise<void>;
41
34
  destinationExists: boolean;
42
35
  telemetryEvents: Array<{
43
36
  event: string;
@@ -96,14 +96,6 @@ class FakeWorktreeManager {
96
96
  });
97
97
  return worktreePath;
98
98
  }
99
- applyDiffToProjectImpl = async () => undefined;
100
- async applyDiffToProject(diff, projectPath) {
101
- this.calls.push({
102
- method: 'applyDiffToProject',
103
- args: [diff, projectPath],
104
- });
105
- return this.applyDiffToProjectImpl(diff, projectPath);
106
- }
107
99
  }
108
100
  exports.FakeWorktreeManager = FakeWorktreeManager;
109
101
  exports.ENV = {
@@ -124,9 +116,7 @@ function buildOrchestrator(opts = {}) {
124
116
  const worktreeManager = new FakeWorktreeManager();
125
117
  const harness = {
126
118
  installCalls: [],
127
- materializeCalls: [],
128
119
  installResult: Promise.resolve(),
129
- materializeResult: Promise.resolve(),
130
120
  destinationExists: opts.destinationExists ?? false,
131
121
  telemetryEvents: [],
132
122
  switchPreviewPortCalls: [],
@@ -143,26 +133,10 @@ function buildOrchestrator(opts = {}) {
143
133
  harness.installCalls.push({ worktreePath });
144
134
  return harness.installResult;
145
135
  },
146
- materializeProject: async (source, destination) => {
147
- harness.materializeCalls.push({ source, destination });
148
- return harness.materializeResult;
149
- },
150
136
  previewQaRunner: opts.previewQaRunner ?? exports.passingQaRunner,
151
137
  switchPreviewPort: (port) => {
152
138
  harness.switchPreviewPortCalls.push(port);
153
139
  },
154
- startStaticPreviewServer: async () => {
155
- const stub = {
156
- killed: false,
157
- exitCode: 0,
158
- pid: undefined,
159
- kill: () => true,
160
- on: () => stub,
161
- once: () => stub,
162
- off: () => stub,
163
- };
164
- return stub;
165
- },
166
140
  telemetry: {
167
141
  track: (event, properties) => harness.telemetryEvents.push({ event, properties }),
168
142
  trackAgentVariantsSourceContextQuality: (properties) => harness.telemetryEvents.push({
@@ -221,14 +195,6 @@ function buildOrchestrator(opts = {}) {
221
195
  event: 'agent_variants.round_completed',
222
196
  properties,
223
197
  }),
224
- trackAgentVariantsCommitFailed: (properties) => harness.telemetryEvents.push({
225
- event: 'agent_variants.commit_failed',
226
- properties,
227
- }),
228
- trackAgentVariantsNewProjectMaterialized: (properties) => harness.telemetryEvents.push({
229
- event: 'agent_variants.new_project_materialized',
230
- properties,
231
- }),
232
198
  },
233
199
  });
234
200
  builtOrchestrators.push(orchestrator);
@@ -7996,10 +7996,6 @@ export interface ActiveVariantActions {
7996
7996
  enabled: boolean;
7997
7997
  reason?: string;
7998
7998
  };
7999
- commit?: {
8000
- enabled: boolean;
8001
- reason?: string;
8002
- };
8003
7999
  }
8004
8000
  export interface SavedVariantPreview {
8005
8001
  source: {
@@ -10629,32 +10625,6 @@ export type ReportVariantBriefsInput = {
10629
10625
  briefs: Brief[];
10630
10626
  bindings?: VariantContextBinding[];
10631
10627
  };
10632
- export declare const commitVariantInput: {
10633
- sessionId: z.ZodString;
10634
- variantId: z.ZodString;
10635
- confirmedByUser: z.ZodOptional<z.ZodBoolean>;
10636
- bypassRequestedByUser: z.ZodOptional<z.ZodBoolean>;
10637
- bypassReason: z.ZodOptional<z.ZodString>;
10638
- };
10639
- export type CommitVariantInput = {
10640
- sessionId: string;
10641
- variantId: string;
10642
- confirmedByUser?: boolean;
10643
- bypassRequestedByUser?: boolean;
10644
- bypassReason?: string;
10645
- };
10646
- export type CommitVariantOutput = {
10647
- stage: Stage;
10648
- enqueued: boolean;
10649
- duplicate: boolean;
10650
- changedFilesCount: number;
10651
- payloadKind?: 'diff' | 'diff-applied' | 'project-created';
10652
- destinationPath?: string;
10653
- } | {
10654
- stage: 'failed';
10655
- errorCode: ErrorCode;
10656
- message: string;
10657
- };
10658
10628
  export declare const continueVariantsAction: z.ZodOptional<z.ZodEnum<["check", "wait", "request_work", "refine_variant"]>>;
10659
10629
  export declare const continueVariantsInput: {
10660
10630
  sessionId: z.ZodString;
@@ -11133,35 +11103,5 @@ export type GetVariantOutput = {
11133
11103
  errorCode: ErrorCode;
11134
11104
  message: string;
11135
11105
  };
11136
- export type VariantPickPayload = {
11137
- kind: 'diff';
11138
- diff: string;
11139
- target?: Target;
11140
- changedFilesCount: number;
11141
- } | {
11142
- kind: 'diff-applied';
11143
- diff: string;
11144
- target?: Target;
11145
- changedFilesCount: number;
11146
- note: string;
11147
- } | {
11148
- kind: 'new-project';
11149
- destinationPath: string;
11150
- sourceWorktreePath: string;
11151
- changedFilesCount: number;
11152
- } | {
11153
- kind: 'project-created';
11154
- destinationPath: string;
11155
- changedFilesCount: number;
11156
- note: string;
11157
- };
11158
- export interface VariantPickEnvelope {
11159
- sourceSessionId: string;
11160
- variantId: string;
11161
- variantLabel: string;
11162
- destinationPath: string;
11163
- changedFilesCount: number;
11164
- payload: VariantPickPayload;
11165
- }
11166
11106
  export { ERROR_CODES, type ErrorCode };
11167
11107
  //# sourceMappingURL=contracts.d.ts.map
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ERROR_CODES = exports.getVariantInput = exports.captureDesignEvidenceInput = exports.listPastVariantsInput = exports.variantHistoryStatusSchema = exports.startVariantsBriefContent = exports.cancelVariantsInput = exports.reportWorkItemInput = exports.reportVariantCompleteStatus = exports.continueVariantsInput = exports.continueVariantsAction = exports.commitVariantInput = exports.reportVariantBriefsInput = exports.proposeVariantsInput = exports.runLabelSchema = exports.DEFAULT_VARIANT_COUNT = exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.variantWorkItemContextSchema = exports.briefSchema = exports.targetSchema = exports.isWorkerFidelity = exports.VARIANT_EXECUTION_MODES = exports.projectContextInputSchema = exports.projectContextSchema = exports.projectContextFresh = exports.projectContextExisting = exports.variantContextBundleSchema = exports.executionCapabilityPlanSchema = exports.assetPlanEntrySchema = exports.executionConfidenceSchema = exports.executionModeSchema = exports.variantContextBindingSchema = exports.rivetMetadataSchema = exports.rivetContextActionSchema = exports.rivetContextActionKindSchema = exports.storedUserContextSourceRecordSchema = exports.stagedContextAssetSchema = exports.contextAssetInputSchema = exports.rawUserContextSourceSchema = exports.rawUserContextInputSchema = exports.sourceRoleSchema = exports.designContextEntrySchema = exports.CONTEXT_ASSET_MAX_ITEMS = exports.WORK_ITEM_STATUSES = exports.WORK_ITEM_KINDS = exports.TERMINAL_STAGES = exports.STAGES = void 0;
3
+ exports.ERROR_CODES = exports.getVariantInput = exports.captureDesignEvidenceInput = exports.listPastVariantsInput = exports.variantHistoryStatusSchema = exports.startVariantsBriefContent = exports.cancelVariantsInput = exports.reportWorkItemInput = exports.reportVariantCompleteStatus = exports.continueVariantsInput = exports.continueVariantsAction = exports.reportVariantBriefsInput = exports.proposeVariantsInput = exports.runLabelSchema = exports.DEFAULT_VARIANT_COUNT = exports.VARIANT_COUNT_MAX = exports.VARIANT_COUNT_MIN = exports.variantWorkItemContextSchema = exports.briefSchema = exports.targetSchema = exports.isWorkerFidelity = exports.VARIANT_EXECUTION_MODES = exports.projectContextInputSchema = exports.projectContextSchema = exports.projectContextFresh = exports.projectContextExisting = exports.variantContextBundleSchema = exports.executionCapabilityPlanSchema = exports.assetPlanEntrySchema = exports.executionConfidenceSchema = exports.executionModeSchema = exports.variantContextBindingSchema = exports.rivetMetadataSchema = exports.rivetContextActionSchema = exports.rivetContextActionKindSchema = exports.storedUserContextSourceRecordSchema = exports.stagedContextAssetSchema = exports.contextAssetInputSchema = exports.rawUserContextSourceSchema = exports.rawUserContextInputSchema = exports.sourceRoleSchema = exports.designContextEntrySchema = exports.CONTEXT_ASSET_MAX_ITEMS = exports.WORK_ITEM_STATUSES = exports.WORK_ITEM_KINDS = exports.TERMINAL_STAGES = exports.STAGES = void 0;
4
4
  const variant_reference_1 = require("../types/variant-reference");
5
5
  const v3_1 = require("zod/v3");
6
6
  const errors_1 = require("./errors");
@@ -446,13 +446,6 @@ exports.reportVariantBriefsInput = {
446
446
  .max(exports.VARIANT_COUNT_MAX)
447
447
  .optional(),
448
448
  };
449
- exports.commitVariantInput = {
450
- sessionId: v3_1.z.string().min(1),
451
- variantId: v3_1.z.string().min(1),
452
- confirmedByUser: v3_1.z.boolean().optional(),
453
- bypassRequestedByUser: v3_1.z.boolean().optional(),
454
- bypassReason: v3_1.z.string().min(1).optional(),
455
- };
456
449
  exports.continueVariantsAction = v3_1.z
457
450
  .enum(['check', 'wait', 'request_work', 'refine_variant'])
458
451
  .optional();
@@ -5,5 +5,5 @@ export type { ActiveSnapshot, DroppedRefinement, OrchestratorDeps, PreviewQaRunn
5
5
  export { slugifyPrompt } from './generatedDestination';
6
6
  export { AgentVariantsError, ERROR_CODES, type ErrorCode } from './errors';
7
7
  export { DEFAULT_VARIANT_COUNT, VARIANT_COUNT_MIN, VARIANT_COUNT_MAX, } from './contracts';
8
- export type { Brief, CancelVariantsInput, CancelVariantsOutput, ContinueVariantsInput, ContinueVariantsOutput, LeaseRecord, LeasedWorkItemDescriptor, ProjectContext, ProposeVariantsInput, ProposeVariantsOutput, RawUserContextInput, RawUserContextSource, ReportVariantBriefsInput, ReportVariantBriefsOutput, RivetContextAction, RivetMetadata, ReportVariantCompleteInput, ReportVariantCompleteOutput, Stage, Target, TerminalSummary, VariantContextBinding, VariantContextBundle, VariantPickEnvelope, VariantPickPayload, VariantWorkItemContext, VisualEditorAttachment, WorkItem, WorkItemKind, WorkItemStatus, } from './contracts';
8
+ export type { Brief, CancelVariantsInput, CancelVariantsOutput, ContinueVariantsInput, ContinueVariantsOutput, LeaseRecord, LeasedWorkItemDescriptor, ProjectContext, ProposeVariantsInput, ProposeVariantsOutput, RawUserContextInput, RawUserContextSource, ReportVariantBriefsInput, ReportVariantBriefsOutput, RivetContextAction, RivetMetadata, ReportVariantCompleteInput, ReportVariantCompleteOutput, Stage, Target, TerminalSummary, VariantContextBinding, VariantContextBundle, VariantWorkItemContext, VisualEditorAttachment, WorkItem, WorkItemKind, WorkItemStatus, } from './contracts';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -10,12 +10,10 @@ export type VariantRunPlan = {
10
10
  };
11
11
  export type RunTopology = 'code_gen' | 'static_preview';
12
12
  export type RunProvision = 'git_worktree' | 'template_worktree' | 'none';
13
- export type RunCommit = 'apply_diff' | 'write_static_site' | 'materialize_project';
14
13
  export type RunPreview = 'static_artifact' | 'dev_server';
15
14
  export interface RunPlanPolicy {
16
15
  topology: RunTopology;
17
16
  provision: RunProvision;
18
- commit: RunCommit;
19
17
  needsScaffoldBase: boolean;
20
18
  preview?: RunPreview;
21
19
  }
@@ -15,7 +15,6 @@ function runPlanPolicy(plan) {
15
15
  return {
16
16
  topology: 'code_gen',
17
17
  provision: 'git_worktree',
18
- commit: 'apply_diff',
19
18
  needsScaffoldBase: false,
20
19
  };
21
20
  }
@@ -23,7 +22,6 @@ function runPlanPolicy(plan) {
23
22
  return {
24
23
  topology: 'static_preview',
25
24
  provision: 'none',
26
- commit: 'write_static_site',
27
25
  needsScaffoldBase: false,
28
26
  preview: 'static_artifact',
29
27
  };
@@ -31,7 +29,6 @@ function runPlanPolicy(plan) {
31
29
  return {
32
30
  topology: 'code_gen',
33
31
  provision: 'template_worktree',
34
- commit: 'materialize_project',
35
32
  needsScaffoldBase: true,
36
33
  preview: 'dev_server',
37
34
  };
@@ -7,7 +7,6 @@ export interface WorktreeManagerLike {
7
7
  forkWorktreesFrom?(sourceWorktreePath: string, sessionId: string, count: number, instanceKeyPrefix?: string): Promise<string[]>;
8
8
  getDiff(worktreePath: string): Promise<string>;
9
9
  getGitRoot?(): Promise<string>;
10
- applyDiffToProject?(diff: string, projectPath: string): Promise<void>;
11
10
  cleanupSession(sessionId: string, freshDestinationParent?: string): Promise<void>;
12
11
  getFreePort(): Promise<number>;
13
12
  findFreePortFrom(startPort: number): Promise<number>;
@@ -16,7 +15,6 @@ export interface WorktreeManagerLike {
16
15
  stopDevServer(proc: ChildProcess, timeoutMs?: number): Promise<void>;
17
16
  getProjectCwdInWorktree(worktreePath: string): Promise<string>;
18
17
  createFreshWorktrees?(sessionId: string, count: number, template: TemplateBundle, designContext: ReadonlyArray<DesignContextEntry | undefined> | undefined, destinationParent: string): Promise<string[]>;
19
- moveWorktreeToHistory?(srcWorktreePath: string, historyDir: string, folderName: string): string;
20
18
  }
21
19
  type DevServerProjectEnvironment = {
22
20
  projectPath: string;
@@ -36,8 +36,5 @@ export declare const buildServeRecipeFromResolved: (snapshotRoot: string, dev: {
36
36
  }, port: number) => DevServerRecipe;
37
37
  export declare const canInstallWithoutTouchingHost: (cwd: string) => boolean;
38
38
  export declare const assertDevScriptExists: (cwd: string, scriptName: string) => void;
39
- export declare function areSameVolume(a: string, b: string): boolean;
40
- export declare function resolveNodeModulesSymlink(worktreePath: string): Promise<boolean>;
41
- export declare const defaultMaterializeProject: (sourceWorktreePath: string, destinationPath: string) => Promise<void>;
42
39
  export declare function synthesizeUnifiedBriefBody(prompt: string, index: number, total: number): string;
43
40
  //# sourceMappingURL=variantWorkspaceFiles.d.ts.map
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.defaultMaterializeProject = exports.assertDevScriptExists = exports.canInstallWithoutTouchingHost = exports.buildServeRecipeFromResolved = exports.defaultInstallDependencies = exports.STATIC_PREVIEW_HISTORY_FILE_EXTENSIONS = exports.STATIC_PREVIEW_HISTORY_EXCLUDE = exports.MATERIALIZE_EXCLUDE = exports.ALLOWED_INERT_ASSET_EXTENSIONS = void 0;
6
+ exports.assertDevScriptExists = exports.canInstallWithoutTouchingHost = exports.buildServeRecipeFromResolved = exports.defaultInstallDependencies = exports.STATIC_PREVIEW_HISTORY_FILE_EXTENSIONS = exports.STATIC_PREVIEW_HISTORY_EXCLUDE = exports.MATERIALIZE_EXCLUDE = exports.ALLOWED_INERT_ASSET_EXTENSIONS = void 0;
7
7
  exports.estimateOutputBytes = estimateOutputBytes;
8
8
  exports.normalizeOutput = normalizeOutput;
9
9
  exports.resolveAssetWithinBase = resolveAssetWithinBase;
@@ -13,16 +13,12 @@ exports.buildStaticPreviewDocument = buildStaticPreviewDocument;
13
13
  exports.countDiffFiles = countDiffFiles;
14
14
  exports.countWorktreeFiles = countWorktreeFiles;
15
15
  exports.copyStaticPreviewDirectory = copyStaticPreviewDirectory;
16
- exports.areSameVolume = areSameVolume;
17
- exports.resolveNodeModulesSymlink = resolveNodeModulesSymlink;
18
16
  exports.synthesizeUnifiedBriefBody = synthesizeUnifiedBriefBody;
19
17
  const fs_1 = __importDefault(require("fs"));
20
18
  const path_1 = __importDefault(require("path"));
21
- const simple_git_1 = require("simple-git");
22
19
  const DependencyPreparationService_1 = require("../services/DependencyPreparationService");
23
20
  const devServerError_1 = require("../utils/devServerError");
24
21
  const logger_1 = require("../utils/logger");
25
- const errnoCode_1 = require("../utils/errnoCode");
26
22
  const pathContainment_1 = require("../utils/pathContainment");
27
23
  const log = (0, logger_1.createLogger)('VariantWorkspaceFiles');
28
24
  const FALLBACK_DIRECTION_FOCI = [
@@ -357,60 +353,6 @@ const assertDevScriptExists = (cwd, scriptName) => {
357
353
  });
358
354
  };
359
355
  exports.assertDevScriptExists = assertDevScriptExists;
360
- function areSameVolume(a, b) {
361
- try {
362
- const statA = fs_1.default.statSync(a);
363
- const parentB = fs_1.default.existsSync(b) ? b : path_1.default.dirname(b);
364
- const statB = fs_1.default.statSync(parentB);
365
- return statA.dev === statB.dev;
366
- }
367
- catch {
368
- return false;
369
- }
370
- }
371
- async function resolveNodeModulesSymlink(worktreePath) {
372
- const nodeModulesPath = path_1.default.join(worktreePath, 'node_modules');
373
- try {
374
- if (!(await fs_1.default.promises.lstat(nodeModulesPath)).isSymbolicLink())
375
- return false;
376
- await fs_1.default.promises.rm(nodeModulesPath, { force: true });
377
- return true;
378
- }
379
- catch (error) {
380
- if ((0, errnoCode_1.errnoCode)(error) === 'ENOENT')
381
- return true;
382
- throw error;
383
- }
384
- }
385
- const defaultMaterializeProject = async (sourceWorktreePath, destinationPath) => {
386
- await fs_1.default.promises.mkdir(destinationPath, { recursive: true });
387
- await fs_1.default.promises.cp(sourceWorktreePath, destinationPath, {
388
- recursive: true,
389
- filter: (sourcePath) => {
390
- const rel = path_1.default.relative(sourceWorktreePath, sourcePath);
391
- if (!rel)
392
- return true;
393
- const top = rel.split(path_1.default.sep)[0];
394
- return !exports.MATERIALIZE_EXCLUDE.has(top);
395
- },
396
- });
397
- const git = (0, simple_git_1.simpleGit)(destinationPath);
398
- await git.raw(['init']);
399
- await git.raw(['add', '-A']);
400
- await git
401
- .raw([
402
- '-c',
403
- 'user.name=Rivet',
404
- '-c',
405
- 'user.email=hello@tryrivet.design',
406
- 'commit',
407
- '--no-gpg-sign',
408
- '-m',
409
- 'Initial commit (created with Rivet)',
410
- ])
411
- .catch(() => { });
412
- };
413
- exports.defaultMaterializeProject = defaultMaterializeProject;
414
356
  function synthesizeUnifiedBriefBody(prompt, index, total) {
415
357
  const trimmed = prompt.trim().replace(/\s+/g, ' ').slice(0, 200);
416
358
  const intent = trimmed.length > 0 ? trimmed : 'Create this variant';
@@ -14,7 +14,6 @@ export interface VariantsTelemetry {
14
14
  trackAgentVariantsRefinementFailed?: (data: MCPVariantsTelemetryMetadata) => void;
15
15
  trackAgentVariantsRoundStarted?: (data: MCPVariantsTelemetryMetadata) => void;
16
16
  trackAgentVariantsRoundCompleted?: (data: MCPVariantsTelemetryMetadata) => void;
17
- trackAgentVariantsCommitFailed?: (data: MCPVariantsTelemetryMetadata) => void;
18
17
  trackAgentVariantsScaffoldStarted?: (data: {
19
18
  sessionId: string;
20
19
  variantCount: number;
@@ -79,13 +78,6 @@ export interface VariantsTelemetry {
79
78
  signal?: string | null;
80
79
  missingDeps?: boolean;
81
80
  }) => void;
82
- trackAgentVariantsNewProjectMaterialized?: (data: {
83
- sessionId: string;
84
- variantId: string;
85
- destinationPath: string;
86
- changedFilesCount: number;
87
- durationMs: number;
88
- }) => void;
89
81
  trackAgentVariantsSourceContextQuality?: (data: {
90
82
  sessionId: string;
91
83
  sourceUrlCount: number;
@@ -5,12 +5,12 @@ type McpServeOptions = {
5
5
  projectPath?: string;
6
6
  handoffArgs?: string[];
7
7
  noTelemetry?: boolean;
8
- telemetry?: Pick<TelemetryService, 'track' | 'trackCliCommandCompleted' | 'trackMCPToolExecuted' | 'trackMCPToolFailed' | 'shutdown'>;
8
+ telemetry?: Pick<TelemetryService, 'track' | 'trackCliCommandCompleted' | 'trackMCPToolExecuted' | 'trackMCPToolFailed' | 'reportInstallRefActivations' | 'shutdown'>;
9
9
  };
10
10
  export declare const isStaleAttachError: (envelope: CliEnvelope) => boolean;
11
11
  export declare const buildMcpServer: (options?: McpServeOptions) => Promise<{
12
12
  mcp: import("@modelcontextprotocol/sdk/server/mcp.js").McpServer;
13
- telemetry: Pick<TelemetryService, "track" | "trackCliCommandCompleted" | "trackMCPToolExecuted" | "trackMCPToolFailed" | "shutdown"> | null;
13
+ telemetry: Pick<TelemetryService, "reportInstallRefActivations" | "track" | "trackCliCommandCompleted" | "trackMCPToolExecuted" | "trackMCPToolFailed" | "shutdown"> | null;
14
14
  }>;
15
15
  export declare const handleMcpServe: (rest: string[], io: CliIO) => Promise<CliCommandResult>;
16
16
  export {};
@@ -238,6 +238,7 @@ const buildMcpServer = async (options = {}) => {
238
238
  isRecoverable: args.envelope.error.isRecoverable,
239
239
  });
240
240
  }
241
+ telemetry?.reportInstallRefActivations();
241
242
  }
242
243
  catch { }
243
244
  return toToolResult(args.envelope, args.progress);
@@ -58,7 +58,6 @@ const errorMessage_1 = require("../../utils/errorMessage");
58
58
  const START_COMMAND = 'variants.start';
59
59
  const STATUS_COMMAND = 'variants.status';
60
60
  const CANCEL_COMMAND = 'variants.cancel';
61
- const COMMIT_COMMAND = 'variants.commit';
62
61
  const COMPLETE_COMMAND = 'variants.complete';
63
62
  const GET_COMMAND = 'variants.get';
64
63
  const LIST_COMMAND = 'variants.list';
@@ -102,9 +101,6 @@ const CONTEXT_IMAGE_MIME_BY_EXTENSION = new Map([
102
101
  const MAX_REFERENCE_PAGES = 3;
103
102
  const MAX_REFERENCE_VIDEOS = 2;
104
103
  const REFERENCE_VIDEO_EXTENSIONS = new Set(['.mp4', '.mov', '.webm', '.m4v']);
105
- const COMMIT_FLAG_SPEC = {
106
- session: { takesValue: true },
107
- };
108
104
  const COMPLETE_FLAG_SPEC = {
109
105
  session: { takesValue: true },
110
106
  status: { takesValue: true },
@@ -698,44 +694,10 @@ const handleVariantsCancel = async (args) => {
698
694
  };
699
695
  const resolveActiveSessionId = async (attached) => {
700
696
  const response = await (0, client_1.requestServer)(attached, '/api/variants/active');
701
- if (response.status !== 200 || response.body.active !== true) {
697
+ if (response.status !== 200 || response.body.active !== true)
702
698
  return null;
703
- }
704
699
  return response.body.sessionId ?? null;
705
700
  };
706
- const handleVariantsCommit = async (args) => {
707
- const context = (0, shared_1.parseCommandContext)(COMMIT_COMMAND, args, COMMIT_FLAG_SPEC);
708
- if ((0, shared_1.isCommandResult)(context)) {
709
- return context;
710
- }
711
- const variantId = context.flags.positionals[0];
712
- if (!variantId) {
713
- return (0, envelope_1.errorResult)(COMMIT_COMMAND, 'USAGE_ERROR', 'Usage: rivet variants commit <variantId> [--session <sessionId>]');
714
- }
715
- const attached = await (0, shared_1.attachOrUnavailable)(COMMIT_COMMAND, context.projectPath);
716
- if (!(0, shared_1.isAttached)(attached)) {
717
- return attached;
718
- }
719
- try {
720
- const sessionId = (0, flags_1.stringFlag)(context.flags, 'session') ??
721
- (await resolveActiveSessionId(attached));
722
- if (!sessionId) {
723
- return (0, envelope_1.errorResult)(COMMIT_COMMAND, 'OPERATION_FAILED', 'No active variants session. Pass --session <sessionId> for a past session.');
724
- }
725
- const response = await (0, client_1.requestServer)(attached, `/api/variants/${encodeURIComponent(sessionId)}/commit`, { method: 'POST', body: { variantId } });
726
- if (response.status !== 200) {
727
- return (0, shared_1.serverErrorResult)(COMMIT_COMMAND, response.status, response.body);
728
- }
729
- return (0, envelope_1.okResult)(COMMIT_COMMAND, {
730
- sessionId,
731
- variantId,
732
- result: response.body,
733
- });
734
- }
735
- catch (error) {
736
- return (0, shared_1.transportErrorResult)(COMMIT_COMMAND, error);
737
- }
738
- };
739
701
  const handleVariantsComplete = async (args) => {
740
702
  const context = (0, shared_1.parseCommandContext)(COMPLETE_COMMAND, args, COMPLETE_FLAG_SPEC);
741
703
  if ((0, shared_1.isCommandResult)(context)) {
@@ -939,9 +901,6 @@ const handleVariants = async (args, options = {}) => {
939
901
  if (action === 'cancel') {
940
902
  return handleVariantsCancel(rest);
941
903
  }
942
- if (action === 'commit') {
943
- return handleVariantsCommit(rest);
944
- }
945
904
  if (action === 'complete') {
946
905
  return handleVariantsComplete(rest);
947
906
  }
@@ -951,7 +910,7 @@ const handleVariants = async (args, options = {}) => {
951
910
  if (action === 'list') {
952
911
  return handleVariantsList(rest);
953
912
  }
954
- return (0, envelope_1.errorResult)('variants', 'USAGE_ERROR', 'Usage: rivet variants <start|status|cancel|commit|complete|get|list> [options]');
913
+ return (0, envelope_1.errorResult)('variants', 'USAGE_ERROR', 'Usage: rivet variants <start|status|cancel|complete|get|list> [options]');
955
914
  };
956
915
  exports.handleVariants = handleVariants;
957
916
  //# sourceMappingURL=variants.js.map
@@ -79,8 +79,8 @@ const COMMAND_USAGE = {
79
79
  'Block until a work id settles; exits 5 on timeout.',
80
80
  ],
81
81
  variants: [
82
- 'rivet variants <start|status|cancel|commit|complete|get|list> [options]',
83
- 'start: --instruction <text> [--count N] [--element <selector>] [--fresh] [--target <sessionId>:<variantId>] [--worker-provider claude|codex|cursor] [--worker-model <id>] · get <projectId>/<sessionId>:<variantId> [--detail] · cancel <sessionId> · commit <variantId> [--session <id>] · list [--history]',
82
+ 'rivet variants <start|status|cancel|complete|get|list> [options]',
83
+ 'start: --instruction <text> [--count N] [--element <selector>] [--fresh] [--target <sessionId>:<variantId>] [--worker-provider claude|codex|cursor] [--worker-model <id>] · get <projectId>/<sessionId>:<variantId> [--detail] · cancel <sessionId> · list [--history]',
84
84
  ],
85
85
  evidence: [
86
86
  'rivet evidence capture --url <url> [--screenshot] [--width N --height N]',
@@ -311,6 +311,7 @@ const runCliControlCommand = async (args, io = io_1.processCliIO) => {
311
311
  ...(0, telemetry_1.browserMetadataForEnvelope)(result.envelope),
312
312
  ...(0, handoff_1.callerTelemetryFieldsFromArgs)(rest),
313
313
  });
314
+ telemetry.reportInstallRefActivations();
314
315
  await telemetry.shutdown(result.envelope.command === 'variants.get'
315
316
  ? VARIANT_LOOKUP_TELEMETRY_TIMEOUT_MS
316
317
  : undefined);
@@ -26,9 +26,6 @@ export declare const FLAG_DEFINITIONS: {
26
26
  readonly canvasShare: {
27
27
  readonly default: false;
28
28
  };
29
- readonly variantSend: {
30
- readonly default: false;
31
- };
32
29
  readonly generativeControls: {
33
30
  readonly default: false;
34
31
  };
@@ -11,7 +11,6 @@ exports.FLAG_DEFINITIONS = {
11
11
  share: { default: false },
12
12
  deployPrototype: { default: false },
13
13
  canvasShare: { default: false },
14
- variantSend: { default: false },
15
14
  generativeControls: { default: false },
16
15
  refineMode: { default: false },
17
16
  inspectorUndoRedo: { default: false },
@@ -16,7 +16,6 @@ const metricProperties = zod_1.z.object({
16
16
  'variants.get',
17
17
  'variants.list',
18
18
  'variants.complete',
19
- 'variants.commit',
20
19
  'variants.cancel',
21
20
  'reference.fetch',
22
21
  'evidence.capture',
@@ -27,7 +26,6 @@ const metricProperties = zod_1.z.object({
27
26
  'rivet_login',
28
27
  'rivet_explore_designs',
29
28
  'rivet_get_exploration',
30
- 'rivet_apply_design',
31
29
  'rivet_cancel_exploration',
32
30
  'rivet_complete_variant_work',
33
31
  'rivet_get_design_context',
@@ -216,8 +214,6 @@ const PRODUCT_EVENTS = new Set([
216
214
  'agent_variants.preview_started',
217
215
  'agent_variants.preview_ready',
218
216
  'agent_variants.preview_failed',
219
- 'agent_variants.committed',
220
- 'agent_variants.commit_failed',
221
217
  ]);
222
218
  const pluginMetricProperties = (event, properties) => {
223
219
  if (!PRODUCT_EVENTS.has(event))
package/dist/index.d.ts CHANGED
@@ -73,7 +73,7 @@ export declare const authCommandOptionsForArgs: (args: string[]) => {
73
73
  noBrowser: boolean;
74
74
  noTelemetry: boolean;
75
75
  };
76
- export declare const rememberInstallRef: (args: string[]) => string[];
76
+ export declare const rememberInstallRef: (args: string[], downloadType?: string) => string[];
77
77
  export declare const authFailureReasonForError: (error: string | undefined) => "oauth_failed" | "timeout";
78
78
  export declare const main: (args?: string[]) => Promise<void>;
79
79
  export declare const parseArgs: (args: string[]) => CLIOptions;
package/dist/index.js CHANGED
@@ -238,14 +238,19 @@ const authCommandOptionsForArgs = (args) => ({
238
238
  noTelemetry: args.includes('--no-telemetry'),
239
239
  });
240
240
  exports.authCommandOptionsForArgs = authCommandOptionsForArgs;
241
- const rememberInstallRef = (args) => {
241
+ const rememberInstallRef = (args, downloadType) => {
242
242
  const { installRef, remainingArgs } = (0, installRef_1.extractInstallRef)(args);
243
243
  if (installRef) {
244
- (0, ConfigManager_1.getConfigManager)().setInstallRef(installRef);
244
+ (0, ConfigManager_1.getConfigManager)().setInstallRef(installRef, downloadType);
245
245
  }
246
246
  return remainingArgs;
247
247
  };
248
248
  exports.rememberInstallRef = rememberInstallRef;
249
+ const reportInstallRefActivations = async () => {
250
+ const telemetry = new TelemetryService_1.TelemetryService({ source: 'cli' });
251
+ telemetry.reportInstallRefActivations();
252
+ await telemetry.shutdown();
253
+ };
249
254
  const discardInstallRefForValidatedSession = () => {
250
255
  const configManager = (0, ConfigManager_1.getConfigManager)();
251
256
  const installRef = configManager.getInstallRef();
@@ -803,7 +808,8 @@ const promptPostInstall = async () => {
803
808
  }
804
809
  };
805
810
  const handleInstall = async (installArgs) => {
806
- const parsed = (0, flags_1.parseFlags)((0, installRef_1.extractInstallRef)(installArgs).remainingArgs, {
811
+ const { installRef, remainingArgs } = (0, installRef_1.extractInstallRef)(installArgs);
812
+ const parsed = (0, flags_1.parseFlags)(remainingArgs, {
807
813
  mcp: { takesValue: false },
808
814
  'no-mcp': { takesValue: false },
809
815
  'no-telemetry': { takesValue: false },
@@ -852,7 +858,9 @@ const handleInstall = async (installArgs) => {
852
858
  (0, harnesses_1.reportInstallConfirmation)(selection, installArgs);
853
859
  return;
854
860
  }
855
- (0, exports.rememberInstallRef)(installArgs);
861
+ (0, exports.rememberInstallRef)(installArgs, selection.targetIds.join(','));
862
+ if (installRef)
863
+ await reportInstallRefActivations();
856
864
  const bootstrap = (0, globalBootstrap_1.bootstrapGlobalInstall)(installArgs);
857
865
  if (bootstrap.action === 'reexeced') {
858
866
  process.exit(bootstrap.exitCode);
@@ -877,6 +885,10 @@ const handleLogin = async (options = {}) => {
877
885
  enabled: !options.noTelemetry,
878
886
  source: 'cli',
879
887
  });
888
+ const finishTelemetry = async () => {
889
+ telemetry.reportInstallRefActivations();
890
+ await telemetry.shutdown();
891
+ };
880
892
  let authAttemptId = '';
881
893
  let authStartedAt = 0;
882
894
  const startAuthAttempt = () => {
@@ -906,7 +918,7 @@ const handleLogin = async (options = {}) => {
906
918
  outcome: 'already_authenticated',
907
919
  durationMs: Date.now() - authStartedAt,
908
920
  });
909
- await telemetry.shutdown();
921
+ await finishTelemetry();
910
922
  console.log(`✅ Already signed in as ${configManager.getEmail()}`);
911
923
  console.log(`\n${nextStepHint}`);
912
924
  return;
@@ -934,7 +946,7 @@ const handleLogin = async (options = {}) => {
934
946
  outcome: 'authenticated',
935
947
  durationMs: Date.now() - authStartedAt,
936
948
  });
937
- await telemetry.shutdown();
949
+ await finishTelemetry();
938
950
  console.log(`✅ Logged in as ${resumed.user.email}`);
939
951
  console.log(`\n${nextStepHint}`);
940
952
  return;
@@ -983,7 +995,7 @@ const handleLogin = async (options = {}) => {
983
995
  outcome: 'authenticated',
984
996
  durationMs: Date.now() - authStartedAt,
985
997
  });
986
- await telemetry.shutdown();
998
+ await finishTelemetry();
987
999
  console.log(`✅ Logged in as ${loginResult.user?.email}`);
988
1000
  console.log(`\n${nextStepHint}`);
989
1001
  return;
@@ -996,7 +1008,7 @@ const handleLogin = async (options = {}) => {
996
1008
  failureReason: (0, exports.authFailureReasonForError)(loginResult.error),
997
1009
  durationMs: Date.now() - authStartedAt,
998
1010
  });
999
- await telemetry.shutdown();
1011
+ await finishTelemetry();
1000
1012
  console.log(`❌ Login failed: ${loginResult.error || loginResult.message}`);
1001
1013
  if (options.exitOnFailure ?? true) {
1002
1014
  process.exit(1);
@@ -88,6 +88,7 @@ const verifyMcpServeInvocation = (spawnSync = childProcess.spawnSync) => {
88
88
  env: {
89
89
  ...(0, subprocessEnvironment_1.subprocessEnvironment)('rivetRuntime'),
90
90
  RIVET_LOG_LEVEL: 'SILENT',
91
+ RIVET_AUTO_UPDATE_DISABLED: '1',
91
92
  },
92
93
  input: `${input}\n`,
93
94
  timeout: MCP_SERVE_VERIFICATION_TIMEOUT_MS,