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

侧边导航台 Tomcat099/dsh-sidebar

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

三段式侧栏管理项目会话,并可视化配置 MCP 与记忆

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 42 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 56 处,展示前 54 条)
  • 发起网络请求
    lib/index.js:94
    async fetch(request) {
  • 发起网络请求
    lib/index.js:112
    async fetch(request) {
  • 发起网络请求
    lib/index.js:128
    async fetch(request) {
  • 发起网络请求
    lib/index.js:151
    async fetch(request) {
  • 发起网络请求
    lib/index.js:179
    async fetch(request) {
  • 发起网络请求
    lib/index.js:233
    async fetch(request) {
  • 写入本地文件
    lib/index.js:237
    await mkdir(path, { recursive: true });
  • 写入本地文件
    lib/mcp/host.js:170
    writeFileSync(file, `${renderStandaloneEntry(entry)}\n`, 'utf8');
  • 写入本地文件
    lib/mcp/host.js:184
    mkdirSync(scratchDir(profileDir), { recursive: true, mode: 0o700 });
  • 读取本地文件
    lib/skills.js:107
    entries = await readdir(root, { withFileTypes: true });
  • 写入本地文件
    lib/skills.js:162
    await mkdir(targetRoot, { recursive: true });
  • 删除本地文件递归
    lib/skills.js:192
    await rm(scratch, { recursive: true, force: true });
  • 读取本地文件
    lib/skills.js:207
    const raw = await readFile(file, 'utf8');
  • 写入本地文件
    lib/skills.js:211
    await writeFile(file, next, 'utf8');
  • 读取本地文件
    lib/skills.js:247
    entries = await readdir(root.path, { withFileTypes: true });
  • 读取本地文件
    lib/skills.js:449
    return await stat(path);
  • 读取本地文件
    lib/skills.js:460
    return await readFile(path, 'utf8');
  • 读取本地文件
    lib/skills.js:471
    await access(path);
  • 写入本地文件
    lib/skills.js:511
    await mkdir(dirname(target), { recursive: true });
  • 写入本地文件
    lib/skills.js:512
    await writeFile(target, bytes);
  • 写入本地文件
    lib/skills.js:553
    await mkdir(named);
  • 写入本地文件
    lib/skills.js:557
    await rename(join(root, entry), join(named, entry));
  • 读取本地文件
    lib/mcp/catalog.js:47
    const parsed = JSON.parse(readFileSync(cachePath(profileDir), 'utf8'));
  • 写入本地文件
    lib/mcp/catalog.js:90
    writeFileSync(temporary, `${JSON.stringify(cache, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    lib/mcp/catalog.js:91
    renameSync(temporary, path);
  • 写入本地文件
    lib/mcp/paths.js:54
    mkdirSync(dir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    lib/mcp/store.js:31
    const parsed = JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/mcp/store.js:47
    readFileSync(file, 'utf8');
  • 写入本地文件
    lib/mcp/store.js:78
    mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/mcp/store.js:81
    writeFileSync(temporary, `${JSON.stringify(stored, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    lib/mcp/store.js:82
    renameSync(temporary, file);
  • 删除本地文件
    lib/mcp/store.js:85
    rmSync(temporary, { force: true });
  • 读取本地文件
    lib/mcp/store.js:168
    existing = readFileSync(path, 'utf8');
  • 写入本地文件
    lib/mcp/store.js:179
    writeFileSync(path, next, 'utf8');
  • 发起网络请求
    lib/memory/routes.js:78
    async fetch(request) {
  • 读取本地文件
    lib/mcp/credentials.js:45
    if (!existsSync(file))
  • 读取本地文件
    lib/mcp/credentials.js:48
    for (const line of readFileSync(file, 'utf8').split(/ ? /u)) {
  • 写入本地文件
    lib/mcp/snapshot.js:26
    mkdirSync(dir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    lib/mcp/snapshot.js:45
    const parsed = JSON.parse(readFileSync(path, 'utf8'));
  • 读取本地文件
    lib/mcp/snapshot.js:72
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    lib/mcp/snapshot.js:91
    return existsSync(path) ? readSnapshotFile(path)?.doc : undefined;
  • 读取本地文件
    lib/mcp/snapshot.js:102
    if (!existsSync(path))
  • 删除本地文件
    lib/mcp/snapshot.js:104
    rmSync(path, { force: true });
  • 写入本地文件
    lib/mcp/snapshot.js:168
    writeFileSync(temporary, `${JSON.stringify(payload, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    lib/mcp/snapshot.js:169
    renameSync(temporary, path);
  • 发起网络请求
    lib/memory/embedding.js:89
    const response = await fetch(url, {
  • 写入本地文件
    lib/memory/local.js:29
    mkdirSync(dirname(dbPath), { recursive: true });
  • 发起网络请求
    lib/memory/remote.js:34
    const response = await fetch(url, {
  • 读取本地文件
    lib/mcp/env-file.js:93
    if (!existsSync(file))
  • 读取本地文件
    lib/mcp/env-file.js:95
    return readFileSync(file, 'utf8').split(/ ? /u);
  • 写入本地文件
    lib/mcp/env-file.js:160
    mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/mcp/env-file.js:163
    writeFileSync(temporary, text, { encoding: 'utf8', mode: FILE_MODE });
  • 写入本地文件
    lib/mcp/env-file.js:164
    renameSync(temporary, file);
  • 写入本地文件
    lib/mcp/env-file.js:166
    chmodSync(file, FILE_MODE);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 三段式侧栏导航
  • 可视化配置MCP
  • 跨会话记忆

DSH 左侧三段式导航(功能菜单 / 项目对话树 / 最近对话)+ 工具箱:可视化配置 MCP、跨会话记忆,让项目与会话一目了然。

README

由 DeepSeek 最新模型翻译生成
dsh-sidebar DeepSeek Harness(DSH)Web 插件:把左侧导航改成三段式布局(功能菜单 · 项目对话树 · 最近对话),并在侧边栏提供「工具箱」,直接管理技能、MCP 服务与跨会话记忆。 功能特性 - 三段式左侧导航:功能菜单、项目对话树、快速对话的最近记录;工作区的折叠、高亮、重命名和删除仍由 DSH 自己渲染,底部「设置」不变。 - 工具箱 → MCP:按「全局 / 工作区」作用域可视化配置 MCP 服务器,保存前真实握手校验,保存后立即生效、无需重启。 - 工具箱 → 记忆:跨会话记住偏好、约定与项目事实。默认自动提炼入库、按输入召回并注入上下文;智能体可调用 memory_search / memory_write / memory_forget。 - 工具箱 → 技能:技能(Skill)管理页,全局 / 项目级切换。 「新对话」始终打开同一个后台项目,项目树里不显示它,会话只出现在「最近对话」。搜索框留在「项目」标题旁(DSH 没有单独的搜索槽)。宿主如果本来就不画出空项目,这里也不会补一行「暂无对话」。
展开完整文档(README 剩余 1 节)
dsh-sidebar

DeepSeek Harness(DSH)Web 插件:把左侧导航改成三段式布局(功能菜单 · 项目对话树 · 最近对话),并在侧边栏提供「工具箱」,直接管理技能、MCP 服务与跨会话记忆。

功能特性

- 三段式左侧导航:功能菜单、项目对话树、快速对话的最近记录;工作区的折叠、高亮、重命名和删除仍由 DSH 自己渲染,底部「设置」不变。
- 工具箱 → MCP:按「全局 / 工作区」作用域可视化配置 MCP 服务器,保存前真实握手校验,保存后立即生效、无需重启。
- 工具箱 → 记忆:跨会话记住偏好、约定与项目事实。默认自动提炼入库、按输入召回并注入上下文;智能体可调用 memory_search / memory_write / memory_forget。
- 工具箱 → 技能:技能(Skill)管理页,全局 / 项目级切换。

「新对话」始终打开同一个后台项目,项目树里不显示它,会话只出现在「最近对话」。搜索框留在「项目」标题旁(DSH 没有单独的搜索槽)。宿主如果本来就不画出空项目,这里也不会补一行「暂无对话」。

截图

三段式侧边导航与 MCP 管理

技能管理

记忆管理

安装

从 GitHub 安装(推荐)

第 1 步:安装插件

dsh plugin --profile web add github:Tomcat099/dsh-sidebar

第 2 步:pnpm ≥ 10 首次会报「构建未授权」错误,按提示授权后重装

git 安装拉的是源码(不是构建产物),pnpm 默认拒绝运行 prepare 构建脚本,所以第一次 add 会报 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED。把报错里的包键加入该 profile 的 pnpm-workspace.yaml:

文件:~/.dsh/profiles/web/pnpm-workspace.yaml allowBuilds: dsh-sidebar: true

然后重新执行第 1 步的 add 命令。

这等于允许该包代码在安装时于你的机器上执行,只对源码可信的包授权。也可以锁定 commit 安装,避免仓库后续推送悄悄改变实际运行的内容:
dsh plugin --profile web add github:Tomcat099/dsh-sidebar#<commit-sha>

第 3 步:重启生效

dsh web

本地目录安装(开发调试)

macOS
dsh plugin --profile web add file:/path/to/dsh-sidebar
Windows
dsh plugin --profile web add file:C:/path/to/dsh-sidebar

必须带 file: 前缀,否则 pnpm 会写成软链。改源码先 npm run build,再重启 dsh web。

file: 安装是硬链复制:改已有文件会同步,但新增文件不会被 pnpm 搬进 profile(会报 Already up to date)。加了新文件后要清掉 profile 里的旧副本再装一次:

rm -rf ~/.dsh/profiles/web/node_modules/dsh-sidebar
dsh plugin --profile web add file:/path/to/dsh-sidebar

验证是否装好

dsh --profile web --dump-config # 输出里应能看到 "# == dsh-sidebar" 这一层

开发

npm install
npm run build # tsc → lib/(prepare 自包含,git 安装时也会执行)
npm test # node --test tests/*.test.js

client/client.js(浏览器 CJS bundle)与 lib/(Host 构建产物)随仓库提交,git 安装即可直接用。

License

Apache License 2.0
预览分享卡片长什么样 ↓Tomcat099/dsh-sidebar
分享 · DeepSeek Harness Hub
Tomcat099/dsh-sidebar

三段式侧栏管理项目会话,并可视化配置 MCP 与记忆

这是你的仓库?认领条目

回到顶部