agim-cli 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +39 -3
  3. package/README.zh-CN.md +42 -7
  4. package/dist/cli-ui/cmd-handlers.d.ts +22 -1
  5. package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
  6. package/dist/cli-ui/cmd-handlers.js +304 -40
  7. package/dist/cli-ui/cmd-handlers.js.map +1 -1
  8. package/dist/cli-ui/config-wizard.d.ts +13 -1
  9. package/dist/cli-ui/config-wizard.d.ts.map +1 -1
  10. package/dist/cli-ui/config-wizard.js +93 -21
  11. package/dist/cli-ui/config-wizard.js.map +1 -1
  12. package/dist/cli-ui/doctor.d.ts +15 -0
  13. package/dist/cli-ui/doctor.d.ts.map +1 -0
  14. package/dist/cli-ui/doctor.js +151 -0
  15. package/dist/cli-ui/doctor.js.map +1 -0
  16. package/dist/cli-ui/entry-menu.d.ts +6 -0
  17. package/dist/cli-ui/entry-menu.d.ts.map +1 -1
  18. package/dist/cli-ui/entry-menu.js +67 -30
  19. package/dist/cli-ui/entry-menu.js.map +1 -1
  20. package/dist/cli-ui/i18n.d.ts +15 -6
  21. package/dist/cli-ui/i18n.d.ts.map +1 -1
  22. package/dist/cli-ui/i18n.js +30 -12
  23. package/dist/cli-ui/i18n.js.map +1 -1
  24. package/dist/cli-ui/quickstart.d.ts +3 -0
  25. package/dist/cli-ui/quickstart.d.ts.map +1 -0
  26. package/dist/cli-ui/quickstart.js +108 -0
  27. package/dist/cli-ui/quickstart.js.map +1 -0
  28. package/dist/cli-ui/readiness.d.ts +10 -0
  29. package/dist/cli-ui/readiness.d.ts.map +1 -0
  30. package/dist/cli-ui/readiness.js +75 -0
  31. package/dist/cli-ui/readiness.js.map +1 -0
  32. package/dist/cli-ui/service.d.ts +23 -0
  33. package/dist/cli-ui/service.d.ts.map +1 -1
  34. package/dist/cli-ui/service.js +114 -5
  35. package/dist/cli-ui/service.js.map +1 -1
  36. package/dist/cli.js +99 -396
  37. package/dist/cli.js.map +1 -1
  38. package/dist/core/acp-server.d.ts.map +1 -1
  39. package/dist/core/acp-server.js +16 -2
  40. package/dist/core/acp-server.js.map +1 -1
  41. package/dist/core/agent-cwd.d.ts +8 -0
  42. package/dist/core/agent-cwd.d.ts.map +1 -1
  43. package/dist/core/agent-cwd.js +57 -7
  44. package/dist/core/agent-cwd.js.map +1 -1
  45. package/dist/core/commands/builtin.d.ts.map +1 -1
  46. package/dist/core/commands/builtin.js +12 -2
  47. package/dist/core/commands/builtin.js.map +1 -1
  48. package/dist/core/commands/model.d.ts.map +1 -1
  49. package/dist/core/commands/model.js +31 -2
  50. package/dist/core/commands/model.js.map +1 -1
  51. package/dist/core/llm/anthropic-provider.js +2 -1
  52. package/dist/core/llm/anthropic-provider.js.map +1 -1
  53. package/dist/core/llm/openai-compat-provider.js +3 -2
  54. package/dist/core/llm/openai-compat-provider.js.map +1 -1
  55. package/dist/core/llm/provider-base.d.ts +4 -4
  56. package/dist/core/llm/provider-base.d.ts.map +1 -1
  57. package/dist/core/llm/provider-base.js +1 -1
  58. package/dist/core/llm/provider-base.js.map +1 -1
  59. package/dist/plugins/agents/native/index.d.ts +1 -0
  60. package/dist/plugins/agents/native/index.d.ts.map +1 -1
  61. package/dist/plugins/agents/native/index.js +14 -0
  62. package/dist/plugins/agents/native/index.js.map +1 -1
  63. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  64. package/dist/plugins/agents/pi-native/factory.js +19 -3
  65. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  66. package/dist/plugins/agents/pi-native/index.d.ts +11 -0
  67. package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
  68. package/dist/plugins/agents/pi-native/index.js +56 -2
  69. package/dist/plugins/agents/pi-native/index.js.map +1 -1
  70. package/dist/plugins/agents/pi-native/provider-resolver.d.ts +2 -0
  71. package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
  72. package/dist/plugins/agents/pi-native/provider-resolver.js +9 -1
  73. package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
  74. package/dist/web/public/assets/a2a-CTsDMefo.js +7 -0
  75. package/dist/web/public/assets/a2a-CTsDMefo.js.map +1 -0
  76. package/dist/web/public/assets/{activity-BAgb2WZC.js → activity-ul8Os7Pz.js} +2 -2
  77. package/dist/web/public/assets/{activity-BAgb2WZC.js.map → activity-ul8Os7Pz.js.map} +1 -1
  78. package/dist/web/public/assets/{admins-CZYANmhn.js → admins-ByMAuquy.js} +3 -3
  79. package/dist/web/public/assets/{admins-CZYANmhn.js.map → admins-ByMAuquy.js.map} +1 -1
  80. package/dist/web/public/assets/agents-Ds1zyxBj.js +2 -0
  81. package/dist/web/public/assets/{agents-BXThDW6f.js.map → agents-Ds1zyxBj.js.map} +1 -1
  82. package/dist/web/public/assets/{approvals-ByPXIYVl.js → approvals-DOWlWI7Z.js} +3 -3
  83. package/dist/web/public/assets/{approvals-ByPXIYVl.js.map → approvals-DOWlWI7Z.js.map} +1 -1
  84. package/dist/web/public/assets/{arrow-down-B8DkdbEY.js → arrow-down-7i0xwCI2.js} +2 -2
  85. package/dist/web/public/assets/{arrow-down-B8DkdbEY.js.map → arrow-down-7i0xwCI2.js.map} +1 -1
  86. package/dist/web/public/assets/arrow-right-A889Wof8.js +7 -0
  87. package/dist/web/public/assets/arrow-right-A889Wof8.js.map +1 -0
  88. package/dist/web/public/assets/{arrow-up-i_dEdXkz.js → arrow-up-Dm0U4-6U.js} +2 -2
  89. package/dist/web/public/assets/{arrow-up-i_dEdXkz.js.map → arrow-up-Dm0U4-6U.js.map} +1 -1
  90. package/dist/web/public/assets/{asks-yD_inOnM.js → asks-DGuBsrJ7.js} +3 -3
  91. package/dist/web/public/assets/{asks-yD_inOnM.js.map → asks-DGuBsrJ7.js.map} +1 -1
  92. package/dist/web/public/assets/{audit-teCIRtgN.js → audit-BRXsplJ2.js} +2 -2
  93. package/dist/web/public/assets/{audit-teCIRtgN.js.map → audit-BRXsplJ2.js.map} +1 -1
  94. package/dist/web/public/assets/{bell-CeWDMs8_.js → bell-B-UdeJsp.js} +2 -2
  95. package/dist/web/public/assets/{bell-CeWDMs8_.js.map → bell-B-UdeJsp.js.map} +1 -1
  96. package/dist/web/public/assets/bgjobs-CcRiffyJ.js +2 -0
  97. package/dist/web/public/assets/bgjobs-CcRiffyJ.js.map +1 -0
  98. package/dist/web/public/assets/book-open-CSCq5cjL.js +7 -0
  99. package/dist/web/public/assets/book-open-CSCq5cjL.js.map +1 -0
  100. package/dist/web/public/assets/{brain-BQqv0Zhc.js → brain-Dl4DF5kX.js} +2 -2
  101. package/dist/web/public/assets/{brain-BQqv0Zhc.js.map → brain-Dl4DF5kX.js.map} +1 -1
  102. package/dist/web/public/assets/{briefcase-DUXbR4xs.js → briefcase-CeKUkFSq.js} +2 -2
  103. package/dist/web/public/assets/{briefcase-DUXbR4xs.js.map → briefcase-CeKUkFSq.js.map} +1 -1
  104. package/dist/web/public/assets/chat-rLJMdJBk.js +12 -0
  105. package/dist/web/public/assets/chat-rLJMdJBk.js.map +1 -0
  106. package/dist/web/public/assets/{chevron-left-RC6mMSiX.js → chevron-left-01fAFVpo.js} +2 -2
  107. package/dist/web/public/assets/{chevron-left-RC6mMSiX.js.map → chevron-left-01fAFVpo.js.map} +1 -1
  108. package/dist/web/public/assets/{chevron-right-DrkYVi19.js → chevron-right-CFRb-SM_.js} +3 -3
  109. package/dist/web/public/assets/{chevron-right-DrkYVi19.js.map → chevron-right-CFRb-SM_.js.map} +1 -1
  110. package/dist/web/public/assets/{circle-check-big-BC8ntMsz.js → circle-check-big-DBg2BD6o.js} +2 -2
  111. package/dist/web/public/assets/{circle-check-big-BC8ntMsz.js.map → circle-check-big-DBg2BD6o.js.map} +1 -1
  112. package/dist/web/public/assets/{circle-x-DHK7ypFY.js → circle-x-CqFMzO-x.js} +2 -2
  113. package/dist/web/public/assets/{circle-x-DHK7ypFY.js.map → circle-x-CqFMzO-x.js.map} +1 -1
  114. package/dist/web/public/assets/clipboard-list-lnqdk2_J.js +7 -0
  115. package/dist/web/public/assets/clipboard-list-lnqdk2_J.js.map +1 -0
  116. package/dist/web/public/assets/{clock-DXHhWqJH.js → clock-4hd1joQe.js} +3 -3
  117. package/dist/web/public/assets/{clock-DXHhWqJH.js.map → clock-4hd1joQe.js.map} +1 -1
  118. package/dist/web/public/assets/confirm-dialog-BDb0NLny.js +2 -0
  119. package/dist/web/public/assets/{confirm-dialog-gPKJnvEW.js.map → confirm-dialog-BDb0NLny.js.map} +1 -1
  120. package/dist/web/public/assets/{copy-DtQxgcR0.js → copy-CD4A7VD8.js} +3 -3
  121. package/dist/web/public/assets/{copy-DtQxgcR0.js.map → copy-CD4A7VD8.js.map} +1 -1
  122. package/dist/web/public/assets/dashboard-CG3WiG7h.js +2 -0
  123. package/dist/web/public/assets/dashboard-CG3WiG7h.js.map +1 -0
  124. package/dist/web/public/assets/{data-table-DOKUic1J.js → data-table-BkUshOZz.js} +2 -2
  125. package/dist/web/public/assets/{data-table-DOKUic1J.js.map → data-table-BkUshOZz.js.map} +1 -1
  126. package/dist/web/public/assets/database-lQzk64rV.js +7 -0
  127. package/dist/web/public/assets/database-lQzk64rV.js.map +1 -0
  128. package/dist/web/public/assets/{distill-p6P7-1UR.js → distill-CPurVW3v.js} +3 -3
  129. package/dist/web/public/assets/{distill-p6P7-1UR.js.map → distill-CPurVW3v.js.map} +1 -1
  130. package/dist/web/public/assets/{download-CqNiIHa8.js → download-CVZnHcwj.js} +2 -2
  131. package/dist/web/public/assets/{download-CqNiIHa8.js.map → download-CVZnHcwj.js.map} +1 -1
  132. package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js +7 -0
  133. package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js.map +1 -0
  134. package/dist/web/public/assets/{email-DwbfTUlV.js → email-YlI4MWLp.js} +3 -3
  135. package/dist/web/public/assets/{email-DwbfTUlV.js.map → email-YlI4MWLp.js.map} +1 -1
  136. package/dist/web/public/assets/{empty-state-CTwOQemt.js → empty-state-CuiqdZiB.js} +2 -2
  137. package/dist/web/public/assets/{empty-state-CTwOQemt.js.map → empty-state-CuiqdZiB.js.map} +1 -1
  138. package/dist/web/public/assets/{external-link-BY7Ye8yi.js → external-link-1WPpVvdu.js} +2 -2
  139. package/dist/web/public/assets/{external-link-BY7Ye8yi.js.map → external-link-1WPpVvdu.js.map} +1 -1
  140. package/dist/web/public/assets/{eye-6RUADoDS.js → eye-BfPyNFzk.js} +2 -2
  141. package/dist/web/public/assets/{eye-6RUADoDS.js.map → eye-BfPyNFzk.js.map} +1 -1
  142. package/dist/web/public/assets/{facts-DXE0aJmb.js → facts-xT_24pH8.js} +2 -2
  143. package/dist/web/public/assets/{facts-DXE0aJmb.js.map → facts-xT_24pH8.js.map} +1 -1
  144. package/dist/web/public/assets/file-text-BxfdLM0-.js +7 -0
  145. package/dist/web/public/assets/file-text-BxfdLM0-.js.map +1 -0
  146. package/dist/web/public/assets/{goals-C1LCm3qL.js → goals-C8ZQfbhj.js} +3 -3
  147. package/dist/web/public/assets/{goals-C1LCm3qL.js.map → goals-C8ZQfbhj.js.map} +1 -1
  148. package/dist/web/public/assets/health-A2StNEfn.js +2 -0
  149. package/dist/web/public/assets/{health-wqCp-K_o.js.map → health-A2StNEfn.js.map} +1 -1
  150. package/dist/web/public/assets/{heart-pulse-DfqI4GF7.js → heart-pulse-DXlE9oic.js} +2 -2
  151. package/dist/web/public/assets/{heart-pulse-DfqI4GF7.js.map → heart-pulse-DXlE9oic.js.map} +1 -1
  152. package/dist/web/public/assets/{heartbeat-Bumv4XtQ.js → heartbeat-ClO5gJrj.js} +3 -3
  153. package/dist/web/public/assets/{heartbeat-Bumv4XtQ.js.map → heartbeat-ClO5gJrj.js.map} +1 -1
  154. package/dist/web/public/assets/hot-bfTA-V_z.js +7 -0
  155. package/dist/web/public/assets/{hot-B-CMjQIr.js.map → hot-bfTA-V_z.js.map} +1 -1
  156. package/dist/web/public/assets/index-Bi2qWb-u.css +1 -0
  157. package/dist/web/public/assets/index-DCfdN5R7.js +244 -0
  158. package/dist/web/public/assets/index-DCfdN5R7.js.map +1 -0
  159. package/dist/web/public/assets/{injection-Dn_XqgLG.js → injection-omvCR6-p.js} +2 -2
  160. package/dist/web/public/assets/{injection-Dn_XqgLG.js.map → injection-omvCR6-p.js.map} +1 -1
  161. package/dist/web/public/assets/{installed-Cet-1M2Q.js → installed-DL6r3ktm.js} +4 -9
  162. package/dist/web/public/assets/installed-DL6r3ktm.js.map +1 -0
  163. package/dist/web/public/assets/jobs-Biy5lYd4.js +2 -0
  164. package/dist/web/public/assets/jobs-Biy5lYd4.js.map +1 -0
  165. package/dist/web/public/assets/layout-BLm6NJ3V.js +2 -0
  166. package/dist/web/public/assets/layout-BLm6NJ3V.js.map +1 -0
  167. package/dist/web/public/assets/layout-BTKafRVZ.js +2 -0
  168. package/dist/web/public/assets/layout-BTKafRVZ.js.map +1 -0
  169. package/dist/web/public/assets/layout-Bm-2s2fp.js +2 -0
  170. package/dist/web/public/assets/layout-Bm-2s2fp.js.map +1 -0
  171. package/dist/web/public/assets/layout-DsZ8eR4i.js +2 -0
  172. package/dist/web/public/assets/layout-DsZ8eR4i.js.map +1 -0
  173. package/dist/web/public/assets/{layout-D_3ZcVG7.js → layout-sxvovjEH.js} +2 -2
  174. package/dist/web/public/assets/{layout-D_3ZcVG7.js.map → layout-sxvovjEH.js.map} +1 -1
  175. package/dist/web/public/assets/llm-JjZDbBvJ.js +37 -0
  176. package/dist/web/public/assets/llm-JjZDbBvJ.js.map +1 -0
  177. package/dist/web/public/assets/loader-circle-DDdmcH0k.js +7 -0
  178. package/dist/web/public/assets/{loader-circle-DgdBWYl0.js.map → loader-circle-DDdmcH0k.js.map} +1 -1
  179. package/dist/web/public/assets/{map-pin-3QS1A0-I.js → map-pin-C_jAxukI.js} +2 -2
  180. package/dist/web/public/assets/{map-pin-3QS1A0-I.js.map → map-pin-C_jAxukI.js.map} +1 -1
  181. package/dist/web/public/assets/{mcp-DwKZULET.js → mcp-vKajK1F8.js} +3 -3
  182. package/dist/web/public/assets/{mcp-DwKZULET.js.map → mcp-vKajK1F8.js.map} +1 -1
  183. package/dist/web/public/assets/memos-DAt4k3DO.js +7 -0
  184. package/dist/web/public/assets/memos-DAt4k3DO.js.map +1 -0
  185. package/dist/web/public/assets/messengers-GYVTFlAj.js +2 -0
  186. package/dist/web/public/assets/messengers-GYVTFlAj.js.map +1 -0
  187. package/dist/web/public/assets/{mobile-Bq0FH9JV.js → mobile-VUyTo40E.js} +3 -3
  188. package/dist/web/public/assets/{mobile-Bq0FH9JV.js.map → mobile-VUyTo40E.js.map} +1 -1
  189. package/dist/web/public/assets/{network--s113Jkm.js → network-BUeWK3bs.js} +2 -2
  190. package/dist/web/public/assets/{network--s113Jkm.js.map → network-BUeWK3bs.js.map} +1 -1
  191. package/dist/web/public/assets/outbox-CEE0rwN3.js +2 -0
  192. package/dist/web/public/assets/outbox-CEE0rwN3.js.map +1 -0
  193. package/dist/web/public/assets/overview-BSOZ5gTD.js +12 -0
  194. package/dist/web/public/assets/overview-BSOZ5gTD.js.map +1 -0
  195. package/dist/web/public/assets/overview-COop5K2Y.js +12 -0
  196. package/dist/web/public/assets/overview-COop5K2Y.js.map +1 -0
  197. package/dist/web/public/assets/overview-DeH5ud6d.js +2 -0
  198. package/dist/web/public/assets/overview-DeH5ud6d.js.map +1 -0
  199. package/dist/web/public/assets/{pagination-DkdCTctJ.js → pagination-BBicLzXP.js} +3 -3
  200. package/dist/web/public/assets/{pagination-DkdCTctJ.js.map → pagination-BBicLzXP.js.map} +1 -1
  201. package/dist/web/public/assets/persona-CElXQZ4p.js +2 -0
  202. package/dist/web/public/assets/{persona-BvtcZh6G.js.map → persona-CElXQZ4p.js.map} +1 -1
  203. package/dist/web/public/assets/{plans-i3a6lrqF.js → plans-Bo5LlLeH.js} +3 -8
  204. package/dist/web/public/assets/plans-Bo5LlLeH.js.map +1 -0
  205. package/dist/web/public/assets/{play-CPoE_JnS.js → play-DX5wp4WH.js} +2 -2
  206. package/dist/web/public/assets/{play-CPoE_JnS.js.map → play-DX5wp4WH.js.map} +1 -1
  207. package/dist/web/public/assets/{plus-CfzKV_0u.js → plus-DH4J_YhN.js} +2 -2
  208. package/dist/web/public/assets/{plus-CfzKV_0u.js.map → plus-DH4J_YhN.js.map} +1 -1
  209. package/dist/web/public/assets/policy-BrgOuDt_.js +2 -0
  210. package/dist/web/public/assets/{policy-Cm88P8LO.js.map → policy-BrgOuDt_.js.map} +1 -1
  211. package/dist/web/public/assets/{qr-code-DMkV8nv2.js → qr-code-YrEuhMPC.js} +2 -2
  212. package/dist/web/public/assets/{qr-code-DMkV8nv2.js.map → qr-code-YrEuhMPC.js.map} +1 -1
  213. package/dist/web/public/assets/{refresh-ccw-nBMm5Xal.js → refresh-ccw-DlAd-eTQ.js} +2 -2
  214. package/dist/web/public/assets/{refresh-ccw-nBMm5Xal.js.map → refresh-ccw-DlAd-eTQ.js.map} +1 -1
  215. package/dist/web/public/assets/{reminders-DjEujanC.js → reminders-DBEE0zXG.js} +3 -3
  216. package/dist/web/public/assets/{reminders-DjEujanC.js.map → reminders-DBEE0zXG.js.map} +1 -1
  217. package/dist/web/public/assets/{save-DbrrCFDM.js → save-BDOtZrfp.js} +2 -2
  218. package/dist/web/public/assets/{save-DbrrCFDM.js.map → save-BDOtZrfp.js.map} +1 -1
  219. package/dist/web/public/assets/schedules-DAyhVI8-.js +2 -0
  220. package/dist/web/public/assets/schedules-DAyhVI8-.js.map +1 -0
  221. package/dist/web/public/assets/{search-5q3dkINm.js → search-55mtgHrB.js} +3 -3
  222. package/dist/web/public/assets/{search-5q3dkINm.js.map → search-55mtgHrB.js.map} +1 -1
  223. package/dist/web/public/assets/{search-DbE4VEm9.js → search-CAICU3aU.js} +2 -2
  224. package/dist/web/public/assets/{search-DbE4VEm9.js.map → search-CAICU3aU.js.map} +1 -1
  225. package/dist/web/public/assets/security-CbP4QgVp.js +2 -0
  226. package/dist/web/public/assets/security-CbP4QgVp.js.map +1 -0
  227. package/dist/web/public/assets/server-Dg4e8pvm.js +7 -0
  228. package/dist/web/public/assets/server-Dg4e8pvm.js.map +1 -0
  229. package/dist/web/public/assets/service-gWZa3sup.js +7 -0
  230. package/dist/web/public/assets/service-gWZa3sup.js.map +1 -0
  231. package/dist/web/public/assets/{shield-alert-WOa69jy3.js → shield-alert-DOKK9EnJ.js} +2 -2
  232. package/dist/web/public/assets/{shield-alert-WOa69jy3.js.map → shield-alert-DOKK9EnJ.js.map} +1 -1
  233. package/dist/web/public/assets/sparkles-G0QIs9nP.js +7 -0
  234. package/dist/web/public/assets/sparkles-G0QIs9nP.js.map +1 -0
  235. package/dist/web/public/assets/start-D-abhl3q.js +2 -0
  236. package/dist/web/public/assets/start-D-abhl3q.js.map +1 -0
  237. package/dist/web/public/assets/{status-badge-D5xhwquL.js → status-badge-CyLdpsXq.js} +2 -2
  238. package/dist/web/public/assets/{status-badge-D5xhwquL.js.map → status-badge-CyLdpsXq.js.map} +1 -1
  239. package/dist/web/public/assets/{subtasks-DMRyk6YS.js → subtasks-BnEjSGUR.js} +3 -3
  240. package/dist/web/public/assets/{subtasks-DMRyk6YS.js.map → subtasks-BnEjSGUR.js.map} +1 -1
  241. package/dist/web/public/assets/{table-Dx65w6V0.js → table-sCMZBe_Z.js} +2 -2
  242. package/dist/web/public/assets/{table-Dx65w6V0.js.map → table-sCMZBe_Z.js.map} +1 -1
  243. package/dist/web/public/assets/terminal-_pXeEjXG.js +7 -0
  244. package/dist/web/public/assets/terminal-_pXeEjXG.js.map +1 -0
  245. package/dist/web/public/assets/{topn-L7Juczp3.js → topn-D1B-gS1M.js} +3 -3
  246. package/dist/web/public/assets/{topn-L7Juczp3.js.map → topn-D1B-gS1M.js.map} +1 -1
  247. package/dist/web/public/assets/{trash-2-7xrfqd-v.js → trash-2-D2x2UPuZ.js} +2 -2
  248. package/dist/web/public/assets/{trash-2-7xrfqd-v.js.map → trash-2-D2x2UPuZ.js.map} +1 -1
  249. package/dist/web/public/assets/use-a2a-C98e2Via.js +2 -0
  250. package/dist/web/public/assets/use-a2a-C98e2Via.js.map +1 -0
  251. package/dist/web/public/assets/{use-agim-skills-pFjfgqMF.js → use-agim-skills-BbuJP3NT.js} +2 -2
  252. package/dist/web/public/assets/{use-agim-skills-pFjfgqMF.js.map → use-agim-skills-BbuJP3NT.js.map} +1 -1
  253. package/dist/web/public/assets/use-background-tasks-CwFmOokw.js +2 -0
  254. package/dist/web/public/assets/{use-background-tasks-D1--hHjp.js.map → use-background-tasks-CwFmOokw.js.map} +1 -1
  255. package/dist/web/public/assets/use-jobs-BJjeJ5lh.js +2 -0
  256. package/dist/web/public/assets/use-jobs-BJjeJ5lh.js.map +1 -0
  257. package/dist/web/public/assets/use-memory-CXDwKCco.js +2 -0
  258. package/dist/web/public/assets/{use-memory-Bz1Zao7g.js.map → use-memory-CXDwKCco.js.map} +1 -1
  259. package/dist/web/public/assets/use-observability-CY5ZUPrC.js +2 -0
  260. package/dist/web/public/assets/{use-observability-DtqSWVjM.js.map → use-observability-CY5ZUPrC.js.map} +1 -1
  261. package/dist/web/public/assets/use-outbox-DT_XWB_7.js +7 -0
  262. package/dist/web/public/assets/use-outbox-DT_XWB_7.js.map +1 -0
  263. package/dist/web/public/assets/use-schedules-D4W8fMwo.js +7 -0
  264. package/dist/web/public/assets/use-schedules-D4W8fMwo.js.map +1 -0
  265. package/dist/web/public/assets/use-settings-DGIjmUX0.js +2 -0
  266. package/dist/web/public/assets/use-settings-DGIjmUX0.js.map +1 -0
  267. package/dist/web/public/assets/use-skills-D2bMM580.js +7 -0
  268. package/dist/web/public/assets/use-skills-D2bMM580.js.map +1 -0
  269. package/dist/web/public/assets/use-vector-BYOFwjU0.js +2 -0
  270. package/dist/web/public/assets/use-vector-BYOFwjU0.js.map +1 -0
  271. package/dist/web/public/assets/use-workspace-CuytyHwb.js +2 -0
  272. package/dist/web/public/assets/{use-workspace-CConjEx0.js.map → use-workspace-CuytyHwb.js.map} +1 -1
  273. package/dist/web/public/assets/vector-CL8ezpSR.js +2 -0
  274. package/dist/web/public/assets/vector-CL8ezpSR.js.map +1 -0
  275. package/dist/web/public/assets/viewer-CD0iEfPU.js +7 -0
  276. package/dist/web/public/assets/viewer-CD0iEfPU.js.map +1 -0
  277. package/dist/web/public/assets/workspace-BA1_hso3.js +17 -0
  278. package/dist/web/public/assets/workspace-BA1_hso3.js.map +1 -0
  279. package/dist/web/public/assets/workspaces-DyGLJUgB.js +7 -0
  280. package/dist/web/public/assets/workspaces-DyGLJUgB.js.map +1 -0
  281. package/dist/web/public/index.html +2 -2
  282. package/dist/web/server.d.ts +0 -3
  283. package/dist/web/server.d.ts.map +1 -1
  284. package/dist/web/server.js +138 -3
  285. package/dist/web/server.js.map +1 -1
  286. package/package.json +1 -1
  287. package/dist/web/public/assets/a2a-D7MoJ1iT.js +0 -7
  288. package/dist/web/public/assets/a2a-D7MoJ1iT.js.map +0 -1
  289. package/dist/web/public/assets/agents-BXThDW6f.js +0 -7
  290. package/dist/web/public/assets/bgjobs-Rc05aEy9.js +0 -7
  291. package/dist/web/public/assets/bgjobs-Rc05aEy9.js.map +0 -1
  292. package/dist/web/public/assets/chat-DQpQLW9j.js +0 -17
  293. package/dist/web/public/assets/chat-DQpQLW9j.js.map +0 -1
  294. package/dist/web/public/assets/circle-check-DZnkaUdk.js +0 -7
  295. package/dist/web/public/assets/circle-check-DZnkaUdk.js.map +0 -1
  296. package/dist/web/public/assets/confirm-dialog-gPKJnvEW.js +0 -2
  297. package/dist/web/public/assets/health-wqCp-K_o.js +0 -2
  298. package/dist/web/public/assets/hot-B-CMjQIr.js +0 -12
  299. package/dist/web/public/assets/index-DHh1LYlA.js +0 -209
  300. package/dist/web/public/assets/index-DHh1LYlA.js.map +0 -1
  301. package/dist/web/public/assets/index-DknVjPYB.css +0 -1
  302. package/dist/web/public/assets/installed-Cet-1M2Q.js.map +0 -1
  303. package/dist/web/public/assets/jobs-CfEzOOAC.js +0 -2
  304. package/dist/web/public/assets/jobs-CfEzOOAC.js.map +0 -1
  305. package/dist/web/public/assets/layout-BX43KyXM.js +0 -2
  306. package/dist/web/public/assets/layout-BX43KyXM.js.map +0 -1
  307. package/dist/web/public/assets/layout-BcYZlaqf.js +0 -2
  308. package/dist/web/public/assets/layout-BcYZlaqf.js.map +0 -1
  309. package/dist/web/public/assets/layout-Cb7looUv.js +0 -2
  310. package/dist/web/public/assets/layout-Cb7looUv.js.map +0 -1
  311. package/dist/web/public/assets/layout-D7xH78OU.js +0 -2
  312. package/dist/web/public/assets/layout-D7xH78OU.js.map +0 -1
  313. package/dist/web/public/assets/llm-BZ9qqp-D.js +0 -27
  314. package/dist/web/public/assets/llm-BZ9qqp-D.js.map +0 -1
  315. package/dist/web/public/assets/loader-circle-DgdBWYl0.js +0 -7
  316. package/dist/web/public/assets/memos-BBtqFcoH.js +0 -12
  317. package/dist/web/public/assets/memos-BBtqFcoH.js.map +0 -1
  318. package/dist/web/public/assets/messengers-i7WvNT3o.js +0 -2
  319. package/dist/web/public/assets/messengers-i7WvNT3o.js.map +0 -1
  320. package/dist/web/public/assets/outbox-BbfC5kuG.js +0 -7
  321. package/dist/web/public/assets/outbox-BbfC5kuG.js.map +0 -1
  322. package/dist/web/public/assets/persona-BvtcZh6G.js +0 -2
  323. package/dist/web/public/assets/plans-i3a6lrqF.js.map +0 -1
  324. package/dist/web/public/assets/policy-Cm88P8LO.js +0 -2
  325. package/dist/web/public/assets/schedules-DzwDWykc.js +0 -7
  326. package/dist/web/public/assets/schedules-DzwDWykc.js.map +0 -1
  327. package/dist/web/public/assets/security-BIcnUrAs.js +0 -2
  328. package/dist/web/public/assets/security-BIcnUrAs.js.map +0 -1
  329. package/dist/web/public/assets/service-CnorFHzZ.js +0 -7
  330. package/dist/web/public/assets/service-CnorFHzZ.js.map +0 -1
  331. package/dist/web/public/assets/use-background-tasks-D1--hHjp.js +0 -2
  332. package/dist/web/public/assets/use-memory-Bz1Zao7g.js +0 -2
  333. package/dist/web/public/assets/use-observability-DtqSWVjM.js +0 -2
  334. package/dist/web/public/assets/use-settings-DKbDqCEJ.js +0 -2
  335. package/dist/web/public/assets/use-settings-DKbDqCEJ.js.map +0 -1
  336. package/dist/web/public/assets/use-workspace-CConjEx0.js +0 -2
  337. package/dist/web/public/assets/vector-D8sEa2W-.js +0 -2
  338. package/dist/web/public/assets/vector-D8sEa2W-.js.map +0 -1
  339. package/dist/web/public/assets/viewer-aSIjAKVA.js +0 -12
  340. package/dist/web/public/assets/viewer-aSIjAKVA.js.map +0 -1
  341. package/dist/web/public/assets/workspace-BqwWoinI.js +0 -17
  342. package/dist/web/public/assets/workspace-BqwWoinI.js.map +0 -1
  343. package/dist/web/public/assets/workspaces-ChsJcrav.js +0 -7
  344. package/dist/web/public/assets/workspaces-ChsJcrav.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ import{h as w,u as A,j as e,e as N,d as I,X as ve,I as d,k as F,l as z,m as X,n as Y,o as C,p as b,w as _,a as ye,ai as xe,K as he,aj as ue,ak as S,al as G,am as oe,C as me,L as te,g as Te,M as _e,P as Me,x as Ie,an as Ee,D as ke,E as Ce,F as Re,G as Se,H as we,J as Pe}from"./index-DCfdN5R7.js";import{r as u}from"./react-DlP5eolq.js";import{T as Le,a as Ge,b as de,c as P,d as De,e as L}from"./table-sCMZBe_Z.js";import{b as Oe,c as He,u as Ve,d as Ue}from"./use-settings-DGIjmUX0.js";import{L as D}from"./loader-circle-DDdmcH0k.js";import{R as pe}from"./refresh-ccw-DlAd-eTQ.js";import{S as Ke}from"./save-BDOtZrfp.js";import{N as Be}from"./network-BUeWK3bs.js";import{S as qe}from"./shield-alert-DOKK9EnJ.js";import{B as Fe}from"./bell-B-UdeJsp.js";import{H as ze}from"./heart-pulse-DXlE9oic.js";import{A as ge}from"./arrow-right-A889Wof8.js";import{C as Xe}from"./chevron-right-CFRb-SM_.js";import{T as Ye}from"./trash-2-D2x2UPuZ.js";import{P as $e}from"./plus-DH4J_YhN.js";/**
2
+ * @license lucide-react v0.469.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const We=w("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/**
7
+ * @license lucide-react v0.469.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const Qe=w("FileStack",[["path",{d:"M21 7h-3a2 2 0 0 1-2-2V2",key:"9rb54x"}],["path",{d:"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z",key:"1059l0"}],["path",{d:"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15",key:"16874u"}],["path",{d:"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11",key:"k2ox98"}]]);/**
12
+ * @license lucide-react v0.469.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const Je=w("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
17
+ * @license lucide-react v0.469.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const Ze=w("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);/**
22
+ * @license lucide-react v0.469.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const es=w("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/**
27
+ * @license lucide-react v0.469.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */const ss=w("Waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);/**
32
+ * @license lucide-react v0.469.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */const ae=w("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function ts(t){return{role:t.AGIM_NATIVE_AGENT_ROLE??"",mode:t.AGIM_NATIVE_AGENT_MODE||"read-only",autoAllow:t.AGIM_NATIVE_AGENT_AUTOALLOW??"",denyList:t.AGIM_NATIVE_AGENT_DENYLIST??"",evalEnabled:U(t.AGIM_NOTIFICATION_EVALUATOR),evalSources:t.AGIM_NOTIFICATION_EVALUATOR_SOURCES??"",hbEnabled:U(t.AGIM_HEARTBEAT_ENABLED),hbTickMs:t.AGIM_HEARTBEAT_TICK_INTERVAL_MS??"",hbDefaultMin:t.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN??"",toolResultCap:t.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS??"",toolTimeoutMs:t.AGIM_NATIVE_TOOL_TIMEOUT_MS??"",blankRetryMax:t.AGIM_NATIVE_BLANK_RETRY_MAX??"",lengthRecoveryMax:t.AGIM_NATIVE_LENGTH_RECOVERY_MAX??"",a2aMaxDepth:t.AGIM_A2A_MAX_DEPTH??"",a2aTimeoutMs:t.AGIM_A2A_TIMEOUT_DEFAULT_MS??"",callAgentInProcess:!ee(t.AGIM_NATIVE_CALL_AGENT_IN_PROCESS),callAgentMaxPerTurn:t.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN??"",semanticStuckLoop:!ee(t.AGIM_NATIVE_SEMANTIC_STUCK_LOOP),criticEnabled:U(t.AGIM_NATIVE_CRITIC),criticRole:t.AGIM_NATIVE_CRITIC_ROLE??"",planModeDefault:U(t.AGIM_NATIVE_PLAN_MODE),planIntentAuto:U(t.AGIM_PLAN_INTENT_AUTO),planIntentPhrases:t.AGIM_PLAN_INTENT_PHRASES??"",compactTriggerChars:t.AGIM_NATIVE_COMPACT_TRIGGER_CHARS??"",compactKeepTurns:t.AGIM_NATIVE_COMPACT_KEEP_TURNS??"",compactKeepFirst:t.AGIM_NATIVE_COMPACT_KEEP_FIRST??"",compactSummaryChars:t.AGIM_NATIVE_COMPACT_SUMMARY_CHARS??"",streamPartial:!ee(t.AGIM_NATIVE_STREAM_PARTIAL),maxIter:t.AGIM_NATIVE_AGENT_MAX_ITER??""}}function ee(t){if(!t)return!1;const a=t.toLowerCase().trim();return a==="off"||a==="false"||a==="0"||a==="no"}function U(t){if(!t)return!1;const a=t.toLowerCase();return a==="1"||a==="true"||a==="yes"||a==="on"}function as(){const{t}=A(["settings","common"]),a=t("nativeAgent.subtitle"),s=t("nativeAgent.llmLink"),l=a.indexOf(s);return l===-1?e.jsx("p",{className:"text-sm text-text-dim",children:a}):e.jsxs("p",{className:"text-sm text-text-dim",children:[a.slice(0,l),e.jsx("a",{className:"underline",href:s,children:s}),a.slice(l+s.length)]})}function ns({embedded:t=!1}){const{t:a}=A(["settings","common"]),s=Oe({reveal:!1}),l=He(),p=s.data?.env??{},r=u.useMemo(()=>ts(p),[p]),[n,g]=u.useState(r),[f,y]=u.useState("");u.useEffect(()=>{const c=JSON.stringify(r);c!==f&&(g(r),y(c))},[r,f]);const T=JSON.stringify(n)!==JSON.stringify(r);function i(c,k){g(O=>({...O,[c]:k}))}async function x(){const c={};if(n.role!==r.role&&(c.AGIM_NATIVE_AGENT_ROLE=n.role.trim()||null),n.mode!==r.mode&&(c.AGIM_NATIVE_AGENT_MODE=n.mode),n.autoAllow!==r.autoAllow&&(c.AGIM_NATIVE_AGENT_AUTOALLOW=n.autoAllow.trim()||null),n.denyList!==r.denyList&&(c.AGIM_NATIVE_AGENT_DENYLIST=n.denyList.trim()||null),n.evalEnabled!==r.evalEnabled&&(c.AGIM_NOTIFICATION_EVALUATOR=n.evalEnabled?"on":null),n.evalSources!==r.evalSources&&(c.AGIM_NOTIFICATION_EVALUATOR_SOURCES=n.evalSources.trim()||null),n.hbEnabled!==r.hbEnabled&&(c.AGIM_HEARTBEAT_ENABLED=n.hbEnabled?"on":null),n.hbTickMs!==r.hbTickMs&&(c.AGIM_HEARTBEAT_TICK_INTERVAL_MS=n.hbTickMs.trim()||null),n.hbDefaultMin!==r.hbDefaultMin&&(c.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN=n.hbDefaultMin.trim()||null),n.toolResultCap!==r.toolResultCap&&(c.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS=n.toolResultCap.trim()||null),n.toolTimeoutMs!==r.toolTimeoutMs&&(c.AGIM_NATIVE_TOOL_TIMEOUT_MS=n.toolTimeoutMs.trim()||null),n.blankRetryMax!==r.blankRetryMax&&(c.AGIM_NATIVE_BLANK_RETRY_MAX=n.blankRetryMax.trim()||null),n.lengthRecoveryMax!==r.lengthRecoveryMax&&(c.AGIM_NATIVE_LENGTH_RECOVERY_MAX=n.lengthRecoveryMax.trim()||null),n.a2aMaxDepth!==r.a2aMaxDepth&&(c.AGIM_A2A_MAX_DEPTH=n.a2aMaxDepth.trim()||null),n.a2aTimeoutMs!==r.a2aTimeoutMs&&(c.AGIM_A2A_TIMEOUT_DEFAULT_MS=n.a2aTimeoutMs.trim()||null),n.callAgentInProcess!==r.callAgentInProcess&&(c.AGIM_NATIVE_CALL_AGENT_IN_PROCESS=n.callAgentInProcess?null:"off"),n.callAgentMaxPerTurn!==r.callAgentMaxPerTurn&&(c.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN=n.callAgentMaxPerTurn.trim()||null),n.semanticStuckLoop!==r.semanticStuckLoop&&(c.AGIM_NATIVE_SEMANTIC_STUCK_LOOP=n.semanticStuckLoop?null:"off"),n.criticEnabled!==r.criticEnabled&&(c.AGIM_NATIVE_CRITIC=n.criticEnabled?"on":null),n.criticRole!==r.criticRole&&(c.AGIM_NATIVE_CRITIC_ROLE=n.criticRole.trim()||null),n.planModeDefault!==r.planModeDefault&&(c.AGIM_NATIVE_PLAN_MODE=n.planModeDefault?"1":null),n.planIntentAuto!==r.planIntentAuto&&(c.AGIM_PLAN_INTENT_AUTO=n.planIntentAuto?"on":null),n.planIntentPhrases!==r.planIntentPhrases&&(c.AGIM_PLAN_INTENT_PHRASES=n.planIntentPhrases.trim()||null),n.compactTriggerChars!==r.compactTriggerChars&&(c.AGIM_NATIVE_COMPACT_TRIGGER_CHARS=n.compactTriggerChars.trim()||null),n.compactKeepTurns!==r.compactKeepTurns&&(c.AGIM_NATIVE_COMPACT_KEEP_TURNS=n.compactKeepTurns.trim()||null),n.compactKeepFirst!==r.compactKeepFirst&&(c.AGIM_NATIVE_COMPACT_KEEP_FIRST=n.compactKeepFirst.trim()||null),n.compactSummaryChars!==r.compactSummaryChars&&(c.AGIM_NATIVE_COMPACT_SUMMARY_CHARS=n.compactSummaryChars.trim()||null),n.streamPartial!==r.streamPartial&&(c.AGIM_NATIVE_STREAM_PARTIAL=n.streamPartial?null:"off"),n.maxIter!==r.maxIter&&(c.AGIM_NATIVE_AGENT_MAX_ITER=n.maxIter.trim()||null),Object.keys(c).length!==0)try{await l.mutateAsync({updates:c}),b.success(a("nativeAgent.savedToast"))}catch(k){b.error(k?.message??String(k))}}function j(){g(r)}return e.jsxs("div",{className:t?"flex flex-col gap-6":"mx-auto flex max-w-4xl flex-col gap-6",children:[!t&&e.jsxs(e.Fragment,{children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:a("nativeAgent.title")}),e.jsxs(N,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":a("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(pe,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:a("nativeAgent.refresh")})]})]}),e.jsx(as,{})]}),s.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(ls,{draft:n,setField:i}),e.jsx(is,{draft:n,setField:i}),e.jsx(os,{draft:n,setField:i}),e.jsx(ms,{draft:n,setField:i}),e.jsx(ds,{draft:n,setField:i}),e.jsx(xs,{draft:n,setField:i}),e.jsx(rs,{draft:n,setField:i}),e.jsx(cs,{draft:n,setField:i})]}),T&&e.jsxs("div",{className:t?"flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow":"sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow",children:[e.jsx(I,{variant:"info",children:a("nativeAgent.unsaved")}),e.jsxs(N,{variant:"ghost",size:"sm",className:"ml-auto",onClick:j,disabled:l.isPending,children:[e.jsx(ve,{className:"h-4 w-4"})," ",a("nativeAgent.discard")]}),e.jsxs(N,{size:"sm",onClick:()=>void x(),disabled:l.isPending,children:[l.isPending?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(Ke,{className:"h-4 w-4"}),a("nativeAgent.save")]})]})]})}function ls({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(We,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.agentCard")})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.roleOverride"),hint:s("nativeAgent.roleHint"),children:e.jsx(d,{value:t.role,onChange:l=>a("role",l.target.value),placeholder:"native-chat",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.approvalMode"),hint:s("nativeAgent.approvalHint"),children:e.jsxs(F,{value:t.mode,onValueChange:l=>a("mode",l),children:[e.jsx(z,{children:e.jsx(X,{})}),e.jsxs(Y,{children:[e.jsx(C,{value:"read-only",children:s("nativeAgent.modeReadOnly")}),e.jsx(C,{value:"allow-list",children:s("nativeAgent.modeAllowList")}),e.jsx(C,{value:"allow-all",children:s("nativeAgent.modeAllowAll")}),e.jsx(C,{value:"deny-all",children:s("nativeAgent.modeDenyAll")})]})]})}),e.jsx(m,{label:s("nativeAgent.autoAllow"),hint:s("nativeAgent.autoAllowHint"),children:e.jsx(d,{value:t.autoAllow,onChange:l=>a("autoAllow",l.target.value),placeholder:"native_,mcp_filesystem_",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.denyList"),hint:s("nativeAgent.denyListHint"),children:e.jsx(d,{value:t.denyList,onChange:l=>a("denyList",l.target.value),placeholder:"mcp_shell_,mcp_dangerous_",className:"font-mono text-xs"})})]})]})}function rs({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(Fe,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.evaluatorCard")}),t.evalEnabled?e.jsx(I,{variant:"success",children:s("nativeAgent.on")}):e.jsx(I,{variant:"outline",children:s("nativeAgent.off")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.evalDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.enableGate"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.evalEnabled,onChange:l=>a("evalEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:s("nativeAgent.filterViaLlm")})]})}),e.jsx(m,{label:s("nativeAgent.evalSources"),hint:s("nativeAgent.evalSourcesHint"),children:e.jsx(d,{value:t.evalSources,onChange:l=>a("evalSources",l.target.value),placeholder:"push,heartbeat",className:"font-mono text-xs",disabled:!t.evalEnabled})})]})]})}function cs({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(ze,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.heartbeatCard")}),t.hbEnabled?e.jsx(I,{variant:"success",children:s("nativeAgent.on")}):e.jsx(I,{variant:"outline",children:s("nativeAgent.off")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.hbDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3",children:[e.jsx(m,{label:s("nativeAgent.enableScheduler"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.hbEnabled,onChange:l=>a("hbEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:s("nativeAgent.startScanLoop")})]})}),e.jsx(m,{label:s("nativeAgent.tickInterval"),hint:s("nativeAgent.tickHint"),children:e.jsx(d,{type:"number",value:t.hbTickMs,onChange:l=>a("hbTickMs",l.target.value),placeholder:"60000",className:"font-mono text-xs",disabled:!t.hbEnabled})}),e.jsx(m,{label:s("nativeAgent.defaultInterval"),hint:s("nativeAgent.defaultIntervalHint"),children:e.jsx(d,{type:"number",value:t.hbDefaultMin,onChange:l=>a("hbDefaultMin",l.target.value),placeholder:"15",className:"font-mono text-xs",disabled:!t.hbEnabled})})]})]})}function is({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(Je,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.runtimeCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.runtimeDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.toolResultCap"),hint:s("nativeAgent.toolResultCapHint"),children:e.jsx(d,{type:"number",value:t.toolResultCap,onChange:l=>a("toolResultCap",l.target.value),placeholder:"64000",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.toolTimeoutMs"),hint:s("nativeAgent.toolTimeoutHint"),children:e.jsx(d,{type:"number",value:t.toolTimeoutMs,onChange:l=>a("toolTimeoutMs",l.target.value),placeholder:"60000",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.blankRetryMax"),hint:s("nativeAgent.blankRetryHint"),children:e.jsx(d,{type:"number",value:t.blankRetryMax,onChange:l=>a("blankRetryMax",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.lengthRecoveryMax"),hint:s("nativeAgent.lengthRecoveryHint"),children:e.jsx(d,{type:"number",value:t.lengthRecoveryMax,onChange:l=>a("lengthRecoveryMax",l.target.value),placeholder:"1",className:"font-mono text-xs"})})]})]})}function os({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(Be,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.a2aCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.a2aDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.a2aMaxDepth"),hint:s("nativeAgent.a2aMaxDepthHint"),children:e.jsx(d,{type:"number",value:t.a2aMaxDepth,onChange:l=>a("a2aMaxDepth",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.a2aTimeoutMs"),hint:s("nativeAgent.a2aTimeoutMsHint"),children:e.jsx(d,{type:"number",value:t.a2aTimeoutMs,onChange:l=>a("a2aTimeoutMs",l.target.value),placeholder:"1800000",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.callAgentInProcess"),hint:s("nativeAgent.callAgentInProcessHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.callAgentInProcess,onChange:l=>a("callAgentInProcess",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.callAgentInProcess?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.callAgentMaxPerTurn"),hint:s("nativeAgent.callAgentMaxPerTurnHint"),children:e.jsx(d,{type:"number",value:t.callAgentMaxPerTurn,onChange:l=>a("callAgentMaxPerTurn",l.target.value),placeholder:"2",className:"font-mono text-xs"})})]})]})}function ms({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(qe,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.criticCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.criticDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.semanticStuckLoop"),hint:s("nativeAgent.semanticStuckLoopHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.semanticStuckLoop,onChange:l=>a("semanticStuckLoop",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.semanticStuckLoop?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.criticEnabled"),hint:s("nativeAgent.criticEnabledHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.criticEnabled,onChange:l=>a("criticEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.criticEnabled?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.criticRole"),hint:s("nativeAgent.criticRoleHint"),children:e.jsx(d,{value:t.criticRole,onChange:l=>a("criticRole",l.target.value),placeholder:"(use main backend)",className:"font-mono text-xs",disabled:!t.criticEnabled})}),e.jsx(m,{label:s("nativeAgent.planModeDefault"),hint:s("nativeAgent.planModeDefaultHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.planModeDefault,onChange:l=>a("planModeDefault",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.planModeDefault?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.planIntentAuto"),hint:s("nativeAgent.planIntentAutoHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.planIntentAuto,onChange:l=>a("planIntentAuto",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.planIntentAuto?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.planIntentPhrases"),hint:s("nativeAgent.planIntentPhrasesHint"),children:e.jsx(d,{value:t.planIntentPhrases,onChange:l=>a("planIntentPhrases",l.target.value),placeholder:"先想想,plan only,don't act yet",className:"font-mono text-xs",disabled:!t.planIntentAuto})})]})]})}function ds({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(Qe,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.compactCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.compactDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.compactTriggerChars"),hint:s("nativeAgent.compactTriggerCharsHint"),children:e.jsx(d,{type:"number",value:t.compactTriggerChars,onChange:l=>a("compactTriggerChars",l.target.value),placeholder:"60000",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.compactKeepTurns"),hint:s("nativeAgent.compactKeepTurnsHint"),children:e.jsx(d,{type:"number",value:t.compactKeepTurns,onChange:l=>a("compactKeepTurns",l.target.value),placeholder:"6",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.compactKeepFirst"),hint:s("nativeAgent.compactKeepFirstHint"),children:e.jsx(d,{type:"number",value:t.compactKeepFirst,onChange:l=>a("compactKeepFirst",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(m,{label:s("nativeAgent.compactSummaryChars"),hint:s("nativeAgent.compactSummaryCharsHint"),children:e.jsx(d,{type:"number",value:t.compactSummaryChars,onChange:l=>a("compactSummaryChars",l.target.value),placeholder:"1500",className:"font-mono text-xs"})})]})]})}function xs({draft:t,setField:a}){const{t:s}=A(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(ss,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("nativeAgent.streamCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:s("nativeAgent.streamDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(m,{label:s("nativeAgent.streamPartial"),hint:s("nativeAgent.streamPartialHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.streamPartial,onChange:l=>a("streamPartial",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.streamPartial?s("nativeAgent.on"):s("nativeAgent.off")})]})}),e.jsx(m,{label:s("nativeAgent.maxIter"),hint:s("nativeAgent.maxIterHint"),children:e.jsx(d,{type:"number",value:t.maxIter,onChange:l=>a("maxIter",l.target.value),placeholder:"50",className:"font-mono text-xs"})})]})]})}function m({label:t,hint:a,children:s}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(_,{className:"text-xs font-medium",children:t}),s,a&&e.jsx("p",{className:"text-[11px] text-text-dim",children:a})]})}const hs=["cheap","evaluator","native-chat"],se="__unbind__";function Gs(){const{t}=A(["settings","common"]),a=ye();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:t("llm.title")}),e.jsxs(N,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void a.refetch(),disabled:a.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[a.isFetching?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(pe,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("llm.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("llm.subtitle")}),a.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(gs,{data:a.data,onRefresh:()=>{a.refetch()}}),e.jsx(ps,{data:a.data}),e.jsx(us,{data:a.data})]})]})}function us({data:t}){const{t:a}=A(["settings","common"]),[s,l]=u.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"flex flex-col gap-3 rounded-md border border-border bg-surface px-4 py-3 sm:flex-row sm:items-center",children:[e.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim",children:e.jsx(es,{className:"h-4 w-4"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.advanced.title")}),e.jsx(I,{variant:"outline",children:a("llm.advanced.badge")})]}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:a("llm.advanced.subtitle")})]}),e.jsxs(N,{type:"button",variant:"secondary",size:"sm",className:"w-full sm:w-auto","aria-expanded":s,onClick:()=>l(p=>!p),children:[s?e.jsx(Ie,{className:"h-4 w-4"}):e.jsx(Xe,{className:"h-4 w-4"}),e.jsx("span",{children:a(s?"llm.advanced.hide":"llm.advanced.show")})]})]}),s&&e.jsxs(e.Fragment,{children:[e.jsx(As,{data:t}),e.jsx(Ns,{}),e.jsx(js,{data:t}),e.jsxs("section",{id:"agim-agent",className:"rounded-md border border-border bg-surface px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.agimAgentRuntimeTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:a("llm.agimAgentRuntimeHint")})]}),e.jsx(ns,{embedded:!0})]})]})}function ps({data:t}){const{t:a}=A(["settings","common"]),s=(t?.backends??[]).filter(r=>r.secret.source!=="none"),l=t?.roles?.["native-chat"],p=s.find(r=>r.name===l)??s[0];return p?e.jsx("section",{className:"rounded-md border border-border bg-surface p-4",children:e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start",children:[e.jsx("span",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-success-bg text-success",children:e.jsx(_e,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.next.title")}),e.jsx(I,{variant:"success",children:a("llm.next.backendBadge",{backend:p.name})})]}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:a("llm.next.detail")}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsx("code",{className:"rounded-md bg-surface-2 px-2 py-1 text-xs text-text",children:"/models"}),e.jsxs("code",{className:"rounded-md bg-surface-2 px-2 py-1 text-xs text-text",children:["/model ",p.name]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(N,{asChild:!0,size:"sm",children:e.jsxs(te,{to:"/?welcome=1",children:[e.jsx("span",{children:a("llm.next.chat")}),e.jsx(ge,{className:"h-4 w-4"})]})}),e.jsx(N,{asChild:!0,size:"sm",variant:"secondary",children:e.jsxs(te,{to:"/settings/messengers",children:[e.jsx(Me,{className:"h-4 w-4"}),e.jsx("span",{children:a("llm.next.im")})]})})]})]})}):e.jsxs("section",{className:"rounded-md border border-dashed border-border bg-surface px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.next.emptyTitle")}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:a("llm.next.emptyDetail")})]})}function gs({data:t,onRefresh:a}){const{t:s}=A(["settings","common"]),l=Ve(),p=Ue(),r=xe(),n=he(),g=ue(),f=u.useMemo(()=>(t?.backends??[]).map(o=>o.name),[t]),y=(t?.backends??[]).filter(o=>o.secret.source!=="none"),T=t?.roles?.["native-chat"],i=y.find(o=>o.name===T)??y[0],x=l.data?.defaultAgent==="native",j=!!(i&&T&&x),[c,k]=u.useState("deepseek"),O=u.useMemo(()=>G.find(o=>o.key===c)??S,[c]),[h,M]=u.useState(()=>oe(S.baseName,f)),[H,K]=u.useState(S.baseUrl),[ne,le]=u.useState(S.model),[$,re]=u.useState(""),[W,B]=u.useState(null),[be,Q]=u.useState(null),[J,Z]=u.useState("idle"),q=J!=="idle"||r.isPending||n.isPending||p.isPending||g.isPending;function je(o){const v=G.find(V=>V.key===o)??S;k(o),K(v.baseUrl),le(v.model),M(oe(v.baseName,f))}async function Ne(o){try{await n.mutateAsync({"native-chat":o}),await p.mutateAsync({defaultAgent:"native"}),await l.refetch(),a(),b.success(s("llm.quick.enabledToast"))}catch(v){b.error(v?.message??String(v))}}async function fe(o){o.preventDefault();const v=h.trim(),V=H.trim(),ie=ne.trim();if(!v){b.error(s("llm.nameRequired"));return}if(!V||!/^https?:\/\//i.test(V)){b.error(s("llm.baseUrlRequired"));return}if(!ie){b.error(s("llm.modelRequired"));return}if(!$.trim()){b.error(s("llm.apiKeyRequired"));return}B(null);try{Z("saving"),await r.mutateAsync({name:v,provider:O.provider,baseUrl:V,model:ie,apiKey:$.trim()}),await n.mutateAsync({"native-chat":v}),await p.mutateAsync({defaultAgent:"native"}),await l.refetch(),a(),Z("testing");try{const E=await g.mutateAsync(v);if(E.ok){const R=s("llm.quick.testOk",{ms:E.durationMs??0});B({tone:"success",message:R}),b.success(s("llm.quick.setupDone"))}else{const R=E.error||s("llm.quick.testFailed");B({tone:"warning",message:R}),Q({backend:v,message:R})}}catch(E){const R=E?.message??String(E);B({tone:"warning",message:R}),Q({backend:v,message:R})}re("")}catch(E){b.error(E?.message??String(E))}finally{Z("idle")}}const ce=e.jsx(Ae,{error:be,onOpenChange:o=>{o||Q(null)}});return i?e.jsxs(e.Fragment,{children:[ce,e.jsx("section",{className:"rounded-md border border-border bg-surface p-4",children:e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsx("span",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-success-bg text-success",children:e.jsx(me,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("llm.quick.readyTitle")}),e.jsx(I,{variant:j?"success":"warning",children:s(j?"llm.quick.readyBadge":"llm.quick.enableBadge")})]}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:j?s("llm.quick.readyDetail",{backend:i.name}):s("llm.quick.enableDetail",{backend:i.name})})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[!j&&e.jsxs(N,{type:"button",size:"sm",disabled:q,onClick:()=>void Ne(i.name),children:[q?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(ae,{className:"h-4 w-4"}),e.jsx("span",{children:s("llm.quick.enableAction")})]}),e.jsx(N,{asChild:!0,variant:j?"default":"secondary",size:"sm",children:e.jsxs(te,{to:"/?welcome=1",children:[e.jsx("span",{children:s("llm.quick.chatAction")}),e.jsx(ge,{className:"h-4 w-4"})]})})]})]})})]}):e.jsxs(e.Fragment,{children:[ce,e.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsxs("div",{className:"mb-4 flex items-start gap-3",children:[e.jsx("span",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-accent-bg text-accent",children:e.jsx(Ze,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("llm.quick.title")}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:s("llm.quick.subtitle")})]})]}),e.jsxs("form",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",onSubmit:o=>void fe(o),children:[e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:s("llm.preset")}),e.jsxs(F,{value:c,onValueChange:o=>je(o),children:[e.jsx(z,{children:e.jsx(X,{})}),e.jsx(Y,{children:G.map(o=>e.jsx(C,{value:o.key,children:s(`llm.presets.${o.key}`)},o.key))})]})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:s("llm.apiKey")}),e.jsx(d,{type:"password",value:$,onChange:o=>re(o.target.value),placeholder:s("llm.apiKeyPlaceholder"),className:"font-mono text-xs",autoComplete:"off"})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:s("llm.name")}),e.jsx(d,{value:h,onChange:o=>M(o.target.value),placeholder:s("llm.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:s("llm.model")}),e.jsx(d,{value:ne,onChange:o=>le(o.target.value),placeholder:s("llm.modelPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(_,{className:"text-xs font-medium",children:s("llm.baseUrl")}),e.jsx(d,{value:H,onChange:o=>K(o.target.value),placeholder:s("llm.baseUrlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"flex flex-col gap-2 sm:col-span-2 sm:flex-row sm:items-center",children:[W&&e.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-text-dim",children:[W.tone==="success"?e.jsx(me,{className:"h-4 w-4 shrink-0 text-success"}):e.jsx(Te,{className:"h-4 w-4 shrink-0 text-warning"}),e.jsx("span",{className:"break-words",children:W.message})]}),e.jsxs(N,{type:"submit",disabled:q,className:"sm:ml-auto",children:[q?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(ae,{className:"h-4 w-4"}),s(J==="testing"?"llm.quick.testing":J==="saving"?"llm.quick.saving":"llm.quick.saveAndTest")]})]})]})]})]})}function As({data:t}){const{t:a}=A(["settings","common"]),s=Ee(),l=ue(),[p,r]=u.useState({}),[n,g]=u.useState(null);async function f(i){if(confirm(a("llm.removeConfirm",{name:i})))try{const x=await s.mutateAsync(i);b.success(a("llm.removedToast",{count:x.removedRoles}))}catch(x){b.error(x?.message??String(x))}}async function y(i){r(x=>({...x,[i]:a("llm.pinging")}));try{const x=await l.mutateAsync(i),j=x.ok?`✓ ${x.durationMs}ms · tokens ${x.tokensIn}→${x.tokensOut}`:`✗ ${x.error}`;r(c=>({...c,[i]:j})),x.ok||g({backend:i,message:x.error||a("llm.quick.testFailed")})}catch(x){const j=x?.message??String(x);r(c=>({...c,[i]:`✗ ${j}`})),g({backend:i,message:j})}}const T=t?.backends??[];return T.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:a("llm.backendsEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx(Ae,{error:n,onOpenChange:i=>{i||g(null)}}),e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.backendsTitle",{count:T.length})})}),e.jsxs(Le,{children:[e.jsx(Ge,{children:e.jsxs(de,{children:[e.jsx(P,{children:a("llm.col.name")}),e.jsx(P,{children:a("llm.col.provider")}),e.jsx(P,{children:a("llm.col.model")}),e.jsx(P,{children:a("llm.col.baseUrl")}),e.jsx(P,{children:a("llm.col.apiKey")}),e.jsx(P,{children:a("llm.col.actions")})]})}),e.jsx(De,{children:T.map(i=>{const x=i.secret.source==="none"?e.jsx(I,{variant:"outline",children:a("llm.secretMissing")}):e.jsx(I,{variant:"success",children:i.secret.source});return e.jsxs(de,{children:[e.jsx(L,{className:"font-mono text-xs",children:i.name}),e.jsx(L,{children:i.provider}),e.jsx(L,{className:"font-mono text-xs",children:i.model}),e.jsx(L,{className:"break-all font-mono text-[11px] text-text-dim",children:i.baseUrl??"—"}),e.jsx(L,{children:x}),e.jsxs(L,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(N,{variant:"ghost",size:"sm",onClick:()=>void y(i.name),disabled:l.isPending||i.secret.source==="none",title:i.secret.source==="none"?a("llm.setKeyFirst"):a("llm.pingHint"),children:[e.jsx(ae,{className:"h-4 w-4"}),e.jsx("span",{children:a("llm.ping")})]}),e.jsxs(N,{variant:"ghost",size:"sm",onClick:()=>void f(i.name),disabled:s.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Ye,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:a("llm.remove")})]}),p[i.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:p[i.name]})]})]},i.name)})})]})]})}function bs(t){return/temperature/i.test(t)&&/deprecated|not supported|unsupported|invalid_params/i.test(t)}function Ae({error:t,onOpenChange:a}){const{t:s}=A(["settings","common"]),l=t&&bs(t.message)?s("llm.errorDialog.temperatureHint"):s("llm.errorDialog.defaultHint");return e.jsx(ke,{open:t!=null,onOpenChange:a,children:e.jsxs(Ce,{className:"sm:max-w-xl",children:[e.jsxs(Re,{children:[e.jsx(Se,{children:s("llm.errorDialog.title")}),e.jsx(we,{children:s("llm.errorDialog.description",{backend:t?.backend??""})})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-text-dim",children:l}),e.jsx("pre",{className:"max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-surface-2 p-3 text-xs text-text",children:t?.message??""})]}),e.jsx(Pe,{children:e.jsx(N,{type:"button",onClick:()=>a(!1),children:s("actions.close",{ns:"common"})})})]})})}function js({data:t}){const{t:a}=A(["settings","common"]),s=he(),l=(t?.backends??[]).map(n=>n.name),p=t?.roles??{};async function r(n,g){const f={[n]:g===se?null:g};try{await s.mutateAsync(f),b.success(a("llm.roleUpdated",{role:n}))}catch(y){b.error(y?.message??String(y))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:a("llm.rolesTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:a("llm.rolesOptionalHint")})]}),e.jsx("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3",children:hs.map(n=>e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(_,{className:"text-xs font-medium",children:n}),e.jsxs(F,{value:p[n]??se,onValueChange:g=>void r(n,g),disabled:l.length===0||s.isPending,children:[e.jsx(z,{className:"font-mono text-xs",children:e.jsx(X,{placeholder:a("llm.unset")})}),e.jsxs(Y,{children:[e.jsx(C,{value:se,children:a("llm.unbound")}),l.map(g=>e.jsx(C,{value:g,children:g},g))]})]}),e.jsx("p",{className:"text-[11px] text-text-dim",children:a(`llm.roleHint.${n}`)})]},n))})]})}function Ns(){const{t}=A(["settings","common"]),a=xe(),[s,l]=u.useState(0),[p,r]=u.useState(""),[n,g]=u.useState(S.baseUrl),[f,y]=u.useState(S.model),[T,i]=u.useState(""),[x,j]=u.useState(null);function c(h){j(h),b.error(h)}function k(h){l(h);const M=G[h];M&&(g(M.baseUrl),y(M.model))}async function O(h){h.preventDefault();const M=G[s];if(!M){c(t("llm.invalidPreset"));return}if(!p.trim()){c(t("llm.nameRequired"));return}if(!n.trim()){c(t("llm.baseUrlRequired"));return}if(!f.trim()){c(t("llm.modelRequired"));return}if(!T.trim()){c(t("llm.apiKeyRequired"));return}try{await a.mutateAsync({name:p.trim(),provider:M.provider,baseUrl:n.trim(),model:f.trim(),apiKey:T.trim()}),j(null),b.success(t("llm.addedWithKey",{name:p.trim()})),r(""),i("")}catch(H){const K=H?.message??String(H);c(K)}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("llm.addTitle")})}),e.jsxs("form",{onSubmit:h=>void O(h),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:t("llm.preset")}),e.jsxs(F,{value:String(s),onValueChange:h=>k(Number(h)),children:[e.jsx(z,{children:e.jsx(X,{})}),e.jsx(Y,{children:G.map((h,M)=>e.jsx(C,{value:String(M),children:t(`llm.presets.${h.key}`)},h.key))})]})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:t("llm.name")}),e.jsx(d,{value:p,onChange:h=>r(h.target.value),placeholder:t("llm.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(_,{className:"text-xs font-medium",children:t("llm.baseUrl")}),e.jsx(d,{value:n,onChange:h=>g(h.target.value),placeholder:t("llm.baseUrlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:t("llm.model")}),e.jsx(d,{value:f,onChange:h=>y(h.target.value),placeholder:t("llm.modelPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(_,{className:"text-xs font-medium",children:t("llm.apiKey")}),e.jsx(d,{type:"password",value:T,onChange:h=>i(h.target.value),placeholder:t("llm.apiKeyPlaceholder"),className:"font-mono text-xs",autoComplete:"off"})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:items-end",children:[x&&e.jsx("p",{className:"text-xs text-danger",children:x}),e.jsxs(N,{type:"submit",disabled:a.isPending,className:"ml-auto",children:[a.isPending?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx($e,{className:"h-4 w-4"}),t("llm.addBackend")]})]})})]})]})}export{Gs as default};
37
+ //# sourceMappingURL=llm-JjZDbBvJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-JjZDbBvJ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/cpu.js","../../node_modules/lucide-react/dist/esm/icons/file-stack.js","../../node_modules/lucide-react/dist/esm/icons/gauge.js","../../node_modules/lucide-react/dist/esm/icons/key-round.js","../../node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js","../../node_modules/lucide-react/dist/esm/icons/waves.js","../../node_modules/lucide-react/dist/esm/icons/zap.js","../../src/routes/settings/native-agent.tsx","../../src/routes/settings/llm.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Cpu = createLucideIcon(\"Cpu\", [\n [\"rect\", { width: \"16\", height: \"16\", x: \"4\", y: \"4\", rx: \"2\", key: \"14l7u7\" }],\n [\"rect\", { width: \"6\", height: \"6\", x: \"9\", y: \"9\", rx: \"1\", key: \"5aljv4\" }],\n [\"path\", { d: \"M15 2v2\", key: \"13l42r\" }],\n [\"path\", { d: \"M15 20v2\", key: \"15mkzm\" }],\n [\"path\", { d: \"M2 15h2\", key: \"1gxd5l\" }],\n [\"path\", { d: \"M2 9h2\", key: \"1bbxkp\" }],\n [\"path\", { d: \"M20 15h2\", key: \"19e6y8\" }],\n [\"path\", { d: \"M20 9h2\", key: \"19tzq7\" }],\n [\"path\", { d: \"M9 2v2\", key: \"165o2o\" }],\n [\"path\", { d: \"M9 20v2\", key: \"i2bqo8\" }]\n]);\n\nexport { Cpu as default };\n//# sourceMappingURL=cpu.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileStack = createLucideIcon(\"FileStack\", [\n [\"path\", { d: \"M21 7h-3a2 2 0 0 1-2-2V2\", key: \"9rb54x\" }],\n [\n \"path\",\n {\n d: \"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z\",\n key: \"1059l0\"\n }\n ],\n [\"path\", { d: \"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15\", key: \"16874u\" }],\n [\"path\", { d: \"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11\", key: \"k2ox98\" }]\n]);\n\nexport { FileStack as default };\n//# sourceMappingURL=file-stack.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Gauge = createLucideIcon(\"Gauge\", [\n [\"path\", { d: \"m12 14 4-4\", key: \"9kzdfg\" }],\n [\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\", key: \"19p75a\" }]\n]);\n\nexport { Gauge as default };\n//# sourceMappingURL=gauge.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst KeyRound = createLucideIcon(\"KeyRound\", [\n [\n \"path\",\n {\n d: \"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\",\n key: \"1s6t7t\"\n }\n ],\n [\"circle\", { cx: \"16.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"w0ekpg\" }]\n]);\n\nexport { KeyRound as default };\n//# sourceMappingURL=key-round.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SlidersHorizontal = createLucideIcon(\"SlidersHorizontal\", [\n [\"line\", { x1: \"21\", x2: \"14\", y1: \"4\", y2: \"4\", key: \"obuewd\" }],\n [\"line\", { x1: \"10\", x2: \"3\", y1: \"4\", y2: \"4\", key: \"1q6298\" }],\n [\"line\", { x1: \"21\", x2: \"12\", y1: \"12\", y2: \"12\", key: \"1iu8h1\" }],\n [\"line\", { x1: \"8\", x2: \"3\", y1: \"12\", y2: \"12\", key: \"ntss68\" }],\n [\"line\", { x1: \"21\", x2: \"16\", y1: \"20\", y2: \"20\", key: \"14d8ph\" }],\n [\"line\", { x1: \"12\", x2: \"3\", y1: \"20\", y2: \"20\", key: \"m0wm8r\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"2\", y2: \"6\", key: \"14e1ph\" }],\n [\"line\", { x1: \"8\", x2: \"8\", y1: \"10\", y2: \"14\", key: \"1i6ji0\" }],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"18\", y2: \"22\", key: \"1lctlv\" }]\n]);\n\nexport { SlidersHorizontal as default };\n//# sourceMappingURL=sliders-horizontal.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Waves = createLucideIcon(\"Waves\", [\n [\n \"path\",\n {\n d: \"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"knzxuh\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"2jd2cc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"rd2r6e\"\n }\n ]\n]);\n\nexport { Waves as default };\n//# sourceMappingURL=waves.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Zap = createLucideIcon(\"Zap\", [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n]);\n\nexport { Zap as default };\n//# sourceMappingURL=zap.js.map\n","/**\n * /settings/native-agent — focused env editor for Agim Agent +\n * notification evaluator + heartbeat (Stage 6).\n *\n * All three subsystems are env-driven; their env keys are already in\n * ENV_EDITABLE_KEYS so the generic /api/env GET+PUT pair works. This\n * page just gives them a curated form so operators don't have to dig\n * through the 200+-key generic env editor.\n *\n * The actual model API selection (which LLM, which role) lives on\n * /settings/llm; this module covers behavioral knobs.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bell, Cpu, FileStack, Gauge, HeartPulse, Loader2, Network,\n RefreshCcw, Save, ShieldAlert, Waves, X,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport { useEnv, useUpdateEnv } from '@/hooks/use-settings'\n\ntype ApprovalMode = 'allow-all' | 'read-only' | 'allow-list' | 'deny-all'\n\ninterface Draft {\n // Agim Agent\n role: string\n mode: ApprovalMode\n autoAllow: string\n denyList: string\n // Notification evaluator\n evalEnabled: boolean\n evalSources: string\n // Heartbeat\n hbEnabled: boolean\n hbTickMs: string\n hbDefaultMin: string\n // v1.2.126 — runtime caps (each one optional / empty = use default)\n toolResultCap: string\n toolTimeoutMs: string\n blankRetryMax: string\n lengthRecoveryMax: string\n // v1.2.127 — A2A 子 Agent 派生\n a2aMaxDepth: string\n a2aTimeoutMs: string\n callAgentInProcess: boolean\n callAgentMaxPerTurn: string\n // v1.2.127 — 早停 + 复盘\n semanticStuckLoop: boolean\n criticEnabled: boolean\n criticRole: string\n planModeDefault: boolean\n // v1.2.135 — heuristic auto-enter on plan-intent keywords\n planIntentAuto: boolean\n planIntentPhrases: string\n // v1.2.127 — Auto-compact 4 旋钮(OpenHands Condenser)\n compactTriggerChars: string\n compactKeepTurns: string\n compactKeepFirst: string\n compactSummaryChars: string\n // v1.2.127 — 流式 + 迭代\n streamPartial: boolean\n maxIter: string\n}\n\nfunction draftFromEnv(env: Record<string, string>): Draft {\n return {\n role: env.AGIM_NATIVE_AGENT_ROLE ?? '',\n mode: (env.AGIM_NATIVE_AGENT_MODE as ApprovalMode | undefined) || 'read-only',\n autoAllow: env.AGIM_NATIVE_AGENT_AUTOALLOW ?? '',\n denyList: env.AGIM_NATIVE_AGENT_DENYLIST ?? '',\n evalEnabled: isTruthy(env.AGIM_NOTIFICATION_EVALUATOR),\n evalSources: env.AGIM_NOTIFICATION_EVALUATOR_SOURCES ?? '',\n hbEnabled: isTruthy(env.AGIM_HEARTBEAT_ENABLED),\n hbTickMs: env.AGIM_HEARTBEAT_TICK_INTERVAL_MS ?? '',\n hbDefaultMin: env.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN ?? '',\n toolResultCap: env.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS ?? '',\n toolTimeoutMs: env.AGIM_NATIVE_TOOL_TIMEOUT_MS ?? '',\n blankRetryMax: env.AGIM_NATIVE_BLANK_RETRY_MAX ?? '',\n lengthRecoveryMax: env.AGIM_NATIVE_LENGTH_RECOVERY_MAX ?? '',\n a2aMaxDepth: env.AGIM_A2A_MAX_DEPTH ?? '',\n a2aTimeoutMs: env.AGIM_A2A_TIMEOUT_DEFAULT_MS ?? '',\n // Default ON: only 'off' / '0' / 'no' / 'false' disable.\n callAgentInProcess: !isFalsy(env.AGIM_NATIVE_CALL_AGENT_IN_PROCESS),\n callAgentMaxPerTurn: env.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN ?? '',\n semanticStuckLoop: !isFalsy(env.AGIM_NATIVE_SEMANTIC_STUCK_LOOP),\n criticEnabled: isTruthy(env.AGIM_NATIVE_CRITIC),\n criticRole: env.AGIM_NATIVE_CRITIC_ROLE ?? '',\n planModeDefault: isTruthy(env.AGIM_NATIVE_PLAN_MODE),\n planIntentAuto: isTruthy(env.AGIM_PLAN_INTENT_AUTO),\n planIntentPhrases: env.AGIM_PLAN_INTENT_PHRASES ?? '',\n compactTriggerChars: env.AGIM_NATIVE_COMPACT_TRIGGER_CHARS ?? '',\n compactKeepTurns: env.AGIM_NATIVE_COMPACT_KEEP_TURNS ?? '',\n compactKeepFirst: env.AGIM_NATIVE_COMPACT_KEEP_FIRST ?? '',\n compactSummaryChars: env.AGIM_NATIVE_COMPACT_SUMMARY_CHARS ?? '',\n streamPartial: !isFalsy(env.AGIM_NATIVE_STREAM_PARTIAL),\n maxIter: env.AGIM_NATIVE_AGENT_MAX_ITER ?? '',\n }\n}\n\n/** Mirror of the native-side parser: 'off' / '0' / 'no' / 'false'\n * (case-insensitive) disables a feature whose default is ON. Empty\n * string means \"not set\" — caller decides whether that's ON or OFF\n * depending on the variable's default. */\nfunction isFalsy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase().trim()\n return s === 'off' || s === 'false' || s === '0' || s === 'no'\n}\n\nfunction isTruthy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase()\n return s === '1' || s === 'true' || s === 'yes' || s === 'on'\n}\n\nfunction SubtitleWithLlmLink(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const subtitle = t('nativeAgent.subtitle')\n const link = t('nativeAgent.llmLink')\n const idx = subtitle.indexOf(link)\n if (idx === -1) {\n return <p className=\"text-sm text-text-dim\">{subtitle}</p>\n }\n return (\n <p className=\"text-sm text-text-dim\">\n {subtitle.slice(0, idx)}\n <a className=\"underline\" href={link}>{link}</a>\n {subtitle.slice(idx + link.length)}\n </p>\n )\n}\n\nexport default function SettingsNativeAgentRoute(): JSX.Element {\n return <NativeAgentSettingsPanel />\n}\n\nexport interface NativeAgentSettingsPanelProps {\n embedded?: boolean\n}\n\nexport function NativeAgentSettingsPanel({ embedded = false }: NativeAgentSettingsPanelProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv({ reveal: false })\n const updateEnv = useUpdateEnv()\n\n const envData = envQuery.data?.env ?? {}\n const current = useMemo(() => draftFromEnv(envData), [envData])\n const [draft, setDraft] = useState<Draft>(current)\n const [syncedHash, setSyncedHash] = useState('')\n\n useEffect(() => {\n const hash = JSON.stringify(current)\n if (hash !== syncedHash) {\n setDraft(current)\n setSyncedHash(hash)\n }\n }, [current, syncedHash])\n\n const isDirty = JSON.stringify(draft) !== JSON.stringify(current)\n\n function setField<K extends keyof Draft>(k: K, v: Draft[K]): void {\n setDraft((d) => ({ ...d, [k]: v }))\n }\n\n async function onSave(): Promise<void> {\n const updates: Record<string, string | null> = {}\n if (draft.role !== current.role) {\n updates.AGIM_NATIVE_AGENT_ROLE = draft.role.trim() || null\n }\n if (draft.mode !== current.mode) {\n updates.AGIM_NATIVE_AGENT_MODE = draft.mode\n }\n if (draft.autoAllow !== current.autoAllow) {\n updates.AGIM_NATIVE_AGENT_AUTOALLOW = draft.autoAllow.trim() || null\n }\n if (draft.denyList !== current.denyList) {\n updates.AGIM_NATIVE_AGENT_DENYLIST = draft.denyList.trim() || null\n }\n if (draft.evalEnabled !== current.evalEnabled) {\n updates.AGIM_NOTIFICATION_EVALUATOR = draft.evalEnabled ? 'on' : null\n }\n if (draft.evalSources !== current.evalSources) {\n updates.AGIM_NOTIFICATION_EVALUATOR_SOURCES = draft.evalSources.trim() || null\n }\n if (draft.hbEnabled !== current.hbEnabled) {\n updates.AGIM_HEARTBEAT_ENABLED = draft.hbEnabled ? 'on' : null\n }\n if (draft.hbTickMs !== current.hbTickMs) {\n updates.AGIM_HEARTBEAT_TICK_INTERVAL_MS = draft.hbTickMs.trim() || null\n }\n if (draft.hbDefaultMin !== current.hbDefaultMin) {\n updates.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN = draft.hbDefaultMin.trim() || null\n }\n if (draft.toolResultCap !== current.toolResultCap) {\n updates.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS = draft.toolResultCap.trim() || null\n }\n if (draft.toolTimeoutMs !== current.toolTimeoutMs) {\n updates.AGIM_NATIVE_TOOL_TIMEOUT_MS = draft.toolTimeoutMs.trim() || null\n }\n if (draft.blankRetryMax !== current.blankRetryMax) {\n updates.AGIM_NATIVE_BLANK_RETRY_MAX = draft.blankRetryMax.trim() || null\n }\n if (draft.lengthRecoveryMax !== current.lengthRecoveryMax) {\n updates.AGIM_NATIVE_LENGTH_RECOVERY_MAX = draft.lengthRecoveryMax.trim() || null\n }\n // v1.2.127 — A2A\n if (draft.a2aMaxDepth !== current.a2aMaxDepth) {\n updates.AGIM_A2A_MAX_DEPTH = draft.a2aMaxDepth.trim() || null\n }\n if (draft.a2aTimeoutMs !== current.a2aTimeoutMs) {\n updates.AGIM_A2A_TIMEOUT_DEFAULT_MS = draft.a2aTimeoutMs.trim() || null\n }\n if (draft.callAgentInProcess !== current.callAgentInProcess) {\n // Default ON: write only when operator turned OFF; ON = delete the env.\n updates.AGIM_NATIVE_CALL_AGENT_IN_PROCESS = draft.callAgentInProcess ? null : 'off'\n }\n if (draft.callAgentMaxPerTurn !== current.callAgentMaxPerTurn) {\n updates.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN = draft.callAgentMaxPerTurn.trim() || null\n }\n // v1.2.127 — 早停 + 复盘\n if (draft.semanticStuckLoop !== current.semanticStuckLoop) {\n updates.AGIM_NATIVE_SEMANTIC_STUCK_LOOP = draft.semanticStuckLoop ? null : 'off'\n }\n if (draft.criticEnabled !== current.criticEnabled) {\n updates.AGIM_NATIVE_CRITIC = draft.criticEnabled ? 'on' : null\n }\n if (draft.criticRole !== current.criticRole) {\n updates.AGIM_NATIVE_CRITIC_ROLE = draft.criticRole.trim() || null\n }\n if (draft.planModeDefault !== current.planModeDefault) {\n updates.AGIM_NATIVE_PLAN_MODE = draft.planModeDefault ? '1' : null\n }\n if (draft.planIntentAuto !== current.planIntentAuto) {\n updates.AGIM_PLAN_INTENT_AUTO = draft.planIntentAuto ? 'on' : null\n }\n if (draft.planIntentPhrases !== current.planIntentPhrases) {\n updates.AGIM_PLAN_INTENT_PHRASES = draft.planIntentPhrases.trim() || null\n }\n // v1.2.127 — Auto-compact\n if (draft.compactTriggerChars !== current.compactTriggerChars) {\n updates.AGIM_NATIVE_COMPACT_TRIGGER_CHARS = draft.compactTriggerChars.trim() || null\n }\n if (draft.compactKeepTurns !== current.compactKeepTurns) {\n updates.AGIM_NATIVE_COMPACT_KEEP_TURNS = draft.compactKeepTurns.trim() || null\n }\n if (draft.compactKeepFirst !== current.compactKeepFirst) {\n updates.AGIM_NATIVE_COMPACT_KEEP_FIRST = draft.compactKeepFirst.trim() || null\n }\n if (draft.compactSummaryChars !== current.compactSummaryChars) {\n updates.AGIM_NATIVE_COMPACT_SUMMARY_CHARS = draft.compactSummaryChars.trim() || null\n }\n // v1.2.127 — 流式 + 迭代\n if (draft.streamPartial !== current.streamPartial) {\n updates.AGIM_NATIVE_STREAM_PARTIAL = draft.streamPartial ? null : 'off'\n }\n if (draft.maxIter !== current.maxIter) {\n updates.AGIM_NATIVE_AGENT_MAX_ITER = draft.maxIter.trim() || null\n }\n if (Object.keys(updates).length === 0) return\n try {\n await updateEnv.mutateAsync({ updates })\n toast.success(t('nativeAgent.savedToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n function onDiscard(): void {\n setDraft(current)\n }\n\n return (\n <div className={embedded ? 'flex flex-col gap-6' : 'mx-auto flex max-w-4xl flex-col gap-6'}>\n {!embedded && (\n <>\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('nativeAgent.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void envQuery.refetch()}\n disabled={envQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('nativeAgent.refresh')}</span>\n </Button>\n </header>\n <SubtitleWithLlmLink />\n </>\n )}\n\n {envQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <NativeAgentCard draft={draft} setField={setField} />\n <RuntimeCapsCard draft={draft} setField={setField} />\n <A2ACard draft={draft} setField={setField} />\n <CriticCard draft={draft} setField={setField} />\n <CompactCard draft={draft} setField={setField} />\n <StreamCard draft={draft} setField={setField} />\n <EvaluatorCard draft={draft} setField={setField} />\n <HeartbeatCard draft={draft} setField={setField} />\n </>\n )}\n\n {isDirty && (\n <div className={embedded\n ? 'flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'\n : 'sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'}\n >\n <Badge variant=\"info\">{t('nativeAgent.unsaved')}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={onDiscard}\n disabled={updateEnv.isPending}\n >\n <X className=\"h-4 w-4\" /> {t('nativeAgent.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateEnv.isPending}\n >\n {updateEnv.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Save className=\"h-4 w-4\" />}\n {t('nativeAgent.save')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface CardProps {\n draft: Draft\n setField: <K extends keyof Draft>(k: K, v: Draft[K]) => void\n}\n\nfunction NativeAgentCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Cpu className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.agentCard')}</h2>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.roleOverride')}\n hint={t('nativeAgent.roleHint')}\n >\n <Input\n value={draft.role}\n onChange={(e) => setField('role', e.target.value)}\n placeholder=\"native-chat\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.approvalMode')}\n hint={t('nativeAgent.approvalHint')}\n >\n <Select\n value={draft.mode}\n onValueChange={(v) => setField('mode', v as ApprovalMode)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"read-only\">{t('nativeAgent.modeReadOnly')}</SelectItem>\n <SelectItem value=\"allow-list\">{t('nativeAgent.modeAllowList')}</SelectItem>\n <SelectItem value=\"allow-all\">{t('nativeAgent.modeAllowAll')}</SelectItem>\n <SelectItem value=\"deny-all\">{t('nativeAgent.modeDenyAll')}</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n <Field\n label={t('nativeAgent.autoAllow')}\n hint={t('nativeAgent.autoAllowHint')}\n >\n <Input\n value={draft.autoAllow}\n onChange={(e) => setField('autoAllow', e.target.value)}\n placeholder=\"native_,mcp_filesystem_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.denyList')}\n hint={t('nativeAgent.denyListHint')}\n >\n <Input\n value={draft.denyList}\n onChange={(e) => setField('denyList', e.target.value)}\n placeholder=\"mcp_shell_,mcp_dangerous_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction EvaluatorCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Bell className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.evaluatorCard')}</h2>\n {draft.evalEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.evalDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field label={t('nativeAgent.enableGate')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.evalEnabled}\n onChange={(e) => setField('evalEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.filterViaLlm')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.evalSources')}\n hint={t('nativeAgent.evalSourcesHint')}\n >\n <Input\n value={draft.evalSources}\n onChange={(e) => setField('evalSources', e.target.value)}\n placeholder=\"push,heartbeat\"\n className=\"font-mono text-xs\"\n disabled={!draft.evalEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction HeartbeatCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <HeartPulse className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.heartbeatCard')}</h2>\n {draft.hbEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.hbDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n <Field label={t('nativeAgent.enableScheduler')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.hbEnabled}\n onChange={(e) => setField('hbEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.startScanLoop')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.tickInterval')}\n hint={t('nativeAgent.tickHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbTickMs}\n onChange={(e) => setField('hbTickMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.defaultInterval')}\n hint={t('nativeAgent.defaultIntervalHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbDefaultMin}\n onChange={(e) => setField('hbDefaultMin', e.target.value)}\n placeholder=\"15\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction RuntimeCapsCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Gauge className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.runtimeCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.runtimeDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.toolResultCap')}\n hint={t('nativeAgent.toolResultCapHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolResultCap}\n onChange={(e) => setField('toolResultCap', e.target.value)}\n placeholder=\"64000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.toolTimeoutMs')}\n hint={t('nativeAgent.toolTimeoutHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolTimeoutMs}\n onChange={(e) => setField('toolTimeoutMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.blankRetryMax')}\n hint={t('nativeAgent.blankRetryHint')}\n >\n <Input\n type=\"number\"\n value={draft.blankRetryMax}\n onChange={(e) => setField('blankRetryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.lengthRecoveryMax')}\n hint={t('nativeAgent.lengthRecoveryHint')}\n >\n <Input\n type=\"number\"\n value={draft.lengthRecoveryMax}\n onChange={(e) => setField('lengthRecoveryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction A2ACard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.a2aCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.a2aDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.a2aMaxDepth')}\n hint={t('nativeAgent.a2aMaxDepthHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aMaxDepth}\n onChange={(e) => setField('a2aMaxDepth', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.a2aTimeoutMs')}\n hint={t('nativeAgent.a2aTimeoutMsHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aTimeoutMs}\n onChange={(e) => setField('a2aTimeoutMs', e.target.value)}\n placeholder=\"1800000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.callAgentInProcess')}\n hint={t('nativeAgent.callAgentInProcessHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.callAgentInProcess}\n onChange={(e) => setField('callAgentInProcess', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.callAgentInProcess ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.callAgentMaxPerTurn')}\n hint={t('nativeAgent.callAgentMaxPerTurnHint')}\n >\n <Input\n type=\"number\"\n value={draft.callAgentMaxPerTurn}\n onChange={(e) => setField('callAgentMaxPerTurn', e.target.value)}\n placeholder=\"2\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CriticCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <ShieldAlert className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.criticCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.criticDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.semanticStuckLoop')}\n hint={t('nativeAgent.semanticStuckLoopHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.semanticStuckLoop}\n onChange={(e) => setField('semanticStuckLoop', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.semanticStuckLoop ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticEnabled')}\n hint={t('nativeAgent.criticEnabledHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.criticEnabled}\n onChange={(e) => setField('criticEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.criticEnabled ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticRole')}\n hint={t('nativeAgent.criticRoleHint')}\n >\n <Input\n value={draft.criticRole}\n onChange={(e) => setField('criticRole', e.target.value)}\n placeholder=\"(use main backend)\"\n className=\"font-mono text-xs\"\n disabled={!draft.criticEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.planModeDefault')}\n hint={t('nativeAgent.planModeDefaultHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planModeDefault}\n onChange={(e) => setField('planModeDefault', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planModeDefault ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentAuto')}\n hint={t('nativeAgent.planIntentAutoHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planIntentAuto}\n onChange={(e) => setField('planIntentAuto', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planIntentAuto ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentPhrases')}\n hint={t('nativeAgent.planIntentPhrasesHint')}\n >\n <Input\n value={draft.planIntentPhrases}\n onChange={(e) => setField('planIntentPhrases', e.target.value)}\n placeholder=\"先想想,plan only,don't act yet\"\n className=\"font-mono text-xs\"\n disabled={!draft.planIntentAuto}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CompactCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <FileStack className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.compactCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.compactDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.compactTriggerChars')}\n hint={t('nativeAgent.compactTriggerCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactTriggerChars}\n onChange={(e) => setField('compactTriggerChars', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepTurns')}\n hint={t('nativeAgent.compactKeepTurnsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepTurns}\n onChange={(e) => setField('compactKeepTurns', e.target.value)}\n placeholder=\"6\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepFirst')}\n hint={t('nativeAgent.compactKeepFirstHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepFirst}\n onChange={(e) => setField('compactKeepFirst', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactSummaryChars')}\n hint={t('nativeAgent.compactSummaryCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactSummaryChars}\n onChange={(e) => setField('compactSummaryChars', e.target.value)}\n placeholder=\"1500\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction StreamCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Waves className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.streamCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.streamDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.streamPartial')}\n hint={t('nativeAgent.streamPartialHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.streamPartial}\n onChange={(e) => setField('streamPartial', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.streamPartial ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.maxIter')}\n hint={t('nativeAgent.maxIterHint')}\n >\n <Input\n type=\"number\"\n value={draft.maxIter}\n onChange={(e) => setField('maxIter', e.target.value)}\n placeholder=\"50\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n children: React.ReactNode\n}\nfunction Field({ label, hint, children }: FieldProps): JSX.Element {\n return (\n <div className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{label}</Label>\n {children}\n {hint && <p className=\"text-[11px] text-text-dim\">{hint}</p>}\n </div>\n )\n}\n","/**\n * /settings/llm — Agim Agent model APIs + runtime settings.\n *\n * Front-end for the `/api/llm/*` REST surface that landed in Stage 4.\n * Operators add an OpenAI-compatible or Anthropic API, paste an API\n * key, optionally bind roles (cheap / evaluator / native-chat), and\n * tune built-in Agim Agent runtime behavior without hand-editing\n * ~/.agim/config.json.\n *\n * Intentionally minimal styling — focused on doing the job; matches\n * the existing settings pages' shadcn look without bespoke chrome.\n */\n\nimport { type FormEvent, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Link } from 'react-router-dom'\nimport { toast } from 'sonner'\nimport {\n AlertCircle,\n ArrowRight,\n ChevronDown,\n ChevronRight,\n CheckCircle2,\n KeyRound,\n Loader2,\n MessageSquare,\n Plug,\n Plus,\n RefreshCcw,\n SlidersHorizontal,\n Trash2,\n Zap,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useLlmList, useLlmAddBackend, useLlmRemoveBackend, useLlmPutRoles, useLlmPing,\n} from '@/hooks/use-llm-admin'\nimport { useConfig, useUpdateConfig } from '@/hooks/use-settings'\nimport {\n DEFAULT_LLM_PRESET,\n LLM_PRESETS,\n suggestLlmBackendName,\n type LlmPresetKey,\n} from '@/lib/llm-presets'\nimport { NativeAgentSettingsPanel } from '@/routes/settings/native-agent'\n\nconst KNOWN_ROLES = ['cheap', 'evaluator', 'native-chat'] as const\nconst UNBIND_SENTINEL = '__unbind__'\n\ninterface ProbeErrorState {\n backend: string\n message: string\n}\n\nexport default function SettingsLlmRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useLlmList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('llm.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('llm.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('llm.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <QuickAgentSetupCard\n data={listQuery.data}\n onRefresh={() => { void listQuery.refetch() }}\n />\n <LlmNextStepCard data={listQuery.data} />\n <AdvancedLlmSection data={listQuery.data} />\n </>\n )}\n </div>\n )\n}\n\nfunction AdvancedLlmSection({\n data,\n}: {\n data: ReturnType<typeof useLlmList>['data']\n}): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const [open, setOpen] = useState(false)\n return (\n <>\n <section className=\"flex flex-col gap-3 rounded-md border border-border bg-surface px-4 py-3 sm:flex-row sm:items-center\">\n <span className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim\">\n <SlidersHorizontal className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h2 className=\"text-sm font-semibold\">{t('llm.advanced.title')}</h2>\n <Badge variant=\"outline\">{t('llm.advanced.badge')}</Badge>\n </div>\n <p className=\"mt-1 text-sm text-text-dim\">{t('llm.advanced.subtitle')}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n >\n {open ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronRight className=\"h-4 w-4\" />}\n <span>{open ? t('llm.advanced.hide') : t('llm.advanced.show')}</span>\n </Button>\n </section>\n\n {open && (\n <>\n <BackendsCard data={data} />\n <AddBackendCard />\n <RolesCard data={data} />\n <section id=\"agim-agent\" className=\"rounded-md border border-border bg-surface px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.agimAgentRuntimeTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.agimAgentRuntimeHint')}</p>\n </section>\n <NativeAgentSettingsPanel embedded />\n </>\n )}\n </>\n )\n}\n\nfunction LlmNextStepCard({\n data,\n}: {\n data: ReturnType<typeof useLlmList>['data']\n}): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const usableBackends = (data?.backends ?? []).filter((b) => b.secret.source !== 'none')\n const nativeRole = data?.roles?.['native-chat']\n const activeBackend = usableBackends.find((b) => b.name === nativeRole) ?? usableBackends[0]\n\n if (!activeBackend) {\n return (\n <section className=\"rounded-md border border-dashed border-border bg-surface px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.next.emptyTitle')}</h2>\n <p className=\"mt-1 text-sm text-text-dim\">{t('llm.next.emptyDetail')}</p>\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-success-bg text-success\">\n <MessageSquare className=\"h-5 w-5\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h2 className=\"text-sm font-semibold\">{t('llm.next.title')}</h2>\n <Badge variant=\"success\">{t('llm.next.backendBadge', { backend: activeBackend.name })}</Badge>\n </div>\n <p className=\"mt-1 text-sm text-text-dim\">{t('llm.next.detail')}</p>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <code className=\"rounded-md bg-surface-2 px-2 py-1 text-xs text-text\">/models</code>\n <code className=\"rounded-md bg-surface-2 px-2 py-1 text-xs text-text\">\n /model {activeBackend.name}\n </code>\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button asChild size=\"sm\">\n <Link to=\"/?welcome=1\">\n <span>{t('llm.next.chat')}</span>\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </Button>\n <Button asChild size=\"sm\" variant=\"secondary\">\n <Link to=\"/settings/messengers\">\n <Plug className=\"h-4 w-4\" />\n <span>{t('llm.next.im')}</span>\n </Link>\n </Button>\n </div>\n </div>\n </section>\n )\n}\n\n/* ─────────────── First-run quick setup ─────────────── */\n\nfunction QuickAgentSetupCard({\n data,\n onRefresh,\n}: {\n data: ReturnType<typeof useLlmList>['data']\n onRefresh: () => void\n}): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const updateConfig = useUpdateConfig()\n const addBackend = useLlmAddBackend()\n const putRoles = useLlmPutRoles()\n const ping = useLlmPing()\n const existingNames = useMemo(\n () => (data?.backends ?? []).map((b) => b.name),\n [data],\n )\n const usableBackends = (data?.backends ?? []).filter((b) => b.secret.source !== 'none')\n const nativeRole = data?.roles?.['native-chat']\n const activeBackend = usableBackends.find((b) => b.name === nativeRole) ?? usableBackends[0]\n const defaultIsNative = cfgQuery.data?.defaultAgent === 'native'\n const alreadyReady = Boolean(activeBackend && nativeRole && defaultIsNative)\n\n const [presetKey, setPresetKey] = useState<LlmPresetKey>('deepseek')\n const preset = useMemo(\n () => LLM_PRESETS.find((p) => p.key === presetKey) ?? DEFAULT_LLM_PRESET,\n [presetKey],\n )\n const [name, setName] = useState(() => suggestLlmBackendName(DEFAULT_LLM_PRESET.baseName, existingNames))\n const [baseUrl, setBaseUrl] = useState(DEFAULT_LLM_PRESET.baseUrl)\n const [model, setModel] = useState(DEFAULT_LLM_PRESET.model)\n const [apiKey, setApiKey] = useState('')\n const [setupResult, setSetupResult] = useState<{ tone: 'success' | 'warning'; message: string } | null>(null)\n const [probeError, setProbeError] = useState<ProbeErrorState | null>(null)\n const [phase, setPhase] = useState<'idle' | 'saving' | 'testing'>('idle')\n\n const busy = phase !== 'idle' || addBackend.isPending || putRoles.isPending || updateConfig.isPending || ping.isPending\n\n function applyPreset(next: LlmPresetKey): void {\n const p = LLM_PRESETS.find((item) => item.key === next) ?? DEFAULT_LLM_PRESET\n setPresetKey(next)\n setBaseUrl(p.baseUrl)\n setModel(p.model)\n setName(suggestLlmBackendName(p.baseName, existingNames))\n }\n\n async function enableExistingBackend(backendName: string): Promise<void> {\n try {\n await putRoles.mutateAsync({ 'native-chat': backendName })\n await updateConfig.mutateAsync({ defaultAgent: 'native' })\n await cfgQuery.refetch()\n onRefresh()\n toast.success(t('llm.quick.enabledToast'))\n } catch (err) {\n toast.error((err as Error)?.message ?? String(err))\n }\n }\n\n async function onQuickSubmit(e: FormEvent): Promise<void> {\n e.preventDefault()\n const backendName = name.trim()\n const endpoint = baseUrl.trim()\n const modelId = model.trim()\n if (!backendName) { toast.error(t('llm.nameRequired')); return }\n if (!endpoint || !/^https?:\\/\\//i.test(endpoint)) { toast.error(t('llm.baseUrlRequired')); return }\n if (!modelId) { toast.error(t('llm.modelRequired')); return }\n if (!apiKey.trim()) { toast.error(t('llm.apiKeyRequired')); return }\n setSetupResult(null)\n try {\n setPhase('saving')\n await addBackend.mutateAsync({\n name: backendName,\n provider: preset.provider,\n baseUrl: endpoint,\n model: modelId,\n apiKey: apiKey.trim(),\n })\n await putRoles.mutateAsync({ 'native-chat': backendName })\n await updateConfig.mutateAsync({ defaultAgent: 'native' })\n await cfgQuery.refetch()\n onRefresh()\n\n setPhase('testing')\n try {\n const probe = await ping.mutateAsync(backendName)\n if (probe.ok) {\n const message = t('llm.quick.testOk', { ms: probe.durationMs ?? 0 })\n setSetupResult({ tone: 'success', message })\n toast.success(t('llm.quick.setupDone'))\n } else {\n const message = probe.error || t('llm.quick.testFailed')\n setSetupResult({ tone: 'warning', message })\n setProbeError({ backend: backendName, message })\n }\n } catch (err) {\n const message = (err as Error)?.message ?? String(err)\n setSetupResult({ tone: 'warning', message })\n setProbeError({ backend: backendName, message })\n }\n setApiKey('')\n } catch (err) {\n toast.error((err as Error)?.message ?? String(err))\n } finally {\n setPhase('idle')\n }\n }\n\n const probeDialog = (\n <LlmProbeErrorDialog\n error={probeError}\n onOpenChange={(open) => { if (!open) setProbeError(null) }}\n />\n )\n\n if (activeBackend) {\n return (\n <>\n {probeDialog}\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-success-bg text-success\">\n <CheckCircle2 className=\"h-5 w-5\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h2 className=\"text-sm font-semibold\">{t('llm.quick.readyTitle')}</h2>\n <Badge variant={alreadyReady ? 'success' : 'warning'}>\n {alreadyReady ? t('llm.quick.readyBadge') : t('llm.quick.enableBadge')}\n </Badge>\n </div>\n <p className=\"mt-1 text-sm text-text-dim\">\n {alreadyReady\n ? t('llm.quick.readyDetail', { backend: activeBackend.name })\n : t('llm.quick.enableDetail', { backend: activeBackend.name })}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {!alreadyReady && (\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={busy}\n onClick={() => void enableExistingBackend(activeBackend.name)}\n >\n {busy ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Zap className=\"h-4 w-4\" />}\n <span>{t('llm.quick.enableAction')}</span>\n </Button>\n )}\n <Button asChild variant={alreadyReady ? 'default' : 'secondary'} size=\"sm\">\n <Link to=\"/?welcome=1\">\n <span>{t('llm.quick.chatAction')}</span>\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </Button>\n </div>\n </div>\n </section>\n </>\n )\n }\n\n return (\n <>\n {probeDialog}\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"mb-4 flex items-start gap-3\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-accent-bg text-accent\">\n <KeyRound className=\"h-5 w-5\" />\n </span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold\">{t('llm.quick.title')}</h2>\n <p className=\"mt-1 text-sm text-text-dim\">{t('llm.quick.subtitle')}</p>\n </div>\n </div>\n\n <form className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\" onSubmit={(e) => void onQuickSubmit(e)}>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.preset')}</Label>\n <Select value={presetKey} onValueChange={(v) => applyPreset(v as LlmPresetKey)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {LLM_PRESETS.map((p) => (\n <SelectItem key={p.key} value={p.key}>\n {t(`llm.presets.${p.key}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.apiKey')}</Label>\n <Input\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder={t('llm.apiKeyPlaceholder')}\n className=\"font-mono text-xs\"\n autoComplete=\"off\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.name')}</Label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t('llm.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.model')}</Label>\n <Input\n value={model}\n onChange={(e) => setModel(e.target.value)}\n placeholder={t('llm.modelPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('llm.baseUrl')}</Label>\n <Input\n value={baseUrl}\n onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={t('llm.baseUrlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"flex flex-col gap-2 sm:col-span-2 sm:flex-row sm:items-center\">\n {setupResult && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-text-dim\">\n {setupResult.tone === 'success'\n ? <CheckCircle2 className=\"h-4 w-4 shrink-0 text-success\" />\n : <AlertCircle className=\"h-4 w-4 shrink-0 text-warning\" />}\n <span className=\"break-words\">{setupResult.message}</span>\n </div>\n )}\n <Button type=\"submit\" disabled={busy} className=\"sm:ml-auto\">\n {busy ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Zap className=\"h-4 w-4\" />}\n {phase === 'testing'\n ? t('llm.quick.testing')\n : phase === 'saving'\n ? t('llm.quick.saving')\n : t('llm.quick.saveAndTest')}\n </Button>\n </div>\n </form>\n </section>\n </>\n )\n}\n\n/* ─────────────── Backends list ─────────────── */\n\nfunction BackendsCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeBackend = useLlmRemoveBackend()\n const ping = useLlmPing()\n const [pingResults, setPingResults] = useState<Record<string, string>>({})\n const [probeError, setProbeError] = useState<ProbeErrorState | null>(null)\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('llm.removeConfirm', { name }))) return\n try {\n const r = await removeBackend.mutateAsync(name)\n toast.success(t('llm.removedToast', { count: r.removedRoles }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onPing(name: string): Promise<void> {\n setPingResults((m) => ({ ...m, [name]: t('llm.pinging') }))\n try {\n const r = await ping.mutateAsync(name)\n const msg = r.ok\n ? `✓ ${r.durationMs}ms · tokens ${r.tokensIn}→${r.tokensOut}`\n : `✗ ${r.error}`\n setPingResults((m) => ({ ...m, [name]: msg }))\n if (!r.ok) setProbeError({ backend: name, message: r.error || t('llm.quick.testFailed') })\n } catch (err) {\n const message = (err as Error)?.message ?? String(err)\n setPingResults((m) => ({ ...m, [name]: `✗ ${message}` }))\n setProbeError({ backend: name, message })\n }\n }\n\n const rows = data?.backends ?? []\n if (rows.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('llm.backendsEmpty')}\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <LlmProbeErrorDialog\n error={probeError}\n onOpenChange={(open) => { if (!open) setProbeError(null) }}\n />\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.backendsTitle', { count: rows.length })}</h2>\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('llm.col.name')}</TableHead>\n <TableHead>{t('llm.col.provider')}</TableHead>\n <TableHead>{t('llm.col.model')}</TableHead>\n <TableHead>{t('llm.col.baseUrl')}</TableHead>\n <TableHead>{t('llm.col.apiKey')}</TableHead>\n <TableHead>{t('llm.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((b) => {\n const keyBadge = b.secret.source === 'none'\n ? <Badge variant=\"outline\">{t('llm.secretMissing')}</Badge>\n : <Badge variant=\"success\">{b.secret.source}</Badge>\n return (\n <TableRow key={b.name}>\n <TableCell className=\"font-mono text-xs\">{b.name}</TableCell>\n <TableCell>{b.provider}</TableCell>\n <TableCell className=\"font-mono text-xs\">{b.model}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{b.baseUrl ?? '—'}</TableCell>\n <TableCell>{keyBadge}</TableCell>\n <TableCell className=\"flex flex-col gap-1 sm:flex-row sm:items-center\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onPing(b.name)}\n disabled={ping.isPending || b.secret.source === 'none'}\n title={b.secret.source === 'none' ? t('llm.setKeyFirst') : t('llm.pingHint')}\n >\n <Zap className=\"h-4 w-4\" />\n <span>{t('llm.ping')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(b.name)}\n disabled={removeBackend.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('llm.remove')}</span>\n </Button>\n {pingResults[b.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{pingResults[b.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\nfunction isTemperatureDeprecatedError(message: string): boolean {\n return /temperature/i.test(message) && /deprecated|not supported|unsupported|invalid_params/i.test(message)\n}\n\nfunction LlmProbeErrorDialog({\n error,\n onOpenChange,\n}: {\n error: ProbeErrorState | null\n onOpenChange: (open: boolean) => void\n}): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const hint = error && isTemperatureDeprecatedError(error.message)\n ? t('llm.errorDialog.temperatureHint')\n : t('llm.errorDialog.defaultHint')\n return (\n <Dialog open={error != null} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-xl\">\n <DialogHeader>\n <DialogTitle>{t('llm.errorDialog.title')}</DialogTitle>\n <DialogDescription>\n {t('llm.errorDialog.description', { backend: error?.backend ?? '' })}\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-3\">\n <p className=\"text-sm text-text-dim\">{hint}</p>\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md border border-border bg-surface-2 p-3 text-xs text-text\">\n {error?.message ?? ''}\n </pre>\n </div>\n <DialogFooter>\n <Button type=\"button\" onClick={() => onOpenChange(false)}>\n {t('actions.close', { ns: 'common' })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\n/* ─────────────── Role bindings ─────────────── */\n\nfunction RolesCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const putRoles = useLlmPutRoles()\n const backendNames = (data?.backends ?? []).map((b) => b.name)\n const current = data?.roles ?? {}\n\n async function onChangeRole(role: string, value: string): Promise<void> {\n const next: Record<string, string | null> = {\n [role]: value === UNBIND_SENTINEL ? null : value,\n }\n try {\n await putRoles.mutateAsync(next)\n toast.success(t('llm.roleUpdated', { role }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.rolesTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.rolesOptionalHint')}</p>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n {KNOWN_ROLES.map((role) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{role}</Label>\n <Select\n value={current[role] ?? UNBIND_SENTINEL}\n onValueChange={(v) => void onChangeRole(role, v)}\n disabled={backendNames.length === 0 || putRoles.isPending}\n >\n <SelectTrigger className=\"font-mono text-xs\">\n <SelectValue placeholder={t('llm.unset')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={UNBIND_SENTINEL}>{t('llm.unbound')}</SelectItem>\n {backendNames.map((n) => (\n <SelectItem key={n} value={n}>{n}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[11px] text-text-dim\">\n {t(`llm.roleHint.${role}`)}\n </p>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\n/* ─────────────── Add backend form ─────────────── */\n\nfunction AddBackendCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addBackend = useLlmAddBackend()\n const [presetIdx, setPresetIdx] = useState(0)\n const [name, setName] = useState('')\n const [baseUrl, setBaseUrl] = useState(DEFAULT_LLM_PRESET.baseUrl)\n const [model, setModel] = useState(DEFAULT_LLM_PRESET.model)\n const [apiKey, setApiKey] = useState('')\n const [formError, setFormError] = useState<string | null>(null)\n\n function fail(message: string): void {\n setFormError(message)\n toast.error(message)\n }\n\n function onPickPreset(idx: number): void {\n setPresetIdx(idx)\n const p = LLM_PRESETS[idx]\n if (!p) return\n setBaseUrl(p.baseUrl)\n setModel(p.model)\n }\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n const p = LLM_PRESETS[presetIdx]\n if (!p) { fail(t('llm.invalidPreset')); return }\n if (!name.trim()) { fail(t('llm.nameRequired')); return }\n if (!baseUrl.trim()) { fail(t('llm.baseUrlRequired')); return }\n if (!model.trim()) { fail(t('llm.modelRequired')); return }\n if (!apiKey.trim()) { fail(t('llm.apiKeyRequired')); return }\n try {\n await addBackend.mutateAsync({\n name: name.trim(),\n provider: p.provider,\n baseUrl: baseUrl.trim(),\n model: model.trim(),\n apiKey: apiKey.trim(),\n })\n setFormError(null)\n toast.success(t('llm.addedWithKey', { name: name.trim() }))\n setName(''); setApiKey('')\n } catch (err) {\n const message = ((err as Error)?.message ?? String(err))\n fail(message)\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.addTitle')}</h2>\n </header>\n <form onSubmit={(e) => void onSubmit(e)} className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.preset')}</Label>\n <Select value={String(presetIdx)} onValueChange={(v) => onPickPreset(Number(v))}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {LLM_PRESETS.map((p, i) => (\n <SelectItem key={p.key} value={String(i)}>\n {t(`llm.presets.${p.key}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.name')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('llm.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('llm.baseUrl')}</Label>\n <Input\n value={baseUrl} onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={t('llm.baseUrlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.model')}</Label>\n <Input\n value={model} onChange={(e) => setModel(e.target.value)}\n placeholder={t('llm.modelPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.apiKey')}</Label>\n <Input\n type=\"password\"\n value={apiKey} onChange={(e) => setApiKey(e.target.value)}\n placeholder={t('llm.apiKeyPlaceholder')}\n className=\"font-mono text-xs\"\n autoComplete=\"off\"\n />\n </div>\n <div className=\"sm:col-span-2 flex\">\n <div className=\"flex w-full flex-col gap-2 sm:items-end\">\n {formError && (\n <p className=\"text-xs text-danger\">{formError}</p>\n )}\n <Button\n type=\"submit\"\n disabled={addBackend.isPending}\n className=\"ml-auto\"\n >\n {addBackend.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('llm.addBackend')}\n </Button>\n </div>\n </div>\n </form>\n </section>\n )\n}\n"],"names":["Cpu","createLucideIcon","FileStack","Gauge","KeyRound","SlidersHorizontal","Waves","Zap","draftFromEnv","env","isTruthy","isFalsy","v","s","SubtitleWithLlmLink","useTranslation","subtitle","link","idx","jsx","jsxs","NativeAgentSettingsPanel","embedded","t","envQuery","useEnv","updateEnv","useUpdateEnv","envData","current","useMemo","draft","setDraft","useState","syncedHash","setSyncedHash","useEffect","hash","isDirty","setField","k","d","onSave","updates","toast","err","onDiscard","Fragment","Button","Loader2","RefreshCcw","NativeAgentCard","RuntimeCapsCard","A2ACard","CriticCard","CompactCard","StreamCard","EvaluatorCard","HeartbeatCard","Badge","X","Save","Field","Input","e","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Bell","HeartPulse","Network","ShieldAlert","label","hint","children","Label","KNOWN_ROLES","UNBIND_SENTINEL","SettingsLlmRoute","listQuery","useLlmList","QuickAgentSetupCard","LlmNextStepCard","AdvancedLlmSection","data","open","setOpen","ChevronDown","ChevronRight","BackendsCard","AddBackendCard","RolesCard","usableBackends","b","nativeRole","activeBackend","MessageSquare","Link","ArrowRight","Plug","onRefresh","cfgQuery","useConfig","updateConfig","useUpdateConfig","addBackend","useLlmAddBackend","putRoles","useLlmPutRoles","ping","useLlmPing","existingNames","defaultIsNative","alreadyReady","presetKey","setPresetKey","preset","LLM_PRESETS","p","DEFAULT_LLM_PRESET","name","setName","suggestLlmBackendName","baseUrl","setBaseUrl","model","setModel","apiKey","setApiKey","setupResult","setSetupResult","probeError","setProbeError","phase","setPhase","busy","applyPreset","next","item","enableExistingBackend","backendName","onQuickSubmit","endpoint","modelId","probe","message","probeDialog","LlmProbeErrorDialog","CheckCircle2","AlertCircle","removeBackend","useLlmRemoveBackend","pingResults","setPingResults","onRemove","r","onPing","m","msg","rows","Table","TableHeader","TableRow","TableHead","TableBody","keyBadge","TableCell","Trash2","isTemperatureDeprecatedError","error","onOpenChange","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","backendNames","onChangeRole","role","value","n","presetIdx","setPresetIdx","formError","setFormError","fail","onPickPreset","onSubmit","i","Plus"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
@@ -0,0 +1,7 @@
1
+ import{h as e}from"./index-DCfdN5R7.js";/**
2
+ * @license lucide-react v0.469.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const r=e("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{r as L};
7
+ //# sourceMappingURL=loader-circle-DDdmcH0k.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-circle-DgdBWYl0.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"loader-circle-DDdmcH0k.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{o as c}from"./index-DHh1LYlA.js";/**
1
+ import{h as c}from"./index-DCfdN5R7.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=c("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);export{r as M};
7
- //# sourceMappingURL=map-pin-3QS1A0-I.js.map
7
+ //# sourceMappingURL=map-pin-C_jAxukI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-pin-3QS1A0-I.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"map-pin-C_jAxukI.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{o as A,u as L,af as M,j as e,B as k,ag as q,ah as z,l as C,ai as B,L as x,I as v,S as F,g as I,h as O,i as $,k as R,m as o}from"./index-DHh1LYlA.js";import{r as l}from"./react-DlP5eolq.js";import{T as E,a as D,b as H,c as b,d as J,e as N}from"./table-Dx65w6V0.js";import{L as P}from"./loader-circle-DgdBWYl0.js";import{R as V}from"./refresh-ccw-nBMm5Xal.js";import{A as U}from"./activity-BAgb2WZC.js";import{T as Q}from"./trash-2-7xrfqd-v.js";import{P as W}from"./plus-CfzKV_0u.js";/**
1
+ import{h as A,u as L,ao as M,j as e,e as k,ap as q,aq as z,d as C,ar as B,w as x,I as v,k as F,l as I,m as O,n as $,o as R,p as o}from"./index-DCfdN5R7.js";import{r as l}from"./react-DlP5eolq.js";import{T as E,a as D,b as H,c as b,d as J,e as N}from"./table-sCMZBe_Z.js";import{L as P}from"./loader-circle-DDdmcH0k.js";import{R as V}from"./refresh-ccw-DlAd-eTQ.js";import{A as U}from"./activity-ul8Os7Pz.js";import{T as Q}from"./trash-2-D2x2UPuZ.js";import{P as W}from"./plus-DH4J_YhN.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const G=A("ServerCog",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);function ce(){const{t}=L(["settings","common"]),s=M();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(G,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("mcp.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(V,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("mcp.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("mcp.subtitle")}),s.isLoading?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(K,{data:s.data}),e.jsx(Y,{})]})]})}function K({data:t}){const{t:s}=L(["settings","common"]),m=q(),p=z(),[i,u]=l.useState({});async function j(a){if(confirm(s("mcp.removeConfirm",{name:a})))try{await m.mutateAsync(a),o.success(s("mcp.removedToast",{name:a}))}catch(r){o.error(r?.message??String(r))}}async function y(a){u(r=>({...r,[a]:s("mcp.probing")}));try{const r=await p.mutateAsync(a),c=r.connected?`✓ ${r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}`:`✗ ${r.lastError??s("mcp.runtimeDisconnected")}`;u(h=>({...h,[a]:c}))}catch(r){u(c=>({...c,[a]:`✗ ${r?.message??String(r)}`}))}}const d=t?.servers??[],S=t?.runtime?.servers??[];return d.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("mcp.serversEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("mcp.serversTitle",{count:d.length})}),t?.runtime&&e.jsx(C,{variant:"info",children:s("mcp.totalTools",{count:t.runtime.totalTools})})]}),e.jsxs(E,{children:[e.jsx(D,{children:e.jsxs(H,{children:[e.jsx(b,{children:s("mcp.col.name")}),e.jsx(b,{children:s("mcp.col.transport")}),e.jsx(b,{children:s("mcp.col.target")}),e.jsx(b,{children:s("mcp.col.runtime")}),e.jsx(b,{children:s("mcp.col.actions")})]})}),e.jsx(J,{children:d.map(a=>{const r=S.find(n=>n.name===a.name),c=X(a,s),h=a.command?`${a.command} ${(a.args??[]).join(" ")}`.trim():a.url??"—",w=r?r.connected?e.jsx(C,{variant:"success",children:r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}):e.jsx(C,{variant:"danger",children:s("mcp.runtimeDisconnected")}):e.jsx(C,{variant:"outline",children:s("mcp.runtimeUnknown")});return e.jsxs(H,{children:[e.jsx(N,{className:"font-mono text-xs",children:a.name}),e.jsx(N,{children:c}),e.jsx(N,{className:"break-all font-mono text-[11px] text-text-dim",children:h}),e.jsx(N,{children:w}),e.jsxs(N,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void y(a.name),disabled:p.isPending,children:[e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{children:s("mcp.health")})]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void j(a.name),disabled:m.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("mcp.remove")})]}),i[a.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:i[a.name]})]})]},a.name)})})]})]})}function X(t,s){return t.command?s("mcp.transportStdio"):t.url?t.url.endsWith("/sse")?s("mcp.transportSse"):s("mcp.transportHttp"):"—"}function Y(){const{t}=L(["settings","common"]),s=B(),[m,p]=l.useState(""),[i,u]=l.useState("stdio"),[j,y]=l.useState(""),[d,S]=l.useState(""),[a,r]=l.useState(""),[c,h]=l.useState("");async function w(n){if(n.preventDefault(),!m.trim()){o.error(t("mcp.nameRequired"));return}let T;if(c.trim())try{T=JSON.parse(c)}catch{o.error(t("mcp.headersInvalid"));return}const g={name:m.trim()};if(i==="stdio"){if(!j.trim()){o.error(t("mcp.commandRequired"));return}g.command=j.trim();const f=d.split(/\s+/).filter(Boolean);f.length>0&&(g.args=f)}else{if(!a.trim()){o.error(t("mcp.urlRequired"));return}g.url=a.trim(),T&&(g.headers=T)}try{await s.mutateAsync(g),o.success(t("mcp.addedToast",{name:m.trim()})),p(""),y(""),S(""),r(""),h("")}catch(f){o.error(f?.message??String(f))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("mcp.addTitle")})}),e.jsxs("form",{onSubmit:n=>void w(n),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.nameLabel")}),e.jsx(v,{value:m,onChange:n=>p(n.target.value),placeholder:t("mcp.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.transportLabel")}),e.jsxs(F,{value:i,onValueChange:n=>u(n),children:[e.jsx(I,{children:e.jsx(O,{})}),e.jsxs($,{children:[e.jsx(R,{value:"stdio",children:t("mcp.transportStdioOption")}),e.jsx(R,{value:"http",children:t("mcp.transportHttpOption")})]})]})]}),i==="stdio"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.commandLabel")}),e.jsx(v,{value:j,onChange:n=>y(n.target.value),placeholder:t("mcp.commandPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.argsLabel")}),e.jsx(v,{value:d,onChange:n=>S(n.target.value),placeholder:"-y @modelcontextprotocol/server-filesystem /data",className:"font-mono text-xs"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.urlLabel")}),e.jsx(v,{value:a,onChange:n=>r(n.target.value),placeholder:t("mcp.urlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.headersLabel")}),e.jsx(v,{value:c,onChange:n=>h(n.target.value),placeholder:t("mcp.headersPlaceholder"),className:"font-mono text-xs"})]})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs(k,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),t("mcp.addServer")]})})]})]})}export{ce as default};
7
- //# sourceMappingURL=mcp-DwKZULET.js.map
6
+ */const G=A("ServerCog",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);function ce(){const{t}=L(["settings","common"]),s=M();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(G,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("mcp.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(V,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("mcp.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("mcp.subtitle")}),s.isLoading?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(K,{data:s.data}),e.jsx(Y,{})]})]})}function K({data:t}){const{t:s}=L(["settings","common"]),m=q(),p=z(),[i,u]=l.useState({});async function j(r){if(confirm(s("mcp.removeConfirm",{name:r})))try{await m.mutateAsync(r),o.success(s("mcp.removedToast",{name:r}))}catch(a){o.error(a?.message??String(a))}}async function y(r){u(a=>({...a,[r]:s("mcp.probing")}));try{const a=await p.mutateAsync(r),c=a.connected?`✓ ${a.toolCount===1?s("mcp.runtimeConnectedOne",{count:a.toolCount}):s("mcp.runtimeConnected",{count:a.toolCount})}`:`✗ ${a.lastError??s("mcp.runtimeDisconnected")}`;u(h=>({...h,[r]:c}))}catch(a){u(c=>({...c,[r]:`✗ ${a?.message??String(a)}`}))}}const d=t?.servers??[],S=t?.runtime?.servers??[];return d.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("mcp.serversEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("mcp.serversTitle",{count:d.length})}),t?.runtime&&e.jsx(C,{variant:"info",children:s("mcp.totalTools",{count:t.runtime.totalTools})})]}),e.jsxs(E,{children:[e.jsx(D,{children:e.jsxs(H,{children:[e.jsx(b,{children:s("mcp.col.name")}),e.jsx(b,{children:s("mcp.col.transport")}),e.jsx(b,{children:s("mcp.col.target")}),e.jsx(b,{children:s("mcp.col.runtime")}),e.jsx(b,{children:s("mcp.col.actions")})]})}),e.jsx(J,{children:d.map(r=>{const a=S.find(n=>n.name===r.name),c=X(r,s),h=r.command?`${r.command} ${(r.args??[]).join(" ")}`.trim():r.url??"—",w=a?a.connected?e.jsx(C,{variant:"success",children:a.toolCount===1?s("mcp.runtimeConnectedOne",{count:a.toolCount}):s("mcp.runtimeConnected",{count:a.toolCount})}):e.jsx(C,{variant:"danger",children:s("mcp.runtimeDisconnected")}):e.jsx(C,{variant:"outline",children:s("mcp.runtimeUnknown")});return e.jsxs(H,{children:[e.jsx(N,{className:"font-mono text-xs",children:r.name}),e.jsx(N,{children:c}),e.jsx(N,{className:"break-all font-mono text-[11px] text-text-dim",children:h}),e.jsx(N,{children:w}),e.jsxs(N,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void y(r.name),disabled:p.isPending,children:[e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{children:s("mcp.health")})]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void j(r.name),disabled:m.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("mcp.remove")})]}),i[r.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:i[r.name]})]})]},r.name)})})]})]})}function X(t,s){return t.command?s("mcp.transportStdio"):t.url?t.url.endsWith("/sse")?s("mcp.transportSse"):s("mcp.transportHttp"):"—"}function Y(){const{t}=L(["settings","common"]),s=B(),[m,p]=l.useState(""),[i,u]=l.useState("stdio"),[j,y]=l.useState(""),[d,S]=l.useState(""),[r,a]=l.useState(""),[c,h]=l.useState("");async function w(n){if(n.preventDefault(),!m.trim()){o.error(t("mcp.nameRequired"));return}let T;if(c.trim())try{T=JSON.parse(c)}catch{o.error(t("mcp.headersInvalid"));return}const g={name:m.trim()};if(i==="stdio"){if(!j.trim()){o.error(t("mcp.commandRequired"));return}g.command=j.trim();const f=d.split(/\s+/).filter(Boolean);f.length>0&&(g.args=f)}else{if(!r.trim()){o.error(t("mcp.urlRequired"));return}g.url=r.trim(),T&&(g.headers=T)}try{await s.mutateAsync(g),o.success(t("mcp.addedToast",{name:m.trim()})),p(""),y(""),S(""),a(""),h("")}catch(f){o.error(f?.message??String(f))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("mcp.addTitle")})}),e.jsxs("form",{onSubmit:n=>void w(n),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.nameLabel")}),e.jsx(v,{value:m,onChange:n=>p(n.target.value),placeholder:t("mcp.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.transportLabel")}),e.jsxs(F,{value:i,onValueChange:n=>u(n),children:[e.jsx(I,{children:e.jsx(O,{})}),e.jsxs($,{children:[e.jsx(R,{value:"stdio",children:t("mcp.transportStdioOption")}),e.jsx(R,{value:"http",children:t("mcp.transportHttpOption")})]})]})]}),i==="stdio"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.commandLabel")}),e.jsx(v,{value:j,onChange:n=>y(n.target.value),placeholder:t("mcp.commandPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.argsLabel")}),e.jsx(v,{value:d,onChange:n=>S(n.target.value),placeholder:"-y @modelcontextprotocol/server-filesystem /data",className:"font-mono text-xs"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.urlLabel")}),e.jsx(v,{value:r,onChange:n=>a(n.target.value),placeholder:t("mcp.urlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.headersLabel")}),e.jsx(v,{value:c,onChange:n=>h(n.target.value),placeholder:t("mcp.headersPlaceholder"),className:"font-mono text-xs"})]})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs(k,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),t("mcp.addServer")]})})]})]})}export{ce as default};
7
+ //# sourceMappingURL=mcp-vKajK1F8.js.map