1 Commits

Author SHA1 Message Date
Markus Hofstetter 5cd267296e fix: update tool-call extraction logic for Pi session JSONL
Refine parsing of assistant tool calls in review.sh to handle "toolCall" and "arguments" structures, aligning with Pi session format changes.
2026-06-13 14:47:06 +02:00
+10 -10
View File
@@ -266,8 +266,10 @@ if [ "${PI_DEBUG}" = "true" ]; then
TOOL_LOG="" TOOL_LOG=""
if [ -n "${SESSION_FILE}" ]; then if [ -n "${SESSION_FILE}" ]; then
# Extract tool-use entries: each line is a JSON object. # Extract tool-call entries from Pi session JSONL.
# Tool calls appear as messages with tool_use/function_call content. # Pi stores assistant messages with content blocks of type "toolCall"
# (NOT the Anthropic SDK's "tool_use"), using "arguments" (NOT "input").
# Tool results are separate entries with role "toolResult".
TOOL_LOG=$(node -e " TOOL_LOG=$(node -e "
const fs = require('fs'); const fs = require('fs');
const lines = fs.readFileSync('${SESSION_FILE}', 'utf8').trim().split('\n'); const lines = fs.readFileSync('${SESSION_FILE}', 'utf8').trim().split('\n');
@@ -275,20 +277,18 @@ if [ "${PI_DEBUG}" = "true" ]; then
for (const line of lines) { for (const line of lines) {
try { try {
const entry = JSON.parse(line); const entry = JSON.parse(line);
if (entry.type === 'message') { if (entry.type !== 'message') continue;
const msg = entry.message; const msg = entry.message;
// Model requesting tool use if (!msg || !msg.content) continue;
if (msg.role === 'assistant' && msg.content) {
const parts = Array.isArray(msg.content) ? msg.content : [msg.content]; const parts = Array.isArray(msg.content) ? msg.content : [msg.content];
for (const part of parts) { for (const part of parts) {
if (typeof part === 'object' && part.type === 'tool_use') { if (typeof part !== 'object') continue;
const input = part.input || {}; if (part.type === 'toolCall') {
const args = Object.entries(input).map(([k,v]) => k + '=' + JSON.stringify(v)).join(' '); const args = Object.entries(part.arguments || {})
.map(([k,v]) => k + '=' + JSON.stringify(v)).join(' ');
entries.push('[tool:' + part.name + '] ' + args); entries.push('[tool:' + part.name + '] ' + args);
} }
} }
}
}
} catch {} } catch {}
} }
console.log(entries.join('\n')); console.log(entries.join('\n'));