fuzhengwei / fuzhengwei/WaLiAPI
v0.2.7→v0.2.8 全量审计:28 项修复 + 10 项工程缺口(FIX-01~28 / GAP-01~10)
- Dominant language
- Rust
- Stars
- 128
- Forks
- 39
- Avg merge
- 15h 25m
- Merged PRs (30d)
- 44
Description
## 背景
对 v0.2.7→v0.2.8 做了一轮全量可靠性/安全审计,共修复 28 个问题(FIX-01~28)、补齐 10 项工程缺口(GAP-01~10)。全部修复已在 fork 分支 `fix/v0.2.7-full-audit` 完成(24 个功能提交,后续已合并 upstream v0.2.9),PR 随后提交到当前最新版本分支。
## 修复清单(按主题归组)
### 安全
| 编号 | 问题 | 修复 |
|---|---|---|
| FIX-01/06 | KB/Wiki/MCP 服务端点特定配置下未强制鉴权 | 恢复 token 强制校验,未配置时 fail-closed 401;宽松 CORS 仅数据面 |
| FIX-02 | KB 上传文件名路径穿越面 + pdfium 加载路径过宽 | 文件名服务端生成、pdfium 仅打包目录加载 |
| FIX-07 | KB git/URL 导入可触达凭证 scheme / 本机路径 / 内网 SSRF | scheme 白名单+凭证剥离、local_dir 边界、私网拒绝 |
| FIX-13 | 网关 API Key 列表明文返回 | 列表掩码展示,全量按需获取 |
| FIX-16 | 响应侧风险扫描只覆盖 legacy 路径 | 接入全部转发路径(非流式/流式/原生),取消行同样覆盖 |
| FIX-17 | 管理面认证弱点 | 登录限速、HttpOnly cookie、防枚举、首登清文件、改密吊销会话 |
| FIX-19 | 网关密钥存 localStorage | 改会话级存储;渠道导出前明示密钥风险 |
| FIX-04/05 (#23) | 日志页 XSS 面 + Wiki 渲染未 sanitize + 单组件异常白屏 | 安全解析 + sanitize + 全局 ErrorBoundary |
### 可靠性(数据面)
| 编号 | 问题 | 修复 |
|---|---|---|
| FIX-08/26 | 流式请求无首帧/帧间超时可无限挂死;退出期 Drop 落账 panic | StreamTimeouts(60s/120s 可配置);Handle::try_current 守卫 |
| FIX-09 (#57) | 协议终止但上游不关连接被误记 499 零用量(ModelScope 类) | 协议终止即完成;取消行保留真实用量+本地估算兜底 |
| FIX-10/25 (#34/#48) | 多 Key 加权随机边界错位(#34 根因);404 是否切换渠道两轨语义相反 | 边界修正+单一实现;classify_http_status 唯一事实来源,七个循环点薄委托,401/403 统一掩码 502 |
| FIX-11/20 | SSE 解码缓冲无上限;错误事件字符串拼接 | 缓冲上限 + serde 构造 |
| FIX-12 | 原生 Anthropic 路径落账与 OpenAI 路径不对齐(非流式无总超时等) | 非流式受渠道总超时;断开/中断/完成统一落账;finish 改 &mut self 支持取消路径读用量 |
| FIX-03 (#55) | panic=abort 吞崩溃现场;Wiki 摄入按字节截断 CJK panic | 移除 panic=abort;字符边界截断 |
| FIX-21/22/27 | 估算器/HTTP 客户端每请求重建;摄入失败静默扩散;图谱逐边查询 | 复用 + 收敛 + 批量化 |
| FIX-23 | MCP SSE 会话无界累积断连残留;FTS 空 token | 有界化断连即清;空 token 防御 |
| FIX-28 | 服务端点拒绝时缺审计痕迹 | 补齐落账 |
### 运维 / 工程
| 编号 | 问题 | 修复 |
|---|---|---|
| GAP-01 | web 发布链 bin 名断裂、systemd 命令过时 | 修复并对齐 |
| GAP-03/04/09 | /health 无版本号;RUST_LOG 不生效;桌面日志无处可寻 | 三项补全 |
| GAP-05/06 | 前端竞态(KB 列表、日志陈旧响应) | 防抖+陈旧丢弃+竞态守卫 |
| GAP-08 | 重试策略设置未接入 RoutePlan 主路径 | 接入 |
| GAP-10 | 前端重复工具函数(转义还原×7、密钥守卫×4) | 收敛 |
| FIX-14/15/24 | 会话过期不跳登录、SSE 断线不重连、日志过滤抖动 | 逐项修复 |
## 既有 issue 处置
- Closes #23(前端异常/XSS 面)
- Closes #34(多 Key 加权选择异常——根因修复)
- Closes #48(重试语义统一——方案即该 issue 建议的 classify_http_status 单一事实来源)
- Closes #55(Wiki 闪退)
- Closes #57(ModelScope 499 用量)
- #15(视觉请求 400):已落地响应侧诊断提示(后端识别图像块被剔除时向下游返回可读说明);`supports_vision` 渠道能力标记为长期方案,已在 README 文档化,**待维护者确认设计后再实现**,本 issue 暂不关闭。
## 验证
- 全量 `cargo test`:lib **777 passed / 2 failed**(恰为既有基线 `codex_login` Windows rename 语义、`security_gate_block_zero_upstream`,与本批无关,零新增失败);集成测试 channel_migration 21 ✓ / auth_repository ✓ / kb_ocr 7 ✓ / request_log 5 ✓
- `pnpm build`(tsc strict + vite)通过
- 合并 upstream v0.2.9 后复验:lib **797 passed / 2 failed**(同样恰为基线两条),custom_rules_integration 3 ✓
## 关联 PR
PR 将提交到 `v0.2.9` 分支,含 24 个功能提交的完整映射与逐项测试结论。
Contributor guide
No contributing guide indexed for this repository
Research direction
The audit work is already implemented on the fix/v0.2.7-full-audit fork and described as merged upstream v0.2.9, with a PR planned for the v0.2.9 branch. Start by reviewing the FIX-01–28 and GAP-01–10 mapping, then run cargo test and pnpm build; done is the reported verification with no new failures, while #15 still awaits maintainer design confirmation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, rust, tauri
- Domain
- devops, full-stack, security, testing-qa
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 10/100