- Python asyncio daemon (/opt/jarvis-arc/reactor.py) running on 127.0.0.1:7474
- systemd service (jarvis-arc) auto-starts with MySQL dependency
- arc_jobs + arc_status MySQL tables for async job queue
- api/endpoints/arc.php: PHP bridge to daemon (status, job_create, job_get, jobs, purge)
- api.php: added arc route
- index.html: ARC REACTOR status indicator in bottom bar with live polling
- admin/index.php: ARC REACTOR nav section + full job management panel
- Built-in job handlers: ping, echo, shell (whitelist-gated)
- Foundation for Phase 2 (Intel Protocol) and beyond
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Root cause: open_basedir restriction prevented lsphp from reading config
files on other vhosts (/home/epictravelexpeditions.com/*, etc.)
TJJ worked via its own DB; TTG worked because file happened to be readable.
Epic, Parker Slingshot, Parker Slingshot Rentals all returned empty.
Fix: site_settings table in jarvis_db as primary storage for all sites.
- All reads/writes go through JarvisDB (always accessible, no open_basedir)
- TJJ still syncs bidirectionally with its own settings table (secondary)
- File push attempted best-effort on save (succeeds where writable, silent no-op otherwise)
- Seeded existing known values from file grep on table creation
- All 5 sites now return and save settings correctly
- Add scene keywords: good morning work, master bedroom scene, porch lights (3 variants)
- Add Tier 0a: brightness control handler ("dim X to Y%", "set X to Y%")
- Add Tier 0b: media player on/off/pause for Apple TV and Pioneer receiver
- Add Tier 0c: per-camera siren activate/silence via switch
- deploy/jarvis-watchdog.sh: self-healing watchdog (every 5 min)
* monitors lsws/mysql/redis, restarts on failure
* JARVIS HTTP self-check, restarts OLS on 5xx
* disk/memory alerts inserted to DB
* offline Proxmox VM agents restarted via qm guest exec
* log rotation (1000 line cap)
- deploy/jarvis-deploy.sh: smart deploy with PHP validation
* php8.3 syntax check on every changed .php file
* auto-reverts git commit + inserts critical alert on syntax error
* reloads OLS after JARVIS deploys
- api/endpoints/facts_collector.php: site health monitoring
* curls all 7 managed sites every 3 min
* stores up/down status in kb_facts
- api/endpoints/alerts.php: auto-heal + site alerts
* dispatches restart_service commands when services down on agents
* generates alerts from kb_facts site health data
- public_html/install-agent.sh: one-liner Linux agent installer
* installs deps, downloads agent, registers with JARVIS, sets up systemd
- public_html/webhook.php: fixed infra deploy path to /opt/infra
- Enable CURLOPT_SSL_VERIFYPEER on Groq and Claude API calls (MITM fix)
- Parameterize agent_commands IN clause to prevent SQL injection
- Add session/IP check for list/status/myip endpoints (auth bypass fix)
- Use hash_equals() for registration key comparison (timing attack fix)
- 4-tier chat: HA control → Ollama → Groq → Claude
- Push-based agent system with heartbeat/metrics
- Network monitoring, alerts, Proxmox, Home Assistant
- Windows + Linux agent installers
- Stats cache cron, facts collector, KB engine