在 DSH 与 Obsidian 之间互传草稿、文件与编辑指令
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wuenna/dsh-obsidian-bridge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 8 处,展示前 8 条)
- 读取本地文件index.mjs:120
function bridgeLoadLedger() { try { const f = bridgeLedgerPath('inject-ledger.json'); if (!f || !existsSync(f)) return { version: 1, items: [], sessio - 读取本地文件index.mjs:120
function bridgeLoadLedger() { try { const f = bridgeLedgerPath('inject-ledger.json'); if (!f || !existsSync(f)) return { version: 1, items: [], sessio - 写入本地文件index.mjs:121
function bridgeSaveLedger(data) { try { const f = bridgeLedgerPath('inject-ledger.json'); if (!f) return false; mkdirSync(dirname(f), { recursive: tru - 写入本地文件index.mjs:121
function bridgeSaveLedger(data) { try { const f = bridgeLedgerPath('inject-ledger.json'); if (!f) return false; mkdirSync(dirname(f), { recursive: tru - 写入本地文件index.mjs:126
function bridgeLogDecision(res, sessionKey) { try { const f = bridgeLedgerPath('inject-log.jsonl'); if (!f) return; if (existsSync(f) && statSync(f).s - 读取本地文件index.mjs:126
function bridgeLogDecision(res, sessionKey) { try { const f = bridgeLedgerPath('inject-log.jsonl'); if (!f) return; if (existsSync(f) && statSync(f).s - 读取本地文件index.mjs:126
function bridgeLogDecision(res, sessionKey) { try { const f = bridgeLedgerPath('inject-log.jsonl'); if (!f) return; if (existsSync(f) && statSync(f).s - 写入本地文件index.mjs:126
function bridgeLogDecision(res, sessionKey) { try { const f = bridgeLedgerPath('inject-log.jsonl'); if (!f) return; if (existsSync(f) && statSync(f).s
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 填充编辑器草稿
- 注入区域编辑
DSH 插件:Obsidian 桥接——用选中内容填充编辑器草稿,在 Obsidian 中打开文件和 wikilink,注入经你同意的区域编辑。
README
由 DeepSeek 最新模型翻译生成dsh-obsidian-bridge
一个 DeepSeek Harness(DSH)插件,将所服务的 DSH Web GUI 与在其旁边 iframe 中运行的 Obsidian 连接起来。一个宿主模块——index.mjs,一个普通的 DSH 插件,带有 export const name / export function apply(ctx),且自身没有浏览器 bundle。浏览器那一半是它注入到所服务的 index.html 中的单个脚本。
它添加了什么
| 方向 | 功能 |
| Obsidian → DSH | 从选中的区域填充 composer 草稿(postMessage dsh-fill-draft),并带有 Obsidian 侧可据以采取行动的回复(dsh-fill-ack:applied / stale / separator present)。注入的脚本会合并到已经输入的内容中,而不是覆盖它。 |
| DSH → Obsidian | 通过点击聊天中出现的路径(工具输出、标题、文件卡片)来在 Obsidian 中打开文件,以及点击 [[wikilinks]]——注入的脚本将它们渲染为链接,并将 dsh-wikilink 转发到 Obsidian 侧。
展开完整文档(README 剩余 1 节)
dsh-obsidian-bridge
一个 DeepSeek Harness(DSH)插件,将所服务的 DSH Web GUI 与在其旁边 iframe 中运行的 Obsidian 连接起来。一个宿主模块——index.mjs,一个普通的 DSH 插件,带有 export const name / export function apply(ctx),且自身没有浏览器 bundle。浏览器那一半是它注入到所服务的 index.html 中的单个脚本。
它添加了什么
| 方向 | 功能 |
| Obsidian → DSH | 从选中的区域填充 composer 草稿(postMessage dsh-fill-draft),并带有 Obsidian 侧可据以采取行动的回复(dsh-fill-ack:applied / stale / separator present)。注入的脚本会合并到已经输入的内容中,而不是覆盖它。 |
| DSH → Obsidian | 通过点击聊天中出现的路径(工具输出、标题、文件卡片)来在 Obsidian 中打开文件,以及点击 [[wikilinks]]——注入的脚本将它们渲染为链接,并将 dsh-wikilink 转发到 Obsidian 侧。 |
| Obsidian → DSH | 在 DSH iframe 内按下的键盘快捷键会被转发到宿主窗口(dsh-kbd-shortcut),Obsidian 侧通过 dsh-kbd-cfg 推送其按键列表。编辑键(Enter、方向键、Ctrl+Z……)保留在本地。 |
| DSH → agent | 编辑指令注入。 当最新的用户消息带有隐式的 [BRIDGES is delivering packages for you…… · N words · L4:1-L9:20 · label ·] 行时,一个 pre-step 钩子会将其转换为确定性的编辑指令(“读取该区域,呈现结果,请求同意,然后用 fs edit 写回”)。该指令通过 DSH 原生的一次性收件箱(agent.inbox.prepend('next-step', …))投递,因此它绝不会作为独立消息出现在聊天记录中。 |
| Embed auth | 跨站 iframe 认证适配器(自 2.3.2 起)。DSH 的浏览器会话 Strict cookie 在跨站 iframe 中在结构上不可用,因此此插件接受一个额外凭据:GET /?token=&ob=1 返回 200,而不是原来的 303 cookie 流程(没有 ob 时,真实浏览器保持原路径不变),并且当请求携带匹配的 Bearer 头或查询 token 时,/api 的 401 判定会被覆盖。403 fence 判定绝不会被触碰。 |
要求
- DSH 0.1.x,带有 web profile(注入的脚本针对所发布的 Web GUI 的 DOM:textarea[data-phase]、role="tree"、composer dock)。
- Obsidian 侧插件,它使用 dsh- postMessage 协议通信,并推送 vaultRoot / 按键绑定。
宿主那一半是经过特性检测的:如果它要修补的服务或方法缺失(较旧的 DSH)或已移动(一次重构),插件会降级为惰性,而不是使 profile 失败。
安装
此插件没有 dsh.bundle 元数据,因此它不会*用 dsh plugin add 安装,也不会出现在侧边栏的插件页面——内置插件管理器只拥有 bundle。它由 profile 自己的补丁层以绝对路径作为普通插件模块加载 (~/.dsh/profiles/web/cordis.patch.yml):
- insert:
- id: dsh-obsidian-bridge
name: file:///C:/Users/wuw/.dsh/profiles/web/dsh-obsidian-bridge/index.mjs
将 file:// URL 指向你存放此目录的位置,然后重新加载配置文件(HMR 会实时拾取补丁层)。
运行时文件(不在 git 中)
每次注入尝试时写入 index.mjs 旁边:
| 文件 | 用途 |
| inject-ledger.json | 抗压缩账本:每条已投递指令对应一个条目,以 sha256(path \| location \| instruction) 为键,外加每个会话的计数器。 |
| inject-log.jsonl | 仅追加的决策日志(action、reason、keyHits、sessionCount);超过 256 KB 后截断。 |
两者都是每次安装的状态,且日志会记录会话活动——它们已列入 .gitignore,必须留在仓库之外。
注入限制
INJECT_LIMITS 防止重复选择变成循环:
{ ttlMs: 600000, maxKeyHits: 1, maxSessionInjections: 20, maxItems: 200 }
十分钟内每个键投递一次,每个会话最多 20 次,账本最多保留 200 个条目。
版本说明
| 版本 | 变更 |
| 2.6.x | 当前版本线;wikilink 渲染、路径 → Obsidian 点击、UI 状态 ping。 |
| 2.4.4 | 单次注入:编辑器指令通过一次性收件箱传递,而不是每一步都追加一条持久化的用户消息;新增账本和会话上限。 |
| 2.3.2 | 针对 DSH ≥ 0.1.2 跨站 iframe 内浏览器会话认证的嵌入器认证适配器。 |
备注
- 该插件仅通过加载器(行、钩子、一个 index.html 转换)以及 DSH Web 连接服务的认证判定来接触 DSH。无需修改 DSH 源代码,index.mjs 就是整个宿主端部分。
- 此处未声明 license 字段,因此该仓库不附带任何许可授权;发布前请添加一个。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wuenna/dsh-obsidian-bridge
在 DSH 与 Obsidian 之间互传草稿、文件与编辑指令
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 14,049已汉化DeepSeek 客户端
73
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,597已汉化DSH
71.3
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 718已汉化DSH
71.2
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,261已汉化DSH
70.7
破甲评测WoYun520/dsh-purge
在本机分离宿主拦截与模型拒绝,做受控红队评测
★ 199已汉化DSH
69.7