Daeseon Yoo
Back to project
·Snapshot·3 min

Architecture overview — DalkkakAI as of 2026-05-31

Tauri 2 desktop app: React 19 renderer hosts xterm panes that attach to PTYs owned by a Rust backend, which spawns each pane into a per-pane tmux session.

System shape

┌─────────────────────────────────────────────┐
│ React 19 renderer  (apps/desktop/src)        │
│  App.tsx → react-mosaic layout + Sidebar     │
│  TerminalPane.tsx ── attaches DOM node ───┐  │
│  terminalRegistry.ts (xterm + PTY id map)  │  │
└──────────────────┬──────────────────────────┘
                   │ Tauri IPC: pty_spawn / write / resize / kill
                   │           log_augmentor_event
                   │ Event stream: pty-output

┌─────────────────────────────────────────────┐
│ Rust backend  (apps/desktop/src-tauri/src)   │
│  lib.rs   — commands, tracing init           │
│  pty.rs   — portable-pty spawn + env hygiene │
│  capture.rs / hooks.rs / inline.rs /         │
│  summarize.rs / paths.rs                     │
└──────────────────┬──────────────────────────┘
                   │ spawns: bash -c "tmux new-session -A -D -s dalkkak-<id>"

        tmux server (-L dalkkak, system daemon)


           user shell / claude / npm / ...

Key libs / modules

Why these choices

Boundaries

State of completion

Phase 1 shipped as unsigned v0.1.0 beta on macOS Apple Silicon (multi-pane grid, tmux-backed persistence, multi-workspace sidebar, keyboard nav, two-layer logging). Viz layer v1 and a per-session status bar (Layer 1 + Layer 2 in-line self-summary via ADR-003) are landed but the Layer 2 summary path is measured at ~22–54s and the first-pane WKWebView Korean-IME case remains unresolved (workaround: split). Phases 2–4 (output augmentation, cross-workspace operator layer, signed release) are roadmap only; the augmentor's hardcoded patterns are an admitted dead-end pending a move to the Claude Code hooks API. Zero production users; the one-week dogfood test has not run.