deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English · 中文

在 DSH 的会话标签栏里,藏着一张自走棋棋桌:你可以亲自执蓝方,跟 AI 来一场人机对弈;也可以退到观众席,看两个 AI 各自挑好模型,在棋盘上互相对攻。这里的每一步都不是白想的:每个回合的决策,都是一次真实的模型请求。把思考档位拉到 High 或 Max,再点开思考记录,就能围观 AI 盘算「买谁、卖谁、凑什么羁绊、金币花在升级还是刷新」,把算盘一步步打给你看。胜负落在棋盘上,思路留在记录里。
棋局状态保存在浏览器端的模块级 store 中,切标签页、切会话都不会重置对局或打断正在进行的 AI 思考。
[row, col](row 0-3,col 0-6),战斗时镜像拼接为 4×14 战场。DSH 的标准插件安装机制是「组合包 → profile」:插件包在 package.json 中声明 dsh.bundle 并附带 patch 文件(cordis.patch.yml),用 dsh plugin 把它安装进任意 profile:
# 从本地 checkout 安装(在插件目录内执行;先构建出 lib/)
pnpm run build
dsh plugin --profile web add /Users/yejiming/Desktop/OpenSource/dsh-auto-chess
安装后验证配置层,再启动(或重启)Web 界面:
dsh --profile web --dump-config # 输出中应出现 auto-chess 层
dsh web # 重启后会话标签栏出现「自走棋」标签
插件已安装到本机的
webprofile(~/.dsh/profiles/web,@deepseek-ai/dsh-auto-chess以 link 依赖加入 bundle 列表)。Web 进程需重启才会扫描到新的 dshClient 包并注入客户端标签。
移除:dsh plugin --profile web remove @deepseek-ai/dsh-auto-chess 会同时移除依赖与对应层。
棋局本身(状态、经济、羁绊、战斗模拟)在浏览器界面中;服务端只仲裁 AI 的准备阶段决策,因此非法回复在服务端被拒绝,不会破坏浏览器端的棋局。游戏引擎(src/game/engine.ts)是纯 TypeScript、无依赖、按状态确定性的共享代码:服务端把每次 AI 请求里的完整局面克隆一份,用与浏览器完全相同的引擎逐条校验并应用模型返回的操作数组,返回「整批合法」的操作列表与推理文本;浏览器再用同一引擎把接受的操作用在自己的权威状态上——两边永远不会漂移。
每次 AI 决策都是发往所选 provider/model 路由的一次独立辅助请求。系统提示词要么是用户编辑后的文本,要么是包默认文本(完整规则、严格 JSON 数组返回格式、正确案例、错误示范、基本策略);唯一的用户消息包含该侧棋手的完整局面(生命、金币、经验/等级、上场名额、备战区棋子 JSON、棋盘布阵 JSON、当前羁绊、商店 JSON、上一轮战斗结果、对手已知阵容——上场数量、星级构成、种族/职业计数与预估战力),以及(重试时)上一次非法回复与拒绝原因。决策请求还可携带思考档位(off/high/max):仅当所选模型声明支持该档位时,服务端才会把它作为请求的 reasoning effort 转发;不支持的档位回落到模型自身默认值。可选的按请求 actionTimeoutMs 与 maxActionOutputTokens 覆盖值只对本次请求替换配置默认值。回复中的推理块会随操作结果以 reasoning 字段返回给浏览器。
模型返回一个 JSON 数组(最多 4 个操作):{"action":"buy","name":"..."}、{"action":"sell","chess_id":N}、{"action":"move","chess_id":N,"pos":[r,c]}、{"action":"upgrade"}、{"action":"refresh"}、{"action":"end_prep"}。服务端对整批操作做合法性校验(金币、备战区上限、上场上限、坐标越界、格子占用、id 存在性等),任何一条不合法都会拒绝整批并带纠正反馈重试(默认最多 3 次);最后一次失败会返回 error 与 lastText/lastReason,浏览器据此显示错误与「重试」按钮。
辅助请求按局面构造成本消耗 token(约 1-2 KB 的局面文本 + 系统提示词 + maxActionOutputTokens,默认 32000)。高于 off 的思考档位会增加模型的思考 token,计入同一个输出预算——推理模型可能把大部分预算花在思考上,因此回复被截断时只要 JSON 数组完整仍会被解析,只有 JSON 丢失才触发重试。该请求与任何 agent 对话相互独立,绝不写入会话日志。
辅助请求是独立的模型请求;其提示词随每个棋局位置变化,因此与 agent 流量之间没有稳定的共享前缀。用户编辑系统提示词会整体替换文本,使 provider 侧的跨局前缀复用失效;默认提示词只在未编辑时保持稳定。
所有字段都有 loader 默认值;无库级默认值。
| 键 | 说明 |
|---|---|
actionTimeoutMs |
单次 AI 决策尝试的端到端截止时间(默认 300000 毫秒,即 5 分钟);界面不再提供修改入口。 |
maxActionOutputTokens |
单次 AI 决策回复的输出 token 上限。默认 32000(较宽松,因为推理模型会把思考计入输出预算);截断的回复只要 JSON 完整仍会被解析,只有 JSON 丢失才触发重试。界面不再提供修改入口。 |
maxActionAttempts |
每次决策请求的 AI 尝试总次数;最后一次尝试附带纠正反馈(默认 3)。 |
pnpm run build # tsdown 构建 node 半部 + 浏览器 bundle,并输出类型声明
pnpm run typecheck # tsc --noEmit
pnpm test # vitest:引擎(经济/合成/战斗/结算)、回复解析、请求校验、提示词组装
node tests/e2e/gui-round.spec.mjs # 端到端:另起一个 dsh web 测试实例(--port 3095,需安装本插件并配置可用模型)后跑完整一回合
本地依赖通过符号链接指向 Harness SDK checkout(~/.dsh/source/current 下的 packages/* 与 vendor/*),与 dsh-gomoku 的做法一致。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。