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

多会话协作 Nerofirstgit/dsh-collaboration-plugin

DeepSeek Harness
Nerofirstgit12 天前有提交已提供中文文档扫描:含敏感能力

让同项目的多个会话自动沟通并协调文件修改

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Nerofirstgit/dsh-collaboration-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 40 处,展示前 37 条)
  • 写入本地文件
    src/bootstrap.ts:17
    if(created){writeFileSync(fd,content);fsyncSync(fd);syncPrivateDirectory(directory);return content}
  • 读取本地文件
    src/bootstrap.ts:19
    return readFileSync(fd,'utf8')
  • 执行外部命令来自配置/变量
    src/bootstrap.ts:46
    try {child=spawn(process.execPath,[filename,config.data_dir],{detached:true,stdio:['ignore',log,log],env:{...process.env}})}finally{closeSync(log)}
  • 读取本地文件
    src/daemon-entry.ts:10
    const value=record(JSON.parse(readFileSync(join(directory,'config.json'),'utf8')))
  • 读取本地文件
    src/daemon-entry.ts:12
    const token=string(readFileSync(join(directory,'runtime.key'),'utf8').trim(),'runtime key')
  • 读取本地文件
    src/gui-configure.ts:56
    const metadata=statSync(input)
  • 读取本地文件
    src/gui-configure.ts:58
    const output=generateGuiOverlay(readFileSync(input,'utf8'),{surface,home,profile_dir,data_dir})
  • 写入本地文件
    src/gui-configure.ts:59
    if(values.has('--output'))writeFileSync(path('--output'),output,{encoding:'utf8',flag:'wx',mode:0o600})
  • 读取本地文件
    src/host/gui-state-roots.ts:86
    try{info=lstatSync(current)}catch(error){
  • 执行外部命令固定命令
    src/identity.ts:22
    const result=spawnSync('git',['--no-optional-locks','-C',directory,'rev-parse',arg],{encoding:'utf8',timeout:5000,env:{...process.env,GIT_OPTIONAL_LOC
  • 读取本地文件
    src/identity.ts:51
    const machine=machineInstanceDirectory(),physicalMachine=existsSync(machine)?canonicalExistingDirectory(machine):resolve(canonicalExistingDirectory(di
  • 读取本地文件
    src/native-rename.ts:12
    lstatSync(target)
  • 写入本地文件
    src/native-rename.ts:15
    renameSync(source,target)
  • 读取本地文件
    src/platform/ipc.ts:20
    lstat(path:string):Promise<{isSocket():boolean}>
  • 删除本地文件
    src/platform/ipc.ts:21
    unlink(path:string):Promise<unknown>
  • 写入本地文件
    src/platform/ipc.ts:22
    chmod(path:string,mode:number):Promise<unknown>
  • 读取本地文件
    src/platform/private-state.ts:23
    try{info=lstatSync(current)}catch(error){
  • 写入本地文件
    src/platform/private-state.ts:25
    try{mkdirSync(current,{mode:0o700})}catch(created){if((created as NodeJS.ErrnoException).code!=='EEXIST')throw created}
  • 读取本地文件
    src/platform/private-state.ts:26
    info=lstatSync(current)
  • 读取本地文件
    src/platform/private-state.ts:30
    const info=lstatSync(absolute)
  • 读取本地文件
    src/platform/private-state.ts:36
    const info=lstatSync(path)
  • 读取本地文件
    src/platform/private-state.ts:48
    const info=fstatSync(fd),named=lstatSync(path)
  • 读取本地文件
    src/platform/resource-paths.ts:36
    const stat=lstatSync(path,{bigint:true})
  • 发起网络请求
    src/plugin.ts:107
    const decision=await approval.request({agent:exec.agent,toolName:exec.name,callId:exec.callId,signal:exec.signal,reason:`Allow this one coordination m
  • 写入本地文件
    src/store.ts:17
    if(path!==':memory:') {mkdirSync(dirname(path),{recursive:true,mode:0o700});chmodSync(dirname(path),0o700)}
  • 写入本地文件
    src/store.ts:17
    if(path!==':memory:') {mkdirSync(dirname(path),{recursive:true,mode:0o700});chmodSync(dirname(path),0o700)}
  • 读取本地文件
    src/writer.ts:281
    const entry = lstatSync(path, { bigint: true });
  • 读取本地文件
    src/writer.ts:299
    const after = fstatSync(fd, { bigint: true }), current = lstatSync(path, { bigint: true });
  • 读取本地文件
    src/writer.ts:342
    const entry=lstatSync(directory,{bigint:true});
  • 读取本地文件
    src/writer.ts:355
    const entry=lstatSync(this.parents[index]!,{bigint:true});
  • 写入本地文件
    src/writer.ts:381
    if(create)mkdirSync(this.entry,{mode:0o700});
  • 读取本地文件
    src/writer.ts:382
    const current=lstatSync(this.entry,{bigint:true});
  • 读取本地文件
    src/writer.ts:390
    const current=lstatSync(this.entry,{bigint:true});
  • 写入本地文件
    src/writer.ts:915
    renameSync(anchor.target, `${artifact.path}/removed`);
  • 写入本地文件
    src/writer.ts:917
    renameSync(`${artifact.path}/new`, anchor.target);
  • 删除本地文件
    src/writer.ts:1077
    unlinkSync(`${artifact.path}/${name}`);
  • 删除本地文件
    src/writer.ts:1086
    rmdirSync(artifact.entry);
扫描于 2026/11/5(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-tools@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-llm@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-fs@deepseek-ai/dsh-sandbox
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的项目级协作:自动发现会话、持久消息、协同编辑文件。多会话自动发现、持久消息与文件协作。开发预览版。

README

由 DeepSeek 最新模型翻译生成
dsh-collaboration-plugin 让 DeepSeek Harness 的多个独立会话,在同一项目中自动沟通、协调文件修改。 给每个会话分配一次任务,后续的发现、消息传递和文件协调交给插件处理。 项目简介 多个 AI 会话同时处理一个项目时,需要知道谁在做什么,也需要避免用旧内容覆盖彼此的修改。本插件为 DeepSeek Harness 提供项目范围的会话发现、持久消息和受协调的文件写入。 你仍然在 Harness 中创建独立会话、分配任务。参与协作的会话自行交流,在可以证明安全时合并不重叠的修改;遇到重叠或无法判定的冲突,会交回会话处理并说明情况。 这是可安装的 Cordis / dsh 插件包。当前版本为 0.1.0-dev.0,仍在开发中,完整发布验收尚未完成。 本 README 同时记录本地开发候选版的进展。相关源码变更尚未全部推送;从当前 GitHub 快照构建时,部分功能可能尚未包含。 导航: 功能亮点 · 兼容性 · 安装 · 使用 · 配置 · 限制 · 开发 · 文档 功能亮点 - 同项目自动发现:查看参与协作的会话、运行状态和简短任务摘要,帮助会话识别相关工作。 - 持久消息传递:协调消息进入本地持久记录,并带有投递回执;会话之间无需用户手动转述。
展开完整文档(README 剩余 1 节)
dsh-collaboration-plugin

让 DeepSeek Harness 的多个独立会话,在同一项目中自动沟通、协调文件修改。

给每个会话分配一次任务,后续的发现、消息传递和文件协调交给插件处理。

项目简介

多个 AI 会话同时处理一个项目时,需要知道谁在做什么,也需要避免用旧内容覆盖彼此的修改。本插件为 DeepSeek Harness 提供项目范围的会话发现、持久消息和受协调的文件写入。

你仍然在 Harness 中创建独立会话、分配任务。参与协作的会话自行交流,在可以证明安全时合并不重叠的修改;遇到重叠或无法判定的冲突,会交回会话处理并说明情况。

这是可安装的 Cordis / dsh 插件包。当前版本为 0.1.0-dev.0,仍在开发中,完整发布验收尚未完成。

本 README 同时记录本地开发候选版的进展。相关源码变更尚未全部推送;从当前 GitHub 快照构建时,部分功能可能尚未包含。

导航: 功能亮点 · 兼容性 · 安装 · 使用 · 配置 · 限制 · 开发 · 文档

功能亮点

- 同项目自动发现:查看参与协作的会话、运行状态和简短任务摘要,帮助会话识别相关工作。
- 持久消息传递:协调消息进入本地持久记录,并带有投递回执;会话之间无需用户手动转述。
- 文件占用协调:普通受管写入自动申请文件占用,遇到短时竞争进行有界等待,写入结束后释放隐式占用。
- 保留双方修改:过期编辑只有在完整三方比较能够证明不覆盖对方改动时才自动合并。重叠和歧义不会被盲目覆盖。
- 在原任务内继续协作:运行中的任务可以等待消息,并在轮次结束处有限续步;消息不会重启已完成或已取消的任务。
- 可查询的操作结果:不确定是否成功的写入保留原操作 ID,先查询结果,避免以新 ID 重复执行。
- 本地协调服务:协调状态、消息与会话历史保存在本机;Windows 使用命名管道,Unix 使用本地套接字。
- 受审查的插件共存:提供指定版本的 Sidebar、Hello、Acceptance Workbench 协作适配,以及受保护的原生插件管理入口。

兼容性与验证状态

| 项目 | 当前范围 |
| Node.js | >=24.0.0 |
| 源码默认宿主 | DeepSeek Harness 0.2.1-rc.2,精确 SDK 依赖 |
| Windows Desktop 兼容构建 | 0.2.0-rc.2,使用单独适配、单独固定依赖的安装包 |
| 插件版本 | 0.1.0-dev.0,开发候选版 |
| 主要验证平台 | 原生 Windows x64 / NTFS;另有早期 Linux 开发检查 |
| 发布验收 | 部分场景已验证,完整验收矩阵仍有开放项 |

已记录的验证: 原生 Windows 组件测试、两个独立 Harness 进程通过真实命名管道协作、安装归档后的 Web 启动与资源检查;本机 Desktop 0.2.0-rc.2 的真实模型双会话发现、消息传递、文件协调,以及指定插件共存和原生插件管理流程。

这些是有限场景的测试记录,不代表任意宿主版本、任意插件或全部崩溃恢复路径都已通过。0.2.0-rc.2 与 0.2.1-rc.2 的包不能混用,也不能只修改版本号来跳过检查。详见 Windows 本地复测、插件共存和插件管理恢复。

安装

1. 从源码构建

在独立开发目录中运行以下命令。Windows PowerShell 可使用 npm.cmd 代替 npm。

git clone https://github.com/Nerofirstgit/dsh-collaboration-plugin.git
cd dsh-collaboration-plugin
npm ci --ignore-scripts
npm run typecheck
npm run test:components
npm run build
npm pack --ignore-scripts --dry-run
npm pack --ignore-scripts

当前归档名为 nerofirstgit-dsh-collaboration-0.1.0-dev.0.tgz。--ignore-scripts 跳过打包生命周期,因此须先完成上面的显式构建。检查归档只包含编译文件、bundle 配置、文档和许可证,不包含运行密钥、数据库或测试工作区。

仓库声明了 private: true,请使用可信源码生成的本地归档;本文不提供 npm 注册表安装方式。

2. 安装到隔离的 headless 测试配置

以下 PowerShell 示例对应源码默认的 DSH 0.2.1-rc.2,在上述仓库目录中执行。示例中的测试目录可自行替换。

$archive = (Resolve-Path './nerofirstgit-dsh-collaboration-0.1.0-dev.0.tgz').Path
$env:DSH_HOME = 'C:\dsh-collaboration-test\home'
dsh --version
确认输出为 0.2.1-rc.2 后继续sh
dsh plugin --profile headless add $archive --ignore-scripts

宿主须具备官方插件命令需要的 pnpm 环境。bundle 通过 dsh.bundle.patch 注册,安装后检查最终配置,并冷启动对应 profile。不要重复手工添加相同 bundle 条目。

3. Web / Desktop 配置

GUI 需要在官方 web 或 desktop 配置基础上应用生成的专用 overlay。仅安装默认 headless bundle 不足以启用 GUI。

构建后可以先查看离线生成工具的参数: sh
node lib/gui-configure.js --help

工具读取安装 bundle 后的官方 --dump-config 输出,需要明确指定 --surface、--home、--profile-dir、--data-dir;--host-version 默认 0.2.1-rc.2。它只生成新的配置文件,不会启动应用或修改现有 profile。具体步骤见 安装说明 和 GUI 配置说明。

上述文档保留了早期检查点,部分“尚未验证”描述属于当时状态;当前支持范围以本 README 和后续专题记录为准。已有 Desktop 0.2.0-rc.2 安装需要匹配的兼容构建和 overlay。

如何使用

在完成受支持配置的安装后:

1. 在同一项目中创建两个或更多参与协作的 Harness 会话,并让它们使用同一个本地协调目录。
2. 分别分配任务,例如让 A 修改某份文档的安装说明,让 B 修改同一文档的使用说明。
3. 会话通过工具发现彼此、发布任务摘要、发送协调消息。普通受管写入自动处理文件占用。
4. 遇到过期内容时,插件尝试安全合并;无法自动解决时,会话根据冲突信息继续协调,必要时向用户说明。

模型需要支持并正确调用工具。插件提供协调能力,不保证模型在每个任务中都采取相同的协作策略。

主要工具由插件注册给模型,一般无需用户手动调用:

| 工具 | 用途 |
| session_list_sessions | 发现同工作区或同项目会话 |
| session_update_task_summary | 发布当前任务的简短摘要 |
| session_send_message | 发送持久协调消息 |
| session_poll_events | 查询可见事件 |
| session_wait_for_coordination | 在当前运行任务内等待消息 |
| session_collaboration_status | 查看当前配置、能力与限制 |
| claim_files / release_files | 显式申请或释放文件占用 |
| apply_file_change | 提交受管文件创建、替换、补丁、删除或无覆盖重命名 |

配置

在可信的 profile overlay 中配置 session-collaboration。下例为 Windows 路径示例,文件存放在项目目录之外: yaml
- id: session-collaboration
config:
enabled: true
workspace_root: 'C:/dsh-collaboration-test/project'
data_dir: 'C:/dsh-collaboration-test/state'
communication_policy: same_project_enabled
heartbeat_ms: 10000
offline_ms: 45000
lease_ttl_ms: 60000
auto_renew: true

| 配置项 | 说明 |
| workspace_root | headless 工作区根目录;GUI 会话使用经过校验的会话工作区 |
| data_dir | 参与方共用的本地协调目录,须位于所有项目目录之外 |
| communication_policy | 新配置默认 same_project_enabled;explicit_only 要求明确授权 |
| heartbeat_ms / offline_ms | 心跳与离线判定间隔;离线阈值须大于心跳间隔 |
| lease_ttl_ms / auto_renew | 文件占用有效期及自动续期 |

共享协调参数须保持一致;workspace_root 是各宿主自己的设置。已有协调域不会随默认值变化自动迁移通信策略,升级时需停机、备份并显式迁移。explicit_only 在没有可用授权入口时会返回 PERMISSION_REQUIRED。

可在启动前检查最终组合配置: powershell
dsh --profile headless --patch 'C:\dsh-collaboration-test\collaboration.local.yml' --dump-config

输出可能包含本地设置,分享前请检查并移除敏感信息。GUI 检查时还需带上其专用 overlay;配置输出本身不等于运行时就绪。

当前限制

- 协作范围是已启用插件并通过运行时检查的 dsh 会话。外部编辑器和其他程序的写入不受插件阻止。
- 会话可以看到授权范围内的任务摘要和协调消息,不能凭发现能力读取任意私有对话,消息也不能替代用户授权。
- 仅支持已审查的宿主组合。Shell、MCP、Git 写入和其他未适配执行入口可能被禁用或拒绝。
- 当前共存验证针对 Better Sidebar 0.25.0-coop.1、Hello 0.1.0-coop.1、Acceptance Workbench 0.15.0-coop.1。原始包或其他版本不能据此视为兼容。
- 恢复原生插件管理不代表任意 npm / Git 插件都可执行。新增插件仍须通过适配与准入检查;安装后可能需要冷重启,热重载尚未认证。
- 文件操作不支持覆盖式重命名、跨文件系统移动、目录移动、二进制写入或外部工具结果的暂存导入。
- Windows 目录 fsync、整机断电持久性、网络共享和跨用户协作尚未认证。不确定的写入可能需要恢复处理。
- 协作会话历史使用独立持久存储;旧会话不会自动导入,卸载也不会自动迁回原生 JSONL。升级或卸载前请停机并备份配置和完整状态目录,不要删除选举数据库、密钥或操作记录来绕过检查。

开发与验证 sh
npm run typecheck
npm run test:components
npm run build

独立进程集成测试单独运行:

npm run test:integration

集成测试涉及真实进程和本地 IPC,应在隔离环境中执行,并先确认没有其他协调实例占用账号级选举。测试夹具使用本地模拟模型;真实模型 Desktop 测试属于单独的验证记录。组件通过、构建成功和完整发布验收是不同的检查范围。

文档

| 文档 | 内容 |
| 自动协作 | 消息、等待、自动合并及旧协调域迁移 |
| 安装与升级 | 本地打包、隔离安装、停用和回退 |
| GUI 配置 | Web / Desktop overlay 与运行时检查 |
| Windows 本地复测 | 原生组件、双进程和已安装 Web 测试记录 |
| 插件共存 | 指定适配包的功能范围与剩余工作 |
| 插件管理恢复 | 原生安装入口、准入检查和重启边界 |
| 架构 · 消息 · 文件写入 | 设计与实现细节 |
| 范围修订 · 验收矩阵 | 需求范围和完整验收清单 |

反馈与贡献

欢迎通过 GitHub Issues 反馈问题或提交 Pull Request。请附上宿主和插件版本、操作系统、复现步骤,以及去除凭据和私有会话内容后的日志。修改涉及宿主、文件写入或第三方插件时,请注明实际测试的平台与功能范围。

许可证

MIT · Copyright © 2026 Nerofirstgit
预览分享卡片长什么样 ↓Nerofirstgit/dsh-collaboration-plugin
分享 · DeepSeek Harness Hub
Nerofirstgit/dsh-collaboration-plugin

让同项目的多个会话自动沟通并协调文件修改

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