@burtson-labs/bandit-engine 2.0.168 → 2.1.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 (237) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +189 -31
  3. package/NOTICE +26 -0
  4. package/README.md +15 -59
  5. package/dist/aiProviderStore-42S3LW2J.mjs +8 -0
  6. package/dist/aiProviderStore-42S3LW2J.mjs.map +1 -0
  7. package/dist/chat-GDC4ZVCF.mjs +10 -0
  8. package/dist/chat-GDC4ZVCF.mjs.map +1 -0
  9. package/dist/{chunk-GRPTCHFN.mjs → chunk-5KC42IIR.mjs} +339 -155
  10. package/dist/chunk-5KC42IIR.mjs.map +1 -0
  11. package/dist/chunk-7QYA3PAF.mjs +29521 -0
  12. package/dist/chunk-7QYA3PAF.mjs.map +1 -0
  13. package/dist/{chunk-SZJB5FLZ.mjs → chunk-FCQN3LKT.mjs} +251 -77
  14. package/dist/chunk-FCQN3LKT.mjs.map +1 -0
  15. package/dist/{chunk-HNXPDIWC.mjs → chunk-NI7BKLC7.mjs} +1 -1
  16. package/dist/chunk-NI7BKLC7.mjs.map +1 -0
  17. package/dist/index.d.mts +63 -57
  18. package/dist/index.d.ts +63 -57
  19. package/dist/index.js +18053 -9606
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +16630 -142
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/{memoryUtils-HGCYEUCD.mjs → memoryUtils-UBZ33DNA.mjs} +8 -3
  24. package/dist/memoryUtils-UBZ33DNA.mjs.map +1 -0
  25. package/dist/modelStore-SEC34WRM.mjs +8 -0
  26. package/dist/modelStore-SEC34WRM.mjs.map +1 -0
  27. package/dist/{public-DJa4Db00.d.mts → public-D8UsefSk.d.mts} +21 -8
  28. package/dist/{public-DJa4Db00.d.ts → public-D8UsefSk.d.ts} +21 -8
  29. package/dist/public-types.d.mts +1 -1
  30. package/dist/public-types.d.ts +1 -1
  31. package/docs/00_intro.md +2 -2
  32. package/docs/05_contributing.md +2 -2
  33. package/docs/06_licensing.md +18 -0
  34. package/docs/07_custom_tools.md +233 -0
  35. package/docs/README.md +2 -1
  36. package/package.json +23 -20
  37. package/dist/aiProviderStore-HY5G4QAK.mjs +0 -8
  38. package/dist/aiProviderStore-HY5G4QAK.mjs.map +0 -1
  39. package/dist/chat-7LOFYEWE.mjs +0 -15
  40. package/dist/chat-7LOFYEWE.mjs.map +0 -1
  41. package/dist/chat-provider.js +0 -11080
  42. package/dist/chat-provider.js.map +0 -1
  43. package/dist/chat-provider.mjs +0 -16
  44. package/dist/chat-provider.mjs.map +0 -1
  45. package/dist/chunk-4SXXEGEK.mjs +0 -10690
  46. package/dist/chunk-4SXXEGEK.mjs.map +0 -1
  47. package/dist/chunk-62IYSU3I.mjs +0 -7324
  48. package/dist/chunk-62IYSU3I.mjs.map +0 -1
  49. package/dist/chunk-CABOLDNR.mjs +0 -216
  50. package/dist/chunk-CABOLDNR.mjs.map +0 -1
  51. package/dist/chunk-E5WMDLE3.mjs +0 -390
  52. package/dist/chunk-E5WMDLE3.mjs.map +0 -1
  53. package/dist/chunk-GRPTCHFN.mjs.map +0 -1
  54. package/dist/chunk-HNXPDIWC.mjs.map +0 -1
  55. package/dist/chunk-JD6C64CT.mjs +0 -516
  56. package/dist/chunk-JD6C64CT.mjs.map +0 -1
  57. package/dist/chunk-KAXUI5H7.mjs +0 -6009
  58. package/dist/chunk-KAXUI5H7.mjs.map +0 -1
  59. package/dist/chunk-ONQMRE2G.mjs +0 -26
  60. package/dist/chunk-ONQMRE2G.mjs.map +0 -1
  61. package/dist/chunk-P4C5IRM5.mjs +0 -39
  62. package/dist/chunk-P4C5IRM5.mjs.map +0 -1
  63. package/dist/chunk-QI67R5F6.mjs +0 -194
  64. package/dist/chunk-QI67R5F6.mjs.map +0 -1
  65. package/dist/chunk-R3NOM2DG.mjs +0 -2945
  66. package/dist/chunk-R3NOM2DG.mjs.map +0 -1
  67. package/dist/chunk-SZJB5FLZ.mjs.map +0 -1
  68. package/dist/chunk-YGOLNWXJ.mjs +0 -11906
  69. package/dist/chunk-YGOLNWXJ.mjs.map +0 -1
  70. package/dist/management/management.js +0 -44454
  71. package/dist/management/management.js.map +0 -1
  72. package/dist/management/management.mjs +0 -16
  73. package/dist/management/management.mjs.map +0 -1
  74. package/dist/memoryUtils-HGCYEUCD.mjs.map +0 -1
  75. package/dist/modals/chat-modal/chat-modal.js +0 -19730
  76. package/dist/modals/chat-modal/chat-modal.js.map +0 -1
  77. package/dist/modals/chat-modal/chat-modal.mjs +0 -18
  78. package/dist/modals/chat-modal/chat-modal.mjs.map +0 -1
  79. package/dist/modelStore-TFNX4GEC.mjs +0 -8
  80. package/dist/modelStore-TFNX4GEC.mjs.map +0 -1
  81. package/dist/shared/custom-element.js +0 -73
  82. package/dist/shared/custom-element.js.map +0 -1
  83. package/dist/shared/custom-element.mjs +0 -7
  84. package/dist/shared/custom-element.mjs.map +0 -1
  85. package/docs/06_busl_licensing.md +0 -25
  86. package/docs/api_reference/.nojekyll +0 -1
  87. package/docs/api_reference/assets/bandit-docs.js +0 -462
  88. package/docs/api_reference/assets/highlight.css +0 -141
  89. package/docs/api_reference/assets/icons.js +0 -18
  90. package/docs/api_reference/assets/icons.svg +0 -1
  91. package/docs/api_reference/assets/main.js +0 -61
  92. package/docs/api_reference/assets/navigation.js +0 -1
  93. package/docs/api_reference/assets/search.js +0 -1
  94. package/docs/api_reference/assets/style.css +0 -1664
  95. package/docs/api_reference/classes/DebugLogger.html +0 -29
  96. package/docs/api_reference/classes/FeatureFlagService.html +0 -28
  97. package/docs/api_reference/classes/NotificationService.html +0 -21
  98. package/docs/api_reference/classes/StreamingTTSClient.html +0 -19
  99. package/docs/api_reference/classes/VectorDatabaseService.html +0 -63
  100. package/docs/api_reference/classes/VectorMigrationService.html +0 -27
  101. package/docs/api_reference/classes/VoiceService.html +0 -4
  102. package/docs/api_reference/enums/TTSState.html +0 -6
  103. package/docs/api_reference/functions/Chat.html +0 -1
  104. package/docs/api_reference/functions/ChatModal.html +0 -29
  105. package/docs/api_reference/functions/ChatProvider.html +0 -29
  106. package/docs/api_reference/functions/FeatureFlagProvider.html +0 -30
  107. package/docs/api_reference/functions/FeedbackButton.html +0 -29
  108. package/docs/api_reference/functions/FeedbackModal.html +0 -29
  109. package/docs/api_reference/functions/InterestsEditor.html +0 -5
  110. package/docs/api_reference/functions/Management.html +0 -1
  111. package/docs/api_reference/functions/NotificationProvider.html +0 -29
  112. package/docs/api_reference/functions/SubscriptionExpiredGuard.html +0 -31
  113. package/docs/api_reference/functions/SubscriptionExpiredModal.html +0 -31
  114. package/docs/api_reference/functions/defineCustomElement.html +0 -1
  115. package/docs/api_reference/functions/getCriticalConfig.html +0 -2
  116. package/docs/api_reference/functions/getFeatureMatrix.html +0 -1
  117. package/docs/api_reference/functions/getStreamingTTSClient.html +0 -1
  118. package/docs/api_reference/functions/getSystemConstants.html +0 -2
  119. package/docs/api_reference/functions/getTTSState.html +0 -1
  120. package/docs/api_reference/functions/handleHttpError.html +0 -2
  121. package/docs/api_reference/functions/handleSubscriptionUpgrade.html +0 -1
  122. package/docs/api_reference/functions/handleValidationError.html +0 -2
  123. package/docs/api_reference/functions/initializeCoreSystem.html +0 -2
  124. package/docs/api_reference/functions/isWorkspaceAdminRole.html +0 -6
  125. package/docs/api_reference/functions/pauseTTS.html +0 -1
  126. package/docs/api_reference/functions/previewTierUpgrade.html +0 -1
  127. package/docs/api_reference/functions/resolveManagementSections.html +0 -2
  128. package/docs/api_reference/functions/resumeTTS.html +0 -1
  129. package/docs/api_reference/functions/showInfoNotification.html +0 -2
  130. package/docs/api_reference/functions/showSuccessNotification.html +0 -2
  131. package/docs/api_reference/functions/speakWithStreaming.html +0 -1
  132. package/docs/api_reference/functions/stopTTS.html +0 -1
  133. package/docs/api_reference/functions/syncSubscriptionWithAPI.html +0 -1
  134. package/docs/api_reference/functions/updateSubscriptionTier.html +0 -2
  135. package/docs/api_reference/functions/useFeatureFlag.html +0 -2
  136. package/docs/api_reference/functions/useFeatureVisibility.html +0 -2
  137. package/docs/api_reference/functions/useFeatures.html +0 -2
  138. package/docs/api_reference/functions/useGatewayHealth.html +0 -1
  139. package/docs/api_reference/functions/useGatewayMemory.html +0 -1
  140. package/docs/api_reference/functions/useGatewayModels.html +0 -1
  141. package/docs/api_reference/functions/useGlobalTTS.html +0 -2
  142. package/docs/api_reference/functions/useManagementAccess.html +0 -2
  143. package/docs/api_reference/functions/useNotification.html +0 -1
  144. package/docs/api_reference/functions/useNotificationService.html +0 -6
  145. package/docs/api_reference/functions/useTTS.html +0 -2
  146. package/docs/api_reference/functions/useVectorStore.html +0 -13
  147. package/docs/api_reference/functions/useVoiceStore.html +0 -8
  148. package/docs/api_reference/functions/useVoices.html +0 -3
  149. package/docs/api_reference/functions/validateEnvironment.html +0 -2
  150. package/docs/api_reference/functions/validateSystemIntegrity.html +0 -2
  151. package/docs/api_reference/index.html +0 -916
  152. package/docs/api_reference/interfaces/AIChatRequest.html +0 -8
  153. package/docs/api_reference/interfaces/AIChatResponse.html +0 -3
  154. package/docs/api_reference/interfaces/AIGenerateRequest.html +0 -5
  155. package/docs/api_reference/interfaces/AIGenerateResponse.html +0 -3
  156. package/docs/api_reference/interfaces/AIMessage.html +0 -4
  157. package/docs/api_reference/interfaces/AIModel.html +0 -6
  158. package/docs/api_reference/interfaces/AIProviderConfig.html +0 -12
  159. package/docs/api_reference/interfaces/ChatConfig.html +0 -5
  160. package/docs/api_reference/interfaces/ChatModalProps.html +0 -7
  161. package/docs/api_reference/interfaces/CreateMemoryOptions.html +0 -7
  162. package/docs/api_reference/interfaces/FeatureEvaluation.html +0 -14
  163. package/docs/api_reference/interfaces/FeatureFlagConfig.html +0 -18
  164. package/docs/api_reference/interfaces/FeatureFlagContextValue.html +0 -16
  165. package/docs/api_reference/interfaces/FeatureFlagProviderProps.html +0 -4
  166. package/docs/api_reference/interfaces/FeedbackButtonProps.html +0 -19
  167. package/docs/api_reference/interfaces/FeedbackCategories.html +0 -6
  168. package/docs/api_reference/interfaces/FeedbackModalProps.html +0 -4
  169. package/docs/api_reference/interfaces/FeedbackPriorities.html +0 -5
  170. package/docs/api_reference/interfaces/FeedbackRequest.html +0 -12
  171. package/docs/api_reference/interfaces/FeedbackResponse.html +0 -7
  172. package/docs/api_reference/interfaces/FileUploadResult.html +0 -4
  173. package/docs/api_reference/interfaces/GatewayChatRequest.html +0 -13
  174. package/docs/api_reference/interfaces/GatewayChatResponse.html +0 -7
  175. package/docs/api_reference/interfaces/GatewayContract.html +0 -4
  176. package/docs/api_reference/interfaces/GatewayGenerateRequest.html +0 -8
  177. package/docs/api_reference/interfaces/GatewayGenerateResponse.html +0 -12
  178. package/docs/api_reference/interfaces/GatewayHealthResponse.html +0 -5
  179. package/docs/api_reference/interfaces/GatewayMemoryRecord.html +0 -7
  180. package/docs/api_reference/interfaces/GatewayMemoryResponse.html +0 -4
  181. package/docs/api_reference/interfaces/GatewayMessage.html +0 -5
  182. package/docs/api_reference/interfaces/GatewayMessageContent.html +0 -4
  183. package/docs/api_reference/interfaces/GatewayModel.html +0 -9
  184. package/docs/api_reference/interfaces/GatewayModelsResponse.html +0 -2
  185. package/docs/api_reference/interfaces/ManagementAccess.html +0 -5
  186. package/docs/api_reference/interfaces/ManagementAccessInput.html +0 -5
  187. package/docs/api_reference/interfaces/ManagementLink.html +0 -7
  188. package/docs/api_reference/interfaces/ManagementProps.html +0 -22
  189. package/docs/api_reference/interfaces/ManagementSectionDef.html +0 -10
  190. package/docs/api_reference/interfaces/MemorySearchFilters.html +0 -5
  191. package/docs/api_reference/interfaces/MigrationProgress.html +0 -6
  192. package/docs/api_reference/interfaces/MigrationStatus.html +0 -7
  193. package/docs/api_reference/interfaces/NotificationConfig.html +0 -5
  194. package/docs/api_reference/interfaces/NotificationContextType.html +0 -6
  195. package/docs/api_reference/interfaces/NotificationProviderProps.html +0 -4
  196. package/docs/api_reference/interfaces/PackageSettings.html +0 -22
  197. package/docs/api_reference/interfaces/SearchOptions.html +0 -6
  198. package/docs/api_reference/interfaces/SearchResult.html +0 -5
  199. package/docs/api_reference/interfaces/SubscriptionExpiredGuardProps.html +0 -7
  200. package/docs/api_reference/interfaces/SubscriptionExpiredModalProps.html +0 -6
  201. package/docs/api_reference/interfaces/TTSOptions.html +0 -5
  202. package/docs/api_reference/interfaces/TTSProgress.html +0 -6
  203. package/docs/api_reference/interfaces/TrialUsage.html +0 -6
  204. package/docs/api_reference/interfaces/UploadRequest.html +0 -9
  205. package/docs/api_reference/interfaces/UseTTSReturn.html +0 -14
  206. package/docs/api_reference/interfaces/VectorDocument.html +0 -11
  207. package/docs/api_reference/interfaces/VectorMemory.html +0 -12
  208. package/docs/api_reference/interfaces/VectorMemoryMetadata.html +0 -7
  209. package/docs/api_reference/interfaces/VectorStoreStatus.html +0 -7
  210. package/docs/api_reference/interfaces/VoiceModelsResponse.html +0 -4
  211. package/docs/api_reference/interfaces/VoiceState.html +0 -12
  212. package/docs/api_reference/media/02_gateway_api.md +0 -123
  213. package/docs/api_reference/media/05_cli_quickstart.md +0 -87
  214. package/docs/api_reference/media/LICENSE +0 -43
  215. package/docs/api_reference/media/PRE-PUSH-CHECKLIST.md +0 -10
  216. package/docs/api_reference/media/PROTECTION-NOTICE.md +0 -11
  217. package/docs/api_reference/media/README.md +0 -58
  218. package/docs/api_reference/modules.html +0 -136
  219. package/docs/api_reference/types/FeatureKey.html +0 -2
  220. package/docs/api_reference/types/FeatureMatrix.html +0 -2
  221. package/docs/api_reference/types/GatewayQueryOptions.html +0 -1
  222. package/docs/api_reference/types/LogContext.html +0 -14
  223. package/docs/api_reference/types/ManagementRequest.html +0 -1
  224. package/docs/api_reference/types/ManagementSectionId.html +0 -2
  225. package/docs/api_reference/types/SubscriptionTier.html +0 -2
  226. package/docs/api_reference/variables/DEFAULT_TIER_FEATURES.html +0 -2
  227. package/docs/api_reference/variables/FeatureFlagContext.html +0 -1
  228. package/docs/api_reference/variables/MANAGEMENT_SECTIONS.html +0 -1
  229. package/docs/api_reference/variables/OSS_DEFAULT_FEATURES.html +0 -2
  230. package/docs/api_reference/variables/SYSTEM_FLAGS.html +0 -2
  231. package/docs/api_reference/variables/authenticationService.html +0 -1
  232. package/docs/api_reference/variables/debugLogger-1.html +0 -1
  233. package/docs/api_reference/variables/featureFlagService-1.html +0 -2
  234. package/docs/api_reference/variables/notificationService-1.html +0 -1
  235. package/docs/api_reference/variables/vectorDatabaseService-1.html +0 -1
  236. package/docs/api_reference/variables/vectorMigrationService-1.html +0 -1
  237. package/docs/api_reference/variables/voiceService-1.html +0 -1
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  debugLogger
3
- } from "./chunk-HNXPDIWC.mjs";
3
+ } from "./chunk-NI7BKLC7.mjs";
4
4
 
5
5
  // src/store/aiProviderStore.ts
6
6
  import { create as create2 } from "zustand";
@@ -9,7 +9,18 @@ import { create as create2 } from "zustand";
9
9
  import { map as map2 } from "rxjs";
10
10
 
11
11
  // src/services/ollama/ollama.service.ts
12
- import { catchError, from, lastValueFrom, map, Observable, of, shareReplay, switchMap, throwError, timeout } from "rxjs";
12
+ import {
13
+ catchError,
14
+ from,
15
+ lastValueFrom,
16
+ map,
17
+ Observable,
18
+ of,
19
+ shareReplay,
20
+ switchMap,
21
+ throwError,
22
+ timeout
23
+ } from "rxjs";
13
24
 
14
25
  // src/services/stream/streamLineParser.ts
15
26
  var SKIP = { kind: "skip" };
@@ -42,7 +53,9 @@ var StreamLineParser = class {
42
53
  // src/services/ollama/ollama.service.ts
43
54
  var handleError = () => (obs) => obs.pipe(
44
55
  switchMap(
45
- (response) => response.ok ? of(response) : throwError(() => new Error(`Request failed: ${response.status} ${response.statusText}`))
56
+ (response) => response.ok ? of(response) : throwError(
57
+ () => new Error(`Request failed: ${response.status} ${response.statusText}`)
58
+ )
46
59
  )
47
60
  );
48
61
  var parseResponseBody = async (response, responseType) => {
@@ -97,7 +110,9 @@ var OllamaService = class {
97
110
  }
98
111
  return availablility;
99
112
  } catch (e) {
100
- debugLogger.warn(`Service not available at ${this._baseUrl}, trying fallback URL: ${fallbackUrl}`);
113
+ debugLogger.warn(
114
+ `Service not available at ${this._baseUrl}, trying fallback URL: ${fallbackUrl}`
115
+ );
101
116
  try {
102
117
  availablility.url = fallbackUrl;
103
118
  availablility.isAvailable = await lastValueFrom(
@@ -124,7 +139,10 @@ var OllamaService = class {
124
139
  const task = fetch(url, {
125
140
  method: "POST",
126
141
  headers: this._getHeaders(),
127
- body: JSON.stringify({ ...request, stream: request.stream === false ? false : true })
142
+ body: JSON.stringify({
143
+ ...request,
144
+ stream: request.stream === false ? false : true
145
+ })
128
146
  });
129
147
  task.then((response) => {
130
148
  this._throwErrorIfNotOk(url, response);
@@ -141,7 +159,9 @@ var OllamaService = class {
141
159
  observer.next(JSON.parse(tail.text));
142
160
  } catch (err) {
143
161
  observer.error(err);
144
- debugLogger.error("Final chunk parsing error (generate):", { buffer });
162
+ debugLogger.error("Final chunk parsing error (generate):", {
163
+ buffer
164
+ });
145
165
  }
146
166
  }
147
167
  observer.complete();
@@ -238,18 +258,24 @@ var OllamaService = class {
238
258
  };
239
259
  const response = from(fetch(url, requestInit));
240
260
  const handleFetchError = response.pipe(handleError());
241
- const data = handleFetchError.pipe(switchMap((res) => from(parseResponseBody(res, responseType))));
261
+ const data = handleFetchError.pipe(
262
+ switchMap((res) => from(parseResponseBody(res, responseType)))
263
+ );
242
264
  const result = data.pipe(shareReplay(1));
243
265
  return result;
244
266
  }
245
267
  _post(url, body) {
246
- const response = from(fetch(url, {
247
- method: "POST",
248
- headers: this._getHeaders(),
249
- body: JSON.stringify(body)
250
- }));
268
+ const response = from(
269
+ fetch(url, {
270
+ method: "POST",
271
+ headers: this._getHeaders(),
272
+ body: JSON.stringify(body)
273
+ })
274
+ );
251
275
  const handleFetchError = response.pipe(handleError());
252
- const json = handleFetchError.pipe(switchMap((res) => from(parseResponseBody(res, "json"))));
276
+ const json = handleFetchError.pipe(
277
+ switchMap((res) => from(parseResponseBody(res, "json")))
278
+ );
253
279
  const result = json.pipe(shareReplay(1));
254
280
  return result;
255
281
  }
@@ -261,27 +287,37 @@ var OllamaService = class {
261
287
  _getHeaders() {
262
288
  const token = this._tokenFactory();
263
289
  if (!token) {
264
- debugLogger.warn("OllamaService: No token found, using empty string for Authorization header");
290
+ debugLogger.warn(
291
+ "OllamaService: No token found, using empty string for Authorization header"
292
+ );
265
293
  }
266
294
  return {
267
295
  "Content-Type": "application/json",
268
- "Authorization": `Bearer ${token || ""}`
296
+ Authorization: `Bearer ${token || ""}`
269
297
  };
270
298
  }
271
299
  };
272
300
 
273
301
  // src/services/ai-provider/providers/deprecated.ts
274
302
  function deprecatedOpenAIProvider() {
275
- debugLogger.warn('\u26A0\uFE0F DEPRECATION WARNING: Direct OpenAI provider is deprecated. Please migrate to GatewayProvider with provider: "openai". See GATEWAY_MIGRATION_GUIDE.md for details.');
303
+ debugLogger.warn(
304
+ '\u26A0\uFE0F DEPRECATION WARNING: Direct OpenAI provider is deprecated. Please migrate to GatewayProvider with provider: "openai". See GATEWAY_MIGRATION_GUIDE.md for details.'
305
+ );
276
306
  }
277
307
  function deprecatedAzureOpenAIProvider() {
278
- debugLogger.warn('\u26A0\uFE0F DEPRECATION WARNING: Direct Azure OpenAI provider is deprecated. Please migrate to GatewayProvider with provider: "azure-openai". See GATEWAY_MIGRATION_GUIDE.md for details.');
308
+ debugLogger.warn(
309
+ '\u26A0\uFE0F DEPRECATION WARNING: Direct Azure OpenAI provider is deprecated. Please migrate to GatewayProvider with provider: "azure-openai". See GATEWAY_MIGRATION_GUIDE.md for details.'
310
+ );
279
311
  }
280
312
  function deprecatedAnthropicProvider() {
281
- debugLogger.warn('\u26A0\uFE0F DEPRECATION WARNING: Direct Anthropic provider is deprecated. Please migrate to GatewayProvider with provider: "anthropic". See GATEWAY_MIGRATION_GUIDE.md for details.');
313
+ debugLogger.warn(
314
+ '\u26A0\uFE0F DEPRECATION WARNING: Direct Anthropic provider is deprecated. Please migrate to GatewayProvider with provider: "anthropic". See GATEWAY_MIGRATION_GUIDE.md for details.'
315
+ );
282
316
  }
283
317
  function deprecatedOllamaProvider() {
284
- debugLogger.info('\u2139\uFE0F INFO: Direct Ollama provider is available for local development. For production environments, consider using GatewayProvider with provider: "ollama" for enhanced management. See GATEWAY_MIGRATION_GUIDE.md for details.');
318
+ debugLogger.info(
319
+ '\u2139\uFE0F INFO: Direct Ollama provider is available for local development. For production environments, consider using GatewayProvider with provider: "ollama" for enhanced management. See GATEWAY_MIGRATION_GUIDE.md for details.'
320
+ );
285
321
  }
286
322
 
287
323
  // src/services/ai-provider/providers/ollama.provider.ts
@@ -297,10 +333,7 @@ var OllamaProvider = class {
297
333
  finalBaseUrl: baseUrl,
298
334
  hasTokenFactory: !!config.tokenFactory
299
335
  });
300
- this.ollamaService = new OllamaService(
301
- baseUrl,
302
- config.tokenFactory || (() => null)
303
- );
336
+ this.ollamaService = new OllamaService(baseUrl, config.tokenFactory || (() => null));
304
337
  }
305
338
  chat(request) {
306
339
  const ollamaRequest = {
@@ -339,13 +372,15 @@ var OllamaProvider = class {
339
372
  }
340
373
  listModels() {
341
374
  return this.ollamaService.listModels().pipe(
342
- map2((models) => models.map((model) => ({
343
- name: model.name,
344
- size: model.size,
345
- details: model.details,
346
- digest: model.digest,
347
- modified_at: model.modified_at
348
- })))
375
+ map2(
376
+ (models) => models.map((model) => ({
377
+ name: model.name,
378
+ size: model.size,
379
+ details: model.details,
380
+ digest: model.digest,
381
+ modified_at: model.modified_at
382
+ }))
383
+ )
349
384
  );
350
385
  }
351
386
  async validateServiceAvailability(args) {
@@ -403,9 +438,11 @@ var OpenAIProvider = class {
403
438
  }
404
439
  listModels() {
405
440
  const url = `${this.baseUrl}/models`;
406
- return from2(fetch(url, {
407
- headers: this.getHeaders()
408
- })).pipe(
441
+ return from2(
442
+ fetch(url, {
443
+ headers: this.getHeaders()
444
+ })
445
+ ).pipe(
409
446
  switchMap2((response) => {
410
447
  if (!response.ok) {
411
448
  return throwError2(() => new Error(`Failed to list models: ${response.status}`));
@@ -520,7 +557,10 @@ var OpenAIProvider = class {
520
557
  });
521
558
  }
522
559
  } catch (err) {
523
- debugLogger.error("Error parsing OpenAI stream data:", { data, error: err });
560
+ debugLogger.error("Error parsing OpenAI stream data:", {
561
+ data,
562
+ error: err
563
+ });
524
564
  }
525
565
  }
526
566
  }
@@ -532,14 +572,16 @@ var OpenAIProvider = class {
532
572
  });
533
573
  }
534
574
  nonStreamChatRequest(url, payload) {
535
- return from2(fetch(url, {
536
- method: "POST",
537
- headers: {
538
- ...this.getHeaders(),
539
- "Content-Type": "application/json"
540
- },
541
- body: JSON.stringify(payload)
542
- })).pipe(
575
+ return from2(
576
+ fetch(url, {
577
+ method: "POST",
578
+ headers: {
579
+ ...this.getHeaders(),
580
+ "Content-Type": "application/json"
581
+ },
582
+ body: JSON.stringify(payload)
583
+ })
584
+ ).pipe(
543
585
  switchMap2((response) => {
544
586
  if (!response.ok) {
545
587
  return throwError2(() => new Error(`OpenAI request failed: ${response.status}`));
@@ -728,7 +770,10 @@ var AzureOpenAIProvider = class {
728
770
  });
729
771
  }
730
772
  } catch (err) {
731
- debugLogger.error("Error parsing Azure OpenAI stream data:", { data, error: err });
773
+ debugLogger.error("Error parsing Azure OpenAI stream data:", {
774
+ data,
775
+ error: err
776
+ });
732
777
  }
733
778
  }
734
779
  }
@@ -740,17 +785,21 @@ var AzureOpenAIProvider = class {
740
785
  });
741
786
  }
742
787
  nonStreamChatRequest(url, payload) {
743
- return from3(fetch(url, {
744
- method: "POST",
745
- headers: {
746
- ...this.getHeaders(),
747
- "Content-Type": "application/json"
748
- },
749
- body: JSON.stringify(payload)
750
- })).pipe(
788
+ return from3(
789
+ fetch(url, {
790
+ method: "POST",
791
+ headers: {
792
+ ...this.getHeaders(),
793
+ "Content-Type": "application/json"
794
+ },
795
+ body: JSON.stringify(payload)
796
+ })
797
+ ).pipe(
751
798
  switchMap3((response) => {
752
799
  if (!response.ok) {
753
- return throwError3(() => new Error(`Azure OpenAI request failed: ${response.status}`));
800
+ return throwError3(
801
+ () => new Error(`Azure OpenAI request failed: ${response.status}`)
802
+ );
754
803
  }
755
804
  return from3(response.json());
756
805
  }),
@@ -979,7 +1028,10 @@ var AnthropicProvider = class {
979
1028
  });
980
1029
  }
981
1030
  } catch (err) {
982
- debugLogger.error("Error parsing Anthropic stream data:", { data, error: err });
1031
+ debugLogger.error("Error parsing Anthropic stream data:", {
1032
+ data,
1033
+ error: err
1034
+ });
983
1035
  }
984
1036
  }
985
1037
  }
@@ -991,17 +1043,21 @@ var AnthropicProvider = class {
991
1043
  });
992
1044
  }
993
1045
  nonStreamChatRequest(url, payload) {
994
- return from4(fetch(url, {
995
- method: "POST",
996
- headers: {
997
- ...this.getHeaders(),
998
- "Content-Type": "application/json"
999
- },
1000
- body: JSON.stringify(payload)
1001
- })).pipe(
1046
+ return from4(
1047
+ fetch(url, {
1048
+ method: "POST",
1049
+ headers: {
1050
+ ...this.getHeaders(),
1051
+ "Content-Type": "application/json"
1052
+ },
1053
+ body: JSON.stringify(payload)
1054
+ })
1055
+ ).pipe(
1002
1056
  switchMap4((response) => {
1003
1057
  if (!response.ok) {
1004
- return throwError4(() => new Error(`Anthropic request failed: ${response.status}`));
1058
+ return throwError4(
1059
+ () => new Error(`Anthropic request failed: ${response.status}`)
1060
+ );
1005
1061
  }
1006
1062
  return from4(response.json());
1007
1063
  }),
@@ -1053,9 +1109,42 @@ var AnthropicProvider = class {
1053
1109
  // src/services/ai-provider/providers/gateway.provider.ts
1054
1110
  import { map as map12 } from "rxjs";
1055
1111
 
1112
+ // src/services/ai-provider/context-sources.ts
1113
+ var MAX_LABEL = 120;
1114
+ var clean = (value) => {
1115
+ if (typeof value !== "string") return void 0;
1116
+ const trimmed = value.trim();
1117
+ if (!trimmed) return void 0;
1118
+ return trimmed.length > MAX_LABEL ? `${trimmed.slice(0, MAX_LABEL - 1)}\u2026` : trimmed;
1119
+ };
1120
+ var readContextSourcesField = (chunk) => {
1121
+ if (!chunk || typeof chunk !== "object") return void 0;
1122
+ const record = chunk;
1123
+ const raw = record.context_sources ?? record.contextSources;
1124
+ if (!Array.isArray(raw)) return void 0;
1125
+ const out = [];
1126
+ for (const entry of raw) {
1127
+ if (!entry || typeof entry !== "object") continue;
1128
+ const label = clean(entry.label);
1129
+ if (!label) continue;
1130
+ const detail = clean(entry.detail);
1131
+ out.push(detail ? { label, detail } : { label });
1132
+ }
1133
+ return out.length ? out : void 0;
1134
+ };
1135
+
1056
1136
  // src/services/gateway/gateway.service.ts
1057
1137
  import axios, { AxiosHeaders } from "axios";
1058
- import { catchError as catchError2, from as from5, lastValueFrom as lastValueFrom2, map as map6, Observable as Observable6, of as of2, shareReplay as shareReplay2, timeout as timeout2 } from "rxjs";
1138
+ import {
1139
+ catchError as catchError2,
1140
+ from as from5,
1141
+ lastValueFrom as lastValueFrom2,
1142
+ map as map6,
1143
+ Observable as Observable6,
1144
+ of as of2,
1145
+ shareReplay as shareReplay2,
1146
+ timeout as timeout2
1147
+ } from "rxjs";
1059
1148
 
1060
1149
  // src/store/authenticationStore.ts
1061
1150
  import { create } from "zustand";
@@ -1122,9 +1211,11 @@ function emitAuthTokenChanged(token) {
1122
1211
  if (typeof window === "undefined") {
1123
1212
  return;
1124
1213
  }
1125
- window.dispatchEvent(new CustomEvent(AUTH_TOKEN_CHANGED_EVENT, {
1126
- detail: { token }
1127
- }));
1214
+ window.dispatchEvent(
1215
+ new CustomEvent(AUTH_TOKEN_CHANGED_EVENT, {
1216
+ detail: { token }
1217
+ })
1218
+ );
1128
1219
  }
1129
1220
  var readLocalStorage = () => {
1130
1221
  try {
@@ -1238,8 +1329,10 @@ var AuthenticationService = class {
1238
1329
  }
1239
1330
  }
1240
1331
  parseJwtClaims(token) {
1332
+ const parts = token ? token.split(".") : [];
1333
+ if (parts.length !== 3) return null;
1241
1334
  try {
1242
- const base64Url = token.split(".")[1];
1335
+ const base64Url = parts[1];
1243
1336
  const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
1244
1337
  const jsonPayload = decodeURIComponent(
1245
1338
  atob(base64).split("").map((c) => {
@@ -1323,7 +1416,8 @@ var GatewayService = class {
1323
1416
  */
1324
1417
  async _retryAfterRefresh(instance, error) {
1325
1418
  const config = error.config;
1326
- if (!config || config._banditAuthRetried || error.response?.status !== 401) return null;
1419
+ if (!config || config._banditAuthRetried || error.response?.status !== 401)
1420
+ return null;
1327
1421
  if (!authenticationService.canRefresh()) return null;
1328
1422
  const data = error.response?.data;
1329
1423
  if (data?.code && data.code !== "TOKEN_EXPIRED") return null;
@@ -1418,7 +1512,9 @@ var GatewayService = class {
1418
1512
  return availability;
1419
1513
  } catch (e) {
1420
1514
  if (fallbackUrl) {
1421
- debugLogger.warn(`Gateway service not available at ${this._baseUrl}, trying fallback URL: ${fallbackUrl}`);
1515
+ debugLogger.warn(
1516
+ `Gateway service not available at ${this._baseUrl}, trying fallback URL: ${fallbackUrl}`
1517
+ );
1422
1518
  try {
1423
1519
  availability.url = fallbackUrl.replace(/\/$/, "");
1424
1520
  availability.isAvailable = await lastValueFrom2(
@@ -1434,7 +1530,9 @@ var GatewayService = class {
1434
1530
  this._setBaseUrl(availability.url);
1435
1531
  return availability;
1436
1532
  } catch (e2) {
1437
- debugLogger.error(`Gateway service not available at fallback URL: ${fallbackUrl}`);
1533
+ debugLogger.error(
1534
+ `Gateway service not available at fallback URL: ${fallbackUrl}`
1535
+ );
1438
1536
  throw e2;
1439
1537
  }
1440
1538
  } else {
@@ -1460,7 +1558,11 @@ var GatewayService = class {
1460
1558
  const trimmed = (request.model ?? "").replace(/^bandit:/, "").trim();
1461
1559
  return trimmed !== "" ? trimmed : "bandit-core-1";
1462
1560
  })() : request.model;
1463
- const requestBody = { ...request, model: normalizedModel, stream: request.stream !== false };
1561
+ const requestBody = {
1562
+ ...request,
1563
+ model: normalizedModel,
1564
+ stream: request.stream !== false
1565
+ };
1464
1566
  return new Observable6((observer) => {
1465
1567
  const controller = new AbortController();
1466
1568
  const handleStreamingResponse = async (response) => {
@@ -1477,7 +1579,10 @@ var GatewayService = class {
1477
1579
  const finalResponse = JSON.parse(tail.text);
1478
1580
  observer.next(finalResponse);
1479
1581
  } catch (err) {
1480
- debugLogger.error("GatewayService chat final chunk parsing error", { buffer, error: err });
1582
+ debugLogger.error("GatewayService chat final chunk parsing error", {
1583
+ buffer,
1584
+ error: err
1585
+ });
1481
1586
  observer.error(err);
1482
1587
  }
1483
1588
  }
@@ -1502,17 +1607,21 @@ var GatewayService = class {
1502
1607
  const transformed = {
1503
1608
  id: `chatcmpl-${Date.now()}`,
1504
1609
  object: "chat.completion.chunk",
1505
- created: Math.floor(new Date(parsed.created_at || Date.now()).getTime() / 1e3),
1610
+ created: Math.floor(
1611
+ new Date(parsed.created_at || Date.now()).getTime() / 1e3
1612
+ ),
1506
1613
  model: parsed.model,
1507
- choices: [{
1508
- index: 0,
1509
- delta: {
1510
- role: parsed.message.role,
1511
- content: parsed.message.content,
1512
- tool_calls: parsed.message.tool_calls
1513
- },
1514
- finish_reason: parsed.done ? parsed.done_reason || "stop" : null
1515
- }]
1614
+ choices: [
1615
+ {
1616
+ index: 0,
1617
+ delta: {
1618
+ role: parsed.message.role,
1619
+ content: parsed.message.content,
1620
+ tool_calls: parsed.message.tool_calls
1621
+ },
1622
+ finish_reason: parsed.done ? parsed.done_reason || "stop" : null
1623
+ }
1624
+ ]
1516
1625
  };
1517
1626
  if (parsed.done && parsed.total_duration) {
1518
1627
  transformed.usage = {
@@ -1542,25 +1651,33 @@ var GatewayService = class {
1542
1651
  };
1543
1652
  const sendRequest = (targetEndpoint, allowFallback) => {
1544
1653
  const url = `${this._baseUrl}${targetEndpoint}`;
1545
- debugLogger.debug(`Gateway chat request to ${url} with provider: ${request.provider || "default"}`, {
1546
- model: normalizedModel,
1547
- messageCount: request.messages.length,
1548
- hasImages: !!(request.images && request.images.length > 0),
1549
- imageCount: request.images?.length || 0
1550
- });
1654
+ debugLogger.debug(
1655
+ `Gateway chat request to ${url} with provider: ${request.provider || "default"}`,
1656
+ {
1657
+ model: normalizedModel,
1658
+ messageCount: request.messages.length,
1659
+ hasImages: !!(request.images && request.images.length > 0),
1660
+ imageCount: request.images?.length || 0
1661
+ }
1662
+ );
1551
1663
  fetch(url, {
1552
1664
  method: "POST",
1553
1665
  headers: this._getHeaders(),
1554
1666
  body: JSON.stringify(requestBody),
1555
1667
  signal: controller.signal
1556
1668
  }).then(async (response) => {
1557
- debugLogger.debug(`Gateway chat response status: ${response.status} for provider: ${request.provider || "default"}`);
1669
+ debugLogger.debug(
1670
+ `Gateway chat response status: ${response.status} for provider: ${request.provider || "default"}`
1671
+ );
1558
1672
  if (response.status === 404 && allowFallback && fallbackEndpoint) {
1559
- debugLogger.warn("GatewayService chat endpoint returned 404, attempting fallback route", {
1560
- provider: request.provider,
1561
- attemptedEndpoint: targetEndpoint,
1562
- fallbackEndpoint
1563
- });
1673
+ debugLogger.warn(
1674
+ "GatewayService chat endpoint returned 404, attempting fallback route",
1675
+ {
1676
+ provider: request.provider,
1677
+ attemptedEndpoint: targetEndpoint,
1678
+ fallbackEndpoint
1679
+ }
1680
+ );
1564
1681
  sendRequest(fallbackEndpoint, false);
1565
1682
  return;
1566
1683
  }
@@ -1576,7 +1693,10 @@ var GatewayService = class {
1576
1693
  body: errorText
1577
1694
  });
1578
1695
  } catch (readError) {
1579
- debugLogger.error("GatewayService chat failed to read error response body", { error: readError });
1696
+ debugLogger.error(
1697
+ "GatewayService chat failed to read error response body",
1698
+ { error: readError }
1699
+ );
1580
1700
  errorText = `Request failed with status ${response.status}`;
1581
1701
  }
1582
1702
  try {
@@ -1626,14 +1746,21 @@ var GatewayService = class {
1626
1746
  const trimmed = (request.model ?? "").replace(/^bandit:/, "").trim();
1627
1747
  return trimmed !== "" ? trimmed : "bandit-core-1";
1628
1748
  })() : request.model;
1629
- debugLogger.debug(`Gateway generate request to ${url} with provider: ${request.provider || "default"}`, {
1630
- model: normalizedModel
1631
- });
1749
+ debugLogger.debug(
1750
+ `Gateway generate request to ${url} with provider: ${request.provider || "default"}`,
1751
+ {
1752
+ model: normalizedModel
1753
+ }
1754
+ );
1632
1755
  return new Observable6((observer) => {
1633
1756
  const task = fetch(url, {
1634
1757
  method: "POST",
1635
1758
  headers: this._getHeaders(),
1636
- body: JSON.stringify({ ...request, model: normalizedModel, stream: request.stream !== false })
1759
+ body: JSON.stringify({
1760
+ ...request,
1761
+ model: normalizedModel,
1762
+ stream: request.stream !== false
1763
+ })
1637
1764
  });
1638
1765
  task.then(async (response) => {
1639
1766
  if (!response.ok) {
@@ -1673,7 +1800,9 @@ var GatewayService = class {
1673
1800
  observer.next(JSON.parse(tail.text));
1674
1801
  } catch (err) {
1675
1802
  observer.error(err);
1676
- debugLogger.error("Final chunk parsing error (gateway generate):", { buffer });
1803
+ debugLogger.error("Final chunk parsing error (gateway generate):", {
1804
+ buffer
1805
+ });
1677
1806
  }
1678
1807
  }
1679
1808
  observer.complete();
@@ -1693,7 +1822,9 @@ var GatewayService = class {
1693
1822
  observer.next(JSON.parse(classified.text));
1694
1823
  } catch (err) {
1695
1824
  observer.error(err);
1696
- debugLogger.error("Error parsing JSON line (gateway generate):", { line });
1825
+ debugLogger.error("Error parsing JSON line (gateway generate):", {
1826
+ line
1827
+ });
1697
1828
  }
1698
1829
  }
1699
1830
  }
@@ -1817,7 +1948,9 @@ var GatewayService = class {
1817
1948
  * Generate a mailto URL as fallback for feedback submission
1818
1949
  */
1819
1950
  _generateMailtoUrl(feedback) {
1820
- const subject = encodeURIComponent(`[${feedback.category.toUpperCase()}] ${feedback.title}`);
1951
+ const subject = encodeURIComponent(
1952
+ `[${feedback.category.toUpperCase()}] ${feedback.title}`
1953
+ );
1821
1954
  let body = `Category: ${feedback.category}
1822
1955
  `;
1823
1956
  body += `Priority: ${feedback.priority}
@@ -2341,7 +2474,9 @@ var GatewayProvider = class {
2341
2474
  throw new Error("Gateway provider requires gatewayUrl in config");
2342
2475
  }
2343
2476
  if (!config.provider) {
2344
- throw new Error("Gateway provider requires provider field to specify backend (openai, azure-openai, anthropic, ollama)");
2477
+ throw new Error(
2478
+ "Gateway provider requires provider field to specify backend (openai, azure-openai, anthropic, ollama)"
2479
+ );
2345
2480
  }
2346
2481
  const tokenFactory = config.tokenFactory || (() => null);
2347
2482
  this.gatewayService = new GatewayService(config.gatewayUrl, tokenFactory);
@@ -2358,7 +2493,9 @@ var GatewayProvider = class {
2358
2493
  break;
2359
2494
  case "azure-openai":
2360
2495
  if (!this.config.deploymentName || !this.config.apiVersion) {
2361
- throw new Error("Azure OpenAI gateway provider requires deploymentName and apiVersion");
2496
+ throw new Error(
2497
+ "Azure OpenAI gateway provider requires deploymentName and apiVersion"
2498
+ );
2362
2499
  }
2363
2500
  this.providerSpecificService = new AzureOpenAIGatewayService(
2364
2501
  gatewayUrl,
@@ -2370,10 +2507,16 @@ var GatewayProvider = class {
2370
2507
  );
2371
2508
  break;
2372
2509
  case "anthropic":
2373
- this.providerSpecificService = new AnthropicGatewayService(gatewayUrl, tokenFactory);
2510
+ this.providerSpecificService = new AnthropicGatewayService(
2511
+ gatewayUrl,
2512
+ tokenFactory
2513
+ );
2374
2514
  break;
2375
2515
  case "bandit":
2376
- this.providerSpecificService = new BanditAIGatewayService(gatewayUrl, tokenFactory);
2516
+ this.providerSpecificService = new BanditAIGatewayService(
2517
+ gatewayUrl,
2518
+ tokenFactory
2519
+ );
2377
2520
  break;
2378
2521
  case "ollama":
2379
2522
  this.providerSpecificService = new OllamaGatewayService(gatewayUrl, tokenFactory);
@@ -2411,7 +2554,9 @@ var GatewayProvider = class {
2411
2554
  images: request.images
2412
2555
  };
2413
2556
  }
2414
- } else if (["openai", "azure-openai", "anthropic", "bandit", "playground"].includes(this.config.provider || "")) {
2557
+ } else if (["openai", "azure-openai", "anthropic", "bandit", "playground"].includes(
2558
+ this.config.provider || ""
2559
+ )) {
2415
2560
  if (lastUserMessageIndex !== -1) {
2416
2561
  const currentMessage = messages[lastUserMessageIndex];
2417
2562
  const contentArray = [
@@ -2460,7 +2605,9 @@ var GatewayProvider = class {
2460
2605
  stream: request.stream,
2461
2606
  hasImages: !!(request.images && request.images.length > 0),
2462
2607
  imageCount: request.images?.length || 0,
2463
- imageStrategy: this.config.provider === "ollama" ? "message-level-array" : ["openai", "azure-openai", "anthropic", "playground"].includes(this.config.provider || "") ? "structured-content" : "top-level-fallback",
2608
+ imageStrategy: this.config.provider === "ollama" ? "message-level-array" : ["openai", "azure-openai", "anthropic", "playground"].includes(
2609
+ this.config.provider || ""
2610
+ ) ? "structured-content" : "top-level-fallback",
2464
2611
  finalMessages: messages.map((m) => ({
2465
2612
  role: m.role,
2466
2613
  hasImages: Array.isArray(m.images) && m.images.length > 0,
@@ -2471,12 +2618,14 @@ var GatewayProvider = class {
2471
2618
  map12((response) => {
2472
2619
  const choice = response.choices?.[0];
2473
2620
  const toolCalls = choice?.message?.tool_calls ?? choice?.delta?.tool_calls;
2621
+ const contextSources = readContextSourcesField(response);
2474
2622
  return {
2475
2623
  message: {
2476
2624
  content: choice?.message?.content ?? choice?.delta?.content ?? "",
2477
2625
  role: "assistant",
2478
2626
  tool_calls: toolCalls
2479
2627
  },
2628
+ ...contextSources ? { contextSources } : {},
2480
2629
  done: choice?.finish_reason === "stop" || choice?.finish_reason === "length" || choice?.finish_reason === "tool_calls"
2481
2630
  };
2482
2631
  })
@@ -2503,26 +2652,32 @@ var GatewayProvider = class {
2503
2652
  );
2504
2653
  }
2505
2654
  listModels() {
2506
- debugLogger.debug("Gateway provider listing models", { provider: this.config.provider });
2655
+ debugLogger.debug("Gateway provider listing models", {
2656
+ provider: this.config.provider
2657
+ });
2507
2658
  if (this.config.provider) {
2508
2659
  return this.gatewayService.listModelsByProvider(this.config.provider).pipe(
2509
- map12((models) => models.map((model) => ({
2510
- name: model.id || model.name,
2511
- size: model.size,
2512
- details: model.details,
2513
- digest: model.digest,
2514
- modified_at: model.modified_at
2515
- })))
2660
+ map12(
2661
+ (models) => models.map((model) => ({
2662
+ name: model.id || model.name,
2663
+ size: model.size,
2664
+ details: model.details,
2665
+ digest: model.digest,
2666
+ modified_at: model.modified_at
2667
+ }))
2668
+ )
2516
2669
  );
2517
2670
  } else {
2518
2671
  return this.gatewayService.listModels().pipe(
2519
- map12((models) => models.map((model) => ({
2520
- name: model.id || model.name,
2521
- size: model.size,
2522
- details: model.details,
2523
- digest: model.digest,
2524
- modified_at: model.modified_at
2525
- })))
2672
+ map12(
2673
+ (models) => models.map((model) => ({
2674
+ name: model.id || model.name,
2675
+ size: model.size,
2676
+ details: model.details,
2677
+ digest: model.digest,
2678
+ modified_at: model.modified_at
2679
+ }))
2680
+ )
2526
2681
  );
2527
2682
  }
2528
2683
  }
@@ -2663,9 +2818,7 @@ var PlaygroundProvider = class {
2663
2818
  }
2664
2819
  chat(request) {
2665
2820
  const lastUserMessage = [...request.messages].reverse().find((m) => m.role === "user")?.content ?? "";
2666
- const script = PLAYGROUND_SCRIPTS.find(
2667
- (scenario) => scenario.match(lastUserMessage)
2668
- );
2821
+ const script = PLAYGROUND_SCRIPTS.find((scenario) => scenario.match(lastUserMessage));
2669
2822
  const responseText = script?.response ?? FALLBACK_RESPONSE;
2670
2823
  const chunks = this.splitIntoChunks(responseText);
2671
2824
  return new Observable8((observer) => {
@@ -2774,9 +2927,11 @@ var XAIProvider = class {
2774
2927
  }
2775
2928
  listModels() {
2776
2929
  const url = `${this.baseUrl}/models`;
2777
- return from6(fetch(url, {
2778
- headers: this.getHeaders()
2779
- })).pipe(
2930
+ return from6(
2931
+ fetch(url, {
2932
+ headers: this.getHeaders()
2933
+ })
2934
+ ).pipe(
2780
2935
  switchMap5((response) => {
2781
2936
  if (!response.ok) {
2782
2937
  return throwError5(() => new Error(`Failed to list models: ${response.status}`));
@@ -2892,7 +3047,10 @@ var XAIProvider = class {
2892
3047
  });
2893
3048
  }
2894
3049
  } catch (err) {
2895
- debugLogger.error("Error parsing xAI stream data:", { data, error: err });
3050
+ debugLogger.error("Error parsing xAI stream data:", {
3051
+ data,
3052
+ error: err
3053
+ });
2896
3054
  }
2897
3055
  }
2898
3056
  }
@@ -2904,14 +3062,16 @@ var XAIProvider = class {
2904
3062
  });
2905
3063
  }
2906
3064
  nonStreamChatRequest(url, payload) {
2907
- return from6(fetch(url, {
2908
- method: "POST",
2909
- headers: {
2910
- ...this.getHeaders(),
2911
- "Content-Type": "application/json"
2912
- },
2913
- body: JSON.stringify(payload)
2914
- })).pipe(
3065
+ return from6(
3066
+ fetch(url, {
3067
+ method: "POST",
3068
+ headers: {
3069
+ ...this.getHeaders(),
3070
+ "Content-Type": "application/json"
3071
+ },
3072
+ body: JSON.stringify(payload)
3073
+ })
3074
+ ).pipe(
2915
3075
  switchMap5((response) => {
2916
3076
  if (!response.ok) {
2917
3077
  return throwError5(() => new Error(`xAI request failed: ${response.status}`));
@@ -3026,8 +3186,13 @@ var BanditAIProvider = class {
3026
3186
  return from7(fetch(url, { headers: this.getHeaders() })).pipe(
3027
3187
  switchMap6((response) => {
3028
3188
  if (!response.ok) {
3029
- debugLogger.error("BanditAI listModels failed", { status: response.status, url });
3030
- return throwError6(() => new Error(`Failed to list Bandit models: ${response.status}`));
3189
+ debugLogger.error("BanditAI listModels failed", {
3190
+ status: response.status,
3191
+ url
3192
+ });
3193
+ return throwError6(
3194
+ () => new Error(`Failed to list Bandit models: ${response.status}`)
3195
+ );
3031
3196
  }
3032
3197
  return from7(response.json());
3033
3198
  }),
@@ -3098,7 +3263,10 @@ var BanditAIProvider = class {
3098
3263
  const read = () => {
3099
3264
  reader?.read().then(({ done, value }) => {
3100
3265
  if (done) {
3101
- observer.next({ message: { content: "", role: "assistant" }, done: true });
3266
+ observer.next({
3267
+ message: { content: "", role: "assistant" },
3268
+ done: true
3269
+ });
3102
3270
  observer.complete();
3103
3271
  return;
3104
3272
  }
@@ -3112,18 +3280,29 @@ var BanditAIProvider = class {
3112
3280
  }
3113
3281
  const data = line.slice(6).trim();
3114
3282
  if (data === "[DONE]") {
3115
- observer.next({ message: { content: "", role: "assistant" }, done: true });
3283
+ observer.next({
3284
+ message: { content: "", role: "assistant" },
3285
+ done: true
3286
+ });
3116
3287
  observer.complete();
3117
3288
  return;
3118
3289
  }
3119
3290
  try {
3120
3291
  const parsed = JSON.parse(data);
3121
3292
  const content = parsed.choices?.[0]?.delta?.content ?? "";
3122
- if (content) {
3123
- observer.next({ message: { content, role: "assistant" }, done: false });
3293
+ const contextSources = readContextSourcesField(parsed);
3294
+ if (content || contextSources) {
3295
+ observer.next({
3296
+ message: { content, role: "assistant" },
3297
+ ...contextSources ? { contextSources } : {},
3298
+ done: false
3299
+ });
3124
3300
  }
3125
3301
  } catch (error) {
3126
- debugLogger.error("BanditAI stream chunk parse failure", { data, error });
3302
+ debugLogger.error("BanditAI stream chunk parse failure", {
3303
+ data,
3304
+ error
3305
+ });
3127
3306
  }
3128
3307
  }
3129
3308
  read();
@@ -3134,17 +3313,21 @@ var BanditAIProvider = class {
3134
3313
  });
3135
3314
  }
3136
3315
  nonStreamChatRequest(url, payload) {
3137
- return from7(fetch(url, {
3138
- method: "POST",
3139
- headers: {
3140
- ...this.getHeaders(),
3141
- "Content-Type": "application/json"
3142
- },
3143
- body: JSON.stringify(payload)
3144
- })).pipe(
3316
+ return from7(
3317
+ fetch(url, {
3318
+ method: "POST",
3319
+ headers: {
3320
+ ...this.getHeaders(),
3321
+ "Content-Type": "application/json"
3322
+ },
3323
+ body: JSON.stringify(payload)
3324
+ })
3325
+ ).pipe(
3145
3326
  switchMap6((response) => {
3146
3327
  if (!response.ok) {
3147
- return throwError6(() => new Error(`BanditAI request failed: ${response.status}`));
3328
+ return throwError6(
3329
+ () => new Error(`BanditAI request failed: ${response.status}`)
3330
+ );
3148
3331
  }
3149
3332
  return from7(response.json());
3150
3333
  }),
@@ -3258,8 +3441,9 @@ export {
3258
3441
  TOKEN_KEY2 as TOKEN_KEY,
3259
3442
  AUTH_TOKEN_CHANGED_EVENT,
3260
3443
  authenticationService,
3444
+ readContextSourcesField,
3261
3445
  GatewayService,
3262
3446
  AIProviderFactory,
3263
3447
  useAIProviderStore
3264
3448
  };
3265
- //# sourceMappingURL=chunk-GRPTCHFN.mjs.map
3449
+ //# sourceMappingURL=chunk-5KC42IIR.mjs.map