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

记忆卡界面重构 07vvvv/memory-eternal-ui-restyle

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

把记忆插件界面改成与主界面一致的视觉风格

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

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

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

状态速览

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

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 27 处,展示前 27 条)
  • 读取本地文件
    index.js:25
    const versionRef = (() => { try { const p = JSON.parse(readFileSync(path.join(PACKAGE_ROOT, 'package.json'), 'utf8')); return p.version } catch { retu
  • 执行外部命令来自配置/变量
    index.js:920
    const wd = spawn(
  • 发起网络请求
    lib/client.js:377
    `;function ya(t){t.effect(()=>t.locale.register(nt,{zh:Kt,en:Yt}),"memory-eternal: locale");let o=t.locale.bind(nt);t.effect(()=>t.slots.inject("setti
  • 发起网络请求
    lib/client.js:381
    `));let Ve=new Blob([ce],{type:ue}),$e=await ja(Ve,pe,!1);if(!$e.ok){_({ok:!1,msg:t("exportFail")}),re(!1);return}_({ok:!0,msg:t("exportedTo")+"\uFF1A
  • 写入剪贴板
    lib/client.js:381
    `));let Ve=new Blob([ce],{type:ue}),$e=await ja(Ve,pe,!1);if(!$e.ok){_({ok:!1,msg:t("exportFail")}),re(!1);return}_({ok:!0,msg:t("exportedTo")+"\uFF1A
  • 发起网络请求
    lib/client.js:382
    `)[0]||"",b=Et({title:"[Bug] "+($.slice(0,60)||"memory-eternal \u95EE\u9898"),body:Ft({description:s,diagnostics:p,version:v})});try{window.open(b,"_b
  • 写入剪贴板
    lib/client.js:382
    `)[0]||"",b=Et({title:"[Bug] "+($.slice(0,60)||"memory-eternal \u95EE\u9898"),body:Ft({description:s,diagnostics:p,version:v})});try{window.open(b,"_b
  • 发起网络请求
    lib/client.js:383
    `),A=new Blob([i],{type:"text/plain;charset=utf-8"}),te=URL.createObjectURL(A),se=document.createElement("a");se.href=te,se.download="memory-selected.
  • 写入剪贴板
    lib/client.js:383
    `),A=new Blob([i],{type:"text/plain;charset=utf-8"}),te=URL.createObjectURL(A),se=document.createElement("a");se.href=te,se.download="memory-selected.
  • 写入本地文件
    lib/db.js:19
    mkdirSync(resolved, { recursive: true })
  • 读取本地文件
    lib/api.js:99
    const pj = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 请求外部主机registry.npmjs.org
    lib/api.js:109
    const resp = await fetch('https://registry.npmjs.org/memory-eternal', { signal: ctl.signal })
  • 发起网络请求
    lib/api.js:109
    const resp = await fetch('https://registry.npmjs.org/memory-eternal', { signal: ctl.signal })
  • 发起网络请求
    lib/llm-openai.js:61
    const res = await fetch(endpoint, {
  • 执行外部命令来自配置/变量
    lib/watchdog.js:146
    const c = spawn(cmd, args, { windowsHide: true })
  • 发起网络请求
    lib/watchdog.js:180
    const req = http.request({ host: '127.0.0.1', port, path: `${API_PREFIX}/overview`, method: 'GET', timeout: timeoutMs }, (res) => {
  • 执行外部命令来自配置/变量
    lib/watchdog.js:244
    const c = spawn(nodeBinary(), args, {
  • 读取本地文件
    lib/web.js:25
    const VERSION = (() => { try { return JSON.parse(readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')).version } catch { return '' } })()
  • 读取本地文件
    lib/web.js:35
    getSettings: () => { try { return JSON.parse(readFileSync(configFilePath(process.env), 'utf8')) } catch { return {} } },
  • 发起网络请求
    lib/web.js:86
    const res = await fetch(`http://127.0.0.1:${port}${API_PREFIX}/overview`, { signal: AbortSignal.timeout(timeoutMs) })
  • 发起网络请求
    web/app.js:379
    `;function Gp({t:e,inModal:t,onClose:n,onFull:r,full:l}){let[o,a]=(0,x.useState)(null),[s,u]=(0,x.useState)([]),[p,y]=(0,x.useState)(!0),[h,f]=(0,x.us
  • 发起网络请求
    web/app.js:383
    `));let fn=new Blob([Me],{type:Re}),qt=await eh(fn,Le,!1);if(!qt.ok){X({ok:!1,msg:e("exportFail")}),ve(!1);return}X({ok:!0,msg:e("exportedTo")+"\uFF1A
  • 写入剪贴板
    web/app.js:383
    `));let fn=new Blob([Me],{type:Re}),qt=await eh(fn,Le,!1);if(!qt.ok){X({ok:!1,msg:e("exportFail")}),ve(!1);return}X({ok:!0,msg:e("exportedTo")+"\uFF1A
  • 发起网络请求
    web/app.js:384
    `)[0]||"",M=Ap({title:"[Bug] "+(A.slice(0,60)||"memory-eternal \u95EE\u9898"),body:Op({description:n,diagnostics:l,version:a})});try{window.open(M,"_b
  • 写入剪贴板
    web/app.js:384
    `)[0]||"",M=Ap({title:"[Bug] "+(A.slice(0,60)||"memory-eternal \u95EE\u9898"),body:Op({description:n,diagnostics:l,version:a})});try{window.open(M,"_b
  • 发起网络请求
    web/app.js:385
    `),H=new Blob([v],{type:"text/plain;charset=utf-8"}),ae=URL.createObjectURL(H),Se=document.createElement("a");Se.href=ae,Se.download="memory-selected.
  • 写入剪贴板
    web/app.js:385
    `),H=new Blob([v],{type:"text/plain;charset=utf-8"}),ae=URL.createObjectURL(H),Se=document.createElement("a");Se.href=ae,Se.download="memory-selected.
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org

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

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

功能亮点

  • 记忆插件界面重构
  • 统一主界面视觉风格

README

由 DeepSeek 最新模型翻译生成
memory-eternal · UI 重构 DeepSeek Harness 记忆插件 memory-eternal 的界面重构衍生版。 上游把「对话自动沉淀成知识卡、需要时按需召回」这件事做完了。本仓库只做一件事:把它的界面重做到与 DSH 主界面同一种视觉语言——细线、留白、克制的状态色,不再有彩色渐变边条、emoji 图标和重阴影。 功能、数据格式、host 逻辑与上游完全一致。本仓库不新增功能、不改变任何运行行为,也不修改任何存储格式。 | 原作者 | EternalNight996 | | 上游仓库 | https://github.com/EternalNight996/memory-eternal | | 对应版本 | 0.9.15(标签 v0.9.15-restyle.1) | | 许可 | MIT License(LICENSE 原文与版权行未改动) | | 在线预览 | https://07vvvv.github.io/memory-eternal-ui-restyle/ | 界面 浅色(知识卡):大纲式侧栏、进度条指标、下划线搜索、bento 卡片(首卡跨 2×2) 浅色知识卡 深色主题:状态色与主按钮随主题自适应 深色主题 卡片阅读器:小标题用 CSS 色点、引用块用 2px 色条 卡片阅读器
展开完整文档(README 剩余 1 节)
memory-eternal · UI 重构

DeepSeek Harness 记忆插件 memory-eternal 的界面重构衍生版。

上游把「对话自动沉淀成知识卡、需要时按需召回」这件事做完了。本仓库只做一件事:把它的界面重做到与 DSH 主界面同一种视觉语言——细线、留白、克制的状态色,不再有彩色渐变边条、emoji 图标和重阴影。

功能、数据格式、host 逻辑与上游完全一致。本仓库不新增功能、不改变任何运行行为,也不修改任何存储格式。

| 原作者 | EternalNight996 |
| 上游仓库 | https://github.com/EternalNight996/memory-eternal |
| 对应版本 | 0.9.15(标签 v0.9.15-restyle.1) |
| 许可 | MIT License(LICENSE 原文与版权行未改动) |
| 在线预览 | https://07vvvv.github.io/memory-eternal-ui-restyle/ |

界面

浅色(知识卡):大纲式侧栏、进度条指标、下划线搜索、bento 卡片(首卡跨 2×2)

浅色知识卡

深色主题:状态色与主按钮随主题自适应

深色主题

卡片阅读器:小标题用 CSS 色点、引用块用 2px 色条

卡片阅读器

侧边栏入口(与官方「应用中枢」同款行)与弹窗标题条:

入口对照

弹窗标题条

这个版本改了什么

改动集中在客户端展示层,共 4 个源文件:

| 文件 | 改动量 | 内容 |
| src/client/index.tsx | +423 / −291 | 主界面与各面板的样式与结构 |
| src/client/markdown.js | +24 / −22 | 卡片正文排版:去 emoji,改 CSS 色点/色条 |
| web/index.html | +53 / −19 | 独立 web 页色板 → DSH 官方设计 token |
| tests/markdown.test.mjs | +12 / −12 | 断言随渲染器同步 |

构建产物随之重建:lib/client.js、web/app.js。

设计语言

主色 --dsw-alias-state-business-primary(#4176e6),三级文字用 label-primary/secondary/tertiary,边框统一 4% / 10% / 12% 黑,圆角 8/12/16,阴影收敛到 0 2px 8px rgba(0,0,0,.04) 级别;状态色用 color-mix 自适应深浅主题。
独立 web 页原先自带一套手写的旧 Tailwind 色板(#1f2937 / #e5e7eb / #3b82f6),与宿主不一致——这是"看起来不像 DSH"的根源,现已替换为官方浅色与深色两套 token。

布局

- 侧栏改为 244px 大纲式导航:分组标题 + 行项 + 计数徽标 + 品牌头,选中态加粗 + 主色下划线
- 新增页头(标题 + 动作组),指标改为通栏进度条式,搜索改为无边框下划线,分类/排序改为 pill 行
- 卡片改为编辑式排版;卡片数为 3 的倍数时启用 bento(首卡跨 2×2,grid-auto-flow: dense,无空格)

入口与弹窗

- 侧边栏入口原本是橙色渐变 SVG,与相邻的官方线性图标不是一套语言;现改为与官方「应用中枢 / 插件市场」同款行:36px 高、9px 圆角、16px 几何符号 ▤、 hover 用 --dsw-alias-interactive-bg-hover
- 弹窗右上角原先是 26px 半透明浮条浮在 iframe 上方(容易与窗口控制按钮混淆、误点);现改为 48px 标题条 + 34px SVG 图标按钮,不遮挡内容

正文与深色

- 卡片正文的小标题与引用块不再注入 emoji,改由 CSS 色点与 2px 色条承担视觉锚点;色组全部收敛到 DSH token(绿 / 琥珀 / 主色蓝 / 中性 / 红)
- 深色主题下主按钮文字改用 --dsw-alias-label-primary-inverted,修掉「浅蓝底 + 白字」的对比不足

什么没有改

- index.js:host 侧全部行为——自动沉淀、LLM 蒸馏、memory_recall 召回、 /memory-eternal/api/ 路由、设置 schema
- lib/:db.js、vault.js、capture.js、api.js、watchdog.js、setup.js 等 host 模块
- cordis.patch.yml、依赖声明与 npm 脚本
- 数据与存储:知识库仍在本地 ~/.dsh/memory-vault,格式未变,可直接与上游互换

安装

方式一:从本仓库安装(DSH 桌面版 profile 名为 desktop)

dsh plugin --profile desktop add github:07vvvv/memory-eternal-ui-restyle

方式二:用 Release 附件

从 Releases 下载 memory-eternal-ui-restyle-0.9.15.tgz,解压后构建,再把它 link 进 profile:

tar -xzf memory-eternal-ui-restyle-0.9.15.tgz
cd memory-eternal
npm install # 只为拿 esbuild
node build.mjs # 产出 lib/client.js 与 web/app.js

方式三:本地开发把仓库目录直接 link 进 profile 的 dependencies 与 dsh.profile.bundles 即可热装配;注意 junction 会以真实路径解析模块,插件目录需要自带 node_modules(放 @deepseek-ai/dsh-tools、schemastery 等),否则 loader 建不出 fiber。

从源码构建

需要 Node 22+(构建用到 esbuild):

npm install
node build.mjs # 客户端:lib/client.js(DSH 内嵌)、web/app.js(独立页)
node tests/markdown.test.mjs # 7/7
node tests/graph-lod.test.mjs # 5/5

src/client/index.tsx 是界面源码(DSH 内嵌与独立 web 共用同一套组件), lib/client.js 与 web/app.js 都是构建产物——不要直接改产物。

与上游的关系

- 上游更新了 host 逻辑:直接覆盖 index.js / lib/ 即可,与本仓库改动不冲突
- 上游更新了 UI:需要手动合并,本仓库改动集中在 src/client/index.tsx、src/client/markdown.js、web/index.html
- 想退回上游界面:用上游同名文件覆盖上述 4 个文件后重新 node build.mjs

功能说明、配置项、CLI、MCP 挂载等完整文档请以上游 README 为准——本仓库不再重复维护一份。

许可与致谢

MIT License。上游项目及全部核心能力版权归原作者 EternalNight996 所有;本仓库仅重构客户端界面层,不隶属上游官方发布,也不代表原作者立场。
改动明细见 NOTICE.md。
预览分享卡片长什么样 ↓07vvvv/memory-eternal-ui-restyle
分享 · DeepSeek Harness Hub
07vvvv/memory-eternal-ui-restyle

把记忆插件界面改成与主界面一致的视觉风格

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