365 Commits

Author SHA1 Message Date
root
1a10bfea0d feat(migrate): ensureSpace helper
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:18:44 +10:00
root
681b091e4a feat(migrate): migration_map idempotency ledger
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:18:05 +10:00
root
bbb90c12c6 docs: void-migrate implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:17:32 +10:00
root
feb700e3f6 docs: void-migrate (Plan 8a) design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:14:29 +10:00
root
cea2442c4f fix(actions): ssh channel pins known_hosts beside key (no HOME dependency)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:00:52 +10:00
root
169e3b6d5c feat(actions): configurable SSH user + insecure-TLS for PVE; real action whitelist + Z wrapper
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:56:33 +10:00
root
80ad482d82 chore: release 2.0.0-alpha.16 (Little Blue + action framework)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:48:15 +10:00
root
8dfb56d2ac feat(ui): Little Blue view — caretaker chat + actions panel
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:44:35 +10:00
root
b064f7f1a9 feat(littleblue): agent seed + persona + chat route
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:43:34 +10:00
root
ff681847ed feat(littleblue): blue tool registry (list/propose action via local API) + run_turn extraEnv
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:42:27 +10:00
root
3aa8dc578b feat(actions): /api/actions routes (run/pending/approve/reject)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:41:29 +10:00
root
62113f37e6 feat(actions): tiered action service (safe-run / risky-queue / approve)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:40:50 +10:00
root
a186116c4d feat(actions): SSH forced-command service-restart channel + host wrapper
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:40:20 +10:00
root
c9268f8792 feat(actions): scoped Proxmox power channel
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:40:20 +10:00
root
2c3d78c99b feat(actions): config-driven action whitelist registry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:40:20 +10:00
root
135244cb13 feat(actions): agent_actions table + repo
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:39:05 +10:00
root
d500b6fa00 docs: Little Blue implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:38:28 +10:00
root
e58090e607 docs: Little Blue (Plan 7 brick 2) design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:33:01 +10:00
root
6ceb27fa2f chore: release 2.0.0-alpha.15 (Yerin online)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:14:38 +10:00
root
eb33bd8604 feat(ui): Sentinel view — Yerin global security chat
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:11:11 +10:00
root
423cbd342a refactor(ui): Dross rail uses agent_chat
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:11:11 +10:00
root
1aebdfe317 feat(ui): extract reusable agent_chat panel
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:11:11 +10:00
root
79b8197c99 feat(yerin): global security chat endpoint /api/security/yerin
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:09:12 +10:00
root
d480d79843 refactor(companion): ride on shared runAgentTurn + personas
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:08:05 +10:00
root
01c6594bfb feat(agents): shared runAgentTurn turn-runner
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:06:56 +10:00
root
1a28742536 feat(agents): personas module (Dross + Yerin), keyed by slug
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:06:56 +10:00
root
e8dfc8f392 feat(agents): conversations.findOrCreateGlobal for space-less agents
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:04:31 +10:00
root
92299548ee docs: Yerin online implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:03:57 +10:00
root
84bb2739e1 docs: Yerin online (Plan 7 brick 1) design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:59:12 +10:00
root
6b26b79a84 chore: release 2.0.0-alpha.14 (MCP HTTP transport)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:13:20 +10:00
root
6041f845e9 feat(mcp): mount /mcp Streamable HTTP endpoint
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:09:30 +10:00
root
0b29b8c2f3 feat(mcp): mcpAuth middleware — agent bearer + space scope + rate limit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:08:45 +10:00
root
185a4f3c96 feat(mcp): external registry + agent ctx + Streamable HTTP server
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:08:14 +10:00
root
c955f1eaaf feat(mcp): space-scope the read tool for bound callers
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:07:22 +10:00
root
99b1fa445a docs: MCP HTTP/SSE transport implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 20:06:32 +10:00
root
858ef53eea docs: MCP HTTP/SSE transport design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 19:59:39 +10:00
root
f780043f2d feat(ui): 2.0.0-alpha.13 — finer per-card width scaling (12-col grid + -/+ stepper)
clock/weather etc. default to 1/6 width; sizes store an integer span 1-12
(legacy s/m/l still accepted by /api/dashboard/layout).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 18:23:37 +10:00
root
ae3a45251d feat(ui): 2.0.0-alpha.12 — editable Sacred Valley layout
Edit-layout mode: per-card resize (S/M/L), show/hide with a hidden-cards tray,
drag-to-reorder via a dedicated grip handle, and reset-to-default. Persists via
the existing /api/dashboard/layout (order/sizes/hidden) — no backend change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 18:15:08 +10:00
root
ce26895d8e feat: 2.0.0-alpha.11 — DB-backed service registry + LAN auto-discovery
- monitored_services table (mig 015) replaces config/services.json (now a boot seed)
- owner CRUD over /api/health/services; GET is DB-backed; cron+worker read the DB
- discover.lan worker: pure-Node TCP sweep + HTTP-title probe -> disabled 'discovered'
  candidates (never clobbers curated entries); POST /api/health/discover + GET .../discovered
- dashboard: Scan button + Discovered(N) section with one-click promote

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 07:55:08 +10:00
root
b728696020 ops: harden push.sh — snapshot + migrate-in-deploy + /health gate + auto-rollback
Removes the rsync --delete / manual-migration / no-rollback footguns from the
deploy path. Validated: clean deploy passes the health gate; a forced health
failure correctly rolls back from the .prev snapshot and recovers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 07:33:32 +10:00
root
4e943ada12 feat(auth): 2.0.0-alpha.10 — Cloudflare Access SSO as owner auth
A cryptographically-verified CF Access JWT (signature vs team JWKS + audience +
email allow-list) now counts as the owner, so browser requests through the CF
tunnel don't need the owner token copied onto each device. Fails closed → owner
token remains the fallback (LAN-direct + dev/tests unaffected). Opt-in via
CF_ACCESS_TEAM_DOMAIN / CF_ACCESS_AUD / CF_ACCESS_OWNER_EMAILS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 10:25:58 +10:00
root
925cb0d7d6 chore: 2.0.0-alpha.9 — security & correctness hardening (Void 3.0 quick wins)
- Q3: prod void DB role NOSUPERUSER (vector marked trusted; deploy/README documents it)
- Q4: buildChildEnv allow-list for the claude subprocess (no OWNER_TOKEN/DATABASE_URL/secrets leak)
- Q5: pending-change approve claims-before-applying + reopens on failure (no re-approvable dup)
- Q6: /capture/upload validates space_id (UUID+existence); pg pool statement_timeout 30s
- Q9: disabled failing syncoid-donatello timer on Z

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 07:54:57 +10:00
root
1e1d0c539d feat(ui): add separate Network·Devices band (IoT/personal) below Little Blue
Read-only static band from public/devices.json (ARP scan), grouped Smart Home /
Entertainment / Personal / Network / Flagged. Kept distinct from Little Blue's
service health band. Live discovery deferred.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 00:10:54 +10:00
root
3fb5a60bf6 feat(health): add OpenClaw (agents, tcp/22) + OBD2 (infra, syncthing :8384); drop misleading Homarr icon on Homelable
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 00:09:00 +10:00
root
0026d2bc6e feat(ui): collapsible sidebar + rail, off-canvas mobile drawers, responsive layout
- Left sidebar collapses (topbar menu button); rail collapses (topbar button + strip).
- <=860px / portrait: sidebar + rail become off-canvas drawers over main with a
  scrim, closed by default; main goes full-width single-column.
- Smooth transitions; crossing the breakpoint resets to a sane default.
- New components/chrome.js owns toggle + drawer state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:57:45 +10:00
root
c325e53de4 feat(health): add Jellyfin (via traefik host); keep sonarr/radarr/qbit visible as down
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:51:27 +10:00
root
118cea7b66 feat(health): wire up all discovered homelab services (LAN scan)
18 tiles across agents/infra/media/other: + Open WebUI, Gramps, Scanopy, Homelab
Home, Pterodactyl, Proxmox z/z3 (tcp check for self-signed TLS), Void 1.x, Farm
Timelapse, MagicMirror, Claude Usage. Skipped gateway/rogue/IoT noise.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:43:44 +10:00
root
56c3bf5f08 fix(health): correct service registry to live homelab (BookStack :6875, drop undeployed sonarr/radarr/qbittorrent, add tdarr)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:36:57 +10:00
root
1b5630ec73 docs(plan6): note deferred localStorage first-paint mirror as follow-up
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:23:33 +10:00
root
b82b90d2f5 fix(sacred-valley): review polish — render-gen guard, auth-boundary tests, PNG sig, dedup note
Addresses final-review findings: I1 render-generation guard prevents a double-mount
/timer leak on rapid re-navigation; I2 adds anonymous-rejection tests for the owner-only
POST /speedtest/run and /health/check; M1 CSS comment; M2 cron↔worker dedup note;
M4 full 8-byte PNG signature check; M5 card-contract unit test for all 7 cards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 23:20:14 +10:00