feat(infra): grupo claude-fleet — FleetView TUI + orquestacion de Claudes

Sistema FleetView para centralizar la flota de procesos Claude Code vivos en una
sola ventana kitty + tmux (socket aislado -L fleet) con un panel TUI:

- list_claude_fleet (+ tipo claude_fleet): escanea ~/.claude/sessions + goals +
  runtime, valida procesos vivos (anti-PID-reciclado), join por sessionId.
- list_resumable_claudes (+ tipo resumable_claude): sesiones cerradas reanudables.
- wrappers tmux: tmux_new_claude_window (con --resume), tmux_swap_window_into_console
  (preserva ancho del sidebar), tmux_map_claude_panes.
- launch_kittyclaude: comando entrypoint; instala atajos alt+flechas/enter/n/0/k/r,
  mouse on, remain-on-exit off; fija el ancho del sidebar con hooks.
- docs/capabilities/claude-fleet.md + entrada en el INDEX.

Incluye ademas funciones datascience en progreso (excel/duckdb/postgres) y ajustes
varios de docs e infra de otra sesion, agrupados aqui para no perderlos.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 00:04:41 +02:00
parent 7d395f39e5
commit 927437a8d8
58 changed files with 5961 additions and 2 deletions
+47
View File
@@ -0,0 +1,47 @@
---
name: claude_fleet
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
type ClaudeFleet struct {
PID int `json:"pid"`
KittyPID int `json:"kitty_pid"`
SessionID string `json:"session_id"`
Rename string `json:"rename"`
Target string `json:"target"`
Goal string `json:"goal"`
Phase string `json:"phase"`
Status string `json:"status"`
Cwd string `json:"cwd"`
TmuxWindow string `json:"tmux_window"`
Alive bool `json:"alive"`
UpdatedAt int64 `json:"updated_at"`
}
description: "Registro de una sesion de Claude Code en la maquina local. Cruza el estado del proceso (/proc) con la metadata que Claude Code persiste en ~/.claude (sessions/<PID>.json + goals/<sessionId>.json). Pieza de datos de la app TUI fleetview, producida por list_claude_fleet_go_infra."
tags: [claude-fleet, infra, claude, session, process]
uses_types: []
file_path: "functions/infra/claude_fleet.go"
---
## Campos
| Campo | Tipo | Origen | Notas |
|---|---|---|---|
| `PID` | int | sessions/<PID>.json .pid | PID del proceso claude. |
| `KittyPID` | int | /proc/<pid>/environ (KITTY_PID) | 0 si no aplica (tmux remoto, environ ilegible). |
| `SessionID` | string | sessions .sessionId | UUID de la sesion. |
| `Rename` | string | derivado | Display name: goal truncado a 48 runas si existe, si no basename(cwd). |
| `Target` | string | derivado | sessionId[:8] + "@" + basename(cwd). |
| `Goal` | string | goals/<sessionId>.json .goal | "" si no hay sidecar. |
| `Phase` | string | goals .phase | "" si no hay sidecar. |
| `Status` | string | sessions .status | idle\|busy\|waiting. |
| `Cwd` | string | sessions .cwd | Working directory. |
| `TmuxWindow` | string | (reservado) | "" por ahora; se rellena en fase posterior. |
| `Alive` | bool | derivado de /proc | Proceso vivo Y procStart coincide (anti-PID-reciclado). |
| `UpdatedAt` | int64 | sessions .updatedAt | Epoch en milisegundos. |
## Notas
Tipo producto inmutable de hecho (lo construye `list_claude_fleet_go_infra` y se consume read-only). Vive en `functions/infra/claude_fleet.go` con build tag `//go:build !windows` porque la funcion productora depende de `/proc` (Linux). Misma fuente de verdad que `reboot_all_claudes_bash_infra`. `Alive`, `Target` y `Rename` son derivados; los demas son copia directa de los JSON de Claude Code 2.1.x.
+23
View File
@@ -0,0 +1,23 @@
---
name: resumable_claude
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
type ResumableClaude struct {
SessionID string `json:"session_id"`
Goal string `json:"goal"` // de goals/<id>.json .goal ("" si no hay)
Emojis string `json:"emojis"` // de goals/<id>.json .emojis ("" si no hay)
Name string `json:"name"` // de goals/<id>.json .rename ("" si no hay)
LastActive int64 `json:"last_active"` // mtime del goal.json en epoch segundos
}
description: "Describe una sesion de Claude Code CERRADA que aun conserva su objetivo guardado (goals/<id>.json) y por tanto puede reabrirse con `claude --resume <SessionID>`. La produce list_resumable_claudes_go_infra y la consume el picker de resume de la app TUI fleetview. SessionID es el basename del goal.json; Goal/Emojis/Name vienen de los campos goal/emojis/rename del goal.json; LastActive es el mtime del archivo en epoch segundos."
tags: [claude-fleet, infra, claude, session, resume, tui]
uses_types: []
file_path: "functions/infra/resumable_claude.go"
---
## Notas
Tipo producto plano, serializable a JSON con snake_case (`session_id`, `last_active`). Complementa a `claude_fleet_go_infra` (sesiones VIVAS) modelando las sesiones CERRADAS-pero-resumibles. Vive en el mismo paquete Go `infra` que la funcion que lo produce (`functions/infra/resumable_claude.go`), junto al tipo `ClaudeFleet`. `LastActive` es el `mtime` del `goal.json`, una aproximacion de "ultima actividad", no el instante exacto del ultimo mensaje de la conversacion.