@lesliechan721/agent-skill-eval 0.1.0-beta.8 → 0.1.0-beta.9

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.
Files changed (98) hide show
  1. package/dist/bin.js +149 -39
  2. package/dist/bin.js.map +1 -1
  3. package/dist/codex-eval-app-server.d.ts +199 -0
  4. package/dist/codex-eval-app-server.js +1366 -0
  5. package/dist/codex-eval-app-server.js.map +1 -0
  6. package/dist/codex-eval-cases.d.ts +43 -0
  7. package/dist/codex-eval-cases.js +327 -0
  8. package/dist/codex-eval-cases.js.map +1 -0
  9. package/dist/codex-eval-isolation.d.ts +61 -0
  10. package/dist/codex-eval-isolation.js +318 -0
  11. package/dist/codex-eval-isolation.js.map +1 -0
  12. package/dist/codex-eval-process-tree.d.ts +38 -0
  13. package/dist/codex-eval-process-tree.js +803 -0
  14. package/dist/codex-eval-process-tree.js.map +1 -0
  15. package/dist/codex-eval-runtime-config.d.ts +43 -0
  16. package/dist/codex-eval-runtime-config.js +607 -0
  17. package/dist/codex-eval-runtime-config.js.map +1 -0
  18. package/dist/codex-trigger-eval.d.ts +82 -0
  19. package/dist/codex-trigger-eval.js +789 -0
  20. package/dist/codex-trigger-eval.js.map +1 -0
  21. package/dist/codex-workflow.d.ts +188 -0
  22. package/dist/codex-workflow.js +1790 -0
  23. package/dist/codex-workflow.js.map +1 -0
  24. package/dist/credentials.d.ts +5 -0
  25. package/dist/credentials.js +30 -0
  26. package/dist/credentials.js.map +1 -0
  27. package/dist/custom-process.d.ts +58 -0
  28. package/dist/custom-process.js +409 -0
  29. package/dist/custom-process.js.map +1 -0
  30. package/dist/eval-audit.d.ts +38 -0
  31. package/dist/eval-audit.js +71 -0
  32. package/dist/eval-audit.js.map +1 -0
  33. package/dist/eval-file.d.ts +9 -0
  34. package/dist/eval-file.js +15 -0
  35. package/dist/eval-file.js.map +1 -0
  36. package/dist/eval-result.d.ts +64 -0
  37. package/dist/eval-result.js +144 -0
  38. package/dist/eval-result.js.map +1 -0
  39. package/dist/eval-run.d.ts +23 -0
  40. package/dist/eval-run.js +539 -0
  41. package/dist/eval-run.js.map +1 -0
  42. package/dist/eval-spec.d.ts +57 -0
  43. package/dist/eval-spec.js +120 -0
  44. package/dist/eval-spec.js.map +1 -0
  45. package/dist/eval-suite-binding.d.ts +4 -0
  46. package/dist/eval-suite-binding.js +19 -0
  47. package/dist/eval-suite-binding.js.map +1 -0
  48. package/dist/index.d.ts +34 -9
  49. package/dist/index.js +18 -6
  50. package/dist/index.js.map +1 -1
  51. package/dist/json-schema.js +75 -5
  52. package/dist/json-schema.js.map +1 -1
  53. package/dist/output-path.js +2 -2
  54. package/dist/process-tree.d.ts +19 -1
  55. package/dist/process-tree.js +321 -65
  56. package/dist/process-tree.js.map +1 -1
  57. package/dist/process.d.ts +0 -2
  58. package/dist/process.js +76 -25
  59. package/dist/process.js.map +1 -1
  60. package/dist/provider-doctor.d.ts +33 -0
  61. package/dist/provider-doctor.js +86 -0
  62. package/dist/provider-doctor.js.map +1 -0
  63. package/dist/providers.d.ts +82 -0
  64. package/dist/providers.js +630 -0
  65. package/dist/providers.js.map +1 -0
  66. package/dist/run-paths.d.ts +8 -0
  67. package/dist/run-paths.js +71 -0
  68. package/dist/run-paths.js.map +1 -0
  69. package/dist/runtime-skill.d.ts +6 -0
  70. package/dist/runtime-skill.js +87 -3
  71. package/dist/runtime-skill.js.map +1 -1
  72. package/dist/schemas/digests.json +3 -3
  73. package/dist/schemas/eval-audit.schema.json +64 -0
  74. package/dist/schemas/eval-result.schema.json +202 -0
  75. package/dist/schemas/eval-spec.schema.json +109 -0
  76. package/dist/schemas.d.ts +1 -3
  77. package/dist/schemas.js +0 -17
  78. package/dist/schemas.js.map +1 -1
  79. package/dist/selected-cases.d.ts +30 -0
  80. package/dist/selected-cases.js +388 -0
  81. package/dist/selected-cases.js.map +1 -0
  82. package/dist/types.d.ts +2 -34
  83. package/package.json +6 -1
  84. package/dist/bundle.d.ts +0 -93
  85. package/dist/bundle.js +0 -216
  86. package/dist/bundle.js.map +0 -1
  87. package/dist/capabilities.d.ts +0 -2
  88. package/dist/capabilities.js +0 -38
  89. package/dist/capabilities.js.map +0 -1
  90. package/dist/plan.d.ts +0 -79
  91. package/dist/plan.js +0 -285
  92. package/dist/plan.js.map +0 -1
  93. package/dist/run.d.ts +0 -2
  94. package/dist/run.js +0 -592
  95. package/dist/run.js.map +0 -1
  96. package/dist/schemas/aw-skill-eval-execution-plan.schema.json +0 -220
  97. package/dist/schemas/eval-run-bundle.schema.json +0 -408
  98. package/dist/schemas/eval-runtime-capabilities.schema.json +0 -85
package/dist/schemas.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- import type { Digest, RuntimeCapabilities, SchemaName, ValidationResult } from './types.js';
2
- export declare function isSchemaName(value: string): value is SchemaName;
1
+ import type { Digest, SchemaName } from './types.js';
3
2
  export declare function getSchema(name: SchemaName): Promise<Record<string, unknown>>;
4
3
  export declare function getSchemaDigest(name: SchemaName): Promise<Digest>;
5
- export declare function validateRuntimeCapabilities(value: unknown): Promise<ValidationResult<RuntimeCapabilities>>;
package/dist/schemas.js CHANGED
@@ -1,13 +1,4 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { validateJsonSchema } from './json-schema.js';
3
- const schemaNames = new Set([
4
- 'aw-skill-eval-execution-plan',
5
- 'eval-run-bundle',
6
- 'eval-runtime-capabilities',
7
- ]);
8
- export function isSchemaName(value) {
9
- return schemaNames.has(value);
10
- }
11
2
  export async function getSchema(name) {
12
3
  const source = new URL(`./schemas/${name}.schema.json`, import.meta.url);
13
4
  return JSON.parse(await readFile(source, 'utf8'));
@@ -16,12 +7,4 @@ export async function getSchemaDigest(name) {
16
7
  const digests = JSON.parse(await readFile(new URL('./schemas/digests.json', import.meta.url), 'utf8'));
17
8
  return digests[name];
18
9
  }
19
- export async function validateRuntimeCapabilities(value) {
20
- const errors = validateJsonSchema(await getSchema('eval-runtime-capabilities'), value);
21
- return {
22
- valid: errors.length === 0,
23
- errors,
24
- calculated: errors.length === 0 ? value : null,
25
- };
26
- }
27
10
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAQrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAa;IACtC,8BAA8B;IAC9B,iBAAiB;IACjB,2BAA2B;CAC5B,CAAC,CAAA;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,WAAW,CAAC,GAAG,CAAC,KAAmB,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,IAAI,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAA4B,CAAA;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC7C,CAAA;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAc;IAEd,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,SAAS,CAAC,2BAA2B,CAAC,EAAE,KAAK,CAAC,CAAA;IACtF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAA4B,CAAC,CAAC,CAAC,IAAI;KACtE,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAM3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,IAAI,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAA4B,CAAA;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC7C,CAAA;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type AwSkillEvalTriggerCase, type AwSkillEvalTriggerSuiteCaseContract } from './codex-eval-cases.js';
2
+ import type { ValidationResult } from './types.js';
3
+ export type SelectedCaseSuiteKind = 'trigger' | 'conversation' | 'custom-process' | 'codex-workflow';
4
+ export interface SelectedCaseSuite {
5
+ kind: SelectedCaseSuiteKind;
6
+ unitUnderTest: string;
7
+ participants?: string[];
8
+ policy?: {
9
+ optimization?: string;
10
+ falseNegativeCost?: string;
11
+ falsePositiveCost?: string;
12
+ rationale?: string;
13
+ };
14
+ runtime?: Record<string, unknown>;
15
+ readonly providerSuite?: AwSkillEvalTriggerSuiteCaseContract;
16
+ }
17
+ export interface SelectedEvalCase extends Record<string, unknown> {
18
+ id: string;
19
+ split: string;
20
+ tags: string[];
21
+ readonly providerCase?: AwSkillEvalTriggerCase;
22
+ }
23
+ export interface SelectedCasesDocument {
24
+ version: 1;
25
+ suite: SelectedCaseSuite;
26
+ cases: SelectedEvalCase[];
27
+ }
28
+ export declare function parseSelectedCases(value: unknown): SelectedCasesDocument;
29
+ export declare function validateSelectedCases(value: unknown): Promise<ValidationResult<SelectedCasesDocument>>;
30
+ export declare function validateSelectedCasesFile(casesPath: string): Promise<ValidationResult<SelectedCasesDocument>>;
@@ -0,0 +1,388 @@
1
+ import { readEvalContractFile } from './eval-file.js';
2
+ import { normalizeAwSkillEvalTriggerCase, } from './codex-eval-cases.js';
3
+ function record(value, label) {
4
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
5
+ throw new Error(`${label} must be an object.`);
6
+ }
7
+ return value;
8
+ }
9
+ function onlyKeys(value, allowed, label) {
10
+ const keys = new Set(allowed);
11
+ const unknown = Object.keys(value).find((key) => !keys.has(key));
12
+ if (unknown)
13
+ throw new Error(`${label} has unknown field ${JSON.stringify(unknown)}.`);
14
+ }
15
+ function nonEmptyString(value, label) {
16
+ if (typeof value !== 'string' || value.trim() === '') {
17
+ throw new Error(`${label} must be a non-empty string.`);
18
+ }
19
+ return value;
20
+ }
21
+ function safeId(value, label) {
22
+ const result = nonEmptyString(value, label);
23
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(result)) {
24
+ throw new Error(`${label} must be a safe path segment.`);
25
+ }
26
+ return result;
27
+ }
28
+ function uniqueStrings(value, label, allowEmpty = false) {
29
+ if (!Array.isArray(value) || (!allowEmpty && value.length === 0)) {
30
+ throw new Error(`${label} must be ${allowEmpty ? 'an' : 'a non-empty'} array.`);
31
+ }
32
+ const result = value.map((entry, index) => nonEmptyString(entry, `${label}[${index}]`));
33
+ if (new Set(result).size !== result.length)
34
+ throw new Error(`${label} must contain unique values.`);
35
+ return result;
36
+ }
37
+ function assertJsonValue(value, label) {
38
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
39
+ return;
40
+ if (typeof value === 'number' && Number.isFinite(value))
41
+ return;
42
+ if (Array.isArray(value)) {
43
+ value.forEach((entry, index) => assertJsonValue(entry, `${label}[${index}]`));
44
+ return;
45
+ }
46
+ const row = record(value, label);
47
+ for (const [key, entry] of Object.entries(row)) {
48
+ if (key === '__proto__' || key === 'prototype' || key === 'constructor') {
49
+ throw new Error(`${label} contains unsafe field ${JSON.stringify(key)}.`);
50
+ }
51
+ assertJsonValue(entry, `${label}.${key}`);
52
+ }
53
+ }
54
+ function optionalJson(value, label) {
55
+ if (value !== undefined)
56
+ assertJsonValue(value, label);
57
+ return value;
58
+ }
59
+ function relativePath(value, label, options = {}) {
60
+ const raw = nonEmptyString(value, label);
61
+ const treePattern = options.allowTreePattern === true && raw.endsWith('/**');
62
+ const candidate = treePattern ? raw.slice(0, -3) : raw;
63
+ if (candidate === ''
64
+ || candidate.includes('\0')
65
+ || candidate.includes('\\')
66
+ || candidate.includes('*')
67
+ || candidate.includes('?')
68
+ || candidate.includes('[')
69
+ || candidate.includes(']')
70
+ || candidate.startsWith('/')
71
+ || /^[A-Za-z]:/u.test(candidate)
72
+ || candidate.split('/').some((segment) => segment === '' || segment === '.' || segment === '..'))
73
+ throw new Error(`${label} must be a normalized relative POSIX path.`);
74
+ return raw;
75
+ }
76
+ function pathArray(value, label, options = {}) {
77
+ const values = uniqueStrings(value, label, options.allowEmpty === true);
78
+ return values.map((entry, index) => relativePath(entry, `${label}[${index}]`, { allowTreePattern: options.allowTreePattern }));
79
+ }
80
+ function triggerSuiteContract(suite) {
81
+ const runtime = suite.runtime ?? {};
82
+ return {
83
+ id: 'selected',
84
+ kind: 'trigger',
85
+ skill: suite.unitUnderTest,
86
+ skills: [...new Set([suite.unitUnderTest, ...(suite.participants ?? [])])],
87
+ cases: 'cases.json',
88
+ observeSpawnAgent: runtime.observeSpawnAgent === true,
89
+ isolation: runtime.isolation === 'strict' ? 'strict' : 'standard',
90
+ strictNegativeSplits: (runtime.strictNegativeSplits ?? []),
91
+ forbidMultipleSkillLoads: runtime.forbidMultipleSkillLoads === true,
92
+ ...(typeof runtime.fixture === 'string' ? { fixtureModule: runtime.fixture } : {}),
93
+ profiles: ['selected'],
94
+ defaultRuns: 1,
95
+ releaseSplits: ['all'],
96
+ requiredForRelease: false,
97
+ perRunTimeoutMs: 1,
98
+ };
99
+ }
100
+ function parseRuntime(value, kind) {
101
+ const runtime = record(value, 'selected cases.suite.runtime');
102
+ if (kind === 'trigger') {
103
+ onlyKeys(runtime, [
104
+ 'observeSpawnAgent',
105
+ 'isolation',
106
+ 'strictNegativeSplits',
107
+ 'forbidMultipleSkillLoads',
108
+ 'fixture',
109
+ 'minimumPassRate',
110
+ ], 'selected cases.suite.runtime');
111
+ if (runtime.observeSpawnAgent !== undefined && typeof runtime.observeSpawnAgent !== 'boolean') {
112
+ throw new Error('selected cases.suite.runtime.observeSpawnAgent must be boolean.');
113
+ }
114
+ if (runtime.forbidMultipleSkillLoads !== undefined && typeof runtime.forbidMultipleSkillLoads !== 'boolean') {
115
+ throw new Error('selected cases.suite.runtime.forbidMultipleSkillLoads must be boolean.');
116
+ }
117
+ if (runtime.isolation !== undefined && runtime.isolation !== 'standard' && runtime.isolation !== 'strict') {
118
+ throw new Error('selected cases.suite.runtime.isolation must be standard or strict.');
119
+ }
120
+ if (runtime.strictNegativeSplits !== undefined) {
121
+ const splits = uniqueStrings(runtime.strictNegativeSplits, 'selected cases.suite.runtime.strictNegativeSplits', true);
122
+ const invalid = splits.find((split) => split !== 'train' && split !== 'validation' && split !== 'sanity');
123
+ if (invalid) {
124
+ throw new Error('selected cases.suite.runtime.strictNegativeSplits has an invalid split.');
125
+ }
126
+ }
127
+ if (runtime.fixture !== undefined) {
128
+ runtime.fixture = relativePath(runtime.fixture, 'selected cases.suite.runtime.fixture');
129
+ }
130
+ }
131
+ else if (kind === 'conversation') {
132
+ onlyKeys(runtime, ['isolation', 'pathPrepend', 'minimumPassRate'], 'selected cases.suite.runtime');
133
+ if (runtime.isolation !== undefined && runtime.isolation !== 'standard' && runtime.isolation !== 'strict') {
134
+ throw new Error('selected cases.suite.runtime.isolation must be standard or strict.');
135
+ }
136
+ runtime.pathPrepend = runtime.pathPrepend === undefined
137
+ ? []
138
+ : pathArray(runtime.pathPrepend, 'selected cases.suite.runtime.pathPrepend', { allowEmpty: true });
139
+ }
140
+ else {
141
+ onlyKeys(runtime, ['minimumPassRate'], 'selected cases.suite.runtime');
142
+ }
143
+ if (runtime.minimumPassRate !== undefined
144
+ && (typeof runtime.minimumPassRate !== 'number'
145
+ || !Number.isFinite(runtime.minimumPassRate)
146
+ || runtime.minimumPassRate < 0
147
+ || runtime.minimumPassRate > 1)) {
148
+ throw new Error('selected cases.suite.runtime.minimumPassRate must be a finite number from 0 to 1.');
149
+ }
150
+ return runtime;
151
+ }
152
+ function parseSuite(value) {
153
+ const suite = record(value, 'selected cases.suite');
154
+ onlyKeys(suite, ['kind', 'unitUnderTest', 'participants', 'policy', 'runtime'], 'selected cases.suite');
155
+ if (suite.kind !== 'trigger'
156
+ && suite.kind !== 'conversation'
157
+ && suite.kind !== 'custom-process'
158
+ && suite.kind !== 'codex-workflow') {
159
+ throw new Error('selected cases.suite.kind must be trigger, conversation, custom-process, or codex-workflow.');
160
+ }
161
+ const result = {
162
+ kind: suite.kind,
163
+ unitUnderTest: safeId(suite.unitUnderTest, 'selected cases.suite.unitUnderTest'),
164
+ };
165
+ if (suite.participants !== undefined) {
166
+ result.participants = uniqueStrings(suite.participants, 'selected cases.suite.participants')
167
+ .map((entry, index) => safeId(entry, `selected cases.suite.participants[${index}]`));
168
+ }
169
+ if (suite.policy !== undefined) {
170
+ const policy = record(suite.policy, 'selected cases.suite.policy');
171
+ onlyKeys(policy, ['optimization', 'falseNegativeCost', 'falsePositiveCost', 'rationale'], 'selected cases.suite.policy');
172
+ result.policy = Object.fromEntries(Object.entries(policy).map(([key, entry]) => [
173
+ key,
174
+ nonEmptyString(entry, `selected cases.suite.policy.${key}`),
175
+ ]));
176
+ }
177
+ if (suite.runtime !== undefined) {
178
+ result.runtime = parseRuntime(suite.runtime, suite.kind);
179
+ }
180
+ if (result.kind === 'trigger') {
181
+ Object.defineProperty(result, 'providerSuite', {
182
+ value: triggerSuiteContract(result),
183
+ enumerable: false,
184
+ });
185
+ }
186
+ return result;
187
+ }
188
+ function triggerExpectation(row, label) {
189
+ if (row.expectedLoad !== undefined && row.expected !== undefined) {
190
+ throw new Error(`${label} must not contain both expectedLoad and expected.`);
191
+ }
192
+ if (row.expectedLoad !== undefined) {
193
+ if (typeof row.expectedLoad !== 'boolean')
194
+ throw new Error(`${label}.expectedLoad must be boolean.`);
195
+ return { should_load_skill: row.expectedLoad };
196
+ }
197
+ const expected = record(row.expected, `${label}.expected`);
198
+ onlyKeys(expected, ['loadedSkills'], `${label}.expected`);
199
+ const loadedSkills = uniqueStrings(expected.loadedSkills, `${label}.expected.loadedSkills`, true);
200
+ return { expected_loaded_skills: loadedSkills };
201
+ }
202
+ function parseTriggerCase(row, index, suite) {
203
+ const label = `selected cases.cases[${index}]`;
204
+ onlyKeys(row, ['id', 'split', 'tags', 'input', 'audit'], label);
205
+ const input = record(row.input, `${label}.input`);
206
+ onlyKeys(input, ['query', 'expectedLoad', 'expected', 'shouldSpawnAgent', 'workspaceFixture', 'useProjectRules'], `${label}.input`);
207
+ const id = safeId(row.id, `${label}.id`);
208
+ const split = safeId(row.split, `${label}.split`);
209
+ const tags = uniqueStrings(row.tags, `${label}.tags`, true);
210
+ const canonical = normalizeAwSkillEvalTriggerCase({
211
+ id,
212
+ split,
213
+ query: nonEmptyString(input.query, `${label}.input.query`),
214
+ ...triggerExpectation(input, `${label}.input`),
215
+ ...(input.shouldSpawnAgent === undefined
216
+ ? {}
217
+ : { should_spawn_agent: input.shouldSpawnAgent }),
218
+ ...(input.workspaceFixture === undefined
219
+ ? {}
220
+ : { workspace_fixture: relativePath(input.workspaceFixture, `${label}.input.workspaceFixture`) }),
221
+ ...(input.useProjectRules === undefined
222
+ ? {}
223
+ : { use_project_rules: input.useProjectRules }),
224
+ ...(tags.length === 0 ? {} : { tags }),
225
+ }, index, suite.providerSuite);
226
+ if (canonical.workspace_fixture && !suite.providerSuite?.fixtureModule) {
227
+ throw new Error(`${label}.input.workspaceFixture requires selected cases.suite.runtime.fixture.`);
228
+ }
229
+ const result = { ...row, id, split, tags };
230
+ Object.defineProperty(result, 'providerCase', { value: canonical, enumerable: false });
231
+ return result;
232
+ }
233
+ function parseCommonAudit(row, label, tags) {
234
+ const audit = row.audit === undefined ? undefined : record(row.audit, `${label}.audit`);
235
+ if (audit) {
236
+ onlyKeys(audit, ['rationale', 'errorCost', 'allowedVariance', 'minimalCounterexample'], `${label}.audit`);
237
+ for (const key of ['rationale', 'allowedVariance', 'minimalCounterexample']) {
238
+ if (Object.hasOwn(audit, key))
239
+ nonEmptyString(audit[key], `${label}.audit.${key}`);
240
+ }
241
+ if (audit.errorCost !== undefined
242
+ && audit.errorCost !== 'high'
243
+ && audit.errorCost !== 'medium'
244
+ && audit.errorCost !== 'low')
245
+ throw new Error(`${label}.audit.errorCost must be high, medium, or low.`);
246
+ }
247
+ const required = [
248
+ ...tags.some((tag) => tag === 'boundary' || tag === 'regression')
249
+ ? ['rationale', 'minimalCounterexample']
250
+ : [],
251
+ ...tags.some((tag) => tag === 'release-critical' || tag === 'high-cost') ? ['errorCost'] : [],
252
+ ...tags.includes('high-variance') ? ['allowedVariance'] : [],
253
+ ];
254
+ const missing = required.find((key) => !audit || !Object.hasOwn(audit, key));
255
+ if (missing)
256
+ throw new Error(`${label}.audit.${missing} is required by case tags.`);
257
+ }
258
+ function parseConversationCase(row, index) {
259
+ const label = `selected cases.cases[${index}]`;
260
+ onlyKeys(row, ['id', 'split', 'tags', 'prompt', 'assertions', 'input', 'expected', 'audit'], label);
261
+ const id = safeId(row.id, `${label}.id`);
262
+ const split = safeId(row.split, `${label}.split`);
263
+ const tags = uniqueStrings(row.tags, `${label}.tags`, true);
264
+ nonEmptyString(row.prompt, `${label}.prompt`);
265
+ if (!Array.isArray(row.assertions) || row.assertions.length === 0) {
266
+ throw new Error(`${label}.assertions must be a non-empty array.`);
267
+ }
268
+ const assertions = row.assertions.map((entry, assertionIndex) => nonEmptyString(entry, `${label}.assertions[${assertionIndex}]`));
269
+ const input = row.input === undefined ? {} : record(row.input, `${label}.input`);
270
+ onlyKeys(input, ['scriptedReplies', 'workspaceFiles', 'pathPrepend'], `${label}.input`);
271
+ if (input.scriptedReplies !== undefined) {
272
+ if (!Array.isArray(input.scriptedReplies)) {
273
+ throw new Error(`${label}.input.scriptedReplies must be an array.`);
274
+ }
275
+ input.scriptedReplies.forEach((reply, replyIndex) => {
276
+ const replyLabel = `${label}.input.scriptedReplies[${replyIndex}]`;
277
+ if (typeof reply === 'string')
278
+ return;
279
+ const replyRow = record(reply, replyLabel);
280
+ onlyKeys(replyRow, ['answersByIndex', 'expectedQuestionCount', 'unexpectedQuestionAnswer'], replyLabel);
281
+ if (!Array.isArray(replyRow.answersByIndex)
282
+ || replyRow.answersByIndex.some((answer) => typeof answer !== 'string'))
283
+ throw new Error(`${replyLabel}.answersByIndex must be an array of strings.`);
284
+ if (replyRow.expectedQuestionCount !== undefined
285
+ && (!Number.isInteger(replyRow.expectedQuestionCount)
286
+ || replyRow.expectedQuestionCount < 0))
287
+ throw new Error(`${replyLabel}.expectedQuestionCount must be a non-negative integer.`);
288
+ nonEmptyString(replyRow.unexpectedQuestionAnswer, `${replyLabel}.unexpectedQuestionAnswer`);
289
+ });
290
+ }
291
+ if (input.workspaceFiles !== undefined) {
292
+ const workspaceFiles = record(input.workspaceFiles, `${label}.input.workspaceFiles`);
293
+ for (const [workspacePath, content] of Object.entries(workspaceFiles)) {
294
+ relativePath(workspacePath, `${label}.input.workspaceFiles.${workspacePath}`);
295
+ if (typeof content !== 'string') {
296
+ throw new Error(`${label}.input.workspaceFiles.${workspacePath} must be a string.`);
297
+ }
298
+ }
299
+ }
300
+ if (input.pathPrepend !== undefined) {
301
+ pathArray(input.pathPrepend, `${label}.input.pathPrepend`, { allowEmpty: true });
302
+ }
303
+ const expected = row.expected === undefined ? {} : record(row.expected, `${label}.expected`);
304
+ onlyKeys(expected, ['output', 'workspaceUnchanged', 'allowedWorkspaceChanges', 'artifacts'], `${label}.expected`);
305
+ if (expected.output !== undefined)
306
+ nonEmptyString(expected.output, `${label}.expected.output`);
307
+ if (expected.workspaceUnchanged !== undefined && typeof expected.workspaceUnchanged !== 'boolean') {
308
+ throw new Error(`${label}.expected.workspaceUnchanged must be boolean.`);
309
+ }
310
+ if (expected.allowedWorkspaceChanges !== undefined) {
311
+ pathArray(expected.allowedWorkspaceChanges, `${label}.expected.allowedWorkspaceChanges`, { allowEmpty: true, allowTreePattern: true });
312
+ }
313
+ if (expected.artifacts !== undefined) {
314
+ if (!Array.isArray(expected.artifacts))
315
+ throw new Error(`${label}.expected.artifacts must be an array.`);
316
+ optionalJson(expected.artifacts, `${label}.expected.artifacts`);
317
+ for (const [artifactIndex, artifact] of expected.artifacts.entries()) {
318
+ const artifactRow = record(artifact, `${label}.expected.artifacts[${artifactIndex}]`);
319
+ onlyKeys(artifactRow, ['path', 'exists', 'contains', 'notContains', 'json'], `${label}.expected.artifacts[${artifactIndex}]`);
320
+ relativePath(artifactRow.path, `${label}.expected.artifacts[${artifactIndex}].path`);
321
+ }
322
+ }
323
+ parseCommonAudit(row, label, tags);
324
+ return { ...row, id, split, tags, assertions };
325
+ }
326
+ function parseCase(value, index, suite) {
327
+ const label = `selected cases.cases[${index}]`;
328
+ const row = record(value, label);
329
+ const common = ['id', 'split', 'tags'];
330
+ if (suite.kind === 'trigger') {
331
+ const result = parseTriggerCase(row, index, suite);
332
+ parseCommonAudit(row, label, result.tags);
333
+ return result;
334
+ }
335
+ if (suite.kind === 'conversation')
336
+ return parseConversationCase(row, index);
337
+ onlyKeys(row, [...common, 'input', 'expected', 'assertions', 'audit'], label);
338
+ {
339
+ optionalJson(row.input, `${label}.input`);
340
+ optionalJson(row.expected, `${label}.expected`);
341
+ optionalJson(row.assertions, `${label}.assertions`);
342
+ }
343
+ const result = {
344
+ ...row,
345
+ id: safeId(row.id, `${label}.id`),
346
+ split: safeId(row.split, `${label}.split`),
347
+ tags: uniqueStrings(row.tags, `${label}.tags`, true),
348
+ };
349
+ parseCommonAudit(row, label, result.tags);
350
+ return result;
351
+ }
352
+ export function parseSelectedCases(value) {
353
+ const document = record(value, 'selected cases');
354
+ onlyKeys(document, ['version', 'suite', 'cases'], 'selected cases');
355
+ if (document.version !== 1)
356
+ throw new Error('selected cases.version must be 1.');
357
+ const suite = parseSuite(document.suite);
358
+ if (!Array.isArray(document.cases) || document.cases.length === 0) {
359
+ throw new Error('selected cases.cases must be a non-empty array.');
360
+ }
361
+ const cases = document.cases.map((entry, index) => parseCase(entry, index, suite));
362
+ if (new Set(cases.map((entry) => entry.id)).size !== cases.length) {
363
+ throw new Error('selected cases.cases must contain unique ids.');
364
+ }
365
+ return { version: 1, suite, cases };
366
+ }
367
+ export async function validateSelectedCases(value) {
368
+ try {
369
+ return { valid: true, errors: [], calculated: parseSelectedCases(value) };
370
+ }
371
+ catch (error) {
372
+ return { valid: false, errors: [error.message], calculated: null };
373
+ }
374
+ }
375
+ export async function validateSelectedCasesFile(casesPath) {
376
+ try {
377
+ const file = await readEvalContractFile(casesPath, 'selected cases');
378
+ return validateSelectedCases(file.value);
379
+ }
380
+ catch (error) {
381
+ return {
382
+ valid: false,
383
+ errors: [`Selected cases are unavailable or invalid: ${error.message}`],
384
+ calculated: null,
385
+ };
386
+ }
387
+ }
388
+ //# sourceMappingURL=selected-cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selected-cases.js","sourceRoot":"","sources":["../src/selected-cases.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -4,25 +4,6 @@ export interface ValidationResult<TCalculated = unknown> {
4
4
  errors: string[];
5
5
  calculated: TCalculated | null;
6
6
  }
7
- export interface RuntimeCapabilities {
8
- schemaVersion: 1;
9
- provider: string;
10
- providerVersion: string;
11
- capabilities: {
12
- triggerDiscovery: boolean;
13
- skillPathExecution: boolean;
14
- previousVersionBaseline: boolean;
15
- withoutSkillBaseline: boolean;
16
- cleanContext: boolean;
17
- parallelRuns: boolean;
18
- toolTrace: boolean;
19
- tokenUsage: boolean;
20
- duration: boolean;
21
- sandbox: boolean;
22
- materialization: boolean;
23
- };
24
- limitations: string[];
25
- }
26
7
  export interface RuntimeSkillSnapshot {
27
8
  root: string;
28
9
  digest: Digest;
@@ -32,6 +13,7 @@ export interface ProcessRequest {
32
13
  args: string[];
33
14
  cwd: string;
34
15
  env: NodeJS.ProcessEnv;
16
+ stdin?: string;
35
17
  timeoutMs: number;
36
18
  maxBufferBytes: number;
37
19
  signal?: AbortSignal;
@@ -69,18 +51,4 @@ export interface ProcessResult {
69
51
  containmentMode: 'managed' | 'verified-observed' | 'observed' | 'unmanaged-confirmed';
70
52
  containmentLimitation?: string;
71
53
  }
72
- export interface RunExecutionPlanOptions {
73
- processHooks?: ProcessLifecycleHooks;
74
- beforeBundleCommit?: () => void | Promise<void>;
75
- sourceEnv?: NodeJS.ProcessEnv;
76
- platform?: NodeJS.Platform;
77
- processTree?: import('./process-tree.js').ProcessTreeDependencies;
78
- }
79
- export interface RunExecutionResult {
80
- valid: true;
81
- bundlePath: string;
82
- bundleDigest: Digest;
83
- evidenceLevel: 'executed' | 'comparative';
84
- requirementsMet: boolean;
85
- }
86
- export type SchemaName = 'aw-skill-eval-execution-plan' | 'eval-run-bundle' | 'eval-runtime-capabilities';
54
+ export type SchemaName = 'eval-spec' | 'eval-audit' | 'eval-result';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lesliechan721/agent-skill-eval",
3
- "version": "0.1.0-beta.8",
3
+ "version": "0.1.0-beta.9",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -21,7 +21,12 @@
21
21
  "files": [
22
22
  "dist/"
23
23
  ],
24
+ "dependencies": {
25
+ "fs-extra": "^11.3.0",
26
+ "toml-eslint-parser": "^1.0.3"
27
+ },
24
28
  "devDependencies": {
29
+ "@types/fs-extra": "^11.0.4",
25
30
  "@types/node": "^24.0.0",
26
31
  "typescript": "^5.9.3",
27
32
  "vitest": "^3.2.4"