mirror of
https://github.com/openclaw/openclaw.git
synced 2026-09-29 17:19:00 +08:00
* fix(pairing): honor gateway.publicOrigin for device join codes A loopback Gateway behind public HTTPS ingress sets gateway.publicOrigin, and cloud node enrollment already used it, but device join codes, the device-pair plugin, and Doctor's node-hosting check each resolved the pairing endpoint on their own and ignored it, failing with advice that omitted publicOrigin. Make src/pairing/setup-code.ts the single owner (device-pair publicUrl override, then gateway.publicOrigin, then existing discovery), expose it to the device-pair plugin through plugin-sdk/device-bootstrap, remove the plugin's duplicate resolver and enrollment's private fallback, and share one loopback error that names gateway.publicOrigin. * fix(pairing): preserve explicit remote endpoint selection Honor preferRemoteUrl before gateway.publicOrigin so qr --remote keeps its selected endpoint aligned with remote credentials. Retain publicOrigin as this Gateway's ingress ahead of automatic Tailscale, remote, and bind discovery, with the pairing-specific override taking precedence. Cover configurations with both URLs at the resolver and QR CLI boundaries, and correct the CLI, cloud-worker, and SDK precedence documentation. Validation: 221 focused tests passed; scoped core, extension, script, and test typechecks passed; independent review found no actionable P0-P2 issues. * fix(pairing): preserve device routes with explicit cloud ingress preference Keep existing device join-code, QR, and /pair discovery order. Use publicOrigin only at the loopback fallback, while cloud enrollment asks the same resolver to prefer public ingress at both preparation and issuance. Use the canonical lazy runtime binder for the SDK export so the collision guard recognizes one implementation without loading setup code at startup. Document the two call-site intents and cover Tailscale, LAN, loopback, and cloud enrollment behavior. Validation: export-name collision and SDK surface guards passed; 222 focused tests and scoped typechecks passed; independent review was clean. * chore(device-pair): drop the max-lines suppression the smaller plugin no longer needs * fix(device-pair): preserve origin-only setup URLs Retain the plugin command URL mapping through the shared pairing resolver while preserving context paths for join codes and cloud enrollment. Clarify public-origin fallback and remote QR prerequisites.