mirror of
https://github.com/myronblair/ai-context
synced 2026-06-30 17:50:08 -05:00
6.7 KiB
6.7 KiB
JARVIS System Reference Card
Access
- Dashboard: https://jarvis.orbishosting.com (login: myron / Joker1974!!!)
- Admin portal: https://jarvis.orbishosting.com/admin/ (same login)
- DB:
jarvis_dbon VM 211 localhost — user:jarvis_user/J4rv1s_Pr0t0c0l_2026! - phpMyAdmin: https://jarvis.orbishosting.com/phpmyadmin (myron / Joker1974!!!)
- GitHub repo: myronblair/jarvis (auto-deploy on push to main)
Server Location
JARVIS runs on PVE1 VM 211 at 10.48.200.211 (migrated from DO 2026-06-18).
- SSH:
sshpass -p 'Joker1974!!!' ssh -o StrictHostKeyChecking=no root@10.48.200.211 - Stack: nginx / PHP 8.3 / MariaDB / Redis / Arc Reactor
- Web root:
/var/www/jarvis/ - Traffic routed via NPM (10.48.200.200) → VM 211
File Structure (on VM 211 at /var/www/jarvis/)
public_html/
index.html — main Iron Man HUD (all UI)
api.php — API router
admin/index.php — admin portal (single PHP+JS file)
agent/ — agent installers
api/
config.php — all credentials/constants (gitignored)
lib/db.php — JarvisDB class (query/execute/single/insert)
lib/kb_engine.php — KBEngine intent matching
endpoints/
agent.php — agent registration/heartbeat/metrics/commands
chat.php — 4-tier chat: KB→action intents→Ollama→Groq→Claude
network.php — network device list + scan endpoint
netscan.php — push endpoint for PVE1 nmap results (no auth needed)
do_server.php — reads /proc directly (no SSH loopback)
stats_cache.php — every 5min cron: Proxmox cluster API, HA, weather, news
facts_collector.php — every 3min cron: system stats, site health
system.php — local system metrics
alerts.php — alert CRUD + auto-generate
news.php — serves api_cache['news'] + custom kb_facts(category='custom_news')
deploy/
reactor.py — Arc Reactor source (copy to /opt/jarvis-arc/reactor.py + restart)
Arc Reactor (AI Routing Daemon)
- Daemon:
/opt/jarvis-arc/reactor.py(Python, port 7474), service:jarvis-arc - Deploy: copy
deploy/reactor.py→/opt/jarvis-arc/reactor.py+systemctl restart jarvis-arc - Vision with actual screenshot → Claude
claude-opus-4-8-20251101 - Guardian/SITREP/Vision text-only → Groq
llama-3.3-70b-versatile - Email drafting / research → Claude
Agent System
- Registration key:
f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518 - Install one-liner (Linux):
curl -sk https://jarvis.orbishosting.com/install-agent.sh | bash -s <hostname> <linux|proxmox> - Agent config:
/etc/jarvis-agent/config.json(key:jarvis_url) — runtime state at/var/lib/jarvis-agent/state.json - If agent gets 401 "Invalid agent key": state.json has stale key — overwrite with correct agent_id + api_key from DB
- Heartbeat: every 10s | Metrics: every 30s
Currently Online Agents
| agent_id | hostname | IP | type |
|---|---|---|---|
| jarvis-do_orbis.or | jarvis-do | 165.22.1.228 | linux |
| claude_pve | pve1 | 10.48.200.90 | proxmox |
| pve2_pve2 | pve2 | 10.48.200.91 | proxmox |
| networkbackup_NetworkB | networkbackup | 10.48.200.99 | linux |
| homeassistant_ha | homeassistant | 10.48.200.97 | homeassistant |
| homebridge_b57cbaea | homebridge | 10.48.200.18 | linux |
| novacpx_e3b07264 | novacpx | 10.48.200.110 | linux |
| jellyfin_7e386833 | jellyfin | 10.48.200.33 | linux |
| MediaStack_2c00b1b8 | mediastack | 10.48.200.35 | linux |
| fortigate_gw | fortigate | 10.48.200.1 | linux |
| yealink_t48s | yealink | 10.48.200.43 | linux |
Network Scanning
- PVE1 cron:
*/3 * * * * /usr/local/bin/jarvis-netscan.sh - Script runs nmap, parses output, POSTs JSON to
https://jarvis.orbishosting.com/api/netscanwithX-Registration-Keyheader - Scan Now button queues shell command to PVE1 agent (picks up within 10s)
Chat Architecture
Tier 0: HA entity control (fuzzy match → call HA API)
Tier 0.5: Network device management
Tier 0.7: Planner intents (add task, my tasks, schedule, daily briefing)
Tier 1: KB intent engine (response type → instant reply)
Tier 1b: Action intents (network_scan → DB data + queue PVE1 scan)
Tier 2: Ollama llama3.2 at http://10.48.200.210:11434 (5s timeout)
Tier 3: Groq compound-beta-mini (cloud, fast)
Tier 4: Claude API fallback
- Groq model name:
compound-beta-mini(NOTgroq/compound-beta-mini) - HA_URL =
http://orbisne.fortiddns.com:8123
DB Key Tables
registered_agents — agent_id, hostname, agent_type, ip_address, api_key, status, last_seen, version
agent_metrics — agent_id, metric_type, metric_data(JSON), recorded_at
-- Extract: JSON_EXTRACT(metric_data,'$.cpu_percent'), JSON_EXTRACT(metric_data,'$.memory.percent')
-- NO cpu_pct/mem_pct columns — always use JSON_EXTRACT
agent_commands — agent_id, command_type, command_data(JSON), status(pending/delivered)
network_devices — ip, mac, hostname, alias, device_type, status, last_seen
alerts — alert_type, title, message, severity, resolved
kb_facts — category, fact_key, fact_value
kb_intents — intent_name, pattern(regex), response_template, action_type, priority, active
api_cache — cache_key(proxmox/news/weather/ha_entities), data(JSON), updated_at
tasks — title, notes, category, priority, status, due_date, due_time, completed_at
appointments — title, description, category, start_at, end_at, location, all_day, reminder_min
ha_entities — real-time HA entity states (updated by HA custom component)
Proxmox API
stats_cache.phpuses cluster API atorbisne.fortiddns.com:8006- Returns all VMs from both PVE1 and PVE2 via
/cluster/resources?type=vm - Token:
root@pam!jarvis=c45b5feb-f9a9-445d-a626-14fbb959f78b
Cron Jobs (on VM 211)
*/3 * * * * php /var/www/jarvis/api/endpoints/facts_collector.php
*/5 * * * * php /var/www/jarvis/api/endpoints/stats_cache.php
0 7 * * * /usr/local/bin/jarvis-backup.sh
Cron on PVE1:
*/3 * * * * /usr/local/bin/jarvis-netscan.sh
Backups
- Script:
/usr/local/bin/jarvis-backup.sh - Output:
/var/backups/jarvis/jarvis_backup_YYYY-MM-DD_HH-MM-SS.tar.gz - Daily at 7am UTC (2am CDT), 7-day retention
- Downloadable from admin portal → BACKUPS tab
API Auth
- Main JARVIS API: session token via
X-Session-Tokenheader (or PHP session) - Agent endpoints:
X-Agent-Keyheader (per-agent key from registered_agents.api_key) - Netscan endpoint:
X-Registration-Keyheader (shared registration key) - Admin portal: separate PHP session (
session_name('jarvis_admin')) - Cloudflare passes real client IP in
CF-Connecting-IPheader