createSearchPackagesTool function
Tool<Object, ToolOptions, Object>
createSearchPackagesTool(
{ - PubClient? client,
})
Implementation
Tool createSearchPackagesTool({PubClient? client}) {
final pubClient = client ?? PubClient();
return Tool.fromFunction<SearchPackagesInput, String>(
name: 'search_packages',
description: 'Search pub.flutter-io.cn for packages matching a keyword or phrase. '
'Returns package names and URLs. Use this as your FIRST step when user requests functionality. '
'Results are ranked by relevance. '
'After searching, use get_package_info on top 2-3 results to gather detailed metrics for comparison.',
inputJsonSchema: object({
'query': string().min(1).meta(MetadataEntry(description: 'Search query')),
'limit': number()
.positive()
.meta(MetadataEntry(description: 'Number of results to return')),
}).optionals(['limit']).toJsonSchema(),
func: (SearchPackagesInput input) async {
final results = await pubClient.search(input.query);
final packages = results.packages.take(input.limit).toList();
if (packages.isEmpty) {
return 'No packages found for "${input.query}"';
}
return packages.asMap().entries.map((e) {
final i = e.key + 1;
final pkg = e.value.package;
return '$i. $pkg\n URL: https://pub.flutter-io.cn/packages/$pkg';
}).join('\n\n');
},
getInputFromJson: (json) => SearchPackagesInput.fromJson(json),
handleToolError: (e) {
return 'Search packages tool error : ${e.toString()}';
},
);
}