MCPcopy Create free account
hub / github.com/astercloud/aster / handleMessageSend

Method handleMessageSend

pkg/a2a/server.go:94–191  ·  view source on GitHub ↗

handleMessageSend 处理 message/send 方法

(ctx context.Context, agentID string, req *JSONRPCRequest)

Source from the content-addressed store, hash-verified

92
93// handleMessageSend 处理 message/send 方法
94func (s *Server) handleMessageSend(ctx context.Context, agentID string, req *JSONRPCRequest) *JSONRPCResponse {
95 // 解析参数
96 var params MessageSendParams
97 if err := parseParams(req.Params, &params); err != nil {
98 return NewErrorResponse(req.ID, ErrorCodeInvalidParams, err.Error(), nil)
99 }
100
101 // 获取或创建 Task
102 taskID := params.Message.TaskID
103 if taskID == "" {
104 taskID = generateID()
105 }
106
107 task, err := s.loadOrCreateTask(agentID, taskID, params.ContextID, params.Metadata)
108 if err != nil {
109 return NewErrorResponse(req.ID, ErrorCodeInternalError, err.Error(), nil)
110 }
111
112 // 添加用户消息到历史
113 task.AddMessage(params.Message)
114
115 // 更新状态为 working
116 task.UpdateStatus(TaskStateWorking, nil)
117 if err := s.taskStore.Save(agentID, task); err != nil {
118 return NewErrorResponse(req.ID, ErrorCodeInternalError, err.Error(), nil)
119 }
120
121 // 通过 Actor 系统发送消息
122 pid, exists := s.actorSystem.GetActor(agentID)
123 if !exists {
124 task.UpdateStatus(TaskStateFailed, &Message{
125 MessageID: generateID(),
126 Role: "agent",
127 Parts: []Part{{Kind: "text", Text: "agent not found: " + agentID}},
128 Kind: "message",
129 })
130 if err := s.taskStore.Save(agentID, task); err != nil {
131 a2aLog.Warn(ctx, "save task error", map[string]any{"error": err})
132 }
133 return NewErrorResponse(req.ID, ErrorCodeInternalError, "agent not found: "+agentID, nil)
134 }
135
136 // 提取文本内容
137 text := extractText(params.Message.Parts)
138
139 // 发送到 Agent Actor
140 result, err := pid.Request(&agent.ChatMsg{
141 Text: text,
142 Ctx: ctx,
143 ReplyTo: nil,
144 }, 30*time.Second)
145
146 if err != nil {
147 // 失败
148 task.UpdateStatus(TaskStateFailed, &Message{
149 MessageID: generateID(),
150 Role: "agent",
151 Parts: []Part{{Kind: "text", Text: fmt.Sprintf("agent error: %v", err)}},

Callers 1

HandleRequestMethod · 0.95

Calls 13

loadOrCreateTaskMethod · 0.95
parseParamsFunction · 0.85
NewErrorResponseFunction · 0.85
NewSuccessResponseFunction · 0.85
UpdateStatusMethod · 0.80
GetActorMethod · 0.80
generateIDFunction · 0.70
extractTextFunction · 0.70
ErrorMethod · 0.65
SaveMethod · 0.65
WarnMethod · 0.65
AddMessageMethod · 0.45

Tested by

no test coverage detected