mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-17 13:13:35 +08:00
H5 access broke after switching Wi-Fi: the previously saved private-LAN host (e.g. 192.168.1.207) was no longer bound to any interface on the current network (which had moved to 192.168.0.x), but commit da8308de only refreshed the stale *port* and kept the stale *hostname*. The QR code therefore pointed at an IP this machine no longer had, and phones got TCP-refused. Two changes: 1. resolveEffectiveH5PublicBaseUrl now accepts the set of local IPv4 hosts and, when the stored URL is a plain private-LAN HTTP URL whose hostname is no longer on any interface, falls back to the auto-discovered URL — without overwriting the stored value, so switching back to the original network restores it automatically. 2. H5AccessService.updateSettings now validates the publicBaseUrl on save. Plain LAN URLs whose host is not on any local interface are rejected with a 400 + suggested LAN IP. Reverse-proxy URLs (https, custom path, hostname targets) are accepted unchanged because reachability is owned by the user's tunnel / nginx / cloudflared setup, not the desktop. GET /api/h5-access also returns a diagnostics block (storedHostStaleness, suggestedHost, localInterfaceHosts, effectivePublicBaseUrl) so the desktop Settings page can render a warning banner with a one-click switch to the current LAN IP, plus a quieter note for proxy URLs. Constraint: Reverse-proxy users may legitimately point H5 at a hostname that is not on this machine's network adapters; we must not regress that path. Rejected: Reachability-probe arbitrary public URLs from the server | the desktop cannot reliably round-trip through the user's external tunnel and should not pretend to validate it. Rejected: Overwrite the stored host with the auto host | users on multi- network laptops would lose their pinned WSL/Docker-aware choice on every Wi-Fi switch. Confidence: high Scope-risk: moderate Directive: Do not narrow validateH5PublicBaseUrl to reject reverse-proxy URLs without restoring an explicit opt-in path for them. Tested: bun test src/server/__tests__/h5-access-service.test.ts (21 pass) Tested: bun test src/server/__tests__/h5-access-api.test.ts src/server/__tests__/h5-access-auth.test.ts src/server/__tests__/h5-access-policy.test.ts (57 pass) Tested: bun run check:server (840 pass) Tested: bun run lint && bun test --run in desktop/ (734 pass, 91 files, +3 new H5 banner / proxy-note / save-error cases) Not-tested: Real phone scan against a packaged desktop build after a Wi-Fi switch. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude Code Haha Desktop
基于 Tauri 2 + React 的桌面客户端。
开发
bun install
bun run tauri dev
构建
# macOS (Apple Silicon)
./scripts/build-macos-arm64.sh
# Windows (x64, MSI only)
.\scripts\build-windows-x64.ps1
构建产物位于 build-artifacts/ 目录,文件名会显式包含平台、架构和包类型。
常见问题
macOS 提示"已损坏,无法打开"
xattr -cr /Applications/Claude\ Code\ Haha.app