mirror of
https://github.com/NeuralNomadsAI/CodeNomad.git
synced 2026-08-30 10:42:04 +00:00
fix(ui): render native read tool output
Use the V2 read tool state's output field for display and copy text instead of the stale metadata preview. Add a focused renderer test that distinguishes the authoritative output from metadata.
This commit is contained in:
parent
dd2aef6a32
commit
3f79e1a595
2 changed files with 24 additions and 4 deletions
20
packages/ui/src/components/tool-call/renderers/read.test.ts
Normal file
20
packages/ui/src/components/tool-call/renderers/read.test.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import assert from "node:assert/strict"
|
||||
import { it } from "node:test"
|
||||
|
||||
import type { ToolRendererContext } from "../types"
|
||||
import { readRenderer } from "./read"
|
||||
|
||||
it("renders read output from the V2 tool state", () => {
|
||||
const context = {
|
||||
toolState: () => ({
|
||||
status: "completed",
|
||||
input: { path: "src/example.ts" },
|
||||
metadata: { preview: "stale preview" },
|
||||
output: "const value = 1",
|
||||
}),
|
||||
renderMarkdown: ({ content }: { content: string }) => content,
|
||||
} as unknown as ToolRendererContext
|
||||
|
||||
assert.equal(readRenderer.getOutputChrome?.(context)?.copyText, "const value = 1")
|
||||
assert.match(String(readRenderer.renderBody(context)), /const value = 1/)
|
||||
})
|
||||
|
|
@ -44,8 +44,8 @@ export const readRenderer: ToolRenderer = {
|
|||
getOutputChrome({ toolState }) {
|
||||
const state = toolState()
|
||||
if (!state || state.status === "pending") return undefined
|
||||
const { metadata, input } = readToolStatePayload(state)
|
||||
const preview = typeof metadata.preview === "string" ? metadata.preview : null
|
||||
const { output, input } = readToolStatePayload(state)
|
||||
const preview = typeof output === "string" ? output : null
|
||||
if (!preview) return undefined
|
||||
const language = inferLanguageFromPath(getReadPath(input)) ?? "text"
|
||||
return { language, copyText: preview, wrapToggle: true, suppressInnerHeader: true }
|
||||
|
|
@ -53,8 +53,8 @@ export const readRenderer: ToolRenderer = {
|
|||
renderBody({ toolState, renderMarkdown }) {
|
||||
const state = toolState()
|
||||
if (!state || state.status === "pending") return null
|
||||
const { metadata, input } = readToolStatePayload(state)
|
||||
const preview = typeof metadata.preview === "string" ? metadata.preview : null
|
||||
const { output, input } = readToolStatePayload(state)
|
||||
const preview = typeof output === "string" ? output : null
|
||||
const language = inferLanguageFromPath(getReadPath(input))
|
||||
const content = ensureMarkdownContent(preview, language, true)
|
||||
if (!content) return null
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue