把 JiuwenSwarm 当作 dsh 的大脑,同时让你其他的 dsh 插件照常工作。
31.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ThinkFlowLab/dsh-jiuwen-adapter该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 32 处,展示前 32 条)
- 写入本地文件src/plugin.js:46
try { appendFileSync(process.env.JIUWEN_TRACE_FILE, `${JSON.stringify({ t: new Date().toISOString(), up: Math.round(performance.now()), at: 'plugin-ap - 写入本地文件src/plugin.js:162
trace: (rec) => { const f = readConfig().traceFile; if (f) { try { appendFileSync(f, `${JSON.stringify({ t: new Date().toISOString(), up: Math.round(p - 读取本地文件src/session-store.js:167
if (!existsSync(this.path)) return - 读取本地文件src/session-store.js:169
const raw = JSON.parse(readFileSync(this.path, 'utf8')) - 写入本地文件src/session-store.js:209
mkdirSync(dirname(this.path), { recursive: true }) - 写入本地文件src/session-store.js:216
writeFileSync(tmp, `${JSON.stringify(payload, null, 2)}\n`, 'utf8') - 写入本地文件src/session-store.js:217
renameSync(tmp, this.path) - 读取本地文件src/multimodal.js:83
const st = statSync(path) - 读取本地文件src/multimodal.js:85
return `data:${mime};base64,${readFileSync(path).toString('base64')}` - 写入本地文件src/adapter.js:542
try { appendFileSync(file, `${JSON.stringify({ t: new Date().toISOString(), up: Math.round(performance.now()), ...rec })}\n`) } catch { } - 发起网络请求src/interaction.js:91
const outcome = await withTimeout(Promise.resolve(approval.request({ agent, toolName, reason, signal: own.signal })).catch(() => 'unavailable'), ms, ' - 读取本地文件src/mcp-bridge.js:32
const readJson = (f, d) => { try { return JSON.parse(readFileSync(f, 'utf8')) } catch { return d } } - 写入本地文件src/mcp-bridge.js:33
const writeAtomic = (f, data, mode = 0o600) => { const t = `${f}.${process.pid}.tmp`; writeFileSync(t, data, { mode }); renameSync(t, f) } - 写入本地文件src/mcp-bridge.js:33
const writeAtomic = (f, data, mode = 0o600) => { const t = `${f}.${process.pid}.tmp`; writeFileSync(t, data, { mode }); renameSync(t, f) } - 读取本地文件src/mcp-bridge.js:96
try { files = readdirSync(dir).filter(n => /^ep-\d+\.json$/.test(n)) } catch { return out } - 读取本地文件src/mcp-bridge.js:107
try { files = readdirSync(dir).filter(n => /^ep-\d+\.json$/.test(n)) } catch { return 0 } - 发起网络请求src/mcp-bridge.js:259
const races = [Promise.resolve(approval.request({ agent, toolName: name, reason: `JiuwenSwarm wants to run dsh tool ${name}`, ...(callerSignal ? { sig - 写入本地文件src/mcp-bridge.js:305
mkdirSync(e.stateDir, { recursive: true, mode: 0o700 }) - 写入本地文件src/mcp-bridge.js:348
mkdirSync(e.stateDir, { recursive: true, mode: 0o700 }) - 删除本地文件src/mcp-bridge.js:354
if (e?.epFile) { try { unlinkSync(e.epFile) } catch { } e.epFile = undefined } - 删除本地文件递归src/mcp-bridge.js:375
try { rmSync(e.stateDir, { recursive: true, force: true }) } catch { } - 读取本地文件src/mcp-bridge.js:436
try { st = statSync(dir) } catch { continue } - 删除本地文件递归src/mcp-bridge.js:449
try { rmSync(dir, { recursive: true, force: true }) } catch { } - 读取本地文件src/perm-ledger.js:38
const d = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件src/perm-ledger.js:44
mkdirSync(dirname(file), { recursive: true, mode: 0o700 }) - 写入本地文件src/perm-ledger.js:46
writeFileSync(tmp, `${JSON.stringify(d, null, 2)}\n`, { mode: 0o600 }) - 写入本地文件src/perm-ledger.js:47
renameSync(tmp, file) - 读取本地文件bin/jiuwen-mcp-proxy.mjs:22
const readJson = (f, d) => { try { return JSON.parse(readFileSync(f, 'utf8')) } catch { return d } } - 读取本地文件bin/jiuwen-mcp-proxy.mjs:27
try { names = readdirSync(stateDir).filter(n => /^ep-\d+\.json$/.test(n)) } catch { return [] } - 发起网络请求bin/jiuwen-mcp-proxy.mjs:40
const r = await fetch(ep.url, { method: 'POST', headers: { 'content-type': 'application/json', authorization: `Bearer ${ep.token}` }, body: JSON.strin - 写入本地文件bin/mock-openai.mjs:14
if (LOG) mkdirSync(dirname(LOG), { recursive: true }) - 写入本地文件bin/mock-openai.mjs:102
appendFileSync(LOG, `${JSON.stringify({ at: new Date().toISOString(), ...entry })}\n`)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-jiuwen-adapter
把 JiuwenSwarm 当作 dsh 的大脑,同时让你其他的 dsh 插件照常工作。
中文 · 快速上手 · 配置 · dsh 集成 · 更新日志
这是一个 Cordis 插件,在 ctx.llm 上注册 jiuwen 服务商。UI、会话、审批和插件仍由 dsh 负责。每一轮对话都发给 JiuwenSwarm Gateway,由它运行自己的智能体、工具和记忆。
flowchart LR
D["dsh + your plugins"] -->|ctx.llm · provider=jiuwen| A["jiuwen adapter"] -->|"WS chat.send"| G["JiuwenSwarm Gateway :19000"]
- 插件兼容性:docs/plugin-compat.md
30 秒快速上手
1. Brain: start JiuwenSwarm (put your model key in ~/.jiuwenswarm/config/.env)
uv pip install workswarm && jiuwenswarm-init && jiuwenswarm-start app
展开完整文档(README 剩余 1 节)
dsh-jiuwen-adapter 把 JiuwenSwarm 当作 dsh 的大脑,同时让你其他的 dsh 插件照常工作。 中文 · 快速上手 · 配置 · dsh 集成 · 更新日志 这是一个 Cordis 插件,在 ctx.llm 上注册 jiuwen 服务商。UI、会话、审批和插件仍由 dsh 负责。每一轮对话都发给 JiuwenSwarm Gateway,由它运行自己的智能体、工具和记忆。 flowchart LR D["dsh + your plugins"] -->|ctx.llm · provider=jiuwen| A["jiuwen adapter"] -->|"WS chat.send"| G["JiuwenSwarm Gateway :19000"] - 插件兼容性:docs/plugin-compat.md 30 秒快速上手 1. Brain: start JiuwenSwarm (put your model key in ~/.jiuwenswarm/config/.env) uv pip install workswarm && jiuwenswarm-init && jiuwenswarm-start app 2. Plugin: install into a dsh profile (dsh >= 0.2.1-rc.2: npm i -g @deepseek-ai/dsh@next) dsh plugin --profile web add "git+https://github.com/hsliuustc0106/dsh-jiuwen-adapter.git" 3. Make it the default model, then chat printf -- '- id: agent-default-model\n config:\n provider: jiuwen\n model: jiuwen-default\n' >> ~/.dsh/profiles/web/cordis.patch.yml dsh --profile web Mac 和 Linux 的分步指南:docs/quickstart.md。想不启动 Gateway 先试试,运行 npm run mock:gateway。 功能 | | 你能得到什么 | 默认 | | 🧠 Jiuwen 大脑 | dsh 的一轮对话就是一次 Gateway chat.send。智能体、团队模式、技能和记忆都在 Jiuwen 里运行 | 开启 | | 💬 实时活动 | 推理过程、🔧 工具调用、子任务和 token 用量实时流入 dsh | 开启 | | ✅ dsh 审批与提问 | Jiuwen 的权限提示、计划审批和 ask_user 都走 dsh 自己的对话框,没有答复时按拒绝处理 | 开启 | | 🔁 会话连续性 | dsh 会话映射到 Jiuwen 会话。首轮之后只发送新文本 | 开启 | | 🛟 断线恢复 | Gateway 在回答中途断开时,从历史记录恢复回复,并标记为已恢复 | 开启 | | 🧾 本地标题与压缩 | 标题和 /compact 在本地处理,不消耗 Jiuwen 轮次 | 开启 | | ⌨️ /jiuwen 命令 | 会话、模型、模式、技能、智能体、cron、MCP 等(列表) | 开启 | | 🖼️ 多模态 | 图片和文件部分作为 Jiuwen 媒体发送 | 开启 | | 🪪 系统提示词 → Jiuwen | injectSystem: full\|persona 在每个 Jiuwen 会话中发送一次宿主系统提示词(任意角色/配置档),仅在变更时重发,受 injectSystemMaxBytes 限制。injectSystemUpdate: diff(默认)只重发变更的段落(安全门控仍可能发送完整内容);可选的 hostSystemSectionsAllow/Deny 按标题过滤;可选的 hostProfile 对象可指定宿主的角色段落。需要完整编排器角色的宿主保留 full;普通 dsh 聊天可用 persona/off | 默认 full(off 关闭) | | 📚 宿主技能 → Jiuwen | Jiuwen 缺少的技能以索引形式(名称 + 描述)通过透传的 skill 工具按需加载,该工具不存在时则内联正文;跨重启做哈希门控,尽力做密钥脱敏,skillBodyMaxChars 限制长度并附截断标记 | 默认 index | | ⏹️ 新消息打断 | Jiuwen 轮次运行期间到达的用户消息会打断它(chat.interrupt),把期间到达的所有内容合并为一步,并附带说明重发,指出上一轮已中断(副作用不回滚)。先等待待处理的审批卡片(文档) | 默认 interrupt(onBusyMessage: queue / JIUWEN_ON_BUSY_MESSAGE=queue 为旧的等待完成行为) | | 🪜 完整轨迹 | trajectoryDetail: full 把 Jiuwen 工具调用、结果、子任务和计划步骤渲染为推理块中的 Markdown 步骤 | 默认 full(summary 关闭) | | 🔌 dsh 工具 → Jiuwen | 默认通过 MCP 向 Jiuwen 暴露所有 dsh 宿主/插件工具(toolAllowlist: '*';core = 受限 shell/file + skill + 会话查询集,外加 toolAllowlistExtra 和宿主声明的 passthrough: true),每次调用都需审批。每会话代理在会话结束或 mcpSessionIdleMs 后释放,启动时 GC 过期代理;仅在工具集变化时重连 | 开启,配合 hostSync | | 🎛️ 按配置档覆盖 | sessionOverrides 按宿主智能体预设(preset glob)设置模型 / 聊天模式 / 模板默认值;请求、目录和 /jiuwen mode 仍然优先 | 可选 | | 🧭 桥接 | 模型发现、类型化事件 | 可选 | | 🔄 宿主 → Jiuwen 同步 | 技能、MCP、模型、计划、workDir、标题、删除、目标、暂停、权限、fork、调度(文档) | 开启 | | 🩺 配置校验 | 未知键会给出「did you mean」提示,废弃键会给出警告。绝不抛错 | 开启 | 兼容性 其他 dsh 插件必须照常工作。适配器针对 完整 dsh 智能体运行时(dsh-agent、dsh-agent-loop、压缩、子代理、目标、计划模式、bash 沙箱、审批与用户提问)做过测试。同一段脚本化会话分别跑两次:一次加载 jiuwen,一次不加载。必须逐行匹配 兼容矩阵 的每一项,覆盖事件、工具调用、计划退出、目标轮次、自动压缩、子代理、bash、宿主事件计数、全局变量与加载失败。 | 组件 | 支持范围 | CI 中测试的版本 | | dsh | >=0.2.1-rc.2 <0.3.0 | 0.2.1-rc.2, 0.2.1-rc.5 | | Cordis | ^4.0.5 | 4.0.5 | | Node | >=22 | 22, 24 | | JiuwenSwarm | 0.2.x Gateway | 0.2.7(实机) | 只要 Cordis 应用带有 llm 服务,适配器同样可用(用法)。 文档 - 快速开始、配置、故障排查 - 在代码中使用与 Gateway 功能、Gateway RPC 覆盖范围 - dsh 集成、宿主 → Jiuwen 同步、测试、已知问题与测试日志 - 发布到 dsh 插件市场、架构 开发 npm run lint # node --check over index.js, src/, bin/, scripts/, test/ npm test # unit, mock-gateway and runtime suites npm run test:coverage # + coverage floors and the test-count baseline (what CI runs) bash scripts/guard-live.sh # box-side nightly live guard (real Jiuwen + plain dsh), see docs/testing.md npm run compat -- --diff # with vs. without jiuwen compat matrix (needs DSH_NM=<dsh node_modules>) npm run market:index # regenerate market/index.json 基于 Apache-2.0 许可发布。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ThinkFlowLab/dsh-jiuwen-adapter
把 JiuwenSwarm 当作 dsh 的大脑,同时让你其他的 dsh 插件照常工作。
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目