本次发布包含多项核心架构升级与新特性:远程访问链路(remote-bridge)接管全部网络接入基建并收敛入站网关,家族聚合包正式退役旧浏览器镜像 remote-web-ui;任务看板引入基于 Go 独立自建中枢 team-hub 的团队协作扩展体系,并支持卡片图片与文件附件;浏览器视图新增直连外部浏览器的 real-browser CDP 模式;官方插件页面接入统一展示元数据通道与内置插件分组。四个卫星仓在本版同版本对齐到 0.4.13,其中皮肤中心彻底修复 Windows 平台原生 addon 引起的插件安装阻塞缺陷。
远程接入栈完整迁入
remote-bridge,聚合包退役remote-web-ui:网络接入基建(中继注册、云穿透隧道、Durable Object 连接器、局域网绑定转发与防火墙控制)全数收敛至packages/dsh-remote-bridge,新增仅绑定回环地址的入站网关(ingress-gate),严格将外部暴露面收敛至/ios/v1协议。家族聚合包@linxin666/dsh-web-all移除remote-web-ui挂载行,存量 profile 凭 tombstone 导出与retiredPlugins清单平滑兼容,不中断启动流程;中继身份目录与设备状态保留历史路径,已配对移动端无需重新配对。
任务看板团队协作与 Go 单二进制自托管服务team-hub:引入多 Host 共享的团队协作扩展(@linxin666/dsh-task-board-team),配合全新独立 Go 服务team-hub(SQLite 存储、内存重放与实时 WebSocket 频道,零外部依赖)。看板扩展契约新增followUp与rework可选能力;支持人类或 Agent 负责人、GitHub OAuth 登录与管理员邮箱初始化引导、Host Token 节点认领与带租约执行、待答问题求助路由与前置运行工作区认领闸门。
任务看板支持卡片附件,隔离模型凭据:看板 schema 升级至 v7,卡片支持上传图片与文件附件;账本严格遵循「只存元数据与 sha256 摘要,绝不存原始字节」,字节经由官方附件存储(ctx.attachments)校验。修复模型选择器中提供商名称的展示;provider 集成凭据不再裸露在线上广播账本中。
浏览器视图新增真实浏览器 CDP 模式:dsh-browser-view新增对外部 Chrome/Edge 进程 CDP 端点(http://127.0.0.1:9222)的直连接管模式(显式 opt-in),支持在真实 profile 登录态下接管页面与投屏,且不干扰默认隔离浏览器模式。
插件页展示元数据与内置插件分组:全家族包补齐官方locale/<lang>.json展示元数据(支持中英双语,部分含俄语),聚合包家族行展示面向用户的本地化名称;官方插件页面底部新增内置插件分组与更新检测工具栏;彻底清除 5 个历史已退役家族的空壳导出。
四个卫星仓同版本对齐到0.4.13:四个卫星仓先发并对齐至0.4.13。皮肤中心(dsh-skins,66ec9f1)将 CSS 安全转换隔绝在短生命周期 worker 进程中,彻底解决 Windows 下原生 addon 导致插件安装失败的问题;宠物(dsh-pet,9ccb048)、社区插件索引(dsh-community-plugins,3b0673d)与预设中心(dsh-presets,92c3154)在本区间无功能变更,同批对齐发布。
升级须知
-
更新任务误报已在 0.4.13 修复:
plugin-manager不再把 pnpm 11 的构建脚本门禁(ERR_PNPM_IGNORED_BUILDS)造成的非零退出码报成失败;此前该情形会被报成更新失败,而安装其实已经生效。措辞按本版修复处理,状态判定与实际安装结果保持一致。 -
远程访问路径变更:浏览器配对路径随
remote-web-ui从聚合退役,手机端走remote-bridge的/ios/v1协议;若此前曾单独安装过@linxin666/dsh-remote-web-ui,升级后必须卸载它(否则与 bridge 争同一个中继身份与租约)。已配对的移动端无需重新配对。 -
两处行为变化:设置页「内置插件」分区由聚合默认下线(禁用本插件可恢复);任务看板 wire 不再下发 provider 集成凭证字段。
-
0.3.x 存量人工迁移:不存在 Doctor 预启动迁移;旧包
@linxin666/dsh-web-ui-all冻结在 0.3.6 且已 deprecated,其网关在当前运行时(rc.5)不服务,无法 GUI 自动迁移。给出可执行的三步迁移步骤:dsh plugin remove @linxin666/dsh-web-ui-alldsh plugin add @linxin666/dsh-web-all@0.4.13- 把
dsh.profile.bundles里的旧名原位替换为新名@linxin666/dsh-web-all(官方 CLI 只写dependencies,不写bundles;漏掉第三步会skipping profile bundle)。
若迁移中途中断(profile 变成空
dependencies、bundles仍指旧名),不要按提示执行dsh plugin install(会把已废弃的 0.3.6 装回来),按上面三步重做。 -
平台验证声明:本版在 macOS 实测通过;Linux 与 Windows 未验证。未验证的具体面包括:新增回环监听(
ingress-gate)、$DSH_HOME/remote-bridge/model-efforts.json的新权限位(目录 0700 / 文件 0600)、以及task-board-team的路径解析(含 Windows 盘符与~,只读)。 -
退役家族说明:
doctor/desktop-launcher/dsh-perf/describe-image/model-capabilities五个家族的残留导出已清除,它们在 0.4.12 就已不挂载,无功能损失;残留行会被记为failed import但不影响宿主启动。
新功能
- [remote-bridge] 接管网络接入栈,并从聚合包中退役 remote-web-ui
- [task-board] 支持卡片附件
- [team-hub] 成员支持通过评论可
@的 handle 标识命名 - [team-hub] 支持通过账号服务按邮箱初始化首个管理员
- [team-hub] 支持通过账号服务按邮箱邀请成员
- [team-hub] 在成员传输形态中暴露 account_user_id
- [team-hub] 新增 Go 静态单二进制自托管运行时
- [team-hub] 新增 Node 自托管运行时
- [plugin-manager] 在官方插件页面列出内置插件
- [team-hub] 支持凭账号服务断言完成成员登录
- [remote-bridge] 支持经由托管中继投递推送通知
- [remote-bridge] 在设备花名册中携带中继令牌
- [team-hub] 支持初始化首个团队及其首位管理员
- [plugins] 本地化插件页展示元数据并彻底移除退役家族
- [browser-view] 新增真实浏览器 CDP 模式
- [remote-bridge] 记住每个模型的推理强度配置
- [team-hub] 强制执行 A4 Host 契约
- [task-board] 支持从扩展任务草稿转发执行目标
- [task-board-team] 新增 team-hub provider 扩展包
- [team-hub] 新增 Agent 花名册并重塑问题与活动流形态
- [team-hub] 新增 issue 状态机、租约、问题、评论、收件箱与路由
- [team-hub] 新增 GitHub 登录、会话与 Host 令牌、成员关系与 APNs 推送
- [team-hub] 新增 D1 schema、核心模块与团队频道
- [task-board] 看板扩展契约新增可选的 follow-up 与 rework 能力
修复
- [remote-bridge] 向配对二维码提供 socket URL,而非源地址自身的协议方案
- [remote-bridge] 将配对触发按钮安放在页脚末端
- [market] 适配皮肤 CSS 隔离转换
- [task-board] 在选择器中展示模型提供商
- [team-hub] 正确解析含转义换行的 APNs p8 密钥
- [team-hub] 统一会话密钥环境变量名称
- [task-board] provider 集成凭据不暴露在看板广播数据中
- [remote-bridge] 中继推送时同步传递卡片解除状态
- [task-board-team] 仅在绑定有效运行工作区时认领 issue
- [remote-bridge] 仅丢弃判定为过期的档位,且仅在确实过期时丢弃
- [remote-bridge] 保留可读的推理强度行并扣留过期档位
- [task-board-team] 对客户端服务进行探测而非直接读取
- [git-graph] 消除分支胶囊定位引发的反馈死循环 (#1972)
- [task-board-team] 在令牌修复与重连期间保留待结算项并与 hub 对齐
- [task-board-team] 尚有待结算项时不再认领新卡片,对齐 hub 准入门禁
- [task-board-team] 对 hub 回复已过期的结算停止无效重试
- [task-board-team] 通过单次在途请求认领返工,对被拒绝的结算执行重试
- [team-hub] 每次全新认领时铸造新的尝试编号
- [team-hub] 遇到冲突的 Agent 名称时跳过而非导致整批注册失败
- [team-hub] 按限额命名 Host 配额测试并列出邀请状态码
- [task-board-team] 在频道升级请求头中提供 Host Token
- [task-board-team] 严格契合冻结的传输样例
- [task-board-team] 经由草稿钉住成员预设并等待 hub 应答
其他改动
- 将远程访问呈现为移动端 App,不再展示已退役的浏览器镜像路径
- [market] 按钉住的输入源同步市场静态资产
- [satellites] 钉住皮肤中心 CSS worker 修复提交
- [team-hub] 对齐初始化引导契约、文档与笔记中的邮箱查询逻辑
- [team-hub] 退役 Worker 与 Node 实现,保留单一 Go hub 实现
- [archive] 将跨仓相对链接替换为纯文本引用
- [archive] 修复断言 jwks 端点并收紧环境矩阵
- [archive] 补充自托管服务部署交接文档
- [task-board] 记录团队协作功能交付总结
- 移除空文件
- [remote-bridge,task-board-remote] 调整两处测试用例以符合 test-standards BDD 规范
- [task-board-remote] 在传输层钉住镜像卡片的团队载荷
- [notes] 记录中继投递的技术路线与决策
- [remote-bridge] 补充中继链路测试覆盖
- [notes] 将团队协作笔记迁移至 implemented 并记录部署事实
- [task-board-team] 采纳 hub 端初始化引导契约样例
- [archive] 归档已部署 team-hub 的交接记录
- [team-hub] 在 workers.dev 域名下提供 hub 服务
- [team-hub] 将部署指向已创建的 D1 数据库
- [team-hub] 改用 cf 工具而非 wrangler 进行部署
- [team-hub] 统一通过 cf 命令行工具部署
- [market] 再次按钉住的输入源同步市场资产
- [sync-shared] 适配浏览器设置卡片的跨包副本同步
- [task-board-team] 使账本路径断言具备跨平台兼容能力
- [archive] 补充 git-graph 分支胶囊验证截图 (#1972)
- [task-board-team] 列明哪些结算拒绝属于可重试情形
- [task-board-team] 按其实际测试内容为租约失效认领测试命名
- [task-board-team] 将过期的结算明确描述为终态
- [task-board-team] 明确评论线程比对所读取的样例名称
- [task-board-team] 阐明认领、重连与结算的具体行为
- [team-hub] 阐明谁负责铸造 attempt 以及命名冲突的处理方式
- [team-hub] 逐一校验每个契约样例元素与每项事件
- [team-hub] 指出规格正文中仍存在出入的一处状态码
- [team-hub] 记录 A4 阶段决策与待同步正文
- [team-hub] 敲定 Host 契约、socket 鉴权与令牌单元
- [team-hub] 发布 Host 契约样例文件
- 在按路径过滤的车道中运行 team-hub 类型检查与测试
- [task-board] 记录任务草稿执行目标的设计事实
- [team-hub] 将实现决策吸纳进通信协议规范
- [task-board-team] 注册包并在词表中补充俄文文案
- [team-hub] 定义 Agent 列表、问题与活动流的传输结构
- [team-hub] 记录部署输入项与协议偏离点
- [team-hub] 搭建独立 Workers 工程脚手架
- [team-hub] 补充身份、收件箱、问题与活动的只读接口
- [task-board] 在包契约规则中列出 follow-up 与 rework
- [task-board] 在扩展契约笔记中记录 follow-up 与 rework
- [team-hub] 明确返工执行前必须先认领
- [team-hub] 补齐协议评审中发现的缺失项
- [team-hub] 新增 team-hub 通信协议规格 v1
- [notes] 提出任务看板团队协作扩展提案
- [plugin-manager] 明确迁移映射表的唯一写入者
- [readme] 从 GitHub API 同步贡献者名单
English
This release delivers core architectural upgrades and new capabilities: the remote access path (remote-bridge) takes over the full network ingress infrastructure with a hardened ingress gate, while the aggregate package officially retires the legacy browser mirror remote-web-ui; the task board introduces team collaboration powered by the standalone Go self-hosted hub team-hub and adds card attachments for images and files; the browser view introduces a real-browser CDP mode; and official plugin page display metadata and built-in plugin grouping are established. The four satellite repositories align to 0.4.13, with the skin center isolating CSS safety transforms in short-lived workers to eliminate plugin installation failures on Windows.
The remote ingress stack moves into
remote-bridge, and the aggregate retiresremote-web-ui: All network ingress infrastructure (relay registry, cloudflared tunnels, Durable Object connectors, LAN forwarding and firewall controls) converges intopackages/dsh-remote-bridge. A loopback-only ingress gateway (ingress-gate) strictly restricts the external attack surface to the/ios/v1protocol. The aggregate@linxin666/dsh-web-allremovesremote-web-ui, with existing profiles smoothly supported via tombstone exports andretiredPluginsregistration without launcher interruptions; relay identity and device states keep their historical paths so paired devices remain paired.
Task board team collaboration and the Go standalone serviceteam-hub: Introduces multi-host team collaboration via@linxin666/dsh-task-board-teamand the standalone Go serviceteam-hub(SQLite storage, in-memory replay and real-time WebSocket channels, zero external dependencies). The task board extension contract adds optionalfollowUpandreworkcapabilities, supporting human or Agent assignees, GitHub OAuth login and admin email bootstrap, Host Token node claims with leases, question routing and workspace claim gates.
Task board card attachments and credential isolation: The task board schema upgrades to v7, supporting image and file card attachments. The ledger stores metadata and sha256 digests only—never raw bytes—with bytes validated through official attachment storage (ctx.attachments). Model pickers now display the model provider name, and provider integration credentials stay off the public board wire.
Browser view gains real-browser CDP mode:dsh-browser-viewadds an explicit opt-in mode connecting directly to an external Chrome/Edge CDP endpoint (http://127.0.0.1:9222), allowing page inspection and screencasting using real profile logins without altering the default isolated browser mode.
Plugin page display metadata and built-in plugin group: All family packages supply officiallocale/<lang>.jsondisplay metadata (bilingual Chinese/English, with Russian where applicable), rendering localized display titles in the aggregate; the official Plugins page gains a built-in plugin group and an update toolbar; five retired plugin shells are fully removed.
The four satellite repositories align to0.4.13: All four satellites publish first and align to0.4.13. The skin center (dsh-skins,66ec9f1) isolates CSS safety transforms inside short-lived worker processes, resolving Windows plugin install failures caused by native addons; pet (dsh-pet,9ccb048), community plugin index (dsh-community-plugins,3b0673d) and preset center (dsh-presets,92c3154) carry no functional changes and align their version numbers.
Upgrade Notes
-
Update Task False Alarms Fixed in 0.4.13:
plugin-managerno longer reports a non-zero exit code caused by pnpm 11's build script gate (ERR_PNPM_IGNORED_BUILDS) as a failure; previously this condition was reported as an update failure even though installation had already taken effect. Fixed in this release to align status reporting with actual installation results. -
Remote Access Path Changes: The browser pairing path is retired from the aggregate along with
remote-web-ui, and mobile devices connect viaremote-bridge's/ios/v1protocol; if@linxin666/dsh-remote-web-uiwas previously installed standalone, it must be uninstalled after upgrading (otherwise it will contend with bridge for the same relay identity and lease). Paired mobile devices do not need to re-pair. -
Two Behavioral Changes: The "Built-in Plugins" section in Settings is taken offline by default by the aggregate (disabling this plugin restores it); the task board wire no longer transmits provider integration credential fields.
-
Manual Migration for 0.3.x: There is no Doctor pre-launch migration; the legacy package
@linxin666/dsh-web-ui-allis frozen at 0.3.6 and deprecated, and its gateway does not serve under the current runtime (rc.5), making automatic GUI migration impossible. Follow these three executable steps:dsh plugin remove @linxin666/dsh-web-ui-alldsh plugin add @linxin666/dsh-web-all@0.4.13- In-place replace the legacy name with the new name
@linxin666/dsh-web-allindsh.profile.bundles(the official CLI only writesdependencies, notbundles; omitting the third step results inskipping profile bundle).
If migration is interrupted halfway (the profile ends up with empty
dependencieswhilebundlesstill references the legacy package name), do not rundsh plugin installas prompted (which reinstalls the deprecated 0.3.6); redo the three steps above instead. -
Platform Verification Notice: This release was tested and verified on macOS; Linux and Windows remain unverified. Specific unverified areas comprise: the newly added loopback listener (
ingress-gate), new permission bits for$DSH_HOME/remote-bridge/model-efforts.json(directory 0700 / file 0600), and path resolution intask-board-team(including Windows drive letters and~, read-only). -
Retired Plugin Families Notice: Residual exports for the five families
doctor/desktop-launcher/dsh-perf/describe-image/model-capabilitieshave been cleared; they were already unmounted in 0.4.12, with no loss of functionality; residual lines will be logged asfailed importbut do not affect host startup.
New Features
- [remote-bridge] Take over the ingress stack and retire remote-web-ui from the aggregate
- [task-board] Add card attachments
- [team-hub] Name members by a mention handle a comment can @
- [team-hub] Bootstrap the first admin by email through the account service
- [team-hub] Invite members by email through the account service
- [team-hub] Expose account_user_id on the member wire shape
- [team-hub] Add the Go self-hosted runtime as a static binary
- [team-hub] Add self-hosted Node runtime
- [plugin-manager] List built-in plugins on the official Plugins page
- [team-hub] Sign members in with account service assertions
- [remote-bridge] Deliver push notifications through the hosted relay
- [remote-bridge] Carry the relay token in the device roster
- [team-hub] Bootstrap the first team and its first admin
- [plugins] Localize plugin page display metadata and remove retired families
- [browser-view] Add real-browser CDP mode
- [remote-bridge] Remember each model's reasoning effort
- [team-hub] Enforce the A4 host contract
- [task-board] Forward execution targets from an extension task draft
- [task-board-team] Add the team-hub provider extension package
- [team-hub] Add the agent roster and reshape questions and activity
- [team-hub] Add the issue state machine, leases, questions, comments, inbox and router
- [team-hub] Add GitHub login, session and host tokens, membership and APNs
- [team-hub] Add the D1 schema, core modules and the team channel
- [task-board] Add optional follow-up and rework provider capabilities
Bug Fixes
- [remote-bridge] Hand the pairing QR a socket URL, not the origin's own scheme
- [remote-bridge] Seat the pairing trigger on the footer's trailing edge
- [market] Support isolated skin CSS transform
- [task-board] Show model provider in pickers
- [team-hub] Read the APNs p8 key through its escaped newlines
- [team-hub] Unify the session key environment name
- [task-board] Keep provider integration credentials off the board wire
- [remote-bridge] Carry the card dismissal across the relay push
- [task-board-team] Claim issues only with a run workspace bound
- [remote-bridge] Drop only the level judged stale, and only a really stale one
- [remote-bridge] Keep readable effort rows and withhold stale levels
- [task-board-team] Probe client services instead of reading them
- [git-graph] Stop the hero chip placement feedback loop (#1972)
- [task-board-team] Keep an owed settlement through a token fix and reconnect like the hub
- [task-board-team] Never claim a card whose settlement is still owed, and match the hub gates
- [task-board-team] Stop retrying a settlement the hub answered as expired
- [task-board-team] Claim a rework through one flight and retry refused settlements
- [team-hub] Mint a new attempt on every fresh claim
- [team-hub] Skip a clashing agent name instead of failing the registration
- [team-hub] Name the host quota test after its limit and list the invite status codes
- [task-board-team] Present the Host Token in the channel upgrade header
- [task-board-team] Conform to the frozen wire samples
- [task-board-team] Pin the member preset through the draft and wait for the hub
Other Changes
- Present remote access as the phone app, not the retired browser path
- [market] Sync assets with pinned inputs
- [satellites] Pin skin CSS worker fix
- [team-hub] Align bootstrap contract, docs, and notes with email lookup
- [team-hub] Retire the Worker and Node implementations, keep the Go hub
- [archive] Replace cross-repo relative links with plain text references
- [archive] Fix assertion jwks endpoint and tighten env matrix
- [archive] Add self-hosted services deployment handoff document
- [task-board] Record team collaboration delivery summary
- Remove empty file
- [remote-bridge,task-board-remote] Meet test-standards BDD rules in two specs
- [task-board-remote] Pin the mirror card's team payload on the wire
- [notes] Record the relay delivery road
- [remote-bridge] Cover the relay road
- [notes] Migrate team collaboration note to implemented and record deployment facts
- [task-board-team] Accept the hub-side bootstrap contract sample
- [archive] Hand off the deployed team hub
- [team-hub] Serve the hub on its workers.dev hostname
- [team-hub] Point the deployment at the created D1 database
- [team-hub] Deploy with cf instead of wrangler
- [team-hub] Deploy through cf instead of wrangler
- [market] Sync assets with pinned inputs
- [sync-shared] Account for browser settings card copies
- [task-board-team] Make ledger path assertion platform aware
- [archive] Add the git-graph hero chip verification image (#1972)
- [task-board-team] List which settlement refusals stay retryable
- [task-board-team] Name the lapsed-lease claim test after what it exercises
- [task-board-team] Describe an expired settlement as final
- [task-board-team] Name the sample the comment-thread comparison reads
- [task-board-team] State the claim, reconnect and settlement behaviour
- [team-hub] State who mints the attempt and how a name clash registers
- [team-hub] Compare every contract sample element and every event
- [team-hub] Point at the one status code the spec text still contradicts
- [team-hub] Record the A4 decisions and the text still to sync
- [team-hub] Settle the host contract, socket auth and token units
- [team-hub] Publish the host contract samples
- Run team-hub typecheck and tests in a path-filtered lane
- [task-board] Record the task draft execution targets
- [team-hub] Fold implementation decisions into the protocol
- [task-board-team] Register the package and add its Russian copy
- [team-hub] Define agent list and question and activity wire shapes
- [team-hub] Record deployment inputs and the protocol deviations
- [team-hub] Scaffold the standalone Workers project
- [team-hub] Add identity, inbox, question and activity reads
- [task-board] List follow-up and rework in the package contract rules
- [task-board] Record follow-up and rework in the extension contract note
- [team-hub] Claim before rework
- [team-hub] Close protocol review gaps
- [team-hub] Add team-hub protocol specification v1
- [notes] Propose task board team collaboration extension
- [plugin-manager] Make the migration map name its one writer
- [readme] Sync contributor list from GitHub API
Generated automatically by the release pipeline (scripts/release-notes.mjs).
由发布管线自动生成(scripts/release-notes.mjs)。