Files
Kigi-CLI/crates/codegen/kigi-tui
ZacharyZhang-NY 7ade135e76 fix(tui): reassemble Windows key-burst pastes so repaste-to-expand works
On Windows, crossterm's console backend never emits Event::Paste: a
terminal paste arrives as a per-character key burst that the event loop
reassembles with timing heuristics. Three of its bounds split real
pastes into fragments:

- the 10 ms continue window is below one Windows scheduler quantum
  (~15.6 ms), so a routine mid-burst gap ended collection early;
- the 5000-event safety cap truncated any paste past ~5 KB;
- the 2 ms detection window missed bursts whose second chunk lagged,
  so collection never started.

Each fragment became its own synthetic paste. The paste chip then held
only the first fragment, and pasting again could never byte-equal the
chip content, so repaste-to-expand inserted a duplicate instead of
expanding — while macOS worked, because the unix parser buffers a
bracketed paste to the end marker and always delivers one whole event.

Widen the continue window past one quantum (25 ms), raise the cap above
any real paste (200k events), and skip the detection window entirely
when the batch already holds a >=8-key burst, which typing and
auto-repeat never produce. Unix paths are untouched: batches containing
a real Event::Paste never enter this reassembly.

Covered by a paused-clock test that trickles a burst tail with
one-quantum gaps and asserts it reassembles into a single paste.
2026-07-24 12:41:26 -04:00
..
2026-07-18 12:31:52 -04:00

kigi-tui

Terminal UI (TUI) for Kigi. Provides the interactive full-screen interface including the scrollback view, prompt input, session management, and all modal dialogs.

Architecture

src/
├── app/                 # Application state and event handling
│   ├── app_view.rs      # Top-level state (welcome screen, agents, config)
│   ├── agent_view/      # Per-session agent view (struct in mod.rs + per-domain impl modules)
│   ├── dispatch/        # Action → Effect dispatcher (router + per-domain modules)
│   ├── effects.rs       # Async side effects (ACP calls, file I/O)
│   └── event_loop.rs    # Main event loop (input, ticks, ACP messages)
├── views/               # UI components
│   ├── prompt_widget.rs # Text editor with file search, slash, history
│   ├── welcome/         # Welcome screen (logo, menu, prompt)
│   ├── extensions_modal.rs   # Extensions modal (hooks, plugins, marketplace, skills, MCP servers)
│   ├── file_search/     # @-completion dropdown and line viewer
│   ├── slash_dropdown.rs# /command completion dropdown
│   └── ...              # Scrollback, status bar, panes, etc.
├── scrollback/          # Message history rendering
├── slash/               # Slash command registry and built-in commands
├── appearance/          # Theme and pager.toml config
├── acp/                 # Agent Communication Protocol client state
└── render/              # Low-level rendering helpers (color, wrapping, etc.)

Key Concepts

  • AppView — owns the welcome screen, agent sessions, and global config
  • AgentView — one per session; owns the prompt, scrollback, tool panes, and modals
  • PromptWidget — text editor component with file search (@), slash commands (/), history search, and paste elements
  • Action/Effect — Elm-style architecture: input → Action → dispatch → Effect → state update

Keyboard Shortcuts

Key Context Action
Ctrl+P or ? Agent screen Open command palette
Ctrl+L Any (nonVS Code family) Open plugins/hooks modal; on VS Code / Cursor / Windsurf / Zed use /plugins or /hooks (Ctrl+L is mid-turn interject)
Tab Prompt Switch to scrollback
Esc Turn running No-op (does not cancel; use Ctrl+C)
Esc Esc Idle, non-empty prompt Clear prompt (within 800ms; first press shows hint)
Esc Esc Idle, empty prompt + messages Open rewind picker (silent first press)
Ctrl+M Prompt Toggle multiline mode
Shift+Enter Prompt Insert newline
/ Prompt Start slash command
@ Prompt Start file search
! Prompt (empty) Enter bash mode
Ctrl+C Prompt (with text) Clear prompt (even while turn running)
Ctrl+C Prompt (empty) + turn running Cancel running turn

Docs