dsh-eval-pack 0.1.0-alpha.6 → 0.1.0-alpha.8
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/CHANGELOG.md +17 -0
- package/README-es.md +8 -1
- package/README-hi.md +8 -1
- package/README-pt.md +8 -1
- package/README-zh.md +8 -2
- package/README.md +17 -2
- package/TROUBLESHOOTING.md +45 -0
- package/docs/assets/dsh-eval-pack-capability.png +0 -0
- package/docs/assets/dsh-eval-pack-demo.gif +0 -0
- package/docs/assets/dsh-eval-pack-hero.png +0 -0
- package/lib/core/harness.d.ts +15 -0
- package/lib/core/harness.js +28 -1
- package/lib/plugin/tools.js +9 -2
- package/package.json +3 -1
- package/screenshots.json +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.0-alpha.8] — 2026-11-01
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `eval.summary`: aggregate pass count, pass rate and failing task ids for a graded run, using the same grader as `eval.grade`.
|
|
8
|
+
- Canonical-JSON grading: object key order no longer changes the verdict; array order still matters.
|
|
9
|
+
|
|
10
|
+
Verified by `node --test test/*.test.mjs` (7/7).
|
|
11
|
+
|
|
12
|
+
## [0.1.0-alpha.7] — 2026-11-01
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Documentation: five-language fixture/acceptance links now resolve on npm; added specific related-checker/tool links.
|
|
17
|
+
- Marketplace metadata: taxonomy category, archetype, domains and status; docs page now shows the same.
|
|
18
|
+
- Added a real terminal hero (and GIF for the active docs set) plus `TROUBLESHOOTING.md`.
|
|
19
|
+
|
|
3
20
|
All notable changes to `dsh-eval-pack` are documented here. The format follows Keep a Changelog; this project uses alpha versions.
|
|
4
21
|
|
|
5
22
|
## [0.1.0-alpha.6] — 2026-11-01
|
package/README-es.md
CHANGED
|
@@ -33,6 +33,10 @@ dsh plugin --profile <profile> add dsh-eval-pack
|
|
|
33
33
|
|
|
34
34
|
*Flujo: entrada local → plugin → salida local. No requiere llamada a un modelo.*
|
|
35
35
|
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
*Ejecución local real; sin modelo ni red.*
|
|
39
|
+
|
|
36
40
|
## Instalación
|
|
37
41
|
|
|
38
42
|
Instalar y verificar:
|
|
@@ -84,7 +88,7 @@ dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
|
84
88
|
|
|
85
89
|
### Ejemplo respaldado por fixture
|
|
86
90
|
|
|
87
|
-
Entrada: [`ACCEPTANCE.csv`](ACCEPTANCE.csv)
|
|
91
|
+
Entrada: [`ACCEPTANCE.csv`](https://github.com/PerryLink/dsh-eval-pack/blob/main/ACCEPTANCE.csv)
|
|
88
92
|
|
|
89
93
|
Comando: `pnpm test`
|
|
90
94
|
|
|
@@ -134,6 +138,9 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
|
|
|
134
138
|
|
|
135
139
|
Paquetes hermanos e índices de familia: [dsh-policy-ledger](https://github.com/PerryLink/dsh-policy-ledger) · [dsh-pim-lint](https://github.com/PerryLink/dsh-pim-lint)
|
|
136
140
|
|
|
141
|
+
Herramientas relacionadas (tabla en inglés): [Related tools](README.md#related-tools).
|
|
142
|
+
|
|
143
|
+
- [Solución de problemas (inglés)](TROUBLESHOOTING.md)
|
|
137
144
|
- [Índice de dominio](https://perrylink.github.io/dsh-plugins/)
|
|
138
145
|
- [Familia de checkers](https://perrylink.github.io/zh/checkers/)
|
|
139
146
|
- [Familia principal](https://github.com/PerryLink/dsh-kit)
|
package/README-hi.md
CHANGED
|
@@ -33,6 +33,10 @@ dsh plugin --profile <profile> add dsh-eval-pack
|
|
|
33
33
|
|
|
34
34
|
*वर्कफ़्लो: स्थानीय इनपुट → प्लगइन → स्थानीय आउटपुट। मॉडल कॉल आवश्यक नहीं।*
|
|
35
35
|
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
*वास्तविक स्थानीय परीक्षण; कोई मॉडल या नेटवर्क कॉल नहीं।*
|
|
39
|
+
|
|
36
40
|
## इंस्टॉल
|
|
37
41
|
|
|
38
42
|
इंस्टॉल और सत्यापन:
|
|
@@ -84,7 +88,7 @@ dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
|
84
88
|
|
|
85
89
|
### fixture-आधारित उदाहरण
|
|
86
90
|
|
|
87
|
-
इनपुट: [`ACCEPTANCE.csv`](ACCEPTANCE.csv)
|
|
91
|
+
इनपुट: [`ACCEPTANCE.csv`](https://github.com/PerryLink/dsh-eval-pack/blob/main/ACCEPTANCE.csv)
|
|
88
92
|
|
|
89
93
|
कमांड: `pnpm test`
|
|
90
94
|
|
|
@@ -134,6 +138,9 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
|
|
|
134
138
|
|
|
135
139
|
सहोदर पैकेज और परिवार सूचकांक: [dsh-policy-ledger](https://github.com/PerryLink/dsh-policy-ledger) · [dsh-pim-lint](https://github.com/PerryLink/dsh-pim-lint)
|
|
136
140
|
|
|
141
|
+
संबंधित टूल (अंग्रेज़ी तालिका): [Related tools](README.md#related-tools).
|
|
142
|
+
|
|
143
|
+
- [समस्या निवारण (अंग्रेज़ी)](TROUBLESHOOTING.md)
|
|
137
144
|
- [डोमेन सूचकांक](https://perrylink.github.io/dsh-plugins/)
|
|
138
145
|
- [चेकर परिवार](https://perrylink.github.io/zh/checkers/)
|
|
139
146
|
- [मुख्य परिवार](https://github.com/PerryLink/dsh-kit)
|
package/README-pt.md
CHANGED
|
@@ -33,6 +33,10 @@ dsh plugin --profile <profile> add dsh-eval-pack
|
|
|
33
33
|
|
|
34
34
|
*Fluxo: entrada local → plugin → saída local. Não exige chamada a modelo.*
|
|
35
35
|
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
*Execução local real; sem modelo ou rede.*
|
|
39
|
+
|
|
36
40
|
## Instalação
|
|
37
41
|
|
|
38
42
|
Instalar e verificar:
|
|
@@ -84,7 +88,7 @@ dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
|
84
88
|
|
|
85
89
|
### Exemplo com fixture
|
|
86
90
|
|
|
87
|
-
Entrada: [`ACCEPTANCE.csv`](ACCEPTANCE.csv)
|
|
91
|
+
Entrada: [`ACCEPTANCE.csv`](https://github.com/PerryLink/dsh-eval-pack/blob/main/ACCEPTANCE.csv)
|
|
88
92
|
|
|
89
93
|
Comando: `pnpm test`
|
|
90
94
|
|
|
@@ -134,6 +138,9 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
|
|
|
134
138
|
|
|
135
139
|
Pacotes irmãos e índices da família: [dsh-policy-ledger](https://github.com/PerryLink/dsh-policy-ledger) · [dsh-pim-lint](https://github.com/PerryLink/dsh-pim-lint)
|
|
136
140
|
|
|
141
|
+
Ferramentas relacionadas (tabela em inglês): [Related tools](README.md#related-tools).
|
|
142
|
+
|
|
143
|
+
- [Solução de problemas (inglês)](TROUBLESHOOTING.md)
|
|
137
144
|
- [Índice de domínio](https://perrylink.github.io/dsh-plugins/)
|
|
138
145
|
- [Família de checkers](https://perrylink.github.io/zh/checkers/)
|
|
139
146
|
- [Família principal](https://github.com/PerryLink/dsh-kit)
|
package/README-zh.md
CHANGED
|
@@ -33,6 +33,10 @@ dsh plugin --profile <profile> add dsh-eval-pack
|
|
|
33
33
|
|
|
34
34
|
*工作流:本地输入 → 插件 → 本地输出;不需要调用模型。*
|
|
35
35
|
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
*本地真实测试运行;不调用模型或网络。*
|
|
39
|
+
|
|
36
40
|
## 安装
|
|
37
41
|
|
|
38
42
|
安装并验证:
|
|
@@ -84,7 +88,7 @@ dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
|
84
88
|
|
|
85
89
|
### fixture 支撑的示例
|
|
86
90
|
|
|
87
|
-
输入: [`ACCEPTANCE.csv`](ACCEPTANCE.csv)
|
|
91
|
+
输入: [`ACCEPTANCE.csv`](https://github.com/PerryLink/dsh-eval-pack/blob/main/ACCEPTANCE.csv)
|
|
88
92
|
|
|
89
93
|
命令: `pnpm test`
|
|
90
94
|
|
|
@@ -128,12 +132,14 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
|
|
|
128
132
|
- 本地运行;不联网、不调用模型、不上传。
|
|
129
133
|
- 只使用公开/合成 fixture;不含客户数据或客户证据。
|
|
130
134
|
- alpha/partial;not counted,不作 GA 或生产可用声明。
|
|
131
|
-
- 冻结包仍可安装;不再加新功能,只修真实故障。
|
|
132
135
|
|
|
133
136
|
## 相关项目
|
|
134
137
|
|
|
135
138
|
兄弟包与家族索引: [dsh-policy-ledger](https://github.com/PerryLink/dsh-policy-ledger) · [dsh-pim-lint](https://github.com/PerryLink/dsh-pim-lint)
|
|
136
139
|
|
|
140
|
+
相关工具(英文表): [Related tools](README.md#related-tools).
|
|
141
|
+
|
|
142
|
+
- [故障排查(英文)](TROUBLESHOOTING.md)
|
|
137
143
|
- [领域索引](https://perrylink.github.io/dsh-plugins/)
|
|
138
144
|
- [Checker 家族](https://perrylink.github.io/zh/checkers/)
|
|
139
145
|
- [主线家族](https://github.com/PerryLink/dsh-kit)
|
package/README.md
CHANGED
|
@@ -33,6 +33,10 @@ dsh plugin --profile <profile> add dsh-eval-pack
|
|
|
33
33
|
|
|
34
34
|
*Workflow: local input → plugin → local output. No model call is required.*
|
|
35
35
|
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
*Real local test run; no model or network call.*
|
|
39
|
+
|
|
36
40
|
## Install
|
|
37
41
|
|
|
38
42
|
Install and verify:
|
|
@@ -84,7 +88,7 @@ dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
|
84
88
|
|
|
85
89
|
### Fixture-backed example
|
|
86
90
|
|
|
87
|
-
Input: [`ACCEPTANCE.csv`](ACCEPTANCE.csv)
|
|
91
|
+
Input: [`ACCEPTANCE.csv`](https://github.com/PerryLink/dsh-eval-pack/blob/main/ACCEPTANCE.csv)
|
|
88
92
|
|
|
89
93
|
Command: `pnpm test`
|
|
90
94
|
|
|
@@ -128,12 +132,23 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
|
|
|
128
132
|
- Runs locally; no network, no model call, no upload.
|
|
129
133
|
- Public/synthetic fixtures only; no customer data, no customer evidence.
|
|
130
134
|
- Alpha/partial; not counted, no GA or production-readiness claim.
|
|
131
|
-
- Frozen packages stay installable; no new features, only genuine breakage fixes.
|
|
132
135
|
|
|
133
136
|
## Related work
|
|
134
137
|
|
|
135
138
|
Sibling packages and family indexes: [dsh-policy-ledger](https://github.com/PerryLink/dsh-policy-ledger) · [dsh-pim-lint](https://github.com/PerryLink/dsh-pim-lint)
|
|
136
139
|
|
|
140
|
+
|
|
141
|
+
### Related tools
|
|
142
|
+
|
|
143
|
+
Each entry is a separate package with its own tool surface and version; install only the ones you need.
|
|
144
|
+
|
|
145
|
+
| Package | Why it is relevant |
|
|
146
|
+
|---|---|
|
|
147
|
+
| [`dsh-score`](https://github.com/PerryLink/dsh-score) | Scoring and evaluation utilities. |
|
|
148
|
+
| [`dsh-doublecheck`](https://github.com/PerryLink/dsh-doublecheck) | Requirements/test/adversary quality gate. |
|
|
149
|
+
| [`dsh-test-drive`](https://github.com/PerryLink/dsh-test-drive) | Test-driving workflows and CI checks. |
|
|
150
|
+
|
|
151
|
+
- [Troubleshooting](TROUBLESHOOTING.md)
|
|
137
152
|
- [Domain index](https://perrylink.github.io/dsh-plugins/)
|
|
138
153
|
- [Checker family](https://perrylink.github.io/zh/checkers/)
|
|
139
154
|
- [Mainline family](https://github.com/PerryLink/dsh-kit)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Troubleshooting — dsh-eval-pack
|
|
2
|
+
|
|
3
|
+
## Install or activation fails
|
|
4
|
+
|
|
5
|
+
- DSH must satisfy `>=0.2.1-rc.3 <0.3.0`; Node must be `>=24.9 <25`.
|
|
6
|
+
- Run `dsh --version` and `node --version`, then retry with a fresh `DSH_HOME`:
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
export DSH_HOME="$(mktemp -d)"
|
|
10
|
+
dsh plugin --profile <profile> add dsh-eval-pack
|
|
11
|
+
dsh --profile <profile> --dump-config | grep dsh-eval-pack
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## The tool cannot find an input
|
|
15
|
+
|
|
16
|
+
- All paths are local. Use an absolute path, or a path relative to the process working directory.
|
|
17
|
+
- The public samples under `fixtures/` are repository-only; they are not shipped in the npm tarball. Download them from the GitHub repository if needed.
|
|
18
|
+
- Supported material: eval-pack JSON.
|
|
19
|
+
|
|
20
|
+
## Parse or encoding failures
|
|
21
|
+
|
|
22
|
+
- Text inputs must be UTF-8; CSV headers must match the README's documented column names.
|
|
23
|
+
- Remove a UTF-8 BOM if the first header is reported as unknown.
|
|
24
|
+
- Check the pack name/version and unique task ids; grading is deterministic JSON equality, not a benchmark.
|
|
25
|
+
|
|
26
|
+
## Permission or write failures
|
|
27
|
+
|
|
28
|
+
- Tools marked `R1 local write` write under the configured DSH data directory.
|
|
29
|
+
- For tests, point `DSH_HOME` at a temporary directory; do not write into a real profile.
|
|
30
|
+
|
|
31
|
+
## The result looks wrong
|
|
32
|
+
|
|
33
|
+
- Check the tool boundary in the README first. These are public/synthetic alpha tools, not a production or customer-validated determination.
|
|
34
|
+
- Compare the reported row ids and input rows; the output is deliberately explicit about what it could not run.
|
|
35
|
+
|
|
36
|
+
## Run the tests
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
pnpm install --frozen-lockfile
|
|
40
|
+
pnpm test
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Report
|
|
44
|
+
|
|
45
|
+
Open an issue on <https://github.com/PerryLink/dsh-eval-pack/issues> with the package version, a minimal synthetic input, and the exact tool call. Do not attach customer data.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/core/harness.d.ts
CHANGED
|
@@ -8,4 +8,19 @@ export interface EvalPack {
|
|
|
8
8
|
tasks: EvalTask[];
|
|
9
9
|
}
|
|
10
10
|
export declare function lintPack(input: unknown): string[];
|
|
11
|
+
/** Stable serialisation: object keys sorted at every level, arrays kept in order. */
|
|
12
|
+
export declare function canonical(value: unknown): string;
|
|
11
13
|
export declare function grade(actual: unknown, expected: unknown): boolean;
|
|
14
|
+
export interface EvalResult {
|
|
15
|
+
id: string;
|
|
16
|
+
actual: unknown;
|
|
17
|
+
expected: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface EvalSummary {
|
|
20
|
+
total: number;
|
|
21
|
+
passed: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
pass_rate: number;
|
|
24
|
+
failures: string[];
|
|
25
|
+
}
|
|
26
|
+
export declare function summarize(results: EvalResult[]): EvalSummary;
|
package/lib/core/harness.js
CHANGED
|
@@ -23,6 +23,33 @@ export function lintPack(input) {
|
|
|
23
23
|
}
|
|
24
24
|
return errors;
|
|
25
25
|
}
|
|
26
|
+
/** Stable serialisation: object keys sorted at every level, arrays kept in order. */
|
|
27
|
+
export function canonical(value) {
|
|
28
|
+
const walk = (input) => {
|
|
29
|
+
if (Array.isArray(input))
|
|
30
|
+
return input.map(walk);
|
|
31
|
+
if (input && typeof input === 'object') {
|
|
32
|
+
const out = {};
|
|
33
|
+
for (const key of Object.keys(input).sort())
|
|
34
|
+
out[key] = walk(input[key]);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
return input;
|
|
38
|
+
};
|
|
39
|
+
return JSON.stringify(walk(value));
|
|
40
|
+
}
|
|
26
41
|
export function grade(actual, expected) {
|
|
27
|
-
return
|
|
42
|
+
return canonical(actual) === canonical(expected);
|
|
43
|
+
}
|
|
44
|
+
export function summarize(results) {
|
|
45
|
+
const failures = [];
|
|
46
|
+
let passed = 0;
|
|
47
|
+
for (const r of results) {
|
|
48
|
+
if (grade(r.actual, r.expected))
|
|
49
|
+
passed += 1;
|
|
50
|
+
else
|
|
51
|
+
failures.push(r.id);
|
|
52
|
+
}
|
|
53
|
+
const total = results.length;
|
|
54
|
+
return { total, passed, failed: total - passed, pass_rate: total ? Math.round((passed / total) * 1e6) / 1e6 : 0, failures };
|
|
28
55
|
}
|
package/lib/plugin/tools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
|
-
import { grade, lintPack } from '../core/harness.js';
|
|
2
|
+
import { grade, lintPack, summarize } from '../core/harness.js';
|
|
3
3
|
const text = (t) => [{ type: 'text', text: t }];
|
|
4
4
|
export function createTools() {
|
|
5
5
|
const lint = defineTool({
|
|
@@ -16,5 +16,12 @@ export function createTools() {
|
|
|
16
16
|
output: { schema: { type: 'object', additionalProperties: false, properties: { pass: { type: 'boolean', required: true } } }, render: (_a, v) => text(`grade ${v.pass ? 'pass' : 'fail'}`) },
|
|
17
17
|
async execute(args) { return { pass: grade(args.actual, args.expected) }; },
|
|
18
18
|
});
|
|
19
|
-
|
|
19
|
+
const summary = defineTool({
|
|
20
|
+
name: 'eval.summary',
|
|
21
|
+
description: 'Aggregate graded results for a public/synthetic run: pass count, pass rate and the failing task ids, using the same canonical-JSON grader. Read-only; no runner.',
|
|
22
|
+
parameters: { results: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { id: { type: 'string', required: true }, actual: { type: 'json', required: true }, expected: { type: 'json', required: true } } } } },
|
|
23
|
+
output: { schema: { type: 'object', additionalProperties: false, properties: { total: { type: 'number', required: true }, passed: { type: 'number', required: true }, failed: { type: 'number', required: true }, pass_rate: { type: 'number', required: true }, failures: { type: 'array', items: { type: 'string' }, required: true } } }, render: (_a, v) => text(`summary ${v.passed}/${v.total}`) },
|
|
24
|
+
async execute(args) { return summarize(args.results); },
|
|
25
|
+
});
|
|
26
|
+
return [lint, gradeTool, summary];
|
|
20
27
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-eval-pack",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.8",
|
|
4
4
|
"description": "Public/synthetic eval-pack lint and deterministic JSON grader; not a validated benchmark.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/plugin/index.js",
|
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
"CODE_OF_CONDUCT.md",
|
|
28
28
|
"CONTRIBUTING.md",
|
|
29
29
|
"CHANGELOG.md",
|
|
30
|
+
"TROUBLESHOOTING.md",
|
|
31
|
+
"screenshots.json",
|
|
30
32
|
"icon.svg"
|
|
31
33
|
],
|
|
32
34
|
"dsh": {
|
package/screenshots.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"path": "docs/assets/dsh-eval-pack-hero.png",
|
|
4
|
+
"kind": "hero",
|
|
5
|
+
"alt": "dsh-eval-pack terminal output",
|
|
6
|
+
"caption": "Real dsh-eval-pack local test run; 3 tests passed."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"path": "docs/assets/dsh-eval-pack-demo.gif",
|
|
10
|
+
"kind": "demo",
|
|
11
|
+
"alt": "Animated dsh-eval-pack terminal session",
|
|
12
|
+
"caption": "The same run, assembled line by line."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "docs/assets/dsh-eval-pack-capability.png",
|
|
16
|
+
"kind": "capability",
|
|
17
|
+
"alt": "dsh-eval-pack real test run",
|
|
18
|
+
"caption": "Real command: node --test test/summary.test.mjs — 4 tests passed, 0 failed (canonical grading and run summary). Run 2026-11-01; the image is rendered from the captured terminal output."
|
|
19
|
+
}
|
|
20
|
+
]
|