#!/bin/sh # Ruleaza un agent opencode peste o lista de sarcini, in paralel. # ./run_opencode_batch.sh # Fiecare linie din lista e: # Exemplu: # 51_11062026Recolteaza transcripts/08_ANALIZĂ_ZILNICĂ/51_11062026.txt # Log per sarcina in .opencode/logs//.log - acolo te uiti # cand una iese prost, nu in stdout-ul amestecat al celor N rulari. # # Pana pe 18.09.2026 promptul era hardcodat "Recolteaza ", deci # scriptul mergea doar cu recoltorul. Acum linia e promptul, ca sa poata fi # folosit si cu redactor / corector, care au nevoie de prompturi diferite # per fisier. # # CAPCANA, patita pe 18.09.2026: linia NU se interpoleaza in corpul lui # `sh -c` (adica nu `sh -c 'line="{}"; ...'`). Un prompt care contine # paranteze, ghilimele sau `<` ajunge sa fie parsat de shell si rularea # crapa cu "not found" / "File name too long", iar promptul nu ajunge # niciodata la model. Linia se paseaza ca ARGUMENT ($1), unde shell-ul nu # o mai reinterpreteaza. set -e AGENT="$1"; PAR="${2:-3}"; LIST="$3" cd /workspace/atm-curs-dl mkdir -p ".opencode/logs/$AGENT" export AGENT xargs -a "$LIST" -d '\n' -P "$PAR" -I {} sh -c ' line="$1" n=${line%% *} p=${line#* } if [ "$n" = "$line" ]; then echo "ESEC (lipseste TAB): $n"; exit 0; fi if opencode run --agent "$AGENT" --auto "$p" \ > ".opencode/logs/$AGENT/$n.log" 2>&1; then echo "OK $n" else echo "ESEC $n" fi ' _ {}