# 版本记录

## 0.2.60 — 审核取证、暂停恢复与验证效率

- 修正带查询参数或锚点的本地网页取证，以及任务目录内跨父级的脚本依赖取证；Windows 的 WSL 命令识别默认 `/mnt/盘符` 路径，保留自定义挂载未核验的说明。真实路径、受保护文件和任务边界继续校验。
- 含大量内嵌媒体的 HTML/JavaScript 在有界读取内保留完整文件摘要与其余代码，仅摘要明确标注媒体类型的 base64 载荷；不将 MIME 标签视为安全证明，不缓存不完整证据，代码及总输出预算保留。
- 首次派发遇到不存在的重复校验目录时提前反馈；项目根验证用 `.` 或省略。受理结果返回实际验证目录，已有合法同名子目录不被自动改写。
- 通过 DSH 公共工具执行钩子约束审批超时后的自动通知：可查状态和读取证据，不能改用主会话执行、修改、投递或重新派发；用户发起新请求后恢复正常原生权限检查。保存最后一次等待的起止时间及原因，与总耗时和累计等待分别汇报。
- 统一默认方案与用户要求的区别、浏览器工具复用、关键帧预检、有界环境排障及资源清理指引；明确降级、网络失败、音频能量与画面相似度各自能证明的范围。此部分是执行指引，不保证模型耗时或设计效果。

验证：TypeScript 构建及 222 项回归通过。对 D1 原有文件做只读静态回放，带锚点网页、媒体之外的代码与嵌套入口指向的根目录校验脚本均进入证据；未解析依赖仍标不完整。未执行真实渠道发送、Windows 桌面端验收或重新渲染视频。

## 0.2.59 — 审核证据、执行反馈与微信定时投递

- 审核收集优先覆盖明确入口及其依赖，再逐层读取其他代码引用；字面量参数与源码映射匹配只作为读取顺序提示，避免无关检查分支挤掉实际子脚本，不能用于排除分支或推断安全。普通数据仍排在代码后。保留单文件、总内容、文件数、真实路径和凭据边界，未展开代码仍标记证据不完整。
- 缺失证据说明区分非普通文件、单文件超限和总预算不足，预算不足时给出剩余与所需字节数。
- 主助手及编码工具的报告指引统一要求结论对应逐项数据、实际验证路径和样本口径；阈值分类不作根因证明，个别方案失败不泛化到整类方法，备用路径通过不代替原路径验收。
- 持续调试或需要配套工具时，在继续扩大直接处理范围前重新判断是否整体交接；不按固定次数或耗时强制派发。执行指引补充子程序失败与结构化错误的传播、PowerShell 退出码核对、等待资源清理和主动进度说明。验收保留超时、未通过及未执行项，抽样与均值不作完整质量证明，教学示意值不推导实际改善幅度。
- 微信定时结果与交互消息不再因回复上下文超过 19 小时而被本地拦截；使用保存的上下文尝试发送，由接口明确拒绝触发持久暂停。保留未发分片与原发送标识，绑定用户新消息到达后恢复，重启不重跑任务或补发旧审批。设置页区分缺少上下文与接口拒绝，旧年龄错误允许重试；实测成功间隔不再当作有效期。

验证：TypeScript 编译和 56 项针对性回归通过。对原任务目录静态回放，端到端子脚本及其 14 个应用模块均完整进入证据，未展开的其他代码仍标记缺口；未调用审核模型、执行项目端到端检查或发送渠道消息。

微信调整另经隔离构建和 70 项渠道、媒体、投递恢复及设置界面测试通过，覆盖隔天发送、旧队列重启恢复、缺少上下文提示，以及部分发送后拒绝、绑定用户回复后恢复。使用本地夹具，未进行真实微信发送或 Windows 实机验收。

执行指引补充后，TypeScript 编译与原有派发提示词回归通过。此项修改为提示词约束，不改变 DSH 原生循环、权限或任务状态，也不保证模型每次都正确选择派发方式。

## 0.2.58 — 减少重复审核与定向测试审批

- 定向 pytest 审核只展开明确的测试文件、目录及父级 fixtures、本地依赖，避免无关测试挤占证据预算；动态参数、配置追加目标和额外环境选项保守回退，链接与缺失目标不视为完整证据。
- 同任务中经模型明确标记可重复、证据完整的安全结论可复用 5 分钟；忽略 Codex 单次命令流水号和时间戳，仍核对命令、线程、环境、权限和源码，人工审批及不完整证据不缓存。
- 临时审核服务错误在 2 秒后进行一次有界重试，保留共享时限、取消和明确拒绝不重试的限制。

## 0.2.57 — 通用审核证据与工作区环境配置

- 统一收集执行入口、内联代码、本地依赖、项目脚本和数据引用，补齐 Python 内联导入、Node.js 本地模块、Shell 加载和 PowerShell 模块证据。npm / pnpm / yarn 展开选定脚本及可能的前后置钩子，不遍历无关脚本。
- 按唯一文件路径计数并优先读取执行代码，文件数上限调整为 64；单文件 96 KiB 和总内容 192 KiB 上限保留。大型数据摘要不充当代码缺失或安全证明，不用于审核缓存。
- 构建清单、动态代码、未知语法、工作区与目录变更的证据缺口明确呈现；维持原任务权限、审核前后校验、凭据与真实路径边界。
- 单个完整 JSON 代码块可以作为审核响应；无效或多个结论、异常结束的肯定响应继续转人工。
- 明确安全操作优先自动批准，覆盖已授权、影响可控的项目写入、测试与依赖安装；不因解析器覆盖不足或无关信息缺失转人工，拒绝理由须对应实际风险或关键证据缺口。保留明确禁用、强制人工设置及权限边界。
- 标准模式允许经真实路径核验的任务工作区内 `.env` / `.env.*` 原生文件读写，不再强制人工确认；命令仍审核具体行为。链接重定向、硬链接、额外目录授权、目录外凭据及用户禁用规则不获得该自动权限，审核等待后重新校验边界。
- 环境配置在命令审核证据中只提供文件状态，不读取配置值，也不缓存相关审核结论；同步编码提示词，隐藏过程面板已识别的环境工具内容、差异和命令输出。严格模式与打包交付的凭据限制保持原有规则。

验证：完整隔离构建和 770 项全量本地测试通过（零失败、零跳过）。覆盖跨语言依赖、证据限额、审核响应、环境配置读写、路径与用户规则复核、过程内容隐藏及打包边界；未进行 Windows 实机、真实模型或真实渠道验收。

## 0.2.56 — 按工作范围派发、工作区并发保护与审核效率

- 范围与影响已知、低风险、当前会话工具可短步骤完成并验证的局部改动，由主助手直接处理；需要深入调查、跨模块协调或持续执行，以及用户明确要求使用编码工具、后台跟进或宿主独立验收的编码工作再派发。
- 同步派发提示词、编码工具和说明单的说明；不按文件数、代码行数或关键词新增路由规则。已有任务优先插话或续接，直接处理超出原范围时传递已有证据和改动，避免重复调查。
- 直接处理使用当前 DSH 会话的权限与审批，不继承编码工具完全权限；不与活动编码任务同时修改同一工作树。验证按实际工作方式和风险执行，不为任务卡片或形式另建编码任务。
- 修正长期记忆注入中已过时的按天换会话说明；默认延续原生上下文，显式 `/new` 新建，不假定摘要已经保存。
- 任务状态默认限定当前会话，历史查询显式开启并注明来源；运行中插话仅自动选择当前会话唯一候选，防止误调旧任务或多任务中的任意一个。
- 原生文件写入、Shell 和依赖加载与后台编码共用工作区锁，冲突在审批前及执行时检查；后台命令保留锁至原生 job 结束，读取和任务控制不受影响。
- 原生后台 job 注册按确切工具执行关联渠道来源，通知入箱时绑定稳定消息 ID；支持普通后台命令，避免重启后编号复用导致误投递。
- 会话及模型切换只检查相关会话的任务，仍保留渠道待处理交互和提交前复核，无关历史电脑任务不再阻塞切换。
- 确定性核验及有效审核缓存不再等待模型队列；排队后刷新证据与规则，保留取消、独立超时、授权前复核和强制人工要求。

验证：隔离构建、类型检查、236 项针对性回归及 33 项原生 DSH 编码集成检查通过，覆盖任务选择、三渠道历史投递、原生工具工作区冲突、后台命令锁生命周期、消息关联持久化和审核快路径。使用本地模型与渠道夹具；未执行真实模型派发选择评测、Windows 实机或真实渠道账号验收。

## 0.2.55 — 历史任务展示与渠道投递范围

- 底部任务主列表限当前会话；来源可核验、身份和工作目录相同的渠道历史任务放入默认折叠的“历史任务”，注明来源且不计入当前任务数。电脑在旧会话新建的任务不再显示到新会话。
- 微信、飞书和企业微信按任务派发来源控制历史会话审批、提问、回执和完成结果；电脑新建任务留在原会话，原渠道任务继续通知，回答仍绑定原请求。业务验收提问携带原调用标识，原生延后回答按原问题来源判定，避免漏发或误转发。
- 在独立原生存储域保存投递来源和 job 关联，不改变任务所属会话与执行状态。升级前来源未知的历史任务不猜测补填，留在原桌面会话处理。

验证：隔离构建、242 项针对性回归及 29 项原生 DSH 编码集成检查通过，覆盖三渠道切换、桌面隔离、原渠道任务继续交互、任务卡展示和来源持久化。使用本地模型与渠道夹具，未执行 Windows 实机或真实渠道验收。

## 0.2.54 — 审核排队与项目依赖安装

- 审核排队不再占用单次 180 秒审核时限；取得处理名额后才开始计时。保留串行处理、任务总时限、取消及停机中断，排队状态单独说明。
- 标准模式核对显式 Python 解释器对应的项目虚拟环境，包含 pyvenv.cfg、解释器身份及安装目录边界。核对通过仅将 pip 安装交给自动审核，不直接授权；裸 pip、未知目标、系统包共享、目标重定向或环境配置覆盖仍需人工确认。
- 虚拟环境证据参与审核前后核验；期间发生变化或重新触发强制人工规则时，不沿用原安全结论。严格模式和完全权限模式的边界保持原设置。
- 审核输入优先呈现当前操作、权限与证据，保留完整任务约束；明确要求理由对应实际操作，不因未来步骤缺少脚本而拒绝当前只读命令。提示词调整不能保证模型永不误判。

验证：构建及 162 项针对性回归通过，覆盖虚拟环境安装分类、排队独立计时、超时与取消，以及审核与编码任务流程。使用本地夹具，未执行 Windows 实机或真实模型、渠道验收。

## 0.2.53 — 渠道会话连续性、导航命令与投递恢复

- 取消按天或 token 增长自动创建空白会话：普通消息持续进入原生会话，由 DSH 管理长上下文压缩，避免旧摘要待确认、记忆关闭或检索未命中导致上下文断开。任务完成后、跨天及重启后仍保留原生会话关联。
- 设置页移除自动换新开关，说明旧设置不再生效；`/new`、归档或更换工作目录仍开启独立会话，提示不再承诺已保存或可召回旧摘要。
- 新增 `/help` 静态帮助，列出会话、模型、状态、停止、审批和回答命令；不调用模型或创建会话。
- 新增 `/s`、`/s 编号`、`/m`、`/ml`、`/m 编号或标识` 命令；会话与模型操作仅由英文斜杠命令触发，中文导航词及“新会话”按普通聊天处理，使用 `/new` 新建会话。切换会话不复制历史、不重跑任务，保留最高代次避免覆盖。切换检查身份、目录、归档、执行及待交互状态。
- 模型选择使用原生接口，保留当前会话历史，不更改已派发编码任务；明确提示宿主同时保存新会话默认模型。模型编号按已展示菜单解释，10 分钟或重启后失效。
- 三个渠道统一历史会话隔离：普通电脑追问保持本地，历史渠道结果和自动化通知带来源标识，审批仍绑定原请求；飞书从已验证聊天记录恢复重启路由。
- 飞书、企业微信增加原生凭据中的待发队列、固定分片进度、收件去重与已完成回执；配对不恢复旧队列，文件变化改发说明，审批提示不补发。
- 设置页为飞书、企业微信增加投递状态和重试入口。明确拒绝限次重试；回执不确定时暂停自动发送，手动重试明确提示可能重复上一分片，不声称平台严格去重。
- 原生任务、审批和长期记忆策略保持原有边界；不合并已经断开的历史，不自动批准待确认记忆。

验证：隔离目录构建通过；渠道投递、会话、设置、SDK 适配、连接生命周期、微信恢复、问答和飞书配对共 121 项本地测试通过。覆盖分片中断后恢复、模糊回执暂停、配对隔离、跨渠道历史会话与审批归属。未执行 Windows 实机或真实渠道账号验收。

## 0.2.52 — 审核故障恢复与任务诊断

- 审核对明确分类的短暂网络、超时、限流与服务端异常最多重试一次，与原有空响应、截断重试共享两次调用及 180 秒总时限。明确拒绝、认证、额度和未知异常不重试；保存白名单错误码，不保存原始接口错误。
- 标准模式对有限的直接 POSIX 系统只读命令增加确定性检查；验证程序来源、显式项目文件及真实路径，不接受 shell 包装、PATH 查找、递归、未知参数或额外权限，自定义审核要求仍交给审核器。Windows PowerShell 命令继续审核，不按命令名放行。
- 等待用户超时记录独立的 timeout 决定，任务报告、状态与恢复提示统一说明已暂停，不再误记为用户拒绝或主动取消。
- 主助手和编码工具的执行指引要求区分失败观测与原因假设，不凭空归因于无头浏览器或设备；限定文件读取和搜索输出，避免将内嵌音频等 base64 数据送入会话。这些是提示词约束，不改写 DSH 原生工具输出。

验证：构建及最终 TypeScript 编译通过；编码任务模块 349 项本地测试通过，无失败、无跳过。未执行真实模型、Windows 实机或真实渠道验收；未修改、续接配音任务。

## 0.2.51 — 派发效率、提问状态与折叠更新面板

从本版起采用正式发布标识：GitHub 不再标记预发布，npm 默认使用 `latest`，`next` 暂同步兼容此前安装入口。历史版本标识不变。

- 插件详情的更新面板默认折叠，收起时显示当前版本与简短状态；展开后管理更新设置及操作。失败提示和待重启状态在收起时仍可见，状态刷新保留展开状态。更新界面现有 5 项测试通过。
- Codex 使用原生 turn/start outputSchema 区分完成、需要用户输入与受阻，不用问号或关键词控制任务状态。需要输入时沿原会话继续，超过次数上限或缺少有效结构化结果时明确失败；仍优先使用原生提问工具。
- 计划解析支持同一渠道聊天的新旧会话，保留前置任务、最新续接和重复派发检查。
- 带独立验证的任务可复用同一说明单版本、目录及问题的普通回答，权限批准不复用。普通澄清不再追加“是否保留验证”，也不接受未展示的验收变更答案；历史跳过验证记录继续保留。
- 默认以一个编码会话完成紧密关联工作，主助手负责目标及交付，编码工具负责调查、实现和针对性自测。缩短常驻派发规则，按平台和权限模式生成，明确执行补充与目标版本修改的区别。
- 多个提问同时到达时保持队首待答信息，直到最后一个解决才恢复原执行或验证状态；取消后不复活任务。完成汇报从最终持久状态读取耗时。
- 新任务记录互斥阶段耗时、审核请求和观察到的重试次数，在状态详情与完成汇报中展示。历史数据不倒推，服务停机时间不计入执行耗时。保留宿主独立验收和仅复验入口。

验证：构建（含 TypeScript 检查）通过；本轮针对性回归 143 项及完整单元和本地夹具测试 693 项通过，无失败、无跳过。已通过本机 Codex 生成的官方协议定义确认 turn/start 支持 outputSchema；未执行真实模型、Windows 实机或真实渠道验收，尚无优化前后实际任务耗时对照。

## 0.2.50 — 已完成任务卡片不再固定在输入框上方

已结束任务一旦关联原生完成通知，就从输入框上方移除，不再等待通知节点实际渲染。通知折叠、滚出视野或重新进入会话时不会重新固定结果；加载或展开通知后，结果卡片仍显示在“后台任务状态更新”上方。运行中的任务及尚未关联完成通知的结果继续保留在底部。

验证：任务卡片与面板相关测试 19 项通过，构建（含 TypeScript 检查）通过。未执行桌面端实机验收。

## 0.2.49 — 会话投递、工作区检查与输出解码修复

- 微信切换会话后，电脑端在历史会话新发起的普通对话仅保留在电脑端，不再向微信发送回复、文件、进度或中断恢复提示；重启补发遵循同一规则。历史会话的原生任务通知、定时推送、审批及问题仍保留，并标注来源会话。审批仍按原请求处理，普通微信回复继续进入当前会话；历史审批不再建议使用会取消当前会话的 `/cancel`。
- 同一聊天轮换后仍可查询旧任务；运行中转发修改指令前，重新核对当前会话工作区、目录限制和任务真实路径，避免从新项目操作旧项目的任务。
- 未知编码的非 ASCII 输出先缓冲至换行或最多 4096 字节，再选择编码并使用流式解码，避免 GBK 字符因管道分段而损坏。ASCII 进度立即显示，无换行的短非 ASCII 输出可能在流结束时才显示。UTF-8 优先、其他编码作为兼容回退，不声称自动识别系统代码页。
- 验证和安装子进程的 stdout、stderr 分别解码后再合并文本，避免两个管道的半个字符拼在一起。
- 增加所有短字节分段组合、编码选定后分段、真实子进程交错输出及跨会话切换工作区的回归检查。

验证：本轮完整单元测试 684 项通过（无失败、无跳过），原生 DSH 微信集成 18 项通过，包含重启恢复；此前工作区与解码针对性回归 7 项及编码集成 26 项通过。两个仓库构建通过（含 TypeScript 检查）。使用本地夹具，未执行 Windows 实机或真实渠道验证。

## 0.2.48 — 依赖升级：清掉生产依赖里的已知漏洞

`npm audit` 在生产依赖里报出 5 个包、其中 3 个 high；本版把它们全部清掉，`npm audit --omit=dev` 现在为零。这部分代码插件本身不写——axios 只在飞书和企业微信两个 SDK 内部使用，插件自己从不 import 它。

修法按包分成两类。**飞书 SDK 1.66.1 → 1.74.0**：axios 1.13.6 的漏洞面来自飞书 SDK 1.66.1 声明的 `axios ~1.13.3`，而 1.74.0 自己声明的是 `axios ^1.16.0`，装上就是 1.20.0。这里刻意**没有**用 overrides 硬钉 axios——那会跨过 SDK 为自己声明的范围，用的是它从未测过的组合，出问题时也无法归因；升 SDK 用的是上游自己写的范围，风险由上游承担。代价是飞书渠道一次跨过 8 个 minor 版本，而 `LarkTransport` 此前**没有任何测试**，所以本版同时补上：一项对着真实安装的 SDK 核对它仍导出 `Client` / `WSClient` / `EventDispatcher` 以及 `im.v1.message.create`、`im.v1.file.create`（依赖升级唯一可能悄悄改掉的就是这些名字，而全套测试里只有这一处会加载真实 SDK），另加 6 项用记录型假 SDK 驱动连接、入站消息归一与失败上报、3500 字分片与逐片投递标识、先上传再发文件、以及各类失败码。为此给 `LarkTransport` 加了一个默认即真实动态 import 的加载器参数，行为不变。

**另外三个是锁文件层面的浮动**，都落在各自父包已声明的范围内，没有跨范围：`http-cache-semantics` 4.2.0 → 4.3.0（`make-fetch-happen` 声明 `^4.1.1`、`cacheable-request` 声明 `^4.2.0`）、`ip-address` 10.7.0 → 10.7.3（`socks` 声明 `^10.1.1`、`express-rate-limit` 声明 `^10.2.0`）、`fast-uri` 3.1.7 → 3.1.8（`ajv` 声明 `^3.0.1`）。新增的传递依赖只有 axios 自己带来的 `https-proxy-agent`、`agent-base`、`debug`、`ms` 和升级后的 `proxy-from-env` 2.1.0，均为 MIT。

axios 那 33 条公告并不都同等适用于这里，逐条看下来只有一类不需要前提：**原型链污染那一族**要求同进程里另有污染源（公告自己点名 lodash 等常见来源），而插件代码里没有任何这种落点——没有把解析后的 JSON 按动态键名赋值的地方、没有通用深合并函数、也没有 `__proto__` 处理；**Cookie 名 ReDoS** 那条公告自己写明"不影响普通 Node.js HTTP adapter 用法"，只影响浏览器读取 `document.cookie` 的路径，而这个插件只用 Node 的 HTTP adapter。这不改变升级的决定，但说明当时的实际暴露面比 3 个 high 这个数字看起来小。

**未修的部分照实说**：`npm audit` 仍报 8 项 moderate，全部是 `devDependencies`（`--omit=dev` 为零），根因是一处精确钉住的 `fflate@0.8.2`——`@deepseek-ai/libreoffice-kit@0.1.2` 把它写成了确切版本而不是范围，而它来自必须匹配 `0.2.0-rc.2` 的 DSH 开发依赖；`fflate` 不在分发包内（已核对 `.tgz` 内容），要动只能 overrides 硬顶一个上游刻意钉死的版本，收益不足以承担这个风险，留作对上游的反馈。

**0.2.48 验证（2026-10-04）**：`check`、`build` 通过；单元测试 680 项通过（新增飞书传输 7 项）；原生集成 `smoke` 各阶段通过，离线与联网各跑一次。`npm audit --omit=dev` 为零，`npm audit` 剩 8 项 dev-only。飞书传输的测试对真实 SDK 只核对导出面与调用形状，**未连接真实飞书、未发真实消息**；请在设置页按自己的账号重新验证一次飞书渠道。

## 0.2.47 — 已取消的任务不再留下无法消除的卡片

任务面板里的结果卡片是「任务结果通知」把它放进对话之前的占位，所以只有会收到通知的任务才该留在那里。DSH 只以任务事件的形式发出这类通知，而主人自己取消的任务不发任何通知：桌面 store 里 4 条 cancelled 记录全都没有通知记录，已结束但未被取消的任务则全都有；同一代会话的日志里，被取消的任务没有产生任何事件，同一代完成的另一个任务产生了。于是这张卡片没有任何东西能接手它，「收起结果」是唯一的清理方式，而它只存在面板内存里，重挂载（刷新、切页）之后又回来。

取消是主人自己的动作，也没有结果可读，所以任务面板不再列出已取消的任务。任务记录、已产生的部分改动和「查看过程」都不受影响，仍可在 设置 › 最近任务 打开；在跑、排队中和正常结束等待通知的任务照旧显示。新增一项回归检查，断言被取消的任务不进入面板列表，同时 `get` 仍能取到它的记录。

**0.2.47 验证（2026-10-04）**：编码任务与面板单测 135 项通过，完整单元测试 673 项通过，`check`、`build` 通过，原生集成 `smoke` 各阶段用离线缓存通过。依赖与锁定树沿用 0.2.46，未引入新依赖。检查使用虚构账号与本地夹具，未执行真实渠道与桌面验收。

## 0.2.46 — 会话轮换不再切开任务，审核证据与命令判定修正

微信聊天在上下文超过上限时会开下一代会话，而任务记录原先按“代”归属：轮换发生的那一刻，还在跑的任务留在了上一代，新会话问“有结果了吗”得到的是“没有正在运行的任务”。投递又按聊天找路由，所以上一代的结果照样发到微信——看起来就是回复进错了会话。本版让**只有上下文超限这一种轮换等待聊天手上的编码任务结算**：任务还在跑就不轮换，派活的那一代继续回答关于它的问题；结算后下一条消息仍会轮换，因为体积增长不会自己消失。新的一天、会话归档、工作区移动和用户 `/new` 照常轮换，那些情况下旧代本来就答不了。

同时按“聊天”而不是“代”读取任务与说明单：同一次聊天更早各代派发、仍在运行的任务，`coder_status` 查得到当前在做什么，`coder_task` 带 `resume_task_id` 能续接，`depends_on` 也能引用。电脑端任务面板跨轮换保留在跑的任务，已完成的结果仍只出现在报告它的那一代，避免把整个聊天的历史结果重新弹成一墙卡片。文件工具和命令审批里的模板、依赖与交付文件查找同样改为按聊天匹配。判断依据是会话 id 去掉代次后缀，两个无关的桌面会话不会互相命中。

审核证据侧修了四处会导致“证据不完整”的误报，每次误报都会把自动审批变成打扰用户：项目自带的 `pytest-of-<用户>` 临时目录在目录树里排在 `tests` 前面，把 256 条目录预算吃光，真正的测试文件反而没被读到（改为广度优先，并在计数前跳过不读的条目）；源码文本里出现的文件名（如测试用例里的 `("程序.py", b"hello", 400)`）原先被当成命令声明的文件，不存在就算缺失证据（改为可选线索，缺失不记）；`grep --include=*.py` 这类通配符和裸扩展名被当成文件名列举为“不存在”（已过滤）；Python 模块定位上限 192 个候选路径对普通项目过小（提高到 2000）。可选的未命中探测现在合并成一行说明，不再逐条淹没真正读到的文件。

审核模型输出原先首次尝试只给 2048 token，一个项目级命令的审核把整轮预算花在分析上、要到重试才给出结论；首次提到 4096、重试提到 6144，整体超时从 60 秒放宽到 180 秒以覆盖两次尝试的实际耗时（按实测速率，不是估算）。

命令只提到一个已按内容核对为占位模板的 `.env.example` 时，不再按凭据操作拒绝——原来文件工具已放行、同一条命令却被拦下。豁免只针对该确切路径且要求文件内容确实只有占位值：真实密钥存成模板、链接重定向、硬链接、文件缺失都保持拒绝，同一条命令里的其它路径（如 `cp .env.example .env` 的 `.env`）也照旧按凭据处理。

子进程输出在 Windows 上按控制台代码页写出，Python 打印的中文到达用户端原先是整片 `�`。新增流式解码：先按严格 UTF-8 读，失败则按本机代码页读，并只暂留可能被切断的半个字符；独立验证证据、编码工具安装日志和探测输出都改用它。Windows 上同时给 Python 子进程设置 `PYTHONIOENCODING=utf-8`，让修复落在源头，回退解码只作为其它程序的兜底；只设置输出编码，不改 `PYTHONUTF8`（它还会影响子进程如何打开文件）。

定向测试新增会话轮换 1 项、编码任务与面板 2 项、命令模板 1 项、审核证据 4 项、输出解码 6 项。全部检查通过：`check`、`build`、单元测试 672 项、原生集成 `smoke` 各阶段。使用虚构账号与本地夹具；未执行 Windows 真实账号验收，控制台代码页行为按字节级单元测试覆盖，不代表实机验证。

## 0.2.45 — 活动记录里的凭据遮盖

命令与命令输出的遮盖原先只认 shell 写法的四种形状：`KEY=value`、`Authorization: Bearer …`、`--token …`、`user:pw@host`。四种都要求一个 `=` 或空格，因此输出 JSON 的命令——`kubectl get -o json`、`docker inspect`、导出设置或环境——打印出的 `"apiKey": "sk-…"` 是冒号，四条规则全部绕过，密钥原样进入活动记录。本版补上 JSON 与对象字面量写法，并补充不带任何标签、只靠厂商前缀识别的凭据（`sk-ant-`/`sk-proj-`、`ghp_` 等 GitHub 令牌、`github_pat_`、`xox[bpas]-`、`AKIA…`）。

遮盖位置是 `redact()`，用户能看到的全部内容都经过它——活动记录、会话转录、独立验证证据、工具安装日志和审核提示词，所以一处修复覆盖全部九个调用点。不引入熵值猜测：输出里本来就有大量哈希、ID 和校验和，靠猜会把它们无谓地遮掉，而且仍然漏掉长得普通的凭据；每条规则只对应凭据真实会被写成的一种形状。

设置项、说明文字和普通 token 形状的字符串继续正常显示：`"apiKeyConfigured": true`、`token: none` 保持原样；以关键词**结尾**的键（如 `monkey`）会被遮掉，这是宁枉勿纵的方向。定向测试 7 项，覆盖两种引号、两种大小写、多密钥同一字符串，并断言 `AKIAIOSFODNN7EXAMPLE`、`ghp_` 等形状确实被遮，而 sha256 摘要与无前缀的 token 形状字符串保持可读。全部使用虚构值。

仓库同时接入 CI（`check`、`build`、`test` 串行），并修正两处只在特定环境暴露的测试缺陷：编码工具安装夹具原先会继承本机 `npm_config_*`（`npm run` 会注入，且其优先级高于项目 `.npmrc`），界面日期夹具原先按 `+08:00` 绝对时刻构造，在 UTC runner 上会渲染成另一种时钟时间。受限管道用例改为按真实能力（`unshare --user`）跳过并说明原因，CI 侧解除 Ubuntu 24.04 的 AppArmor 用户命名空间限制后真跑，不用跳过换绿。

## 0.2.44 — 权限模式、审核规则与环境配置

编码工具设置新增“手动确认”和“完全权限”，保留默认自动审核及严格模式。完全权限映射到 Codex `never / danger-full-access` 和 Claude `bypassPermissions`，跳过 Nexus 执行审批与拦截规则；Windows 不再要求该任务的编码沙箱就绪，不自动提升系统权限。保留会话与渠道身份、任务起始目录、目标澄清、取消、时间预算及显式离线验证约定。新增命令、额外文件、独立网络请求的审核方式及补充要求，按任务保存，续接不隐式升级权限。

非完全权限模式下，项目内 `.env.example`、`.env.sample`、`.env.template` 在现有内容与拟写入内容可确认是占位或本地非敏感配置时，按普通文件处理，并支持明确选择后打包交付；无法确认的模板写入交由用户判断。标准模式下，实际 `.env` 文件的原生文件写入改为仅本次人工审批，审批和决定记录不展示配置值，不缓存该授权。实际凭据读取、目录授权、目录外凭据和受保护目录仍受限制；计划中声明环境配置输出不等于授权写入。

Python 审核补充有界的 pytest 默认测试发现、配置与 conftest，以及自检脚本中显式启动的 Python 模块；支持 `python -X utf8 -m ...`。不执行测试来收集证据，不跟随目录链接或越出工作区；自定义发现、动态加载和超限继续标明证据不足。默认标准模式与安全自动审核保持不变。

## 0.2.43 — 手动更新入口与等待原因

插件详情中的手动安装按钮改为“立即更新”。无阻塞时直接开始安装，有运行任务、待投递消息、工具安装或数据恢复时显示具体等待原因；手动请求排队后显示“等待更新”并可取消。自动更新等待期间仍可手动触发，省去自动模式的两分钟静默等待，其他安装条件不变。安装完成后仍需正常退出并重启 DSH。

## 0.2.42 — 微信投递与编码任务恢复

微信发送被接口拒绝时，保存脱敏的 HTTP/ret/errcode 诊断并暂停本轮后续发送；新收到的绑定用户消息会恢复尝试，即使回复 token 不变。等待状态跨重启保留，重复消息与旧请求迟到的失败不能重置新窗口。认证、网络故障与发送拒绝分别处理，不猜测或写死微信回复条数。

电脑任务卡显示审批/提问未送达渠道的提示；实时提示取消后停止后续分段，不持久化或补发失效审批。积压的同一会话电脑端回执可合并，已开始发送的内容与消息 ID 不改写；微信每轮只主动提醒一次进度。连接页面区分收消息认证与发送结果，并在等待微信回复时禁用无效的重试。

微信修复通过 228 项定向测试和 54 项原生 DSH 本地集成检查（微信重启恢复 18 项、两端提问 10 项、编码任务与审批 26 项）。使用回环 HTTP、虚构账号和脚本模型；未向真实微信发送测试消息，不代表 Windows 真实账号验收。

Python 命令审核补充本地静态导入、包初始化文件、模块入口与 pytest 配置证据，保持原有凭据、路径和大小边界；不能确定的动态加载与自动测试发现仍报告证据不完整。

说明单可绑定项目目录，后续步骤默认沿用。计划派发可省略 description；续接使用 continuation，保留原目标、验收项及本版本已登记的验证命令。计划支持 outputs 提前检查受保护文件，支持 preflight 在编码前检查已有运行环境；预检失败、拒绝或取消均不启动编码工具，预检通过不能代替最终验收。

等待用户超时保留明确原因，恢复提示要求先解决具体审批问题，避免自动重复派发。汇报区分项目文件、依赖和测试/缓存产物，完整路径继续保留在审计与工作区边界检查中。通过 188 项定向测试和 26 项原生 DSH 本地集成检查。未执行 Windows 真实项目验收。

## 0.2.41 — npm 安装入口

公开发行包增加 npm 发布配置，实验版使用 `next` 标签，可在 DSH 的“添加插件”中填写 `dsh-nexus@next` 或指定版本 `dsh-nexus@0.2.41`。GitHub Release 和固定安装地址继续提供同一份安装包，插件内更新仍读取 GitHub 发布信息。

本版只调整发行元信息和说明，运行代码与 0.2.40 相同，沿用已验证的编译文件；组件默认值、已有配置和数据行为保持不变。

## 0.2.40 — 新安装默认启用全部组件

新安装的 Nexus 默认启用核心、长期记忆、邮箱、日历与待办四个组件，源码初始化同步采用相同默认值。原生组件开关和已有源码配置中的显式关闭记录继续保留。

组件简介与安装说明同步更新。邮箱仍需用户配置并启用账号后才连接；记忆沿用已保存的写入策略，新记忆默认待确认；日历继续遵循保存的服务开关。组件停用、数据保留及重新启用的行为保持不变。

## 0.2.39 — Windows 桌面插件更新

在“插件 → Nexus → 插件详情”的组件列表上方新增“Nexus 更新”，不再单独占用设置页入口。默认每六小时检查 GitHub 发布版本；空闲自动安装默认关闭，用户开启后等待任务、消息投递和数据恢复结束，以及两分钟无会话活动。支持手动检查、排队安装和取消。

通过 DSH 官方插件管理器更新，保留原生数据、配置与组件开关。安装前校验 SHA256、包结构、构建身份、DSH 版本及精确旧版回退包；不额外授权依赖安装脚本。安装失败尝试恢复旧版，保留中断状态和重试回退入口，避免重复安装失败版本。

分别显示运行与安装版本。更新需用户正常重启桌面端后激活，不强制结束任务或重启。不能自动修复新版重启后完全无法加载的问题，此时需从旧版本 Release 手动恢复。0.2.38 及更早版本先手动升级一次。源码 Web 继续使用源码更新器，保留显式卸载。

## 0.2.38 — Windows 桌面数据恢复

Windows 桌面支持在数据设置中预览并准备整体恢复。独立的系统 PowerShell 助手等待用户从托盘完全退出 DSH，再校验暂存文件、保存原数据并替换；成功后重新打开桌面端。等待期间可取消，助手不强制终止任务。恢复要求备份与当前 DSH 版本一致、不包含源码 profile 配置；当前桌面配置、插件和未选入的凭据保留。

恢复操作使用进程检查、可执行文件独占锁和持久化操作日志；替换期间保留启动保护。未完成的替换在重试时先回退，已提交的替换完成收尾；文件占用阻碍回退时保留保护和原数据。页面提供恢复状态与手动继续入口；已退出助手的等待及失败准备可取消。数据操作的空闲检查补充原生 Agent 收件箱和后台任务。

通过 21 项定向测试、15 项 Windows 系统 PowerShell 恢复检查及 8 项原生 DSH 数据恢复检查。覆盖版本与路径拒绝、取消、等待退出、重复助手、文件占用、中断回退及提交后收尾；全部使用虚构数据，未恢复真实账号备份或发送真实渠道消息。

## 0.2.37 — 记忆管理与可选加密备份

记忆支持全局默认及范围覆盖策略，模型记忆与换会话摘要可独立控制；新增画像和事件编辑、编辑后采纳、批量删除及注入内容快照。提案与最终写入使用相同长度校验。记忆 JSON 可选择画像、事件和待确认，下载后在桌面或 Web 预览迁移到明确范围；默认保留已有画像、跳过重复，过期预览需重新确认，不导入账号绑定和策略。

数据备份默认不包含凭据，可选源码 profile 配置；包含凭据必须使用密码加密（AES-256-GCM / scrypt，.nxb）。新版清单声明替换范围，未包含的凭据及配置保留，旧版 ZIP 仍可读取。导入前校验并预览，确认绑定相同文件；运行任务阻止恢复，最终重启前再次等待空闲。生成备份与上传使用同一大小上限。桌面端支持备份检查和记忆迁移，整体恢复仍需源码启动前导入器。

通过 52 项定向测试及 36 项原生 DSH 集成检查，覆盖范围策略持久化、编辑与批量删除、导入预览冲突、旧格式兼容、密码错误和篡改、空闲检查及真实存储启动前恢复。使用本地模型和虚构账号，不发送真实渠道消息。

## 0.2.36 — 电脑审批结果回执

电脑端完成绑定会话的审批后，向原聊天发送操作名称、允许或拒绝结果和旧提示失效说明。编码任务的审批沿用原生提问接口，回执列出选项；不重复完整参数、计划正文或自由填写内容。仅先完成的一端触发回执，取消或不可用不冒充已审批；微信已处理时不再补发电脑回执。回执通过现有结果队列发送并支持微信持久投递，发送失败不改变审批决定、不重新执行任务。

通过 38 项定向测试和 54 项原生 DSH 集成检查，覆盖允许、拒绝、取消、两端竞争、发送失败、回执顺序及原生历史恢复。使用本地模型和渠道夹具。

## 0.2.35 — 自动化管理与双端审批

新增 `nexus_automation`，通过官方 Schedule 服务查询和修改同一已绑定聊天的新旧会话中的任务，保留原始会话、执行要求和投递记录。更新使用原生冲突检查和写后核对；关闭官方自动化后不可使用，只读会话不可修改。创建继续使用原生 `schedule_create`，先查询避免重复。

日历工具返回明确标注“日历提醒，只发送已保存的文字”，不再让日历保存成功看起来等同于自动化建立成功。已有日历不会自动迁移，任务存在、持久化、执行完成和渠道送达分别核实。

绑定渠道的审批和问题同时交给渠道与官方桌面界面处理，先完成的一端生效，另一端取消。原生审批记录只保留一次；电脑在同一绑定会话中发起任务后的最终回复仍会转发到渠道，电脑输入的原文不转发，未绑定的电脑会话不转发。

通过 56 项定向测试和 143 项原生 DSH 集成检查，覆盖双端取消、单次审批记录、会话换新后的自动化管理、每日触发、重启与插件安装卸载。验证使用本地模型和渠道夹具，不代表真实微信或 Windows 界面的完整验收。

## 0.2.34 — 验证恢复与任务派发修复

验证目录不存在时明确报告未执行；进程启动失败不再计作测试已执行。续接和重试提前核对验证目录，避免重复使用已删除的路径。新增 verification_only 模式：引用编码已完成的原任务，只运行监工验证，保留原有权限、工作区和审批边界。

打包工具使用 JavaScript 语法解析识别依赖，避免把测试字符串和注释当作导入。派发前澄清影响平台、打开方式和交付格式的关键信息；明确文件和验证路径相对于任务目录，减少不必要的功能扩展、解释器探测和重复编码。最终回复不得夹带草稿指令。

固定时间自动化使用 DSH 原生 schedule_create，日历只承担日程提醒；已有日历项不会自动迁移。底部任务卡片跟随原生会话内容宽度和边距。

## 0.2.33 — 源码 Web 服务使用官方插件包

源码服务在构建时生成 `dist/plugin.tgz`，启动前通过 DSH 官方包管理接口安装。插件管理页可识别 `dsh-nexus` 的版本和四个组件，组件开关继续由 DSH 管理。

首次切换只把本 checkout 的四个直接文件入口转换为配置覆盖项，保留配置、工作区限制、组件启停、会话、凭据和任务数据。安装失败时不移除原入口；检测到其他实现占用同一组件 ID 时拒绝转换。

同一构建重复启动不重复安装，显式卸载不会在下次启动时被自动恢复。源码更新通过测试后，服务启动才安装该构建的固定安装包；构建回退同时恢复对应安装包。安装包包含构建信息，健康检查报告实际加载的构建，而非源码目录的当前版本。

通过 29 项相关单元检查和 63 项原生 DSH 生命周期检查，涵盖安装失败、配置并发修改、更新与回退选择、重启及卸载。集成使用本地夹具，不调用真实模型或发送真实渠道消息。

## 0.2.32 — 包名统一为 dsh-nexus

安装包、核心入口、三个可选组件入口与客户端加载名称统一为 `dsh-nexus`。显示名称仍为“Nexus 个人编码助理 / Nexus for DSH”，GitHub 仓库名称不变。

旧的 `nexus-next` 需要在同一个 DSH profile 中移除，再安装 `dsh-nexus-0.2.32.tgz`。不要同时启用两包。组件 ID、原生会话、任务记录、凭据、托管工具目录和已保存的任务侧栏标识保持不变；带旧模块名的配置可使用迁移脚本转换，详见 [RENAME.md](RENAME.md)。新安装默认关闭三个可选组件，旧安装保留已有启停状态。

本版通过 166 项相关单元/UI 检查、65 项从 0.2.31 旧包升级的原生 DSH 集成检查，以及 63 项全新安装生命周期检查。覆盖配置转换的幂等性、按模块名限定的设置、组件启停、记忆和日历数据、渠道凭据、旧包与客户端移除。集成使用离线包缓存和本地夹具，不执行真实模型任务或发送真实渠道消息。

保留 0.2.31 的审核修复、0.2.30 的任务卡片位置及既有 Windows 限制。MIT 许可证和第三方说明随包提供。

## 0.2.31 — 实验版

兼容 DSH `0.2.0-rc.2`。建议使用 Codex `0.155.1` 或 Claude Agent SDK `0.3.273`；工具需单独安装并配置凭据。

### 自动审核与审批提示

- 长命令送审时移除重复字段，保留完整命令、实际权限和文件证据，减少因请求体积超限转人工的情况。
- 审核为空或输出截断时最多重试一次，使用相同证据和同一个等待时限；明确拒绝不会重试。
- 审批提示、任务卡片和过程侧栏显示转人工的具体原因。
- 保留单次操作授权、取消、最新规则与证据变化检查，不扩大自动批准范围。

### 从 GitHub 上的 0.2.28 升级

- **0.2.29**：编码任务跟随所属 DSH 会话工作区；派发、排队启动、续接和打包检查目录边界。显式要求离线验证时，Windows 会先检查隔离条件。
- **0.2.30**：运行中的任务卡片固定在输入框上方；结束后移到对应“后台任务状态更新”上方，支持多任务、延迟通知和刷新恢复。
- **0.2.31**：包含上面的自动审核和原因展示修复。

### 验证范围

2026-10-02 对 0.2.31 运行代码完成以下定向检查，不把其他版本的结果计作本版全量回归：

| 检查 | 结果与范围 |
| --- | --- |
| 聚焦单元/UI | 151 项通过；长请求、审核重试、拒绝、取消、证据复核与卡片展示 |
| 原生 DSH 编码集成 | 24 项通过；使用本地模型与执行夹具 |
| 已安装插件生命周期 | 63 项通过；离线检查 |
| Windows 定向检查 | 4 项通过；长请求、范围限制、审核诊断及桌面客户端/旧任务读取 |
| 本机桌面升级 | 已升级至 0.2.31；原有 Codex 与 Claude 托管安装记录保持不变 |

这些检查未调用真实模型执行编码任务，未发送真实渠道消息，也未进行浏览器视觉验收。Windows 本机安装与接口检查不能推断所有平台或真实账号流程已验收。

开源准备仅新增 MIT 许可证、第三方说明、发布文档及包元信息，运行代码保持不变。公开安装包的编译文件应与上述已验证的 0.2.31 产物逐字节一致；随 Release 提供 `SHA256SUMS`，文档调整后产生的包摘要不沿用旧包摘要。

## 0.2.30 — 任务卡片位置

活动任务固定在输入框上方，结束结果移到对应原生通知上方。支持多任务分别交接、刷新恢复和延迟通知，保留执行结束但未验证、验证失败、中断及取消等真实状态。查看过程仍打开原有侧栏；任务执行、会话历史和审批继续由 DSH 管理。通过 JSDOM、原生 slot 注册生命周期和本地 DSH 集成验证。

## 0.2.29 — 工作区与验证修复

修复编码任务默认落到渠道目录的问题。派发、排队启动、续接和打包都会检查当前会话目录边界，旧文件不会自动移动。标准模式独立验证默认由 DSH 审核具体命令；显式要求离线时，Windows 会在派发前检查防火墙条件，不满足则拒绝派发，不自动降低隔离要求。原生 Windows 的 `0xC0000142` 进程初始化失败仍需宿主处理，不能视为测试通过。本版本通过本地夹具验证，不代表真实账号或 Windows 完整发布验收。

### 安装与已知限制

使用 DSH 的“插件 → 添加插件”安装 `nexus-next-0.2.31.tgz`，按提示启用或重启。产品显示名为 **Nexus 个人编码助理**；为保留已有安装身份，包标识仍为 `nexus-next`，四个组件入口与标识保持不变。

Windows 的 Claude 严格模式及隔离回环验证不可用；标准模式审批不等同于操作系统隔离。本机曾复现 DSH rc.2 官方 Windows ACL runner 的 `workspace-write` 进程初始化错误 `0xC0000142`，仍未解决。微信文件交付和额外验证码不在本版支持范围内。

本版为实验版本。真实模型、渠道、邮箱及更广泛的 Windows 流程仍需分别验证。
