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

智能体循环引擎 snow-The/dsh-busyloop

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

为插件接入多轮对话与工具调度的智能体循环

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

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

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

状态速览

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

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

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
  • 读取密钥环境变量
    dist/index.js:29
    var KEY_FILE = process.env.DSH_BUSYLOOP_KEYS ?? join(DSH_HOME, "busyloop-keys.json");
  • 读取本地文件
    dist/index.js:33
    if (!existsSync(KEY_FILE)) return [];
  • 读取本地文件
    dist/index.js:34
    const raw = JSON.parse(readFileSync(KEY_FILE, "utf8"));
  • 读取本地文件
    dist/index.js:47
    if (!existsSync(ACTIVE_FILE)) return void 0;
  • 读取本地文件
    dist/index.js:48
    return JSON.parse(readFileSync(ACTIVE_FILE, "utf8"))?.alias;
  • 读取本地文件
    dist/index.js:101
    text = readFileSync2(file, "utf8");
  • 写入本地文件
    dist/index.js:138
    mkdirSync2(dirname(file), { recursive: true });
  • 写入本地文件
    dist/index.js:140
    writeFileSync2(tmp, `${JSON.stringify(next, null, 2)}
  • 写入本地文件
    dist/index.js:142
    renameSync(tmp, file);
  • 读取本地文件
    dist/index.js:675
    const creds = yaml.load(readFileSync3(credentialsPath(), "utf8"));
  • 发起网络请求
    client.js:28
    const response = await fetch(ROUTE_PREFIX + path);
  • 发起网络请求
    client.js:32
    const response = await fetch(ROUTE_PREFIX + path, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DSH 智能体循环引擎:宿主 LLM 适配层,加上基于宿主上下文的循环骨架(busyloop:靠能力驱动,不走 codex 那套)

README

由 DeepSeek 最新模型翻译生成
dsh-busyloop DSH agent-loop 引擎:宿主 LLM 通道(官方 ctx.llm)+ 轻量 loop 骨架 + 工具表注入。 能力等价,范式不同:装上 busyloop,dsh 就有一样的智能体循环能力(LLM 多轮 + 工具调度);但不保证像 codex 一样工作(AGENTS.md/工具协议/会话格式)—— 那是 codexstyle 层的事。 架构(三件套) dsh-busyloop ──────────── 引擎(能力:LLM 适配器 + loop + 宿主工具调度) ├── dsh-busyloop-codex ──── 范式①:桥接 codex CLI(外包) └── dsh-busyloop-codexstyle ─ 范式②:自研 codex 风格(规划中) 设计原则 - LLM 适配器不手刻、不外接:直接消费宿主 ctx.llm(@deepseek-ai/dsh-llm 的 LlmRuntime),类型来自官方包,运行时由宿主提供 - 不造独立运行时:全部活在 dsh 宿主内,发布物在「纯 dsh + 官方包」环境可跑(bundle 自包含) - 工具表注入:宿主 ctx.tools 只读不可枚举,loop 的工具由调用方提供(schema + execute) 用法
展开完整文档(README 剩余 1 节)
dsh-busyloop

DSH agent-loop 引擎:宿主 LLM 通道(官方 ctx.llm)+ 轻量 loop 骨架 + 工具表注入。

能力等价,范式不同:装上 busyloop,dsh 就有一样的智能体循环能力(LLM 多轮 + 工具调度);但不保证像 codex 一样工作(AGENTS.md/工具协议/会话格式)—— 那是 codexstyle 层的事。

架构(三件套)

dsh-busyloop ──────────── 引擎(能力:LLM 适配器 + loop + 宿主工具调度) ├── dsh-busyloop-codex ──── 范式①:桥接 codex CLI(外包) └── dsh-busyloop-codexstyle ─ 范式②:自研 codex 风格(规划中)

设计原则

- LLM 适配器不手刻、不外接:直接消费宿主 ctx.llm(@deepseek-ai/dsh-llm 的 LlmRuntime),类型来自官方包,运行时由宿主提供
- 不造独立运行时:全部活在 dsh 宿主内,发布物在「纯 dsh + 官方包」环境可跑(bundle 自包含)
- 工具表注入:宿主 ctx.tools 只读不可枚举,loop 的工具由调用方提供(schema + execute)

用法

import { createBusyLoop, hostLlm } from '@snow-the/dsh-busyloop'

// 插件内: const engine = createBusyLoop(ctx) // ctx.llm 宿主服务 const result = await engine.run({ provider: 'deepseek', model: 'deepseek-chat', prompt: '东京天气如何?用 get_weather 工具查询后一句话回答',
tools: [weatherTool],
onEvent: (ev) => console.log(ev), // turn / tool / done
})
// { output, turns, toolCalls, usage, finish }

纯库方式:hostLlm(ctx.llm) → runBusyLoop(llm, options)。

HTTP 端点(经 ctx.webServer 注册)

宿主一旦提供 webServer(dsh-web-app 就会),以下端点即生效:

| 端点 | 方法 | 说明 |
| /api/busyloop/health | GET | 引擎存活 + hostLlm 状态 |
| /api/busyloop/providers | GET | 宿主已注册的 LLM provider 列表 |
| /api/busyloop/channels | GET | 已配置的通道 |
| /api/busyloop/channel | POST | 新增/修改通道 |
| /api/busyloop/credentials | GET | 凭据来源(不回显密钥) |
| /api/busyloop/credential | POST | 写入凭据 |
| /api/busyloop/test | POST | 通道连通性测试 |

历史更正。 本 README 早先写着「官方宿主当前未注入 ctx.http.mount,这些端点默认不暴露(404)」——那是当时的真实情况,但已不再成立,而且端点名也早已改前缀。

根因是 ctx.http 不是 DSH 的服务(官方 ctx 服务面里没有它),所以那条路由从来没挂上过,还白背了一个 hono 依赖。现在改为官方的 ctx.inject(['webServer'], …),并且:

- 不能用 ctx.get('webServer') —— 它是时点快照;webServer 若后挂载,你就永远漏注册,且不报错。
- 每个端点先过 Host/Origin + 浏览器鉴权围栏(connection.requestRejection),伪造请求 403、匿名请求 401;围栏读不到时失败关闭(503),不会静默放行。

测试金字塔(14 个测试)

1. 单元/集成(npm test,node --test 串行):fake chunks(不碰真模型)——多轮循环、工具参数解析、结果回填、maxTurns 截断、未知/抛错工具、providers/health 端点、sessionId 透传
2. 宿主解析链验证:dist 放入宿主 node_modules 树加载(官方包全部宿主解析)
3. 真机 E2E(node e2e/e2e-host.mjs,手动运行,需要真 API key):真实 DeepSeekAdapter + 真实模型(纯对话 + 多轮工具调用,cacheReadTokens 命中验证)

发布

pnpm build # tsc 类型 + esbuild bundle(官方包 external,宿主提供)
npm test # node --test
npm publish # GitHub Packages(@snow-the 下同款流程)

安装(重要)

1. dependencies 与 bundles 都要加:只在 dependencies 里加会被 pnpm 装入 node_modules 但不会被挂载(loader 只应用 bundles 里声明的包的 bundle patch);必须同时把 @snow-the/dsh-busyloop 加进 dsh.profile.bundles,它的 cordis.patch.yml 才会生效、busyloop_run 工具才会注册。
2. 宿主包不声明为运行时依赖:@deepseek-ai/dsh-tools 是宿主提供的包(经 dsh-base bundle 装入),本插件只把它声明为 peerDependency。把它放进 dependencies 会把 dsh-tools 拉进配置档的依赖图,在「安装后立即重启」的窗口期可能让宿主工具调度器(Symbol 键)解析到第二个模块实例,导致首次工具调用崩溃(Cannot read properties of undefined (reading 'prepare'))——这是 0.1.6 的教训(2026-08-22 崩溃),0.1.7 起改为 peer 声明。

3. 重启时序:pnpm install 必须完整跑完(等到提示 Done)再重启 dsh web;不要在安装进行中重启。
预览分享卡片长什么样 ↓snow-The/dsh-busyloop
分享 · DeepSeek Harness Hub
snow-The/dsh-busyloop

为插件接入多轮对话与工具调度的智能体循环

回到顶部