diff --git a/app.manifest.yaml b/app.manifest.yaml index 14f1b24..d6d2638 100644 --- a/app.manifest.yaml +++ b/app.manifest.yaml @@ -1,7 +1,11 @@ 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" @@ -24,16 +28,50 @@ services: description: "PostgreSQL — conversation session and message storage" type: postgres ports: - db: 26397 + db: 26407 companion-redis: description: "Redis — session cache and pub/sub" type: redis ports: - db: 26396 + 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"