ToolResolver source of truth as praisonai tools list.
Quick Start
How Tools Are Discovered
ToolsDoctor delegates to ToolResolver.list_available_sources() — the same resolution chain that praisonai tools list and resolve() use at run time. This guarantees that the doctor’s counts and listings match what actually loads when agents run.
Bucket mapping:
Registered tools are now visible. As of PR #2642, tools registered via
ToolRegistry.register_function() and core SDK entry-point plugins appear in the doctor’s output. Previously they were silently omitted — they resolved correctly at runtime but were invisible to diagnostics.See ToolResolver.list_available_sources() and the source label table for full details.Fallback Behaviour
WhenToolResolver cannot be imported (e.g. the praisonai wrapper package is not installed), the doctor falls back to:
_get_builtin_tools()→ directpraisonaiagents.tools.TOOL_MAPPINGSscan (unsorted, legacy labels)_get_praisonai_tools_list()→ directpraisonai_toolsmodule scan (unsorted, legacy labels)
builtin and praisonai-tools sources, but misses the local, external (resolver-filtered), and registered buckets. Install the praisonai wrapper to get full resolver-backed diagnostics.
Python API
Diagnostic Results
Thediagnose() method returns a dictionary with:
builtin_tools and praisonai_tools_available are sorted alphabetically — matching praisonai tools list output order. The legacy fallback path returns them in dict-iteration order (unsorted).
Custom Tool Directories
The doctor checks these default directories for custom tools:~/.praison/tools(primary)~/.config/praison/tools(XDG-friendly)
Tool Dependencies
The doctor checks optional dependencies for known tools:Issue Severity Levels
Related
Tools Doctor CLI
Run diagnostics from the command line
Tool Resolver
list_available_sources() and source buckets
Tools
Source label table and CLI reference
Strict Tools Mode
Fail-fast dependency checking for templates

