voice-vibecoder 2.28.0__tar.gz → 2.28.1__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.28.0 → voice_vibecoder-2.28.1}/CHANGELOG.md +8 -0
  2. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/PKG-INFO +1 -1
  3. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/pyproject.toml +1 -1
  4. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/__init__.py +1 -1
  5. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/dispatch.py +14 -3
  6. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/.github/workflows/ci.yml +0 -0
  7. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/.github/workflows/release.yml +0 -0
  8. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/.gitignore +0 -0
  9. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/CLAUDE.md +0 -0
  10. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/LICENSE +0 -0
  11. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/README.md +0 -0
  12. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/app.py +0 -0
  13. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/app_config.py +0 -0
  14. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/audio.py +0 -0
  15. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/audio_macos.py +0 -0
  16. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/cli_serve.py +0 -0
  17. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/code_providers/__init__.py +0 -0
  18. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/code_providers/claude.py +0 -0
  19. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/code_providers/cursor.py +0 -0
  20. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/code_providers/openclaw.py +0 -0
  21. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/code_providers/registry.py +0 -0
  22. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/config.py +0 -0
  23. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/instances.py +0 -0
  24. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/server.py +0 -0
  25. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/session.py +0 -0
  26. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/__init__.py +0 -0
  27. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/agent_task.py +0 -0
  28. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/definitions.py +0 -0
  29. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/file_tree.py +0 -0
  30. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/tools/handlers.py +0 -0
  31. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/__init__.py +0 -0
  32. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/callbacks.py +0 -0
  33. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/diff_view.py +0 -0
  34. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/help_modal.py +0 -0
  35. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/panels.py +0 -0
  36. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/screen.py +0 -0
  37. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/setup.py +0 -0
  38. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/state.py +0 -0
  39. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/styles.py +0 -0
  40. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/update_modal.py +0 -0
  41. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/ui/wizard.py +0 -0
  42. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
  43. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/voice_providers/gemini.py +0 -0
  44. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/voice_providers/openai.py +0 -0
  45. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/src/voice_vibecoder/worktrees.py +0 -0
  46. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_audio_gating.py +0 -0
  47. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_file_tree.py +0 -0
  48. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_merge_branch.py +0 -0
  49. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_openai_events.py +0 -0
  50. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_session_interrupts.py +0 -0
  51. {voice_vibecoder-2.28.0 → voice_vibecoder-2.28.1}/tests/test_startup_context.py +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v2.28.1 (2026-07-22)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Fall back to configured agents, never hardcoded claude
10
+ ([`0b4bbf5`](https://github.com/snokam/voice-vibecoder/commit/0b4bbf5a78090ef99f6cbf17f8569536f6e2f74a))
11
+
12
+
5
13
  ## v2.28.0 (2026-07-22)
6
14
 
7
15
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-vibecoder
3
- Version: 2.28.0
3
+ Version: 2.28.1
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.28.0"
7
+ version = "2.28.1"
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.28.0"
6
+ __version__ = "2.28.1"
7
7
 
8
8
  from voice_vibecoder.app_config import VoiceConfig
9
9
  from voice_vibecoder.ui.screen import VoiceCodingScreen
@@ -55,6 +55,14 @@ _SCOPED_VARS: dict[str, contextvars.ContextVar] = {
55
55
  "_voice_config": _voice_config_var,
56
56
  }
57
57
 
58
+ # Enabled agents are deployment-constant (one agent set per worker process),
59
+ # unlike the per-connection registry/repo_root. The ContextVar can miss a
60
+ # background dispatch task that did not copy the configuring context; without a
61
+ # process-wide fallback that miss silently resolves to "claude" and a worker
62
+ # configured for openclaw runs the wrong agent. configure() records the last
63
+ # configured set here so an unset ContextVar falls back to it, never to "claude".
64
+ _enabled_agents_fallback: list[str] = ["claude"]
65
+
58
66
 
59
67
  def __getattr__(name: str) -> Any:
60
68
  var = _SCOPED_VARS.get(name)
@@ -62,12 +70,12 @@ def __getattr__(name: str) -> Any:
62
70
  raise AttributeError(name)
63
71
  value = var.get()
64
72
  if name == "_enabled_agents" and not value:
65
- return ["claude"]
73
+ return list(_enabled_agents_fallback)
66
74
  return value
67
75
 
68
76
 
69
77
  def _enabled_agents_or_default() -> list[str]:
70
- return _enabled_agents_var.get() or ["claude"]
78
+ return _enabled_agents_var.get() or list(_enabled_agents_fallback)
71
79
 
72
80
  # ── External tool registry ───────────────────────────────────────────────────
73
81
  # Maps tool name → async handler(name, arguments, user_jwt) -> str
@@ -128,11 +136,14 @@ def configure(
128
136
  user_jwt: str | None = None,
129
137
  voice_config: VoiceConfig | None = None,
130
138
  ) -> None:
139
+ global _enabled_agents_fallback
131
140
  _registry_var.set(registry)
132
141
  _repo_root_var.set(repo_root)
133
142
  _agent_timeout_var.set(agent_timeout)
134
143
  _permission_mode_var.set(permission_mode)
135
- _enabled_agents_var.set(enabled_agents or ["claude"])
144
+ if enabled_agents:
145
+ _enabled_agents_fallback = list(enabled_agents)
146
+ _enabled_agents_var.set(enabled_agents or None)
136
147
  _voice_config_var.set(voice_config)
137
148
 
138
149