Skip to content

v0.12.0

Latest

Choose a tag to compare

@ZYar-er ZYar-er released this 16 Aug 06:55

Highlights

  • Web Playback Selector: the header bell now opens a compact notification settings popover — a Notifications On/Off switch plus a Playback radio group (Browser / Backend / None). Changes apply immediately and persist atomically to ~/.config/dsh/notify-bell.json (no restart); the backend config is the single source of truth.
  • Browser playback (default): the backend classifies events and pushes the semantic sound over SSE (GET /notify-bell/events); the DSH Web UI plays the matching WAV (/notify-bell/sounds/*.wav, served from the package) via Web Audio. Autoplay unlock takes one user gesture.
  • Backend / None: backend plays on the host (BEL or WAV via soundPack); none keeps logs only.

Migration

  • Default playback changed to browser. Deployments upgrading from v0.11.x without an explicit playback now play in the DSH Web browser instead of the host. Terminal-only setups: set "playback": "backend" (or "none" for logs only) in ~/.config/dsh/notify-bell.json or via the popover.

API

  • GET /notify-bell{ ok, value: { enabled, playback }, version }
  • POST /notify-bell/setEnabled / POST /notify-bell/setPlayback (invalid 400, write failure 500 with runtime unchanged) / POST /notify-bell/toggle

Quality

  • Locale dictionary registered inside ctx.effect (HMR-safe); official DSH locale service for zh/en; dsh.client.inject declares @deepseek-ai/dsh-client-locale.
  • Browser sound map covers default (→ done.wav); SSE heartbeat stops when idle, connection cap (8) with 503; client GET failure has a retry path via the popover.
  • Tests: 6 node:test cases (179 assertion checks in the unit script + 5 session-layer integration), all passing; 30 files packed.