* feat: add i18n with 10 languages (en, zh, ja, ko, es, fr, de, pt, ru, ar) Add internationalization infrastructure using next-intl with cookie-based locale detection (NEXT_LOCALE cookie -> Accept-Language header -> default). - Install next-intl and wire into Next.js config + root layout - Create translation files for 10 languages covering auth pages, navigation labels, common UI strings, and settings - Translate login page, setup page, and nav-rail labels - Add LanguageSwitcher component (compact dropdown) to login page, setup page, nav-rail sidebar, and settings panel - Support RTL layout for Arabic (dir="rtl" on html element) - No URL-based locale routing — uses cookie-only approach to avoid breaking existing URLs and the custom proxy middleware Panel internals are left with English strings for incremental translation in follow-up PRs. Based on the approach from PR #312 by richard-able, expanded to 10 languages with proper infrastructure. * test(e2e): add i18n language switcher Playwright tests Tests verify English default, all 10 language options, Chinese/Spanish translations, cookie persistence across reload, and round-trip switching. * test(e2e): fix i18n language switcher tests for cookie-based reload Use direct cookie injection + page.goto instead of selectOption to avoid race conditions with window.location.reload(). Fix Spanish translation text to match actual es.json content. * feat: complete full-app i18n — all components translated to 10 languages Wire useTranslations() across 13 components with 293 keys in 12 namespaces: - Boot loader: step labels, title, tagline - Main page: skip-link, footer, full/local mode nudges - Header bar: search, command palette, mode badge, SSE badge, tooltips - Banners: local-mode, update, openclaw-update, openclaw-doctor - Live feed: header, empty states, session labels - Nav rail: context switcher, interface toggle, org section - Onboarding wizard: all 4 steps (welcome, interface, gateway, credentials) - Error boundary: extracted functional component for hook support All 10 languages fully translated (en, zh, ja, ko, es, fr, de, pt, ru, ar) with ICU plural format and proper per-language plural rules. * feat(i18n): translate all panels and redesign language switcher - Internationalize all 38 panel components with useTranslations() - Expand translation keys from 293 to 1752 across 45 namespaces - All 10 languages: en, zh, ja, ko, es, fr, de, pt, ru, ar - Redesign language switcher: popover dropdown in header bar (replaces native <select> in sidebar) - Keep LanguageSwitcherSelect for login, setup, and settings pages - Fix github-sync-panel to use t.rich() for JSX interpolation |
||
|---|---|---|
| .. | ||
| fixtures/openclaw | ||
| README.md | ||
| actor-identity-hardening.spec.ts | ||
| agent-api-keys.spec.ts | ||
| agent-attribution.spec.ts | ||
| agent-comms.spec.ts | ||
| agent-costs.spec.ts | ||
| agent-diagnostics.spec.ts | ||
| agent-evals.spec.ts | ||
| agent-model-config.spec.ts | ||
| agent-optimize.spec.ts | ||
| agent-self-register.spec.ts | ||
| agents-crud.spec.ts | ||
| alerts-crud.spec.ts | ||
| api-index.spec.ts | ||
| auth-guards.spec.ts | ||
| channels-api.spec.ts | ||
| chat-session-prefs.spec.ts | ||
| cron-operations.spec.ts | ||
| csrf-validation.spec.ts | ||
| delete-body.spec.ts | ||
| device-identity.spec.ts | ||
| device-management.spec.ts | ||
| diagnostics-api.spec.ts | ||
| direct-cli.spec.ts | ||
| docs-knowledge.spec.ts | ||
| exec-approval-allowlist.spec.ts | ||
| gateway-config.spec.ts | ||
| gateway-connect.spec.ts | ||
| github-sync.spec.ts | ||
| helpers.ts | ||
| i18n-language-switcher.spec.ts | ||
| injection-guard-endpoints.spec.ts | ||
| legacy-cookie-removed.spec.ts | ||
| limit-caps.spec.ts | ||
| local-agent-sync.spec.ts | ||
| login-flow.spec.ts | ||
| memory-knowledge.spec.ts | ||
| mentions.spec.ts | ||
| notifications.spec.ts | ||
| onboarding-api.spec.ts | ||
| openapi.spec.ts | ||
| openclaw-harness.spec.ts | ||
| project-agents.spec.ts | ||
| projects-crud.spec.ts | ||
| quality-review.spec.ts | ||
| rate-limiting.spec.ts | ||
| search-and-export.spec.ts | ||
| security-audit.spec.ts | ||
| security-scan-api.spec.ts | ||
| session-controls.spec.ts | ||
| sessions-continue.spec.ts | ||
| skills-crud.spec.ts | ||
| skills-registry.spec.ts | ||
| task-comments.spec.ts | ||
| task-outcomes.spec.ts | ||
| task-queue.spec.ts | ||
| task-regression.spec.ts | ||
| tasks-crud.spec.ts | ||
| tenant-workspaces.spec.ts | ||
| timing-safe-auth.spec.ts | ||
| user-management.spec.ts | ||
| webhooks-crud.spec.ts | ||
| workflows-crud.spec.ts | ||
| workload-signals.spec.ts | ||
README.md
E2E Tests
Playwright end-to-end specs for Mission Control API and UI.
Running
# Start the dev server first (or let Playwright auto-start via reuseExistingServer)
pnpm dev --hostname 127.0.0.1 --port 3005
# Run all tests
pnpm test:e2e
# Run offline OpenClaw harness (no OpenClaw install required)
pnpm test:e2e:openclaw
# Run a specific spec
pnpm exec playwright test tests/tasks-crud.spec.ts
Test Environment
Tests require .env.local with:
API_KEY=test-api-key-e2e-12345MC_DISABLE_RATE_LIMIT=1(bypasses mutation/read rate limits, keeps login rate limit active)
OpenClaw Offline Harness
The harness runs Mission Control against fixture data and mock binaries/gateway:
- fixtures:
tests/fixtures/openclaw/ - mock CLI:
scripts/e2e-openclaw/bin/{openclaw,clawdbot} - mock gateway:
scripts/e2e-openclaw/mock-gateway.mjs
Profiles:
pnpm test:e2e:openclaw:local- local mode (gateway not running)pnpm test:e2e:openclaw:gateway- gateway mode (mock gateway running)
Spec Files
Security & Auth
auth-guards.spec.ts— All API routes return 401 without authcsrf-validation.spec.ts— CSRF origin header validationlegacy-cookie-removed.spec.ts— Old cookie format rejectedlogin-flow.spec.ts— Login, session, redirect lifecyclerate-limiting.spec.ts— Login brute-force protectiontiming-safe-auth.spec.ts— Constant-time API key comparison
CRUD Lifecycle
tasks-crud.spec.ts— Tasks POST/GET/PUT/DELETE with filters, Aegis gateagents-crud.spec.ts— Agents CRUD, lookup by name/id, admin-only deletetask-comments.spec.ts— Threaded comments on tasksworkflows-crud.spec.ts— Workflow template CRUDwebhooks-crud.spec.ts— Webhooks with secret masking and regenerationalerts-crud.spec.ts— Alert rule CRUD with full lifecycleuser-management.spec.ts— User admin CRUD
Features
notifications.spec.ts— Notification delivery and read trackingquality-review.spec.ts— Quality reviews with batch lookupsearch-and-export.spec.ts— Global search, data export, activity feed
Infrastructure
limit-caps.spec.ts— Endpoint limit caps enforceddelete-body.spec.ts— DELETE body standardization
Shared
helpers.ts— Factory functions (createTestTask,createTestAgent, etc.) and cleanup helpers