voice-vibecoder 2.9.6__tar.gz → 2.9.7__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 (43) hide show
  1. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/CHANGELOG.md +8 -0
  2. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/PKG-INFO +1 -1
  3. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/pyproject.toml +1 -1
  4. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/__init__.py +1 -1
  5. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/code_providers/openclaw.py +6 -1
  6. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/.github/workflows/ci.yml +0 -0
  7. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/.github/workflows/release.yml +0 -0
  8. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/.gitignore +0 -0
  9. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/LICENSE +0 -0
  10. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/README.md +0 -0
  11. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/app.py +0 -0
  12. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/index.html +0 -0
  13. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/app_config.py +0 -0
  14. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/audio.py +0 -0
  15. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/cli_serve.py +0 -0
  16. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/code_providers/__init__.py +0 -0
  17. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/code_providers/claude.py +0 -0
  18. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/code_providers/cursor.py +0 -0
  19. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/code_providers/registry.py +0 -0
  20. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/config.py +0 -0
  21. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/instances.py +0 -0
  22. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/server.py +0 -0
  23. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/session.py +0 -0
  24. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/__init__.py +0 -0
  25. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/agent_task.py +0 -0
  26. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/definitions.py +0 -0
  27. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/dispatch.py +0 -0
  28. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/file_tree.py +0 -0
  29. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/tools/handlers.py +0 -0
  30. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/__init__.py +0 -0
  31. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/callbacks.py +0 -0
  32. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/diff_view.py +0 -0
  33. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/help_modal.py +0 -0
  34. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/panels.py +0 -0
  35. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/screen.py +0 -0
  36. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/setup.py +0 -0
  37. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/state.py +0 -0
  38. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/styles.py +0 -0
  39. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/update_modal.py +0 -0
  40. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/ui/wizard.py +0 -0
  41. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
  42. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/voice_providers/openai.py +0 -0
  43. {voice_vibecoder-2.9.6 → voice_vibecoder-2.9.7}/src/voice_vibecoder/worktrees.py +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v2.9.7 (2026-02-21)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Handle content as list of blocks in final message
10
+ ([`5ac75ac`](https://github.com/snokam/voice-vibecoder/commit/5ac75ac42cd7bf64cf06e48b102386dedf52ed26))
11
+
12
+
5
13
  ## v2.9.6 (2026-02-21)
6
14
 
7
15
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-vibecoder
3
- Version: 2.9.6
3
+ Version: 2.9.7
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.9.6"
7
+ version = "2.9.7"
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.9.6"
6
+ __version__ = "2.9.7"
7
7
 
8
8
  from voice_vibecoder.app_config import VoiceConfig
9
9
  from voice_vibecoder.ui.screen import VoiceCodingScreen
@@ -276,7 +276,12 @@ class OpenClawRunner:
276
276
  # Get final message
277
277
  msg_content = payload.get("message", {})
278
278
  if isinstance(msg_content, dict) and "content" in msg_content:
279
- result_text = msg_content["content"]
279
+ content = msg_content["content"]
280
+ if isinstance(content, list):
281
+ texts = [c.get("text", "") for c in content if isinstance(c, dict) and c.get("type") == "text"]
282
+ result_text = "\n".join(texts)
283
+ elif isinstance(content, str):
284
+ result_text = content
280
285
  break
281
286
  elif state == "error":
282
287
  error = payload.get("error", "Unknown error")
File without changes
File without changes