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:
@@ -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.
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user