Commit Graph

63 Commits

Author SHA1 Message Date
aef12aafd8 fix(portal): resolve 10+ sec link delay by fixing Garage S3 secret key, adding 1s boto3 timeouts, and running S3 list calls in parallel 2026-10-29 16:43:24 +11:00
3bf3ea798f docs: add security audit findings and register Tuxedo security tasks; add Basketball and Interactive Resume cards to Family Console portal 2026-10-29 16:18:53 +11:00
4968a63e37 feat(portal): add Webmail (Sam), Web Restrict (Sam/Jo), and School Portal (Sam/Jo/Finn/Harry) 2026-10-16 12:40:57 +11:00
1ff6c41a51 dsh: remove the local Ollama models from the chat dropdown
Reverts the MODEL_CHOICES/MODEL_LABELS additions from 2609ab5. The .27 models are
gone from the family console, so the two dropdown entries would have been dead
options that error when selected (and they were offered to every user).

The list is back to exactly the original 10 cloud entries. Existing sessions that
still reference a removed id fall back to the default rather than erroring, since
the server validates the id against MODEL_CHOICES.

docs/dsh-architecture.md: drop the 'Local Ollama models' section, and add a warning
that auto/* are OmniRoute *routers* — when OmniRoute's pool is exhausted they fail
with 'Maximum combo retry limit reached' and DSH shows it as 'Model returned no
response', which is not a DSH bug.

Verified on .13: all four instances report 10 models with no ollama entries, and a
real streamed reply comes back through DSH on an explicit model.
2026-10-12 19:45:29 +11:00
990e433117 panel: remove the Ollama card and its controller entry
The local 14B model is not usable from this machine (8.25 tok/s prompt
processing; pi sends a 9,510-token agent prompt against a 4,096 context, so it
was truncated to 2,050 and still needed ~4 min before the first token). Nothing
about the panel was worth keeping for it.

- portal/tools.py: drop the 'Ollama Local LLM' tile (no other references remain)
- services.toml: drop the ollama allowlist entry; 8 services remain
- service_controller.py + docs: keep the generic 'systemd-system' kind but drop
  the ollama-specific wording and mark it as currently unused

Verified on .13: /api/services no longer lists ollama, the deployed tools.py has
0 ollama matches, the other 8 cards still report correctly, portal is healthy.
2026-10-12 19:39:45 +11:00
2609ab5286 dsh: offer the local .27 Ollama models in the chat model dropdown
The dropdown is built from the hardcoded MODEL_CHOICES list in app.py, not from
OmniRoute, so 'ollama/qwen2.5*' existed upstream but could never appear in DSH.

- add ollama/qwen2.5:14b and ollama/qwen2.5-coder:14b to MODEL_CHOICES + MODEL_LABELS
- labels note that Ollama must be started first, since it now boots off on .27
- docs/dsh-architecture.md: new section on model selection, incl. the rebuild
  requirement (app.py is baked into the image via COPY . .) and the ordering trap
  that a model can be live in OmniRoute yet invisible in DSH

Verified: /api/models lists both ids on 3081-3084, and real streamed replies come
back from both local models through DSH.
2026-10-12 17:05:25 +11:00
d7802bddb1 fix(ollama): toggle the NixOS system service on .27, not the deleted user unit
The ollama card was wired to 'systemctl --user', but the .27 user unit was
removed when Ollama moved to services.ollama (NixOS system service). The panel
therefore reported Stopped while the service was Running and its buttons failed.

- new controller kind 'systemd-system' -> sudo -n <canonical systemctl> ...
- resolve systemctl to its store path first: NixOS puts a symlink on PATH but
  the NOPASSWD sudoers rule names the store path, so bare 'sudo systemctl' does
  not match (verified: full path exit=0, bare name 'a password is required')
- _remote() now shlex.join()s the remote command; ssh joins trailing argv with
  spaces, which was word-splitting the 'sh -c' wrapper and failing with a sudo
  usage error
- services.toml: ollama -> kind=systemd-system, target=ollama (matches the
  sudoers rule verbatim), default_state=running
- docs/portal-architecture.md: document the three controller kinds + gotchas

Verified end-to-end from .13: start->running, stop->stopped, start->running,
real systemctl agrees, and /v1/models lists both qwen2.5 models over the LAN.
2026-10-12 16:29:10 +11:00
a661fb3b2e feat(ollama): add Ollama local LLM (.27) card & remote SSH control to service-controller 2026-10-12 14:12:30 +11:00
c9d09ac859 docs: add comprehensive technical architecture specs for DSH, Portal, and Host Ports 2026-10-10 10:18:00 +11:00
a639824fd0 fix(portal): fix card layout ejection bug & sync top-right status dot with live service state 2026-10-08 21:56:42 +11:00
24227c527a ON/OFF: WorldMonitor group toggle — controller supports multi-target groups (aggregate state, one switch for 4 containers), console card wired (admin), partial-state pill 2026-10-08 21:41:54 +11:00
0ce1b6e6ba console: admin ON/OFF cards (Paperclip, Prefect worker, Photo Pipeline — admin-only toggle strips) + failed-state dozzle log link on media cards; per-user toggle gating verified (finn: media only, 403 on admin) 2026-10-08 21:18:37 +11:00
a73087ba02 env.example: fix SC_TOKEN appended mid-line 2026-10-08 19:11:10 +11:00
85827be3be ON_OFF Phase 0-3: service-controller (.13:8443, token-gated, containers+systemd-user, audit log) + portal toggle cards (live status, per-user who, failed token, RAM) — full E2E verified 2026-10-08 19:10:45 +11:00
bb2c6e5d0d ON_OFF: record all decisions (per-user toggles, n8n/paperclip/prefect, bounded audit, python controller, MAX_RES done); revise 4.6 with verified compose-project audit 2026-10-07 16:22:13 +11:00
b37c5a5134 lmms: clamp MAX_RES to 2560x1440 — drops Xvfb virtual screen from 15360x8640 (~506MB/plane) to ~14MB/plane (~984MB freed) 2026-10-07 15:12:02 +11:00
e02e5712d2 console: add always-visible back-to-top button + collapsible dashboard panels (per-section, persisted) 2026-10-07 15:06:22 +11:00
6f32301540 console: add Paseo (multi-agent orchestration GUI) + Paperclip (agent harness manager) cards to AI Tools section 2026-09-26 17:36:33 +10:00
134fb233bc dsh: honor explicit 'ask/hey jervis' addressing in home gate (direct target = route to Jervis) 2026-09-20 07:05:07 +10:00
1535e14c6f dsh: Option 1 gateway — home-shaped chat requests (announce, HA, shopping, calendar, music, messaging) route raw to Jervis; normal chat untouched 2026-09-20 06:55:04 +10:00
1d3e2b6ab7 dsh: speak tool — announce over house speakers via Jervis (function-calling gate, zero latency for normal chat) 2026-09-19 16:53:24 +10:00
438445115f dsh: add direct DeepSeek provider routes to picker (creds now active) 2026-09-15 14:38:36 +10:00
882ffdb631 dsh: rename conversations, live model in header, swap to OmniRoute auto/* routes (opencode-go dropped - no creds/burn); direct deepseek routes dead 2026-09-15 14:21:28 +10:00
9d38d79abb Archify + README: add Whisper speech-to-text node (dsh -> whisper); maps republished 2026-09-12 09:04:29 +10:00
67a3e12c00 dsh: convert any audio/video (m4a/mp3/mp4/aac) to WAV via ffmpeg before whisper; verified m4a + mp3 transcribe 2026-09-12 08:53:45 +10:00
3d1a068c3b dsh: add Transcribe audio (whisper) + Ask with a file tools, workspace download route, OmniRoute x-opencode-session fix, regrouped toolbar 2026-09-12 08:45:24 +10:00
a71059ac1e Remove Langfuse card (service removed) 2026-09-08 09:31:15 +10:00
1345216551 Map links -> direct family-home-lab-map.html (README + console card) 2026-09-06 19:26:22 +10:00
7fae0c4cbc README: add Architecture Mermaid diagram + link to interactive maps.lab 2026-09-06 18:38:43 +10:00
343bdac430 Console: add Lab Maps card -> maps.lab.audasmedia.com.au/family_home_lab/docs 2026-09-06 12:48:51 +10:00
e6df735f68 Archify: Family Home Lab architecture map (showcase HTML + JSON) 2026-09-06 12:04:47 +10:00
afcc0a1e20 Garage UI -> garage-ui.lab; add AWS S3 Console backup card 2026-09-05 09:02:04 +10:00
584320b999 Offsite card -> S3 status dashboard; Garage card renamed Garage UI (with File Browser) 2026-09-05 08:53:56 +10:00
ae135138e1 Console: remove KitchenOwl card; add Metube + Outline cards 2026-09-04 14:19:02 +10:00
6ccba43b37 Transcriber: video accept, delete buttons, live status spinner; Files: delete button 2026-09-03 20:49:52 +10:00
f46975ae32 Transcriber: accept video uploads (mp4/mov/webm/mkv) -> ffmpeg-extract audio -> MIDI; ffmpeg in workers 2026-09-03 19:47:37 +10:00
04a3aeb712 dsh dark: fix bubbles/buttons/inputs (app.css vars + dark scrollbar) 2026-09-03 13:26:57 +10:00
485319812c Dark mode: portal (tokens/toggle) + dsh chat (vars + toggle) 2026-09-03 12:32:55 +10:00
4cf702cd5f Voice: update 'Things Jervis can do' list (full capabilities) 2026-09-01 18:01:17 +10:00
4036c1cb35 Voice: multiline textarea input + Clear button 2026-09-01 14:21:16 +10:00
e0558e91b4 Login: password show/hide eye toggle 2026-09-01 12:47:42 +10:00
29dd6904cc Add Offsite Backup (Amazon S3) card for sam/admin -> offsite.lab.audasmedia.com.au 2026-08-31 09:43:14 +10:00
c6c9588d65 Voice assistant: immediate working/waiting spinner on Send 2026-08-30 15:22:31 +10:00
7cfeeaf000 Voice page: example commands + character voices (Donald/Hal/Mech Warrior/Ryan); Snapcast card -> working http IP 2026-08-30 15:08:00 +10:00
d68f6a4304 Console Voice Assistant (Jervis): text prompt box -> local LLM agent (/voice proxies to .13:8501) 2026-08-30 14:55:39 +10:00
a347aefdff dsh: multiline textarea + Send below; collapsible Model & tools panel; tidy todo.txt 2026-08-30 12:11:02 +10:00
273e173359 dsh: add GLM-5v to model picker; image-attach routes to selected vision model (direct, no ffmpeg) 2026-08-28 14:37:08 +10:00
0853139f5f dsh: multimodal video/screen-recording analyzer (GLM-5v + ffmpeg frames); fix File/UploadFile imports + ffmpeg in image 2026-08-28 13:33:32 +10:00
22e61676a0 Nextcloud card -> public nextcloud.lab (was nextcloud.home.lab) 2026-08-26 22:17:07 +10:00
dba59d71a7 dsh: pin models to reliable OmniRoute providers (chat=opencode-go flash, reasoning=deepseek flash, coding=deepseek pro) + friendly labels 2026-08-26 21:59:49 +10:00