202 Commits

Author SHA1 Message Date
myron 9ea43c852b feat: Phase 2 — Intel Protocol + Iron Protocol
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>
2026-06-11 04:16:29 +00:00
myron 7013a80428 feat: Phase 1 — Arc Reactor Core Daemon
- 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>
2026-06-11 04:07:28 +00:00
myron cd80525851 Add NovaCPX to webhook router (VM deploys via its own cron)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 23:06:02 +00:00
myron 27eb012005 Update Parker Slingshot monitoring URL to parkerslingshotrentals.com
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 22:50:44 +00:00
myron 1c3a9fd49e Improve network map with floating bubble nodes and 6-ring layout
- Replace tiny dot nodes with frosted-glass bubbles with ambient glow and float animation
- Add 6th ring for netscan-discovered network devices (cap 28)
- Split named/DB devices and discovered devices into separate rings
- Push rFrac to 0.82 to fill the overlay window
- Increase all ring caps and node radii
- Add FortiGate NAT IP to providers ACL
- Fix TCP SIP drop issue via transport=udp

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 03:26:48 +00:00
myron 549ff972cf Network map: full screen overlay (100vw x 100vh) 2026-06-02 14:42:30 +00:00
myron d77621c849 Fix sites manager: DB-first settings storage, all 5 sites now read/write
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
2026-06-02 12:48:51 +00:00
myron 85d3447ccc Fix voice broken by Notification.requestPermission + tighten sleep regex
Root cause 1: Notification.requestPermission() on startup (3s delay) opened
a browser permission dialog while JARVIS was still speaking the welcome greeting.
This aborted the SpeechRecognition session. Because isSpeaking=true at that
moment, onend did not reschedule a restart — mic went permanently silent.
Fix: removed the startup requestPermission() call entirely.

Root cause 2: Same requestPermission() inside _focusWindow() called on every
enterVoiceMode() — could abort the recognition session on each wake.
Fix: only create notification when permission already granted, never request.

Root cause 3: SLEEP_CMDS matched bare words like offline and sleep that appear
in normal commands (check if server is offline, put device to sleep, etc.)
Fix: tightened to require explicit phrasing — go offline, sleep mode,
shut down jarvis, good night jarvis, etc.
2026-06-02 11:12:26 +00:00
myron 13792b3ced Add sleep mode + window focus on wake
Sleep mode:
- Commands: good night / go to sleep / shut down / standby / offline / signing off
- Works via voice or text
- UI dims to 8% brightness, slow-spinning standby reactor overlay appears
- Refresh loop pauses (light 2min heartbeat keeps session alive)
- Mic stays fully active — only responds to master wake phrases
- Idle-reload disabled while sleeping (prevents unwanted reloads overnight)

Wake from sleep (master wake phrase):
- Detects wake phrase while isAsleep=true, routes to wakeFromSleep()
- Full HUD boot sequence animation (panels slide in)
- refreshAll() fires immediately to reload all data
- JARVIS greets: All systems back online

Window focus on any wake:
- window.focus() called on every enterVoiceMode
- document.title flashes 8x between JARVIS ONLINE and default
- Web Notifications API: system popup fires when window is minimized/backgrounded
- Notification permission requested 3s after login
- Works regardless of sleep/voice mode
2026-06-02 02:45:41 +00:00
myron 381977ed1e Remove user name prefix from chat messages 2026-06-02 02:39:02 +00:00
myron afff54e43b Restore working page + clean orbital network map rebuild
Reverted to c8e0020 (all 10 effects working) then added net map cleanly:
- Used var/for instead of const/let/arrow-functions to avoid any closure/scope issues
- Orbital ring layout: JARVIS hub center, 4 concentric rings (proxmox/services/agents/devices)
- Rings rotate at different speeds/directions independently
- Spoke lines hub-to-each-node with cyan inbound and orange outbound particles
- Node labels point outward from center, never overlap
- Tiny green/red status dot on every non-hub node
- Hover shows node info card (name/IP/status/ring)
- Open: say/type show network map / network topology / show connections
- Close: say/type close map / close network / dismiss map
- All other features (mic, voice, text, panels) unaffected
2026-06-02 02:20:07 +00:00
myron 57d5d7f51e Network map: orbital ring layout, smaller overlay, everything visible and contained
- Overlay shrunk to min(860px, 86vw) x min(570px, 76vh) — fits any screen
- Solar system layout: JARVIS hub at center, 4 concentric orbital rings
  - Ring 1 (green, innermost): Proxmox nodes, rotates clockwise
  - Ring 2 (gold): Services (HA, AI, PBX, Homebridge), counter-clockwise
  - Ring 3 (cyan): Linux/Windows agents, slow clockwise
  - Ring 4 (dim blue, outermost): Network scan devices, slow counter-clockwise
- Rings rotate at different speeds/directions (persistent offsets across frames)
- Each ring draws dashed track + tick marks every 30 deg + label + online/total count
- Nodes evenly spaced on their ring, rotate with it
- Spoke lines from each node to hub (straight, low opacity)
- Particle flow on spokes: cyan in (data), orange out (commands)
- Node positions computed per-frame from angle+ring radius+rotation
- Overlay canvas sized exactly to container minus header+legend height
2026-06-02 01:57:13 +00:00
myron 8bdea2ce2c Redesign network map: 4 clear zones, better spacing, outward labels, section headers
- Quadrant layout: Proxmox (top-left), Services (top-right), Agents (bottom-left), Devices (bottom-right)
- Dashed divider lines + subtle per-zone color gradient fill separates sections visually
- Zone watermark labels (PROXMOX CLUSTER, SERVICES, AGENTS, NETWORK DEVICES) with online/total count
- Nodes arranged in tidy grid within each zone — no more single crowded ring
- Labels positioned OUTWARD from hub center (atan2 to calculate angle) so they never overlap nodes
- Bezier lines bow outward away from hub center (control point pushed along hub→midpoint vector)
  so lines spread out and each is individually traceable
- IP shown only on hub and hovered nodes — reduces label clutter
- Overflow indicator: shows +N MORE when zone has too many nodes (max per zone: 6/6/8/10)
- Intra-zone cross-links for Proxmox cluster (green) and Services cluster (gold)
- RGB color system replaces old r/g/b object — cleaner rgba() template strings
2026-06-02 00:44:35 +00:00
myron 8c96ebbc42 Network topology overlay: voice/chat triggered full-screen viz with directional flow particles
- Voice: say show network map / network topology / show connections to open
- Voice: say close map / dismiss / close network to close
- Same commands work in chat text input
- Explode animation: overlay expands from top-left reactor position with clip-path wipe
- Collapse animation: folds back to reactor on close
- Visualization: live node graph with bezier curved edges, hub (JARVIS) at center
  - Inner ring: all registered agents (agents color-coded by type: proxmox=green, HA=gold, etc)
  - Outer ring: netscan-discovered devices
  - Rotating orbit rings on hub and agent nodes
  - Pulsing radial glow per node keyed to online status
  - Hub cross-hair targeting lines
- Directional particle flow:
  - CYAN particles: data/heartbeats flowing FROM agents TO JARVIS hub
  - ORANGE particles: commands flowing FROM JARVIS hub TO agents
  - All particles travel curved bezier paths, fade at endpoints, glow with shadows
- Mouse hover: node info card shows name/IP/status/type
- Stats bar: total nodes, online count, agent count
- Background: faint hex grid overlay for sci-fi depth
2026-06-02 00:38:08 +00:00
myron c8e002091e 10 more alive-feeling effects: HUD corners, data stream, topology, boot seq, vignette, EKG, audio ring, typewriter, static burst, color cycle
① HUD corner rings: animated scanning arcs in all 4 screen corners with tick marks, edge lines, moving dot
② Data stream columns: 22 subtle falling hex/glyph columns behind everything (Matrix-adjacent, very low opacity)
③ Network topology canvas: live node constellation above the network list with pulsing travel dots on connections
④ HUD boot sequence: topbar/panels slide in from edges with staggered timing on every login
⑤ Breathing vignette: screen edges slowly pulse + shifts to red when alerts are active
⑥ EKG heartbeat: scrolling ECG waveform in bottom bar (P-QRS-T complex, green glow)
⑦ Audio waveform ring: animated bar ring around the arc reactor during mic/TTS activity
⑧ Typewriter: JARVIS chat responses type out character by character with adaptive speed + cursor blink
⑨ Static noise burst: random panel gets 280ms noise overlay every 75-130 seconds
⑩ Ambient color cycle: --cyan slowly drifts between blue-cyan and green-cyan over 70s loop
2026-06-02 00:27:27 +00:00
myron c34d497e9d Fix camera/mic interference: detection runs during TTS, 12s exit threshold, require no recent commands
- Remove isSpeaking outer guard — detection loop now runs always so lastFaceSeen stays current
- While isSpeaking + no face detected: refresh lastFaceSeen to prevent exit timer ticking during TTS
- Raise no-face exit threshold from 3s to 12s — sporadic missed frames no longer kill the session
- Add noCommandMs guard: camera never exits voice mode within 12s of last spoken command
- Voice auto-trigger still respects isSpeaking (wont reactivate mid-response)
2026-06-02 00:15:47 +00:00
myron c91e5b8be7 Face tracking: reactor follows face position via camera
- Smooth lerp animation loop (rAF at 60fps) drives .tb-logo translateX/Y toward face center
- Face X flipped to match mirror (move right = reactor slides right toward you)
- Scan crosshair overlay appears on screen at detected face position with spinning ring
- Reactor glows brighter (drop-shadow) while face tracking is active
- Graceful: coasts back to center when face lost, snaps off cleanly on camera disable
- Video frame is 320x240 mapped to viewport coords for overlay positioning
2026-06-01 23:58:38 +00:00
myron b3a329e81a Add 6 more alive-feeling effects: parallax, sparklines, flash, glitch, alert pulse, hover rise
- Mouse parallax: panels tilt in 3D toward cursor + columns shift depth (perspective:1200px on layout)
- Sparklines: mini 25-point line charts under CPU/mem/disk bars (cyan/green/orange per metric)
- Panel flash: system panel border pulses bright cyan on each data refresh
- Glitch: JARVIS title text does chromatic aberration glitch every 35-60s (random interval)
- Alert pulse: red radial overlay slowly breathes when there are unresolved alerts
- Hover rise: panels lift extra 4px + brighter border on mouse hover
- Bonus: metric bar shimmer (animated light sweep through filled bars)
2026-06-01 23:44:57 +00:00
myron 3297c00a1c Add futuristic floating UI: particles, panel float, HUD corners, scanline sweep, arc reactor, parallel refresh, animated counters
- Ambient particle canvas: 65 nodes with dynamic connection lines (GPU-accelerated)
- Floating panels: translateY oscillation with staggered phases per panel (pure CSS)
- HUD corner brackets on every panel (4-corner L-brackets via CSS ::after gradients)
- Animated grid drift: background-position keyframes give moving-through-space effect
- Scanline sweep: bright horizontal band that slowly scans the full viewport
- Mini arc reactor in top bar: always-on spinning rings + pulsing core
- Parallel API fetches in refreshAll(): Promise.all cuts refresh latency ~3x
- Animated number counters: CPU/mem/disk roll smoothly to new values (ease-out cubic)
2026-06-01 23:39:25 +00:00
myron 02847d5de3 Fix intent placeholders, add alert/agent/deploy action intents, admin search+tester
- Restore {user_title} in ~200 intents where placeholder was stripped (comma-period, em-dash variants)
- Replace 20 hardcoded Mr. Blair with {user_title} token
- Remove duplicate pve_storage and tech_ssh intents
- Add action intents: alerts_show, alerts_count, alerts_clear, agents_offline, agents_all, agents_count, deploy_status, deploy_force, pbx_status, pbx_extension
- Admin KB Intents: add search/filter bar (name/pattern/response + type/status dropdowns)
- Admin KB Intents: add TEST PATTERN button — tests any phrase client-side against full intent list
2026-06-01 23:23:32 +00:00
myron cf95960e57 Add HIDE UNAVAIL toggle to KB Facts page; filter unavailable/empty fact values client-side 2026-06-01 15:18:56 +00:00
myron f0e42cbcbd Style count badges to match agents page (cyan, spaced, X ONLINE / Y TOTAL format) 2026-06-01 14:25:04 +00:00
myron 78c95a508d Add total count badges beside page titles in admin
- KB Facts: shows total fact count (sum across all categories)
- Network Devices: shows online/total count in title
- Home Assistant Entities: shows entity count in title
- Proxmox VMs: shows running/total VM count in title
- KB Intents already had this; no change needed
2026-06-01 14:22:36 +00:00
myron 0caff5db57 Add brightness, media player, siren control + 5 scene keywords
- 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
2026-06-01 14:16:30 +00:00
myron 82e0262a4f fix: escape apostrophe in TODAY'S SCHEDULE string literal — SyntaxError was killing entire main JS, no panels loaded 2026-06-01 10:28:28 +00:00
myron 14bff8e1af fix: remove planner mini panel from main JARVIS page — belongs in admin only 2026-06-01 10:14:19 +00:00
myron 6ba412a886 fix: remove var sessionToken/sessionUser from injected script — conflicted with main script let declarations, killing all JS including logout() 2026-06-01 10:09:14 +00:00
myron 7286b999ff fix: force loginScreen hidden + app visible at HTML level — no JS needed to show dashboard 2026-06-01 10:05:37 +00:00
myron e0fc31332c fix: inject token as JS global (no sessionStorage needed), skip bridge.php, direct login→app 2026-06-01 10:01:00 +00:00
myron 2af5c03f1a fix: use default PHP session (PHPSESSID) not custom name — must match what api.php expects 2026-06-01 09:57:02 +00:00
myron 06a5b92543 fix: PHP entry point with Cache-Control: no-transform — disables Rocket Loader; server-side auth redirect 2026-06-01 09:39:03 +00:00
myron f30f0fdfad revert: restore admin/index.php to pre-login-fix state 2026-06-01 09:30:57 +00:00
myron d4a6d8359e revert: restore index.html to pre-login-fix state, remove all added login files 2026-06-01 09:30:47 +00:00
myron 50452753dc fix: index.php entry point — server-side 302 to login.php, no JS required; _app.html is the actual app 2026-06-01 09:28:39 +00:00
myron 69673685d9 fix: pure PHP login — login.php POSTs to PHP, bridge.php writes token to sessionStorage, zero JS dependency for auth 2026-06-01 09:22:24 +00:00
myron dbe945080d fix: auth guard in <head> — redirect to /login.html before Rocket Loader can defer anything 2026-06-01 09:17:39 +00:00
myron fee412386d fix: login.html — XHR instead of fetch, addEventListener not onclick, no inline handlers Rocket Loader can intercept 2026-06-01 03:59:25 +00:00
myron 389f0fd45e fix: new standalone login.html — script in <head> bypasses all Rocket Loader issues; index.html redirects to login.html when unauthenticated 2026-06-01 03:55:52 +00:00
myron a06b57ea7f fix: convert login form submit listener to named onclick doLogin() — prevents Rocket Loader race condition on form submit 2026-06-01 03:47:23 +00:00
myron c115ed4bb8 fix: bypass Rocket Loader on index.html scripts — form submit listener deferred, login silently reloaded page 2026-06-01 03:42:46 +00:00
myron 85e23f618f fix: bypass Cloudflare Rocket Loader on admin script — doLogin was undefined at click time
data-cfasync=false prevents Rocket Loader from deferring the main script block.
Also added try/catch + button feedback to doLogin so errors show visibly.
2026-06-01 03:26:15 +00:00
myron 5d5eb2fdac feat: complete calendar integration + planner widget + 298 new KB intents
- Add calendar sync route to api.php (/api/calendar → calendar_sync.php)
- Add CALENDAR SYNC tab to admin with feed CRUD (add/edit/delete Google/ICS feeds)
- Add cal_sync_now action to admin for on-demand iCloud/Google sync
- Add cron: calendar_sync.php every 15 min (iCloud CalDAV + ICS feeds)
- Add PLANNER mini panel to index.html (left panel, shows today tasks + appointments)
- Update loadPlannerSummary() to render tasks/appts with priority dots and times
- Seed 298 new KB intents across 37 categories: science, history, tech, geography,
  math, health, food, space, philosophy, psychology, sports, music, film, travel,
  language, literature, finance, productivity, nature, facts, home automation,
  architecture, geopolitics, and more — 543 total intents
2026-05-31 22:47:35 +00:00
myron 1c7a42f68b feat: 224 voice intents seeded; fix KBEngine fillTemplate — user_title, pending_count, system/network facts 2026-05-31 19:58:28 +00:00
myron cfdbd57bce fix: task/appt voice creation — non-greedy trigger strip, bare-date extraction, noon/midnight, book trigger, 900ms TTS mic gap 2026-05-31 19:47:41 +00:00
myron 5b599b1617 fix: voice — any speech = command when awake (no prefix lock), open window on wake, transcript preview in input 2026-05-31 19:39:51 +00:00
myron 2ddce52c9a fix: voice engine rewrite — continuous=false restart-per-utterance, _scheduleRecStart, 12s heartbeat, clean TTS handoff 2026-05-31 19:34:00 +00:00
myron af11d80216 fix: voice mic race condition — onend blocks restart during TTS, clean abort+restart after speech, stuck isSpeaking watchdog 2026-05-31 19:30:42 +00:00
myron 721607cfb0 fix: HA voice control — domain preference scoring, exact match priority, skip unavailable, fresh entity_map 2026-05-31 19:22:40 +00:00
myron 18649c47df feat: full voice intents — overdue/priority/week tasks, next appt, reschedule, cancel, week calendar, email→planner 2026-05-31 19:12:06 +00:00
myron 7c1cfda588 feat: email intelligence — action item detection, task/appt creation, admin EMAIL tab, full voice intents 2026-05-31 18:57:47 +00:00