セッション
セッションは複数の参加者が共有するチャットです。エージェント、それを開いた人、そして作業が呼び込む誰かが同じ場所にいます。エージェントが対話的な画面を描くのもここです。だからやり取りは、散文で答える段落ではなく、埋めるフォームにもなります。
誰が共有するか
| セッション | 共有する人 | それ以外の人 |
|---|---|---|
| ワークフローセッション | 実行を始めた人と、その承認の宛先になっている承認者 | テナントの Admin は読み取りだけ見えます。ほかの人はアクセスできません |
| 設計セッション | テナントのすべての Developer、加えて Super Admin とワークフローの作成者 | アクセスできません |
グループ宛の承認は、approver を持つメンバー全員をチャットに呼び込みます。つまりチャットはグループのメンバーシップに追随します。決められるようにすることが、このアクセスの存在理由だからです。複数の人が 1 つの会話に書き込むので、どのメッセージにも送信者のアバターが付きます。どの参加者にも、返答が書かれていく様子が再読み込みなしで見えます。
1 ターンの流れ
バックエンドは AG-UI プロトコルとエージェントを橋渡しします。イベントを双方向に変換し、会話を同期させ、届いたそばからブラウザへ流します。だからテキストは最後にまとめてではなく、少しずつ現れます。会話の状態はチャットの ID のもとに保たれるので、開き直せば続きから再開します。
ワークフローセッションは、誰かがチャットを開いていなくても進みます。ターンはすべて A2Flow 自身が動かすからです。実行が作られた直後のキックオフ、承認が判断されたあとに実行を再開するターン、タスクが待っていた時刻になったときに再開するターン、参加者が送ったメッセージに応えるターンのどれも同じです。チャットはメッセージを A2Flow に渡し、ターンが進む様子を見ている全員に表示するだけです。ターンがどのサーバーで動いていても変わりません(設計セッションは例外で、ターンはこれまでどおり、メッセージを送った Developer のチャットから動きます)。
対話的なサーフェス
render_a2ui ツールを添えるのはフロントエンドです(A2Flow 自身が動かすターンでは、バックエンドがまったく同じ定義を添えます)。エージェントが描いてよい A2UI コンポーネントカタログのスキーマも一緒に添えられます。モデルがこれを呼んでも、バックエンドは何も実行しません。呼び出しをそのまま転送し、描くのはブラウザです。
| コンポーネント | 使いどころ |
|---|---|
Text、Card、Row、Column | 構造と文言 |
TextField | 自由入力 |
| 選択ピッカー | 許される値からの選択。選択肢が 5 つ以上ある単一選択のピッカーはドロップダウンに畳まれるので、エージェントは EC2 のインスタンスタイプやリージョンをすべて列挙しても会話を埋もれさせません |
Button | サーフェスの送信 |
ボタンを押すと、そのサーフェスのデータモデル全体が送り返されます。押されたボタンだけでなく、入力・選択された値がすべてです。だからエージェントはユーザーが実際に入れた内容に応答できますし、再読み込みしたチャットでは、回答済みのサーフェスがエージェントの既定値ではなくユーザー自身の値で埋まった状態で再表示されます。
呼び出しの途中でサーバーが尋ねること
エージェントが描くのではないサーフェスが 1 つあります。MCP サーバーはツール呼び出しの途中で止まり、人に何かを尋ねることがあります(elicitation)。待っている間も呼び出しは開いたままです。こうしてよいのは、ワークフローの設計で「質問する」と印を付けたツールだけです。そのツールを使うタスクは、実行の申請者がチャットにいるときにしか始まりません。セッションは Waiting for initiator で止まり、申請者に通知が届き、申請者が Resume を押して始まったターンでタスクが始まります。そのうえで A2Flow は質問を記録し、実行中のターンのストリームに専用のアクティビティとして追加するので、見ている全員にすぐ表示されます。セッションはまだターンの途中なので、答えはチャット入力ではなく専用の経路で送られます。答えを受け取るのは新しいターンではなく、待っているツール呼び出しです。画面での見え方はMCP サーバーからの確認を参照してください。
チャットに出るエージェントの動き
返信と返信のあいだにエージェントが何をしているのかが見えるよう、途中の作業もチャットの流れの中に出します。
- 作業中の表示 — 実行中でまだ画面に何も出ていないあいだ、メッセージ一覧の下に控えめな明滅が出ます。
- ツール呼び出しの行 — バックエンドのツール呼び出し(
list_workflow_tasks、update_workflow_taskなど)はすべて、スピナー(running…)からチェック(done)へ変わるコンパクトなステータス行になります。MCP ゲートウェイを通した呼び出しは、本来の MCP ツール名でMCPタグとともに出ます。render_a2uiとrender_approvalのクライアントツール、セッションのファイルを書くツール、そして返答の候補を出すツールは専用の UI を持つので、ツールの行としては出ません。 - 呼び出しの詳細 — 引数や結果を持つツールの行はクリックで展開し、両方を整形した JSON で表示します。エージェントが実際に何を送って何を受け取ったのかを、チャットを離れずに確認できます。ツールモックが答えた行には
Mockedのバッジが付きます。差し替えられた呼び出しはプロキシに届かず監査の記録を残さないので、確認できる場所はチャットだけです。 - 推論 — 思考を出せるモデルが推論を流すと、その思考が「Thinking」の控えめなパネルとして描画されます。内部で推論するだけで思考の要約を出さないモデルでは、このパネルは出ません。
セッションを再開したときに履歴から復元されるのは、MCP のツール呼び出し、ファイルのカード、そして最後のターンの返答の候補です。そのほかの A2Flow 内部のツール呼び出しと推論はその場限りです。ファイルのカードを復元するのは、ファイルがそれを作った実行より長く残り、ダウンロードのリンクが出る場所がチャットしかないからです。候補を復元するのは、それが答える質問がまだ開いたままだからです。
セッションのファイル
ワークフローセッションはメッセージだけでなくファイルも持ちます。参加者がチャット入力欄から添付したものと、エージェントが作業中に書いたものです。設計セッションにファイルはありません。
決まりは 3 つです。
- 範囲 — ファイルはちょうど 1 つの実行に属します。どの経路からもファイルは実行の指定と対で扱われるので、あるセッションのファイルに別のセッションから届くことはありません。
- 寿命 — ファイルは実行と同じだけ残り、実行と一緒に消えます。独立した掃除の仕組みも有効期限もありません。
- アクセス — 専用の権限はありません。添付には実行を進められる資格が、ダウンロードにはチャットを読める資格が要ります。チャットそのものと同じ 2 つの規則です。
エージェントは読むことと足すことだけができ、置き換えも削除もできません。すでにある名前で書いた場合は番号付きの別名で保存されます。参加者が添付したファイルは、そのあと実行が何をしようと、添付されたときのまま残ります。
エージェントがどのファイルの存在を知るかは、ブラウザから伝わるのではありません。サーバーがセッションのファイル一覧を読み、ワークフローのプロンプトと同じ場所・同じ理由で、実行のコンテキストに差し込みます。クライアントから渡された一覧は、クライアントから渡された指示にほかならないからです。
ファイルはデータベースに保存されるので、その永続性とバックアップをそのまま引き継ぎ、レプリカ間で共有するボリュームも要りません。ダウンロードは常に汎用のコンテンツタイプの添付ファイルとして返されるので、参加者やエージェントが置いた中身がブラウザで描画されることはありません。