Match incoming direct-call events against every local identity alias - home id, entity id, peer id, and each provisioned signal-server actor id - instead of only oderId||id. A caller who met the callee through a room on the caller's signal server addresses the ring by the callee's provisioned actor id, so the old admission check silently dropped it: the caller went "In Voice" while the callee saw no modal, no ring audio, and no rail entry. Incoming self aliases are normalized onto the canonical local id (normalizeDirectCallPayloadSelfAliases) so they never appear as a phantom third participant, and remoteParticipantIds / the DM-header peer lookup skip all self aliases. Adds a DM-header call ring e2e including the cross-signal topology (callee homed on a secondary signal server) that fails on the old code. Co-authored-by: Cursor <cursoragent@cursor.com>
Product Client
Angular 21 renderer for MetoYou / Toju. This package is managed from the repository root, so the main build, test, lint, and Electron integration commands are run there rather than from a local package.json.
Commands
npm run startstarts the Angular dev server.npm run buildbuilds the client todist/client.npm run watchruns the Angular build in watch mode.npm run testruns the product-client Vitest suite.npm run lintruns ESLint across the repo.npm run formatformats Angular HTML templates.npm run sort:propssorts Angular template properties.npm run electron:devornpm run devruns the client with Electron.
Structure
| Path | Description |
|---|---|
src/app/domains/ |
Bounded contexts and public domain entry points |
src/app/infrastructure/ |
Shared technical runtime such as persistence and realtime |
src/app/shared-kernel/ |
Cross-domain contracts and shared models |
src/app/features/ |
App-level composition and transitional feature shells |
src/app/core/ |
Platform adapters, compatibility entry points, and cross-domain technical helpers |
src/app/shared/ |
Shared UI primitives and utilities |
src/app/store/ |
NgRx reducers, effects, selectors, and actions |
public/ |
Static assets copied into the Angular build |
Key Docs
- src/app/domains/README.md
- src/app/shared-kernel/README.md
- src/app/infrastructure/persistence/README.md
- src/app/infrastructure/realtime/README.md
- ../docs/architecture.md
- AGENTS.md
Notes
angular.jsondefines build, serve, and lint targets for the product client.- Product-client tests currently run through the root Vitest setup instead of an Angular
testarchitect target. - If the renderer-to-desktop contract changes, update the Angular bridge, Electron preload API, and IPC handlers together.