1{2 "app": "websensor",3 "label": "WebSensor — Detect What Changed. Know Why It Matters.",4 "domain": "www.websensor.io",5 "port": 8260,6 "health_path": "/api/ready",7 "dir": "~/apps/websensor",8 "extra_paths": [],9 "sync_excludes": [10 "node_modules/",11 ".next/",12 ".git/",13 ".env",14 ".env.*",15 "!.env.example",16 "*.tsbuildinfo",17 ".turbo/",18 "logs/",19 "tmp/",20 "data/",21 "coverage/",22 ".DS_Store",23 ".claude/",24 "qa/",25 "apps/web/.next/",26 "apps/web/next-env.d.ts",27 "deploy/*.mld.json"28 ],29 "requires": {30 "runtimes": ["pm2", "ngrok", "node", "pnpm", "postgresql@17", "redis"],31 "ram_gb": 6,32 "ports": [8260, 8261, 8262]33 },34 "ram_mb_observed": 1500,35 "size_mb": 40,36 "placement": {37 "pin": "M4M64b",38 "prefer": null,39 "avoid": ["M3U96b", "M1M32"],40 "reason": "PostgreSQL 17 + Redis + pnpm présents ; 64 Go RAM ; M3U96a déjà chargé (25 processus PM2)"41 },42 "processes": [43 {44 "name": "websensor-engine",45 "manager": "pm2",46 "script": "/opt/homebrew/bin/node",47 "args": ["node_modules/tsx/dist/cli.mjs", "apps/engine/src/index.ts"],48 "interpreter": null,49 "cwd": "{{HOME}}/apps/websensor",50 "env": {51 "NODE_ENV": "production",52 "DATABASE_URL": "postgres://localhost:5432/websensor",53 "REDIS_URL": "redis://127.0.0.1:6379",54 "BLOB_STORE_DIR": "{{HOME}}/websensor-data/blobs",55 "WS_SOURCES_FILE": "./config/sources.yaml",56 "WS_FETCH_CONCURRENCY": "16",57 "WS_PER_HOST_CONCURRENCY": "2",58 "ENGINE_METRICS_PORT": "8262",59 "WS_USER_AGENT": "WebSensorBot/0.1 (+https://www.websensor.io/bot; contact@websensor.io)",60 "ANTHROPIC_API_KEY": "<secret>",61 "WS_LLM_MODEL_FAST": "claude-haiku-4-5",62 "WS_LLM_MODEL_DEEP": "claude-opus-5",63 "WS_LLM_DAILY_CALL_BUDGET": "600",64 "WS_LLM_MIN_IMPORTANCE": "35",65 "WS_LLM_DEEP_MIN_IMPORTANCE": "78",66 "SCRAPFLY_API_KEY": "<secret>",67 "WS_SCRAPFLY_DAILY_BUDGET": "300",68 "LOG_LEVEL": "info"69 },70 "cron_restart": null,71 "autorestart": true,72 "max_memory_restart": "2G"73 },74 {75 "name": "websensor-api",76 "manager": "pm2",77 "script": "/opt/homebrew/bin/node",78 "args": ["node_modules/tsx/dist/cli.mjs", "apps/api/src/server.ts"],79 "interpreter": null,80 "cwd": "{{HOME}}/apps/websensor",81 "env": {82 "NODE_ENV": "production",83 "DATABASE_URL": "postgres://localhost:5432/websensor",84 "REDIS_URL": "redis://127.0.0.1:6379",85 "BLOB_STORE_DIR": "{{HOME}}/websensor-data/blobs",86 "API_PORT": "8260",87 "API_HOST": "0.0.0.0",88 "WEB_URL": "http://127.0.0.1:8261",89 "PUBLIC_BASE_URL": "https://www.websensor.io",90 "CANONICAL_HOST": "www.websensor.io",91 "LOG_LEVEL": "info"92 },93 "cron_restart": null,94 "autorestart": true,95 "max_memory_restart": "1G"96 },97 {98 "name": "websensor-web",99 "manager": "pm2",100 "script": "/opt/homebrew/bin/node",101 "args": ["node_modules/next/dist/bin/next", "start", "-p", "8261", "-H", "127.0.0.1"],102 "interpreter": null,103 "cwd": "{{HOME}}/apps/websensor/apps/web",104 "env": {105 "NODE_ENV": "production",106 "API_URL": "http://127.0.0.1:8260",107 "NEXT_PUBLIC_SITE_URL": "https://www.websensor.io",108 "NEXT_TELEMETRY_DISABLED": "1"109 },110 "cron_restart": null,111 "autorestart": true,112 "max_memory_restart": "1G"113 }114 ],115 "ngrok": { "name": "websensor-ngrok", "url": "www.websensor.io", "port": 8260 },116 "launchd": [],117 "env_overrides": {},118 "hooks": {119 "post_sync": [120 "export PATH=\"/opt/homebrew/bin:$PATH\"; pnpm install --frozen-lockfile --silent && echo ' deps ok'",121 "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'",122 "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'",123 "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'"124 ],125 "post_start": []126 },127 "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)."128}129