Update: statusline にサブエージェントのコンテキスト使用量を並べる - #806
Conversation
- 実行中のサブエージェントの使用量を `│` の後に使用量の多い順で 3 本まで並べ、残りは本数だけを出す - 終わったサブエージェントは記録の末尾から判定して外す - ラベルは description の先頭を端末の 8 桁で切る(全角は 2 桁) - メインの表示から上限と使用率を外し、モデル名を詰める(Opus5 61k) - コンテナ名・ホスト名の表示を外す Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- NDF 標準の statusLine に refreshInterval: 5 を持たせる。既存の設定には ensure / set が足し、利用者の値は変えない - メイン・サブエージェントとも 500k を超えた使用量を赤で表示する(Haiku は 150k) - サブエージェントのラベルを説明の先頭 4 文字にし、空白を挟んで使用量を続ける Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
更新の時刻(直近 2 分)で実行中を決めていたため、子や長いコマンドを待って記録を書き足さない supervisor が外れていた。候補を直近 60 分に広げ、実行中かどうかは記録の末尾で決める。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | COMMENT
statusline-switch.sh 側(refreshInterval)は新規/既存/保持/独自の 4 分岐がテストで押さえられており、手元で 10 件 pass を確認した。一方で statusline.sh に追加した描画ロジック(サブエージェント記録の状態判定 run/idle/done・上位 3 本の並べ替え・+N の省略・500k/150k の赤表示)は自動テストが無く、擬似記録での目視のみになっている。AGENTS.md が求める「入力と出力の形を 1 度そのまま通す」検証を自動化するため、tail -n 50 | jq -rs ... の状態判定と並べ替え・省略部分を、標準入力 JSON と擬似 subagents/agent-*.jsonl を渡してスクリプト実行し標準出力を突き合わせる pytest を追加することを推奨する。詳細はインラインに記載。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
サブエージェント検出の境界条件とモデル別の警告しきい値を修正してください。
- サブエージェントの記録を find -print0 と NUL 区切りで読み、空白を含むパスでも表示する - メインの赤表示の閾値を context_window.context_window_size が 200K 以下なら 150k にする - statusline.sh の表示を擬似の記録で確かめる test_statusline_render.py を追加する Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ対応件数: critical=0 / major=1 / minor=2 (合計 3 件) 詳細
検証: |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
サブエージェントの使用量表示・refreshInterval 追加・80 桁制約への収め方いずれも実装とテスト(18 件 pass、境界値・空白パス・空/非 JSON 入力を網羅)が一致しており、stat の macOS 差分と kill 済み担当の残留は PR/SKILL.md で既知として明示されている。レガシー移行判定(statusline-switch.sh ②)も新スクリプトのマーカー ① で全カバーされ回帰なし。修正を要する指摘は無し。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
端末へ出すサブエージェントラベルの制御文字除去が必要です。
ラベル化の jq で空白に加えて \p{Cc}(U+0000-001F / U+007F-009F)を除く。
説明に ESC を含む場合のテストを足す。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ(cross-review 最終スイープ)resolved: 2 件 / fixed: 1 件(minor / セキュリティ) 詳細
|
Docs: 10.16.0 の変更履歴と更新案内に statusline の変更(#806)を足す
Summary
statusline に、実行中のサブエージェントのコンテキスト使用量を並べる。statusLine の JSON はメインセッションの値しか持たないため、サブエージェントの記録(
<transcript_path から .jsonl を除いたもの>/subagents/agent-<id>.jsonl)の最後のusageから読む。+2のように本数だけを出す(80 桁の端末に収めるため)meta.jsonのdescriptionから空白を除いた先頭 4 文字。種類名はほとんどがgeneral-purposeで見分けに使えないtool_useを含まない assistant で終わり、end_turnが付くか 30 秒書き足されなければ終わったとみなす。更新の時刻では決めない(子を待つ supervisor は何分も書き足さない)context_window_sizeが 200K 以下かで判定)Opus 5 (1M context)→Opus5)。現行モデルの上限は Haiku 4.5 を除き 1MrefreshInterval: 5を持たせる。メインが待機中は再描画のイベントが起きず、サブエージェントの表示が止まるため。既存の設定にはensure/setが足し、利用者が書いた値と独自の statusline には触らない関連する issue: なし(会話での依頼)
Test plan
uv run --with pytest pytest scripts/tests plugins/ndf -q→ exit=0(4862 passed)python3 scripts/check-skill-frontmatter.py→ exit=0python3 scripts/check-doc-staleness.py→ exit=0python3 scripts/check-markdown-links.py --root .→ exit=0refreshIntervalのテスト 4 件を追加(新規設定・既存の NDF 標準への追加・利用者の値の保持・独自 statusline に触らない)。うち 2 件は実装前に落ちることを確認+2、end_turnの記録と 40 秒止まった text の記録が外れる、Haiku 160k と 620k が赤、説明の無い記録は ID の先頭、{}とtranscript_path無しで崩れない未検証の項目: macOS(BSD の
stat -f %mへの切り替え)は実機で動かしていない既存の失敗: なし
範囲外と判断したもの:
playwright-kitの pytest(変更に関係しない)影響範囲
statusLine.refreshInterval)版を上げる必要があるか
要らない(まとまり単位でマージ後に
/ndf:releaseで上げる)🤖 Generated with Claude Code