You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: sessions, models, cancel, sandbox UX + full API coverage, CI/release
Surface the rest of odek serve's API in the TUI and harden the project.
TUI / endpoints (all odek serve APIs now used):
- /api/sessions + /api/sessions/{id}: session browser (^R) to resume,
replay transcript, and delete past conversations
- /api/models: model switcher (^O)
- /api/cancel: Esc aborts the running turn
- per-session auth tokens persisted in ~/.bodek/sessions.json so resume/
cancel/delete work across runs (internal/tokens)
- sandbox status shown in the header (🛡 sandboxed / ⚠ host access)
- context-aware progress messages derived from the running tool/command
(🧪 running tests, 📖 reading X, 🚀 pushing) with live elapsed timer
Tests & quality:
- comprehensive unit + integration tests against an in-process odek serve
stand-in; internal-package coverage ~99% (client 100, tui 99, tokens 98,
server 95 — remainder is unreachable OS-error handling)
- golangci-lint v2 config (clean), Makefile test/cover/lint targets
- GitHub Actions: CI (build, vet, race tests + coverage, lint) and a
GoReleaser release workflow on version tags
- README updated with new features, key bindings, badges, and dev docs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rWqu7pktbd2ejfNw3a7Vf
**A beautiful [Bubble Tea](https://github.com/charmbracelet/bubbletea) terminal interface for the [odek](https://github.com/BackendStack21/odek) agent.**
4
9
5
10
```
@@ -78,9 +83,12 @@ by `odek serve` from its usual chain — `~/.odek/config.json` → `./odek.json`
78
83
|-----|--------|
79
84
|`⏎`| Send the prompt |
80
85
|`@`| Open file/session reference completion (see below) |
81
-
|`^J`| Insert a newline in the input |
86
+
|`^R`| Browse & resume saved sessions |
87
+
|`^O`| Switch the model |
82
88
|`^T`| Toggle extended thinking for the next turn |
89
+
|`^J`| Insert a newline in the input |
83
90
|`^L`| Clear the conversation |
91
+
|`Esc`| Cancel the running turn |
84
92
|`PgUp` / `PgDn` / wheel | Scroll the transcript |
85
93
|`^C`| Quit |
86
94
@@ -123,6 +131,14 @@ When the agent requests approval for a dangerous operation, answer inline:
123
131
-**Live reasoning** — the model's pre-tool thinking streams in dimmed text,
124
132
with a running elapsed timer and cycling status while it works.
125
133
-**`@` autocomplete** — a live, navigable popup of files and sessions.
134
+
-**Context-aware progress** — while the agent works, the status badge shows
135
+
what it's actually doing (`🧪 running tests`, `📖 reading client.go`,
136
+
`🚀 pushing`) with a live elapsed timer.
137
+
-**Session browser** (`^R`) — resume, replay, or delete past conversations.
138
+
-**Model switcher** (`^O`) — change the model for the next turn.
139
+
-**Cancellation** (`Esc`) — abort a running turn via odek's cancel API.
140
+
-**Sandbox aware** — the header shows `🛡 sandboxed` or `⚠ host access`; pass
141
+
`--sandbox` to run tool calls inside odek's Docker isolation.
126
142
-**Telemetry** — session token totals and last-turn latency in the chrome.
127
143
-**Fluent by default** — gradient wordmark and hairline, smooth braille
128
144
spinner, smart autoscroll that never yanks you while you read history, and a
@@ -137,18 +153,35 @@ When the agent requests approval for a dangerous operation, answer inline:
137
153
```bash
138
154
make build # → bin/bodek
139
155
make run # build and launch
156
+
make test# go test -race ./...
157
+
make cover # coverage report for internal packages
158
+
make lint # golangci-lint (if installed)
140
159
make vet
141
160
make tidy
142
161
```
143
162
163
+
Continuous integration runs build, `go vet`, `golangci-lint`, and the race-
164
+
enabled test suite on every push (see [`.github/workflows`](.github/workflows)).
165
+
Tagged releases (`vX.Y.Z`) are built and published automatically by
0 commit comments