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

九问智能体接入 ThinkFlowLab/dsh-jiuwen-adapter

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

把 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 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 许可发布。
预览分享卡片长什么样 ↓ThinkFlowLab/dsh-jiuwen-adapter
分享 · DeepSeek Harness Hub
ThinkFlowLab/dsh-jiuwen-adapter

把 JiuwenSwarm 当作 dsh 的大脑,同时让你其他的 dsh 插件照常工作。

这是你的仓库?认领条目

回到顶部