Repository navigation
Releases: cnmoro/rupi
Releases · cnmoro/rupi
Release list
v0.12.0
feat: let an agent start other agents, and bound what that can do "Spawn two subagents for adversarial review" had no answer before this: the system prompt never mentioned that the binary can run another agent, and there was no way to run one that returns an answer a caller can read. One shot - `-p "<task>"` runs one prompt and prints the final answer to stdout, nothing else, so it can be read out of a pipe. Exit 0 with an answer, 1 with the reason on stderr, 2 for an empty prompt, 3 when the agent limit refused it. - The answer is the last assistant message that carries no tool calls. Taking the last assistant message reported tool narration — "inspecting the parser" — as a finished answer with exit 0 when a run failed after a tool call. - A turn that did not finish fails instead of printing what it had. A stalled stream, a cut stream, a token limit, an abort and a cancellation are all fragments, and a caller reading stdout cannot tell a short answer from half of one. - `--list-sessions` and `--list-opencode-models` no longer pre-empt a prompt. Cut streams - A stream that ends with no `[DONE]` and no finish reason was cut off, and now says so: the turn ends as `truncated`, keeping the partial text. It used to be indistinguishable from a completed answer, so a dropped connection handed back half a sentence and every exit code said success. Measured: a socket closed mid-generation returned "partial thought that got cut off before", exit 0. Subagents in the system prompt - The agent is told how to start another with this binary's real path, how to run several at once, how to quote a task, what a failure looks like, and when not to bother. The bash ceiling and the agent limit are stated from the values actually in force. Bounding it - Every process the bash tool starts carries `RUPI_SUBAGENT=1`, and a starting agent also looks for a copy of itself among its parents. The marker alone was advisory: `env -i` stripped it and the grandchild was told it could start agents of its own, two levels deep and unaware. - `--max-agents` (default 12, `RUPI_MAX_AGENTS`) refuses a start beyond that many live processes of the same binary. Prompt text is not a limit. Measured with a provider that made every agent start another: the chain stopped at 12. 511 tests. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TrSm1KU4eXBomuonnfDaRb
v0.11.0
fix: close what five adversarial reviews proved, and what the fixes b…
v0.10.2
v0.10.2 — compaction replay, descendant kill, index staleness
v0.10.0
v0.10.0 — close the defects found by eleven adversarial reviews
v0.9.0
v0.9.0 — action fusion, spill hardening, checkpoint validation
v0.8.2
Release v0.8.2: runtime reliability, incremental search, and live-pro…
v0.8.1
v0.8.1 — task anchor, cache-aligned compaction, goal rounds, todo, sp…
v0.7.24
perf: aggressive KV cache optimizations
- Pre-allocate messages_for_api Vec with exact capacity to avoid realloc
- Cache serialized tool definitions in OpenAIProvider (serialize once at
construction, clone for each request instead of rebuilding)
- Add cache_control {"type": "ephemeral"} annotation to system
ChatMessage so compatible servers (vLLM, llama.cpp, etc.) explicitly
cache the KV state for the system prompt and all preceding messages
- Cap tool results at 4000 chars when storing in conversation history,
keeping first ~70% + last ~30% with truncation marker. Full results
still go to the event stream; only the stored copy is bounded.
This reduces per-turn prefill work by preventing huge file reads
from bloating every subsequent KV cache computation.
v0.7.23
v0.7.22
feat: tree-sitter AST-aware chunking for code search Replace line-based chunking with tree-sitter AST parsing (like seemb). Chunks are now syntactically meaningful: whole functions, classes, structs. 10 languages supported: rust, python, javascript, typescript, go, c, cpp, java, ruby, c-sharp. Falls back to line-based for unsupported languages. Bump version to 0.2.0.