From 49f0c85d6fe7a82f9c95b9de99dd073682bcacfe Mon Sep 17 00:00:00 2001 From: Neo Date: Wed, 26 Nov 2025 04:43:43 -0800 Subject: [PATCH 1/2] Add antigravity option to ide list for cli and desktop --- cmd/agent/container/setup.go | 2 ++ cmd/up.go | 9 +++++++++ desktop/src/components/IDEIcon/IDEIcon.tsx | 2 ++ .../src/contexts/SettingsContext/SettingsContext.tsx | 1 + desktop/src/gen/Settings.ts | 1 + desktop/src/images/antigravity.svg | 1 + desktop/src/images/index.ts | 1 + desktop/src/types.ts | 1 + desktop/src/useIDEs.ts | 2 ++ desktop/src/views/Settings/Settings.tsx | 10 ++++++++++ pkg/config/ide.go | 1 + pkg/ide/ideparse/parse.go | 8 ++++++++ pkg/ide/vscode/open.go | 12 ++++++++++++ pkg/ide/vscode/vscode.go | 5 +++++ 14 files changed, 56 insertions(+) create mode 100644 desktop/src/images/antigravity.svg diff --git a/cmd/agent/container/setup.go b/cmd/agent/container/setup.go index dda1d59f7..467d35ca4 100644 --- a/cmd/agent/container/setup.go +++ b/cmd/agent/container/setup.go @@ -435,6 +435,8 @@ func (cmd *SetupContainerCmd) installIDE(setupInfo *config.Result, ide *provider return cmd.setupVSCode(setupInfo, ide.Options, vscode.FlavorCodium, log) case string(config2.IDEWindsurf): return cmd.setupVSCode(setupInfo, ide.Options, vscode.FlavorWindsurf, log) + case string(config2.IDEAntigravity): + return cmd.setupVSCode(setupInfo, ide.Options, vscode.FlavorAntigravity, log) case string(config2.IDEOpenVSCode): return cmd.setupOpenVSCode(setupInfo, ide.Options, log) case string(config2.IDEGoland): diff --git a/cmd/up.go b/cmd/up.go index 148a167c2..476c66934 100644 --- a/cmd/up.go +++ b/cmd/up.go @@ -277,6 +277,15 @@ func (cmd *UpCmd) Run( vscode.FlavorWindsurf, log, ) + case string(config.IDEAntigravity): + return vscode.Open( + ctx, + client.Workspace(), + result.SubstitutionContext.ContainerWorkspaceFolder, + vscode.Options.GetValue(ideConfig.Options, vscode.OpenNewWindow) == "true", + vscode.FlavorAntigravity, + log, + ) case string(config.IDEOpenVSCode): return startVSCodeInBrowser( cmd.GPGAgentForwarding, diff --git a/desktop/src/components/IDEIcon/IDEIcon.tsx b/desktop/src/components/IDEIcon/IDEIcon.tsx index 63e85587a..eddfa834e 100644 --- a/desktop/src/components/IDEIcon/IDEIcon.tsx +++ b/desktop/src/components/IDEIcon/IDEIcon.tsx @@ -10,6 +10,7 @@ import { } from "@chakra-ui/react" import { HiBeaker } from "react-icons/hi2" import { + AntigravitySvg, CLionSvg, CodiumSvg, CursorSvg, @@ -75,6 +76,7 @@ const IDE_ICONS: Record = { zed_dark: ZedDarkSvg, rstudio: RStudioSvg, windsurf: WindsurfSvg, + antigravity: AntigravitySvg, } type TIDEIconProps = Readonly<{ ide: TIDE; size?: "sm" | "md" }> & BoxProps diff --git a/desktop/src/contexts/SettingsContext/SettingsContext.tsx b/desktop/src/contexts/SettingsContext/SettingsContext.tsx index b79cfd948..835739d81 100644 --- a/desktop/src/contexts/SettingsContext/SettingsContext.tsx +++ b/desktop/src/contexts/SettingsContext/SettingsContext.tsx @@ -31,6 +31,7 @@ const initialSettings: TSettings = { experimental_codium: true, experimental_rstudio: true, experimental_windsurf: true, + experimental_antigravity: true, experimental_devPodPro: false, } function getSettingKeys(): readonly TSetting[] { diff --git a/desktop/src/gen/Settings.ts b/desktop/src/gen/Settings.ts index c160ceb19..7d788325a 100644 --- a/desktop/src/gen/Settings.ts +++ b/desktop/src/gen/Settings.ts @@ -28,6 +28,7 @@ export interface Settings { experimental_positron: boolean experimental_rstudio: boolean experimental_windsurf: boolean + experimental_antigravity: boolean experimental_devPodPro: boolean experimental_colorMode: ColorMode } diff --git a/desktop/src/images/antigravity.svg b/desktop/src/images/antigravity.svg new file mode 100644 index 000000000..3b2478db1 --- /dev/null +++ b/desktop/src/images/antigravity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/desktop/src/images/index.ts b/desktop/src/images/index.ts index 6ab04184e..3329c84f9 100644 --- a/desktop/src/images/index.ts +++ b/desktop/src/images/index.ts @@ -49,3 +49,4 @@ export { default as ZedSvg } from "./zed.svg" export { default as ZedDarkSvg } from "./zed_dark.svg" export { default as RStudioSvg } from "./rstudio.svg" export { default as WindsurfSvg } from "./windsurf.svg" +export { default as AntigravitySvg } from "./antigravity.svg" diff --git a/desktop/src/types.ts b/desktop/src/types.ts index 7ffe8677f..c37721a22 100644 --- a/desktop/src/types.ts +++ b/desktop/src/types.ts @@ -199,6 +199,7 @@ export const SUPPORTED_IDES = [ "jupyternotebook", "fleet", "windsurf", + "antigravity", ] as const export type TSupportedIDE = (typeof SUPPORTED_IDES)[number] export type TImportWorkspaceConfig = Readonly<{ diff --git a/desktop/src/useIDEs.ts b/desktop/src/useIDEs.ts index 48320346a..553eaa7a2 100644 --- a/desktop/src/useIDEs.ts +++ b/desktop/src/useIDEs.ts @@ -15,6 +15,7 @@ const CODIUM = "codium" const ZED = "zed" const RSTUDIO = "rstudio" const WINDSURF = "windsurf" +const ANTIGRAVITY = "antigravity" export function useIDEs() { const idesQuery = useQuery({ @@ -37,6 +38,7 @@ export function useIDEs() { if (ide.name === ZED && settings.experimental_zed) return true if (ide.name === RSTUDIO && settings.experimental_rstudio) return true if (ide.name === WINDSURF && settings.experimental_windsurf) return true + if (ide.name === ANTIGRAVITY && settings.experimental_antigravity) return true return false }), diff --git a/desktop/src/views/Settings/Settings.tsx b/desktop/src/views/Settings/Settings.tsx index 4943d3222..83242fc69 100644 --- a/desktop/src/views/Settings/Settings.tsx +++ b/desktop/src/views/Settings/Settings.tsx @@ -483,6 +483,16 @@ function ExperimentalSettings() { Windsurf + + + set("experimental_antigravity", e.target.checked)} + /> + + Antigravity + + diff --git a/pkg/config/ide.go b/pkg/config/ide.go index bf420e285..8bd042d7a 100644 --- a/pkg/config/ide.go +++ b/pkg/config/ide.go @@ -25,6 +25,7 @@ const ( IDEZed IDE = "zed" IDERStudio IDE = "rstudio" IDEWindsurf IDE = "windsurf" + IDEAntigravity IDE = "antigravity" ) type IDEGroup string diff --git a/pkg/ide/ideparse/parse.go b/pkg/ide/ideparse/parse.go index 38ae5adf4..c709cc660 100644 --- a/pkg/ide/ideparse/parse.go +++ b/pkg/ide/ideparse/parse.go @@ -202,6 +202,14 @@ var AllowedIDEs = []AllowedIDE{ Experimental: true, Group: config.IDEGroupPrimary, }, + { + Name: config.IDEAntigravity, + DisplayName: "Antigravity", + Options: vscode.Options, + Icon: "https://devpod.sh/assets/antigravity.svg", + Experimental: true, + Group: config.IDEGroupPrimary, + }, } func RefreshIDEOptions(devPodConfig *config.Config, workspace *provider.Workspace, ide string, options []string) (*provider.Workspace, error) { diff --git a/pkg/ide/vscode/open.go b/pkg/ide/vscode/open.go index fa87116f2..2cf45cdd9 100644 --- a/pkg/ide/vscode/open.go +++ b/pkg/ide/vscode/open.go @@ -43,6 +43,8 @@ func openViaBrowser(workspace, folder string, newWindow bool, flavor Flavor, log protocol = `codium://` case FlavorWindsurf: protocol = `windsurf://` + case FlavorAntigravity: + protocol = `antigravity://` default: return fmt.Errorf("unknown flavor %s", flavor) } @@ -183,5 +185,15 @@ func findCLI(flavor Flavor) string { return "" } + if flavor == FlavorAntigravity { + if command.Exists("antigravity") { + return "antigravity" + } else if runtime.GOOS == "darwin" && command.Exists("/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity") { + return "/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity" + } + + return "" + } + return "" } diff --git a/pkg/ide/vscode/vscode.go b/pkg/ide/vscode/vscode.go index 9646015e1..58f864668 100644 --- a/pkg/ide/vscode/vscode.go +++ b/pkg/ide/vscode/vscode.go @@ -32,6 +32,7 @@ const ( FlavorPositron Flavor = "positron" FlavorCodium Flavor = "codium" FlavorWindsurf Flavor = "windsurf" + FlavorAntigravity Flavor = "antigravity" ) func (f Flavor) DisplayName() string { @@ -48,6 +49,8 @@ func (f Flavor) DisplayName() string { return "VSCodium" case FlavorWindsurf: return "Windsurf" + case FlavorAntigravity: + return "Antigravity" default: return "VSCode" } @@ -461,6 +464,8 @@ func prepareServerLocation(userName string, create bool, flavor Flavor) (string, folderName = ".vscodium-server" case FlavorWindsurf: folderName = ".windsurf-server" + case FlavorAntigravity: + folderName = ".antigravity-server" } folder := filepath.Join(homeFolder, folderName) From f48028ed9897400fb19a2add48bce9b15568c340 Mon Sep 17 00:00:00 2001 From: Neo Date: Wed, 26 Nov 2025 04:57:40 -0800 Subject: [PATCH 2/2] fix: Use antigravity's official 'agy' command instead of 'antigravity' for Antigravity flavor. --- pkg/ide/vscode/open.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/ide/vscode/open.go b/pkg/ide/vscode/open.go index 2cf45cdd9..6e4662658 100644 --- a/pkg/ide/vscode/open.go +++ b/pkg/ide/vscode/open.go @@ -186,8 +186,8 @@ func findCLI(flavor Flavor) string { } if flavor == FlavorAntigravity { - if command.Exists("antigravity") { - return "antigravity" + if command.Exists("agy") { + return "agy" } else if runtime.GOOS == "darwin" && command.Exists("/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity") { return "/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity" }