Repository navigation
Description
现象
宽态侧边栏里,「记忆」入口没有和面板行同组,而是落在「更多」这一行下面;点开「更多」时,弹出的菜单正好压在这一行上把它盖住。
实测当前 nav[class*="panelList"] 的直接子元素顺序(DSH 0.2.2-rc.1 / web,宽态):
插件 / 插件市场 / 自动化任务 / 上下文洞察 / 任务看板 / 技能中心 / 智能体 / SSH
→ 更多(span[class*="moreAnchor"] > button)
→ 记忆(div[data-plugin-entry="@modusensus/dsh-mneme"] > div.mneme-topentry > button)
菜单打开时:更多 行在 y≈418–454,菜单 portal 在 y≈426 起(高 76),「记忆」行在 y≈424–460 —— 两者重叠。
期望:「记忆」和面板行同组(在「更多」之前),或者直接走官方面板注册;至少不应该被自己的相邻行菜单盖住。
复现步骤
- web profile 安装
@modusensus/[email protected],默认配置(不依赖任何记忆开关)。 dsh web(DSH 0.2.2-rc.1),展开侧边栏到宽态。- 侧栏出现面板列表 + 「更多」行。本机「更多」由核心
@deepseek-ai/dsh-client-ui-entry-customization注册sidebar.panellist.actions(浏览更多插件 / 创建你的插件)触发,任何有面板的宿主都会出现。 - 看
nav.panelList末尾两行:「更多」在前,「记忆」在后。 - 点「更多」→ 菜单展开后覆盖「记忆」行。
实际行为 vs 预期行为
- 实际:「记忆」是
appendChild到nav.panelList末尾的第三方行,排在「更多」之后。 - 预期:与面板行同组(「更多」之前),或由宿主排序、参与面板固定逻辑。
根因(代码级,供核对)
dsh-mneme/lib/client.js(main 上 8903–8910 行,SidebarTopEntry 内的 place()):
// 展开态落进宿主的面板列表(紧跟「插件 / 自动化任务」);宿主没有面板
// 列表时退回「新会话」行之后,由 .mneme-topentry-native 兜住低调行样式。
const list = wide ? findPanelList(region) : null;
if (list) {
if (created.parentElement === list && created === list.lastElementChild) return;
list.appendChild(created);
return;
}注释写的是「落进面板列表、紧跟插件/自动化任务」,但 appendChild 永远追加到末尾。
宿主侧(@deepseek-ai/dsh-client-ui-sidebar 0.2.2-rc.1)SidebarRoot:先 panels.filter(...) 渲染面板行,然后渲染 PanelMoreMenu(仅在 sidebar.panellist.actions 有注册时出现)。也就是说 0.2.2 起 panelList 的最后一项不再是面板行,而是「更多」——v0.8.x 时 portal 到末尾刚好落在面板组尾部,现在被新出现的「更多」隔开了。
建议(不指定实现)
- 最小改法:
list存在时,先找「更多」锚点(list.querySelector('[class*="moreAnchor"]'),与现有[class*="panelRow"]/[class*="regionArea"]同类做法,不硬编码哈希类名),有锚点就insertBefore(created, anchor),没有才appendChild;幂等判断同步改成created.previousElementSibling === anchor || created === list.lastElementChild。 - 或者换官方注册:同时注册
main+sidebar.panellist(id/order/label),见核心@deepseek-ai/dsh-client-ui-schedule的做法。这样能进入面板注册顺序、参与「更多」里的固定/取消固定,但需要接受「成为正式面板页」的语义。 - 顺带一提:因为不是正式面板,「记忆」现在也不在「更多」菜单的可固定项里——如果这是有意的(保持低调的浮动入口),那只需修位置。
环境
- dsh-mneme 版本:0.10.1(profile 内
npm ls确认) - DSH 版本与 profile:0.2.2-rc.1,
web - 操作系统:Arch Linux,Linux 7.2.14-arch1-1 x86_64
- Node:v24.22.2
- 安装方式:profile 内 npm/pnpm 安装(
package.json固定@modusensus/dsh-mneme: 0.10.1;同一 profile 也装了 dsh-market)
日志
控制台无报错、无相关 warn;问题只在 DOM 结构上,证据是上面 nav.panelList 的子节点顺序与菜单/行的坐标重叠(用浏览器快照读到的 box 坐标,未贴截图,避免带出会话内容)。如需截图或更精确的宿主 DOM dump,我可以补。
已查现状
- 搜了 open + closed issues:没有同类报告。最接近的是 dsh-go 上没有记忆库面板:手机端只能靠 memory_* 工具读写 #564(dsh-go 上没有记忆库面板,平台不同)、面板:引导请求在飞时关掉侧边栏标签页,结果与忙碌状态无处显示 #558(右侧面板标签页忙碌态)、fix(client): 侧栏记忆入口锚定新会话行,防生态插件挤位 (#130) #134(锚定新会话行,旧外壳方案),都不是「入口排在更多之后」这个问题。
- README / CHANGELOG 未提到入口位置策略或官方面板注册。
本报告由 AI 辅助整理,环境、步骤、DOM 顺序与坐标均已在本机逐条实测。
Activity
Merge pull request #576 from slow-stack/fix/sidebar-entry-above-more
fix(panel): 记忆入口落在「更多」行之前,不再被展开的菜单盖住