MCPcopy
hub / github.com/wavetermdev/waveterm / CreateToolUseData

Function CreateToolUseData

pkg/aiusechat/aiutil/aiutil.go:240–283  ·  view source on GitHub ↗

CreateToolUseData creates a UIMessageDataToolUse from tool call information

(toolCallID, toolName string, arguments string, chatOpts uctypes.WaveChatOpts)

Source from the content-addressed store, hash-verified

238
239// CreateToolUseData creates a UIMessageDataToolUse from tool call information
240func CreateToolUseData(toolCallID, toolName string, arguments string, chatOpts uctypes.WaveChatOpts) uctypes.UIMessageDataToolUse {
241 toolUseData := uctypes.UIMessageDataToolUse{
242 ToolCallId: toolCallID,
243 ToolName: toolName,
244 Status: uctypes.ToolUseStatusPending,
245 }
246
247 toolDef := chatOpts.GetToolDefinition(toolName)
248 if toolDef == nil {
249 toolUseData.Status = uctypes.ToolUseStatusError
250 toolUseData.ErrorMessage = "tool not found"
251 return toolUseData
252 }
253
254 var parsedArgs any
255 if err := json.Unmarshal([]byte(arguments), &parsedArgs); err != nil {
256 toolUseData.Status = uctypes.ToolUseStatusError
257 toolUseData.ErrorMessage = fmt.Sprintf("failed to parse tool arguments: %v", err)
258 return toolUseData
259 }
260
261 if toolDef.ToolCallDesc != nil {
262 toolUseData.ToolDesc = toolDef.ToolCallDesc(parsedArgs, nil, nil)
263 }
264
265 if toolDef.ToolApproval != nil {
266 toolUseData.Approval = toolDef.ToolApproval(parsedArgs)
267 }
268
269 if chatOpts.TabId != "" {
270 if argsMap, ok := parsedArgs.(map[string]any); ok {
271 if widgetId, ok := argsMap["widget_id"].(string); ok && widgetId != "" {
272 ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
273 defer cancelFn()
274 fullBlockId, err := wcore.ResolveBlockIdFromPrefix(ctx, chatOpts.TabId, widgetId)
275 if err == nil {
276 toolUseData.BlockId = fullBlockId
277 }
278 }
279 }
280 }
281
282 return toolUseData
283}
284
285// SendToolProgress sends tool progress updates via SSE if the tool has a progress descriptor
286func SendToolProgress(toolCallID, toolName string, jsonData []byte, chatOpts uctypes.WaveChatOpts, sseHandler *sse.SSEHandlerCh, usePartialParse bool) {

Callers 1

processAllToolCallsFunction · 0.92

Calls 2

ResolveBlockIdFromPrefixFunction · 0.92
GetToolDefinitionMethod · 0.80

Tested by

no test coverage detected