Failed scheduler tasks stayed in Error when their chats resumed outside the
scheduler runner, even after successful replies and a persistence reload.
Persist the owning task UUID in chat context data and reconcile successful
main-agent monologues with the associated errored task. Save Idle, the
recovered result and its completion timestamp through a checked update.
Preserve planned launch progression, normal retry callbacks and unrelated,
disabled, removed or reassigned tasks. Legacy dedicated chats resolve by
context ID; legacy shared chats still require an explicit scheduler retry.
Add regression coverage for failure, restoration, two successful chat steps,
all task types, JSON/YAML persistence, cancellation and ownership guards.
Update the scheduler and extension contracts.
Validation: 31 scheduler tests passed in the localhost:32081 container's
framework runtime. Broader lifecycle checks: 65 passed, with one unrelated
nudge fixture failure reproduced with reconciliation disabled. No live
provider/model-switch test or service restart.
Record the Chat Completions finish_reason on LLMResult and add a
message_loop_result extension that, when a turn stopped at the output
token limit (finish_reason "length"/"max_tokens") without a complete
tool request, retries with a warning naming truncation as the cause
rather than the generic misformat message. The warning counts toward
the existing unusable-response loop limit.
Context Doctor now leaves results already handled by an earlier
extension untouched, so truncated envelopes are not repaired and
dispatched with cut-off arguments.
Fixes#1836
Project intact call/result groups from the current prepared local Responses
input, retaining original IDs and encrypted reasoning. Bind replay to the
visible prefix and tool scope; preserve summaries, masking, protocol, extras
and untouched Chat/fallback input. Keep request conversion in Responses helpers.
Recover output items omitted by terminal stream envelopes and keep native
call commentary out of plain-response finalization. Do not rewrite stored
chats or change tool execution policy.
Validation: 1632 root tests passed, one skipped; framework prepared-prompt
probe passed. Live Codex and Venice presets completed terminal calls, native
replay advanced from three to four calls, and the viewer reported 57% cache hit.
Context Doctor's fw.msg_thoughts_fallback.md warning was excluded from the core stop-unusable-response loop allowlist, so consecutive plain-text fallbacks never advanced the counter. Add it alongside misformat, repeat, empty_response, and reasoning_only, update the plugin DOX, and cover the behavior with a regression test.
Context Doctor now persists the transformed thoughts JSON via hist_add_ai_response before emitting the fallback warning, matching the RepeatResponse retry pattern. Simplify is_thoughts_fallback to check tool_name absence so split multi-paragraph and native thoughts JSON are detected. Remove the core stop-unusable-response-loop counter for plugin-owned fallback warnings. Delete unreachable skip_default_processing block after the early fallback return.
Reasoning-only turns now retry with an agent-facing fw.msg_reasoning_only.md history warning and a separate fw.msg_reasoning_only_response.md user notice, counted by the stop-unusable-response-loop extension instead of falling through to the unclear misformat path. Context Doctor detects raw-text fallback conversions and claims the turn with fw.msg_thoughts_fallback.md agent warning and fw.msg_thoughts_fallback_response.md user notice, also counted by the stop loop. Both cases set skip_default_processing so the model gets a clear retry instruction.
Negotiate collection deltas and preserve sidebar row identity so high-rate log streams avoid resending and reconciling unchanged state. Bound streamed log fields, defer expensive response formatting until completion, update capped process groups only for new steps, and keep disconnect and terminal task state accurate. Add focused lifecycle, snapshot, sync, and WebUI regressions.
Let extensions normalize or consume each completed model result before default history and tool processing. Move repeat detection into loop control and add a dedicated empty-response warning so one turn produces one UI warning.
Reuse one normalized settings snapshot only while Agent.prepare_prompt builds a prompt, then restore normalize-on-read behavior immediately.
Keep the canonical get_settings function unchanged while prompt-building callers explicitly avoid repeated Git and default resolution.
Keep Agent Zero wrapper examples out of native function descriptions and expose the response text schema.\n\nRoute concatenated tool envelopes through repair before the plain response hook can render them as final text.
Require complete standalone text requests for execution while accepting supported text-tool formats. Route fenced and structurally broken tool intent through the existing misformat repair path so streamed chats do not remain in a thinking state.
Add a configurable circuit breaker for consecutive malformed or repeated model outputs. Expose the limit in Agent Settings and render the stop notice from a framework prompt.
When Responses mode accepts a plain-text final answer, reuse the active generating log item as a finished response entry so the WebUI does not remain on the Calling LLM step.
Skip normal tool JSON and existing live response-tool logs, and cover the fallback with focused regression tests.
Add comprehensive file-level DOX documentation across the repo and update directory AGENTS.md indexes. Many new `*.py.dox.md` files were added under api, helpers, tools, plugins, extensions, webui, and other dirs to document endpoint purpose, ownership, runtime contracts, work guidance, and verification. Several AGENTS.md files were created or updated (agents profiles, api, docker, extensions, helpers, plugins, skills, webui components, etc.) to list child DOX files and clarify documentation/work guidance. Also add example and bundled profile DOX files (agent0, default, developer, hacker, researcher) and minor updates to helpers/dirty_json.py and its tests. These changes improve on-disk documentation coverage and establish the convention that each direct runtime file should have a matching `*.dox.md` describing its contracts and verification steps.
- Change @extensible decorator to generate extension paths from full module and qualname hierarchies instead of flattened names
- Update extension path format from `{module}_{qualname}_{start|end}` to `_functions/<module>/<qualname>/{start|end}`
- Move all extension files to new deep directory structure under `_functions/` to match new path format
- Replace PathSpec.from_lines(GitWildMatchPattern, ...) with PathSpec.from_lines