Commit Graph
111 Commits
Author SHA1 Message Date
snowspeeder 2be5725fbd feat: integrate real administration retry and approved feature destinations 2026-10-03 13:19:04 -04:00
snowspeeder fef3cb35a8 feat: integrate production account settings navigation 2026-10-03 13:18:28 -04:00
snowspeeder 02ea1d0884 feat: expose truthful inline realtime voice lifecycle 2026-10-03 13:18:19 -04:00
snowspeeder d8fa6f0654 design: record approved Hope conversation and administration overhaul 2026-10-03 13:12:55 -04:00
snowspeeder c549b92b52 test: qualify deployed realtime voice STT Hermes and audio delivery 2026-10-03 12:20:04 -04:00
snowspeeder 856238f47a test: verify deployed browser chat stream and immediate pin 2026-10-03 12:19:43 -04:00
snowspeeder 7cb641b35a fix: restore prominent realtime Talk navigation 2026-10-03 12:14:38 -04:00
snowspeeder 3752741e19 test: qualify advanced chat features with disposable live data 2026-10-03 12:11:57 -04:00
snowspeeder 6bb2f53dce fix: refresh conversation revision before post-run actions 2026-10-03 12:10:14 -04:00
snowspeeder 0c57217ad9 fix: reconcile uncertain voice admission with bounded cancellation 2026-10-03 09:08:25 -04:00
snowspeeder 0cb00e6095 test: qualify keyed voice cancellation receipts 2026-10-03 09:04:11 -04:00
snowspeeder 2ad9f36f4f fix: persist room operation cancellation across lost admission acknowledgments 2026-10-03 09:03:12 -04:00
snowspeeder 523f6cbbf9 feat: integrate durable chat voice transport and deployment assets 2026-10-03 09:02:47 -04:00
snowspeeder e059660194 fix: preserve idempotent admission under capacity and preparation failures 2026-10-03 09:00:36 -04:00
snowspeeder 33929b8c09 test: stress voice admission identity and repeated cancellation 2026-10-03 08:59:13 -04:00
snowspeeder 1a04dab031 test: guard durable chat deployment packaging 2026-10-03 08:58:36 -04:00
snowspeeder 550f7c2e91 feat: implement durable authenticated chat run coordinator 2026-10-03 08:57:41 -04:00
snowspeeder 08b7e20be8 feat: add qualified research exports and accessible voice handoff 2026-10-03 08:57:35 -04:00
snowspeeder 135e0c0da2 ci: gate deployment on offline chat qualification 2026-10-03 08:57:16 -04:00
snowspeeder e048793b02 feat: qualify native Hermes research and private conversation exports 2026-10-03 08:56:18 -04:00
snowspeeder fb3178d34b test: qualify chat cancellation and cross-client ownership 2026-10-03 08:55:45 -04:00
snowspeeder fe4192c8bc fix: guard chat deletion and research idempotency 2026-10-03 08:54:08 -04:00
snowspeeder 2048b33799 test: qualify quiesced deployment snapshots and rollback 2026-10-03 08:53:34 -04:00
snowspeeder fdf905eb7e feat: complete chat archive sync and mobile actions 2026-10-03 08:51:17 -04:00
snowspeeder bfbaef8c68 feat: add durable owner-scoped chat store 2026-10-03 08:51:09 -04:00
snowspeeder 8dda23a1d8 feat: add retained upload management controls 2026-10-03 08:50:08 -04:00
snowspeeder be2b9f83d0 feat: add owned advanced chat storage and qualified Hermes surfaces 2026-10-03 08:49:22 -04:00
snowspeeder bba522bc26 feat: add advanced chat attachment and saved work controls 2026-10-03 08:47:59 -04:00
snowspeeder 2261208a1b feat: add durable Hope primary web chat shell 2026-10-03 08:44:44 -04:00
snowspeeder 985c812a75 feat: add shared versioned Hope palette tokens 2026-10-03 08:36:28 -04:00
snowspeeder 437745bcca fix: declare Hermes auto image support and migrate running accounts 2026-10-02 16:17:29 -04:00
snowspeeder 6b8d55fc92 feat: add Hermes WebUI provisioning and English Dragon HD Omni voices
Rebuild & Deploy / rebuild (push) Successful in 2m17s
2026-10-02 16:07:24 -04:00
snowspeeder 47cc9c88a0 fix: persist verified iPhone certificate onboarding download 2026-10-01 18:02:14 -04:00
snowspeeder b6b7ad34bf docs: record live model settings qualification 2026-10-01 16:40:35 -04:00
snowspeeder 6cb4427210 feat: save account model and thinking settings for Hermes
Rebuild & Deploy / rebuild (push) Successful in 1m9s
2026-10-01 16:38:34 -04:00
snowspeeder a45569f8c1 fix: verify deployment health in Docker host network
Rebuild & Deploy / rebuild (push) Successful in 44s
2026-10-01 16:22:04 -04:00
snowspeeder 3122ca7605 fix: validate host certificates through Docker in CI
Rebuild & Deploy / rebuild (push) Failing after 1m9s
2026-10-01 16:19:58 -04:00
snowspeeder 129159ffd1 fix: support legacy Docker builder in deployment
Rebuild & Deploy / rebuild (push) Failing after 1m12s
2026-10-01 16:16:47 -04:00
snowspeeder c5f7bb39e7 fix: delay and vary spoken wait notices
Rebuild & Deploy / rebuild (push) Failing after 7s
2026-10-01 15:59:10 -04:00
snowspeeder 9cc6147c6f test: verify rollback restores originals on partial deployment failure
Rebuild & Deploy / rebuild (push) Failing after 15s
2026-10-01 13:40:21 -04:00
snowspeeder df25c7336c docs: record live speech qualification and secure operator handoff 2026-10-01 13:38:01 -04:00
snowspeeder 27853f7c27 fix: restore original services on partial deployment failure 2026-10-01 13:34:20 -04:00
snowspeeder 2aedea84b5 feat: provision private Hermes assistants for authenticated Hope accounts 2026-10-01 13:30:18 -04:00
snowspeeder da65da68b3 brand: adopt Lightwell aperture as the Hope brand mark
- web/brand/hope-mark.svg: canonical adaptive mark (light/dark)
- web/brand/hope-logo-horizontal.svg: lockup with rounded wordmark
- web/brand/hope-icon.svg: forced-dark icon-grid-tuned source
- favicon.svg: small-size tuned aperture
- manifest + index.html: PNG icons (192/512), apple-touch-icon, theme #1C191F
2026-09-12 17:26:54 -04:00
snowspeeder b01ee6478d fix: background tasks follow the live model selection
TaskWorker resolved its model from LLM_MODEL env (frozen at MCP spawn),
so after a live set_model switch in the UI, dispatched background tasks
still asked for the old model. On local-vl-models (llama-swap
--models-max 1) that forces a swap against the loaded conversation
model; a force-kill mid-load surfaces as 400 'model failed to load'.

The agent now writes the selected model to <task_dir>/model.txt at
session start and on every switch; TaskWorker reads it with the env
value as fallback.
2026-09-12 07:16:08 -04:00
snowspeeder 436b3fc8b1 refactor: split music streaming into Hope Music
Rebuild & Deploy / rebuild (push) Successful in 2m7s
Move the media server, downloader, library volume, and browser player to the
standalone hope-media-music product. Keep Hope's music tools as a thin HTTP
client of the LAN service on port 8094.

Use a stable voice-room player scope instead of ephemeral LiveKit room names.
The agent now owns the conversation handshake: fresh reported playback mutes
its input, joining pauses music, and the last participant leaving resumes only
music it paused. Peer failures remain non-fatal.

Also move the voice deploy workflow onto the active Unraid Gitea runner and
remove yt-dlp/ffmpeg/media health and volume dependencies from the image.
2026-09-12 06:35:15 -04:00
snowspeeder d4ea4fc984 fix: background tasks now fetch real page content; add task-status tools
Rebuild & Deploy / rebuild (push) Successful in 58s
Background research tasks were producing garbage or failing because the
self-hosted Firecrawl /v1/scrape defaults to a ~30s timeout that's too short
for heavy news/research sites, and the small LLM won't reliably chain a
second scrape call after a search that only returns snippets.

task_worker.py:
- web_search now auto-fetches the top results directly from the container
  (which has working outbound internet) and returns their real text, so the
  model gets actual page content in one call instead of snippet echoes.
- web_scrape requests timeout: 90000 (Firecrawl renders heavy sites but needs
  >30s), and falls back to a direct container fetch with tag-stripping if
  Firecrawl times out or returns nothing.

task_registry.py / dispatch_mcp.py:
- Add task_status(id) and list_tasks() tools so Hope can check the live state
  of any dispatched task (pending / running / completed / failed / STALLED).
- Track last_activity per task and surface a stall heuristic.
- Move the status summary into task_registry (no mcp dependency) so it's
  unit-testable.

agent.py: prompt tells Hope about task_status / list_tasks.
tests: add task-status summary and last-activity regression tests.
2026-08-30 06:54:57 -04:00
snowspeeder df8aa64504 fix: start cached songs even when played by voice (autoplay + room scope)
Rebuild & Deploy / rebuild (push) Successful in 50s
Hope often starts an already-downloaded song from a voice command, with no
click on the player. Two things could leave it paused at 0:

- The <audio> element sits outside the LiveKit room's audio-unlock flow, so
  autoplay policy rejected the poll-driven play(). Capture the first page
  gesture (pointerdown/keydown/touchstart) and play the current src inside it
  to whitelist the element for autoplay.
- Player state is scoped per LiveKit room, but mediaScope() could return a
  stale shell room after a reconnect. Derive it from the connected room.name
  so the browser polls exactly the room the agent joined, and a "play X"
  request can never land in a scope the browser isn't watching.

Add an in-container regression test (test_media_play_resolves_cached_ready_track)
pinning the server-side resolve: an already-ready track plays without a
re-download and serves a stable audio_url.
2026-08-29 17:37:51 -04:00
snowspeeder 436a26a0fc feat: show album art in the avatar square while music is loaded
The LED wall square switches to the track's cover art whenever a song is
loaded outside a conversation, and returns to the pulsing LED wall while
speaking to the agent (music and conversation are mutually exclusive, so
starting a talk hides the art and ending it restores it).
2026-08-29 17:37:39 -04:00
snowspeeder 68f4c461c8 feat: replace orb avatar with a livekit-style LED wall driven by agent audio
Rebuild & Deploy / rebuild (push) Successful in 37s
- Swap the CSS orb for a 21x21 LED dot matrix on a glass panel, matching
  the livekit.com LED-array hero visual.
- Pulse driven by the agent's rendered audio: an expanding radial bloom
  brightens and widens with remote-audio level, dimmer when listening on
  the mic, faint static matrix when idle, and a subtle warm breathing
  state while thinking.
- State-tinted palettes: cool azure when speaking, blue when listening,
  amber when thinking, dim slate when idle.
- Drop the unused orb CSS-variable pulse plumbing and the presence-breathe
  / orbit-turn keyframes; the wall renders per-frame from the analyser.
2026-08-29 17:05:57 -04:00