把记忆插件界面改成与主界面一致的视觉风格
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 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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.orglib/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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
07vvvv/memory-eternal-ui-restyle
把记忆插件界面改成与主界面一致的视觉风格
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。