Repository navigation
Releases
0.3.0
修复
-
设置页的「全局设置」无法修改。九个键此前一个
.volatile()都没有,而 DSH 0.2.2
只通过volatileForm()把插件配置投影成设置表单:一个 volatile 字段都没有时整份
schema 投影为undefined,settings.describe()不会列出这个 row,
ctx.configForms.get('dsh-server-connector')永远是unavailable。于是那一块只能
显示九个只读数字——不是「值来自 profile」,而是这个 row 从来没被标记成可编辑。现在九键全部
.volatile(),设置页用ctx.configForms渲染真正的表单:改完点保存,
mutate(ops, revision)一次性写入,立即生效、不重启、不断开现有连接。
可编辑表单拿不到时(旧 Host、或该部署没有这个 row)降级为只读视图并明确说明原因,
不再渲染一排死掉的输入框。 -
volatile 值必须按 cell 读,否则保存等于没保存。
.volatile()字段解析出来的是
cosmokit 的 cell 而不是值,loader 直接原地改写这个 cell 并发
loader/volatile-update,插件不会被重新挂载、apply()不会再执行一次。
新增lib/config.js的readConfig()作为唯一读取入口(各单元在用值时才读),
并在apply()里监听loader/volatile-update,把新值转发给已经持有快照的
Pool.configure()/AuditLog.configure()/PendingQueue.configure()。
这些configure()都是原地生效:改超时不会断开连接,关审计不会删掉已有日志,
改 TTL 只影响之后入队的记录(已入队的截止时间不变)。
变更
-
删除确认改为详情页原地两段式。此前点「删除」只是入队,然后必须切到设置页找到
那条记录再确认;现在详情页点「删除」会在本页展开确认区:显示目标、后果,勾选确认框后
「确认删除」才可点。安全模型没变——请求仍然先入队(DELETE只入队返回 202),
再调用POST /pending/:id/confirm才真正删除。设置页的待确认区保留,作为异时确认的
第二入口。 -
更新后面板消失,重启才回来 —— 已按 dsh-context 的做法修好本插件这一半。
参照对象不是猜的:同一台机器上dsh-context更新时面板先消失后自己回来,
而本插件只能重启。差别只有一处——dsh-context每次挂载前先问注册表「我这个 id 是不是已经在位」:function alreadyMounted(ctx, slot, id) { const entries = ctx.slots.entries(slot) // 注册表的读取面 return entries.some((entry) => entry.options?.id === id) } // apply() 里 if (alreadyMounted(ctx, n_, r_)) return
本插件此前是盲注册。而 DSH 的插槽注册表对同一 id、同一优先级会直接抛:
list slot "settings.section" already has an entry with id "server-connector" keyed slot "main" already has an entry for key "server-connector"(
ui-slots:list 比options.id,keyed 比options.key。)这个抛错落在
slots.inject的回调里,而该注入一旦抛出就在本 fiber 余生不再重试——
于是新代码挂上、入口却没注册,页面要等进程重启才恢复。这正是「先消失、
重启才回来」在本插件侧的那一环。现在三个入口都先查在位情况,在位就原样复用、不再注册;
alreadyMounted()同时
兼容entriesOfSlot()与entries()两种读取面,读不到就退回盲注册(旧 Host 仍能工作)。
回归测试按真实注册表的重复判定(list 比 id、keyed 比 key、拒绝时抛错)搭了替身,
并断言第二次apply()一次 register 都不发起。保留上一版的兜底:注册真的失败时只丢那一个入口,不会顺带带走整批插件。
文档
- README 与
docs/design.md的 §8.2 / §8.3 / §10 更新为上述行为。
安装
# npm
dsh plugin --profile web add dsh-server-connector@0.3.0
# 或直接用本页的 tarball
dsh plugin --profile web add ./dsh-server-connector-0.3.0.tgz校验
sha256 6d2254a2947153957223b1fe66f3634f13431742722bbf1de6e8822997ff08d7 dsh-server-connector-0.3.0.tgz
npm 与本页的 tarball 是同一份字节。
0.2.3
修复
-
深色主题下启用状态的开关显示为一条纯白条。0.2.2 把滑块写死成白色,而深色主题下
轨道解析为#f9fafb(近白)——白滑块落在白轨道上,整个控件看起来没有滑块。DSH 原生开关的做法是轨道与滑块成对反转:轨道用
--dsw-alias-label-primary,
滑块用--dsw-alias-label-primary-inverted。浅色下是深轨道+白滑块,深色下是白轨道+深滑块,
两种主题都保证对比度。
实测
| 主题 | 开启(轨道 / 滑块) |
|---|---|
| 浅色 | #0f1115 / #fff |
| 深色 | #f9fafb / #353638 |
安装
dsh plugin --profile desktop add --config.minimum-release-age=0 dsh-server-connector@0.2.3装完刷新页面(或重启 dsh web)即可生效。
完整变更见 CHANGELOG.md。
0.2.2
修复
-
启用/禁用开关显示成白块。关闭态用的是
--dsw-alias-border-l4(16% 黑),
在浅色面板上几乎看不见;宽度 34px、滑块只走 14px,整体读起来像个空矩形而不是开关。现已与 DSH 自带的
ui-primitives开关完全对齐:36×20、16px 白色滑块、
关闭态rgba(0,0,0,.12)、开启态--dsw-alias-label-primary。
在运行中的桌面端逐字段比对过两个控件的计算样式,结果一致。
安装
dsh plugin --profile desktop update dsh-server-connector或指定版本:
dsh plugin --profile desktop add dsh-server-connector@0.2.2离线 / 锁定版本(tarball)
dsh plugin --profile desktop add ./dsh-server-connector-0.2.2.tgzSHA-256
8654687726899a964d39979efea287b03807325dec71ce107bb10f07d2bf8781 dsh-server-connector-0.2.2.tgz
完整变更见 CHANGELOG.md。
0.2.1
修复(严重:导致 DSH 无法启动)
密码凭证引用格式非法。此前生成 server-connector:<id>:password,含冒号与连字符,而
@deepseek-ai/dsh-credentials 要求所有引用匹配 /^[A-Za-z_][A-Za-z0-9_]*$/。
该非法引用一旦落盘,下次启动时 credentials 插件解析失败;由于它是必需插件,
整个 Host 起不来——禁用本插件也无效,因为坏值已在磁盘上。
三处修复:改为生成 DSH_SERVER_CONNECTOR_<ID>_PASSWORD 并校验调用方传入的引用;
加载时迁移旧格式,让已落盘记录继续可用;迁移后回写文件,避免后续副本仍带非法值。
已合法的文件不会被重写;其他非法引用仍拒绝(静默改写可能指向另一个密钥)。
升级说明
升级到 0.2.1 后无需手动改文件,插件加载时会自动迁移并回写。
若 DSH 当前无法启动,先做任一操作再启动:
- 编辑
~/.dsh/server-connector/servers.json,把"server-connector:srv-01:password"
改成"DSH_SERVER_CONNECTOR_SRV_01_PASSWORD"(srv-02同理);或 - 删除该文件中
auth.kind为password的服务器记录。
迁移只改引用名,不搬运密钥值。升级后原密码可能需要重新输入一次。
安装
dsh plugin --profile web add dsh-server-connector@0.2.1离线 / 锁定版本(tarball)
dsh plugin --profile web add ./dsh-server-connector-0.2.1.tgzSHA-256
c27996ed001e6d8fe338acc759bafa800d2434b530b90928a3471221ad1207b6 dsh-server-connector-0.2.1.tgz
完整变更见 CHANGELOG.md。
0.2.0
新增
- 每台服务器独立的启用/禁用开关。禁用后
srv_list与系统提示都不再列出该服务器,任何srv_*调用返回SERVER_DISABLED;面板里该行置灰并标注「已禁用」,随时可恢复。已连接的服务器需先断开。切换不走待确认区,写审计事件。 - 每台服务器独立的自定义高危规则。详情页可给单台机器补规则(正则 +
confirm/block),与内置 20 条走同一套判定。保存时六道校验(长度、可编译、不匹配空串、拒绝嵌套量词、必中样例、id 冲突),配套试跑接口。
修复
- 长任务读取报「belongs to another session」:
srv_job_output/srv_job_kill把调用者算成undefined,导致本会话发起的后台任务对自己不可见。 - Windows 上私钥认证无法提交:路径校验强制
/开头,C:\…与 UNC 路径一律被拒。
安装
dsh plugin --profile web add dsh-server-connector@0.2.0离线 / 锁定版本(tarball)
下载本页附带的 dsh-server-connector-0.2.0.tgz,然后:
dsh plugin --profile web add ./dsh-server-connector-0.2.0.tgzSHA-256
b7d50ed14972ac6e2ec963098ef333e56ca23024a94e39da1d50232e2d94f781 dsh-server-connector-0.2.0.tgz
兼容性
servers.json 向前兼容:缺少 enabled 按启用加载,缺少 customRules 按空列表加载。无破坏性变更。
完整变更见 CHANGELOG.md。
0.1.0
安装
dsh plugin --profile web add dsh-server-connector离线 / 锁定版本(tarball)
下载本页附带的 dsh-server-connector-0.1.0.tgz,然后:
dsh plugin --profile web add ./dsh-server-connector-0.1.0.tgztarball 为预构建产物,安装时不执行任何构建脚本。
SHA-256
a1fd15f330fbe9c784cc8301fe6524400f7a2bc37f63f5acd332610d3746768a dsh-server-connector-0.1.0.tgz
校验
sha256sum dsh-server-connector-0.1.0.tgz # Linux / macOS
certutil -hashfile dsh-server-connector-0.1.0.tgz SHA256 # Windows其他渠道
- npm:
dsh-server-connector - 源码:
dsh plugin --profile web add github:niechao136/dsh-server-connector
运行环境:DSH >=0.1.0-rc.6 <0.3.0,Node ^22.19.0 || >=24.0.0。