mslxdff 0.1.229 → 0.1.230

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/package.json +1 -1
  3. package/src/anthropic/request-shape.js +13 -0
  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/agentrouter.js +231 -225
  38. package/src/providers/base.js +164 -164
  39. package/src/providers/cline/auth.js +228 -228
  40. package/src/providers/cline/chat.js +307 -307
  41. package/src/providers/cline.js +2 -2
  42. package/src/providers/codearts/chat.js +207 -207
  43. package/src/providers/dispatcher.js +146 -146
  44. package/src/providers/globalqwenwork/cosy.js +123 -123
  45. package/src/providers/globalqwenwork/crypto.js +218 -218
  46. package/src/providers/globalqwenwork/http.js +20 -20
  47. package/src/providers/globalqwenwork/rsa.js +54 -54
  48. package/src/providers/globalqwenwork/sse.js +268 -268
  49. package/src/providers/globalqwenwork/stream.js +130 -130
  50. package/src/providers/globalqwenwork/upstream.js +122 -122
  51. package/src/providers/keyring.js +60 -60
  52. package/src/providers/qoder/chat.js +203 -203
  53. package/src/providers/qoder/index.js +249 -249
  54. package/src/providers/qoder/sse.js +145 -145
  55. package/src/providers/qwenwork/account-store.js +133 -133
  56. package/src/providers/qwenwork/constants.js +67 -67
  57. package/src/providers/qwenwork/cosy.js +120 -120
  58. package/src/providers/qwenwork/crypto.js +218 -218
  59. package/src/providers/qwenwork/http.js +20 -20
  60. package/src/providers/qwenwork/index.js +337 -337
  61. package/src/providers/qwenwork/payload.js +144 -144
  62. package/src/providers/qwenwork/rsa.js +54 -54
  63. package/src/providers/qwenwork/sse.js +268 -268
  64. package/src/providers/qwenwork/stream.js +130 -130
  65. package/src/providers/qwenwork/upstream.js +120 -120
  66. package/src/providers/qwenwork.js +1 -1
  67. package/src/providers/raccoon/const.js +202 -202
  68. package/src/providers/raccoon/credits.js +285 -285
  69. package/src/providers/registry.js +93 -93
  70. package/src/providers/workbuddy/chat.js +264 -264
  71. package/src/providers/workbuddy/reshape.js +152 -152
  72. package/src/providers/workbuddy.js +2 -2
  73. package/src/reasoning.js +32 -32
  74. package/src/routes/chat/broadband-handler.js +80 -80
  75. package/src/routes/chat/gateway.js +46 -46
  76. package/src/routes/chat/relay-pipeline.js +282 -282
  77. package/src/routes/chat/via-route-handler.js +156 -156
  78. package/src/routes/hedge.js +260 -260
  79. package/src/routes/models-route.js +167 -167
  80. package/src/routes/peers.js +373 -373
  81. package/src/routes/stream.js +347 -347
  82. package/src/runtime/bootstrap.js +75 -75
  83. package/src/runtime/keep-warm.js +135 -135
  84. package/src/runtime/provider-gate.js +75 -75
  85. package/src/runtime/providers-setup.js +187 -187
  86. package/src/runtime/raccoon-checkin.js +175 -175
  87. package/src/server.js +85 -85
  88. package/src/state/schemas/allowlist.js +92 -92
  89. package/src/sync-opencode.js +280 -280
  90. package/src/transport/index.js +244 -244
  91. package/src/transport/pool.js +56 -56
  92. package/src/transport/retry.js +24 -24
  93. package/src/transport/sse.js +93 -93
  94. package/src/upstream-probe/display.js +52 -52
  95. package/src/upstream-probe/probe.js +49 -49
  96. package/src/upstream-probe/rotate.js +110 -110
  97. package/src/upstream-probe/start.js +45 -45
  98. package/src/upstream.js +355 -355
  99. package/docs/cli_help_mini.md +0 -148
  100. package/src/providers/AGENTS.md +0 -49
  101. package/src/routes/AGENTS.md +0 -37
@@ -1,93 +1,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
- {
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
+ {
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
+ }