面向个人用户、安装在 dsh 中的 Chat Memory+Skill 自动演化插件
31.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lsmax-72/dsh-rsi该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 18 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-rsi(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 09:36:31
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 29 条)
- 删除本地文件递归build/build.mjs:8
await rm(join(root,'lib'),{recursive:true,force:true}); - 写入本地文件build/build.mjs:32
await writeFile(join(root,'lib/client.js'),client.outputFiles[0].contents); - 读取本地文件build/verify-core.mjs:6
const manifest = JSON.parse(await readFile(join(root, 'vendor/source-manifest.json'), 'utf8')).core; - 读取本地文件build/verify-core.mjs:8
const bytes = await readFile(join(root, 'vendor/core/src', entry.path)); - 读取本地文件build/verify-panel.mjs:4
const manifest=JSON.parse(await readFile(new URL('../source-manifest.json',root),'utf8')).panel; - 读取本地文件build/verify-panel.mjs:5
for(const entry of manifest.files){const bytes=await readFile(new URL(entry.path,root));if(createHash('sha256').update(bytes).digest('hex')!==entry.sh - 发起网络请求src/api/contract.ts:17
const result=await ctx.remote.rsi.request(operation,payload); - 写入本地文件src/core/local-core.ts:31
await mkdir(dataDir, { recursive: true }); - 发起网络请求src/index.ts:14
@Remote async request(operation:string,payload:any) { await this.ready; return this.runtime.request(parseOperation(operation),parsePayload(payload)); - 写入本地文件src/runtime/runtime.ts:60
const temporary=recordPath+'.tmp';await writeFile(temporary,JSON.stringify(record)+'\n',{mode:0o600});await rename(temporary,recordPath); - 写入本地文件src/runtime/runtime.ts:60
const temporary=recordPath+'.tmp';await writeFile(temporary,JSON.stringify(record)+'\n',{mode:0o600});await rename(temporary,recordPath); - 写入本地文件src/runtime/runtime.ts:69
const root = join(this.directory,'learning-runs'); await mkdir(root,{ recursive:true }); - 写入本地文件src/runtime/runtime.ts:71
await writeFile(recordPath,JSON.stringify(record)+'\n',{flag:'wx',mode:0o600}); - 删除本地文件递归src/runtime/runtime.ts:114
const invalid=!!this.state.get(`profile-invalid:${scope}`);if(invalid)await rm(join(core.directory,'profile'),{recursive:true,force:true}); - 删除本地文件递归src/runtime/runtime.ts:118
const globalInvalid=!!this.state.get('profile-invalid:global');if(globalInvalid)await rm(join(global.directory,'profile'),{recursive:true,force:true}) - 删除本地文件递归src/runtime/runtime.ts:465
await rm(core.directory,{recursive:true,force:true}); - 删除本地文件递归src/runtime/runtime.ts:476
await rm(join(core.directory,'profile'),{recursive:true,force:true});this.state.set(`profile-invalid:${scope}`,Date.now()); - 读取本地文件src/runtime/state.ts:15
const path = realpathSync(resolve(cwd));if(!statSync(path).isDirectory())throw new Error('工作区必须是目录'); - 写入本地文件src/runtime/state.ts:36
mkdirSync(directory, { recursive: true, mode: 0o700 }); - 写入本地文件src/runtime/state.ts:38
try {writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600});} catch(error:any) { - 读取本地文件src/runtime/state.ts:40
const pid=Number(readFileSync(this.lock,'utf8').split(':')[0]); - 写入本地文件src/runtime/state.ts:42
unlinkSync(this.lock);writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600}); - 删除本地文件src/runtime/state.ts:42
unlinkSync(this.lock);writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600}); - 读取本地文件src/runtime/state.ts:86
close() { this.db.close();if(readFileSync(this.lock,'utf8')===this.token)unlinkSync(this.lock); } - 删除本地文件src/runtime/state.ts:86
close() { this.db.close();if(readFileSync(this.lock,'utf8')===this.token)unlinkSync(this.lock); } - 读取本地文件src/skills/resources.ts:7
const root=await realpath(base.path),files:any[]=[];let bytes=0; - 读取本地文件src/skills/resources.ts:9
for (const entry of await readdir(path,{withFileTypes:true})) { - 读取本地文件src/skills/resources.ts:11
const absolute=join(path,entry.name),stat=await lstat(absolute); - 读取本地文件src/skills/resources.ts:17
const content=await readFile(absolute);files.push({path:local,content:content.toString('base64'),encoding:'base64',is_executable:!!(stat.mode&0o111)})
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-api-gateway@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-skill@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 记录聊天记忆
- 技能自动演化
README
由 DeepSeek 最新模型翻译生成dsh-rsi
让 Coding Agent 从历史任务中积累可复用的 Memory 与 Skill,并在后续会话中按需使用。
dsh-rsi 是面向 DeepSeek Harness(dsh) 的单用户、本地自动学习插件。它不改变 dsh 核心 Agent 执行循环,采集真实会话与工具执行轨迹,异步提炼两类长期资产:
- Chat Memory:保存事实、用户偏好、项目约定和长期场景,支持更新、冲突处理与检索。
- Skill:从任务执行经验中提炼可复用的方法,支持创建、增量修订、版本管理和按需加载。
目标不是让模型自行修改权重或插件源码,而是实现外部记忆和技能资产的持续演化。
项目状态:开发中。
展开完整文档(README 剩余 1 节)
dsh-rsi 让 Coding Agent 从历史任务中积累可复用的 Memory 与 Skill,并在后续会话中按需使用。 dsh-rsi 是面向 DeepSeek Harness(dsh) 的单用户、本地自动学习插件。它不改变 dsh 核心 Agent 执行循环,采集真实会话与工具执行轨迹,异步提炼两类长期资产: - Chat Memory:保存事实、用户偏好、项目约定和长期场景,支持更新、冲突处理与检索。 - Skill:从任务执行经验中提炼可复用的方法,支持创建、增量修订、版本管理和按需加载。 目标不是让模型自行修改权重或插件源码,而是实现外部记忆和技能资产的持续演化。 项目状态:开发中。 核心能力 | 能力 | 实现方式 | | 真实轨迹采集 | 通过 dsh 会话事件读取用户/助手消息、工具调用及结果,过滤插件自身会话和重复历史 | | 分层 Chat Memory | L0 原始对话 → L1 原子记忆 → L2 项目/主题场景 → L3 长期画像;L1 支持去重、修正和合并 | | Skill 增量演化 | Review Agent 结合当前任务轨迹与已有 Skill,决定跳过、新建、局部修改或整体更新 | | 渐进式资产消费 | Memory 混合检索并按预算注入;Skill 经官方 Provider 暴露,正文和资源按需加载 | | 本地治理与恢复 | 工作区/Global 隔离、持久化学习任务、阶段恢复、Skill 版本及回滚、后台调用额度 | | 集成管理界面 | 在 dsh 插件详情页查看 Memory、Skill、来源、版本、学习状态和成本 | 工作原理 dsh-rsi 学习与消费闭环 1. 采集:保留真实任务证据 插件监听 dsh 的 session/event,在任务轮次结束后读取已持久化的会话事件。Memory 主要使用用户与助手正文;Skill Review 额外使用工具调用、执行结果及结束原因。后台学习任务写入 SQLite,并通过来源游标与唯一任务 ID 防止重复入队。 2. 学习:Memory 与 Skill 分别演化 Memory: L1 从对话中提炼原子记忆,使用已有记忆检索与 LLM 判断执行 Store / Skip / Update / Merge;L2 异步整理相关场景,L3 在满足触发条件时更新长期画像。底层 L1 被纠正后,旧的派生场景与画像会暂时失效,等待重建。 Skill: Review Agent 读取任务轨迹与已有 Skill,调用资产工具创建或修订 SKILL.md,并将较长的脚本、模板等保存为资源文件。写入时执行版本校验,历史版本保留,可人工编辑、禁用或回滚。 两条学习路径共享会话采集和后台调度,但 Skill 不必等待 L2/L3 生成完成。 3. 消费:下一次任务按需使用资产 - Memory:在 agent/pre-step 的首个模型步骤前,使用 SQLite FTS5、向量检索与 RRF 召回相关 L1,并在默认 6000 字符预算内提供相关记忆、场景导航和画像。模型还可通过 rsi_memory_search、rsi_conversation_search、rsi_profile_read 查询详情。 - Skill:通过 dsh 官方 Skill Provider 暴露带 rsi- 前缀的技能名称与描述,Agent 自行决定是否加载正文及对应版本的资源。 系统架构 dsh-rsi 系统架构 项目主要由四部分组成: | 模块 | 主要职责 | | dsh 宿主接入 | 会话事件、模型步骤、Skill Provider、插件管理 API | | 后台执行与治理 | 模型桥接、学习队列、预算、诊断日志和作用范围 | | Memory / Skill 核心 | 分层提炼、检索、Review Agent、资源与版本处理 | | 管理页面与 UI 适配 | 资产浏览、编辑、版本管理、学习状态和设置 | 快速开始 环境要求 - 官方 dsh;当前兼容目标为 0.2.0-rc.2(Cordis 4.0.4)。 - Node.js 24 或更高版本。 - 在 dsh 中配置可用的模型;后台学习默认跟随来源会话的模型。 1. 构建插件 git clone https://github.com/lsmax-72/dsh-rsi.git cd dsh-rsi npm ci npm ci 会通过 prepare 自动运行构建;如果安装时禁用了生命周期脚本,需要手动执行 npm run build。 2. 安装到 dsh 在项目目录执行 pwd(Windows 可获取对应的绝对目录路径)。打开 dsh 的 插件 → 添加插件,选择或输入构建后的项目目录,安装并启用。随后进入插件详情页。 项目当前为 private: true,未发布到 npm。 3. 开始使用 1. 在 dsh 中打开一个项目工作区,正常执行 Coding Agent 任务。 2. 在插件「概览」中查看后台学习任务、资产数量与模型调用记录。 3. 在「记忆」「技能」页检查和修正生成的资产。 4. 后续在相同工作区的新会话中继续任务,检查 Memory 召回与 Skill 是否被自然加载。 首次使用时资产为空是正常现象;任务结束也不保证一定生成新 Memory 或 Skill。 资产管理 管理入口:dsh 左侧「插件」→ dsh-rsi → 插件详情。 | 页面 | 功能 | | 概览 | 工作区选择、任务状态、资产数量与学习成本 | | 记忆 | 查看 L0–L3、来源追溯、L1 纠正或删除 | | 技能 | 查看正文和资源、编辑、禁用、历史版本及回滚、复制为 Global Skill | | 设置 | 学习开关、语言与调用预算、资产导出和清理 | 记忆管理页(模拟数据) 技能管理页(模拟数据) 以上管理页面截图使用模拟数据。当前 L2/L3 不支持直接编辑,Skill 资源提供只读预览。 工作区和 Global 项目资产按 dsh 会话绑定的工作区真实路径隔离;个人偏好这类通用记忆可以放进 Global,Skill 也可以手动复制成 Global 版本。后续任务只消费当前工作区和 Global 的资产,不会自动访问其他工作区的专属内容。范围分类与冲突判断要交给 LLM,仍可能出错。 默认数据目录是 $DSH_HOME/plugin-data/dsh-rsi;没配 DSH_HOME 时用 ~/.dsh/plugin-data/dsh-rsi。其中 rsi-state.sqlite 保存队列、设置与调用记录,各 Scope 分别保存 memory.sqlite、skills.sqlite、Skill 资源及画像文件。完整布局见实现进度。 默认配置 | 配置项 | 默认值 | | 自动学习触发 | 稳定阶段每 2 轮或空闲 30 秒;保留首次 Warmup | | 每日后台模型请求预算 | 100 次 | | 单次模型输出上限 | 4096 Token | | 单次后台模型运行循环上限 | 16 步 | | 单次后台模型运行超时 | 180 秒 | | 自动 Memory 注入预算 | 6000 字符 | 请求预算按 UTC 日期计算,包含工具循环和失败的模型请求;它不是费用或 Token 总量上限。后台学习会增加模型调用成本,即使学习暂停,已保存的资产仍可消费。 开发与文档 npm run build 提交代码前请阅读 AGENTS.md。 进一步阅读:产品需求 · 实现进度 本项目不包含模型权重训练、自动修改插件自身源码、团队权限系统或自动索引整个代码库。更多项目文档保存在 docs/。 开源参考与致谢 本项目的设计与实现参考了以下开源项目: - TencentDB-Agent-Memory
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lsmax-72/dsh-rsi
面向个人用户、安装在 dsh 中的 Chat Memory+Skill 自动演化插件
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1