# Touchstone(试金石)
**AI agent 驱动的自动化测试平台。** 把它指向一个代码仓库,它会读代码、写用例、跑用例,
把失败沉淀成 bug 报告,修完再复测一遍。
[](LICENSE)
[](https://www.npmjs.com/package/@gavinc-cn/touchstone-dsh)
[](https://www.python.org/)
[](https://nodejs.org/)
[](https://github.com/deepseek-ai/deepseek-harness)
[English](README.md) | 中文
## Touchstone 是什么
Touchstone 把「我们真该多测一点」变成一条持续转动的流水线。你登记一个项目——源码目录、
工作目录、环境标签、以及要求 agent 遵守的项目约定——Touchstone 就会通过
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`dsh`)驱动 AI agent:
**生成测试用例 → 执行 → 把失败写成 bug 报告 → 修代码 → 再复测**。所有产物都以可直接审阅的形式
落在磁盘上:Markdown 写的案例库、`bug_report/` 目录、以及逐轮日志。
它不是「跑一遍我的测试」的一次性 CLI。Touchstone 的核心是**多轮常驻 agent 会话**:一个任务在同一
会话里一轮接一轮地跑,上下文不断档,agent 记得自己试过什么。统一队列保证同一个项目同一时刻只有
一个写者(不会有两个 agent 同时改同一份检出),并且全流程可观测——逐轮实时日志、可渲染的会话窗口、
以及基于 SSE 的看板。
Touchstone 是**本地运行**的:独立形态是 Python 站点;插件形态自 2026-10-15 起缺省走包内 Node 后端
(要回 Python 就在插件 config 里显式写 `backend: python`)。两种形态都是 SQLite + 文件系统工作区,
除了你的 `dsh` 宿主发起的模型调用之外,数据不出本机。
## 主要特性
- **六类任务**覆盖完整测试闭环:探索 / 回归 / 压测 / 修复 / 复测 / 修例,每类都走七阶段生命周期
(生成用例 → 测试 → 生成报告 → 报告分析 → 问题修复 → 重新部署 → 复测)。
- **案例库而不是测试日志**。用例是可读的 Markdown(每个用例 `case.md` + `status.md`,每层目录一个
`INDEX.md`)。agent 跨任务读写同一份案例库;用例写错了,你直接改文件就能修。
- **bug 报告是一等产物**。失败会写成结构化报告(严重程度、复现步骤、日志证据、关联用例),并可在
界面上直接派生成修复 / 复测 / 修例任务。
- **按项目的统一队列**。任务、看板卡片、会话消息共用同一个项目级串行位;排队位次、当前占用者与
判定证据都可查,不靠猜。
- **面向 agent 开发的看板**。卡片可以起跑、排队、阻塞、完成各自的 agent 会话;需要时在独立的
`git worktree` 里跑,探索性改动不碰你的主检出。
- **会话可观测**。完整渲染任意 agent 会话的消息、思考、工具调用与返回;可续聊、可往当前轮注入、
可压缩、可 fork、也可通过 fork 回退到更早的节点。
- **内置压测**。压测任务先让 agent 产出场景与脚本,之后由平台自己发压,一个任务可跑 N 次,每次都有
指标、图表与 Markdown/JSON 报告。
- **可选集成**。飞书(Lark)推送通知与卡片双向作答;案例库的可选语义检索(RAG)。
- **自包含技术栈**。后端:包内 Node 后端(插件形态缺省,需 Node 22.19+)或 Python 标准库 + 4 个小依赖
(独立形态 / `backend: python`);前端:React + Vite;存储:SQLite + 普通文件。Linux 与 Windows 均可运行。
## 界面截图
开发看板——五列卡片、任务条目内联展示、项目级排队徽标:

测试任务——六类任务、轮次、状态与逐任务操作:

会话窗口——从 `dsh` 会话存储渲染出的完整对话(消息、思考、工具调用),带回复、审批与模型控件:

卡片详情——描述、定时开工、父任务依赖、绑定会话与评论:

## 工作原理
```mermaid
flowchart LR
U[浏览器] -->|REST + SSE| S["Touchstone 站点