mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +00:00
feat(scripts): worktree() shell function applies the --go cd
This commit is contained in:
parent
b61f1ec36a
commit
af6ae72034
3 changed files with 58 additions and 5 deletions
49
.agents/shell/worktree.sh
Normal file
49
.agents/shell/worktree.sh
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# 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 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
|
||||
}
|
||||
|
|
@ -25,6 +25,8 @@ pnpm worktree kill [--force] # destrói o worktree em que o shell atual está
|
|||
|
||||
No opencode, isso é o comando **`/worktree next`** / **`/worktree kill`** (`.opencode/commands/worktree.md`), que só repassa `$ARGUMENTS` para o script.
|
||||
|
||||
No terminal interativo, para `--go` trocar de diretório de verdade, use a função `worktree()` de **`.agents/shell/worktree.sh`** (uma linha de `source` no profile): o script imprime `cd <dir>` e a função o aplica no shell que te chamou — node não consegue mudar o cwd do shell pai.
|
||||
|
||||
## Fluxo quando invocado como skill (agentes que não têm opencode)
|
||||
|
||||
1. Rode `pnpm worktree next` e leia a saída inteira. Se a fila estiver vazia, ele para sozinho — não crie worktree sem Issue.
|
||||
|
|
|
|||
|
|
@ -4,10 +4,11 @@
|
|||
*
|
||||
* pnpm worktree next [--go] cria worktree a partir de origin/main para a
|
||||
* próxima Issue claimável; branch `<code>-<slug>`.
|
||||
* Com `--go`, imprime `cd <dir>` no fim para o
|
||||
* shell chamador aplicar (node não muda o cwd
|
||||
* do shell pai; no terminal: `eval "$(pnpm
|
||||
* worktree next --go)"`).
|
||||
* Com `--go`, imprime `cd <dir>` no fim — node
|
||||
* não muda o cwd do shell pai; o shell chamador
|
||||
* aplica (opencode/CDP usa o opencode command;
|
||||
* terminal interativo: função `worktree()` em
|
||||
* `.agents/shell/worktree.sh`, sourced no profile).
|
||||
* pnpm worktree kill [--force] destrói o worktree em que o shell atual está
|
||||
* (recusa worktree sujo sem `--force`)
|
||||
*
|
||||
|
|
@ -131,7 +132,8 @@ const subcommand = positional[0]
|
|||
if (!subcommand) {
|
||||
console.log('Uso: pnpm worktree next [--go] | kill [--force]')
|
||||
console.log(' next [--go] cria worktree da próxima Issue claimável (branch <code>-<slug>);')
|
||||
console.log(' com --go imprime `cd <dir>` no fim para o shell chamador aplicar')
|
||||
console.log(' com --go imprime `cd <dir>` no fim (quem aplica o cd: opencode')
|
||||
console.log(' command, ou a função `worktree()` de .agents/shell/worktree.sh)')
|
||||
console.log(' kill [--force] destrói o worktree em que você está (recusa sujo sem --force)')
|
||||
process.exit(1)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue