fix: handle direct array format for Pi tool results
Pi sometimes sends tool results as a direct array [{"type":"text","text":"..."}]
rather than wrapped in {"content": [...]}. Now handles both formats to
properly extract text content instead of showing raw JSON.
This commit is contained in:
@@ -145,13 +145,18 @@ export function parsePiStdoutLine(line: string, ts: string): TranscriptEntry[] {
|
|||||||
const result = parsed.result;
|
const result = parsed.result;
|
||||||
const isError = parsed.isError === true;
|
const isError = parsed.isError === true;
|
||||||
|
|
||||||
// Extract text from Pi's content array format: {"content": [{"type": "text", "text": "..."}]}
|
// Extract text from Pi's content array format
|
||||||
|
// Can be: {"content": [{"type": "text", "text": "..."}]} or [{"type": "text", "text": "..."}]
|
||||||
let contentStr: string;
|
let contentStr: string;
|
||||||
if (typeof result === "string") {
|
if (typeof result === "string") {
|
||||||
contentStr = result;
|
contentStr = result;
|
||||||
|
} else if (Array.isArray(result)) {
|
||||||
|
// Direct array format: result is [{"type": "text", "text": "..."}]
|
||||||
|
contentStr = extractTextContent(result as Array<{ type: string; text?: string }>);
|
||||||
} else if (result && typeof result === "object") {
|
} else if (result && typeof result === "object") {
|
||||||
const resultObj = result as Record<string, unknown>;
|
const resultObj = result as Record<string, unknown>;
|
||||||
if (Array.isArray(resultObj.content)) {
|
if (Array.isArray(resultObj.content)) {
|
||||||
|
// Wrapped format: result is {"content": [{"type": "text", "text": "..."}]}
|
||||||
contentStr = extractTextContent(resultObj.content as Array<{ type: string; text?: string }>);
|
contentStr = extractTextContent(resultObj.content as Array<{ type: string; text?: string }>);
|
||||||
} else {
|
} else {
|
||||||
contentStr = JSON.stringify(result);
|
contentStr = JSON.stringify(result);
|
||||||
|
|||||||
Reference in New Issue
Block a user