Beetroot v1.6.3:コピーオーバーレイ、エクスプローラー画像、GPT-5.4
システム全体の「Copied」オーバーレイがすべてのクリップボードキャプチャを確認。エクスプローラーからコピーされた画像を修正。OpenAI モデルが GPT-5.4 にアップグレード。セキュリティ強化。
このリリースでは、ユーザーから見える変更が 3 つと、内部的な強化が 1 つです。
ひと目で:
- システム全体の「Copied」オーバーレイ:コピーするとフロストグラスのピルがカーソル付近に表示されます
- エクスプローラーの画像キャプチャ:エクスプローラー上の画像ファイルをコピーできるようになりました
- OpenAI GPT-5.4:デフォルトモデルをアップグレード、既存ユーザーは自動移行
- セキュリティ強化:新しい画像ファイルリーダーのパストラバーサル対策
「Copied」オーバーレイ
これは、特にメインウィンドウが非表示のときに、Beetroot がクリップボードをキャプチャしたという確認が欲しいという ユーザーからの機能リクエスト でした。
今は、何かをコピーするたびに、小さなピルがカーソル付近に 1 秒間表示されます。
- コンテンツタイプ (「Text」「Image」など) をあなたの言語で表示
- アクティブなテーマとアクセントカラーに適応
- クリックスルー。フォーカスを奪わず、作業を妨げません
- Settings > General でトグル (デフォルトで有効)
実装: オーバーレイは WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW | WS_EX_TRANSPARENT スタイルを持つ別の Tauri WebView ウィンドウです。連続したコピー時のタイマー競合を避けるために、世代ベースのタイマーガード (AtomicU64) を使います。テーマカラーは CSS カスタムプロパティから読み取られ、適切な serde_json エスケープとともに eval() 経由で注入されます。オーバーレイの HTML は自己完結型 (134 行) で、輝度ベースの適応的なボーダーを持っています。
エクスプローラーの画像キャプチャ
Windows エクスプローラーで PNG や JPG を選択して Ctrl+C を押しても、Beetroot はそれをキャプチャしませんでした。理由: エクスプローラーはビットマップとしてではなく、CF_HDROP (ドラッグアンドドロップ形式) を介してファイルパスをクリップボードに置きます。クリップボードプラグインは画像の前にファイルをチェックしており、files: false でその両方をスキップしてテキストにフォールスルーしていたので、画像の代わりにファイルパスがテキストクリップとして得られていました。
修正は、プラグインの listenToClipboard を、正しい順序でチェックするカスタムハンドラに置き換えるものです。
- まずビットマップ:スクリーンショット (Snipping Tool)、ブラウザ画像、Telegram
- ファイルベースの画像:
CF_HDROPからファイルパスを読み取り、拡張子を検証し、新しい Rust コマンドread_clipboard_image_file経由で読み込みます - テキストフォールバック:それ以外すべて
新しい read_clipboard_image_file IPC コマンドは、拡張子検証 (PNG、JPG、JPEG、GIF、BMP、WEBP、TIFF、ICO、SVG) と 50 MB のサイズ制限とともに、任意の画像ファイルをディスクから読み込みます。
OpenAI GPT-5.4
OpenAI が GPT-5.4 をリリースし、Beetroot のデフォルトモデルが gpt-5.4-nano (高速、安価) と gpt-5.4-mini (より賢い) になりました。GPT-5.4 mini は 2 倍の速度で、コーディングと推論が改善されたと報告されています。
gpt-5-nano または gpt-5-mini を使っている既存ユーザーは、起動時に OPENAI_MODEL_MIGRATION マップ経由で自動移行されます。手動で別の OpenAI モデルを設定している場合、そのままにされます。
セキュリティ強化
新しい read_clipboard_image_file コマンドは任意のパスからファイルを読み込みます (エクスプローラーはどこからでもファイルをコピーできるため)。WebView が侵害された場合のパストラバーサルを防ぐため:
- パスの正規化:
std::fs::canonicalize()がシンボリックリンク、ジャンクション、..コンポーネントを解決 - UNC ブロック:
\\server\shareパスを拒否 - システムディレクトリの拒否:
validation.rs::BLOCKED_DIRSを再利用してC:\Windows、C:\Program Filesなどをブロック - 8 つの Rust ユニットテスト がすべてのセキュリティ境界をカバー
アップデート方法
Beetroot は自動でアップデートを提案します。または GitHub から v1.6.3 をダウンロード してください。