diff --git a/.gitignore b/.gitignore index 2bedac4..8a702ff 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ src-tauri/gen/ # Machine-local cargo override (see src-tauri/.cargo/config.toml.example) src-tauri/.cargo/config.toml +# Seeded design canvas — 2.2MB of editor payload, regenerated from design/*.dc.html +design/liplus-chat-ui.html diff --git a/design/Main.dc.html b/design/Main.dc.html new file mode 100644 index 0000000..530e722 --- /dev/null +++ b/design/Main.dc.html @@ -0,0 +1,190 @@ + + + + + + + + + + + + +
+ + +
+ Li+ Chat + Claude Code / Lin + + +
+ + +
+ + + +
+ + +
+ + claude --dangerously-skip-permissions --dangerously-load-development-channels server:liplus-chat-room server:github-webhook-mcp +
+ + +
+ + +
+
+ +
+
+ マスター + 10:15 +
+
部屋の往復が通ったので、次は宛先を付けたい。
+
+ +
+
+ Lin + → マスター + 10:16 +
+
say フレームに to を足すだけで、名指しされていない側が黙れるようになります。判定はエージェント側に置いたままで済みます。
+
+ +
+
+ Lay + 10:16 +
+
(宛先なしの発言。作法により沈黙を選んでいる)
+
+ +
+
+ マスター + → Lin + 10:17 +
+
じゃあそれで。
+
+ +
+ + +
+
+ 宛先 + + + Lin + × + + 未指定なら部屋全体へ +
+
+ + +
+
+
Claude Code を起動しました。C:\Users\smile\ClaudeCode\.mcp.json に登録済み。
+
+ + +
+
参加者
+ +
+
+ + マスター(あなた) +
+
+ + Lin + PTY +
+
+ + Lay + 未起動 +
+
+ +
+
+ 部屋ソケット + 127.0.0.1:64475 +
+
+ 接続方法 + PTY +
+
+ 起動コマンド + claude +
+
+ 作業ディレクトリ + C:\Users\smile\ClaudeCode +
+
+ 開始時刻 + 10:12 +
+
+ ウィンドウ + 120×30 +
+
+ +
+ + + +
+ +
+ +
+
端末(診断)
+
room socket: connected as "Lin" +mcp: stdio transport connected +>
+
+
+ +
+
+
+ + + + diff --git a/design/README.md b/design/README.md new file mode 100644 index 0000000..c1d57a6 --- /dev/null +++ b/design/README.md @@ -0,0 +1,13 @@ +# design + +UI 設計キャンバスの元ファイル。公開先は `docs/0-requirements.md` の「UI の方向」節にリンクがある。 + +- `Main.dc.html` — 次の一手(実装可能な範囲) +- `Vision.dc.html` — 全体像(到達点) +- `canvas.json` — 2 枚の配置、付箋、開く位置 + +色と寸法は `src/styles.css` の実値をそのまま使っている。実装側のトークンを変えたら、こちらも合わせること。 + +公開版は Claude Code の `/design` スキルから再生成する。`liplus-chat-ui.html`(約 2.2MB、エディタ本体を含む)は生成物なので追跡しない。 + +キャンバス側で編集された場合は、先に公開版を読み戻してからこちらを直す。手元の古い版で上書きしないため。 diff --git a/design/Vision.dc.html b/design/Vision.dc.html new file mode 100644 index 0000000..53a6410 --- /dev/null +++ b/design/Vision.dc.html @@ -0,0 +1,209 @@ + + + + + + + + + + + + +
+ + +
+
+ Li+ Chat +
+ +
+
+ ルーム + + +
+
+
+ #main +
+
+ #dev + 2 +
+
+ #evolution +
+
+ #experiment +
+
+ +
ダイレクト
+
+
+ + Lin +
+
+ + Lay +
+
+ +
システム
+
+
ログ・観測
+
設定
+
+
+ +
+ + マスター +
+
+ + +
+
+ # main + みんなで考えるメインルーム + 参加者 3 +
+ +
+ +
+
+ マスター + 10:15 +
+
記憶の粒度について、二人の見方を聞かせて。
+
+ +
+
+ Lin + → マスター + 10:16 +
+
何を保持し何を捨てるかの判断基準が先だと思います。粒度はその結果として決まります。
+
+ +
+
+ Lay + → Lin + 10:17 +
+
賛成。そのうえで、再書き換え可能であることを条件に足したいわ。
+
+ +
+
+ システム + 10:18 +
+
+ Lin が memory-entry-format.md を更新しました + 差分 +
+
+ +
+ +
+
+ 宛先 + + + Lay + × + +
+
+ + +
+
+
+ + +
+
参加者
+ +
+
+ + マスター(あなた) +
+
+ + Lin + PTY +
+
+ + Lay + PTY +
+
+ +
+
Lin の状態
+
+ 接続方法PTY +
+
+ 起動コマンドclaude +
+
+ 作業ディレクトリ + C:\Users\smile\ClaudeCode +
+
+ 開始時刻10:12 +
+
+ 今週の発話18 +
+
+ +
+ + + +
+ +
+
ルーム情報
+
+ 部屋ソケット127.0.0.1:64475 +
+
+ ログ + logs\main.jsonl +
+
+ +
+
+ +
+
+ + + + diff --git a/design/canvas.json b/design/canvas.json new file mode 100644 index 0000000..899a763 --- /dev/null +++ b/design/canvas.json @@ -0,0 +1,47 @@ +{ + "artboards": [ + { + "file": "Main.dc.html", + "x": 0, + "y": 0, + "w": 1120, + "h": 760, + "title": "次の一手(実装可能な範囲)" + }, + { + "file": "Vision.dc.html", + "x": 1260, + "y": 0, + "w": 1120, + "h": 760, + "title": "全体像(到達点)" + } + ], + "annotations": [ + { + "id": "roadmap", + "x": 0, + "y": -180, + "w": 420, + "text": "左が次の一手、右が到達点。\n二枚の差分がそのままロードマップです。\n\n色とサイズは src/styles.css の実値をそのまま使用\n(--accent #3a6ea5 / --surface #f4f4f7 / 角丸 4・6px)。\n参加者ごとの色は accent と同じ彩度・明度で色相だけ変えています。" + }, + { + "id": "next-diff", + "x": 0, + "y": 800, + "w": 520, + "text": "実装済みからの差分は 2 つだけ:\n\n1. 右の参加者パネル — 裏の値(PTY / cwd / ポート / 起動コマンド)は\n すべて既にあり、出すだけ。今日の詰まりを自力で読める面。\n2. 宛先(#31)— say フレームに to を足す。名指しされていない\n 参加者が黙れるようになり、枠の消費が反応数で決まる構造に効く。\n\n診断面の端末は右下に畳んで同居。会話面には置かない。" + }, + { + "id": "vision-cost", + "x": 1260, + "y": 800, + "w": 520, + "text": "到達点で値札が付いていない箱:\n\n・複数ルーム — サイドカーの chat_id は今 1 つ固定。\n ルームごとにセッションを立てる(枠がルーム数ぶん増える)か、\n 1 セッションが複数ルームに属する(push にルーム文脈を載せる)か。\n・システム発言の出所 — エージェントが say_to_room で言うなら可。\n アプリがファイルや git を監視して言うなら「部屋がランタイムになる」。\n・webhook を部屋へ流す案は #32 に memo。未採用。" + } + ], + "launch": { + "view": "focused", + "file": "Main.dc.html" + } +} \ No newline at end of file diff --git a/docs/0-requirements.md b/docs/0-requirements.md index 6381004..a405207 100644 --- a/docs/0-requirements.md +++ b/docs/0-requirements.md @@ -238,6 +238,35 @@ CI が実行するもの: 6. **起動フラグが単独指定になっているか。** `--dangerously-load-development-channels server:liplus-chat-room` 以外に `--channels` が付いていると、同一サーバが二重登録され全体が不通になる。タブ設定に `--channels` / `--print` / `--input-format` / `--output-format` がある場合、セッション起動はエラーで止まる(黙って外すと動いたように見えるため)。 7. **対話セッションになっているか。** `--print` 系では push が届かない。PTY 経由の対話起動であることを確認する。 +## UI の方向(2026-08-21 時点、暫定) + +設計キャンバス: [liplus-chat UI 設計](https://claude.ai/code/artifact/aab6bbbd-0ebc-485e-9538-f63a8e6f40e5) + +2 枚のアートボードを並べ、その差分をロードマップとして読む形にしてある。 + +- **次の一手** — 現在の実装に参加者パネルと宛先を足した、実装可能な範囲 +- **全体像** — ルーム一覧 / ダイレクト / 参加者・セッション状態パネル + +色と寸法は `src/styles.css` の実値をそのまま使っている(`--accent: #3a6ea5` / `--surface: #f4f4f7` / 角丸 4・6px / system-ui + Yu Gothic UI)。参加者ごとの色は accent と同じ彩度・明度で色相だけ変えたもの。絵と実装が同じトークンの上に乗るため、キャンバスの値をそのまま実装へ移せる。 + +**この UI は本番向けではない。** 段階的に作り、機能と並行して改善する前提の暫定案である。確定仕様として扱わない。 + +### 決まったこと + +- 会話面はメッセージ単位を保つ。端末は診断面側に置き、会話面には置かない。 +- 参加者パネルを持つ。セッションの接続方法・起動コマンド・作業ディレクトリ・開始時刻と、操作(端末 / ミュート / 終了)を出す。裏の値はすべて既にあり、出すだけで済む。 +- 発言に宛先を持たせる。 + +### 決まっていないこと + +いずれも費用が判明していて、判断だけが残っている。 + +| 項目 | 費用 | +|---|---| +| 複数ルーム | サイドカーの `chat_id` は 1 つ固定。ルームごとにセッションを立てると利用枠がルーム数ぶん増え、1 セッションが複数ルームに属する形にすると push にルーム文脈を載せるプロトコル変更を伴う | +| システム発言の出所 | エージェントが `say_to_room` で言うなら可。アプリがファイルや git を監視して言う形は「アプリは部屋であってランタイムではない」に当たる | +| webhook を部屋へ流す | 未採用。判断材料は #32 に memo として残してある | + ## 配布 段階を分ける。第二段階は実装ではなく手続きのトラックであり、第一段階の完了条件には含めない。