@lcv-ideas-software/cross-review 4.0.0 → 4.0.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/CHANGELOG.md +123 -0
- package/LICENSE +201 -201
- package/NOTICE +1 -1
- package/README.md +7 -1
- package/SECURITY.md +3 -3
- package/dist/scripts/smoke.js +24 -0
- package/dist/scripts/smoke.js.map +1 -1
- package/dist/src/core/config.d.ts +1 -1
- package/dist/src/core/config.js +1 -1
- package/dist/src/peers/model-selection.js +6 -6
- package/dist/src/peers/model-selection.js.map +1 -1
- package/docs/api-keys.md +6 -0
- package/docs/architecture.md +6 -2
- package/docs/costs.md +7 -0
- package/docs/model-selection.md +59 -60
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AppConfig, PeerId } from "./types.js";
|
|
2
|
-
export declare const VERSION = "4.0.
|
|
2
|
+
export declare const VERSION = "4.0.2";
|
|
3
3
|
export declare const RELEASE_DATE = "2026-05-15";
|
|
4
4
|
export declare const DEFAULT_MAX_OUTPUT_TOKENS = 20000;
|
|
5
5
|
export declare function getLastFileConfigResult(): import("./file-config.js").ApplyFileConfigResult | undefined;
|
package/dist/src/core/config.js
CHANGED
|
@@ -17,7 +17,7 @@ function expandHome(rawPath) {
|
|
|
17
17
|
}
|
|
18
18
|
return rawPath;
|
|
19
19
|
}
|
|
20
|
-
export const VERSION = "4.0.
|
|
20
|
+
export const VERSION = "4.0.2";
|
|
21
21
|
export const RELEASE_DATE = "2026-05-15";
|
|
22
22
|
export const DEFAULT_MAX_OUTPUT_TOKENS = 20_000;
|
|
23
23
|
const COST_RATE_ENV_PREFIX = {
|
|
@@ -72,10 +72,10 @@ export function selectFromCandidates(peer, candidates, fallback) {
|
|
|
72
72
|
source_url: DOCS[peer],
|
|
73
73
|
confidence: selected ? "verified" : candidates.length > 0 ? "unknown" : "inferred",
|
|
74
74
|
reason: selected
|
|
75
|
-
? `
|
|
75
|
+
? `Validated availability of the canonical pin in the provider's model API: ${priority.join(", ")}.`
|
|
76
76
|
: candidates.length > 0
|
|
77
|
-
? `Model API returned candidates, but
|
|
78
|
-
: `Model API unavailable;
|
|
77
|
+
? `Model API returned candidates, but the canonical pin (${priority.join(", ")}) was not among them; keeping the canonical pin ${fallback} so the run fails visibly instead of silently downgrading (no-fallback policy, operator directive 2026-05-14).`
|
|
78
|
+
: `Model API unavailable; keeping the canonical pin ${fallback} (no-fallback policy).`,
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
function overrideSelection(peer, value) {
|
|
@@ -95,8 +95,8 @@ function overrideSelection(peer, value) {
|
|
|
95
95
|
source_url: DOCS[peer],
|
|
96
96
|
confidence: known ? "verified" : "inferred",
|
|
97
97
|
reason: known
|
|
98
|
-
? `${envOverrideName(peer)} is set; the explicit override
|
|
99
|
-
: `${envOverrideName(peer)}='${value}' is set
|
|
98
|
+
? `${envOverrideName(peer)} is set to the canonical pin; the explicit override is acknowledged but matches the canonical pin exactly.`
|
|
99
|
+
: `${envOverrideName(peer)}='${value}' is set and differs from the canonical pin (${PRIORITY[peer].join(", ")}); honoring the operator override (the only legitimate non-canonical path) but flagging confidence=inferred so any provider 404 surfaces here.`,
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
102
|
async function openAIModels(config) {
|
|
@@ -229,7 +229,7 @@ export async function resolveBestModel(config, peer) {
|
|
|
229
229
|
candidates: [],
|
|
230
230
|
source_url: DOCS[peer],
|
|
231
231
|
confidence: "inferred",
|
|
232
|
-
reason: "API key is missing in the current process;
|
|
232
|
+
reason: "API key is missing in the current process; keeping the canonical pin until the key is available (no-fallback policy).",
|
|
233
233
|
};
|
|
234
234
|
}
|
|
235
235
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../../src/peers/model-selection.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,4DAA4D;IACnE,MAAM,EAAE,kEAAkE;IAC1E,MAAM,EAAE,8CAA8C;IACtD,QAAQ,EAAE,uCAAuC;IACjD,IAAI,EAAE,gEAAgE;IACtE,kEAAkE;IAClE,yDAAyD;IACzD,0DAA0D;IAC1D,gEAAgE;IAChE,kEAAkE;IAClE,UAAU,EAAE,mDAAmD;CAC/B,CAAC;AAEnC,2EAA2E;AAC3E,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,gEAAgE;AAChE,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,6EAA6E;AAC7E,MAAM,QAAQ,GAA6B;IACzC,KAAK,EAAE,CAAC,SAAS,CAAC;IAClB,MAAM,EAAE,CAAC,iBAAiB,CAAC;IAC3B,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,CAAC,iBAAiB,CAAC;IAC7B,gEAAgE;IAChE,qEAAqE;IACrE,+DAA+D;IAC/D,0DAA0D;IAC1D,iCAAiC;IACjC,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;CACpC,CAAC;AAEF,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,2BAA2B,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,8BAA8B,CAAC;QACxC,KAAK,QAAQ;YACX,OAAO,2BAA2B,CAAC;QACrC,KAAK,UAAU;YACb,OAAO,6BAA6B,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,yBAAyB,CAAC;QACnC,KAAK,YAAY;YACf,OAAO,+BAA+B,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAiB,EAAE,IAAY;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,UAA4B,EAC5B,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACvC,UAAU;QACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;QACtB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QAClF,MAAM,EAAE,QAAQ;YACd,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../../src/peers/model-selection.ts"],"names":[],"mappings":"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"}
|
package/docs/api-keys.md
CHANGED
|
@@ -9,6 +9,8 @@ All runtime credentials must come from Windows environment variables.
|
|
|
9
9
|
[Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "<ANTHROPIC_API_KEY>", "User")
|
|
10
10
|
[Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "<GEMINI_API_KEY>", "User")
|
|
11
11
|
[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "<DEEPSEEK_API_KEY>", "User")
|
|
12
|
+
[Environment]::SetEnvironmentVariable("GROK_API_KEY", "<GROK_API_KEY>", "User")
|
|
13
|
+
[Environment]::SetEnvironmentVariable("PERPLEXITY_API_KEY", "<PERPLEXITY_API_KEY>", "User")
|
|
12
14
|
```
|
|
13
15
|
|
|
14
16
|
Restart any terminal, editor, app or MCP host after changing these variables.
|
|
@@ -25,6 +27,10 @@ Use overrides only when you intentionally want to pin a model rather than use au
|
|
|
25
27
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GEMINI_MODEL", "gemini-2.5-pro", "User")
|
|
26
28
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_MODEL", "deepseek-v4-pro", "User")
|
|
27
29
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_REASONING_EFFORT", "max", "User")
|
|
30
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_MODEL", "grok-4-latest", "User")
|
|
31
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_MODEL", "sonar-reasoning-pro", "User")
|
|
32
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_REASONING_EFFORT", "high", "User")
|
|
33
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_SEARCH_CONTEXT_SIZE", "low", "User")
|
|
28
34
|
```
|
|
29
35
|
|
|
30
36
|
## Safety
|
package/docs/architecture.md
CHANGED
|
@@ -114,5 +114,9 @@ Raw chain-of-thought is not persisted. Session continuity is represented through
|
|
|
114
114
|
|
|
115
115
|
## Stable Rename
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
The v4.0.0 release on 2026-05-15 renamed the product from `cross-review-v2` to
|
|
118
|
+
`cross-review` (npm package, GitHub repo, GitHub Pages domain, MCP server key
|
|
119
|
+
in host configs, env-var prefix, binaries). The companion `cross-review-v1`
|
|
120
|
+
package was discontinued and archived on the same date. Prior names remain
|
|
121
|
+
only in dated historical changelog entries and memory notes; all active
|
|
122
|
+
surfaces describe the product as `cross-review`.
|
package/docs/costs.md
CHANGED
|
@@ -30,6 +30,13 @@ Set rates through Windows environment variables or the MCP host configuration be
|
|
|
30
30
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GEMINI_OUTPUT_USD_PER_MILLION", "<current Gemini output rate>", "User")
|
|
31
31
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_INPUT_USD_PER_MILLION", "<current DeepSeek input rate>", "User")
|
|
32
32
|
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_OUTPUT_USD_PER_MILLION", "<current DeepSeek output rate>", "User")
|
|
33
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_INPUT_USD_PER_MILLION", "<current Grok input rate>", "User")
|
|
34
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_OUTPUT_USD_PER_MILLION", "<current Grok output rate>", "User")
|
|
35
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_INPUT_USD_PER_MILLION", "<current Perplexity input rate>", "User")
|
|
36
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_OUTPUT_USD_PER_MILLION", "<current Perplexity output rate>", "User")
|
|
37
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_REQUEST_FEE_LOW_USD_PER_1000_REQUESTS", "<Perplexity per-1000-requests low-context fee>", "User")
|
|
38
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_REQUEST_FEE_MEDIUM_USD_PER_1000_REQUESTS", "<Perplexity per-1000-requests medium-context fee>", "User")
|
|
39
|
+
[Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_REQUEST_FEE_HIGH_USD_PER_1000_REQUESTS", "<Perplexity per-1000-requests high-context fee>", "User")
|
|
33
40
|
```
|
|
34
41
|
|
|
35
42
|
`CROSS_REVIEW_MAX_SESSION_COST_USD` sets the default per-session budget guard. `CROSS_REVIEW_PREFLIGHT_MAX_ROUND_COST_USD` blocks a round before calls begin when the estimated cost exceeds the configured value. `CROSS_REVIEW_UNTIL_STOPPED_MAX_COST_USD` is required for `until_stopped=true`.
|
package/docs/model-selection.md
CHANGED
|
@@ -1,70 +1,69 @@
|
|
|
1
1
|
# Model Selection
|
|
2
2
|
|
|
3
|
-
The server
|
|
3
|
+
The server pins each peer to ONE canonical model per the no-downgrade policy
|
|
4
|
+
(operator directive 2026-05-14). The runtime never silently chains a
|
|
5
|
+
multi-model fallback. An explicit operator override via
|
|
6
|
+
`CROSS_REVIEW_<PROVIDER>_MODEL` env-var is the only way to deviate from the
|
|
7
|
+
canonical pin.
|
|
4
8
|
|
|
5
9
|
## Rules
|
|
6
10
|
|
|
7
|
-
1. Query the provider's official model API using the current API key
|
|
11
|
+
1. Query the provider's official model API using the current API key to
|
|
12
|
+
validate that the canonical pin is currently available.
|
|
8
13
|
2. Keep only models that can perform text generation for the peer role.
|
|
9
|
-
3. Exclude known non-thinking, low-capacity or deprecated models
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
3. Exclude known non-thinking, low-capacity or deprecated models — they
|
|
15
|
+
never become the canonical pin.
|
|
16
|
+
4. Compare returned model IDs against the canonical pin documented below.
|
|
17
|
+
5. If the canonical pin is in the API response, select it; if the canonical
|
|
18
|
+
pin is NOT in the response, KEEP the canonical pin anyway (no silent
|
|
19
|
+
downgrade) so any provider availability problem surfaces visibly in
|
|
20
|
+
probes and review rounds instead of mutating into a weaker model behind
|
|
21
|
+
the operator's back.
|
|
22
|
+
6. Persist the selected model, candidate list, source URL, confidence and
|
|
23
|
+
reason in the session snapshot.
|
|
15
24
|
|
|
16
25
|
The no-downgrade behavior is covered by `scripts/smoke.ts`: when a provider
|
|
17
|
-
returns only a weak/deprecated candidate such as `claude-haiku-4-5`,
|
|
18
|
-
stays on the
|
|
19
|
-
|
|
20
|
-
## Current
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Operator preference 2026-05-07: `gemini-2.5-pro` is the runtime default
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
`
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
`GROK_API_KEY` is the canonical auth variable. The operator chooses the model
|
|
59
|
-
with `CROSS_REVIEW_GROK_MODEL`. Per official xAI reasoning docs, only
|
|
60
|
-
`grok-4.20-multi-agent` accepts an explicit `reasoning.effort` request body
|
|
61
|
-
field, where the value selects agent count (`low`/`medium` = 4 agents,
|
|
62
|
-
`high`/`xhigh` = 16 agents). Automatic-reasoning Grok models such as
|
|
63
|
-
`grok-4-latest`, `grok-4.20`, and `grok-4.20-reasoning` must not receive that
|
|
64
|
-
field; the adapter detects the configured model and omits it automatically.
|
|
65
|
-
The xAI model catalog currently recommends `grok-4.3` for general Chat API
|
|
66
|
-
usage; the multi-agent model remains first in this project because it is the
|
|
67
|
-
only documented Grok model with explicit agent-count control.
|
|
26
|
+
returns only a weak/deprecated candidate such as `claude-haiku-4-5`,
|
|
27
|
+
selection stays on the canonical pin and records `confidence=unknown`.
|
|
28
|
+
|
|
29
|
+
## Current Canonical Pins (no-fallback policy, operator directive 2026-05-14)
|
|
30
|
+
|
|
31
|
+
Each peer is pinned to exactly ONE canonical model — the most advanced "pro
|
|
32
|
+
with reasoning" model available from the provider. The runtime no longer
|
|
33
|
+
chains a multi-model fallback list. If the pinned model is genuinely
|
|
34
|
+
unavailable, the round retries on the same model or skips that peer
|
|
35
|
+
(skip-gated quorum floor; see `src/core/convergence.ts`). The only escape
|
|
36
|
+
hatch is an explicit operator override via `CROSS_REVIEW_<PROVIDER>_MODEL`
|
|
37
|
+
env-var per host — a deliberate decision, never a silent downgrade.
|
|
38
|
+
|
|
39
|
+
| Peer | Pin | Override env-var |
|
|
40
|
+
| ---------------- | --------------------- | ------------------------------- |
|
|
41
|
+
| OpenAI/Codex | `gpt-5.5` | `CROSS_REVIEW_OPENAI_MODEL` |
|
|
42
|
+
| Anthropic/Claude | `claude-opus-4-7` | `CROSS_REVIEW_ANTHROPIC_MODEL` |
|
|
43
|
+
| Google/Gemini | `gemini-2.5-pro` | `CROSS_REVIEW_GEMINI_MODEL` |
|
|
44
|
+
| DeepSeek | `deepseek-v4-pro` | `CROSS_REVIEW_DEEPSEEK_MODEL` |
|
|
45
|
+
| xAI/Grok | `grok-4-latest` | `CROSS_REVIEW_GROK_MODEL` |
|
|
46
|
+
| Perplexity | `sonar-reasoning-pro` | `CROSS_REVIEW_PERPLEXITY_MODEL` |
|
|
47
|
+
|
|
48
|
+
Haiku and other low-capacity Anthropic models are intentionally excluded —
|
|
49
|
+
the cross-review role requires advanced reasoning depth.
|
|
50
|
+
|
|
51
|
+
Operator preference 2026-05-07: `gemini-2.5-pro` is the runtime default
|
|
52
|
+
because under Google One AI Ultra subscription it carries 1k requests/day vs
|
|
53
|
+
`gemini-3.1-pro-preview`'s 250 requests/day. Workspace policy: only
|
|
54
|
+
`gemini-*-pro` variants ≥ 2.5 are permitted — no `*-flash` variants and no
|
|
55
|
+
models below 2.5.
|
|
56
|
+
|
|
57
|
+
`GROK_API_KEY` is the canonical auth variable for xAI. The runtime sends
|
|
58
|
+
`reasoning.effort` only for models that explicitly accept it (e.g.
|
|
59
|
+
`grok-4.20-multi-agent`); for automatic-reasoning models such as the pinned
|
|
60
|
+
`grok-4-latest`, the adapter omits the field automatically.
|
|
61
|
+
|
|
62
|
+
`PERPLEXITY_API_KEY` is the canonical auth variable for Perplexity Sonar.
|
|
63
|
+
Sonar billing has a 3rd dimension: per-1000-requests fee that scales with
|
|
64
|
+
`CROSS_REVIEW_PERPLEXITY_SEARCH_CONTEXT_SIZE` (low/medium/high). When
|
|
65
|
+
Perplexity is the relator (lottery), the adapter forces `disable_search=true`
|
|
66
|
+
to skip search for the synthesis step.
|
|
68
67
|
|
|
69
68
|
## Thinking Configuration
|
|
70
69
|
|
|
@@ -100,6 +99,6 @@ repair:
|
|
|
100
99
|
|
|
101
100
|
## Important
|
|
102
101
|
|
|
103
|
-
The
|
|
102
|
+
The canonical pin per peer is intentionally code-level configuration, not hidden behavior. Provider model catalogs and deprecation schedules change often, so this file and `src/peers/model-selection.ts` must be reviewed against official provider documentation whenever a pin changes.
|
|
104
103
|
|
|
105
104
|
The redacted real-API capability smoke for the current default models is recorded in `docs/reports/cross-review-api-capability-smoke-2026-04-30.md`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lcv-ideas-software/cross-review",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.2",
|
|
4
4
|
"description": "API-first MCP server for multi-model cross-review with unanimous convergence gates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/mcp/server.js",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@anthropic-ai/sdk": "^0.96.0",
|
|
40
|
-
"@google/genai": "^2.
|
|
40
|
+
"@google/genai": "^2.3.0",
|
|
41
41
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
42
42
|
"openai": "^6.35.0",
|
|
43
43
|
"pino": "^10.3.1",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@eslint/js": "^10.0.1",
|
|
52
52
|
"@types/node": "^25.6.0",
|
|
53
|
-
"eslint": "^10.
|
|
53
|
+
"eslint": "^10.4.0",
|
|
54
54
|
"prettier": "^3.8.3",
|
|
55
55
|
"tsx": "^4.21.0",
|
|
56
56
|
"typescript": "^6.0.3",
|