mslxdff 0.1.96 → 0.1.98
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/package.json +1 -1
- package/src/chat-pipeline/serial-trial.js +1 -1
- package/src/cli/commands/model/picks.js +7 -2
- package/src/cli/commands/provider/bench-via.js +9 -0
- package/src/cli/commands/provider/bench.js +8 -0
- package/src/cli/commands/provider/deepseek-health.js +46 -0
- package/src/cli/commands/provider/deepseek-login.js +89 -0
- package/src/cli/commands/provider/index.js +4 -0
- package/src/cli/commands/provider/models.js +3 -0
- package/src/groups.js +2 -1
- package/src/providers/cline/index.js +2 -1
- package/src/providers/cline/models.js +2 -1
- package/src/providers/deepseek/auth.js +111 -0
- package/src/providers/deepseek/bridge.js +158 -0
- package/src/providers/deepseek/chat.js +220 -0
- package/src/providers/deepseek/debug.js +44 -0
- package/src/providers/deepseek/hash-reference.js +117 -0
- package/src/providers/deepseek/hash.js +245 -0
- package/src/providers/deepseek/health.js +104 -0
- package/src/providers/deepseek/index.js +180 -0
- package/src/providers/deepseek/pow.js +99 -0
- package/src/providers/deepseek/session.js +114 -0
- package/src/providers/deepseek/sse-decoder.js +160 -0
- package/src/providers/deepseek.js +1 -0
- package/src/providers/generic.js +2 -1
- package/src/providers/registry.js +5 -0
- package/src/providers/workbuddy/auth.js +4 -7
- package/src/providers/workbuddy/balance.js +3 -1
- package/src/providers/workbuddy/index.js +2 -1
- package/src/providers/workbuddy-balance.js +3 -1
- package/src/routes/hedge.js +3 -1
- package/src/routes/peers.js +1 -1
- package/src/runtime/providers-setup.js +2 -1
|
@@ -15,6 +15,11 @@ export const customProviders = [
|
|
|
15
15
|
match: (id, baseUrl) => id === "cline" || id === "clinebot" || String(baseUrl).includes("cline.bot"),
|
|
16
16
|
load: () => import("./cline.js").then((m) => m.createClineProvider),
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
id: "deepseek",
|
|
20
|
+
match: (id, baseUrl) => id === "deepseek" || String(baseUrl).includes("chat.deepseek.com"),
|
|
21
|
+
load: () => import("./deepseek.js").then((m) => m.createDeepseekProvider),
|
|
22
|
+
},
|
|
18
23
|
];
|
|
19
24
|
|
|
20
25
|
// 供 bench/probe 等需要定制化解析模型列表的场景
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { joinUrl } from "../base.js";
|
|
2
|
+
import { compatFetch } from "../../compat.js";
|
|
2
3
|
import { WORKBUDDY_DEFAULT_BASE_URL } from "../../state/schemas/provider.js";
|
|
3
4
|
|
|
4
5
|
export function decodeJwtExp(token) {
|
|
@@ -45,15 +46,11 @@ export function createAuthService({
|
|
|
45
46
|
} = {}) {
|
|
46
47
|
const resolvedBase = baseUrl ? String(baseUrl).trim().replace(/\/+$/, "") : WORKBUDDY_DEFAULT_BASE_URL;
|
|
47
48
|
if (!fetchImpl) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
fetchImpl = getUndici()?.UndiciFetch || fetch;
|
|
51
|
-
} catch {
|
|
52
|
-
fetchImpl = fetch;
|
|
53
|
-
}
|
|
49
|
+
// 兼容层统一取(undici 优先,老 Node 兜底)
|
|
50
|
+
fetchImpl = compatFetch;
|
|
54
51
|
}
|
|
55
52
|
// lazy resolve UndiciFetch if not provided
|
|
56
|
-
if (!fetchImpl) fetchImpl =
|
|
53
|
+
if (!fetchImpl) fetchImpl = compatFetch;
|
|
57
54
|
|
|
58
55
|
const inflightRefresh = new Map();
|
|
59
56
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { compatFetch } from "../../compat.js";
|
|
2
|
+
|
|
1
3
|
const BALANCE_TTL_MS = 5 * 60 * 1000;
|
|
2
4
|
|
|
3
5
|
export function createBalanceCache({ ttlMs = BALANCE_TTL_MS, now = Date.now } = {}) {
|
|
@@ -24,7 +26,7 @@ export function createBalanceCache({ ttlMs = BALANCE_TTL_MS, now = Date.now } =
|
|
|
24
26
|
const u = uid || auth?.uid || "";
|
|
25
27
|
const d = domain || auth?.domain || "www.codebuddy.cn";
|
|
26
28
|
if (!u || !at) return null;
|
|
27
|
-
const fetcher = fetchImpl ||
|
|
29
|
+
const fetcher = fetchImpl || compatFetch;
|
|
28
30
|
const body = JSON.stringify({
|
|
29
31
|
PageNumber: 1, PageSize: 100, ProductCode: "p_tcaca", Status: [0, 3],
|
|
30
32
|
PackageEndTimeRangeBegin: "2026-08-01 00:00:00",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createKeyRing } from "../keyring.js";
|
|
2
2
|
import { loadProviderKeys, loadProviderAuths, loadProviderBaseUrl, loadProviderShareKeys, saveProviderConfig, WORKBUDDY_DEFAULT_BASE_URL, loadProviderModelsPath, loadProviderChatPath } from "../../state.js";
|
|
3
3
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { compatFetch } from "../../compat.js";
|
|
4
5
|
import { join, dirname } from "node:path";
|
|
5
6
|
import { tmpdir } from "node:os";
|
|
6
7
|
import { envInt, joinUrl, getUndici, createAgent } from "../base.js";
|
|
@@ -54,7 +55,7 @@ export function createWorkbuddyProvider({
|
|
|
54
55
|
const resolvedBase = resolveBaseUrl(baseUrl);
|
|
55
56
|
const resolvedModelsPath = modelsPath || loadProviderModelsPath(id, file ? { file } : {});
|
|
56
57
|
const resolvedChatPath = chatPath || loadProviderChatPath(id, file ? { file } : {});
|
|
57
|
-
if (!fetchImpl) fetchImpl = UndiciFetch ||
|
|
58
|
+
if (!fetchImpl) fetchImpl = UndiciFetch || compatFetch;
|
|
58
59
|
|
|
59
60
|
const keysFromState = loadProviderKeys(id, file ? { file } : {});
|
|
60
61
|
const authsFromState = loadProviderAuths(id, file ? { file } : {});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { compatFetch } from "../compat.js";
|
|
2
|
+
|
|
1
3
|
const BALANCE_TTL_MS = 5 * 60 * 1000;
|
|
2
4
|
|
|
3
5
|
const balanceCache = new Map(); // uid -> { total, dailyPacks, activeCount, nextExpire, fetchedAt }
|
|
@@ -26,7 +28,7 @@ export async function fetchBalance({ uid, key, auth, domain, baseUrl = "https://
|
|
|
26
28
|
const u = uid || auth?.uid || "";
|
|
27
29
|
const d = domain || auth?.domain || "www.codebuddy.cn";
|
|
28
30
|
if (!u || !at) return null;
|
|
29
|
-
const fetcher = fetchImpl ||
|
|
31
|
+
const fetcher = fetchImpl || compatFetch;
|
|
30
32
|
const body = JSON.stringify({
|
|
31
33
|
PageNumber: 1, PageSize: 100, ProductCode: "p_tcaca", Status: [0, 3],
|
|
32
34
|
PackageEndTimeRangeBegin: "2026-08-01 00:00:00",
|
package/src/routes/hedge.js
CHANGED
|
@@ -13,11 +13,13 @@ function isFastFailStatus(status) {
|
|
|
13
13
|
return s === 429 || s === 502 || s === 503 || s === 504;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
function shouldHedge({ isStream, canForwardPeers, hedgeDelayMs: d, hasPeers }) {
|
|
16
|
+
function shouldHedge({ isStream, canForwardPeers, hedgeDelayMs: d, hasPeers, model }) {
|
|
17
17
|
if (!isStream) return false;
|
|
18
18
|
if (!canForwardPeers) return false;
|
|
19
19
|
if (!hasPeers) return false;
|
|
20
20
|
if (!d || d <= 0) return false;
|
|
21
|
+
// deepseek = 本机私有凭据供应商(组员节点没有凭据),对冲必败且 both-fail 会误杀本地慢首块流(reasoner 思考 3-30s),不走组员
|
|
22
|
+
if (String(model || "").startsWith("deepseek/")) return false;
|
|
21
23
|
return true;
|
|
22
24
|
}
|
|
23
25
|
|
package/src/routes/peers.js
CHANGED
|
@@ -21,7 +21,7 @@ export function clearPeerHealthCache() {
|
|
|
21
21
|
healthInflight.clear();
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export async function peerHealthyModels(peer, { timeoutMs = PEER_STATUS_TIMEOUT_MS, fetchImpl =
|
|
24
|
+
export async function peerHealthyModels(peer, { timeoutMs = PEER_STATUS_TIMEOUT_MS, fetchImpl = compatFetch } = {}) {
|
|
25
25
|
const key = peer?.url || "";
|
|
26
26
|
const ttl = peerHealthTtlMs();
|
|
27
27
|
if (ttl > 0) {
|
|
@@ -76,7 +76,8 @@ export async function setupProviders() {
|
|
|
76
76
|
const customFactory = await getCustomProviderFactory(gid, base);
|
|
77
77
|
if (customFactory) {
|
|
78
78
|
if (gid === "workbuddy" && !keys.length) continue;
|
|
79
|
-
if (gid
|
|
79
|
+
if (gid === "deepseek" && !keys.length) continue;
|
|
80
|
+
if (gid !== "workbuddy" && gid !== "deepseek" && (!base || !keys.length)) continue;
|
|
80
81
|
try {
|
|
81
82
|
const provider = gid === "workbuddy"
|
|
82
83
|
? await customFactory({ baseUrl: base || "https://copilot.tencent.com", apiKeys: keys, auths })
|