Skip to content

v1.0.13

Choose a tag to compare

@caesar0301 caesar0301 released this 19 Sep 14:06
· 740 commits to main since this release

Added

  • Add config-gated static breakpoints on the loop graph: agent.loop.debug.interrupt_before / interrupt_after pause the StrangeLoop before/after named stations (e.g. execute, finalize); the turn emits soothe.cognition.strange_loop.breakpoint.paused with the pending nodes and the next turn resumes the paused node.
  • Add strip_analysis_scratchpad() and scratchpad_mode parameter to render_synthesis_system_prompt: the synthesis system prompt can now instruct the model to self-classify its scenario inside an <analysis> scratchpad block, collapsing the former two-phase classify→generate pipeline into a single LLM call.

Changed

  • Replace two-phase synthesis classification with single-call scratchpad mode: when the heuristic fast-path is inconclusive, the synthesis system prompt renders in scratchpad mode so the model self-classifies and generates in one streaming call instead of a blocking ainvoke round trip followed by a streaming call.
  • Resume all pending same-thread clarification interrupts with one Command(resume=...): statically resolvable tool-approval followers (allow/deny rules) join the head's answer batch instead of each costing a full park → answer → resume round trip.
  • Reconcile the clarification inbox against CoreAgent checkpoint state on each execute turn: entries whose interrupt no longer exists on their fork thread are dropped, and interrupts pending on a thread but missing from the inbox are alerted via soothe.cognition.relay.reconciled.
  • Remove the classify_synthesis_scenario LLM entry point from the scenario classifier: heuristic classification is the only fast-path; non-conclusive cases fall through to scratchpad self-classification, eliminating a second LLM round trip and its unguarded hang risk.
  • Remove dead legacy and backward-compat code: fast_llm_client/_classify_llm synthesis shim, wrapped_legacy node path, soothe_config/**_kwargs unused parameters, legacy_root trace-store migration, and the endswith("?") regex fallback in veritas question detection.
  • Trim the DashScope multi-instance provider pool in config/develop/nano.yml and config/production/nano.yml from 16 endpoints to the 7 with valid credentials (ds2, ds4, ds5, ds6, ds7, ds9, ds10) and update the glm-mm router profile and example.env to match; blocked or invalid keys previously stalled failover ~3s per dead endpoint before reaching a working one.

Fixed

  • Wrap goal-completion synthesis streaming in asyncio.timeout(dispatch_idle_seconds): the synthesis LLM calls that previously hung indefinitely when the provider stalled now time out and fall back to generate_user_fallback_summary instead of blocking goal finalization forever.
  • Redirect stdin from /dev/null for Python and uv subprocess invocations in scripts/verify_finally.sh: broken parent-shell file descriptors previously caused init_sys_streams: bad file descriptor crashes during vulture, pin-alignment, alert-pipeline, and uv sync checks.
  • Persist client cwd as the loop workspace in ACP session/load, session/resume, and session/fork: reopening or forking a session now calls ensure_loop_registered with the client-supplied directory instead of letting the first prompt silently register the loop against the daemon workspace.
  • Propagate a GraphInterrupt escaping the parallel step driver to the graph runtime instead of recording the step as failed.