fix: include toolName in tool_result transcript entries for Pi adapter
When tool_result entries arrive without a matching tool_call, the transcript was showing generic 'tool' as the name. Now pl-local parses toolName from tool_execution_end events and passes it through, so the UI can display the actual tool name (e.g., 'bash', 'Read', 'Ls') instead of 'tool'.
This commit is contained in:
@@ -246,7 +246,7 @@ export type TranscriptEntry =
|
|||||||
| { kind: "thinking"; ts: string; text: string; delta?: boolean }
|
| { kind: "thinking"; ts: string; text: string; delta?: boolean }
|
||||||
| { kind: "user"; ts: string; text: string }
|
| { kind: "user"; ts: string; text: string }
|
||||||
| { kind: "tool_call"; ts: string; name: string; input: unknown; toolUseId?: string }
|
| { kind: "tool_call"; ts: string; name: string; input: unknown; toolUseId?: string }
|
||||||
| { kind: "tool_result"; ts: string; toolUseId: string; content: string; isError: boolean }
|
| { kind: "tool_result"; ts: string; toolUseId: string; toolName?: string; content: string; isError: boolean }
|
||||||
| { kind: "init"; ts: string; model: string; sessionId: string }
|
| { kind: "init"; ts: string; model: string; sessionId: string }
|
||||||
| { kind: "result"; ts: string; text: string; inputTokens: number; outputTokens: number; cachedTokens: number; costUsd: number; subtype: string; isError: boolean; errors: string[] }
|
| { kind: "result"; ts: string; text: string; inputTokens: number; outputTokens: number; cachedTokens: number; costUsd: number; subtype: string; isError: boolean; errors: string[] }
|
||||||
| { kind: "stderr"; ts: string; text: string }
|
| { kind: "stderr"; ts: string; text: string }
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ export function parsePiStdoutLine(line: string, ts: string): TranscriptEntry[] {
|
|||||||
|
|
||||||
if (type === "tool_execution_end") {
|
if (type === "tool_execution_end") {
|
||||||
const toolCallId = asString(parsed.toolCallId);
|
const toolCallId = asString(parsed.toolCallId);
|
||||||
|
const toolName = asString(parsed.toolName);
|
||||||
const result = parsed.result;
|
const result = parsed.result;
|
||||||
const isError = parsed.isError === true;
|
const isError = parsed.isError === true;
|
||||||
const contentStr = typeof result === "string" ? result : JSON.stringify(result);
|
const contentStr = typeof result === "string" ? result : JSON.stringify(result);
|
||||||
@@ -138,6 +139,7 @@ export function parsePiStdoutLine(line: string, ts: string): TranscriptEntry[] {
|
|||||||
kind: "tool_result",
|
kind: "tool_result",
|
||||||
ts,
|
ts,
|
||||||
toolUseId: toolCallId || "unknown",
|
toolUseId: toolCallId || "unknown",
|
||||||
|
toolName,
|
||||||
content: contentStr,
|
content: contentStr,
|
||||||
isError,
|
isError,
|
||||||
}];
|
}];
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ export function normalizeTranscript(entries: TranscriptEntry[], streaming: boole
|
|||||||
type: "tool",
|
type: "tool",
|
||||||
ts: entry.ts,
|
ts: entry.ts,
|
||||||
endTs: entry.ts,
|
endTs: entry.ts,
|
||||||
name: "tool",
|
name: entry.toolName ?? "tool",
|
||||||
toolUseId: entry.toolUseId,
|
toolUseId: entry.toolUseId,
|
||||||
input: null,
|
input: null,
|
||||||
result: entry.content,
|
result: entry.content,
|
||||||
|
|||||||
Reference in New Issue
Block a user