handleTasksCancel 处理 tasks/cancel 方法
(_ context.Context, agentID string, req *JSONRPCRequest)
| 214 | |
| 215 | // handleTasksCancel 处理 tasks/cancel 方法 |
| 216 | func (s *Server) handleTasksCancel(_ context.Context, agentID string, req *JSONRPCRequest) *JSONRPCResponse { |
| 217 | var params TasksCancelParams |
| 218 | if err := parseParams(req.Params, ¶ms); err != nil { |
| 219 | return NewErrorResponse(req.ID, ErrorCodeInvalidParams, err.Error(), nil) |
| 220 | } |
| 221 | |
| 222 | task, err := s.taskStore.Load(agentID, params.TaskID) |
| 223 | if err != nil { |
| 224 | return NewErrorResponse(req.ID, ErrorCodeTaskNotFound, err.Error(), nil) |
| 225 | } |
| 226 | |
| 227 | // 检查是否可以取消 |
| 228 | if task.IsFinalState() { |
| 229 | return NewSuccessResponse(req.ID, &TasksCancelResult{ |
| 230 | Success: false, |
| 231 | Message: "Task is already in final state", |
| 232 | }) |
| 233 | } |
| 234 | |
| 235 | // 设置取消信号 |
| 236 | s.taskStore.AddCancellation(params.TaskID) |
| 237 | |
| 238 | // 更新任务状态 |
| 239 | task.UpdateStatus(TaskStateCanceled, &Message{ |
| 240 | MessageID: generateID(), |
| 241 | Role: "agent", |
| 242 | Parts: []Part{{Kind: "text", Text: "Task canceled by request."}}, |
| 243 | Kind: "message", |
| 244 | }) |
| 245 | |
| 246 | if err := s.taskStore.Save(agentID, task); err != nil { |
| 247 | a2aLog.Warn(context.Background(), "save task error", map[string]any{"error": err}) |
| 248 | } |
| 249 | |
| 250 | return NewSuccessResponse(req.ID, &TasksCancelResult{ |
| 251 | Success: true, |
| 252 | Message: "Task canceled successfully", |
| 253 | }) |
| 254 | } |
| 255 | |
| 256 | // loadOrCreateTask 加载或创建任务 |
| 257 | func (s *Server) loadOrCreateTask(agentID, taskID, contextID string, metadata Metadata) (*Task, error) { |
no test coverage detected