@deepthonk/core 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/budgetTracker.js +14 -0
- package/dist/budgetTracker.js.map +1 -1
- package/dist/lifecycle.d.ts +1 -0
- package/dist/lifecycle.js +15 -1
- package/dist/lifecycle.js.map +1 -1
- package/dist/resume.d.ts +51 -0
- package/dist/resume.js +355 -0
- package/dist/resume.js.map +1 -0
- package/dist/runner.d.ts +38 -2
- package/dist/runner.js +406 -51
- package/dist/runner.js.map +1 -1
- package/dist/schemas.d.ts +25 -0
- package/dist/schemas.js +15 -0
- package/dist/schemas.js.map +1 -1
- package/dist/services.js +13 -6
- package/dist/services.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -111,6 +111,8 @@ 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.
|
|
115
|
+
|
|
114
116
|
### Claude Code
|
|
115
117
|
|
|
116
118
|
```bash
|
|
@@ -211,7 +213,7 @@ Four templates mirror the core loop: `deepthonk/generate`, `deepthonk/compare`,
|
|
|
211
213
|
|
|
212
214
|
### Limits
|
|
213
215
|
|
|
214
|
-
|
|
216
|
+
`deepthonk.resume` reports trace state and safe phase boundaries but does not replay interrupted runs. 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.
|
|
215
217
|
|
|
216
218
|
## Customization
|
|
217
219
|
|
|
@@ -241,7 +243,7 @@ Example agent call (MCP), no YAML file required:
|
|
|
241
243
|
|
|
242
244
|
CLI accepts the same surface. Use `--prompts <yaml>` for reusable prompt files or `--prompts-json <json>` for one-off inline overrides. MCP and CLI both merge over any `--config`/`config_path` YAML defaults.
|
|
243
245
|
|
|
244
|
-
Save reusable bundles as **named profiles** at `~/.config/deepthonk/profiles/<name>.yaml` and load them with `--profile-name <name>` (CLI) or `profile_name: "<name>"` (MCP). A named profile is a standalone bundle that replaces the main config file for that run; CLI flags and MCP inline arguments still override fields inside it. See `examples/profiles/legal-drafting.yaml` for the shape.
|
|
246
|
+
Save reusable bundles as **named profiles** at `~/.config/deepthonk/profiles/<name>.yaml` and load them with `--profile-name <name>` (CLI) or `profile_name: "<name>"` (MCP). A named profile is a standalone bundle that replaces the main config file for that run; CLI flags and MCP inline arguments still override fields inside it. See `examples/profiles/legal-drafting.yaml` for the shape. The [Customization guide](https://github.com/linxule/deepthonk/blob/main/docs/customization.md#managing-named-profiles) covers listing, showing, saving, and deleting named profiles from both CLI and MCP.
|
|
245
247
|
|
|
246
248
|
See the [Customization guide](https://github.com/linxule/deepthonk/blob/main/docs/customization.md) for the complete variable contract, the compare-phase JSON safety rule, the named-profile schema, and three worked examples. Per-role provider routing (`providers.judge.provider = openrouter`) and per-model pricing remain YAML-only — they're nested structured config, not inline ergonomics.
|
|
247
249
|
|
|
@@ -284,7 +286,7 @@ This repository is source-only. Generated run traces, paper notes, build output,
|
|
|
284
286
|
Known limits for this release:
|
|
285
287
|
|
|
286
288
|
- Conservative resume reports trace state and safe phase boundaries, but does not replay interrupted runs yet.
|
|
287
|
-
- MCP Sampling is
|
|
289
|
+
- MCP Sampling is MCP-host-only. Standalone CLI runs need a direct provider.
|
|
288
290
|
- `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.
|
|
289
291
|
|
|
290
292
|
## Acknowledgments
|
package/dist/budgetTracker.js
CHANGED
|
@@ -13,6 +13,20 @@ export class BudgetTracker {
|
|
|
13
13
|
fix: "Add budget.prices entries with inputUsdPerMillion and outputUsdPerMillion, or remove maxUsd."
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
+
if (config.provider === "sampling") {
|
|
17
|
+
const samplingTokenCaps = {
|
|
18
|
+
maxInputTokens: config.budget?.maxInputTokens,
|
|
19
|
+
maxOutputTokens: config.budget?.maxOutputTokens,
|
|
20
|
+
maxUsd: config.budget?.maxUsd
|
|
21
|
+
};
|
|
22
|
+
const caps = Object.entries(samplingTokenCaps).filter(([, value]) => value !== undefined).map(([key]) => key);
|
|
23
|
+
if (caps.length > 0) {
|
|
24
|
+
throw new ConfigError(`MCP Sampling provider does not report token usage; ${caps.join(", ")} cannot be enforced reliably.`, {
|
|
25
|
+
code: "budget.tokens_unreported_unsupported",
|
|
26
|
+
fix: "Remove the listed token/USD budget caps, or switch to a direct provider mode that reports token usage."
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
16
30
|
}
|
|
17
31
|
record(result, fallback = { model: "unknown" }) {
|
|
18
32
|
const calls = fallback.calls ?? 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budgetTracker.js","sourceRoot":"","sources":["../src/budgetTracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"budgetTracker.js","sourceRoot":"","sources":["../src/budgetTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,MAAM,OAAO,aAAa;IAIK;IAHpB,KAAK,GAAgB,UAAU,EAAE,CAAC;IAC1B,MAAM,CAAU;IAEjC,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,WAAW,CAAC,8CAA8C,EAAE;gBACpE,IAAI,EAAE,sBAAsB;gBAC5B,GAAG,EAAE,8FAA8F;aACpG,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG;gBACxB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc;gBAC7C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe;gBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM;aAC9B,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9G,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,WAAW,CAAC,sDAAsD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE;oBAC1H,IAAI,EAAE,sCAAsC;oBAC5C,GAAG,EAAE,wGAAwG;iBAC9G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAuB,EAAE,WAAiE,EAAE,KAAK,EAAE,SAAS,EAAE;QACnH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC,CAAC;QACnE,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,EAAE,oBAAoB,IAAI,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;QAC5F,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,WAAW,GAAG,YAAY,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,mBAAmB,CAAC;QAClJ,IAAI,MAAM,CAAC,KAAK,EAAE,oBAAoB,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC;QACtJ,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,QAA4B,CAAC;QACjC,IAAI,SAA6B,CAAC;QAClC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjF,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE;gBACjC,WAAW;gBACX,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,mBAAmB;gBACtD,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,oBAAoB;aACzD,CAAC,CAAC;YACH,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC3E,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC;QAChE,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO;YACL,KAAK;YACL,WAAW;YACX,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,mBAAmB;YACtD,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,oBAAoB;YACxD,YAAY;YACZ,WAAW;YACX,QAAQ;YACR,SAAS;YACT,GAAG,EAAE,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS;SAC1F,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAAa;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,MAAM,CAAC,QAAQ,GAAG,EAAE;gBACxH,IAAI,EAAE,uBAAuB;gBAC7B,GAAG,EAAE,0CAA0C;aAChD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1F,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,KAAK,kBAAkB,IAAI,CAAC,KAAK,CAAC,WAAW,qBAAqB,MAAM,CAAC,cAAc,GAAG,EAAE;gBACjJ,IAAI,EAAE,8BAA8B;gBACpC,GAAG,EAAE,qEAAqE;aAC3E,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7F,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,KAAK,mBAAmB,IAAI,CAAC,KAAK,CAAC,YAAY,sBAAsB,MAAM,CAAC,eAAe,GAAG,EAAE;gBACrJ,IAAI,EAAE,+BAA+B;gBACrC,GAAG,EAAE,sEAAsE;aAC5E,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACzE,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,KAAK,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,GAAG,EAAE;gBAC5I,IAAI,EAAE,qBAAqB;gBAC3B,GAAG,EAAE,6DAA6D;aACnE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,KAAa;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACrF,MAAM,IAAI,WAAW,CAAC,6CAA6C,QAAQ,IAAI,KAAK,GAAG,EAAE;gBACvF,IAAI,EAAE,sBAAsB;gBAC5B,GAAG,EAAE,uEAAuE;aAC7E,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS,CAAC,QAAgB,EAAE,KAAa;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC3F,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,KAAY,EAAE,KAA2F;IACjI,6FAA6F;IAC7F,6FAA6F;IAC7F,+GAA+G;IAC/G,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACxF,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC;QAC7H,OAAO,GAAG,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC;QAClD,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,WAAmB;IACtD,OAAO,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;QACtC,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,WAAmB;IACtD,IAAI,KAAK,CAAC,0BAA0B,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,KAAK,CAAC,sBAAsB,KAAK,SAAS,IAAI,KAAK,CAAC,uBAAuB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5G,OAAO,WAAW,GAAG,KAAK,CAAC,0BAA0B,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY;IACvC,OAAO,CACL,KAAK,CAAC,kBAAkB,KAAK,SAAS;QACtC,KAAK,CAAC,2BAA2B,KAAK,SAAS;QAC/C,KAAK,CAAC,0BAA0B,KAAK,SAAS,CAC/C,CAAC;AACJ,CAAC"}
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export interface RunStatus {
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
export declare function claimRunLock(runDir: string, jobId?: string): Promise<boolean>;
|
|
31
|
+
export declare function releaseRunLock(runDir: string): Promise<void>;
|
|
31
32
|
export declare function readRunStatus(runDir: string): Promise<RunStatus | undefined>;
|
|
32
33
|
export declare function requestRunCancel(runDir: string): Promise<void>;
|
|
33
34
|
export declare function isRunCancelRequested(runDir: string): Promise<boolean>;
|
package/dist/lifecycle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { runArtifactFiles } from "./artifacts.js";
|
|
4
4
|
import { ConfigError } from "./errors.js";
|
|
@@ -18,6 +18,20 @@ export async function claimRunLock(runDir, jobId) {
|
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
export async function releaseRunLock(runDir) {
|
|
22
|
+
try {
|
|
23
|
+
await unlink(join(runDir, runArtifactFiles.lock));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === "ENOENT")
|
|
27
|
+
return;
|
|
28
|
+
throw new ConfigError(`Could not release run directory lock: ${error.message}`, {
|
|
29
|
+
code: "run.lock_release_failed",
|
|
30
|
+
retryable: false,
|
|
31
|
+
fix: "Inspect the run directory lock file and permissions."
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
21
35
|
export async function readRunStatus(runDir) {
|
|
22
36
|
try {
|
|
23
37
|
return JSON.parse(await readFile(join(runDir, runArtifactFiles.status), "utf8"));
|
package/dist/lifecycle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/resume.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BudgetTracker } from "./budgetTracker.js";
|
|
2
|
+
import type { RunStatus, UsageRecord } from "./lifecycle.js";
|
|
3
|
+
import type { BtScore, Candidate, Comparison, PhaseName, RunConfig } from "./schemas.js";
|
|
4
|
+
export declare const pruneSentinelFile = ".prune-in-progress";
|
|
5
|
+
export interface ResumeTrace {
|
|
6
|
+
events: Array<Record<string, unknown>>;
|
|
7
|
+
candidates: Candidate[];
|
|
8
|
+
comparisons: Comparison[];
|
|
9
|
+
scores: BtScore[];
|
|
10
|
+
populations: Map<number, Candidate[]>;
|
|
11
|
+
usage: UsageRecord[];
|
|
12
|
+
}
|
|
13
|
+
export interface PhaseCursor {
|
|
14
|
+
phase: PhaseName | "summary";
|
|
15
|
+
generation?: number | "final";
|
|
16
|
+
}
|
|
17
|
+
export interface InternalResumePlan {
|
|
18
|
+
completed: Set<string>;
|
|
19
|
+
nextPhase: PhaseCursor;
|
|
20
|
+
}
|
|
21
|
+
export interface ResumePlanStatus {
|
|
22
|
+
status: "completed" | "resumable";
|
|
23
|
+
message: string;
|
|
24
|
+
run_id?: string;
|
|
25
|
+
run_dir: string;
|
|
26
|
+
phase?: PhaseName | "summary";
|
|
27
|
+
generation?: number | "final";
|
|
28
|
+
safe_to_continue: boolean;
|
|
29
|
+
plan?: {
|
|
30
|
+
next_phase: PhaseName | "summary";
|
|
31
|
+
generation?: number | "final";
|
|
32
|
+
completed_phases: Array<{
|
|
33
|
+
phase: PhaseName;
|
|
34
|
+
generation?: number;
|
|
35
|
+
}>;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export declare function readResumeTrace(runDir: string): Promise<ResumeTrace>;
|
|
39
|
+
export declare function resolveResumeRunId(config: RunConfig & {
|
|
40
|
+
run_id?: string;
|
|
41
|
+
}, status: RunStatus | undefined, events: Array<Record<string, unknown>>): string;
|
|
42
|
+
export declare function buildResumePlan(config: RunConfig, events: Array<Record<string, unknown>>): InternalResumePlan;
|
|
43
|
+
export declare function resumeConfigError(message: string, code: string, fix?: string): never;
|
|
44
|
+
export declare function toResumePlanStatus(runDir: string, runId: string, plan: InternalResumePlan): ResumePlanStatus;
|
|
45
|
+
export declare function pruneTraceToPlan(trace: ResumeTrace, plan: InternalResumePlan): ResumeTrace;
|
|
46
|
+
export declare function buildPopulationMap(config: RunConfig, populations: Map<number, Candidate[]>, candidates: Candidate[], plan: InternalResumePlan): Map<number, Candidate[]>;
|
|
47
|
+
export declare function groupComparisons(comparisons: Comparison[]): Map<number | "final", Comparison[]>;
|
|
48
|
+
export declare function reconstructScores(config: RunConfig, populationByGeneration: Map<number, Candidate[]>, comparisonsByGeneration: Map<number | "final", Comparison[]>, existingScores: BtScore[], plan: InternalResumePlan): Map<number | "final", BtScore[]>;
|
|
49
|
+
export declare function replayBudgetUsage(config: RunConfig, usage: UsageRecord[]): BudgetTracker;
|
|
50
|
+
export declare function persistPrunedTrace(runDir: string, pruned: ResumeTrace): Promise<void>;
|
|
51
|
+
export declare function assertNoPruneInProgress(runDir: string): void;
|
package/dist/resume.js
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readFile, readdir, rename, unlink, writeFile } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { runArtifactFiles } from "./artifacts.js";
|
|
6
|
+
import { fitBradleyTerry } from "./bradleyTerry.js";
|
|
7
|
+
import { BudgetTracker } from "./budgetTracker.js";
|
|
8
|
+
import { ConfigError } from "./errors.js";
|
|
9
|
+
import { phaseCompletedEventSchema } from "./schemas.js";
|
|
10
|
+
export const pruneSentinelFile = ".prune-in-progress";
|
|
11
|
+
export async function readResumeTrace(runDir) {
|
|
12
|
+
const files = await readdir(runDir).catch(() => []);
|
|
13
|
+
const populations = new Map();
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
const match = /^population-(\d+)\.json$/.exec(file);
|
|
16
|
+
if (!match)
|
|
17
|
+
continue;
|
|
18
|
+
populations.set(Number(match[1]), await readJson(runDir, file));
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
events: await readJsonl(runDir, runArtifactFiles.trace),
|
|
22
|
+
candidates: await readJsonl(runDir, runArtifactFiles.candidates),
|
|
23
|
+
comparisons: await readJsonl(runDir, runArtifactFiles.comparisons),
|
|
24
|
+
scores: await readJsonl(runDir, runArtifactFiles.scores),
|
|
25
|
+
populations,
|
|
26
|
+
usage: await readJsonl(runDir, runArtifactFiles.usage)
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function resolveResumeRunId(config, status, events) {
|
|
30
|
+
if (typeof config.run_id === "string")
|
|
31
|
+
return config.run_id;
|
|
32
|
+
if (typeof config.runId === "string")
|
|
33
|
+
return config.runId;
|
|
34
|
+
if (typeof status?.run_id === "string")
|
|
35
|
+
return status.run_id;
|
|
36
|
+
for (const event of events) {
|
|
37
|
+
if (event.type === "run.started" && typeof event.run_id === "string")
|
|
38
|
+
return event.run_id;
|
|
39
|
+
}
|
|
40
|
+
return `run_resume_${Math.abs(config.seed)}`;
|
|
41
|
+
}
|
|
42
|
+
export function buildResumePlan(config, events) {
|
|
43
|
+
const completed = new Set();
|
|
44
|
+
for (const event of events) {
|
|
45
|
+
const parsed = phaseCompletedEventSchema.safeParse(event);
|
|
46
|
+
if (!parsed.success)
|
|
47
|
+
continue;
|
|
48
|
+
completed.add(phaseKey(parsed.data.phase, parsed.data.generation));
|
|
49
|
+
}
|
|
50
|
+
if (!completed.has("initial_generation")) {
|
|
51
|
+
return { completed, nextPhase: { phase: "initial_generation" } };
|
|
52
|
+
}
|
|
53
|
+
for (let gen = 1; gen <= config.profile.t; gen += 1) {
|
|
54
|
+
if (!completed.has(phaseKey("generation_judging", gen))) {
|
|
55
|
+
return { completed, nextPhase: { phase: "generation_judging", generation: gen } };
|
|
56
|
+
}
|
|
57
|
+
if (!completed.has(phaseKey("generation_mutation", gen))) {
|
|
58
|
+
return { completed, nextPhase: { phase: "generation_mutation", generation: gen } };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!completed.has("final_judging"))
|
|
62
|
+
return { completed, nextPhase: { phase: "final_judging", generation: "final" } };
|
|
63
|
+
if (!completed.has("finalizing"))
|
|
64
|
+
return { completed, nextPhase: { phase: "finalizing", generation: "final" } };
|
|
65
|
+
return { completed, nextPhase: { phase: "summary" } };
|
|
66
|
+
}
|
|
67
|
+
export function resumeConfigError(message, code, fix) {
|
|
68
|
+
throw new ConfigError(message, { code, retryable: false, fix });
|
|
69
|
+
}
|
|
70
|
+
export function toResumePlanStatus(runDir, runId, plan) {
|
|
71
|
+
const completedPhases = completedPhaseEntries(plan.completed);
|
|
72
|
+
const done = plan.nextPhase.phase === "summary";
|
|
73
|
+
return {
|
|
74
|
+
status: done ? "completed" : "resumable",
|
|
75
|
+
message: done
|
|
76
|
+
? "Trace has all phase completion markers."
|
|
77
|
+
: `Run can resume from ${plan.nextPhase.phase}${plan.nextPhase.generation !== undefined ? `:${plan.nextPhase.generation}` : ""}.`,
|
|
78
|
+
run_id: runId,
|
|
79
|
+
run_dir: runDir,
|
|
80
|
+
phase: plan.nextPhase.phase,
|
|
81
|
+
generation: plan.nextPhase.generation,
|
|
82
|
+
safe_to_continue: !done,
|
|
83
|
+
plan: {
|
|
84
|
+
next_phase: plan.nextPhase.phase,
|
|
85
|
+
generation: plan.nextPhase.generation,
|
|
86
|
+
completed_phases: completedPhases
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function pruneTraceToPlan(trace, plan) {
|
|
91
|
+
const candidates = trace.candidates.filter((candidate) => keepCandidate(candidate, plan.completed));
|
|
92
|
+
const comparisons = trace.comparisons.filter((comparison) => plan.completed.has(phaseKeyForComparison(comparison)));
|
|
93
|
+
const scores = trace.scores.filter((score) => plan.completed.has(phaseKeyForScore(score)));
|
|
94
|
+
const candidateIds = new Set(candidates.map((candidate) => candidate.id));
|
|
95
|
+
const comparisonIds = new Set(comparisons.map((comparison) => comparison.id));
|
|
96
|
+
return {
|
|
97
|
+
events: trace.events.filter((event) => keepEvent(event, plan.completed, candidateIds, comparisonIds)),
|
|
98
|
+
candidates,
|
|
99
|
+
comparisons,
|
|
100
|
+
scores,
|
|
101
|
+
populations: new Map([...trace.populations].filter(([generation]) => keepPopulationGeneration(generation, plan.completed))),
|
|
102
|
+
usage: trace.usage.filter((record) => {
|
|
103
|
+
const key = usagePhaseKey(record.phase);
|
|
104
|
+
return key !== undefined && plan.completed.has(key);
|
|
105
|
+
})
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export function buildPopulationMap(config, populations, candidates, plan) {
|
|
109
|
+
const byId = new Set(candidates.filter((candidate) => candidate.status !== "discarded").map((candidate) => candidate.id));
|
|
110
|
+
const populationByGeneration = new Map();
|
|
111
|
+
for (const generation of requiredPopulationGenerations(config, plan.completed)) {
|
|
112
|
+
const population = populations.get(generation);
|
|
113
|
+
if (!population) {
|
|
114
|
+
resumeConfigError(`Resume trace is missing population-${generation}.json for a completed phase boundary.`, "resume.population_missing", "Restore the population snapshot or start a fresh run.");
|
|
115
|
+
}
|
|
116
|
+
if (population.length !== config.profile.n) {
|
|
117
|
+
resumeConfigError(`population-${generation}.json has ${population.length} candidates; expected ${config.profile.n}.`, "resume.population_invalid", "Inspect the run directory for a truncated or mixed trace.");
|
|
118
|
+
}
|
|
119
|
+
for (const candidate of population) {
|
|
120
|
+
if (!byId.has(candidate.id)) {
|
|
121
|
+
resumeConfigError(`population-${generation}.json references missing candidate ${candidate.id}.`, "resume.population_invalid", "Restore candidates.jsonl or start a fresh run.");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
populationByGeneration.set(generation, population);
|
|
125
|
+
}
|
|
126
|
+
return populationByGeneration;
|
|
127
|
+
}
|
|
128
|
+
export function groupComparisons(comparisons) {
|
|
129
|
+
const grouped = new Map();
|
|
130
|
+
for (const comparison of comparisons) {
|
|
131
|
+
const bucket = grouped.get(comparison.generation) ?? [];
|
|
132
|
+
bucket.push(comparison);
|
|
133
|
+
grouped.set(comparison.generation, bucket);
|
|
134
|
+
}
|
|
135
|
+
return grouped;
|
|
136
|
+
}
|
|
137
|
+
export function reconstructScores(config, populationByGeneration, comparisonsByGeneration, existingScores, plan) {
|
|
138
|
+
const scoresByGeneration = new Map();
|
|
139
|
+
for (let gen = 1; gen <= config.profile.t; gen += 1) {
|
|
140
|
+
if (!plan.completed.has(phaseKey("generation_judging", gen)))
|
|
141
|
+
continue;
|
|
142
|
+
const population = requirePopulation(populationByGeneration, gen - 1);
|
|
143
|
+
sanityCheckScores(existingScores, gen, population);
|
|
144
|
+
scoresByGeneration.set(gen, fitBradleyTerry(population, comparisonsByGeneration.get(gen) ?? [], config.profile.lambda, gen));
|
|
145
|
+
}
|
|
146
|
+
if (plan.completed.has("final_judging")) {
|
|
147
|
+
const population = requirePopulation(populationByGeneration, config.profile.t);
|
|
148
|
+
sanityCheckScores(existingScores, "final", population);
|
|
149
|
+
scoresByGeneration.set("final", fitBradleyTerry(population, comparisonsByGeneration.get("final") ?? [], config.profile.lambda, "final"));
|
|
150
|
+
}
|
|
151
|
+
return scoresByGeneration;
|
|
152
|
+
}
|
|
153
|
+
export function replayBudgetUsage(config, usage) {
|
|
154
|
+
const tracker = new BudgetTracker(config);
|
|
155
|
+
let hasUsd = false;
|
|
156
|
+
for (const record of usage) {
|
|
157
|
+
tracker.usage.calls += 1;
|
|
158
|
+
tracker.usage.inputTokens += record.input_tokens;
|
|
159
|
+
if (record.input_cache_hit_tokens !== undefined) {
|
|
160
|
+
tracker.usage.inputCacheHitTokens = (tracker.usage.inputCacheHitTokens ?? 0) + record.input_cache_hit_tokens;
|
|
161
|
+
}
|
|
162
|
+
if (record.input_cache_miss_tokens !== undefined) {
|
|
163
|
+
tracker.usage.inputCacheMissTokens = (tracker.usage.inputCacheMissTokens ?? 0) + record.input_cache_miss_tokens;
|
|
164
|
+
}
|
|
165
|
+
tracker.usage.outputTokens += record.output_tokens;
|
|
166
|
+
tracker.usage.totalTokens += record.total_tokens;
|
|
167
|
+
if (record.total_usd !== undefined) {
|
|
168
|
+
hasUsd = true;
|
|
169
|
+
tracker.usage.usd = (tracker.usage.usd ?? 0) + record.total_usd;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!hasUsd)
|
|
173
|
+
delete tracker.usage.usd;
|
|
174
|
+
return tracker;
|
|
175
|
+
}
|
|
176
|
+
export async function persistPrunedTrace(runDir, pruned) {
|
|
177
|
+
const sentinelPath = join(runDir, pruneSentinelFile);
|
|
178
|
+
await writeFile(sentinelPath, `${JSON.stringify({ pid: process.pid, started_at: new Date().toISOString() })}\n`, "utf8");
|
|
179
|
+
const rewrites = [
|
|
180
|
+
[runArtifactFiles.trace, pruned.events],
|
|
181
|
+
[runArtifactFiles.candidates, pruned.candidates],
|
|
182
|
+
[runArtifactFiles.comparisons, pruned.comparisons],
|
|
183
|
+
[runArtifactFiles.scores, pruned.scores],
|
|
184
|
+
[runArtifactFiles.usage, pruned.usage]
|
|
185
|
+
];
|
|
186
|
+
for (const [fileName, rows] of rewrites) {
|
|
187
|
+
await writeJsonlAtomic(runDir, fileName, rows);
|
|
188
|
+
}
|
|
189
|
+
await unlink(sentinelPath);
|
|
190
|
+
}
|
|
191
|
+
export function assertNoPruneInProgress(runDir) {
|
|
192
|
+
if (!existsSync(join(runDir, pruneSentinelFile)))
|
|
193
|
+
return;
|
|
194
|
+
resumeConfigError("A previous trace prune did not finish; refusing to resume from a partially rewritten trace.", "resume.prune_in_progress", `Inspect ${join(runDir, pruneSentinelFile)} and the JSONL artifacts before retrying.`);
|
|
195
|
+
}
|
|
196
|
+
function phaseKey(phase, generation) {
|
|
197
|
+
if ((phase === "generation_judging" || phase === "generation_mutation") && generation !== undefined) {
|
|
198
|
+
return `${phase}:${generation}`;
|
|
199
|
+
}
|
|
200
|
+
return phase;
|
|
201
|
+
}
|
|
202
|
+
function completedPhaseEntries(completed) {
|
|
203
|
+
return [...completed]
|
|
204
|
+
.map(parsePhaseKey)
|
|
205
|
+
.filter((entry) => entry !== undefined)
|
|
206
|
+
.sort((left, right) => phaseOrder(left.phase) - phaseOrder(right.phase) || (left.generation ?? 0) - (right.generation ?? 0));
|
|
207
|
+
}
|
|
208
|
+
function parsePhaseKey(key) {
|
|
209
|
+
const match = /^(generation_judging|generation_mutation):(\d+)$/.exec(key);
|
|
210
|
+
if (match)
|
|
211
|
+
return { phase: match[1], generation: Number(match[2]) };
|
|
212
|
+
if (key === "initial_generation" ||
|
|
213
|
+
key === "generation_judging" ||
|
|
214
|
+
key === "generation_mutation" ||
|
|
215
|
+
key === "final_judging" ||
|
|
216
|
+
key === "finalizing") {
|
|
217
|
+
return { phase: key };
|
|
218
|
+
}
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
function phaseOrder(phase) {
|
|
222
|
+
switch (phase) {
|
|
223
|
+
case "initial_generation":
|
|
224
|
+
return 0;
|
|
225
|
+
case "generation_judging":
|
|
226
|
+
return 1;
|
|
227
|
+
case "generation_mutation":
|
|
228
|
+
return 2;
|
|
229
|
+
case "final_judging":
|
|
230
|
+
return 3;
|
|
231
|
+
case "finalizing":
|
|
232
|
+
return 4;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function keepCandidate(candidate, completed) {
|
|
236
|
+
if (candidate.status === "discarded")
|
|
237
|
+
return completed.has(phaseKey("generation_mutation", candidate.generation + 1));
|
|
238
|
+
if (candidate.generation === 0)
|
|
239
|
+
return completed.has("initial_generation");
|
|
240
|
+
return completed.has(phaseKey("generation_mutation", candidate.generation));
|
|
241
|
+
}
|
|
242
|
+
function keepPopulationGeneration(generation, completed) {
|
|
243
|
+
if (generation === 0)
|
|
244
|
+
return completed.has("initial_generation");
|
|
245
|
+
return completed.has(phaseKey("generation_mutation", generation));
|
|
246
|
+
}
|
|
247
|
+
function keepEvent(event, completed, candidateIds, comparisonIds) {
|
|
248
|
+
const type = event.type;
|
|
249
|
+
if (typeof type !== "string")
|
|
250
|
+
return true;
|
|
251
|
+
if (type.startsWith("candidate.")) {
|
|
252
|
+
const candidateId = event.candidate_id;
|
|
253
|
+
return typeof candidateId !== "string" || candidateIds.has(candidateId);
|
|
254
|
+
}
|
|
255
|
+
if (type.startsWith("comparison.")) {
|
|
256
|
+
const comparisonId = event.comparison_id;
|
|
257
|
+
return typeof comparisonId !== "string" || comparisonIds.has(comparisonId);
|
|
258
|
+
}
|
|
259
|
+
if (type === "phase.completed") {
|
|
260
|
+
const parsed = phaseCompletedEventSchema.safeParse(event);
|
|
261
|
+
return !parsed.success || completed.has(phaseKey(parsed.data.phase, parsed.data.generation));
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
function phaseKeyForComparison(comparison) {
|
|
266
|
+
return comparison.generation === "final" ? "final_judging" : phaseKey("generation_judging", comparison.generation);
|
|
267
|
+
}
|
|
268
|
+
function phaseKeyForScore(score) {
|
|
269
|
+
return score.generation === "final" ? "final_judging" : phaseKey("generation_judging", score.generation);
|
|
270
|
+
}
|
|
271
|
+
function usagePhaseKey(phase) {
|
|
272
|
+
if (phase === "gen0_initial")
|
|
273
|
+
return "initial_generation";
|
|
274
|
+
if (phase === "final_judge")
|
|
275
|
+
return "final_judging";
|
|
276
|
+
if (phase === "finalize")
|
|
277
|
+
return "finalizing";
|
|
278
|
+
const judge = /^gen(\d+)_judge$/.exec(phase);
|
|
279
|
+
if (judge)
|
|
280
|
+
return phaseKey("generation_judging", Number(judge[1]));
|
|
281
|
+
const mutate = /^gen(\d+)_mutate$/.exec(phase);
|
|
282
|
+
if (mutate)
|
|
283
|
+
return phaseKey("generation_mutation", Number(mutate[1]));
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
function requiredPopulationGenerations(config, completed) {
|
|
287
|
+
const generations = [];
|
|
288
|
+
if (completed.has("initial_generation"))
|
|
289
|
+
generations.push(0);
|
|
290
|
+
for (let gen = 1; gen <= config.profile.t; gen += 1) {
|
|
291
|
+
if (completed.has(phaseKey("generation_mutation", gen)))
|
|
292
|
+
generations.push(gen);
|
|
293
|
+
}
|
|
294
|
+
return generations;
|
|
295
|
+
}
|
|
296
|
+
function requirePopulation(populationByGeneration, generation) {
|
|
297
|
+
const population = populationByGeneration.get(generation);
|
|
298
|
+
if (!population) {
|
|
299
|
+
resumeConfigError(`Cannot reconstruct scores without population generation ${generation}.`, "resume.population_missing", "Restore the population snapshot or start a fresh run.");
|
|
300
|
+
}
|
|
301
|
+
return population;
|
|
302
|
+
}
|
|
303
|
+
function sanityCheckScores(existingScores, generation, population) {
|
|
304
|
+
const ids = new Set(population.map((candidate) => candidate.id));
|
|
305
|
+
for (const score of existingScores) {
|
|
306
|
+
if (score.generation !== generation)
|
|
307
|
+
continue;
|
|
308
|
+
if (!ids.has(score.candidateId)) {
|
|
309
|
+
resumeConfigError(`scores.jsonl for generation ${generation} references unknown candidate ${score.candidateId}.`, "resume.scores_invalid", "Inspect the run directory for a mixed or corrupted trace.");
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
async function readJson(runDir, fileName) {
|
|
314
|
+
try {
|
|
315
|
+
return JSON.parse(await readFile(join(runDir, fileName), "utf8"));
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
resumeConfigError(`Could not read ${fileName}: ${error.message}`, "resume.trace_read_failed", "Inspect the run directory and file permissions.");
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
async function readJsonl(runDir, fileName) {
|
|
322
|
+
const path = join(runDir, fileName);
|
|
323
|
+
if (!existsSync(path))
|
|
324
|
+
return [];
|
|
325
|
+
const raw = await readFile(path, "utf8");
|
|
326
|
+
const lines = raw.split("\n").filter((line) => line.length > 0);
|
|
327
|
+
if (lines.length === 0)
|
|
328
|
+
return [];
|
|
329
|
+
const out = [];
|
|
330
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
331
|
+
try {
|
|
332
|
+
out.push(JSON.parse(lines[i]));
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
if (i === lines.length - 1) {
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
throw resumeConfigError(`Corrupted ${fileName} JSONL at line ${i + 1}: ${err.message}`, "resume.corrupted_trace", `Inspect ${path}; mid-file parse failures indicate non-recoverable trace corruption.`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return out;
|
|
342
|
+
}
|
|
343
|
+
async function writeJsonlAtomic(runDir, fileName, rows) {
|
|
344
|
+
const tempFile = join(runDir, `.${fileName}.${process.pid}.${randomUUID()}.tmp`);
|
|
345
|
+
const body = rows.length ? `${rows.map((row) => JSON.stringify(row)).join("\n")}\n` : "";
|
|
346
|
+
await writeFile(tempFile, body, "utf8");
|
|
347
|
+
try {
|
|
348
|
+
await rename(tempFile, join(runDir, fileName));
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
await unlink(tempFile).catch(() => undefined);
|
|
352
|
+
throw error;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -1,11 +1,47 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BudgetTracker } from "./budgetTracker.js";
|
|
2
|
+
import { type PhaseCursor } from "./resume.js";
|
|
3
|
+
import { type BtScore, type Candidate, type Comparison, type ModelDriver, type PhaseName, type RunConfig, type RunResult } from "./schemas.js";
|
|
2
4
|
export interface RunControl {
|
|
3
5
|
jobId?: string;
|
|
4
6
|
shouldCancel?: () => boolean | Promise<boolean>;
|
|
5
7
|
}
|
|
6
|
-
export
|
|
8
|
+
export interface ResumeDeepThonkOptions {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
provider?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ResumePlan {
|
|
13
|
+
status: "completed" | "resumable";
|
|
14
|
+
message: string;
|
|
15
|
+
run_id?: string;
|
|
16
|
+
run_dir: string;
|
|
17
|
+
phase?: PhaseName | "summary";
|
|
18
|
+
generation?: number | "final";
|
|
19
|
+
safe_to_continue: boolean;
|
|
20
|
+
summary?: Record<string, unknown>;
|
|
21
|
+
plan?: {
|
|
22
|
+
next_phase: PhaseName | "summary";
|
|
23
|
+
generation?: number | "final";
|
|
24
|
+
completed_phases: Array<{
|
|
25
|
+
phase: PhaseName;
|
|
26
|
+
generation?: number;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
interface ResumeState {
|
|
31
|
+
runId: string;
|
|
32
|
+
startedAt: string;
|
|
33
|
+
completed: Set<string>;
|
|
34
|
+
populationByGeneration: Map<number, Candidate[]>;
|
|
35
|
+
comparisonsByGeneration: Map<number | "final", Comparison[]>;
|
|
36
|
+
scoresByGeneration: Map<number | "final", BtScore[]>;
|
|
37
|
+
tracker: BudgetTracker;
|
|
38
|
+
nextPhase: PhaseCursor;
|
|
39
|
+
}
|
|
40
|
+
export declare function runDeepThonk(configInput: RunConfig, driver: ModelDriver, control?: RunControl, resumeState?: ResumeState): Promise<RunResult>;
|
|
41
|
+
export declare function resumeDeepThonk(runDir: string, driver: ModelDriver, options?: ResumeDeepThonkOptions): Promise<RunResult | ResumePlan>;
|
|
7
42
|
export declare function rankPopulation(population: Candidate[], scores: BtScore[]): Candidate[];
|
|
8
43
|
export declare function topQuartile(ranked: Candidate[]): Candidate[];
|
|
9
44
|
export declare function bottomQuartile(ranked: Candidate[]): Set<string>;
|
|
10
45
|
export declare function copyElites(elites: Candidate[], generation: number): Candidate[];
|
|
11
46
|
export declare function keepPopulationSize(population: Candidate[], n: number): Candidate[];
|
|
47
|
+
export {};
|