Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
6712e58
added agents
katipally Jul 15, 2026
87540e3
fixed cursoe and codex
katipally Jul 15, 2026
36e10d3
fixed ui ux
katipally Jul 15, 2026
4f7ace1
aniamtion + acp migration
katipally Jul 15, 2026
fdc71f0
updated ui ux and also agent connection sdk
katipally Jul 16, 2026
a0af55e
fixed history and bugs
katipally Jul 16, 2026
1f15626
fixed ui ux and history bug
katipally Jul 16, 2026
e96f0e5
P0: shared agent registry, vitest, Windows parity, logger/toasts, docs
katipally Jul 16, 2026
454d991
P1: agent management — sign-in detection, sign out, visibility, real …
katipally Jul 16, 2026
3ad0f8f
P2: history sidebar — workspace-first grouping, search, New Chat on top
katipally Jul 16, 2026
1d8f138
P3: Supertonic TTS engine, warmup-on-launch, barge-in hardening, turn…
katipally Jul 16, 2026
adb78ef
P4: de-boxing, General settings tab, hints engine, onboarding
katipally Jul 16, 2026
0d7aef8
Fix hermes probe + user-reported UX: PTT opt-in, elevated panels, fol…
katipally Jul 16, 2026
95ae9b2
Spoken errors, spotlight walkthrough, settings button in the hero
katipally Jul 16, 2026
d127d60
Per-surface spotlight tours, honest hermes lifecycle, sidebar/lobby p…
katipally Jul 16, 2026
8226a33
Fix cross-process store race: locked updateJson for every read-modify…
katipally Jul 16, 2026
d677053
Wire agent plans + usage meter to the UI; drop dead slash-command path
katipally Jul 16, 2026
77dbbfc
History + confinement correctness: bounded head reads, real hermes sc…
katipally Jul 16, 2026
def96f9
Permission asks: visible auto-deny countdown + spoken 30s reminder
katipally Jul 16, 2026
f6449b9
Agent lifecycle hardening: versions, one-tap update, EACCES guidance,…
katipally Jul 16, 2026
8f8389e
Honesty & hygiene: same-origin VAD assets, 0.2.0, dead config removed
katipally Jul 16, 2026
61beeac
P2 polish: stepped warm-paper light mode, markdown transcript, shortc…
katipally Jul 16, 2026
a204fbf
Docs rewrite: one identity, honest claims, stale strings fixed
katipally Jul 16, 2026
3c39aef
Persona: user-editable custom instructions, applied to every brain
katipally Jul 16, 2026
c200485
Notifications + menu-bar tray: the mini-mode workflow finally closes …
katipally Jul 16, 2026
58674af
Spoken progress narration for coding-agent turns (opt-in)
katipally Jul 16, 2026
dedbeda
Voice Studio: clone your voice, fully local (ZipVoice via sherpa-onnx)
katipally Jul 16, 2026
7ba55f5
Voices: cloning becomes a first-class Settings tab with a real studio…
katipally Jul 16, 2026
6f6eb51
bug fixes
katipally Jul 16, 2026
bc6b308
updated Docs
katipally Jul 16, 2026
ef376eb
workspace bug fixed
katipally Jul 16, 2026
21c1e28
Desktop: clear stale server processes holding the app ports at launch
katipally Jul 17, 2026
ba6d2e3
Agent: declare undici as a real dependency
katipally Jul 17, 2026
080b150
Make the confine() test root platform-portable
katipally Jul 17, 2026
5f70d1a
CI: build-only Windows smoke build must never try to publish
katipally Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

on:
push:
branches: [main]
branches: [main, v2-pipeline-agents]
pull_request:

jobs:
Expand All @@ -23,3 +23,39 @@ jobs:

- name: Typecheck
run: pnpm typecheck

- name: Test
run: pnpm test

# Windows parity is code-level (no hardware QA): prove the repo installs,
# typechecks, tests, and produces an unsigned Windows build on windows-latest.
windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7

- uses: pnpm/action-setup@v6

- uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm

- run: pnpm install --frozen-lockfile

- name: Typecheck
run: pnpm typecheck

- name: Test
run: pnpm test

- name: Pack web + agent
run: |
pnpm --filter @openlive/desktop pack:web
pnpm --filter @openlive/desktop pack:agent

# --publish never: this is a build-only smoke test. Without it,
# electron-builder's publish auto-detection demands a GH_TOKEN in
# pull_request runs and fails the job after a successful build.
- name: Build Windows installer (unsigned)
run: pnpm --filter @openlive/desktop exec electron-builder --win --publish never
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ apps/desktop/dist/

# demo videos are hosted as GitHub assets, not committed (100MB limit + no inline playback)
*.mp4

# vendored voice runtime assets (copied from node_modules by copy-voice-assets.mjs)
apps/web/public/vad/
105 changes: 105 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,111 @@ All notable changes to OpenLive are recorded here. The newest version is on top.
Releases before 0.1.9 predate this file — see the
[GitHub releases](https://github.com/katipally/openlive/releases) for those.

## [0.2.0] - 2026-07-16

### Fixed
- **"The web service keeps crashing" on launch (#6).** A crashed or force-killed
run could leave the app's server processes alive (Windows especially), still
holding OpenLive's ports — every later launch then died in an EADDRINUSE
respawn loop that relaunching never fixed. The app now clears its own stale
server processes from those ports at startup (other apps' processes are left
alone), and the crash dialog says what to check if it ever still happens.
- **The workspace you picked is now the workspace the agent gets.** A bind race
on new conversations could silently strand the session with no agent and no
folder while the top bar showed both (the server's boot-time bind restore could
supersede and reverse the client's bind). The server now yields to the client's
bind, always receives the folder explicitly (empty means clear, not "keep
stale"), and echoes back what it actually bound so the UI can't drift — with a
one-shot self-heal re-bind if they ever disagree.
- **No more silent brain swap.** If a coding agent is selected but can't run
(no folder, failed start), OpenLive says exactly that instead of quietly
answering with the built-in assistant as if it were the agent.
- **Speaking to answer a permission no longer cancels it.** Starting to talk
while an agent asked for permission counted as barge-in: the ask vanished
mid-answer and your words became a new turn. Speech during a pending ask is
now the answer ("yes"/"no", matched against the agent's real option ids).
- **Model/mode pickers stop blinking out.** Resumed sessions kept their model
and mode lists (updates during session replay were dropped), the server
re-sends them on a same-bind reconnect, and the in-call top bar falls back to
the per-agent cache like the lobby always did.
- **Pre-call verification.** The lobby now checks the project folder actually
exists on disk, the built-in brain's provider has an API key, and a microphone
is present — gaps surface as chips (with a jump to the right Settings tab)
before Start instead of failing mid-call. A missing folder also gets a clear
error instead of a baffling "spawn npx ENOENT".
- **Cross-process data race.** Settings and conversations are written by both the
web and agent processes; every read-modify-write now runs under a file lock, so
a concurrent save can no longer silently drop the other side's update.
- **Agent plans and usage now actually show.** The server has always emitted the
agent's working plan (ACP plan updates) and context/cost usage — the UI dropped
both. Plans render as a live checklist above the transcript; a context/cost chip
sits in the top bar.
- **Permission asks no longer time out silently.** An unanswered agent permission
auto-denies after 2 minutes — the prompt now shows a visible countdown and the
voice speaks a reminder 30 seconds before the deadline.
- **Hermes session history.** Discovery was querying columns that don't exist in
hermes' database; rewritten against the real hermes-agent 0.18.2 schema.
- **History with huge session logs.** Reading titles from Codex rollout logs
(hundreds of MB) no longer loads whole files into memory.
- **Workspace file confinement.** The built-in assistant's file tools now refuse
symlinks that point outside the workspace, not just `../` escapes.
- Crash screen follows the OS theme and uses the brand accent.

### Added
- **Clone Voice — clone your own voice.** A dedicated Settings tab: pick a script (or
just talk), record 5–30 seconds with a live level meter, listen back before
saving, fix the auto-transcript, and your assistant speaks as you — zero-shot
cloning (ZipVoice, Apache-2.0, via sherpa-onnx) running locally in the agent
service at ~4x realtime on CPU. Optional ~208 MB download, removable anytime.
Profiles preview with any text you type, rename, export/import between
machines, play back their original recording, and delete; automatic Kokoro
fallback; consent required — clone only your own voice or one you have
permission for. The Pipeline TTS stage just picks among your cloned voices.
- **Persona.** Settings → General gains "Your assistant's style": your own words
on how it should behave and speak, applied to the built-in assistant AND every
coding agent via its session preamble.
- **Spoken progress narration (opt-in).** While a coding agent works in silence,
OpenLive voices its plan steps ("Step 2 of 4 — …"), throttled and barge-in aware.
- **Notifications + menu bar.** A tray icon (Open / Mini mode / Quit) and OS
notifications when a turn finishes or an agent asks permission while you're in
another app — clicking brings OpenLive forward.
- **Markdown transcript.** Agent replies render as real markdown — code blocks
with copy buttons, lists, tables — plus per-message copy and a one-tap export
of the whole conversation to a Markdown file.
- **In-call keyboard shortcuts.** M mute, C camera, S screen share, T activity
panel, H history, Cmd/Ctrl-E end call — press `?` for the cheat sheet.
- **Lobby readiness check.** Picking an agent that isn't installed or signed in
shows a one-tap jump to Settings → Agents instead of failing the call.
- **A real player for voice previews.** Everything Clone Voice plays back — the
recorded take, a synthesized preview, the original recording — now goes through
a compact seekable player (play/pause, drag to seek, elapsed/total time) instead
of fire-and-forget playback. Only one plays at a time.
- **Agent sign-in that can't strand you.** Sign-in and setup flows open in your
terminal; the row now polls while you finish there and flips to Ready by itself.
If the terminal can't open (macOS Automation permission), the panel explains the
fix and a Copy command button gives you the manual path. Hermes gets an honest
"Setup incomplete" state (its wizard was started but no provider picked), a
"Finish setup" button, and an Uninstall that removes `~/.hermes` after a warning.

### Changed
- **Light mode rebuilt.** A stepped warm-paper ladder (no pure white): cards,
panels, and popovers now separate cleanly instead of fusing into one white
field, and borders are actually visible.
- **README and docs rewritten** around what OpenLive is: the open voice and
vision layer for AI agents — bring your own model, with coding agents over ACP
as the flagship integration. Includes an honest note that the pipeline is
cascaded, not full-duplex speech-to-speech.
- **VAD assets are served from the app itself** (vendored at build time) instead
of a CDN — the voice loop no longer touches jsdelivr at runtime.
- **Agents settings shows each CLI's version** and gains an **Update** button;
a failed npm install from a root-owned prefix now gets actionable guidance
instead of a raw error dump.
- Slash-command metadata (never surfaced in the UI) removed from the wire protocol.
- **Settings reorganized.** The Voices tab is now **Clone Voice**. Speaking speed
and "Narrate agent progress" moved from Pipeline → Text-to-speech to General
under a new **Voice & speech** group, next to voice input — everyday preferences
in General, engine choices in Pipeline. Same settings underneath; nothing resets.

## [0.1.9] - 2026-07-11

### Added
Expand Down
18 changes: 12 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,22 @@ pnpm desktop:build:win # build the Windows installer (run on Windows)
## Where things live

```
apps/desktop Electron shell: local servers, permissions, window, auto-update
apps/web Next.js UI + the on-device voice engine in src/lib/live
services/agent the /live WebSocket and the model tools
apps/desktop Electron shell: local servers, permissions, window, mini mode,
tray + notifications, auto-update
apps/web Next.js UI + the on-device voice engine in src/lib/live + /api
routes (agent install/auth, history discovery, settings)
services/agent the /live WebSocket, the ACP coding-agent driver (agents/*),
local voice cloning (voice/*), and the built-in model tools
packages/harness model adapters (Anthropic / OpenAI Responses / OpenAI Chat), model listing
packages/shared the wire protocol and shared types
packages/shared the agent registry (single source of agent identity), wire
protocol, shared types
packages/db JSON-file store for keys, settings, conversations
```

The voice loop (VAD, STT, end-of-turn, TTS, barge-in) is in
`apps/web/src/lib/live`. The model turn goes out from `services/agent`.
The voice loop (VAD, STT, end-of-turn, TTS — Kokoro, Supertonic, or a cloned
voice — and barge-in) is in `apps/web/src/lib/live`. The model turn goes out from
`services/agent`, which either streams a provider reply or drives a coding agent
(Claude Code, Codex, Cursor, OpenCode, Hermes) over ACP as a child process.

## Sending a change

Expand Down
Loading