2026-05-18 11:10:52 +08:00

3.1 KiB
Raw Blame History

1. Spec And Context Validation

  • 1.1 阅读 Python 参考实现确认签名、请求体、URL、超时和成功判定
  • 1.2 阅读当前 Android 工程结构,确认 Java、Gradle、权限和短信接收链路现状
  • 1.3 生成飞书 webhook 推送 OpenSpec proposal、design、tasks 和 capability spec
  • 1.4 用 npx openspec validate add-feishu-webhook-push 校验规格结构
  • 1.5 后续提交或 push 前检查 diff避免引入非预期 EOF newline 变化

2. Dependencies And Manifest

  • 2.1 在 app/build.gradle 新增 OkHttp 依赖
  • 2.2 在 AndroidManifest.xml 新增 android.permission.INTERNET
  • 2.3 不引入 Retrofit、RxJava、协程或 WorkManager

3. Signing And Request Model

  • 3.1 新增签名方法,使用 timestamp + "\n" + secret 作为 HMAC key空消息体HmacSHA256Base64 NO_WRAP
  • 3.2 新增请求体构造方法,输出与 Python 参考实现一致的 interactive markdown JSON
  • 3.3 新增 webhook URL 拼接方法,处理空 id 和首尾空格
  • 3.4 避免在日志中输出 secret、sign 和完整 webhook URL

4. Network Client

  • 4.1 新增 FeishuWebhookClient
  • 4.2 使用 OkHttp POST JSON
  • 4.3 设置 10 秒请求超时
  • 4.4 HTTP 200 且响应 JSON code == 0 时返回成功
  • 4.5 分类返回配置缺失、签名失败、网络异常、超时、HTTP 错误、JSON 解析失败和飞书业务错误
  • 4.6 网络请求只在后台线程执行

5. Config And State

  • 5.1 新增 FeishuWebhookConfigStore,通过 /sdcard/Android/data/{applicationId}/config/feishu.json 保存 enabled、webhook id、secret 和 debug 上传开关
  • 5.2 新增最近推送状态,包含时间、成功状态、错误类型和错误摘要
  • 5.3 UI 展示 secret 时使用掩码
  • 5.4 默认推送完整短信原文,便于远端调试
  • 5.5 feishu.json 不存在时生成默认模板 def_config_feishu.json

6. UI And Manual Test

  • 6.1 在 MainActivity 增加飞书推送配置区域
  • 6.2 增加 webhook id 和 secret 输入入口
  • 6.3 增加启用/停用远端推送开关
  • 6.4 增加“测试推送”按钮,发送固定 markdown 测试内容
  • 6.5 展示最近一次推送结果,并与短信接收结果分开

7. SMS Flow Integration

  • 7.1 验证码解析成功后构造默认 markdown 摘要
  • 7.2 SmsReceiver 保存本地结果后触发异步推送
  • 7.3 推送失败不影响本地短信捕获、解析和 UI 刷新
  • 7.4 默认推送内容包含验证码、来源、发送方掩码、时间、解析摘要和短信原文

8. Tests

  • 8.1 增加签名单元测试,固定输入输出对齐 Python 实现
  • 8.2 增加请求体构造测试
  • 8.3 增加响应解析测试,覆盖成功、业务错误和非法 JSON
  • 8.4 增加配置缺失测试
  • 8.5 不要求本轮编译;代码完成后通知用户

9. Delivery Criteria

  • 9.1 OpenSpec validate 通过
  • 9.2 相关上下文逻辑分析通过
  • 9.3 相关测试通过
  • 9.4 代码实现完成后通知用户,不强制编译