# v0.19.3 Release Notes

> v0.19.2 -> v0.19.3

## Summary

Introduces slash-command routing for external CLI agents (`/claude`, `/codex`, `/gh`, `/copilot`) across all three entry points and a read-only delegation mode for `invoke_external_agent`; consolidates external-agent execution into a shared `internal/agents/external` package.
<details>
<summary>翻譯</summary>
新增 `/claude`、`/codex`、`/gh`、`/copilot` 斜線前綴路由至外部 CLI agent，並為 `invoke_external_agent` 加上唯讀委派模式；將外部 agent 執行邏輯收斂到共用的 `internal/agents/external` 套件。
</details>

## Changes

### FEAT
- Add slash-command prefix routing (`/claude`, `/claude-allow`, `/codex`, `/codex-allow`, `/gh`, `/copilot`) so user input is dispatched directly to the matching external CLI agent without consuming a planner LLM call; wired into `exec.Run`, `discord/run.go`, and `routes/handler/send.go` ahead of skill matching.
- Add `readonly` parameter to `invoke_external_agent` (default `true`) to let the calling agent opt into write-enabled delegation; `cross_review_with_external_agents` remains hardcoded read-only.
- Add per-agent read-only CLI flag mapping in `external.Run` (claude `--disallowedTools=Edit,Write,NotebookEdit` vs `--permission-mode acceptEdits`; codex default sandbox vs `--dangerously-bypass-approvals-and-sandbox`; copilot bare vs `--allow-all-tools --allow-all-paths --allow-all-urls`).

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

- 新增斜線前綴路由（`/claude`、`/claude-allow`、`/codex`、`/codex-allow`、`/gh`、`/copilot`），使用者輸入直接分派到對應外部 CLI agent，不再消耗 planner LLM 呼叫；三個入口（`exec.Run`、`discord/run.go`、`routes/handler/send.go`）於 skill 偵測前攔截。
- `invoke_external_agent` 新增 `readonly` 參數（預設 `true`），呼叫端 agent 可顯式切換寫入模式；`cross_review_with_external_agents` 仍硬編唯讀。
- `external.Run` 依 agent 對應不同唯讀／寫入 CLI flag（claude 的 `--disallowedTools` 對 `--permission-mode acceptEdits`；codex 預設 sandbox 對 `--dangerously-bypass-approvals-and-sandbox`；copilot 裸呼叫對 `--allow-all-tools --allow-all-paths --allow-all-urls`）。

</details>

### FIX
- Allow internal file tools (`write_file`, `patch_edit`, and `read_file` via `patch_edit` helper path) to bypass the `isExclude` listing filter so writes to paths like `.doc/` (listed in project `.gitignore`) no longer fail with `path is excluded`; `read_file` tool and directory walkers still honour exclusion.

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

- 內部檔案 tool（`write_file`、`patch_edit`，以及 `patch_edit` 走的 `read_file` helper 路徑）繞過 `isExclude` 列表過濾，寫入 `.doc/` 等列於專案 `.gitignore` 的路徑不再誤擋；`read_file` tool 與目錄 walker 仍維持 exclusion 行為。

</details>

### REFACTOR
- Extract external CLI agent install/login/exec logic from `internal/tools/externalAgent/` into new `internal/agents/external` package (`external.go`, `match.go`); tool wrappers reduced to thin shells holding only LLM-facing registrations.
- Rename and split external tool files: `callExternalAgent.go` + `command.go` removed; `invokeExternalAgent.go` and `crossReviewWithExternalAgents.go` carry the renamed tool definitions.
- Add `exec.CallExternal` indirection (`internal/agents/exec/external.go`) so session creation, history persistence, and event emission stay unified across prefix-routed external dispatch.

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

- 外部 CLI agent 的安裝／登入／執行邏輯從 `internal/tools/externalAgent/` 抽出至新 `internal/agents/external` 套件（`external.go`、`match.go`）；tool wrapper 只剩 LLM 可見的註冊薄殼。
- 外部 tool 檔案拆分改名：移除 `callExternalAgent.go`、`command.go`；新命名的 `invokeExternalAgent.go`、`crossReviewWithExternalAgents.go` 承接 tool 宣告。
- 新增 `exec.CallExternal`（`internal/agents/exec/external.go`），使 prefix 路由到外部 agent 時仍統一走 session 建立、歷史持久化與事件發送。

</details>

***

## Files Changed

| File | Status | Tag |
|------|--------|-----|
| `internal/agents/external/external.go` | Added | REFACTOR |
| `internal/agents/external/match.go` | Added | FEAT |
| `internal/agents/exec/external.go` | Added | REFACTOR |
| `internal/agents/exec/run.go` | Modified | FEAT |
| `internal/agents/exec/toolCall.go` | Modified | FEAT |
| `internal/agents/exec/execute.go` | Modified | REFACTOR |
| `internal/agents/subagent/subagent.go` | Modified | REFACTOR |
| `internal/agents/types/agent.go` | Modified | FEAT |
| `internal/discord/run.go` | Modified | FEAT |
| `internal/routes/handler/send.go` | Modified | FEAT |
| `internal/tools/externalAgent/callExternalAgent.go` | Deleted | REFACTOR |
| `internal/tools/externalAgent/command.go` | Deleted | REFACTOR |
| `internal/tools/externalAgent/invokeExternalAgent.go` | Added | FEAT |
| `internal/tools/externalAgent/crossReviewWithExternalAgents.go` | Renamed | REFACTOR |
| `internal/tools/externalAgent/register.go` | Modified | REFACTOR |
| `internal/tools/file/patchEdit.go` | Modified | FIX |
| `internal/tools/file/readFile.go` | Modified | FIX |
| `internal/tools/file/writeFile.go` | Modified | FIX |
| `configs/prompts/system_prompt.md` | Modified | DOC |
| `README.md` | Modified | DOC |
| `doc/README.zh.md` | Modified | DOC |
| `doc/architecture.md` | Modified | DOC |
| `doc/architecture.zh.md` | Modified | DOC |
| `doc/doc.md` | Modified | DOC |
| `doc/doc.zh.md` | Modified | DOC |

***

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