Skip to content

Claude agent host: roadmap status sync + Phase 8.5 (rich tool-call rendering)#316724

Draft
TylerLeonhardt wants to merge 2 commits into
mainfrom
tyleonha/claude-roadmap-phase76
Draft

Claude agent host: roadmap status sync + Phase 8.5 (rich tool-call rendering)#316724
TylerLeonhardt wants to merge 2 commits into
mainfrom
tyleonha/claude-roadmap-phase76

Conversation

@TylerLeonhardt
Copy link
Copy Markdown
Member

Documentation-only update to src/vs/platform/agentHost/node/claude/roadmap.md.

What's in

  1. Status catch-up. Marks Phases 5, 6, 7, 8 as ✅ DONE. The code for all four has been on main for a while; the headings just hadn't been updated. Phase 6.5 (Fork) intentionally stays Deferred — its scope is blocked behind Phase 13's result-message mapper and the throw at claudeAgent.ts is the agreed terminal state for now.

  2. New Phase 8.5 — Rich tool-call rendering parity with Copilot. Captures a gap surfaced during live testing:

    • The Bash permission card reads 'Run shell command' with no command shown.
    • Bash / Grep / Glob rows render in the generic tool renderer instead of the dedicated terminal / search renderers.
    • Past-tense rows are hardcoded to '<displayName> finished' instead of including the actual command / file / pattern.

    The phase ports Copilot's helper shape from copilotToolDisplay.tsgetInvocationMessage / getPastTenseMessage / getToolKind / getShellLanguage / getToolInputString — into claudeToolDisplay.ts, keyed off the SDK's tool_use.input schemas, and wires them through:

    • claudeCanUseTool.ts — so permission cards include the actual invocation and use the right toolKind / language.
    • claudeMapSessionEvents.ts — so live SessionToolCallReady / SessionToolCallComplete carry rich invocation + past-tense + _meta.toolKind / _meta.language (single canonical path; Phase 12's subagent toolKind reuses the same field).
    • claudeReplayMapper.ts — same _meta and rich messages on historical rows so restored sessions render identically to live ones.

Not in this PR

Just the roadmap update. The Phase 8.5 implementation will follow as its own PR.

Risk

None — markdown only.

…ndering)

- Mark Phases 5, 6, 7, 8 as DONE (implementations have shipped; just
  catching the headings up to reality).
- Insert Phase 8.5 — Rich tool-call rendering parity with Copilot.
  Today the Claude permission card for Bash reads 'Run shell command'
  with no command shown; Bash/Grep/Glob rows render in the generic
  renderer instead of the dedicated terminal/search renderers. This
  phase ports Copilot's getInvocationMessage / getPastTenseMessage /
  getToolKind / getShellLanguage / getToolInputString shape into
  claudeToolDisplay.ts and wires them through the permission, mapper,
  and replay paths.

Phase 6.5 (Fork) intentionally stays Deferred.
Copilot AI review requested due to automatic review settings May 15, 2026 23:24
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Claude agent host roadmap documentation to reflect current implementation status and to add a new planned Phase 8.5 focused on richer tool-call rendering (matching Copilot’s tool-call UI fidelity).

Changes:

  • Mark Phases 5–8 as ✅ DONE in the roadmap headings.
  • Add Phase 8.5 section describing planned work to improve Claude tool-call invocation/past-tense messaging and _meta tagging for terminal/search/subagent renderers.
Show a summary per file
File Description
src/vs/platform/agentHost/node/claude/roadmap.md Updates phase status headings and adds a new Phase 8.5 plan for richer tool-call rendering parity.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 2

Comment on lines +813 to +815
subagent specially. Phase 12 already laid the `_meta.toolKind:
'subagent'` half down; this phase finishes the parity for the rest of
the SDK's built-in tools.
Comment on lines +836 to +839
- `getClaudeToolKind(toolName)` → `'terminal' | 'subagent' |
'search' | undefined`. `Bash` / `BashOutput` / `KillBash` →
`'terminal'`; `Grep` / `Glob` → `'search'`; `Task` →
`'subagent'` (Phase 12 already does this; consolidate the call
Adds phase8.5-plan.md alongside roadmap.md's Phase 8.5 section.

Synthesized from a 3-model council (GPT-5.5, Claude Opus 4.6,
GPT-5.3-Codex) and refined through a grill-with-docs session.

Locked decisions:
- D1: getClaudeToolKind is a TOOL_ROWS column (single source of truth).
- D2: add Agent row to TOOL_ROWS; delete SUBAGENT_TOOL_NAMES.
- D3: defensive Record<string, unknown> access; no per-tool exported
  types.
- D4: pastTenseMessage is success-aware (tool_result.is_error).
- D5: live mapper mirrors Copilot's stash-on-start/reuse-on-complete
  pattern, with state encapsulated in a new ClaudeToolCallRegistry
  class (replaces today's bare maps on ClaudeMapperState).
- D6: _meta single-write on Start; reducer carries to Complete; replay
  emits on its single terminal action (asymmetry by design).
- D7: MCP tools get toolKind: undefined.
- D8: one big per-tool snapshot table covering all 5 helpers.
- D9: getClaudeInvocationMessage('Task', ...) owns the Task description
  fallback; Phase 12's site reduces to a plain helper call.
- D10: _meta stays flat (no per-kind namespacing).

Steps cover claudeToolDisplay (helpers + columns), claudeCanUseTool
(permission card rich invocation + _meta), sessionPermissions (forward
_meta through pending->ready), claudeMapSessionEvents (registry
migration + _meta on Start + success-aware past tense),
claudeReplayMapper (parity), claudeSubagentSignals (inner tool
parity), and the snapshot + behavior tests.
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