@burtson-labs/bandit-engine 2.0.162 → 2.0.164

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 (211) hide show
  1. package/README.md +7 -22
  2. package/dist/aiProviderStore-PEGSX4PK.mjs +9 -0
  3. package/dist/chat-OSAVW6L2.mjs +16 -0
  4. package/dist/chat-provider.js.map +1 -1
  5. package/dist/chat-provider.mjs +7 -7
  6. package/dist/{chunk-ZNK3ELTZ.mjs → chunk-5KBTOCQZ.mjs} +4 -4
  7. package/dist/chunk-5KBTOCQZ.mjs.map +1 -0
  8. package/dist/{chunk-Q6LXVYTC.mjs → chunk-CQJGUYRW.mjs} +2 -2
  9. package/dist/chunk-CQJGUYRW.mjs.map +1 -0
  10. package/dist/{chunk-47MOBOP3.mjs → chunk-IZX2J65Q.mjs} +2 -2
  11. package/dist/chunk-IZX2J65Q.mjs.map +1 -0
  12. package/dist/{chunk-ODGVCSKV.mjs → chunk-J6SWNO7Z.mjs} +6 -27
  13. package/dist/chunk-J6SWNO7Z.mjs.map +1 -0
  14. package/dist/{chunk-3ACT5BTW.mjs → chunk-JYBQAKSZ.mjs} +125 -232
  15. package/dist/chunk-JYBQAKSZ.mjs.map +1 -0
  16. package/dist/{chunk-G5POQT2R.mjs → chunk-O6P37PFR.mjs} +4 -4
  17. package/dist/chunk-O6P37PFR.mjs.map +1 -0
  18. package/dist/{chunk-KCI46M23.mjs → chunk-OCVZVBQQ.mjs} +1 -1
  19. package/dist/chunk-OCVZVBQQ.mjs.map +1 -0
  20. package/dist/{chunk-IXIM7BNO.mjs → chunk-P4C5IRM5.mjs} +1 -1
  21. package/dist/chunk-P4C5IRM5.mjs.map +1 -0
  22. package/dist/{chunk-RUXYVMW2.mjs → chunk-PNQRS5EN.mjs} +11 -11
  23. package/dist/chunk-PNQRS5EN.mjs.map +1 -0
  24. package/dist/{chunk-WQEBTH2R.mjs → chunk-TY5VL3SG.mjs} +3 -3
  25. package/dist/chunk-TY5VL3SG.mjs.map +1 -0
  26. package/dist/{chunk-YHSYHU5P.mjs → chunk-URZSIL7X.mjs} +7 -7
  27. package/dist/chunk-URZSIL7X.mjs.map +1 -0
  28. package/dist/{chunk-OGMXL7BF.mjs → chunk-VBHI4TJC.mjs} +6 -6
  29. package/dist/chunk-VBHI4TJC.mjs.map +1 -0
  30. package/dist/{chunk-R6HMLYKQ.mjs → chunk-WLNZL6SP.mjs} +5 -16
  31. package/dist/chunk-WLNZL6SP.mjs.map +1 -0
  32. package/dist/index.d.mts +6 -0
  33. package/dist/index.d.ts +6 -0
  34. package/dist/index.js +577 -728
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.mjs +15 -31
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/management/management.js +217 -352
  39. package/dist/management/management.js.map +1 -1
  40. package/dist/management/management.mjs +10 -10
  41. package/dist/{memoryUtils-33TZKHSQ.mjs → memoryUtils-2FVXDSS6.mjs} +1 -1
  42. package/dist/memoryUtils-2FVXDSS6.mjs.map +1 -0
  43. package/dist/modals/chat-modal/chat-modal.js.map +1 -1
  44. package/dist/modals/chat-modal/chat-modal.mjs +6 -6
  45. package/dist/modelStore-7XYYDCNC.mjs +9 -0
  46. package/dist/shared/custom-element.js.map +1 -1
  47. package/dist/shared/custom-element.mjs +1 -1
  48. package/docs/05_contributing.md +1 -1
  49. package/docs/api_reference/assets/navigation.js +1 -1
  50. package/docs/api_reference/assets/search.js +1 -1
  51. package/docs/api_reference/classes/DebugLogger.html +11 -11
  52. package/docs/api_reference/classes/FeatureFlagService.html +13 -13
  53. package/docs/api_reference/classes/NotificationService.html +10 -10
  54. package/docs/api_reference/classes/StreamingTTSClient.html +9 -9
  55. package/docs/api_reference/classes/VectorDatabaseService.html +24 -24
  56. package/docs/api_reference/classes/VectorMigrationService.html +8 -8
  57. package/docs/api_reference/classes/VoiceService.html +2 -2
  58. package/docs/api_reference/enums/TTSState.html +2 -2
  59. package/docs/api_reference/functions/Chat.html +1 -1
  60. package/docs/api_reference/functions/ChatModal.html +1 -1
  61. package/docs/api_reference/functions/ChatProvider.html +1 -1
  62. package/docs/api_reference/functions/FeatureFlagProvider.html +1 -1
  63. package/docs/api_reference/functions/FeedbackButton.html +1 -1
  64. package/docs/api_reference/functions/FeedbackModal.html +1 -1
  65. package/docs/api_reference/functions/InterestsEditor.html +5 -0
  66. package/docs/api_reference/functions/Management.html +1 -1
  67. package/docs/api_reference/functions/NotificationProvider.html +1 -1
  68. package/docs/api_reference/functions/SubscriptionExpiredGuard.html +1 -1
  69. package/docs/api_reference/functions/SubscriptionExpiredModal.html +1 -1
  70. package/docs/api_reference/functions/defineCustomElement.html +1 -1
  71. package/docs/api_reference/functions/getCriticalConfig.html +2 -1
  72. package/docs/api_reference/functions/getFeatureMatrix.html +1 -1
  73. package/docs/api_reference/functions/getStreamingTTSClient.html +1 -1
  74. package/docs/api_reference/functions/getSystemConstants.html +2 -1
  75. package/docs/api_reference/functions/getTTSState.html +1 -1
  76. package/docs/api_reference/functions/handleHttpError.html +1 -1
  77. package/docs/api_reference/functions/handleSubscriptionUpgrade.html +1 -1
  78. package/docs/api_reference/functions/handleValidationError.html +1 -1
  79. package/docs/api_reference/functions/initializeCoreSystem.html +2 -1
  80. package/docs/api_reference/functions/isWorkspaceAdminRole.html +6 -0
  81. package/docs/api_reference/functions/pauseTTS.html +1 -1
  82. package/docs/api_reference/functions/previewTierUpgrade.html +1 -1
  83. package/docs/api_reference/functions/resolveManagementSections.html +2 -0
  84. package/docs/api_reference/functions/resumeTTS.html +1 -1
  85. package/docs/api_reference/functions/showInfoNotification.html +1 -1
  86. package/docs/api_reference/functions/showSuccessNotification.html +1 -1
  87. package/docs/api_reference/functions/speakWithStreaming.html +1 -1
  88. package/docs/api_reference/functions/stopTTS.html +1 -1
  89. package/docs/api_reference/functions/syncSubscriptionWithAPI.html +1 -1
  90. package/docs/api_reference/functions/updateSubscriptionTier.html +1 -1
  91. package/docs/api_reference/functions/useFeatureFlag.html +1 -1
  92. package/docs/api_reference/functions/useFeatureVisibility.html +1 -1
  93. package/docs/api_reference/functions/useFeatures.html +1 -1
  94. package/docs/api_reference/functions/useGatewayHealth.html +1 -1
  95. package/docs/api_reference/functions/useGatewayMemory.html +1 -1
  96. package/docs/api_reference/functions/useGatewayModels.html +1 -1
  97. package/docs/api_reference/functions/useGlobalTTS.html +1 -1
  98. package/docs/api_reference/functions/useManagementAccess.html +2 -0
  99. package/docs/api_reference/functions/useNotification.html +1 -1
  100. package/docs/api_reference/functions/useNotificationService.html +1 -1
  101. package/docs/api_reference/functions/useTTS.html +1 -1
  102. package/docs/api_reference/functions/useVectorStore.html +1 -1
  103. package/docs/api_reference/functions/useVoiceStore.html +2 -2
  104. package/docs/api_reference/functions/useVoices.html +1 -1
  105. package/docs/api_reference/functions/validateEnvironment.html +2 -1
  106. package/docs/api_reference/functions/validateSystemIntegrity.html +2 -1
  107. package/docs/api_reference/index.html +219 -155
  108. package/docs/api_reference/interfaces/AIChatRequest.html +2 -2
  109. package/docs/api_reference/interfaces/AIChatResponse.html +2 -2
  110. package/docs/api_reference/interfaces/AIGenerateRequest.html +2 -2
  111. package/docs/api_reference/interfaces/AIGenerateResponse.html +2 -2
  112. package/docs/api_reference/interfaces/AIMessage.html +2 -2
  113. package/docs/api_reference/interfaces/AIModel.html +2 -2
  114. package/docs/api_reference/interfaces/AIProviderConfig.html +5 -2
  115. package/docs/api_reference/interfaces/ChatConfig.html +3 -3
  116. package/docs/api_reference/interfaces/ChatModalProps.html +3 -3
  117. package/docs/api_reference/interfaces/CreateMemoryOptions.html +2 -2
  118. package/docs/api_reference/interfaces/FeatureEvaluation.html +7 -7
  119. package/docs/api_reference/interfaces/FeatureFlagConfig.html +9 -9
  120. package/docs/api_reference/interfaces/FeatureFlagContextValue.html +8 -8
  121. package/docs/api_reference/interfaces/FeatureFlagProviderProps.html +2 -2
  122. package/docs/api_reference/interfaces/FeedbackButtonProps.html +10 -10
  123. package/docs/api_reference/interfaces/FeedbackCategories.html +2 -2
  124. package/docs/api_reference/interfaces/FeedbackModalProps.html +2 -2
  125. package/docs/api_reference/interfaces/FeedbackPriorities.html +2 -2
  126. package/docs/api_reference/interfaces/FeedbackRequest.html +2 -2
  127. package/docs/api_reference/interfaces/FeedbackResponse.html +2 -2
  128. package/docs/api_reference/interfaces/FileUploadResult.html +2 -2
  129. package/docs/api_reference/interfaces/GatewayChatRequest.html +3 -2
  130. package/docs/api_reference/interfaces/GatewayChatResponse.html +2 -2
  131. package/docs/api_reference/interfaces/GatewayContract.html +2 -2
  132. package/docs/api_reference/interfaces/GatewayGenerateRequest.html +2 -2
  133. package/docs/api_reference/interfaces/GatewayGenerateResponse.html +2 -2
  134. package/docs/api_reference/interfaces/GatewayHealthResponse.html +2 -2
  135. package/docs/api_reference/interfaces/GatewayMemoryRecord.html +2 -2
  136. package/docs/api_reference/interfaces/GatewayMemoryResponse.html +2 -2
  137. package/docs/api_reference/interfaces/GatewayMessage.html +2 -2
  138. package/docs/api_reference/interfaces/GatewayMessageContent.html +2 -2
  139. package/docs/api_reference/interfaces/GatewayModel.html +2 -2
  140. package/docs/api_reference/interfaces/GatewayModelsResponse.html +2 -2
  141. package/docs/api_reference/interfaces/ManagementAccess.html +5 -0
  142. package/docs/api_reference/interfaces/ManagementAccessInput.html +5 -0
  143. package/docs/api_reference/interfaces/ManagementLink.html +7 -0
  144. package/docs/api_reference/interfaces/ManagementProps.html +22 -0
  145. package/docs/api_reference/interfaces/ManagementSectionDef.html +10 -0
  146. package/docs/api_reference/interfaces/MemorySearchFilters.html +2 -2
  147. package/docs/api_reference/interfaces/MigrationProgress.html +2 -2
  148. package/docs/api_reference/interfaces/MigrationStatus.html +2 -2
  149. package/docs/api_reference/interfaces/NotificationConfig.html +2 -2
  150. package/docs/api_reference/interfaces/NotificationContextType.html +2 -2
  151. package/docs/api_reference/interfaces/NotificationProviderProps.html +2 -2
  152. package/docs/api_reference/interfaces/PackageSettings.html +11 -2
  153. package/docs/api_reference/interfaces/SearchOptions.html +2 -2
  154. package/docs/api_reference/interfaces/SearchResult.html +2 -2
  155. package/docs/api_reference/interfaces/SubscriptionExpiredGuardProps.html +2 -2
  156. package/docs/api_reference/interfaces/SubscriptionExpiredModalProps.html +2 -2
  157. package/docs/api_reference/interfaces/TTSOptions.html +2 -2
  158. package/docs/api_reference/interfaces/TTSProgress.html +2 -2
  159. package/docs/api_reference/interfaces/TrialUsage.html +2 -2
  160. package/docs/api_reference/interfaces/UploadRequest.html +3 -3
  161. package/docs/api_reference/interfaces/UseTTSReturn.html +2 -2
  162. package/docs/api_reference/interfaces/VectorDocument.html +2 -2
  163. package/docs/api_reference/interfaces/VectorMemory.html +2 -2
  164. package/docs/api_reference/interfaces/VectorMemoryMetadata.html +2 -2
  165. package/docs/api_reference/interfaces/VectorStoreStatus.html +2 -2
  166. package/docs/api_reference/interfaces/VoiceModelsResponse.html +2 -2
  167. package/docs/api_reference/interfaces/VoiceState.html +2 -2
  168. package/docs/api_reference/media/PROTECTION-NOTICE.md +6 -55
  169. package/docs/api_reference/media/README.md +20 -1
  170. package/docs/api_reference/modules.html +18 -6
  171. package/docs/api_reference/types/FeatureKey.html +1 -1
  172. package/docs/api_reference/types/FeatureMatrix.html +1 -1
  173. package/docs/api_reference/types/GatewayQueryOptions.html +1 -1
  174. package/docs/api_reference/types/LogContext.html +1 -1
  175. package/docs/api_reference/types/ManagementRequest.html +1 -0
  176. package/docs/api_reference/types/ManagementSectionId.html +2 -0
  177. package/docs/api_reference/types/SubscriptionTier.html +1 -1
  178. package/docs/api_reference/variables/DEFAULT_TIER_FEATURES.html +1 -1
  179. package/docs/api_reference/variables/FeatureFlagContext.html +1 -1
  180. package/docs/api_reference/variables/MANAGEMENT_SECTIONS.html +1 -0
  181. package/docs/api_reference/variables/OSS_DEFAULT_FEATURES.html +1 -1
  182. package/docs/api_reference/variables/SYSTEM_FLAGS.html +2 -1
  183. package/docs/api_reference/variables/authenticationService.html +1 -1
  184. package/docs/api_reference/variables/debugLogger-1.html +1 -1
  185. package/docs/api_reference/variables/featureFlagService-1.html +1 -1
  186. package/docs/api_reference/variables/notificationService-1.html +1 -1
  187. package/docs/api_reference/variables/vectorDatabaseService-1.html +1 -1
  188. package/docs/api_reference/variables/vectorMigrationService-1.html +1 -1
  189. package/docs/api_reference/variables/voiceService-1.html +1 -1
  190. package/package.json +1 -1
  191. package/dist/aiProviderStore-JOB2H4LP.mjs +0 -9
  192. package/dist/chat-LB6UEEEW.mjs +0 -16
  193. package/dist/chunk-3ACT5BTW.mjs.map +0 -1
  194. package/dist/chunk-47MOBOP3.mjs.map +0 -1
  195. package/dist/chunk-G5POQT2R.mjs.map +0 -1
  196. package/dist/chunk-IXIM7BNO.mjs.map +0 -1
  197. package/dist/chunk-KCI46M23.mjs.map +0 -1
  198. package/dist/chunk-ODGVCSKV.mjs.map +0 -1
  199. package/dist/chunk-OGMXL7BF.mjs.map +0 -1
  200. package/dist/chunk-Q6LXVYTC.mjs.map +0 -1
  201. package/dist/chunk-R6HMLYKQ.mjs.map +0 -1
  202. package/dist/chunk-RUXYVMW2.mjs.map +0 -1
  203. package/dist/chunk-WQEBTH2R.mjs.map +0 -1
  204. package/dist/chunk-YHSYHU5P.mjs.map +0 -1
  205. package/dist/chunk-ZNK3ELTZ.mjs.map +0 -1
  206. package/dist/memoryUtils-33TZKHSQ.mjs.map +0 -1
  207. package/dist/modelStore-FGUGOWTL.mjs +0 -9
  208. package/docs/api_reference/media/PROTECTION-README.md +0 -39
  209. /package/dist/{aiProviderStore-JOB2H4LP.mjs.map → aiProviderStore-PEGSX4PK.mjs.map} +0 -0
  210. /package/dist/{chat-LB6UEEEW.mjs.map → chat-OSAVW6L2.mjs.map} +0 -0
  211. /package/dist/{modelStore-FGUGOWTL.mjs.map → modelStore-7XYYDCNC.mjs.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  indexedDBService_default,
3
3
  usePackageSettingsStore
4
- } from "./chunk-WQEBTH2R.mjs";
4
+ } from "./chunk-TY5VL3SG.mjs";
5
5
  import {
6
6
  authenticationService
7
- } from "./chunk-Q6LXVYTC.mjs";
7
+ } from "./chunk-CQJGUYRW.mjs";
8
8
  import {
9
9
  debugLogger
10
- } from "./chunk-KCI46M23.mjs";
10
+ } from "./chunk-OCVZVBQQ.mjs";
11
11
 
12
12
  // src/store/mcpToolsStore.ts
13
13
  import { create } from "zustand";
@@ -387,4 +387,4 @@ export {
387
387
  discoverMcpTools,
388
388
  useMCPToolsStore
389
389
  };
390
- //# sourceMappingURL=chunk-G5POQT2R.mjs.map
390
+ //# sourceMappingURL=chunk-O6P37PFR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/store/mcpToolsStore.ts","../src/services/mcp/mcpServersService.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\nimport { create } from \"zustand\";\nimport indexedDBService from \"../services/indexedDB/indexedDBService\";\nimport { debugLogger } from \"../services/logging/debugLogger\";\nimport { listMcpServers, discoverMcpTools } from \"../services/mcp/mcpServersService\";\nimport type { McpTool as ControllerTool } from \"../services/mcp/mcpControllerService\";\n\n// Sanitize an MCP tool into a valid, namespaced function name for the model.\nconst sanitizeMcpToolName = (raw: string): string =>\n raw.replace(/[^a-zA-Z0-9_]/g, \"_\").replace(/_+/g, \"_\").replace(/^_|_$/g, \"\").slice(0, 60);\n\nexport interface MCPTool {\n id: string;\n name: string;\n description: string;\n enabled: boolean;\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: {\n type: \"object\";\n properties: Record<string, unknown>;\n required: string[];\n };\n };\n endpoint?: string; // API endpoint for gateway calls\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n isBuiltIn?: boolean;\n // Set when this tool comes from a user-connected MCP server. Such tools are\n // invoked through POST /mcp/invoke (not a fixed endpoint) and are never\n // persisted to IndexedDB — they're re-discovered from the gateway each load.\n mcpServerId?: string;\n mcpToolName?: string; // the tool's real name on the MCP server\n}\n\nexport type ToolSaveState = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\ninterface MCPToolsStore {\n tools: MCPTool[];\n isLoaded: boolean;\n /**\n * The person's own on/off choice per tool id. It wins over every default:\n * a built-in's, the tool controller's `isEnabled`, and a discovered MCP\n * server tool's. A tool with no entry follows its default. Persisted with\n * the custom tools in this origin's IndexedDB, and each workspace is its own\n * origin (acme.banditai.ai), so choices are per workspace.\n */\n choices: Record<string, boolean>;\n /** Whether the last change a person made was written. */\n saveState: ToolSaveState;\n lastSavedAt: number | null;\n addTool: (tool: Omit<MCPTool, \"id\">) => void;\n updateTool: (id: string, updates: Partial<MCPTool>) => void;\n deleteTool: (id: string) => void;\n /** Flips a tool, records it as the person's choice and saves. Resolves false if the save failed. */\n toggleTool: (id: string) => Promise<boolean>;\n loadTools: () => Promise<void>;\n /** Saves, reporting through saveState. Resolves false if the write failed. */\n saveTools: () => Promise<boolean>;\n getEnabledTools: () => MCPTool[];\n loadMcpServerTools: () => Promise<void>;\n /**\n * Aligns local tools with what the tool controller reports: adds the ones\n * we don't have, and sets each to the person's choice or, if they haven't\n * made one, the controller's default. Never overrides a choice.\n */\n syncControllerTools: (controllerTools: ControllerTool[]) => void;\n}\n\nconst STORE_CONFIGS = [{ name: \"config\", keyPath: \"id\" }];\n\ntype PersistedTools = { tools?: unknown; choices?: unknown };\n\nconst readChoices = (value: unknown): Record<string, boolean> => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const out: Record<string, boolean> = {};\n for (const [id, on] of Object.entries(value as Record<string, unknown>)) {\n if (typeof on === \"boolean\") out[id] = on;\n }\n return out;\n};\n\nconst withChoice = (tool: MCPTool, choices: Record<string, boolean>): MCPTool =>\n Object.prototype.hasOwnProperty.call(choices, tool.id) && tool.enabled !== choices[tool.id]\n ? { ...tool, enabled: choices[tool.id]! }\n : tool;\n\n// Built-in controller-backed tools\nconst healthCheckTool: MCPTool = {\n id: \"health-check\",\n name: \"check_gateway_health\",\n description: \"Check the health status of the gateway API service\",\n enabled: true,\n type: \"function\",\n function: {\n name: \"check_gateway_health\",\n description: \"Check the health status of the gateway API service\",\n parameters: {\n type: \"object\",\n properties: {},\n required: []\n }\n },\n endpoint: \"/mcp/health\",\n method: \"GET\",\n isBuiltIn: true\n};\n\nconst webSearchTool: MCPTool = {\n id: \"web-search\",\n name: \"web_search\",\n description: \"Search the web for current information, documentation, and facts\",\n enabled: true,\n type: \"function\",\n function: {\n name: \"web_search\",\n description: \"Search the web and return ranked results with snippets (and an optional summarized answer). Use for current events, documentation, libraries, error messages, and factual lookups.\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"The search query — natural language or keywords\" },\n count: { type: \"number\", description: \"Number of results to return (1-10, default 5)\" },\n include_answer: { type: \"boolean\", description: \"Include a short summarized answer when available\" }\n },\n required: [\"query\"]\n }\n },\n endpoint: \"/mcp/web-search\",\n method: \"GET\",\n isBuiltIn: true\n};\n\nconst webFetchTool: MCPTool = {\n id: \"web-fetch\",\n name: \"web_fetch\",\n description: \"Fetch the text content of a specific URL\",\n enabled: true,\n type: \"function\",\n function: {\n name: \"web_fetch\",\n description: \"Fetch a single public URL and return its trimmed text content. Use when you already have a specific link you need to read.\",\n parameters: {\n type: \"object\",\n properties: {\n url: { type: \"string\", description: \"Absolute http(s) URL to fetch\" }\n },\n required: [\"url\"]\n }\n },\n endpoint: \"/mcp/web-fetch\",\n method: \"GET\",\n isBuiltIn: true\n};\n\n// Image generation runs on Burtson's own GPU (the Image Studio backend behind\n// the gateway) — never a third-party image API. The gateway forwards the\n// user's token to Anton, whose admin/partner gate decides who may take the\n// GPU; everyone else gets a clear \"limited to admin and partner accounts\"\n// message. Cold starts can take a couple of minutes.\nconst imageGenerationTool: MCPTool = {\n id: \"image-generation\",\n name: \"image_generation\",\n description: \"Generate an image from a text prompt on the Burtson Labs GPU\",\n enabled: true,\n type: \"function\",\n function: {\n name: \"image_generation\",\n description: \"Generate an image from a text prompt on the Burtson Labs GPU\",\n parameters: {\n type: \"object\",\n properties: {\n prompt: { type: \"string\", description: \"Text description of the image to generate\" },\n size: { type: \"string\", enum: [\"1024x1024\", \"1344x768\", \"768x1344\"], description: \"Canvas: square, landscape, or portrait\" }\n },\n required: [\"prompt\"]\n }\n },\n endpoint: \"/mcp/generate-image\",\n method: \"POST\",\n isBuiltIn: true\n};\n\n// Create a downloadable file for the user (stored ~1 hour at a gateway URL).\nconst createFileTool: MCPTool = {\n id: \"create-file\",\n name: \"create_file\",\n description: \"Create a downloadable file for the user (md, txt, csv, json, html, docx, pptx, pdf). Returns a temporary (~1 hour) download link.\",\n enabled: true,\n type: \"function\",\n function: {\n name: \"create_file\",\n description:\n \"Generate a file the user can download. For docx/pptx write well-structured Markdown (headings, lists, tables; use '## ' headings to start each slide). For pdf, prefer complete HTML with inline CSS (branded proposals, print layouts) — Chromium renders it without browser headers/footers; Markdown also works. Returns a short-lived (~1 hour) download URL — tell the user it expires.\",\n parameters: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"The file content (HTML preferred for pdf; Markdown for docx/pptx/pdf; raw text for others).\" },\n filename: { type: \"string\", description: \"Desired filename, e.g. 'report.pdf' or 'notes.md'.\" },\n format: {\n type: \"string\",\n enum: [\"md\", \"txt\", \"csv\", \"json\", \"html\", \"xml\", \"yaml\", \"docx\", \"pptx\", \"pdf\"],\n description: \"File format. Defaults to md.\",\n },\n },\n required: [\"content\", \"format\"],\n },\n },\n endpoint: \"/mcp/create-file\",\n method: \"POST\",\n isBuiltIn: true,\n};\n\nconst defaultTools: MCPTool[] = [healthCheckTool, webSearchTool, webFetchTool, imageGenerationTool, createFileTool];\n\nexport const useMCPToolsStore = create<MCPToolsStore>((set, get) => {\n // Writes custom tools and choices. Built-ins and discovered MCP-server tools\n // are never stored themselves: they come back from code and the gateway.\n const persist = async () => {\n const { tools, choices } = get();\n const customTools = tools.filter((tool) => !tool.isBuiltIn && !tool.mcpServerId);\n await indexedDBService.put(\"banditConfig\", 1, \"config\", {\n id: \"mcpTools\",\n tools: customTools,\n choices,\n }, STORE_CONFIGS);\n debugLogger.debug(\"MCP tools saved to IndexedDB\", { toolCount: customTools.length, choices: Object.keys(choices).length });\n };\n\n // Background writes (first run, controller sync) don't touch saveState:\n // \"Saved\" and \"Couldn't save\" describe what the person did.\n const persistQuietly = async () => {\n try {\n await persist();\n } catch (error) {\n debugLogger.error(\"Failed to save MCP tools to IndexedDB\", { error });\n }\n };\n\n return {\n tools: defaultTools,\n isLoaded: false,\n choices: {},\n saveState: \"idle\",\n lastSavedAt: null,\n\n addTool: (toolData) => {\n const newTool: MCPTool = {\n ...toolData,\n id: `tool-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n };\n set((state) => ({\n tools: [...state.tools, newTool],\n }));\n get().saveTools();\n },\n \n updateTool: (id, updates) => {\n set((state) => ({\n tools: state.tools.map((tool) =>\n tool.id === id ? { ...tool, ...updates } : tool\n ),\n }));\n get().saveTools();\n },\n \n deleteTool: (id) => {\n set((state) => ({\n tools: state.tools.filter((tool) => tool.id !== id || tool.isBuiltIn),\n }));\n get().saveTools();\n },\n \n toggleTool: async (id) => {\n const tool = get().tools.find((t) => t.id === id);\n if (!tool) return false;\n const enabled = !tool.enabled;\n set((state) => ({\n tools: state.tools.map((t) => (t.id === id ? { ...t, enabled } : t)),\n choices: { ...state.choices, [id]: enabled },\n }));\n return get().saveTools();\n },\n \n getEnabledTools: () => {\n return get().tools.filter((tool) => tool.enabled);\n },\n \n loadTools: async () => {\n try {\n const data = await indexedDBService.get<PersistedTools>(\"banditConfig\", 1, \"config\", \"mcpTools\", STORE_CONFIGS);\n \n if (data?.tools && Array.isArray(data.tools)) {\n // Choices made in this session before the load finished are newer than the stored ones.\n const choices = { ...readChoices(data.choices), ...get().choices };\n // Built-ins always use their code definition; only the on/off is the person's.\n const savedTools = data.tools as MCPTool[];\n const builtInIds = defaultTools.map(t => t.id);\n const customTools = savedTools.filter(\n (tool) => !tool.isBuiltIn && !builtInIds.includes(tool.id)\n );\n const discovered = get().tools.filter((t) => t.mcpServerId);\n\n set({\n tools: [...defaultTools, ...customTools, ...discovered].map((t) => withChoice(t, choices)),\n choices,\n isLoaded: true\n });\n debugLogger.info(\"MCP tools loaded from IndexedDB\", { \n totalTools: defaultTools.length + customTools.length,\n builtInTools: defaultTools.length,\n customTools: customTools.length,\n choices: Object.keys(choices).length,\n });\n } else {\n // First time, save defaults\n set({ isLoaded: true });\n await persistQuietly();\n debugLogger.info(\"Default MCP tools initialized\");\n }\n } catch (error) {\n debugLogger.error(\"Failed to load MCP tools from IndexedDB\", { error });\n set({ isLoaded: true }); // Mark as loaded even if failed, so UI can render\n }\n },\n \n saveTools: async () => {\n set({ saveState: \"saving\" });\n try {\n await persist();\n set({ saveState: \"saved\", lastSavedAt: Date.now() });\n return true;\n } catch (error) {\n debugLogger.error(\"Failed to save MCP tools to IndexedDB\", { error });\n set({ saveState: \"error\" });\n return false;\n }\n },\n\n syncControllerTools: (controllerTools) => {\n const { choices } = get();\n const next = [...get().tools];\n let changed = false;\n for (const ct of controllerTools) {\n const functionName = (ct.id || ct.name).replace(/[^a-zA-Z0-9_]/g, \"_\");\n const index =\n [\n next.findIndex((lt) => lt.function.name === functionName),\n next.findIndex((lt) => lt.function.name === ct.id),\n next.findIndex((lt) => lt.id === ct.id),\n ].find((i) => i >= 0) ?? -1;\n\n if (index < 0) {\n // A local representation lets the person switch it for the assistant.\n next.push({\n id: `tool-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: functionName,\n description: ct.description,\n enabled: ct.isEnabled,\n type: \"function\",\n function: {\n name: ct.id, // the controller id maps back to the tool\n description: ct.description,\n parameters: { type: \"object\", properties: {}, required: [] },\n },\n endpoint: `/mcp/${ct.id}`,\n method: \"GET\",\n isBuiltIn: false,\n });\n changed = true;\n continue;\n }\n const local = next[index]!;\n const enabled = Object.prototype.hasOwnProperty.call(choices, local.id) ? choices[local.id]! : ct.isEnabled;\n if (local.enabled !== enabled) {\n next[index] = { ...local, enabled };\n changed = true;\n }\n }\n if (!changed) return;\n set({ tools: next });\n void persistQuietly();\n },\n\n // Discover the user's connected MCP servers' tools from the gateway and merge\n // them into the tool list (so the model can call them). Replaces any prior\n // MCP-server tools; best-effort — a single unreachable server is skipped.\n loadMcpServerTools: async () => {\n let servers;\n try {\n servers = await listMcpServers();\n } catch (error) {\n debugLogger.warn(\"Could not list MCP servers\", { error: String(error) });\n return;\n }\n\n const collected: MCPTool[] = [];\n for (const server of servers.filter((s) => s.enabled)) {\n try {\n const { tools } = await discoverMcpTools(server.id);\n for (const t of tools) {\n const fnName = sanitizeMcpToolName(`mcp_${server.name}_${t.name}`);\n const schema =\n t.inputSchema && typeof t.inputSchema === \"object\" && (t.inputSchema as { type?: string }).type === \"object\"\n ? (t.inputSchema as MCPTool[\"function\"][\"parameters\"])\n : { type: \"object\" as const, properties: {}, required: [] };\n const id = `mcp-${server.id}-${t.name}`;\n const { choices } = get();\n collected.push({\n id,\n name: fnName,\n description: t.description || `${t.name} (via ${server.name})`,\n enabled: Object.prototype.hasOwnProperty.call(choices, id) ? choices[id]! : true,\n type: \"function\",\n function: {\n name: fnName,\n description: t.description || `${t.name} — provided by the ${server.name} MCP server.`,\n parameters: schema,\n },\n mcpServerId: server.id,\n mcpToolName: t.name,\n });\n }\n } catch (error) {\n debugLogger.warn(\"Failed to discover tools for MCP server\", { server: server.name, error: String(error) });\n }\n }\n\n set((state) => ({\n tools: [...state.tools.filter((t) => !t.mcpServerId), ...collected],\n }));\n debugLogger.info(\"MCP server tools loaded\", { count: collected.length });\n },\n };\n});\n","/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\nimport { usePackageSettingsStore } from \"../../store/packageSettingsStore\";\nimport { authenticationService } from \"../auth/authenticationService\";\n\n/**\n * Client for the gateway's MCP host (phase 1 backend at /api/mcp/servers + /invoke).\n * Lets users connect their own remote MCP servers; the gateway holds the configs\n * and proxies discovery/invocation. Mirrors mcpService's gateway-base + bearer\n * conventions (gatewayApiUrl already ends in /api, so paths start with /mcp/...).\n */\n\nexport interface McpServer {\n id: string;\n name: string;\n url: string;\n authType: string;\n hasAuth: boolean;\n headerName?: string | null;\n enabled: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface McpServerInput {\n name: string;\n url: string;\n authType?: \"none\" | \"bearer\" | \"header\";\n authValue?: string;\n headerName?: string;\n enabled?: boolean;\n}\n\nexport interface McpDiscoveredTool {\n name: string;\n description?: string;\n inputSchema?: Record<string, unknown>;\n}\n\nconst gatewayBase = (): string => {\n const settings = usePackageSettingsStore.getState().settings;\n const url = settings?.gatewayApiUrl?.replace(/\\/$/, \"\");\n if (!url) throw new Error(\"Gateway API is not configured.\");\n return url;\n};\n\nconst authHeaders = (): Record<string, string> => {\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n const token = authenticationService.getToken();\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n return headers;\n};\n\nconst parse = async (res: Response) => {\n const text = await res.text();\n const body = text ? JSON.parse(text) : null;\n if (!res.ok) {\n const message =\n (body && typeof body === \"object\" && (body.error || body.message)) ||\n `Request failed (${res.status})`;\n throw new Error(String(message));\n }\n return body;\n};\n\nexport const listMcpServers = async (): Promise<McpServer[]> =>\n parse(await fetch(`${gatewayBase()}/mcp/servers`, { headers: authHeaders() }));\n\nexport const addMcpServer = async (input: McpServerInput): Promise<McpServer> =>\n parse(\n await fetch(`${gatewayBase()}/mcp/servers`, {\n method: \"POST\",\n headers: authHeaders(),\n body: JSON.stringify(input),\n }),\n );\n\nexport const updateMcpServer = async (\n id: string,\n input: Partial<McpServerInput>,\n): Promise<McpServer> =>\n parse(\n await fetch(`${gatewayBase()}/mcp/servers/${encodeURIComponent(id)}`, {\n method: \"PUT\",\n headers: authHeaders(),\n body: JSON.stringify(input),\n }),\n );\n\nexport const deleteMcpServer = async (id: string): Promise<void> => {\n const res = await fetch(`${gatewayBase()}/mcp/servers/${encodeURIComponent(id)}`, {\n method: \"DELETE\",\n headers: authHeaders(),\n });\n if (!res.ok && res.status !== 204) {\n throw new Error(`Could not remove the server (${res.status}).`);\n }\n};\n\nexport const discoverMcpTools = async (\n id: string,\n): Promise<{ serverId: string; server: string; tools: McpDiscoveredTool[] }> =>\n parse(await fetch(`${gatewayBase()}/mcp/servers/${encodeURIComponent(id)}/tools`, { headers: authHeaders() }));\n"],"mappings":"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","names":[]}
@@ -103,4 +103,4 @@ export {
103
103
  DebugLogger,
104
104
  debugLogger
105
105
  };
106
- //# sourceMappingURL=chunk-KCI46M23.mjs.map
106
+ //# sourceMappingURL=chunk-OCVZVBQQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/logging/debugLogger.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\n/**\n * 🔍 Bandit Debug Logger Service\n * \n * Centralized logging service that provides environment-aware debug logging.\n * \n * Features:\n * - Production builds: Only errors and info logs are shown\n * - Development mode: All logs are shown with clear debug prefixes\n * - Consistent formatting for debugging purposes\n * - Clear indication that logs are for debugging\n * \n * Usage:\n * ```typescript\n * import { debugLogger } from './services/logging/debugLogger';\n * \n * debugLogger.debug('LLM processing', { prompt, response });\n * debugLogger.info('User action completed', { action });\n * debugLogger.warn('Performance warning', { timing });\n * debugLogger.error('Operation failed', { error });\n * ```\n */\n\nexport type LogContext = unknown;\n\nclass DebugLogger {\n private isDevelopment: boolean;\n\n constructor() {\n // Check if we're in development mode using multiple detection methods\n this.isDevelopment = this.detectDevelopmentMode();\n }\n\n private detectDevelopmentMode(): boolean {\n // Check if we're in a development environment\n // This uses a safe approach that works in both ESM and CJS contexts\n try {\n // For browser environments using Vite - check the build-time flag\n const globalFlags = globalThis as typeof globalThis & {\n __VITE_IS_PRODUCTION__?: boolean;\n process?: { env?: { NODE_ENV?: string } };\n };\n\n if (typeof window !== 'undefined' && typeof globalFlags.__VITE_IS_PRODUCTION__ !== 'undefined') {\n return !globalFlags.__VITE_IS_PRODUCTION__;\n }\n \n // For Node.js environments - use try-catch to avoid type errors\n const proc = globalFlags.process;\n if (proc && proc.env) {\n return proc.env.NODE_ENV === 'development';\n }\n \n // For runtime detection, we can also check URL patterns in browser\n if (typeof window !== 'undefined' && window.location) {\n const devHosts = ['localhost', '127.0.0.1'];\n const devPorts = ['5173', '5183']; // common Vite dev ports\n return devHosts.includes(window.location.hostname) ||\n devPorts.includes(window.location.port);\n }\n } catch (e) {\n // If any detection fails, default to development for safety in debug scenarios\n }\n \n // Default to development for safety in debug scenarios\n return true;\n }\n\n /**\n * Set development mode manually (useful for testing or runtime configuration)\n */\n setDevelopmentMode(isDev: boolean): void {\n this.isDevelopment = isDev;\n }\n\n /**\n * Debug logs - only shown in development mode\n * These are obfuscated/hidden in production builds\n * DISABLED to prevent console flooding during chat processing\n */\n debug(message: string, context?: LogContext): void {\n // Debug logging disabled to prevent console flooding\n // Can be re-enabled for specific debugging sessions by uncommenting below:\n // if (this.isDevelopment) {\n // const prefix = '🔍 [DEBUG]';\n // if (context) {\n // console.log(`${prefix} ${message}`, context);\n // } else {\n // console.log(`${prefix} ${message}`);\n // }\n // }\n }\n\n /**\n * Info logs - shown in both development and production\n * Used for important user-facing information\n */\n info(message: string, context?: LogContext): void {\n const prefix = this.isDevelopment ? 'ℹ️ [INFO]' : '[INFO]';\n if (context) {\n console.info(`${prefix} ${message}`, context);\n } else {\n console.info(`${prefix} ${message}`);\n }\n }\n\n /**\n * Warning logs - shown in both development and production\n * Used for non-critical issues that should be noted\n */\n warn(message: string, context?: LogContext): void {\n const prefix = this.isDevelopment ? '⚠️ [WARN]' : '[WARN]';\n if (context) {\n console.warn(`${prefix} ${message}`, context);\n } else {\n console.warn(`${prefix} ${message}`);\n }\n }\n\n /**\n * Error logs - always shown in both development and production\n * Used for critical errors that need attention\n */\n error(message: string, context?: LogContext): void {\n const prefix = this.isDevelopment ? '❌ [ERROR]' : '[ERROR]';\n if (context) {\n console.error(`${prefix} ${message}`, context);\n } else {\n console.error(`${prefix} ${message}`);\n }\n }\n\n /**\n * LLM-specific debug logging for RAG and AI features\n * DISABLED to prevent console flooding during chat processing\n */\n llmDebug(operation: string, data: LogContext): void {\n // LLM debug logging disabled to prevent console flooding\n // Can be re-enabled for specific debugging sessions\n }\n\n /**\n * RAG-specific debug logging for knowledge and document processing\n * DISABLED to prevent console flooding during chat processing\n */\n ragDebug(operation: string, data: LogContext): void {\n // RAG debug logging disabled to prevent console flooding\n // Can be re-enabled for specific debugging sessions\n }\n\n /**\n * Memory-specific debug logging for AI memory features\n * DISABLED to prevent console flooding during chat processing\n */\n memoryDebug(operation: string, data: LogContext): void {\n // Memory debug logging disabled to prevent console flooding\n // Can be re-enabled for specific debugging sessions\n }\n\n /**\n * Table logging for development debugging\n * DISABLED to prevent console flooding during chat processing\n */\n table(data: unknown[], message?: string): void {\n // Table logging disabled to prevent console flooding\n // Can be re-enabled for specific debugging sessions\n }\n}\n\n// Export a singleton instance\nexport const debugLogger = new DebugLogger();\n\n// Export the class for testing purposes\nexport { DebugLogger };\n"],"mappings":";AA+BA,IAAM,cAAN,MAAkB;AAAA,EACR;AAAA,EAER,cAAc;AAEZ,SAAK,gBAAgB,KAAK,sBAAsB;AAAA,EAClD;AAAA,EAEQ,wBAAiC;AAGvC,QAAI;AAEF,YAAM,cAAc;AAKpB,UAAI,OAAO,WAAW,eAAe,OAAO,YAAY,2BAA2B,aAAa;AAC9F,eAAO,CAAC,YAAY;AAAA,MACtB;AAGA,YAAM,OAAO,YAAY;AACzB,UAAI,QAAQ,KAAK,KAAK;AACpB,eAAO,KAAK,IAAI,aAAa;AAAA,MAC/B;AAGA,UAAI,OAAO,WAAW,eAAe,OAAO,UAAU;AACpD,cAAM,WAAW,CAAC,aAAa,WAAW;AAC1C,cAAM,WAAW,CAAC,QAAQ,MAAM;AAChC,eAAO,SAAS,SAAS,OAAO,SAAS,QAAQ,KAC1C,SAAS,SAAS,OAAO,SAAS,IAAI;AAAA,MAC/C;AAAA,IACF,SAAS,GAAG;AAAA,IAEZ;AAGA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,OAAsB;AACvC,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAiB,SAA4B;AAAA,EAWnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,SAAiB,SAA4B;AAChD,UAAM,SAAS,KAAK,gBAAgB,wBAAc;AAClD,QAAI,SAAS;AACX,cAAQ,KAAK,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO;AAAA,IAC9C,OAAO;AACL,cAAQ,KAAK,GAAG,MAAM,IAAI,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,SAAiB,SAA4B;AAChD,UAAM,SAAS,KAAK,gBAAgB,wBAAc;AAClD,QAAI,SAAS;AACX,cAAQ,KAAK,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO;AAAA,IAC9C,OAAO;AACL,cAAQ,KAAK,GAAG,MAAM,IAAI,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAiB,SAA4B;AACjD,UAAM,SAAS,KAAK,gBAAgB,mBAAc;AAClD,QAAI,SAAS;AACX,cAAQ,MAAM,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO;AAAA,IAC/C,OAAO;AACL,cAAQ,MAAM,GAAG,MAAM,IAAI,OAAO,EAAE;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,WAAmB,MAAwB;AAAA,EAGpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,WAAmB,MAAwB;AAAA,EAGpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,WAAmB,MAAwB;AAAA,EAGvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAiB,SAAwB;AAAA,EAG/C;AACF;AAGO,IAAM,cAAc,IAAI,YAAY;","names":[]}
@@ -36,4 +36,4 @@ function defineCustomElement(name, Component) {
36
36
  export {
37
37
  defineCustomElement
38
38
  };
39
- //# sourceMappingURL=chunk-IXIM7BNO.mjs.map
39
+ //# sourceMappingURL=chunk-P4C5IRM5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/custom-element.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Burtson Labs LLC.\n * SPDX-License-Identifier: BUSL-1.1\n * See LICENSE for the applicable terms.\n */\n\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom/client\";\n\ntype AttributeMap = Record<string, string>;\n\nexport function defineCustomElement<Props extends Record<string, unknown>>(\n name: string,\n Component: React.ComponentType<Props>\n) {\n if (customElements.get(name)) return;\n\n class ReactElement extends HTMLElement {\n mountPoint: HTMLDivElement;\n root!: ReactDOM.Root;\n\n constructor() {\n super();\n this.mountPoint = document.createElement(\"div\");\n this.attachShadow({ mode: \"open\" }).appendChild(this.mountPoint);\n }\n\n connectedCallback() {\n this.render();\n }\n\n static get observedAttributes() {\n return [];\n }\n\n attributeChangedCallback() {\n this.render();\n }\n\n render() {\n const props = Object.fromEntries(\n Array.from(this.attributes).map((attr) => [attr.name, attr.value])\n ) as AttributeMap;\n\n if (!this.root) {\n this.root = ReactDOM.createRoot(this.mountPoint);\n }\n\n this.root.render(React.createElement(Component, props as Props));\n }\n }\n\n customElements.define(name, ReactElement);\n}\n"],"mappings":";AAOA,OAAO,WAAW;AAClB,OAAO,cAAc;AAId,SAAS,oBACd,MACA,WACA;AACA,MAAI,eAAe,IAAI,IAAI,EAAG;AAAA,EAE9B,MAAM,qBAAqB,YAAY;AAAA,IACrC;AAAA,IACA;AAAA,IAEA,cAAc;AACZ,YAAM;AACN,WAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,WAAK,aAAa,EAAE,MAAM,OAAO,CAAC,EAAE,YAAY,KAAK,UAAU;AAAA,IACjE;AAAA,IAEA,oBAAoB;AAClB,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,WAAW,qBAAqB;AAC9B,aAAO,CAAC;AAAA,IACV;AAAA,IAEA,2BAA2B;AACzB,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,SAAS;AACP,YAAM,QAAQ,OAAO;AAAA,QACnB,MAAM,KAAK,KAAK,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,MACnE;AAEA,UAAI,CAAC,KAAK,MAAM;AACd,aAAK,OAAO,SAAS,WAAW,KAAK,UAAU;AAAA,MACjD;AAEA,WAAK,KAAK,OAAO,MAAM,cAAc,WAAW,KAAc,CAAC;AAAA,IACjE;AAAA,EACF;AAEA,iBAAe,OAAO,MAAM,YAAY;AAC1C;","names":[]}
@@ -2,10 +2,10 @@ import {
2
2
  StreamingMarkdown_default,
3
3
  isNativeShell,
4
4
  isStandalonePwa
5
- } from "./chunk-47MOBOP3.mjs";
5
+ } from "./chunk-IZX2J65Q.mjs";
6
6
  import {
7
7
  aiProviderInitService
8
- } from "./chunk-ZNK3ELTZ.mjs";
8
+ } from "./chunk-5KBTOCQZ.mjs";
9
9
  import {
10
10
  addMcpServer,
11
11
  deleteMcpServer,
@@ -13,10 +13,10 @@ import {
13
13
  listMcpServers,
14
14
  updateMcpServer,
15
15
  useMCPToolsStore
16
- } from "./chunk-G5POQT2R.mjs";
16
+ } from "./chunk-O6P37PFR.mjs";
17
17
  import {
18
18
  chat_modal_default
19
- } from "./chunk-OGMXL7BF.mjs";
19
+ } from "./chunk-VBHI4TJC.mjs";
20
20
  import {
21
21
  AlertCircle,
22
22
  AlertTriangle,
@@ -91,7 +91,7 @@ import {
91
91
  themeSkinIds,
92
92
  useNotificationService,
93
93
  useVoiceStore
94
- } from "./chunk-R6HMLYKQ.mjs";
94
+ } from "./chunk-WLNZL6SP.mjs";
95
95
  import {
96
96
  TOPICS,
97
97
  brandingService_default,
@@ -102,24 +102,24 @@ import {
102
102
  useFeatures,
103
103
  useKnowledgeStore2 as useKnowledgeStore,
104
104
  useVectorStore
105
- } from "./chunk-ODGVCSKV.mjs";
105
+ } from "./chunk-J6SWNO7Z.mjs";
106
106
  import {
107
107
  indexedDBService_default,
108
108
  models,
109
109
  useModelStore,
110
110
  usePackageSettingsStore,
111
111
  usePreferencesStore
112
- } from "./chunk-WQEBTH2R.mjs";
112
+ } from "./chunk-TY5VL3SG.mjs";
113
113
  import {
114
114
  AIProviderFactory,
115
115
  GatewayService,
116
116
  authenticationService,
117
117
  useAIProviderStore,
118
118
  useAuthenticationStore
119
- } from "./chunk-Q6LXVYTC.mjs";
119
+ } from "./chunk-CQJGUYRW.mjs";
120
120
  import {
121
121
  debugLogger
122
- } from "./chunk-KCI46M23.mjs";
122
+ } from "./chunk-OCVZVBQQ.mjs";
123
123
 
124
124
  // src/management/management.tsx
125
125
  import { useState as useState15, useEffect as useEffect14, useCallback as useCallback9, useMemo as useMemo7 } from "react";
@@ -9516,7 +9516,7 @@ function useManagementAccess() {
9516
9516
 
9517
9517
  // src/management/management.tsx
9518
9518
  import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
9519
- var preloadChatPage = () => import("./chat-LB6UEEEW.mjs");
9519
+ var preloadChatPage = () => import("./chat-OSAVW6L2.mjs");
9520
9520
  var buildCapabilitiesUrl = (gatewayApiUrl) => {
9521
9521
  const trimmed = gatewayApiUrl.replace(/\/$/, "");
9522
9522
  if (trimmed.endsWith("/api")) {
@@ -10572,4 +10572,4 @@ export {
10572
10572
  useManagementAccess,
10573
10573
  management_default
10574
10574
  };
10575
- //# sourceMappingURL=chunk-RUXYVMW2.mjs.map
10575
+ //# sourceMappingURL=chunk-PNQRS5EN.mjs.map