Quellcode durchsuchen

fix(app): register export logs globally (#34352)

Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
opencode-agent[bot] vor 1 Monat
Ursprung
Commit
e687eb936b
3 geänderte Dateien mit 39 neuen und 13 gelöschten Zeilen
  1. 26 1
      packages/app/src/app.tsx
  2. 13 0
      packages/app/src/desktop-menu.test.ts
  3. 0 12
      packages/app/src/pages/layout.tsx

+ 26 - 1
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) {
     <>
       <BodyDesignClass />
       <CommandProvider>
+        <DesktopCommands />
         <HighlightsProvider>{props.children}</HighlightsProvider>
       </CommandProvider>
     </>
   )
 }
 
+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

+ 13 - 0
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)
+  })
+})

+ 0 - 12
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"),