Skip to content

fix: client dev server proxy + centralize port defaults to 9460-9463#840

Open
AnrokX wants to merge 4 commits intomainfrom
fix/client-port-investigation
Open

fix: client dev server proxy + centralize port defaults to 9460-9463#840
AnrokX wants to merge 4 commits intomainfrom
fix/client-port-investigation

Conversation

@AnrokX
Copy link
Collaborator

@AnrokX AnrokX commented Mar 12, 2026

Summary

Two related fixes for the port/proxy architecture:

1. Fix client dev server proxy (was completely broken)

  • http-proxy-middleware v3 changed its API — app.use('/api', proxy) strips the mount prefix, so /api/workspaces was forwarded as /workspaces (404)
  • Socket.IO polling also broken — returned index.html instead of handshake
  • /bootstrap/setup-state.js and /health were never proxied at all
  • Fix: Use pathFilter option instead of Express mount paths

2. Centralize port defaults to 9460-9463

  • New server/portDefaults.js — single source of truth for all port defaults
  • Default range: 9460-9463 (unregistered IANA ports, zero known conflicts)
    • 9460: orchestrator server
    • 9461: client dev server
    • 9462: diff viewer
    • 9463: tauri dev
  • Previous defaults (3000/2080/7655/1420) conflicted with React, Rails, Express, Flask, Grafana, etc.
  • .env overrides still take precedence over defaults

3. Remove client-side port-sniffing workarounds

  • Removed all window.location.port === '2080' ? 'http://localhost:3000' : ... patterns (10+ occurrences across app.js, dashboard.js, conversation-browser.js)
  • These were workarounds for the broken proxy — now just use window.location.origin

Files changed (24)

  • server/portDefaults.js (new) — centralized defaults
  • server/index.js, server/commanderService.js, server/workspaceManager.js, server/diffViewerService.js — import from portDefaults
  • client/dev-server.js — proxy fix + use portDefaults
  • client/app.js, client/conversation-browser.js, client/dashboard.js — remove port-sniffing
  • .env.example, diff-viewer/.env.example — new default ports
  • src-tauri/tauri.conf.json, src-tauri/src/main.rs — new default ports
  • diff-viewer/** — updated port references
  • CLAUDE.md — updated documentation

Test plan

  • Start with npm start (uses .env overrides if present, otherwise new defaults)
  • Verify http://localhost:<CLIENT_PORT> loads the full app with working terminals
  • Verify Socket.IO connects (terminals show live output)
  • Verify API calls work through the proxy
  • Verify diff viewer launches on correct port

🤖 Generated with Claude Code

AnrokX added 3 commits March 11, 2026 20:24
…ath stripping

Express mount paths (app.use('/api', proxy)) strip the prefix from req.url
in http-proxy-middleware v3, so /api/workspaces was forwarded as /workspaces.
Socket.IO, bootstrap/setup-state.js, and /health were also broken.

Switch to pathFilter option which preserves the full request path.
…t-sniffing

- Add server/portDefaults.js as single source of truth for all port defaults
- New default range: 9460-9463 (unregistered IANA, zero known conflicts)
  - 9460: orchestrator server
  - 9461: client dev server
  - 9462: diff viewer
  - 9463: tauri dev
- Remove all client-side port-sniffing patterns (window.location.port === '2080')
  that were workarounds for the broken proxy — now just use window.location.origin
- Update all server-side files to import from portDefaults instead of hardcoding
- Update all config files (.env.example, tauri.conf.json, vite.config.js, etc.)
- .env overrides still take precedence over defaults
@AnrokX AnrokX changed the title fix: client dev server proxy broken due to http-proxy-middleware v3 path stripping fix: client dev server proxy + centralize port defaults to 9460-9463 Mar 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant