rivet-design 0.12.4 → 0.13.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.
- 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 +11 -19
- package/dist/agent-variants/SessionStore.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/SessionStore.js +64 -79
- package/dist/agent-variants/SessionStore.js.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.d.ts +53 -21
- package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/WorktreeOrchestrator.js +291 -49
- 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 +715 -721
- package/dist/agent-variants/contracts.d.ts.map +1 -0
- package/dist/{mcp/agent-variants → agent-variants}/contracts.js +2 -3
- 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 +440 -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 +374 -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 +18 -20
- package/dist/mcp/changeBatchClassification.d.ts.map +1 -1
- package/dist/mcp/changeBatchClassification.js +41 -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 +321 -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 +52 -0
- package/dist/services/VariantGenerationService.d.ts.map +1 -0
- package/dist/services/VariantGenerationService.js +272 -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 +98 -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 +22 -0
- 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 +57 -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-BWOvFoal.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
package/dist/routes/mcp.js
CHANGED
|
@@ -1,797 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.createMCPRouter = void 0;
|
|
37
|
-
const crypto_1 = require("crypto");
|
|
38
|
-
const fs = __importStar(require("fs"));
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
4
|
const express_1 = require("express");
|
|
41
|
-
const v3_1 = require("zod/v3");
|
|
42
5
|
const index_core_1 = require("../index-core");
|
|
43
|
-
const createAgentVariantsOrchestrator_1 = require("../services/createAgentVariantsOrchestrator");
|
|
44
|
-
const MCPOnboardingTelemetry_1 = require("../services/MCPOnboardingTelemetry");
|
|
45
|
-
const elementFileHintSignals_1 = require("../utils/elementFileHintSignals");
|
|
46
|
-
const contracts_1 = require("../mcp/agent-variants/contracts");
|
|
47
|
-
const changeBatchClassification_1 = require("../mcp/changeBatchClassification");
|
|
48
|
-
const queueAccess_1 = require("../utils/queueAccess");
|
|
49
|
-
const variantSessionStart_1 = require("../utils/variantSessionStart");
|
|
50
6
|
const portUtils_1 = require("../utils/portUtils");
|
|
51
7
|
const log = (0, index_core_1.createLogger)('MCPRoutes');
|
|
52
|
-
const MAX_FILE_MATCHES_PER_ELEMENT = 6;
|
|
53
|
-
const elementRefSchema = v3_1.z.object({
|
|
54
|
-
xpath: v3_1.z.string(),
|
|
55
|
-
tagName: v3_1.z.string(),
|
|
56
|
-
className: v3_1.z.string(),
|
|
57
|
-
id: v3_1.z.string(),
|
|
58
|
-
filePaths: v3_1.z.array(v3_1.z.string()),
|
|
59
|
-
rivetId: v3_1.z.string().optional(),
|
|
60
|
-
textContent: v3_1.z.string().optional(),
|
|
61
|
-
attributes: v3_1.z.record(v3_1.z.string()).optional(),
|
|
62
|
-
componentTree: v3_1.z
|
|
63
|
-
.array(v3_1.z.object({
|
|
64
|
-
name: v3_1.z.string(),
|
|
65
|
-
type: v3_1.z.string().optional(),
|
|
66
|
-
depth: v3_1.z.number().optional(),
|
|
67
|
-
}))
|
|
68
|
-
.optional(),
|
|
69
|
-
parentElementSummary: v3_1.z
|
|
70
|
-
.object({
|
|
71
|
-
tagName: v3_1.z.string(),
|
|
72
|
-
className: v3_1.z.string(),
|
|
73
|
-
textSnippet: v3_1.z.string(),
|
|
74
|
-
})
|
|
75
|
-
.optional(),
|
|
76
|
-
});
|
|
77
|
-
const variantRequestSchema = v3_1.z.object({
|
|
78
|
-
count: v3_1.z.number().int().min(contracts_1.VARIANT_COUNT_MIN).max(contracts_1.VARIANT_COUNT_MAX),
|
|
79
|
-
});
|
|
80
|
-
const styleChangeItemSchema = v3_1.z.object({
|
|
81
|
-
kind: v3_1.z.literal('style'),
|
|
82
|
-
element: elementRefSchema,
|
|
83
|
-
property: v3_1.z.string(),
|
|
84
|
-
from: v3_1.z.string(),
|
|
85
|
-
to: v3_1.z.string(),
|
|
86
|
-
});
|
|
87
|
-
const textChangeItemSchema = v3_1.z.object({
|
|
88
|
-
kind: v3_1.z.literal('text'),
|
|
89
|
-
element: elementRefSchema,
|
|
90
|
-
from: v3_1.z.string(),
|
|
91
|
-
to: v3_1.z.string(),
|
|
92
|
-
});
|
|
93
|
-
const commentReferenceItemSchema = v3_1.z.object({
|
|
94
|
-
sessionId: v3_1.z.string().min(1),
|
|
95
|
-
variantId: v3_1.z.string().min(1),
|
|
96
|
-
label: v3_1.z.string().min(1),
|
|
97
|
-
origin: v3_1.z.enum(['live', 'history']),
|
|
98
|
-
});
|
|
99
|
-
const changeRequestTargetSchema = v3_1.z
|
|
100
|
-
.object({
|
|
101
|
-
kind: v3_1.z.literal('variant'),
|
|
102
|
-
sessionId: v3_1.z.string().min(1),
|
|
103
|
-
variantId: v3_1.z.string().min(1),
|
|
104
|
-
})
|
|
105
|
-
.optional();
|
|
106
|
-
const staticPreviewTargetSchema = v3_1.z
|
|
107
|
-
.object({
|
|
108
|
-
kind: v3_1.z.literal('static_preview'),
|
|
109
|
-
sessionId: v3_1.z.string().min(1),
|
|
110
|
-
variantId: v3_1.z.string().min(1),
|
|
111
|
-
})
|
|
112
|
-
.optional();
|
|
113
|
-
// Per-item payload caps for attached reference images (base64 data URLs).
|
|
114
|
-
// Bounds a single request's memory footprint so the unauthenticated queue
|
|
115
|
-
// endpoint can't be used to push arbitrarily large bodies through to the
|
|
116
|
-
// in-memory queue. ~6MB decoded per image (base64 ≈ 4/3 of bytes) × 8.
|
|
117
|
-
const MAX_COMMENT_IMAGES = 8;
|
|
118
|
-
const MAX_IMAGE_DATA_URL_CHARS = 8_000_000;
|
|
119
|
-
const imagesSchema = v3_1.z
|
|
120
|
-
.array(v3_1.z.string().max(MAX_IMAGE_DATA_URL_CHARS))
|
|
121
|
-
.max(MAX_COMMENT_IMAGES)
|
|
122
|
-
.optional();
|
|
123
|
-
const commentChangeItemSchema = v3_1.z.object({
|
|
124
|
-
kind: v3_1.z.literal('comment'),
|
|
125
|
-
element: elementRefSchema,
|
|
126
|
-
elements: v3_1.z.array(elementRefSchema).optional(),
|
|
127
|
-
target: changeRequestTargetSchema,
|
|
128
|
-
staticPreviewTarget: staticPreviewTargetSchema,
|
|
129
|
-
instruction: v3_1.z.string(),
|
|
130
|
-
images: imagesSchema,
|
|
131
|
-
references: v3_1.z.array(commentReferenceItemSchema).max(8).optional(),
|
|
132
|
-
variantRequest: variantRequestSchema.optional(),
|
|
133
|
-
});
|
|
134
|
-
const chatChangeItemSchema = v3_1.z.object({
|
|
135
|
-
kind: v3_1.z.literal('chat'),
|
|
136
|
-
instruction: v3_1.z.string(),
|
|
137
|
-
images: imagesSchema,
|
|
138
|
-
});
|
|
139
|
-
const variantChangeItemSchema = v3_1.z
|
|
140
|
-
.object({ kind: v3_1.z.literal('variant') })
|
|
141
|
-
.passthrough();
|
|
142
|
-
const changeItemSchema = v3_1.z.discriminatedUnion('kind', [
|
|
143
|
-
styleChangeItemSchema,
|
|
144
|
-
textChangeItemSchema,
|
|
145
|
-
commentChangeItemSchema,
|
|
146
|
-
chatChangeItemSchema,
|
|
147
|
-
variantChangeItemSchema,
|
|
148
|
-
]);
|
|
149
|
-
const telemetryContextSchema = v3_1.z
|
|
150
|
-
.object({
|
|
151
|
-
browserSessionId: v3_1.z.string().optional(),
|
|
152
|
-
browserDistinctId: v3_1.z.string().optional(),
|
|
153
|
-
})
|
|
154
|
-
.optional();
|
|
155
|
-
const changeRequestSchema = v3_1.z.object({
|
|
156
|
-
changes: v3_1.z.array(changeItemSchema).min(1),
|
|
157
|
-
sourceFiles: v3_1.z.array(v3_1.z.string()).optional(),
|
|
158
|
-
target: changeRequestTargetSchema,
|
|
159
|
-
telemetryContext: telemetryContextSchema,
|
|
160
|
-
traceId: v3_1.z.string().optional(),
|
|
161
|
-
agentRunId: v3_1.z.string().optional(),
|
|
162
|
-
});
|
|
163
|
-
const variantRequestModeFor = (args) => {
|
|
164
|
-
if (args.hasTarget)
|
|
165
|
-
return 'vary';
|
|
166
|
-
if (args.hasStaticPreviewRefine)
|
|
167
|
-
return 'comment_refine';
|
|
168
|
-
return 'initial_generation';
|
|
169
|
-
};
|
|
170
|
-
const variantRequestTelemetryFor = (args) => {
|
|
171
|
-
const comments = args.changes.filter((item) => item.kind === 'comment');
|
|
172
|
-
const imageCount = comments.reduce((sum, item) => sum + (item.images?.length ?? 0), 0);
|
|
173
|
-
const instructionLength = args.changes.reduce((sum, item) => {
|
|
174
|
-
if ('instruction' in item && typeof item.instruction === 'string') {
|
|
175
|
-
return sum + item.instruction.length;
|
|
176
|
-
}
|
|
177
|
-
return sum;
|
|
178
|
-
}, 0);
|
|
179
|
-
return {
|
|
180
|
-
sessionId: args.sessionId,
|
|
181
|
-
requestId: args.agentRunId ?? args.traceId,
|
|
182
|
-
traceId: args.traceId,
|
|
183
|
-
agentRunId: args.agentRunId,
|
|
184
|
-
entryPoint: 'visual_editor_comment',
|
|
185
|
-
mode: variantRequestModeFor(args),
|
|
186
|
-
targetVariantId: args.targetVariantId,
|
|
187
|
-
sourceVariantId: args.hasTarget ? args.targetVariantId : undefined,
|
|
188
|
-
requestedCount: args.requestedCount,
|
|
189
|
-
commentCount: comments.length,
|
|
190
|
-
imageCount,
|
|
191
|
-
instructionLength,
|
|
192
|
-
sourceFileCount: args.sourceFileCount,
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
/**
|
|
196
|
-
* Enrich elements that have empty filePaths by running a server-side
|
|
197
|
-
* component search against the project source files.
|
|
198
|
-
* Mutates the ChangeRequest in place: updates per-element filePaths
|
|
199
|
-
* and rebuilds the top-level sourceFiles list.
|
|
200
|
-
*/
|
|
201
|
-
async function enrichChangeRequest(request, projectPath) {
|
|
202
|
-
// Collect unique ElementRefs that need enrichment
|
|
203
|
-
const refsToEnrich = [];
|
|
204
|
-
for (const item of request.changes) {
|
|
205
|
-
if ('element' in item && item.element.filePaths.length === 0) {
|
|
206
|
-
if ((0, elementFileHintSignals_1.shouldSearchElementFileHints)(item.element)) {
|
|
207
|
-
refsToEnrich.push(item.element);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
if ('elements' in item && item.elements) {
|
|
211
|
-
for (const el of item.elements) {
|
|
212
|
-
if (el.filePaths.length === 0 && (0, elementFileHintSignals_1.shouldSearchElementFileHints)(el)) {
|
|
213
|
-
refsToEnrich.push(el);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (refsToEnrich.length === 0)
|
|
219
|
-
return;
|
|
220
|
-
log.info(`Enriching ${refsToEnrich.length} element(s) with missing filePaths`);
|
|
221
|
-
const searchService = new index_core_1.ComponentSearchService();
|
|
222
|
-
await Promise.all(refsToEnrich.map(async (ref) => {
|
|
223
|
-
try {
|
|
224
|
-
const matches = await searchService.findMatchingComponents(projectPath, ref);
|
|
225
|
-
if (matches.length > 0) {
|
|
226
|
-
ref.filePaths = matches
|
|
227
|
-
.slice(0, MAX_FILE_MATCHES_PER_ELEMENT)
|
|
228
|
-
.map((m) => m.filePath);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (err) {
|
|
232
|
-
log.warn(`Component search failed for <${ref.tagName}>: ${err instanceof Error ? err.message : err}`);
|
|
233
|
-
}
|
|
234
|
-
}));
|
|
235
|
-
// Rebuild sourceFiles from all elements
|
|
236
|
-
const sourceFileSet = new Set(request.sourceFiles);
|
|
237
|
-
for (const item of request.changes) {
|
|
238
|
-
if ('element' in item) {
|
|
239
|
-
for (const fp of item.element.filePaths) {
|
|
240
|
-
sourceFileSet.add(fp);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
request.sourceFiles = Array.from(sourceFileSet);
|
|
245
|
-
log.info(`Enrichment complete: sourceFiles now has ${request.sourceFiles.length} entries`);
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Resolve one attached variant reference into a readable directory the agent
|
|
249
|
-
* can point its Read/Grep tools at. Returns `null` when the reference can't
|
|
250
|
-
* be served (no orchestrator, no worktree, no persisted history snapshot) —
|
|
251
|
-
* the intake drops null entries instead of failing the whole batch so a stale
|
|
252
|
-
* reference left over from a prior session never breaks an unrelated comment.
|
|
253
|
-
*
|
|
254
|
-
* The "brief" is read opportunistically from the persisted manifest under
|
|
255
|
-
* `.rivet/variants/<sid>/<vid>/manifest.json`. Live variants without history
|
|
256
|
-
* yet just carry their label.
|
|
257
|
-
*/
|
|
258
|
-
function resolveCommentReference(ref, orchestrator, projectPath) {
|
|
259
|
-
const readBriefFromManifest = (manifestDir) => {
|
|
260
|
-
try {
|
|
261
|
-
const manifestPath = path.join(manifestDir, 'manifest.json');
|
|
262
|
-
if (!fs.existsSync(manifestPath))
|
|
263
|
-
return undefined;
|
|
264
|
-
const raw = fs.readFileSync(manifestPath, 'utf8');
|
|
265
|
-
const parsed = JSON.parse(raw);
|
|
266
|
-
return typeof parsed.brief === 'string' ? parsed.brief : undefined;
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
return undefined;
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
// Try the in-memory context first; fall back to the current bridge project
|
|
273
|
-
// for existing-project sessions and for live sessions whose context already
|
|
274
|
-
// drained from memory.
|
|
275
|
-
const candidateRoots = [];
|
|
276
|
-
try {
|
|
277
|
-
const ctx = orchestrator?.getProjectContext(ref.sessionId);
|
|
278
|
-
if (ctx?.kind === 'fresh') {
|
|
279
|
-
candidateRoots.push(ctx.workspacePath);
|
|
280
|
-
candidateRoots.push(ctx.workspaceRoot);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
// Unknown session — orchestrator doesn't carry it any more. The bridge
|
|
285
|
-
// project root is the only viable fallback below.
|
|
286
|
-
}
|
|
287
|
-
if (projectPath)
|
|
288
|
-
candidateRoots.push(projectPath);
|
|
289
|
-
if (ref.origin === 'live') {
|
|
290
|
-
const worktreePath = orchestrator?.getWorktreePath(ref.sessionId, ref.variantId);
|
|
291
|
-
if (worktreePath) {
|
|
292
|
-
const brief = candidateRoots
|
|
293
|
-
.map((root) => readBriefFromManifest(path.join(root, '.rivet', 'variants', ref.sessionId, ref.variantId)))
|
|
294
|
-
.find((b) => Boolean(b));
|
|
295
|
-
return {
|
|
296
|
-
sessionId: ref.sessionId,
|
|
297
|
-
variantId: ref.variantId,
|
|
298
|
-
label: ref.label,
|
|
299
|
-
brief,
|
|
300
|
-
path: worktreePath,
|
|
301
|
-
origin: 'live',
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
// Live worktree torn down — fall through and try history as a last resort.
|
|
305
|
-
}
|
|
306
|
-
for (const root of candidateRoots) {
|
|
307
|
-
const variantDir = path.join(root, '.rivet', 'variants', ref.sessionId, ref.variantId);
|
|
308
|
-
const filesDir = path.join(variantDir, 'files');
|
|
309
|
-
if (!fs.existsSync(filesDir))
|
|
310
|
-
continue;
|
|
311
|
-
return {
|
|
312
|
-
sessionId: ref.sessionId,
|
|
313
|
-
variantId: ref.variantId,
|
|
314
|
-
label: ref.label,
|
|
315
|
-
brief: readBriefFromManifest(variantDir),
|
|
316
|
-
path: filesDir,
|
|
317
|
-
origin: ref.origin,
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
return null;
|
|
321
|
-
}
|
|
322
8
|
/**
|
|
323
|
-
* Creates
|
|
324
|
-
* The UI POSTs a ChangeRequest here; the MCP server reads it via SessionBridgeService.
|
|
325
|
-
*
|
|
326
|
-
* `agentVariantsOrchestrator` is optional so existing callers (tests, hosted
|
|
327
|
-
* demos) can mount the router without wiring the variants flow. When it IS
|
|
328
|
-
* provided, the intake rejects new variant-request batches while a variants
|
|
329
|
-
* session is already active for the current project.
|
|
9
|
+
* Creates the remaining MCP-status routes used by the passive viewer.
|
|
330
10
|
*/
|
|
331
|
-
const createMCPRouter = (bridge,
|
|
11
|
+
const createMCPRouter = (bridge, ..._unused) => {
|
|
332
12
|
const router = (0, express_1.Router)();
|
|
333
|
-
|
|
334
|
-
// PostHog $session_id to link to a session replay. The bridge already holds it
|
|
335
|
-
// (reported via change-request telemetryContext); this wrapper injects it.
|
|
336
|
-
const variantsTelemetry = telemetry
|
|
337
|
-
? (0, createAgentVariantsOrchestrator_1.withVariantsSessionReplayLinking)(telemetry, bridge)
|
|
338
|
-
: undefined;
|
|
339
|
-
/**
|
|
340
|
-
* Queue a ChangeRequest from the Rivet UI for retrieval by the MCP client.
|
|
341
|
-
* Called when the user clicks "Send to Claude Code" in MCP mode.
|
|
342
|
-
*/
|
|
343
|
-
router.post('/queue-changes', async (req, res) => {
|
|
344
|
-
if (!bridge.isActive()) {
|
|
345
|
-
res.status(400).json({ error: 'No active MCP session' });
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
if (!(0, queueAccess_1.isQueueAccessAuthorized)({
|
|
349
|
-
queueAccessToken: options.queueAccessToken,
|
|
350
|
-
getHeader: (name) => req.header(name),
|
|
351
|
-
})) {
|
|
352
|
-
res.status(403).json({
|
|
353
|
-
error: 'Queue access denied',
|
|
354
|
-
reason: 'queue_token_required',
|
|
355
|
-
});
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
const parsed = changeRequestSchema.safeParse(req.body);
|
|
359
|
-
if (!parsed.success) {
|
|
360
|
-
res.status(400).json({
|
|
361
|
-
error: 'Invalid change request payload',
|
|
362
|
-
details: parsed.error.flatten(),
|
|
363
|
-
});
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
const body = parsed.data;
|
|
367
|
-
const batchForClassification = {
|
|
368
|
-
changes: body.changes,
|
|
369
|
-
sourceFiles: body.sourceFiles || [],
|
|
370
|
-
};
|
|
371
|
-
const isMixedVariantRequestBatch = (0, changeBatchClassification_1.isMixedVariantBatch)(batchForClassification);
|
|
372
|
-
const isVariantRequestBatch = (0, changeBatchClassification_1.isSingleVariantRequestBatch)(batchForClassification);
|
|
373
|
-
const requestedVariantCount = isVariantRequestBatch &&
|
|
374
|
-
batchForClassification.changes[0]?.kind === 'comment'
|
|
375
|
-
? batchForClassification.changes[0].variantRequest?.count
|
|
376
|
-
: undefined;
|
|
377
|
-
let variantRequestTelemetry;
|
|
378
|
-
if (isMixedVariantRequestBatch) {
|
|
379
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
380
|
-
sessionId: bridge.getSessionId() ?? undefined,
|
|
381
|
-
requestId: body.agentRunId ?? body.traceId,
|
|
382
|
-
traceId: body.traceId,
|
|
383
|
-
agentRunId: body.agentRunId,
|
|
384
|
-
entryPoint: 'visual_editor_comment',
|
|
385
|
-
mode: 'unknown',
|
|
386
|
-
commentCount: body.changes.filter((item) => item.kind === 'comment')
|
|
387
|
-
.length,
|
|
388
|
-
failureReason: 'schema_validation_failed',
|
|
389
|
-
});
|
|
390
|
-
res.status(400).json({
|
|
391
|
-
error: 'Mixed batch rejected',
|
|
392
|
-
details: 'A comment with `variantRequest` must be submitted as a single-item batch.',
|
|
393
|
-
reason: 'mixed_batch',
|
|
394
|
-
});
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
if (isVariantRequestBatch) {
|
|
398
|
-
const activeVariantsSession = agentVariantsOrchestrator?.buildActiveSnapshot();
|
|
399
|
-
// A targeted variant request can carry its target at the batch level
|
|
400
|
-
// (body.target) OR only on the comment item — treat either as "targeted"
|
|
401
|
-
// so a comment-only target isn't mistaken for a brand-new run.
|
|
402
|
-
const commentItem = body.changes.find((c) => c.kind === 'comment');
|
|
403
|
-
const effectiveTarget = body.target ??
|
|
404
|
-
(commentItem && 'target' in commentItem
|
|
405
|
-
? commentItem.target
|
|
406
|
-
: undefined);
|
|
407
|
-
variantRequestTelemetry = variantRequestTelemetryFor({
|
|
408
|
-
sessionId: bridge.getSessionId() ?? undefined,
|
|
409
|
-
changes: batchForClassification.changes,
|
|
410
|
-
sourceFileCount: body.sourceFiles?.length ?? 0,
|
|
411
|
-
traceId: body.traceId,
|
|
412
|
-
agentRunId: body.agentRunId,
|
|
413
|
-
requestedCount: requestedVariantCount,
|
|
414
|
-
hasTarget: Boolean(effectiveTarget),
|
|
415
|
-
hasStaticPreviewRefine: false,
|
|
416
|
-
targetVariantId: effectiveTarget?.kind === 'variant'
|
|
417
|
-
? effectiveTarget.variantId
|
|
418
|
-
: undefined,
|
|
419
|
-
});
|
|
420
|
-
variantsTelemetry?.trackAgentVariantsRequestStarted?.(variantRequestTelemetry);
|
|
421
|
-
// A variant request that targets an existing variant ATTACHES to the
|
|
422
|
-
// active session as a new concurrent run (it fans out fresh siblings into
|
|
423
|
-
// the same session), so it is always allowed — this is what lets several
|
|
424
|
-
// "Vary" runs generate side by side.
|
|
425
|
-
//
|
|
426
|
-
// But the target must point at the CURRENTLY active session: a stale or
|
|
427
|
-
// mismatched target would otherwise apply work (e.g. via
|
|
428
|
-
// beginStaticPreviewRefinements) against a different session than the one
|
|
429
|
-
// the UI treats as active.
|
|
430
|
-
if (effectiveTarget &&
|
|
431
|
-
activeVariantsSession?.active === true &&
|
|
432
|
-
effectiveTarget.sessionId !== activeVariantsSession.sessionId) {
|
|
433
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
434
|
-
...variantRequestTelemetry,
|
|
435
|
-
failureReason: 'target_not_editable',
|
|
436
|
-
});
|
|
437
|
-
res.status(400).json({
|
|
438
|
-
error: 'Stale variant target',
|
|
439
|
-
details: 'The targeted variants session is not the active one. Refresh the editor and retry.',
|
|
440
|
-
reason: 'stale_target',
|
|
441
|
-
});
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
// Only a brand-new, targetless variant run is blocked while a session is
|
|
445
|
-
// still mid-flight, since that would overwrite the single active session.
|
|
446
|
-
if (!effectiveTarget &&
|
|
447
|
-
(0, variantSessionStart_1.isVariantSessionStartBlocked)(activeVariantsSession)) {
|
|
448
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
449
|
-
...variantRequestTelemetry,
|
|
450
|
-
failureReason: 'active_session',
|
|
451
|
-
});
|
|
452
|
-
res.status(400).json({
|
|
453
|
-
error: 'Variants session already active',
|
|
454
|
-
details: 'Finish or cancel the running variants session before submitting another variant request.',
|
|
455
|
-
reason: 'active_session',
|
|
456
|
-
});
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
const changes = body.changes;
|
|
461
|
-
// Resolve a variant-targeted batch to either an editable worktree or an
|
|
462
|
-
// HTML-only static preview refinement target.
|
|
463
|
-
let resolvedWorktreePath;
|
|
464
|
-
let staticPreviewTarget;
|
|
465
|
-
if (body.target) {
|
|
466
|
-
const target = body.target;
|
|
467
|
-
const worktreePath = agentVariantsOrchestrator?.getWorktreePath(target.sessionId, target.variantId);
|
|
468
|
-
if (worktreePath) {
|
|
469
|
-
resolvedWorktreePath = worktreePath;
|
|
470
|
-
}
|
|
471
|
-
else if (agentVariantsOrchestrator?.getStaticPreviewHtml(target.sessionId, target.variantId)) {
|
|
472
|
-
const variantPick = agentVariantsOrchestrator?.getVariantPick?.(target.sessionId);
|
|
473
|
-
if (variantPick) {
|
|
474
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
475
|
-
...variantRequestTelemetry,
|
|
476
|
-
sessionId: target.sessionId,
|
|
477
|
-
targetVariantId: target.variantId,
|
|
478
|
-
failureReason: 'pending_change_conflict',
|
|
479
|
-
});
|
|
480
|
-
res.status(409).json({
|
|
481
|
-
error: 'Static preview variant already sent',
|
|
482
|
-
details: 'This static preview has already been sent. Start a new variants session before sending another comment.',
|
|
483
|
-
reason: 'variant_already_sent',
|
|
484
|
-
});
|
|
485
|
-
return;
|
|
486
|
-
}
|
|
487
|
-
const hasOnlyComments = changes.every((change) => change.kind === 'comment');
|
|
488
|
-
if (!hasOnlyComments) {
|
|
489
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
490
|
-
...variantRequestTelemetry,
|
|
491
|
-
sessionId: target.sessionId,
|
|
492
|
-
targetVariantId: target.variantId,
|
|
493
|
-
failureReason: 'schema_validation_failed',
|
|
494
|
-
});
|
|
495
|
-
res.status(400).json({
|
|
496
|
-
error: 'Static preview edits require comments',
|
|
497
|
-
details: 'Static preview refinements must be sent as comment instructions.',
|
|
498
|
-
reason: 'static_preview_comment_required',
|
|
499
|
-
});
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
staticPreviewTarget = {
|
|
503
|
-
kind: 'static_preview',
|
|
504
|
-
sessionId: target.sessionId,
|
|
505
|
-
variantId: target.variantId,
|
|
506
|
-
};
|
|
507
|
-
}
|
|
508
|
-
else {
|
|
509
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
510
|
-
...variantRequestTelemetry,
|
|
511
|
-
sessionId: target.sessionId,
|
|
512
|
-
targetVariantId: target.variantId,
|
|
513
|
-
failureReason: 'target_not_editable',
|
|
514
|
-
});
|
|
515
|
-
res.status(400).json({
|
|
516
|
-
error: 'Variant is not editable',
|
|
517
|
-
details: 'The targeted variant has no settled worktree or static preview (it may still be generating, or its session ended). Edits can only be applied to a ready variant.',
|
|
518
|
-
reason: 'variant_not_editable',
|
|
519
|
-
});
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
for (const item of changes) {
|
|
524
|
-
if (item.kind !== 'comment')
|
|
525
|
-
continue;
|
|
526
|
-
const itemTarget = item.target;
|
|
527
|
-
if (!itemTarget) {
|
|
528
|
-
// Never trust a client-supplied static-preview target: it's only valid
|
|
529
|
-
// when resolved from a variant `target` we can verify still has HTML.
|
|
530
|
-
// Without a target there's nothing to verify, so drop it — otherwise a
|
|
531
|
-
// forged `staticPreviewTarget` could route the batch into static
|
|
532
|
-
// refinement for a variant that was never confirmed to have a preview.
|
|
533
|
-
item.staticPreviewTarget = undefined;
|
|
534
|
-
continue;
|
|
535
|
-
}
|
|
536
|
-
const itemMatchesBatchTarget = body.target &&
|
|
537
|
-
itemTarget.sessionId === body.target.sessionId &&
|
|
538
|
-
itemTarget.variantId === body.target.variantId;
|
|
539
|
-
const worktreePath = agentVariantsOrchestrator?.getWorktreePath(itemTarget.sessionId, itemTarget.variantId);
|
|
540
|
-
if (worktreePath) {
|
|
541
|
-
if (itemMatchesBatchTarget) {
|
|
542
|
-
item.staticPreviewTarget = undefined;
|
|
543
|
-
continue;
|
|
544
|
-
}
|
|
545
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
546
|
-
...variantRequestTelemetry,
|
|
547
|
-
sessionId: itemTarget.sessionId,
|
|
548
|
-
targetVariantId: itemTarget.variantId,
|
|
549
|
-
failureReason: 'schema_validation_failed',
|
|
550
|
-
});
|
|
551
|
-
res.status(400).json({
|
|
552
|
-
error: 'Variant target must be sent as a batch target',
|
|
553
|
-
details: 'Per-comment targets are only supported for static preview variants. Worktree-backed variants must be sent as a single-target batch.',
|
|
554
|
-
reason: 'mixed_target',
|
|
555
|
-
});
|
|
556
|
-
return;
|
|
557
|
-
}
|
|
558
|
-
if (agentVariantsOrchestrator?.getStaticPreviewHtml(itemTarget.sessionId, itemTarget.variantId)) {
|
|
559
|
-
const variantPick = agentVariantsOrchestrator?.getVariantPick?.(itemTarget.sessionId);
|
|
560
|
-
if (variantPick) {
|
|
561
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
562
|
-
...variantRequestTelemetry,
|
|
563
|
-
sessionId: itemTarget.sessionId,
|
|
564
|
-
targetVariantId: itemTarget.variantId,
|
|
565
|
-
failureReason: 'pending_change_conflict',
|
|
566
|
-
});
|
|
567
|
-
res.status(409).json({
|
|
568
|
-
error: 'Static preview variant already sent',
|
|
569
|
-
details: 'This static preview has already been sent. Start a new variants session before sending another comment.',
|
|
570
|
-
reason: 'variant_already_sent',
|
|
571
|
-
});
|
|
572
|
-
return;
|
|
573
|
-
}
|
|
574
|
-
item.staticPreviewTarget = {
|
|
575
|
-
kind: 'static_preview',
|
|
576
|
-
sessionId: itemTarget.sessionId,
|
|
577
|
-
variantId: itemTarget.variantId,
|
|
578
|
-
};
|
|
579
|
-
continue;
|
|
580
|
-
}
|
|
581
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
582
|
-
...variantRequestTelemetry,
|
|
583
|
-
sessionId: itemTarget.sessionId,
|
|
584
|
-
targetVariantId: itemTarget.variantId,
|
|
585
|
-
failureReason: 'target_not_editable',
|
|
586
|
-
});
|
|
587
|
-
res.status(400).json({
|
|
588
|
-
error: 'Variant is not editable',
|
|
589
|
-
details: 'The targeted variant has no settled worktree or static preview (it may still be generating, or its session ended). Edits can only be applied to a ready variant.',
|
|
590
|
-
reason: 'variant_not_editable',
|
|
591
|
-
});
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
const request = {
|
|
595
|
-
changes,
|
|
596
|
-
sourceFiles: body.sourceFiles || [],
|
|
597
|
-
target: body.target,
|
|
598
|
-
worktreePath: resolvedWorktreePath,
|
|
599
|
-
staticPreviewTarget,
|
|
600
|
-
telemetryContext: body.telemetryContext,
|
|
601
|
-
traceId: body.traceId || (0, crypto_1.randomUUID)(),
|
|
602
|
-
agentRunId: body.agentRunId || (0, crypto_1.randomUUID)(),
|
|
603
|
-
};
|
|
604
|
-
// Enrich elements missing filePaths before queueing. For a variant batch,
|
|
605
|
-
// search the variant's worktree (its sources may diverge from the base
|
|
606
|
-
// project); otherwise search the base project.
|
|
607
|
-
const hasStaticPreviewItems = request.changes.some((item) => item.kind === 'comment' && Boolean(item.staticPreviewTarget));
|
|
608
|
-
const enrichRoot = staticPreviewTarget || hasStaticPreviewItems
|
|
609
|
-
? undefined
|
|
610
|
-
: (resolvedWorktreePath ?? bridge.getProjectPath());
|
|
611
|
-
if (enrichRoot) {
|
|
612
|
-
try {
|
|
613
|
-
await enrichChangeRequest(request, enrichRoot);
|
|
614
|
-
}
|
|
615
|
-
catch (err) {
|
|
616
|
-
log.warn(`Element enrichment failed, queueing without enrichment: ${err instanceof Error ? err.message : err}`);
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
// Resolve attached variant references on every comment item. Each
|
|
620
|
-
// reference becomes a `{ label, brief, path }` pointer the agent will
|
|
621
|
-
// read with its existing file tools — we do NOT inline file content here
|
|
622
|
-
// so the prompt stays small and the agent decides what to read. Drop
|
|
623
|
-
// unresolvable references and log them rather than failing the batch.
|
|
624
|
-
const bridgeProjectPath = bridge.getProjectPath();
|
|
625
|
-
for (const item of request.changes) {
|
|
626
|
-
if (item.kind !== 'comment' || !item.references?.length)
|
|
627
|
-
continue;
|
|
628
|
-
const resolved = [];
|
|
629
|
-
for (const ref of item.references) {
|
|
630
|
-
const r = resolveCommentReference(ref, agentVariantsOrchestrator, bridgeProjectPath);
|
|
631
|
-
if (r) {
|
|
632
|
-
resolved.push(r);
|
|
633
|
-
}
|
|
634
|
-
else {
|
|
635
|
-
log.warn(`Dropping unresolvable variant reference ${ref.sessionId}:${ref.variantId} (${ref.origin}) on comment`);
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
item.resolvedReferences = resolved.length > 0 ? resolved : undefined;
|
|
639
|
-
}
|
|
640
|
-
const queueResult = bridge.queueChangeRequest(request);
|
|
641
|
-
if (!queueResult.accepted) {
|
|
642
|
-
if (queueResult.reason === 'variant_request_too_large') {
|
|
643
|
-
variantsTelemetry?.trackAgentVariantsRequestRejected?.({
|
|
644
|
-
...variantRequestTelemetry,
|
|
645
|
-
requestId: request.agentRunId ?? request.traceId,
|
|
646
|
-
traceId: request.traceId,
|
|
647
|
-
agentRunId: request.agentRunId,
|
|
648
|
-
failureReason: 'runtime_validation_failed',
|
|
649
|
-
});
|
|
650
|
-
res.status(413).json({
|
|
651
|
-
error: 'Variant request too large',
|
|
652
|
-
details: 'This change batch exceeds the per-request size limit. ' +
|
|
653
|
-
'Trim the instruction or attachments and retry.',
|
|
654
|
-
reason: queueResult.reason,
|
|
655
|
-
});
|
|
656
|
-
return;
|
|
657
|
-
}
|
|
658
|
-
if (queueResult.reason === 'apply_batch_too_large') {
|
|
659
|
-
res.status(413).json({
|
|
660
|
-
error: 'Apply batch too large',
|
|
661
|
-
details: 'This change batch exceeds the per-request size limit. ' +
|
|
662
|
-
'Trim the instruction or attachments and retry.',
|
|
663
|
-
reason: queueResult.reason,
|
|
664
|
-
});
|
|
665
|
-
return;
|
|
666
|
-
}
|
|
667
|
-
if (queueResult.reason === 'apply_queue_full') {
|
|
668
|
-
if (telemetry && bridge.getSessionId()) {
|
|
669
|
-
telemetry.trackMCPBatchQueueFull({
|
|
670
|
-
channel: 'apply',
|
|
671
|
-
queuedDepth: bridge.getChannelDepth('apply').queued,
|
|
672
|
-
sessionId: bridge.getSessionId(),
|
|
673
|
-
});
|
|
674
|
-
}
|
|
675
|
-
res.status(429).json({
|
|
676
|
-
error: 'Apply queue is full',
|
|
677
|
-
details: 'Too many apply batches are already queued for this session. ' +
|
|
678
|
-
'Wait for the agent to finish in-flight work before sending more.',
|
|
679
|
-
reason: queueResult.reason,
|
|
680
|
-
});
|
|
681
|
-
return;
|
|
682
|
-
}
|
|
683
|
-
if (queueResult.reason === 'variant_queue_full' &&
|
|
684
|
-
telemetry &&
|
|
685
|
-
bridge.getSessionId()) {
|
|
686
|
-
telemetry.trackMCPBatchQueueFull({
|
|
687
|
-
channel: 'variant',
|
|
688
|
-
queuedDepth: bridge.getChannelDepth('variant').queued,
|
|
689
|
-
sessionId: bridge.getSessionId(),
|
|
690
|
-
});
|
|
691
|
-
telemetry.trackAgentVariantsRequestRejected?.({
|
|
692
|
-
...variantRequestTelemetry,
|
|
693
|
-
requestId: request.agentRunId ?? request.traceId,
|
|
694
|
-
traceId: request.traceId,
|
|
695
|
-
agentRunId: request.agentRunId,
|
|
696
|
-
failureReason: 'queue_full',
|
|
697
|
-
});
|
|
698
|
-
}
|
|
699
|
-
res.status(429).json({
|
|
700
|
-
error: 'Variant request queue is full',
|
|
701
|
-
details: 'Too many variant requests are already queued for this session. ' +
|
|
702
|
-
'Wait for in-flight generations to complete before sending more.',
|
|
703
|
-
reason: queueResult.reason,
|
|
704
|
-
});
|
|
705
|
-
return;
|
|
706
|
-
}
|
|
707
|
-
const styleCt = request.changes.filter((c) => c.kind === 'style').length;
|
|
708
|
-
const textCt = request.changes.filter((c) => c.kind === 'text').length;
|
|
709
|
-
const commentCt = request.changes.filter((c) => c.kind === 'comment').length;
|
|
710
|
-
const chatCt = request.changes.filter((c) => c.kind === 'chat').length;
|
|
711
|
-
const nextRound = bridge.getRoundsCompleted() + 1;
|
|
712
|
-
log.info(`Change request queued: ${styleCt} style, ${textCt} text, ${commentCt} comment, ${chatCt} chat` +
|
|
713
|
-
(request.target
|
|
714
|
-
? ` → variant ${request.target.variantId} (${resolvedWorktreePath})`
|
|
715
|
-
: ''));
|
|
716
|
-
if (telemetry) {
|
|
717
|
-
const sessionId = bridge.getSessionId();
|
|
718
|
-
if (sessionId) {
|
|
719
|
-
telemetry.trackMCPConversationTurnSent((0, MCPOnboardingTelemetry_1.summarizeMCPConversationTurn)(request, nextRound, sessionId));
|
|
720
|
-
if (isVariantRequestBatch &&
|
|
721
|
-
typeof requestedVariantCount === 'number') {
|
|
722
|
-
// Variant-request batches never start an apply run, so the standard
|
|
723
|
-
// `mcp_changes_sent` / `changes_queued` / `agent_run_started` chain
|
|
724
|
-
// would be misleading. Emit a dedicated event instead.
|
|
725
|
-
telemetry.trackCommentVariantRequestReceived({
|
|
726
|
-
sessionId,
|
|
727
|
-
requestedCount: requestedVariantCount,
|
|
728
|
-
traceId: request.traceId,
|
|
729
|
-
agentRunId: request.agentRunId,
|
|
730
|
-
browserSessionId: request.telemetryContext?.browserSessionId,
|
|
731
|
-
browserDistinctId: request.telemetryContext?.browserDistinctId,
|
|
732
|
-
});
|
|
733
|
-
const acceptedTelemetry = {
|
|
734
|
-
...variantRequestTelemetryFor({
|
|
735
|
-
sessionId,
|
|
736
|
-
changes: request.changes,
|
|
737
|
-
sourceFileCount: request.sourceFiles.length,
|
|
738
|
-
traceId: request.traceId,
|
|
739
|
-
agentRunId: request.agentRunId,
|
|
740
|
-
requestedCount: requestedVariantCount,
|
|
741
|
-
hasTarget: Boolean(request.target),
|
|
742
|
-
hasStaticPreviewRefine: Boolean(request.staticPreviewTarget),
|
|
743
|
-
targetVariantId: request.target?.variantId ??
|
|
744
|
-
request.staticPreviewTarget?.variantId,
|
|
745
|
-
}),
|
|
746
|
-
acceptedCount: requestedVariantCount,
|
|
747
|
-
};
|
|
748
|
-
telemetry.trackAgentVariantsRequestAccepted?.(acceptedTelemetry);
|
|
749
|
-
if (request.target || request.staticPreviewTarget) {
|
|
750
|
-
const target = request.target ??
|
|
751
|
-
(request.staticPreviewTarget
|
|
752
|
-
? {
|
|
753
|
-
sessionId: request.staticPreviewTarget.sessionId,
|
|
754
|
-
variantId: request.staticPreviewTarget.variantId,
|
|
755
|
-
}
|
|
756
|
-
: undefined);
|
|
757
|
-
telemetry.trackAgentVariantsRefinementRequested?.({
|
|
758
|
-
...acceptedTelemetry,
|
|
759
|
-
sessionId: target?.sessionId ?? sessionId,
|
|
760
|
-
targetVariantId: target?.variantId,
|
|
761
|
-
});
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
else {
|
|
765
|
-
telemetry.trackMCPChangesSent({
|
|
766
|
-
sessionId,
|
|
767
|
-
styleChangeCount: styleCt,
|
|
768
|
-
textChangeCount: textCt,
|
|
769
|
-
commentCount: commentCt,
|
|
770
|
-
chatCount: chatCt,
|
|
771
|
-
round: nextRound,
|
|
772
|
-
traceId: request.traceId,
|
|
773
|
-
agentRunId: request.agentRunId,
|
|
774
|
-
browserSessionId: request.telemetryContext?.browserSessionId,
|
|
775
|
-
browserDistinctId: request.telemetryContext?.browserDistinctId,
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
telemetry.flush().catch((err) => {
|
|
779
|
-
log.warn('Telemetry flush after mcp_changes_sent failed:', err);
|
|
780
|
-
});
|
|
781
|
-
}
|
|
782
|
-
else {
|
|
783
|
-
log.warn('MCP telemetry skipped: no sessionId on bridge');
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
res.json({
|
|
787
|
-
queued: true,
|
|
788
|
-
traceId: request.traceId,
|
|
789
|
-
agentRunId: request.agentRunId,
|
|
790
|
-
...(isVariantRequestBatch ? { kind: 'variant_request' } : {}),
|
|
791
|
-
});
|
|
792
|
-
});
|
|
793
|
-
/** Check whether changes is pending (for UI status indicators) */
|
|
794
|
-
router.get('/status', async (req, res) => {
|
|
13
|
+
router.get('/status', async (_req, res) => {
|
|
795
14
|
const devServerHealth = bridge.getDevServerHealth();
|
|
796
15
|
const shouldProbeUpstream = bridge.isActive() &&
|
|
797
16
|
devServerHealth.host !== null &&
|
|
@@ -831,7 +50,7 @@ const createMCPRouter = (bridge, telemetry, agentVariantsOrchestrator, options =
|
|
|
831
50
|
roundsCompleted: bridge.getRoundsCompleted(),
|
|
832
51
|
apply: bridge.getChannelDepth('apply'),
|
|
833
52
|
variant: bridge.getChannelDepth('variant'),
|
|
834
|
-
feedback
|
|
53
|
+
feedback,
|
|
835
54
|
status: bridge.getStatus(),
|
|
836
55
|
devServerHealth: bridge.getDevServerHealth(),
|
|
837
56
|
});
|