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

常驻协作团队 Gdenich/dsh-live-teams

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

用持久会话组队分工,凭 Git 提交验收交付

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

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

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

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 36 条)
  • 发起网络请求
    lib/client.js:762
    const response = await fetch(path, {
  • 发起网络请求
    lib/client.js:3010
    const response = await fetch(`/api/live-teams/journal?${query.toString()}`, {
  • 读取本地文件
    lib/team-store.js:229
    readFileSync(path.join(this.requireLocation(teamId).directory, DISABLED_MARKER), "utf8");
  • 读取本地文件
    lib/team-store.js:736
    contents = readFileSync(file, "utf8");
  • 读取本地文件
    lib/team-store.js:754
    contents = readFileSync(file, "utf8");
  • 读取本地文件
    lib/roles.js:172
    entries = readdirSync(directory);
  • 读取本地文件
    lib/roles.js:183
    contents = readFileSync(file, "utf8");
  • 读取本地文件
    lib/roles.js:222
    workspaceDirectoryExists = statSync(workspacePath).isDirectory();
  • 读取本地文件
    lib/mailbox.js:654
    if (!existsSync(this.messagesFile) || !existsSync(this.deliveriesFile)) return [];
  • 读取本地文件
    lib/mailbox.js:655
    const messages = JSON.parse(readFileSync(this.messagesFile, "utf8"));
  • 读取本地文件
    lib/mailbox.js:656
    const deliveries = JSON.parse(readFileSync(this.deliveriesFile, "utf8"));
  • 读取本地文件
    lib/task-store.js:512
    const active = parseTasksState(JSON.parse(readFileSync(this.location.file, "utf8")), this.teamId, this.location.archiveDirectory).tasks.filter((task)
  • 读取本地文件
    lib/task-store.js:532
    const attempts = parseAttemptsState(JSON.parse(readFileSync(this.location.attemptsFile, "utf8")), this.teamId).attempts.filter((attempt) => attempt.ta
  • 读取本地文件
    lib/task-store.js:547
    const state = parseTasksState(JSON.parse(readFileSync(this.location.file, "utf8")), this.teamId, this.location.archiveDirectory);
  • 读取本地文件
    lib/member-tools.js:1140
    return { text: await readFile(path.join(binding.workspacePath, ".dsh-live-teams", "BRIEF.md"), "utf8") };
  • 写入本地文件
    lib/member-tools.js:1149
    await mkdir(path.join(binding.workspacePath, ".dsh-live-teams"), { recursive: true });
  • 写入本地文件
    lib/member-tools.js:1151
    if (next.length === 0) await writeFile(file, "", "utf8");
  • 写入本地文件
    lib/member-tools.js:1152
    else await writeFile(file, next, "utf8");
  • 读取本地文件
    lib/context-provider.js:34
    const mtimeMs = statSync(file).mtimeMs;
  • 读取本地文件
    lib/context-provider.js:37
    const value = readFileSync(file, "utf8").trim();
  • 读取本地文件
    lib/routes.js:194
    parsed = JSON.parse(await readFile(file, "utf8"));
  • 读取本地文件
    lib/routes.js:2126
    briefing = (await readFile(path.join(resolved.workspacePath, ".dsh-live-teams", "BRIEF.md"), "utf8")).trim();
  • 读取本地文件
    lib/plugin.js:181
    if (!existsSync(teamStateFile)) return false;
  • 读取本地文件
    lib/plugin.js:183
    readFileSync(disabledMarker, "utf8");
  • 读取本地文件
    lib/plugin.js:192
    return text(JSON.parse(readFileSync(teamStateFile, "utf8")).name)?.trim() ?? input.teamName;
  • 读取本地文件
    lib/plugin.js:531
    await access(target);
  • 写入本地文件
    lib/plugin.js:536
    await mkdir(workspaceRolesDirectory, { recursive: true });
  • 写入本地文件
    lib/plugin.js:538
    await copyFile(globalPath, target, 0);
  • 读取本地文件
    lib/tree-snapshot.js:47
    entries = await fsp.readdir(path$1.join(workspacePath, relative), { withFileTypes: true });
  • 读取本地文件
    lib/tree-snapshot.js:62
    const stat = await fsp.stat(path$1.join(workspacePath, next));
  • 执行外部命令固定命令
    lib/changed-paths.js:34
    execFile("git", [
  • 执行外部命令固定命令
    lib/changed-paths.js:54
    execFile("git", [
  • 执行外部命令固定命令
    lib/git-artifacts.js:19
    const child = execFile("git", [
  • 读取本地文件
    lib/git-artifacts.js:99
    const stat = await fsp.lstat(absolute);
  • 读取本地文件
    lib/git-artifacts.js:101
    content = Buffer.from(await fsp.readlink(absolute));
  • 读取本地文件
    lib/git-artifacts.js:104
    content = await fsp.readFile(absolute);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-session@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 持久会话组队分工
  • 声明路径与证据评审
  • 绑定Git提交流程

一队长期存活的 DSH 会话:持久任务、声明路径、带证据的评审,以及绑定 Git 的提交流程

README

由 DeepSeek 最新模型翻译生成
dsh-live-teams DSH Live Teams 的主机端部分。 Team 标签页的卡片几何、字号层级和交互模式改编自 dsh-context v0.52.1,作者为 bowenliang123, Copyright 2025,依据 Apache License 2.0 授权;其实现经转录并为 dsh-live-teams 修改。 安装 dsh plugin --profile add dsh-live-teams 然后在该 profile 的 cordis.patch.yml 行中启用它(DSH_LIVE_TEAMS=1)并重启 DSH。若从检出目录而非注册表安装: dsh plugin --profile add github:Gdenich/dsh-live-teams 要求:DSH Desktop 0.1.5-rc.1 或更新版本。插件在挂载时检查主机,若缺少所需服务,会以可读的原因关闭团队功能,因此 DSH 更新不会让它处于半工作状态。支持的版本在 package.json 的 dsh.compatibility.dshReleases 下声明。
展开完整文档(README 剩余 1 节)
dsh-live-teams

DSH Live Teams 的主机端部分。

Team 标签页的卡片几何、字号层级和交互模式改编自 dsh-context v0.52.1,作者为 bowenliang123, Copyright 2025,依据 Apache License 2.0 授权;其实现经转录并为 dsh-live-teams 修改。

安装

dsh plugin --profile add dsh-live-teams

然后在该 profile 的 cordis.patch.yml 行中启用它(DSH_LIVE_TEAMS=1)并重启 DSH。若从检出目录而非注册表安装:

dsh plugin --profile add github:Gdenich/dsh-live-teams

要求:DSH Desktop 0.1.5-rc.1 或更新版本。插件在挂载时检查主机,若缺少所需服务,会以可读的原因关闭团队功能,因此 DSH 更新不会让它处于半工作状态。支持的版本在 package.json 的 dsh.compatibility.dshReleases 下声明。

当前功能:持久的工作区所属团队状态;一个窄 Session 端口;一个去重命令队列;Session 作用域的上下文提供者;带尝试、声明路径、评审与验收的任务;一个协调式调度器,启动 lead 分配的内容,并在无信息时显示沉默而非猜测;Git 绑定的提交,其评审是提交范围,其集成是比较并交换;以及面板中的人类任务界面,可直接创建、编辑和发布工作。每项决策背后的依据见 docs/decisions/(ADR 0001–0012),实时证据见 docs/implementation/pilot-findings.md。

挂载通过本包的 Cordis 补丁选择性启用。除非组合设置
DSH_LIVE_TEAMS=1,否则该行处于禁用状态;在没有工作区路径的情况下启用它会
大声失败,而不是半接线运行。

布局

TypeScript 源码位于 src/;lib/ 是构建输出,不手动编辑。
本包遵循第一方 DSH 约定:ESM lib/.js,声明文件位于其旁,exports 使用 types/default 配对,files,对 Harness 包的 peer 依赖,以及 dsh.bundle.patch。

构建刻意不打包:每个入口都是自包含的,因此不会有哈希共享 chunk 落在已发布的 files 列表之外,且 lib/ 与 src/ 一一对应。

模块

| 模块 | 职责 |
| errors.ts | 领域分类、平台错误转换、仅审计详情 |
| storage.ts | 原子发布(临时文件、fsync、rename、目录 fsync)以及进程本地锁 |
| team-store.ts | /.dsh-live-teams 下的团队状态、修订 CAS、bindingGeneration、容错的 events.jsonl |
| session-bridge.ts | 架构文档 §9 中的八方法 Session 端口 |
| command-queue.ts | 持久准入、语义去重、代际隔离、重试 |
| context-provider.ts | 用于 systemPrompt.context(...) 的 Session 作用域成员上下文 |

此处强制的不变量

1. 成员身份、Session 身份、角色和模型路由是相互独立的值。
2. 每个源自插件的命令在到达端口之前都会先由 command-queue 准入。
3. 准入对 idempotencyKey 是幂等的。平台接缝则不是:在兼容性验证中,两个共享同一 requestId 的 prompt 调用都被接受了。
4. 命令会记录其被准入时所对应的 bindingGeneration,当成员被重新绑定后,该命令会被拒绝。
5. interrupt 会取消一个回合,且绝不触碰任务尝试的所有权。
6. 团队上下文在每次组装时都会从权威状态重新计算,且从不缓存。
7. 模型选择被有意不实现:平台调用还会重写部署范围的默认模型,而该策略需要明确的人工决策。

测试

pnpm --filter dsh-live-teams check
pnpm --filter dsh-live-teams build
pnpm --filter dsh-live-teams test

测试文件覆盖错误分类体系、存储、桥接、队列、上下文提供者,以及一个集成文件,该文件在临时工作区上通过提供者和桥接驱动真实存储。
预览分享卡片长什么样 ↓Gdenich/dsh-live-teams
分享 · DeepSeek Harness Hub
Gdenich/dsh-live-teams

用持久会话组队分工,凭 Git 提交验收交付

回到顶部