# v0.18.3 Release Notes

> v0.18.1 -> v0.18.3

## Summary

Sinks the browser-fetch stack, keychain wrapper, and generic HTTP client into the shared `go-utils` library (rod v0.4.0, filesystem/keychain, http). Hardens stub-tool dispatch by short-circuiting first-call execution and validating required arguments against each tool's JSON schema. Fixes path resolution for `glob_files` and adds a vim-style Tab toggle between message and command input modes in the TUI.

<details>
<summary>翻譯</summary>
將瀏覽器抓頁堆疊、keychain wrapper 與泛型 HTTP client 下沉至共用的 `go-utils` 函式庫（rod v0.4.0、filesystem/keychain、http）。強化 stub tool 首次呼叫的分派，改以工具 JSON schema 動態驗證 required 欄位。修正 `glob_files` 路徑解析，並為 TUI 新增 vim 風格 Tab 鍵切換訊息／指令輸入模式。
</details>

## Changes

### FEAT
- Add Tab key toggle between message and command input modes in the TUI with vim-style navigation

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

- 新增 TUI 以 Tab 鍵切換訊息／指令輸入模式（vim 風格操作）

</details>

### FIX
- Short-circuit stub tool first invocation to skip validator and executor; activate schema and prompt the model to re-invoke with full parameters
- Validate required tool arguments dynamically via `exec.AllTools` JSON schema instead of hardcoded allowlist; treat empty strings as missing

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

- Stub tool 首次呼叫改走短路路徑，跳過 validator 與 executor，僅 activate schema 並提示模型以完整參數重呼
- 以 `exec.AllTools` JSON schema 動態判定必填欄位（取代 hardcoded allowlist），空字串視為 missing

</details>

### UPDATE
- Resolve `~` and absolute paths correctly in `glob_files`; align with the rest of the file-tool suite
- Clarify path resolution rules in file-tool prompts and schemas to reduce model ambiguity

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

- 修正 `glob_files` 對 `~` 與絕對路徑的處理，與其他 file tool 行為一致
- 明確化 file tool prompt 與 schema 的路徑解析規則，降低模型歧義

</details>

### REFACTOR
- Replace `fetchPage` internals with `github.com/pardnchiu/go-utils/rod` v0.4.0; remove local readability, HTML→Markdown walker, stealth.js, and listener.js. Agenvoy keeps only `validateURL`, HTTP→HTTPS upgrade, ToriiDB cache, skipped-map, 4xx title heuristic, and frontmatter assembly
- Replace `internal/filesystem/keychain` wrapper with `go-utils/filesystem/keychain`; initialize via `filesystem.Init()` with service name `"agenvoy"` to preserve existing credentials
- Replace `internal/utils.GET/POST` with `go-utils/http` generic client across 12 call sites (all provider send.go, copilot login/refresh, googleRSS, searchWeb, youtube, yahooFinance); drop 121 lines of duplicated implementation

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

- `fetchPage` 內部改以 `github.com/pardnchiu/go-utils/rod` v0.4.0 取代；移除本地 readability、HTML→Markdown walker、stealth.js、listener.js。Agenvoy 只保留 `validateURL`、HTTP→HTTPS 升級、ToriiDB cache、skipped-map、4xx 標題偵測與 frontmatter 組裝
- `internal/filesystem/keychain` wrapper 改用 `go-utils/filesystem/keychain`，由 `filesystem.Init()` 以 service 名 `"agenvoy"` 初始化，保留既有使用者憑證
- 12 個 call site 的 `internal/utils.GET/POST` 改走 `go-utils/http` 泛型（所有 provider send.go、copilot login/refresh、googleRSS、searchWeb、youtube、yahooFinance）；刪除 121 行重複實作

</details>

***

## Files Changed

| File | Status | Tag |
|------|--------|-----|
| `internal/tools/fetchPage/load.go` | Modified | REFACTOR |
| `internal/tools/fetchPage/download.go` | Modified | REFACTOR |
| `internal/tools/fetchPage/extract.go` | Deleted | REFACTOR |
| `internal/tools/fetchPage/transToMarkdown.go` | Deleted | REFACTOR |
| `internal/tools/fetchPage/embed/stealth.js` | Deleted | REFACTOR |
| `internal/tools/fetchPage/embed/listener.js` | Deleted | REFACTOR |
| `internal/filesystem/keychain/keychain.go` | Deleted | REFACTOR |
| `internal/filesystem/filesystem.go` | Modified | REFACTOR |
| `internal/utils/utils.go` | Modified | REFACTOR |
| `internal/agents/provider/claude/send.go` | Modified | REFACTOR |
| `internal/agents/provider/compat/send.go` | Modified | REFACTOR |
| `internal/agents/provider/copilot/send.go` | Modified | REFACTOR |
| `internal/agents/provider/copilot/login.go` | Modified | REFACTOR |
| `internal/agents/provider/copilot/refresh.go` | Modified | REFACTOR |
| `internal/agents/provider/gemini/send.go` | Modified | REFACTOR |
| `internal/agents/provider/nvidia/send.go` | Modified | REFACTOR |
| `internal/agents/provider/openai/send.go` | Modified | REFACTOR |
| `internal/tools/external/googleRSS/fetch.go` | Modified | REFACTOR |
| `internal/tools/external/searchWeb/fetchDDG.go` | Modified | REFACTOR |
| `internal/tools/external/youtube/fetch.go` | Modified | REFACTOR |
| `internal/tools/external/yahooFinance/fetch.go` | Modified | REFACTOR |
| `internal/agents/provider/*/new.go` | Modified | REFACTOR |
| `cmd/app/addProvider.go` | Modified | REFACTOR |
| `internal/discord/command/modal.go` | Modified | REFACTOR |
| `internal/routes/handler/key.go` | Modified | REFACTOR |
| `internal/tools/externalAgent/reviewResult.go` | Modified | REFACTOR |
| `test/providers_integration_test.go` | Modified | REFACTOR |
| `internal/agents/exec/toolCall.go` | Modified | FIX |
| `internal/tools/file/globFiles.go` | Modified | UPDATE |
| `internal/tools/file/*.go` | Modified | UPDATE |
| `configs/prompts/system_prompt.md` | Modified | UPDATE |
| `configs/prompts/skill_execution.md` | Modified | UPDATE |
| `configs/prompts/summary_context.md` | Modified | UPDATE |
| `internal/tui/commandMode.go` | Modified | FEAT |
| `internal/tui/globalShortcut.go` | Modified | FEAT |
| `internal/tui/new.go` | Modified | FEAT |
| `extensions/skills/skill-creator/SKILL.md` | Modified | DOC |
| `CLAUDE.md` | Modified | DOC |
| `go.mod` | Modified | CHORE |
| `go.sum` | Modified | CHORE |

***

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