← 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}'
    })
  ]
};