voice-vibecoder 2.5.0__tar.gz → 2.5.2__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.5.0 → voice_vibecoder-2.5.2}/CHANGELOG.md +16 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/PKG-INFO +1 -1
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/pyproject.toml +1 -1
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/__init__.py +1 -1
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/config.py +27 -9
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/instances.py +22 -7
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/.github/workflows/ci.yml +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/.github/workflows/release.yml +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/.gitignore +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/LICENSE +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/README.md +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/app.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/index.html +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/app_config.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/audio.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/cli_serve.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/__init__.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/claude.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/cursor.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/registry.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/server.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/session.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/__init__.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/agent_task.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/definitions.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/dispatch.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/file_tree.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/tools/handlers.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/__init__.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/callbacks.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/diff_view.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/help_modal.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/panels.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/screen.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/setup.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/state.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/styles.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/update_modal.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/ui/wizard.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/voice_providers/__init__.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/voice_providers/openai.py +0 -0
- {voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/worktrees.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v2.5.2 (2026-02-20)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Let user freely continue conversations in any session/agent
|
|
10
|
+
([`0d43f1c`](https://github.com/snokam/voice-vibecoder/commit/0d43f1c0acca831d9b51da81a029cc45e04a8eea))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## v2.5.1 (2026-02-19)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Make agent instructions dynamic based on enabled agents
|
|
18
|
+
([`18a731c`](https://github.com/snokam/voice-vibecoder/commit/18a731c77c0fa85f62f5ca29e105ef406824f544))
|
|
19
|
+
|
|
20
|
+
|
|
5
21
|
## v2.5.0 (2026-02-19)
|
|
6
22
|
|
|
7
23
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voice-vibecoder
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.2
|
|
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.5.
|
|
7
|
+
version = "2.5.2"
|
|
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"
|
|
@@ -52,9 +52,8 @@ Sesjoner:
|
|
|
52
52
|
- remove_session for å fjerne en sesjon.
|
|
53
53
|
|
|
54
54
|
Agenter:
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
- For å BARE bytte agent: switch_agent. ALDRI send "bytt til X" som oppgave.
|
|
55
|
+
- Tilgjengelige agenter: {agent_names}.
|
|
56
|
+
- Hver instans bruker én kodeagent.
|
|
58
57
|
|
|
59
58
|
Regler:
|
|
60
59
|
- Videresend brukerens ord NØYAKTIG. Ikke omskriv.
|
|
@@ -63,6 +62,13 @@ Regler:
|
|
|
63
62
|
- Når agenten er ferdig: nevn utfallet i én setning.
|
|
64
63
|
- Vær naturlig, kort, vennlig mens agenter jobber.
|
|
65
64
|
|
|
65
|
+
Brukeren bestemmer:
|
|
66
|
+
- Når brukeren spesifikt sier hvilken sesjon eller agent de vil sende til, \
|
|
67
|
+
BARE videresend meldingen. ALDRI nekt eller forklar at sesjonen er "feil" for den oppgaven.
|
|
68
|
+
- Brukeren har ALLTID rett til å sende hva som helst til hvilken som helst sesjon/agent.
|
|
69
|
+
- Naturlig videreføring: hvis brukeren stiller et oppfølgingsspørsmål relatert til en nylig sesjon, \
|
|
70
|
+
send det til samme sesjon uten å spørre.
|
|
71
|
+
|
|
66
72
|
Avbryt/reset:
|
|
67
73
|
- "avbryt", "stopp" → cancel_agent (med branch eller session_name)
|
|
68
74
|
- "start på nytt", "reset" → reset_agent
|
|
@@ -99,9 +105,8 @@ Sessions:
|
|
|
99
105
|
- remove_session to remove a session.
|
|
100
106
|
|
|
101
107
|
Agents:
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
- To ONLY switch agents: use switch_agent. NEVER send "switch to X" as a task.
|
|
108
|
+
- Available agents: {agent_names}.
|
|
109
|
+
- Each instance uses one coding agent.
|
|
105
110
|
|
|
106
111
|
Rules:
|
|
107
112
|
- Forward the user's words EXACTLY. Don't rewrite.
|
|
@@ -110,6 +115,13 @@ Rules:
|
|
|
110
115
|
- When the agent finishes: mention the outcome in one sentence.
|
|
111
116
|
- Be natural, brief, friendly while agents work.
|
|
112
117
|
|
|
118
|
+
User is in control:
|
|
119
|
+
- When the user specifically says which session or agent to send to, \
|
|
120
|
+
JUST forward the message. NEVER refuse or explain that the session is "wrong" for the task.
|
|
121
|
+
- The user ALWAYS has the right to send anything to any session/agent.
|
|
122
|
+
- Natural continuation: if the user asks a follow-up question related to a recent session, \
|
|
123
|
+
send it to the same session without asking.
|
|
124
|
+
|
|
113
125
|
Cancel/reset:
|
|
114
126
|
- "cancel", "stop" → cancel_agent (with branch or session_name)
|
|
115
127
|
- "start fresh", "reset" → reset_agent
|
|
@@ -146,9 +158,8 @@ Sessioner:
|
|
|
146
158
|
- remove_session för att ta bort en session.
|
|
147
159
|
|
|
148
160
|
Agenter:
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
- För att BARA byta agent: switch_agent. Skicka ALDRIG "byt till X" som uppgift.
|
|
161
|
+
- Tillgängliga agenter: {agent_names}.
|
|
162
|
+
- Varje instans använder en kodagent.
|
|
152
163
|
|
|
153
164
|
Regler:
|
|
154
165
|
- Vidarebefordra användarens ord EXAKT. Skriv inte om.
|
|
@@ -157,6 +168,13 @@ Regler:
|
|
|
157
168
|
- När agenten är klar: nämn utfallet i en mening.
|
|
158
169
|
- Var naturlig, kort, vänlig medan agenter arbetar.
|
|
159
170
|
|
|
171
|
+
Användaren bestämmer:
|
|
172
|
+
- När användaren specifikt säger vilken session eller agent att skicka till, \
|
|
173
|
+
BARA vidarebefordra meddelandet. ALDRIG vägra eller förklara att sessionen är "fel" för uppgiften.
|
|
174
|
+
- Användaren har ALLTID rätt att skicka vad som helst till vilken session/agent som helst.
|
|
175
|
+
- Naturlig fortsättning: om användaren ställer en uppföljningsfråga relaterad till en nylig session, \
|
|
176
|
+
skicka den till samma session utan att fråga.
|
|
177
|
+
|
|
160
178
|
Avbryt/reset:
|
|
161
179
|
- "avbryt", "stopp" → cancel_agent (med branch eller session_name)
|
|
162
180
|
- "börja om", "reset" → reset_agent
|
|
@@ -154,25 +154,40 @@ class InstanceRegistry:
|
|
|
154
154
|
return instance
|
|
155
155
|
|
|
156
156
|
def get_session_by_name(self, name: str) -> AgentInstance | None:
|
|
157
|
-
"""Fuzzy-match against SESSION instances' display_name.
|
|
157
|
+
"""Fuzzy-match against SESSION instances' display_name and session key.
|
|
158
|
+
|
|
159
|
+
Matches against both the display_name and the original session key
|
|
160
|
+
(stored in branch as ``_session_{key}``), so lookups work even after
|
|
161
|
+
the display_name is updated to a human-friendly label.
|
|
162
|
+
"""
|
|
158
163
|
name_lower = name.lower().strip()
|
|
159
164
|
with self._lock:
|
|
160
165
|
sessions = [
|
|
161
166
|
inst for inst in self._instances.values()
|
|
162
167
|
if inst.instance_type == InstanceType.SESSION
|
|
163
168
|
]
|
|
164
|
-
|
|
169
|
+
|
|
170
|
+
def _session_key(inst: AgentInstance) -> str:
|
|
171
|
+
return inst.branch.removeprefix("_session_").lower()
|
|
172
|
+
|
|
173
|
+
# Exact match on display_name or session key
|
|
165
174
|
for inst in sessions:
|
|
166
|
-
if inst.display_name.lower() == name_lower:
|
|
175
|
+
if inst.display_name.lower() == name_lower or _session_key(inst) == name_lower:
|
|
167
176
|
return inst
|
|
168
|
-
# Substring match
|
|
169
|
-
partial = [
|
|
177
|
+
# Substring match on display_name or session key
|
|
178
|
+
partial = [
|
|
179
|
+
inst for inst in sessions
|
|
180
|
+
if name_lower in inst.display_name.lower() or name_lower in _session_key(inst)
|
|
181
|
+
]
|
|
170
182
|
if len(partial) == 1:
|
|
171
183
|
return partial[0]
|
|
172
184
|
if partial:
|
|
173
185
|
return min(partial, key=lambda i: len(i.display_name))
|
|
174
|
-
# Reverse substring (session name in query)
|
|
175
|
-
partial = [
|
|
186
|
+
# Reverse substring (session name or key in query)
|
|
187
|
+
partial = [
|
|
188
|
+
inst for inst in sessions
|
|
189
|
+
if inst.display_name.lower() in name_lower or _session_key(inst) in name_lower
|
|
190
|
+
]
|
|
176
191
|
if len(partial) == 1:
|
|
177
192
|
return partial[0]
|
|
178
193
|
if partial:
|
|
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.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/claude.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/code_providers/cursor.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/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
|
{voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/voice_providers/__init__.py
RENAMED
|
File without changes
|
{voice_vibecoder-2.5.0 → voice_vibecoder-2.5.2}/src/voice_vibecoder/voice_providers/openai.py
RENAMED
|
File without changes
|
|
File without changes
|