centaurus-cli 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5158
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1526 -1512
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +601 -572
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -406
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3263
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -514
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -204
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-manager.js","sourceRoot":"","sources":["../../src/config/mcp-config-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/config/mcp-config-manager.ts"],"sourcesContent":["import * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as os from 'os';\r\nimport { logWarning } from '../utils/logger.js';\r\n\r\nexport interface MCPServerConfig {\r\n name: string;\r\n command: string;\r\n args?: string[];\r\n env?: Record<string, string>;\r\n enabled?: boolean;\r\n auth?: {\r\n type: 'oauth';\r\n clientId?: string;\r\n authUrl?: string;\r\n };\r\n}\r\n\r\nexport interface MCPConfig {\r\n servers: MCPServerConfig[];\r\n}\r\n\r\nexport class MCPConfigManager {\r\n private configPath: string;\r\n private config: MCPConfig;\r\n\r\n constructor(configDir?: string) {\r\n const baseDir = configDir || path.join(os.homedir(), '.centaurus');\r\n this.configPath = path.join(baseDir, 'mcp-config.json');\r\n this.config = this.load();\r\n }\r\n\r\n getConfigPath(): string {\r\n return this.configPath;\r\n }\r\n\r\n load(): MCPConfig {\r\n try {\r\n if (fs.existsSync(this.configPath)) {\r\n const content = fs.readFileSync(this.configPath, 'utf-8');\r\n\r\n // Handle empty file\r\n if (!content.trim()) {\r\n logWarning('[MCP Config] Config file is empty');\r\n return this.getDefaultConfig();\r\n }\r\n\r\n let rawConfig: any;\r\n try {\r\n rawConfig = JSON.parse(content);\r\n } catch (parseError: any) {\r\n logWarning(`[MCP Config] Invalid JSON: ${parseError.message}`);\r\n return this.getDefaultConfig();\r\n }\r\n\r\n // Normalize the config to standard format\r\n const normalizedConfig = this.normalizeConfig(rawConfig);\r\n\r\n if (normalizedConfig.servers.length === 0) {\r\n logWarning('[MCP Config] No servers found in config file');\r\n }\r\n\r\n return normalizedConfig;\r\n } else {\r\n // Config file doesn't exist - create directory and return default\r\n const configDir = path.dirname(this.configPath);\r\n if (!fs.existsSync(configDir)) {\r\n fs.mkdirSync(configDir, { recursive: true });\r\n }\r\n }\r\n } catch (error: any) {\r\n logWarning(`[MCP Config] Failed to load config: ${error.message}`);\r\n }\r\n\r\n return this.getDefaultConfig();\r\n }\r\n\r\n /**\r\n * Normalize config from different formats to standard format\r\n * Supports:\r\n * 1. mcp_servers format (preferred): { \"mcp_servers\": { \"serverName\": { \"command\": \"...\", ... } } }\r\n * 2. Array format: { \"servers\": [{ \"name\": \"x\", \"command\": \"y\", ... }] }\r\n * 3. Object format: { \"serverName\": { \"command\": \"y\", ... } } - keys become server names\r\n * 4. mcpServers format (VSCode/Claude style): { \"mcpServers\": { ... } }\r\n */\r\n private normalizeConfig(rawConfig: any): MCPConfig {\r\n // If it's null or not an object, return default\r\n if (!rawConfig || typeof rawConfig !== 'object') {\r\n return this.getDefaultConfig();\r\n }\r\n\r\n // Format 1 (PREFERRED): Check for \"mcp_servers\" key (snake_case) - object format\r\n if (rawConfig.mcp_servers && typeof rawConfig.mcp_servers === 'object' && !Array.isArray(rawConfig.mcp_servers)) {\r\n return this.convertObjectToArrayFormat(rawConfig.mcp_servers);\r\n }\r\n\r\n // Format 2: Standard array format with \"servers\" key\r\n if (Array.isArray(rawConfig.servers)) {\r\n const validServers = rawConfig.servers\r\n .filter((s: any) => this.validateServerConfig(s))\r\n .map((s: any) => this.sanitizeServerConfig(s));\r\n return { servers: validServers };\r\n }\r\n\r\n // Format 3: Check for \"mcpServers\" key (VSCode/Claude Desktop style - camelCase)\r\n if (rawConfig.mcpServers && typeof rawConfig.mcpServers === 'object') {\r\n return this.convertObjectToArrayFormat(rawConfig.mcpServers);\r\n }\r\n\r\n // Format 4: Object format where keys are server names (legacy)\r\n // Check if any top-level key looks like a server config (has 'command' property)\r\n const potentialServers = Object.entries(rawConfig).filter(\r\n ([key, value]: [string, any]) =>\r\n key !== 'servers' &&\r\n key !== 'mcpServers' &&\r\n key !== 'mcp_servers' &&\r\n value &&\r\n typeof value === 'object' &&\r\n 'command' in value\r\n );\r\n\r\n if (potentialServers.length > 0) {\r\n return this.convertObjectToArrayFormat(rawConfig);\r\n }\r\n\r\n // If we have a 'servers' key but it's not an array, try to handle it\r\n if (rawConfig.servers && typeof rawConfig.servers === 'object' && !Array.isArray(rawConfig.servers)) {\r\n return this.convertObjectToArrayFormat(rawConfig.servers);\r\n }\r\n\r\n logWarning('[MCP Config] Unrecognized config format');\r\n return this.getDefaultConfig();\r\n }\r\n\r\n /**\r\n * Convert object-based format to array format\r\n * { \"serverName\": { \"command\": \"x\", ... } } => { \"servers\": [{ \"name\": \"serverName\", \"command\": \"x\", ... }] }\r\n */\r\n private convertObjectToArrayFormat(configObject: Record<string, any>): MCPConfig {\r\n const servers: MCPServerConfig[] = [];\r\n\r\n for (const [name, serverConfig] of Object.entries(configObject)) {\r\n if (!serverConfig || typeof serverConfig !== 'object') {\r\n logWarning(`[MCP Config] Skipping invalid server entry: ${name}`);\r\n continue;\r\n }\r\n\r\n // Build server config with name from key\r\n const server: MCPServerConfig = {\r\n name,\r\n command: serverConfig.command,\r\n args: serverConfig.args,\r\n env: serverConfig.env,\r\n enabled: serverConfig.enabled,\r\n auth: serverConfig.auth\r\n };\r\n\r\n if (this.validateServerConfig(server)) {\r\n servers.push(this.sanitizeServerConfig(server));\r\n }\r\n }\r\n\r\n return { servers };\r\n }\r\n\r\n /**\r\n * Validate a server config has required fields\r\n */\r\n private validateServerConfig(config: any): boolean {\r\n if (!config || typeof config !== 'object') {\r\n return false;\r\n }\r\n\r\n if (!config.name || typeof config.name !== 'string') {\r\n logWarning('[MCP Config] Server missing required \"name\" field');\r\n return false;\r\n }\r\n\r\n if (!config.command || typeof config.command !== 'string') {\r\n logWarning(`[MCP Config] Server \"${config.name}\" missing required \"command\" field`);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Sanitize and set defaults for server config\r\n */\r\n private sanitizeServerConfig(config: any): MCPServerConfig {\r\n return {\r\n name: config.name,\r\n command: config.command,\r\n args: Array.isArray(config.args) ? config.args : undefined,\r\n env: config.env && typeof config.env === 'object' ? config.env : undefined,\r\n enabled: config.enabled !== false, // Default to enabled\r\n auth: config.auth\r\n };\r\n }\r\n\r\n save(config: MCPConfig): void {\r\n try {\r\n const configDir = path.dirname(this.configPath);\r\n\r\n // Ensure config directory exists\r\n if (!fs.existsSync(configDir)) {\r\n fs.mkdirSync(configDir, { recursive: true });\r\n }\r\n\r\n // Convert to mcp_servers object format (preferred format)\r\n const mcpServersFormat: Record<string, any> = {};\r\n for (const server of config.servers) {\r\n const serverConfig: any = {\r\n command: server.command\r\n };\r\n if (server.args && server.args.length > 0) {\r\n serverConfig.args = server.args;\r\n }\r\n if (server.env && Object.keys(server.env).length > 0) {\r\n serverConfig.env = server.env;\r\n }\r\n if (server.enabled === false) {\r\n serverConfig.enabled = false;\r\n }\r\n if (server.auth) {\r\n serverConfig.auth = server.auth;\r\n }\r\n mcpServersFormat[server.name] = serverConfig;\r\n }\r\n\r\n const outputConfig = { mcp_servers: mcpServersFormat };\r\n fs.writeFileSync(this.configPath, JSON.stringify(outputConfig, null, 2), 'utf-8');\r\n this.config = config;\r\n } catch (error) {\r\n throw new Error(`Failed to save MCP config: ${error}`);\r\n }\r\n }\r\n\r\n getServers(): MCPServerConfig[] {\r\n return this.config.servers.filter(s => s.enabled !== false);\r\n }\r\n\r\n getAllServers(): MCPServerConfig[] {\r\n return this.config.servers;\r\n }\r\n\r\n /**\r\n * Reload config from disk into cache\r\n * Call this when user runs /mcp refresh\r\n */\r\n reload(): MCPConfig {\r\n this.config = this.load();\r\n return this.config;\r\n }\r\n\r\n addServer(server: MCPServerConfig): void {\r\n this.config.servers.push(server);\r\n this.save(this.config);\r\n }\r\n\r\n removeServer(name: string): void {\r\n this.config.servers = this.config.servers.filter(s => s.name !== name);\r\n this.save(this.config);\r\n }\r\n\r\n enableServer(name: string): void {\r\n const index = this.config.servers.findIndex(s => s.name === name);\r\n if (index !== -1) {\r\n this.config.servers[index].enabled = true;\r\n this.save(this.config);\r\n }\r\n }\r\n\r\n disableServer(name: string): void {\r\n const index = this.config.servers.findIndex(s => s.name === name);\r\n if (index !== -1) {\r\n this.config.servers[index].enabled = false;\r\n this.save(this.config);\r\n }\r\n }\r\n\r\n updateServer(name: string, updates: Partial<MCPServerConfig>): void {\r\n const index = this.config.servers.findIndex(s => s.name === name);\r\n if (index !== -1) {\r\n this.config.servers[index] = { ...this.config.servers[index], ...updates };\r\n this.save(this.config);\r\n }\r\n }\r\n\r\n /**\r\n * Validate a server config JSON string and return parsed config or error\r\n * Supports multiple formats:\r\n * 1. \"server-name\": {\"command\": \"...\", \"args\": [...]}\r\n * 2. {\"server-name\": {\"command\": \"...\", \"args\": [...]}}\r\n * 3. {\"mcpServers\": {\"server-name\": {\"command\": \"...\", \"args\": [...]}}}\r\n * 4. {\"name\": \"server-name\", \"command\": \"...\", \"args\": [...]}\r\n */\r\n validateServerConfigJSON(jsonString: string): { valid: boolean; config?: MCPServerConfig; error?: string } {\r\n try {\r\n let parsed: any;\r\n let parseErrorMsg = '';\r\n\r\n // Sanitize input (remove comments, trailing commas)\r\n const cleanJson = this.sanitizeJsonString(jsonString);\r\n\r\n // 1. Try direct parse\r\n try {\r\n parsed = JSON.parse(cleanJson);\r\n } catch (e1: any) {\r\n parseErrorMsg = e1.message;\r\n // 2. Try wrapping in braces (for pasted properties like \"key\": { ... })\r\n try {\r\n parsed = JSON.parse(`{${cleanJson}}`);\r\n } catch (e2) {\r\n // 3. Try appending closing brace (common copy-paste error)\r\n try {\r\n parsed = JSON.parse(`${cleanJson}}`);\r\n } catch (e3) {\r\n // 4. Try both\r\n try {\r\n parsed = JSON.parse(`{${cleanJson}}`);\r\n } catch (e4) {\r\n return { valid: false, error: `Invalid JSON: ${parseErrorMsg}` };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Strategy: Extract server name and config from various formats\r\n\r\n // Check 1: Is the root itself a server config with \"name\" field?\r\n // Format: {\"name\": \"server-name\", \"command\": \"...\", \"args\": [...]}\r\n if (this.isValidServerShape(parsed) && parsed.name) {\r\n return this.finalizeValidation(parsed);\r\n }\r\n\r\n // Check 2: Is it wrapped in \"mcpServers\" or \"mcp_servers\"?\r\n // Format: {\"mcpServers\": {\"server-name\": {\"command\": \"...\", \"args\": [...]}}}\r\n const inner = parsed.mcpServers || parsed.mcp_servers || parsed.servers;\r\n if (inner && typeof inner === 'object') {\r\n // If array, take first\r\n if (Array.isArray(inner) && inner.length > 0 && this.isValidServerShape(inner[0])) {\r\n return this.finalizeValidation(inner[0]);\r\n }\r\n // If object, extract first server entry\r\n if (!Array.isArray(inner)) {\r\n const entries = Object.entries(inner);\r\n if (entries.length > 0) {\r\n const [serverName, serverConfig] = entries[0];\r\n if (this.isValidServerShape(serverConfig)) {\r\n // Inject key as name if missing\r\n const configWithName = { ...(serverConfig as any), name: serverName };\r\n return this.finalizeValidation(configWithName);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Check 3: Is it a single server entry without wrapper?\r\n // Format: {\"server-name\": {\"command\": \"...\", \"args\": [...]}}\r\n // or Format: \"server-name\": {\"command\": \"...\", \"args\": [...]}\r\n const entries = Object.entries(parsed);\r\n if (entries.length === 1) {\r\n const [serverName, serverConfig] = entries[0];\r\n // Skip known wrapper keys\r\n if (serverName !== 'mcpServers' && serverName !== 'servers' && serverName !== 'mcp_servers') {\r\n if (this.isValidServerShape(serverConfig)) {\r\n // Inject key as name\r\n const configWithName = { ...(serverConfig as any), name: serverName };\r\n return this.finalizeValidation(configWithName);\r\n }\r\n }\r\n }\r\n\r\n // Check 4: Multiple server entries - take the first one\r\n for (const [key, val] of entries) {\r\n if (key !== 'mcpServers' && key !== 'servers' && key !== 'mcp_servers' && this.isValidServerShape(val)) {\r\n // Inject key as name\r\n const configWithName = { ...(val as any), name: key };\r\n return this.finalizeValidation(configWithName);\r\n }\r\n }\r\n\r\n return { valid: false, error: 'Could not find a valid MCP server configuration (must have \"command\" field)' };\r\n\r\n } catch (parseError: any) {\r\n return { valid: false, error: `Unexpected error: ${parseError.message}` };\r\n }\r\n }\r\n\r\n private isValidServerShape(obj: any): boolean {\r\n return obj && typeof obj === 'object' && typeof obj.command === 'string';\r\n }\r\n\r\n private finalizeValidation(parsed: any): { valid: boolean; config?: MCPServerConfig; error?: string } {\r\n // Ensure name exists\r\n if (!parsed.name || typeof parsed.name !== 'string') {\r\n return { valid: false, error: 'Missing or invalid \"name\" field' };\r\n }\r\n\r\n // Trim and validate name\r\n const serverName = parsed.name.trim();\r\n if (!serverName) {\r\n return { valid: false, error: 'Server name cannot be empty' };\r\n }\r\n\r\n // Check for duplicate name\r\n const existingNames = this.config.servers.map(s => s.name.toLowerCase());\r\n if (existingNames.includes(serverName.toLowerCase())) {\r\n return { valid: false, error: `Server with name \"${serverName}\" already exists` };\r\n }\r\n\r\n // Validate optional fields\r\n if (parsed.args !== undefined && !Array.isArray(parsed.args)) {\r\n return { valid: false, error: '\"args\" must be an array of strings' };\r\n }\r\n if (parsed.env !== undefined && (typeof parsed.env !== 'object' || Array.isArray(parsed.env))) {\r\n return { valid: false, error: '\"env\" must be an object with string values' };\r\n }\r\n\r\n const config: MCPServerConfig = {\r\n name: serverName,\r\n command: parsed.command,\r\n args: Array.isArray(parsed.args) ? parsed.args : undefined,\r\n env: parsed.env && typeof parsed.env === 'object' ? parsed.env : undefined,\r\n enabled: parsed.enabled !== false,\r\n auth: parsed.auth\r\n };\r\n\r\n return { valid: true, config };\r\n }\r\n\r\n private getDefaultConfig(): MCPConfig {\r\n return {\r\n servers: []\r\n };\r\n }\r\n\r\n /**\r\n * Helper to clean up JSON string (remove comments, trailing commas)\r\n */\r\n private sanitizeJsonString(str: string): string {\n try {\n const withoutComments = this.stripCommentsOutsideStrings(str);\n return this.removeTrailingCommasOutsideStrings(withoutComments);\n } catch (e) {\n return str;\n }\n }\n\n /**\n * Remove JS-style comments from JSON-like input, but only when they appear\n * outside of quoted JSON strings (so values like \"https://...\" remain intact).\n */\n private stripCommentsOutsideStrings(input: string): string {\n let result = '';\n let inString = false;\n let escaped = false;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const next = input[i + 1];\n\n if (inLineComment) {\n if (char === '\\n' || char === '\\r') {\n inLineComment = false;\n result += char;\n }\n continue;\n }\n\n if (inBlockComment) {\n if (char === '*' && next === '/') {\n inBlockComment = false;\n i++; // Skip '/'\n continue;\n }\n\n // Preserve newlines so JSON parser line/column errors remain useful\n if (char === '\\n' || char === '\\r') {\n result += char;\n }\n continue;\n }\n\n if (inString) {\n result += char;\n\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"') {\n inString = true;\n result += char;\n continue;\n }\n\n if (char === '/' && next === '/') {\n inLineComment = true;\n i++; // Skip second '/'\n continue;\n }\n\n if (char === '/' && next === '*') {\n inBlockComment = true;\n i++; // Skip '*'\n continue;\n }\n\n result += char;\n }\n\n return result;\n }\n\n /**\n * Remove trailing commas before closing } or ], while respecting strings.\n */\n private removeTrailingCommasOutsideStrings(input: string): string {\n let result = '';\n let inString = false;\n let escaped = false;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n if (inString) {\n result += char;\n\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"') {\n inString = true;\n result += char;\n continue;\n }\n\n if (char === ',') {\n let j = i + 1;\n while (j < input.length && /\\s/.test(input[j])) {\n j++;\n }\n\n const nextNonWhitespace = input[j];\n if (nextNonWhitespace === '}' || nextNonWhitespace === ']') {\n continue;\n }\n }\n\n result += char;\n }\n\n return result;\n }\n\r\n createExampleConfig(): void {\r\n const exampleConfig: MCPConfig = {\r\n servers: [\r\n {\r\n name: 'example-filesystem',\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-filesystem', os.homedir()],\r\n enabled: false\r\n }\r\n ]\r\n };\r\n\r\n if (!fs.existsSync(this.configPath)) {\r\n this.save(exampleConfig);\r\n }\r\n }\r\n}\r\n"],"mappings":"AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,kBAAkB;AAmBpB,MAAM,iBAAiB;AAAA,EAClB;AAAA,EACA;AAAA,EAER,YAAY,WAAoB;AAC5B,UAAM,UAAU,aAAa,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY;AACjE,SAAK,aAAa,KAAK,KAAK,SAAS,iBAAiB;AACtD,SAAK,SAAS,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,gBAAwB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,OAAkB;AACd,QAAI;AACA,UAAI,GAAG,WAAW,KAAK,UAAU,GAAG;AAChC,cAAM,UAAU,GAAG,aAAa,KAAK,YAAY,OAAO;AAGxD,YAAI,CAAC,QAAQ,KAAK,GAAG;AACjB,qBAAW,mCAAmC;AAC9C,iBAAO,KAAK,iBAAiB;AAAA,QACjC;AAEA,YAAI;AACJ,YAAI;AACA,sBAAY,KAAK,MAAM,OAAO;AAAA,QAClC,SAAS,YAAiB;AACtB,qBAAW,8BAA8B,WAAW,OAAO,EAAE;AAC7D,iBAAO,KAAK,iBAAiB;AAAA,QACjC;AAGA,cAAM,mBAAmB,KAAK,gBAAgB,SAAS;AAEvD,YAAI,iBAAiB,QAAQ,WAAW,GAAG;AACvC,qBAAW,8CAA8C;AAAA,QAC7D;AAEA,eAAO;AAAA,MACX,OAAO;AAEH,cAAM,YAAY,KAAK,QAAQ,KAAK,UAAU;AAC9C,YAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC3B,aAAG,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ,SAAS,OAAY;AACjB,iBAAW,uCAAuC,MAAM,OAAO,EAAE;AAAA,IACrE;AAEA,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,gBAAgB,WAA2B;AAE/C,QAAI,CAAC,aAAa,OAAO,cAAc,UAAU;AAC7C,aAAO,KAAK,iBAAiB;AAAA,IACjC;AAGA,QAAI,UAAU,eAAe,OAAO,UAAU,gBAAgB,YAAY,CAAC,MAAM,QAAQ,UAAU,WAAW,GAAG;AAC7G,aAAO,KAAK,2BAA2B,UAAU,WAAW;AAAA,IAChE;AAGA,QAAI,MAAM,QAAQ,UAAU,OAAO,GAAG;AAClC,YAAM,eAAe,UAAU,QAC1B,OAAO,CAAC,MAAW,KAAK,qBAAqB,CAAC,CAAC,EAC/C,IAAI,CAAC,MAAW,KAAK,qBAAqB,CAAC,CAAC;AACjD,aAAO,EAAE,SAAS,aAAa;AAAA,IACnC;AAGA,QAAI,UAAU,cAAc,OAAO,UAAU,eAAe,UAAU;AAClE,aAAO,KAAK,2BAA2B,UAAU,UAAU;AAAA,IAC/D;AAIA,UAAM,mBAAmB,OAAO,QAAQ,SAAS,EAAE;AAAA,MAC/C,CAAC,CAAC,KAAK,KAAK,MACR,QAAQ,aACR,QAAQ,gBACR,QAAQ,iBACR,SACA,OAAO,UAAU,YACjB,aAAa;AAAA,IACrB;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC7B,aAAO,KAAK,2BAA2B,SAAS;AAAA,IACpD;AAGA,QAAI,UAAU,WAAW,OAAO,UAAU,YAAY,YAAY,CAAC,MAAM,QAAQ,UAAU,OAAO,GAAG;AACjG,aAAO,KAAK,2BAA2B,UAAU,OAAO;AAAA,IAC5D;AAEA,eAAW,yCAAyC;AACpD,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,2BAA2B,cAA8C;AAC7E,UAAM,UAA6B,CAAC;AAEpC,eAAW,CAAC,MAAM,YAAY,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC7D,UAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAAU;AACnD,mBAAW,+CAA+C,IAAI,EAAE;AAChE;AAAA,MACJ;AAGA,YAAM,SAA0B;AAAA,QAC5B;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,MAAM,aAAa;AAAA,QACnB,KAAK,aAAa;AAAA,QAClB,SAAS,aAAa;AAAA,QACtB,MAAM,aAAa;AAAA,MACvB;AAEA,UAAI,KAAK,qBAAqB,MAAM,GAAG;AACnC,gBAAQ,KAAK,KAAK,qBAAqB,MAAM,CAAC;AAAA,MAClD;AAAA,IACJ;AAEA,WAAO,EAAE,QAAQ;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,QAAsB;AAC/C,QAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACvC,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,OAAO,QAAQ,OAAO,OAAO,SAAS,UAAU;AACjD,iBAAW,mDAAmD;AAC9D,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,OAAO,WAAW,OAAO,OAAO,YAAY,UAAU;AACvD,iBAAW,wBAAwB,OAAO,IAAI,oCAAoC;AAClF,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,QAA8B;AACvD,WAAO;AAAA,MACH,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO;AAAA,MACjD,KAAK,OAAO,OAAO,OAAO,OAAO,QAAQ,WAAW,OAAO,MAAM;AAAA,MACjE,SAAS,OAAO,YAAY;AAAA;AAAA,MAC5B,MAAM,OAAO;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,KAAK,QAAyB;AAC1B,QAAI;AACA,YAAM,YAAY,KAAK,QAAQ,KAAK,UAAU;AAG9C,UAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC3B,WAAG,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC/C;AAGA,YAAM,mBAAwC,CAAC;AAC/C,iBAAW,UAAU,OAAO,SAAS;AACjC,cAAM,eAAoB;AAAA,UACtB,SAAS,OAAO;AAAA,QACpB;AACA,YAAI,OAAO,QAAQ,OAAO,KAAK,SAAS,GAAG;AACvC,uBAAa,OAAO,OAAO;AAAA,QAC/B;AACA,YAAI,OAAO,OAAO,OAAO,KAAK,OAAO,GAAG,EAAE,SAAS,GAAG;AAClD,uBAAa,MAAM,OAAO;AAAA,QAC9B;AACA,YAAI,OAAO,YAAY,OAAO;AAC1B,uBAAa,UAAU;AAAA,QAC3B;AACA,YAAI,OAAO,MAAM;AACb,uBAAa,OAAO,OAAO;AAAA,QAC/B;AACA,yBAAiB,OAAO,IAAI,IAAI;AAAA,MACpC;AAEA,YAAM,eAAe,EAAE,aAAa,iBAAiB;AACrD,SAAG,cAAc,KAAK,YAAY,KAAK,UAAU,cAAc,MAAM,CAAC,GAAG,OAAO;AAChF,WAAK,SAAS;AAAA,IAClB,SAAS,OAAO;AACZ,YAAM,IAAI,MAAM,8BAA8B,KAAK,EAAE;AAAA,IACzD;AAAA,EACJ;AAAA,EAEA,aAAgC;AAC5B,WAAO,KAAK,OAAO,QAAQ,OAAO,OAAK,EAAE,YAAY,KAAK;AAAA,EAC9D;AAAA,EAEA,gBAAmC;AAC/B,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAoB;AAChB,SAAK,SAAS,KAAK,KAAK;AACxB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,UAAU,QAA+B;AACrC,SAAK,OAAO,QAAQ,KAAK,MAAM;AAC/B,SAAK,KAAK,KAAK,MAAM;AAAA,EACzB;AAAA,EAEA,aAAa,MAAoB;AAC7B,SAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,OAAO,OAAK,EAAE,SAAS,IAAI;AACrE,SAAK,KAAK,KAAK,MAAM;AAAA,EACzB;AAAA,EAEA,aAAa,MAAoB;AAC7B,UAAM,QAAQ,KAAK,OAAO,QAAQ,UAAU,OAAK,EAAE,SAAS,IAAI;AAChE,QAAI,UAAU,IAAI;AACd,WAAK,OAAO,QAAQ,KAAK,EAAE,UAAU;AACrC,WAAK,KAAK,KAAK,MAAM;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,cAAc,MAAoB;AAC9B,UAAM,QAAQ,KAAK,OAAO,QAAQ,UAAU,OAAK,EAAE,SAAS,IAAI;AAChE,QAAI,UAAU,IAAI;AACd,WAAK,OAAO,QAAQ,KAAK,EAAE,UAAU;AACrC,WAAK,KAAK,KAAK,MAAM;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,aAAa,MAAc,SAAyC;AAChE,UAAM,QAAQ,KAAK,OAAO,QAAQ,UAAU,OAAK,EAAE,SAAS,IAAI;AAChE,QAAI,UAAU,IAAI;AACd,WAAK,OAAO,QAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG,GAAG,QAAQ;AACzE,WAAK,KAAK,KAAK,MAAM;AAAA,IACzB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,yBAAyB,YAAkF;AACvG,QAAI;AACA,UAAI;AACJ,UAAI,gBAAgB;AAGpB,YAAM,YAAY,KAAK,mBAAmB,UAAU;AAGpD,UAAI;AACA,iBAAS,KAAK,MAAM,SAAS;AAAA,MACjC,SAAS,IAAS;AACd,wBAAgB,GAAG;AAEnB,YAAI;AACA,mBAAS,KAAK,MAAM,IAAI,SAAS,GAAG;AAAA,QACxC,SAAS,IAAI;AAET,cAAI;AACA,qBAAS,KAAK,MAAM,GAAG,SAAS,GAAG;AAAA,UACvC,SAAS,IAAI;AAET,gBAAI;AACA,uBAAS,KAAK,MAAM,IAAI,SAAS,GAAG;AAAA,YACxC,SAAS,IAAI;AACT,qBAAO,EAAE,OAAO,OAAO,OAAO,iBAAiB,aAAa,GAAG;AAAA,YACnE;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAMA,UAAI,KAAK,mBAAmB,MAAM,KAAK,OAAO,MAAM;AAChD,eAAO,KAAK,mBAAmB,MAAM;AAAA,MACzC;AAIA,YAAM,QAAQ,OAAO,cAAc,OAAO,eAAe,OAAO;AAChE,UAAI,SAAS,OAAO,UAAU,UAAU;AAEpC,YAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,mBAAmB,MAAM,CAAC,CAAC,GAAG;AAC/E,iBAAO,KAAK,mBAAmB,MAAM,CAAC,CAAC;AAAA,QAC3C;AAEA,YAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,gBAAMA,WAAU,OAAO,QAAQ,KAAK;AACpC,cAAIA,SAAQ,SAAS,GAAG;AACpB,kBAAM,CAAC,YAAY,YAAY,IAAIA,SAAQ,CAAC;AAC5C,gBAAI,KAAK,mBAAmB,YAAY,GAAG;AAEvC,oBAAM,iBAAiB,EAAE,GAAI,cAAsB,MAAM,WAAW;AACpE,qBAAO,KAAK,mBAAmB,cAAc;AAAA,YACjD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAKA,YAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,UAAI,QAAQ,WAAW,GAAG;AACtB,cAAM,CAAC,YAAY,YAAY,IAAI,QAAQ,CAAC;AAE5C,YAAI,eAAe,gBAAgB,eAAe,aAAa,eAAe,eAAe;AACzF,cAAI,KAAK,mBAAmB,YAAY,GAAG;AAEvC,kBAAM,iBAAiB,EAAE,GAAI,cAAsB,MAAM,WAAW;AACpE,mBAAO,KAAK,mBAAmB,cAAc;AAAA,UACjD;AAAA,QACJ;AAAA,MACJ;AAGA,iBAAW,CAAC,KAAK,GAAG,KAAK,SAAS;AAC9B,YAAI,QAAQ,gBAAgB,QAAQ,aAAa,QAAQ,iBAAiB,KAAK,mBAAmB,GAAG,GAAG;AAEpG,gBAAM,iBAAiB,EAAE,GAAI,KAAa,MAAM,IAAI;AACpD,iBAAO,KAAK,mBAAmB,cAAc;AAAA,QACjD;AAAA,MACJ;AAEA,aAAO,EAAE,OAAO,OAAO,OAAO,8EAA8E;AAAA,IAEhH,SAAS,YAAiB;AACtB,aAAO,EAAE,OAAO,OAAO,OAAO,qBAAqB,WAAW,OAAO,GAAG;AAAA,IAC5E;AAAA,EACJ;AAAA,EAEQ,mBAAmB,KAAmB;AAC1C,WAAO,OAAO,OAAO,QAAQ,YAAY,OAAO,IAAI,YAAY;AAAA,EACpE;AAAA,EAEQ,mBAAmB,QAA2E;AAElG,QAAI,CAAC,OAAO,QAAQ,OAAO,OAAO,SAAS,UAAU;AACjD,aAAO,EAAE,OAAO,OAAO,OAAO,kCAAkC;AAAA,IACpE;AAGA,UAAM,aAAa,OAAO,KAAK,KAAK;AACpC,QAAI,CAAC,YAAY;AACb,aAAO,EAAE,OAAO,OAAO,OAAO,8BAA8B;AAAA,IAChE;AAGA,UAAM,gBAAgB,KAAK,OAAO,QAAQ,IAAI,OAAK,EAAE,KAAK,YAAY,CAAC;AACvE,QAAI,cAAc,SAAS,WAAW,YAAY,CAAC,GAAG;AAClD,aAAO,EAAE,OAAO,OAAO,OAAO,qBAAqB,UAAU,mBAAmB;AAAA,IACpF;AAGA,QAAI,OAAO,SAAS,UAAa,CAAC,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC1D,aAAO,EAAE,OAAO,OAAO,OAAO,qCAAqC;AAAA,IACvE;AACA,QAAI,OAAO,QAAQ,WAAc,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,OAAO,GAAG,IAAI;AAC3F,aAAO,EAAE,OAAO,OAAO,OAAO,6CAA6C;AAAA,IAC/E;AAEA,UAAM,SAA0B;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,MAChB,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO;AAAA,MACjD,KAAK,OAAO,OAAO,OAAO,OAAO,QAAQ,WAAW,OAAO,MAAM;AAAA,MACjE,SAAS,OAAO,YAAY;AAAA,MAC5B,MAAM,OAAO;AAAA,IACjB;AAEA,WAAO,EAAE,OAAO,MAAM,OAAO;AAAA,EACjC;AAAA,EAEQ,mBAA8B;AAClC,WAAO;AAAA,MACH,SAAS,CAAC;AAAA,IACd;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAqB;AAC5C,QAAI;AACA,YAAM,kBAAkB,KAAK,4BAA4B,GAAG;AAC5D,aAAO,KAAK,mCAAmC,eAAe;AAAA,IAClE,SAAS,GAAG;AACR,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,4BAA4B,OAAuB;AACvD,QAAI,SAAS;AACb,QAAI,WAAW;AACf,QAAI,UAAU;AACd,QAAI,gBAAgB;AACpB,QAAI,iBAAiB;AAErB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,OAAO,MAAM,IAAI,CAAC;AAExB,UAAI,eAAe;AACf,YAAI,SAAS,QAAQ,SAAS,MAAM;AAChC,0BAAgB;AAChB,oBAAU;AAAA,QACd;AACA;AAAA,MACJ;AAEA,UAAI,gBAAgB;AAChB,YAAI,SAAS,OAAO,SAAS,KAAK;AAC9B,2BAAiB;AACjB;AACA;AAAA,QACJ;AAGA,YAAI,SAAS,QAAQ,SAAS,MAAM;AAChC,oBAAU;AAAA,QACd;AACA;AAAA,MACJ;AAEA,UAAI,UAAU;AACV,kBAAU;AAEV,YAAI,SAAS;AACT,oBAAU;AAAA,QACd,WAAW,SAAS,MAAM;AACtB,oBAAU;AAAA,QACd,WAAW,SAAS,KAAK;AACrB,qBAAW;AAAA,QACf;AACA;AAAA,MACJ;AAEA,UAAI,SAAS,KAAK;AACd,mBAAW;AACX,kBAAU;AACV;AAAA,MACJ;AAEA,UAAI,SAAS,OAAO,SAAS,KAAK;AAC9B,wBAAgB;AAChB;AACA;AAAA,MACJ;AAEA,UAAI,SAAS,OAAO,SAAS,KAAK;AAC9B,yBAAiB;AACjB;AACA;AAAA,MACJ;AAEA,gBAAU;AAAA,IACd;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,mCAAmC,OAAuB;AAC9D,QAAI,SAAS;AACb,QAAI,WAAW;AACf,QAAI,UAAU;AAEd,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,OAAO,MAAM,CAAC;AAEpB,UAAI,UAAU;AACV,kBAAU;AAEV,YAAI,SAAS;AACT,oBAAU;AAAA,QACd,WAAW,SAAS,MAAM;AACtB,oBAAU;AAAA,QACd,WAAW,SAAS,KAAK;AACrB,qBAAW;AAAA,QACf;AACA;AAAA,MACJ;AAEA,UAAI,SAAS,KAAK;AACd,mBAAW;AACX,kBAAU;AACV;AAAA,MACJ;AAEA,UAAI,SAAS,KAAK;AACd,YAAI,IAAI,IAAI;AACZ,eAAO,IAAI,MAAM,UAAU,KAAK,KAAK,MAAM,CAAC,CAAC,GAAG;AAC5C;AAAA,QACJ;AAEA,cAAM,oBAAoB,MAAM,CAAC;AACjC,YAAI,sBAAsB,OAAO,sBAAsB,KAAK;AACxD;AAAA,QACJ;AAAA,MACJ;AAEA,gBAAU;AAAA,IACd;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,sBAA4B;AACxB,UAAM,gBAA2B;AAAA,MAC7B,SAAS;AAAA,QACL;AAAA,UACI,MAAM;AAAA,UACN,SAAS;AAAA,UACT,MAAM,CAAC,MAAM,2CAA2C,GAAG,QAAQ,CAAC;AAAA,UACpE,SAAS;AAAA,QACb;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,CAAC,GAAG,WAAW,KAAK,UAAU,GAAG;AACjC,WAAK,KAAK,aAAa;AAAA,IAC3B;AAAA,EACJ;AACJ;","names":["entries"]}
@@ -1,205 +1,138 @@
1
- /**
2
- * Supported AI models
3
- * Fetched from backend API with caching
4
- */
5
- import { apiClient } from '../services/api-client.js';
6
- import { logWarning } from '../utils/logger.js';
7
- import { quickLog } from '../utils/conversation-logger.js';
8
- /**
9
- * Cached models configuration
10
- * Fetched once per session from backend
11
- */
1
+ import { apiClient } from "../services/api-client.js";
2
+ import { logWarning } from "../utils/logger.js";
3
+ import { quickLog } from "../utils/conversation-logger.js";
12
4
  let cachedConfig = null;
13
5
  let fetchPromise = null;
14
- /**
15
- * Default fallback configuration when backend is unavailable
16
- */
17
6
  const FALLBACK_CONFIG = {
18
- models: [
19
- {
20
- id: 'gemini-2.5-flash',
21
- name: 'Gemini 2.5 Flash',
22
- description: 'Fast and efficient',
23
- provider: 'google',
24
- contextWindow: 1000000,
25
- region: 'us-central1',
26
- supportsThinking: true,
27
- thinkingConfig: { thinking_config: { include_thoughts: true } },
28
- generationConfig: {
29
- temperature: 0.1,
30
- topP: 0.95,
31
- maxOutputTokens: 16384
32
- }
33
- }
34
- ],
35
- defaultModel: 'gemini-2.5-flash'
36
- };
37
- /**
38
- * Fetch models configuration from backend (with caching)
39
- * This is the main entry point for getting model config
40
- */
41
- export async function fetchModelsConfig() {
42
- // Return cached config if available
43
- if (cachedConfig) {
44
- return cachedConfig;
45
- }
46
- // If a fetch is already in progress, wait for it
47
- if (fetchPromise) {
48
- return fetchPromise;
7
+ models: [
8
+ {
9
+ id: "gemini-2.5-flash",
10
+ name: "Gemini 2.5 Flash",
11
+ description: "Fast and efficient",
12
+ provider: "google",
13
+ contextWindow: 1e6,
14
+ region: "us-central1",
15
+ supportsThinking: true,
16
+ thinkingConfig: { thinking_config: { include_thoughts: true } },
17
+ generationConfig: {
18
+ temperature: 0.1,
19
+ topP: 0.95,
20
+ maxOutputTokens: 16384
21
+ }
49
22
  }
50
- // Start fetching from backend
51
- fetchPromise = (async () => {
52
- try {
53
- const config = await apiClient.getModelsConfig();
54
- cachedConfig = config;
55
- return config;
56
- }
57
- catch (error) {
58
- // On error, use fallback config
59
- logWarning('Failed to fetch models config from backend, using fallback');
60
- cachedConfig = FALLBACK_CONFIG;
61
- return FALLBACK_CONFIG;
62
- }
63
- finally {
64
- fetchPromise = null;
65
- }
66
- })();
23
+ ],
24
+ defaultModel: "gemini-2.5-flash"
25
+ };
26
+ async function fetchModelsConfig() {
27
+ if (cachedConfig) {
28
+ return cachedConfig;
29
+ }
30
+ if (fetchPromise) {
67
31
  return fetchPromise;
32
+ }
33
+ fetchPromise = (async () => {
34
+ try {
35
+ const config = await apiClient.getModelsConfig();
36
+ cachedConfig = config;
37
+ return config;
38
+ } catch (error) {
39
+ logWarning("Failed to fetch models config from backend, using fallback");
40
+ cachedConfig = FALLBACK_CONFIG;
41
+ return FALLBACK_CONFIG;
42
+ } finally {
43
+ fetchPromise = null;
44
+ }
45
+ })();
46
+ return fetchPromise;
68
47
  }
69
- /**
70
- * Clear cached config (useful for refreshing)
71
- */
72
- export function clearModelsCache() {
73
- cachedConfig = null;
74
- fetchPromise = null;
48
+ function clearModelsCache() {
49
+ cachedConfig = null;
50
+ fetchPromise = null;
75
51
  }
76
- /**
77
- * Get context window size for a model SYNCHRONOUSLY from cache
78
- * This is useful for UI components that need immediate values
79
- * Returns fallback defaults if cache is not yet populated
80
- * @param modelNameOrId - Model name or ID (case-insensitive search)
81
- * @returns Context window size in tokens
82
- */
83
- export function getModelContextWindowSync(modelNameOrId) {
84
- // DEBUG: Log cache state to file
85
- quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Looking up: "${modelNameOrId}", cache populated: ${!!cachedConfig}, models in cache: ${cachedConfig?.models?.length || 0}\n`);
86
- // Try to find in cache first
87
- if (cachedConfig) {
88
- const model = cachedConfig.models.find(m => m.name.toLowerCase() === modelNameOrId.toLowerCase() ||
89
- m.id.toLowerCase() === modelNameOrId.toLowerCase());
90
- if (model) {
91
- quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Found model "${model.name}" with contextWindow: ${model.contextWindow}\n`);
92
- return model.contextWindow;
93
- }
94
- quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Model NOT found in cache. Available: ${cachedConfig.models.map(m => m.name).join(', ')}\n`);
52
+ function getModelContextWindowSync(modelNameOrId) {
53
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [getModelContextWindowSync] Looking up: "${modelNameOrId}", cache populated: ${!!cachedConfig}, models in cache: ${cachedConfig?.models?.length || 0}
54
+ `);
55
+ if (cachedConfig) {
56
+ const model = cachedConfig.models.find(
57
+ (m) => m.name.toLowerCase() === modelNameOrId.toLowerCase() || m.id.toLowerCase() === modelNameOrId.toLowerCase()
58
+ );
59
+ if (model) {
60
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [getModelContextWindowSync] Found model "${model.name}" with contextWindow: ${model.contextWindow}
61
+ `);
62
+ return model.contextWindow;
95
63
  }
96
- // Fallback defaults based on known patterns
97
- const nameLower = modelNameOrId.toLowerCase();
98
- if (nameLower.includes('kimi'))
99
- return 128000;
100
- if (nameLower.includes('glm'))
101
- return 128000;
102
- if (nameLower.includes('gemini'))
103
- return 1000000;
104
- return 1000000; // Default 1M tokens
64
+ quickLog(`[${(/* @__PURE__ */ new Date()).toISOString()}] [getModelContextWindowSync] Model NOT found in cache. Available: ${cachedConfig.models.map((m) => m.name).join(", ")}
65
+ `);
66
+ }
67
+ const nameLower = modelNameOrId.toLowerCase();
68
+ if (nameLower.includes("kimi")) return 128e3;
69
+ if (nameLower.includes("glm")) return 128e3;
70
+ if (nameLower.includes("gemini")) return 1e6;
71
+ return 1e6;
105
72
  }
106
- /**
107
- * Get all model configurations (async)
108
- * @returns Promise resolving to array of all model configurations
109
- */
110
- export async function getAllModelConfigs() {
111
- const config = await fetchModelsConfig();
112
- return config.models;
73
+ async function getAllModelConfigs() {
74
+ const config = await fetchModelsConfig();
75
+ return config.models;
113
76
  }
114
- /**
115
- * Get model configuration by ID (async)
116
- * @param modelId - Model ID
117
- * @returns Promise resolving to model configuration or undefined
118
- */
119
- export async function getModelConfig(modelId) {
120
- const config = await fetchModelsConfig();
121
- return config.models.find(m => m.id === modelId);
77
+ async function getModelConfig(modelId) {
78
+ const config = await fetchModelsConfig();
79
+ return config.models.find((m) => m.id === modelId);
122
80
  }
123
- /**
124
- * Get model configuration by ID and name (for duplicate model IDs with different configs)
125
- * @param modelId - Model ID
126
- * @param modelName - Model display name
127
- * @returns Promise resolving to model configuration or undefined
128
- */
129
- export async function getModelConfigByIdAndName(modelId, modelName) {
130
- const config = await fetchModelsConfig();
131
- return config.models.find(m => m.id === modelId && m.name === modelName);
81
+ async function getModelConfigByIdAndName(modelId, modelName) {
82
+ const config = await fetchModelsConfig();
83
+ return config.models.find((m) => m.id === modelId && m.name === modelName);
132
84
  }
133
- /**
134
- * Get default model ID (async)
135
- * @returns Promise resolving to default model ID
136
- */
137
- export async function getDefaultModel() {
138
- const config = await fetchModelsConfig();
139
- return config.defaultModel;
85
+ async function getDefaultModel() {
86
+ const config = await fetchModelsConfig();
87
+ return config.defaultModel;
140
88
  }
141
- /**
142
- * Get list of supported model IDs (unique) (async)
143
- * Excludes internal models that are not meant to be user-selectable
144
- * @returns Promise resolving to array of unique model IDs
145
- */
146
- export async function getSupportedModels() {
147
- const config = await fetchModelsConfig();
148
- // Backend already filters allowFrontendDisplay: false, but we check here too for robustness
149
- const userFacingModels = config.models.filter(m => m.allowFrontendDisplay !== false);
150
- return Array.from(new Set(userFacingModels.map(m => m.id)));
89
+ async function getSupportedModels() {
90
+ const config = await fetchModelsConfig();
91
+ const userFacingModels = config.models.filter((m) => m.allowFrontendDisplay !== false);
92
+ return Array.from(new Set(userFacingModels.map((m) => m.id)));
151
93
  }
152
- /**
153
- * Validate if a model name is supported (async)
154
- * @param model - Model name to validate
155
- * @returns Promise resolving to true if model is supported
156
- */
157
- export async function isValidModel(model) {
158
- const models = await getSupportedModels();
159
- return models.includes(model);
94
+ async function isValidModel(model) {
95
+ const models = await getSupportedModels();
96
+ return models.includes(model);
160
97
  }
161
- /**
162
- * Get a user-friendly error message for invalid models (async)
163
- * @param invalidModel - The invalid model name
164
- * @returns Promise resolving to error message with list of valid models
165
- */
166
- export async function getInvalidModelError(invalidModel) {
167
- const config = await fetchModelsConfig();
168
- // Only show user-facing models
169
- const userFacingModels = config.models.filter(m => m.allowFrontendDisplay !== false);
170
- return `Invalid model: ${invalidModel}\n\n` +
171
- `Supported models:\n` +
172
- userFacingModels.map(m => ` - ${m.id} (${m.name})`).join('\n') +
173
- `\n\nUse /model to select from available models.`;
98
+ async function getInvalidModelError(invalidModel) {
99
+ const config = await fetchModelsConfig();
100
+ const userFacingModels = config.models.filter((m) => m.allowFrontendDisplay !== false);
101
+ return `Invalid model: ${invalidModel}
102
+
103
+ Supported models:
104
+ ` + userFacingModels.map((m) => ` - ${m.id} (${m.name})`).join("\n") + `
105
+
106
+ Use /model to select from available models.`;
174
107
  }
175
- /**
176
- * Get model display name with description (async)
177
- * @param model - Model ID
178
- * @returns Promise resolving to display name with description
179
- */
180
- export async function getModelDisplayName(model) {
181
- const config = await getModelConfig(model);
182
- if (config) {
183
- return `${config.name} - ${config.description}`;
184
- }
185
- return model;
108
+ async function getModelDisplayName(model) {
109
+ const config = await getModelConfig(model);
110
+ if (config) {
111
+ return `${config.name} - ${config.description}`;
112
+ }
113
+ return model;
186
114
  }
187
- /**
188
- * Get context window size for a model (async)
189
- * @param model - Model ID
190
- * @returns Promise resolving to context window size in tokens
191
- */
192
- export async function getModelContextWindow(model) {
193
- const config = await getModelConfig(model);
194
- return config?.contextWindow || 2000000; // Default 2M tokens
115
+ async function getModelContextWindow(model) {
116
+ const config = await getModelConfig(model);
117
+ return config?.contextWindow || 2e6;
195
118
  }
196
- /**
197
- * Check if model supports thinking (async)
198
- * @param model - Model ID
199
- * @returns Promise resolving to true if model supports thinking
200
- */
201
- export async function modelSupportsThinking(model) {
202
- const config = await getModelConfig(model);
203
- return config?.supportsThinking || false;
119
+ async function modelSupportsThinking(model) {
120
+ const config = await getModelConfig(model);
121
+ return config?.supportsThinking || false;
204
122
  }
123
+ export {
124
+ clearModelsCache,
125
+ fetchModelsConfig,
126
+ getAllModelConfigs,
127
+ getDefaultModel,
128
+ getInvalidModelError,
129
+ getModelConfig,
130
+ getModelConfigByIdAndName,
131
+ getModelContextWindow,
132
+ getModelContextWindowSync,
133
+ getModelDisplayName,
134
+ getSupportedModels,
135
+ isValidModel,
136
+ modelSupportsThinking
137
+ };
205
138
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/config/models.ts"],"sourcesContent":["/**\r\n * Supported AI models\r\n * Fetched from backend API with caching\r\n */\r\n\r\nimport { apiClient, ModelConfig, ModelsConfig } from '../services/api-client.js';\r\nimport { logWarning } from '../utils/logger.js';\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\n\r\n// Re-export types\r\nexport type { ModelConfig, ModelsConfig };\r\n\r\n/**\r\n * Cached models configuration\r\n * Fetched once per session from backend\r\n */\r\nlet cachedConfig: ModelsConfig | null = null;\r\nlet fetchPromise: Promise<ModelsConfig> | null = null;\r\n\r\n/**\r\n * Default fallback configuration when backend is unavailable\r\n */\r\nconst FALLBACK_CONFIG: ModelsConfig = {\r\n models: [\r\n {\r\n id: 'gemini-2.5-flash',\r\n name: 'Gemini 2.5 Flash',\r\n description: 'Fast and efficient',\r\n provider: 'google',\r\n contextWindow: 1000000,\r\n region: 'us-central1',\r\n supportsThinking: true,\r\n thinkingConfig: { thinking_config: { include_thoughts: true } },\r\n generationConfig: {\r\n temperature: 0.1,\r\n topP: 0.95,\r\n maxOutputTokens: 16384\r\n }\r\n }\r\n ],\r\n defaultModel: 'gemini-2.5-flash'\r\n};\r\n\r\n/**\r\n * Fetch models configuration from backend (with caching)\r\n * This is the main entry point for getting model config\r\n */\r\nexport async function fetchModelsConfig(): Promise<ModelsConfig> {\r\n // Return cached config if available\r\n if (cachedConfig) {\r\n return cachedConfig;\r\n }\r\n\r\n // If a fetch is already in progress, wait for it\r\n if (fetchPromise) {\r\n return fetchPromise;\r\n }\r\n\r\n // Start fetching from backend\r\n fetchPromise = (async () => {\r\n try {\r\n const config = await apiClient.getModelsConfig();\r\n cachedConfig = config;\r\n return config;\r\n } catch (error) {\r\n // On error, use fallback config\r\n logWarning('Failed to fetch models config from backend, using fallback');\r\n cachedConfig = FALLBACK_CONFIG;\r\n return FALLBACK_CONFIG;\r\n } finally {\r\n fetchPromise = null;\r\n }\r\n })();\r\n\r\n return fetchPromise;\r\n}\r\n\r\n/**\r\n * Clear cached config (useful for refreshing)\r\n */\r\nexport function clearModelsCache(): void {\r\n cachedConfig = null;\r\n fetchPromise = null;\r\n}\r\n\r\n/**\r\n * Get context window size for a model SYNCHRONOUSLY from cache\r\n * This is useful for UI components that need immediate values\r\n * Returns fallback defaults if cache is not yet populated\r\n * @param modelNameOrId - Model name or ID (case-insensitive search)\r\n * @returns Context window size in tokens\r\n */\r\nexport function getModelContextWindowSync(modelNameOrId: string): number {\r\n // DEBUG: Log cache state to file\r\n quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Looking up: \"${modelNameOrId}\", cache populated: ${!!cachedConfig}, models in cache: ${cachedConfig?.models?.length || 0}\\n`);\r\n\r\n // Try to find in cache first\r\n if (cachedConfig) {\r\n const model = cachedConfig.models.find(m =>\r\n m.name.toLowerCase() === modelNameOrId.toLowerCase() ||\r\n m.id.toLowerCase() === modelNameOrId.toLowerCase()\r\n );\r\n if (model) {\r\n quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Found model \"${model.name}\" with contextWindow: ${model.contextWindow}\\n`);\r\n return model.contextWindow;\r\n }\r\n quickLog(`[${new Date().toISOString()}] [getModelContextWindowSync] Model NOT found in cache. Available: ${cachedConfig.models.map(m => m.name).join(', ')}\\n`);\r\n }\r\n\r\n // Fallback defaults based on known patterns\r\n const nameLower = modelNameOrId.toLowerCase();\r\n if (nameLower.includes('kimi')) return 128000;\r\n if (nameLower.includes('glm')) return 128000;\r\n if (nameLower.includes('gemini')) return 1000000;\r\n return 1000000; // Default 1M tokens\r\n}\r\n\r\n\r\n/**\r\n * Get all model configurations (async)\r\n * @returns Promise resolving to array of all model configurations\r\n */\r\nexport async function getAllModelConfigs(): Promise<ModelConfig[]> {\r\n const config = await fetchModelsConfig();\r\n return config.models;\r\n}\r\n\r\n/**\r\n * Get model configuration by ID (async)\r\n * @param modelId - Model ID\r\n * @returns Promise resolving to model configuration or undefined\r\n */\r\nexport async function getModelConfig(modelId: string): Promise<ModelConfig | undefined> {\r\n const config = await fetchModelsConfig();\r\n return config.models.find(m => m.id === modelId);\r\n}\r\n\r\n/**\r\n * Get model configuration by ID and name (for duplicate model IDs with different configs)\r\n * @param modelId - Model ID\r\n * @param modelName - Model display name\r\n * @returns Promise resolving to model configuration or undefined\r\n */\r\nexport async function getModelConfigByIdAndName(modelId: string, modelName: string): Promise<ModelConfig | undefined> {\r\n const config = await fetchModelsConfig();\r\n return config.models.find(m => m.id === modelId && m.name === modelName);\r\n}\r\n\r\n/**\r\n * Get default model ID (async)\r\n * @returns Promise resolving to default model ID\r\n */\r\nexport async function getDefaultModel(): Promise<string> {\r\n const config = await fetchModelsConfig();\r\n return config.defaultModel;\r\n}\r\n\r\n/**\r\n * Get list of supported model IDs (unique) (async)\r\n * Excludes internal models that are not meant to be user-selectable\r\n * @returns Promise resolving to array of unique model IDs\r\n */\r\nexport async function getSupportedModels(): Promise<string[]> {\r\n const config = await fetchModelsConfig();\r\n // Backend already filters allowFrontendDisplay: false, but we check here too for robustness\r\n const userFacingModels = config.models.filter(m => m.allowFrontendDisplay !== false);\r\n return Array.from(new Set(userFacingModels.map(m => m.id)));\r\n}\r\n\r\n/**\r\n * Validate if a model name is supported (async)\r\n * @param model - Model name to validate\r\n * @returns Promise resolving to true if model is supported\r\n */\r\nexport async function isValidModel(model: string): Promise<boolean> {\r\n const models = await getSupportedModels();\r\n return models.includes(model);\r\n}\r\n\r\n/**\r\n * Get a user-friendly error message for invalid models (async)\r\n * @param invalidModel - The invalid model name\r\n * @returns Promise resolving to error message with list of valid models\r\n */\r\nexport async function getInvalidModelError(invalidModel: string): Promise<string> {\r\n const config = await fetchModelsConfig();\r\n // Only show user-facing models\r\n const userFacingModels = config.models.filter(m => m.allowFrontendDisplay !== false);\r\n return `Invalid model: ${invalidModel}\\n\\n` +\r\n `Supported models:\\n` +\r\n userFacingModels.map(m => ` - ${m.id} (${m.name})`).join('\\n') +\r\n `\\n\\nUse /model to select from available models.`;\r\n}\r\n\r\n/**\r\n * Get model display name with description (async)\r\n * @param model - Model ID\r\n * @returns Promise resolving to display name with description\r\n */\r\nexport async function getModelDisplayName(model: string): Promise<string> {\r\n const config = await getModelConfig(model);\r\n if (config) {\r\n return `${config.name} - ${config.description}`;\r\n }\r\n return model;\r\n}\r\n\r\n/**\r\n * Get context window size for a model (async)\r\n * @param model - Model ID\r\n * @returns Promise resolving to context window size in tokens\r\n */\r\nexport async function getModelContextWindow(model: string): Promise<number> {\r\n const config = await getModelConfig(model);\r\n return config?.contextWindow || 2000000; // Default 2M tokens\r\n}\r\n\r\n/**\r\n * Check if model supports thinking (async)\r\n * @param model - Model ID\r\n * @returns Promise resolving to true if model supports thinking\r\n */\r\nexport async function modelSupportsThinking(model: string): Promise<boolean> {\r\n const config = await getModelConfig(model);\r\n return config?.supportsThinking || false;\r\n}\r\n\r\n\r\n"],"mappings":"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","names":[]}