agentic-os/dashboard/pages
Claude d149356a22 Fix critical WebSocket origin bypass, zombie processes, and review findings
Addresses findings from Devin and Codex reviews on the merged PR #10:

- CRITICAL: /ws/terminal accepted connections from any origin - Starlette's
  CORSMiddleware does not protect WebSocket handshakes, so any webpage could
  open a socket to the dashboard's terminal and get an interactive shell on
  the user's machine. Now validates the Origin header against the same
  allowed-origins list used for CORS before accepting.
- PtySession.close() sent SIGKILL to the shell's PID but never reaped it via
  os.waitpid(), leaking a zombie process per closed terminal session.
- hermes_available() ran a real subprocess (possibly bridged through WSL) on
  every /api/status poll, which the dashboard hits every 15s. Added a 60s
  TTL cache.
- create_skill() now also creates learnings.md and the context/ directory,
  matching the standard skill template (_template/) instead of only
  writing SKILL.md.
- The '+ New Skill' button stayed visible in the Skills Hub detail view
  since only its sibling filter input was hidden; both now live under a
  shared #skillActions container that's hidden/shown together.

Verified: malicious/missing-origin WebSocket connections are rejected at
the handshake (HTTP 403) before any shell spawns; a valid dashboard origin
still connects and works; closing a session leaves no zombie/orphaned
process; the hermes availability cache avoids repeat subprocess spawns.
2026-07-09 00:07:17 +00:00
..
agent-health.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
audit.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
backups.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
chat.js v1.2.0: opencode JSON mode, 180s Hermes timeout, client AbortController, SEO README, badge/CSS fixes, prompt clipboard fix 2026-05-17 23:43:18 +05:30
cost.js Fix: page script 404 due to relative path, sidebar collapsed alignment, add favicon 2026-05-17 15:56:30 +05:30
dashboard.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
goals.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
journal.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
kanban.js Wire up autonomous agent dispatch for Kanban tasks 2026-07-05 23:16:46 +00:00
learning-analytics.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
memory.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
plugins.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
prompts.js v1.2.0: opencode JSON mode, 180s Hermes timeout, client AbortController, SEO README, badge/CSS fixes, prompt clipboard fix 2026-05-17 23:43:18 +05:30
scheduler.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
session-replay.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
settings.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
setup-wizard.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
skills.js Fix critical WebSocket origin bypass, zombie processes, and review findings 2026-07-09 00:07:17 +00:00
smart-router.js v0.2.0: 7 new features + UI modernization 2026-06-05 15:22:40 +05:30
standards.js Complete dashboard revamp: modern glassmorphism UI, all 12 pages functional 2026-05-17 15:48:54 +05:30
terminal.js Replace command-runner Terminal with a real interactive PTY 2026-07-06 05:12:54 +00:00