Replies: 5 comments
|
同样的问题,感谢思路 |
0 replies
|
同样的问题,感谢 |
0 replies
|
thanks. |
0 replies
|
这个坑我们在做 Windows 修复包的时候也撞到了。koffi 3.1.3/3.1.4 的 win32-x64 预编译是坏的,一条链上会炸三处。安装失败、目录选择器崩溃、会话保存无声退出。楼里说的 pin 到 3.1.2 是对的。 我把这个检测做进了 dsh-win32 的 doctor。 |
0 replies
|
koffi 在部分 Windows 10 机器崩溃——#293(koffi 3.1.3/3.1.4 预编译损坏锁 3.1.2)同族,你这条补了硬件维度(旧 CPU/老系统)。 排查:锁 koffi@3.1.2 试下,或确认原生模块加载路径。Windows 原生依赖坑第 2/3 章有整理:https://github.com/Electricitysheep/dsh-handbook/blob/main/docs/02-quickstart.md |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
一、问题症状
npm 安装失败
安装到
koffi时报错:首次
npx @deepseek-ai/dsh web还会因为首次要装 500+ 包、且 npmmirror 逐条抓取很慢而看起来"卡死"。原生文件夹选择器崩溃
Web UI 里点"添加工作区",报:
服务静默挂掉
dsh 能启动,但页面加载 / 创建会话 / 保存会话时进程直接崩溃退出(退出码
3221225477=0xC0000005,原生访问冲突),无任何日志(JS 无法捕获原生崩溃),表现为"服务突然没响应"。整体不可用
上述任一项都会中断正常使用流程。
二、根因与修复思路
根因:dsh 依赖链里的 koffi(FFI 库)win32-x64 预编译二进制在这台机器上任何 FFI 操作(
koffi.load())即触发0xC0000005。koffi 在 dsh 中有 4 条 Windows 专属路径被用到:require(koffi)崩溃 → 误判 → 源码编译 → 缺 CMake → 安装失败)@deepseek-ai/dsh-host-directory-picker-native@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-fs-local修复思路:既然 koffi 在这台机器上不可用,就绕开 dsh 对 koffi 的全部调用,用纯 Node 实现顶替(这正是非 Windows 平台已有的行为):
-browse后端(Node stdlib 做目录浏览)fs.rename等标准 fs 操作三、修改过程(3 处)
① 安装(绕过 koffi install 脚本崩溃)
--ignore-scripts跳过 koffi 的cnoke.cjs --prebuild检测脚本(它因require(koffi)崩溃而误判预编译不可用);@koromix/koffi-win32-x64作为 optional 依赖照常装入。dsh 本身没有必须运行的 install 脚本,跳过无副作用。② 目录选择器(
~/.dsh/profiles/web/cordis.patch.yml)禁用
-auto(启动时自动选 native 后端),插入-browse后端:③ 两个包的 koffi 调用改为纯 Node(全局 node_modules 内)
@deepseek-ai/dsh-fs-local/lib/index.js——writeFileAtomic的默认实现改为不触发 koffi:@deepseek-ai/dsh-session-persistence-jsonl/lib/index.js——publishNewFileWin32改为fs.rename(并在 fs/promises import 中补上rename):代价:丢失 Windows ACL 保留与 MoveFileExW 持久化增强(日常使用无感)。补丁为幂等脚本,
npm update后重跑patch-dsh.js即可(备份为*.bak-koffi)。四、最小复现(不依赖 dsh)
npm i @koromix/koffi-win32-x64@3.1.4 node -e "require('@koromix/koffi-win32-x64'); require('@koromix/koffi-win32-x64').load('kernel32.dll')"spawnSync捕获子进程退出码3221225477(0xC0000005)。require成功(能打印版本),崩溃发生在koffi.load()/ 进程退出。node-pty@1.1.0加载与退出正常(exit 0),排除"机器上所有原生模块都崩"。五、已排查排除的原因
六、给维护者的建议
cnoke.cjs在require崩溃时误判并尝试源码编译,是第二个失败点)。All reactions