{ "app": "websensor", "label": "WebSensor — Detect What Changed. Know Why It Matters.", "domain": "www.websensor.io", "port": 8260, "health_path": "/api/ready", "dir": "~/apps/websensor", "extra_paths": [], "sync_excludes": [ "node_modules/", ".next/", ".git/", ".env", ".env.*", "!.env.example", "*.tsbuildinfo", ".turbo/", "logs/", "tmp/", "data/", "coverage/", ".DS_Store", ".claude/", "qa/", "apps/web/.next/", "apps/web/next-env.d.ts", "deploy/*.mld.json" ], "requires": { "runtimes": ["pm2", "ngrok", "node", "pnpm", "postgresql@17", "redis"], "ram_gb": 6, "ports": [8260, 8261, 8262] }, "ram_mb_observed": 1500, "size_mb": 40, "placement": { "pin": "M4M64b", "prefer": null, "avoid": ["M3U96b", "M1M32"], "reason": "PostgreSQL 17 + Redis + pnpm présents ; 64 Go RAM ; M3U96a déjà chargé (25 processus PM2)" }, "processes": [ { "name": "websensor-engine", "manager": "pm2", "script": "/opt/homebrew/bin/node", "args": ["node_modules/tsx/dist/cli.mjs", "apps/engine/src/index.ts"], "interpreter": null, "cwd": "{{HOME}}/apps/websensor", "env": { "NODE_ENV": "production", "DATABASE_URL": "postgres://localhost:5432/websensor", "REDIS_URL": "redis://127.0.0.1:6379", "BLOB_STORE_DIR": "{{HOME}}/websensor-data/blobs", "WS_SOURCES_FILE": "./config/sources.yaml", "WS_FETCH_CONCURRENCY": "16", "WS_PER_HOST_CONCURRENCY": "2", "ENGINE_METRICS_PORT": "8262", "WS_USER_AGENT": "WebSensorBot/0.1 (+https://www.websensor.io/bot; contact@websensor.io)", "ANTHROPIC_API_KEY": "", "WS_LLM_MODEL_FAST": "claude-haiku-4-5", "WS_LLM_MODEL_DEEP": "claude-opus-5", "WS_LLM_DAILY_CALL_BUDGET": "600", "WS_LLM_MIN_IMPORTANCE": "35", "WS_LLM_DEEP_MIN_IMPORTANCE": "78", "SCRAPFLY_API_KEY": "", "WS_SCRAPFLY_DAILY_BUDGET": "300", "LOG_LEVEL": "info" }, "cron_restart": null, "autorestart": true, "max_memory_restart": "2G" }, { "name": "websensor-api", "manager": "pm2", "script": "/opt/homebrew/bin/node", "args": ["node_modules/tsx/dist/cli.mjs", "apps/api/src/server.ts"], "interpreter": null, "cwd": "{{HOME}}/apps/websensor", "env": { "NODE_ENV": "production", "DATABASE_URL": "postgres://localhost:5432/websensor", "REDIS_URL": "redis://127.0.0.1:6379", "BLOB_STORE_DIR": "{{HOME}}/websensor-data/blobs", "API_PORT": "8260", "API_HOST": "0.0.0.0", "WEB_URL": "http://127.0.0.1:8261", "PUBLIC_BASE_URL": "https://www.websensor.io", "CANONICAL_HOST": "www.websensor.io", "LOG_LEVEL": "info" }, "cron_restart": null, "autorestart": true, "max_memory_restart": "1G" }, { "name": "websensor-web", "manager": "pm2", "script": "/opt/homebrew/bin/node", "args": ["node_modules/next/dist/bin/next", "start", "-p", "8261", "-H", "127.0.0.1"], "interpreter": null, "cwd": "{{HOME}}/apps/websensor/apps/web", "env": { "NODE_ENV": "production", "API_URL": "http://127.0.0.1:8260", "NEXT_PUBLIC_SITE_URL": "https://www.websensor.io", "NEXT_TELEMETRY_DISABLED": "1" }, "cron_restart": null, "autorestart": true, "max_memory_restart": "1G" } ], "ngrok": { "name": "websensor-ngrok", "url": "www.websensor.io", "port": 8260 }, "launchd": [], "env_overrides": {}, "hooks": { "post_sync": [ "export PATH=\"/opt/homebrew/bin:$PATH\"; pnpm install --frozen-lockfile --silent && echo ' deps ok'", "export PATH=\"/opt/homebrew/bin:$PATH\"; psql -d postgres -Atc \"select 1 from pg_database where datname='websensor'\" | grep -q 1 || createdb websensor; DATABASE_URL=postgres://localhost:5432/websensor pnpm db:migrate 2>&1 | tail -1 && echo ' db ok'", "export PATH=\"/opt/homebrew/bin:$PATH\"; mkdir -p $HOME/websensor-data/blobs && DATABASE_URL=postgres://localhost:5432/websensor node node_modules/tsx/dist/cli.mjs apps/engine/src/cli.ts sync 2>&1 | tail -1 && echo ' registry ok'", "export PATH=\"/opt/homebrew/bin:$PATH\"; export API_URL=http://127.0.0.1:8260 NEXT_PUBLIC_SITE_URL=https://www.websensor.io NEXT_TELEMETRY_DISABLED=1; pnpm --filter @websensor/web build 2>&1 | tail -3 && echo ' web build ok'" ], "post_start": [] }, "notes": "v0.1.0 (2026-09-08) : gateway Fastify :8260 (REST + WS /api/v1/live + proxy → Next :8261), engine (scheduler/pipeline, métriques :8262), 200 sources / ~290 capteurs (config/sources.yaml), Postgres 17 + Redis locaux, blobs zstd dans ~/websensor-data/blobs. Secrets uniquement dans ce manifeste (M1M32)." }