# v0.14.0 Release Notes

> [!WARNING]
> Deprecated, please download [v0.14.2](https://github.com/pardnchiu/Agenvoy/releases/tag/v0.14.2) directly.

> v0.13.0 -> v0.14.0

## Summary

Add OS-native sandbox isolation with automatic bubblewrap installation on Linux, per-request token usage tracking across all providers, and restructure tool handlers into individually named files.
<details>
<summary>翻譯</summary>
新增作業系統原生沙箱隔離（Linux 自動安裝 bubblewrap）、所有 Provider 的每次請求 token 用量追蹤，以及將工具處理器重構為獨立命名檔案。
</details>

## Changes

### FEAT
- Add sandbox package with OS-native isolation: bubblewrap on Linux, sandbox-exec on macOS
- Add automatic bubblewrap dependency detection and installation via system package manager on Linux
- Add sandbox dependency check at startup in both CLI and Discord server entry points
- Wrap all tool command execution and scheduler scripts through sandbox gate
- Add per-request token usage accumulation across all tool-call iterations within a session
- Display total token consumption (model + in/out) in CLI output and Discord reply footers

<details>
<summary>翻譯</summary>

- 新增 sandbox package，支援作業系統原生隔離：Linux 使用 bubblewrap，macOS 使用 sandbox-exec
- 新增 Linux 環境下 bubblewrap 自動偵測與透過系統套件管理器自動安裝
- 在 CLI 與 Discord server 進入點新增沙箱依賴檢查
- 所有工具指令執行與排程器腳本均經由 sandbox gate 包裝
- 新增 Session 內所有工具呼叫迭代的 token 用量累計
- 在 CLI 輸出與 Discord 回覆頁尾顯示總 token 消耗量（模型 + in/out）

</details>

### REFACTOR
- Extract tool handlers into individually named files: glob.go → globFiles.go, list.go → listFiles.go, patch.go → patchEdit.go, search.go → searchContent.go
- Remove monolithic routes.go; each handler self-registers via init-style pattern
- Move exclude logic and file walk/list functions from tools into filesystem package
- Simplify ReadFile/WriteFile by removing redundant dir parameter
- Rename Executor field WorkPath → WorkDir for consistency
- Resolve symlinks in GetAbsPath with fallback to parent resolution for new files

<details>
<summary>翻譯</summary>

- 將工具處理器拆分為獨立命名檔案：glob.go → globFiles.go、list.go → listFiles.go、patch.go → patchEdit.go、search.go → searchContent.go
- 移除單體 routes.go，每個處理器以 init 模式自行註冊
- 將 exclude 邏輯與檔案 walk/list 函式從 tools 搬移至 filesystem package
- 簡化 ReadFile/WriteFile，移除多餘的 dir 參數
- 將 Executor 欄位 WorkPath 重新命名為 WorkDir 以保持一致性
- GetAbsPath 新增 symlink 解析，針對新檔案回退至父目錄解析

</details>

***

## Files Changed

| File | Status | Tag |
|------|--------|-----|
| `internal/sandbox/darwin.go` | Added | FEAT |
| `internal/sandbox/linux.go` | Added | FEAT |
| `internal/sandbox/sandbox.go` | Added | FEAT |
| `cmd/cli/main.go` | Modified | FEAT |
| `cmd/server/main.go` | Modified | FEAT |
| `internal/scheduler/scheduler.go` | Modified | FEAT |
| `internal/tools/tools.go` | Modified | FEAT |
| `internal/agents/types/event.go` | Modified | FEAT |
| `internal/agents/types/message.go` | Modified | FEAT |
| `internal/agents/exec/execute.go` | Modified | FEAT |
| `internal/agents/exec/run.go` | Modified | FEAT |
| `internal/agents/provider/claude/send.go` | Modified | FEAT |
| `internal/agents/provider/gemini/send.go` | Modified | FEAT |
| `cmd/cli/runEvents.go` | Modified | FEAT |
| `internal/discord/new.go` | Modified | FEAT |
| `internal/discord/run.go` | Modified | FEAT |
| `internal/tools/file/globFiles.go` | Added | REFACTOR |
| `internal/tools/file/listFiles.go` | Added | REFACTOR |
| `internal/tools/file/patchEdit.go` | Added | REFACTOR |
| `internal/tools/file/searchContent.go` | Renamed | REFACTOR |
| `internal/tools/file/glob.go` | Deleted | REFACTOR |
| `internal/tools/file/list.go` | Deleted | REFACTOR |
| `internal/tools/file/patch.go` | Deleted | REFACTOR |
| `internal/tools/file/routes.go` | Deleted | REFACTOR |
| `internal/tools/file/register.go` | Modified | REFACTOR |
| `internal/tools/file/readFile.go` | Modified | REFACTOR |
| `internal/tools/file/writeFile.go` | Modified | REFACTOR |
| `internal/tools/executor.go` | Modified | REFACTOR |
| `internal/tools/types/executor.go` | Modified | REFACTOR |
| `internal/filesystem/filesystem.go` | Modified | REFACTOR |
| `internal/filesystem/isExclude.go` | Renamed | REFACTOR |
| `internal/filesystem/keychain/keychain.go` | Modified | REFACTOR |
| `internal/filesystem/scheduler.go` | Modified | REFACTOR |
| `internal/filesystem/sessionManager/config.go` | Modified | REFACTOR |
| `internal/filesystem/sessionManager/session.go` | Modified | REFACTOR |
| `internal/filesystem/sessionManager/summary.go` | Modified | REFACTOR |
| `internal/tools/file/errorMemory.go` | Modified | REFACTOR |
| `internal/tools/file/toolError.go` | Modified | REFACTOR |
| `internal/tools/file/writeScript.go` | Modified | REFACTOR |
| `internal/tools/schedulerTools/register.go` | Modified | REFACTOR |
| `internal/tools/apis/searchWeb/SearchWeb.go` | Modified | REFACTOR |
| `internal/tools/browser/download.go` | Modified | REFACTOR |
| `internal/tools/browser/load.go` | Modified | REFACTOR |
| `internal/tools/browser/skipped.go` | Modified | REFACTOR |
| `internal/agents/exec/extractSummary.go` | Modified | REFACTOR |
| `internal/agents/exec/getSession.go` | Modified | REFACTOR |
| `internal/agents/exec/selectAgent.go` | Modified | REFACTOR |
| `internal/agents/exec/selectSkill.go` | Modified | REFACTOR |
| `internal/agents/provider/copilot/login.go` | Modified | REFACTOR |

***

Generated by [SKILL](https://github.com/pardnchiu/skill-version-generate)
