import { Context, Logger, Session } from "koishi"; import { z } from "zod"; /** * 扩展元数据 * @template TConfig - 扩展配置的Zod Schema类型 */ export interface ExtensionMetadata { /** 扩展的唯一名称,将用作配置键 */ name: string; /** 版本号 */ version: string; /** 扩展描述 */ description: string; /** 扩展的配置项目定义 (使用 Zod) */ schema?: TConfig; /** 作者 */ author?: string; /** 主页 */ homepage?: string; /** 仓库地址 */ repository?: string; /** 许可证 */ license?: string; /** 关键词 */ keywords?: string[]; } /** * 工具元数据 */ export interface ToolMetadata { /** 工具名称,在扩展内必须唯一 */ name: string; /** 工具描述 */ description: string; /** 版本号 */ version?: string; /** 作者 */ author?: string; /** 工具分类 */ category?: string; /** 标签 */ tags?: string[]; } /** * 工具执行上下文 * @template TConfig - 扩展的配置对象类型 */ export interface ToolContext { /** Koishi 上下文 */ koishiContext: Context; /** Koishi 会话 */ koishiSession: Session; /** 日志记录器 */ logger?: Logger; /** 该工具所属扩展的配置 */ extensionConfig: TConfig; } /** * 工具调用结果 */ export interface ToolCallResult { /** 是否成功 */ success: boolean; /** 返回结果 */ result?: TResult; /** 错误信息 */ error?: string; /** 附加元数据,如执行时间等 */ metadata?: Record; } /** * 工具定义 * @template TParams - 工具参数的Zod Schema类型 * @template TReturns - 工具返回值的类型 * @template TConfig - 扩展配置对象的类型 */ export interface ToolDefinition { name?: string; description?: string; version?: string; metadata?: ToolMetadata; parameters: TParams | { properties: { [key: string]: { type: StaticRange; description: string; }; }; }; execute: (params: z.infer, context: ToolContext) => Promise> | ToolCallResult; hooks?: { onRegister?: (context: ToolContext) => Promise | void; onUnregister?: (context: ToolContext) => Promise | void; onBeforeExecute?: (params: z.infer, context: ToolContext) => Promise | void; onAfterExecute?: (result: ToolCallResult, context: ToolContext) => Promise | void; onError?: (error: Error, context: ToolContext) => Promise | void; }; } /** * 扩展定义 * @template TConfig - 扩展配置的Zod Schema类型 */ export interface ExtensionDefinition { metadata: ExtensionMetadata; tools: ToolDefinition>[]; onLoad?: (ctx: Context, config: z.infer) => Promise; onUnload?: (ctx: Context) => Promise; } /** * 装饰器模式下的扩展类构造器接口 */ export interface ExtensionConstructor { new (...args: any[]): any; getExtensionDefinition(): ExtensionDefinition; } /** * 可执行的工具对象,为LLM格式化 */ export interface ExecutableTool { type: "function"; metadata: ToolMetadata; extensionMetadata?: ExtensionMetadata; function: { name: string; description: string; parameters: Record; }; execute: (params: z.infer, runtimeContext: Partial) => Promise>; } /** * 工具管理器配置 */ export interface ToolManagerConfig { autoLoad?: boolean; extensionPaths?: string[]; logLevel?: "debug" | "info" | "warn" | "error"; enableMetrics?: boolean; maxRetries?: number; timeout?: number; hotReload?: boolean; validateTypes?: boolean; } /** * 工具注册选项 */ export interface ToolRegistrationOptions { replace?: boolean; enableHooks?: boolean; extensionMetadata?: ExtensionMetadata; } /** * 工具错误类型 */ export declare enum ToolErrorType { NOT_FOUND = "TOOL_NOT_FOUND", VALIDATION_ERROR = "VALIDATION_ERROR", EXECUTION_ERROR = "EXECUTION_ERROR", TIMEOUT_ERROR = "TIMEOUT_ERROR", PERMISSION_ERROR = "PERMISSION_ERROR", LOAD_ERROR = "LOAD_ERROR", REGISTRATION_ERROR = "REGISTRATION_ERROR", CONFIG_ERROR = "CONFIG_ERROR" } /** * 工具错误类 */ export declare class ToolError extends Error { type: ToolErrorType; toolName?: string; originalError?: Error; constructor(type: ToolErrorType, message: string, toolName?: string, originalError?: Error); }