UNPKG

@wonderwhy-er/desktop-commander

Version:

MCP server for terminal operations and file editing

63 lines (62 loc) 2.27 kB
import { configManager } from '../config-manager.js'; import { getABTestVariant } from './ab-test.js'; import { capture } from './capture.js'; import { featureFlagManager } from './feature-flags.js'; export const MCP_UI_EXPERIMENT_NAME = 'McpUiPreviews'; export const MCP_UI_SHOW_VARIANT = 'showMCPUi'; export const MCP_UI_HIDE_VARIANT = 'notShowMCPUi'; function variantEnablesMcpUi(variant) { if (variant === MCP_UI_HIDE_VARIANT) return false; if (variant === MCP_UI_SHOW_VARIANT) return true; return null; } export async function resolveMcpUiPreviewDecision(deps) { try { const existingAssignment = await deps.getExistingAssignment(); const existingDecision = variantEnablesMcpUi(existingAssignment); if (existingDecision !== null) { if (!deps.wasLoadedFromCache()) { await deps.waitForFreshFlags(); } const currentVariant = await deps.getABTestVariant(MCP_UI_EXPERIMENT_NAME); return variantEnablesMcpUi(currentVariant) ?? existingDecision; } if (!deps.isFirstRun()) { return true; } if (!deps.wasLoadedFromCache()) { await deps.waitForFreshFlags(); } const variant = await deps.getABTestVariant(MCP_UI_EXPERIMENT_NAME); const decision = variantEnablesMcpUi(variant); if (decision === null) { return true; } try { await deps.capture('server_mcp_ui_ab_decision', { experiment: MCP_UI_EXPERIMENT_NAME, variant, mcp_ui_enabled: decision, }); } catch { // Telemetry must not change the assigned product experience. } return decision; } catch { return true; } } export async function shouldShowMcpUiPreviews() { return resolveMcpUiPreviewDecision({ getExistingAssignment: () => configManager.getValue(`abTest_${MCP_UI_EXPERIMENT_NAME}`), isFirstRun: () => configManager.isFirstRun(), wasLoadedFromCache: () => featureFlagManager.wasLoadedFromCache(), waitForFreshFlags: () => featureFlagManager.waitForFreshFlags(), getABTestVariant, capture, }); }