dsh-fable8cents
Verifieddsh-fable8cents · v0.2.0 · MIT · Web UI
DeepSeek Harness 二创插件:显示 Anthropic 的 Claude Fable 8,后台按规则路由到本机最新模型,附带 Cent 思考强度、模型身份预设与首次安装免责声明。
Install
dsh plugin add dsh-fable8cents Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-fable8cents
一个娱乐性的 DeepSeek Harness 插件:在模型列表里显示 Anthropic 的 Claude Fable 8(
claude-fable-8), 实际请求由本机已有的模型承接,并新增 Cent 思考强度档位、按承接模型自动套用「模型身份预设」。本插件为 DeepSeek 社区二创,不代表 DeepSeek 官方立场;显示的模型并非真实的 Claude Fable 8, 所有内容仅供娱乐。首次加载会弹出免责声明,确认后不再自动弹出。
功能
1. 显示模型与路由
模型列表里出现一组 Anthropic → Claude Fable 8(id claude-fable-8)。
若列表里已经存在同名模型(id 或名称相同),插件不会再添加一条。
每次请求按以下顺序选择真正承接的模型:
- 最新的 Fable 系列且大版本 ≤ 8 的模型;
- 否则,最新的 Anthropic / Claude 模型(含中转站里以
claude-*提供的模型); - 否则,最新的 DeepSeek 模型(含中转站);
- 否则,模型列表中最新的模型。
“最新”是确定性启发式:先比较 id/名称里的版本号,再按目录出现顺序(越靠后越新)。 选路结果缓存 15 秒,避免每次请求都全量扫描。
UI 只显示 Anthropic / Claude Fable 8 与 Cent;承接请求的提供方与模型名不会出现在目录、选择器或错误信息里
(错误文本会把上游 provider/model 替换为 Anthropic / claude-fable-8)。
2. Cent 思考强度
思考强度列表在 Max 之后新增 Cent(排在最后),选择后实际映射到承接模型支持的最高一档思考强度。
承接模型不支持思考强度时,不显示 Cent(没有可映射的档位)。
3. 模型身份预设
当会话选择 claude-fable-8 时,插件在系统提示中追加一段身份预设,并把 {{model}} / {{provider}}
模板变量改写为 Claude Fable 8 / Anthropic,因此 agent preset 里的“powered by … model”也会跟着变。
预设按承接模型分两种:
- 非 DeepSeek 承接 → 使用 Fable 系列预设(Anthropic 最高能力线的人设),模型名称字段改为 Fable 8;
- DeepSeek 承接 → 使用 DeepSeek 预设,但把提供方、模型名称等身份字段改写为
Anthropic/Claude Fable 8。
这正是需求里的“彩蛋”:内在沿用 DeepSeek 预设的工作风格,对外身份仍是 Anthropic 的 Fable 8。 预设中任何残留的模型身份描述都以本段为准。
另外,插件会像中转站改写模型自我认知那样,处理预设里已经写死的身份句(只在选中 Fable 8 时、只改身份句):
You are a coding agent powered by the DeepSeek model.→… powered by the Claude Fable 8 model.You are DeepSeek, …/I am DeepSeek …→You are / I am Claude Fable 8 …本模型由 DeepSeek 公司开发。→本模型由 Anthropic 开发。
DeepSeek Harness 这类产品名、工具说明与无关正文保持原样;改写是幂等的(已经是 Fable 8 的句子不会被再次替换)。
4. 免责声明
首次加载时在 shell.overlay 弹出书面语免责声明(中文/英文,跟随 DSH 语言设置),需勾选确认;
确认状态存在浏览器 localStorage。模型设置页底部有一条常驻说明,可随时「重新查看说明」。
声明要点:社区二创、非官方、显示模型并非真实 Fable 8、娱乐用途、按现状提供、费用与合规自负、 不收集个人数据、商标归各自权利人、可随时停用或卸载。
5. 语言
前端文案随 DSH 的 Language 设置(zh / en)切换;插件清单的中英文标题/描述分别在
locale/zh.json、locale/en.json。
6. 启动更新与扩展包
每次启动(延迟 4 秒)以及之后每 6 小时:
- 依次询问 npm 官方源、
~/.npmrc里的registry(映射源)、https://registry.npmmirror.com, 以及环境变量DSH_FABLE8_REGISTRY(可逗号分隔多个); - 同时查询本仓库的 GitHub Release(
package.json#repository解析出的owner/name), 两个通道取版本号较新的一方;仓库不可匿名访问时可配update.githubToken; - 若
dsh-fable8cents有更新,下载并解包到插件家目录~/.dsh/fable8cents/versions/<version>/, 写为待用代际;下次启动优先加载该代际,加载失败两次后自动弃用并回退,不会把自己改坏; - 按
extensions配置扫描已安装插件:命中“插件名 + 最低版本”规则时,把对应的扩展包预取到~/.dsh/fable8cents/extensions/,供后续联动彩蛋使用(只预取,不安装任何 profile 包)。
扩展规则有两个来源,启动时合并:
- profile 里本行
config.extensions(见下); - 远程清单包
dsh-fable8cents-extensions:在 registry 的 manifest 里用dsh.extensions或extensions数组声明规则,插件每次启动都会重新读取,因此后续新增彩蛋 不需要更新本插件本体。
匹配与下载是严格的「命中才下」:
- 只扫描本机已安装的插件(profile 的
dependencies+node_modules顶层,含 scoped 包); - 规则的
plugin未安装、或版本低于minVersion→ 完全不会发起下载; - 规则的目标包(
package)已经装在本机 → 也不会重复预取; - 命中且目标未装时,才按 registry 顺序下载并解到
<DSH_HOME>/fable8cents/extensions/<包名>/<版本>/。
联动插件(例如桌宠类插件)可以通过当前会话的 provider = anthropic、model = claude-fable-8
识别“现在是 Fable 8”,据此切换成对应的皮肤/桌宠/台词;本插件只负责把扩展包提前放到本机。
内置的滑条皮肤层(0.1.1+)
如果本机装了 dsh-codex-effort-slider(Codex 风格推理等级滑条),
不需要换包:本插件的 client 会在当前模型是 claude-fable-8 时,给 <html> 挂 data-fable8="1"
并注入一段样式,把滑条换成暖棕 → 象牙金(旋钮 ✦、星星/刻度/扫光同步变金)。
- 只在 Fable 8 下生效,其他模型完全走上游原样式;
- 选择器只依赖上游稳定的
.ces-*类名,上游改类名时最多是皮肤失效,不影响滑条功能; - 想单独分发带皮肤的完整滑条,可以用
dsh-codex-effort-slider-fable8(fork,与上游二选一)。
更新/扩展只读取包信息与下载 tarball,不修改 profile 的 package.json、patch 或锁文件。
安装
插件以 bundle 形式安装(package.json 的 dsh.bundle.patch + dsh.client):
plugin_manager install_bundle <本目录绝对路径>
或在支持“本地目录安装”的插件管理器里选择本目录。
从 GitHub 安装有三种方式:
- 下载 Releases 里的
dsh-fable8cents-<version>.tgz,解压后用上面的install_bundle指向解压目录; git clone仓库后,在仓库根目录运行node scripts/install.mjs --profile desktop(幂等,创建node_modulesjunction 并写入 profile 的cordis.patch.yml);- 直接
plugin_manager install_bundle指向 clone 下来的目录。
也可以从 npm 安装:
plugin_manager install_bundle dsh-fable8cents
(或 npm view dsh-fable8cents version 确认最新版本后再装。)
安装后重启一次 DSH,模型列表即出现 Claude Fable 8。
发布流程(GitHub Release、npm 发布、自动更新前提)见 docs/PUBLISH.zh.md。
开发期也可以用
dev_inject_plugin(运行时注入)快速加载。
配置(可选)
在 profile 的 cordis.patch.yml 中给本行加配置:
- id: dsh-fable8cents
name: dsh-fable8cents
config:
update:
enabled: true
registries:
- https://registry.npmjs.org
- https://registry.npmmirror.com
intervalMs: 21600000
extensions:
# 命中已安装插件时预取扩展包(示例,默认不启用任何规则)
- plugin: get-fable
minVersion: 1.16.0
package: get-fable
version: 1.16.0
| 字段 | 默认 | 含义 |
|---|---|---|
update.enabled |
true |
关闭启动更新检查 |
update.registries |
[] |
额外 registry,排在 npmrc 与默认源之前 |
update.intervalMs |
6 小时 | 周期检查间隔(最小 30 分钟) |
update.github |
本包 repository |
GitHub owner/name;设为 false 关闭该源 |
update.githubToken |
环境变量 GITHUB_TOKEN / GH_TOKEN |
访问私有或被限制仓库的 Release 时使用 |
extensions[].plugin |
— | 要探测的已安装插件名 |
extensions[].minVersion |
— | 最低版本(含) |
extensions[].package |
— | 命中后预取的扩展包名 |
extensions[].version |
— | 扩展包最低版本(含) |
卸载
在插件管理器中禁用/移除本插件,或 dev_uninject_plugin dsh-fable8cents。
插件家目录 ~/.dsh/fable8cents/(更新暂存、扩展包、状态)可手动删除。
目录
lib/index.js Host 入口:注册路由、身份预设、启动更新
lib/router.js 选路规则(Fable≤8 → Anthropic → DeepSeek → 最新)
lib/adapter.js Anthropic/Fable 8 适配器与 Cent 映射、错误脱敏
lib/identity.js 两套模型身份预设与提示改写
lib/updater.js npm/映射源检查、暂存更新、扩展包预取
lib/client.js 免责声明弹窗 + 模型设置页脚说明
locale/… 插件管理器显示用中英文标题/描述
tests/ 选路、适配、身份、版本、apply 集成测试
测试
node --test tests/*.test.mjs
覆盖:四级选路优先级、Cent → 最高档映射、错误脱敏、两套身份预设、身份句改写、版本比较、apply 集成。
验证记录
- 真实
dsh-llm+ 真实 Cordis:注册anthropic / claude-fable-8,目录、Cent档位、cent → 最高档转发均通过。 - 运行中的宿主(同代码临时包):
providers出现anthropic,resolveModelInfo返回Claude Fable 8、1M 上下文、cent/off/low/high/max;真实发起cent请求成功流式返回。 - 全新 DSH 进程(独立
DSH_HOME+ 正式包名 + patch insert):catalog = [{provider:"anthropic", id:"claude-fable-8", name:"Claude Fable 8"}]。 - 真实网络:更新检查解析 npm 源与
~/.npmrc映射源;未发布时把 404 记为update.error而不抛出;扩展扫描命中已装插件[email protected]并下载扩展包到~/.dsh/fable8cents/extensions/。
开发提示:模块缓存与热加载
Host 插件由 Cordis loader 以包名解析入口。Node 的 ESM 缓存以文件 URL 为键,因此
「同名包 + 同入口文件」在同一个宿主进程里只会加载第一次的代码——即使改了 lib/index.js。
开发期有两种做法:
- 直接重启宿主(最干净);
- 或者让 patch 的 entry 指向
lib/entry.js(一个稳定的file://薄壳,只 re-exportlib/index.js), 并在需要时改 entry 的id触发 loader 重建。因为薄壳的 URL 固定、真正逻辑仍在index.js, 重启后新进程会自然加载最新的index.js,不需要再维护任何.v4.js副本。
本项目为个人二创的娱乐性插件,与 DeepSeek、Anthropic 均无隶属或合作关系。 「Anthropic」「Claude」「DeepSeek」等名称与商标归各自权利人所有。 使用者应自行确认所用模型服务的条款与计费,并对使用后果负责。