agent-hitch 0.2.10 → 0.2.11
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 +12 -11
- package/README.zh-CN.md +10 -9
- package/dist/src/cli/commands/capabilities.js +1 -0
- package/dist/src/cli/commands/capabilities.js.map +1 -1
- package/dist/src/cli/commands/verifier.js +54 -3
- package/dist/src/cli/commands/verifier.js.map +1 -1
- package/dist/src/cli/output.js +2 -0
- package/dist/src/cli/output.js.map +1 -1
- package/dist/src/evals/index.js +1 -0
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/verifier-artifacts.js +98 -153
- package/dist/src/evals/verifier-artifacts.js.map +1 -1
- package/dist/src/evals/verifier-diagnostic-repair.js +276 -0
- package/dist/src/evals/verifier-diagnostic-repair.js.map +1 -0
- package/dist/src/runs/index.js +3 -2
- package/dist/src/runs/index.js.map +1 -1
- package/dist/src/runs/verifier-diagnostic-storage.js +237 -0
- package/dist/src/runs/verifier-diagnostic-storage.js.map +1 -0
- package/dist/src/runs/verifier-diagnostic-supplement.js +228 -0
- package/dist/src/runs/verifier-diagnostic-supplement.js.map +1 -0
- package/dist/src/runs/verifier-evidence.js +119 -118
- package/dist/src/runs/verifier-evidence.js.map +1 -1
- package/dist/src/trajectories/providers/deepseek.js +52 -38
- package/dist/src/trajectories/providers/deepseek.js.map +1 -1
- package/dist/src/trajectories/store.js +17 -0
- package/dist/src/trajectories/store.js.map +1 -1
- package/docs/schemas/verifier-diagnostic-page.schema.json +97 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,19 +31,19 @@ compare models, or fix the model to compare harnesses.
|
|
|
31
31
|
- [x] **Run and recover.** Share resource budgets, run trials in parallel, and preserve completed work through supported recovery paths.
|
|
32
32
|
- [x] **Collect the evidence.** Keep scores, trajectories, verifier evidence, and provenance in one result bundle.
|
|
33
33
|
|
|
34
|
-
> **Status:** pre-alpha.
|
|
35
|
-
>
|
|
34
|
+
> **Status:** pre-alpha. Setup and support limits are covered in the
|
|
35
|
+
> [User Guide](https://rsigear.xyz/docs/hitch/).
|
|
36
36
|
|
|
37
37
|
## Quick Start
|
|
38
38
|
|
|
39
39
|
You need **Node.js 22+**, Git, and model access. Local runs do not require Docker.
|
|
40
40
|
|
|
41
|
-
**1. Install Hitch and
|
|
42
|
-
|
|
41
|
+
**1. Install Hitch and Codex, then authenticate.** Complete the Codex login
|
|
42
|
+
flow before continuing; Hitch will use this installed executable.
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
npm install --global agent-hitch@
|
|
46
|
-
|
|
45
|
+
npm install --global agent-hitch @openai/codex
|
|
46
|
+
codex login
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
**2. Run from a clean Git repository.** `git status --short` must show no changes
|
|
@@ -53,7 +53,7 @@ for worktree mode. To include uncommitted files, choose
|
|
|
53
53
|
```bash
|
|
54
54
|
git status --short
|
|
55
55
|
hitch run \
|
|
56
|
-
--harness codex@
|
|
56
|
+
--harness codex@installed \
|
|
57
57
|
--workspace-mode worktree \
|
|
58
58
|
--prompt "Summarize this repository and its test commands. Do not modify files." \
|
|
59
59
|
--timeout 5m \
|
|
@@ -136,7 +136,7 @@ and resource admission; it is not a speed or cost comparison against native Harb
|
|
|
136
136
|
|
|
137
137
|
## Local and remote model inference
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
Import a complete Hugging Face safetensors checkpoint once, then use the same
|
|
140
140
|
run and eval commands with a `local/<name>` model. Hitch chooses a pinned
|
|
141
141
|
CPU or CUDA preview runtime, starts the daemon and SGLang service when needed, and
|
|
142
142
|
records the immutable model/runtime/inference identities automatically.
|
|
@@ -211,9 +211,10 @@ for benchmark, resource, and portability contracts.
|
|
|
211
211
|
| OpenCode | ✓ | ✓ | — |
|
|
212
212
|
| DeepSeek Harness | ✓ | ✓ | ✓ |
|
|
213
213
|
|
|
214
|
-
Use `codex@installed` for a local executable, `codex@version:
|
|
215
|
-
package, or `codex@commit:COMMIT` with a real upstream commit.
|
|
216
|
-
|
|
214
|
+
Use `codex@installed` for a local executable, `codex@version:VERSION` for an exact
|
|
215
|
+
package, or `codex@commit:COMMIT` with a real upstream commit. Replace `VERSION`
|
|
216
|
+
with the exact published version you want to run. Evaluations require a portable
|
|
217
|
+
version or commit reference. See
|
|
217
218
|
[versions and workspaces](docs/guide/en/versions-and-workspaces.md) for reference
|
|
218
219
|
selection, artifact preparation, and workspace modes.
|
|
219
220
|
|
package/README.zh-CN.md
CHANGED
|
@@ -29,19 +29,19 @@
|
|
|
29
29
|
- [x] **并行与恢复。** 共享资源预算、并行执行 Trial,在支持的恢复路径中保留已完成工作。
|
|
30
30
|
- [x] **收齐结果证据。** 分数、轨迹、Verifier 证据与来源信息归入同一份结果包。
|
|
31
31
|
|
|
32
|
-
> **状态:** pre-alpha
|
|
32
|
+
> **状态:** pre-alpha。配置与支持范围见
|
|
33
33
|
> [User Guide](https://rsigear.xyz/docs/hitch/zh/)。
|
|
34
34
|
|
|
35
35
|
## Quick Start:快速开始
|
|
36
36
|
|
|
37
37
|
需要 **Node.js 22+**、Git 和模型访问权限。本地运行不需要 Docker。
|
|
38
38
|
|
|
39
|
-
**1. 安装 Hitch
|
|
40
|
-
|
|
39
|
+
**1. 安装 Hitch 和 Codex,并完成认证。** 继续前先完成 Codex 登录流程;
|
|
40
|
+
Hitch 会使用这个已安装的程序。
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
npm install --global agent-hitch@
|
|
44
|
-
|
|
43
|
+
npm install --global agent-hitch @openai/codex
|
|
44
|
+
codex login
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
**2. 从干净的 Git 仓库运行。** Worktree 模式要求 `git status --short` 没有
|
|
@@ -51,7 +51,7 @@ npx --yes @openai/codex@0.92.0 login
|
|
|
51
51
|
```bash
|
|
52
52
|
git status --short
|
|
53
53
|
hitch run \
|
|
54
|
-
--harness codex@
|
|
54
|
+
--harness codex@installed \
|
|
55
55
|
--workspace-mode worktree \
|
|
56
56
|
--prompt "总结这个仓库及其测试命令,不修改文件。" \
|
|
57
57
|
--timeout 5m \
|
|
@@ -131,7 +131,7 @@ Hitch 采用 **Harbor 的任务定义格式**,接入已有 Benchmark 和自定
|
|
|
131
131
|
|
|
132
132
|
## 本地与远程模型推理
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
完整的 Hugging Face safetensors checkpoint 只需导入一次,此后继续使用原有
|
|
135
135
|
run/eval 命令,并把模型写成 `local/<name>`。Hitch 会自动选择固定摘要的 CPU 或
|
|
136
136
|
CUDA preview runtime、按需启动 daemon 和 SGLang 服务,并记录不可变的模型、runtime
|
|
137
137
|
和 inference 身份。
|
|
@@ -202,8 +202,9 @@ hitch eval doctor
|
|
|
202
202
|
| OpenCode | ✓ | ✓ | — |
|
|
203
203
|
| DeepSeek Harness | ✓ | ✓ | ✓ |
|
|
204
204
|
|
|
205
|
-
使用 `codex@installed` 运行本机程序,使用 `codex@version:
|
|
206
|
-
软件包版本,或把真实上游提交填入 `codex@commit:COMMIT
|
|
205
|
+
使用 `codex@installed` 运行本机程序,使用 `codex@version:VERSION` 选择确定的
|
|
206
|
+
软件包版本,或把真实上游提交填入 `codex@commit:COMMIT`。将 `VERSION` 替换为
|
|
207
|
+
要运行的精确已发布版本。评测要求可移植的
|
|
207
208
|
版本或提交引用。引用选择、制品准备和工作区模式见
|
|
208
209
|
[固定版本与隔离工作区](docs/guide/zh-CN/versions-and-workspaces.md)。
|
|
209
210
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../../src/cli/commands/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,cAAc;QAC9B,mBAAmB,EAAE,GAAG;QACxB,sBAAsB,EAAE,GAAG;QAC3B,iBAAiB,EAAE,GAAG;QACtB,yBAAyB,EAAE,GAAG;QAC9B,mBAAmB,EAAE,GAAG;QACxB,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,CAAC,eAAe,CAAC;QACrC,uBAAuB,EAAE,SAAS;QAClC,kBAAkB,EAAE,GAAG;QACvB,gBAAgB,EAAE,GAAG;QACrB,kBAAkB,EAAE,GAAG;QACvB,oBAAoB,EAAE,GAAG;QACzB,8BAA8B,EAAE,GAAG;QACnC,2BAA2B,EAAE,GAAG;QAChC,4BAA4B,EAAE,GAAG;KACzB,CAAC;IACX,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9I,CAAC"}
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../../src/cli/commands/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,cAAc;QAC9B,mBAAmB,EAAE,GAAG;QACxB,sBAAsB,EAAE,GAAG;QAC3B,iBAAiB,EAAE,GAAG;QACtB,yBAAyB,EAAE,GAAG;QAC9B,yBAAyB,EAAE,GAAG;QAC9B,mBAAmB,EAAE,GAAG;QACxB,uBAAuB,EAAE,GAAG;QAC5B,kBAAkB,EAAE,CAAC,eAAe,CAAC;QACrC,uBAAuB,EAAE,SAAS;QAClC,kBAAkB,EAAE,GAAG;QACvB,gBAAgB,EAAE,GAAG;QACrB,kBAAkB,EAAE,GAAG;QACvB,oBAAoB,EAAE,GAAG;QACzB,8BAA8B,EAAE,GAAG;QACnC,2BAA2B,EAAE,GAAG;QAChC,4BAA4B,EAAE,GAAG;KACzB,CAAC;IACX,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9I,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { invalidInput } from "../../foundation/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { repairVerifierDiagnostics } from "../../evals/index.js";
|
|
3
|
+
import { loadVerifierDiagnosticPage, loadVerifierEvidence, MAX_VERIFIER_DIAGNOSTIC_PAGE_BYTES } from "../../runs/index.js";
|
|
4
|
+
import { assertNoArgs, takeFlag, takeOption } from "../arguments.js";
|
|
5
|
+
const ARTIFACT_NAMES = new Set(["ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt"]);
|
|
4
6
|
export async function verifierCommand(args, root) {
|
|
5
7
|
const action = args.shift();
|
|
8
|
+
if (action === "artifact")
|
|
9
|
+
return verifierArtifactCommand(args, root);
|
|
10
|
+
if (action === "repair")
|
|
11
|
+
return verifierRepairCommand(args, root);
|
|
6
12
|
if (action !== "inspect")
|
|
7
|
-
throw invalidInput("verifier requires inspect");
|
|
13
|
+
throw invalidInput("verifier requires inspect, artifact, or repair");
|
|
8
14
|
const json = takeFlag(args, "--json");
|
|
9
15
|
const runId = args.shift();
|
|
10
16
|
if (!runId || !/^run_[a-f0-9]{32}$/.test(runId)) {
|
|
@@ -33,4 +39,49 @@ export async function verifierCommand(args, root) {
|
|
|
33
39
|
for (const issue of evidence.verifier.issues ?? [])
|
|
34
40
|
process.stdout.write(` issue: ${issue}\n`);
|
|
35
41
|
}
|
|
42
|
+
async function verifierRepairCommand(args, root) {
|
|
43
|
+
const json = takeFlag(args, "--json");
|
|
44
|
+
const source = takeOption(args, "--source");
|
|
45
|
+
const runId = args.shift();
|
|
46
|
+
if (!runId || !/^run_[a-f0-9]{32}$/.test(runId)) {
|
|
47
|
+
throw invalidInput("verifier repair requires a valid run ID");
|
|
48
|
+
}
|
|
49
|
+
assertNoArgs(args);
|
|
50
|
+
const result = await repairVerifierDiagnostics({ root, runId, ...(source === undefined ? {} : { source }) });
|
|
51
|
+
if (json)
|
|
52
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
53
|
+
else
|
|
54
|
+
process.stdout.write(`${runId}: verifier diagnostics ${result.status.replace("_", " ")}\n`);
|
|
55
|
+
}
|
|
56
|
+
async function verifierArtifactCommand(args, root) {
|
|
57
|
+
const json = takeFlag(args, "--json");
|
|
58
|
+
const offsetValue = takeOption(args, "--offset");
|
|
59
|
+
const limitValue = takeOption(args, "--limit");
|
|
60
|
+
const expectedSha256 = takeOption(args, "--sha256");
|
|
61
|
+
const runId = args.shift();
|
|
62
|
+
const name = args.shift();
|
|
63
|
+
if (!runId || !/^run_[a-f0-9]{32}$/.test(runId) || !name || !ARTIFACT_NAMES.has(name)) {
|
|
64
|
+
throw invalidInput("verifier artifact requires a valid run ID and artifact name");
|
|
65
|
+
}
|
|
66
|
+
const offset = offsetValue === undefined ? 0 : Number(offsetValue);
|
|
67
|
+
const maxBytes = limitValue === undefined ? MAX_VERIFIER_DIAGNOSTIC_PAGE_BYTES : Number(limitValue);
|
|
68
|
+
if (!Number.isSafeInteger(offset) || offset < 0)
|
|
69
|
+
throw invalidInput("--offset must be a non-negative integer");
|
|
70
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 4 || maxBytes > MAX_VERIFIER_DIAGNOSTIC_PAGE_BYTES) {
|
|
71
|
+
throw invalidInput(`--limit must be an integer from 4 to ${MAX_VERIFIER_DIAGNOSTIC_PAGE_BYTES}`);
|
|
72
|
+
}
|
|
73
|
+
if (expectedSha256 !== undefined && !/^sha256:[0-9a-f]{64}$/.test(expectedSha256)) {
|
|
74
|
+
throw invalidInput("--sha256 must be a SHA-256 digest");
|
|
75
|
+
}
|
|
76
|
+
assertNoArgs(args);
|
|
77
|
+
const page = await loadVerifierDiagnosticPage(root, runId, name, {
|
|
78
|
+
offset,
|
|
79
|
+
maxBytes,
|
|
80
|
+
...(expectedSha256 ? { expectedSha256: expectedSha256 } : {}),
|
|
81
|
+
});
|
|
82
|
+
if (json)
|
|
83
|
+
process.stdout.write(`${JSON.stringify(page, null, 2)}\n`);
|
|
84
|
+
else
|
|
85
|
+
process.stdout.write(page.page.text);
|
|
86
|
+
}
|
|
36
87
|
//# sourceMappingURL=verifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../src/cli/commands/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../src/cli/commands/verifier.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/output.js
CHANGED
|
@@ -130,6 +130,8 @@ Usage:
|
|
|
130
130
|
hitch images unpin <sha256:image-id>
|
|
131
131
|
hitch trajectory inspect <run-id> [--json]
|
|
132
132
|
hitch verifier inspect <run-id> [--json]
|
|
133
|
+
hitch verifier artifact <run-id> <name> [--offset <bytes>] [--limit <bytes>] [--sha256 <digest>] [--json]
|
|
134
|
+
hitch verifier repair <run-id> [--source <eval-relative-trial-dir>] [--json]
|
|
133
135
|
hitch trajectory project <run-id> [--profile analysis] [--max-bytes <bytes>] [--json]
|
|
134
136
|
hitch trajectory events <run-id> [--types <a,b>] [--seq-start <n>] [--seq-end <n>] [--field <path>] [--canonical-sha256 <digest>] [--limit <n>] [--cursor <opaque>] [--max-bytes <bytes>] [--json]
|
|
135
137
|
hitch training register --file <PATH|->
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/cli/output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,QAAkH;IAC9I,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IAC/E,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACjF,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA8O,EAAE,KAAa,EAAE,MAAc;IAClT,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,YAAY,KAAK,kBAAkB,WAAW,EAAE,CAAC,CAAC;gBACpG,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,WAAW,CAAC,CAAC;YACnF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA6B,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,KAAK,CAAC;YACjE,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3F,OAAO,MAAM,CAAC,MAAiC,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA8O,EAAE,MAAc,EAAE,MAAc;IACpT,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,aAAa,MAAM,kBAAkB,WAAW,EAAE,CAAC,CAAC;gBACtG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,WAAW,CAAC,CAAC;YACnF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA6B,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,KAAK,CAAC;YACjE,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3F,OAAO,MAAM,CAAC,MAAiC,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAkG,EAAE,MAAc,EAAE,OAAe;IAC9K,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,MAAM,WAAW,OAAO,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,MAAM,IAAK,MAAM,CAAC,KAA6B,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;YACnF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,MAAiC,CAAC;QAClD,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAwF,CAAC;QAC9G,IAAI,KAAK,EAAE,MAAM,KAAK,QAAQ,IAAI,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;YAChE,MAAM,IAAI,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,EAAE;gBACzG,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;gBACpF,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0HR,CAAC;AACF,CAAC"}
|
package/dist/src/evals/index.js
CHANGED
|
@@ -22,6 +22,7 @@ export { recoverLocalDockerEvalLeases } from "./recovery.js";
|
|
|
22
22
|
export { inspectEval, isControlPlaneEval, listEvals } from "./records.js";
|
|
23
23
|
export { importEvalTrialRun, importEvalTrialRuns, validateEvalTrialReferences } from "./trial-import.js";
|
|
24
24
|
export { captureVerifierDiagnostics, DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES, MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES, persistTrialVerifierDiagnostics, VERIFIER_ARTIFACT_NAMES, VERIFIER_DIAGNOSTICS_INDEX_REF } from "./verifier-artifacts.js";
|
|
25
|
+
export { repairVerifierDiagnostics } from "./verifier-diagnostic-repair.js";
|
|
25
26
|
export { captureVerifierScoreEvidence } from "./verifier-score-artifacts.js";
|
|
26
27
|
export { MAX_VERIFIER_FEEDBACK_BYTES, MAX_VERIFIER_PROCESS_BYTES } from "../domain/index.js";
|
|
27
28
|
export { createEvalProgress, evalTrialKey, mergeEvalProgressTrial, parseEvalTrialRef, readEvalProgress, replaceInvalidEvalProgressTrial, writeEvalProgress } from "./progress.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/evals/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/evals/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { realpath } from "node:fs/promises";
|
|
3
|
-
import { StringDecoder } from "node:string_decoder";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import { PROVIDER_ENVIRONMENT_NAMES, atomicWriteJSON, credentialValuesFromEnv, openContainedRegularFile, redactCredentialText, writePrivateFile } from "../foundation/index.js";
|
|
5
|
+
import { sanitizeVerifierJson, sanitizeVerifierText } from "../runs/index.js";
|
|
6
6
|
import { captureVerifierScoreEvidence } from "./verifier-score-artifacts.js";
|
|
7
|
-
export const DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
|
|
8
7
|
export const MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES = 16 * 1024 * 1024;
|
|
8
|
+
export const DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES = MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES;
|
|
9
9
|
export const VERIFIER_DIAGNOSTICS_INDEX_REF = "verifier/diagnostics.json";
|
|
10
10
|
export const VERIFIER_ARTIFACT_NAMES = [
|
|
11
11
|
"ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt",
|
|
12
12
|
];
|
|
13
|
-
const TRUNCATION_MARKER = Buffer.from("\n[... verifier artifact truncated ...]\n", "utf8");
|
|
14
|
-
const MAX_LOG_LINE_BYTES = 1024 * 1024;
|
|
15
13
|
export async function persistTrialVerifierDiagnostics(input) {
|
|
16
14
|
const env = input.env ?? process.env;
|
|
17
15
|
const credentialValues = credentialValuesFromEnv([...PROVIDER_ENVIRONMENT_NAMES, ...(input.passEnv ?? [])], env);
|
|
@@ -53,25 +51,43 @@ async function copyCandidateIneligibleDiagnostic(trialDirectory, runDirectory, s
|
|
|
53
51
|
return;
|
|
54
52
|
await atomicWriteJSON(path.join(runDirectory, "verifier", "candidate-ineligible.json"), value);
|
|
55
53
|
}
|
|
56
|
-
/** Persist
|
|
54
|
+
/** Persist complete redacted verifier artifacts up to an explicit hard cap. */
|
|
57
55
|
export async function captureVerifierDiagnostics(trialDirectory, runDirectory, options = {}) {
|
|
58
56
|
const maxArtifactBytes = options.maxArtifactBytes ?? DEFAULT_VERIFIER_DIAGNOSTIC_MAX_BYTES;
|
|
59
|
-
if (!Number.isSafeInteger(maxArtifactBytes) || maxArtifactBytes <=
|
|
57
|
+
if (!Number.isSafeInteger(maxArtifactBytes) || maxArtifactBytes <= 0
|
|
60
58
|
|| maxArtifactBytes > MAX_VERIFIER_DIAGNOSTIC_MAX_BYTES) {
|
|
61
59
|
throw new TypeError("verifier diagnostic artifact limit is invalid");
|
|
62
60
|
}
|
|
63
61
|
throwIfAborted(options.signal);
|
|
64
62
|
const root = await realpath(trialDirectory);
|
|
65
63
|
const artifacts = [];
|
|
64
|
+
const losses = [];
|
|
66
65
|
const redactions = new Map();
|
|
67
66
|
for (const name of VERIFIER_ARTIFACT_NAMES) {
|
|
68
67
|
throwIfAborted(options.signal);
|
|
69
68
|
const safe = await safeArtifact(root, name);
|
|
70
69
|
if (!safe)
|
|
71
70
|
continue;
|
|
71
|
+
const mediaType = name === "ctrf.json" ? "application/json" : "text/plain";
|
|
72
|
+
if (safe.size > maxArtifactBytes) {
|
|
73
|
+
try {
|
|
74
|
+
await safe.assertUnchanged();
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await safe.handle.close();
|
|
78
|
+
}
|
|
79
|
+
losses.push({
|
|
80
|
+
name,
|
|
81
|
+
media_type: mediaType,
|
|
82
|
+
source_bytes: safe.size,
|
|
83
|
+
loss_reason: "persistence_limit_exceeded",
|
|
84
|
+
persistence_limit_bytes: maxArtifactBytes,
|
|
85
|
+
});
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
72
88
|
let captured;
|
|
73
89
|
try {
|
|
74
|
-
captured = await
|
|
90
|
+
captured = await captureArtifact(safe.handle, safe.size, mediaType, options.credentialValues ?? [], options.signal);
|
|
75
91
|
await safe.assertUnchanged();
|
|
76
92
|
if (captured.sourceBytes !== safe.size)
|
|
77
93
|
throw new TypeError(`verifier artifact changed while being captured: ${name}`);
|
|
@@ -79,6 +95,17 @@ export async function captureVerifierDiagnostics(trialDirectory, runDirectory, o
|
|
|
79
95
|
finally {
|
|
80
96
|
await safe.handle.close();
|
|
81
97
|
}
|
|
98
|
+
if (captured.lossReason || !captured.stored || captured.stored.length > maxArtifactBytes) {
|
|
99
|
+
losses.push({
|
|
100
|
+
name,
|
|
101
|
+
media_type: mediaType,
|
|
102
|
+
source_bytes: captured.sourceBytes,
|
|
103
|
+
source_sha256: captured.sourceSha256,
|
|
104
|
+
loss_reason: captured.lossReason ?? "persistence_limit_exceeded",
|
|
105
|
+
persistence_limit_bytes: maxArtifactBytes,
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
82
109
|
mergeCounts(redactions, captured.redactions);
|
|
83
110
|
const ref = `verifier/${name}`;
|
|
84
111
|
const destination = path.join(runDirectory, ...ref.split("/"));
|
|
@@ -87,22 +114,24 @@ export async function captureVerifierDiagnostics(trialDirectory, runDirectory, o
|
|
|
87
114
|
artifacts.push({
|
|
88
115
|
name,
|
|
89
116
|
ref,
|
|
90
|
-
media_type:
|
|
117
|
+
media_type: mediaType,
|
|
91
118
|
source_bytes: captured.sourceBytes,
|
|
92
119
|
source_sha256: captured.sourceSha256,
|
|
93
120
|
bytes: captured.contentBytes,
|
|
94
121
|
sha256: captured.contentSha256,
|
|
95
122
|
stored_bytes: stored.length,
|
|
96
123
|
stored_sha256: sha256(stored),
|
|
97
|
-
truncated:
|
|
124
|
+
truncated: false,
|
|
98
125
|
});
|
|
99
126
|
}
|
|
100
|
-
if (artifacts.length === 0)
|
|
127
|
+
if (artifacts.length === 0 && losses.length === 0)
|
|
101
128
|
return null;
|
|
102
129
|
const index = {
|
|
103
|
-
schema_version: "
|
|
130
|
+
schema_version: "2",
|
|
104
131
|
kind: "verifier-diagnostics",
|
|
132
|
+
hard_cap_bytes: maxArtifactBytes,
|
|
105
133
|
artifacts,
|
|
134
|
+
losses,
|
|
106
135
|
redactions: canonicalCounts(redactions),
|
|
107
136
|
};
|
|
108
137
|
await atomicWriteJSON(path.join(runDirectory, ...VERIFIER_DIAGNOSTICS_INDEX_REF.split("/")), index);
|
|
@@ -118,157 +147,73 @@ async function safeArtifact(root, name, maximumBytes) {
|
|
|
118
147
|
throw new TypeError(`unsafe verifier artifact: ${name}`, { cause: error });
|
|
119
148
|
}
|
|
120
149
|
}
|
|
121
|
-
async function
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const redacted = redactCredentialText(value, credentialValues);
|
|
132
|
-
mergeCounts(redactions, redacted.redactions);
|
|
133
|
-
const bytes = Buffer.from(redacted.text, "utf8");
|
|
134
|
-
contentHash.update(bytes);
|
|
135
|
-
bounded.append(bytes);
|
|
136
|
-
};
|
|
137
|
-
const drain = () => {
|
|
138
|
-
for (;;) {
|
|
139
|
-
const newline = pending.indexOf("\n");
|
|
140
|
-
if (discarding) {
|
|
141
|
-
if (newline < 0) {
|
|
142
|
-
pending = "";
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
pending = pending.slice(newline + 1);
|
|
146
|
-
discarding = false;
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
if (newline >= 0) {
|
|
150
|
-
emit(pending.slice(0, newline + 1));
|
|
151
|
-
pending = pending.slice(newline + 1);
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
if (Buffer.byteLength(pending, "utf8") > MAX_LOG_LINE_BYTES) {
|
|
155
|
-
emit("[REDACTED OVERSIZED VERIFIER LOG LINE]\n");
|
|
156
|
-
increment(redactions, "oversized-verifier-log-line-v1");
|
|
157
|
-
bounded.markOmitted();
|
|
158
|
-
pending = "";
|
|
159
|
-
discarding = true;
|
|
160
|
-
}
|
|
161
|
-
return;
|
|
150
|
+
async function captureArtifact(handle, expectedBytes, mediaType, credentialValues, signal) {
|
|
151
|
+
throwIfAborted(signal);
|
|
152
|
+
const source = await readExactFile(handle, expectedBytes, signal);
|
|
153
|
+
throwIfAborted(signal);
|
|
154
|
+
let stored;
|
|
155
|
+
let redactions;
|
|
156
|
+
if (mediaType === "application/json") {
|
|
157
|
+
let parsed;
|
|
158
|
+
try {
|
|
159
|
+
parsed = JSON.parse(source.toString("utf8"));
|
|
162
160
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
161
|
+
catch {
|
|
162
|
+
return {
|
|
163
|
+
sourceSha256: sha256(source), sourceBytes: source.length,
|
|
164
|
+
contentSha256: sha256(Buffer.alloc(0)), contentBytes: 0,
|
|
165
|
+
lossReason: "invalid_json", redactions: new Map(),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (!isJsonValue(parsed)) {
|
|
169
|
+
return {
|
|
170
|
+
sourceSha256: sha256(source), sourceBytes: source.length,
|
|
171
|
+
contentSha256: sha256(Buffer.alloc(0)), contentBytes: 0,
|
|
172
|
+
lossReason: "invalid_json", redactions: new Map(),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const sanitized = sanitizeVerifierJson(parsed, credentialValues);
|
|
176
|
+
stored = Buffer.from(JSON.stringify(sanitized.value), "utf8");
|
|
177
|
+
redactions = sanitized.redactions;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const sanitized = sanitizeVerifierText(source.toString("utf8"), credentialValues);
|
|
181
|
+
stored = Buffer.from(sanitized.text, "utf8");
|
|
182
|
+
redactions = sanitized.redactions;
|
|
177
183
|
}
|
|
178
|
-
pending += decoder.end();
|
|
179
|
-
drain();
|
|
180
|
-
if (!discarding && pending)
|
|
181
|
-
emit(pending);
|
|
182
|
-
throwIfAborted(signal);
|
|
183
184
|
return {
|
|
184
|
-
sourceSha256:
|
|
185
|
-
sourceBytes,
|
|
186
|
-
contentSha256:
|
|
187
|
-
contentBytes:
|
|
188
|
-
stored
|
|
189
|
-
truncated: bounded.truncated,
|
|
185
|
+
sourceSha256: sha256(source),
|
|
186
|
+
sourceBytes: source.length,
|
|
187
|
+
contentSha256: sha256(stored),
|
|
188
|
+
contentBytes: stored.length,
|
|
189
|
+
stored,
|
|
190
190
|
redactions,
|
|
191
191
|
};
|
|
192
192
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
head = Buffer.alloc(0);
|
|
203
|
-
tail = Buffer.alloc(0);
|
|
204
|
-
constructor(limit) {
|
|
205
|
-
this.limit = limit;
|
|
206
|
-
this.payloadLimit = limit - TRUNCATION_MARKER.length;
|
|
207
|
-
this.headLimit = Math.floor(this.payloadLimit / 2);
|
|
208
|
-
this.tailLimit = this.payloadLimit - this.headLimit;
|
|
209
|
-
}
|
|
210
|
-
append(value) {
|
|
211
|
-
if (value.length === 0)
|
|
212
|
-
return;
|
|
213
|
-
this.totalBytes += value.length;
|
|
214
|
-
if (!this.clipped) {
|
|
215
|
-
this.complete.push(value);
|
|
216
|
-
const combined = Buffer.concat(this.complete);
|
|
217
|
-
if (combined.length <= this.limit)
|
|
218
|
-
return;
|
|
219
|
-
this.clipped = true;
|
|
220
|
-
this.complete = [];
|
|
221
|
-
this.head = combined.subarray(0, this.headLimit);
|
|
222
|
-
this.tail = combined.subarray(Math.max(0, combined.length - this.tailLimit));
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
this.tail = rollingTail(this.tail, value, this.tailLimit);
|
|
226
|
-
}
|
|
227
|
-
value() {
|
|
228
|
-
return this.clipped
|
|
229
|
-
? Buffer.concat([
|
|
230
|
-
validUtf8Prefix(this.head),
|
|
231
|
-
TRUNCATION_MARKER,
|
|
232
|
-
validUtf8Suffix(this.tail),
|
|
233
|
-
])
|
|
234
|
-
: Buffer.concat(this.complete);
|
|
235
|
-
}
|
|
236
|
-
markOmitted() {
|
|
237
|
-
this.omitted = true;
|
|
193
|
+
async function readExactFile(handle, expectedBytes, signal) {
|
|
194
|
+
const result = Buffer.allocUnsafe(expectedBytes);
|
|
195
|
+
let position = 0;
|
|
196
|
+
while (position < expectedBytes) {
|
|
197
|
+
throwIfAborted(signal);
|
|
198
|
+
const read = await handle.read(result, position, expectedBytes - position, position);
|
|
199
|
+
if (read.bytesRead === 0)
|
|
200
|
+
throw new TypeError("verifier artifact changed while being captured");
|
|
201
|
+
position += read.bytesRead;
|
|
238
202
|
}
|
|
239
|
-
|
|
240
|
-
|
|
203
|
+
const probe = Buffer.allocUnsafe(1);
|
|
204
|
+
if ((await handle.read(probe, 0, 1, expectedBytes)).bytesRead !== 0) {
|
|
205
|
+
throw new TypeError("verifier artifact changed while being captured");
|
|
241
206
|
}
|
|
207
|
+
return result;
|
|
242
208
|
}
|
|
243
|
-
function
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
let start = 0;
|
|
252
|
-
while (start < value.length && (value[start] & 0xc0) === 0x80)
|
|
253
|
-
start += 1;
|
|
254
|
-
return value.subarray(start);
|
|
255
|
-
}
|
|
256
|
-
function utf8SequenceLength(byte) {
|
|
257
|
-
if ((byte & 0x80) === 0)
|
|
258
|
-
return 1;
|
|
259
|
-
if ((byte & 0xe0) === 0xc0)
|
|
260
|
-
return 2;
|
|
261
|
-
if ((byte & 0xf0) === 0xe0)
|
|
262
|
-
return 3;
|
|
263
|
-
if ((byte & 0xf8) === 0xf0)
|
|
264
|
-
return 4;
|
|
265
|
-
return 1;
|
|
266
|
-
}
|
|
267
|
-
function rollingTail(current, next, limit) {
|
|
268
|
-
if (next.length >= limit)
|
|
269
|
-
return next.subarray(next.length - limit);
|
|
270
|
-
const keep = Math.max(0, limit - next.length);
|
|
271
|
-
return Buffer.concat([current.subarray(Math.max(0, current.length - keep)), next]);
|
|
209
|
+
function isJsonValue(value) {
|
|
210
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
211
|
+
return true;
|
|
212
|
+
if (typeof value === "number")
|
|
213
|
+
return Number.isFinite(value);
|
|
214
|
+
if (Array.isArray(value))
|
|
215
|
+
return value.every(isJsonValue);
|
|
216
|
+
return Boolean(value) && typeof value === "object" && Object.values(value).every(isJsonValue);
|
|
272
217
|
}
|
|
273
218
|
function canonicalCounts(counts) {
|
|
274
219
|
return [...counts.entries()]
|