diff --git a/docs/0-requirements.md b/docs/0-requirements.md index a405207..7f0bb34 100644 --- a/docs/0-requirements.md +++ b/docs/0-requirements.md @@ -32,13 +32,23 @@ - **複数の channel サーバを同時に有効化できる。** 部屋のサイドカーと `github-webhook-mcp` の双方が同一セッションで機能した。#90 の premise は `--channels` 併記の失敗のみを確定させており、この点は扱っていなかった。 - 上の「単独指定」は `--channels` を併記しないという意味であって、`server:` エントリを一つに限る意味ではない。 +### 枠の消費構造(2026-08-21) + +利用枠を削るのは常駐そのものではなく反応である。PTY に座っているだけのセッションはモデルを呼ばない。 + +``` +消費 ≒ 部屋の発言数 × その発言に反応したエージェント数 +``` + +常駐数が効くのは「反応しうる者が増える」経路を通じてのみ。したがって抑えるべき第一の対象は常駐数ではなく反応の規律であり、その規律を成立させる最小の材料が宛先である。 + 現況は下の「実装状況」節を参照。 ## constraints - **アプリは部屋であってランタイムではない。** Li+ の各層を UI 側のコードとして実装しない。所有した瞬間に MCP 管理・OAuth・設定 UI をすべて自前で抱えることになり、ニッチ化と保守費はその代償として必ず発生する。 - **単一ベンダー構成とする。** 二ベンダーによる独立性確保とサブスク枠の分散は取り下げる。構造を単純化し、他ベンダー側 channel 相当の有無という未検証前提を消すための決定。 - - **代償**: 常駐する全エージェントが同一の利用枠(5 時間枠)を共有する。同時発話数と常駐エージェント数を設計側で抑えること。 + - **代償**: 常駐する全エージェントが同一の利用枠(5 時間枠)を共有する。抑える対象は常駐数ではなく反応の数である(premise の「枠の消費構造」)。第一の機構は発言の宛先であり、宛先を配送の絞り込みには使わない。 - **AI 同士の暴走や対立を意図的に誘発する機構は設けない。** 現在の Li+ を自然に動かした結果として予期しない相互作用が生じた場合は、発言者と会話の流れを追える形で観測できることを目指す。 - **エージェント間の対話を GitHub へ流さない。** `rules/task/task.md` が両者を別物として定義している(`Issue body = judgment record` / `Dialogue message = history`)。加えて書き込み量には実測済みの制約がある。 - **プレビュー結合を受容する。** channel は experimental capability であり、仕様変更がアプリに波及する。早期採用の代償として明示的に受容する。 @@ -89,7 +99,9 @@ push の形(参照実装 `Liplus-Project/github-webhook-mcp` `local-mcp/src/in - method = `notifications/claude/channel` - `params.content` = 発言本文 -- `params.meta` = `chat_id` / `message_id` / `user` / `ts` ほか、発言者と会話を追跡するための属性 +- `params.meta` = `chat_id` / `message_id` / `user` / `to`(任意) / `ts` ほか、発言者と会話を追跡するための属性 + +宛先は `content` ではなく `meta` に載せる。`content` は言われたものと等しく保つ。発言者を本文へ混ぜたときは画面に名前が二度出た(#28)。 返信路は通常の MCP tool であり、channel 固有の機構を必要としない。返信ツールは `say_to_room` 1 本に限定する。増やすと「どちらで喋るか」という判断をエージェント側に持たせることになる。 @@ -103,12 +115,14 @@ push の形(参照実装 `Liplus-Project/github-webhook-mcp` `local-mcp/src/in | 向き | type | フィールド | |---|---|---| -| 部屋 → サイドカー | `say` | `message_id` / `user` / `content` / `ts` | +| 部屋 → サイドカー | `say` | `message_id` / `user` / `content` / `to`(任意) / `ts` | | サイドカー → 部屋 | `hello` | `protocol` / `agent` | | サイドカー → 部屋 | `reply` | `message_id` / `agent` / `content` / `to`(任意) / `ts` | 未知の `type` は拒否せず無視する。部屋側がフレーム種別を増やしても、旧サイドカーが壊れないため。`protocol` はフレームの形が変わり、サイドカー側が気づく必要があるときに上げる。 +`to` は両方向で同じ語彙であり、宛先となる参加者の表示名を入れる。任意であり、無いときは `null` ではなくキーごと省く。`to` の追加で `protocol` は上げていない。サイドカーはアプリが `.mcp.json` へ書く同梱パスから起動するため、部屋とサイドカーの版が食い違う形が構造上無い。 + 人間の発言も、エージェントの返信も、フロントエンドへは同一の `room-message` イベントとして届く。並び順の権威を 1 箇所に保つためであり、送信時にフロント側でローカルに追記しない。 ### サイドカーの起動形 @@ -124,7 +138,12 @@ push の形(参照実装 `Liplus-Project/github-webhook-mcp` `local-mcp/src/in 部屋のルールは MCP サーバが initialize 時に返す `instructions` 文字列により全エージェントへ一元的に配布する。実測では、当該ターンで返信を指示していないにもかかわらずエージェントが返信 tool を呼んだ。駆動源はこの `instructions` である。 -同時発話数の抑制、発言の宛先、沈黙してよい条件などはここで与える。 +判定材料(`meta.to`)と判定規律(`instructions`)は同時に変える。片方だけ動かすと、宛先を知らないまま宛先を判断させる状態になる。 + +- サイドカーは自分の部屋での名前(`LIPLUS_AGENT_NAME`)を `instructions` へ埋め込む。埋めなければエージェントは `meta.to` を自分と照合できない。 +- `meta.to` が自分の名前なら自分宛、他の参加者の名前なら自分宛ではない、無ければ部屋全体宛。全体宛に誰が答えるかはエージェントの判断に委ねる。 +- 宛先による配送の絞り込みはアプリ側で行わない。部屋は全員へ配り、答えるかどうかをエージェントが決める。絞れば部屋が「誰に届いたか」を持つことになり、アプリが会話の中身へ関与し始める。 +- 宛先は任意である。必須にすると人間の入力費用が上がる。 ### MCP サーバの実装方式 @@ -152,6 +171,7 @@ liplus-desktop の `stream_parser.rs` および `spawn_stream_pty` / `spawn_stre - 部屋ソケット(Rust、`127.0.0.1` 任意ポート、Bearer トークン必須) - サーバの `.mcp.json` 登録(既存内容はマージして保持)と、成立条件を満たす CLI 起動フラグの適用 - 部屋の作法(`instructions`)の初版 +- 発言の宛先(部屋 → `say.to` → channel の `meta.to`、返信は `say_to_room` の `to`)と、それを判定材料として名指しする `instructions` - チャットルーム UI(メッセージ一覧、発言者表示、入力欄、参加者表示) - 診断面(部屋ソケットの待受状態、セッションの生死と終了コード、CLI の端末表示と入力) - Windows CI(`npm ci` と Rust コンパイル確認)、Release 公開時の CD @@ -255,7 +275,7 @@ CI が実行するもの: - 会話面はメッセージ単位を保つ。端末は診断面側に置き、会話面には置かない。 - 参加者パネルを持つ。セッションの接続方法・起動コマンド・作業ディレクトリ・開始時刻と、操作(端末 / ミュート / 終了)を出す。裏の値はすべて既にあり、出すだけで済む。 -- 発言に宛先を持たせる。 +- 発言に宛先を持たせる(実装済み。入力欄の左で参加者から選ぶ。既定は全体宛)。 ### 決まっていないこと diff --git a/index.html b/index.html index f9a0777..a7c563c 100644 --- a/index.html +++ b/index.html @@ -59,6 +59,16 @@