mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-22 13:21:07 -05:00
refactor(experiments): improve type safety for experiment configuration
Change ExperimentId type to be value-based rather than key-based Make experiment record types more strict with proper typing Pass full experiment config object instead of single boolean flag Update type definitions and usages across codebase
This commit is contained in:
@@ -6,6 +6,7 @@ import { McpServer } from "./mcp"
|
||||
import { GitCommit } from "../utils/git"
|
||||
import { Mode, CustomModePrompts, ModeConfig } from "./modes"
|
||||
import { CustomSupportPrompts } from "./support-prompt"
|
||||
import { ExperimentId } from "./experiments"
|
||||
|
||||
export interface LanguageModelChatSelector {
|
||||
vendor?: string
|
||||
@@ -108,7 +109,7 @@ export interface ExtensionState {
|
||||
mode: Mode
|
||||
modeApiConfigs?: Record<Mode, string>
|
||||
enhancementApiConfigId?: string
|
||||
experiments: Record<string, boolean> // Map of experiment IDs to their enabled state
|
||||
experiments: Record<ExperimentId, boolean> // Map of experiment IDs to their enabled state
|
||||
autoApprovalEnabled?: boolean
|
||||
customModes: ModeConfig[]
|
||||
toolRequirements?: Record<string, boolean> // Map of tool names to their requirements (e.g. {"apply_diff": true} if diffEnabled)
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
export interface ExperimentConfig {
|
||||
id: string
|
||||
name: string
|
||||
description: string
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
export const EXPERIMENT_IDS = {
|
||||
DIFF_STRATEGY: "experimentalDiffStrategy",
|
||||
SEARCH_AND_REPLACE: "search_and_replace",
|
||||
INSERT_BLOCK: "insert_code_block",
|
||||
} as const
|
||||
|
||||
export type ExperimentId = keyof typeof EXPERIMENT_IDS
|
||||
export type ExperimentKey = keyof typeof EXPERIMENT_IDS
|
||||
export type ExperimentId = valueof<typeof EXPERIMENT_IDS>
|
||||
|
||||
export const experimentConfigsMap: Record<ExperimentId, ExperimentConfig> = {
|
||||
export interface ExperimentConfig {
|
||||
id: ExperimentId
|
||||
name: string
|
||||
description: string
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
type valueof<X> = X[keyof X]
|
||||
|
||||
export const experimentConfigsMap: Record<ExperimentKey, ExperimentConfig> = {
|
||||
DIFF_STRATEGY: {
|
||||
id: EXPERIMENT_IDS.DIFF_STRATEGY,
|
||||
name: "Use experimental unified diff strategy",
|
||||
@@ -42,13 +45,13 @@ export const experimentConfigsMap: Record<ExperimentId, ExperimentConfig> = {
|
||||
export const experimentConfigs = Object.values(experimentConfigsMap)
|
||||
export const experimentDefault = Object.fromEntries(
|
||||
Object.entries(experimentConfigsMap).map(([_, config]) => [config.id, config.enabled]),
|
||||
)
|
||||
) as Record<ExperimentId, boolean>
|
||||
|
||||
export const experiments = {
|
||||
get: (id: ExperimentId): ExperimentConfig | undefined => {
|
||||
get: (id: ExperimentKey): ExperimentConfig | undefined => {
|
||||
return experimentConfigsMap[id]
|
||||
},
|
||||
isEnabled: (experimentsConfig: Record<string, boolean>, id: string): boolean => {
|
||||
isEnabled: (experimentsConfig: Record<ExperimentId, boolean>, id: ExperimentId): boolean => {
|
||||
return experimentsConfig[id] ?? experimentDefault[id]
|
||||
},
|
||||
} as const
|
||||
|
||||
Reference in New Issue
Block a user