mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-06-10 16:23:54 +02:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1ba5e57ec6 | |||
| 1216d25f96 | |||
| fde693408e | |||
| 352a81a869 | |||
| b2562b1010 | |||
| 0d8ba51087 | |||
| 0b847fcea3 | |||
| bf2f49fe62 | |||
| 75e64b1a86 | |||
| 2167735022 | |||
| 4ee292cc1f | |||
| 961205940f | |||
| ffe797bd06 | |||
| b6c864547e | |||
| da369c2edc | |||
| 54dc31a616 | |||
| 9e0b985221 |
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
# 前端显示的版本号(可选,不填则显示默认版本)
|
# 前端显示的版本号(可选,不填则显示默认版本)
|
||||||
version: "v1.6.12"
|
version: "v1.6.13"
|
||||||
# 服务器配置
|
# 服务器配置
|
||||||
server:
|
server:
|
||||||
host: 0.0.0.0 # 监听地址,0.0.0.0 表示监听所有网络接口
|
host: 0.0.0.0 # 监听地址,0.0.0.0 表示监听所有网络接口
|
||||||
|
|||||||
@@ -573,6 +573,8 @@ func runEinoADKAgentLoop(ctx context.Context, args *einoADKRunLoopArgs, baseMsgs
|
|||||||
var subAssistantBuf string
|
var subAssistantBuf string
|
||||||
var subReplyStreamID string
|
var subReplyStreamID string
|
||||||
var mainAssistantBuf string
|
var mainAssistantBuf string
|
||||||
|
// 已通过 response_delta 推到前端的正文(与 monitor.js normalizeStreamingDeltaJs 累积一致)
|
||||||
|
var mainAssistWireAccum string
|
||||||
var mainAssistDupTarget string // 非空表示本段主助手流需缓冲至 EOF,与 execute 输出比对去重
|
var mainAssistDupTarget string // 非空表示本段主助手流需缓冲至 EOF,与 execute 输出比对去重
|
||||||
var reasoningBuf string
|
var reasoningBuf string
|
||||||
var prevReasoningDisplay string // UI 用:剥离 Claude 内部 signature 尾缀后的累计展示
|
var prevReasoningDisplay string // UI 用:剥离 Claude 内部 signature 尾缀后的累计展示
|
||||||
@@ -681,6 +683,7 @@ func runEinoADKAgentLoop(ctx context.Context, args *einoADKRunLoopArgs, baseMsgs
|
|||||||
"einoAgent": ev.AgentName,
|
"einoAgent": ev.AgentName,
|
||||||
"orchestration": orchMode,
|
"orchestration": orchMode,
|
||||||
})
|
})
|
||||||
|
mainAssistWireAccum, _ = normalizeStreamingDelta(mainAssistWireAccum, contentDelta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if !streamsMainAssistant(ev.AgentName) {
|
} else if !streamsMainAssistant(ev.AgentName) {
|
||||||
@@ -726,21 +729,29 @@ func runEinoADKAgentLoop(ctx context.Context, args *einoADKRunLoopArgs, baseMsgs
|
|||||||
}
|
}
|
||||||
} else if s != "" {
|
} else if s != "" {
|
||||||
if progress != nil {
|
if progress != nil {
|
||||||
progress("response_start", "", map[string]interface{}{
|
// 仅用 TrimSpace 与 execute 比对;推到 UI 的必须是 mainAssistantBuf,
|
||||||
"conversationId": conversationID,
|
// 否则尾部空白/换行与已流式前缀不一致时,前端 normalize 会走拼接路径造成叠字。
|
||||||
"mcpExecutionIds": snapshotMCPIDs(),
|
_, eofTail := normalizeStreamingDelta(mainAssistWireAccum, mainAssistantBuf)
|
||||||
"messageGeneratedBy": "eino:" + ev.AgentName,
|
if eofTail != "" {
|
||||||
"einoRole": "orchestrator",
|
if !streamHeaderSent {
|
||||||
"einoAgent": ev.AgentName,
|
progress("response_start", "", map[string]interface{}{
|
||||||
"orchestration": orchMode,
|
"conversationId": conversationID,
|
||||||
})
|
"mcpExecutionIds": snapshotMCPIDs(),
|
||||||
progress("response_delta", s, map[string]interface{}{
|
"messageGeneratedBy": "eino:" + ev.AgentName,
|
||||||
"conversationId": conversationID,
|
"einoRole": "orchestrator",
|
||||||
"mcpExecutionIds": snapshotMCPIDs(),
|
"einoAgent": ev.AgentName,
|
||||||
"einoRole": "orchestrator",
|
"orchestration": orchMode,
|
||||||
"einoAgent": ev.AgentName,
|
})
|
||||||
"orchestration": orchMode,
|
}
|
||||||
})
|
progress("response_delta", eofTail, map[string]interface{}{
|
||||||
|
"conversationId": conversationID,
|
||||||
|
"mcpExecutionIds": snapshotMCPIDs(),
|
||||||
|
"einoRole": "orchestrator",
|
||||||
|
"einoAgent": ev.AgentName,
|
||||||
|
"orchestration": orchMode,
|
||||||
|
})
|
||||||
|
mainAssistWireAccum, _ = normalizeStreamingDelta(mainAssistWireAccum, eofTail)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lastAssistant = s
|
lastAssistant = s
|
||||||
runAccumulatedMsgs = append(runAccumulatedMsgs, schema.AssistantMessage(s, nil))
|
runAccumulatedMsgs = append(runAccumulatedMsgs, schema.AssistantMessage(s, nil))
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package multiagent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Eino execute 去重分支 EOF flush 须以 mainAssistantBuf 为基准计算 tail,
|
||||||
|
// 若误用 TrimSpace(mainAssistantBuf),会与已推前缀在空白处失配,normalize 走拼接路径叠字。
|
||||||
|
func TestNormalizeStreamingDelta_eofTailUsesRawBufNotTrim(t *testing.T) {
|
||||||
|
wireAccum := "phrase "
|
||||||
|
rawFull := "phrase \n"
|
||||||
|
_, tail := normalizeStreamingDelta(wireAccum, rawFull)
|
||||||
|
if want := "\n"; tail != want {
|
||||||
|
t.Fatalf("tail=%q want %q", tail, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
nextWrong, badTail := normalizeStreamingDelta(wireAccum, strings.TrimSpace(rawFull))
|
||||||
|
if badTail != "phrase" || nextWrong != "phrase phrase" {
|
||||||
|
t.Fatalf("trimmed full vs wire prefix mismatch should concat-append; got next=%q badTail=%q", nextWrong, badTail)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1885,6 +1885,14 @@ function handleStreamEvent(event, progressElement, progressId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 多代理模式下,迭代过程中的输出只显示在时间线中,不创建助手消息气泡
|
// 多代理模式下,迭代过程中的输出只显示在时间线中,不创建助手消息气泡
|
||||||
|
// 同一 progressId 再次 response_start 时先移除旧占位,避免多条「助手输出」卡片且仅最后一条收 delta
|
||||||
|
const prevStream = responseStreamStateByProgressId.get(progressId);
|
||||||
|
if (prevStream && prevStream.itemId) {
|
||||||
|
const oldItem = document.getElementById(prevStream.itemId);
|
||||||
|
if (oldItem && oldItem.parentNode) {
|
||||||
|
oldItem.parentNode.removeChild(oldItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
// 创建时间线条目用于显示迭代过程中的输出
|
// 创建时间线条目用于显示迭代过程中的输出
|
||||||
const title = einoMainStreamPlanningTitle(responseData);
|
const title = einoMainStreamPlanningTitle(responseData);
|
||||||
const itemId = addTimelineItem(timeline, 'thinking', {
|
const itemId = addTimelineItem(timeline, 'thinking', {
|
||||||
|
|||||||
Reference in New Issue
Block a user