agent-hitch 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -2
- package/README.zh-CN.md +14 -2
- package/dist/bin/hitch.js +25 -3
- package/dist/bin/hitch.js.map +1 -1
- package/dist/scripts/canary-benchmark.js +54 -0
- package/dist/scripts/canary-benchmark.js.map +1 -0
- package/dist/scripts/canary-eval-scheduler-throughput.js +47 -0
- package/dist/scripts/canary-eval-scheduler-throughput.js.map +1 -0
- package/dist/scripts/check-architecture.js +3 -2
- package/dist/scripts/check-architecture.js.map +1 -1
- package/dist/src/adapters/catalog.js +2 -1
- package/dist/src/adapters/catalog.js.map +1 -1
- package/dist/src/adapters/providers/codex-auth.js +29 -0
- package/dist/src/adapters/providers/codex-auth.js.map +1 -0
- package/dist/src/adapters/providers/codex.js +23 -6
- package/dist/src/adapters/providers/codex.js.map +1 -1
- package/dist/src/adapters/providers/model-call.js +26 -0
- package/dist/src/adapters/providers/model-call.js.map +1 -0
- package/dist/src/artifacts/index.js +1 -1
- package/dist/src/artifacts/index.js.map +1 -1
- package/dist/src/artifacts/preparer.js +7 -2
- package/dist/src/artifacts/preparer.js.map +1 -1
- package/dist/src/backends/harbor/agent-budget.js +31 -0
- package/dist/src/backends/harbor/agent-budget.js.map +1 -0
- package/dist/src/backends/harbor/backend.js +6 -4
- package/dist/src/backends/harbor/backend.js.map +1 -1
- package/dist/src/backends/harbor/index.js +1 -0
- package/dist/src/backends/harbor/index.js.map +1 -1
- package/dist/src/backends/harbor/regrade.js +77 -0
- package/dist/src/backends/harbor/regrade.js.map +1 -0
- package/dist/src/backends/index.js +1 -0
- package/dist/src/backends/index.js.map +1 -1
- package/dist/src/benchmarks/index.js +3 -0
- package/dist/src/benchmarks/index.js.map +1 -0
- package/dist/src/benchmarks/loader.js +271 -0
- package/dist/src/benchmarks/loader.js.map +1 -0
- package/dist/src/benchmarks/metrics.js +16 -0
- package/dist/src/benchmarks/metrics.js.map +1 -0
- package/dist/src/benchmarks/toml.js +13 -0
- package/dist/src/benchmarks/toml.js.map +1 -0
- package/dist/src/benchmarks/validation.js +242 -0
- package/dist/src/benchmarks/validation.js.map +1 -0
- package/dist/src/cli/arguments.js +6 -4
- package/dist/src/cli/arguments.js.map +1 -1
- package/dist/src/cli/commands/benchmark.js +22 -0
- package/dist/src/cli/commands/benchmark.js.map +1 -0
- package/dist/src/cli/commands/capabilities.js +18 -0
- package/dist/src/cli/commands/capabilities.js.map +1 -0
- package/dist/src/cli/commands/eval.js +15 -3
- package/dist/src/cli/commands/eval.js.map +1 -1
- package/dist/src/cli/commands/run.js +37 -15
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/commands/trajectory.js +96 -5
- package/dist/src/cli/commands/trajectory.js.map +1 -1
- package/dist/src/cli/commands/verifier.js +36 -0
- package/dist/src/cli/commands/verifier.js.map +1 -0
- package/dist/src/cli/main.js +6 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/output.js +14 -2
- package/dist/src/cli/output.js.map +1 -1
- package/dist/src/control-plane/eval-control-work.js +5 -0
- package/dist/src/control-plane/eval-control-work.js.map +1 -1
- package/dist/src/control-plane/eval-scheduler.js +4 -1
- package/dist/src/control-plane/eval-scheduler.js.map +1 -1
- package/dist/src/control-plane/index.js +1 -1
- package/dist/src/control-plane/index.js.map +1 -1
- package/dist/src/control-plane/remote-result-transport.js +3 -0
- package/dist/src/control-plane/remote-result-transport.js.map +1 -1
- package/dist/src/control-plane/remote-work-coordinator.js +1 -0
- package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
- package/dist/src/control-plane/remote-work-item.js +62 -0
- package/dist/src/control-plane/remote-work-item.js.map +1 -0
- package/dist/src/control-plane/remote-work-recovery.js +44 -5
- package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
- package/dist/src/control-plane/remote-worker-protocol.js +2 -23
- package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
- package/dist/src/control-plane/rerun-scheduler.js +51 -14
- package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
- package/dist/src/control-plane/rerun-submission.js +10 -4
- package/dist/src/control-plane/rerun-submission.js.map +1 -1
- package/dist/src/control-plane/work-admission.js +2 -0
- package/dist/src/control-plane/work-admission.js.map +1 -1
- package/dist/src/control-plane/work-dispatcher.js +9 -1
- package/dist/src/control-plane/work-dispatcher.js.map +1 -1
- package/dist/src/controller-runtime/hash.js +7 -2
- package/dist/src/controller-runtime/hash.js.map +1 -1
- package/dist/src/daemon/auth.js +5 -0
- package/dist/src/daemon/auth.js.map +1 -1
- package/dist/src/domain/benchmarks.js +2 -0
- package/dist/src/domain/benchmarks.js.map +1 -0
- package/dist/src/domain/index.js +4 -0
- package/dist/src/domain/index.js.map +1 -1
- package/dist/src/domain/runs.js.map +1 -1
- package/dist/src/domain/validation.js +11 -4
- package/dist/src/domain/validation.js.map +1 -1
- package/dist/src/domain/verifier-evidence-validation.js +214 -0
- package/dist/src/domain/verifier-evidence-validation.js.map +1 -0
- package/dist/src/domain/verifier-evidence.js +3 -0
- package/dist/src/domain/verifier-evidence.js.map +1 -0
- package/dist/src/domain/verifier-score-contract.js +232 -0
- package/dist/src/domain/verifier-score-contract.js.map +1 -0
- package/dist/src/evals/benchmark-adapter-manifest.js +219 -0
- package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -0
- package/dist/src/evals/benchmark-candidate.js +36 -0
- package/dist/src/evals/benchmark-candidate.js.map +1 -0
- package/dist/src/evals/benchmark-run.js +166 -0
- package/dist/src/evals/benchmark-run.js.map +1 -0
- package/dist/src/evals/collect-only-rerun.js +2 -1
- package/dist/src/evals/collect-only-rerun.js.map +1 -1
- package/dist/src/evals/directory.js +1 -1
- package/dist/src/evals/directory.js.map +1 -1
- package/dist/src/evals/duration-estimator.js +126 -0
- package/dist/src/evals/duration-estimator.js.map +1 -0
- package/dist/src/evals/eval-lifecycle-events.js +13 -0
- package/dist/src/evals/eval-lifecycle-events.js.map +1 -1
- package/dist/src/evals/eval-logical-plan.js +51 -0
- package/dist/src/evals/eval-logical-plan.js.map +1 -0
- package/dist/src/evals/eval-result-builder.js +81 -0
- package/dist/src/evals/eval-result-builder.js.map +1 -0
- package/dist/src/evals/evolution-baseline.js +191 -0
- package/dist/src/evals/evolution-baseline.js.map +1 -0
- package/dist/src/evals/execution-plan.js +39 -3
- package/dist/src/evals/execution-plan.js.map +1 -1
- package/dist/src/evals/failure-classifier.js +61 -0
- package/dist/src/evals/failure-classifier.js.map +1 -0
- package/dist/src/evals/harbor-artifact-builder.js +6 -2
- package/dist/src/evals/harbor-artifact-builder.js.map +1 -1
- package/dist/src/evals/harbor-bridge-error.js +41 -1
- package/dist/src/evals/harbor-bridge-error.js.map +1 -1
- package/dist/src/evals/harbor-node-runtime.js +146 -0
- package/dist/src/evals/harbor-node-runtime.js.map +1 -0
- package/dist/src/evals/index.js +15 -0
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/infrastructure-retry.js +109 -22
- package/dist/src/evals/infrastructure-retry.js.map +1 -1
- package/dist/src/evals/native-phase-evidence.js +440 -0
- package/dist/src/evals/native-phase-evidence.js.map +1 -0
- package/dist/src/evals/physical-retry-work.js +31 -0
- package/dist/src/evals/physical-retry-work.js.map +1 -0
- package/dist/src/evals/planned-execution-support.js +22 -10
- package/dist/src/evals/planned-execution-support.js.map +1 -1
- package/dist/src/evals/planned-execution.js +120 -112
- package/dist/src/evals/planned-execution.js.map +1 -1
- package/dist/src/evals/planned-progress-publisher.js +62 -0
- package/dist/src/evals/planned-progress-publisher.js.map +1 -0
- package/dist/src/evals/planned-retry-execution.js +174 -0
- package/dist/src/evals/planned-retry-execution.js.map +1 -0
- package/dist/src/evals/planned-retry-lifecycle.js +4 -2
- package/dist/src/evals/planned-retry-lifecycle.js.map +1 -1
- package/dist/src/evals/preparation-rerun.js +225 -0
- package/dist/src/evals/preparation-rerun.js.map +1 -0
- package/dist/src/evals/progress.js +48 -8
- package/dist/src/evals/progress.js.map +1 -1
- package/dist/src/evals/recovery.js +54 -4
- package/dist/src/evals/recovery.js.map +1 -1
- package/dist/src/evals/regrade-evidence.js +77 -0
- package/dist/src/evals/regrade-evidence.js.map +1 -0
- package/dist/src/evals/remote-infrastructure-retry.js +84 -18
- package/dist/src/evals/remote-infrastructure-retry.js.map +1 -1
- package/dist/src/evals/request.js +21 -3
- package/dist/src/evals/request.js.map +1 -1
- package/dist/src/evals/rerun-inputs.js +19 -0
- package/dist/src/evals/rerun-inputs.js.map +1 -1
- package/dist/src/evals/rerun-types.js +2 -6
- package/dist/src/evals/rerun-types.js.map +1 -1
- package/dist/src/evals/rerun.js +27 -20
- package/dist/src/evals/rerun.js.map +1 -1
- package/dist/src/evals/result-helpers.js +13 -0
- package/dist/src/evals/result-helpers.js.map +1 -1
- package/dist/src/evals/retry-backoff.js +20 -0
- package/dist/src/evals/retry-backoff.js.map +1 -0
- package/dist/src/evals/retry-state.js +195 -0
- package/dist/src/evals/retry-state.js.map +1 -0
- package/dist/src/evals/scheduler-metrics.js +95 -0
- package/dist/src/evals/scheduler-metrics.js.map +1 -0
- package/dist/src/evals/scheduler-trace-replay.js +107 -0
- package/dist/src/evals/scheduler-trace-replay.js.map +1 -0
- package/dist/src/evals/service.js +87 -138
- package/dist/src/evals/service.js.map +1 -1
- package/dist/src/evals/trial-import.js +47 -50
- package/dist/src/evals/trial-import.js.map +1 -1
- package/dist/src/evals/trial-publication-recovery.js +45 -5
- package/dist/src/evals/trial-publication-recovery.js.map +1 -1
- package/dist/src/evals/trial-reference-validation.js +49 -0
- package/dist/src/evals/trial-reference-validation.js.map +1 -0
- package/dist/src/evals/verifier-artifacts.js +317 -0
- package/dist/src/evals/verifier-artifacts.js.map +1 -0
- package/dist/src/evals/verifier-eligibility.js +25 -0
- package/dist/src/evals/verifier-eligibility.js.map +1 -0
- package/dist/src/evals/verifier-only-rerun.js +210 -0
- package/dist/src/evals/verifier-only-rerun.js.map +1 -0
- package/dist/src/evals/verifier-runtime.js +61 -0
- package/dist/src/evals/verifier-runtime.js.map +1 -0
- package/dist/src/evals/verifier-score-artifacts.js +119 -0
- package/dist/src/evals/verifier-score-artifacts.js.map +1 -0
- package/dist/src/foundation/contained-file.js +85 -0
- package/dist/src/foundation/contained-file.js.map +1 -0
- package/dist/src/foundation/credential-redaction.js +26 -1
- package/dist/src/foundation/credential-redaction.js.map +1 -1
- package/dist/src/foundation/fs.js +2 -1
- package/dist/src/foundation/fs.js.map +1 -1
- package/dist/src/foundation/index.js +2 -1
- package/dist/src/foundation/index.js.map +1 -1
- package/dist/src/runs/adapter-process.js +12 -0
- package/dist/src/runs/adapter-process.js.map +1 -0
- package/dist/src/runs/executor.js +24 -30
- package/dist/src/runs/executor.js.map +1 -1
- package/dist/src/runs/finalizer.js +17 -0
- package/dist/src/runs/finalizer.js.map +1 -1
- package/dist/src/runs/index.js +5 -0
- package/dist/src/runs/index.js.map +1 -1
- package/dist/src/runs/phase-bundle.js +86 -0
- package/dist/src/runs/phase-bundle.js.map +1 -0
- package/dist/src/runs/phase-cancellation.js +107 -0
- package/dist/src/runs/phase-cancellation.js.map +1 -0
- package/dist/src/runs/phase-group.js +113 -0
- package/dist/src/runs/phase-group.js.map +1 -0
- package/dist/src/runs/query.js +1 -1
- package/dist/src/runs/query.js.map +1 -1
- package/dist/src/runs/records.js +3 -0
- package/dist/src/runs/records.js.map +1 -1
- package/dist/src/runs/request.js +4 -2
- package/dist/src/runs/request.js.map +1 -1
- package/dist/src/runs/verifier-evidence-redaction.js +61 -0
- package/dist/src/runs/verifier-evidence-redaction.js.map +1 -0
- package/dist/src/runs/verifier-evidence.js +459 -0
- package/dist/src/runs/verifier-evidence.js.map +1 -0
- package/dist/src/runs/verifier-structured-evidence.js +83 -0
- package/dist/src/runs/verifier-structured-evidence.js.map +1 -0
- package/dist/src/trajectories/analysis.js +288 -0
- package/dist/src/trajectories/analysis.js.map +1 -0
- package/dist/src/trajectories/chunk-projection.js +148 -0
- package/dist/src/trajectories/chunk-projection.js.map +1 -0
- package/dist/src/trajectories/content-projection.js +389 -0
- package/dist/src/trajectories/content-projection.js.map +1 -0
- package/dist/src/trajectories/dsh-chunk-contract.js +176 -0
- package/dist/src/trajectories/dsh-chunk-contract.js.map +1 -0
- package/dist/src/trajectories/dsh-contract.js +284 -0
- package/dist/src/trajectories/dsh-contract.js.map +1 -0
- package/dist/src/trajectories/events-chunk-drill.js +95 -0
- package/dist/src/trajectories/events-chunk-drill.js.map +1 -0
- package/dist/src/trajectories/events-page.js +367 -0
- package/dist/src/trajectories/events-page.js.map +1 -0
- package/dist/src/trajectories/index.js +3 -0
- package/dist/src/trajectories/index.js.map +1 -1
- package/dist/src/trajectories/request-attempt.js +47 -0
- package/dist/src/trajectories/request-attempt.js.map +1 -0
- package/dist/src/trajectories/stream-reader.js +311 -0
- package/dist/src/trajectories/stream-reader.js.map +1 -0
- package/dist/src/trajectories/surface-fold.js +126 -0
- package/dist/src/trajectories/surface-fold.js.map +1 -0
- package/dist/src/workers/remote-harbor-worker.js +3 -0
- package/dist/src/workers/remote-harbor-worker.js.map +1 -1
- package/docs/schemas/benchmark-hook-request-v1.schema.json +65 -0
- package/docs/schemas/benchmark-hook-response-v1.schema.json +75 -0
- package/docs/schemas/benchmark-hook-v1.schema.json +33 -0
- package/docs/schemas/benchmark-lock-v1.schema.json +351 -0
- package/docs/schemas/benchmark-metric-v1.schema.json +37 -0
- package/docs/schemas/benchmark-package-v1.schema.json +167 -0
- package/docs/schemas/benchmark-phase-group.schema.json +41 -0
- package/docs/schemas/benchmark-profile-v1.schema.json +141 -0
- package/docs/schemas/benchmark-task-v1.schema.json +384 -0
- package/docs/schemas/benchmark-tool-result-v1.schema.json +30 -0
- package/docs/schemas/error.schema.json +22 -0
- package/docs/schemas/eval-progress.schema.json +1 -15
- package/docs/schemas/eval-rerun-result.schema.json +6 -1
- package/docs/schemas/eval-rerun-submission.schema.json +3 -1
- package/docs/schemas/eval-result.schema.json +1 -15
- package/docs/schemas/eval-trial-publication.schema.json +1 -25
- package/docs/schemas/eval-trial-reference.schema.json +129 -0
- package/docs/schemas/regrade-assessment-reference.schema.json +11 -0
- package/docs/schemas/run-context.schema.json +15 -0
- package/docs/schemas/run-manifest.schema.json +4 -0
- package/docs/schemas/run-request.schema.json +4 -0
- package/docs/schemas/trajectory-analysis.schema.json +258 -0
- package/docs/schemas/trajectory-events-page.schema.json +40 -0
- package/docs/schemas/verifier-assessment.schema.json +77 -0
- package/docs/schemas/verifier-evidence.schema.json +276 -0
- package/integrations/harbor/hitch_benchmark.py +252 -0
- package/integrations/harbor/hitch_candidate_recycle.py +262 -0
- package/integrations/harbor/hitch_harbor_agent.py +541 -43
- package/integrations/harbor/hitch_harbor_environment.py +138 -0
- package/integrations/harbor/hitch_harbor_verifier.py +60 -2
- package/integrations/harbor/hitch_phase_supervisor.py +452 -0
- package/integrations/harbor/hitch_tool_client.mjs +91 -0
- package/integrations/model-call/cli.js +57 -0
- package/package.json +17 -6
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { assertVerifierScoreEvidenceConsistency, parseVerifierFeedback, parseVerifierProcessEvidence, parseVerifierScores, } from "./verifier-score-contract.js";
|
|
2
|
+
import { asArray, asInteger, asRecord, asSha256, asString, validateEvalRunParent, validateRunObservation } from "./validation.js";
|
|
3
|
+
const ARTIFACT_NAMES = new Set(["ctrf.json", "test-stdout.txt", "test-stderr.txt", "stdout.txt", "stderr.txt"]);
|
|
4
|
+
const STATUSES = new Set(["complete", "result_only", "missing", "corrupt"]);
|
|
5
|
+
export function validateVerifierEvidence(value) {
|
|
6
|
+
const record = asRecord(value, "verifier evidence");
|
|
7
|
+
exact(record, ["schema_version", "kind", "run_id", "parent", "observation", "verifier", "redactions"], "verifier evidence");
|
|
8
|
+
if (record.schema_version !== "1" || record.kind !== "verifier-evidence")
|
|
9
|
+
throw new TypeError("unsupported verifier evidence schema");
|
|
10
|
+
const runId = asString(record.run_id, "verifier evidence run_id");
|
|
11
|
+
if (!/^run_[a-f0-9]{32}$/.test(runId))
|
|
12
|
+
throw new TypeError("verifier evidence run_id is invalid");
|
|
13
|
+
const parentRecord = record.parent === undefined ? undefined : asRecord(record.parent, "verifier evidence parent");
|
|
14
|
+
if (parentRecord)
|
|
15
|
+
exact(parentRecord, ["eval_id", "trial_id", "attempt"], "verifier evidence parent");
|
|
16
|
+
const parent = parentRecord === undefined ? undefined : validateEvalRunParent({ kind: "eval", ...parentRecord });
|
|
17
|
+
if (parent && !/^eval_[a-f0-9]{32}$/.test(parent.eval_id))
|
|
18
|
+
throw new TypeError("verifier evidence parent eval_id is invalid");
|
|
19
|
+
const observation = record.observation === undefined ? undefined : validateRunObservation(record.observation);
|
|
20
|
+
const verifier = parseVerifier(record.verifier);
|
|
21
|
+
const redactions = record.redactions === undefined ? undefined : parseRedactions(record.redactions);
|
|
22
|
+
return {
|
|
23
|
+
schema_version: "1",
|
|
24
|
+
kind: "verifier-evidence",
|
|
25
|
+
run_id: runId,
|
|
26
|
+
...(parent ? { parent: { eval_id: parent.eval_id, trial_id: parent.trial_id, attempt: parent.attempt } } : {}),
|
|
27
|
+
...(observation ? { observation } : {}),
|
|
28
|
+
verifier,
|
|
29
|
+
...(redactions ? { redactions } : {}),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function parseVerifier(value) {
|
|
33
|
+
const record = asRecord(value, "verifier evidence payload");
|
|
34
|
+
exact(record, ["status", "result", "result_sha256", "scores", "process", "feedback", "structured_artifacts", "diagnostics", "issues"], "verifier evidence payload");
|
|
35
|
+
const status = asString(record.status, "verifier evidence status");
|
|
36
|
+
if (!STATUSES.has(status))
|
|
37
|
+
throw new TypeError("verifier evidence status is invalid");
|
|
38
|
+
const result = record.result === undefined ? undefined : jsonValue(record.result, "verifier result");
|
|
39
|
+
const resultSha256 = record.result_sha256 === undefined ? undefined : asSha256(record.result_sha256, "verifier result digest");
|
|
40
|
+
const scores = record.scores === undefined ? undefined : parseScores(record.scores);
|
|
41
|
+
const process = record.process === undefined ? undefined : parseVerifierProcessEvidence(record.process);
|
|
42
|
+
const feedback = record.feedback === undefined ? undefined : parseVerifierFeedback(record.feedback, process);
|
|
43
|
+
const structuredArtifacts = record.structured_artifacts === undefined ? undefined : parseStructuredArtifacts(record.structured_artifacts);
|
|
44
|
+
const diagnostics = record.diagnostics === undefined ? undefined : parseDiagnostics(record.diagnostics);
|
|
45
|
+
const issues = record.issues === undefined ? undefined : asArray(record.issues, "verifier issues").map((issue) => {
|
|
46
|
+
const text = asString(issue, "verifier issue");
|
|
47
|
+
if (!text || text.length > 1024)
|
|
48
|
+
throw new TypeError("verifier issue is invalid");
|
|
49
|
+
return text;
|
|
50
|
+
});
|
|
51
|
+
if ((status === "complete" || status === "result_only") && (result === undefined || resultSha256 === undefined)) {
|
|
52
|
+
throw new TypeError(`${status} verifier evidence requires a result and digest`);
|
|
53
|
+
}
|
|
54
|
+
if (status === "complete" && !hasArtifactDiagnostics(diagnostics)) {
|
|
55
|
+
throw new TypeError("complete verifier evidence requires CTRF, stdout, or stderr diagnostics");
|
|
56
|
+
}
|
|
57
|
+
if (status === "result_only" && hasArtifactDiagnostics(diagnostics)) {
|
|
58
|
+
throw new TypeError("result_only verifier evidence must not include CTRF, stdout, or stderr diagnostics");
|
|
59
|
+
}
|
|
60
|
+
if (status === "missing" && result !== undefined)
|
|
61
|
+
throw new TypeError("missing verifier evidence must not include a result");
|
|
62
|
+
if (status !== "corrupt") {
|
|
63
|
+
const resultScores = parseVerifierScores(result);
|
|
64
|
+
if (JSON.stringify(resultScores) !== JSON.stringify(scores))
|
|
65
|
+
throw new TypeError("verifier scores do not match the result");
|
|
66
|
+
assertVerifierScoreEvidenceConsistency({
|
|
67
|
+
scores,
|
|
68
|
+
...(process === undefined ? {} : { process }),
|
|
69
|
+
...(feedback === undefined ? {} : { feedback }),
|
|
70
|
+
});
|
|
71
|
+
if ((process !== undefined) !== (structuredArtifacts?.process !== undefined)
|
|
72
|
+
|| (feedback !== undefined) !== (structuredArtifacts?.feedback !== undefined)) {
|
|
73
|
+
throw new TypeError("structured verifier artifact metadata is incomplete");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
status: status,
|
|
78
|
+
...(result === undefined ? {} : { result }),
|
|
79
|
+
...(resultSha256 === undefined ? {} : { result_sha256: resultSha256 }),
|
|
80
|
+
...(scores === undefined ? {} : { scores }),
|
|
81
|
+
...(process === undefined ? {} : { process }),
|
|
82
|
+
...(feedback === undefined ? {} : { feedback }),
|
|
83
|
+
...(structuredArtifacts === undefined ? {} : { structured_artifacts: structuredArtifacts }),
|
|
84
|
+
...(diagnostics === undefined ? {} : { diagnostics }),
|
|
85
|
+
...(issues === undefined ? {} : { issues }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function parseScores(value) {
|
|
89
|
+
const record = asRecord(value, "verifier scores");
|
|
90
|
+
exact(record, ["total_score", "process_score", "normalization"], "verifier scores");
|
|
91
|
+
const total = finite(record.total_score, "verifier total_score");
|
|
92
|
+
const process = record.process_score === undefined ? undefined : finite(record.process_score, "verifier process_score");
|
|
93
|
+
if (record.normalization !== "standard" && record.normalization !== "legacy-reward")
|
|
94
|
+
throw new TypeError("verifier score normalization is invalid");
|
|
95
|
+
if (record.normalization === "legacy-reward" && process !== undefined)
|
|
96
|
+
throw new TypeError("legacy verifier scores cannot include process_score");
|
|
97
|
+
return { total_score: total, ...(process === undefined ? {} : { process_score: process }), normalization: record.normalization };
|
|
98
|
+
}
|
|
99
|
+
function parseStructuredArtifacts(value) {
|
|
100
|
+
const record = asRecord(value, "structured verifier artifacts");
|
|
101
|
+
exact(record, ["process", "feedback"], "structured verifier artifacts");
|
|
102
|
+
const parse = (raw, name) => {
|
|
103
|
+
const artifact = asRecord(raw, `structured verifier ${name} artifact`);
|
|
104
|
+
exact(artifact, ["ref", "bytes", "sha256"], `structured verifier ${name} artifact`);
|
|
105
|
+
if (artifact.ref !== `verifier/${name}.json`)
|
|
106
|
+
throw new TypeError(`structured verifier ${name} ref is invalid`);
|
|
107
|
+
const bytes = asInteger(artifact.bytes, `structured verifier ${name} bytes`);
|
|
108
|
+
if (bytes < 0)
|
|
109
|
+
throw new TypeError(`structured verifier ${name} bytes are invalid`);
|
|
110
|
+
return {
|
|
111
|
+
ref: `verifier/${name}.json`,
|
|
112
|
+
bytes,
|
|
113
|
+
sha256: asSha256(artifact.sha256, `structured verifier ${name} digest`),
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
if (record.process === undefined && record.feedback === undefined)
|
|
117
|
+
throw new TypeError("structured verifier artifacts must not be empty");
|
|
118
|
+
return {
|
|
119
|
+
...(record.process === undefined ? {} : { process: parse(record.process, "process") }),
|
|
120
|
+
...(record.feedback === undefined ? {} : { feedback: parse(record.feedback, "feedback") }),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function finite(value, label) {
|
|
124
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
125
|
+
throw new TypeError(`${label} must be finite`);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
function hasArtifactDiagnostics(diagnostics) {
|
|
129
|
+
return diagnostics?.ctrf !== undefined || Boolean(diagnostics?.stdout?.length) || Boolean(diagnostics?.stderr?.length);
|
|
130
|
+
}
|
|
131
|
+
function parseDiagnostics(value) {
|
|
132
|
+
const record = asRecord(value, "verifier diagnostics");
|
|
133
|
+
exact(record, ["ctrf", "stdout", "stderr", "infrastructure_error", "retry_history"], "verifier diagnostics");
|
|
134
|
+
const ctrf = record.ctrf === undefined ? undefined : parseArtifact(record.ctrf);
|
|
135
|
+
const stdout = record.stdout === undefined ? undefined : asArray(record.stdout, "verifier stdout").map(parseArtifact);
|
|
136
|
+
const stderr = record.stderr === undefined ? undefined : asArray(record.stderr, "verifier stderr").map(parseArtifact);
|
|
137
|
+
const infrastructureError = record.infrastructure_error === undefined
|
|
138
|
+
? undefined : jsonValue(record.infrastructure_error, "verifier infrastructure error");
|
|
139
|
+
const retryHistory = record.retry_history === undefined
|
|
140
|
+
? undefined : asArray(record.retry_history, "verifier retry history").map((entry) => jsonValue(entry, "verifier retry entry"));
|
|
141
|
+
if (!ctrf && !stdout?.length && !stderr?.length && infrastructureError === undefined && !retryHistory?.length) {
|
|
142
|
+
throw new TypeError("verifier diagnostics must not be empty");
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
...(ctrf ? { ctrf } : {}),
|
|
146
|
+
...(stdout?.length ? { stdout } : {}),
|
|
147
|
+
...(stderr?.length ? { stderr } : {}),
|
|
148
|
+
...(infrastructureError === undefined ? {} : { infrastructure_error: infrastructureError }),
|
|
149
|
+
...(retryHistory?.length ? { retry_history: retryHistory } : {}),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function parseArtifact(value) {
|
|
153
|
+
const record = asRecord(value, "verifier artifact excerpt");
|
|
154
|
+
exact(record, ["name", "media_type", "bytes", "sha256", "truncated", "json", "text"], "verifier artifact excerpt");
|
|
155
|
+
const name = asString(record.name, "verifier artifact name");
|
|
156
|
+
if (!ARTIFACT_NAMES.has(name))
|
|
157
|
+
throw new TypeError("verifier artifact name is invalid");
|
|
158
|
+
const mediaType = asString(record.media_type, "verifier artifact media_type");
|
|
159
|
+
if (mediaType !== (name === "ctrf.json" ? "application/json" : "text/plain"))
|
|
160
|
+
throw new TypeError("verifier artifact media_type is invalid");
|
|
161
|
+
const bytes = asInteger(record.bytes, "verifier artifact bytes");
|
|
162
|
+
if (bytes < 0 || typeof record.truncated !== "boolean")
|
|
163
|
+
throw new TypeError("verifier artifact size metadata is invalid");
|
|
164
|
+
const json = record.json === undefined ? undefined : jsonValue(record.json, "verifier artifact JSON");
|
|
165
|
+
const text = record.text === undefined ? undefined : asString(record.text, "verifier artifact text");
|
|
166
|
+
if ((json === undefined) === (text === undefined))
|
|
167
|
+
throw new TypeError("verifier artifact requires exactly one content representation");
|
|
168
|
+
if (json !== undefined && (mediaType !== "application/json" || record.truncated === true)) {
|
|
169
|
+
throw new TypeError("only complete JSON verifier artifacts may use json content");
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
name: name,
|
|
173
|
+
media_type: mediaType,
|
|
174
|
+
bytes,
|
|
175
|
+
sha256: asSha256(record.sha256, "verifier artifact digest"),
|
|
176
|
+
truncated: record.truncated,
|
|
177
|
+
...(json === undefined ? { text: text } : { json }),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function parseRedactions(value) {
|
|
181
|
+
const result = asArray(value, "verifier redactions").map((entry) => {
|
|
182
|
+
const record = asRecord(entry, "verifier redaction");
|
|
183
|
+
exact(record, ["rule_id", "count"], "verifier redaction");
|
|
184
|
+
const ruleId = asString(record.rule_id, "verifier redaction rule_id");
|
|
185
|
+
const count = asInteger(record.count, "verifier redaction count");
|
|
186
|
+
if (!/^[a-z0-9][a-z0-9._-]{0,127}$/.test(ruleId) || count < 1)
|
|
187
|
+
throw new TypeError("verifier redaction is invalid");
|
|
188
|
+
return { rule_id: ruleId, count };
|
|
189
|
+
});
|
|
190
|
+
const canonical = [...result].sort((left, right) => left.rule_id.localeCompare(right.rule_id));
|
|
191
|
+
if (new Set(result.map((entry) => entry.rule_id)).size !== result.length || JSON.stringify(canonical) !== JSON.stringify(result)) {
|
|
192
|
+
throw new TypeError("verifier redactions are not canonical");
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
function jsonValue(value, label) {
|
|
197
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
198
|
+
return value;
|
|
199
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
200
|
+
return value;
|
|
201
|
+
if (Array.isArray(value))
|
|
202
|
+
return value.map((entry) => jsonValue(entry, label));
|
|
203
|
+
if (value && typeof value === "object") {
|
|
204
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, jsonValue(entry, label)]));
|
|
205
|
+
}
|
|
206
|
+
throw new TypeError(`${label} is not JSON data`);
|
|
207
|
+
}
|
|
208
|
+
function exact(record, allowed, label) {
|
|
209
|
+
const fields = new Set(allowed);
|
|
210
|
+
const unexpected = Object.keys(record).find((field) => !fields.has(field));
|
|
211
|
+
if (unexpected)
|
|
212
|
+
throw new TypeError(`${label} has unknown field: ${unexpected}`);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=verifier-evidence-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-evidence-validation.js","sourceRoot":"","sources":["../../../src/domain/verifier-evidence-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-evidence.js","sourceRoot":"","sources":["../../../src/domain/verifier-evidence.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
const SCORE_EPSILON = 1e-12;
|
|
2
|
+
/** Parse the Harbor verifier result into the benchmark-neutral score channels. */
|
|
3
|
+
export function parseVerifierScores(value) {
|
|
4
|
+
if (!isRecord(value))
|
|
5
|
+
return undefined;
|
|
6
|
+
const rewards = value.rewards;
|
|
7
|
+
if (!isRecord(rewards))
|
|
8
|
+
return undefined;
|
|
9
|
+
if (rewards.total_score === undefined) {
|
|
10
|
+
if (rewards.process_score !== undefined)
|
|
11
|
+
throw new TypeError("process_score requires total_score");
|
|
12
|
+
const reward = optionalFinite(rewards.reward, "reward");
|
|
13
|
+
return reward === undefined ? undefined : { total_score: reward, normalization: "legacy-reward" };
|
|
14
|
+
}
|
|
15
|
+
const reward = finite(rewards.reward, "reward");
|
|
16
|
+
const totalScore = finite(rewards.total_score, "total_score");
|
|
17
|
+
if (!sameScore(reward, totalScore))
|
|
18
|
+
throw new TypeError("reward must equal total_score");
|
|
19
|
+
const processScore = optionalFinite(rewards.process_score, "process_score");
|
|
20
|
+
return {
|
|
21
|
+
total_score: totalScore,
|
|
22
|
+
...(processScore === undefined ? {} : { process_score: processScore }),
|
|
23
|
+
normalization: "standard",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function parseVerifierProcessEvidence(value) {
|
|
27
|
+
const record = object(value, "process evidence");
|
|
28
|
+
exact(record, ["schema_version", "metric", "score", "detail_status", "passed", "total", "excluded", "components"], "process evidence");
|
|
29
|
+
if (record.schema_version !== "1")
|
|
30
|
+
throw new TypeError("unsupported process evidence schema");
|
|
31
|
+
const metric = identifier(record.metric, "process metric");
|
|
32
|
+
const score = finite(record.score, "process score");
|
|
33
|
+
if (record.detail_status !== "components" && record.detail_status !== "aggregate-only") {
|
|
34
|
+
throw new TypeError("process detail_status is invalid");
|
|
35
|
+
}
|
|
36
|
+
if (record.detail_status === "aggregate-only") {
|
|
37
|
+
if (record.passed !== undefined || record.total !== undefined || record.excluded !== undefined || record.components !== undefined) {
|
|
38
|
+
throw new TypeError("aggregate-only process evidence must omit components and counts");
|
|
39
|
+
}
|
|
40
|
+
return { schema_version: "1", metric, score, detail_status: "aggregate-only" };
|
|
41
|
+
}
|
|
42
|
+
const passed = nonNegativeInteger(record.passed, "process passed");
|
|
43
|
+
const total = nonNegativeInteger(record.total, "process total");
|
|
44
|
+
const excluded = nonNegativeInteger(record.excluded, "process excluded");
|
|
45
|
+
if (passed > total)
|
|
46
|
+
throw new TypeError("process passed exceeds total");
|
|
47
|
+
if (!Array.isArray(record.components))
|
|
48
|
+
throw new TypeError("component process evidence requires components");
|
|
49
|
+
const components = record.components.map((component, index) => parseComponent(component, index));
|
|
50
|
+
if (new Set(components.map((component) => component.id)).size !== components.length) {
|
|
51
|
+
throw new TypeError("process component IDs must be unique");
|
|
52
|
+
}
|
|
53
|
+
const actualPassed = components.filter((component) => component.status === "passed").length;
|
|
54
|
+
const actualTotal = components.filter((component) => component.status !== "excluded").length;
|
|
55
|
+
const actualExcluded = components.length - actualTotal;
|
|
56
|
+
if (passed !== actualPassed || total !== actualTotal || excluded !== actualExcluded) {
|
|
57
|
+
throw new TypeError("process component counts are inconsistent");
|
|
58
|
+
}
|
|
59
|
+
const denominator = components
|
|
60
|
+
.filter((component) => component.status !== "excluded")
|
|
61
|
+
.reduce((sum, component) => sum + component.weight, 0);
|
|
62
|
+
const numerator = components
|
|
63
|
+
.filter((component) => component.status === "passed")
|
|
64
|
+
.reduce((sum, component) => sum + component.weight, 0);
|
|
65
|
+
const aggregate = denominator === 0 ? 0 : numerator / denominator;
|
|
66
|
+
if (!sameScore(score, aggregate))
|
|
67
|
+
throw new TypeError("process score does not match component weights");
|
|
68
|
+
return { schema_version: "1", metric, score, detail_status: "components", passed, total, excluded, components };
|
|
69
|
+
}
|
|
70
|
+
export function parseVerifierFeedback(value, process) {
|
|
71
|
+
const record = object(value, "verifier feedback");
|
|
72
|
+
exact(record, ["schema_version", "items"], "verifier feedback");
|
|
73
|
+
if (record.schema_version !== "1" || !Array.isArray(record.items))
|
|
74
|
+
throw new TypeError("verifier feedback schema is invalid");
|
|
75
|
+
const componentIds = new Set(process?.components?.map((component) => component.id) ?? []);
|
|
76
|
+
const items = record.items.map((item, index) => {
|
|
77
|
+
const entry = object(item, `verifier feedback item ${index}`);
|
|
78
|
+
exact(entry, ["code", "severity", "message", "component_ids", "trajectory_refs"], `verifier feedback item ${index}`);
|
|
79
|
+
const code = identifier(entry.code, `verifier feedback item ${index} code`);
|
|
80
|
+
if (entry.severity !== "info" && entry.severity !== "warning" && entry.severity !== "error") {
|
|
81
|
+
throw new TypeError(`verifier feedback item ${index} severity is invalid`);
|
|
82
|
+
}
|
|
83
|
+
const message = boundedString(entry.message, `verifier feedback item ${index} message`, 16 * 1024);
|
|
84
|
+
const ids = entry.component_ids === undefined ? undefined : stringArray(entry.component_ids, `verifier feedback item ${index} component_ids`);
|
|
85
|
+
if (ids?.some((id) => !componentIds.has(id)))
|
|
86
|
+
throw new TypeError("verifier feedback contains an unknown component reference");
|
|
87
|
+
const refs = entry.trajectory_refs === undefined ? undefined : trajectoryRefs(entry.trajectory_refs, `verifier feedback item ${index}`);
|
|
88
|
+
return {
|
|
89
|
+
code,
|
|
90
|
+
severity: entry.severity,
|
|
91
|
+
message,
|
|
92
|
+
...(ids === undefined ? {} : { component_ids: ids }),
|
|
93
|
+
...(refs === undefined ? {} : { trajectory_refs: refs }),
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
return { schema_version: "1", items };
|
|
97
|
+
}
|
|
98
|
+
export function assertVerifierScoreEvidenceConsistency(input) {
|
|
99
|
+
if (!input.scores) {
|
|
100
|
+
if (input.process || input.feedback)
|
|
101
|
+
throw new TypeError("structured verifier evidence requires a score result");
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (input.scores.process_score === undefined && input.process !== undefined) {
|
|
105
|
+
throw new TypeError("process.json requires process_score");
|
|
106
|
+
}
|
|
107
|
+
if (input.scores.process_score !== undefined && input.process === undefined) {
|
|
108
|
+
throw new TypeError("process_score requires process.json");
|
|
109
|
+
}
|
|
110
|
+
if (input.process && !sameScore(input.process.score, input.scores.process_score)) {
|
|
111
|
+
throw new TypeError("process.json score differs from process_score");
|
|
112
|
+
}
|
|
113
|
+
if (input.scores.normalization === "legacy-reward" && (input.process || input.feedback)) {
|
|
114
|
+
throw new TypeError("legacy reward results cannot attach standard structured evidence");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function parseComponent(value, index) {
|
|
118
|
+
const record = object(value, `process component ${index}`);
|
|
119
|
+
exact(record, ["id", "category", "status", "weight", "code", "public_details", "private_details_ref", "trajectory_refs"], `process component ${index}`);
|
|
120
|
+
const id = identifier(record.id, `process component ${index} id`);
|
|
121
|
+
const category = identifier(record.category, `process component ${index} category`);
|
|
122
|
+
if (record.status !== "passed" && record.status !== "failed" && record.status !== "excluded") {
|
|
123
|
+
throw new TypeError(`process component ${index} status is invalid`);
|
|
124
|
+
}
|
|
125
|
+
const weight = finite(record.weight, `process component ${index} weight`);
|
|
126
|
+
if (weight <= 0)
|
|
127
|
+
throw new TypeError(`process component ${index} weight must be positive`);
|
|
128
|
+
const code = record.code === undefined ? undefined : identifier(record.code, `process component ${index} code`);
|
|
129
|
+
const publicDetails = record.public_details === undefined ? undefined : jsonObject(record.public_details, `process component ${index} public_details`);
|
|
130
|
+
const privateDetailsRef = record.private_details_ref === undefined
|
|
131
|
+
? undefined : relativeRef(record.private_details_ref, `process component ${index} private_details_ref`);
|
|
132
|
+
const refs = record.trajectory_refs === undefined ? undefined : trajectoryRefs(record.trajectory_refs, `process component ${index}`);
|
|
133
|
+
return {
|
|
134
|
+
id,
|
|
135
|
+
category,
|
|
136
|
+
status: record.status,
|
|
137
|
+
weight,
|
|
138
|
+
...(code === undefined ? {} : { code }),
|
|
139
|
+
...(publicDetails === undefined ? {} : { public_details: publicDetails }),
|
|
140
|
+
...(privateDetailsRef === undefined ? {} : { private_details_ref: privateDetailsRef }),
|
|
141
|
+
...(refs === undefined ? {} : { trajectory_refs: refs }),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function trajectoryRefs(value, label) {
|
|
145
|
+
if (!Array.isArray(value))
|
|
146
|
+
throw new TypeError(`${label} trajectory_refs must be an array`);
|
|
147
|
+
return value.map((raw, index) => {
|
|
148
|
+
const record = object(raw, `${label} trajectory ref ${index}`);
|
|
149
|
+
exact(record, ["run_id", "seq_start", "seq_end"], `${label} trajectory ref ${index}`);
|
|
150
|
+
const runId = boundedString(record.run_id, `${label} trajectory ref ${index} run_id`, 256);
|
|
151
|
+
if (!/^run_[a-f0-9]{32}$/.test(runId))
|
|
152
|
+
throw new TypeError(`${label} trajectory ref ${index} run_id is invalid`);
|
|
153
|
+
const start = record.seq_start === undefined ? undefined : nonNegativeInteger(record.seq_start, `${label} trajectory ref ${index} seq_start`);
|
|
154
|
+
const end = record.seq_end === undefined ? undefined : nonNegativeInteger(record.seq_end, `${label} trajectory ref ${index} seq_end`);
|
|
155
|
+
if (start !== undefined && end !== undefined && end < start)
|
|
156
|
+
throw new TypeError(`${label} trajectory ref ${index} range is invalid`);
|
|
157
|
+
return { run_id: runId, ...(start === undefined ? {} : { seq_start: start }), ...(end === undefined ? {} : { seq_end: end }) };
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function jsonObject(value, label) {
|
|
161
|
+
const record = object(value, label);
|
|
162
|
+
return Object.fromEntries(Object.entries(record).map(([key, entry]) => [key, json(entry, `${label}.${key}`)]));
|
|
163
|
+
}
|
|
164
|
+
function json(value, label) {
|
|
165
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
166
|
+
return value;
|
|
167
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
168
|
+
return value;
|
|
169
|
+
if (Array.isArray(value))
|
|
170
|
+
return value.map((entry) => json(entry, label));
|
|
171
|
+
if (isRecord(value))
|
|
172
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, json(entry, `${label}.${key}`)]));
|
|
173
|
+
throw new TypeError(`${label} is not JSON data`);
|
|
174
|
+
}
|
|
175
|
+
function object(value, label) {
|
|
176
|
+
if (!isRecord(value))
|
|
177
|
+
throw new TypeError(`${label} must be an object`);
|
|
178
|
+
return value;
|
|
179
|
+
}
|
|
180
|
+
function isRecord(value) {
|
|
181
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
182
|
+
}
|
|
183
|
+
function exact(record, fields, label) {
|
|
184
|
+
const allowed = new Set(fields);
|
|
185
|
+
const extra = Object.keys(record).find((field) => !allowed.has(field));
|
|
186
|
+
if (extra)
|
|
187
|
+
throw new TypeError(`${label} has unknown field: ${extra}`);
|
|
188
|
+
}
|
|
189
|
+
function finite(value, label) {
|
|
190
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
191
|
+
throw new TypeError(`${label} must be a finite number`);
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
function optionalFinite(value, label) {
|
|
195
|
+
return value === undefined ? undefined : finite(value, label);
|
|
196
|
+
}
|
|
197
|
+
function nonNegativeInteger(value, label) {
|
|
198
|
+
if (!Number.isSafeInteger(value) || Number(value) < 0)
|
|
199
|
+
throw new TypeError(`${label} must be a non-negative integer`);
|
|
200
|
+
return Number(value);
|
|
201
|
+
}
|
|
202
|
+
function identifier(value, label) {
|
|
203
|
+
const result = boundedString(value, label, 256);
|
|
204
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(result))
|
|
205
|
+
throw new TypeError(`${label} is invalid`);
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
function boundedString(value, label, max) {
|
|
209
|
+
if (typeof value !== "string" || value.length === 0 || Buffer.byteLength(value, "utf8") > max) {
|
|
210
|
+
throw new TypeError(`${label} is invalid`);
|
|
211
|
+
}
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
function relativeRef(value, label) {
|
|
215
|
+
const result = boundedString(value, label, 1024);
|
|
216
|
+
if (result.startsWith("/") || result.includes("\\") || result.split("/").some((part) => !part || part === "." || part === "..")) {
|
|
217
|
+
throw new TypeError(`${label} must be a contained relative path`);
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
function stringArray(value, label) {
|
|
222
|
+
if (!Array.isArray(value))
|
|
223
|
+
throw new TypeError(`${label} must be an array`);
|
|
224
|
+
const result = value.map((entry, index) => identifier(entry, `${label}[${index}]`));
|
|
225
|
+
if (new Set(result).size !== result.length)
|
|
226
|
+
throw new TypeError(`${label} must not contain duplicates`);
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
function sameScore(left, right) {
|
|
230
|
+
return Math.abs(left - right) <= SCORE_EPSILON;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=verifier-score-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-score-contract.js","sourceRoot":"","sources":["../../../src/domain/verifier-score-contract.ts"],"names":[],"mappings":"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"}
|