Skip to content

fix: プラグイン追加確認のプロンプトが表示されず入力待ちで停止する問題を修正(v0.76.2) - #162

Merged
okash1n merged 3 commits into
mainfrom
fix/plugin-adoption-prompt-visibility
Aug 31, 2026
Merged

fix: プラグイン追加確認のプロンプトが表示されず入力待ちで停止する問題を修正(v0.76.2)#162
okash1n merged 3 commits into
mainfrom
fix/plugin-adoption-prompt-visibility

Conversation

@loadbalance-sudachi-kun

Copy link
Copy Markdown
Contributor

概要

対話更新でカタログに追加されたプラグインを 1 件ずつ確認する _offer_new_plugins_interactivelib/plugin-adoption.sh)に、表示に関する不具合が 2 件あった。片方は、質問を一度も見ないままプラグインが恒久的に拒否される結果を招く。

実環境(macOS、Full プロファイル、v0.76.0)で発生を確認している。

1. 質問が表示されないまま入力待ちになる

現象

setup.sh --update の実行中、プラグイン一覧だけが表示されて停止する。質問文は出ない。

[INFO] 前回のセットアップ以降に追加されたプラグインがあります:
  document-skills@anthropic-agent-skills — Document creation and editing skills (DOCX, PDF, PPTX, XLSX)

  example-skills@anthropic-agent-skills — Creative, technical, and enterprise skill examples from Anthropic

  claude-security — Multi-agent deep vulnerability scan with independently verified findings and patches

原因

if ! read -r -p "$(printf "${STR_NEW_PLUGINS_ASK:-Add %s? [y/N]}" "$entry") " \
  reply < "${_TTY_INPUT:-/dev/tty}" 2>/dev/null; then

read -p はプロンプトを stderr に書く。端末を開けなかった場合に備えて付けた 2>/dev/null が、質問文そのものを破棄していた。

pty を割り当てて検証した結果(jq 環境非依存、GNU bash 5.3.9):

stderr の内容
read -r -p "PROMPT" x < /dev/tty PROMPT
read -r -p "PROMPT" x < /dev/tty 2>/dev/null

影響

質問が見えないため停止したように見える。先へ進めるために押した Enter は空回答となり、case*) 分岐で DISMISSED_PLUGINS に記録される。既定は No で、一度断った項目は再提示されない設計のため、質問を一度も見ないまま該当プラグインが恒久的に拒否される

実際に、報告環境の ~/.claude-starter-kit.conf には 3 件が DISMISSED_PLUGINSKNOWN_PLUGINS の両方に記録されていた。

修正

キットの他の対話プロンプト(lib/deploy.sh:1376-1378lib/deploy.sh:2073-2075lib/merge.sh)と同じ形に揃えた。質問を printf ... >&2 で明示的に出力し、-p なしの read を実行する。2>/dev/nullread 側にのみ残るため、端末を開けなかった場合に返り値 2 で通知経路へ落とす既存の挙動は変わらない。

2. プラグイン名に \033[1m がそのまま表示される

printf " %s%s%s%s\n" "${BOLD:-}" "$entry" "${NC:-}" ... と、BOLD / NC%s の引数として渡していた。両者はエスケープシーケンスをバックスラッシュ表記の文字列として保持しており、printf が解釈するのは書式文字列に含まれる場合だけなので、制御文字列が画面にそのまま出る。

lib/colors.sh の他の出力(info / ok / section)と同じく書式文字列側に置くよう変更した。lib/colors.sh は stdout が端末のときだけ色を設定するため、リダイレクト時は空文字列となり本件の影響はない。

テスト

tests/unit/test-plugin-adoption.sh に回帰テストを 2 件追加した。

  • plugin-adoption: the offer prompt reaches the user — stderr のみを捕捉し、[y/N] を含む質問が出ることを確認
  • plugin-adoption: the plugin line renders escapes instead of printing themBOLD を明示設定したうえで、出力にリテラル \033[ が含まれないことを確認

修正前のコードでは 2 件とも失敗する(Total: 44 Pass: 42 Fail: 2)。修正後は 44/44 通過。

実行した検証

  • shellcheck -S warning lib/plugin-adoption.sh tests/unit/test-plugin-adoption.sh — いずれもクリーン
  • tests/unit/test-plugin-adoption.sh — 44/44 通過
  • tests/run-unit-tests.sh — 失敗は fonts: direct download fallback receives font definition 1 件のみ。この失敗は本 PR の変更前(554e455)にも再現する既存のものであり、本変更に起因する失敗はない

アップグレード経路

ENABLE_* フラグ、profile 既定値、生成ファイル、settings キー、manifest のいずれも追加・変更していない。変更は既存関数の出力方法に限られ、保存済み設定の解釈も分岐条件も変えていないため、既存インストールが setup.sh --update / /update-kit で取りこぼす新規キーはない。

ただし、本不具合の影響を受けた環境には拒否記録が残る。復旧手順を CHANGELOG に記載した。~/.claude-starter-kit.confDISMISSED_PLUGINSKNOWN_PLUGINS両方から該当エントリを削除する必要がある(_compute_new_plugins は SELECTED / DISMISSED / KNOWN のいずれかに含まれる項目を除外するため、DISMISSED_PLUGINS だけでは再提示されない)。

ドキュメント

  • CHANGELOG.md — 更新済み(## [0.76.2]、復旧手順を含む)
  • README.md / README.en.md — 変更不要。セットアップフロー、既定値、CLI フラグ、前提条件のいずれも変わらない
  • docs/ — 変更不要。設定マッピング、機能の挙動、アップグレード挙動のいずれも変わらない

補足

バージョンは 0.76.2 とした。0.76.1 は先行して修正予定の Issue #161(auto-update の稼働確認が誤って「無効」と判定される)に割り当てている。#161 より先にマージする場合は 0.76.1 へ付け替える。

🤖 Generated with Claude Code

対話更新で新規カタログのプラグインを 1 件ずつ確認する
_offer_new_plugins_interactive に 2 つの表示不具合があった。

1. 質問が表示されない

   read -r -p "..." reply < /dev/tty 2>/dev/null の形で質問していた。
   read -p はプロンプトを stderr に書くため、端末を開けなかった場合に
   備えた 2>/dev/null が質問文そのものを破棄していた。

   利用者にはプラグイン一覧だけが表示されて入力待ちになるため、停止した
   ように見える。先へ進めるために押した Enter は空回答として
   DISMISSED_PLUGINS に記録される。既定は No で一度断った項目は再提示
   しない設計のため、質問を一度も見ないまま該当プラグインが恒久的に
   拒否されていた。

   キットの他の対話プロンプト(lib/deploy.sh:1376-1378、lib/merge.sh)と
   同じ形に揃え、printf ... >&2 で質問を出力してから -p なしの read を
   実行する。

2. プラグイン名に \033[1m がそのまま表示される

   printf "  %s%s%s%s\n" "${BOLD:-}" ... と、BOLD / NC を %s の引数として
   渡していた。両者はエスケープシーケンスをバックスラッシュ表記の文字列
   として保持しており、printf が解釈するのは書式文字列に含まれる場合だけ
   なので、制御文字列が画面にそのまま出る。lib/colors.sh の他の出力と
   同じく書式文字列側に置く。色出力が有効な端末でのみ発生する。

回帰テストを tests/unit/test-plugin-adoption.sh に 2 件追加した。修正前の
コードでは 2 件とも失敗することを確認済み。

検証:
- shellcheck -S warning: lib/plugin-adoption.sh / tests/unit/test-plugin-adoption.sh ともにクリーン
- tests/unit/test-plugin-adoption.sh: 44/44 通過(修正前は 42/44)
- tests/run-unit-tests.sh: 既存の fonts 失敗 1 件のみ。本変更に起因する失敗なし

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 31, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-31T06:52:51.915810Z ca7feba New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@okash1n
okash1n merged commit 94a5b96 into main Aug 31, 2026
11 checks passed
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.

2 participants