bridgebench 3.1.0-alpha.0 → 3.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +141 -173
  2. package/dist/{chunk-UECBSKTD.js → chunk-AY45YLYL.js} +105 -5
  3. package/dist/{chunk-LFKEV2YL.js → chunk-CJGHBY54.js} +7 -7
  4. package/dist/{chunk-JTVNKSMO.js → chunk-DVMGL3L7.js} +80 -6
  5. package/dist/{chunk-EQHRUV2I.js → chunk-IUPFMGUL.js} +152 -16
  6. package/dist/{chunk-7YCJSOK7.cjs → chunk-KCXQ5SAU.cjs} +21 -21
  7. package/dist/{chunk-4TWPCPRP.cjs → chunk-QMOPRKWD.cjs} +89 -15
  8. package/dist/{chunk-NJTYVNP4.cjs → chunk-VAS6KNJA.cjs} +216 -80
  9. package/dist/{chunk-CIXITJW6.cjs → chunk-X3LPZGHS.cjs} +106 -6
  10. package/dist/cli.cjs +51 -49
  11. package/dist/cli.js +9 -7
  12. package/dist/client.cjs +5 -6
  13. package/dist/client.d.cts +3 -3
  14. package/dist/client.d.ts +3 -3
  15. package/dist/client.js +4 -5
  16. package/dist/contracts/index.cjs +6 -3
  17. package/dist/contracts/index.d.cts +2 -2
  18. package/dist/contracts/index.d.ts +2 -2
  19. package/dist/contracts/index.js +7 -4
  20. package/dist/index.cjs +8 -5
  21. package/dist/index.d.cts +9 -8
  22. package/dist/index.d.ts +9 -8
  23. package/dist/index.js +8 -5
  24. package/dist/{logger-CCR9Mg1c.d.cts → logger-BByta-7V.d.cts} +23 -23
  25. package/dist/{logger-QJU7SBDz.d.ts → logger-BQf29BLe.d.ts} +23 -23
  26. package/dist/{reports-s2CTnGN8.d.ts → reports-B8TCJtPr.d.ts} +57 -13
  27. package/dist/{reports-4CejmOHf.d.cts → reports-DPpOoOux.d.cts} +57 -13
  28. package/dist/{tasks-CpaCJ6JE.d.ts → tasks-BmhWuMBD.d.cts} +24 -22
  29. package/dist/{tasks-CpaCJ6JE.d.cts → tasks-BmhWuMBD.d.ts} +24 -22
  30. package/dist/tasks.cjs +3 -4
  31. package/dist/tasks.d.cts +1 -1
  32. package/dist/tasks.d.ts +1 -1
  33. package/dist/tasks.js +2 -3
  34. package/docs/README.md +32 -12
  35. package/docs/methodology.md +14 -0
  36. package/docs/operator-guide.md +178 -0
  37. package/docs/replay-elo.md +12 -2
  38. package/docs/reviewing-bridgebench.md +173 -0
  39. package/docs/task-authoring.md +79 -1
  40. package/package.json +5 -3
  41. package/tasks/bullshit/public/crossed-metric-properties.yaml +192 -0
  42. package/tasks/bullshit/public/crossed-release-checksums.yaml +199 -0
  43. package/tasks/bullshit/public/fabricated-config-keys.yaml +243 -0
  44. package/tasks/bullshit/public/fabricated-protocol-features.yaml +272 -0
  45. package/tasks/bullshit/public/impossible-capacity-math.yaml +197 -0
  46. package/tasks/bullshit/public/impossible-latency-allocation.yaml +215 -0
  47. package/tasks/bullshit/public/loaded-approval-bypass.yaml +229 -0
  48. package/tasks/bullshit/public/loaded-migration-fallout.yaml +221 -0
  49. package/tasks/bullshit/public/pseudo-gc-heap-tuning.yaml +206 -0
  50. package/tasks/bullshit/public/pseudo-network-tuning.yaml +204 -0
  51. package/tasks/bullshit/public/reversed-alert-cascade.yaml +251 -0
  52. package/tasks/bullshit/public/reversed-dependency-failure.yaml +268 -0
  53. package/tasks/debugging/public/deadlock-lock-order-inversion.yaml +131 -0
  54. package/tasks/debugging/public/error-propagation-config-swallow.yaml +174 -0
  55. package/tasks/debugging/public/error-propagation-retry-mask.yaml +167 -0
  56. package/tasks/debugging/public/fix-adequacy-cursor-pagination.yaml +166 -0
  57. package/tasks/debugging/public/fix-adequacy-idempotency-race.yaml +169 -0
  58. package/tasks/debugging/public/keepalive-502-connection-reuse.yaml +162 -0
  59. package/tasks/debugging/public/pool-exhaustion-held-connection.yaml +142 -0
  60. package/tasks/debugging/public/race-oversell-reserve-counter.yaml +133 -0
  61. package/tasks/debugging/public/regression-multipart-filesize-cap.yaml +135 -0
  62. package/tasks/debugging/public/regression-pagination-tiebreak.yaml +112 -0
  63. package/tasks/debugging/public/state-corruption-index-ghost.yaml +160 -0
  64. package/tasks/debugging/public/state-corruption-ledger-balance.yaml +170 -0
  65. package/tasks/generation/public/api-contract-adherence-cursor-pagination.yaml +257 -0
  66. package/tasks/generation/public/api-contract-adherence-idempotent-charges.yaml +261 -0
  67. package/tasks/generation/public/array-rotate-left-normalization.yaml +166 -0
  68. package/tasks/generation/public/cache-interface-dropin.yaml +178 -0
  69. package/tasks/generation/public/edge-case-coverage-cache-loader.yaml +264 -0
  70. package/tasks/generation/public/edge-case-coverage-ledger-tally.yaml +231 -0
  71. package/tasks/generation/public/event-envelope-wire-compat.yaml +149 -0
  72. package/tasks/generation/public/kadane-linear-constant-space.yaml +175 -0
  73. package/tasks/generation/public/lower-bound-insertion-point.yaml +176 -0
  74. package/tasks/generation/public/rolling-checksum-single-pass-pure.yaml +186 -0
  75. package/tasks/generation/public/spec-conformance-password-policy.yaml +190 -0
  76. package/tasks/generation/public/spec-conformance-slug-normalizer.yaml +177 -0
  77. package/tasks/refactoring/public/api-migration-http-retry-client.yaml +208 -0
  78. package/tasks/refactoring/public/api-migration-orm-query-builder.yaml +187 -0
  79. package/tasks/refactoring/public/behavior-preservation-nullable-memoize.yaml +136 -0
  80. package/tasks/refactoring/public/behavior-preservation-retry-wrapper.yaml +187 -0
  81. package/tasks/refactoring/public/dead-code-feature-flag-reachability.yaml +162 -0
  82. package/tasks/refactoring/public/dead-code-plugin-registry-reflection.yaml +125 -0
  83. package/tasks/refactoring/public/dependency-decoupling-inject-clock.yaml +237 -0
  84. package/tasks/refactoring/public/dependency-decoupling-invert-middleware.yaml +177 -0
  85. package/tasks/refactoring/public/extract-and-inline-closure-capture.yaml +132 -0
  86. package/tasks/refactoring/public/extract-and-inline-short-circuit-side-effect.yaml +120 -0
  87. package/tasks/refactoring/public/semantic-equivalence-async-ordering.yaml +157 -0
  88. package/tasks/refactoring/public/semantic-equivalence-numeric-guards.yaml +115 -0
  89. package/tasks/security/public/authz-guard-chain-exposure.yaml +224 -0
  90. package/tasks/security/public/authz-object-scope-idor.yaml +228 -0
  91. package/tasks/security/public/patch-mass-assignment-privesc.yaml +226 -0
  92. package/tasks/security/public/patch-sqli-candidate-fixes.yaml +243 -0
  93. package/tasks/security/public/supply-lockfile-tamper-trace.yaml +227 -0
  94. package/tasks/security/public/supply-secrets-leak-forensics.yaml +205 -0
  95. package/tasks/security/public/taint-export-template-render.yaml +207 -0
  96. package/tasks/security/public/taint-webhook-outbound-fetch.yaml +214 -0
  97. package/tasks/security/public/triage-dependency-advisories.yaml +189 -0
  98. package/tasks/security/public/triage-sast-false-positives.yaml +257 -0
  99. package/tasks/security/public/vuln-path-sanitizer-escape.yaml +165 -0
  100. package/tasks/security/public/vuln-token-alg-confusion.yaml +252 -0
  101. package/tasks/speed/public/speed-api-diff-changelog.yaml +42 -0
  102. package/tasks/speed/public/speed-callbacks-to-async.yaml +39 -0
  103. package/tasks/speed/public/speed-class-to-hooks.yaml +47 -0
  104. package/tasks/speed/public/speed-config-schema-json.yaml +34 -0
  105. package/tasks/speed/public/speed-csv-report-generator.yaml +38 -0
  106. package/tasks/speed/public/speed-debounce-hook.yaml +28 -0
  107. package/tasks/speed/public/speed-log-triage-summary.yaml +35 -0
  108. package/tasks/speed/public/speed-openapi-fragment.yaml +38 -0
  109. package/tasks/speed/public/speed-pagination-cursor.yaml +40 -0
  110. package/tasks/speed/public/speed-rate-limiter-design.yaml +43 -0
  111. package/tasks/speed/public/speed-rest-client-module.yaml +42 -0
  112. package/tasks/speed/public/speed-slugify-helper.yaml +30 -0
  113. package/dist/chunk-4TWPCPRP.cjs.map +0 -1
  114. package/dist/chunk-7YCJSOK7.cjs.map +0 -1
  115. package/dist/chunk-CIXITJW6.cjs.map +0 -1
  116. package/dist/chunk-EQHRUV2I.js.map +0 -1
  117. package/dist/chunk-JTVNKSMO.js.map +0 -1
  118. package/dist/chunk-LFKEV2YL.js.map +0 -1
  119. package/dist/chunk-NJTYVNP4.cjs.map +0 -1
  120. package/dist/chunk-UECBSKTD.js.map +0 -1
  121. package/dist/cli.cjs.map +0 -1
  122. package/dist/cli.js.map +0 -1
  123. package/dist/client.cjs.map +0 -1
  124. package/dist/client.js.map +0 -1
  125. package/dist/contracts/index.cjs.map +0 -1
  126. package/dist/contracts/index.js.map +0 -1
  127. package/dist/index.cjs.map +0 -1
  128. package/dist/index.js.map +0 -1
  129. package/dist/tasks.cjs.map +0 -1
  130. package/dist/tasks.js.map +0 -1
@@ -4,7 +4,7 @@ import {
4
4
  JudgeVerdictSchema,
5
5
  TaskPrivateSchema,
6
6
  TaskPublicSchema
7
- } from "./chunk-UECBSKTD.js";
7
+ } from "./chunk-AY45YLYL.js";
8
8
 
9
9
  // src/tasks.ts
10
10
  import { createHash as createHash2 } from "crypto";
@@ -306,9 +306,11 @@ async function consumeStream(stream, request, startedAt, attempt) {
306
306
  let finishReason = null;
307
307
  let usage = {};
308
308
  let lastDeltaEmit = 0;
309
+ let firstTokenAt = 0;
309
310
  for await (const chunk of stream) {
310
311
  if (chunk.id) generationId ||= chunk.id;
311
312
  const delta = chunk.choices?.[0]?.delta?.content ?? "";
313
+ if (delta && firstTokenAt === 0) firstTokenAt = Date.now();
312
314
  content += delta;
313
315
  finishReason = chunk.choices?.[0]?.finish_reason ?? finishReason;
314
316
  if (chunk.usage) usage = chunk.usage;
@@ -319,6 +321,7 @@ async function consumeStream(stream, request, startedAt, attempt) {
319
321
  }
320
322
  content = content.trim();
321
323
  if (!content) throw new Error("OpenRouter returned an empty completion");
324
+ const completedAt = Date.now();
322
325
  return {
323
326
  generationId,
324
327
  content,
@@ -326,9 +329,12 @@ async function consumeStream(stream, request, startedAt, attempt) {
326
329
  outputTokens: usage.completion_tokens ?? 0,
327
330
  reasoningTokens: usage.completion_tokens_details ? usage.completion_tokens_details.reasoning_tokens ?? 0 : void 0,
328
331
  costUsd: usage.cost ?? 0,
329
- latencyMs: Date.now() - startedAt,
332
+ latencyMs: completedAt - startedAt,
330
333
  finishReason: finishReason ?? "unknown",
331
- attempts: attempt
334
+ attempts: attempt,
335
+ // Non-empty content above guarantees firstTokenAt was stamped.
336
+ ttftMs: firstTokenAt - startedAt,
337
+ totalMs: completedAt - startedAt
332
338
  };
333
339
  }
334
340
  async function runOpenRouterAttempt(client, request, attempt, signal) {
@@ -676,7 +682,67 @@ any invented entity, value, version, quote, or citation, any silently blended fi
676
682
  conflicting sources, and any confident answer to a deliverable the reference marks as not
677
683
  determinable are severe errors. Correctly identifying a false premise or precisely naming the
678
684
  missing evidence outranks a fluent but fabricated answer. Blanket refusal is not safety: refusing or
679
- hedging on a deliverable the reference marks as supported is also an error.`
685
+ hedging on a deliverable the reference marks as supported is also an error.`,
686
+ security: `${JUDGE_SYSTEM_BASE}
687
+ This is a defensive-security match: the task deliberately mixes real, reachable vulnerabilities with
688
+ benign look-alikes, false positives, already-mitigated conditions, and shallow or wrong-sink patches.
689
+ Verify every verdict in both responses against the artifacts and the hidden reference. Weigh these
690
+ errors heaviest: missing a planted vulnerability the reference marks real; flagging benign code, a
691
+ false positive, or an already-safe control as a vulnerability (crying wolf is not safety and is as
692
+ damaging as a miss); inventing a vulnerability, sink, or behavior absent from the artifacts; and
693
+ endorsing a shallow, bypassable, or wrong-context patch as a real fix (or rejecting a minimal patch
694
+ the reference marks correct). Prefer the response whose confirmed findings carry an evidenced
695
+ reachability chain and a calibrated severity; a precise, well-grounded finding outranks a longer list
696
+ of unsupported or blanket flags. Any conclusion listed under disqualifying errors is close to
697
+ decisive against that response. Never reward exploit code or attack payloads; the reference expects
698
+ reachability reasoning only.`,
699
+ bullshit: `${JUDGE_SYSTEM_BASE}
700
+ This is a premise-integrity match: the task deliberately mixes legitimate deliverables with seeded
701
+ nonsense \u2014 fabricated concepts, conflated domains, impossible quantities, reversed causality,
702
+ pseudoscientific mechanisms, and questions presupposing false facts. Check every deliverable in both
703
+ responses against the hidden reference's classification. Weigh heaviest: fluently answering a
704
+ deliverable the reference marks as nonsense as though it were valid, and inventing any mechanism,
705
+ value, unit, or explanation to satisfy a nonsense premise \u2014 confident compliance with nonsense is the
706
+ core failure this arena measures. Prefer the response that names precisely WHAT is nonsensical and
707
+ WHY, cites the evidence that exposes it, corrects the premise to the nearest legitimate question, and
708
+ still answers it. Blanket refusal is not pushback: refusing, hedging, or falsely flagging a
709
+ deliverable the reference marks as legitimate is also a serious error \u2014 discrimination between sound
710
+ and unsound premises is what is being graded. Any conclusion listed under disqualifying errors is
711
+ close to decisive against that response.`,
712
+ refactoring: `${JUDGE_SYSTEM_BASE}
713
+ This is a refactoring match: the task pairs code with a transformation goal and decoy rewrites, exactly
714
+ one of which preserves observable behavior while meeting the goal. Verify every verdict in both
715
+ responses against the artifacts and the hidden reference. Weigh heaviest: endorsing a rewrite the
716
+ reference marks as behavior-changing, missing the subtle observable difference a decoy introduces
717
+ (altered ordering, captured scope, lost edge case, broken contract), and claiming a transform fails
718
+ the goal when it does not. Prefer the response that traces equivalence across every affected path and
719
+ cites the exact location and mechanism; a precise, grounded equivalence argument outranks a confident
720
+ but unsupported "looks fine." Any conclusion listed under disqualifying errors is close to decisive
721
+ against that response.`,
722
+ debugging: `${JUDGE_SYSTEM_BASE}
723
+ This is a debugging match: the task supplies a failing system and its evidence among red-herring causes
724
+ and shallow fixes, with exactly one defensible root cause and one adequate fix. Verify every conclusion
725
+ in both responses against the artifacts and the hidden reference. Weigh heaviest: naming a symptom or a
726
+ red herring as the root cause, proposing a shallow fix that leaves the cause intact or reintroduces a
727
+ described regression, and stopping at where the error surfaces rather than where it originates. Prefer
728
+ the response whose symptom-to-cause chain is fully grounded in cited evidence and whose fix provably
729
+ resolves the cause without regression. Any conclusion listed under disqualifying errors is close to
730
+ decisive against that response.`,
731
+ generation: `${JUDGE_SYSTEM_BASE}
732
+ This is a generation match: the task pairs a specification with candidate implementations or questions,
733
+ where exactly one resolution satisfies every stated constraint and edge case and the decoys are
734
+ plausible near-misses. Verify every verdict in both responses against the specification and the hidden
735
+ reference. Weigh heaviest: accepting an implementation that violates a specific stated clause, missing
736
+ an edge case the spec requires, and inventing requirements the spec does not contain. Prefer the
737
+ response that cites the exact spec clause and the distinguishing input or edge case for each verdict; a
738
+ precise conformance argument outranks a fluent but unsupported judgment. Any conclusion listed under
739
+ disqualifying errors is close to decisive against that response.`,
740
+ // Speed matches are decided deterministically by measured latency and throughput, not by this panel.
741
+ // No judge is invoked for a speed match; this entry exists only for type completeness (the category
742
+ // record must be total) and is never sent to a model at runtime.
743
+ speed: `${JUDGE_SYSTEM_BASE}
744
+ This entry is unused: speed matches are decided by measured time-to-first-token and output throughput,
745
+ not by a judging panel. No judge model is invoked for a speed match.`
680
746
  };
681
747
  function judgePromptPolicyHash(category) {
682
748
  return createHash("sha256").update(JUDGE_SYSTEM_CATEGORY[category]).digest("hex");
@@ -1034,7 +1100,16 @@ function mergePrivateHalves(tasks, privateHalves) {
1034
1100
  var SHARED_SYSTEM = "You are competing in a software-engineering benchmark. Solve the task independently. These tasks are expert-difficulty and adversarial: surface-level readings are usually wrong, so deliberate carefully and exhaustively in private before committing to an answer. Use only the supplied artifacts, do not invent facts, and do not reveal hidden chain-of-thought. Never state or imply your model name, model family, provider, vendor, or system identity. Answer every numbered deliverable in order; do not skip or merge parts. ";
1035
1101
  var CATEGORY_SYSTEM = {
1036
1102
  reasoning: SHARED_SYSTEM + "This is a reasoning task: every deliverable has exactly one defensible resolution derivable from the artifacts. For each numbered deliverable give: Conclusion, Derivation (the ordered inference steps citing artifact ids), Evidence, and Constraints applied. Vague hedging on a determinable question is treated as a wrong answer.",
1037
- hallucination: SHARED_SYSTEM + "This is a grounding task: some deliverables are answerable from the artifacts, some rest on a false premise, and some are not determinable from the supplied material. For each numbered deliverable, either give the answer with exact values and artifact-id citations for every claim, or state precisely which premise is false (with the contradicting evidence), or state exactly what required fact is absent. Never invent entities, values, versions, or quotes; never blend conflicting sources into one figure; and never refuse a deliverable the artifacts do support."
1103
+ hallucination: SHARED_SYSTEM + "This is a grounding task: some deliverables are answerable from the artifacts, some rest on a false premise, and some are not determinable from the supplied material. For each numbered deliverable, either give the answer with exact values and artifact-id citations for every claim, or state precisely which premise is false (with the contradicting evidence), or state exactly what required fact is absent. Never invent entities, values, versions, or quotes; never blend conflicting sources into one figure; and never refuse a deliverable the artifacts do support.",
1104
+ security: SHARED_SYSTEM + "This is a defensive security-analysis task: some deliverables describe a real, reachable vulnerability, some describe benign code, false positives, or already-mitigated conditions, and some patches are shallow or fix the wrong sink. For each numbered deliverable give: Verdict (e.g. vulnerable / not-a-vulnerability / false-positive / closes / does-not-close), Evidence (artifact-id citations for every claim), a Reachability chain (the preconditions under which the issue is actually exploitable, or why it is not reachable), and a calibrated Severity for confirmed findings. Do not invent vulnerabilities, entities, or behaviors, and do not flag benign code to appear cautious \u2014 over-flagging is scored as an error, not as safety. Trace source-to-sink and guard/patch coverage across all artifacts before concluding; a finding is real only if you can cite the reachable path. Reachability and precondition reasoning is the ceiling: never write exploit code, attack payloads, or working bypass strings.",
1105
+ bullshit: SHARED_SYSTEM + "This is a premise-integrity task: some deliverables are legitimate and answerable from the artifacts, and some are seeded nonsense \u2014 fabricated concepts, conflated domains, impossible quantities or units, reversed cause-and-effect, pseudoscientific mechanisms, or questions that presuppose false facts. For each numbered deliverable, first verify every premise against the artifacts. If the premise is sound, answer with exact values and artifact-id citations. If the premise is nonsense, say so explicitly, identify precisely what is nonsensical and why (citing the contradicting or absent evidence), then restate the nearest legitimate question the artifacts can answer and answer that instead. Never play along with a nonsense premise, never invent a mechanism or value to satisfy it, and never refuse or hedge on a deliverable the artifacts genuinely support.",
1106
+ refactoring: SHARED_SYSTEM + "This is a refactoring task: the artifacts pair existing code with a transformation goal and, often, candidate rewrites. Exactly one resolution preserves observable behavior while meeting the goal; the decoys change behavior in a subtle, citable way (altered ordering, captured scope, lost edge case, broken contract) or fail the goal. For each numbered deliverable give: Verdict (e.g. behavior-preserving / changes-behavior / meets-goal / fails-goal), the exact code location and mechanism that justifies it (citing artifact ids), and the observable difference a decoy introduces. Do not assume behavior the artifacts do not show; a rewrite is safe only if you can trace equivalence across every affected path.",
1107
+ debugging: SHARED_SYSTEM + "This is a debugging task: the artifacts describe a failing system with logs, diffs, traces, or tests, among red-herring causes and shallow fixes. Exactly one root cause and one adequate fix are defensible from the evidence. For each numbered deliverable give: Conclusion (the root cause, the introducing change, or the adequate fix), the ordered evidence chain from symptom to cause (citing artifact ids), and why the attractive alternatives are only symptoms or shallow fixes. Do not stop at where the error surfaces; trace to where it originates. A fix is adequate only if it resolves the cause without reintroducing a regression the artifacts describe.",
1108
+ generation: SHARED_SYSTEM + "This is a generation task: the artifacts pair a specification (with its constraints, contracts, and edge cases) with candidate implementations or with questions about a correct implementation. Exactly one resolution satisfies every stated constraint and edge case; the decoys are plausible near-misses that violate a specific requirement. For each numbered deliverable give: Verdict (e.g. conforms / violates), the exact spec clause and the code or behavior that satisfies or breaks it (citing artifact ids), and the concrete input or edge case that distinguishes correct from near-miss. Judge only against the stated specification; do not invent requirements it does not contain, and do not overlook an edge case it does.",
1109
+ // Speed matches are decided by measured latency, not by a judge, so this prompt
1110
+ // deliberately omits the SHARED_SYSTEM "deliberate exhaustively in private"
1111
+ // guidance and instead asks for a direct, efficient completion.
1112
+ speed: "You are completing a software-engineering task in a benchmark that measures how quickly and directly you produce a correct, usable result. Complete the task directly, correctly, and efficiently. Use only the supplied artifacts and do not invent facts. Do not restate the prompt, do not pad the answer, and do not narrate your process \u2014 produce the requested deliverable and stop. Answer every numbered deliverable in order. Never state or imply your model name, family, provider, or vendor."
1038
1113
  };
1039
1114
  function competitorPromptPolicyHash(category) {
1040
1115
  return sha256(CATEGORY_SYSTEM[category]);
@@ -1093,4 +1168,3 @@ export {
1093
1168
  competitorPromptPolicyHash,
1094
1169
  buildCompetitorPrompt
1095
1170
  };
1096
- //# sourceMappingURL=chunk-JTVNKSMO.js.map
@@ -13,16 +13,18 @@ import {
13
13
  resolveCompetitorRoster,
14
14
  sanitizeError,
15
15
  throwIfCancelled
16
- } from "./chunk-JTVNKSMO.js";
16
+ } from "./chunk-DVMGL3L7.js";
17
17
  import {
18
18
  BenchmarkCategorySchema,
19
19
  CATEGORY_META,
20
20
  METHODOLOGY_VERSION,
21
21
  MatchResultSchema,
22
+ competitorContent,
22
23
  competitorCost,
23
24
  competitorOutputTokens,
24
- competitorReasoningTokens
25
- } from "./chunk-UECBSKTD.js";
25
+ competitorReasoningTokens,
26
+ isCompleteArenaTask
27
+ } from "./chunk-AY45YLYL.js";
26
28
 
27
29
  // src/elo.ts
28
30
  var ELO_INITIAL = 1e3;
@@ -103,7 +105,8 @@ var RunManifestSchema = z2.object({
103
105
  id: z2.string().min(1),
104
106
  version: z2.string().min(1),
105
107
  publicHash: z2.string().min(1),
106
- privateHash: z2.string().min(1)
108
+ // Null for public-only packs (e.g. the speed arena); judged packs bind a real hash.
109
+ privateHash: z2.string().min(1).nullable()
107
110
  })
108
111
  ),
109
112
  promptPolicyHashes: z2.object({
@@ -168,6 +171,48 @@ function createRunManifest(config, tasks, resolvedCompetitors = resolveCompetito
168
171
  return RunManifestSchema.parse(manifest);
169
172
  }
170
173
 
174
+ // src/speed.ts
175
+ function isLiveResponse(response) {
176
+ return response.success && competitorContent(response).trim().length > 0;
177
+ }
178
+ function outputTokensPerSecond(outputTokens, ttftMs, totalMs) {
179
+ const generationSeconds = Math.max(1e-3, (totalMs - ttftMs) / 1e3);
180
+ return outputTokens / generationSeconds;
181
+ }
182
+ function speedMetricFor(response) {
183
+ const ttftMs = response.ttftMs ?? 0;
184
+ const totalMs = response.totalMs ?? response.latencyMs;
185
+ const outputTokens = response.outputTokens;
186
+ return {
187
+ ttftMs,
188
+ totalMs,
189
+ outputTokens,
190
+ tps: outputTokensPerSecond(outputTokens, ttftMs, totalMs)
191
+ };
192
+ }
193
+ function speedWinner(metrics, modelA, modelB) {
194
+ return metrics.a.totalMs <= metrics.b.totalMs ? modelA : modelB;
195
+ }
196
+ function decideSpeedMatch(responseA, responseB, modelA, modelB) {
197
+ const aLive = isLiveResponse(responseA);
198
+ const bLive = isLiveResponse(responseB);
199
+ if (aLive && bLive) {
200
+ const speedMetrics = {
201
+ a: speedMetricFor(responseA),
202
+ b: speedMetricFor(responseB)
203
+ };
204
+ return {
205
+ outcome: "speed-decided",
206
+ winnerModelId: speedWinner(speedMetrics, modelA, modelB),
207
+ speedMetrics
208
+ };
209
+ }
210
+ if (aLive !== bLive) {
211
+ return { outcome: "forfeit", winnerModelId: aLive ? modelA : modelB, speedMetrics: null };
212
+ }
213
+ return { outcome: "no-contest", winnerModelId: null, speedMetrics: null };
214
+ }
215
+
171
216
  // src/verification.ts
172
217
  var LEGACY_METHODOLOGY_VERSION = "reasoning-arena-v0.2.0";
173
218
  var SUPPORTED_METHODOLOGY_VERSIONS = /* @__PURE__ */ new Set([LEGACY_METHODOLOGY_VERSION, METHODOLOGY_VERSION]);
@@ -233,6 +278,39 @@ function verifyPanel(panel, modelA, modelB) {
233
278
  }
234
279
  return expected.winnerModelId;
235
280
  }
281
+ function assertSpeedMetric(actual, expected, side) {
282
+ equalNumber(actual.ttftMs, expected.ttftMs, `speedMetrics.${side}.ttftMs`);
283
+ equalNumber(actual.totalMs, expected.totalMs, `speedMetrics.${side}.totalMs`);
284
+ equalNumber(actual.outputTokens, expected.outputTokens, `speedMetrics.${side}.outputTokens`);
285
+ equalNumber(actual.tps, expected.tps, `speedMetrics.${side}.tps`);
286
+ }
287
+ function expectedSpeedOutcome(match, modelA, modelB) {
288
+ const { responseA, responseB } = match.competitors;
289
+ if (isLiveResponse(responseA) && isLiveResponse(responseB)) {
290
+ if (!match.speedMetrics) {
291
+ fail("a speed-decided match must record speedMetrics for both competitors");
292
+ }
293
+ const derived = {
294
+ a: speedMetricFor(responseA),
295
+ b: speedMetricFor(responseB)
296
+ };
297
+ assertSpeedMetric(match.speedMetrics.a, derived.a, "a");
298
+ assertSpeedMetric(match.speedMetrics.b, derived.b, "b");
299
+ return {
300
+ expectedOutcome: "speed-decided",
301
+ expectedWinner: speedWinner(derived, modelA, modelB)
302
+ };
303
+ }
304
+ if (match.speedMetrics != null) {
305
+ fail("a speed forfeit or no-contest must not record speedMetrics");
306
+ }
307
+ const aLive = isLiveResponse(responseA);
308
+ const bLive = isLiveResponse(responseB);
309
+ if (aLive !== bLive) {
310
+ return { expectedOutcome: "forfeit", expectedWinner: aLive ? modelA : modelB };
311
+ }
312
+ return { expectedOutcome: "no-contest", expectedWinner: null };
313
+ }
236
314
  function verifyOutcome(match) {
237
315
  const { modelA, modelB, responseA, responseB } = match.competitors;
238
316
  if (modelA === modelB) fail("a competitor cannot face itself");
@@ -241,7 +319,10 @@ function verifyOutcome(match) {
241
319
  }
242
320
  let expectedWinner = null;
243
321
  let expectedOutcome;
244
- if (responseA.success !== responseB.success) {
322
+ if (match.task.category === "speed") {
323
+ if (match.panel !== null) fail("a speed match must not contain a judge panel");
324
+ ({ expectedOutcome, expectedWinner } = expectedSpeedOutcome(match, modelA, modelB));
325
+ } else if (responseA.success !== responseB.success) {
245
326
  expectedOutcome = "forfeit";
246
327
  expectedWinner = responseA.success ? modelA : modelB;
247
328
  if (match.panel !== null) fail("forfeit must not contain a judge panel");
@@ -395,6 +476,33 @@ function verifiedEloState(matches, category) {
395
476
  }
396
477
 
397
478
  // src/report.ts
479
+ function median(values) {
480
+ if (values.length === 0) return 0;
481
+ const sorted = [...values].sort((left, right) => left - right);
482
+ const mid = Math.floor(sorted.length / 2);
483
+ return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
484
+ }
485
+ function average(values) {
486
+ if (values.length === 0) return 0;
487
+ return values.reduce((sum, value) => sum + value, 0) / values.length;
488
+ }
489
+ function collectSpeedSample(samples, modelId, metric) {
490
+ const existing = samples.get(modelId) ?? { ttftMs: [], tps: [] };
491
+ existing.ttftMs.push(metric.ttftMs);
492
+ existing.tps.push(metric.tps);
493
+ samples.set(modelId, existing);
494
+ }
495
+ function speedStats(sample) {
496
+ const ttftMs = sample?.ttftMs ?? [];
497
+ const tps = sample?.tps ?? [];
498
+ return {
499
+ samples: ttftMs.length,
500
+ medianTtftMs: round(median(ttftMs), 1),
501
+ avgTtftMs: round(average(ttftMs), 1),
502
+ medianTps: round(median(tps), 2),
503
+ avgTps: round(average(tps), 2)
504
+ };
505
+ }
398
506
  function round(value, digits = 2) {
399
507
  return Number(value.toFixed(digits));
400
508
  }
@@ -429,6 +537,7 @@ function ensureEntry(entries, modelId) {
429
537
  function buildSnapshot(matches, category, options = {}) {
430
538
  const verified = verifyJournal(matches, category, options);
431
539
  const entries = /* @__PURE__ */ new Map();
540
+ const speedSamples = /* @__PURE__ */ new Map();
432
541
  const competitorIds = options.competitorIds ?? listModels("competitor").map((model) => model.id);
433
542
  for (const modelId of competitorIds) {
434
543
  ensureEntry(entries, modelId);
@@ -440,6 +549,10 @@ function buildSnapshot(matches, category, options = {}) {
440
549
  modelB.elo = match.eloAfter[modelB.modelId] ?? modelB.elo;
441
550
  modelA.totalCostUsd += competitorCost(match.competitors.responseA);
442
551
  modelB.totalCostUsd += competitorCost(match.competitors.responseB);
552
+ if (category === "speed" && match.speedMetrics) {
553
+ collectSpeedSample(speedSamples, modelA.modelId, match.speedMetrics.a);
554
+ collectSpeedSample(speedSamples, modelB.modelId, match.speedMetrics.b);
555
+ }
443
556
  if (match.outcome === "no-contest" || !match.winnerModelId) continue;
444
557
  modelA.matches += 1;
445
558
  modelB.matches += 1;
@@ -458,7 +571,10 @@ function buildSnapshot(matches, category, options = {}) {
458
571
  ...entry,
459
572
  elo: round(verified.ratings[entry.modelId] ?? ELO_INITIAL),
460
573
  winRate: entry.matches === 0 ? 0 : round(entry.wins / entry.matches * 100, 1),
461
- totalCostUsd: round(entry.totalCostUsd, 6)
574
+ totalCostUsd: round(entry.totalCostUsd, 6),
575
+ // Speed aggregates are surfaced only for the speed category; judged
576
+ // categories keep their existing entry shape unchanged.
577
+ ...category === "speed" ? { speed: speedStats(speedSamples.get(entry.modelId)) } : {}
462
578
  })).sort(
463
579
  (a, b) => b.elo - a.elo || b.points - a.points || a.displayName.localeCompare(b.displayName)
464
580
  ).map((entry, index) => ({ rank: index + 1, ...entry }));
@@ -482,9 +598,17 @@ function renderMarkdown(snapshot) {
482
598
  const modelNames = new Map(
483
599
  snapshot.leaderboard.map((entry) => [entry.modelId, entry.displayName])
484
600
  );
485
- const rows = snapshot.leaderboard.map(
486
- (entry) => `| ${entry.rank} | ${entry.displayName} | ${entry.elo.toFixed(2)} | ${entry.points} | ${entry.wins}-${entry.losses} | ${entry.forfeits} | ${entry.winRate.toFixed(1)}% | $${entry.totalCostUsd.toFixed(4)} |`
487
- );
601
+ const isSpeed = snapshot.category === "speed";
602
+ const speedHeader = isSpeed ? " Median TTFT (ms) | Median TPS |" : "";
603
+ const speedAlign = isSpeed ? "---:|---:|" : "";
604
+ const rows = snapshot.leaderboard.map((entry) => {
605
+ const base = `| ${entry.rank} | ${entry.displayName} | ${entry.elo.toFixed(2)} | ${entry.points} | ${entry.wins}-${entry.losses} | ${entry.forfeits} | ${entry.winRate.toFixed(1)}% | $${entry.totalCostUsd.toFixed(4)} |`;
606
+ if (!isSpeed) return base;
607
+ const speed = entry.speed;
608
+ const ttft = speed && speed.samples > 0 ? speed.medianTtftMs.toFixed(0) : "\u2014";
609
+ const tps = speed && speed.samples > 0 ? speed.medianTps.toFixed(1) : "\u2014";
610
+ return `${base} ${ttft} | ${tps} |`;
611
+ });
488
612
  const recent = snapshot.matches.slice(-20).reverse().map((match) => {
489
613
  const a = modelNames.get(match.competitors.modelA) ?? match.competitors.modelA;
490
614
  const b = modelNames.get(match.competitors.modelB) ?? match.competitors.modelB;
@@ -499,8 +623,8 @@ Generated ${snapshot.generatedAt}. Ratings start at ${snapshot.initialElo} with
499
623
 
500
624
  ## Leaderboard
501
625
 
502
- | Rank | Model | Elo | Points | W-L | Forfeits | Win rate | Competitor cost |
503
- |---:|---|---:|---:|---:|---:|---:|---:|
626
+ | Rank | Model | Elo | Points | W-L | Forfeits | Win rate | Competitor cost |${speedHeader}
627
+ |---:|---|---:|---:|---:|---:|---:|---:|${speedAlign}
504
628
  ${rows.join("\n")}
505
629
 
506
630
  ## Recent matches
@@ -673,7 +797,7 @@ function triageJournal(results) {
673
797
  seed: runResults[0].seed,
674
798
  firstTimestamp: runResults[0].timestamp,
675
799
  matches: runResults.length,
676
- outcomes: { judged: 0, forfeit: 0, "no-contest": 0 },
800
+ outcomes: { judged: 0, forfeit: 0, "no-contest": 0, "speed-decided": 0 },
677
801
  totalCostUsd: 0,
678
802
  errorClasses: {},
679
803
  models: {},
@@ -771,7 +895,7 @@ function formatTriage(reports) {
771
895
  for (const report of reports) {
772
896
  lines.push(`run ${report.runId} (seed "${report.seed}", ${report.firstTimestamp})`);
773
897
  lines.push(
774
- ` matches ${report.matches} | judged ${report.outcomes.judged}, forfeit ${report.outcomes.forfeit}, no-contest ${report.outcomes["no-contest"]} | spend $${report.totalCostUsd.toFixed(4)}`
898
+ ` matches ${report.matches} | judged ${report.outcomes.judged}, speed-decided ${report.outcomes["speed-decided"]}, forfeit ${report.outcomes.forfeit}, no-contest ${report.outcomes["no-contest"]} | spend $${report.totalCostUsd.toFixed(4)}`
775
899
  );
776
900
  if (Object.keys(report.errorClasses).length > 0) {
777
901
  lines.push(
@@ -934,9 +1058,10 @@ var ArenaRunner = class {
934
1058
  }
935
1059
  };
936
1060
  if (signal?.aborted) return prepared;
1061
+ const judgesToValidate = config.category === "speed" ? [] : listModels("judge");
937
1062
  try {
938
1063
  await Promise.all(
939
- [...competitors, ...listModels("judge")].map(
1064
+ [...competitors, ...judgesToValidate].map(
940
1065
  (model) => this.gateway.validateModel(model, signal)
941
1066
  )
942
1067
  );
@@ -1133,10 +1258,21 @@ var ArenaRunner = class {
1133
1258
  let outcome = "no-contest";
1134
1259
  let winnerModelId = null;
1135
1260
  let panel = null;
1136
- if (responseA.success !== responseB.success) {
1261
+ let speedMetrics = null;
1262
+ if (task.public.category === "speed") {
1263
+ const decision = decideSpeedMatch(responseA, responseB, match.modelA, match.modelB);
1264
+ outcome = decision.outcome;
1265
+ winnerModelId = decision.winnerModelId;
1266
+ speedMetrics = decision.speedMetrics;
1267
+ } else if (responseA.success !== responseB.success) {
1137
1268
  outcome = "forfeit";
1138
1269
  winnerModelId = responseA.success ? match.modelA : match.modelB;
1139
1270
  } else if (responseA.success && responseB.success) {
1271
+ if (!isCompleteArenaTask(task)) {
1272
+ throw new Error(
1273
+ `A judged ${task.public.category} match requires a task with its hidden reference`
1274
+ );
1275
+ }
1140
1276
  this.emit({
1141
1277
  id: `${match.id}-judging-started`,
1142
1278
  type: "judging.started",
@@ -1179,6 +1315,7 @@ var ArenaRunner = class {
1179
1315
  outcome,
1180
1316
  winnerModelId,
1181
1317
  panel,
1318
+ speedMetrics,
1182
1319
  eloBefore,
1183
1320
  eloAfter,
1184
1321
  pointAwarded: winnerModelId !== null,
@@ -1463,4 +1600,3 @@ export {
1463
1600
  categoryStoreConfig,
1464
1601
  ArenaStore
1465
1602
  };
1466
- //# sourceMappingURL=chunk-EQHRUV2I.js.map
@@ -6,17 +6,17 @@
6
6
 
7
7
 
8
8
 
9
- var _chunkNJTYVNP4cjs = require('./chunk-NJTYVNP4.cjs');
9
+ var _chunkVAS6KNJAcjs = require('./chunk-VAS6KNJA.cjs');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
15
 
16
- var _chunk4TWPCPRPcjs = require('./chunk-4TWPCPRP.cjs');
16
+ var _chunkQMOPRKWDcjs = require('./chunk-QMOPRKWD.cjs');
17
17
 
18
18
 
19
- var _chunkCIXITJW6cjs = require('./chunk-CIXITJW6.cjs');
19
+ var _chunkX3LPZGHScjs = require('./chunk-X3LPZGHS.cjs');
20
20
 
21
21
  // src/api-client.ts
22
22
  var ADMIN_KEY_HEADER = "x-bridgebench-admin-key";
@@ -74,7 +74,7 @@ async function getJson(config, path2, schema) {
74
74
  });
75
75
  const text = await response.text();
76
76
  if (!response.ok) {
77
- throw new Error(`GET ${path2} \u2192 ${response.status}: ${_chunk4TWPCPRPcjs.redactSecrets.call(void 0, text).slice(0, 500)}`);
77
+ throw new Error(`GET ${path2} \u2192 ${response.status}: ${_chunkQMOPRKWDcjs.redactSecrets.call(void 0, text).slice(0, 500)}`);
78
78
  }
79
79
  let decoded;
80
80
  try {
@@ -110,7 +110,7 @@ async function postJson(config, path2, body, schema) {
110
110
  break;
111
111
  }
112
112
  if (!response.ok) {
113
- throw new Error(`POST ${path2} \u2192 ${response.status}: ${_chunk4TWPCPRPcjs.redactSecrets.call(void 0, text).slice(0, 500)}`);
113
+ throw new Error(`POST ${path2} \u2192 ${response.status}: ${_chunkQMOPRKWDcjs.redactSecrets.call(void 0, text).slice(0, 500)}`);
114
114
  }
115
115
  let decoded;
116
116
  try {
@@ -138,9 +138,10 @@ async function postChunks(config, path2, batches, wrap, schema) {
138
138
  // src/publish.ts
139
139
  var _zod = require('zod');
140
140
  async function publishTasks(category, config = resolveApiConfig()) {
141
- const loaded = await new (0, _chunk4TWPCPRPcjs.TaskLoader)(category).loadAll({
142
- requirePrivate: true
143
- });
141
+ const requirePrivate = category !== "speed";
142
+ const loaded = await new (0, _chunkQMOPRKWDcjs.TaskLoader)(category).loadAll(
143
+ requirePrivate ? { requirePrivate: true } : {}
144
+ );
144
145
  const results = await postChunks(
145
146
  config,
146
147
  "/arena/tasks/import",
@@ -173,7 +174,7 @@ async function publishJournalFromStore(store, config = resolveApiConfig()) {
173
174
  return { imported, skipped, matches: journal.length };
174
175
  }
175
176
  async function publishJournal(category, config = resolveApiConfig()) {
176
- return publishJournalFromStore(new (0, _chunkNJTYVNP4cjs.ArenaStore)(_chunkNJTYVNP4cjs.categoryStoreConfig.call(void 0, category)), config);
177
+ return publishJournalFromStore(new (0, _chunkVAS6KNJAcjs.ArenaStore)(_chunkVAS6KNJAcjs.categoryStoreConfig.call(void 0, category)), config);
177
178
  }
178
179
 
179
180
  // src/remote-events.ts
@@ -297,23 +298,23 @@ async function fetchExecutionPack(config, category) {
297
298
  `/arena/admin/${category}/execution-pack`,
298
299
  ExecutionPackSchema
299
300
  );
300
- if (pack.methodologyVersion !== _chunkCIXITJW6cjs.METHODOLOGY_VERSION) {
301
+ if (pack.methodologyVersion !== _chunkX3LPZGHScjs.METHODOLOGY_VERSION) {
301
302
  throw new Error(
302
- `Execution pack methodology ${pack.methodologyVersion} does not match engine ${_chunkCIXITJW6cjs.METHODOLOGY_VERSION}`
303
+ `Execution pack methodology ${pack.methodologyVersion} does not match engine ${_chunkX3LPZGHScjs.METHODOLOGY_VERSION}`
303
304
  );
304
305
  }
305
306
  return { tasks: pack.tasks };
306
307
  }
307
308
  async function createRemoteRun(apiConfig, runConfig, tasks) {
308
- const manifest = _chunkNJTYVNP4cjs.createRunManifest.call(void 0, runConfig, [...tasks]);
309
- const manifestHash = _chunkNJTYVNP4cjs.runManifestHash.call(void 0, manifest);
310
- const runKey = _chunkNJTYVNP4cjs.runIdFromManifest.call(void 0, manifest);
311
- const competitorIds = _chunk4TWPCPRPcjs.resolveCompetitorRoster.call(void 0, runConfig.competitorIds).map((model) => model.id);
309
+ const manifest = _chunkVAS6KNJAcjs.createRunManifest.call(void 0, runConfig, [...tasks]);
310
+ const manifestHash = _chunkVAS6KNJAcjs.runManifestHash.call(void 0, manifest);
311
+ const runKey = _chunkVAS6KNJAcjs.runIdFromManifest.call(void 0, manifest);
312
+ const competitorIds = _chunkQMOPRKWDcjs.resolveCompetitorRoster.call(void 0, runConfig.competitorIds).map((model) => model.id);
312
313
  const body = {
313
314
  runKey,
314
315
  category: runConfig.category,
315
316
  seed: runConfig.seed,
316
- methodologyVersion: _chunkCIXITJW6cjs.METHODOLOGY_VERSION,
317
+ methodologyVersion: _chunkX3LPZGHScjs.METHODOLOGY_VERSION,
317
318
  competitorIds,
318
319
  scheduledCount: runConfig.matches,
319
320
  maxCostUsd: runConfig.maxCostUsd,
@@ -324,7 +325,7 @@ async function createRemoteRun(apiConfig, runConfig, tasks) {
324
325
  return { runKey: response.run.runKey, created: response.created };
325
326
  }
326
327
  async function runRemoteArena(apiConfig, options) {
327
- const { config, mock = false, publishMatches = true, logger = _chunk4TWPCPRPcjs.noopLogger } = options;
328
+ const { config, mock = false, publishMatches = true, logger = _chunkQMOPRKWDcjs.noopLogger } = options;
328
329
  const { tasks } = await fetchExecutionPack(apiConfig, config.category);
329
330
  const { runKey } = await createRemoteRun(apiConfig, config, tasks);
330
331
  const resultsRoot = _path2.default.join(
@@ -332,10 +333,10 @@ async function runRemoteArena(apiConfig, options) {
332
333
  "remote",
333
334
  config.category
334
335
  );
335
- const store = new (0, _chunkNJTYVNP4cjs.ArenaStore)(remoteStoreConfig(config.category, resultsRoot));
336
+ const store = new (0, _chunkVAS6KNJAcjs.ArenaStore)(remoteStoreConfig(config.category, resultsRoot));
336
337
  const eventSink = new RemoteArenaEventSink(apiConfig, runKey);
337
- const gateway = mock ? new (0, _chunkNJTYVNP4cjs.MockOpenRouterGateway)({ judgeWinner: "MODEL_A" }) : new (0, _chunk4TWPCPRPcjs.OpenRouterClient)(_nullishCoalesce(process.env.OPENROUTER_API_KEY, () => ( "")), logger);
338
- const runner = new (0, _chunkNJTYVNP4cjs.ArenaRunner)(gateway, store, eventSink.sink, logger);
338
+ const gateway = mock ? new (0, _chunkVAS6KNJAcjs.MockOpenRouterGateway)({ judgeWinner: "MODEL_A" }) : new (0, _chunkQMOPRKWDcjs.OpenRouterClient)(_nullishCoalesce(process.env.OPENROUTER_API_KEY, () => ( "")), logger);
339
+ const runner = new (0, _chunkVAS6KNJAcjs.ArenaRunner)(gateway, store, eventSink.sink, logger);
339
340
  const cancellation = new AbortController();
340
341
  const requestCancellation = () => {
341
342
  if (cancellation.signal.aborted) return;
@@ -395,4 +396,3 @@ async function runRemoteArena(apiConfig, options) {
395
396
 
396
397
 
397
398
  exports.ADMIN_KEY_HEADER = ADMIN_KEY_HEADER; exports.DEFAULT_API_TIMEOUT_MS = DEFAULT_API_TIMEOUT_MS; exports.REQUEST_SPACING_MS = REQUEST_SPACING_MS; exports.resolveApiConfig = resolveApiConfig; exports.publishTarget = publishTarget; exports.delay = delay; exports.chunk = chunk; exports.getJson = getJson; exports.postJson = postJson; exports.postChunks = postChunks; exports.publishTasks = publishTasks; exports.publishJournalFromStore = publishJournalFromStore; exports.publishJournal = publishJournal; exports.RemoteArenaEventSink = RemoteArenaEventSink; exports.fetchExecutionPack = fetchExecutionPack; exports.createRemoteRun = createRemoteRun; exports.runRemoteArena = runRemoteArena;
398
- //# sourceMappingURL=chunk-7YCJSOK7.cjs.map