diff options
| author | Dax <[email protected]> | 2026-03-24 18:20:11 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-24 18:20:11 -0400 |
| commit | 15dc33d1a38f3beb30fdc1a2bd2a0f3dd124a3a8 (patch) | |
| tree | 55dceb8da1ee33e7d6a31fd9efa94846e7f141fc /packages | |
| parent | 1398674e531acc845e062b219f718cac1cd89a44 (diff) | |
| download | opencode-15dc33d1a38f3beb30fdc1a2bd2a0f3dd124a3a8.tar.gz opencode-15dc33d1a38f3beb30fdc1a2bd2a0f3dd124a3a8.zip | |
feat(tui): add heap snapshot functionality for TUI and server (#19028)
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/app.tsx | 11 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/thread.ts | 6 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/worker.ts | 5 |
3 files changed, 17 insertions, 5 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 549c7c34a..8aabafd08 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -110,6 +110,7 @@ export function tui(input: { url: string args: Args config: TuiConfig.Info + onSnapshot?: () => Promise<string[]> directory?: string fetch?: typeof fetch headers?: RequestInit["headers"] @@ -160,7 +161,7 @@ export function tui(input: { <FrecencyProvider> <PromptHistoryProvider> <PromptRefProvider> - <App /> + <App onSnapshot={input.onSnapshot} /> </PromptRefProvider> </PromptHistoryProvider> </FrecencyProvider> @@ -201,7 +202,7 @@ export function tui(input: { }) } -function App() { +function App(props: { onSnapshot?: () => Promise<string[]> }) { const route = useRoute() const dimensions = useTerminalDimensions() const renderer = useRenderer() @@ -627,11 +628,11 @@ function App() { title: "Write heap snapshot", category: "System", value: "app.heap_snapshot", - onSelect: (dialog) => { - const path = writeHeapSnapshot() + onSelect: async (dialog) => { + const files = await props.onSnapshot?.() toast.show({ variant: "info", - message: `Heap snapshot written to ${path}`, + message: `Heap snapshot written to ${files?.join(", ")}`, duration: 5000, }) dialog.clear() diff --git a/packages/opencode/src/cli/cmd/tui/thread.ts b/packages/opencode/src/cli/cmd/tui/thread.ts index 6e787c7af..d984dc6f3 100644 --- a/packages/opencode/src/cli/cmd/tui/thread.ts +++ b/packages/opencode/src/cli/cmd/tui/thread.ts @@ -14,6 +14,7 @@ import type { EventSource } from "./context/sdk" import { win32DisableProcessedInput, win32InstallCtrlCGuard } from "./win32" import { TuiConfig } from "@/config/tui" import { Instance } from "@/project/instance" +import { writeHeapSnapshot } from "v8" declare global { const OPENCODE_WORKER_PATH: string @@ -201,6 +202,11 @@ export const TuiThreadCommand = cmd({ try { await tui({ url: transport.url, + async onSnapshot() { + const tui = writeHeapSnapshot("tui.heapsnapshot") + const server = await client.call("snapshot", undefined) + return [tui, server] + }, config, directory: cwd, fetch: transport.fetch, diff --git a/packages/opencode/src/cli/cmd/tui/worker.ts b/packages/opencode/src/cli/cmd/tui/worker.ts index 511182fe8..06cb179e9 100644 --- a/packages/opencode/src/cli/cmd/tui/worker.ts +++ b/packages/opencode/src/cli/cmd/tui/worker.ts @@ -10,6 +10,7 @@ import { GlobalBus } from "@/bus/global" import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2" import { Flag } from "@/flag/flag" import { setTimeout as sleep } from "node:timers/promises" +import { writeHeapSnapshot } from "node:v8" await Log.init({ print: process.argv.includes("--print-logs"), @@ -117,6 +118,10 @@ export const rpc = { body, } }, + snapshot() { + const result = writeHeapSnapshot("server.heapsnapshot") + return result + }, async server(input: { port: number; hostname: string; mdns?: boolean; cors?: string[] }) { if (server) await server.stop(true) server = await Server.listen(input) |
