Skip to content

Commit 1a579b8

Browse files
committed
docs: add v0.41.0/0.41.1 changelog, transcription config to cheatsheet, update AGENTS.md version
- CHANGELOG: v0.41.0 (transcribe tool) + v0.41.1 (bug fixes & tests) - CHEATSHEET: transcription config section with model/language/auto_transcribe - AGENTS.md: version bump to v0.41.1, add transcribe to tools table
1 parent 3c42384 commit 1a579b8

3 files changed

Lines changed: 91 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ It provides context about the project's architecture, conventions, and how to up
1212
- **Binary:** `odek` — single static binary, ~12 MB, instant startup.
1313
- **Config:** Five-layer priority: `~/.odek/secrets.env``~/.odek/config.json``./odek.json``ODEK_*` env vars → CLI flags.
1414
- **Benchmark:** AIEB v2.0 — 80.3% (highest published agent score on the Autonomous Intelligence Engineering Benchmark).
15-
- **Version:** v0.37.x — see latest tag at https://github.com/BackendStack21/odek/releases
15+
- **Version:** v0.41.1 — see latest tag at https://github.com/BackendStack21/odek/releases
1616

1717
## Source Layout
1818

@@ -87,6 +87,7 @@ ReAct cycle: observe → think → act → repeat.
8787
| Zero-fork data | `math_eval` — native arithmetic, `diff` — LCS diff, `json_query` — dot-path JSON, `tr` — text transform, `base64` — encode/decode |
8888
| File analysis | `glob` — fast glob find, `file_info` — stat metadata, `count_lines` — streaming line count, `word_count` — streaming word count, `checksum` — SHA256/SHA1/MD5, `sort` — sort lines, `head_tail` — first/last N lines |
8989
| Multi-pattern | `multi_grep` — N regex patterns parallel, `tree` — structured directory tree |
90+
| Audio | `transcribe` — local whisper.cpp audio transcription (OGG/WAV/MP3 → text) |
9091

9192
All gated by the `danger` security classifier with three actions: allow, deny, prompt.
9293
- `shell`: Classifies commands into risk classes (safe, local_write, system_write, destructive, network_egress, code_execution, install, blocked).

docs/CHANGELOG.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,75 @@
11
# Changelog
22

3+
## v0.41.1 (2026-05-24) — Quality Hardening
4+
5+
### Bug Fixes
6+
- **sort numeric** — empty lines no longer cause panic (`strings.Fields("")` index out of range). Guarded with `len(fa) > 0` check
7+
- **head_tail total**`readHead` second scanner loop after EOF never executed, so total always equalled count for files larger than N. Removed dead loop
8+
- **telegram.go**`builtinTools()` in Telegram handler was passing empty `TranscriptionConfig`, ignoring user's configured binary_path and models_dir. Now passes `resolved.Transcription`
9+
- **fileInfoTool** — named return `result string` shadowed by local `result fileInfoResult` (would fail compilation on any change)
10+
- **mathEvalTool** — named return `result string` shadowed by `result, err := evalMath()` which returns `float64`
11+
- **parallel_shell** — data race on `shCmd.Process.Kill()` vs `shCmd.Run()` from concurrent goroutines. Fixed with mutex-guarded Process access
12+
13+
### Recoverability
14+
- Added `defer recover` to top-level Call methods of 11 tools: batch_patch, parallel_shell, http_batch, math_eval, diff, sort, base64, tr, json_query, tree, batch_read, glob, file_info
15+
- Every tool Call method now guards against panics with named returns and JSON error response
16+
17+
### New Tests
18+
- Metadata (Name/Description/Schema) tests for all 15 perf tools
19+
- `TestSort_Numeric` — numeric sort correctness
20+
- `TestSort_NumericWithEmptyLine` — regression: empty line + numeric sort (was panic)
21+
- `TestHeadTail_HeadTotalAccuracy` — regression: total=100 not 3 for head(3) of 100 lines
22+
- `TestMultiGrep_GlobFilter` — glob filtering works across file types
23+
- `TestWordCount_BinaryFile` — binary files don't cause errors
24+
25+
### Stats
26+
- 364 insertions, 26 deletions across 4 files
27+
- All tests pass with `-race`
28+
29+
---
30+
31+
## v0.41.0 (2026-05-24) — Native Audio Transcription
32+
33+
### New Tool: `transcribe`
34+
- Transcribes audio files (OGG, WAV, MP3) to text using a local whisper.cpp CLI
35+
- Fully local — zero cloud APIs, no API keys, no credentials
36+
- Returns: `{text, duration_sec, segments, model, language}`
37+
- Streams via `exec.Command("whisper", "--model", ..., "--output-json", "--file", ...)` and parses JSON output
38+
39+
### Dependency Management
40+
- If whisper CLI is missing → clear error with install instructions (brew / apt / git clone)
41+
- If model file is missing → clear error with download instructions (curl from HuggingFace)
42+
- No silent installs, no auto-downloads — tool errors until user installs dependencies
43+
44+
### Configuration (`~/.odek/config.json`)
45+
```json
46+
{
47+
"transcription": {
48+
"model": "tiny",
49+
"language": "en",
50+
"auto_transcribe": true,
51+
"models_dir": "~/.odek/whisper/models",
52+
"binary_path": "/usr/local/bin/whisper"
53+
}
54+
}
55+
```
56+
57+
### Telegram Integration
58+
- Voice messages downloaded to `~/.odek/media/`
59+
- When `auto_transcribe: true` and whisper is available → transcribed text injected directly as user message
60+
- When `auto_transcribe: false` or transcription fails → file path passed to agent with `transcribe()` tool suggestion
61+
62+
### Security
63+
- Path gated through `danger.ClassifyPath` + `O_NOFOLLOW`
64+
- Symlink paths rejected (tested)
65+
- Panic recovery in Call method
66+
67+
### Stats
68+
- 590 lines across 12 files, 7 new tests, 0 new Go dependencies
69+
- External: whisper.cpp CLI (user installs, tool validates)
70+
71+
---
72+
373
## v0.40.1 (2026-05-24) — Security Hardening
474

575
### Panic Recovery

docs/CHEATSHEET.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,25 @@ odek repl --sandbox --sandbox-image python:3.12
5959

6060
Priority: `~/.odek/config.json``./odek.json``ODEK_*` env ← CLI flags.
6161

62+
### Audio Transcription
63+
- **`transcribe`** tool uses local whisper.cpp CLI — no cloud APIs
64+
- Model files cached in `~/.odek/whisper/models/ggml-<model>.bin` (default: `tiny`, ~75 MB)
65+
- Configure via `transcription` section in config:
66+
67+
```json
68+
{
69+
"transcription": {
70+
"model": "tiny",
71+
"language": "en",
72+
"auto_transcribe": true,
73+
"models_dir": "~/.odek/whisper/models",
74+
"binary_path": "/usr/local/bin/whisper"
75+
}
76+
}
77+
```
78+
79+
Settings: `model` (tiny/base/small/medium), `language` (ISO code, empty=auto), `auto_transcribe` (Telegram voice → text), `models_dir` (model directory), `binary_path` (whisper binary path).
80+
6281
## Memory System Architecture
6382

6483
### Three Tiers

0 commit comments

Comments
 (0)