🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

经验调度器 yinhong-zhou/jevdo

DeepSeek Harness
yinhong-zhou28 天前有提交已提供中文文档扫描:含敏感能力

以 Jev 为调度核心的新一代 harness 架构。

37.5/100
综合分
8
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yinhong-zhou/jevdo
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/22) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >=24.14.0,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包jevaction(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24.14.0 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 04:48:48

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 46 处,展示前 44 条)
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:11
    const json = async file => JSON.parse(await readFile(path(file), 'utf8'));
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:12
    const put = async (file, data) => { await mkdir(dirname(path(file)), { recursive: true }); await writeFile(path(file), JSON.stringify(data, null, 2));
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:12
    const put = async (file, data) => { await mkdir(dirname(path(file)), { recursive: true }); await writeFile(path(file), JSON.stringify(data, null, 2));
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:13
    const log = async (event, details = {}) => { await mkdir(path('.dev'), { recursive: true }); await appendFile(path('.dev/events.jsonl'), JSON.stringif
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:13
    const log = async (event, details = {}) => { await mkdir(path('.dev'), { recursive: true }); await appendFile(path('.dev/events.jsonl'), JSON.stringif
  • 发起网络请求
    benchmarks/developer-workflows/dev.mjs:19
    const response = await fetch(info.url + '/health', { signal: AbortSignal.timeout(800) });
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:58
    await mkdir(path('.dev'), { recursive: true });
  • 执行外部命令来自配置/变量
    benchmarks/developer-workflows/dev.mjs:60
    const child = spawn(process.execPath, [path('dev.mjs'), '_serve', role, randomUUID()], {
  • 发起网络请求
    benchmarks/developer-workflows/dev.mjs:76
    await fetch(info.url + '/shutdown', { method: 'POST', headers: { 'x-instance': info.instance }, signal: AbortSignal.timeout(1000) });
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:84
    const source = await readFile(path('src/math.mjs'));
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:91
    const source = await readFile(path('src/math.mjs'));
  • 写入本地文件
    benchmarks/developer-workflows/dev.mjs:93
    await mkdir(path('build'), { recursive: true }); await cp(path('src/math.mjs'), path('build/math.mjs'));
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:99
    if (manifest.sourceHash !== hash(await readFile(path('src/math.mjs'))) || manifest.sourceHash !== hash(await readFile(path('build/math.mjs')))) throw
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:111
    if (await readFile(path('generated/client.ts'), 'utf8') !== expected) throw new Error('Generated client is stale');
  • 读取本地文件
    benchmarks/developer-workflows/dev.mjs:152
    const report = await json('.dev/test.json'); if (!report.passed || report.sourceHash !== hash(await readFile(path('src/math.mjs')))) throw new Error('
  • 读取密钥环境变量
    src/cli.ts:19
    jevConfigured: Boolean(process.env.TYPESAFE_API_KEY),
  • 读取本地文件
    src/cli.ts:31
    print(await createAction(config.store, projectId, JSON.parse(await readFile(resolve(file), 'utf8'))));
  • 写入本地文件
    src/cli.ts:52
    const folder = join(ROOT, '.runtime', `demo-${Date.now()}`); await mkdir(folder, { recursive: true });
  • 执行外部命令来自配置/变量
    src/cli.ts:57
    const execution = spawnSync(process.execPath, ['--import', 'tsx', fileURLToPath(import.meta.url), 'ask', id, `build_artifact ${id}`, '--literal-baseli
  • 读取本地文件
    src/cli.ts:61
    runs.push({ project: id, result: JSON.parse(execution.stdout), artifact: await readFile(join(folder, id, 'artifact.txt'), 'utf8') });
  • 读取本地文件
    src/config.ts:13
    const models = Models.parse(JSON.parse(await readFile(resolve(ROOT, 'config/models.json'), 'utf8')));
  • 读取密钥环境变量
    src/config.ts:20
    const options = { apiKey: process.env.TYPESAFE_API_KEY || '',
  • 请求外部主机api.typesafe.ai
    src/decision.ts:50
    const response = await fetch(this.options.endpoint ?? 'https://api.typesafe.ai/v1/systemone', {
  • 发起网络请求
    src/decision.ts:50
    const response = await fetch(this.options.endpoint ?? 'https://api.typesafe.ai/v1/systemone', {
  • 读取密钥环境变量
    src/dsh/host.ts:90
    apiKey: process.env.DEEPSEEK_API_KEY || '', baseUrl: process.env.DEEPSEEK_BASE_URL || 'https://api.deepseek.com',
  • 读取本地文件
    src/dsh/host.ts:156
    try { actions = (await readFile(resolve(runtime.store.home, 'events.jsonl'), 'utf8')).trim().split('\n')
  • 读取本地文件
    src/dsh/runtime.ts:72
    const root = await realpath(resolve(agent.session.header.cwd));
  • 执行外部命令来自配置/变量
    src/executor.ts:18
    const child = spawn(spec.command, spec.args, { cwd, env, shell: false, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] });
  • 读取本地文件
    src/executor.ts:45
    for (const entry of (await readdir(await within(project.root, folder), { withFileTypes: true })).sort((a,b) => a.name.localeCompare(b.name))) {
  • 读取本地文件
    src/learning.ts:14
    return readFile(new URL('../prompts/action-authoring.md', import.meta.url), 'utf8');
  • 发起网络请求
    src/model.ts:37
    const response = await fetch(`${this.options.baseUrl.replace(/ $/, '')}/chat/completions`, {
  • 读取本地文件
    src/store.ts:9
    const base = await realpath(root);
  • 读取本地文件
    src/store.ts:10
    const target = await realpath(resolve(base, path));
  • 写入本地文件
    src/store.ts:21
    await mkdir(join(this.home, group), { recursive: true });
  • 写入本地文件
    src/store.ts:24
    await writeFile(temporary, JSON.stringify(value, null, 2), { flag: 'wx' });
  • 删除本地文件
    src/store.ts:26
    finally { await unlink(temporary); }
  • 读取本地文件
    src/store.ts:32
    try { files = await readdir(folder); } catch (error) {
  • 读取本地文件
    src/store.ts:37
    schema.parse(JSON.parse(await readFile(join(folder, file), 'utf8')))));
  • 读取本地文件
    src/store.ts:54
    project.root = await realpath(project.root);
  • 写入本地文件
    src/store.ts:78
    await mkdir(this.home, { recursive: true });
  • 写入本地文件
    src/store.ts:80
    await appendFile(join(this.home, 'events.jsonl'), `${JSON.stringify({ at: new Date().toISOString(), ...event })}\n`);
  • 读取本地文件
    src/store.ts:87
    hash.update(file).update(await readFile(await within(project.root, file)));
  • 读取本地文件
    src/tools.ts:33
    const text = await readFile(await within(root, path), 'utf8');
  • 写入本地文件
    src/tools.ts:41
    await writeFile(destination, content);
扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:api.typesafe.ai

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-brand@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-util-values@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-scope@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-session-projection
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • Jev调度核心
  • 智能体循环
  • 可复用动作

README

由 DeepSeek 最新模型翻译生成
JevDo 模型现在只是个工具。 以 Jev 为调度核心的新一代 harness 架构。 Action 沉淀经验 · Jev 决定下一步 · 大模型只是选项之一 Just Jev it. 简体中文 · English 使用场景 · 快速开始 · 工作方式 · 实验结果 · 贡献指南 会做的事,为什么还要再想一遍? 第十次打开同一个项目,它还在读配置、找脚本、拼命令,把上周已经走通的路再想一遍。JevDo 在调用大模型之前,先让 Jev 判断:这件事,是不是已经会了?已有操作能处理,就直接调度执行;遇到新问题,再交给主模型。主模型把值得复用的做法保存为 Action,经过验证,留给下一次会话。 接力长什么样 三个使用示例,假设项目已保存并验证了对应的 Action。 ① 日常修 bug “启动后台,修掉订单列表的分页 bug,跑完单测和构建再交给我。” Jev 启动依赖与服务,检查就绪 [start-admin-backend] ↓ 主模型 读 issue,定位并修复分页逻辑 ↓ Jev 跑单测、构建,核对退出码与产物 [test-and-build] ↓ 主模型 说明修改与验证结果 ② CI 红了 “CI 的 lint 又挂了,本地复现修一下,确认能过。
展开完整文档(README 剩余 1 节)
JevDo

模型现在只是个工具。

以 Jev 为调度核心的新一代 harness 架构。
Action 沉淀经验 · Jev 决定下一步 · 大模型只是选项之一

Just Jev it.

简体中文 · English

使用场景 · 快速开始 · 工作方式 · 实验结果 · 贡献指南

会做的事,为什么还要再想一遍? 第十次打开同一个项目,它还在读配置、找脚本、拼命令,把上周已经走通的路再想一遍。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,沿用固定费率,非实际账单。

这是原实验的事后三任务子集统计,没有重跑或改写原始数据;小样本一次采样,非公开基准成绩。原四任务的 31 → 8 次、约 74% 调用降幅及回滚记录保留在历史报告中。最终三任务结果 · 费用拆解 · 原四任务报告 · 原始轨迹

快速开始

需要 Node.js 24.14+。先运行不需要 API 密钥的跨会话复用演示:

git clone https://github.com/yinhong-zhou/jevdo.git
cd jevdo
npm ci
npm run demo

接入真实 Jev 与主模型,或替换自己的 DSH 默认 Loop,见 安装与配置。插件提供 Loop、Action 工具和维护提示;实际执行继续使用宿主工具。

文档与开发

配置与实现参考 · Action 规格 · 使用场景 · 反馈问题

欢迎提交 Action 示例、复现用例、Loop 修复与文档改进。开发约定与上游协作方式见 贡献指南。

npm run check
npm test
npm run build

当前可学习操作以固定命令和项目绑定为主,任意自由参数、完整 Web UI 和多 Agent 组合兼容性不在已验证范围内。核心入口见 src/dsh/index.ts,完整实现边界见 参考文档。

来源与协议

MIT。感谢 DeepSeek Harness 的作者与贡献者提供插件与 Agent 运行底座。本项目适配了其官方 Loop 生命周期代码,原版权与来源保留在 第三方声明 和 适配代码。
预览分享卡片长什么样 ↓yinhong-zhou/jevdo
分享 · DeepSeek Harness Hub
yinhong-zhou/jevdo

以 Jev 为调度核心的新一代 harness 架构。

回到顶部