# pi-prompt-translate

`pi-prompt-translate` は、コーディングエージェントのワークフローを英語のまま維持しつつ、pi を好みの言語で使えるようにする pi パッケージです。通常のユーザープロンプトをエージェント開始前に英語へ翻訳し、エージェント実行中は英語を維持するよう強制し、最後に assistant の最終回答だけを設定した対象言語へ翻訳します。

ツール呼び出し、ファイル編集、シェルコマンド、中間推論を非英語にせず、ローカライズされたやり取りを行いたい場合に便利です。

## README の言語

- [English](./README.md)
- [한국어](./README.ko.md)
- [日本語](./README.ja.md)
- [中文](./README.zh.md)
- [Español](./README.es.md)
- [Français](./README.fr.md)
- [Deutsch](./README.de.md)
- [Italiano](./README.it.md)
- [Português](./README.pt.md)
- [Русский](./README.ru.md)
- [Nederlands](./README.nl.md)
- [Polski](./README.pl.md)
- [Türkçe](./README.tr.md)
- [Tiếng Việt](./README.vi.md)
- [ไทย](./README.th.md)
- [Bahasa Indonesia](./README.id.md)
- [العربية](./README.ar.md)
- [हिन्दी](./README.hi.md)

## 機能

- ユーザープロンプトが pi エージェントに届く前に英語へ翻訳します。
- assistant の最終作業ブリーフィング/最終回答だけを、CLI 表示用に設定された対象言語へ翻訳します。
- 以後の LLM コンテキスト構築時には、表示された翻訳文を元の英語の最終回答へ戻し、翻訳済みの最終回答が将来の LLM リクエストに入らないようにします。
- 実際のエージェント実行、ツール使用計画、ツール呼び出し引数、中間 assistant メッセージ、翻訳前の最終回答が英語のままになるよう、英語専用の指示を挿入します。
- ツール呼び出しを含む assistant メッセージはスキップし、ツール実行後の最終 assistant メッセージを待ちます。
- デフォルトでは現在選択されている pi モデルを翻訳に使用します。
- 代わりに pi に設定されたデフォルトモデル、または専用の `<provider>/<model>` 翻訳モデルを使用できます。
- 最初のプロンプトを翻訳している間、UI 通知を表示します。
- 翻訳専用の LLM 呼び出しにはツールを公開しません。
- slash command と画像付きプロンプトは変更しません。
- 翻訳に失敗した場合は、元のプロンプトまたは元の最終回答へ安全にフォールバックします。
- パッケージ設定を pi のセッション履歴に保持します。

## 動作の流れ

1. 通常のユーザー入力が届くと、パッケージがその入力を英語へ翻訳します。
2. 翻訳された英語プロンプトが pi エージェントへ送られます。
3. エージェント開始前に、パッケージは実行中に英語で作業して回答するよう指示を追加します。
4. ツール呼び出しの assistant メッセージはそのまま残し、ツール実行が通常どおり続くようにします。
5. 最終 assistant 回答が生成されると、パッケージがその最終回答を CLI 表示用に設定された対象言語へ翻訳します。
6. パッケージは表示された翻訳文と元の英語の最終回答を記録します。
7. 以後の provider リクエストでは、表示された翻訳済み assistant 回答を LLM コンテキスト内で元の英語テキストへ置き換えます。

このパッケージは、コーディングタスク完了後の最終回答だけを意図的に翻訳します。中間メッセージとツール呼び出しは英語のままにすることで、コマンド、パス、JSON、コード、構造化されたツール引数の破損を防ぎます。将来の LLM リクエストも以前の最終回答の英語版を見るため、prompt cache の再利用に有利で、翻訳済み assistant 履歴を蓄積するより通常はトークン使用量を抑えられます。

## インストール

npm からインストール:

```bash
pi install npm:@kim05/pi-prompt-translate
```

永続的にインストールせず一度だけ実行:

```bash
pi -e npm:@kim05/pi-prompt-translate
```

## デフォルト設定

| 設定 | デフォルト | 説明 |
| --- | --- | --- |
| 有効化 | `true` | プロンプト翻訳は有効な状態で開始します。 |
| 対象言語 | `Korean` | assistant の最終回答はデフォルトで韓国語に翻訳されます。 |
| 翻訳モデル | `current` | 現在選択されている pi モデルを使用します。 |
| デバッグ | `false` | デバッグ通知はデフォルトで無効です。 |

## コマンド

すべてのコマンドは `/prompt-translate` から利用できます。

```text
/prompt-translate on
/prompt-translate off
/prompt-translate status
/prompt-translate lang Korean
/prompt-translate lang Japanese
/prompt-translate lang Chinese
/prompt-translate lang Spanish
/prompt-translate lang French
/prompt-translate lang German
/prompt-translate model current
/prompt-translate model default
/prompt-translate model <provider>/<model>
/prompt-translate debug on
/prompt-translate debug off
/prompt-translate reset
```

### コマンドリファレンス

| コマンド | 説明 |
| --- | --- |
| `/prompt-translate on` | プロンプトと最終回答の翻訳を有効にします。エイリアス: `enable`。 |
| `/prompt-translate off` | 翻訳を無効にします。エイリアス: `disable`。 |
| `/prompt-translate status` | 有効状態、対象言語、設定された翻訳モデル、解決された翻訳モデル、現在のモデル、デバッグ状態を表示します。 |
| `/prompt-translate lang <language>` | assistant の最終回答の対象言語を設定します。エイリアス: `language`, `target`。 |
| `/prompt-translate model current` | 現在選択されている pi モデルを翻訳に使用します。 |
| `/prompt-translate model default` | pi ユーザー設定の `defaultProvider/defaultModel` を使用します。 |
| `/prompt-translate model <provider>/<model>` | 特定のモデルを翻訳に使用します。例: `openai/gpt-4.1-mini`。 |
| `/prompt-translate debug on` | デバッグ UI 通知を有効にします。 |
| `/prompt-translate debug off` | デバッグ UI 通知を無効にします。 |
| `/prompt-translate reset` | デフォルト設定へ戻します。 |
| `/prompt-translate help` | 簡潔なコマンド概要を表示します。 |

## 言語名とエイリアス

`/prompt-translate lang` には通常の言語名を渡せます。よく使われるエイリアスは自動的に正規化されます。

| 入力例 | 保存される対象言語 |
| --- | --- |
| `ko`, `kor`, `korean`, `한국어`, `한글` | `Korean` |
| `ja`, `jp`, `japanese`, `일본어` | `Japanese` |
| `zh`, `zh-cn`, `cn`, `chinese`, `중국어`, `中文` | `Chinese` |
| `es`, `esp`, `spanish`, `스페인어`, `español` | `Spanish` |
| `fr`, `fra`, `fre`, `french`, `프랑스어`, `français` | `French` |
| `de`, `deu`, `german`, `독일어`, `deutsch` | `German` |
| `en`, `eng`, `english`, `영어` | `English` |
| `it`, `ita`, `italian`, `이탈리아어`, `italiano` | `Italian` |
| `pt`, `por`, `portuguese`, `포르투갈어`, `português` | `Portuguese` |
| `ru`, `rus`, `russian`, `러시아어`, `русский` | `Russian` |
| `nl`, `nld`, `dutch`, `네덜란드어`, `nederlands` | `Dutch` |
| `pl`, `pol`, `polish`, `폴란드어`, `polski` | `Polish` |
| `tr`, `tur`, `turkish`, `터키어`, `türkçe` | `Turkish` |
| `vi`, `vie`, `vietnamese`, `베트남어`, `tiếng việt` | `Vietnamese` |
| `th`, `tha`, `thai`, `태국어`, `ไทย` | `Thai` |
| `id`, `ind`, `indonesian`, `인도네시아어`, `bahasa indonesia` | `Indonesian` |
| `ar`, `arabic`, `아랍어`, `العربية` | `Arabic` |
| `hi`, `hin`, `hindi`, `힌디어`, `हिन्दी` | `Hindi` |

その他の言語名は、上の一覧になくても前後の空白を取り除いたうえで入力どおりに受け付けます。

## 翻訳モデルオプション

### `current`

```text
/prompt-translate model current
```

pi で現在選択されているモデルを使用します。デフォルトで、通常は最も簡単な選択肢です。

### `default`

```text
/prompt-translate model default
```

pi ユーザー設定の `defaultProvider` と `defaultModel` を使用します。設定がない、またはモデルが見つからない場合、`status` が解決エラーを報告します。

### 専用モデル

```text
/prompt-translate model <provider>/<model>
```

登録済みの特定の pi モデルを翻訳に使用します。メインのコーディングモデルをエージェント作業に残し、翻訳にはより高速または低コストなモデルを使いたい場合に便利です。

## 翻訳されないもの

このパッケージは、次の入力を意図的に変更せずそのまま通します。

- `/help` や `/prompt-translate status` などの slash command。
- 拡張機能から送られた入力。
- 画像が添付されたプロンプト。
- ツール使用を要求する assistant メッセージ。

## 失敗時の挙動

プロンプト翻訳に失敗した場合、pi は元のユーザープロンプトで続行し、エラー通知を表示します。最終回答の翻訳に失敗した場合、pi は元の英語の最終回答を保持し、エラー通知を表示します。これにより、翻訳の問題でコーディングワークフローが止まらないようにします。

## 開発

依存関係をインストールし、TypeScript チェックを実行します。

```bash
npm install
npm run check
```

パッケージのエントリーポイントは `index.ts` で、pi は `package.json` の `pi.extensions` フィールドを通じてこのパッケージを読み込みます。

## パッケージ

- npm パッケージ: `@kim05/pi-prompt-translate`
- ライセンス: MIT
