purpose
セッションごとに独立した Terminal インスタンスを持たせる。
セッション切り替え時にプロセスを殺さず、表示の切り替えだけで済むようにする。
premise
現在: TabState に 1 つの Terminal + 1 つの PTY。セッション切り替え = PTY 停止 → クリア → 再起動。前のセッションの内容が全て消える。
constraints
- 各セッションの Terminal + PTY プロセスは独立に生存
- セッション切り替え = DOM の表示/非表示のみ(PTY は触らない)
- Start/Stop ボタンはアクティブセッションの PTY を操作
- 新セッション作成時に自動的に新 Terminal + コンテナを生成
- セッション削除時に PTY を停止し Terminal を破棄
設計
SessionState(新規)
```typescript
interface SessionState {
terminal: Terminal;
fitAddon: FitAddon;
containerEl: HTMLElement; // この session 用の terminal-container div
ptyId: string | null;
unlistenData: UnlistenFn | null;
unlistenExit: UnlistenFn | null;
}
```
TabState(変更)
- terminal, fitAddon を削除(セッションに移動)
- sessions: Map<string, SessionState> を追加
- activeSessionId: string | null を追加
- terminalContainerEl を terminalAreaEl にリネーム(セッション terminal-container の親)
セッション切り替えフロー
- 現在のセッションの containerEl を display:none
- 新セッションの containerEl を display:block
- fitAddon.fit() で新セッションのターミナルをリサイズ
- suppressResize でリサイズ通知を抑制
startTab / stopTab
- アクティブセッションの SessionState を参照
- PTY の spawn/kill はセッション単位
SessionManager との連携
- onSessionSwitch: 表示切り替えのみ(PTY 再起動しない)
- onSessionCreate: 新 SessionState を生成、Terminal を open
- onSessionDelete: PTY kill、Terminal dispose、containerEl 削除
target files
- src/tabs.ts — SessionState 導入、TabState リファクタ、startTab/stopTab をセッション対応
- src/sessions.ts — onSessionCreate, onSessionDelete コールバック追加
purpose
セッションごとに独立した Terminal インスタンスを持たせる。
セッション切り替え時にプロセスを殺さず、表示の切り替えだけで済むようにする。
premise
現在: TabState に 1 つの Terminal + 1 つの PTY。セッション切り替え = PTY 停止 → クリア → 再起動。前のセッションの内容が全て消える。
constraints
設計
SessionState(新規)
```typescript
interface SessionState {
terminal: Terminal;
fitAddon: FitAddon;
containerEl: HTMLElement; // この session 用の terminal-container div
ptyId: string | null;
unlistenData: UnlistenFn | null;
unlistenExit: UnlistenFn | null;
}
```
TabState(変更)
セッション切り替えフロー
startTab / stopTab
SessionManager との連携
target files