← back to Designer Wallcoverings
DW-Agents/dw-agents/ecosystem-complete.config.js
189 lines
/**
* COMPLETE PM2 ECOSYSTEM CONFIGURATION FOR DW-AGENTS
*
* This is the comprehensive, production-ready PM2 configuration that manages
* all DW-Agents with proper auto-restart, health monitoring, and resource limits.
*
* USAGE:
* Start all agents: pm2 start ecosystem-complete.config.js
* Stop all agents: pm2 stop ecosystem-complete.config.js
* Restart all agents: pm2 restart ecosystem-complete.config.js
* View status: pm2 list
* Save configuration: pm2 save
*
* FEATURES:
* - Auto-restart on crash
* - Memory limits with auto-restart
* - Exponential backoff for crash loops
* - Centralized logging
* - Environment variable management
* - Startup persistence
*/
const path = require('path');
const BASE_DIR = '/root/DW-Agents';
const LOG_DIR = path.join(BASE_DIR, 'logs');
// Common configuration for all TypeScript agents
const createAgentConfig = (name, port, scriptPath, extraEnv = {}) => ({
name: `dw-${name}`,
script: 'npx',
args: `tsx ${scriptPath}`,
cwd: BASE_DIR,
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '500M',
min_uptime: '10s',
max_restarts: 50,
restart_delay: 4000,
exp_backoff_restart_delay: 100,
env: {
NODE_ENV: 'production',
PORT: port,
NODE_OPTIONS: '--import tsx',
...extraEnv
},
error_file: path.join(LOG_DIR, `${name}-error.log`),
out_file: path.join(LOG_DIR, `${name}-out.log`),
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
kill_timeout: 5000,
listen_timeout: 10000
});
module.exports = {
apps: [
// CORE INFRASTRUCTURE AGENTS
createAgentConfig('master-hub', 9893, 'master-hub.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('crash-loop-resolver', 9895, 'agent-crash-loop-resolver/crash-loop-resolver.ts'),
createAgentConfig('dashboard-monitor', 9990, 'agent-dashboard-monitor/dashboard-monitor.ts'),
createAgentConfig('ui-manager', 7240, 'agent-ui-manager/ui-manager-agent.ts'),
createAgentConfig('log-monitor', 7239, 'agent-log-monitor/log-monitor-agent.ts'),
createAgentConfig('server-uptime', 9888, 'agent-server-uptime/server-uptime-agent.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
// BUSINESS OPERATIONS AGENTS
createAgentConfig('accounting', 9882, 'agent-accounting/accounting-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
createAgentConfig('marketing', 9881, 'agent-marketing/marketing-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN,
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('purchasing-office', 9880, 'agent-purchasing-office/purchasing-office-agent.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('legal-team', 9878, 'agent-legal-team/legal-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ADMIN_ACCESS_TOKEN: process.env.SHOPIFY_PRODUCTS_TOKEN
}),
createAgentConfig('digital-samples', 9879, 'agent-digital-samples/digital-samples-agent.ts', {
SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN,
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
// CUSTOMER FACING AGENTS
createAgentConfig('shopify-store', 7238, 'agent-shopify-store/shopify-store-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN,
SHOPIFY_PRODUCTS_TOKEN: process.env.SHOPIFY_PRODUCTS_TOKEN
}),
createAgentConfig('zendesk-chat', 9884, 'agent-zendesk-chat/zendesk-chat-agent.ts', {
ZENDESK_DOMAIN: 'designerwallcoverings.zendesk.com',
ZENDESK_EMAIL: 'info@designerwallcoverings.com',
ZENDESK_PASSWORD: '*Zopimaccess911*'
}),
createAgentConfig('new-client-signup', 9890, 'agent-new-client-signup/new-client-signup-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
// ANALYTICS & REPORTING AGENTS
createAgentConfig('trend-research', 9883, 'agent-trend-research/trend-research-agent.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('todays-highlights', 9885, 'agent-todays-highlights/todays-highlights-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
createAgentConfig('needs-attention', 9886, 'agent-needs-attention/needs-attention-agent.ts', {
SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN
}),
createAgentConfig('completed-tasks', 9889, 'agent-completed-tasks/completed-tasks-agent.ts'),
// EXECUTIVE DASHBOARDS
createAgentConfig('executive-ceo', 7120, 'agent-executive-ceo/ceo-dashboard-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
createAgentConfig('executive-cfo', 7121, 'agent-executive-cfo/cfo-dashboard-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
createAgentConfig('executive-coo', 7122, 'agent-executive-coo/coo-dashboard-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
createAgentConfig('executive-vp-ops', 7123, 'agent-executive-vp-ops/vp-ops-dashboard-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN
}),
// SPECIALIZED AGENTS
createAgentConfig('task-orchestrator', 9900, 'agent-task-orchestrator/task-orchestrator-agent.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('in-parallel', 9887, 'agent-in-parallel/in-parallel-agent.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('bigquery-gov', 7677, 'agent-bigquery-gov/bigquery-gov-agent.ts', {
GOOGLE_CLOUD_PROJECT: 'bigquery-public-data'
}),
createAgentConfig('security', 9892, 'agent-security/security-agent.ts'),
createAgentConfig('skills-manager', 9894, 'agent-skills-manager/skills-manager-agent.ts'),
createAgentConfig('all-agents-viewer', 9111, 'agent-all-agents/all-agents-viewer.ts'),
createAgentConfig('ai-expenses', 9891, 'agent-ai-expenses/ai-expenses-tracker.ts', {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY
}),
createAgentConfig('restart-analyzer', 9896, 'agent-restart-analyzer/restart-analyzer-agent.ts'),
// THIBAUT UPDATER AGENT
createAgentConfig('thibaut-updater', 9902, 'agent-thibaut-updater/thibaut-updater-agent.ts', {
SHOPIFY_STORE_DOMAIN: process.env.SHOPIFY_STORE_DOMAIN,
SHOPIFY_ACCESS_TOKEN: process.env.SHOPIFY_ACCESS_TOKEN,
GEMINI_API_KEY: '${GOOGLE_API_KEY}'
})
]
};