@umituz/web-ai 1.0.0 → 1.0.1

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 (53) hide show
  1. package/dist/{ABTesting-DDqNhHtP.d.ts → AIErrors-B2ogd1PB.d.ts} +14 -1
  2. package/dist/{ABTesting-DWBtKTMQ.d.cts → AIErrors-C5EasV_c.d.cts} +14 -1
  3. package/dist/{ProviderConfig-a55tLhWT.d.cts → ProviderConfig-DIFa9nmG.d.cts} +10 -1
  4. package/dist/{ProviderConfig-a55tLhWT.d.ts → ProviderConfig-DIFa9nmG.d.ts} +10 -1
  5. package/dist/chat/index.cjs +114 -23
  6. package/dist/chat/index.cjs.map +1 -1
  7. package/dist/chat/index.d.cts +4 -4
  8. package/dist/chat/index.d.ts +4 -4
  9. package/dist/chat/index.js +114 -23
  10. package/dist/chat/index.js.map +1 -1
  11. package/dist/{chat.service-DBKq9I2c.d.cts → chat.service-CL1qtYxe.d.cts} +7 -7
  12. package/dist/{chat.service-RQn8UTXD.d.ts → chat.service-q05GnhEm.d.ts} +7 -7
  13. package/dist/content/index.cjs +393 -186
  14. package/dist/content/index.cjs.map +1 -1
  15. package/dist/content/index.d.cts +7 -8
  16. package/dist/content/index.d.ts +7 -8
  17. package/dist/content/index.js +393 -186
  18. package/dist/content/index.js.map +1 -1
  19. package/dist/core/index.cjs +112 -15
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.d.cts +5 -33
  22. package/dist/core/index.d.ts +5 -33
  23. package/dist/core/index.js +111 -16
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/{create-ai-DGZFBOA1.d.cts → create-ai-DOI9jD3v.d.cts} +4 -21
  26. package/dist/{create-ai-BhNaz86i.d.ts → create-ai-DXEoke8-.d.ts} +4 -21
  27. package/dist/hooks/index.cjs +359 -169
  28. package/dist/hooks/index.cjs.map +1 -1
  29. package/dist/hooks/index.d.cts +6 -6
  30. package/dist/hooks/index.d.ts +6 -6
  31. package/dist/hooks/index.js +359 -169
  32. package/dist/hooks/index.js.map +1 -1
  33. package/dist/index-DIHz8_OJ.d.ts +48 -0
  34. package/dist/index-DKHNcMbl.d.cts +48 -0
  35. package/dist/index.cjs +245 -94
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +6 -6
  38. package/dist/index.d.ts +6 -6
  39. package/dist/index.js +244 -95
  40. package/dist/index.js.map +1 -1
  41. package/dist/{provider.factory-COsnprLH.d.cts → provider.factory-BxsfK4WW.d.cts} +1 -1
  42. package/dist/{provider.factory-CpWFyjbw.d.ts → provider.factory-DfDfk0dK.d.ts} +1 -1
  43. package/dist/providers/index.cjs +281 -124
  44. package/dist/providers/index.cjs.map +1 -1
  45. package/dist/providers/index.d.cts +11 -12
  46. package/dist/providers/index.d.ts +11 -12
  47. package/dist/providers/index.js +281 -124
  48. package/dist/providers/index.js.map +1 -1
  49. package/dist/wizard/index.d.cts +1 -1
  50. package/dist/wizard/index.d.ts +1 -1
  51. package/package.json +4 -1
  52. package/dist/index-DjX9ZKuM.d.cts +0 -14
  53. package/dist/index-DxLvE588.d.ts +0 -14
@@ -1,40 +1,10 @@
1
1
  export { C as ChatMessage, F as FinishReason, G as GenerationResult, P as ProviderHealth, S as StreamCallbacks, a as StructuredGeneration, b as StructuredTextRequest, T as TextRequest, c as TextTier, d as TokenUsage } from '../index-fXjxTR5W.cjs';
2
- export { T as TEXT_TIERS, a as TierModelMap, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from '../index-DjX9ZKuM.cjs';
2
+ import { b as AIErrorType, a as AIErrorMetadata } from '../index-DKHNcMbl.cjs';
3
+ export { A as AIError, T as TEXT_TIERS, c as TierModelMap, U as USER_FRIENDLY_ERROR_MESSAGES, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from '../index-DKHNcMbl.cjs';
3
4
  import { b as RetryManager, c as RetryOptions, a as RequestQueue, R as RequestDeduplicator } from '../request-deduplicator.util-NDo0_n1y.cjs';
4
5
  export { Q as QueueOptions, r as requestDeduplicator, d as requestQueue, e as retryManager, w as withRetry } from '../request-deduplicator.util-NDo0_n1y.cjs';
5
6
  export { C as CacheManager, a as CacheOptions, b as CacheStats, c as cacheManager } from '../cache-manager-Df9LLYGA.cjs';
6
7
 
7
- declare enum AIErrorType {
8
- INVALID_API_KEY = "INVALID_API_KEY",
9
- MISSING_CONFIG = "MISSING_CONFIG",
10
- NETWORK_ERROR = "NETWORK_ERROR",
11
- ABORT_ERROR = "ABORT_ERROR",
12
- RATE_LIMIT_ERROR = "RATE_LIMIT_ERROR",
13
- SERVER_ERROR = "SERVER_ERROR",
14
- CLIENT_ERROR = "CLIENT_ERROR",
15
- UNKNOWN_ERROR = "UNKNOWN_ERROR"
16
- }
17
- declare const USER_FRIENDLY_ERROR_MESSAGES: Readonly<Record<AIErrorType, string>>;
18
-
19
- interface AIErrorMetadata {
20
- readonly status?: number;
21
- readonly url?: string;
22
- readonly [key: string]: unknown;
23
- }
24
- declare class AIError extends Error {
25
- readonly type: AIErrorType;
26
- readonly cause?: Error;
27
- readonly metadata: AIErrorMetadata;
28
- constructor(type: AIErrorType, message: string, cause?: Error, metadata?: AIErrorMetadata);
29
- toString(): string;
30
- toJSON(): {
31
- name: string;
32
- type: AIErrorType;
33
- message: string;
34
- metadata: AIErrorMetadata;
35
- };
36
- }
37
-
38
8
  interface ErrorClassificationRule {
39
9
  readonly retryable: ReadonlySet<AIErrorType>;
40
10
  readonly auth: ReadonlySet<AIErrorType>;
@@ -193,6 +163,8 @@ declare class JsonResponseParser {
193
163
 
194
164
  declare function extractJsonFromCodeFence(content: string): string | null;
195
165
  declare function extractJsonObject(content: string): string | null;
166
+ declare function extractJsonArray(content: string): string | null;
167
+ declare function repairCommonJsonDefects(text: string): string;
196
168
  declare function extractJsonCandidate(content: string): string;
197
169
 
198
170
  declare class StructuredPromptBuilder {
@@ -229,4 +201,4 @@ declare const DEFAULT_RETRY_MAX_DELAY_MS = 10000;
229
201
  declare const DEFAULT_RETRY_BACKOFF_MULTIPLIER = 2;
230
202
  declare const DEFAULT_RETRY_JITTER_FACTOR = 0.1;
231
203
 
232
- export { AIError, type AIErrorBody, type AIErrorMetadata, AIErrorType, type ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, type DebounceOptions, DedupeExecutor, type DedupeExecutorOptions, type ErrorClassificationRule, type HttpStatusClassificationRule, type IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, type LoggedError, type NormalizedSseChunk, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, RetryOptions, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, type SseDeltaExtractor, type SseResponseOptions, type StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, type ThrottleOptions, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey };
204
+ export { type AIErrorBody, AIErrorMetadata, AIErrorType, type ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, type DebounceOptions, DedupeExecutor, type DedupeExecutorOptions, type ErrorClassificationRule, type HttpStatusClassificationRule, type IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, type LoggedError, type NormalizedSseChunk, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, RetryOptions, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, type SseDeltaExtractor, type SseResponseOptions, type StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, type ThrottleOptions, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey };
@@ -1,40 +1,10 @@
1
1
  export { C as ChatMessage, F as FinishReason, G as GenerationResult, P as ProviderHealth, S as StreamCallbacks, a as StructuredGeneration, b as StructuredTextRequest, T as TextRequest, c as TextTier, d as TokenUsage } from '../index-fXjxTR5W.js';
2
- export { T as TEXT_TIERS, a as TierModelMap, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from '../index-DxLvE588.js';
2
+ import { b as AIErrorType, a as AIErrorMetadata } from '../index-DIHz8_OJ.js';
3
+ export { A as AIError, T as TEXT_TIERS, c as TierModelMap, U as USER_FRIENDLY_ERROR_MESSAGES, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from '../index-DIHz8_OJ.js';
3
4
  import { b as RetryManager, c as RetryOptions, a as RequestQueue, R as RequestDeduplicator } from '../request-deduplicator.util-NDo0_n1y.js';
4
5
  export { Q as QueueOptions, r as requestDeduplicator, d as requestQueue, e as retryManager, w as withRetry } from '../request-deduplicator.util-NDo0_n1y.js';
5
6
  export { C as CacheManager, a as CacheOptions, b as CacheStats, c as cacheManager } from '../cache-manager-Df9LLYGA.js';
6
7
 
7
- declare enum AIErrorType {
8
- INVALID_API_KEY = "INVALID_API_KEY",
9
- MISSING_CONFIG = "MISSING_CONFIG",
10
- NETWORK_ERROR = "NETWORK_ERROR",
11
- ABORT_ERROR = "ABORT_ERROR",
12
- RATE_LIMIT_ERROR = "RATE_LIMIT_ERROR",
13
- SERVER_ERROR = "SERVER_ERROR",
14
- CLIENT_ERROR = "CLIENT_ERROR",
15
- UNKNOWN_ERROR = "UNKNOWN_ERROR"
16
- }
17
- declare const USER_FRIENDLY_ERROR_MESSAGES: Readonly<Record<AIErrorType, string>>;
18
-
19
- interface AIErrorMetadata {
20
- readonly status?: number;
21
- readonly url?: string;
22
- readonly [key: string]: unknown;
23
- }
24
- declare class AIError extends Error {
25
- readonly type: AIErrorType;
26
- readonly cause?: Error;
27
- readonly metadata: AIErrorMetadata;
28
- constructor(type: AIErrorType, message: string, cause?: Error, metadata?: AIErrorMetadata);
29
- toString(): string;
30
- toJSON(): {
31
- name: string;
32
- type: AIErrorType;
33
- message: string;
34
- metadata: AIErrorMetadata;
35
- };
36
- }
37
-
38
8
  interface ErrorClassificationRule {
39
9
  readonly retryable: ReadonlySet<AIErrorType>;
40
10
  readonly auth: ReadonlySet<AIErrorType>;
@@ -193,6 +163,8 @@ declare class JsonResponseParser {
193
163
 
194
164
  declare function extractJsonFromCodeFence(content: string): string | null;
195
165
  declare function extractJsonObject(content: string): string | null;
166
+ declare function extractJsonArray(content: string): string | null;
167
+ declare function repairCommonJsonDefects(text: string): string;
196
168
  declare function extractJsonCandidate(content: string): string;
197
169
 
198
170
  declare class StructuredPromptBuilder {
@@ -229,4 +201,4 @@ declare const DEFAULT_RETRY_MAX_DELAY_MS = 10000;
229
201
  declare const DEFAULT_RETRY_BACKOFF_MULTIPLIER = 2;
230
202
  declare const DEFAULT_RETRY_JITTER_FACTOR = 0.1;
231
203
 
232
- export { AIError, type AIErrorBody, type AIErrorMetadata, AIErrorType, type ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, type DebounceOptions, DedupeExecutor, type DedupeExecutorOptions, type ErrorClassificationRule, type HttpStatusClassificationRule, type IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, type LoggedError, type NormalizedSseChunk, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, RetryOptions, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, type SseDeltaExtractor, type SseResponseOptions, type StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, type ThrottleOptions, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey };
204
+ export { type AIErrorBody, AIErrorMetadata, AIErrorType, type ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, type DebounceOptions, DedupeExecutor, type DedupeExecutorOptions, type ErrorClassificationRule, type HttpStatusClassificationRule, type IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, type LoggedError, type NormalizedSseChunk, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, RetryOptions, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, type SseDeltaExtractor, type SseResponseOptions, type StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, type ThrottleOptions, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey };
@@ -41,17 +41,80 @@ var USER_FRIENDLY_ERROR_MESSAGES = {
41
41
  };
42
42
 
43
43
  // src/core/errors/ai-error.ts
44
- var AIError = class extends Error {
44
+ var KNOWN_ERROR_TYPES = new Set(Object.values(AIErrorType));
45
+ function mapCodeToType(code) {
46
+ switch (code) {
47
+ case "VALIDATION_ERROR":
48
+ case "CLIENT_ERROR":
49
+ return "CLIENT_ERROR" /* CLIENT_ERROR */;
50
+ case "INVALID_API_KEY":
51
+ return "INVALID_API_KEY" /* INVALID_API_KEY */;
52
+ case "MISSING_CONFIG":
53
+ case "PROVIDER_UNAVAILABLE":
54
+ return "MISSING_CONFIG" /* MISSING_CONFIG */;
55
+ case "PROVIDER_QUOTA_EXHAUSTED":
56
+ case "RATE_LIMIT_ERROR":
57
+ return "RATE_LIMIT_ERROR" /* RATE_LIMIT_ERROR */;
58
+ case "NETWORK_ERROR":
59
+ case "TIMEOUT":
60
+ return "NETWORK_ERROR" /* NETWORK_ERROR */;
61
+ case "ABORT_ERROR":
62
+ case "ABORTED":
63
+ return "ABORT_ERROR" /* ABORT_ERROR */;
64
+ case "SERVER_ERROR":
65
+ case "PROVIDER_ERROR":
66
+ case "NO_RESULT":
67
+ return "SERVER_ERROR" /* SERVER_ERROR */;
68
+ default:
69
+ return "UNKNOWN_ERROR" /* UNKNOWN_ERROR */;
70
+ }
71
+ }
72
+ function mapMessageToCode(message, fallback = "UNKNOWN") {
73
+ const lower = message.toLowerCase();
74
+ if (lower.includes("validation")) return "VALIDATION_ERROR";
75
+ if (lower.includes("quota")) return "PROVIDER_QUOTA_EXHAUSTED";
76
+ if (lower.includes("unavailable")) return "PROVIDER_UNAVAILABLE";
77
+ if (lower.includes("timeout") || lower.includes("aborted")) {
78
+ return lower.includes("aborted") ? "ABORTED" : "TIMEOUT";
79
+ }
80
+ if (lower.includes("parse") || lower.includes("json")) return "PARSE_ERROR";
81
+ if (lower.includes("no result")) return "NO_RESULT";
82
+ if (lower.includes("network") || lower.includes("fetch")) return "NETWORK_ERROR";
83
+ return fallback;
84
+ }
85
+ var AIError = class _AIError extends Error {
45
86
  type;
87
+ code;
46
88
  cause;
47
89
  metadata;
48
- constructor(type, message, cause, metadata = {}) {
49
- super(message);
90
+ constructor(typeOrMessage, messageOrCode, cause, metadata = {}) {
91
+ let effectiveType;
92
+ let effectiveMessage;
93
+ let effectiveCode;
94
+ if (KNOWN_ERROR_TYPES.has(typeOrMessage)) {
95
+ effectiveType = typeOrMessage;
96
+ effectiveMessage = messageOrCode ?? "";
97
+ effectiveCode = effectiveType;
98
+ } else {
99
+ effectiveMessage = typeOrMessage;
100
+ effectiveCode = messageOrCode ?? "UNKNOWN";
101
+ effectiveType = mapCodeToType(effectiveCode);
102
+ }
103
+ super(effectiveMessage);
50
104
  this.name = "AIError";
51
- this.type = type;
105
+ this.type = effectiveType;
106
+ this.code = effectiveCode;
52
107
  this.cause = cause;
53
108
  this.metadata = metadata;
54
109
  }
110
+ static from(error, fallbackCode = "UNKNOWN") {
111
+ if (error instanceof _AIError) return error;
112
+ if (error instanceof Error) {
113
+ const code = mapMessageToCode(error.message, fallbackCode);
114
+ return new _AIError(error.message, code, error);
115
+ }
116
+ return new _AIError(String(error), fallbackCode, error);
117
+ }
55
118
  toString() {
56
119
  const statusPart = typeof this.metadata.status === "number" ? ` (HTTP ${this.metadata.status})` : "";
57
120
  return `${this.name} [${this.type}]: ${this.message}${statusPart}`;
@@ -60,6 +123,7 @@ var AIError = class extends Error {
60
123
  return {
61
124
  name: this.name,
62
125
  type: this.type,
126
+ code: this.code,
63
127
  message: this.message,
64
128
  metadata: this.metadata
65
129
  };
@@ -743,15 +807,22 @@ function oneOfCatalog(catalog, value) {
743
807
  // src/core/constants/protocol.constants.ts
744
808
  var SSE_PREFIX = "data: ";
745
809
  var SSE_DONE_MARKER = "[DONE]";
746
- var JSON_CODE_BLOCK_PATTERN = /```json\n([\s\S]*?)\n```/;
810
+ var JSON_CODE_BLOCK_PATTERN = /```(?:json)?\s*\n?([\s\S]*?)\n?```/;
747
811
  var JSON_OBJECT_PATTERN = /\{[\s\S]*\}/;
812
+ var JSON_ARRAY_PATTERN = /\[[\s\S]*\]/;
748
813
 
749
814
  // src/core/parsers/sse-lines.ts
750
815
  function isSseDataLine(line) {
751
- return line.startsWith(SSE_PREFIX);
816
+ return line.startsWith(SSE_PREFIX) || line.startsWith("data:");
752
817
  }
753
818
  function extractSseDataPayload(line) {
754
- return line.slice(SSE_PREFIX.length);
819
+ if (line.startsWith(SSE_PREFIX)) {
820
+ return line.slice(SSE_PREFIX.length);
821
+ }
822
+ if (line.startsWith("data:")) {
823
+ return line.slice(5);
824
+ }
825
+ return line;
755
826
  }
756
827
  function isSseDoneMarker(payload) {
757
828
  return payload === SSE_DONE_MARKER;
@@ -823,7 +894,7 @@ var StreamingResponseParser = class {
823
894
  // src/core/parsers/json-content-extractor.ts
824
895
  function extractJsonFromCodeFence(content) {
825
896
  const match = content.match(JSON_CODE_BLOCK_PATTERN);
826
- if (match && match[1]) return match[1];
897
+ if (match && match[1]) return match[1].trim();
827
898
  return null;
828
899
  }
829
900
  function extractJsonObject(content) {
@@ -831,8 +902,27 @@ function extractJsonObject(content) {
831
902
  if (match && match[0]) return match[0];
832
903
  return null;
833
904
  }
905
+ function extractJsonArray(content) {
906
+ const match = content.match(JSON_ARRAY_PATTERN);
907
+ if (match && match[0]) return match[0];
908
+ return null;
909
+ }
910
+ function repairCommonJsonDefects(text) {
911
+ return text.replace(/(:\s*-?\d+(?:\.\d+)?)\s*"/g, "$1").replace(/(:\s*"[^"]*")"/g, "$1");
912
+ }
834
913
  function extractJsonCandidate(content) {
835
- return extractJsonFromCodeFence(content) ?? extractJsonObject(content) ?? content;
914
+ const fromFence = extractJsonFromCodeFence(content);
915
+ if (fromFence) return fromFence;
916
+ const objectIndex = content.indexOf("{");
917
+ const arrayIndex = content.indexOf("[");
918
+ if (objectIndex !== -1 && (arrayIndex === -1 || objectIndex < arrayIndex)) {
919
+ const obj = extractJsonObject(content);
920
+ if (obj) return obj;
921
+ } else if (arrayIndex !== -1) {
922
+ const arr = extractJsonArray(content);
923
+ if (arr) return arr;
924
+ }
925
+ return content.trim();
836
926
  }
837
927
 
838
928
  // src/core/parsers/json-response.parser.ts
@@ -841,12 +931,17 @@ var JsonResponseParser = class {
841
931
  const candidate = extractJsonCandidate(rawContent);
842
932
  try {
843
933
  return JSON.parse(candidate);
844
- } catch (error) {
845
- throw new AIError(
846
- "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
847
- "Failed to parse structured response as JSON",
848
- error instanceof Error ? error : void 0
849
- );
934
+ } catch {
935
+ try {
936
+ return JSON.parse(repairCommonJsonDefects(candidate));
937
+ } catch (error) {
938
+ throw new AIError(
939
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
940
+ "Failed to parse structured response as JSON",
941
+ error instanceof Error ? error : void 0,
942
+ { rawContent }
943
+ );
944
+ }
850
945
  }
851
946
  }
852
947
  };
@@ -964,6 +1059,6 @@ data: ${JSON.stringify(data)}
964
1059
  });
965
1060
  }
966
1061
 
967
- export { AIError, AIErrorType, CacheManager, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DedupeExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, StreamingResponseParser, StructuredPromptBuilder, TEXT_TIERS, ThrottleManager, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, cacheManager, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isTextTier, isValidApiKey, mergeTierOverrides, normalizeSseChunk, oneOfCatalog, requestDeduplicator, requestQueue, resolveModel, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, retryManager, splitSseLines, throttle, throttleManager, validateApiKey, withRetry };
1062
+ export { AIError, AIErrorType, CacheManager, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DedupeExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, StreamingResponseParser, StructuredPromptBuilder, TEXT_TIERS, ThrottleManager, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, cacheManager, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isTextTier, isValidApiKey, mergeTierOverrides, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, requestDeduplicator, requestQueue, resolveModel, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, retryManager, splitSseLines, throttle, throttleManager, validateApiKey, withRetry };
968
1063
  //# sourceMappingURL=index.js.map
969
1064
  //# sourceMappingURL=index.js.map