mslxdff 0.1.197 → 0.1.200

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 (97) hide show
  1. package/bin/mslxdff.js +3 -3
  2. package/docs/cli_help_mini.md +146 -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 +173 -173
  20. package/src/chat-pipeline/policy.js +84 -84
  21. package/src/chat-pipeline/serial-trial.js +8 -6
  22. package/src/cli/commands/group.js +249 -249
  23. package/src/cli/commands/model/picks.js +50 -50
  24. package/src/cli/commands/provider/bench-via.js +247 -247
  25. package/src/cli/commands/provider/bench.js +141 -141
  26. package/src/cli/commands/provider/index.js +137 -136
  27. package/src/cli/commands/provider/models.js +145 -145
  28. package/src/cli/commands/provider/qwenwork-login.js +119 -119
  29. package/src/cli/commands/provider/raccoon-login.js +29 -1
  30. package/src/cli/commands/provider/raccoon-password.js +162 -0
  31. package/src/cli/commands/sync.js +310 -310
  32. package/src/cli/status.js +279 -279
  33. package/src/daemon.js +232 -232
  34. package/src/model-capabilities/enrich.js +86 -86
  35. package/src/model-capabilities/index.js +183 -183
  36. package/src/model-capabilities/parse.js +70 -70
  37. package/src/models.js +225 -225
  38. package/src/providers/AGENTS.md +49 -0
  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 +182 -182
  43. package/src/providers/globalqwenwork/cosy.js +123 -123
  44. package/src/providers/globalqwenwork/crypto.js +218 -218
  45. package/src/providers/globalqwenwork/http.js +20 -20
  46. package/src/providers/globalqwenwork/rsa.js +54 -54
  47. package/src/providers/globalqwenwork/sse.js +268 -268
  48. package/src/providers/globalqwenwork/stream.js +130 -130
  49. package/src/providers/globalqwenwork/upstream.js +122 -122
  50. package/src/providers/keyring.js +60 -60
  51. package/src/providers/qoder/chat.js +203 -203
  52. package/src/providers/qoder/index.js +249 -249
  53. package/src/providers/qoder/sse.js +145 -145
  54. package/src/providers/qwenwork/account-store.js +133 -133
  55. package/src/providers/qwenwork/constants.js +67 -67
  56. package/src/providers/qwenwork/cosy.js +120 -120
  57. package/src/providers/qwenwork/crypto.js +218 -218
  58. package/src/providers/qwenwork/http.js +20 -20
  59. package/src/providers/qwenwork/index.js +337 -337
  60. package/src/providers/qwenwork/payload.js +144 -144
  61. package/src/providers/qwenwork/rsa.js +54 -54
  62. package/src/providers/qwenwork/sse.js +268 -268
  63. package/src/providers/qwenwork/stream.js +130 -130
  64. package/src/providers/qwenwork/upstream.js +120 -120
  65. package/src/providers/qwenwork.js +1 -1
  66. package/src/providers/raccoon/const.js +25 -0
  67. package/src/providers/raccoon/password-login.js +87 -0
  68. package/src/providers/registry.js +79 -79
  69. package/src/providers/workbuddy/chat.js +264 -264
  70. package/src/providers/workbuddy/reshape.js +152 -152
  71. package/src/providers/workbuddy.js +2 -2
  72. package/src/reasoning.js +32 -32
  73. package/src/routes/AGENTS.md +37 -0
  74. package/src/routes/chat/gateway.js +46 -46
  75. package/src/routes/chat/relay-pipeline.js +282 -282
  76. package/src/routes/chat/via-route-handler.js +146 -146
  77. package/src/routes/hedge.js +260 -260
  78. package/src/routes/models-route.js +167 -167
  79. package/src/routes/peers.js +335 -335
  80. package/src/routes/stream.js +347 -347
  81. package/src/runtime/bootstrap.js +67 -67
  82. package/src/runtime/provider-gate.js +36 -36
  83. package/src/runtime/providers-setup.js +168 -168
  84. package/src/server.js +78 -78
  85. package/src/state/schemas/allowlist.js +92 -92
  86. package/src/sync-opencode.js +280 -280
  87. package/src/transport/index.js +244 -244
  88. package/src/transport/pool.js +56 -56
  89. package/src/transport/retry.js +24 -24
  90. package/src/transport/sse.js +93 -93
  91. package/src/upstream-engine/index.js +4 -2
  92. package/src/upstream-probe/display.js +52 -52
  93. package/src/upstream-probe/probe.js +49 -49
  94. package/src/upstream-probe/rotate.js +110 -110
  95. package/src/upstream-probe/start.js +45 -45
  96. package/src/upstream.js +345 -293
  97. package/src/v6pool/rotate.js +24 -0
@@ -195,6 +195,30 @@ export function createV6Dispatcher({
195
195
  /** 手动换某个槽的源地址(供运维/测试;正常路径由配额信号触发)。 */
196
196
  swap,
197
197
 
198
+ /**
199
+ * G1a(ADR-0061):**请求内**换出口——撞出口池级 429 后由 upstream.js await 这一发,
200
+ * 把该会话粘的槽换新源地址,返回**换址完成后**的新 Agent 供同一请求立刻重发。
201
+ * 与 onTap 的 fire-and-forget 换址(只救下一个请求)不同,这里救的是**在飞请求**。
202
+ * 仅 v6 池提供本方法:换源地址成本≈0(bind/ip addr add);WARP 的换出口=重注册设备
203
+ * (6s~600s,会被 CF 限流),绝不允许在请求内做——白等 N 分钟换不来更快收场。
204
+ * 空池/全槽换址中/该槽被并发占走 ⇒ 返回 null(调用方正常收场,绝不黑洞)。
205
+ * 粘性安全:swap 是**原地**换 e.addr/e.agent(index 不变),session→slot 映射不失效。
206
+ * @param {string} sessionKey x-opencode-session 值(无 key 时由轮转游标挑槽)
207
+ * @returns {Promise<null | {agent: object, addr: string, from: string}>}
208
+ */
209
+ async rotateFor(sessionKey = "") {
210
+ if (!list.length) return null;
211
+ const avail = availableIndexes();
212
+ if (!avail.length) return null;
213
+ const index = selector.pick(avail, strategy === "session" ? sessionKey : "");
214
+ const e = list[index];
215
+ if (!e) return null;
216
+ const r = await swap(index, { kind: "in-request-rotate", status: 429, forced: true });
217
+ if (r.skipped) return null;
218
+ const slot = list[index];
219
+ return { agent: slot.agent, addr: slot.addr, from: r.from };
220
+ },
221
+
198
222
  /** 只读快照(含已退休出口的最终计数——"换址到底有没有换来新额度"看这里)。 */
199
223
  stats() {
200
224
  const t = now();