Files
ttstd-infinite-canvas/backend/internal/app/cloud_agent_continuation.go
ddCat d9abe41ceb feat(agent): Agent 工作台 - 计划插话记忆、统一模型选择器并修复摘要与视频入库
将计划清单、运行中插话和个人记忆接入云端 Agent;全站模型选择器统一为左右二级菜单。画布摘要按预算截断不再整轮拒绝,首页视频未知宽高可入库。README 补充贡献者 morrow。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 20:21:25 +08:00

76 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package app
import (
"strings"
"infinite-canvas/backend/internal/model"
)
// cloudAgentContinuationReply 生成「上一轮接着聊」用的两段内容:
//
// reply —— 上一轮 assistant 实际说过的话(作为 assistant 的历史消息)
// context —— 上一轮收束摘要(独立上下文,不能并进 reply)
//
// 只保留状态、失败原因和已提交生成任务,不把上一轮工具流水当成本轮目标。
func cloudAgentContinuationReply(task *model.Task, run *CloudAgentRun) (string, string, error) {
text := ""
if task.Status == model.TaskStatusSucceeded {
text = taskResultText(task.ResultJSON)
}
submitted := make([]string, 0)
seen := map[string]bool{}
addSubmitted := func(id string) {
id = strings.TrimSpace(id)
if id == "" || seen[id] {
return
}
seen[id] = true
submitted = append(submitted, id)
}
for _, event := range run.Events {
if event.Type == "assistant_message" {
text = stringValue(event.Payload["text"])
}
if event.Type == "generation_task_created" {
addSubmitted(stringValue(event.Payload["taskId"]))
}
if result, ok := event.Payload["result"].(map[string]any); ok {
if submittedFlag, _ := result["taskSubmitted"].(bool); submittedFlag {
addSubmitted(stringValue(result["taskId"]))
}
}
}
context := cloudAgentContinuationContext(run, submitted)
return text, context, nil
}
func cloudAgentContinuationContext(run *CloudAgentRun, submitted []string) string {
if run == nil {
return ""
}
failed := run.Status == "failed" || strings.TrimSpace(run.FailureMessage) != ""
if run.Status == "completed" && !failed && len(submitted) == 0 {
return ""
}
var b strings.Builder
b.WriteString("上一轮已结束(")
b.WriteString(firstNonEmpty(run.Status, "unknown"))
b.WriteString(")。本轮只执行当前用户消息,不要回头核对上一轮待办是否完成。")
if failed {
reason := strings.TrimSpace(run.FailureMessage)
if reason == "" {
reason = run.Status
}
b.WriteString(" 上一轮失败:")
b.WriteString(truncateRunes(reason, 240))
}
if len(submitted) > 0 {
if len(submitted) > 8 {
submitted = submitted[:8]
}
b.WriteString(" 已提交生成任务(不要重发):")
b.WriteString(strings.Join(submitted, ", "))
}
return b.String()
}