@vibe-agent-toolkit/agent-skills 0.1.42 → 0.2.0-rc.10
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 +5 -5
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +7 -17
- package/dist/builder.js.map +1 -1
- package/dist/content-type-routing.d.ts +32 -0
- package/dist/content-type-routing.d.ts.map +1 -1
- package/dist/content-type-routing.js +23 -0
- package/dist/content-type-routing.js.map +1 -1
- package/dist/files-config.d.ts +34 -1
- package/dist/files-config.d.ts.map +1 -1
- package/dist/files-config.js +277 -39
- package/dist/files-config.js.map +1 -1
- package/dist/fs-attribution.d.ts +45 -0
- package/dist/fs-attribution.d.ts.map +1 -0
- package/dist/fs-attribution.js +57 -0
- package/dist/fs-attribution.js.map +1 -0
- package/dist/import.d.ts.map +1 -1
- package/dist/import.js +0 -4
- package/dist/import.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -7
- package/dist/index.js.map +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
- package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
- package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
- package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
- package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
- package/dist/inventory/index.d.ts +1 -1
- package/dist/inventory/index.d.ts.map +1 -1
- package/dist/inventory/index.js +1 -1
- package/dist/inventory/index.js.map +1 -1
- package/dist/inventory/serialize.d.ts +4 -4
- package/dist/inventory/serialize.d.ts.map +1 -1
- package/dist/inventory/serialize.js +6 -6
- package/dist/inventory/serialize.js.map +1 -1
- package/dist/inventory/types.d.ts +8 -0
- package/dist/inventory/types.d.ts.map +1 -1
- package/dist/inventory/types.js.map +1 -1
- package/dist/link-graph-members.d.ts +18 -0
- package/dist/link-graph-members.d.ts.map +1 -0
- package/dist/link-graph-members.js +18 -0
- package/dist/link-graph-members.js.map +1 -0
- package/dist/parsers/frontmatter-parser.d.ts.map +1 -1
- package/dist/parsers/frontmatter-parser.js +30 -6
- package/dist/parsers/frontmatter-parser.js.map +1 -1
- package/dist/plugin-distribution-layout.d.ts +70 -6
- package/dist/plugin-distribution-layout.d.ts.map +1 -1
- package/dist/plugin-distribution-layout.js +84 -11
- package/dist/plugin-distribution-layout.js.map +1 -1
- package/dist/post-build-checks.d.ts +38 -1
- package/dist/post-build-checks.d.ts.map +1 -1
- package/dist/post-build-checks.js +68 -17
- package/dist/post-build-checks.js.map +1 -1
- package/dist/projection/skill-extent.d.ts +247 -0
- package/dist/projection/skill-extent.d.ts.map +1 -0
- package/dist/projection/skill-extent.js +560 -0
- package/dist/projection/skill-extent.js.map +1 -0
- package/dist/schemas/agent-skill-frontmatter.js +1 -1
- package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
- package/dist/schemas/allowed-tools.d.ts +31 -0
- package/dist/schemas/allowed-tools.d.ts.map +1 -0
- package/dist/schemas/allowed-tools.js +88 -0
- package/dist/schemas/allowed-tools.js.map +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/installed-plugins-registry.d.ts.map +1 -1
- package/dist/schemas/installed-plugins-registry.js +7 -1
- package/dist/schemas/installed-plugins-registry.js.map +1 -1
- package/dist/schemas/marketplace-manifest.d.ts.map +1 -1
- package/dist/schemas/marketplace-manifest.js +17 -6
- package/dist/schemas/marketplace-manifest.js.map +1 -1
- package/dist/skill-identity.d.ts +18 -3
- package/dist/skill-identity.d.ts.map +1 -1
- package/dist/skill-identity.js +25 -6
- package/dist/skill-identity.js.map +1 -1
- package/dist/skill-packager.d.ts +144 -20
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +447 -105
- package/dist/skill-packager.js.map +1 -1
- package/dist/skill-source/content-hash.d.ts.map +1 -1
- package/dist/skill-source/content-hash.js +21 -10
- package/dist/skill-source/content-hash.js.map +1 -1
- package/dist/skill-source/fetch-cache.d.ts.map +1 -1
- package/dist/skill-source/fetch-cache.js +0 -5
- package/dist/skill-source/fetch-cache.js.map +1 -1
- package/dist/skill-source/git-clone.d.ts +1 -1
- package/dist/skill-source/git-clone.d.ts.map +1 -1
- package/dist/skill-source/git-clone.js +10 -10
- package/dist/skill-source/git-clone.js.map +1 -1
- package/dist/skill-source/sources/url-source.d.ts.map +1 -1
- package/dist/skill-source/sources/url-source.js +2 -2
- package/dist/skill-source/sources/url-source.js.map +1 -1
- package/dist/skill-source/stage.d.ts.map +1 -1
- package/dist/skill-source/stage.js +0 -6
- package/dist/skill-source/stage.js.map +1 -1
- package/dist/skill-test/baseline-delta.d.ts +1575 -0
- package/dist/skill-test/baseline-delta.d.ts.map +1 -0
- package/dist/skill-test/baseline-delta.js +272 -0
- package/dist/skill-test/baseline-delta.js.map +1 -0
- package/dist/skill-test/baseline-integrity.d.ts +944 -0
- package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
- package/dist/skill-test/baseline-integrity.js +3090 -0
- package/dist/skill-test/baseline-integrity.js.map +1 -0
- package/dist/skill-test/build-hook.d.ts +3 -2
- package/dist/skill-test/build-hook.d.ts.map +1 -1
- package/dist/skill-test/build-hook.js +4 -5
- package/dist/skill-test/build-hook.js.map +1 -1
- package/dist/skill-test/configure-writer.js +1 -1
- package/dist/skill-test/configure-writer.js.map +1 -1
- package/dist/skill-test/declared-env.d.ts +5 -4
- package/dist/skill-test/declared-env.d.ts.map +1 -1
- package/dist/skill-test/declared-env.js +8 -9
- package/dist/skill-test/declared-env.js.map +1 -1
- package/dist/skill-test/eval-executor.d.ts +21 -5
- package/dist/skill-test/eval-executor.d.ts.map +1 -1
- package/dist/skill-test/eval-executor.js +6 -6
- package/dist/skill-test/eval-executor.js.map +1 -1
- package/dist/skill-test/eval-fragment.d.ts +106 -28
- package/dist/skill-test/eval-fragment.d.ts.map +1 -1
- package/dist/skill-test/eval-fragment.js +78 -16
- package/dist/skill-test/eval-fragment.js.map +1 -1
- package/dist/skill-test/eval-grader.d.ts +65 -7
- package/dist/skill-test/eval-grader.d.ts.map +1 -1
- package/dist/skill-test/eval-grader.js +263 -64
- package/dist/skill-test/eval-grader.js.map +1 -1
- package/dist/skill-test/eval-inputs.d.ts +110 -8
- package/dist/skill-test/eval-inputs.d.ts.map +1 -1
- package/dist/skill-test/eval-inputs.js +177 -22
- package/dist/skill-test/eval-inputs.js.map +1 -1
- package/dist/skill-test/eval-lint.d.ts +17 -4
- package/dist/skill-test/eval-lint.d.ts.map +1 -1
- package/dist/skill-test/eval-lint.js +22 -9
- package/dist/skill-test/eval-lint.js.map +1 -1
- package/dist/skill-test/eval-suite-isolation.d.ts.map +1 -1
- package/dist/skill-test/eval-suite-isolation.js +8 -5
- package/dist/skill-test/eval-suite-isolation.js.map +1 -1
- package/dist/skill-test/evals-template.d.ts +1 -1
- package/dist/skill-test/evals-template.d.ts.map +1 -1
- package/dist/skill-test/evals-template.js +1 -3
- package/dist/skill-test/evals-template.js.map +1 -1
- package/dist/skill-test/executor-prompt.d.ts +15 -7
- package/dist/skill-test/executor-prompt.d.ts.map +1 -1
- package/dist/skill-test/executor-prompt.js +10 -7
- package/dist/skill-test/executor-prompt.js.map +1 -1
- package/dist/skill-test/failure-reason.d.ts +113 -0
- package/dist/skill-test/failure-reason.d.ts.map +1 -0
- package/dist/skill-test/failure-reason.js +124 -0
- package/dist/skill-test/failure-reason.js.map +1 -0
- package/dist/skill-test/fragment-merge.d.ts +3 -20
- package/dist/skill-test/fragment-merge.d.ts.map +1 -1
- package/dist/skill-test/fragment-merge.js +67 -8
- package/dist/skill-test/fragment-merge.js.map +1 -1
- package/dist/skill-test/grader-prompt.d.ts +29 -9
- package/dist/skill-test/grader-prompt.d.ts.map +1 -1
- package/dist/skill-test/grader-prompt.js +264 -68
- package/dist/skill-test/grader-prompt.js.map +1 -1
- package/dist/skill-test/grader-text.d.ts +145 -0
- package/dist/skill-test/grader-text.d.ts.map +1 -0
- package/dist/skill-test/grader-text.js +410 -0
- package/dist/skill-test/grader-text.js.map +1 -0
- package/dist/skill-test/grading-adapter.d.ts +38 -2
- package/dist/skill-test/grading-adapter.d.ts.map +1 -1
- package/dist/skill-test/grading-adapter.js +57 -9
- package/dist/skill-test/grading-adapter.js.map +1 -1
- package/dist/skill-test/grading-schema.d.ts +160 -5
- package/dist/skill-test/grading-schema.d.ts.map +1 -1
- package/dist/skill-test/grading-schema.js +66 -7
- package/dist/skill-test/grading-schema.js.map +1 -1
- package/dist/skill-test/harness-location.d.ts +3 -2
- package/dist/skill-test/harness-location.d.ts.map +1 -1
- package/dist/skill-test/harness-location.js +5 -16
- package/dist/skill-test/harness-location.js.map +1 -1
- package/dist/skill-test/index.d.ts +2 -2
- package/dist/skill-test/index.d.ts.map +1 -1
- package/dist/skill-test/index.js +2 -2
- package/dist/skill-test/index.js.map +1 -1
- package/dist/skill-test/lock.d.ts +58 -1
- package/dist/skill-test/lock.d.ts.map +1 -1
- package/dist/skill-test/lock.js +78 -6
- package/dist/skill-test/lock.js.map +1 -1
- package/dist/skill-test/pipeline.d.ts +19 -1
- package/dist/skill-test/pipeline.d.ts.map +1 -1
- package/dist/skill-test/pipeline.js +21 -10
- package/dist/skill-test/pipeline.js.map +1 -1
- package/dist/skill-test/preflight.d.ts +1 -1
- package/dist/skill-test/preflight.d.ts.map +1 -1
- package/dist/skill-test/preflight.js +59 -16
- package/dist/skill-test/preflight.js.map +1 -1
- package/dist/skill-test/prompt-invariants.d.ts +4 -2
- package/dist/skill-test/prompt-invariants.d.ts.map +1 -1
- package/dist/skill-test/prompt-invariants.js +5 -4
- package/dist/skill-test/prompt-invariants.js.map +1 -1
- package/dist/skill-test/run-harness.d.ts +665 -85
- package/dist/skill-test/run-harness.d.ts.map +1 -1
- package/dist/skill-test/run-harness.js +1522 -237
- package/dist/skill-test/run-harness.js.map +1 -1
- package/dist/skill-test/staging.d.ts +20 -8
- package/dist/skill-test/staging.d.ts.map +1 -1
- package/dist/skill-test/staging.js +25 -18
- package/dist/skill-test/staging.js.map +1 -1
- package/dist/skill-test/tier-plan.d.ts +1 -1
- package/dist/skill-test/tier-plan.js +1 -1
- package/dist/skill-test/tool-eval-schema.d.ts +6 -6
- package/dist/skill-test/tool-eval-schema.js +2 -2
- package/dist/skill-test/vendor-manifest.d.ts +2 -1
- package/dist/skill-test/vendor-manifest.d.ts.map +1 -1
- package/dist/skill-test/vendor-manifest.js +10 -10
- package/dist/skill-test/vendor-manifest.js.map +1 -1
- package/dist/test-input.d.ts +59 -8
- package/dist/test-input.d.ts.map +1 -1
- package/dist/test-input.js +64 -19
- package/dist/test-input.js.map +1 -1
- package/dist/validators/agent-instruction-presence.d.ts +1 -1
- package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
- package/dist/validators/agent-instruction-presence.js +45 -2
- package/dist/validators/agent-instruction-presence.js.map +1 -1
- package/dist/validators/bundled-resource-link-detection.d.ts +6 -4
- package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
- package/dist/validators/bundled-resource-link-detection.js +39 -39
- package/dist/validators/bundled-resource-link-detection.js.map +1 -1
- package/dist/validators/compat-detectors.d.ts +18 -1
- package/dist/validators/compat-detectors.d.ts.map +1 -1
- package/dist/validators/compat-detectors.js +47 -20
- package/dist/validators/compat-detectors.js.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
- package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
- package/dist/validators/cross-skill-dependency-detection.js +1 -1
- package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
- package/dist/validators/description-style-detection.d.ts +1 -1
- package/dist/validators/description-style-detection.d.ts.map +1 -1
- package/dist/validators/description-style-detection.js +1 -1
- package/dist/validators/description-style-detection.js.map +1 -1
- package/dist/validators/format-detection.d.ts +3 -0
- package/dist/validators/format-detection.d.ts.map +1 -1
- package/dist/validators/format-detection.js +41 -26
- package/dist/validators/format-detection.js.map +1 -1
- package/dist/validators/frontmatter-validation.d.ts +1 -1
- package/dist/validators/frontmatter-validation.d.ts.map +1 -1
- package/dist/validators/frontmatter-validation.js +2 -2
- package/dist/validators/frontmatter-validation.js.map +1 -1
- package/dist/validators/imperative-body-detection.d.ts +1 -1
- package/dist/validators/imperative-body-detection.d.ts.map +1 -1
- package/dist/validators/imperative-body-detection.js +1 -1
- package/dist/validators/imperative-body-detection.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.d.ts +1 -1
- package/dist/validators/kebab-case-detection.d.ts.map +1 -1
- package/dist/validators/kebab-case-detection.js +1 -1
- package/dist/validators/kebab-case-detection.js.map +1 -1
- package/dist/validators/marketplace-validator.d.ts.map +1 -1
- package/dist/validators/marketplace-validator.js +7 -2
- package/dist/validators/marketplace-validator.js.map +1 -1
- package/dist/validators/mcp-tool-qualification.d.ts +158 -0
- package/dist/validators/mcp-tool-qualification.d.ts.map +1 -0
- package/dist/validators/mcp-tool-qualification.js +467 -0
- package/dist/validators/mcp-tool-qualification.js.map +1 -0
- package/dist/validators/packaged-size-limit.d.ts +296 -0
- package/dist/validators/packaged-size-limit.d.ts.map +1 -0
- package/dist/validators/packaged-size-limit.js +492 -0
- package/dist/validators/packaged-size-limit.js.map +1 -0
- package/dist/validators/packaging-validator.d.ts +149 -10
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +371 -55
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/plugin-hosted-shape.d.ts +4 -2
- package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
- package/dist/validators/plugin-hosted-shape.js +6 -7
- package/dist/validators/plugin-hosted-shape.js.map +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts +1 -1
- package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
- package/dist/validators/plugin-recommended-fields.js +1 -1
- package/dist/validators/plugin-recommended-fields.js.map +1 -1
- package/dist/validators/referenced-path-missing.d.ts +211 -0
- package/dist/validators/referenced-path-missing.d.ts.map +1 -0
- package/dist/validators/referenced-path-missing.js +378 -0
- package/dist/validators/referenced-path-missing.js.map +1 -0
- package/dist/validators/registry-validator.d.ts.map +1 -1
- package/dist/validators/registry-validator.js +1 -2
- package/dist/validators/registry-validator.js.map +1 -1
- package/dist/validators/rule-engine/index.d.ts +1 -1
- package/dist/validators/rule-engine/rule-context.d.ts +20 -3
- package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-context.js +3 -1
- package/dist/validators/rule-engine/rule-context.js.map +1 -1
- package/dist/validators/rule-engine/rule-engine.d.ts +2 -2
- package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-engine.js +52 -13
- package/dist/validators/rule-engine/rule-engine.js.map +1 -1
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +91 -54
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/source-only-codes.js +1 -1
- package/dist/validators/source-only-codes.js.map +1 -1
- package/dist/validators/types.d.ts +21 -1
- package/dist/validators/types.d.ts.map +1 -1
- package/dist/validators/unified-validator.d.ts.map +1 -1
- package/dist/validators/unified-validator.js +4 -5
- package/dist/validators/unified-validator.js.map +1 -1
- package/dist/validators/validation-rules.d.ts +4 -4
- package/dist/validators/validation-rules.d.ts.map +1 -1
- package/dist/validators/validation-rules.js +9 -38
- package/dist/validators/validation-rules.js.map +1 -1
- package/dist/validators/walker-to-issues.d.ts +9 -3
- package/dist/validators/walker-to-issues.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.js +64 -19
- package/dist/validators/walker-to-issues.js.map +1 -1
- package/dist/walk-link-graph.d.ts +64 -5
- package/dist/walk-link-graph.d.ts.map +1 -1
- package/dist/walk-link-graph.js +376 -92
- package/dist/walk-link-graph.js.map +1 -1
- package/package.json +14 -22
- package/dist/skill-test/exit-codes.d.ts +0 -97
- package/dist/skill-test/exit-codes.d.ts.map +0 -1
- package/dist/skill-test/exit-codes.js +0 -141
- package/dist/skill-test/exit-codes.js.map +0 -1
|
@@ -31,20 +31,51 @@ export declare const GradedExpectationSchema: z.ZodObject<{
|
|
|
31
31
|
text: z.ZodString;
|
|
32
32
|
passed: z.ZodBoolean;
|
|
33
33
|
evidence: z.ZodOptional<z.ZodString>;
|
|
34
|
+
/**
|
|
35
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
36
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
37
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
38
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
39
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
40
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
41
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
42
|
+
*/
|
|
43
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
34
44
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
35
45
|
text: z.ZodString;
|
|
36
46
|
passed: z.ZodBoolean;
|
|
37
47
|
evidence: z.ZodOptional<z.ZodString>;
|
|
48
|
+
/**
|
|
49
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
50
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
51
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
52
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
53
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
54
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
55
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
56
|
+
*/
|
|
57
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
38
58
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
39
59
|
text: z.ZodString;
|
|
40
60
|
passed: z.ZodBoolean;
|
|
41
61
|
evidence: z.ZodOptional<z.ZodString>;
|
|
62
|
+
/**
|
|
63
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
64
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
65
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
66
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
67
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
68
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
69
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
70
|
+
*/
|
|
71
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
42
72
|
}, z.ZodTypeAny, "passthrough">>;
|
|
43
73
|
export type GradedExpectation = z.infer<typeof GradedExpectationSchema>;
|
|
44
74
|
/**
|
|
45
75
|
* Aggregate pass/fail counts. `failed`/`pass_rate` are documented but optional.
|
|
46
76
|
* Counts are non-negative integers (a float or negative count is a grader bug),
|
|
47
|
-
* and `passed` can never exceed `total
|
|
77
|
+
* and `passed` can never exceed `total` — see {@link SUMMARY_SCHEMA_DESCRIPTION}
|
|
78
|
+
* for why that last one has to be stated twice.
|
|
48
79
|
*/
|
|
49
80
|
export declare const GradingSummarySchema: z.ZodEffects<z.ZodObject<{
|
|
50
81
|
passed: z.ZodNumber;
|
|
@@ -83,14 +114,44 @@ export declare const GradingReportSchema: z.ZodObject<{
|
|
|
83
114
|
text: z.ZodString;
|
|
84
115
|
passed: z.ZodBoolean;
|
|
85
116
|
evidence: z.ZodOptional<z.ZodString>;
|
|
117
|
+
/**
|
|
118
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
119
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
120
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
121
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
122
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
123
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
124
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
125
|
+
*/
|
|
126
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
86
127
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
87
128
|
text: z.ZodString;
|
|
88
129
|
passed: z.ZodBoolean;
|
|
89
130
|
evidence: z.ZodOptional<z.ZodString>;
|
|
131
|
+
/**
|
|
132
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
133
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
134
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
135
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
136
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
137
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
138
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
139
|
+
*/
|
|
140
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
90
141
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
91
142
|
text: z.ZodString;
|
|
92
143
|
passed: z.ZodBoolean;
|
|
93
144
|
evidence: z.ZodOptional<z.ZodString>;
|
|
145
|
+
/**
|
|
146
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
147
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
148
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
149
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
150
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
151
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
152
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
153
|
+
*/
|
|
154
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
94
155
|
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
95
156
|
summary: z.ZodEffects<z.ZodObject<{
|
|
96
157
|
passed: z.ZodNumber;
|
|
@@ -127,19 +188,58 @@ export declare const GradingReportSchema: z.ZodObject<{
|
|
|
127
188
|
* by untrusted skill code is rejected.
|
|
128
189
|
*/
|
|
129
190
|
runNonce: z.ZodOptional<z.ZodString>;
|
|
191
|
+
/**
|
|
192
|
+
* Which `--baseline` arm produced this report: `'with'` (the skill declared)
|
|
193
|
+
* or `'without'` (the control arm run with the skill withheld). vat writes
|
|
194
|
+
* the two arms to two files of the SAME shape — `grading.json` and
|
|
195
|
+
* `baseline.json` — so without this field a reader holding one of them
|
|
196
|
+
* cannot tell which arm it is looking at. Optional for the same reason
|
|
197
|
+
* `runNonce` is: an externally produced grading.json has no arm to declare.
|
|
198
|
+
*/
|
|
199
|
+
arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
|
|
130
200
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
131
201
|
expectations: z.ZodArray<z.ZodObject<{
|
|
132
202
|
text: z.ZodString;
|
|
133
203
|
passed: z.ZodBoolean;
|
|
134
204
|
evidence: z.ZodOptional<z.ZodString>;
|
|
205
|
+
/**
|
|
206
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
207
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
208
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
209
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
210
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
211
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
212
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
213
|
+
*/
|
|
214
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
135
215
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
136
216
|
text: z.ZodString;
|
|
137
217
|
passed: z.ZodBoolean;
|
|
138
218
|
evidence: z.ZodOptional<z.ZodString>;
|
|
219
|
+
/**
|
|
220
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
221
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
222
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
223
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
224
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
225
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
226
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
227
|
+
*/
|
|
228
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
139
229
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
140
230
|
text: z.ZodString;
|
|
141
231
|
passed: z.ZodBoolean;
|
|
142
232
|
evidence: z.ZodOptional<z.ZodString>;
|
|
233
|
+
/**
|
|
234
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
235
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
236
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
237
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
238
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
239
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
240
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
241
|
+
*/
|
|
242
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
143
243
|
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
144
244
|
summary: z.ZodEffects<z.ZodObject<{
|
|
145
245
|
passed: z.ZodNumber;
|
|
@@ -176,19 +276,58 @@ export declare const GradingReportSchema: z.ZodObject<{
|
|
|
176
276
|
* by untrusted skill code is rejected.
|
|
177
277
|
*/
|
|
178
278
|
runNonce: z.ZodOptional<z.ZodString>;
|
|
279
|
+
/**
|
|
280
|
+
* Which `--baseline` arm produced this report: `'with'` (the skill declared)
|
|
281
|
+
* or `'without'` (the control arm run with the skill withheld). vat writes
|
|
282
|
+
* the two arms to two files of the SAME shape — `grading.json` and
|
|
283
|
+
* `baseline.json` — so without this field a reader holding one of them
|
|
284
|
+
* cannot tell which arm it is looking at. Optional for the same reason
|
|
285
|
+
* `runNonce` is: an externally produced grading.json has no arm to declare.
|
|
286
|
+
*/
|
|
287
|
+
arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
|
|
179
288
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
180
289
|
expectations: z.ZodArray<z.ZodObject<{
|
|
181
290
|
text: z.ZodString;
|
|
182
291
|
passed: z.ZodBoolean;
|
|
183
292
|
evidence: z.ZodOptional<z.ZodString>;
|
|
293
|
+
/**
|
|
294
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
295
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
296
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
297
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
298
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
299
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
300
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
301
|
+
*/
|
|
302
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
184
303
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
185
304
|
text: z.ZodString;
|
|
186
305
|
passed: z.ZodBoolean;
|
|
187
306
|
evidence: z.ZodOptional<z.ZodString>;
|
|
307
|
+
/**
|
|
308
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
309
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
310
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
311
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
312
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
313
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
314
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
315
|
+
*/
|
|
316
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
188
317
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
189
318
|
text: z.ZodString;
|
|
190
319
|
passed: z.ZodBoolean;
|
|
191
320
|
evidence: z.ZodOptional<z.ZodString>;
|
|
321
|
+
/**
|
|
322
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
323
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
324
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
325
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
326
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
327
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
328
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
329
|
+
*/
|
|
330
|
+
evalId: z.ZodOptional<z.ZodString>;
|
|
192
331
|
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
193
332
|
summary: z.ZodEffects<z.ZodObject<{
|
|
194
333
|
passed: z.ZodNumber;
|
|
@@ -225,13 +364,29 @@ export declare const GradingReportSchema: z.ZodObject<{
|
|
|
225
364
|
* by untrusted skill code is rejected.
|
|
226
365
|
*/
|
|
227
366
|
runNonce: z.ZodOptional<z.ZodString>;
|
|
367
|
+
/**
|
|
368
|
+
* Which `--baseline` arm produced this report: `'with'` (the skill declared)
|
|
369
|
+
* or `'without'` (the control arm run with the skill withheld). vat writes
|
|
370
|
+
* the two arms to two files of the SAME shape — `grading.json` and
|
|
371
|
+
* `baseline.json` — so without this field a reader holding one of them
|
|
372
|
+
* cannot tell which arm it is looking at. Optional for the same reason
|
|
373
|
+
* `runNonce` is: an externally produced grading.json has no arm to declare.
|
|
374
|
+
*/
|
|
375
|
+
arm: z.ZodOptional<z.ZodEnum<["with", "without"]>>;
|
|
228
376
|
}, z.ZodTypeAny, "passthrough">>;
|
|
229
377
|
export type GradingReport = z.infer<typeof GradingReportSchema>;
|
|
230
378
|
/**
|
|
231
|
-
* Published JSON Schema for grading.json — generated from {@link GradingReportSchema}
|
|
232
|
-
* so
|
|
233
|
-
*
|
|
234
|
-
* docs/skill-test-grading-schema.md.
|
|
379
|
+
* Published JSON Schema for grading.json — generated from {@link GradingReportSchema},
|
|
380
|
+
* so its SHAPE (fields, types, required-ness, additionalProperties) cannot drift from
|
|
381
|
+
* the Zod schema. Importable by external tooling that wants to validate a grading.json
|
|
382
|
+
* without depending on Zod. Documented in docs/skill-test-grading-schema.md.
|
|
383
|
+
*
|
|
384
|
+
* It is NOT equivalent to the Zod schema, and never can be. `zodToJsonSchema` drops
|
|
385
|
+
* every `.refine()`, and the two refinements in this file are cross-field relations
|
|
386
|
+
* JSON Schema has no way to express — so the generated document is strictly weaker
|
|
387
|
+
* than the validator that generated it. That gap is stated, in the document itself,
|
|
388
|
+
* on the field it applies to (see {@link SUMMARY_SCHEMA_DESCRIPTION}); a consumer
|
|
389
|
+
* that needs the invariant enforced must re-implement it or use the Zod schema.
|
|
235
390
|
*/
|
|
236
391
|
export declare const GradingReportJsonSchema: import("zod-to-json-schema").JsonSchema7Type & {
|
|
237
392
|
$schema?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grading-schema.d.ts","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"grading-schema.d.ts","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,eAAO,MAAM,uBAAuB;;;;IAKhC;;;;;;;;OAQG;;;;;;IARH;;;;;;;;OAQG;;;;;;IARH;;;;;;;;OAQG;;gCAGS,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAiCxE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;gCAcM,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;QA3E5B;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;;;;;;QA/FH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;;;;;;QA/FH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;QARH;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuEH;;;;;;;OAOG;;IAEH;;;;;;;OAOG;;gCAGS,CAAC;AAEjB,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB;;;;;CAAyD,CAAC"}
|
|
@@ -33,12 +33,51 @@ export const GradedExpectationSchema = z
|
|
|
33
33
|
text: z.string(),
|
|
34
34
|
passed: z.boolean(),
|
|
35
35
|
evidence: z.string().optional(),
|
|
36
|
+
/**
|
|
37
|
+
* Which eval this expectation was graded under. vat stamps it when it
|
|
38
|
+
* assembles the aggregate from per-eval grader fragments, so that a
|
|
39
|
+
* `--baseline` run's two artifacts can be lined up PER EVAL rather than only
|
|
40
|
+
* in aggregate — without it, a reader can compare two totals but cannot say
|
|
41
|
+
* which eval moved. Optional because a grading.json produced by external
|
|
42
|
+
* tooling (skill-creator's own) carries no per-eval attribution; the schema
|
|
43
|
+
* documents the field vat now emits rather than tightening the contract.
|
|
44
|
+
*/
|
|
45
|
+
evalId: z.string().optional(),
|
|
36
46
|
})
|
|
37
47
|
.passthrough();
|
|
48
|
+
/**
|
|
49
|
+
* The cross-field invariant, worded once and carried into BOTH surfaces that can
|
|
50
|
+
* state it: the Zod refine's failure message, and the `description` on `summary`
|
|
51
|
+
* in the published JSON Schema.
|
|
52
|
+
*
|
|
53
|
+
* It has to be carried explicitly because `zodToJsonSchema` DISCARDS `.refine()`.
|
|
54
|
+
* Without this, the published document said `{passed: integer≥0, total: integer≥0}`
|
|
55
|
+
* and nothing else — so external tooling validating against it accepted
|
|
56
|
+
* `{passed: 9, total: 3}`, the exact shape the Zod validator rejects and the exact
|
|
57
|
+
* shape that produced a confident `delta: -8`. The invariant was not enforced OR
|
|
58
|
+
* mentioned, which is worse than unenforced: a consumer reading the schema had no
|
|
59
|
+
* way to learn the check existed.
|
|
60
|
+
*
|
|
61
|
+
* JSON Schema cannot close the gap. No draft can compare one property against
|
|
62
|
+
* another (`maximum` takes a number, not a pointer; `if`/`then` can only test a
|
|
63
|
+
* value, not a relation), and the Ajv `$data` extension that could is not portable
|
|
64
|
+
* — a plain Ajv without `$data: true` FAILS TO COMPILE a schema containing it,
|
|
65
|
+
* which would break every conforming consumer to serve one. So the published
|
|
66
|
+
* schema records the constraint and says plainly that it is on the consumer to
|
|
67
|
+
* check, rather than pretending to enforce it.
|
|
68
|
+
*/
|
|
69
|
+
const SUMMARY_INVARIANT_MESSAGE = 'summary.passed must not exceed summary.total';
|
|
70
|
+
const SUMMARY_SCHEMA_DESCRIPTION = 'Aggregate pass/fail counts. INVARIANT: ' +
|
|
71
|
+
`${SUMMARY_INVARIANT_MESSAGE}. It is enforced by the Zod schema this document is generated from ` +
|
|
72
|
+
'and by vat when it merges grader fragments, but NOT by this document: JSON Schema cannot express ' +
|
|
73
|
+
'a comparison between two properties in any draft, so a validator running this schema alone will ' +
|
|
74
|
+
'accept {"passed": 9, "total": 3}. Check it yourself before trusting any figure derived from these ' +
|
|
75
|
+
'counts (a baseline delta subtracts them).';
|
|
38
76
|
/**
|
|
39
77
|
* Aggregate pass/fail counts. `failed`/`pass_rate` are documented but optional.
|
|
40
78
|
* Counts are non-negative integers (a float or negative count is a grader bug),
|
|
41
|
-
* and `passed` can never exceed `total
|
|
79
|
+
* and `passed` can never exceed `total` — see {@link SUMMARY_SCHEMA_DESCRIPTION}
|
|
80
|
+
* for why that last one has to be stated twice.
|
|
42
81
|
*/
|
|
43
82
|
export const GradingSummarySchema = z
|
|
44
83
|
.object({
|
|
@@ -49,8 +88,12 @@ export const GradingSummarySchema = z
|
|
|
49
88
|
})
|
|
50
89
|
.passthrough()
|
|
51
90
|
.refine(s => s.passed <= s.total, {
|
|
52
|
-
message:
|
|
53
|
-
})
|
|
91
|
+
message: SUMMARY_INVARIANT_MESSAGE,
|
|
92
|
+
})
|
|
93
|
+
// `.describe()` AFTER `.refine()`: zodToJsonSchema reads the description off the
|
|
94
|
+
// outermost node, and this is the only channel through which a Zod refinement's
|
|
95
|
+
// meaning can reach the emitted document at all.
|
|
96
|
+
.describe(SUMMARY_SCHEMA_DESCRIPTION);
|
|
54
97
|
/**
|
|
55
98
|
* The full grading.json contract. Required: top-level `expectations[]` and
|
|
56
99
|
* `summary`. Everything else passes through untouched (forward-compatible with
|
|
@@ -69,13 +112,29 @@ export const GradingReportSchema = z
|
|
|
69
112
|
* by untrusted skill code is rejected.
|
|
70
113
|
*/
|
|
71
114
|
runNonce: z.string().optional(),
|
|
115
|
+
/**
|
|
116
|
+
* Which `--baseline` arm produced this report: `'with'` (the skill declared)
|
|
117
|
+
* or `'without'` (the control arm run with the skill withheld). vat writes
|
|
118
|
+
* the two arms to two files of the SAME shape — `grading.json` and
|
|
119
|
+
* `baseline.json` — so without this field a reader holding one of them
|
|
120
|
+
* cannot tell which arm it is looking at. Optional for the same reason
|
|
121
|
+
* `runNonce` is: an externally produced grading.json has no arm to declare.
|
|
122
|
+
*/
|
|
123
|
+
arm: z.enum(['with', 'without']).optional(),
|
|
72
124
|
})
|
|
73
125
|
.passthrough();
|
|
74
126
|
/**
|
|
75
|
-
* Published JSON Schema for grading.json — generated from {@link GradingReportSchema}
|
|
76
|
-
* so
|
|
77
|
-
*
|
|
78
|
-
* docs/skill-test-grading-schema.md.
|
|
127
|
+
* Published JSON Schema for grading.json — generated from {@link GradingReportSchema},
|
|
128
|
+
* so its SHAPE (fields, types, required-ness, additionalProperties) cannot drift from
|
|
129
|
+
* the Zod schema. Importable by external tooling that wants to validate a grading.json
|
|
130
|
+
* without depending on Zod. Documented in docs/skill-test-grading-schema.md.
|
|
131
|
+
*
|
|
132
|
+
* It is NOT equivalent to the Zod schema, and never can be. `zodToJsonSchema` drops
|
|
133
|
+
* every `.refine()`, and the two refinements in this file are cross-field relations
|
|
134
|
+
* JSON Schema has no way to express — so the generated document is strictly weaker
|
|
135
|
+
* than the validator that generated it. That gap is stated, in the document itself,
|
|
136
|
+
* on the field it applies to (see {@link SUMMARY_SCHEMA_DESCRIPTION}); a consumer
|
|
137
|
+
* that needs the invariant enforced must re-implement it or use the Zod schema.
|
|
79
138
|
*/
|
|
80
139
|
export const GradingReportJsonSchema = zodToJsonSchema(GradingReportSchema, 'grading-report');
|
|
81
140
|
//# sourceMappingURL=grading-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grading-schema.js","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"grading-schema.js","sourceRoot":"","sources":["../../src/skill-test/grading-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,yBAAyB,GAAG,8CAA8C,CAAC;AAEjF,MAAM,0BAA0B,GAC9B,yCAAyC;IACzC,GAAG,yBAAyB,qEAAqE;IACjG,mGAAmG;IACnG,kGAAkG;IAClG,oGAAoG;IACpG,2CAA2C,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,WAAW,EAAE;KACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE;IAChC,OAAO,EAAE,yBAAyB;CACnC,CAAC;IACF,iFAAiF;IACjF,gFAAgF;IAChF,iDAAiD;KAChD,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AAIxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC9C,OAAO,EAAE,oBAAoB;IAC7B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B;;;;;;;OAOG;IACH,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { VatError } from '@vibe-agent-toolkit/utils';
|
|
1
2
|
/** Harness-location failure — maps to exit code 2. */
|
|
2
|
-
export declare class HarnessLocationError extends
|
|
3
|
-
readonly
|
|
3
|
+
export declare class HarnessLocationError extends VatError {
|
|
4
|
+
readonly reason: "preflight";
|
|
4
5
|
constructor(message: string);
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-location.d.ts","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"harness-location.d.ts","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmD,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtG,sDAAsD;AACtD,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,QAAQ,CAAC,MAAM,EAAG,WAAW,CAAU;gBAC3B,OAAO,EAAE,MAAM;CAG5B;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ7D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAcpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAcpD;AAgDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAA2B,GACvC,IAAI,CAgBN"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { chmodSync, existsSync, lstatSync, statSync } from 'node:fs';
|
|
3
|
-
import {
|
|
3
|
+
import { normalizedTmpdir, relativeEscapesRoot, safePath, VatError } from '@vibe-agent-toolkit/utils';
|
|
4
4
|
/** Harness-location failure — maps to exit code 2. */
|
|
5
|
-
export class HarnessLocationError extends
|
|
6
|
-
|
|
5
|
+
export class HarnessLocationError extends VatError {
|
|
6
|
+
reason = 'preflight';
|
|
7
7
|
constructor(message) {
|
|
8
|
-
super(message);
|
|
9
|
-
this.name = 'HarnessLocationError';
|
|
8
|
+
super('HARNESS_LOCATION', message);
|
|
10
9
|
}
|
|
11
10
|
}
|
|
12
11
|
/** Sanitize a skill name to a path-safe token (no separators, no traversal). */
|
|
@@ -50,11 +49,9 @@ export function assertSafeWorkdir(dir, stopAt) {
|
|
|
50
49
|
let current = safePath.resolve(dir);
|
|
51
50
|
let previous = '';
|
|
52
51
|
while (current !== previous && current !== boundary) {
|
|
53
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- ancestry walk over a user-supplied workdir
|
|
54
52
|
if (existsSync(safePath.join(current, 'CLAUDE.md'))) {
|
|
55
53
|
throw new HarnessLocationError(`--workdir is inside a project: CLAUDE.md found at ${current}. Use an OS-tmp location.`);
|
|
56
54
|
}
|
|
57
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- ancestry walk over a user-supplied workdir
|
|
58
55
|
if (existsSync(safePath.join(current, '.claude'))) {
|
|
59
56
|
throw new HarnessLocationError(`--workdir is inside a project: .claude/ found at ${current}. Use an OS-tmp location.`);
|
|
60
57
|
}
|
|
@@ -75,19 +72,15 @@ export function assertSafeWorkdir(dir, stopAt) {
|
|
|
75
72
|
* assertSafeHarnessRoot's platform guard).
|
|
76
73
|
*/
|
|
77
74
|
export function prepareHarnessRoot(dir) {
|
|
78
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
79
75
|
if (!existsSync(dir))
|
|
80
76
|
return;
|
|
81
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
82
77
|
const ls = lstatSync(dir);
|
|
83
78
|
if (ls.isSymbolicLink()) {
|
|
84
79
|
throw new HarnessLocationError(`Refusing to use a symlinked harness root: ${dir}.`);
|
|
85
80
|
}
|
|
86
81
|
if (process.platform !== 'win32') {
|
|
87
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
88
82
|
const mode = statSync(dir).mode & 0o777;
|
|
89
83
|
if (mode !== 0o700) {
|
|
90
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
91
84
|
chmodSync(dir, 0o700);
|
|
92
85
|
}
|
|
93
86
|
}
|
|
@@ -97,7 +90,7 @@ function isStrictlyUnder(root, child) {
|
|
|
97
90
|
if (child === root)
|
|
98
91
|
return false;
|
|
99
92
|
const rel = safePath.relative(root, child);
|
|
100
|
-
return rel !== '' &&
|
|
93
|
+
return rel !== '' && !relativeEscapesRoot(rel);
|
|
101
94
|
}
|
|
102
95
|
/**
|
|
103
96
|
* The harness path components to validate, leaf-first: the leaf and every
|
|
@@ -127,10 +120,8 @@ function harnessAncestry(leaf, trustedRoot) {
|
|
|
127
120
|
* skipped (no real uids); the symlink refusal still applies.
|
|
128
121
|
*/
|
|
129
122
|
function assertComponentSafe(component, currentUid) {
|
|
130
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness path component
|
|
131
123
|
if (!existsSync(component))
|
|
132
124
|
return;
|
|
133
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness path component
|
|
134
125
|
const ls = lstatSync(component);
|
|
135
126
|
if (ls.isSymbolicLink()) {
|
|
136
127
|
throw new HarnessLocationError(`Refusing to use a symlinked harness path component: ${component}.`);
|
|
@@ -164,10 +155,8 @@ export function assertSafeHarnessRoot(dir, currentUid, trustedRoot = normalizedT
|
|
|
164
155
|
}
|
|
165
156
|
// Leaf-only 0700 check (intermediates are created 0700 by recursive mkdir and
|
|
166
157
|
// need only the symlink/ownership guarantees above). Skipped on win32.
|
|
167
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
168
158
|
if (!existsSync(resolved))
|
|
169
159
|
return; // not yet created — caller creates it 0700
|
|
170
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
|
|
171
160
|
const mode = statSync(resolved).mode & 0o777;
|
|
172
161
|
if (mode !== 0o700 && process.platform !== 'win32') {
|
|
173
162
|
throw new HarnessLocationError(`Harness root ${resolved} must be 0700 (found ${mode.toString(8)}).`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-location.js","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAErE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"harness-location.js","sourceRoot":"","sources":["../../src/skill-test/harness-location.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ export { lintEvalExpectations, lintToolExpectationExecutables, type EvalLintWarn
|
|
|
4
4
|
export { FrictionCategorySchema, FrictionItemSchema, FrictionReportJsonSchema, FrictionReportSchema, FrictionSeveritySchema, type FrictionItem, type FrictionReport, } from './friction-schema.js';
|
|
5
5
|
export { mergeFragmentsToFriction, mergeFragmentsToGrading, mergeFragmentsToToolEval, } from './fragment-merge.js';
|
|
6
6
|
export { ToolEvalReportJsonSchema, ToolEvalReportSchema, ToolVerdictBodySchema, ToolVerdictSchema, type ToolEvalReport, type ToolVerdict, type ToolVerdictBody, } from './tool-eval-schema.js';
|
|
7
|
-
export { GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, type GradingVerdict, type NormalizedGrading, } from './grading-adapter.js';
|
|
7
|
+
export { GradingArmError, GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, type GradingVerdict, type NormalizedGrading, } from './grading-adapter.js';
|
|
8
8
|
export { GradedExpectationSchema, GradingReportJsonSchema, GradingReportSchema, GradingSummarySchema, type GradedExpectation, type GradingReport, type GradingSummary, } from './grading-schema.js';
|
|
9
9
|
export { assertSafeHarnessRoot, assertSafeWorkdir, deriveHarnessKey, HarnessLocationError, resolveHarnessRoot, } from './harness-location.js';
|
|
10
10
|
export { computeReconcilePlan, StagedEntrySchema, StagedManifestSchema, type ReconcilePlan, type StagedEntry, type StagedManifest, } from './manifest.js';
|
|
11
11
|
export { assembleChildEnv, computeEnvTokens, interpolateEnvValue, resolveInjectEnv, UnknownEnvTokenError, type AssembleChildEnvInput, type AssembledChildEnv, type EnvInterpolationTokens, type EnvTokenInputs, } from './declared-env.js';
|
|
12
|
-
export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError,
|
|
12
|
+
export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, SecurityAckError, SkillBuildError, type SkillTestFailureReason, skillTestFailureReason, } from './failure-reason.js';
|
|
13
13
|
export { BuildHookError, runPreStageBuild } from './build-hook.js';
|
|
14
14
|
export { DEFAULT_CONCURRENCY, DEFAULT_GRADER_MODEL } from './grader-model.js';
|
|
15
15
|
export { RateLimitSignal, runPipeline, type RunPipelineOptions } from './pipeline.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"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"}
|
package/dist/skill-test/index.js
CHANGED
|
@@ -4,12 +4,12 @@ export { lintEvalExpectations, lintToolExpectationExecutables } from './eval-lin
|
|
|
4
4
|
export { FrictionCategorySchema, FrictionItemSchema, FrictionReportJsonSchema, FrictionReportSchema, FrictionSeveritySchema, } from './friction-schema.js';
|
|
5
5
|
export { mergeFragmentsToFriction, mergeFragmentsToGrading, mergeFragmentsToToolEval, } from './fragment-merge.js';
|
|
6
6
|
export { ToolEvalReportJsonSchema, ToolEvalReportSchema, ToolVerdictBodySchema, ToolVerdictSchema, } from './tool-eval-schema.js';
|
|
7
|
-
export { GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, } from './grading-adapter.js';
|
|
7
|
+
export { GradingArmError, GradingNonceError, GradingSkewError, parseGradingJson, reconcileGrading, } from './grading-adapter.js';
|
|
8
8
|
export { GradedExpectationSchema, GradingReportJsonSchema, GradingReportSchema, GradingSummarySchema, } from './grading-schema.js';
|
|
9
9
|
export { assertSafeHarnessRoot, assertSafeWorkdir, deriveHarnessKey, HarnessLocationError, resolveHarnessRoot, } from './harness-location.js';
|
|
10
10
|
export { computeReconcilePlan, StagedEntrySchema, StagedManifestSchema, } from './manifest.js';
|
|
11
11
|
export { assembleChildEnv, computeEnvTokens, interpolateEnvValue, resolveInjectEnv, UnknownEnvTokenError, } from './declared-env.js';
|
|
12
|
-
export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError,
|
|
12
|
+
export { BootstrapNeededError, DuplicateStagedSkillError, InternalHarnessError, SecurityAckError, SkillBuildError, skillTestFailureReason, } from './failure-reason.js';
|
|
13
13
|
export { BuildHookError, runPreStageBuild } from './build-hook.js';
|
|
14
14
|
export { DEFAULT_CONCURRENCY, DEFAULT_GRADER_MODEL } from './grader-model.js';
|
|
15
15
|
export { RateLimitSignal, runPipeline } from './pipeline.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAwB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAwB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GAIrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EAEf,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,GAIb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,YAAY,GAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAIhB,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,7 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
import { VatError } from '@vibe-agent-toolkit/utils';
|
|
2
|
+
/**
|
|
3
|
+
* The harness root for a subject set is already locked.
|
|
4
|
+
*
|
|
5
|
+
* Reason `preflight`, not `internal`. This is the most user-correctable condition in
|
|
6
|
+
* the command — the remedy is "wait, or delete one file" — and it was the ONE error
|
|
7
|
+
* class in this feature with no declared reason, so it fell through
|
|
8
|
+
* `skillTestFailureReason`'s default to `internal`. The published CI recipe reads
|
|
9
|
+
* `internal` as "the harness broke, fail the build", which is exactly the wrong
|
|
10
|
+
* verdict for a lock held by the operator's own second terminal.
|
|
11
|
+
*
|
|
12
|
+
* The field below is what `skillTestFailureReason` READS — it is not decoration
|
|
13
|
+
* mirroring an `instanceof` row, which is what it was when it was added. Deleting it
|
|
14
|
+
* turns this back into `internal`.
|
|
15
|
+
*
|
|
16
|
+
* The message names `lockPath` because the lockfile is created `O_EXCL` in the
|
|
17
|
+
* DETERMINISTIC harness root and released only on normal exit or SIGINT/SIGTERM —
|
|
18
|
+
* a SIGKILL, an OOM, or a crash leaves it behind and every later run of that skill
|
|
19
|
+
* fails here, with no `--force` to escape. Until the staleness protocol (pid +
|
|
20
|
+
* timestamp + liveness probe + `--force`) lands in its own lane, naming the path
|
|
21
|
+
* and saying to delete it IS the escape hatch, so it belongs in the message rather
|
|
22
|
+
* than in a doc the operator is not currently reading.
|
|
23
|
+
*/
|
|
24
|
+
export declare class HarnessLockBusyError extends VatError {
|
|
25
|
+
readonly lockPath: string;
|
|
26
|
+
readonly reason: "preflight";
|
|
2
27
|
constructor(lockPath: string);
|
|
3
28
|
}
|
|
4
29
|
export interface HarnessLock {
|
|
30
|
+
/**
|
|
31
|
+
* Release the lock. NEVER THROWS — see {@link acquireHarnessLock}. Callers run
|
|
32
|
+
* this from a cleanup path and must be able to call it bare.
|
|
33
|
+
*/
|
|
5
34
|
release(): void;
|
|
6
35
|
}
|
|
7
36
|
/**
|
|
@@ -9,6 +38,34 @@ export interface HarnessLock {
|
|
|
9
38
|
* vat-vs-vat staging/result races for the same subject set. `wait: false`
|
|
10
39
|
* fails fast; the default `wait: true` is reserved for the CLI to poll (v1
|
|
11
40
|
* keeps the simple fail-fast — the CLI surfaces the busy message).
|
|
41
|
+
*
|
|
42
|
+
* ACQUIRING can throw (that is the whole point: EEXIST → {@link HarnessLockBusyError}).
|
|
43
|
+
* RELEASING cannot, and that asymmetry is deliberate. `rmSync(..., {force: true})`
|
|
44
|
+
* swallows only ENOENT, so an EPERM/EACCES/EROFS on the lockfile — a read-only
|
|
45
|
+
* volume, a `root`-owned temp dir, a Windows handle still open — threw out of the
|
|
46
|
+
* harness `finally` and REPLACED an already-good result (verdict computed, artifacts
|
|
47
|
+
* written, summary composed) with exit 1 and no summary, every artifact sitting
|
|
48
|
+
* unread on disk.
|
|
49
|
+
*
|
|
50
|
+
* The guard lives HERE rather than at the call site, where it originally went. A
|
|
51
|
+
* call-site wrapper is invisible to the compiler: reverting it to a bare
|
|
52
|
+
* `lock.release()` left the whole unit suite AND the integration suite green, so
|
|
53
|
+
* nothing but review stood between the fix and its own silent removal. Owning the
|
|
54
|
+
* contract in the definition — `release()` never throws — means there is no unwrapped
|
|
55
|
+
* call site left to lose. Note what that does NOT mean: `release(): void` encodes
|
|
56
|
+
* nothing about throwing, because TypeScript has no throws clause. The contract is
|
|
57
|
+
* held up by the two nested `try`s below and by the tests that pin each one, not by
|
|
58
|
+
* the signature.
|
|
59
|
+
*
|
|
60
|
+
* BOTH statements of the catch are guarded, and the second one is why: the warning
|
|
61
|
+
* write is itself an fd-level operation, and a synchronous EBADF/EPIPE on a file- or
|
|
62
|
+
* TTY-backed fd 2 threw straight back out — reinstating the exact failure the outer
|
|
63
|
+
* catch was added to prevent, on a path only reachable once something had already
|
|
64
|
+
* gone wrong. A test that mocks `process.stderr.write` to RETURN cannot see it.
|
|
65
|
+
*
|
|
66
|
+
* The failure is not silent: a lockfile that could not be removed will fail the NEXT
|
|
67
|
+
* run of this skill with a "busy" error, and an operator who saw nothing here has no
|
|
68
|
+
* way to connect the two.
|
|
12
69
|
*/
|
|
13
70
|
export declare function acquireHarnessLock(harnessRoot: string, opts?: {
|
|
14
71
|
wait?: boolean;
|