门禁兼容修复

This commit is contained in:
andy committed 2026-09-05 17:36:23 +08:00
1 parent f60b416949
commit 801c0af692
18 files changed
+257 -87

No files matched your search

@@ -15,7 +15,7 @@
| 能力 | 状态 | 当前含义 |
| --- | --- | --- |
| `GET /health` | 已实现 | 公开的进程存活响应,不访问业务数据 |
| 用户认证 | 仅首版联调门禁 | `/api/chat` 使用独立静态 Bearer;可选兼容路径用同一信任方向的 `xtoken`;它们不是最终用户身份,身份提供方和正式 Token 格式待确认 |
| 用户认证 | 仅首版联调门禁 | `/api/chat` 使用独立静态 Bearer;可选兼容路径用同一信任方向的 `xtoken`;默认要求至少 32 个可打印 ASCII 字符;已交付旧短凭证仅可通过默认关闭的显式 legacy 开关在受控测试/迁移窗口暂时兼容;它们不是最终用户身份,身份提供方和正式 Token 格式待确认 |
| 角色/区域/租户授权 | 部分实现 | MCP 使用显式服务端静态范围:默认镇街白名单,或经授权的数据库全范围;最终用户动态身份/角色/租户仍未实现 |
| SuperAgent Open API Adapter | 已实现、模拟测试通过 | 默认关闭;Secret 仅由项目环境变量注入;真实环境未联调 |
| 用户聊天与会话映射 | 已实现、默认关闭 | 原生 `POST /api/chat` 和可选 DashScope 风格 `completion` 路径、严格 SSE 最终回答、单进程内存映射和同会话并发冲突;无持久化、跨实例恢复或最终用户授权 |
@@ -48,6 +48,7 @@
- 联系人、电话和精确敏感位置按字段级权限控制,不因同一记录的普通字段可见而自动可见。
- `FIRE_SAFETY_MCP_SCOPE_MODE=all` 是 MCP 固定查询表的数据库全范围授权,只能在该 MCP 凭证确实获准读取这些表全部记录时显式使用;它不会从业务数据自动推导授权。
- `all` 与镇街白名单不能同时配置,避免操作者误以为白名单仍限制结果;两种模式都不能由模型或工具参数修改。
- `FIRE_SAFETY_CHAT_ALLOW_LEGACY_SHORT_TOKEN` 默认必须为 `false`。只有已交付旧客户端的 Chat 凭证较短且无法立即更换时,才允许在受控测试/迁移窗口显式设为 `true`;无论开关如何,Chat 凭证必须非空、不超过 4096 字节且仅含 ASCII `0x21-0x7e`(不得包含空格、控制字符或 Unicode)。该开关只影响 Chat 原生 Bearer 和兼容入口 `xtoken`,不放宽 MCP Token 至少 32 个可打印 ASCII 字符的要求;Chat、SuperAgent Open API 和 MCP 三种凭证必须不同。轮换完成后必须恢复 `false`,新环境不得开启。启用期间仅记录不含 Secret 的安全 warning,以提示后续清理。
- 地名搜索只读取已允许的名称、镇街、村庄和几何字段,仍应用相同服务端数据范围;不读取联系人、电话或任意表。
- 地名匹配输出属于候选。线和面的代表点只用于帮助用户识别记录,未经用户确认不得作为演练点继续查询或形成距离结论。
@@ -93,6 +94,7 @@ MCP 第一阶段已按以下只读边界实现:
- `/api/chat` 不转发消息 delta;只有 Adapter 的严格成功条件全部满足后才发送最终 `message` 和 `done`。公开进度只保留安全的 `run.*` / `tool.*` 事件、工具名和状态。
- 兼容 `completion` 路径同样不转发消息 delta;它先返回无正文的 `finish_reason="null"`,严格成功后才发送 `finish_reason="stop"` 和最终正文。URL App ID 只是公开路由标识,不是授权依据。
- 兼容路径的 `xtoken` 复用 Chat 入站凭证而不是 SuperAgent Key。Nginx 不保存、比较或注入任何应用 Secret,只把 Header 交给 Go 校验。
- `FIRE_SAFETY_CHAT_ALLOW_LEGACY_SHORT_TOKEN` 是 Go 服务侧的配置,不由 Nginx 参与;Nginx 不读取、比较或存储 Chat Token,短凭证兼容规则和 warning 均由 Go 执行。
- 同一内存会话只允许一个活动 Run。流失败或结果不确定时删除本地映射,避免继续复用可能仍在运行的 Provider Session。
- 当前会话只在单进程内存中保存且有数量/TTL 上限;不保存消息历史。重启或多实例切换会导致旧对话不可用,不得向用户承诺持久会话。