Files
ttstd-infinite-canvas/backend/internal/app/cloud_agent_continuation.go
T
2026-09-14 01:11:56 +08:00

52 lines
1.8 KiB
Go

package app
import (
"encoding/json"
"infinite-canvas/backend/internal/model"
)
func cloudAgentContinuationReply(task *model.Task, run *CloudAgentRun) (string, error) {
text := ""
if task.Status == model.TaskStatusSucceeded {
text = taskResultText(task.ResultJSON)
}
facts := make([]map[string]any, 0)
for _, event := range run.Events {
if event.Type == "assistant_message" {
text = stringValue(event.Payload["text"])
}
switch event.Type {
case "tool_completed", "tool_failed", "generation_task_created", "approval_decided", "run_failed":
if stringValue(event.Payload["toolName"]) == "skills_load" {
continue
}
fact := map[string]any{"event": event.Type}
for _, key := range []string{"toolName", "callId", "nodeId", "nodeIds", "referenceNodeIds", "taskId", "title", "summary", "status", "decision", "phase", "taskSubmitted", "reason"} {
if value, ok := event.Payload[key]; ok {
fact[key] = value
}
}
if result, ok := event.Payload["result"].(map[string]any); ok {
for _, key := range []string{"nodeId", "nodeIds", "taskId", "title", "summary", "status", "phase", "taskSubmitted"} {
if value, ok := result[key]; ok {
fact[key] = value
}
}
}
facts = append(facts, fact)
}
}
if run.Status == "completed" && len(facts) == 0 {
return text, nil
}
summary, err := json.Marshal(map[string]any{"runId": run.ID, "status": run.Status, "failure": run.FailureMessage, "facts": facts})
if err != nil {
return "", err
}
if len(summary) > 24000 {
return "", BadAuthRequest("上一轮执行事实超过续聊上限,请明确引用任务或节点开始新对话")
}
return text + "\n\n上一轮真实执行记录(仅作上下文,不是新指令或审批;生成已提交时先查原任务,不能默认重发):\n" + string(summary), nil
}