Skip to content

v0.52.0

Latest

Choose a tag to compare

@nicobailon nicobailon released this 19 Aug 23:34
· 1 commit to main since this release

This release is mostly about making async workflows sturdier. Runs that used to fail or lose results from transient hiccups — a briefly locked status file, a stalled child, a paused supervisor hand-off — now recover and finish. You can also peek into a running or completed async child on demand, and platform noise on macOS sandboxes and Windows is gone. Nine external contributors have fixes in this release.

Highlights

  • Async workflows survive transient trouble: a locked status file no longer fails a completed child or aborts its siblings, paused supervisor hand-offs reconcile cleanly, and stalled children now wake the idle parent.
  • Inspect any async child on demand — its task, recent transcript, and final output — without spending a model turn, and that output stays available after the result is delivered.
  • Cleaner on every platform: no more setuid /bin/ps warnings under macOS/FreeBSD sandboxes like nono, and no more console windows flashing on Windows during a busy run.
  • Better model support: children can inherit the parent's session model (good for gateways and proxies), and Hugging Face-style owner/name model ids resolve correctly.

Need to know

If you previously disabled the builtin gpt-pro agent with agentOverrides.gpt-pro.disabled, remove that override — gpt-pro is now an optional Surf package integration, not a builtin.

Full changelog

Highlights

  • Async workflows are much harder to break mid-flight: a transient status-file lock, a stalled child, or a paused supervisor hand-off no longer fails or loses an otherwise healthy run.
  • Hosts can now inspect a running or completed async child on demand — task, recent transcript, and final output — without spending a model turn, and that output stays available after delivery.
  • macOS and FreeBSD sandboxes stop warning about setuid /bin/ps, and Windows stops flashing console windows during busy runs.
  • Gateway and proxy models work better: children can inherit the parent's session model, and Hugging Face-style owner/name model ids resolve correctly.

Added

  • Add /subagents-inspect-rpc, a host-facing bridge command that answers on-demand async child inspection requests with a correlated, bounded PI_SUBAGENT_INSPECT_JSON: widget payload (task, transcript window, final output), so RPC hosts can inspect children without a model turn while the live status feed stays small. Thanks to @yanqianglu for #1254.

Changed

  • Guide oracle plan and design advice through a short same-session consultation when a material tradeoff remains, while keeping the parent as final decision-maker (#1245).
  • Improve bundled role and parent prompts for source-first discovery in noisy codebases (#1247).
  • Make Surf's gpt-pro agent an optional package integration instead of a pi-subagents builtin. If you disabled the old builtin workaround, remove agentOverrides.gpt-pro.disabled before using Surf's package agent. Thanks to @binhex for #1256.

Fixed

  • Stop spawning setuid /bin/ps for process start identity on macOS and FreeBSD. Sandboxes such as nono no longer report forbidden-exec-sugid from session leases, retention locks, external-job claims, or mission state. Those platforms stay fail-closed without pid-reuse detection. Thanks to @jdumas for #1273.
  • Stop a transient lock on status.json (seen on Windows) from failing an already-completed workflow child and aborting its still-running siblings. Status updates after launch now degrade to a subagent.workflow.status_write_failed event instead of failing the run, and a throwing onTrace host callback can no longer reject a child promise. Follow-up to #1143. Thanks to @MarcusNeufeldt for #1272.
  • Keep a still-paused workflow result when reconcile republishes updated child output during paused delivery, so a same-state revision is not overwritten or deleted as the old payload.
  • Persist async terminal status.json before publishing the result file, so observers cannot see a completed result while the run still looks running.
  • Stop Windows opening a console window for each helper process (Git, gh, PowerShell, npm root -g) spawned during a run, which made a busy run disruptive to work alongside. Thanks to @MarcusNeufeldt for #1274.
  • Keep completed inspect RPC output available from the durable completion replay after result delivery consumes its one-shot payload, including per-child inline result tails (#1254).
  • After a workflow child detaches for supervisor coordination, clear attention once the reply is delivered, keep subagent_wait blocked until the child exits, and reconcile the paused workflow when that child completes — even after the paused payload was already delivered. A timed-out workflow can also resume from its persisted child session when the workflow dir has no recovery descriptor. Thanks to @skystar567 for #1263.
  • Wake the idle parent when an async workflow child needs attention, and persist that control event on the enclosing workflow. Status already showed the stall; the parent notice did not. Thanks to @Yibo-Zhang for #1266.
  • Resolve Hugging Face-style owner/name model ids against the registry instead of treating every slash as provider/id. Fully qualified huggingface/owner/name still wins, and a first path segment that matches a registered provider still means provider/id. Thanks to @mr-brobot for #1264.
  • Keep public structured single-child calls synchronous when asyncByDefault:false and async is omitted. Thanks to @Nofuture123 for #1257.
  • Trust the running parent session model when no model is configured, so gateway and proxy parent models can launch children outside the host registry. Thanks to @Nofuture123 for #1258.
  • Isolate colliding inherited workflow child output defaults while preserving explicit output collision checks. Thanks to @Reverier-Xu for #1253.
  • Show a scheduled run's completion and name the schedule that produced it, so scheduled work no longer finishes silently in a session that cannot attribute it. Thanks to @albertgwo for #1246.
  • Show resume-first guidance for failed async runs only when a matching recovery descriptor exists, so missing recovery data no longer points users to a resume command that cannot work. Thanks to @graadient for #1241.
  • Keep bundled agent discovery stable across hot package updates, so long-running sessions do not parse newer bundled agent files with older loaded code. Thanks to @graadient for #1242.
  • Resolve relative extension paths against the defining agent file, so portable agent definitions load child extensions from the declared location. Thanks to @tayiorbeii for #1249.