evOo-local/CONTRIBUTING.md
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

4.7 KiB

Contributing to evOo

Thanks for helping improve evOo. Keep changes focused and testable.

Run locally

Follow the source checkout setup for prerequisites, required secrets, and startup commands.

Checks before you open a PR

Command When to run
pnpm test Default. Units, properties, and in-process contracts. Scripted runtime, fake sandbox, in-memory wakeup — no live connector or model-provider calls.
pnpm test:integration Postgres via Testcontainers: product journeys, authorization, executor lifecycle, Graphile / LISTEN/NOTIFY. Needs Docker.
pnpm test:e2e Playwright against the emulated API. Needs Docker.
pnpm test:topology Local product-path smoke: Docker computer + Graphile worker recovery. Needs Docker. Not PR CI.
pnpm test:canary Live provider canaries. Needs keys. Not PR CI.
pnpm test:pi Real Pi against a local HTTP model fixture: streaming, tool round trips, failures and cancellation. No keys.
pnpm test:computer-replay Real Pi and Docker Chromium against a local model fixture. Needs the computer image; no keys or Electron windows.
pnpm test:evals --list List agent-quality cases. Add --live and a model connection to measure repeated real-model task success.
pnpm test:computer Real vision model + E2B desktop. Needs keys; see computer verification. Not PR CI.
pnpm check TypeScript (tsc) across the monorepo.
pnpm lint Biome lint and format check.

CI runs pnpm lint, pnpm check, production builds (including Electron preload smoke), pnpm test, pnpm test:integration, and pnpm test:e2e on every PR.

Adding a UI language

The web and Electron-hosted UI use Lingui catalogs. To add a locale, register it in apps/web/lingui.config.ts, apps/web/src/lib/ui-locale.ts, and apps/web/src/lib/i18n.ts, then run pnpm --filter @rakazo/web intl:extract, fill the new apps/web/src/locales/<locale>/messages.po catalog, and validate it with pnpm --filter @rakazo/web intl:compile. Keep message IDs, placeholders, JSX markers, and ICU plural branches intact; do not commit generated *.js/*.mjs catalog files.

Expo mobile has its own catalog and locale registry. Add the locale to apps/mobile/lib/ui-locale.ts, add apps/mobile/lib/locales/<locale>.ts, and register the catalog in apps/mobile/lib/i18n.ts. Web PO entries do not translate mobile automatically. Update the locale unit tests and a UI E2E scenario for each supported surface. The marketing homepage in apps/www and the native Electron setup window have separate localization paths; scope and test those changes explicitly instead of assuming the web catalog covers them.

See agent verification for the distinction between deterministic execution tests, computer replay, and real-model quality evals.

Optional live-provider checks

The default Playwright suite uses the fake sandbox. To run the same scripted-agent suite against real computers, set the matching E2B_API_KEY, DAYTONA_API_KEY, or BOX_API_KEY and choose a provider:

pnpm test:e2e -- --sandbox=e2b
pnpm test:e2e -- --sandbox=daytona
pnpm test:e2e -- --sandbox=box

The Playwright workflow also accepts these providers through its manual Sandbox provider input. These runs provision real machines and destroy them after the suite. Automatic runs use fake. For the separate real-model desktop acceptance test, see computer verification.

Secrets and configuration

  • Never commit .env files or secrets.
  • Never paste API keys, tokens, or passwords in issues or PRs.
  • Use placeholders in examples (your-openrouter-key, etc.).

The product path is Pi + Docker + Graphile. Emulator settings (AGENT_RUNTIME=scripted, SANDBOX_PROVIDER=fake, WAKEUP_DRIVER=memory) are for tests only.

Integrations can use Composio or Pipedream Connect as optional managed app catalogs. Users can also install HTTPS MCP servers (including Treg) and bounded OpenAPI tool sources. Connector tests must stay deterministic and offline. Never put connector credentials in capability config, fixtures, logs, or snapshots; use the encrypted secret store and fake placeholders.

Pull requests

  • Keep PRs small and easy to review.
  • Target the main branch.
  • Describe why the change is needed, what changed, and how you tested (e.g. pnpm test, manual steps).
  • Link related issues when applicable.

Contact

Address Use for
GitHub private advisory / cynarAI Vulnerabilities only — see SECURITY.md
cynarAI User and support questions
cynarAI Maintainer