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

智能体团队美术包 Fish-under-sea/dsh-agent-teams-fish

DeepSeek Harnessv1.0.0
Fish-under-sea11 天前有提交已提供中文文档扫描:含敏感能力

DSH 插件(上游 NanmiCoder/dsh-agent-teams 的补充版):AgentTeams 多智能体团队协作 —— 自然语言组队、任务依赖 DAG、信箱通信、右侧栏树状监测…

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @fish-under-sea/dsh-agent-teams-fish
npm 源 · @fish-under-sea/dsh-agent-teams-fish 的发布者账号已校验与本仓库一致

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包@fish-under-sea/dsh-agent-teams-fish @ 1.0.0
✓Node 引擎要求 ^22.19.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 02:57:49

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 52 处,展示前 45 条)
  • 发起网络请求
    lib/client.js:514
    const fetchState = runtime.fetchState ?? ((url, init) => fetch(url, init));
  • 发起网络请求
    lib/client.js:1140
    const response = await fetch(PLAN_URL, {
  • 发起网络请求
    lib/client.js:2835
    const response = await fetch(ACTIVITY_HALT_URL, {
  • 读取本地文件
    scripts/doctor.mjs:8
    return JSON.parse(readFileSync(path, 'utf8'))
  • 读取本地文件
    scripts/doctor.mjs:15
    if (existsSync(candidate)) return realpathSync(candidate)
  • 读取本地文件
    scripts/doctor.mjs:27
    const hostPath = existsSync(own) && manifest(own).name === '@deepseek-ai/dsh'
  • 读取本地文件
    lib/snapshot.js:162
    entries = await readdir(root.stateRoot, { withFileTypes: true });
  • 写入本地文件
    lib/state.js:195
    await mkdir(join(dir, 'inbox'), { recursive: true });
  • 读取本地文件
    lib/state.js:205
    const raw = await readFile(join(stateRoot, teamId, 'team.json'), 'utf8');
  • 读取本地文件
    lib/state.js:231
    const raw = readFileSync(join(stateRoot, teamId, 'team.json'), 'utf8');
  • 读取本地文件
    lib/state.js:265
    return parseRetiredMemberIds(readFileSync(join(stateRoot, RETIRED_MEMBERS_FILE), 'utf8'));
  • 读取本地文件
    lib/state.js:275
    return parseRetiredMemberIds(await readFile(join(stateRoot, RETIRED_MEMBERS_FILE), 'utf8'));
  • 写入本地文件
    lib/state.js:293
    await mkdir(stateRoot, { recursive: true });
  • 读取本地文件
    lib/state.js:308
    entries = await readdir(stateRoot, { withFileTypes: true });
  • 读取本地文件
    lib/state.js:344
    entries = await readdir(stateRoot, { withFileTypes: true });
  • 写入本地文件
    lib/state.js:382
    await mkdir(join(stateRoot, teamId, 'inbox'), { recursive: true });
  • 写入本地文件
    lib/state.js:593
    await writeFile(temporary, content, { encoding: 'utf8', flag: 'wx' });
  • 删除本地文件
    lib/state.js:596
    await rm(temporary, { force: true }).catch(() => undefined);
  • 写入本地文件
    lib/state.js:600
    rename: (from, to) => rename(from, to),
  • 写入本地文件
    lib/state.js:601
    writeFile: (target, payload) => writeFile(target, payload, 'utf8'),
  • 删除本地文件
    lib/state.js:602
    remove: (path) => rm(path, { force: true }),
  • 删除本地文件递归
    lib/state.js:1071
    await rm(join(stateRoot, teamId), { recursive: true, force: true });
  • 删除本地文件递归
    lib/state.js:1144
    await rm(previous, { recursive: true, force: true }).catch(() => undefined);
  • 读取本地文件
    lib/capabilities.js:19
    entries = readdirSync(root, { withFileTypes: true });
  • 读取本地文件
    lib/artwork-source.js:201
    return { path, contentType, data: await readFile(path) };
  • 读取本地文件
    lib/artwork-source.js:240
    return { path, contentType: packagedArtworkContentType(name), data: await readFile(path) };
  • 读取本地文件
    scripts/compatibility.mjs:4
    export const policy = JSON.parse(readFileSync(new URL('../compatibility.json', import.meta.url), 'utf8'))
  • 读取本地文件
    scripts/compatibility.mjs:6
    export const workspacePolicy = JSON.parse(readFileSync(new URL('../pnpm-workspace.yaml', import.meta.url), 'utf8'))
  • 读取本地文件
    scripts/compatibility.mjs:107
    const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 读取本地文件
    lib/artifacts.js:106
    stats = lstatSync(absolute);
  • 读取本地文件
    lib/artifacts.js:127
    stats = statSync(absolute);
  • 读取本地文件
    lib/artifacts.js:192
    entries = readdirSync(join(input.workspace, current), { withFileTypes: true });
  • 发起网络请求
    lib/client/ActivityPanel.js:354
    const response = await fetch(ACTIVITY_HALT_URL, {
  • 发起网络请求
    lib/client/StagingPlanEditor.js:22
    const response = await fetch(PLAN_URL, {
  • 发起网络请求
    lib/client/activity-monitor.js:133
    const fetchState = runtime.fetchState ?? ((url, init) => fetch(url, init));
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:63
    return createHash('sha256').update(readFileSync(path)).digest('hex')
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:88
    if (!existsSync(sessionDir)) return []
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:89
    return readdirSync(sessionDir)
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:165
    const raw = readFileSync(path)
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:220
    if (existsSync(publishedPath)) return fail(`${publishedName} already exists; refusing to overwrite it`)
  • 读取本地文件
    scripts/legacy-session-source-repair.mjs:242
    sourceBytes: readFileSync(join(sessionDir, source.name)).byteLength,
  • 写入本地文件
    scripts/legacy-session-source-repair.mjs:288
    copyFileSync(sourcePath, backupPath, fsConstants.COPYFILE_EXCL)
  • 写入本地文件
    scripts/legacy-session-source-repair.mjs:315
    writeFileSync(temporaryPath, encoded, { flag: 'wx' })
  • 删除本地文件
    scripts/legacy-session-source-repair.mjs:323
    rmSync(temporaryPath, { force: true })
  • 删除本地文件
    scripts/legacy-session-source-repair.mjs:327
    rmSync(temporaryPath, { force: true })
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-chat@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-model-selection@deepseek-ai/dsh-client-ui-primitives
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按模型切换团队头像
  • 自带厂商与岗位头像
  • 支持自定义美术目录
展开完整介绍(142 字)↓

DSH 插件(上游 NanmiCoder/dsh-agent-teams 的补充版):AgentTeams 多智能体团队协作 —— 自然语言组队、任务依赖 DAG、信箱通信、右侧栏树状监测;随包自带 15 厂商 × 10 岗位头像与 15 个厂商徽标,支持自定义美术目录与中文岗位名。

v1.0.12026-10-21
· 1.0.1 2026-10-21 · 独立的 AgentTeams 包与 Fish 聚合包及其仓库内十个成员在 1.0.1 版本上对齐。 · 保留 agent-teams 行 id、.agent-teams 状态目录、配置字段、工具名和 Host 兼容策略不变。 · 本版本不包含 AgentTeams 运行时行为变更。 · pnpm verify、pnpm typecheck 和 pnpm build 均通过。跳过一项符号链接测试,因为这台 Windows 主机不允许创建符号链接。
v1.0.02026-10-20
· 1.0.0 2026-10-19 · npm 包名从 dsh-agent-teams-fish 迁移到 @fish-under-sea/dsh-agent-teams-fish。 · 版本号 1.0.0 与 Fish 聚合包及其仓库内十个成员对齐。 · agent-teams 行 id、.agent-teams 状态目录、配置字段、工具名和 Host 兼容策略保持不变。 · 更新 bundle 入口、诊断包发现和隔离运行时测试解析器,适配作用域安装。 · 重写中英文公开 README,围绕当前能力、迁移和安全边界展开。上游署名与历史说明仍然保留。 · 这次只是打包迁移,不代表新合并了上游功能,也不代表修复了历史会话。
v0.7.32026-10-18
· v0.7.3:修复 DSH NEXT 2.0.19 上的成员派发与子会话可读性 发布日期:2026-10-18 · 问题 DSH Desktop NEXT 2.0.19-next 内置的宿主版本是 0.2.1-rc.2。在这个宿主上建队、批准、派任务都正常,但成员一启动就失败,日志里是两句话: agent-teams: member dispatch failed for verifier: Error: agent-teams: provider "spawn" cannot apply a member persona tool-session-query: ... session "eb3c1b69-..." contains event type "agent-teams/member-composition" (seq 4) unknown to this harness and not marked ignorable; refusing to interpret the log 两个问题彼此独立: 1. 宿主不再声明 persona / toolFilter 能力。 @deepseek-ai/dsh-subagent-spawn-in-process 的 capabilities 固定为 agentOptions / agentPreset / outputSchema / depthLimit,SubagentStartRequest 也没有 persona / toolFilter 字段 —— 成员人设与工具限制改由宿主预设(agent preset)负责,启动请求根本不接受这两项。旧代码按「宿主支持 persona」直接发起派发,于是被能力检查拒绝,成员一个也起不来。 2. 插件往会话里写宿主不认识的会话事件。 旧代码用 session.append('agent-teams/member-composition', ...) 存组合快照;0.2.1-rc.2 的事件目录里没有这个类型,事件也没标 ignorable,于是该子会话从此不可读(SessionFormatUnsupportedError),后续 send_message / 交付一律报 subagent "..." is unavailable。这不是显示层问题:日志本身被拒绝解释。 · 修复 · preset-only 宿主走组合安装路径。 能力位里没有 persona / toolFilter、但有 agentPreset 且宿主提供 startActivation 时,不再把它们塞进启动请求,改为在成员子上下文里自行安装: - childCtx.tools.restrict(toolFilter) 限制可用工具; - childCtx.systemPrompt.section({ name: 'deployment:persona-prefix', order: DEPLOYMENT_PERSONA_PREFIX, text: persona }) 写入成员人设。 宿主原生支持这两项能力的老版本仍走原路径,行为不变。 · team.json 成为冷恢复的唯一权威。 宿主的 continuable descriptor 在启动路径上不保存 persona / toolFilter,所以现在每个成员都把生效的 toolFilter 记进 team.json;冷恢复时从这份持久记录重建人设与过滤,并在成员第一个请求之前安装。没有过滤记录的成员拒绝恢复(has no durable composition snapshot),不会以「无限制工具」的形态偷跑;tools.restrict 失败同样中止派发。 · 不再写任何自定义会话事件。 删除 agent-teams/member-composition 的写入与 SessionEventMap 增强,组合状态只存在于插件自己的持久记录里。宿主日志保持可读。 · 兼容矩阵收录 0.2.1-rc.2。 compatibility.json 增加该宿主(track: preview),21 条 @deepseek-ai/dsh-* peer 白名单同步枚举;推荐宿主仍是 0.2.0-rc.2,未提升任何版本的支持等级。 · 回归覆盖 · 新增 scripts/member-composition.test.mjs(4 个用例,已挂进 verify:harness-contract):preset-only 宿主在首个请求前装好人设与精确过滤;restrict 失败必须中止派发而不是放行;冷恢复只从 team.json 重建且不追加会话事件;无过滤 / 损坏过滤的成员记录被
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
@fish-under-sea/dsh-agent-teams-fish 1.0.2 · 持久团队协作与 Fish 厂商美术 安装与兼容 dsh plugin --profile <profile> add @fish-under-sea/dsh-agent-teams-fish@1.0.2 @fish-under-sea/dsh-fish@1.0.2 也提供本插件,不要重复挂载。安装后重启 DSH。Node 要求 ^22.19.0 || >=24。推荐宿主 0.2.0-rc.2;0.2.1-rc.2 为预览支持。精确支持列表以 compatibility.json 为唯一事实源,不要用桌面应用版本推断核心版本。 功能 - 先规划后审批:成员编排、任务依赖 DAG、信箱通信与进度监测。 - 持久成员、失败处理、重派能力凭据、停机与恢复,遵守宿主路由和模型白名单。 - 可选质量门:需求、实现、验证、审查、修复及集成,审查与产物绑定。 - Fish 美术:十八厂商识别,厂商与岗位头像、自定义 artworkDir、商标徽标及队长模型路由头像。缺图按「厂商+岗位 → 厂商 → 岗位」降级,不代表每个厂商都有全部岗位图。 - 新宿主预设型成员组合在子上下文安装人设和工具限制;缺失或损坏的限制在派发前拒绝。
展开完整文档(README 剩余 1 节)
@fish-under-sea/dsh-agent-teams-fish

1.0.2 · 持久团队协作与 Fish 厂商美术

安装与兼容

dsh plugin --profile <profile> add @fish-under-sea/dsh-agent-teams-fish@1.0.2

@fish-under-sea/dsh-fish@1.0.2 也提供本插件,不要重复挂载。安装后重启 DSH。Node 要求 ^22.19.0 || >=24。推荐宿主 0.2.0-rc.2;0.2.1-rc.2 为预览支持。精确支持列表以 compatibility.json 为唯一事实源,不要用桌面应用版本推断核心版本。

功能

- 先规划后审批:成员编排、任务依赖 DAG、信箱通信与进度监测。
- 持久成员、失败处理、重派能力凭据、停机与恢复,遵守宿主路由和模型白名单。
- 可选质量门:需求、实现、验证、审查、修复及集成,审查与产物绑定。
- Fish 美术:十八厂商识别,厂商与岗位头像、自定义 artworkDir、商标徽标及队长模型路由头像。缺图按「厂商+岗位 → 厂商 → 岗位」降级,不代表每个厂商都有全部岗位图。
- 新宿主预设型成员组合在子上下文安装人设和工具限制;缺失或损坏的限制在派发前拒绝。

迁移与配置

旧 npm 名 dsh-agent-teams-fish 改为当前 scoped 名。更新直接依赖、bundle 名和覆盖行的 name,保留 id: agent-teams;不要同时加载两个来源。状态目录默认是工作区 .agent-teams,memberProvider 默认 spawn,自定义 artworkDir 使用本机路径。配置字段与团队数据格式不因本次包名整理改变。

先安全备份再迁移。成员使用真实模型额度;工具策略由部署方声明,不能以改名绕过。不会自动修复损坏日志、删除历史事件或重发中断任务。旧会话损坏应独立诊断。

开发检查

以下命令按需手动执行。GitHub 验证仅保留手动触发,不再由 push、PR 或发布触发;标签发布直接使用已提交的构建产物,不依赖测试矩阵。已存在的 npm 版本跳过重复发布。本地 prepublishOnly 自动构建和验证钩子已移除,发布前是否构建与检查由维护者决定。插件运行时的权限确认与可选质量任务规则不变。

pnpm install --frozen-lockfile
pnpm typecheck
pnpm build
pnpm verify

诊断器 dsh-agent-teams-doctor 只检查清单和依赖闭包,不证明运行行为或识别当前进程。真实宿主验收与 UI 检查需要另行执行。

来源与记录

基于 NanmiCoder/dsh-agent-teams (原作者 Relakkes / 程序员阿江). MIT. 保留上游 README、NOTICE 和历史发布说明。1.0.2 统一包名与版本,不表示已合并上游最新 HEAD。

- 1.0.2
- 1.0.1
- 1.0.0
- 历史记录
- NOTICE
预览分享卡片长什么样 ↓Fish-under-sea/dsh-agent-teams-fish
分享 · DeepSeek Harness Hub
Fish-under-sea/dsh-agent-teams-fish

DSH 插件(上游 NanmiCoder/dsh-agent-teams 的补充版):AgentTeams 多智能体团队协作 —— 自然语言组队、任务依赖 DAG、信箱通信、右侧栏树状监测…

回到顶部