{"version":3,"file":"useAgentToolcall.mjs","sources":["../../../../pro-components/chat/chat-engine/hooks/useAgentToolcall.ts"],"sourcesContent":["import { ref, onMounted, onUnmounted, watch, type Ref } from 'vue';\nimport type { AgentToolcallConfig, ToolcallComponentProps } from '../components/toolcall/types';\nimport { agentToolcallRegistry } from '../components/toolcall/registry';\n\nexport interface UseAgentToolcallReturn {\n  register: (config: AgentToolcallConfig | AgentToolcallConfig[]) => void;\n  unregister: (names: string | string[]) => void;\n  isRegistered: (name: string) => boolean;\n  getRegistered: () => string[];\n  config: Ref<any>;\n}\n\n/**\n * 统一的、智能的 Agent Toolcall 适配器 Hook，\n * 注册管理：负责工具配置的注册、取消注册、状态跟踪；生命周期管理：自动清理、防止内存泄漏\n * 支持两种使用模式：\n * 1. 自动注册模式：传入配置，自动注册和清理\n * 2. 手动注册模式：不传配置或传入null，返回注册方法由业务控制\n */\nexport function useAgentToolcall<TArgs extends object = any, TResult = any, TResponse = any>(\n  config?:\n    | AgentToolcallConfig<TArgs, TResult, TResponse>\n    | AgentToolcallConfig<TArgs, TResult, TResponse>[]\n    | null\n    | undefined,\n): UseAgentToolcallReturn {\n  const registeredNamesRef = ref<Set<string>>(new Set());\n  const autoRegisteredNamesRef = ref<Set<string>>(new Set());\n  const configRef = ref(config);\n\n  // 手动注册方法\n  const register = (newConfig: AgentToolcallConfig | AgentToolcallConfig[]) => {\n    if (!newConfig) {\n      console.warn('[useAgentToolcall] 配置为空，跳过注册');\n      return;\n    }\n\n    const configs = Array.isArray(newConfig) ? newConfig : [newConfig];\n\n    configs.forEach((cfg) => {\n      if (agentToolcallRegistry.get(cfg.name)) {\n        console.warn(`[useAgentToolcall] 配置名称 \"${cfg.name}\" 已存在于注册表中，将被覆盖`);\n      }\n\n      agentToolcallRegistry.register(cfg);\n      registeredNamesRef.value.add(cfg.name);\n    });\n  };\n\n  // 手动取消注册方法\n  const unregister = (names: string | string[]) => {\n    const nameArray = Array.isArray(names) ? names : [names];\n\n    nameArray.forEach((name) => {\n      agentToolcallRegistry.unregister(name);\n      registeredNamesRef.value.delete(name);\n      autoRegisteredNamesRef.value.delete(name);\n    });\n  };\n\n  // 检查是否已注册\n  const isRegistered = (name: string) => registeredNamesRef.value.has(name) || autoRegisteredNamesRef.value.has(name);\n\n  // 获取所有已注册的配置名称\n  const getRegistered = () => Array.from(new Set([...registeredNamesRef.value, ...autoRegisteredNamesRef.value]));\n\n  // 自动注册逻辑（当传入配置时）\n  onMounted(() => {\n    if (!config) {\n      return;\n    }\n\n    const configs = Array.isArray(config) ? config : [config];\n    configs.forEach((cfg) => {\n      if (agentToolcallRegistry.get(cfg.name)) {\n        console.warn(`[useAgentToolcall] 配置名称 \"${cfg.name}\" 已存在于注册表中，将被覆盖`);\n      }\n\n      agentToolcallRegistry.register(cfg);\n      autoRegisteredNamesRef.value.add(cfg.name);\n    });\n  });\n\n  onUnmounted(() => {\n    if (!config) {\n      return;\n    }\n\n    const configs = Array.isArray(config) ? config : [config];\n    // 清理函数：取消注册自动注册的配置\n    configs.forEach((cfg) => {\n      agentToolcallRegistry.unregister(cfg.name);\n      autoRegisteredNamesRef.value.delete(cfg.name);\n    });\n  });\n\n  // 监听配置变化\n  watch(\n    () => config,\n    (newConfig) => {\n      // 更新配置引用\n      configRef.value = newConfig;\n    },\n    { deep: true },\n  );\n\n  return {\n    register,\n    unregister,\n    isRegistered,\n    getRegistered,\n    config: configRef,\n  };\n}\n\n// 创建带状态感知的工具配置（带状态变化事件），状态注入，自动为组件注入 agentState\nexport interface ToolConfigWithStateOptions<TArgs extends object = any, TResult = any> {\n  name: string;\n  description: string;\n  parameters: Array<{ name: string; type: string }>;\n  subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n  component: new (props: ToolcallComponentProps<TArgs, TResult> & { agentState?: Record<string, any> }) => any;\n}\n"],"names":["useAgentToolcall","config","registeredNamesRef","ref","Set","autoRegisteredNamesRef","configRef","register","newConfig","console","warn","configs","Array","isArray","forEach","cfg","agentToolcallRegistry","get","name","concat","value","add","unregister","names","nameArray","isRegistered","has","getRegistered","from","_toConsumableArray","onMounted","onUnmounted","watch","deep"],"mappings":"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"}