Files
ai-agent/internal/ai/runtime/reply_helpers_test.go
T
mlogclub 34051a4631 feat: Enhance AI Agent and Channel Management
- Updated labels in the AI Agents dashboard for clarity, changing "流程状态" to "Playbook 状态" and "未发布流程" to "未发布 Playbook".
- Introduced AI Agent rollout percentage management in channel editing, allowing users to set and rollback rollout percentages.
- Added new API endpoints for rolling back AI Agent rollout and fetching agent run metrics.
- Implemented new UI components for displaying agent run details, including status, duration, and input/output tokens.
- Enhanced type definitions for AdminChannel and AIAgent to include rollout percentages and runtime modes.
- Updated navigation to include a section for agent runs.
- Added new translations for agent run features in both English and Chinese.
2026-07-25 12:04:06 +08:00

84 lines
2.6 KiB
Go

package runtime
import (
"testing"
applicationruntime "agent-desk/internal/ai/application/runtime"
"agent-desk/internal/models"
"agent-desk/internal/pkg/toolx"
)
func TestExtractRuntimeToolTraces(t *testing.T) {
summary := &applicationruntime.Summary{
TraceData: `{
"toolSearch": {"items": [{"targetToolCode":"mcp/server/tool_a"}]},
"graphTools": {"items": [{"toolCode":"` + toolx.GraphAnalyzeConversation.Code + `"}]}
}`,
}
if got := extractToolSearchTrace(summary); got == "" {
t.Fatalf("expected tool search trace")
}
if got := extractGraphToolTrace(summary); got == "" {
t.Fatalf("expected graph tool trace")
}
if got := firstGraphToolCode(summary); got != toolx.GraphAnalyzeConversation.Code {
t.Fatalf("unexpected graph tool code: %q", got)
}
}
func TestExtractInterruptMessageAndCheckpointError(t *testing.T) {
if got := extractInterruptMessage(`{"message":"请补充订单号"}`); got != "请补充订单号" {
t.Fatalf("unexpected interrupt message: %q", got)
}
if got := extractInterruptMessage("not-json"); got != "" {
t.Fatalf("expected empty message for invalid json, got %q", got)
}
err := fakeErr("Failed to load from checkpoint: record does not exist")
if !isCheckpointMissingError(err) {
t.Fatalf("expected checkpoint missing error to be detected")
}
if isCheckpointMissingError(fakeErr("other error")) {
t.Fatalf("expected unrelated error to be ignored")
}
}
func TestBuildConversationInterruptStoresWorkflowCheckpointData(t *testing.T) {
item := buildConversationInterrupt(testConversation(1), testMessage(2), testAIAgent(3), &applicationruntime.Summary{
CheckPointData: `{"confirmNodeId":"confirm_1"}`,
Interrupted: true,
WorkflowRunID: 99,
AgentRunID: 88,
Interrupts: []applicationruntime.InterruptContextSummary{
{Type: "human_confirm", ID: "confirm_1", InfoPreview: `{"message":"请确认"}`},
},
})
if item == nil {
t.Fatalf("expected interrupt item")
}
if item.RequestData != `{"confirmNodeId":"confirm_1"}` {
t.Fatalf("unexpected request data: %q", item.RequestData)
}
if item.WorkflowRunID != 99 || item.AgentRunID != 88 || item.WorkflowNodeID != "confirm_1" {
t.Fatalf("unexpected workflow interrupt identity: run=%d node=%q", item.WorkflowRunID, item.WorkflowNodeID)
}
}
type fakeErr string
func (e fakeErr) Error() string {
return string(e)
}
func testConversation(id int64) models.Conversation {
return models.Conversation{ID: id}
}
func testMessage(id int64) models.Message {
return models.Message{ID: id}
}
func testAIAgent(id int64) models.AIAgent {
return models.AIAgent{ID: id}
}