diff --git a/packages/devtools-kit/src/_types/rpc.ts b/packages/devtools-kit/src/_types/rpc.ts index e52759a275..6d248a2d64 100644 --- a/packages/devtools-kit/src/_types/rpc.ts +++ b/packages/devtools-kit/src/_types/rpc.ts @@ -82,6 +82,7 @@ export interface ClientFunctions { refresh: (event: ClientUpdateEvent) => void callHook: (hook: string, ...args: any[]) => Promise navigateTo: (path: string) => void + openUrl: (url: string) => void onTerminalData: (_: { id: string, data: string }) => void onTerminalExit: (_: { id: string, code?: number }) => void diff --git a/packages/devtools/client/pages/settings.vue b/packages/devtools/client/pages/settings.vue index 2bae575696..a605d1b4d5 100644 --- a/packages/devtools/client/pages/settings.vue +++ b/packages/devtools/client/pages/settings.vue @@ -39,6 +39,7 @@ const editorOptions = [ ['Sublime Text', 'sublime'], ['Atom', 'atom'], ['Windsurf', 'windsurf'], + ['Google Antigravity', 'antigravity'], ] const scaleOptions = [ diff --git a/packages/devtools/client/setup/client-rpc.ts b/packages/devtools/client/setup/client-rpc.ts index dfef0e3fec..7554256ac4 100644 --- a/packages/devtools/client/setup/client-rpc.ts +++ b/packages/devtools/client/setup/client-rpc.ts @@ -40,6 +40,9 @@ export function setupClientRPC() { if (router.currentRoute.value?.path !== path) router.push(path) }, + async openUrl(url: string) { + window.open(url, '_blank') + }, } satisfies ClientFunctions) // Re-register client functions now that they're populated diff --git a/packages/devtools/src/server-rpc/general.ts b/packages/devtools/src/server-rpc/general.ts index d78af83ac4..30d5254e67 100644 --- a/packages/devtools/src/server-rpc/general.ts +++ b/packages/devtools/src/server-rpc/general.ts @@ -19,12 +19,8 @@ const ABSOLUTE_PATH_RE = /^[a-z]:|^\//i const FILE_LINE_COL_RE = /^(.*?)(:[:\d]*)$/ const NUXT_WELCOME_RE = // -export function setupGeneralRPC({ - nuxt, - options, - refresh, - openInEditorHooks, -}: NuxtDevtoolsServerContext) { +export function setupGeneralRPC(ctx: NuxtDevtoolsServerContext) { + const { nuxt, options, refresh, openInEditorHooks } = ctx const components: Component[] = [] const imports: Import[] = [] const importPresets: Import[] = [] @@ -223,6 +219,10 @@ export function setupGeneralRPC({ let editor = getOptions()?.behavior.openInEditor ?? undefined if (editor === 'auto') editor = undefined + if (editor === 'antigravity') { + ctx.rpc.broadcast.openUrl(`https://antigravity.google/open?file=${path}${suffix}`) + return true + } await import('launch-editor').then(r => (r.default || r)(path + suffix, editor)) return true }