v0.21.1 -> v0.21.2
Summary
Adds a persistent per-project allow list that lets users bypass the confirm prompt for trusted tool calls. Simplifies the provider model registry by dropping the implicit default-model fallback as a breaking config schema change. Polishes the TUI with smoother text streaming, a new-session option in the session switcher, and clearer feedback when shift+tab is blocked.
翻譯
新增 per-project 的 tool 放行清單,讓使用者預先授權信任的 tool call 跳過確認 prompt。簡化 provider 模型註冊表,移除 default-model 隱式 fallback —— 屬破壞性 config schema 變更。打磨 TUI:文字串流更順、session switcher 多了 new-session 選項、shift+tab 被擋時給出明確回饋。⚠️ Breaking Changes
Provider model JSON schema flattened
Before (configs/jsons/providors/openai.json):
{
"default": "gpt-5",
"models": {
"gpt-5": { "description": "..." },
"gpt-4o": { "description": "..." }
}
}
After:
{
"gpt-5": { "description": "..." },
"gpt-4o": { "description": "..." }
}
API removed:
provider.Default(name string) string— no longer exported.provider.Get(name, "")no longer falls back to the default model; the empty-string lookup returns a zeroModelItem.
Migration:
- Flatten every
configs/jsons/providors/*.json: drop thedefaultandmodelswrappers and promote the inner map to the file root. - Replace any
provider.Default(name)caller with an explicit model coming from session config, CLI flag, or the first key ofprovider.Models(name). - Audit
provider.Get(name, model)callers —modelmust be non-empty; an empty value now silently returns no model and the call fails downstream instead of falling back.
翻譯
Provider model 註冊表的 JSON schema 從 {default, models: {...}} 攤平為直接的 model map。provider.Default(name) 已移除;provider.Get(name, "") 不再走預設 model fallback。遷移:(1) 把每個 configs/jsons/providors/*.json 的 default/models 包裝拿掉,把 models map 直接提到檔案根;(2) 原本仰賴 Default(name) 的呼叫處要明確傳入 model 名(從 session config/CLI flag 取得,或退而取 Models(name) 第一個 key);(3) 確保每個 Get(name, model) 的 model 都非空。
Changes
FEAT
- Add persistent tool allow list and shared tool formatting (@pardnchiu) [b634b95]
- Add text stream completion events and sync UI output handling (@pardnchiu) [1a3a60d]
- Add new-session option to TUI session switcher (@pardnchiu) [c9eeed9]
翻譯
- 新增 per-project
.agenvoy/allow_list,confirm popup 的「Yes, don't ask again」會把當前 tool call 寫入清單,下次自動放行;同時把 tool args 顯示器抽到internal/utils.FormatTool,TUI/CLI/action.log 三端共用同一份 canonical 格式 - 新增
EventTextDone事件,CLI/TUI/Discord 渲染端可在 assistant 文字串流結束時統一收尾,subagent 與外部 agent 的輸出也接上同一條路徑 - TUI session switcher 多了
New session選項,不需離開 picker 即可建立新 session
UPDATE
- Refresh provider model catalogs and request handling — via model-check (@pardnchiu) [5035eab]
- Block Shift+Tab mode toggle while agent is running (@pardnchiu) [7f2af6c]
翻譯
- 同步 Claude/Codex/Copilot/Gemini/OpenAI provider 的 model 清單與 request 參數至最新版(透過 model-check skill 產生)
- agent 運行中按 Shift+Tab 切換模式會被擋下並印出
⎯ is running · shift+tab disabled提示,避免靜默 ignore
REFACTOR
- Refine agent selection rules and session status display (@pardnchiu) [ff0fe6a]
- Return skill content as reference material instead of binding state (@pardnchiu) [100b48a]
- Buffer assistant text events before logging actions (@pardnchiu) [5a69c88]
翻譯
- 收斂 agent selector prompt 規則並重整 TUI session status 顯示
activate_skill改回 skill 內容當作參考材料給 LLM 自由運用,不再硬綁 binding state- action.log 寫入 assistant text 前先 buffer 同 source 的多筆 event,避免逐字 flush 產生破碎行
Scope
internal/agents/exec/— FEAT, REFACTOR (allowList.go,execute.go,toolCall.go,execWithSubagent.go,external.go,selectAgent.go)internal/agents/provider/— BREAKING, UPDATE (schema flatten + send/new refresh)configs/jsons/providors/— BREAKING, UPDATE (claude, codex, copilot, gemini, nvidia, openai)internal/tui/— FEAT, UPDATE (handlerPopup.go,handlerExec.go,commandSwitch.go,update.go,view.go)internal/interactive/cli/— FEAT (pending.go,run.go)internal/pending/— FEAT (Reply.Remember,Reply.Reason)internal/utils/— FEAT (formatTool.go)internal/session/— REFACTOR (actionLog.go)internal/tools/searcher/— REFACTOR (activateSkill.go)internal/filesystem/,cmd/app/,configs/prompts/— supporting changes.gitignore— UPDATE (.agenvoy)
Generated by SKILL