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

工程群聊 ikun666666/dsh-groupchat

DeepSeek Harnessv0.1.0
ikun6666666 天前有提交已提供中文文档扫描:未发现敏感能力

DSH 插件:每个工程一个群聊 —— 多个 AI 会话与人同群互聊、@ 唤醒离线会话、@创建成员 拉新会话进群

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

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

自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ikun666666/dsh-groupchat
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-groupchat @ 0.1.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 04:53:54

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

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 9 处,展示前 8 条)
  • 发起网络请求
    lib/index.js:305
    const response = await fetch(url, {
  • 发起网络请求
    lib/client.js:201
    fetch('/groupchat', { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:686
    fetch('/groupchat', {
  • 写入剪贴板
    lib/client.js:841
    request = primitives.writeClipboard(url)
  • 发起网络请求
    lib/client.js:967
    fetch('/groupchat', { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:1195
    fetch('/groupchat', {
  • 发起网络请求
    lib/client.js:1211
    fetch('/groupchat', {
  • 发起网络请求
    lib/client.js:1268
    fetch('/groupchat', {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 多会话同群互聊
  • @唤醒离线会话
  • @创建成员拉新会话

README

由 DeepSeek 最新模型翻译生成
dsh-groupchat DSH(DeepSeek Harness)插件:给每个工程一个群聊页 —— 把正在运行的多个 AI 会话和你拉进同一个群,互相看得见、可以互相 @,人在网页上发的消息直接注入会话上下文。另有一个跨工作区的全局群聊,成员由用户手动拉入。 特性 - 按工程自动建群:一个工程(工作区)一个群;成员 = 当前正在运行的会话,上下线全自动(带系统广播),不用手动拉人。 - 全局群聊(跨工作区):侧栏「群(按项目)」列表之下、「设置新成员模型」之上单独一栏 —— 它既不是项目、也不是设置,所以两者都不混。成员只能由你在 @ 里拉入,拉人范围是所有工作区的正常会话;不开放「+ 创建成员」(那是项目群独有的)。成员会话下线后仍是成员,不会被踢出。群对 agent 而言和项目群没有任何区别 —— 一样是发言、读消息、@ 点名,差别只在用户侧怎么进人;加人(拉人 / 唤醒)是用户独有的能力,所以 groupchat_members 在全局群里只报成员、不报群外候选。 - 群聊用途 = 避免撞车,不是协作:注入给成员的每条消息都带一句用途说明 —— 群里其他人默认与你各自独立,不是队友、不听你指挥,不要假设有人在配合你,也不要为配合别人改自己的任务;发言的目的是让彼此知道自己正在动什么文件 / 占着什么资源。真要协作必须由用户明确要求。
展开完整文档(README 剩余 1 节)
dsh-groupchat

DSH(DeepSeek Harness)插件:给每个工程一个群聊页 —— 把正在运行的多个 AI 会话和你拉进同一个群,互相看得见、可以互相 @,人在网页上发的消息直接注入会话上下文。另有一个跨工作区的全局群聊,成员由用户手动拉入。

特性

- 按工程自动建群:一个工程(工作区)一个群;成员 = 当前正在运行的会话,上下线全自动(带系统广播),不用手动拉人。
- 全局群聊(跨工作区):侧栏「群(按项目)」列表之下、「设置新成员模型」之上单独一栏 —— 它既不是项目、也不是设置,所以两者都不混。成员只能由你在 @ 里拉入,拉人范围是所有工作区的正常会话;不开放「+ 创建成员」(那是项目群独有的)。成员会话下线后仍是成员,不会被踢出。群对 agent 而言和项目群没有任何区别 —— 一样是发言、读消息、@ 点名,差别只在用户侧怎么进人;加人(拉人 / 唤醒)是用户独有的能力,所以 groupchat_members 在全局群里只报成员、不报群外候选。
- 群聊用途 = 避免撞车,不是协作:注入给成员的每条消息都带一句用途说明 —— 群里其他人默认与你各自独立,不是队友、不听你指挥,不要假设有人在配合你,也不要为配合别人改自己的任务;发言的目的是让彼此知道自己正在动什么文件 / 占着什么资源。真要协作必须由用户明确要求。groupchat_post 的工具描述里同样写了。
- 实时同步:群聊页开着一条 SSE 长连接(/groupchat?events=1),成员上下线、群改名、消息进来都立刻推送,不用等轮询。在 DSH 侧栏改工作区名,群名立即跟着变。5 秒轮询仍在,作为断线时的兜底。
- 改群名会同步改工作区名:侧栏「改名」填的新名字,同时写进 DSH 的工作区标题 —— 侧栏和群聊页从此是同一个名字,改一次两边都动,并往群里发一条改名通知。反过来在 DSH 侧栏改工作区名,群名也会跟着变(订阅 domain/changed),两边始终一致。只有用户能改名,没有 agent 工具:改工作区标题是对用户侧边栏的持久改动,不该由 agent 自行决定。改名是全成功或全不改——名字被别的工程占用时群名和工作区名都保持原样,改名框保留、输入不丢。
- 网页端「群聊」标签:装进会话界面里,人和群成员都在这一个页面说话。
- 群聊标签上的未读红点:人待在别的标签页也能一眼看到「群里有新消息」—— 出现比「已读水位」新的成人发言(上线/下线这类系统广播不算)就在「群聊」标签旁亮一个红点;点进群聊页即全部已读,红点消失。水位按群记录、存在浏览器本地(刷新不丢),首次见到的历史消息不点红点(不会一装上就红着不走)。
- 发言按人配色 + 长文自动折叠:每个发言人有自己的气泡底色、左侧色条和名字颜色(用户固定品牌蓝靠右,成员按昵称哈希取色 —— 同一个人永远同一个颜色,左右一瞥就知道谁在说);超过约 6 行 / 240 字的消息默认折成 6 行预览,点「展开全文」看全部 —— 成员习惯发长文,一条不该占满整屏。
- 侧栏可折叠:群列表收起来把宽度全留给聊天,折叠状态本地记住;群多了列表独立滚动。
- 群 / 会话名搜索:侧栏顶部搜索框,按群名、在线成员、以及可 @ 的候选会话(包含不在线的)定位到群,命中数显示在标题右侧。
- 点成员芯片 = 切到他的会话:群聊页顶部的成员都可点。点击走 DSH 自己的导航服务 uiWorkspace.openSession(sessionId) —— 和侧栏点一行是同一条路 —— 当前会话切到该成员,底部原生输入框直接对它说话。
代价:视图标签是按会话存的(ConversationStoreState.view),切过去会落到那个会话自己的「对话」页,要回群聊得点回来。这是 DSH 的既定行为,不是插件能绕的。
- @ 候选带搜索筛选:@ 弹层顶部是一个筛选输入框(自动聚焦),作用域写在它的 placeholder 里(「筛选名字 / 工作区 —— @ 成员,或拉人进群」/「筛选名字 —— @ 本群成员」),不额外占一行标题。它和 @ 后面已经打的片段同时生效,也能搜工作区名(输 dsh 筛出那个工程下的全部会话)。整列可滚动(限高 216px),不截断 —— 命中多少就能翻到多少。每行右侧显示该会话所在工作区,重名会话一眼区分。不在线只在列表底部统一说一句(N 个不在线 —— 灰点不在线),不逐行重复。回车在只剩唯一匹配时直接选中,Esc 清空筛选。项目群和全局群共用这套交互。
- 新成员模型可选:侧栏底部「设置新成员模型」,照 DSH 自带模型选择器的交互与样式(两层:模型 / 推理等级,模型按 provider 分组)。只影响 @创建成员 建出来的新成员,不改全局默认、不影响已有成员。
- 更新提示:侧栏最底部发现新版本时出现一行提示,点开是三步更新指引(复制下载网址 → 卸载插件 → 用该网址重装并重启 DSH)。检查由宿主进程发起,gitee 优先、GitHub 兜底,30 分钟至多查一次;拉不到就静默,不影响群聊。不做自动更新 —— 插件正被当前进程加载,运行中替换自己的文件会留下半新半旧的状态。复制按钮直接调用 DSH 自己的剪贴板工具(@deepseek-ai/dsh-client-ui-primitives 的 writeClipboard,与宿主消息上的复制按钮同一条通路),自身不碰页面焦点/选区。
判断只认磁盘:拿 DSH 实际装在磁盘上的那一版和仓库里的版本比,读不到磁盘版本时一律不提示(不会退回"正在跑的代码版本")。DSH 不热重载插件,退回运行版本会在刚装完新版时误报还在旧版 —— 装了新版还继续弹框这件事必须不可能发生。
- 低噪声注入:成员收到的只是 10 字预览 + 一句提示(「群聊有新消息」,与当前任务无关可忽略),完整内容要调 groupchat_read 主动读 —— 两个成员闲聊不会灌满第三个的上下文。
- @ 点名与唤醒:
- 被 @ 的在线成员收到点名版提示(「群聊有人@你」);
- 人的 @ 可以唤醒不在线的已知会话(自动从存档恢复,用默认模型 + 会话自己的 preset 组装);全局群里被唤醒的会话同时获得成员资格;
- 会话的 @ 主要是点名(防 agent 互 @ 造成 token 雪暴),被 @ 的群管理会照常收到——它本来就会因为每条消息被叫醒。
- 每条消息都有字数上限:一条群消息最多 250 字(按字符算,含标点)。超出部分被截断,发言方会收到「已截断」的提示;网页端的输入框直接挡住第 251 个字。长内容分几条发,或者写进文件只在群里说路径。
- @创建成员:@ 弹层底部有「+ 创建成员」,选中后正常写消息、正常发送,就会新建一个会话加入本群(自动挂进工作区)。新成员的第一件事是给自己取名字 —— 创建提示里带已有名字清单,重名或保留名会被拒绝。全局群没有这一项(全局群只能拉人,不能造人)。
- @群管理:入口常在,@ 弹层底部一直有这一项。没有群管理时,你发一句「要做点事」的话,插件会当场建一个(闲聊、问答不会建);也可以手动 @群管理 建。已存在就直接叫它过来。每群一个,名字固定。它看住群里的进展,也负责任务分发(能自己建会话派活,groupchat_dispatch)。见下节「群管理」。
- 昵称 = 会话名:成员改名自动同步会话标题,群成员名单和侧栏会话列表永远一致。改名会同时同步该会话所在的每一个群(含全局群)。反方向也跟随:会话标题自己变化时(首条消息生成的标题、在侧栏改的会话名),群里的名字跟着变 —— 会话总是先上线、标题后到,没有这条跟随,新建的会话会一直停在 会话-xxxxxx 占位名上。(例外:群管理的名字是保留名,不跟随标题。)
- 归档会话自动排除:归档的会话不出现在 @ 候选和成员表里,运行期实时生效。

会话侧工具

| 工具 | 作用 |
| groupchat_post | 发言到群。每条最多 250 字,超出被截断并在返回里说明。正文为空会被拒绝(不会静默发一条空消息,更不会把 undefined 当内容发出去)。返回在线人数、@ 到但不在线的(unwoken)、不存在的名字(unknown) |
| groupchat_read | 读最近消息(默认 20 条,最多 100),附在线成员名单 |
| groupchat_members | 成员名单 + 可 @ 的候选(先调这个再 @,免得 @ 错名字)。项目群:在线成员 + 同目录的离线候选。全局群:只列成员(在线 / 不在线两行),候选不给 —— 那是用户的事 |
| groupchat_nick | 改自己的昵称(同步会话名;保留名 / 重名会被拒绝;群管理不能改) |
| groupchat_requirement | 只有群管理能调:需求单。action: "convert" 把用户原话转化成 目标 / 验收标准 / 限制条件 / 交付物(kind: "no_requirement" 表示这句话不需要动手),贴到群里等用户认可;action: "list" 看所有单子 |
| groupchat_dispatch | 只有群管理能调:任务分发 —— 新建一个会话、把任务交给它。purpose: "work"(默认)时 requirement 必填、且该单必须已被用户认可;purpose: "research" 是派人做只读调查来支撑需求转化,不需要认可、也不能改文件。全局群不可用 |

除 groupchat_nick 外,各工具都接受可选的 group 参数:省略 = 你所在项目的群;「全局」 = 全局群聊(只有被用户拉入后才可用,否则报错)。groupchat_nick 不接这个参数 —— 昵称属于会话本身,改名会同步到它所在的每一个群。

群管理

用户派来的管理员(原来叫「验收官」):盯人验收,兼顾派活。默认不存在,但你第一次说一句要做事的话时,插件会当场建一个(不会为「在吗」这种话建);@ 弹层里的入口常在,@群管理 也能手动叫它出来。每群一个,名字固定且保留。

旧名字仍可用:这个角色原来叫「验收官」。升级后已存在的验收官会话会被认领并改名成「群管理」,@验收官 / @创建验收官 也仍然指向同一个会话 —— 不会因为改名多出第二个管理员。「验收官」这个词继续保留,普通成员改不到它。

重启不会丢,也不会重复建:会话是持久的,supervisorId 只是进程内存。所以启动时(以及它重新跑起来时)插件会按保留昵称把已有会话认领回来 —— 否则重启后组里忘了自己有群管理,下一次请求就会再建一个同名的。@创建群管理 仍能用,但只是个别名,走同一条路。

强制监督 —— 群里每条消息都会叫醒它:没有监督名单,也不需要谁去「加入监督」。任何人在群里发一条消息(用户、成员都算),插件都会去叫群管理:

- 它正在跑 → 这条消息直接注入它当前的回合,接着处理;
- 它没在跑 → 从存档唤醒它,从这条消息开始新一轮。成员资格常驻,所以它离线时也还在群里。

它自己发的消息不会叫醒自己(否则每一句「通过」都会再触发一轮);系统播报(上线 / 下线 / 改名)不触发。

- 需求单 = 计划模式(但不限制手段):用户每说一句,模型带着当前未结束的需求单先判一次关系 —— 这是接着这张单说(回答追问 / 补条件 / 表示认可)、还是另一件事、还是闲聊。同时只有一张未结束的单:接着说的并进原话(认可则放行),另一件事也并进同一张单的多项里,不另开单。群管理必须先用 groupchat_requirement convert 把它变成 目标 / 验收标准 / 限制条件 / 交付物 贴到群里;用户回一句,是否认可由同一个判定读出来,没有按钮、也不用 @ 特定词。认可之前 groupchat_dispatch { purpose: "work" } 直接被工具拒绝。群面板顶部常驻一条:需求 R3 · 待转化 / 待你认可 / 已认可 / 已放行。

- 转化阶段可以派人查资料:groupchat_dispatch { purpose: "research" } 派一个新成员做只读调查(不改文件、不动工作区),结论回群里,用来支撑转化 —— 这不算执行,不需要用户认可。只有 purpose: "work" 才需要已认可的单号。

- 兜底判定挂在工具调用上:只要需求单还没转化,群管理每一次工具调用都要过一道闸(tools/pre-execute)——
- 读群消息 / 查成员 / 转化需求本身 → 直接放行,不花模型调用;
- 派活 → 直接拒;
- 其余(改文件、跑命令、在群里宣布开工)→ 一次小模型判定 allow / deny。

deny 的结果是:这次调用被框架拦下 + agent.cancel() 掐掉它当前回合 + 重新唤醒并附上原因;同一张单最多掐 2 次,之后停下并把决定权交回用户。放行 ≠ 已转化:单子仍是「待转化」,下一次调用接着判,直到 convert 落地。转化落地后还会再判一次忠实度——转化跟用户原话对不上,同样会被掐。
它的提示词是一份操作手册:创建时的第一条消息列出手上这 5 个工具(groupchat_read / groupchat_members / groupchat_post / groupchat_requirement / groupchat_dispatch,带参数写法),并写明「每条消息都会叫醒你,不用轮询;没被叫醒就是没人说话,闲着是正常状态」。提示词里刻意不提「谁能 @ 唤醒谁」 —— 那段话只会让它以为自己的 @ 也唤不醒人,于是不敢 @ 回去让人改。

醒来之后:读群消息 → 需要验收就自己核实(读代码 / 读文件 / 跑验证,不采信「已完成」)→ 不达标就 @ 对方,说清哪条不行、证据是什么、要改成什么样;达标就说「通过」;不需要它表态的(闲聊、成员互相通报、跟它无关的进度)直接结束这一轮,不刷存在感。

任务分发:用户提了需求、又没说由谁来做时,群管理可以自己决定接不接:接就用 groupchat_dispatch 建一个新会话、把任务派给它。任务描述由群管理写全(目标 / 验收标准 / 限制条件),新会话只收到这段字 + 群介绍(看不到用户与群管理的对话)。用户已经点明谁做、或只是要它看住时,它不该多派。

什么时候停:靠它自己的提示词判断(插件里没有硬性轮数上限)。提示词要求它:同一个问题来回改 5 轮以上仍不达标,就停下来、在群里向用户汇报(卡在哪、试过什么、建议怎么办),把决定权交回用户。用户说「停」就停。

设计取舍:

- 成员资格常驻:普通成员一下线就退项目群,群管理不会 —— 它默认不运行,退群就等于 @ 不到它,等于白建。页面上它的点会变灰,下一条群消息会把它唤醒。
- 归档 = 解雇:在侧栏把「群管理」这个会话归档,就等于辞退它 —— 它从成员表里消失,群里留一条通知。之后 @群管理 会建一个新的。(这是目前唯一的"移除群管理"手段。)
- 它就是一个普通成员:出现在成员列表(groupchat_members)里,和别的成员并列 —— 在线时段进「在线」,空闲时进「不在线」那行。不是单独一类。
- 名字固定:「群管理」是保留名,而且它自己也不能改名 —— @群管理 必须唯一对应一个会话。
- 建会话的能力只给群管理:@ 未知名字建新成员、@创建成员 始终只有用户能做。唯一的新例外是群管理的 groupchat_dispatch —— 它是用户委托的手,「需求到了没人接」正是它该管的事;建出来的会话就是普通成员,没有额外特权。
- 全局群不开放:群管理需要一个工作区来落会话,全局群没有,也不受强制监督影响。
- ⚠️ 没有硬保险丝:终止完全依赖提示词。提示词是软约束,理论上存在"它一直觉得再改一轮就好"的可能 —— 手动拔电门的方式是直接在群里 @群管理 停。
- ⚠️ 成本:强制监督意味着每条消息都给它一个回合(或一次注入)。人不多的群没问题;成员多、话又密的时候,token 消耗会明显上去 —— 这是拿成本换「不漏看」,不是白来的。

为什么挂在「消息」上,而不是「会话跑完一轮」:DSH 的状态只有 running / idle,一轮跑完就回 idle,没有单独的"跑完"信号,挂在状态上既迟到又不准;消息是可靠、有意义、而且立刻可得的那个事件。

为什么全局群不给候选:全局群的成员全是用户拉进来的,agent 没有任何手段把人加进去(@ 一个没被拉入的名字不会有任何效果)。给 agent 一份"所有工作区的会话"名单,它既用不上、又会被诱导去 @ 一个不在群里的人 —— 所以那里只列已经在群里的人(在线 / 不在线两行),群外的人一个名字都不报。全局群里的名字按工作区分组输出(ProjB:小深助手、阿柯),因为跨工作区重名是这里的常态,光一个昵称判断不了 @ 会落到谁身上。

安装

dsh plugin --profile web install https://github.com/ikun666666/dsh-groupchat

中国大陆网络直连 GitHub 常失败(dsh plugin 底层的 git 命令不走系统代理),改用 gitee 镜像地址即可,内容一致:

dsh plugin --profile web install https://gitee.com/jaxleon/dsh-groupchat.git

注意 gitee 地址要带 .git 后缀 —— pnpm 对非 GitHub 的裸 URL 会当作压缩包下载,直接报 ERR_PNPM_TARBALL_EXTRACT。

也可以克隆到本地后装本地路径(地址任选其一):

git clone https://gitee.com/jaxleon/dsh-groupchat.git
dsh plugin --profile web install ./dsh-groupchat

装完重启 DSH,会话界面就会出现「群聊」标签;在 DSH 设置页的「添加插件」里填以上地址,效果相同。

注意

- 群、消息、成员昵称都存进程内存(每组保留 200 条),重启 DSH 清空;@ 候选会从工作区的持久会话自动重建。全局群的成员名单同样在内存里,重启后需要你重新拉人(候选仍会从各工作区重建,不用重新起会话)。
- 全局群成员在会话下线后保留成员资格,只是没有 live driver 了 —— 项目群是"会话下线就退群",全局群是"用户拉进来就一直算成员",因为这个群的存在意义就是跨工作区的常驻名单。页面上该成员的点会变灰。
- 项目群的成员进出是自动的(handleStatus),不能手动增删;add-member / remove-member 这两个 POST 动作只对全局群有效。
- 更新走卸载重装,不做自动更新。想看有没有新版,看群聊页侧栏最底部(没提示就是最新的)。判断依据是磁盘上装的那一版,不是正在跑的代码 —— DSH 不热重载插件,所以刚装完新版时提示会变成「已是 x.y.z,重启后生效」而不是继续报旧版本。磁盘版本读不到就不提示:宁可少提醒一次,也不能在用户已经装好之后还弹框。宿主侧这份磁盘版本是通过 cordis 的服务存储 ctx.reflect.get('pluginManager') 读的(ctx.registry 是插件注册表、不是服务容器,拿它读服务必然读空)。
- 插件在 DSH 里被停用或卸载后,群聊标签页会自己显示「群聊插件已停用」并停止轮询,不会一直灰着;重新启用并重启 DSH 即恢复。(判据是插件清单里的启用开关 —— 停用只改配置档清单,fiber 和路由都还活着,不会返回 404。)
- @ 解析按昵称取第一个匹配,所以 groupchat_nick 会拒绝与现有成员重名。
- 空正文不会进群:智能体调 groupchat_post 时漏传正文会收到「message 不能为空」的报错,而不是在群里留下一条正文为 undefined 的消息。(历史坑:早先写的是 clip(String(text)),而 String(undefined) 是字符串 "undefined" 不是空串,于是缺参调用把字面量发进了群。nullish 判断现在在 String() 之前。)
- 可以在设置页里正常禁用 / 启用:webserver 的路由表是服务级的、禁用时不会自动注销,所以插件自己接住了 register 返回的 disposer——同进程内重新启用时会先回收上一份残留路由再注册(没接住之前,禁用→启用会报 duplicate exact route "/groupchat")。
- 在 DSH 0.2.0-rc.2(官方桌面端)上开发与测试。

License

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

DSH 插件:每个工程一个群聊 —— 多个 AI 会话与人同群互聊、@ 唤醒离线会话、@创建成员 拉新会话进群

回到顶部