Skip to content

feat: optionally show reasoning and tool call details - #15

Merged
mrgoonie merged 4 commits into
mainfrom
feat/13-reasoning-tool-details
Oct 13, 2026
Merged

mrgoonie merged 4 commits into
mainfrom
feat/13-reasoning-tool-details

Conversation

@mrgoonie

Copy link
Copy Markdown
Contributor

Summary

  • Settings → Chat display gets two toggles, both off by default: Show reasoning and Show tool call details.
  • With reasoning on, each reply gets a collapsible "Reasoning" block (the thinking.delta text). With tool details on, each tool chip opens into its input, output and error.
  • Everything renders as plain text in <pre>; nothing is stored outside in-memory chat state.
  • Credential-looking values are redacted before they reach chat state (src/chat/tool-detail.ts): secret names in any case style (GITHUB_TOKEN, client_secret, accessToken, x-api-key, PGPASSWORD), secret CLI flags, ?token= in URLs, JSON results field by field, Bearer/Basic values, user:pass@ and well-known key prefixes. Each field is clipped to 4,000 characters. The hint and the threat model say redaction is best effort.
  • A completion event without a name keeps the tool name from its start event.

Review

Isolated review ran twice. Both blocking findings (missed secret formats, harmless names swallowing later secrets) are fixed and covered by tests. Remaining non-blocking notes: details are not in server history, so a reload drops them; long reasoning is clipped at 4,000 characters.

Test plan

Base is feat/8-ui-polish (#12) so the diff shows only this change.

Closes #13

🤖 Generated with Claude Code

mrgoonie and others added 4 commits October 13, 2026 22:31
Two Settings toggles, off by default, show the agent's reasoning and each
tool call's input, output and error as collapsible plain text. Credential-
like values are redacted and every field is clipped before it reaches chat
state.

Refs #13

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recognise prefixed and camelCase secret names (GITHUB_TOKEN, client_secret,
accessToken, x-api-key), JSON result text, Basic and Bearer values and
user:pass in URLs, without hiding max_tokens or prose like "token expired".
Reasoning text goes through the same redaction, nesting is capped, a
completion without a name keeps the name from the start event, and the
Settings hint now says redaction is best effort.

Refs #13

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A pair such as `https:` or `Error:` no longer consumes the text after it,
so `?token=`, `?api_key=` and `Error: NAME=VALUE` are redacted. Also
recognise PGPASSWORD and MYSQL_PWD style names and lowercase `token`
headers, while plain prose like "Basic authentication required" stays.

Refs #13

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mrgoonie
mrgoonie changed the base branch from feat/8-ui-polish to main October 13, 2026 16:29
@mrgoonie
mrgoonie merged commit 760525a into main Oct 13, 2026
2 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.

Show reasoning and tool call details in the side panel

1 participant