voice-vibecoder 2.10.2__tar.gz → 2.11.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.
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/CHANGELOG.md +16 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/PKG-INFO +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/pyproject.toml +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/__init__.py +1 -1
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/openclaw.py +5 -29
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/.github/workflows/ci.yml +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/.github/workflows/release.yml +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/.gitignore +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/LICENSE +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/README.md +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/app.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/index.html +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/app_config.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/audio.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/cli_serve.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/claude.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/cursor.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/registry.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/config.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/instances.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/server.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/session.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/agent_task.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/definitions.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/dispatch.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/file_tree.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/tools/handlers.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/callbacks.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/diff_view.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/help_modal.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/panels.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/screen.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/setup.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/state.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/styles.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/update_modal.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/ui/wizard.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/voice_providers/openai.py +0 -0
- {voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/worktrees.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v2.11.0 (2026-02-21)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Send streaming text with stream: category
|
|
10
|
+
([`a884e51`](https://github.com/snokam/voice-vibecoder/commit/a884e51b5f62cb5e406e9331ae0502e5640e5c59))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## v2.10.3 (2026-02-21)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Don't stream intermediate text, only send final result
|
|
18
|
+
([`a8df3e4`](https://github.com/snokam/voice-vibecoder/commit/a8df3e4f55ff61d87cd569938e17eaf4f7b56845))
|
|
19
|
+
|
|
20
|
+
|
|
5
21
|
## v2.10.2 (2026-02-21)
|
|
6
22
|
|
|
7
23
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voice-vibecoder
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.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.
|
|
7
|
+
version = "2.11.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"
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/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,12 @@ 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
|
-
#
|
|
276
|
-
|
|
277
|
-
|
|
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
|
+
# Send entire accumulated text with stream: prefix
|
|
262
|
+
# Frontend will replace the previous stream line
|
|
263
|
+
if on_output:
|
|
264
|
+
on_output(AgentOutput(category="stream", content=text))
|
|
288
265
|
|
|
289
266
|
elif stream == "tool":
|
|
290
267
|
# Tool execution
|
|
@@ -309,7 +286,6 @@ class OpenClawRunner:
|
|
|
309
286
|
elif event == "chat":
|
|
310
287
|
state = payload.get("state")
|
|
311
288
|
if state == "final":
|
|
312
|
-
await flush_buffer() # Flush remaining text
|
|
313
289
|
# Get final message
|
|
314
290
|
msg_content = payload.get("message", {})
|
|
315
291
|
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.11.0}/src/voice_vibecoder/code_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/claude.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/code_providers/cursor.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/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.11.0}/src/voice_vibecoder/voice_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.10.2 → voice_vibecoder-2.11.0}/src/voice_vibecoder/voice_providers/openai.py
RENAMED
|
File without changes
|
|
File without changes
|