Skip to content

Releases

0.3.0

Choose a tag to compare

@niechao136 niechao136 released this 09 Nov 10:20

修复

  • 设置页的「全局设置」无法修改。九个键此前一个 .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

Choose a tag to compare

@niechao136 niechao136 released this 06 Nov 03:11

修复

  • 深色主题下启用状态的开关显示为一条纯白条。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

Choose a tag to compare

@niechao136 niechao136 released this 06 Nov 02:31

修复

  • 启用/禁用开关显示成白块。关闭态用的是 --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.tgz

SHA-256

8654687726899a964d39979efea287b03807325dec71ce107bb10f07d2bf8781  dsh-server-connector-0.2.2.tgz

完整变更见 CHANGELOG.md。

0.2.1

Choose a tag to compare

@niechao136 niechao136 released this 06 Nov 01:26

修复(严重:导致 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 当前无法启动,先做任一操作再启动:

  1. 编辑 ~/.dsh/server-connector/servers.json,把 "server-connector:srv-01:password"
    改成 "DSH_SERVER_CONNECTOR_SRV_01_PASSWORD"(srv-02 同理);或
  2. 删除该文件中 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.tgz

SHA-256

c27996ed001e6d8fe338acc759bafa800d2434b530b90928a3471221ad1207b6  dsh-server-connector-0.2.1.tgz

完整变更见 CHANGELOG.md。

0.2.0

Choose a tag to compare

@niechao136 niechao136 released this 05 Nov 10:17

新增

  • 每台服务器独立的启用/禁用开关。禁用后 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.tgz

SHA-256

b7d50ed14972ac6e2ec963098ef333e56ca23024a94e39da1d50232e2d94f781  dsh-server-connector-0.2.0.tgz

兼容性

servers.json 向前兼容:缺少 enabled 按启用加载,缺少 customRules 按空列表加载。无破坏性变更。

完整变更见 CHANGELOG.md。

0.1.0

Choose a tag to compare

@niechao136 niechao136 released this 05 Nov 05:41

安装

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.tgz

tarball 为预构建产物,安装时不执行任何构建脚本。

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。