feat(jobs): allow uncapped collect via full_result

job__collect's 50k-char tail cap is a safety default, but collect is
consume-once and the cap was mandatory — a model that genuinely needed
the complete output had no recourse. Add a full_result boolean that
skips the cap (tail_lines still honored; the session-wide
max_tool_result_chars limit still applies downstream), teach the
truncation banner to name the recourse, and point job__check's
output_bytes_captured at the collect decision.
This commit is contained in:
2026-08-26 12:53:17 -06:00
parent c376737bbd
commit 074083af31
2 changed files with 100 additions and 21 deletions
+3 -1
View File
@@ -198,7 +198,9 @@ pub(in crate::config) const DEFAULT_JOB_INSTRUCTIONS: &str = indoc! {"
working instead of blocking — completion arrives as a `system_notifications` entry on your
next tool result. Check progress with `job__check` (sparingly), block on the result with
`job__collect` (only when you have nothing else to do), cancel with `job__cancel`, and list
jobs with `job__list`. Collect or cancel every job you started before ending your turn. In
jobs with `job__list`. Collected results over 50,000 chars are tail-capped; collecting is
consume-once, so when you need the complete output pass `full_result: true` (or have the
command write to a file). Collect or cancel every job you started before ending your turn. In
graph LLM nodes, collect or cancel your jobs before ending your final node turn — an
uncollected job at node turn-end burns node iterations via the guardrail and can fail the
node. Jobs run against a snapshot of the current config/environment and do not survive