Skip to content

Commit b2041c0

Browse files
committed
Adding curl install
1 parent 9122338 commit b2041c0

File tree

13 files changed

+568
-39
lines changed

13 files changed

+568
-39
lines changed

PROGRESS.md

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,20 +241,34 @@ Optimization infrastructure is now operational:
241241

242242
---
243243

244-
## Phase 8: Packaging ⏸️ NOT STARTED
244+
## Phase 8: Packaging ✅ COMPLETED
245245

246-
- [ ] macOS .app bundle
247-
- [ ] launchd plist
248-
- [ ] Installation script
246+
### ✅ Completed
247+
248+
- [x] **macOS .app bundle packaging** (`scripts/package_macos_app.sh`)
249+
- [x] **launchd autostart integration** (`scripts/install_macos.sh` creates and loads `~/Library/LaunchAgents/com.onevox.daemon.plist`)
250+
- [x] **Installation script** (user and system install modes)
251+
- [x] **Uninstallation cleanup script** (`scripts/uninstall_macos.sh`)
252+
- [x] **Packaging assets** (`packaging/macos/Info.plist`)
253+
254+
### 🎉 Phase 8 Complete
255+
256+
Distribution tooling is now implemented for macOS:
257+
258+
- Build release binary and wrap it in `Onevox.app`
259+
- Install app to `~/Applications` (or `/Applications` with `--system`)
260+
- Register daemon for auto-start via launchd
261+
- Keep logs in `~/Library/Logs/onevox`
262+
- Clean uninstall path for app + launch agent
249263

250264
---
251265

252266
## Current Status
253267

254-
**Phase**: 7 of 8 ✅ COMPLETED
255-
**Overall Progress**: ~93% (Phases 1-7 complete, fully functional + benchmarked)
256-
**Next Phase**: Phase 8 - Packaging
257-
**Next Task**: macOS packaging and installer workflow
268+
**Phase**: 8 of 8 ✅ COMPLETED
269+
**Overall Progress**: ~100% (Phases 1-8 complete)
270+
**Next Phase**: Post-release hardening and cross-platform distribution
271+
**Next Task**: Linux packaging + Homebrew formula + release automation
258272
**Working Features**: Full end-to-end speech-to-text pipeline operational!
259273

260274
### ✅ What's Working NOW

README.md

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ to add command `onevox` (mac):
100100
sudo ln -sf /Users/kevinsepulveda/Documents/onevox/target/release/onevox /usr/local/bin/onevox
101101
onevox --help
102102
```
103-
104103
### For TypeScript/Node Developers
105104

106105
If you're coming from TypeScript/pnpm, see **[CHEATSHEET.md](CHEATSHEET.md)** for command equivalents!
@@ -127,6 +126,35 @@ brew install onevox
127126
curl -L https://github.com/yourusername/onevox/releases/latest/download/onevox-macos.tar.gz | tar xz
128127
```
129128

129+
### macOS Installer (Phase 8)
130+
131+
```bash
132+
# One-line installer (curl|sh)
133+
curl -fsSL https://raw.githubusercontent.com/kssgarcia/onevox/main/install.sh | sh
134+
135+
# User-level install to ~/Applications + launchd autostart
136+
./scripts/install_macos.sh
137+
138+
# System install to /Applications + launchd autostart
139+
./scripts/install_macos.sh --system
140+
141+
# Build only: create dist/Onevox.app
142+
./scripts/package_macos_app.sh
143+
144+
# Uninstall app + launchd agent
145+
./scripts/uninstall_macos.sh
146+
```
147+
148+
`curl|sh` options:
149+
```bash
150+
# System install
151+
curl -fsSL https://raw.githubusercontent.com/kssgarcia/onevox/main/install.sh | sh -s -- --system
152+
153+
# Pin a release tag
154+
curl -fsSL https://raw.githubusercontent.com/kssgarcia/onevox/main/install.sh | \
155+
ONEVOX_VERSION=v0.1.0 sh
156+
```
157+
130158
### Usage
131159

132160
```bash
@@ -362,7 +390,7 @@ See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed design.
362390

363391
## 📋 Project Status
364392

365-
### Current Phase: **Phase 6/8 Complete - Fully Functional!** 🎉
393+
### Current Phase: **Phase 8/8 Complete - Ready for Distribution** 🎉
366394

367395
**What's Working:**
368396
-**Phase 1**: Core infrastructure (daemon, IPC, config)
@@ -371,8 +399,8 @@ See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed design.
371399
-**Phase 4**: Model runtime (Whisper.cpp CLI, real transcription)
372400
-**Phase 5**: Platform integration (global hotkeys, text injection - macOS)
373401
-**Phase 6**: Terminal UI (production-ready TUI with themes)
374-
- 🚧 **Phase 7**: Performance optimization (next up)
375-
- 🚧 **Phase 8**: Packaging & distribution (planned)
402+
- **Phase 7**: Performance optimization (benchmarks + benchmark CI)
403+
- **Phase 8**: Packaging & distribution (macOS app + launchd + installer)
376404

377405
**You can use Onevox for real dictation on macOS right now!**
378406

TUI_SETUP_COMPLETE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ cargo build --release
162162
│ ├─ panels/help.ts (shortcuts) │
163163
│ ├─ data/config.ts (TOML I/O) │
164164
│ ├─ data/history.ts (JSON I/O) │
165-
│ └─ data/cli.ts (vox wrapper) │
165+
│ └─ data/cli.ts (onevox wrapper) │
166166
└─────────────────┬───────────────────────┘
167167
168168
@@ -171,7 +171,7 @@ cargo build --release
171171
│ │
172172
│ ├─ config.toml (shared file) │
173173
│ ├─ history.json (shared file) │
174-
│ └─ vox binary (subprocess calls) │
174+
│ └─ onevox binary (subprocess calls) │
175175
└─────────────────────────────────────────┘
176176
```
177177

TUI_THEME_SYSTEM.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ q / Ctrl+C Quit
188188
189189
Your theme preference is automatically saved to:
190190
191-
**Config File:** `~/.config/vox/config.toml` (macOS/Linux)
191+
**Config File:** `~/.config/onevox/config.toml` (macOS/Linux)
192192
193193
```toml
194194
[ui]

docs/TUI.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ONEVOX TUI — Architecture & Implementation
22

3-
> Terminal user interface for the Vox speech-to-text engine, built with
3+
> Terminal user interface for the onevox speech-to-text engine, built with
44
> [OpenTUI](https://github.com/nicholasgasior/opentui) and
55
> [Bun](https://bun.sh).
66
@@ -25,10 +25,10 @@
2525

2626
## Overview
2727

28-
The TUI provides a rich terminal interface for configuring and operating the Vox
28+
The TUI provides a rich terminal interface for configuring and operating the onevox
2929
speech-to-text daemon. It is a **standalone TypeScript application** that runs
3030
under Bun and communicates with the Rust backend either by reading/writing config
31-
files directly or by shelling out to the compiled `vox` binary for runtime
31+
files directly or by shelling out to the compiled `onevox` binary for runtime
3232
operations (device listing, model management, daemon status).
3333

3434
The interface follows a **flat, light-themed, minimalist design** with no
@@ -45,7 +45,7 @@ background tints, bold section headers, and color contrast.
4545
| UI Framework | `@opentui/core` — flex-based TUI |
4646
| Config Format | TOML (hand-rolled parser, no ext dep) |
4747
| History Store | JSON (flat file) |
48-
| Backend CLI | `vox` Rust binary via `Bun.spawn()` |
48+
| Backend CLI | `onevox` Rust binary via `Bun.spawn()` |
4949
| Build | `bun build --target bun` |
5050

5151
---
@@ -66,7 +66,7 @@ tui/
6666
│ │ ├── stepper.ts # ◀ value ▶ numeric selector
6767
│ │ └── toggle.ts # On/Off slide toggle
6868
│ ├── data/ # Data access & CLI wrapper
69-
│ │ ├── cli.ts # Shells to `vox` binary, device listing
69+
│ │ ├── cli.ts # Shells to `onevox` binary, device listing
7070
│ │ ├── config.ts # TOML config read/write
7171
│ │ └── history.ts # JSON history read/write
7272
│ └── panels/ # Full-screen content panels
@@ -214,7 +214,7 @@ Modal confirmation with semi-transparent backdrop:
214214

215215
### Config (`data/config.ts`)
216216

217-
- **Path resolution**: `%APPDATA%\vox\config.toml` (Win), `~/Library/Application Support/vox/config.toml` (macOS), `~/.config/vox/config.toml` (Linux)
217+
- **Path resolution**: `%APPDATA%\onevox\config.toml` (Win), `~/Library/Application Support/onevox/config.toml` (macOS), `~/.config/onevox/config.toml` (Linux)
218218
- **Format**: TOML, parsed with a hand-rolled regex parser (no external dependency)
219219
- **Load**: Deep-merges file values over `DEFAULT_CONFIG` — missing keys get defaults
220220
- **Save**: Serializes each section as `[section]` with `key = value` lines
@@ -234,25 +234,25 @@ Modal confirmation with semi-transparent backdrop:
234234

235235
### CLI Wrapper (`data/cli.ts`)
236236

237-
Shells out to the compiled `vox` binary for operations that require the Rust
237+
Shells out to the compiled `onevox` binary for operations that require the Rust
238238
runtime (audio device enumeration, model download, daemon status).
239239

240240
**Binary resolution** (`voxBin()`):
241241

242242
1. Check `$VOX_BIN` environment variable
243-
2. Walk upward from `import.meta.dir` looking for `Cargo.toml` → use `target/release/vox` or `target/debug/vox`
243+
2. Walk upward from `import.meta.dir` looking for `Cargo.toml` → use `target/release/onevox` or `target/debug/onevox`
244244
3. Walk upward from `process.cwd()` as fallback
245-
4. Fall back to `"vox"` on `$PATH`
245+
4. Fall back to `"onevox"` on `$PATH`
246246

247247
**Device listing** (`listDevicesWithError()`):
248248

249-
1. Run `vox devices list`, parse output lines matching `N. DeviceName (default) - 48000Hz, 2 ch`
249+
1. Run `onevox devices list`, parse output lines matching `N. DeviceName (default) - 48000Hz, 2 ch`
250250
2. On Windows, if no devices found, fall back to PowerShell `Get-CimInstance Win32_SoundDevice`
251251
3. Return `{ devices, error }` so the UI can display errors
252252

253253
### History (`data/history.ts`)
254254

255-
- **Path**: `%APPDATA%\vox\history.json` (Win), `~/Library/Application Support/vox/history.json` (macOS), `~/.local/share/vox/history.json` (Linux)
255+
- **Path**: `%APPDATA%\onevox\history.json` (Win), `~/Library/Application Support/onevox/history.json` (macOS), `~/.local/share/onevox/history.json` (Linux)
256256
- **Format**: JSON array of `HistoryEntry` objects
257257
- Utility functions: `newestFirst()`, `formatTimestamp()`, `formatDuration()`, `truncateText()`
258258

@@ -401,18 +401,18 @@ when the daemon reloads its config.
401401
### 2. CLI Subprocess (`data/cli.ts`)
402402

403403
For runtime operations that require CPAL or other native libraries, the TUI
404-
shells out to the compiled `vox` binary:
404+
shells out to the compiled `onevox` binary:
405405

406406
| Operation | Command | Notes |
407407
| --------------- | ----------------------- | ---------------------------------- |
408-
| List devices | `vox devices list` | Parses stdout, Windows PS fallback |
409-
| List models | `vox models downloaded` | Checks which models are on disk |
410-
| Download model | `vox models download X` | Triggers download |
411-
| Remove model | `vox models remove X` | Deletes model files |
412-
| Daemon status | `vox status` | Connection check |
408+
| List devices | `onevox devices list` | Parses stdout, Windows PS fallback |
409+
| List models | `onevox models downloaded` | Checks which models are on disk |
410+
| Download model | `onevox models download X` | Triggers download |
411+
| Remove model | `onevox models remove X` | Deletes model files |
412+
| Daemon status | `onevox status` | Connection check |
413413

414414
The binary is located by walking up from the TUI's source directory until
415-
`Cargo.toml` is found, then checking `target/release/vox` and `target/debug/vox`.
415+
`Cargo.toml` is found, then checking `target/release/onevox` and `target/debug/onevox`.
416416

417417
### IPC Protocol (future)
418418

@@ -443,7 +443,7 @@ instead of spawning subprocesses.
443443
- [x] Config persistence — TOML read/write, deep-merge with defaults
444444
- [x] History persistence — JSON read/write
445445
- [x] Help overlay — `?` toggles full keyboard shortcut reference
446-
- [x] Device listing — `vox devices list` with Windows PowerShell fallback
446+
- [x] Device listing — `onevox devices list` with Windows PowerShell fallback
447447
- [x] Binary auto-discovery — walks up to `Cargo.toml` for `target/` binaries
448448
- [x] Error surfacing — device/binary errors shown in UI, not silently swallowed
449449

@@ -488,7 +488,7 @@ bun build src/index.ts --outdir dist --target bun
488488

489489
| Variable | Purpose |
490490
| --------- | ------------------------------------------ |
491-
| `VOX_BIN` | Override path to the `vox` binary |
491+
| `VOX_BIN` | Override path to the `onevox` binary |
492492

493493
---
494494

docs/TUI_INTEGRATION.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ The TUI interacts with the Rust binary for:
108108
│ ├─ panels/help.ts (shortcuts) │
109109
│ ├─ data/config.ts (TOML I/O) │
110110
│ ├─ data/history.ts (JSON I/O) │
111-
│ └─ data/cli.ts (vox binary) │
111+
│ └─ data/cli.ts (onevox binary) │
112112
└─────────────────┬───────────────────────┘
113113
114114
@@ -117,7 +117,7 @@ The TUI interacts with the Rust binary for:
117117
│ │
118118
│ ├─ config.toml (shared file) │
119119
│ ├─ history.json (shared file) │
120-
│ └─ vox binary (CLI commands) │
120+
│ └─ onevox binary (CLI commands) │
121121
└─────────────────────────────────────────┘
122122
```
123123

0 commit comments

Comments
 (0)