@acosmi/sdk-ts 2.9.0 → 2.11.0

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.
@@ -93,7 +93,21 @@ var init_types = __esm({
93
93
  });
94
94
 
95
95
  // src/shared/errors.ts
96
- exports.RateLimitError = void 0; exports.BusinessError = void 0; exports.OrderTerminalError = void 0; exports.ModelNotFoundError = void 0; exports.HTTPError = void 0; exports.NetworkError = void 0; exports.StreamError = void 0;
96
+ function isWindowLimitError(err) {
97
+ if (!(err instanceof exports.HTTPError)) return false;
98
+ if (err.errorCode === windowLimitErrorCode) return true;
99
+ return err.message.includes(windowLimitErrorCode) || err.body.includes(windowLimitErrorCode);
100
+ }
101
+ function isWindowLimitStreamError(err) {
102
+ if (err == null || typeof err !== "object") return false;
103
+ const e = err;
104
+ if (e.code === windowLimitStreamCode) return true;
105
+ for (const field of [e.message, e.userMessage, e.rawError]) {
106
+ if (typeof field === "string" && field.includes(windowLimitErrorCode)) return true;
107
+ }
108
+ return false;
109
+ }
110
+ exports.RateLimitError = void 0; exports.BusinessError = void 0; exports.OrderTerminalError = void 0; exports.ModelNotFoundError = void 0; exports.HTTPError = void 0; exports.NetworkError = void 0; exports.StreamError = void 0; var windowLimitErrorCode, windowLimitStreamCode;
97
111
  var init_errors = __esm({
98
112
  "src/shared/errors.ts"() {
99
113
  exports.RateLimitError = class extends Error {
@@ -140,6 +154,12 @@ var init_errors = __esm({
140
154
  retryAfter;
141
155
  /** 原始响应体 (截断到 maxErrorBodySize) */
142
156
  body;
157
+ /** 后端业务机器码 (响应体顶层 errorCode, e.g. "WINDOW_LIMIT_EXCEEDED"); 缺失为 undefined */
158
+ errorCode;
159
+ /** 窗口限额场景: 触发的滚动窗口档位 (FIVE_HOUR = 5 小时 / WEEKLY = 7 天); 缺失为 undefined */
160
+ windowKind;
161
+ /** 窗口限额场景: 预计恢复时间 (ISO-8601 UTC); 缺失为 undefined */
162
+ windowResetAt;
143
163
  constructor(statusCode, opts = {}) {
144
164
  let msg;
145
165
  if (opts.type) {
@@ -157,6 +177,9 @@ var init_errors = __esm({
157
177
  this.type = opts.type ?? "";
158
178
  this.retryAfter = opts.retryAfter ?? 0;
159
179
  this.body = opts.body ?? "";
180
+ this.errorCode = opts.errorCode;
181
+ this.windowKind = opts.windowKind;
182
+ this.windowResetAt = opts.windowResetAt;
160
183
  }
161
184
  };
162
185
  exports.NetworkError = class extends Error {
@@ -212,6 +235,8 @@ var init_errors = __esm({
212
235
  this.retryable = retryable;
213
236
  }
214
237
  };
238
+ windowLimitErrorCode = "WINDOW_LIMIT_EXCEEDED";
239
+ windowLimitStreamCode = "window_limit_exceeded";
215
240
  }
216
241
  });
217
242
 
@@ -1932,19 +1957,28 @@ function parseHTTPErrorWithHeader(statusCode, body, header) {
1932
1957
  }
1933
1958
  let type = "";
1934
1959
  let message = "";
1960
+ let errorCode;
1961
+ let windowKind;
1962
+ let windowResetAt;
1935
1963
  try {
1936
1964
  const obj = JSON.parse(bodyStr);
1937
1965
  if (obj && typeof obj === "object") {
1938
- const errObj = obj.error;
1966
+ const top = obj;
1967
+ const errObj = top.error;
1939
1968
  if (errObj && typeof errObj === "object") {
1940
1969
  const e = errObj;
1941
1970
  if (typeof e.message === "string") message = e.message;
1942
1971
  if (typeof e.type === "string") type = e.type;
1972
+ } else if (typeof top.message === "string") {
1973
+ message = top.message;
1943
1974
  }
1975
+ if (typeof top.errorCode === "string") errorCode = top.errorCode;
1976
+ if (top.windowKind === "FIVE_HOUR" || top.windowKind === "WEEKLY") windowKind = top.windowKind;
1977
+ if (typeof top.windowResetAt === "string") windowResetAt = top.windowResetAt;
1944
1978
  }
1945
1979
  } catch {
1946
1980
  }
1947
- return new exports.HTTPError(statusCode, { type, message, retryAfter, body: bodyStr });
1981
+ return new exports.HTTPError(statusCode, { type, message, retryAfter, body: bodyStr, errorCode, windowKind, windowResetAt });
1948
1982
  }
1949
1983
  function classifyTransport(op, urlStr, err) {
1950
1984
  const ne = new exports.NetworkError(op, urlStr, err);
@@ -2208,9 +2242,16 @@ var Client = class _Client {
2208
2242
  fetchImpl;
2209
2243
  /** 互斥锁 (TS 用 Promise chain 替代 sync.Mutex) */
2210
2244
  mu = Promise.resolve();
2211
- /** WebSocket 状态 (实际方法由 ws.ts mixin 维护) */
2245
+ /**
2246
+ * WebSocket 状态 (实际方法由 ws.ts mixin 维护)。
2247
+ * @internal — 实现细节: 跨模块 (ws.ts mixin) 需可见故为 public, 但非消费者 API,
2248
+ * 消费者用 connect/subscribe 等高层方法; 引用的 WSState 不进公开文档。
2249
+ */
2212
2250
  ws = null;
2213
- /** v0.15.1: token 就绪等待机制 — login 成功后 resolve, 等待方解除阻塞 */
2251
+ /**
2252
+ * v0.15.1: token 就绪等待机制 — login 成功后 resolve, 等待方解除阻塞。
2253
+ * @internal — 内部同步原语 (Deferred), 非消费者 API。
2254
+ */
2214
2255
  tokenReady = newDeferred();
2215
2256
  /** Login 进行中 — 等待方需等而非 fail-fast */
2216
2257
  loginInFlight = false;
@@ -5631,6 +5672,9 @@ function normalizeError(value) {
5631
5672
  message: stringField(value, "message", "error") || "agent run failed",
5632
5673
  stage: optionalStringField(value, "stage"),
5633
5674
  retryable: typeof value.retryable === "boolean" ? value.retryable : void 0,
5675
+ // 窗口限额扩展 (code="window_limit_exceeded"): 契约 wire 为 camelCase, 蛇形兼容兜底。
5676
+ windowKind: optionalStringField(value, "windowKind", "window_kind"),
5677
+ windowResetAt: optionalStringField(value, "windowResetAt", "window_reset_at"),
5634
5678
  raw: value
5635
5679
  };
5636
5680
  }
@@ -7692,6 +7736,8 @@ exports.isSSECommentLine = isSSECommentLine;
7692
7736
  exports.isSSLError = isSSLError;
7693
7737
  exports.isTerminalRemoteEvent = isTerminalRemoteEvent;
7694
7738
  exports.isValidTokenSet = isValidTokenSet;
7739
+ exports.isWindowLimitError = isWindowLimitError;
7740
+ exports.isWindowLimitStreamError = isWindowLimitStreamError;
7695
7741
  exports.maxEndUserIdLength = maxEndUserIdLength;
7696
7742
  exports.modelScopes = modelScopes;
7697
7743
  exports.modelSupportsImageInput = modelSupportsImageInput;