@dsh-enhanced/assistant-evaluation 0.1.23 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -3
- package/bin/dsh-benchmark.js +21 -0
- package/lib/benchmark/cli.d.ts +6 -0
- package/lib/benchmark/cli.d.ts.map +1 -0
- package/lib/benchmark/cli.js +332 -0
- package/lib/benchmark/cli.js.map +1 -0
- package/lib/benchmark/corpus.d.ts +28 -0
- package/lib/benchmark/corpus.d.ts.map +1 -0
- package/lib/benchmark/corpus.js +173 -0
- package/lib/benchmark/corpus.js.map +1 -0
- package/lib/benchmark/deepseek.d.ts +15 -0
- package/lib/benchmark/deepseek.d.ts.map +1 -0
- package/lib/benchmark/deepseek.js +143 -0
- package/lib/benchmark/deepseek.js.map +1 -0
- package/lib/benchmark/holdout-evidence.d.ts +126 -0
- package/lib/benchmark/holdout-evidence.d.ts.map +1 -0
- package/lib/benchmark/holdout-evidence.js +466 -0
- package/lib/benchmark/holdout-evidence.js.map +1 -0
- package/lib/benchmark/holdout-protocol.d.ts +68 -0
- package/lib/benchmark/holdout-protocol.d.ts.map +1 -0
- package/lib/benchmark/holdout-protocol.js +271 -0
- package/lib/benchmark/holdout-protocol.js.map +1 -0
- package/lib/benchmark/holdout-provider.d.ts +26 -0
- package/lib/benchmark/holdout-provider.d.ts.map +1 -0
- package/lib/benchmark/holdout-provider.js +382 -0
- package/lib/benchmark/holdout-provider.js.map +1 -0
- package/lib/benchmark/holdout.d.ts +83 -0
- package/lib/benchmark/holdout.d.ts.map +1 -0
- package/lib/benchmark/holdout.js +391 -0
- package/lib/benchmark/holdout.js.map +1 -0
- package/lib/benchmark/index.d.ts +9 -0
- package/lib/benchmark/index.d.ts.map +1 -0
- package/lib/benchmark/index.js +7 -0
- package/lib/benchmark/index.js.map +1 -0
- package/lib/benchmark/memory-corpus.d.ts +55 -0
- package/lib/benchmark/memory-corpus.d.ts.map +1 -0
- package/lib/benchmark/memory-corpus.js +153 -0
- package/lib/benchmark/memory-corpus.js.map +1 -0
- package/lib/benchmark/memory-runtime.d.ts +63 -0
- package/lib/benchmark/memory-runtime.d.ts.map +1 -0
- package/lib/benchmark/memory-runtime.js +75 -0
- package/lib/benchmark/memory-runtime.js.map +1 -0
- package/lib/benchmark/native.d.ts +46 -0
- package/lib/benchmark/native.d.ts.map +1 -0
- package/lib/benchmark/native.js +300 -0
- package/lib/benchmark/native.js.map +1 -0
- package/lib/benchmark/report.d.ts +4 -0
- package/lib/benchmark/report.d.ts.map +1 -0
- package/lib/benchmark/report.js +153 -0
- package/lib/benchmark/report.js.map +1 -0
- package/lib/benchmark/runner.d.ts +25 -0
- package/lib/benchmark/runner.d.ts.map +1 -0
- package/lib/benchmark/runner.js +119 -0
- package/lib/benchmark/runner.js.map +1 -0
- package/lib/benchmark/schema.d.ts +20 -0
- package/lib/benchmark/schema.d.ts.map +1 -0
- package/lib/benchmark/schema.js +183 -0
- package/lib/benchmark/schema.js.map +1 -0
- package/lib/benchmark/store.d.ts +18 -0
- package/lib/benchmark/store.d.ts.map +1 -0
- package/lib/benchmark/store.js +321 -0
- package/lib/benchmark/store.js.map +1 -0
- package/lib/benchmark/strategy-capabilities.d.ts +154 -0
- package/lib/benchmark/strategy-capabilities.d.ts.map +1 -0
- package/lib/benchmark/strategy-capabilities.js +300 -0
- package/lib/benchmark/strategy-capabilities.js.map +1 -0
- package/lib/benchmark/strategy-config.d.ts +26 -0
- package/lib/benchmark/strategy-config.d.ts.map +1 -0
- package/lib/benchmark/strategy-config.js +80 -0
- package/lib/benchmark/strategy-config.js.map +1 -0
- package/lib/benchmark/strategy-corpus.d.ts +21 -0
- package/lib/benchmark/strategy-corpus.d.ts.map +1 -0
- package/lib/benchmark/strategy-corpus.js +95 -0
- package/lib/benchmark/strategy-corpus.js.map +1 -0
- package/lib/benchmark/strategy-evidence.d.ts +161 -0
- package/lib/benchmark/strategy-evidence.d.ts.map +1 -0
- package/lib/benchmark/strategy-evidence.js +520 -0
- package/lib/benchmark/strategy-evidence.js.map +1 -0
- package/lib/benchmark/strategy-executor.d.ts +27 -0
- package/lib/benchmark/strategy-executor.d.ts.map +1 -0
- package/lib/benchmark/strategy-executor.js +178 -0
- package/lib/benchmark/strategy-executor.js.map +1 -0
- package/lib/benchmark/strategy-goal-runtime.d.ts +78 -0
- package/lib/benchmark/strategy-goal-runtime.d.ts.map +1 -0
- package/lib/benchmark/strategy-goal-runtime.js +324 -0
- package/lib/benchmark/strategy-goal-runtime.js.map +1 -0
- package/lib/benchmark/strategy-meter.d.ts +62 -0
- package/lib/benchmark/strategy-meter.d.ts.map +1 -0
- package/lib/benchmark/strategy-meter.js +236 -0
- package/lib/benchmark/strategy-meter.js.map +1 -0
- package/lib/benchmark/strategy-owner.d.ts +71 -0
- package/lib/benchmark/strategy-owner.d.ts.map +1 -0
- package/lib/benchmark/strategy-owner.js +282 -0
- package/lib/benchmark/strategy-owner.js.map +1 -0
- package/lib/benchmark/strategy-plan.d.ts +51 -0
- package/lib/benchmark/strategy-plan.d.ts.map +1 -0
- package/lib/benchmark/strategy-plan.js +71 -0
- package/lib/benchmark/strategy-plan.js.map +1 -0
- package/lib/benchmark/strategy-policy.d.ts +16 -0
- package/lib/benchmark/strategy-policy.d.ts.map +1 -0
- package/lib/benchmark/strategy-policy.js +77 -0
- package/lib/benchmark/strategy-policy.js.map +1 -0
- package/lib/benchmark/strategy.d.ts +17 -0
- package/lib/benchmark/strategy.d.ts.map +1 -0
- package/lib/benchmark/strategy.js +21 -0
- package/lib/benchmark/strategy.js.map +1 -0
- package/lib/benchmark/types.d.ts +133 -0
- package/lib/benchmark/types.d.ts.map +1 -0
- package/lib/benchmark/types.js +3 -0
- package/lib/benchmark/types.js.map +1 -0
- package/lib/benchmark/usage.d.ts +36 -0
- package/lib/benchmark/usage.d.ts.map +1 -0
- package/lib/benchmark/usage.js +84 -0
- package/lib/benchmark/usage.js.map +1 -0
- package/lib/service.d.ts +50 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +556 -9
- package/lib/service.js.map +1 -1
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +94 -2
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +27 -5
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +324 -25
- package/lib/store.js.map +1 -1
- package/lib/types.d.ts +114 -5
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +125 -18
package/README.md
CHANGED
|
@@ -77,9 +77,9 @@ projection 保存选中的 execution/objective/delivery component id,原始两
|
|
|
77
77
|
## 权限与数据边界
|
|
78
78
|
|
|
79
79
|
- **文件系统:** 创建数据库父目录并写入本地 SQLite;新数据库目录使用 `0700`、数据库使用 `0600`。现有数据库若为符号链接、硬链接、非当前用户所有或对 group/other 开放,会拒绝启动。数据库启用 WAL、`synchronous=FULL`、迁移版本检查和 5 秒 busy timeout。
|
|
80
|
-
- **网络:**
|
|
81
|
-
- **子进程:**
|
|
82
|
-
- **凭据:**
|
|
80
|
+
- **网络:** 默认 Evaluation 插件无网络访问;显式调用 experimental benchmark SDK 时,模型 delegate 或独立 holdout authority 是否联网由可信 Host/operator 的部署决定,SDK 本身只使用进程内调用或 stdio transport。
|
|
81
|
+
- **子进程:** 默认 Evaluation 插件不创建子进程;显式调用 `./benchmark/holdout` 的 `openHoldoutProvider()` 才会启动 operator 指定的 authority executable。
|
|
82
|
+
- **凭据:** 默认 Evaluation 插件不读取凭据;holdout provider 只收到 operator 显式给出的精确 environment,不继承 Host 环境,delegate 所需凭据仍由可信 Host 自行装配和撤销。
|
|
83
83
|
- **浏览器:** 无。
|
|
84
84
|
- **install script:** 无;仅有标准 TypeScript build/prepack 和仓库发布保护脚本。
|
|
85
85
|
|
|
@@ -92,6 +92,112 @@ scope、situation、producer/evaluator id、证据引用和指标属于本地评
|
|
|
92
92
|
- scope 路径做绝对路径的语法规范化,不主动访问文件系统解析符号链接。
|
|
93
93
|
- 当前面向单机个人助理,SQLite 依赖仓库兼容基线规定的 Node.js 版本。
|
|
94
94
|
|
|
95
|
+
## 配对评测 Host SDK(实验性)
|
|
96
|
+
|
|
97
|
+
`@dsh-enhanced/assistant-evaluation/benchmark` 提供 `parseBenchmarkPlan`、`benchmarkPlanDigest`、`benchmarkSchedule`、`BenchmarkStore`、`runBenchmark` 和 `benchmarkReport`。这是可独立导入的 Host 集成入口,不自动启用,也不注册模型工具。它使用单独的 benchmark SQLite 文件,不改变日常任务评价数据库。
|
|
98
|
+
|
|
99
|
+
计划冻结数据集版本与摘要、逐题输入/验收摘要、模型、prompt、skills、tools、policy 和 runtime 的 SHA-256 配置/内容摘要。模型摘要应覆盖实际 provider、具体模型版本、采样参数和计价配置,不能只记录别名。能力比较要求模型相同;模型比较只能改变模型配置。消融必须与唯一候选保持版本一致,并只关闭记忆、规划、复核或成长中的一项。变体共享完全相同的预算与逐题 seed;执行顺序轮换。seed 记录不意味着模型服务一定支持确定性采样,adapter 必须如实记录提供商能力。
|
|
100
|
+
|
|
101
|
+
可信 Host 先构造 `BenchmarkPlan`,创建 `new BenchmarkStore(absolutePrivateDatabasePath)`,再调用 `await runBenchmark(store, plan, executor, signal)`,用 `benchmarkReport(plan, store.results(plan.id))` 获取报告,最后关闭 store。`executor.execute(request)` 必须实际创建隔离且等价的任务环境,按冻结配置调用原生 AgentLoop、限制计量预算、收集 Host 计量、等待资源停止并使用独立 verifier 判定结果。请求只含计划中的任务身份及摘要,输入和答案由可信数据集提供方分别交给执行器与验收器;不得让模型自行填写 observation。控制器对版本/摘要漂移、缺失预算计量、超预算与未停止的执行返回 unknown。
|
|
102
|
+
|
|
103
|
+
每个 cell 在执行前持久保存运行意图。相同计划可继续尚未开始的 cell,但完成的 cell 不再执行;同 ID 不接受修改后的计划或结果。启动时遇到运行中意图会拒绝,不能因为进程重启就重放可能有副作用的任务。管理员可以用 `store.interrupt(planId, timestamp)` 将遗留意图记为 interrupted/unknown;这不会停止实际进程,也不会恢复该计划的后续执行。先确认旧执行已停止,再创建新的完整比较计划,不能选择性重跑失败题来提高分数。
|
|
104
|
+
|
|
105
|
+
超时和取消发出 AbortSignal 后有界返回,迟到结果不能改写账本;unknown 传输或生命周期状态阻止后续 cell。该机制不能强制终止同 UID 任意代码、子进程或远端调用,实际撤销/隔离仍由 Host adapter 和独立 broker 实现。数据库文件要求当前用户拥有、私有权限、非符号链接/硬链接;这不是对同 UID 对手的隔离。
|
|
106
|
+
|
|
107
|
+
报告保留所有计划 cell 作为已验证成功率分母,unknown 和缺测单列,缺失费用/token/返工/人工介入量不会补成零。提供配对胜负、差值和均值/中位数/P95;区间按任务聚类 bootstrap,同题重复不当作独立任务。任一比较臂有缺测或 unknown 就不报告收益差值与区间,不能把基线的未知结果当作失败来制造增益;单臂有 unknown 也不报告其成功率区间。少于两个任务不提供区间。小样本或同质任务仍不足以证明泛化收益,报告始终 `promotionAuthorized: false`。
|
|
108
|
+
|
|
109
|
+
**当前完成范围:** 冻结协议、持久账本、有界协调器、统计计算、原生 AgentLoop 执行器及 `dsh-benchmark` 命令。默认 `research-v1` 保留 8 道公开研究/注入开发题;`memory-v2` 增加 6 道公开记忆开发题。`strategy-v1` 增加 4 道公开合成 shell 开发题:整数汇总、接触区间合并、按频次/字典序词频和依赖拓扑排序。它们是开发语料,不是 holdout,也没有真实模型收益证据。
|
|
110
|
+
|
|
111
|
+
### 独立留出 provider Host SDK(实验性)
|
|
112
|
+
|
|
113
|
+
`@dsh-enhanced/assistant-evaluation/benchmark/holdout` 是 inert Host SDK:导入它不会挂载 Cordis 插件、启动 provider、创建数据库或注册模型工具。普通 `runIndependentHoldout()` 也只在可信 Host 显式调用时运行。若调用发生在插件生命周期内,应使用 `runIndependentHoldoutInContext(ctx, options)`;它把 benchmark journal、evidence store、authority/delegate session 和取消控制注册为当前 Cordis Fiber 的一个 owned effect。Fiber 卸载会停止新准入、abort 运行、等待有界清理并关闭两个 store;自然完成也会关闭资源并移除该 effect。`providerTimeoutMs` 为任意 Host provider 的启动、每个请求和关闭设置上限;在 abort 或期限后才解析的 provider 会只做一次有界 `close()`,不会再请求 manifest 或写入 store。它没有把 `ctx.isolate()` 当作进程、凭据或数据集隔离。
|
|
114
|
+
|
|
115
|
+
operator 必须同时固定 `{ id, version, digest }` 数据集 pin 和 Ed25519 authority public key。authority 按顺序返回四类严格 envelope:
|
|
116
|
+
|
|
117
|
+
- `manifest` 签名公开 dataset/case identity 及 input/acceptance commitments;
|
|
118
|
+
- `input` 签名并绑定 exact manifest、plan、cell、input digest 和本次临时输入 bytes;
|
|
119
|
+
- `verdict` 签名并绑定 exact input/acceptance/output digest、plan、cell 与判定;
|
|
120
|
+
- `finish` 签名完整 cell 数和按计划顺序排列的 signed-verdict envelope digest 链。
|
|
121
|
+
|
|
122
|
+
Host 不接受 authority 自报的资源用量:delegate 必须返回与冻结 variant 一致的版本、Host 侧 metrics、execution evidence digest 和 quiescence,runner 再核对每 cell 预算;墙钟 latency 由 runner 计量。这里的 Host 计量仍是可信同进程 adapter 的自证,不是独立外部 meter。`acceptanceDigest` 只承诺验收材料没有被事后替换,不加密低熵答案,也不能证明该材料在候选生成前已经冻结。
|
|
123
|
+
|
|
124
|
+
私有 input 只在当前 delegate 调用期间存在,raw output 只用于本次 verdict 请求;SDK 在结算后尽力清零持有的 byte arrays。Benchmark SQLite、content-addressed evidence 与报告只保存 digests、Host metrics、执行证据引用以及 signed manifest/verdict/finish,不保存 signed input envelope、raw input 或 raw output。这个约束只覆盖 Host SDK 的持久化面,不能证明外部 authority、delegate、模型服务或同 UID 进程没有另行复制数据。
|
|
125
|
+
|
|
126
|
+
恢复语义保持保守:完整 journal 加不可变 completion marker 可在不启动 authority/delegate 的情况下重验;已有 unknown 直接保持终态。completed prefix、遗留 running intent、缺失/漂移的 finish marker 都在 provider startup 前失败关闭,v1 不选择性续跑。若最后一个 cell 已发布 finish marker、但进程在 SQLite cell 终态提交前崩溃,重启仍看到 running intent;operator 必须先确认旧执行停止,再调用 `BenchmarkStore.interrupt()` 将其记为 unknown,不能用 marker 自动升级为成功。
|
|
127
|
+
|
|
128
|
+
内置 provider transport 使用单请求 NDJSON、固定 `cwd: /`、完全显式的 child environment、长度/时间上限和 TERM→KILL 有界关闭。POSIX 关闭同时等待 leader/stdio 关闭和当前数值进程组消失,Windows 只管理直接 child 与其 stdio;继承管道仍未关闭时会有界报 `termination-unconfirmed`。普通 PID/PGID 信号不能约束脱离进程组的后代,也不能排除数值复用导致误发信号,因而不是无竞态进程身份或强 OS containment 证明。executable 只做绝对 canonical pathname 校验,没有 fd/inode 绑定,因此 pathname 在校验与 `spawn` 之间被替换不在当前保证内。现有真实子进程回归使用同 UID synthetic authority fixture;它验证 transport、签名链、无 raw I/O 持久化、零-spawn 重验和 fail-closed 恢复,不证明独立账号/机器/UID 部署、历史冻结透明度或真实隐藏性。目前也没有真实模型、真实独立 holdout 或 live benefit 证据,WP04 继续为实现中。
|
|
129
|
+
|
|
130
|
+
### 原生策略比较的 Host 接口
|
|
131
|
+
|
|
132
|
+
`strategy-v1` 已由 `dsh-benchmark corpus|doctor|plan|run|report` 支持。它冻结 `direct` 和 `adaptive-strategy` 两分支、策略执行限额、已安装能力来源与任务/验收摘要;每个 cell 在私有 state 目录保存可重读的详细观察和摘要。模型只能收到公开 objective、提示和示例;独立 verifier 的向量不进入 prompt。
|
|
133
|
+
|
|
134
|
+
`parseStrategyBenchmarkPlan` 固定两个分支 `direct` / `adaptive-strategy`、共同预算、模型调用上限、单次输出和原生 Goal 轮数。共同 persona/工具/Policy/runtime 与策略 guide/tool/Policy/runtime 分别声明摘要,并派生两分支版本;任意额外版本差异会被拒绝。parser 验证声明一致,实际 executor 另外核对挂载的能力。`strategyBenchmarkJournalPlan` 将完整策略契约绑定到既有 journal,修改限额不能复用旧计划 ID。调用 `installStrategyBenchmarkRequestMeter` 会先核对 exact cell/计划/模型,再安装外层限额;executor 将同一 `maxGoalRounds` 交给真实 Goal。
|
|
135
|
+
|
|
136
|
+
计量器必须在首次入站前安装在专用 Context,覆盖前台、父 Goal 和 child 的全部 `llm/stream` 与工具执行。仅接受可信输入上界和供应商输出上限;estimate/observed 配置显式拒绝。模型流在 dispatch 前共享原子预留,结束后根据完整 usage 结算;取消、缺 usage、异常和提前关闭保留预留,`assertComplete()` 拒绝未结清、空测量或尚在运行的工具。费用为 null 时只约束 token,不声称金额硬限。快照是进程内观察;executor 将它与计划/cell 绑定、持久保存,并与独立验收和资源停止证据核对。取得下游迭代器的 `dispatched` 不是实际付费 HTTP 证明。
|
|
137
|
+
|
|
138
|
+
`createBenchmarkStrategyOwnerRuntime` 要求全新 Context、两个现存且独立的 canonical 私有目录:候选 workspace 和其外部 stateRoot。它在 stateRoot 独占创建 runtimeRoot,写入 JSONL Session、Delivery/Policy SQLite 及 spool;显式保存空会话头,使原生 Delivery 创建后可以真实恢复。它只配对本地合成 owner、注册本地回复捕获通道;该身份只用于评估,不是对任何真实用户/外部服务的授权,不发现或修改用户 profile,也不发外部通知。只暴露指定工具 allow-list,额外 Policy 规则由可信 Host 提供。模型 adapter 则拥有操作者声明的网络/凭据权限,由调用者安装和销毁。
|
|
139
|
+
|
|
140
|
+
executor 在实际每个父请求上比较完整 persona、每个实际工具 schema,并通过 `assistantPolicy.inspectHostConfiguration()` 比较完整 Policy 配置;同时记录已解析安装源码的身份摘要。该检查发现计划与运行时的普通漂移,但不构成对同进程恶意 Host 代码或远端 provider 实现的形式证明。全流程 deadline 覆盖装配、调用、验证和关闭;不能证明停止、usage 或证据完整性时结果保持 `unknown`,不会重放 cell 或启动后续 cell。
|
|
141
|
+
|
|
142
|
+
### 开发集命令
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
dsh-benchmark doctor
|
|
146
|
+
dsh-benchmark corpus
|
|
147
|
+
dsh-benchmark doctor --suite memory-v2
|
|
148
|
+
dsh-benchmark corpus --suite memory-v2
|
|
149
|
+
dsh-benchmark corpus --suite strategy-v1
|
|
150
|
+
dsh-benchmark doctor --suite strategy-v1 --config ./docs/examples/strategy-benchmark.config.json
|
|
151
|
+
dsh-benchmark plan --config ./docs/examples/strategy-benchmark.config.json --output ./private/strategy-plan.json
|
|
152
|
+
dsh-benchmark run --config ./docs/examples/strategy-benchmark.config.json --adapter /absolute/trusted-adapter.mjs --database ./private/strategy.sqlite --output ./private/strategy-report.json
|
|
153
|
+
dsh-benchmark report --database ./private/strategy.sqlite --plan strategy-public-development --config ./docs/examples/strategy-benchmark.config.json --output ./private/strategy-report-copy.json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`doctor --suite strategy-v1 --config` 会在不安装依赖、不拉取镜像的前提下检查 Host packages,并执行有界的离线 Docker/image probe;ready 不证明模型凭据或 provider 可用。`plan` 不调用模型。`run` 只装载操作者指定的 trusted adapter,费用和 token 限额来自配置;adapter 入口的 SHA-256 必须同时匹配 `adapterDigest` 与 `tokenCounterDigest`。策略 suite 固定 `inputLimitMode: "upper-bound"` 和 `outputLimitMode: "provider"`;现有 Codex 订阅 adapter 的 estimate/observed 模式不兼容策略运行。`report` 重新打开已保存的 cell 观察和摘要,并从 `--config` 重建当前 plan 进行比对;它不重新激活已关闭 runtime 或重放模型调用。
|
|
157
|
+
|
|
158
|
+
配置示例、计量协议和限制见 [评测实施文档](../../docs/benchmark-implementation.md)。预算为每 cell 上限;金额单位为美元的百万分之一,计价为每百万 tokens 对应的该单位。`costUsdMicros: null` 明确选择仅 token 预算,模型输入/输出价格也可同时为 null;报告中的未知费用不会填成零。声明金额上限时必须提供非缓存输入、cache read、cache write、输出四类费率,且必须使用输入上界和提供商输出上限;输入预留采用三类输入的最高费率。DSH 的非缓存 input 与两类 cache 相加为实际输入,reasoning 已包含在 output 中,不重复计费。实际使用了缺价的 cache 时,费用保持 null。可信适配器须关闭隐藏自动重试。
|
|
159
|
+
|
|
160
|
+
非策略原生 suite 仍可使用 estimate/observed 的 token-only 配置;这不扩展到 strategy-v1。策略运行创建私有 workspace/state 根并持久化证据,日常 profile 不会安装、启用或加载这些可选 Host peers。
|
|
161
|
+
|
|
162
|
+
命令使用网络/凭据的权限由可信模型适配器决定;自身读取配置和模块,写独立私有 SQLite 与独占新建的 JSON 报告,创建并清理临时工作目录,不安装提供商、不修改日常 profile。报告不包含模型原始答案,判定绑定答案哈希与开发集验收摘要。`split: holdout` 只声明用途,同 UID 文件或公开仓库中的题目/答案不属于安全隐藏留出。
|
|
163
|
+
|
|
95
164
|
## 兼容性
|
|
96
165
|
|
|
166
|
+
Goals 的独立 Verifier v2 回执使用 `goal-step` 任务身份,按 `goal:<goal-id>:definition:<version>` 归因;同一 ref 的前台或 Automation 任务不会与之合并。schema 10 迁移保留既有投影、证据与视图。原有 owner 反馈修订入口仍只支持前台和 Automation,目标步骤成功也不自动宣告整个长期目标完成。
|
|
167
|
+
|
|
97
168
|
对齐仓库的 [DSH / Cordis 兼容性基线](../../docs/compatibility.md)。Host 提供 Cordis、Agent 和 ToolRuntime;插件自身携带 Schemastery。
|
|
169
|
+
|
|
170
|
+
Host 可通过 `getTrustedAutomationRunLearningProjection({ scope, runId })` 精确读取一个 run 的 ready canonical learning projection,无需扫描受 limit 限制的原始 audit 列表。不存在或 objective-conflict 时不返回证明;返回值沿用同一 canonical projection、revision、digest 和 scope watermark。调用方须检查 disposition 和执行/目标状态,并在产生依赖该证据的写入时使用 `withTrustedLearningWriterFence`。
|
|
171
|
+
|
|
172
|
+
`withTrustedCanonicalLearningWriterFence` 为依赖 Evaluation canonical 状态本身的 Host 写入提供同样的 scope watermark、精确 task tuple 和同步写锁校验,但不要求投递给 Evolution 的 outbox 已完成。`withTrustedLearningWriterFence` 继续为 Evolution 依赖方保留 projection-pending gate;两者都不会代替或伪造 outbox 投递。
|
|
173
|
+
|
|
174
|
+
`getTrustedGoalOutcomeLearningProjection({ scope, assessmentId })` 是 whole-goal 消费者的 Host-only 精确读取入口。它只接受 `canonicalEvaluationHostScope()` 产生的 token,并且只查询相同 canonical workspace/preset 下 subject 恰为 `goal-outcome/<assessmentId>` 的当前 projection;缺失或跨 scope 返回 `undefined`。返回的 `version`、`digest`、`disposition` 与 scope watermark 是 Evaluation 当前状态,不把原始 immutable Verifier receipt 永久视为事实。该入口只证明 assessment 的 canonical 状态;owner、Goal、Session、run 和 outcome profile 的关联仍须由调用方从 Goals 的当前 Host snapshot 独立证明。
|
|
175
|
+
|
|
176
|
+
`withTrustedCanonicalTaskWriterFence({ scope, scopeWatermark, evidence }, callback)` 是对应的同步 commit fence。它逐项核对 exact subject kind/ref、revision、digest 和 `upsert | retract` disposition,并在 Evaluation writer lock 持有期间执行同步 callback;scope 内任何任务推进 watermark,或该 assessment 被纠正、撤回、替换,都会在 callback 运行前返回 `evidence-changed` / `watermark-changed`。它不等待可选 Evolution projection outbox,因此可让下游在 exact retract 下原子移除旧观察;异步 callback 会失败并回滚。原 `withTrustedCanonicalLearningWriterFence` 继续只接受可推广的 `upsert`,其契约不被放宽。
|
|
177
|
+
|
|
178
|
+
### Owner outcome revisions
|
|
179
|
+
|
|
180
|
+
Delivery's authenticated capability can explicitly correct or withdraw one exact delivered result. Schema 8 retains immutable raw outcomes, linked owner revisions, provider command receipts (including rejected CAS attempts), and a single canonical task projection. Owner lanes include principal record id and version. Only explicitly linked predecessors are superseded; independent contradictory owner evidence stays quarantined. Withdrawal is an authoritative `unknown` tombstone, so earlier terminal/evaluator success cannot reappear. The revision, digest, audit and projection outbox commit in the same SQLite transaction.
|
|
181
|
+
|
|
182
|
+
Legacy schema 7 owner rows are adopted lazily through the exact Host delivery capability and stable initial idempotency key. Adoption verifies the run and Outbox references without rewriting raw history. Host consumers receive revision notifications and must also revalidate durable proof on startup / dispatch; a failed listener cannot prevent other consumers or the projection outbox from progressing.
|
|
183
|
+
|
|
184
|
+
整体目标的独立 v3 回执使用 `goal-outcome/<assessmentId>` subject,与同 ref 的步骤、前台和 Automation 分离,仍按完整目标定义归因。schema 11 在事务内迁移旧 task projections 并保留历史。Delivery v2 producer 可携带 current Goals process-local capability,把 exact whole-goal Verifier receipt 惰性采纳为 owner revision 1;Evaluation 不信任 Delivery metadata,而会通过当前 Goals provider 重建 proof,并从当前 Verifier `inspectAcceptedTask()` 独立核对 owner/scope、Goal definition、Session/native Goal、assessment、run、profile、contract、receipt 及 digest。provider generation、capability 或任一绑定变化时 fail closed。
|
|
185
|
+
|
|
186
|
+
同一 `goal-outcome/<assessmentId>` 随后使用既有 owner CAS 协议:`correct` 必须匹配当前 version 与 previous status,`withdraw` 写入 canonical `unknown` retract tombstone,重复命令幂等,乱序或同版本冲突保留拒绝审计而不覆盖 current projection。baseline adoption 在一个事务中把 exact immutable Verifier outcome 认领为 revision 1;如果 Evaluation 在原 receipt 产生时离线且恢复前 receipt 已过期,则只在当前 Goals opaque proof、当前 Verifier 原始 service identity/generation 以及 exact contract/receipt/execution 全部重验后,同构补写原 `assistant-verifier:<receiptId>` outcome、projection、outbox、watermark 与 revision 1,不续期、改写或伪造 receipt。后续每次 correction/retract 的新 owner revision、task projection、scope watermark 和 projection outbox 在一个 Evaluation SQLite writer transaction 中提交。因此 Skills 的 exact canonical monitor 会看到 v2 correction/retract,而不会把原始 immutable receipt 永久当作 achieved。历史回执可以在有效期后接受 owner 标注,但每次 issue/inspect/append 都必须由当前 Goals/Verifier 重验其不可变身份;这不是放宽发送前 freshness。
|
|
187
|
+
|
|
188
|
+
仓库回归使用本地 Delivery/Goals/Verifier/Evaluation fixture 验证上述 Host 协议;没有连接真实 Lark、真实模型或生产 deployment cohort,不能写成真实渠道验收或长期收益。
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
`memory-v1` 保留首轮公开试验的原始题目与判定,可按原计划复现。`memory-v2` 是单独版本,明确当前资料 ID、Memory provenance URI 与 `claim:<key>` 的引用约定;改进题目说明后必须建立新计划,不会重写 v1 的失败结果。
|
|
192
|
+
|
|
193
|
+
策略 Host 接口新增 `createStrategyGoalRuntime`、`strategyGoalTaskDigests` 和 `StrategyEvidenceStore`。单 cell 真实装配原生 Goal/driver/subagents、Goals、Delivery、Isolation 与 Verifier;模型通过真实工具创建目标并导出隔离产物,独立验证向后续轮次提供反馈。运行结束后读取当前 owner 路由授权的持久目标快照,等待资源清理成功,再保存内容寻址的私有证据;证据包含每轮 step/outcome 的独立回执、真实 triggerRunId、策略子会话和外层计量,读取时重验 plan/cell/digest。清理超时保留 unknown,不能据此重放或启动下一 cell。
|
|
194
|
+
|
|
195
|
+
此接口运行本机 Docker 和离线任意候选 shell:输入复制入容器,验证向量只供独立 runner,Host 持久状态保存在候选工作区之外。调用方必须提供受信任 adapter factory、已有私有目录、固定本机镜像及明确限额;不查找或修改用户 profile,不发送真实渠道消息。`execute`/`close` 清理有等待上限,但不合作资源可能仍未停止。adapter factory 与初始装配仍由调用方的整体期限控制,不能把本接口计量窗口视为完整比较墙钟期限。目录权限不隔离同 UID 的可信 Host 代码。
|
|
196
|
+
|
|
197
|
+
策略 executor 会核对实际挂载工具、完整 persona、完整 Policy 配置、运行时来源和 adapter;这些观察连同全流程故障证据写入 journal 外的私有证据目录。普通 Evaluation bundle 不自动激活上述可选 Host peers,且尚无真实模型收益结论。
|
|
198
|
+
|
|
199
|
+
### DeepSeek strategy adapter
|
|
200
|
+
|
|
201
|
+
The optional `./benchmark/deepseek` export supplies the trusted `createNativeAdapter` entry for strategy-v1. Explicitly install the matching `assistant-deepseek-budget` Host peer and provide the `DEEPSEEK_API_KEY` credential reference in the current credentials service or process environment. The factory registers no services or profile configuration; disposal shuts down its adapter. It uses the existing fixed HTTPS production transport and sends public task context and tool messages to that provider. No subprocess, credential file scan, model-generated adapter or automatic retry is added.
|
|
202
|
+
|
|
203
|
+
The input reserve is the production contract's conservative 2,097,152-token upper bound per request; prices remain unknown. Use the [DeepSeek example and instructions](../../docs/goal-strategy-evaluation.md#deepseek-生产模型入口), rather than the small generic fixture budget. Source commitments include the selected DeepSeek and credentials packages. Runtime readiness, online model access and measured strategy benefit remain separate evidence.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const controller = new AbortController()
|
|
3
|
+
const abort = () => controller.abort()
|
|
4
|
+
process.once('SIGINT', abort)
|
|
5
|
+
process.once('SIGTERM', abort)
|
|
6
|
+
try {
|
|
7
|
+
const [major, minor] = process.versions.node.split('.').map(Number)
|
|
8
|
+
if (major < 22 || (major === 22 && minor < 19) || major === 23) throw new Error('unsupported-node-version')
|
|
9
|
+
const { benchmarkCli } = await import('../lib/benchmark/cli.js')
|
|
10
|
+
process.exitCode = await benchmarkCli(process.argv.slice(2), { stdout: text => process.stdout.write(text) }, controller.signal)
|
|
11
|
+
} catch (error) {
|
|
12
|
+
// Host adapter exceptions can contain API keys, request bodies or credential paths.
|
|
13
|
+
// Do not print third-party error messages or stacks through the operator CLI.
|
|
14
|
+
const { BenchmarkError } = await import('../lib/benchmark/schema.js').catch(() => ({ BenchmarkError: class {} }))
|
|
15
|
+
const safe = error instanceof BenchmarkError ? error.message : 'benchmark command failed; Node.js ^22.19 or >=24 is required; check runtime dependencies, file paths and trusted adapter configuration'
|
|
16
|
+
process.stderr.write(`dsh-benchmark: ${safe}\n`)
|
|
17
|
+
process.exitCode = 1
|
|
18
|
+
} finally {
|
|
19
|
+
process.removeListener('SIGINT', abort)
|
|
20
|
+
process.removeListener('SIGTERM', abort)
|
|
21
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface BenchmarkCliOutput {
|
|
2
|
+
stdout(text: string): void;
|
|
3
|
+
}
|
|
4
|
+
/** Returns an exit status; errors are intentionally reduced to non-sensitive diagnostics by the bin. */
|
|
5
|
+
export declare function benchmarkCli(argv: readonly string[], io: BenchmarkCliOutput, signal?: AbortSignal): Promise<number>;
|
|
6
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/benchmark/cli.ts"],"names":[],"mappings":"AAmHA,MAAM,WAAW,kBAAkB;IAAG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAElE,wGAAwG;AACxG,wBAAsB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA6IzH"}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
10
|
+
import { constants } from 'node:fs';
|
|
11
|
+
import { lstat, mkdir, open, writeFile } from 'node:fs/promises';
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
import { dirname, isAbsolute, resolve } from 'node:path';
|
|
14
|
+
import { pathToFileURL } from 'node:url';
|
|
15
|
+
import { developmentCorpus, developmentDataset } from './corpus.js';
|
|
16
|
+
import { memoryDevelopmentCorpus, memoryDevelopmentDataset, memoryDevelopmentCorpusV2, memoryDevelopmentDatasetV2 } from './memory-corpus.js';
|
|
17
|
+
import { benchmarkReport } from './report.js';
|
|
18
|
+
import { benchmarkPlanDigest, benchmarkSchedule, BenchmarkError } from './schema.js';
|
|
19
|
+
import { BenchmarkStore } from './store.js';
|
|
20
|
+
import { runBenchmark } from './runner.js';
|
|
21
|
+
const runtimePackages = ['@deepseek-ai/cordis', '@deepseek-ai/dsh-agent', '@deepseek-ai/dsh-agent-loop',
|
|
22
|
+
'@deepseek-ai/dsh-llm', '@deepseek-ai/dsh-session', '@deepseek-ai/dsh-session-projection', '@deepseek-ai/dsh-system-prompt', '@deepseek-ai/dsh-tools'];
|
|
23
|
+
const help = `dsh-benchmark: public development benchmarks through the native DSH AgentLoop
|
|
24
|
+
corpus [--suite research-v1|memory-v1|memory-v2|strategy-v1]
|
|
25
|
+
doctor [--suite research-v1|memory-v1|memory-v2|strategy-v1] [--config FILE]
|
|
26
|
+
plan --config FILE [--output FILE]
|
|
27
|
+
run --config FILE --adapter ABSOLUTE_MODULE --database FILE [--output FILE]
|
|
28
|
+
report --database FILE --plan ID [--config FILE] [--output FILE]
|
|
29
|
+
|
|
30
|
+
plan never invokes a model. run invokes the explicitly supplied trusted Host adapter.
|
|
31
|
+
The adapter module must export createNativeAdapter and match both configured SHA-256 digests.
|
|
32
|
+
Outputs are created exclusively (existing files are never overwritten).
|
|
33
|
+
No hidden holdout, credentials, or model-provider installation is created by these commands.
|
|
34
|
+
`;
|
|
35
|
+
function options(args, allowed, required) {
|
|
36
|
+
const result = new Map();
|
|
37
|
+
for (let index = 0; index < args.length; index += 2) {
|
|
38
|
+
const key = args[index];
|
|
39
|
+
const value = args[index + 1];
|
|
40
|
+
if (!allowed.includes(key) || result.has(key) || value === undefined || value.startsWith('--') || value.trim() === '')
|
|
41
|
+
throw new BenchmarkError('invalid or duplicate benchmark argument');
|
|
42
|
+
result.set(key, value);
|
|
43
|
+
}
|
|
44
|
+
if (required.some(key => !result.has(key)))
|
|
45
|
+
throw new BenchmarkError('missing required benchmark argument; use --help');
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
async function boundedFile(path, limit, allowHardlinks = false) {
|
|
49
|
+
const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
50
|
+
try {
|
|
51
|
+
const before = await handle.stat();
|
|
52
|
+
if (!before.isFile() || (!allowHardlinks && before.nlink !== 1) || before.size > limit)
|
|
53
|
+
throw new BenchmarkError('benchmark input must be a bounded regular file');
|
|
54
|
+
const bytes = Buffer.alloc(limit + 1);
|
|
55
|
+
let total = 0;
|
|
56
|
+
while (total < bytes.length) {
|
|
57
|
+
const { bytesRead } = await handle.read(bytes, total, bytes.length - total, total);
|
|
58
|
+
if (bytesRead === 0)
|
|
59
|
+
break;
|
|
60
|
+
total += bytesRead;
|
|
61
|
+
}
|
|
62
|
+
const after = await handle.stat();
|
|
63
|
+
if (total > limit || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs)
|
|
64
|
+
throw new BenchmarkError('benchmark input changed while being read');
|
|
65
|
+
const data = bytes.subarray(0, total);
|
|
66
|
+
return { text: data.toString('utf8'), digest: createHash('sha256').update(data).digest('hex') };
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await handle.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function nativeModule() {
|
|
73
|
+
try {
|
|
74
|
+
return await import('./native.js');
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error && typeof error === 'object' && 'code' in error && error.code === 'ERR_MODULE_NOT_FOUND') {
|
|
78
|
+
throw new BenchmarkError('native DSH runtime dependencies are missing; run dsh-benchmark doctor and install the reported host packages');
|
|
79
|
+
}
|
|
80
|
+
throw new BenchmarkError('native benchmark runtime could not be loaded');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function config(path) {
|
|
84
|
+
const file = await boundedFile(resolve(path), 131_072);
|
|
85
|
+
try {
|
|
86
|
+
return JSON.parse(file.text);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new BenchmarkError('benchmark config must be valid JSON');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Loads only an operator-selected Host module, not code produced by a benchmark candidate. */
|
|
93
|
+
async function adapter(path, input) {
|
|
94
|
+
if (!isAbsolute(path))
|
|
95
|
+
throw new BenchmarkError('adapter module path must be absolute');
|
|
96
|
+
const captured = await boundedFile(path, 1_048_576, true);
|
|
97
|
+
if (captured.digest !== input.model.adapterDigest || captured.digest !== input.model.tokenCounterDigest)
|
|
98
|
+
throw new BenchmarkError('adapter module does not match frozen adapter/token-counter digests');
|
|
99
|
+
// Trusted installed adapters may be pnpm hardlinks. Config/output files still require one link.
|
|
100
|
+
// Digest and post-load check detect ordinary replacement; same-UID filesystem attacks and
|
|
101
|
+
// transitive module imports are outside this trusted Host extension boundary.
|
|
102
|
+
const imported = await import(__rewriteRelativeImportExtension(`${pathToFileURL(path).href}?benchmark=${captured.digest}`));
|
|
103
|
+
if ((await boundedFile(path, 1_048_576, true)).digest !== captured.digest)
|
|
104
|
+
throw new BenchmarkError('adapter module changed during import');
|
|
105
|
+
if (!imported || typeof imported !== 'object' || !('createNativeAdapter' in imported) || typeof imported.createNativeAdapter !== 'function')
|
|
106
|
+
throw new BenchmarkError('adapter module must export createNativeAdapter');
|
|
107
|
+
return imported.createNativeAdapter;
|
|
108
|
+
}
|
|
109
|
+
const strategyRuntimePackages = [...runtimePackages, '@deepseek-ai/dsh-goal', '@deepseek-ai/dsh-tool-goal', '@deepseek-ai/dsh-goal-round-driver',
|
|
110
|
+
'@deepseek-ai/dsh-subagent', '@deepseek-ai/dsh-session-persistence', '@deepseek-ai/dsh-session-persistence-jsonl', '@dsh-enhanced/assistant-delivery',
|
|
111
|
+
'@dsh-enhanced/assistant-policy', '@dsh-enhanced/assistant-goals', '@dsh-enhanced/assistant-isolation', '@dsh-enhanced/assistant-verifier'];
|
|
112
|
+
async function strategyModules() {
|
|
113
|
+
try {
|
|
114
|
+
return await Promise.all([import('./strategy-config.js'), import('./strategy-corpus.js'), import('./strategy-executor.js'), import('./strategy-plan.js')]);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
throw new BenchmarkError('strategy benchmark runtime dependencies are missing; run dsh-benchmark doctor and install the reported host packages');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function strategyConfig(value) {
|
|
121
|
+
const [module] = await strategyModules();
|
|
122
|
+
return module.parseStrategyBenchmarkConfig(value);
|
|
123
|
+
}
|
|
124
|
+
function isStrategyConfig(value) {
|
|
125
|
+
return value !== null && typeof value === 'object' && value.suite === 'strategy-v1';
|
|
126
|
+
}
|
|
127
|
+
async function ensureNewOutput(path) {
|
|
128
|
+
if (path === undefined)
|
|
129
|
+
return;
|
|
130
|
+
try {
|
|
131
|
+
await lstat(resolve(path));
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT')
|
|
135
|
+
return;
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
throw new BenchmarkError('output path already exists; choose a new output file');
|
|
139
|
+
}
|
|
140
|
+
/** Returns an exit status; errors are intentionally reduced to non-sensitive diagnostics by the bin. */
|
|
141
|
+
export async function benchmarkCli(argv, io, signal) {
|
|
142
|
+
const command = argv[0];
|
|
143
|
+
if (command === undefined || command === '--help' || command === 'help') {
|
|
144
|
+
io.stdout(help);
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
147
|
+
let result;
|
|
148
|
+
let output;
|
|
149
|
+
let exitCode = 0;
|
|
150
|
+
if (command === 'corpus') {
|
|
151
|
+
const args = options(argv.slice(1), ['--suite'], []);
|
|
152
|
+
const suite = args.get('--suite') ?? 'research-v1';
|
|
153
|
+
if (suite === 'strategy-v1') {
|
|
154
|
+
const [, corpus] = await strategyModules();
|
|
155
|
+
result = { dataset: corpus.strategyDevelopmentDataset, tasks: corpus.strategyDevelopmentCorpus.map(task => ({ id: task.id, domain: task.domain, objective: task.objective })) };
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
if (!['research-v1', 'memory-v1', 'memory-v2'].includes(suite))
|
|
159
|
+
throw new BenchmarkError('invalid native suite');
|
|
160
|
+
result = { dataset: suite === 'memory-v2' ? memoryDevelopmentDatasetV2 : suite === 'memory-v1' ? memoryDevelopmentDataset : developmentDataset, tasks: (suite === 'memory-v2' ? memoryDevelopmentCorpusV2 : suite === 'memory-v1' ? memoryDevelopmentCorpus : developmentCorpus).map(task => ({ id: task.id, domain: task.domain, objective: task.objective })) };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (command === 'doctor') {
|
|
164
|
+
const args = options(argv.slice(1), ['--suite', '--config'], []);
|
|
165
|
+
const suite = args.get('--suite') ?? 'research-v1';
|
|
166
|
+
const require = createRequire(import.meta.url);
|
|
167
|
+
if (suite === 'strategy-v1') {
|
|
168
|
+
const configPath = args.get('--config');
|
|
169
|
+
const configured = configPath === undefined ? undefined : await config(configPath);
|
|
170
|
+
const provider = configured?.model?.provider;
|
|
171
|
+
const selectedPackages = [...strategyRuntimePackages, ...(provider === 'deepseek-goal-metered' ? ['@dsh-enhanced/assistant-deepseek-budget', '@deepseek-ai/dsh-credentials'] : [])];
|
|
172
|
+
const packages = selectedPackages.map(name => {
|
|
173
|
+
try {
|
|
174
|
+
require.resolve(name);
|
|
175
|
+
return { name, available: true };
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return { name, available: false };
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (configPath === undefined) {
|
|
182
|
+
result = { ready: false, packages, isolation: { ready: false }, next: 'Provide --config to probe the immutable local image and Docker runtime. Dependencies alone do not establish strategy readiness.' };
|
|
183
|
+
exitCode = 2;
|
|
184
|
+
}
|
|
185
|
+
else if (!packages.every(entry => entry.available)) {
|
|
186
|
+
result = { ready: false, packages, isolation: { ready: false }, next: 'Install the unavailable strategy runtime packages before probing Docker or the configured image.' };
|
|
187
|
+
exitCode = 2;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const input = await strategyConfig(configured);
|
|
191
|
+
let isolationReady = false;
|
|
192
|
+
try {
|
|
193
|
+
const isolationPackage = '@dsh-enhanced/assistant-isolation';
|
|
194
|
+
const isolation = await import(__rewriteRelativeImportExtension(isolationPackage));
|
|
195
|
+
await isolation.probeIsolationRuntime(input.image, input.dockerPath);
|
|
196
|
+
isolationReady = true;
|
|
197
|
+
}
|
|
198
|
+
catch { /* Keep diagnostics non-sensitive and do not attempt installation or image pulls. */ }
|
|
199
|
+
result = { ready: packages.every(entry => entry.available) && isolationReady, packages, isolation: { ready: isolationReady },
|
|
200
|
+
next: 'A ready runtime does not prove model access. Configure a trusted adapter, token counter and frozen strategy limits.' };
|
|
201
|
+
exitCode = result.ready ? 0 : 2;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
if (!['research-v1', 'memory-v1', 'memory-v2'].includes(suite))
|
|
206
|
+
throw new BenchmarkError('invalid native suite');
|
|
207
|
+
const names = [...runtimePackages, ...(suite !== 'research-v1' ? ['@dsh-enhanced/personal-memory', '@dsh-enhanced/assistant-policy'] : [])];
|
|
208
|
+
const packages = names.map(name => {
|
|
209
|
+
try {
|
|
210
|
+
require.resolve(name);
|
|
211
|
+
return { name, available: true };
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return { name, available: false };
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
result = { ready: packages.every(entry => entry.available), packages, next: 'Configure a trusted adapter, model token counter and per-cell budget. A ready runtime does not prove model access.' };
|
|
218
|
+
exitCode = packages.every(entry => entry.available) ? 0 : 2;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (command === 'plan' || command === 'run') {
|
|
222
|
+
const fields = options(argv.slice(1), ['--config', '--adapter', '--database', '--output'], command === 'run' ? ['--config', '--adapter', '--database'] : ['--config']);
|
|
223
|
+
if (command === 'plan' && (fields.has('--adapter') || fields.has('--database')))
|
|
224
|
+
throw new BenchmarkError('plan accepts only --config and --output');
|
|
225
|
+
output = fields.get('--output');
|
|
226
|
+
await ensureNewOutput(output);
|
|
227
|
+
const raw = await config(fields.get('--config'));
|
|
228
|
+
if (isStrategyConfig(raw)) {
|
|
229
|
+
const input = await strategyConfig(raw);
|
|
230
|
+
const [, corpus, executor, strategyPlan] = await strategyModules();
|
|
231
|
+
const plan = executor.createStrategyBenchmarkPlan(input);
|
|
232
|
+
const journal = strategyPlan.strategyBenchmarkJournalPlan(plan);
|
|
233
|
+
const cells = benchmarkSchedule(journal);
|
|
234
|
+
if (command === 'plan') {
|
|
235
|
+
result = { plan, journalPlan: journal, planDigest: benchmarkPlanDigest(journal), plannedCells: cells.length,
|
|
236
|
+
maximumCostUsdMicros: journal.budget.costUsdMicros === null ? null : (BigInt(cells.length) * BigInt(journal.budget.costUsdMicros)).toString(),
|
|
237
|
+
inputLimitMode: 'upper-bound', outputLimitMode: 'provider', maximumInputTokens: cells.length * journal.budget.inputTokens,
|
|
238
|
+
maximumOutputTokens: cells.length * journal.budget.outputTokens, observedInputTokenLimit: cells.length * journal.budget.inputTokens,
|
|
239
|
+
observedOutputTokenLimit: cells.length * journal.budget.outputTokens };
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
const store = new BenchmarkStore(resolve(fields.get('--database')));
|
|
243
|
+
try {
|
|
244
|
+
store.create(journal);
|
|
245
|
+
const factory = await adapter(fields.get('--adapter'), input);
|
|
246
|
+
const tasks = Object.fromEntries(input.cases.map(caseId => [caseId, corpus.strategyDevelopmentTask(caseId)]));
|
|
247
|
+
const strategyExecutor = executor.createStrategyBenchmarkExecutor({ plan, tasks, persona: input.persona, model: input.model, factory,
|
|
248
|
+
workspaceDirectory: input.workspaceDirectory, stateDirectory: input.stateDirectory, image: input.image, dockerPath: input.dockerPath,
|
|
249
|
+
stepMaxDurationMs: input.stepMaxDurationMs, ...(input.stopTimeoutMs === undefined ? {} : { stopTimeoutMs: input.stopTimeoutMs }) });
|
|
250
|
+
const results = await runBenchmark(store, journal, strategyExecutor, signal);
|
|
251
|
+
executor.verifyStrategyBenchmarkResults(plan, results, input.stateDirectory, input.workspaceDirectory);
|
|
252
|
+
const report = benchmarkReport(journal, store.results(journal.id));
|
|
253
|
+
result = report;
|
|
254
|
+
exitCode = report.complete && report.variants.every(variant => variant.unknown === 0) ? 0 : 2;
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
store.close();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
const input = raw;
|
|
263
|
+
const native = await nativeModule();
|
|
264
|
+
const plan = native.nativeBenchmarkPlan(input);
|
|
265
|
+
if (command === 'plan') {
|
|
266
|
+
result = { plan, planDigest: benchmarkPlanDigest(plan), plannedCells: benchmarkSchedule(plan).length,
|
|
267
|
+
maximumCostUsdMicros: plan.budget.costUsdMicros === null ? null : (BigInt(benchmarkSchedule(plan).length) * BigInt(plan.budget.costUsdMicros)).toString(),
|
|
268
|
+
inputLimitMode: input.model.inputLimitMode ?? 'upper-bound', outputLimitMode: input.model.outputLimitMode ?? 'provider',
|
|
269
|
+
maximumInputTokens: input.model.inputLimitMode === 'estimate' ? null : benchmarkSchedule(plan).length * plan.budget.inputTokens,
|
|
270
|
+
maximumOutputTokens: input.model.outputLimitMode === 'observed' ? null : benchmarkSchedule(plan).length * plan.budget.outputTokens,
|
|
271
|
+
observedInputTokenLimit: benchmarkSchedule(plan).length * plan.budget.inputTokens,
|
|
272
|
+
observedOutputTokenLimit: benchmarkSchedule(plan).length * plan.budget.outputTokens };
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
const store = new BenchmarkStore(resolve(fields.get('--database')));
|
|
276
|
+
try {
|
|
277
|
+
// Validate/freeze the plan before loading the Host adapter (which may initialize credentials).
|
|
278
|
+
store.create(plan);
|
|
279
|
+
const factory = await adapter(fields.get('--adapter'), input);
|
|
280
|
+
await runBenchmark(store, plan, native.createNativeBenchmarkExecutor(input, factory), signal);
|
|
281
|
+
const report = benchmarkReport(plan, store.results(plan.id));
|
|
282
|
+
result = report;
|
|
283
|
+
exitCode = report.complete && report.variants.every(variant => variant.unknown === 0) ? 0 : 2;
|
|
284
|
+
}
|
|
285
|
+
finally {
|
|
286
|
+
store.close();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else if (command === 'report') {
|
|
292
|
+
const fields = options(argv.slice(1), ['--database', '--plan', '--config', '--output'], ['--database', '--plan']);
|
|
293
|
+
output = fields.get('--output');
|
|
294
|
+
await ensureNewOutput(output);
|
|
295
|
+
// Reporting must not silently create an empty database when the path is wrong.
|
|
296
|
+
const database = resolve(fields.get('--database'));
|
|
297
|
+
if (!(await lstat(database)).isFile())
|
|
298
|
+
throw new BenchmarkError('report requires an existing regular database');
|
|
299
|
+
const store = new BenchmarkStore(database);
|
|
300
|
+
try {
|
|
301
|
+
const plan = store.plan(fields.get('--plan'));
|
|
302
|
+
if (plan.dataset.id === 'dsh-strategy-development') {
|
|
303
|
+
const configPath = fields.get('--config');
|
|
304
|
+
if (configPath === undefined)
|
|
305
|
+
throw new BenchmarkError('strategy report requires --config to reconstruct and verify evidence');
|
|
306
|
+
const input = await strategyConfig(await config(configPath));
|
|
307
|
+
const [, , executor, strategyPlan] = await strategyModules();
|
|
308
|
+
const strategy = executor.createStrategyBenchmarkPlan(input);
|
|
309
|
+
const journal = strategyPlan.strategyBenchmarkJournalPlan(strategy);
|
|
310
|
+
if (benchmarkPlanDigest(journal) !== benchmarkPlanDigest(plan))
|
|
311
|
+
throw new BenchmarkError('strategy report config does not match the stored plan');
|
|
312
|
+
executor.verifyStrategyBenchmarkResults(strategy, store.results(plan.id), input.stateDirectory, input.workspaceDirectory);
|
|
313
|
+
}
|
|
314
|
+
result = benchmarkReport(plan, store.results(plan.id));
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
store.close();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else
|
|
321
|
+
throw new BenchmarkError('unknown benchmark command; use --help');
|
|
322
|
+
const text = `${JSON.stringify(result, null, 2)}\n`;
|
|
323
|
+
if (output === undefined)
|
|
324
|
+
io.stdout(text);
|
|
325
|
+
else {
|
|
326
|
+
const path = resolve(output);
|
|
327
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
328
|
+
await writeFile(path, text, { flag: 'wx', mode: 0o600 });
|
|
329
|
+
}
|
|
330
|
+
return exitCode;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/benchmark/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BenchmarkCase, BenchmarkPlan, BenchmarkVerdict } from './types.js';
|
|
2
|
+
/** JSON values accepted by the public development-task judge. */
|
|
3
|
+
export type BenchmarkJson = null | boolean | number | string | readonly BenchmarkJson[] | {
|
|
4
|
+
readonly [key: string]: BenchmarkJson;
|
|
5
|
+
};
|
|
6
|
+
export interface DevelopmentTask {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly domain: 'research' | 'injection';
|
|
9
|
+
readonly objective: string;
|
|
10
|
+
readonly sources: readonly {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly text: string;
|
|
13
|
+
}[];
|
|
14
|
+
readonly acceptance: {
|
|
15
|
+
readonly answer: BenchmarkJson;
|
|
16
|
+
readonly citations: readonly string[];
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare const developmentCorpus: readonly DevelopmentTask[];
|
|
20
|
+
export declare const developmentDataset: BenchmarkPlan['dataset'];
|
|
21
|
+
/** Returns immutable copies so callers cannot mutate the corpus-derived benchmark manifest. */
|
|
22
|
+
export declare function developmentCases(): readonly BenchmarkCase[];
|
|
23
|
+
export declare function developmentPrompt(caseId: string): string;
|
|
24
|
+
export declare function judgeDevelopmentResponse(caseId: string, output: string): {
|
|
25
|
+
verdict: BenchmarkVerdict;
|
|
26
|
+
evidenceDigest: string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/benchmark/corpus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEhF,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,aAAa,EAAE,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAA;AAEnI,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3E,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;CAC/F;AAwGD,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAA4G,CAAA;AAMpK,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,SAAS,CAEtD,CAAA;AAEF,+FAA+F;AAC/F,wBAAgB,gBAAgB,IAAI,SAAS,aAAa,EAAE,CAI3D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUxD;AAkBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAiB9H"}
|