teqo-backup/.agents/shell/worktree.sh
Francisco Solla 6c8c466b40 fix(worktree): plan cria um worktree diferente por invocação (paralelismo /plan-issue)
Cada 'pnpm worktree plan' agora deriva um branch próprio: plans/plan-issue-<bag>
quando um bag é passado (sufixo -2/-3 em colisão) ou o próximo sequencial
plans/plan-issue-<n> quando não. O prefixo minúsculo plans/… nunca colide com o
branch <Code>-<slug> de 'next'. planBranchName (scripts/lib/worktree.mjs)
unit-testado; docs e shell/command atualizados.
2026-08-08 16:40:05 -03:00

54 lines
1.8 KiB
Bash

# worktree — CLI determinístico de worktrees em torno da fila de claim, com um
# `--go` que realmente troca de diretório.
#
# A lógica determinística (fila → branch → worktree) vive em scripts/worktree.mjs;
# esta função é só a camada de shell que APLICA o `cd <dir>` que o script imprime,
# porque um processo filho (node) não consegue mudar o cwd do shell que o chamou.
#
# Instalação (uma linha no profile):
# source <repo>/.agents/shell/worktree.sh
#
# Uso (terminal interativo):
# worktree next [--go] cria/reutiliza o worktree da próxima Issue claimável;
# com --go, cd para dentro dele
# worktree plan [bag] [--go] cria um worktree de planejamento do /plan-issue
# DIFERENTE a cada chamada (sessões paralelas): com bag,
# branch plans/plan-issue-<bag> (sufixo -2/-3 se o nome
# já existir), sem bag o próximo plans/plan-issue-<n>
# sequencial; com --go, cd para dentro dele
# worktree kill [--force]
#
# Read-only no GitHub — claim continua sendo `pnpm agent:claim`.
worktree() {
local src="${BASH_SOURCE[0]:-$0}"
local root
root="$(cd "$(dirname "$src")/../.." && pwd)"
local has_go=0
local arg
for arg in "$@"; do
if [ "$arg" = "--go" ]; then
has_go=1
fi
done
if [ "$has_go" -eq 0 ]; then
node "$root/scripts/worktree.mjs" "$@"
return $?
fi
local out
out="$(node "$root/scripts/worktree.mjs" "$@")" || return $?
printf '%s\n' "$out"
local dir
dir="$(printf '%s\n' "$out" | sed -n 's/^cd //p' | tail -n 1)"
if [ -n "$dir" ] && [ -d "$dir" ]; then
cd "$dir" || return $?
printf '→ %s\n' "$PWD"
else
printf 'worktree: não consegui aplicar o `cd` da saída do script.\n' >&2
return 1
fi
}