voice-vibecoder 2.26.1__tar.gz → 2.26.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/CHANGELOG.md +13 -0
  2. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/PKG-INFO +1 -1
  3. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/pyproject.toml +1 -1
  4. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/__init__.py +1 -1
  5. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/agent_task.py +13 -4
  6. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/.github/workflows/ci.yml +0 -0
  7. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/.github/workflows/release.yml +0 -0
  8. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/.gitignore +0 -0
  9. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/CLAUDE.md +0 -0
  10. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/LICENSE +0 -0
  11. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/README.md +0 -0
  12. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/app.py +0 -0
  13. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/app_config.py +0 -0
  14. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/audio.py +0 -0
  15. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/audio_macos.py +0 -0
  16. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/cli_serve.py +0 -0
  17. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/code_providers/__init__.py +0 -0
  18. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/code_providers/claude.py +0 -0
  19. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/code_providers/cursor.py +0 -0
  20. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/code_providers/openclaw.py +0 -0
  21. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/code_providers/registry.py +0 -0
  22. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/config.py +0 -0
  23. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/instances.py +0 -0
  24. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/server.py +0 -0
  25. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/session.py +0 -0
  26. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/__init__.py +0 -0
  27. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/definitions.py +0 -0
  28. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/dispatch.py +0 -0
  29. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/file_tree.py +0 -0
  30. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/tools/handlers.py +0 -0
  31. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/__init__.py +0 -0
  32. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/callbacks.py +0 -0
  33. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/diff_view.py +0 -0
  34. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/help_modal.py +0 -0
  35. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/panels.py +0 -0
  36. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/screen.py +0 -0
  37. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/setup.py +0 -0
  38. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/state.py +0 -0
  39. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/styles.py +0 -0
  40. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/update_modal.py +0 -0
  41. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/ui/wizard.py +0 -0
  42. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
  43. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/voice_providers/gemini.py +0 -0
  44. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/voice_providers/openai.py +0 -0
  45. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/src/voice_vibecoder/worktrees.py +0 -0
  46. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_audio_gating.py +0 -0
  47. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_file_tree.py +0 -0
  48. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_merge_branch.py +0 -0
  49. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_openai_events.py +0 -0
  50. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_session_interrupts.py +0 -0
  51. {voice_vibecoder-2.26.1 → voice_vibecoder-2.26.2}/tests/test_startup_context.py +0 -0
@@ -2,6 +2,19 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v2.26.2 (2026-07-22)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Never run a disabled agent for a persisted instance
10
+ ([#8](https://github.com/snokam/voice-vibecoder/pull/8),
11
+ [`99b67aa`](https://github.com/snokam/voice-vibecoder/commit/99b67aa74cf4932535d7a16cf5076f6086bb4431))
12
+
13
+ - Per-connection dispatch state via ContextVars
14
+ ([#8](https://github.com/snokam/voice-vibecoder/pull/8),
15
+ [`99b67aa`](https://github.com/snokam/voice-vibecoder/commit/99b67aa74cf4932535d7a16cf5076f6086bb4431))
16
+
17
+
5
18
  ## v2.26.1 (2026-07-22)
6
19
 
7
20
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-vibecoder
3
- Version: 2.26.1
3
+ Version: 2.26.2
4
4
  Summary: Olaf The Vibecoder — a voice-controlled coding assistant using OpenAI Realtime API + Claude Code
5
5
  Project-URL: Homepage, https://github.com/snokam/voice-vibecoder
6
6
  Project-URL: Repository, https://github.com/snokam/voice-vibecoder
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "voice-vibecoder"
7
- version = "2.26.1"
7
+ version = "2.26.2"
8
8
  description = "Olaf The Vibecoder — a voice-controlled coding assistant using OpenAI Realtime API + Claude Code"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -3,7 +3,7 @@
3
3
  A voice-controlled coding assistant using OpenAI Realtime API + Claude Code.
4
4
  """
5
5
 
6
- __version__ = "2.26.1"
6
+ __version__ = "2.26.2"
7
7
 
8
8
  from voice_vibecoder.app_config import VoiceConfig
9
9
  from voice_vibecoder.ui.screen import VoiceCodingScreen
@@ -117,7 +117,7 @@ def _create_runner(agent_type: str, permission_mode: str, mcp_servers: dict | No
117
117
 
118
118
  def _handle_send_to_agent(message: str, branch: str | None = None, agent: str | None = None) -> str:
119
119
  from voice_vibecoder.tools.dispatch import (
120
- _default_agent_type, _fuzzy_match_branch, _helper_override,
120
+ _default_agent_type, _enabled_agents, _fuzzy_match_branch, _helper_override,
121
121
  _registry, _repo_root, _resolve_instance,
122
122
  )
123
123
 
@@ -146,8 +146,13 @@ def _handle_send_to_agent(message: str, branch: str | None = None, agent: str |
146
146
  return f"No instance for branch '{branch}'."
147
147
  return "No agent instance available."
148
148
 
149
- # Update agent type if switching on an existing instance
149
+ # Update agent type if switching on an existing instance. A persisted
150
+ # instance may carry an agent that is no longer enabled (e.g. "claude"
151
+ # after the default moved to openclaw); never run a disabled agent —
152
+ # fall back to the default instead of honouring the stale type.
150
153
  resolved_agent = agent or instance.agent_type or target_agent
154
+ if resolved_agent not in _enabled_agents:
155
+ resolved_agent = target_agent
151
156
  if resolved_agent != instance.agent_type:
152
157
  instance.agent_type = resolved_agent
153
158
  instance.session_id = "" # Clear session when switching agents
@@ -191,7 +196,7 @@ def _handle_send_to_agent(message: str, branch: str | None = None, agent: str |
191
196
 
192
197
  def _handle_send_to_session(message: str, session_name: str | None = None, agent: str | None = None, display_name: str | None = None) -> str:
193
198
  from voice_vibecoder.tools.dispatch import (
194
- _default_agent_type, _helper_override,
199
+ _default_agent_type, _enabled_agents, _helper_override,
195
200
  _registry, _repo_root,
196
201
  )
197
202
 
@@ -223,8 +228,12 @@ def _handle_send_to_session(message: str, session_name: str | None = None, agent
223
228
  instance.display_name = display_name
224
229
  _registry._save_state()
225
230
 
226
- # Update agent type if switching
231
+ # Update agent type if switching. Never run a disabled agent — a persisted
232
+ # session may carry a stale type (e.g. "claude" after the default moved to
233
+ # openclaw); fall back to the default in that case.
227
234
  resolved_agent = agent or instance.agent_type or target_agent
235
+ if resolved_agent not in _enabled_agents:
236
+ resolved_agent = target_agent
228
237
  if resolved_agent != instance.agent_type:
229
238
  instance.agent_type = resolved_agent
230
239
  instance.session_id = ""