From 5c4e8cdfb36d1c0cbf66490013b34185f247dd70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Wed, 8 Jul 2026 15:22:36 +0800 Subject: [PATCH] Add files via upload --- internal/app/app.go | 14 +++++++------- internal/security/executor.go | 29 +++++++++++++++++++---------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index a1f783b8..564c3ddc 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -295,11 +295,11 @@ func New(cfg *config.Config, log *logger.Logger, configPath string) (*App, error return } - // 只有在没有索引时才自动重建 + // 冷启动:仅为尚无向量的知识项构建索引(与 IndexMissing 语义一致) log.Logger.Info("未检测到知识库索引,开始自动构建索引") ctx := context.Background() - if err := knowledgeIndexer.RebuildIndex(ctx); err != nil { - log.Logger.Warn("重建知识库索引失败", zap.Error(err)) + if err := knowledgeIndexer.IndexMissing(ctx); err != nil { + log.Logger.Warn("自动构建知识库索引失败", zap.Error(err)) } }() } @@ -1071,7 +1071,7 @@ func setupRoutes( }) return } - app.knowledgeHandler.RebuildIndex(c) + app.knowledgeHandler.StartIndex(c) }) knowledgeRoutes.POST("/scan", func(c *gin.Context) { if app.knowledgeHandler == nil { @@ -1961,11 +1961,11 @@ func initializeKnowledge( return } - // 只有在没有索引时才自动重建 + // 冷启动:仅为尚无向量的知识项构建索引(与 IndexMissing 语义一致) logger.Info("未检测到知识库索引,开始自动构建索引") ctx := context.Background() - if err := knowledgeIndexer.RebuildIndex(ctx); err != nil { - logger.Warn("重建知识库索引失败", zap.Error(err)) + if err := knowledgeIndexer.IndexMissing(ctx); err != nil { + logger.Warn("自动构建知识库索引失败", zap.Error(err)) } }() diff --git a/internal/security/executor.go b/internal/security/executor.go index fa8c157b..35b95b3a 100644 --- a/internal/security/executor.go +++ b/internal/security/executor.go @@ -407,6 +407,18 @@ func (e *Executor) buildCommandArgs(toolName string, toolConfig *config.ToolConf } } + formattedValue := e.formatParamValue(param, value) + if strings.TrimSpace(formattedValue) == "" { + if param.Required { + e.logger.Warn("必需参数为空", + zap.String("tool", toolName), + zap.String("param", param.Name), + ) + return []string{} + } + continue + } + format := param.Format if format == "" { format = "flag" // 默认格式 @@ -418,23 +430,20 @@ func (e *Executor) buildCommandArgs(toolName string, toolConfig *config.ToolConf if param.Flag != "" { cmdArgs = append(cmdArgs, param.Flag) } - formattedValue := e.formatParamValue(param, value) - if formattedValue != "" { - cmdArgs = append(cmdArgs, formattedValue) - } + cmdArgs = append(cmdArgs, formattedValue) case "combined": // --flag=value 或 -f=value if param.Flag != "" { - cmdArgs = append(cmdArgs, fmt.Sprintf("%s=%s", param.Flag, e.formatParamValue(param, value))) + cmdArgs = append(cmdArgs, fmt.Sprintf("%s=%s", param.Flag, formattedValue)) } else { - cmdArgs = append(cmdArgs, e.formatParamValue(param, value)) + cmdArgs = append(cmdArgs, formattedValue) } case "template": // 使用模板字符串 if param.Template != "" { template := param.Template template = strings.ReplaceAll(template, "{flag}", param.Flag) - template = strings.ReplaceAll(template, "{value}", e.formatParamValue(param, value)) + template = strings.ReplaceAll(template, "{value}", formattedValue) template = strings.ReplaceAll(template, "{name}", param.Name) cmdArgs = append(cmdArgs, strings.Fields(template)...) } else { @@ -442,14 +451,14 @@ func (e *Executor) buildCommandArgs(toolName string, toolConfig *config.ToolConf if param.Flag != "" { cmdArgs = append(cmdArgs, param.Flag) } - cmdArgs = append(cmdArgs, e.formatParamValue(param, value)) + cmdArgs = append(cmdArgs, formattedValue) } case "positional": // 位置参数(已在上面处理) - cmdArgs = append(cmdArgs, e.formatParamValue(param, value)) + cmdArgs = append(cmdArgs, formattedValue) default: // 默认:直接添加值 - cmdArgs = append(cmdArgs, e.formatParamValue(param, value)) + cmdArgs = append(cmdArgs, formattedValue) } }