Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 40 additions & 40 deletions cline_docs/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,31 @@

1. Add the setting to schema definitions:

- Add the item to `globalSettingsSchema` in `schemas/index.ts`
- Add the item to `globalSettingsRecord` in `schemas/index.ts`
- Add the item to `globalSettingsSchema` in `src/schemas/index.ts`
- Add the item to `globalSettingsRecord` in `src/schemas/index.ts`
- Example: `terminalCommandDelay: z.number().optional(),`

2. Add the setting to type definitions:

- Add the item to `exports/types.ts`
- Add the item to `exports/roo-code.d.ts`
- Add the setting to `shared/ExtensionMessage.ts`
- Add the setting to the WebviewMessage type in `shared/WebviewMessage.ts`
- Add the item to `src/exports/types.ts`
- Add the item to `src/exports/roo-code.d.ts`
- Add the setting to `src/shared/ExtensionMessage.ts`
- Add the setting to the WebviewMessage type in `src/shared/WebviewMessage.ts`
- Example: `terminalCommandDelay?: number | undefined`

3. Add test coverage:
- Add the setting to mockState in ClineProvider.test.ts
- Add the setting to mockState in src/core/webview/**tests**/ClineProvider.test.ts
- Add test cases for setting persistence and state updates
- Ensure all tests pass before submitting changes

## For Checkbox Settings

1. Add the message type to WebviewMessage.ts:
1. Add the message type to src/shared/WebviewMessage.ts:

- Add the setting name to the WebviewMessage type's type union
- Example: `| "multisearchDiffEnabled"`

2. Add the setting to ExtensionStateContext.tsx:
2. Add the setting to webview-ui/src/context/ExtensionStateContext.tsx:

- Add the setting to the ExtensionStateContextType interface
- Add the setter function to the interface
Expand All @@ -40,7 +40,7 @@
}
```

3. Add the setting to ClineProvider.ts:
3. Add the setting to src/core/webview/ClineProvider.ts:

- Add the setting name to the GlobalStateKey type union
- Add the setting to the Promise.all array in getState
Expand All @@ -56,7 +56,7 @@
break
```

4. Add the checkbox UI to SettingsView.tsx:
4. Add the checkbox UI to webview-ui/src/components/settings/SettingsView.tsx:

- Import the setting and its setter from ExtensionStateContext
- Add the VSCodeCheckbox component with the setting's state and onChange handler
Expand All @@ -71,7 +71,7 @@
</VSCodeCheckbox>
```

5. Add the setting to handleSubmit in SettingsView.tsx:
5. Add the setting to handleSubmit in webview-ui/src/components/settings/SettingsView.tsx:

- Add a vscode.postMessage call to send the setting's value when clicking Save
- This step is critical for persistence - without it, the setting will not be saved when the user clicks Save
Expand Down Expand Up @@ -103,12 +103,12 @@

## For Select/Dropdown Settings

1. Add the message type to WebviewMessage.ts:
1. Add the message type to src/shared/WebviewMessage.ts:

- Add the setting name to the WebviewMessage type's type union
- Example: `| "preferredLanguage"`

2. Add the setting to ExtensionStateContext.tsx:
2. Add the setting to webview-ui/src/context/ExtensionStateContext.tsx:

- Add the setting to the ExtensionStateContextType interface
- Add the setter function to the interface
Expand All @@ -122,7 +122,7 @@
}
```

3. Add the setting to ClineProvider.ts:
3. Add the setting to src/core/webview/ClineProvider.ts:

- Add the setting name to the GlobalStateKey type union
- Add the setting to the Promise.all array in getState
Expand All @@ -139,7 +139,7 @@
break
```

4. Add the select UI to SettingsView.tsx:
4. Add the select UI to webview-ui/src/components/settings/SettingsView.tsx:

- Import the setting and its setter from ExtensionStateContext
- Add the select element with appropriate styling to match VSCode's theme
Expand All @@ -164,7 +164,7 @@
</select>
```

5. Add the setting to handleSubmit in SettingsView.tsx:
5. Add the setting to handleSubmit in webview-ui/src/components/settings/SettingsView.tsx:
- Add a vscode.postMessage call to send the setting's value when clicking Done
- Example:
```typescript
Expand All @@ -191,21 +191,21 @@ To add a new configuration item to the system, the following changes are necessa

2. **Schema Definition**

- Add the item to globalSettingsSchema in schemas/index.ts
- Add the item to globalSettingsRecord in schemas/index.ts
- Add the item to globalSettingsSchema in src/schemas/index.ts
- Add the item to globalSettingsRecord in src/schemas/index.ts

3. **Type Definitions**

- Add the item to exports/types.ts
- Add the item to exports/roo-code.d.ts
- Add the item to shared/ExtensionMessage.ts
- Add the item to shared/WebviewMessage.ts
- Add the item to src/exports/types.ts
- Add the item to src/exports/roo-code.d.ts
- Add the item to src/shared/ExtensionMessage.ts
- Add the item to src/shared/WebviewMessage.ts

4. **UI Component**

- Create or update a component in webview-ui/src/components/settings/
- Add appropriate slider/input controls with min/max/step values
- Ensure the props are passed correctly to the component in SettingsView.tsx
- Ensure the props are passed correctly to the component in webview-ui/src/components/settings/SettingsView.tsx
- Update the component's props interface to include the new settings

5. **Translations**
Expand All @@ -218,14 +218,14 @@ To add a new configuration item to the system, the following changes are necessa
6. **State Management**

- Add the item to the destructuring in SettingsView.tsx
- Add the item to the handleSubmit function in SettingsView.tsx
- Add the item to getStateToPostToWebview in ClineProvider.ts
- Add the item to getState in ClineProvider.ts with appropriate default values
- Add the item to the initialization in resolveWebviewView in ClineProvider.ts
- Add the item to the handleSubmit function in webview-ui/src/components/settings/SettingsView.tsx
- Add the item to getStateToPostToWebview in src/core/webview/ClineProvider.ts
- Add the item to getState in src/core/webview/ClineProvider.ts with appropriate default values
- Add the item to the initialization in resolveWebviewView in src/core/webview/ClineProvider.ts

7. **Message Handling**

- Add a case for the item in webviewMessageHandler.ts
- Add a case for the item in src/core/webview/webviewMessageHandler.ts

8. **Implementation-Specific Logic**

Expand Down Expand Up @@ -310,11 +310,11 @@ To add a new configuration item to the system, the following changes are necessa
1. **Complete Chain of Persistence**:

- Verify that the setting is added to all required locations:
- globalSettingsSchema and globalSettingsRecord in schemas/index.ts
- Initial state in ExtensionStateContextProvider
- getState method in ClineProvider.ts
- getStateToPostToWebview method in ClineProvider.ts
- resolveWebviewView method in ClineProvider.ts (if feature-specific)
- globalSettingsSchema and globalSettingsRecord in src/schemas/index.ts
- Initial state in ExtensionStateContextProvider
- getState method in src/core/webview/ClineProvider.ts
- getStateToPostToWebview method in src/core/webview/ClineProvider.ts
- resolveWebviewView method in src/core/webview/ClineProvider.ts (if feature-specific)
- A break in any part of this chain can prevent persistence

2. **Default Values Consistency**:
Expand All @@ -324,12 +324,12 @@ To add a new configuration item to the system, the following changes are necessa

3. **Message Handling**:

- Confirm the webviewMessageHandler.ts has a case for the setting
- Confirm the src/core/webview/webviewMessageHandler.ts has a case for the setting
- Verify the message type matches what's sent from the UI

4. **UI Integration**:

- Check that the setting is included in the handleSubmit function in SettingsView.tsx
- Check that the setting is included in the handleSubmit function in webview-ui/src/components/settings/SettingsView.tsx
- Ensure the UI component correctly updates the state

5. **Type Definitions**:
Expand All @@ -354,7 +354,7 @@ Settings persistence requires a complete chain of state management across multip
- Example:

```typescript
// In schemas/index.ts
// In src/schemas/index.ts
export const globalSettingsSchema = z.object({
// Existing settings...
commandRiskLevel: z.enum(["readOnly", "reversibleChanges", "complexChanges"]).optional(),
Expand Down Expand Up @@ -389,12 +389,12 @@ Settings persistence requires a complete chain of state management across multip

3. **Message Handler (State Saving)**:

- Must use correct message type in `webviewMessageHandler.ts`
- Must use correct message type in `src/core/webview/webviewMessageHandler.ts`
- Must use `updateGlobalState` with properly typed values
- Must call `postStateToWebview` after updates
- Example:
```typescript
// In webviewMessageHandler.ts
// In src/core/webview/webviewMessageHandler.ts
case "commandRiskLevel":
await updateGlobalState(
"commandRiskLevel",
Expand All @@ -413,7 +413,7 @@ Settings persistence requires a complete chain of state management across multip
- Example:

```typescript
// In ClineProvider.ts getStateToPostToWebview
// In src/core/webview/ClineProvider.ts getStateToPostToWebview
const {
// Other state properties...
commandRiskLevel,
Expand Down