# TODO

## P0: LLM 通信の Ctrl-C 対応と BUSY 固着防止

### 状況

- かなり改善済み。
- ただし Windows での再現テストが必要。
- 完全な即時停止は別プロセス化が最有力。

### 残タスク

- Windows でネットワーク断 / DNS 不達 / Firewall drop を再現して手動テストする。
- Ctrl-C で中断できることを確認する。
- BUSY 表示や状態が固着しないことを確認する。

### 優先度

- 無限ハング防止: 必須
- UI 状態の復帰: 必須
- 即時キャンセル: 努力目標

## 方針: index 化の高速化

### 基本方針

- まずは埋め込み API の往復回数を減らす。
- チャンク単位の逐次処理は避け、まとめて送る。
- SQLite 書き込みはなるべくまとめる。
- 差分がないファイルは再計算しない。

### 実装目安

- 1 リクエストあたり 16 個前後のチャンクをまとめる。
- チャンクが長い場合は 8 個、短い場合は 32 個まで調整する。
- 件数固定ではなく、合計文字数の上限も設ける。
- 目安は合計 12,000〜20,000 文字程度。

### 調整対象

- `chunk_size` は大きめにする。
- `overlap` は必要最小限にする。
- `executemany()` で一括保存する。
- ファイル更新判定は `mtime` だけでなく、必要ならサイズやハッシュも使う。
- 埋め込み設定ごとに別 DB を使う。

## P1: tool / util_tools の疎結合

### 状況

- いくつかの補助処理は分離済み。
- 互換 import / re-export は当面維持する。

### 継続対象

- `audio_speech_tool.py`
- `generate_image_tool.py`
- `finish_skill_tool.py`
- `cli.py`
- `web.py`
- `cli_startup.py`

### 進め方

- `tool -> util_tools` 依存を必要最小限まで削る。
- tool 初期化まわりを 1 箇所に寄せる。
- tool 内ログは callback 経由に寄せる。
- 各段階で `py_compile` と smoke test を通す。

## 保留

- 翻訳 provider の追加検討は削除済み。必要時に別途整理する。

## P2: prompt_toolkit への段階移行

### 目的

- `readline` 依存をすぐに外さず、安全側から順次置換する。
- dumb terminal / 非TTY では従来入力にフォールバックする。

### 方針

- まずは `prompt_toolkit` を起動時ダイアログに限定する。
- CLI 本体の入力は当面 `readline` を維持する。
- TTY のときだけ補完や履歴を `prompt_toolkit` 側へ寄せる。
- 非TTY / dumb terminal は `input()` / `readline` を継続使用する。
- 最後に `readline` 削除を検討する。

### 対象

- `src/uagent/cli.py`
- `src/uagent/cli_startup.py`
- `src/uagent/util_tools.py`

### 確認項目

- TTY と非TTY で起動時動作が壊れないこと。
- 補完・履歴・`:load` 連携が維持されること。
- Windows / Linux で同等に動くこと。
- `py_compile` と smoke test を通すこと。
