@deepthonk/providers 0.1.0 → 0.1.1

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
@@ -6,7 +6,7 @@ DeepThonk implements the OpenDeepThink algorithm (Zhou et al., 2026, [arXiv:2605
6
6
 
7
7
  DeepThonk runs a population of candidate answers through pairwise judging, Bradley-Terry ranking, critique-guided mutation, elite preservation, and a final dense ranking pass. The CLI and MCP server both call the same TypeScript core engine.
8
8
 
9
- **Designed for agents.** Every algorithm dimension — population shape (`n`, `k`, `t`, `m`), regularization (`lambda`), per-phase temperatures, prompt style, and per-phase prompt templates — is reachable inline through MCP arguments and CLI flags. No filesystem detours required. Every intermediate artifact (candidates, comparisons, scores, per-call usage, status) is exposed as a streaming MCP resource so an agent can inspect any step. See [Customization](https://github.com/linxule/deepthonk/blob/main/docs/customization.md) for the full agent-composable surface.
9
+ **Designed for agents.** Every algorithm dimension — population shape (`n`, `k`, `t`, `m`), regularization (`lambda`), per-phase temperatures, prompt style, and per-phase prompt templates — is reachable inline through MCP arguments and CLI flags. CLI can load prompt files with `--prompts` or inline JSON with `--prompts-json`; MCP accepts inline structured prompt args. Every intermediate artifact (config, candidates, populations, comparisons, scores, per-call usage, status) is exposed as an MCP resource so an agent can inspect any step. See [Customization](https://github.com/linxule/deepthonk/blob/main/docs/customization.md) for the full agent-composable surface.
10
10
 
11
11
  Use it for hard, verifiable reasoning, coding, planning, and synthesis where breadth plus judgment can beat one expensive single shot. Avoid it for highly subjective tasks where judge noise dominates.
12
12
 
@@ -198,7 +198,9 @@ All tools accept inline provider/model fields, or `config_path` pointing at a De
198
198
 
199
199
  - `deepthonk://runs` — JSON index of all runs in `runs/`.
200
200
  - `deepthonk://runs/{run_id}/summary` — run summary (JSON).
201
- - `deepthonk://runs/{run_id}/{candidates|comparisons|scores|trace}` — per-phase NDJSON.
201
+ - `deepthonk://runs/{run_id}/config` — redacted run config (JSON).
202
+ - `deepthonk://runs/{run_id}/{candidates|comparisons|scores|usage|trace}` — per-phase and per-call NDJSON.
203
+ - `deepthonk://runs/{run_id}/population/{generation}` — population snapshot for a generation (JSON).
202
204
  - `deepthonk://runs/{run_id}/{winner|final}` — text artifacts.
203
205
  - `deepthonk://runs/{run_id}/status` — run state (JSON).
204
206
  - `deepthonk://jobs/{job_id}/{status|result}?run_dir=...` — job-scoped lookup; the `run_dir` query param is required.
@@ -218,7 +220,7 @@ Every algorithm dimension is reachable through MCP arguments and CLI flags:
218
220
  - **Population shape**: `n`, `k`, `t`, `m` — override profile defaults inline.
219
221
  - **Algorithm constants**: `lambda`, `sample_temperature`, `mutate_temperature`, `judge_temperature`.
220
222
  - **Prompt style**: `general` or `paper-programming`.
221
- - **Per-phase prompt templates**: override `generate`, `compare`, `mutate`, or `finalize` with custom system/user templates and variable substitution (`{task}`, `{rubric}`, `{candidate}`, `{candidateA}`, `{candidateB}`, `{critique}`). Unknown variables throw a fail-fast error at run-start.
223
+ - **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.
222
224
  - **Concurrency**: per-phase caps for `generate`, `judge`, `mutate`.
223
225
 
224
226
  Example agent call (MCP), no YAML file required:
@@ -237,9 +239,11 @@ Example agent call (MCP), no YAML file required:
237
239
  }
238
240
  ```
239
241
 
240
- CLI accepts the same surface, except prompt overrides are loaded from a YAML file via `--prompts <yaml>` (shell-quoting multi-line templates is hostile). MCP and CLI both merge over any `--config`/`config_path` YAML defaults.
242
+ 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.
241
243
 
242
- 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, 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.
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.
245
+
246
+ 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.
243
247
 
244
248
  ## Trace Files
245
249
 
package/dist/env.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const defaultConfigPath: string;
2
+ export declare const defaultEnvPath: string;
3
+ export declare function loadDeepThonkEnv(path?: string): Promise<void>;
package/dist/env.js ADDED
@@ -0,0 +1,36 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ export const defaultConfigPath = join(homedir(), ".config", "deepthonk", "config.yaml");
6
+ export const defaultEnvPath = join(dirname(defaultConfigPath), "env");
7
+ export async function loadDeepThonkEnv(path = process.env.DEEPTHONK_ENV ?? defaultEnvPath) {
8
+ if (!existsSync(path))
9
+ return;
10
+ const text = await readFile(path, "utf8");
11
+ for (const line of text.split("\n")) {
12
+ const parsed = parseEnvLine(line);
13
+ if (!parsed)
14
+ continue;
15
+ const [key, value] = parsed;
16
+ if (process.env[key] === undefined || process.env[key] === "")
17
+ process.env[key] = value;
18
+ }
19
+ }
20
+ function parseEnvLine(line) {
21
+ const trimmed = line.trim();
22
+ if (!trimmed || trimmed.startsWith("#"))
23
+ return undefined;
24
+ const match = trimmed.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
25
+ if (!match)
26
+ return undefined;
27
+ return [match[1], unquoteEnvValue(match[2].trim())];
28
+ }
29
+ function unquoteEnvValue(value) {
30
+ if ((value.startsWith("'") && value.endsWith("'")) || (value.startsWith('"') && value.endsWith('"'))) {
31
+ const inner = value.slice(1, -1);
32
+ return value.startsWith("'") ? inner.replace(/'\\''/g, "'") : inner.replace(/\\"/g, '"').replace(/\\\\/g, "\\");
33
+ }
34
+ return value;
35
+ }
36
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,cAAc;IACvF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from "./fake.js";
2
2
  export * from "./defaults.js";
3
+ export * from "./env.js";
4
+ export * from "./profileRegistry.js";
3
5
  export * from "./openaiCompatible.js";
4
6
  export * from "./pricing.js";
5
7
  export * from "./registry.js";
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from "./fake.js";
2
2
  export * from "./defaults.js";
3
+ export * from "./env.js";
4
+ export * from "./profileRegistry.js";
3
5
  export * from "./openaiCompatible.js";
4
6
  export * from "./pricing.js";
5
7
  export * from "./registry.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ export declare const NAMED_PROFILE_NAME_RE: RegExp;
2
+ export interface NamedProfileBundle {
3
+ profile?: "quick" | "balanced" | "paper";
4
+ prompt_style?: "general" | "paper-programming";
5
+ provider?: string;
6
+ base_url?: string;
7
+ api_key_env?: string;
8
+ models?: {
9
+ generator?: string;
10
+ mutator?: string;
11
+ judge?: string;
12
+ finalizer?: string;
13
+ };
14
+ providers?: Record<string, unknown>;
15
+ algorithm?: Record<string, unknown>;
16
+ prompts?: Record<string, {
17
+ system?: string;
18
+ user?: string;
19
+ }>;
20
+ budget?: unknown;
21
+ concurrency?: unknown;
22
+ retry?: unknown;
23
+ output?: unknown;
24
+ [key: string]: unknown;
25
+ }
26
+ export declare function profilesDir(): string;
27
+ export declare function profilePath(name: string): string;
28
+ export declare function listProfiles(): Promise<string[]>;
29
+ export declare function loadNamedProfile(name: string): Promise<NamedProfileBundle>;
@@ -0,0 +1,111 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile, readdir } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import YAML from "yaml";
5
+ import { ConfigError } from "@deepthonk/core";
6
+ import { defaultConfigPath } from "./env.js";
7
+ export const NAMED_PROFILE_NAME_RE = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;
8
+ export function profilesDir() {
9
+ return process.env.DEEPTHONK_PROFILES_DIR ?? join(dirname(defaultConfigPath), "profiles");
10
+ }
11
+ export function profilePath(name) {
12
+ return join(profilesDir(), `${name}.yaml`);
13
+ }
14
+ export async function listProfiles() {
15
+ const dir = profilesDir();
16
+ if (!existsSync(dir))
17
+ return [];
18
+ const entries = await readdir(dir, { withFileTypes: true });
19
+ return entries
20
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".yaml"))
21
+ .map((entry) => entry.name.replace(/\.yaml$/, ""))
22
+ .sort();
23
+ }
24
+ export async function loadNamedProfile(name) {
25
+ validateProfileName(name);
26
+ const path = profilePath(name);
27
+ if (!existsSync(path)) {
28
+ const available = await listProfiles();
29
+ const availableHint = available.length ? `Available profiles: ${available.join(", ")}.` : `No saved profiles yet in ${profilesDir()}.`;
30
+ throw new ConfigError(`Named profile '${name}' not found at ${path}. ${availableHint}`, {
31
+ code: "config.profile_not_found",
32
+ retryable: false,
33
+ fix: `Create ${path} with at least { provider, prompt_style, models.{generator,mutator,judge} } and either profile or algorithm fields. See docs/customization.md for the schema.`
34
+ });
35
+ }
36
+ let parsed;
37
+ try {
38
+ parsed = YAML.parse(await readFile(path, "utf8"));
39
+ }
40
+ catch (error) {
41
+ throw new ConfigError(`Named profile '${name}' is not valid YAML: ${error.message}`, {
42
+ code: "config.profile_invalid_yaml",
43
+ retryable: false,
44
+ fix: `Fix YAML syntax in ${path}.`
45
+ });
46
+ }
47
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
48
+ throw new ConfigError(`Named profile '${name}' must be a YAML mapping at the top level.`, {
49
+ code: "config.profile_invalid_shape",
50
+ retryable: false,
51
+ fix: `Top-level YAML should have keys like provider, prompt_style, models, algorithm.`
52
+ });
53
+ }
54
+ const config = parsed;
55
+ rejectRawApiKey(config, name);
56
+ validateRequiredFields(config, name);
57
+ return config;
58
+ }
59
+ function validateProfileName(name) {
60
+ if (!NAMED_PROFILE_NAME_RE.test(name)) {
61
+ throw new ConfigError(`Invalid profile name '${name}'. Names must start with a letter and contain only letters, digits, hyphens, and underscores (max 64 chars).`, {
62
+ code: "config.profile_invalid_name",
63
+ retryable: false,
64
+ fix: "Rename the profile to match /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/."
65
+ });
66
+ }
67
+ }
68
+ function validateRequiredFields(config, name) {
69
+ const missing = [];
70
+ if (!config.profile && !config.algorithm)
71
+ missing.push("profile (built-in name) or algorithm (block)");
72
+ if (!config.prompt_style)
73
+ missing.push("prompt_style");
74
+ if (!config.provider)
75
+ missing.push("provider");
76
+ if (!config.models?.generator)
77
+ missing.push("models.generator");
78
+ if (!config.models?.mutator)
79
+ missing.push("models.mutator");
80
+ if (!config.models?.judge)
81
+ missing.push("models.judge");
82
+ if (missing.length > 0) {
83
+ throw new ConfigError(`Named profile '${name}' is missing required fields: ${missing.join(", ")}.`, {
84
+ code: "config.profile_missing_fields",
85
+ retryable: false,
86
+ fix: "Standalone named profiles must declare the algorithm shape (profile or algorithm block), prompt_style, provider, and at least generator/mutator/judge models. See docs/customization.md."
87
+ });
88
+ }
89
+ }
90
+ function rejectRawApiKey(config, name) {
91
+ if ("api_key" in config) {
92
+ throw new ConfigError(`Named profile '${name}' must not contain a raw 'api_key' value.`, {
93
+ code: "config.profile_raw_api_key",
94
+ retryable: false,
95
+ fix: "Use api_key_env to reference an environment variable name instead. Raw secrets in YAML on disk are a security risk."
96
+ });
97
+ }
98
+ const providers = config.providers;
99
+ if (providers && typeof providers === "object") {
100
+ for (const [role, rawValue] of Object.entries(providers)) {
101
+ if (rawValue && typeof rawValue === "object" && "api_key" in rawValue) {
102
+ throw new ConfigError(`Named profile '${name}' role provider '${role}' must not contain a raw 'api_key' value.`, {
103
+ code: "config.profile_raw_api_key",
104
+ retryable: false,
105
+ fix: "Use api_key_env to reference an environment variable name instead."
106
+ });
107
+ }
108
+ }
109
+ }
110
+ }
111
+ //# sourceMappingURL=profileRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileRegistry.js","sourceRoot":"","sources":["../src/profileRegistry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepthonk/providers",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Provider drivers and routing for DeepThonk.",
5
5
  "license": "MIT",
6
6
  "author": "Xule Lin",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "zod": "^3.25.28",
36
- "@deepthonk/core": "0.1.0"
36
+ "@deepthonk/core": "0.1.1"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -p tsconfig.json",