dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeekRuntime 禅道工作台插件:右侧栏查看指派给我的任务/Bug/需求,一键转成 DSH 对话上下文(禅道截图自动转真实图片附件)
DeepSeekRuntime 的禅道(ZenTao)工作台插件:在 DSH 右侧栏「开始」页里以一张 禅道卡片作为入口(与内置的「上下文」「工作区文件」同款形式),点开后在右侧栏 作为 tab 查看指派给我的任务 / Bug / 需求,一键把卡片转成 DSH 对话上下文。
切换即时生效不用重新登录(每账号独立 cookie/缓存),也可按账号移除;
(含列表接口的 {35861.png}` 占位符)下载下来,作为 DSH 图片附件挂到输入框,发送后模型真的能看到图;
--dsw-alias-*),日间 / 夜间自动跟随;旧版 DSH 没有 sidebarRightTabs 时自动退回悬浮按钮 + 侧滑面板
每账号独立 client/cookie/缓存、账号菜单切换/添加/按账号移除
node test/client.mjs # client 半边:bundle 装载 + 右侧栏注册契约(无需 DSH)
node test/multi.mjs # 多账号:store 迁移/切换/缓存隔离/移除(mock,不打网络)
DSH_HOME=/tmp/zt-smoke node test/smoke.mjs # 直连真实禅道验证 client/service(需内网可达)
DSH_HOME=/tmp/zt-host node test/host.mjs # apply() + RPC wire 协议端到端(mock ctx,真实禅道)(smoke/host 的禅道地址与账号来自 ZENTAO_BASE/ZENTAO_ACCOUNT/ZENTAO_PASSWORD 环境变量或 ~/.dsh/zentao-panel/config.json,不落 git。)
git clone https://github.com/big-li99/dsh-zentao-panel.git
DSH="/Applications/DeepSeekRuntime.app/Contents/Resources/runtime/cli/bin/dsh"
"$DSH" plugin --profile desktop add "$(pwd)/dsh-zentao-panel"重启 DSH Desktop 生效(client 侧改动一般 ⌘R 重载渲染进程即可;host 侧改动需重装插件后重启)。
"$DSH" plugin --profile desktop remove dsh-zentao-panel
# 可选:清除本地凭据
rm -rf ~/.dsh/zentao-panel登录信息保存在 ~/.dsh/zentao-panel/config.json(权限 0600,仅本机),schema v2:
{
"version": 2,
"accounts": [ /* { id, baseUrl, account, password(base64 混淆), cookies } */ ],
"activeId": "当前激活账号的 id"
}账号 id 由 baseUrl + account 哈希得到,同账号重复登录等于更新凭据;旧版单账号 格式读取时自动迁移,无需手动处理。卸载插件后文件不会自动删除,需要时手动清理。
数据链路(ZenTao 18.13 开源版实测,RESTful API v2 在该实例不可用):
md5(md5(password) + verifyRand) 加密 + jQuery 风格请求头;/my-work-{task,bug,story}.json(登录态 cookie,一次拿全量);/api.php/v1/{tasks,bugs,stories}/{id}。界面挂载(DSH 0.2.1-rc.2 源码确认):
sidebarRightTabs.register({id, kind, title, guide:[{title, description, icon}]})注册右侧栏 tab 类型与「开始」页引导卡片;
sidebar.right.pane.tab / .title 两个 keyed slot 提供 tab 正文与标题,key 用 tab 类型的 id(TabSlot 的 entryKey = definition.id ?? tab.kind);
--dsw-alias-* 语义 token,暗色由 body[data-ds-dark-theme] 自动切换。真实图片附件(DSH 0.2.1-rc.2 源码确认):
zentao.image 返回 {name, mediaType, base64};new File([bytes], name, {type}) →conversation.createDrafts(sessionId, files) 拿到 draft id → conversation.input.for(scope).addAttachments(ids); addAttachments 只接受已注册的 draft id,不直接收 File;
浏览器里缩到 2048 长边再附加(DSH 宿主本来也会归一化到 ≤2048)。
此时可在输入框里移除图片附件后发送。
详见《计划书.md》附录 A。
MIT