凌晨两点,报错把病根指到了字段级,我却在别处绕了两小时
凌晨两点多,我打开 dsh(DeepSeek Harness),屏幕中间一个转圈图标,一直转。报错是这样的:
HARNESS Failed to load plugins
@oil-oil/dsh-vision failed to apply loader entry 21cad614 (@oil-oil/dsh-vision):
list slot "settings.plugin.item" requires options.id
我以为重启一下就好。这一晚从两点弄到三点,笔记本风扇响得跟要起飞一样,最后是靠换台机器解决的。
报错其实已经把答案写着了
把最关键那句单独拎出来看:
list slot "settings.plugin.item" requires options.id
一个 UI 插槽在渲染插件条目的时候要 options.id 这个字段,而那个插件没提供。插槽校验失败,异常往上冒,把整个 dsh 的启动流程一起带停了。
也就是说不是那个插件不能用,是它把整台车顶停了。
我当时的想法是"一个插件而已,注释掉不就行了"。想得太简单了。
我找文件的方向全错了
按习惯,我去找这些文件:
harness.config.js
harness.config.ts
dsh.config.json
plugins.json
一个都不存在。
真正生效的是 settings.yaml 和 whale-purse.settings.json——这两个文件名我从来没见过。
目录也是绕的:我一直在根目录的 node_modules 里翻,翻了半天火气上来了,后来才发现插件装在 profiles/node_modules/@oil-oil/ 下面。这是多 Profile 架构,每个 profile 有自己独立的一套依赖,根目录那个 node_modules 跟我没关系。
改名绕过了白屏,但死法变了
实在找不到注册信息,我干脆把插件目录物理改名:
node_modules/@oil-oil/dsh-vision → dsh-vision.bak
白屏不见了,换成:
dsh web exited with code 1 before serving
启动流程仍然硬依赖那个包,找不到就直接退。等于从"卡死"变成"秒退",更难受。到这一步日志才终于给了有用信息,路径在用户主目录下的 deepseek/logs/server.log。
--skip-plugins 在这个版本是摆设
命令行参数我也试了:
.\DeepSeekHarness.exe start --skip-plugins
插件照旧加载、照旧报错。
先试 dsh start --skip-plugins 的时候还闹了个笑话:
dsh : 无法将"dsh"项识别为 cmdlet、函数、脚本文件或可运行程序的名称
我根本没把它加进 PATH,得在当前目录用 .\dsh.exe。后来试环境变量 DSH_SKIP_PLUGINS=@oil-oil/dsh-vision,一样没起作用。
这个 rc 版本里 --skip-plugins 是形同虚设的。 插件的注册信息被写进了 profiles 的本地状态(就是前面那两个文件),加载链路比普通插件深,命令行开关够不到。最后的解法是去这几个文件里把 @oil-oil/ 相关的注册项物理删掉。
那次有没有彻底修好?我不知道。记录到 dsh web exited with code 1 就断了,后面我应该是直接换了台机器重来。
那晚还撞上两条别的:
Error: subprocess-local: terminal inspection is unsupported on platform win32
它要调 UNIX 特有的 pty / termios 来模拟终端,Windows 原生没有。这不是 bug,是平台边界,绕不过去,只能换环境。
This model's maximum context length is 1048576 tokens.
However, you requested 1048979 tokens (792979 in the messages, 256000 in the completion).
超了 403 个 token。百万级上下文听着宽裕,但把整晚的日志一股脑往里塞,一样撞墙。
最亏的地方
requires options.id 已经把病根指到字段级了。我在前面绕的那两个小时——猜路径、改文件夹名、试参数——本来都可以省掉。
先按报错的字面意思动手,实在不行再谈别的思路。这条是那晚最该记住的。