New Features
- Splash screen avatar: Startup animation now shows the Ally robot avatar with blinking and looking-around animations alongside the wordmark, with faster animation cycles tuned for the 3.6s splash duration
- AllowPrivateNetwork setting: New toggle in Settings → General to control SSRF protection for
http_requestandweb_fetch. Defaults to enabled (allow intranet access) for internal development use
Bug Fixes
- Data race in goal mode:
getActiveGoalnow returns a heap copy instead of a raw pointer, preventing concurrent reads of mutableGoalStatefields - Ask cancel/submit race:
pendingAsknow uses acancelledflag under mutex, preventing user answers from being silently dropped when a run is cancelled - remote_edit TOCTOU: Eliminated double SSH read in
remoteEditOne; the backup read is now reused for editing, removing the time-of-check-to-time-of-use window - SSRF protection:
allowPrivateNetworknow defaults to true and is configurable via settings, rather than being hardcoded - remote_run_command safety: Added 17 high-risk command pattern checks (mkfs, dd, shutdown, fork bomb, etc.) and shell parameter whitelist (bash/sh/zsh only)
Improvements
- Command safety regex precompilation: All 20+ regex patterns in
checkCommandSafetyare now package-level precompiled variables, eliminating per-call compilation overhead - remote_create_file performance: Removed redundant post-write SSH read confirmation
- Error code consistency:
remote_edit,remote_run_command,remote_delete_path,http_request,web_fetch,list_files, andreadTextFilenow all use structuredcodedToolErrorerror codes - run_command delete whitelist:
git rm,docker rm,kubectl delete,npm removeand similar safe commands are no longer blocked by the delete command filter - Goal creation guard:
createGoalnow rejects creating a new goal when an active goal already exists - Todo validation:
todo_writevalidatesStatusenum values (pending/in_progress/done) and non-empty titles - Skill file size limit:
Skilltool now enforces the 2MB file size limit on skill files - Calculator nesting limit:
calculatenow enforces a 200-level nesting depth limit to prevent stack overflow - remote_edit rollback: Rollback failures are now collected and reported instead of being silently ignored
Full Changelog: v0.2.0...v0.3.0