diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 5b9223b5eebc..05b17a1309ea 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -28,7 +28,7 @@ import { Show, } from "solid-js" import { Dynamic } from "solid-js/web" -import { CommandProvider } from "@/context/command" +import { CommandProvider, useCommand, type CommandOption } from "@/context/command" import { CommentsProvider } from "@/context/comments" import { FileProvider } from "@/context/file" import { ServerSDKProvider, useServerSDK } from "@/context/server-sdk" @@ -40,6 +40,7 @@ import { LayoutProvider } from "@/context/layout" import { ModelsProvider } from "@/context/models" import { NotificationProvider, useNotification } from "@/context/notification" import { PermissionProvider } from "@/context/permission" +import { usePlatform } from "@/context/platform" import { PromptProvider } from "@/context/prompt" import { ServerConnection, ServerProvider, serverName, useServer } from "@/context/server" import { SettingsProvider, useSettings } from "@/context/settings" @@ -300,12 +301,36 @@ function SharedProviders(props: ParentProps) { <> + {props.children} ) } +function DesktopCommands() { + const command = useCommand() + const language = useLanguage() + const platform = usePlatform() + + command.register("desktop", () => { + const commands: CommandOption[] = [] + if (platform.platform === "desktop" && platform.exportDebugLogs) { + commands.push({ + id: "logs.export", + title: "Export logs", + category: language.t("command.category.settings"), + onSelect: () => { + void platform.exportDebugLogs?.() + }, + }) + } + return commands + }) + + return null +} + // Server-scoped providers shared by the legacy shell and the top-level new shell. type ServerScopedShellProps = ParentProps<{ directory?: () => string | undefined diff --git a/packages/app/src/desktop-menu.test.ts b/packages/app/src/desktop-menu.test.ts new file mode 100644 index 000000000000..c7e36a7cb73b --- /dev/null +++ b/packages/app/src/desktop-menu.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, test } from "bun:test" +import { DESKTOP_MENU } from "./desktop-menu" + +describe("desktop menu", () => { + test("exports logs through the desktop command registry", () => { + const items = DESKTOP_MENU.flatMap((menu) => menu.items ?? []).filter( + (item) => item.type === "item" && item.label === "Export Logs...", + ) + + expect(items).toHaveLength(2) + expect(items.every((item) => item.type === "item" && item.command === "logs.export" && !item.action)).toBe(true) + }) +}) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 31c59579b6ff..690460d3af6e 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -943,18 +943,6 @@ export default function LegacyLayout(props: ParentProps) { keybind: "mod+comma", onSelect: () => openSettings(), }, - ...(platform.platform === "desktop" && platform.exportDebugLogs - ? [ - { - id: "logs.export", - title: "Export logs", - category: language.t("command.category.settings"), - onSelect: () => { - void platform.exportDebugLogs?.() - }, - }, - ] - : []), { id: "session.previous", title: language.t("command.session.previous"),