セッション開始プロファイラー
概要
本変更では、GeminiClient.startChat() 向けの内部オプトインプロファイラーを追加します。これにより、#6312 のフォローアップ作業で最適化を選択する前に、セッションごとの初期化における残りのホットスポットを特定できます。
セッションの動作、パブリックプロトコルフィールド、SDKの動作、CLIフラグ、設定スキーマ、テレメトリスキーマ、またはスタートアッププロファイラーのセマンティクスは変更されません。
計測形式
プロファイラーは QWEN_CODE_PROFILE_SESSION_START=1 の場合にのみ有効になります。
有効化すると、core は Storage.getRuntimeBaseDir()/session-start-perf/ 配下に JSONL レコードを書き込みます。日次の JSONL ファイル名には、レコードのタイムスタンプからの UTC 日付が使用されます。各レコードには、タイムスタンプ、SessionStartSource、成功フラグ、合計所要時間、境界付きステージの所要時間、および履歴の長さやレンダリングされたスナップショット数などの小さな集計カウントが含まれます。
計測対象のステージは、既存の startChat() シーケンスに従います。具体的には、ツールレジストリのウォームアップ、再開された遅延ツール公開スキャン、遅延リマインダーの設定、初期チャット履歴の構築、スキルリマインダーの重複排除シーディング、エージェントリマインダーの重複排除シーディング、システム指示の構築、GeminiChat の構築、孤立したツール使用の修復、SessionStart フック、オプションの SessionStart コンテキストの適用、および setTools() です。
安全上の境界
出力には意図的に、セッション ID、プロンプト、モデルの応答、フックの出力、ツール名、ファイルパス、および作業ディレクトリが含まれません。ステージ名は静的なコード所有の文字列です。
プロファイラーによる書き込みはすべてベストエフォートで行われます。ファイルシステムのエラーは握りつぶされるため、プロファイリングによってエラー処理がセッションを中断させたり、遅くしたりすることはありません。
JSONL ライターは、プロファイルファイルに対して制限付きのパーミッションと O_NOFOLLOW を使用します。Node はここでポータブルな fd 相対の追記パスを公開していないため、親ディレクトリの置換は引き続きベストエフォートとなります。ランタイムディレクトリは、ローカルの同一ユーザー攻撃者に対する境界ではなく、同一ユーザーの診断ストレージとして扱われます。
無効化されている場合、ヘルパーはファイルの書き込みを行わず、高解像度クロックの読み取りもしません。
failedStage は、プロファイラーラッパーを介してスローされたステージのみを記録します。エージェントリマインダーの重複排除シーディングや SessionStart フックなど、基礎となるヘルパーが独自のエラーをキャッチして抑制するステージは、プロファイラーの観点からは成功したままとなります。
対象外の目標
本変更は GeminiClient.initialize() や startChat() を最適化するものではありません。
Part B の拡張機能キャッシュ、Part C のスキル本体の遅延読み込み、コマンドスナップショットキャッシュ、またはデーモンプロトコルの変更は実装しません。
次の最適化は、このプロファイラーからステージの内訳を収集し、必要に応じて拡張機能中心またはスキル中心のフィクスチャと比較した後にのみ選択すべきです。