# 壓縮與重置

長時間執行如何維持在模型視窗內，以及 reset 與 remove 會清掉什麼。

## 執行期壓縮

除了上述儲存分層，`internal/agents/exec/compact` 負責把單次長時間執行維持在模型視窗內。各階段獨立，依序套用且只做到夠用為止：

| 階段 | 觸發 | 效果 |
|---|---|---|
| `CheckThreshold(model)` | 每次迭代 | 當前模型的 token 預算——其 context window 的 80 %。自 v1.0.11 起 window 改由每小時向 `https://llm-io.agenvoy.com/` 取一次的即時表提供，以 vendor + model 查表，取代原本寫死的各家族固定值；表中查不到的模型回退 128 K。v1.0.25 起表中查不到的 `copilot@` 模型改用 Copilot 自身 `/models` 端點回報的 `max_context_window_tokens`（背景抓取、每 24 小時更新），取代原本一律 256 K 的回退值 |
| `ExtractOldHistories` | 超出預算，該次執行第一次 | 把較舊的對話輪次併入滾動摘要 |
| `ToolHistory` | 再次超出預算，或沒有較舊的對話可併入 | 將最舊的 tool-call 往返摘要成文字 |
| `TrimFallback` | Provider 回報 context 長度錯誤 | v1.1.1 起先跑同一套 `ExtractOldHistories` → `ToolHistory` 壓縮後重送；只有該壓縮無法縮減時，才丟掉最舊的一組對話再重送 |
| `RawToolFallback` | 執行途中切換模型 | 將 tool 歷史轉為純文字，讓新模型可讀 |

手動壓縮可從 TUI（`/compact`；`/memory` 指令已移除，重設改為 `/reset`）或 `POST /v1/session/:id/memory` 觸發。該端點以 `action` 區分：`compact` 丟棄較舊訊息並回傳 `removed`、`summary` 重建滾動摘要並回傳 `count`、`reset` 清空對話——`mode: "summary"` 保留滾動摘要，`mode: "all"` 一併清除。v1.1.1 起 TUI popup 另有唯讀的 `summary` 分頁，顯示當前的滾動摘要。

### 搜尋路由

| `match` 參數 | 來源 | 使用情境 |
|---|---|---|
| `semantic`（預設） | ToriiDB VSearch | 「我們討論過關於 X 的什麼？」—— 基於語意 |
| `keyword` | SQLite FTS5（封存）+ ToriiDB 子字串（近期） | 「找出含 'sandbox' 的訊息」—— 精確文字 |

### 跨 session error memory

Tool 失敗與解決它的修正方式以 **90 天 TTL** 存於 `error_memory`，跨 session 存續。只有以 `outcome=resolved` 寫入的紀錄會被儲存；`failed` / `abandoned` 的寫入會被丟棄，因此不再保留放棄的策略。命中時（透過關鍵字 `Contains` 或 `db.VSearch`），該條目的 TTL 透過 `db.Expire` 續期。

當同一 tool 名稱在未來 session 失敗時，`toolCall.go` 自動查詢 `error_memory`，把最多 3 筆相關紀錄以 `related_errors` 附在失敗的工具結果後；agent 套用已記錄的修正方式。

紀錄中的作法可在 web 儀表板的 Lessons 頁面編輯（`PATCH /v1/torii/error`，改寫 `action` 並保留 TTL）；`GET /v1/torii/error` 列出紀錄。

## Reset / remove 行為

| 操作 | `history.json` | ToriiDB `DBSessionHist` | SQLite（messages + meta） | `summary.json` |
|---|---|---|---|---|
| Compact（自動） | 裁剪至 80% | 移除早於 cutoff 的條目 | 不動（已含全部資料） | 不動 |
| Reset（`/reset`，`mode=summary`） | 刪除 | 清除 | 清除 | 保留 |
| Reset（`mode=all`） | 刪除 | 清除 | 清除 | 刪除 |
| Remove session | 刪除目錄 | 清除 | 清除 | 刪除目錄 |
