GitHub Repo
Hermes Agent、端末へのドラッグ&ドロップ時のパス処理を修正 コミュニティが4種類のシェルで実機テスト
Hermes Agentのコミュニティは10月28日、端末へのファイルのドラッグ&ドロップに関する修正を実機で検証し、4種類のシェルすべてでテスト用パスが完全な形で受け渡されることを確認した。修正はすでにメインブランチへマージされ、正しく処理できないパスは入力を拒否して警告を表示する方式に変更された。

Hermes Agentの端末へのドラッグ&ドロップに関する修正について、新たな実機検証が行われた。10月28日、貢献者はブラウザー版Webappで、zsh、fish、tcsh、PowerShellのそれぞれでテストした27件のファイルパスが、元の内容のままプログラム引数に渡され、テスト用のコマンドインジェクションは発生しなかったと報告した。修正PR #144719は26日にメインブランチへマージされ、メンテナーは27日に関連作業の完了を確認した。実機テストとメンテナーの確認
問題は、ファイルパスを端末入力に変換する方法にあった。従来のプログラムは、認識できないシェルに対してPOSIXのシングルクォート規則を適用していた。しかし、nu、xonsh、elvishにはそれぞれ独自の構文があり、特殊なファイル名によって想定した引用の境界を破られる可能性があった。PRの議論には、nuとelvishでの再現手順が記録されている。ユーザーが細工したファイル名をドラッグし、Enterキーを押すと、追加のコマンドが実行される可能性があった。Windowsのcmdには別の問題もあり、遅延環境変数展開が有効な場合、二重引用符で囲まれていても感嘆符によってパスが変化する可能性があった。修正と再現手順の記録
新しい実装では、シェルの実行ファイル名に基づいて規則を選び、ディレクトリ名に「cmd」が含まれているだけで誤判定する事態を防ぐ。サポート対象に含まれないシェルでは、制約を満たす単純なパスだけを入力する。空白や引用符などを含む複雑なパスはスキップし、ユーザーに通知する。cmdでは感嘆符を含むパスも拒否する。引用処理の関数は共通化されているため、ネイティブDesktopのカスタムシェルやSSHタブにもこの変更が適用される。実装の説明
この種の違いは、すべてのパスを一律に引用符で囲むだけでは解決できない。たとえばfishの公式ドキュメントでは、シングルクォート内では変数が展開されないと定められている一方、特定のバックスラッシュによるエスケープ規則は適用される。ダブルクォート内では、変数や一部のコマンド置換が引き続き許可される。端末インターフェースを提供するエージェントツールでは、パスがシェルに渡る前の処理を、独立した入力境界として検証する価値がある。fishの引用規則
現時点で確認できる証拠には範囲の制限がある。28日のテストはmacOS上で実施されており、cmd、Windows PowerShell、SSHタブは対象外だった。また、この記事で独自に再テストしたものでもない。導入する側は、使用中のバージョンにマージ済みコミット72e47c1が含まれているかを確認し、実際に使うシェルで新たなパス拒否の通知が表示されるかも確かめる必要がある。メインブランチへのマージだけでは、すべての配布パッケージが更新されたことにはならない。テストの制約