From ab33a96d7cd51c63ff05a65b4a9c8f35862170ca Mon Sep 17 00:00:00 2001 From: Christian Gunderman Date: Mon, 13 Apr 2026 10:50:08 -0700 Subject: [PATCH] Default-enable. --- calculator-app/src/logic.ts | 61 +++++++++++++++++++++++ packages/cli/src/config/config.test.ts | 26 ++++++++++ packages/cli/src/config/config.ts | 2 +- packages/cli/src/config/settingsSchema.ts | 2 +- packages/core/src/config/config.ts | 5 ++ 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 calculator-app/src/logic.ts diff --git a/calculator-app/src/logic.ts b/calculator-app/src/logic.ts new file mode 100644 index 0000000000..a1e4c03536 --- /dev/null +++ b/calculator-app/src/logic.ts @@ -0,0 +1,61 @@ +import { evaluate } from 'mathjs'; + +export interface CalculatorState { + display: string; + equation: string; + lastResult: string | null; +} + +export const initialState: CalculatorState = { + display: '0', + equation: '', + lastResult: null, +}; + +export function handleInput(state: CalculatorState, input: string): CalculatorState { + if (/[0-9]/.test(input)) { + if (state.display === '0' || state.lastResult !== null) { + return { ...state, display: input, lastResult: null }; + } else { + return { ...state, display: state.display + input }; + } + } else if (input === '.') { + if (!state.display.includes('.')) { + return { ...state, display: state.display + '.' }; + } + } else if (['+', '-', '*', '/'].includes(input)) { + return { + ...state, + equation: `${state.display} ${input} `, + display: '0', + }; + } + return state; +} + +export function calculate(state: CalculatorState): CalculatorState { + try { + const fullEquation = state.equation + state.display; + const result = evaluate(fullEquation); + const resultStr = result.toString(); + return { + display: resultStr, + equation: '', + lastResult: resultStr, + }; + } catch (error) { + return { + display: 'Error', + equation: '', + lastResult: null, + }; + } +} + +export function deleteLast(state: CalculatorState): CalculatorState { + if (state.display.length > 1) { + return { ...state, display: state.display.slice(0, -1) }; + } else { + return { ...state, display: '0' }; + } +} diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index b9401ed5eb..96f11992f6 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -1867,6 +1867,32 @@ describe('loadCliConfig with admin.mcp.config', () => { }); }); +describe('loadCliConfig deepValidation', () => { + beforeEach(() => { + vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]); + }); + + it('should enable deepValidation by default', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(createTestMergedSettings()); + const settings = createTestMergedSettings(); + const config = await loadCliConfig(settings, 'test-session', argv); + expect(config.isDeepValidationEnabled()).toBe(true); + }); + + it('should allow disabling deepValidation via settings', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(createTestMergedSettings()); + const settings = createTestMergedSettings({ + general: { + deepValidation: false, + }, + }); + const config = await loadCliConfig(settings, 'test-session', argv); + expect(config.isDeepValidationEnabled()).toBe(false); + }); +}); + describe('loadCliConfig model selection', () => { beforeEach(() => { vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]); diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index f929d73daf..ca0098a613 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -900,7 +900,7 @@ export async function loadCliConfig( memoryBoundaryMarkers: settings.context?.memoryBoundaryMarkers, importFormat: settings.context?.importFormat, debugMode, - deepValidation: settings.general?.deepValidation, + deepValidation: settings.general?.deepValidation ?? true, question, worktreeSettings, diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 60e5fafa8b..b1dae4b5a5 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -241,7 +241,7 @@ const SETTINGS_SCHEMA = { label: 'Deep Validation', category: 'General', requiresRestart: false, - default: false, + default: true, description: 'Run a subagent after the main agent finishes to perform final validation.', showInDialog: true, diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 9a095a7108..77795c5cd4 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -2051,6 +2051,11 @@ export class Config implements McpContext, AgentLoopContext { getDebugMode(): boolean { return this.debugMode; } + + isDeepValidationEnabled(): boolean { + return this.deepValidation; + } + getQuestion(): string | undefined { return this.question; }