@kenkaiiii/gg-ai 5.2.0 → 5.4.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.
package/dist/index.cjs CHANGED
@@ -144,6 +144,22 @@ function isMythosAccessError(message) {
144
144
  const lower = message.toLowerCase();
145
145
  return lower.includes("mythos") && (lower.includes("not_found") || lower.includes("not found") || lower.includes("no access"));
146
146
  }
147
+ function isRawJsonErrorEcho(message) {
148
+ const trimmed = message.trim();
149
+ const jsonStart = trimmed.indexOf("{");
150
+ if (jsonStart === -1) return false;
151
+ const prefix = trimmed.slice(0, jsonStart).trim();
152
+ if (prefix && !/^\d+$/.test(prefix)) return false;
153
+ try {
154
+ const parsed = JSON.parse(trimmed.slice(jsonStart));
155
+ return typeof parsed === "object" && parsed !== null;
156
+ } catch {
157
+ return false;
158
+ }
159
+ }
160
+ function emptyProviderErrorMessage(statusCode) {
161
+ return statusCode ? `The provider returned an empty error response (HTTP ${statusCode}), with no further detail.` : "The provider returned an empty error response, with no further detail.";
162
+ }
147
163
  function formatError(err) {
148
164
  if (err instanceof ProviderError) {
149
165
  const name = providerDisplayName(err.provider);
@@ -1595,9 +1611,10 @@ function toError(err) {
1595
1611
  const errorBody = err.error;
1596
1612
  const nestedError = errorBody?.error;
1597
1613
  const requestId = err.requestID ?? err.request_id ?? (typeof errorBody?.request_id === "string" ? errorBody.request_id : void 0) ?? (typeof nestedError?.request_id === "string" ? nestedError.request_id : void 0) ?? void 0;
1598
- const bodyMessage = typeof nestedError?.message === "string" ? nestedError.message : typeof errorBody?.message === "string" ? errorBody.message : void 0;
1614
+ const bodyMessage = typeof nestedError?.message === "string" && nestedError.message.trim() ? nestedError.message.trim() : typeof errorBody?.message === "string" && errorBody.message.trim() ? errorBody.message.trim() : void 0;
1599
1615
  const bodyType = typeof nestedError?.type === "string" ? nestedError.type : typeof errorBody?.type === "string" ? errorBody.type : typeof err.type === "string" ? err.type : void 0;
1600
- const message = bodyType && bodyMessage ? `${bodyType}: ${bodyMessage}` : bodyMessage ?? err.message;
1616
+ const fallbackMessage = isRawJsonErrorEcho(err.message) ? emptyProviderErrorMessage(err.status) : err.message;
1617
+ const message = bodyType && bodyMessage ? `${bodyType}: ${bodyMessage}` : bodyMessage ?? fallbackMessage;
1601
1618
  if (err.status === 429) {
1602
1619
  const limit = readUnifiedRateLimit(err.headers);
1603
1620
  const farOff = limit.resetsAt != null && limit.resetsAt * 1e3 - Date.now() > 6e4;
@@ -2046,7 +2063,7 @@ function toError2(err, provider = "openai") {
2046
2063
  const body = err.error;
2047
2064
  const bodyMessage = typeof body?.message === "string" && body.message.trim() ? body.message.trim() : void 0;
2048
2065
  const modelName = typeof body?.model === "string" ? body.model : "";
2049
- const cleanMessage = bodyMessage ?? err.message;
2066
+ const cleanMessage = bodyMessage ?? (isRawJsonErrorEcho(err.message) ? emptyProviderErrorMessage(err.status) : err.message);
2050
2067
  let hint;
2051
2068
  if (modelName === "codex-mini-latest" || cleanMessage.includes("codex-mini-latest")) {
2052
2069
  hint = "codex-mini-latest requires an OpenAI Pro or Max subscription. Your account currently has access to GPT-5.4 and GPT-5.4 Mini.";