feat: multi-Oracle server support with runtime switching

Complete implementation of multi-server Oracle database support:

Backend:
- Multi-pool Oracle with lazy loading per server
- Email-to-server cache for automatic server discovery
- JWT tokens include server_id claim
- /auth/check-identity and /auth/check-email endpoints
- /auth/my-servers endpoint for listing user's accessible servers
- Server switch with password re-authentication

Frontend:
- New ServerSelector component for header dropdown
- Multi-step login flow (identity → server → password)
- Server switching from header with password modal
- Mobile drawer menu with server selection
- Dark mode support for all new components
- URL bookmark support with ?server= query param

Scripts:
- Unified start.sh replacing start-prod.sh/start-test.sh
- Unified ssh-tunnel.sh with multi-server support
- Updated status.sh for new architecture

Tests:
- E2E tests for multi-server and single-server login flows
- Backend unit tests for all new endpoints
- Oracle multi-pool integration tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-01-26 22:39:06 +00:00
parent 5f99ee2fd0
commit b137e80b71
102 changed files with 9398 additions and 2787 deletions

26
.gitignore vendored
View File

@@ -433,9 +433,15 @@ run_tests.*
scan_*.json
sdist/
sdist/
# Secrets directories (contains credentials, keys, passwords)
secrets/
# Allow documentation in secrets directories
!**/secrets/README.md
# SSH tunnel configuration (next to .env files)
backend/ssh-tunnels.json
!backend/ssh-tunnels.json.example
security_*.json
share/python-wheels/
sqlnet.ora
@@ -525,3 +531,23 @@ backend/data/receipts/uploads/*
backend/data/ocr_queue/
!backend/data/*/.gitkeep
# PRD tasks (generated, not tracked)
tasks/
# ============================================================================
# 🤖 CLAUDE & RALPH AUTOMATION - DO NOT COMMIT
# ============================================================================
# Claude handover and context files (session-specific)
.claude/HANDOFF.md
.claude/handover/
CONTEXT_HANDOVER_*.md
# Ralph automation - ignore entire directory
scripts/ralph/
# ============================================================================
# 💾 SQLITE RUNTIME FILES - DO NOT COMMIT
# ============================================================================
# SQLite WAL (Write-Ahead Log) and SHM (Shared Memory) files
*.db-shm
*.db-wal