yinhong-zhou/jevdo
jevaction
Just Jev it. A Jev-first agent loop with reusable actions for DeepSeek Harness.
Install
npx @deepseek-ai/dsh plugin --profile web add github:yinhong-zhou/jevdoRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/jevdo)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from yinhong-zhou/jevdo, cleaned of badges and images.
<b>简体中文</b> · <a href="README.en.md">English</a> <a href="#接力长什么样">使用场景</a> · <a href="#快速开始">快速开始</a> · <a href="#一轮是怎么走的">工作方式</a> · <a href="#实测">实验结果</a> · <a href="CONTRIBUTING.md">贡献指南</a>
会做的事,为什么还要再想一遍? 第十次打开同一个项目,它还在读配置、找脚本、拼命令,把上周已经走通的路再想一遍。JevDo 在调用大模型之前,先让 Jev 判断:这件事,是不是已经会了?已有操作能处理,就直接调度执行;遇到新问题,再交给主模型。主模型把值得复用的做法保存为 Action,经过验证,留给下一次会话。
接力长什么样
三个使用示例,假设项目已保存并验证了对应的 Action。
① 日常修 bug
“启动后台,修掉订单列表的分页 bug,跑完单测和构建再交给我。”
Jev 启动依赖与服务,检查就绪 [start-admin-backend]
↓
主模型 读 issue,定位并修复分页逻辑
↓
Jev 跑单测、构建,核对退出码与产物 [test-and-build]
↓
主模型 说明修改与验证结果
② CI 红了
“CI 的 lint 又挂了,本地复现修一下,确认能过。”
Jev 准备依赖,按 CI 配置复现 lint [repro-ci-lint]
↓
主模型 根据报错修改代码
↓
Jev 重跑 lint,再执行提交前检查 [verify-before-push]
↓
主模型 解释改动,给出 commit message
③ 准备发版
“走一遍发版流程:版本号、changelog、tag、构建产物。”
Jev 跑全量回归,检查发版条件 [regression-gate]
↓
主模型 读合并记录,更新版本号与 CHANGELOG
↓
Jev 按项目脚本打 tag、构建、校验产物 [cut-release]
↓
主模型 整理 release notes
Jev 调度重复操作,主模型处理新问题。 启动 → 代码修改 → 测试构建的完整交接已在实验中跑通。如果请求只是“启动项目”或“跑一遍回归”,已有 Action 能覆盖全部工作且满足完成条件时,Jev 可以独立完成,全程零次主模型调用。
一轮是怎么走的
- Jev:决定下一步。读取与主模型相同的已组装会话和工具历史,选择 Action、请求主模型、澄清或结束本次请求。
- Action:留下怎么做。命令或脚本,连同用途、项目绑定和验收方式,跨会话保留;简单操作直接保存命令,复杂行为更适合脚本。
- 主模型:解决新问题,积累新操作。写代码、做推理、处理异常,也在任务中主动维护 Action 库。
基于 DeepSeek Harness,早期版本优先支持 DSH 0.2.0-rc.1 的 headless 使用。包名和工具前缀保留
jevaction。主模型参与后,由它完成最终答复。
flowchart LR
U["任务与会话历史"] --> J{"Jev"}
J -->|已有 Action| A["Harness 执行与验收"]
J -->|新问题 / 异常| M["主模型"]
A --> H["结果回到共同历史"]
M -->|工具调用与结果| H
H --> J
M -.->|保存并验证| K[("Action 库")]
K -.->|候选操作| J
classDef judge fill:#ede8ff,stroke:#9b8deb,color:#302653
classDef model fill:#eef3ff,stroke:#5171ae,color:#162b50
class J judge
class M model
Jev 选择,代码执行。它只能选择当前可用的操作和参数,实际命令仍经过宿主工具权限与验收。实现发生变化、执行失败,或没有合适的操作时,工作交回主模型。
Action 怎么留下来
第一次,主模型读取项目,找到可复用的命令或脚本,通过 jevaction_create 保存用途、项目绑定和验收方式,再用 jevaction_validate 验证并激活。它会主动考虑保存稳定的开发操作,也遵守用户“不保存”的要求。
下一次,Jev 根据当前请求选择 Action 和项目,Harness 补全已保存的执行参数,运行并验收。操作成功不等于整个任务结束:还需要分析、修改或解释,就继续调用主模型。
同一个构建 Action 可以绑定不同项目的命令。实现脚本变化后,旧版本需要复核;测试针对的源码、报表读取的数据变化,则由验收检查当前结果。完整规则见 Action 规格 与 使用场景。
实测
在三个常见开发场景——项目启动、项目测试与构建、本地发布——中,对比 JevDo 与原生 DSH Loop。所有组获得相同现成脚本,原实验 Action 库从空开始;原生 DSH Loop 每项测一次,JevDo 每轮新会话、相同输入并保留操作库。
| 每组 3 个任务 | 原生 Loop | JevDo 第 1 轮(积累) | 第 2 轮 | 第 3 轮 |
|---|---|---|---|---|
| 验收成功 | 3/3 | 3/3 | 3/3 | 3/3 |
| 主模型调用 | 24 | 22 | 0 | 0 |
| 无需主模型的任务 | 0/3 | 0/3 | 3/3 | 3/3 |
| Jev 调用 | 0 | 56 | 20 | 15 |
| 平均耗时 | 10.06 s | 19.36 s | 3.61 s | 3.17 s |
| 估算费用(含 Jev) | ¥0.2245 | ¥0.6065 | ¥0.0828 | ¥0.0587 |
| 相对原生的费用降低 | — | — | 63.14% | 73.86% |
表中为自主保存组。后两轮均无需主模型,平均估算费用比原生同任务降低 68.50%。 降幅仅指复用阶段;包含首次积累的三轮合计 ¥0.7480,仍比原生单轮乘三的外推参考高 11.04%。费用包含 Jev,沿用固定费率,非实际账单。
…
