@remnic/bench 9.6.21 → 9.6.22

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,20 @@ 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
+ 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
104
  remnic bench run --quick longmemeval \
99
105
  --runtime-profile real \
106
+ --results-dir "$BUILD_WEEK_RESULTS_DIR" \
107
+ --drain-timeout 600000 \
100
108
  --system-provider codex-cli --system-model gpt-5.6-luna \
101
109
  --system-codex-reasoning-effort medium \
102
110
  --internal-provider codex-cli --internal-model gpt-5.6-luna \
@@ -106,6 +114,8 @@ remnic bench run --quick longmemeval \
106
114
 
107
115
  remnic bench run longmemeval \
108
116
  --runtime-profile real --limit <LEDGER_DERIVED_LIMIT> \
117
+ --results-dir "$BUILD_WEEK_RESULTS_DIR" \
118
+ --drain-timeout 600000 \
109
119
  --system-provider codex-cli --system-model gpt-5.6-luna \
110
120
  --system-codex-reasoning-effort medium \
111
121
  --internal-provider codex-cli --internal-model gpt-5.6-luna \
@@ -124,6 +134,20 @@ Rates per one million tokens are Luna: 25 input, 2.5 cached input, 150 output;
124
134
  Terra: 62.5 input, 6.25 cached input, 375 output. A bounded result is a trial,
125
135
  not a full leaderboard artifact.
126
136
 
137
+ Codex CLI receives a benchmark-owned 180-second transport timeout when no
138
+ request timeout is supplied. Keep `--request-timeout` out of these commands:
139
+ an explicit value also becomes a whole-phase guard, while the transport-only
140
+ default lets long store/recall/reset phases complete. The 600-second drain cap
141
+ remains explicit for queued internal work.
142
+
143
+ The ledger and results stay outside the repository because stored runs may
144
+ contain questions, answers, and recalled context. The `umask` plus explicit
145
+ directory modes make newly created state private. After the first ledger write,
146
+ run `chmod 600 "$REMNIC_BENCH_CODEX_CREDIT_LEDGER"`. Preserve the exact run ID
147
+ printed by the CLI, or recover it only from this run store with
148
+ `remnic bench runs list --results-dir "$BUILD_WEEK_RESULTS_DIR"`; use that ID
149
+ for export and artifact promotion rather than an ambiguous “latest” run.
150
+
127
151
  Codex built and adversarially reviewed the Build Week adapter, Responses
128
152
  provider, and report card. The underlying Remnic engine and original benchmark
129
153
  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;
@@ -3054,6 +3060,115 @@ interface DiagnoseLoComoProfileDeltaOptions {
3054
3060
  declare function diagnoseLoComoProfileDelta(options: DiagnoseLoComoProfileDeltaOptions): LoComoProfileDeltaReport;
3055
3061
  declare function renderLoComoProfileDeltaMarkdown(report: LoComoProfileDeltaReport): string;
3056
3062
 
3063
+ declare const LOCOMO_FULL_TASK_COUNT = 1986;
3064
+ declare const LOCOMO_RECALL_EXCERPT_CHARS = 240;
3065
+ declare const LOCOMO_RECALL_DIFF_LINE_LIMIT = 20;
3066
+ interface LoComoRawResultEvidence {
3067
+ result: BenchmarkResult;
3068
+ reference: string;
3069
+ /** SHA-256 of the exact result-file bytes, computed before JSON parsing. */
3070
+ sha256: string;
3071
+ }
3072
+ interface LoComoRecallTextDigest {
3073
+ sha256: string;
3074
+ charCount: number;
3075
+ excerpt: string;
3076
+ }
3077
+ interface LoComoRecallLineEvidence extends LoComoRecallTextDigest {
3078
+ ordinal: number;
3079
+ sourceRef?: string;
3080
+ }
3081
+ interface LoComoRecallLineDelta {
3082
+ totalCount: number;
3083
+ shownCount: number;
3084
+ lines: LoComoRecallLineEvidence[];
3085
+ }
3086
+ interface LoComoRecallContextSummary {
3087
+ sha256: string;
3088
+ charCount: number;
3089
+ lineCount: number;
3090
+ headings: string[];
3091
+ sourceRefs: string[];
3092
+ expectedTokenCoverage: number;
3093
+ }
3094
+ interface LoComoRecallMetricDelta {
3095
+ baselineMean: number;
3096
+ realMean: number;
3097
+ delta: number;
3098
+ wins: number;
3099
+ losses: number;
3100
+ ties: number;
3101
+ }
3102
+ interface LoComoRecallCategoryDelta extends LoComoRecallMetricDelta {
3103
+ category: string;
3104
+ taskCount: number;
3105
+ }
3106
+ interface LoComoFinalContextRegression {
3107
+ taskId: string;
3108
+ category: string;
3109
+ baselineScore: number;
3110
+ realScore: number;
3111
+ delta: number;
3112
+ questionSha256: string;
3113
+ expectedAnswerSha256: string;
3114
+ baseline: {
3115
+ answer: LoComoRecallTextDigest;
3116
+ recall: LoComoRecallContextSummary;
3117
+ };
3118
+ real: {
3119
+ answer: LoComoRecallTextDigest;
3120
+ recall: LoComoRecallContextSummary;
3121
+ };
3122
+ displacedLines: LoComoRecallLineDelta;
3123
+ introducedLines: LoComoRecallLineDelta;
3124
+ }
3125
+ interface LoComoRecallResultProvenance {
3126
+ reference: string;
3127
+ sha256: string;
3128
+ resultId: string;
3129
+ gitSha: string;
3130
+ remnicVersion: string;
3131
+ runtimeProfile: "baseline" | "real";
3132
+ systemProvider: string;
3133
+ systemModel: string;
3134
+ judgeProvider: string;
3135
+ judgeModel: string;
3136
+ seeds: number[];
3137
+ taskPayloadSha256: string;
3138
+ }
3139
+ interface LoComoRecallDeltaReport {
3140
+ schemaVersion: 1;
3141
+ benchmarkId: "locomo";
3142
+ comparison: {
3143
+ baseline: LoComoRecallResultProvenance;
3144
+ real: LoComoRecallResultProvenance;
3145
+ };
3146
+ taskCount: number;
3147
+ primaryMetric: string;
3148
+ overall: LoComoRecallMetricDelta;
3149
+ categories: LoComoRecallCategoryDelta[];
3150
+ topRegressions: LoComoFinalContextRegression[];
3151
+ evidenceBoundary: {
3152
+ finalContextComparison: "complete";
3153
+ retrievalTierAttribution: "unavailable-in-cached-results";
3154
+ hiddenEvidenceUsed: false;
3155
+ explanation: string;
3156
+ };
3157
+ }
3158
+ interface DiagnoseLoComoRecallDeltaOptions {
3159
+ baseline: LoComoRawResultEvidence;
3160
+ real: LoComoRawResultEvidence;
3161
+ primaryMetric?: string;
3162
+ maxRegressions?: number;
3163
+ }
3164
+ /**
3165
+ * Return a stable provenance label without exposing the caller's directory
3166
+ * layout. CLI callers should use this instead of persisting an input path.
3167
+ */
3168
+ declare function sanitizeLoComoResultReference(path: string): string;
3169
+ declare function diagnoseLoComoRecallDelta(options: DiagnoseLoComoRecallDeltaOptions): LoComoRecallDeltaReport;
3170
+ declare function renderLoComoRecallDeltaMarkdown(report: LoComoRecallDeltaReport): string;
3171
+
3057
3172
  /**
3058
3173
  * Dataset-contamination guard.
3059
3174
  *
@@ -3910,7 +4025,7 @@ interface RunJudgeCalibrationOptions {
3910
4025
  * binning function so they are compared on the same scale.
3911
4026
  */
3912
4027
  binScore?: (score: number) => JudgeCategory;
3913
- /** Override the slice size (default 50; mainly for tests). */
4028
+ /** Override the slice size (default 200; mainly for tests). */
3914
4029
  sliceSize?: number;
3915
4030
  /** Override the warning threshold (default 0.7). */
3916
4031
  threshold?: number;
@@ -5109,4 +5224,4 @@ declare function checkCodingGraphRegression(report: CodingGraphBenchReport, base
5109
5224
  */
5110
5225
  declare function buildBaselineFromReport(report: CodingGraphBenchReport, note: string): CodingGraphBaseline;
5111
5226
 
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 };
5227
+ 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 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, 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, 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
@@ -14553,6 +14553,8 @@ function resolveOpenClawRemnicPluginEntry(raw) {
14553
14553
  }
14554
14554
  var REDACTED_CONFIG_VALUE = "[redacted]";
14555
14555
  var INTERNAL_GATEWAY_AGENT_ID = "remnic-bench-internal";
14556
+ var DEFAULT_CODEX_CLI_REQUEST_TIMEOUT_MS = 18e4;
14557
+ var DEFAULT_CODEX_CLI_DRAIN_TIMEOUT_MS = 6e5;
14556
14558
  var codexCliFallbackRegistered = false;
14557
14559
  var codexCliFallbackChain = Promise.resolve();
14558
14560
  async function resolveBenchRuntimeProfile(options) {
@@ -14606,8 +14608,11 @@ async function resolveBenchRuntimeProfile(options) {
14606
14608
  { disableThinking: options.internalDisableThinking === true }
14607
14609
  );
14608
14610
  const lcmObserveConcurrencyOverrides = buildLcmObserveConcurrencyOverrides(options.lcmObserveConcurrency);
14611
+ const usesImplicitCodexRequestTimeout = options.requestTimeout === void 0 && [systemProvider, judgeProvider, internalProvider].some(
14612
+ (config) => config?.provider === "codex-cli"
14613
+ );
14609
14614
  const drainTimeoutMs = normalizeDrainTimeoutMs2(
14610
- options.drainTimeout ?? options.requestTimeout
14615
+ options.drainTimeout ?? options.requestTimeout ?? (usesImplicitCodexRequestTimeout ? DEFAULT_CODEX_CLI_DRAIN_TIMEOUT_MS : void 0)
14611
14616
  );
14612
14617
  registerCodexCliFallbackRunnerIfNeeded(internalProvider);
14613
14618
  const responderFactoryConfig = systemProvider ? asProviderFactoryConfig(systemProvider) : void 0;
@@ -14819,6 +14824,7 @@ function resolveProviderConfig(kind, provider, model, baseUrl, requestTimeout, d
14819
14824
  `${kind} Codex reasoning effort requires provider "codex-cli"`
14820
14825
  );
14821
14826
  }
14827
+ const providerRequestTimeoutMs = requestTimeout === void 0 && provider === "codex-cli" ? DEFAULT_CODEX_CLI_REQUEST_TIMEOUT_MS : void 0;
14822
14828
  return {
14823
14829
  provider,
14824
14830
  model: resolvedModel.trim(),
@@ -14829,6 +14835,7 @@ function resolveProviderConfig(kind, provider, model, baseUrl, requestTimeout, d
14829
14835
  ...requestTimeout != null ? { timeoutMs: requestTimeout } : {},
14830
14836
  ...max429WaitMs != null ? { max429WaitMs } : {}
14831
14837
  } } : {},
14838
+ ...providerRequestTimeoutMs !== void 0 ? { providerRequestTimeoutMs } : {},
14832
14839
  ...disableThinking ? { disableThinking: true } : {},
14833
14840
  ...provider === "codex-cli" ? { reasoningEffort: reasoningEffort ?? "xhigh" } : {},
14834
14841
  ...responderContextBudgetChars !== void 0 ? { responderContextBudgetChars } : {},
@@ -14884,13 +14891,14 @@ function buildInternalRemnicConfigOverrides(config, options) {
14884
14891
  ...config.retryOptions?.timeoutMs ? { localLlmTimeoutMs: config.retryOptions.timeoutMs } : {}
14885
14892
  };
14886
14893
  }
14894
+ const providerTimeoutMs = config.retryOptions?.timeoutMs ?? config.providerRequestTimeoutMs;
14887
14895
  return {
14888
14896
  ...thinkingOverrides,
14889
14897
  modelSource: "gateway",
14890
14898
  localLlmEnabled: false,
14891
- ...config.retryOptions?.timeoutMs ? {
14892
- localLlmTimeoutMs: config.retryOptions.timeoutMs,
14893
- localLlmFastTimeoutMs: config.retryOptions.timeoutMs
14899
+ ...providerTimeoutMs ? {
14900
+ localLlmTimeoutMs: providerTimeoutMs,
14901
+ localLlmFastTimeoutMs: providerTimeoutMs
14894
14902
  } : {},
14895
14903
  gatewayConfig: buildInternalGatewayConfig(config, options),
14896
14904
  gatewayAgentId: INTERNAL_GATEWAY_AGENT_ID,
@@ -14900,7 +14908,7 @@ function buildInternalRemnicConfigOverrides(config, options) {
14900
14908
  function buildInternalGatewayConfig(config, options) {
14901
14909
  const providerId = INTERNAL_GATEWAY_AGENT_ID;
14902
14910
  const modelRef = `${providerId}/${config.model}`;
14903
- const timeoutMs = config.retryOptions?.timeoutMs;
14911
+ const timeoutMs = config.retryOptions?.timeoutMs ?? config.providerRequestTimeoutMs;
14904
14912
  return {
14905
14913
  agents: {
14906
14914
  defaults: {
@@ -15086,12 +15094,16 @@ function createAssistantAgentFromResponder2(responder) {
15086
15094
  };
15087
15095
  }
15088
15096
  function asProviderFactoryConfig(config) {
15097
+ const retryOptions = config.retryOptions || config.providerRequestTimeoutMs !== void 0 ? {
15098
+ ...config.retryOptions,
15099
+ ...config.retryOptions?.timeoutMs === void 0 && config.providerRequestTimeoutMs !== void 0 ? { timeoutMs: config.providerRequestTimeoutMs } : {}
15100
+ } : void 0;
15089
15101
  return {
15090
15102
  provider: config.provider,
15091
15103
  model: config.model,
15092
15104
  ...config.baseUrl ? { baseUrl: config.baseUrl } : {},
15093
15105
  ...config.apiKey ? { apiKey: config.apiKey } : {},
15094
- ...config.retryOptions ? { retryOptions: config.retryOptions } : {},
15106
+ ...retryOptions ? { retryOptions } : {},
15095
15107
  ...config.disableThinking ? { disableThinking: config.disableThinking } : {},
15096
15108
  ...config.reasoningEffort ? { reasoningEffort: config.reasoningEffort } : {},
15097
15109
  ...config.temperature !== void 0 ? { temperature: config.temperature } : {},
@@ -32094,9 +32106,9 @@ function loadSealedRubric(id = DEFAULT_ASSISTANT_RUBRIC_ID, options = {}) {
32094
32106
  if (typeof prompt !== "string" || prompt.length === 0) {
32095
32107
  throw new Error(`sealed rubric not found in registry: ${id}`);
32096
32108
  }
32097
- const sha256 = createHash9("sha256").update(prompt, "utf8").digest("hex");
32109
+ const sha2562 = createHash9("sha256").update(prompt, "utf8").digest("hex");
32098
32110
  const version = parseVersionFromId(id);
32099
- return { id, version, prompt, sha256 };
32111
+ return { id, version, prompt, sha256: sha2562 };
32100
32112
  }
32101
32113
  function verifyRubricDigest(expectedSha256, options = {}) {
32102
32114
  const rubric = loadSealedRubric(options.id, { registry: options.registry });
@@ -38030,6 +38042,523 @@ function formatSignedScore(value) {
38030
38042
  return `${value >= 0 ? "+" : ""}${formatScore(value)}`;
38031
38043
  }
38032
38044
 
38045
+ // src/stats/locomo-recall-delta.ts
38046
+ import { createHash as createHash13 } from "crypto";
38047
+ import { basename } from "path";
38048
+ var LOCOMO_FULL_TASK_COUNT = 1986;
38049
+ var LOCOMO_RECALL_EXCERPT_CHARS = 240;
38050
+ var LOCOMO_RECALL_DIFF_LINE_LIMIT = 20;
38051
+ var LOCOMO_CATEGORY_ORDER2 = ["single_hop", "multi_hop", "temporal", "open_domain", "adversarial"];
38052
+ var LOCOMO_TASK_CATEGORY_PATTERN2 = /-(single_hop|multi_hop|temporal|open_domain|adversarial)$/;
38053
+ var SOURCE_TURN_PATTERN = /^\[([^,\]\s]+),\s*turn\s+(\d+),\s*([^,\]]+?)(?:,\s*score\s+[^\]]+)?\]/i;
38054
+ var SHA256_PATTERN = /^[a-f0-9]{64}$/;
38055
+ function sanitizeLoComoResultReference(path40) {
38056
+ const reference = basename(path40).replace(/[\u0000-\u001f\u007f`]/g, "_");
38057
+ if (!reference) throw new Error("Result path must identify a file.");
38058
+ return reference;
38059
+ }
38060
+ function diagnoseLoComoRecallDelta(options) {
38061
+ const primaryMetric2 = options.primaryMetric ?? "llm_judge";
38062
+ const maxRegressions = parseNonNegativeInteger(options.maxRegressions ?? 20, "maxRegressions");
38063
+ assertEvidenceEnvelope(options.baseline, "baseline");
38064
+ assertEvidenceEnvelope(options.real, "real");
38065
+ assertCompleteResult(options.baseline.result, "baseline");
38066
+ assertCompleteResult(options.real.result, "real");
38067
+ assertComparableResults(options.baseline.result, options.real.result);
38068
+ const joined = joinTasks2(options.baseline.result, options.real.result);
38069
+ assertMetricSets(joined, primaryMetric2);
38070
+ verifyAggregateMeans(options.baseline.result, joined, "baseline");
38071
+ verifyAggregateMeans(options.real.result, joined, "real");
38072
+ const overall = summarizeMetric(joined, primaryMetric2);
38073
+ const categories = [...new Set(joined.map((task) => task.category))].sort(compareLoComoCategories2).map((category) => {
38074
+ const tasks = joined.filter((task) => task.category === category);
38075
+ return {
38076
+ category,
38077
+ taskCount: tasks.length,
38078
+ ...summarizeMetric(tasks, primaryMetric2)
38079
+ };
38080
+ });
38081
+ 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);
38082
+ return {
38083
+ schemaVersion: 1,
38084
+ benchmarkId: "locomo",
38085
+ comparison: {
38086
+ baseline: buildProvenance(options.baseline, "baseline", joined, "baseline"),
38087
+ real: buildProvenance(options.real, "real", joined, "real")
38088
+ },
38089
+ taskCount: joined.length,
38090
+ primaryMetric: primaryMetric2,
38091
+ overall,
38092
+ categories,
38093
+ topRegressions,
38094
+ evidenceBoundary: {
38095
+ finalContextComparison: "complete",
38096
+ retrievalTierAttribution: "unavailable-in-cached-results",
38097
+ hiddenEvidenceUsed: false,
38098
+ explanation: "Cached BenchmarkResult files preserve the final transformed recall context, but not pre-transform candidates, section provenance, filter traces, or served-by tiers."
38099
+ }
38100
+ };
38101
+ }
38102
+ function renderLoComoRecallDeltaMarkdown(report) {
38103
+ const lines = [
38104
+ "# LoCoMo paired final-context diagnosis",
38105
+ "",
38106
+ `Joined ${report.taskCount} complete paired tasks. The primary metric is \`${report.primaryMetric}\` (real minus baseline).`,
38107
+ "",
38108
+ "| Category | Tasks | Baseline | Real | Delta | Wins | Losses | Ties |",
38109
+ "|---|---:|---:|---:|---:|---:|---:|---:|"
38110
+ ];
38111
+ for (const category of report.categories) {
38112
+ lines.push(
38113
+ `| ${escapeMarkdownCell(category.category)} | ${category.taskCount} | ${formatScore2(category.baselineMean)} | ${formatScore2(category.realMean)} | ${formatSignedScore2(category.delta)} | ${category.wins} | ${category.losses} | ${category.ties} |`
38114
+ );
38115
+ }
38116
+ lines.push(
38117
+ `| **Overall** | **${report.taskCount}** | **${formatScore2(report.overall.baselineMean)}** | **${formatScore2(report.overall.realMean)}** | **${formatSignedScore2(report.overall.delta)}** | **${report.overall.wins}** | **${report.overall.losses}** | **${report.overall.ties}** |`,
38118
+ "",
38119
+ "## Highest-priority final-context regressions",
38120
+ ""
38121
+ );
38122
+ for (const task of report.topRegressions) {
38123
+ lines.push(
38124
+ `### ${escapeMarkdownCell(task.taskId)}`,
38125
+ "",
38126
+ `Category: \`${task.category}\`; baseline ${formatScore2(task.baselineScore)}, real ${formatScore2(task.realScore)}, delta ${formatSignedScore2(task.delta)}.`,
38127
+ "",
38128
+ `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)}).`,
38129
+ "",
38130
+ `Displaced lines: ${task.displacedLines.totalCount}; introduced lines: ${task.introducedLines.totalCount}.`,
38131
+ ""
38132
+ );
38133
+ const displaced = task.displacedLines.lines[0];
38134
+ if (displaced) {
38135
+ lines.push(
38136
+ `- Baseline-only evidence: ${escapeMarkdownCell(displaced.excerpt)} (sha256 \`${displaced.sha256}\`)`
38137
+ );
38138
+ }
38139
+ const introduced = task.introducedLines.lines[0];
38140
+ if (introduced) {
38141
+ lines.push(
38142
+ `- Real-only evidence: ${escapeMarkdownCell(introduced.excerpt)} (sha256 \`${introduced.sha256}\`)`
38143
+ );
38144
+ }
38145
+ if (displaced || introduced) lines.push("");
38146
+ }
38147
+ lines.push(
38148
+ "## Evidence boundary",
38149
+ "",
38150
+ "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.",
38151
+ "",
38152
+ `Baseline: \`${report.comparison.baseline.reference}\` (sha256 \`${report.comparison.baseline.sha256}\`)`,
38153
+ "",
38154
+ `Real: \`${report.comparison.real.reference}\` (sha256 \`${report.comparison.real.sha256}\`)`,
38155
+ ""
38156
+ );
38157
+ return `${lines.join("\n")}
38158
+ `;
38159
+ }
38160
+ function assertEvidenceEnvelope(evidence, label) {
38161
+ if (!evidence.reference.trim()) {
38162
+ throw new Error(`${label} result reference must not be empty.`);
38163
+ }
38164
+ if (!SHA256_PATTERN.test(evidence.sha256)) {
38165
+ throw new Error(`${label} result sha256 must be 64 lowercase hexadecimal characters.`);
38166
+ }
38167
+ }
38168
+ function assertCompleteResult(result, label) {
38169
+ if (result.meta.benchmark !== "locomo") {
38170
+ throw new Error(`${label} result must be a locomo benchmark result.`);
38171
+ }
38172
+ if (result.meta.mode !== "full" || result.meta.status === "partial") {
38173
+ throw new Error(`${label} result must be a complete full-mode run.`);
38174
+ }
38175
+ if (!result.config.systemProvider || !result.config.judgeProvider) {
38176
+ throw new Error(`${label} result must identify both system and judge providers.`);
38177
+ }
38178
+ const limit = result.config.benchmarkOptions?.limit;
38179
+ const trialLimit = result.config.benchmarkOptions?.trialLimit;
38180
+ if (limit !== void 0 || trialLimit !== void 0) {
38181
+ throw new Error(`${label} result is limited and cannot be used as complete evidence.`);
38182
+ }
38183
+ if (result.results.tasks.length !== LOCOMO_FULL_TASK_COUNT) {
38184
+ throw new Error(
38185
+ `${label} result must contain exactly ${LOCOMO_FULL_TASK_COUNT} tasks; got ${result.results.tasks.length}.`
38186
+ );
38187
+ }
38188
+ for (const task of result.results.tasks) {
38189
+ const details = asRecord(task.details);
38190
+ const failure = details?.benchmarkFailure;
38191
+ const legacyError = details?.error;
38192
+ if (failure !== void 0 && failure !== null || typeof legacyError === "string" && legacyError.length > 0) {
38193
+ throw new Error(`${label} result contains failed task ${JSON.stringify(task.taskId)}.`);
38194
+ }
38195
+ }
38196
+ }
38197
+ function assertComparableResults(baseline, real) {
38198
+ if (baseline.config.runtimeProfile !== "baseline") {
38199
+ throw new Error('baseline result runtimeProfile must be "baseline".');
38200
+ }
38201
+ if (real.config.runtimeProfile !== "real") {
38202
+ throw new Error('real result runtimeProfile must be "real".');
38203
+ }
38204
+ const checks = [
38205
+ ["meta.version", baseline.meta.version, real.meta.version],
38206
+ ["meta.remnicVersion", baseline.meta.remnicVersion, real.meta.remnicVersion],
38207
+ ["meta.gitSha", baseline.meta.gitSha, real.meta.gitSha],
38208
+ ["meta.runCount", baseline.meta.runCount, real.meta.runCount],
38209
+ ["meta.seeds", baseline.meta.seeds, real.meta.seeds],
38210
+ ["meta.datasetHash", baseline.meta.datasetHash ?? null, real.meta.datasetHash ?? null],
38211
+ ["config.adapterMode", baseline.config.adapterMode, real.config.adapterMode],
38212
+ [
38213
+ "config.systemProvider",
38214
+ providerIdentity(baseline.config.systemProvider),
38215
+ providerIdentity(real.config.systemProvider)
38216
+ ],
38217
+ [
38218
+ "config.judgeProvider",
38219
+ providerIdentity(baseline.config.judgeProvider),
38220
+ providerIdentity(real.config.judgeProvider)
38221
+ ],
38222
+ [
38223
+ "config.internalProvider",
38224
+ providerIdentity(baseline.config.internalProvider),
38225
+ providerIdentity(real.config.internalProvider)
38226
+ ]
38227
+ ];
38228
+ for (const [field, baselineValue, realValue] of checks) {
38229
+ if (stableJson(baselineValue) !== stableJson(realValue)) {
38230
+ throw new Error(
38231
+ `Results are not comparable: ${field} differs (${stableJson(baselineValue)} vs ${stableJson(realValue)}).`
38232
+ );
38233
+ }
38234
+ }
38235
+ }
38236
+ function joinTasks2(baseline, real) {
38237
+ const baselineTasks = indexTasks2(baseline.results.tasks, "baseline");
38238
+ const realTasks = indexTasks2(real.results.tasks, "real");
38239
+ const missingFromReal = [...baselineTasks.keys()].filter((id) => !realTasks.has(id)).sort(compareStrings);
38240
+ const missingFromBaseline = [...realTasks.keys()].filter((id) => !baselineTasks.has(id)).sort(compareStrings);
38241
+ if (missingFromReal.length > 0 || missingFromBaseline.length > 0) {
38242
+ throw new Error(
38243
+ `Results do not contain identical task-id sets: ${missingFromReal.length} missing from real, ${missingFromBaseline.length} missing from baseline.`
38244
+ );
38245
+ }
38246
+ return [...baselineTasks.keys()].sort(compareStrings).map((taskId) => {
38247
+ const baselineTask = baselineTasks.get(taskId);
38248
+ const realTask = realTasks.get(taskId);
38249
+ if (!baselineTask || !realTask) {
38250
+ throw new Error(`Task ${JSON.stringify(taskId)} disappeared during the validated join.`);
38251
+ }
38252
+ for (const [field, baselineValue, realValue] of [
38253
+ ["question", baselineTask.question, realTask.question],
38254
+ ["expected", baselineTask.expected, realTask.expected]
38255
+ ]) {
38256
+ if (baselineValue !== realValue) {
38257
+ throw new Error(`Task ${JSON.stringify(taskId)} has mismatched ${field} payloads.`);
38258
+ }
38259
+ }
38260
+ const baselineCategory = resolveCategory2(baselineTask);
38261
+ const realCategory = resolveCategory2(realTask);
38262
+ if (baselineCategory !== realCategory) {
38263
+ throw new Error(`Task ${JSON.stringify(taskId)} has mismatched categories.`);
38264
+ }
38265
+ return { taskId, category: baselineCategory, baseline: baselineTask, real: realTask };
38266
+ });
38267
+ }
38268
+ function indexTasks2(tasks, label) {
38269
+ const result = /* @__PURE__ */ new Map();
38270
+ for (const task of tasks) {
38271
+ if (!task.taskId || result.has(task.taskId)) {
38272
+ throw new Error(`${label} result contains duplicate or empty task id ${JSON.stringify(task.taskId)}.`);
38273
+ }
38274
+ if (!task.question || !task.expected) {
38275
+ throw new Error(`${label} task ${JSON.stringify(task.taskId)} has an empty question or expected answer.`);
38276
+ }
38277
+ const recalledText = asRecord(task.details)?.recalledText;
38278
+ if (typeof recalledText !== "string") {
38279
+ throw new Error(`${label} task ${JSON.stringify(task.taskId)} has no final recalledText.`);
38280
+ }
38281
+ result.set(task.taskId, task);
38282
+ }
38283
+ return result;
38284
+ }
38285
+ function assertMetricSets(joined, primaryMetric2) {
38286
+ const first = joined[0];
38287
+ if (!first) throw new Error("Cannot validate metric sets for an empty paired result.");
38288
+ const expectedMetrics = Object.keys(first.baseline.scores).sort(compareStrings);
38289
+ for (const task of joined) {
38290
+ const baselineMetrics = Object.keys(task.baseline.scores).sort(compareStrings);
38291
+ const realMetrics = Object.keys(task.real.scores).sort(compareStrings);
38292
+ if (stableJson(baselineMetrics) !== stableJson(realMetrics)) {
38293
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has mismatched metric sets.`);
38294
+ }
38295
+ if (stableJson(baselineMetrics) !== stableJson(expectedMetrics)) {
38296
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has an inconsistent metric set.`);
38297
+ }
38298
+ if (!baselineMetrics.includes(primaryMetric2)) {
38299
+ throw new Error(`Task ${JSON.stringify(task.taskId)} is missing metric ${JSON.stringify(primaryMetric2)}.`);
38300
+ }
38301
+ for (const [side, scores] of [
38302
+ ["baseline", task.baseline.scores],
38303
+ ["real", task.real.scores]
38304
+ ]) {
38305
+ for (const [metric, score] of Object.entries(scores)) {
38306
+ if (!Number.isFinite(score)) {
38307
+ throw new Error(`${side} task ${JSON.stringify(task.taskId)} metric ${metric} is not finite.`);
38308
+ }
38309
+ }
38310
+ }
38311
+ }
38312
+ }
38313
+ function buildRegression(task, metric, excerptChars, maxDiffLines) {
38314
+ const baselineRecall = finalRecallText(task.baseline);
38315
+ const realRecall = finalRecallText(task.real);
38316
+ const baselineLines = contentLines(baselineRecall);
38317
+ const realLines = contentLines(realRecall);
38318
+ const displaced = subtractLineMultiset(baselineLines, realLines);
38319
+ const introduced = subtractLineMultiset(realLines, baselineLines);
38320
+ const baselineScore = requireMetricScore(task.baseline, metric, "baseline");
38321
+ const realScore = requireMetricScore(task.real, metric, "real");
38322
+ return {
38323
+ taskId: task.taskId,
38324
+ category: task.category,
38325
+ baselineScore,
38326
+ realScore,
38327
+ delta: realScore - baselineScore,
38328
+ questionSha256: sha256(normalizeText3(task.baseline.question)),
38329
+ expectedAnswerSha256: sha256(normalizeText3(task.baseline.expected)),
38330
+ baseline: {
38331
+ answer: textDigest(task.baseline.actual, excerptChars),
38332
+ recall: recallSummary(baselineRecall, task.baseline.expected)
38333
+ },
38334
+ real: {
38335
+ answer: textDigest(task.real.actual, excerptChars),
38336
+ recall: recallSummary(realRecall, task.real.expected)
38337
+ },
38338
+ displacedLines: lineDelta(displaced, maxDiffLines, excerptChars),
38339
+ introducedLines: lineDelta(introduced, maxDiffLines, excerptChars)
38340
+ };
38341
+ }
38342
+ function buildProvenance(evidence, profile, joined, side) {
38343
+ const system = requireProvider(evidence.result.config.systemProvider, profile, "system");
38344
+ const judge = requireProvider(evidence.result.config.judgeProvider, profile, "judge");
38345
+ const payload = joined.map((task) => ({
38346
+ taskId: task.taskId,
38347
+ category: task.category,
38348
+ question: task[side].question,
38349
+ expected: task[side].expected
38350
+ }));
38351
+ return {
38352
+ reference: evidence.reference,
38353
+ sha256: evidence.sha256,
38354
+ resultId: evidence.result.meta.id,
38355
+ gitSha: evidence.result.meta.gitSha,
38356
+ remnicVersion: evidence.result.meta.remnicVersion,
38357
+ runtimeProfile: profile,
38358
+ systemProvider: system.provider,
38359
+ systemModel: system.model,
38360
+ judgeProvider: judge.provider,
38361
+ judgeModel: judge.model,
38362
+ seeds: [...evidence.result.meta.seeds],
38363
+ taskPayloadSha256: sha256(stableJson(payload))
38364
+ };
38365
+ }
38366
+ function summarizeMetric(tasks, metric) {
38367
+ let baselineSum = 0;
38368
+ let realSum = 0;
38369
+ let wins = 0;
38370
+ let losses = 0;
38371
+ let ties = 0;
38372
+ for (const task of tasks) {
38373
+ const baseline = requireMetricScore(task.baseline, metric, "baseline");
38374
+ const real = requireMetricScore(task.real, metric, "real");
38375
+ baselineSum += baseline;
38376
+ realSum += real;
38377
+ if (real > baseline) wins += 1;
38378
+ else if (real < baseline) losses += 1;
38379
+ else ties += 1;
38380
+ }
38381
+ const baselineMean = baselineSum / tasks.length;
38382
+ const realMean = realSum / tasks.length;
38383
+ return { baselineMean, realMean, delta: realMean - baselineMean, wins, losses, ties };
38384
+ }
38385
+ function lineDelta(lines, maxDiffLines, excerptChars) {
38386
+ return {
38387
+ totalCount: lines.length,
38388
+ shownCount: Math.min(lines.length, maxDiffLines),
38389
+ lines: lines.slice(0, maxDiffLines).map((line) => {
38390
+ const parsedSourceRef = sourceRef(line.text);
38391
+ return {
38392
+ ordinal: line.ordinal,
38393
+ ...textDigest(line.text, excerptChars),
38394
+ ...parsedSourceRef ? { sourceRef: parsedSourceRef } : {}
38395
+ };
38396
+ })
38397
+ };
38398
+ }
38399
+ function recallSummary(text, expected) {
38400
+ const normalized = normalizeText3(text);
38401
+ const lines = normalized.split("\n").map((line) => line.trim()).filter(Boolean);
38402
+ return {
38403
+ sha256: sha256(normalized),
38404
+ charCount: normalized.length,
38405
+ lineCount: lines.length,
38406
+ headings: [...new Set(lines.filter(isHeading))],
38407
+ sourceRefs: [...new Set(lines.map(sourceRef).filter((value) => !!value))].sort(compareStrings),
38408
+ expectedTokenCoverage: tokenCoverage(expected, normalized)
38409
+ };
38410
+ }
38411
+ function textDigest(text, excerptChars) {
38412
+ const normalized = normalizeText3(text);
38413
+ return {
38414
+ sha256: sha256(normalized),
38415
+ charCount: normalized.length,
38416
+ excerpt: normalized.slice(0, excerptChars)
38417
+ };
38418
+ }
38419
+ function contentLines(text) {
38420
+ return normalizeText3(text).split("\n").map((line, ordinal) => ({ text: line.trim(), ordinal })).filter((line) => line.text.length > 0 && !isHeading(line.text));
38421
+ }
38422
+ function subtractLineMultiset(source, comparison) {
38423
+ const remaining = /* @__PURE__ */ new Map();
38424
+ for (const line of comparison) {
38425
+ remaining.set(line.text, (remaining.get(line.text) ?? 0) + 1);
38426
+ }
38427
+ return source.filter((line) => {
38428
+ const count = remaining.get(line.text) ?? 0;
38429
+ if (count === 0) return true;
38430
+ remaining.set(line.text, count - 1);
38431
+ return false;
38432
+ });
38433
+ }
38434
+ function verifyAggregateMeans(result, joined, side) {
38435
+ const first = joined[0];
38436
+ if (!first) throw new Error("Cannot verify aggregates for an empty paired result.");
38437
+ const metrics = Object.keys(first[side].scores).sort(compareStrings);
38438
+ for (const metric of metrics) {
38439
+ const aggregate = result.results.aggregates[metric];
38440
+ if (!aggregate || !Number.isFinite(aggregate.mean)) {
38441
+ throw new Error(`${side} result has no finite aggregate mean for ${JSON.stringify(metric)}.`);
38442
+ }
38443
+ const computed = joined.reduce((sum, task) => sum + requireMetricScore(task[side], metric, side), 0) / joined.length;
38444
+ if (Math.abs(aggregate.mean - computed) > 1e-12) {
38445
+ throw new Error(`${side} aggregate ${metric}=${aggregate.mean} does not match task mean ${computed}.`);
38446
+ }
38447
+ }
38448
+ }
38449
+ function tokenCoverage(expected, recalled) {
38450
+ const expectedTokens = new Set(tokenize6(expected));
38451
+ if (expectedTokens.size === 0) return 0;
38452
+ const recalledTokens = new Set(tokenize6(recalled));
38453
+ let matched = 0;
38454
+ for (const token of expectedTokens) {
38455
+ if (recalledTokens.has(token)) matched += 1;
38456
+ }
38457
+ return matched / expectedTokens.size;
38458
+ }
38459
+ function tokenize6(value) {
38460
+ return normalizeText3(value).toLocaleLowerCase("en-US").match(/[\p{L}\p{N}]+/gu) ?? [];
38461
+ }
38462
+ function resolveCategory2(task) {
38463
+ const categoryName = asRecord(task.details)?.categoryName;
38464
+ if (typeof categoryName === "string" && categoryName.trim()) return categoryName;
38465
+ const match = task.taskId.match(LOCOMO_TASK_CATEGORY_PATTERN2);
38466
+ if (!match?.[1]) {
38467
+ throw new Error(`Cannot derive LoCoMo category from task id ${JSON.stringify(task.taskId)}.`);
38468
+ }
38469
+ return match[1];
38470
+ }
38471
+ function finalRecallText(task) {
38472
+ const recalledText = asRecord(task.details)?.recalledText;
38473
+ if (typeof recalledText !== "string") {
38474
+ throw new Error(`Task ${JSON.stringify(task.taskId)} has no final recalledText.`);
38475
+ }
38476
+ return recalledText;
38477
+ }
38478
+ function providerIdentity(provider) {
38479
+ if (!provider) return null;
38480
+ return {
38481
+ provider: provider.provider,
38482
+ model: provider.model,
38483
+ rubricVersion: provider.rubricVersion ?? null,
38484
+ baseUrl: provider.baseUrl ?? null,
38485
+ providerRequestTimeoutMs: provider.providerRequestTimeoutMs ?? null,
38486
+ retryOptions: provider.retryOptions ? {
38487
+ maxAttempts: provider.retryOptions.maxAttempts ?? null,
38488
+ baseBackoffMs: provider.retryOptions.baseBackoffMs ?? null,
38489
+ timeoutMs: provider.retryOptions.timeoutMs ?? null,
38490
+ retryOnTimeout: provider.retryOptions.retryOnTimeout ?? null,
38491
+ max429WaitMs: provider.retryOptions.max429WaitMs ?? null
38492
+ } : null,
38493
+ disableThinking: provider.disableThinking ?? null,
38494
+ reasoningEffort: provider.reasoningEffort ?? null,
38495
+ responderContextBudgetChars: provider.responderContextBudgetChars ?? null,
38496
+ responderPromptBudgetChars: provider.responderPromptBudgetChars ?? null,
38497
+ temperature: provider.temperature ?? null,
38498
+ seed: provider.seed ?? null
38499
+ };
38500
+ }
38501
+ function sourceRef(line) {
38502
+ const match = line.match(SOURCE_TURN_PATTERN);
38503
+ const sessionId = match?.[1];
38504
+ const turn = match?.[2];
38505
+ const role = match?.[3];
38506
+ if (!sessionId || !turn || !role) return void 0;
38507
+ return `${sessionId}:turn-${turn}:${role.trim().toLowerCase()}`;
38508
+ }
38509
+ function requireMetricScore(task, metric, side) {
38510
+ const score = task.scores[metric];
38511
+ if (typeof score !== "number" || !Number.isFinite(score)) {
38512
+ throw new Error(`${side} task ${JSON.stringify(task.taskId)} metric ${metric} is not finite.`);
38513
+ }
38514
+ return score;
38515
+ }
38516
+ function requireProvider(provider, profile, role) {
38517
+ if (!provider) throw new Error(`${profile} result has no ${role} provider identity.`);
38518
+ return provider;
38519
+ }
38520
+ function isHeading(line) {
38521
+ return /^##\s+/.test(line);
38522
+ }
38523
+ function normalizeText3(value) {
38524
+ return value.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
38525
+ }
38526
+ function sha256(value) {
38527
+ return createHash13("sha256").update(value).digest("hex");
38528
+ }
38529
+ function stableJson(value) {
38530
+ return JSON.stringify(value);
38531
+ }
38532
+ function asRecord(value) {
38533
+ return typeof value === "object" && value !== null ? value : void 0;
38534
+ }
38535
+ function parseNonNegativeInteger(value, label) {
38536
+ if (!Number.isInteger(value) || value < 0) {
38537
+ throw new Error(`${label} must be a non-negative integer.`);
38538
+ }
38539
+ return value;
38540
+ }
38541
+ function compareLoComoCategories2(left, right) {
38542
+ const leftIndex = LOCOMO_CATEGORY_ORDER2.indexOf(left);
38543
+ const rightIndex = LOCOMO_CATEGORY_ORDER2.indexOf(right);
38544
+ if (leftIndex >= 0 && rightIndex >= 0) return leftIndex - rightIndex;
38545
+ if (leftIndex >= 0) return -1;
38546
+ if (rightIndex >= 0) return 1;
38547
+ return compareStrings(left, right);
38548
+ }
38549
+ function compareStrings(left, right) {
38550
+ return left < right ? -1 : left > right ? 1 : 0;
38551
+ }
38552
+ function escapeMarkdownCell(value) {
38553
+ return value.replaceAll("|", "\\|").replaceAll("\n", " ");
38554
+ }
38555
+ function formatScore2(value) {
38556
+ return value.toFixed(4);
38557
+ }
38558
+ function formatSignedScore2(value) {
38559
+ return `${value >= 0 ? "+" : ""}${formatScore2(value)}`;
38560
+ }
38561
+
38033
38562
  // src/integrity/sealed-qrels.ts
38034
38563
  import { readFile as readFile20 } from "fs/promises";
38035
38564
  function isSealedQrelsArtifact(value) {
@@ -39433,7 +39962,7 @@ var chatFixture = {
39433
39962
  };
39434
39963
 
39435
39964
  // src/judges/calibration-slice.ts
39436
- import { createHash as createHash13, randomBytes as randomBytes3 } from "crypto";
39965
+ import { createHash as createHash14, randomBytes as randomBytes3 } from "crypto";
39437
39966
  import { mkdir as mkdir18, readFile as readFile22, rename as rename4, unlink as unlink4, writeFile as writeFile17 } from "fs/promises";
39438
39967
  import path37 from "path";
39439
39968
 
@@ -39580,7 +40109,7 @@ function selectCalibrationSlice(questionIds, size = CALIBRATION_SLICE_SIZE) {
39580
40109
  unique.push(id);
39581
40110
  }
39582
40111
  }
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);
40112
+ 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
40113
  }
39585
40114
  async function runJudgeCalibration(options) {
39586
40115
  const binScore = options.binScore ?? ((score) => binarizeJudgeScore(score));
@@ -39655,7 +40184,7 @@ function validatePinnedQuestionIds(ids, availableIds) {
39655
40184
  return [...ids];
39656
40185
  }
39657
40186
  function hashCalibrationAnswerSet(answers) {
39658
- return createHash13("sha256").update(JSON.stringify(answers.map((answer) => [
40187
+ return createHash14("sha256").update(JSON.stringify(answers.map((answer) => [
39659
40188
  answer.questionId,
39660
40189
  answer.question,
39661
40190
  answer.predicted,
@@ -40342,7 +40871,7 @@ var PROCEDURAL_REAL_SCENARIOS_SMOKE = [
40342
40871
  ];
40343
40872
 
40344
40873
  // src/security/extraction-attack/tokenize.ts
40345
- function tokenize6(text) {
40874
+ function tokenize7(text) {
40346
40875
  return text.toLowerCase().split(/[^a-z0-9]+/u).filter((t) => t.length > 2);
40347
40876
  }
40348
40877
 
@@ -40384,7 +40913,7 @@ function createSeededRng2(seed) {
40384
40913
  }
40385
40914
  };
40386
40915
  }
40387
- var tokenizeContent = tokenize6;
40916
+ var tokenizeContent = tokenize7;
40388
40917
  function recoveryTokensFor(memory) {
40389
40918
  if (memory.tokens && memory.tokens.length > 0) {
40390
40919
  const seen = /* @__PURE__ */ new Set();
@@ -40863,11 +41392,11 @@ function createSyntheticTarget(options) {
40863
41392
  }
40864
41393
  const normalized = memories.map((m) => ({
40865
41394
  memory: m,
40866
- tokens: new Set((m.tokens ?? tokenize6(m.content)).map((t) => t.toLowerCase()))
41395
+ tokens: new Set((m.tokens ?? tokenize7(m.content)).map((t) => t.toLowerCase()))
40867
41396
  }));
40868
41397
  return {
40869
41398
  async recall(query, recallOptions) {
40870
- const qTokens = tokenize6(query);
41399
+ const qTokens = tokenize7(query);
40871
41400
  if (qTokens.length === 0) return [];
40872
41401
  const requestedNs = recallOptions?.namespace;
40873
41402
  if (enforceNamespaceAcl && requestedNs !== void 0 && requestedNs !== allowedNamespace) {
@@ -41111,7 +41640,7 @@ function createMitigatedTarget(config) {
41111
41640
  }
41112
41641
 
41113
41642
  // src/coding-graph/generator.ts
41114
- import { createHash as createHash14 } from "crypto";
41643
+ import { createHash as createHash15 } from "crypto";
41115
41644
  function createSeededRng3(seed) {
41116
41645
  let state = seed >>> 0;
41117
41646
  return function rng() {
@@ -41140,7 +41669,7 @@ var EDGE_TYPE_WEIGHTS = [
41140
41669
  var PROVENANCE_VALUES = ["heuristic", "heuristic", "heuristic", "trace"];
41141
41670
  var AVG_BYTES_PER_LINE = 40;
41142
41671
  function hashContent(input) {
41143
- return createHash14("sha256").update(input).digest("hex").slice(0, 16);
41672
+ return createHash15("sha256").update(input).digest("hex").slice(0, 16);
41144
41673
  }
41145
41674
  function generateSyntheticRepo(config) {
41146
41675
  const rng = createSeededRng3(config.seed);
@@ -41708,6 +42237,9 @@ export {
41708
42237
  JUDGE_CALIBRATION_KAPPA_THRESHOLD,
41709
42238
  LOCAL_LAB_PROVIDER_KINDS,
41710
42239
  LOCOMO_DATASET_FILENAMES,
42240
+ LOCOMO_FULL_TASK_COUNT,
42241
+ LOCOMO_RECALL_DIFF_LINE_LIMIT,
42242
+ LOCOMO_RECALL_EXCERPT_CHARS,
41711
42243
  LONG_MEM_EVAL_DATASET_FILENAMES,
41712
42244
  LettaMemCorrectAdapter,
41713
42245
  LocalLabPreflightError,
@@ -41818,6 +42350,7 @@ export {
41818
42350
  defaultBenchmarkPublishPath,
41819
42351
  deleteBenchmarkResults,
41820
42352
  diagnoseLoComoProfileDelta,
42353
+ diagnoseLoComoRecallDelta,
41821
42354
  discoverAllProviders,
41822
42355
  discoveryEndpointFor,
41823
42356
  emailFixture,
@@ -41892,6 +42425,7 @@ export {
41892
42425
  renderBaselineMarkdown,
41893
42426
  renderBenchmarkResultExport,
41894
42427
  renderLoComoProfileDeltaMarkdown,
42428
+ renderLoComoRecallDeltaMarkdown,
41895
42429
  renderMemorySummaryForJudge,
41896
42430
  renderMemoryViewForAgent,
41897
42431
  resolveAssistantAgent,
@@ -41927,6 +42461,7 @@ export {
41927
42461
  runSealedJudge,
41928
42462
  runSequentialPhases,
41929
42463
  safeHexEqual,
42464
+ sanitizeLoComoResultReference,
41930
42465
  saveBaseline,
41931
42466
  saveBenchmarkBaseline,
41932
42467
  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.22",
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.22",
43
+ "@remnic/core": "^9.6.22"
44
44
  },
45
45
  "devDependencies": {
46
46
  "tsup": "^8.5.1",