Commit Graph

133 Commits

Author SHA1 Message Date
root
43bfa23a00 feat(spaces): docs-kind spaces render as pure documentation repos
Adds a `kind` column to spaces ('project' default, 'docs' for Wiki).
Docs spaces skip projects/tasks fetches and render only the page tree.
Sidebar caret for docs spaces expands to top-level pages (#/page/:id).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 23:41:46 +10:00
root
71adc51c00 fix(embed): chunk + mean-pool long text so large pages embed
Split long page text into 1500-char chunks before calling Ollama, then
mean-pool the per-chunk vectors into one page vector. Removes the hard
6000-char slice that still caused 500s on dense markdown/table pages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 23:24:40 +10:00
root
3f77f3faad feat(pages): explicit position ordering + sectioned space view
Add position column to pages (migration 020), update listBySpace to ORDER BY position, title,
expose position in update(), add to patchSchema, and replace the space view flat table with a
tree renderer grouping pages by parent_id under h4 section headers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 22:33:10 +10:00
root
147b4f514c feat(cutover): Plan 8b — point void.hynesy.com at Void 2 (alpha.18)
CF Access multi-aud: CF_ACCESS_AUD now accepts a comma-separated
allow-list so requests through either the void.hynesy.com or
void2-app.hynesy.com CF Access app are honoured as owner. Fails
closed; unlisted auds rejected. Adds multi-aud test.

Void 1 (CT 301) becomes legacy but stays running untouched as an
instant rollback. -alpha tag kept pending owner sign-off.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:50:57 +10:00
root
80363d3e68 feat(ui): Settings view + per-space project cards (status/research/edit/delete) + theming pass
- Settings (#/settings): API tokens (mint/list/revoke), Agents list, Orthos Mode placeholder
- Per-space Projects: Void-1-style expandable cards — inline status, ↻ Research (Eithan stub),
  Edit/New modal, Delete-with-confirm; migration 019 adds research_status/notes/timestamps;
  POST /api/projects/:id/research stub; GET /api/agent-tokens list
- Global +1 font bump; themed scrollbars; larger/bolder themed topbar

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:06:08 +10:00
root
5aba750102 feat(ui): AI Usage Sacred Valley card + /api/ai-usage proxy (Claude tokens + local model perf)
Summarises the Homelab Monitor (CT300 :8080) into a blackflame card: Claude Code
token usage today/week + top model, and OpenClaw/Ollama p50/p95 latency + error rate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:40:28 +10:00
root
0a490e4e68 feat(migrate): BookStack importer preserves Book › Chapter › Page hierarchy (parent_id)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:25:00 +10:00
root
332a0158a0 feat(migrate): CLI dispatch + verify
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:21:48 +10:00
root
718f92676d feat(migrate): BookStack importer
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:21:03 +10:00
root
b0d87fe5bf feat(migrate): Karakeep bookmarks importer
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:21:03 +10:00
root
af2dacbc00 feat(migrate): Void 1 SQLite importer
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:19:32 +10:00
root
485589a488 feat(migrate): plans importer
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:18:44 +10:00
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
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
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
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
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
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
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
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
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
root
b0d54a24cc feat(health): local icon cache /api/icons/:slug.png (no CDN leak)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:58:35 +10:00
root
60273a6204 feat(health): /api/health/services (grouped+counts) + owner /check
Adds GET /api/health/services returning registry services grouped by
category with merged cached status and per-group healthy counts, and
POST /api/health/check (owner-only) that enqueues a health.check
pg-boss job. Registers the health_check worker in the jobs index.
2026-06-02 22:56:50 +10:00
root
af0cac4e6b feat(health): probe + classify engine on a 60s cron
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:55:03 +10:00
root
5b05fd4730 feat(health): service_status cache table + repo 2026-06-02 22:53:39 +10:00
root
3ea34d9907 feat(health): service registry loader + seed config (fresh titles)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:52:46 +10:00
root
e36a87a50e feat(speedtest): worker + hourly cron + history/run routes
Adds speedtest pg-boss worker with injectable runner for testing, hourly
cron enqueue, and /api/speedtest/history (GET) + /run (POST, owner-only) routes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:50:19 +10:00
root
c59d2407ed feat(speedtest): results table + repo 2026-06-02 22:48:03 +10:00
root
e368ea41d8 feat(sacred-valley): drag-to-reorder with server-persisted layout
Adds HTML5 drag-to-reorder for .sv-card elements in Sacred Valley. The
pure moveId helper is unit-tested. Drop calls PUT /api/dashboard/layout
to persist the new card_order; DOM reflects the new order immediately.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:39:57 +10:00
root
3492b24dac feat(host): /api/host CPU/mem/disk/net from /proc
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:34:04 +10:00
root
42a4b5ef33 feat(weather): /api/weather Open-Meteo proxy with 15-min cache
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:31:48 +10:00
root
0a683c097d test: de-brittle /health version assertion (was pinned to stale alpha-6)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 22:29:57 +10:00
root
c3a3ac4feb feat(sacred-valley): card factory, registry ordering, view skeleton
Adds the Plan 6 card framework: svCard() chrome factory, pure orderCards()
ordering helper with unit tests, three stub card modules (clock/weather/host-perf),
and rewrites sacred_valley.js with the two-band layout that mounts ordered cards.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:26:09 +10:00
root
5c6d2077c3 feat(dashboard): owner-only GET/PUT /api/dashboard/layout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:19:37 +10:00
root
c67ac27545 feat(dashboard): dashboard_layout table + repo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 22:17:27 +10:00
root
a3eb5a58f0 feat(security): seed Yerin agent + registry-selectable MCP server
- migration 011_yerin.sql: seed read-only 'yerin' agent ({read:true}, kind claude,
  model NULL = server default; switch to local Ollama via agents.model anytime)
- companion-stdio.js: select the toolset from VOID_TOOL_REGISTRY ('security' →
  Yerin's securityRegistry; default → Dross's companionRegistry)
- tests/mcp/registry_select.test.js

Remaining for Yerin (left for review): an entry point (route or cron) + persona
prompt — see docs/yerin-security-agent.md.

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