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.
- package/README.md +50 -26
- package/README.npm.md +50 -26
- package/bin/rivet.js +39 -24
- package/dist/{mcp/agent-variants → agent-variants}/SessionStore.d.ts +13 -20
- package/dist/agent-variants/SessionStore.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/SessionStore.js +74 -84
- package/dist/agent-variants/SessionStore.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.d.ts +58 -25
- package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.js +299 -57
- package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.testHelpers.d.ts +1 -9
- package/dist/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.testHelpers.js +3 -18
- package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -0
- package/dist/agent-variants/briefContent.d.ts.map +1 -0
- package/dist/agent-variants/briefContent.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/contracts.d.ts +716 -722
- package/dist/agent-variants/contracts.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/contracts.js +4 -5
- package/dist/agent-variants/contracts.js.map +1 -0
- package/dist/agent-variants/createProjectArtifacts.d.ts.map +1 -0
- package/dist/agent-variants/createProjectArtifacts.js.map +1 -0
- package/dist/agent-variants/diffQa.d.ts.map +1 -0
- package/dist/agent-variants/diffQa.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/elementRefToTarget.d.ts +1 -1
- package/dist/agent-variants/elementRefToTarget.d.ts.map +1 -0
- package/dist/agent-variants/elementRefToTarget.js.map +1 -0
- package/dist/agent-variants/errors.d.ts.map +1 -0
- package/dist/agent-variants/errors.js.map +1 -0
- package/dist/agent-variants/generatedDestination.d.ts +29 -0
- package/dist/agent-variants/generatedDestination.d.ts.map +1 -0
- package/dist/agent-variants/generatedDestination.js +59 -0
- package/dist/agent-variants/generatedDestination.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/index.d.ts +3 -6
- package/dist/agent-variants/index.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/index.js +3 -6
- package/dist/agent-variants/index.js.map +1 -0
- package/dist/agent-variants/previewQa.d.ts.map +1 -0
- package/dist/agent-variants/previewQa.js.map +1 -0
- package/dist/agent-variants/runLabel.d.ts.map +1 -0
- package/dist/agent-variants/runLabel.js.map +1 -0
- package/dist/agent-variants/runPlan.d.ts.map +1 -0
- package/dist/agent-variants/runPlan.js.map +1 -0
- package/dist/agent-variants/sourceContext.d.ts.map +1 -0
- package/dist/agent-variants/sourceContext.js.map +1 -0
- package/dist/agent-variants/variantContext.d.ts.map +1 -0
- package/dist/agent-variants/variantContext.js.map +1 -0
- package/dist/cli/client.d.ts +43 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/client.js +109 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/commandNames.d.ts +9 -0
- package/dist/cli/commandNames.d.ts.map +1 -0
- package/dist/cli/commandNames.js +24 -0
- package/dist/cli/commandNames.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +10 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +81 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/elementSelector.d.ts +10 -0
- package/dist/cli/commands/elementSelector.d.ts.map +1 -0
- package/dist/cli/commands/elementSelector.js +41 -0
- package/dist/cli/commands/elementSelector.js.map +1 -0
- package/dist/cli/commands/evidence.d.ts +9 -0
- package/dist/cli/commands/evidence.d.ts.map +1 -0
- package/dist/cli/commands/evidence.js +85 -0
- package/dist/cli/commands/evidence.js.map +1 -0
- package/dist/cli/commands/mcpServe.d.ts +40 -0
- package/dist/cli/commands/mcpServe.d.ts.map +1 -0
- package/dist/cli/commands/mcpServe.js +485 -0
- package/dist/cli/commands/mcpServe.js.map +1 -0
- package/dist/cli/commands/open.d.ts +28 -0
- package/dist/cli/commands/open.d.ts.map +1 -0
- package/dist/cli/commands/open.js +280 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/reference.d.ts +8 -0
- package/dist/cli/commands/reference.d.ts.map +1 -0
- package/dist/cli/commands/reference.js +101 -0
- package/dist/cli/commands/reference.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +9 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +182 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +31 -0
- package/dist/cli/commands/shared.d.ts.map +1 -0
- package/dist/cli/commands/shared.js +82 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +61 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +8 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +41 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/variants.d.ts +4 -0
- package/dist/cli/commands/variants.d.ts.map +1 -0
- package/dist/cli/commands/variants.js +435 -0
- package/dist/cli/commands/variants.js.map +1 -0
- package/dist/cli/commands/wait.d.ts +10 -0
- package/dist/cli/commands/wait.d.ts.map +1 -0
- package/dist/cli/commands/wait.js +101 -0
- package/dist/cli/commands/wait.js.map +1 -0
- package/dist/cli/entry.d.ts +12 -0
- package/dist/cli/entry.d.ts.map +1 -0
- package/dist/cli/entry.js +61 -0
- package/dist/cli/entry.js.map +1 -0
- package/dist/cli/envelope.d.ts +60 -0
- package/dist/cli/envelope.d.ts.map +1 -0
- package/dist/cli/envelope.js +57 -0
- package/dist/cli/envelope.js.map +1 -0
- package/dist/cli/flags.d.ts +20 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +72 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/handoff.d.ts +54 -0
- package/dist/cli/handoff.d.ts.map +1 -0
- package/dist/cli/handoff.js +106 -0
- package/dist/cli/handoff.js.map +1 -0
- package/dist/cli/handoffStore.d.ts +24 -0
- package/dist/cli/handoffStore.d.ts.map +1 -0
- package/dist/cli/handoffStore.js +49 -0
- package/dist/cli/handoffStore.js.map +1 -0
- package/dist/cli/hostWorkNextAction.d.ts +45 -0
- package/dist/cli/hostWorkNextAction.d.ts.map +1 -0
- package/dist/cli/hostWorkNextAction.js +43 -0
- package/dist/cli/hostWorkNextAction.js.map +1 -0
- package/dist/cli/io.d.ts +17 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +19 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/router.d.ts +23 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +236 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/runnerSelection.d.ts +60 -0
- package/dist/cli/runnerSelection.d.ts.map +1 -0
- package/dist/cli/runnerSelection.js +93 -0
- package/dist/cli/runnerSelection.js.map +1 -0
- package/dist/cli/serverHandshake.d.ts +51 -0
- package/dist/cli/serverHandshake.d.ts.map +1 -0
- package/dist/cli/serverHandshake.js +144 -0
- package/dist/cli/serverHandshake.js.map +1 -0
- package/dist/index.d.ts +2 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -138
- package/dist/index.js.map +1 -1
- package/dist/install/allowlists.d.ts +65 -0
- package/dist/install/allowlists.d.ts.map +1 -0
- package/dist/install/allowlists.js +333 -0
- package/dist/install/allowlists.js.map +1 -0
- package/dist/install/codexGuidance.d.ts +11 -0
- package/dist/install/codexGuidance.d.ts.map +1 -0
- package/dist/install/codexGuidance.js +90 -0
- package/dist/install/codexGuidance.js.map +1 -0
- package/dist/install/harnesses.d.ts +37 -26
- package/dist/install/harnesses.d.ts.map +1 -1
- package/dist/install/harnesses.js +312 -502
- package/dist/install/harnesses.js.map +1 -1
- package/dist/install/legacyMcp.d.ts +26 -0
- package/dist/install/legacyMcp.d.ts.map +1 -0
- package/dist/install/legacyMcp.js +160 -0
- package/dist/install/legacyMcp.js.map +1 -0
- package/dist/install/mcpRegistration.d.ts +45 -0
- package/dist/install/mcpRegistration.d.ts.map +1 -0
- package/dist/install/mcpRegistration.js +215 -0
- package/dist/install/mcpRegistration.js.map +1 -0
- package/dist/mcp/changeBatchClassification.d.ts +20 -20
- package/dist/mcp/changeBatchClassification.d.ts.map +1 -1
- package/dist/mcp/changeBatchClassification.js +46 -46
- package/dist/mcp/changeBatchClassification.js.map +1 -1
- package/dist/proxy-middleware/proxy-config.d.ts +6 -0
- package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
- package/dist/proxy-middleware/proxy-config.js +162 -5
- package/dist/proxy-middleware/proxy-config.js.map +1 -1
- package/dist/routes/agentVariants.d.ts +14 -2
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +366 -65
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/cli.d.ts +31 -0
- package/dist/routes/cli.d.ts.map +1 -0
- package/dist/routes/cli.js +95 -0
- package/dist/routes/cli.js.map +1 -0
- package/dist/routes/git.d.ts +1 -0
- package/dist/routes/git.d.ts.map +1 -1
- package/dist/routes/git.js +2 -1
- package/dist/routes/git.js.map +1 -1
- package/dist/routes/inlineStartTracker.d.ts +23 -0
- package/dist/routes/inlineStartTracker.d.ts.map +1 -0
- package/dist/routes/inlineStartTracker.js +17 -0
- package/dist/routes/inlineStartTracker.js.map +1 -0
- package/dist/routes/mcp.d.ts +2 -12
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +4 -785
- package/dist/routes/mcp.js.map +1 -1
- package/dist/server.d.ts +24 -9
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +169 -33
- package/dist/server.js.map +1 -1
- package/dist/services/CommitMessageGenerator.d.ts +9 -1
- package/dist/services/CommitMessageGenerator.d.ts.map +1 -1
- package/dist/services/CommitMessageGenerator.js +4 -1
- package/dist/services/CommitMessageGenerator.js.map +1 -1
- package/dist/services/ComponentSearchService.d.ts +4 -1
- package/dist/services/ComponentSearchService.d.ts.map +1 -1
- package/dist/services/ComponentSearchService.js.map +1 -1
- package/dist/services/ConfigManager.d.ts +8 -0
- package/dist/services/ConfigManager.d.ts.map +1 -1
- package/dist/services/ConfigManager.js +9 -0
- package/dist/services/ConfigManager.js.map +1 -1
- package/dist/services/HistoryReplayService.d.ts +20 -9
- package/dist/services/HistoryReplayService.d.ts.map +1 -1
- package/dist/services/HistoryReplayService.js +99 -43
- package/dist/services/HistoryReplayService.js.map +1 -1
- package/dist/services/MCPVariantsTelemetry.d.ts +1 -1
- package/dist/services/MCPVariantsTelemetry.d.ts.map +1 -1
- package/dist/services/MCPVariantsTelemetry.js +1 -0
- package/dist/services/MCPVariantsTelemetry.js.map +1 -1
- package/dist/services/PRTitleGenerator.d.ts +10 -2
- package/dist/services/PRTitleGenerator.d.ts.map +1 -1
- package/dist/services/PRTitleGenerator.js +8 -2
- package/dist/services/PRTitleGenerator.js.map +1 -1
- package/dist/services/ProjectDetectionService.d.ts.map +1 -1
- package/dist/services/ProjectDetectionService.js +14 -4
- package/dist/services/ProjectDetectionService.js.map +1 -1
- package/dist/services/ProjectMetadataStore.d.ts +115 -0
- package/dist/services/ProjectMetadataStore.d.ts.map +1 -0
- package/dist/services/ProjectMetadataStore.js +336 -0
- package/dist/services/ProjectMetadataStore.js.map +1 -0
- package/dist/services/SessionBridgeService.d.ts +52 -224
- package/dist/services/SessionBridgeService.d.ts.map +1 -1
- package/dist/services/SessionBridgeService.js +97 -649
- package/dist/services/SessionBridgeService.js.map +1 -1
- package/dist/services/SessionService.d.ts +4 -1
- package/dist/services/SessionService.d.ts.map +1 -1
- package/dist/services/SessionService.js +7 -4
- package/dist/services/SessionService.js.map +1 -1
- package/dist/services/StaticFileService.d.ts.map +1 -1
- package/dist/services/StaticFileService.js +6 -0
- package/dist/services/StaticFileService.js.map +1 -1
- package/dist/services/TelemetryService.d.ts +16 -80
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +18 -94
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/VariantGenerationService.d.ts +45 -0
- package/dist/services/VariantGenerationService.d.ts.map +1 -0
- package/dist/services/VariantGenerationService.js +214 -0
- package/dist/services/VariantGenerationService.js.map +1 -0
- package/dist/services/VariantHistoryService.d.ts +37 -1
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +122 -1
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +25 -6
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +99 -4
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts +1 -3
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +0 -1
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/WorktreeManager.d.ts +1 -1
- package/dist/services/WorktreeManager.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -2
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +2 -3
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/services/projectMetadataMigrations.d.ts +59 -0
- package/dist/services/projectMetadataMigrations.d.ts.map +1 -0
- package/dist/services/projectMetadataMigrations.js +109 -0
- package/dist/services/projectMetadataMigrations.js.map +1 -0
- package/dist/types/change-request-types.d.ts +32 -4
- package/dist/types/change-request-types.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +2 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +3 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/loopback.d.ts +3 -0
- package/dist/utils/loopback.d.ts.map +1 -0
- package/dist/utils/loopback.js +13 -0
- package/dist/utils/loopback.js.map +1 -0
- package/dist/utils/pid.d.ts +3 -0
- package/dist/utils/pid.d.ts.map +1 -0
- package/dist/utils/pid.js +15 -0
- package/dist/utils/pid.js.map +1 -0
- package/dist/utils/queueAccess.d.ts +7 -0
- package/dist/utils/queueAccess.d.ts.map +1 -1
- package/dist/utils/queueAccess.js +8 -1
- package/dist/utils/queueAccess.js.map +1 -1
- package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts +3 -3
- package/dist/utils/shouldRecordHostedDemoSessionAction.d.ts.map +1 -1
- package/dist/utils/shouldRecordHostedDemoSessionAction.js +3 -19
- package/dist/utils/shouldRecordHostedDemoSessionAction.js.map +1 -1
- package/dist/utils/skillWriter.d.ts.map +1 -1
- package/dist/utils/skillWriter.js +12 -11
- package/dist/utils/skillWriter.js.map +1 -1
- package/dist/utils/skills/claude-skill.d.ts +7 -2
- package/dist/utils/skills/claude-skill.d.ts.map +1 -1
- package/dist/utils/skills/claude-skill.js +10 -83
- package/dist/utils/skills/claude-skill.js.map +1 -1
- package/dist/utils/skills/cli-guidance.d.ts +12 -0
- package/dist/utils/skills/cli-guidance.d.ts.map +1 -0
- package/dist/utils/skills/cli-guidance.js +59 -0
- package/dist/utils/skills/cli-guidance.js.map +1 -0
- package/dist/utils/skills/cursor-rules.d.ts +8 -2
- package/dist/utils/skills/cursor-rules.d.ts.map +1 -1
- package/dist/utils/skills/cursor-rules.js +11 -80
- package/dist/utils/skills/cursor-rules.js.map +1 -1
- package/dist/utils/variantSessionStart.d.ts +1 -1
- package/dist/utils/variantSessionStart.d.ts.map +1 -1
- package/dist/utils/variantSessionStart.js +1 -1
- package/dist/utils/variantSessionStart.js.map +1 -1
- package/package.json +4 -4
- package/src/ui/dist/assets/main-B725ucb9.js +419 -0
- package/src/ui/dist/assets/main-Dyos9I29.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/mcp/agent-variants/SessionStore.d.ts.map +0 -1
- package/dist/mcp/agent-variants/SessionStore.js.map +0 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +0 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +0 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +0 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +0 -1
- package/dist/mcp/agent-variants/areNaSourceContext.d.ts +0 -20
- package/dist/mcp/agent-variants/areNaSourceContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/areNaSourceContext.js +0 -118
- package/dist/mcp/agent-variants/areNaSourceContext.js.map +0 -1
- package/dist/mcp/agent-variants/briefContent.d.ts.map +0 -1
- package/dist/mcp/agent-variants/briefContent.js.map +0 -1
- package/dist/mcp/agent-variants/contracts.d.ts.map +0 -1
- package/dist/mcp/agent-variants/contracts.js.map +0 -1
- package/dist/mcp/agent-variants/createProjectArtifacts.d.ts.map +0 -1
- package/dist/mcp/agent-variants/createProjectArtifacts.js.map +0 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +0 -63
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +0 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.js +0 -265
- package/dist/mcp/agent-variants/createZeroToOneTool.js.map +0 -1
- package/dist/mcp/agent-variants/diffQa.d.ts.map +0 -1
- package/dist/mcp/agent-variants/diffQa.js.map +0 -1
- package/dist/mcp/agent-variants/elementRefToTarget.d.ts.map +0 -1
- package/dist/mcp/agent-variants/elementRefToTarget.js.map +0 -1
- package/dist/mcp/agent-variants/errors.d.ts.map +0 -1
- package/dist/mcp/agent-variants/errors.js.map +0 -1
- package/dist/mcp/agent-variants/generatedDestination.d.ts +0 -75
- package/dist/mcp/agent-variants/generatedDestination.d.ts.map +0 -1
- package/dist/mcp/agent-variants/generatedDestination.js +0 -103
- package/dist/mcp/agent-variants/generatedDestination.js.map +0 -1
- package/dist/mcp/agent-variants/index.d.ts.map +0 -1
- package/dist/mcp/agent-variants/index.js.map +0 -1
- package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts +0 -38
- package/dist/mcp/agent-variants/pendingChangesAdapter.d.ts.map +0 -1
- package/dist/mcp/agent-variants/pendingChangesAdapter.js +0 -93
- package/dist/mcp/agent-variants/pendingChangesAdapter.js.map +0 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +0 -23
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.js +0 -137
- package/dist/mcp/agent-variants/pinterestSourceContext.js.map +0 -1
- package/dist/mcp/agent-variants/previewQa.d.ts.map +0 -1
- package/dist/mcp/agent-variants/previewQa.js.map +0 -1
- package/dist/mcp/agent-variants/runLabel.d.ts.map +0 -1
- package/dist/mcp/agent-variants/runLabel.js.map +0 -1
- package/dist/mcp/agent-variants/runPlan.d.ts.map +0 -1
- package/dist/mcp/agent-variants/runPlan.js.map +0 -1
- package/dist/mcp/agent-variants/sourceContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/sourceContext.js.map +0 -1
- package/dist/mcp/agent-variants/tools.d.ts +0 -187
- package/dist/mcp/agent-variants/tools.d.ts.map +0 -1
- package/dist/mcp/agent-variants/tools.js +0 -1165
- package/dist/mcp/agent-variants/tools.js.map +0 -1
- package/dist/mcp/agent-variants/variantContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/variantContext.js.map +0 -1
- package/dist/mcp/auth/httpOAuthProvider.d.ts +0 -103
- package/dist/mcp/auth/httpOAuthProvider.d.ts.map +0 -1
- package/dist/mcp/auth/httpOAuthProvider.js +0 -735
- package/dist/mcp/auth/httpOAuthProvider.js.map +0 -1
- package/dist/mcp/auth/tools.d.ts +0 -39
- package/dist/mcp/auth/tools.d.ts.map +0 -1
- package/dist/mcp/auth/tools.js +0 -304
- package/dist/mcp/auth/tools.js.map +0 -1
- package/dist/mcp/branding.d.ts +0 -4
- package/dist/mcp/branding.d.ts.map +0 -1
- package/dist/mcp/branding.js +0 -8
- package/dist/mcp/branding.js.map +0 -1
- package/dist/mcp/hostedServer.d.ts +0 -27
- package/dist/mcp/hostedServer.d.ts.map +0 -1
- package/dist/mcp/hostedServer.js +0 -71
- package/dist/mcp/hostedServer.js.map +0 -1
- package/dist/mcp/httpServer.d.ts +0 -63
- package/dist/mcp/httpServer.d.ts.map +0 -1
- package/dist/mcp/httpServer.js +0 -602
- package/dist/mcp/httpServer.js.map +0 -1
- package/dist/mcp/instructions.d.ts +0 -25
- package/dist/mcp/instructions.d.ts.map +0 -1
- package/dist/mcp/instructions.js +0 -39
- package/dist/mcp/instructions.js.map +0 -1
- package/dist/mcp/integrations/tools.d.ts +0 -19
- package/dist/mcp/integrations/tools.d.ts.map +0 -1
- package/dist/mcp/integrations/tools.js +0 -101
- package/dist/mcp/integrations/tools.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -214
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -2536
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/toolAnalytics.d.ts +0 -26
- package/dist/mcp/toolAnalytics.d.ts.map +0 -1
- package/dist/mcp/toolAnalytics.js +0 -95
- package/dist/mcp/toolAnalytics.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -7
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -3
- package/dist/mcp/types.js.map +0 -1
- package/dist/mcp/watchLoopResumePrompt.d.ts +0 -16
- package/dist/mcp/watchLoopResumePrompt.d.ts.map +0 -1
- package/dist/mcp/watchLoopResumePrompt.js +0 -21
- package/dist/mcp/watchLoopResumePrompt.js.map +0 -1
- package/dist/prompts/agentModPrompts.d.ts +0 -4
- package/dist/prompts/agentModPrompts.d.ts.map +0 -1
- package/dist/prompts/agentModPrompts.js +0 -34
- package/dist/prompts/agentModPrompts.js.map +0 -1
- package/dist/prompts/tokenWriterPrompts.d.ts +0 -4
- package/dist/prompts/tokenWriterPrompts.d.ts.map +0 -1
- package/dist/prompts/tokenWriterPrompts.js +0 -59
- package/dist/prompts/tokenWriterPrompts.js.map +0 -1
- package/dist/routes/comments.d.ts +0 -3
- package/dist/routes/comments.d.ts.map +0 -1
- package/dist/routes/comments.js +0 -113
- package/dist/routes/comments.js.map +0 -1
- package/dist/routes/components.d.ts +0 -7
- package/dist/routes/components.d.ts.map +0 -1
- package/dist/routes/components.js +0 -88
- package/dist/routes/components.js.map +0 -1
- package/dist/routes/controls.d.ts +0 -7
- package/dist/routes/controls.d.ts.map +0 -1
- package/dist/routes/controls.js +0 -50
- package/dist/routes/controls.js.map +0 -1
- package/dist/routes/design.d.ts +0 -2
- package/dist/routes/design.d.ts.map +0 -1
- package/dist/routes/design.js +0 -29
- package/dist/routes/design.js.map +0 -1
- package/dist/routes/modifications.d.ts +0 -10
- package/dist/routes/modifications.d.ts.map +0 -1
- package/dist/routes/modifications.js +0 -394
- package/dist/routes/modifications.js.map +0 -1
- package/dist/routes/tokens.d.ts +0 -2
- package/dist/routes/tokens.d.ts.map +0 -1
- package/dist/routes/tokens.js +0 -115
- package/dist/routes/tokens.js.map +0 -1
- package/dist/services/AgentSessionService.d.ts +0 -91
- package/dist/services/AgentSessionService.d.ts.map +0 -1
- package/dist/services/AgentSessionService.js +0 -282
- package/dist/services/AgentSessionService.js.map +0 -1
- package/dist/services/BridgeBatchPipeline.d.ts +0 -103
- package/dist/services/BridgeBatchPipeline.d.ts.map +0 -1
- package/dist/services/BridgeBatchPipeline.js +0 -295
- package/dist/services/BridgeBatchPipeline.js.map +0 -1
- package/dist/services/BridgeQueueStore.d.ts +0 -28
- package/dist/services/BridgeQueueStore.d.ts.map +0 -1
- package/dist/services/BridgeQueueStore.js +0 -88
- package/dist/services/BridgeQueueStore.js.map +0 -1
- package/dist/services/CSSTokenWriter.d.ts +0 -22
- package/dist/services/CSSTokenWriter.d.ts.map +0 -1
- package/dist/services/CSSTokenWriter.js +0 -116
- package/dist/services/CSSTokenWriter.js.map +0 -1
- package/dist/services/DesignTokenService.d.ts +0 -39
- package/dist/services/DesignTokenService.d.ts.map +0 -1
- package/dist/services/DesignTokenService.js +0 -100
- package/dist/services/DesignTokenService.js.map +0 -1
- package/dist/services/InlineVariantGenerationService.d.ts +0 -51
- package/dist/services/InlineVariantGenerationService.d.ts.map +0 -1
- package/dist/services/InlineVariantGenerationService.js +0 -475
- package/dist/services/InlineVariantGenerationService.js.map +0 -1
- package/dist/services/InterfaceGenerationService.d.ts +0 -12
- package/dist/services/InterfaceGenerationService.d.ts.map +0 -1
- package/dist/services/InterfaceGenerationService.js +0 -256
- package/dist/services/InterfaceGenerationService.js.map +0 -1
- package/dist/services/TailwindConfigWriter.d.ts +0 -24
- package/dist/services/TailwindConfigWriter.d.ts.map +0 -1
- package/dist/services/TailwindConfigWriter.js +0 -105
- package/dist/services/TailwindConfigWriter.js.map +0 -1
- package/dist/services/TerminalAgentRunner.d.ts +0 -65
- package/dist/services/TerminalAgentRunner.d.ts.map +0 -1
- package/dist/services/TerminalAgentRunner.js +0 -511
- package/dist/services/TerminalAgentRunner.js.map +0 -1
- package/dist/services/VisualVariantAgentRunner.d.ts +0 -20
- package/dist/services/VisualVariantAgentRunner.d.ts.map +0 -1
- package/dist/services/VisualVariantAgentRunner.js +0 -66
- package/dist/services/VisualVariantAgentRunner.js.map +0 -1
- package/dist/services/adapters/TailwindCSSTokenAdapter.d.ts +0 -35
- package/dist/services/adapters/TailwindCSSTokenAdapter.d.ts.map +0 -1
- package/dist/services/adapters/TailwindCSSTokenAdapter.js +0 -278
- package/dist/services/adapters/TailwindCSSTokenAdapter.js.map +0 -1
- package/dist/services/agent/AgentCore.d.ts +0 -126
- package/dist/services/agent/AgentCore.d.ts.map +0 -1
- package/dist/services/agent/AgentCore.js +0 -759
- package/dist/services/agent/AgentCore.js.map +0 -1
- package/dist/services/agent/AgentModService.d.ts +0 -98
- package/dist/services/agent/AgentModService.d.ts.map +0 -1
- package/dist/services/agent/AgentModService.js +0 -400
- package/dist/services/agent/AgentModService.js.map +0 -1
- package/dist/services/agent/index.d.ts +0 -2
- package/dist/services/agent/index.d.ts.map +0 -1
- package/dist/services/agent/index.js +0 -6
- package/dist/services/agent/index.js.map +0 -1
- package/dist/types/editor-interface-types.d.ts +0 -67
- package/dist/types/editor-interface-types.d.ts.map +0 -1
- package/dist/types/editor-interface-types.js +0 -12
- package/dist/types/editor-interface-types.js.map +0 -1
- package/dist/utils/elementRefToContext.d.ts +0 -4
- package/dist/utils/elementRefToContext.d.ts.map +0 -1
- package/dist/utils/elementRefToContext.js +0 -63
- package/dist/utils/elementRefToContext.js.map +0 -1
- package/dist/utils/skills/shared-variants-protocol.d.ts +0 -69
- package/dist/utils/skills/shared-variants-protocol.d.ts.map +0 -1
- package/dist/utils/skills/shared-variants-protocol.js +0 -292
- package/dist/utils/skills/shared-variants-protocol.js.map +0 -1
- package/src/ui/dist/assets/main-Dnah9pII.css +0 -1
- package/src/ui/dist/assets/main-plq7aT76.js +0 -656
- /package/dist/{mcp/agent-variants → agent-variants}/briefContent.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/briefContent.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/createProjectArtifacts.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/createProjectArtifacts.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/diffQa.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/diffQa.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/elementRefToTarget.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/errors.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/errors.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/previewQa.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/previewQa.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/runLabel.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/runLabel.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/runPlan.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/runPlan.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/sourceContext.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/sourceContext.js +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/variantContext.d.ts +0 -0
- /package/dist/{mcp/agent-variants → agent-variants}/variantContext.js +0 -0
|
@@ -36,533 +36,337 @@ 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.updateHarnesses = exports.uninstallHarnesses = exports.installHarnesses = exports.sendButtonLabelFor = exports.detectedHarnesses = exports.findHarness = exports.HARNESSES =
|
|
39
|
+
exports.verifyCodexRules = exports.updateHarnesses = exports.uninstallHarnesses = exports.installHarnesses = exports.sendButtonLabelFor = exports.detectedHarnesses = exports.findHarness = exports.HARNESSES = void 0;
|
|
40
40
|
/* eslint-disable no-console */
|
|
41
41
|
const childProcess = __importStar(require("child_process"));
|
|
42
42
|
const fs_1 = __importDefault(require("fs"));
|
|
43
43
|
const os_1 = __importDefault(require("os"));
|
|
44
44
|
const path_1 = __importDefault(require("path"));
|
|
45
45
|
const skillWriter_1 = require("../utils/skillWriter");
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
* Why: editors like Claude desktop inherit a sanitized PATH at launch that can
|
|
53
|
-
* put stale node versions first, causing `npx` to dispatch to a node so old it
|
|
54
|
-
* can't even `require('node:url')`. Writing the absolute path into the MCP
|
|
55
|
-
* config bypasses that lookup. Falls back to literal "npx" with a warning so
|
|
56
|
-
* install never hard-blocks on a quirky environment.
|
|
57
|
-
*/
|
|
58
|
-
const resolveNpxCommand = () => {
|
|
59
|
-
const which = process.platform === 'win32' ? 'where' : 'which';
|
|
46
|
+
const allowlists_1 = require("./allowlists");
|
|
47
|
+
Object.defineProperty(exports, "verifyCodexRules", { enumerable: true, get: function () { return allowlists_1.verifyCodexRules; } });
|
|
48
|
+
const codexGuidance_1 = require("./codexGuidance");
|
|
49
|
+
const legacyMcp_1 = require("./legacyMcp");
|
|
50
|
+
const mcpRegistration_1 = require("./mcpRegistration");
|
|
51
|
+
const binaryDetect = (bin) => () => {
|
|
60
52
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
encoding: 'utf8',
|
|
64
|
-
});
|
|
65
|
-
// `where` on Windows can return multiple lines (npx, npx.cmd, npx.ps1).
|
|
66
|
-
// Prefer .cmd / .exe over a shebanged shell script so Windows can spawn
|
|
67
|
-
// the resolved path directly.
|
|
68
|
-
const lines = out
|
|
69
|
-
.split(/\r?\n/)
|
|
70
|
-
.map((l) => l.trim())
|
|
71
|
-
.filter((l) => l.length > 0 && fs_1.default.existsSync(l));
|
|
72
|
-
if (lines.length === 0) {
|
|
73
|
-
throw new Error('which returned no usable paths');
|
|
74
|
-
}
|
|
75
|
-
if (process.platform === 'win32') {
|
|
76
|
-
const directlySpawnable = lines.find((l) => /\.(cmd|exe|bat)$/i.test(l));
|
|
77
|
-
return directlySpawnable ?? lines[0];
|
|
78
|
-
}
|
|
79
|
-
return lines[0];
|
|
53
|
+
childProcess.execSync(`${bin} --version`, { stdio: 'ignore' });
|
|
54
|
+
return true;
|
|
80
55
|
}
|
|
81
56
|
catch {
|
|
82
|
-
|
|
83
|
-
return 'npx';
|
|
57
|
+
return false;
|
|
84
58
|
}
|
|
85
59
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const warnIfStaleRivetCommand = (entry, editorLabel) => {
|
|
93
|
-
if (typeof entry !== 'object' || entry === null)
|
|
94
|
-
return;
|
|
95
|
-
const cmd = entry.command;
|
|
96
|
-
if (typeof cmd !== 'string')
|
|
97
|
-
return;
|
|
98
|
-
if (!path_1.default.isAbsolute(cmd))
|
|
99
|
-
return;
|
|
100
|
-
if (fs_1.default.existsSync(cmd))
|
|
101
|
-
return;
|
|
102
|
-
console.log(` Note: previous Rivet command for ${editorLabel} (${cmd}) no longer exists. Re-resolving.`);
|
|
103
|
-
};
|
|
104
|
-
/**
|
|
105
|
-
* Read and validate an MCP config JSON file. Refuses to proceed on malformed
|
|
106
|
-
* input so a merge never clobbers a file we couldn't parse. A missing file is
|
|
107
|
-
* a valid empty config.
|
|
108
|
-
*/
|
|
109
|
-
const parseConfigFile = (configPath) => {
|
|
110
|
-
if (!fs_1.default.existsSync(configPath))
|
|
111
|
-
return { ok: true, config: {} };
|
|
112
|
-
let parsed;
|
|
113
|
-
try {
|
|
114
|
-
parsed = JSON.parse(fs_1.default.readFileSync(configPath, 'utf8'));
|
|
60
|
+
const reportAllowlistWrite = (label, filePath, result) => {
|
|
61
|
+
if (!result.ok) {
|
|
62
|
+
console.log(` Error: could not write the ${label} command allowlist (${filePath}): ${result.error}`);
|
|
63
|
+
console.log(' Run this in your own terminal instead:');
|
|
64
|
+
console.log(' npx -y rivet-design@latest install');
|
|
65
|
+
return false;
|
|
115
66
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
123
|
-
return {
|
|
124
|
-
ok: false,
|
|
125
|
-
error: `${configPath} is not a JSON object. Fix or delete the file manually, then re-run.`,
|
|
126
|
-
};
|
|
67
|
+
console.log(result.changed
|
|
68
|
+
? `✓ Command allowlist written to ${filePath}`
|
|
69
|
+
: `✓ Command allowlist already present in ${filePath}`);
|
|
70
|
+
if (result.verified) {
|
|
71
|
+
console.log('✓ Verified: `rivet` invocations run without an approval prompt.');
|
|
127
72
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
(typeof config.mcpServers !== 'object' || Array.isArray(config.mcpServers))) {
|
|
131
|
-
return {
|
|
132
|
-
ok: false,
|
|
133
|
-
error: `mcpServers in ${configPath} is not an object. Fix it manually, then re-run.`,
|
|
134
|
-
};
|
|
73
|
+
else {
|
|
74
|
+
console.log(' Warning: could not verify the allowlist entry — the host may still prompt per call.');
|
|
135
75
|
}
|
|
136
|
-
return
|
|
137
|
-
};
|
|
138
|
-
const writeConfigFile = (configPath, config) => {
|
|
139
|
-
fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
140
|
-
};
|
|
141
|
-
const ACCESS_ERROR_CODES = new Set(['EACCES', 'EPERM']);
|
|
142
|
-
const CODING_AGENT_ENV_KEYS = [
|
|
143
|
-
'CLAUDECODE',
|
|
144
|
-
'CODEX_SANDBOX',
|
|
145
|
-
'CURSOR_AGENT',
|
|
146
|
-
'CURSOR_TRACE_ID',
|
|
147
|
-
'GITHUB_ACTIONS',
|
|
148
|
-
];
|
|
149
|
-
/**
|
|
150
|
-
* Detect shells commonly launched by coding agents or automation.
|
|
151
|
-
*/
|
|
152
|
-
const isCodingAgentShell = () => CODING_AGENT_ENV_KEYS.some((key) => Boolean(process.env[key]));
|
|
153
|
-
/**
|
|
154
|
-
* Extract a stable error code from filesystem exceptions.
|
|
155
|
-
*/
|
|
156
|
-
const errorCodeFor = (err) => {
|
|
157
|
-
if (typeof err !== 'object' || err === null)
|
|
158
|
-
return undefined;
|
|
159
|
-
const code = err.code;
|
|
160
|
-
return typeof code === 'string' ? code : undefined;
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
163
|
-
* Convert an unknown thrown value into terminal-safe text.
|
|
164
|
-
*/
|
|
165
|
-
const errorMessageFor = (err) => {
|
|
166
|
-
if (err instanceof Error)
|
|
167
|
-
return err.message;
|
|
168
|
-
return String(err);
|
|
169
|
-
};
|
|
170
|
-
/**
|
|
171
|
-
* Determine whether a config write failed because this process lacks access.
|
|
172
|
-
*/
|
|
173
|
-
const isAccessWriteError = (err) => {
|
|
174
|
-
const code = errorCodeFor(err);
|
|
175
|
-
return code ? ACCESS_ERROR_CODES.has(code) : false;
|
|
76
|
+
return true;
|
|
176
77
|
};
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
78
|
+
const claudeSkillDir = () => path_1.default.join(os_1.default.homedir(), '.claude', 'skills', 'rivet');
|
|
79
|
+
/** Uniform progress line for an `--mcp` registration attempt. */
|
|
80
|
+
const reportMcpRegistration = (label, result) => {
|
|
81
|
+
if (!result.ok) {
|
|
82
|
+
console.log(` Error: could not register the Rivet MCP server with ${label}: ${result.error}`);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
console.log(result.changed
|
|
86
|
+
? `✓ Registered the Rivet MCP server (\`rivet mcp serve\`) with ${label}`
|
|
87
|
+
: `✓ Rivet MCP server already registered with ${label}`);
|
|
88
|
+
return true;
|
|
186
89
|
};
|
|
187
|
-
/**
|
|
188
|
-
* Detect permission failures emitted by editor CLIs.
|
|
189
|
-
*/
|
|
190
|
-
const isAccessFailureText = (text) => /\b(?:EPERM|EACCES)\b|operation not permitted|permission denied|failed to write|failed to persist config/i.test(text);
|
|
191
90
|
// ---------------------------------------------------------------------------
|
|
192
|
-
//
|
|
91
|
+
// The registry — the single source of truth for supported harnesses
|
|
193
92
|
// ---------------------------------------------------------------------------
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
name: CURSOR_HOSTED_SERVER_NAME,
|
|
207
|
-
config: Buffer.from(JSON.stringify((0, exports.buildCursorHostedRivetEntry)()), 'utf8').toString('base64'),
|
|
208
|
-
});
|
|
209
|
-
return `${CURSOR_MCP_INSTALL_URL}?${params.toString()}`;
|
|
210
|
-
};
|
|
211
|
-
const buildCursorLocalRivetEntry = () => ({
|
|
212
|
-
command: (0, exports.resolveNpxCommand)(),
|
|
213
|
-
args: ['-y', 'rivet-design@latest', 'mcp', '--editor', 'cursor'],
|
|
214
|
-
});
|
|
215
|
-
exports.buildCursorLocalRivetEntry = buildCursorLocalRivetEntry;
|
|
216
|
-
const buildClaudeDesktopRivetEntry = () => ({
|
|
217
|
-
command: (0, exports.resolveNpxCommand)(),
|
|
218
|
-
args: ['-y', 'rivet-design@latest', 'mcp', '--editor', 'claude-desktop'],
|
|
219
|
-
});
|
|
220
|
-
/**
|
|
221
|
-
* Path to the Claude desktop app's MCP config file.
|
|
222
|
-
* macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
223
|
-
* Win: %APPDATA%\Claude\claude_desktop_config.json
|
|
224
|
-
* Linux: ~/.config/Claude/claude_desktop_config.json
|
|
225
|
-
*/
|
|
226
|
-
const claudeDesktopConfigPath = () => {
|
|
227
|
-
const home = os_1.default.homedir();
|
|
228
|
-
if (process.platform === 'darwin') {
|
|
229
|
-
return path_1.default.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
230
|
-
}
|
|
231
|
-
if (process.platform === 'win32') {
|
|
232
|
-
const appData = process.env.APPDATA ?? path_1.default.join(home, 'AppData', 'Roaming');
|
|
233
|
-
return path_1.default.join(appData, 'Claude', 'claude_desktop_config.json');
|
|
234
|
-
}
|
|
235
|
-
return path_1.default.join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
236
|
-
};
|
|
237
|
-
const cliHarness = (opts) => {
|
|
238
|
-
const detect = () => {
|
|
239
|
-
try {
|
|
240
|
-
childProcess.execSync(`${opts.bin} --version`, { stdio: 'ignore' });
|
|
241
|
-
return true;
|
|
93
|
+
const claudeHarness = {
|
|
94
|
+
id: 'claude',
|
|
95
|
+
label: 'Claude Code',
|
|
96
|
+
sendButtonLabel: 'Send to Claude Code',
|
|
97
|
+
installUrl: 'https://claude.ai/download',
|
|
98
|
+
supportsMcp: true,
|
|
99
|
+
detect: binaryDetect('claude'),
|
|
100
|
+
notInstalledMessage: () => 'Claude Code is not installed or not in your PATH.\nInstall it: https://claude.ai/download',
|
|
101
|
+
install: (options) => {
|
|
102
|
+
const skill = (0, skillWriter_1.writeSkillFileIfNeeded)();
|
|
103
|
+
if (skill.success) {
|
|
104
|
+
console.log('✓ Rivet CLI skill installed for Claude Code');
|
|
242
105
|
}
|
|
243
|
-
|
|
244
|
-
|
|
106
|
+
else {
|
|
107
|
+
console.log(` Warning: could not write skill file to ${claudeSkillDir()}: ${skill.error}`);
|
|
245
108
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
try {
|
|
250
|
-
const output = childProcess.execSync(opts.addCmd, {
|
|
251
|
-
stdio: 'pipe',
|
|
252
|
-
encoding: 'utf8',
|
|
253
|
-
});
|
|
254
|
-
if (output)
|
|
255
|
-
process.stdout.write(output);
|
|
256
|
-
console.log(`✓ Rivet MCP server added to ${opts.label}`);
|
|
257
|
-
return true;
|
|
258
|
-
}
|
|
259
|
-
catch (err) {
|
|
260
|
-
const stderr = processOutputFor(err.stderr);
|
|
261
|
-
if (stderr.includes('already exists')) {
|
|
262
|
-
console.log(`✓ Rivet MCP server already registered with ${opts.label}`);
|
|
263
|
-
return true;
|
|
264
|
-
}
|
|
265
|
-
if (isAccessFailureText(stderr)) {
|
|
266
|
-
console.log(` Could not register Rivet with ${opts.label} from this shell.`);
|
|
267
|
-
console.log(' Looks like this was launched by a coding agent or sandboxed shell, which may not be allowed to edit that app config.');
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
const message = stderr.trim().split(/\r?\n/)[0];
|
|
271
|
-
if (message)
|
|
272
|
-
console.log(` Error: ${message}`);
|
|
273
|
-
}
|
|
274
|
-
console.log(' Run this in your own terminal instead:');
|
|
275
|
-
console.log(` ${opts.addCmd}`);
|
|
276
|
-
return false;
|
|
109
|
+
const allowlistOk = reportAllowlistWrite('Claude Code', (0, allowlists_1.claudeSettingsPath)(), (0, allowlists_1.writeClaudeAllowlist)());
|
|
110
|
+
if ((0, legacyMcp_1.cleanupClaudeLegacyMcp)().changed) {
|
|
111
|
+
console.log('✓ Removed the MCP registration a previous Rivet version wrote');
|
|
277
112
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return;
|
|
282
|
-
const result = opts.skill.write();
|
|
283
|
-
if (result.success) {
|
|
284
|
-
console.log(`✓ Rivet skill ${verb} for ${opts.label}`);
|
|
113
|
+
let mcpOk = true;
|
|
114
|
+
if (options?.mcp) {
|
|
115
|
+
mcpOk = reportMcpRegistration('Claude Code', (0, mcpRegistration_1.registerClaudeCodeMcp)());
|
|
285
116
|
}
|
|
286
|
-
|
|
287
|
-
|
|
117
|
+
return { ok: skill.success && allowlistOk && mcpOk, changed: true };
|
|
118
|
+
},
|
|
119
|
+
uninstall: () => {
|
|
120
|
+
let changed = false;
|
|
121
|
+
if (fs_1.default.existsSync(claudeSkillDir())) {
|
|
122
|
+
fs_1.default.rmSync(claudeSkillDir(), { recursive: true, force: true });
|
|
123
|
+
console.log('✓ Rivet skill file removed for Claude Code');
|
|
124
|
+
changed = true;
|
|
288
125
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
fs_1.default.rmSync(opts.skill.dir, { recursive: true, force: true });
|
|
319
|
-
console.log(`✓ Rivet skill file removed for ${opts.label}`);
|
|
320
|
-
changed = true;
|
|
321
|
-
}
|
|
322
|
-
return changed;
|
|
323
|
-
},
|
|
324
|
-
update: () => {
|
|
325
|
-
if (!detect())
|
|
326
|
-
return false;
|
|
327
|
-
try {
|
|
328
|
-
childProcess.execSync(opts.removeCmd, { stdio: 'pipe' });
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
// not registered yet — re-adding below still does the right thing
|
|
332
|
-
}
|
|
333
|
-
if (!register()) {
|
|
334
|
-
console.log(` Failed to update Rivet for ${opts.label}.`);
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
337
|
-
writeSkill('updated');
|
|
338
|
-
return true;
|
|
339
|
-
},
|
|
340
|
-
nextSteps: opts.nextSteps,
|
|
341
|
-
summaryHint: opts.summaryHint,
|
|
342
|
-
restartHint: opts.restartHint,
|
|
343
|
-
};
|
|
344
|
-
};
|
|
345
|
-
/**
|
|
346
|
-
* Print manual recovery steps when an editor config cannot be written.
|
|
347
|
-
*/
|
|
348
|
-
const printManualJsonInstallInstructions = ({ configPath, err, opts, }) => {
|
|
349
|
-
const code = errorCodeFor(err);
|
|
350
|
-
console.log(` Could not update ${opts.label} MCP config${code ? ` (${code})` : ''}: ${configPath}`);
|
|
351
|
-
if (opts.id === 'cursor') {
|
|
352
|
-
console.log(" Looks like this was launched by a coding agent, which can't modify ~/.cursor/.");
|
|
353
|
-
}
|
|
354
|
-
else if (isCodingAgentShell()) {
|
|
355
|
-
console.log(' Looks like this was launched by a coding agent or sandboxed shell, which may not be allowed to edit that app config.');
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
console.log(' If this was launched by a coding agent or sandboxed shell, it may not be allowed to edit that app config.');
|
|
359
|
-
}
|
|
360
|
-
if (opts.manualInstallUrl) {
|
|
361
|
-
console.log('\n Click this link to install the hosted MCP server:');
|
|
362
|
-
console.log(` ${opts.manualInstallUrl()}`);
|
|
363
|
-
}
|
|
364
|
-
console.log('\n Run this in your own terminal instead:');
|
|
365
|
-
console.log(` npx -y rivet-design@latest install ${opts.id}`);
|
|
366
|
-
};
|
|
367
|
-
/**
|
|
368
|
-
* Print a one-click install link for editor-hosted MCP registration.
|
|
369
|
-
*/
|
|
370
|
-
const printJsonInstallLink = (opts) => {
|
|
371
|
-
if (!opts.manualInstallUrl)
|
|
372
|
-
return;
|
|
373
|
-
console.log('\nCursor one-click hosted MCP install link:');
|
|
374
|
-
console.log(` ${opts.manualInstallUrl()}`);
|
|
375
|
-
console.log('Click it if Cursor still asks you to approve the MCP server.');
|
|
376
|
-
};
|
|
377
|
-
/**
|
|
378
|
-
* Print a compact write failure for non-install config mutations.
|
|
379
|
-
*/
|
|
380
|
-
const printJsonWriteFailure = (configPath, err) => {
|
|
381
|
-
console.log(` Error: could not write Rivet MCP config to ${configPath}: ${errorMessageFor(err)}`);
|
|
382
|
-
};
|
|
383
|
-
const jsonHarness = (opts) => {
|
|
384
|
-
const ownedKeys = () => Object.keys(opts.entries());
|
|
385
|
-
const detect = () => fs_1.default.existsSync(opts.detectDir);
|
|
386
|
-
return {
|
|
387
|
-
id: opts.id,
|
|
388
|
-
label: opts.label,
|
|
389
|
-
sendButtonLabel: opts.sendButtonLabel,
|
|
390
|
-
installUrl: opts.installUrl,
|
|
391
|
-
detect,
|
|
392
|
-
notInstalledMessage: opts.notInstalledMessage,
|
|
393
|
-
install: () => {
|
|
394
|
-
const configPath = opts.configPath();
|
|
395
|
-
const parsed = parseConfigFile(configPath);
|
|
396
|
-
if (!parsed.ok) {
|
|
397
|
-
console.log(` Error: ${parsed.error}`);
|
|
398
|
-
return { ok: false, changed: false };
|
|
399
|
-
}
|
|
400
|
-
const { config } = parsed;
|
|
401
|
-
const entries = opts.entries();
|
|
402
|
-
config.mcpServers = { ...config.mcpServers, ...entries };
|
|
403
|
-
try {
|
|
404
|
-
writeConfigFile(configPath, config);
|
|
405
|
-
}
|
|
406
|
-
catch (err) {
|
|
407
|
-
if (isAccessWriteError(err)) {
|
|
408
|
-
printManualJsonInstallInstructions({
|
|
409
|
-
configPath,
|
|
410
|
-
err,
|
|
411
|
-
opts,
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
else {
|
|
415
|
-
printJsonWriteFailure(configPath, err);
|
|
416
|
-
}
|
|
417
|
-
return { ok: false, changed: false };
|
|
418
|
-
}
|
|
419
|
-
console.log(`✓ Rivet MCP server added to ${configPath}`);
|
|
420
|
-
printJsonInstallLink(opts);
|
|
421
|
-
return { ok: true, changed: true };
|
|
422
|
-
},
|
|
423
|
-
uninstall: () => {
|
|
424
|
-
const configPath = opts.configPath();
|
|
425
|
-
if (!fs_1.default.existsSync(configPath)) {
|
|
426
|
-
console.log(` No ${opts.label} MCP config found — nothing to remove.`);
|
|
427
|
-
return false;
|
|
428
|
-
}
|
|
429
|
-
const parsed = parseConfigFile(configPath);
|
|
430
|
-
if (!parsed.ok) {
|
|
431
|
-
console.log(` Error: ${parsed.error}`);
|
|
432
|
-
return false;
|
|
433
|
-
}
|
|
434
|
-
const { config } = parsed;
|
|
435
|
-
const keys = ownedKeys();
|
|
436
|
-
if (!config.mcpServers || !keys.some((k) => k in config.mcpServers)) {
|
|
437
|
-
console.log(` Rivet was not registered with ${opts.label} (nothing to remove).`);
|
|
438
|
-
return false;
|
|
439
|
-
}
|
|
440
|
-
for (const key of keys)
|
|
441
|
-
delete config.mcpServers[key];
|
|
442
|
-
try {
|
|
443
|
-
writeConfigFile(configPath, config);
|
|
444
|
-
}
|
|
445
|
-
catch (err) {
|
|
446
|
-
printJsonWriteFailure(configPath, err);
|
|
447
|
-
return false;
|
|
448
|
-
}
|
|
449
|
-
console.log(`✓ Rivet MCP server removed from ${configPath}`);
|
|
450
|
-
return true;
|
|
451
|
-
},
|
|
452
|
-
update: () => {
|
|
453
|
-
const configPath = opts.configPath();
|
|
454
|
-
if (!fs_1.default.existsSync(configPath))
|
|
455
|
-
return false;
|
|
456
|
-
const parsed = parseConfigFile(configPath);
|
|
457
|
-
if (!parsed.ok) {
|
|
458
|
-
console.log(` Warning: could not update ${opts.label} (${parsed.error})`);
|
|
459
|
-
return false;
|
|
460
|
-
}
|
|
461
|
-
const { config } = parsed;
|
|
462
|
-
const keys = ownedKeys();
|
|
463
|
-
if (!config.mcpServers || !keys.some((k) => k in config.mcpServers)) {
|
|
464
|
-
return false;
|
|
465
|
-
}
|
|
466
|
-
for (const key of keys)
|
|
467
|
-
warnIfStaleRivetCommand(config.mcpServers[key], opts.label);
|
|
468
|
-
config.mcpServers = { ...config.mcpServers, ...opts.entries() };
|
|
469
|
-
try {
|
|
470
|
-
writeConfigFile(configPath, config);
|
|
471
|
-
}
|
|
472
|
-
catch (err) {
|
|
473
|
-
printJsonWriteFailure(configPath, err);
|
|
474
|
-
return false;
|
|
475
|
-
}
|
|
476
|
-
console.log(`✓ Updated Rivet MCP server for ${opts.label}`);
|
|
477
|
-
return true;
|
|
478
|
-
},
|
|
479
|
-
nextSteps: opts.nextSteps,
|
|
480
|
-
summaryHint: opts.summaryHint,
|
|
481
|
-
restartHint: opts.restartHint,
|
|
482
|
-
};
|
|
483
|
-
};
|
|
484
|
-
// ---------------------------------------------------------------------------
|
|
485
|
-
// The registry — the single source of truth for supported harnesses
|
|
486
|
-
// ---------------------------------------------------------------------------
|
|
487
|
-
exports.HARNESSES = [
|
|
488
|
-
cliHarness({
|
|
489
|
-
id: 'claude',
|
|
490
|
-
label: 'Claude Code',
|
|
491
|
-
sendButtonLabel: 'Send to Claude Code',
|
|
492
|
-
installUrl: 'https://claude.ai/download',
|
|
493
|
-
bin: 'claude',
|
|
494
|
-
addCmd: 'claude mcp add --transport stdio --scope user rivet -- npx -y rivet-design@latest mcp --editor claude',
|
|
495
|
-
removeCmd: 'claude mcp remove rivet',
|
|
496
|
-
skill: {
|
|
497
|
-
write: skillWriter_1.writeSkillFileIfNeeded,
|
|
498
|
-
dir: path_1.default.join(os_1.default.homedir(), '.claude', 'skills', 'rivet'),
|
|
499
|
-
},
|
|
500
|
-
nextSteps: `
|
|
126
|
+
const allowlist = (0, allowlists_1.removeClaudeAllowlist)();
|
|
127
|
+
if (allowlist.ok && allowlist.changed) {
|
|
128
|
+
console.log(`✓ Command allowlist entries removed from ${(0, allowlists_1.claudeSettingsPath)()}`);
|
|
129
|
+
changed = true;
|
|
130
|
+
}
|
|
131
|
+
// Removes the registration whatever its vintage (legacy or `mcp serve`).
|
|
132
|
+
if ((0, mcpRegistration_1.unregisterClaudeCodeMcp)().changed) {
|
|
133
|
+
console.log('✓ Rivet MCP registration removed from Claude Code');
|
|
134
|
+
changed = true;
|
|
135
|
+
}
|
|
136
|
+
return changed;
|
|
137
|
+
},
|
|
138
|
+
update: () => {
|
|
139
|
+
if (!binaryDetect('claude')())
|
|
140
|
+
return false;
|
|
141
|
+
const skill = (0, skillWriter_1.writeSkillFileIfNeeded)();
|
|
142
|
+
const allowlist = (0, allowlists_1.writeClaudeAllowlist)();
|
|
143
|
+
(0, legacyMcp_1.cleanupClaudeLegacyMcp)();
|
|
144
|
+
if ((0, mcpRegistration_1.hasServeRegistrationViaHostCli)('claude')) {
|
|
145
|
+
// Opted in: re-register so the node/bin paths track this install.
|
|
146
|
+
(0, mcpRegistration_1.registerClaudeCodeMcp)();
|
|
147
|
+
}
|
|
148
|
+
const updated = skill.success && allowlist.ok && (allowlist.changed || true);
|
|
149
|
+
if (updated) {
|
|
150
|
+
console.log('✓ Refreshed Rivet CLI guidance for Claude Code');
|
|
151
|
+
}
|
|
152
|
+
return updated;
|
|
153
|
+
},
|
|
154
|
+
nextSteps: `
|
|
501
155
|
Next steps:
|
|
502
156
|
1. Start a new Claude Code session
|
|
503
157
|
2. Type /rivet or say "Open Rivet"
|
|
504
158
|
`,
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
159
|
+
summaryHint: 'start a new session, then /rivet',
|
|
160
|
+
restartHint: 'Restart Claude Code to apply changes.',
|
|
161
|
+
};
|
|
162
|
+
const cursorHarness = {
|
|
163
|
+
id: 'cursor',
|
|
164
|
+
label: 'Cursor',
|
|
165
|
+
sendButtonLabel: 'Send to Cursor',
|
|
166
|
+
installUrl: 'https://cursor.com',
|
|
167
|
+
supportsMcp: true,
|
|
168
|
+
detect: () => fs_1.default.existsSync(path_1.default.join(os_1.default.homedir(), '.cursor')),
|
|
169
|
+
notInstalledMessage: () => 'Cursor does not appear to be installed (~/.cursor not found).\nInstall it: https://cursor.com',
|
|
170
|
+
install: (options) => {
|
|
171
|
+
const allowlistOk = reportAllowlistWrite('Cursor', (0, allowlists_1.cursorPermissionsPath)(), (0, allowlists_1.writeCursorAllowlist)());
|
|
172
|
+
if ((0, legacyMcp_1.cleanupCursorLegacyMcp)().changed) {
|
|
173
|
+
console.log('✓ Removed the MCP entries a previous Rivet version wrote to ~/.cursor/mcp.json');
|
|
174
|
+
}
|
|
175
|
+
let mcpOk = true;
|
|
176
|
+
if (options?.mcp) {
|
|
177
|
+
mcpOk = reportMcpRegistration('Cursor (~/.cursor/mcp.json)', (0, mcpRegistration_1.registerCursorMcp)());
|
|
178
|
+
}
|
|
179
|
+
console.log(' Rivet writes its usage rules into each project (.cursor/rules/rivet.mdc) when you open it.');
|
|
180
|
+
return { ok: allowlistOk && mcpOk, changed: true };
|
|
181
|
+
},
|
|
182
|
+
uninstall: () => {
|
|
183
|
+
let changed = false;
|
|
184
|
+
const allowlist = (0, allowlists_1.removeCursorAllowlist)();
|
|
185
|
+
if (allowlist.ok && allowlist.changed) {
|
|
186
|
+
console.log(`✓ Command allowlist entries removed from ${(0, allowlists_1.cursorPermissionsPath)()}`);
|
|
187
|
+
changed = true;
|
|
188
|
+
}
|
|
189
|
+
if ((0, legacyMcp_1.cleanupCursorLegacyMcp)().changed) {
|
|
190
|
+
console.log('✓ Removed legacy Rivet MCP entries from ~/.cursor/mcp.json');
|
|
191
|
+
changed = true;
|
|
192
|
+
}
|
|
193
|
+
if ((0, mcpRegistration_1.unregisterCursorMcp)().changed) {
|
|
194
|
+
console.log('✓ Rivet MCP registration removed from ~/.cursor/mcp.json');
|
|
195
|
+
changed = true;
|
|
196
|
+
}
|
|
197
|
+
return changed;
|
|
198
|
+
},
|
|
199
|
+
update: () => {
|
|
200
|
+
if (!fs_1.default.existsSync(path_1.default.join(os_1.default.homedir(), '.cursor')))
|
|
201
|
+
return false;
|
|
202
|
+
const allowlist = (0, allowlists_1.writeCursorAllowlist)();
|
|
203
|
+
(0, legacyMcp_1.cleanupCursorLegacyMcp)();
|
|
204
|
+
if ((0, mcpRegistration_1.hasCursorServeRegistration)()) {
|
|
205
|
+
(0, mcpRegistration_1.registerCursorMcp)();
|
|
206
|
+
}
|
|
207
|
+
if (allowlist.ok) {
|
|
208
|
+
console.log('✓ Refreshed the Cursor command allowlist for Rivet');
|
|
209
|
+
}
|
|
210
|
+
return allowlist.ok;
|
|
211
|
+
},
|
|
212
|
+
nextSteps: `
|
|
539
213
|
Next steps:
|
|
540
|
-
1.
|
|
541
|
-
2. Open
|
|
214
|
+
1. Open a project in Cursor
|
|
215
|
+
2. Say "Open Rivet" — the agent drives Rivet with \`rivet\` commands
|
|
542
216
|
`,
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
217
|
+
summaryHint: 'open a project, then say "Open Rivet"',
|
|
218
|
+
restartHint: 'Restart Cursor to apply changes.',
|
|
219
|
+
};
|
|
220
|
+
const codexHarness = {
|
|
221
|
+
id: 'codex',
|
|
222
|
+
label: 'OpenAI Codex CLI',
|
|
223
|
+
sendButtonLabel: 'Send to Codex',
|
|
224
|
+
installUrl: 'https://github.com/openai/codex',
|
|
225
|
+
supportsMcp: true,
|
|
226
|
+
detect: binaryDetect('codex'),
|
|
227
|
+
notInstalledMessage: () => 'OpenAI Codex CLI is not installed or not in your PATH.\nInstall it: https://github.com/openai/codex',
|
|
228
|
+
install: (options) => {
|
|
229
|
+
const guidance = (0, codexGuidance_1.writeCodexGuidance)();
|
|
230
|
+
if (guidance.ok) {
|
|
231
|
+
console.log('✓ Rivet CLI guidance written to ~/.codex/AGENTS.md');
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
console.log(` Warning: could not write ~/.codex/AGENTS.md guidance: ${guidance.error}`);
|
|
235
|
+
}
|
|
236
|
+
const rules = (0, allowlists_1.writeCodexRules)();
|
|
237
|
+
const rulesOk = reportAllowlistWrite('Codex execpolicy', (0, allowlists_1.codexRulesPath)(), rules);
|
|
238
|
+
if (rules.ok && !rules.verified) {
|
|
239
|
+
console.log(' Note: verification uses `codex execpolicy check` (preview); if unavailable, restart Codex and approve `rivet` once — it will be remembered.');
|
|
240
|
+
}
|
|
241
|
+
if ((0, legacyMcp_1.cleanupCodexLegacyMcp)().changed) {
|
|
242
|
+
console.log('✓ Removed the MCP registration a previous Rivet version wrote');
|
|
243
|
+
}
|
|
244
|
+
let mcpOk = true;
|
|
245
|
+
if (options?.mcp) {
|
|
246
|
+
mcpOk = reportMcpRegistration('OpenAI Codex CLI', (0, mcpRegistration_1.registerCodexMcp)());
|
|
247
|
+
}
|
|
248
|
+
return { ok: guidance.ok && rulesOk && mcpOk, changed: true };
|
|
249
|
+
},
|
|
250
|
+
uninstall: () => {
|
|
251
|
+
let changed = false;
|
|
252
|
+
const guidance = (0, codexGuidance_1.removeCodexGuidance)();
|
|
253
|
+
if (guidance.ok && guidance.changed) {
|
|
254
|
+
console.log('✓ Rivet guidance removed from ~/.codex/AGENTS.md');
|
|
255
|
+
changed = true;
|
|
256
|
+
}
|
|
257
|
+
const rules = (0, allowlists_1.removeCodexRules)();
|
|
258
|
+
if (rules.ok && rules.changed) {
|
|
259
|
+
console.log(`✓ Execpolicy rules removed (${(0, allowlists_1.codexRulesPath)()})`);
|
|
260
|
+
changed = true;
|
|
261
|
+
}
|
|
262
|
+
if ((0, mcpRegistration_1.unregisterCodexMcp)().changed) {
|
|
263
|
+
console.log('✓ Rivet MCP registration removed from Codex');
|
|
264
|
+
changed = true;
|
|
265
|
+
}
|
|
266
|
+
return changed;
|
|
267
|
+
},
|
|
268
|
+
update: () => {
|
|
269
|
+
if (!binaryDetect('codex')())
|
|
270
|
+
return false;
|
|
271
|
+
const guidance = (0, codexGuidance_1.writeCodexGuidance)();
|
|
272
|
+
const rules = (0, allowlists_1.writeCodexRules)();
|
|
273
|
+
(0, legacyMcp_1.cleanupCodexLegacyMcp)();
|
|
274
|
+
if ((0, mcpRegistration_1.hasServeRegistrationViaHostCli)('codex')) {
|
|
275
|
+
(0, mcpRegistration_1.registerCodexMcp)();
|
|
276
|
+
}
|
|
277
|
+
const updated = guidance.ok && rules.ok;
|
|
278
|
+
if (updated) {
|
|
279
|
+
console.log('✓ Refreshed Rivet CLI guidance for OpenAI Codex CLI');
|
|
280
|
+
}
|
|
281
|
+
return updated;
|
|
282
|
+
},
|
|
283
|
+
nextSteps: `
|
|
555
284
|
Next steps:
|
|
556
285
|
1. Start a new Codex session
|
|
557
286
|
2. Say "Open Rivet"
|
|
558
287
|
`,
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
288
|
+
summaryHint: 'start a new session, then say "Open Rivet"',
|
|
289
|
+
restartHint: 'Start a new Codex session to apply changes.',
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Claude Desktop is retired as a *CLI* install target: it has no shell
|
|
293
|
+
* access, so it cannot run `rivet` commands. With `--mcp` it re-enters the
|
|
294
|
+
* flow — the resident `rivet mcp serve` stdio server is exactly the bridge a
|
|
295
|
+
* shell-less host needs. Without the flag, install only cleans up what old
|
|
296
|
+
* versions wrote.
|
|
297
|
+
*/
|
|
298
|
+
const CLAUDE_DESKTOP_OUT_OF_SCOPE_MESSAGE = `Claude Desktop has no shell access to run the \`rivet\` CLI. To use Rivet
|
|
299
|
+
from Claude Desktop, register the MCP server instead:
|
|
300
|
+
|
|
301
|
+
rivet install claude-desktop --mcp
|
|
302
|
+
|
|
303
|
+
Otherwise use Claude Code (\`rivet install claude\`) — the browser editor
|
|
304
|
+
still works alongside any shell-capable agent.`;
|
|
305
|
+
const claudeDesktopHarness = {
|
|
306
|
+
id: 'claude-desktop',
|
|
307
|
+
label: 'the Claude desktop app',
|
|
308
|
+
sendButtonLabel: 'Send to Claude',
|
|
309
|
+
installUrl: 'https://claude.ai/download',
|
|
310
|
+
isRetired: true,
|
|
311
|
+
supportsMcp: true,
|
|
312
|
+
detect: () => fs_1.default.existsSync(path_1.default.dirname((0, legacyMcp_1.claudeDesktopConfigPath)())),
|
|
313
|
+
notInstalledMessage: () => `Claude desktop does not appear to be installed (${path_1.default.dirname((0, legacyMcp_1.claudeDesktopConfigPath)())} not found).\nInstall it: https://claude.ai/download`,
|
|
314
|
+
install: (options) => {
|
|
315
|
+
if (options?.mcp) {
|
|
316
|
+
const result = (0, mcpRegistration_1.registerClaudeDesktopMcp)();
|
|
317
|
+
const ok = reportMcpRegistration('the Claude desktop app (claude_desktop_config.json)', result);
|
|
318
|
+
if (ok) {
|
|
319
|
+
console.log(' Claude Desktop has no working directory: tools take a `project` parameter — tell the agent which project root to target.');
|
|
320
|
+
}
|
|
321
|
+
return { ok, changed: result.changed };
|
|
322
|
+
}
|
|
323
|
+
console.log(CLAUDE_DESKTOP_OUT_OF_SCOPE_MESSAGE);
|
|
324
|
+
const cleanup = (0, legacyMcp_1.cleanupClaudeDesktopLegacyMcp)();
|
|
325
|
+
if (cleanup.changed) {
|
|
326
|
+
console.log('✓ Removed the MCP registration a previous Rivet version wrote to claude_desktop_config.json');
|
|
327
|
+
}
|
|
328
|
+
return { ok: true, changed: cleanup.changed };
|
|
329
|
+
},
|
|
330
|
+
uninstall: () => {
|
|
331
|
+
// Removes the registration whatever its vintage (legacy or `mcp serve`).
|
|
332
|
+
const legacy = (0, legacyMcp_1.cleanupClaudeDesktopLegacyMcp)();
|
|
333
|
+
const serve = (0, mcpRegistration_1.unregisterClaudeDesktopMcp)();
|
|
334
|
+
const changed = legacy.changed || serve.changed;
|
|
335
|
+
if (changed) {
|
|
336
|
+
console.log(`✓ Rivet MCP registration removed from ${(0, legacyMcp_1.claudeDesktopConfigPath)()}`);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
console.log(' Rivet was not registered with the Claude desktop app (nothing to remove).');
|
|
340
|
+
}
|
|
341
|
+
return changed;
|
|
342
|
+
},
|
|
343
|
+
update: () => {
|
|
344
|
+
const legacy = (0, legacyMcp_1.cleanupClaudeDesktopLegacyMcp)().changed;
|
|
345
|
+
if ((0, mcpRegistration_1.hasClaudeDesktopServeRegistration)()) {
|
|
346
|
+
// Opted in: re-register so the node/bin paths track this install.
|
|
347
|
+
return (0, mcpRegistration_1.registerClaudeDesktopMcp)().changed || legacy;
|
|
348
|
+
}
|
|
349
|
+
return legacy;
|
|
350
|
+
},
|
|
351
|
+
nextSteps: `
|
|
352
|
+
Next steps:
|
|
353
|
+
1. Fully restart the Claude desktop app (the MCP server loads on launch)
|
|
354
|
+
2. Ask Claude to check Rivet status — tools take a \`project\` parameter,
|
|
355
|
+
so name the project root you want to work on
|
|
356
|
+
`,
|
|
357
|
+
summaryHint: 'restart the app; agent uses the rivet MCP tools',
|
|
358
|
+
restartHint: 'Fully restart the Claude desktop app to apply changes.',
|
|
359
|
+
};
|
|
360
|
+
exports.HARNESSES = [
|
|
361
|
+
claudeHarness,
|
|
362
|
+
claudeDesktopHarness,
|
|
363
|
+
cursorHarness,
|
|
364
|
+
codexHarness,
|
|
562
365
|
];
|
|
563
366
|
const findHarness = (id) => exports.HARNESSES.find((h) => h.id === id);
|
|
564
367
|
exports.findHarness = findHarness;
|
|
565
|
-
const detectedHarnesses = () => exports.HARNESSES.filter((h) => h.
|
|
368
|
+
const detectedHarnesses = (options) => exports.HARNESSES.filter((h) => (!h.isRetired || (options?.mcp === true && h.supportsMcp === true)) &&
|
|
369
|
+
h.detect());
|
|
566
370
|
exports.detectedHarnesses = detectedHarnesses;
|
|
567
371
|
/** Label for the in-app "Send to …" button, by harness id. */
|
|
568
372
|
const sendButtonLabelFor = (id) => (id && (0, exports.findHarness)(id)?.sendButtonLabel) ?? 'Send to Claude Code';
|
|
@@ -570,10 +374,14 @@ exports.sendButtonLabelFor = sendButtonLabelFor;
|
|
|
570
374
|
// ---------------------------------------------------------------------------
|
|
571
375
|
// Orchestration — drives install / uninstall / update over the registry
|
|
572
376
|
// ---------------------------------------------------------------------------
|
|
573
|
-
const
|
|
377
|
+
const CLI_INSTALL_WELCOME = `
|
|
574
378
|
Welcome to Rivet!
|
|
575
379
|
|
|
576
|
-
Rivet is a design agent for your coding agent.
|
|
380
|
+
Rivet is a design agent for your coding agent. Your agent drives it by
|
|
381
|
+
running \`rivet\` CLI commands — install writes each agent's usage guidance
|
|
382
|
+
and its command allowlist so those commands run without approval prompts.
|
|
383
|
+
Add --mcp to also register the resident MCP server (\`rivet mcp serve\`),
|
|
384
|
+
for hosts without shell access like Claude Desktop.
|
|
577
385
|
`;
|
|
578
386
|
const supportedListBlock = () => exports.HARNESSES.map((h) => ` rivet install ${h.id.padEnd(16)}${h.label}`).join('\n');
|
|
579
387
|
/**
|
|
@@ -581,8 +389,8 @@ const supportedListBlock = () => exports.HARNESSES.map((h) => ` rivet install $
|
|
|
581
389
|
* (`target` undefined/`'all'`). Returns a process exit code; never exits
|
|
582
390
|
* itself so the multi-install loop survives a single failure.
|
|
583
391
|
*/
|
|
584
|
-
const installHarnesses = (target) => {
|
|
585
|
-
console.log(
|
|
392
|
+
const installHarnesses = (target, options) => {
|
|
393
|
+
console.log(CLI_INSTALL_WELCOME);
|
|
586
394
|
// Single, explicitly named harness — preserves the original hard errors.
|
|
587
395
|
if (target && target !== 'all') {
|
|
588
396
|
const harness = (0, exports.findHarness)(target);
|
|
@@ -592,21 +400,23 @@ const installHarnesses = (target) => {
|
|
|
592
400
|
console.log('');
|
|
593
401
|
return { exitCode: 1 };
|
|
594
402
|
}
|
|
595
|
-
if (!harness.detect()) {
|
|
403
|
+
if (!harness.isRetired && !harness.detect()) {
|
|
596
404
|
console.log(`\n${harness.notInstalledMessage()}\n`);
|
|
597
405
|
return { exitCode: 1 };
|
|
598
406
|
}
|
|
599
407
|
console.log(`\nSetting up Rivet for ${harness.label}...\n`);
|
|
600
|
-
const result = harness.install();
|
|
601
|
-
if (result.ok)
|
|
408
|
+
const result = harness.install(options);
|
|
409
|
+
if (result.ok && result.changed)
|
|
602
410
|
console.log(harness.nextSteps);
|
|
603
411
|
return { exitCode: result.ok ? 0 : 1 };
|
|
604
412
|
}
|
|
605
413
|
// Unified path: install into everything we can detect.
|
|
606
|
-
const targets = (0, exports.detectedHarnesses)();
|
|
414
|
+
const targets = (0, exports.detectedHarnesses)(options);
|
|
607
415
|
if (targets.length === 0) {
|
|
608
416
|
console.log('\nNo supported agents detected. Install one of these, then re-run `rivet install`:\n');
|
|
609
417
|
for (const h of exports.HARNESSES) {
|
|
418
|
+
if (h.isRetired)
|
|
419
|
+
continue;
|
|
610
420
|
console.log(` ${h.label.padEnd(24)}${h.installUrl}`);
|
|
611
421
|
}
|
|
612
422
|
console.log('');
|
|
@@ -619,7 +429,7 @@ const installHarnesses = (target) => {
|
|
|
619
429
|
const failed = [];
|
|
620
430
|
for (const harness of targets) {
|
|
621
431
|
console.log(`\nSetting up Rivet for ${harness.label}...`);
|
|
622
|
-
const result = harness.install();
|
|
432
|
+
const result = harness.install(options);
|
|
623
433
|
(result.ok ? installed : failed).push(harness);
|
|
624
434
|
}
|
|
625
435
|
// Completion summary — show exactly which agents got Rivet.
|
|
@@ -636,7 +446,7 @@ const installHarnesses = (target) => {
|
|
|
636
446
|
console.log(` ✗ ${h.label} (see messages above)`);
|
|
637
447
|
}
|
|
638
448
|
}
|
|
639
|
-
const skipped = exports.HARNESSES.filter((h) => !targets.includes(h));
|
|
449
|
+
const skipped = exports.HARNESSES.filter((h) => !h.isRetired && !targets.includes(h));
|
|
640
450
|
if (skipped.length > 0) {
|
|
641
451
|
console.log(`\nNot detected (skipped): ${skipped.map((h) => h.label).join(', ')}`);
|
|
642
452
|
}
|
|
@@ -677,7 +487,7 @@ const uninstallHarnesses = (target) => {
|
|
|
677
487
|
return { exitCode: 0 };
|
|
678
488
|
};
|
|
679
489
|
exports.uninstallHarnesses = uninstallHarnesses;
|
|
680
|
-
/**
|
|
490
|
+
/** Refresh guidance/allowlists for every detected, already-installed harness. */
|
|
681
491
|
const updateHarnesses = () => {
|
|
682
492
|
console.log('\nUpdating Rivet...\n');
|
|
683
493
|
const updatedAny = exports.HARNESSES.map((h) => h.update()).some(Boolean);
|