Repository navigation
Releases: HunYiSage/dsh-purge
Releases · HunYiSage/dsh-purge
Release list
v1.1.90
1.1.90
中文
- 版本 1.1.90。
- #208 Android 切后台回来输入框整块消失:撤销按钮原先注册在宿主的
conversation.input.right槽位,这个槽位渲染在 composer 的 React 子树里。宿主在提交阶段只要抛一次错,React 会把整棵树卸载,症状就是输入框连带按钮一起没了。- 撤销按钮不再走任何槽位。改为在
body上挂一个position: fixed的宿主节点,用createPortal把按钮传进去,渲染树完全脱离 composer;composer 内部再出错也牵连不到它。 - 位置按最靠下的那组
.standardControls(就是 composer 底部工具条)的矩形实时对齐,并给它留padding-left空位,不遮住模型选择器;预留宽度跟着按钮实测宽度走。 - 会话切换、窗口尺寸变化、页面滚动都会重新对齐;没有会话时按钮不显示、留白也一起归还。
- 锚点查找带缓存和节流,只在锚点缺失或掉线时才扫一次 DOM,长会话滚动不受影响。
- 撤销按钮不再走任何槽位。改为在
- 验证:
client.js语法检查通过;conversation.input.right在本插件中已无任何注册点;双宿主standardControls类名核对一致。
English
- 1.1.90.
- #208 the whole composer vanished after switching apps: the undo button was registered into the host's
conversation.input.rightslot, which renders inside the composer's React subtree. One throw during a commit phase makes React unmount that tree, and the input box goes with it.- The undo button no longer uses any slot. It renders through
createPortalinto aposition: fixedhost appended tobody, fully outside the composer subtree, so a composer error can no longer take it down. - It aligns itself to the rectangle of the bottom-most
.standardControls(the composer toolbar) and reservespadding-leftthere so the model picker is not covered; the reserved width follows the button's measured width. - It re-aligns on session change, resize and scroll, and releases both the button and the reserved space when there is no session.
- Anchor lookup is cached and throttled: the DOM is scanned only when the anchor is missing or detached, so long chats keep scrolling smoothly.
- The undo button no longer uses any slot. It renders through
- Verification:
client.jspasses the syntax check; noconversation.input.rightregistration remains in the plugin; thestandardControlsclass name matches on both hosts.
1.1.89
中文
- 版本 1.1.89。
- #204 工作目录提示恢复:
deployment:persona-suffix优先写会话真实 cwd 字面量(interpolate: false),拿不到才退静态描述;同时把cwd补进assembly.variables,用户自己模板里的{{cwd}}也能渲染。0.2.1 不再抛unknown prompt variable,工作目录提示不再变成the current workspace。 - #207 桌面静默退出可诊断:
- 新增 #92:宿主每次退出都把
code/signal/ stderr 尾巴写进%TEMP%\dsh-purge-desktop.log(不再只记 signal 分支)。 - 新增 #93:主进程记录
boot/before-quit/will-quit/quit code/window-all-closed/render-process-gone(附渲染进程最后几行 console)/child-process-gone/ 信号 / 每分钟心跳。只用uncaughtExceptionMonitor,不改变崩溃行为。 - asar 换包脚本:
Move-Item失败后改用.NET File.Move重试,成功/失败都Test-Path复核并记录真实错误;空闲改名脚本同样记录失败原因(限流,不刷屏)。
- 新增 #92:宿主每次退出都把
- #202 原子写:
atomicWriteFile保持writeFile + rename(不依赖 hostFs 白名单里没有的open);CLI--apply成功后补打应用戳,下次启动 settle 不会误判未对齐再重打。 - 修复重复标记:#32 / #53 的 export 行锚点原来自我匹配,每点一次「应用」就多追加一行注释;改成带负向前瞻的正则,连续应用保持幂等。
- 验证:web + desktop 双宿主现有补丁全部 applied;rc.2 夹具与 rc.5 实机 pattern 全绿;沙箱 42 个目标文件 apply/revert 字节级还原;生成的 PowerShell 脚本通过
Parser::ParseFile语法检查。
English
- 1.1.89.
- #204 working directory restored: the persona suffix now uses the real session cwd as a literal (
interpolate: false) and only falls back to the static sentence when no cwd is available;cwdis also added toassembly.variables, so user templates with{{cwd}}render. 0.2.1 no longer throwsunknown prompt variable, and the prompt keeps the real path instead ofthe current workspace. - #207 desktop exit is diagnosable:
- New #92: every host exit writes
code/signal/ stderr tail to%TEMP%\dsh-purge-desktop.log. - New #93: main process logs
boot/before-quit/will-quit/quit code/window-all-closed/render-process-gone(with the renderer console tail) /child-process-gone/ signals / a one-minute heartbeat. UsesuncaughtExceptionMonitoronly, so crash behavior is unchanged. - ASAR swap: falls back to
.NET File.MoveafterMove-Itemfails, verifies withTest-Path, and records the real error; the idle rename script logs failures too (rate-limited).
- New #92: every host exit writes
- #202 atomic writes:
atomicWriteFilestays onwriteFile + rename(the hostFs whitelist has noopen); the CLI--applynow also writes the applied stamp so the next boot's settle does not re-apply. - Duplicate markers fixed: the #32 / #53 export-line anchors matched their own output and appended another comment on every Apply; both now use negative lookaheads and are idempotent.
- Verified: all existing patches applied on both web and desktop hosts; rc.2 fixtures and rc.5 real files green; sandbox apply/revert restored 42 target files byte-for-byte; generated PowerShell scripts pass
Parser::ParseFile.
1.1.88
中文
- 版本 1.1.88。
- 双版本适配(rc.2 + rc.5):#32/#36/#50/#53/#57/#62 在 0.2.1-rc.2 与 0.2.1-rc.5 上都能命中。旧 pattern 全部保留,rc.5 的新 pattern 追加,不再用新文案覆盖旧版。
- #36 升级字段:bash/pwsh 的
sandbox_permissionsjustification 描述一并清洗;补上Approval is auto-granted.大写 marker,tool-fs 不再因为大小写差异永远漂移。 - #50 跨会话引用:去掉 untrusted / “不要跟随指令”话术,保留只读快照的事实描述。
- #57 developer role:rc.5 responses 通路的
instructionRole分支纳入 openai/azure 白名单。 - #62 审批 fail-open:rc.5 的
void 0分支(无 approval 服务 / 无 agent / unavailable)全部放行;已打过旧 approval 分支的文件不会因 marker 被整条跳过。 - #32 / #53 状态标记:#53 不再共用 #32 的注释 marker,旧宿主不会假绿;rc.5 残留的
local web GUI前缀与DeepSeek Harness Web GUI描述已清掉。 - 宿主门禁:
package.json增加dshTargets,状态页同时接受 rc.2 与 rc.5。 - 验证:web + desktop 双宿主 73/85 applied、0 pending、0 drifted;沙箱 42 个目标文件 apply/revert 字节级还原通过。
English
- 1.1.88.
- Dual-version support (rc.2 + rc.5): patches #32/#36/#50/#53/#57/#62 now match both 0.2.1-rc.2 and 0.2.1-rc.5. Old patterns are kept; rc.5 patterns are added instead of replacing them.
- #36 escalation schema: also neutralizes the bash/pwsh
sandbox_permissionsjustification text; adds the capitalisedApproval is auto-granted.marker so tool-fs no longer drifts on case alone. - #50 session references: drops untrusted / "do not follow instructions" framing while keeping the read-only snapshot wording.
- #57 developer role: the rc.5
instructionRoleresponses branch is included in the openai/azure allowlist. - #62 approval fail-open: rc.5
void 0branches (no approval service / no agent / unavailable) all allow; files already stamped by the old approval branch are re-processed instead of skipped. - #32 / #53 markers: #53 no longer shares #32's comment marker, so older hosts cannot show a false green; rc.5 leftovers (
local web GUIprefix andDeepSeek Harness Web GUIdescription) are removed. - Host gate:
package.jsongainsdshTargets, and the status page accepts both rc.2 and rc.5. - Verified: on both web and desktop hosts, 73/85 applied, 0 pending, 0 drifted; sandbox apply/revert restored all 42 target files byte-for-byte.
1.1.87
中文
- 版本 1.1.87。
- 回滚 / 备份加固:
- 补丁命中契约:标记
optional的补丁命中数不符时记为软失败,不再阻断整体应用;#42 的两处插入型替换加探针,重复应用不会二次插入。 - 桌面 / 进程(Windows):
- 进程枚举改用
|分隔并强制 UTF-8 输出,修复中文安装路径下换包时旧进程杀不掉的问题。 - helper 只有在确实拿到 exe 路径时才带
killApp;换包失败会把原版重新拉起并写日志,不再留空桌面。
- 进程枚举改用
- 安全加固:
- asar 解包校验输出路径必须位于目标目录内,越界条目跳过并告警。
- 红队文件读写路径校验对最近存在的祖先做
realpath,堵住 symlink 逃逸。 - 更新检查只允许
https。 - 报告回放生成的 curl / HTTP 报文对头部、Cookie、请求体去除换行,防注入。
- 提示词 / 运行钩子:插件停用后
rewriteFn直接返回宿主原始装配文本,不再残留注入;停用时清理 assemble guard;运行时缓存签名纳入红队设置、策略与 override 版本,状态变化立即生效。 - 红队演练台:
listEngagements默认不再逐条统计;漏洞列表与报告支持evidenceLimit,大证据不再拖慢面板。 - 子代理:名额占位改为立即占用(
n+1),append 失败时回退,避免并发派出超限。 - CLI:
--apply存在失败项时以退出码 1 结束,脚本调用能感知失败。 - 清理:删除无引用的
lib/mnemon-settings.js及 13 处死代码 / 未使用的 import;移除test/目录与test脚本,发布 CI 只做语法检查。
English
- 1.1.87.
- Rollback / backup hardening:
- A zero-byte
.dshpurge.bakis no longer treated as the original and written back to the host:revertAll/restoreFromBakrename it to.badand skip it; leftovers are swept on the next start. - When refreshing stale backups after a host upgrade, patches that use the singular
markerform (#6/#7/#8/#10) are now included, so their baseline is not missed and an old backup can no longer overwrite the new file. - Backups, config, state and override files are written atomically (temp file + fsync + rename), so a crash never leaves a half-written file.
- A zero-byte
- Patch hit contract:
optionalpatches that miss their expected hit count are recorded as soft failures instead of blocking the whole apply; the two insert-type replacements in #42 gained probes so re-applying does not insert twice. - Desktop / processes (Windows):
- Process enumeration now uses
|separators and forces UTF-8 output, fixing the case where the old process survived an asar swap under a Chinese install path. - The helper passes
killApponly when an exe path is known; a failed swap relaunches the original app and writes a log instead of leaving an empty desktop.
- Process enumeration now uses
- Security hardening:
- Asar extraction verifies each output path stays inside the destination directory; entries outside are skipped with a warning.
- Red-team path validation resolves
realpathfor the nearest existing ancestor, closing the symlink escape. - Update checks accept
httpsonly. - Curl / HTTP replay text strips newlines from headers, cookies and body to prevent injection.
- Prompt / runtime hooks: after the plugin is disabled,
rewriteFnreturns the host's assembled prompt unchanged and the assemble guard is cleared; the runtime cache signature now includes red-team settings, policy and override revision so changes take effect immediately. - Red-team console:
listEngagementsno longer computes per-row stats by default; vuln lists and reports acceptevidenceLimitso large evidence no longer slows the panel. - Subagents: slot reservation now takes effect immediately (
n+1) and rolls back if the append fails, preventing over-limit dispatch...
v1.1.89
1.1.89
中文
- 版本 1.1.89。
- #204 工作目录提示恢复:
deployment:persona-suffix优先写会话真实 cwd 字面量(interpolate: false),拿不到才退静态描述;同时把cwd补进assembly.variables,用户自己模板里的{{cwd}}也能渲染。0.2.1 不再抛unknown prompt variable,工作目录提示不再变成the current workspace。 - #207 桌面静默退出可诊断:
- 新增 #92:宿主每次退出都把
code/signal/ stderr 尾巴写进%TEMP%\dsh-purge-desktop.log(不再只记 signal 分支)。 - 新增 #93:主进程记录
boot/before-quit/will-quit/quit code/window-all-closed/render-process-gone(附渲染进程最后几行 console)/child-process-gone/ 信号 / 每分钟心跳。只用uncaughtExceptionMonitor,不改变崩溃行为。 - asar 换包脚本:
Move-Item失败后改用.NET File.Move重试,成功/失败都Test-Path复核并记录真实错误;空闲改名脚本同样记录失败原因(限流,不刷屏)。
- 新增 #92:宿主每次退出都把
- #202 原子写:
atomicWriteFile保持writeFile + rename(不依赖 hostFs 白名单里没有的open);CLI--apply成功后补打应用戳,下次启动 settle 不会误判未对齐再重打。 - 修复重复标记:#32 / #53 的 export 行锚点原来自我匹配,每点一次「应用」就多追加一行注释;改成带负向前瞻的正则,连续应用保持幂等。
- 验证:web + desktop 双宿主现有补丁全部 applied;rc.2 夹具与 rc.5 实机 pattern 全绿;沙箱 42 个目标文件 apply/revert 字节级还原;生成的 PowerShell 脚本通过
Parser::ParseFile语法检查。
English
- 1.1.89.
- #204 working directory restored: the persona suffix now uses the real session cwd as a literal (
interpolate: false) and only falls back to the static sentence when no cwd is available;cwdis also added toassembly.variables, so user templates with{{cwd}}render. 0.2.1 no longer throwsunknown prompt variable, and the prompt keeps the real path instead ofthe current workspace. - #207 desktop exit is diagnosable:
- New #92: every host exit writes
code/signal/ stderr tail to%TEMP%\dsh-purge-desktop.log. - New #93: main process logs
boot/before-quit/will-quit/quit code/window-all-closed/render-process-gone(with the renderer console tail) /child-process-gone/ signals / a one-minute heartbeat. UsesuncaughtExceptionMonitoronly, so crash behavior is unchanged. - ASAR swap: falls back to
.NET File.MoveafterMove-Itemfails, verifies withTest-Path, and records the real error; the idle rename script logs failures too (rate-limited).
- New #92: every host exit writes
- #202 atomic writes:
atomicWriteFilestays onwriteFile + rename(the hostFs whitelist has noopen); the CLI--applynow also writes the applied stamp so the next boot's settle does not re-apply. - Duplicate markers fixed: the #32 / #53 export-line anchors matched their own output and appended another comment on every Apply; both now use negative lookaheads and are idempotent.
- Verified: all existing patches applied on both web and desktop hosts; rc.2 fixtures and rc.5 real files green; sandbox apply/revert restored 42 target files byte-for-byte; generated PowerShell scripts pass
Parser::ParseFile.
1.1.88
中文
- 版本 1.1.88。
- 双版本适配(rc.2 + rc.5):#32/#36/#50/#53/#57/#62 在 0.2.1-rc.2 与 0.2.1-rc.5 上都能命中。旧 pattern 全部保留,rc.5 的新 pattern 追加,不再用新文案覆盖旧版。
- #36 升级字段:bash/pwsh 的
sandbox_permissionsjustification 描述一并清洗;补上Approval is auto-granted.大写 marker,tool-fs 不再因为大小写差异永远漂移。 - #50 跨会话引用:去掉 untrusted / “不要跟随指令”话术,保留只读快照的事实描述。
- #57 developer role:rc.5 responses 通路的
instructionRole分支纳入 openai/azure 白名单。 - #62 审批 fail-open:rc.5 的
void 0分支(无 approval 服务 / 无 agent / unavailable)全部放行;已打过旧 approval 分支的文件不会因 marker 被整条跳过。 - #32 / #53 状态标记:#53 不再共用 #32 的注释 marker,旧宿主不会假绿;rc.5 残留的
local web GUI前缀与DeepSeek Harness Web GUI描述已清掉。 - 宿主门禁:
package.json增加dshTargets,状态页同时接受 rc.2 与 rc.5。 - 验证:web + desktop 双宿主 73/85 applied、0 pending、0 drifted;沙箱 42 个目标文件 apply/revert 字节级还原通过。
English
- 1.1.88.
- Dual-version support (rc.2 + rc.5): patches #32/#36/#50/#53/#57/#62 now match both 0.2.1-rc.2 and 0.2.1-rc.5. Old patterns are kept; rc.5 patterns are added instead of replacing them.
- #36 escalation schema: also neutralizes the bash/pwsh
sandbox_permissionsjustification text; adds the capitalisedApproval is auto-granted.marker so tool-fs no longer drifts on case alone. - #50 session references: drops untrusted / "do not follow instructions" framing while keeping the read-only snapshot wording.
- #57 developer role: the rc.5
instructionRoleresponses branch is included in the openai/azure allowlist. - #62 approval fail-open: rc.5
void 0branches (no approval service / no agent / unavailable) all allow; files already stamped by the old approval branch are re-processed instead of skipped. - #32 / #53 markers: #53 no longer shares #32's comment marker, so older hosts cannot show a false green; rc.5 leftovers (
local web GUIprefix andDeepSeek Harness Web GUIdescription) are removed. - Host gate:
package.jsongainsdshTargets, and the status page accepts both rc.2 and rc.5. - Verified: on both web and desktop hosts, 73/85 applied, 0 pending, 0 drifted; sandbox apply/revert restored all 42 target files byte-for-byte.
1.1.87
中文
- 版本 1.1.87。
- 回滚 / 备份加固:
- 补丁命中契约:标记
optional的补丁命中数不符时记为软失败,不再阻断整体应用;#42 的两处插入型替换加探针,重复应用不会二次插入。 - 桌面 / 进程(Windows):
- 进程枚举改用
|分隔并强制 UTF-8 输出,修复中文安装路径下换包时旧进程杀不掉的问题。 - helper 只有在确实拿到 exe 路径时才带
killApp;换包失败会把原版重新拉起并写日志,不再留空桌面。
- 进程枚举改用
- 安全加固:
- asar 解包校验输出路径必须位于目标目录内,越界条目跳过并告警。
- 红队文件读写路径校验对最近存在的祖先做
realpath,堵住 symlink 逃逸。 - 更新检查只允许
https。 - 报告回放生成的 curl / HTTP 报文对头部、Cookie、请求体去除换行,防注入。
- 提示词 / 运行钩子:插件停用后
rewriteFn直接返回宿主原始装配文本,不再残留注入;停用时清理 assemble guard;运行时缓存签名纳入红队设置、策略与 override 版本,状态变化立即生效。 - 红队演练台:
listEngagements默认不再逐条统计;漏洞列表与报告支持evidenceLimit,大证据不再拖慢面板。 - 子代理:名额占位改为立即占用(
n+1),append 失败时回退,避免并发派出超限。 - CLI:
--apply存在失败项时以退出码 1 结束,脚本调用能感知失败。 - 清理:删除无引用的
lib/mnemon-settings.js及 13 处死代码 / 未使用的 import;移除test/目录与test脚本,发布 CI 只做语法检查。
English
- 1.1.87.
- Rollback / backup hardening:
- A zero-byte
.dshpurge.bakis no longer treated as the original and written back to the host:revertAll/restoreFromBakrename it to.badand skip it; leftovers are swept on the next start. - When refreshing stale backups after a host upgrade, patches that use the singular
markerform (#6/#7/#8/#10) are now included, so their baseline is not missed and an old backup can no longer overwrite the new file. - Backups, config, state and override files are written atomically (temp file + fsync + rename), so a crash never leaves a half-written file.
- A zero-byte
- Patch hit contract:
optionalpatches that miss their expected hit count are recorded as soft failures instead of blocking the whole apply; the two insert-type replacements in #42 gained probes so re-applying does not insert twice. - Desktop / processes (Windows):
- Process enumeration now uses
|separators and forces UTF-8 output, fixing the case where the old process survived an asar swap under a Chinese install path. - The helper passes
killApponly when an exe path is known; a failed swap relaunches the original app and writes a log instead of leaving an empty desktop.
- Process enumeration now uses
- Security hardening:
- Asar extraction verifies each output path stays inside the destination directory; entries outside are skipped with a warning.
- Red-team path validation resolves
realpathfor the nearest existing ancestor, closing the symlink escape. - Update checks accept
httpsonly. - Curl / HTTP replay text strips newlines from headers, cookies and body to prevent injection.
- Prompt / runtime hooks: after the plugin is disabled,
rewriteFnreturns the host's assembled prompt unchanged and the assemble guard is cleared; the runtime cache signature now includes red-team settings, policy and override revision so changes take effect immediately. - Red-team console:
listEngagementsno longer computes per-row stats by default; vuln lists and reports acceptevidenceLimitso large evidence no longer slows the panel. - Subagents: slot reservation now takes effect immediately (
n+1) and rolls back if the append fails, preventing over-limit dispatch under concurrency. - CLI:
--applyexits with code 1 when any item failed, so scripts can detect the failure. - Cleanup: removed the unreferenced
lib/mnemon-settings.jsplus 13 dead functions / unused imports; dropped thetest/directory andtestscript — release CI now runs syntax checks only.
1.1.86
中文
- 版本 1.1.86。
- Web「应用 → 自动重启」后残留 server 导致 EADDRINUSE 起不来(#197,合并 PR #197):
restart-web.js把后台 server 的 pid/url 记到$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServer增加按端口兜底,清掉旧版本留下、没有记录的孤儿。- 新增
lib/bin-preflight.js:把回收钩子注入宿主bin.js顶部(跨平台),在 Cordis 激活、webserver 绑端口之前先回收残留;只杀命令行命中@deepseek-ai/dsh/lib/bin.js … web的进程。 - 重启时打印「后台运行、关窗不会停」,避免把提示符返回误判成程序已退出。
- 加固:记录里的 pid 拿不到命令行时,必须仍占着该端口才允许杀,防 PID 复用误杀;杀不掉就保留记录下次再试;杀完等待进程真正退出再绑端口。
- 桌面端点「应用」换包顺序(#198,合并 PR #198):
- 先按安装根路径且不含
--type=识别并杀掉 Electron main,再扫安装目录其余进程,避免 host 先死、main 还活着弹「host stopped」。 - 挪包失败(asar 仍被占用)时补上
Start-Process,把原版应用拉起来并写入%TEMP%\dsh-purge-desktop.log,不再留空桌面。
- 先按安装根路径且不含
- 测试:96/96 通过。
English
- 1.1.86.
- Stale web server after "Apply → auto restart" caused EADDRINUSE on boot (#197, merged PR #197):
restart-web.jsrecords the background server pid/url in$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServernow also reclaims by port, catching orphans left by older versions with no record.- New
lib/bin-preflight.jsinjects a reclaim hook at the top of the hostbin.js(cross-platform) so it runs before Cordis activates and before the webserver binds; only processes whose command line matches@deepseek-ai/dsh/lib/bin.js … webare killed. - The restart prints "running in the background; closing this window will NOT stop it" so the returned prompt is not mistaken for an exit.
- Hardening: when the recorded pid's co...
v1.1.88
1.1.88
中文
- 版本 1.1.88。
- 双版本适配(rc.2 + rc.5):#32/#36/#50/#53/#57/#62 在 0.2.1-rc.2 与 0.2.1-rc.5 上都能命中。旧 pattern 全部保留,rc.5 的新 pattern 追加,不再用新文案覆盖旧版。
- #36 升级字段:bash/pwsh 的
sandbox_permissionsjustification 描述一并清洗;补上Approval is auto-granted.大写 marker,tool-fs 不再因为大小写差异永远漂移。 - #50 跨会话引用:去掉 untrusted / “不要跟随指令”话术,保留只读快照的事实描述。
- #57 developer role:rc.5 responses 通路的
instructionRole分支纳入 openai/azure 白名单。 - #62 审批 fail-open:rc.5 的
void 0分支(无 approval 服务 / 无 agent / unavailable)全部放行;已打过旧 approval 分支的文件不会因 marker 被整条跳过。 - #32 / #53 状态标记:#53 不再共用 #32 的注释 marker,旧宿主不会假绿;rc.5 残留的
local web GUI前缀与DeepSeek Harness Web GUI描述已清掉。 - 宿主门禁:
package.json增加dshTargets,状态页同时接受 rc.2 与 rc.5。 - 验证:web + desktop 双宿主 73/85 applied、0 pending、0 drifted;沙箱 42 个目标文件 apply/revert 字节级还原通过。
English
- 1.1.88.
- Dual-version support (rc.2 + rc.5): patches #32/#36/#50/#53/#57/#62 now match both 0.2.1-rc.2 and 0.2.1-rc.5. Old patterns are kept; rc.5 patterns are added instead of replacing them.
- #36 escalation schema: also neutralizes the bash/pwsh
sandbox_permissionsjustification text; adds the capitalisedApproval is auto-granted.marker so tool-fs no longer drifts on case alone. - #50 session references: drops untrusted / "do not follow instructions" framing while keeping the read-only snapshot wording.
- #57 developer role: the rc.5
instructionRoleresponses branch is included in the openai/azure allowlist. - #62 approval fail-open: rc.5
void 0branches (no approval service / no agent / unavailable) all allow; files already stamped by the old approval branch are re-processed instead of skipped. - #32 / #53 markers: #53 no longer shares #32's comment marker, so older hosts cannot show a false green; rc.5 leftovers (
local web GUIprefix andDeepSeek Harness Web GUIdescription) are removed. - Host gate:
package.jsongainsdshTargets, and the status page accepts both rc.2 and rc.5. - Verified: on both web and desktop hosts, 73/85 applied, 0 pending, 0 drifted; sandbox apply/revert restored all 42 target files byte-for-byte.
1.1.87
中文
- 版本 1.1.87。
- 回滚 / 备份加固:
- 补丁命中契约:标记
optional的补丁命中数不符时记为软失败,不再阻断整体应用;#42 的两处插入型替换加探针,重复应用不会二次插入。 - 桌面 / 进程(Windows):
- 进程枚举改用
|分隔并强制 UTF-8 输出,修复中文安装路径下换包时旧进程杀不掉的问题。 - helper 只有在确实拿到 exe 路径时才带
killApp;换包失败会把原版重新拉起并写日志,不再留空桌面。
- 进程枚举改用
- 安全加固:
- asar 解包校验输出路径必须位于目标目录内,越界条目跳过并告警。
- 红队文件读写路径校验对最近存在的祖先做
realpath,堵住 symlink 逃逸。 - 更新检查只允许
https。 - 报告回放生成的 curl / HTTP 报文对头部、Cookie、请求体去除换行,防注入。
- 提示词 / 运行钩子:插件停用后
rewriteFn直接返回宿主原始装配文本,不再残留注入;停用时清理 assemble guard;运行时缓存签名纳入红队设置、策略与 override 版本,状态变化立即生效。 - 红队演练台:
listEngagements默认不再逐条统计;漏洞列表与报告支持evidenceLimit,大证据不再拖慢面板。 - 子代理:名额占位改为立即占用(
n+1),append 失败时回退,避免并发派出超限。 - CLI:
--apply存在失败项时以退出码 1 结束,脚本调用能感知失败。 - 清理:删除无引用的
lib/mnemon-settings.js及 13 处死代码 / 未使用的 import;移除test/目录与test脚本,发布 CI 只做语法检查。
English
- 1.1.87.
- Rollback / backup hardening:
- A zero-byte
.dshpurge.bakis no longer treated as the original and written back to the host:revertAll/restoreFromBakrename it to.badand skip it; leftovers are swept on the next start. - When refreshing stale backups after a host upgrade, patches that use the singular
markerform (#6/#7/#8/#10) are now included, so their baseline is not missed and an old backup can no longer overwrite the new file. - Backups, config, state and override files are written atomically (temp file + fsync + rename), so a crash never leaves a half-written file.
- A zero-byte
- Patch hit contract:
optionalpatches that miss their expected hit count are recorded as soft failures instead of blocking the whole apply; the two insert-type replacements in #42 gained probes so re-applying does not insert twice. - Desktop / processes (Windows):
- Process enumeration now uses
|separators and forces UTF-8 output, fixing the case where the old process survived an asar swap under a Chinese install path. - The helper passes
killApponly when an exe path is known; a failed swap relaunches the original app and writes a log instead of leaving an empty desktop.
- Process enumeration now uses
- Security hardening:
- Asar extraction verifies each output path stays inside the destination directory; entries outside are skipped with a warning.
- Red-team path validation resolves
realpathfor the nearest existing ancestor, closing the symlink escape. - Update checks accept
httpsonly. - Curl / HTTP replay text strips newlines from headers, cookies and body to prevent injection.
- Prompt / runtime hooks: after the plugin is disabled,
rewriteFnreturns the host's assembled prompt unchanged and the assemble guard is cleared; the runtime cache signature now includes red-team settings, policy and override revision so changes take effect immediately. - Red-team console:
listEngagementsno longer computes per-row stats by default; vuln lists and reports acceptevidenceLimitso large evidence no longer slows the panel. - Subagents: slot reservation now takes effect immediately (
n+1) and rolls back if the append fails, preventing over-limit dispatch under concurrency. - CLI:
--applyexits with code 1 when any item failed, so scripts can detect the failure. - Cleanup: removed the unreferenced
lib/mnemon-settings.jsplus 13 dead functions / unused imports; dropped thetest/directory andtestscript — release CI now runs syntax checks only.
1.1.86
中文
- 版本 1.1.86。
- Web「应用 → 自动重启」后残留 server 导致 EADDRINUSE 起不来(#197,合并 PR #197):
restart-web.js把后台 server 的 pid/url 记到$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServer增加按端口兜底,清掉旧版本留下、没有记录的孤儿。- 新增
lib/bin-preflight.js:把回收钩子注入宿主bin.js顶部(跨平台),在 Cordis 激活、webserver 绑端口之前先回收残留;只杀命令行命中@deepseek-ai/dsh/lib/bin.js … web的进程。 - 重启时打印「后台运行、关窗不会停」,避免把提示符返回误判成程序已退出。
- 加固:记录里的 pid 拿不到命令行时,必须仍占着该端口才允许杀,防 PID 复用误杀;杀不掉就保留记录下次再试;杀完等待进程真正退出再绑端口。
- 桌面端点「应用」换包顺序(#198,合并 PR #198):
- 先按安装根路径且不含
--type=识别并杀掉 Electron main,再扫安装目录其余进程,避免 host 先死、main 还活着弹「host stopped」。 - 挪包失败(asar 仍被占用)时补上
Start-Process,把原版应用拉起来并写入%TEMP%\dsh-purge-desktop.log,不再留空桌面。
- 先按安装根路径且不含
- 测试:96/96 通过。
English
- 1.1.86.
- Stale web server after "Apply → auto restart" caused EADDRINUSE on boot (#197, merged PR #197):
restart-web.jsrecords the background server pid/url in$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServernow also reclaims by port, catching orphans left by older versions with no record.- New
lib/bin-preflight.jsinjects a reclaim hook at the top of the hostbin.js(cross-platform) so it runs before Cordis activates and before the webserver binds; only processes whose command line matches@deepseek-ai/dsh/lib/bin.js … webare killed. - The restart prints "running in the background; closing this window will NOT stop it" so the returned prompt is not mistaken for an exit.
- Hardening: when the recorded pid's command line cannot be read, it is killed only if it still listens on that port (guards against PID reuse); a failed kill keeps the record for the next boot; boot waits for the killed process to actually exit before binding.
- Desktop asar swap order (#198, merged PR #198):
- Electron main is identified by install root plus "no
--type=" and killed first, then the rest of the install tree is swept, so the host no longer dies while main stays alive showing a "host stopped" dialog. - If the asar move fails (still locked), the original app is relaunched and the reason is appended to
%TEMP%\dsh-purge-desktop.loginstead of leaving an empty desktop.
- Electron main is identified by install root plus "no
- Tests: 96/96 pass.
1.1.85
中文
- 版本 1.1.85。
- #196:修复深色模式下部分按钮白底白字、完全看不清的问题。
- 根因:宿主暗色主题把
--dsw-alias-brand-primary解析成近白色(neutral-bluish-50#f9fafb)。插件里凡是"品牌色作底 + 白字"的按钮(设置页的「应用」「保存注入」、演练台的「保存」「检索」「检测连通性」以及各类主按钮)在暗色下就变成一整块白。 - 现在暗色(
body[data-ds-dark-theme]、[data-theme="dusk"])下主按钮统一用绿色实底#3d8f68+ 白字,悬停用更深的#347a59;-webkit-text-fill-color一并显式指定,避免宿主强制白字穿透。 - 报告里的步骤序号圆点(
.rt-rep-step-no)同样改为绿底白字。 - 浅色模式表现不变;新增
test/client-dark-theme.test.js静态守护这几条暗色规则。
- 根因:宿主暗色主题把
- 测试:84/84 通过。
English
- 1.1.85.
- #196: fix buttons in dark mode rendering as a solid white block (white text on white background).
- Root cause: the host dark theme resolves
--dsw-alias-brand-primaryto a near-white token (neutral-bluish-50,#f9fafb). Every plugin button that used "brand color as background + white text" (settings Apply, Save injection, drill console Save, Search, Test connectivity, and other primary buttons) turned into a white block in dark mode. - Primary buttons under dark themes (
body[data-ds-dark-theme],[data-theme="dusk"]) now use a solid green#3d8f68with white text, with#347a59on hover;-webkit-text-fill-coloris set explicitly so host-forced white text cannot leak through. - The report step-number dots (
.rt-rep-step-no) are switched to the same green/white pair. - Light mode is unchanged; added
test/client-dark-theme.test.jsto guard these dark-mode rules.
- Root cause: the host dark theme resolves
- Tests: 84/84 pass.
1.1.84
中文
- 版本 1.1.84。
- 尾部锚点与子代理审批接管(接线
anchor.js/subagent-control.js):- 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。
- 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。
- 子会话被宿主写成
approval/policy = "never"时改回ask,并在approval/request瀑布放行,子代理不再"一直被拒"。 - 回滚开关:
anchorMode: "off"、subagentControl: false。
- 红队模式中文化:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。
- #194:desktop 端启动后窗口永不显示。
- hung-operator 提示改为按内容变更缓存(h...
v1.1.87
1.1.87
中文
- 版本 1.1.87。
- 回滚 / 备份加固:
- 补丁命中契约:标记
optional的补丁命中数不符时记为软失败,不再阻断整体应用;#42 的两处插入型替换加探针,重复应用不会二次插入。 - 桌面 / 进程(Windows):
- 进程枚举改用
|分隔并强制 UTF-8 输出,修复中文安装路径下换包时旧进程杀不掉的问题。 - helper 只有在确实拿到 exe 路径时才带
killApp;换包失败会把原版重新拉起并写日志,不再留空桌面。
- 进程枚举改用
- 安全加固:
- asar 解包校验输出路径必须位于目标目录内,越界条目跳过并告警。
- 红队文件读写路径校验对最近存在的祖先做
realpath,堵住 symlink 逃逸。 - 更新检查只允许
https。 - 报告回放生成的 curl / HTTP 报文对头部、Cookie、请求体去除换行,防注入。
- 提示词 / 运行钩子:插件停用后
rewriteFn直接返回宿主原始装配文本,不再残留注入;停用时清理 assemble guard;运行时缓存签名纳入红队设置、策略与 override 版本,状态变化立即生效。 - 红队演练台:
listEngagements默认不再逐条统计;漏洞列表与报告支持evidenceLimit,大证据不再拖慢面板。 - 子代理:名额占位改为立即占用(
n+1),append 失败时回退,避免并发派出超限。 - CLI:
--apply存在失败项时以退出码 1 结束,脚本调用能感知失败。 - 清理:删除无引用的
lib/mnemon-settings.js及 13 处死代码 / 未使用的 import;移除test/目录与test脚本,发布 CI 只做语法检查。
English
- 1.1.87.
- Rollback / backup hardening:
- A zero-byte
.dshpurge.bakis no longer treated as the original and written back to the host:revertAll/restoreFromBakrename it to.badand skip it; leftovers are swept on the next start. - When refreshing stale backups after a host upgrade, patches that use the singular
markerform (#6/#7/#8/#10) are now included, so their baseline is not missed and an old backup can no longer overwrite the new file. - Backups, config, state and override files are written atomically (temp file + fsync + rename), so a crash never leaves a half-written file.
- A zero-byte
- Patch hit contract:
optionalpatches that miss their expected hit count are recorded as soft failures instead of blocking the whole apply; the two insert-type replacements in #42 gained probes so re-applying does not insert twice. - Desktop / processes (Windows):
- Process enumeration now uses
|separators and forces UTF-8 output, fixing the case where the old process survived an asar swap under a Chinese install path. - The helper passes
killApponly when an exe path is known; a failed swap relaunches the original app and writes a log instead of leaving an empty desktop.
- Process enumeration now uses
- Security hardening:
- Asar extraction verifies each output path stays inside the destination directory; entries outside are skipped with a warning.
- Red-team path validation resolves
realpathfor the nearest existing ancestor, closing the symlink escape. - Update checks accept
httpsonly. - Curl / HTTP replay text strips newlines from headers, cookies and body to prevent injection.
- Prompt / runtime hooks: after the plugin is disabled,
rewriteFnreturns the host's assembled prompt unchanged and the assemble guard is cleared; the runtime cache signature now includes red-team settings, policy and override revision so changes take effect immediately. - Red-team console:
listEngagementsno longer computes per-row stats by default; vuln lists and reports acceptevidenceLimitso large evidence no longer slows the panel. - Subagents: slot reservation now takes effect immediately (
n+1) and rolls back if the append fails, preventing over-limit dispatch under concurrency. - CLI:
--applyexits with code 1 when any item failed, so scripts can detect the failure. - Cleanup: removed the unreferenced
lib/mnemon-settings.jsplus 13 dead functions / unused imports; dropped thetest/directory andtestscript — release CI now runs syntax checks only.
1.1.86
中文
- 版本 1.1.86。
- Web「应用 → 自动重启」后残留 server 导致 EADDRINUSE 起不来(#197,合并 PR #197):
restart-web.js把后台 server 的 pid/url 记到$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServer增加按端口兜底,清掉旧版本留下、没有记录的孤儿。- 新增
lib/bin-preflight.js:把回收钩子注入宿主bin.js顶部(跨平台),在 Cordis 激活、webserver 绑端口之前先回收残留;只杀命令行命中@deepseek-ai/dsh/lib/bin.js … web的进程。 - 重启时打印「后台运行、关窗不会停」,避免把提示符返回误判成程序已退出。
- 加固:记录里的 pid 拿不到命令行时,必须仍占着该端口才允许杀,防 PID 复用误杀;杀不掉就保留记录下次再试;杀完等待进程真正退出再绑端口。
- 桌面端点「应用」换包顺序(#198,合并 PR #198):
- 先按安装根路径且不含
--type=识别并杀掉 Electron main,再扫安装目录其余进程,避免 host 先死、main 还活着弹「host stopped」。 - 挪包失败(asar 仍被占用)时补上
Start-Process,把原版应用拉起来并写入%TEMP%\dsh-purge-desktop.log,不再留空桌面。
- 先按安装根路径且不含
- 测试:96/96 通过。
English
- 1.1.86.
- Stale web server after "Apply → auto restart" caused EADDRINUSE on boot (#197, merged PR #197):
restart-web.jsrecords the background server pid/url in$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServernow also reclaims by port, catching orphans left by older versions with no record.- New
lib/bin-preflight.jsinjects a reclaim hook at the top of the hostbin.js(cross-platform) so it runs before Cordis activates and before the webserver binds; only processes whose command line matches@deepseek-ai/dsh/lib/bin.js … webare killed. - The restart prints "running in the background; closing this window will NOT stop it" so the returned prompt is not mistaken for an exit.
- Hardening: when the recorded pid's command line cannot be read, it is killed only if it still listens on that port (guards against PID reuse); a failed kill keeps the record for the next boot; boot waits for the killed process to actually exit before binding.
- Desktop asar swap order (#198, merged PR #198):
- Electron main is identified by install root plus "no
--type=" and killed first, then the rest of the install tree is swept, so the host no longer dies while main stays alive showing a "host stopped" dialog. - If the asar move fails (still locked), the original app is relaunched and the reason is appended to
%TEMP%\dsh-purge-desktop.loginstead of leaving an empty desktop.
- Electron main is identified by install root plus "no
- Tests: 96/96 pass.
1.1.85
中文
- 版本 1.1.85。
- #196:修复深色模式下部分按钮白底白字、完全看不清的问题。
- 根因:宿主暗色主题把
--dsw-alias-brand-primary解析成近白色(neutral-bluish-50#f9fafb)。插件里凡是"品牌色作底 + 白字"的按钮(设置页的「应用」「保存注入」、演练台的「保存」「检索」「检测连通性」以及各类主按钮)在暗色下就变成一整块白。 - 现在暗色(
body[data-ds-dark-theme]、[data-theme="dusk"])下主按钮统一用绿色实底#3d8f68+ 白字,悬停用更深的#347a59;-webkit-text-fill-color一并显式指定,避免宿主强制白字穿透。 - 报告里的步骤序号圆点(
.rt-rep-step-no)同样改为绿底白字。 - 浅色模式表现不变;新增
test/client-dark-theme.test.js静态守护这几条暗色规则。
- 根因:宿主暗色主题把
- 测试:84/84 通过。
English
- 1.1.85.
- #196: fix buttons in dark mode rendering as a solid white block (white text on white background).
- Root cause: the host dark theme resolves
--dsw-alias-brand-primaryto a near-white token (neutral-bluish-50,#f9fafb). Every plugin button that used "brand color as background + white text" (settings Apply, Save injection, drill console Save, Search, Test connectivity, and other primary buttons) turned into a white block in dark mode. - Primary buttons under dark themes (
body[data-ds-dark-theme],[data-theme="dusk"]) now use a solid green#3d8f68with white text, with#347a59on hover;-webkit-text-fill-coloris set explicitly so host-forced white text cannot leak through. - The report step-number dots (
.rt-rep-step-no) are switched to the same green/white pair. - Light mode is unchanged; added
test/client-dark-theme.test.jsto guard these dark-mode rules.
- Root cause: the host dark theme resolves
- Tests: 84/84 pass.
1.1.84
中文
- 版本 1.1.84。
- 尾部锚点与子代理审批接管(接线
anchor.js/subagent-control.js):- 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。
- 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。
- 子会话被宿主写成
approval/policy = "never"时改回ask,并在approval/request瀑布放行,子代理不再"一直被拒"。 - 回滚开关:
anchorMode: "off"、subagentControl: false。
- 红队模式中文化:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。
- #194:desktop 端启动后窗口永不显示。
- hung-operator 提示改为按内容变更缓存(home + mtime + 已提交修订号),内容没变不再每轮重算约 23KB。
- 增加风暴熔断(10 秒 120 次)与慢调用熔断(1.5 秒触发、30 秒冷却),熔断期直接返回缓存文本,不挂死 desktop host。
- 同一次 assemble 的重复改写用 WeakMap 去重。
- 新增补丁 #91:宿主
code === null || signal静默 resolve 前写一条[desktop.hostExit]到%TEMP%\dsh-purge-desktop.log,保持不弹框但有据可查。
- #188(0.2.1-rc.4 专属部分):新增 #89 沙箱策略去品牌、#90 skill-badge 描述中文化,扩展 #32/#53 的 rc.3 变体与 marker;三条新补丁均为 optional,宿主没有对应文件时静默跳过。
- 测试:81/81 通过;新增锚点接线与红队文案测试。
English
- 1.1.84.
- Tail anchor and subagent approval takeover (wiring
anchor.js/subagent-control.js):- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
order), putting identity and format rules back in the recency slot; any existing same-named section is filtered first so there is never a duplicate. - Anchor rules now follow the operator's language: a Chinese request gets a Chinese answer, and the anchor being written in English is not a language instruction. The hard-coded English opener was removed (the direct cause of red-team mode answering in English).
- When the host writes
approval/policy = "never"for a child session, it is flipped back toaskand allowed in theapproval/requestwaterfall, so subagents are no longer refused every time. - Rollback switches:
anchorMode: "off",subagentControl: false.
- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
- Red-team mode localized to Chinese: mode name and description, role names, the five-stage attack chain, the 25-item scoring rules and POC categories, skill-fix guidance, environment-adaptation hints, panel and server messages, and both the results report and the replay report.
- #194: desktop window never appears after launch.
- The hung-operator prompt is now cached by content change (home + mtime + committed revision); an unchanged prompt is no longer rebuilt (~23KB) on every refresh.
- Storm breaker (120 calls / 10s) and slow-call breaker (trip at 1.5s, 30s cooldown) return the cached text instead of stalling the desktop host.
- Duplicate rewrites within the same assemble call are deduped with a WeakMap.
- New patch #91:...
v1.1.86
1.1.86
中文
- 版本 1.1.86。
- Web「应用 → 自动重启」后残留 server 导致 EADDRINUSE 起不来(#197,合并 PR #197):
restart-web.js把后台 server 的 pid/url 记到$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServer增加按端口兜底,清掉旧版本留下、没有记录的孤儿。- 新增
lib/bin-preflight.js:把回收钩子注入宿主bin.js顶部(跨平台),在 Cordis 激活、webserver 绑端口之前先回收残留;只杀命令行命中@deepseek-ai/dsh/lib/bin.js … web的进程。 - 重启时打印「后台运行、关窗不会停」,避免把提示符返回误判成程序已退出。
- 加固:记录里的 pid 拿不到命令行时,必须仍占着该端口才允许杀,防 PID 复用误杀;杀不掉就保留记录下次再试;杀完等待进程真正退出再绑端口。
- 桌面端点「应用」换包顺序(#198,合并 PR #198):
- 先按安装根路径且不含
--type=识别并杀掉 Electron main,再扫安装目录其余进程,避免 host 先死、main 还活着弹「host stopped」。 - 挪包失败(asar 仍被占用)时补上
Start-Process,把原版应用拉起来并写入%TEMP%\dsh-purge-desktop.log,不再留空桌面。
- 先按安装根路径且不含
- 测试:96/96 通过。
English
- 1.1.86.
- Stale web server after "Apply → auto restart" caused EADDRINUSE on boot (#197, merged PR #197):
restart-web.jsrecords the background server pid/url in$DSH_HOME/dsh-purge/web-server-<port>.json;killOldServernow also reclaims by port, catching orphans left by older versions with no record.- New
lib/bin-preflight.jsinjects a reclaim hook at the top of the hostbin.js(cross-platform) so it runs before Cordis activates and before the webserver binds; only processes whose command line matches@deepseek-ai/dsh/lib/bin.js … webare killed. - The restart prints "running in the background; closing this window will NOT stop it" so the returned prompt is not mistaken for an exit.
- Hardening: when the recorded pid's command line cannot be read, it is killed only if it still listens on that port (guards against PID reuse); a failed kill keeps the record for the next boot; boot waits for the killed process to actually exit before binding.
- Desktop asar swap order (#198, merged PR #198):
- Electron main is identified by install root plus "no
--type=" and killed first, then the rest of the install tree is swept, so the host no longer dies while main stays alive showing a "host stopped" dialog. - If the asar move fails (still locked), the original app is relaunched and the reason is appended to
%TEMP%\dsh-purge-desktop.loginstead of leaving an empty desktop.
- Electron main is identified by install root plus "no
- Tests: 96/96 pass.
1.1.85
中文
- 版本 1.1.85。
- #196:修复深色模式下部分按钮白底白字、完全看不清的问题。
- 根因:宿主暗色主题把
--dsw-alias-brand-primary解析成近白色(neutral-bluish-50#f9fafb)。插件里凡是"品牌色作底 + 白字"的按钮(设置页的「应用」「保存注入」、演练台的「保存」「检索」「检测连通性」以及各类主按钮)在暗色下就变成一整块白。 - 现在暗色(
body[data-ds-dark-theme]、[data-theme="dusk"])下主按钮统一用绿色实底#3d8f68+ 白字,悬停用更深的#347a59;-webkit-text-fill-color一并显式指定,避免宿主强制白字穿透。 - 报告里的步骤序号圆点(
.rt-rep-step-no)同样改为绿底白字。 - 浅色模式表现不变;新增
test/client-dark-theme.test.js静态守护这几条暗色规则。
- 根因:宿主暗色主题把
- 测试:84/84 通过。
English
- 1.1.85.
- #196: fix buttons in dark mode rendering as a solid white block (white text on white background).
- Root cause: the host dark theme resolves
--dsw-alias-brand-primaryto a near-white token (neutral-bluish-50,#f9fafb). Every plugin button that used "brand color as background + white text" (settings Apply, Save injection, drill console Save, Search, Test connectivity, and other primary buttons) turned into a white block in dark mode. - Primary buttons under dark themes (
body[data-ds-dark-theme],[data-theme="dusk"]) now use a solid green#3d8f68with white text, with#347a59on hover;-webkit-text-fill-coloris set explicitly so host-forced white text cannot leak through. - The report step-number dots (
.rt-rep-step-no) are switched to the same green/white pair. - Light mode is unchanged; added
test/client-dark-theme.test.jsto guard these dark-mode rules.
- Root cause: the host dark theme resolves
- Tests: 84/84 pass.
1.1.84
中文
- 版本 1.1.84。
- 尾部锚点与子代理审批接管(接线
anchor.js/subagent-control.js):- 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。
- 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。
- 子会话被宿主写成
approval/policy = "never"时改回ask,并在approval/request瀑布放行,子代理不再"一直被拒"。 - 回滚开关:
anchorMode: "off"、subagentControl: false。
- 红队模式中文化:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。
- #194:desktop 端启动后窗口永不显示。
- hung-operator 提示改为按内容变更缓存(home + mtime + 已提交修订号),内容没变不再每轮重算约 23KB。
- 增加风暴熔断(10 秒 120 次)与慢调用熔断(1.5 秒触发、30 秒冷却),熔断期直接返回缓存文本,不挂死 desktop host。
- 同一次 assemble 的重复改写用 WeakMap 去重。
- 新增补丁 #91:宿主
code === null || signal静默 resolve 前写一条[desktop.hostExit]到%TEMP%\dsh-purge-desktop.log,保持不弹框但有据可查。
- #188(0.2.1-rc.4 专属部分):新增 #89 沙箱策略去品牌、#90 skill-badge 描述中文化,扩展 #32/#53 的 rc.3 变体与 marker;三条新补丁均为 optional,宿主没有对应文件时静默跳过。
- 测试:81/81 通过;新增锚点接线与红队文案测试。
English
- 1.1.84.
- Tail anchor and subagent approval takeover (wiring
anchor.js/subagent-control.js):- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
order), putting identity and format rules back in the recency slot; any existing same-named section is filtered first so there is never a duplicate. - Anchor rules now follow the operator's language: a Chinese request gets a Chinese answer, and the anchor being written in English is not a language instruction. The hard-coded English opener was removed (the direct cause of red-team mode answering in English).
- When the host writes
approval/policy = "never"for a child session, it is flipped back toaskand allowed in theapproval/requestwaterfall, so subagents are no longer refused every time. - Rollback switches:
anchorMode: "off",subagentControl: false.
- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
- Red-team mode localized to Chinese: mode name and description, role names, the five-stage attack chain, the 25-item scoring rules and POC categories, skill-fix guidance, environment-adaptation hints, panel and server messages, and both the results report and the replay report.
- #194: desktop window never appears after launch.
- The hung-operator prompt is now cached by content change (home + mtime + committed revision); an unchanged prompt is no longer rebuilt (~23KB) on every refresh.
- Storm breaker (120 calls / 10s) and slow-call breaker (trip at 1.5s, 30s cooldown) return the cached text instead of stalling the desktop host.
- Duplicate rewrites within the same assemble call are deduped with a WeakMap.
- New patch #91: before the host silently resolves
code === null || signal, append a[desktop.hostExit]line to%TEMP%\dsh-purge-desktop.log— still no dialog, but no longer invisible.
- #188 (0.2.1-rc.4-specific parts): new #89 sandbox-policy brand neutralization and #90 skill-badge description localization, plus rc.3 variants and markers for #32/#53; all three new patches are optional and are skipped silently when the host has no matching file.
- Tests: 81/81 pass; new coverage for anchor wiring and red-team copy.
1.1.83
中文
- 版本 1.1.83。修复 bug,修复稳定性。
- #185:修复 pnpm 11(DSH 内置 11.2.2)下
pnpm install因allowBuilds崩溃的问题。- 之前 profile 的
pnpm-workspace.yaml会写入dsh-purge@https://...这类 URL 键,pnpm 把它当版本联合解析,直接报[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union。 - 现在只写裸包名
dsh-purge:pnpm 的allowBuilds本来就按包名匹配,tarball / git / registry 三种安装形态都放行。 - 自愈加强:所有
dsh-purge@*历史键(URL 键、旧截断键dsh-purge@https、@1.1.81之类版本键)一律清掉,只保留裸包名;非 dsh-purge 的键原样保留。
- 之前 profile 的
- #191:修复 macOS DSH Desktop(0.2.1-rc.4)启动崩溃
failed to parse overlay .../cordis.patch.yml。- 宿主生成的 profile 层
cordis.patch.yml可能整体只有一个空 flow 序列[],那本身就是一个完整 YAML 文档;再往文件尾追加- insert:会变成第二个文档,宿主解析直接失败。 - 现在写之前先判断数据部分形态:空 flow 序列(
[],可带---前缀)→ 替换[]整行而不是追加;空文件 / 只有注释 → 直接写 insert 块;正常块序列 → 沿用原来的追加行为。 - 非空 flow 序列(宿主或用户自己的内容)认不准就不动,返回
{ ok: false, wrote: false },宁可留着也不写坏。
- 宿主生成的 profile 层
English
- 1.1.83. Bug fixes and stability.
- #185: fix
pnpm installcrashing under pnpm 11 (11.2.2, bundled with DSH) because ofallowBuilds.- The profile
pnpm-workspace.yamlused to get adsh-purge@https://...URL key, which pnpm parses as a version union and rejects with[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union. - Now only the bare package name
dsh-purgeis written: pnpm matchesallowBuildsby package name, so tarball / git / registry installs are all allowed. - Stronger self-healing: every
dsh-purge@*legacy key (URL keys, truncateddsh-purge@https,@1.1.81-style version keys) is dropped and only the bare name is kept; non-dsh-purge keys are preserved as-is.
- The profile
- #191: fix the macOS DSH Desktop (0.2.1-rc.4) startup crash
failed to parse overlay .../cordis.patch.yml.- The host-generated profile
cordis.patch.ymlmay consist of a single empty flow sequence[], which is already a complete YAML document; appending- insert:after it creates a second document and the host fails to parse it. - The data shape is now detected before writing: an empty flow sequence (
[], optionally----prefixed) → replace the[]line instead of appending; empty file / comments only → write the insert block; a normal block sequence → the previous append behaviour is kept. - A non-empty flow sequence (host or user content) is left alone and returns
{ ok: false, wrote: false }— better to skip than to write something broken.
- The host-generated profile
1.1.82
中文
- 版本 1.1.82。修复 bug,修复稳定性。
- #180:修复 profile 的
pnpm-workspace.yamlallowBuilds被反复写坏(dsh-purge@https: true畸形键 →ERR_PNPM_INVALID_VERSION_UNION,重复键 →duplicated mapping key)。- URL 键解析不再被冒号截断;写回含
://的键自动加引号。 - 重写只保留精确等于期望键的
dsh-purge@*,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的
pnpm-lock.yaml读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回package.json。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。
- URL 键解析不再被冒号截断;写回含
English
- 1.1.82. Bug fixes and stability.
- #180: stop rewriting the profile
pnpm-workspace.yamlallowBuildsinto garbage (dsh-purge@https: truemalformed key →ERR_PNPM_INVALID_VERSION_UNION; duplicated ...
v1.1.85
1.1.85
中文
- 版本 1.1.85。
- #196:修复深色模式下部分按钮白底白字、完全看不清的问题。
- 根因:宿主暗色主题把
--dsw-alias-brand-primary解析成近白色(neutral-bluish-50#f9fafb)。插件里凡是"品牌色作底 + 白字"的按钮(设置页的「应用」「保存注入」、演练台的「保存」「检索」「检测连通性」以及各类主按钮)在暗色下就变成一整块白。 - 现在暗色(
body[data-ds-dark-theme]、[data-theme="dusk"])下主按钮统一用绿色实底#3d8f68+ 白字,悬停用更深的#347a59;-webkit-text-fill-color一并显式指定,避免宿主强制白字穿透。 - 报告里的步骤序号圆点(
.rt-rep-step-no)同样改为绿底白字。 - 浅色模式表现不变;新增
test/client-dark-theme.test.js静态守护这几条暗色规则。
- 根因:宿主暗色主题把
- 测试:84/84 通过。
English
- 1.1.85.
- #196: fix buttons in dark mode rendering as a solid white block (white text on white background).
- Root cause: the host dark theme resolves
--dsw-alias-brand-primaryto a near-white token (neutral-bluish-50,#f9fafb). Every plugin button that used "brand color as background + white text" (settings Apply, Save injection, drill console Save, Search, Test connectivity, and other primary buttons) turned into a white block in dark mode. - Primary buttons under dark themes (
body[data-ds-dark-theme],[data-theme="dusk"]) now use a solid green#3d8f68with white text, with#347a59on hover;-webkit-text-fill-coloris set explicitly so host-forced white text cannot leak through. - The report step-number dots (
.rt-rep-step-no) are switched to the same green/white pair. - Light mode is unchanged; added
test/client-dark-theme.test.jsto guard these dark-mode rules.
- Root cause: the host dark theme resolves
- Tests: 84/84 pass.
1.1.84
中文
- 版本 1.1.84。
- 尾部锚点与子代理审批接管(接线
anchor.js/subagent-control.js):- 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。
- 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。
- 子会话被宿主写成
approval/policy = "never"时改回ask,并在approval/request瀑布放行,子代理不再"一直被拒"。 - 回滚开关:
anchorMode: "off"、subagentControl: false。
- 红队模式中文化:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。
- #194:desktop 端启动后窗口永不显示。
- hung-operator 提示改为按内容变更缓存(home + mtime + 已提交修订号),内容没变不再每轮重算约 23KB。
- 增加风暴熔断(10 秒 120 次)与慢调用熔断(1.5 秒触发、30 秒冷却),熔断期直接返回缓存文本,不挂死 desktop host。
- 同一次 assemble 的重复改写用 WeakMap 去重。
- 新增补丁 #91:宿主
code === null || signal静默 resolve 前写一条[desktop.hostExit]到%TEMP%\dsh-purge-desktop.log,保持不弹框但有据可查。
- #188(0.2.1-rc.4 专属部分):新增 #89 沙箱策略去品牌、#90 skill-badge 描述中文化,扩展 #32/#53 的 rc.3 变体与 marker;三条新补丁均为 optional,宿主没有对应文件时静默跳过。
- 测试:81/81 通过;新增锚点接线与红队文案测试。
English
- 1.1.84.
- Tail anchor and subagent approval takeover (wiring
anchor.js/subagent-control.js):- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
order), putting identity and format rules back in the recency slot; any existing same-named section is filtered first so there is never a duplicate. - Anchor rules now follow the operator's language: a Chinese request gets a Chinese answer, and the anchor being written in English is not a language instruction. The hard-coded English opener was removed (the direct cause of red-team mode answering in English).
- When the host writes
approval/policy = "never"for a child session, it is flipped back toaskand allowed in theapproval/requestwaterfall, so subagents are no longer refused every time. - Rollback switches:
anchorMode: "off",subagentControl: false.
- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
- Red-team mode localized to Chinese: mode name and description, role names, the five-stage attack chain, the 25-item scoring rules and POC categories, skill-fix guidance, environment-adaptation hints, panel and server messages, and both the results report and the replay report.
- #194: desktop window never appears after launch.
- The hung-operator prompt is now cached by content change (home + mtime + committed revision); an unchanged prompt is no longer rebuilt (~23KB) on every refresh.
- Storm breaker (120 calls / 10s) and slow-call breaker (trip at 1.5s, 30s cooldown) return the cached text instead of stalling the desktop host.
- Duplicate rewrites within the same assemble call are deduped with a WeakMap.
- New patch #91: before the host silently resolves
code === null || signal, append a[desktop.hostExit]line to%TEMP%\dsh-purge-desktop.log— still no dialog, but no longer invisible.
- #188 (0.2.1-rc.4-specific parts): new #89 sandbox-policy brand neutralization and #90 skill-badge description localization, plus rc.3 variants and markers for #32/#53; all three new patches are optional and are skipped silently when the host has no matching file.
- Tests: 81/81 pass; new coverage for anchor wiring and red-team copy.
1.1.83
中文
- 版本 1.1.83。修复 bug,修复稳定性。
- #185:修复 pnpm 11(DSH 内置 11.2.2)下
pnpm install因allowBuilds崩溃的问题。- 之前 profile 的
pnpm-workspace.yaml会写入dsh-purge@https://...这类 URL 键,pnpm 把它当版本联合解析,直接报[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union。 - 现在只写裸包名
dsh-purge:pnpm 的allowBuilds本来就按包名匹配,tarball / git / registry 三种安装形态都放行。 - 自愈加强:所有
dsh-purge@*历史键(URL 键、旧截断键dsh-purge@https、@1.1.81之类版本键)一律清掉,只保留裸包名;非 dsh-purge 的键原样保留。
- 之前 profile 的
- #191:修复 macOS DSH Desktop(0.2.1-rc.4)启动崩溃
failed to parse overlay .../cordis.patch.yml。- 宿主生成的 profile 层
cordis.patch.yml可能整体只有一个空 flow 序列[],那本身就是一个完整 YAML 文档;再往文件尾追加- insert:会变成第二个文档,宿主解析直接失败。 - 现在写之前先判断数据部分形态:空 flow 序列(
[],可带---前缀)→ 替换[]整行而不是追加;空文件 / 只有注释 → 直接写 insert 块;正常块序列 → 沿用原来的追加行为。 - 非空 flow 序列(宿主或用户自己的内容)认不准就不动,返回
{ ok: false, wrote: false },宁可留着也不写坏。
- 宿主生成的 profile 层
English
- 1.1.83. Bug fixes and stability.
- #185: fix
pnpm installcrashing under pnpm 11 (11.2.2, bundled with DSH) because ofallowBuilds.- The profile
pnpm-workspace.yamlused to get adsh-purge@https://...URL key, which pnpm parses as a version union and rejects with[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union. - Now only the bare package name
dsh-purgeis written: pnpm matchesallowBuildsby package name, so tarball / git / registry installs are all allowed. - Stronger self-healing: every
dsh-purge@*legacy key (URL keys, truncateddsh-purge@https,@1.1.81-style version keys) is dropped and only the bare name is kept; non-dsh-purge keys are preserved as-is.
- The profile
- #191: fix the macOS DSH Desktop (0.2.1-rc.4) startup crash
failed to parse overlay .../cordis.patch.yml.- The host-generated profile
cordis.patch.ymlmay consist of a single empty flow sequence[], which is already a complete YAML document; appending- insert:after it creates a second document and the host fails to parse it. - The data shape is now detected before writing: an empty flow sequence (
[], optionally----prefixed) → replace the[]line instead of appending; empty file / comments only → write the insert block; a normal block sequence → the previous append behaviour is kept. - A non-empty flow sequence (host or user content) is left alone and returns
{ ok: false, wrote: false }— better to skip than to write something broken.
- The host-generated profile
1.1.82
中文
- 版本 1.1.82。修复 bug,修复稳定性。
- #180:修复 profile 的
pnpm-workspace.yamlallowBuilds被反复写坏(dsh-purge@https: true畸形键 →ERR_PNPM_INVALID_VERSION_UNION,重复键 →duplicated mapping key)。- URL 键解析不再被冒号截断;写回含
://的键自动加引号。 - 重写只保留精确等于期望键的
dsh-purge@*,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的
pnpm-lock.yaml读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回package.json。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。
- URL 键解析不再被冒号截断;写回含
English
- 1.1.82. Bug fixes and stability.
- #180: stop rewriting the profile
pnpm-workspace.yamlallowBuildsinto garbage (dsh-purge@https: truemalformed key →ERR_PNPM_INVALID_VERSION_UNION; duplicated keys →duplicated mapping key).- URL keys no longer truncate at the first colon; keys containing
://are written back quoted. - Rewrites keep only
dsh-purge@*keys exactly equal to the wanted set; stale polluted keys (malformed, old version/commit URLs) self-heal away on the next ensure. - The wanted key prefers the tarball URL actually resolved in the profile
pnpm-lock.yaml(fixed-commit installs no longer get a duplicate URL key); falls back topackage.json. - Rewritten output passes a minimal YAML check first (no duplicate keys, lossless round-trip); healthy files are never written again, so boot no longer rewrites each run.
- URL keys no longer truncate at the first colon; keys containing
1.1.81
中文
- 版本 1.1.81。修复 bug,修复稳定性。
- #174:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。
DSH_SURFACE=web也不再误报;不把任意app.asar当桌面。 - #175:补 ip / 计分 / settle 单测,删草稿文档和
.bak。npm test23 条全过。 - #171 / #173:zip 目录条目和 skills
fs导入已在 1.1.80,本版用单测锁住。
English
- 1.1.81. Bug fixes and stability.
- #174: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when
DSH_SURFACE=web. A randomapp.asaris not treated as the host. - #175: add ip / score / settle tests; drop draft docs and
.bak.npm testis 23/23 green. - #171 / #173: zip directory entries and the skills
fsimport shipped in 1.1.80; this release locks them with tests.
1.1.80
中文
- 版本 1.1.80。修复 bug,修复稳定性。
- #168:pnpm 12 的
allowBuilds把dsh-purge@codeload...也写成true,装别的插件不再留下set this to true or false。 - #169:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。
- #170:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。
- #172:
lib/skills.js补上fs,#54 软链重叠守卫重新生效。 - #176:写清 不支持 DSH 0.2.1-rc.3 及更新的 rc,请退回 0.2.1-rc.2。对不上的补丁待应用或跳过,不乱改文件。
English
- 1.1.80. Bug fixes and stability.
- #168: pnpm 12
allowBuildsalso setsdsh-purge@codeload...totrue, so installing other plugins no longer leavesset this to true or false. - #169: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label.
- #170: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIS...
v1.1.84
1.1.84
中文
- 版本 1.1.84。
- 尾部锚点与子代理审批接管(接线
anchor.js/subagent-control.js):- 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。
- 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。
- 子会话被宿主写成
approval/policy = "never"时改回ask,并在approval/request瀑布放行,子代理不再"一直被拒"。 - 回滚开关:
anchorMode: "off"、subagentControl: false。
- 红队模式中文化:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。
- #194:desktop 端启动后窗口永不显示。
- hung-operator 提示改为按内容变更缓存(home + mtime + 已提交修订号),内容没变不再每轮重算约 23KB。
- 增加风暴熔断(10 秒 120 次)与慢调用熔断(1.5 秒触发、30 秒冷却),熔断期直接返回缓存文本,不挂死 desktop host。
- 同一次 assemble 的重复改写用 WeakMap 去重。
- 新增补丁 #91:宿主
code === null || signal静默 resolve 前写一条[desktop.hostExit]到%TEMP%\dsh-purge-desktop.log,保持不弹框但有据可查。
- #188(0.2.1-rc.4 专属部分):新增 #89 沙箱策略去品牌、#90 skill-badge 描述中文化,扩展 #32/#53 的 rc.3 变体与 marker;三条新补丁均为 optional,宿主没有对应文件时静默跳过。
- 测试:81/81 通过;新增锚点接线与红队文案测试。
English
- 1.1.84.
- Tail anchor and subagent approval takeover (wiring
anchor.js/subagent-control.js):- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
order), putting identity and format rules back in the recency slot; any existing same-named section is filtered first so there is never a duplicate. - Anchor rules now follow the operator's language: a Chinese request gets a Chinese answer, and the anchor being written in English is not a language instruction. The hard-coded English opener was removed (the direct cause of red-team mode answering in English).
- When the host writes
approval/policy = "never"for a child session, it is flipped back toaskand allowed in theapproval/requestwaterfall, so subagents are no longer refused every time. - Rollback switches:
anchorMode: "off",subagentControl: false.
- The anchor section is physically appended to the end of the system-prompt sections array (the waterfall renders by array order, not by
- Red-team mode localized to Chinese: mode name and description, role names, the five-stage attack chain, the 25-item scoring rules and POC categories, skill-fix guidance, environment-adaptation hints, panel and server messages, and both the results report and the replay report.
- #194: desktop window never appears after launch.
- The hung-operator prompt is now cached by content change (home + mtime + committed revision); an unchanged prompt is no longer rebuilt (~23KB) on every refresh.
- Storm breaker (120 calls / 10s) and slow-call breaker (trip at 1.5s, 30s cooldown) return the cached text instead of stalling the desktop host.
- Duplicate rewrites within the same assemble call are deduped with a WeakMap.
- New patch #91: before the host silently resolves
code === null || signal, append a[desktop.hostExit]line to%TEMP%\dsh-purge-desktop.log— still no dialog, but no longer invisible.
- #188 (0.2.1-rc.4-specific parts): new #89 sandbox-policy brand neutralization and #90 skill-badge description localization, plus rc.3 variants and markers for #32/#53; all three new patches are optional and are skipped silently when the host has no matching file.
- Tests: 81/81 pass; new coverage for anchor wiring and red-team copy.
1.1.83
中文
- 版本 1.1.83。修复 bug,修复稳定性。
- #185:修复 pnpm 11(DSH 内置 11.2.2)下
pnpm install因allowBuilds崩溃的问题。- 之前 profile 的
pnpm-workspace.yaml会写入dsh-purge@https://...这类 URL 键,pnpm 把它当版本联合解析,直接报[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union。 - 现在只写裸包名
dsh-purge:pnpm 的allowBuilds本来就按包名匹配,tarball / git / registry 三种安装形态都放行。 - 自愈加强:所有
dsh-purge@*历史键(URL 键、旧截断键dsh-purge@https、@1.1.81之类版本键)一律清掉,只保留裸包名;非 dsh-purge 的键原样保留。
- 之前 profile 的
- #191:修复 macOS DSH Desktop(0.2.1-rc.4)启动崩溃
failed to parse overlay .../cordis.patch.yml。- 宿主生成的 profile 层
cordis.patch.yml可能整体只有一个空 flow 序列[],那本身就是一个完整 YAML 文档;再往文件尾追加- insert:会变成第二个文档,宿主解析直接失败。 - 现在写之前先判断数据部分形态:空 flow 序列(
[],可带---前缀)→ 替换[]整行而不是追加;空文件 / 只有注释 → 直接写 insert 块;正常块序列 → 沿用原来的追加行为。 - 非空 flow 序列(宿主或用户自己的内容)认不准就不动,返回
{ ok: false, wrote: false },宁可留着也不写坏。
- 宿主生成的 profile 层
English
- 1.1.83. Bug fixes and stability.
- #185: fix
pnpm installcrashing under pnpm 11 (11.2.2, bundled with DSH) because ofallowBuilds.- The profile
pnpm-workspace.yamlused to get adsh-purge@https://...URL key, which pnpm parses as a version union and rejects with[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union. - Now only the bare package name
dsh-purgeis written: pnpm matchesallowBuildsby package name, so tarball / git / registry installs are all allowed. - Stronger self-healing: every
dsh-purge@*legacy key (URL keys, truncateddsh-purge@https,@1.1.81-style version keys) is dropped and only the bare name is kept; non-dsh-purge keys are preserved as-is.
- The profile
- #191: fix the macOS DSH Desktop (0.2.1-rc.4) startup crash
failed to parse overlay .../cordis.patch.yml.- The host-generated profile
cordis.patch.ymlmay consist of a single empty flow sequence[], which is already a complete YAML document; appending- insert:after it creates a second document and the host fails to parse it. - The data shape is now detected before writing: an empty flow sequence (
[], optionally----prefixed) → replace the[]line instead of appending; empty file / comments only → write the insert block; a normal block sequence → the previous append behaviour is kept. - A non-empty flow sequence (host or user content) is left alone and returns
{ ok: false, wrote: false }— better to skip than to write something broken.
- The host-generated profile
1.1.82
中文
- 版本 1.1.82。修复 bug,修复稳定性。
- #180:修复 profile 的
pnpm-workspace.yamlallowBuilds被反复写坏(dsh-purge@https: true畸形键 →ERR_PNPM_INVALID_VERSION_UNION,重复键 →duplicated mapping key)。- URL 键解析不再被冒号截断;写回含
://的键自动加引号。 - 重写只保留精确等于期望键的
dsh-purge@*,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的
pnpm-lock.yaml读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回package.json。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。
- URL 键解析不再被冒号截断;写回含
English
- 1.1.82. Bug fixes and stability.
- #180: stop rewriting the profile
pnpm-workspace.yamlallowBuildsinto garbage (dsh-purge@https: truemalformed key →ERR_PNPM_INVALID_VERSION_UNION; duplicated keys →duplicated mapping key).- URL keys no longer truncate at the first colon; keys containing
://are written back quoted. - Rewrites keep only
dsh-purge@*keys exactly equal to the wanted set; stale polluted keys (malformed, old version/commit URLs) self-heal away on the next ensure. - The wanted key prefers the tarball URL actually resolved in the profile
pnpm-lock.yaml(fixed-commit installs no longer get a duplicate URL key); falls back topackage.json. - Rewritten output passes a minimal YAML check first (no duplicate keys, lossless round-trip); healthy files are never written again, so boot no longer rewrites each run.
- URL keys no longer truncate at the first colon; keys containing
1.1.81
中文
- 版本 1.1.81。修复 bug,修复稳定性。
- #174:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。
DSH_SURFACE=web也不再误报;不把任意app.asar当桌面。 - #175:补 ip / 计分 / settle 单测,删草稿文档和
.bak。npm test23 条全过。 - #171 / #173:zip 目录条目和 skills
fs导入已在 1.1.80,本版用单测锁住。
English
- 1.1.81. Bug fixes and stability.
- #174: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when
DSH_SURFACE=web. A randomapp.asaris not treated as the host. - #175: add ip / score / settle tests; drop draft docs and
.bak.npm testis 23/23 green. - #171 / #173: zip directory entries and the skills
fsimport shipped in 1.1.80; this release locks them with tests.
1.1.80
中文
- 版本 1.1.80。修复 bug,修复稳定性。
- #168:pnpm 12 的
allowBuilds把dsh-purge@codeload...也写成true,装别的插件不再留下set this to true or false。 - #169:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。
- #170:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。
- #172:
lib/skills.js补上fs,#54 软链重叠守卫重新生效。 - #176:写清 不支持 DSH 0.2.1-rc.3 及更新的 rc,请退回 0.2.1-rc.2。对不上的补丁待应用或跳过,不乱改文件。
English
- 1.1.80. Bug fixes and stability.
- #168: pnpm 12
allowBuildsalso setsdsh-purge@codeload...totrue, so installing other plugins no longer leavesset this to true or false. - #169: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label.
- #170: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIST).
- #172: import
fsinlib/skills.jsso the #54 symlink overlap guard works again. - #176: DSH 0.2.1-rc.3 and newer RCs are not supported. Stay on 0.2.1-rc.2. Unmatched patches stay pending or skipped.
1.1.79
中文
- 版本 1.1.79。修复 bug,修复稳定性。
- #165:社区版 DS Bot / DeepSeek Bot 按桌面宿主识别(
ds-botprofile、Electron asar),不再误报set DSH_BASE。 - #166:pnpm 12 拦
postinstall时补allowBuilds,并写清--allow-build=dsh-purge/approve-builds。 - #167:升级后补回
bundles+ 本体 insert,空芯片不再把启动钮藏掉,1.1.74 有的按钮会回来。 - 应用/还原/卸载进度条跟 job 阶段;主智能体和子智能体同一份注入、权限和能力协议。
- 新建会话不再把
dsh-purge芯片甩到行尾。
English
- 1.1.79. Bug fixes and stability.
- #165: community DS Bot / DeepSeek Bot is a desktop host (
ds-botprofile, Electron asar); no more falseset DSH_BASE. - #166: pnpm 12 skipped
postinstall; writeallowBuildsand document--allow-build=dsh-purge. - #167: restore
bundles+ body insert after upgrade so the 1.1.74 button comes back. - Apply / revert / uninstall progress follows the job; main and subagents share inject, permission, and capability text.
- New-session no longer shoves the
dsh-purgechip to the far right.
1.1.78
中文
- 版本 1.1.78。修复 bug:停用/卸载后无法新建会话。
- #108:停用或卸载时把
agent-preset-registry.selectedDefault从redteam改回standard,并清掉$DSH_HOME/.agent-presets/redteam。热重载不会冲掉用户设的红队默认。 - 卸载同时处理
dsh.profile.bundles/dsh.profile.plugins,桌面 profile 不再残留dsh-purge。
En...
v1.1.83
1.1.83
中文
- 版本 1.1.83。修复 bug,修复稳定性。
- #185:修复 pnpm 11(DSH 内置 11.2.2)下
pnpm install因allowBuilds崩溃的问题。- 之前 profile 的
pnpm-workspace.yaml会写入dsh-purge@https://...这类 URL 键,pnpm 把它当版本联合解析,直接报[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union。 - 现在只写裸包名
dsh-purge:pnpm 的allowBuilds本来就按包名匹配,tarball / git / registry 三种安装形态都放行。 - 自愈加强:所有
dsh-purge@*历史键(URL 键、旧截断键dsh-purge@https、@1.1.81之类版本键)一律清掉,只保留裸包名;非 dsh-purge 的键原样保留。
- 之前 profile 的
- #191:修复 macOS DSH Desktop(0.2.1-rc.4)启动崩溃
failed to parse overlay .../cordis.patch.yml。- 宿主生成的 profile 层
cordis.patch.yml可能整体只有一个空 flow 序列[],那本身就是一个完整 YAML 文档;再往文件尾追加- insert:会变成第二个文档,宿主解析直接失败。 - 现在写之前先判断数据部分形态:空 flow 序列(
[],可带---前缀)→ 替换[]整行而不是追加;空文件 / 只有注释 → 直接写 insert 块;正常块序列 → 沿用原来的追加行为。 - 非空 flow 序列(宿主或用户自己的内容)认不准就不动,返回
{ ok: false, wrote: false },宁可留着也不写坏。
- 宿主生成的 profile 层
English
- 1.1.83. Bug fixes and stability.
- #185: fix
pnpm installcrashing under pnpm 11 (11.2.2, bundled with DSH) because ofallowBuilds.- The profile
pnpm-workspace.yamlused to get adsh-purge@https://...URL key, which pnpm parses as a version union and rejects with[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union. - Now only the bare package name
dsh-purgeis written: pnpm matchesallowBuildsby package name, so tarball / git / registry installs are all allowed. - Stronger self-healing: every
dsh-purge@*legacy key (URL keys, truncateddsh-purge@https,@1.1.81-style version keys) is dropped and only the bare name is kept; non-dsh-purge keys are preserved as-is.
- The profile
- #191: fix the macOS DSH Desktop (0.2.1-rc.4) startup crash
failed to parse overlay .../cordis.patch.yml.- The host-generated profile
cordis.patch.ymlmay consist of a single empty flow sequence[], which is already a complete YAML document; appending- insert:after it creates a second document and the host fails to parse it. - The data shape is now detected before writing: an empty flow sequence (
[], optionally----prefixed) → replace the[]line instead of appending; empty file / comments only → write the insert block; a normal block sequence → the previous append behaviour is kept. - A non-empty flow sequence (host or user content) is left alone and returns
{ ok: false, wrote: false }— better to skip than to write something broken.
- The host-generated profile
1.1.82
中文
- 版本 1.1.82。修复 bug,修复稳定性。
- #180:修复 profile 的
pnpm-workspace.yamlallowBuilds被反复写坏(dsh-purge@https: true畸形键 →ERR_PNPM_INVALID_VERSION_UNION,重复键 →duplicated mapping key)。- URL 键解析不再被冒号截断;写回含
://的键自动加引号。 - 重写只保留精确等于期望键的
dsh-purge@*,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的
pnpm-lock.yaml读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回package.json。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。
- URL 键解析不再被冒号截断;写回含
English
- 1.1.82. Bug fixes and stability.
- #180: stop rewriting the profile
pnpm-workspace.yamlallowBuildsinto garbage (dsh-purge@https: truemalformed key →ERR_PNPM_INVALID_VERSION_UNION; duplicated keys →duplicated mapping key).- URL keys no longer truncate at the first colon; keys containing
://are written back quoted. - Rewrites keep only
dsh-purge@*keys exactly equal to the wanted set; stale polluted keys (malformed, old version/commit URLs) self-heal away on the next ensure. - The wanted key prefers the tarball URL actually resolved in the profile
pnpm-lock.yaml(fixed-commit installs no longer get a duplicate URL key); falls back topackage.json. - Rewritten output passes a minimal YAML check first (no duplicate keys, lossless round-trip); healthy files are never written again, so boot no longer rewrites each run.
- URL keys no longer truncate at the first colon; keys containing
1.1.81
中文
- 版本 1.1.81。修复 bug,修复稳定性。
- #174:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。
DSH_SURFACE=web也不再误报;不把任意app.asar当桌面。 - #175:补 ip / 计分 / settle 单测,删草稿文档和
.bak。npm test23 条全过。 - #171 / #173:zip 目录条目和 skills
fs导入已在 1.1.80,本版用单测锁住。
English
- 1.1.81. Bug fixes and stability.
- #174: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when
DSH_SURFACE=web. A randomapp.asaris not treated as the host. - #175: add ip / score / settle tests; drop draft docs and
.bak.npm testis 23/23 green. - #171 / #173: zip directory entries and the skills
fsimport shipped in 1.1.80; this release locks them with tests.
1.1.80
中文
- 版本 1.1.80。修复 bug,修复稳定性。
- #168:pnpm 12 的
allowBuilds把dsh-purge@codeload...也写成true,装别的插件不再留下set this to true or false。 - #169:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。
- #170:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。
- #172:
lib/skills.js补上fs,#54 软链重叠守卫重新生效。 - #176:写清 不支持 DSH 0.2.1-rc.3 及更新的 rc,请退回 0.2.1-rc.2。对不上的补丁待应用或跳过,不乱改文件。
English
- 1.1.80. Bug fixes and stability.
- #168: pnpm 12
allowBuildsalso setsdsh-purge@codeload...totrue, so installing other plugins no longer leavesset this to true or false. - #169: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label.
- #170: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIST).
- #172: import
fsinlib/skills.jsso the #54 symlink overlap guard works again. - #176: DSH 0.2.1-rc.3 and newer RCs are not supported. Stay on 0.2.1-rc.2. Unmatched patches stay pending or skipped.
1.1.79
中文
- 版本 1.1.79。修复 bug,修复稳定性。
- #165:社区版 DS Bot / DeepSeek Bot 按桌面宿主识别(
ds-botprofile、Electron asar),不再误报set DSH_BASE。 - #166:pnpm 12 拦
postinstall时补allowBuilds,并写清--allow-build=dsh-purge/approve-builds。 - #167:升级后补回
bundles+ 本体 insert,空芯片不再把启动钮藏掉,1.1.74 有的按钮会回来。 - 应用/还原/卸载进度条跟 job 阶段;主智能体和子智能体同一份注入、权限和能力协议。
- 新建会话不再把
dsh-purge芯片甩到行尾。
English
- 1.1.79. Bug fixes and stability.
- #165: community DS Bot / DeepSeek Bot is a desktop host (
ds-botprofile, Electron asar); no more falseset DSH_BASE. - #166: pnpm 12 skipped
postinstall; writeallowBuildsand document--allow-build=dsh-purge. - #167: restore
bundles+ body insert after upgrade so the 1.1.74 button comes back. - Apply / revert / uninstall progress follows the job; main and subagents share inject, permission, and capability text.
- New-session no longer shoves the
dsh-purgechip to the far right.
1.1.78
中文
- 版本 1.1.78。修复 bug:停用/卸载后无法新建会话。
- #108:停用或卸载时把
agent-preset-registry.selectedDefault从redteam改回standard,并清掉$DSH_HOME/.agent-presets/redteam。热重载不会冲掉用户设的红队默认。 - 卸载同时处理
dsh.profile.bundles/dsh.profile.plugins,桌面 profile 不再残留dsh-purge。
English
- 1.1.78. Bug fix: new sessions after disable/uninstall.
- #108: on disable or uninstall, reset
agent-preset-registry.selectedDefaultfromredteamtostandard, and remove$DSH_HOME/.agent-presets/redteam. Hot reload keeps a user-chosen redteam default. - Uninstall also strips
dsh.profile.bundles/dsh.profile.plugins.
1.1.77
中文
- 版本 1.1.77。修复 bug,修复稳定性。
- 修长红队任务仍打公网:
渗透测试/红队/打点/拿站纳入门禁;正文按窗扫到 256KB,目标写在后半段也能拦。 - 修后续步骤漏拦:每一步看工具参数,
tools/pre-execute遇到公网 IP/域名直接停轮。 - 长文正则按窗扫,避免整篇回溯把事件循环卡死。
English
- 1.1.77. Bug fixes and stability.
- Long red-team tasks no longer reach the public internet:
渗透测试/ red-team / 打点 / 拿站 are gated; the body is scanned in windows up to 256KB. - Later steps are gated too: tool arguments are checked, and
tools/pre-executestops on a public IP or name. - Long-text regex runs in windows so a huge paste cannot stall the event loop.
1.1.76
中文
- 版本 1.1.76。适配只走 pnpm 的机器:在 profile 目录
pnpm addcodeload 压缩包即可,postinstall自动把dsh-purge写进bundles。 - 安装地址改成
codeload.github.com,避开github.com/archive的 302(pnpm 会fetch failed)。不要pnpm add dsh-purge(npm 仓库没有这个名字)。
English
- 1.1.76. pnpm-only hosts:
pnpm addthe codeload tarball inside the profile;postinstallwritesdsh-purgeintobundles. - Install URL is
codeload.github.comso pnpm does not die on thegithub.com/archive302. Do notpnpm add dsh-purge— that name is not on the npm registry.
1.1.75
中文
- 版本 1.1.75。修 Hub 市场一键安装报
already queued: dsh-purge:cordis.patch.yml不再把已经在 bundles 里的本体再 insert 一遍。 - README 把安装写成三步:只用 GitHub 压缩包命令,不走插件市场 /
github:/ npm。
English
- 1.1.75. Fix Hub one-click
already queued: dsh-purge: the bundle patch no longer inserts the plugin that is already inbundles. - README install is three steps: GitHub tarball only; skip the plugin market /
github:/ npm.
1.1.74
中文
- 版本 1.1.74,优化若干拦截与加载 bug。适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 修靶场门禁:域名先解析再判 IP,不再靠
.lab/.htb后缀放行;hosts指到公网、解析失败、混有公网,一律拦。 - 修身份绕过:
169.254云元数据不再当靶场;::ffff:公网拆开再判;攻击句不写目标不再放行。 - 修 DSH 0.2.1 预设加载:对象 schema 补
additionalProperties,装过的 redteam 预设清掉残留toolFilter。 - 修演练台被改成英文:中文页签收回。
- 禁止制作外挂:会话门口硬拦,提示词 Rule 1 改为禁止。
English
- 1.1.74, bug-fix release. Target DSH 0.2.1-rc.2 (0.2.0 still works).
- Lab gate: resolve first, then allow only private IPs. Suffixes are not an allow list.
- Close identity holes: drop link-local metadata, unwrap IPv4-mapped IPv6, deny unnamed attack tasks.
- DSH 0.2.1 preset load: seal object schemas; strip leftover
toolFilter. - Restore Chinese drill-console tabs.
- Game cheats are forbidden at the session gate.
1.1.73
中文
- 版本 1.1.73,适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 0.2.1 兼容已落地:
{{cwd}}静态回退、补丁 #40、toolFilter删除、dsh-tools解析、hostFs fd 直通、桌面换包不自杀、file:归档更新、Ctrl+Enter steer。 - 界面操作文案补齐英文(演练台、清洗面板、补丁表、计分/技能指引);
zh语言包与模型提示词保持中文。靶场默认拦截的own.hint仍按本仓库策略。 - 随包技能
paper-autopilot+npm run install:skill。 - 红队证据账本:
claimed → observed核实链、ResidualUnknown、8 个redteam_evidence_*/redteam_unknown_*工具。
English
- 1.1.73, target DSH 0.2.1-rc.2 (0.2.0 still works).
- 0.2.1 compatibility in-tree: `{{cw...
v1.1.82
1.1.82
中文
- 版本 1.1.82。修复 bug,修复稳定性。
- #180:修复 profile 的
pnpm-workspace.yamlallowBuilds被反复写坏(dsh-purge@https: true畸形键 →ERR_PNPM_INVALID_VERSION_UNION,重复键 →duplicated mapping key)。- URL 键解析不再被冒号截断;写回含
://的键自动加引号。 - 重写只保留精确等于期望键的
dsh-purge@*,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的
pnpm-lock.yaml读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回package.json。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。
- URL 键解析不再被冒号截断;写回含
English
- 1.1.82. Bug fixes and stability.
- #180: stop rewriting the profile
pnpm-workspace.yamlallowBuildsinto garbage (dsh-purge@https: truemalformed key →ERR_PNPM_INVALID_VERSION_UNION; duplicated keys →duplicated mapping key).- URL keys no longer truncate at the first colon; keys containing
://are written back quoted. - Rewrites keep only
dsh-purge@*keys exactly equal to the wanted set; stale polluted keys (malformed, old version/commit URLs) self-heal away on the next ensure. - The wanted key prefers the tarball URL actually resolved in the profile
pnpm-lock.yaml(fixed-commit installs no longer get a duplicate URL key); falls back topackage.json. - Rewritten output passes a minimal YAML check first (no duplicate keys, lossless round-trip); healthy files are never written again, so boot no longer rewrites each run.
- URL keys no longer truncate at the first colon; keys containing
1.1.81
中文
- 版本 1.1.81。修复 bug,修复稳定性。
- #174:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。
DSH_SURFACE=web也不再误报;不把任意app.asar当桌面。 - #175:补 ip / 计分 / settle 单测,删草稿文档和
.bak。npm test23 条全过。 - #171 / #173:zip 目录条目和 skills
fs导入已在 1.1.80,本版用单测锁住。
English
- 1.1.81. Bug fixes and stability.
- #174: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when
DSH_SURFACE=web. A randomapp.asaris not treated as the host. - #175: add ip / score / settle tests; drop draft docs and
.bak.npm testis 23/23 green. - #171 / #173: zip directory entries and the skills
fsimport shipped in 1.1.80; this release locks them with tests.
1.1.80
中文
- 版本 1.1.80。修复 bug,修复稳定性。
- #168:pnpm 12 的
allowBuilds把dsh-purge@codeload...也写成true,装别的插件不再留下set this to true or false。 - #169:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。
- #170:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。
- #172:
lib/skills.js补上fs,#54 软链重叠守卫重新生效。 - #176:写清 不支持 DSH 0.2.1-rc.3 及更新的 rc,请退回 0.2.1-rc.2。对不上的补丁待应用或跳过,不乱改文件。
English
- 1.1.80. Bug fixes and stability.
- #168: pnpm 12
allowBuildsalso setsdsh-purge@codeload...totrue, so installing other plugins no longer leavesset this to true or false. - #169: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label.
- #170: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIST).
- #172: import
fsinlib/skills.jsso the #54 symlink overlap guard works again. - #176: DSH 0.2.1-rc.3 and newer RCs are not supported. Stay on 0.2.1-rc.2. Unmatched patches stay pending or skipped.
1.1.79
中文
- 版本 1.1.79。修复 bug,修复稳定性。
- #165:社区版 DS Bot / DeepSeek Bot 按桌面宿主识别(
ds-botprofile、Electron asar),不再误报set DSH_BASE。 - #166:pnpm 12 拦
postinstall时补allowBuilds,并写清--allow-build=dsh-purge/approve-builds。 - #167:升级后补回
bundles+ 本体 insert,空芯片不再把启动钮藏掉,1.1.74 有的按钮会回来。 - 应用/还原/卸载进度条跟 job 阶段;主智能体和子智能体同一份注入、权限和能力协议。
- 新建会话不再把
dsh-purge芯片甩到行尾。
English
- 1.1.79. Bug fixes and stability.
- #165: community DS Bot / DeepSeek Bot is a desktop host (
ds-botprofile, Electron asar); no more falseset DSH_BASE. - #166: pnpm 12 skipped
postinstall; writeallowBuildsand document--allow-build=dsh-purge. - #167: restore
bundles+ body insert after upgrade so the 1.1.74 button comes back. - Apply / revert / uninstall progress follows the job; main and subagents share inject, permission, and capability text.
- New-session no longer shoves the
dsh-purgechip to the far right.
1.1.78
中文
- 版本 1.1.78。修复 bug:停用/卸载后无法新建会话。
- #108:停用或卸载时把
agent-preset-registry.selectedDefault从redteam改回standard,并清掉$DSH_HOME/.agent-presets/redteam。热重载不会冲掉用户设的红队默认。 - 卸载同时处理
dsh.profile.bundles/dsh.profile.plugins,桌面 profile 不再残留dsh-purge。
English
- 1.1.78. Bug fix: new sessions after disable/uninstall.
- #108: on disable or uninstall, reset
agent-preset-registry.selectedDefaultfromredteamtostandard, and remove$DSH_HOME/.agent-presets/redteam. Hot reload keeps a user-chosen redteam default. - Uninstall also strips
dsh.profile.bundles/dsh.profile.plugins.
1.1.77
中文
- 版本 1.1.77。修复 bug,修复稳定性。
- 修长红队任务仍打公网:
渗透测试/红队/打点/拿站纳入门禁;正文按窗扫到 256KB,目标写在后半段也能拦。 - 修后续步骤漏拦:每一步看工具参数,
tools/pre-execute遇到公网 IP/域名直接停轮。 - 长文正则按窗扫,避免整篇回溯把事件循环卡死。
English
- 1.1.77. Bug fixes and stability.
- Long red-team tasks no longer reach the public internet:
渗透测试/ red-team / 打点 / 拿站 are gated; the body is scanned in windows up to 256KB. - Later steps are gated too: tool arguments are checked, and
tools/pre-executestops on a public IP or name. - Long-text regex runs in windows so a huge paste cannot stall the event loop.
1.1.76
中文
- 版本 1.1.76。适配只走 pnpm 的机器:在 profile 目录
pnpm addcodeload 压缩包即可,postinstall自动把dsh-purge写进bundles。 - 安装地址改成
codeload.github.com,避开github.com/archive的 302(pnpm 会fetch failed)。不要pnpm add dsh-purge(npm 仓库没有这个名字)。
English
- 1.1.76. pnpm-only hosts:
pnpm addthe codeload tarball inside the profile;postinstallwritesdsh-purgeintobundles. - Install URL is
codeload.github.comso pnpm does not die on thegithub.com/archive302. Do notpnpm add dsh-purge— that name is not on the npm registry.
1.1.75
中文
- 版本 1.1.75。修 Hub 市场一键安装报
already queued: dsh-purge:cordis.patch.yml不再把已经在 bundles 里的本体再 insert 一遍。 - README 把安装写成三步:只用 GitHub 压缩包命令,不走插件市场 /
github:/ npm。
English
- 1.1.75. Fix Hub one-click
already queued: dsh-purge: the bundle patch no longer inserts the plugin that is already inbundles. - README install is three steps: GitHub tarball only; skip the plugin market /
github:/ npm.
1.1.74
中文
- 版本 1.1.74,优化若干拦截与加载 bug。适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 修靶场门禁:域名先解析再判 IP,不再靠
.lab/.htb后缀放行;hosts指到公网、解析失败、混有公网,一律拦。 - 修身份绕过:
169.254云元数据不再当靶场;::ffff:公网拆开再判;攻击句不写目标不再放行。 - 修 DSH 0.2.1 预设加载:对象 schema 补
additionalProperties,装过的 redteam 预设清掉残留toolFilter。 - 修演练台被改成英文:中文页签收回。
- 禁止制作外挂:会话门口硬拦,提示词 Rule 1 改为禁止。
English
- 1.1.74, bug-fix release. Target DSH 0.2.1-rc.2 (0.2.0 still works).
- Lab gate: resolve first, then allow only private IPs. Suffixes are not an allow list.
- Close identity holes: drop link-local metadata, unwrap IPv4-mapped IPv6, deny unnamed attack tasks.
- DSH 0.2.1 preset load: seal object schemas; strip leftover
toolFilter. - Restore Chinese drill-console tabs.
- Game cheats are forbidden at the session gate.
1.1.73
中文
- 版本 1.1.73,适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 0.2.1 兼容已落地:
{{cwd}}静态回退、补丁 #40、toolFilter删除、dsh-tools解析、hostFs fd 直通、桌面换包不自杀、file:归档更新、Ctrl+Enter steer。 - 界面操作文案补齐英文(演练台、清洗面板、补丁表、计分/技能指引);
zh语言包与模型提示词保持中文。靶场默认拦截的own.hint仍按本仓库策略。 - 随包技能
paper-autopilot+npm run install:skill。 - 红队证据账本:
claimed → observed核实链、ResidualUnknown、8 个redteam_evidence_*/redteam_unknown_*工具。
English
- 1.1.73, target DSH 0.2.1-rc.2 (0.2.0 still works).
- 0.2.1 compatibility in-tree:
{{cwd}}fallback, patch #40, droptoolFilter, hostdsh-toolsresolve, hostFs fd pass-through, desktop helper self-kill fix,file:archive update, Ctrl+Enter steer. - Operator-facing UI copy is English;
zhlocale and model prompts stay Chinese. Lab default-denyown.hintis unchanged. - Bundled
paper-autopilotskill +npm run install:skill. - Red-team evidence ledger: claimed→observed verification, ResidualUnknown, eight
redteam_evidence_*/redteam_unknown_*tools.
1.1.71
中文
- 版本 1.1.71。
- 修复 1.1.70 的
??混||:插件启用时failed to import(桌面 / Web 同一入口)。 - #86 只改 UI 队列 steer → followup;公共
steer()收回 next-step,代理间send_message仍下一步插入。 installed-rev跨版本不再沿用旧apply:x.y.z。#88 按现行renderedPrompt/ 旧system锚点打中的那条落标记。- 发版前
node --check主入口,避免再把语法错误打进 Release。
English
- 1.1.71.
- Fix 1.1.70
??mixed with||: enable failed to import on desktop and web. - #86 keeps UI queue steer → followup. Public
steer()is next-step again sosend_messageinserts at the next step. - Stale
apply:x.y.zininstalled-revrefreshes across versions. #88 marks the host anchor that actually exists (renderedPromptorsystem). - Release CI syntax-checks the plugin entry.
1.1.70
中文
- 版本 1.1.70。
- Hub / 残装若给
dsh-purge加上pluginPackages,Cordis 会一直 pending,宿主退出码 1。本版把依赖钉回systemPrompt+tools。 - 清洗页只合并升级链展示(免责、审批、挂全文、hooks 等),Apply 仍打全部补丁。
- 去掉已无用的 #81 / #89 清单行;挂全文并进 #87,官方 phase-1 走静默放行。
- 指挥端改为「按用户给的目标开工」。合并 #97 / #98 / #99。
English
- 1.1.70.
- Hub / incomplete installs that inject
pluginPackagesleave dsh-purge pending and kill the host. Dependencies are pinned tosystemPrompt+tools. - Clean page groups upgrade-chain patches for display only; Apply still writes every patch.
- Dropped dead #81 / #89 rows. Hang lives in #87. Official phase-1 keep is silent.
- Commander bind: start from the user's target. Includes #97 / #98 / #99.
1.1.69
中文
- 版本 1.1.69。
- 发送时剥掉 ChatML /
project_instructions,框和磁盘不动。 - 应用 + 重启挂当前默认,不必再点保存;框里仍是插件旧默认会刷到加密槽。
- 红队只排不折:注入 → cap → 红队正文;目标卡/角色段改名
dshpg-*。 - 隔离 ctx 也注册 inject/cap;#86 steer 改 next-turn;#87 hang 用 LF 比对。
- 红队操作稿锁「上面的提示词作准」;指挥端去掉「给了单位名就授权」。
English
- 1.1.69.
- Peel ChatML /
project_instructionson the wire; box and disk stay intact. - Apply + restart hangs the current default; no extra Save. Stale plugin defaul...
v1.1.81
1.1.81
中文
- 版本 1.1.81。修复 bug,修复稳定性。
- #174:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。
DSH_SURFACE=web也不再误报;不把任意app.asar当桌面。 - #175:补 ip / 计分 / settle 单测,删草稿文档和
.bak。npm test23 条全过。 - #171 / #173:zip 目录条目和 skills
fs导入已在 1.1.80,本版用单测锁住。
English
- 1.1.81. Bug fixes and stability.
- #174: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when
DSH_SURFACE=web. A randomapp.asaris not treated as the host. - #175: add ip / score / settle tests; drop draft docs and
.bak.npm testis 23/23 green. - #171 / #173: zip directory entries and the skills
fsimport shipped in 1.1.80; this release locks them with tests.
1.1.80
中文
- 版本 1.1.80。修复 bug,修复稳定性。
- #168:pnpm 12 的
allowBuilds把dsh-purge@codeload...也写成true,装别的插件不再留下set this to true or false。 - #169:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。
- #170:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。
- #172:
lib/skills.js补上fs,#54 软链重叠守卫重新生效。 - #176:写清 不支持 DSH 0.2.1-rc.3 及更新的 rc,请退回 0.2.1-rc.2。对不上的补丁待应用或跳过,不乱改文件。
English
- 1.1.80. Bug fixes and stability.
- #168: pnpm 12
allowBuildsalso setsdsh-purge@codeload...totrue, so installing other plugins no longer leavesset this to true or false. - #169: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label.
- #170: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIST).
- #172: import
fsinlib/skills.jsso the #54 symlink overlap guard works again. - #176: DSH 0.2.1-rc.3 and newer RCs are not supported. Stay on 0.2.1-rc.2. Unmatched patches stay pending or skipped.
1.1.79
中文
- 版本 1.1.79。修复 bug,修复稳定性。
- #165:社区版 DS Bot / DeepSeek Bot 按桌面宿主识别(
ds-botprofile、Electron asar),不再误报set DSH_BASE。 - #166:pnpm 12 拦
postinstall时补allowBuilds,并写清--allow-build=dsh-purge/approve-builds。 - #167:升级后补回
bundles+ 本体 insert,空芯片不再把启动钮藏掉,1.1.74 有的按钮会回来。 - 应用/还原/卸载进度条跟 job 阶段;主智能体和子智能体同一份注入、权限和能力协议。
- 新建会话不再把
dsh-purge芯片甩到行尾。
English
- 1.1.79. Bug fixes and stability.
- #165: community DS Bot / DeepSeek Bot is a desktop host (
ds-botprofile, Electron asar); no more falseset DSH_BASE. - #166: pnpm 12 skipped
postinstall; writeallowBuildsand document--allow-build=dsh-purge. - #167: restore
bundles+ body insert after upgrade so the 1.1.74 button comes back. - Apply / revert / uninstall progress follows the job; main and subagents share inject, permission, and capability text.
- New-session no longer shoves the
dsh-purgechip to the far right.
1.1.78
中文
- 版本 1.1.78。修复 bug:停用/卸载后无法新建会话。
- #108:停用或卸载时把
agent-preset-registry.selectedDefault从redteam改回standard,并清掉$DSH_HOME/.agent-presets/redteam。热重载不会冲掉用户设的红队默认。 - 卸载同时处理
dsh.profile.bundles/dsh.profile.plugins,桌面 profile 不再残留dsh-purge。
English
- 1.1.78. Bug fix: new sessions after disable/uninstall.
- #108: on disable or uninstall, reset
agent-preset-registry.selectedDefaultfromredteamtostandard, and remove$DSH_HOME/.agent-presets/redteam. Hot reload keeps a user-chosen redteam default. - Uninstall also strips
dsh.profile.bundles/dsh.profile.plugins.
1.1.77
中文
- 版本 1.1.77。修复 bug,修复稳定性。
- 修长红队任务仍打公网:
渗透测试/红队/打点/拿站纳入门禁;正文按窗扫到 256KB,目标写在后半段也能拦。 - 修后续步骤漏拦:每一步看工具参数,
tools/pre-execute遇到公网 IP/域名直接停轮。 - 长文正则按窗扫,避免整篇回溯把事件循环卡死。
English
- 1.1.77. Bug fixes and stability.
- Long red-team tasks no longer reach the public internet:
渗透测试/ red-team / 打点 / 拿站 are gated; the body is scanned in windows up to 256KB. - Later steps are gated too: tool arguments are checked, and
tools/pre-executestops on a public IP or name. - Long-text regex runs in windows so a huge paste cannot stall the event loop.
1.1.76
中文
- 版本 1.1.76。适配只走 pnpm 的机器:在 profile 目录
pnpm addcodeload 压缩包即可,postinstall自动把dsh-purge写进bundles。 - 安装地址改成
codeload.github.com,避开github.com/archive的 302(pnpm 会fetch failed)。不要pnpm add dsh-purge(npm 仓库没有这个名字)。
English
- 1.1.76. pnpm-only hosts:
pnpm addthe codeload tarball inside the profile;postinstallwritesdsh-purgeintobundles. - Install URL is
codeload.github.comso pnpm does not die on thegithub.com/archive302. Do notpnpm add dsh-purge— that name is not on the npm registry.
1.1.75
中文
- 版本 1.1.75。修 Hub 市场一键安装报
already queued: dsh-purge:cordis.patch.yml不再把已经在 bundles 里的本体再 insert 一遍。 - README 把安装写成三步:只用 GitHub 压缩包命令,不走插件市场 /
github:/ npm。
English
- 1.1.75. Fix Hub one-click
already queued: dsh-purge: the bundle patch no longer inserts the plugin that is already inbundles. - README install is three steps: GitHub tarball only; skip the plugin market /
github:/ npm.
1.1.74
中文
- 版本 1.1.74,优化若干拦截与加载 bug。适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 修靶场门禁:域名先解析再判 IP,不再靠
.lab/.htb后缀放行;hosts指到公网、解析失败、混有公网,一律拦。 - 修身份绕过:
169.254云元数据不再当靶场;::ffff:公网拆开再判;攻击句不写目标不再放行。 - 修 DSH 0.2.1 预设加载:对象 schema 补
additionalProperties,装过的 redteam 预设清掉残留toolFilter。 - 修演练台被改成英文:中文页签收回。
- 禁止制作外挂:会话门口硬拦,提示词 Rule 1 改为禁止。
English
- 1.1.74, bug-fix release. Target DSH 0.2.1-rc.2 (0.2.0 still works).
- Lab gate: resolve first, then allow only private IPs. Suffixes are not an allow list.
- Close identity holes: drop link-local metadata, unwrap IPv4-mapped IPv6, deny unnamed attack tasks.
- DSH 0.2.1 preset load: seal object schemas; strip leftover
toolFilter. - Restore Chinese drill-console tabs.
- Game cheats are forbidden at the session gate.
1.1.73
中文
- 版本 1.1.73,适配 DSH 0.2.1-rc.2(0.2.0 仍可用)。
- 0.2.1 兼容已落地:
{{cwd}}静态回退、补丁 #40、toolFilter删除、dsh-tools解析、hostFs fd 直通、桌面换包不自杀、file:归档更新、Ctrl+Enter steer。 - 界面操作文案补齐英文(演练台、清洗面板、补丁表、计分/技能指引);
zh语言包与模型提示词保持中文。靶场默认拦截的own.hint仍按本仓库策略。 - 随包技能
paper-autopilot+npm run install:skill。 - 红队证据账本:
claimed → observed核实链、ResidualUnknown、8 个redteam_evidence_*/redteam_unknown_*工具。
English
- 1.1.73, target DSH 0.2.1-rc.2 (0.2.0 still works).
- 0.2.1 compatibility in-tree:
{{cwd}}fallback, patch #40, droptoolFilter, hostdsh-toolsresolve, hostFs fd pass-through, desktop helper self-kill fix,file:archive update, Ctrl+Enter steer. - Operator-facing UI copy is English;
zhlocale and model prompts stay Chinese. Lab default-denyown.hintis unchanged. - Bundled
paper-autopilotskill +npm run install:skill. - Red-team evidence ledger: claimed→observed verification, ResidualUnknown, eight
redteam_evidence_*/redteam_unknown_*tools.
1.1.71
中文
- 版本 1.1.71。
- 修复 1.1.70 的
??混||:插件启用时failed to import(桌面 / Web 同一入口)。 - #86 只改 UI 队列 steer → followup;公共
steer()收回 next-step,代理间send_message仍下一步插入。 installed-rev跨版本不再沿用旧apply:x.y.z。#88 按现行renderedPrompt/ 旧system锚点打中的那条落标记。- 发版前
node --check主入口,避免再把语法错误打进 Release。
English
- 1.1.71.
- Fix 1.1.70
??mixed with||: enable failed to import on desktop and web. - #86 keeps UI queue steer → followup. Public
steer()is next-step again sosend_messageinserts at the next step. - Stale
apply:x.y.zininstalled-revrefreshes across versions. #88 marks the host anchor that actually exists (renderedPromptorsystem). - Release CI syntax-checks the plugin entry.
1.1.70
中文
- 版本 1.1.70。
- Hub / 残装若给
dsh-purge加上pluginPackages,Cordis 会一直 pending,宿主退出码 1。本版把依赖钉回systemPrompt+tools。 - 清洗页只合并升级链展示(免责、审批、挂全文、hooks 等),Apply 仍打全部补丁。
- 去掉已无用的 #81 / #89 清单行;挂全文并进 #87,官方 phase-1 走静默放行。
- 指挥端改为「按用户给的目标开工」。合并 #97 / #98 / #99。
English
- 1.1.70.
- Hub / incomplete installs that inject
pluginPackagesleave dsh-purge pending and kill the host. Dependencies are pinned tosystemPrompt+tools. - Clean page groups upgrade-chain patches for display only; Apply still writes every patch.
- Dropped dead #81 / #89 rows. Hang lives in #87. Official phase-1 keep is silent.
- Commander bind: start from the user's target. Includes #97 / #98 / #99.
1.1.69
中文
- 版本 1.1.69。
- 发送时剥掉 ChatML /
project_instructions,框和磁盘不动。 - 应用 + 重启挂当前默认,不必再点保存;框里仍是插件旧默认会刷到加密槽。
- 红队只排不折:注入 → cap → 红队正文;目标卡/角色段改名
dshpg-*。 - 隔离 ctx 也注册 inject/cap;#86 steer 改 next-turn;#87 hang 用 LF 比对。
- 红队操作稿锁「上面的提示词作准」;指挥端去掉「给了单位名就授权」。
English
- 1.1.69.
- Peel ChatML /
project_instructionson the wire; box and disk stay intact. - Apply + restart hangs the current default; no extra Save. Stale plugin defaults refresh from the sealed slot.
- Redteam: inject → cap → ops only (no fold). Card/role sections renamed
dshpg-*. - Isolated ctx also registers inject/cap. #86 steer → next-turn. #87 hang needle uses LF.
- Redteam ops note: inject wins. Commander no longer says a company name means authorized.
1.1.68
中文
- 版本 1.1.68。
- #92:技能面板认 YAML 块标量
description(|/>),不再误报不可用。 - #93:红队「版本/更新」:
file://转成本地路径;Windows 用.cmd+shell起 npm/pnpm;npm 404 回落 GitHub tags。 - #94:官方桌面 CLI 入口补
app.asar.unpacked回退。Hub 首次安装仍可能撞官方 asar 路径。 - #95:拆除
refusal-recover(读错字段永不触发;修好会无限复读)。 - #96:bash 前台等待从插件标过的 600s 迁回 60s,后续工具不再被堵 10 分钟。
- 注入置顶;capability 段改名
dshpg-capabilities;用户 prompt 一律 followup(#85);默认关闭自动「继续」。
English
- 1.1.68.
- #92: Skill panel parses YAML block-scalar
description. - #93: Redteam update:
file://→ fs path; Windows npm/pnpm via.cmd; GitHub tags if registry 404. - #94: Desktop CLI falls back to
app.asar.unpacked. Hub first-install may still hit stock asar. - #95: Removed
refusal-recover(dead reader / unbounded nudge loop). - #96: Restore marked b...