@@ -17,6 +17,7 @@ import (
1717 "time"
1818
1919 "github.com/google/uuid"
20+ "github.com/wavetermdev/waveterm/pkg/aiusechat/aiutil"
2021 "github.com/wavetermdev/waveterm/pkg/aiusechat/chatstore"
2122 "github.com/wavetermdev/waveterm/pkg/aiusechat/uctypes"
2223 "github.com/wavetermdev/waveterm/pkg/secretstore"
@@ -239,7 +240,7 @@ func GetChatUsage(chat *uctypes.AIChat) uctypes.AIUsage {
239240 return usage
240241}
241242
242- func updateToolUseDataInChat (backend UseChatBackend , chatOpts uctypes.WaveChatOpts , toolCallID string , toolUseData * uctypes.UIMessageDataToolUse ) {
243+ func updateToolUseDataInChat (backend UseChatBackend , chatOpts uctypes.WaveChatOpts , toolCallID string , toolUseData uctypes.UIMessageDataToolUse ) {
243244 if err := backend .UpdateToolUseData (chatOpts .ChatId , toolCallID , toolUseData ); err != nil {
244245 log .Printf ("failed to update tool use data in chat: %v\n " , err )
245246 }
@@ -279,7 +280,7 @@ func processToolCallInternal(backend UseChatBackend, toolCall uctypes.WaveToolCa
279280 }
280281 // ToolVerifyInput can modify the toolusedata. re-send it here.
281282 _ = sseHandler .AiMsgData ("data-tooluse" , toolCall .ID , * toolCall .ToolUseData )
282- updateToolUseDataInChat (backend , chatOpts , toolCall .ID , toolCall .ToolUseData )
283+ updateToolUseDataInChat (backend , chatOpts , toolCall .ID , * toolCall .ToolUseData )
283284 }
284285
285286 if toolCall .ToolUseData .Approval == uctypes .ApprovalNeedsApproval {
@@ -308,7 +309,7 @@ func processToolCallInternal(backend UseChatBackend, toolCall uctypes.WaveToolCa
308309
309310 // this still happens here because we need to update the FE to say the tool call was approved
310311 _ = sseHandler .AiMsgData ("data-tooluse" , toolCall .ID , * toolCall .ToolUseData )
311- updateToolUseDataInChat (backend , chatOpts , toolCall .ID , toolCall .ToolUseData )
312+ updateToolUseDataInChat (backend , chatOpts , toolCall .ID , * toolCall .ToolUseData )
312313 }
313314
314315 toolCall .ToolUseData .RunTs = time .Now ().UnixMilli ()
@@ -344,7 +345,7 @@ func processToolCall(backend UseChatBackend, toolCall uctypes.WaveToolCall, chat
344345
345346 if toolCall .ToolUseData != nil {
346347 _ = sseHandler .AiMsgData ("data-tooluse" , toolCall .ID , * toolCall .ToolUseData )
347- updateToolUseDataInChat (backend , chatOpts , toolCall .ID , toolCall .ToolUseData )
348+ updateToolUseDataInChat (backend , chatOpts , toolCall .ID , * toolCall .ToolUseData )
348349 }
349350
350351 return result
@@ -356,17 +357,27 @@ func processToolCalls(backend UseChatBackend, stopReason *uctypes.WaveStopReason
356357 defer activeToolMap .Delete (toolCall .ID )
357358 }
358359
359- // Send all data-tooluse packets at the beginning
360- for _ , toolCall := range stopReason .ToolCalls {
361- if toolCall .ToolUseData != nil {
362- log .Printf ("AI data-tooluse %s\n " , toolCall .ID )
363- _ = sseHandler .AiMsgData ("data-tooluse" , toolCall .ID , * toolCall .ToolUseData )
364- updateToolUseDataInChat (backend , chatOpts , toolCall .ID , toolCall .ToolUseData )
365- if toolCall .ToolUseData .Approval == uctypes .ApprovalNeedsApproval && chatOpts .RegisterToolApproval != nil {
366- chatOpts .RegisterToolApproval (toolCall .ID )
360+ // Create and send all data-tooluse packets at the beginning
361+ for i := range stopReason .ToolCalls {
362+ toolCall := & stopReason .ToolCalls [i ]
363+ // Create toolUseData from the tool call input
364+ var argsJSON string
365+ if toolCall .Input != nil {
366+ argsBytes , err := json .Marshal (toolCall .Input )
367+ if err == nil {
368+ argsJSON = string (argsBytes )
367369 }
368370 }
371+ toolUseData := aiutil .CreateToolUseData (toolCall .ID , toolCall .Name , argsJSON , chatOpts )
372+ stopReason .ToolCalls [i ].ToolUseData = & toolUseData
373+ log .Printf ("AI data-tooluse %s\n " , toolCall .ID )
374+ _ = sseHandler .AiMsgData ("data-tooluse" , toolCall .ID , toolUseData )
375+ updateToolUseDataInChat (backend , chatOpts , toolCall .ID , toolUseData )
376+ if toolUseData .Approval == uctypes .ApprovalNeedsApproval && chatOpts .RegisterToolApproval != nil {
377+ chatOpts .RegisterToolApproval (toolCall .ID )
378+ }
369379 }
380+ // At this point, all ToolCalls are guaranteed to have non-nil ToolUseData
370381
371382 var toolResults []uctypes.AIToolResult
372383 for _ , toolCall := range stopReason .ToolCalls {
0 commit comments