Skip to content

feat: 一覧の詳細を codiva 内蔵ビューへ復帰(claude CLI 連携を廃止) - #17

Merged
takecchi merged 2 commits into
mainfrom
feat/in-app-session-detail
Jul 19, 2026
Merged

feat: 一覧の詳細を codiva 内蔵ビューへ復帰(claude CLI 連携を廃止)#17
takecchi merged 2 commits into
mainfrom
feat/in-app-session-detail

Conversation

@takecchi

Copy link
Copy Markdown
Owner

概要

一覧で Enter/→ したときの挙動を、外部 claude --resume 起動(Phase 7 の CLI 連携)から
codiva 内蔵の詳細ビューへ戻します。codiva 側の機能(ログ描画・追加指示・スクロール・
マージ/破棄)が揃ったため、稼働中の SDK セッションに直結して codiva 内で完結させます。

変更点

内蔵詳細ビュー(新規に書き直し)

  • ui/session-detail.tsx: SDK セッション直結。ヘッダ(タイトル/バッジ/進捗/コスト/エラー)
    + 末尾ビューポートのログ + streamingText プレビュー + 追加指示コンポーザ(manager.send
  • Tab で入力↔操作パネルを切替、操作パネルで m/d = マージ/破棄。単一 useInput の state machine
  • バッファ編集は ref 経由で逐次適用(連打・ペースト・エスケープ列の stale closure を回避)
  • core/scroll.ts(+spec)と layout.tslogViewportRows/DETAIL_CHROME_ROWS を復元(純粋)

ビュー切替

  • app.tsxView(list ⇔ detail)状態機械を再導入。SessionListonOpen(id) でナビゲート
  • Enter/→ で詳細へ、Esc で一覧へ戻る

claude CLI 連携を完全削除

  • utils/claude-cli.ts(+spec)・ExternalRunner/runExternal/openExternal
  • Session.detach()detached イベント・external ステータス
    (types / status-reducer / persistence / progress-badge / i18n から撤去)

i18n

  • detail グループを復活(ja/en 対)
  • list.helpList を「詳細を開く」へ、list.openNotReadybadge.external を削除

ドキュメント

  • docs/ARCHITECTURE.md / docs/TASKS.md(Phase 8)/ .claude/rules/ink-components.md を実装に合わせて更新

テスト計画

  • npm run typecheck
  • npm run lint 緑(既存の warning のみ)
  • npm run build
  • npm test 全 361 件緑(core/utils カバレッジ 80% 以上を維持)
  • 統合テスト追加(tests/app.test.tsx): Enter で詳細を開き Esc で戻る / 詳細から追加指示を送る / 詳細の操作パネルからマージ
  • 実端末(TTY)での手動確認: 一覧→詳細→追加指示→スクロール→マージ/破棄の一連の操作

🤖 Generated with Claude Code

takecchi and others added 2 commits July 19, 2026 18:01
codiva 側の機能(ログ描画・追加指示・スクロール・マージ/破棄)が揃ったため、
Phase 7 で導入した claude CLI 連携をやめ、一覧で Enter/→ したときに codiva 内蔵の
詳細ビューで稼働中の SDK セッションへ直結する方式へ戻す。

■ 内蔵詳細ビュー(新規に書き直し)
- ui/session-detail.tsx: SDK セッション直結。ヘッダ(タイトル/バッジ/進捗/コスト/エラー)
  + 末尾ビューポートのログ + streamingText プレビュー + 追加指示コンポーザ(manager.send)
- Tab で入力↔操作パネル、操作パネルで m/d = マージ/破棄。単一 useInput の state machine
- バッファ編集は ref 経由で逐次適用(連打・ペースト・エスケープ列の stale closure 回避)
- core/scroll.ts(+spec)と layout.ts の logViewportRows/DETAIL_CHROME_ROWS を復元(純粋)

■ ビュー切替
- app.tsx に View(list ⇔ detail)状態機械を再導入。SessionList は onOpen(id) でナビゲート
- Enter/→ で詳細へ、Esc で一覧へ

■ claude CLI 連携を完全削除
- utils/claude-cli.ts(+spec)・ExternalRunner/runExternal/openExternal
- Session.detach()・detached イベント・external ステータス
  (types/status-reducer/persistence/progress-badge/i18n から撤去)

■ i18n
- detail グループを復活(ja/en 対)
- list.helpList を「詳細を開く」へ、list.openNotReady と badge.external を削除

■ テスト
- 統合テスト追加(tests/app.test.tsx): Enter で詳細を開き Esc で戻る /
  詳細から追加指示を送る / 詳細の操作パネルからマージ
- 全361テスト緑・lint/typecheck/build 緑

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
main の新機能(テーマのアクセントパレット/状態色・セッション別モデル表示・
PRバッジ・一覧の内部スクロール・スラッシュコマンド)と、本ブランチの
「claude CLI 連携を廃止し内蔵詳細ビューへ復帰」を統合。

衝突の解決方針:
- status-reducer.spec / progress-badge / i18n / types: `external`/`detached`
  は本ブランチの意図どおり削除、main の `pr`・状態色(statusColor.failed)は維持
- i18n list: `openNotReady` は削除、内部スクロールの `moreAbove`/`moreBelow` は
  維持、`detail` グループを復活。helpList は「詳細を開く」+「p: PRを開く」を両立
- layout(.spec): `logViewportRows`/`DETAIL_CHROME_ROWS`(詳細ビュー)と
  `listView`(内部スクロール)を両方保持
- app / index / session-list: view 状態機械(list⇔detail, onOpen)を維持しつつ、
  main の model / onOpenPr を配線。runExternal/ExternalRunner/openExternal は削除
- docs/TASKS: main のスラッシュコマンドを Phase 8、内蔵詳細ビュー復帰を Phase 9 に整理

検証: typecheck / lint / build 緑、全450テスト緑(core・utils とも coverage 80%超)
@takecchi
takecchi merged commit de69fbc into main Jul 19, 2026
1 check passed
@takecchi
takecchi deleted the feat/in-app-session-detail branch July 19, 2026 09:44
takecchi added a commit that referenced this pull request Jul 19, 2026
## 概要

Completed になっていて GitHub 上に PR が出ているのに、codiva の一覧で `#n`
バッジが表示されないバグを修正する。

## 原因

セッションは `codiva/<slug>` という worktree ブランチ上で作成される。一方、実際に PR 化される作業は git
ワークフロー規約に従い **別ブランチ(`feat/…` / `fix/…` 等)を切ってから** push / PR することが多い。この場合
worktree の HEAD は `codiva/<slug>` から外れているため、PR 検出に使っている

```
gh pr view <state.branch>   # = codiva/<slug>
```

ではヒットせず、`lookupPr` が `undefined` を返し続け、`#n` バッジが**一度も**表示されなかった。

実際にマージ済みの履歴でも、ブランチ名が `codiva/…` の PR (#17#20) はバッジが出るが、`feat/…`・`fix/…`
の PR (#21#23) では出ない、という差が出ていた。

## 修正

`lookupPr` を次のように変更:

1. まず worktree の**現在の HEAD ブランチ**を `git rev-parse --abbrev-ref HEAD`
で解決し、そのブランチで `gh pr view` する(作業とPRが実際に載っているブランチ)。
2. そこで見つからなければ、従来どおり記録済みの `codiva/<slug>` ブランチにフォールバック。
3. detached HEAD(`HEAD` / 空)や `git`/`gh` の失敗時は best-effort で
`undefined`(従来挙動を維持、セッションを妨げない)。

`git` も `gh` も既存の `ExecLike` (execFile ラッパ) 経由で、引数は argv
渡し(シェル連結なし)。`refreshPrs` 側のシグネチャは不変。

## テスト計画

- [x] `src/utils/pr.spec.ts` を拡充(7 ケース)
  - HEAD ブランチで解決する / 記録ブランチにフォールバックする
  - HEAD == 記録ブランチのときは `gh` 呼び出しが1回だけ
  - git 失敗 / detached HEAD で記録ブランチを使う
  - どのブランチにも PR がない → `undefined`
  - 不正・部分 JSON → `undefined`
- [x] `npm test`(470 passed)
- [x] `npm run typecheck`
- [x] `npm run lint`(本変更ファイルは警告なし)
- [ ] 手動確認: worktree 内で `git checkout -b feat/x` → PR 作成後、一覧に `#n` が出ること
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