httpstat (Agent Skills)

GitHub

curl statistics made simple

6,219 stars Python 1 Rule Files Full Docs MCP View JSON API #cli#curl#http#python

AGENTS.md

# httpstat 项目规划

## 1) 项目现状

- 单文件 CLI (`httpstat.py`, ~370 行),Python >=3.9,版本 2.0.0。
- 打包完全由 `pyproject.toml` 驱动(setuptools),`setup.py` 已删除。
- 构建/发布使用 `uv build` / `uv publish`。
- 测试为 `httpstat_test.sh`(端到端 shell 脚本,依赖外网站点)。

### 已完成的现代化工作
- 去除所有 Python 2 兼容代码,shebang 改为 `#!/usr/bin/env python`。
- 全量 f-string,新式 class 语法,类型标注(`Env` 类 overload、`NoReturn`)。
- 严格布尔解析 `parse_bool()`,替代 `'true' in value.lower()`。
- 临时文件 `try/finally` 统一清理,不再泄漏。
- `quit()` 重命名为 `_exit()` 并标注 `NoReturn`。


## 2) 剩余技术债

### A. 测试可靠性不足(高优先级)
- 仅有 shell E2E,强依赖公网与第三方站点行为,CI/本地结果不稳定。
- 缺少单元测试,核心逻辑(指标换算、区间计算、`parse_bool`)没有稳定回归保障。

### B. Agent 适配能力不足(中高优先级)
- 当前 JSON 输出缺少 schema version、状态码语义、错误结构、上下文元数据。
- 缺少"可机器判断"的 SLO/阈值能力(例如总耗时超阈值即非 0 退出)。
- 输出模式较少,无法直接覆盖 Agent 常见流水线(JSONL、紧凑 JSON、纯错误对象)。


## 3) 下一阶段推进方案

### Phase 1:结构化输出 + SLO(本轮实施)

#### 输出格式
- 新增 `--format`(`-f`):`pretty | json | jsonl`(默认 `pretty`,兼容现有行为)。
- `HTTPSTAT_METRICS_ONLY` 环境变量保留兼容,等价于 `--format json`。
- JSON v1 schema(最小集,后续通过 schema_version 扩展):
  ```json
  {
    "schema_version": 1,
    "url": "...",
    "ok": true,
    "exit_code": 0,
    "response": {
      "status_line": "HTTP/2 200",
      "status_code": 200,
      "remote_ip": "...",
      "remote_port": "...",
      "headers": {"Content-Type": "application/json", "Server": "nginx", "...": "..."}
    },
    "timings_ms": {
      "dns": 5,
      "connect": 10,
      "tls": 15,
      "server": 50,
      "transfer": 20,
      "total": 100,
      "namelookup": 5,
      "initial_connect": 15,
      "pretransfer": 30,
      "starttransfer": 80
    },
    "speed": {
      "download_kbs": 1234.5,
      "upload_kbs": 0.0
    },
    "slo": {
      "pass": true,
      "violations": []
    }
  }
  ```

#### SLO 阈值
- 单一参数 `--slo key=value,...`,例如 `--slo total=500,connect=100,ttfb=200`。
- 支持的 key:`total`、`connect`、`ttfb`(starttransfer)、`dns`、`tls`。
- 超阈值时退出码为 `4`,JSON 中 `slo.pass=false`,`slo.violations` 列出超标项。
- pretty 模式下在输出末尾用红色标注超标指标。

#### 颜色控制
- 遵循 `NO_COLOR` 环境变量(https://no-color.org)。设置后禁用所有 ANSI 颜色。
- 不新增 `--no-color` 命令行参数,减少 flag 膨胀。

#### 其他 Agent 友好改进
- 新增 `--save <path>` 将结果写入文件(适合多步 Agent 工作流复用)。
- `--format json` 已天然抑制装饰文本,不另设 `--quiet`。

### Phase 2:Skill 层(进行中)
- `skills/httpstat/SKILL.md`:已完成初版诊断 skill,覆盖自动安装、瓶颈识别、SLO 阈值、curl 转换。
- `skills/httpstat/evals/evals.json`:3 个评估用例,经过两轮迭代验证。
- 待补充:诊断推理输出结构(bottleneck_stage、next_actions)尚未结构化为 JSON,目前以自然语言分析为主。


## 4) 完成标准(Definition of Done)
- `--format json` 输出具备 schema_version=1 的稳定结构,有单元测试锁定。
- `--slo` 阈值判定正确,退出码 `4` 有测试覆盖。
- `NO_COLOR` 正确禁用颜色输出。
- 不破坏现有 `pretty` 模式的默认行为。