agim-cli 1.2.70 → 1.2.71

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 (157) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/web/public/assets/{a2a-CzOCrC9J.js → a2a-BbtW9q1L.js} +2 -2
  3. package/dist/web/public/assets/{a2a-CzOCrC9J.js.map → a2a-BbtW9q1L.js.map} +1 -1
  4. package/dist/web/public/assets/{activity-BlasCFZq.js → activity-CJmQLZ6_.js} +2 -2
  5. package/dist/web/public/assets/{activity-BlasCFZq.js.map → activity-CJmQLZ6_.js.map} +1 -1
  6. package/dist/web/public/assets/{admins-CQOShfRl.js → admins-BJP9koxS.js} +2 -2
  7. package/dist/web/public/assets/{admins-CQOShfRl.js.map → admins-BJP9koxS.js.map} +1 -1
  8. package/dist/web/public/assets/{agents-UstP4DoK.js → agents-DC0XFC6e.js} +2 -2
  9. package/dist/web/public/assets/{agents-UstP4DoK.js.map → agents-DC0XFC6e.js.map} +1 -1
  10. package/dist/web/public/assets/{approvals-BvfcdYLU.js → approvals-DiPkpPN4.js} +2 -2
  11. package/dist/web/public/assets/{approvals-BvfcdYLU.js.map → approvals-DiPkpPN4.js.map} +1 -1
  12. package/dist/web/public/assets/{asks-DAJ1edZu.js → asks-CG9chQgT.js} +2 -2
  13. package/dist/web/public/assets/{asks-DAJ1edZu.js.map → asks-CG9chQgT.js.map} +1 -1
  14. package/dist/web/public/assets/{audit-CAOadRDl.js → audit-B40mxlW1.js} +2 -2
  15. package/dist/web/public/assets/{audit-CAOadRDl.js.map → audit-B40mxlW1.js.map} +1 -1
  16. package/dist/web/public/assets/{bell-BuZoWBMK.js → bell-BC8Jqt9f.js} +2 -2
  17. package/dist/web/public/assets/{bell-BuZoWBMK.js.map → bell-BC8Jqt9f.js.map} +1 -1
  18. package/dist/web/public/assets/{bgjobs-C5jF3BWG.js → bgjobs-ClrQ2jzx.js} +2 -2
  19. package/dist/web/public/assets/{bgjobs-C5jF3BWG.js.map → bgjobs-ClrQ2jzx.js.map} +1 -1
  20. package/dist/web/public/assets/{brain-DaFGi4GZ.js → brain-BBx7RF2j.js} +2 -2
  21. package/dist/web/public/assets/{brain-DaFGi4GZ.js.map → brain-BBx7RF2j.js.map} +1 -1
  22. package/dist/web/public/assets/{briefcase-BXKiYFAz.js → briefcase-TihsRkSy.js} +2 -2
  23. package/dist/web/public/assets/{briefcase-BXKiYFAz.js.map → briefcase-TihsRkSy.js.map} +1 -1
  24. package/dist/web/public/assets/{chevron-right-Bi2RmsHt.js → chevron-right-DTLZLXDP.js} +2 -2
  25. package/dist/web/public/assets/{chevron-right-Bi2RmsHt.js.map → chevron-right-DTLZLXDP.js.map} +1 -1
  26. package/dist/web/public/assets/{circle-check-NYJSuZMK.js → circle-check-EHM2OMD5.js} +2 -2
  27. package/dist/web/public/assets/{circle-check-NYJSuZMK.js.map → circle-check-EHM2OMD5.js.map} +1 -1
  28. package/dist/web/public/assets/{circle-check-big-wxQV9Apf.js → circle-check-big-DJXNAZ3u.js} +2 -2
  29. package/dist/web/public/assets/{circle-check-big-wxQV9Apf.js.map → circle-check-big-DJXNAZ3u.js.map} +1 -1
  30. package/dist/web/public/assets/{circle-x-D7EpTdJQ.js → circle-x-DsaHSb_C.js} +2 -2
  31. package/dist/web/public/assets/{circle-x-D7EpTdJQ.js.map → circle-x-DsaHSb_C.js.map} +1 -1
  32. package/dist/web/public/assets/{confirm-dialog-BecM1NAT.js → confirm-dialog-DezSK6wB.js} +2 -2
  33. package/dist/web/public/assets/{confirm-dialog-BecM1NAT.js.map → confirm-dialog-DezSK6wB.js.map} +1 -1
  34. package/dist/web/public/assets/{data-table-Bh5TFhXw.js → data-table-DdSnbgyt.js} +2 -2
  35. package/dist/web/public/assets/{data-table-Bh5TFhXw.js.map → data-table-DdSnbgyt.js.map} +1 -1
  36. package/dist/web/public/assets/{dialog-8m5Uihhi.js → dialog-45x-p0sR.js} +2 -2
  37. package/dist/web/public/assets/{dialog-8m5Uihhi.js.map → dialog-45x-p0sR.js.map} +1 -1
  38. package/dist/web/public/assets/{download-DWvNllY2.js → download-BL4jeu4M.js} +2 -2
  39. package/dist/web/public/assets/{download-DWvNllY2.js.map → download-BL4jeu4M.js.map} +1 -1
  40. package/dist/web/public/assets/{email-Cr1x3fdt.js → email-BGUO-gme.js} +2 -2
  41. package/dist/web/public/assets/{email-Cr1x3fdt.js.map → email-BGUO-gme.js.map} +1 -1
  42. package/dist/web/public/assets/{empty-state-BESUGVnV.js → empty-state-n-LfHo6N.js} +2 -2
  43. package/dist/web/public/assets/{empty-state-BESUGVnV.js.map → empty-state-n-LfHo6N.js.map} +1 -1
  44. package/dist/web/public/assets/{external-link-BwscsXby.js → external-link-CZd6ma6Y.js} +2 -2
  45. package/dist/web/public/assets/{external-link-BwscsXby.js.map → external-link-CZd6ma6Y.js.map} +1 -1
  46. package/dist/web/public/assets/{eye-C7gaSIZv.js → eye-LsErAgqh.js} +2 -2
  47. package/dist/web/public/assets/{eye-C7gaSIZv.js.map → eye-LsErAgqh.js.map} +1 -1
  48. package/dist/web/public/assets/{facts-B9hm9627.js → facts-CxZ3L_7a.js} +2 -2
  49. package/dist/web/public/assets/{facts-B9hm9627.js.map → facts-CxZ3L_7a.js.map} +1 -1
  50. package/dist/web/public/assets/{goals-D3f1Dw2M.js → goals-BjzgqVnW.js} +2 -2
  51. package/dist/web/public/assets/{goals-D3f1Dw2M.js.map → goals-BjzgqVnW.js.map} +1 -1
  52. package/dist/web/public/assets/{health-BLwrXebg.js → health-BYX5IK98.js} +2 -2
  53. package/dist/web/public/assets/{health-BLwrXebg.js.map → health-BYX5IK98.js.map} +1 -1
  54. package/dist/web/public/assets/{heart-pulse-BtioxtCU.js → heart-pulse-D_xUK9r0.js} +2 -2
  55. package/dist/web/public/assets/{heart-pulse-BtioxtCU.js.map → heart-pulse-D_xUK9r0.js.map} +1 -1
  56. package/dist/web/public/assets/{heartbeat-BHPx1z33.js → heartbeat-DnSegIYS.js} +2 -2
  57. package/dist/web/public/assets/{heartbeat-BHPx1z33.js.map → heartbeat-DnSegIYS.js.map} +1 -1
  58. package/dist/web/public/assets/{hot-CuaGMYzV.js → hot-C5TxCTVL.js} +2 -2
  59. package/dist/web/public/assets/{hot-CuaGMYzV.js.map → hot-C5TxCTVL.js.map} +1 -1
  60. package/dist/web/public/assets/{index-Cc8hxJWT.js → index-CbWhcThC.js} +3 -3
  61. package/dist/web/public/assets/{index-Cc8hxJWT.js.map → index-CbWhcThC.js.map} +1 -1
  62. package/dist/web/public/assets/{installed-D_BoGzel.js → installed-D_Hjs7uj.js} +2 -2
  63. package/dist/web/public/assets/{installed-D_BoGzel.js.map → installed-D_Hjs7uj.js.map} +1 -1
  64. package/dist/web/public/assets/{jobs-D0eeD9ye.js → jobs-DWtjJIAD.js} +2 -2
  65. package/dist/web/public/assets/{jobs-D0eeD9ye.js.map → jobs-DWtjJIAD.js.map} +1 -1
  66. package/dist/web/public/assets/{layout-DPxfAgBW.js → layout-54-PzplU.js} +2 -2
  67. package/dist/web/public/assets/{layout-DPxfAgBW.js.map → layout-54-PzplU.js.map} +1 -1
  68. package/dist/web/public/assets/{layout-bRkGiGF-.js → layout-BLK9XuQB.js} +2 -2
  69. package/dist/web/public/assets/{layout-bRkGiGF-.js.map → layout-BLK9XuQB.js.map} +1 -1
  70. package/dist/web/public/assets/{layout-CvRW3Bn_.js → layout-CTyy2kgf.js} +2 -2
  71. package/dist/web/public/assets/{layout-CvRW3Bn_.js.map → layout-CTyy2kgf.js.map} +1 -1
  72. package/dist/web/public/assets/{layout-Wl7Pr1-s.js → layout-CvvZcaiO.js} +2 -2
  73. package/dist/web/public/assets/{layout-Wl7Pr1-s.js.map → layout-CvvZcaiO.js.map} +1 -1
  74. package/dist/web/public/assets/{layout-CQe9ncYF.js → layout-D1-LnIA_.js} +2 -2
  75. package/dist/web/public/assets/{layout-CQe9ncYF.js.map → layout-D1-LnIA_.js.map} +1 -1
  76. package/dist/web/public/assets/{llm-CJGxq9Ru.js → llm-D59Tv6ne.js} +2 -2
  77. package/dist/web/public/assets/{llm-CJGxq9Ru.js.map → llm-D59Tv6ne.js.map} +1 -1
  78. package/dist/web/public/assets/{loader-circle-D4WrM89N.js → loader-circle-U64eR4W2.js} +2 -2
  79. package/dist/web/public/assets/{loader-circle-D4WrM89N.js.map → loader-circle-U64eR4W2.js.map} +1 -1
  80. package/dist/web/public/assets/{map-pin-DGSzw_UH.js → map-pin-D08YlPs3.js} +2 -2
  81. package/dist/web/public/assets/{map-pin-DGSzw_UH.js.map → map-pin-D08YlPs3.js.map} +1 -1
  82. package/dist/web/public/assets/{mcp-DYp7QbX8.js → mcp-Br9fBIWu.js} +2 -2
  83. package/dist/web/public/assets/{mcp-DYp7QbX8.js.map → mcp-Br9fBIWu.js.map} +1 -1
  84. package/dist/web/public/assets/{memos-Dz0jD4R5.js → memos-nZKV3SLq.js} +2 -2
  85. package/dist/web/public/assets/{memos-Dz0jD4R5.js.map → memos-nZKV3SLq.js.map} +1 -1
  86. package/dist/web/public/assets/messengers-C8ss4WVx.js +7 -0
  87. package/dist/web/public/assets/messengers-C8ss4WVx.js.map +1 -0
  88. package/dist/web/public/assets/{native-agent-ChgK3ceB.js → native-agent-BiiYK91m.js} +2 -2
  89. package/dist/web/public/assets/{native-agent-ChgK3ceB.js.map → native-agent-BiiYK91m.js.map} +1 -1
  90. package/dist/web/public/assets/{network-D8uD8vuE.js → network-D9rhTHz5.js} +2 -2
  91. package/dist/web/public/assets/{network-D8uD8vuE.js.map → network-D9rhTHz5.js.map} +1 -1
  92. package/dist/web/public/assets/{outbox-CRcmD2P1.js → outbox-BS_gla4W.js} +2 -2
  93. package/dist/web/public/assets/{outbox-CRcmD2P1.js.map → outbox-BS_gla4W.js.map} +1 -1
  94. package/dist/web/public/assets/{pagination-BK8pXuOn.js → pagination-CSuYj-hv.js} +2 -2
  95. package/dist/web/public/assets/{pagination-BK8pXuOn.js.map → pagination-CSuYj-hv.js.map} +1 -1
  96. package/dist/web/public/assets/{persona-Dk4Y24TF.js → persona-BByKd8Zd.js} +2 -2
  97. package/dist/web/public/assets/{persona-Dk4Y24TF.js.map → persona-BByKd8Zd.js.map} +1 -1
  98. package/dist/web/public/assets/{play-BAwY0kZY.js → play-B_11jKz_.js} +2 -2
  99. package/dist/web/public/assets/{play-BAwY0kZY.js.map → play-B_11jKz_.js.map} +1 -1
  100. package/dist/web/public/assets/{plus-Qg7H_hBC.js → plus-BxhCliGV.js} +2 -2
  101. package/dist/web/public/assets/{plus-Qg7H_hBC.js.map → plus-BxhCliGV.js.map} +1 -1
  102. package/dist/web/public/assets/{policy-bd1_X4KT.js → policy-CHbUM0MU.js} +2 -2
  103. package/dist/web/public/assets/{policy-bd1_X4KT.js.map → policy-CHbUM0MU.js.map} +1 -1
  104. package/dist/web/public/assets/{refresh-ccw-DjeeSzbz.js → refresh-ccw-BKw5Agez.js} +2 -2
  105. package/dist/web/public/assets/{refresh-ccw-DjeeSzbz.js.map → refresh-ccw-BKw5Agez.js.map} +1 -1
  106. package/dist/web/public/assets/{reminders-CyNYrPCo.js → reminders-_MsAKlS7.js} +2 -2
  107. package/dist/web/public/assets/{reminders-CyNYrPCo.js.map → reminders-_MsAKlS7.js.map} +1 -1
  108. package/dist/web/public/assets/{save-B6_ssx8c.js → save-DznSJZGN.js} +2 -2
  109. package/dist/web/public/assets/{save-B6_ssx8c.js.map → save-DznSJZGN.js.map} +1 -1
  110. package/dist/web/public/assets/{schedules-DVxENvba.js → schedules-CiRZXonB.js} +2 -2
  111. package/dist/web/public/assets/{schedules-DVxENvba.js.map → schedules-CiRZXonB.js.map} +1 -1
  112. package/dist/web/public/assets/{search-BJwBDf0Q.js → search-CXr_r7L8.js} +2 -2
  113. package/dist/web/public/assets/{search-BJwBDf0Q.js.map → search-CXr_r7L8.js.map} +1 -1
  114. package/dist/web/public/assets/{security-Co1823U6.js → security-CjySIq-k.js} +2 -2
  115. package/dist/web/public/assets/{security-Co1823U6.js.map → security-CjySIq-k.js.map} +1 -1
  116. package/dist/web/public/assets/{service-BJ2kE446.js → service-LXlgJooI.js} +2 -2
  117. package/dist/web/public/assets/{service-BJ2kE446.js.map → service-LXlgJooI.js.map} +1 -1
  118. package/dist/web/public/assets/{status-badge-3nnQTZXz.js → status-badge-BsPU9NHK.js} +2 -2
  119. package/dist/web/public/assets/{status-badge-3nnQTZXz.js.map → status-badge-BsPU9NHK.js.map} +1 -1
  120. package/dist/web/public/assets/{subtasks-BgHm-5dB.js → subtasks-DM8tJkC7.js} +2 -2
  121. package/dist/web/public/assets/{subtasks-BgHm-5dB.js.map → subtasks-DM8tJkC7.js.map} +1 -1
  122. package/dist/web/public/assets/{table-CNXI0HD-.js → table-CQbO75bn.js} +2 -2
  123. package/dist/web/public/assets/{table-CNXI0HD-.js.map → table-CQbO75bn.js.map} +1 -1
  124. package/dist/web/public/assets/{topn-C1PyG8Ns.js → topn-CaCYQ1NI.js} +2 -2
  125. package/dist/web/public/assets/{topn-C1PyG8Ns.js.map → topn-CaCYQ1NI.js.map} +1 -1
  126. package/dist/web/public/assets/{trash-2-CjkttCxU.js → trash-2-CdgBbY1Z.js} +2 -2
  127. package/dist/web/public/assets/{trash-2-CjkttCxU.js.map → trash-2-CdgBbY1Z.js.map} +1 -1
  128. package/dist/web/public/assets/{use-background-tasks-CLf78_yn.js → use-background-tasks-DUDxcbbl.js} +2 -2
  129. package/dist/web/public/assets/{use-background-tasks-CLf78_yn.js.map → use-background-tasks-DUDxcbbl.js.map} +1 -1
  130. package/dist/web/public/assets/{use-llm-admin-CzL0zcIi.js → use-llm-admin-Bpy7nDu-.js} +2 -2
  131. package/dist/web/public/assets/{use-llm-admin-CzL0zcIi.js.map → use-llm-admin-Bpy7nDu-.js.map} +1 -1
  132. package/dist/web/public/assets/{use-memory-DrJjdPYo.js → use-memory-B00AYXi0.js} +2 -2
  133. package/dist/web/public/assets/{use-memory-DrJjdPYo.js.map → use-memory-B00AYXi0.js.map} +1 -1
  134. package/dist/web/public/assets/{use-observability-1j7-vMy5.js → use-observability-7ETfQyEP.js} +2 -2
  135. package/dist/web/public/assets/{use-observability-1j7-vMy5.js.map → use-observability-7ETfQyEP.js.map} +1 -1
  136. package/dist/web/public/assets/{use-settings-BLcy2mrv.js → use-settings-tzqyzhw3.js} +2 -2
  137. package/dist/web/public/assets/{use-settings-BLcy2mrv.js.map → use-settings-tzqyzhw3.js.map} +1 -1
  138. package/dist/web/public/assets/{use-workspace-BLXvLTDF.js → use-workspace-B5gbK4s5.js} +2 -2
  139. package/dist/web/public/assets/{use-workspace-BLXvLTDF.js.map → use-workspace-B5gbK4s5.js.map} +1 -1
  140. package/dist/web/public/assets/{useQuery-xB5dCeu-.js → useQuery-wnQifGeZ.js} +2 -2
  141. package/dist/web/public/assets/{useQuery-xB5dCeu-.js.map → useQuery-wnQifGeZ.js.map} +1 -1
  142. package/dist/web/public/assets/{vector-EOjQsr7r.js → vector-or1-MfRX.js} +2 -2
  143. package/dist/web/public/assets/{vector-EOjQsr7r.js.map → vector-or1-MfRX.js.map} +1 -1
  144. package/dist/web/public/assets/{viewer-D_I2ikzf.js → viewer-C0f5b5eT.js} +2 -2
  145. package/dist/web/public/assets/{viewer-D_I2ikzf.js.map → viewer-C0f5b5eT.js.map} +1 -1
  146. package/dist/web/public/assets/{workspace-lMCzYJAB.js → workspace-CGE46-O2.js} +2 -2
  147. package/dist/web/public/assets/{workspace-lMCzYJAB.js.map → workspace-CGE46-O2.js.map} +1 -1
  148. package/dist/web/public/assets/{workspaces-Ciyjiowm.js → workspaces-CqDIcIXo.js} +2 -2
  149. package/dist/web/public/assets/{workspaces-Ciyjiowm.js.map → workspaces-CqDIcIXo.js.map} +1 -1
  150. package/dist/web/public/assets/{x-DP0VnoG9.js → x-DBZPbfu3.js} +2 -2
  151. package/dist/web/public/assets/{x-DP0VnoG9.js.map → x-DBZPbfu3.js.map} +1 -1
  152. package/dist/web/public/index.html +1 -1
  153. package/dist/web/server.js +5 -0
  154. package/dist/web/server.js.map +1 -1
  155. package/package.json +1 -1
  156. package/dist/web/public/assets/messengers-Bewhby2_.js +0 -7
  157. package/dist/web/public/assets/messengers-Bewhby2_.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agim-cli",
3
- "version": "1.2.70",
3
+ "version": "1.2.71",
4
4
  "description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Email to Claude Code / Codex / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +0,0 @@
1
- import{y as A,ad as w,U as e,c as f,B as F,a3 as y,E as q,L as P,I as C}from"./index-Cc8hxJWT.js";import{e as p}from"./react-C9F3QeMB.js";import{D,a as E,d as R,e as $,b as M}from"./dialog-8m5Uihhi.js";import{b as Q,m as z,i as O,q as B}from"./use-settings-BLcy2mrv.js";import{L as S}from"./loader-circle-D4WrM89N.js";import{R as L}from"./refresh-ccw-DjeeSzbz.js";import{X as T}from"./x-DP0VnoG9.js";import{S as H}from"./save-B6_ssx8c.js";import"./useQuery-xB5dCeu-.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 W=A("QrCode",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]]);function N(s){const i=new Set(s?.messengers??[]);return{"wechat-ilink":{enabled:i.has("wechat-ilink")},telegram:{enabled:i.has("telegram"),telegram:{...s?.telegram??{}}},feishu:{enabled:i.has("feishu"),feishu:{...s?.feishu??{}}},dingtalk:{enabled:i.has("dingtalk"),dingtalk:{...s?.dingtalk??{}}},discord:{enabled:i.has("discord"),discord:{...s?.discord??{}}}}}function J(s,i){const n=[];for(const o of Object.keys(s))s[o].enabled&&n.push(o);const a={messengers:n,...Object.fromEntries(Object.entries(i).filter(([o])=>!["messengers","telegram","feishu","dingtalk","discord"].includes(o)))};return s.telegram.enabled&&s.telegram.telegram&&(a.telegram=s.telegram.telegram),s.feishu.enabled&&s.feishu.feishu&&(a.feishu=s.feishu.feishu),s.dingtalk.enabled&&s.dingtalk.dingtalk&&(a.dingtalk=s.dingtalk.dingtalk),s.discord.enabled&&s.discord.discord&&(a.discord=s.discord.discord),a}function le(){const{t:s}=w(["settings","common"]),i=Q(),n=z(),[a,o]=p.useState(()=>N(i.data)),[g,h]=p.useState(!1);p.useEffect(()=>{g||i.data&&(o(N(i.data)),h(!0))},[i.data,g]);const m=i.data,t=p.useMemo(()=>m?JSON.stringify(N(m))!==JSON.stringify(a):!1,[m,a]),[r,c]=p.useState(!1);function d(l,j){o(I=>({...I,[l]:{...I[l],...j}}))}async function x(){if(m)try{await n.mutateAsync(J(a,m)),y.success(s("messengers.savedToast")),h(!1)}catch(l){y.error(q(l,s).message)}}function b(){m&&o(N(m))}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("messengers.title")}),e.jsxs(f,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>i.refetch(),disabled:i.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[i.isFetching?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(L,{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("messengers.subtitle")})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:t?e.jsxs(e.Fragment,{children:[e.jsx(F,{variant:"info",children:s("messengers.dirtyHint")}),e.jsxs(f,{type:"button",variant:"secondary",size:"sm",onClick:b,disabled:n.isPending,children:[e.jsx(T,{className:"h-4 w-4"}),s("messengers.discardAll")]}),e.jsxs(f,{type:"button",size:"sm",onClick:()=>void x(),disabled:n.isPending,children:[n.isPending?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(H,{className:"h-4 w-4"}),n.isPending?s("messengers.saving"):s("messengers.saveAll")]})]}):e.jsx("span",{className:"text-xs text-text-muted",children:s("env.noChanges")})}),i.isLoading?e.jsx("div",{className:"h-96 rounded-md bg-surface-2 animate-pulse"}):m?e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(v,{slot:"wechat-ilink",label:s("messengers.platform.wechat"),hint:s("messengers.hint.wechat"),enabled:a["wechat-ilink"].enabled,onToggle:l=>d("wechat-ilink",{enabled:l}),children:e.jsxs(f,{type:"button",variant:"secondary",size:"sm",onClick:()=>c(!0),children:[e.jsx(W,{className:"h-4 w-4"}),s("messengers.scanQr")]})}),m.features?.globalIm?e.jsxs(v,{slot:"telegram",label:s("messengers.platform.telegram"),hint:s("messengers.hint.telegram"),enabled:a.telegram.enabled,onToggle:l=>d("telegram",{enabled:l}),children:[e.jsx(u,{id:"tg-token",label:s("messengers.fields.botToken"),value:a.telegram.telegram?.botToken??"",type:"password",onChange:l=>d("telegram",{telegram:{...a.telegram.telegram,botToken:l}})}),e.jsx(u,{id:"tg-channel",label:s("messengers.fields.channelId"),value:a.telegram.telegram?.channelId??"",onChange:l=>d("telegram",{telegram:{...a.telegram.telegram,channelId:l}})})]}):null,e.jsxs(v,{slot:"feishu",label:s("messengers.platform.feishu"),hint:s("messengers.hint.feishu"),enabled:a.feishu.enabled,onToggle:l=>d("feishu",{enabled:l}),children:[e.jsx(u,{id:"fs-appid",label:s("messengers.fields.appId"),value:a.feishu.feishu?.appId??"",onChange:l=>d("feishu",{feishu:{...a.feishu.feishu,appId:l}})}),e.jsx(u,{id:"fs-secret",label:s("messengers.fields.appSecret"),value:a.feishu.feishu?.appSecret??"",type:"password",onChange:l=>d("feishu",{feishu:{...a.feishu.feishu,appSecret:l}})}),e.jsx(u,{id:"fs-channel",label:s("messengers.fields.channelId"),value:a.feishu.feishu?.channelId??"",onChange:l=>d("feishu",{feishu:{...a.feishu.feishu,channelId:l}})})]}),e.jsxs(v,{slot:"dingtalk",label:s("messengers.platform.dingtalk"),hint:s("messengers.hint.dingtalk"),enabled:a.dingtalk.enabled,onToggle:l=>d("dingtalk",{enabled:l}),children:[e.jsx(u,{id:"dt-cid",label:s("messengers.fields.clientId"),value:a.dingtalk.dingtalk?.clientId??"",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,clientId:l}})}),e.jsx(u,{id:"dt-secret",label:s("messengers.fields.clientSecret"),value:a.dingtalk.dingtalk?.clientSecret??"",type:"password",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,clientSecret:l}})}),e.jsx(u,{id:"dt-channel",label:s("messengers.fields.channelId"),value:a.dingtalk.dingtalk?.channelId??"",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,channelId:l}})}),e.jsx(k,{id:"dt-dm-policy",label:s("messengers.dingtalk.dmPolicy"),value:a.dingtalk.dingtalk?.dmPolicy??"open",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,dmPolicy:l}}),options:[{value:"open",label:s("messengers.dingtalk.policy.open")},{value:"pairing",label:s("messengers.dingtalk.policy.pairing")},{value:"allowlist",label:s("messengers.dingtalk.policy.allowlist")}]}),e.jsx(k,{id:"dt-group-policy",label:s("messengers.dingtalk.groupPolicy"),value:a.dingtalk.dingtalk?.groupPolicy??"open",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,groupPolicy:l}}),options:[{value:"open",label:s("messengers.dingtalk.policy.open")},{value:"allowlist",label:s("messengers.dingtalk.policy.allowlist")},{value:"disabled",label:s("messengers.dingtalk.policy.disabled")}]}),e.jsx(u,{id:"dt-allow-from",label:s("messengers.dingtalk.allowFrom"),value:(a.dingtalk.dingtalk?.allowFrom??[]).join(","),onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,allowFrom:l.split(",").map(j=>j.trim()).filter(Boolean)}})}),e.jsx(u,{id:"dt-group-allow-from",label:s("messengers.dingtalk.groupAllowFrom"),value:(a.dingtalk.dingtalk?.groupAllowFrom??[]).join(","),onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,groupAllowFrom:l.split(",").map(j=>j.trim()).filter(Boolean)}})}),e.jsx(k,{id:"dt-ack",label:s("messengers.dingtalk.ackReaction"),value:a.dingtalk.dingtalk?.ackReaction??"off",onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,ackReaction:l}}),options:[{value:"off",label:s("messengers.dingtalk.ack.off")},{value:"emoji",label:s("messengers.dingtalk.ack.emoji")},{value:"kaomoji",label:s("messengers.dingtalk.ack.kaomoji")}]}),e.jsx(_,{accounts:a.dingtalk.dingtalk?.accounts??{},onChange:l=>d("dingtalk",{dingtalk:{...a.dingtalk.dingtalk,accounts:l}})})]}),m.features?.globalIm?e.jsxs(v,{slot:"discord",label:s("messengers.platform.discord"),hint:s("messengers.hint.discord"),enabled:a.discord.enabled,onToggle:l=>d("discord",{enabled:l}),children:[e.jsx(u,{id:"dc-token",label:s("messengers.fields.botToken"),value:a.discord.discord?.botToken??"",type:"password",onChange:l=>d("discord",{discord:{...a.discord.discord,botToken:l}})}),e.jsx(u,{id:"dc-channel",label:s("messengers.fields.channelId"),value:a.discord.discord?.channelId??"",onChange:l=>d("discord",{discord:{...a.discord.discord,channelId:l}})})]}):null]}):null,e.jsx(U,{open:r,onOpenChange:c,onConfirmed:()=>{i.refetch(),h(!1)}})]})}function v({label:s,hint:i,enabled:n,onToggle:a,children:o}){const{t:g}=w("settings");return e.jsxs("div",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s}),e.jsx(F,{variant:n?"success":"outline",children:g(n?"messengers.enabled":"messengers.disabled")})]}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:i})]}),e.jsx("label",{className:"inline-flex items-center gap-2 text-sm",children:e.jsx("input",{type:"checkbox",checked:n,onChange:h=>a(h.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"})})]}),n&&o&&e.jsx("div",{className:"mt-3 flex flex-col gap-2",children:o})]})}function u({id:s,label:i,value:n,onChange:a,type:o="text"}){return e.jsxs("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2",children:[e.jsx(P,{htmlFor:s,className:"text-xs text-text-dim",children:i}),e.jsx(C,{id:s,type:o,value:n,onChange:g=>a(g.target.value),autoComplete:"off",className:"font-mono text-xs"})]})}function k({id:s,label:i,value:n,onChange:a,options:o}){return e.jsxs("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2",children:[e.jsx(P,{htmlFor:s,className:"text-xs text-text-dim",children:i}),e.jsx("select",{id:s,value:n,onChange:g=>a(g.target.value),className:"rounded-md border border-input bg-background px-2 py-1 text-xs",children:o.map(g=>e.jsx("option",{value:g.value,children:g.label},g.value))})]})}function U({open:s,onOpenChange:i,onConfirmed:n}){const{t:a}=w(["settings","common"]),o=O(),[g,h]=p.useState(null),[m,t]=p.useState(null),[r,c]=p.useState(null);p.useEffect(()=>{if(!s){h(null),t(null),c(null);return}let b=!0;return o.mutateAsync().then(l=>{b&&(t(l.qrImage),h(l.qrToken))}).catch(l=>{b&&c(l instanceof Error?l.message:String(l))}),()=>{b=!1}},[s]);const x=B(s?g:null).data?.status;return p.useEffect(()=>{x==="confirmed"&&(y.success(a("messengers.qr.confirmed")),n(),i(!1)),x==="expired"&&y.error(a("messengers.qr.expired"))},[x]),e.jsx(D,{open:s,onOpenChange:i,children:e.jsxs(E,{children:[e.jsxs(R,{children:[e.jsx($,{children:a("messengers.qr.title")}),e.jsx(M,{children:a("messengers.qr.description")})]}),e.jsx("div",{className:"flex flex-col items-center gap-3",children:o.isPending&&!m?e.jsxs(e.Fragment,{children:[e.jsx(S,{className:"h-8 w-8 animate-spin text-text-dim"}),e.jsx("p",{className:"text-sm text-text-dim",children:a("messengers.qr.starting")})]}):r?e.jsxs("p",{className:"text-sm text-danger",children:[a("messengers.qr.loadFailed"),": ",r]}):m?e.jsxs(e.Fragment,{children:[e.jsx("img",{src:m,alt:a("messengers.qr.title"),className:"rounded-md border border-border"}),x==="expired"?e.jsx("p",{className:"text-xs text-danger",children:a("messengers.qr.expired")}):e.jsx("p",{className:"text-xs text-text-dim",children:x?`· ${x} ·`:""})]}):null})]})})}function _({accounts:s,onChange:i}){const{t:n}=w(["settings","common"]),a=Object.entries(s),o=(t,r)=>{i({...s,[t]:{...s[t],...r}})},g=t=>{const r={...s};delete r[t],i(r)},h=(t,r)=>{if(!r||r===t)return;if(s[r]){y.error(n("messengers.dingtalk.accountRenameCollision",{id:r}));return}const c={};for(const[d,x]of Object.entries(s))c[d===t?r:d]=x;i(c)},m=()=>{let t=a.length+1,r=`account-${t}`;for(;s[r];)t+=1,r=`account-${t}`;i({...s,[r]:{enabled:!0}})};return e.jsxs("div",{className:"mt-3 border-t border-input pt-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("div",{className:"text-xs font-semibold text-text-dim",children:n("messengers.dingtalk.accountsTitle")}),e.jsxs(f,{type:"button",size:"sm",variant:"outline",onClick:m,children:["+ ",n("messengers.dingtalk.addAccount")]})]}),a.length===0?e.jsx("div",{className:"text-xs text-text-dim italic",children:n("messengers.dingtalk.accountsEmpty")}):e.jsx("div",{className:"space-y-3",children:a.map(([t,r])=>e.jsxs("div",{className:"rounded-md border border-input p-2",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx(C,{id:`acct-id-${t}`,defaultValue:t,onBlur:c=>h(t,c.target.value.trim()),className:"font-mono text-xs w-40",placeholder:"account-id"}),e.jsx(C,{id:`acct-name-${t}`,value:r.name??"",onChange:c=>o(t,{name:c.target.value}),className:"text-xs flex-1",placeholder:n("messengers.dingtalk.accountName")}),e.jsxs("label",{className:"flex items-center gap-1 text-xs",children:[e.jsx("input",{type:"checkbox",checked:r.enabled!==!1,onChange:c=>o(t,{enabled:c.target.checked})}),n("messengers.enabled")]}),e.jsx(f,{type:"button",size:"sm",variant:"ghost",onClick:()=>g(t),className:"text-danger",children:e.jsx(T,{className:"size-4"})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(u,{id:`acct-cid-${t}`,label:n("messengers.fields.clientId"),value:r.clientId??"",onChange:c=>o(t,{clientId:c})}),e.jsx(u,{id:`acct-secret-${t}`,label:n("messengers.fields.clientSecret"),value:r.clientSecret??"",type:"password",onChange:c=>o(t,{clientSecret:c})}),e.jsx(k,{id:`acct-dm-${t}`,label:n("messengers.dingtalk.dmPolicy"),value:r.dmPolicy??"open",onChange:c=>o(t,{dmPolicy:c}),options:[{value:"open",label:n("messengers.dingtalk.policy.open")},{value:"pairing",label:n("messengers.dingtalk.policy.pairing")},{value:"allowlist",label:n("messengers.dingtalk.policy.allowlist")}]}),e.jsx(k,{id:`acct-group-${t}`,label:n("messengers.dingtalk.groupPolicy"),value:r.groupPolicy??"open",onChange:c=>o(t,{groupPolicy:c}),options:[{value:"open",label:n("messengers.dingtalk.policy.open")},{value:"allowlist",label:n("messengers.dingtalk.policy.allowlist")},{value:"disabled",label:n("messengers.dingtalk.policy.disabled")}]}),e.jsx(u,{id:`acct-allow-${t}`,label:n("messengers.dingtalk.allowFrom"),value:(r.allowFrom??[]).join(","),onChange:c=>o(t,{allowFrom:c.split(",").map(d=>d.trim()).filter(Boolean)})}),e.jsx(u,{id:`acct-gallow-${t}`,label:n("messengers.dingtalk.groupAllowFrom"),value:(r.groupAllowFrom??[]).join(","),onChange:c=>o(t,{groupAllowFrom:c.split(",").map(d=>d.trim()).filter(Boolean)})}),e.jsx(k,{id:`acct-ack-${t}`,label:n("messengers.dingtalk.ackReaction"),value:r.ackReaction??"off",onChange:c=>o(t,{ackReaction:c}),options:[{value:"off",label:n("messengers.dingtalk.ack.off")},{value:"emoji",label:n("messengers.dingtalk.ack.emoji")},{value:"kaomoji",label:n("messengers.dingtalk.ack.kaomoji")}]})]})]},t))}),e.jsx("div",{className:"mt-1 text-xs text-text-dim",children:n("messengers.dingtalk.accountsHint")})]})}export{le as default};
7
- //# sourceMappingURL=messengers-Bewhby2_.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messengers-Bewhby2_.js","sources":["../../node_modules/lucide-react/dist/esm/icons/qr-code.js","../../src/routes/settings/messengers.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 QrCode = createLucideIcon(\"QrCode\", [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n]);\n\nexport { QrCode as default };\n//# sourceMappingURL=qr-code.js.map\n","/**\n * /settings/messengers — per-IM-platform connection config.\n *\n * Layout: one card per platform (WeChat / Telegram / Feishu /\n * DingTalk / Discord). Each card has:\n * * Title + hint\n * * Enable / disable toggle (reads / writes config.messengers[])\n * * When enabled, the platform's config fields (texted)\n * * For WeChat: a \"Scan QR\" button → modal with QR + 2s polling\n *\n * Save All button at the top batches every dirty platform into one\n * PUT /api/config. The discard button reverts the local draft to\n * server-side values.\n *\n * The WeChat QR flow is special: enabling WeChat requires scanning\n * a QR code (the slot in config.messengers gets added by the\n * backend on `confirmed`, so we just open the modal and re-fetch\n * config after a successful scan).\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, QrCode, RefreshCcw, Save, X } 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 Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport {\n useConfig,\n useUpdateConfig,\n useStartWechatQr,\n useWechatQrStatus,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport type { AppConfig } from '@/types/api'\n\n/** Slot names match what `config.messengers[]` contains.\n * WeChat uses 'wechat-ilink' (the iLink adapter ID). */\ntype Slot = 'wechat-ilink' | 'telegram' | 'feishu' | 'dingtalk' | 'discord'\n\ninterface PlatformDraft {\n enabled: boolean\n telegram?: { botToken?: string; channelId?: string }\n feishu?: { appId?: string; appSecret?: string; channelId?: string }\n dingtalk?: {\n clientId?: string\n clientSecret?: string\n channelId?: string\n // v1.2.37 (batch 1)\n dmPolicy?: 'open' | 'pairing' | 'allowlist'\n groupPolicy?: 'open' | 'allowlist' | 'disabled'\n allowFrom?: string[]\n groupAllowFrom?: string[]\n ackReaction?: 'off' | 'emoji' | 'kaomoji'\n // v1.2.41 (batch 4 follow-up) — full multi-account editor\n accounts?: Record<string, DingTalkAccountDraft>\n }\n discord?: { botToken?: string; channelId?: string }\n}\n\ntype Draft = Record<Slot, PlatformDraft>\n\nfunction buildDraft(cfg: AppConfig | undefined): Draft {\n const m = new Set(cfg?.messengers ?? [])\n return {\n 'wechat-ilink': { enabled: m.has('wechat-ilink') },\n telegram: { enabled: m.has('telegram'), telegram: { ...(cfg?.telegram ?? {}) } },\n feishu: { enabled: m.has('feishu'), feishu: { ...(cfg?.feishu ?? {}) } },\n dingtalk: { enabled: m.has('dingtalk'), dingtalk: { ...(cfg?.dingtalk ?? {}) } },\n discord: { enabled: m.has('discord'), discord: { ...(cfg?.discord ?? {}) } },\n }\n}\n\nfunction buildPatch(draft: Draft, cfg: AppConfig): Partial<AppConfig> {\n const messengers: string[] = []\n for (const k of Object.keys(draft) as Slot[]) if (draft[k].enabled) messengers.push(k)\n const patch: Partial<AppConfig> = {\n messengers,\n // Preserve unknown extra fields the AppConfig type permits.\n ...Object.fromEntries(\n Object.entries(cfg).filter(([k]) => ![\n 'messengers', 'telegram', 'feishu', 'dingtalk', 'discord',\n ].includes(k)),\n ),\n }\n // Only include platform blocks that are enabled. Omitting disabled\n // platforms avoids PUT /api/config merging `{}` and failing zod\n // (telegram.botToken / feishu.appSecret / discord.botToken require\n // min(1) when the key is present).\n if (draft.telegram.enabled && draft.telegram.telegram) {\n patch.telegram = draft.telegram.telegram\n }\n if (draft.feishu.enabled && draft.feishu.feishu) {\n patch.feishu = draft.feishu.feishu\n }\n if (draft.dingtalk.enabled && draft.dingtalk.dingtalk) {\n patch.dingtalk = draft.dingtalk.dingtalk\n }\n if (draft.discord.enabled && draft.discord.discord) {\n patch.discord = draft.discord.discord\n }\n return patch\n}\n\nexport default function SettingsMessengersRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const updateCfg = useUpdateConfig()\n\n const [draft, setDraft] = useState<Draft>(() => buildDraft(cfgQuery.data))\n // Sync the draft once cfg lands. We don't re-sync on every cfg\n // refetch — that would discard unsaved edits.\n const [synced, setSynced] = useState(false)\n useEffect(() => {\n if (synced) return\n if (!cfgQuery.data) return\n setDraft(buildDraft(cfgQuery.data))\n setSynced(true)\n }, [cfgQuery.data, synced])\n\n const cfg = cfgQuery.data\n const isDirty = useMemo(() => {\n if (!cfg) return false\n return JSON.stringify(buildDraft(cfg)) !== JSON.stringify(draft)\n }, [cfg, draft])\n\n // WeChat QR modal state\n const [qrOpen, setQrOpen] = useState(false)\n\n function patchSlot(slot: Slot, partial: Partial<PlatformDraft>): void {\n setDraft((prev) => ({ ...prev, [slot]: { ...prev[slot], ...partial } }))\n }\n\n async function onSave(): Promise<void> {\n if (!cfg) return\n try {\n await updateCfg.mutateAsync(buildPatch(draft, cfg))\n toast.success(t('messengers.savedToast'))\n setSynced(false) // rebuild draft from refreshed cfg on next paint\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onDiscard(): void {\n if (cfg) setDraft(buildDraft(cfg))\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('messengers.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => cfgQuery.refetch()}\n disabled={cfgQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {cfgQuery.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('messengers.subtitle')}</p>\n </header>\n\n {/* Save bar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {isDirty ? (\n <>\n <Badge variant=\"info\">{t('messengers.dirtyHint')}</Badge>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={onDiscard}\n disabled={updateCfg.isPending}\n >\n <X className=\"h-4 w-4\" />\n {t('messengers.discardAll')}\n </Button>\n <Button\n type=\"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('messengers.saving') : t('messengers.saveAll')}\n </Button>\n </>\n ) : (\n <span className=\"text-xs text-text-muted\">{t('env.noChanges')}</span>\n )}\n </div>\n\n {cfgQuery.isLoading ? (\n <div className=\"h-96 rounded-md bg-surface-2 animate-pulse\" />\n ) : !cfg ? null : (\n <div className=\"flex flex-col gap-3\">\n <PlatformCard\n slot=\"wechat-ilink\"\n label={t('messengers.platform.wechat')}\n hint={t('messengers.hint.wechat')}\n enabled={draft['wechat-ilink'].enabled}\n onToggle={(v) => patchSlot('wechat-ilink', { enabled: v })}\n >\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setQrOpen(true)}\n >\n <QrCode className=\"h-4 w-4\" />\n {t('messengers.scanQr')}\n </Button>\n </PlatformCard>\n\n {cfg.features?.globalIm ? (\n <PlatformCard\n slot=\"telegram\"\n label={t('messengers.platform.telegram')}\n hint={t('messengers.hint.telegram')}\n enabled={draft.telegram.enabled}\n onToggle={(v) => patchSlot('telegram', { enabled: v })}\n >\n <FieldRow\n id=\"tg-token\" label={t('messengers.fields.botToken')}\n value={draft.telegram.telegram?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, botToken: v } })}\n />\n <FieldRow\n id=\"tg-channel\" label={t('messengers.fields.channelId')}\n value={draft.telegram.telegram?.channelId ?? ''}\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n\n <PlatformCard\n slot=\"feishu\"\n label={t('messengers.platform.feishu')}\n hint={t('messengers.hint.feishu')}\n enabled={draft.feishu.enabled}\n onToggle={(v) => patchSlot('feishu', { enabled: v })}\n >\n <FieldRow\n id=\"fs-appid\" label={t('messengers.fields.appId')}\n value={draft.feishu.feishu?.appId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appId: v } })}\n />\n <FieldRow\n id=\"fs-secret\" label={t('messengers.fields.appSecret')}\n value={draft.feishu.feishu?.appSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appSecret: v } })}\n />\n <FieldRow\n id=\"fs-channel\" label={t('messengers.fields.channelId')}\n value={draft.feishu.feishu?.channelId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, channelId: v } })}\n />\n </PlatformCard>\n\n <PlatformCard\n slot=\"dingtalk\"\n label={t('messengers.platform.dingtalk')}\n hint={t('messengers.hint.dingtalk')}\n enabled={draft.dingtalk.enabled}\n onToggle={(v) => patchSlot('dingtalk', { enabled: v })}\n >\n <FieldRow\n id=\"dt-cid\" label={t('messengers.fields.clientId')}\n value={draft.dingtalk.dingtalk?.clientId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientId: v } })}\n />\n <FieldRow\n id=\"dt-secret\" label={t('messengers.fields.clientSecret')}\n value={draft.dingtalk.dingtalk?.clientSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientSecret: v } })}\n />\n <FieldRow\n id=\"dt-channel\" label={t('messengers.fields.channelId')}\n value={draft.dingtalk.dingtalk?.channelId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, channelId: v } })}\n />\n {/* v1.2.37 (batch 1) — access policy + ack-reaction */}\n <SelectRow<'open' | 'pairing' | 'allowlist'>\n id=\"dt-dm-policy\" label={t('messengers.dingtalk.dmPolicy')}\n value={draft.dingtalk.dingtalk?.dmPolicy ?? 'open'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, dmPolicy: v } })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'pairing', label: t('messengers.dingtalk.policy.pairing') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n ]}\n />\n <SelectRow<'open' | 'allowlist' | 'disabled'>\n id=\"dt-group-policy\" label={t('messengers.dingtalk.groupPolicy')}\n value={draft.dingtalk.dingtalk?.groupPolicy ?? 'open'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, groupPolicy: v } })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n { value: 'disabled', label: t('messengers.dingtalk.policy.disabled') },\n ]}\n />\n <FieldRow\n id=\"dt-allow-from\" label={t('messengers.dingtalk.allowFrom')}\n value={(draft.dingtalk.dingtalk?.allowFrom ?? []).join(',')}\n onChange={(v) => patchSlot('dingtalk', {\n dingtalk: {\n ...draft.dingtalk.dingtalk,\n allowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n },\n })}\n />\n <FieldRow\n id=\"dt-group-allow-from\" label={t('messengers.dingtalk.groupAllowFrom')}\n value={(draft.dingtalk.dingtalk?.groupAllowFrom ?? []).join(',')}\n onChange={(v) => patchSlot('dingtalk', {\n dingtalk: {\n ...draft.dingtalk.dingtalk,\n groupAllowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n },\n })}\n />\n <SelectRow<'off' | 'emoji' | 'kaomoji'>\n id=\"dt-ack\" label={t('messengers.dingtalk.ackReaction')}\n value={draft.dingtalk.dingtalk?.ackReaction ?? 'off'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, ackReaction: v } })}\n options={[\n { value: 'off', label: t('messengers.dingtalk.ack.off') },\n { value: 'emoji', label: t('messengers.dingtalk.ack.emoji') },\n { value: 'kaomoji', label: t('messengers.dingtalk.ack.kaomoji') },\n ]}\n />\n {/* v1.2.41 (batch 4 follow-up) — multi-account CRUD editor. */}\n <DingTalkAccountsEditor\n accounts={draft.dingtalk.dingtalk?.accounts ?? {}}\n onChange={(next) => patchSlot('dingtalk', {\n dingtalk: { ...draft.dingtalk.dingtalk, accounts: next },\n })}\n />\n </PlatformCard>\n\n {cfg.features?.globalIm ? (\n <PlatformCard\n slot=\"discord\"\n label={t('messengers.platform.discord')}\n hint={t('messengers.hint.discord')}\n enabled={draft.discord.enabled}\n onToggle={(v) => patchSlot('discord', { enabled: v })}\n >\n <FieldRow\n id=\"dc-token\" label={t('messengers.fields.botToken')}\n value={draft.discord.discord?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, botToken: v } })}\n />\n <FieldRow\n id=\"dc-channel\" label={t('messengers.fields.channelId')}\n value={draft.discord.discord?.channelId ?? ''}\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n </div>\n )}\n\n <WechatQrDialog\n open={qrOpen}\n onOpenChange={setQrOpen}\n onConfirmed={() => { void cfgQuery.refetch(); setSynced(false) }}\n />\n </div>\n )\n}\n\ninterface PlatformCardProps {\n slot: Slot\n label: string\n hint: string\n enabled: boolean\n onToggle: (v: boolean) => void\n children?: React.ReactNode\n}\n\nfunction PlatformCard({ label, hint, enabled, onToggle, children }: PlatformCardProps): JSX.Element {\n const { t } = useTranslation('settings')\n return (\n <div className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-text\">{label}</span>\n <Badge variant={enabled ? 'success' : 'outline'}>\n {enabled ? t('messengers.enabled') : t('messengers.disabled')}\n </Badge>\n </div>\n <p className=\"mt-1 text-xs text-text-dim\">{hint}</p>\n </div>\n <label className=\"inline-flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </label>\n </div>\n {enabled && children && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {children}\n </div>\n )}\n </div>\n )\n}\n\ninterface FieldRowProps {\n id: string\n label: string\n value: string\n onChange: (v: string) => void\n type?: 'text' | 'password'\n}\n\nfunction FieldRow({ id, label, value, onChange, type = 'text' }: FieldRowProps): JSX.Element {\n return (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2\">\n <Label htmlFor={id} className=\"text-xs text-text-dim\">{label}</Label>\n <Input\n id={id}\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n autoComplete=\"off\"\n className=\"font-mono text-xs\"\n />\n </div>\n )\n}\n\n// v1.2.37 (batch 1) — dropdown sibling of FieldRow for enum settings.\ninterface SelectRowProps<T extends string> {\n id: string\n label: string\n value: T\n onChange: (v: T) => void\n options: Array<{ value: T; label: string }>\n}\nfunction SelectRow<T extends string>({ id, label, value, onChange, options }: SelectRowProps<T>): JSX.Element {\n return (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2\">\n <Label htmlFor={id} className=\"text-xs text-text-dim\">{label}</Label>\n <select\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n className=\"rounded-md border border-input bg-background px-2 py-1 text-xs\"\n >\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n </div>\n )\n}\n\ninterface WechatQrDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n onConfirmed: () => void\n}\n\nfunction WechatQrDialog({ open, onOpenChange, onConfirmed }: WechatQrDialogProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const start = useStartWechatQr()\n const [token, setToken] = useState<string | null>(null)\n const [qrImage, setQrImage] = useState<string | null>(null)\n const [startError, setStartError] = useState<string | null>(null)\n\n // Kick off the start mutation each time the dialog opens; reset on close.\n useEffect(() => {\n if (!open) {\n setToken(null)\n setQrImage(null)\n setStartError(null)\n return\n }\n let active = true\n start.mutateAsync().then((r) => {\n if (!active) return\n setQrImage(r.qrImage)\n setToken(r.qrToken)\n }).catch((err) => {\n if (!active) return\n setStartError(err instanceof Error ? err.message : String(err))\n })\n return () => { active = false }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const statusQuery = useWechatQrStatus(open ? token : null)\n const status = statusQuery.data?.status\n\n useEffect(() => {\n if (status === 'confirmed') {\n toast.success(t('messengers.qr.confirmed'))\n onConfirmed()\n onOpenChange(false)\n }\n if (status === 'expired') {\n toast.error(t('messengers.qr.expired'))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status])\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('messengers.qr.title')}</DialogTitle>\n <DialogDescription>{t('messengers.qr.description')}</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col items-center gap-3\">\n {start.isPending && !qrImage ? (\n <>\n <Loader2 className=\"h-8 w-8 animate-spin text-text-dim\" />\n <p className=\"text-sm text-text-dim\">{t('messengers.qr.starting')}</p>\n </>\n ) : startError ? (\n <p className=\"text-sm text-danger\">{t('messengers.qr.loadFailed')}: {startError}</p>\n ) : qrImage ? (\n <>\n <img\n src={qrImage}\n alt={t('messengers.qr.title')}\n className=\"rounded-md border border-border\"\n />\n {status === 'expired'\n ? <p className=\"text-xs text-danger\">{t('messengers.qr.expired')}</p>\n : <p className=\"text-xs text-text-dim\">{status ? `· ${status} ·` : ''}</p>}\n </>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n// ─── v1.2.41 — DingTalk multi-account CRUD editor ───────────────────\n// Renders below the main DingTalk card. Owns the in-memory accounts\n// dict and bubbles every change up via `onChange` so the page-level\n// dirty/save logic notices and lights up the Save button.\n//\n// Each row shows: id (read-only after creation), name, clientId,\n// clientSecret (password mode, masked on echo), dmPolicy / groupPolicy /\n// ackReaction selectors, allowFrom / groupAllowFrom CSVs, enabled\n// toggle, and a delete button. \"Add account\" appends a fresh row with\n// a generated id the operator can rename inline.\n\nexport interface DingTalkAccountDraft {\n name?: string\n clientId?: string\n clientSecret?: string\n dmPolicy?: 'open' | 'pairing' | 'allowlist'\n groupPolicy?: 'open' | 'allowlist' | 'disabled'\n allowFrom?: string[]\n groupAllowFrom?: string[]\n ackReaction?: 'off' | 'emoji' | 'kaomoji'\n enabled?: boolean\n}\n\ninterface DingTalkAccountsEditorProps {\n accounts: Record<string, DingTalkAccountDraft>\n onChange: (next: Record<string, DingTalkAccountDraft>) => void\n}\n\nfunction DingTalkAccountsEditor({ accounts, onChange }: DingTalkAccountsEditorProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const entries = Object.entries(accounts)\n\n const updateAccount = (id: string, patch: Partial<DingTalkAccountDraft>) => {\n onChange({ ...accounts, [id]: { ...accounts[id], ...patch } })\n }\n const deleteAccount = (id: string) => {\n const next = { ...accounts }\n delete next[id]\n onChange(next)\n }\n const renameAccount = (oldId: string, newId: string) => {\n if (!newId || newId === oldId) return\n if (accounts[newId]) {\n toast.error(t('messengers.dingtalk.accountRenameCollision', { id: newId }))\n return\n }\n const next: Record<string, DingTalkAccountDraft> = {}\n for (const [k, v] of Object.entries(accounts)) {\n next[k === oldId ? newId : k] = v\n }\n onChange(next)\n }\n const addAccount = () => {\n // Find an unused id of shape account-N.\n let n = entries.length + 1\n let candidate = `account-${n}`\n while (accounts[candidate]) { n += 1; candidate = `account-${n}` }\n onChange({ ...accounts, [candidate]: { enabled: true } })\n }\n\n return (\n <div className=\"mt-3 border-t border-input pt-3\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-semibold text-text-dim\">\n {t('messengers.dingtalk.accountsTitle')}\n </div>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={addAccount}>\n + {t('messengers.dingtalk.addAccount')}\n </Button>\n </div>\n\n {entries.length === 0 ? (\n <div className=\"text-xs text-text-dim italic\">\n {t('messengers.dingtalk.accountsEmpty')}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([id, acct]) => (\n <div key={id} className=\"rounded-md border border-input p-2\">\n <div className=\"mb-2 flex items-center gap-2\">\n <Input\n id={`acct-id-${id}`}\n defaultValue={id}\n onBlur={(e) => renameAccount(id, e.target.value.trim())}\n className=\"font-mono text-xs w-40\"\n placeholder=\"account-id\"\n />\n <Input\n id={`acct-name-${id}`}\n value={acct.name ?? ''}\n onChange={(e) => updateAccount(id, { name: e.target.value })}\n className=\"text-xs flex-1\"\n placeholder={t('messengers.dingtalk.accountName')}\n />\n <label className=\"flex items-center gap-1 text-xs\">\n <input\n type=\"checkbox\"\n checked={acct.enabled !== false}\n onChange={(e) => updateAccount(id, { enabled: e.target.checked })}\n />\n {t('messengers.enabled')}\n </label>\n <Button\n type=\"button\" size=\"sm\" variant=\"ghost\"\n onClick={() => deleteAccount(id)}\n className=\"text-danger\"\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n <div className=\"space-y-1\">\n <FieldRow\n id={`acct-cid-${id}`} label={t('messengers.fields.clientId')}\n value={acct.clientId ?? ''}\n onChange={(v) => updateAccount(id, { clientId: v })}\n />\n <FieldRow\n id={`acct-secret-${id}`} label={t('messengers.fields.clientSecret')}\n value={acct.clientSecret ?? ''}\n type=\"password\"\n onChange={(v) => updateAccount(id, { clientSecret: v })}\n />\n <SelectRow<'open' | 'pairing' | 'allowlist'>\n id={`acct-dm-${id}`} label={t('messengers.dingtalk.dmPolicy')}\n value={acct.dmPolicy ?? 'open'}\n onChange={(v) => updateAccount(id, { dmPolicy: v })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'pairing', label: t('messengers.dingtalk.policy.pairing') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n ]}\n />\n <SelectRow<'open' | 'allowlist' | 'disabled'>\n id={`acct-group-${id}`} label={t('messengers.dingtalk.groupPolicy')}\n value={acct.groupPolicy ?? 'open'}\n onChange={(v) => updateAccount(id, { groupPolicy: v })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n { value: 'disabled', label: t('messengers.dingtalk.policy.disabled') },\n ]}\n />\n <FieldRow\n id={`acct-allow-${id}`} label={t('messengers.dingtalk.allowFrom')}\n value={(acct.allowFrom ?? []).join(',')}\n onChange={(v) => updateAccount(id, {\n allowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n })}\n />\n <FieldRow\n id={`acct-gallow-${id}`} label={t('messengers.dingtalk.groupAllowFrom')}\n value={(acct.groupAllowFrom ?? []).join(',')}\n onChange={(v) => updateAccount(id, {\n groupAllowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n })}\n />\n <SelectRow<'off' | 'emoji' | 'kaomoji'>\n id={`acct-ack-${id}`} label={t('messengers.dingtalk.ackReaction')}\n value={acct.ackReaction ?? 'off'}\n onChange={(v) => updateAccount(id, { ackReaction: v })}\n options={[\n { value: 'off', label: t('messengers.dingtalk.ack.off') },\n { value: 'emoji', label: t('messengers.dingtalk.ack.emoji') },\n { value: 'kaomoji', label: t('messengers.dingtalk.ack.kaomoji') },\n ]}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n <div className=\"mt-1 text-xs text-text-dim\">{t('messengers.dingtalk.accountsHint')}</div>\n </div>\n )\n}\n"],"names":["QrCode","createLucideIcon","buildDraft","cfg","m","buildPatch","draft","messengers","k","patch","SettingsMessengersRoute","t","useTranslation","cfgQuery","useConfig","updateCfg","useUpdateConfig","setDraft","useState","synced","setSynced","useEffect","isDirty","useMemo","qrOpen","setQrOpen","patchSlot","slot","partial","prev","onSave","toast","err","describeError","onDiscard","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","Badge","X","Save","PlatformCard","v","FieldRow","SelectRow","s","DingTalkAccountsEditor","next","WechatQrDialog","label","hint","enabled","onToggle","children","e","id","value","onChange","type","Label","Input","options","o","open","onOpenChange","onConfirmed","start","useStartWechatQr","token","setToken","qrImage","setQrImage","startError","setStartError","active","r","status","useWechatQrStatus","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","accounts","entries","updateAccount","deleteAccount","renameAccount","oldId","newId","addAccount","n","candidate","acct"],"mappings":"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","x_google_ignoreList":[0]}