Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Apr 01:40
· 140 commits to main since this release

Added — Voice pipeline

  • Bidirectional voice pipeline — full duplex audio (capture → STT → agent_loop → TTS → playback) with WebRTC echo cancellation
  • MCP shim — bridges mod3 tools through cogos kernel as MCP tool surface
  • Bus-mediated dashboard chat — dashboard chat goes through cogos kernel buses instead of in-process loop, so external observers see the same conversation events

Added — Bargein provider registry

  • Pluggable BargeinProvider interface (bargein/providers/base.py) — was a hardcoded SuperWhisper file watcher; now extensible
  • SuperWhisperProvider (bargein/providers/superwhisper.py) — first provider, opt-in via MOD3_BARGEIN_PROVIDERS=superwhisper. Absorbs the SuperWhisper SQLite + filesystem detection logic that was previously drifting in a sibling repo
  • BargeinRegistry (bargein/__init__.py) — registry + shared handle_bargein_start() helper, used by both legacy file watcher and provider dispatch
  • BargeinRegistry.wait_for_event() — synchronous wait primitive used by await_voice_input() to block on in-process registry events
  • New "superwhisper" value in BargeinSource literal

Added — From earlier work, never released

  • Queue-aware speak() returns with enriched metadata (PR #4)
  • SpeechQueue for serial playback (thread-safe)
  • User-state detection (held status when user is recording)
  • /v1/stop HTTP endpoint for playback control
  • vad_check MCP tool

Changed

  • Default MOD3_BARGEIN_PROVIDERS= (empty) preserves current behavior — no providers auto-start
  • await_voice_input() now waits on both BargeinRegistry events AND legacy /tmp/mod3-barge-in.json for backward compat

Fixed

  • Speaking lock ownership(pid, job_id)-aware with idempotent re-acquire. Two overlapping mod3 processes can no longer falsely interrupt each other.
  • Bus subscriber endpointKernelBusSubscriber honors COGOS_ENDPOINT at call time (previously hardcoded localhost:6931)
  • Session-scoped reply routing — kernel replies with session_id get routed to the matching browser channel; older payloads fall back to broadcast
  • Signal path unificationmcp_shim.py reads from /tmp/mod3-barge-in.json (was orphan ~/.mod3_bargein_signal.json that nobody wrote to)
  • Held job zombie drain bug
  • Pyright type errors in Gate abstract class
  • Various ruff lint issues

Reviewed by

  • claude-opus-4-7 (interactive)
  • gpt-5.4 (peer review, 3 passes)

Notes on versioning

This release jumps from v0.1.0 to v0.4.0. An earlier v0.2.0 tag exists from before the cogos-dev org transition (no GitHub release was created). v0.3.0 was bumped in pyproject.toml and added to the CHANGELOG but never tagged. v0.4.0 captures everything since the last released version (v0.1.0).