观察你的 ERP 页面,积累可核验的本地知识
30.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:engines.node 要求 >=24.18.0 <25,不满足 Node 22.19.0。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add GuoMonth/dsh-erp该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 42 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/11/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24.18.0 <25,不满足 Node 22.19.0
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@guosheng_047/dsh-erp @ 0.1.1
✗Node 引擎要求 >=24.18.0 <25 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 18:57:23
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 46 条)
- 发起网络请求src/browser/read-navigation.ts:34
const request = intercepted.request() - 发起网络请求src/browser/read-navigation.ts:43
const response = await intercepted.fetch({ headers, maxRedirects: 0, maxRetries: 0, timeout: 8000 }) - 读取本地文件src/browser/read-policy.ts:44
if (!isAbsolute(path) || !lstatSync(path).isFile() || lstatSync(path).isSymbolicLink() || lstatSync(path).size > 128_000) throw new Error() - 读取本地文件src/browser/read-policy.ts:45
const policy = JSON.parse(readFileSync(path, 'utf8')) as ReadPolicy - 读取本地文件src/browser/resources.ts:15
if (existsSync(chromium.executablePath())) return - 执行外部命令来自配置/变量src/browser/resources.ts:21
const child = spawn(process.execPath, [cli, 'install', 'chromium', '--no-shell'], { - 读取本地文件src/browser/resources.ts:39
else if (code !== 0 || !existsSync(chromium.executablePath())) reject(new BrowserError('BROWSER_INSTALL_FAILED_RETRY')) - 写入本地文件src/knowledge/export.ts:33
writeFileSync(jsonPath, JSON.stringify(projection,null,2), { mode:0o600, flag:'wx' }) - 写入本地文件src/knowledge/export.ts:34
writeFileSync(markdownPath, lines.join('\n'), { mode:0o600, flag:'wx' }) - 写入本地文件src/knowledge/sharing.ts:130
await mkdir(join(directory, 'references'), { recursive: true, mode: 0o700 }) - 写入本地文件src/knowledge/sharing.ts:134
await writeFile(temporary, value, { mode: 0o600, flag: 'wx', signal }) - 写入本地文件src/knowledge/sharing.ts:136
await rename(temporary, join(directory, name)) - 删除本地文件src/knowledge/sharing.ts:137
} finally { await rm(temporary, { force: true }) } - 读取本地文件src/knowledge/sharing.ts:150
const entries = await readdir(root, { withFileTypes: true }).catch(error => { - 读取本地文件src/knowledge/sharing.ts:163
const content = await readFile(join(directory, 'SKILL.md'), { encoding: 'utf8', ...(options.signal ? { signal: options.signal } : {}) }) - 写入本地文件src/storage/database.ts:29
try { writeFileSync(fd, data); fsyncSync(fd) } finally { closeSync(fd) } - 读取本地文件src/storage/database.ts:37
if (!lstatSync(path).isFile() || lstatSync(path).isSymbolicLink()) throw new StorageError('INVALID_EVIDENCE_FILE') - 读取本地文件src/storage/database.ts:38
return readFileSync(path) - 读取本地文件src/storage/database.ts:59
if (existsSync(path) && lstatSync(path).isSymbolicLink()) throw new StorageError('DATABASE_SYMLINK') - 读取本地文件src/storage/database.ts:59
if (existsSync(path) && lstatSync(path).isSymbolicLink()) throw new StorageError('DATABASE_SYMLINK') - 写入本地文件src/storage/database.ts:86
chmodSync(path, 0o600) - 读取本地文件src/storage/database.ts:122
if (existsSync(path)) { - 写入本地文件src/storage/database.ts:127
try { durableWrite(temporary, bytes); renameSync(temporary, path); syncDirectory(join(this.directory, 'evidence')) } - 读取本地文件src/storage/database.ts:128
finally { if (existsSync(temporary)) rmSync(temporary) } - 删除本地文件src/storage/database.ts:128
finally { if (existsSync(temporary)) rmSync(temporary) } - 写入本地文件src/storage/database.ts:203
chmodSync(dbPath, 0o600) - 写入本地文件src/storage/database.ts:221
renameSync(stage, join(backups, id)); syncDirectory(backups) - 删除本地文件递归src/storage/database.ts:223
} catch (error) { rmSync(stage, { recursive: true, force: true }); throw error } - 写入本地文件src/storage/database.ts:234
try { mkdirSync(destination, { mode: 0o700 }) } catch { throw new StorageError('RESTORE_DESTINATION_UNAVAILABLE') } - 删除本地文件递归src/storage/database.ts:252
} catch (error) { rmSync(destination, { recursive: true, force: true }); throw error } - 写入本地文件src/storage/paths.ts:14
mkdirSync(path, { recursive: true, mode: 0o700 }) - 读取本地文件src/storage/paths.ts:15
if (lstatSync(path).isSymbolicLink()) throw new StorageError('DATA_DIRECTORY_SYMLINK') - 写入本地文件src/storage/paths.ts:24
chmodSync(actual, 0o700) - 读取本地文件src/system.ts:34
if (!existsSync(reference)) { - 写入本地文件src/system.ts:36
writeFileSync(temp, JSON.stringify({ id: `erp_${randomUUID()}`, baseUrl: base.href }), { mode: 0o600, flag: 'wx' }) - 删除本地文件src/system.ts:38
finally { unlinkSync(temp) } - 读取本地文件src/system.ts:40
if (lstatSync(reference).isSymbolicLink() || !lstatSync(reference).isFile()) throw new BrowserError('ERP_INVALID_SYSTEM_REFERENCE') - 读取本地文件src/system.ts:41
const saved = JSON.parse(readFileSync(reference, 'utf8')) as { id: string; baseUrl: string } - 读取本地文件src/system.ts:45
scope: { ...scope, site: saved.id }, adapter: 'browser-learning-v1', legacyDataPresent: existsSync(join(root, 'store.sqlite')) } - 写入本地文件src/system.ts:48
writeFileSync(temp, JSON.stringify({ format: 1, id: profile.id, name, baseUrl: base.href, entryUrl: entry.href, adapter: profile.adapter }, null, 2), - 写入本地文件src/system.ts:49
renameSync(temp, join(directory, 'system.json')) - 读取本地文件src/system.ts:50
} finally { if (existsSync(temp)) unlinkSync(temp) } - 删除本地文件src/system.ts:50
} finally { if (existsSync(temp)) unlinkSync(temp) } - 执行外部命令来自配置/变量src/worker-client.ts:68
const child = fork(this.options.workerUrl ?? new URL('./worker.js', import.meta.url), [], { - 发起网络请求src/worker-client.ts:125
const value = await this.request({ kind: 'request', method: 'health', delayMs }, signal) - 发起网络请求src/worker-client.ts:133
const value = await this.request({ kind: 'browser', method, input: snapshot }, signal, method === 'browser.open' ? 660_000 : 15_000)
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools@deepseek-ai/dsh-user-approval@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 积累本地可核验知识
- 写入前必须审批
面向 dsh 0.1.5 rc2 的 ERP 学习与自动化插件,知识有据可查,写入 ERP 前必须审批。
README
由 DeepSeek 最新模型翻译生成Adapt ERP · dsh-erp
0.1.0-alpha.8 对齐 DSH 0.1.6-alpha.2(预发布版本);本次不启用上游 Browser Use / Computer Use 提供方。
English · npm · 版本发布 · 更新记录
通过浏览器学习你的 ERP,将知识保存在自己的电脑上。 Adapt ERP 是 DeepSeek Harness(DSH)的插件。配置自己的 ERP、自己登录,然后让 DSH 观察菜单、页面、字段和业务数据,建立有证据的知识,并在后续对话中复用、核验和补充。
插件从没有站点知识的状态开始,不要求特定 ERP 厂商、API 路径或登录令牌格式。实际兼容性取决于网站界面和认证流程;本预览版不承诺已经成功操作所有 ERP。
当前交互规则:确认登录身份后,页面观察与本地知识积累自动进行;每次点击、填写、选择或滚动都单独请求确认,包括查询,因为陌生控件可能自动保存。这是带确认的 AI 学习流程,尚不是无人值守爬取或业务事务引擎。
安装
| 要求 | 当前基线 |
| Node.js | >=24.18.0 ,查看库存和相关订单,记录步骤与不确定性。”
- “继续未完成的探索,复核变化的字段,并导出 Markdown 和 JSON。”
第二个例子是模型规划的界面任务,不是内置的商品/订单 API,也不保证完成库存对账。
展开完整文档(README 剩余 1 节)
Adapt ERP · dsh-erp 0.1.0-alpha.8 对齐 DSH 0.1.6-alpha.2(预发布版本);本次不启用上游 Browser Use / Computer Use 提供方。 English · npm · 版本发布 · 更新记录 通过浏览器学习你的 ERP,将知识保存在自己的电脑上。 Adapt ERP 是 DeepSeek Harness(DSH)的插件。配置自己的 ERP、自己登录,然后让 DSH 观察菜单、页面、字段和业务数据,建立有证据的知识,并在后续对话中复用、核验和补充。 插件从没有站点知识的状态开始,不要求特定 ERP 厂商、API 路径或登录令牌格式。实际兼容性取决于网站界面和认证流程;本预览版不承诺已经成功操作所有 ERP。 当前交互规则:确认登录身份后,页面观察与本地知识积累自动进行;每次点击、填写、选择或滚动都单独请求确认,包括查询,因为陌生控件可能自动保存。这是带确认的 AI 学习流程,尚不是无人值守爬取或业务事务引擎。 安装 | 要求 | 当前基线 | | Node.js | >=24.18.0 ,查看库存和相关订单,记录步骤与不确定性。” - “继续未完成的探索,复核变化的字段,并导出 Markdown 和 JSON。” 第二个例子是模型规划的界面任务,不是内置的商品/订单 API,也不保证完成库存对账。 知识属于用户本机 每个系统在数据根目录下对应 systems//,保存 SQLite、证据、导出和私有浏览器资料。erp_system_status 返回准确范围和位置。保持配置与目录不变,新对话无需登录即可查询已有知识;实时数据需要当前登录,过去的余额或订单仍是历史观察。 npm 发布不包含用户知识、浏览器登录资料、测试站点或验收答案。 安装包只提供学习工具、通用结构和用户指南。SCM/USA 已回到开发测试基准中。分享知识是用户主动导出的独立动作,不属于插件发布。Markdown/JSON 是可读视图,SQLite 保留修订及证据关联。 DSH 使用的观察可能发送给所配置的模型供应商。快照排除密码、隐藏、文件输入、明显凭据字段及 data-erp-private 区域,但脱敏不能保证发现所有敏感内容;表格与普通字段可能包含业务数据。交互工具不接受账号密码管理任务。 控制与限制 - 每次页面交互单独请求 DSH 确认,包括写入按钮和自动保存输入框;拒绝后不发送交互。观察许可不授予操作权限。 - 操作绑定短期快照引用,不接受模型提供的选择器、JavaScript 或请求 URL。目标变化、导航、过期版本和重复引用均拒绝。动作失败可能已经影响网站,应先检查结果再决定下一步。 - 观察许可最多 10 分钟,人工输入/导航会暂停。动作确认包括读取结果并开启新的有时限观察窗口;重启后重新检查登录和授权。 - 每实例一个配置系统、一个浏览器页面。支持应用内 iframe;跨域 iframe、Canvas、封闭 Shadow DOM、多窗口登录及扫码/SSO 可能需要人工处理,尚未广泛验收。原生浏览器对话框由人处理。 - 快照是有界、非事务性采样。不提供多步骤业务事务、自动重试、无人值守写入或多个 ERP 自动选库。 升级与卸载 升级前调用 erp_storage_backup,退出 DSH,重复安装命令后重启。保持相同的数据根目录和配置。 从 alpha.5 升级:系统 ID 与知识保留。移除 erp_scm_* 和 SCM 菜单导入工具,改用通用浏览器学习流程。已有 SCM 记录是历史证据,不是另一套 ERP 的已验证方法;复用步骤前重新观察页面。 从 alpha.4 或更早升级:配置 system 会使用独立存储,旧根目录知识保留但不自动导入。退出 DSH 后临时移除 system,可按原 scope 查询、导出或备份旧库,该模式禁用浏览器连接。详见存储恢复。alpha.1/alpha.2 TGZ 用户需先移除旧无 scope 插件入口,只启用新包。 退出 DSH 后卸载: npm exec --yes --package=pnpm@11.7.0 -- dsh plugin --profile web remove @guosheng_047/dsh-erp 卸载保留数据。同一库只允许一个进程持有,不支持多个独立 DSH 进程同时共享。 开发与验证 npm ci --ignore-scripts npx playwright install chromium --no-shell npm run verify npm pack 构建先清理 dist,避免已删除适配器残留进发布包。完整测试在本地执行;手动 Release Action 构建、Trusted Publishing 发布并核验 npm/GitHub 字节。 通用流程通过不同合成 ERP 界面、空知识库、真实 Chromium/IPC 和原生 DSH 确认进行测试。确定性的测试决策不等于真实模型兼容性基准;历史 SCM 实测单独保留,不能据此声称新流程已验证所有 ERP。详见学习流程与边界和开发文档。 MIT。依赖保留各自许可,见第三方声明。browser-use 与 browser-harness 是前期参考,目前浏览器运行时使用 Playwright。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
GuoMonth/dsh-erp
观察你的 ERP 页面,积累可核验的本地知识
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4