Files
cryptoHermes/AGENTS.md
2026-05-24 21:18:19 +08:00

164 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md — cryptoHermes 操作指南
本文件是 AI 编码代理在此仓库工作的最小操作手册。完整项目设计见 `docs/dev.md`,用户向文档见 `README.md`
---
## 1. 项目定位(必读,决定可做与不可做)
cryptoHermes 是给上游 Hermes 量化分析引擎用的 **Binance Futures 行情网关**
**只做**
- 从 Binance USDⓈ-M Futures 公共接口拉行情、衍生品数据
- 落库到 TimescaleDB
- 通过 REST 把聚合后的市场上下文给 Hermes
**绝不做**(详见 `ai/risk-guardrails.md`
- 下单、撤单、查持仓
- 接入 API Key / Secret
- 任何账户级私有接口(签名请求)
- 钱包、托管、转账
- WebSocket 推送v1 范围外)
---
## 2. 当前状态
- v1 MVP 已完成Milestone 1-5可启动、可采集、可返回完整 `/v1/market/context`
- Technical 指标计算Milestone 6留待 v2
- 详细路线图见 `docs/dev.md` 第 19 章和 README "路线图"段
---
## 3. 技术栈
| 类别 | 选型 |
|---|---|
| Go | 1.23(见 `go.mod` |
| HTTP | Fiber v2 |
| DB | TimescaleDB on PG 16 |
| DB Driver | pgx v5 (pgxpool) |
| Scheduler | robfig/cron v3 |
| Config | cleanenvyaml + env |
| 限流 | `golang.org/x/time/rate` |
| Migration | golang-migrate CLI |
为什么是这套选型见 `ai/adr/0001-architecture-foundations.md`
---
## 4. 仓库结构(参见 `ai/project-map.md`
```
cmd/ 二进制入口app / backfill
config/ cleanenv 配置加载
internal/ 业务代码(不可被外部 import
app/ 装配 DI、cron、graceful shutdown
controller/ Fiber 路由层
entity/ 纯业务实体
usecase/ 业务接口与编排ports.go 是接口边界)
repo/ 外部依赖实现
webapi/binance/ Binance HTTP client
persistent/postgres/ 5 个 repository
worker/ collector 实现
migrations/ SQL含 hypertable 转换)
pkg/ 项目内可复用基础设施logger/httpclient/postgres
docs/ 设计文档
ai/ harness 工程文档(本目录及子目录)
```
---
## 5. 验证命令(必做:改完代码至少跑前两个)
```bash
# 编译(最快反馈)
go build ./...
# 静态分析
go vet ./...
# 单包测试
go test ./internal/<pkg>/...
# 全部测试
make test # 等价于 go test ./...
# 生产部署 / 架构守卫
make guard
# 启动(需要先 make docker-up && make migrate-up
make run
```
**触碰 binance/mapper.go 或 entity/kline.go 之后**:必须确保对接 `Binance K线数组按下标解析` 的代码不被破坏dev.md 第 9.2 节)。
**触碰任何 SQL migration 后**:本地必须重跑 `make migrate-down && make migrate-up` 验证 down/up 互逆。
---
## 6. Clean Architecture 边界(自动可验证)
```bash
# controller 不可直接 import binance/postgres
grep -r "repo/webapi/binance\|repo/persistent" internal/controller # 必须无输出
# usecase 不可直接 import binance/postgres
grep -r "repo/webapi/binance\|repo/persistent" internal/usecase # 必须无输出
# controller 不可直接编排 derivatives 多源查询G11
grep -rn "FundingRepo\|OIRepo\|LSRepo\|TakerRepo" internal/controller # 必须无输出
# 全项目不可出现签名 / 私钥相关字段
grep -ri "apikey\|x-mbx-apikey\|hmac\|secret_key\|api_secret" --include="*.go" . # 必须无输出(不算注释/文档里的"不接入"说明)
```
任何 PR 都应该满足以上四条。
---
## 7. 关键技术约束(容易犯错)
1. **价格精度**:全链路用 `string`,落库时由 PG 转 `NUMERIC(36,18)`。**禁止用 `float64` 存储或传递价格、成交量**。
2. **K线未收线丢弃**:从 Binance 拉到的最新一根 K 线如果 `close_time > now()` 就不能入库。Repo 的 `UpsertMany` 会过滤 `IsClosed=false`,新代码也必须遵守。
3. **Binance 历史 OI / 多空比官方只保留 30 天**:必须依赖 collector 持续落库才能拿到长历史。
4. **Rate limit**:默认 20 req/s`config.Binance.RPS`)。新增 collector 任务前估算 weight 预算Binance 2400 weight/min IP 上限)。
5. **国内网络**`fapi.binance.com` 直连不稳定,通过 `HTTPS_PROXY` 环境变量挂代理。
6. **Upsert 幂等**5 张表的主键都包含时间维度,所有 repo 的 `UpsertMany` 使用 `ON CONFLICT DO UPDATE`,可安全重复执行。
7. **Compose 部署约束**`.env.example` 不给默认 DB 密码;宿主机端口只改 `APP_HOST_PORT`;容器内 `APP_PORT` 固定 8080migration 必须在 app 前完成;`.dockerignore` 必须排除 `.env` / `.env.*`
---
## 8. 任务模式
任何非平凡修改,建议先写一份微型任务契约(参见 `ai/task-templates.md`
```
objective: 要做的事,一句话
scope: 会改的文件 / 目录
out-of-scope: 不会动的范围
constraints: 受 ai/risk-guardrails.md 约束的哪几条
validation: 要跑哪些命令证明通过
acceptance: 如何判断完成
```
对于跨多个 Milestone 或需要新增数据源CoinGlass、ETF Flow的任务必须先写 `ai/specs/<task>.md`
---
## 9. 提交规范
- 一个 PR 改一类事。Repo 层、Binance 适配、usecase 编排不要混在一个 commit。
- Commit message 用中文或英文都行,但要写"为什么"。
- 不要在没有跑 `go build ./...``go vet ./...` 的情况下提交。
- `go.mod` 改动必须配套 `go.sum`(运行 `make tidy`)。
---
## 10. 何时升级 harness
- 同一类错误第二次出现 → 写进 `ai/risk-guardrails.md`
- 重大架构决策(换 HTTP 框架、引入消息队列、跨服务通信)→ 写 ADR
- 新增数据源CoinGlass / ETF / CME→ 必须有 `ai/specs/<source>.md` 才动手
- 跨多次会话的长任务 → 写 `ai/work-status.md`