From 3518ff766345ba98d90495b46c84439e6fc1a61c Mon Sep 17 00:00:00 2001 From: Pyush Sinha <89475668+psinha40898@users.noreply.github.com> Date: Sat, 28 Jun 2025 10:44:31 -0700 Subject: [PATCH] feat: add VSCodium editor support (#2299) Co-authored-by: Scott Densmore Co-authored-by: Allen Hutchison --- .../src/ui/editors/editorSettingsManager.ts | 2 ++ packages/core/src/utils/editor.test.ts | 18 ++++++++++++++++-- packages/core/src/utils/editor.ts | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/ui/editors/editorSettingsManager.ts b/packages/cli/src/ui/editors/editorSettingsManager.ts index 99d02a11..550569c4 100644 --- a/packages/cli/src/ui/editors/editorSettingsManager.ts +++ b/packages/cli/src/ui/editors/editorSettingsManager.ts @@ -19,6 +19,7 @@ export interface EditorDisplay { export const EDITOR_DISPLAY_NAMES: Record = { zed: 'Zed', vscode: 'VS Code', + vscodium: 'VSCodium', windsurf: 'Windsurf', cursor: 'Cursor', vim: 'Vim', @@ -31,6 +32,7 @@ class EditorSettingsManager { const editorTypes: EditorType[] = [ 'zed', 'vscode', + 'vscodium', 'windsurf', 'cursor', 'vim', diff --git a/packages/core/src/utils/editor.test.ts b/packages/core/src/utils/editor.test.ts index 85b54333..09bd496f 100644 --- a/packages/core/src/utils/editor.test.ts +++ b/packages/core/src/utils/editor.test.ts @@ -56,6 +56,7 @@ describe('editor utils', () => { win32Command: string; }> = [ { editor: 'vscode', command: 'code', win32Command: 'code.cmd' }, + { editor: 'vscodium', command: 'codium', win32Command: 'codium.cmd' }, { editor: 'windsurf', command: 'windsurf', win32Command: 'windsurf' }, { editor: 'cursor', command: 'cursor', win32Command: 'cursor' }, { editor: 'vim', command: 'vim', win32Command: 'vim' }, @@ -112,6 +113,7 @@ describe('editor utils', () => { win32Command: string; }> = [ { editor: 'vscode', command: 'code', win32Command: 'code.cmd' }, + { editor: 'vscodium', command: 'codium', win32Command: 'codium.cmd' }, { editor: 'windsurf', command: 'windsurf', win32Command: 'windsurf' }, { editor: 'cursor', command: 'cursor', win32Command: 'cursor' }, { editor: 'zed', command: 'zed', win32Command: 'zed' }, @@ -171,7 +173,13 @@ describe('editor utils', () => { }); describe('openDiff', () => { - const spawnEditors: EditorType[] = ['vscode', 'windsurf', 'cursor', 'zed']; + const spawnEditors: EditorType[] = [ + 'vscode', + 'vscodium', + 'windsurf', + 'cursor', + 'zed', + ]; for (const editor of spawnEditors) { it(`should call spawn for ${editor}`, async () => { const mockSpawn = { @@ -285,7 +293,13 @@ describe('editor utils', () => { expect(allowEditorTypeInSandbox('vim')).toBe(true); }); - const guiEditors: EditorType[] = ['vscode', 'windsurf', 'cursor', 'zed']; + const guiEditors: EditorType[] = [ + 'vscode', + 'vscodium', + 'windsurf', + 'cursor', + 'zed', + ]; for (const editor of guiEditors) { it(`should not allow ${editor} in sandbox mode`, () => { process.env.SANDBOX = 'sandbox'; diff --git a/packages/core/src/utils/editor.ts b/packages/core/src/utils/editor.ts index 36533e2c..174dae3e 100644 --- a/packages/core/src/utils/editor.ts +++ b/packages/core/src/utils/editor.ts @@ -6,10 +6,18 @@ import { execSync, spawn } from 'child_process'; -export type EditorType = 'vscode' | 'windsurf' | 'cursor' | 'vim' | 'zed'; +export type EditorType = + | 'vscode' + | 'vscodium' + | 'windsurf' + | 'cursor' + | 'vim' + | 'zed'; function isValidEditorType(editor: string): editor is EditorType { - return ['vscode', 'windsurf', 'cursor', 'vim', 'zed'].includes(editor); + return ['vscode', 'vscodium', 'windsurf', 'cursor', 'vim', 'zed'].includes( + editor, + ); } interface DiffCommand { @@ -31,6 +39,7 @@ function commandExists(cmd: string): boolean { const editorCommands: Record = { vscode: { win32: 'code.cmd', default: 'code' }, + vscodium: { win32: 'codium.cmd', default: 'codium' }, windsurf: { win32: 'windsurf', default: 'windsurf' }, cursor: { win32: 'cursor', default: 'cursor' }, vim: { win32: 'vim', default: 'vim' }, @@ -46,7 +55,7 @@ export function checkHasEditorType(editor: EditorType): boolean { export function allowEditorTypeInSandbox(editor: EditorType): boolean { const notUsingSandbox = !process.env.SANDBOX; - if (['vscode', 'windsurf', 'cursor', 'zed'].includes(editor)) { + if (['vscode', 'vscodium', 'windsurf', 'cursor', 'zed'].includes(editor)) { return notUsingSandbox; } return true; @@ -82,6 +91,7 @@ export function getDiffCommand( process.platform === 'win32' ? commandConfig.win32 : commandConfig.default; switch (editor) { case 'vscode': + case 'vscodium': case 'windsurf': case 'cursor': case 'zed': @@ -138,6 +148,7 @@ export async function openDiff( try { switch (editor) { case 'vscode': + case 'vscodium': case 'windsurf': case 'cursor': case 'zed':