统一管理本地与远程 SSH 工作区,一条连接跑命令和文件
37.4/100
综合分
1
GitHub 星标
498
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-workspace-enhancementnpm 源 · dsh-workspace-enhancement 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-workspace-enhancement @ 0.2.7
✓Node 引擎要求 >=22.8.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 01:01:26
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 82 处,展示前 76 条)
- 读取本地文件lib/picker.js:62
enterable = (await raceAbort(stat(path), signal)).isDirectory(); - 读取本地文件lib/picker.js:228
const opening = opendir(target); - 写入本地文件lib/picker.js:341
await mkdir(target); - 删除本地文件递归lib/web.js:535
void rm(sshRoutePlaceholder(input.id.trim(), '/'), { recursive: true, force: true }) - 删除本地文件递归lib/web.js:580
void rm(sshRoutePlaceholder(input.id.trim(), '/'), { recursive: true, force: true }) - 写入本地文件lib/web.js:706
await mkdir(placeholder, { recursive: true }); - 读取本地文件lib/registry.js:84
if (!existsSync(path)) - 读取本地文件lib/registry.js:96
for (const rawLine of readFileSync(path, 'utf8').split(/ ? /)) { - 写入本地文件lib/registry.js:266
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件lib/registry.js:271
writeFileSync(file, JSON.stringify({ list, currentId }, null, 2) + '\n', 'utf8'); - 读取本地文件lib/registry.js:293
if (existsSync(machinesFile)) { - 读取本地文件lib/registry.js:295
const parsed = JSON.parse(readFileSync(machinesFile, 'utf8')); - 读取本地文件lib/registry.js:311
const eligible = !existsSync(machinesFile) || (parsedExisting && list.length === 0); - 读取本地文件lib/registry.js:312
if (eligible && !corrupt && existsSync(legacyFile)) { - 写入本地文件lib/registry.js:332
renameSync(legacyFile, `${legacyFile}.bak`); - 读取本地文件lib/transport.js:66
if ((rel === '' || rel.startsWith('..') || isAbsolute(rel)) && existsSync(value) && existsSync(root)) { - 读取本地文件lib/connection.js:111
return readFileSync(expanded, 'utf8'); - 读取本地文件lib/hostkey.js:101
const parsed = JSON.parse(readFileSync(this.file, 'utf8')); - 写入本地文件lib/hostkey.js:118
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/hostkey.js:123
writeFileSync(this.file, JSON.stringify(entries, null, 2) + '\n', 'utf8'); - 执行外部命令来自配置/变量lib/credential.js:25
execFile(bin, args, { timeout: TIMEOUT, maxBuffer: 1 << 20, ...(input !== undefined ? { input } : {}) }, (error, stdout, _stderr) => { - 写入本地文件lib/credential.js:70
mkdirSync(secretsDir || '.', { recursive: true }); - 写入本地文件lib/credential.js:71
writeFileSync(join(secretsDir || '.', `${acc}.bin`), b64, 'utf8'); - 读取本地文件lib/credential.js:92
const b64 = readFileSync(join(secretsDir || '.', `${acc}.bin`), 'utf8').trim(); - 删除本地文件lib/credential.js:121
unlinkSync(join(secretsDir || '.', `${acc}.bin`)); - 读取本地文件lib/ssh-core.js:47
if (existsSync(expanded)) - 读取本地文件lib/ssh-core.js:48
return readFileSync(expanded, 'utf8'); - 读取本地文件lib/ssh-core.js:63
return readFileSync(value, 'utf8'); - 发起网络请求lib/remote-approval-gate.js:338
outcome = await approval.request({ - 读取本地文件lib/experimental.js:30
if (!existsSync(file)) - 读取本地文件lib/experimental.js:33
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件lib/experimental.js:103
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/experimental.js:109
writeFileSync(this.file, `${JSON.stringify({ toggles: { switchMachine: this.switchMachineValue } }, null, 2)}\n`, 'utf8'); - 读取本地文件lib/session-connections.js:68
if (!existsSync(file)) - 读取本地文件lib/session-connections.js:71
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件lib/session-connections.js:208
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/session-connections.js:214
writeFileSync(this.file, `${JSON.stringify({ sessions }, null, 2)}\n`, 'utf8'); - 读取本地文件lib/session-workspaces.js:297
if (!existsSync(file)) - 读取本地文件lib/session-workspaces.js:300
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件lib/session-workspaces.js:475
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/session-workspaces.js:481
writeFileSync(this.file, JSON.stringify({ roots, sessions }, null, 2) + '\n', 'utf8'); - 发起网络请求lib/web-channel.js:95
async fetch(request) { - 发起网络请求lib/core-provision.js:164
outcome = await approval.request({ - 读取本地文件lib/core-deploy.js:225
if (!existsSync(artifact)) { - 读取本地文件lib/core-deploy.js:261
await sftpWrite(sftp, temp, readFileSync(outcome.path)); - 读取本地文件lib/core-deploy.js:269
await sftpWrite(sftp, remoteTar, readFileSync(artifact)); - 读取本地文件lib/session-uploads.js:124
return readFileSync(hostPath); - 读取本地文件lib/session-uploads.js:266
if (!existsSync(action.copyHostPath)) - 读取本地文件lib/session-uploads.js:271
await writeRemoteWorkspaceFile(connection, action.remotePath, readFileSync(action.copyHostPath)); - 删除本地文件lib/output.js:119
unlinkSync(file); - 读取本地文件lib/gzip-tar.js:102
data = gunzipSync(readFileSync(archive)); - 写入本地文件lib/gzip-tar.js:133
writeFileSync(target, extractGzipTarMember(archive, member)); - 读取本地文件lib/core-vendor.js:81
return sha256Of(readFileSync(path)); - 读取本地文件lib/core-vendor.js:98
if (!existsSync(binary) || !existsSync(digest)) - 读取本地文件lib/core-vendor.js:101
return fileSha256(binary) === readFileSync(digest, 'utf8').trim() ? binary : undefined; - 执行外部命令固定命令lib/core-vendor.js:149
const run = spawnSync('curl', args, { stdio: ['ignore', 'ignore', fd] }); - 删除本地文件lib/core-vendor.js:159
rmSync(log, { force: true }); - 读取本地文件lib/core-vendor.js:165
return readFileSync(path, 'utf8'); - 写入本地文件lib/core-vendor.js:205
mkdirSync(dir, { recursive: true }); - 读取本地文件lib/core-vendor.js:212
if (!existsSync(archive)) - 写入本地文件lib/core-vendor.js:224
chmodSync(staged, 0o755); - 写入本地文件lib/core-vendor.js:226
renameSync(staged, target); - 写入本地文件lib/core-vendor.js:227
writeFileSync(`${target}.sha256`, `${binaryDigest}\n`); - 删除本地文件lib/core-vendor.js:231
rmSync(staged, { force: true }); - 删除本地文件lib/core-vendor.js:232
rmSync(archive, { force: true }); - 读取本地文件lib/core-fake.js:33
if (!existsSync(host)) - 读取本地文件lib/core-fake.js:139
const stats = method === CORE_METHODS.fsLstat ? lstatSync(host) : statSync(host); - 读取本地文件lib/core-fake.js:139
const stats = method === CORE_METHODS.fsLstat ? lstatSync(host) : statSync(host); - 读取本地文件lib/core-fake.js:152
const bytes = readFileSync(host); - 读取本地文件lib/core-fake.js:162
const bytes = readFileSync(host); - 读取本地文件lib/core-fake.js:169
const stats = statSync(host); - 写入本地文件lib/core-fake.js:188
mkdirSync(dirname(host), { recursive: true }); - 写入本地文件lib/core-fake.js:194
writeFileSync(host, bytes); - 写入本地文件lib/core-fake.js:207
mkdirSync(host); - 删除本地文件递归lib/core-fake.js:248
rmSync(root, { recursive: true, force: true }); - 写入本地文件lib/core-fake.js:249
mkdirSync(root, { recursive: true });
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-fs@deepseek-ai/dsh-fs-local@deepseek-ai/dsh-fs-sandbox@deepseek-ai/dsh-host-directory-picker@deepseek-ai/dsh-host-directory-picker-native@deepseek-ai/dsh-http-proxy@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:本地和远程(SSH)工作区集中管理。远程执行只用一条 SSH 连接(支持多跳),bash、文件、PTY 和 LSP 共用这条链路。
最近更新
在 GitHub 查看全部 →v0.2.72026-10-28
插件和远程核心都是 0.2.7。
自 v0.2.6 起 master 上的包:#84、#85、#86。对等依赖范围不变:^0.1.7-rc.2 || ^0.2.0-rc.1 || ^0.2.1-rc.1。major.minor 相同仍不会强制重新部署远程核心。
· 变更
· 实验性 sw_use_machine(REQ-I31,默认关闭):实验设置里的开关;打开后(且宿主有 workingDirectory,0.2.1+),通过 host workingDirectory.set 把当前会话切到另一台已连接的注册机器。相对路径、文件工具、默认 sw_exec 机器、项目技能扫描和新终端都会跟着走。门槛:仅 danger-full-access;目标必须已连接;落地路径必须是已注册根目录。
· 投影优先的会话 cwd 读取接缝(REQ-I31):五个原先读冻结 header.cwd 的地方改用 effectiveCwdOf(先投影,回退 header),宿主 working_directory 变化后不再把远程路径留在旧机器上。
· 测试清理(AUDIT-8):删掉七个已废弃的单元测试和未使用的 passthroughConfinedArgv 导出;行为不变。
· 修复
· 嵌套远程工作区侧终端(BUG-20):在共享 SFTP 上做规范化,不再为每个子路径新开 SSH exec,MaxSessions 不会被耗尽,侧终端能打开;取消的终端会关闭已打开的通道。
· 本地主 sw_exec 调远程副机(BUG-21):按命令目标 cwd 标记 argv;不要把宿主 confine Promise 当成 argv。
· 远程会话子代理漏掉项目技能(BUG-22):processPath 返回可路由占位符,fileUrl 仍保持远程 POSIX。
· 远程沙箱不可用时仍显示「绿色成功」(BUG-23):tier none(无 bwrap/Landlock)时横幅和状态标签改用警告样式。
· 子代理权限标签显示 Custom(BUG-24):approve=never 且沙箱 tier 匹配某个预设时,显示该预设名。
npm: dsh-workspace-enhancement@0.2.7
v0.2.62026-10-23
插件和远程核心都是 0.2.6。
自 v0.2.5 起 master 上的包:#80、#81、#82。对等依赖范围不变:^0.1.7-rc.2 || ^0.2.0-rc.1 || ^0.2.1-rc.1。major.minor 相同仍不强制重新部署远程核心。
· 变更
· 目录选择器(UX-14):悬停显示完整连接名 / user@host:port;路径可编辑,按 Enter 跳转,按 Esc 取消;面板可调整大小;分隔条上不再有灰色悬停带。
· 刷新图标(UX-15):重连/复查改为无边框刷新图标,出现在侧边栏行、选择器徽标、会话头部和设置里;侧边栏远程标记改为描边服务器图标。
· 工作区悬停(UX-16):远程工作区显示服务器 + 真实远程路径(复制仍用主机占位路径)。
· 修复
· 对话框拖拽关闭(BUG-18):新建连接 / 文件夹 / 删除 / 确认不再在按下始于内部、松开落在背景时关闭。
· 远程文件原生预览(BUG-16):远程会话文件改由受限的 workspace.read 声明,不再走本地 better-sidebar stat。
· 浏览器远程终端(BUG-17):shell 探测/查找绑定到会话路由;成功写入回调为 null 不再视为失败。
· 远程终端启动不再回显环境变量(BUG-19):启动命令用 PTY exec 作为会话载荷,登录 shell 不再回显已清理的环境变量。
npm:dsh-workspace-enhancement@0.2.6
v0.2.52026-10-19
插件和远程核心都是 0.2.5。
宿主 @deepseek-ai/dsh 0.2.1-rc 的正式声明(同时支持 0.1.7-rc / 0.2.0-rc)。经 #78 合入。
· 对等依赖(全部 13 个 seam 包):^0.1.7-rc.2 || ^0.2.0-rc.1 || ^0.2.1-rc.1
· 漂移:next 通道安装 0.2.1-rc.*;next 离开该版本线后,仍保留固定的 0.2.0-rc.1
· 文档:compatibility.md §1 中 0.2.5 那一行;PUB-9 → 已发布,PUB-10 → 本次发布
· 自 0.2.4 起的主分支还包含 REQ-A6 宿主 workspace-files 主路径(#77)和 watchLinuxScopeStart → INTERNAL_METHODS(#76)
版本门禁仍接受任何已部署的 0.2.x 核心。只有想让重建后的 0.2.5 二进制 sha 上线时才需重新部署。
已发布到 npm:dsh-workspace-enhancement@0.2.5(latest)。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-workspace-enhancement
一个 DeepSeek Harness 工作区增强插件:把本地和远程(SSH)工作区放到一个包里统一管理。一个会话可以挂多个工作区(主工作区 + 副目录声明清单);机器、TOFU 指纹与钥匙串都存在你本机的 ~/.dsh 下。底层用 ssh2。
功能
| 功能 | 说明 |
| 远程工作区 | 一条 SSH(可多级跳板)跑 bash / 文件 / PTY / 目录浏览。已经走 ctx.subprocess / ctx.fs 的工具不用改就能在远端跑 |
| 多工作区会话 | 会话标题栏「⊕ 工作区」按钮:把额外目录(本地或远程)挂成声明清单——挂/卸 + 显示名。
展开完整文档(README 剩余 1 节)
dsh-workspace-enhancement 一个 DeepSeek Harness 工作区增强插件:把本地和远程(SSH)工作区放到一个包里统一管理。一个会话可以挂多个工作区(主工作区 + 副目录声明清单);机器、TOFU 指纹与钥匙串都存在你本机的 ~/.dsh 下。底层用 ssh2。 功能 | 功能 | 说明 | | 远程工作区 | 一条 SSH(可多级跳板)跑 bash / 文件 / PTY / 目录浏览。已经走 ctx.subprocess / ctx.fs 的工具不用改就能在远端跑 | | 多工作区会话 | 会话标题栏「⊕ 工作区」按钮:把额外目录(本地或远程)挂成声明清单——挂/卸 + 显示名。模型能看到清单并直接操作 | | 添加工作区流程 | 连接侧栏(已保存机器、~/.ssh/config 别名、本机)+ 目录浏览器(面包屑、系统选择器、新建文件夹);远程「连接并打开」直接在服务器上建会话 | | 机器设置页 | 机器增删改 / 测试 / 设当前 / 忘指纹;OS 钥匙串存密码;TOFU 主机指纹(默认 accept-new) | | 会话感知 | 会话栏远程标识 + 未知/活跃/离线三态 + 重连;每会话提示里写明远程 / 副工作区上下文 | | 跨服务器执行 | sw_exec(server, command) 在已注册的指定机器上执行命令(缺省=当前会话机器)。目标 OS 每次连接探测一次(POSIX 跑 bash -c,win32 跑 pwsh -Command)。win32 宿主只在远程 Linux 工作区会话注入 bash 工具 | | 远程命令审批门 | 可选的逐机器审批门(默认关闭):每条 shell 形状的远程命令与每个远程终端在执行前先问——human 每条都问人,ai 对只读白名单(pwd、ls、git status 等)自动放行、其余问人 | | 模型工具 | sw_status、sw_connect(把本会话接到你已经注册的机器)、sw_exec | | 运行时国际化 | UI 文案、工具描述/错误与路由错误跟随设置页 Language 选项(zh/en);UI 默认跟随浏览器语言。仅协议层 bad-request: 诊断保留英文 | 工作原理 flowchart LR subgraph local["本机"] agent["agent loop编排 · 记忆 · LLM 调用"] --> seam["本插件ctx.subprocess · ctx.fs"] end subgraph remote["远程主机"] run["bash · 文件 · PTY(终端)"] end seam -- "一条 SSH(可多级跳板)" --> run 远程不用装 DSH:模型在本地编排,命令在远程跑,结果再回本地进上下文。 路由、审批门、远端围栏、会话连接怎么接:见 docs/architecture.md。已知安全边界:见 SECURITY.md。 安装 从 npm 安装(v0.1.0+) dsh plugin --profile web add dsh-workspace-enhancement 源码安装:先 npm run build(宿主加载 lib/) dsh plugin --profile web add <本仓库路径> DSH 供应链 pnpm 首次安装须知:原生构建脚本默认被拦截。先在 profile 的 pnpm-workspace.yaml(非严格 allowBuilds)放行 ssh2、cpu-features、koffi、 node-pty、dsh-subprocess-local,再执行 dsh plugin --profile web install;否则首次 add 会以非 0 退出(ERR_PNPM_IGNORED_BUILDS)且 bundle 不会被追加。 版本兼容 装哪个版本的插件,取决于你跑的 DSH 宿主家族——用 dsh --version 查看(家族版本可看 DSH 安装目录下的 @deepseek-ai/,如 <npm root -g>/@deepseek-ai/): | 你的 DSH 宿主 | 该装哪个版本 | 说明 | | 0.2.1 线(0.2.1-rc.1、0.2.1-rc.2…) | 0.2.6 | 2026-10-19 起正式支持。联合 pin 增加 ^0.2.1-rc.1,caret 覆盖同一 0.2.1 tuple 的更晚预发布(含 0.2.1-rc.2,不含 0.2.1-alpha.)。lab 在宿主 0.2.1-rc.2 上 boot 与闸门通过;PR #76 把 watchLinuxScopeStart 归为内部方法。npm/pnpm 默认不开 includePrerelease,0.2.4 满足不了 0.2.1 seam 的安装——请装 0.2.6(peer 与 0.2.5 相同) | | 0.2.0 线(0.2.0-rc.1…) | 0.2.3 及更新(当前 0.2.6) | 2026-09-29 起运行时兼容——联合 peer pin 在真实 0.2.0-rc.1 宿主上 boot 并挂载通道(boot 哨兵 SMOKE PASS)。0.2.0 宿主在 boot 时强制执行插件 peerDependencies(pin 不符会静默跳过整个 bundle)——0.2.0 宿主请装 0.2.3 及更新,不要装 0.2.2。0.2.6 仍用 ^0.2.0-rc.1 保住这条线 | | 0.1.7 线(0.1.7-rc.2…) | 0.2.2 之后的下一个发布物 | 2026-09-28 起 peer 锚定的家族(^0.1.7-rc.2,UPSTREAM-9——宿主包 latest 已翻到它)。接缝与运行时均已对齐:混合门面 watch + terminalEnvironment(UPSTREAM-5);重写后的 settings/jobs 契约下的本地化标记渲染与后台 owner/输出已修(UPSTREAM-8)——drift 哨兵 + 本地 0.1.7 家族 typecheck/单测/boot 验证 | | 0.1.5 线(0.1.5-rc.1、0.1.5-rc.2…) | 0.2.2(该线的最后一个发布物) | 运行时仍可用——双家族路径保留(0.1.5 宿主 boot 哨兵保持绿)——但 0.2.2 之后的发布物要求 0.1.7 家族,宿主升级前请停在 0.2.2。浏览器通道挂官方共享 /api(/api/dsw/<端点>) | | 0.1.2-rc.1 家族(0.1.2、0.1.3 发布物) | 0.1.3——该线的最后一个版本 | 已停止支持(2026-09-11 退场)。该线挪动了 Connection 接缝(connection.rpc.handle 已无法注册通道),不会再回填修复 | | 其它 / 更老的线 | — | 从未支持 | 宿主与插件必须同步升级。 0.1.4 线说 /api/dsw/,0.1.3 及更早说 /dsw/*,且 0.1.3 没有 readByteRange:混用会让宿主起得来、但连接/目录 UI 静默拿不到数据(机器列表读不出、目录浏览报错)。 支持窗口与上游漂移记录见 docs/compatibility.md。 路线图 公开进度:见 docs/ROADMAP.md。唯一待办真相源是 docs/backlog.md。 开发 先读 AGENTS.md(规则、命令、红线)。文档地图——什么在哪、什么不要抄——见 docs/README.md。 统一质量门:npm run check(静态闸门 + typecheck + 单测 + build + pack 冒烟)——CI 跑的就是这一条。 参考项目 - dsh-ssh:远程执行引擎(ctx.subprocess / ctx.fs provider、跳板链、PTY、directory-picker 接缝、session.route 占位)。 - dsh-remote:工作区助手(machines 注册表、TOFU、OS 钥匙串、Web UI 与设置页)。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
DobyChao/dsh-workspace-enhancement
统一管理本地与远程 SSH 工作区,一条连接跑命令和文件
相关插件 · 浏览器
智能体插件框架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,928已汉化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