fc4180cbb3
- .claude/agents/fn-analizador/SKILL.md - .claude/agents/fn-constructor/SKILL.md - .claude/agents/fn-executor/SKILL.md - .claude/agents/fn-mejorador/SKILL.md - .claude/agents/fn-orquestador/SKILL.md - .claude/agents/fn-recopilador/SKILL.md - .claude/commands/app.md - .claude/commands/compile.md - .claude/commands/cpp-app.md - .claude/commands/create_functions.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| agent_cleanup_worktree | function | go | infra | 1.0.0 | impure | func AgentCleanupWorktree(repoRoot, branch, worktreePath string, pid int) error | Tear-down de un worktree creado por agent_launch_worktree_go_infra: manda SIGTERM al PID (espera 1s, luego SIGKILL si sigue vivo), corre `git worktree remove --force` y `git branch -D` (best-effort cada uno). Devuelve error SOLO si los tres pasos fallan — fallos individuales son esperados (cleanup doble, rama ya borrada, etc.). PID=0 desactiva el kill (util cuando el proceso ya murio o nunca arranco). Linux/Darwin: usa syscall.Kill. Windows: la funcion compila pero el kill nunca hace nada porque syscall.Kill no existe alli — documentar como skip. |
|
false | error_go_core |
|
|
error nil cuando al menos uno de los tres pasos (kill, worktree remove, branch -D) tuvo exito o se salto. error no-nil solo si los tres fallaron — incluye los tres mensajes para diagnostico. | true |
|
functions/infra/agent_cleanup_worktree_test.go | functions/infra/agent_cleanup_worktree.go |
Ejemplo
err := infra.AgentCleanupWorktree(
"$HOME/fn_registry",
"auto/0115-worktree-launcher-fn",
"$HOME/fn_registry/worktrees/0115-worktree-launcher-fn",
12345, // PID devuelto por AgentLaunchWorktree
)
if err != nil {
log.Printf("cleanup partial failure: %v", err)
}
Cuando usarla
Tras terminar (o abortar) un run lanzado con agent_launch_worktree_go_infra. Tambien util en defers de tests para garantizar limpieza: defer infra.AgentCleanupWorktree(repo, branch, wt, res.PID). Si el run sigue corriendo y solo quieres parar el proceso sin tocar git, llama tu mismo a syscall.Kill(pid, syscall.SIGTERM) — esta funcion hace mas que eso.
Gotchas
- Best-effort por diseño: cleanup doble no es error. Es deliberado para que
agent_runner_apipueda llamarla en abort handlers sin meter el sistema en bucle. - SIGTERM grace 1s: si claude tarda mas de 1s en cerrar limpiamente, se mata con SIGKILL — los buffers del log pueden quedar parcialmente escritos. Si necesitas mas grace, fork la funcion.
- Windows:
syscall.Killno existe en Windows. El codigo compila pero salta el kill silenciosamente. Para Windows real, swapsyscall.Killporos.Process.Kill()(requiere abrir el proceso primero conos.FindProcess). - Branch en HEAD del repo principal: si la rama a borrar es la checked-out branch del repo principal,
git branch -Dfalla — pero como worktree elimino ya su HEAD, en la practica nunca pasa con ramasauto/*. - Worktree con cambios sin commitear:
--forcelos descarta. Si necesitas preservar trabajo, commitea y push antes de llamar.