voice-vibecoder 2.10.2__tar.gz → 2.10.3__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.
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/CHANGELOG.md +8 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/PKG-INFO +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/pyproject.toml +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/__init__.py +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/openclaw.py +2 -29
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/.github/workflows/ci.yml +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/.github/workflows/release.yml +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/.gitignore +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/LICENSE +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/README.md +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/app.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/index.html +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/app_config.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/audio.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/cli_serve.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/claude.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/cursor.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/registry.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/config.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/instances.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/server.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/session.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/agent_task.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/definitions.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/dispatch.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/file_tree.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/tools/handlers.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/callbacks.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/diff_view.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/help_modal.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/panels.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/screen.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/setup.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/state.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/styles.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/update_modal.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/ui/wizard.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/voice_providers/openai.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/worktrees.py +0 -0
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v2.10.3 (2026-02-21)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Don't stream intermediate text, only send final result
|
|
10
|
+
([`a8df3e4`](https://github.com/snokam/voice-vibecoder/commit/a8df3e4f55ff61d87cd569938e17eaf4f7b56845))
|
|
11
|
+
|
|
12
|
+
|
|
5
13
|
## v2.10.2 (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.10.
|
|
3
|
+
Version: 2.10.3
|
|
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.10.
|
|
7
|
+
version = "2.10.3"
|
|
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"
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/openclaw.py
RENAMED
|
@@ -242,15 +242,6 @@ class OpenClawRunner:
|
|
|
242
242
|
await ws.send(json.dumps(chat_req))
|
|
243
243
|
|
|
244
244
|
result_text = ""
|
|
245
|
-
last_text = ""
|
|
246
|
-
text_buffer = ""
|
|
247
|
-
last_flush_time = time.time()
|
|
248
|
-
|
|
249
|
-
async def flush_buffer():
|
|
250
|
-
nonlocal text_buffer
|
|
251
|
-
if text_buffer and on_output:
|
|
252
|
-
on_output(AgentOutput(category="text", content=text_buffer))
|
|
253
|
-
text_buffer = ""
|
|
254
245
|
|
|
255
246
|
while True:
|
|
256
247
|
msg = await asyncio.wait_for(ws.recv(), timeout=300.0)
|
|
@@ -265,26 +256,9 @@ class OpenClawRunner:
|
|
|
265
256
|
|
|
266
257
|
if stream == "assistant" and "text" in agent_data:
|
|
267
258
|
text = agent_data["text"]
|
|
268
|
-
|
|
269
|
-
if text and len(text) > len(last_text):
|
|
270
|
-
delta = text[len(last_text):]
|
|
271
|
-
text_buffer += delta
|
|
272
|
-
last_text = text
|
|
259
|
+
if text:
|
|
273
260
|
result_text = text
|
|
274
|
-
|
|
275
|
-
# Flush on newlines or when buffer is large enough
|
|
276
|
-
now = time.time()
|
|
277
|
-
# Only flush on actual line breaks or large buffers
|
|
278
|
-
# Avoid flushing on . ! ? as they appear mid-text
|
|
279
|
-
should_flush = (
|
|
280
|
-
"\n" in delta
|
|
281
|
-
or delta.endswith("|") # Table row end
|
|
282
|
-
or len(text_buffer) > 120
|
|
283
|
-
or (now - last_flush_time) > 1.0
|
|
284
|
-
)
|
|
285
|
-
if should_flush:
|
|
286
|
-
await flush_buffer()
|
|
287
|
-
last_flush_time = now
|
|
261
|
+
# Don't send intermediate updates - let the final result be sent
|
|
288
262
|
|
|
289
263
|
elif stream == "tool":
|
|
290
264
|
# Tool execution
|
|
@@ -309,7 +283,6 @@ class OpenClawRunner:
|
|
|
309
283
|
elif event == "chat":
|
|
310
284
|
state = payload.get("state")
|
|
311
285
|
if state == "final":
|
|
312
|
-
await flush_buffer() # Flush remaining text
|
|
313
286
|
# Get final message
|
|
314
287
|
msg_content = payload.get("message", {})
|
|
315
288
|
if isinstance(msg_content, dict) and "content" in msg_content:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/claude.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/cursor.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/code_providers/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/voice_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.10.3}/src/voice_vibecoder/voice_providers/openai.py
RENAMED
|
File without changes
|
|
File without changes
|