#!/usr/bin/env python3
"""Read only this proof's native Pi session; display exact call names and results.
Usage: inspect-runtime.py <worktree> <thread-id>
No tool name, tool input, or result text is rewritten.
"""
import json, sqlite3, sys
from pathlib import Path
root, thread = sys.argv[1:]
c = sqlite3.connect(f'file:{root}/.t3/userdata/statev2.sqlite?mode=ro', uri=True)
row = c.execute('select payload_json from orchestration_v2_projection_provider_threads where thread_id=?', (thread,)).fetchone()
record = json.loads(row[0])
session = Path(record['nativeThreadRef']['nativeId'])
for line in session.read_text().splitlines():
    entry = json.loads(line)
    message = entry.get('message', {})
    if message.get('role') == 'assistant':
        for part in message.get('content', []):
            if part.get('type') == 'toolCall':
                print('toolCall.name =', part['name'])
                print('toolCall.id =', part['id'])
                print('arguments =', json.dumps(part['arguments']))
    if message.get('role') == 'toolResult':
        print('toolResult.toolName =', message.get('toolName'))
        print('isError =', message.get('isError'))
        for block in message.get('content', []):
            if block.get('type') != 'text': continue
            text = block['text']
            try:
                result = json.loads(text)
                # Print returned messages verbatim, omitting private model metadata.
                if 'items' not in result: print('structured tool result received (inventory omitted)')
                for item in result.get('items', []):
                    if 'text' in item: print('returned message =', item['text'])
            except (json.JSONDecodeError, TypeError):
                print(text)
