Repository navigation
DeepPilot 0.9.14 — DSH 兼容声明改为滚动区间(支持 DSH 0.2.1-rc.5 及之后),并适配 0.2.2-alpha.3 的宿主级计划任务;导出与附件改用二进制分块帧;工具行附带文件改动对比
English
-
One rolling compatibility range replaces the eight-release closed list.
engines.dshand all ten@deepseek-ai/dsh*peers now name
>=0.2.1-rc.5 <0.3.0-0. The lower bound is the newestrcrelease (npm
latestandnextboth point at0.2.1-rc.5, published 2026-10-29); every
later0.2.xrelease activates without editing the declaration, including
the currentalphachannel release0.2.2-alpha.2and later alphas. The
bound is written<0.3.0-0because DSH evaluates the range with
semver.satisfies(version, range, { includePrerelease: true }), where
<0.3.0would admit0.3.0-rc.1. -
0.2.1-rc.5is audited and admitted. The full-tree audit against
0.2.1-rc.4found no runtime break: 307 = 307 packages, 42,421 of 42,731
shared files byte-identical, zero structural manifest changes (3,706
dependency specs are mechanicalrc.4 → rc.5replacements), the evaluator
dsh-app-boot/lib/index.jsbyte-identical to rc.4, the
id: directory-pickerpatch anchor byte-identical, and all 3,271lib/
modules plus 681 entry modules with unchanged export surfaces. The 15
non-manifest files (14 changed, 1 added) live in the host's client
chat/translation surface, a build-commit constant, and version strings —
none is in this plugin's declaration or call surface.
An isolated rc.5 host composes the plugin, starts it, and answers
/phone/healthwith 200. -
The build baseline moves to
0.2.1-rc.5. The five typechecked DSH dev
packages are pinned to the exact0.2.1-rc.5release, and the vendored dev
packages move tocordis 4.0.5/schemastery 3.18.5(the pair rc.5 hosts
vendor; keeping the older pins makes npm fail withERESOLVE). The
config-schema check now runs against the0.2.1-rc.5CLI. -
One visible behaviour change. Hosts below the new lower bound — the seven
releases the previous list admitted (0.2.0-rc.2,0.2.1-alpha.3/4/5,
0.2.1-rc.2/3/4) — are refused by the activation gate after upgrading the
plugin. Upgrading the host to any release inside the range restores it. -
The bridge protocol stays v2; two optional capabilities are added.
welcome.capabilities.schedulesHostwith seven new schedule frames
(c2s.schedule.host.list/view/create/edit/run/
deleteEnded/limits),
andwelcome.capabilities.binaryFrames(item 8), are additive: an older App
ignores them and keeps the per-session frames and base64 text frames, and
the plugin's ownengines.nodestays>=22. No config field changed. -
Schedule is adapted to the DSH 0.2.2-alpha.3 host-level model. That
release rewrotedsh-schedule(noupdate/delete,editreplaces them,
paginatedlist,timing/targetrequest body), which broke the phone's
schedule list/create/edit/delete while history kept working. The plugin now
chooses one of two adapters by service shape, not by version string: the
legacy per-session path is untouched, and the host-level path adds the
capability and frames above while projecting the legacy frames onto
host-level tasks, so an older App keeps schedule list, create, edit and
delete on that host. Pulse-free details: legacy views filter to the target
session, dropended, skiprrule(the old kind enum has no equivalent),
and detect conflicts by comparing the fullexpectedrecord; new frames
carryexpectedUpdatedAt.c2s.schedule.host.deleteEndedremoves every
ended task on the host in one call (paused and active tasks stay) and
replies with thedeletedEndedcount; the App asks for confirmation first.
The wire contract is inPROTOCOL.md. -
Large attachments no longer drop the phone's connection. The attachment
read-back sent a whole image as one base64 text frame; apps before this
release only accept frames up to 1 MiB, so an original above roughly
768 KiB disconnected the phone and made it reconnect in a loop.
c2s.session.attachmentnow takes an optionalmaxFrameBytes(1 MiB when
absent). When the estimated frame exceedsmin(maxFrameBytes, 2 MiB)the
plugin answers the new error codeE_TOO_LARGEinstead of sending it, and it
waits for the send buffer to drain before each image. Visible effect: an
older App shows a placeholder for images above roughly 768 KiB instead of
disconnecting. -
Export and attachments can use binary chunked frames. The plugin
declareswelcome.capabilities.binaryFrames(a plugin capability, not a
Host one). A request carryingbinary: truegets binary frames —
[format u8 = 1][header length u32 BE][header JSON][raw bytes], see
PROTOCOL.md§1.1 — with no base64 overhead:c2s.session.exportsends
256 KiB blocks (text frames stay 48 KiB) with the same final receipt, and
c2s.session.attachmentstreamss2c.session.attachment.chunkframes
followed by a{ mediaType?, chunks, bytes }receipt, up to 12 MiB per
image (larger originals getE_TOO_LARGE). Requests withoutbinaryare
byte-for-byte unchanged; a non-booleanbinaryisE_PROTOCOL. The Funnel
helper passes binary WebSocket frames through unchanged. -
Tool rows carry the file change. For the host
str_replace_editor
str_replace/create/insertcalls, the plugin normalizes the
arguments into an optionaltool.edit
({path, operation, oldText?, newText?, insertLine?, truncated?}) on both
livetool.startevents and history pages, so the App can show a line diff
in the conversation. Either side above 16 KiB (UTF-8) sends only the path,
operation andtruncated: true. The field is additive with no capability
bit; older Apps ignore it andtool.summaryis unchanged. -
Phones paired before 0.8.3 can use automations. Their stored scopes
predateschedule.manage, and reconnecting never adds new scopes, so every
automation request failed withE_FORBIDDEN(scope schedule.manage required). On load, the plugin now addsschedule.manageto any
non-revoked device whose scopes are exactly the five pre-0.8.3 defaults and
writes the registry back; any other set is left as stored. No re-pairing
needed. -
Plugin page shows the localized README; settings nav gets its own icon.
On DSH 0.2.2 hosts (0.2.2-alpha.3,0.2.2-rc.1), the Plugins page reads a
detail document per language:locale/en.jsonandlocale/zh.jsonnow
declaremeta.detail(README.md/README.zh-CN.md), so a Chinese host
shows the Chinese README instead of the English one. The settings navigation
row for DeepPilot shows a monochrome line phone icon through the new
settings.section.iconslot instead of the default gear. Older hosts ignore
both and keep their current display. -
DSH
0.2.2-rc.1(npmnext) is checked and admitted. It ships the same
code as0.2.2-alpha.3; an isolated rc.1 host composes and starts the
plugin. The published0.9.13is refused on rc.1, sonext-channel users
need this release. The optional vendor peers appendcordis ~4.1.0and
schemastery ~3.19.0, the versions rc.1 vendors; activation never read them.
Verification: npm test 708 tests (706 pass, 1 environment-gated skip, 1
intentional TODO, 0 fail); typecheck; build (regenerated lib/); the
config-schema check against the 0.2.1-rc.5 CLI; smoke:helper on
darwin-arm64; go test ./...; bin/SHA256SUMS 6/6; a byte-identical
six-platform helper rebuild; isolated 0.2.1-rc.5 and 0.2.2-rc.1 hosts that
compose, start, and answer /phone/health with 200, with the settings page
checked in the browser on both. Not covered:
real iPhone pairing, Funnel end-to-end, and model turns.
简体中文
-
八版精确枚举改为一条滚动区间。
engines.dsh与全部十条
@deepseek-ai/dsh*peer 现在统一为>=0.2.1-rc.5 <0.3.0-0。下界是当前
最新的rc版本(npmlatest与next均指向0.2.1-rc.5,2026-10-29
发布);其后的所有0.2.x版本无需改动声明即可激活,包括当前alpha通道的
0.2.2-alpha.2及之后的 alpha。上界写成<0.3.0-0是因为 DSH 用
semver.satisfies(version, range, { includePrerelease: true })评估,
<0.3.0会放行0.3.0-rc.1。 -
0.2.1-rc.5已审计并放行。 与0.2.1-rc.4的整树审计结论是
运行层无破坏:307 = 307 个包,42,731 个共同文件中 42,421 个逐字节相同,
manifest 结构变化为 0(3,706 处依赖 spec 只是rc.4 → rc.5的机械替换),
判定器dsh-app-boot/lib/index.js与 rc.4 逐字节相同,id: directory-picker
补丁锚点逐字节相同,全树 3,271 个lib/模块与 681 个入口模块导出面零变化。
15 个非清单差异文件(14 个改动 + 1 个新增)落在宿主的客户端对话/翻译面、
构建提交号与版本串上,都不在本插件的声明面或调用面。隔离的 rc.5 宿主已实测:
插件可组合、可启动,/phone/health返回 200。 -
构建基线升到
0.2.1-rc.5。 五个参与类型检查的 DSH 开发包精确钉到
0.2.1-rc.5,vendor 开发包同步升到cordis 4.0.5/schemastery 3.18.5
(rc.5 宿主 vendored 的正是这一对;沿用旧版本会让 npm 报ERESOLVE)。
config schema 检查改用0.2.1-rc.5CLI。 -
一处用户可见的行为变化。 低于新下界的宿主——上一份名单放行的七版
(0.2.0-rc.2、0.2.1-alpha.3/4/5、0.2.1-rc.2/3/4)——在升级插件后会被
激活门拒绝;把宿主升到区间内的任意版本即可恢复。 -
桥接协议仍为 v2,新增两个可选能力位。
welcome.capabilities.schedulesHost
及七个新帧(c2s.schedule.host.list/view/create/edit/run/
deleteEnded/limits),以及welcome.capabilities.binaryFrames(见第 8 条),都是追加式
扩展:旧 App 忽略它们,继续用会话级帧和 base64 文本帧;插件自身的
engines.node仍是>=22,配置字段没有改动。 -
计划任务适配 DSH 0.2.2-alpha.3 的宿主级模型。 该版本重写了
dsh-schedule
(没有update/delete,由edit取代;list改为分页对象;请求体改为
timing/target),导致手机端计划任务的列表/新建/编辑/删除失效、历史仍可用。
插件现在按服务形状(有edit、无update)而不是版本号选择适配器:旧宿主
路径逐字节不变;宿主级路径新增上述能力位与新帧,并把旧帧映射到宿主级任务,
使旧 App 在该宿主上仍能列表/新建/编辑/删除。旧视图过滤当前会话目标、丢弃
ended、跳过rrule(旧 kind 枚举没有对应值),冲突保护用完整expected记录
逐字段比较;新帧用expectedUpdatedAt。c2s.schedule.host.deleteEnded一次删除宿主上
全部已结束任务(暂停与运行中的不受影响),回执带删除条数deletedEnded;App 先二次
确认再发送。线上契约见PROTOCOL.md。 -
大图附件不再导致手机断线。 附件回读原来把整张图 base64 后放进一个文本帧;
本版之前的 App 只收 1 MiB 以内的帧,原图超过约 768 KiB 就会断线并反复重连。
c2s.session.attachment新增可选字段maxFrameBytes(缺省按 1 MiB);估算帧
超过min(maxFrameBytes, 2 MiB)时回新错误码E_TOO_LARGE而不下发,每张图
发送前等发送缓冲排空。用户可见:旧 App 遇到约 768 KiB 以上的图片显示占位图,
不再断线。 -
导出与附件支持二进制分块帧。 插件在
welcome.capabilities声明
binaryFrames(插件自身能力,不依赖宿主)。请求带binary: true时改发二进制帧——
[格式 u8 = 1][头部长度 u32 大端][头部 JSON][原始字节],见PROTOCOL.md§1.1——
省去 base64 开销:c2s.session.export每块 256 KiB(文本帧仍为 48 KiB),最终
回执不变;c2s.session.attachment连续下发s2c.session.attachment.chunk,最后
回执{ mediaType?, chunks, bytes },单张原图上限 12 MiB(超过回E_TOO_LARGE)。
不带binary的请求逐字节不变;binary非布尔回E_PROTOCOL。Funnel helper
原样转发二进制 WebSocket 帧。 -
工具行附带文件改动。 对宿主
str_replace_editor的str_replace/create/
insert调用,插件把参数归一化为可选字段tool.edit
({path, operation, oldText?, newText?, insertLine?, truncated?}),实时tool.start
与历史分页都带,App 据此在会话里显示行级对比。任一侧正文超过 16 KiB(UTF-8)时只发
路径、操作与truncated: true。追加式扩展、不设能力位,旧 App 忽略,tool.summary不变。 -
0.8.3 之前配对的手机可以用自动化任务了。 这些设备存的权限早于
schedule.manage,
重连也不会补新权限,所以自动化任务的请求一律回E_FORBIDDEN(scope schedule.manage required)。插件载入设备注册表时,对权限恰好等于 0.8.3 之前五项默认的未撤销设备补上
schedule.manage并写回;其他组合原样保留。无需重新配对。 -
插件详情页显示对应语言的 README,设置导航有了自己的图标。 在 DSH 0.2.2
宿主(0.2.2-alpha.3、0.2.2-rc.1)上,插件管理页按语言读取详情文档:
locale/en.json与locale/zh.json新增meta.detail(README.md/
README.zh-CN.md),中文宿主显示中文 README,不再是英文版。设置页左侧导航的
DeepPilot 一行通过新插槽settings.section.icon显示单色线性手机图标,取代默认
齿轮。旧宿主忽略这两项,显示保持不变。 -
已核对并放行 DSH
0.2.2-rc.1(npmnext)。 它与0.2.2-alpha.3代码相同;
隔离的 rc.1 宿主可组合、启动插件。已发布的0.9.13在 rc.1 上会被拒绝激活,
next通道用户需要升级到本版。可选的 vendor peer 追加cordis ~4.1.0与
schemastery ~3.19.0(rc.1 自带的版本);激活从不读取这两项。
验证: npm test 708 项(706 通过、1 项环境门禁跳过、1 项有意 TODO、
0 失败);typecheck;build(重新生成 lib/);config schema 检查(针对
0.2.1-rc.5 CLI);smoke:helper(darwin-arm64);go test ./...;
bin/SHA256SUMS 6/6;六平台 helper 重建逐字节一致;隔离的 0.2.1-rc.5 与
0.2.2-rc.1 宿主上插件均成功组合、启动,/phone/health 返回 200,两者的设置页
均在浏览器中核对。未覆盖: 真机配对、Funnel 端到端、模型回合。