Repository navigation
feat: add native RPC client and wire types - #897
Conversation
78aa0de to
0c68d15
Compare
0c68d15 to
68580bc
Compare
Source-Base: d099198 Source-Head: 68580bc Upstream-PR: band-ai#897
…s tree close() killed the child's session with SIGKILL before closing stdin, so Codex never saw the EOF it exits on and could do nothing at shutdown. Stdin now closes first and the session gets one second to end on its own; the tree kill remains the fallback. The session id stays reserved while any member lives, so a launcher shim's real CLI child that keeps the room directory is still reaped.
68580bc to
4b01955
Compare
The ACP bridge hides OMP's native lifecycle: sessions, model and thinking selection, host tool calls, permission dialogs and ask questions. This adds the transport a native adapter needs: OmpRpcClient (JSONL RPC over the omp process stdio, with process-tree reaping), typed wire frames, the native launch settings and SDK-owned MCP plugin projection in band.integrations.ompprocess, and the per-room session converter. The shared normalizer gains a namespace keyword so plugin-projected tool names map back to Band tools; omp_acp's spellings are unchanged.
4b01955 to
0b6c1e4
Compare
Source-Base: a3c187e Source-Head: 0b6c1e4 Upstream-PR: band-ai#897
Source-Base: a3c187e Source-Head: 0b6c1e4 Upstream-PR: band-ai#897
Source-Base: a3c187e Source-Head: 0b6c1e4 Upstream-PR: band-ai#897
Source-Base: a3c187e Source-Head: 0b6c1e4 Upstream-PR: band-ai#897
AlexanderZ-Band
left a comment
There was a problem hiding this comment.
Blocking findings cover process-tree cleanup, event backpressure, UI ask payloads, and test synchronization; see inline comments.
|
Could we make the two OMP transports an intentional supported surface? I want to keep the actual OMP-over-ACP wire path alongside the native RPC path. The Python import/API name is not part of that requirement and may change; please do not keep a compatibility wrapper solely to preserve it. Upstream OMP exposes distinct modes: Definition of done for maintaining both OMP transports
#898, #899, #900, #902, and #907 cover native RPC work. Please track the dual-transport support matrix and the remaining parity/lifecycle work as explicit follow-ups with owners. |
Source-Base: a3c187e Source-Head: 0f8e226 Upstream-PR: band-ai#897
|
Root cause found on this exact PR head: That counter is not a documented completion barrier after forced termination. |
AlexanderZ-Band
left a comment
There was a problem hiding this comment.
Requesting changes on the four blocking items above; suggestions and no-fix records are non-blocking context.
AlexanderZ-Band
left a comment
There was a problem hiding this comment.
One non-blocking maintainability suggestion; the frame-size boundary hypothesis was checked against pinned OMP 18.8.9 and dropped.
Fail closed on unmatched host frames and MCP startup UI, log transport failures, and track Windows descendants with the same env-marker scope POSIX already used. Shared process helpers now live with the Windows job helpers instead of the Codex client. Co-authored-by: Cursor <cursoragent@cursor.com>
|
On the Windows descendant cleanup in CI run 39746971790: CONFIRMED. 13ee3f3 keeps On dual-transport: out of scope for this transport-only ticket (INT-1890). Existing |
Co-authored-by: Cursor <cursoragent@cursor.com>
The previous guidance named coverage in the abstract, so reviews treated plumbing assertions, private patches, and wall-clock grace as style nits instead of blocking test-quality issues. Co-authored-by: Cursor <cursoragent@cursor.com>
The reader must honor negotiated frame limits immediately, stdin close must wait for in-flight writes, and fail-closed parse errors must log through the transport. Tests now inject public close/join seams and cover the complementary settlement and cancel branches. Co-authored-by: Cursor <cursoragent@cursor.com>
Group D kept finding leftover OS skips, in-test ifs, and private seams as a family. Drive those scenarios from public hooks, OS tables, and shared peer constants so each branch is a named claim. Co-authored-by: Cursor <cursoragent@cursor.com>
Nested jobs and breakaway look like missing features on this path. They are out of scope while close() drains the existing kill-on-close job. Co-authored-by: Cursor <cursoragent@cursor.com>
Overflow now records the transport ERROR, protocol failures omit frame payloads from logs, and close no longer waits on a drain that holds the write lock. Co-authored-by: Cursor <cursoragent@cursor.com>
…logy Co-authored-by: Cursor <cursoragent@cursor.com>
Record root-exit as a transport failure, join callbacks that start during the wait, and stop treating an empty UI reply as cancelled. Tighten plugin and converter tests onto product names. Co-authored-by: Cursor <cursoragent@cursor.com>
create_process wrappers that used create_subprocess_exec skipped the Windows job, so generated restart sequences could not reap descendants. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the wire vocabulary in one enum and send commands through the same frame encoder as host-tool replies. Co-authored-by: Cursor <cursoragent@cursor.com>
A five-second connection timeout was proving Windows children had arrived. Identify them as descendants of the current root instead. Co-authored-by: Cursor <cursoragent@cursor.com>
614a7b5 to
0b0620e
Compare
Source-Base: 0d5d8de Source-Head: 0b0620e Upstream-PR: band-ai#897
Source-Base: 0d5d8de Source-Head: 0b0620e Upstream-PR: band-ai#897
Why
A native OMP adapter needs direct access to sessions, model selection, host tool calls and structured UI requests without changing the ACP transport used by existing
omp_acpcallers.What
OmpRpcClient, typed wire models and native launch/MCP plugin support, plus per-room native session history conversion and theompextra.Scope
Transport and process ownership only; the native adapter is the next PR. POSIX descendant cleanup is best-effort ownership tracking, not a sandbox or a guarantee against unobservable process escape. Existing
omp_acpbehavior and its public adapter remain supported. Base:main.