feat: ejecutar tests desde el dashboard TUI

Se añade opción "Run Tests" al menú del servidor en el dashboard TUI.
Ejecuta `go test -tags goolm -count=1 ./...` y muestra los resultados
en una pantalla dedicada (ScreenTestOutput) con scroll y opción de re-ejecutar.

Cambios:
- pkg/tui: nuevo MsgTestsDone, ScreenTestOutput, IntentRunTests, updateTestOutput
- pkg/tui/view.go: viewTestOutput con scroll y controles (↑↓ r 0)
- shell/tui/adapter.go: runTests() ejecuta go test con el env del manager
- shell/process/manager.go: buildEnv → BuildEnv (exportado) para que el adapter
  pueda construir el env completo con las variables de .env

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 02:21:17 +00:00
parent 828eb175fe
commit b6fe4f9135
6 changed files with 114 additions and 5 deletions
+5 -5
View File
@@ -174,7 +174,7 @@ func (m *Manager) Start(info AgentInfo) error {
cmd = exec.Command(bin, "-c", info.ConfigPath)
}
cmd.Env = m.buildEnv()
cmd.Env = m.BuildEnv()
cmd.Stdout = logFile
cmd.Stderr = logFile
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
@@ -385,7 +385,7 @@ func (m *Manager) LogPath(id string) string { return m.logPath(id) }
// Returns the combined output and any error.
func (m *Manager) Build() (string, error) {
cmd := exec.Command("bash", "build.sh")
cmd.Env = m.buildEnv()
cmd.Env = m.BuildEnv()
out, err := cmd.CombinedOutput()
return string(out), err
}
@@ -416,7 +416,7 @@ func (m *Manager) StartUnified() error {
cmd = exec.Command(bin, "--log-level", "info")
}
cmd.Env = m.buildEnv()
cmd.Env = m.BuildEnv()
cmd.Stdout = logFile
cmd.Stderr = logFile
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
@@ -654,8 +654,8 @@ func (m *Manager) removePID(id string) {
_ = os.Remove(m.pidPath(id))
}
// buildEnv returns the environment for child processes: current env + .env file vars.
func (m *Manager) buildEnv() []string {
// BuildEnv returns the environment for child processes: current env + .env file vars.
func (m *Manager) BuildEnv() []string {
env := os.Environ()
if m.envFile == "" {
return env