让智能体用带类型的判断代替散文回答
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/kDunn86923/jevcore.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 取源不可用(Error: github tarball HTTP 404 @ https:
- · api.github.com
- · repos
- · kDunn86923
- · jevcore
- · tarball)
扫描于 2026/11/1(0 天前)
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
为 DeepSeek Harness、Model Context Protocol 和普通 Node 提供类型安全的 Jev:用带类型的判断代替散文,默认离线。
README
由 DeepSeek 最新模型翻译生成jevcore
dshfind
DSH Market
jevcore MCP server
TypeSafe Jev,供 DeepSeek Harness 以及任何其他 MCP 宿主使用。
Jev 不是聊天模型。它回答带类型的问题 —— noul(是/否)、choice、score —— 并返回校准过的概率。它不写散文,让它写就是范畴错误。这个项目给智能体的正是这层接口,不多给一点。
默认离线。出网行为公开披露。没有任何东西默认开启。
📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 95 plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
三个包,一层决策
| 包 | 是什么 | 什么时候用 |
| jevcore | 决策本身。不从 DeepSeek Harness 或 Cordis 导入任何东西。
展开完整文档(README 剩余 1 节)
jevcore
dshfind
DSH Market
jevcore MCP server
TypeSafe Jev,供 DeepSeek Harness 以及任何其他 MCP 宿主使用。
Jev 不是聊天模型。它回答带类型的问题 —— noul(是/否)、choice、score —— 并返回校准过的概率。它不写散文,让它写就是范畴错误。这个项目给智能体的正是这层接口,不多给一点。
默认离线。出网行为公开披露。没有任何东西默认开启。
📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 95 plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
三个包,一层决策
| 包 | 是什么 | 什么时候用 |
| jevcore | 决策本身。不从 DeepSeek Harness 或 Cordis 导入任何东西。 | 你想在普通脚本、服务或自己的 harness 里用 Jev |
| jevcore-dsh | DSH 插件:一个服务、三个工具、两道需手动开启的闸门 | 你在跑 DeepSeek Harness |
| jevcore-mcp | 同样的三个工具,走 MCP,带 stdio 二进制 | 你的宿主说 MCP,但不是 DSH |
适配层刻意做得很薄。packages/dsh 只有四个文件:声明工具 schema,转换钩子载荷。所有决策相关的东西 —— 原语、服务商、出网契约、策略、闸门 —— 都在 core 里,这样新写的适配层不会偏离其他适配层给出的保证。
三个包的运行时要求有一处不同:jevcore-dsh 跟随 harness,需要
Node ^22.19.0 || >=24.0.0,而 jevcore 和 jevcore-mcp 需要 >=20。
为什么做这个
2026-09-17 到 09-20 之间,冒出了十九个把 Jev 接进 DSH 的插件。审计它们的源码后发现一个一致的套路:标着 guard、gate 或 warden 的那个模块,同时也是把提示词、工具参数和文件内容发给第三方的模块,而 README 一般不说这件事。有几个默认开启。还有一道闸门,能被它正在守护的模型重新配置。
这个项目沿用同一思路,但把那些失败模式都设计掉了:
| 特性 | 这里如何保证 |
| 你不主动请求,就不会有网络调用 | 默认服务商是离线 mock;走真实链路需要同时满足 provider: live 和已解析的凭据 |
| 每次传输都在发生前点名 | 每个功能启动时打一行日志:off 或 SENDS <feature> { fields } |
| 禁用的门不注册任何东西 | 由测试验证,不靠约定——禁用的门根本不添加事件监听器 |
| 模型无法放宽自己的约束 | 没有任何工具暴露门的配置 |
| 判官答不上来,绝不等于「放行」 | 未决结果走显式配置,默认 ask |
出口契约
这部分值得在安装前先读。
传输按功能逐个决定,每个功能默认关闭。插件加载时会打印自己的契约:
[jevcore] provider=mock endpoint=none egress=OFF (no network calls will be made; every answer is synthetic)
[jevcore] ready - provider=mock - gates: safety=off context=off
换成 provider: live 并启用所有功能后,同一份报告会明确列出什么会离开本机:
[jevcore] provider=live endpoint=https://api.typesafe.ai egress=ON
[jevcore] SENDS tool:jev_ask { state<=16000c questions<=4000c }
[jevcore] SENDS tool:jev_rank { state<=16000c questions<=4000c }
[jevcore] SENDS tool:jev_check { state<=16000c questions<=4000c }
[jevcore] SENDS gate:safety { state<=8000c questions<=2000c }
[jevcore] SENDS gate:context { state<=6000c questions<=2000c }
[jevcore] redaction is best-effort; it removes named fields and known secret shapes, and cannot
recognise an unrecognised secret in free text
| 功能 | 默认关闭? | 发送什么 |
| tool:jev_ask | 模型调用时才运行 | 模型传入的参数,脱敏之后 |
| tool:jev_rank | 模型调用时才运行 | 查询加上每个候选 |
| tool:jev_check | 模型调用时才运行 | 断言及其证据 |
| gate:safety | 是——需显式开启 | 工具名、它的参数、工作区根目录 |
| gate:context | 是——需显式开启 | 智能体刚收到的一大段工具结果 |
工具只在模型选择调用时才传输,这在对话记录里看得见。门会在每次匹配的工具调用上运行,这一点看不见,所以做成显式开启。
脱敏,以及它诚实的边界
发送任何内容之前,src/redact.ts 会跑两遍:敏感字段名(password、token、apiKey、authorization、……)下的值整体替换;漏进自由文本的密钥形态字符串做模式匹配(Bearer …、sk-…、ts_live_…、AWS/GitHub/Google 密钥形态、JWT、私钥头、连接串里的凭据)。
这是缓解措施,不是许可。一个密钥既藏在无法识别的键名下,又……
不匹配已知形状的内容会直接放行。如果这种可能性对你的工作负载不可接受,就不要启用 live 服务商。
安装
作为 DeepSeek Harness 插件
dsh plugin --profile <profile> add jevcore-dsh
或者从本地检出安装:
dsh plugin --profile <profile> add /absolute/path/to/jevcore/packages/dsh
packages/dsh 按名称导入 jevcore,所以从检出安装时,还需要让配置档能解析到 core(add /absolute/path/to/jevcore/packages/core)。
然后确认这一行已激活——插件列表里 jev 应显示为 active,而不是 failed——再检查日志里的启动报告。
作为 MCP 服务器
对于支持 MCP 的宿主,同样三个工具可通过 stdio 使用:
npx -y jevcore-mcp
要专门接入 DeepSeek Harness,安装一个只含配置的 bundle,它的补丁会插入 harness 自带的 MCP 客户端:
- insert:
- id: jev-mcp
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: jev
transport: stdio
command: npx
args: ['-y', 'jevcore-mcp']
env:
TYPESAFE_API_KEY: '<the key>'
failOnStartupError: true
env 映射不是可选项:DSH 会把环境里所有形似凭据的变量名——只要包含 KEY、PASSWORD、SECRET 或 TOKEN,不分大小写——从交给子进程的环境里剥掉,然后再把这个映射合并回去。你在 shell 里导出的 key 永远传不进去,服务器会一直停在离线 mock 上,还不报错。
服务商由环境变量决定:
| 变量 | 作用 |
| TYPESAFE_API_KEY | 存在时选择 TypeSafe 路由 |
| OPENROUTER_API_KEY | 存在且未设置 TypeSafe key 时选择 OpenRouter 路由 |
| JEV_PROVIDER | mock、live 或 openrouter——覆盖上面的判断规则 |
| TYPESAFE_MODEL / OPENROUTER_MODEL | 所选路由的模型 id |
| TYPESAFE_BASE_URL / OPENROUTER_BASE_URL | 所选路由的 API 根地址 |
两个 key 都没有时,它停在离线 mock 上。和插件不同,MCP 服务器只在启动时解析一次凭据,所以设了 JEV_PROVIDER=live 却缺 key,是启动错误,而不是每次调用才出意外。
它的出网报告写到 stderr,绝不写 stdout——在 stdio 传输上,stdout 就是协议通道,多出一行就会破坏数据流。
切换到 live
接入 Jev 有两条路由。两者调用同样的模型,返回同样的类型化答案;区别在于谁持有你的凭据、谁的服务器能看到你的状态。
直连 TypeSafe——如果你有 console.typesafe.ai 的 key,用这个:
- insert:
- id: jev
name: 'jevcore-dsh'
config:
provider: live
apiKeyRef: TYPESAFE_API_KEY # a reference, never the key
model: jev-latest
经由 OpenRouter——如果 TypeSafe key 不好弄,而你已经有一个 OpenRouter 密钥了。OpenRouter 提供 System One 模型的路径和 TypeSafe 一样,都是 POST /v1/systemone,位于它自己 API 根路径下一层。所以这是通往 Jev 的官方文档路线,不是近似方案:
- insert:
- id: jev
name: 'jevcore-dsh'
config:
provider: openrouter
openRouterApiKeyRef: OPENROUTER_API_KEY
model: jev-latest # a bare jev-* id, or typesafe/jev-1.13
走这条路线,只需把官方 @typesafe-ai/sdk 指向 https://openrouter.ai/api,并带上你的 OpenRouter 密钥。这是 OpenRouter 自己文档里写的集成方式,不用再维护第二个客户端。
关于 OpenRouter 路线,有两点要了解:
- 你的状态数据发往 OpenRouter,不是 TypeSafe。 这是另一个第三方,数据保留和日志策略都不同。启动报告会写明端点,原因就在这里。请读报告,不要从服务商名字去推断数据去向。
- 它会返回费用,TypeSafe 自己的路线不返回。所以这里会填 usage.costUsd,那边没有。
模型 id 必须是 System One 的。裸 jev-latest 是默认值,不需要前缀;typesafe/ 可以用在带版本号的 id 上,比如 typesafe/jev-1.13,但不能用在浮动标签上——typesafe/jev-latest 不被这条路线接受。其他任何 id 都会被路由到聊天模型,它返回的是散文,本插件无法把它当作决策来解读。所以这类 id 在调用前就被拒绝,而不是调用后再误读。
无论走哪条路线,凭据都先通过 DSH 的凭据服务解析,再查同名环境变量。每次调用都会读取,所以进程运行期间新增的密钥也能生效。凭据从不写日志,从不从工具返回,也从不写入配置。每条路线各有自己的引用(apiKeyRef 和 openRouterApiKeyRef),两者不会意外共用同一个密钥。
@typesafe-ai/sdk 是唯一的可选依赖;插件离线也能加载和运行,不需要它,只有你选的那条路线才需要。
配置
| 键 | 默认值 | 含义 |
| provider | mock | mock(离线、确定性、合成数据)、live(TypeSafe)或 openrouter |
| apiKeyRef | TYPESAFE_API_KEY | live 路线的凭据引用 |
| openRouterApiKeyRef | OPENROUTER_API_KEY | openrouter 路线的凭据引用 |
| baseURL | https://api.typesafe.ai | live 路线的 API 根路径。非 HTTPS 会被拒绝,回环地址除外 |
| openRouterBaseURL | https://openrouter.ai/api | openrouter 路线的 API 根路径。规则相同 |
| model | jev-latest | 随每次请求发送。OpenRouter 路线上裸默认值可用;typesafe/ 需要带版本号的 id,比如 typesafe/jev-1.13,typesafe/jev-latest 不被接受 |
| logLevel | warn | silent \| warn \| info \| debug |
| minConfidence | 0.7 | 低于此值,答案不予采纳 |
| minProbability | 0.6 | 低于此值,决策不予采纳 |
| maxStateChars | 按功能 | 替换每个功能的 state 上限。0 表示「保留声明的上限」 |
| gates.safety | false | 分发前判断工具调用 |
| gates.context | false | 扣留体量大、无信息量的工具结果 |
声明的 state 上限为:三个工具各 16,000 字符,safety 与 context 两个门分别为 8,000 / 6,000 字符。maxStateChars 会替换所有这些上限,启动报告显示生效值而非声明值,所以它打印什么就执行什么。
门接受裸布尔值(safety: false),也接受带 onUndecided 的对象:ask(默认)、allow 或 deny。
ask 是一个问题,所以需要有东西来问。部署时若未组合审批服务,就无法升级给人工,DeepSeek Harness 会拒绝该调用而不是执行它:safety 门匹配到的每个工具都会被拒绝,运维人员看到的现象就是插件把 shell 命令弄坏了。docs/approval.md 讲了机制,插件 README 讲了部署视角。
未知值在加载时会被拒绝,并给出指明键名的消息,而不是被静默忽略——配置里的笔误不该悄悄改变隐私姿态。
使用方式
从另一个插件调用,不经过模型
服务是主要接口。这正是决策模型的意义所在:路由或门控决策不该花掉一次模型往返。
const jev = ctx.get('jev')
const result = await jev.ask({
feature: 'tool:jev_ask',
state: { ticket: 'I was charged twice.' },
questions: {
urgent: { type: 'noul', instructions: 'Does this convey urgency?' },
team: {
type: 'choice',
instructions: 'Which team should handle this?',
criteria: { billing: 'Payments, invoices, refunds', technical: 'Bugs, outages' },
},
},
})
result.answers 携带概率与置信度。拿它们做什么是你代码的事——src/policy.ts 里有个完整示例,带明确的置信度下限,答案不确定时产出 ask 而不是 allow。
从模型调用
三个工具,刻意保持少量且正交:
- jev_ask —— 针对一个状态的一批类型化问题。
- jev_rank —— 按一个标准给候选打分并排序,每个候选一个问题,一次往返完成。概率是逐候选的独立判断,不是分布。
- jev_check —— 这条证据支持这个主张吗?返回 supported、contradicted、conflicted、insufficient、undecided 或 unknown。矛盾优先于支持,因为既支持又反驳的证据是冲突,不是弱肯定。
内置技能
插件注册了一个技能 typesafe-ai-dsh,教智能体在什么时候用 Jev 判断力在什么场景下是合适的工具,什么场景下属于范畴错误。它通过技能注册表注册,而不是作为目录随插件发布、让服务商去扫描,因此不依赖配置档把技能存放在哪里,插件移除时也能干净地消失。
正文放在 skills/typesafe-ai-dsh/SKILL.md,加载时读取,而不是内嵌,所以人编辑的文件就是最终发布的文件。有测试断言两者不会漂移。
注册表声明为可选依赖:没有组合技能子系统的配置档仍然能拿到服务和三个工具,只是会收到一条警告,说明技能被跳过。
mock 服务商
设置 provider: mock 后,每个答案都由问题和状态的哈希推导出来,因此测试可以断言精确值,也不会打开任何 socket。合成结果在三处标注:provider: "mock"、模型名 mock/jev-synthetic,以及结果上的 warning 字段。一个可能被误认为真实判断的 mock,比没有 mock 更糟。
状态
如实交代哪些验证过、哪些没有。
已验证
- 三个包共 410 个测试通过(核心 314 个、DSH 66 个、MCP 30 个),全程无网络访问,也没有 TYPESAFE_API_KEY。CI 会清空该变量,并期望测试套件照样通过。
- OpenRouter 路线已对真实 API 验证。 pnpm --filter jevcore run probe:live 驱动服务商,pnpm --filter jevcore-mcp run smoke:live 驱动整个 MCP 面——传输、工具 schema、服务和提供商——对真实 System One 模型(typesafe/jev-1.13-20260917)运行。一个三原语批次返回了 0.91 的 noul、0.97 的 choice,以及四级评分表上 1.05 的 score,用量报告为 { inputTokens: 469, outputTokens: 68, costUsd: 0.000019698 }。jev_rank 把一份凭证操作手册排在账单指南之前;jev_check 返回 contradicted。两个脚本都需要 OPENROUTER_API_KEY,且不纳入 CI。
- 载荷形状已对照厂商自己的类型定义检查。 test/vendor-conformance.test.ts 把本项目的问题与答案类型钉到两个 SDK 上,因此任一方向的漂移都会变成编译错误,而不是在唯一花钱又传数据的路线上发出畸形请求。正是这项检查发现了 score.criteria 被当作键值映射发送,而 API 要求有序数组——这个缺陷此前一直被桩化的单元测试放过。还有一个脚本用 OpenRouter 公布的 zod schema 校验我们的载荷,针对 alpha/decisions 路线;脚本和那条路线都已移除,因为 OpenRouter 服务商现在走文档化的 /v1/systemone 路径,用的是 TypeSafe 同一个客户端,而一致性测试已经覆盖了它。
- 插件能在运行中的 harness 里激活,工具可用。 插件行报告 active; jev_ask 对着 mock 返回了 urgent=true (0.8307) 和 team=billing (0.5027),耗时 1 ms;jev_check 返回了 verdict="insufficient",并给出三个概率。每个结果都带有 provider: "mock",token 用量为零,所以默认路径没有发起网络调用。
- 内置技能完成注册。 typesafe-ai-dsh 出现在会话技能目录中。
- 默认路径不发起网络调用:挂载插件并通过服务应答时,监视 globalThis.fetch 断言了这一点;组装 MCP 运行时的时候也断言了一次。
- 禁用的门不会注册任何事件监听器,被拒绝的出口流量也永远到不了服务商。
- Config 满足 Cordis 在插件启动前要求的 Standard Schema 协议。
- 这里用到的每个 DSH API(ctx.provide、ctx.effect、tools.register、defineTool、tools/pre-execute、tools/post-execute、credentials.resolve)在使用前都对照已安装的运行时检查过,payload 类型来自已安装的声明文件。
未验证或已知损坏
- TypeSafe 路由跑通了,但只是轻度验证。 packages/core/scripts/probe-live.mjs(pnpm --filter jevcore run probe:typesafe)向真实 API 问了三件事:十组判定结果已知的 claim/evidence 对、同一个问题重复六次、一个带 criteria: {true, false} 边界的 noul。两次独立运行结果一致——支持性证据得分 0.95,矛盾证据 0.10,对 claim 保持沉默的证据 0.03,重复问题的波动不超过 0.01。边界被接受了。尚未测试的是请求周边的一切,而不是请求本身:真实账号上的配额、限流和权益行为。
- 当前运行的构建里,jev_ask 的描述带有一个损坏的破折号。 它读作 branches on —?routing,而那里本该是一个 em dash 加一个空格。原因:开发早期的一次 UTF-8 往返把 em dash 的第三个字节替换成了 ?。磁盘上已经修好——共四处,剩余零处,源码和构建产物中都确认过——但正在运行的进程在修复前就加载了模块,不重启就无法重新读取。破折号本身只是外观问题,预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
kDunn86923/jevcore
让智能体用带类型的判断代替散文回答
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份系统提示词,喂给多个 coding…
★ 931已汉化DSH
73.8
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7