Expand description
GAP-004 (v1.0.82): Cross-process slot semaphore for LLM subprocesses.
acquire_llm_slot limits concurrent codex/claude spawns per host
to prevent OAuth rate limit saturation when N+ sessions run in parallel.
GAP-004 (v1.0.82): Semáforo cross-process para spawn de subprocessos LLM.
Quando N sessões Claude Code rodam em paralelo no mesmo host, cada remember/edit/
recall/hybrid-search/enrich/deep-research/ingest quer spawnar seu próprio
subprocesso codex exec ou claude -p. Sem coordenação, N subprocessos saturam
o rate limit OAuth compartilhado (observado: 19+ codex simultâneos no transcript
de 2026-06-15).
§Solução
- Slot files em
${XDG_RUNTIME_DIR:-~/.local/share}/sqlite-graphrag/llm-slots/slot-{0..N}.lock fs4::FileExt::try_lock_exclusivepara atomic acquire cross-process (fcntl no Unix, LockFileEx no Windows —fs40.9 com trustScore 9.6 confirmado via context7)- RAII guard
LlmSlotGuardcomDroplibera automaticamente em panic - Integração com
reaper.rs::scan_and_kill_orphanspara detectar slots órfãos
§Uso
ⓘ
use crate::llm_slots::acquire_llm_slot;
let _guard = acquire_llm_slot(4, 30)?;
// ... spawn subprocesso LLM ...
// guard libera o slot automaticamente ao sair do escopoStructs§
- LlmSlot
Guard - RAII guard que libera o slot automaticamente em panic, cancelamento abrupto ou término normal do escopo.
- Slot
Status - Retorna o status atual dos slots LLM (para subcomando
slots status --json).
Functions§
- acquire_
llm_ slot - Adquire um slot LLM livre, aguardando até
wait_secssegundos. - default_
max_ concurrency - Resolves the default LLM max-host-concurrency value.
- find_
stale_ slots - Lista IDs de slots stale (PIDs órfãos) — para cleanup automático.
- force_
release - Libera um slot específico (para subcomando
slots release --slot-id N --yes). - read_
status - slot_
path - slots_
dir