Terax(crynta/terax-ai)
Tauri 2 + React 19 の AI ネイティブターミナル(ADE)。WebView は invoke 越しにのみ OS に触れる。
Terax は、マルチタブ端末・CodeMirror 6 エディタ・ファイルツリー・ローカル dev サーバ向けプレビュー・BYOK の AI サイドパネルを単一ウィンドウにまとめたデスクトップアプリ。バックエンドは Rust(portable-pty)で PTY を保持し、フロントは React 19 + TypeScript。テレメトリなし・API キーは OS キーチェーン保存が README の約束として明記されている。
プロジェクトルートの TERAX.md は、エージェント向けの長期メモと同時に「変更前に読むべきアーキテクチャ文書」として運用されている。
README の Tech stack 一行に基づく。Vercel AI SDK v6・Tailwind v4・shadcn/ui・Zustand・xterm.js(WebGL)などが列挙されている。
| 領域 | 主な依存 | メモ |
|---|---|---|
| シェル | Tauri 2、Rust stable | バンドル ID は app.crynta.terax(TERAX.md) |
| 端末 | xterm.js、WebGL、portable-pty | バックグラウンドでタブ間ストリーミング継続 |
| 編集 | CodeMirror 6 | Vim、複数テーマ、インライン補完と AI diff |
| AI | @ai-sdk/* 系 | OpenAI / Anthropic / Google / Groq / xAI / Cerebras / 互換エンドポイント |
| パッケージ | pnpm | Node 20+ 前提(README) |
terax-bin。AppImage は FUSE 要件や Wayland 時の WEBKIT_DISABLE_DMABUF_RENDERER=1 のヒントが README にある。
Rust 側(src-tauri/)がファイルシステム・プロセス・シェル・シークレットを所有し、WebView からは Tauri の invoke() で登録コマンドにだけ届く。TERAX.md が列挙する代表コマンドは次のとおり。
- PTY: 対話シェルは長寿命セッション。出力は Tauri の
Channelでストリーム。 - ワンショットシェル:
shell_run_commandは AI ツール用。対話 PTY とは別経路(Unix は$SHELL -lc、Windows は PowerShell 経由)。 - シークレット:
keyringクレート。サービス名はterax-ai。Linux はファイルフォールバックが cfg 付きで分岐。 - Windows ConPTY: 並行スポーンでパイプが詰まる問題への対策として
SPAWN_LOCK。子プロセス木の孤児化防止に Job Object(TERAX.md の Known gotchas と関連)。
シェル統合(OSC)
Unix は ZDOTDIR や --rcfile で注入スクリプトを載せ、OSC 7(cwd)と OSC 133(プロンプト境界・終了コード)をホストへ送る。Windows はユーザの $PROFILE の後に prompt をラップして同系のマーカを出す。
単一ウィンドウの React アプリ。タブはタグ付きユニオン(terminal / editor / preview / ai-diff など)で、切り替え時にアンマウントせず CSS で非表示にし、PTY と dev サーバのストリームを維持する設計(TERAX.md)。
| モジュール | 責務の要約 |
|---|---|
terminal/ | xterm セッション、OSC ハンドラ、テーマ |
editor/ | CodeMirror スタック、言語モード、Vim |
explorer/ | ツリー、ファジー検索、コンテキストアクション |
tabs/ | useTabs と cwd 継承(useWorkspaceCwd) |
ai/ | エージェント、ツール、セッション、コンポーザー UI |
settings/ | tauri-plugin-store ベースの設定と別ウィンドウ |
.split(/[\\/]/) で正規化し、Windows のドライブ表記も境界で揃える(TERAX.md の UI 規約)。
プロバイダ一覧は src/modules/ai/config.ts の PROVIDERS。メインエージェントは Experimental_Agent とステップ上限、サブエージェントは専用ツール集合で起動。
- セッション:
tauri-plugin-storeに会話とアクティブ ID を永続化。API キー切替時はメモリ上の Chat マップを破棄し、ディスク上のセッションは残す。 - ツール承認: ファイル書き換え・シェル実行などは
needsApproval: true。AI SDK の承認応答フローと連動。 - ライブコンテキスト: アクティブ端末の cwd とバッファ末尾(約 300 行)を遅延取得するブリッジを
App.tsxから注入。 - セキュリティ:
lib/security.tsがパス拒否リストを持ち、読み書き双方に適用。バイパスしないこと。
設定フロー(README 要約)
- Settings → AI を開く。
- プロバイダを選び API キーを入力(ローカルは LM Studio エンドポイント)。
- キーは
secrets_*経由でキーチェーンへ。ディスクやlocalStorageには置かない。
README の手順をそのまま掲載する。
pnpm install
pnpm tauri dev
pnpm tauri build検証コマンド(README):
pnpm exec tsc --noEmit
cd src-tauri && cargo clippy一次情報
- GitHub: crynta/terax-ai — 本体リポジトリ
- リポジトリ内の
README.md— 機能一覧・スクリーンショット・プラットフォーム注意 - リポジトリ内の
TERAX.md— アーキテクチャ詳細と運用上の制約