dsh-blackjack 插件
社区第三方项目声明
本插件由个人开发者发布与维护,与任何模型厂商均无关联:不是任何厂商的官方 项目、不代表其立场、未获其背书或授权,也不使用其名称与标识作为本项目的品牌 元素。包名与命令中的
dsh-/bj-前缀仅遵循社区插件的命名惯例,用于标识 本插件的兼容目标与命名空间,不代表 dsh 官方发布或认可。
安装进你自己的 dsh 后,在对话里直接打开一张 21 点牌桌:赢牌拿游戏币 CHIP,CHIP 可以单向兑换为「已兑换额度」,这份额 度只能在本插件的续命路由里消费——当且仅当你自己配置的模型额度耗尽时,插件 才会用这份额度接住那一次失败的请求,让你不用中断手上的任务去充值或等待。
参与永远免费:每天有固定的免费手数,玩输了不扣任何东西,也不影响你自己的 密钥或余额。全部规则细节见下方「参与规则」。
这是什么、怎么玩
牌桌由一个牌局服务端(packages/server,由运营者自托管)维持权威状态,插件只
是它的客户端:
- 文字命令:
/blackjack系列命令零成本——它们全部走 dsh 的命令层而不是发 一条模型消息,所以打牌本身不消耗你的任何 token 额度。 - 图形牌桌(可选):如果你的 dsh profile 带了 Web GUI(例如
@deepseek-ai/dsh-web-app),对话流里会出现一张可点击的牌桌卡片,动作按钮 与文字命令等价,只是换了个界面。没有 Web GUI 的纯终端 profile 里,文字命令 照常可用,插件不会因为缺一个可选服务而报错。
一局牌:/blackjack deal 开局(默认用当天的免费手,也可以 deal <注额> 用余
额加注)→ 按提示用 bj-hit / bj-stand 等动作命令打完 → 结算,赢家拿 CHIP。
命令表
| 命令 | 作用 |
|---|---|
/blackjack |
查看当前状态:有牌局在打就显示牌局,没有就显示余额/免费手/兑换门槛 |
/blackjack agree |
首次使用必须先执行:阅读须知并同意后才能上桌 |
/blackjack deal [注额] |
开一局新牌。不带参数用当天的免费手;带一个正整数注额则从余额里加注 |
/blackjack exchange [数量] |
把达标余额兑换为可消费额度。首次(还没绑过 GitHub)会给出一个配对链接,需要去浏览器完成绑定;绑定之后带上数量就在命令里直接兑换,不再需要浏览器 |
/blackjack reset confirm |
清除本机保存的牌桌凭证(服务端记录不受影响,重新 agree 会注册一个新账户) |
/bj-hit |
要一张牌 |
/bj-stand |
停牌,进入结算 |
/bj-double |
加倍注额并再要一张牌 |
/bj-split |
把一对相同点数的牌分成两手 |
/bj-insure |
庄家明牌为 A 时购买保险 |
/bj-decline |
不购买保险 |
bj-* 六个动作命令只在有进行中的牌局时才有意义;没有牌局时执行会提示先
/blackjack deal。
兑换的两条路径
兑换要求绑定 GitHub(一个 GitHub 身份只对应一个钱包,这是奖池出口唯一的反小号 闸门)。绑定这件事只能在浏览器里完成——它走的是 GitHub 官方的 OAuth 授权码流。 但绑定只需要做一次:
- 首次:
/blackjack exchange给你一个短期配对码和链接。在浏览器里打开、 点「用 GitHub 继续」完成绑定,然后在同一页面的表单里填数量兑换。 - 之后:
/blackjack exchange <数量>。插件用它自己持有的令牌直接调服务端 的兑换接口,不再生成配对码、不再需要打开浏览器。不带数量时会先回显你的 余额与门槛,并提示补上数量——兑换不可逆,插件不会替你猜一个数字。
余额没到门槛、或者数量超过余额,都会得到一句明确的中文提示("余额还没到兑换门 槛。" / "余额不足以完成这个动作。"),账本一分不动。
安装
dsh plugin --profile web add -w dsh-blackjack
dsh --profile web
把 web 换成你实际要装的 profile 名。
尚未发布到 npm 时,上面这条命令还装不到东西。从源码装:
git clone https://github.com/yul761/dsh-blackjack cd dsh-blackjack && pnpm install # 会自动构建插件的 dist/ dsh plugin --profile web add -w "$PWD/packages/plugin"注意不能直接
pnpm add github:yul761/dsh-blackjack:这是个 monorepo, 从 git 源装会拿到仓库根(一个没有入口的私有 workspace 根),而不是packages/plugin里的插件包。
为什么一定要带 -w: dsh 的每个 profile 目录本身就是一个 pnpm 工作区(自
带 pnpm-workspace.yaml),而 pnpm 默认拒绝在没有 -w/--workspace-root 的
情况下向工作区根添加依赖——省掉这个参数,安装命令会直接失败退出,而不是装
出一个残缺的状态。这不是本插件独有的坑,其它社区 dsh 插件的安装文档也踩过同一
处并确认了同样的结论。
先进入一个会话,再用 /blackjack
在 dsh 的启动页(新开 dsh 时那个 “Into the Unknown” 界面)执行 /blackjack,
命令会真的执行,但画面上什么都不会出现——牌桌要等你进入一个会话后才显示。
这不是本插件的问题:宿主对所有插件注册的命令都这样(用一个只返回一行文字、
不碰任何服务的最小插件验证过,表现完全一致),而宿主自己的内置命令(如 /goal)
则会正常渲染并切进会话视图。
所以第一次使用请先让对话真正开始——随便发一句话,或者从侧边栏打开一个已有
对话——再执行 /blackjack agree。注意点“新建会话”是没用的:那会把你送回启动页,
正是坏掉的那个状态。
只要对话已经开始,后面全程正常,牌桌、按钮、结算都没有任何问题。
版本要求:本插件锁定 dsh 0.1.0-rc.6
插件把 @deepseek-ai/dsh-* 的 peer 全部精确锁在 0.1.0-rc.6,不是写成
^0.1.0-rc.6。这不是保守,是必须的:这套包锁步发布,rc 之间并不互相兼容,而
^ 会让包管理器给宿主没有的那个 peer 装上更新的 rc——0.1.0 就是这么崩的
(dsh-llm-deepseek@rc.8 配宿主的 dsh-llm@rc.6,启动即报
does not provide an export named 'offloadRequestImages')。
所以:请用 dsh@0.1.0-rc.6。跑在别的 rc 上会看到 peer 版本警告,届时等插件
跟进发新版即可。
安装成功后,dsh 会读取插件 package.json 里的 dsh.bundle.patch 声明并自动把
blackjack.cordis.yml 接进 profile 的 bundle 层——不需要你手工再写一份
--patch 覆盖层。
配置
装完开箱即用:serverUrl 默认指向本项目运营者自托管的那一份服务,不改配置也能
直接玩。要在 profile 的 cordis.patch.yml 里覆盖也可以:
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
serverUrl |
string | https://server-production-493c.up.railway.app |
牌局服务端地址。想自建奖池就改成你自己的部署地址——服务端与本插件同仓开源,见仓库根 README 的部署一节 |
enabled |
boolean | true |
设为 false 可保留安装但完全停用:不注册任何命令,也不挂任何路由或续命钩子 |
# ~/.dsh/profiles/<profile>/cordis.patch.yml
- id: blackjack
config:
serverUrl: https://your-blackjack-server.example.com
续命路由到底怎么触发(务必读完)
插件会在 llm/stream 上挂一个观察者,但它绝不会拦截正常调用。触发续命只
有在同时满足以下条件时才会发生:
这次调用用的是你自己配置的模型 provider(不是插件自己的奖池路由,避免 死循环);
这次调用没有产出任何内容——哪怕已经吐出一个字,也不算数,插件绝不会在 内容已经开始返回后中途换源,那样只会造成重复或截断;
调用是以配额耗尽这一类错误收尾的(不是网络错误、不是参数错误、不是别 的任何原因);
你在本插件里已经完成过
/blackjack agree(本机存有牌桌凭证;没有这份 凭证,插件根本不会尝试)。这里只看凭证,不预先检查你的已兑换额度够不够。这是刻意的:查余额要在每 次失败调用上多打一次网络请求,拿到的还是一个可能已经过期的快照;而"有凭证、 余额为零"这条路本身就是安全的——奖池调用会被服务端直接拒绝,插件于是把你 原本的那个错误原样交还给你,跟没装插件完全一样。
四条同时成立时,插件才会把这一次失败的调用重发到奖池路由。
切换提示去哪了(请注意): 成功切换时插件会输出一行「已切换至奖池余额继续
本次请求。」,但在当前 dsh 版本里它只写进 dsh 自己的日志,不会出现在对话界面
里——这个版本没有给插件提供任何"往对话里插一条非模型消息"的通道,唯一现成的
通道会把内容写进模型可见的历史,那是本项目明确不做的(不污染上下文、不让模型看
到)。换句话说:一次调用可能是靠奖池额度完成的,而你在界面上看不到提示;要确认
消耗,请用 /blackjack 查看已兑换额度的变化。等 dsh 提供插件可用的会话内通知位,
这条会改成界面内提示。
如果奖池也用完了、或者奖池服务本身连不上,插件不会伪造一个成功结果——你会 原样收到你自己那次调用本来的失败原因,就像没装这个插件一样。换句话说:装上这 个插件,一次调用的结果只可能不变或变好,不会变坏。
参与规则
- 参与永远免费。 每日固定几手免费牌,零成本参与;不存在、也不会出现"付费 换手数 / 换概率 / 换赔率"的任何设计。
- CHIP 与已兑换额度单向、封闭。
- 不可提现,不折算任何法定货币,界面不显示金额;
- 不可转让(含玩家之间转让),不可退换;
- 不会进入任何模型厂商的账户;
- 唯一用途是通过牌局服务端的续命路由消费——除此之外没有任何出口。
- 有赛季有效期。 已兑换额度有效期至本赛季末(含宽限期);连续一段时间无 游戏且无消费的账户余额会被回收进奖池。这些提醒会在插件里提前给出,兑换前也 会再提示一次。
- 你自己的 API key 永远不会进入这套系统:插件不读取、不托管、不代管你自 己 provider 的任何密钥,续命路由用的是牌局服务端自己签发的凭证。
卸载与清除本机凭证
只想清掉本地保存的牌桌登录凭证(例如换机器、或者想用一个全新账户重新开始), 不需要卸载插件:
/blackjack reset confirm
(不带 confirm 时会先回显一遍这条操作的说明,避免误触。)这只清除本机保
存的凭证,服务端那边的账户记录不受影响;用 /blackjack agree 即可重新注册一
个新账户。
要完全移除插件本身:
dsh plugin --profile web remove dsh-blackjack