Repository navigation
fix: use the bundle-compatible Proxyline runtime under Bun - #140411
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Dependency GuardThis PR changes dependency-related files. Maintainers should confirm these changes are intentional. Changed files:
Maintainer follow-up:
|
Dependency graph changes notedThis PR includes dependency graph changes. The dependency guard is informational because the PR author is a repository admin, a member of
Security review is still recommended before merge when the dependency graph change is intentional. |
|
Codex review: blocked before merge. Reviewed September 6, 2026, 5:12 PM ET / 21:12 UTC. ClawSweeper reviewWhat this changesUpdates Proxyline to 0.3.11 for Bun-compatible, bundleable networking, adds a version-specific dependency cooldown exception, and disables Bun package auto-install in the relocated-worker test. Merge readiness⛔ Blocked before merge - 1 item remains This remains a useful, maintainer-owned fix: inspected main still pins Proxyline 0.3.7, and no introduced defect was found. The updated evidence addresses the previous upstream-review request; upstream source and publication claims could not be independently rechecked here. Priority: P2 Review scores
Verification
How this fits togetherProxyline supplies OpenClaw’s process-level proxy transport and fetch runtime. Standalone workers bundle networking dependencies so their WebSocket and transcription connections work after relocation without installed packages. flowchart LR
A[Configured proxy] --> B[OpenClaw proxy lifecycle]
B --> C[Proxyline runtime]
C --> D[Installed Undici peer]
E[Worker build] --> F[Bundled transport]
D --> F
F --> G[Relocated worker connections]
Before merge
Agent review detailsSecurityNone. PR surfaceTests +1, Config +2, Other 0. Total +3 across 4 files. View PR surface stats
Review metrics
Technical reviewBest possible solution: Keep installed-peer selection and bundle compatibility in Proxyline, preserving OpenClaw’s existing transport lifecycle and worker packaging contracts. Do we have a high-confidence way to reproduce the issue? No independently established current-main reproduction was run in this read-only review; the body records concrete installed-peer and relocated-worker failures and successful Node/Bun results after the fix. Is this the best way to solve the issue? Yes, the dependency-owned repair matches OpenClaw’s existing installed-peer and bundling patterns, and the test adjustment preserves its negative control; upstream implementation details remain supported by supplied review evidence rather than direct inspection here. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 98adc95c79d4. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (1 earlier review cycle)
|
|
Merged via squash.
|
* commit '294df333c58f2da104eccffc623ccb3c4d43d4d8': (1802 commits) fix: clear stale diagnostics after Gateway changes (#140426) fix: keep plugin catalogs intact after discovery timeouts (#140441) perf(tui): prepare session picker rows once per overlay (#140462) refactor(config): reuse environment substitution for write-back (#140460) refactor(discord): remove retired auto-presence templates (#140463) fix(ui): finish roster refreshes during session activity (#140459) fix(setup): match prepared credentials to the model provider (#140461) fix: keep MiniMax discovery on the selected credential (#140438) refactor(tests): remove unused parent context cache reset (#140456) fix: avoid repeated xAI OAuth refresh during discovery (#140434) perf(routing): reuse prepared event session targets (#140454) fix(media): keep deferred audio and extraction providers discoverable (#139231) refactor(codex): remove redundant app-server forwarding (#140451) fix(test): avoid false native polling timeouts (#140119) test(gateway): retain saved source in reload fixtures (#140453) fix(gateway): reduce repeated model work when listing sessions (#140414) fix(feishu): fall back to post mode over table limit (#136382) fix: use the bundle-compatible Proxyline runtime under Bun (#140411) refactor(trace): reuse the canonical usage counter type (#140444) refactor(node-host): share execution policy result fields (#140446) ...
…140411) * fix: use the installed Proxyline peer under Bun * fix: retain Proxyline peer loading in worker bundles * test: disable package auto-install in relocated Bun workers
What Problem This Solves
Fixes an issue where Bun selects its built-in Undici compatibility module instead of OpenClaw's installed peer for Proxyline fetch classes and dispatcher cleanup. The update also preserves standalone worker bundling: the initial 0.3.10 candidate left a runtime package lookup in relocated worker output, and the upstream 0.3.11 repair removes that lookup.
Why This Change Was Made
Update
@openclaw/proxylinefrom 0.3.7 to the reviewed and published 0.3.11 release, retaining Undici 8.10.2. Proxyline now statically imports the explicitundici/index.jsentry, which selects the installed peer under Bun and lets the existing worker bundler include it. No OpenClaw bundler transform or runtime workaround is added. The existing relocated-worker fixture adds--no-installonly to its Bun child so its no-installed-dependency assertion cannot auto-install a package.Immediate adoption is explicitly approved. The only release-age exception is
@openclaw/proxyline@0.3.11, with removal after 2026-09-13 20:51 UTC. The prior 0.3.10 exception is removed. The 10,080-minute cooldown, strict enforcement, and other exclusions are unchanged.User Impact
OpenClaw retains a shared Undici runtime with Proxyline under Bun, including restoration of fetch globals and the original dispatcher. Standalone workers keep their bundled transport dependency. This does not establish full OpenClaw, Matrix, or every networking surface's compatibility with Bun.
Evidence
Upstream review and publication
src/env.ts,src/node-http.ts, andsrc/runtime.ts; see the published comparison and changelog. The normalization change uses a bounded linear scan while retaining matching semantics. Request ownership follows Node's selected pooled request, and temporary ownership tags are removed before retention. Pending sockets, timers, and temporary request hooks are cleaned by their owner; hook restoration checks continued ownership. Omitted timeouts retain the documented default and explicit zero remains unbounded. Observer exceptions cannot strand installed globals.Errorcould be replaced. The 0.3.11 correction retains the supplied error through the existing single-settlement path, while preserving absent-error and timeout behavior. Two ordinary owned-loopback regression cases failed before that correction and passed on Node and Bun afterward; reinspection found no remaining issue.a8dafd8d6a146763898e027b1473862fc37380b0. The lockfile records that verified integrity.OpenClaw consumer proof
MODULE_NOT_FOUND: undici/package.jsonfailure. It bundles and relocates the real transport entry, then verifies ordinary loopback WebSocket echo, lazy transcription, headers, and cleanup. All original assertions and timeouts remain unchanged; nine other cases were unselected in each runtime.require.resolve("ws/package.json")auto-installed/resolved ws from Bun’s cache. The earlier builtin attribution was incorrect. A Bun-only--no-installchild argument preserves and enforces the originalMODULE_NOT_FOUNDassertion, including when Bun has a cached copy. Both runtime cases passed after that single fixture correction.pnpm buildpassed, including declarations and runtime packaging. Fresh independent P0–P2 review of the complete four-file candidate passed with no actionable findings. New-head hosted required type, lint, and test checks must pass before landing. Earlier local monolithic validation attempts stopped at an external memory cap; completed local types/guards and equivalent previous-head hosted full lint were recorded separately, never as a passing monolithic local gate.