agim-cli 1.3.2 → 1.3.3

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 (236) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cli-ui/i18n.d.ts +2 -2
  3. package/dist/cli-ui/i18n.js +4 -4
  4. package/dist/cli-ui/i18n.js.map +1 -1
  5. package/dist/cli-ui/setup-llm.js +1 -1
  6. package/dist/cli-ui/setup-llm.js.map +1 -1
  7. package/dist/cli-ui/tui/app.d.ts +4 -1
  8. package/dist/cli-ui/tui/app.d.ts.map +1 -1
  9. package/dist/cli-ui/tui/app.js +229 -6
  10. package/dist/cli-ui/tui/app.js.map +1 -1
  11. package/dist/cli-ui/tui/approval-bridge.d.ts +61 -0
  12. package/dist/cli-ui/tui/approval-bridge.d.ts.map +1 -0
  13. package/dist/cli-ui/tui/approval-bridge.js +274 -0
  14. package/dist/cli-ui/tui/approval-bridge.js.map +1 -0
  15. package/dist/cli-ui/tui/index.d.ts.map +1 -1
  16. package/dist/cli-ui/tui/index.js +31 -0
  17. package/dist/cli-ui/tui/index.js.map +1 -1
  18. package/dist/core/agent-cwd.js +1 -1
  19. package/dist/core/ask-user-rpc.d.ts +36 -14
  20. package/dist/core/ask-user-rpc.d.ts.map +1 -1
  21. package/dist/core/ask-user-rpc.js +309 -34
  22. package/dist/core/ask-user-rpc.js.map +1 -1
  23. package/dist/core/commands/builtin.d.ts.map +1 -1
  24. package/dist/core/commands/builtin.js +15 -6
  25. package/dist/core/commands/builtin.js.map +1 -1
  26. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
  27. package/dist/core/llm/imhub-dispatcher.js +6 -1
  28. package/dist/core/llm/imhub-dispatcher.js.map +1 -1
  29. package/dist/core/onboarding.js +2 -2
  30. package/dist/core/onboarding.js.map +1 -1
  31. package/dist/core/router.d.ts.map +1 -1
  32. package/dist/core/router.js +12 -9
  33. package/dist/core/router.js.map +1 -1
  34. package/dist/core/types.d.ts +6 -0
  35. package/dist/core/types.d.ts.map +1 -1
  36. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +4 -0
  37. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  38. package/dist/plugins/agents/claude-code/mcp-approval-server.js +11 -6
  39. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  40. package/dist/plugins/agents/native/index.js +8 -8
  41. package/dist/plugins/agents/native/index.js.map +1 -1
  42. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  43. package/dist/plugins/agents/pi-native/factory.js +4 -3
  44. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  45. package/dist/web/llm-api.js +7 -4
  46. package/dist/web/llm-api.js.map +1 -1
  47. package/dist/web/public/assets/{a2a-Dtc6AKjx.js → a2a-Y30Sn8pc.js} +2 -2
  48. package/dist/web/public/assets/{a2a-Dtc6AKjx.js.map → a2a-Y30Sn8pc.js.map} +1 -1
  49. package/dist/web/public/assets/{activity-CWFI_ke7.js → activity--oN7qxFJ.js} +2 -2
  50. package/dist/web/public/assets/{activity-CWFI_ke7.js.map → activity--oN7qxFJ.js.map} +1 -1
  51. package/dist/web/public/assets/{admins-CeQorJdU.js → admins-DONiT3ld.js} +2 -2
  52. package/dist/web/public/assets/{admins-CeQorJdU.js.map → admins-DONiT3ld.js.map} +1 -1
  53. package/dist/web/public/assets/agents-DRbQOH0K.js +7 -0
  54. package/dist/web/public/assets/agents-DRbQOH0K.js.map +1 -0
  55. package/dist/web/public/assets/{approvals-BEPKSyrL.js → approvals-C5jd7Wf9.js} +2 -2
  56. package/dist/web/public/assets/{approvals-BEPKSyrL.js.map → approvals-C5jd7Wf9.js.map} +1 -1
  57. package/dist/web/public/assets/{arrow-down-CzWGZc48.js → arrow-down-x-Lq92tn.js} +2 -2
  58. package/dist/web/public/assets/{arrow-down-CzWGZc48.js.map → arrow-down-x-Lq92tn.js.map} +1 -1
  59. package/dist/web/public/assets/{arrow-up-CXy94NPi.js → arrow-up-Cc28qbjN.js} +2 -2
  60. package/dist/web/public/assets/{arrow-up-CXy94NPi.js.map → arrow-up-Cc28qbjN.js.map} +1 -1
  61. package/dist/web/public/assets/{asks-BszsbhPn.js → asks-CeVcu8SD.js} +2 -2
  62. package/dist/web/public/assets/{asks-BszsbhPn.js.map → asks-CeVcu8SD.js.map} +1 -1
  63. package/dist/web/public/assets/{audit-ACrwMizd.js → audit-Dc9_FDkW.js} +2 -2
  64. package/dist/web/public/assets/{audit-ACrwMizd.js.map → audit-Dc9_FDkW.js.map} +1 -1
  65. package/dist/web/public/assets/{bell-BLwNOhXO.js → bell-CxPf_Xzs.js} +2 -2
  66. package/dist/web/public/assets/{bell-BLwNOhXO.js.map → bell-CxPf_Xzs.js.map} +1 -1
  67. package/dist/web/public/assets/{bgjobs-Cwp0PmTF.js → bgjobs-CYjmAJgs.js} +2 -2
  68. package/dist/web/public/assets/{bgjobs-Cwp0PmTF.js.map → bgjobs-CYjmAJgs.js.map} +1 -1
  69. package/dist/web/public/assets/{brain-5AJBYzXX.js → brain-DjCfwBAT.js} +2 -2
  70. package/dist/web/public/assets/{brain-5AJBYzXX.js.map → brain-DjCfwBAT.js.map} +1 -1
  71. package/dist/web/public/assets/{briefcase-BTDurkZz.js → briefcase-Br1bd_VG.js} +2 -2
  72. package/dist/web/public/assets/{briefcase-BTDurkZz.js.map → briefcase-Br1bd_VG.js.map} +1 -1
  73. package/dist/web/public/assets/chat-uqxuXn2X.js +17 -0
  74. package/dist/web/public/assets/chat-uqxuXn2X.js.map +1 -0
  75. package/dist/web/public/assets/{chevron-left-CnLOhWHE.js → chevron-left-CN-4SIfi.js} +2 -2
  76. package/dist/web/public/assets/{chevron-left-CnLOhWHE.js.map → chevron-left-CN-4SIfi.js.map} +1 -1
  77. package/dist/web/public/assets/{chevron-right-CpWYrqTa.js → chevron-right-BhSTLH2K.js} +2 -2
  78. package/dist/web/public/assets/{chevron-right-CpWYrqTa.js.map → chevron-right-BhSTLH2K.js.map} +1 -1
  79. package/dist/web/public/assets/{circle-check-DhcTh_uP.js → circle-check-B4UdHmdJ.js} +2 -2
  80. package/dist/web/public/assets/{circle-check-DhcTh_uP.js.map → circle-check-B4UdHmdJ.js.map} +1 -1
  81. package/dist/web/public/assets/{circle-check-big-CcknUEHz.js → circle-check-big-CvXnDqiF.js} +2 -2
  82. package/dist/web/public/assets/{circle-check-big-CcknUEHz.js.map → circle-check-big-CvXnDqiF.js.map} +1 -1
  83. package/dist/web/public/assets/{circle-x-QODE2UcL.js → circle-x-B8y8mLHr.js} +2 -2
  84. package/dist/web/public/assets/{circle-x-QODE2UcL.js.map → circle-x-B8y8mLHr.js.map} +1 -1
  85. package/dist/web/public/assets/{clock-BPBx4QWT.js → clock-CK2KO_Rc.js} +2 -2
  86. package/dist/web/public/assets/{clock-BPBx4QWT.js.map → clock-CK2KO_Rc.js.map} +1 -1
  87. package/dist/web/public/assets/{confirm-dialog-HsyBgWxC.js → confirm-dialog-GZyIzSwj.js} +2 -2
  88. package/dist/web/public/assets/{confirm-dialog-HsyBgWxC.js.map → confirm-dialog-GZyIzSwj.js.map} +1 -1
  89. package/dist/web/public/assets/{copy-VJNELMp7.js → copy-CDCgL5Yq.js} +2 -2
  90. package/dist/web/public/assets/{copy-VJNELMp7.js.map → copy-CDCgL5Yq.js.map} +1 -1
  91. package/dist/web/public/assets/{data-table-C0yaCeSS.js → data-table-1cGunUIX.js} +2 -2
  92. package/dist/web/public/assets/{data-table-C0yaCeSS.js.map → data-table-1cGunUIX.js.map} +1 -1
  93. package/dist/web/public/assets/{download-EUh-RXv5.js → download-CuLP0G-q.js} +2 -2
  94. package/dist/web/public/assets/{download-EUh-RXv5.js.map → download-CuLP0G-q.js.map} +1 -1
  95. package/dist/web/public/assets/{email-YUzrp4Tf.js → email-Q-SY9qC9.js} +2 -2
  96. package/dist/web/public/assets/{email-YUzrp4Tf.js.map → email-Q-SY9qC9.js.map} +1 -1
  97. package/dist/web/public/assets/{empty-state-DoiBKL4l.js → empty-state-BRsb30K6.js} +2 -2
  98. package/dist/web/public/assets/{empty-state-DoiBKL4l.js.map → empty-state-BRsb30K6.js.map} +1 -1
  99. package/dist/web/public/assets/{external-link-Bf2430Ji.js → external-link-D-E90Kfw.js} +2 -2
  100. package/dist/web/public/assets/{external-link-Bf2430Ji.js.map → external-link-D-E90Kfw.js.map} +1 -1
  101. package/dist/web/public/assets/{eye-vE4k-Us-.js → eye-DSu_4mW2.js} +2 -2
  102. package/dist/web/public/assets/{eye-vE4k-Us-.js.map → eye-DSu_4mW2.js.map} +1 -1
  103. package/dist/web/public/assets/{facts-BPVTGzM4.js → facts-pmGTfGmv.js} +2 -2
  104. package/dist/web/public/assets/{facts-BPVTGzM4.js.map → facts-pmGTfGmv.js.map} +1 -1
  105. package/dist/web/public/assets/goals-DpRm9-av.js +17 -0
  106. package/dist/web/public/assets/goals-DpRm9-av.js.map +1 -0
  107. package/dist/web/public/assets/{health-CSMAArAj.js → health-mqoH7KDV.js} +2 -2
  108. package/dist/web/public/assets/{health-CSMAArAj.js.map → health-mqoH7KDV.js.map} +1 -1
  109. package/dist/web/public/assets/{heart-pulse-8RDC8GWv.js → heart-pulse-CrCHhXtC.js} +2 -2
  110. package/dist/web/public/assets/{heart-pulse-8RDC8GWv.js.map → heart-pulse-CrCHhXtC.js.map} +1 -1
  111. package/dist/web/public/assets/{heartbeat-BzHZy7Mx.js → heartbeat-EGjLHWU0.js} +2 -2
  112. package/dist/web/public/assets/{heartbeat-BzHZy7Mx.js.map → heartbeat-EGjLHWU0.js.map} +1 -1
  113. package/dist/web/public/assets/hot-B9x1_5yx.js +12 -0
  114. package/dist/web/public/assets/hot-B9x1_5yx.js.map +1 -0
  115. package/dist/web/public/assets/index-BIBWEKxu.js +204 -0
  116. package/dist/web/public/assets/index-BIBWEKxu.js.map +1 -0
  117. package/dist/web/public/assets/{injection-a2kkgRbT.js → injection-CDx5n-mk.js} +2 -2
  118. package/dist/web/public/assets/{injection-a2kkgRbT.js.map → injection-CDx5n-mk.js.map} +1 -1
  119. package/dist/web/public/assets/{installed-XQQEPKh8.js → installed-DV7X4wfv.js} +5 -5
  120. package/dist/web/public/assets/{installed-XQQEPKh8.js.map → installed-DV7X4wfv.js.map} +1 -1
  121. package/dist/web/public/assets/{jobs-Cby1Eq4o.js → jobs-zAigElCl.js} +2 -2
  122. package/dist/web/public/assets/{jobs-Cby1Eq4o.js.map → jobs-zAigElCl.js.map} +1 -1
  123. package/dist/web/public/assets/{layout-BdtJtlu5.js → layout-7wcifbsm.js} +2 -2
  124. package/dist/web/public/assets/{layout-BdtJtlu5.js.map → layout-7wcifbsm.js.map} +1 -1
  125. package/dist/web/public/assets/{layout-BRnEPnky.js → layout-B0RjH6M2.js} +2 -2
  126. package/dist/web/public/assets/{layout-BRnEPnky.js.map → layout-B0RjH6M2.js.map} +1 -1
  127. package/dist/web/public/assets/{layout-Gh29ouFO.js → layout-C6q-GbBZ.js} +2 -2
  128. package/dist/web/public/assets/{layout-Gh29ouFO.js.map → layout-C6q-GbBZ.js.map} +1 -1
  129. package/dist/web/public/assets/layout-CzjqlPxW.js +2 -0
  130. package/dist/web/public/assets/layout-CzjqlPxW.js.map +1 -0
  131. package/dist/web/public/assets/{layout-CbqldDRj.js → layout-DOSpVfND.js} +2 -2
  132. package/dist/web/public/assets/{layout-CbqldDRj.js.map → layout-DOSpVfND.js.map} +1 -1
  133. package/dist/web/public/assets/llm-DwZX5fwY.js +27 -0
  134. package/dist/web/public/assets/llm-DwZX5fwY.js.map +1 -0
  135. package/dist/web/public/assets/{loader-circle-DO3Ni2RJ.js → loader-circle-BQkLEJZw.js} +2 -2
  136. package/dist/web/public/assets/{loader-circle-DO3Ni2RJ.js.map → loader-circle-BQkLEJZw.js.map} +1 -1
  137. package/dist/web/public/assets/{map-pin-BsL35E1s.js → map-pin-B-IMY07m.js} +2 -2
  138. package/dist/web/public/assets/{map-pin-BsL35E1s.js.map → map-pin-B-IMY07m.js.map} +1 -1
  139. package/dist/web/public/assets/{mcp-CWMdxcBf.js → mcp-K0P3-b6q.js} +2 -2
  140. package/dist/web/public/assets/{mcp-CWMdxcBf.js.map → mcp-K0P3-b6q.js.map} +1 -1
  141. package/dist/web/public/assets/{memos-BYQa4d2t.js → memos-DcpDEVN8.js} +2 -2
  142. package/dist/web/public/assets/{memos-BYQa4d2t.js.map → memos-DcpDEVN8.js.map} +1 -1
  143. package/dist/web/public/assets/{messengers-CebazAJ1.js → messengers-DmrNvPMS.js} +2 -2
  144. package/dist/web/public/assets/{messengers-CebazAJ1.js.map → messengers-DmrNvPMS.js.map} +1 -1
  145. package/dist/web/public/assets/{mobile-CMJRNHs2.js → mobile-a-oUiAoR.js} +2 -2
  146. package/dist/web/public/assets/{mobile-CMJRNHs2.js.map → mobile-a-oUiAoR.js.map} +1 -1
  147. package/dist/web/public/assets/{network-pNcx_slv.js → network-Bbh3j5ew.js} +2 -2
  148. package/dist/web/public/assets/{network-pNcx_slv.js.map → network-Bbh3j5ew.js.map} +1 -1
  149. package/dist/web/public/assets/{outbox-87hzZQLn.js → outbox-BP_hfANb.js} +2 -2
  150. package/dist/web/public/assets/{outbox-87hzZQLn.js.map → outbox-BP_hfANb.js.map} +1 -1
  151. package/dist/web/public/assets/{pagination-C4edFAqf.js → pagination-CPLj3V0r.js} +2 -2
  152. package/dist/web/public/assets/{pagination-C4edFAqf.js.map → pagination-CPLj3V0r.js.map} +1 -1
  153. package/dist/web/public/assets/{persona-BcOT3Wms.js → persona-CT38dLd4.js} +2 -2
  154. package/dist/web/public/assets/{persona-BcOT3Wms.js.map → persona-CT38dLd4.js.map} +1 -1
  155. package/dist/web/public/assets/plans-Msw85XkI.js +12 -0
  156. package/dist/web/public/assets/plans-Msw85XkI.js.map +1 -0
  157. package/dist/web/public/assets/{play-Bzdymasn.js → play-tH2nb1Kt.js} +2 -2
  158. package/dist/web/public/assets/{play-Bzdymasn.js.map → play-tH2nb1Kt.js.map} +1 -1
  159. package/dist/web/public/assets/{plus-BxjzY9Wh.js → plus-6MNGQidu.js} +2 -2
  160. package/dist/web/public/assets/{plus-BxjzY9Wh.js.map → plus-6MNGQidu.js.map} +1 -1
  161. package/dist/web/public/assets/{policy-Be-tMZZc.js → policy-BJ7zORVG.js} +2 -2
  162. package/dist/web/public/assets/{policy-Be-tMZZc.js.map → policy-BJ7zORVG.js.map} +1 -1
  163. package/dist/web/public/assets/{qr-code-D1V5cA_X.js → qr-code-DfsxFxoa.js} +2 -2
  164. package/dist/web/public/assets/{qr-code-D1V5cA_X.js.map → qr-code-DfsxFxoa.js.map} +1 -1
  165. package/dist/web/public/assets/{refresh-ccw-BhPAzZAa.js → refresh-ccw-CFPE6zD1.js} +2 -2
  166. package/dist/web/public/assets/{refresh-ccw-BhPAzZAa.js.map → refresh-ccw-CFPE6zD1.js.map} +1 -1
  167. package/dist/web/public/assets/{reminders-DEWtrlH_.js → reminders-CAUNAuDy.js} +2 -2
  168. package/dist/web/public/assets/{reminders-DEWtrlH_.js.map → reminders-CAUNAuDy.js.map} +1 -1
  169. package/dist/web/public/assets/{save-Cye8Vlu5.js → save-CNUmUMEf.js} +2 -2
  170. package/dist/web/public/assets/{save-Cye8Vlu5.js.map → save-CNUmUMEf.js.map} +1 -1
  171. package/dist/web/public/assets/{schedules-CuqRy3t8.js → schedules-C25NyoGh.js} +2 -2
  172. package/dist/web/public/assets/{schedules-CuqRy3t8.js.map → schedules-C25NyoGh.js.map} +1 -1
  173. package/dist/web/public/assets/{search-Dot_W5Eu.js → search-CaRTqZw1.js} +2 -2
  174. package/dist/web/public/assets/{search-Dot_W5Eu.js.map → search-CaRTqZw1.js.map} +1 -1
  175. package/dist/web/public/assets/{search-BQqVArrW.js → search-D9TZs0bG.js} +2 -2
  176. package/dist/web/public/assets/{search-BQqVArrW.js.map → search-D9TZs0bG.js.map} +1 -1
  177. package/dist/web/public/assets/{security-BB-YnetQ.js → security-BMGGzEwr.js} +2 -2
  178. package/dist/web/public/assets/{security-BB-YnetQ.js.map → security-BMGGzEwr.js.map} +1 -1
  179. package/dist/web/public/assets/{service-DgkqlAtM.js → service-BQBoddcT.js} +2 -2
  180. package/dist/web/public/assets/{service-DgkqlAtM.js.map → service-BQBoddcT.js.map} +1 -1
  181. package/dist/web/public/assets/{shield-alert-CBOmgn9W.js → shield-alert-eOBoc2yc.js} +2 -2
  182. package/dist/web/public/assets/{shield-alert-CBOmgn9W.js.map → shield-alert-eOBoc2yc.js.map} +1 -1
  183. package/dist/web/public/assets/{status-badge-9sMFH4uP.js → status-badge-CF1Cya26.js} +2 -2
  184. package/dist/web/public/assets/{status-badge-9sMFH4uP.js.map → status-badge-CF1Cya26.js.map} +1 -1
  185. package/dist/web/public/assets/{subtasks-BrqdQxw_.js → subtasks-CEPB2TSV.js} +2 -2
  186. package/dist/web/public/assets/{subtasks-BrqdQxw_.js.map → subtasks-CEPB2TSV.js.map} +1 -1
  187. package/dist/web/public/assets/{table-CSHCu7pz.js → table-Dww-k14l.js} +2 -2
  188. package/dist/web/public/assets/{table-CSHCu7pz.js.map → table-Dww-k14l.js.map} +1 -1
  189. package/dist/web/public/assets/{topn-DZWbwDge.js → topn-DwgKlIxc.js} +2 -2
  190. package/dist/web/public/assets/{topn-DZWbwDge.js.map → topn-DwgKlIxc.js.map} +1 -1
  191. package/dist/web/public/assets/{trash-2-Cco09tAA.js → trash-2-BF98SY8M.js} +2 -2
  192. package/dist/web/public/assets/{trash-2-Cco09tAA.js.map → trash-2-BF98SY8M.js.map} +1 -1
  193. package/dist/web/public/assets/{use-agim-skills-CJOJKeOZ.js → use-agim-skills-kDpiSMBP.js} +2 -2
  194. package/dist/web/public/assets/{use-agim-skills-CJOJKeOZ.js.map → use-agim-skills-kDpiSMBP.js.map} +1 -1
  195. package/dist/web/public/assets/{use-background-tasks-D77bcfrq.js → use-background-tasks-B1Pxq3JU.js} +2 -2
  196. package/dist/web/public/assets/{use-background-tasks-D77bcfrq.js.map → use-background-tasks-B1Pxq3JU.js.map} +1 -1
  197. package/dist/web/public/assets/{use-memory-CX4B1SYC.js → use-memory-w-EY79Zm.js} +2 -2
  198. package/dist/web/public/assets/{use-memory-CX4B1SYC.js.map → use-memory-w-EY79Zm.js.map} +1 -1
  199. package/dist/web/public/assets/{use-observability-rcc7fRmj.js → use-observability-Cd2dUHb7.js} +2 -2
  200. package/dist/web/public/assets/{use-observability-rcc7fRmj.js.map → use-observability-Cd2dUHb7.js.map} +1 -1
  201. package/dist/web/public/assets/{use-settings-DQnJkPXp.js → use-settings-DG1rm9KU.js} +2 -2
  202. package/dist/web/public/assets/{use-settings-DQnJkPXp.js.map → use-settings-DG1rm9KU.js.map} +1 -1
  203. package/dist/web/public/assets/{use-workspace-J5eeVxw9.js → use-workspace-DvW_xOmj.js} +2 -2
  204. package/dist/web/public/assets/{use-workspace-J5eeVxw9.js.map → use-workspace-DvW_xOmj.js.map} +1 -1
  205. package/dist/web/public/assets/{vector-xRphJ8hW.js → vector-CDJ4p6UI.js} +2 -2
  206. package/dist/web/public/assets/{vector-xRphJ8hW.js.map → vector-CDJ4p6UI.js.map} +1 -1
  207. package/dist/web/public/assets/{viewer-Bq7l2kE8.js → viewer-Bje5-HtQ.js} +2 -2
  208. package/dist/web/public/assets/{viewer-Bq7l2kE8.js.map → viewer-Bje5-HtQ.js.map} +1 -1
  209. package/dist/web/public/assets/workspace-B7QYGLix.js +17 -0
  210. package/dist/web/public/assets/workspace-B7QYGLix.js.map +1 -0
  211. package/dist/web/public/assets/{workspaces-D0pYJfxI.js → workspaces-BlodF0DP.js} +2 -2
  212. package/dist/web/public/assets/{workspaces-D0pYJfxI.js.map → workspaces-BlodF0DP.js.map} +1 -1
  213. package/dist/web/public/index.html +2 -2
  214. package/dist/web/server.js +2 -2
  215. package/dist/web/server.js.map +1 -1
  216. package/package.json +1 -1
  217. package/dist/web/public/assets/agents-DnJruPrS.js +0 -7
  218. package/dist/web/public/assets/agents-DnJruPrS.js.map +0 -1
  219. package/dist/web/public/assets/chat-D7jjr-Rn.js +0 -17
  220. package/dist/web/public/assets/chat-D7jjr-Rn.js.map +0 -1
  221. package/dist/web/public/assets/goals-HsKzf-PG.js +0 -17
  222. package/dist/web/public/assets/goals-HsKzf-PG.js.map +0 -1
  223. package/dist/web/public/assets/hot-DkFvD3H4.js +0 -12
  224. package/dist/web/public/assets/hot-DkFvD3H4.js.map +0 -1
  225. package/dist/web/public/assets/index-D7BuMEIr.js +0 -204
  226. package/dist/web/public/assets/index-D7BuMEIr.js.map +0 -1
  227. package/dist/web/public/assets/layout-0rDvqHCV.js +0 -2
  228. package/dist/web/public/assets/layout-0rDvqHCV.js.map +0 -1
  229. package/dist/web/public/assets/llm-COWnMdB9.js +0 -7
  230. package/dist/web/public/assets/llm-COWnMdB9.js.map +0 -1
  231. package/dist/web/public/assets/native-agent-MGgMeTHN.js +0 -22
  232. package/dist/web/public/assets/native-agent-MGgMeTHN.js.map +0 -1
  233. package/dist/web/public/assets/plans-Ddz5qwqp.js +0 -12
  234. package/dist/web/public/assets/plans-Ddz5qwqp.js.map +0 -1
  235. package/dist/web/public/assets/workspace-BqMuxPFF.js +0 -17
  236. package/dist/web/public/assets/workspace-BqMuxPFF.js.map +0 -1
@@ -55,10 +55,11 @@ export function createPiNativeAdapter() {
55
55
  }
56
56
  return new PiNativeAgentAdapter({
57
57
  // pi is the default engine: register under the 'native' name AND inherit
58
- // the legacy native adapter's aliases (llm / native-llm / na) so existing
59
- // muscle memory (`/na`, `/llm`) keeps working transparently, plus pi names.
58
+ // the legacy native adapter's aliases (agim / llm / native-llm / na) so
59
+ // existing muscle memory (`/agim`, `/na`, `/llm`) keeps working
60
+ // transparently, plus pi names.
60
61
  name: 'native',
61
- aliases: ['na', 'llm', 'native-llm', 'pi', 'pi-native'],
62
+ aliases: ['agim', 'na', 'llm', 'native-llm', 'pi', 'pi-native'],
62
63
  sessionsRoot,
63
64
  resolveModel: async () => {
64
65
  for (const role of ROLE_CHAIN) {
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../src/plugins/agents/pi-native/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../src/plugins/agents/pi-native/factory.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  // Endpoints exposed:
7
7
  //
8
8
  // GET /api/llm → { backends, roles, status }
9
- // POST /api/llm/backends body { name, provider, baseUrl, model, apiKey? }
9
+ // POST /api/llm/backends body { name, provider, baseUrl, model, apiKey }
10
10
  // → 201 Created or 409 Conflict / 400 Validation
11
11
  // DELETE /api/llm/backends/:name → 200 OK { removedRoles }
12
12
  // PUT /api/llm/roles body { cheap?, evaluator?, "native-chat"?, … }
@@ -143,6 +143,10 @@ async function handleAddBackend(req, res) {
143
143
  send(res, 400, { error: 'model is required' });
144
144
  return;
145
145
  }
146
+ if (!apiKey) {
147
+ send(res, 400, { error: 'apiKey is required (non-empty string)' });
148
+ return;
149
+ }
146
150
  const cfg = await readConfig();
147
151
  const existing = cfg.llmBackends ?? [];
148
152
  if (existing.some((b) => b.name === name)) {
@@ -160,10 +164,9 @@ async function handleAddBackend(req, res) {
160
164
  return;
161
165
  }
162
166
  await writeConfig(cfg);
163
- if (apiKey)
164
- saveSecret(name, apiKey);
167
+ saveSecret(name, apiKey);
165
168
  refreshLlmRuntime(cfg);
166
- send(res, 201, { name, secretStored: !!apiKey });
169
+ send(res, 201, { name, secretStored: true });
167
170
  }
168
171
  async function handleRemoveBackend(res, name) {
169
172
  const cfg = await readConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"llm-api.js","sourceRoot":"","sources":["../../src/web/llm-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-api.js","sourceRoot":"","sources":["../../src/web/llm-api.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AACpE,gEAAgE;AAChE,+BAA+B;AAC/B,EAAE;AACF,qBAAqB;AACrB,EAAE;AACF,uEAAuE;AACvE,yFAAyF;AACzF,wFAAwF;AACxF,mEAAmE;AACnE,wFAAwF;AACxF,2FAA2F;AAC3F,oEAAoE;AACpE,kDAAkD;AAClD,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,gCAAgC;AAGhC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EACL,UAAU,EAAE,YAAY,EAAE,oBAAoB,GAC/C,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhG,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AAoBlD,mEAAmE;AACnE,yEAAyE;AAEzE,SAAS,IAAI,CAAC,GAAmB,EAAE,IAAY,EAAE,IAAa;IAC5D,GAAG,CAAC,UAAU,GAAG,IAAI,CAAA;IACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAA;IAChE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,KAAK,UAAU,YAAY,CAAc,GAAoB;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACnD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;AAC3D,CAAC;AAED,uEAAuE;AAEvE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAoB,EAAE,GAAmB,EAAE,GAAQ;IAEnD,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAA;IACtB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAA;IAE7B,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QACpC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IACpC,CAAC;IACD,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC7C,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;IACpE,IAAI,SAAS,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC3D,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACnE,IAAI,SAAS,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC5D,CAAC;IACD,IAAI,SAAS,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC1D,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAC5E,IAAI,WAAW,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QAChC,MAAM,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,UAAU,CAAC,GAAmB;IAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,kEAAkE;QAClE,mEAAmE;QACnE,mDAAmD;QACnD,MAAM,GAAG,GAAG,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACtF,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE;gBACN,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzD,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;QACb,QAAQ;QACR,KAAK,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;KAC1B,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAoB,EAAE,GAAmB;IACvE,MAAM,IAAI,GAAG,MAAM,YAAY,CAM5B,GAAG,CAAC,CAAA;IACP,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACrE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACxE,IAAI,CAAC,IAAI,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC,CAAA;QACrF,OAAM;IACR,CAAC;IACD,IAAI,QAAQ,KAAK,eAAe,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC,CAAA;QAC5E,OAAM;IACR,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAA;QAC3D,OAAM;IACR,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC9C,OAAM;IACR,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;IACtC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,CAAC,CAAA;QAC7D,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3D,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACb,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAClD,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxB,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAmB,EAAE,IAAY;IAClE,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,IAAI,GAAG,EAAE,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAA;IACtB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAA;IAChC,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,YAAY,EAAE,CAAC;YAAC,SAAQ;QAAC,CAAC;QAC5C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAChB,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAA;IACtB,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,YAAY,CAAC,IAAI,CAAC,CAAA;IAClB,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAoB,EAAE,GAAmB;IACrE,MAAM,IAAI,GAAG,MAAM,YAAY,CAA0B,GAAG,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAA;IAClC,MAAM,IAAI,GAA2B,EAAE,GAAG,OAAO,EAAE,CAAA;IACnD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,SAAQ;QACV,CAAC;QACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,IAAI,2DAA2D,EAAE,CAAC,CAAA;YACnG,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,IAAI,iCAAiC,MAAM,GAAG,EAAE,CAAC,CAAA;YAClF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;IACrB,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA;IACnB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACb,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAClD,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAY;IACpF,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,IAAI,GAAG,EAAE,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAuB,GAAG,CAAC,CAAA;IAC1D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACpE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IACD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAmB,EAAE,IAAY;IACjE,YAAY,CAAC,IAAI,CAAC,CAAA;IAClB,iBAAiB,CAAC,MAAM,UAAU,EAAE,CAAC,CAAA;IACrC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAmB,EAAE,IAAY;IACzD,qEAAqE;IACrE,kEAAkE;IAClE,kEAAkE;IAClE,oEAAoE;IACpE,qEAAqE;IACrE,gDAAgD;IAChD,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,IAAI,GAAG,EAAE,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACb,IAAI,EAAE,EAAE,EAAE,KAAK;YACf,KAAK,EAAE,kDAAkD;SAC1D,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,CAC3B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EACnC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CACrC,CAAA;QACD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACb,IAAI,EAAE,EAAE,EAAE,IAAI;YACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;YAC9B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACnC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACjC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACb,IAAI,EAAE,EAAE,EAAE,KAAK;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAA;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAA;QAC/D,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAc;IACvC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACxD,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3E,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAc;IACvC,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACtB,uEAAuE;IACvE,iDAAiD;IACjD,eAAe,EAAE,CAAA;AACnB,CAAC"}
@@ -1,7 +1,7 @@
1
- import{o as p,a as f,b as o,d as m,u as g,j as t,c as x,B as j}from"./index-D7BuMEIr.js";import{r as N}from"./react-DlP5eolq.js";import{D as y}from"./data-table-C0yaCeSS.js";import{E as b}from"./empty-state-DoiBKL4l.js";import{S as w}from"./status-badge-9sMFH4uP.js";import{u as v}from"./use-event-stream-I1lMFEfh.js";import{L as A}from"./loader-circle-DO3Ni2RJ.js";import{R as S}from"./refresh-ccw-BhPAzZAa.js";import"./table-CSHCu7pz.js";import"./arrow-up-CXy94NPi.js";import"./arrow-down-CzWGZc48.js";/**
1
+ import{o as p,a as f,b as o,d as m,u as g,j as t,c as x,B as j}from"./index-BIBWEKxu.js";import{r as N}from"./react-DlP5eolq.js";import{D as y}from"./data-table-1cGunUIX.js";import{E as b}from"./empty-state-BRsb30K6.js";import{S as w}from"./status-badge-CF1Cya26.js";import{u as v}from"./use-event-stream-I1lMFEfh.js";import{L as A}from"./loader-circle-BQkLEJZw.js";import{R as S}from"./refresh-ccw-CFPE6zD1.js";import"./table-Dww-k14l.js";import"./arrow-up-Cc28qbjN.js";import"./arrow-down-x-Lq92tn.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 C=p("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),l={all:["a2a"],stats:["a2a","stats"],recent:e=>["a2a","recent",e]};function T(){return o({queryKey:l.stats,queryFn:()=>m.getA2AStats()})}function q(e){return o({queryKey:l.recent(e),queryFn:()=>m.getA2ARecent(e)})}function E(){const e=f();return()=>e.invalidateQueries({queryKey:l.all})}const L={connected:"text-success",connecting:"text-text-dim",reconnecting:"text-warning",closed:"text-text-muted"};function U(){const{t:e}=g(["tasks","common"]),s=E(),n=T(),r=q({limit:50}),u=r.data?.rows??[],i=n.data,d=v({job:()=>s()}),h=N.useMemo(()=>[{id:"id",header:e("a2a.col.id"),cell:a=>t.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",a.id]}),headClassName:"w-16"},{id:"agent",header:e("a2a.col.agent"),cell:a=>t.jsx("span",{className:"font-medium",children:a.agent}),headClassName:"w-32"},{id:"parent",header:e("a2a.col.parent"),cell:a=>a.parent_id!=null?t.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",a.parent_id]}):t.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-20"},{id:"depth",header:e("a2a.col.depth"),cell:a=>t.jsx("span",{className:"tabular-nums text-text-dim",children:a.call_depth}),headClassName:"w-16",hideOnMobile:!0},{id:"status",header:e("a2a.col.status"),cell:a=>t.jsx(w,{status:a.status,children:a.status}),headClassName:"w-28"},{id:"prompt",header:e("a2a.col.prompt"),cell:a=>t.jsx("span",{className:"line-clamp-2 text-text-dim",children:a.prompt??"—"}),asCardTitle:!0},{id:"createdAt",header:e("a2a.col.createdAt"),cell:a=>t.jsx("span",{className:"text-text-dim",children:R(a.created_at)}),headClassName:"w-40",hideOnMobile:!0}],[e]);return t.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col gap-4",children:[t.jsxs("header",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsx("h1",{className:"text-xl font-semibold",children:e("a2a.title")}),t.jsx("span",{className:x("text-xs font-medium tabular-nums",L[d]),children:e(`jobs.live.${d}`)}),t.jsxs(j,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{r.refetch(),n.refetch()},disabled:r.isFetching||n.isFetching,"aria-label":e("actions.refresh",{ns:"common"}),children:[r.isFetching?t.jsx(A,{className:"h-4 w-4 animate-spin"}):t.jsx(S,{className:"h-4 w-4"}),t.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),t.jsx("p",{className:"text-sm text-text-dim",children:e("a2a.subtitle")})]}),i&&t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[t.jsx(c,{label:e("a2a.stats.total"),value:i.total,tone:"info"}),t.jsx(c,{label:e("a2a.stats.recent24h"),value:i.recent24h,tone:"success"}),t.jsx(c,{label:e("a2a.stats.maxDepth"),value:i.maxDepth,tone:"warning"})]}),t.jsx(y,{columns:h,rows:u,getRowId:a=>String(a.id),loading:r.isLoading,emptyState:t.jsx(b,{icon:t.jsx(C,{}),title:e("a2a.empty.title"),description:e("a2a.empty.description")})})]})}const k={info:"border-info/30 text-info",success:"border-success/30 text-success",warning:"border-warning/30 text-warning",danger:"border-danger/30 text-danger"};function c({label:e,value:s,tone:n}){return t.jsxs("div",{className:x("rounded-md border bg-surface px-3 py-2",k[n]),children:[t.jsx("div",{className:"text-xs uppercase tracking-wide text-text-dim",children:e}),t.jsx("div",{className:"text-2xl font-semibold tabular-nums",children:s})]})}function R(e){try{const s=new Date(e);return Number.isNaN(s.getTime())?e:s.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return e}}export{U as default};
7
- //# sourceMappingURL=a2a-Dtc6AKjx.js.map
7
+ //# sourceMappingURL=a2a-Y30Sn8pc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-Dtc6AKjx.js","sources":["../../node_modules/lucide-react/dist/esm/icons/git-branch.js","../../src/hooks/use-a2a.ts","../../src/routes/tasks/a2a.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 GitBranch = createLucideIcon(\"GitBranch\", [\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n]);\n\nexport { GitBranch as default };\n//# sourceMappingURL=git-branch.js.map\n","/**\n * useA2A* — react-query wrappers for the Agent-to-Agent inline-job\n * view. Read-only; data lives in jobs.db and is exposed via:\n *\n * GET /api/a2a/stats → totals, recent24h, maxDepth, byStatus/byAgent\n * GET /api/a2a/recent → recent rows (truncated prompt + result)\n *\n * SSE: subscribes to the `job` event so a freshly-completed inline\n * sub-invocation shows up without manual refresh.\n */\n\nimport { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type { A2AStats, ListA2ARecentQuery, ListA2ARecentResponse } from '@/types/api'\n\nexport const a2aKeys = {\n all: ['a2a'] as const,\n stats: ['a2a', 'stats'] as const,\n recent: (q: ListA2ARecentQuery) => ['a2a', 'recent', q] as const,\n}\n\nexport function useA2AStats() {\n return useQuery<A2AStats>({\n queryKey: a2aKeys.stats,\n queryFn: () => api.getA2AStats(),\n })\n}\n\nexport function useA2ARecent(query: ListA2ARecentQuery) {\n return useQuery<ListA2ARecentResponse>({\n queryKey: a2aKeys.recent(query),\n queryFn: () => api.getA2ARecent(query),\n })\n}\n\nexport function useInvalidateA2A() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: a2aKeys.all })\n}\n","/**\n * /tasks/a2a — Agent ↔ Agent inline-call history.\n *\n * Splits into stats KPI cards (total / recent24h / maxDepth) +\n * recent-rows table. Subscribes to the SSE `job` event so a fresh\n * agent-to-agent call appears live.\n */\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { GitBranch, Loader2, RefreshCcw } from 'lucide-react'\n\nimport { DataTable, type DataTableColumn } from '@/components/common/data-table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { StatusBadge } from '@/components/common/status-badge'\nimport { Button } from '@/components/ui/button'\nimport { useA2ARecent, useA2AStats, useInvalidateA2A } from '@/hooks/use-a2a'\nimport { useEventStream, type SseStatus } from '@/hooks/use-event-stream'\nimport type { A2ARow } from '@/types/api'\nimport { cn } from '@/lib/utils'\n\nconst LIVE_STATUS_CLASS: Record<SseStatus, string> = {\n connected: 'text-success',\n connecting: 'text-text-dim',\n reconnecting: 'text-warning',\n closed: 'text-text-muted',\n}\n\nexport default function A2ARoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const invalidate = useInvalidateA2A()\n\n const statsQuery = useA2AStats()\n const recentQuery = useA2ARecent({ limit: 50 })\n const rows = recentQuery.data?.rows ?? []\n const stats = statsQuery.data\n\n const live = useEventStream({\n job: () => invalidate(),\n })\n\n const columns: DataTableColumn<A2ARow>[] = useMemo(\n () => [\n {\n id: 'id',\n header: t('a2a.col.id'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">#{r.id}</span>,\n headClassName: 'w-16',\n },\n {\n id: 'agent',\n header: t('a2a.col.agent'),\n cell: (r) => <span className=\"font-medium\">{r.agent}</span>,\n headClassName: 'w-32',\n },\n {\n id: 'parent',\n header: t('a2a.col.parent'),\n cell: (r) =>\n r.parent_id != null ? (\n <span className=\"tabular-nums text-text-dim\">#{r.parent_id}</span>\n ) : (\n <span className=\"text-text-muted\">—</span>\n ),\n headClassName: 'w-20',\n },\n {\n id: 'depth',\n header: t('a2a.col.depth'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">{r.call_depth}</span>,\n headClassName: 'w-16',\n hideOnMobile: true,\n },\n {\n id: 'status',\n header: t('a2a.col.status'),\n cell: (r) => <StatusBadge status={r.status}>{r.status}</StatusBadge>,\n headClassName: 'w-28',\n },\n {\n id: 'prompt',\n header: t('a2a.col.prompt'),\n cell: (r) => (\n <span className=\"line-clamp-2 text-text-dim\">{r.prompt ?? '—'}</span>\n ),\n asCardTitle: true,\n },\n {\n id: 'createdAt',\n header: t('a2a.col.createdAt'),\n cell: (r) => <span className=\"text-text-dim\">{formatTime(r.created_at)}</span>,\n headClassName: 'w-40',\n hideOnMobile: true,\n },\n ],\n [t],\n )\n\n return (\n <div className=\"mx-auto flex max-w-7xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('a2a.title')}</h1>\n <span className={cn('text-xs font-medium tabular-nums', LIVE_STATUS_CLASS[live])}>\n {t(`jobs.live.${live}`)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => {\n void recentQuery.refetch()\n void statsQuery.refetch()\n }}\n disabled={recentQuery.isFetching || statsQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {recentQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('a2a.subtitle')}</p>\n </header>\n\n {stats && (\n <div className=\"grid grid-cols-3 gap-2\">\n <StatCard label={t('a2a.stats.total')} value={stats.total} tone=\"info\" />\n <StatCard label={t('a2a.stats.recent24h')} value={stats.recent24h} tone=\"success\" />\n <StatCard label={t('a2a.stats.maxDepth')} value={stats.maxDepth} tone=\"warning\" />\n </div>\n )}\n\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(r) => String(r.id)}\n loading={recentQuery.isLoading}\n emptyState={\n <EmptyState\n icon={<GitBranch />}\n title={t('a2a.empty.title')}\n description={t('a2a.empty.description')}\n />\n }\n />\n </div>\n )\n}\n\ninterface StatCardProps {\n label: string\n value: number\n tone: 'info' | 'success' | 'warning' | 'danger'\n}\n\nconst TONE_STYLES: Record<StatCardProps['tone'], string> = {\n info: 'border-info/30 text-info',\n success: 'border-success/30 text-success',\n warning: 'border-warning/30 text-warning',\n danger: 'border-danger/30 text-danger',\n}\n\nfunction StatCard({ label, value, tone }: StatCardProps): JSX.Element {\n return (\n <div\n className={cn(\n 'rounded-md border bg-surface px-3 py-2',\n TONE_STYLES[tone],\n )}\n >\n <div className=\"text-xs uppercase tracking-wide text-text-dim\">{label}</div>\n <div className=\"text-2xl font-semibold tabular-nums\">{value}</div>\n </div>\n )\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return iso\n return d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n"],"names":["GitBranch","createLucideIcon","a2aKeys","q","useA2AStats","useQuery","api","useA2ARecent","query","useInvalidateA2A","qc","useQueryClient","LIVE_STATUS_CLASS","A2ARoute","t","useTranslation","invalidate","statsQuery","recentQuery","rows","stats","live","useEventStream","columns","useMemo","r","jsxs","jsx","StatusBadge","formatTime","cn","Button","Loader2","RefreshCcw","StatCard","DataTable","EmptyState","TONE_STYLES","label","value","tone","iso","d"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"a2a-Y30Sn8pc.js","sources":["../../node_modules/lucide-react/dist/esm/icons/git-branch.js","../../src/hooks/use-a2a.ts","../../src/routes/tasks/a2a.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 GitBranch = createLucideIcon(\"GitBranch\", [\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n]);\n\nexport { GitBranch as default };\n//# sourceMappingURL=git-branch.js.map\n","/**\n * useA2A* — react-query wrappers for the Agent-to-Agent inline-job\n * view. Read-only; data lives in jobs.db and is exposed via:\n *\n * GET /api/a2a/stats → totals, recent24h, maxDepth, byStatus/byAgent\n * GET /api/a2a/recent → recent rows (truncated prompt + result)\n *\n * SSE: subscribes to the `job` event so a freshly-completed inline\n * sub-invocation shows up without manual refresh.\n */\n\nimport { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type { A2AStats, ListA2ARecentQuery, ListA2ARecentResponse } from '@/types/api'\n\nexport const a2aKeys = {\n all: ['a2a'] as const,\n stats: ['a2a', 'stats'] as const,\n recent: (q: ListA2ARecentQuery) => ['a2a', 'recent', q] as const,\n}\n\nexport function useA2AStats() {\n return useQuery<A2AStats>({\n queryKey: a2aKeys.stats,\n queryFn: () => api.getA2AStats(),\n })\n}\n\nexport function useA2ARecent(query: ListA2ARecentQuery) {\n return useQuery<ListA2ARecentResponse>({\n queryKey: a2aKeys.recent(query),\n queryFn: () => api.getA2ARecent(query),\n })\n}\n\nexport function useInvalidateA2A() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: a2aKeys.all })\n}\n","/**\n * /tasks/a2a — Agent ↔ Agent inline-call history.\n *\n * Splits into stats KPI cards (total / recent24h / maxDepth) +\n * recent-rows table. Subscribes to the SSE `job` event so a fresh\n * agent-to-agent call appears live.\n */\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { GitBranch, Loader2, RefreshCcw } from 'lucide-react'\n\nimport { DataTable, type DataTableColumn } from '@/components/common/data-table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { StatusBadge } from '@/components/common/status-badge'\nimport { Button } from '@/components/ui/button'\nimport { useA2ARecent, useA2AStats, useInvalidateA2A } from '@/hooks/use-a2a'\nimport { useEventStream, type SseStatus } from '@/hooks/use-event-stream'\nimport type { A2ARow } from '@/types/api'\nimport { cn } from '@/lib/utils'\n\nconst LIVE_STATUS_CLASS: Record<SseStatus, string> = {\n connected: 'text-success',\n connecting: 'text-text-dim',\n reconnecting: 'text-warning',\n closed: 'text-text-muted',\n}\n\nexport default function A2ARoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const invalidate = useInvalidateA2A()\n\n const statsQuery = useA2AStats()\n const recentQuery = useA2ARecent({ limit: 50 })\n const rows = recentQuery.data?.rows ?? []\n const stats = statsQuery.data\n\n const live = useEventStream({\n job: () => invalidate(),\n })\n\n const columns: DataTableColumn<A2ARow>[] = useMemo(\n () => [\n {\n id: 'id',\n header: t('a2a.col.id'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">#{r.id}</span>,\n headClassName: 'w-16',\n },\n {\n id: 'agent',\n header: t('a2a.col.agent'),\n cell: (r) => <span className=\"font-medium\">{r.agent}</span>,\n headClassName: 'w-32',\n },\n {\n id: 'parent',\n header: t('a2a.col.parent'),\n cell: (r) =>\n r.parent_id != null ? (\n <span className=\"tabular-nums text-text-dim\">#{r.parent_id}</span>\n ) : (\n <span className=\"text-text-muted\">—</span>\n ),\n headClassName: 'w-20',\n },\n {\n id: 'depth',\n header: t('a2a.col.depth'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">{r.call_depth}</span>,\n headClassName: 'w-16',\n hideOnMobile: true,\n },\n {\n id: 'status',\n header: t('a2a.col.status'),\n cell: (r) => <StatusBadge status={r.status}>{r.status}</StatusBadge>,\n headClassName: 'w-28',\n },\n {\n id: 'prompt',\n header: t('a2a.col.prompt'),\n cell: (r) => (\n <span className=\"line-clamp-2 text-text-dim\">{r.prompt ?? '—'}</span>\n ),\n asCardTitle: true,\n },\n {\n id: 'createdAt',\n header: t('a2a.col.createdAt'),\n cell: (r) => <span className=\"text-text-dim\">{formatTime(r.created_at)}</span>,\n headClassName: 'w-40',\n hideOnMobile: true,\n },\n ],\n [t],\n )\n\n return (\n <div className=\"mx-auto flex max-w-7xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('a2a.title')}</h1>\n <span className={cn('text-xs font-medium tabular-nums', LIVE_STATUS_CLASS[live])}>\n {t(`jobs.live.${live}`)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => {\n void recentQuery.refetch()\n void statsQuery.refetch()\n }}\n disabled={recentQuery.isFetching || statsQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {recentQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('a2a.subtitle')}</p>\n </header>\n\n {stats && (\n <div className=\"grid grid-cols-3 gap-2\">\n <StatCard label={t('a2a.stats.total')} value={stats.total} tone=\"info\" />\n <StatCard label={t('a2a.stats.recent24h')} value={stats.recent24h} tone=\"success\" />\n <StatCard label={t('a2a.stats.maxDepth')} value={stats.maxDepth} tone=\"warning\" />\n </div>\n )}\n\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(r) => String(r.id)}\n loading={recentQuery.isLoading}\n emptyState={\n <EmptyState\n icon={<GitBranch />}\n title={t('a2a.empty.title')}\n description={t('a2a.empty.description')}\n />\n }\n />\n </div>\n )\n}\n\ninterface StatCardProps {\n label: string\n value: number\n tone: 'info' | 'success' | 'warning' | 'danger'\n}\n\nconst TONE_STYLES: Record<StatCardProps['tone'], string> = {\n info: 'border-info/30 text-info',\n success: 'border-success/30 text-success',\n warning: 'border-warning/30 text-warning',\n danger: 'border-danger/30 text-danger',\n}\n\nfunction StatCard({ label, value, tone }: StatCardProps): JSX.Element {\n return (\n <div\n className={cn(\n 'rounded-md border bg-surface px-3 py-2',\n TONE_STYLES[tone],\n )}\n >\n <div className=\"text-xs uppercase tracking-wide text-text-dim\">{label}</div>\n <div className=\"text-2xl font-semibold tabular-nums\">{value}</div>\n </div>\n )\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return iso\n return d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n"],"names":["GitBranch","createLucideIcon","a2aKeys","q","useA2AStats","useQuery","api","useA2ARecent","query","useInvalidateA2A","qc","useQueryClient","LIVE_STATUS_CLASS","A2ARoute","t","useTranslation","invalidate","statsQuery","recentQuery","rows","stats","live","useEventStream","columns","useMemo","r","jsxs","jsx","StatusBadge","formatTime","cn","Button","Loader2","RefreshCcw","StatCard","DataTable","EmptyState","TONE_STYLES","label","value","tone","iso","d"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{o as t}from"./index-D7BuMEIr.js";/**
1
+ import{o as t}from"./index-BIBWEKxu.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 c=t("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);export{c as A};
7
- //# sourceMappingURL=activity-CWFI_ke7.js.map
7
+ //# sourceMappingURL=activity--oN7qxFJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity-CWFI_ke7.js","sources":["../../node_modules/lucide-react/dist/esm/icons/activity.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 Activity = createLucideIcon(\"Activity\", [\n [\n \"path\",\n {\n d: \"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\",\n key: \"169zse\"\n }\n ]\n]);\n\nexport { Activity as default };\n//# sourceMappingURL=activity.js.map\n"],"names":["Activity","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAWC,EAAiB,WAAY,CAC5C,CACE,OACA,CACE,EAAG,6HACH,IAAK,QACX,CACA,CACA,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"activity--oN7qxFJ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/activity.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 Activity = createLucideIcon(\"Activity\", [\n [\n \"path\",\n {\n d: \"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\",\n key: \"169zse\"\n }\n ]\n]);\n\nexport { Activity as default };\n//# sourceMappingURL=activity.js.map\n"],"names":["Activity","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAWC,EAAiB,WAAY,CAC5C,CACE,OACA,CACE,EAAG,6HACH,IAAK,QACX,CACA,CACA,CAAC","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{o as u,u as I,j as s,B as h,l as f,m,n as y}from"./index-D7BuMEIr.js";import{r as g}from"./react-DlP5eolq.js";import{C as S}from"./confirm-dialog-HsyBgWxC.js";import{E as w}from"./empty-state-DoiBKL4l.js";import{T as N,a as v,b as d,c as t,d as b,e as r}from"./table-CSHCu7pz.js";import{n as R,o as L,p as U}from"./use-settings-DQnJkPXp.js";import{L as k}from"./loader-circle-DO3Ni2RJ.js";import{R as M}from"./refresh-ccw-BhPAzZAa.js";import{T as P}from"./trash-2-Cco09tAA.js";/**
1
+ import{o as u,u as I,j as s,B as h,l as f,m,n as y}from"./index-BIBWEKxu.js";import{r as g}from"./react-DlP5eolq.js";import{C as S}from"./confirm-dialog-GZyIzSwj.js";import{E as w}from"./empty-state-BRsb30K6.js";import{T as N,a as v,b as d,c as t,d as b,e as r}from"./table-Dww-k14l.js";import{n as R,o as L,p as U}from"./use-settings-DG1rm9KU.js";import{L as k}from"./loader-circle-BQkLEJZw.js";import{R as M}from"./refresh-ccw-CFPE6zD1.js";import{T as P}from"./trash-2-BF98SY8M.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -14,4 +14,4 @@ import{o as u,u as I,j as s,B as h,l as f,m,n as y}from"./index-D7BuMEIr.js";imp
14
14
  * This source code is licensed under the ISC license.
15
15
  * See the LICENSE file in the root directory of this source tree.
16
16
  */const H=u("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);function z(e){const i=new Date(e);return Number.isNaN(i.getTime())?e:i.toLocaleString()}function J(){const{t:e}=I(["settings","common"]),i=R(),a=i.data,c=L(),j=U(),[x,p]=g.useState(null),A=g.useMemo(()=>new Set((a?.admins??[]).map(n=>`${n.platform}:${n.userId}`)),[a?.admins]);async function C(n){try{await c.mutateAsync({platform:n.platform,userId:n.userId}),m.success(e("admins.toast.added"))}catch(l){m.error(y(l,e).message)}}async function T(){if(x)try{await j.mutateAsync(x),m.success(e("admins.toast.removed"))}catch(n){throw m.error(y(n,e).message),n}}return s.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[s.jsxs("header",{className:"flex flex-col gap-1",children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[s.jsx("h1",{className:"text-xl font-semibold",children:e("admins.title")}),s.jsxs(h,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>i.refetch(),disabled:i.isFetching,"aria-label":e("actions.refresh",{ns:"common"}),children:[i.isFetching?s.jsx(k,{className:"h-4 w-4 animate-spin"}):s.jsx(M,{className:"h-4 w-4"}),s.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),s.jsx("p",{className:"text-sm text-text-dim",children:e("admins.subtitle")})]}),a&&s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[a.configured?s.jsx(f,{variant:"success",children:e("admins.configured")}):s.jsx(f,{variant:"warning",children:e("admins.notConfigured")}),s.jsx(f,{variant:"info",children:e("admins.known.count",{count:a.knownUsers.length})})]}),i.isLoading?s.jsx("div",{className:"h-32 rounded-md bg-surface-2 animate-pulse"}):a&&a.admins.length===0?s.jsx(w,{icon:s.jsx($,{}),title:e("admins.empty")}):a?s.jsxs(N,{children:[s.jsx(v,{children:s.jsxs(d,{children:[s.jsx(t,{className:"w-40",children:e("admins.col.platform")}),s.jsx(t,{children:e("admins.col.userId")}),s.jsx(t,{className:"w-24"})]})}),s.jsx(b,{children:a.admins.map(n=>s.jsxs(d,{children:[s.jsx(r,{className:"font-mono",children:n.platform}),s.jsx(r,{className:"font-mono text-xs",children:n.userId}),s.jsx(r,{children:s.jsxs(h,{variant:"ghost",size:"sm",onClick:()=>p(n),disabled:j.isPending,"aria-label":e("admins.remove.label"),children:[s.jsx(P,{className:"h-3 w-3"}),s.jsx("span",{className:"sr-only sm:not-sr-only sm:ml-1",children:e("admins.remove.label")})]})})]},`${n.platform}:${n.userId}`))})]}):null,s.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[s.jsxs("div",{className:"mb-3 flex flex-col gap-1",children:[s.jsx("div",{className:"text-sm font-medium",children:e("admins.known.title")}),s.jsx("div",{className:"text-xs text-text-dim",children:e("admins.known.hint")})]}),i.isLoading?s.jsx("div",{className:"h-20 rounded-md bg-surface-2 animate-pulse"}):a&&a.knownUsers.length===0?s.jsx(w,{icon:s.jsx(H,{}),title:e("admins.known.empty"),description:e("admins.known.emptyHint")}):a?s.jsxs(N,{children:[s.jsx(v,{children:s.jsxs(d,{children:[s.jsx(t,{className:"w-40",children:e("admins.col.platform")}),s.jsx(t,{children:e("admins.col.userId")}),s.jsx(t,{className:"w-48",children:e("admins.known.col.lastSeen")}),s.jsx(t,{className:"w-32"})]})}),s.jsx(b,{children:a.knownUsers.map(n=>{const l=`${n.platform}:${n.userId}`,o=A.has(l);return s.jsxs(d,{children:[s.jsx(r,{className:"font-mono",children:n.platform}),s.jsx(r,{className:"font-mono text-xs",children:n.userId}),s.jsx(r,{className:"text-xs text-text-dim",children:z(n.lastSeenAt)}),s.jsx(r,{children:s.jsxs(h,{size:"sm",variant:o?"ghost":"outline",disabled:o||c.isPending,onClick:()=>void C(n),"aria-label":e(o?"admins.known.alreadyAdmin":"admins.known.promote"),children:[c.isPending?s.jsx(k,{className:"h-4 w-4 animate-spin"}):s.jsx(E,{className:"h-4 w-4"}),e(o?"admins.known.alreadyAdmin":"admins.known.promote")]})})]},l)})})]}):null]}),s.jsx(S,{open:x!=null,onOpenChange:n=>{n||p(null)},title:e("admins.remove.confirmTitle"),description:e("admins.remove.confirmDescription"),intent:"danger",confirmLabel:e("admins.remove.label"),onConfirm:T})]})}export{J as default};
17
- //# sourceMappingURL=admins-CeQorJdU.js.map
17
+ //# sourceMappingURL=admins-DONiT3ld.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admins-CeQorJdU.js","sources":["../../node_modules/lucide-react/dist/esm/icons/shield.js","../../node_modules/lucide-react/dist/esm/icons/user-plus.js","../../node_modules/lucide-react/dist/esm/icons/users.js","../../src/routes/settings/admins.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 Shield = createLucideIcon(\"Shield\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n]);\n\nexport { Shield as default };\n//# sourceMappingURL=shield.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 UserPlus = createLucideIcon(\"UserPlus\", [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n]);\n\nexport { UserPlus as default };\n//# sourceMappingURL=user-plus.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 Users = createLucideIcon(\"Users\", [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\", key: \"1da9ce\" }]\n]);\n\nexport { Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * /settings/admins — manage IM administrators via known IM users.\n *\n * Candidate users are auto-discovered from real inbound IM messages.\n * Operators grant admin from the discovered list (no manual userId typing).\n */\n\nimport { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, RefreshCcw, Shield, Trash2, UserPlus, Users } from 'lucide-react'\n\nimport { ConfirmDialog } from '@/components/common/confirm-dialog'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table'\nimport {\n useAddAdmin,\n useAdminAllowlist,\n useRemoveAdmin,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport type { AdminEntry, KnownImUser } from '@/types/api'\n\nfunction formatSeenAt(value: string): string {\n const dt = new Date(value)\n if (Number.isNaN(dt.getTime())) return value\n return dt.toLocaleString()\n}\n\nexport default function SettingsAdminsRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useAdminAllowlist()\n const data = listQuery.data\n\n const addAdmin = useAddAdmin()\n const removeAdmin = useRemoveAdmin()\n\n const [removeTarget, setRemoveTarget] = useState<AdminEntry | null>(null)\n const adminKeys = useMemo(\n () => new Set((data?.admins ?? []).map((row) => `${row.platform}:${row.userId}`)),\n [data?.admins],\n )\n\n async function onPromote(user: KnownImUser): Promise<void> {\n try {\n await addAdmin.mutateAsync({ platform: user.platform, userId: user.userId })\n toast.success(t('admins.toast.added'))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n async function onConfirmRemove(): Promise<void> {\n if (!removeTarget) return\n try {\n await removeAdmin.mutateAsync(removeTarget)\n toast.success(t('admins.toast.removed'))\n } catch (err) {\n toast.error(describeError(err, t).message)\n throw err\n }\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('admins.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('admins.subtitle')}</p>\n </header>\n\n {data && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {data.configured ? (\n <Badge variant=\"success\">{t('admins.configured')}</Badge>\n ) : (\n <Badge variant=\"warning\">{t('admins.notConfigured')}</Badge>\n )}\n <Badge variant=\"info\">{t('admins.known.count', { count: data.knownUsers.length })}</Badge>\n </div>\n )}\n\n {listQuery.isLoading ? (\n <div className=\"h-32 rounded-md bg-surface-2 animate-pulse\" />\n ) : data && data.admins.length === 0 ? (\n <EmptyState icon={<Shield />} title={t('admins.empty')} />\n ) : data ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\">{t('admins.col.platform')}</TableHead>\n <TableHead>{t('admins.col.userId')}</TableHead>\n <TableHead className=\"w-24\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.admins.map((a) => (\n <TableRow key={`${a.platform}:${a.userId}`}>\n <TableCell className=\"font-mono\">{a.platform}</TableCell>\n <TableCell className=\"font-mono text-xs\">{a.userId}</TableCell>\n <TableCell>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setRemoveTarget(a)}\n disabled={removeAdmin.isPending}\n aria-label={t('admins.remove.label')}\n >\n <Trash2 className=\"h-3 w-3\" />\n <span className=\"sr-only sm:not-sr-only sm:ml-1\">{t('admins.remove.label')}</span>\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : null}\n\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"mb-3 flex flex-col gap-1\">\n <div className=\"text-sm font-medium\">{t('admins.known.title')}</div>\n <div className=\"text-xs text-text-dim\">{t('admins.known.hint')}</div>\n </div>\n {listQuery.isLoading ? (\n <div className=\"h-20 rounded-md bg-surface-2 animate-pulse\" />\n ) : data && data.knownUsers.length === 0 ? (\n <EmptyState\n icon={<Users />}\n title={t('admins.known.empty')}\n description={t('admins.known.emptyHint')}\n />\n ) : data ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\">{t('admins.col.platform')}</TableHead>\n <TableHead>{t('admins.col.userId')}</TableHead>\n <TableHead className=\"w-48\">{t('admins.known.col.lastSeen')}</TableHead>\n <TableHead className=\"w-32\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.knownUsers.map((u) => {\n const key = `${u.platform}:${u.userId}`\n const alreadyAdmin = adminKeys.has(key)\n return (\n <TableRow key={key}>\n <TableCell className=\"font-mono\">{u.platform}</TableCell>\n <TableCell className=\"font-mono text-xs\">{u.userId}</TableCell>\n <TableCell className=\"text-xs text-text-dim\">{formatSeenAt(u.lastSeenAt)}</TableCell>\n <TableCell>\n <Button\n size=\"sm\"\n variant={alreadyAdmin ? 'ghost' : 'outline'}\n disabled={alreadyAdmin || addAdmin.isPending}\n onClick={() => void onPromote(u)}\n aria-label={alreadyAdmin ? t('admins.known.alreadyAdmin') : t('admins.known.promote')}\n >\n {addAdmin.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <UserPlus className=\"h-4 w-4\" />}\n {alreadyAdmin ? t('admins.known.alreadyAdmin') : t('admins.known.promote')}\n </Button>\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n ) : null}\n </section>\n\n <ConfirmDialog\n open={removeTarget != null}\n onOpenChange={(open) => { if (!open) setRemoveTarget(null) }}\n title={t('admins.remove.confirmTitle')}\n description={t('admins.remove.confirmDescription')}\n intent=\"danger\"\n confirmLabel={t('admins.remove.label')}\n onConfirm={onConfirmRemove}\n />\n </div>\n )\n}\n"],"names":["Shield","createLucideIcon","UserPlus","Users","formatSeenAt","value","dt","SettingsAdminsRoute","t","useTranslation","listQuery","useAdminAllowlist","data","addAdmin","useAddAdmin","removeAdmin","useRemoveAdmin","removeTarget","setRemoveTarget","useState","adminKeys","useMemo","row","onPromote","user","toast","err","describeError","onConfirmRemove","jsxs","jsx","Button","Loader2","RefreshCcw","Badge","EmptyState","Table","TableHeader","TableRow","TableHead","TableBody","a","TableCell","Trash2","u","key","alreadyAdmin","ConfirmDialog","open"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"admins-DONiT3ld.js","sources":["../../node_modules/lucide-react/dist/esm/icons/shield.js","../../node_modules/lucide-react/dist/esm/icons/user-plus.js","../../node_modules/lucide-react/dist/esm/icons/users.js","../../src/routes/settings/admins.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 Shield = createLucideIcon(\"Shield\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n]);\n\nexport { Shield as default };\n//# sourceMappingURL=shield.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 UserPlus = createLucideIcon(\"UserPlus\", [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n]);\n\nexport { UserPlus as default };\n//# sourceMappingURL=user-plus.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 Users = createLucideIcon(\"Users\", [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\", key: \"1da9ce\" }]\n]);\n\nexport { Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * /settings/admins — manage IM administrators via known IM users.\n *\n * Candidate users are auto-discovered from real inbound IM messages.\n * Operators grant admin from the discovered list (no manual userId typing).\n */\n\nimport { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, RefreshCcw, Shield, Trash2, UserPlus, Users } from 'lucide-react'\n\nimport { ConfirmDialog } from '@/components/common/confirm-dialog'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table'\nimport {\n useAddAdmin,\n useAdminAllowlist,\n useRemoveAdmin,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport type { AdminEntry, KnownImUser } from '@/types/api'\n\nfunction formatSeenAt(value: string): string {\n const dt = new Date(value)\n if (Number.isNaN(dt.getTime())) return value\n return dt.toLocaleString()\n}\n\nexport default function SettingsAdminsRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useAdminAllowlist()\n const data = listQuery.data\n\n const addAdmin = useAddAdmin()\n const removeAdmin = useRemoveAdmin()\n\n const [removeTarget, setRemoveTarget] = useState<AdminEntry | null>(null)\n const adminKeys = useMemo(\n () => new Set((data?.admins ?? []).map((row) => `${row.platform}:${row.userId}`)),\n [data?.admins],\n )\n\n async function onPromote(user: KnownImUser): Promise<void> {\n try {\n await addAdmin.mutateAsync({ platform: user.platform, userId: user.userId })\n toast.success(t('admins.toast.added'))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n async function onConfirmRemove(): Promise<void> {\n if (!removeTarget) return\n try {\n await removeAdmin.mutateAsync(removeTarget)\n toast.success(t('admins.toast.removed'))\n } catch (err) {\n toast.error(describeError(err, t).message)\n throw err\n }\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('admins.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('admins.subtitle')}</p>\n </header>\n\n {data && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {data.configured ? (\n <Badge variant=\"success\">{t('admins.configured')}</Badge>\n ) : (\n <Badge variant=\"warning\">{t('admins.notConfigured')}</Badge>\n )}\n <Badge variant=\"info\">{t('admins.known.count', { count: data.knownUsers.length })}</Badge>\n </div>\n )}\n\n {listQuery.isLoading ? (\n <div className=\"h-32 rounded-md bg-surface-2 animate-pulse\" />\n ) : data && data.admins.length === 0 ? (\n <EmptyState icon={<Shield />} title={t('admins.empty')} />\n ) : data ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\">{t('admins.col.platform')}</TableHead>\n <TableHead>{t('admins.col.userId')}</TableHead>\n <TableHead className=\"w-24\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.admins.map((a) => (\n <TableRow key={`${a.platform}:${a.userId}`}>\n <TableCell className=\"font-mono\">{a.platform}</TableCell>\n <TableCell className=\"font-mono text-xs\">{a.userId}</TableCell>\n <TableCell>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setRemoveTarget(a)}\n disabled={removeAdmin.isPending}\n aria-label={t('admins.remove.label')}\n >\n <Trash2 className=\"h-3 w-3\" />\n <span className=\"sr-only sm:not-sr-only sm:ml-1\">{t('admins.remove.label')}</span>\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : null}\n\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"mb-3 flex flex-col gap-1\">\n <div className=\"text-sm font-medium\">{t('admins.known.title')}</div>\n <div className=\"text-xs text-text-dim\">{t('admins.known.hint')}</div>\n </div>\n {listQuery.isLoading ? (\n <div className=\"h-20 rounded-md bg-surface-2 animate-pulse\" />\n ) : data && data.knownUsers.length === 0 ? (\n <EmptyState\n icon={<Users />}\n title={t('admins.known.empty')}\n description={t('admins.known.emptyHint')}\n />\n ) : data ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\">{t('admins.col.platform')}</TableHead>\n <TableHead>{t('admins.col.userId')}</TableHead>\n <TableHead className=\"w-48\">{t('admins.known.col.lastSeen')}</TableHead>\n <TableHead className=\"w-32\" />\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.knownUsers.map((u) => {\n const key = `${u.platform}:${u.userId}`\n const alreadyAdmin = adminKeys.has(key)\n return (\n <TableRow key={key}>\n <TableCell className=\"font-mono\">{u.platform}</TableCell>\n <TableCell className=\"font-mono text-xs\">{u.userId}</TableCell>\n <TableCell className=\"text-xs text-text-dim\">{formatSeenAt(u.lastSeenAt)}</TableCell>\n <TableCell>\n <Button\n size=\"sm\"\n variant={alreadyAdmin ? 'ghost' : 'outline'}\n disabled={alreadyAdmin || addAdmin.isPending}\n onClick={() => void onPromote(u)}\n aria-label={alreadyAdmin ? t('admins.known.alreadyAdmin') : t('admins.known.promote')}\n >\n {addAdmin.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <UserPlus className=\"h-4 w-4\" />}\n {alreadyAdmin ? t('admins.known.alreadyAdmin') : t('admins.known.promote')}\n </Button>\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n ) : null}\n </section>\n\n <ConfirmDialog\n open={removeTarget != null}\n onOpenChange={(open) => { if (!open) setRemoveTarget(null) }}\n title={t('admins.remove.confirmTitle')}\n description={t('admins.remove.confirmDescription')}\n intent=\"danger\"\n confirmLabel={t('admins.remove.label')}\n onConfirm={onConfirmRemove}\n />\n </div>\n )\n}\n"],"names":["Shield","createLucideIcon","UserPlus","Users","formatSeenAt","value","dt","SettingsAdminsRoute","t","useTranslation","listQuery","useAdminAllowlist","data","addAdmin","useAddAdmin","removeAdmin","useRemoveAdmin","removeTarget","setRemoveTarget","useState","adminKeys","useMemo","row","onPromote","user","toast","err","describeError","onConfirmRemove","jsxs","jsx","Button","Loader2","RefreshCcw","Badge","EmptyState","Table","TableHeader","TableRow","TableHead","TableBody","a","TableCell","Trash2","u","key","alreadyAdmin","ConfirmDialog","open"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -0,0 +1,7 @@
1
+ import{o as re,u as U,j as e,B as v,a7 as G,L as $,S as Z,g as X,h as Y,i as J,k as V,l as B,X as oe,m as f,n as I,c as K,I as P}from"./index-BIBWEKxu.js";import{r as g}from"./react-DlP5eolq.js";import{E as de}from"./empty-state-BRsb30K6.js";import{u as me}from"./use-workspace-DvW_xOmj.js";import{b as xe,c as ue,h as pe,i as ge}from"./use-settings-DG1rm9KU.js";import{L as R}from"./loader-circle-BQkLEJZw.js";import{R as he}from"./refresh-ccw-CFPE6zD1.js";import{S as fe}from"./save-CNUmUMEf.js";import{N as Q}from"./network-Bbh3j5ew.js";import{S as F}from"./search-D9TZs0bG.js";import{P as je}from"./plus-6MNGQidu.js";import{T as be}from"./trash-2-BF98SY8M.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 Ne=re("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),L={"claude-code":{aliases:["cc","claude"],pkg:"@anthropic-ai/claude-code",kind:"cli",scope:"bridged"},codex:{aliases:["cx"],pkg:"@openai/codex",kind:"cli",scope:"bridged"},opencode:{aliases:["oc"],pkg:"opencode-ai",kind:"cli",scope:"bridged"},cursor:{aliases:["cs","cur"],pkg:"cursor-agent (curl https://cursor.com/install)",kind:"cli",scope:"bridged"},native:{aliases:["agim","na","llm","native-llm"],pkg:"in-process",kind:"in-process",scope:"agim"}},W=Object.keys(L),ve=W.filter(s=>L[s]?.scope==="bridged");function Ue(){const{t:s}=U(["settings","common"]),r=xe(),t=me(),c=ue(),n=r.data,d=t.data??{},[p,o]=g.useState(null),[m,x]=g.useState(null),[S,j]=g.useState(null);g.useEffect(()=>{n&&p==null&&o(n.agents??[]),n&&m==null&&x(n.defaultAgent??""),n&&S==null&&j(n.acpAgents??[])},[n,p,m,S]);const h=p??n?.agents??[],b=m??n?.defaultAgent??"",w=S??n?.acpAgents??[],O=g.useMemo(()=>{if(!n)return!1;const i=h.length===(n.agents?.length??0)&&h.every(y=>n.agents?.includes(y)),N=b===(n.defaultAgent??""),k=Ae(w,n.acpAgents??[]);return!i||!N||!k},[n,h,b,w]),C=g.useMemo(()=>W.filter(i=>(L[i].kind==="in-process"?!0:h.includes(i))&&d[i]),[h,d]);function _(i,N){const k=N?Array.from(new Set([...h,i])):h.filter(y=>y!==i);o(k),!N&&i===b&&x("")}async function M(){if(n)try{await c.mutateAsync({...n,agents:h,defaultAgent:b||n.defaultAgent,acpAgents:w}),f.success(s("agents.toast.saved")),o(null),x(null),j(null)}catch(i){f.error(I(i,s).message)}}function T(){o(null),x(null),j(null)}function z(i){j(i)}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("agents.title")}),e.jsxs(v,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{r.refetch(),t.refetch()},disabled:r.isFetching||t.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[r.isFetching||t.isFetching?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(he,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("agents.subtitle")})]}),r.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-col divide-y divide-border rounded-md border border-border bg-surface",children:ve.map(i=>{const N=L[i],k=!!d[i],y=h.includes(i);return e.jsx(ke,{displayName:G(i),aliases:N.aliases,pkg:N.pkg,kind:N.kind,installed:k,enabled:y,onToggle:H=>_(i,H)},i)})}),e.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s("agents.agimAgentCardTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("agents.agimAgentCardDesc")}),e.jsx(v,{className:"mt-3",variant:"secondary",size:"sm",onClick:()=>{window.location.assign("/settings/llm")},children:s("agents.agimAgentCardAction")})]}),e.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsx($,{htmlFor:"default-agent",className:"text-sm font-medium",children:s("agents.defaultAgent")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("agents.defaultAgentHint")}),e.jsxs(Z,{value:b||"__none__",onValueChange:i=>x(i==="__none__"?"":i),disabled:C.length===0,children:[e.jsx(X,{id:"default-agent",className:"mt-2 w-64",children:e.jsx(Y,{placeholder:s("agents.noEligible")})}),e.jsx(J,{children:C.length===0?e.jsx(V,{value:"__none__",disabled:!0,children:s("agents.noEligible")}):C.map(i=>e.jsx(V,{value:i,children:G(i)},i))})]})]}),n?.features?.remoteAgent?e.jsx(Se,{agents:w,onChange:z}):null,O&&e.jsxs("div",{className:"sticky bottom-0 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 shadow-md",children:[e.jsx(B,{variant:"info",children:s("agents.dirtyHint")}),e.jsxs(v,{variant:"secondary",size:"sm",onClick:T,disabled:c.isPending,children:[e.jsx(oe,{className:"h-4 w-4"}),s("agents.discard")]}),e.jsxs(v,{size:"sm",onClick:()=>void M(),disabled:c.isPending,children:[c.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(fe,{className:"h-4 w-4"}),c.isPending?s("agents.saving"):s("agents.saveBtn")]})]})]})]})}function ke({displayName:s,aliases:r,pkg:t,kind:c,installed:n,enabled:d,onToggle:p}){const{t:o}=U("settings"),m=c==="in-process";return e.jsxs("div",{className:"flex items-start gap-3 px-3 py-3",children:[e.jsx("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim",children:e.jsx(Ne,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s}),e.jsxs(B,{variant:n?"success":"outline",className:"text-[10px]",children:[e.jsx("span",{className:K("inline-block h-1.5 w-1.5 rounded-full",n?"bg-success":"bg-text-muted")}),o(n?"agents.online":"agents.offline")]}),m&&e.jsx(B,{variant:"outline",className:"text-[10px]",title:o("agents.inProcessHint"),children:o("agents.inProcessBadge")})]}),e.jsxs("p",{className:"mt-0.5 text-xs text-text-dim",children:[e.jsxs("span",{className:"text-text-muted",children:[o("agents.aliasesLabel"),": "]}),e.jsx("span",{className:"font-mono",children:r.map(x=>`/${x}`).join(", ")})]}),!n&&e.jsx("p",{className:"mt-1 text-xs text-warning",children:m?o("agents.nativeInstallHint"):o("agents.installHint",{pkg:t})})]}),e.jsx("input",{type:"checkbox",checked:d,onChange:x=>p(x.target.checked),className:"h-4 w-4 mt-2 accent-accent cursor-pointer"})]})}const ye=["none","apikey","bearer"],we=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;function Ae(s,r){if(s.length!==r.length)return!1;for(let t=0;t<s.length;t++){const c=s[t],n=r[t];if(c.name!==n.name||c.endpoint!==n.endpoint||(c.enabled??!0)!==(n.enabled??!0))return!1;const d=(c.aliases??[]).join(","),p=(n.aliases??[]).join(",");if(d!==p)return!1;const o=c.auth?.type??"none",m=n.auth?.type??"none";if(o!==m||(c.auth?.token??"")!==(n.auth?.token??""))return!1}return!0}function Se({agents:s,onChange:r}){const{t}=U(["settings","common"]),c=pe(),n=ge(),[d,p]=g.useState(""),[o,m]=g.useState(""),[x,S]=g.useState(""),[j,h]=g.useState("none"),[b,w]=g.useState(""),[O,C]=g.useState(!1),[_,M]=g.useState(""),T=d.trim(),z=T.length>0&&we.test(T),i=s.some(a=>a.name===T),k=!(j!=="none")||b.trim().length>0,y=z&&x.trim().length>0&&k&&!i,H=x.trim().length>0&&k;function ee(){p(""),m(""),S(""),h("none"),w("")}function se(a){return a.split(",").map(l=>l.trim()).filter(Boolean)}function q(a,l){if(a==="none")return{type:"none"};const u=l.trim();return u?{type:a,token:u}:{type:a}}async function te(){if(!y)return;const a={name:T,endpoint:x.trim(),aliases:se(o),auth:q(j,b),enabled:!0};r([...s,a]),ee(),f.success(t("agents.acp.toast.staged"))}async function ae(){if(H)try{const a=await c.mutateAsync({endpoint:x.trim(),auth:q(j,b)});f.success(t("agents.acp.toast.testOk",{name:a.name}))}catch(a){f.error(I(a,t).message)}}async function ne(a){const l=s[a];if(l){if(l.auth?.type!=="none"&&l.auth?.token&&Te(l.auth.token)){f.error(t("agents.acp.toast.testMasked"));return}try{const u=await c.mutateAsync({endpoint:l.endpoint,auth:l.auth});f.success(t("agents.acp.toast.testOk",{name:u.name}))}catch(u){f.error(I(u,t).message)}}}function ie(a,l){const u=s.map((E,A)=>A===a?{...E,enabled:l}:E);r(u)}function ce(a){r(s.filter((l,u)=>u!==a))}async function le(){const a=_.trim();if(a)try{const l=await n.mutateAsync({baseUrl:a,register:!1}),u=new Set(s.map(A=>A.name)),E=l.agents.filter(A=>!u.has(A.name));if(E.length===0){f.info(t("agents.acp.toast.discoverEmpty"));return}r([...s,...E.map(A=>({...A,enabled:!0}))]),f.success(t("agents.acp.toast.discoverAdded",{count:E.length})),M(""),C(!1)}catch(l){f.error(I(l,t).message)}}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(Q,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:t("agents.acp.title")}),e.jsx(B,{variant:"outline",className:"text-[10px]",children:s.length}),e.jsxs(v,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>C(a=>!a),children:[e.jsx(F,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("agents.acp.discoverBtn")})]})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:t("agents.acp.subtitle")}),O&&e.jsxs("div",{className:"border-t border-border bg-surface-2 px-4 py-3",children:[e.jsx($,{htmlFor:"acp-baseurl",className:"text-xs font-medium",children:t("agents.acp.baseUrl")}),e.jsx("p",{className:"mt-1 text-[11px] text-text-dim",children:t("agents.acp.baseUrlHint")}),e.jsxs("div",{className:"mt-2 flex flex-wrap gap-2",children:[e.jsx(P,{id:"acp-baseurl",value:_,onChange:a=>M(a.target.value),placeholder:"https://agents.example.com",className:"flex-1 min-w-[200px] font-mono text-xs"}),e.jsxs(v,{variant:"secondary",size:"sm",onClick:()=>void le(),disabled:!_.trim()||n.isPending,children:[n.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"}),t("agents.acp.runDiscover")]})]})]}),s.length===0?e.jsx("div",{className:"px-4 py-6",children:e.jsx(de,{icon:e.jsx(Q,{}),title:t("agents.acp.empty.title"),description:t("agents.acp.empty.description")})}):e.jsx("ul",{className:"divide-y divide-border",children:s.map((a,l)=>e.jsx(Ce,{agent:a,onToggle:u=>ie(l,u),onTest:()=>void ne(l),onRemove:()=>ce(l),testing:c.isPending},a.name))}),e.jsxs("div",{className:"border-t border-border px-4 py-3",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-text-dim",children:t("agents.acp.addTitle")}),e.jsxs("div",{className:"mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2",children:[e.jsx(D,{label:t("agents.acp.name"),hint:t("agents.acp.nameHint"),children:e.jsx(P,{value:d,onChange:a=>p(a.target.value),placeholder:"my-agent","aria-invalid":d.length>0&&!z})}),e.jsx(D,{label:t("agents.acp.aliases"),hint:t("agents.acp.aliasesHint"),children:e.jsx(P,{value:o,onChange:a=>m(a.target.value),placeholder:"ma, agent1"})}),e.jsx(D,{label:t("agents.acp.endpoint"),hint:t("agents.acp.endpointHint"),children:e.jsx(P,{value:x,onChange:a=>S(a.target.value),placeholder:"https://example.com/agents/weather",className:"font-mono text-xs"})}),e.jsx(D,{label:t("agents.acp.authType"),children:e.jsxs(Z,{value:j,onValueChange:a=>h(a),children:[e.jsx(X,{children:e.jsx(Y,{})}),e.jsx(J,{children:ye.map(a=>e.jsx(V,{value:a,children:t(`agents.acp.auth.${a}`)},a))})]})}),j!=="none"&&e.jsx(D,{label:t("agents.acp.token"),className:"sm:col-span-2",children:e.jsx(P,{type:"password",value:b,onChange:a=>w(a.target.value),placeholder:t("agents.acp.tokenPlaceholder"),autoComplete:"new-password"})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs(v,{variant:"secondary",size:"sm",onClick:()=>void ae(),disabled:!H||c.isPending,children:[c.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"}),t("agents.acp.testBtn")]}),e.jsxs(v,{size:"sm",onClick:()=>void te(),disabled:!y,children:[e.jsx(je,{className:"h-4 w-4"}),t("agents.acp.addBtn")]}),i&&e.jsx("span",{className:"self-center text-xs text-warning",children:t("agents.acp.dupName")})]})]})]})}function Ce({agent:s,onToggle:r,onTest:t,onRemove:c,testing:n}){const{t:d}=U("settings"),p=s.enabled!==!1,o=s.auth?.type??"none";return e.jsxs("li",{className:"flex flex-wrap items-center gap-3 px-4 py-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s.name}),e.jsx(B,{variant:"outline",className:"text-[10px] uppercase",children:d(`agents.acp.auth.${o}`)}),s.aliases&&s.aliases.length>0&&e.jsx("span",{className:"text-xs text-text-muted font-mono",children:s.aliases.map(m=>`/${m}`).join(", ")})]}),e.jsx("p",{className:"mt-0.5 truncate font-mono text-xs text-text-dim",title:s.endpoint,children:s.endpoint})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-text-dim",children:[e.jsx("input",{type:"checkbox",checked:p,onChange:m=>r(m.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),d(p?"agents.acp.on":"agents.acp.off")]}),e.jsx(v,{variant:"ghost",size:"sm",onClick:t,disabled:n,"aria-label":d("agents.acp.testBtn"),children:n?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"})}),e.jsx(v,{variant:"ghost",size:"sm",onClick:c,"aria-label":d("agents.acp.removeBtn"),className:"text-danger hover:text-danger",children:e.jsx(be,{className:"h-4 w-4"})})]})}function D({label:s,hint:r,className:t,children:c}){return e.jsxs("div",{className:K("flex flex-col gap-1",t),children:[e.jsx($,{className:"text-xs font-medium",children:s}),c,r&&e.jsx("p",{className:"text-[11px] text-text-dim",children:r})]})}function Te(s){return/\*{3,}/.test(s)}export{Ue as default};
7
+ //# sourceMappingURL=agents-DRbQOH0K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-DRbQOH0K.js","sources":["../../node_modules/lucide-react/dist/esm/icons/bot.js","../../src/routes/settings/agents.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 Bot = createLucideIcon(\"Bot\", [\n [\"path\", { d: \"M12 8V4H8\", key: \"hb8ula\" }],\n [\"rect\", { width: \"16\", height: \"12\", x: \"4\", y: \"8\", rx: \"2\", key: \"enze0r\" }],\n [\"path\", { d: \"M2 14h2\", key: \"vft8re\" }],\n [\"path\", { d: \"M20 14h2\", key: \"4cs60a\" }],\n [\"path\", { d: \"M15 13v2\", key: \"1xurst\" }],\n [\"path\", { d: \"M9 13v2\", key: \"rq6x2g\" }]\n]);\n\nexport { Bot as default };\n//# sourceMappingURL=bot.js.map\n","/**\n * /settings/agents — built-in adapters + remote (ACP) agents.\n *\n * Two cards on one page:\n * 1. Built-in adapters (claude-code / codex / opencode):\n * enable/disable + default-agent picker. Mirrors v1's \"Agents\".\n * 2. Remote (ACP) agents: name/endpoint/auth-type table + manual\n * add form. Mirrors v1's \"Remote Agents (ACP)\" card. Discover\n * via `<baseUrl>/.well-known/acp` is available as a secondary\n * bulk-import form.\n *\n * Both cards share one save bar — PUT /api/config writes `agents[]`,\n * `defaultAgent`, and `acpAgents[]` atomically so the default never\n * goes out of sync with the enabled list, and partial ACP edits\n * don't ship without the user's intent.\n *\n * Masked tokens: GET returns `ab****yz` for ACP auth.token; PUT\n * detects this pattern and preserves the on-disk value so we never\n * overwrite a real token with its mask. New tokens (typed into the\n * add form or \"edit\" inline) flow through verbatim.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bot, Loader2, Network, Plus, RefreshCcw, Save, Search, Trash2, 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,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { useAgentsStatus } from '@/hooks/use-workspace'\nimport {\n useConfig,\n useDiscoverAcp,\n useTestAcp,\n useUpdateConfig,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport { agentDisplayName } from '@/lib/agent-label'\nimport { cn } from '@/lib/utils'\nimport type { ACPAgentConfig, ACPAuthConfig, ACPAuthType } from '@/types/api'\n\n/** Mirror of v1 settings.html:BUILTIN_AGENTS. Hardcoded because\n * backend doesn't expose this metadata yet; the table changes\n * rarely enough that copying it here is fine.\n *\n * `kind` distinguishes spawn flavor:\n * - 'cli' → external CLI subprocess, needs `npm install -g <pkg>`\n * - 'in-process' → runs inside agim, no install needed; `pkg` carries\n * a one-liner hint instead of an install command. The\n * runtime always exposes it via `isAgentEnabled`\n * regardless of config.agents, so default-picker\n * eligibility ignores the enabled-list constraint. */\nconst BUILTIN_AGENTS: Record<string, {\n aliases: string[]\n pkg: string\n kind: 'cli' | 'in-process'\n scope: 'bridged' | 'agim'\n}> = {\n 'claude-code': { aliases: ['cc', 'claude'], pkg: '@anthropic-ai/claude-code', kind: 'cli', scope: 'bridged' },\n 'codex': { aliases: ['cx'], pkg: '@openai/codex', kind: 'cli', scope: 'bridged' },\n 'opencode': { aliases: ['oc'], pkg: 'opencode-ai', kind: 'cli', scope: 'bridged' },\n 'cursor': { aliases: ['cs', 'cur'], pkg: 'cursor-agent (curl https://cursor.com/install)', kind: 'cli', scope: 'bridged' },\n // v1.2.140 — surface the in-process `native` agent in the admin list.\n // Previously the agent was registered + always-enabled at runtime but\n // hidden from this page, so operators could only reach it via the CLI.\n 'native': { aliases: ['agim', 'na', 'llm', 'native-llm'], pkg: 'in-process', kind: 'in-process', scope: 'agim' },\n}\n\nconst AGENT_NAMES = Object.keys(BUILTIN_AGENTS)\nconst BRIDGED_AGENT_NAMES = AGENT_NAMES.filter((name) => BUILTIN_AGENTS[name]?.scope === 'bridged')\n\nexport default function SettingsAgentsRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const statusQuery = useAgentsStatus()\n const updateCfg = useUpdateConfig()\n\n const cfg = cfgQuery.data\n const status = statusQuery.data ?? {}\n\n /** Local draft so toggles + default-picker + ACP edits can stage\n * changes before a single Save. `null` means \"sync from cfg on\n * next paint\". */\n const [draftEnabled, setDraftEnabled] = useState<string[] | null>(null)\n const [draftDefault, setDraftDefault] = useState<string | null>(null)\n const [draftAcp, setDraftAcp] = useState<ACPAgentConfig[] | null>(null)\n\n useEffect(() => {\n if (cfg && draftEnabled == null) setDraftEnabled(cfg.agents ?? [])\n if (cfg && draftDefault == null) setDraftDefault(cfg.defaultAgent ?? '')\n if (cfg && draftAcp == null) setDraftAcp(cfg.acpAgents ?? [])\n }, [cfg, draftEnabled, draftDefault, draftAcp])\n\n const enabled = draftEnabled ?? cfg?.agents ?? []\n const defaultAgent = draftDefault ?? cfg?.defaultAgent ?? ''\n const acpAgents = draftAcp ?? cfg?.acpAgents ?? []\n\n const isDirty = useMemo(() => {\n if (!cfg) return false\n const enabledSame =\n enabled.length === (cfg.agents?.length ?? 0)\n && enabled.every((a) => cfg.agents?.includes(a))\n const defaultSame = defaultAgent === (cfg.defaultAgent ?? '')\n const acpSame = acpEqual(acpAgents, cfg.acpAgents ?? [])\n return !enabledSame || !defaultSame || !acpSame\n }, [cfg, enabled, defaultAgent, acpAgents])\n\n /** Eligible defaults = installed + enabled. Picker disables when\n * empty (no agent is both).\n *\n * v1.2.140 — in-process agents (e.g. `native`) are exempt from the\n * enabled-list check. Runtime `isAgentEnabled('native')` always\n * returns true regardless of config.agents (see live-config.ts), so\n * the picker should mirror that and not require the user to flip the\n * toggle on first. */\n const eligibleDefaults = useMemo(\n () => AGENT_NAMES.filter((a) => {\n const info = BUILTIN_AGENTS[a]!\n const enabledOrInProcess = info.kind === 'in-process' ? true : enabled.includes(a)\n return enabledOrInProcess && status[a]\n }),\n [enabled, status],\n )\n\n function toggleAgent(name: string, on: boolean): void {\n const next = on\n ? Array.from(new Set([...enabled, name]))\n : enabled.filter((a) => a !== name)\n setDraftEnabled(next)\n // If the default just got disabled, clear it so save doesn't\n // ship an inconsistent pair.\n if (!on && name === defaultAgent) setDraftDefault('')\n }\n\n async function onSave(): Promise<void> {\n if (!cfg) return\n try {\n await updateCfg.mutateAsync({\n ...cfg,\n agents: enabled,\n defaultAgent: defaultAgent || cfg.defaultAgent,\n acpAgents,\n })\n toast.success(t('agents.toast.saved'))\n // Reset drafts so the next paint reads from refreshed cfg.\n setDraftEnabled(null)\n setDraftDefault(null)\n setDraftAcp(null)\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onDiscard(): void {\n setDraftEnabled(null)\n setDraftDefault(null)\n setDraftAcp(null)\n }\n\n function updateAcp(next: ACPAgentConfig[]): void {\n setDraftAcp(next)\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('agents.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => {\n void cfgQuery.refetch()\n void statusQuery.refetch()\n }}\n disabled={cfgQuery.isFetching || statusQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {(cfgQuery.isFetching || statusQuery.isFetching)\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('agents.subtitle')}</p>\n </header>\n\n {cfgQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n {/* Agent rows */}\n <div className=\"flex flex-col divide-y divide-border rounded-md border border-border bg-surface\">\n {BRIDGED_AGENT_NAMES.map((name) => {\n const info = BUILTIN_AGENTS[name]!\n const installed = !!status[name]\n const isEnabled = enabled.includes(name)\n return (\n <AgentRow\n key={name}\n displayName={agentDisplayName(name)}\n aliases={info.aliases}\n pkg={info.pkg}\n kind={info.kind}\n installed={installed}\n enabled={isEnabled}\n onToggle={(on) => toggleAgent(name, on)}\n />\n )\n })}\n </div>\n\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <h3 className=\"text-sm font-semibold\">{t('agents.agimAgentCardTitle')}</h3>\n <p className=\"mt-1 text-xs text-text-dim\">{t('agents.agimAgentCardDesc')}</p>\n <Button\n className=\"mt-3\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { window.location.assign('/settings/llm') }}\n >\n {t('agents.agimAgentCardAction')}\n </Button>\n </section>\n\n {/* Default agent picker */}\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <Label htmlFor=\"default-agent\" className=\"text-sm font-medium\">\n {t('agents.defaultAgent')}\n </Label>\n <p className=\"mt-1 text-xs text-text-dim\">{t('agents.defaultAgentHint')}</p>\n <Select\n value={defaultAgent || '__none__'}\n onValueChange={(v) => setDraftDefault(v === '__none__' ? '' : v)}\n disabled={eligibleDefaults.length === 0}\n >\n <SelectTrigger id=\"default-agent\" className=\"mt-2 w-64\">\n <SelectValue placeholder={t('agents.noEligible')} />\n </SelectTrigger>\n <SelectContent>\n {eligibleDefaults.length === 0 ? (\n <SelectItem value=\"__none__\" disabled>{t('agents.noEligible')}</SelectItem>\n ) : (\n eligibleDefaults.map((a) => (\n <SelectItem key={a} value={a}>{agentDisplayName(a)}</SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </section>\n\n {/* Remote (ACP) agents — gated by features.remoteAgent\n (IMHUB_ENABLE_REMOTE_AGENT on server). Card is omitted\n entirely; no breadcrumb hint shown. */}\n {cfg?.features?.remoteAgent ? (\n <AcpCard\n agents={acpAgents}\n onChange={updateAcp}\n />\n ) : null}\n\n {/* Save bar */}\n {isDirty && (\n <div className=\"sticky bottom-0 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 shadow-md\">\n <Badge variant=\"info\">{t('agents.dirtyHint')}</Badge>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={onDiscard}\n disabled={updateCfg.isPending}\n >\n <X className=\"h-4 w-4\" />\n {t('agents.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateCfg.isPending}\n >\n {updateCfg.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {updateCfg.isPending ? t('agents.saving') : t('agents.saveBtn')}\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Row ─────────────── */\n\ninterface AgentRowProps {\n displayName: string\n aliases: string[]\n pkg: string\n /** v1.2.140 — 'in-process' agents show a different \"not installed\"\n * hint (point at LLM-backend config rather than `npm install -g`)\n * and surface a small \"内置\" badge so operators understand they\n * don't need to install anything. */\n kind: 'cli' | 'in-process'\n installed: boolean\n enabled: boolean\n onToggle: (on: boolean) => void\n}\n\nfunction AgentRow({\n displayName, aliases, pkg, kind, installed, enabled, onToggle,\n}: AgentRowProps): JSX.Element {\n const { t } = useTranslation('settings')\n const inProcess = kind === 'in-process'\n return (\n <div className=\"flex items-start gap-3 px-3 py-3\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim\">\n <Bot className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-text\">{displayName}</span>\n <Badge variant={installed ? 'success' : 'outline'} className=\"text-[10px]\">\n <span className={cn(\n 'inline-block h-1.5 w-1.5 rounded-full',\n installed ? 'bg-success' : 'bg-text-muted',\n )} />\n {installed ? t('agents.online') : t('agents.offline')}\n </Badge>\n {inProcess && (\n <Badge variant=\"outline\" className=\"text-[10px]\" title={t('agents.inProcessHint')}>\n {t('agents.inProcessBadge')}\n </Badge>\n )}\n </div>\n <p className=\"mt-0.5 text-xs text-text-dim\">\n <span className=\"text-text-muted\">{t('agents.aliasesLabel')}: </span>\n <span className=\"font-mono\">{aliases.map((a) => `/${a}`).join(', ')}</span>\n </p>\n {!installed && (\n <p className=\"mt-1 text-xs text-warning\">\n {inProcess\n ? t('agents.nativeInstallHint')\n : t('agents.installHint', { pkg })}\n </p>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 mt-2 accent-accent cursor-pointer\"\n />\n </div>\n )\n}\n\n/* ─────────────── Remote (ACP) ─────────────── */\n\nconst AUTH_TYPES: ACPAuthType[] = ['none', 'apikey', 'bearer']\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/\n\n/** Compare two ACP lists by value. Order matters because the backend\n * preserves index identity (`existing.acpAgents[i]`) when merging\n * masked tokens — reordering = mask drift risk. */\nfunction acpEqual(a: ACPAgentConfig[], b: ACPAgentConfig[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!\n const y = b[i]!\n if (x.name !== y.name) return false\n if (x.endpoint !== y.endpoint) return false\n if ((x.enabled ?? true) !== (y.enabled ?? true)) return false\n const xa = (x.aliases ?? []).join(',')\n const ya = (y.aliases ?? []).join(',')\n if (xa !== ya) return false\n const xat = x.auth?.type ?? 'none'\n const yat = y.auth?.type ?? 'none'\n if (xat !== yat) return false\n if ((x.auth?.token ?? '') !== (y.auth?.token ?? '')) return false\n }\n return true\n}\n\ninterface AcpCardProps {\n agents: ACPAgentConfig[]\n onChange: (next: ACPAgentConfig[]) => void\n}\n\nfunction AcpCard({ agents, onChange }: AcpCardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const testMut = useTestAcp()\n const discoverMut = useDiscoverAcp()\n\n // Add-form state. We keep the typed token in plain state so the\n // user can paste before save; the masked round-trip from backend\n // only matters for existing rows.\n const [name, setName] = useState('')\n const [aliasesText, setAliasesText] = useState('')\n const [endpoint, setEndpoint] = useState('')\n const [authType, setAuthType] = useState<ACPAuthType>('none')\n const [token, setToken] = useState('')\n\n // Bulk-discover sub-form state. Hidden behind a toggle so the\n // primary path (manual add) stays uncluttered.\n const [showDiscover, setShowDiscover] = useState(false)\n const [baseUrl, setBaseUrl] = useState('')\n\n const trimmedName = name.trim()\n const nameValid = trimmedName.length > 0 && NAME_RE.test(trimmedName)\n const dup = agents.some((a) => a.name === trimmedName)\n const tokenRequired = authType !== 'none'\n const tokenOk = !tokenRequired || token.trim().length > 0\n const canAdd = nameValid && endpoint.trim().length > 0 && tokenOk && !dup\n const canTestNew = endpoint.trim().length > 0 && tokenOk\n\n function clearForm(): void {\n setName('')\n setAliasesText('')\n setEndpoint('')\n setAuthType('none')\n setToken('')\n }\n\n function parseAliases(text: string): string[] {\n return text.split(',').map((s) => s.trim()).filter(Boolean)\n }\n\n function buildAuth(type: ACPAuthType, tok: string): ACPAuthConfig | undefined {\n if (type === 'none') return { type: 'none' }\n const trimmed = tok.trim()\n if (!trimmed) return { type } // no token yet; save will reject\n return { type, token: trimmed }\n }\n\n async function onAdd(): Promise<void> {\n if (!canAdd) return\n const next: ACPAgentConfig = {\n name: trimmedName,\n endpoint: endpoint.trim(),\n aliases: parseAliases(aliasesText),\n auth: buildAuth(authType, token),\n enabled: true,\n }\n onChange([...agents, next])\n clearForm()\n toast.success(t('agents.acp.toast.staged'))\n }\n\n async function onTestNew(): Promise<void> {\n if (!canTestNew) return\n try {\n const res = await testMut.mutateAsync({\n endpoint: endpoint.trim(),\n auth: buildAuth(authType, token),\n })\n toast.success(t('agents.acp.toast.testOk', { name: res.name }))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n async function onTestRow(idx: number): Promise<void> {\n const a = agents[idx]\n if (!a) return\n // Masked tokens stay masked on the wire — backend's PUT mask-detect\n // is symmetric, but the test endpoint reads what we send. We can't\n // unmask client-side; warn the operator.\n if (a.auth?.type !== 'none' && a.auth?.token && isMaskedToken(a.auth.token)) {\n toast.error(t('agents.acp.toast.testMasked'))\n return\n }\n try {\n const res = await testMut.mutateAsync({\n endpoint: a.endpoint,\n auth: a.auth,\n })\n toast.success(t('agents.acp.toast.testOk', { name: res.name }))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onToggleRow(idx: number, on: boolean): void {\n const next = agents.map((a, i) => (i === idx ? { ...a, enabled: on } : a))\n onChange(next)\n }\n\n function onRemoveRow(idx: number): void {\n onChange(agents.filter((_, i) => i !== idx))\n }\n\n async function onDiscoverRun(): Promise<void> {\n const url = baseUrl.trim()\n if (!url) return\n try {\n const res = await discoverMut.mutateAsync({ baseUrl: url, register: false })\n // Stage new agents that aren't already in the list (by name).\n const existing = new Set(agents.map((a) => a.name))\n const incoming = res.agents.filter((a) => !existing.has(a.name))\n if (incoming.length === 0) {\n toast.info(t('agents.acp.toast.discoverEmpty'))\n return\n }\n onChange([...agents, ...incoming.map((a) => ({ ...a, enabled: true }))])\n toast.success(t('agents.acp.toast.discoverAdded', { count: incoming.length }))\n setBaseUrl('')\n setShowDiscover(false)\n } catch (err) {\n toast.error(describeError(err, t).message)\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 <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('agents.acp.title')}</h2>\n <Badge variant=\"outline\" className=\"text-[10px]\">{agents.length}</Badge>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => setShowDiscover((v) => !v)}\n >\n <Search className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('agents.acp.discoverBtn')}</span>\n </Button>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('agents.acp.subtitle')}</p>\n\n {/* Discover form (collapsed by default) */}\n {showDiscover && (\n <div className=\"border-t border-border bg-surface-2 px-4 py-3\">\n <Label htmlFor=\"acp-baseurl\" className=\"text-xs font-medium\">\n {t('agents.acp.baseUrl')}\n </Label>\n <p className=\"mt-1 text-[11px] text-text-dim\">{t('agents.acp.baseUrlHint')}</p>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Input\n id=\"acp-baseurl\"\n value={baseUrl}\n onChange={(e) => setBaseUrl(e.target.value)}\n placeholder=\"https://agents.example.com\"\n className=\"flex-1 min-w-[200px] font-mono text-xs\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => void onDiscoverRun()}\n disabled={!baseUrl.trim() || discoverMut.isPending}\n >\n {discoverMut.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Search className=\"h-4 w-4\" />}\n {t('agents.acp.runDiscover')}\n </Button>\n </div>\n </div>\n )}\n\n {/* Registered ACP agents */}\n {agents.length === 0 ? (\n <div className=\"px-4 py-6\">\n <EmptyState\n icon={<Network />}\n title={t('agents.acp.empty.title')}\n description={t('agents.acp.empty.description')}\n />\n </div>\n ) : (\n <ul className=\"divide-y divide-border\">\n {agents.map((a, i) => (\n <AcpRow\n key={a.name}\n agent={a}\n onToggle={(on) => onToggleRow(i, on)}\n onTest={() => void onTestRow(i)}\n onRemove={() => onRemoveRow(i)}\n testing={testMut.isPending}\n />\n ))}\n </ul>\n )}\n\n {/* Add-agent form */}\n <div className=\"border-t border-border px-4 py-3\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wide text-text-dim\">\n {t('agents.acp.addTitle')}\n </h3>\n <div className=\"mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <Field label={t('agents.acp.name')} hint={t('agents.acp.nameHint')}>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"my-agent\"\n aria-invalid={name.length > 0 && !nameValid}\n />\n </Field>\n <Field label={t('agents.acp.aliases')} hint={t('agents.acp.aliasesHint')}>\n <Input\n value={aliasesText}\n onChange={(e) => setAliasesText(e.target.value)}\n placeholder=\"ma, agent1\"\n />\n </Field>\n <Field label={t('agents.acp.endpoint')} hint={t('agents.acp.endpointHint')}>\n <Input\n value={endpoint}\n onChange={(e) => setEndpoint(e.target.value)}\n placeholder=\"https://example.com/agents/weather\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field label={t('agents.acp.authType')}>\n <Select value={authType} onValueChange={(v) => setAuthType(v as ACPAuthType)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {AUTH_TYPES.map((a) => (\n <SelectItem key={a} value={a}>{t(`agents.acp.auth.${a}`)}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n {authType !== 'none' && (\n <Field label={t('agents.acp.token')} className=\"sm:col-span-2\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder={t('agents.acp.tokenPlaceholder')}\n autoComplete=\"new-password\"\n />\n </Field>\n )}\n </div>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => void onTestNew()}\n disabled={!canTestNew || testMut.isPending}\n >\n {testMut.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Search className=\"h-4 w-4\" />}\n {t('agents.acp.testBtn')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onAdd()}\n disabled={!canAdd}\n >\n <Plus className=\"h-4 w-4\" />\n {t('agents.acp.addBtn')}\n </Button>\n {dup && (\n <span className=\"self-center text-xs text-warning\">\n {t('agents.acp.dupName')}\n </span>\n )}\n </div>\n </div>\n </section>\n )\n}\n\ninterface AcpRowProps {\n agent: ACPAgentConfig\n onToggle: (on: boolean) => void\n onTest: () => void\n onRemove: () => void\n testing: boolean\n}\n\nfunction AcpRow({ agent, onToggle, onTest, onRemove, testing }: AcpRowProps): JSX.Element {\n const { t } = useTranslation('settings')\n const isOn = agent.enabled !== false\n const authType = agent.auth?.type ?? 'none'\n return (\n <li className=\"flex flex-wrap items-center gap-3 px-4 py-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-text\">{agent.name}</span>\n <Badge variant=\"outline\" className=\"text-[10px] uppercase\">\n {t(`agents.acp.auth.${authType}`)}\n </Badge>\n {agent.aliases && agent.aliases.length > 0 && (\n <span className=\"text-xs text-text-muted font-mono\">\n {agent.aliases.map((a) => `/${a}`).join(', ')}\n </span>\n )}\n </div>\n <p className=\"mt-0.5 truncate font-mono text-xs text-text-dim\" title={agent.endpoint}>\n {agent.endpoint}\n </p>\n </div>\n <label className=\"flex items-center gap-1.5 text-xs text-text-dim\">\n <input\n type=\"checkbox\"\n checked={isOn}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n {isOn ? t('agents.acp.on') : t('agents.acp.off')}\n </label>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onTest}\n disabled={testing}\n aria-label={t('agents.acp.testBtn')}\n >\n {testing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Search className=\"h-4 w-4\" />}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onRemove}\n aria-label={t('agents.acp.removeBtn')}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </li>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n className?: string\n children: React.ReactNode\n}\n\nfunction Field({ label, hint, className, children }: FieldProps): JSX.Element {\n return (\n <div className={cn('flex flex-col gap-1', className)}>\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/** Tokens look like `ab****yz` from the masked GET response. We\n * shouldn't send them back unchanged for test (the backend would\n * fail auth), and we shouldn't include them in the test mutation\n * body either. Treat any string with 3+ consecutive `*` as masked. */\nfunction isMaskedToken(s: string): boolean {\n return /\\*{3,}/.test(s)\n}\n"],"names":["Bot","createLucideIcon","BUILTIN_AGENTS","AGENT_NAMES","BRIDGED_AGENT_NAMES","name","SettingsAgentsRoute","t","useTranslation","cfgQuery","useConfig","statusQuery","useAgentsStatus","updateCfg","useUpdateConfig","cfg","status","draftEnabled","setDraftEnabled","useState","draftDefault","setDraftDefault","draftAcp","setDraftAcp","useEffect","enabled","defaultAgent","acpAgents","isDirty","useMemo","enabledSame","a","defaultSame","acpSame","acpEqual","eligibleDefaults","toggleAgent","on","next","onSave","toast","err","describeError","onDiscard","updateAcp","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","info","installed","isEnabled","AgentRow","agentDisplayName","Label","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","AcpCard","Badge","X","Save","displayName","aliases","pkg","kind","onToggle","inProcess","cn","e","AUTH_TYPES","NAME_RE","b","i","x","y","xa","ya","xat","yat","agents","onChange","testMut","useTestAcp","discoverMut","useDiscoverAcp","setName","aliasesText","setAliasesText","endpoint","setEndpoint","authType","setAuthType","token","setToken","showDiscover","setShowDiscover","baseUrl","setBaseUrl","trimmedName","nameValid","dup","tokenOk","canAdd","canTestNew","clearForm","parseAliases","text","s","buildAuth","type","tok","trimmed","onAdd","onTestNew","res","onTestRow","idx","isMaskedToken","onToggleRow","onRemoveRow","_","onDiscoverRun","url","existing","incoming","Network","Search","Input","EmptyState","AcpRow","Field","Plus","agent","onTest","onRemove","testing","isOn","Trash2","label","hint","className","children"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
- import{u as b,j as e,l as j,q as C,c as m,B as f,X as k,r as E,a as N,b as q,d as w,e as $,T as I,s as M,m as v,n as R}from"./index-D7BuMEIr.js";import{r as L}from"./react-DlP5eolq.js";import{E as K}from"./empty-state-DoiBKL4l.js";import{u as O}from"./use-event-stream-I1lMFEfh.js";import{L as Q}from"./loader-circle-DO3Ni2RJ.js";import{R as _}from"./refresh-ccw-BhPAzZAa.js";function z({approval:s,onResolve:t,busy:a=!1,className:l}){const{t:n}=b("approvals"),u=B(s.ageMs),o=F(s.input,12);return e.jsxs("div",{className:m("flex flex-col gap-3","rounded-md border bg-surface p-4",s.ageMs>9e4?"border-danger/60":"border-border",l),children:[e.jsxs("header",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s.toolName}),e.jsx(j,{variant:"secondary",children:s.platform}),s.autoAllow&&e.jsx(j,{variant:"info",title:n("autoAllowedTitle"),children:n("autoAllowedTag")}),e.jsxs("span",{className:"ml-auto inline-flex items-center gap-1 text-xs text-text-dim",children:[s.ageMs>9e4&&e.jsx(C,{className:"h-3 w-3 text-danger"}),u]})]}),e.jsxs("div",{className:"flex flex-col gap-1 text-xs",children:[e.jsx("div",{className:"text-text-muted",children:n("threadLabel")}),e.jsx("code",{className:"rounded bg-surface-2 px-1.5 py-0.5 font-mono text-xs text-text-dim line-clamp-1",title:s.threadId,children:s.threadId})]}),e.jsx("pre",{className:m("max-h-48 overflow-auto rounded-md","bg-surface-2 px-2 py-2","font-mono text-xs leading-5 text-text-dim","whitespace-pre-wrap break-words"),children:o}),e.jsxs("footer",{className:"flex justify-end gap-2",children:[e.jsxs(f,{type:"button",variant:"destructive",size:"sm",disabled:a,onClick:()=>void t("deny"),children:[e.jsx(k,{className:"h-4 w-4"}),n("deny")]}),e.jsxs(f,{type:"button",size:"sm",disabled:a,onClick:()=>void t("allow"),children:[e.jsx(E,{className:"h-4 w-4"}),n("allow")]})]})]})}function B(s){if(s<1e3)return`${s}ms`;const t=Math.floor(s/1e3);if(t<60)return`${t}s`;const a=Math.floor(t/60);return a<60?`${a}m`:`${Math.floor(a/60)}h`}function F(s,t){let a;try{a=JSON.stringify(s,null,2)}catch{a=String(s)}const l=a.split(`
1
+ import{u as b,j as e,l as j,q as C,c as m,B as f,X as k,r as E,a as N,b as q,d as w,e as $,T as I,s as M,m as v,n as R}from"./index-BIBWEKxu.js";import{r as L}from"./react-DlP5eolq.js";import{E as K}from"./empty-state-BRsb30K6.js";import{u as O}from"./use-event-stream-I1lMFEfh.js";import{L as Q}from"./loader-circle-BQkLEJZw.js";import{R as _}from"./refresh-ccw-CFPE6zD1.js";function z({approval:s,onResolve:t,busy:a=!1,className:l}){const{t:n}=b("approvals"),u=B(s.ageMs),o=F(s.input,12);return e.jsxs("div",{className:m("flex flex-col gap-3","rounded-md border bg-surface p-4",s.ageMs>9e4?"border-danger/60":"border-border",l),children:[e.jsxs("header",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s.toolName}),e.jsx(j,{variant:"secondary",children:s.platform}),s.autoAllow&&e.jsx(j,{variant:"info",title:n("autoAllowedTitle"),children:n("autoAllowedTag")}),e.jsxs("span",{className:"ml-auto inline-flex items-center gap-1 text-xs text-text-dim",children:[s.ageMs>9e4&&e.jsx(C,{className:"h-3 w-3 text-danger"}),u]})]}),e.jsxs("div",{className:"flex flex-col gap-1 text-xs",children:[e.jsx("div",{className:"text-text-muted",children:n("threadLabel")}),e.jsx("code",{className:"rounded bg-surface-2 px-1.5 py-0.5 font-mono text-xs text-text-dim line-clamp-1",title:s.threadId,children:s.threadId})]}),e.jsx("pre",{className:m("max-h-48 overflow-auto rounded-md","bg-surface-2 px-2 py-2","font-mono text-xs leading-5 text-text-dim","whitespace-pre-wrap break-words"),children:o}),e.jsxs("footer",{className:"flex justify-end gap-2",children:[e.jsxs(f,{type:"button",variant:"destructive",size:"sm",disabled:a,onClick:()=>void t("deny"),children:[e.jsx(k,{className:"h-4 w-4"}),n("deny")]}),e.jsxs(f,{type:"button",size:"sm",disabled:a,onClick:()=>void t("allow"),children:[e.jsx(E,{className:"h-4 w-4"}),n("allow")]})]})]})}function B(s){if(s<1e3)return`${s}ms`;const t=Math.floor(s/1e3);if(t<60)return`${t}s`;const a=Math.floor(t/60);return a<60?`${a}m`:`${Math.floor(a/60)}h`}function F(s,t){let a;try{a=JSON.stringify(s,null,2)}catch{a=String(s)}const l=a.split(`
2
2
  `);return l.length<=t?a:`${l.slice(0,t).join(`
3
3
  `)}
4
4
  … +${l.length-t} more`}const p={all:["approvals"],list:["approvals","list"]};function D(){return q({queryKey:p.list,queryFn:()=>w.listApprovals()})}function J(){const s=N();return()=>s.invalidateQueries({queryKey:p.all})}function P(){const s=N();return $({mutationFn:({reqId:t,body:a})=>w.resolveApproval(t,a),onSuccess:()=>s.invalidateQueries({queryKey:p.all})})}const U={connected:"text-success",connecting:"text-text-dim",reconnecting:"text-warning",closed:"text-text-muted"};function se(){const{t:s}=b(["approvals","common"]),t=J(),{data:a,isLoading:l,isFetching:n,refetch:u}=D(),o=a?.pending??[],i=a?.metrics,h=O({approval:()=>t()}),y=P(),[A,g]=L.useState(null);async function S(r,c){g(r);try{await y.mutateAsync({reqId:r,body:{behavior:c}}),v.success(s(c==="allow"?"toast.allowedShort":"toast.deniedShort"))}catch(d){const{message:T}=R(d,s);v.error(T)}finally{g(d=>d===r?null:d)}}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(I,{}),e.jsxs("main",{className:"mx-auto flex w-full max-w-5xl flex-1 flex-col gap-4 px-3 py-4 sm:px-4 pb-safe",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("pageTitle")}),e.jsx("span",{className:m("text-xs font-medium tabular-nums",U[h]),children:s(`live.${h}`)}),e.jsxs(f,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>u(),disabled:n,"aria-label":s("actions.refresh",{ns:"common"}),children:[n?e.jsx(Q,{className:"h-4 w-4 animate-spin"}):e.jsx(_,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("subtitle")})]}),i&&e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[e.jsx(x,{label:s("stats.pending"),value:i.pending,tone:"info"}),e.jsx(x,{label:s("stats.totalAllowed"),value:i.totalAllowed,tone:"success"}),e.jsx(x,{label:s("stats.totalDenied"),value:i.totalDenied,tone:"danger"}),e.jsx(x,{label:s("stats.totalTimedOut"),value:i.totalTimedOut,tone:"warning"})]}),l?e.jsx(X,{}):o.length===0?e.jsx(K,{icon:e.jsx(M,{}),title:s("empty.title"),description:s("empty.description")}):e.jsx("div",{className:"flex flex-col gap-3",children:o.map(r=>e.jsx(z,{approval:r,busy:A===r.reqId,onResolve:c=>S(r.reqId,c)},r.reqId))})]})]})}const V={info:"border-info/30 text-info",success:"border-success/30 text-success",warning:"border-warning/30 text-warning",danger:"border-danger/30 text-danger"};function x({label:s,value:t,tone:a}){return e.jsxs("div",{className:m("rounded-md border bg-surface px-3 py-2",V[a]),children:[e.jsx("div",{className:"text-xs uppercase tracking-wide text-text-dim",children:s}),e.jsx("div",{className:"text-2xl font-semibold tabular-nums",children:t})]})}function X(){return e.jsx("div",{className:"flex flex-col gap-3",children:Array.from({length:2}).map((s,t)=>e.jsxs("div",{className:"flex flex-col gap-3 rounded-md border border-border bg-surface p-4",children:[e.jsx("div",{className:"h-4 w-1/3 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-3 w-1/2 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-24 w-full rounded bg-surface-2 animate-pulse"}),e.jsxs("div",{className:"ml-auto flex gap-2",children:[e.jsx("div",{className:"h-8 w-16 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-8 w-16 rounded bg-surface-2 animate-pulse"})]})]},`skel-${t}`))})}export{se as default};
5
- //# sourceMappingURL=approvals-BEPKSyrL.js.map
5
+ //# sourceMappingURL=approvals-C5jd7Wf9.js.map