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

递归语言模型内核 leinasi2014/dsh-rlm

DeepSeek Harness
leinasi201452 天前有提交已提供中文文档扫描:高危

为会话维护持久 Python 内核,可调用子智能体查询

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add leinasi2014/dsh-rlm
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · security
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 52 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-rlm(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 19:16:37

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件
查看扫描证据(共 28 处,展示前 26 条)
  • 读取本地文件
    src/runtime/kernel.ts:37
    return existsSync(flatBundle) ? flatBundle : nested
  • 执行外部命令表达式求值
    src/runtime/kernel.ts:236
    private spawn(): void {
  • 执行外部命令来自配置/变量
    src/runtime/kernel.ts:250
    ? spawn(this.launch.argv[0]!, this.launch.argv.slice(1), opts)
  • 执行外部命令来自配置/变量
    src/runtime/kernel.ts:251
    : spawn(this.config.python, [KERNEL_PATH], opts)
  • 写入本地文件
    src/runtime/kernel.ts:665
    await renameAsync(temp, this.snapshotPath)
  • 删除本地文件
    src/runtime/kernel.ts:670
    try { await rmAsync(temp, { force: true }) } catch { }
  • 读取本地文件
    src/runtime/kernel.ts:935
    if (!this.snapshotPath || !existsSync(this.snapshotPath)) {
  • 读取本地文件
    src/runtime/kernel.ts:938
    const payload = await readFileAsync(this.snapshotPath)
  • 执行外部命令来自配置/变量
    src/runtime/kernel.ts:1179
    killer = spawn(resolveTaskkill(), ['/pid', String(pid), '/T', '/F'], {
  • 写入本地文件
    src/runtime/session.ts:65
    mkdirSync(this.durableRoot, { recursive: true })
  • 读取本地文件
    src/runtime/session.ts:94
    return lstatSync(file)
  • 读取本地文件
    src/runtime/session.ts:200
    entries = readdirSync(this.durableRoot)
  • 读取本地文件
    src/runtime/session.ts:208
    info = lstatSync(full)
  • 删除本地文件
    src/runtime/session.ts:215
    try { rmSync(full, { force: true }) } catch { }
  • 写入本地文件
    src/runtime/session.ts:264
    await renameAsync(temp, target)
  • 删除本地文件
    src/runtime/session.ts:265
    try { await rmAsync(legacyMeta, { force: true }) } catch { }
  • 删除本地文件
    src/runtime/session.ts:277
    try { await rmAsync(temp, { force: true }) } catch { }
  • 读取本地文件
    src/runtime/session.ts:295
    container = readFileSync(target)
  • 读取本地文件
    src/runtime/session.ts:328
    const rawMeta = readFileSync(legacyMetaPath)
  • 删除本地文件
    src/runtime/session.ts:352
    rmSync(this.durablePath(sessionKey, '.checkpoint.json'), { force: true })
  • 删除本地文件
    src/runtime/session.ts:353
    rmSync(this.durablePath(sessionKey, '.meta.json'), { force: true })
  • 写入本地文件
    src/runtime/session.ts:367
    writeFileSync(this.checkpointPath(sessionKey), durable)
  • 删除本地文件
    src/runtime/session.ts:390
    if (this.checkpointRoot) rmSync(this.checkpointPath(sessionKey), { force: true })
  • 读取本地文件
    src/runtime/session.ts:692
    if (existsSync(p)) {
  • 读取本地文件
    src/settings.ts:50
    if (!statSync(candidate).isFile()) return false
  • 读取本地文件
    src/settings.ts:51
    if (process.platform !== 'win32') accessSync(candidate, fsConstants.X_OK)
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-session@deepseek-ai/dsh-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 托管上下文
  • 有界子代理查询
  • 快照恢复

DeepSeek Harness 插件:为 rlm_eval 提供按会话常驻的 Python 内核——托管上下文、有界子代理查询、快照恢复、沙箱启动,以及跨主机持久检查点(M1-M13 已验收)。

README

由 DeepSeek 最新模型翻译生成
dsh-rlm dsh-rlm 是 DeepSeek Harness 的最小 Recursive Language Model(RLM)插件。它只向 DSH Agent 提供一个 rlm_eval 工具,并为当前 Session 维护一个持久 Python namespace。 Python cell 支持 top-level await,并可调用 await rlm_query(prompt)。 宿主通过官方 one-shot DSH Subagent 完成查询,把可见文本返回 Python,然后让当前 cell 继续执行。 状态:M1-M13 均已实现、审查并通过 DSV4-FVE 干净 Profile 验证。 参见项目状态和里程碑。 dsh-rlm 英文架构图 交互式英文架构图位于 docs/dsh-rlm-architecture.html。
展开完整文档(README 剩余 1 节)
dsh-rlm

dsh-rlm 是 DeepSeek Harness 的最小 Recursive Language Model(RLM)插件。它只向 DSH Agent 提供一个 rlm_eval 工具,并为当前 Session 维护一个持久 Python namespace。

Python cell 支持 top-level await,并可调用 await rlm_query(prompt)。
宿主通过官方 one-shot DSH Subagent 完成查询,把可见文本返回 Python,然后让当前 cell 继续执行。

状态:M1-M13 均已实现、审查并通过 DSV4-FVE 干净 Profile 验证。
参见项目状态和里程碑。

dsh-rlm 英文架构图

交互式英文架构图位于 docs/dsh-rlm-architecture.html。

目标

V1 刻意保持很小:

DSH Agent
-> rlm_eval(code)
-> 当前 Session 的持久 Python kernel -> await rlm_query(prompt) -> one-shot DSH Subagent(禁用 rlm_eval) -> 可见文本返回 Python -> cell 继续执行 -> 后续 rlm_eval 复用相同 globals

DSH Agent Loop 和官方 Session log 始终是权威。Python 不会成为第二个 Agent Loop,也不会接收 DSH Provider 或 Session 对象。

已实现

- 一个 Host-only 函数插件和唯一模型工具 rlm_eval;
- 每个 DSH Session 一个持久 Python 进程和 globals;
- top-level await 与尾表达式结果;
- JSON-lines 宿主/kernel 协议;
- 通过 one-shot DSH Subagent 实现 await rlm_query(prompt);
- 通过 toolFilter: { deny: ['rlm_eval'] } 阻止子智能体递归;
- 明确的 syntax、runtime、protocol、timeout、cancel 与 process 错误;
- stdout 和尾表达式结果的字节上限;
- 每 cell query 次数限制;
- timeout/cancel 后驱逐 kernel 并重建干净 namespace;
- 插件 teardown 释放所拥有的 Python kernel;
- M3 托管上下文:可选 contextPath 由 kernel 读取为一个有界、严格 UTF-8 的常规文件,并原子发布为受保护的 context;
- M4 递归子 RLM:官方深度有界子会话,内核隔离;
- M5 快照恢复:属主内核丢失后可选恢复(JSON 安全全局 + 上下文);
- M6 手动重置:经 rlm_eval({ reset: true }) 的 Session 本地 FIFO 重置;
- M7 批量查询:有界有序并发 rlm_query_batched,失败前先排空已准入项;
- M8 延续派生:官方可延续子会话 + 父收件箱投递;
- M9 沙箱内核:kernelSandbox: auto|require|off,经 ctx.sandbox + ctx.sandboxPolicy,协议 v4 宿主私有分块 M5 checkpoint,工作区 cwd;
- M10 跨主机持久化:可选 durableRoot 原子引用,新 runtime 恢复,版本不匹配类型化失败;
- M11 令牌护栏:guardQueryTokens / maxQueryTokensPerCell 读取官方
tokenMeter.measure(...).baseline.usage 观测(不发明令牌);
- M13 GUI 插件配置:官方 rlm settings 命名空间 + Settings > Plugins 中的 RlmSettingsCard(en/zh、staged 草稿、重启生效);
- M12 Job 消费者:官方 ctx.jobs rlm 控制器 + createRlmJobSpec / startRlmJob (无第二 Agent loop;swarm 保持触发式);
- 离线测试和设门的真实干净 Profile 冒烟测试。

下一里程碑与未实现

里程碑路线

已在 main 上验收:M1-M13(见里程碑)。
未来扩展 中的剩余行均为条件触发:

- 公共 RlmService 或 Kernel Provider 框架(仅在出现第二个消费者时);
- container 或 remote kernel(B 路线——独立契约与触发);
- 超出 M12 Job 消费者的 swarm 编排(需具名消费者 + 端到端场景)。

可靠性缺陷与条件扩展已在项目状态中分开记录。
GitHub Issues 是实时工作权威。

安全模型

当前 Python kernel 是受信任的本地执行,不是 sandbox。rlm_eval 可以用 DSH 宿主用户权限读取/修改文件并启动进程。不要为不可信用户、prompt 或 workspace 启用本插件。

Python 子进程只接收固定的安全名白名单,而不是完整宿主环境。Windows 保留 PATH、SystemRoot、WINDIR、COMSPEC、PATHEXT、SYSTEMDRIVE、 USERPROFILE、TEMP、TMP;POSIX 保留 PATH、HOME、TMPDIR、TEMP、 TMP、LANG 和精确的标准 LC_ 类目名。两个平台都额外保留公共 Python 启动项 PYTHONIOENCODING、PYTHONUTF8、PYTHONUNBUFFERED、PYTHONPATH。
不支持任意环境变量透传;自定义 python 命令也使用同一过滤环境。代理变量、 VIRTUAL_ENV/CONDA_、PYTHONHOME、LD_LIBRARY_PATH、DSH_ 与凭据类变量一律不转发。这是凭据卫生,不是 sandbox:受信任的 Python 仍可读取宿主用户可读文件、访问网络、启动进程,也可能读取磁盘上的凭据文件。参见 SECURITY.md 与 Issue #7。

从 M9 起,kernelSandbox 可将同一可信执行约束到 DSH Session 沙箱策略:auto(默认)在加载的 Profile 挂载时使用 ctx.sandbox + ctx.sandboxPolicy,require 失败关闭,off 保留旧的可信本地派生。约束模式下内核在 Session 工作区根目录启动,文件效果与 DSH bash/fs 工具相同遵循 read-only / workspace-write / danger-full-access 阶梯;Windows ACL 报告部分强制,读取与网络仍为同世界不约束。

环境要求

- Node.js ^22.19.0 或 >=24;
- pnpm 9.15.9;
- PATH 中可用的 Python 3.11+;
- 一个兼容的 DeepSeek Harness checkout/Profile;
- 已配置的 DSH one-shot Subagent Provider,默认名称为 spawn。

本地开发

pnpm install --frozen-lockfile
git config --local core.hooksPath .githooks
pnpm check:memory
pnpm typecheck
pnpm build
pnpm test

两个真实 Profile 测试会安装新 Profile 并调用真实模型,因此默认设门。当前测试要求本仓库位于 DeepSeek Harness checkout 的 packages/.external/dsh-rlm:

RLM_LIVE_SMOKE=1 DSH_HOME=/path/to/configured/dsh-home \
node --test tests/profile-smoke.test.ts

不要把 live smoke 指向未验证或用户自有的目标。它会创建并删除一个隔离的临时 DSH home。完整 settings.yaml 以及存在时的完整 .credentials.yaml 会从给定 DSH_HOME 逐字节复制;仅在可弃置副本中,顶层 agent-default-model 块会被确定性改写为 provider vllm、model DeepSeek-V4-Flash-Vision-Exp,使隔离运行使用显式 vLLM/PTC 路由而非 ambient 默认模型。必要时可用 RLM_LIVE_PROVIDER 和 RLM_LIVE_MODEL 覆盖。对外部 worktree,可用 RLM_DSH_REPO_ROOT 把测试指向权威 harness checkout(解析为绝对路径);未设置时沿用包内三上级默认,若该根缺少 apps/cli/src/bin.ts,测试会以有界、非机密的信息快速失败。ambient settings 与凭据从不被改写,运行后会断言其逐字节未变。临时配置和 Session logs 绝不能提交或上传。

安装到 DSH Profile

先构建本 checkout,再从兼容的 DeepSeek Harness 根目录执行:

pnpm dsh plugin --profile add -w /absolute/path/to/dsh-rlm

然后在 Profile 的 Cordis composition 中启用:

- insert:
- id: rlm
name: dsh-rlm
config:
enabled: true
provider: spawn
python: python
timeout: 30000
maxStdout: 65536
maxResult: 65536
maxQueries: 16
maxContextBytes: 67108864

以上即 schema 默认值;provider 默认为 spawn。六个运行时设置均为可选,由唯一 Config schema 校验:

| 设置 | 默认 | 合法范围/单位 |
| python | python | 非空解释器命令;经白名单 PATH 或绝对路径解析 |
| timeout | 30000 | 整数 1000..3600000 ms(每次 eval) |
| maxStdout | 65536 | 整数 1024..262144 UTF-8 字节(cell stdout) |
| maxResult | 65536 | 整数 1024..262144 UTF-8 字节(cell 结果) |
| maxQueries | 16 | 整数 1..4096(每 cell 的 rlm_query 次数) |
| maxContextBytes | 67108864 | 整数 1048576..1073741824(一个托管 UTF-8 上下文文件的字节数) |
| snapshotRecovery | false | 布尔;属主内核丢失后恢复 JSON 安全全局 + 上下文(M5) |
| kernelSandbox | auto | auto / require / off(M9) |
| durableRoot | (未设) | 跨重启 checkpoint 引用的宿主绝对目录(M10) |
| guardQueryTokens | false | 启用每 cell 已观测令牌护栏(M11) |
| maxQueryTokensPerCell | 0 | 正整数上限;0 禁用(M11) |

本仓库尚未发布 npm registry 包;这里是真实本地包安装。

M9-M12 操作指南

以下配置在一个 Profile 中启用所有里程碑;所有键均为可选,未注明时即 schema 默认值。

- insert:
- id: rlm
name: dsh-rlm
config:
enabled: true
provider: spawn
kernelSandbox: auto # M9:auto | require | off snapshotRecovery: true # M5/M10:属主内核丢失后 checkpoint durableRoot: /absolute/host/durable # M10:仅引用,宿主持有 guardQueryTokens: true # M11:每 cell 已观测令牌护栏 maxQueryTokensPerCell: 1000000 # M11:已观测上限,0 = 关闭 timeout: 30000

M9:沙箱内核

kernelSandbox 决定 Session Python 进程的启动方式:

- auto(默认):加载的 Profile 挂载 ctx.sandbox 与 ctx.sandboxPolicy 时按 Session 策略约束内核(base 默认 workspace-write);否则保留旧的可信派生。它绝不静默绕过坏掉的沙箱——runner 失败即失败关闭。
- require:官方沙箱服务缺失或不可用时,在任何 Python 启动前失败。
- off:可信本地派生,与 M1-M8 完全一致。

约束模式下的可观察行为:

- 内核以 cwd = Session 工作区根目录启动,Python 相对路径解析落在工作区内。
- 文件效果与 DSH bash/fs 工具同一阶梯:workspace-write 下工作区内写成功、工作区外写被拒(Windows 请用封闭 ACL 目标验证)、read-only 拒绝写、 danger-full-access 绕过约束。
- M5 checkpoint 以有界分块协议帧(协议 v4)传输并保持宿主私有;内核不写沙箱可见的 checkpoint。
- Windows 使用 ACL 受限令牌 runner,报告 partial 强制(Everyone/硬链接边界仍存在);读取与网络保持同世界不约束。

在 cell 中验证:

import os
open('inside_ws.txt', 'w').write('ok') # workspace-write 下成功
os.getcwd() # == Session 工作区根目录

M10:跨主机持久化

配置 snapshotRecovery: true 与绝对 durableRoot 后,每次提交 checkpoint 时宿主原子发布引用对:

/.checkpoint.json
/.meta.json

- 引用有界(每 Session job_read -> job_kill。

- createRlmJobSpec 返回惰性 spec;只有官方 registry 调用 run() (ctx.jobs.start)时才启动 cell。从未 start 的 job 不泄漏内核/工作。
- cancel 映射到按 Session 内核 dispose;job 以 killed 结算;readOutput 返回有界 stdout/result。
- 无第二 Agent loop、调度器、队列、Workflow 引擎、Storage 或 UI 标记;swarm 保持具名消费者 + 端到端场景条件。

实时验证前的边界检查

- Profile 冒烟前必须先 pnpm build:package.json 的 main 加载 lib/index.mjs 而非 src。
- Cordis 对直接读取的服务要求 inject;插件通过非严格 ctx.get 读取 jobs / sandbox / sandboxPolicy / tokenMeter,因此缺少任一服务的 Profile 仍可加载。
- 各里程碑实时验收: bash
RLM_LIVE_SMOKE=1 DSH_HOME=/path/to/configured/dsh-home \
RLM_LIVE_PROVIDER=dsv4f-local RLM_LIVE_MODEL=DeepSeek-V4-Flash-Vision-Exp \
node --test --test-name-pattern "M9 Issue#42|M10 Issue#44|M11 Issue#46|M12 Issue#48" \
tests/profile-smoke.test.ts

M13:设置 UI(Settings > Plugins)

- 在 DSH Web UI 打开 Settings > Plugins > Plugin configuration,dsh-rlm 显示自己的卡片(Core / Bounded I/O / Recovery & Sandbox / Guard 四个 Tab): 14 个用户可配置字段、staged 草稿、每字段 override 徽标、reset-to-composition、 Save/Saving/Saved/Failed 状态。
- 保存于重启后生效(applies: restart),与 dsh-agent-swarm Team 卡片一致,需重启 DSH。
- CLI 与 UI 共享同一权威:运行时读取 { ...compositionDefaults, ...userSettings }; cordis.patch.yml 仍是 composition 层,两种方式得到同一份规范化配置。
- i18n:en 回退 + zh,命名空间 rlm.settings。

示例

调用 Agent 可以带一个绝对 contextPath,并运行如下 cell: python
draft = await rlm_query("Summarize the key evidence in this context:\n" + context)
draft

同一 Session 的后续 cell 可以复用变量: python
revision = await rlm_query("Critique and improve this draft:\n" + draft)
revision

中文文档

- 核心架构
- 项目状态
- 审查结论
- GitHub Issue 修复规范
- 开发记忆总档案
- 里程碑
- 目录与语言边界
- 参考项目取舍
- 后续扩展
- M3 托管上下文
- M4 递归子 RLM
- M3/M4 开发契约
- 贡献指南
- 安全策略

参考来源

仓库记录的是固定来源身份,而不是上游源码副本:

- PrimeIntellect-ai/prime-agent@6179a608f394d0858d463e40d648df0def6dbb7a;
- alexzhang13/rlm@854e688fbba9d8f8989e3da9989812e4b6dfe270。

参见 ref/README.md。被忽略的 ref//source/ checkout 是本地、只读审查证据,不随仓库发布。

License

MIT。本插件源自采用 MIT License 的 DeepSeek Harness checkout,保留上游版权声明;参见 NOTICE。
预览分享卡片长什么样 ↓leinasi2014/dsh-rlm
分享 · DeepSeek Harness Hub
leinasi2014/dsh-rlm

为会话维护持久 Python 内核,可调用子智能体查询

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部