@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.js CHANGED
@@ -89,6 +89,22 @@ function isMythosAccessError(message) {
89
89
  const lower = message.toLowerCase();
90
90
  return lower.includes("mythos") && (lower.includes("not_found") || lower.includes("not found") || lower.includes("no access"));
91
91
  }
92
+ function isRawJsonErrorEcho(message) {
93
+ const trimmed = message.trim();
94
+ const jsonStart = trimmed.indexOf("{");
95
+ if (jsonStart === -1) return false;
96
+ const prefix = trimmed.slice(0, jsonStart).trim();
97
+ if (prefix && !/^\d+$/.test(prefix)) return false;
98
+ try {
99
+ const parsed = JSON.parse(trimmed.slice(jsonStart));
100
+ return typeof parsed === "object" && parsed !== null;
101
+ } catch {
102
+ return false;
103
+ }
104
+ }
105
+ function emptyProviderErrorMessage(statusCode) {
106
+ 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.";
107
+ }
92
108
  function formatError(err) {
93
109
  if (err instanceof ProviderError) {
94
110
  const name = providerDisplayName(err.provider);
@@ -1540,9 +1556,10 @@ function toError(err) {
1540
1556
  const errorBody = err.error;
1541
1557
  const nestedError = errorBody?.error;
1542
1558
  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;
1543
- const bodyMessage = typeof nestedError?.message === "string" ? nestedError.message : typeof errorBody?.message === "string" ? errorBody.message : void 0;
1559
+ const bodyMessage = typeof nestedError?.message === "string" && nestedError.message.trim() ? nestedError.message.trim() : typeof errorBody?.message === "string" && errorBody.message.trim() ? errorBody.message.trim() : void 0;
1544
1560
  const bodyType = typeof nestedError?.type === "string" ? nestedError.type : typeof errorBody?.type === "string" ? errorBody.type : typeof err.type === "string" ? err.type : void 0;
1545
- const message = bodyType && bodyMessage ? `${bodyType}: ${bodyMessage}` : bodyMessage ?? err.message;
1561
+ const fallbackMessage = isRawJsonErrorEcho(err.message) ? emptyProviderErrorMessage(err.status) : err.message;
1562
+ const message = bodyType && bodyMessage ? `${bodyType}: ${bodyMessage}` : bodyMessage ?? fallbackMessage;
1546
1563
  if (err.status === 429) {
1547
1564
  const limit = readUnifiedRateLimit(err.headers);
1548
1565
  const farOff = limit.resetsAt != null && limit.resetsAt * 1e3 - Date.now() > 6e4;
@@ -1991,7 +2008,7 @@ function toError2(err, provider = "openai") {
1991
2008
  const body = err.error;
1992
2009
  const bodyMessage = typeof body?.message === "string" && body.message.trim() ? body.message.trim() : void 0;
1993
2010
  const modelName = typeof body?.model === "string" ? body.model : "";
1994
- const cleanMessage = bodyMessage ?? err.message;
2011
+ const cleanMessage = bodyMessage ?? (isRawJsonErrorEcho(err.message) ? emptyProviderErrorMessage(err.status) : err.message);
1995
2012
  let hint;
1996
2013
  if (modelName === "codex-mini-latest" || cleanMessage.includes("codex-mini-latest")) {
1997
2014
  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.";