@deepthonk/core 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +26 -11
  2. package/dist/artifacts.js +178 -11
  3. package/dist/artifacts.js.map +1 -1
  4. package/dist/bradleyTerry.d.ts +1 -0
  5. package/dist/bradleyTerry.js +27 -2
  6. package/dist/bradleyTerry.js.map +1 -1
  7. package/dist/budget.d.ts +7 -1
  8. package/dist/budget.js +6 -1
  9. package/dist/budget.js.map +1 -1
  10. package/dist/budgetTracker.d.ts +6 -1
  11. package/dist/budgetTracker.js +32 -1
  12. package/dist/budgetTracker.js.map +1 -1
  13. package/dist/checkpointStore.d.ts +56 -0
  14. package/dist/checkpointStore.js +351 -0
  15. package/dist/checkpointStore.js.map +1 -0
  16. package/dist/critique.d.ts +3 -1
  17. package/dist/critique.js +24 -9
  18. package/dist/critique.js.map +1 -1
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/lifecycle.d.ts +33 -1
  23. package/dist/lifecycle.js +207 -6
  24. package/dist/lifecycle.js.map +1 -1
  25. package/dist/phaseRunner.d.ts +6 -1
  26. package/dist/phaseRunner.js +53 -19
  27. package/dist/phaseRunner.js.map +1 -1
  28. package/dist/resume.d.ts +10 -3
  29. package/dist/resume.js +357 -39
  30. package/dist/resume.js.map +1 -1
  31. package/dist/runner.d.ts +3 -1
  32. package/dist/runner.js +894 -246
  33. package/dist/runner.js.map +1 -1
  34. package/dist/schemas.d.ts +397 -47
  35. package/dist/schemas.js +67 -5
  36. package/dist/schemas.js.map +1 -1
  37. package/dist/services.d.ts +9 -0
  38. package/dist/services.js +115 -12
  39. package/dist/services.js.map +1 -1
  40. package/dist/traceStore.d.ts +31 -2
  41. package/dist/traceStore.js +182 -21
  42. package/dist/traceStore.js.map +1 -1
  43. package/package.json +1 -1
package/README.md CHANGED
@@ -31,7 +31,7 @@ deepthonk plan --profile paper
31
31
 
32
32
  The paper profile plans 285 model calls and 8 sequential rounds. Confirm budget and provider pricing before pointing it at paid models. The short alias `dt` is installed alongside `deepthonk`. Develop from source: see [Development](#development).
33
33
 
34
- > v0.1 scope: an independent TypeScript reimplementation of the OpenDeepThink algorithm as a CLI + MCP server. The published algorithm is the load-bearing part; this release is a practical integration layer with explicit limits documented below. Cost guarantees rely on provider pricing being present in config; resume inspects trace state by default and can replay from validated phase boundaries with `--continue` / MCP `continue: true`; the MCP HTTP transport is loopback-only. The included acceptance smoke uses the deterministic fake provider and a toy task — it is not a CF-73 / HLE reproduction; see `docs/` and [Acknowledgments](#acknowledgments) for the canonical paper and Python reference.
34
+ > DeepThonk is an independent TypeScript reimplementation and practical integration layer; the published algorithm is the load-bearing part. Cost guarantees rely on provider pricing being present in config. Trace-v2 resume can reuse validated per-item receipts after a crash, while older traces replay an incomplete phase wholesale. The MCP HTTP transport remains loopback-only. The included acceptance smoke uses the deterministic fake provider and a toy task — it is not a CF-73 / HLE reproduction; see `docs/` and [Acknowledgments](#acknowledgments) for the canonical paper and Python reference.
35
35
 
36
36
  ## Setup
37
37
 
@@ -70,7 +70,7 @@ deepthonk plan --config ~/.config/deepthonk/config.yaml
70
70
  deepthonk run --task task.md --config ~/.config/deepthonk/config.yaml --profile quick --dry-run
71
71
  ```
72
72
 
73
- Start with `--profile quick` and consider `--max-concurrency`, `--max-input-tokens`, `--max-output-tokens`, `--max-usd`, and `--request-timeout-ms` before larger paid profiles. Runtime token/USD budgets are enforced after completed provider calls and can overshoot by at most the active concurrency window. Every completed run summary includes call/token usage, and includes `usage.usd` when matching model pricing is available.
73
+ Start with `--profile quick` and consider `--max-concurrency`, `--max-calls`, `--max-input-tokens`, `--max-output-tokens`, `--max-usd`, and `--request-timeout-ms` before larger paid profiles. `max_calls` is reserved before dispatch and counts logical model invocations, including failed calls and invalid-JSON retries; provider-internal HTTP retries are reported separately. Token/USD totals are known only after responses and can overshoot by at most the active concurrency window. Plans keep nominal `calls` separate from finalizer and retry headroom in `worst_case_calls`.
74
74
 
75
75
  ## OpenAI-Compatible Providers
76
76
 
@@ -86,7 +86,7 @@ deepthonk run \
86
86
  --judge-model strong-model
87
87
  ```
88
88
 
89
- The driver calls `POST {base_url}/chat/completions` and requests JSON mode for comparisons when supported. If a provider returns a `400` with a body that mentions `response_format` or `json`, the driver retries without JSON mode and uses robust JSON extraction on the plain text response. Providers that reject JSON mode with a different status code (e.g. `422`) surface as a normal provider error — set `supportsJsonMode: false` in YAML to disable JSON mode up front.
89
+ The driver calls `POST {base_url}/chat/completions` and requests JSON mode for comparisons when supported. If a provider returns `400` or `422` with a body that mentions `response_format` or `json`, the driver retries without JSON mode, coordinates that capability probe across concurrent calls, and remembers the result for the process. Set `supports_json_mode: false` in YAML to disable JSON mode up front.
90
90
 
91
91
  Provider names are flexible. For a custom OpenAI-compatible endpoint, use any provider label with `--base-url`, `--api-key-env`, and role-specific model flags. For OpenRouter:
92
92
 
@@ -111,7 +111,7 @@ The MCP server exposes the same engine the CLI runs. Once wired into an MCP host
111
111
 
112
112
  Provider API keys come from the host process's environment, not from DeepThonk's config alone. Each host handles env passthrough slightly differently — see the concrete patterns below.
113
113
 
114
- MCP Sampling is supported as `provider: "sampling"` when the connected host advertises the MCP sampling capability. Sampling is not available from standalone CLI runs; use `deepseek`, `openrouter`, or `openai-compatible` there.
114
+ MCP Sampling is supported as `provider: "sampling"` when the connected host advertises the MCP sampling capability. Blocking `run`, `rank`, and `mutate` work over stdio and stateful Streamable HTTP. HTTP background `start` rejects Sampling because nested Sampling must remain attached to the initiating request; stdio background runs and direct-provider HTTP background runs remain available. Sampling is not available from standalone CLI runs.
115
115
 
116
116
  ### Claude Code
117
117
 
@@ -174,10 +174,11 @@ with the relevant provider env vars set on the process. If you'd rather install
174
174
  For local web hosts, or when stdio isn't available:
175
175
 
176
176
  ```bash
177
- deepthonk serve-mcp --transport http --port 3333
177
+ deepthonk serve-mcp --transport http --port 3333 \
178
+ --max-active-jobs 2 --max-queued-jobs 32
178
179
  ```
179
180
 
180
- The server binds `127.0.0.1:3333` only (loopback) and the endpoint is `POST http://127.0.0.1:3333/mcp`. DNS rebinding protection is on (CVE-2025-66414): requests with `Host` headers outside `127.0.0.1:3333` / `localhost:3333` are rejected. The HTTP wrapper also rejects non-`application/json` POSTs, non-loopback `Origin` headers, and `Sec-Fetch-Site: cross-site` before reading the body. It has no bearer auth. Do not expose this port through a reverse proxy without re-evaluating that trust boundary.
181
+ The server binds `127.0.0.1:3333` only and exposes stateful `POST`, `GET`, and `DELETE` at `http://127.0.0.1:3333/mcp`. Sessions use cryptographic IDs, expire after 30 idle minutes when no request is active, and are capped at 64. DNS rebinding protection is on (CVE-2025-66414): requests with `Host` headers outside `127.0.0.1:3333` / `localhost:3333` are rejected. The wrapper also rejects non-JSON POSTs, non-loopback `Origin` headers, and `Sec-Fetch-Site: cross-site` before reading the body. It has no bearer auth. Do not expose this port through a reverse proxy without re-evaluating that trust boundary.
181
182
 
182
183
  ### Tools
183
184
 
@@ -188,6 +189,8 @@ The server binds `127.0.0.1:3333` only (loopback) and the endpoint is `POST http
188
189
  | `deepthonk.status` | Poll job status from a `run_dir`. |
189
190
  | `deepthonk.result` | Return final summary + winner once a job is complete. |
190
191
  | `deepthonk.cancel` | Request cancellation by writing `cancel.json` into the run directory. |
192
+ | `deepthonk.lock_inspect` / `deepthonk.lock_reclaim` | Inspect lock ownership and explicitly reclaim only an exact fingerprint. |
193
+ | `deepthonk.repair_budget` | Replace legacy `[redacted]` numeric budget fields with explicit original values. |
191
194
  | `deepthonk.run` | Blocking convenience: start + await completion in one call. Prefer `start` + polling for long-running jobs. |
192
195
  | `deepthonk.rank` | Rank a user-supplied candidate set with pairwise judging + Bradley-Terry (skip generation). |
193
196
  | `deepthonk.mutate` | Mutate one supplied candidate with critique (one-shot). |
@@ -209,8 +212,12 @@ All tools accept inline provider/model fields, or `config_path` pointing at a De
209
212
  - `deepthonk://runs/{run_id}/population/{generation}` — population snapshot for a generation (JSON).
210
213
  - `deepthonk://runs/{run_id}/{winner|final}` — text artifacts.
211
214
  - `deepthonk://runs/{run_id}/status` — run state (JSON).
215
+ - `deepthonk://runs/{run_id}/prompts/{sha256}` — verified content-addressed rendered prompt (JSON).
216
+ - `deepthonk://runs/{run_id}/trace-v2` — bounded phase index; follow its manifest, commit, checkpoint-index, and checkpoint URIs to inspect every receipt.
212
217
  - `deepthonk://jobs/{job_id}/{status|result|config|candidates|comparisons|scores|usage|trace|final|winner}?run_dir=...` — job-scoped lookup; the `run_dir` query param is required.
213
218
  - `deepthonk://jobs/{job_id}/population/{generation}?run_dir=...` — job-scoped population snapshots before or after completion.
219
+ - Job results also include `prompt_template` and `trace_v2_template` for the job-scoped equivalents.
220
+ - `deepthonk://runs/{run_id}/{resource}/page/{cursor}` and job equivalents — opaque bounded pages. Whole reads are limited to 1 MiB; pages contain at most 1,000 records and 1 MiB.
214
221
 
215
222
  ### Prompts
216
223
 
@@ -218,7 +225,7 @@ Four templates mirror the core loop: `deepthonk/generate`, `deepthonk/compare`,
218
225
 
219
226
  ### Limits
220
227
 
221
- `deepthonk.resume` reports trace state by default. With `continue: true`, it validates the stored config/version/provider, prunes to the last completed phase boundary, and replays from there without reusing partial in-flight outputs. The HTTP transport is loopback-only by design. MCP Sampling depends on the host's sampling implementation; model hints are preferences, token usage may be unavailable, and sampling concurrency is capped at 4.
228
+ `deepthonk.resume` reports trace state by default. With `continue: true`, it validates phase order, artifacts, run/provider/model identity, scores, usage, deterministic pair schedules, trace-v2 receipts, and phase commits. Valid incomplete-phase receipts are reused without another provider call. MCP Sampling model hints are preferences and token usage may be unavailable. Its shared adaptive limiter starts at 4; direct providers start at 8.
222
229
 
223
230
  ## Customization
224
231
 
@@ -229,6 +236,10 @@ Every algorithm dimension is reachable through MCP arguments and CLI flags:
229
236
  - **Prompt style**: `general` or `paper-programming`.
230
237
  - **Per-phase prompt templates**: override `generate`, `compare`, `mutate`, or `finalize` with custom system/user templates and variable substitution (`{task}`, `{rubric}`, `{candidate}`, `{candidateA}`, `{candidateB}`, `{critique}`). CLI supports `--prompts <yaml>` and `--prompts-json <json>`; MCP supports inline `prompts`. Unknown variables throw a fail-fast error at run-start.
231
238
  - **Concurrency**: per-phase caps for `generate`, `judge`, `mutate`.
239
+ - **Provider backpressure**: `provider_max_concurrency` sets the recovery ceiling for the shared adaptive provider-route limiter.
240
+ - **Per-call output bounds**: independent generation, mutation, judge, and finalizer token caps.
241
+ - **Final ranking schedule**: seeded `all-pairs` or `k-regular`, with an explicit logical call cap.
242
+ - **Critique bound**: deterministic deduplication and a configurable aggregate-character cap before mutation.
232
243
 
233
244
  Example agent call (MCP), no YAML file required:
234
245
 
@@ -266,18 +277,22 @@ runs/{run_id}/
266
277
  usage.jsonl
267
278
  population-0.json
268
279
  population-{generation}.json
280
+ manifests/*.json
281
+ checkpoints/*/*.json
282
+ commits/*.json
269
283
  summary.json
270
284
  artifacts/winner.txt
271
285
  artifacts/final.txt
286
+ artifacts/prompts/<sha256>.json # only when prompt capture is enabled
272
287
  ```
273
288
 
274
289
  `status.json` is written when the run is launched through MCP `deepthonk.start` (so async clients can poll). `cancel.json` is written only when cancellation is requested. A `run.lock` file is held for the duration of the run.
275
290
 
276
- JSONL writes are streamed as each candidate / comparison / call completes, and all appends go through a per-trace serialization queue. If a run is killed mid-tournament, completed pairs are durable on disk and the JSONL files remain readable.
291
+ Trace rows are batch-appended through a single writer and flushed before lifecycle boundaries. Per-item output and usage receipts are written atomically before a phase commit. If a run is killed mid-tournament, trace-v2 resume validates and reuses completed receipts, re-materializes their JSONL rows, and calls the provider only for missing or invalid work.
277
292
 
278
293
  `usage.jsonl` carries one row per provider call (generator, judge, mutator, finalizer) with phase/role/provider/model/token/USD/latency/retry. It contains no prompt content. `jq` over `usage.jsonl` is the simplest way to break a run's cost down by role.
279
294
 
280
- Prompts and raw model outputs are off by default. API keys are never written. Candidate answers, critiques, scores, and final artifacts are trace data and are stored/exported by design, so do not use a shared run directory for sensitive tasks unless that is acceptable.
295
+ Prompts and raw model outputs are off by default. When prompt capture is enabled, candidate/comparison rows carry a `promptRef` and identical rendered prompts share one content-addressed blob under `artifacts/prompts/`; the full prompt is not repeated in every JSONL row or receipt. API keys are never written. Candidate answers, critiques, scores, and final artifacts are trace data and are stored/exported by design, so do not use a shared run directory for sensitive tasks unless that is acceptable.
281
296
 
282
297
  ## Development
283
298
 
@@ -294,8 +309,8 @@ Release publishing is tag-triggered through npm Trusted Publishing. See [docs/re
294
309
 
295
310
  Known limits for this release:
296
311
 
297
- - Conservative resume reports trace state by default; replay requires an explicit `--continue` / MCP `continue: true` and only starts from validated phase boundaries.
298
- - MCP Sampling is MCP-host-only. Standalone CLI runs need a direct provider.
312
+ - Trace-v1 resume replays an interrupted phase wholesale; per-item reuse requires a trace-v2 run created by DeepThonk v0.2.
313
+ - HTTP Sampling is blocking-only. Use stdio or a direct provider for background `deepthonk.start` work.
299
314
  - `maxUsd` requires known model pricing; add explicit prices in YAML for custom providers and model IDs. Optional fields `longContextThresholdTokens`, `inputUsdPerMillionLong`, and `outputUsdPerMillionLong` enable tiered pricing for models with a long-context surcharge (e.g., Gemini at 200K input tokens). Cache hit/miss rates remain flat.
300
315
 
301
316
  ## Acknowledgments
package/dist/artifacts.js CHANGED
@@ -1,5 +1,8 @@
1
- import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { link, mkdir, readFile, readdir, realpath, rename, unlink, writeFile } from "node:fs/promises";
3
+ import { hostname } from "node:os";
2
4
  import { join } from "node:path";
5
+ import { ConfigError } from "./errors.js";
3
6
  export const runArtifactFiles = {
4
7
  config: "config.json",
5
8
  summary: "summary.json",
@@ -20,6 +23,8 @@ export const traceJsonlFiles = [
20
23
  runArtifactFiles.comparisons,
21
24
  runArtifactFiles.scores
22
25
  ];
26
+ const indexWriteQueues = new Map();
27
+ const indexLockWaitTimeoutMs = 5_000;
23
28
  export async function readRunArtifact(runDir, artifact) {
24
29
  return readFile(join(runDir, runArtifactFiles[artifact]), "utf8");
25
30
  }
@@ -40,6 +45,17 @@ export async function exportRun(runDir, format) {
40
45
  return { markdown: `# DeepThonk Run ${summary.run_id}\n\nWinner: ${summary.winner_id}\n\nCalls: ${summary.calls}\n\n## Final Answer\n\n${final}` };
41
46
  }
42
47
  export async function detectResumeState(runDir) {
48
+ const status = await readStatusArtifact(runDir);
49
+ if (await runLockExists(runDir)) {
50
+ return {
51
+ status: "running",
52
+ message: "Run lock is still held; terminal artifacts are not safe to report until the owner releases it.",
53
+ run_id: status?.run_id,
54
+ phase: status?.phase,
55
+ generation: status?.generation,
56
+ safe_to_continue: false
57
+ };
58
+ }
43
59
  try {
44
60
  const summary = await readRunSummary(runDir);
45
61
  return {
@@ -50,7 +66,6 @@ export async function detectResumeState(runDir) {
50
66
  };
51
67
  }
52
68
  catch {
53
- const status = await readStatusArtifact(runDir);
54
69
  if (status) {
55
70
  if ((status.state === "running" || status.state === "pending") && isLiveWorker(status.worker_pid)) {
56
71
  return {
@@ -103,6 +118,15 @@ export async function detectResumeState(runDir) {
103
118
  }
104
119
  }
105
120
  }
121
+ async function runLockExists(runDir) {
122
+ try {
123
+ await readFile(join(runDir, runArtifactFiles.lock), "utf8");
124
+ return true;
125
+ }
126
+ catch (error) {
127
+ return error.code !== "ENOENT";
128
+ }
129
+ }
106
130
  async function readStatusArtifact(runDir) {
107
131
  try {
108
132
  return JSON.parse(await readRunArtifact(runDir, "status"));
@@ -118,8 +142,8 @@ function isLiveWorker(pid) {
118
142
  process.kill(pid, 0);
119
143
  return true;
120
144
  }
121
- catch {
122
- return false;
145
+ catch (error) {
146
+ return error.code !== "ESRCH";
123
147
  }
124
148
  }
125
149
  function resumeMessage(status) {
@@ -187,10 +211,142 @@ export async function listRunRecords(runsRoot = "runs") {
187
211
  }
188
212
  export async function recordRunIndex(runId, runDir, runsRoot = "runs") {
189
213
  await mkdir(runsRoot, { recursive: true });
190
- await writeFile(join(runsRoot, "index.jsonl"), `${JSON.stringify({ run_id: runId, run_dir: runDir })}\n`, {
191
- encoding: "utf8",
192
- flag: "a"
214
+ const canonicalRoot = await realpath(runsRoot);
215
+ const path = join(canonicalRoot, "index.jsonl");
216
+ const previous = indexWriteQueues.get(path) ?? Promise.resolve();
217
+ const next = previous.catch(() => undefined).then(async () => {
218
+ const lock = await acquireIndexLock(canonicalRoot);
219
+ try {
220
+ const existing = (await readRunIndexEntries(canonicalRoot)).filter((entry) => entry.run_id === runId);
221
+ const conflict = existing.find((entry) => entry.run_dir && entry.run_dir !== runDir);
222
+ if (conflict) {
223
+ throw new ConfigError(`Run ID ${runId} is already indexed at ${conflict.run_dir}; refusing to remap it to ${runDir}.`, {
224
+ code: "run.index_conflict",
225
+ retryable: false,
226
+ fix: "Choose a unique run ID or use the already indexed run directory."
227
+ });
228
+ }
229
+ if (existing.some((entry) => entry.run_dir === runDir))
230
+ return;
231
+ await writeFile(path, `${JSON.stringify({ run_id: runId, run_dir: runDir })}\n`, {
232
+ encoding: "utf8",
233
+ flag: "a"
234
+ });
235
+ }
236
+ finally {
237
+ await releaseIndexLock(lock);
238
+ }
193
239
  });
240
+ indexWriteQueues.set(path, next);
241
+ try {
242
+ await next;
243
+ }
244
+ finally {
245
+ if (indexWriteQueues.get(path) === next)
246
+ indexWriteQueues.delete(path);
247
+ }
248
+ }
249
+ async function acquireIndexLock(runsRoot) {
250
+ const path = join(runsRoot, "index.jsonl.lock");
251
+ const deadline = Date.now() + indexLockWaitTimeoutMs;
252
+ while (true) {
253
+ const owner = {
254
+ schema_version: 1,
255
+ claim_id: randomUUID(),
256
+ hostname: hostname(),
257
+ worker_pid: process.pid,
258
+ claimed_at: new Date().toISOString()
259
+ };
260
+ const raw = `${JSON.stringify(owner)}\n`;
261
+ try {
262
+ await writeFile(path, raw, { encoding: "utf8", flag: "wx" });
263
+ return { path, claimId: owner.claim_id, fingerprint: fingerprint(raw) };
264
+ }
265
+ catch (error) {
266
+ if (error.code !== "EEXIST")
267
+ throw error;
268
+ const observed = await readFile(path, "utf8").catch(() => undefined);
269
+ const stale = observed ? parseIndexLockOwner(observed) : undefined;
270
+ if (observed && stale?.hostname === hostname() && !isLivePid(stale.worker_pid)) {
271
+ await quarantineStaleIndexLock(path, observed);
272
+ continue;
273
+ }
274
+ if (Date.now() >= deadline) {
275
+ throw new ConfigError("Timed out waiting for the run index writer lock.", {
276
+ code: "run.index_locked",
277
+ retryable: true,
278
+ fix: "Retry after the active index writer finishes; inspect index.jsonl.lock if its owner crashed."
279
+ });
280
+ }
281
+ await new Promise((resolve) => setTimeout(resolve, 5));
282
+ }
283
+ }
284
+ }
285
+ async function releaseIndexLock(claim) {
286
+ const raw = await readFile(claim.path, "utf8").catch(() => undefined);
287
+ const owner = raw ? parseIndexLockOwner(raw) : undefined;
288
+ if (!raw || fingerprint(raw) !== claim.fingerprint || owner?.claim_id !== claim.claimId) {
289
+ throw new ConfigError("Run index writer lock ownership changed before release.", {
290
+ code: "run.index_lock_not_owned",
291
+ retryable: true
292
+ });
293
+ }
294
+ await unlink(claim.path);
295
+ }
296
+ async function quarantineStaleIndexLock(path, observed) {
297
+ const quarantine = `${path}.stale-${randomUUID()}`;
298
+ try {
299
+ await rename(path, quarantine);
300
+ }
301
+ catch (error) {
302
+ if (error.code === "ENOENT")
303
+ return;
304
+ throw error;
305
+ }
306
+ const moved = await readFile(quarantine, "utf8").catch(() => undefined);
307
+ if (moved && fingerprint(moved) === fingerprint(observed)) {
308
+ await unlink(quarantine).catch(() => undefined);
309
+ return;
310
+ }
311
+ if (moved) {
312
+ try {
313
+ await link(quarantine, path);
314
+ }
315
+ catch (error) {
316
+ if (error.code !== "EEXIST")
317
+ throw error;
318
+ }
319
+ }
320
+ await unlink(quarantine).catch(() => undefined);
321
+ }
322
+ function parseIndexLockOwner(raw) {
323
+ try {
324
+ const value = JSON.parse(raw);
325
+ if (value.schema_version === 1 &&
326
+ typeof value.claim_id === "string" &&
327
+ typeof value.hostname === "string" &&
328
+ typeof value.worker_pid === "number" &&
329
+ Number.isInteger(value.worker_pid) &&
330
+ typeof value.claimed_at === "string") {
331
+ return value;
332
+ }
333
+ }
334
+ catch {
335
+ // Malformed locks require explicit operator inspection.
336
+ }
337
+ return undefined;
338
+ }
339
+ function fingerprint(raw) {
340
+ return createHash("sha256").update(raw).digest("hex");
341
+ }
342
+ function isLivePid(pid) {
343
+ try {
344
+ process.kill(pid, 0);
345
+ return true;
346
+ }
347
+ catch (error) {
348
+ return error.code !== "ESRCH";
349
+ }
194
350
  }
195
351
  async function readRunIndex(runId, runsRoot) {
196
352
  const entries = await readRunIndexEntries(runsRoot);
@@ -199,10 +355,21 @@ async function readRunIndex(runId, runsRoot) {
199
355
  async function readRunIndexEntries(runsRoot) {
200
356
  try {
201
357
  const text = await readFile(join(runsRoot, "index.jsonl"), "utf8");
202
- return text
203
- .split("\n")
204
- .filter(Boolean)
205
- .map((line) => JSON.parse(line));
358
+ const entries = [];
359
+ for (const line of text.split("\n")) {
360
+ if (!line)
361
+ continue;
362
+ try {
363
+ const entry = JSON.parse(line);
364
+ if (typeof entry.run_id === "string" && typeof entry.run_dir === "string") {
365
+ entries.push({ run_id: entry.run_id, run_dir: entry.run_dir });
366
+ }
367
+ }
368
+ catch {
369
+ // A malformed row must not hide valid records before or after it.
370
+ }
371
+ }
372
+ return entries;
206
373
  }
207
374
  catch {
208
375
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import type { BtScore, Candidate, Comparison } from "./schemas.js";
2
2
  export declare function fitBradleyTerry(candidates: Candidate[] | string[], comparisons: Comparison[], lambda?: number, generation?: number | "final"): BtScore[];
3
+ export declare function canonicalizeComparisons(comparisons: readonly Comparison[]): Comparison[];
@@ -11,7 +11,12 @@ export function fitBradleyTerry(candidates, comparisons, lambda = 0.01, generati
11
11
  comparisons: 0
12
12
  }
13
13
  ]));
14
- for (const comparison of comparisons) {
14
+ // Trace rows are appended in provider completion order, which is intentionally
15
+ // nondeterministic under concurrency. Floating-point summation is order
16
+ // sensitive, so canonicalize before fitting to make live and replayed scores
17
+ // byte-for-byte stable.
18
+ const canonicalComparisons = canonicalizeComparisons(comparisons);
19
+ for (const comparison of canonicalComparisons) {
15
20
  const a = comparison.presentedAOriginalId;
16
21
  const b = comparison.presentedBOriginalId;
17
22
  const i = index.get(a);
@@ -219,7 +224,27 @@ function vectorNorm(values) {
219
224
  return Math.sqrt(total);
220
225
  }
221
226
  function finite(value) {
222
- return Number.isFinite(value) ? value : 0;
227
+ return Number.isFinite(value) && !Object.is(value, -0) ? value : 0;
228
+ }
229
+ export function canonicalizeComparisons(comparisons) {
230
+ return [...comparisons].sort(compareComparisons);
231
+ }
232
+ function compareComparisons(left, right) {
233
+ const leftKey = JSON.stringify([
234
+ left.id,
235
+ left.presentedAOriginalId,
236
+ left.presentedBOriginalId,
237
+ left.winner,
238
+ left.generation
239
+ ]);
240
+ const rightKey = JSON.stringify([
241
+ right.id,
242
+ right.presentedAOriginalId,
243
+ right.presentedBOriginalId,
244
+ right.winner,
245
+ right.generation
246
+ ]);
247
+ return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
223
248
  }
224
249
  function inferGeneration(comparisons) {
225
250
  return comparisons[0]?.generation ?? "final";
@@ -1 +1 @@
1
- {"version":3,"file":"bradleyTerry.js","sourceRoot":"","sources":["../src/bradleyTerry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bradleyTerry.js","sourceRoot":"","sources":["../src/bradleyTerry.ts"],"names":[],"mappings":"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"}
package/dist/budget.d.ts CHANGED
@@ -6,9 +6,15 @@ export interface BudgetPlan {
6
6
  per_generation_judge_calls: number;
7
7
  per_generation_mutate_calls: number;
8
8
  final_judge_calls: number;
9
+ finalizer_calls: number;
10
+ invalid_json_retry_headroom_calls: number;
11
+ worst_case_calls: number;
9
12
  sequential_rounds: number;
10
13
  warnings: string[];
11
14
  }
12
15
  export declare function getProfile(profile: BuiltInProfileName | Profile): Profile;
13
16
  export declare function validateProfile(profile: Profile): void;
14
- export declare function planBudget(profileInput: BuiltInProfileName | Profile): BudgetPlan;
17
+ export declare function planBudget(profileInput: BuiltInProfileName | Profile, options?: {
18
+ invalidJsonRetries?: number;
19
+ includeFinalizer?: boolean;
20
+ }): BudgetPlan;
package/dist/budget.js CHANGED
@@ -18,7 +18,7 @@ export function validateProfile(profile) {
18
18
  if ((profile.n * profile.m) % 2 !== 0)
19
19
  throw new ConfigError(`Profile invalid: n*m must be even, got ${profile.n * profile.m}.`);
20
20
  }
21
- export function planBudget(profileInput) {
21
+ export function planBudget(profileInput, options = {}) {
22
22
  const profile = getProfile(profileInput);
23
23
  validateProfile(profile);
24
24
  const profileName = typeof profileInput === "string" ? profileInput : "custom";
@@ -27,6 +27,8 @@ export function planBudget(profileInput) {
27
27
  const perGenerationJudge = (profile.n * profile.k) / 2;
28
28
  const finalJudge = (profile.n * profile.m) / 2;
29
29
  const calls = profile.n + profile.t * (perGenerationJudge + mutateCount) + finalJudge;
30
+ const finalizerCalls = options.includeFinalizer ? 1 : 0;
31
+ const invalidJsonRetryHeadroom = (profile.t * perGenerationJudge + finalJudge) * (options.invalidJsonRetries ?? 0);
30
32
  return {
31
33
  profile: profileName,
32
34
  calls,
@@ -34,6 +36,9 @@ export function planBudget(profileInput) {
34
36
  per_generation_judge_calls: perGenerationJudge,
35
37
  per_generation_mutate_calls: mutateCount,
36
38
  final_judge_calls: finalJudge,
39
+ finalizer_calls: finalizerCalls,
40
+ invalid_json_retry_headroom_calls: invalidJsonRetryHeadroom,
41
+ worst_case_calls: calls + finalizerCalls + invalidJsonRetryHeadroom,
37
42
  sequential_rounds: 1 + profile.t * 2 + 1,
38
43
  warnings: calls >= 100 ? ["High call count; confirm provider cost limits before running."] : []
39
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAa/C,MAAM,UAAU,UAAU,CAAC,OAAqC;IAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,WAAW,CAAC,oBAAoB,OAAO,kCAAkC,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,uBAAuB,OAAO,CAAC,CAAC,0BAA0B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3H,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,uBAAuB,OAAO,CAAC,CAAC,0BAA0B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3H,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,0CAA0C,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACjI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,0CAA0C,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACnI,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAA0C;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC;IAC3C,MAAM,kBAAkB,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,kBAAkB,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC;IACtF,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,KAAK;QACL,sBAAsB,EAAE,OAAO,CAAC,CAAC;QACjC,0BAA0B,EAAE,kBAAkB;QAC9C,2BAA2B,EAAE,WAAW;QACxC,iBAAiB,EAAE,UAAU;QAC7B,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,CAAC,EAAE;KAChG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,20 @@
1
1
  import type { BudgetUsage, UsageDelta } from "./lifecycle.js";
2
2
  import type { ModelTextResult, RunConfig } from "./schemas.js";
3
+ export type CallReservation = symbol;
3
4
  export declare class BudgetTracker {
4
5
  private readonly config;
5
6
  readonly usage: BudgetUsage;
6
7
  private readonly prices;
8
+ private readonly callReservations;
7
9
  constructor(config: RunConfig);
10
+ reserveCall(phase: string): CallReservation;
11
+ releaseCall(reservation: CallReservation): void;
12
+ failCall(reservation: CallReservation): UsageDelta;
8
13
  record(result: ModelTextResult, fallback?: {
9
14
  provider?: string;
10
15
  model: string;
11
16
  calls?: number;
12
- }): UsageDelta;
17
+ }, reservation?: CallReservation): UsageDelta;
13
18
  assertWithinBudget(phase: string): void;
14
19
  private requirePrice;
15
20
  private findPrice;