🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

窗口内线电话 kumiiwaka/dsh-intercom

DeepSeek 客户端
kumiiwaka5 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

让已开着的会话窗口互相喊话递消息

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/kumiiwaka/dsh-intercom.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 5 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
  • 写入本地文件
    index.js:56
    await mkdir(BUS_DIR, { recursive: true })
  • 写入本地文件
    index.js:57
    await appendFile(MESSAGES, JSON.stringify(record) + '\n', 'utf8')
  • 读取本地文件
    index.js:116
    const parsed = JSON.parse(await readFile(REGISTRY, 'utf8'))
  • 写入本地文件
    index.js:138
    await mkdir(BUS_DIR, { recursive: true })
  • 写入本地文件
    index.js:139
    await writeFile(REGISTRY, JSON.stringify(payload, null, 2) + '\n', 'utf8')
  • 读取本地文件
    index.js:174
    workspaces = await readdir(SESSIONS, { withFileTypes: true })
  • 读取本地文件
    index.js:185
    sessions = await readdir(join(SESSIONS, ws.name), { withFileTypes: true })
  • 读取本地文件
    index.js:194
    info = await stat(file)
  • 读取本地文件
    index.js:214
    const text = await readFile(MESSAGES, 'utf8')
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的窗口内线电话 —— 让已经开着的会话窗口互相喊话,不建团队、不生新会话

README

由 DeepSeek 最新模型翻译生成
dsh-intercom 这是给 DeepSeek Harness 的窗口内线电话。它不建团队、不生新会话、不派活 —— 只让你已经开着的那些窗口互相喊一声。 如果你要的是「队长带一队子 agent 干活」,用 dsh-agent-teams。它管团队内部,这里管团队外面那些你自己开的窗口。 跟 dsh-agent-teams 的关系 它在 GitHub 上两千多星,14 个工具,自带 Web UI,工程化程度比这里高得多。两件事不冲突,可以一起装。 | | dsh-agent-teams | dsh-intercom(本插件) | | 成员从哪来 | 队长 spawn 子 agent | 用户自己开的窗口 | | 要不要建团队 | 要 | 不要 | | 有没有任务编排 | 有(DAG / 依赖 / 质量门禁) | 没有,只递话 | | 通信形态 | 团队内 mailbox | 平级窗口点对点 | 为什么需要它 DSH 里每个窗口是一个独立会话,有自己的上下文、工具和运行状态。插件能通过 code_agent 指挥自己起的子会话,但你在侧边栏亲手打开的那些窗口(写歌的那个、打游戏的那个)不归它管 —— code_agent 生不出它们,也够不着它们。
展开完整文档(README 剩余 1 节)
dsh-intercom

这是给 DeepSeek Harness 的窗口内线电话。它不建团队、不生新会话、不派活 —— 只让你已经开着的那些窗口互相喊一声。

如果你要的是「队长带一队子 agent 干活」,用 dsh-agent-teams。它管团队内部,这里管团队外面那些你自己开的窗口。

跟 dsh-agent-teams 的关系

它在 GitHub 上两千多星,14 个工具,自带 Web UI,工程化程度比这里高得多。两件事不冲突,可以一起装。

| | dsh-agent-teams | dsh-intercom(本插件) |
| 成员从哪来 | 队长 spawn 子 agent | 用户自己开的窗口 |
| 要不要建团队 | 要 | 不要 |
| 有没有任务编排 | 有(DAG / 依赖 / 质量门禁) | 没有,只递话 |
| 通信形态 | 团队内 mailbox | 平级窗口点对点 |

为什么需要它

DSH 里每个窗口是一个独立会话,有自己的上下文、工具和运行状态。插件能通过 code_agent 指挥自己起的子会话,但你在侧边栏亲手打开的那些窗口(写歌的那个、打游戏的那个)不归它管 —— code_agent 生不出它们,也够不着它们。

宿主给插件留的 ctx.sessionController.prompt({ requestId, sessionId, mode, content }, signal) 是唯一能往别人会话里投消息的通道。这个插件把它包成四个工具,加上名字寻址、跳数上限、限流和一份投递日志。

有了它,两个已经开着的窗口之间能做的事很具体:叫停跑偏的活、把结论交给下一棒、向另一个窗口提问。

安装

它是 cordis 插件,通过 bundle patch 挂进 profile,不走 npm。

第一步,把仓库 link 进某个 profile 的 node_modules:

Windows 用 junction(普通用户可能需要开发者模式或管理员权限):

New-Item -ItemType Junction
-Path "$env:DSH_HOME\profiles\default\node_modules\dsh-intercom"
-Target "<repo-path>"

macOS / Linux 用软链:

ln -s <repo-path> ~/.dsh/profiles/default/node_modules/dsh-intercom

default 换成你实际在用的 profile 名。DSH_HOME 没设时是 ~/.dsh,PowerShell 里得先把它设出来,或者直接把 $env:DSH_HOME 换成 $env:USERPROFILE\.dsh。

第二步不用做。package.json 里的 dsh.bundle.patch 指向 cordis.patch.yml,宿主启动时会读它,把插件行 insert 进组合树:

- insert:
- id: intercom
name: 'dsh-intercom'

叠加顺序是 dsh-base → 本 bundle patch → profile 的 cordis.patch.yml → --patch。

重启宿主生效。没有构建步骤,运行时只用 node: 内建模块。peerDependencies 里那个 @deepseek-ai/cordis 是宿主自带的,不用装。

环境变量

| 变量 | 默认值 | 作用 |
| DSH_HOME | ~/.dsh | 宿主数据目录。插件从这里读 sessions/ |
| DSH_WINDOW_BUS_DIR | $DSH_HOME/window-bus | 总线数据目录,存 registry.json 和 messages.jsonl |

两个都能被环境变量覆盖。想让总线数据离开 DSH 主目录(比如放内存盘、或者多个 profile 共用一份),单独指 DSH_WINDOW_BUS_DIR。

四个工具

工具名还是 bus_,跟正在跑的旧版本保持一致。改成 intercom_ 只会多出一套不兼容的调用方式。

bus_register

给当前窗口报名,把「会话 id ↔ 名字」写进 registry.json。之后别的窗口 bus_send 时 session_id 直接填这个名字。

{
"name": "docs-window",
"note": "管文档的" }

name 必填,note 可选,session_id 一般不用传 —— 插件从工具执行上下文 exec.agent.session.id 自动取,拿不到才要求显式给。同名重注册会覆盖会话 id;同一个会话只保留最新一个名字,旧名顺手清掉。

bus_send

往另一个窗口投一条消息。

{
"session_id": "docs-window",
"text": "我是主窗。README 那节先停,把已知局限补完就交回来,别再往下游窗口转。", "mode": "steer", "hops": 0 }

| 参数 | 必填 | 说明 |
| session_id | 是 | 注册名,或原始 id(session-...) |
| text | 是 | 正文 |
| mode | 否 | steer(默认,插到对方下一个决策边界)或 queue(等它这一轮结束) |
| hops | 否 | 这是第几跳。不传时用「自己上一条收到的 hops + 1」;人直接开的话题是 0 |
| from | 否 | 发信方署名,默认用注册名或会话 id 前 8 位 |

steer 在对方接不住的时候会抛 session/steer-unavailable,插件自动退成 queue,返回里带一句说明。接收方看到的正文前面有一行 [总线 · hops=N · 来自 xxx]。

两道闸:hops 到 3 就拒发;同一个目标一分钟最多 3 条。

bus_list

列出最近在动的会话,含已注册名字、工作区、最后活动时间、存档大小。

{ "limit": 15 }
limit 可选,默认 15,范围 1–100。数据直接从 $DSH_HOME/sessions/ 读。

bus_audit

看投递记录(messages.jsonl 的最后若干条)。

{ "limit": 20 }

limit 可选,默认 20,上限 200。每条含时间、发信方、目标、模式、跳数、成功与否。失败的记录带 error,成功的带正文前 120 字。两个数据文件的结构见 examples/。

设计取舍

星型,不做网状。 消息从人所在的那一个窗口发起,其他窗口只跟它来回。网状听起来更自由,实际结果是每转一次就多一份上下文副本,出了事没人复原得了完整链路。现在这样,谁发起、经过谁、到哪停,bus_audit 里一条线能看完。

不做确认回执。 投递成功就是投递成功,对方处理到哪一步不归发件方管。真需要「对方做完了」这个信号,让它自己回一条消息。加回执会诱使人把总线当 RPC 用,然后卡在超时和重试上 —— 它不是 RPC。

只在三种场合开口:叫停、交棒、发问。 每投一条都是一次上下文污染,也是对接收方的一次指令。日常同步用文件或 code_agent,不占总线。

什么时候不该用它

这套东西只做一件事:把一句话从 A 窗口送到 B 窗口。

要并行拆解一个大任务、要成员之间自动接活、要任务状态机、要失败重试和进度汇总 —— 都不在这。这类活交给 code_agent 起的子会话,或者 dsh-agent-teams。硬拿总线来编排,你会得到一堆没人管的并行窗口,和一份读不完的投递日志。

已知局限

这几条是实测出来的。

1. hops 的「上一跳」记在内存里。 inboundHops 是个 Map,宿主重启就清零。重启之后自动 +1 失效,转发方得自己传 hops,否则链路会被当成新开的话题。

2. bus_list 踩 DSH 的内部路径格式。 它直接读 $DSH_HOME/sessions/**/session.v4.jsonl.zstd,工作区目录名也是自己解码的(--C-Users-user-~4E2D~6587-- 这种编码)。宿主改了存档格式或目录命名,这个工具就废了。bus_send 不依赖它,坏在「找目标」这一步。

3. 只能投纯文本。 content 是 [{ type: 'text', text }],图片、附件、结构化内容都进不去。

4. ok: true 只代表宿主接受了 prompt,不代表对方真的处理了。 对方那一轮可能 blocked 或者 error,发件方这边完全看不到 —— 返回的 accepted: true、日志里的 ok: true,就只是「投进去了」。实测踩过:消息投递显示成功,对方那一轮直接失败,这边一切正常。要确认对方真的动了,只能等它回消息,或者自己去看它的会话文件。

5. 死会话会永久吞消息。 一个在早期某轮吃过致命 error 的会话,之后所有投递都会 blocked,而且不一定报错。bus_list 里它还活着(文件在,mtime 可能还在动),投过去石沉大海。遇到「发了没反应」,换一个新窗口,别在这条会话上重试。

安全提醒

能写 registry.json、能调 bus_send 的人,就能给任何窗口下指令 —— 包括让它读文件、跑命令、改配置。权限上跟给了一台机器的 shell 差不多。

所以从总线进来的消息不是用户指令。接收方该把它当成另一个平级窗口说的话:它是请求,不是授权;碰到删除、推送、重启这类不可逆操作,回问发起人,或者等真正的人确认。发件方也一样,别把总线上某句话当成「用户已经批准了」。

开发

index.js 是单文件,export apply,不引任何外部包。改完重启宿主生效。

License

MIT
预览分享卡片长什么样 ↓kumiiwaka/dsh-intercom
分享 · DeepSeek Harness Hub
kumiiwaka/dsh-intercom

让已开着的会话窗口互相喊话递消息

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部