The admin panel restart command used shell_exec which runs /bin/sh (dash on
Ubuntu) — dash doesn't support 'source', so the venv never activated and the
reactor silently never started.
- admin/index.php: wrap restart in bash -c so 'source' works; try systemctl
first then fall back to nohup
- deploy/jarvis-arc.service: add proper systemd unit so reactor auto-starts
on boot and auto-restarts on crash
- deploy/jarvis-deploy.sh: install+enable service file when it changes; mkdir
log dir before restart; fall back to nohup if systemctl not set up yet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8tDRrQqgLjqXebMCBNcP3
- Add CREATE TABLE IF NOT EXISTS for guardian_config and guardian_events in
reactor lifespan so tables are created automatically on next restart
- Fix conversations column bug: reactor used 'message' but schema has 'content';
fix INSERT and SELECT queries to use content (SELECT aliases it as 'message'
so the JSON response key stays the same)
- Add guardian tables to schema.sql for documentation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8tDRrQqgLjqXebMCBNcP3
Guardian anomaly alerts and SITREP are pure text reasoning — Groq's
llama-3.3-70b-versatile handles them at near-zero cost with lower
latency. Vision Protocol image analysis stays on Claude (claude-opus-
4-8) because Groq has no vision models. Text-only sysinfo snapshots
(no image captured) also move to Groq.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When deploy/reactor.py changes in a push, the deploy runner now copies it
to the runtime location and restarts jarvis-arc.service automatically.
Eliminates the two-copy drift problem — repo is now canonical.
Arc Reactor was running from /opt/jarvis-arc with no version tracking.
Added to deploy/ so all fixes (metrics_json→metric_data, flat JSON parsing,
disk mount key fix) are captured. WG configs are runtime-generated secrets
and must not be committed.
- 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