完整的中英结合功能介绍、PPT 实机截图、安装方式与快捷键,请阅读 README · 中文 / English。
30.1/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Oxygen-Wang/dsh-cursorlike-sidebar该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 77 处,展示前 68 条)
- 读取本地文件src/active-worktree.ts:162
if (!(await stat(cwd)).isDirectory()) return undefined - 读取本地文件src/agent-opens.ts:169
info = await stat(target) - 删除本地文件src/archive-route.ts:228
if (task.file !== undefined) void rm(task.file.path, { force: true }).catch(() => {}) - 删除本地文件src/archive-route.ts:298
if (task?.file !== undefined) void rm(task.file.path, { force: true }).catch(() => {}) - 删除本地文件src/archive-route.ts:314
if (task.file !== undefined) void rm(task.file.path, { force: true }).catch(() => {}) - 删除本地文件src/archive-route.ts:348
await rm(tempPath, { force: true }).catch(() => {}) - 读取本地文件src/archive-route.ts:351
const info = await stat(tempPath).catch(() => undefined) - 读取本地文件src/archive-route.ts:363
task.bytes = await stat(tempPath).then(info => info.size).catch(() => 0) - 删除本地文件src/archive-route.ts:365
await rm(tempPath, { force: true }).catch(() => {}) - 删除本地文件递归src/archive-tools.ts:111
if (scratch !== undefined) rm(scratch, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }, () => {}) - 写入本地文件src/archive-tools.ts:118
writeFileSync(join(scratch, PROBE_FILE), 'probe\n') - 读取本地文件src/bundle-route.ts:51
const info = await stat(path) - 读取本地文件src/bundle-route.ts:56
const etag = `"${shortHash(await readFile(path))}"` - 读取本地文件src/bundle-route.ts:107
const body = await readFile(join(chunkDir, `client-${name}.js`)) - 发起网络请求src/client/api.ts:256
response = await fetch(hostRouteUrl(`sidebar/api/${method}`).href, { - 发起网络请求src/client/api.ts:309
response = await fetch(hostRouteUrl(`sidebar/upload?${params.toString()}`).href, { - 发起网络请求src/client/api.ts:349
response = await fetch(hostRouteUrl(`sidebar/write?${params.toString()}`).href, { - 发起网络请求src/client/open-in-app.ts:135
const response = await fetch(APPS_PATH) - 发起网络请求src/client/open-in-app.ts:185
const response = await fetch(OPEN_PATH, { - 读取本地文件src/file-history.ts:36
const info = await lstat(path, { bigint: true }) - 读取本地文件src/file-history.ts:38
isDir: info.isDirectory() || (info.isSymbolicLink() && await stat(path).then(info => info.isDirectory()).catch(() => false)) } - 读取本地文件src/file-history.ts:67
const value = JSON.parse(await readFile(this.file(scope), 'utf8')) as Journal - 写入本地文件src/file-history.ts:77
await mkdir(root, { recursive: true, mode: 0o700 }) - 读取本地文件src/file-history.ts:79
if ((await lstat(root)).isSymbolicLink()) throw new SidebarError('fs-error', 'recovery directory cannot be a symbolic link', 400) - 写入本地文件src/file-history.ts:82
await writeFile(temp, JSON.stringify(journal), { flag: 'wx', mode: 0o600 }) - 写入本地文件src/file-history.ts:83
await rename(temp, file) - 读取本地文件src/file-history.ts:229
if (!(await stat(dirname(to))).isDirectory()) throw new SidebarError('fs-conflict', `destination directory for "${to}" is missing`, 409) - 写入本地文件src/file-history.ts:234
await rename(from, to) - 读取本地文件src/file-stream.ts:51
const stream = createReadStream(path) - 写入本地文件src/fs-operations.ts:88
await mkdir(dirname(safeTarget), { recursive: true }) - 写入本地文件src/fs-operations.ts:89
const stream = createWriteStream(tmp, { flags: 'wx' }) - 写入本地文件src/fs-operations.ts:107
await rename(tmp, safeTarget) - 读取本地文件src/fs-operations.ts:108
const info = await stat(safeTarget) - 删除本地文件src/fs-operations.ts:117
await rm(tmp, { force: true }).catch(() => {}) - 读取本地文件src/fs-operations.ts:169
const current = await stat(absolute).then(info => info.mtimeMs).catch(() => undefined) - 写入本地文件src/fs-operations.ts:190
await mkdir(dirname(absolute), { recursive: true }) - 写入本地文件src/fs-operations.ts:191
await writeFile(tmp, encodeText(restoreEol(content, eol), encoding), { flag: 'wx' }) - 写入本地文件src/fs-operations.ts:192
await rename(tmp, absolute) - 删除本地文件src/fs-operations.ts:194
await rm(tmp, { force: true }).catch(() => {}) - 读取本地文件src/fs-operations.ts:199
const mtimeMs = await stat(absolute).then(info => info.mtimeMs).catch(() => undefined) - 读取本地文件src/fs-operations.ts:268
lstat(target, { bigint: true }), - 读取本地文件src/fs-operations.ts:269
lstat(root, { bigint: true }), - 读取本地文件src/fs-operations.ts:282
await access(target) - 删除本地文件递归src/fs-operations.ts:540
if (info.isDirectory()) await rm(absolute, { recursive: true }) - 删除本地文件src/fs-operations.ts:541
else await unlink(absolute) - 读取本地文件src/fs-search.ts:115
const info = await stat(absolute).catch(() => undefined) - 读取本地文件src/fs-search.ts:197
const level = await opendir(dir).catch(() => undefined) - 读取本地文件src/fs-search.ts:304
const info = await stat(target).catch(() => undefined) - 读取本地文件src/fs-tree.ts:170
dirents = await readdir(path, { withFileTypes: true }) - 读取本地文件src/fs-tree.ts:307
const info = await runProbe(gate, () => stat(row.path)).catch(() => undefined) - 读取本地文件src/fs-tree.ts:365
level = await opendir(dir) - 执行外部命令固定命令src/git-graph.ts:38
execFile('git', ['-C', cwd, '--no-pager', '--no-replace-objects', '-c', 'color.ui=false', ...args], { - 执行外部命令固定命令src/git.ts:429
const child = spawn('git', full, { - 读取本地文件src/git.ts:692
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []) - 读取本地文件src/git.ts:710
const resolved = await realpath(dir).catch(() => dir) - 读取本地文件src/git.ts:746
const names = await readdir(gitDir) - 读取本地文件src/git.ts:748
|| (names.includes('rebase-apply') && (await readdir(join(gitDir, 'rebase-apply')).catch((): string[] => [])).includes('rebasing'))) { - 读取本地文件src/index.ts:215
if (await stat(sessionPath).then(() => true).catch(() => false)) return sessionPath - 读取本地文件src/index.ts:408
return await stat(path).catch((error: unknown) => { - 读取本地文件src/index.ts:444
const info = await stat(path).catch((error: unknown) => { - 读取本地文件src/index.ts:530
const info = await stat(path).catch((error: unknown) => { - 读取本地文件src/index.ts:1234
text = await readFile(join(home, name), 'utf8') - 读取本地文件src/open-external.ts:65
return /microsoft|wsl/i.test(readFileSync('/proc/version', 'utf8')) - 执行外部命令固定命令src/open-external.ts:74
const translated = execFileSync('/usr/bin/wslpath', [mode, value], { encoding: 'utf8' }).trim() - 写入本地文件src/search-debug.ts:34
appendFileSync(LOG_FILE, `[${new Date().toISOString()}] ${msg}\n`) - 执行外部命令来自配置/变量src/search-engines.ts:190
child = spawn(binary, ['--version'], { stdio: 'ignore' }) - 读取本地文件src/session-path.ts:41
mtimeMs = statSync(metaFile).mtimeMs - 读取本地文件src/session-path.ts:51
const parsed: unknown = JSON.parse(readFileSync(metaFile, 'utf8'))
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/cordis-plugin-include@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar-right给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
为 DeepSeek Harness 提供类似 Cursor 的右侧边栏:文件树、编辑器、Git、终端、侧边聊天,以及 Ctrl+L 引用。
README
由 DeepSeek 最新模型翻译生成CursorLike Sidebar
完整的中英结合功能介绍、PPT 实机截图、安装方式与快捷键,请阅读 README · 中文 / English。
See the illustrated bilingual README for features, installation, and shortcuts.
插件包名 / Package: dsh-cursorlike-sidebar
已发布版本 / Published version: 0.28.0-cursorlike.4-beta.1(当前 latest)。
npm 包页面 · 下载 .tgz(约 4.97 MB) · 安装说明
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Oxygen-Wang/dsh-cursorlike-sidebar
完整的中英结合功能介绍、PPT 实机截图、安装方式与快捷键,请阅读 README · 中文 / English。
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目