Skip to content

feat(account): give each account its own terminal and a way to end it #57

Description

@smileygames

目的

端末をアカウントごとに持ち、アカウントごとに終了できるようにする。design/Vision.dc.html の参加者パネルが描く 端末 / 終了 の形にする。

前提

端末が 1 つしかなく、混ざっている

followSessionsrc/main.ts)は起動のたびに pty-data-{id} の購読を足すが、書き込み先は共有の terminal 1 つであり、購読の解除も無い。

したがって 2 セッションを動かすと両方の出力が同じ端末に混ざる。「最後に起動したものが見える」のではなく「全部が重なっている」状態である。

入力の宛先も間違っている

キーボード入力とペーストは activePtyId へ送られる(src/main.ts 886 / 904 行)。activePtyId は最後に起動したセッションであり、画面に何が見えているかとは無関係である。

見ている端末と打ち込まれる端末が一致しない。 表示の混線より実害が大きい。

終了は機構として既にある

kill_pty は実装済みで、src-tauri/src/lib.rs の invoke ハンドラにも登録済み。UI から呼ばれていないだけである。

席の解放も追加作業を要しない。RoomSeats::seated#53)が死んだ PTY の席を掃くため、終了すれば席は自動的に空く。

パネルは既にアカウントを並べている

#54 でパネルがアカウント一覧 ⋈ 稼働中の名簿を描いている。行はある。操作が無いだけである。

制約

  • 端末は診断面に置いたままとする。 パネル(264px)へ畳まない。CLI が枠を描くには桁数が要る、という feat(ui): surface the participant panel the design already specifies #43 の判断を維持する。
  • 切り替えでスクロールバックを失わない。 別のアカウントを見てから戻ったとき、それまでの出力が残っていること。
  • 入力は「今見えている端末」へ送る。 activePtyId(最後に起動したもの)を入力の宛先として使わない。
  • 終了は取り消せない操作として扱う。 無地のクリック一つで、無害な操作の隣に置かない。押し間違いが session を落とす形にしない。確認を挟むか、操作面を分けるかは実装側の判断とする。
  • 終了したアカウントのスクロールバックを即座に消さない。 終了直前の出力が、なぜ落ちたかを読む唯一の材料である。別のアカウントが選ばれるまで残す。
  • 未起動のアカウントには端末が無い。行に端末の操作を出さないか、押せない形にする。
  • 部屋を変えない。これは画面と PTY の話であり、protocol にも床にも触れない(feat(account): make an account a thing that exists whether it is running #53 と同じ境界)。

対象ファイル

  • src/main.ts — アカウント → 端末の対応、切り替え、入力の宛先、終了の呼び出し
  • index.html, src/styles.css — パネル行の操作
  • docs/0-requirements.md

完了条件

  • アカウントごとに端末を選んで見られる。
  • 2 セッションを動かしたとき、出力が混ざらない。
  • 入力とペーストが、今見えている端末のセッションへ届く。
  • 切り替えて戻ってもスクロールバックが残っている。
  • アカウントごとに終了できる。終了後、そのアカウントの席が空き、再起動できる。
  • 終了が押し間違いで起きにくい形になっている。
  • 終了直後もそのアカウントの出力が読める。
  • 未起動のアカウントに端末の操作が出ない、または押せない。
  • protocol が変わっていない。

関連

Metadata

Metadata

Assignees

Labels

enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions