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

记忆互通桥 Zoria-Lind/dsh-ecolink

DeepSeek Harnessv0.2.2
Zoria-Lind5 天前有提交已提供中文文档扫描:高危

v0.3.02026-10-29:新增指定全文读取/ecolink-list、/ecolink-read、模型工具…

34.2/100
综合分
6
GitHub 星标
432
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @zoria-lind/dsh-ecolink-adapter
npm 源 · @zoria-lind/dsh-ecolink-adapter 的发布者账号已校验与本仓库一致

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过

安装清单取自 adapter/package.json

展开查看检查明细 ↓

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

✓npm 包@zoria-lind/dsh-ecolink-adapter @ 0.2.2
✓Node 引擎要求 >=18.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 04:55:17

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

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

命令参数由运行时变量拼接读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 62 处,展示前 41 条)
  • 发起网络请求
    adapter/src/client.js:7
    const response=await fetch(method==='GET'?`${path}?${new URLSearchParams(args)}`:path,
  • 读取本地文件
    adapter/src/modules/memoryWrite.js:33
    if (existsSync(cand)) {
  • 读取本地文件
    adapter/src/modules/memoryWrite.js:34
    const token = String(JSON.parse(readFileSync(cand, 'utf8'))?.token ?? '')
  • 发起网络请求
    adapter/src/modules/memoryWrite.js:46
    const fetchImpl = typeof deps.fetchImpl === 'function' ? deps.fetchImpl : ((...a) => fetch(...a))
  • 发起网络请求
    adapter/src/modules/serviceGuard.js:49
    const fetchImpl = typeof deps.fetchImpl === 'function' ? deps.fetchImpl : ((...a) => fetch(...a))
  • 执行外部命令表达式求值
    adapter/src/modules/serviceGuard.js:50
    const spawnImpl = typeof deps.spawnImpl === 'function' ? deps.spawnImpl : ((...a) => spawn(...a))
  • 读取本地文件
    adapter/src/modules/serviceGuard.js:51
    const serverPath = typeof deps.serverPath === 'string' ? deps.serverPath : (SERVICE_SERVER_CANDIDATES.find((p) => existsSync(p)) ?? SERVICE_SERVER_CAN
  • 读取本地文件
    adapter/src/modules/serviceGuard.js:78
    if (!existsSync(serverPath)) {
  • 读取本地文件
    adapter/src/modules/memoryReader.js:39
    const readFile=deps.readFile ?? (p=>readFileSync(p,'utf8'))
  • 写入本地文件
    service/pool.mjs:114
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    service/pool.mjs:115
    if (existsSync(poolFile)) {
  • 读取本地文件
    service/pool.mjs:117
    const data = JSON.parse(readFileSync(poolFile, 'utf8'))
  • 写入本地文件
    service/pool.mjs:128
    try { renameSync(poolFile, `${poolFile}.broken-${Date.now()}`) } catch { }
  • 写入本地文件
    service/pool.mjs:137
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    service/pool.mjs:140
    writeFileSync(tmp, text, 'utf8')
  • 写入本地文件
    service/pool.mjs:141
    renameSync(tmp, file)
  • 读取本地文件
    service/pool.mjs:143
    try { if (existsSync(tmp)) unlinkSync(tmp) } catch { }
  • 删除本地文件
    service/pool.mjs:143
    try { if (existsSync(tmp)) unlinkSync(tmp) } catch { }
  • 读取本地文件
    service/pool.mjs:154
    if (existsSync(sugFile)) {
  • 读取本地文件
    service/pool.mjs:156
    const data = JSON.parse(readFileSync(sugFile, 'utf8'))
  • 写入本地文件
    service/pool.mjs:160
    try { renameSync(sugFile, `${sugFile}.broken-${Date.now()}`) } catch { }
  • 读取本地文件
    service/pool.mjs:200
    if (existsSync(archiveFile)) {
  • 删除本地文件
    service/pool.mjs:597
    unlinkSync(stagingFile)
  • 删除本地文件
    service/pool.mjs:622
    unlinkSync(stagingFile)
  • 发起网络请求
    service/compress.mjs:55
    const resp = await fetch(`${baseUrl.replace(/ $/, '')}/chat/completions`, {
  • 写入本地文件
    service/server.mjs:23
    appendFileSync(logPath, `[${new Date().toISOString()}] ${method} ${path} ${detail}\n`, 'utf8')
  • 读取本地文件
    service/server.mjs:24
    if (statSync(logPath).size > 1024 * 1024) {
  • 写入本地文件
    service/server.mjs:25
    renameSync(logPath, `${logPath}.old`)
  • 读取本地文件
    service/server.mjs:35
    if (existsSync(CONFIG_FILE)) {
  • 读取本地文件
    service/server.mjs:37
    Object.assign(defaults, JSON.parse(readFileSync(CONFIG_FILE, 'utf8')))
  • 读取密钥环境变量
    service/server.mjs:45
    if (process.env.ECOLLINK_TOKEN !== undefined) defaults.token = process.env.ECOLLINK_TOKEN
  • 读取密钥环境变量
    service/server.mjs:47
    if (process.env.ECOLLINK_DEEPSEEK_API_KEY) defaults.deepseekApiKey = process.env.ECOLLINK_DEEPSEEK_API_KEY
  • 读取密钥环境变量
    service/server.mjs:64
    if (!config.token && process.env.ECOLLINK_TOKEN === undefined) {
  • 读取本地文件
    service/server.mjs:68
    if (existsSync(CONFIG_FILE)) {
  • 读取本地文件
    service/server.mjs:69
    try { raw = JSON.parse(readFileSync(CONFIG_FILE, 'utf8')) ?? {} } catch { }
  • 写入本地文件
    service/server.mjs:74
    writeFileSync(tmp, JSON.stringify(raw, null, 2), 'utf8')
  • 写入本地文件
    service/server.mjs:75
    renameSync(tmp, CONFIG_FILE)
  • 读取本地文件
    service/server.mjs:77
    try { if (existsSync(tmp)) unlinkSync(tmp) } catch { }
  • 删除本地文件
    service/server.mjs:77
    try { if (existsSync(tmp)) unlinkSync(tmp) } catch { }
  • 读取密钥环境变量
    service/server.mjs:134
    const disabled = process.env.ECOLLINK_DISABLE_TOKEN_DISCOVERY === '1'
  • 读取密钥环境变量
    service/server.mjs:156
    if (process.env.ECOLLINK_DISABLE_TOKEN_DISCOVERY === '1') {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 打通网页版与本地记忆
  • 本地记忆池共享
  • 浏览器扩展采集注入

记忆生态打通 DeepSeek 网页版与本地 DSH——一个本地记忆池,由浏览器扩展(采集/注入)、零依赖本地服务(唯一写入方)和 DSH 适配器(前置步骤注入)共用。

README

由 DeepSeek 最新模型翻译生成
v0.3.0(2026-10-29):新增指定全文读取(/ecolink-list、/ecolink-read、模型工具 ecolink_memory)、DSH 记忆侧栏与通用/非通用分类、网页「保存完整成果」。自动短标签继续独立收割和入池;全文读取不再要求手动复制。完整规则与限制见 adapter/README.md。 dsh-ecolink 打通 DeepSeek 网页版与本地 DSH 的记忆生态:网页端记住的,DSH 直接用;DSH 里产生的,网页端也能读到。同一份结构化本地记忆池(~/.dsh-memory/memory.json)。 组件 | 组件 | 目录 | 说明 | | dsh-ecolink-web | extension/ | Chrome/Edge MV3 扩展:网页端标签收割(DSM 兼容格式)、请求注入(打分+预算+会话去重)、防污染三件套、popup 面板(配置/会话管理/DSM 导入/压缩) | | dsh-ecolink-service | service/ | 本地记忆池唯一写者:零依赖 HTTP 服务、时间戳分层、归档、事务化压缩(暂存池 → 动态下限验收 → 提交/回滚,零丢失)、请求日志 | | dsh-ecolink-adapter | adapter/ | DSH 适配层:直读记忆池、pre-step 注入、#记忆名 过滤 |
展开完整文档(README 剩余 1 节)
v0.3.0(2026-10-29):新增指定全文读取(/ecolink-list、/ecolink-read、模型工具 ecolink_memory)、DSH 记忆侧栏与通用/非通用分类、网页「保存完整成果」。自动短标签继续独立收割和入池;全文读取不再要求手动复制。完整规则与限制见 adapter/README.md。

dsh-ecolink

打通 DeepSeek 网页版与本地 DSH 的记忆生态:网页端记住的,DSH 直接用;DSH 里产生的,网页端也能读到。同一份结构化本地记忆池(~/.dsh-memory/memory.json)。

组件

| 组件 | 目录 | 说明 |
| dsh-ecolink-web | extension/ | Chrome/Edge MV3 扩展:网页端标签收割(DSM 兼容格式)、请求注入(打分+预算+会话去重)、防污染三件套、popup 面板(配置/会话管理/DSM 导入/压缩) |
| dsh-ecolink-service | service/ | 本地记忆池唯一写者:零依赖 HTTP 服务、时间戳分层、归档、事务化压缩(暂存池 → 动态下限验收 → 提交/回滚,零丢失)、请求日志 |
| dsh-ecolink-adapter | adapter/ | DSH 适配层:直读记忆池、pre-step 注入、#记忆名 过滤 |

快速开始

1. 启动服务(记忆池唯一写者)——日常不需要手动起: DSH 的 adapter 会自动拉起(serviceAutoStart 默认开);
登录自启任务兜底:scripts/install-autostart.ps1(不开 DSH 也能用)
node dsh-ecolink/service/server.mjs

2. 加载扩展 Edge: edge://extensions → 开发人员模式 → 加载解压缩的扩展 → 选 extension/

3. DSH 挂载适配层(npm 安装,推荐)
dsh plugin --profile web add @zoria-lind/dsh-ecolink-adapter

或本地路径(开发):
dsh plugin --profile web add <仓库目录>/adapter

服务默认 http://127.0.0.1:17520,零外部网络请求、零遥测;记忆数据只落在本机。
运维脚本:scripts/start-service.ps1(隐藏启动)/ stop-service.ps1(停止)/ install-autostart.ps1 / uninstall-autostart.ps1(登录自启)。

记忆流动

网页端对话 ──吐 <DSM:memory_write> 标签──▶ 扩展收割(DOM + 历史响应双通道) │ │ │ 注入(打分+预算) ▼ ◀────────────────────────────── ecolink-service 落盘 │ DSH 会话 ──pre-step 注入(同选择器)──◀─────────┘ (adapter 只读)

- 写入:模型在网页对话中输出 <DSM:memory_write>内容</DSM:memory_write>(兼容 DSM 的 key/importance 属性格式),扩展收割后落盘
- 读取:请求注入(网页端)/ pre-step 注入(DSH),同一套打分选择器
- 压缩(0.2.0,双池事务):popup 一键,网页端免费模型为主、API 压缩(deepseek-chat)为辅。
开始压缩 = 过时记忆从主池移入暂存池(staging.json,全程留落盘副本);模型输出的新标签作为普通记忆写回主池;验收通过 → 清空暂存池,不达标/失败 → 暂存池原样放回主池(零丢失)。
验收公式与完整流程见 service/README.md

测试

node --test extension/test/core.test.mjs # 扩展核心 14 项
node --test service/test.mjs # 服务 14 项
node adapter/test/smoke.mjs # 适配层 76 项

文档

- 完整方案与阶段表:PLAN.md
- 组件细节见各目录 README

License

MIT © 2026 Zoria Lind
预览分享卡片长什么样 ↓Zoria-Lind/dsh-ecolink
分享 · DeepSeek Harness Hub
Zoria-Lind/dsh-ecolink

v0.3.02026-10-29:新增指定全文读取/ecolink-list、/ecolink-read、模型工具…

这是你的仓库?认领条目

回到顶部