- Rename all user-facing and technical identifiers from OpenPets/Pet to FamiliarOS/Familiar. - Rename packages from @open-pets/* to @familiaros/*; rename install-pet/pet-format packages. - Rename plugin IDs and directories from openpets.* to familiaros.*. - Rename IPC namespace from openpets:* to familiaros:* and state filenames from openpets-* to familiaros-* with legacy migration. - Rename source files (pet-window, built-in-pet, default-pet-controller, etc.) to familiar equivalents. - Update locales (en, es-419, ja, ko, pt-BR, zh-Hans, zh-Hant) and tray/pet context menu strings. - Add Familiar naming feature: preference, settings input, tray menu display. - Update assets and packaging config; all desktop tests pass.
3.3 KiB
3.3 KiB
packages/client/
Core IPC client library for FamiliarOS desktop app communication.
Responsibility
Provides the foundational client library for all FamiliarOS integrations. Handles discovery file reading, TCP socket connections (including WSL cross-platform), request/response protocol, and high-level familiar operations (status, list, install, lease, react, say).
Design/Patterns
Protocol Layer (protocol.ts):
- Defines IPC protocol version (v1), message limits (16KB), timeouts (2s connect, 3s response)
- Request/response types with discriminated union (
ok: true/false) - Reaction validation against allowed enum values
- Custom
FamiliarOSClientErrorwith error codes
Discovery Layer (discovery.ts):
- Cross-platform discovery file path resolution (macOS, Windows, Linux/XDG)
- File validation (size, permissions, symlink checks)
- Endpoint validation: Unix sockets, Windows named pipes, TCP (IPv4)
- TCP/WSL cross-platform support: Windows desktop → WSL client via private IPs
- Security: XDG_RUNTIME_DIR permission checks (0o700, ownership)
TCP Endpoint Security:
- IPv4 only (no hostnames)
- Private/local addresses only:
- Loopback: 127.0.0.0/8
- Private: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
- Link-local: 169.254.0.0/16
- Rejects 0.0.0.0, public IPs, hostnames
- Enables WSL clients to connect to Windows desktop app
Client Layer (index.ts):
- Factory pattern:
createFamiliarOSClient(options)returnsFamiliarOSClientinterface - Methods:
hello(),status(),listPets(),installPet(),acquireLease(),heartbeatLease(),releaseLease(),react(),say() - Lease-aware operations for multi-familiar targeting
- Result parsers with validation
Socket Management:
- Node.js
net.createConnection()for TCP/Unix sockets/Windows named pipes - Dual timeout handling (connect + response)
- Line-delimited JSON protocol (
\nseparator) - Buffer size enforcement (16KB max)
Flow
Client Method Call
↓
readDiscoveryFile() → Parse ipc.json (token, endpoint)
↓
sendRequest() → Build request (id, version, token, method, params)
↓
net.createConnection(endpoint) → Write JSON + newline
↓
Wait for response (buffer until newline)
↓
parseIpcResponse() → Validate shape, return result or throw
TCP/WSL Cross-Platform Flow:
WSL Client → readDiscoveryFile()
↓
Endpoint: tcp://192.168.x.x:port (Windows host IP)
↓
validateDiscovery() → allowsCrossPlatformDiscovery()
↓
net.createConnection({ host, port }) → Windows desktop app
Integration Points
Consumers (all depend on this package):
@familiaros/cli- CLI commands@familiaros/mcp- MCP tool implementations@familiaros/claude- Hook execution@familiaros/opencode- Plugin runtime@familiaros/install-familiar- Direct installation fallback
Desktop App: Communicates with FamiliarOS desktop app via:
- Unix domain socket (macOS/Linux)
- Windows named pipe (Windows)
- TCP socket (WSL cross-platform)
Exports:
createFamiliarOSClient()- Main factorysendRequest()- Low-level request functionreadDiscoveryFile(),getDiscoveryFilePath()- Discovery utilitiesparseIpcEndpoint(),validateEndpoint()- Endpoint handlingFamiliarOSClientError, error codes, types
Contracts:
contracts/client-protocol.contract.ts- Runtime protocol validation tests