Skip to content

Releases: xyrrrrr-r/dsh-eval-control

dsh-eval-control v0.4.0

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 20 Oct 01:17

证据链与团队协作全量落地:统一证据抽屉从结论回溯宿主原始事件,Team 活动新增协作关系图与交互时序,消息与演化页改为全历史采集;仓库文档精简为仅保留用户向文档。

Added

  • 统一证据链抽屉:顶部指标卡、告警、指标明细、演化标记、请求选择、消息 ⚡/🔻、压缩/注入事件、工具明细、Team 成员与对比指标共用右侧抽屉;打开时固定数据快照,展示结论、规则、计算输入、样本与分母、证据等级(observed/derived/inferred)与质量提示;关闭后保留原 Tab 的筛选和缩放。
  • 原始事件核查:关联事件按 sessionId + seq 通过 loadThrough(seq) 读取宿主持久原始事件,显示目标事件及前后最多 3 条(可折叠),支持 JSON 检查、单条下载、引用搜索与分页(每页 20 条);15 秒超时、切换即取消,不把 projection 节选当成原始证据。
  • 窗口占用计算卡:展示"未缓存输入 + 缓存读取 = 请求占用""请求占用 ÷ 窗口上限"实际数值;每个输入独立绑定用量/配置事件,可核对原始字段与计算快照是否一致;缓存读缺失时保留未知值,不冒充已核实的 0。
  • Team 活动协作视图:主子 Agent 协作关系图(消息实线 + 任务归属虚线,点击连线按方向筛选)、交互时序图(日期/成员/交互类型筛选)、成员泳道与轮次卡片、共享任务板(待处理/进行中/已完成)、消息往来按消息 ID 合并排队与送达回执;无记录时明确提示,不补画推测关系。
  • 上下文内容估算:按请求拆分消息正文、历史思考、工具调用参数、工具结果正文、系统/开发者内容、图片引用结构与结构开销,逐项标注候选输入 / 依路由而定 / 非真实计价。
  • 工具错误分析:失败结果标红、错误原文节选和规则化原因分析(权限、路径不存在、超时、网络、参数格式、非零退出);工具分布图联动失败证据。
  • 总览全链路综合诊断:联合任务进展、上下文、消耗、延迟、工具与团队六个维度生成综合结论与跨阶段证据引用;缺失数据标为未知。
  • AI 模型诊断服务与客户端已实现,默认停用:宿主未注册该服务,界面不显示 AI 诊断入口;规则告警、错误文本分析与证据链不受影响。
  • 宿主投影补充证据锚点:contextWindowSeq、toolsSeq、压缩事件 evidenceRefs、compactionStarts 保留序号。
  • 新增证据链、团队协作两张面板 GIF;全部 8 张 GIF 以最新面板重录;新增用户向文档 docs/evidence-chain.md。

Changed

  • 全历史采集:宿主投影移除 steps/injections/compactions 的 256/64/32 条截断上限,请求、消息及压缩/修剪样本按实际数量采集;消息页默认读取全部可读历史,可切换最近 N 条或起止事件序号,叠加角色与单条 Token 范围筛选,列表分页显示覆盖状态。
  • 工具结果回填聚合:演化页普通工具结果按相邻模型请求区间聚合,默认显示估算 Token 最高的 10 组和全部失败结果,可切换全部区间;失败结果独立标红,通过 callId 关联来源调用。
  • 激增检测抽出共用基线算法(前 5 条追加消息中位数,≥3 样本、≥1000 Token 且 ≥3 倍中位数),消息页与演化页口径一致。

Removed

  • 仓库文档精简:设计过程文档(PRD、PLAN、tech-design、契约、验证报告、proposals、演示分镜与原始终端录制等)从仓库移除并忽略,仅保留用户向文档;远程历史提交未改写。

Fixed

  • npm 说明页裂图(0.3.0 已知问题):README 的 5 枚徽章与 8 张面板 GIF 改为 raw.githubusercontent.com 绝对链接,npmjs 说明页图片恢复正常显示。

安装:dsh plugin --profile web add dsh-eval-control@0.4.0

完整变更:CHANGELOG · npm:https://www.npmjs.com/package/dsh-eval-control/v/0.4.0

dsh-eval-control v0.3.0

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 20 Oct 01:17

轨迹分析面板全量落地(宿主投影 contextTimeline + 客户端多视图),并补齐统一诊断中心、多会话对比与报告分享。

Added(宿主投影)

  • contextTimeline 投影(src/analytics/contextTimeline.ts):对会话事件流的纯折叠,输出均经 zod strict wire schema、全部有界:
    • 7 段上下文表面组成(系统提示/对话消息/工具定义/工具结果/文件内容/压缩摘要/其他),估算算法与 dsh-token-meter 一致(CHARS_PER_TOKEN=4);每段附有界内容节选与 callId 定位符;
    • 消息级 Token 台账(kind/sourceKind/tokens/turn,客户端过滤"注入"视图);
    • 步骤采样(表面估算 + 服务商 usage,含 cacheReadTokens);
    • 压缩事件(摘要/修剪分类、前后 Token、回收量与回收比、耗时);
    • 工具 Top-20 与 callId→工具名映射。

Added(客户端「轨迹分析」面板)

  • 总览:环形占用仪表盘(>80% 脉冲)、组成堆叠条+饼图(点击过滤)、组成明细表(查看内容/复制/在 Trajectory 定位)、指标卡×6。
  • 上下文演化:窗口占用(含缓存读)实线 + 表面估算/输出参考线 + 窗口上限虚线;压缩(绿三角)/注入(橙圆)/激增(红菱形)标记,悬停详情、重叠聚合气泡、筛选芯片;框选缩放、拖拽平移、双击重置;X 轴按轮次/步骤/时间。
  • 消息 Token:角色/注入/Token 范围筛选与多键排序;Top3 消耗 👑、异常突增 ⚡、累计骤降 🔻 高亮;「原因总结」归因面板(主导机制、突增倍数、匹配压缩事件);双饼图消息构成。
  • 压缩与注入:事件卡片(前后对比条、回收比、耗时)、替换关系与手段说明、注入 vs 直接输入分类;连续历史修剪与同秒注入聚合。
  • 工具分布:横条图 + 错误叠加 + 调用明细。Team 活动:成员×指标聚合。
  • 对比分析:2–4 会话选择、8 指标对比卡(最优★)、资源比例雷达图(原始值/本轴最大值,零值居中)、差异报告与建议。
  • 智能告警 5 规则(满载/频繁压缩/高错误率/Token 浪费/长间隔),阈值本地持久化、忽略/已处理。
  • 统一诊断中心:总览右侧合并告警入口,提供规则设置、原始诊断数据和压缩策略配置应用(经宿主配置编辑器持久化,含并发检查与回读确认)。
  • 导出与分享:Markdown / JSON / PNG / 独立单文件 HTML 报告;PDF、多种报告模板;支持密码、有效期和撤销的只读分享链接;团队模板可下载差异报告。

Changed

  • client/client.js 由手写脚本变为生成产物;修改 UI 一律改 client-src/ 后 npm run build:client。
  • "当前窗口占用"语义修正:取最后一步 inputTokens + cacheReadTokens(服务商 inputTokens 为未缓存部分)。
  • 指标卡"输入 Token"重标为"输入 Token(未缓存)";趋势用含缓存值。
  • 新增宿主依赖遵循运行时兼容范围与开发期精确版本分离的发布约定。

已知偏差

  • 分享链接由宿主 HTTP 路由提供本地持久化只读快照;本机地址仅本机可达。
  • 组成/消息 Token 为估算(服务商不提供消息级精确值),UI 标注"估算"。

已知问题(0.4.0 已修复)

  • npm 说明页面板 GIF 裂图(README 用仓库相对路径);0.4.0 已改为 raw 绝对链接。

安装:dsh plugin --profile web add dsh-eval-control@0.3.0

完整变更:CHANGELOG · npm:https://www.npmjs.com/package/dsh-eval-control/v/0.3.0

dsh-eval-control v0.2.6

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 12 Oct 02:15

修掉"市场安装的控制栈不能独立跑"这个根因。 此前 dsh plugin add 装进 profile 的副本
无法被 aeval 使用:aeval 把 dist/broker_main.js(模型 broker)与 dist/session_reader.js
(会话读取器)当独立 Node 进程执行,而本包把 @deepseek-ai/* 声明为 peer(这是正确的
设计——插件被 DSH 宿主进程内加载时必须用宿主那份,SessionId / scopeOf 是运行时值),
pnpm 又只装 dependencies,于是那两个进程 ERR_MODULE_NOT_FOUND: Cannot find package '@deepseek-ai/dsh-llm',试次以"模型 broker 起不来"被整轮排除。

Changed

  • 两个独立进程入口改为自带依赖的 bundle(新增 scripts/bundle-standalone.mjs,作为
    构建链最后一步):dist/broker_main.js 15.8 KiB → 246.3 KiB、dist/session_reader.js
    8.5 KiB → 617.2 KiB,各自内联全部 import,运行时不再解析任何裸包(node 内建除外)。
    进程隔离的进程持有私有副本正是对的;dist/index.js 与 dist/sandbox_entry.js 保持原样、
    继续 import 宿主 peer,所以插件在 DSH 内仍与宿主共享实例。
    npm tarball 101 kB → 288 kB。
  • test 脚本在最后一步重新 bundle:原先它末尾又一次 pull-neutral,会把 bundle 覆盖
    回原始文件,而 prepublishOnly = build && test,发布物就会静默退回旧行为。

Added

  • 两条新的打包不变量测试(test/packaging.test.ts):「aeval 当独立进程跑的入口运行时不再
    解析任何裸包」与「进程内入口仍引用宿主 peer(不得出现私有副本)」。
  • test/neutral-shims.test.ts:broker_main 不再要求 dist/ 与兄弟构建逐字节相同——改为
    守卫真正的源 vendor/neutral/broker_main.js 不漂移,并保留 src/*.d.ts 与其余 neutral
    模块的逐字节比对。

实测

  • 隔离副本(只有 dist/ + cordis.patch.yml + package.json,无任何 node_modules):
    broker 按 aeval 的就绪契约启动、写出 token 文件、干净停止(退出码 0);读取器正常加载。
  • hw-lab 全链路:dsh plugin --profile market26 add dsh-eval-control-0.2.6.tgz(pnpm
    路径,profile 内 @deepseek-ai 依赖 0 个)→ controlRoot 直指那份、工作区不装任何
    npm 包 → run run-demo sealed: 3 trial(s) recorded, 89 file(s) attested, recompute passed,
    有效分母 3/3、排除率 0.0%。runtime lock digest 随之变为
    467f20a3f59be97360893ddac0398121d6a61e0aa0fd4b04f9bc803a9686ec2a(控制栈文件变了)。
  • npm test 193/193 通过。

安装

npm install dsh-eval-control@0.2.6                 # 工作区一份当 controlRoot
dsh plugin --profile <profile> add dsh-eval-control@0.2.6   # 或直接装进 DSH profile(0.2.6 起装完即可用)

执行文档:docs/MARKET-TO-REPORT.md

dsh-eval-control v0.2.5

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 12 Oct 02:15

文档修正版本:控制栈代码与 0.2.3/0.2.4 完全相同(git diff v0.2.3 HEAD -- src/ client/
为空,只动文档与清单)。补上"不改控制栈、直接用插件市场那份也能跑"的第二条路线。

Added

  • 执行文档 §2.2 增加「路线 B:就用插件市场装的那份」:写清默认失败的真实原因
    (pnpm 只装 dependencies,13 个 @deepseek-ai/* peer 由 DSH 宿主进程提供,而 broker
    是独立进程),给出 dist 真正 import 的 8 个包清单,以及三种补法——pnpm add 成真
    依赖、零网络地从 DSH 安装软链、把 dist 放进 DSH 安装。三种补法都实测可加载;其中第一种
    端到端跑通:controlRoot 直指市场那份、工作区一个 npm 包都没装,3 个试次全部进入判分、
    封存 recompute passed;会话读取器也由 aeval 自己从 DSH profile 发现,无需工作区副本。
  • README 同段落改为"两条路线选一条",补上路线 B 的实测结果与代价(改了 DSH 管的 profile
    或 DSH 安装目录)。

Changed

  • README 里写死的版本标识 v0.2.2 → v0.2.5;示例命令版本号统一到 0.2.5。

安装

npm install dsh-eval-control@0.2.5                 # 工作区一份当 controlRoot
dsh plugin --profile <profile> add dsh-eval-control@0.2.5   # 或直接装进 DSH profile(0.2.6 起装完即可用)

执行文档:docs/MARKET-TO-REPORT.md

dsh-eval-control v0.2.4

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 12 Oct 02:15

文档与实测修正版本:源码零改动,插件行为、配置 schema、bundle descriptor
格式均未变。补上同事端从安装到出报告的完整执行文档,并修掉 README 里一段
"照做必然失败"的最短路径(给的 spec 缺三项必填、且把市场安装副本当成可用控制栈)。

Added

  • 端到端执行文档 docs/MARKET-TO-REPORT.md:从
    aeval 与控制栈安装、套件获取、可信 token 计数器、broker spec,一路到出报告,
    全部命令在真机(Linux/aarch64 + Docker 后端)上端到端跑通——3 个 terminal-bench
    任务全部进入判分(有效分母 3/3、排除率 0.0%)、证据覆盖 3/3、封存
    recompute passed(89 个封存文件)。附逐条实测报错原文的排障表,以及可整段
    复制的脚本。

Fixed

  • README「装了插件之后:真正跑一次评测」给出的 spec 跑不起来:示例 upstream
    只写了 apiKeyEnv(实测被拒:broker config upstream.model: invalid identifier '')、
    设了 limits.maxTokens 却没有 tokenCount(实测被拒:limits.maxTokens requires a trusted tokenCount source)、docker 后端沿用 loopback(沙箱侧
    TypeError: fetch failed / connect ECONNREFUSED 127.0.0.1:8447,最终表现为
    the trial's agent exposes no DSH session)。现改为实测可用的完整形状,并补上
    token 计数器、listenHost/listenTls/controlCa、以及 trials/ 证据链接三步。
  • README 关于"市场式安装位置"的说法会误导:dsh plugin add 走 pnpm 严格布局,
    @deepseek-ai/dsh-* 这些 peer 由 DSH 宿主提供,profile 里那份没有这些依赖
    (实测 .pnpm/ 下 0 个 deepseek 包),不能当作 aeval 的 controlRoot
    (实测 ERR_MODULE_NOT_FOUND: Cannot find package '@deepseek-ai/dsh-llm' imported from .../dist/broker_main.js)。现已写明两条安装路径的分工:DSH 内用插件走
    dsh plugin add,让 aeval 跑评测另装一份 npm install 的控制栈。
  • README 的实测结论改为可复核的措辞:原文写"3 个试次全部 reward=1"(那是更早
    一次 run 的结果);现按本文档对应的 run 记为"3 个试次全部进入判分(有效分母
    3/3、排除率 0.0%)、证据覆盖 3/3"。

安装

npm install dsh-eval-control@0.2.4                 # 工作区一份当 controlRoot
dsh plugin --profile <profile> add dsh-eval-control@0.2.4   # 或直接装进 DSH profile(0.2.6 起装完即可用)

执行文档:docs/MARKET-TO-REPORT.md

dsh-eval-control v0.2.3

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 12 Oct 02:15

文档与依赖声明版本:补上"装完插件之后评测怎么才算真的跑起来"的实测步骤,
并把 devDependencies 升到 DSH 0.2.0-rc.2 宿主、移除已停用的 dsh-sdk-client
peer。插件行为、配置 schema 与 bundle descriptor 格式均未改动,源码零改动。

Changed

  • devDependencies 升到 DSH 0.2.0-rc.2:@deepseek-ai/dsh* 由
    0.1.7-alpha.1 进位到 0.2.0-rc.2,@deepseek-ai/cordis 4.0.3 → 4.0.4、
    @deepseek-ai/schemastery 3.18.3 → 3.18.4;package-lock.json 随之重算,
    四个依赖字段与 package.json 逐一核对一致。
  • 移除 @deepseek-ai/dsh-sdk-client peer 声明:0.2.0 元包已不再依赖它,
    继续声明等于要求宿主提供一个不存在的包。其余 peer 窗口沿用 0.2.1 放宽后的
    写法,未再改动。

Added

  • README 补「装了插件之后:真正跑一次评测」一节:说清插件不是评测
    (standalone 模式什么都不挂,套件、试次、证据门、封存、报告都是 aeval 的
    职责),给出实测步骤——需要 aeval ≥ 0.3.0,aeval agents --init 写声明、
    最小 broker spec 只需 controlRoot 一处(brokerJs/controlDist/会话读取器
    都由它推导)、宿主导出上游 key、aeval run 后 aeval report。附一张失败形态
    表,逐条对应实测原文,含"宿主少 key 会在沙箱里伪装成 MISSING_CREDENTIAL"
    这类会把人带偏的症状。

安装

npm install dsh-eval-control@0.2.3                 # 工作区一份当 controlRoot
dsh plugin --profile <profile> add dsh-eval-control@0.2.3   # 或直接装进 DSH profile(0.2.6 起装完即可用)

执行文档:docs/MARKET-TO-REPORT.md

dsh-eval-control v0.2.2

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 12 Oct 02:14

客户端修复版本:Web 状态胶囊补上 locale 依赖声明,文案注册不再依赖该服务
恰好已就绪。插件行为、配置 schema 与 bundle descriptor 均未改动。

Fixed

  • Web 状态胶囊漏声明 locale 依赖:client/client.js 调用
    ctx.locale.register / ctx.locale.bind,但模块的 inject 只声明了
    slots,只能靠存在性守卫兜底——locale 服务不在时字典不会注册、胶囊文案
    退化成原始 key,且 loader 不会为它等待。现按官方 client 插件的写法(
    ui-schedule、ui-layout、ui-approval、ui-trajectory 等一律把 locale
    写进 inject)声明该依赖,随之移除那两处守卫。只影响 Web 状态胶囊的文案
    注册,宿主侧行为与 bundle descriptor 均未改动。

安装

npm install dsh-eval-control@0.2.2                 # 工作区一份当 controlRoot
dsh plugin --profile <profile> add dsh-eval-control@0.2.2   # 或直接装进 DSH profile(0.2.6 起装完即可用)

执行文档:docs/MARKET-TO-REPORT.md

dsh-eval-control v0.2.1

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 09 Oct 12:29

dsh-eval-control v0.2.1

宿主兼容性修复版本。插件行为、配置 schema 与 bundle descriptor 格式均未改动。

Fixed

  • peer 窗口静默排除宿主预发布版本:@deepseek-ai/dsh* 原先写作 >=0.1.7-alpha.1 <0.2.0。node-semver 只在范围里存在同一 major.minor.patch 元组上带预发布标签的比较符时才放行该预发布,而 <0.2.0 的上界不带标签,于是 0.2.0-rc.2 与 0.1.8-alpha.* 都被静默排除,宿主据 peer 范围跳过整个 bundle(仅 stderr 提示),看起来像插件没装。窗口改为按元组分段:>=0.1.7-alpha.1 <0.1.8-0 || >=0.1.8-alpha.1 <0.2.0-0 || >=0.2.0-0 <0.3.0-0。

Changed

  • 仓库迁至 GitHub,全部历史提交经清洗后完整保留(提交邮箱改为 noreply),与 GitCode 上的 SHA 不再对应。

Install

npm install dsh-eval-control

或 dsh plugin --profile web add dsh-eval-control

npm: https://www.npmjs.com/package/dsh-eval-control
1024 商店: https://deepseek1024.com/plugins/xyrrrrr-r/dsh-eval-control

dsh-eval-control v0.2.0

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 20 Oct 01:17

发布面版本:让本包作为 DSH 插件可被收录、可被独立安装,且装完不炸。 aeval 的运行链路未变:deploy_control_stack 依旧自己写 patch 与内联配置,插件行为、descriptor 格式与 configDigest 计算方式均未改动。

Added

  • 可发布的 Cordis bundle:package.json 声明 dsh.bundle.patch,仓库新增 cordis.patch.yml,files 白名单补齐补丁/locale/icon/client,exports 暴露 ./client、./package.json、./cordis.patch.yml、./locale/*.json。已用真实 DSH 的 profile loader 验证:bundle 解析成功、peer 预检通过、补丁被加载且无跳过。
  • standalone 激活路径(src/sandbox_entry.ts):controlConfigPath 改为可选。没有任何配置时不再抛错,而是发布 evalControlStatus 服务、打一条通知并什么都不挂载——模型调用不被重定向。配置一旦提供,fail-closed 语义原样保留。
  • 配置引用形态(src/control_config_source.ts):行配置可以是内联完整配置、{ controlConfigPath } 引用,或在空配置时回退到 AEVAL_CONTROL_CONFIG。内联路径逐字节透传,configDigest 不变。
  • 自检命令 aeval-dsh-control-selfcheck(第 4 个 bin):只读检查 Node 版本、配置解析与摘要、run 绑定、job token、session root、descriptor 目录可写性与 broker /info 可达性;支持 --json,未配置时报 standalone 并以 0 退出。
  • Web 只读状态胶囊:在 conversation.composer.dock 显示控制行是否挂载及其 fiber 阶段;宿主 Remote 缺席时如实显示"宿主通道不可用"。
  • 展示元数据:locale/en.json、locale/zh.json 与顶层 icon.svg。

Changed

  • 发布面 peer 范围与构建期 pin 分离:@deepseek-ai/* 从 dependencies 移入 peerDependencies,精确 pin 保留在 devDependencies 作为构建记录。profile 不再被塞入第二份 Harness。
  • 内部资料归档:docs/TESTS/ → docs/internal/(开发过程记录,不随 npm 包分发)。

Fixed

  • README 里的坏链:改为自足的 npm test 说明,并链接 aeval 侧的三份使用者指南。

已知限制

  • aeval 部署路径仍按 @deepseek-ai/dsh-*@0.1.7-alpha.1 的片构建与锁定;peer 范围只描述本包可被加载的宿主版本窗口。
  • Node 要求 ^22.19.0 || >=24.0.0。

完整变更:CHANGELOG · npm:https://www.npmjs.com/package/dsh-eval-control/v/0.2.0

dsh-eval-control v0.1.0

Choose a tag to compare

@xyrrrrr-r xyrrrrr-r released this 20 Oct 01:17

首个公开版本(experimental)。

Added

  • Cordis 控制插件 dsh-eval-control(inject: llm / tools / sessions / evalBroker):会话启动时一次性注入全部实验事实。
  • EvalControlConfig:run 绑定四元组(run_id / job_config_hash / config_file_sha256 / runtime_lock_digest)互相锁死;配置按原样(as-authored)参与 configDigest,宿主组合的配置与沙箱内解析的配置逐字段比对,不一致即失败。
  • 实验变量注入:provider / model / reasoningEffort / maxSteps / maxTokens / tools allow-deny。
  • 网关租约预算:BrokerAdapter + 宿主 broker(startHostBroker);job token 鉴权;辅助调用策略(refuseAuxiliaryCalls 总开关 + auxiliaryPolicy 按用途显式放行,默认拒绝);租约关闭即拒绝安装 broker transport;调度/拒绝记录可审计。
  • fork 血统校验:parentSessionId / parentTrialId / forkStep 显式验证,跨会话记忆类评测的可信基底。
  • bundle descriptor:schema v2 证据归属写入;owner finalize 终态锁存(完成证据经官方 flush barrier 落盘后才可发布)。
  • 沙箱侧入口 sandbox_entry:在被沙箱化的 DSH profile 内安装 broker transport,把实验 provider 的每次模型调用路由到宿主 broker。
  • 独立 bin:aeval-dsh-session-reader(官方 JSONL persistence 读取)、aeval-dsh-session-stub(桩会话创建)、aeval-model-broker(宿主 broker)。路径安全纪律:拒绝符号链接祖先、限定 allowed base、64KB 请求上限、类型化错误码。
  • pull-neutral 构建:broker 集群的中立源码真身在 aeval 仓库 control/(aeval-control);构建时组合其 dist,独立 clone 用已提交的 shim/dist 保持可构建,新鲜度测试保证字节一致。
  • token 上限、上游 chat-completions 适配、停止原因推导。

Fixed

  • 测试 fixture 在 macOS 下因 /var → /private/var 符号链接被 bundle 写入器安全防护拒绝的问题(与其余测试文件同一 realpathSync 约定对齐)。

已知限制

  • 依赖 @deepseek-ai/dsh-* 固定 0.1.7-alpha.1(与 aeval 的 DSH 适配器、官方 session 格式对齐);升级需与 aeval 同步验证。
  • Node 要求 ^22.19.0 || >=24.0.0。

完整变更:CHANGELOG · npm:https://www.npmjs.com/package/dsh-eval-control/v/0.1.0