The hook took a local sign-in's redirect port only from the authorize URL printed in the current tool call. So a pending sign-in shown again on a later tool call or prompt read redirect port unknown, which is also how another program's sign-in looks. Now every rendering derives the port the same way: from the authorize URLs in the last 4 MB of the acting context's transcript (a subagent's own, or else the session's), plus the current call. It still matches them to pending decisions by show and token.
before, second showing: client: unverified local app, redirect port unknown
after, second showing: client: unverified local app, redirect port 35873
Tests: a sign-in shown again on an unrelated tool call and on a prompt names the same port as its first showing. A subagent reads its own transcript, not the session's. A 9 MB transcript is read from its end within the hook's time budget. The plugin version goes to 0.3.4.
🤖 Generated with Claude Code