persistToolResult method
Persist a tool result to disk and return information about the persisted file.
Implementation
Future<Object> persistToolResult(dynamic content, String toolUseId) async {
final isJson = content is List;
// Check for non-text content.
if (isJson) {
final hasNonTextContent = (content).any(
(block) => block is Map && block['type'] != 'text',
);
if (hasNonTextContent) {
return const PersistToolResultError(
error: 'Cannot persist tool results containing non-text content',
);
}
}
await ensureToolResultsDir();
final filepath = getToolResultPath(toolUseId, isJson: isJson);
final contentStr = isJson
? const JsonEncoder.withIndent(' ').convert(content)
: content.toString();
try {
final file = File(filepath);
if (!await file.exists()) {
await file.writeAsString(contentStr);
}
} catch (e) {
return PersistToolResultError(error: _getFileSystemErrorMessage(e));
}
final preview = generatePreview(contentStr, previewSizeBytes);
return PersistedToolResult(
filepath: filepath,
originalSize: contentStr.length,
isJson: isJson,
preview: preview.preview,
hasMore: preview.hasMore,
);
}