{"version":3,"file":"dep-ac45875e.mjs","sources":["../../../pro-components/chat/chat-engine/components/toolcall/types.ts","../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import type { DefineComponent } from 'vue';\n\n/**\n * 智能体可交互组件的标准 Props 接口\n */\nexport interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {\n  /** 组件的当前渲染状态 */\n  status: 'idle' | 'executing' | 'complete' | 'error';\n  /** Agent 调用时传入的初始参数 */\n  args: TArgs;\n  /** 当 status 为 'complete' 时，包含 Toolcall 的最终执行结果 */\n  result?: TResult;\n  /** 当 status 为 'error' 时，包含错误信息 */\n  error?: Error;\n  /**\n   * 【交互核心】一个回调函数，用于将用户的交互结果返回给宿主环境。\n   * 仅在\"交互式\"场景下由宿主提供。\n   */\n  respond?: (response: TResponse) => void;\n  agentState?: Record<string, any>;\n}\n\n// 场景一：非交互式 Toolcall 的配置 (有 handler)\ninterface NonInteractiveToolcallConfig<TArgs extends object, TResult> {\n  name: string;\n  description?: string;\n  parameters?: Array<{ name: string; type: string; required?: boolean }>;\n  /** 业务逻辑执行器，支持可选的后端结果作为第二个参数 */\n  handler: (args: TArgs, backendResult?: any) => Promise<TResult>;\n  /** 状态显示组件 */\n  component: DefineComponent<ToolcallComponentProps<TArgs, TResult>>;\n  /** 订阅statekey提取函数 */\n  subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 场景二：交互式 Toolcall 的配置 (无 handler)\ninterface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {\n  name: string;\n  description: string;\n  parameters?: Array<{ name: string; type: string; required?: boolean }>;\n  /** 交互式UI组件 */\n  component: DefineComponent<ToolcallComponentProps<TArgs, TResult, TResponse>>;\n  /** handler 属性不存在，以此作为区分标志 */\n  handler?: never;\n  /** 订阅statekey提取函数 */\n  subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 最终的配置类型\nexport type AgentToolcallConfig<TArgs extends object = any, TResult = any, TResponse = any> =\n  | NonInteractiveToolcallConfig<TArgs, TResult>\n  | InteractiveToolcallConfig<TArgs, TResult, TResponse>;\n\n// 类型守卫：判断是否为非交互式配置\nexport function isNonInteractive<TArgs extends object, TResult>(\n  config: AgentToolcallConfig<TArgs, TResult, any>,\n): config is NonInteractiveToolcallConfig<TArgs, TResult> {\n  return typeof (config as any).handler === 'function';\n}\n\n// Agent Toolcall 注册表\nexport interface AgentToolcallRegistry {\n  [ToolcallName: string]: AgentToolcallConfig;\n}\n\n// 内部状态管理\nexport interface AgentToolcallState<TArgs extends object = any, TResult = any> {\n  status: ToolcallComponentProps['status'];\n  args?: TArgs;\n  result?: TResult;\n  error?: Error;\n}\n\n// 类型守卫函数\nexport const isNonInteractiveConfig = (cfg: AgentToolcallConfig): cfg is AgentToolcallConfig & { handler: Function } =>\n  typeof (cfg as any).handler === 'function';\n","import { defineComponent, ref, computed, watch, h, type Ref } from 'vue';\nimport { AGUIEventType, type ToolCall } from 'tdesign-web-components/lib/chat-engine';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry, TOOLCALL_REGISTERED_EVENT, TOOLCALL_EVENT_DETAIL_KEY } from './registry';\nimport { ComponentErrorBoundary, useRegistrationListener } from '../shared';\nimport { useAgentStateDataByKey } from '../../hooks/useAgentState';\n\ninterface ToolCallRendererProps {\n  toolCall: ToolCall;\n  onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\nexport default defineComponent({\n  name: 'ToolCallRenderer',\n  props: {\n    toolCall: {\n      type: Object as () => ToolCall,\n      required: true,\n    },\n    onRespond: {\n      type: Function as unknown as () => (toolCall: ToolCall, response: any) => void,\n      default: undefined,\n    },\n  },\n  setup(props: ToolCallRendererProps) {\n    const actionState: Ref<{\n      status: ToolcallComponentProps['status'];\n      result?: any;\n      error?: Error;\n    }> = ref({\n      status: 'idle',\n    });\n\n    // 缓存配置获取\n    const config = computed(() => {\n      return agentToolcallRegistry.get(props.toolCall.toolCallName);\n    });\n\n    // 使用公共 Hook 监听动态注册\n    const { MemoizedComponent } = useRegistrationListener({\n      componentKey: computed(() => props.toolCall.toolCallName),\n      eventName: TOOLCALL_REGISTERED_EVENT,\n      eventDetailKey: TOOLCALL_EVENT_DETAIL_KEY,\n      getRenderFunction: agentToolcallRegistry.getRenderFunction,\n    });\n\n    // 缓存参数解析\n    const args = computed(() => {\n      try {\n        return props.toolCall.args ? JSON.parse(props.toolCall.args) : {};\n      } catch (error) {\n        console.error('解析工具调用参数失败:', error);\n        return {};\n      }\n    });\n\n    const handleRespond = (response: any) => {\n      if (props.onRespond) {\n        props.onRespond(props.toolCall, response);\n        // 使用对象展开确保触发响应式更新\n        actionState.value = {\n          ...actionState.value,\n          status: 'complete',\n          result: response,\n        };\n      }\n    };\n\n    // 执行 handler（如果存在）\n    watch(\n      () => [config.value, args.value, props.toolCall.result, props.toolCall.eventType],\n      async () => {\n        if (!config.value) return;\n\n        if (isNonInteractiveConfig(config.value)) {\n          // 非交互式：执行 handler\n          try {\n            actionState.value = { status: 'executing' };\n\n            // 解析后端返回的结果作为 handler 的第二个参数\n            let backendResult;\n            if (props.toolCall.result) {\n              try {\n                backendResult = JSON.parse(props.toolCall.result);\n              } catch (error) {\n                console.warn('解析后端结果失败，使用原始字符串:', error);\n                backendResult = props.toolCall.result;\n              }\n            }\n\n            // 调用 handler，传入 args 和 backendResult\n            const result = await config.value.handler(args.value, backendResult);\n            actionState.value = {\n              status: 'complete',\n              result,\n            };\n          } catch (error) {\n            actionState.value = {\n              status: 'error',\n              error: error as Error,\n            };\n          }\n        } else if (props.toolCall.result) {\n          // 交互式：已有结果，显示完成状态\n          try {\n            const result = JSON.parse(props.toolCall.result);\n            actionState.value = {\n              status: 'complete',\n              result,\n            };\n          } catch (error) {\n            actionState.value = {\n              status: 'error',\n              error: error as Error,\n            };\n          }\n        } else if (\n          props.toolCall.eventType === AGUIEventType.TOOL_CALL_END ||\n          props.toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT\n        ) {\n          // 工具调用已结束（无 result 的情况，如 show_progress）\n          actionState.value = { status: 'complete' };\n        } else {\n          // 等待用户交互或工具执行中\n          actionState.value = { status: 'executing' };\n        }\n      },\n      { immediate: true },\n    );\n\n    // 从配置中获取 subscribeKey 提取函数\n    const subscribeKeyExtractor = computed(() => config.value?.subscribeKey);\n\n    // 使用配置的提取函数来获取 targetStateKey\n    const targetStateKey = computed(() => {\n      if (!subscribeKeyExtractor.value) return undefined;\n\n      // 构造完整的 props 对象传给提取函数\n      const fullProps = {\n        status: actionState.value.status,\n        args: args.value,\n        result: actionState.value.result,\n        error: actionState.value.error,\n        respond: handleRespond,\n      };\n\n      return subscribeKeyExtractor.value(fullProps);\n    });\n\n    // 使用精确订阅\n    const agentState = useAgentStateDataByKey(targetStateKey);\n\n    // 缓存组件 props\n    const componentProps = computed<ToolcallComponentProps>(() => ({\n      status: actionState.value.status,\n      args: args.value,\n      result: actionState.value.result,\n      error: actionState.value.error,\n      respond: handleRespond,\n      agentState: agentState.value,\n    }));\n\n    return () => {\n      if (!MemoizedComponent.value) {\n        return null;\n      }\n\n      return (\n        <ComponentErrorBoundary componentName={props.toolCall.toolCallName} logPrefix=\"ToolCallRenderer\">\n          {h(MemoizedComponent.value, componentProps.value)}\n        </ComponentErrorBoundary>\n      );\n    };\n  },\n});\n"],"names":["isNonInteractive","config","handler","isNonInteractiveConfig","cfg","_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","props","toolCall","type","required","onRespond","Function","setup","actionState","ref","status","computed","agentToolcallRegistry","get","toolCallName","_useRegistrationListe","useRegistrationListener","componentKey","eventName","TOOLCALL_REGISTERED_EVENT","eventDetailKey","TOOLCALL_EVENT_DETAIL_KEY","getRenderFunction","MemoizedComponent","args","JSON","parse","error","console","handleRespond","response","value","_objectSpread","result","watch","eventType","_asyncToGenerator","_regeneratorRuntime","mark","_callee","backendResult","_result","_t","wrap","_context","prev","next","abrupt","warn","AGUIEventType","TOOL_CALL_END","TOOL_CALL_RESULT","stop","immediate","subscribeKeyExtractor","_config$value","subscribeKey","targetStateKey","fullProps","respond","agentState","useAgentStateDataByKey","componentProps","_slot","_createVNode","ComponentErrorBoundary","h"],"mappings":"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"}