Chimera 0.74.1: サービス停止が本当に停止するように、依存関係も強化
停止中のサービスが終了前に追跡対象から消える競合状態を修正し、既知の脆弱性を持つ2つの間接依存関係を更新。
私たち自身のリリースについて、私たち自身が書いた文章です。 GitHub でリリースを読む →
chimera service stop コマンドには、結果を偽ってしまう競合状態がありました。バックグラウンドサービスに停止を指示すると、リクエストは受け付けられたものの、まだ実行中にもかかわらずサービス一覧から消えてしまっていました。もしスタックしたシャットダウンを強制終了するために chimera service stop --now を実行しても、プロセスが生きてリソースを消費し続けているにもかかわらず、CLIは「実行中ではありません」と応答していました。バージョン0.74.1はこのギャップを取り除きます。
停止中のサービスが見えなくなる理由
Chimeraのバックグラウンドサービスは、長時間実行されるエージェントループを動かします。停止シグナルを受け取ると、実行中のターンを完了し、状態をフラッシュし、接続を解体する必要があります。古いコードは、停止リクエストを受け付けた瞬間にトラッカーからサービスレコードを削除していました。それは帳簿上の近道でした。サービス自身は「停止中」であっても、システムの他の部分からはもはや存在しないものになっていたのです。
直接的な問題は --now にありました。強制停止は、一致するサービスIDをトラッカーに確認しに行きます。レコードがなければ、コマンドは停止対象なしと報告して終了します。実際のプロセスは、ロックやソケット、GPUメモリを保持したまま、自身のクリーンアップを終えるか外部から強制終了されるまで動き続けます。スタックしたエージェントをデバッグするオペレーターにとって、これはプロセステーブルが問題を示しているのに、ツールはすべて正常と言っている状態を意味しました。
この修正がサービスライフサイクルにもたらす変更
サービスは、停止リクエストを受け付けた瞬間から終了するまで、stopping ステータスでトラッカー上に見え続けるようになりました。トラッカーがレコードを保持するため、後続の stop や status 呼び出しはそれを認識します。サービスはグレースフルシャットダウン(現在のターンの完了、必要なものの永続化、ループの終了)を実行し、その後自身を削除します。プロセスが終了して初めて、レコードは消えます。
--now フラグは依然として存在しますが、その挙動はより厳密になりました。追跡されているプロセスが、ファイル上のサービスIDと一致することを確認した後にのみ、強制終了シグナルを送信します。最後の確認と --now 呼び出しの間にサービスが正常終了していた場合、コマンドはリサイクルされたPIDにシグナルを送る代わりに、その旨を報告します。これにより、同じ識別子を偶然再利用した無関係なプロセスを誤って強制終了することを防ぎます。
1台のマシンで複数のChimeraサービスを実行している場合、これは一種のハイゼンバグを除去します。再起動スクリプトが古いインスタンスのシャットダウンを待てずに新しいインスタンスを起動してしまうのは、スクリプトが待つべき古いインスタンスを認識できなかったからです。
このリリースに同梱される依存関係パッチ
セキュリティアドバイザリに対応するため、2つの間接依存関係が更新されます。どちらもChimeraエージェントのコードから直接呼び出されるものではありませんが、一般的なワークフローのサプライチェーン上に存在します。
GitPythonは3.2.1に移行します。3.2.0までのバージョンは、サブモジュールの .git パスをクローン後にのみチェックしていたため、細工されたリポジトリがクローン操作中にパストラバーサルを引き起こす可能性がありました。これは、例えばプルリクエストをチェックアウトするコードレビューエージェントのように、エージェントがツール呼び出しループの一環としてリポジトリをクローンする場合に重要です。アドバイザリは深刻度を「高」と評価しています。
OpenTelemetryは1.45.1に移行します。以前の上限である1.45.0は、エントリ数に制限を設けずに tracestate ヘッダーを解析していました。下流のサービスが、境界のない tracestate をインストルメント化されたエージェントに反射した場合、過剰なメモリ使用を引き起こす可能性があります。Chimera自身のトレーシング面は影響を受けませんが、HTTP経由でOpenTelemetryコレクターにスパンをエクスポートするエージェントはSDKを通じて影響を受けます。アドバイザリは深刻度を「中」と評価しています。
どちらのパッチも、依存関係ツリーにおける最小バージョンの引き上げです。API面への変更はありません。ロックファイルで依存関係を固定している場合は、Chimeraを更新した後にリゾルバを再実行することで新しいバージョンが取得されます。
アップグレード
リリースを直接インストールします:
pip install chimera-agent==0.74.1
実行中のサービスを管理するためにChimera CLIを使用している場合は、修正されたライフサイクル追跡を適用するために、長時間実行されているエージェントを再起動してください。全変更履歴を含むリリースノートは Chimera Agent v0.74.1 にあります。
https://chimeraagent.space