import type { AssertEqual, Equals, Keys, Values, ExperimentId, Experiments } from "@roo-code/types" export const EXPERIMENT_IDS = { MARKETPLACE: "marketplace", MULTI_FILE_APPLY_DIFF: "multiFileApplyDiff", DISABLE_COMPLETION_COMMAND: "disableCompletionCommand", POWER_STEERING: "powerSteering", } as const satisfies Record type _AssertExperimentIds = AssertEqual>> type ExperimentKey = Keys interface ExperimentConfig { enabled: boolean } export const experimentConfigsMap: Record = { MARKETPLACE: { enabled: false }, MULTI_FILE_APPLY_DIFF: { enabled: false }, DISABLE_COMPLETION_COMMAND: { enabled: false }, POWER_STEERING: { enabled: false }, } export const experimentDefault = Object.fromEntries( Object.entries(experimentConfigsMap).map(([_, config]) => [ EXPERIMENT_IDS[_ as keyof typeof EXPERIMENT_IDS] as ExperimentId, config.enabled, ]), ) as Record export const experiments = { get: (id: ExperimentKey): ExperimentConfig | undefined => experimentConfigsMap[id], isEnabled: (experimentsConfig: Experiments, id: ExperimentId) => experimentsConfig[id] ?? experimentDefault[id], } as const