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

侧边工作台 Oxygen-Wang/dsh-cursorlike-sidebar

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

完整的中英结合功能介绍、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
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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) · 安装说明
预览分享卡片长什么样 ↓Oxygen-Wang/dsh-cursorlike-sidebar
分享 · DeepSeek Harness Hub
Oxygen-Wang/dsh-cursorlike-sidebar

完整的中英结合功能介绍、PPT 实机截图、安装方式与快捷键,请阅读 README · 中文 / English。

这是你的仓库?认领条目

回到顶部