dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
把 dsh web 界面封装成原生 Windows 桌面窗口,内置桌面客户端,带系统托盘、开机自启与协议文件分发。
dsh 桌面壳插件:把 DeepSeek Harness 封装成原生 Windows 桌面客户端。
dsh-desktop-shell.exe(Wails v3 + WebView2,~13MB)打包在 npm 包 bin/ 内——装插件即得桌面窗口,无需单独安装客户端EnableWindow(parent,false)),不关掉设置页就无法操作客户端;设置窗通过属主关系始终浮在主窗之上。设置页同时是单例——重复点击只前置已有窗口,不会叠开。engine.js,与 dsh-desktop 启动器同一份实现);logo、标题、状态文案、下载进度条与版权条全部沉在页面底部。若背景引擎缺席或主题为浅色(引擎层自隐藏),自动放出 CSS 兜底背景,不会白屏。~/.dsh/settings.yaml → ui-theme.preference(light/dark/system)来决定深浅色,不提供手动切换;system 时由客户端解析系统明暗并随系统变化实时更新。客户端只读该文档,不写入。
~/.dsh/dsh-web-port.json 写入 {owner, port, url, pid, harnessVersion, pluginVersion, runtimeDir}——客户端据此连接,设置页展示版本信息;owner(plugin / client)标识写入者,插件卸载只清理自己写的那份settingsScope(0.1.6)与 configForms(0.1.7)
由两个 ctx.inject 子插件二选一等待,host 侧 settings.register()(0.1.6)与顶层
export const Config(0.1.7)按能力探测分流——同一份包在两个版本上都可用,无需按版本分发。dsh plugin --profile web add @zerorigin-studio/dsh-desktop-shell
# 然后手动把 "@zerorigin-studio/dsh-desktop-shell" 追加到
# ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组
# 重启 harness
直接运行 bin/dsh-desktop-shell.exe(或桌面快捷方式)。首次启动时它会:
https://gitee.com/coldcgh/dsh-runtime 拉取 manifest.json,下载对应的官方 @deepseek-ai/dsh 运行时;runtime\<version>\,之后启动直接复用;dsh web,窗口切到 Harness UI。装好之后整个目录就是自包含的:
<客户端目录>\
dsh-desktop-shell.exe
runtime\
0.1.5-rc.2\ ← 当前使用的运行时
active.json ← 记录当前版本;多版本可共存、可回滚
runtimeLocation):
auto(默认):插件安装的 exe → %LOCALAPPDATA%\dsh-desktop-shell-client\runtime\;独立客户端 → exe 同目录 runtime\。portable / user:强制指定其中之一。DSH_SHELL_RUNTIME_DIR 优先级最高。%LOCALAPPDATA%\dsh-desktop-shell-client\——exe 所在目录可能只读,这两项必须落在始终可写的位置。~/.dsh/dsh-web-port.json(设置了 DSH_HOME 时为 %DSH_HOME%\dsh-web-port.json)。客户端向每个托管页面注入标准桌面 SDK window.dsh.desktop(version 1)。
任何 dsh 插件需要开原生独立窗口时,直接调用统一入口即可:
await window.dsh.desktop.openWindow({
url: "https://chat.deepseek.com/",
title: "DeepSeek 网页对话",
width: 1024,
height: 768,
});
协议说明:
window.chrome.webview.postMessage → { type: "dsh.desktop.openWindow", url, title, width, height }),由客户端 RawMessageHandler 接收并打开原生窗口——无跨端口 fetch / CORS,任何页面(含外部 harness)都成立;openWindow({url,title,width,height})(返回 Promise)、closeWindow(id)、getInfo();window.chrome.webview.postMessage 即视为桌面宿主存在;没有时插件应自行降级(如当前 webview 内导航)——插件在纯浏览器/第三方壳中不应失效;window.__DSH_DESKTOP_API__(http://127.0.0.1:<port>/<token>,HTTP 桥接),老插件 fetch(api + "/window/chat") 路径继续可用;dsh-deepseek-chat(@zerorigin-studio/dsh-deepseek-chat)通过该标准入口打开「网页对话」独立窗口。