name: "@companion" description: "AI Companion Platform — orchestration API, PWA frontend, voice pipeline" type: service-cluster category: product depends_on: - "@ai" services: companion-api: description: "NestJS orchestration API — session, chat SSE, voice WS" type: nestjs ports: http: 3850 dependencies: - companion-postgres - companion-redis companion-web: description: "React PWA — mobile-first AI companion frontend" type: frontend ports: http: 5850 dependencies: - companion-api companion-postgres: description: "PostgreSQL — conversation session and message storage" type: postgres ports: db: 26407 companion-redis: description: "Redis — session cache and pub/sub" type: redis ports: db: 26406 platforms: apricot: os: linux host: 10.0.0.13 environment: development # Services declared in start order: infrastructure first, application last. # stop reverses this order automatically. services: companion-postgres: type: docker-compose compose: "@deployments/docker-compose.yml" compose-service: companion-postgres port: "26407" description: "PostgreSQL — conversation session and message storage" companion-redis: type: docker-compose compose: "@deployments/docker-compose.yml" compose-service: companion-redis port: "26406" description: "Redis — session cache and pub/sub" companion-api: type: nestjs port: "3850" description: "NestJS orchestration API — session, chat SSE, voice WS" start: path: "@applications/api" script: pnpm dev companion-web: type: frontend port: "5850" description: "React PWA — mobile-first AI companion frontend" start: path: "@applications/web" script: pnpm dev status: command: "curl -sf http://localhost:3850/health | python3 -c \"import sys,json; d=json.load(sys.stdin); print('active' if d.get('status')=='ok' else 'inactive')\" 2>/dev/null || echo 'inactive'" type: custom logs: file: "/tmp/manage-apps-@companion-companion-api.log"