plan.md 10 KB

实施计划:通用HTTP客户端多平台账户管理

分支002-httpclient-http-api | 日期:2025-09-28 | 规范spec.md 输入/Users/he/projects/binance-api/specs/002-httpclient-http-api/spec.md 中的功能规范

执行流程(/plan 命令作用范围)

1. 从 Input 路径加载功能规范
   → 如果缺失:ERROR "No feature spec at {path}"
2. 填写技术背景(扫描 NEEDS CLARIFICATION)
   → 根据文件结构或上下文判断项目类型(web=前后端,mobile=App+API)
   → 根据项目类型给出结构决策
3. 根据宪章内容完成 Constitution Check 部分(原则 I–V、运营约束、流程质量门槛、治理要求)
4. 评估 Constitution Check
   → 若存在违例:记录在 Complexity Tracking
   → 若无法给出理由:ERROR "Simplify approach first"
   → 更新 Progress Tracking:Initial Constitution Check
5. 执行 Phase 0 → research.md(确保记录行情数据源、敞口目标与风险约束)
   → 若仍有 NEEDS CLARIFICATION:ERROR "Resolve unknowns"
6. 执行 Phase 1 → contracts、data-model.md、quickstart.md、agent 文件
7. 再次评估 Constitution Check
   → 若出现新违例:回到 Phase 1 调整
   → 更新 Progress Tracking:Post-Design Constitution Check
8. 规划 Phase 2 → 描述任务生成策略(不要创建 tasks.md)
9. 停止 - 准备执行 /tasks 命令

重要提示:/plan 命令到步骤 7 即结束。后续阶段由其他命令完成:

  • Phase 2:/tasks 生成 tasks.md
  • Phase 3-4:按计划实施

总结

为多平台交易账户(Pacifica、Aster、Binance)提供统一的HTTP API调用客户端。核心要求包括:

  • 高性能:<100ms响应时间,99.9%可用性,1000+并发请求
  • 集成现有凭证管理库进行平台特定认证
  • 智能重试逻辑:网络错误重试,认证错误立即失败
  • 完整日志记录:30天保留期,包含敏感数据
  • 分层超时:连接5s,读取30s,写入15s,支持HTTP代理
  • 集成架构:集成到现有代码库,支持多账户并发调用

技术背景

语言/版本: TypeScript + Node.js 18.12+,ESNext模块 主要依赖: 现有httpClient.ts,credential-manager库,https-proxy-agent,winston日志 存储: 无持久化存储需求,内存缓存 测试框架: Jest (已配置在credential-manager) 目标平台: Node.js服务器环境,Linux/macOS 项目类型: 单体项目,集成到现有代码库 性能目标: <100ms响应时间,99.9%可用性,1000+并发请求 约束条件: 分层超时(连接5s,读取30s,写入15s),代理支持 规模/范围: 3个交易平台(Pacifica、Aster、Binance),多账户并发

宪章核对(Constitution Check)

关卡:必须在 Phase 0 前通过,并在 Phase 1 后再次确认。

一、库优先架构与现实测试

  • 模块化架构:HTTP客户端将实现为高内聚低耦合的模块,集成到现有代码库
  • 现实测试:将使用真实HTTP端点测试(Pacifica、Aster、Binance API),实施契约测试验证接口
  • TDD开发:HTTP客户端库必须通过测试先行开发,确保代码质量

二、Delta中性优先

  • 适用性:HTTP客户端作为基础设施组件,直接支持交易操作,符合Delta中性要求
  • 实时性:<100ms响应时间确保快速订单执行和头寸调整
  • 多账户支持:支持同时处理多个账户的请求,保证账户间隔离

三、确定性市场数据摄取

  • 适用性:HTTP客户端将支持市场数据API调用的HTTP回退机制
  • 延迟要求:<100ms响应时间满足低延迟数据获取需求
  • 健康检查:实现超时和重试机制,确保数据源可用性

四、资金保护与风险控制

  • 认证安全:集成credential-manager确保安全的账户认证
  • 请求隔离:多账户并发不会导致凭据混合或认证冲突
  • 幂等性:HTTP请求支持幂等标识符,防止重复执行

五、透明可观测性与审计

  • 完整日志:记录所有请求/响应内容,包含敏感数据,30天保留
  • 结构化日志:集成winston日志系统,支持关联ID追踪
  • 健康信号:提供超时、重试、错误等运行状态指标

项目结构

文档(本功能)

specs/[###-feature]/
├── plan.md              # 本文件(/plan 输出)
├── research.md          # Phase 0 输出(/plan)
├── data-model.md        # Phase 1 输出(/plan)
├── quickstart.md        # Phase 1 输出(/plan)
├── contracts/           # Phase 1 输出(/plan)
└── tasks.md             # Phase 2 输出(/tasks,非 /plan 生成)

源码目录(仓库根目录)

src/
├── utils/
│   ├── httpClient.ts           # 现有实现(待增强)
│   └── universalHttpClient.ts  # 新建:通用HTTP客户端
├── adapters/                   # 新建:平台适配器
│   ├── base/
│   │   └── BaseAdapter.ts      # 基础适配器抽象类
│   ├── pacifica/
│   │   └── PacificaAdapter.ts  # Pacifica平台适配器
│   ├── aster/
│   │   └── AsterAdapter.ts     # Aster平台适配器
│   └── binance/
│       └── BinanceAdapter.ts   # Binance平台适配器
├── types/                      # 新建:类型定义
│   ├── httpClient.ts           # HTTP客户端类型
│   ├── platformAdapter.ts      # 平台适配器类型
│   └── common.ts               # 通用类型
└── core/                       # 现有核心模块
    ├── hedging/
    ├── market/
    └── ...

tests/
├── contract/                   # 契约测试
│   ├── httpClient.test.ts
│   └── platformAdapters.test.ts
├── integration/               # 集成测试
│   ├── multiPlatform.test.ts
│   └── authentication.test.ts
└── unit/                      # 单元测试
    ├── adapters/
    └── utils/

libs/                          # 现有库目录
└── credential-manager/        # 现有凭证管理库

结构决策:采用单体项目结构,HTTP客户端集成到现有src/目录下。新增src/adapters/目录用于平台适配器,src/types/目录用于类型定义。利用现有的libs/credential-manager/进行认证管理。

Phase 0:概述与调研

  1. 从技术背景提取未知项
    • 每个 NEEDS CLARIFICATION → 研究任务
    • 每个新依赖 → 最佳实践任务
    • 每个外部集成 → 设计模式任务
  2. 生成调研任务

    对每个未知项:
     任务:调研 {未知点} 在 {功能背景} 的最佳做法
    对每个技术选项:
     任务:收集 {技术} 在 {领域} 的最佳实践
    
  3. 整理输出research.md

    • 决策:选择方案
    • 理由:为何选择
    • 备选:评估过的其他方案

产出:research.md,所有未知项已解决

Phase 1:设计与契约

前提:research.md 已完成

  1. 从功能规范提取实体data-model.md
    • 实体名称、字段、关系
    • 验证规则
    • 状态变化若有
  2. 从需求生成 API 契约
    • 每个用户行为 → 对应接口
    • REST/GraphQL 等标准格式
    • 输出到 /contracts/
  3. 从契约生成契约测试
    • 每个接口一个测试文件
    • 校验请求/响应结构
    • 测试必须先失败
  4. 从用户故事提取测试场景
    • 每个故事 → 集成测试场景
    • Quickstart 测试 = 验收步骤
  5. 增量更新 agent 文件(O(1) 操作):
    • 运行 .specify/scripts/bash/update-agent-context.sh claude
    • 仅添加本轮新增技术信息
    • 保留手工补充内容
    • 记录最近 3 次变更
    • 保持文件在 150 行以内

产出:data-model.md、/contracts/*、失败的契约测试、quickstart.md、更新后的 agent 文件

Phase 2:任务规划方法

说明 /tasks 命令的工作方式(本阶段不执行)

任务生成策略

  • .specify/templates/tasks-template.md 为基线
  • 根据 Phase 1 文档(契约、数据模型、quickstart)生成任务
  • 每个契约 → 契约测试任务 [P]
  • 每个实体 → 模型创建任务 [P]
  • 每个用户故事 → 集成测试任务
  • 实现任务遵循测试先行

排序策略

  • TDD 顺序:先测试再实现
  • 依赖顺序:模型 → 服务 → 接口
  • [P] 用于描述可并行的工作

预估输出:tasks.md,约 25-30 个有序任务

注意:Phase 2 由 /tasks 完成,非 /plan 输出

Phase 3+:后续实施

超出 /plan 命令范围

Phase 3:执行 /tasks 生成 tasks.md
Phase 4:按 tasks.md 实施
Phase 5:验证(运行测试、执行 quickstart、性能验证)

复杂度追踪

仅在 Constitution Check 有违例时填写

违例 原因 被否决的简单方案
[示例:新增第 4 个项目] [现实需求] [为何前三个不足]

进度追踪

执行流程中的状态记录

阶段状态

  • Phase 0:调研完成 (/plan) - research.md已生成
  • Phase 1:设计完成 (/plan) - contracts/、data-model.md、quickstart.md已生成
  • Phase 2:任务规划完成 (/plan,仅描述方法) - 详细任务生成策略已制定
  • Phase 3:任务已生成 (/tasks) - 待执行/tasks命令
  • Phase 4:实现完成
  • Phase 5:验证通过

关卡状态

  • 初次宪章核对:通过
  • 设计后宪章核对:通过 - 所有设计组件保持宪章一致性
  • 所有 NEEDS CLARIFICATION 已解决(从规格说明澄清会话)
  • 复杂度偏差已记录(无违例)

设计后宪章确认

  • 模块化架构维持:contracts定义的接口保持高内聚低耦合,支持动态平台注册
  • 扩展性增强:platform adapter factory和平台配置模板确保轻松添加新平台
  • 性能目标保持:所有设计组件支持<100ms响应时间和1000+并发要求
  • 安全性强化:详细认证契约和错误处理确保资金安全
  • 可观测性完整:日志记录、健康检查、性能监控全面覆盖

基于宪章 v1.3.0 - 详见 /memory/constitution.md