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
-**Batch approval gate** — multiple risky tools shown at once in a single prompt.
69
+
-**Tool-failure recovery** (v0.53.0) — systematic recovery from tool call failures: retry transient errors, skip permanently failed tools, and continue the loop without crashing.
70
+
-**Context-limit protection** (v0.55.0) — trimToSurvival drops oldest messages when approaching the model's context window, keeping the agent functional under extended sessions. Fixed ordering bug in v0.56.2 (tool messages now stay grouped with their parent assistant message).
-**Post-response async processing** (v0.56.0) — skill learning and episode extraction run in background goroutines, eliminating the 2-5 second hang after every `odek run`.
v0.56.2: Vertical space compression — `Start()` is now a no-op; blank lines removed from Iteration/FinalAnswer/Summary. Raw-mode cursor uses `\r\n` instead of bare `\n` for cross-platform compatibility.
80
+
72
81
### Identity
73
82
System prompt is loaded by priority: `--system` flag > `~/.odek/IDENTITY.md` > compiled-in defaultSystem. The default is a concise identity focused on TDD workflow, tool discipline, and safety rules.
74
83
75
84
### Platform Support
76
85
CLI, REPL, Web UI, Telegram bot — all in a single binary.
86
+
87
+
## Testing
88
+
89
+
```bash
90
+
# All unit tests
91
+
go test ./... -count=1
92
+
93
+
# Race detector
94
+
go test -race ./... -count=1
95
+
96
+
# E2E tests (builds odek binary, tests real subprocess spawning)
97
+
ODEK_E2E=true go test -v -count=1 ./cmd/odek/ -run "TestE2E_"
98
+
99
+
# MCP E2E tests (builds fakeserver from source at test time)
100
+
ODEK_E2E=true go test -v -count=1 ./cmd/odek/ -run "TestMCPE2E_"
101
+
102
+
# Sandbox integration tests (requires Docker)
103
+
go test -v -count=1 ./cmd/odek/ -run "TestSandbox"
104
+
```
105
+
106
+
Note: MCP client E2E tests build the fakeserver from `internal/mcpclient/testdata/main.go` at test time (no pre-compiled binary). Cross-platform test fixes in v0.56.2: macOS temp dirs classified correctly (LocalWrite not SystemWrite), Docker availability check now verifies daemon reachability.
return`Search file contents or find files by name.
273
284
Two modes: target="content" searches inside files for a regex pattern,
274
285
target="files" finds files by glob pattern.
275
-
Results are sorted by modification time (newest first).`
286
+
Results are sorted by modification time (newest first).
287
+
For performance, ALWAYS use file_glob (e.g. '*.go', '*.py', '*.md') and a
288
+
narrow path — without file_glob, every file in the tree is scanned.`
276
289
}
277
290
278
291
func (t*searchFilesTool) Schema() any {
@@ -290,11 +303,11 @@ func (t *searchFilesTool) Schema() any {
290
303
},
291
304
"path": map[string]any{
292
305
"type": "string",
293
-
"description": "Directory or file to search in (default: current directory '.').",
306
+
"description": "Directory or file to search in (default: '.'). Narrow to the most specific directory possible. NEVER use '/' or '/root' without file_glob.",
294
307
},
295
308
"file_glob": map[string]any{
296
309
"type": "string",
297
-
"description": "Filter files by pattern in content mode (e.g. '*.go' to only search Go files).",
310
+
"description": "Filter files by pattern in content mode (e.g. '*.go'). ALWAYS use this on broad paths — without it every file is scanned (slow on large trees).",
-**`search_files` now skips build/artifact directories** — `node_modules`, `vendor`, `__pycache__`, `target`, `dist`, `build`, `.next`, `.venv` are automatically excluded from directory walks. Previously only hidden dirs (`.git`, `.cache`) were skipped, causing `search_files` from broad paths like `/root` to walk thousands of irrelevant files.
7
+
-**`multi_grep` applies the same `skipDir`** — parallel multi-pattern searches also skip build/artifact directories, matching the resource resolver's behavior in `internal/resource/resource.go`.
8
+
9
+
### LLM Guidance
10
+
-**`search_files` tool description updated** — now explicitly says "ALWAYS use file_glob" and warns that "without it every file in the tree is scanned."
11
+
-**`search_files` schema descriptions updated** — `path` now warns "NEVER use '/' or '/root' without file_glob", `file_glob` advises "ALWAYS use this on broad paths."
12
+
-**Default system prompt** — added "Search performance" section with guidance on `file_glob`, narrow paths, and `multi_grep`.
13
+
-**Telegram system prompt** — same search_files performance guidance added.
14
+
15
+
### Testing
16
+
-**`TestSearchFiles_SkipsBuildDirs`** — new test verifies that files inside `node_modules`, `__pycache__`, and `vendor` are skipped while legitimate sibling files are found.
-**trimToSurvival message ordering** — tool messages are now kept grouped with their parent assistant message after trimming, preventing orphaned tool results from earlier turns.
22
+
-**Vertical space compression** — `render.Start()` is now a no-op; blank lines removed from Iteration/FinalAnswer/Summary outputs. Raw-mode cursor uses `\r\n` instead of bare `\n` for cross-platform terminal compatibility.
23
+
-**Cross-platform test fixes** — macOS temp dirs now correctly classified as `LocalWrite` (not `SystemWrite`); Docker availability check verifies daemon reachability.
0 commit comments