mslxdff 0.1.230 → 0.1.231

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 (101) hide show
  1. package/bin/mslxdff.js +3 -3
  2. package/docs/cli_help_mini.md +148 -0
  3. package/package.json +1 -1
  4. package/src/auto.js +254 -254
  5. package/src/bench/cline-bench.js +42 -42
  6. package/src/bench/probe.js +70 -70
  7. package/src/bench/report.js +162 -162
  8. package/src/bench/runner.js +77 -77
  9. package/src/bench/via-probe.js +124 -124
  10. package/src/bench/via-routes.js +87 -87
  11. package/src/bench/workbuddy-bench.js +54 -54
  12. package/src/chat/engine.js +160 -160
  13. package/src/chat/gateway.js +163 -163
  14. package/src/chat/orchestrator.js +234 -234
  15. package/src/chat/prompt.js +70 -70
  16. package/src/chat/repl.js +88 -88
  17. package/src/chat/terminal.js +135 -135
  18. package/src/chat/tools.js +306 -306
  19. package/src/chat-pipeline/index.js +145 -145
  20. package/src/chat-pipeline/policy.js +84 -84
  21. package/src/cli/commands/group.js +266 -266
  22. package/src/cli/commands/model/picks.js +50 -50
  23. package/src/cli/commands/provider/bench-via.js +247 -247
  24. package/src/cli/commands/provider/bench.js +141 -141
  25. package/src/cli/commands/provider/index.js +139 -139
  26. package/src/cli/commands/provider/models.js +149 -149
  27. package/src/cli/commands/provider/qwenwork-login.js +119 -119
  28. package/src/cli/commands/provider/raccoon-quota.js +156 -156
  29. package/src/cli/commands/sync.js +310 -310
  30. package/src/cli/status.js +279 -279
  31. package/src/daemon.js +246 -246
  32. package/src/model-capabilities/enrich.js +86 -86
  33. package/src/model-capabilities/index.js +183 -183
  34. package/src/model-capabilities/parse.js +70 -70
  35. package/src/models.js +225 -225
  36. package/src/peers.js +345 -345
  37. package/src/providers/AGENTS.md +49 -0
  38. package/src/providers/agentrouter.js +238 -231
  39. package/src/providers/base.js +164 -164
  40. package/src/providers/cline/auth.js +228 -228
  41. package/src/providers/cline/chat.js +307 -307
  42. package/src/providers/cline.js +2 -2
  43. package/src/providers/codearts/chat.js +207 -207
  44. package/src/providers/curl-fetch.js +155 -0
  45. package/src/providers/dispatcher.js +147 -146
  46. package/src/providers/globalqwenwork/cosy.js +123 -123
  47. package/src/providers/globalqwenwork/crypto.js +218 -218
  48. package/src/providers/globalqwenwork/http.js +20 -20
  49. package/src/providers/globalqwenwork/rsa.js +54 -54
  50. package/src/providers/globalqwenwork/sse.js +268 -268
  51. package/src/providers/globalqwenwork/stream.js +130 -130
  52. package/src/providers/globalqwenwork/upstream.js +122 -122
  53. package/src/providers/keyring.js +60 -60
  54. package/src/providers/qoder/chat.js +203 -203
  55. package/src/providers/qoder/index.js +249 -249
  56. package/src/providers/qoder/sse.js +145 -145
  57. package/src/providers/qwenwork/account-store.js +133 -133
  58. package/src/providers/qwenwork/constants.js +67 -67
  59. package/src/providers/qwenwork/cosy.js +120 -120
  60. package/src/providers/qwenwork/crypto.js +218 -218
  61. package/src/providers/qwenwork/http.js +20 -20
  62. package/src/providers/qwenwork/index.js +337 -337
  63. package/src/providers/qwenwork/payload.js +144 -144
  64. package/src/providers/qwenwork/rsa.js +54 -54
  65. package/src/providers/qwenwork/sse.js +268 -268
  66. package/src/providers/qwenwork/stream.js +130 -130
  67. package/src/providers/qwenwork/upstream.js +120 -120
  68. package/src/providers/qwenwork.js +1 -1
  69. package/src/providers/raccoon/const.js +202 -202
  70. package/src/providers/raccoon/credits.js +285 -285
  71. package/src/providers/registry.js +89 -93
  72. package/src/providers/workbuddy/chat.js +264 -264
  73. package/src/providers/workbuddy/reshape.js +152 -152
  74. package/src/providers/workbuddy.js +2 -2
  75. package/src/reasoning.js +32 -32
  76. package/src/routes/AGENTS.md +37 -0
  77. package/src/routes/chat/broadband-handler.js +80 -80
  78. package/src/routes/chat/gateway.js +46 -46
  79. package/src/routes/chat/relay-pipeline.js +282 -282
  80. package/src/routes/chat/via-route-handler.js +156 -156
  81. package/src/routes/hedge.js +260 -260
  82. package/src/routes/models-route.js +167 -167
  83. package/src/routes/peers.js +373 -373
  84. package/src/routes/stream.js +347 -347
  85. package/src/runtime/bootstrap.js +75 -75
  86. package/src/runtime/keep-warm.js +135 -135
  87. package/src/runtime/provider-gate.js +75 -75
  88. package/src/runtime/providers-setup.js +187 -187
  89. package/src/runtime/raccoon-checkin.js +175 -175
  90. package/src/server.js +85 -85
  91. package/src/state/schemas/allowlist.js +92 -92
  92. package/src/sync-opencode.js +280 -280
  93. package/src/transport/index.js +244 -244
  94. package/src/transport/pool.js +56 -56
  95. package/src/transport/retry.js +24 -24
  96. package/src/transport/sse.js +93 -93
  97. package/src/upstream-probe/display.js +52 -52
  98. package/src/upstream-probe/probe.js +49 -49
  99. package/src/upstream-probe/rotate.js +110 -110
  100. package/src/upstream-probe/start.js +45 -45
  101. package/src/upstream.js +355 -355
@@ -1,93 +1,89 @@
1
- /**
2
- * 可扩展供应商注册表:新增特殊供应商时,仅在此文件注册 + 新增对应 provider 文件即可
3
- * 每个条目:{ id, match(id, baseUrl) => bool, load() => Promise<factory> }
4
- * 匹配优先级:按数组顺序,首个命中即用;未命中走通用 generic
5
- */
6
-
7
- export const customProviders = [
8
- {
9
- id: "workbuddy",
10
- match: (id, baseUrl) => id === "workbuddy" || String(baseUrl).includes("copilot.tencent"),
11
- load: () => import("./workbuddy.js").then((m) => m.createWorkbuddyProvider),
12
- },
13
- {
14
- id: "traework",
15
- match: (id, baseUrl) => id === "traework" || String(baseUrl).includes("trae"),
16
- load: () => import("./traework.js").then((m) => m.createTraeworkProvider),
17
- },
18
- {
19
- id: "cline",
20
- match: (id, baseUrl) => id === "cline" || String(baseUrl).includes("cline.bot"),
21
- load: () => import("./cline.js").then((m) => m.createClineProvider),
22
- },
23
- {
24
- id: "codearts",
25
- match: (id, baseUrl) => id === "codearts" || String(baseUrl).includes("myhuaweicloud.com"),
26
- load: () => import("./codearts.js").then((m) => m.createCodeartsProvider),
27
- },
28
- {
29
- id: "qoder",
30
- match: (id, baseUrl) => id === "qoder" || String(baseUrl).includes("qoder"),
31
- load: () => import("./qoder/index.js").then((m) => m.createQoderProvider),
32
- },
33
- {
34
- // ⚠ 必须排在 qwenwork 之前:qwenwork 的 match 用 `includes("qwenwork")`,
35
- // 而 "globalqwenwork" 与 "gateway.qwenwork.ai"/"globalqwenwork://native" 都含该子串,
36
- // 若后置会被 cn 条目抢先命中(first-match-wins),把国际站 token 打到 cn 网关。
37
- id: "globalqwenwork",
38
- match: (id, baseUrl) => id === "globalqwenwork" || String(baseUrl).includes("qwenwork.ai"),
39
- load: () => import("./globalqwenwork/index.js").then((m) => m.createGlobalQwenworkProvider),
40
- },
41
- {
42
- id: "qwenwork",
43
- match: (id, baseUrl) => id === "qwenwork" || String(baseUrl).includes("qwenwork"),
44
- load: () => import("./qwenwork/index.js").then((m) => m.createQwenworkProvider),
45
- },
46
- {
47
- id: "zcode",
48
- match: (id, baseUrl) => id === "zcode" || String(baseUrl).includes("zcode.z.ai"),
49
- load: () => import("./zcode/index.js").then((m) => m.createZcodeProvider),
50
- },
51
- {
52
- id: "railway",
53
- // opencode zen free 层的另一个 IP 出口(Railway 反代),只暴露 free 模型。
54
- // 匹配必须排在 generic 之前,且不能与其它条目撞(railway.app 域名足够独特)。
55
- match: (id, baseUrl) => id === "railway" || String(baseUrl).includes("railway.app"),
56
- load: () => import("./railway.js").then((m) => m.createRailwayProvider),
57
- },
58
- {
59
- id: "raccoon",
60
- match: (id, baseUrl) => id === "raccoon" || String(baseUrl).includes("xiaohuanxiong.com"),
61
- load: () => import("./raccoon/index.js").then((m) => m.createRaccoonProvider),
62
- },
63
- {
64
- id: "agentrouter",
65
- // 客户端身份白名单(UA 非 opencode/claude-cli 恒 401)+ gpt-6* 只吃 /v1/responses,
66
- // generic 的写死 UA 与 models.dev 判定都覆盖不到,故走定制工厂。
67
- match: (id, baseUrl) => id === "agentrouter" || String(baseUrl).includes("agentrouter"),
68
- load: () => import("./agentrouter.js").then((m) => m.createAgentRouterProvider),
69
- },
70
- ];
71
-
72
- // 供 bench/probe 等需要定制化解析模型列表的场景
73
- export const customNormalizers = [
74
- {
75
- id: "cline",
76
- match: (baseUrl) => String(baseUrl).includes("cline.bot"),
77
- normalize: (json) => Array.isArray(json?.free) ? json.free : null,
78
- },
79
- ];
80
-
81
- export async function getCustomProviderFactory(id, baseUrl) {
82
- for (const entry of customProviders) {
83
- try { if (entry.match(id, baseUrl)) return await entry.load(); } catch {}
84
- }
85
- return null;
86
- }
87
-
88
- export function getCustomNormalizer(baseUrl) {
89
- for (const entry of customNormalizers) {
90
- try { if (entry.match(baseUrl)) return entry.normalize; } catch {}
91
- }
92
- return null;
93
- }
1
+ /**
2
+ * 可扩展供应商注册表:新增特殊供应商时,仅在此文件注册 + 新增对应 provider 文件即可
3
+ * 每个条目:{ id, match(id, baseUrl) => bool, load() => Promise<factory> }
4
+ * 匹配优先级:按数组顺序,首个命中即用;未命中走通用 generic
5
+ */
6
+
7
+ export const customProviders = [
8
+ {
9
+ id: "workbuddy",
10
+ match: (id, baseUrl) => id === "workbuddy" || String(baseUrl).includes("copilot.tencent"),
11
+ load: () => import("./workbuddy.js").then((m) => m.createWorkbuddyProvider),
12
+ },
13
+ {
14
+ id: "traework",
15
+ match: (id, baseUrl) => id === "traework" || String(baseUrl).includes("trae"),
16
+ load: () => import("./traework.js").then((m) => m.createTraeworkProvider),
17
+ },
18
+ {
19
+ id: "cline",
20
+ match: (id, baseUrl) => id === "cline" || String(baseUrl).includes("cline.bot"),
21
+ load: () => import("./cline.js").then((m) => m.createClineProvider),
22
+ },
23
+ {
24
+ id: "codearts",
25
+ match: (id, baseUrl) => id === "codearts" || String(baseUrl).includes("myhuaweicloud.com"),
26
+ load: () => import("./codearts.js").then((m) => m.createCodeartsProvider),
27
+ },
28
+ {
29
+ id: "qoder",
30
+ match: (id, baseUrl) => id === "qoder" || String(baseUrl).includes("qoder"),
31
+ load: () => import("./qoder/index.js").then((m) => m.createQoderProvider),
32
+ },
33
+ {
34
+ // ⚠ 必须排在 qwenwork 之前:qwenwork 的 match 用 `includes("qwenwork")`,
35
+ // 而 "globalqwenwork" 与 "gateway.qwenwork.ai"/"globalqwenwork://native" 都含该子串,
36
+ // 若后置会被 cn 条目抢先命中(first-match-wins),把国际站 token 打到 cn 网关。
37
+ id: "globalqwenwork",
38
+ match: (id, baseUrl) => id === "globalqwenwork" || String(baseUrl).includes("qwenwork.ai"),
39
+ load: () => import("./globalqwenwork/index.js").then((m) => m.createGlobalQwenworkProvider),
40
+ },
41
+ {
42
+ id: "qwenwork",
43
+ match: (id, baseUrl) => id === "qwenwork" || String(baseUrl).includes("qwenwork"),
44
+ load: () => import("./qwenwork/index.js").then((m) => m.createQwenworkProvider),
45
+ },
46
+ {
47
+ id: "zcode",
48
+ match: (id, baseUrl) => id === "zcode" || String(baseUrl).includes("zcode.z.ai"),
49
+ load: () => import("./zcode/index.js").then((m) => m.createZcodeProvider),
50
+ },
51
+ {
52
+ id: "railway",
53
+ // opencode zen free 层的另一个 IP 出口(Railway 反代),只暴露 free 模型。
54
+ // 匹配必须排在 generic 之前,且不能与其它条目撞(railway.app 域名足够独特)。
55
+ match: (id, baseUrl) => id === "railway" || String(baseUrl).includes("railway.app"),
56
+ load: () => import("./railway.js").then((m) => m.createRailwayProvider),
57
+ },
58
+ {
59
+ id: "raccoon",
60
+ match: (id, baseUrl) => id === "raccoon" || String(baseUrl).includes("xiaohuanxiong.com"),
61
+ load: () => import("./raccoon/index.js").then((m) => m.createRaccoonProvider),
62
+ },
63
+ // agentrouter 定制工厂已于 2026-10-21 摘除:现网成功率仅 ~48%(502/400/422/500 高发),
64
+ // 从注册表 + 预热名单移除后网关不再解析 agentrouter/* 模型。工厂文件 src/providers/agentrouter.js
65
+ // 与其测试保留,日后要重新启用只需在此加回一条 { id:"agentrouter", ... } 并同步 dispatcher 预热名单。
66
+ ];
67
+
68
+ // 供 bench/probe 等需要定制化解析模型列表的场景
69
+ export const customNormalizers = [
70
+ {
71
+ id: "cline",
72
+ match: (baseUrl) => String(baseUrl).includes("cline.bot"),
73
+ normalize: (json) => Array.isArray(json?.free) ? json.free : null,
74
+ },
75
+ ];
76
+
77
+ export async function getCustomProviderFactory(id, baseUrl) {
78
+ for (const entry of customProviders) {
79
+ try { if (entry.match(id, baseUrl)) return await entry.load(); } catch {}
80
+ }
81
+ return null;
82
+ }
83
+
84
+ export function getCustomNormalizer(baseUrl) {
85
+ for (const entry of customNormalizers) {
86
+ try { if (entry.match(baseUrl)) return entry.normalize; } catch {}
87
+ }
88
+ return null;
89
+ }