|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v0.40.1 (2026-05-24) — Security Hardening |
| 4 | + |
| 5 | +### Panic Recovery |
| 6 | +- Added `safeCall()` helper and `defer recover()` to all parallel goroutines and |
| 7 | + file-processing helpers (`countFile`, `searchPattern`, `hashFile`, `readPreview`, |
| 8 | + `countWords`) — a panic in any goroutine is caught and returned as an error entry |
| 9 | + instead of crashing the process or hanging the semaphore drain |
| 10 | + |
| 11 | +### O_NOFOLLOW Hardening |
| 12 | +- Fixed `diff`, `tr`, `base64` tools — replaced 5 `os.ReadFile` calls with |
| 13 | + `readFileNoFollow()` which opens with `O_NOFOLLOW` (previously followed symlinks) |
| 14 | + |
| 15 | +### Tests |
| 16 | +- 60 new test cases covering symlink rejection, empty files, binary files, |
| 17 | + max limit enforcement, missing required fields, invalid JSON (all 15 tools), |
| 18 | + division by zero, chain transforms, and danger config deny enforcement |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## v0.40.0 (2026-05-24) — 5 More Native Perf Tools |
| 23 | + |
| 24 | +### New Tools |
| 25 | + |
| 26 | +| Tool | What it does | Fork replaced | |
| 27 | +|------|-------------|---------------| |
| 28 | +| `sort` | Sort lines asc/desc, unique, numeric, case-insensitive, multi-file merge | `sort`, `sort -u`, `sort -n` | |
| 29 | +| `head_tail` | First/last N lines, streaming (stops at N), parallel multi-file | `head -n`, `tail -n` | |
| 30 | +| `base64` | Encode files/strings, decode strings | `base64` | |
| 31 | +| `tr` | Case conversion, char replacement, string substitution, delete. Chainable | `tr`, `sed` (simple) | |
| 32 | +| `word_count` | Words+lines+chars+bytes streaming, parallel multi-file, aggregate totals | `wc` | |
| 33 | + |
| 34 | +### Stats |
| 35 | +- 1,009 lines added, 17 new tests, 0 new dependencies (stdlib: `encoding/base64`, `sort`) |
| 36 | + |
| 37 | +--- |
| 38 | + |
| 39 | +## v0.39.0 (2026-05-24) — 10 New Parallelism/Performance Tools |
| 40 | + |
| 41 | +### New Tools |
| 42 | + |
| 43 | +| # | Tool | Parallel | Fork saved | |
| 44 | +|---|------|----------|------------| |
| 45 | +| 1 | `batch_patch` | N edits / 1 call, early-stop | N `sed`/`patch` → 1 | |
| 46 | +| 2 | `parallel_shell` | N commands / pool(4), timeout | N serial → parallel | |
| 47 | +| 3 | `http_batch` | N URLs / pool(4), 30s timeout | N `curl` → 1 call | |
| 48 | +| 4 | `math_eval` | N/A — go/parser AST walk | `bc`, `expr`, `python -c` | |
| 49 | +| 5 | `diff` | N/A — LCS line diff | `diff` fork | |
| 50 | +| 6 | `count_lines` | N files / pool(4), streaming | `wc -l` | |
| 51 | +| 7 | `multi_grep` | N patterns / pool(4), parallel walk | N `grep` → 1 call | |
| 52 | +| 8 | `json_query` | N/A — dot-path with array indexing | `jq`, `python -c` | |
| 53 | +| 9 | `tree` | N/A — recursive structured listing | `find`, `tree`, `ls -R` | |
| 54 | +| 10 | `checksum` | N files / pool(4), crypto stdlib | `sha256sum`, `md5sum` | |
| 55 | + |
| 56 | +### Security |
| 57 | +- All tools gate through `danger.ClassifyPath`/`ClassifyURL` + `CheckOperation` |
| 58 | +- All file opens use `O_NOFOLLOW` (anti-symlink) |
| 59 | +- All registered in `classifyToolCall()` for batch approval gate |
| 60 | +- `parallel_shell` individually classifies each command through the danger classifier |
| 61 | + |
| 62 | +### Stats |
| 63 | +- 2,126 lines added across 4 files (perf_tools.go 1,472 + test 640 + main.go 10 + loop.go 7) |
| 64 | +- 25 new tests, 0 new dependencies |
| 65 | +- Binary stays at ~12MB |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +## v0.38.2 (2026-05-24) — batch_read, glob, file_info |
| 70 | + |
| 71 | +### New Tools |
| 72 | +- **`batch_read`** — read N files in parallel goroutines, returns all content/errors in one call. Fixes fast_read benchmark (was 23%, 163s across 10 serial iterations) |
| 73 | +- **`glob`** — file finding by glob pattern. `filepath.Glob` for simple patterns (zero-walk), fallback to `filepath.Walk` for recursive |
| 74 | +- **`file_info`** — file metadata via Lstat: size, mod_time (ISO8601), mode, is_dir, is_symlink, is_regular |
| 75 | + |
| 76 | +### Security |
| 77 | +- Same `danger.ClassifyPath` + `CheckOperation` + `O_NOFOLLOW` as all existing tools |
| 78 | +- 14 new tests, 0 new dependencies |
| 79 | + |
| 80 | +--- |
| 81 | + |
3 | 82 | ## v0.37.0 (2026-05-23) — AIEB v2.0 Benchmark: 80.3% |
4 | 83 |
|
5 | 84 | ### Code Generation Discipline |
|
0 commit comments