agim-cli 1.3.4 → 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +20 -6
  2. package/dist/cli-ui/tui/app.js +1 -1
  3. package/dist/cli-ui/tui/app.js.map +1 -1
  4. package/dist/cli.js +25 -4
  5. package/dist/cli.js.map +1 -1
  6. package/dist/core/a2a.d.ts.map +1 -1
  7. package/dist/core/a2a.js +6 -0
  8. package/dist/core/a2a.js.map +1 -1
  9. package/dist/core/access-token.d.ts.map +1 -1
  10. package/dist/core/access-token.js +16 -4
  11. package/dist/core/access-token.js.map +1 -1
  12. package/dist/core/approval-bus.d.ts +5 -0
  13. package/dist/core/approval-bus.d.ts.map +1 -1
  14. package/dist/core/approval-bus.js +32 -0
  15. package/dist/core/approval-bus.js.map +1 -1
  16. package/dist/core/commands/job.d.ts.map +1 -1
  17. package/dist/core/commands/job.js +10 -3
  18. package/dist/core/commands/job.js.map +1 -1
  19. package/dist/core/goal-rpc.d.ts +7 -0
  20. package/dist/core/goal-rpc.d.ts.map +1 -1
  21. package/dist/core/goal-rpc.js +47 -3
  22. package/dist/core/goal-rpc.js.map +1 -1
  23. package/dist/core/llm/exec-dispatcher.d.ts +2 -0
  24. package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
  25. package/dist/core/llm/exec-dispatcher.js +60 -6
  26. package/dist/core/llm/exec-dispatcher.js.map +1 -1
  27. package/dist/core/llm/fs-dispatcher.d.ts +3 -0
  28. package/dist/core/llm/fs-dispatcher.d.ts.map +1 -1
  29. package/dist/core/llm/fs-dispatcher.js +31 -12
  30. package/dist/core/llm/fs-dispatcher.js.map +1 -1
  31. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
  32. package/dist/core/llm/imhub-dispatcher.js +9 -5
  33. package/dist/core/llm/imhub-dispatcher.js.map +1 -1
  34. package/dist/core/llm/model-catalog.js +1 -1
  35. package/dist/core/llm/model-catalog.js.map +1 -1
  36. package/dist/core/llm/policy-approval-gate.d.ts.map +1 -1
  37. package/dist/core/llm/policy-approval-gate.js +17 -4
  38. package/dist/core/llm/policy-approval-gate.js.map +1 -1
  39. package/dist/core/llm/registry.d.ts +2 -2
  40. package/dist/core/llm/registry.js +1 -1
  41. package/dist/core/llm/web-dispatcher.d.ts +20 -0
  42. package/dist/core/llm/web-dispatcher.d.ts.map +1 -1
  43. package/dist/core/llm/web-dispatcher.js +70 -5
  44. package/dist/core/llm/web-dispatcher.js.map +1 -1
  45. package/dist/core/registry.d.ts.map +1 -1
  46. package/dist/core/registry.js +5 -19
  47. package/dist/core/registry.js.map +1 -1
  48. package/dist/core/router.js +1 -1
  49. package/dist/core/router.js.map +1 -1
  50. package/dist/core/schedule.d.ts.map +1 -1
  51. package/dist/core/schedule.js +6 -2
  52. package/dist/core/schedule.js.map +1 -1
  53. package/dist/core/skills/loader.js +3 -3
  54. package/dist/core/skills/loader.js.map +1 -1
  55. package/dist/core/types.d.ts +3 -0
  56. package/dist/core/types.d.ts.map +1 -1
  57. package/dist/plugins/agents/native/index.d.ts +0 -146
  58. package/dist/plugins/agents/native/index.d.ts.map +1 -1
  59. package/dist/plugins/agents/native/index.js +41 -1291
  60. package/dist/plugins/agents/native/index.js.map +1 -1
  61. package/dist/plugins/agents/pi-native/approval.d.ts.map +1 -1
  62. package/dist/plugins/agents/pi-native/approval.js +2 -3
  63. package/dist/plugins/agents/pi-native/approval.js.map +1 -1
  64. package/dist/plugins/agents/pi-native/factory.d.ts +3 -4
  65. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  66. package/dist/plugins/agents/pi-native/factory.js +8 -14
  67. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  68. package/dist/plugins/agents/pi-native/index.d.ts +8 -8
  69. package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
  70. package/dist/plugins/agents/pi-native/index.js +78 -13
  71. package/dist/plugins/agents/pi-native/index.js.map +1 -1
  72. package/dist/plugins/agents/pi-native/provider-resolver.d.ts +4 -4
  73. package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
  74. package/dist/plugins/agents/pi-native/provider-resolver.js +1 -1
  75. package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
  76. package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
  77. package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
  78. package/dist/plugins/agents/pi-native/tools.d.ts +3 -4
  79. package/dist/plugins/agents/pi-native/tools.d.ts.map +1 -1
  80. package/dist/plugins/agents/pi-native/tools.js +7 -9
  81. package/dist/plugins/agents/pi-native/tools.js.map +1 -1
  82. package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -1
  83. package/dist/plugins/messengers/discord/discord-adapter.js +14 -2
  84. package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -1
  85. package/dist/web/public/assets/{a2a-Y30Sn8pc.js → a2a-Bk51ozUt.js} +2 -2
  86. package/dist/web/public/assets/{a2a-Y30Sn8pc.js.map → a2a-Bk51ozUt.js.map} +1 -1
  87. package/dist/web/public/assets/{activity--oN7qxFJ.js → activity-DzKONPpA.js} +2 -2
  88. package/dist/web/public/assets/{activity--oN7qxFJ.js.map → activity-DzKONPpA.js.map} +1 -1
  89. package/dist/web/public/assets/{admins-DONiT3ld.js → admins-CmZ4eQnt.js} +2 -2
  90. package/dist/web/public/assets/{admins-DONiT3ld.js.map → admins-CmZ4eQnt.js.map} +1 -1
  91. package/dist/web/public/assets/{agents-DRbQOH0K.js → agents-lj76gn9U.js} +2 -2
  92. package/dist/web/public/assets/{agents-DRbQOH0K.js.map → agents-lj76gn9U.js.map} +1 -1
  93. package/dist/web/public/assets/{approvals-C5jd7Wf9.js → approvals-C5-3WBcb.js} +2 -2
  94. package/dist/web/public/assets/{approvals-C5jd7Wf9.js.map → approvals-C5-3WBcb.js.map} +1 -1
  95. package/dist/web/public/assets/{arrow-down-x-Lq92tn.js → arrow-down-DAjYgwW2.js} +2 -2
  96. package/dist/web/public/assets/{arrow-down-x-Lq92tn.js.map → arrow-down-DAjYgwW2.js.map} +1 -1
  97. package/dist/web/public/assets/{arrow-up-Cc28qbjN.js → arrow-up-Cba9TuAO.js} +2 -2
  98. package/dist/web/public/assets/{arrow-up-Cc28qbjN.js.map → arrow-up-Cba9TuAO.js.map} +1 -1
  99. package/dist/web/public/assets/{asks-CeVcu8SD.js → asks-qlttx_de.js} +2 -2
  100. package/dist/web/public/assets/{asks-CeVcu8SD.js.map → asks-qlttx_de.js.map} +1 -1
  101. package/dist/web/public/assets/{audit-Dc9_FDkW.js → audit-CSjpfK6P.js} +2 -2
  102. package/dist/web/public/assets/{audit-Dc9_FDkW.js.map → audit-CSjpfK6P.js.map} +1 -1
  103. package/dist/web/public/assets/{bell-CxPf_Xzs.js → bell-Dm9oEZR5.js} +2 -2
  104. package/dist/web/public/assets/{bell-CxPf_Xzs.js.map → bell-Dm9oEZR5.js.map} +1 -1
  105. package/dist/web/public/assets/{bgjobs-CYjmAJgs.js → bgjobs-IOX_MrKV.js} +2 -2
  106. package/dist/web/public/assets/{bgjobs-CYjmAJgs.js.map → bgjobs-IOX_MrKV.js.map} +1 -1
  107. package/dist/web/public/assets/{brain-DjCfwBAT.js → brain-D24bSBeM.js} +2 -2
  108. package/dist/web/public/assets/{brain-DjCfwBAT.js.map → brain-D24bSBeM.js.map} +1 -1
  109. package/dist/web/public/assets/{briefcase-Br1bd_VG.js → briefcase-BrIzC9EZ.js} +2 -2
  110. package/dist/web/public/assets/{briefcase-Br1bd_VG.js.map → briefcase-BrIzC9EZ.js.map} +1 -1
  111. package/dist/web/public/assets/{chat-uqxuXn2X.js → chat-DXki5zbL.js} +2 -2
  112. package/dist/web/public/assets/{chat-uqxuXn2X.js.map → chat-DXki5zbL.js.map} +1 -1
  113. package/dist/web/public/assets/{chevron-left-CN-4SIfi.js → chevron-left-C8Ha_lMZ.js} +2 -2
  114. package/dist/web/public/assets/{chevron-left-CN-4SIfi.js.map → chevron-left-C8Ha_lMZ.js.map} +1 -1
  115. package/dist/web/public/assets/{chevron-right-BhSTLH2K.js → chevron-right-LF_j8BGd.js} +2 -2
  116. package/dist/web/public/assets/{chevron-right-BhSTLH2K.js.map → chevron-right-LF_j8BGd.js.map} +1 -1
  117. package/dist/web/public/assets/{circle-check-B4UdHmdJ.js → circle-check-CpSR3rJi.js} +2 -2
  118. package/dist/web/public/assets/{circle-check-B4UdHmdJ.js.map → circle-check-CpSR3rJi.js.map} +1 -1
  119. package/dist/web/public/assets/{circle-check-big-CvXnDqiF.js → circle-check-big-Dbz0XziN.js} +2 -2
  120. package/dist/web/public/assets/{circle-check-big-CvXnDqiF.js.map → circle-check-big-Dbz0XziN.js.map} +1 -1
  121. package/dist/web/public/assets/{circle-x-B8y8mLHr.js → circle-x-XWMjbfp5.js} +2 -2
  122. package/dist/web/public/assets/{circle-x-B8y8mLHr.js.map → circle-x-XWMjbfp5.js.map} +1 -1
  123. package/dist/web/public/assets/{clock-CK2KO_Rc.js → clock-BjVFYz37.js} +2 -2
  124. package/dist/web/public/assets/{clock-CK2KO_Rc.js.map → clock-BjVFYz37.js.map} +1 -1
  125. package/dist/web/public/assets/{confirm-dialog-GZyIzSwj.js → confirm-dialog-C8nuBNh3.js} +2 -2
  126. package/dist/web/public/assets/{confirm-dialog-GZyIzSwj.js.map → confirm-dialog-C8nuBNh3.js.map} +1 -1
  127. package/dist/web/public/assets/{copy-CDCgL5Yq.js → copy-BUxvUnbP.js} +2 -2
  128. package/dist/web/public/assets/{copy-CDCgL5Yq.js.map → copy-BUxvUnbP.js.map} +1 -1
  129. package/dist/web/public/assets/{data-table-1cGunUIX.js → data-table-BHctKsHM.js} +2 -2
  130. package/dist/web/public/assets/{data-table-1cGunUIX.js.map → data-table-BHctKsHM.js.map} +1 -1
  131. package/dist/web/public/assets/{download-CuLP0G-q.js → download-C0hikBL7.js} +2 -2
  132. package/dist/web/public/assets/{download-CuLP0G-q.js.map → download-C0hikBL7.js.map} +1 -1
  133. package/dist/web/public/assets/{email-Q-SY9qC9.js → email-D940p9kF.js} +2 -2
  134. package/dist/web/public/assets/{email-Q-SY9qC9.js.map → email-D940p9kF.js.map} +1 -1
  135. package/dist/web/public/assets/{empty-state-BRsb30K6.js → empty-state-BzzUgjlL.js} +2 -2
  136. package/dist/web/public/assets/{empty-state-BRsb30K6.js.map → empty-state-BzzUgjlL.js.map} +1 -1
  137. package/dist/web/public/assets/{external-link-D-E90Kfw.js → external-link-Cjuz11n7.js} +2 -2
  138. package/dist/web/public/assets/{external-link-D-E90Kfw.js.map → external-link-Cjuz11n7.js.map} +1 -1
  139. package/dist/web/public/assets/{eye-DSu_4mW2.js → eye-DVQjbb2Z.js} +2 -2
  140. package/dist/web/public/assets/{eye-DSu_4mW2.js.map → eye-DVQjbb2Z.js.map} +1 -1
  141. package/dist/web/public/assets/{facts-pmGTfGmv.js → facts-C4hVaO6t.js} +2 -2
  142. package/dist/web/public/assets/{facts-pmGTfGmv.js.map → facts-C4hVaO6t.js.map} +1 -1
  143. package/dist/web/public/assets/{goals-DpRm9-av.js → goals-89sYO75m.js} +2 -2
  144. package/dist/web/public/assets/{goals-DpRm9-av.js.map → goals-89sYO75m.js.map} +1 -1
  145. package/dist/web/public/assets/{health-mqoH7KDV.js → health-CKfZBddX.js} +2 -2
  146. package/dist/web/public/assets/{health-mqoH7KDV.js.map → health-CKfZBddX.js.map} +1 -1
  147. package/dist/web/public/assets/{heart-pulse-CrCHhXtC.js → heart-pulse-BfYs3KFD.js} +2 -2
  148. package/dist/web/public/assets/{heart-pulse-CrCHhXtC.js.map → heart-pulse-BfYs3KFD.js.map} +1 -1
  149. package/dist/web/public/assets/{heartbeat-EGjLHWU0.js → heartbeat-oKkyHWgV.js} +2 -2
  150. package/dist/web/public/assets/{heartbeat-EGjLHWU0.js.map → heartbeat-oKkyHWgV.js.map} +1 -1
  151. package/dist/web/public/assets/{hot-B9x1_5yx.js → hot-Cas_nZv9.js} +2 -2
  152. package/dist/web/public/assets/{hot-B9x1_5yx.js.map → hot-Cas_nZv9.js.map} +1 -1
  153. package/dist/web/public/assets/{index-BIBWEKxu.js → index-B795P_3p.js} +34 -34
  154. package/dist/web/public/assets/index-B795P_3p.js.map +1 -0
  155. package/dist/web/public/assets/{index-Bc0H0I1S.css → index-CokfQGcz.css} +1 -1
  156. package/dist/web/public/assets/{injection-CDx5n-mk.js → injection-DksSjIsi.js} +2 -2
  157. package/dist/web/public/assets/{injection-CDx5n-mk.js.map → injection-DksSjIsi.js.map} +1 -1
  158. package/dist/web/public/assets/{installed-DV7X4wfv.js → installed-DWq0Eluy.js} +2 -2
  159. package/dist/web/public/assets/{installed-DV7X4wfv.js.map → installed-DWq0Eluy.js.map} +1 -1
  160. package/dist/web/public/assets/{jobs-zAigElCl.js → jobs-CqY-xtBr.js} +2 -2
  161. package/dist/web/public/assets/{jobs-zAigElCl.js.map → jobs-CqY-xtBr.js.map} +1 -1
  162. package/dist/web/public/assets/{layout-B0RjH6M2.js → layout-BiAVhWgU.js} +2 -2
  163. package/dist/web/public/assets/{layout-B0RjH6M2.js.map → layout-BiAVhWgU.js.map} +1 -1
  164. package/dist/web/public/assets/{layout-DOSpVfND.js → layout-BodTIhhE.js} +2 -2
  165. package/dist/web/public/assets/{layout-DOSpVfND.js.map → layout-BodTIhhE.js.map} +1 -1
  166. package/dist/web/public/assets/{layout-CzjqlPxW.js → layout-Cltp3ikG.js} +2 -2
  167. package/dist/web/public/assets/{layout-CzjqlPxW.js.map → layout-Cltp3ikG.js.map} +1 -1
  168. package/dist/web/public/assets/{layout-C6q-GbBZ.js → layout-CqgDOB5t.js} +2 -2
  169. package/dist/web/public/assets/{layout-C6q-GbBZ.js.map → layout-CqgDOB5t.js.map} +1 -1
  170. package/dist/web/public/assets/{layout-7wcifbsm.js → layout-DsoDxB0i.js} +2 -2
  171. package/dist/web/public/assets/{layout-7wcifbsm.js.map → layout-DsoDxB0i.js.map} +1 -1
  172. package/dist/web/public/assets/{llm-DwZX5fwY.js → llm-D3Kd9gqa.js} +2 -2
  173. package/dist/web/public/assets/{llm-DwZX5fwY.js.map → llm-D3Kd9gqa.js.map} +1 -1
  174. package/dist/web/public/assets/{loader-circle-BQkLEJZw.js → loader-circle-DsLQMvHE.js} +2 -2
  175. package/dist/web/public/assets/{loader-circle-BQkLEJZw.js.map → loader-circle-DsLQMvHE.js.map} +1 -1
  176. package/dist/web/public/assets/{map-pin-B-IMY07m.js → map-pin-e694Eet6.js} +2 -2
  177. package/dist/web/public/assets/{map-pin-B-IMY07m.js.map → map-pin-e694Eet6.js.map} +1 -1
  178. package/dist/web/public/assets/{mcp-K0P3-b6q.js → mcp-BoWJqog4.js} +2 -2
  179. package/dist/web/public/assets/{mcp-K0P3-b6q.js.map → mcp-BoWJqog4.js.map} +1 -1
  180. package/dist/web/public/assets/{memos-DcpDEVN8.js → memos-C81bimPJ.js} +2 -2
  181. package/dist/web/public/assets/{memos-DcpDEVN8.js.map → memos-C81bimPJ.js.map} +1 -1
  182. package/dist/web/public/assets/{messengers-DmrNvPMS.js → messengers-CGcjXUeJ.js} +2 -2
  183. package/dist/web/public/assets/{messengers-DmrNvPMS.js.map → messengers-CGcjXUeJ.js.map} +1 -1
  184. package/dist/web/public/assets/{mobile-a-oUiAoR.js → mobile-Duy_If5A.js} +2 -2
  185. package/dist/web/public/assets/{mobile-a-oUiAoR.js.map → mobile-Duy_If5A.js.map} +1 -1
  186. package/dist/web/public/assets/{network-Bbh3j5ew.js → network-DnBhCncp.js} +2 -2
  187. package/dist/web/public/assets/{network-Bbh3j5ew.js.map → network-DnBhCncp.js.map} +1 -1
  188. package/dist/web/public/assets/{outbox-BP_hfANb.js → outbox-DrReVtHr.js} +2 -2
  189. package/dist/web/public/assets/{outbox-BP_hfANb.js.map → outbox-DrReVtHr.js.map} +1 -1
  190. package/dist/web/public/assets/{pagination-CPLj3V0r.js → pagination-DgS8vaZM.js} +2 -2
  191. package/dist/web/public/assets/{pagination-CPLj3V0r.js.map → pagination-DgS8vaZM.js.map} +1 -1
  192. package/dist/web/public/assets/{persona-CT38dLd4.js → persona-NTg-RuPa.js} +2 -2
  193. package/dist/web/public/assets/{persona-CT38dLd4.js.map → persona-NTg-RuPa.js.map} +1 -1
  194. package/dist/web/public/assets/{plans-Msw85XkI.js → plans-CUsr4aMb.js} +2 -2
  195. package/dist/web/public/assets/{plans-Msw85XkI.js.map → plans-CUsr4aMb.js.map} +1 -1
  196. package/dist/web/public/assets/{play-tH2nb1Kt.js → play-G96k2QBR.js} +2 -2
  197. package/dist/web/public/assets/{play-tH2nb1Kt.js.map → play-G96k2QBR.js.map} +1 -1
  198. package/dist/web/public/assets/{plus-6MNGQidu.js → plus-6RZ3XScp.js} +2 -2
  199. package/dist/web/public/assets/{plus-6MNGQidu.js.map → plus-6RZ3XScp.js.map} +1 -1
  200. package/dist/web/public/assets/{policy-BJ7zORVG.js → policy-BFlQnPo5.js} +2 -2
  201. package/dist/web/public/assets/{policy-BJ7zORVG.js.map → policy-BFlQnPo5.js.map} +1 -1
  202. package/dist/web/public/assets/{qr-code-DfsxFxoa.js → qr-code-L7ClZ31U.js} +2 -2
  203. package/dist/web/public/assets/{qr-code-DfsxFxoa.js.map → qr-code-L7ClZ31U.js.map} +1 -1
  204. package/dist/web/public/assets/{refresh-ccw-CFPE6zD1.js → refresh-ccw-S3sFYfDb.js} +2 -2
  205. package/dist/web/public/assets/{refresh-ccw-CFPE6zD1.js.map → refresh-ccw-S3sFYfDb.js.map} +1 -1
  206. package/dist/web/public/assets/{reminders-CAUNAuDy.js → reminders-DVzHdBpK.js} +2 -2
  207. package/dist/web/public/assets/{reminders-CAUNAuDy.js.map → reminders-DVzHdBpK.js.map} +1 -1
  208. package/dist/web/public/assets/{save-CNUmUMEf.js → save-DetwgDjo.js} +2 -2
  209. package/dist/web/public/assets/{save-CNUmUMEf.js.map → save-DetwgDjo.js.map} +1 -1
  210. package/dist/web/public/assets/{schedules-C25NyoGh.js → schedules-CslP2Ntr.js} +2 -2
  211. package/dist/web/public/assets/{schedules-C25NyoGh.js.map → schedules-CslP2Ntr.js.map} +1 -1
  212. package/dist/web/public/assets/{search-D9TZs0bG.js → search-Bx2TNvqF.js} +2 -2
  213. package/dist/web/public/assets/{search-D9TZs0bG.js.map → search-Bx2TNvqF.js.map} +1 -1
  214. package/dist/web/public/assets/{search-CaRTqZw1.js → search-ByHc__pY.js} +2 -2
  215. package/dist/web/public/assets/{search-CaRTqZw1.js.map → search-ByHc__pY.js.map} +1 -1
  216. package/dist/web/public/assets/{security-BMGGzEwr.js → security-B4dw2-ZU.js} +2 -2
  217. package/dist/web/public/assets/{security-BMGGzEwr.js.map → security-B4dw2-ZU.js.map} +1 -1
  218. package/dist/web/public/assets/{service-BQBoddcT.js → service-LujRx8DT.js} +2 -2
  219. package/dist/web/public/assets/{service-BQBoddcT.js.map → service-LujRx8DT.js.map} +1 -1
  220. package/dist/web/public/assets/{shield-alert-eOBoc2yc.js → shield-alert-BM2sbwiD.js} +2 -2
  221. package/dist/web/public/assets/{shield-alert-eOBoc2yc.js.map → shield-alert-BM2sbwiD.js.map} +1 -1
  222. package/dist/web/public/assets/{status-badge-CF1Cya26.js → status-badge-Bz0a-nE1.js} +2 -2
  223. package/dist/web/public/assets/{status-badge-CF1Cya26.js.map → status-badge-Bz0a-nE1.js.map} +1 -1
  224. package/dist/web/public/assets/{subtasks-CEPB2TSV.js → subtasks-BEAppda9.js} +2 -2
  225. package/dist/web/public/assets/{subtasks-CEPB2TSV.js.map → subtasks-BEAppda9.js.map} +1 -1
  226. package/dist/web/public/assets/{table-Dww-k14l.js → table-Dl8Faxz-.js} +2 -2
  227. package/dist/web/public/assets/{table-Dww-k14l.js.map → table-Dl8Faxz-.js.map} +1 -1
  228. package/dist/web/public/assets/{topn-DwgKlIxc.js → topn-CXTn3Qdn.js} +2 -2
  229. package/dist/web/public/assets/{topn-DwgKlIxc.js.map → topn-CXTn3Qdn.js.map} +1 -1
  230. package/dist/web/public/assets/{trash-2-BF98SY8M.js → trash-2-DUSLukqd.js} +2 -2
  231. package/dist/web/public/assets/{trash-2-BF98SY8M.js.map → trash-2-DUSLukqd.js.map} +1 -1
  232. package/dist/web/public/assets/{use-agim-skills-kDpiSMBP.js → use-agim-skills-BD1AIi8d.js} +2 -2
  233. package/dist/web/public/assets/{use-agim-skills-kDpiSMBP.js.map → use-agim-skills-BD1AIi8d.js.map} +1 -1
  234. package/dist/web/public/assets/{use-background-tasks-B1Pxq3JU.js → use-background-tasks-FuodO-_C.js} +2 -2
  235. package/dist/web/public/assets/{use-background-tasks-B1Pxq3JU.js.map → use-background-tasks-FuodO-_C.js.map} +1 -1
  236. package/dist/web/public/assets/{use-memory-w-EY79Zm.js → use-memory-4xOyJX4L.js} +2 -2
  237. package/dist/web/public/assets/{use-memory-w-EY79Zm.js.map → use-memory-4xOyJX4L.js.map} +1 -1
  238. package/dist/web/public/assets/{use-observability-Cd2dUHb7.js → use-observability-DMebP5-1.js} +2 -2
  239. package/dist/web/public/assets/{use-observability-Cd2dUHb7.js.map → use-observability-DMebP5-1.js.map} +1 -1
  240. package/dist/web/public/assets/{use-settings-DG1rm9KU.js → use-settings-GPajsGBB.js} +2 -2
  241. package/dist/web/public/assets/{use-settings-DG1rm9KU.js.map → use-settings-GPajsGBB.js.map} +1 -1
  242. package/dist/web/public/assets/{use-workspace-DvW_xOmj.js → use-workspace-C6qix-sY.js} +2 -2
  243. package/dist/web/public/assets/{use-workspace-DvW_xOmj.js.map → use-workspace-C6qix-sY.js.map} +1 -1
  244. package/dist/web/public/assets/{vector-CDJ4p6UI.js → vector-hGc2RFNQ.js} +2 -2
  245. package/dist/web/public/assets/{vector-CDJ4p6UI.js.map → vector-hGc2RFNQ.js.map} +1 -1
  246. package/dist/web/public/assets/{viewer-Bje5-HtQ.js → viewer-YkLMRkmd.js} +2 -2
  247. package/dist/web/public/assets/{viewer-Bje5-HtQ.js.map → viewer-YkLMRkmd.js.map} +1 -1
  248. package/dist/web/public/assets/{workspace-B7QYGLix.js → workspace-0GRMLd5j.js} +2 -2
  249. package/dist/web/public/assets/{workspace-B7QYGLix.js.map → workspace-0GRMLd5j.js.map} +1 -1
  250. package/dist/web/public/assets/{workspaces-BlodF0DP.js → workspaces-DPa7ByRm.js} +2 -2
  251. package/dist/web/public/assets/{workspaces-BlodF0DP.js.map → workspaces-DPa7ByRm.js.map} +1 -1
  252. package/dist/web/public/index.html +2 -2
  253. package/dist/web/server.d.ts.map +1 -1
  254. package/dist/web/server.js +4 -2
  255. package/dist/web/server.js.map +1 -1
  256. package/package.json +1 -1
  257. package/dist/web/public/assets/index-BIBWEKxu.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-K0P3-b6q.js","sources":["../../node_modules/lucide-react/dist/esm/icons/server-cog.js","../../src/routes/settings/mcp.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 ServerCog = createLucideIcon(\"ServerCog\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\n \"path\",\n {\n 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\",\n key: \"tn8das\"\n }\n ],\n [\n \"path\",\n {\n 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\",\n key: \"1g2pve\"\n }\n ],\n [\"path\", { d: \"M6 6h.01\", key: \"1utrut\" }],\n [\"path\", { d: \"M6 18h.01\", key: \"uhywen\" }],\n [\"path\", { d: \"m15.7 13.4-.9-.3\", key: \"1jwmzr\" }],\n [\"path\", { d: \"m9.2 10.9-.9-.3\", key: \"qapnim\" }],\n [\"path\", { d: \"m10.6 15.7.3-.9\", key: \"quwk0k\" }],\n [\"path\", { d: \"m13.6 15.7-.4-1\", key: \"cb9xp7\" }],\n [\"path\", { d: \"m10.8 9.3-.4-1\", key: \"1uaiz5\" }],\n [\"path\", { d: \"m8.3 13.6 1-.4\", key: \"s6srou\" }],\n [\"path\", { d: \"m14.7 10.8 1-.4\", key: \"4d31cq\" }],\n [\"path\", { d: \"m13.4 8.3-.3.9\", key: \"1bm987\" }]\n]);\n\nexport { ServerCog as default };\n//# sourceMappingURL=server-cog.js.map\n","/**\n * /settings/mcp — external MCP servers admin (Stage 6).\n *\n * Front-end for the `/api/mcp/*` REST surface. List configured servers,\n * see their connection status + tool count, add stdio / HTTP / SSE\n * servers, probe per-server health, remove.\n *\n * The native agent loop consumes any tools advertised here; CLI agents\n * have their own MCP configs and ignore this list. See\n * docs/llm-backends.md § External MCP servers.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, Plus, RefreshCcw, ServerCog, Trash2, Activity } 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 {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useMcpList, useMcpAddServer, useMcpRemoveServer, useMcpHealth,\n type McpServerRow,\n} from '@/hooks/use-llm-admin'\n\nexport default function SettingsMcpRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useMcpList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <ServerCog className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('mcp.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('mcp.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('mcp.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <ServersCard data={listQuery.data} />\n <AddServerCard />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Servers list ─────────────── */\n\nfunction ServersCard({ data }: { data: ReturnType<typeof useMcpList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeServer = useMcpRemoveServer()\n const health = useMcpHealth()\n const [healthResults, setHealthResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('mcp.removeConfirm', { name }))) return\n try {\n await removeServer.mutateAsync(name)\n toast.success(t('mcp.removedToast', { name }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onHealth(name: string): Promise<void> {\n setHealthResults((m) => ({ ...m, [name]: t('mcp.probing') }))\n try {\n const r = await health.mutateAsync(name)\n const msg = r.connected\n ? `✓ ${r.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: r.toolCount })\n : t('mcp.runtimeConnected', { count: r.toolCount })}`\n : `✗ ${r.lastError ?? t('mcp.runtimeDisconnected')}`\n setHealthResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setHealthResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.servers ?? []\n const runtime = data?.runtime?.servers ?? []\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('mcp.serversEmpty')}\n </section>\n )\n }\n\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 <h2 className=\"text-sm font-semibold\">{t('mcp.serversTitle', { count: rows.length })}</h2>\n {data?.runtime && (\n <Badge variant=\"info\">{t('mcp.totalTools', { count: data.runtime.totalTools })}</Badge>\n )}\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('mcp.col.name')}</TableHead>\n <TableHead>{t('mcp.col.transport')}</TableHead>\n <TableHead>{t('mcp.col.target')}</TableHead>\n <TableHead>{t('mcp.col.runtime')}</TableHead>\n <TableHead>{t('mcp.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((s) => {\n const rt = runtime.find((r) => r.name === s.name)\n const transport = transportLabel(s, t)\n const target = s.command\n ? `${s.command} ${(s.args ?? []).join(' ')}`.trim()\n : (s.url ?? '—')\n const runtimeBadge = !rt\n ? <Badge variant=\"outline\">{t('mcp.runtimeUnknown')}</Badge>\n : rt.connected\n ? <Badge variant=\"success\">\n {rt.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: rt.toolCount })\n : t('mcp.runtimeConnected', { count: rt.toolCount })}\n </Badge>\n : <Badge variant=\"danger\">{t('mcp.runtimeDisconnected')}</Badge>\n return (\n <TableRow key={s.name}>\n <TableCell className=\"font-mono text-xs\">{s.name}</TableCell>\n <TableCell>{transport}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{target}</TableCell>\n <TableCell>{runtimeBadge}</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 onHealth(s.name)}\n disabled={health.isPending}\n >\n <Activity className=\"h-4 w-4\" />\n <span>{t('mcp.health')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(s.name)}\n disabled={removeServer.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('mcp.remove')}</span>\n </Button>\n {healthResults[s.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{healthResults[s.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\nfunction transportLabel(\n s: McpServerRow,\n t: (key: string) => string,\n): string {\n if (s.command) return t('mcp.transportStdio')\n if (s.url) return s.url.endsWith('/sse') ? t('mcp.transportSse') : t('mcp.transportHttp')\n return '—'\n}\n\n/* ─────────────── Add server form ─────────────── */\n\nfunction AddServerCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addServer = useMcpAddServer()\n const [name, setName] = useState('')\n const [transport, setTransport] = useState<'stdio' | 'http'>('stdio')\n const [command, setCommand] = useState('')\n const [args, setArgs] = useState('')\n const [url, setUrl] = useState('')\n const [headersJson, setHeadersJson] = useState('')\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n if (!name.trim()) { toast.error(t('mcp.nameRequired')); return }\n let headers: Record<string, string> | undefined\n if (headersJson.trim()) {\n try { headers = JSON.parse(headersJson) }\n catch { toast.error(t('mcp.headersInvalid')); return }\n }\n const body: Parameters<typeof addServer.mutateAsync>[0] = { name: name.trim() }\n if (transport === 'stdio') {\n if (!command.trim()) { toast.error(t('mcp.commandRequired')); return }\n body.command = command.trim()\n const splitArgs = args.split(/\\s+/).filter(Boolean)\n if (splitArgs.length > 0) body.args = splitArgs\n } else {\n if (!url.trim()) { toast.error(t('mcp.urlRequired')); return }\n body.url = url.trim()\n if (headers) body.headers = headers\n }\n try {\n await addServer.mutateAsync(body)\n toast.success(t('mcp.addedToast', { name: name.trim() }))\n setName(''); setCommand(''); setArgs(''); setUrl(''); setHeadersJson('')\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('mcp.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('mcp.nameLabel')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('mcp.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.transportLabel')}</Label>\n <Select value={transport} onValueChange={(v) => setTransport(v as 'stdio' | 'http')}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"stdio\">{t('mcp.transportStdioOption')}</SelectItem>\n <SelectItem value=\"http\">{t('mcp.transportHttpOption')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n {transport === 'stdio' ? (\n <>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.commandLabel')}</Label>\n <Input\n value={command} onChange={(e) => setCommand(e.target.value)}\n placeholder={t('mcp.commandPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.argsLabel')}</Label>\n <Input\n value={args} onChange={(e) => setArgs(e.target.value)}\n placeholder=\"-y @modelcontextprotocol/server-filesystem /data\"\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n ) : (\n <>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.urlLabel')}</Label>\n <Input\n value={url} onChange={(e) => setUrl(e.target.value)}\n placeholder={t('mcp.urlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.headersLabel')}</Label>\n <Input\n value={headersJson} onChange={(e) => setHeadersJson(e.target.value)}\n placeholder={t('mcp.headersPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n )}\n <div className=\"sm:col-span-2 flex\">\n <Button type=\"submit\" disabled={addServer.isPending} className=\"ml-auto\">\n {addServer.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('mcp.addServer')}\n </Button>\n </div>\n </form>\n </section>\n )\n}\n"],"names":["ServerCog","createLucideIcon","SettingsMcpRoute","useTranslation","listQuery","useMcpList","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","ServersCard","AddServerCard","data","t","removeServer","useMcpRemoveServer","health","useMcpHealth","healthResults","setHealthResults","useState","onRemove","name","toast","err","onHealth","m","msg","rows","runtime","Badge","Table","TableHeader","TableRow","TableHead","TableBody","s","rt","r","transport","transportLabel","target","runtimeBadge","TableCell","Activity","Trash2","addServer","useMcpAddServer","setName","setTransport","command","setCommand","args","setArgs","url","setUrl","headersJson","setHeadersJson","onSubmit","e","headers","body","splitArgs","Label","Input","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","Plus"],"mappings":"yeAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAYC,EAAiB,YAAa,CAC9C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CACE,OACA,CACE,EAAG,+EACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,gFACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,mBAAoB,IAAK,QAAQ,CAAE,EACjD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,CAAC,ECHD,SAAwBC,IAAgC,CACtD,KAAM,CAAE,CAAA,EAAMC,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7CC,EAAYC,EAAA,EAClB,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,0BAChB,SAAA,CAAAC,EAAAA,IAACP,EAAA,CAAU,UAAU,uBAAA,CAAwB,QAC5C,KAAA,CAAG,UAAU,wBAAyB,SAAA,EAAE,WAAW,EAAE,EACtDM,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KAAK,UAAU,UACpC,QAAS,IAAM,KAAKJ,EAAU,QAAA,EAC9B,SAAUA,EAAU,WACpB,aAAY,EAAE,kBAAmB,CAAE,GAAI,SAAU,EAEhD,SAAA,CAAAA,EAAU,iBACNK,EAAA,CAAQ,UAAU,uBAAuB,EAC1CF,EAAAA,IAACG,EAAA,CAAW,UAAU,SAAA,CAAU,QACnC,OAAA,CAAK,UAAU,mBAAoB,SAAA,EAAE,aAAa,CAAA,CAAE,CAAA,CAAA,CAAA,CACvD,EACF,QACC,IAAA,CAAE,UAAU,wBAAyB,SAAA,EAAE,cAAc,EAAE,EAEvDN,EAAU,UACTG,MAAC,OAAI,UAAU,4CAAA,CAA6C,EAE5DD,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAJ,EAAAA,IAACK,EAAA,CAAY,KAAMR,EAAU,IAAA,CAAM,QAClCS,EAAA,CAAA,CAAc,CAAA,CAAA,CACjB,CAAA,EAEJ,CAEJ,CAIA,SAASD,EAAY,CAAE,KAAAE,GAAsE,CAC3F,KAAM,CAAE,EAAAC,CAAA,EAAMZ,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7Ca,EAAeC,EAAA,EACfC,EAASC,EAAA,EACT,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAiC,CAAA,CAAE,EAE7E,eAAeC,EAASC,EAA6B,CACnD,GAAK,QAAQT,EAAE,oBAAqB,CAAE,KAAAS,CAAA,CAAM,CAAC,EAC7C,GAAI,CACF,MAAMR,EAAa,YAAYQ,CAAI,EACnCC,EAAM,QAAQV,EAAE,mBAAoB,CAAE,KAAAS,CAAA,CAAM,CAAC,CAC/C,OAASE,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,eAAeC,EAASH,EAA6B,CACnDH,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAGT,EAAE,aAAa,CAAA,EAAI,EAC5D,GAAI,CACF,MAAM,EAAI,MAAMG,EAAO,YAAYM,CAAI,EACjCK,EAAM,EAAE,UACV,KAAK,EAAE,YAAc,EACnBd,EAAE,0BAA2B,CAAE,MAAO,EAAE,SAAA,CAAW,EACnDA,EAAE,uBAAwB,CAAE,MAAO,EAAE,SAAA,CAAW,CAAC,GACnD,KAAK,EAAE,WAAaA,EAAE,yBAAyB,CAAC,GACpDM,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAGK,CAAA,EAAM,CACjD,OAASH,EAAK,CACZL,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAG,KAAOE,GAAe,SAAW,OAAOA,CAAG,CAAE,IAAK,CAC7F,CACF,CAEA,MAAMI,EAAOhB,GAAM,SAAW,CAAA,EACxBiB,EAAUjB,GAAM,SAAS,SAAW,CAAA,EAC1C,OAAIgB,EAAK,SAAW,QAEf,UAAA,CAAQ,UAAU,mFAChB,SAAAf,EAAE,kBAAkB,EACvB,EAKFT,EAAAA,KAAC,UAAA,CAAQ,UAAU,6CACjB,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,2DAChB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAAQ,EAAE,mBAAoB,CAAE,MAAOe,EAAK,MAAA,CAAQ,CAAA,CAAE,EACpFhB,GAAM,SACLP,EAAAA,IAACyB,EAAA,CAAM,QAAQ,OAAQ,SAAAjB,EAAE,iBAAkB,CAAE,MAAOD,EAAK,QAAQ,UAAA,CAAY,CAAA,CAAE,CAAA,EAEnF,SACCmB,EAAA,CACC,SAAA,CAAA1B,EAAAA,IAAC2B,EAAA,CACC,gBAACC,EAAA,CACC,SAAA,CAAA5B,EAAAA,IAAC6B,EAAA,CAAW,SAAArB,EAAE,cAAc,CAAA,CAAE,EAC9BR,EAAAA,IAAC6B,EAAA,CAAW,SAAArB,EAAE,mBAAmB,CAAA,CAAE,EACnCR,EAAAA,IAAC6B,EAAA,CAAW,SAAArB,EAAE,gBAAgB,CAAA,CAAE,EAChCR,EAAAA,IAAC6B,EAAA,CAAW,SAAArB,EAAE,iBAAiB,CAAA,CAAE,EACjCR,EAAAA,IAAC6B,EAAA,CAAW,SAAArB,EAAE,iBAAiB,CAAA,CAAE,CAAA,CAAA,CACnC,CAAA,CACF,EACAR,EAAAA,IAAC8B,EAAA,CACE,SAAAP,EAAK,IAAKQ,GAAM,CACf,MAAMC,EAAKR,EAAQ,KAAMS,GAAMA,EAAE,OAASF,EAAE,IAAI,EAC1CG,EAAYC,EAAeJ,EAAGvB,CAAC,EAC/B4B,EAASL,EAAE,QACb,GAAGA,EAAE,OAAO,KAAKA,EAAE,MAAQ,IAAI,KAAK,GAAG,CAAC,GAAG,OAC1CA,EAAE,KAAO,IACRM,EAAgBL,EAElBA,EAAG,UACDhC,EAAAA,IAACyB,EAAA,CAAM,QAAQ,UACZ,SAAAO,EAAG,YAAc,EACdxB,EAAE,0BAA2B,CAAE,MAAOwB,EAAG,UAAW,EACpDxB,EAAE,uBAAwB,CAAE,MAAOwB,EAAG,UAAW,EACvD,EACAhC,MAACyB,EAAA,CAAM,QAAQ,SAAU,SAAAjB,EAAE,yBAAyB,EAAE,QAPvDiB,EAAA,CAAM,QAAQ,UAAW,SAAAjB,EAAE,oBAAoB,EAAE,EAQtD,cACGoB,EAAA,CACC,SAAA,CAAA5B,EAAAA,IAACsC,EAAA,CAAU,UAAU,oBAAqB,SAAAP,EAAE,KAAK,EACjD/B,EAAAA,IAACsC,GAAW,SAAAJ,CAAA,CAAU,EACtBlC,EAAAA,IAACsC,EAAA,CAAU,UAAU,gDAAiD,SAAAF,EAAO,EAC7EpC,EAAAA,IAACsC,GAAW,SAAAD,CAAA,CAAa,EACzBtC,EAAAA,KAACuC,EAAA,CAAU,UAAU,kDACnB,SAAA,CAAAvC,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KACrB,QAAS,IAAM,KAAKmB,EAASW,EAAE,IAAI,EACnC,SAAUpB,EAAO,UAEjB,SAAA,CAAAX,EAAAA,IAACuC,EAAA,CAAS,UAAU,SAAA,CAAU,EAC9BvC,EAAAA,IAAC,OAAA,CAAM,SAAAQ,EAAE,YAAY,CAAA,CAAE,CAAA,CAAA,CAAA,EAEzBT,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KACrB,QAAS,IAAM,KAAKe,EAASe,EAAE,IAAI,EACnC,SAAUtB,EAAa,UACvB,UAAU,gCAEV,SAAA,CAAAT,EAAAA,IAACwC,EAAA,CAAO,UAAU,SAAA,CAAU,QAC3B,OAAA,CAAK,UAAU,mBAAoB,SAAAhC,EAAE,YAAY,CAAA,CAAE,CAAA,CAAA,CAAA,EAErDK,EAAckB,EAAE,IAAI,GACnB/B,EAAAA,IAAC,OAAA,CAAK,UAAU,iCAAkC,SAAAa,EAAckB,EAAE,IAAI,CAAA,CAAE,CAAA,CAAA,CAE5E,CAAA,CAAA,EA1BaA,EAAE,IA2BjB,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CAEA,SAASI,EACPJ,EACAvB,EACQ,CACR,OAAIuB,EAAE,QAAgBvB,EAAE,oBAAoB,EACxCuB,EAAE,IAAYA,EAAE,IAAI,SAAS,MAAM,EAAIvB,EAAE,kBAAkB,EAAIA,EAAE,mBAAmB,EACjF,GACT,CAIA,SAASF,GAA6B,CACpC,KAAM,CAAE,CAAA,EAAMV,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7C6C,EAAYC,EAAA,EACZ,CAACzB,EAAM0B,CAAO,EAAI5B,EAAAA,SAAS,EAAE,EAC7B,CAACmB,EAAWU,CAAY,EAAI7B,EAAAA,SAA2B,OAAO,EAC9D,CAAC8B,EAASC,CAAU,EAAI/B,EAAAA,SAAS,EAAE,EACnC,CAACgC,EAAMC,CAAO,EAAIjC,EAAAA,SAAS,EAAE,EAC7B,CAACkC,EAAKC,CAAM,EAAInC,EAAAA,SAAS,EAAE,EAC3B,CAACoC,EAAaC,CAAc,EAAIrC,EAAAA,SAAS,EAAE,EAEjD,eAAesC,EAASC,EAAmC,CAEzD,GADAA,EAAE,eAAA,EACE,CAACrC,EAAK,OAAQ,CAAEC,EAAM,MAAM,EAAE,kBAAkB,CAAC,EAAG,MAAO,CAC/D,IAAIqC,EACJ,GAAIJ,EAAY,OACd,GAAI,CAAEI,EAAU,KAAK,MAAMJ,CAAW,CAAE,MAClC,CAAEjC,EAAM,MAAM,EAAE,oBAAoB,CAAC,EAAG,MAAO,CAEvD,MAAMsC,EAAoD,CAAE,KAAMvC,EAAK,MAAK,EAC5E,GAAIiB,IAAc,QAAS,CACzB,GAAI,CAACW,EAAQ,OAAQ,CAAE3B,EAAM,MAAM,EAAE,qBAAqB,CAAC,EAAG,MAAO,CACrEsC,EAAK,QAAUX,EAAQ,KAAA,EACvB,MAAMY,EAAYV,EAAK,MAAM,KAAK,EAAE,OAAO,OAAO,EAC9CU,EAAU,OAAS,IAAGD,EAAK,KAAOC,EACxC,KAAO,CACL,GAAI,CAACR,EAAI,OAAQ,CAAE/B,EAAM,MAAM,EAAE,iBAAiB,CAAC,EAAG,MAAO,CAC7DsC,EAAK,IAAMP,EAAI,KAAA,EACXM,MAAc,QAAUA,EAC9B,CACA,GAAI,CACF,MAAMd,EAAU,YAAYe,CAAI,EAChCtC,EAAM,QAAQ,EAAE,iBAAkB,CAAE,KAAMD,EAAK,KAAA,CAAK,CAAG,CAAC,EACxD0B,EAAQ,EAAE,EAAGG,EAAW,EAAE,EAAGE,EAAQ,EAAE,EAAGE,EAAO,EAAE,EAAGE,EAAe,EAAE,CACzE,OAASjC,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,OACEpB,EAAAA,KAAC,UAAA,CAAQ,UAAU,6CACjB,SAAA,CAAAC,EAAAA,IAAC,SAAA,CAAO,UAAU,mCAChB,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAA,EAAE,cAAc,CAAA,CAAE,EAC3D,EACAD,EAAAA,KAAC,OAAA,CAAK,SAAWuD,GAAM,KAAKD,EAASC,CAAC,EAAG,UAAU,4CACjD,SAAA,CAAAvD,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,eAAe,EAAE,EAC3D1D,EAAAA,IAAC2D,EAAA,CACC,MAAO1C,EAAM,SAAWqC,GAAMX,EAAQW,EAAE,OAAO,KAAK,EACpD,YAAa,EAAE,qBAAqB,EACpC,UAAU,mBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAtD,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,oBAAoB,EAAE,EAChE3D,EAAAA,KAAC6D,GAAO,MAAO1B,EAAW,cAAgB2B,GAAMjB,EAAaiB,CAAqB,EAChF,SAAA,CAAA7D,EAAAA,IAAC8D,EAAA,CAAc,SAAA9D,EAAAA,IAAC+D,EAAA,CAAA,CAAY,EAAE,SAC7BC,EAAA,CACC,SAAA,CAAAhE,MAACiE,EAAA,CAAW,MAAM,QAAS,SAAA,EAAE,0BAA0B,EAAE,QACxDA,EAAA,CAAW,MAAM,OAAQ,SAAA,EAAE,yBAAyB,CAAA,CAAE,CAAA,CAAA,CACzD,CAAA,CAAA,CACF,CAAA,EACF,EACC/B,IAAc,QACbnC,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAL,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,kBAAkB,EAAE,EAC9D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOd,EAAS,SAAWS,GAAMR,EAAWQ,EAAE,OAAO,KAAK,EAC1D,YAAa,EAAE,wBAAwB,EACvC,UAAU,mBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAtD,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,eAAe,EAAE,EAC3D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOZ,EAAM,SAAWO,GAAMN,EAAQM,EAAE,OAAO,KAAK,EACpD,YAAY,mDACZ,UAAU,mBAAA,CAAA,CACZ,CAAA,CACF,CAAA,CAAA,CACF,EAEAvD,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAL,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,cAAc,EAAE,EAC1D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOV,EAAK,SAAWK,GAAMJ,EAAOI,EAAE,OAAO,KAAK,EAClD,YAAa,EAAE,oBAAoB,EACnC,UAAU,mBAAA,CAAA,CACZ,EACF,EACAvD,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,kBAAkB,EAAE,EAC9D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOR,EAAa,SAAWG,GAAMF,EAAeE,EAAE,OAAO,KAAK,EAClE,YAAa,EAAE,wBAAwB,EACvC,UAAU,mBAAA,CAAA,CACZ,CAAA,CACF,CAAA,EACF,EAEFtD,EAAAA,IAAC,MAAA,CAAI,UAAU,qBACb,SAAAD,EAAAA,KAACE,EAAA,CAAO,KAAK,SAAS,SAAUwC,EAAU,UAAW,UAAU,UAC5D,SAAA,CAAAA,EAAU,gBAAavC,EAAA,CAAQ,UAAU,uBAAuB,EAAKF,EAAAA,IAACkE,EAAA,CAAK,UAAU,SAAA,CAAU,EAC/F,EAAE,eAAe,CAAA,CAAA,CACpB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"mcp-BoWJqog4.js","sources":["../../node_modules/lucide-react/dist/esm/icons/server-cog.js","../../src/routes/settings/mcp.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 ServerCog = createLucideIcon(\"ServerCog\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\n \"path\",\n {\n 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\",\n key: \"tn8das\"\n }\n ],\n [\n \"path\",\n {\n 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\",\n key: \"1g2pve\"\n }\n ],\n [\"path\", { d: \"M6 6h.01\", key: \"1utrut\" }],\n [\"path\", { d: \"M6 18h.01\", key: \"uhywen\" }],\n [\"path\", { d: \"m15.7 13.4-.9-.3\", key: \"1jwmzr\" }],\n [\"path\", { d: \"m9.2 10.9-.9-.3\", key: \"qapnim\" }],\n [\"path\", { d: \"m10.6 15.7.3-.9\", key: \"quwk0k\" }],\n [\"path\", { d: \"m13.6 15.7-.4-1\", key: \"cb9xp7\" }],\n [\"path\", { d: \"m10.8 9.3-.4-1\", key: \"1uaiz5\" }],\n [\"path\", { d: \"m8.3 13.6 1-.4\", key: \"s6srou\" }],\n [\"path\", { d: \"m14.7 10.8 1-.4\", key: \"4d31cq\" }],\n [\"path\", { d: \"m13.4 8.3-.3.9\", key: \"1bm987\" }]\n]);\n\nexport { ServerCog as default };\n//# sourceMappingURL=server-cog.js.map\n","/**\n * /settings/mcp — external MCP servers admin (Stage 6).\n *\n * Front-end for the `/api/mcp/*` REST surface. List configured servers,\n * see their connection status + tool count, add stdio / HTTP / SSE\n * servers, probe per-server health, remove.\n *\n * The native agent loop consumes any tools advertised here; CLI agents\n * have their own MCP configs and ignore this list. See\n * docs/llm-backends.md § External MCP servers.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, Plus, RefreshCcw, ServerCog, Trash2, Activity } 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 {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useMcpList, useMcpAddServer, useMcpRemoveServer, useMcpHealth,\n type McpServerRow,\n} from '@/hooks/use-llm-admin'\n\nexport default function SettingsMcpRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useMcpList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <ServerCog className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('mcp.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('mcp.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('mcp.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <ServersCard data={listQuery.data} />\n <AddServerCard />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Servers list ─────────────── */\n\nfunction ServersCard({ data }: { data: ReturnType<typeof useMcpList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeServer = useMcpRemoveServer()\n const health = useMcpHealth()\n const [healthResults, setHealthResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('mcp.removeConfirm', { name }))) return\n try {\n await removeServer.mutateAsync(name)\n toast.success(t('mcp.removedToast', { name }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onHealth(name: string): Promise<void> {\n setHealthResults((m) => ({ ...m, [name]: t('mcp.probing') }))\n try {\n const r = await health.mutateAsync(name)\n const msg = r.connected\n ? `✓ ${r.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: r.toolCount })\n : t('mcp.runtimeConnected', { count: r.toolCount })}`\n : `✗ ${r.lastError ?? t('mcp.runtimeDisconnected')}`\n setHealthResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setHealthResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.servers ?? []\n const runtime = data?.runtime?.servers ?? []\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('mcp.serversEmpty')}\n </section>\n )\n }\n\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 <h2 className=\"text-sm font-semibold\">{t('mcp.serversTitle', { count: rows.length })}</h2>\n {data?.runtime && (\n <Badge variant=\"info\">{t('mcp.totalTools', { count: data.runtime.totalTools })}</Badge>\n )}\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('mcp.col.name')}</TableHead>\n <TableHead>{t('mcp.col.transport')}</TableHead>\n <TableHead>{t('mcp.col.target')}</TableHead>\n <TableHead>{t('mcp.col.runtime')}</TableHead>\n <TableHead>{t('mcp.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((s) => {\n const rt = runtime.find((r) => r.name === s.name)\n const transport = transportLabel(s, t)\n const target = s.command\n ? `${s.command} ${(s.args ?? []).join(' ')}`.trim()\n : (s.url ?? '—')\n const runtimeBadge = !rt\n ? <Badge variant=\"outline\">{t('mcp.runtimeUnknown')}</Badge>\n : rt.connected\n ? <Badge variant=\"success\">\n {rt.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: rt.toolCount })\n : t('mcp.runtimeConnected', { count: rt.toolCount })}\n </Badge>\n : <Badge variant=\"danger\">{t('mcp.runtimeDisconnected')}</Badge>\n return (\n <TableRow key={s.name}>\n <TableCell className=\"font-mono text-xs\">{s.name}</TableCell>\n <TableCell>{transport}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{target}</TableCell>\n <TableCell>{runtimeBadge}</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 onHealth(s.name)}\n disabled={health.isPending}\n >\n <Activity className=\"h-4 w-4\" />\n <span>{t('mcp.health')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(s.name)}\n disabled={removeServer.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('mcp.remove')}</span>\n </Button>\n {healthResults[s.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{healthResults[s.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\nfunction transportLabel(\n s: McpServerRow,\n t: (key: string) => string,\n): string {\n if (s.command) return t('mcp.transportStdio')\n if (s.url) return s.url.endsWith('/sse') ? t('mcp.transportSse') : t('mcp.transportHttp')\n return '—'\n}\n\n/* ─────────────── Add server form ─────────────── */\n\nfunction AddServerCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addServer = useMcpAddServer()\n const [name, setName] = useState('')\n const [transport, setTransport] = useState<'stdio' | 'http'>('stdio')\n const [command, setCommand] = useState('')\n const [args, setArgs] = useState('')\n const [url, setUrl] = useState('')\n const [headersJson, setHeadersJson] = useState('')\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n if (!name.trim()) { toast.error(t('mcp.nameRequired')); return }\n let headers: Record<string, string> | undefined\n if (headersJson.trim()) {\n try { headers = JSON.parse(headersJson) }\n catch { toast.error(t('mcp.headersInvalid')); return }\n }\n const body: Parameters<typeof addServer.mutateAsync>[0] = { name: name.trim() }\n if (transport === 'stdio') {\n if (!command.trim()) { toast.error(t('mcp.commandRequired')); return }\n body.command = command.trim()\n const splitArgs = args.split(/\\s+/).filter(Boolean)\n if (splitArgs.length > 0) body.args = splitArgs\n } else {\n if (!url.trim()) { toast.error(t('mcp.urlRequired')); return }\n body.url = url.trim()\n if (headers) body.headers = headers\n }\n try {\n await addServer.mutateAsync(body)\n toast.success(t('mcp.addedToast', { name: name.trim() }))\n setName(''); setCommand(''); setArgs(''); setUrl(''); setHeadersJson('')\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('mcp.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('mcp.nameLabel')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('mcp.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.transportLabel')}</Label>\n <Select value={transport} onValueChange={(v) => setTransport(v as 'stdio' | 'http')}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"stdio\">{t('mcp.transportStdioOption')}</SelectItem>\n <SelectItem value=\"http\">{t('mcp.transportHttpOption')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n {transport === 'stdio' ? (\n <>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.commandLabel')}</Label>\n <Input\n value={command} onChange={(e) => setCommand(e.target.value)}\n placeholder={t('mcp.commandPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.argsLabel')}</Label>\n <Input\n value={args} onChange={(e) => setArgs(e.target.value)}\n placeholder=\"-y @modelcontextprotocol/server-filesystem /data\"\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n ) : (\n <>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.urlLabel')}</Label>\n <Input\n value={url} onChange={(e) => setUrl(e.target.value)}\n placeholder={t('mcp.urlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.headersLabel')}</Label>\n <Input\n value={headersJson} onChange={(e) => setHeadersJson(e.target.value)}\n placeholder={t('mcp.headersPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n )}\n <div className=\"sm:col-span-2 flex\">\n <Button type=\"submit\" disabled={addServer.isPending} className=\"ml-auto\">\n {addServer.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('mcp.addServer')}\n </Button>\n </div>\n </form>\n </section>\n )\n}\n"],"names":["ServerCog","createLucideIcon","SettingsMcpRoute","useTranslation","listQuery","useMcpList","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","ServersCard","AddServerCard","data","t","removeServer","useMcpRemoveServer","health","useMcpHealth","healthResults","setHealthResults","useState","onRemove","name","toast","err","onHealth","m","msg","rows","runtime","Badge","Table","TableHeader","TableRow","TableHead","TableBody","s","rt","r","transport","transportLabel","target","runtimeBadge","TableCell","Activity","Trash2","addServer","useMcpAddServer","setName","setTransport","command","setCommand","args","setArgs","url","setUrl","headersJson","setHeadersJson","onSubmit","e","headers","body","splitArgs","Label","Input","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","Plus"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{o as De,z as he,A as Pe,E as pe,j as o,P as T,F as w,G as U,H as Te,J as Ae,K as xe,M as Ut,Q as Bt,U as Oe,V as oe,W as Vt,Y as Yt,Z as zt,_ as Ht,$ as qt,a0 as Xt,a1 as Wt,a2 as Qt,a3 as Zt,a4 as Jt,a5 as ke,c as A,r as en,b as tn,d as Fe,a as nn,e as on,u as Le,f as rn,l as an,B as Ne,T as sn,I as le,L as Ie,m as Ee,n as cn}from"./index-BIBWEKxu.js";import{r as a}from"./react-DlP5eolq.js";import{D as un}from"./data-table-1cGunUIX.js";import{E as ln}from"./empty-state-BRsb30K6.js";import{C as dn}from"./confirm-dialog-GZyIzSwj.js";import{C as pn}from"./chevron-right-BhSTLH2K.js";import{T as fn}from"./trash-2-BF98SY8M.js";import{R as mn}from"./refresh-ccw-CFPE6zD1.js";import{S as hn}from"./search-D9TZs0bG.js";import{M as xn}from"./map-pin-B-IMY07m.js";import"./table-Dww-k14l.js";import"./arrow-up-Cc28qbjN.js";import"./arrow-down-x-Lq92tn.js";/**
1
+ import{o as De,z as he,A as Pe,E as pe,j as o,P as T,F as w,G as U,H as Te,J as Ae,K as xe,M as Ut,Q as Bt,U as Oe,V as oe,W as Vt,Y as Yt,Z as zt,_ as Ht,$ as qt,a0 as Xt,a1 as Wt,a2 as Qt,a3 as Zt,a4 as Jt,a5 as ke,c as A,r as en,b as tn,d as Fe,a as nn,e as on,u as Le,f as rn,l as an,B as Ne,T as sn,I as le,L as Ie,m as Ee,n as cn}from"./index-B795P_3p.js";import{r as a}from"./react-DlP5eolq.js";import{D as un}from"./data-table-BHctKsHM.js";import{E as ln}from"./empty-state-BzzUgjlL.js";import{C as dn}from"./confirm-dialog-C8nuBNh3.js";import{C as pn}from"./chevron-right-LF_j8BGd.js";import{T as fn}from"./trash-2-DUSLukqd.js";import{R as mn}from"./refresh-ccw-S3sFYfDb.js";import{S as hn}from"./search-Bx2TNvqF.js";import{M as xn}from"./map-pin-e694Eet6.js";import"./table-Dl8Faxz-.js";import"./arrow-up-Cba9TuAO.js";import"./arrow-down-DAjYgwW2.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -9,4 +9,4 @@ import{o as De,z as he,A as Pe,E as pe,j as o,P as T,F as w,G as U,H as Te,J as
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const gn=De("NotebookText",[["path",{d:"M2 6h4",key:"aawbzj"}],["path",{d:"M2 10h4",key:"l0bgd4"}],["path",{d:"M2 14h4",key:"1gsvsf"}],["path",{d:"M2 18h4",key:"1bu2t1"}],["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["path",{d:"M9.5 8h5",key:"11mslq"}],["path",{d:"M9.5 12H16",key:"ktog6x"}],["path",{d:"M9.5 16H14",key:"p1seyn"}]]);var de="rovingFocusGroup.onEntryFocus",vn={bubbles:!1,cancelable:!0},W="RovingFocusGroup",[fe,Ge,Mn]=Pe(W),[Cn,Ke]=he(W,[Mn]),[bn,_n]=Cn(W),$e=a.forwardRef((e,n)=>o.jsx(fe.Provider,{scope:e.__scopeRovingFocusGroup,children:o.jsx(fe.Slot,{scope:e.__scopeRovingFocusGroup,children:o.jsx(yn,{...e,ref:n})})}));$e.displayName=W;var yn=a.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,orientation:r,loop:s=!1,dir:c,currentTabStopId:l,defaultCurrentTabStopId:d,onCurrentTabStopIdChange:m,onEntryFocus:h,preventScrollOnEntryFocus:f=!1,...i}=e,x=a.useRef(null),M=U(n,x),g=Te(c),[N,v]=Ae({prop:l,defaultProp:d??null,onChange:m,caller:W}),[C,P]=a.useState(!1),b=xe(h),I=Ge(t),O=a.useRef(!1),[u,y]=a.useState(0);return a.useEffect(()=>{const _=x.current;if(_)return _.addEventListener(de,b),()=>_.removeEventListener(de,b)},[b]),o.jsx(bn,{scope:t,orientation:r,dir:g,loop:s,currentTabStopId:N,onItemFocus:a.useCallback(_=>v(_),[v]),onItemShiftTab:a.useCallback(()=>P(!0),[]),onFocusableItemAdd:a.useCallback(()=>y(_=>_+1),[]),onFocusableItemRemove:a.useCallback(()=>y(_=>_-1),[]),children:o.jsx(T.div,{tabIndex:C||u===0?-1:0,"data-orientation":r,...i,ref:M,style:{outline:"none",...e.style},onMouseDown:w(e.onMouseDown,()=>{O.current=!0}),onFocus:w(e.onFocus,_=>{const j=!O.current;if(_.target===_.currentTarget&&j&&!C){const k=new CustomEvent(de,vn);if(_.currentTarget.dispatchEvent(k),!k.defaultPrevented){const B=I().filter(D=>D.focusable),V=B.find(D=>D.active),J=B.find(D=>D.id===N),ce=[V,J,...B].filter(Boolean).map(D=>D.ref.current);Ve(ce,f)}}O.current=!1}),onBlur:w(e.onBlur,()=>P(!1))})})}),Ue="RovingFocusGroupItem",Be=a.forwardRef((e,n)=>{const{__scopeRovingFocusGroup:t,focusable:r=!0,active:s=!1,tabStopId:c,children:l,...d}=e,m=pe(),h=c||m,f=_n(Ue,t),i=f.currentTabStopId===h,x=Ge(t),{onFocusableItemAdd:M,onFocusableItemRemove:g,currentTabStopId:N}=f;return a.useEffect(()=>{if(r)return M(),()=>g()},[r,M,g]),o.jsx(fe.ItemSlot,{scope:t,id:h,focusable:r,active:s,children:o.jsx(T.span,{tabIndex:i?0:-1,"data-orientation":f.orientation,...d,ref:n,onMouseDown:w(e.onMouseDown,v=>{r?f.onItemFocus(h):v.preventDefault()}),onFocus:w(e.onFocus,()=>f.onItemFocus(h)),onKeyDown:w(e.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){f.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const C=In(v,f.orientation,f.dir);if(C!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let b=x().filter(I=>I.focusable).map(I=>I.ref.current);if(C==="last")b.reverse();else if(C==="prev"||C==="next"){C==="prev"&&b.reverse();const I=b.indexOf(v.currentTarget);b=f.loop?En(b,I+1):b.slice(I+1)}setTimeout(()=>Ve(b))}}),children:typeof l=="function"?l({isCurrentTabStop:i,hasTabStop:N!=null}):l})})});Be.displayName=Ue;var Rn={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Nn(e,n){return n!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function In(e,n,t){const r=Nn(e.key,t);if(!(n==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(n==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Rn[r]}function Ve(e,n=!1){const t=document.activeElement;for(const r of e)if(r===t||(r.focus({preventScroll:n}),document.activeElement!==t))return}function En(e,n){return e.map((t,r)=>e[(n+r)%e.length])}var Sn=$e,jn=Be,me=["Enter"," "],Dn=["ArrowDown","PageUp","Home"],Ye=["ArrowUp","PageDown","End"],Pn=[...Dn,...Ye],Tn={ltr:[...me,"ArrowRight"],rtl:[...me,"ArrowLeft"]},An={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Q="Menu",[q,On,kn]=Pe(Q),[L,ze]=he(Q,[kn,Oe,Ke]),re=Oe(),He=Ke(),[Fn,G]=L(Q),[Ln,Z]=L(Q),qe=e=>{const{__scopeMenu:n,open:t=!1,children:r,dir:s,onOpenChange:c,modal:l=!0}=e,d=re(n),[m,h]=a.useState(null),f=a.useRef(!1),i=xe(c),x=Te(s);return a.useEffect(()=>{const M=()=>{f.current=!0,document.addEventListener("pointerdown",g,{capture:!0,once:!0}),document.addEventListener("pointermove",g,{capture:!0,once:!0})},g=()=>f.current=!1;return document.addEventListener("keydown",M,{capture:!0}),()=>{document.removeEventListener("keydown",M,{capture:!0}),document.removeEventListener("pointerdown",g,{capture:!0}),document.removeEventListener("pointermove",g,{capture:!0})}},[]),a.useEffect(()=>{if(!t)return;const M=()=>i(!1);return window.addEventListener("blur",M),()=>window.removeEventListener("blur",M)},[t,i]),o.jsx(Ut,{...d,children:o.jsx(Fn,{scope:n,open:t,onOpenChange:i,content:m,onContentChange:h,children:o.jsx(Ln,{scope:n,onClose:a.useCallback(()=>i(!1),[i]),isUsingKeyboardRef:f,dir:x,modal:l,children:r})})})};qe.displayName=Q;var Gn="MenuAnchor",we=a.forwardRef((e,n)=>{const{__scopeMenu:t,...r}=e,s=re(t);return o.jsx(Bt,{...s,...r,ref:n})});we.displayName=Gn;var ge="MenuPortal",[Kn,Xe]=L(ge,{forceMount:void 0}),We=e=>{const{__scopeMenu:n,forceMount:t,children:r,container:s}=e,c=G(ge,n);return o.jsx(Kn,{scope:n,forceMount:t,children:o.jsx(oe,{present:t||c.open,children:o.jsx(Vt,{asChild:!0,container:s,children:r})})})};We.displayName=ge;var S="MenuContent",[$n,ve]=L(S),Qe=a.forwardRef((e,n)=>{const t=Xe(S,e.__scopeMenu),{forceMount:r=t.forceMount,...s}=e,c=G(S,e.__scopeMenu),l=Z(S,e.__scopeMenu);return o.jsx(q.Provider,{scope:e.__scopeMenu,children:o.jsx(oe,{present:r||c.open,children:o.jsx(q.Slot,{scope:e.__scopeMenu,children:l.modal?o.jsx(Un,{...s,ref:n}):o.jsx(Bn,{...s,ref:n})})})})}),Un=a.forwardRef((e,n)=>{const t=G(S,e.__scopeMenu),r=a.useRef(null),s=U(n,r);return a.useEffect(()=>{const c=r.current;if(c)return Yt(c)},[]),o.jsx(Me,{...e,ref:s,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:w(e.onFocusOutside,c=>c.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)})}),Bn=a.forwardRef((e,n)=>{const t=G(S,e.__scopeMenu);return o.jsx(Me,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)})}),Vn=Zt("MenuContent.ScrollLock"),Me=a.forwardRef((e,n)=>{const{__scopeMenu:t,loop:r=!1,trapFocus:s,onOpenAutoFocus:c,onCloseAutoFocus:l,disableOutsidePointerEvents:d,onEntryFocus:m,onEscapeKeyDown:h,onPointerDownOutside:f,onFocusOutside:i,onInteractOutside:x,onDismiss:M,disableOutsideScroll:g,...N}=e,v=G(S,t),C=Z(S,t),P=re(t),b=He(t),I=On(t),[O,u]=a.useState(null),y=a.useRef(null),_=U(n,y,v.onContentChange),j=a.useRef(0),k=a.useRef(""),B=a.useRef(0),V=a.useRef(null),J=a.useRef("right"),ee=a.useRef(0),ce=g?qt:a.Fragment,D=g?{as:Vn,allowPinchZoom:!0}:void 0,$t=p=>{const $=k.current+p,F=I().filter(E=>!E.disabled),Y=document.activeElement,ie=F.find(E=>E.ref.current===Y)?.textValue,ue=F.map(E=>E.textValue),ye=no(ue,$,ie),z=F.find(E=>E.textValue===ye)?.ref.current;(function E(Re){k.current=Re,window.clearTimeout(j.current),Re!==""&&(j.current=window.setTimeout(()=>E(""),1e3))})($),z&&setTimeout(()=>z.focus())};a.useEffect(()=>()=>window.clearTimeout(j.current),[]),Ht();const K=a.useCallback(p=>J.current===V.current?.side&&ro(p,V.current?.area),[]);return o.jsx($n,{scope:t,searchRef:k,onItemEnter:a.useCallback(p=>{K(p)&&p.preventDefault()},[K]),onItemLeave:a.useCallback(p=>{K(p)||(y.current?.focus(),u(null))},[K]),onTriggerLeave:a.useCallback(p=>{K(p)&&p.preventDefault()},[K]),pointerGraceTimerRef:B,onPointerGraceIntentChange:a.useCallback(p=>{V.current=p},[]),children:o.jsx(ce,{...D,children:o.jsx(Xt,{asChild:!0,trapped:s,onMountAutoFocus:w(c,p=>{p.preventDefault(),y.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:l,children:o.jsx(Wt,{asChild:!0,disableOutsidePointerEvents:d,onEscapeKeyDown:h,onPointerDownOutside:f,onFocusOutside:i,onInteractOutside:x,onDismiss:M,children:o.jsx(Sn,{asChild:!0,...b,dir:C.dir,orientation:"vertical",loop:r,currentTabStopId:O,onCurrentTabStopIdChange:u,onEntryFocus:w(m,p=>{C.isUsingKeyboardRef.current||p.preventDefault()}),preventScrollOnEntryFocus:!0,children:o.jsx(Qt,{role:"menu","aria-orientation":"vertical","data-state":ft(v.open),"data-radix-menu-content":"",dir:C.dir,...P,...N,ref:_,style:{outline:"none",...N.style},onKeyDown:w(N.onKeyDown,p=>{const F=p.target.closest("[data-radix-menu-content]")===p.currentTarget,Y=p.ctrlKey||p.altKey||p.metaKey,ie=p.key.length===1;F&&(p.key==="Tab"&&p.preventDefault(),!Y&&ie&&$t(p.key));const ue=y.current;if(p.target!==ue||!Pn.includes(p.key))return;p.preventDefault();const z=I().filter(E=>!E.disabled).map(E=>E.ref.current);Ye.includes(p.key)&&z.reverse(),eo(z)}),onBlur:w(e.onBlur,p=>{p.currentTarget.contains(p.target)||(window.clearTimeout(j.current),k.current="")}),onPointerMove:w(e.onPointerMove,X(p=>{const $=p.target,F=ee.current!==p.clientX;if(p.currentTarget.contains($)&&F){const Y=p.clientX>ee.current?"right":"left";J.current=Y,ee.current=p.clientX}}))})})})})})})});Qe.displayName=S;var Yn="MenuGroup",Ce=a.forwardRef((e,n)=>{const{__scopeMenu:t,...r}=e;return o.jsx(T.div,{role:"group",...r,ref:n})});Ce.displayName=Yn;var zn="MenuLabel",Ze=a.forwardRef((e,n)=>{const{__scopeMenu:t,...r}=e;return o.jsx(T.div,{...r,ref:n})});Ze.displayName=zn;var te="MenuItem",Se="menu.itemSelect",ae=a.forwardRef((e,n)=>{const{disabled:t=!1,onSelect:r,...s}=e,c=a.useRef(null),l=Z(te,e.__scopeMenu),d=ve(te,e.__scopeMenu),m=U(n,c),h=a.useRef(!1),f=()=>{const i=c.current;if(!t&&i){const x=new CustomEvent(Se,{bubbles:!0,cancelable:!0});i.addEventListener(Se,M=>r?.(M),{once:!0}),zt(i,x),x.defaultPrevented?h.current=!1:l.onClose()}};return o.jsx(Je,{...s,ref:m,disabled:t,onClick:w(e.onClick,f),onPointerDown:i=>{e.onPointerDown?.(i),h.current=!0},onPointerUp:w(e.onPointerUp,i=>{h.current||i.currentTarget?.click()}),onKeyDown:w(e.onKeyDown,i=>{const x=d.searchRef.current!=="";t||x&&i.key===" "||me.includes(i.key)&&(i.currentTarget.click(),i.preventDefault())})})});ae.displayName=te;var Je=a.forwardRef((e,n)=>{const{__scopeMenu:t,disabled:r=!1,textValue:s,...c}=e,l=ve(te,t),d=He(t),m=a.useRef(null),h=U(n,m),[f,i]=a.useState(!1),[x,M]=a.useState("");return a.useEffect(()=>{const g=m.current;g&&M((g.textContent??"").trim())},[c.children]),o.jsx(q.ItemSlot,{scope:t,disabled:r,textValue:s??x,children:o.jsx(jn,{asChild:!0,...d,focusable:!r,children:o.jsx(T.div,{role:"menuitem","data-highlighted":f?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...c,ref:h,onPointerMove:w(e.onPointerMove,X(g=>{r?l.onItemLeave(g):(l.onItemEnter(g),g.defaultPrevented||g.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:w(e.onPointerLeave,X(g=>l.onItemLeave(g))),onFocus:w(e.onFocus,()=>i(!0)),onBlur:w(e.onBlur,()=>i(!1))})})})}),Hn="MenuCheckboxItem",et=a.forwardRef((e,n)=>{const{checked:t=!1,onCheckedChange:r,...s}=e;return o.jsx(at,{scope:e.__scopeMenu,checked:t,children:o.jsx(ae,{role:"menuitemcheckbox","aria-checked":ne(t)?"mixed":t,...s,ref:n,"data-state":_e(t),onSelect:w(s.onSelect,()=>r?.(ne(t)?!0:!t),{checkForDefaultPrevented:!1})})})});et.displayName=Hn;var tt="MenuRadioGroup",[qn,Xn]=L(tt,{value:void 0,onValueChange:()=>{}}),nt=a.forwardRef((e,n)=>{const{value:t,onValueChange:r,...s}=e,c=xe(r);return o.jsx(qn,{scope:e.__scopeMenu,value:t,onValueChange:c,children:o.jsx(Ce,{...s,ref:n})})});nt.displayName=tt;var ot="MenuRadioItem",rt=a.forwardRef((e,n)=>{const{value:t,...r}=e,s=Xn(ot,e.__scopeMenu),c=t===s.value;return o.jsx(at,{scope:e.__scopeMenu,checked:c,children:o.jsx(ae,{role:"menuitemradio","aria-checked":c,...r,ref:n,"data-state":_e(c),onSelect:w(r.onSelect,()=>s.onValueChange?.(t),{checkForDefaultPrevented:!1})})})});rt.displayName=ot;var be="MenuItemIndicator",[at,Wn]=L(be,{checked:!1}),st=a.forwardRef((e,n)=>{const{__scopeMenu:t,forceMount:r,...s}=e,c=Wn(be,t);return o.jsx(oe,{present:r||ne(c.checked)||c.checked===!0,children:o.jsx(T.span,{...s,ref:n,"data-state":_e(c.checked)})})});st.displayName=be;var Qn="MenuSeparator",ct=a.forwardRef((e,n)=>{const{__scopeMenu:t,...r}=e;return o.jsx(T.div,{role:"separator","aria-orientation":"horizontal",...r,ref:n})});ct.displayName=Qn;var Zn="MenuArrow",it=a.forwardRef((e,n)=>{const{__scopeMenu:t,...r}=e,s=re(t);return o.jsx(Jt,{...s,...r,ref:n})});it.displayName=Zn;var Jn="MenuSub",[fr,ut]=L(Jn),H="MenuSubTrigger",lt=a.forwardRef((e,n)=>{const t=G(H,e.__scopeMenu),r=Z(H,e.__scopeMenu),s=ut(H,e.__scopeMenu),c=ve(H,e.__scopeMenu),l=a.useRef(null),{pointerGraceTimerRef:d,onPointerGraceIntentChange:m}=c,h={__scopeMenu:e.__scopeMenu},f=a.useCallback(()=>{l.current&&window.clearTimeout(l.current),l.current=null},[]);return a.useEffect(()=>f,[f]),a.useEffect(()=>{const i=d.current;return()=>{window.clearTimeout(i),m(null)}},[d,m]),o.jsx(we,{asChild:!0,...h,children:o.jsx(Je,{id:s.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":t.open?s.contentId:void 0,"data-state":ft(t.open),...e,ref:ke(n,s.onTriggerChange),onClick:i=>{e.onClick?.(i),!(e.disabled||i.defaultPrevented)&&(i.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:w(e.onPointerMove,X(i=>{c.onItemEnter(i),!i.defaultPrevented&&!e.disabled&&!t.open&&!l.current&&(c.onPointerGraceIntentChange(null),l.current=window.setTimeout(()=>{t.onOpenChange(!0),f()},100))})),onPointerLeave:w(e.onPointerLeave,X(i=>{f();const x=t.content?.getBoundingClientRect();if(x){const M=t.content?.dataset.side,g=M==="right",N=g?-5:5,v=x[g?"left":"right"],C=x[g?"right":"left"];c.onPointerGraceIntentChange({area:[{x:i.clientX+N,y:i.clientY},{x:v,y:x.top},{x:C,y:x.top},{x:C,y:x.bottom},{x:v,y:x.bottom}],side:M}),window.clearTimeout(d.current),d.current=window.setTimeout(()=>c.onPointerGraceIntentChange(null),300)}else{if(c.onTriggerLeave(i),i.defaultPrevented)return;c.onPointerGraceIntentChange(null)}})),onKeyDown:w(e.onKeyDown,i=>{const x=c.searchRef.current!=="";e.disabled||x&&i.key===" "||Tn[r.dir].includes(i.key)&&(t.onOpenChange(!0),t.content?.focus(),i.preventDefault())})})})});lt.displayName=H;var dt="MenuSubContent",pt=a.forwardRef((e,n)=>{const t=Xe(S,e.__scopeMenu),{forceMount:r=t.forceMount,align:s="start",...c}=e,l=G(S,e.__scopeMenu),d=Z(S,e.__scopeMenu),m=ut(dt,e.__scopeMenu),h=a.useRef(null),f=U(n,h);return o.jsx(q.Provider,{scope:e.__scopeMenu,children:o.jsx(oe,{present:r||l.open,children:o.jsx(q.Slot,{scope:e.__scopeMenu,children:o.jsx(Me,{id:m.contentId,"aria-labelledby":m.triggerId,...c,ref:f,align:s,side:d.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:i=>{d.isUsingKeyboardRef.current&&h.current?.focus(),i.preventDefault()},onCloseAutoFocus:i=>i.preventDefault(),onFocusOutside:w(e.onFocusOutside,i=>{i.target!==m.trigger&&l.onOpenChange(!1)}),onEscapeKeyDown:w(e.onEscapeKeyDown,i=>{d.onClose(),i.preventDefault()}),onKeyDown:w(e.onKeyDown,i=>{const x=i.currentTarget.contains(i.target),M=An[d.dir].includes(i.key);x&&M&&(l.onOpenChange(!1),m.trigger?.focus(),i.preventDefault())})})})})})});pt.displayName=dt;function ft(e){return e?"open":"closed"}function ne(e){return e==="indeterminate"}function _e(e){return ne(e)?"indeterminate":e?"checked":"unchecked"}function eo(e){const n=document.activeElement;for(const t of e)if(t===n||(t.focus(),document.activeElement!==n))return}function to(e,n){return e.map((t,r)=>e[(n+r)%e.length])}function no(e,n,t){const s=n.length>1&&Array.from(n).every(h=>h===n[0])?n[0]:n,c=t?e.indexOf(t):-1;let l=to(e,Math.max(c,0));s.length===1&&(l=l.filter(h=>h!==t));const m=l.find(h=>h.toLowerCase().startsWith(s.toLowerCase()));return m!==t?m:void 0}function oo(e,n){const{x:t,y:r}=e;let s=!1;for(let c=0,l=n.length-1;c<n.length;l=c++){const d=n[c],m=n[l],h=d.x,f=d.y,i=m.x,x=m.y;f>r!=x>r&&t<(i-h)*(r-f)/(x-f)+h&&(s=!s)}return s}function ro(e,n){if(!n)return!1;const t={x:e.clientX,y:e.clientY};return oo(t,n)}function X(e){return n=>n.pointerType==="mouse"?e(n):void 0}var ao=qe,so=we,co=We,io=Qe,uo=Ce,lo=Ze,po=ae,fo=et,mo=nt,ho=rt,xo=st,wo=ct,go=it,vo=lt,Mo=pt,se="DropdownMenu",[Co]=he(se,[ze]),R=ze(),[bo,mt]=Co(se),ht=e=>{const{__scopeDropdownMenu:n,children:t,dir:r,open:s,defaultOpen:c,onOpenChange:l,modal:d=!0}=e,m=R(n),h=a.useRef(null),[f,i]=Ae({prop:s,defaultProp:c??!1,onChange:l,caller:se});return o.jsx(bo,{scope:n,triggerId:pe(),triggerRef:h,contentId:pe(),open:f,onOpenChange:i,onOpenToggle:a.useCallback(()=>i(x=>!x),[i]),modal:d,children:o.jsx(ao,{...m,open:f,onOpenChange:i,dir:r,modal:d,children:t})})};ht.displayName=se;var xt="DropdownMenuTrigger",wt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,disabled:r=!1,...s}=e,c=mt(xt,t),l=R(t);return o.jsx(so,{asChild:!0,...l,children:o.jsx(T.button,{type:"button",id:c.triggerId,"aria-haspopup":"menu","aria-expanded":c.open,"aria-controls":c.open?c.contentId:void 0,"data-state":c.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...s,ref:ke(n,c.triggerRef),onPointerDown:w(e.onPointerDown,d=>{!r&&d.button===0&&d.ctrlKey===!1&&(c.onOpenToggle(),c.open||d.preventDefault())}),onKeyDown:w(e.onKeyDown,d=>{r||(["Enter"," "].includes(d.key)&&c.onOpenToggle(),d.key==="ArrowDown"&&c.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(d.key)&&d.preventDefault())})})})});wt.displayName=xt;var _o="DropdownMenuPortal",gt=e=>{const{__scopeDropdownMenu:n,...t}=e,r=R(n);return o.jsx(co,{...r,...t})};gt.displayName=_o;var vt="DropdownMenuContent",Mt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=mt(vt,t),c=R(t),l=a.useRef(!1);return o.jsx(io,{id:s.contentId,"aria-labelledby":s.triggerId,...c,...r,ref:n,onCloseAutoFocus:w(e.onCloseAutoFocus,d=>{l.current||s.triggerRef.current?.focus(),l.current=!1,d.preventDefault()}),onInteractOutside:w(e.onInteractOutside,d=>{const m=d.detail.originalEvent,h=m.button===0&&m.ctrlKey===!0,f=m.button===2||h;(!s.modal||f)&&(l.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Mt.displayName=vt;var yo="DropdownMenuGroup",Ro=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(uo,{...s,...r,ref:n})});Ro.displayName=yo;var No="DropdownMenuLabel",Ct=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(lo,{...s,...r,ref:n})});Ct.displayName=No;var Io="DropdownMenuItem",bt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(po,{...s,...r,ref:n})});bt.displayName=Io;var Eo="DropdownMenuCheckboxItem",_t=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(fo,{...s,...r,ref:n})});_t.displayName=Eo;var So="DropdownMenuRadioGroup",jo=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(mo,{...s,...r,ref:n})});jo.displayName=So;var Do="DropdownMenuRadioItem",yt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(ho,{...s,...r,ref:n})});yt.displayName=Do;var Po="DropdownMenuItemIndicator",Rt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(xo,{...s,...r,ref:n})});Rt.displayName=Po;var To="DropdownMenuSeparator",Nt=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(wo,{...s,...r,ref:n})});Nt.displayName=To;var Ao="DropdownMenuArrow",Oo=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(go,{...s,...r,ref:n})});Oo.displayName=Ao;var ko="DropdownMenuSubTrigger",It=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(vo,{...s,...r,ref:n})});It.displayName=ko;var Fo="DropdownMenuSubContent",Et=a.forwardRef((e,n)=>{const{__scopeDropdownMenu:t,...r}=e,s=R(t);return o.jsx(Mo,{...s,...r,ref:n,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Et.displayName=Fo;var Lo=ht,Go=wt,Ko=gt,St=Mt,jt=Ct,Dt=bt,Pt=_t,Tt=yt,At=Rt,Ot=Nt,kt=It,Ft=Et;const $o=Lo,Uo=Go,Bo=a.forwardRef(({className:e,inset:n,children:t,...r},s)=>o.jsxs(kt,{ref:s,className:A("flex cursor-default select-none items-center gap-2 rounded px-2 py-1.5 text-sm outline-none","focus:bg-surface-hover data-[state=open]:bg-surface-hover",n&&"pl-8",e),...r,children:[t,o.jsx(pn,{className:"ml-auto h-4 w-4"})]}));Bo.displayName=kt.displayName;const Vo=a.forwardRef(({className:e,...n},t)=>o.jsx(Ft,{ref:t,className:A("z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-surface p-1 shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",e),...n}));Vo.displayName=Ft.displayName;const Lt=a.forwardRef(({className:e,sideOffset:n=4,...t},r)=>o.jsx(Ko,{children:o.jsx(St,{ref:r,sideOffset:n,className:A("z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-surface p-1 shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",e),...t})}));Lt.displayName=St.displayName;const Gt=a.forwardRef(({className:e,inset:n,...t},r)=>o.jsx(Dt,{ref:r,className:A("relative flex cursor-default select-none items-center gap-2 rounded px-2 py-1.5 text-sm outline-none","focus:bg-surface-hover focus:text-text","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n&&"pl-8",e),...t}));Gt.displayName=Dt.displayName;const Yo=a.forwardRef(({className:e,children:n,checked:t,...r},s)=>o.jsxs(Pt,{ref:s,className:A("relative flex cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none","focus:bg-surface-hover","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),checked:t,...r,children:[o.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:o.jsx(At,{children:o.jsx(en,{className:"h-4 w-4"})})}),n]}));Yo.displayName=Pt.displayName;const zo=a.forwardRef(({className:e,children:n,...t},r)=>o.jsxs(Tt,{ref:r,className:A("relative flex cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none","focus:bg-surface-hover","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...t,children:[o.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:o.jsx(At,{children:o.jsx(wn,{className:"h-2 w-2 fill-current"})})}),n]}));zo.displayName=Tt.displayName;const Ho=a.forwardRef(({className:e,inset:n,...t},r)=>o.jsx(jt,{ref:r,className:A("px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-text-muted",n&&"pl-8",e),...t}));Ho.displayName=jt.displayName;const qo=a.forwardRef(({className:e,...n},t)=>o.jsx(Ot,{ref:t,className:A("-mx-1 my-1 h-px bg-border",e),...n}));qo.displayName=Ot.displayName;const Kt={all:["memos"],list:e=>["memos","list",e]};function Xo(e){return tn({queryKey:Kt.list(e),queryFn:()=>Fe.listMemos(e)})}function Wo(){const e=nn();return on({mutationFn:n=>Fe.deleteMemo(n),onSuccess:()=>e.invalidateQueries({queryKey:Kt.all})})}const Qo=300;function mr(){const{t:e}=Le(["memos","common"]),[n,t]=rn(),r=n.get("q")??"",s=n.get("who")??"",c=n.get("what")??"",l=n.get("has_location")==="1",d=n.get("include_expired")==="1",[m,h]=a.useState(r);a.useEffect(()=>{if(m===r)return;const u=window.setTimeout(()=>{b({q:m||null})},Qo);return()=>window.clearTimeout(u)},[m]);const f=a.useMemo(()=>({...r?{query:r}:{},...s?{who:s}:{},...c?{what:c}:{},...l?{has_location:!0}:{},...d?{include_expired:!0}:{},limit:200}),[r,s,c,l,d]),{data:i,isLoading:x,isFetching:M,refetch:g}=Xo(f),N=i?.memos??[],v=Wo(),[C,P]=a.useState(null);function b(u){const y=new URLSearchParams(n);for(const[_,j]of Object.entries(u))j==null||j===""?y.delete(_):y.set(_,j);t(y,{replace:!0})}async function I(){if(C!=null)try{await v.mutateAsync(C),Ee.success(e("toast.deleted"))}catch(u){const{message:y}=cn(u,e);throw Ee.error(y),u}}const O=a.useMemo(()=>[{id:"id",header:e("col.id"),cell:u=>o.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",u.id]}),headClassName:"w-16"},{id:"what",header:e("col.what"),cell:u=>o.jsx("span",{className:"line-clamp-2",children:u.memo?o.jsx("span",{className:"text-text",children:u.memo}):o.jsx("span",{className:"font-medium text-text",children:u.what})}),asCardTitle:!0},{id:"who",header:e("col.who"),cell:u=>u.who?o.jsx(an,{variant:"secondary",children:u.who}):o.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-32"},{id:"when",header:e("col.when"),cell:u=>o.jsx("span",{className:"text-text-dim",children:u.whenText||(u.whenAt?je(u.whenAt):"—")}),headClassName:"w-36"},{id:"where",header:e("col.where"),cell:u=>u.where_label||u.where_lat!=null&&u.where_lng!=null?o.jsx(Jo,{memo:u}):o.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-44"},{id:"platform",header:e("col.platform"),cell:u=>o.jsx("span",{className:"text-text-dim",children:u.platform}),headClassName:"w-24",hideOnMobile:!0},{id:"createdAt",header:e("col.createdAt"),cell:u=>o.jsx("span",{className:"text-text-dim",children:je(u.createdAt)}),headClassName:"w-36",hideOnMobile:!0},{id:"actions",header:"",cell:u=>o.jsx("div",{className:"flex justify-end",children:o.jsxs(Ne,{variant:"ghost",size:"sm",onClick:y=>{y.stopPropagation(),P(u.id)},disabled:v.isPending,"aria-label":e("action.delete"),children:[o.jsx(fn,{className:"h-3 w-3"}),o.jsx("span",{className:"sr-only sm:not-sr-only sm:ml-1",children:e("action.delete")})]})}),headClassName:"w-24"}],[e,v.isPending]);return o.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[o.jsx(sn,{}),o.jsxs("main",{className:"mx-auto flex w-full max-w-7xl flex-1 flex-col gap-4 px-3 py-4 sm:px-4 pb-safe",children:[o.jsxs("header",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[o.jsx("h1",{className:"text-xl font-semibold",children:e("pageTitle")}),o.jsxs(Ne,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>g(),disabled:M,"aria-label":e("actions.refresh",{ns:"common"}),children:[o.jsx(mn,{className:`h-4 w-4 ${M?"animate-spin":""}`}),o.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),o.jsx("p",{className:"text-sm text-text-dim",children:e("subtitle")})]}),o.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end",children:[o.jsxs("div",{className:"relative flex-1 max-w-md",children:[o.jsx(hn,{className:"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-text-muted"}),o.jsx(le,{value:m,onChange:u=>h(u.target.value),placeholder:e("search.placeholder"),className:"pl-7"})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:flex sm:items-end",children:[o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsx(Ie,{htmlFor:"who-filter",className:"text-xs text-text-dim",children:e("search.who")}),o.jsx(le,{id:"who-filter",value:s,onChange:u=>b({who:u.target.value||null}),className:"w-36"})]}),o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsx(Ie,{htmlFor:"what-filter",className:"text-xs text-text-dim",children:e("search.what")}),o.jsx(le,{id:"what-filter",value:c,onChange:u=>b({what:u.target.value||null}),className:"w-36"})]})]}),o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsxs("label",{className:"inline-flex items-center gap-1 text-sm text-text-dim",children:[o.jsx("input",{type:"checkbox",checked:l,onChange:u=>b({has_location:u.target.checked?"1":null}),className:"h-4 w-4 accent-accent"}),e("search.hasLocation")]}),o.jsxs("label",{className:"inline-flex items-center gap-1 text-sm text-text-dim",children:[o.jsx("input",{type:"checkbox",checked:d,onChange:u=>b({include_expired:u.target.checked?"1":null}),className:"h-4 w-4 accent-accent"}),e("search.includeExpired")]})]})]}),o.jsx(un,{columns:O,rows:N,getRowId:u=>String(u.id),loading:x,emptyState:o.jsx(ln,{icon:o.jsx(gn,{}),title:e("empty.title"),description:e("empty.description")})}),o.jsx(dn,{open:C!=null,onOpenChange:u=>{u||P(null)},title:e("action.confirmDelete"),description:e("action.confirmDeleteDesc"),intent:"danger",confirmLabel:e("action.delete"),onConfirm:I})]})]})}const Zo={baidu:"openMap.baidu",apple:"openMap.apple",google:"openMap.google",osm:"openMap.osm"};function Jo({memo:e}){const{t:n}=Le("memos"),t=e.where_label||`${e.where_lat}, ${e.where_lng}`,r=Object.entries(e.mapUrls??{});return r.length===0?o.jsx("span",{className:"text-text-dim",children:t}):o.jsxs($o,{children:[o.jsx(Uo,{asChild:!0,children:o.jsxs("button",{type:"button",className:"inline-flex items-center gap-1 text-sm text-text-dim hover:text-accent",onClick:s=>s.stopPropagation(),children:[o.jsx(xn,{className:"h-3 w-3"}),o.jsx("span",{className:"line-clamp-1 underline-offset-2 hover:underline",children:t})]})}),o.jsx(Lt,{children:r.map(([s,c])=>o.jsx(Gt,{asChild:!0,children:o.jsx("a",{href:c,target:"_blank",rel:"noopener noreferrer",children:n(Zo[s]??"openMap.label",{defaultValue:s})})},s))})]})}function je(e){try{const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return e}}export{mr as default};
12
- //# sourceMappingURL=memos-DcpDEVN8.js.map
12
+ //# sourceMappingURL=memos-C81bimPJ.js.map