} * @psalm-type OnboardingQuestionTree=array{start:string,questions:array} * @psalm-type McpToolLoadoutEntry=array{tool:\OCA\EducAI\Db\Tool,config:array} * @psalm-type BuiltInToolLoadoutEntry=array{name:string,config:array} * @psalm-type SplitToolLoadout=array{mcp:array,built_in:array} * @psalm-type BotToolAssignmentView=array{tool?:\OCA\EducAI\Db\Tool,tool_id:?int,builtin_name:?string,is_builtin:bool,config:array} * @psalm-type ToolAssignmentPayload=array{tool_id:?int,builtin_name:?string,is_builtin:bool,config:array} * @psalm-type MessageContext=array{attachments:array,document_source_ids:array,image_source_ids:array,attachment_only:bool} * @psalm-type MessageContextInput=array{attachments?:array,document_source_ids?:array,image_source_ids?:array,attachment_only?:bool} * @psalm-type AttachmentSummary=array{has_images:bool,has_audio:bool,has_room_documents:bool,has_room_images:bool,image_names:array,audio_names:array,document_names:array} * @psalm-type InvocationContext=array{bot_id:?int,room_token:?string,attachments:array,document_source_ids:array,image_source_ids:array} * @psalm-type InvocationContextInput=array{bot_id?:?int,room_token?:?string,attachments?:array,document_source_ids?:array,image_source_ids?:array} * @psalm-type ToolExecutionPolicy=array{kind:string,read_only:bool,idempotent:bool,destructive:bool,loop_threshold:int,source:string} * @psalm-type ToolDefinition=array{name:string,description:string,schema:array,policy?:ToolExecutionPolicy} * @psalm-type ToolMapEntry=array{tool:\OCA\EducAI\Db\Tool|null,config:array,definition:array,invokeName:string,policy?:ToolExecutionPolicy} * @psalm-type BuiltInToolMapEntry=array{name:string,definition:array,config:array,policy?:ToolExecutionPolicy} * @psalm-type ToolDefinitionBuildResult=array{definitions:array>,map:array,builtIn:array} * @psalm-type LlmToolCall=array{id:string,type:string,function:array{name:string,arguments:string}} */ final class TypeDefinitions { private function __construct() { } }