CodeNomad/packages/ui
Pascal André bb39dab1fc
perf(ui): harden bounded transcript memory
Re-scope the renderer-memory fix on the native V2 baseline after removal of the duplicate Tauri event transport. Bound Markdown, reasoning, tool output, diagnostics, diffs, task steps, todos, and per-message part rendering while retaining complete authoritative content behind lazy copy actions.

Coordinate message records and derived render caches under one 64 MiB byte-aware LRU. Protect mounted, loading, and live transcripts; cap pending parts and prompt display overrides; fence stale cache writes; and conservatively account measurement failures.

Reload evicted transcripts through bounded complete V2 pagination, reject stale lifecycle completions, purge all per-instance session state, and prevent delayed SSE/delta work from recreating removed stores. Keep DEV-v2 PR validation enabled without reintroducing native Tauri transport changes.

Validated with full UI and Electron typecheck, UI production build, 248 standard UI tests, 71 browser-condition UI tests, 118 Electron native tests, and git diff checks. The long-duration WebKit soak remains pending while the PR stays draft.
2026-08-13 13:09:45 +02:00
..
scripts refactor(build): share Monaco public asset copy helper 2026-02-10 10:49:05 +00:00
src perf(ui): harden bounded transcript memory 2026-08-13 13:09:45 +02:00
.gitignore feat(ui): add Monaco changes/files right drawer viewers 2026-02-09 21:00:40 +00:00
package.json fix(opencode): harden the shared V2 runtime 2026-08-13 03:28:11 +02:00
postcss.config.js Split workspace into electron and ui packages 2025-11-17 12:06:58 +00:00
README.md Expose UI logger controls globally 2025-12-06 12:17:33 +00:00
tailwind.config.js Split workspace into electron and ui packages 2025-11-17 12:06:58 +00:00
tsconfig.json Split workspace into electron and ui packages 2025-11-17 12:06:58 +00:00
vite.config.ts perf(ui): lazy-load markdown and defer diff rendering (#215) 2026-03-22 11:54:05 +00:00

CodeNomad UI

This package contains the frontend user interface for CodeNomad, built with SolidJS and Tailwind CSS.

Overview

The UI is designed to be a high-performance, low-latency cockpit for managing OpenCode sessions. It connects to the CodeNomad server (either running locally via CLI or embedded in the Electron app).

Features

  • SolidJS: Fine-grained reactivity for high performance.
  • Tailwind CSS: Utility-first styling for rapid development.
  • Vite: Fast build tool and dev server.

Development

To run the UI in standalone mode (connected to a running server):

npm run dev

This starts the Vite dev server at http://localhost:3000.

Building

To build the production assets:

npm run build

The output will be generated in the dist directory, which is then consumed by the Server or Electron app.

Debug Logging

The UI now routes all logging through a lightweight wrapper around debug. The logger exposes four namespaces that can be toggled at runtime:

  • sse Server-sent event transport and handlers
  • api HTTP/API calls and workspace lifecycle
  • session Session/model state, prompt handling, tool calls
  • actions User-driven interactions in UI components

You can enable or disable namespaces from DevTools (in dev or production builds) via the global window.codenomadLogger helpers:

window.codenomadLogger?.listLoggerNamespaces() // => [{ name: "sse", enabled: false }, ...]
window.codenomadLogger?.enableLogger("sse") // turn on SSE logs
window.codenomadLogger?.disableLogger("sse") // turn them off again
window.codenomadLogger?.enableAllLoggers() // optional helper

Enabled namespaces are persisted in localStorage under opencode:logger:namespaces, so your preference survives reloads.