Agent Orchestrator 0.12.0
0.11.2 から 80 コミット。デスクトップアプリが 8 つの言語に対応し、新しいカラーパレットを採用し、セッションのピン留めとセッションごとのレビュアー選択ができるようになりました。モバイルアプリにはテーマと長押しでの音声入力が加わりました。セッションが起動したコンテナは、そのセッションの終了時にクリーンアップされます。
v0.11.2 以降のすべての変更を対象としています。
macOS ユーザーは、直接 0.12.1 以降に更新してください。 このビルドにはファイルディスクリプタのリークがあり、数時間使用すると Files ビューとタスクの作成が動作しなくなります。
0.11.0 は、土台がしっかり重さを支えられるようにするためのリリースでした。0.12.0 はその上に築いたものです。アプリが 8 つの言語に対応し、サイドバーと設定が期待どおりに動作するようになり、ボード上のすべてのセッションが消えてしまう可能性のあった種類の障害も解消されました。
このリリースでは、既存のワークフローを壊すことなく、新しいプロダクト機能と信頼性の改善を加えています。
ハイライト
アプリが 8 つの言語に対応
デスクトップアプリに i18next をベースとした本格的なローカライズ層が導入されました。言語は Settings > General で選択でき、~/.ao/ui-settings.json に保存されます。最初に対応したのは簡体字中国語で、シェルの UI、サイドバー、ボード、設定、ダイアログ、インスペクターのタブ、コマンドパレット、ターミナルの文言を網羅しています。続いて日本語、韓国語、スペイン語、フランス語、ドイツ語、ブラジルポルトガル語に対応し、それぞれの README も用意しました。英語は引き続きデフォルトかつフォールバックの言語で、未翻訳の文字列はキーではなく英語で表示されます。(#3465、#3541)
モバイル:テーマ、ネイティブのシート、長押しでの音声入力
モバイルアプリはダークテーマ専用ではなくなりました。ライトとダークのパレットに加え、起動時に読み取った設定に固定されず OS の設定に追従し続ける「system」設定を用意しました。アプリシェルはネイティブのシートで作り直され、セッションボードは完了状態ではなくランタイムの終了状態で分割されるようになりました。
プッシュトゥトークによる音声入力 にも対応しました。入力欄でマイクキーを長押しして話し、指を離すと挿入されます。上にスワイプすればハンズフリーで固定できます。音声認識はデバイス上で実行されるため(iOS は SFSpeechRecognizer、Android は SpeechRecognizer)、API キーも分単位の料金も不要です。エージェントへのプロンプトによく出てくる語彙に寄せて認識するため、「get」や「MPM」ではなく「git」や「npm」と認識されます。音声認識はコードを聞き間違えることが多く、確認なしの送信は安全ではないため、書き起こしは送信されずに編集可能な下書きとして入力欄に入ります。長押しを繰り返すと追記されるため、何回かに分けて 1 つのプロンプトを組み立てられます。
さらに、デスクトップ版に合わせた Liquid Glass のアプリアイコンを採用し、デフォルトの LAN ポートの問題も修正しました。このポートは 3011 のモバイルブリッジではなくループバック専用のデーモンポートを指していたため、新規インストールでは手動で編集しないと接続できませんでした。(#3399、#3400、#3304、#3494)
新しいカラーの基盤
レンダラーは oklch のデザイントークンパレットに移行し、UI フォントに Geist を採用し、shadcn のカラーエイリアスをこのパレットに対応付けました。これにより、コンポーネントライブラリ全体のハードコードされた値を置き換えています。セッションの状態は、表示されるすべての場所で一貫したパレットになりました。作業中は青、対応が必要なものはオレンジ、レビュー中は黄色、準備完了は緑です。(#3421)
よく使うセッションをピン留め
セッションをサイドバー上部の Pinned セクションにピン留めできます。ピン留めはサーバー側に保存されるため、再起動後も保持されます。サイドバー自体も折りたためるようになり、Pinned と Projects をそれぞれ折りたためるほか、プロジェクトのフォルダーアイコンをクリックすると、そのプロジェクトに切り替えることなく展開・折りたたみできます。(#3511、#3310)
セッションごとにレビュアーを選択
これまでレビュアーエージェントはプロジェクト全体で 1 つの設定でした。今後は個々のセッションごとに選択でき、そのレビューを実行してもプロジェクト内の他のセッションの設定は変わりません。Reviews タブには、PR の現在と前回の実行だけでなく、そのセッションで記録されたすべてのレビュー結果が一覧表示されるため、2 つの異なるレビュアーの意見を比較できます。デーモンが新しいレビューを実行せずに既存の結果を再利用した場合、却下されたレビューが成功として報告されることもなくなりました。(#3477)
設定がモーダルで開く
設定とプロジェクト設定は、ボードから別の画面に移動するのではなく、ボードの上に開くようになりました。サイドバーには General、Updates、Developer、Help が並びます。Escape キーを押すか外側をクリックすると閉じ、元の場所に戻ります。(#3497)
対応しやすい通知
セッションが対応を必要としていてウィンドウにフォーカスがない場合、macOS では Dock のアイコンが跳ね、Windows ではタスクバーが戻るまで点滅します。未読通知のバッジ数は macOS、Windows、Linux で同期されます。
パネル内では、タイトルのテキストだけでなく行全体がクリックできるようになり、手動の Unread/All タブと既読にする操作はなくなりました。通知は 2 つの独立した状態を追跡するようになりました。1 つは確認したかどうか(パネルを開くとクリアされます)、もう 1 つは元の問題がまだ未解決かどうか(ライフサイクルによってのみ書き込まれます)です。既読の通知も、報告された問題が未解決の間は一覧に残り、セッションが入力待ちの状態を抜けたとき、終了したとき、または PR がマージ・クローズされたときに自動で閉じます。デーモンの停止中に発生した状態遷移は、起動時に再確認されます。(#2534、#3296、#3495、#3558)
コマンドパレットのアクションとメニューバーのトレイ
Cmd/Ctrl+K でナビゲーションだけでなくセッションの操作もできるようになりました。New Task の背後にあるタスク作成画面を切り出したことで、コマンドパレットからも同じ UI で作業を開始できます。macOS では、対応待ちのセッションを示すトレイアイコンがメニューバーに表示されます。(#3531)
セッションが起動したコンテナをクリーンアップ
セッションが起動した Docker コンテナは、そのセッションが終了状態になると削除されます。明示的に kill した場合だけでなく、クラッシュした場合や SIGKILL された場合も対象です。回収させたいコンテナには ao.session=$AO_SESSION_ID ラベルを、セッションより長く存続させるべき共有インフラには ao.spare=true ラベルを付けてください。Docker の呼び出しにはタイムアウトが設定されており、読み込みに失敗したプロジェクトでは回収せず安全側に倒します。(#3153)
ファイルと差分
Files パネルでは、切り替え式の検索ボタンとファイル数のラベルを常に表示される検索入力欄に置き換え、更新ボタンを削除し(一覧はすでにポーリングしています)、一覧をアコーディオン形式に作り直してタブにリアルタイムのファイル数を表示するようにしました。差分ビューアーはワークスペースの変更を発生と同時にストリーミングし、わかりやすいレイアウト切り替えとファイルごとのインラインフィードバックを備え、最大化表示でも正しく展開されます。ワークスペースの差分はベースを考慮するようになったため、子セッションは固定のベースではなく実際の分岐元のブランチと比較されます。(#3466、#3503、#3492、#3369、#3214)
信頼性
1 回の障害でボードが空になることはなくなりました。 これが最大の修正です(#3475)。3 つの別々のバグによって、すべてのセッションが一度にアーカイブされる可能性がありました。1 つ目は、プレビューの破棄処理が、PID が自分の起動したプロセスのものかを再確認せずにプロセスグループごと kill していたことです。再利用された PID によって無関係なプロセス群が終了させられ、tmux サーバーは自身がグループリーダーであるため、1 回の古いグループ kill ですべてのセッションが破壊されました。2 つ目は、tmux の「no server running」というプローブ結果を、個々のセッションについては何も示していないにもかかわらずセッションごとの終了と解釈していたことで、サーバーの一時的な不調でボードがアーカイブされていました。3 つ目は、失敗したマイグレーションが 500 エラーを返し、ボードがそれをセッションが存在しないものとして扱っていたことです。生存確認のプローブは「終了」ではなく「判定不能」を報告するようになり、回収処理はボードの大半が同時に終了と判定された場合にはその結果を確定しないようになりました。マイグレーションの台帳も、すでに失敗した履歴に対して自動で修復されます。(#3491、#3598)
オーケストレーター。 同じプロジェクトにアクティブなオーケストレーターが重複して作成されることはなくなりました。ao session ls は非表示のオーケストレーターセッションを表示し、非表示の終了済みセッションも黙って除外せずに件数を表示します。オーケストレーターへの自動の再始動メッセージは、有用さよりもノイズが大きいことがわかったため元に戻しました。(#3397、#3393、#3394)
エージェント。 Droid は、一時ディレクトリではなくデータディレクトリに書き込まれる設定ファイルを通じて、ロールごとのモデル設定を渡すようになりました。Grok のプロンプトは、まだ入力を受け付けていないターミナルにではなく、TUI の起動完了後に送信されるようになり、ターミナルはホイールでスクロールできます。内部のフェイクテストハーネスがエージェントの選択画面に表示されなくなりました。(#3156、#3534、#3533、#3518)
ブラウザ。 プロンプトの送信中はアノテーションの選択がロックされ、送信途中にクリックで対象が変わることはなくなりました。非表示のネイティブビューがアプリの上に描画されることもなくなり、macOS の最大化したブラウザで URL を編集できるようになり、要素選択のバッジがアノテーションダイアログから外され、セッションを切り替えて戻ってきても、すでに離れたプレビュー URL が再設定されることはなくなりました。(#3232、#3295、#3488、#3464、#3538、#3370)
デスクトップ。 自動アップデーターは、リリースマニフェストが見つからない 404 の場合に、持っていない認証トークンを確認するよう求めるダイアログを出すのではなく、ログに記録するようになりました。サイドバーとインスペクターをドラッグしても、閉じてしまわずに最小幅で止まります。デーモンは閉じた出力に対する SIGPIPE を無視します。インスペクターの PR セクションと Completion セクションは、中身がない場合は非表示のままになり、重複した PR サマリーはまとめられます。あわせて、UI の細部も修正しました。タイトルバーのナビゲーションを macOS のウィンドウボタンに揃え、ターミナルのタブバーを改良し、設定とアーカイブの区切り線、ターミナルのトップバーの余白を調整し、アプリの UI とマーケティングページでテキスト選択を無効にしました。(#3012、#3478、#3193、#3325、#3250、#3505、#3480、#3507、#3556、#3508、#3520)
内部の改善
テレメトリに実行時のキルスイッチが加わりました。AO_TELEMETRY_DISABLED_EVENTS で、リリースを出さずに指定したストリームを停止できます(* による前方一致に対応)。停止したストリームもローカルの SQLite には記録されるため、デバッグは引き続き可能です。デーモンのイベントにはバージョンが付与され、アップデートのイベントが記録されるようになり、PostHog の制御を強化し、テストで autocapture がオフであることを検証しています。CI は .deb に加えて Linux の .rpm も出力するようになりました。
サイトでは、ドキュメントを Markdown 版としても公開し、llms.txt で全体の階層を公開しました。エージェントの比較ページを追加し、ヒーローのボード、委任のデモ、モバイルのモックアップを実際のデスクトップアプリの見た目に合わせて作り直し、iOS ベータ版の CTA を公開しました。重複していた Organization の構造化データを削除し、許可されたクローラーにコンテンツシグナルを適用するようにしました。(#3401、#3388、#3406、#3395、#3363、#3438、#3344、#3430、#3496、#3428、#3429、#3500、#3521、#3522、#3144、#3367、#3365、#3389)
アップグレード
サポートされるインストール方法は GitHub Releases と Homebrew です。既存のインストールはその場でアップデートされます。以前のアップデートでマイグレーションの台帳が壊れた状態になっていた場合、0.12.0 は起動を失敗させるのではなく、起動時に台帳を修復します。
完全な変更履歴: https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0