Skip to content

refactor: unify security-event sink and improve model config UX#26

Open
hudyac wants to merge 9 commits intomainfrom
refactor-dart
Open

refactor: unify security-event sink and improve model config UX#26
hudyac wants to merge 9 commits intomainfrom
refactor-dart

Conversation

@hudyac
Copy link
Copy Markdown
Collaborator

@hudyac hudyac commented Apr 22, 2026

改了什么

  • 统一安全事件写入口径:由 ProxyProtection 作为唯一权威写入点,补齐 QUOTASANDBOX_BLOCKEDNEEDS_CONFIRMATION 等分支事件写入,并新增对应 Go 测试。
  • 调整资产标识策略:asset_id 仅由 name + config_path 计算,移除运行态动态字段(端口/进程路径)参与,保证同一资产跨重启稳定。
  • 修复千帆模型配置:切换到千帆 OpenAI 兼容 V2 接口,改为单 API Key 鉴权,更新默认 URL/模型与前后端校验。
  • 优化 Flutter 配置体验:模型连通性测试改为异步调用(后台 isolate),支持切换 provider/关闭弹窗时即时取消 loading;新增密钥明文可见切换与事件类型/风险类型本地化展示。
  • 修复防护配置 Token 显示:新增 base 单位,避免小于 1000 的 token 配额在 UI 中显示为 0。

为什么改

  • 解决“拦截次数”和“安全事件列表”在来源分散时可能不一致的问题,确保监控口径统一、可追溯。
  • 避免资产运行状态变化导致 asset_id 漂移,进而引发策略绑定丢失或重复。
  • 修复千帆接入方式不匹配导致的不可用问题,降低模型配置失败率。
  • 消除模型连通性验证期间 UI 卡顿和按钮长时间转圈的问题,提升配置流程稳定性和可用性。
  • 保证 token 配额显示与真实值一致,避免误导用户配置。

影响范围

  • Go 侧:core/proxycore/shepherdcore/assetplugins/* gateway/scannerchatmodel-routing
  • Flutter 侧:模型配置表单与弹窗、监控事件面板、防护配置弹窗、设置弹窗、i18n 文案。
  • 文档与规范:_rules/global.md、新增 _rules/security_event.md
  • 工程文件:.gitignore 与 Flutter 生成文件跟踪策略。

如何验证

  • 运行 go test ./...(在 go_lib)通过。
  • 关键分支验证:
    • QUOTA / SANDBOX_BLOCKED / NEEDS_CONFIRMATION 分支能写入 SecurityEvent
    • asset_id 在相同 (name, config_path) 下跨重启保持稳定。
    • 千帆使用 API Key + V2 OpenAI 兼容地址可通过配置校验。
    • 模型连通性测试期间切换 provider/关闭弹窗,loading 可即时取消。
    • token 限额 < 1000 时 UI 显示不再为 0。
  • flutter analyze 当前存在历史问题:test/widget_test.dartMyApp 非类型引用(与本 PR 变更文件无直接关联)。

hudy-xu added 9 commits April 22, 2026 10:59
.gitignore 对已被索引的文件无效,导致 GeneratedPluginRegistrant.java、
generated_plugin_registrant.*、generated_plugins.cmake、local.properties
每次 flutter pub get 后都在 git status 里冒泡。

本次改动:
- 将 8 个由 Flutter 工具链生成的文件从索引中移除(磁盘文件保留)。
- 将 linux/flutter/ 和 windows/flutter/ 目录级忽略收敛为按生成文件与
  ephemeral/ 精确匹配,避免误拦 CMakeLists.txt 等应跟踪的工程文件。
_rawToDisplay 的兜底分支会把 rawValue 整除 1000,导致 DB 里 50/500 等
小于 1000 的值在界面上显示为 0,并且再次保存会被静默抹成 0。新增 base
(个/tokens)单位作为兜底并显式渲染 0,保证任意 DB 值 roundtrip 无损。

Made-with: Cursor
- 代理层新增 emitSecurityEvent,在会话配额/每日配额/沙箱/ShepherdGate 四类拦截分支与 blockedCount++ 同步记录事件,修复 NEEDS_CONFIRMATION 触发时事件面板为空的问题
- ShepherdGate 启发式与 5 个 plugin gateway 不再直接写 SecurityEvent,集中到代理层单一权威写入点,拦截次数与事件列表保证 >= 关系
- 新增 shepherd.PostValidationOverrideTag 常量与 needs_confirmation 事件类型,提示词注入强制改写后 Detail 加 post_validation_override 标签
- 前端对 QUOTA/SANDBOX_BLOCKED/NEEDS_CONFIRMATION 等 Go 常量做展示本地化(配额/沙箱拦截/待确认),并为待确认事件增加独立颜色与图标
- 新增 _rules/security_event.md 固化触发口径与职责边界,global.md §7 追加索引
- 新增 proxy_protection_security_event_test.go 覆盖 4 条拦截分支、needs_confirmation 分桶与 PostValidationOverrideTag 契约

Made-with: Cursor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants