# v0.21.2 Release Notes

> 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.
<details>
<summary>翻譯</summary>
新增 per-project 的 tool 放行清單，讓使用者預先授權信任的 tool call 跳過確認 prompt。簡化 provider 模型註冊表，移除 default-model 隱式 fallback —— 屬破壞性 config schema 變更。打磨 TUI：文字串流更順、session switcher 多了 new-session 選項、shift+tab 被擋時給出明確回饋。
</details>

## ⚠️ Breaking Changes

### Provider model JSON schema flattened

**Before** (`configs/jsons/providors/openai.json`):
```json
{
    "default": "gpt-5",
    "models": {
        "gpt-5": { "description": "..." },
        "gpt-4o": { "description": "..." }
    }
}
```

**After:**
```json
{
    "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 zero `ModelItem`.

**Migration:**
1. Flatten every `configs/jsons/providors/*.json`: drop the `default` and `models` wrappers and promote the inner map to the file root.
2. Replace any `provider.Default(name)` caller with an explicit model coming from session config, CLI flag, or the first key of `provider.Models(name)`.
3. Audit `provider.Get(name, model)` callers — `model` must be non-empty; an empty value now silently returns no model and the call fails downstream instead of falling back.

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

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` 都非空。

</details>

## 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]

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

- 新增 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

</details>

### UPDATE
- Refresh provider model catalogs and request handling — via [model-check](https://github.com/agenvoy/model-check) (@pardnchiu) [5035eab]
- Block Shift+Tab mode toggle while agent is running (@pardnchiu) [7f2af6c]

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

- 同步 Claude／Codex／Copilot／Gemini／OpenAI provider 的 model 清單與 request 參數至最新版（透過 [model-check](https://github.com/agenvoy/model-check) skill 產生）
- agent 運行中按 Shift+Tab 切換模式會被擋下並印出 `⎯ is running · shift+tab disabled` 提示，避免靜默 ignore

</details>

### 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]

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

- 收斂 agent selector prompt 規則並重整 TUI session status 顯示
- `activate_skill` 改回 skill 內容當作參考材料給 LLM 自由運用，不再硬綁 binding state
- action.log 寫入 assistant text 前先 buffer 同 source 的多筆 event，避免逐字 flush 產生破碎行

</details>

## 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](https://github.com/pardnchiu/skill-version-generate)
