fix(lark): 透传发送失败的飞书错误详情 - #1074
Conversation
|
感谢这个改动 🙏 方向我认为是对的—— 我起了本地假飞书服务器 + 真 SDK 复现,确认了 PR 的两个前提都成立:SDK 的 下面两点想请你看一下,都是我实际跑出来的: 1. 🔴 无 HTTP 响应的失败,信息会比改之前更少
这不是构造出来的边角:线上日志里有 350 条这类无响应的 需要说明的是归因: 一个已验证可行的最小修法——在 // 既无 HTTP 状态也无业务码 ⇒ transport message 是唯一的信号,必须留下
if (httpStatus == null && typeof code !== 'number') {
if (typeof v.code === 'string') parts.push(v.code); // ECONNRESET / ETIMEDOUT
if (typeof v.message === 'string' && v.message) parts.push(`"${v.message}"`);
}实测结果(也已验证脱敏不受影响,仍不碰
2. 🟠
|
sendFileAttachments / sendVideoAttachments 原来把 AxiosError 拍平成 err.message,丢掉了 code/log_id。改为先走 formatLarkError(脱敏, 不含 config/headers/stack)再回退 message,使附件与视频的失败行 (⚠️ 附件/视频未发送 …)与其它发送路径一致携带飞书业务错误码。
2df6756 to
74cb09c
Compare
|
已按两点建议处理,更新在
验证:相关 3 个测试文件 70/70 通过, |
|
🚀 Released in v3.18.7 |
改动
飞书 SDK 在 HTTP 400/4xx 时会抛出包含
response.data.code/msg/log_id的 AxiosError,但botmux send原来只输出err.message,agent 只能看到通用 HTTP 状态。本 PR 增加脱敏错误格式化:提取 HTTP 方法、API 路径、状态码、飞书业务错误码、描述和
log_id,不输出 Axiosconfig、请求头或 stack。兼容 SDK logger 传入的嵌套数组,并接入普通文本、语音、文档评论、附件和视频发送失败路径。对于没有 HTTP response 的超时、断连、DNS 等 transport failure,格式化结果额外保留 transport code/message,例如
POST im/v1/messages → ? ECONNREFUSED "connect ECONNREFUSED 127.0.0.1:1"。已有 HTTP/飞书业务错误输出保持不变。发送错误描述逻辑收敛为
send-dispatch导出的describeSendFailure,CLI 与附件/视频路径共用,并通过行为测试直接验证,不再只依赖源码字符串守卫。影响面
botmux send的 sandbox relay 会原样转发 host CLI 的 stderr,因此隔离会话也能看到相同错误详情。code/message;仍不序列化 config、headers 或 stack。验证
bun run test -- test/lark-error-format.test.ts test/cli-send-dispatch.test.ts test/cli-send-hook-context.test.ts:3 个文件、70/70 通过formatLarkError的调用后,直接行为测试及附件业务错误测试均失败bun run build:通过bun run daemon:restart:通过