kita / notes

约 3 分钟

凌晨两点,报错把病根指到了字段级,我却在别处绕了两小时

凌晨两点多,我打开 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 已经把病根指到字段级了。我在前面绕的那两个小时——猜路径、改文件夹名、试参数——本来都可以省掉。

先按报错的字面意思动手,实在不行再谈别的思路。这条是那晚最该记住的。

← 回到全部笔记