@remnic/bench 9.6.21 → 9.6.23

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 CHANGED
@@ -91,12 +91,22 @@ status` to report ChatGPT authentication. A 473-credit safety reserve leaves
91
91
  then measure a quick task before choosing a workload bound:
92
92
 
93
93
  ```bash
94
+ export BUILD_WEEK_RUN_ROOT="$HOME/.remnic/bench/build-week-2026"
95
+ export BUILD_WEEK_RESULTS_DIR="$BUILD_WEEK_RUN_ROOT/results"
96
+ umask 077
97
+ mkdir -p "$BUILD_WEEK_RUN_ROOT" "$BUILD_WEEK_RESULTS_DIR"
98
+ chmod 700 "$BUILD_WEEK_RUN_ROOT" "$BUILD_WEEK_RESULTS_DIR"
99
+
94
100
  export REMNIC_BENCH_CODEX_CREDIT_BUDGET=2473
95
101
  export REMNIC_BENCH_CODEX_CREDIT_RESERVE=473
96
- export REMNIC_BENCH_CODEX_CREDIT_LEDGER="$PWD/.bench-private/codex-credit-ledger.json"
102
+ export REMNIC_BENCH_CODEX_CREDIT_LEDGER="$BUILD_WEEK_RUN_ROOT/codex-credit-ledger.json"
97
103
 
98
- remnic bench run --quick longmemeval \
104
+ remnic bench run longmemeval \
99
105
  --runtime-profile real \
106
+ --limit 1 \
107
+ --dataset-dir ./bench-datasets/longmemeval \
108
+ --results-dir "$BUILD_WEEK_RESULTS_DIR" \
109
+ --drain-timeout 600000 \
100
110
  --system-provider codex-cli --system-model gpt-5.6-luna \
101
111
  --system-codex-reasoning-effort medium \
102
112
  --internal-provider codex-cli --internal-model gpt-5.6-luna \
@@ -106,6 +116,9 @@ remnic bench run --quick longmemeval \
106
116
 
107
117
  remnic bench run longmemeval \
108
118
  --runtime-profile real --limit <LEDGER_DERIVED_LIMIT> \
119
+ --dataset-dir ./bench-datasets/longmemeval \
120
+ --results-dir "$BUILD_WEEK_RESULTS_DIR" \
121
+ --drain-timeout 600000 \
109
122
  --system-provider codex-cli --system-model gpt-5.6-luna \
110
123
  --system-codex-reasoning-effort medium \
111
124
  --internal-provider codex-cli --internal-model gpt-5.6-luna \
@@ -120,10 +133,29 @@ actual `turn.completed` JSONL usage. Stop dispatching at 2,000 spent; the
120
133
  473-credit reserve absorbs only a final in-flight call whose exact cost becomes
121
134
  known after completion. Missing exact terminal usage blocks the ledger pending
122
135
  manual account reconciliation.
136
+ The measured probe is a full-mode run bounded to one staged LongMemEval item.
137
+ Full mode fails before provider dispatch if that explicit dataset directory is
138
+ missing or unreadable, so it cannot fall back to the bundled quick fixture.
139
+ Both commands pin the same gitignored dataset source and do not fall back to
140
+ the CLI-managed dataset store.
123
141
  Rates per one million tokens are Luna: 25 input, 2.5 cached input, 150 output;
124
142
  Terra: 62.5 input, 6.25 cached input, 375 output. A bounded result is a trial,
125
143
  not a full leaderboard artifact.
126
144
 
145
+ Codex CLI receives a benchmark-owned 180-second transport timeout when no
146
+ request timeout is supplied. Keep `--request-timeout` out of these commands:
147
+ an explicit value also becomes a whole-phase guard, while the transport-only
148
+ default lets long store/recall/reset phases complete. The 600-second drain cap
149
+ remains explicit for queued internal work.
150
+
151
+ The ledger and results stay outside the repository because stored runs may
152
+ contain questions, answers, and recalled context. The `umask` plus explicit
153
+ directory modes make newly created state private. After the first ledger write,
154
+ run `chmod 600 "$REMNIC_BENCH_CODEX_CREDIT_LEDGER"`. Preserve the exact run ID
155
+ printed by the CLI, or recover it only from this run store with
156
+ `remnic bench runs list --results-dir "$BUILD_WEEK_RESULTS_DIR"`; use that ID
157
+ for export and artifact promotion rather than an ambiguous “latest” run.
158
+
127
159
  Codex built and adversarially reviewed the Build Week adapter, Responses
128
160
  provider, and report card. The underlying Remnic engine and original benchmark
129
161
  harness are prior work. The evidence ledger, credit-backed frontier-run
package/dist/index.d.ts CHANGED
@@ -300,6 +300,12 @@ interface ProviderConfig {
300
300
  retryOnTimeout?: boolean;
301
301
  max429WaitMs?: number;
302
302
  };
303
+ /**
304
+ * Provider transport timeout that must not be interpreted as a benchmark
305
+ * phase timeout. Runtime profiles use this for safe provider defaults while
306
+ * reserving retryOptions.timeoutMs for an explicit --request-timeout.
307
+ */
308
+ providerRequestTimeoutMs?: number;
303
309
  disableThinking?: boolean;
304
310
  reasoningEffort?: BenchReasoningEffort;
305
311
  responderContextBudgetChars?: number;
@@ -1515,12 +1521,29 @@ interface CodexCliNativeUsage {
1515
1521
  interface CodexCreditReceiptScope extends CodexCliNativeUsage {
1516
1522
  calls: number;
1517
1523
  credits: number;
1524
+ unattributedReconciliationCount: number;
1525
+ unattributedReconciledCredits: number;
1518
1526
  models: Array<CodexCliNativeUsage & {
1519
1527
  model: string;
1520
1528
  calls: number;
1521
1529
  credits: number;
1522
1530
  }>;
1523
1531
  }
1532
+ interface CodexCreditReconciliationReceipt {
1533
+ schemaVersion: 1;
1534
+ priorLedgerSha256: string;
1535
+ ledgerSha256: string;
1536
+ at: string;
1537
+ attribution: "account-wide-unattributed";
1538
+ affectedRunId: string;
1539
+ originalBudgetCredits: number;
1540
+ priorRecordedSpentCredits: number;
1541
+ observedRemainingCredits: number;
1542
+ unattributedCredits: number;
1543
+ totalSpentCredits: number;
1544
+ totalRemainingCredits: number;
1545
+ affectedBlockedEventSha256: string;
1546
+ }
1524
1547
  interface CodexCreditReceipt {
1525
1548
  schemaVersion: 1;
1526
1549
  ledgerSha256: string;
@@ -1535,6 +1558,16 @@ interface CodexCreditReceipt {
1535
1558
  id: string;
1536
1559
  };
1537
1560
  }
1561
+ declare function reconcileCodexCreditLedger(args: {
1562
+ ledgerPath: string;
1563
+ priorLedgerSha256: string;
1564
+ observedRemainingCredits: number;
1565
+ originalBudgetBalanceConfirmed: true;
1566
+ noCreditsAddedOrRefundedConfirmed: true;
1567
+ accountWideUnattributedChargeAccepted: true;
1568
+ affectedRunId: string;
1569
+ }): Promise<CodexCreditReconciliationReceipt>;
1570
+ declare function buildCodexCreditReceipt(ledgerPath: string, runId?: string): Promise<CodexCreditReceipt>;
1538
1571
 
1539
1572
  declare const BENCHMARK_REPRO_MANIFEST_FILENAME = "MANIFEST.json";
1540
1573
  declare const BENCHMARK_REPRO_MANIFEST_SCHEMA_VERSION = 1;
@@ -3054,6 +3087,115 @@ interface DiagnoseLoComoProfileDeltaOptions {
3054
3087
  declare function diagnoseLoComoProfileDelta(options: DiagnoseLoComoProfileDeltaOptions): LoComoProfileDeltaReport;
3055
3088
  declare function renderLoComoProfileDeltaMarkdown(report: LoComoProfileDeltaReport): string;
3056
3089
 
3090
+ declare const LOCOMO_FULL_TASK_COUNT = 1986;
3091
+ declare const LOCOMO_RECALL_EXCERPT_CHARS = 240;
3092
+ declare const LOCOMO_RECALL_DIFF_LINE_LIMIT = 20;
3093
+ interface LoComoRawResultEvidence {
3094
+ result: BenchmarkResult;
3095
+ reference: string;
3096
+ /** SHA-256 of the exact result-file bytes, computed before JSON parsing. */
3097
+ sha256: string;
3098
+ }
3099
+ interface LoComoRecallTextDigest {
3100
+ sha256: string;
3101
+ charCount: number;
3102
+ excerpt: string;
3103
+ }
3104
+ interface LoComoRecallLineEvidence extends LoComoRecallTextDigest {
3105
+ ordinal: number;
3106
+ sourceRef?: string;
3107
+ }
3108
+ interface LoComoRecallLineDelta {
3109
+ totalCount: number;
3110
+ shownCount: number;
3111
+ lines: LoComoRecallLineEvidence[];
3112
+ }
3113
+ interface LoComoRecallContextSummary {
3114
+ sha256: string;
3115
+ charCount: number;
3116
+ lineCount: number;
3117
+ headings: string[];
3118
+ sourceRefs: string[];
3119
+ expectedTokenCoverage: number;
3120
+ }
3121
+ interface LoComoRecallMetricDelta {
3122
+ baselineMean: number;
3123
+ realMean: number;
3124
+ delta: number;
3125
+ wins: number;
3126
+ losses: number;
3127
+ ties: number;
3128
+ }
3129
+ interface LoComoRecallCategoryDelta extends LoComoRecallMetricDelta {
3130
+ category: string;
3131
+ taskCount: number;
3132
+ }
3133
+ interface LoComoFinalContextRegression {
3134
+ taskId: string;
3135
+ category: string;
3136
+ baselineScore: number;
3137
+ realScore: number;
3138
+ delta: number;
3139
+ questionSha256: string;
3140
+ expectedAnswerSha256: string;
3141
+ baseline: {
3142
+ answer: LoComoRecallTextDigest;
3143
+ recall: LoComoRecallContextSummary;
3144
+ };
3145
+ real: {
3146
+ answer: LoComoRecallTextDigest;
3147
+ recall: LoComoRecallContextSummary;
3148
+ };
3149
+ displacedLines: LoComoRecallLineDelta;
3150
+ introducedLines: LoComoRecallLineDelta;
3151
+ }
3152
+ interface LoComoRecallResultProvenance {
3153
+ reference: string;
3154
+ sha256: string;
3155
+ resultId: string;
3156
+ gitSha: string;
3157
+ remnicVersion: string;
3158
+ runtimeProfile: "baseline" | "real";
3159
+ systemProvider: string;
3160
+ systemModel: string;
3161
+ judgeProvider: string;
3162
+ judgeModel: string;
3163
+ seeds: number[];
3164
+ taskPayloadSha256: string;
3165
+ }
3166
+ interface LoComoRecallDeltaReport {
3167
+ schemaVersion: 1;
3168
+ benchmarkId: "locomo";
3169
+ comparison: {
3170
+ baseline: LoComoRecallResultProvenance;
3171
+ real: LoComoRecallResultProvenance;
3172
+ };
3173
+ taskCount: number;
3174
+ primaryMetric: string;
3175
+ overall: LoComoRecallMetricDelta;
3176
+ categories: LoComoRecallCategoryDelta[];
3177
+ topRegressions: LoComoFinalContextRegression[];
3178
+ evidenceBoundary: {
3179
+ finalContextComparison: "complete";
3180
+ retrievalTierAttribution: "unavailable-in-cached-results";
3181
+ hiddenEvidenceUsed: false;
3182
+ explanation: string;
3183
+ };
3184
+ }
3185
+ interface DiagnoseLoComoRecallDeltaOptions {
3186
+ baseline: LoComoRawResultEvidence;
3187
+ real: LoComoRawResultEvidence;
3188
+ primaryMetric?: string;
3189
+ maxRegressions?: number;
3190
+ }
3191
+ /**
3192
+ * Return a stable provenance label without exposing the caller's directory
3193
+ * layout. CLI callers should use this instead of persisting an input path.
3194
+ */
3195
+ declare function sanitizeLoComoResultReference(path: string): string;
3196
+ declare function diagnoseLoComoRecallDelta(options: DiagnoseLoComoRecallDeltaOptions): LoComoRecallDeltaReport;
3197
+ declare function renderLoComoRecallDeltaMarkdown(report: LoComoRecallDeltaReport): string;
3198
+
3057
3199
  /**
3058
3200
  * Dataset-contamination guard.
3059
3201
  *
@@ -3910,7 +4052,7 @@ interface RunJudgeCalibrationOptions {
3910
4052
  * binning function so they are compared on the same scale.
3911
4053
  */
3912
4054
  binScore?: (score: number) => JudgeCategory;
3913
- /** Override the slice size (default 50; mainly for tests). */
4055
+ /** Override the slice size (default 200; mainly for tests). */
3914
4056
  sliceSize?: number;
3915
4057
  /** Override the warning threshold (default 0.7). */
3916
4058
  threshold?: number;
@@ -5109,4 +5251,4 @@ declare function checkCodingGraphRegression(report: CodingGraphBenchReport, base
5109
5251
  */
5110
5252
  declare function buildBaselineFromReport(report: CodingGraphBenchReport, note: string): CodingGraphBaseline;
5111
5253
 
5112
- export { AMA_BENCH_DIAGNOSTIC_VARIANTS, ASSISTANT_AGENT_CONFIG_KEY, ASSISTANT_JUDGE_CONFIG_KEY, ASSISTANT_MEETING_PREP_SCENARIOS, ASSISTANT_MEETING_PREP_SMOKE_SCENARIOS, ASSISTANT_MORNING_BRIEF_SCENARIOS, ASSISTANT_MORNING_BRIEF_SMOKE_SCENARIOS, ASSISTANT_NEXT_BEST_ACTION_SCENARIOS, ASSISTANT_NEXT_BEST_ACTION_SMOKE_SCENARIOS, ASSISTANT_RUBRIC_DIMENSIONS, ASSISTANT_RUBRIC_ID_KEY, ASSISTANT_SEEDS_CONFIG_KEY, ASSISTANT_SPOT_CHECK_DIR_KEY, ASSISTANT_SYNTHESIS_SCENARIOS, ASSISTANT_SYNTHESIS_SMOKE_SCENARIOS, type AblationConfigOverrides, type AbstentionRetrievalCase, type AggregateMetrics, type AmaBenchDiagnosticAdapterOptions, type AmaBenchDiagnosticAnswererMode, type AmaBenchDiagnosticBreakdown, type AmaBenchDiagnosticMatrixArtifact, type AmaBenchDiagnosticRecallMode, type AmaBenchDiagnosticRunContext, type AmaBenchDiagnosticTaskEvidence, type AmaBenchDiagnosticTaskRow, type AmaBenchDiagnosticVariant, type AmaBenchDiagnosticVariantSummary, type AnthropicProviderConfig, type AssistantAgent, type AssistantMemoryFact, type AssistantMemoryGraph, type AssistantRubricDimension, type AssistantRubricRequest, type AssistantRubricScores, type AssistantRunnerOptions, type AssistantScenario, type AssistantStance, type AttackRecallOptions, type AttackRetrievalHit, type AttackerMode, BENCHMARK_ARTIFACT_SCHEMA_VERSION, BENCHMARK_INTEGRITY_META_SCHEMA, BENCHMARK_REPRO_MANIFEST_FILENAME, BENCHMARK_REPRO_MANIFEST_SCHEMA_VERSION, BENCHMARK_RESULT_SCHEMA, BENCHMARK_SPLIT_TYPES, type BaselineRow, type BaselineScenario, type BeamDatasetPreview, type BenchConfig, type BenchJudge, type BenchJudgeResult, type BenchMemoryAdapter, type BenchModelSource, type BenchReasoningEffort, type BenchRecallOptions, type BenchRecallSupportAssessment, type BenchRecallSupportRequest, type BenchRecallSupportStatus, type BenchResponder, type BenchResponse, type BenchRuntimeProfile, type BenchTier, type BenchmarkArtifact, type BenchmarkArtifactEnvironment, type BenchmarkArtifactHardware, type BenchmarkArtifactJudgeCalibration, type BenchmarkArtifactPerTaskScore, type BenchmarkArtifactSystem, type BenchmarkArtifactTier, type BenchmarkCategory, type BenchmarkDefinition, type BenchmarkIntegrityMeta, type BenchmarkMeta, type BenchmarkMode, type BenchmarkReport, type BenchmarkReproManifest, type BenchmarkReproManifestDataset, type BenchmarkReproManifestFile, type BenchmarkReproManifestResult, type BenchmarkResult, type BenchmarkSplitType, type BenchmarkStatus, type BenchmarkSuiteResult, type BenchmarkTier, type BootstrapKappaOptions, type BootstrapKappaResult, type BuildBenchmarkArtifactInput, type BuildBenchmarkPublishFeedOptions, type BuildBenchmarkReproManifestOptions, type BuiltInProvider, CALIBRATION_SLICE_SIZE, CANARY_FIXED_RECALL, CANARY_SCORE_FLOOR, DEFAULT_10K_FIXTURE as CODING_GRAPH_10K_FIXTURE, CODING_GRAPH_BENCH_SCHEMA_VERSION, DEFAULT_TOLERANCE_PERCENT as CODING_GRAPH_DEFAULT_TOLERANCE, MIN_ITERATIONS as CODING_GRAPH_MIN_ITERATIONS, DEFAULT_SMOKE_FIXTURE as CODING_GRAPH_SMOKE_FIXTURE, type CalibrationAnswer, type CalibrationVerdictPair, type CanaryAdapterOptions, type CanaryFloorCheck, type ClaudeCliProviderConfig, type CodexCliProviderConfig, type CodingGraphBaseline, type CodingGraphBenchConfig, type CodingGraphBenchReport, type MachineFingerprint as CodingGraphMachineFingerprint, type CodingGraphMetricKey, type RegressionMetricDetail as CodingGraphRegressionDetail, type RegressionMetricKey as CodingGraphRegressionKey, type RegressionGateResult as CodingGraphRegressionResult, type CohenKappaResult, type ComparisonMetricDelta, type ComparisonResult, type CompletionOpts, type CompletionResult, type ConfidenceInterval, type ContaminationCheckResult, type ContaminationEntry, type ContaminationManifest, type CustomBenchmarkScoring, type CustomBenchmarkSpec, type CustomBenchmarkTask, DEFAULT_ABLATION_BENCHMARK, DEFAULT_ABLATION_BOOTSTRAP_SEED, DEFAULT_ASSISTANT_RUBRIC_ID, DEFAULT_BASELINE_SCENARIOS, DEFAULT_JUDGE_BINARIZATION_THRESHOLD, DEFAULT_KAPPA_BOOTSTRAP_SAMPLES, DEFAULT_KAPPA_CONFIDENCE_LEVEL, DEFAULT_OPENAI_RESPONSES_JUDGE_MODEL, type DatasetSource, type DiagnoseLoComoProfileDeltaOptions, type DiscoveredModel, EMPTY_CONTAMINATION_MANIFEST, type EffectSizeInterpretation, type EffectSizeSummary, type ExplainResult, type ExtractedEntity, type ExtractedLink, type ExtractedPage, type ExtractionAttackOptions, type ExtractionAttackResult, type ExtractionAttackTarget, type FixtureGenerator, type FixtureOutput, type FixtureVariant, GENERAL_ANSWER_JUDGE_RUBRIC, type GeneratedFile, type GeneratedRepo, type GoldEntity, type GoldEntityType, type GoldGraph, type GoldLink, type GoldPage, type HarnessRng, INTEGRITY_CIPHER_ALGORITHM, INTEGRITY_HASH_ALGORITHM, INTEGRITY_META_FIELDS, type IngestionBenchAdapter, type IngestionLog, JUDGE_CALIBRATION_KAPPA_THRESHOLD, type JudgeCalibrationIdentities, type JudgeCalibrationResult, type JudgeCategory, type KappaConfidenceInterval, LOCAL_LAB_PROVIDER_KINDS, LOCOMO_DATASET_FILENAMES, LONG_MEM_EVAL_DATASET_FILENAMES, type LeaderboardArtifactWrite, type LettaAdapterConfig, LettaMemCorrectAdapter, type LlmJudge, type LlmProvider, type LoComoCategoryDelta, type LoComoMetricDelta, type LoComoProfileArtifactEvidence, type LoComoProfileDeltaReport, type LoComoTaskRegression, type LoadDatasetOptions, type LoadSealedQrelsOptions, type LoadedDataset, type LoadedJudgeCalibrationState, type LocalLabManifest, type LocalLabManifestNotes, type LocalLabPhase, type LocalLabPhaseDescriptor, type LocalLabPhaseExecute, type LocalLabPhaseName, type LocalLabPhaseOutcome, LocalLabPreflightError, type LocalLabPreflightFailure, type LocalLabPreflightInput, type LocalLabPreflightOptions, type LocalLabPreflightResult, type LocalLabPreflightSuccess, type LocalLabProviderKind, type LocalLabRoleConfig, type LocalLlmProviderConfig, MEMCORRECT_CORRECTION_ACCEPTANCE_RUBRIC, MEMCORRECT_CORRECTION_ACCEPTANCE_RUBRIC_VERSION, MEMCORRECT_STALE_HARM_RUBRIC, MEMCORRECT_STALE_HARM_RUBRIC_VERSION, MEMORY_EVAL_DIMENSIONS, MEMORY_EVAL_PUBLIC_LINE, MIN_CALIBRATION_SOURCE_TASKS, MITIGATED_BASELINE_SCENARIOS, type McpArgumentSemantic, type McpBackendErrorCode, type McpBackendResult, type McpBenchMemoryAdapter, type McpConformanceResult, type McpHttpTransportConfig, type McpListedTool, type McpMemCorrectAdapter, type McpMemoryAdapterOptions, McpMemoryBackendError, type McpMemoryToolMapping, type McpMemoryTransportConfig, type McpStdioTransportConfig, type McpToolCallResult, type McpToolClient, type McpToolMappingEntry, type McpToolMappingValue, type McpToolOperation, type Mem0AdapterConfig, Mem0MemCorrectAdapter, type MemCorrectGeneratorOptions, type MemCorrectJudgeRequest, type MemCorrectJudgeResult, type MemCorrectSystemAdapter, type MemoryEvalCategory, type MemoryEvalDimension, type MemoryEvalDimensionId, type MemoryEvalMetric, type MemoryGraph, type MemoryStats, type MemorySystem, type Message, type MetricAggregate, type MicroMetric, MissingCredentialError, type MitigatedBaselineConfig, type MitigatedTargetConfig, type MultipleChoiceQuestion, OPENAI_RESPONSES_JUDGE_RUBRIC_VERSION, OTHER_NAMESPACE_MEMORIES, type OllamaProviderConfig, type OpenAiCompatibleProviderConfig, OpenAiResponsesJudgeError, type OpenAiResponsesJudgeErrorCode, type OpenAiResponsesJudgeTelemetry, OpenAiResponsesProvider, type OpenAiResponsesProviderConfig, type OpenAiResponsesVerdict, type OpenAiResponsesVerdictResult, PROCEDURAL_REAL_SCENARIOS, PROCEDURAL_REAL_SCENARIOS_SMOKE, PUBLISHED_BENCHMARK_ARTIFACT_IDS, type PersonalizationRetrievalCase, type PreflightDiscoveredModel, type ProceduralAblationArtifact, type ProceduralAblationPerCase, type ProceduralAblationScenario, type ProceduralRealScenario, type ProceduralRealScenarioCategory, type ProviderBaseConfig, type ProviderConfig, type ProviderDiscoveryResult, type ProviderFactoryConfig, type PublishSkipReason, type PublishSkipRecord, type PublishedBenchmarkFeed, type PublishedBenchmarkFeedEntry, type PublishedBenchmarkId, REQUIRED_FRONTMATTER_FIELDS, type RecallMetrics, type RecoveredMemory, type RegressionDetail, type RegressionGateResult$1 as RegressionGateResult, type RemnicAdapterOptions, type ReportCardProvenanceContext, type ResolveBenchRuntimeProfileOptions, type ResolvedBenchRuntimeProfile, type ResolvedLocalLabProfile, type ResolvedLocalLabRole, type ResolvedRunBenchmarkOptions, type RotatedChoices, type RunBenchmarkOptions, type RunJudgeCalibrationOptions, type RunProceduralAblationCliArgs, type RunProceduralAblationOptions, type RunSequentialPhasesOptions, SCHEMA_TIER_FIXTURE, SCHEMA_TIER_SMOKE_FIXTURE, SEALED_PROMPT_REGISTRY, SINGLE_FLAG_ABLATION_MATRIX, SYNTHETIC_MEMORIES, type SanitizedDiagnosticProvider, type SavedBaseline, type SchemaTierCorpus, type SchemaTierFixture, type SchemaTierName, type SchemaTierPage, type SchemaTierPageFrontmatter, type SealedArtifact, type SealedJudgeDecision, type SealedJudgeInput, type SealedQrelsArtifact, type SealedQrelsHandle, type SealedRubric, type SearchResult, type SeededMemory, type SeededRng, type SequentialPhaseHooks, type SingleFlagAblationCell, type SingleFlagAblationId, type SpotCheckLogger, type StatisticalReport, type StructuredJudge, StructuredJudgeError, type StructuredJudgeErrorCode, type StructuredJudgeProvider, type StructuredJudgeTelemetry, type StructuredJudgeVerdict, type StructuredJudgeVerdictResult, type StructuredVerdictRequest, type SyntheticEdge, type SyntheticEmailIngestionAdapterOptions, type SyntheticFileIR, type SyntheticRepoConfig, type SyntheticSymbol, type SyntheticTargetOptions, type TaskResult, type TaskTokenUsage, type TemporalRetrievalCase, type ThirdPartyAdapterConfig, type TierDetail, type TimelineEntry, type TokenUsage, type WallMetric, type WriteBenchmarkArtifactResult, type ZepAdapterConfig, ZepMemCorrectAdapter, addContaminationEntry, aggregateTaskScores, answerBenchmarkQuestion, assertCanaryUnderFloor, assertIntegrityMetaPresent, assertPublishableIntegrity, assertSha256Hex, assistantMeetingPrepDefinition, assistantMorningBriefDefinition, assistantNextBestActionDefinition, assistantSynthesisDefinition, backlinkF1, binarizeJudgeScore, bootstrapCohensKappaConfidenceInterval, bootstrapMeanConfidenceInterval, buildAmaBenchDiagnosticMatrixArtifact, buildAmaBenchDiagnosticVariantSummary, buildAmaBenchLeaderboardRows, buildBaselineFromReport, buildBenchmarkArtifact, buildBenchmarkArtifactFilename, buildBenchmarkPublishFeed, buildBenchmarkReproManifest, buildBenchmarkRunSeeds, buildJudgePayload, buildOracleTrajectoryRecall, buildSchemaTierFixture, buildSchemaTierSmokeFixture, calendarFixture, canonicalJsonStringify, captureMachineFingerprint, chatFixture, checkCodingGraphRegression, checkDatasetContamination, checkRegression, clampScore, cohensD, compareResults, computeCohensKappa, computeSealHash, containsAnswer, createSeededRng$1 as createAdamSeededRng, createAmaBenchDiagnosticAdapter, createAnthropicProvider, createCanaryAdapter, createClaudeCliProvider, createCodexCliProvider, createSeededRng as createCodingGraphSeededRng, createDeterministicSpotCheckLogger, createGatewayResponder, createLightweightAdapter, createLiteLlmProvider, createLocalLlmProvider, createMcpDemoMemCorrectAdapter, createMcpDemoMemoryAdapter, createMcpMemCorrectAdapter, createMcpMemoryAdapter, createMitigatedTarget, createOllamaProvider, createOpenAiCompatibleProvider, createOpenAiResponsesBenchJudge, createOpenAiResponsesProvider, createSeededRandom as createProceduralAblationSeededRandom, createProvider, createProviderBackedAmaBenchRecommendedJudge, createProviderBackedJudge, createProviderBackedResponder, createProviderBackedStructuredJudge, createRemnicAdapter, createResponderFromProvider, createSeededRng$2 as createSeededRng, createSpotCheckFileLogger, createStructuredBenchJudge, createStructuredJudgeFromProvider, createSyntheticEmailIngestionAdapter, createSyntheticTarget, createTimeoutGuardedAdapter, defaultBenchmarkBaselineDir, defaultBenchmarkPublishPath, deleteBenchmarkResults, diagnoseLoComoProfileDelta, discoverAllProviders, discoveryEndpointFor, emailFixture, entityRecall, exactMatch, extractMetrics as extractCodingGraphMetrics, extractMarkdownSectionsByTitle, f1Score, fixtureToAblationScenarios, formatHandoffNote, formatMissingDatasetError, generateReport, generateSyntheticRepo, getAblationCell, getBenchmark, getBenchmarkLowerIsBetter, getMemoryEvalDimension, getRemnicVersion, hashBenchmarkArtifact, hashBytes, hashCanonicalJson, hashString, integrityMetaIsComplete, interpretEffectSize, isAmaBenchUnknownLikeAnswer, isContaminationEntry, isContaminationManifest, isSealedQrelsArtifact, isSha256Hex, isStructuredJudgeProvider, judgeMemCorrectCorrectionAcceptance, judgeMemCorrectStaleMemoryHarm, linkMatches, listBenchmarkBaselines, listBenchmarkResults, listBenchmarks, listMemoryEvalBenchmarkIds, listMemoryEvalDimensions, llmJudgeScore, llmJudgeScoreDetailed, loadAblationFixture, loadBaseline, loadBeamDatasetPreview, loadBenchmarkArtifact, loadBenchmarkBaseline, loadBenchmarkReportCardProvenance, loadBenchmarkResult, loadCustomBenchmarkFile, loadJudgeCalibrationState, loadLoCoMo10, loadLocalLabManifest, loadLongMemEvalS, loadSealKeyFromEnv, loadSealedQrels, loadSealedRubric, matchEntity, mergeContaminationManifests, openSeal, orchestrateBenchmarkRuns, pairedDeltaConfidenceInterval, parseBenchmarkArtifact, parseCustomBenchmark, parseLocalLabManifest, parseRubricResponse, parseSealedQrels, pickStableQualifiedName, precisionAtK, preflightLocalLabRole, projectFolderFixture, recallAtK, redactBenchmarkResultSecrets, renderBaselineMarkdown, renderBenchmarkResultExport, renderLoComoProfileDeltaMarkdown, renderMemorySummaryForJudge, renderMemoryViewForAgent, resolveAssistantAgent, resolveAssistantRubricId, resolveAssistantSeeds, resolveAssistantSpotCheckDir, resolveBenchRuntimeProfile, resolveBenchmarkPhaseTimeoutMs, resolveBenchmarkProgressLogging, resolveBenchmarkResultReference, resolveBenchmarkRunCount, resolveLocalLabProfile, resolveLocalLabRole, resolveStructuredJudge, rotateDistractors, rougeL, runAssistantBenchmark, runAssistantMeetingPrepBenchmark, runAssistantMorningBriefBenchmark, runAssistantNextBestActionBenchmark, runAssistantSynthesisBenchmark, runBaseline, runBenchSuite, runBenchmark, runCodingGraphBenchmark, runCustomBenchmarkFile, runExplain, runExtractionAttack, runJudgeCalibration, runMitigatedBaseline, runProceduralAblation, runProceduralAblationCli, runSealedJudge, runSequentialPhases, safeHexEqual, saveBaseline, saveBenchmarkBaseline, schemaCompleteness, sealPayload, selectAmaBenchDiagnosticVariants, selectCalibrationSlice, selectFixtureVariant, serializeBenchmarkArtifact, serializeJsonl, serializeSealedQrels, shuffleTasks, timed, verifyRubricDigest, writeBenchmarkArtifact, writeBenchmarkPublishFeed, writeBenchmarkReproManifest, writeBenchmarkResult, writeJudgeCalibrationState, writeLeaderboardArtifactsForResult, zeroScores };
5254
+ export { AMA_BENCH_DIAGNOSTIC_VARIANTS, ASSISTANT_AGENT_CONFIG_KEY, ASSISTANT_JUDGE_CONFIG_KEY, ASSISTANT_MEETING_PREP_SCENARIOS, ASSISTANT_MEETING_PREP_SMOKE_SCENARIOS, ASSISTANT_MORNING_BRIEF_SCENARIOS, ASSISTANT_MORNING_BRIEF_SMOKE_SCENARIOS, ASSISTANT_NEXT_BEST_ACTION_SCENARIOS, ASSISTANT_NEXT_BEST_ACTION_SMOKE_SCENARIOS, ASSISTANT_RUBRIC_DIMENSIONS, ASSISTANT_RUBRIC_ID_KEY, ASSISTANT_SEEDS_CONFIG_KEY, ASSISTANT_SPOT_CHECK_DIR_KEY, ASSISTANT_SYNTHESIS_SCENARIOS, ASSISTANT_SYNTHESIS_SMOKE_SCENARIOS, type AblationConfigOverrides, type AbstentionRetrievalCase, type AggregateMetrics, type AmaBenchDiagnosticAdapterOptions, type AmaBenchDiagnosticAnswererMode, type AmaBenchDiagnosticBreakdown, type AmaBenchDiagnosticMatrixArtifact, type AmaBenchDiagnosticRecallMode, type AmaBenchDiagnosticRunContext, type AmaBenchDiagnosticTaskEvidence, type AmaBenchDiagnosticTaskRow, type AmaBenchDiagnosticVariant, type AmaBenchDiagnosticVariantSummary, type AnthropicProviderConfig, type AssistantAgent, type AssistantMemoryFact, type AssistantMemoryGraph, type AssistantRubricDimension, type AssistantRubricRequest, type AssistantRubricScores, type AssistantRunnerOptions, type AssistantScenario, type AssistantStance, type AttackRecallOptions, type AttackRetrievalHit, type AttackerMode, BENCHMARK_ARTIFACT_SCHEMA_VERSION, BENCHMARK_INTEGRITY_META_SCHEMA, BENCHMARK_REPRO_MANIFEST_FILENAME, BENCHMARK_REPRO_MANIFEST_SCHEMA_VERSION, BENCHMARK_RESULT_SCHEMA, BENCHMARK_SPLIT_TYPES, type BaselineRow, type BaselineScenario, type BeamDatasetPreview, type BenchConfig, type BenchJudge, type BenchJudgeResult, type BenchMemoryAdapter, type BenchModelSource, type BenchReasoningEffort, type BenchRecallOptions, type BenchRecallSupportAssessment, type BenchRecallSupportRequest, type BenchRecallSupportStatus, type BenchResponder, type BenchResponse, type BenchRuntimeProfile, type BenchTier, type BenchmarkArtifact, type BenchmarkArtifactEnvironment, type BenchmarkArtifactHardware, type BenchmarkArtifactJudgeCalibration, type BenchmarkArtifactPerTaskScore, type BenchmarkArtifactSystem, type BenchmarkArtifactTier, type BenchmarkCategory, type BenchmarkDefinition, type BenchmarkIntegrityMeta, type BenchmarkMeta, type BenchmarkMode, type BenchmarkReport, type BenchmarkReproManifest, type BenchmarkReproManifestDataset, type BenchmarkReproManifestFile, type BenchmarkReproManifestResult, type BenchmarkResult, type BenchmarkSplitType, type BenchmarkStatus, type BenchmarkSuiteResult, type BenchmarkTier, type BootstrapKappaOptions, type BootstrapKappaResult, type BuildBenchmarkArtifactInput, type BuildBenchmarkPublishFeedOptions, type BuildBenchmarkReproManifestOptions, type BuiltInProvider, CALIBRATION_SLICE_SIZE, CANARY_FIXED_RECALL, CANARY_SCORE_FLOOR, DEFAULT_10K_FIXTURE as CODING_GRAPH_10K_FIXTURE, CODING_GRAPH_BENCH_SCHEMA_VERSION, DEFAULT_TOLERANCE_PERCENT as CODING_GRAPH_DEFAULT_TOLERANCE, MIN_ITERATIONS as CODING_GRAPH_MIN_ITERATIONS, DEFAULT_SMOKE_FIXTURE as CODING_GRAPH_SMOKE_FIXTURE, type CalibrationAnswer, type CalibrationVerdictPair, type CanaryAdapterOptions, type CanaryFloorCheck, type ClaudeCliProviderConfig, type CodexCliProviderConfig, type CodexCreditReceipt, type CodexCreditReceiptScope, type CodexCreditReconciliationReceipt, type CodingGraphBaseline, type CodingGraphBenchConfig, type CodingGraphBenchReport, type MachineFingerprint as CodingGraphMachineFingerprint, type CodingGraphMetricKey, type RegressionMetricDetail as CodingGraphRegressionDetail, type RegressionMetricKey as CodingGraphRegressionKey, type RegressionGateResult as CodingGraphRegressionResult, type CohenKappaResult, type ComparisonMetricDelta, type ComparisonResult, type CompletionOpts, type CompletionResult, type ConfidenceInterval, type ContaminationCheckResult, type ContaminationEntry, type ContaminationManifest, type CustomBenchmarkScoring, type CustomBenchmarkSpec, type CustomBenchmarkTask, DEFAULT_ABLATION_BENCHMARK, DEFAULT_ABLATION_BOOTSTRAP_SEED, DEFAULT_ASSISTANT_RUBRIC_ID, DEFAULT_BASELINE_SCENARIOS, DEFAULT_JUDGE_BINARIZATION_THRESHOLD, DEFAULT_KAPPA_BOOTSTRAP_SAMPLES, DEFAULT_KAPPA_CONFIDENCE_LEVEL, DEFAULT_OPENAI_RESPONSES_JUDGE_MODEL, type DatasetSource, type DiagnoseLoComoProfileDeltaOptions, type DiagnoseLoComoRecallDeltaOptions, type DiscoveredModel, EMPTY_CONTAMINATION_MANIFEST, type EffectSizeInterpretation, type EffectSizeSummary, type ExplainResult, type ExtractedEntity, type ExtractedLink, type ExtractedPage, type ExtractionAttackOptions, type ExtractionAttackResult, type ExtractionAttackTarget, type FixtureGenerator, type FixtureOutput, type FixtureVariant, GENERAL_ANSWER_JUDGE_RUBRIC, type GeneratedFile, type GeneratedRepo, type GoldEntity, type GoldEntityType, type GoldGraph, type GoldLink, type GoldPage, type HarnessRng, INTEGRITY_CIPHER_ALGORITHM, INTEGRITY_HASH_ALGORITHM, INTEGRITY_META_FIELDS, type IngestionBenchAdapter, type IngestionLog, JUDGE_CALIBRATION_KAPPA_THRESHOLD, type JudgeCalibrationIdentities, type JudgeCalibrationResult, type JudgeCategory, type KappaConfidenceInterval, LOCAL_LAB_PROVIDER_KINDS, LOCOMO_DATASET_FILENAMES, LOCOMO_FULL_TASK_COUNT, LOCOMO_RECALL_DIFF_LINE_LIMIT, LOCOMO_RECALL_EXCERPT_CHARS, LONG_MEM_EVAL_DATASET_FILENAMES, type LeaderboardArtifactWrite, type LettaAdapterConfig, LettaMemCorrectAdapter, type LlmJudge, type LlmProvider, type LoComoCategoryDelta, type LoComoFinalContextRegression, type LoComoMetricDelta, type LoComoProfileArtifactEvidence, type LoComoProfileDeltaReport, type LoComoRawResultEvidence, type LoComoRecallCategoryDelta, type LoComoRecallContextSummary, type LoComoRecallDeltaReport, type LoComoRecallLineDelta, type LoComoRecallLineEvidence, type LoComoRecallMetricDelta, type LoComoRecallResultProvenance, type LoComoRecallTextDigest, type LoComoTaskRegression, type LoadDatasetOptions, type LoadSealedQrelsOptions, type LoadedDataset, type LoadedJudgeCalibrationState, type LocalLabManifest, type LocalLabManifestNotes, type LocalLabPhase, type LocalLabPhaseDescriptor, type LocalLabPhaseExecute, type LocalLabPhaseName, type LocalLabPhaseOutcome, LocalLabPreflightError, type LocalLabPreflightFailure, type LocalLabPreflightInput, type LocalLabPreflightOptions, type LocalLabPreflightResult, type LocalLabPreflightSuccess, type LocalLabProviderKind, type LocalLabRoleConfig, type LocalLlmProviderConfig, MEMCORRECT_CORRECTION_ACCEPTANCE_RUBRIC, MEMCORRECT_CORRECTION_ACCEPTANCE_RUBRIC_VERSION, MEMCORRECT_STALE_HARM_RUBRIC, MEMCORRECT_STALE_HARM_RUBRIC_VERSION, MEMORY_EVAL_DIMENSIONS, MEMORY_EVAL_PUBLIC_LINE, MIN_CALIBRATION_SOURCE_TASKS, MITIGATED_BASELINE_SCENARIOS, type McpArgumentSemantic, type McpBackendErrorCode, type McpBackendResult, type McpBenchMemoryAdapter, type McpConformanceResult, type McpHttpTransportConfig, type McpListedTool, type McpMemCorrectAdapter, type McpMemoryAdapterOptions, McpMemoryBackendError, type McpMemoryToolMapping, type McpMemoryTransportConfig, type McpStdioTransportConfig, type McpToolCallResult, type McpToolClient, type McpToolMappingEntry, type McpToolMappingValue, type McpToolOperation, type Mem0AdapterConfig, Mem0MemCorrectAdapter, type MemCorrectGeneratorOptions, type MemCorrectJudgeRequest, type MemCorrectJudgeResult, type MemCorrectSystemAdapter, type MemoryEvalCategory, type MemoryEvalDimension, type MemoryEvalDimensionId, type MemoryEvalMetric, type MemoryGraph, type MemoryStats, type MemorySystem, type Message, type MetricAggregate, type MicroMetric, MissingCredentialError, type MitigatedBaselineConfig, type MitigatedTargetConfig, type MultipleChoiceQuestion, OPENAI_RESPONSES_JUDGE_RUBRIC_VERSION, OTHER_NAMESPACE_MEMORIES, type OllamaProviderConfig, type OpenAiCompatibleProviderConfig, OpenAiResponsesJudgeError, type OpenAiResponsesJudgeErrorCode, type OpenAiResponsesJudgeTelemetry, OpenAiResponsesProvider, type OpenAiResponsesProviderConfig, type OpenAiResponsesVerdict, type OpenAiResponsesVerdictResult, PROCEDURAL_REAL_SCENARIOS, PROCEDURAL_REAL_SCENARIOS_SMOKE, PUBLISHED_BENCHMARK_ARTIFACT_IDS, type PersonalizationRetrievalCase, type PreflightDiscoveredModel, type ProceduralAblationArtifact, type ProceduralAblationPerCase, type ProceduralAblationScenario, type ProceduralRealScenario, type ProceduralRealScenarioCategory, type ProviderBaseConfig, type ProviderConfig, type ProviderDiscoveryResult, type ProviderFactoryConfig, type PublishSkipReason, type PublishSkipRecord, type PublishedBenchmarkFeed, type PublishedBenchmarkFeedEntry, type PublishedBenchmarkId, REQUIRED_FRONTMATTER_FIELDS, type RecallMetrics, type RecoveredMemory, type RegressionDetail, type RegressionGateResult$1 as RegressionGateResult, type RemnicAdapterOptions, type ReportCardProvenanceContext, type ResolveBenchRuntimeProfileOptions, type ResolvedBenchRuntimeProfile, type ResolvedLocalLabProfile, type ResolvedLocalLabRole, type ResolvedRunBenchmarkOptions, type RotatedChoices, type RunBenchmarkOptions, type RunJudgeCalibrationOptions, type RunProceduralAblationCliArgs, type RunProceduralAblationOptions, type RunSequentialPhasesOptions, SCHEMA_TIER_FIXTURE, SCHEMA_TIER_SMOKE_FIXTURE, SEALED_PROMPT_REGISTRY, SINGLE_FLAG_ABLATION_MATRIX, SYNTHETIC_MEMORIES, type SanitizedDiagnosticProvider, type SavedBaseline, type SchemaTierCorpus, type SchemaTierFixture, type SchemaTierName, type SchemaTierPage, type SchemaTierPageFrontmatter, type SealedArtifact, type SealedJudgeDecision, type SealedJudgeInput, type SealedQrelsArtifact, type SealedQrelsHandle, type SealedRubric, type SearchResult, type SeededMemory, type SeededRng, type SequentialPhaseHooks, type SingleFlagAblationCell, type SingleFlagAblationId, type SpotCheckLogger, type StatisticalReport, type StructuredJudge, StructuredJudgeError, type StructuredJudgeErrorCode, type StructuredJudgeProvider, type StructuredJudgeTelemetry, type StructuredJudgeVerdict, type StructuredJudgeVerdictResult, type StructuredVerdictRequest, type SyntheticEdge, type SyntheticEmailIngestionAdapterOptions, type SyntheticFileIR, type SyntheticRepoConfig, type SyntheticSymbol, type SyntheticTargetOptions, type TaskResult, type TaskTokenUsage, type TemporalRetrievalCase, type ThirdPartyAdapterConfig, type TierDetail, type TimelineEntry, type TokenUsage, type WallMetric, type WriteBenchmarkArtifactResult, type ZepAdapterConfig, ZepMemCorrectAdapter, addContaminationEntry, aggregateTaskScores, answerBenchmarkQuestion, assertCanaryUnderFloor, assertIntegrityMetaPresent, assertPublishableIntegrity, assertSha256Hex, assistantMeetingPrepDefinition, assistantMorningBriefDefinition, assistantNextBestActionDefinition, assistantSynthesisDefinition, backlinkF1, binarizeJudgeScore, bootstrapCohensKappaConfidenceInterval, bootstrapMeanConfidenceInterval, buildAmaBenchDiagnosticMatrixArtifact, buildAmaBenchDiagnosticVariantSummary, buildAmaBenchLeaderboardRows, buildBaselineFromReport, buildBenchmarkArtifact, buildBenchmarkArtifactFilename, buildBenchmarkPublishFeed, buildBenchmarkReproManifest, buildBenchmarkRunSeeds, buildCodexCreditReceipt, buildJudgePayload, buildOracleTrajectoryRecall, buildSchemaTierFixture, buildSchemaTierSmokeFixture, calendarFixture, canonicalJsonStringify, captureMachineFingerprint, chatFixture, checkCodingGraphRegression, checkDatasetContamination, checkRegression, clampScore, cohensD, compareResults, computeCohensKappa, computeSealHash, containsAnswer, createSeededRng$1 as createAdamSeededRng, createAmaBenchDiagnosticAdapter, createAnthropicProvider, createCanaryAdapter, createClaudeCliProvider, createCodexCliProvider, createSeededRng as createCodingGraphSeededRng, createDeterministicSpotCheckLogger, createGatewayResponder, createLightweightAdapter, createLiteLlmProvider, createLocalLlmProvider, createMcpDemoMemCorrectAdapter, createMcpDemoMemoryAdapter, createMcpMemCorrectAdapter, createMcpMemoryAdapter, createMitigatedTarget, createOllamaProvider, createOpenAiCompatibleProvider, createOpenAiResponsesBenchJudge, createOpenAiResponsesProvider, createSeededRandom as createProceduralAblationSeededRandom, createProvider, createProviderBackedAmaBenchRecommendedJudge, createProviderBackedJudge, createProviderBackedResponder, createProviderBackedStructuredJudge, createRemnicAdapter, createResponderFromProvider, createSeededRng$2 as createSeededRng, createSpotCheckFileLogger, createStructuredBenchJudge, createStructuredJudgeFromProvider, createSyntheticEmailIngestionAdapter, createSyntheticTarget, createTimeoutGuardedAdapter, defaultBenchmarkBaselineDir, defaultBenchmarkPublishPath, deleteBenchmarkResults, diagnoseLoComoProfileDelta, diagnoseLoComoRecallDelta, discoverAllProviders, discoveryEndpointFor, emailFixture, entityRecall, exactMatch, extractMetrics as extractCodingGraphMetrics, extractMarkdownSectionsByTitle, f1Score, fixtureToAblationScenarios, formatHandoffNote, formatMissingDatasetError, generateReport, generateSyntheticRepo, getAblationCell, getBenchmark, getBenchmarkLowerIsBetter, getMemoryEvalDimension, getRemnicVersion, hashBenchmarkArtifact, hashBytes, hashCanonicalJson, hashString, integrityMetaIsComplete, interpretEffectSize, isAmaBenchUnknownLikeAnswer, isContaminationEntry, isContaminationManifest, isSealedQrelsArtifact, isSha256Hex, isStructuredJudgeProvider, judgeMemCorrectCorrectionAcceptance, judgeMemCorrectStaleMemoryHarm, linkMatches, listBenchmarkBaselines, listBenchmarkResults, listBenchmarks, listMemoryEvalBenchmarkIds, listMemoryEvalDimensions, llmJudgeScore, llmJudgeScoreDetailed, loadAblationFixture, loadBaseline, loadBeamDatasetPreview, loadBenchmarkArtifact, loadBenchmarkBaseline, loadBenchmarkReportCardProvenance, loadBenchmarkResult, loadCustomBenchmarkFile, loadJudgeCalibrationState, loadLoCoMo10, loadLocalLabManifest, loadLongMemEvalS, loadSealKeyFromEnv, loadSealedQrels, loadSealedRubric, matchEntity, mergeContaminationManifests, openSeal, orchestrateBenchmarkRuns, pairedDeltaConfidenceInterval, parseBenchmarkArtifact, parseCustomBenchmark, parseLocalLabManifest, parseRubricResponse, parseSealedQrels, pickStableQualifiedName, precisionAtK, preflightLocalLabRole, projectFolderFixture, recallAtK, reconcileCodexCreditLedger, redactBenchmarkResultSecrets, renderBaselineMarkdown, renderBenchmarkResultExport, renderLoComoProfileDeltaMarkdown, renderLoComoRecallDeltaMarkdown, renderMemorySummaryForJudge, renderMemoryViewForAgent, resolveAssistantAgent, resolveAssistantRubricId, resolveAssistantSeeds, resolveAssistantSpotCheckDir, resolveBenchRuntimeProfile, resolveBenchmarkPhaseTimeoutMs, resolveBenchmarkProgressLogging, resolveBenchmarkResultReference, resolveBenchmarkRunCount, resolveLocalLabProfile, resolveLocalLabRole, resolveStructuredJudge, rotateDistractors, rougeL, runAssistantBenchmark, runAssistantMeetingPrepBenchmark, runAssistantMorningBriefBenchmark, runAssistantNextBestActionBenchmark, runAssistantSynthesisBenchmark, runBaseline, runBenchSuite, runBenchmark, runCodingGraphBenchmark, runCustomBenchmarkFile, runExplain, runExtractionAttack, runJudgeCalibration, runMitigatedBaseline, runProceduralAblation, runProceduralAblationCli, runSealedJudge, runSequentialPhases, safeHexEqual, sanitizeLoComoResultReference, saveBaseline, saveBenchmarkBaseline, schemaCompleteness, sealPayload, selectAmaBenchDiagnosticVariants, selectCalibrationSlice, selectFixtureVariant, serializeBenchmarkArtifact, serializeJsonl, serializeSealedQrels, shuffleTasks, timed, verifyRubricDigest, writeBenchmarkArtifact, writeBenchmarkPublishFeed, writeBenchmarkReproManifest, writeBenchmarkResult, writeJudgeCalibrationState, writeLeaderboardArtifactsForResult, zeroScores };
package/dist/index.js CHANGED
@@ -5509,6 +5509,7 @@ import { mkdir as mkdir2, open, readFile as readFile3, rename as rename2, rmdir,
5509
5509
  import os from "os";
5510
5510
  import path3 from "path";
5511
5511
  var ONE_MILLION = 1e6;
5512
+ var CREDIT_EPSILON = 1e-9;
5512
5513
  var MAX_BOUNDED_CALL_CREDITS = 300;
5513
5514
  var SOL_MODEL = /^gpt-5\.6-sol$/i;
5514
5515
  var CREDIT_RATES = [
@@ -5534,6 +5535,123 @@ var CodexCreditDispatchError = class extends Error {
5534
5535
  this.name = "CodexCreditDispatchError";
5535
5536
  }
5536
5537
  };
5538
+ async function reconcileCodexCreditLedger(args) {
5539
+ if (args.originalBudgetBalanceConfirmed !== true) {
5540
+ throw new Error(
5541
+ "Codex credit reconciliation requires confirmation that the observed balance belongs to the ledger's original budget"
5542
+ );
5543
+ }
5544
+ if (args.noCreditsAddedOrRefundedConfirmed !== true) {
5545
+ throw new Error(
5546
+ "Codex credit reconciliation requires confirmation that no credits were added or refunded after the original budget was established"
5547
+ );
5548
+ }
5549
+ if (args.accountWideUnattributedChargeAccepted !== true) {
5550
+ throw new Error(
5551
+ "Codex credit reconciliation requires acknowledgment that all unexplained account activity will be charged as account-wide unattributed spend"
5552
+ );
5553
+ }
5554
+ if (!isSha256(args.priorLedgerSha256)) {
5555
+ throw new Error("priorLedgerSha256 must be a lowercase SHA-256 digest");
5556
+ }
5557
+ if (!Number.isFinite(args.observedRemainingCredits) || args.observedRemainingCredits < 0) {
5558
+ throw new Error("observedRemainingCredits must be a finite non-negative number");
5559
+ }
5560
+ const affectedRunId = parseRequiredRunId(args.affectedRunId, "affectedRunId");
5561
+ const ledgerPath = path3.resolve(expandHomeRelativePath(args.ledgerPath));
5562
+ const previous = completionQueue;
5563
+ let release;
5564
+ completionQueue = new Promise((resolve) => {
5565
+ release = resolve;
5566
+ });
5567
+ await previous;
5568
+ const lockPath = `${ledgerPath}.lock`;
5569
+ let lock;
5570
+ try {
5571
+ await mkdir2(path3.dirname(lockPath), { recursive: true, mode: 448 });
5572
+ lock = await acquireLedgerLock(lockPath);
5573
+ const contents = await readFile3(ledgerPath);
5574
+ const currentSha256 = sha256(contents);
5575
+ if (currentSha256 !== args.priorLedgerSha256) {
5576
+ throw new Error(
5577
+ `Codex credit ledger changed since operator observation: expected ${args.priorLedgerSha256}, found ${currentSha256}; obtain a fresh ledger hash and remaining balance`
5578
+ );
5579
+ }
5580
+ const ledger = parseLedger(JSON.parse(contents.toString("utf8")));
5581
+ if (!ledger.blockedReason) {
5582
+ throw new Error("Codex credit ledger is not blocked; reconciliation is not permitted");
5583
+ }
5584
+ if (args.observedRemainingCredits > ledger.budgetCredits) {
5585
+ throw new Error("observedRemainingCredits cannot exceed the ledger budget");
5586
+ }
5587
+ const rawUnattributedCredits = ledger.budgetCredits - args.observedRemainingCredits - ledger.spentCredits;
5588
+ if (!Number.isFinite(rawUnattributedCredits) || rawUnattributedCredits < -CREDIT_EPSILON) {
5589
+ throw new Error(
5590
+ "observedRemainingCredits implies less spend than the ledger already records; reconciliation refused"
5591
+ );
5592
+ }
5593
+ const unattributedCredits = Math.abs(rawUnattributedCredits) <= CREDIT_EPSILON ? 0 : rawUnattributedCredits;
5594
+ const observedSpentCredits = ledger.spentCredits + unattributedCredits;
5595
+ const at = (/* @__PURE__ */ new Date()).toISOString();
5596
+ const reconciliation = {
5597
+ at,
5598
+ basis: "operator-observed-original-budget-balance",
5599
+ attribution: "account-wide-unattributed",
5600
+ priorLedgerSha256: currentSha256,
5601
+ originalBudgetCredits: ledger.budgetCredits,
5602
+ priorRecordedSpentCredits: ledger.spentCredits,
5603
+ observedRemainingCredits: args.observedRemainingCredits,
5604
+ credits: normalizeZero(unattributedCredits),
5605
+ confirmations: {
5606
+ observedBalanceBelongsToOriginalBudget: true,
5607
+ noCreditsAddedOrRefunded: true,
5608
+ accountWideUnattributedChargeAccepted: true
5609
+ },
5610
+ affectedBlockedEvent: {
5611
+ runId: affectedRunId,
5612
+ blockedReason: ledger.blockedReason
5613
+ }
5614
+ };
5615
+ const nextLedger = {
5616
+ ...ledger,
5617
+ spentCredits: observedSpentCredits,
5618
+ reconciliations: [...ledger.reconciliations ?? [], reconciliation],
5619
+ blockedReason: void 0
5620
+ };
5621
+ await writeLedger(ledgerPath, nextLedger);
5622
+ await writeLockState(lock, "settled");
5623
+ const nextContents = await readFile3(ledgerPath);
5624
+ return {
5625
+ schemaVersion: 1,
5626
+ priorLedgerSha256: currentSha256,
5627
+ ledgerSha256: sha256(nextContents),
5628
+ at,
5629
+ attribution: "account-wide-unattributed",
5630
+ affectedRunId,
5631
+ originalBudgetCredits: ledger.budgetCredits,
5632
+ priorRecordedSpentCredits: ledger.spentCredits,
5633
+ observedRemainingCredits: args.observedRemainingCredits,
5634
+ unattributedCredits: reconciliation.credits,
5635
+ totalSpentCredits: observedSpentCredits,
5636
+ totalRemainingCredits: args.observedRemainingCredits,
5637
+ affectedBlockedEventSha256: sha256(
5638
+ JSON.stringify(reconciliation.affectedBlockedEvent)
5639
+ )
5640
+ };
5641
+ } finally {
5642
+ try {
5643
+ if (lock) {
5644
+ try {
5645
+ await lock.close();
5646
+ } finally {
5647
+ await removeOwnedLedgerLock(lockPath);
5648
+ }
5649
+ }
5650
+ } finally {
5651
+ release();
5652
+ }
5653
+ }
5654
+ }
5537
5655
  function resolveCodexCreditBudgetConfig(env = process.env, fallbackRunId) {
5538
5656
  const rawBudget = env.REMNIC_BENCH_CODEX_CREDIT_BUDGET?.trim();
5539
5657
  if (!rawBudget) return void 0;
@@ -5793,11 +5911,12 @@ async function buildCodexCreditReceipt(ledgerPath, runId) {
5793
5911
  const contents = await readFile3(resolvedPath);
5794
5912
  const ledger = parseLedger(JSON.parse(contents.toString("utf8")));
5795
5913
  const normalizedRunId = parseOptionalRunId(runId);
5796
- const cumulative = summarizeLedgerEntries(ledger.entries);
5914
+ const reconciliations = ledger.reconciliations ?? [];
5915
+ const cumulative = summarizeLedgerEntries(ledger.entries, reconciliations);
5797
5916
  const runEntries = normalizedRunId ? ledger.entries.filter((entry) => entry.runId === normalizedRunId) : [];
5798
5917
  return {
5799
5918
  schemaVersion: 1,
5800
- ledgerSha256: createHash3("sha256").update(contents).digest("hex"),
5919
+ ledgerSha256: sha256(contents),
5801
5920
  budgetCredits: ledger.budgetCredits,
5802
5921
  reserveCredits: ledger.reserveCredits,
5803
5922
  plannedSpendCeilingCredits: ledger.budgetCredits - ledger.reserveCredits,
@@ -5805,7 +5924,12 @@ async function buildCodexCreditReceipt(ledgerPath, runId) {
5805
5924
  totalRemainingCredits: ledger.budgetCredits - ledger.spentCredits,
5806
5925
  blocked: ledger.blockedReason !== void 0,
5807
5926
  cumulative,
5808
- ...normalizedRunId ? { run: { id: normalizedRunId, ...summarizeLedgerEntries(runEntries) } } : {}
5927
+ ...normalizedRunId ? {
5928
+ run: {
5929
+ id: normalizedRunId,
5930
+ ...summarizeLedgerEntries(runEntries)
5931
+ }
5932
+ } : {}
5809
5933
  };
5810
5934
  }
5811
5935
  function resolveRate(model) {
@@ -5852,11 +5976,36 @@ function parseLedger(parsed) {
5852
5976
  (sum, entry) => sum + (typeof entry?.credits === "number" ? entry.credits ?? 0 : 0),
5853
5977
  0
5854
5978
  ) : Number.NaN;
5855
- if (parsed.schemaVersion !== 1 || typeof parsed.budgetCredits !== "number" || !Number.isFinite(parsed.budgetCredits) || parsed.budgetCredits <= 0 || typeof parsed.reserveCredits !== "number" || !Number.isFinite(parsed.reserveCredits) || parsed.reserveCredits < 0 || parsed.reserveCredits >= parsed.budgetCredits || typeof parsed.spentCredits !== "number" || !Number.isFinite(parsed.spentCredits) || parsed.spentCredits < 0 || !Array.isArray(parsed.entries) || !parsed.entries.every(isLedgerEntry) || Math.abs(entryCredits - parsed.spentCredits) > 1e-9 || parsed.blockedReason !== void 0 && typeof parsed.blockedReason !== "string") {
5979
+ const reconciliationCredits = parsed.reconciliations === void 0 ? 0 : Array.isArray(parsed.reconciliations) ? parsed.reconciliations.reduce(
5980
+ (sum, reconciliation) => sum + (typeof reconciliation?.credits === "number" ? reconciliation.credits ?? 0 : 0),
5981
+ 0
5982
+ ) : Number.NaN;
5983
+ if (parsed.schemaVersion !== 1 || typeof parsed.budgetCredits !== "number" || !Number.isFinite(parsed.budgetCredits) || parsed.budgetCredits <= 0 || typeof parsed.reserveCredits !== "number" || !Number.isFinite(parsed.reserveCredits) || parsed.reserveCredits < 0 || parsed.reserveCredits >= parsed.budgetCredits || typeof parsed.spentCredits !== "number" || !Number.isFinite(parsed.spentCredits) || parsed.spentCredits < 0 || !Array.isArray(parsed.entries) || !parsed.entries.every(isLedgerEntry) || parsed.reconciliations !== void 0 && (!Array.isArray(parsed.reconciliations) || !parsed.reconciliations.every(
5984
+ (reconciliation) => isLedgerReconciliationWithinBudget(reconciliation, parsed.budgetCredits)
5985
+ )) || Math.abs(entryCredits + reconciliationCredits - parsed.spentCredits) > 1e-9 || parsed.blockedReason !== void 0 && typeof parsed.blockedReason !== "string") {
5856
5986
  throw new Error("ledger schema is invalid");
5857
5987
  }
5858
5988
  return parsed;
5859
5989
  }
5990
+ function isLedgerReconciliation(value) {
5991
+ if (!value || typeof value !== "object") return false;
5992
+ const candidate = value;
5993
+ const forbiddenUsageFields = [
5994
+ "runId",
5995
+ "unknownEvent",
5996
+ "model",
5997
+ "inputTokens",
5998
+ "cachedInputTokens",
5999
+ "outputTokens",
6000
+ "reasoningOutputTokens"
6001
+ ];
6002
+ return forbiddenUsageFields.every((field) => !Object.prototype.hasOwnProperty.call(candidate, field)) && isIsoTimestamp(candidate.at) && candidate.basis === "operator-observed-original-budget-balance" && candidate.attribution === "account-wide-unattributed" && isSha256(candidate.priorLedgerSha256) && typeof candidate.originalBudgetCredits === "number" && Number.isFinite(candidate.originalBudgetCredits) && candidate.originalBudgetCredits > 0 && typeof candidate.priorRecordedSpentCredits === "number" && Number.isFinite(candidate.priorRecordedSpentCredits) && candidate.priorRecordedSpentCredits >= 0 && typeof candidate.observedRemainingCredits === "number" && Number.isFinite(candidate.observedRemainingCredits) && candidate.observedRemainingCredits >= 0 && typeof candidate.credits === "number" && Number.isFinite(candidate.credits) && candidate.credits >= 0 && candidate.confirmations?.observedBalanceBelongsToOriginalBudget === true && candidate.confirmations.noCreditsAddedOrRefunded === true && candidate.confirmations.accountWideUnattributedChargeAccepted === true && isValidStoredRunId(candidate.affectedBlockedEvent?.runId) && typeof candidate.affectedBlockedEvent?.blockedReason === "string" && candidate.affectedBlockedEvent.blockedReason.length > 0;
6003
+ }
6004
+ function isLedgerReconciliationWithinBudget(value, budget) {
6005
+ return typeof budget === "number" && isLedgerReconciliation(value) && value.originalBudgetCredits === budget && value.observedRemainingCredits <= budget && value.credits <= budget && Math.abs(
6006
+ value.priorRecordedSpentCredits + value.credits + value.observedRemainingCredits - budget
6007
+ ) <= 1e-9;
6008
+ }
5860
6009
  function isLedgerEntry(entry) {
5861
6010
  if (!entry || typeof entry !== "object") return false;
5862
6011
  const candidate = entry;
@@ -5869,7 +6018,7 @@ function isEntryCreditConsistent(entry) {
5869
6018
  return false;
5870
6019
  }
5871
6020
  }
5872
- function summarizeLedgerEntries(entries) {
6021
+ function summarizeLedgerEntries(entries, reconciliations = []) {
5873
6022
  const byModel = /* @__PURE__ */ new Map();
5874
6023
  for (const entry of entries) {
5875
6024
  const modelEntries = byModel.get(entry.model) ?? [];
@@ -5879,7 +6028,12 @@ function summarizeLedgerEntries(entries) {
5879
6028
  const totals = summarizeUsage(entries);
5880
6029
  return {
5881
6030
  calls: entries.length,
5882
- credits: entries.reduce((sum, entry) => sum + entry.credits, 0),
6031
+ credits: entries.reduce((sum, entry) => sum + entry.credits, 0) + reconciliations.reduce((sum, reconciliation) => sum + reconciliation.credits, 0),
6032
+ unattributedReconciliationCount: reconciliations.length,
6033
+ unattributedReconciledCredits: reconciliations.reduce(
6034
+ (sum, reconciliation) => sum + reconciliation.credits,
6035
+ 0
6036
+ ),
5883
6037
  ...totals,
5884
6038
  models: [...byModel.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([model, modelEntries]) => ({
5885
6039
  model,
@@ -5958,6 +6112,30 @@ function hasControlCharacters(value) {
5958
6112
  }
5959
6113
  return false;
5960
6114
  }
6115
+ function parseRequiredRunId(value, name) {
6116
+ const runId = value?.trim();
6117
+ if (!runId || !isValidStoredRunId(runId)) {
6118
+ throw new Error(`${name} must be 1 to 128 trimmed characters without control characters`);
6119
+ }
6120
+ return runId;
6121
+ }
6122
+ function isSha256(value) {
6123
+ return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
6124
+ }
6125
+ function sha256(value) {
6126
+ return createHash3("sha256").update(value).digest("hex");
6127
+ }
6128
+ function normalizeZero(value) {
6129
+ return Object.is(value, -0) ? 0 : value;
6130
+ }
6131
+ function isIsoTimestamp(value) {
6132
+ if (typeof value !== "string") return false;
6133
+ try {
6134
+ return new Date(value).toISOString() === value;
6135
+ } catch {
6136
+ return false;
6137
+ }
6138
+ }
5961
6139
 
5962
6140
  // src/results-store.ts
5963
6141
  import { mkdir as mkdir3, readdir as readdir3, readFile as readFile4, unlink as unlink3, writeFile as writeFile3 } from "fs/promises";
@@ -14553,6 +14731,8 @@ function resolveOpenClawRemnicPluginEntry(raw) {
14553
14731
  }
14554
14732
  var REDACTED_CONFIG_VALUE = "[redacted]";
14555
14733
  var INTERNAL_GATEWAY_AGENT_ID = "remnic-bench-internal";
14734
+ var DEFAULT_CODEX_CLI_REQUEST_TIMEOUT_MS = 18e4;
14735
+ var DEFAULT_CODEX_CLI_DRAIN_TIMEOUT_MS = 6e5;
14556
14736
  var codexCliFallbackRegistered = false;
14557
14737
  var codexCliFallbackChain = Promise.resolve();
14558
14738
  async function resolveBenchRuntimeProfile(options) {
@@ -14606,8 +14786,11 @@ async function resolveBenchRuntimeProfile(options) {
14606
14786
  { disableThinking: options.internalDisableThinking === true }
14607
14787
  );
14608
14788
  const lcmObserveConcurrencyOverrides = buildLcmObserveConcurrencyOverrides(options.lcmObserveConcurrency);
14789
+ const usesImplicitCodexRequestTimeout = options.requestTimeout === void 0 && [systemProvider, judgeProvider, internalProvider].some(
14790
+ (config) => config?.provider === "codex-cli"
14791
+ );
14609
14792
  const drainTimeoutMs = normalizeDrainTimeoutMs2(
14610
- options.drainTimeout ?? options.requestTimeout
14793
+ options.drainTimeout ?? options.requestTimeout ?? (usesImplicitCodexRequestTimeout ? DEFAULT_CODEX_CLI_DRAIN_TIMEOUT_MS : void 0)
14611
14794
  );
14612
14795
  registerCodexCliFallbackRunnerIfNeeded(internalProvider);
14613
14796
  const responderFactoryConfig = systemProvider ? asProviderFactoryConfig(systemProvider) : void 0;
@@ -14819,6 +15002,7 @@ function resolveProviderConfig(kind, provider, model, baseUrl, requestTimeout, d
14819
15002
  `${kind} Codex reasoning effort requires provider "codex-cli"`
14820
15003
  );
14821
15004
  }
15005
+ const providerRequestTimeoutMs = requestTimeout === void 0 && provider === "codex-cli" ? DEFAULT_CODEX_CLI_REQUEST_TIMEOUT_MS : void 0;
14822
15006
  return {
14823
15007
  provider,
14824
15008
  model: resolvedModel.trim(),
@@ -14829,6 +15013,7 @@ function resolveProviderConfig(kind, provider, model, baseUrl, requestTimeout, d
14829
15013
  ...requestTimeout != null ? { timeoutMs: requestTimeout } : {},
14830
15014
  ...max429WaitMs != null ? { max429WaitMs } : {}
14831
15015
  } } : {},
15016
+ ...providerRequestTimeoutMs !== void 0 ? { providerRequestTimeoutMs } : {},
14832
15017
  ...disableThinking ? { disableThinking: true } : {},
14833
15018
  ...provider === "codex-cli" ? { reasoningEffort: reasoningEffort ?? "xhigh" } : {},
14834
15019
  ...responderContextBudgetChars !== void 0 ? { responderContextBudgetChars } : {},
@@ -14884,13 +15069,14 @@ function buildInternalRemnicConfigOverrides(config, options) {
14884
15069
  ...config.retryOptions?.timeoutMs ? { localLlmTimeoutMs: config.retryOptions.timeoutMs } : {}
14885
15070
  };
14886
15071
  }
15072
+ const providerTimeoutMs = config.retryOptions?.timeoutMs ?? config.providerRequestTimeoutMs;
14887
15073
  return {
14888
15074
  ...thinkingOverrides,
14889
15075
  modelSource: "gateway",
14890
15076
  localLlmEnabled: false,
14891
- ...config.retryOptions?.timeoutMs ? {
14892
- localLlmTimeoutMs: config.retryOptions.timeoutMs,
14893
- localLlmFastTimeoutMs: config.retryOptions.timeoutMs
15077
+ ...providerTimeoutMs ? {
15078
+ localLlmTimeoutMs: providerTimeoutMs,
15079
+ localLlmFastTimeoutMs: providerTimeoutMs
14894
15080
  } : {},
14895
15081
  gatewayConfig: buildInternalGatewayConfig(config, options),
14896
15082
  gatewayAgentId: INTERNAL_GATEWAY_AGENT_ID,
@@ -14900,7 +15086,7 @@ function buildInternalRemnicConfigOverrides(config, options) {
14900
15086
  function buildInternalGatewayConfig(config, options) {
14901
15087
  const providerId = INTERNAL_GATEWAY_AGENT_ID;
14902
15088
  const modelRef = `${providerId}/${config.model}`;
14903
- const timeoutMs = config.retryOptions?.timeoutMs;
15089
+ const timeoutMs = config.retryOptions?.timeoutMs ?? config.providerRequestTimeoutMs;
14904
15090
  return {
14905
15091
  agents: {
14906
15092
  defaults: {
@@ -15086,12 +15272,16 @@ function createAssistantAgentFromResponder2(responder) {
15086
15272
  };
15087
15273
  }
15088
15274
  function asProviderFactoryConfig(config) {
15275
+ const retryOptions = config.retryOptions || config.providerRequestTimeoutMs !== void 0 ? {
15276
+ ...config.retryOptions,
15277
+ ...config.retryOptions?.timeoutMs === void 0 && config.providerRequestTimeoutMs !== void 0 ? { timeoutMs: config.providerRequestTimeoutMs } : {}
15278
+ } : void 0;
15089
15279
  return {
15090
15280
  provider: config.provider,
15091
15281
  model: config.model,
15092
15282
  ...config.baseUrl ? { baseUrl: config.baseUrl } : {},
15093
15283
  ...config.apiKey ? { apiKey: config.apiKey } : {},
15094
- ...config.retryOptions ? { retryOptions: config.retryOptions } : {},
15284
+ ...retryOptions ? { retryOptions } : {},
15095
15285
  ...config.disableThinking ? { disableThinking: config.disableThinking } : {},
15096
15286
  ...config.reasoningEffort ? { reasoningEffort: config.reasoningEffort } : {},
15097
15287
  ...config.temperature !== void 0 ? { temperature: config.temperature } : {},
@@ -32094,9 +32284,9 @@ function loadSealedRubric(id = DEFAULT_ASSISTANT_RUBRIC_ID, options = {}) {
32094
32284
  if (typeof prompt !== "string" || prompt.length === 0) {
32095
32285
  throw new Error(`sealed rubric not found in registry: ${id}`);
32096
32286
  }
32097
- const sha256 = createHash9("sha256").update(prompt, "utf8").digest("hex");
32287
+ const sha2563 = createHash9("sha256").update(prompt, "utf8").digest("hex");
32098
32288
  const version = parseVersionFromId(id);
32099
- return { id, version, prompt, sha256 };
32289
+ return { id, version, prompt, sha256: sha2563 };
32100
32290
  }
32101
32291
  function verifyRubricDigest(expectedSha256, options = {}) {
32102
32292
  const rubric = loadSealedRubric(options.id, { registry: options.registry });
@@ -38030,6 +38220,523 @@ function formatSignedScore(value) {
38030
38220
  return `${value >= 0 ? "+" : ""}${formatScore(value)}`;
38031
38221
  }
38032
38222
 
38223
+ // src/stats/locomo-recall-delta.ts
38224
+ import { createHash as createHash13 } from "crypto";
38225
+ import { basename } from "path";
38226
+ var LOCOMO_FULL_TASK_COUNT = 1986;
38227
+ var LOCOMO_RECALL_EXCERPT_CHARS = 240;
38228
+ var LOCOMO_RECALL_DIFF_LINE_LIMIT = 20;
38229
+ var LOCOMO_CATEGORY_ORDER2 = ["single_hop", "multi_hop", "temporal", "open_domain", "adversarial"];
38230
+ var LOCOMO_TASK_CATEGORY_PATTERN2 = /-(single_hop|multi_hop|temporal|open_domain|adversarial)$/;
38231
+ var SOURCE_TURN_PATTERN = /^\[([^,\]\s]+),\s*turn\s+(\d+),\s*([^,\]]+?)(?:,\s*score\s+[^\]]+)?\]/i;
38232
+ var SHA256_PATTERN = /^[a-f0-9]{64}$/;
38233
+ function sanitizeLoComoResultReference(path40) {
38234
+ const reference = basename(path40).replace(/[\u0000-\u001f\u007f`]/g, "_");
38235
+ if (!reference) throw new Error("Result path must identify a file.");
38236
+ return reference;
38237
+ }
38238
+ function diagnoseLoComoRecallDelta(options) {
38239
+ const primaryMetric2 = options.primaryMetric ?? "llm_judge";
38240
+ const maxRegressions = parseNonNegativeInteger(options.maxRegressions ?? 20, "maxRegressions");
38241
+ assertEvidenceEnvelope(options.baseline, "baseline");
38242
+ assertEvidenceEnvelope(options.real, "real");
38243
+ assertCompleteResult(options.baseline.result, "baseline");
38244
+ assertCompleteResult(options.real.result, "real");
38245
+ assertComparableResults(options.baseline.result, options.real.result);
38246
+ const joined = joinTasks2(options.baseline.result, options.real.result);
38247
+ assertMetricSets(joined, primaryMetric2);
38248
+ verifyAggregateMeans(options.baseline.result, joined, "baseline");
38249
+ verifyAggregateMeans(options.real.result, joined, "real");
38250
+ const overall = summarizeMetric(joined, primaryMetric2);
38251
+ const categories = [...new Set(joined.map((task) => task.category))].sort(compareLoComoCategories2).map((category) => {
38252
+ const tasks = joined.filter((task) => task.category === category);
38253
+ return {
38254
+ category,
38255
+ taskCount: tasks.length,
38256
+ ...summarizeMetric(tasks, primaryMetric2)
38257
+ };
38258
+ });
38259
+ const topRegressions = joined.map((task) => buildRegression(task, primaryMetric2, LOCOMO_RECALL_EXCERPT_CHARS, LOCOMO_RECALL_DIFF_LINE_LIMIT)).filter((task) => task.delta < 0).sort((left, right) => left.delta - right.delta || compareStrings(left.taskId, right.taskId)).slice(0, maxRegressions);
38260
+ return {
38261
+ schemaVersion: 1,
38262
+ benchmarkId: "locomo",
38263
+ comparison: {
38264
+ baseline: buildProvenance(options.baseline, "baseline", joined, "baseline"),
38265
+ real: buildProvenance(options.real, "real", joined, "real")
38266
+ },
38267
+ taskCount: joined.length,
38268
+ primaryMetric: primaryMetric2,
38269
+ overall,
38270
+ categories,
38271
+ topRegressions,
38272
+ evidenceBoundary: {
38273
+ finalContextComparison: "complete",
38274
+ retrievalTierAttribution: "unavailable-in-cached-results",
38275
+ hiddenEvidenceUsed: false,
38276
+ explanation: "Cached BenchmarkResult files preserve the final transformed recall context, but not pre-transform candidates, section provenance, filter traces, or served-by tiers."
38277
+ }
38278
+ };
38279
+ }
38280
+ function renderLoComoRecallDeltaMarkdown(report) {
38281
+ const lines = [
38282
+ "# LoCoMo paired final-context diagnosis",
38283
+ "",
38284
+ `Joined ${report.taskCount} complete paired tasks. The primary metric is \`${report.primaryMetric}\` (real minus baseline).`,
38285
+ "",
38286
+ "| Category | Tasks | Baseline | Real | Delta | Wins | Losses | Ties |",
38287
+ "|---|---:|---:|---:|---:|---:|---:|---:|"
38288
+ ];
38289
+ for (const category of report.categories) {
38290
+ lines.push(
38291
+ `| ${escapeMarkdownCell(category.category)} | ${category.taskCount} | ${formatScore2(category.baselineMean)} | ${formatScore2(category.realMean)} | ${formatSignedScore2(category.delta)} | ${category.wins} | ${category.losses} | ${category.ties} |`
38292
+ );
38293
+ }
38294
+ lines.push(
38295
+ `| **Overall** | **${report.taskCount}** | **${formatScore2(report.overall.baselineMean)}** | **${formatScore2(report.overall.realMean)}** | **${formatSignedScore2(report.overall.delta)}** | **${report.overall.wins}** | **${report.overall.losses}** | **${report.overall.ties}** |`,
38296
+ "",
38297
+ "## Highest-priority final-context regressions",
38298
+ ""
38299
+ );
38300
+ for (const task of report.topRegressions) {
38301
+ lines.push(
38302
+ `### ${escapeMarkdownCell(task.taskId)}`,
38303
+ "",
38304
+ `Category: \`${task.category}\`; baseline ${formatScore2(task.baselineScore)}, real ${formatScore2(task.realScore)}, delta ${formatSignedScore2(task.delta)}.`,
38305
+ "",
38306
+ `Recall: baseline ${task.baseline.recall.charCount} chars (expected-token coverage ${formatScore2(task.baseline.recall.expectedTokenCoverage)}), real ${task.real.recall.charCount} chars (coverage ${formatScore2(task.real.recall.expectedTokenCoverage)}).`,
38307
+ "",
38308
+ `Displaced lines: ${task.displacedLines.totalCount}; introduced lines: ${task.introducedLines.totalCount}.`,
38309
+ ""
38310
+ );
38311
+ const displaced = task.displacedLines.lines[0];
38312
+ if (displaced) {
38313
+ lines.push(
38314
+ `- Baseline-only evidence: ${escapeMarkdownCell(displaced.excerpt)} (sha256 \`${displaced.sha256}\`)`
38315
+ );
38316
+ }
38317
+ const introduced = task.introducedLines.lines[0];
38318
+ if (introduced) {
38319
+ lines.push(
38320
+ `- Real-only evidence: ${escapeMarkdownCell(introduced.excerpt)} (sha256 \`${introduced.sha256}\`)`
38321
+ );
38322
+ }
38323
+ if (displaced || introduced) lines.push("");
38324
+ }
38325
+ lines.push(
38326
+ "## Evidence boundary",
38327
+ "",
38328
+ "The final responder contexts are compared completely by hash, length, headings, source references, and bounded line-difference receipts. Retrieval-tier attribution is unavailable because the cached results do not preserve served-by or candidate traces. Hidden `details.evidence` metadata is not read or emitted.",
38329
+ "",
38330
+ `Baseline: \`${report.comparison.baseline.reference}\` (sha256 \`${report.comparison.baseline.sha256}\`)`,
38331
+ "",
38332
+ `Real: \`${report.comparison.real.reference}\` (sha256 \`${report.comparison.real.sha256}\`)`,
38333
+ ""
38334
+ );
38335
+ return `${lines.join("\n")}
38336
+ `;
38337
+ }
38338
+ function assertEvidenceEnvelope(evidence, label) {
38339
+ if (!evidence.reference.trim()) {
38340
+ throw new Error(`${label} result reference must not be empty.`);
38341
+ }
38342
+ if (!SHA256_PATTERN.test(evidence.sha256)) {
38343
+ throw new Error(`${label} result sha256 must be 64 lowercase hexadecimal characters.`);
38344
+ }
38345
+ }
38346
+ function assertCompleteResult(result, label) {
38347
+ if (result.meta.benchmark !== "locomo") {
38348
+ throw new Error(`${label} result must be a locomo benchmark result.`);
38349
+ }
38350
+ if (result.meta.mode !== "full" || result.meta.status === "partial") {
38351
+ throw new Error(`${label} result must be a complete full-mode run.`);
38352
+ }
38353
+ if (!result.config.systemProvider || !result.config.judgeProvider) {
38354
+ throw new Error(`${label} result must identify both system and judge providers.`);
38355
+ }
38356
+ const limit = result.config.benchmarkOptions?.limit;
38357
+ const trialLimit = result.config.benchmarkOptions?.trialLimit;
38358
+ if (limit !== void 0 || trialLimit !== void 0) {
38359
+ throw new Error(`${label} result is limited and cannot be used as complete evidence.`);
38360
+ }
38361
+ if (result.results.tasks.length !== LOCOMO_FULL_TASK_COUNT) {
38362
+ throw new Error(
38363
+ `${label} result must contain exactly ${LOCOMO_FULL_TASK_COUNT} tasks; got ${result.results.tasks.length}.`
38364
+ );
38365
+ }
38366
+ for (const task of result.results.tasks) {
38367
+ const details = asRecord(task.details);
38368
+ const failure = details?.benchmarkFailure;
38369
+ const legacyError = details?.error;
38370
+ if (failure !== void 0 && failure !== null || typeof legacyError === "string" && legacyError.length > 0) {
38371
+ throw new Error(`${label} result contains failed task ${JSON.stringify(task.taskId)}.`);
38372
+ }
38373
+ }
38374
+ }
38375
+ function assertComparableResults(baseline, real) {
38376
+ if (baseline.config.runtimeProfile !== "baseline") {
38377
+ throw new Error('baseline result runtimeProfile must be "baseline".');
38378
+ }
38379
+ if (real.config.runtimeProfile !== "real") {
38380
+ throw new Error('real result runtimeProfile must be "real".');
38381
+ }
38382
+ const checks = [
38383
+ ["meta.version", baseline.meta.version, real.meta.version],
38384
+ ["meta.remnicVersion", baseline.meta.remnicVersion, real.meta.remnicVersion],
38385
+ ["meta.gitSha", baseline.meta.gitSha, real.meta.gitSha],
38386
+ ["meta.runCount", baseline.meta.runCount, real.meta.runCount],
38387
+ ["meta.seeds", baseline.meta.seeds, real.meta.seeds],
38388
+ ["meta.datasetHash", baseline.meta.datasetHash ?? null, real.meta.datasetHash ?? null],
38389
+ ["config.adapterMode", baseline.config.adapterMode, real.config.adapterMode],
38390
+ [
38391
+ "config.systemProvider",
38392
+ providerIdentity(baseline.config.systemProvider),
38393
+ providerIdentity(real.config.systemProvider)
38394
+ ],
38395
+ [
38396
+ "config.judgeProvider",
38397
+ providerIdentity(baseline.config.judgeProvider),
38398
+ providerIdentity(real.config.judgeProvider)
38399
+ ],
38400
+ [
38401
+ "config.internalProvider",
38402
+ providerIdentity(baseline.config.internalProvider),
38403
+ providerIdentity(real.config.internalProvider)
38404
+ ]
38405
+ ];
38406
+ for (const [field, baselineValue, realValue] of checks) {
38407
+ if (stableJson(baselineValue) !== stableJson(realValue)) {
38408
+ throw new Error(
38409
+ `Results are not comparable: ${field} differs (${stableJson(baselineValue)} vs ${stableJson(realValue)}).`
38410
+ );
38411
+ }
38412
+ }
38413
+ }
38414
+ function joinTasks2(baseline, real) {
38415
+ const baselineTasks = indexTasks2(baseline.results.tasks, "baseline");
38416
+ const realTasks = indexTasks2(real.results.tasks, "real");
38417
+ const missingFromReal = [...baselineTasks.keys()].filter((id) => !realTasks.has(id)).sort(compareStrings);
38418
+ const missingFromBaseline = [...realTasks.keys()].filter((id) => !baselineTasks.has(id)).sort(compareStrings);
38419
+ if (missingFromReal.length > 0 || missingFromBaseline.length > 0) {
38420
+ throw new Error(
38421
+ `Results do not contain identical task-id sets: ${missingFromReal.length} missing from real, ${missingFromBaseline.length} missing from baseline.`
38422
+ );
38423
+ }
38424
+ return [...baselineTasks.keys()].sort(compareStrings).map((taskId) => {
38425
+ const baselineTask = baselineTasks.get(taskId);
38426
+ const realTask = realTasks.get(taskId);
38427
+ if (!baselineTask || !realTask) {
38428
+ throw new Error(`Task ${JSON.stringify(taskId)} disappeared during the validated join.`);
38429
+ }
38430
+ for (const [field, baselineValue, realValue] of [
38431
+ ["question", baselineTask.question, realTask.question],
38432
+ ["expected", baselineTask.expected, realTask.expected]
38433
+ ]) {
38434
+ if (baselineValue !== realValue) {
38435
+ throw new Error(`Task ${JSON.stringify(taskId)} has mismatched ${field} payloads.`);
38436
+ }
38437
+ }
38438
+ const baselineCategory = resolveCategory2(baselineTask);
38439
+ const realCategory = resolveCategory2(realTask);
38440
+ if (baselineCategory !== realCategory) {
38441
+ throw new Error(`Task ${JSON.stringify(taskId)} has mismatched categories.`);
38442
+ }
38443
+ return { taskId, category: baselineCategory, baseline: baselineTask, real: realTask };
38444
+ });
38445
+ }
38446
+ function indexTasks2(tasks, label) {
38447
+ const result = /* @__PURE__ */ new Map();
38448
+ for (const task of tasks) {
38449
+ if (!task.taskId || result.has(task.taskId)) {
38450
+ throw new Error(`${label} result contains duplicate or empty task id ${JSON.stringify(task.taskId)}.`);
38451
+ }
38452
+ if (!task.question || !task.expected) {
38453
+ throw new Error(`${label} task ${JSON.stringify(task.taskId)} has an empty question or expected answer.`);
38454
+ }
38455
+ const recalledText = asRecord(task.details)?.recalledText;
38456
+ if (typeof recalledText !== "string") {
38457
+ throw new Error(`${label} task ${JSON.stringify(task.taskId)} has no final recalledText.`);
38458
+ }
38459
+ result.set(task.taskId, task);
38460
+ }
38461
+ return result;
38462
+ }
38463
+ function assertMetricSets(joined, primaryMetric2) {
38464
+ const first = joined[0];
38465
+ if (!first) throw new Error("Cannot validate metric sets for an empty paired result.");
38466
+ const expectedMetrics = Object.keys(first.baseline.scores).sort(compareStrings);
38467
+ for (const task of joined) {
38468
+ const baselineMetrics = Object.keys(task.baseline.scores).sort(compareStrings);
38469
+ const realMetrics = Object.keys(task.real.scores).sort(compareStrings);
38470
+ if (stableJson(baselineMetrics) !== stableJson(realMetrics)) {
38471
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has mismatched metric sets.`);
38472
+ }
38473
+ if (stableJson(baselineMetrics) !== stableJson(expectedMetrics)) {
38474
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has an inconsistent metric set.`);
38475
+ }
38476
+ if (!baselineMetrics.includes(primaryMetric2)) {
38477
+ throw new Error(`Task ${JSON.stringify(task.taskId)} is missing metric ${JSON.stringify(primaryMetric2)}.`);
38478
+ }
38479
+ for (const [side, scores] of [
38480
+ ["baseline", task.baseline.scores],
38481
+ ["real", task.real.scores]
38482
+ ]) {
38483
+ for (const [metric, score] of Object.entries(scores)) {
38484
+ if (!Number.isFinite(score)) {
38485
+ throw new Error(`${side} task ${JSON.stringify(task.taskId)} metric ${metric} is not finite.`);
38486
+ }
38487
+ }
38488
+ }
38489
+ }
38490
+ }
38491
+ function buildRegression(task, metric, excerptChars, maxDiffLines) {
38492
+ const baselineRecall = finalRecallText(task.baseline);
38493
+ const realRecall = finalRecallText(task.real);
38494
+ const baselineLines = contentLines(baselineRecall);
38495
+ const realLines = contentLines(realRecall);
38496
+ const displaced = subtractLineMultiset(baselineLines, realLines);
38497
+ const introduced = subtractLineMultiset(realLines, baselineLines);
38498
+ const baselineScore = requireMetricScore(task.baseline, metric, "baseline");
38499
+ const realScore = requireMetricScore(task.real, metric, "real");
38500
+ return {
38501
+ taskId: task.taskId,
38502
+ category: task.category,
38503
+ baselineScore,
38504
+ realScore,
38505
+ delta: realScore - baselineScore,
38506
+ questionSha256: sha2562(normalizeText3(task.baseline.question)),
38507
+ expectedAnswerSha256: sha2562(normalizeText3(task.baseline.expected)),
38508
+ baseline: {
38509
+ answer: textDigest(task.baseline.actual, excerptChars),
38510
+ recall: recallSummary(baselineRecall, task.baseline.expected)
38511
+ },
38512
+ real: {
38513
+ answer: textDigest(task.real.actual, excerptChars),
38514
+ recall: recallSummary(realRecall, task.real.expected)
38515
+ },
38516
+ displacedLines: lineDelta(displaced, maxDiffLines, excerptChars),
38517
+ introducedLines: lineDelta(introduced, maxDiffLines, excerptChars)
38518
+ };
38519
+ }
38520
+ function buildProvenance(evidence, profile, joined, side) {
38521
+ const system = requireProvider(evidence.result.config.systemProvider, profile, "system");
38522
+ const judge = requireProvider(evidence.result.config.judgeProvider, profile, "judge");
38523
+ const payload = joined.map((task) => ({
38524
+ taskId: task.taskId,
38525
+ category: task.category,
38526
+ question: task[side].question,
38527
+ expected: task[side].expected
38528
+ }));
38529
+ return {
38530
+ reference: evidence.reference,
38531
+ sha256: evidence.sha256,
38532
+ resultId: evidence.result.meta.id,
38533
+ gitSha: evidence.result.meta.gitSha,
38534
+ remnicVersion: evidence.result.meta.remnicVersion,
38535
+ runtimeProfile: profile,
38536
+ systemProvider: system.provider,
38537
+ systemModel: system.model,
38538
+ judgeProvider: judge.provider,
38539
+ judgeModel: judge.model,
38540
+ seeds: [...evidence.result.meta.seeds],
38541
+ taskPayloadSha256: sha2562(stableJson(payload))
38542
+ };
38543
+ }
38544
+ function summarizeMetric(tasks, metric) {
38545
+ let baselineSum = 0;
38546
+ let realSum = 0;
38547
+ let wins = 0;
38548
+ let losses = 0;
38549
+ let ties = 0;
38550
+ for (const task of tasks) {
38551
+ const baseline = requireMetricScore(task.baseline, metric, "baseline");
38552
+ const real = requireMetricScore(task.real, metric, "real");
38553
+ baselineSum += baseline;
38554
+ realSum += real;
38555
+ if (real > baseline) wins += 1;
38556
+ else if (real < baseline) losses += 1;
38557
+ else ties += 1;
38558
+ }
38559
+ const baselineMean = baselineSum / tasks.length;
38560
+ const realMean = realSum / tasks.length;
38561
+ return { baselineMean, realMean, delta: realMean - baselineMean, wins, losses, ties };
38562
+ }
38563
+ function lineDelta(lines, maxDiffLines, excerptChars) {
38564
+ return {
38565
+ totalCount: lines.length,
38566
+ shownCount: Math.min(lines.length, maxDiffLines),
38567
+ lines: lines.slice(0, maxDiffLines).map((line) => {
38568
+ const parsedSourceRef = sourceRef(line.text);
38569
+ return {
38570
+ ordinal: line.ordinal,
38571
+ ...textDigest(line.text, excerptChars),
38572
+ ...parsedSourceRef ? { sourceRef: parsedSourceRef } : {}
38573
+ };
38574
+ })
38575
+ };
38576
+ }
38577
+ function recallSummary(text, expected) {
38578
+ const normalized = normalizeText3(text);
38579
+ const lines = normalized.split("\n").map((line) => line.trim()).filter(Boolean);
38580
+ return {
38581
+ sha256: sha2562(normalized),
38582
+ charCount: normalized.length,
38583
+ lineCount: lines.length,
38584
+ headings: [...new Set(lines.filter(isHeading))],
38585
+ sourceRefs: [...new Set(lines.map(sourceRef).filter((value) => !!value))].sort(compareStrings),
38586
+ expectedTokenCoverage: tokenCoverage(expected, normalized)
38587
+ };
38588
+ }
38589
+ function textDigest(text, excerptChars) {
38590
+ const normalized = normalizeText3(text);
38591
+ return {
38592
+ sha256: sha2562(normalized),
38593
+ charCount: normalized.length,
38594
+ excerpt: normalized.slice(0, excerptChars)
38595
+ };
38596
+ }
38597
+ function contentLines(text) {
38598
+ return normalizeText3(text).split("\n").map((line, ordinal) => ({ text: line.trim(), ordinal })).filter((line) => line.text.length > 0 && !isHeading(line.text));
38599
+ }
38600
+ function subtractLineMultiset(source, comparison) {
38601
+ const remaining = /* @__PURE__ */ new Map();
38602
+ for (const line of comparison) {
38603
+ remaining.set(line.text, (remaining.get(line.text) ?? 0) + 1);
38604
+ }
38605
+ return source.filter((line) => {
38606
+ const count = remaining.get(line.text) ?? 0;
38607
+ if (count === 0) return true;
38608
+ remaining.set(line.text, count - 1);
38609
+ return false;
38610
+ });
38611
+ }
38612
+ function verifyAggregateMeans(result, joined, side) {
38613
+ const first = joined[0];
38614
+ if (!first) throw new Error("Cannot verify aggregates for an empty paired result.");
38615
+ const metrics = Object.keys(first[side].scores).sort(compareStrings);
38616
+ for (const metric of metrics) {
38617
+ const aggregate = result.results.aggregates[metric];
38618
+ if (!aggregate || !Number.isFinite(aggregate.mean)) {
38619
+ throw new Error(`${side} result has no finite aggregate mean for ${JSON.stringify(metric)}.`);
38620
+ }
38621
+ const computed = joined.reduce((sum, task) => sum + requireMetricScore(task[side], metric, side), 0) / joined.length;
38622
+ if (Math.abs(aggregate.mean - computed) > 1e-12) {
38623
+ throw new Error(`${side} aggregate ${metric}=${aggregate.mean} does not match task mean ${computed}.`);
38624
+ }
38625
+ }
38626
+ }
38627
+ function tokenCoverage(expected, recalled) {
38628
+ const expectedTokens = new Set(tokenize6(expected));
38629
+ if (expectedTokens.size === 0) return 0;
38630
+ const recalledTokens = new Set(tokenize6(recalled));
38631
+ let matched = 0;
38632
+ for (const token of expectedTokens) {
38633
+ if (recalledTokens.has(token)) matched += 1;
38634
+ }
38635
+ return matched / expectedTokens.size;
38636
+ }
38637
+ function tokenize6(value) {
38638
+ return normalizeText3(value).toLocaleLowerCase("en-US").match(/[\p{L}\p{N}]+/gu) ?? [];
38639
+ }
38640
+ function resolveCategory2(task) {
38641
+ const categoryName = asRecord(task.details)?.categoryName;
38642
+ if (typeof categoryName === "string" && categoryName.trim()) return categoryName;
38643
+ const match = task.taskId.match(LOCOMO_TASK_CATEGORY_PATTERN2);
38644
+ if (!match?.[1]) {
38645
+ throw new Error(`Cannot derive LoCoMo category from task id ${JSON.stringify(task.taskId)}.`);
38646
+ }
38647
+ return match[1];
38648
+ }
38649
+ function finalRecallText(task) {
38650
+ const recalledText = asRecord(task.details)?.recalledText;
38651
+ if (typeof recalledText !== "string") {
38652
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has no final recalledText.`);
38653
+ }
38654
+ return recalledText;
38655
+ }
38656
+ function providerIdentity(provider) {
38657
+ if (!provider) return null;
38658
+ return {
38659
+ provider: provider.provider,
38660
+ model: provider.model,
38661
+ rubricVersion: provider.rubricVersion ?? null,
38662
+ baseUrl: provider.baseUrl ?? null,
38663
+ providerRequestTimeoutMs: provider.providerRequestTimeoutMs ?? null,
38664
+ retryOptions: provider.retryOptions ? {
38665
+ maxAttempts: provider.retryOptions.maxAttempts ?? null,
38666
+ baseBackoffMs: provider.retryOptions.baseBackoffMs ?? null,
38667
+ timeoutMs: provider.retryOptions.timeoutMs ?? null,
38668
+ retryOnTimeout: provider.retryOptions.retryOnTimeout ?? null,
38669
+ max429WaitMs: provider.retryOptions.max429WaitMs ?? null
38670
+ } : null,
38671
+ disableThinking: provider.disableThinking ?? null,
38672
+ reasoningEffort: provider.reasoningEffort ?? null,
38673
+ responderContextBudgetChars: provider.responderContextBudgetChars ?? null,
38674
+ responderPromptBudgetChars: provider.responderPromptBudgetChars ?? null,
38675
+ temperature: provider.temperature ?? null,
38676
+ seed: provider.seed ?? null
38677
+ };
38678
+ }
38679
+ function sourceRef(line) {
38680
+ const match = line.match(SOURCE_TURN_PATTERN);
38681
+ const sessionId = match?.[1];
38682
+ const turn = match?.[2];
38683
+ const role = match?.[3];
38684
+ if (!sessionId || !turn || !role) return void 0;
38685
+ return `${sessionId}:turn-${turn}:${role.trim().toLowerCase()}`;
38686
+ }
38687
+ function requireMetricScore(task, metric, side) {
38688
+ const score = task.scores[metric];
38689
+ if (typeof score !== "number" || !Number.isFinite(score)) {
38690
+ throw new Error(`${side} task ${JSON.stringify(task.taskId)} metric ${metric} is not finite.`);
38691
+ }
38692
+ return score;
38693
+ }
38694
+ function requireProvider(provider, profile, role) {
38695
+ if (!provider) throw new Error(`${profile} result has no ${role} provider identity.`);
38696
+ return provider;
38697
+ }
38698
+ function isHeading(line) {
38699
+ return /^##\s+/.test(line);
38700
+ }
38701
+ function normalizeText3(value) {
38702
+ return value.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
38703
+ }
38704
+ function sha2562(value) {
38705
+ return createHash13("sha256").update(value).digest("hex");
38706
+ }
38707
+ function stableJson(value) {
38708
+ return JSON.stringify(value);
38709
+ }
38710
+ function asRecord(value) {
38711
+ return typeof value === "object" && value !== null ? value : void 0;
38712
+ }
38713
+ function parseNonNegativeInteger(value, label) {
38714
+ if (!Number.isInteger(value) || value < 0) {
38715
+ throw new Error(`${label} must be a non-negative integer.`);
38716
+ }
38717
+ return value;
38718
+ }
38719
+ function compareLoComoCategories2(left, right) {
38720
+ const leftIndex = LOCOMO_CATEGORY_ORDER2.indexOf(left);
38721
+ const rightIndex = LOCOMO_CATEGORY_ORDER2.indexOf(right);
38722
+ if (leftIndex >= 0 && rightIndex >= 0) return leftIndex - rightIndex;
38723
+ if (leftIndex >= 0) return -1;
38724
+ if (rightIndex >= 0) return 1;
38725
+ return compareStrings(left, right);
38726
+ }
38727
+ function compareStrings(left, right) {
38728
+ return left < right ? -1 : left > right ? 1 : 0;
38729
+ }
38730
+ function escapeMarkdownCell(value) {
38731
+ return value.replaceAll("|", "\\|").replaceAll("\n", " ");
38732
+ }
38733
+ function formatScore2(value) {
38734
+ return value.toFixed(4);
38735
+ }
38736
+ function formatSignedScore2(value) {
38737
+ return `${value >= 0 ? "+" : ""}${formatScore2(value)}`;
38738
+ }
38739
+
38033
38740
  // src/integrity/sealed-qrels.ts
38034
38741
  import { readFile as readFile20 } from "fs/promises";
38035
38742
  function isSealedQrelsArtifact(value) {
@@ -39433,7 +40140,7 @@ var chatFixture = {
39433
40140
  };
39434
40141
 
39435
40142
  // src/judges/calibration-slice.ts
39436
- import { createHash as createHash13, randomBytes as randomBytes3 } from "crypto";
40143
+ import { createHash as createHash14, randomBytes as randomBytes3 } from "crypto";
39437
40144
  import { mkdir as mkdir18, readFile as readFile22, rename as rename4, unlink as unlink4, writeFile as writeFile17 } from "fs/promises";
39438
40145
  import path37 from "path";
39439
40146
 
@@ -39580,7 +40287,7 @@ function selectCalibrationSlice(questionIds, size = CALIBRATION_SLICE_SIZE) {
39580
40287
  unique.push(id);
39581
40288
  }
39582
40289
  }
39583
- return unique.map((id) => ({ id, digest: createHash13("sha256").update(id, "utf8").digest("hex") })).sort((a, b) => a.digest < b.digest ? -1 : a.digest > b.digest ? 1 : 0).slice(0, Math.min(size, unique.length)).map((entry) => entry.id);
40290
+ return unique.map((id) => ({ id, digest: createHash14("sha256").update(id, "utf8").digest("hex") })).sort((a, b) => a.digest < b.digest ? -1 : a.digest > b.digest ? 1 : 0).slice(0, Math.min(size, unique.length)).map((entry) => entry.id);
39584
40291
  }
39585
40292
  async function runJudgeCalibration(options) {
39586
40293
  const binScore = options.binScore ?? ((score) => binarizeJudgeScore(score));
@@ -39655,7 +40362,7 @@ function validatePinnedQuestionIds(ids, availableIds) {
39655
40362
  return [...ids];
39656
40363
  }
39657
40364
  function hashCalibrationAnswerSet(answers) {
39658
- return createHash13("sha256").update(JSON.stringify(answers.map((answer) => [
40365
+ return createHash14("sha256").update(JSON.stringify(answers.map((answer) => [
39659
40366
  answer.questionId,
39660
40367
  answer.question,
39661
40368
  answer.predicted,
@@ -40342,7 +41049,7 @@ var PROCEDURAL_REAL_SCENARIOS_SMOKE = [
40342
41049
  ];
40343
41050
 
40344
41051
  // src/security/extraction-attack/tokenize.ts
40345
- function tokenize6(text) {
41052
+ function tokenize7(text) {
40346
41053
  return text.toLowerCase().split(/[^a-z0-9]+/u).filter((t) => t.length > 2);
40347
41054
  }
40348
41055
 
@@ -40384,7 +41091,7 @@ function createSeededRng2(seed) {
40384
41091
  }
40385
41092
  };
40386
41093
  }
40387
- var tokenizeContent = tokenize6;
41094
+ var tokenizeContent = tokenize7;
40388
41095
  function recoveryTokensFor(memory) {
40389
41096
  if (memory.tokens && memory.tokens.length > 0) {
40390
41097
  const seen = /* @__PURE__ */ new Set();
@@ -40863,11 +41570,11 @@ function createSyntheticTarget(options) {
40863
41570
  }
40864
41571
  const normalized = memories.map((m) => ({
40865
41572
  memory: m,
40866
- tokens: new Set((m.tokens ?? tokenize6(m.content)).map((t) => t.toLowerCase()))
41573
+ tokens: new Set((m.tokens ?? tokenize7(m.content)).map((t) => t.toLowerCase()))
40867
41574
  }));
40868
41575
  return {
40869
41576
  async recall(query, recallOptions) {
40870
- const qTokens = tokenize6(query);
41577
+ const qTokens = tokenize7(query);
40871
41578
  if (qTokens.length === 0) return [];
40872
41579
  const requestedNs = recallOptions?.namespace;
40873
41580
  if (enforceNamespaceAcl && requestedNs !== void 0 && requestedNs !== allowedNamespace) {
@@ -41111,7 +41818,7 @@ function createMitigatedTarget(config) {
41111
41818
  }
41112
41819
 
41113
41820
  // src/coding-graph/generator.ts
41114
- import { createHash as createHash14 } from "crypto";
41821
+ import { createHash as createHash15 } from "crypto";
41115
41822
  function createSeededRng3(seed) {
41116
41823
  let state = seed >>> 0;
41117
41824
  return function rng() {
@@ -41140,7 +41847,7 @@ var EDGE_TYPE_WEIGHTS = [
41140
41847
  var PROVENANCE_VALUES = ["heuristic", "heuristic", "heuristic", "trace"];
41141
41848
  var AVG_BYTES_PER_LINE = 40;
41142
41849
  function hashContent(input) {
41143
- return createHash14("sha256").update(input).digest("hex").slice(0, 16);
41850
+ return createHash15("sha256").update(input).digest("hex").slice(0, 16);
41144
41851
  }
41145
41852
  function generateSyntheticRepo(config) {
41146
41853
  const rng = createSeededRng3(config.seed);
@@ -41708,6 +42415,9 @@ export {
41708
42415
  JUDGE_CALIBRATION_KAPPA_THRESHOLD,
41709
42416
  LOCAL_LAB_PROVIDER_KINDS,
41710
42417
  LOCOMO_DATASET_FILENAMES,
42418
+ LOCOMO_FULL_TASK_COUNT,
42419
+ LOCOMO_RECALL_DIFF_LINE_LIMIT,
42420
+ LOCOMO_RECALL_EXCERPT_CHARS,
41711
42421
  LONG_MEM_EVAL_DATASET_FILENAMES,
41712
42422
  LettaMemCorrectAdapter,
41713
42423
  LocalLabPreflightError,
@@ -41761,6 +42471,7 @@ export {
41761
42471
  buildBenchmarkPublishFeed,
41762
42472
  buildBenchmarkReproManifest,
41763
42473
  buildBenchmarkRunSeeds,
42474
+ buildCodexCreditReceipt,
41764
42475
  buildJudgePayload,
41765
42476
  buildOracleTrajectoryRecall,
41766
42477
  buildSchemaTierFixture,
@@ -41818,6 +42529,7 @@ export {
41818
42529
  defaultBenchmarkPublishPath,
41819
42530
  deleteBenchmarkResults,
41820
42531
  diagnoseLoComoProfileDelta,
42532
+ diagnoseLoComoRecallDelta,
41821
42533
  discoverAllProviders,
41822
42534
  discoveryEndpointFor,
41823
42535
  emailFixture,
@@ -41888,10 +42600,12 @@ export {
41888
42600
  preflightLocalLabRole,
41889
42601
  projectFolderFixture,
41890
42602
  recallAtK,
42603
+ reconcileCodexCreditLedger,
41891
42604
  redactBenchmarkResultSecrets,
41892
42605
  renderBaselineMarkdown,
41893
42606
  renderBenchmarkResultExport,
41894
42607
  renderLoComoProfileDeltaMarkdown,
42608
+ renderLoComoRecallDeltaMarkdown,
41895
42609
  renderMemorySummaryForJudge,
41896
42610
  renderMemoryViewForAgent,
41897
42611
  resolveAssistantAgent,
@@ -41927,6 +42641,7 @@ export {
41927
42641
  runSealedJudge,
41928
42642
  runSequentialPhases,
41929
42643
  safeHexEqual,
42644
+ sanitizeLoComoResultReference,
41930
42645
  saveBaseline,
41931
42646
  saveBenchmarkBaseline,
41932
42647
  schemaCompleteness,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/bench",
3
- "version": "9.6.21",
3
+ "version": "9.6.23",
4
4
  "description": "Retrieval latency ladder benchmarks + CI regression gates for @remnic/core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,8 +39,8 @@
39
39
  "hyparquet": "^1.25.7",
40
40
  "yaml": "^2.4.2",
41
41
  "zod": "^3.24.0",
42
- "@remnic/coding-graph": "^9.6.21",
43
- "@remnic/core": "^9.6.21"
42
+ "@remnic/coding-graph": "^9.6.23",
43
+ "@remnic/core": "^9.6.23"
44
44
  },
45
45
  "devDependencies": {
46
46
  "tsup": "^8.5.1",