- tools/file_*: hard-fail when OLLIE_SESSION_ID is unset; surface errors
on all failure paths including dir checks, marker cleanup, and I/O
- tools/file_read: treat nonexistent path as new file (emit "(new file)",
write empty marker) so file_write can create new files
- tools/file_write: colorize new-file lines with + (U+FF0B)
- tools/file_glob, file_grep, memory_*, task_*: consistent error handling
and output to stdout so the model sees all failures
- tui/diffcolor.go: match +/− (U+FF0B/U+2212) lookalikes emitted by
file_edit/file_write; fix +++ / --- header pattern
- prompts: prohibit execute_code for file creation/modification;
enforce execute_tool with file_write/file_edit instead
- core submodule: surface isError from MCP responses; inject
OLLIE_SESSION_ID into execute server at session creation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The temp file + os.replace() (rename) pattern fails on FUSE-mounted paths
(e.g. $OLLIE/sk/, $OLLIE/pl/) because the 9P server doesn't implement Twstat.
Write directly to file_path instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>