Add files via upload

This commit is contained in:
公明
2025-12-26 01:33:07 +08:00
committed by GitHub
parent 7585b9d603
commit cd48cfa67b
8 changed files with 149 additions and 21 deletions

View File

@@ -7,6 +7,7 @@ import (
"fmt"
"net/http"
"strings"
"unicode/utf8"
"time"
"cyberstrike-ai/internal/agent"
@@ -16,6 +17,47 @@ import (
"go.uber.org/zap"
)
// safeTruncateString 安全截断字符串,避免在 UTF-8 字符中间截断
func safeTruncateString(s string, maxLen int) string {
if maxLen <= 0 {
return ""
}
if utf8.RuneCountInString(s) <= maxLen {
return s
}
// 将字符串转换为 rune 切片以正确计算字符数
runes := []rune(s)
if len(runes) <= maxLen {
return s
}
// 截断到最大长度
truncated := string(runes[:maxLen])
// 尝试在标点符号或空格处截断,使截断更自然
// 在截断点往前查找合适的断点不超过20%的长度)
searchRange := maxLen / 5
if searchRange > maxLen {
searchRange = maxLen
}
breakChars := []rune(",。、 ,.;:!?/\\-_")
bestBreakPos := len(runes[:maxLen])
for i := bestBreakPos - 1; i >= bestBreakPos-searchRange && i >= 0; i-- {
for _, breakChar := range breakChars {
if runes[i] == breakChar {
bestBreakPos = i + 1 // 在标点符号后断开
goto found
}
}
}
found:
truncated = string(runes[:bestBreakPos])
return truncated + "..."
}
// AgentHandler Agent处理器
type AgentHandler struct {
agent *agent.Agent
@@ -74,10 +116,7 @@ func (h *AgentHandler) AgentLoop(c *gin.Context) {
// 如果没有对话ID创建新对话
conversationID := req.ConversationID
if conversationID == "" {
title := req.Message
if len(title) > 50 {
title = title[:50] + "..."
}
title := safeTruncateString(req.Message, 50)
conv, err := h.db.CreateConversation(title)
if err != nil {
h.logger.Error("创建对话失败", zap.Error(err))
@@ -237,10 +276,7 @@ func (h *AgentHandler) AgentLoopStream(c *gin.Context) {
// 如果没有对话ID创建新对话
conversationID := req.ConversationID
if conversationID == "" {
title := req.Message
if len(title) > 50 {
title = title[:50] + "..."
}
title := safeTruncateString(req.Message, 50)
conv, err := h.db.CreateConversation(title)
if err != nil {
h.logger.Error("创建对话失败", zap.Error(err))

View File

@@ -86,6 +86,7 @@ func (h *VulnerabilityHandler) GetVulnerability(c *gin.Context) {
func (h *VulnerabilityHandler) ListVulnerabilities(c *gin.Context) {
limitStr := c.DefaultQuery("limit", "50")
offsetStr := c.DefaultQuery("offset", "0")
id := c.Query("id")
conversationID := c.Query("conversation_id")
severity := c.Query("severity")
status := c.Query("status")
@@ -97,7 +98,7 @@ func (h *VulnerabilityHandler) ListVulnerabilities(c *gin.Context) {
limit = 50
}
vulnerabilities, err := h.db.ListVulnerabilities(limit, offset, conversationID, severity, status)
vulnerabilities, err := h.db.ListVulnerabilities(limit, offset, id, conversationID, severity, status)
if err != nil {
h.logger.Error("获取漏洞列表失败", zap.Error(err))
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})