Expose UI logger controls globally
This commit is contained in:
@@ -41,14 +41,13 @@ The UI now routes all logging through a lightweight wrapper around [`debug`](htt
|
|||||||
- `session` – Session/model state, prompt handling, tool calls
|
- `session` – Session/model state, prompt handling, tool calls
|
||||||
- `actions` – User-driven interactions in UI components
|
- `actions` – User-driven interactions in UI components
|
||||||
|
|
||||||
You can enable or disable namespaces inside DevTools by importing the helpers:
|
You can enable or disable namespaces from DevTools (in dev or production builds) via the global `window.codenomadLogger` helpers:
|
||||||
|
|
||||||
```ts
|
```js
|
||||||
import { listLoggerNamespaces, enableLogger, disableLogger } from "./src/lib/logger"
|
window.codenomadLogger?.listLoggerNamespaces() // => [{ name: "sse", enabled: false }, ...]
|
||||||
|
window.codenomadLogger?.enableLogger("sse") // turn on SSE logs
|
||||||
listLoggerNamespaces() // => [{ name: "sse", enabled: false }, ...]
|
window.codenomadLogger?.disableLogger("sse") // turn them off again
|
||||||
enableLogger("sse") // turn on SSE logs
|
window.codenomadLogger?.enableAllLoggers() // optional helper
|
||||||
disableLogger("sse") // turn them off again
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Enabled namespaces are persisted in `localStorage` under `opencode:logger:namespaces`, so your preference survives reloads.
|
Enabled namespaces are persisted in `localStorage` under `opencode:logger:namespaces`, so your preference survives reloads.
|
||||||
|
|||||||
@@ -9,11 +9,19 @@ interface Logger {
|
|||||||
error: (...args: unknown[]) => void
|
error: (...args: unknown[]) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NamespaceState {
|
export interface NamespaceState {
|
||||||
name: LoggerNamespace
|
name: LoggerNamespace
|
||||||
enabled: boolean
|
enabled: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LoggerControls {
|
||||||
|
listLoggerNamespaces: () => NamespaceState[]
|
||||||
|
enableLogger: (namespace: LoggerNamespace) => void
|
||||||
|
disableLogger: (namespace: LoggerNamespace) => void
|
||||||
|
enableAllLoggers: () => void
|
||||||
|
disableAllLoggers: () => void
|
||||||
|
}
|
||||||
|
|
||||||
const KNOWN_NAMESPACES: LoggerNamespace[] = ["sse", "api", "session", "actions"]
|
const KNOWN_NAMESPACES: LoggerNamespace[] = ["sse", "api", "session", "actions"]
|
||||||
const STORAGE_KEY = "opencode:logger:namespaces"
|
const STORAGE_KEY = "opencode:logger:namespaces"
|
||||||
|
|
||||||
@@ -118,6 +126,21 @@ function enableAllLoggers(): void {
|
|||||||
applyEnabledNamespaces()
|
applyEnabledNamespaces()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const loggerControls: LoggerControls = {
|
||||||
|
listLoggerNamespaces,
|
||||||
|
enableLogger,
|
||||||
|
disableLogger,
|
||||||
|
enableAllLoggers,
|
||||||
|
disableAllLoggers,
|
||||||
|
}
|
||||||
|
|
||||||
|
function exposeLoggerControls(): void {
|
||||||
|
if (typeof window === "undefined") return
|
||||||
|
window.codenomadLogger = loggerControls
|
||||||
|
}
|
||||||
|
|
||||||
|
exposeLoggerControls()
|
||||||
|
|
||||||
export {
|
export {
|
||||||
getLogger,
|
getLogger,
|
||||||
listLoggerNamespaces,
|
listLoggerNamespaces,
|
||||||
|
|||||||
16
packages/ui/src/types/global.d.ts
vendored
16
packages/ui/src/types/global.d.ts
vendored
@@ -1,5 +1,7 @@
|
|||||||
export {}
|
export {}
|
||||||
|
|
||||||
|
import type { LoggerControls } from "../lib/logger"
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface ElectronDialogFilter {
|
interface ElectronDialogFilter {
|
||||||
name?: string
|
name?: string
|
||||||
@@ -37,10 +39,12 @@ declare global {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Window {
|
interface Window {
|
||||||
__CODENOMAD_API_BASE__?: string
|
__CODENOMAD_API_BASE__?: string
|
||||||
__CODENOMAD_EVENTS_URL__?: string
|
__CODENOMAD_EVENTS_URL__?: string
|
||||||
electronAPI?: ElectronAPI
|
electronAPI?: ElectronAPI
|
||||||
__TAURI__?: TauriBridge
|
__TAURI__?: TauriBridge
|
||||||
}
|
codenomadLogger?: LoggerControls
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user