claude-code-workflow 7.2.5 → 7.2.7

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 (235) hide show
  1. package/.claude/commands/workflow/analyze-with-file.md +11 -10
  2. package/.claude/skills/ccw-help/command.json +3 -3
  3. package/.claude/skills/ccw-help/index/all-commands.json +3 -3
  4. package/.claude/skills/ccw-help/index/by-category.json +3 -3
  5. package/.claude/skills/ccw-help/index/by-use-case.json +3 -3
  6. package/.claude/skills/skill-iter-tune/SKILL.md +382 -0
  7. package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
  8. package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
  9. package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
  10. package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
  11. package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
  12. package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
  13. package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
  14. package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
  15. package/.claude/skills/team-roadmap-dev/SKILL.md +1 -1
  16. package/.claude/skills/team-roadmap-dev/roles/coordinator/role.md +1 -1
  17. package/.claude/skills/team-roadmap-dev/specs/team-config.json +1 -1
  18. package/ccw/dist/commands/install.d.ts.map +1 -1
  19. package/ccw/dist/commands/install.js +11 -9
  20. package/ccw/dist/commands/install.js.map +1 -1
  21. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -1
  22. package/ccw/dist/core/routes/codexlens/config-handlers.js +4 -0
  23. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -1
  24. package/ccw/dist/mcp-server/index.js +85 -8
  25. package/ccw/dist/mcp-server/index.js.map +1 -1
  26. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
  27. package/ccw/dist/tools/cli-executor-core.js +0 -25
  28. package/ccw/dist/tools/cli-executor-core.js.map +1 -1
  29. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
  30. package/ccw/dist/tools/cli-executor-state.js +0 -31
  31. package/ccw/dist/tools/cli-executor-state.js.map +1 -1
  32. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  33. package/ccw/dist/tools/cli-history-store.js +1 -30
  34. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  35. package/ccw/dist/tools/smart-search.d.ts +72 -1
  36. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  37. package/ccw/dist/tools/smart-search.js +726 -117
  38. package/ccw/dist/tools/smart-search.js.map +1 -1
  39. package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js → AlertDialog-CSZq4WHZ.js} +2 -2
  40. package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js.map → AlertDialog-CSZq4WHZ.js.map} +1 -1
  41. package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js → AnalysisPage-DVDvLHqI.js} +2 -2
  42. package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js.map → AnalysisPage-DVDvLHqI.js.map} +1 -1
  43. package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js → ApiSettingsPage-D69j8mI6.js} +2 -2
  44. package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js.map → ApiSettingsPage-D69j8mI6.js.map} +1 -1
  45. package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js → CliModeToggle-fF9xHeGR.js} +2 -2
  46. package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js.map → CliModeToggle-fF9xHeGR.js.map} +1 -1
  47. package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js → CliSessionSharePage-Ce8tOQNx.js} +2 -2
  48. package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js.map → CliSessionSharePage-Ce8tOQNx.js.map} +1 -1
  49. package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js → CliViewerPage-Bsp1zmfD.js} +2 -2
  50. package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js.map → CliViewerPage-Bsp1zmfD.js.map} +1 -1
  51. package/ccw/frontend/dist/assets/{CodexLensManagerPage-ClPNashJ.js → CodexLensManagerPage-DUMzbrr9.js} +9 -9
  52. package/ccw/frontend/dist/assets/CodexLensManagerPage-DUMzbrr9.js.map +1 -0
  53. package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js → Collapsible-I5pixbHb.js} +2 -2
  54. package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js.map → Collapsible-I5pixbHb.js.map} +1 -1
  55. package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js → CommandsManagerPage-BH2xukdx.js} +2 -2
  56. package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js.map → CommandsManagerPage-BH2xukdx.js.map} +1 -1
  57. package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js → DeepWikiPage-D41ccWzY.js} +2 -2
  58. package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js.map → DeepWikiPage-D41ccWzY.js.map} +1 -1
  59. package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js → EndpointsPage-5a8jfEWN.js} +2 -2
  60. package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js.map → EndpointsPage-5a8jfEWN.js.map} +1 -1
  61. package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js → ExplorerPage-YCqIOu1v.js} +2 -2
  62. package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js.map → ExplorerPage-YCqIOu1v.js.map} +1 -1
  63. package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js → FixSessionPage-wK1s4kbo.js} +2 -2
  64. package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js.map → FixSessionPage-wK1s4kbo.js.map} +1 -1
  65. package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js → FloatingFileBrowser-B1U6uk_5.js} +2 -2
  66. package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js.map → FloatingFileBrowser-B1U6uk_5.js.map} +1 -1
  67. package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js → FloatingPanel-D51p5jNy.js} +2 -2
  68. package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js.map → FloatingPanel-D51p5jNy.js.map} +1 -1
  69. package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js → GraphExplorerPage-DpIWrpWH.js} +2 -2
  70. package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js.map → GraphExplorerPage-DpIWrpWH.js.map} +1 -1
  71. package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js → HistoryPage-C09lyJGN.js} +2 -2
  72. package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js.map → HistoryPage-C09lyJGN.js.map} +1 -1
  73. package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js → HookManagerPage-CFBe8F_G.js} +2 -2
  74. package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js.map → HookManagerPage-CFBe8F_G.js.map} +1 -1
  75. package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js → InstallationsPage-qt7NxnsB.js} +2 -2
  76. package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js.map → InstallationsPage-qt7NxnsB.js.map} +1 -1
  77. package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js → IssueHubPage-CHol1-Ap.js} +2 -2
  78. package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js.map → IssueHubPage-CHol1-Ap.js.map} +1 -1
  79. package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js → LiteTasksPage-jH00SLnZ.js} +2 -2
  80. package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js.map → LiteTasksPage-jH00SLnZ.js.map} +1 -1
  81. package/ccw/frontend/dist/assets/{McpManagerPage-CS2v_1OG.js → McpManagerPage-BS-HgeQJ.js} +11 -11
  82. package/ccw/frontend/dist/assets/McpManagerPage-BS-HgeQJ.js.map +1 -0
  83. package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js → MemoryPage-1UahrmRX.js} +2 -2
  84. package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js.map → MemoryPage-1UahrmRX.js.map} +1 -1
  85. package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js → NotFoundPage-5FVm_IkS.js} +2 -2
  86. package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js.map → NotFoundPage-5FVm_IkS.js.map} +1 -1
  87. package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js → OrchestratorPage-ThBG24Gg.js} +2 -2
  88. package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js.map → OrchestratorPage-ThBG24Gg.js.map} +1 -1
  89. package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js → ProjectOverviewPage-CrmW0IxI.js} +2 -2
  90. package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js.map → ProjectOverviewPage-CrmW0IxI.js.map} +1 -1
  91. package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js → PromptHistoryPage-1cCGwS3s.js} +2 -2
  92. package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js.map → PromptHistoryPage-1cCGwS3s.js.map} +1 -1
  93. package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js → ReviewSessionPage-DxiEc9HK.js} +2 -2
  94. package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js.map → ReviewSessionPage-DxiEc9HK.js.map} +1 -1
  95. package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js → RulesManagerPage-BpplliZF.js} +2 -2
  96. package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js.map → RulesManagerPage-BpplliZF.js.map} +1 -1
  97. package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js → SessionDetailPage-crDIiysh.js} +2 -2
  98. package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js.map → SessionDetailPage-crDIiysh.js.map} +1 -1
  99. package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js → SessionsPage-DThweYY8.js} +2 -2
  100. package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js.map → SessionsPage-DThweYY8.js.map} +1 -1
  101. package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js → SettingsPage-OCdOz5-z.js} +4 -4
  102. package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js.map → SettingsPage-OCdOz5-z.js.map} +1 -1
  103. package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js → SkillsManagerPage-BJd3bK1G.js} +2 -2
  104. package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js.map → SkillsManagerPage-BJd3bK1G.js.map} +1 -1
  105. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js → SpecsSettingsPage-BAWL2cpO.js} +2 -2
  106. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js.map → SpecsSettingsPage-BAWL2cpO.js.map} +1 -1
  107. package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js → Switch-w0I3JCcC.js} +2 -2
  108. package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js.map → Switch-w0I3JCcC.js.map} +1 -1
  109. package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js → TabsNavigation-jhUge9YV.js} +2 -2
  110. package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js.map → TabsNavigation-jhUge9YV.js.map} +1 -1
  111. package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js → TaskDrawer-APWpZulm.js} +2 -2
  112. package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js.map → TaskDrawer-APWpZulm.js.map} +1 -1
  113. package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js → TeamPage-8OnLsAfJ.js} +2 -2
  114. package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js.map → TeamPage-8OnLsAfJ.js.map} +1 -1
  115. package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js → TerminalDashboardPage-Be1hcN4p.js} +2 -2
  116. package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js.map → TerminalDashboardPage-Be1hcN4p.js.map} +1 -1
  117. package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js → archive-Bo1tC9yo.js} +2 -2
  118. package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js.map → archive-Bo1tC9yo.js.map} +1 -1
  119. package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js → archive-restore-DYx41yLJ.js} +2 -2
  120. package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js.map → archive-restore-DYx41yLJ.js.map} +1 -1
  121. package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js → arrow-right-C6pOqWF1.js} +2 -2
  122. package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js.map → arrow-right-C6pOqWF1.js.map} +1 -1
  123. package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js → bookmark-plus-4Qpa6hMJ.js} +2 -2
  124. package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js.map → bookmark-plus-4Qpa6hMJ.js.map} +1 -1
  125. package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js → bot-HXJTmx8r.js} +2 -2
  126. package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js.map → bot-HXJTmx8r.js.map} +1 -1
  127. package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js → braces-Dj2IdY7I.js} +2 -2
  128. package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js.map → braces-Dj2IdY7I.js.map} +1 -1
  129. package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js → circle-stop-M29TJKHc.js} +2 -2
  130. package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js.map → circle-stop-M29TJKHc.js.map} +1 -1
  131. package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js → cpu-DX15mzMT.js} +2 -2
  132. package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js.map → cpu-DX15mzMT.js.map} +1 -1
  133. package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js → ellipsis-vertical-Fs6bysWx.js} +2 -2
  134. package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js.map → ellipsis-vertical-Fs6bysWx.js.map} +1 -1
  135. package/ccw/frontend/dist/assets/{eye-B0-xkP67.js → eye-D6BRlJ1r.js} +2 -2
  136. package/ccw/frontend/dist/assets/{eye-B0-xkP67.js.map → eye-D6BRlJ1r.js.map} +1 -1
  137. package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js → eye-off-DjbIj5iN.js} +2 -2
  138. package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js.map → eye-off-DjbIj5iN.js.map} +1 -1
  139. package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js → file-json-kg4Lid-H.js} +2 -2
  140. package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js.map → file-json-kg4Lid-H.js.map} +1 -1
  141. package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js → file-text-BMy5pXNV.js} +2 -2
  142. package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js.map → file-text-BMy5pXNV.js.map} +1 -1
  143. package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js → filter-BTN-lUUb.js} +2 -2
  144. package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js.map → filter-BTN-lUUb.js.map} +1 -1
  145. package/ccw/frontend/dist/assets/{folder-BSHjjjND.js → folder-ChYtty7V.js} +2 -2
  146. package/ccw/frontend/dist/assets/{folder-BSHjjjND.js.map → folder-ChYtty7V.js.map} +1 -1
  147. package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js → gauge-C0VJbjRb.js} +2 -2
  148. package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js.map → gauge-C0VJbjRb.js.map} +1 -1
  149. package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js → globe-DbNfDXnv.js} +2 -2
  150. package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js.map → globe-DbNfDXnv.js.map} +1 -1
  151. package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js → grid-3x3-xWcpBNxo.js} +2 -2
  152. package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js.map → grid-3x3-xWcpBNxo.js.map} +1 -1
  153. package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js → hard-drive-BTACzgUO.js} +2 -2
  154. package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js.map → hard-drive-BTACzgUO.js.map} +1 -1
  155. package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js → hash-B0dYlmyB.js} +2 -2
  156. package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js.map → hash-B0dYlmyB.js.map} +1 -1
  157. package/ccw/frontend/dist/assets/{history-DxN1mopa.js → history-CRRLu6ck.js} +2 -2
  158. package/ccw/frontend/dist/assets/{history-DxN1mopa.js.map → history-CRRLu6ck.js.map} +1 -1
  159. package/ccw/frontend/dist/assets/{index-BzGEkwIf.js → index-BJIIo0B3.js} +2 -2
  160. package/ccw/frontend/dist/assets/{index-BzGEkwIf.js.map → index-BJIIo0B3.js.map} +1 -1
  161. package/ccw/frontend/dist/assets/{index-DlcRFzFq.js → index-BP-D3Wv6.js} +2 -2
  162. package/ccw/frontend/dist/assets/{index-DlcRFzFq.js.map → index-BP-D3Wv6.js.map} +1 -1
  163. package/ccw/frontend/dist/assets/{index-BUiq2PUK.js → index-B_QzEioU.js} +2 -2
  164. package/ccw/frontend/dist/assets/{index-BUiq2PUK.js.map → index-B_QzEioU.js.map} +1 -1
  165. package/ccw/frontend/dist/assets/{index-C04xeBGC.js → index-BpoRYgiq.js} +3 -3
  166. package/ccw/frontend/dist/assets/{index-C04xeBGC.js.map → index-BpoRYgiq.js.map} +1 -1
  167. package/ccw/frontend/dist/assets/{index-CIoWWkDn.js → index-CeESlrZb.js} +8 -8
  168. package/ccw/frontend/dist/assets/{index-CIoWWkDn.js.map → index-CeESlrZb.js.map} +1 -1
  169. package/ccw/frontend/dist/assets/{index-bSgtHHOF.js → index-DzTbMyaS.js} +4 -4
  170. package/ccw/frontend/dist/assets/{index-bSgtHHOF.js.map → index-DzTbMyaS.js.map} +1 -1
  171. package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js → layout-grid-ZN26YcTM.js} +2 -2
  172. package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js.map → layout-grid-ZN26YcTM.js.map} +1 -1
  173. package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js → lightbulb-BHrwx9j6.js} +2 -2
  174. package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js.map → lightbulb-BHrwx9j6.js.map} +1 -1
  175. package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js → link-2-zZRu2j4G.js} +2 -2
  176. package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js.map → link-2-zZRu2j4G.js.map} +1 -1
  177. package/ccw/frontend/dist/assets/{link-dSLYjCIG.js → link-8lz-HgnZ.js} +2 -2
  178. package/ccw/frontend/dist/assets/{link-dSLYjCIG.js.map → link-8lz-HgnZ.js.map} +1 -1
  179. package/ccw/frontend/dist/assets/{list-Bm_CnR56.js → list-DlablIjt.js} +2 -2
  180. package/ccw/frontend/dist/assets/{list-Bm_CnR56.js.map → list-DlablIjt.js.map} +1 -1
  181. package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js → map-pin-JAsCUplr.js} +2 -2
  182. package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js.map → map-pin-JAsCUplr.js.map} +1 -1
  183. package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js → messages-square-D0iSFb2Y.js} +2 -2
  184. package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js.map → messages-square-D0iSFb2Y.js.map} +1 -1
  185. package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js → minimize-2-BJmkU9CE.js} +2 -2
  186. package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js.map → minimize-2-BJmkU9CE.js.map} +1 -1
  187. package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js → package-DYrbBCxk.js} +2 -2
  188. package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js.map → package-DYrbBCxk.js.map} +1 -1
  189. package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js → plug-VG7-23M-.js} +2 -2
  190. package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js.map → plug-VG7-23M-.js.map} +1 -1
  191. package/ccw/frontend/dist/assets/{power-B6Rod0u_.js → power-zPFYNx7u.js} +2 -2
  192. package/ccw/frontend/dist/assets/{power-B6Rod0u_.js.map → power-zPFYNx7u.js.map} +1 -1
  193. package/ccw/frontend/dist/assets/{save-DULWrB2g.js → save-D4XQY9i9.js} +2 -2
  194. package/ccw/frontend/dist/assets/{save-DULWrB2g.js.map → save-D4XQY9i9.js.map} +1 -1
  195. package/ccw/frontend/dist/assets/{send-C4z974WG.js → send-ClSnDjj-.js} +2 -2
  196. package/ccw/frontend/dist/assets/{send-C4z974WG.js.map → send-ClSnDjj-.js.map} +1 -1
  197. package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js → square-check-big-Bffh_MFc.js} +2 -2
  198. package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js.map → square-check-big-Bffh_MFc.js.map} +1 -1
  199. package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js → square-pen-DsOvAvME.js} +2 -2
  200. package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js.map → square-pen-DsOvAvME.js.map} +1 -1
  201. package/ccw/frontend/dist/assets/{star-CDVVM69o.js → star-TLJjvoy2.js} +2 -2
  202. package/ccw/frontend/dist/assets/{star-CDVVM69o.js.map → star-TLJjvoy2.js.map} +1 -1
  203. package/ccw/frontend/dist/assets/{style-CumJ7XC8.js → style-BXKXgpOY.js} +2 -2
  204. package/ccw/frontend/dist/assets/{style-CumJ7XC8.js.map → style-BXKXgpOY.js.map} +1 -1
  205. package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js → target-FDuAB6SF.js} +2 -2
  206. package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js.map → target-FDuAB6SF.js.map} +1 -1
  207. package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js → test-tube-B9vj-Im8.js} +2 -2
  208. package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js.map → test-tube-B9vj-Im8.js.map} +1 -1
  209. package/ccw/frontend/dist/assets/{upload-CihSmIM7.js → upload-CHgTrVN5.js} +2 -2
  210. package/ccw/frontend/dist/assets/{upload-CihSmIM7.js.map → upload-CHgTrVN5.js.map} +1 -1
  211. package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js → useApiSettings-XsHrqf-L.js} +2 -2
  212. package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js.map → useApiSettings-XsHrqf-L.js.map} +1 -1
  213. package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js → useCli-DOlWtux5.js} +2 -2
  214. package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js.map → useCli-DOlWtux5.js.map} +1 -1
  215. package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js → useCommands-DazCajiX.js} +2 -2
  216. package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js.map → useCommands-DazCajiX.js.map} +1 -1
  217. package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js → useDebounce-Cah-bua6.js} +2 -2
  218. package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js.map → useDebounce-Cah-bua6.js.map} +1 -1
  219. package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js → useFileExplorer-B9SCPhhl.js} +2 -2
  220. package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js.map → useFileExplorer-B9SCPhhl.js.map} +1 -1
  221. package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js → useLocale-CmG6pxZe.js} +2 -2
  222. package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js.map → useLocale-CmG6pxZe.js.map} +1 -1
  223. package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js → useSkills-DvEJ0JOv.js} +3 -3
  224. package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js.map → useSkills-DvEJ0JOv.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js → useSystemSettings-BDpwSa04.js} +2 -2
  226. package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js.map → useSystemSettings-BDpwSa04.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js → wand-sparkles-T2KGCRiy.js} +2 -2
  228. package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js.map → wand-sparkles-T2KGCRiy.js.map} +1 -1
  229. package/ccw/frontend/dist/index.html +1 -1
  230. package/codex-lens/src/codexlens/cli/commands.py +12 -1
  231. package/codex-lens/src/codexlens/config.py +12 -0
  232. package/codex-lens/src/codexlens/env_config.py +1 -0
  233. package/package.json +1 -1
  234. package/ccw/frontend/dist/assets/CodexLensManagerPage-ClPNashJ.js.map +0 -1
  235. package/ccw/frontend/dist/assets/McpManagerPage-CS2v_1OG.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import{u as q,al as ce,r as n,j as e,e as f,Z as ge,c as Ze,a7 as ie,C as G,m as Ts,k as De,b as js,I as y,K as vs,D as fs,d as Ss,f as Ns,g as xe,S as ms,h as ys,T as ue,B as Z,x as _e,y as He,z as Ue,A as Je,E as Ve,bu as h,aq as fe,ar as Se,as as Ne,at as ye,au as V,cy as hs,ap as xs,bO as Ke,G as $e,bq as Pe,ck as Re,bp as Ds,ae as Ps,N as be,av as Os,X as zs,bf as nt,a2 as lt,a3 as dt,a4 as Es,a5 as Ls,an as ns,eA as rt,eB as ct,a as Bs,aw as ot,R as Rs,d6 as mt}from"./index-bSgtHHOF.js";import{T as ht}from"./TabsNavigation-CLKz7pWP.js";import{S as X}from"./Switch-vlMavMRD.js";import{u as Xe,a as xt,b as bs,c as gt,d as pt,e as ut,f as _s,g as jt,h as Hs,i as vt,j as ft,k as St,l as Nt,m as Us,n as yt,o as Js,p as bt,q as Ct,r as wt,s as Vs,t as Mt,v as Pt,w as kt,x as It,y as Tt,z as Et,A as Lt,B as Ft}from"./useApiSettings-CevxWX2z.js";import{E as Cs}from"./ellipsis-vertical-BmNPuatq.js";import{S as ws}from"./square-pen-D-4BrMtQ.js";import{C as gs,a as ps,b as us}from"./Collapsible-Dladh9Eu.js";import{E as as}from"./eye-off-Bz0Fkli3.js";import{E as is}from"./eye-B0-xkP67.js";import{A as $s,a as Gs,b as qs,c as Qs,d as Ws,e as Ys,f as Zs,g as Xs}from"./AlertDialog-CFGtc76Y.js";import{F as At}from"./file-text-BMeW5-Sb.js";import{H as Kt}from"./hard-drive-D88EZgTY.js";import{S as et}from"./save-DULWrB2g.js";import{L as Dt}from"./link-dSLYjCIG.js";import{P as Ot}from"./package-EEv4N_Qk.js";import"./useLocale-BRJreqvl.js";import"./errorSanitizer-IY9pf5g4.js";function zt({provider:a,onEdit:r,onDelete:t,onTest:s,onMultiKeySettings:i,onSyncToCodexLens:o,onManageModels:c,onToggleEnabled:d,isDeleting:N,isTesting:p,isToggling:u}){var M,C;const{formatMessage:v}=q(),I=((M=a.apiKeys)==null?void 0:M.filter(T=>T.enabled).length)||0,E=(((C=a.apiKeys)==null?void 0:C.length)||0)>0,D=()=>{var L;if(!a.enabled)return e.jsx(Z,{variant:"secondary",children:v({id:"apiSettings.common.disabled"})});if(!((L=a.healthCheck)!=null&&L.enabled))return e.jsx(Z,{variant:"outline",children:v({id:"apiSettings.providers.unknown"})});const T=a.apiKeys||[];if(T.length===0)return e.jsx(Z,{variant:"info",children:v({id:"apiSettings.providers.unknown"})});const b=T.filter(x=>x.healthStatus==="healthy").length;return T.filter(x=>x.healthStatus==="unhealthy").length>0?e.jsx(Z,{variant:"destructive",children:v({id:"apiSettings.providers.unhealthy"})}):b===T.length?e.jsx(Z,{variant:"success",children:v({id:"apiSettings.providers.healthy"})}):e.jsx(Z,{variant:"warning",children:v({id:"apiSettings.providers.unknown"})})};return e.jsx(G,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground truncate",children:a.name}),D()]}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-sm text-muted-foreground",children:[e.jsx("span",{className:"capitalize",children:a.type}),E&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ge,{className:"w-3 h-3"}),I," ",v({id:"apiSettings.providers.apiKey"})]}),a.routingStrategy&&e.jsx("span",{className:"capitalize",children:a.routingStrategy.replace("-"," ")})]}),a.apiBase&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1 truncate",children:a.apiBase})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:d,disabled:u}),e.jsxs(fs,{children:[e.jsx(Ss,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon",children:e.jsx(Cs,{className:"w-4 h-4"})})}),e.jsxs(Ns,{align:"end",children:[e.jsxs(xe,{onClick:r,children:[e.jsx(ws,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.edit"})]}),e.jsxs(xe,{onClick:s,disabled:p,children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.test"})]}),e.jsxs(xe,{onClick:c,children:[e.jsx(ms,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.manageModels"})]}),E&&e.jsxs(xe,{onClick:i,children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.multiKeySettings"})]}),e.jsxs(xe,{onClick:o,children:[e.jsx(De,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.syncToCodexLens"})]}),e.jsx(ys,{}),e.jsxs(xe,{onClick:t,disabled:N,className:"text-destructive",children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.delete"})]})]})]})]})]})})}function Bt({onAddProvider:a,onEditProvider:r,onMultiKeySettings:t,onSyncToCodexLens:s,onManageModels:i}){const{formatMessage:o}=q(),{error:c}=ce(),[d,N]=n.useState(""),[p,u]=n.useState(!1),{providers:v,isLoading:I,refetch:E}=Xe(),{deleteProvider:D,isDeleting:M}=xt(),{updateProvider:C,isUpdating:T}=bs(),{testProvider:b,isTesting:P}=gt(),{triggerHealthCheck:L}=pt(),x=n.useMemo(()=>v.filter(S=>{const H=S.name.toLowerCase().includes(d.toLowerCase())||S.type.toLowerCase().includes(d.toLowerCase()),k=!p||!S.enabled;return H&&k}),[v,d,p]),m=async(S,H)=>{const k=o({id:"apiSettings.providers.deleteConfirm"},{name:H});if(window.confirm(k))try{await D(S)}catch{c(o({id:"apiSettings.providers.deleteError"}))}},F=async(S,H)=>{try{await C(S,{enabled:H})}catch{c(o({id:"apiSettings.providers.toggleError"}))}},O=async S=>{try{(await b(S)).success&&await L(S)}catch{c(o({id:"apiSettings.providers.testError"}))}},B=v.filter(S=>S.enabled).length,w=v.length;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-foreground",children:o({id:"apiSettings.providers.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.description"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:"outline",onClick:()=>E(),disabled:I,children:[e.jsx(ge,{className:Ze("w-4 h-4 mr-2",I&&"animate-spin")}),o({id:"common.actions.refresh"})]}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),o({id:"apiSettings.providers.actions.add"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ts,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:w})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.stats.total"})})]}),e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(De,{className:"w-5 h-5 text-success"}),e.jsx("span",{className:"text-2xl font-bold",children:B})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.stats.enabled"})})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(js,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(y,{placeholder:o({id:"apiSettings.common.searchPlaceholder"}),value:d,onChange:S=>N(S.target.value),className:"pl-9"})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs(f,{variant:p?"default":"outline",size:"sm",onClick:()=>u(S=>!S),children:[p?e.jsx(vs,{className:"w-4 h-4 mr-2"}):e.jsx(De,{className:"w-4 h-4 mr-2"}),o(p?{id:"apiSettings.providers.actions.hideDisabled"}:{id:"apiSettings.providers.actions.showDisabled"})]})})]}),I?e.jsx("div",{className:"space-y-4",children:[1,2,3,4,5].map(S=>e.jsx("div",{className:"h-24 bg-muted animate-pulse rounded-lg"},S))}):x.length===0?e.jsxs(G,{className:"p-8 text-center",children:[e.jsx(Ts,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:o({id:"apiSettings.providers.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:o({id:"apiSettings.providers.emptyState.message"})}),e.jsxs(f,{className:"mt-4",onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),o({id:"apiSettings.providers.actions.add"})]})]}):e.jsx("div",{className:"space-y-3",children:x.map(S=>e.jsx(zt,{provider:S,onEdit:()=>r(S.id),onDelete:()=>m(S.id,S.name),onTest:()=>O(S.id),onMultiKeySettings:()=>t(S.id),onSyncToCodexLens:()=>s(S.id),onManageModels:()=>i(S.id),onToggleEnabled:H=>F(S.id,H),isDeleting:M,isTesting:P,isToggling:T},S.id))})]})}function Rt({entry:a,showKey:r,onToggleShowKey:t,onUpdate:s,onRemove:i}){const{formatMessage:o}=q();return e.jsxs("div",{className:"grid grid-cols-12 gap-2 items-start p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"col-span-3",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyLabel"})}),e.jsx(y,{value:a.label||"",onChange:c=>s({label:c.target.value}),placeholder:"Key 1",className:"mt-1"})]}),e.jsxs("div",{className:"col-span-4",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyValue"})}),e.jsxs("div",{className:"relative mt-1",children:[e.jsx(y,{type:r?"text":"password",value:a.key,onChange:c=>s({key:c.target.value}),placeholder:"sk-...",className:"pr-8"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:t,children:r?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyWeight"})}),e.jsx(y,{type:"number",min:"0",max:"100",value:a.weight??1,onChange:c=>s({weight:parseInt(c.target.value)||1}),className:"mt-1"})]}),e.jsxs("div",{className:"col-span-2 flex items-center gap-2 pt-5",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:c=>s({enabled:c})}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.enabled?o({id:"apiSettings.common.enabled"}):o({id:"apiSettings.common.disabled"})})]}),e.jsx("div",{className:"col-span-1 flex items-center justify-end pt-5",children:e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:i,className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})})]})}function _t({open:a,onClose:r,provider:t}){const{formatMessage:s}=q(),{error:i}=ce(),o=!!t,{createProvider:c,isCreating:d}=ut(),{updateProvider:N,isUpdating:p}=bs(),[u,v]=n.useState(""),[I,E]=n.useState("openai"),[D,M]=n.useState(""),[C,T]=n.useState(""),[b,P]=n.useState(!0),[L,x]=n.useState(!1),[m,F]=n.useState(300),[O,B]=n.useState(0),[w,S]=n.useState(""),[H,k]=n.useState(""),[j,z]=n.useState(""),[ee,ne]=n.useState(),[je,le]=n.useState(),[Ce,A]=n.useState(""),[Q,W]=n.useState(!1),[te,de]=n.useState([]),[Ge,ke]=n.useState(new Set),[qe,Ie]=n.useState("simple-shuffle"),[we,Me]=n.useState(!1),[Te,Ee]=n.useState(60),[Le,ve]=n.useState(300),[Oe,Fe]=n.useState(5),[oe,R]=n.useState(!1),[se,re]=n.useState([]),[ae,me]=n.useState([]);n.useEffect(()=>{if(t){v(t.name),E(t.type),M(t.apiKey),T(t.apiBase||""),P(t.enabled),Ie(t.routingStrategy||"simple-shuffle"),t.advancedSettings&&(F(t.advancedSettings.timeout||300),B(t.advancedSettings.maxRetries||0),S(t.advancedSettings.organization||""),k(t.advancedSettings.apiVersion||""),z(t.advancedSettings.customHeaders?JSON.stringify(t.advancedSettings.customHeaders,null,2):""),ne(t.advancedSettings.rpm),le(t.advancedSettings.tpm),A(t.advancedSettings.proxy||""));const g=!!(t.apiKeys&&t.apiKeys.length>0);W(g),g&&t.apiKeys&&de(t.apiKeys.map(K=>({id:K.id,key:K.key,label:K.label,weight:K.weight,enabled:K.enabled}))),t.healthCheck&&(Me(t.healthCheck.enabled),Ee(t.healthCheck.intervalSeconds),ve(t.healthCheck.cooldownSeconds),Fe(t.healthCheck.failureThreshold)),t.llmModels&&re(t.llmModels.map(K=>({id:K.id,name:K.name,series:K.series,description:K.description}))),t.embeddingModels&&me(t.embeddingModels.map(K=>({id:K.id,name:K.name,series:K.series,description:K.description})))}else v(""),E("openai"),M(""),T(""),P(!0),F(300),B(0),S(""),k(""),z(""),ne(void 0),le(void 0),A(""),W(!1),de([]),Ie("simple-shuffle"),Me(!1),Ee(60),ve(300),Fe(5),re([]),me([])},[t,a]);const he=()=>{const g={id:`key-${Date.now()}`,key:"",label:`Key ${te.length+1}`,weight:1,enabled:!0};de([...te,g])},ze=(g,K)=>{de(te.map((_,U)=>U===g?{..._,...K}:_))},ls=g=>{de(te.filter((K,_)=>_!==g))},es=g=>{ke(K=>{const _=new Set(K);return _.has(g)?_.delete(g):_.add(g),_})},Qe=()=>{const g={id:`llm-${Date.now()}`,name:"",series:""};re([...se,g])},ds=g=>{re(se.filter((K,_)=>_!==g))},Ae=(g,K,_)=>{re(se.map((U,Ye)=>Ye===g?{...U,[K]:_}:U))},rs=()=>{const g={id:`emb-${Date.now()}`,name:"",series:""};me([...ae,g])},Y=g=>{me(ae.filter((K,_)=>_!==g))},Be=(g,K,_)=>{me(ae.map((U,Ye)=>Ye===g?{...U,[K]:_}:U))},cs=async()=>{try{let g;if(j.trim())try{g=JSON.parse(j)}catch{alert(s({id:"apiSettings.messages.invalidJsonHeaders"}));return}const K=new Date().toISOString(),_={name:u,type:I,apiKey:Q?"":D,apiBase:C||void 0,enabled:b,advancedSettings:{timeout:m,maxRetries:O,organization:w||void 0,apiVersion:H||void 0,customHeaders:g,rpm:ee,tpm:je,proxy:Ce||void 0},apiKeys:Q?te.map(U=>({id:U.id,key:U.key,label:U.label,weight:U.weight,enabled:U.enabled})):void 0,routingStrategy:Q?qe:void 0,healthCheck:we?{enabled:!0,intervalSeconds:Te,cooldownSeconds:Le,failureThreshold:Oe}:void 0,llmModels:se.filter(U=>U.name.trim()).map(U=>({id:U.id,name:U.name,type:"llm",series:U.series||U.name.split("-")[0],enabled:!0,createdAt:K,updatedAt:K})),embeddingModels:ae.filter(U=>U.name.trim()).map(U=>({id:U.id,name:U.name,type:"embedding",series:U.series||U.name.split("-")[0],enabled:!0,createdAt:K,updatedAt:K}))};o&&t?await N(t.id,_):await c(_),r()}catch{i(s({id:"apiSettings.providers.saveError"}))}},We=d||p;return e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s(o?{id:"apiSettings.providers.actions.edit"}:{id:"apiSettings.providers.actions.add"})}),e.jsx(Ve,{children:s({id:"apiSettings.providers.description"})})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.basicInfo"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"name",children:[s({id:"apiSettings.providers.displayName"})," *"]}),e.jsx(y,{id:"name",value:u,onChange:g=>v(g.target.value),placeholder:"My OpenAI"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"type",children:[s({id:"apiSettings.common.type"})," *"]}),e.jsxs(fe,{value:I,onValueChange:g=>E(g),children:[e.jsx(Se,{id:"type",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"openai",children:"OpenAI"}),e.jsx(V,{value:"anthropic",children:"Anthropic"}),e.jsx(V,{value:"custom",children:"Custom"})]})]})]})]}),!Q&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"apiKey",children:[s({id:"apiSettings.providers.apiKey"})," *"]}),e.jsx(y,{id:"apiKey",type:"password",value:D,onChange:g=>M(g.target.value),placeholder:"sk-..."}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.useEnvVar"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"apiBase",children:s({id:"apiSettings.providers.apiBaseUrl"})}),e.jsx(y,{id:"apiBase",value:C,onChange:g=>T(g.target.value),placeholder:"https://api.openai.com/v1"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"enabled",checked:b,onCheckedChange:P}),e.jsx(h,{htmlFor:"enabled",children:s({id:"apiSettings.providers.enableProvider"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"useMultiKey",checked:Q,onCheckedChange:W}),e.jsx(h,{htmlFor:"useMultiKey",children:s({id:"apiSettings.providers.multiKeySettings"})})]})]}),Q&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.multiKeySettings"})}),e.jsxs(f,{type:"button",size:"sm",onClick:he,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addKey"})]})]}),te.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:te.map((g,K)=>e.jsx(Rt,{entry:g,showKey:Ge.has(K),onToggleShowKey:()=>es(K),onUpdate:_=>ze(K,_),onRemove:()=>ls(K)},g.id))}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"routingStrategy",children:s({id:"apiSettings.providers.routingStrategy"})}),e.jsxs(fe,{value:qe,onValueChange:g=>Ie(g),children:[e.jsx(Se,{id:"routingStrategy",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"simple-shuffle",children:s({id:"apiSettings.providers.simpleShuffle"})}),e.jsx(V,{value:"weighted",children:s({id:"apiSettings.providers.weighted"})}),e.jsx(V,{value:"latency-based",children:s({id:"apiSettings.providers.latencyBased"})}),e.jsx(V,{value:"cost-based",children:s({id:"apiSettings.providers.costBased"})}),e.jsx(V,{value:"least-busy",children:s({id:"apiSettings.providers.leastBusy"})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:s({id:"apiSettings.providers.healthCheck"})}),e.jsx(X,{checked:we,onCheckedChange:Me})]}),we&&e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"checkInterval",children:s({id:"apiSettings.providers.checkInterval"})}),e.jsx(y,{id:"checkInterval",type:"number",min:"10",value:Te,onChange:g=>Ee(parseInt(g.target.value)||60)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cooldownPeriod",children:s({id:"apiSettings.providers.cooldownPeriod"})}),e.jsx(y,{id:"cooldownPeriod",type:"number",min:"10",value:Le,onChange:g=>ve(parseInt(g.target.value)||300)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"failureThreshold",children:s({id:"apiSettings.providers.failureThreshold"})}),e.jsx(y,{id:"failureThreshold",type:"number",min:"1",value:Oe,onChange:g=>Fe(parseInt(g.target.value)||5)})]})]})]})]}),e.jsxs(gs,{open:L,onOpenChange:x,children:[e.jsx(ps,{asChild:!0,children:e.jsxs(f,{type:"button",variant:"ghost",className:"w-full justify-between",children:[e.jsx("span",{className:"font-semibold",children:s({id:"apiSettings.providers.advancedSettings"})}),L?e.jsx(hs,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})]})}),e.jsxs(us,{className:"space-y-4 pt-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"timeout",children:s({id:"apiSettings.providers.timeout"})}),e.jsx(y,{id:"timeout",type:"number",min:"1",value:m,onChange:g=>F(parseInt(g.target.value)||300)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.timeoutHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"maxRetries",children:s({id:"apiSettings.providers.maxRetries"})}),e.jsx(y,{id:"maxRetries",type:"number",min:"0",value:O,onChange:g=>B(parseInt(g.target.value)||0)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"organization",children:s({id:"apiSettings.providers.organization"})}),e.jsx(y,{id:"organization",value:w,onChange:g=>S(g.target.value)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.organizationHint"})})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"apiVersion",children:s({id:"apiSettings.providers.apiVersion"})}),e.jsx(y,{id:"apiVersion",value:H,onChange:g=>k(g.target.value),placeholder:"2024-02-01"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.apiVersionHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"rpm",children:s({id:"apiSettings.providers.rpm"})}),e.jsx(y,{id:"rpm",type:"number",min:"0",value:ee??"",onChange:g=>ne(g.target.value?parseInt(g.target.value):void 0),placeholder:s({id:"apiSettings.providers.unlimited"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"tpm",children:s({id:"apiSettings.providers.tpm"})}),e.jsx(y,{id:"tpm",type:"number",min:"0",value:je??"",onChange:g=>le(g.target.value?parseInt(g.target.value):void 0),placeholder:s({id:"apiSettings.providers.unlimited"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"proxy",children:s({id:"apiSettings.providers.proxy"})}),e.jsx(y,{id:"proxy",value:Ce,onChange:g=>A(g.target.value),placeholder:"http://proxy.example.com:8080"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"customHeaders",children:s({id:"apiSettings.providers.customHeaders"})}),e.jsx(Ke,{id:"customHeaders",value:j,onChange:g=>z(g.target.value),placeholder:`{
1
+ import{u as q,al as ce,r as n,j as e,e as f,Z as ge,c as Ze,a7 as ie,C as G,m as Ts,k as De,b as js,I as y,K as vs,D as fs,d as Ss,f as Ns,g as xe,S as ms,h as ys,T as ue,B as Z,x as _e,y as He,z as Ue,A as Je,E as Ve,bu as h,aq as fe,ar as Se,as as Ne,at as ye,au as V,cy as hs,ap as xs,bO as Ke,G as $e,bq as Pe,ck as Re,bp as Ds,ae as Ps,N as be,av as Os,X as zs,bf as nt,a2 as lt,a3 as dt,a4 as Es,a5 as Ls,an as ns,eA as rt,eB as ct,a as Bs,aw as ot,R as Rs,d6 as mt}from"./index-DzTbMyaS.js";import{T as ht}from"./TabsNavigation-jhUge9YV.js";import{S as X}from"./Switch-w0I3JCcC.js";import{u as Xe,a as xt,b as bs,c as gt,d as pt,e as ut,f as _s,g as jt,h as Hs,i as vt,j as ft,k as St,l as Nt,m as Us,n as yt,o as Js,p as bt,q as Ct,r as wt,s as Vs,t as Mt,v as Pt,w as kt,x as It,y as Tt,z as Et,A as Lt,B as Ft}from"./useApiSettings-XsHrqf-L.js";import{E as Cs}from"./ellipsis-vertical-Fs6bysWx.js";import{S as ws}from"./square-pen-DsOvAvME.js";import{C as gs,a as ps,b as us}from"./Collapsible-I5pixbHb.js";import{E as as}from"./eye-off-DjbIj5iN.js";import{E as is}from"./eye-D6BRlJ1r.js";import{A as $s,a as Gs,b as qs,c as Qs,d as Ws,e as Ys,f as Zs,g as Xs}from"./AlertDialog-CSZq4WHZ.js";import{F as At}from"./file-text-BMy5pXNV.js";import{H as Kt}from"./hard-drive-BTACzgUO.js";import{S as et}from"./save-D4XQY9i9.js";import{L as Dt}from"./link-8lz-HgnZ.js";import{P as Ot}from"./package-DYrbBCxk.js";import"./useLocale-CmG6pxZe.js";import"./errorSanitizer-IY9pf5g4.js";function zt({provider:a,onEdit:r,onDelete:t,onTest:s,onMultiKeySettings:i,onSyncToCodexLens:o,onManageModels:c,onToggleEnabled:d,isDeleting:N,isTesting:p,isToggling:u}){var M,C;const{formatMessage:v}=q(),I=((M=a.apiKeys)==null?void 0:M.filter(T=>T.enabled).length)||0,E=(((C=a.apiKeys)==null?void 0:C.length)||0)>0,D=()=>{var L;if(!a.enabled)return e.jsx(Z,{variant:"secondary",children:v({id:"apiSettings.common.disabled"})});if(!((L=a.healthCheck)!=null&&L.enabled))return e.jsx(Z,{variant:"outline",children:v({id:"apiSettings.providers.unknown"})});const T=a.apiKeys||[];if(T.length===0)return e.jsx(Z,{variant:"info",children:v({id:"apiSettings.providers.unknown"})});const b=T.filter(x=>x.healthStatus==="healthy").length;return T.filter(x=>x.healthStatus==="unhealthy").length>0?e.jsx(Z,{variant:"destructive",children:v({id:"apiSettings.providers.unhealthy"})}):b===T.length?e.jsx(Z,{variant:"success",children:v({id:"apiSettings.providers.healthy"})}):e.jsx(Z,{variant:"warning",children:v({id:"apiSettings.providers.unknown"})})};return e.jsx(G,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground truncate",children:a.name}),D()]}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-sm text-muted-foreground",children:[e.jsx("span",{className:"capitalize",children:a.type}),E&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ge,{className:"w-3 h-3"}),I," ",v({id:"apiSettings.providers.apiKey"})]}),a.routingStrategy&&e.jsx("span",{className:"capitalize",children:a.routingStrategy.replace("-"," ")})]}),a.apiBase&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1 truncate",children:a.apiBase})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:d,disabled:u}),e.jsxs(fs,{children:[e.jsx(Ss,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon",children:e.jsx(Cs,{className:"w-4 h-4"})})}),e.jsxs(Ns,{align:"end",children:[e.jsxs(xe,{onClick:r,children:[e.jsx(ws,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.edit"})]}),e.jsxs(xe,{onClick:s,disabled:p,children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.test"})]}),e.jsxs(xe,{onClick:c,children:[e.jsx(ms,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.manageModels"})]}),E&&e.jsxs(xe,{onClick:i,children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.multiKeySettings"})]}),e.jsxs(xe,{onClick:o,children:[e.jsx(De,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.syncToCodexLens"})]}),e.jsx(ys,{}),e.jsxs(xe,{onClick:t,disabled:N,className:"text-destructive",children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),v({id:"apiSettings.providers.actions.delete"})]})]})]})]})]})})}function Bt({onAddProvider:a,onEditProvider:r,onMultiKeySettings:t,onSyncToCodexLens:s,onManageModels:i}){const{formatMessage:o}=q(),{error:c}=ce(),[d,N]=n.useState(""),[p,u]=n.useState(!1),{providers:v,isLoading:I,refetch:E}=Xe(),{deleteProvider:D,isDeleting:M}=xt(),{updateProvider:C,isUpdating:T}=bs(),{testProvider:b,isTesting:P}=gt(),{triggerHealthCheck:L}=pt(),x=n.useMemo(()=>v.filter(S=>{const H=S.name.toLowerCase().includes(d.toLowerCase())||S.type.toLowerCase().includes(d.toLowerCase()),k=!p||!S.enabled;return H&&k}),[v,d,p]),m=async(S,H)=>{const k=o({id:"apiSettings.providers.deleteConfirm"},{name:H});if(window.confirm(k))try{await D(S)}catch{c(o({id:"apiSettings.providers.deleteError"}))}},F=async(S,H)=>{try{await C(S,{enabled:H})}catch{c(o({id:"apiSettings.providers.toggleError"}))}},O=async S=>{try{(await b(S)).success&&await L(S)}catch{c(o({id:"apiSettings.providers.testError"}))}},B=v.filter(S=>S.enabled).length,w=v.length;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-foreground",children:o({id:"apiSettings.providers.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.description"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:"outline",onClick:()=>E(),disabled:I,children:[e.jsx(ge,{className:Ze("w-4 h-4 mr-2",I&&"animate-spin")}),o({id:"common.actions.refresh"})]}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),o({id:"apiSettings.providers.actions.add"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ts,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:w})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.stats.total"})})]}),e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(De,{className:"w-5 h-5 text-success"}),e.jsx("span",{className:"text-2xl font-bold",children:B})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:o({id:"apiSettings.providers.stats.enabled"})})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(js,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(y,{placeholder:o({id:"apiSettings.common.searchPlaceholder"}),value:d,onChange:S=>N(S.target.value),className:"pl-9"})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs(f,{variant:p?"default":"outline",size:"sm",onClick:()=>u(S=>!S),children:[p?e.jsx(vs,{className:"w-4 h-4 mr-2"}):e.jsx(De,{className:"w-4 h-4 mr-2"}),o(p?{id:"apiSettings.providers.actions.hideDisabled"}:{id:"apiSettings.providers.actions.showDisabled"})]})})]}),I?e.jsx("div",{className:"space-y-4",children:[1,2,3,4,5].map(S=>e.jsx("div",{className:"h-24 bg-muted animate-pulse rounded-lg"},S))}):x.length===0?e.jsxs(G,{className:"p-8 text-center",children:[e.jsx(Ts,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:o({id:"apiSettings.providers.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:o({id:"apiSettings.providers.emptyState.message"})}),e.jsxs(f,{className:"mt-4",onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),o({id:"apiSettings.providers.actions.add"})]})]}):e.jsx("div",{className:"space-y-3",children:x.map(S=>e.jsx(zt,{provider:S,onEdit:()=>r(S.id),onDelete:()=>m(S.id,S.name),onTest:()=>O(S.id),onMultiKeySettings:()=>t(S.id),onSyncToCodexLens:()=>s(S.id),onManageModels:()=>i(S.id),onToggleEnabled:H=>F(S.id,H),isDeleting:M,isTesting:P,isToggling:T},S.id))})]})}function Rt({entry:a,showKey:r,onToggleShowKey:t,onUpdate:s,onRemove:i}){const{formatMessage:o}=q();return e.jsxs("div",{className:"grid grid-cols-12 gap-2 items-start p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"col-span-3",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyLabel"})}),e.jsx(y,{value:a.label||"",onChange:c=>s({label:c.target.value}),placeholder:"Key 1",className:"mt-1"})]}),e.jsxs("div",{className:"col-span-4",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyValue"})}),e.jsxs("div",{className:"relative mt-1",children:[e.jsx(y,{type:r?"text":"password",value:a.key,onChange:c=>s({key:c.target.value}),placeholder:"sk-...",className:"pr-8"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:t,children:r?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(h,{className:"text-xs",children:o({id:"apiSettings.providers.keyWeight"})}),e.jsx(y,{type:"number",min:"0",max:"100",value:a.weight??1,onChange:c=>s({weight:parseInt(c.target.value)||1}),className:"mt-1"})]}),e.jsxs("div",{className:"col-span-2 flex items-center gap-2 pt-5",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:c=>s({enabled:c})}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.enabled?o({id:"apiSettings.common.enabled"}):o({id:"apiSettings.common.disabled"})})]}),e.jsx("div",{className:"col-span-1 flex items-center justify-end pt-5",children:e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:i,className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})})]})}function _t({open:a,onClose:r,provider:t}){const{formatMessage:s}=q(),{error:i}=ce(),o=!!t,{createProvider:c,isCreating:d}=ut(),{updateProvider:N,isUpdating:p}=bs(),[u,v]=n.useState(""),[I,E]=n.useState("openai"),[D,M]=n.useState(""),[C,T]=n.useState(""),[b,P]=n.useState(!0),[L,x]=n.useState(!1),[m,F]=n.useState(300),[O,B]=n.useState(0),[w,S]=n.useState(""),[H,k]=n.useState(""),[j,z]=n.useState(""),[ee,ne]=n.useState(),[je,le]=n.useState(),[Ce,A]=n.useState(""),[Q,W]=n.useState(!1),[te,de]=n.useState([]),[Ge,ke]=n.useState(new Set),[qe,Ie]=n.useState("simple-shuffle"),[we,Me]=n.useState(!1),[Te,Ee]=n.useState(60),[Le,ve]=n.useState(300),[Oe,Fe]=n.useState(5),[oe,R]=n.useState(!1),[se,re]=n.useState([]),[ae,me]=n.useState([]);n.useEffect(()=>{if(t){v(t.name),E(t.type),M(t.apiKey),T(t.apiBase||""),P(t.enabled),Ie(t.routingStrategy||"simple-shuffle"),t.advancedSettings&&(F(t.advancedSettings.timeout||300),B(t.advancedSettings.maxRetries||0),S(t.advancedSettings.organization||""),k(t.advancedSettings.apiVersion||""),z(t.advancedSettings.customHeaders?JSON.stringify(t.advancedSettings.customHeaders,null,2):""),ne(t.advancedSettings.rpm),le(t.advancedSettings.tpm),A(t.advancedSettings.proxy||""));const g=!!(t.apiKeys&&t.apiKeys.length>0);W(g),g&&t.apiKeys&&de(t.apiKeys.map(K=>({id:K.id,key:K.key,label:K.label,weight:K.weight,enabled:K.enabled}))),t.healthCheck&&(Me(t.healthCheck.enabled),Ee(t.healthCheck.intervalSeconds),ve(t.healthCheck.cooldownSeconds),Fe(t.healthCheck.failureThreshold)),t.llmModels&&re(t.llmModels.map(K=>({id:K.id,name:K.name,series:K.series,description:K.description}))),t.embeddingModels&&me(t.embeddingModels.map(K=>({id:K.id,name:K.name,series:K.series,description:K.description})))}else v(""),E("openai"),M(""),T(""),P(!0),F(300),B(0),S(""),k(""),z(""),ne(void 0),le(void 0),A(""),W(!1),de([]),Ie("simple-shuffle"),Me(!1),Ee(60),ve(300),Fe(5),re([]),me([])},[t,a]);const he=()=>{const g={id:`key-${Date.now()}`,key:"",label:`Key ${te.length+1}`,weight:1,enabled:!0};de([...te,g])},ze=(g,K)=>{de(te.map((_,U)=>U===g?{..._,...K}:_))},ls=g=>{de(te.filter((K,_)=>_!==g))},es=g=>{ke(K=>{const _=new Set(K);return _.has(g)?_.delete(g):_.add(g),_})},Qe=()=>{const g={id:`llm-${Date.now()}`,name:"",series:""};re([...se,g])},ds=g=>{re(se.filter((K,_)=>_!==g))},Ae=(g,K,_)=>{re(se.map((U,Ye)=>Ye===g?{...U,[K]:_}:U))},rs=()=>{const g={id:`emb-${Date.now()}`,name:"",series:""};me([...ae,g])},Y=g=>{me(ae.filter((K,_)=>_!==g))},Be=(g,K,_)=>{me(ae.map((U,Ye)=>Ye===g?{...U,[K]:_}:U))},cs=async()=>{try{let g;if(j.trim())try{g=JSON.parse(j)}catch{alert(s({id:"apiSettings.messages.invalidJsonHeaders"}));return}const K=new Date().toISOString(),_={name:u,type:I,apiKey:Q?"":D,apiBase:C||void 0,enabled:b,advancedSettings:{timeout:m,maxRetries:O,organization:w||void 0,apiVersion:H||void 0,customHeaders:g,rpm:ee,tpm:je,proxy:Ce||void 0},apiKeys:Q?te.map(U=>({id:U.id,key:U.key,label:U.label,weight:U.weight,enabled:U.enabled})):void 0,routingStrategy:Q?qe:void 0,healthCheck:we?{enabled:!0,intervalSeconds:Te,cooldownSeconds:Le,failureThreshold:Oe}:void 0,llmModels:se.filter(U=>U.name.trim()).map(U=>({id:U.id,name:U.name,type:"llm",series:U.series||U.name.split("-")[0],enabled:!0,createdAt:K,updatedAt:K})),embeddingModels:ae.filter(U=>U.name.trim()).map(U=>({id:U.id,name:U.name,type:"embedding",series:U.series||U.name.split("-")[0],enabled:!0,createdAt:K,updatedAt:K}))};o&&t?await N(t.id,_):await c(_),r()}catch{i(s({id:"apiSettings.providers.saveError"}))}},We=d||p;return e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s(o?{id:"apiSettings.providers.actions.edit"}:{id:"apiSettings.providers.actions.add"})}),e.jsx(Ve,{children:s({id:"apiSettings.providers.description"})})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.basicInfo"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"name",children:[s({id:"apiSettings.providers.displayName"})," *"]}),e.jsx(y,{id:"name",value:u,onChange:g=>v(g.target.value),placeholder:"My OpenAI"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"type",children:[s({id:"apiSettings.common.type"})," *"]}),e.jsxs(fe,{value:I,onValueChange:g=>E(g),children:[e.jsx(Se,{id:"type",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"openai",children:"OpenAI"}),e.jsx(V,{value:"anthropic",children:"Anthropic"}),e.jsx(V,{value:"custom",children:"Custom"})]})]})]})]}),!Q&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"apiKey",children:[s({id:"apiSettings.providers.apiKey"})," *"]}),e.jsx(y,{id:"apiKey",type:"password",value:D,onChange:g=>M(g.target.value),placeholder:"sk-..."}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.useEnvVar"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"apiBase",children:s({id:"apiSettings.providers.apiBaseUrl"})}),e.jsx(y,{id:"apiBase",value:C,onChange:g=>T(g.target.value),placeholder:"https://api.openai.com/v1"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"enabled",checked:b,onCheckedChange:P}),e.jsx(h,{htmlFor:"enabled",children:s({id:"apiSettings.providers.enableProvider"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"useMultiKey",checked:Q,onCheckedChange:W}),e.jsx(h,{htmlFor:"useMultiKey",children:s({id:"apiSettings.providers.multiKeySettings"})})]})]}),Q&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.multiKeySettings"})}),e.jsxs(f,{type:"button",size:"sm",onClick:he,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addKey"})]})]}),te.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:te.map((g,K)=>e.jsx(Rt,{entry:g,showKey:Ge.has(K),onToggleShowKey:()=>es(K),onUpdate:_=>ze(K,_),onRemove:()=>ls(K)},g.id))}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"routingStrategy",children:s({id:"apiSettings.providers.routingStrategy"})}),e.jsxs(fe,{value:qe,onValueChange:g=>Ie(g),children:[e.jsx(Se,{id:"routingStrategy",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"simple-shuffle",children:s({id:"apiSettings.providers.simpleShuffle"})}),e.jsx(V,{value:"weighted",children:s({id:"apiSettings.providers.weighted"})}),e.jsx(V,{value:"latency-based",children:s({id:"apiSettings.providers.latencyBased"})}),e.jsx(V,{value:"cost-based",children:s({id:"apiSettings.providers.costBased"})}),e.jsx(V,{value:"least-busy",children:s({id:"apiSettings.providers.leastBusy"})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:s({id:"apiSettings.providers.healthCheck"})}),e.jsx(X,{checked:we,onCheckedChange:Me})]}),we&&e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"checkInterval",children:s({id:"apiSettings.providers.checkInterval"})}),e.jsx(y,{id:"checkInterval",type:"number",min:"10",value:Te,onChange:g=>Ee(parseInt(g.target.value)||60)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cooldownPeriod",children:s({id:"apiSettings.providers.cooldownPeriod"})}),e.jsx(y,{id:"cooldownPeriod",type:"number",min:"10",value:Le,onChange:g=>ve(parseInt(g.target.value)||300)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"failureThreshold",children:s({id:"apiSettings.providers.failureThreshold"})}),e.jsx(y,{id:"failureThreshold",type:"number",min:"1",value:Oe,onChange:g=>Fe(parseInt(g.target.value)||5)})]})]})]})]}),e.jsxs(gs,{open:L,onOpenChange:x,children:[e.jsx(ps,{asChild:!0,children:e.jsxs(f,{type:"button",variant:"ghost",className:"w-full justify-between",children:[e.jsx("span",{className:"font-semibold",children:s({id:"apiSettings.providers.advancedSettings"})}),L?e.jsx(hs,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})]})}),e.jsxs(us,{className:"space-y-4 pt-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"timeout",children:s({id:"apiSettings.providers.timeout"})}),e.jsx(y,{id:"timeout",type:"number",min:"1",value:m,onChange:g=>F(parseInt(g.target.value)||300)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.timeoutHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"maxRetries",children:s({id:"apiSettings.providers.maxRetries"})}),e.jsx(y,{id:"maxRetries",type:"number",min:"0",value:O,onChange:g=>B(parseInt(g.target.value)||0)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"organization",children:s({id:"apiSettings.providers.organization"})}),e.jsx(y,{id:"organization",value:w,onChange:g=>S(g.target.value)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.organizationHint"})})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"apiVersion",children:s({id:"apiSettings.providers.apiVersion"})}),e.jsx(y,{id:"apiVersion",value:H,onChange:g=>k(g.target.value),placeholder:"2024-02-01"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.apiVersionHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"rpm",children:s({id:"apiSettings.providers.rpm"})}),e.jsx(y,{id:"rpm",type:"number",min:"0",value:ee??"",onChange:g=>ne(g.target.value?parseInt(g.target.value):void 0),placeholder:s({id:"apiSettings.providers.unlimited"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"tpm",children:s({id:"apiSettings.providers.tpm"})}),e.jsx(y,{id:"tpm",type:"number",min:"0",value:je??"",onChange:g=>le(g.target.value?parseInt(g.target.value):void 0),placeholder:s({id:"apiSettings.providers.unlimited"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"proxy",children:s({id:"apiSettings.providers.proxy"})}),e.jsx(y,{id:"proxy",value:Ce,onChange:g=>A(g.target.value),placeholder:"http://proxy.example.com:8080"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"customHeaders",children:s({id:"apiSettings.providers.customHeaders"})}),e.jsx(Ke,{id:"customHeaders",value:j,onChange:g=>z(g.target.value),placeholder:`{
2
2
  "X-Custom": "value"
3
3
  }`,rows:3}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.providers.customHeadersHint"})})]})]})]}),e.jsxs(gs,{open:oe,onOpenChange:R,children:[e.jsx(ps,{asChild:!0,children:e.jsxs(f,{type:"button",variant:"ghost",className:"w-full justify-between",children:[e.jsx("span",{className:"font-semibold",children:s({id:"apiSettings.providers.modelSettings"})}),oe?e.jsx(hs,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})]})}),e.jsxs(us,{className:"space-y-4 pt-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h4",{className:"text-sm font-medium",children:s({id:"apiSettings.providers.llmModels"})}),e.jsxs(f,{type:"button",size:"sm",onClick:Qe,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addLlmModel"})]})]}),se.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:se.map((g,K)=>e.jsxs("div",{className:"flex items-start gap-2 p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-2",children:[e.jsx(y,{value:g.name,onChange:_=>Ae(K,"name",_.target.value),placeholder:s({id:"apiSettings.providers.modelId"})}),e.jsx(y,{value:g.series||"",onChange:_=>Ae(K,"series",_.target.value),placeholder:s({id:"apiSettings.providers.modelSeries"})})]}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:()=>ds(K),className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})]},g.id))})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h4",{className:"text-sm font-medium",children:s({id:"apiSettings.providers.embeddingModels"})}),e.jsxs(f,{type:"button",size:"sm",onClick:rs,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addEmbeddingModel"})]})]}),ae.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:ae.map((g,K)=>e.jsxs("div",{className:"flex items-start gap-2 p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-2",children:[e.jsx(y,{value:g.name,onChange:_=>Be(K,"name",_.target.value),placeholder:s({id:"apiSettings.providers.modelId"})}),e.jsx(y,{value:g.series||"",onChange:_=>Be(K,"series",_.target.value),placeholder:s({id:"apiSettings.providers.modelSeries"})})]}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:()=>Y(K),className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})]},g.id))})]})]})]})]}),e.jsxs($e,{children:[e.jsx(f,{type:"button",variant:"outline",onClick:r,disabled:We,children:s({id:"apiSettings.common.cancel"})}),e.jsxs(f,{onClick:cs,disabled:We||!u.trim(),children:[We?e.jsx(ge,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(Pe,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.common.save"})]})]})]})})}function Ht({endpoint:a,onEdit:r,onDelete:t,onToggleEnabled:s,isDeleting:i,isToggling:o}){var d,N;const{formatMessage:c}=q();return e.jsx(G,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground font-mono",children:a.id}),a.enabled?e.jsx(Z,{variant:"success",children:c({id:"apiSettings.common.enabled"})}):e.jsx(Z,{variant:"secondary",children:c({id:"apiSettings.common.disabled"})}),a.cacheStrategy.enabled&&e.jsxs(Z,{variant:"info",className:"flex items-center gap-1",children:[e.jsx(Re,{className:"w-3 h-3"}),c({id:"apiSettings.endpoints.cacheStrategy"})]})]}),e.jsx("p",{className:"text-sm font-medium text-foreground mt-1",children:a.name}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-sm text-muted-foreground",children:[e.jsxs("span",{children:[c({id:"apiSettings.endpoints.provider"}),": ",a.providerId]}),e.jsxs("span",{children:[c({id:"apiSettings.endpoints.model"}),": ",a.model]})]}),a.description&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:a.description}),a.cacheStrategy.enabled&&e.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[c({id:"apiSettings.endpoints.cacheTTL"}),": ",a.cacheStrategy.ttlMinutes,"m"]}),e.jsxs("span",{children:[c({id:"apiSettings.endpoints.cacheMaxSize"}),": ",a.cacheStrategy.maxSizeKB,"KB"]}),(((d=a.cacheStrategy.filePatterns)==null?void 0:d.length)||0)>0&&e.jsxs("span",{children:[c({id:"apiSettings.endpoints.filePatterns"}),": ",((N=a.cacheStrategy.filePatterns)==null?void 0:N.length)||0]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:s,disabled:o}),e.jsxs(fs,{children:[e.jsx(Ss,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon",children:e.jsx(Cs,{className:"w-4 h-4"})})}),e.jsxs(Ns,{align:"end",children:[e.jsxs(xe,{onClick:r,children:[e.jsx(ws,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.endpoints.actions.edit"})]}),e.jsx(ys,{}),e.jsxs(xe,{onClick:t,disabled:i,className:"text-destructive",children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.endpoints.actions.delete"})]})]})]})]})]})})}function Ut({onAddEndpoint:a,onEditEndpoint:r}){const{formatMessage:t}=q(),{error:s}=ce(),[i,o]=n.useState(""),[c,d]=n.useState(!1),[N,p]=n.useState(!1),{endpoints:u,cachedCount:v,isLoading:I,refetch:E}=_s(),{deleteEndpoint:D,isDeleting:M}=jt(),{updateEndpoint:C,isUpdating:T}=Hs(),b=n.useMemo(()=>u.filter(m=>{const F=m.id.toLowerCase().includes(i.toLowerCase())||m.name.toLowerCase().includes(i.toLowerCase())||m.model.toLowerCase().includes(i.toLowerCase()),O=!c||!m.enabled,B=!N||m.cacheStrategy.enabled;return F&&O&&B}),[u,i,c,N]),P=async(m,F)=>{const O=t({id:"apiSettings.endpoints.deleteConfirm"},{id:F});if(window.confirm(O))try{await D(m)}catch{s(t({id:"apiSettings.endpoints.deleteError"}))}},L=async(m,F)=>{try{await C(m,{enabled:F})}catch{s(t({id:"apiSettings.endpoints.toggleError"}))}},x=u.length;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-foreground",children:t({id:"apiSettings.endpoints.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t({id:"apiSettings.endpoints.description"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:"outline",onClick:()=>E(),disabled:I,children:[e.jsx(ge,{className:Ze("w-4 h-4 mr-2",I&&"animate-spin")}),t({id:"common.actions.refresh"})]}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),t({id:"apiSettings.endpoints.actions.add"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ge,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:x})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t({id:"apiSettings.endpoints.stats.totalEndpoints"})})]}),e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Re,{className:"w-5 h-5 text-info"}),e.jsx("span",{className:"text-2xl font-bold",children:v})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t({id:"apiSettings.endpoints.stats.cachedEndpoints"})})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(js,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(y,{placeholder:t({id:"apiSettings.common.searchPlaceholder"}),value:i,onChange:m=>o(m.target.value),className:"pl-9"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:c?"default":"outline",size:"sm",onClick:()=>d(m=>!m),children:[c?e.jsx(vs,{className:"w-4 h-4 mr-2"}):e.jsx(De,{className:"w-4 h-4 mr-2"}),t(c?{id:"apiSettings.endpoints.actions.showAll"}:{id:"apiSettings.endpoints.actions.showDisabled"})]}),e.jsxs(f,{variant:N?"default":"outline",size:"sm",onClick:()=>p(m=>!m),children:[e.jsx(Re,{className:"w-4 h-4 mr-2"}),t(N?{id:"apiSettings.endpoints.actions.showAll"}:{id:"apiSettings.endpoints.cacheStrategy"})]})]})]}),I?e.jsx("div",{className:"space-y-4",children:[1,2,3,4,5].map(m=>e.jsx("div",{className:"h-24 bg-muted animate-pulse rounded-lg"},m))}):b.length===0?e.jsxs(G,{className:"p-8 text-center",children:[e.jsx(Re,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:t({id:"apiSettings.endpoints.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:t({id:"apiSettings.endpoints.emptyState.message"})}),e.jsxs(f,{className:"mt-4",onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),t({id:"apiSettings.endpoints.actions.add"})]})]}):e.jsx("div",{className:"space-y-3",children:b.map(m=>e.jsx(Ht,{endpoint:m,onEdit:()=>r(m.id),onDelete:()=>P(m.id,m.name),onToggleEnabled:F=>L(m.id,F),isDeleting:M,isToggling:T},m.id))})]})}function Jt({value:a,onChange:r,placeholder:t}){const[s,i]=n.useState(""),o=()=>{s.trim()&&!a.includes(s.trim())&&(r([...a,s.trim()]),i(""))},c=d=>{r(a.filter(N=>N!==d))};return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(y,{value:s,onChange:d=>i(d.target.value),onKeyDown:d=>{d.key==="Enter"&&(d.preventDefault(),o())},placeholder:t}),e.jsx(f,{type:"button",size:"sm",onClick:o,children:e.jsx(Pe,{className:"w-4 h-4"})})]}),a.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2",children:a.map(d=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-muted rounded-md text-xs",children:[d,e.jsx("button",{type:"button",onClick:()=>c(d),className:"hover:text-destructive",children:"×"})]},d))})]})}function Vt({open:a,onClose:r,endpoint:t}){const{formatMessage:s}=q(),{error:i}=ce(),o=!!t,{createEndpoint:c,isCreating:d}=vt(),{updateEndpoint:N,isUpdating:p}=Hs(),{providers:u}=Xe(),[v,I]=n.useState(""),[E,D]=n.useState(""),[M,C]=n.useState(""),[T,b]=n.useState(""),[P,L]=n.useState(""),[x,m]=n.useState(!0),[F,O]=n.useState(!1),[B,w]=n.useState(!1),[S,H]=n.useState(60),[k,j]=n.useState(1024),[z,ee]=n.useState([]),ne=n.useMemo(()=>{if(!M)return[];const A=u.find(W=>W.id===M);if(!A)return[];const Q=[];return A.llmModels&&Q.push(...A.llmModels.filter(W=>W.enabled).map(W=>W.id)),A.embeddingModels&&Q.push(...A.embeddingModels.filter(W=>W.enabled).map(W=>W.id)),A.rerankerModels&&Q.push(...A.rerankerModels.filter(W=>W.enabled).map(W=>W.id)),Q},[M,u]);n.useEffect(()=>{t?(I(t.id),D(t.name),C(t.providerId),b(t.model),L(t.description||""),m(t.enabled),w(t.cacheStrategy.enabled),H(t.cacheStrategy.ttlMinutes),j(t.cacheStrategy.maxSizeKB),ee(t.cacheStrategy.filePatterns||[])):(I(""),D(""),C(""),b(""),L(""),m(!0),w(!1),H(60),j(1024),ee([]))},[t,a]),n.useEffect(()=>{if(!o&&M){const A=u.find(Q=>Q.id===M);A&&A.llmModels&&A.llmModels.length>0&&b(A.llmModels[0].id)}},[M,u,o]);const je=async()=>{try{const Q={id:v,name:E,providerId:M,model:T,description:P||void 0,enabled:x,cacheStrategy:{enabled:B,ttlMinutes:S,maxSizeKB:k,filePatterns:B?z:[]}};o&&t?await N(t.id,Q):await c(Q),r()}catch{i(s({id:"apiSettings.endpoints.saveError"}))}},le=d||p,Ce=v.trim()&&E.trim()&&M&&T.trim();return e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-2xl",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s(o?{id:"apiSettings.endpoints.actions.edit"}:{id:"apiSettings.endpoints.actions.add"})}),e.jsx(Ve,{children:s({id:"apiSettings.endpoints.description"})})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.basicInfo"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"endpointId",children:[s({id:"apiSettings.endpoints.endpointId"})," *"]}),e.jsx(y,{id:"endpointId",value:v,onChange:A=>I(A.target.value),placeholder:"my-gpt4o",disabled:o,className:"font-mono"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.endpoints.endpointIdHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"name",children:[s({id:"apiSettings.endpoints.name"})," *"]}),e.jsx(y,{id:"name",value:E,onChange:A=>D(A.target.value),placeholder:"My GPT-4o"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"providerId",children:[s({id:"apiSettings.endpoints.provider"})," *"]}),e.jsxs(fe,{value:M,onValueChange:C,disabled:o,children:[e.jsx(Se,{id:"providerId",children:e.jsx(Ne,{placeholder:u.length===0?s({id:"apiSettings.providers.addProviderFirst"}):s({id:"apiSettings.endpoints.selectProvider"})})}),e.jsx(ye,{children:u.map(A=>e.jsxs(V,{value:A.id,disabled:!A.enabled,children:[A.name,!A.enabled&&` (${s({id:"apiSettings.common.disabled"})})`]},A.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"model",children:[s({id:"apiSettings.endpoints.model"})," *"]}),ne.length===0&&M?e.jsx(y,{id:"model",value:T,onChange:A=>b(A.target.value),placeholder:"",className:"font-mono"}):e.jsxs(fe,{value:T,onValueChange:b,children:[e.jsx(Se,{id:"model",children:e.jsx(Ne,{placeholder:s(M?{id:"apiSettings.endpoints.selectModel"}:{id:"apiSettings.endpoints.selectProvider"})})}),e.jsx(ye,{children:ne.map(A=>e.jsx(V,{value:A,children:A},A))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"description",children:s({id:"apiSettings.common.description"})}),e.jsx(Ke,{id:"description",value:P,onChange:A=>L(A.target.value),placeholder:s({id:"apiSettings.common.optional"}),rows:2})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"enabled",checked:x,onCheckedChange:m}),e.jsx(h,{htmlFor:"enabled",children:s({id:"apiSettings.endpoints.enabled"})})]})]}),e.jsxs(gs,{open:F,onOpenChange:O,children:[e.jsx(ps,{asChild:!0,children:e.jsxs(f,{type:"button",variant:"ghost",className:"w-full justify-between",children:[e.jsxs("span",{className:"flex items-center gap-2 font-semibold",children:[e.jsx(Re,{className:"w-4 h-4"}),s({id:"apiSettings.endpoints.cacheStrategy"})]}),F?e.jsx(hs,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})]})}),e.jsxs(us,{className:"space-y-4 pt-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(h,{children:s({id:"apiSettings.endpoints.enableContextCaching"})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:s({id:"apiSettings.endpoints.cacheStrategy"})})]}),e.jsx(X,{checked:B,onCheckedChange:w})]}),B&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cacheTTL",children:s({id:"apiSettings.endpoints.cacheTTL"})}),e.jsx(y,{id:"cacheTTL",type:"number",min:"1",value:S,onChange:A=>H(parseInt(A.target.value)||60)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cacheMaxSize",children:s({id:"apiSettings.endpoints.cacheMaxSize"})}),e.jsx(y,{id:"cacheMaxSize",type:"number",min:"1",value:k,onChange:A=>j(parseInt(A.target.value)||1024)})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{children:s({id:"apiSettings.endpoints.autoCachePatterns"})}),e.jsx(Jt,{value:z,onChange:ee,placeholder:"*.md,*.ts"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.endpoints.filePatternsHint"})})]})]})]})]})]}),e.jsxs($e,{children:[e.jsx(f,{type:"button",variant:"outline",onClick:r,disabled:le,children:s({id:"apiSettings.common.cancel"})}),e.jsxs(f,{onClick:je,disabled:le||!Ce,children:[le?e.jsx(Re,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(Pe,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.common.save"})]})]})]})})}function $t({used:a,total:r}){const{formatMessage:t}=q(),s=r>0?Math.round(a/r*100):0;return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:t({id:"apiSettings.cache.settings.cacheUsage"})}),e.jsxs("span",{className:"font-medium",children:[s,"%"]})]}),e.jsx(Ds,{value:s,className:"h-2"}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[e.jsxs("span",{children:[t({id:"apiSettings.cache.settings.used"})," ",(a/1024/1024).toFixed(2)," MB"]}),e.jsxs("span",{children:[t({id:"apiSettings.cache.settings.total"})," ",(r/1024/1024).toFixed(2)," MB"]})]})]})}function ks({icon:a,label:r,value:t,className:s}){return e.jsx(G,{className:Ze("p-4",s),children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-primary/10 rounded-md text-primary",children:a}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:r}),e.jsx("p",{className:"text-2xl font-semibold",children:t})]})]})})}function Gt({className:a}){const{formatMessage:r}=q(),{success:t,error:s}=ce(),{stats:i,refetch:o}=ft(),{updateCacheSettings:c,isUpdating:d}=St(),{clearCache:N,isClearing:p}=Nt(),[u,v]=n.useState({enabled:!0,cacheDir:"",maxTotalSizeMB:1024}),[I,E]=n.useState(!1);n.useEffect(()=>{},[i]);const D=async()=>{try{await c(u),t(r({id:"apiSettings.cache.messages.cacheSettingsUpdated"})),await o()}catch(C){s(r({id:"common.error"}),C instanceof Error?C.message:r({id:"common.error"}))}},M=async()=>{try{await N(),E(!1),t(r({id:"apiSettings.cache.messages.cacheCleared"})),await o()}catch(C){s(r({id:"common.error"}),C instanceof Error?C.message:r({id:"common.error"}))}};return e.jsxs("div",{className:Ze("space-y-6",a),children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsx(ks,{icon:e.jsx(At,{className:"w-5 h-5"}),label:r({id:"apiSettings.cache.settings.cacheEntries"}),value:(i==null?void 0:i.entries)??0}),e.jsx(ks,{icon:e.jsx(Kt,{className:"w-5 h-5"}),label:r({id:"apiSettings.cache.settings.cacheSize"}),value:`${(((i==null?void 0:i.totalSize)??0)/1024/1024).toFixed(2)} MB`}),e.jsx(ks,{icon:e.jsx(Re,{className:"w-5 h-5"}),label:r({id:"apiSettings.cache.settings.maxSize"}),value:`${(((i==null?void 0:i.maxSize)??0)/1024/1024).toFixed(2)} MB`})]}),i&&e.jsx(G,{className:"p-4",children:e.jsx($t,{used:i.totalSize,total:i.maxSize})}),e.jsxs(G,{className:"p-6",children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:r({id:"apiSettings.cache.settings.title"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("div",{className:"space-y-0.5",children:e.jsx(h,{htmlFor:"cache-enabled",children:r({id:"apiSettings.cache.settings.enableGlobalCaching"})})}),e.jsx(X,{id:"cache-enabled",checked:u.enabled??!0,onCheckedChange:C=>v({...u,enabled:C}),disabled:d})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cache-dir",children:r({id:"apiSettings.cache.settings.cacheDirectory"})}),e.jsx(y,{id:"cache-dir",value:u.cacheDir??"",onChange:C=>v({...u,cacheDir:C.target.value}),disabled:d,placeholder:"/path/to/cache"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cache-max-size",children:r({id:"apiSettings.cache.settings.maxSize"})}),e.jsx(y,{id:"cache-max-size",type:"number",min:1,value:u.maxTotalSizeMB??1024,onChange:C=>v({...u,maxTotalSizeMB:parseInt(C.target.value)||1024}),disabled:d})]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t",children:[e.jsxs(f,{variant:"destructive",onClick:()=>E(!0),disabled:p,children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),r({id:"apiSettings.cache.settings.actions.clearCache"})]}),e.jsxs(f,{onClick:D,disabled:d,children:[e.jsx(et,{className:"w-4 h-4 mr-2"}),r({id:"common.save"})]})]})]})]}),e.jsx($s,{open:I,onOpenChange:E,children:e.jsxs(Gs,{children:[e.jsxs(qs,{children:[e.jsx(Qs,{children:r({id:"apiSettings.cache.settings.actions.clearCache"})}),e.jsx(Ws,{children:r({id:"apiSettings.cache.settings.confirmClearCache"})})]}),e.jsxs(Ys,{children:[e.jsx(Zs,{disabled:p,children:r({id:"common.cancel"})}),e.jsx(Xs,{onClick:M,disabled:p,children:r(p?{id:"common.loading"}:{id:"common.confirm"})})]})]})})]})}function qt({pool:a,onEdit:r,onDelete:t,onToggleEnabled:s,isDeleting:i,isToggling:o}){const{formatMessage:c}=q(),d=()=>{const p={embedding:"success",llm:"default",reranker:"info"},u={embedding:"apiSettings.modelPools.embedding",llm:"apiSettings.modelPools.llm",reranker:"apiSettings.modelPools.reranker"};return e.jsx(Z,{variant:p[a.modelType],children:c({id:u[a.modelType]})})},N=()=>c({id:{round_robin:"apiSettings.modelPools.roundRobin",latency_aware:"apiSettings.modelPools.latencyAware",weighted_random:"apiSettings.modelPools.weightedRandom"}[a.strategy]});return e.jsx(G,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground truncate",children:a.name||a.id}),d(),a.enabled?e.jsxs(Z,{variant:"success",children:[e.jsx(De,{className:"w-3 h-3 mr-1"}),c({id:"apiSettings.common.enabled"})]}):e.jsxs(Z,{variant:"secondary",children:[e.jsx(vs,{className:"w-3 h-3 mr-1"}),c({id:"apiSettings.common.disabled"})]})]}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-sm text-muted-foreground",children:[e.jsx("span",{className:"capitalize",children:N()}),a.autoDiscover&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ge,{className:"w-3 h-3"}),c({id:"apiSettings.modelPools.autoDiscover"})]})]}),e.jsx("div",{className:"mt-2 text-sm",children:e.jsxs("p",{className:"text-muted-foreground",children:[c({id:"apiSettings.modelPools.targetModel"}),": ",e.jsx("span",{className:"font-medium",children:a.targetModel})]})}),a.description&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:a.description}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[c({id:"apiSettings.modelPools.defaultCooldown"}),": ",a.defaultCooldown,"s"]}),e.jsxs("span",{children:[c({id:"apiSettings.modelPools.defaultConcurrent"}),": ",a.defaultMaxConcurrentPerKey]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:s,disabled:o}),e.jsxs(fs,{children:[e.jsx(Ss,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon",children:e.jsx(Cs,{className:"w-4 h-4"})})}),e.jsxs(Ns,{align:"end",children:[e.jsxs(xe,{onClick:r,children:[e.jsx(ws,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.modelPools.actions.edit"})]}),e.jsx(ys,{}),e.jsxs(xe,{onClick:t,disabled:i,className:"text-destructive",children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.modelPools.actions.delete"})]})]})]})]})]})})}function os({label:a,value:r,icon:t,className:s}){return e.jsx(G,{className:Ze("p-4",s),children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-primary/10 rounded-md text-primary",children:t}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:a}),e.jsx("p",{className:"text-2xl font-semibold",children:r})]})]})})}function Qt({onAddPool:a,onEditPool:r}){var B;const{formatMessage:t}=q(),{success:s,error:i}=ce(),{pools:o,totalCount:c,enabledCount:d,isLoading:N,refetch:p}=Us(),{deleteModelPool:u,isDeleting:v}=yt(),{updateModelPool:I}=Js(),[E,D]=n.useState(""),[M,C]=n.useState("all"),[T,b]=n.useState(null),[P,L]=n.useState(null),x=n.useMemo(()=>o.filter(w=>{var k;const S=!E||w.id.toLowerCase().includes(E.toLowerCase())||((k=w.name)==null?void 0:k.toLowerCase().includes(E.toLowerCase()))||w.targetModel.toLowerCase().includes(E.toLowerCase()),H=M==="all"||w.modelType===M;return S&&H}),[o,E,M]),m=n.useMemo(()=>({embedding:o.filter(w=>w.modelType==="embedding").length,llm:o.filter(w=>w.modelType==="llm").length,reranker:o.filter(w=>w.modelType==="reranker").length}),[o]),F=async()=>{if(T)try{await u(T),s(t({id:"apiSettings.messages.settingsDeleted"})),b(null),await p()}catch(w){i(t({id:"common.error"}),w instanceof Error?w.message:t({id:"common.error"}))}},O=async(w,S)=>{L(w);try{await I(w,{enabled:S}),await p()}catch(H){i(t({id:"common.error"}),H instanceof Error?H.message:t({id:"common.error"}))}finally{L(null)}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(os,{label:t({id:"apiSettings.modelPools.stats.total"}),value:c,icon:e.jsx(Ps,{className:"w-5 h-5"})}),e.jsx(os,{label:t({id:"apiSettings.modelPools.stats.enabled"}),value:d,icon:e.jsx(De,{className:"w-5 h-5"})}),e.jsx(os,{label:t({id:"apiSettings.modelPools.embedding"}),value:m.embedding,icon:e.jsx(ge,{className:"w-5 h-5"})}),e.jsx(os,{label:t({id:"apiSettings.modelPools.llm"}),value:m.llm,icon:e.jsx(Ps,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 items-start sm:items-center justify-between",children:[e.jsx("div",{className:"flex-1 w-full sm:max-w-md",children:e.jsxs("div",{className:"relative",children:[e.jsx(js,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(y,{placeholder:t({id:"apiSettings.common.searchPlaceholder"}),value:E,onChange:w=>D(w.target.value),className:"pl-9"})]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center bg-muted rounded-lg p-1",children:Object.keys({all:null,embedding:null,llm:null,reranker:null}).map(w=>e.jsx("button",{onClick:()=>C(w),className:Ze("px-3 py-1.5 text-sm font-medium rounded-md transition-colors",M===w?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:t(w==="all"?{id:"apiSettings.common.showAll"}:{id:`apiSettings.modelPools.${w}`})},w))}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),t({id:"apiSettings.modelPools.actions.add"})]})]})]}),N?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:t({id:"common.loading"})}):x.length===0?e.jsxs(G,{className:"p-12 text-center",children:[e.jsx(Ps,{className:"w-12 h-12 mx-auto mb-4 text-muted-foreground"}),e.jsx("h3",{className:"text-lg font-semibold mb-2",children:t({id:"apiSettings.modelPools.emptyState.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:t({id:"apiSettings.modelPools.emptyState.message"})}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),t({id:"apiSettings.modelPools.actions.add"})]})]}):e.jsx("div",{className:"grid gap-4",children:x.map(w=>e.jsx(qt,{pool:w,onEdit:()=>r(w.id),onDelete:()=>b(w.id),onToggleEnabled:S=>O(w.id,S),isDeleting:v&&T===w.id,isToggling:P===w.id},w.id))}),e.jsx($s,{open:!!T,onOpenChange:()=>b(null),children:e.jsxs(Gs,{children:[e.jsxs(qs,{children:[e.jsx(Qs,{children:t({id:"apiSettings.modelPools.actions.delete"})}),e.jsx(Ws,{children:t({id:"apiSettings.modelPools.deleteConfirm"},{name:((B=o.find(w=>w.id===T))==null?void 0:B.name)||T||""})})]}),e.jsxs(Ys,{children:[e.jsx(Zs,{disabled:v,children:t({id:"common.cancel"})}),e.jsx(Xs,{onClick:F,disabled:v,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:t(v?{id:"common.loading"}:{id:"common.confirm"})})]})]})})]})}const Fs={modelType:"",targetModel:"",strategy:"round_robin",autoDiscover:!0,excludedProviderIds:[],defaultCooldown:60,defaultMaxConcurrentPerKey:5,name:"",description:""};function Wt({provider:a,excluded:r,onToggle:t}){const{formatMessage:s}=q();return e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/50 rounded-md",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(nt,{id:`provider-${a.providerId}`,checked:!r,onCheckedChange:()=>t(a.providerId)}),e.jsx(h,{htmlFor:`provider-${a.providerId}`,className:"font-medium cursor-pointer",children:a.providerName})]}),e.jsx("div",{className:"ml-6 mt-1 flex flex-wrap gap-1",children:a.models.map(i=>e.jsx("span",{className:"text-xs px-2 py-0.5 bg-background rounded text-muted-foreground",children:i},i))})]}),e.jsx(f,{variant:"ghost",size:"sm",onClick:()=>t(a.providerId),children:r?e.jsx("span",{className:"text-xs text-muted-foreground",children:s({id:"apiSettings.modelPools.excludeProvider"})}):e.jsx("span",{className:"text-xs text-primary",children:s({id:"apiSettings.modelPools.includeProvider"})})})]})}function Yt({open:a,onClose:r,pool:t}){var k;const{formatMessage:s}=q(),{success:i,error:o,warning:c}=ce(),[d,N]=n.useState(Fs),[p,u]=n.useState(!1),{createModelPool:v,isCreating:I}=bt(),{updateModelPool:E,isUpdating:D}=Js(),{discoverModels:M,isDiscovering:C,data:T}=Ct(),{data:b,isLoading:P}=wt(d.modelType||"embedding"),L=!!t,x=I||D;n.useEffect(()=>{N(t?{modelType:t.modelType,targetModel:t.targetModel,strategy:t.strategy,autoDiscover:t.autoDiscover,excludedProviderIds:t.excludedProviderIds??[],defaultCooldown:t.defaultCooldown,defaultMaxConcurrentPerKey:t.defaultMaxConcurrentPerKey,name:t.name??"",description:t.description??""}:Fs),u(!1)},[t,a]);const m=(j,z)=>{N(ee=>({...ee,[j]:z})),(j==="modelType"||j==="targetModel")&&u(!1)},F=async()=>{if(!d.modelType||!d.targetModel){c("Please select model type and target model first");return}try{await M(d.modelType,d.targetModel),u(!0)}catch(j){o(s({id:"common.error"}),j instanceof Error?j.message:"Failed to discover providers")}},O=j=>{N(z=>({...z,excludedProviderIds:z.excludedProviderIds.includes(j)?z.excludedProviderIds.filter(ee=>ee!==j):[...z.excludedProviderIds,j]}))},B=n.useMemo(()=>!!d.modelType&&!!d.targetModel,[d.modelType,d.targetModel]),w=async()=>{if(B)try{const j={modelType:d.modelType,targetModel:d.targetModel,strategy:d.strategy,autoDiscover:d.autoDiscover,excludedProviderIds:d.excludedProviderIds,defaultCooldown:d.defaultCooldown,defaultMaxConcurrentPerKey:d.defaultMaxConcurrentPerKey,name:d.name||void 0,description:d.description||void 0,enabled:!0};L&&t?await E(t.id,j):await v(j),i(s({id:"apiSettings.modelPools.poolSaved"})),r()}catch(j){o(s({id:"common.error"}),j instanceof Error?j.message:"Failed to save model pool")}},S=(T==null?void 0:T.discovered)??[],H=n.useMemo(()=>!T||!S?0:S.length-d.excludedProviderIds.filter(j=>S.some(z=>z.providerId===j)).length,[T,S,d.excludedProviderIds]);return e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s(L?{id:"apiSettings.modelPools.actions.edit"}:{id:"apiSettings.modelPools.actions.add"})}),e.jsx(Ve,{children:s({id:"apiSettings.modelPools.embeddingPoolDesc"})})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"pool-model-type",children:[s({id:"apiSettings.modelPools.modelType"})," *"]}),e.jsxs(fe,{value:d.modelType,onValueChange:j=>m("modelType",j),disabled:L,children:[e.jsx(Se,{id:"pool-model-type",children:e.jsx(Ne,{placeholder:s({id:"apiSettings.modelPools.selectTargetModel"})})}),e.jsxs(ye,{children:[e.jsx(V,{value:"embedding",children:s({id:"apiSettings.modelPools.embedding"})}),e.jsx(V,{value:"llm",children:s({id:"apiSettings.modelPools.llm"})}),e.jsx(V,{value:"reranker",children:s({id:"apiSettings.modelPools.reranker"})})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"pool-target-model",children:[s({id:"apiSettings.modelPools.targetModel"})," *"]}),P?e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(be,{className:"w-4 h-4 animate-spin"}),s({id:"common.loading"})]}):e.jsxs(fe,{value:d.targetModel,onValueChange:j=>m("targetModel",j),disabled:!d.modelType,children:[e.jsx(Se,{id:"pool-target-model",children:e.jsx(Ne,{placeholder:s({id:"apiSettings.modelPools.selectTargetModel"})})}),e.jsx(ye,{children:(k=b==null?void 0:b.availableModels)==null?void 0:k.map(j=>e.jsx(V,{value:j.modelId,children:j.modelName},j.modelId))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"pool-strategy",children:s({id:"apiSettings.modelPools.strategy"})}),e.jsxs(fe,{value:d.strategy,onValueChange:j=>m("strategy",j),children:[e.jsx(Se,{id:"pool-strategy",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"round_robin",children:s({id:"apiSettings.modelPools.roundRobin"})}),e.jsx(V,{value:"latency_aware",children:s({id:"apiSettings.modelPools.latencyAware"})}),e.jsx(V,{value:"weighted_random",children:s({id:"apiSettings.modelPools.weightedRandom"})})]})]})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(h,{htmlFor:"pool-auto-discover",children:s({id:"apiSettings.modelPools.autoDiscover"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Automatically find providers offering this model"})]}),e.jsx(X,{id:"pool-auto-discover",checked:d.autoDiscover,onCheckedChange:j=>m("autoDiscover",j)})]}),d.autoDiscover&&d.modelType&&d.targetModel&&e.jsxs("div",{className:"space-y-3",children:[e.jsx(f,{type:"button",variant:"outline",onClick:F,disabled:C,className:"w-full",children:C?e.jsxs(e.Fragment,{children:[e.jsx(be,{className:"w-4 h-4 mr-2 animate-spin"}),s({id:"common.loading"})]}):e.jsxs(e.Fragment,{children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.modelPools.actions.autoDiscover"})]})}),p&&S.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(Os,{className:"w-4 h-4"}),e.jsxs("span",{children:[s({id:"apiSettings.modelPools.discovered"})," ",S.length," ",s({id:"apiSettings.modelPools.providers"})," •"," ",H," ",s({id:"apiSettings.modelPools.discovered"}).toLowerCase()]})]}),S.map(j=>e.jsx(Wt,{provider:j,excluded:d.excludedProviderIds.includes(j.providerId),onToggle:O},j.providerId))]}),p&&S.length===0&&e.jsx("div",{className:"text-center py-6 text-muted-foreground",children:e.jsx("p",{className:"text-sm",children:s({id:"apiSettings.modelPools.noProvidersFound"})})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"pool-cooldown",children:s({id:"apiSettings.modelPools.defaultCooldown"})}),e.jsx(y,{id:"pool-cooldown",type:"number",min:0,value:d.defaultCooldown,onChange:j=>m("defaultCooldown",parseInt(j.target.value)||0)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"pool-concurrent",children:s({id:"apiSettings.modelPools.defaultConcurrent"})}),e.jsx(y,{id:"pool-concurrent",type:"number",min:1,value:d.defaultMaxConcurrentPerKey,onChange:j=>m("defaultMaxConcurrentPerKey",parseInt(j.target.value)||1)})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"pool-name",children:s({id:"apiSettings.common.name"})}),e.jsx(y,{id:"pool-name",value:d.name,onChange:j=>m("name",j.target.value),placeholder:s({id:"apiSettings.common.optional"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"pool-description",children:s({id:"apiSettings.common.description"})}),e.jsx(Ke,{id:"pool-description",value:d.description,onChange:j=>m("description",j.target.value),placeholder:s({id:"apiSettings.common.optional"}),rows:3})]})]}),e.jsxs($e,{children:[e.jsxs(f,{variant:"outline",onClick:r,disabled:x,children:[e.jsx(zs,{className:"w-4 h-4 mr-2"}),s({id:"common.cancel"})]}),e.jsx(f,{onClick:w,disabled:!B||x,children:x?e.jsxs(e.Fragment,{children:[e.jsx(be,{className:"w-4 h-4 mr-2 animate-spin"}),s({id:"common.loading"})]}):e.jsxs(e.Fragment,{children:[e.jsx(et,{className:"w-4 h-4 mr-2"}),s({id:"common.save"})]})})]})]})})}function Zt({cliSettings:a,onEdit:r,onDelete:t,onToggleEnabled:s,isDeleting:i,isToggling:o}){const{formatMessage:c}=q(),d=()=>{const u=a.provider||"claude",v={claude:{variant:"secondary",label:"Claude"},codex:{variant:"outline",label:"Codex"},gemini:{variant:"default",label:"Gemini"}},I=v[u]||v.claude;return e.jsx(Z,{variant:I.variant,className:"text-xs",children:I.label})},N=()=>a.enabled?e.jsx(Z,{variant:"success",children:c({id:"apiSettings.common.enabled"})}):e.jsx(Z,{variant:"secondary",children:c({id:"apiSettings.common.disabled"})}),p=(()=>{const u=a.settings.env;return u.ANTHROPIC_BASE_URL||u.OPENAI_BASE_URL||""})();return e.jsx(G,{className:"p-4",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground truncate",children:a.name}),N(),d()]}),a.description&&e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:a.description}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-sm text-muted-foreground",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ms,{className:"w-3 h-3"}),a.settings.model||"default"]}),p&&e.jsxs("span",{className:"flex items-center gap-1 truncate max-w-[200px]",title:p,children:[e.jsx(Dt,{className:"w-3 h-3 flex-shrink-0"}),p]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:s,disabled:o}),e.jsxs(fs,{children:[e.jsx(Ss,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon",children:e.jsx(Cs,{className:"w-4 h-4"})})}),e.jsxs(Ns,{align:"end",children:[e.jsxs(xe,{onClick:r,children:[e.jsx(ws,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.cliSettings.actions.edit"})]}),e.jsx(ys,{}),e.jsxs(xe,{onClick:t,disabled:i,className:"text-destructive",children:[e.jsx(ue,{className:"w-4 h-4 mr-2"}),c({id:"apiSettings.cliSettings.actions.delete"})]})]})]})]})]})})}function Xt({onAddCliSettings:a,onEditCliSettings:r}){const{formatMessage:t}=q(),{error:s}=ce(),[i,o]=n.useState(""),{cliSettings:c,totalCount:d,enabledCount:N,providerCounts:p,isLoading:u,refetch:v}=Vs(),{deleteCliSettings:I,isDeleting:E}=Mt(),{toggleCliSettings:D,isToggling:M}=Pt(),C=n.useMemo(()=>{if(!i)return c;const P=i.toLowerCase();return c.filter(L=>{var x;return L.name.toLowerCase().includes(P)||((x=L.description)==null?void 0:x.toLowerCase().includes(P))||L.id.toLowerCase().includes(P)})},[c,i]),T=async P=>{const L=c.find(m=>m.id===P);if(!L)return;const x=t({id:"apiSettings.cliSettings.deleteConfirm"},{name:L.name});if(confirm(x))try{await I(P)}catch{s(t({id:"apiSettings.cliSettings.deleteError"}))}},b=async(P,L)=>{try{await D(P,L)}catch{s(t({id:"apiSettings.cliSettings.toggleError"}))}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-5 gap-4",children:[e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ms,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:d})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t({id:"apiSettings.cliSettings.stats.total"})})]}),e.jsxs(G,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(De,{className:"w-5 h-5 text-success"}),e.jsx("span",{className:"text-2xl font-bold",children:N})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t({id:"apiSettings.cliSettings.stats.enabled"})})]}),e.jsxs(G,{className:"p-4",children:[e.jsx("div",{className:"flex items-center gap-2",children:e.jsx("span",{className:"text-2xl font-bold",children:p.claude||0})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Claude"})]}),e.jsxs(G,{className:"p-4",children:[e.jsx("div",{className:"flex items-center gap-2",children:e.jsx("span",{className:"text-2xl font-bold",children:p.codex||0})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Codex"})]}),e.jsxs(G,{className:"p-4",children:[e.jsx("div",{className:"flex items-center gap-2",children:e.jsx("span",{className:"text-2xl font-bold",children:p.gemini||0})}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Gemini"})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(js,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(y,{placeholder:t({id:"apiSettings.cliSettings.searchPlaceholder"}),value:i,onChange:P=>o(P.target.value),className:"pl-9"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(f,{variant:"outline",onClick:()=>v(),disabled:u,children:t({id:"common.actions.refresh"})}),e.jsxs(f,{onClick:a,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),t({id:"apiSettings.cliSettings.actions.add"})]})]})]}),u?e.jsx("div",{className:"space-y-4",children:[1,2,3].map(P=>e.jsx("div",{className:"h-32 bg-muted animate-pulse rounded-lg"},P))}):C.length===0?e.jsxs(G,{className:"p-8 text-center",children:[e.jsx(ms,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:t({id:"apiSettings.cliSettings.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:t({id:"apiSettings.cliSettings.emptyState.message"})})]}):e.jsx("div",{className:"space-y-3",children:C.map(P=>e.jsx(Zt,{cliSettings:P,onEdit:()=>r(P.id),onDelete:()=>T(P.id),onToggleEnabled:L=>b(P.id,L),isDeleting:E,isToggling:M},P.id))})]})}function As(a,r="json"){const t=a.trim();if(!t)return{ok:!0,value:""};if(r==="json")try{return JSON.parse(t),{ok:!0,value:t}}catch{return{ok:!1,errorKey:"invalidJson"}}return{ok:!0,value:t}}function ea({open:a,onClose:r,cliSettings:t,defaultProvider:s}){const{formatMessage:i}=q(),{error:o}=ce(),c=!!t,{createCliSettings:d,isCreating:N}=kt(),{updateCliSettings:p,isUpdating:u}=It(),{providers:v}=Xe(),[I,E]=n.useState(""),[D,M]=n.useState(""),[C,T]=n.useState(!0),[b,P]=n.useState("claude"),[L,x]=n.useState("direct"),[m,F]=n.useState(""),[O,B]=n.useState(""),[w,S]=n.useState(""),[H,k]=n.useState(!1),[j,z]=n.useState(""),[ee,ne]=n.useState(""),[je,le]=n.useState(""),[Ce,A]=n.useState(""),[Q,W]=n.useState(!1),[te,de]=n.useState(""),[Ge,ke]=n.useState(""),[qe,Ie]=n.useState(!1),[we,Me]=n.useState(""),[Te,Ee]=n.useState(!1),[Le,ve]=n.useState(""),[Oe,Fe]=n.useState(!1),[oe,R]=n.useState(""),[se,re]=n.useState([]),[ae,me]=n.useState(""),[he,ze]=n.useState([]),[ls,es]=n.useState(""),[Qe,ds]=n.useState("{}"),[Ae,rs]=n.useState(!1),[Y,Be]=n.useState({}),[cs,We]=n.useState(!1);n.useEffect(()=>{if(t){E(t.name),M(t.description||""),T(t.enabled),P(t.provider||"claude"),R(t.settings.model||""),re(t.settings.availableModels||[]),ze(t.settings.tags||[]);const l=t.provider||"claude";if(l==="claude"){z(t.settings.settingsFile||"");const J=t.settings.env;if(!!(J.ANTHROPIC_BASE_URL&&!J.ANTHROPIC_BASE_URL.includes("api.anthropic.com")))x("direct"),S(J.ANTHROPIC_BASE_URL||""),B(J.ANTHROPIC_AUTH_TOKEN||"");else{x("provider-based");const pe=v.find(Ms=>Ms.apiBase===J.ANTHROPIC_BASE_URL);pe&&F(pe.id)}}else if(l==="codex"){const J=t.settings;ne(J.env.OPENAI_API_KEY||""),le(J.env.OPENAI_BASE_URL||""),A(J.profile||""),de(J.authJson||""),ke(J.configToml||"")}else l==="gemini"&&Me(t.settings.env.GEMINI_API_KEY||t.settings.env.GOOGLE_API_KEY||"")}else{const l=s||"claude";E(""),M(""),T(!0),P(l),x("direct"),F(""),R(""),z(""),B(""),S(""),ne(""),le(""),A(""),W(!1),de(""),ke(""),Ie(!1),Me(""),Ee(!1),ve(""),re([]),me(""),ze([]),es(""),ds("{}"),rs(!1),Be({})}},[t,a,v,s]);const g=()=>{const l={};if(I.trim()?(/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(I.trim())||(l.name=i({id:"apiSettings.cliSettings.nameFormatHint"})),I.trim().length>32&&(l.name=i({id:"apiSettings.cliSettings.nameTooLong"},{max:32}))):l.name=i({id:"apiSettings.validation.nameRequired"}),b==="claude"&&(L==="provider-based"&&!m&&(l.providerId=i({id:"apiSettings.cliSettings.validation.providerRequired"})),L==="direct"&&!O.trim()&&!w.trim()&&(l.direct=i({id:"apiSettings.cliSettings.validation.authOrBaseUrlRequired"}))),te.trim()){const J=As(te,"json");J.ok||(l.authJson=i({id:`apiSettings.cliSettings.${J.errorKey}`}))}if(Ae){const J=As(Qe,"json");J.ok||(l.configJson=i({id:`apiSettings.cliSettings.${J.errorKey}`}))}return Be(l),Object.keys(l).length===0},K=async()=>{We(!0);try{const l=await rt();l.success?(l.configToml&&ke(l.configToml),l.authJson&&de(l.authJson)):o(i({id:"apiSettings.cliSettings.loadConfigError"})||"Failed to load config")}catch{o(i({id:"apiSettings.cliSettings.loadConfigError"})||"Failed to load config")}finally{We(!1)}},_=async()=>{Fe(!0);try{const l=await ct();l.success?l.settingsJson&&ve(l.settingsJson):o(i({id:"apiSettings.cliSettings.loadConfigError"})||"Failed to load config")}catch{o(i({id:"apiSettings.cliSettings.loadConfigError"})||"Failed to load config")}finally{Fe(!1)}},U=async()=>{if(g())try{let l;if(b==="claude"){const $={DISABLE_AUTOUPDATER:"1"};if(L==="provider-based"){const pe=v.find(Ms=>Ms.id===m);pe!=null&&pe.apiBase&&($.ANTHROPIC_BASE_URL=pe.apiBase),pe!=null&&pe.apiKey&&($.ANTHROPIC_AUTH_TOKEN=pe.apiKey)}else O.trim()&&($.ANTHROPIC_AUTH_TOKEN=O.trim()),w.trim()&&($.ANTHROPIC_BASE_URL=w.trim());l={env:$,model:oe||void 0,settingsFile:j.trim()||void 0,availableModels:se,tags:he}}else if(b==="codex"){const $={};ee.trim()&&($.OPENAI_API_KEY=ee.trim()),je.trim()&&($.OPENAI_BASE_URL=je.trim()),l={env:$,model:oe||void 0,profile:Ce.trim()||void 0,authJson:te.trim()||void 0,configToml:Ge.trim()||void 0,availableModels:se,tags:he}}else{const $={};we.trim()&&($.GEMINI_API_KEY=we.trim()),l={env:$,model:oe||void 0,availableModels:se,tags:he}}if(Ae&&Qe.trim())try{const $=JSON.parse(Qe);$&&typeof $=="object"&&!Array.isArray($)&&Object.assign(l,$)}catch{}const J={id:t==null?void 0:t.id,name:I.trim(),description:D.trim()||void 0,provider:b,enabled:C,settings:l};c&&t?await p(t.id,J):await d(J),r()}catch{o(i({id:"apiSettings.cliSettings.saveError"}))}},Ye=()=>{const l=ae.trim();l&&!se.includes(l)&&(re([...se,l]),me(""))},st=l=>re(se.filter(J=>J!==l)),Is=()=>{const l=ls.trim();l&&!he.includes(l)&&(ze([...he,l]),es(""))},tt=l=>ze(he.filter(J=>J!==l)),at=["分析","Debug","implementation","refactoring","testing"],ss=v.find(l=>l.id===m),it={claude:"Claude",codex:"Codex",gemini:"Gemini"};return e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsxs(Je,{children:[i(c?{id:"apiSettings.cliSettings.actions.edit"}:{id:"apiSettings.cliSettings.actions.add"})," - ",it[b]]}),e.jsx(Ve,{children:i({id:"apiSettings.cliSettings.modalDescription"})})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-4",children:[!c&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{children:"CLI Provider"}),e.jsxs(fe,{value:b,onValueChange:l=>P(l),children:[e.jsx(Se,{children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"claude",children:"Claude"}),e.jsx(V,{value:"codex",children:"Codex"}),e.jsx(V,{value:"gemini",children:"Gemini"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"name",children:[i({id:"apiSettings.common.name"}),e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(y,{id:"name",value:I,onChange:l=>E(l.target.value),placeholder:i({id:"apiSettings.cliSettings.namePlaceholder"}),className:Y.name?"border-destructive":"",maxLength:32}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i({id:"apiSettings.cliSettings.nameFormatHint"})}),Y.name&&e.jsx("p",{className:"text-sm text-destructive",children:Y.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"description",children:i({id:"apiSettings.common.description"})}),e.jsx(Ke,{id:"description",value:D,onChange:l=>M(l.target.value),placeholder:i({id:"apiSettings.cliSettings.descriptionPlaceholder"}),rows:2})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"enabled",checked:C,onCheckedChange:T}),e.jsx(h,{htmlFor:"enabled",className:"cursor-pointer",children:i({id:"apiSettings.common.enableThis"})})]})]}),b==="claude"&&e.jsxs(e.Fragment,{children:[e.jsxs(lt,{value:L,onValueChange:l=>x(l),className:"w-full",children:[e.jsxs(dt,{className:"grid w-full grid-cols-2",children:[e.jsx(Es,{value:"provider-based",children:i({id:"apiSettings.cliSettings.providerBased"})}),e.jsx(Es,{value:"direct",children:i({id:"apiSettings.cliSettings.direct"})})]}),e.jsxs(Ls,{value:"provider-based",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(h,{htmlFor:"providerId",children:[i({id:"apiSettings.common.provider"}),e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs(fe,{value:m,onValueChange:F,children:[e.jsx(Se,{className:Y.providerId?"border-destructive":"",children:e.jsx(Ne,{placeholder:i({id:"apiSettings.cliSettings.selectProvider"})})}),e.jsx(ye,{children:v.map(l=>e.jsx(V,{value:l.id,children:l.name},l.id))})]}),Y.providerId&&e.jsx("p",{className:"text-sm text-destructive",children:Y.providerId})]}),ss&&e.jsxs("div",{className:"p-4 bg-muted/50 rounded-lg space-y-2",children:[e.jsx("p",{className:"text-sm font-medium",children:ss.name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[i({id:"apiSettings.common.type"}),": ",ss.type]}),ss.apiBase&&e.jsxs("p",{className:"text-xs text-muted-foreground truncate",children:[i({id:"apiSettings.providers.apiBaseUrl"}),": ",ss.apiBase]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"model-pb",children:i({id:"apiSettings.cliSettings.model"})}),e.jsx(y,{id:"model-pb",value:oe,onChange:l=>R(l.target.value),placeholder:""})]})]}),e.jsxs(Ls,{value:"direct",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"authToken",children:i({id:"apiSettings.cliSettings.authToken"})}),e.jsxs("div",{className:"relative",children:[e.jsx(y,{id:"authToken",type:H?"text":"password",value:O,onChange:l=>B(l.target.value),placeholder:"sk-ant-...",className:Y.direct?"border-destructive pr-10":"pr-10"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:()=>k(!H),children:H?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"baseUrl",children:i({id:"apiSettings.cliSettings.baseUrl"})}),e.jsx(y,{id:"baseUrl",value:w,onChange:l=>S(l.target.value),placeholder:"https://api.anthropic.com",className:Y.direct?"border-destructive":""})]}),Y.direct&&e.jsx("p",{className:"text-sm text-destructive",children:Y.direct}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"model-direct",children:i({id:"apiSettings.cliSettings.model"})}),e.jsx(y,{id:"model-direct",value:oe,onChange:l=>R(l.target.value),placeholder:""})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"settingsFile",children:i({id:"apiSettings.cliSettings.settingsFile"})}),e.jsx(y,{id:"settingsFile",value:j,onChange:l=>z(l.target.value),placeholder:i({id:"apiSettings.cliSettings.settingsFilePlaceholder"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i({id:"apiSettings.cliSettings.settingsFileHint"})})]})]}),b==="codex"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:"Load Global Config"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Load config.toml and auth.json from global Codex config directory"})]}),e.jsx(f,{type:"button",variant:"outline",size:"sm",onClick:K,disabled:cs,children:cs?e.jsxs(e.Fragment,{children:[e.jsx(be,{className:"w-4 h-4 mr-2 animate-spin"}),"Loading..."]}):e.jsxs(e.Fragment,{children:[e.jsx(ns,{className:"w-4 h-4 mr-2"}),"Load Config"]})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"codex-apikey",children:"API Key"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"只需要填这里,下方 auth.json 会自动填充"}),e.jsxs("div",{className:"relative",children:[e.jsx(y,{id:"codex-apikey",type:Q?"text":"password",value:ee,onChange:l=>ne(l.target.value),placeholder:"sk-...",className:"pr-10"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:()=>W(!Q),children:Q?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"codex-baseurl",children:"API 请求地址"}),e.jsx(y,{id:"codex-baseurl",value:je,onChange:l=>le(l.target.value),placeholder:"https://your-api-endpoint.com/v1"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"填写兼容 OpenAI Response 格式的服务端点地址"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"codex-model",children:i({id:"apiSettings.cliSettings.model"})}),e.jsx(y,{id:"codex-model",value:oe,onChange:l=>R(l.target.value),placeholder:""}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"指定使用的模型,将自动更新到 config.toml 中"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"codex-profile",children:"Profile"}),e.jsx(y,{id:"codex-profile",value:Ce,onChange:l=>A(l.target.value),placeholder:"default"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Codex profile 名称,通过 --profile 参数传递"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"codex-authjson",children:"auth.json (JSON) *"}),e.jsx(Ke,{id:"codex-authjson",value:te,onChange:l=>{de(l.target.value),Y.authJson&&Be(J=>{const $={...J};return delete $.authJson,$})},placeholder:'{"OPENAI_API_KEY": "..."}',className:`font-mono text-sm ${Y.authJson?"border-destructive":""}`,rows:8}),Y.authJson&&e.jsx("p",{className:"text-xs text-destructive",children:Y.authJson}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Codex auth.json 配置内容"}),e.jsx(f,{type:"button",variant:"ghost",size:"sm",onClick:()=>{try{const l=JSON.stringify(JSON.parse(te),null,2);de(l)}catch{}},children:"格式化"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{htmlFor:"codex-configtoml",children:"config.toml (TOML)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(X,{id:"writeCommon",checked:qe,onCheckedChange:Ie}),e.jsx(h,{htmlFor:"writeCommon",className:"text-xs cursor-pointer",children:"写入通用配置"})]})]}),e.jsx(Ke,{id:"codex-configtoml",value:Ge,onChange:l=>ke(l.target.value),placeholder:"",className:"font-mono text-sm",rows:6})]})]}),b==="gemini"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:"Load Global Config"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Load settings.json from global Gemini config directory"})]}),e.jsx(f,{type:"button",variant:"outline",size:"sm",onClick:_,disabled:Oe,children:Oe?e.jsxs(e.Fragment,{children:[e.jsx(be,{className:"w-4 h-4 mr-2 animate-spin"}),"Loading..."]}):e.jsxs(e.Fragment,{children:[e.jsx(ns,{className:"w-4 h-4 mr-2"}),"Load Config"]})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"gemini-apikey",children:"API Key"}),e.jsxs("div",{className:"relative",children:[e.jsx(y,{id:"gemini-apikey",type:Te?"text":"password",value:we,onChange:l=>Me(l.target.value),placeholder:"AIza...",className:"pr-10"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:()=>Ee(!Te),children:Te?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"gemini-model",children:i({id:"apiSettings.cliSettings.model"})}),e.jsx(y,{id:"gemini-model",value:oe,onChange:l=>R(l.target.value),placeholder:""})]}),Le&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{htmlFor:"gemini-settingsjson",children:"settings.json (Preview)"}),e.jsx(f,{type:"button",variant:"ghost",size:"sm",onClick:()=>{try{const l=JSON.stringify(JSON.parse(Le),null,2);ve(l)}catch{}},children:"Format"})]}),e.jsx(Ke,{id:"gemini-settingsjson",value:Le,onChange:l=>ve(l.target.value),placeholder:"{}",className:"font-mono text-sm",rows:8,readOnly:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Gemini settings.json content (read-only preview)"})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"availableModels",children:i({id:"apiSettings.cliSettings.availableModels"})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-3 bg-muted/30 rounded-lg min-h-[60px]",children:[se.map(l=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-primary/10 text-primary rounded-md text-sm",children:[l,e.jsx("button",{type:"button",onClick:()=>st(l),className:"hover:text-destructive transition-colors",children:"×"})]},l)),e.jsxs("div",{className:"flex gap-2 flex-1",children:[e.jsx(y,{id:"availableModels",value:ae,onChange:l=>me(l.target.value),onKeyDown:l=>{l.key==="Enter"&&(l.preventDefault(),Ye())},placeholder:i({id:"apiSettings.cliSettings.availableModelsPlaceholder"}),className:"flex-1 min-w-[120px]"}),e.jsx(f,{type:"button",size:"sm",onClick:Ye,variant:"outline",children:e.jsx(Pe,{className:"w-4 h-4"})})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i({id:"apiSettings.cliSettings.availableModelsHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"tags",children:i({id:"apiSettings.cliSettings.tags"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i({id:"apiSettings.cliSettings.tagsDescription"})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-3 bg-muted/30 rounded-lg min-h-[60px]",children:[he.map(l=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-primary/10 text-primary rounded-md text-sm",children:[l,e.jsx("button",{type:"button",onClick:()=>tt(l),className:"hover:text-destructive transition-colors","aria-label":i({id:"apiSettings.cliSettings.removeTag"}),children:e.jsx(zs,{className:"w-3 h-3"})})]},l)),e.jsxs("div",{className:"flex gap-2 flex-1",children:[e.jsx(y,{id:"tags",value:ls,onChange:l=>es(l.target.value),onKeyDown:l=>{l.key==="Enter"&&(l.preventDefault(),Is())},placeholder:i({id:"apiSettings.cliSettings.tagInputPlaceholder"}),className:"flex-1 min-w-[120px]"}),e.jsx(f,{type:"button",size:"sm",onClick:Is,variant:"outline",children:e.jsx(ie,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:[i({id:"apiSettings.cliSettings.predefinedTags"}),":"]}),at.map(l=>e.jsx("button",{type:"button",onClick:()=>{he.includes(l)||ze([...he,l])},disabled:he.includes(l),className:"text-xs px-2 py-0.5 rounded border border-border hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:l},l))]})]}),e.jsxs("div",{className:"space-y-2 pt-4 border-t border-border",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{htmlFor:"configJson",className:"cursor-pointer",children:i({id:"apiSettings.cliSettings.configJson"})}),e.jsx(f,{type:"button",variant:"ghost",size:"sm",onClick:()=>rs(!Ae),children:Ae?i({id:"common.actions.close"}):i({id:"common.actions.expand"},{value:"JSON"})})]}),Ae&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(Ke,{id:"configJson",value:Qe,onChange:l=>{ds(l.target.value),Y.configJson&&Be(J=>{const $={...J};return delete $.configJson,$})},placeholder:i({id:"apiSettings.cliSettings.configJsonPlaceholder"}),className:Y.configJson?"font-mono border-destructive":"font-mono",rows:8}),Y.configJson&&e.jsx("p",{className:"text-xs text-destructive",children:Y.configJson}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i({id:"apiSettings.cliSettings.configJsonHint"})})]})]})]})]}),e.jsxs($e,{children:[e.jsx(f,{variant:"outline",onClick:r,children:i({id:"common.actions.cancel"})}),e.jsx(f,{onClick:U,disabled:N||u,children:N||u?i({id:"common.actions.saving"}):e.jsxs(e.Fragment,{children:[e.jsx(Pe,{className:"w-4 h-4 mr-2"}),i({id:"common.actions.save"})]})})]})]})})}function sa({entry:a,showKey:r,onToggleShowKey:t,onUpdate:s,onRemove:i,index:o}){const{formatMessage:c}=q();return e.jsxs("div",{className:"grid grid-cols-12 gap-2 items-start p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"col-span-3",children:[e.jsx(h,{className:"text-xs",children:c({id:"apiSettings.providers.keyLabel"})}),e.jsx(y,{value:a.label||"",onChange:d=>s({label:d.target.value}),placeholder:`Key ${o+1}`,className:"mt-1"})]}),e.jsxs("div",{className:"col-span-4",children:[e.jsx(h,{className:"text-xs",children:c({id:"apiSettings.providers.keyValue"})}),e.jsxs("div",{className:"relative mt-1",children:[e.jsx(y,{type:r?"text":"password",value:a.key,onChange:d=>s({key:d.target.value}),placeholder:"sk-...",className:"pr-8"}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",className:"absolute right-0 top-0 h-full px-2",onClick:t,children:r?e.jsx(as,{className:"w-4 h-4"}):e.jsx(is,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx(h,{className:"text-xs",children:c({id:"apiSettings.providers.keyWeight"})}),e.jsx(y,{type:"number",min:"0",max:"100",value:a.weight??1,onChange:d=>s({weight:parseInt(d.target.value)||1}),className:"mt-1"})]}),e.jsxs("div",{className:"col-span-2 flex items-center gap-2 pt-5",children:[e.jsx(X,{checked:a.enabled,onCheckedChange:d=>s({enabled:d})}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.enabled?c({id:"apiSettings.common.enabled"}):c({id:"apiSettings.common.disabled"})})]}),e.jsx("div",{className:"col-span-1 flex items-center justify-end pt-5",children:e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:i,className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})})]})}function ta({open:a,onClose:r,providerId:t}){const{formatMessage:s}=q(),{success:i,error:o}=ce(),{providers:c}=Xe(),{updateProvider:d,isUpdating:N}=bs(),p=c.find(k=>k.id===t),[u,v]=n.useState([]),[I,E]=n.useState(new Set),[D,M]=n.useState("simple-shuffle"),[C,T]=n.useState(!1),[b,P]=n.useState(60),[L,x]=n.useState(300),[m,F]=n.useState(5);n.useEffect(()=>{p&&(!!(p.apiKeys&&p.apiKeys.length>0)&&p.apiKeys?v(p.apiKeys.map(j=>({id:j.id,key:j.key,label:j.label,weight:j.weight,enabled:j.enabled}))):p.apiKey?v([{id:"key-1",key:p.apiKey,label:"Key 1",weight:1,enabled:!0}]):v([]),M(p.routingStrategy||"simple-shuffle"),p.healthCheck&&(T(p.healthCheck.enabled),P(p.healthCheck.intervalSeconds),x(p.healthCheck.cooldownSeconds),F(p.healthCheck.failureThreshold)))},[p,a]);const O=()=>{const k={id:`key-${Date.now()}`,key:"",label:`Key ${u.length+1}`,weight:1,enabled:!0};v([...u,k])},B=(k,j)=>{v(u.map((z,ee)=>ee===k?{...z,...j}:z))},w=k=>{v(u.filter((j,z)=>z!==k))},S=k=>{E(j=>{const z=new Set(j);return z.has(k)?z.delete(k):z.add(k),z})},H=async()=>{if(p)try{await d(t,{apiKey:"",apiKeys:u.map(k=>({id:k.id,key:k.key,label:k.label,weight:k.weight,enabled:k.enabled})),routingStrategy:D,healthCheck:C?{enabled:!0,intervalSeconds:b,cooldownSeconds:L,failureThreshold:m}:void 0}),i(s({id:"apiSettings.providers.actions.save"})),r()}catch{o(s({id:"apiSettings.providers.saveError"}))}};return p?e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s({id:"apiSettings.providers.multiKeySettings"})}),e.jsxs(Ve,{children:[s({id:"apiSettings.providers.description"}),": ",p.name]})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.actions.multiKeySettings"})}),e.jsxs(f,{type:"button",size:"sm",onClick:O,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addKey"})]})]}),u.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:u.map((k,j)=>e.jsx(sa,{entry:k,showKey:I.has(j),onToggleShowKey:()=>S(j),onUpdate:z=>B(j,z),onRemove:()=>w(j),index:j},k.id))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"routingStrategy",children:s({id:"apiSettings.providers.routingStrategy"})}),e.jsxs(fe,{value:D,onValueChange:k=>M(k),children:[e.jsx(Se,{id:"routingStrategy",children:e.jsx(Ne,{})}),e.jsxs(ye,{children:[e.jsx(V,{value:"simple-shuffle",children:s({id:"apiSettings.providers.simpleShuffle"})}),e.jsx(V,{value:"weighted",children:s({id:"apiSettings.providers.weighted"})}),e.jsx(V,{value:"latency-based",children:s({id:"apiSettings.providers.latencyBased"})}),e.jsx(V,{value:"cost-based",children:s({id:"apiSettings.providers.costBased"})}),e.jsx(V,{value:"least-busy",children:s({id:"apiSettings.providers.leastBusy"})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:s({id:"apiSettings.providers.healthCheck"})}),e.jsx(X,{checked:C,onCheckedChange:T})]}),C&&e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"checkInterval",children:s({id:"apiSettings.providers.checkInterval"})}),e.jsx(y,{id:"checkInterval",type:"number",min:"10",value:b,onChange:k=>P(parseInt(k.target.value)||60)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"cooldownPeriod",children:s({id:"apiSettings.providers.cooldownPeriod"})}),e.jsx(y,{id:"cooldownPeriod",type:"number",min:"10",value:L,onChange:k=>x(parseInt(k.target.value)||300)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"failureThreshold",children:s({id:"apiSettings.providers.failureThreshold"})}),e.jsx(y,{id:"failureThreshold",type:"number",min:"1",value:m,onChange:k=>F(parseInt(k.target.value)||5)})]})]})]})]}),e.jsxs($e,{children:[e.jsx(f,{type:"button",variant:"outline",onClick:r,disabled:N,children:s({id:"apiSettings.common.cancel"})}),e.jsxs(f,{onClick:H,disabled:N||u.length===0,children:[N?e.jsx(ge,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(Pe,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.common.save"})]})]})]})}):null}function Ks({model:a,onRemove:r,onUpdate:t,index:s}){const{formatMessage:i}=q(),[o,c]=n.useState(!1);return e.jsx("div",{className:"border rounded-lg p-3 space-y-2",children:e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-2",children:[e.jsx(y,{value:a.name,onChange:d=>t("name",d.target.value),placeholder:i({id:"apiSettings.providers.modelId"}),className:"font-medium"}),e.jsx(y,{value:a.series||"",onChange:d=>t("series",d.target.value),placeholder:i({id:"apiSettings.providers.modelSeries"})})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(gs,{open:o,onOpenChange:c,children:[e.jsx(ps,{asChild:!0,children:e.jsx(f,{type:"button",variant:"ghost",size:"icon",children:o?e.jsx(hs,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})})}),e.jsxs(us,{className:"w-full",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2 mt-2 pt-2 border-t",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(h,{className:"text-xs",children:i({id:"apiSettings.providers.contextWindow"})}),e.jsx(y,{type:"number",value:a.contextWindow||"",onChange:d=>t("contextWindow",parseInt(d.target.value)||void 0),placeholder:"200000"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(h,{className:"text-xs",children:i({id:"apiSettings.providers.description"})}),e.jsx(y,{value:a.description||"",onChange:d=>t("description",d.target.value),placeholder:"Optional description"})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mt-2",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(X,{checked:a.streaming,onCheckedChange:d=>t("streaming",d),id:`streaming-${s}`}),e.jsx(h,{htmlFor:`streaming-${s}`,className:"text-xs cursor-pointer",children:i({id:"apiSettings.providers.streaming"})})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(X,{checked:a.functionCalling,onCheckedChange:d=>t("functionCalling",d),id:`fc-${s}`}),e.jsx(h,{htmlFor:`fc-${s}`,className:"text-xs cursor-pointer",children:i({id:"apiSettings.providers.functionCalling"})})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(X,{checked:a.vision,onCheckedChange:d=>t("vision",d),id:`vision-${s}`}),e.jsx(h,{htmlFor:`vision-${s}`,className:"text-xs cursor-pointer",children:i({id:"apiSettings.providers.vision"})})]})]})]})]}),e.jsx(f,{type:"button",variant:"ghost",size:"icon",onClick:r,className:"text-destructive",children:e.jsx(ue,{className:"w-4 h-4"})})]})]})})}function aa({open:a,onClose:r,providerId:t}){const{formatMessage:s}=q(),{success:i,error:o}=ce(),{providers:c}=Xe(),{updateProvider:d,isUpdating:N}=bs(),p=c.find(x=>x.id===t),[u,v]=n.useState([]),[I,E]=n.useState([]);n.useEffect(()=>{p&&(p.llmModels&&v(p.llmModels.map(x=>({id:x.id,name:x.name,series:x.series,description:x.description}))),p.embeddingModels&&E(p.embeddingModels.map(x=>({id:x.id,name:x.name,series:x.series,description:x.description}))))},[p,a]);const D=()=>{const x={id:`llm-${Date.now()}`,name:"",series:""};v([...u,x])},M=x=>{v(u.filter((m,F)=>F!==x))},C=(x,m,F)=>{v(u.map((O,B)=>B===x?{...O,[m]:F}:O))},T=()=>{const x={id:`emb-${Date.now()}`,name:"",series:""};E([...I,x])},b=x=>{E(I.filter((m,F)=>F!==x))},P=(x,m,F)=>{E(I.map((O,B)=>B===x?{...O,[m]:F}:O))},L=async()=>{if(p)try{const x=new Date().toISOString();await d(t,{llmModels:u.filter(m=>m.name.trim()).map(m=>({id:m.id,name:m.name,type:"llm",series:m.series||m.name.split("-")[0],enabled:!0,createdAt:x,updatedAt:x})),embeddingModels:I.filter(m=>m.name.trim()).map(m=>({id:m.id,name:m.name,type:"embedding",series:m.series||m.name.split("-")[0],enabled:!0,createdAt:x,updatedAt:x}))}),i(s({id:"apiSettings.providers.actions.save"})),r()}catch{o(s({id:"apiSettings.providers.saveError"}))}};return p?e.jsx(_e,{open:a,onOpenChange:r,children:e.jsxs(He,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ue,{children:[e.jsx(Je,{children:s({id:"apiSettings.providers.actions.manageModels"})}),e.jsxs(Ve,{children:[s({id:"apiSettings.providers.description"}),": ",p.name]})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.llmModels"})}),e.jsx(Z,{variant:"secondary",children:u.length})]}),e.jsxs(f,{type:"button",size:"sm",onClick:D,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addLlmModel"})]})]}),u.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:u.map((x,m)=>e.jsx(Ks,{model:x,onRemove:()=>M(m),onUpdate:(F,O)=>C(m,F,O),index:m},x.id))})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s({id:"apiSettings.providers.embeddingModels"})}),e.jsx(Z,{variant:"secondary",children:I.length})]}),e.jsxs(f,{type:"button",size:"sm",onClick:T,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.providers.addEmbeddingModel"})]})]}),I.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s({id:"apiSettings.providers.noModels"})}):e.jsx("div",{className:"space-y-2",children:I.map((x,m)=>e.jsx(Ks,{model:x,onRemove:()=>b(m),onUpdate:(F,O)=>P(m,F,O),index:m},x.id))})]})]}),e.jsxs($e,{children:[e.jsx(f,{type:"button",variant:"outline",onClick:r,disabled:N,children:s({id:"apiSettings.common.cancel"})}),e.jsxs(f,{onClick:L,disabled:N,children:[N?e.jsx(ge,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(Pe,{className:"w-4 h-4 mr-2"}),s({id:"apiSettings.common.save"})]})]})]})}):null}const ts=[{progress:10,messageId:"apiSettings.ccwLitellm.install.stage.checkingVenv"},{progress:25,messageId:"apiSettings.ccwLitellm.install.stage.detectingPackage"},{progress:45,messageId:"apiSettings.ccwLitellm.install.stage.installingDeps"},{progress:65,messageId:"apiSettings.ccwLitellm.install.stage.installingPackage"},{progress:85,messageId:"apiSettings.ccwLitellm.install.stage.verifying"}],ia=2e3,na=[{labelId:"apiSettings.ccwLitellm.install.codexlensVenv",descId:"apiSettings.ccwLitellm.install.codexlensVenvDesc"},{labelId:"apiSettings.ccwLitellm.install.litellmPackage",descId:"apiSettings.ccwLitellm.install.litellmPackageDesc"},{labelId:"apiSettings.ccwLitellm.install.embeddingSupport",descId:"apiSettings.ccwLitellm.install.embeddingSupportDesc"}];function la({open:a,onOpenChange:r,onInstall:t,onSuccess:s}){const{formatMessage:i}=q(),[o,c]=n.useState(!1),[d,N]=n.useState(0),[p,u]=n.useState(""),[v,I]=n.useState(!1),[E,D]=n.useState(""),M=n.useRef(null),C=n.useCallback(()=>{M.current&&(clearInterval(M.current),M.current=null)},[]);n.useEffect(()=>{a||(c(!1),N(0),u(""),I(!1),D(""),C())},[a,C]),n.useEffect(()=>()=>C(),[C]);const T=async()=>{c(!0),N(0),I(!1),D("");let b=0;u(i({id:ts[0].messageId})),N(ts[0].progress),b=1,M.current=setInterval(()=>{b<ts.length&&(u(i({id:ts[b].messageId})),N(ts[b].progress),b++)},ia);try{const P=await t();C(),P.success?(N(100),u(i({id:"apiSettings.ccwLitellm.install.stage.complete"})),I(!0),setTimeout(()=>{r(!1),s==null||s()},1200)):(c(!1),N(0),u(""),D(i({id:"apiSettings.ccwLitellm.messages.installFailed"})))}catch{C(),c(!1),N(0),u(""),D(i({id:"apiSettings.ccwLitellm.messages.installFailed"}))}};return e.jsx(_e,{open:a,onOpenChange:o?void 0:r,children:e.jsxs(He,{className:"max-w-lg",onPointerDownOutside:o?b=>b.preventDefault():void 0,children:[e.jsxs(Ue,{children:[e.jsxs(Je,{className:"flex items-center gap-2",children:[e.jsx(ns,{className:"w-5 h-5 text-primary"}),i({id:"apiSettings.ccwLitellm.install.title"})]}),e.jsx(Ve,{children:i({id:"apiSettings.ccwLitellm.install.description"})})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2",children:i({id:"apiSettings.ccwLitellm.install.checklist"})}),e.jsx("ul",{className:"space-y-2",children:na.map(b=>e.jsxs("li",{className:"flex items-start gap-2 text-sm",children:[e.jsx(Pe,{className:"w-4 h-4 text-green-500 mt-0.5 flex-shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:i({id:b.labelId})})," - ",i({id:b.descId})]})]},b.labelId))})]}),e.jsx(G,{className:"bg-primary/5 border-primary/20",children:e.jsxs(Bs,{className:"p-3 flex items-start gap-2",children:[e.jsx(Os,{className:"w-4 h-4 text-primary mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium text-foreground",children:i({id:"apiSettings.ccwLitellm.install.location"})}),e.jsx("p",{className:"mt-1",children:e.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-xs",children:i({id:"apiSettings.ccwLitellm.install.locationPath"})})}),e.jsx("p",{className:"mt-1",children:i({id:"apiSettings.ccwLitellm.install.timeEstimate"})})]})]})}),o&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[v?e.jsx(Pe,{className:"w-5 h-5 text-green-500"}):e.jsx(be,{className:"w-5 h-5 text-primary animate-spin"}),e.jsx("span",{className:"text-sm",children:p})]}),e.jsx(Ds,{value:d,className:"h-2"})]}),E&&!o&&e.jsx("p",{className:"text-sm text-destructive",children:E})]}),e.jsxs($e,{children:[e.jsx(f,{variant:"outline",onClick:()=>r(!1),disabled:o,children:i({id:"apiSettings.common.cancel"})}),e.jsx(f,{onClick:T,disabled:o,children:o?e.jsxs(e.Fragment,{children:[e.jsx(be,{className:"w-4 h-4 mr-2 animate-spin"}),i({id:"apiSettings.ccwLitellm.install.installing"})]}):e.jsxs(e.Fragment,{children:[e.jsx(ns,{className:"w-4 h-4 mr-2"}),i({id:"apiSettings.ccwLitellm.install.installNow"})]})})]})]})})}function da(){var F,O;const{formatMessage:a}=q(),{success:r,error:t}=ce(),[s,i]=n.useState(!1),[o,c]=n.useState(!1),{data:d,isLoading:N,refetch:p}=Tt({refresh:s}),{install:u,isInstalling:v}=Et(),{uninstall:I,isUninstalling:E}=Lt(),D=v||E,M=async()=>{try{return await u(),r(a({id:"apiSettings.ccwLitellm.messages.installSuccess"})),{success:!0}}catch{return t(a({id:"apiSettings.ccwLitellm.messages.installFailed"})),{success:!1}}},C=()=>{i(!0),p()},T=async()=>{try{await I(),r(a({id:"apiSettings.ccwLitellm.messages.uninstallSuccess"})),i(!0),p()}catch{t(a({id:"apiSettings.ccwLitellm.messages.uninstallFailed"}))}},b=()=>{i(!0),p()},P=(d==null?void 0:d.installed)??!1,L=d==null?void 0:d.version,x=((O=(F=d==null?void 0:d.checks)==null?void 0:F.systemPython)==null?void 0:O.installed)===!0,m=!N&&!P&&x;return e.jsxs(e.Fragment,{children:[e.jsx(G,{children:e.jsx(Bs,{className:"p-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Ot,{className:"w-5 h-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium",children:a({id:"apiSettings.ccwLitellm.title"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a({id:"apiSettings.ccwLitellm.description"})}),m&&e.jsxs("div",{className:"mt-1 flex items-start gap-2 text-xs text-warning-foreground/80",children:[e.jsx(ot,{className:"w-4 h-4 text-warning flex-shrink-0 mt-0.5"}),e.jsx("p",{children:a({id:"apiSettings.ccwLitellm.systemPythonMismatch"})})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[N?e.jsxs(Z,{variant:"secondary",className:"gap-1",children:[e.jsx(be,{className:"w-3 h-3 animate-spin"}),"..."]}):P?e.jsxs(Z,{variant:"default",className:"gap-1",children:[e.jsx(De,{className:"w-3 h-3"}),a({id:"apiSettings.ccwLitellm.status.installed"}),L&&` v${L}`]}):e.jsxs(Z,{variant:"destructive",className:"gap-1",children:[e.jsx(vs,{className:"w-3 h-3"}),a({id:"apiSettings.ccwLitellm.status.notInstalled"})]}),e.jsx(f,{variant:"ghost",size:"sm",onClick:b,disabled:D||N,"aria-label":a({id:"apiSettings.ccwLitellm.actions.refreshStatus"}),children:e.jsx(Rs,{className:`w-4 h-4 ${N?"animate-spin":""}`})}),P?e.jsxs(f,{variant:"outline",size:"sm",onClick:T,disabled:D,children:[E?e.jsx(be,{className:"w-4 h-4 mr-1 animate-spin"}):e.jsx(ue,{className:"w-4 h-4 mr-1"}),a({id:"apiSettings.ccwLitellm.actions.uninstall"})]}):e.jsxs(f,{variant:"default",size:"sm",onClick:()=>c(!0),disabled:D,children:[v?e.jsx(be,{className:"w-4 h-4 mr-1 animate-spin"}):e.jsx(ns,{className:"w-4 h-4 mr-1"}),a({id:"apiSettings.ccwLitellm.actions.install"})]})]})]})})}),e.jsx(la,{open:o,onOpenChange:c,onInstall:M,onSuccess:C})]})}function wa(){const{formatMessage:a}=q(),{success:r,error:t}=ce(),[s,i]=n.useState("providers"),o=Ft(),{providers:c}=Xe(),{endpoints:d}=_s(),{pools:N}=Us(),{cliSettings:p}=Vs(),[u,v]=n.useState(!1),[I,E]=n.useState(null),[D,M]=n.useState(!1),[C,T]=n.useState(null),[b,P]=n.useState(!1),[L,x]=n.useState(null),[m,F]=n.useState(!1),[O,B]=n.useState(null),[w,S]=n.useState(!1),[H,k]=n.useState(null),[j,z]=n.useState(!1),[ee,ne]=n.useState(null),je=n.useMemo(()=>c.find(R=>R.id===I)||null,[c,I]),le=n.useMemo(()=>d.find(R=>R.id===C)||null,[d,C]),Ce=n.useMemo(()=>N.find(R=>R.id===L)||null,[N,L]),A=n.useMemo(()=>p.find(R=>R.id===O)||null,[p,O]),Q=()=>{E(null),v(!0)},W=R=>{E(R),v(!0)},te=()=>{v(!1),E(null)},de=()=>{T(null),M(!0)},Ge=R=>{T(R),M(!0)},ke=()=>{M(!1),T(null)},qe=()=>{x(null),P(!0)},Ie=R=>{x(R),P(!0)},we=()=>{P(!1),x(null)},Me=()=>{B(null),F(!0)},Te=R=>{B(R),F(!0)},Ee=()=>{F(!1),B(null)},Le=R=>{k(R),S(!0)},ve=()=>{S(!1),k(null)},Oe=R=>{ne(R),z(!0)},Fe=()=>{z(!1),ne(null)},oe=async R=>{var re;const se=((re=c.find(ae=>ae.id===R))==null?void 0:re.name)??R;try{const ae=await o.mutateAsync(),me=[se,ae.yamlPath??ae.message].filter(Boolean);r(a({id:"apiSettings.messages.configSynced"}),me.length>0?me.join(`
4
4
  `):void 0)}catch{t(a({id:"apiSettings.providers.saveError"}))}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold text-foreground flex items-center gap-2",children:[e.jsx(mt,{className:"w-6 h-6 text-primary"}),a({id:"apiSettings.title"})]}),e.jsx("p",{className:"text-muted-foreground mt-1",children:a({id:"apiSettings.description"})})]}),e.jsxs(f,{variant:"outline",onClick:()=>window.location.reload(),children:[e.jsx(Rs,{className:"w-4 h-4 mr-2"}),a({id:"common.actions.refresh"})]})]}),e.jsx(da,{}),e.jsx(ht,{value:s,onValueChange:R=>i(R),tabs:[{value:"providers",label:a({id:"apiSettings.tabs.providers"})},{value:"endpoints",label:a({id:"apiSettings.tabs.endpoints"})},{value:"cache",label:a({id:"apiSettings.tabs.cache"})},{value:"modelPools",label:a({id:"apiSettings.tabs.modelPools"})},{value:"cliSettings",label:a({id:"apiSettings.tabs.cliSettings"})}]}),s==="providers"&&e.jsx("div",{className:"mt-4",children:e.jsx(Bt,{onAddProvider:Q,onEditProvider:W,onMultiKeySettings:Le,onSyncToCodexLens:oe,onManageModels:Oe})}),s==="endpoints"&&e.jsx("div",{className:"mt-4",children:e.jsx(Ut,{onAddEndpoint:de,onEditEndpoint:Ge})}),s==="cache"&&e.jsx("div",{className:"mt-4",children:e.jsx(Gt,{})}),s==="modelPools"&&e.jsx("div",{className:"mt-4",children:e.jsx(Qt,{onAddPool:qe,onEditPool:Ie})}),s==="cliSettings"&&e.jsx("div",{className:"mt-4",children:e.jsx(Xt,{onAddCliSettings:Me,onEditCliSettings:Te})}),e.jsx(_t,{open:u,onClose:te,provider:je}),e.jsx(Vt,{open:D,onClose:ke,endpoint:le}),e.jsx(Yt,{open:b,onClose:we,pool:Ce}),e.jsx(ea,{open:m,onClose:Ee,cliSettings:A}),e.jsx(ta,{open:w,onClose:ve,providerId:H||""}),e.jsx(aa,{open:j,onClose:Fe,providerId:ee||""})]})}export{wa as ApiSettingsPage,wa as default};
5
- //# sourceMappingURL=ApiSettingsPage-CU9hesAE.js.map
5
+ //# sourceMappingURL=ApiSettingsPage-D69j8mI6.js.map