voice-vibecoder 2.1.0__tar.gz → 2.2.0__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 (42) hide show
  1. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/CHANGELOG.md +3 -0
  2. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/PKG-INFO +1 -1
  3. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/pyproject.toml +1 -1
  4. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/__init__.py +1 -1
  5. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/panels.py +16 -0
  6. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/.github/workflows/ci.yml +0 -0
  7. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/.github/workflows/release.yml +0 -0
  8. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/.gitignore +0 -0
  9. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/LICENSE +0 -0
  10. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/README.md +0 -0
  11. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/app.py +0 -0
  12. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/index.html +0 -0
  13. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/app_config.py +0 -0
  14. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/audio.py +0 -0
  15. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/cli_serve.py +0 -0
  16. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/code_providers/__init__.py +0 -0
  17. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/code_providers/claude.py +0 -0
  18. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/code_providers/cursor.py +0 -0
  19. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/code_providers/registry.py +0 -0
  20. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/config.py +0 -0
  21. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/instances.py +0 -0
  22. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/server.py +0 -0
  23. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/session.py +0 -0
  24. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/__init__.py +0 -0
  25. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/agent_task.py +0 -0
  26. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/definitions.py +0 -0
  27. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/dispatch.py +0 -0
  28. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/file_tree.py +0 -0
  29. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/tools/handlers.py +0 -0
  30. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/__init__.py +0 -0
  31. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/callbacks.py +0 -0
  32. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/diff_view.py +0 -0
  33. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/help_modal.py +0 -0
  34. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/screen.py +0 -0
  35. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/setup.py +0 -0
  36. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/state.py +0 -0
  37. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/styles.py +0 -0
  38. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/update_modal.py +0 -0
  39. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/ui/wizard.py +0 -0
  40. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
  41. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/voice_providers/openai.py +0 -0
  42. {voice_vibecoder-2.1.0 → voice_vibecoder-2.2.0}/src/voice_vibecoder/worktrees.py +0 -0
@@ -2,6 +2,9 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v2.2.0 (2026-02-19)
6
+
7
+
5
8
  ## v2.1.0 (2026-02-19)
6
9
 
7
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-vibecoder
3
- Version: 2.1.0
3
+ Version: 2.2.0
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.1.0"
7
+ version = "2.2.0"
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.1.0"
6
+ __version__ = "2.2.0"
7
7
 
8
8
  from voice_vibecoder.app_config import VoiceConfig
9
9
  from voice_vibecoder.ui.screen import VoiceCodingScreen
@@ -93,6 +93,20 @@ class PanelMixin:
93
93
  except Exception:
94
94
  pass
95
95
 
96
+ def _show_welcome(self) -> None:
97
+ """Re-show the welcome panel if the grid is empty."""
98
+ try:
99
+ self.query_one("#welcome-panel")
100
+ return # already showing
101
+ except Exception:
102
+ pass
103
+ try:
104
+ grid = self.query_one("#agent-grid", Grid)
105
+ if len(grid.children) == 0:
106
+ grid.mount(Static(self._WELCOME_TEXT, id="welcome-panel"))
107
+ except Exception:
108
+ pass
109
+
96
110
  def _create_panels_batch(self, instances: list) -> None:
97
111
  """Create all panels in one mount call for faster startup."""
98
112
  if instances:
@@ -347,5 +361,7 @@ class PanelMixin:
347
361
  panel_count = len(grid.children)
348
362
  if panel_count > 0:
349
363
  _apply_grid_size(grid, panel_count, max_columns=3)
364
+ else:
365
+ self._show_welcome()
350
366
  except Exception:
351
367
  pass
File without changes
File without changes