Skip to content

feat: /clear コマンドで終了済みセッションを一覧から消去 - #47

Merged
takecchi merged 1 commit into
mainfrom
codiva/clear-clear-clear-codiva-pr
Jul 21, 2026
Merged

takecchi merged 1 commit into
mainfrom
codiva/clear-clear-clear-codiva-pr

Conversation

@takecchi

Copy link
Copy Markdown
Owner

概要

一覧画面のコンポーザで /clear を実行すると、これまでのセッション一覧を消去するコマンドを追加しました。

  • 終了済みセッションcompleted / interrupted / rate_limited / failed / conflict / archived)を一覧から消去します。
  • 実行中セッションcreating / running / awaiting_permission / awaiting_input)は残します。ライブの SDK 会話を切ってしまわないためです。
  • 消去したセッションは store と永続スナップショット(.codiva/state.json)の両方から外れるため、codiva を再起動しても一覧に戻りません
  • worktree・ブランチ・コミット履歴はディスク上にそのまま残します(作業自体は失われず、失われるのは codiva の一覧エントリのみ)。
  • 破壊的ですが即時実行(確認ダイアログなし)。実行中セッションを残す設計で誤操作の影響を抑えています。

変更点

レイヤ 変更
core/commands CommandAction'clear'COMMANDS/clear エントリを追加
core/i18n command.clear を ja/en 両カタログに追加
core/session-store 順序+状態から 1 件を外す remove() を追加
core/session-manager 終端セッションのみ stop() → 破棄する clear() を追加(isTerminalStatus で判定)。永続対象は store 由来なので、消去分は state.json に書かれず復元もされない
ui/session-list /clear ハンドラを useCommandRunner に配線
README /clear の説明を追記

設計判断

  • なぜ永続スナップショットに手を入れないか: persistableState() は store の id を走査するため、store から外すだけで自動的に永続対象から外れる。専用の「消去済みフラグ」を持たずに「再起動しても戻らない」を満たせる。
  • なぜ worktree を残すか: 要件どおり履歴は保持。消去したセッションの slug は解放しない(worktree がディスクに残っており slug は引き続き使用中のため)。
  • 実行中を残す/確認なし: 依頼者の選択に従った挙動。

テスト

  • core/commands.spec: /clear の解決・前方一致・カタログ
  • core/session-store.spec: remove()(該当・不明 id の no-op)
  • core/session-manager.spec: 終端のみ消去・実行中は残す / 永続スナップショットから除外 / onPersist・購読通知 / 対象なし時 no-op
  • tests/commands.test.tsx: パレット表示と App 経由の /clear 配線
  • npm test(739 passed, core/utils カバレッジ 80% 以上)
  • npm run typecheck / npm run lint / npm run build

手動確認 TODO

  • 使い捨てリポジトリで起動し、複数セッションを完了させてから /clear → 一覧が消えることを確認
  • 実行中セッションがある状態で /clear → 実行中のみ残ることを確認
  • codiva を再起動 → 消去したセッションが一覧に戻らないことを確認

一覧のコンポーザで `/clear` を実行すると、終了済み(completed /
interrupted / rate_limited / failed / conflict / archived)のセッションを
一覧から消去する。実行中(creating / running / awaiting_*)のセッションは
ライブ SDK 会話を切らないため残す。

消去したセッションは store と永続スナップショット(state.json)の両方から
外れるため、codiva を再起動しても一覧に戻らない。worktree・ブランチは
ディスク上に残す(作業履歴は保持)ので失われるのは codiva の一覧エントリだけ。

- core/commands: CommandAction に 'clear' と COMMANDS エントリを追加
- core/i18n: command.clear を ja/en 両カタログへ
- core/session-store: 順序+状態から 1 件外す remove() を追加
- core/session-manager: 終端セッションのみ stop→forget する clear() を追加
- ui/session-list: /clear ハンドラを useCommandRunner に配線(確認なしで即実行)
@takecchi
takecchi merged commit 2c8e125 into main Jul 21, 2026
1 check passed
@takecchi
takecchi deleted the codiva/clear-clear-clear-codiva-pr branch July 21, 2026 04:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant