zames_pro 2.94.6 → 2.94.7

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 CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.94.7] - 2026-11-03
11
+
12
+ ### Fixed
13
+
14
+ - **deepseek:** recognise the server-busy notice from the SSE body
15
+
10
16
  ## [2.94.6] - 2026-11-03
11
17
 
12
18
  ### Fixed
package/dist/browser.js CHANGED
@@ -117,6 +117,10 @@ export class DeepSeekBrowser {
117
117
  // threw ds.send_no_new_answer while the chat plainly showed the rate limit.
118
118
  // Reset before a send.
119
119
  _netRateLimited;
120
+ // True when the LAST completion/continue body carried the server-busy
121
+ // notice ("Server busy, please try again later"). It arrives WITHOUT a
122
+ // DOM toast, so the SSE body is the authoritative source. Reset per send.
123
+ _netServerBusy;
120
124
  _netChatId;
121
125
  // The latest CONTEXT size (in tokens) DeepSeek reported in the current
122
126
  // chat. It is the `accumulated_token_usage` counter taken from the SSE
@@ -228,6 +232,7 @@ export class DeepSeekBrowser {
228
232
  this._netCaptureAt = 0;
229
233
  this._netNoAnswer = false;
230
234
  this._netRateLimited = false;
235
+ this._netServerBusy = false;
231
236
  this._netChatId = null;
232
237
  this._lastTokenUsage = null;
233
238
  this._toggles = { deepThinking, webSearch };
@@ -537,6 +542,13 @@ export class DeepSeekBrowser {
537
542
  this._netRateLimited = true;
538
543
  this._netCapture = '';
539
544
  }
545
+ // The SERVER-BUSY notice can arrive ONLY in the body: the toast is
546
+ // short-lived, and without this the loop waited out the deadline and
547
+ // reported "no answer" for a turn the server had refused.
548
+ if (isServerBusyText(body)) {
549
+ this._netServerBusy = true;
550
+ this._netCapture = '';
551
+ }
540
552
  this._netCaptureAt = Date.now();
541
553
  }
542
554
  }
@@ -2198,6 +2210,7 @@ export class DeepSeekBrowser {
2198
2210
  this._netCaptureAt = 0;
2199
2211
  this._netNoAnswer = false;
2200
2212
  this._netRateLimited = false;
2213
+ this._netServerBusy = false;
2201
2214
  this._netBody = '';
2202
2215
  // Align the DeepSeek chat toggles (deep thinking / web search) with the
2203
2216
  // configured state BEFORE typing. Doing it here (after the send-pause) it
@@ -2324,6 +2337,12 @@ export class DeepSeekBrowser {
2324
2337
  if (this._netRateLimited && this._netCaptureAt >= this._lastSentAt) {
2325
2338
  throw new RateLimitError(this._netBody.slice(0, 300) || 'rate limit (from network)');
2326
2339
  }
2340
+ // Body-only server-busy notice: retry instead of waiting out the
2341
+ // whole deadline (a live chat showed it while the agent reported
2342
+ // "no answer").
2343
+ if (this._netServerBusy && this._netCaptureAt >= this._lastSentAt) {
2344
+ throw new ServerBusyError(this._netBody.slice(-300));
2345
+ }
2327
2346
  // The turn was truncated by the server: the SSE body carries
2328
2347
  // finish_reason=generation_err / quasi_status=INCOMPLETE and the UI
2329
2348
  // shows "Continue". Retry instead of waiting out the whole timeout.
@@ -2579,6 +2598,12 @@ export class DeepSeekBrowser {
2579
2598
  if (this._netRateLimited && this._netCaptureAt >= this._lastSentAt) {
2580
2599
  throw new RateLimitError(this._netBody.slice(0, 300) || 'rate limit (from network)');
2581
2600
  }
2601
+ // Body-only server-busy notice: retry instead of waiting out the
2602
+ // whole deadline (a live chat showed it while the agent reported
2603
+ // "no answer").
2604
+ if (this._netServerBusy && this._netCaptureAt >= this._lastSentAt) {
2605
+ throw new ServerBusyError(this._netBody.slice(-300));
2606
+ }
2582
2607
  // The exhausted context can likewise be visible only in the captured
2583
2608
  // body rather than in a toast, so ask() must see it here as well.
2584
2609
  if (this._netCaptureAt >= this._lastSentAt &&
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.94.6",
3
+ "version": "2.94.7",
4
4
  "description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen or GLM — no API key required. Reads and edits files, runs commands, commits to git, like Claude Code / Codex CLI.",
5
5
  "type": "module",
6
6
  "bin": {