superagent请求问题修复

This commit is contained in:
andy committed 2026-09-06 01:40:15 +08:00
1 parent ee9d2d7cf1
commit 7243319bbb
19 files changed
+388 -74

No files matched your search

+13 -9
View File
@@ -4,15 +4,15 @@
| --- | --- |
| 最近更新 | 2026-09-06 |
| 当前分支 | `main` |
| 当前阶段 | 对话、SuperAgent、空间 MCP、默认关闭的测试页面与测试环境容器部署基线已完成;公网地点候选 MCP 已现场成功一次,页面公网验收和完整 MCP 多工具链仍待验证 |
| 当前重点 | 完成 `/chat` 测试页面的配置开关、静态资源与公网验收,同时重建目标机并验证完整公网 MCP 工具链路 |
| 当前阶段 | 对话、SuperAgent、空间 MCP、默认关闭的测试页面、无 Trace 兼容模式与测试环境容器部署基线已完成;公网地点候选 MCP 已现场成功一次,页面公网验收和完整 MCP 多工具链仍待验证 |
| 当前重点 | 使用 `FIRE_SAFETY_SUPERAGENT_INCLUDE_TRACE=false` 绕过当前 Trace 策略限制,重建目标机并验证兼容 Chat 与完整公网 MCP 工具链路 |
## 1. 当前 Checkpoint
- 名称:`fire-safety-ymd-public-chat-page-v1`
- 状态:Ready for Review(本地实现与验证完成;测试服务器部署待用户执行)
- 目标:提供默认关闭的 `/chat` 测试页面和 `/chat/` 规范化入口,按第三方兼容 `completion` SSE 请求,支持用户手动输入测试 `xtoken` 和同页面内存 `session_id` 复用;通过 Nginx 公网反代页面及其 CSS/JavaScript 资源,并保持 Token、真实用户认证和生产授权边界不变。
- 非目标:替用户提交或推送 Git、直接修改远程服务器、创建数据库容器、迁移生产数据、签发证书、改变 DNS/安全组、实现真实用户认证、动态授权、会话持久化或生产审计。
- 名称:`fire-safety-ymd-superagent-no-trace-mode-v1`
- 状态:Ready for Review(无 Trace 自动化、真实 SuperAgent 探针和本地兼容 Chat 冒烟均已通过;测试服务器重建和公网完整 MCP 对话待用户执行)
- 目标:增加 `FIRE_SAFETY_SUPERAGENT_INCLUDE_TRACE` 配置,默认使用 `include_trace=false`,在不开放 SuperAgent Trace 策略时仍严格验证最终 AI 消息 `finish_reason=stop`、非空顶层 `message.final` 与顶层 `end`;开启 Trace 时继续要求 `run.completed(status=success)`,并保持既有 Chat/MCP 安全边界。
- 非目标:替用户提交或推送 Git、直接修改远程服务器、创建数据库容器、迁移生产数据、签发证书、改变 DNS/安全组、实现真实用户认证、动态授权、会话持久化或生产审计;无 Trace 也不承诺已完成公网 MCP 多工具对话验证。
当前进展:
@@ -23,6 +23,7 @@
- Nginx 示例增加 HTTP 到 HTTPS 跳转和 HTTP 429 JSON 限流响应,精确反代 `/chat`、`/chat/`、`/chat/app.css`、`/chat/app.js`、兼容 completion 和 `/mcp`,仍不比较、保存或注入 Chat、MCP、SuperAgent 或数据库 Secret。
- 运维手册记录 Git 前置条件、服务器目录、Secret 权限、Compose/Nginx 启停、页面开关、Chat/MCP 冒烟、SuperAgent 回调、更新和回滚。
- SuperAgent 无法在其配置中指定 MCP 协议版本;同一 SuperAgent 中 `th-hotel-simple-superagent` 已稳定启用/调用,现场实现不读取 `initialize.params.protocolVersion`,不读取或校验 `MCP-Protocol-Version` Header,并固定返回 `2025-06-18`。消防 MCP 按该 proven profile 兼容:版本字段和 Header 不作为拒绝门禁,响应固定为 `2025-06-18`。这不表示支持任意其他版本,也不是追求最新协议;日志只使用 `direct_success`/`compatibility_success`,不记录原始版本值。
- SuperAgent Open API 现在由 `FIRE_SAFETY_SUPERAGENT_INCLUDE_TRACE` 控制消息流查询参数,默认 false。无 Trace 严格成功要求最终 AI 消息 `finish_reason=stop`、非空顶层 `message.final` 和顶层 `end`;Trace=true 时仍要求 `run.completed(status=success)`。无 Trace 不返回公开工具/步骤轨迹,但不等于禁止 Agent 调 MCP。受控诊断中,同一 Key 的 `include_trace=true` 因应用策略返回 HTTP 403 `open_agent_trace_disabled`;改用 false 后,真实探针返回严格成功,兼容 Chat 本地 SSE 也完成 `null -> stop`。公网完整 MCP 对话仍待验证。
已实现验收项:
@@ -40,9 +41,10 @@
3. 页面测试保持 `FIRE_SAFETY_CHAT_PAGE_ENABLED=false` 默认边界;需要开启时配置 `https://agent.nianxx.com` 精确 Origin,重建容器并验证 `/chat` 308、`/chat/` 及 CSS/JavaScript 资源 200,以及关闭后的直接 404。
4. reload 已通过语法检查的 Nginx 配置,只公开 HTTPS 页面/资源、兼容路径、`/mcp` 和可选 `/health`。
5. 使用项目专属测试 Key 和已发布消防 Profile 做兼容 `completion` 首轮/多轮真实冒烟,核对最终回答、用量和会话复用;页面必须证明使用同一请求契约。
6. 使用 SuperAgent 无版本配置的实际握手重测:通过 `direct_success` 或 `compatibility_success` 日志确认请求已按 proven profile 处理,并验证 `initialize` → `notifications/initialized` → `tools/list` → 7 个工具的 `tools/call`;当前公网地点搜索的一次成功不替代完整链路,版本字段/Header 不需要配置,也不作为拒绝门禁。
7. 为所有查询表补齐适用 GiST 索引并验证查询计划;当前小数据可做联调,但生产前必须完成索引与并发验证。
8. 设计真实用户身份、动态角色/区域授权、共享会话、限流、Secret 轮换、指标和持久审计。
6. 先以 `FIRE_SAFETY_SUPERAGENT_INCLUDE_TRACE=false` 重建并运行探针/Chat,确认无 Trace 的 `finish_reason=stop` + 非空顶层 `message.final` + 顶层 `end` 严格成功;仅在外部应用策略允许时再测试 true 模式。
7. 使用 SuperAgent 无版本配置的实际握手重测:通过 `direct_success` 或 `compatibility_success` 日志确认请求已按 proven profile 处理,并验证 `initialize` → `notifications/initialized` → `tools/list` → 7 个工具的 `tools/call`;当前公网地点搜索的一次成功不替代完整链路,版本字段/Header 不需要配置,也不作为拒绝门禁。
8. 为所有查询表补齐适用 GiST 索引并验证查询计划;当前小数据可做联调,但生产前必须完成索引与并发验证。
9. 设计真实用户身份、动态角色/区域授权、共享会话、限流、Secret 轮换、指标和持久审计。
## 3. 已确认事实
@@ -78,6 +80,7 @@
- 水源/设施 `syzt`、水源 `hc_datetime` 等字段的枚举、单位、时区和更新责任人尚未确认。
- SuperAgent MCP 的公网 URL 已有现场成功证据:Bearer、`Content-Type`、JSON-RPC 通过,随后记录了 `initialize`、`notifications/initialized`、`tools/list`,并于 2026-09-05 22:35 成功调用 `fire_safety_search_place_candidates`。同一 SuperAgent 的 th-hotel 服务已稳定调用,为 proven profile 参照;消防服务其余 6 个工具、完整多工具链、TLS、网络白名单和 Token 轮换仍待联调。是否发送协议 Header 不构成兼容阻塞。
- `/api/chat` 静态 Bearer、兼容路径 `xtoken` 和 `/chat` 测试页面只适用于受控联调,浏览器用户可以看到手动输入的 Token;页面默认关闭,开启时要求 `FIRE_SAFETY_CHAT_ALLOWED_ORIGINS` 包含精确 `https://agent.nianxx.com`。真实用户身份、动态授权、生产速率限制和滥用防护尚未实现。Chat 短凭证仅可通过默认关闭的显式 legacy 开关在受控测试/迁移窗口使用,MCP Token 仍要求至少 32 个可打印 ASCII 字符,三种凭证必须不同。
- SuperAgent Trace 策略当前不对本项目开放:同一 Key 请求 `include_trace=true` 返回 403 `open_agent_trace_disabled`;改为 `include_trace=false` 后真实探针已严格成功。无 Trace 只影响工具/步骤轨迹返回和成功判定,不禁止 Agent 调用 MCP;实际消防 Profile 的无 Trace 多工具对话和工具轨迹替代证据仍待公网验收。
- 目标公网机器的 Docker/Compose 和 Nginx 版本、配置 include 层级、证书、DNS、安全组及 PostgreSQL 网络拓扑尚未完整验证;用户已开始远程部署,仓库资产与服务器现场配置仍需完成一致性核验。
- 目标服务器此前连续两次访问 `proxy.golang.org:443` 均在约 91 秒后超时,随后已通过可达的构建路径完成 Docker 镜像构建;该事实不代表所有外部 HTTPS 都可达。
- 目标机曾因已交付的 Chat 短凭证未通过默认配置门禁而反复重启;`801c0af` 已包含显式兼容方案。最新公网 `/mcp` 请求已完成地点候选工具调用,说明该启动阻塞已不再是当前首要问题;但独立 health、页面公网响应、兼容 Chat 多轮、MCP 其余工具和完整链路仍未形成通过证据。
@@ -111,6 +114,7 @@
- `GOCACHE=/private/tmp/fire-safety-ymd-go-cache go test -count=1 ./...`:通过;新增覆盖页面开关依赖、开启/关闭路由、HTML/静态资源、安全响应头和应用装配;原有 Chat、SuperAgent、MCP/PostGIS 覆盖继续通过。
- `GOCACHE=/private/tmp/fire-safety-ymd-go-cache go vet ./...`:通过。
- `GOCACHE=/private/tmp/fire-safety-ymd-go-cache go test -race -count=1 ./...`:通过。
- SuperAgent 无 Trace:自动化覆盖 `include_trace=false` 请求参数、最终 AI 消息 `finish_reason=stop` + 非空顶层 `message.final` + 顶层 `end` 成功,以及 Trace=true 仍要求 `run.completed(status=success)`;真实同一 Key 诊断为 true=403 `open_agent_trace_disabled`,false 模式下 `cmd/superagent-probe` 严格成功并返回最终回答,本地兼容 Chat SSE 也完成 `finish_reason=null -> stop`,公网完整 MCP 对话仍待验证。
- `node --check internal/handler/chatpage/app.js`:通过。
- 本地真实浏览器:首轮兼容 SSE、第二轮 `session_id` 复用、错误凭证、Nginx 风格 429、未完成 SSE 断流后清会话、恶意 HTML 纯文本显示均通过;375px 视口无横向溢出,4 个按钮高度均为 44px,控制台无错误。
- `ruby -e 'require "yaml"; YAML.load_file("compose.yaml")'`:通过基础 YAML 解析;开发机没有 Docker CLI,未执行 `docker compose config --quiet`。