diff --git a/apps/desktop/src/renderer/lib/terminal/debug.ts b/apps/desktop/src/renderer/lib/terminal/debug.ts index 5f7db22136e..e4a868b9443 100644 --- a/apps/desktop/src/renderer/lib/terminal/debug.ts +++ b/apps/desktop/src/renderer/lib/terminal/debug.ts @@ -23,6 +23,7 @@ export const terminalRendererDebug = createRendererDebugChannel({ namespace: "terminal.renderer", enabled: true, mirrorToConsole: isTerminalDebugEnabled(), + captureMessageByDefault: false, }); export function logTerminalWrite( diff --git a/apps/desktop/src/renderer/lib/terminal/terminal-runtime-registry.ts b/apps/desktop/src/renderer/lib/terminal/terminal-runtime-registry.ts index ceb33c7f7fc..9bd121e8da7 100644 --- a/apps/desktop/src/renderer/lib/terminal/terminal-runtime-registry.ts +++ b/apps/desktop/src/renderer/lib/terminal/terminal-runtime-registry.ts @@ -71,18 +71,11 @@ class TerminalRuntimeRegistryImpl { appearance: TerminalAppearance, ) { const entry = this.getOrCreateEntry(terminalId); - terminalRendererDebug.info( - "runtime-attach", - { - terminalId, - hasExistingRuntime: entry.runtime !== null, - connectionState: entry.transport.connectionState, - }, - { - captureMessage: true, - fingerprint: ["terminal.renderer", "runtime-attach"], - }, - ); + terminalRendererDebug.info("runtime-attach", { + terminalId, + hasExistingRuntime: entry.runtime !== null, + connectionState: entry.transport.connectionState, + }); if (!entry.runtime) { entry.runtime = createRuntime(terminalId, appearance); diff --git a/apps/desktop/src/renderer/lib/terminal/terminal-runtime.ts b/apps/desktop/src/renderer/lib/terminal/terminal-runtime.ts index becd0e7a03a..3b9f41c49da 100644 --- a/apps/desktop/src/renderer/lib/terminal/terminal-runtime.ts +++ b/apps/desktop/src/renderer/lib/terminal/terminal-runtime.ts @@ -318,18 +318,11 @@ export function attachToContainer( runtime.container = container; container.appendChild(runtime.wrapper); - terminalRendererDebug.info( - "runtime-attach-to-container", - { - terminalId: runtime.terminalId, - containerWidth: container.clientWidth, - containerHeight: container.clientHeight, - }, - { - captureMessage: true, - fingerprint: ["terminal.renderer", "runtime-attach-to-container"], - }, - ); + terminalRendererDebug.info("runtime-attach-to-container", { + terminalId: runtime.terminalId, + containerWidth: container.clientWidth, + containerHeight: container.clientHeight, + }); measureAndResize(runtime); // Renderer may have skipped frames while the wrapper was detached. diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts index f86e6746a3e..f842e4ed1a2 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/helpers.ts @@ -158,14 +158,9 @@ export function createTerminalInWrapper(options: CreateTerminalOptions = {}): { try { webglAddon = new WebglAddon(); - terminalRendererDebug.info( - "webgl-addon-loaded", - { suggestedRendererType: suggestedRendererType ?? "auto" }, - { - captureMessage: true, - fingerprint: ["terminal.renderer", "webgl-loaded"], - }, - ); + terminalRendererDebug.info("webgl-addon-loaded", { + suggestedRendererType: suggestedRendererType ?? "auto", + }); webglAddon.onContextLoss(() => { webglAddon?.dispose(); webglAddon = null; diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalLifecycle.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalLifecycle.ts index fa3efc25bd2..af196eb37c3 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalLifecycle.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalLifecycle.ts @@ -226,11 +226,7 @@ export function useTerminalLifecycle({ if (DEBUG_TERMINAL) { console.log(`[Terminal] Mount: ${paneId}`); } - terminalRendererDebug.info( - "mount", - { paneId, workspaceId }, - { captureMessage: true, fingerprint: ["terminal.renderer", "mount"] }, - ); + terminalRendererDebug.info("mount", { paneId, workspaceId }); // Cancel pending detach from previous unmount const pendingDetach = pendingDetaches.get(paneId); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalRestore.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalRestore.ts index c78a12996a8..3e06035d4a2 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalRestore.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/hooks/useTerminalRestore.ts @@ -92,18 +92,11 @@ export function useTerminalRestore({ 0, pendingEventsRef.current.length, ); - terminalRendererDebug.info( - "flush-pending-events", - { - paneId, - eventCount: events.length, - dataEvents: events.filter((event) => event.type === "data").length, - }, - { - captureMessage: true, - fingerprint: ["terminal.renderer", "flush-pending-events"], - }, - ); + terminalRendererDebug.info("flush-pending-events", { + paneId, + eventCount: events.length, + dataEvents: events.filter((event) => event.type === "data").length, + }); for (const event of events) { if (event.type === "data") { terminalRendererDebug.observe( diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/v1-terminal-cache.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/v1-terminal-cache.ts index 93210cf4fe0..5ec1d8e2cf7 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/v1-terminal-cache.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/v1-terminal-cache.ts @@ -118,18 +118,11 @@ export function attachToContainer( container.appendChild(entry.wrapper); entry.openOnce(); - terminalRendererDebug.info( - "cache-attach-to-container", - { - paneId, - hasSubscription: entry.subscription !== null, - streamReady: entry.streamReady, - }, - { - captureMessage: true, - fingerprint: ["terminal.renderer", "cache-attach-to-container"], - }, - ); + terminalRendererDebug.info("cache-attach-to-container", { + paneId, + hasSubscription: entry.subscription !== null, + streamReady: entry.streamReady, + }); if (container.clientWidth > 0 && container.clientHeight > 0) { entry.fitAddon.fit(); diff --git a/apps/desktop/src/shared/debug-channel.ts b/apps/desktop/src/shared/debug-channel.ts index 0cb61e8354c..26cf5f389ad 100644 --- a/apps/desktop/src/shared/debug-channel.ts +++ b/apps/desktop/src/shared/debug-channel.ts @@ -31,6 +31,9 @@ export interface DebugChannelOptions { transport?: DebugChannelTransport; mirrorToConsole?: boolean; maxStringLength?: number; + // true (default) の場合、aggregate flush が captureMessage を送る。 + // false にすると aggregate は Breadcrumb だけを残す。 + captureMessageByDefault?: boolean; } export interface DebugLogOptions { @@ -123,6 +126,7 @@ export class DebugChannel { private readonly transport?: DebugChannelTransport; private readonly mirrorToConsole: boolean; private readonly maxStringLength: number; + private readonly captureMessageByDefault: boolean; private readonly aggregates = new Map(); constructor(options: DebugChannelOptions) { @@ -131,6 +135,7 @@ export class DebugChannel { this.transport = options.transport; this.mirrorToConsole = options.mirrorToConsole ?? true; this.maxStringLength = options.maxStringLength ?? DEFAULT_MAX_STRING_LENGTH; + this.captureMessageByDefault = options.captureMessageByDefault ?? true; } log( @@ -250,7 +255,7 @@ export class DebugChannel { key, metric, options?.level ?? "info", - options?.captureMessage ?? true, + options?.captureMessage ?? this.captureMessageByDefault, ); }, intervalMs); } @@ -259,7 +264,7 @@ export class DebugChannel { flushAll(): void { for (const key of this.aggregates.keys()) { const [metric] = key.split(":"); - this.flushAggregate(key, metric, "info", true); + this.flushAggregate(key, metric, "info", this.captureMessageByDefault); } }