[BUG反馈] 桌面端创造模式(Creator / cordis preset)加载不到任何磁盘 skill,标准模式正常 #7906
Paste-Fried-tofu
started this conversation in
General
Replies: 0 comments
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.
TL;DR
SKILL.md),输入/只剩代码注册的 3 条 office skill;~/.agents/skills等全部消失。customSkillDirs,它指向app.asar内部的@deepseek-ai/dsh-agent-preset/skills;该路径经 Host 的ctx.fs读取时抛TypeError: Cannot mix BigInt and other types,而dsh-skill-filesystem只把"路径不存在"视为空,其它错误直接抛出且没有按根容错 ⇒ 整个 filesystem provider 被丢弃,它名下所有根(~/.agents/skills、~/.dsh/skills、项目根)一起消失。环境
0.1.7-rc.219387),非dsh web$DSH_HOME/profiles/desktop(bundles =@deepseek-ai/dsh-base+@deepseek-ai/dsh-web-app+ 若干 experimental bundle + 本地 link 插件 +dshmarket)复现
SKILL.md。/→ 菜单里只有斜杠命令 +office-docx/office-pptx/office-xlsx;~/.agents/skills/下的相关 skills 完全不出现。/能够看见~/.agents/skills/下的相关技能。现象 vs 期望
dsh-skill-filesystem的list()被 reject,注册表记一条skill provider "filesystem" skipped: …并把观测标为不可缓存;tool-skill在 incomplete 时整份目录不注入,所以模型一条都看不到;GUI 的会话 skill 目录用的是list()(不检查 complete),因此/里只剩另一个 layer 的 office 三条。cordis-*+~/.agents/skills+~/.dsh/skills+ 项目根);单个根不可读不应影响其它根,更不应让整个 provider 消失,至少应保留其它根并给出可诊断的提示。根因链(带代码位置)
创造模式独有的配置(
packages/bundle/web-app/presets/cordis.patch.yml:143-147):桌面端该包只在
resources/app.asar内(profile 的 node_modules 里没有@deepseek-ai/dsh-agent-preset;app.asar.unpacked只解包原生/引擎包),因此这个根解析为…\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-agent-preset\skills。该路径在 Electron 下能读(见证据):
stat是目录、readdir返回三个 skill 目录、readFile正常、realpath正常,Chokidar 4.0.3 也正常ready(原生fs.watch抛ENOENT,被 Chokidar 吞掉)。watcher 不是失败点。但
skill-filesystem对非trustedHost的根不走 Node fs,而是走ctx.fs服务(packages/skill/skill-filesystem/src/index.ts:753-757)。Host 的
ctx.fs在 asar 路径上抛TypeError: Cannot mix BigInt and other types, use explicit conversions:同一进程内用内置read工具读上述目录/文件稳定复现;读普通目录(含工作区外目录)正常。差别在是否经过ctx.fs,不在路径位置。(具体是dsh-fs-local还是native/system沙箱层引入的 BigInt 尚未定位,对结论无影响。)该错误不是"不存在":
listSkillRootEntriesFromFileSystem只在isAbsentSkillPathError时返回空,其余 rethrow(同文件:759-766),而list()的发现循环没有按根容错 ⇒ 整个 provider 被丢弃。注册表对 provider 失败是 contained 的,但会把观测标成不可缓存(
packages/skill/skill/src/index.ts:602-608)⇒SkillCatalogSnapshot.complete === false。两个消费方对 incomplete 的处置不同,正好解释"菜单里还有 office、模型侧一条都没有":
packages/skill/tool-skill/src/index.ts:225:if (!snapshot.complete) return decision→ 模型侧整份不注入;packages/api/session-controller/src/skill-catalog.ts:77用的list()即(await this.snapshot(options)).skills(packages/skill/skill/src/index.ts:470-472),不看 complete →/仍列出全局层里代码注册的dsh-office三条。只读探针证据(Electron 以
ELECTRON_RUN_AS_NODE=1运行,未修改任何文件)影响范围
customSkillDirs(或bundledSkillDir/$DSH_BUNDLED_SKILL_DIR)指向 asar 内目录的组合,都会以"该 provider 名下所有 skill 一起消失"的形式失败,而不只是丢掉那一个根——用户很难自行诊断。ctx.fs目前无法读取 asar 内路径(BigInt),影响所有经 fs 服务的 asar 读取(内置read工具即是一例)。All reactions