- Crear Cargo workspace con crates vacíos según TRD.
appabre ventana GPUI “Hello” y cierra limpio.- CI local mínimo:
cargo build+cargo testen workspace. - Copiar/adaptar docs a la raíz del repo real.
- Commit:
chore: workspace bootstrap
Criterio de salida: cargo run -p app muestra ventana GPUI.
- Crate
terminal:- Integrar
libghostty-vt - PTY spawn (shell default, cwd configurable)
- Loop de lectura PTY →
vt_write - Input teclado básico → PTY
- Integrar
TerminalViewen GPUI:- Element que pinta celdas (texto + colores básicos)
- Resize
- Probar manualmente:
ls,vimonano, colores, resize.
Criterio de salida: un pane usable como terminal real.
Riesgo principal: rendering de glyphs y performance. Mitigar con snapshot de celdas + dirty regions simples; no optimizar prematuro.
- Sidebar de proyectos y sesiones por proyecto en memoria.
- Open project (dialog).
- Tabs de terminal dentro del proyecto.
- Split básico (2 panes).
- Focus y atajos mínimos.
Criterio de salida: un proyecto con 2–3 terminals en tabs/splits.
- Crate
git: status + diff text. - Panel Git en dock derecho.
- Lista de archivos + vista diff.
- Stage / unstage / discard (confirm) / commit.
Criterio de salida: flujo “ver diff → stage → commit” sin salir de la app.
- File tree lazy.
- Command palette con acciones MVP.
- Persistir anchos de sidebar/dock, proyectos recientes y tabs/splits entre reinicios.
Criterio de salida: cerrar y abrir la app recupera proyecto y tabs (shells frescos).
- Manejo de errores de PTY/Git.
- Tests unitarios en
gity helpers decore. - Settings mínimos (font size, scrollback limit).
- Pass de UX (empty states, confirmaciones).
- README con build instructions (Rust + Zig).
Criterio de salida: checklist de docs/MVP.md completa.
- Añadir el crate
agentscon el contratoAgentAdapter. - Integrar adapters CLI-first para OpenCode, Fx, Command Code, Grok Build, Antigravity, Cursor CLI, Codex y Pi.
- Persistir referencias de sesión (
provider+session_id+ cwd) sin persistir procesos, tokens ni transcripciones. - Añadir detección/listado en background donde el CLI ofrece una interfaz machine-readable y conservar el picker oficial dentro del PTY cuando no la ofrece.
- Separar “New shell” del palette de reanudación (
Cmd/Ctrl+Shift+R), con búsqueda, navegación por teclado y lista con scroll.
Criterio de salida: crear, restaurar y reanudar sesiones de agentes sin acoplar la UI a un proveedor concreto.
- QA manual en macOS de terminal, atajos, splits, resize, Git, branches y restore.
- Proteger checkout de branches cuando existan cambios locales.
- Mejorar distribución, firma y notarización cuando la funcionalidad sea estable.
core
↑
persistence, git, files, terminal
↑
workspace / ui
↑
app
chore: init workspace and empty crates
feat(app): open empty gpui window
feat(terminal): wrap libghostty-vt terminal state
feat(terminal): spawn pty and feed output
feat(terminal): render cells in gpui element
feat(terminal): keyboard input to pty
feat(workspace): open project and host terminal pane
feat(git): status and unified diff
feat(workspace): git panel with stage commit
...
| Área | Tipo | Notas |
|---|---|---|
| core paths / config | unit | |
| git status/diff parsing | unit + fixtures | repos temporales |
| terminal VT feed | unit si es estable; si no, manual + smoke | no flaky |
| UI | manual en MVP |
Si un test es inherentemente flaky (timing PTY), no se “arregla” con sleeps mágicos: se rediseña o se marca integración manual documentada.
- Cualquier decisión de arquitectura se anota en
docs/decisions/NNNN-titulo.mdo se actualiza el TRD. - Cambios de flujo →
FLOWS.md - Cambios de layout/atajos →
UX.md
- Rust stable reciente
- Zig (para libghostty-vt)
- Platform deps de GPUI (macOS: Xcode CLT; Linux: según GPUI)
Cuando el checklist MVP esté verde:
- Agent awareness avanzado (status badge, jump to attention)
- Diff side-by-side / editable hunks
- Worktrees
- Linux polish