fix(omp): keep parent non-idle while internal task subagents run (port of upstream #3371) - #29
Merged
Merged
Conversation
OMP can end the parent model loop while `task` children are still writing. Do not complete the Paseo turn until the subagent index reports no runners. Reconcile successful get_subagents replies so listed ids stay running, and treat absence of a previously listed id as completed. Never-listed lifecycle children stay running so an empty first snapshot cannot fake-idle the parent. Closes getpaseo#2232
OMP emits tool_execution_end for `task` as a dispatch ack, then starts children. Keep the parent call running and settle it from the subagent index once a linked child exists and none remain running. completeTurn force-settles a task that never produced a child. Wire-order tests emit the result before subagent_lifecycle started.
joeshull
force-pushed
the
omp-idle-gate-3371
branch
from
August 21, 2026 21:59
750be93 to
fa9fc5e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upstream issue: getpaseo#2232
Upstream pull request: getpaseo#3371
Upstream head repository: jasonhnd/paseo
Upstream head: fa9fc5e
Direct import of upstream getpaseo#3371. Both commits are @jasonhnd's, unmodified: this branch is that pull request's head commit exactly, so the fork and upstream patch sets are identical in content and order.
What it does
OMP can end the parent model loop (
agent_end+!isStreaming && !isCompacting) while internaltaskchildren are still writing, so Paseo marked the parent idle while work continued (upstream getpaseo#2232).get_subagentsreply lists only still-running children, so an id that previously appeared and is now missing is treated as completed. A child seen only via lifecycle is not killed by an empty first reply.tasktool_execution_endis a dispatch acknowledgement, not a result, so the card stays open until the index has a linked child and none are running.Adds validated
get_subagentsRPC support to the CLI runtime.Why import it now
Upstream getpaseo#3371 is still open and changes the same function as #25. Importing it first keeps the two changes from colliding and lets #25 rebase onto
internal/mainafterwards. Upstream getpaseo#3371 replaces the closed upstream getpaseo#2245, which review rejected because snapshot reconcile never treated a disappearedget_subagentsid as terminal — the stuck-running-parent risk this rewrite fixes.Preflight
The branch is based directly on upstream
mainat23853a151(verified an ancestor of fetchedgetpaseo/paseo:main), does not descend frominternal/main, and changes onlypackages/server/src/server/agent/providers/omp.Verification
Run against this repository's dependencies:
npx vitest run packages/server/src/server/agent/providers/omp— 19 files, 127 tests passnpm run linton the omp provider — 0 warnings, 0 errorsnpm run format:check— cleannpm run typecheckon the upstream base reports missing-module errors for@replit/codemirror-lang-csharpand@paseo/plugin, which come from resolving this checkout'snode_modulesagainst an older lockfile, not from these commits. CI installs from the merge result and is the authority here.I did not re-verify against a live OMP process; see the upstream pull request for the author's own QA.
Merge order
Merge this first. #25 bounds all three of the gate's wait conditions, including the subagent wait added here, and rebases onto
internal/mainonce this lands.