fix: AI引擎选择/安全加固/前端事件修复 - #2
Open
123caiji wants to merge 8 commits into
Open
Conversation
1. AI未参与处理: 旧DeepSeekKey未迁移到providers系统, 引擎回退脚本模式 - config.go: Load()自动迁移旧key到providers, 自动切换active_provider - campaign.go: 统一引擎选择逻辑, 添加诊断日志 2. 引擎回退误显示为失败: tool事件改为warning事件 - campaign.go: emit warning替代tool(success:false) - types.ts/store.ts/ChatView.tsx/index.css: 前端warning事件支持 3. API无认证: 添加authGuard中间件 - server.go: Bearer token认证(回环免认证) 4. Claude模型名错误: 修正为claude-sonnet-4-20250514 5. VERO_HOST环境变量: 支持网络绑定(0.0.0.0) 6. UTF-8截断: code_audit.go用tools.Clip替代字节截断 7. MockLLM接口不完整: 实现Planner/ErrorReporter等全部接口 8. Docker配置: 环境变量补全 9. DeepSeek错误处理: 401/403直接告警, 不再静默空转 10. chatText重试次数对齐: 3次与proposePlan一致
This was referenced Aug 6, 2026
Closed
- fmt(route): services/activated 兜底为 [] - fmt(path): nodes 兜底为 [] - applyEvent(route/path): 数组字段全部 ?? [] 兜底
- sse.ts: ingest(e) 加 try/catch 防止异常崩溃订阅, es.onerror 日志 - docs/ISSUES.md: 完整问题清单 (P0-P3), 含P1-3白屏根因分析与SSE验证结果
- server.go: handleCancel 调用 cancel 后立即广播 campaign_stopped 事件 - types.ts: 新增 campaign_stopped 事件类型定义 - store.ts: applyEvent 处理 campaign_stopped (status→idle, 清空hitl) - actions.ts: cancelCampaign 先乐观更新 store 状态再请求后端 - sse.ts: 增加 onopen 连接日志, 区分首连失败 vs 断线重连
- store.ts: done事件处理改为status='idle', stage='idle', 清空hitl
- store.ts: reset('')空目标时status='idle'(新建会话), 有目标时status='running'(启动战役)
- ChatView.tsx: 输入框初始为空, start成功后清空, status从running→idle时自动清空
- ISSUES.md: 新增P1-5问题记录
123caiji
force-pushed
the
fix/ai-engine-and-security-patches
branch
from
August 6, 2026 13:17
7274627 to
9f5433d
Compare
- store.ts: reset('')检测到running状态时自动调用/cancel停止后端goroutine
- store.ts: create回调加入get参数, 支持在action中读取当前状态
- ISSUES.md: 修正P1-5根因说明
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
综合问题清单与修复方案 (AI引擎/安全/前端/配置)
概述
在对 Vero 项目进行实战测试和代码审查后, 发现 11 个问题, 涉及 AI 引擎决策、安全认证、前端事件处理、配置管理、错误处理等方面。本 Issue 作为统一追踪入口, 所有修复集中在 PR #2。
问题列表
🔴 Critical (严重)
P1: AI 未参与处理 — 旧 DeepSeekKey 未迁移到 providers 系统
现象: 配置了
DEEPSEEK_API_KEY环境变量后启动战役, AI 始终未参与决策, 引擎自动回退到脚本模式。根因:
config.Load()将环境变量 key 读取到旧字段cfg.DeepSeekKey, 但没有迁移到providers[deepseek].api_key。引擎选择逻辑优先检查prov.APIKey, 该值为空, 导致回退。修复:
config.go: Load() 中自动迁移旧 key 到 providers 系统, 自动切换 active_providercampaign.go: 分离hasProviderKey/hasOldDeepSeek/hasOldAnthropic判断, 添加诊断日志状态: ✅ 已修复 (PR #2)
P2: API 无认证 — 任意来源可触发战役/审批
现象: Vero HTTP API 完全无认证保护, 任意网络来源可启动战役、审批 HITL 请求、访问配置。
根因: 缺少认证中间件。
修复:
server.go: 添加authGuard中间件, 通过VERO_AUTH_TOKEN环境变量配置/healthz端点始终免认证状态: ✅ 已修复 (PR #2)
🟠 High (高)
P3: 引擎回退误显示为"engine 失败"
现象: 未配置 API Key 时, 前端显示红色"engine 失败"错误, 但实际只是引擎回退通知。
根因: 后端用
tool事件 (success: false) 广播引擎回退, 前端将其渲染为失败。修复:
campaign.go: 改用warning事件, 附带友好提示消息types.ts: 添加warning事件类型store.ts: 添加 warning 事件文本渲染ChatView.tsx+index.css: 添加琥珀色.text-warning样式状态: ✅ 已修复 (PR #2)
P4: MockLLM 接口不完整
现象: 脚本模式决策器 (MockLLM) 缺少 Planner/ErrorReporter/Rejecter/Reflector 等接口实现, 导致 targetInjector 类型断言全部失败。
根因: MockLLM 仅实现了
Propose, 但 targetInjector 需要透传全部可选能力。修复:
mock.go: 实现 ProposePlan/LastError/OnReject/OnFailure/Reflect/ShouldRetry/AdjustArgsForRetry 等全部接口mock_test.go: 添加单元测试覆盖状态: ✅ 已修复 (PR #2)
P5: DeepSeek 401/403 静默空转
现象: API Key 无效时, 后端重试 3 次后当作"没有动作"返回 nil, 不向前端暴露失败原因, 战役空转。
根因: 密钥类错误重试无意义, 但代码仍继续重试。
修复:
lastErr并广播状态: ✅ 已修复 (PR #2)
🟡 Medium (中)
P6: Claude 模型名错误
现象:
claude.go中硬编码的模型名claude-3-opus-20240229已过时/错误, API 调用失败。修复: 更新为
claude-sonnet-4-20250514状态: ✅ 已修复 (PR #2)
P7: VERO_HOST 环境变量缺失
现象: 服务默认绑定 127.0.0.1, Docker/Kubernetes 环境中无法对外暴露。
修复:
cmd/vero/main.go: 读取VERO_HOST环境变量 (默认 127.0.0.1)docker-compose.yml: 声明VERO_HOST=0.0.0.0状态: ✅ 已修复 (PR #2)
P8: UTF-8 截断导致乱码
现象:
code_audit.go使用字节截断 (string(buf[:n])), 截断位置恰好多字节字符中间时产生乱码。修复: 使用
tools.Clip(按 rune 边界截断) 替代字节截断状态: ✅ 已修复 (PR #2)
🟢 Low (低)
P9: Docker 配置环境变量未声明
现象:
docker-compose.yml缺少VERO_HOST、DEEPSEEK_API_KEY、VERO_AUTH_TOKEN等环境变量声明。修复: docker-compose.yml 补全环境变量
状态: ✅ 已修复 (PR #2)
P10: chatText 重试次数不一致
现象:
chatText(Observe/Reflect/Chat 用) 重试 2 次,proposePlan重试 3 次。修复: 统一为 3 次, 同时修复循环外声明残留上次响应字段的问题
状态: ✅ 已修复 (PR #2)
💭 Enhancement (架构改进)
P11: 规则引擎 + AI 外壳而非真正的 AI Agent
现象: Vero 定位为"AI 自主渗透智能体", 但实际架构是硬编码攻击序列 + LLM 选工具, 证据驱动仅为字符串匹配, 无跨会话记忆。
建议方向:
状态:⚠️ 架构问题, 需长期设计改进, 本 PR 不涉及
修复提交
PR #2: #2
分支:
fix/ai-engine-and-security-patches→main修改文件: 14 个, +450/-45 行
测试
go test ./internal/...)go build ./...)vero.exe)