Skip to content

Latest commit

 

History

History
149 lines (109 loc) · 4.67 KB

File metadata and controls

149 lines (109 loc) · 4.67 KB

Implementación — Plan técnico

Fase 0 — Bootstrap del monorepo (completada)

  1. Crear Cargo workspace con crates vacíos según TRD.
  2. app abre ventana GPUI “Hello” y cierra limpio.
  3. CI local mínimo: cargo build + cargo test en workspace.
  4. Copiar/adaptar docs a la raíz del repo real.
  5. Commit: chore: workspace bootstrap

Criterio de salida: cargo run -p app muestra ventana GPUI.

Fase 1 — Terminal mínimo (completada)

  1. Crate terminal:
    • Integrar libghostty-vt
    • PTY spawn (shell default, cwd configurable)
    • Loop de lectura PTY → vt_write
    • Input teclado básico → PTY
  2. TerminalView en GPUI:
    • Element que pinta celdas (texto + colores básicos)
    • Resize
  3. Probar manualmente: ls, vim o nano, 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.

Fase 2 — Workspace shell (completada)

  1. Sidebar de proyectos y sesiones por proyecto en memoria.
  2. Open project (dialog).
  3. Tabs de terminal dentro del proyecto.
  4. Split básico (2 panes).
  5. Focus y atajos mínimos.

Criterio de salida: un proyecto con 2–3 terminals en tabs/splits.

Fase 3 — Git + Diff (completada)

  1. Crate git: status + diff text.
  2. Panel Git en dock derecho.
  3. Lista de archivos + vista diff.
  4. Stage / unstage / discard (confirm) / commit.

Criterio de salida: flujo “ver diff → stage → commit” sin salir de la app.

Fase 4 — Files + Palette + Persistencia (completada)

  1. File tree lazy.
  2. Command palette con acciones MVP.
  3. 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).

Fase 5 — Endurecimiento MVP (completada)

  1. Manejo de errores de PTY/Git.
  2. Tests unitarios en git y helpers de core.
  3. Settings mínimos (font size, scrollback limit).
  4. Pass de UX (empty states, confirmaciones).
  5. README con build instructions (Rust + Zig).

Criterio de salida: checklist de docs/MVP.md completa.

Fase 6 — Sesiones persistentes y adapters de agentes (completada)

  1. Añadir el crate agents con el contrato AgentAdapter.
  2. Integrar adapters CLI-first para OpenCode, Fx, Command Code, Grok Build, Antigravity, Cursor CLI, Codex y Pi.
  3. Persistir referencias de sesión (provider + session_id + cwd) sin persistir procesos, tokens ni transcripciones.
  4. 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.
  5. 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.

Próximos pasos

  1. QA manual en macOS de terminal, atajos, splits, resize, Git, branches y restore.
  2. Proteger checkout de branches cuando existan cambios locales.
  3. Mejorar distribución, firma y notarización cuando la funcionalidad sea estable.

Orden de dependencias entre crates

core
  ↑
persistence, git, files, terminal
  ↑
workspace / ui
  ↑
app

Estrategia de commits (ejemplo)

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
...

Pruebas

Á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.

Documentación viva

  • Cualquier decisión de arquitectura se anota en docs/decisions/NNNN-titulo.md o se actualiza el TRD.
  • Cambios de flujo → FLOWS.md
  • Cambios de layout/atajos → UX.md

Build prerequisites (documentar en README)

  • Rust stable reciente
  • Zig (para libghostty-vt)
  • Platform deps de GPUI (macOS: Xcode CLT; Linux: según GPUI)

Después del MVP

Cuando el checklist MVP esté verde:

  1. Agent awareness avanzado (status badge, jump to attention)
  2. Diff side-by-side / editable hunks
  3. Worktrees
  4. Linux polish