- chat.php: Add Tier 0.9a (gmail_triage), Tier 0.9b (remote_exec) detection;
refactor arc submit into arcSubmitJob() helper; natural-language triggers for
email triage (check my email, triage inbox) and remote exec (restart X on Y,
run X on Y, get logs from X on Y)
- arc.php: Add triage and triage_action endpoints (read/update email_triage table)
- index.html: Add COMMS tab with triage card UI (filter bar, category badges,
draft reply viewer, copy/dismiss actions); loadComms() with 8s polling;
onArcJobStarted() routes gmail_triage jobs to COMMS tab
- admin/index.php: Add GMAIL TRIAGE section under COMMUNICATIONS nav; triage_list/
triage_action/triage_run PHP actions; loadTriage() JS with full table + draft
modal; triageRunNow() submits gmail_triage job to Arc Reactor
Arc Reactor v2.0:
- research handler: DDG search → async page fetch → trafilatura extraction → Claude synthesis
- tool_loop handler: multi-step agent loop (up to 200 iter) with web_search, fetch_url, jarvis_agents, jarvis_alerts, current_time tools
- llm handler: multi-provider router (Claude/Groq/Ollama)
- /jobs/recent endpoint for HUD polling
- Phase 1 handlers preserved (ping/echo/shell)
chat.php — Tier 0.9 Intel Protocol (before KB intent engine):
- Detects: research/investigate/deep-dive/look up/find out about → research job
- Detects: step-by-step/figure out/analyze and report → tool_loop job
- Returns arc_job ID in response for UI polling
- Depth modifiers: quick/standard/deep
index.html:
- INTEL tab in right panel tab bar
- Research result cards with expand/collapse, synthesis, sources, status
- Live polling (4s) when INTEL tab is active + active jobs present
- Auto-switches to INTEL tab when research is triggered from chat
- intelPrompt() pre-fills chat input for new research
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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