botmux 3.18.6 → 3.18.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +158 -0
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +330 -7
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/backend/sandbox.d.ts +42 -0
  7. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  8. package/dist/adapters/backend/sandbox.js +95 -5
  9. package/dist/adapters/backend/sandbox.js.map +1 -1
  10. package/dist/adapters/cli/codex-app.d.ts.map +1 -1
  11. package/dist/adapters/cli/codex-app.js +2 -1
  12. package/dist/adapters/cli/codex-app.js.map +1 -1
  13. package/dist/adapters/cli/dsh.d.ts.map +1 -1
  14. package/dist/adapters/cli/dsh.js +2 -1
  15. package/dist/adapters/cli/dsh.js.map +1 -1
  16. package/dist/adapters/cli/mir.d.ts.map +1 -1
  17. package/dist/adapters/cli/mir.js +2 -1
  18. package/dist/adapters/cli/mir.js.map +1 -1
  19. package/dist/adapters/cli/mira.d.ts.map +1 -1
  20. package/dist/adapters/cli/mira.js +2 -1
  21. package/dist/adapters/cli/mira.js.map +1 -1
  22. package/dist/adapters/hook-command.d.ts +3 -5
  23. package/dist/adapters/hook-command.d.ts.map +1 -1
  24. package/dist/adapters/hook-command.js +59 -13
  25. package/dist/adapters/hook-command.js.map +1 -1
  26. package/dist/autostart.d.ts +76 -0
  27. package/dist/autostart.d.ts.map +1 -1
  28. package/dist/autostart.js +105 -28
  29. package/dist/autostart.js.map +1 -1
  30. package/dist/bot-registry.d.ts +12 -0
  31. package/dist/bot-registry.d.ts.map +1 -1
  32. package/dist/bot-registry.js +43 -3
  33. package/dist/bot-registry.js.map +1 -1
  34. package/dist/cli/dashboard-command.d.ts +142 -0
  35. package/dist/cli/dashboard-command.d.ts.map +1 -1
  36. package/dist/cli/dashboard-command.js +160 -0
  37. package/dist/cli/dashboard-command.js.map +1 -1
  38. package/dist/cli/dashboard-endpoint.d.ts +66 -0
  39. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  40. package/dist/cli/dashboard-endpoint.js +144 -30
  41. package/dist/cli/dashboard-endpoint.js.map +1 -1
  42. package/dist/cli/send-dispatch.d.ts +2 -0
  43. package/dist/cli/send-dispatch.d.ts.map +1 -1
  44. package/dist/cli/send-dispatch.js +8 -2
  45. package/dist/cli/send-dispatch.js.map +1 -1
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +270 -38
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/binary-self-update.d.ts +7 -0
  50. package/dist/core/binary-self-update.d.ts.map +1 -1
  51. package/dist/core/binary-self-update.js +17 -0
  52. package/dist/core/binary-self-update.js.map +1 -1
  53. package/dist/core/command-handler.d.ts.map +1 -1
  54. package/dist/core/command-handler.js +52 -1
  55. package/dist/core/command-handler.js.map +1 -1
  56. package/dist/core/cost-calculator.d.ts +9 -1
  57. package/dist/core/cost-calculator.d.ts.map +1 -1
  58. package/dist/core/cost-calculator.js +5 -0
  59. package/dist/core/cost-calculator.js.map +1 -1
  60. package/dist/core/passthrough-commands.d.ts.map +1 -1
  61. package/dist/core/passthrough-commands.js +1 -1
  62. package/dist/core/passthrough-commands.js.map +1 -1
  63. package/dist/core/self-spawn.d.ts +46 -1
  64. package/dist/core/self-spawn.d.ts.map +1 -1
  65. package/dist/core/self-spawn.js +57 -0
  66. package/dist/core/self-spawn.js.map +1 -1
  67. package/dist/core/worker-pool.d.ts.map +1 -1
  68. package/dist/core/worker-pool.js +81 -5
  69. package/dist/core/worker-pool.js.map +1 -1
  70. package/dist/daemon.d.ts.map +1 -1
  71. package/dist/daemon.js +93 -0
  72. package/dist/daemon.js.map +1 -1
  73. package/dist/dashboard/autostart-api.d.ts.map +1 -1
  74. package/dist/dashboard/autostart-api.js +16 -3
  75. package/dist/dashboard/autostart-api.js.map +1 -1
  76. package/dist/dashboard/bot-onboarding.d.ts +2 -1
  77. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  78. package/dist/dashboard/bot-onboarding.js +22 -6
  79. package/dist/dashboard/bot-onboarding.js.map +1 -1
  80. package/dist/dashboard/bot-payload.d.ts +1 -0
  81. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  82. package/dist/dashboard/bot-payload.js +3 -0
  83. package/dist/dashboard/bot-payload.js.map +1 -1
  84. package/dist/dashboard/connector-api.d.ts.map +1 -1
  85. package/dist/dashboard/connector-api.js +28 -0
  86. package/dist/dashboard/connector-api.js.map +1 -1
  87. package/dist/dashboard/trigger-api.d.ts.map +1 -1
  88. package/dist/dashboard/trigger-api.js +33 -21
  89. package/dist/dashboard/trigger-api.js.map +1 -1
  90. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  91. package/dist/dashboard/web/bot-defaults-page.js +12 -2
  92. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  93. package/dist/dashboard/web/bot-defaults.d.ts +2 -0
  94. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  95. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  96. package/dist/dashboard/web/bot-onboarding.d.ts +40 -1
  97. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  98. package/dist/dashboard/web/bot-onboarding.js +52 -2
  99. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  100. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  101. package/dist/dashboard/web/i18n.js +2 -0
  102. package/dist/dashboard/web/i18n.js.map +1 -1
  103. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  104. package/dist/dashboard/webhook-routes.js +272 -30
  105. package/dist/dashboard/webhook-routes.js.map +1 -1
  106. package/dist/dashboard-web/app.js +1 -1
  107. package/dist/dashboard-web/chunks/{agent-workbench-dock-page-XHJUYFGN.js → agent-workbench-dock-page-6LC422N6.js} +1 -1
  108. package/dist/dashboard-web/chunks/{agent-workbench-page-FLKTLIRM.js → agent-workbench-page-RSAWY7O2.js} +1 -1
  109. package/dist/dashboard-web/chunks/{bot-defaults-page-XMGLZZ2E.js → bot-defaults-page-67RAWCSQ.js} +1 -1
  110. package/dist/dashboard-web/chunks/{chunk-TLG45URB.js → chunk-IA5KMD5O.js} +1 -1
  111. package/dist/dashboard-web/chunks/{chunk-BU3Q6XC6.js → chunk-K232GT3M.js} +2 -2
  112. package/dist/dashboard-web/chunks/chunk-MMLTCXHP.js +10 -0
  113. package/dist/dashboard-web/chunks/{chunk-ECFC7UG2.js → chunk-R3LJUCEO.js} +1 -1
  114. package/dist/dashboard-web/chunks/{chunk-Z67OSM5P.js → chunk-YJA3KY3J.js} +1 -1
  115. package/dist/dashboard-web/chunks/{connectors-page-WDM4CEAU.js → connectors-page-DJCTHSFB.js} +1 -1
  116. package/dist/dashboard-web/chunks/{feedback-page-GMJ4FLJ4.js → feedback-page-O7SZRKNM.js} +1 -1
  117. package/dist/dashboard-web/chunks/{groups-page-L4ZJNWVR.js → groups-page-7PONUYHE.js} +1 -1
  118. package/dist/dashboard-web/chunks/{insights-page-7LUJU2CX.js → insights-page-J6DAAJ6D.js} +1 -1
  119. package/dist/dashboard-web/chunks/{monitor-room-7LZUJQPF.js → monitor-room-F3QNEW7N.js} +1 -1
  120. package/dist/dashboard-web/chunks/{monitoring-page-AUSXMPYO.js → monitoring-page-JHDD2VS2.js} +1 -1
  121. package/dist/dashboard-web/chunks/{office-page-6ZU6MAZN.js → office-page-MMTN4IKD.js} +1 -1
  122. package/dist/dashboard-web/chunks/{overview-page-QBC5CIYH.js → overview-page-IQ2UJAJP.js} +1 -1
  123. package/dist/dashboard-web/chunks/{roles-page-QO3YCA7D.js → roles-page-FNI4MGX6.js} +1 -1
  124. package/dist/dashboard-web/chunks/{schedules-page-YNGSKDQW.js → schedules-page-6PUU63KS.js} +1 -1
  125. package/dist/dashboard-web/chunks/{sessions-page-BWR4UB6X.js → sessions-page-O4N72EXT.js} +4 -4
  126. package/dist/dashboard-web/chunks/{settings-page-2IRIS3FP.js → settings-page-G7B3STUF.js} +1 -1
  127. package/dist/dashboard-web/chunks/{skills-page-5RZPM6HJ.js → skills-page-CEWKQOIG.js} +1 -1
  128. package/dist/dashboard-web/chunks/{team-federation-page-KERG6LKC.js → team-federation-page-NUP4VK4H.js} +1 -1
  129. package/dist/dashboard-web/chunks/{v3-page-766CBD7H.js → v3-page-M4XF6D5Z.js} +1 -1
  130. package/dist/dashboard-web/chunks/{whiteboards-page-2M6XZD5C.js → whiteboards-page-L755NZX6.js} +1 -1
  131. package/dist/dashboard-web/style.css +13 -0
  132. package/dist/dashboard.js +3 -0
  133. package/dist/dashboard.js.map +1 -1
  134. package/dist/global-config.d.ts +3 -0
  135. package/dist/global-config.d.ts.map +1 -1
  136. package/dist/global-config.js +10 -3
  137. package/dist/global-config.js.map +1 -1
  138. package/dist/i18n/en.d.ts.map +1 -1
  139. package/dist/i18n/en.js +19 -1
  140. package/dist/i18n/en.js.map +1 -1
  141. package/dist/i18n/zh.d.ts.map +1 -1
  142. package/dist/i18n/zh.js +19 -1
  143. package/dist/i18n/zh.js.map +1 -1
  144. package/dist/im/lark/api-gate.d.ts +53 -0
  145. package/dist/im/lark/api-gate.d.ts.map +1 -0
  146. package/dist/im/lark/api-gate.js +322 -0
  147. package/dist/im/lark/api-gate.js.map +1 -0
  148. package/dist/im/lark/audio-transcribe.d.ts +23 -0
  149. package/dist/im/lark/audio-transcribe.d.ts.map +1 -0
  150. package/dist/im/lark/audio-transcribe.js +126 -0
  151. package/dist/im/lark/audio-transcribe.js.map +1 -0
  152. package/dist/im/lark/card-builder.d.ts +6 -0
  153. package/dist/im/lark/card-builder.d.ts.map +1 -1
  154. package/dist/im/lark/card-builder.js +53 -1
  155. package/dist/im/lark/card-builder.js.map +1 -1
  156. package/dist/im/lark/card-handler.d.ts +10 -0
  157. package/dist/im/lark/card-handler.d.ts.map +1 -1
  158. package/dist/im/lark/card-handler.js +68 -1
  159. package/dist/im/lark/card-handler.js.map +1 -1
  160. package/dist/im/lark/client.d.ts.map +1 -1
  161. package/dist/im/lark/client.js +247 -224
  162. package/dist/im/lark/client.js.map +1 -1
  163. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  164. package/dist/im/lark/event-dispatcher.js +34 -3
  165. package/dist/im/lark/event-dispatcher.js.map +1 -1
  166. package/dist/im/lark/message-parser.d.ts +16 -0
  167. package/dist/im/lark/message-parser.d.ts.map +1 -1
  168. package/dist/im/lark/message-parser.js +31 -0
  169. package/dist/im/lark/message-parser.js.map +1 -1
  170. package/dist/services/budget-tracker.d.ts +61 -0
  171. package/dist/services/budget-tracker.d.ts.map +1 -0
  172. package/dist/services/budget-tracker.js +306 -0
  173. package/dist/services/budget-tracker.js.map +1 -0
  174. package/dist/services/connector-store.d.ts +16 -0
  175. package/dist/services/connector-store.d.ts.map +1 -1
  176. package/dist/services/connector-store.js.map +1 -1
  177. package/dist/services/failed-turn-retry.d.ts +43 -0
  178. package/dist/services/failed-turn-retry.d.ts.map +1 -0
  179. package/dist/services/failed-turn-retry.js +50 -0
  180. package/dist/services/failed-turn-retry.js.map +1 -0
  181. package/dist/services/model-pricing.d.ts +80 -0
  182. package/dist/services/model-pricing.d.ts.map +1 -0
  183. package/dist/services/model-pricing.js +182 -0
  184. package/dist/services/model-pricing.js.map +1 -0
  185. package/dist/services/session-store.d.ts.map +1 -1
  186. package/dist/services/session-store.js +13 -3
  187. package/dist/services/session-store.js.map +1 -1
  188. package/dist/services/trigger-types.d.ts +10 -0
  189. package/dist/services/trigger-types.d.ts.map +1 -1
  190. package/dist/services/trigger-types.js.map +1 -1
  191. package/dist/services/usage-ledger.d.ts +10 -0
  192. package/dist/services/usage-ledger.d.ts.map +1 -1
  193. package/dist/services/usage-ledger.js +36 -0
  194. package/dist/services/usage-ledger.js.map +1 -1
  195. package/dist/services/voice/asr.d.ts +17 -0
  196. package/dist/services/voice/asr.d.ts.map +1 -0
  197. package/dist/services/voice/asr.js +64 -0
  198. package/dist/services/voice/asr.js.map +1 -0
  199. package/dist/services/voice/index.d.ts +17 -2
  200. package/dist/services/voice/index.d.ts.map +1 -1
  201. package/dist/services/voice/index.js +43 -0
  202. package/dist/services/voice/index.js.map +1 -1
  203. package/dist/services/voice/types.d.ts +15 -0
  204. package/dist/services/voice/types.d.ts.map +1 -1
  205. package/dist/services/webhook-idempotency.d.ts +134 -0
  206. package/dist/services/webhook-idempotency.d.ts.map +1 -0
  207. package/dist/services/webhook-idempotency.js +265 -0
  208. package/dist/services/webhook-idempotency.js.map +1 -0
  209. package/dist/setup/app-name.d.ts +1 -0
  210. package/dist/setup/app-name.d.ts.map +1 -1
  211. package/dist/setup/app-name.js +7 -0
  212. package/dist/setup/app-name.js.map +1 -1
  213. package/dist/setup/bot-config-editor.d.ts +28 -0
  214. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  215. package/dist/setup/bot-config-editor.js +73 -0
  216. package/dist/setup/bot-config-editor.js.map +1 -1
  217. package/dist/setup/open-platform-automation.d.ts +26 -0
  218. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  219. package/dist/setup/open-platform-automation.js +90 -1
  220. package/dist/setup/open-platform-automation.js.map +1 -1
  221. package/dist/setup/open-platform-outcome.d.ts.map +1 -1
  222. package/dist/setup/open-platform-outcome.js +8 -2
  223. package/dist/setup/open-platform-outcome.js.map +1 -1
  224. package/dist/types.d.ts +20 -1
  225. package/dist/types.d.ts.map +1 -1
  226. package/dist/utils/usage-limit-tracker.d.ts +29 -9
  227. package/dist/utils/usage-limit-tracker.d.ts.map +1 -1
  228. package/dist/utils/usage-limit-tracker.js +122 -14
  229. package/dist/utils/usage-limit-tracker.js.map +1 -1
  230. package/dist/worker.js +27 -6
  231. package/dist/worker.js.map +1 -1
  232. package/dist/workflows/definition.d.ts +56 -56
  233. package/dist/workflows/events/payloads.d.ts +2 -2
  234. package/dist/workflows/events/schema.d.ts +430 -430
  235. package/dist/workflows/migration/v2-run-archive-schema.d.ts +2 -2
  236. package/dist/workflows/v3/run-envelope.d.ts +56 -56
  237. package/package.json +9 -8
  238. package/scripts/postinstall-bin.mjs +25 -0
  239. package/dist/dashboard-web/chunks/chunk-NJCJR3U2.js +0 -10
@@ -1,4 +1,4 @@
1
- import{a as T,b as I,d as N,e as P,f as _,g as q}from"./chunk-XJ7BGPJH.js";import{a as B}from"./chunk-CEUCNZFJ.js";import{a as E}from"./chunk-QITAMHW6.js";import{C as x,G as O,I as S,K as W,x as r,y as n,z as C}from"./chunk-BU3Q6XC6.js";import"./chunk-3YZFAHNK.js";function F(t){let o=String(t??"unknown"),e=`sessions.status.${o}`,i=r(e);return i===e?o:i}function D(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function G(t){let o=String(t??"unknown");return`<span class="status status-${n(D(o))}">${n(F(o))}</span>`}function z(t){return W(t?.title)||String(t?.sessionId??"")}var A=14,K=49,U=18;function j(){let t=[...E.sessions.values()].filter(o=>typeof o?.sessionId=="string"&&o.sessionId&&o.status!=="closed").sort((o,e)=>Number(e.lastMessageAt??0)-Number(o.lastMessageAt??0));return[...new Set(t.map(o=>String(o.sessionId)))]}function J(t,o,e){let i=Math.max(0,Math.floor(e)),s=Math.max(1,t.width),m=Math.max(1,t.height),a=s/m,l=Math.max(1,o.width),p=Math.max(180,m-Math.max(0,o.top)-U);if(i<=0)return{columns:1,rows:0,frameWidth:Math.floor(l),frameHeight:Math.floor(l/a),ratio:a};let d=null;for(let u=1;u<=i;u+=1){let b=Math.ceil(i/u),f=(l-A*(u-1))/u,L=(p-A*(b-1)-K*b)/b;if(f<=0||L<=0)continue;let h=Math.max(1,Math.min(f,L*a)),M=h/a,c=h*M;(!d||c>d.score)&&(d={columns:u,rows:b,frameWidth:h,frameHeight:M,score:c})}if(!d){let u=Math.min(i,Math.max(1,Math.floor(l/220))),b=Math.ceil(i/u),f=Math.max(1,(l-A*(u-1))/u);return{columns:u,rows:b,frameWidth:Math.floor(f),frameHeight:Math.floor(f/a),ratio:a}}return{columns:d.columns,rows:d.rows,frameWidth:Math.floor(d.frameWidth),frameHeight:Math.floor(d.frameHeight),ratio:a}}function Q(t,o){let e=Math.max(1,Math.floor(t.width)),i=Math.max(1,Math.floor(t.height)),s=Math.max(1,o.width),m=Math.max(1,o.height),a=Math.min(1,s/e,m/i);return{width:e,height:i,scale:a}}function V(t,o){return t?`frame:${T(t,o)??"none"}`:"missing"}function X(t,o){let e=E.sessions.get(t),i=o?nt(t):"";if(!e)return`<div class="monitor-room-card-title">
1
+ import{a as T,b as I,d as N,e as P,f as _,g as q}from"./chunk-XJ7BGPJH.js";import{a as B}from"./chunk-CEUCNZFJ.js";import{a as E}from"./chunk-QITAMHW6.js";import{C as x,G as O,I as S,K as W,x as r,y as n,z as C}from"./chunk-K232GT3M.js";import"./chunk-3YZFAHNK.js";function F(t){let o=String(t??"unknown"),e=`sessions.status.${o}`,i=r(e);return i===e?o:i}function D(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function G(t){let o=String(t??"unknown");return`<span class="status status-${n(D(o))}">${n(F(o))}</span>`}function z(t){return W(t?.title)||String(t?.sessionId??"")}var A=14,K=49,U=18;function j(){let t=[...E.sessions.values()].filter(o=>typeof o?.sessionId=="string"&&o.sessionId&&o.status!=="closed").sort((o,e)=>Number(e.lastMessageAt??0)-Number(o.lastMessageAt??0));return[...new Set(t.map(o=>String(o.sessionId)))]}function J(t,o,e){let i=Math.max(0,Math.floor(e)),s=Math.max(1,t.width),m=Math.max(1,t.height),a=s/m,l=Math.max(1,o.width),p=Math.max(180,m-Math.max(0,o.top)-U);if(i<=0)return{columns:1,rows:0,frameWidth:Math.floor(l),frameHeight:Math.floor(l/a),ratio:a};let d=null;for(let u=1;u<=i;u+=1){let b=Math.ceil(i/u),f=(l-A*(u-1))/u,L=(p-A*(b-1)-K*b)/b;if(f<=0||L<=0)continue;let h=Math.max(1,Math.min(f,L*a)),M=h/a,c=h*M;(!d||c>d.score)&&(d={columns:u,rows:b,frameWidth:h,frameHeight:M,score:c})}if(!d){let u=Math.min(i,Math.max(1,Math.floor(l/220))),b=Math.ceil(i/u),f=Math.max(1,(l-A*(u-1))/u);return{columns:u,rows:b,frameWidth:Math.floor(f),frameHeight:Math.floor(f/a),ratio:a}}return{columns:d.columns,rows:d.rows,frameWidth:Math.floor(d.frameWidth),frameHeight:Math.floor(d.frameHeight),ratio:a}}function Q(t,o){let e=Math.max(1,Math.floor(t.width)),i=Math.max(1,Math.floor(t.height)),s=Math.max(1,o.width),m=Math.max(1,o.height),a=Math.min(1,s/e,m/i);return{width:e,height:i,scale:a}}function V(t,o){return t?`frame:${T(t,o)??"none"}`:"missing"}function X(t,o){let e=E.sessions.get(t),i=o?nt(t):"";if(!e)return`<div class="monitor-room-card-title">
2
2
  <strong>${n(t)}</strong>
3
3
  <span>${n(r("monitorRoom.missing"))}</span>
4
4
  </div>${i}`;let s=z(e),m=T(e),a=S(e),l=m?rt(t):"";return`<div class="monitor-room-card-title">
@@ -1,2 +1,2 @@
1
- import{c as G,d as f,j as _,m as H,n as T,o as D,p as A}from"./chunk-NYY66DNC.js";import{d as k}from"./chunk-ECFC7UG2.js";import"./chunk-QITAMHW6.js";import"./chunk-BU3Q6XC6.js";import{c as U}from"./chunk-ARROO6TE.js";import{c as $,d as Y,e as K}from"./chunk-3YZFAHNK.js";var g=$(Y(),1);var e=$(K(),1);function b(n){let s=Number(n);return!Number.isFinite(s)||s<=0?"-":s>=1024**3?`${(s/1024**3).toFixed(1)} GiB`:s>=1024**2?`${(s/1024**2).toFixed(0)} MiB`:`${Math.max(1,Math.round(s/1024))} KiB`}function N(n){let s=Number(n);return Number.isFinite(s)?`${s.toFixed(1)}%`:"-"}function S(n,s){return s?N(n):"-"}function q(n){return n?.cpuReady!==!1}function d(n){let s=Number(n);return Number.isFinite(s)?String(s):"-"}function E(n){let s=Number(n);if(!Number.isFinite(s)||s<0)return"-";if(s===0)return"0s";if(s<6e4)return`${Math.max(1,Math.floor(s/1e3))}s`;let r=Math.floor(s/6e4);if(r<60)return`${Math.max(1,r)}m`;let t=Math.floor(r/60),o=r%60;return o?`${t}h ${o}m`:`${t}h`}function Z(n){return n==="fresh"||n==="stale"||n==="unsupported"?n:"unknown"}function j(n){return n?`${n.botName||"-"} \xB7 ${n.title||n.sessionId}`:"-"}function W(n,s){return s==="cpu"?Number(n.current?.cpu1mPct??n.current?.cpuPct??0):s==="rss"?Number(n.current?.rssBytes??0):s==="growth"?Number(n.current?.rssGrowth5mBytes??0):s==="bot"?n.botName??"":n.status??""}function ee(n,s){return[...n].sort((r,t)=>{let o=W(r,s),u=W(t,s);return typeof o=="number"&&typeof u=="number"?u-o||r.sessionId.localeCompare(t.sessionId):String(o).localeCompare(String(u))||r.sessionId.localeCompare(t.sessionId)})}function V(n,s){return s==="bytes"?b(n):N(n)}function F(n,s,r){let t=(n??[]).filter(Number.isFinite);if(t.length<2)return r("monitoring.chartNoData");let o=t[0],u=Number.isFinite(s)?Number(s):Date.now(),a=Math.max(0,u-o),m=Math.max(1,Math.round(a/6e4));if(m<60)return r("monitoring.chartMinutesAgo",{value:m});let p=Math.round(m/60);return p<48?r("monitoring.chartHoursAgo",{value:p}):r("monitoring.chartDaysAgo",{value:Math.round(p/24)})}function C(n){let s=(n??[]).filter(Number.isFinite);return s.length?s[s.length-1]:void 0}function R({values:n,timestamps:s,unit:r="pct",startLabel:t,endLabel:o,emptyLabel:u,className:a}){let m=(n??[]).filter(Number.isFinite),p=m.length?Math.min(...m):0,x=m.length?Math.max(...m):0,w=x-p,c=m.length>1?m.map((L,i)=>{let l=i/(m.length-1)*100,h=w>0?100-(L-p)/w*100:50;return`${l},${h}`}).join(" "):"",P=c?`0,100 ${c} 100,100`:"",B=c?c.split(" "):[],v=B.length?B[B.length-1].split(",").map(Number):null;return(0,e.jsxs)("div",{className:["resource-chart",a].filter(Boolean).join(" "),children:[(0,e.jsxs)("div",{className:"resource-chart-y","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length?V(x,r):"-"}),(0,e.jsx)("span",{children:m.length?V(p,r):"-"})]}),(0,e.jsxs)("div",{className:"resource-chart-plot",children:[(0,e.jsxs)("div",{className:"resource-spark-wrap",children:[(0,e.jsxs)("svg",{className:"resource-spark",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-label":m.length>1?void 0:u,children:[(0,e.jsx)("line",{x1:"0",y1:"12",x2:"100",y2:"12",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"50",x2:"100",y2:"50",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"88",x2:"100",y2:"88",className:"resource-grid-line"}),P?(0,e.jsx)("polygon",{className:"resource-spark-area",points:P}):null,c?(0,e.jsx)("polyline",{points:c}):null]}),v&&Number.isFinite(v[0])&&Number.isFinite(v[1])?(0,e.jsx)("span",{className:"resource-spark-dot","aria-hidden":"true",style:{left:`${v[0]}%`,top:`${v[1]}%`}}):null]}),(0,e.jsxs)("div",{className:"resource-chart-x","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length>1?t:u}),(0,e.jsx)("span",{children:m.length>1?o:""})]})]})]})}function I(n){let s=r=>r instanceof Element&&!!r.closest(".ui-info-tip");return(0,e.jsx)("section",{className:"metric-card","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:r=>{s(r.target)||n.onOpen()},onKeyDown:r=>{s(r.target)||r.key!=="Enter"&&r.key!==" "||(r.preventDefault(),n.onOpen())},children:n.children})}function M(n){return(0,e.jsx)("article",{className:"resource-trend-cell","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:n.onOpen,onKeyDown:s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),n.onOpen())},children:n.children})}function te(n){let s=k(),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=r.current;if(t)if(n.detail){if(!t.open)try{t.showModal()}catch{}}else t.open&&t.close()},[n.detail]),(0,g.useEffect)(()=>()=>{let t=r.current;t?.open&&t.close()},[]),(0,e.jsx)("dialog",{ref:r,className:"resource-detail-modal",onCancel:t=>{t.preventDefault(),n.onClose()},onClose:n.onClose,onClick:t=>{t.target===t.currentTarget&&n.onClose()},children:n.detail?(0,e.jsxs)("article",{className:"resource-detail-modal-card",children:[(0,e.jsxs)("header",{className:"resource-detail-modal-head",children:[(0,e.jsx)("h3",{children:n.detail.title}),(0,e.jsx)("button",{type:"button",className:"resource-detail-modal-close","aria-label":s("monitoring.modalClose"),title:s("monitoring.modalClose"),onClick:n.onClose})]}),(0,e.jsxs)("div",{className:"resource-detail-modal-body",children:[(0,e.jsxs)("section",{className:"resource-detail-summary",children:[(0,e.jsx)("strong",{children:n.detail.value}),(0,e.jsx)("p",{children:n.detail.detail})]}),n.detail.chart?(0,e.jsx)(R,{className:"resource-detail-chart",values:n.detail.chart.values,timestamps:n.detail.chart.timestamps,unit:n.detail.chart.unit,startLabel:n.detail.chart.startLabel,endLabel:n.detail.chart.endLabel,emptyLabel:n.detail.chart.emptyLabel}):(0,e.jsx)("p",{className:"resource-detail-empty",children:n.detail.emptyText})]})]}):null})}function ne({reasons:n}){return(0,e.jsx)("span",{className:"resource-reasons",children:(n??[]).join(", ")||"-"})}function y({label:n,value:s,tone:r}){return(0,e.jsxs)("span",{className:`resource-pill${r?` ${r}`:""}`,children:[(0,e.jsx)("span",{children:n}),(0,e.jsx)("b",{children:s})]})}function se({bots:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list",children:n.length?n.map(t=>{let o=t.runtime?.sessions,u=t.runtime?.daemonStatus??t.daemonStatus??"unknown",a=u==="online"?"ok":u==="offline"?"off":"warn";return(0,e.jsxs)(T,{className:"resource-list-item resource-bot-item",children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.botName,children:t.botName}),(0,e.jsxs)("span",{children:[r("monitoring.sessionsCount")," ",d(o?.total??t.sessions?.count)]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.daemon"),value:u,tone:a}),(0,e.jsx)(y,{label:r("monitoring.working"),value:d(o?.working),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.starting"),value:d(o?.starting)}),(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.total?.cpuPct,s)}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.total?.rssBytes)})]})})]},t.larkAppId)}):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function re({sessions:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell resource-session-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list resource-session-list",children:n.length?n.map(t=>(0,e.jsxs)(T,{className:`resource-list-item resource-session-item${t.tracked?" is-tracked":""}`,children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.title||t.sessionId,children:t.title||t.sessionId}),(0,e.jsxs)("span",{title:t.sessionId,children:[t.botName," \xB7 ",t.sessionId]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.current?.cpu1mPct??t.current?.cpuPct,s),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.current?.rssBytes)}),(0,e.jsx)(y,{label:r("monitoring.growth"),value:b(t.current?.rssGrowth5mBytes)}),(0,e.jsx)(y,{label:r("monitoring.confidence"),value:t.confidence??"unknown",tone:t.tracked?"ok":void 0}),(0,e.jsxs)("span",{className:"resource-pill resource-rank-pill",children:[(0,e.jsx)("span",{children:r("monitoring.rank")}),(0,e.jsx)(ne,{reasons:t.rankReasons})]})]})})]},t.sessionId)):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function oe({current:n}){let s=k(),r=n.runtime,t=q(n),o=Z(r?.sampleHealth?.status),u=r?.daemons?.total,a=r?.daemons?.online,m=r?.daemons?.offline??(Number.isFinite(Number(u))&&Number.isFinite(Number(a))?Math.max(0,Number(u)-Number(a)):void 0),p=r?.sessions?.total,x=r?.sessions?.working,w=r?.sessions?.starting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.runtimeHealth")}),(0,e.jsx)("section",{className:"panel runtime-health-panel",children:(0,e.jsxs)("div",{className:"runtime-health-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sampleHealth")}),(0,e.jsx)("strong",{children:(0,e.jsx)("span",{className:`runtime-status-pill ${o}`,children:s(`monitoring.sample.${o}`)})}),(0,e.jsxs)("small",{children:[s("monitoring.sampleAge")," ",E(r?.sampleHealth?.ageMs)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.daemonHealth")}),(0,e.jsxs)("strong",{children:[d(a),"/",d(u)]}),(0,e.jsxs)("small",{children:[d(m)," ",s("monitoring.offline")]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sessionHealth")}),(0,e.jsx)("strong",{children:d(p)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(x)," \xB7 ",s("monitoring.starting")," ",d(w)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.resourcePressure")}),(0,e.jsx)("strong",{children:S(n.host?.cpuPct,t)}),(0,e.jsxs)("small",{children:[s("monitoring.hostMemory")," ",N(n.host?.memUsedPct)," \xB7 RSS ",b(n.botmux?.rssBytes)]})]})]})})]})}function ae({runtime:n}){let s=k(),r=n?.sessions,t=r?.longestRunning,o=r?.longestWaiting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.sessionPressure")}),(0,e.jsx)("section",{className:"panel runtime-session-pressure",children:(0,e.jsxs)("div",{className:"runtime-session-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.statusDistribution")}),(0,e.jsx)("strong",{children:d(r?.total)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(r?.working)," \xB7 ",s("monitoring.starting")," ",d(r?.starting)," \xB7 ",s("monitoring.waiting")," ",d(r?.waiting)," \xB7 ",s("monitoring.idle")," ",d(r?.idle)," \xB7 ",s("monitoring.unknown")," ",d(r?.unknown)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestRunning")}),(0,e.jsx)("strong",{children:j(t)}),(0,e.jsx)("small",{children:E(t?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestWaiting")}),(0,e.jsx)("strong",{children:j(o)}),(0,e.jsx)("small",{children:E(o?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.unattributedSessions")}),(0,e.jsx)("strong",{children:d(r?.unattributed)}),(0,e.jsx)("small",{children:s("monitoring.unattributedHint")})]})]})})]})}function ie({initialCurrent:n=null,initialHistory:s=null,poll:r=!0}={}){let t=k(),[o,u]=(0,g.useState)(n),[a,m]=(0,g.useState)(s),[p,x]=(0,g.useState)("cpu"),[w,c]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(!r)return;let l=!1;async function h(){try{let[z,J]=await Promise.all([fetch("/api/resources/current",{cache:"no-store"}),fetch("/api/resources/history?range=3h",{cache:"no-store"})]),[Q,X]=await Promise.all([z.json(),J.json()]);l||(u(Q),m(X))}catch{l||(u({supported:!1,reason:"fetch_failed",bots:[],sessions:[]}),m({supported:!1,bots:[],sessions:[]}))}}h();let O=window.setInterval(()=>{h()},1e4);return()=>{l=!0,window.clearInterval(O)}},[r]);let P=o!==null&&a!==null,B=(0,g.useMemo)(()=>ee(o?.sessions??[],p),[o?.sessions,p]),v=o?.supported!==!1,L=q(o),i={hostStartLabel:F(a?.host?.timestamps,o?.sampledAt,t),botmuxStartLabel:F(a?.botmux?.timestamps,o?.sampledAt,t),endLabel:t("monitoring.chartNow"),emptyLabel:t("monitoring.chartNoData")};return(0,e.jsxs)("section",{className:"page resource-page",children:[(0,e.jsx)("div",{className:"page-heading",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("monitoring.eyebrow")}),(0,e.jsx)("h1",{children:t("monitoring.runtimeTitle")})]})}),P?null:(0,e.jsx)(G,{label:t("common.loading")}),P?(0,e.jsxs)(e.Fragment,{children:[o?(0,e.jsx)(oe,{current:o}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block resource-pressure-block",children:[(0,e.jsx)(f,{title:t("monitoring.resourcePressure")}),(0,e.jsx)("section",{className:"panel resource-pressure",children:(0,e.jsxs)("div",{className:"resource-metrics runtime-pressure-grid",children:[(0,e.jsxs)(I,{label:t("monitoring.hostCpu"),onOpen:()=>c({title:t("monitoring.hostCpu"),value:S(o?.host?.cpuPct,L),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostCpu")}),(0,e.jsx)("strong",{children:S(o?.host?.cpuPct,L)}),(0,e.jsxs)("small",{children:["load ",Number(o?.host?.load1??0).toFixed(2)]})]}),(0,e.jsxs)(I,{label:t("monitoring.hostMemory"),onOpen:()=>c({title:t("monitoring.hostMemory"),value:N(o?.host?.memUsedPct),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostMemory")}),(0,e.jsx)("strong",{children:N(o?.host?.memUsedPct)}),(0,e.jsx)("small",{children:t("monitoring.memoryOnly")})]}),(0,e.jsxs)(I,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(o?.botmux?.rssBytes),detail:o?.botmuxBreakdown?`${t("monitoring.botmuxSelf")} ${b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0))}
1
+ import{c as G,d as f,j as _,m as H,n as T,o as D,p as A}from"./chunk-NYY66DNC.js";import{d as k}from"./chunk-R3LJUCEO.js";import"./chunk-QITAMHW6.js";import"./chunk-K232GT3M.js";import{c as U}from"./chunk-ARROO6TE.js";import{c as $,d as Y,e as K}from"./chunk-3YZFAHNK.js";var g=$(Y(),1);var e=$(K(),1);function b(n){let s=Number(n);return!Number.isFinite(s)||s<=0?"-":s>=1024**3?`${(s/1024**3).toFixed(1)} GiB`:s>=1024**2?`${(s/1024**2).toFixed(0)} MiB`:`${Math.max(1,Math.round(s/1024))} KiB`}function N(n){let s=Number(n);return Number.isFinite(s)?`${s.toFixed(1)}%`:"-"}function S(n,s){return s?N(n):"-"}function q(n){return n?.cpuReady!==!1}function d(n){let s=Number(n);return Number.isFinite(s)?String(s):"-"}function E(n){let s=Number(n);if(!Number.isFinite(s)||s<0)return"-";if(s===0)return"0s";if(s<6e4)return`${Math.max(1,Math.floor(s/1e3))}s`;let r=Math.floor(s/6e4);if(r<60)return`${Math.max(1,r)}m`;let t=Math.floor(r/60),o=r%60;return o?`${t}h ${o}m`:`${t}h`}function Z(n){return n==="fresh"||n==="stale"||n==="unsupported"?n:"unknown"}function j(n){return n?`${n.botName||"-"} \xB7 ${n.title||n.sessionId}`:"-"}function W(n,s){return s==="cpu"?Number(n.current?.cpu1mPct??n.current?.cpuPct??0):s==="rss"?Number(n.current?.rssBytes??0):s==="growth"?Number(n.current?.rssGrowth5mBytes??0):s==="bot"?n.botName??"":n.status??""}function ee(n,s){return[...n].sort((r,t)=>{let o=W(r,s),u=W(t,s);return typeof o=="number"&&typeof u=="number"?u-o||r.sessionId.localeCompare(t.sessionId):String(o).localeCompare(String(u))||r.sessionId.localeCompare(t.sessionId)})}function V(n,s){return s==="bytes"?b(n):N(n)}function F(n,s,r){let t=(n??[]).filter(Number.isFinite);if(t.length<2)return r("monitoring.chartNoData");let o=t[0],u=Number.isFinite(s)?Number(s):Date.now(),a=Math.max(0,u-o),m=Math.max(1,Math.round(a/6e4));if(m<60)return r("monitoring.chartMinutesAgo",{value:m});let p=Math.round(m/60);return p<48?r("monitoring.chartHoursAgo",{value:p}):r("monitoring.chartDaysAgo",{value:Math.round(p/24)})}function C(n){let s=(n??[]).filter(Number.isFinite);return s.length?s[s.length-1]:void 0}function R({values:n,timestamps:s,unit:r="pct",startLabel:t,endLabel:o,emptyLabel:u,className:a}){let m=(n??[]).filter(Number.isFinite),p=m.length?Math.min(...m):0,x=m.length?Math.max(...m):0,w=x-p,c=m.length>1?m.map((L,i)=>{let l=i/(m.length-1)*100,h=w>0?100-(L-p)/w*100:50;return`${l},${h}`}).join(" "):"",P=c?`0,100 ${c} 100,100`:"",B=c?c.split(" "):[],v=B.length?B[B.length-1].split(",").map(Number):null;return(0,e.jsxs)("div",{className:["resource-chart",a].filter(Boolean).join(" "),children:[(0,e.jsxs)("div",{className:"resource-chart-y","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length?V(x,r):"-"}),(0,e.jsx)("span",{children:m.length?V(p,r):"-"})]}),(0,e.jsxs)("div",{className:"resource-chart-plot",children:[(0,e.jsxs)("div",{className:"resource-spark-wrap",children:[(0,e.jsxs)("svg",{className:"resource-spark",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-label":m.length>1?void 0:u,children:[(0,e.jsx)("line",{x1:"0",y1:"12",x2:"100",y2:"12",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"50",x2:"100",y2:"50",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"88",x2:"100",y2:"88",className:"resource-grid-line"}),P?(0,e.jsx)("polygon",{className:"resource-spark-area",points:P}):null,c?(0,e.jsx)("polyline",{points:c}):null]}),v&&Number.isFinite(v[0])&&Number.isFinite(v[1])?(0,e.jsx)("span",{className:"resource-spark-dot","aria-hidden":"true",style:{left:`${v[0]}%`,top:`${v[1]}%`}}):null]}),(0,e.jsxs)("div",{className:"resource-chart-x","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length>1?t:u}),(0,e.jsx)("span",{children:m.length>1?o:""})]})]})]})}function I(n){let s=r=>r instanceof Element&&!!r.closest(".ui-info-tip");return(0,e.jsx)("section",{className:"metric-card","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:r=>{s(r.target)||n.onOpen()},onKeyDown:r=>{s(r.target)||r.key!=="Enter"&&r.key!==" "||(r.preventDefault(),n.onOpen())},children:n.children})}function M(n){return(0,e.jsx)("article",{className:"resource-trend-cell","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:n.onOpen,onKeyDown:s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),n.onOpen())},children:n.children})}function te(n){let s=k(),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=r.current;if(t)if(n.detail){if(!t.open)try{t.showModal()}catch{}}else t.open&&t.close()},[n.detail]),(0,g.useEffect)(()=>()=>{let t=r.current;t?.open&&t.close()},[]),(0,e.jsx)("dialog",{ref:r,className:"resource-detail-modal",onCancel:t=>{t.preventDefault(),n.onClose()},onClose:n.onClose,onClick:t=>{t.target===t.currentTarget&&n.onClose()},children:n.detail?(0,e.jsxs)("article",{className:"resource-detail-modal-card",children:[(0,e.jsxs)("header",{className:"resource-detail-modal-head",children:[(0,e.jsx)("h3",{children:n.detail.title}),(0,e.jsx)("button",{type:"button",className:"resource-detail-modal-close","aria-label":s("monitoring.modalClose"),title:s("monitoring.modalClose"),onClick:n.onClose})]}),(0,e.jsxs)("div",{className:"resource-detail-modal-body",children:[(0,e.jsxs)("section",{className:"resource-detail-summary",children:[(0,e.jsx)("strong",{children:n.detail.value}),(0,e.jsx)("p",{children:n.detail.detail})]}),n.detail.chart?(0,e.jsx)(R,{className:"resource-detail-chart",values:n.detail.chart.values,timestamps:n.detail.chart.timestamps,unit:n.detail.chart.unit,startLabel:n.detail.chart.startLabel,endLabel:n.detail.chart.endLabel,emptyLabel:n.detail.chart.emptyLabel}):(0,e.jsx)("p",{className:"resource-detail-empty",children:n.detail.emptyText})]})]}):null})}function ne({reasons:n}){return(0,e.jsx)("span",{className:"resource-reasons",children:(n??[]).join(", ")||"-"})}function y({label:n,value:s,tone:r}){return(0,e.jsxs)("span",{className:`resource-pill${r?` ${r}`:""}`,children:[(0,e.jsx)("span",{children:n}),(0,e.jsx)("b",{children:s})]})}function se({bots:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list",children:n.length?n.map(t=>{let o=t.runtime?.sessions,u=t.runtime?.daemonStatus??t.daemonStatus??"unknown",a=u==="online"?"ok":u==="offline"?"off":"warn";return(0,e.jsxs)(T,{className:"resource-list-item resource-bot-item",children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.botName,children:t.botName}),(0,e.jsxs)("span",{children:[r("monitoring.sessionsCount")," ",d(o?.total??t.sessions?.count)]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.daemon"),value:u,tone:a}),(0,e.jsx)(y,{label:r("monitoring.working"),value:d(o?.working),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.starting"),value:d(o?.starting)}),(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.total?.cpuPct,s)}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.total?.rssBytes)})]})})]},t.larkAppId)}):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function re({sessions:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell resource-session-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list resource-session-list",children:n.length?n.map(t=>(0,e.jsxs)(T,{className:`resource-list-item resource-session-item${t.tracked?" is-tracked":""}`,children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.title||t.sessionId,children:t.title||t.sessionId}),(0,e.jsxs)("span",{title:t.sessionId,children:[t.botName," \xB7 ",t.sessionId]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.current?.cpu1mPct??t.current?.cpuPct,s),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.current?.rssBytes)}),(0,e.jsx)(y,{label:r("monitoring.growth"),value:b(t.current?.rssGrowth5mBytes)}),(0,e.jsx)(y,{label:r("monitoring.confidence"),value:t.confidence??"unknown",tone:t.tracked?"ok":void 0}),(0,e.jsxs)("span",{className:"resource-pill resource-rank-pill",children:[(0,e.jsx)("span",{children:r("monitoring.rank")}),(0,e.jsx)(ne,{reasons:t.rankReasons})]})]})})]},t.sessionId)):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function oe({current:n}){let s=k(),r=n.runtime,t=q(n),o=Z(r?.sampleHealth?.status),u=r?.daemons?.total,a=r?.daemons?.online,m=r?.daemons?.offline??(Number.isFinite(Number(u))&&Number.isFinite(Number(a))?Math.max(0,Number(u)-Number(a)):void 0),p=r?.sessions?.total,x=r?.sessions?.working,w=r?.sessions?.starting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.runtimeHealth")}),(0,e.jsx)("section",{className:"panel runtime-health-panel",children:(0,e.jsxs)("div",{className:"runtime-health-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sampleHealth")}),(0,e.jsx)("strong",{children:(0,e.jsx)("span",{className:`runtime-status-pill ${o}`,children:s(`monitoring.sample.${o}`)})}),(0,e.jsxs)("small",{children:[s("monitoring.sampleAge")," ",E(r?.sampleHealth?.ageMs)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.daemonHealth")}),(0,e.jsxs)("strong",{children:[d(a),"/",d(u)]}),(0,e.jsxs)("small",{children:[d(m)," ",s("monitoring.offline")]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sessionHealth")}),(0,e.jsx)("strong",{children:d(p)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(x)," \xB7 ",s("monitoring.starting")," ",d(w)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.resourcePressure")}),(0,e.jsx)("strong",{children:S(n.host?.cpuPct,t)}),(0,e.jsxs)("small",{children:[s("monitoring.hostMemory")," ",N(n.host?.memUsedPct)," \xB7 RSS ",b(n.botmux?.rssBytes)]})]})]})})]})}function ae({runtime:n}){let s=k(),r=n?.sessions,t=r?.longestRunning,o=r?.longestWaiting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.sessionPressure")}),(0,e.jsx)("section",{className:"panel runtime-session-pressure",children:(0,e.jsxs)("div",{className:"runtime-session-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.statusDistribution")}),(0,e.jsx)("strong",{children:d(r?.total)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(r?.working)," \xB7 ",s("monitoring.starting")," ",d(r?.starting)," \xB7 ",s("monitoring.waiting")," ",d(r?.waiting)," \xB7 ",s("monitoring.idle")," ",d(r?.idle)," \xB7 ",s("monitoring.unknown")," ",d(r?.unknown)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestRunning")}),(0,e.jsx)("strong",{children:j(t)}),(0,e.jsx)("small",{children:E(t?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestWaiting")}),(0,e.jsx)("strong",{children:j(o)}),(0,e.jsx)("small",{children:E(o?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.unattributedSessions")}),(0,e.jsx)("strong",{children:d(r?.unattributed)}),(0,e.jsx)("small",{children:s("monitoring.unattributedHint")})]})]})})]})}function ie({initialCurrent:n=null,initialHistory:s=null,poll:r=!0}={}){let t=k(),[o,u]=(0,g.useState)(n),[a,m]=(0,g.useState)(s),[p,x]=(0,g.useState)("cpu"),[w,c]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(!r)return;let l=!1;async function h(){try{let[z,J]=await Promise.all([fetch("/api/resources/current",{cache:"no-store"}),fetch("/api/resources/history?range=3h",{cache:"no-store"})]),[Q,X]=await Promise.all([z.json(),J.json()]);l||(u(Q),m(X))}catch{l||(u({supported:!1,reason:"fetch_failed",bots:[],sessions:[]}),m({supported:!1,bots:[],sessions:[]}))}}h();let O=window.setInterval(()=>{h()},1e4);return()=>{l=!0,window.clearInterval(O)}},[r]);let P=o!==null&&a!==null,B=(0,g.useMemo)(()=>ee(o?.sessions??[],p),[o?.sessions,p]),v=o?.supported!==!1,L=q(o),i={hostStartLabel:F(a?.host?.timestamps,o?.sampledAt,t),botmuxStartLabel:F(a?.botmux?.timestamps,o?.sampledAt,t),endLabel:t("monitoring.chartNow"),emptyLabel:t("monitoring.chartNoData")};return(0,e.jsxs)("section",{className:"page resource-page",children:[(0,e.jsx)("div",{className:"page-heading",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("monitoring.eyebrow")}),(0,e.jsx)("h1",{children:t("monitoring.runtimeTitle")})]})}),P?null:(0,e.jsx)(G,{label:t("common.loading")}),P?(0,e.jsxs)(e.Fragment,{children:[o?(0,e.jsx)(oe,{current:o}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block resource-pressure-block",children:[(0,e.jsx)(f,{title:t("monitoring.resourcePressure")}),(0,e.jsx)("section",{className:"panel resource-pressure",children:(0,e.jsxs)("div",{className:"resource-metrics runtime-pressure-grid",children:[(0,e.jsxs)(I,{label:t("monitoring.hostCpu"),onOpen:()=>c({title:t("monitoring.hostCpu"),value:S(o?.host?.cpuPct,L),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostCpu")}),(0,e.jsx)("strong",{children:S(o?.host?.cpuPct,L)}),(0,e.jsxs)("small",{children:["load ",Number(o?.host?.load1??0).toFixed(2)]})]}),(0,e.jsxs)(I,{label:t("monitoring.hostMemory"),onOpen:()=>c({title:t("monitoring.hostMemory"),value:N(o?.host?.memUsedPct),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostMemory")}),(0,e.jsx)("strong",{children:N(o?.host?.memUsedPct)}),(0,e.jsx)("small",{children:t("monitoring.memoryOnly")})]}),(0,e.jsxs)(I,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(o?.botmux?.rssBytes),detail:o?.botmuxBreakdown?`${t("monitoring.botmuxSelf")} ${b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0))}
2
2
  ${t("monitoring.botmuxCli")} ${b(o.botmuxBreakdown.cli.rssBytes)}`:S(o?.botmux?.cpuPct,L),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsxs)("div",{className:"metric-label-with-help",children:[(0,e.jsx)("span",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(_,{label:t("monitoring.rssHelpLabel"),children:t("monitoring.rssHelp")})]}),(0,e.jsx)("strong",{children:b(o?.botmux?.rssBytes)}),o?.botmuxBreakdown&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxSelf")," ",b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0)),(0,e.jsxs)("span",{className:"metric-breakdown-detail",children:[" (",t("monitoring.botmuxDaemon")," ",b(o.botmuxBreakdown.daemon.rssBytes)," \xB7 ",t("monitoring.botmuxWorker")," ",b(o.botmuxBreakdown.worker.rssBytes),")"]})]}),(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxCli")," ",b(o.botmuxBreakdown.cli.rssBytes)]})]})]}),(0,e.jsxs)(I,{label:t("monitoring.trackedSessions"),onOpen:()=>c({title:t("monitoring.trackedSessions"),value:d(o?.rankings?.tracked?.length),detail:`${t("monitoring.currentSessions")} ${(o?.sessions??[]).length}`,emptyText:t("monitoring.trackedSessionHint")}),children:[(0,e.jsx)("span",{children:t("monitoring.trackedSessions")}),(0,e.jsx)("strong",{children:o?.rankings?.tracked?.length??0}),(0,e.jsxs)("small",{children:[t("monitoring.currentSessions")," ",(o?.sessions??[]).length]})]})]})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trends")}),(0,e.jsx)("section",{className:"panel resource-trends",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(0,e.jsxs)(M,{label:t("monitoring.trendHostCpu"),onOpen:()=>c({title:t("monitoring.trendHostCpu"),value:N(C(a?.host?.cpuPct)),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostCpu")}),(0,e.jsx)(R,{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendHostMemory"),onOpen:()=>c({title:t("monitoring.trendHostMemory"),value:N(C(a?.host?.memUsedPct)),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostMemory")}),(0,e.jsx)(R,{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendBotmuxCpu"),onOpen:()=>c({title:t("monitoring.trendBotmuxCpu"),value:N(C(a?.botmux?.cpuPct)),detail:t("monitoring.botRuntime"),chart:{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendBotmuxCpu")}),(0,e.jsx)(R,{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(C(a?.botmux?.rssBytes)),detail:t("monitoring.memoryOnly"),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(R,{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]})]})})]})]}):(0,e.jsx)("section",{className:"panel resource-unavailable",children:(0,e.jsxs)("div",{className:"resource-unavailable-card",children:[(0,e.jsx)("span",{className:"resource-unavailable-status","aria-hidden":"true"}),(0,e.jsxs)("div",{className:"resource-unavailable-copy",children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedKicker")}),(0,e.jsx)("h2",{children:t("monitoring.unsupportedTitle")}),(0,e.jsx)("p",{children:t("monitoring.unsupportedHint")})]}),(0,e.jsxs)("div",{className:"resource-unavailable-tags","aria-label":t("monitoring.unsupported"),children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedRuntimeOk")}),(0,e.jsx)("span",{children:t("monitoring.unsupportedResourceOnly")})]})]})}),o?(0,e.jsx)(ae,{runtime:o.runtime}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.botRuntime")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(se,{bots:o?.bots??[],cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.sessions"),children:(0,e.jsx)("div",{className:"resource-sortbar resource-sortbar-inline dashboard-toolbar",role:"group","aria-label":t("monitoring.sort"),children:(0,e.jsx)("div",{className:"segmented resource-sort-switch",children:["cpu","rss","growth","bot","status"].map(l=>(0,e.jsx)("button",{type:"button",className:p===l?"active":void 0,"aria-pressed":p===l,onClick:()=>x(l),children:t(`monitoring.sort.${l}`)},l))})})}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(re,{sessions:B,cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trackedSessionTrends")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(a?.sessions??[]).map(l=>{let h=`${l.botName} \xB7 ${l.title||l.sessionId}`,O=F(l.series?.timestamps,o?.sampledAt,t);return(0,e.jsxs)(M,{label:h,onOpen:()=>c({title:h,value:b(C(l.series?.rssBytes)),detail:l.sessionId,chart:{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{title:h,children:h}),(0,e.jsx)(R,{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]},l.sessionId)}),(a?.sessions??[]).length?null:(0,e.jsx)("div",{className:"empty",children:t("monitoring.noTrackedHistory")})]})})]})]}):null]}):null,(0,e.jsx)(te,{detail:w,onClose:()=>c(null)})]})}function ce(n){return U(n,(0,e.jsx)(ie,{}))}export{ie as MonitoringPage,re as SessionResourceTable,ce as renderMonitoringPage};
@@ -1 +1 @@
1
- import{d as x}from"./chunk-ECFC7UG2.js";import"./chunk-QITAMHW6.js";import"./chunk-BU3Q6XC6.js";import{c as p}from"./chunk-ARROO6TE.js";import{c as g,d as S,e as w}from"./chunk-3YZFAHNK.js";var n=g(S(),1);var e=g(w(),1),u=78222186;function y(t){return(t/1048576).toFixed(0)}function T(){let t=x(),[i,a]=(0,n.useState)(null),[c,l]=(0,n.useState)(""),[m,h]=(0,n.useState)(!1),d=(0,n.useRef)(null),r=(0,n.useRef)(!1),v=()=>{d.current&&(clearTimeout(d.current),d.current=null)};async function f(){if(!r.current)try{let s=await fetch("/api/game/status");if(r.current)return;if(!s.ok){a({state:"absent",received:0,total:u});return}let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch{r.current||(d.current=setTimeout(()=>{f()},1500))}}(0,n.useEffect)(()=>(r.current=!1,f(),()=>{r.current=!0,v()}),[]);async function b(){v(),h(!0),a({state:"downloading",received:0,total:u});try{let s=await fetch("/api/game/download",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({proxy:c.trim()})});if(r.current)return;if(!s.ok)throw new Error(`HTTP ${s.status}`);let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch(s){if(r.current)return;a({state:"error",received:0,total:u,error:s instanceof Error?s.message:String(s)})}finally{r.current||h(!1)}}return i?.state==="ready"?(0,e.jsx)("div",{className:"office-frame-shell",children:(0,e.jsx)("iframe",{className:"office-game-frame",src:"/game/index.html",title:"HD2D Office",allow:"autoplay"})}):(0,e.jsx)(P,{status:i??{state:"absent",received:0,total:u},title:t("nav.office"),proxy:c,starting:m,onProxyChange:l,onStart:()=>{b()}})}function P(t){let i=t.status.total||u,a=(0,n.useMemo)(()=>i?Math.min(100,Math.round(t.status.received/i*100)):0,[t.status.received,i]),c=t.status.state==="downloading",l=t.status.state==="error";return(0,e.jsxs)("div",{style:{margin:"auto",textAlign:"center",maxWidth:440,padding:32,color:"var(--fg,#e6e6e6)"},children:[(0,e.jsx)("h1",{style:{fontSize:18,fontWeight:600,lineHeight:1.2,margin:"0 0 8px"},children:t.title}),(0,e.jsxs)("div",{style:{fontSize:13,opacity:.7,lineHeight:1.7,marginBottom:20},children:["\u628A\u6BCF\u4E2A\u4F1A\u8BDD\u53D8\u6210\u529E\u516C\u5BA4\u91CC\u7684\u4E00\u4E2A\u673A\u5668\u4EBA\uFF0C\u5B9E\u65F6\u6620\u5C04\u5C4F\u5E55\u72B6\u6001\u3002",(0,e.jsx)("br",{}),"\u9996\u6B21\u8FDB\u5165\u9700\u4E0B\u8F7D\u7EA6 ",y(i)," MB \u6E38\u620F\u8D44\u6E90\uFF08\u4EC5\u4E00\u6B21\uFF0C\u4E4B\u540E\u672C\u5730\u7F13\u5B58\uFF09\u3002"]}),l?(0,e.jsxs)("div",{style:{color:"#e06c75",fontSize:12,marginBottom:14},children:["\u4E0A\u6B21\u4E0B\u8F7D\u5931\u8D25\uFF1A",t.status.error??"\u672A\u77E5\u9519\u8BEF",(0,e.jsx)("br",{}),(0,e.jsx)("span",{style:{opacity:.7},children:"\u586B\u4EE3\u7406\u540E\u70B9\u91CD\u8BD5"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{background:"var(--surface-muted)",borderRadius:"var(--radius-lg)",height:10,overflow:"hidden",marginBottom:10},children:(0,e.jsx)("div",{style:{height:"100%",width:`${a}%`,background:"var(--accent)",transition:"width .3s"}})}),(0,e.jsxs)("div",{style:{fontSize:12,opacity:.7},children:["\u4E0B\u8F7D\u4E2D... ",y(t.status.received)," / ",y(i)," MB\uFF08",a,"%\uFF09"]})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("input",{id:"hd2d-proxy",className:"office-proxy-input",type:"text",value:t.proxy,onChange:m=>t.onProxyChange(m.currentTarget.value),placeholder:"HTTP \u4EE3\u7406\uFF08\u53EF\u9009\uFF0C\u5982 http://127.0.0.1:7890\uFF09"}),(0,e.jsx)("div",{style:{fontSize:11,opacity:.5,marginBottom:14,textAlign:"left"},children:"\u8FDE\u4E0D\u4E0A GitHub \u65F6\u586B\u4EE3\u7406\uFF08\u4EC5\u7528\u4E8E\u4E0B\u8F7D\u672C\u8D44\u6E90\uFF0C\u4F1A\u8BB0\u4F4F\uFF09\u3002\u7559\u7A7A\u8D70\u76F4\u8FDE/\u7CFB\u7EDF\u4EE3\u7406\u73AF\u5883\u53D8\u91CF\u3002"}),(0,e.jsxs)("button",{id:"hd2d-load",type:"button",className:"page-primary-action office-load-button",disabled:t.starting,onClick:t.onStart,children:[l?"\u91CD\u8BD5":"\u52A0\u8F7D\u529E\u516C\u5BA4","\uFF08\u7EA6 ",y(i)," MB\uFF09"]})]})]})}function B(t){let i={maxWidth:t.style.maxWidth,padding:t.style.padding,flex:t.style.flex,minHeight:t.style.minHeight,minWidth:t.style.minWidth,display:t.style.display,overflow:t.style.overflow};t.style.maxWidth="none",t.style.padding="0",t.style.flex="1 1 auto",t.style.minHeight="0",t.style.minWidth="0",t.style.display="flex",t.style.overflow="hidden";let a=p(t,(0,e.jsx)(T,{}));return()=>{a(),t.style.maxWidth=i.maxWidth,t.style.padding=i.padding,t.style.flex=i.flex,t.style.minHeight=i.minHeight,t.style.minWidth=i.minWidth,t.style.display=i.display,t.style.overflow=i.overflow}}export{B as renderOfficePage};
1
+ import{d as x}from"./chunk-R3LJUCEO.js";import"./chunk-QITAMHW6.js";import"./chunk-K232GT3M.js";import{c as p}from"./chunk-ARROO6TE.js";import{c as g,d as S,e as w}from"./chunk-3YZFAHNK.js";var n=g(S(),1);var e=g(w(),1),u=78222186;function y(t){return(t/1048576).toFixed(0)}function T(){let t=x(),[i,a]=(0,n.useState)(null),[c,l]=(0,n.useState)(""),[m,h]=(0,n.useState)(!1),d=(0,n.useRef)(null),r=(0,n.useRef)(!1),v=()=>{d.current&&(clearTimeout(d.current),d.current=null)};async function f(){if(!r.current)try{let s=await fetch("/api/game/status");if(r.current)return;if(!s.ok){a({state:"absent",received:0,total:u});return}let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch{r.current||(d.current=setTimeout(()=>{f()},1500))}}(0,n.useEffect)(()=>(r.current=!1,f(),()=>{r.current=!0,v()}),[]);async function b(){v(),h(!0),a({state:"downloading",received:0,total:u});try{let s=await fetch("/api/game/download",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({proxy:c.trim()})});if(r.current)return;if(!s.ok)throw new Error(`HTTP ${s.status}`);let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch(s){if(r.current)return;a({state:"error",received:0,total:u,error:s instanceof Error?s.message:String(s)})}finally{r.current||h(!1)}}return i?.state==="ready"?(0,e.jsx)("div",{className:"office-frame-shell",children:(0,e.jsx)("iframe",{className:"office-game-frame",src:"/game/index.html",title:"HD2D Office",allow:"autoplay"})}):(0,e.jsx)(P,{status:i??{state:"absent",received:0,total:u},title:t("nav.office"),proxy:c,starting:m,onProxyChange:l,onStart:()=>{b()}})}function P(t){let i=t.status.total||u,a=(0,n.useMemo)(()=>i?Math.min(100,Math.round(t.status.received/i*100)):0,[t.status.received,i]),c=t.status.state==="downloading",l=t.status.state==="error";return(0,e.jsxs)("div",{style:{margin:"auto",textAlign:"center",maxWidth:440,padding:32,color:"var(--fg,#e6e6e6)"},children:[(0,e.jsx)("h1",{style:{fontSize:18,fontWeight:600,lineHeight:1.2,margin:"0 0 8px"},children:t.title}),(0,e.jsxs)("div",{style:{fontSize:13,opacity:.7,lineHeight:1.7,marginBottom:20},children:["\u628A\u6BCF\u4E2A\u4F1A\u8BDD\u53D8\u6210\u529E\u516C\u5BA4\u91CC\u7684\u4E00\u4E2A\u673A\u5668\u4EBA\uFF0C\u5B9E\u65F6\u6620\u5C04\u5C4F\u5E55\u72B6\u6001\u3002",(0,e.jsx)("br",{}),"\u9996\u6B21\u8FDB\u5165\u9700\u4E0B\u8F7D\u7EA6 ",y(i)," MB \u6E38\u620F\u8D44\u6E90\uFF08\u4EC5\u4E00\u6B21\uFF0C\u4E4B\u540E\u672C\u5730\u7F13\u5B58\uFF09\u3002"]}),l?(0,e.jsxs)("div",{style:{color:"#e06c75",fontSize:12,marginBottom:14},children:["\u4E0A\u6B21\u4E0B\u8F7D\u5931\u8D25\uFF1A",t.status.error??"\u672A\u77E5\u9519\u8BEF",(0,e.jsx)("br",{}),(0,e.jsx)("span",{style:{opacity:.7},children:"\u586B\u4EE3\u7406\u540E\u70B9\u91CD\u8BD5"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{background:"var(--surface-muted)",borderRadius:"var(--radius-lg)",height:10,overflow:"hidden",marginBottom:10},children:(0,e.jsx)("div",{style:{height:"100%",width:`${a}%`,background:"var(--accent)",transition:"width .3s"}})}),(0,e.jsxs)("div",{style:{fontSize:12,opacity:.7},children:["\u4E0B\u8F7D\u4E2D... ",y(t.status.received)," / ",y(i)," MB\uFF08",a,"%\uFF09"]})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("input",{id:"hd2d-proxy",className:"office-proxy-input",type:"text",value:t.proxy,onChange:m=>t.onProxyChange(m.currentTarget.value),placeholder:"HTTP \u4EE3\u7406\uFF08\u53EF\u9009\uFF0C\u5982 http://127.0.0.1:7890\uFF09"}),(0,e.jsx)("div",{style:{fontSize:11,opacity:.5,marginBottom:14,textAlign:"left"},children:"\u8FDE\u4E0D\u4E0A GitHub \u65F6\u586B\u4EE3\u7406\uFF08\u4EC5\u7528\u4E8E\u4E0B\u8F7D\u672C\u8D44\u6E90\uFF0C\u4F1A\u8BB0\u4F4F\uFF09\u3002\u7559\u7A7A\u8D70\u76F4\u8FDE/\u7CFB\u7EDF\u4EE3\u7406\u73AF\u5883\u53D8\u91CF\u3002"}),(0,e.jsxs)("button",{id:"hd2d-load",type:"button",className:"page-primary-action office-load-button",disabled:t.starting,onClick:t.onStart,children:[l?"\u91CD\u8BD5":"\u52A0\u8F7D\u529E\u516C\u5BA4","\uFF08\u7EA6 ",y(i)," MB\uFF09"]})]})]})}function B(t){let i={maxWidth:t.style.maxWidth,padding:t.style.padding,flex:t.style.flex,minHeight:t.style.minHeight,minWidth:t.style.minWidth,display:t.style.display,overflow:t.style.overflow};t.style.maxWidth="none",t.style.padding="0",t.style.flex="1 1 auto",t.style.minHeight="0",t.style.minWidth="0",t.style.display="flex",t.style.overflow="hidden";let a=p(t,(0,e.jsx)(T,{}));return()=>{a(),t.style.maxWidth=i.maxWidth,t.style.padding=i.padding,t.style.flex=i.flex,t.style.minHeight=i.minHeight,t.style.minWidth=i.minWidth,t.style.display=i.display,t.style.overflow=i.overflow}}export{B as renderOfficePage};
@@ -1 +1 @@
1
- import{a as re,b as le}from"./chunk-Z67OSM5P.js";import{b as ae}from"./chunk-SZOB6VK2.js";import{b as I,d as M,e as E,f as L,g as ee,k as te,m as ne,n as se,o as oe,r as ie}from"./chunk-NYY66DNC.js";import{b as q,d as A}from"./chunk-ECFC7UG2.js";import"./chunk-QITAMHW6.js";import{B as j,C as x,G as V,I as T,J as Y,K as y,L as b,M as N,z as C}from"./chunk-BU3Q6XC6.js";import{c as G}from"./chunk-ARROO6TE.js";import{c as _,d as ue,e as Q}from"./chunk-3YZFAHNK.js";var r=_(ue(),1);var e=_(Q(),1),pe=new Set(["working","analyzing","active"]),ce="botmux.overview.teamExpanded",ve="botmux.overview.activeSort",$=5,D=1,we=6,ge=7,B=24,he=4e3;function fe(){try{return window.localStorage.getItem(ce)==="1"}catch{return!1}}function Se(t){try{window.localStorage.setItem(ce,t?"1":"0")}catch{}}function be(t){return t==="attention"?"attention":"time"}function Ne(){try{return be(window.localStorage.getItem(ve))}catch{return"time"}}function Ae(t){try{window.localStorage.setItem(ve,t)}catch{}}function ke(t,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...t].sort((i,a)=>{let v=b(i)?0:1,w=b(a)?0:1;if(v!==w)return v-w;if(v===0){let c=N(i)-N(a);if(c!==0)return c}return o(i,a)}):[...t].sort(o)}function ye(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Me(t,s){let o=String(t??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Re(t){if(!t)return D*$;let s=window.getComputedStyle(t).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||$)*D}function Ce(t){let s=(0,r.useRef)(null),o=(0,r.useRef)(t);o.current=t;let[,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{s.current===null&&(s.current=Array(B).fill(o.current));let k=window.setInterval(()=>{let m=s.current;m&&(m.push(o.current),m.length>B&&m.shift(),i(u=>u+1))},he);return()=>window.clearInterval(k)},[]);let a=s.current??Array(B).fill(t),v=Math.min(...a),c=Math.max(...a)-v,f=100,l=32,d=4,R=a.map((k,m)=>{let u=m/(a.length-1)*f,p=c===0?l/2:l-d-(k-v)/c*(l-d*2);return`${u.toFixed(1)},${p.toFixed(1)}`}).join(" ");return{line:R,area:`0,${l} ${R} ${f},${l}`}}function xe({kind:t}){let s={viewBox:"0 0 24 24",width:18,height:18,fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0};return t==="need"?(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"}),(0,e.jsx)("path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0"})]}):t==="work"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M3 12h4l3 8 4-16 3 8h4"})}):t==="active"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"})}):(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("rect",{x:"4",y:"8",width:"16",height:"12",rx:"3"}),(0,e.jsx)("path",{d:"M12 8V4"}),(0,e.jsx)("circle",{cx:"12",cy:"3",r:"1"}),(0,e.jsx)("path",{d:"M9 14h.01M15 14h.01"})]})}function O(t){let{line:s,area:o}=Ce(t.value);return(0,e.jsxs)("article",{className:`stat-chip stat-chip--${t.tone}`,children:[(0,e.jsx)("span",{className:"stat-chip-icon",children:(0,e.jsx)(xe,{kind:t.tone})}),(0,e.jsxs)("div",{className:"stat-chip-body",children:[(0,e.jsxs)("b",{className:"stat-chip-value",children:[t.value,t.suffix?(0,e.jsx)("small",{className:"stat-chip-suffix",children:t.suffix}):null]}),(0,e.jsx)("span",{className:"stat-chip-label",children:t.label})]}),(0,e.jsxs)("svg",{className:"stat-chip-spark",viewBox:"0 0 100 32",preserveAspectRatio:"none","aria-hidden":"true",children:[(0,e.jsx)("polygon",{points:o}),(0,e.jsx)("polyline",{points:s,vectorEffect:"non-scaling-stroke"})]})]})}function Te({card:t}){let s=A(),o=j(t.larkAppId,t.brand),i=!t.online&&t.active.length===0,a=t.attention.length>0,v=t.busy.length>0,w=a?"warn":v?"busy":i?"off":"ok",c;if(a){let l=[...t.attention].sort((d,h)=>N(d)-N(h))[0];c=(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})," \xB7 ",b(l)??""]})}else if(v){let l=[...t.busy].sort((d,h)=>Number(h.lastMessageAt??0)-Number(d.lastMessageAt??0))[0];c=(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})}else i?c=s("overview.botOffline"):c=s("overview.botIdle");let f=a?(0,e.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):v?(0,e.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:t.busy.length})}):i?(0,e.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,e.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,e.jsxs)("article",{className:`mate${a?" mate-attn":""}${i?" mate-off":""}`,children:[o?(0,e.jsx)("a",{className:"mate-console",href:o,target:"_blank",rel:"noopener noreferrer","data-tip":s("overview.botConsole"),"aria-label":s("overview.botConsole"),children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,e.jsx)("path",{d:"M7 17 17 7M9 7h8v8"})})}):null,(0,e.jsxs)("div",{className:"mate-top",children:[(0,e.jsx)(I,{html:x({name:t.botName,larkAppId:t.larkAppId,avatarUrl:t.botAvatarUrl,dot:w})}),(0,e.jsxs)("div",{className:"mate-id",children:[(0,e.jsx)("b",{children:t.botName}),(0,e.jsx)("span",{className:"mate-role",children:t.cliId})]})]}),(0,e.jsx)("div",{className:"mate-task",children:c}),(0,e.jsxs)("div",{className:"mate-foot",children:[f,(0,e.jsx)("span",{children:t.lastActiveAt?s("overview.lastActive",{time:C(t.lastActiveAt)}):s("common.never")})]})]})}function Ie({session:t}){let s=A(),o=T(t),i=b(t)??"";return(0,e.jsxs)("a",{className:"attn-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"attn-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[i," \xB7 ",s("overview.waitingFor",{time:C(N(t))})]})]}),(0,e.jsx)("span",{className:"attn-action",children:s("strip.handle")})]})}function Ee({session:t}){let s=A(),o=T(t),i=String(t.status??"unknown");return(0,e.jsxs)("a",{className:"work-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"work-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[o," \xB7 ",Y(t)??t.cliId??"unknown"," \xB7 ",C(t.lastMessageAt)]})]}),(0,e.jsx)("span",{className:`status work-status status-${ye(i)}`,children:Me(i,s)})]})}function Le({schedule:t,timeZone:s}){let o=t.nextRunAt?new Date(t.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,e.jsxs)(se,{kind:"schedule",children:[(0,e.jsx)("span",{className:"sched-clock","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,e.jsx)("path",{d:"M12 7v5l3 2"})]})}),(0,e.jsxs)(oe,{children:[(0,e.jsx)("strong",{children:t.name??t.id}),(0,e.jsxs)("span",{children:[T(t)," \xB7 ",t.parsed?.display??""]})]}),(0,e.jsx)("span",{className:"overview-list-meta",children:(0,e.jsx)(te,{text:o,showPopover:!1,durationMs:2600})})]})}function Oe({mode:t,onModeChange:s}){let o=A(),i=o(t==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,e.jsx)(ie,{className:"overview-active-sort-menu",label:i,value:t,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function He(){let t=A(),s=(0,r.useRef)(null),[o,i]=(0,r.useState)(fe),[a,v]=(0,r.useState)(Ne),[w,c]=(0,r.useState)(D*$),[f,l]=(0,r.useState)(0),{sessions:d,schedules:h,scheduleTimeZone:R,schedulesAvailable:k,online:m}=q(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone,schedulesAvailable:n.schedulesAvailable,online:n.online}));(0,r.useEffect)(()=>{let n=0,g=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let U=Re(s.current);c(Z=>Z===U?Z:U)})};g();let P=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(g);return P&&s.current&&P.observe(s.current),window.addEventListener("resize",g),()=>{window.cancelAnimationFrame(n),P?.disconnect(),window.removeEventListener("resize",g)}},[]),(0,r.useEffect)(()=>{re().then(()=>l(n=>n+1)),V().then(()=>l(n=>n+1))},[]);let u=(0,r.useMemo)(()=>d.filter(n=>n.status!=="closed"),[d]),p=(0,r.useMemo)(()=>le(d),[d,f]),z=o?p:p.slice(0,w),S=(0,r.useMemo)(()=>u.filter(n=>b(n)),[u]),W=(0,r.useMemo)(()=>ke(S,a).slice(0,we),[S,a]),H=(0,r.useMemo)(()=>u.filter(n=>pe.has(String(n.status))).sort((n,g)=>Number(g.lastMessageAt??0)-Number(n.lastMessageAt??0)),[u]),F=H.slice(0,ge),X=(0,r.useMemo)(()=>p.filter(n=>n.online||n.active.length>0).length,[p]),J=(0,r.useMemo)(()=>h.filter(n=>n.nextRunAt).sort((n,g)=>Date.parse(n.nextRunAt)-Date.parse(g.nextRunAt)).slice(0,5),[h]),K=k&&J.length>0,de=()=>{i(n=>(Se(!n),!n))},me=n=>{v(n),Ae(n)};return(0,e.jsxs)("section",{className:"page hero-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{className:"overview-head",children:[(0,e.jsx)("p",{className:"eyebrow",children:t("app.subtitle")}),(0,e.jsx)("h1",{children:t("overview.title")}),(0,e.jsxs)("p",{className:"overview-subtitle",children:[(0,e.jsx)("span",{children:t("overview.headingSubtitle",{bots:X,needs:S.length})}),(0,e.jsxs)("span",{className:`overview-live${m?" is-online":" is-offline"}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),t(m?"overview.liveSync":"overview.syncOffline")]})]})]}),(0,e.jsxs)("div",{className:"page-heading-actions",children:[(0,e.jsx)("a",{className:"btn-link",href:"#/monitoring",children:t("nav.monitoring")}),(0,e.jsx)(ee,{className:"page-primary-action",onClick:()=>ae(),children:t("nav.createSession")})]})]}),(0,e.jsxs)("div",{className:"overview-stats",children:[(0,e.jsx)(O,{tone:"need",label:t("overview.attention"),value:S.length}),(0,e.jsx)(O,{tone:"work",label:t("overview.workingSessions"),value:H.length}),(0,e.jsx)(O,{tone:"active",label:t("overview.activeSessions"),value:u.length}),(0,e.jsx)(O,{tone:"online",label:t("overview.onlineBots"),value:X,suffix:`/ ${p.length}`})]}),(0,e.jsxs)("section",{className:"overview-block attention-section",children:[(0,e.jsx)(M,{title:t("overview.attention"),count:t("strip.pending",{count:S.length}),children:S.length>1?(0,e.jsx)(L,{children:(0,e.jsx)(Oe,{mode:a,onModeChange:me})}):null}),W.length?(0,e.jsx)("div",{className:"attn-list",role:"list",children:W.map(n=>(0,e.jsx)(Ie,{session:n},n.sessionId))}):(0,e.jsxs)("div",{className:"attn-empty",children:[(0,e.jsx)("span",{className:"attn-empty-icon","aria-hidden":"true",children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,e.jsx)("path",{d:"M20 6 9 17l-5-5"})})}),(0,e.jsx)("span",{children:t("overview.allClear")})]})]}),(0,e.jsxs)("div",{className:`overview-layout${K?"":" overview-layout--single"}`,children:[(0,e.jsxs)("div",{className:"overview-main",children:[(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.workingSessions"),count:String(H.length),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/sessions",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("section",{className:"panel active-sessions-panel",children:F.length?(0,e.jsx)("div",{className:"work-list",role:"list",children:F.map(n=>(0,e.jsx)(Ee,{session:n},n.sessionId))}):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})})]}),(0,e.jsxs)("section",{className:"overview-block team-section",children:[(0,e.jsx)(M,{title:t("overview.team"),count:t("overview.teamCount",{count:p.length}),hint:t("overview.teamHint"),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/bot-defaults",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:z.length?z.map(n=>(0,e.jsx)(Te,{card:n},n.larkAppId??n.botName)):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})}),p.length>w?(0,e.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:de,children:t(o?"overview.teamCollapse":"overview.teamExpand")}):null]})]}),K?(0,e.jsx)("aside",{className:"overview-side",children:(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.upcomingSchedules"),children:(0,e.jsx)(E,{href:"#/schedules",children:t("overview.viewAllPlain")})}),(0,e.jsx)("section",{className:"panel schedules-panel",children:(0,e.jsx)(ne,{id:"next-schedules",children:J.map(n=>(0,e.jsx)(Le,{schedule:n,timeZone:R},n.id))})})]})}):null]})]})}function We(t){t.classList.add("overview-root");let s=G(t,(0,e.jsx)(He,{}));return()=>{s(),t.classList.remove("overview-root")}}export{We as renderOverviewPage};
1
+ import{a as re,b as le}from"./chunk-YJA3KY3J.js";import{b as ae}from"./chunk-SZOB6VK2.js";import{b as I,d as M,e as E,f as L,g as ee,k as te,m as ne,n as se,o as oe,r as ie}from"./chunk-NYY66DNC.js";import{b as q,d as A}from"./chunk-R3LJUCEO.js";import"./chunk-QITAMHW6.js";import{B as j,C as x,G as V,I as T,J as Y,K as y,L as b,M as N,z as C}from"./chunk-K232GT3M.js";import{c as G}from"./chunk-ARROO6TE.js";import{c as _,d as ue,e as Q}from"./chunk-3YZFAHNK.js";var r=_(ue(),1);var e=_(Q(),1),pe=new Set(["working","analyzing","active"]),ce="botmux.overview.teamExpanded",ve="botmux.overview.activeSort",$=5,D=1,we=6,ge=7,B=24,he=4e3;function fe(){try{return window.localStorage.getItem(ce)==="1"}catch{return!1}}function Se(t){try{window.localStorage.setItem(ce,t?"1":"0")}catch{}}function be(t){return t==="attention"?"attention":"time"}function Ne(){try{return be(window.localStorage.getItem(ve))}catch{return"time"}}function Ae(t){try{window.localStorage.setItem(ve,t)}catch{}}function ke(t,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...t].sort((i,a)=>{let v=b(i)?0:1,w=b(a)?0:1;if(v!==w)return v-w;if(v===0){let c=N(i)-N(a);if(c!==0)return c}return o(i,a)}):[...t].sort(o)}function ye(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Me(t,s){let o=String(t??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Re(t){if(!t)return D*$;let s=window.getComputedStyle(t).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||$)*D}function Ce(t){let s=(0,r.useRef)(null),o=(0,r.useRef)(t);o.current=t;let[,i]=(0,r.useState)(0);(0,r.useEffect)(()=>{s.current===null&&(s.current=Array(B).fill(o.current));let k=window.setInterval(()=>{let m=s.current;m&&(m.push(o.current),m.length>B&&m.shift(),i(u=>u+1))},he);return()=>window.clearInterval(k)},[]);let a=s.current??Array(B).fill(t),v=Math.min(...a),c=Math.max(...a)-v,f=100,l=32,d=4,R=a.map((k,m)=>{let u=m/(a.length-1)*f,p=c===0?l/2:l-d-(k-v)/c*(l-d*2);return`${u.toFixed(1)},${p.toFixed(1)}`}).join(" ");return{line:R,area:`0,${l} ${R} ${f},${l}`}}function xe({kind:t}){let s={viewBox:"0 0 24 24",width:18,height:18,fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0};return t==="need"?(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"}),(0,e.jsx)("path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0"})]}):t==="work"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M3 12h4l3 8 4-16 3 8h4"})}):t==="active"?(0,e.jsx)("svg",{...s,children:(0,e.jsx)("path",{d:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"})}):(0,e.jsxs)("svg",{...s,children:[(0,e.jsx)("rect",{x:"4",y:"8",width:"16",height:"12",rx:"3"}),(0,e.jsx)("path",{d:"M12 8V4"}),(0,e.jsx)("circle",{cx:"12",cy:"3",r:"1"}),(0,e.jsx)("path",{d:"M9 14h.01M15 14h.01"})]})}function O(t){let{line:s,area:o}=Ce(t.value);return(0,e.jsxs)("article",{className:`stat-chip stat-chip--${t.tone}`,children:[(0,e.jsx)("span",{className:"stat-chip-icon",children:(0,e.jsx)(xe,{kind:t.tone})}),(0,e.jsxs)("div",{className:"stat-chip-body",children:[(0,e.jsxs)("b",{className:"stat-chip-value",children:[t.value,t.suffix?(0,e.jsx)("small",{className:"stat-chip-suffix",children:t.suffix}):null]}),(0,e.jsx)("span",{className:"stat-chip-label",children:t.label})]}),(0,e.jsxs)("svg",{className:"stat-chip-spark",viewBox:"0 0 100 32",preserveAspectRatio:"none","aria-hidden":"true",children:[(0,e.jsx)("polygon",{points:o}),(0,e.jsx)("polyline",{points:s,vectorEffect:"non-scaling-stroke"})]})]})}function Te({card:t}){let s=A(),o=j(t.larkAppId,t.brand),i=!t.online&&t.active.length===0,a=t.attention.length>0,v=t.busy.length>0,w=a?"warn":v?"busy":i?"off":"ok",c;if(a){let l=[...t.attention].sort((d,h)=>N(d)-N(h))[0];c=(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})," \xB7 ",b(l)??""]})}else if(v){let l=[...t.busy].sort((d,h)=>Number(h.lastMessageAt??0)-Number(d.lastMessageAt??0))[0];c=(0,e.jsx)("b",{children:(y(l.title)||l.sessionId).slice(0,60)})}else i?c=s("overview.botOffline"):c=s("overview.botIdle");let f=a?(0,e.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):v?(0,e.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:t.busy.length})}):i?(0,e.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,e.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,e.jsxs)("article",{className:`mate${a?" mate-attn":""}${i?" mate-off":""}`,children:[o?(0,e.jsx)("a",{className:"mate-console",href:o,target:"_blank",rel:"noopener noreferrer","data-tip":s("overview.botConsole"),"aria-label":s("overview.botConsole"),children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,e.jsx)("path",{d:"M7 17 17 7M9 7h8v8"})})}):null,(0,e.jsxs)("div",{className:"mate-top",children:[(0,e.jsx)(I,{html:x({name:t.botName,larkAppId:t.larkAppId,avatarUrl:t.botAvatarUrl,dot:w})}),(0,e.jsxs)("div",{className:"mate-id",children:[(0,e.jsx)("b",{children:t.botName}),(0,e.jsx)("span",{className:"mate-role",children:t.cliId})]})]}),(0,e.jsx)("div",{className:"mate-task",children:c}),(0,e.jsxs)("div",{className:"mate-foot",children:[f,(0,e.jsx)("span",{children:t.lastActiveAt?s("overview.lastActive",{time:C(t.lastActiveAt)}):s("common.never")})]})]})}function Ie({session:t}){let s=A(),o=T(t),i=b(t)??"";return(0,e.jsxs)("a",{className:"attn-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"attn-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[i," \xB7 ",s("overview.waitingFor",{time:C(N(t))})]})]}),(0,e.jsx)("span",{className:"attn-action",children:s("strip.handle")})]})}function Ee({session:t}){let s=A(),o=T(t),i=String(t.status??"unknown");return(0,e.jsxs)("a",{className:"work-item",href:"#/sessions",role:"listitem",children:[(0,e.jsx)(I,{html:x({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("span",{className:"work-main",children:[(0,e.jsx)("b",{children:(y(t.title)||t.sessionId).slice(0,64)}),(0,e.jsxs)("span",{children:[o," \xB7 ",Y(t)??t.cliId??"unknown"," \xB7 ",C(t.lastMessageAt)]})]}),(0,e.jsx)("span",{className:`status work-status status-${ye(i)}`,children:Me(i,s)})]})}function Le({schedule:t,timeZone:s}){let o=t.nextRunAt?new Date(t.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,e.jsxs)(se,{kind:"schedule",children:[(0,e.jsx)("span",{className:"sched-clock","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,e.jsx)("path",{d:"M12 7v5l3 2"})]})}),(0,e.jsxs)(oe,{children:[(0,e.jsx)("strong",{children:t.name??t.id}),(0,e.jsxs)("span",{children:[T(t)," \xB7 ",t.parsed?.display??""]})]}),(0,e.jsx)("span",{className:"overview-list-meta",children:(0,e.jsx)(te,{text:o,showPopover:!1,durationMs:2600})})]})}function Oe({mode:t,onModeChange:s}){let o=A(),i=o(t==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,e.jsx)(ie,{className:"overview-active-sort-menu",label:i,value:t,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function He(){let t=A(),s=(0,r.useRef)(null),[o,i]=(0,r.useState)(fe),[a,v]=(0,r.useState)(Ne),[w,c]=(0,r.useState)(D*$),[f,l]=(0,r.useState)(0),{sessions:d,schedules:h,scheduleTimeZone:R,schedulesAvailable:k,online:m}=q(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone,schedulesAvailable:n.schedulesAvailable,online:n.online}));(0,r.useEffect)(()=>{let n=0,g=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let U=Re(s.current);c(Z=>Z===U?Z:U)})};g();let P=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(g);return P&&s.current&&P.observe(s.current),window.addEventListener("resize",g),()=>{window.cancelAnimationFrame(n),P?.disconnect(),window.removeEventListener("resize",g)}},[]),(0,r.useEffect)(()=>{re().then(()=>l(n=>n+1)),V().then(()=>l(n=>n+1))},[]);let u=(0,r.useMemo)(()=>d.filter(n=>n.status!=="closed"),[d]),p=(0,r.useMemo)(()=>le(d),[d,f]),z=o?p:p.slice(0,w),S=(0,r.useMemo)(()=>u.filter(n=>b(n)),[u]),W=(0,r.useMemo)(()=>ke(S,a).slice(0,we),[S,a]),H=(0,r.useMemo)(()=>u.filter(n=>pe.has(String(n.status))).sort((n,g)=>Number(g.lastMessageAt??0)-Number(n.lastMessageAt??0)),[u]),F=H.slice(0,ge),X=(0,r.useMemo)(()=>p.filter(n=>n.online||n.active.length>0).length,[p]),J=(0,r.useMemo)(()=>h.filter(n=>n.nextRunAt).sort((n,g)=>Date.parse(n.nextRunAt)-Date.parse(g.nextRunAt)).slice(0,5),[h]),K=k&&J.length>0,de=()=>{i(n=>(Se(!n),!n))},me=n=>{v(n),Ae(n)};return(0,e.jsxs)("section",{className:"page hero-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{className:"overview-head",children:[(0,e.jsx)("p",{className:"eyebrow",children:t("app.subtitle")}),(0,e.jsx)("h1",{children:t("overview.title")}),(0,e.jsxs)("p",{className:"overview-subtitle",children:[(0,e.jsx)("span",{children:t("overview.headingSubtitle",{bots:X,needs:S.length})}),(0,e.jsxs)("span",{className:`overview-live${m?" is-online":" is-offline"}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),t(m?"overview.liveSync":"overview.syncOffline")]})]})]}),(0,e.jsxs)("div",{className:"page-heading-actions",children:[(0,e.jsx)("a",{className:"btn-link",href:"#/monitoring",children:t("nav.monitoring")}),(0,e.jsx)(ee,{className:"page-primary-action",onClick:()=>ae(),children:t("nav.createSession")})]})]}),(0,e.jsxs)("div",{className:"overview-stats",children:[(0,e.jsx)(O,{tone:"need",label:t("overview.attention"),value:S.length}),(0,e.jsx)(O,{tone:"work",label:t("overview.workingSessions"),value:H.length}),(0,e.jsx)(O,{tone:"active",label:t("overview.activeSessions"),value:u.length}),(0,e.jsx)(O,{tone:"online",label:t("overview.onlineBots"),value:X,suffix:`/ ${p.length}`})]}),(0,e.jsxs)("section",{className:"overview-block attention-section",children:[(0,e.jsx)(M,{title:t("overview.attention"),count:t("strip.pending",{count:S.length}),children:S.length>1?(0,e.jsx)(L,{children:(0,e.jsx)(Oe,{mode:a,onModeChange:me})}):null}),W.length?(0,e.jsx)("div",{className:"attn-list",role:"list",children:W.map(n=>(0,e.jsx)(Ie,{session:n},n.sessionId))}):(0,e.jsxs)("div",{className:"attn-empty",children:[(0,e.jsx)("span",{className:"attn-empty-icon","aria-hidden":"true",children:(0,e.jsx)("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,e.jsx)("path",{d:"M20 6 9 17l-5-5"})})}),(0,e.jsx)("span",{children:t("overview.allClear")})]})]}),(0,e.jsxs)("div",{className:`overview-layout${K?"":" overview-layout--single"}`,children:[(0,e.jsxs)("div",{className:"overview-main",children:[(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.workingSessions"),count:String(H.length),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/sessions",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("section",{className:"panel active-sessions-panel",children:F.length?(0,e.jsx)("div",{className:"work-list",role:"list",children:F.map(n=>(0,e.jsx)(Ee,{session:n},n.sessionId))}):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})})]}),(0,e.jsxs)("section",{className:"overview-block team-section",children:[(0,e.jsx)(M,{title:t("overview.team"),count:t("overview.teamCount",{count:p.length}),hint:t("overview.teamHint"),children:(0,e.jsx)(L,{children:(0,e.jsx)(E,{href:"#/bot-defaults",children:t("overview.viewAllPlain")})})}),(0,e.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:z.length?z.map(n=>(0,e.jsx)(Te,{card:n},n.larkAppId??n.botName)):(0,e.jsx)("div",{className:"empty",children:t("overview.noSessions")})}),p.length>w?(0,e.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:de,children:t(o?"overview.teamCollapse":"overview.teamExpand")}):null]})]}),K?(0,e.jsx)("aside",{className:"overview-side",children:(0,e.jsxs)("section",{className:"overview-block",children:[(0,e.jsx)(M,{title:t("overview.upcomingSchedules"),children:(0,e.jsx)(E,{href:"#/schedules",children:t("overview.viewAllPlain")})}),(0,e.jsx)("section",{className:"panel schedules-panel",children:(0,e.jsx)(ne,{id:"next-schedules",children:J.map(n=>(0,e.jsx)(Le,{schedule:n,timeZone:R},n.id))})})]})}):null]})]})}function We(t){t.classList.add("overview-root");let s=G(t,(0,e.jsx)(He,{}));return()=>{s(),t.classList.remove("overview-root")}}export{We as renderOverviewPage};
@@ -1,3 +1,3 @@
1
- import{a as Ot,b as Ut,c as jt,d as Kt}from"./chunk-R3FXBFQH.js";import{a as we}from"./chunk-CEUCNZFJ.js";import{b as $t,c as pe,h as Oe,q as Ue}from"./chunk-NYY66DNC.js";import{d as Gt}from"./chunk-ECFC7UG2.js";import"./chunk-QITAMHW6.js";import{C as Bt,G as Dt}from"./chunk-BU3Q6XC6.js";import{c as $e}from"./chunk-ARROO6TE.js";import{c as Fe,d as xn,e as Ft}from"./chunk-3YZFAHNK.js";var a=Fe(xn(),1);function Vt(t,n){let r=n.trim().toLowerCase();return r?t.filter(o=>o.openId.toLowerCase().includes(r)||o.name.toLowerCase().includes(r)||o.memberType.toLowerCase().includes(r)):t}function Ht(t){return[...new Set([...t].filter(Boolean))]}function qt(t){let n=new Set(t.targetIds.filter(Boolean));if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)o.delete(c),t.listening||o.add(c);return{include:[],exclude:Ht(o)}}let r=new Set(t.include);for(let o of n)r.delete(o),t.listening&&r.add(o);return{include:Ht(r),exclude:[]}}function je(t){let n=t.targetIds.filter(Boolean);if(n.length===0)return t.mode==="all_except_excluded"?"listen":"ignore";let r=new Set;if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)r.add(o.has(c)?"ignore":"listen")}else{let o=new Set(t.include);for(let c of n)r.add(o.has(c)?"listen":"ignore")}return r.size===1?[...r][0]:"mixed"}function Wt(t,n,r){let o={};for(let c of t){if(!c)continue;let m=n(c),f=m==="user"||m==="bot"?m:r?.[c];(f==="user"||f==="bot")&&(o[c]=f)}return o}var j=32768,Yt=Math.floor(j*.95),fe=32768,zt=Math.floor(fe*.95),Ke=5,He=20,Nn=/^[A-Za-z0-9._-]{1,64}$/;function Ve(t){return Nn.test(t)&&t!=="."&&t!==".."}function Jt(t=location.hash){let[,n=""]=t.split("?");return new URLSearchParams(n).get("chatId")?.trim()||null}function qe(t,n){return jt(t,n)}function Ne(t){return new TextEncoder().encode(t).length}function Xt(t){return t.memberBots.filter(n=>n.inChat&&n.hasRole).length}function Qt(t){return t.memberBots.filter(n=>n.inChat).length}function ge(t,n){return n?t.find(r=>r.larkAppId===n):void 0}function Zt(t,n){let r=n.toLowerCase();return r?t.filter(o=>{let c=o.chatId.toLowerCase().includes(r)||(o.name??"").toLowerCase().includes(r),m=o.memberBots.some(f=>f.larkAppId.toLowerCase().includes(r)||(f.botName??"").toLowerCase().includes(r));return c||m}):t}function er(t,n){let r=n.toLowerCase();return t.filter(o=>!r||o.profileId.toLowerCase().includes(r))}async function x(t){return t.json().catch(()=>({}))}async function tr(){let t=await fetch("/api/groups"),n=await x(t);return{bots:(n.bots??[]).map(r=>({larkAppId:r.larkAppId,botName:r.botName??r.larkAppId,botAvatarUrl:r.botAvatarUrl})),groups:(n.chats??[]).map(r=>({chatId:r.chatId,name:r.name??r.chatId,memberBots:(r.memberBots??[]).map(o=>({larkAppId:o.larkAppId,botName:o.botName??o.larkAppId,inChat:o.inChat??!1,hasRole:o.hasRole??!1,hasMessageListener:o.hasMessageListener??!1,oncallChat:o.oncallChat??null}))}))}}async function rr(){let t=await fetch("/api/role-profiles");return(await x(t)).profiles??[]}async function z(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t)}`);return(await x(n)).entries??[]}async function We(t,n){let r=await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function nr(t,n,r,o,c){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,injectMode:o,dispatchCompletionEnabled:c})})).ok}async function sr(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({injectMode:r})})).ok}async function or(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({dispatchCompletionEnabled:r})})).ok}async function lr(t,n){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function Ye(t,n){let r=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return(await x(r)).listener??{enabled:!1,prompt:"",messagePolicy:{scope:"top_level"}}}async function ir(t,n,r){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(r)})).ok}async function ar(t,n){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}function xe(t){return Number.isFinite(t)?Math.min(He,Math.max(1,Math.floor(t))):Ke}function me(t){return String(t).padStart(2,"0")}function dr(t){if(!t)return"";let n=Number(t);if(!Number.isFinite(n)||n<=0)return"";let r=n<1e12?n*1e3:n,o=new Date(r);return Number.isFinite(o.getTime())?[o.getFullYear(),"-",me(o.getMonth()+1),"-",me(o.getDate())," ",me(o.getHours()),":",me(o.getMinutes()),":",me(o.getSeconds())].join(""):""}async function cr(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:xe(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??xe(o),matches:m.matches??[],error:m.error}}async function ur(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:xe(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??xe(o),matches:m.matches??[],results:m.results,error:m.error}}async function pr(t,n,r){let o=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview/${encodeURIComponent(r)}`),c=await x(o);return{ok:o.ok&&c.ok!==!1,runId:c.runId,results:c.results,error:c.error}}async function mr(t,n){let r=await fetch(`/api/groups/${encodeURIComponent(t)}/${encodeURIComponent(n)}/members-display`);return(await x(r)).members??[]}async function fr(t,n){let r=await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function gr(t,n,r){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,allowEmpty:!0})})).ok}async function yr(t,n){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function vr(t,n){let r=await Promise.all(n.map(async f=>{try{let p=await fetch(`/api/role-profiles/${encodeURIComponent(f.profileId)}`),v=await x(p);return[f.profileId,Array.isArray(v.entries)?v.entries:[]]}catch{return[f.profileId,[]]}})),o=new Set,c=[];for(let f of t)for(let p of f.memberBots){if(!p.inChat||!p.hasRole)continue;let v=qe(p.larkAppId,f.chatId);o.has(v)||(o.add(v),c.push({larkAppId:p.larkAppId,chatId:f.chatId}))}let m=await Kt(c);return{entriesByProfile:new Map(r),effectiveRolesByBot:m}}async function hr(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t.profileId)}/apply`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chatId:t.chatId,larkAppId:t.larkAppId,force:t.force,preview:t.preview})}),r=await x(n);return{larkAppId:t.larkAppId,ok:n.ok&&r.ok!==!1,status:n.status,error:r.error,wouldRefuse:r.wouldRefuse}}var e=Fe(Ft(),1),wr=["text","post","image","interactive"];function br(t){return[...new Set(t.split(/[,,\n]/).map(n=>n.trim()).filter(Boolean))]}function Rn(t,n){return t.length===n.length&&t.every((r,o)=>r===n[o])}var J={enabled:!1,prompt:"",senderPolicy:{mode:"include_only",includeSenderTypes:["user"],excludeSelf:!0},messagePolicy:{includeMsgTypes:[...wr],scope:"top_level"}};function Je(t){let n=t?.senderPolicy?.mode==="include_only"?"include_only":"all_except_excluded";return{enabled:t?.enabled===!0,name:t?.name??"",replyCardTitle:t?.replyCardTitle??"",workingDir:t?.workingDir??"",prompt:t?.prompt??"",senderPolicy:{mode:n,includeSenderOpenIds:[...t?.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...t?.senderPolicy?.excludeSenderOpenIds??[]],...t?.senderPolicy?.excludeSenderKinds?{excludeSenderKinds:{...t.senderPolicy.excludeSenderKinds}}:{},includeSenderTypes:[...t?.senderPolicy?.includeSenderTypes??J.senderPolicy?.includeSenderTypes??[]],excludeSenderTypes:[...t?.senderPolicy?.excludeSenderTypes??[]],excludeSelf:t?.senderPolicy?.excludeSelf!==!1},messagePolicy:{includeMsgTypes:[...t?.messagePolicy?.includeMsgTypes??J.messagePolicy?.includeMsgTypes??[]],scope:"top_level"},...t?.contentPolicy?{contentPolicy:{...t.contentPolicy.includeKeywords?{includeKeywords:[...t.contentPolicy.includeKeywords]}:{},...t.contentPolicy.matchMode?{matchMode:t.contentPolicy.matchMode}:{}}}:{}}}function Pr(t){return!!t&&t.prompt.trim().length>0}function kn(t){return t.memberBots.some(n=>n.inChat&&(n.hasRole||n.hasMessageListener))}function ze(t,n){return t?.name||n}function Ln(t,n){let r=new Map;for(let o of t??[])r.set(o.messageId,o);for(let o of n)r.set(o.messageId,{...r.get(o.messageId),...o});return[...r.values()]}function Mn(t,n){return!n||t==="failed"?"error":t==="replied"?"ok":t==="running"?"running":"triggered"}function Tn(t,n=[]){return Je(t??J)}function Cn(){let t=(0,a.useRef)(!0);return(0,a.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),t}function En(){let t=(0,a.useRef)(new Set);return(0,a.useEffect)(()=>()=>{for(let n of t.current)window.clearTimeout(n);t.current.clear()},[]),(0,a.useCallback)((n,r)=>{let o=window.setTimeout(()=>{t.current.delete(o),n()},r);return t.current.add(o),o},[])}function xr(t){return(0,e.jsx)($t,{html:Bt({name:t.bot.botName,larkAppId:t.bot.larkAppId,avatarUrl:t.bot.botAvatarUrl,size:"sm"})})}function Nr(t){let n=Gt(),r=Cn(),o=En(),[c,m]=(0,a.useState)([]),[f,p]=(0,a.useState)([]),[v,L]=(0,a.useState)([]),[ve,K]=(0,a.useState)({entriesByProfile:new Map,effectiveRolesByBot:new Map}),[he,H]=(0,a.useState)(!1),[M,$]=(0,a.useState)(!0),[X,Q]=(0,a.useState)(!0),[Z,Re]=(0,a.useState)(""),[B,ee]=(0,a.useState)(""),[N,be]=(0,a.useState)(()=>new Set),[y,O]=(0,a.useState)(null),[g,D]=(0,a.useState)(null),[ke,V]=(0,a.useState)(null),[T,d]=(0,a.useState)(""),[h,I]=(0,a.useState)("every"),[C,te]=(0,a.useState)(!1),[Xe,Qe]=(0,a.useState)(!1),[Ze,et]=(0,a.useState)(!1),[Rr,tt]=(0,a.useState)(!1),[kr,rt]=(0,a.useState)(!1),[Lr,Le]=(0,a.useState)(null),[Mr,nt]=(0,a.useState)(null),[Tr,st]=(0,a.useState)(null),[q,ot]=(0,a.useState)("role"),[Cr,Er]=(0,a.useState)(null),[b,E]=(0,a.useState)(()=>Je(J)),[Me,lt]=(0,a.useState)([]),[Ar,it]=(0,a.useState)(!1),[_r,at]=(0,a.useState)(!1),[dt,ct]=(0,a.useState)(!1),[Te,ut]=(0,a.useState)(!1),[Br,G]=(0,a.useState)(null),[Ce,Dr]=(0,a.useState)(Ke),[Gr,Pe]=(0,a.useState)({kind:"idle"}),re=(0,a.useRef)(null),pt=(0,a.useRef)(0),[S,Fr]=(0,a.useState)(null),[A,mt]=(0,a.useState)(null),[ne,se]=(0,a.useState)([]),[oe,Ie]=(0,a.useState)(""),[U,le]=(0,a.useState)(null),[ft,$r]=(0,a.useState)(!1),[gt,yt]=(0,a.useState)(()=>new Set),[vt,ht]=(0,a.useState)(!1),[bt,Pt]=(0,a.useState)(!1),[Or,Ee]=(0,a.useState)(null),[Ur,ie]=(0,a.useState)({kind:"idle"}),W=(0,a.useRef)(0),ae=(0,a.useRef)(0),It=(0,a.useRef)(null),Ae=y?c.find(s=>s.chatId===y):void 0,jr=Ae&&g?Ae.memberBots.find(s=>s.larkAppId===g):void 0,_e=A?f.find(s=>s.larkAppId===A):void 0,Kr=ge(ne,A),Be=U?c.find(s=>s.chatId===U):void 0,Se=Be?.memberBots.filter(s=>s.inChat)??[],Hr=Se.map(s=>s.larkAppId).join("\0"),Vr=ne.map(s=>s.larkAppId).sort().join("\0"),qr=(0,a.useMemo)(()=>Zt(c,Z),[c,Z]),Wr=(0,a.useMemo)(()=>er(v,B),[v,B]),De=Ne(T),Ge=Ne(oe),St=Ne(b.prompt),wt=(0,a.useMemo)(()=>{let s=new Map;for(let l of Me)s.set(l.openId,l);return s},[Me]),R=(0,a.useCallback)((s,l,i=!1)=>{let u=Date.now()+Math.random();s({text:l,isError:i,id:u}),o(()=>{s(P=>P?.id===u?null:P)},i?3e3:2e3)},[o]),k=(0,a.useCallback)(async(s,l)=>{try{let i=await vr(s,l);if(!r.current)return;K(i),H(!0)}catch{if(!r.current)return;K({entriesByProfile:new Map,effectiveRolesByBot:new Map}),H(!0)}},[r]),_=(0,a.useCallback)(async()=>{let s=await tr();return r.current&&(m(s.groups),p(s.bots)),s},[r]),de=(0,a.useCallback)(async()=>{let s=await rr();return r.current&&L(s),s},[r]),ce=(0,a.useCallback)((s,l=[])=>{let i=Tn(s??J,l);Er(s),E(i)},[]),xt=(0,a.useCallback)(async(s,l,i)=>{it(!0),at(!0),lt([]);try{let[u,P]=await Promise.all([Ye(s,l).catch(()=>Je(J)),mr(s,l).catch(()=>[])]);if(!r.current||i!==W.current)return;ce(Pr(u)?u:null,P),lt(P),G(null)}finally{r.current&&i===W.current&&(it(!1),at(!1))}},[r,ce]),Nt=(0,a.useCallback)(async()=>{$(!0),Q(!0),H(!1);try{let s=await _();if(!r.current)return;let l=await de();if(!r.current||(await Dt(),!r.current))return;if(be(new Set(s.groups.filter(kn).map(i=>i.chatId))),t.tab==="profiles"){let i=Jt();le(u=>u||(i&&s.groups.some(P=>P.chatId===i)?i:s.groups[0]?.chatId??null))}else le(i=>i??s.groups[0]?.chatId??null);$(!1),Q(!1),k(s.groups,l)}catch{if(!r.current)return;$(!1),Q(!1),H(!0)}},[r,t.tab,_,de,k]);(0,a.useEffect)(()=>{Nt()},[Nt]),(0,a.useEffect)(()=>()=>{pt.current+=1,re.current=null},[]),(0,a.useEffect)(()=>{U||c.length===0||le(c[0].chatId)},[c,U]),(0,a.useEffect)(()=>{let s=new Set(Se.filter(l=>!!ge(ne,l.larkAppId)).map(l=>l.larkAppId));yt(s),ie({kind:"idle"})},[Vr,Hr]);async function Yr(s,l){let i=++W.current;O(s),D(l),Le(null),nt(null),st(null),G(null),ce(null);let u=await We(l,s);!r.current||i!==W.current||(V(u),d(u.content??""),I(u.injectMode==="once"?"once":"every"),te(u.dispatchCompletionEnabled===!0),await xt(l,s,i))}async function zr(){let s=await _();if(r.current&&(k(s.groups,v),y&&g)){let l=++W.current,i=await We(g,y);if(!r.current||l!==W.current)return;V(i),d(i.content??""),I(i.injectMode==="once"?"once":"every"),te(i.dispatchCompletionEnabled===!0),await xt(g,y,l)}}async function Jr(){if(!(!y||!g)){Qe(!0);try{let s=await nr(g,y,T,h,C);if(!r.current)return;if(s){let l=await _();if(!r.current)return;V(i=>i&&{...i,content:T,hasRole:!0,injectMode:h,dispatchCompletionEnabled:C}),k(l.groups,v),R(Le,n("roles.saved"))}else R(Le,T.trim().length===0?n("roles.emptyError"):n("roles.saveFailed"),!0)}finally{r.current&&Qe(!1)}}}async function Xr(){if(!(!y||!g)&&await we({title:"\u5220\u9664\u89D2\u8272",message:n("roles.confirmDelete"),danger:!0})){et(!0);try{let s=await lr(g,y);if(!r.current)return;if(s){let l=await _();if(!r.current)return;O(null),D(null),V(null),d(""),I("every"),te(!1),k(l.groups,v)}}finally{r.current&&et(!1)}}}async function Qr(s){if(!y||!g)return;let l=h;I(s),tt(!0);try{let i=await sr(g,y,s);if(!r.current)return;i||I(l),R(nt,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&tt(!1)}}async function Zr(s){if(!y||!g)return;let l=C;te(s),rt(!0);try{let i=await or(g,y,s);if(!r.current)return;i||te(l),R(st,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&rt(!1)}}function en(s){E(l=>({...l,...s}))}function tn(s){E(l=>({...l,senderPolicy:{...l.senderPolicy??{},...s}}))}function rn(s){E(l=>({...l,messagePolicy:{...l.messagePolicy??{scope:"top_level"},...s,scope:"top_level"}}))}function nn(s){E(l=>({...l,contentPolicy:{...l.contentPolicy??{},...s}}))}function sn(s,l){E(i=>{let u=new Set(i.senderPolicy?.includeSenderTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,senderPolicy:{...i.senderPolicy??{},includeSenderTypes:[...u]}}})}function on(s,l){E(i=>{let u=new Set(i.messagePolicy?.includeMsgTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,messagePolicy:{...i.messagePolicy??{scope:"top_level"},includeMsgTypes:[...u],scope:"top_level"}}})}function Rt(s,l){E(i=>{let u=i.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",P=qt({mode:u,include:i.senderPolicy?.includeSenderOpenIds??[],exclude:i.senderPolicy?.excludeSenderOpenIds??[],targetIds:s,listening:l});return{...i,senderPolicy:{...i.senderPolicy??{},mode:u,includeSenderOpenIds:P.include,excludeSenderOpenIds:P.exclude}}})}function ln(s,l){Rt([s],l)}function an(s,l){Rt(s,l)}function dn(s){E(l=>({...l,senderPolicy:{...l.senderPolicy??{},mode:s,includeSenderOpenIds:[...l.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...l.senderPolicy?.excludeSenderOpenIds??[]]}}))}function kt(){let s=b.senderPolicy??{},l=b.messagePolicy??{},i=s.mode==="all_except_excluded"?"all_except_excluded":"include_only",u=[...new Set(s.includeSenderOpenIds??[])].filter(Boolean),P=[...new Set(s.excludeSenderOpenIds??[])].filter(Boolean),ue=Wt(P,F=>wt.get(F)?.memberType,s.excludeSenderKinds),w=[...new Set(s.includeSenderTypes??[])].filter(F=>F==="user"||F==="bot"),Et=[...new Set(l.includeMsgTypes??[])].filter(Boolean),At=(()=>{let F=b.contentPolicy;if(!F)return;let _t=[...new Set((F.includeKeywords??[]).map(wn=>wn.trim()).filter(Boolean))];if(_t.length!==0)return{includeKeywords:_t,...F.matchMode==="all"?{matchMode:"all"}:{}}})();return{enabled:b.enabled,...b.name?.trim()?{name:b.name.trim()}:{},...b.replyCardTitle?.trim()?{replyCardTitle:b.replyCardTitle.trim()}:{},...b.workingDir?.trim()?{workingDir:b.workingDir.trim()}:{},prompt:b.prompt.trim(),senderPolicy:{mode:i,...i==="include_only"&&u.length>0?{includeSenderOpenIds:u}:{},...i==="all_except_excluded"&&P.length>0?{excludeSenderOpenIds:P}:{},...i==="all_except_excluded"&&Object.keys(ue).length>0?{excludeSenderKinds:ue}:{},...w.length>0?{includeSenderTypes:w}:{},excludeSelf:s.excludeSelf!==!1},messagePolicy:{...Et.length>0?{includeMsgTypes:Et}:{},scope:"top_level"},...At?{contentPolicy:At}:{}}}function cn(){return b.prompt.trim()?b.senderPolicy?.mode!=="all_except_excluded"&&(b.senderPolicy?.includeSenderOpenIds?.length??0)===0?(R(G,n("roles.listenerSenderRequired"),!0),null):{...kt(),enabled:!0}:(R(G,n("roles.listenerPromptRequired"),!0),null)}async function Lt(s){if(!y||!g)return;let l=cn();if(!l)return;let i=s?"run":"preview";Pe({kind:"loading",mode:i});try{let u=s?await ur(g,y,l,Ce):await cr(g,y,l,Ce);if(!r.current)return;Pe(u.ok?{kind:"result",response:u,mode:i}:{kind:"error",text:u.error||n("roles.listenerPreviewFailed")}),u.ok&&s&&u.runId&&un(u.runId)}catch(u){if(!r.current)return;Pe({kind:"error",text:u instanceof Error?u.message:n("roles.listenerPreviewFailed")})}}function un(s){if(!y||!g)return;let l=++pt.current;re.current={runId:s,token:l};let i=async()=>{if(!r.current)return;let u=re.current;if(!(!u||u.runId!==s||u.token!==l||!y||!g))try{let P=await pr(g,y,s);if(!r.current)return;if(P.ok&&P.results){let ue=P.results;Pe(w=>w.kind!=="result"||w.mode!=="run"||w.response.runId!==s?w:{...w,response:{...w.response,results:Ln(w.response.results,ue)}}),ue.some(w=>w.state==="triggered"||w.state==="running")?o(i,1500):re.current?.runId===s&&(re.current=null)}}catch{o(i,2500)}};o(i,1500)}async function pn(){if(!(!y||!g)){if(!b.enabled&&!b.prompt.trim()){await Mt(!1);return}if(b.enabled){if(!b.prompt.trim()){R(G,n("roles.listenerPromptRequired"),!0);return}if(b.senderPolicy?.mode!=="all_except_excluded"&&(b.senderPolicy?.includeSenderOpenIds?.length??0)===0){R(G,n("roles.listenerSenderRequired"),!0);return}}ct(!0);try{let s=await ir(g,y,kt());if(!r.current)return;if(s){let l=await _();if(!r.current)return;let i=await Ye(g,y);if(!r.current)return;ce(Pr(i)?i:null),k(l.groups,v)}R(G,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&ct(!1)}}}async function Mt(s=!0){if(!(!y||!g)&&!(s&&!await we({title:"\u5220\u9664\u76D1\u542C\u5668",message:n("roles.listenerConfirmDelete"),danger:!0}))){ut(!0);try{let l=await ar(g,y);if(!r.current)return;if(l){let i=await _();if(!r.current)return;ce(null),k(i.groups,v)}R(G,n(l?"roles.saved":"roles.saveFailed"),!l)}finally{r.current&&ut(!1)}}}async function Tt(s){let l=s.trim();if(!Ve(l))return;let i=++ae.current;Fr(l),mt(null),Ie(""),ie({kind:"idle"}),le(P=>P??c[0]?.chatId??null);let u=await z(l);!r.current||i!==ae.current||(se(u),Ee(null))}async function mn(s){if(!S)return;let l=++ae.current;mt(s);let i=await fr(S,s);if(!r.current||l!==ae.current)return;Ie(i.content??"");let u=await z(S);!r.current||l!==ae.current||(se(u),Ee(null))}async function fn(){let s=await _();if(!r.current)return;let l=await de();if(r.current){if(S){let i=await z(S);if(!r.current)return;se(i)}k(s.groups,l)}}async function gn(){let s=It.current,l=s?.value.trim()??"";if(l){if(!Ve(l)){s?.setCustomValidity(n("roles.profileIdInvalid")),s?.reportValidity();return}s?.setCustomValidity(""),await Tt(l),r.current&&(location.hash.startsWith("#/roles/profile")||(location.hash="#/roles/profile"))}}async function yn(){if(!(!S||!A)){ht(!0);try{let s=await gr(S,A,oe);if(!r.current)return;let l=await de();if(!r.current)return;let i=await z(S);if(!r.current)return;se(i),k(c,l),R(Ee,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&ht(!1)}}}async function vn(){if(!(!S||!A)&&await we({title:"\u5220\u9664\u914D\u7F6E\u9879",message:n("roles.confirmDeleteProfileEntry"),danger:!0})){Pt(!0);try{if(await yr(S,A),!r.current)return;Ie("");let s=await de();if(!r.current)return;let l=await z(S);if(!r.current)return;se(l),k(c,s)}finally{r.current&&Pt(!1)}}}function hn(s,l){yt(i=>{let u=new Set(i);return l?u.add(s):u.delete(s),u})}async function Ct(s){if(!S)return;let l=U??c[0]?.chatId;if(!l)return;let i=[...gt];if(i.length===0){ie({kind:"text",text:n("roles.applyPickBots")});return}ie({kind:"text",text:"..."});let u=await Promise.all(i.map(P=>hr({profileId:S,chatId:l,larkAppId:P,force:ft,preview:s})));if(r.current&&(ie({kind:"results",preview:s,results:u}),!s)){let P=await _();if(!r.current)return;k(P.groups,v)}}let bn=Xe||De>j||T.trim().length===0,Pn=dt||Te||St>fe||b.enabled&&b.prompt.trim().length===0,In=vt||Ge>j||oe.trim().length===0,Y=t.tab==="profiles",Sn=(0,e.jsxs)("nav",{className:"roles-subnav insight-tabs",role:"tablist","aria-label":n("roles.title"),children:[(0,e.jsx)("a",{href:"#/roles",className:`itab${Y?"":" on"}`,role:"tab","aria-selected":!Y,children:n("roles.tabGroups")}),(0,e.jsx)("a",{href:"#/roles/profile",className:`itab${Y?" on":""}`,role:"tab","aria-selected":Y,children:n("roles.tabProfiles")})]});return(0,e.jsxs)("section",{className:"page roles-page",children:[(0,e.jsxs)("div",{className:"page-heading roles-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:n("nav.roles")}),(0,e.jsx)("h1",{children:n("roles.title")})]}),(0,e.jsx)("div",{className:"page-heading-actions",children:Sn})]}),(0,e.jsxs)("div",{id:"roles-by-group-view",className:"roles-layout",hidden:Y,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-search",placeholder:n("roles.search"),value:Z,onChange:s=>Re(s.target.value)}),(0,e.jsx)(Oe,{id:"roles-refresh",label:n("roles.refresh"),onClick:()=>{zr()}})]}),(0,e.jsx)("div",{id:"roles-tree",className:"roles-tree",children:M?(0,e.jsx)(pe,{label:n("common.loading")}):(0,e.jsx)(Bn,{groups:qr,profiles:v,context:ve,contextLoaded:he,expandedGroups:N,selectedGroupId:y,selectedBotId:g,tr:n,onToggleGroup:s=>be(l=>An(l,s)),onSelectBot:(s,l)=>{Yr(s,l)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:!y||!g?(0,e.jsx)("div",{id:"roles-editor-empty",className:"roles-editor-empty",children:n("roles.selectHint")}):(0,e.jsxs)("div",{id:"roles-editor-form",className:"roles-editor-form",children:[(0,e.jsxs)("div",{className:"roles-editor-head",children:[(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{id:"roles-editor-group-name",children:Ae?.name??y}),(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{id:"roles-editor-bot-name",children:jr?.botName??g})]}),(0,e.jsx)("div",{className:"roles-editor-meta",children:(0,e.jsxs)("span",{id:"roles-editor-chat-id",className:"roles-editor-meta-line",children:[y," \xB7 ",g]})})]}),(0,e.jsx)("div",{className:"roles-editor-actions roles-editor-head-actions",children:q==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-delete",className:"danger",style:{display:ke?.hasRole?"":"none"},disabled:Ze,onClick:()=>{Xr()},children:Ze?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-save",className:"primary",disabled:bn,onClick:()=>{Jr()},children:Xe?"...":n("roles.save")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-listener-delete",className:"danger",style:{display:Cr?"":"none"},disabled:Te,onClick:()=>{Mt()},children:Te?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-listener-save",className:"primary",disabled:Pn,onClick:()=>{pn()},children:dt?"...":n("roles.save")})]})})]}),(0,e.jsxs)("div",{className:"roles-editor-switch segmented",role:"tablist","aria-label":n("roles.editorTabs"),children:[(0,e.jsx)("button",{type:"button",className:q==="role"?"active":"","aria-pressed":q==="role",onClick:()=>ot("role"),children:n("roles.roleTab")}),(0,e.jsx)("button",{type:"button",className:q==="listener"?"active":"","aria-pressed":q==="listener",onClick:()=>ot("listener"),children:n("roles.listenerTab")})]}),q==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.injectModeLabel")}),(0,e.jsx)(Ue,{id:"roles-editor-inject-mode",className:"roles-inline-menu",ariaLabel:n("roles.injectModeLabel"),disabled:Rr,label:n(h==="once"?"roles.injectModeOnce":"roles.injectModeEvery"),value:h,options:[{value:"every",label:n("roles.injectModeEvery")},{value:"once",label:n("roles.injectModeOnce")}],onChange:s=>{Qr(s==="once"?"once":"every")}}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.injectModeHint")}),(0,e.jsx)(ye,{flash:Mr})]}),(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.dispatchCompletionLabel")}),(0,e.jsxs)("label",{className:"filter-toggle roles-listener-enabled",children:[(0,e.jsx)("input",{id:"roles-editor-dispatch-completion-enabled",type:"checkbox",checked:C,disabled:kr,onChange:s=>{Zr(s.currentTarget.checked)}}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"filter-toggle-label",children:n("roles.dispatchCompletionEnabled")})]}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.dispatchCompletionHint")}),(0,e.jsx)(ye,{flash:Tr})]}),(0,e.jsx)("textarea",{id:"roles-editor-textarea",placeholder:n("roles.editorPlaceholder"),rows:14,value:T,onChange:s=>d(s.target.value)}),(0,e.jsxs)("div",{className:"roles-editor-footer",children:[(0,e.jsxs)("span",{id:"roles-editor-bytecount",className:Ir(De),children:[De," / ",j," bytes"]}),(0,e.jsx)(ye,{flash:Lr})]}),(0,e.jsx)(Sr,{content:T,tr:n,id:"roles-preview"})]}):(0,e.jsx)(Gn,{listener:b,members:Me,memberById:wt,promptByteLen:St,loading:Ar,membersLoading:_r,flash:Br,tr:n,onPatch:en,onSenderPolicyPatch:tn,onMessagePolicyPatch:rn,onContentPolicyPatch:nn,onToggleSenderType:sn,onToggleMsgType:on,onSetTargetPolicy:ln,onSetTargetsPolicy:an,onSetSenderMode:dn,previewLimit:Ce,previewStatus:Gr,onPreviewLimitChange:Dr,onPreview:()=>{Lt(!1)},onRunPreview:()=>{Lt(!0)}})]})})]}),(0,e.jsxs)("div",{id:"roles-profiles-view",className:"roles-layout roles-profiles-layout",hidden:!Y,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header roles-profile-create dashboard-toolbar",children:[(0,e.jsx)("input",{type:"text",id:"roles-profile-id",placeholder:n("roles.profileIdPlaceholder"),maxLength:64,ref:It,onChange:s=>s.currentTarget.setCustomValidity("")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-select",onClick:()=>{gn()},children:n("roles.openProfile")})]}),(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-profile-search",placeholder:n("roles.profileSearch"),value:B,onChange:s=>ee(s.target.value)}),(0,e.jsx)(Oe,{id:"roles-profile-refresh",label:n("roles.refresh"),onClick:()=>{fn()}})]}),(0,e.jsx)("div",{id:"roles-profile-list",className:"roles-tree",children:X?(0,e.jsx)(pe,{label:n("common.loading")}):(0,e.jsx)(On,{profiles:Wr,selectedProfileId:S,tr:n,onSelect:s=>{Tt(s)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:S?(0,e.jsxs)("div",{id:"roles-profile-detail",className:"roles-editor-form roles-profile-detail",children:[(0,e.jsx)("div",{className:"roles-profile-title",children:(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{children:S}),_e?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{children:_e.botName??_e.larkAppId})]}):null]}),(0,e.jsx)("div",{className:"roles-editor-meta-line",children:n("roles.profileRuntimeHint")})]})}),(0,e.jsxs)("div",{className:"roles-profile-grid",children:[(0,e.jsxs)("div",{className:"roles-profile-bots",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.profileBots")}),(0,e.jsx)("div",{className:"roles-profile-bot-list",children:f.map(s=>{let l=!!ge(ne,s.larkAppId),i=A===s.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row roles-profile-bot-row ${i?"selected":""}`,"data-profile-bot-id":s.larkAppId,onClick:()=>{mn(s.larkAppId)},children:[(0,e.jsx)(xr,{bot:s}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:s.botName??s.larkAppId}),(0,e.jsx)("div",{className:"roles-bot-id",children:s.larkAppId})]}),(0,e.jsx)("span",{className:`roles-badge ${l?"has-role":"no-role"}`,children:n(l?"roles.configured":"roles.unconfigured")})]},s.larkAppId)})})]}),(0,e.jsx)("div",{className:"roles-profile-editor",children:A?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-profile-editor-head",children:[(0,e.jsxs)("span",{id:"roles-profile-bytecount",className:Ir(Ge),children:[Ge," / ",j," bytes"]}),(0,e.jsxs)("div",{className:"roles-editor-actions roles-editor-head-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-delete",className:"danger",style:{display:Kr?"":"none"},disabled:bt,onClick:()=>{vn()},children:bt?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-save",className:"primary",disabled:In,onClick:()=>{yn()},children:vt?"...":n("roles.saveEntry")})]})]}),(0,e.jsx)("textarea",{id:"roles-profile-textarea",placeholder:n("roles.profileEditorPlaceholder"),rows:12,value:oe,onChange:s=>Ie(s.target.value)}),(0,e.jsx)("div",{className:"roles-editor-footer",children:(0,e.jsx)(ye,{flash:Or})}),(0,e.jsx)(Sr,{content:oe,tr:n,id:"roles-profile-preview"})]}):(0,e.jsx)("div",{className:"roles-editor-empty roles-profile-inline-empty",children:n("roles.profileBotSelectHint")})})]}),(0,e.jsxs)("div",{className:"roles-profile-apply",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.applyToGroup")}),(0,e.jsxs)("div",{className:"roles-profile-apply-controls",children:[(0,e.jsx)(Ue,{id:"roles-profile-apply-group",className:"roles-apply-group-menu",ariaLabel:n("roles.applyToGroup"),disabled:c.length===0,label:Be?.name??U??n("roles.noChats"),value:U??"",options:c.map(s=>({value:s.chatId,label:s.name??s.chatId})),onChange:s=>le(s)}),(0,e.jsxs)("label",{className:"roles-profile-force",children:[(0,e.jsx)("input",{type:"checkbox",id:"roles-profile-apply-force",checked:ft,onChange:s=>$r(s.target.checked)})," ",n("roles.applyForce")]})]}),(0,e.jsx)("div",{id:"roles-profile-apply-bots",children:!Be||Se.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):Se.map(s=>{let l=!!ge(ne,s.larkAppId);return(0,e.jsxs)("label",{className:"checkbox-row roles-profile-apply-bot",children:[(0,e.jsx)("input",{type:"checkbox",name:"profile-apply-bot",value:s.larkAppId,checked:gt.has(s.larkAppId),onChange:i=>hn(s.larkAppId,i.target.checked)}),(0,e.jsx)("span",{children:s.botName??s.larkAppId}),(0,e.jsx)("small",{children:n(l?"roles.configured":"roles.profileMissing")})]},s.larkAppId)})}),(0,e.jsxs)("div",{className:"roles-editor-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-preview-apply",onClick:()=>{Ct(!0)},children:n("roles.previewApply")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-apply",className:"primary",onClick:()=>{Ct(!1)},children:n("roles.applyProfile")})]}),(0,e.jsx)("div",{id:"roles-profile-apply-status",className:"roles-profile-status",children:(0,e.jsx)(Un,{status:Ur,bots:f,tr:n})})]})]}):(0,e.jsx)("div",{id:"roles-profile-empty",className:"roles-editor-empty",children:n("roles.profileSelectHint")})})]})]})}function An(t,n){let r=new Set(t);return r.has(n)?r.delete(n):r.add(n),r}function Ir(t){return`roles-bytecount ${t>Yt?"warn":""} ${t>j?"over":""}`}function _n(t){return`roles-bytecount ${t>zt?"warn":""} ${t>fe?"over":""}`}function ye(t){return t.flash?(0,e.jsxs)("span",{className:`roles-saved-flash ${t.flash.isError?"roles-save-error":""}`,children:[" ",t.flash.text]}):null}function Bn(t){let{tr:n}=t;return t.groups.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):(0,e.jsx)(e.Fragment,{children:t.groups.map(r=>{let o=t.expandedGroups.has(r.chatId),c=r.memberBots.filter(p=>p.inChat),m=Xt(r),f=Qt(r);return(0,e.jsxs)("div",{className:"roles-group-section",children:[(0,e.jsxs)("div",{className:`roles-group-row ${o?"expanded":""} ${t.selectedGroupId===r.chatId&&!t.selectedBotId?"selected":""}`,"data-group-id":r.chatId,onClick:()=>t.onToggleGroup(r.chatId),children:[(0,e.jsx)("span",{className:"roles-group-arrow",children:o?"\u25BE":"\u25B8"}),(0,e.jsx)("span",{className:"roles-group-icon","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 16 16",children:[(0,e.jsx)("circle",{cx:"5.6",cy:"5.8",r:"2.4"}),(0,e.jsx)("path",{d:"M1.8 13.2c.5-2.4 2-3.6 3.8-3.6s3.3 1.2 3.8 3.6"}),(0,e.jsx)("circle",{cx:"11",cy:"6.8",r:"1.9"}),(0,e.jsx)("path",{d:"M9.8 12.6c.4-1.7 1.5-2.6 2.8-2.6 1 0 1.9.5 2.4 1.6"})]})}),(0,e.jsxs)("div",{className:"roles-group-info",children:[(0,e.jsx)("div",{className:"roles-group-name",children:r.name??r.chatId}),(0,e.jsxs)("div",{className:"roles-group-meta",children:[m,"/",f," ",n("roles.botsWithRoles")]}),(0,e.jsx)(Dn,{group:r,profiles:t.profiles,context:t.context,loaded:t.contextLoaded,tr:n})]}),(0,e.jsx)("span",{className:"roles-group-chevron"})]}),(0,e.jsx)("div",{className:"roles-bot-list",children:o?c.map(p=>{let v=t.selectedGroupId===r.chatId&&t.selectedBotId===p.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row ${v?"selected":""}`,"data-group-id":r.chatId,"data-bot-id":p.larkAppId,onClick:L=>{L.stopPropagation(),t.onSelectBot(r.chatId,p.larkAppId)},children:[(0,e.jsx)("span",{className:"roles-bot-indent"}),(0,e.jsx)(xr,{bot:p}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:p.botName}),(0,e.jsx)("div",{className:"roles-bot-id",children:p.larkAppId})]}),(0,e.jsxs)("div",{className:"roles-bot-badges",children:[(0,e.jsx)("span",{className:`roles-badge ${p.hasRole?"has-role":"no-role"}`,children:p.hasRole?n("roles.configured"):n("roles.unconfigured")}),p.hasMessageListener?(0,e.jsx)("span",{className:"roles-badge has-listener",children:n("roles.listenerBadge")}):null]})]},p.larkAppId)}):null})]},r.chatId)})})}function Dn(t){let{group:n,profiles:r,context:o,loaded:c,tr:m}=t;if(!r.length||!c)return null;let f=new Map;for(let L of n.memberBots)L.inChat&&f.set(L.larkAppId,o.effectiveRolesByBot.get(qe(L.larkAppId,n.chatId))??null);if(!Ot(f))return null;let p=Ut(n.memberBots,r,o.entriesByProfile,f)[0];if(!p)return(0,e.jsx)("div",{className:"roles-profile-match muted",children:m("groups.profileStatusUnmatched")});let v=p.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`roles-profile-match ${p.kind}`,children:m(v,{name:p.profileId,matched:p.matched,total:p.total,chat:p.chatMatched})})}function Gn(t){let{listener:n,tr:r}=t,[o,c]=(0,a.useState)("members"),[m,f]=(0,a.useState)(""),[p,v]=(0,a.useState)(()=>new Set),[L,ve]=(0,a.useState)(()=>(n.contentPolicy?.includeKeywords??[]).join(`
1
+ import{a as Ot,b as Ut,c as jt,d as Kt}from"./chunk-R3FXBFQH.js";import{a as we}from"./chunk-CEUCNZFJ.js";import{b as $t,c as pe,h as Oe,q as Ue}from"./chunk-NYY66DNC.js";import{d as Gt}from"./chunk-R3LJUCEO.js";import"./chunk-QITAMHW6.js";import{C as Bt,G as Dt}from"./chunk-K232GT3M.js";import{c as $e}from"./chunk-ARROO6TE.js";import{c as Fe,d as xn,e as Ft}from"./chunk-3YZFAHNK.js";var a=Fe(xn(),1);function Vt(t,n){let r=n.trim().toLowerCase();return r?t.filter(o=>o.openId.toLowerCase().includes(r)||o.name.toLowerCase().includes(r)||o.memberType.toLowerCase().includes(r)):t}function Ht(t){return[...new Set([...t].filter(Boolean))]}function qt(t){let n=new Set(t.targetIds.filter(Boolean));if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)o.delete(c),t.listening||o.add(c);return{include:[],exclude:Ht(o)}}let r=new Set(t.include);for(let o of n)r.delete(o),t.listening&&r.add(o);return{include:Ht(r),exclude:[]}}function je(t){let n=t.targetIds.filter(Boolean);if(n.length===0)return t.mode==="all_except_excluded"?"listen":"ignore";let r=new Set;if(t.mode==="all_except_excluded"){let o=new Set(t.exclude);for(let c of n)r.add(o.has(c)?"ignore":"listen")}else{let o=new Set(t.include);for(let c of n)r.add(o.has(c)?"listen":"ignore")}return r.size===1?[...r][0]:"mixed"}function Wt(t,n,r){let o={};for(let c of t){if(!c)continue;let m=n(c),f=m==="user"||m==="bot"?m:r?.[c];(f==="user"||f==="bot")&&(o[c]=f)}return o}var j=32768,Yt=Math.floor(j*.95),fe=32768,zt=Math.floor(fe*.95),Ke=5,He=20,Nn=/^[A-Za-z0-9._-]{1,64}$/;function Ve(t){return Nn.test(t)&&t!=="."&&t!==".."}function Jt(t=location.hash){let[,n=""]=t.split("?");return new URLSearchParams(n).get("chatId")?.trim()||null}function qe(t,n){return jt(t,n)}function Ne(t){return new TextEncoder().encode(t).length}function Xt(t){return t.memberBots.filter(n=>n.inChat&&n.hasRole).length}function Qt(t){return t.memberBots.filter(n=>n.inChat).length}function ge(t,n){return n?t.find(r=>r.larkAppId===n):void 0}function Zt(t,n){let r=n.toLowerCase();return r?t.filter(o=>{let c=o.chatId.toLowerCase().includes(r)||(o.name??"").toLowerCase().includes(r),m=o.memberBots.some(f=>f.larkAppId.toLowerCase().includes(r)||(f.botName??"").toLowerCase().includes(r));return c||m}):t}function er(t,n){let r=n.toLowerCase();return t.filter(o=>!r||o.profileId.toLowerCase().includes(r))}async function x(t){return t.json().catch(()=>({}))}async function tr(){let t=await fetch("/api/groups"),n=await x(t);return{bots:(n.bots??[]).map(r=>({larkAppId:r.larkAppId,botName:r.botName??r.larkAppId,botAvatarUrl:r.botAvatarUrl})),groups:(n.chats??[]).map(r=>({chatId:r.chatId,name:r.name??r.chatId,memberBots:(r.memberBots??[]).map(o=>({larkAppId:o.larkAppId,botName:o.botName??o.larkAppId,inChat:o.inChat??!1,hasRole:o.hasRole??!1,hasMessageListener:o.hasMessageListener??!1,oncallChat:o.oncallChat??null}))}))}}async function rr(){let t=await fetch("/api/role-profiles");return(await x(t)).profiles??[]}async function z(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t)}`);return(await x(n)).entries??[]}async function We(t,n){let r=await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function nr(t,n,r,o,c){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,injectMode:o,dispatchCompletionEnabled:c})})).ok}async function sr(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({injectMode:r})})).ok}async function or(t,n,r){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({dispatchCompletionEnabled:r})})).ok}async function lr(t,n){return(await fetch(`/api/roles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function Ye(t,n){let r=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return(await x(r)).listener??{enabled:!1,prompt:"",messagePolicy:{scope:"top_level"}}}async function ir(t,n,r){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(r)})).ok}async function ar(t,n){return(await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}function xe(t){return Number.isFinite(t)?Math.min(He,Math.max(1,Math.floor(t))):Ke}function me(t){return String(t).padStart(2,"0")}function dr(t){if(!t)return"";let n=Number(t);if(!Number.isFinite(n)||n<=0)return"";let r=n<1e12?n*1e3:n,o=new Date(r);return Number.isFinite(o.getTime())?[o.getFullYear(),"-",me(o.getMonth()+1),"-",me(o.getDate())," ",me(o.getHours()),":",me(o.getMinutes()),":",me(o.getSeconds())].join(""):""}async function cr(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:xe(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??xe(o),matches:m.matches??[],error:m.error}}async function ur(t,n,r,o){let c=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({listener:r,limit:xe(o)})}),m=await x(c);return{ok:c.ok&&m.ok!==!1,requestedLimit:m.requestedLimit??xe(o),matches:m.matches??[],results:m.results,error:m.error}}async function pr(t,n,r){let o=await fetch(`/api/message-listeners/${encodeURIComponent(t)}/${encodeURIComponent(n)}/run-preview/${encodeURIComponent(r)}`),c=await x(o);return{ok:o.ok&&c.ok!==!1,runId:c.runId,results:c.results,error:c.error}}async function mr(t,n){let r=await fetch(`/api/groups/${encodeURIComponent(t)}/${encodeURIComponent(n)}/members-display`);return(await x(r)).members??[]}async function fr(t,n){let r=await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`);return x(r)}async function gr(t,n,r){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:r,allowEmpty:!0})})).ok}async function yr(t,n){return(await fetch(`/api/role-profiles/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,{method:"DELETE"})).ok}async function vr(t,n){let r=await Promise.all(n.map(async f=>{try{let p=await fetch(`/api/role-profiles/${encodeURIComponent(f.profileId)}`),v=await x(p);return[f.profileId,Array.isArray(v.entries)?v.entries:[]]}catch{return[f.profileId,[]]}})),o=new Set,c=[];for(let f of t)for(let p of f.memberBots){if(!p.inChat||!p.hasRole)continue;let v=qe(p.larkAppId,f.chatId);o.has(v)||(o.add(v),c.push({larkAppId:p.larkAppId,chatId:f.chatId}))}let m=await Kt(c);return{entriesByProfile:new Map(r),effectiveRolesByBot:m}}async function hr(t){let n=await fetch(`/api/role-profiles/${encodeURIComponent(t.profileId)}/apply`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chatId:t.chatId,larkAppId:t.larkAppId,force:t.force,preview:t.preview})}),r=await x(n);return{larkAppId:t.larkAppId,ok:n.ok&&r.ok!==!1,status:n.status,error:r.error,wouldRefuse:r.wouldRefuse}}var e=Fe(Ft(),1),wr=["text","post","image","interactive"];function br(t){return[...new Set(t.split(/[,,\n]/).map(n=>n.trim()).filter(Boolean))]}function Rn(t,n){return t.length===n.length&&t.every((r,o)=>r===n[o])}var J={enabled:!1,prompt:"",senderPolicy:{mode:"include_only",includeSenderTypes:["user"],excludeSelf:!0},messagePolicy:{includeMsgTypes:[...wr],scope:"top_level"}};function Je(t){let n=t?.senderPolicy?.mode==="include_only"?"include_only":"all_except_excluded";return{enabled:t?.enabled===!0,name:t?.name??"",replyCardTitle:t?.replyCardTitle??"",workingDir:t?.workingDir??"",prompt:t?.prompt??"",senderPolicy:{mode:n,includeSenderOpenIds:[...t?.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...t?.senderPolicy?.excludeSenderOpenIds??[]],...t?.senderPolicy?.excludeSenderKinds?{excludeSenderKinds:{...t.senderPolicy.excludeSenderKinds}}:{},includeSenderTypes:[...t?.senderPolicy?.includeSenderTypes??J.senderPolicy?.includeSenderTypes??[]],excludeSenderTypes:[...t?.senderPolicy?.excludeSenderTypes??[]],excludeSelf:t?.senderPolicy?.excludeSelf!==!1},messagePolicy:{includeMsgTypes:[...t?.messagePolicy?.includeMsgTypes??J.messagePolicy?.includeMsgTypes??[]],scope:"top_level"},...t?.contentPolicy?{contentPolicy:{...t.contentPolicy.includeKeywords?{includeKeywords:[...t.contentPolicy.includeKeywords]}:{},...t.contentPolicy.matchMode?{matchMode:t.contentPolicy.matchMode}:{}}}:{}}}function Pr(t){return!!t&&t.prompt.trim().length>0}function kn(t){return t.memberBots.some(n=>n.inChat&&(n.hasRole||n.hasMessageListener))}function ze(t,n){return t?.name||n}function Ln(t,n){let r=new Map;for(let o of t??[])r.set(o.messageId,o);for(let o of n)r.set(o.messageId,{...r.get(o.messageId),...o});return[...r.values()]}function Mn(t,n){return!n||t==="failed"?"error":t==="replied"?"ok":t==="running"?"running":"triggered"}function Tn(t,n=[]){return Je(t??J)}function Cn(){let t=(0,a.useRef)(!0);return(0,a.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),t}function En(){let t=(0,a.useRef)(new Set);return(0,a.useEffect)(()=>()=>{for(let n of t.current)window.clearTimeout(n);t.current.clear()},[]),(0,a.useCallback)((n,r)=>{let o=window.setTimeout(()=>{t.current.delete(o),n()},r);return t.current.add(o),o},[])}function xr(t){return(0,e.jsx)($t,{html:Bt({name:t.bot.botName,larkAppId:t.bot.larkAppId,avatarUrl:t.bot.botAvatarUrl,size:"sm"})})}function Nr(t){let n=Gt(),r=Cn(),o=En(),[c,m]=(0,a.useState)([]),[f,p]=(0,a.useState)([]),[v,L]=(0,a.useState)([]),[ve,K]=(0,a.useState)({entriesByProfile:new Map,effectiveRolesByBot:new Map}),[he,H]=(0,a.useState)(!1),[M,$]=(0,a.useState)(!0),[X,Q]=(0,a.useState)(!0),[Z,Re]=(0,a.useState)(""),[B,ee]=(0,a.useState)(""),[N,be]=(0,a.useState)(()=>new Set),[y,O]=(0,a.useState)(null),[g,D]=(0,a.useState)(null),[ke,V]=(0,a.useState)(null),[T,d]=(0,a.useState)(""),[h,I]=(0,a.useState)("every"),[C,te]=(0,a.useState)(!1),[Xe,Qe]=(0,a.useState)(!1),[Ze,et]=(0,a.useState)(!1),[Rr,tt]=(0,a.useState)(!1),[kr,rt]=(0,a.useState)(!1),[Lr,Le]=(0,a.useState)(null),[Mr,nt]=(0,a.useState)(null),[Tr,st]=(0,a.useState)(null),[q,ot]=(0,a.useState)("role"),[Cr,Er]=(0,a.useState)(null),[b,E]=(0,a.useState)(()=>Je(J)),[Me,lt]=(0,a.useState)([]),[Ar,it]=(0,a.useState)(!1),[_r,at]=(0,a.useState)(!1),[dt,ct]=(0,a.useState)(!1),[Te,ut]=(0,a.useState)(!1),[Br,G]=(0,a.useState)(null),[Ce,Dr]=(0,a.useState)(Ke),[Gr,Pe]=(0,a.useState)({kind:"idle"}),re=(0,a.useRef)(null),pt=(0,a.useRef)(0),[S,Fr]=(0,a.useState)(null),[A,mt]=(0,a.useState)(null),[ne,se]=(0,a.useState)([]),[oe,Ie]=(0,a.useState)(""),[U,le]=(0,a.useState)(null),[ft,$r]=(0,a.useState)(!1),[gt,yt]=(0,a.useState)(()=>new Set),[vt,ht]=(0,a.useState)(!1),[bt,Pt]=(0,a.useState)(!1),[Or,Ee]=(0,a.useState)(null),[Ur,ie]=(0,a.useState)({kind:"idle"}),W=(0,a.useRef)(0),ae=(0,a.useRef)(0),It=(0,a.useRef)(null),Ae=y?c.find(s=>s.chatId===y):void 0,jr=Ae&&g?Ae.memberBots.find(s=>s.larkAppId===g):void 0,_e=A?f.find(s=>s.larkAppId===A):void 0,Kr=ge(ne,A),Be=U?c.find(s=>s.chatId===U):void 0,Se=Be?.memberBots.filter(s=>s.inChat)??[],Hr=Se.map(s=>s.larkAppId).join("\0"),Vr=ne.map(s=>s.larkAppId).sort().join("\0"),qr=(0,a.useMemo)(()=>Zt(c,Z),[c,Z]),Wr=(0,a.useMemo)(()=>er(v,B),[v,B]),De=Ne(T),Ge=Ne(oe),St=Ne(b.prompt),wt=(0,a.useMemo)(()=>{let s=new Map;for(let l of Me)s.set(l.openId,l);return s},[Me]),R=(0,a.useCallback)((s,l,i=!1)=>{let u=Date.now()+Math.random();s({text:l,isError:i,id:u}),o(()=>{s(P=>P?.id===u?null:P)},i?3e3:2e3)},[o]),k=(0,a.useCallback)(async(s,l)=>{try{let i=await vr(s,l);if(!r.current)return;K(i),H(!0)}catch{if(!r.current)return;K({entriesByProfile:new Map,effectiveRolesByBot:new Map}),H(!0)}},[r]),_=(0,a.useCallback)(async()=>{let s=await tr();return r.current&&(m(s.groups),p(s.bots)),s},[r]),de=(0,a.useCallback)(async()=>{let s=await rr();return r.current&&L(s),s},[r]),ce=(0,a.useCallback)((s,l=[])=>{let i=Tn(s??J,l);Er(s),E(i)},[]),xt=(0,a.useCallback)(async(s,l,i)=>{it(!0),at(!0),lt([]);try{let[u,P]=await Promise.all([Ye(s,l).catch(()=>Je(J)),mr(s,l).catch(()=>[])]);if(!r.current||i!==W.current)return;ce(Pr(u)?u:null,P),lt(P),G(null)}finally{r.current&&i===W.current&&(it(!1),at(!1))}},[r,ce]),Nt=(0,a.useCallback)(async()=>{$(!0),Q(!0),H(!1);try{let s=await _();if(!r.current)return;let l=await de();if(!r.current||(await Dt(),!r.current))return;if(be(new Set(s.groups.filter(kn).map(i=>i.chatId))),t.tab==="profiles"){let i=Jt();le(u=>u||(i&&s.groups.some(P=>P.chatId===i)?i:s.groups[0]?.chatId??null))}else le(i=>i??s.groups[0]?.chatId??null);$(!1),Q(!1),k(s.groups,l)}catch{if(!r.current)return;$(!1),Q(!1),H(!0)}},[r,t.tab,_,de,k]);(0,a.useEffect)(()=>{Nt()},[Nt]),(0,a.useEffect)(()=>()=>{pt.current+=1,re.current=null},[]),(0,a.useEffect)(()=>{U||c.length===0||le(c[0].chatId)},[c,U]),(0,a.useEffect)(()=>{let s=new Set(Se.filter(l=>!!ge(ne,l.larkAppId)).map(l=>l.larkAppId));yt(s),ie({kind:"idle"})},[Vr,Hr]);async function Yr(s,l){let i=++W.current;O(s),D(l),Le(null),nt(null),st(null),G(null),ce(null);let u=await We(l,s);!r.current||i!==W.current||(V(u),d(u.content??""),I(u.injectMode==="once"?"once":"every"),te(u.dispatchCompletionEnabled===!0),await xt(l,s,i))}async function zr(){let s=await _();if(r.current&&(k(s.groups,v),y&&g)){let l=++W.current,i=await We(g,y);if(!r.current||l!==W.current)return;V(i),d(i.content??""),I(i.injectMode==="once"?"once":"every"),te(i.dispatchCompletionEnabled===!0),await xt(g,y,l)}}async function Jr(){if(!(!y||!g)){Qe(!0);try{let s=await nr(g,y,T,h,C);if(!r.current)return;if(s){let l=await _();if(!r.current)return;V(i=>i&&{...i,content:T,hasRole:!0,injectMode:h,dispatchCompletionEnabled:C}),k(l.groups,v),R(Le,n("roles.saved"))}else R(Le,T.trim().length===0?n("roles.emptyError"):n("roles.saveFailed"),!0)}finally{r.current&&Qe(!1)}}}async function Xr(){if(!(!y||!g)&&await we({title:"\u5220\u9664\u89D2\u8272",message:n("roles.confirmDelete"),danger:!0})){et(!0);try{let s=await lr(g,y);if(!r.current)return;if(s){let l=await _();if(!r.current)return;O(null),D(null),V(null),d(""),I("every"),te(!1),k(l.groups,v)}}finally{r.current&&et(!1)}}}async function Qr(s){if(!y||!g)return;let l=h;I(s),tt(!0);try{let i=await sr(g,y,s);if(!r.current)return;i||I(l),R(nt,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&tt(!1)}}async function Zr(s){if(!y||!g)return;let l=C;te(s),rt(!0);try{let i=await or(g,y,s);if(!r.current)return;i||te(l),R(st,n(i?"roles.saved":"roles.saveFailed"),!i)}finally{r.current&&rt(!1)}}function en(s){E(l=>({...l,...s}))}function tn(s){E(l=>({...l,senderPolicy:{...l.senderPolicy??{},...s}}))}function rn(s){E(l=>({...l,messagePolicy:{...l.messagePolicy??{scope:"top_level"},...s,scope:"top_level"}}))}function nn(s){E(l=>({...l,contentPolicy:{...l.contentPolicy??{},...s}}))}function sn(s,l){E(i=>{let u=new Set(i.senderPolicy?.includeSenderTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,senderPolicy:{...i.senderPolicy??{},includeSenderTypes:[...u]}}})}function on(s,l){E(i=>{let u=new Set(i.messagePolicy?.includeMsgTypes??[]);if(l)u.add(s);else{if(u.size<=1&&u.has(s))return i;u.delete(s)}return{...i,messagePolicy:{...i.messagePolicy??{scope:"top_level"},includeMsgTypes:[...u],scope:"top_level"}}})}function Rt(s,l){E(i=>{let u=i.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",P=qt({mode:u,include:i.senderPolicy?.includeSenderOpenIds??[],exclude:i.senderPolicy?.excludeSenderOpenIds??[],targetIds:s,listening:l});return{...i,senderPolicy:{...i.senderPolicy??{},mode:u,includeSenderOpenIds:P.include,excludeSenderOpenIds:P.exclude}}})}function ln(s,l){Rt([s],l)}function an(s,l){Rt(s,l)}function dn(s){E(l=>({...l,senderPolicy:{...l.senderPolicy??{},mode:s,includeSenderOpenIds:[...l.senderPolicy?.includeSenderOpenIds??[]],excludeSenderOpenIds:[...l.senderPolicy?.excludeSenderOpenIds??[]]}}))}function kt(){let s=b.senderPolicy??{},l=b.messagePolicy??{},i=s.mode==="all_except_excluded"?"all_except_excluded":"include_only",u=[...new Set(s.includeSenderOpenIds??[])].filter(Boolean),P=[...new Set(s.excludeSenderOpenIds??[])].filter(Boolean),ue=Wt(P,F=>wt.get(F)?.memberType,s.excludeSenderKinds),w=[...new Set(s.includeSenderTypes??[])].filter(F=>F==="user"||F==="bot"),Et=[...new Set(l.includeMsgTypes??[])].filter(Boolean),At=(()=>{let F=b.contentPolicy;if(!F)return;let _t=[...new Set((F.includeKeywords??[]).map(wn=>wn.trim()).filter(Boolean))];if(_t.length!==0)return{includeKeywords:_t,...F.matchMode==="all"?{matchMode:"all"}:{}}})();return{enabled:b.enabled,...b.name?.trim()?{name:b.name.trim()}:{},...b.replyCardTitle?.trim()?{replyCardTitle:b.replyCardTitle.trim()}:{},...b.workingDir?.trim()?{workingDir:b.workingDir.trim()}:{},prompt:b.prompt.trim(),senderPolicy:{mode:i,...i==="include_only"&&u.length>0?{includeSenderOpenIds:u}:{},...i==="all_except_excluded"&&P.length>0?{excludeSenderOpenIds:P}:{},...i==="all_except_excluded"&&Object.keys(ue).length>0?{excludeSenderKinds:ue}:{},...w.length>0?{includeSenderTypes:w}:{},excludeSelf:s.excludeSelf!==!1},messagePolicy:{...Et.length>0?{includeMsgTypes:Et}:{},scope:"top_level"},...At?{contentPolicy:At}:{}}}function cn(){return b.prompt.trim()?b.senderPolicy?.mode!=="all_except_excluded"&&(b.senderPolicy?.includeSenderOpenIds?.length??0)===0?(R(G,n("roles.listenerSenderRequired"),!0),null):{...kt(),enabled:!0}:(R(G,n("roles.listenerPromptRequired"),!0),null)}async function Lt(s){if(!y||!g)return;let l=cn();if(!l)return;let i=s?"run":"preview";Pe({kind:"loading",mode:i});try{let u=s?await ur(g,y,l,Ce):await cr(g,y,l,Ce);if(!r.current)return;Pe(u.ok?{kind:"result",response:u,mode:i}:{kind:"error",text:u.error||n("roles.listenerPreviewFailed")}),u.ok&&s&&u.runId&&un(u.runId)}catch(u){if(!r.current)return;Pe({kind:"error",text:u instanceof Error?u.message:n("roles.listenerPreviewFailed")})}}function un(s){if(!y||!g)return;let l=++pt.current;re.current={runId:s,token:l};let i=async()=>{if(!r.current)return;let u=re.current;if(!(!u||u.runId!==s||u.token!==l||!y||!g))try{let P=await pr(g,y,s);if(!r.current)return;if(P.ok&&P.results){let ue=P.results;Pe(w=>w.kind!=="result"||w.mode!=="run"||w.response.runId!==s?w:{...w,response:{...w.response,results:Ln(w.response.results,ue)}}),ue.some(w=>w.state==="triggered"||w.state==="running")?o(i,1500):re.current?.runId===s&&(re.current=null)}}catch{o(i,2500)}};o(i,1500)}async function pn(){if(!(!y||!g)){if(!b.enabled&&!b.prompt.trim()){await Mt(!1);return}if(b.enabled){if(!b.prompt.trim()){R(G,n("roles.listenerPromptRequired"),!0);return}if(b.senderPolicy?.mode!=="all_except_excluded"&&(b.senderPolicy?.includeSenderOpenIds?.length??0)===0){R(G,n("roles.listenerSenderRequired"),!0);return}}ct(!0);try{let s=await ir(g,y,kt());if(!r.current)return;if(s){let l=await _();if(!r.current)return;let i=await Ye(g,y);if(!r.current)return;ce(Pr(i)?i:null),k(l.groups,v)}R(G,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&ct(!1)}}}async function Mt(s=!0){if(!(!y||!g)&&!(s&&!await we({title:"\u5220\u9664\u76D1\u542C\u5668",message:n("roles.listenerConfirmDelete"),danger:!0}))){ut(!0);try{let l=await ar(g,y);if(!r.current)return;if(l){let i=await _();if(!r.current)return;ce(null),k(i.groups,v)}R(G,n(l?"roles.saved":"roles.saveFailed"),!l)}finally{r.current&&ut(!1)}}}async function Tt(s){let l=s.trim();if(!Ve(l))return;let i=++ae.current;Fr(l),mt(null),Ie(""),ie({kind:"idle"}),le(P=>P??c[0]?.chatId??null);let u=await z(l);!r.current||i!==ae.current||(se(u),Ee(null))}async function mn(s){if(!S)return;let l=++ae.current;mt(s);let i=await fr(S,s);if(!r.current||l!==ae.current)return;Ie(i.content??"");let u=await z(S);!r.current||l!==ae.current||(se(u),Ee(null))}async function fn(){let s=await _();if(!r.current)return;let l=await de();if(r.current){if(S){let i=await z(S);if(!r.current)return;se(i)}k(s.groups,l)}}async function gn(){let s=It.current,l=s?.value.trim()??"";if(l){if(!Ve(l)){s?.setCustomValidity(n("roles.profileIdInvalid")),s?.reportValidity();return}s?.setCustomValidity(""),await Tt(l),r.current&&(location.hash.startsWith("#/roles/profile")||(location.hash="#/roles/profile"))}}async function yn(){if(!(!S||!A)){ht(!0);try{let s=await gr(S,A,oe);if(!r.current)return;let l=await de();if(!r.current)return;let i=await z(S);if(!r.current)return;se(i),k(c,l),R(Ee,n(s?"roles.saved":"roles.saveFailed"),!s)}finally{r.current&&ht(!1)}}}async function vn(){if(!(!S||!A)&&await we({title:"\u5220\u9664\u914D\u7F6E\u9879",message:n("roles.confirmDeleteProfileEntry"),danger:!0})){Pt(!0);try{if(await yr(S,A),!r.current)return;Ie("");let s=await de();if(!r.current)return;let l=await z(S);if(!r.current)return;se(l),k(c,s)}finally{r.current&&Pt(!1)}}}function hn(s,l){yt(i=>{let u=new Set(i);return l?u.add(s):u.delete(s),u})}async function Ct(s){if(!S)return;let l=U??c[0]?.chatId;if(!l)return;let i=[...gt];if(i.length===0){ie({kind:"text",text:n("roles.applyPickBots")});return}ie({kind:"text",text:"..."});let u=await Promise.all(i.map(P=>hr({profileId:S,chatId:l,larkAppId:P,force:ft,preview:s})));if(r.current&&(ie({kind:"results",preview:s,results:u}),!s)){let P=await _();if(!r.current)return;k(P.groups,v)}}let bn=Xe||De>j||T.trim().length===0,Pn=dt||Te||St>fe||b.enabled&&b.prompt.trim().length===0,In=vt||Ge>j||oe.trim().length===0,Y=t.tab==="profiles",Sn=(0,e.jsxs)("nav",{className:"roles-subnav insight-tabs",role:"tablist","aria-label":n("roles.title"),children:[(0,e.jsx)("a",{href:"#/roles",className:`itab${Y?"":" on"}`,role:"tab","aria-selected":!Y,children:n("roles.tabGroups")}),(0,e.jsx)("a",{href:"#/roles/profile",className:`itab${Y?" on":""}`,role:"tab","aria-selected":Y,children:n("roles.tabProfiles")})]});return(0,e.jsxs)("section",{className:"page roles-page",children:[(0,e.jsxs)("div",{className:"page-heading roles-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:n("nav.roles")}),(0,e.jsx)("h1",{children:n("roles.title")})]}),(0,e.jsx)("div",{className:"page-heading-actions",children:Sn})]}),(0,e.jsxs)("div",{id:"roles-by-group-view",className:"roles-layout",hidden:Y,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-search",placeholder:n("roles.search"),value:Z,onChange:s=>Re(s.target.value)}),(0,e.jsx)(Oe,{id:"roles-refresh",label:n("roles.refresh"),onClick:()=>{zr()}})]}),(0,e.jsx)("div",{id:"roles-tree",className:"roles-tree",children:M?(0,e.jsx)(pe,{label:n("common.loading")}):(0,e.jsx)(Bn,{groups:qr,profiles:v,context:ve,contextLoaded:he,expandedGroups:N,selectedGroupId:y,selectedBotId:g,tr:n,onToggleGroup:s=>be(l=>An(l,s)),onSelectBot:(s,l)=>{Yr(s,l)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:!y||!g?(0,e.jsx)("div",{id:"roles-editor-empty",className:"roles-editor-empty",children:n("roles.selectHint")}):(0,e.jsxs)("div",{id:"roles-editor-form",className:"roles-editor-form",children:[(0,e.jsxs)("div",{className:"roles-editor-head",children:[(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{id:"roles-editor-group-name",children:Ae?.name??y}),(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{id:"roles-editor-bot-name",children:jr?.botName??g})]}),(0,e.jsx)("div",{className:"roles-editor-meta",children:(0,e.jsxs)("span",{id:"roles-editor-chat-id",className:"roles-editor-meta-line",children:[y," \xB7 ",g]})})]}),(0,e.jsx)("div",{className:"roles-editor-actions roles-editor-head-actions",children:q==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-delete",className:"danger",style:{display:ke?.hasRole?"":"none"},disabled:Ze,onClick:()=>{Xr()},children:Ze?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-save",className:"primary",disabled:bn,onClick:()=>{Jr()},children:Xe?"...":n("roles.save")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",id:"roles-listener-delete",className:"danger",style:{display:Cr?"":"none"},disabled:Te,onClick:()=>{Mt()},children:Te?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-listener-save",className:"primary",disabled:Pn,onClick:()=>{pn()},children:dt?"...":n("roles.save")})]})})]}),(0,e.jsxs)("div",{className:"roles-editor-switch segmented",role:"tablist","aria-label":n("roles.editorTabs"),children:[(0,e.jsx)("button",{type:"button",className:q==="role"?"active":"","aria-pressed":q==="role",onClick:()=>ot("role"),children:n("roles.roleTab")}),(0,e.jsx)("button",{type:"button",className:q==="listener"?"active":"","aria-pressed":q==="listener",onClick:()=>ot("listener"),children:n("roles.listenerTab")})]}),q==="role"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.injectModeLabel")}),(0,e.jsx)(Ue,{id:"roles-editor-inject-mode",className:"roles-inline-menu",ariaLabel:n("roles.injectModeLabel"),disabled:Rr,label:n(h==="once"?"roles.injectModeOnce":"roles.injectModeEvery"),value:h,options:[{value:"every",label:n("roles.injectModeEvery")},{value:"once",label:n("roles.injectModeOnce")}],onChange:s=>{Qr(s==="once"?"once":"every")}}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.injectModeHint")}),(0,e.jsx)(ye,{flash:Mr})]}),(0,e.jsxs)("div",{className:"roles-editor-inject",children:[(0,e.jsx)("span",{className:"roles-field-label",children:n("roles.dispatchCompletionLabel")}),(0,e.jsxs)("label",{className:"filter-toggle roles-listener-enabled",children:[(0,e.jsx)("input",{id:"roles-editor-dispatch-completion-enabled",type:"checkbox",checked:C,disabled:kr,onChange:s=>{Zr(s.currentTarget.checked)}}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"filter-toggle-label",children:n("roles.dispatchCompletionEnabled")})]}),(0,e.jsx)("span",{className:"roles-editor-inject-hint",children:n("roles.dispatchCompletionHint")}),(0,e.jsx)(ye,{flash:Tr})]}),(0,e.jsx)("textarea",{id:"roles-editor-textarea",placeholder:n("roles.editorPlaceholder"),rows:14,value:T,onChange:s=>d(s.target.value)}),(0,e.jsxs)("div",{className:"roles-editor-footer",children:[(0,e.jsxs)("span",{id:"roles-editor-bytecount",className:Ir(De),children:[De," / ",j," bytes"]}),(0,e.jsx)(ye,{flash:Lr})]}),(0,e.jsx)(Sr,{content:T,tr:n,id:"roles-preview"})]}):(0,e.jsx)(Gn,{listener:b,members:Me,memberById:wt,promptByteLen:St,loading:Ar,membersLoading:_r,flash:Br,tr:n,onPatch:en,onSenderPolicyPatch:tn,onMessagePolicyPatch:rn,onContentPolicyPatch:nn,onToggleSenderType:sn,onToggleMsgType:on,onSetTargetPolicy:ln,onSetTargetsPolicy:an,onSetSenderMode:dn,previewLimit:Ce,previewStatus:Gr,onPreviewLimitChange:Dr,onPreview:()=>{Lt(!1)},onRunPreview:()=>{Lt(!0)}})]})})]}),(0,e.jsxs)("div",{id:"roles-profiles-view",className:"roles-layout roles-profiles-layout",hidden:!Y,children:[(0,e.jsxs)("div",{className:"roles-tree-panel",children:[(0,e.jsxs)("div",{className:"roles-tree-header roles-profile-create dashboard-toolbar",children:[(0,e.jsx)("input",{type:"text",id:"roles-profile-id",placeholder:n("roles.profileIdPlaceholder"),maxLength:64,ref:It,onChange:s=>s.currentTarget.setCustomValidity("")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-select",onClick:()=>{gn()},children:n("roles.openProfile")})]}),(0,e.jsxs)("div",{className:"roles-tree-header dashboard-toolbar",children:[(0,e.jsx)("input",{type:"search",id:"roles-profile-search",placeholder:n("roles.profileSearch"),value:B,onChange:s=>ee(s.target.value)}),(0,e.jsx)(Oe,{id:"roles-profile-refresh",label:n("roles.refresh"),onClick:()=>{fn()}})]}),(0,e.jsx)("div",{id:"roles-profile-list",className:"roles-tree",children:X?(0,e.jsx)(pe,{label:n("common.loading")}):(0,e.jsx)(On,{profiles:Wr,selectedProfileId:S,tr:n,onSelect:s=>{Tt(s)}})})]}),(0,e.jsx)("div",{className:"roles-editor-panel",children:S?(0,e.jsxs)("div",{id:"roles-profile-detail",className:"roles-editor-form roles-profile-detail",children:[(0,e.jsx)("div",{className:"roles-profile-title",children:(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"roles-editor-breadcrumb",children:[(0,e.jsx)("span",{children:S}),_e?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{className:"roles-breadcrumb-sep",children:"\u203A"}),(0,e.jsx)("span",{children:_e.botName??_e.larkAppId})]}):null]}),(0,e.jsx)("div",{className:"roles-editor-meta-line",children:n("roles.profileRuntimeHint")})]})}),(0,e.jsxs)("div",{className:"roles-profile-grid",children:[(0,e.jsxs)("div",{className:"roles-profile-bots",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.profileBots")}),(0,e.jsx)("div",{className:"roles-profile-bot-list",children:f.map(s=>{let l=!!ge(ne,s.larkAppId),i=A===s.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row roles-profile-bot-row ${i?"selected":""}`,"data-profile-bot-id":s.larkAppId,onClick:()=>{mn(s.larkAppId)},children:[(0,e.jsx)(xr,{bot:s}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:s.botName??s.larkAppId}),(0,e.jsx)("div",{className:"roles-bot-id",children:s.larkAppId})]}),(0,e.jsx)("span",{className:`roles-badge ${l?"has-role":"no-role"}`,children:n(l?"roles.configured":"roles.unconfigured")})]},s.larkAppId)})})]}),(0,e.jsx)("div",{className:"roles-profile-editor",children:A?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"roles-profile-editor-head",children:[(0,e.jsxs)("span",{id:"roles-profile-bytecount",className:Ir(Ge),children:[Ge," / ",j," bytes"]}),(0,e.jsxs)("div",{className:"roles-editor-actions roles-editor-head-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-delete",className:"danger",style:{display:Kr?"":"none"},disabled:bt,onClick:()=>{vn()},children:bt?"...":n("roles.delete")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-save",className:"primary",disabled:In,onClick:()=>{yn()},children:vt?"...":n("roles.saveEntry")})]})]}),(0,e.jsx)("textarea",{id:"roles-profile-textarea",placeholder:n("roles.profileEditorPlaceholder"),rows:12,value:oe,onChange:s=>Ie(s.target.value)}),(0,e.jsx)("div",{className:"roles-editor-footer",children:(0,e.jsx)(ye,{flash:Or})}),(0,e.jsx)(Sr,{content:oe,tr:n,id:"roles-profile-preview"})]}):(0,e.jsx)("div",{className:"roles-editor-empty roles-profile-inline-empty",children:n("roles.profileBotSelectHint")})})]}),(0,e.jsxs)("div",{className:"roles-profile-apply",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:n("roles.applyToGroup")}),(0,e.jsxs)("div",{className:"roles-profile-apply-controls",children:[(0,e.jsx)(Ue,{id:"roles-profile-apply-group",className:"roles-apply-group-menu",ariaLabel:n("roles.applyToGroup"),disabled:c.length===0,label:Be?.name??U??n("roles.noChats"),value:U??"",options:c.map(s=>({value:s.chatId,label:s.name??s.chatId})),onChange:s=>le(s)}),(0,e.jsxs)("label",{className:"roles-profile-force",children:[(0,e.jsx)("input",{type:"checkbox",id:"roles-profile-apply-force",checked:ft,onChange:s=>$r(s.target.checked)})," ",n("roles.applyForce")]})]}),(0,e.jsx)("div",{id:"roles-profile-apply-bots",children:!Be||Se.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):Se.map(s=>{let l=!!ge(ne,s.larkAppId);return(0,e.jsxs)("label",{className:"checkbox-row roles-profile-apply-bot",children:[(0,e.jsx)("input",{type:"checkbox",name:"profile-apply-bot",value:s.larkAppId,checked:gt.has(s.larkAppId),onChange:i=>hn(s.larkAppId,i.target.checked)}),(0,e.jsx)("span",{children:s.botName??s.larkAppId}),(0,e.jsx)("small",{children:n(l?"roles.configured":"roles.profileMissing")})]},s.larkAppId)})}),(0,e.jsxs)("div",{className:"roles-editor-actions",children:[(0,e.jsx)("button",{type:"button",id:"roles-profile-preview-apply",onClick:()=>{Ct(!0)},children:n("roles.previewApply")}),(0,e.jsx)("button",{type:"button",id:"roles-profile-apply",className:"primary",onClick:()=>{Ct(!1)},children:n("roles.applyProfile")})]}),(0,e.jsx)("div",{id:"roles-profile-apply-status",className:"roles-profile-status",children:(0,e.jsx)(Un,{status:Ur,bots:f,tr:n})})]})]}):(0,e.jsx)("div",{id:"roles-profile-empty",className:"roles-editor-empty",children:n("roles.profileSelectHint")})})]})]})}function An(t,n){let r=new Set(t);return r.has(n)?r.delete(n):r.add(n),r}function Ir(t){return`roles-bytecount ${t>Yt?"warn":""} ${t>j?"over":""}`}function _n(t){return`roles-bytecount ${t>zt?"warn":""} ${t>fe?"over":""}`}function ye(t){return t.flash?(0,e.jsxs)("span",{className:`roles-saved-flash ${t.flash.isError?"roles-save-error":""}`,children:[" ",t.flash.text]}):null}function Bn(t){let{tr:n}=t;return t.groups.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.noChats")}):(0,e.jsx)(e.Fragment,{children:t.groups.map(r=>{let o=t.expandedGroups.has(r.chatId),c=r.memberBots.filter(p=>p.inChat),m=Xt(r),f=Qt(r);return(0,e.jsxs)("div",{className:"roles-group-section",children:[(0,e.jsxs)("div",{className:`roles-group-row ${o?"expanded":""} ${t.selectedGroupId===r.chatId&&!t.selectedBotId?"selected":""}`,"data-group-id":r.chatId,onClick:()=>t.onToggleGroup(r.chatId),children:[(0,e.jsx)("span",{className:"roles-group-arrow",children:o?"\u25BE":"\u25B8"}),(0,e.jsx)("span",{className:"roles-group-icon","aria-hidden":"true",children:(0,e.jsxs)("svg",{viewBox:"0 0 16 16",children:[(0,e.jsx)("circle",{cx:"5.6",cy:"5.8",r:"2.4"}),(0,e.jsx)("path",{d:"M1.8 13.2c.5-2.4 2-3.6 3.8-3.6s3.3 1.2 3.8 3.6"}),(0,e.jsx)("circle",{cx:"11",cy:"6.8",r:"1.9"}),(0,e.jsx)("path",{d:"M9.8 12.6c.4-1.7 1.5-2.6 2.8-2.6 1 0 1.9.5 2.4 1.6"})]})}),(0,e.jsxs)("div",{className:"roles-group-info",children:[(0,e.jsx)("div",{className:"roles-group-name",children:r.name??r.chatId}),(0,e.jsxs)("div",{className:"roles-group-meta",children:[m,"/",f," ",n("roles.botsWithRoles")]}),(0,e.jsx)(Dn,{group:r,profiles:t.profiles,context:t.context,loaded:t.contextLoaded,tr:n})]}),(0,e.jsx)("span",{className:"roles-group-chevron"})]}),(0,e.jsx)("div",{className:"roles-bot-list",children:o?c.map(p=>{let v=t.selectedGroupId===r.chatId&&t.selectedBotId===p.larkAppId;return(0,e.jsxs)("div",{className:`roles-bot-row ${v?"selected":""}`,"data-group-id":r.chatId,"data-bot-id":p.larkAppId,onClick:L=>{L.stopPropagation(),t.onSelectBot(r.chatId,p.larkAppId)},children:[(0,e.jsx)("span",{className:"roles-bot-indent"}),(0,e.jsx)(xr,{bot:p}),(0,e.jsxs)("div",{className:"roles-bot-info",children:[(0,e.jsx)("div",{className:"roles-bot-name",children:p.botName}),(0,e.jsx)("div",{className:"roles-bot-id",children:p.larkAppId})]}),(0,e.jsxs)("div",{className:"roles-bot-badges",children:[(0,e.jsx)("span",{className:`roles-badge ${p.hasRole?"has-role":"no-role"}`,children:p.hasRole?n("roles.configured"):n("roles.unconfigured")}),p.hasMessageListener?(0,e.jsx)("span",{className:"roles-badge has-listener",children:n("roles.listenerBadge")}):null]})]},p.larkAppId)}):null})]},r.chatId)})})}function Dn(t){let{group:n,profiles:r,context:o,loaded:c,tr:m}=t;if(!r.length||!c)return null;let f=new Map;for(let L of n.memberBots)L.inChat&&f.set(L.larkAppId,o.effectiveRolesByBot.get(qe(L.larkAppId,n.chatId))??null);if(!Ot(f))return null;let p=Ut(n.memberBots,r,o.entriesByProfile,f)[0];if(!p)return(0,e.jsx)("div",{className:"roles-profile-match muted",children:m("groups.profileStatusUnmatched")});let v=p.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`roles-profile-match ${p.kind}`,children:m(v,{name:p.profileId,matched:p.matched,total:p.total,chat:p.chatMatched})})}function Gn(t){let{listener:n,tr:r}=t,[o,c]=(0,a.useState)("members"),[m,f]=(0,a.useState)(""),[p,v]=(0,a.useState)(()=>new Set),[L,ve]=(0,a.useState)(()=>(n.contentPolicy?.includeKeywords??[]).join(`
2
2
  `)),K=n.contentPolicy?.includeKeywords??[];(0,a.useEffect)(()=>{Rn(br(L),K)||ve(K.join(`
3
3
  `))},[K]);let he=new Set(n.senderPolicy?.includeSenderTypes??[]),H=new Set(n.messagePolicy?.includeMsgTypes??[]),M=n.senderPolicy?.mode==="all_except_excluded"?"all_except_excluded":"include_only",$=new Set(n.senderPolicy?.includeSenderOpenIds??[]),X=new Set(n.senderPolicy?.excludeSenderOpenIds??[]),Q=[...[...M==="all_except_excluded"?X:$].filter(d=>!t.memberById.has(d))],Z=[...t.members.filter(d=>d.memberType!=="bot"),...Q.map(d=>({openId:d,name:d,memberType:"unknown"}))],Re=t.members.filter(d=>d.memberType==="bot"),B=o==="bots"?Re:Z,ee=Vt(B,m),N=ee.map(d=>d.openId),be=N.filter(d=>p.has(d)),y=N.length>0&&be.length===N.length,O=[...p].filter(d=>B.some(h=>h.openId===d)),g=O.length>0?O:N,D=je({mode:M,include:[...$],exclude:[...X],targetIds:g});(0,a.useEffect)(()=>{f(""),v(new Set)},[o]),(0,a.useEffect)(()=>{let d=new Set(B.map(h=>h.openId));v(h=>{let I=new Set([...h].filter(C=>d.has(C)));return I.size===h.size?h:I})},[B]);let ke=(d,h)=>{v(I=>{let C=new Set(I);return h?C.add(d):C.delete(d),C})},V=()=>{v(d=>{let h=new Set(d);if(y)for(let I of N)h.delete(I);else for(let I of N)h.add(I);return h})},T=d=>{g.length!==0&&t.onSetTargetsPolicy(g,d)};return(0,e.jsxs)("div",{className:"roles-listener-editor",children:[t.loading?(0,e.jsx)(pe,{label:r("common.loading")}):null,(0,e.jsxs)("label",{className:"filter-toggle roles-listener-enabled",children:[(0,e.jsx)("input",{type:"checkbox",checked:n.enabled,onChange:d=>t.onPatch({enabled:d.currentTarget.checked})}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"filter-toggle-label",children:r("roles.listenerEnabled")})]}),(0,e.jsx)("p",{className:"roles-listener-scope-help",children:r("roles.listenerScopeHelp")}),(0,e.jsxs)("div",{className:"roles-listener-grid",children:[(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerName")}),(0,e.jsx)("input",{type:"text",value:n.name??"",placeholder:r("roles.listenerNamePlaceholder"),onChange:d=>t.onPatch({name:d.currentTarget.value})})]}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerReplyCardTitle")}),(0,e.jsx)("input",{type:"text",value:n.replyCardTitle??"",placeholder:r("roles.listenerReplyCardTitlePlaceholder"),onChange:d=>t.onPatch({replyCardTitle:d.currentTarget.value})})]}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerWorkingDir")}),(0,e.jsx)("input",{type:"text",value:n.workingDir??"",placeholder:r("roles.listenerWorkingDirPlaceholder"),onChange:d=>t.onPatch({workingDir:d.currentTarget.value})})]})]}),(0,e.jsxs)("div",{className:"roles-listener-policy-row",children:[(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerSenderTypes")}),(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:he.has("user"),onChange:d=>t.onToggleSenderType("user",d.currentTarget.checked)}),(0,e.jsx)("span",{children:r("roles.listenerSenderUser")})]}),(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:he.has("bot"),onChange:d=>t.onToggleSenderType("bot",d.currentTarget.checked)}),(0,e.jsx)("span",{children:r("roles.listenerSenderBot")})]})]}),(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerMessageTypes")}),wr.map(d=>(0,e.jsxs)("label",{className:"roles-listener-chip",children:[(0,e.jsx)("input",{type:"checkbox",checked:H.has(d),onChange:h=>t.onToggleMsgType(d,h.currentTarget.checked)}),(0,e.jsx)("span",{children:d})]},d))]}),(0,e.jsxs)("label",{className:"roles-listener-checkbox",children:[(0,e.jsx)("input",{type:"checkbox",checked:n.senderPolicy?.excludeSelf!==!1,onChange:d=>t.onSenderPolicyPatch({excludeSelf:d.currentTarget.checked})}),(0,e.jsx)("span",{children:r("roles.listenerExcludeSelf")})]})]}),(0,e.jsx)("div",{className:"roles-listener-policy-row",children:(0,e.jsxs)("div",{className:"roles-listener-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerSenderMode")}),(0,e.jsxs)("div",{className:"roles-listener-target-tabs segmented",role:"tablist","aria-label":r("roles.listenerSenderMode"),children:[(0,e.jsx)("button",{type:"button",className:M==="include_only"?"active":"","aria-pressed":M==="include_only",onClick:()=>t.onSetSenderMode("include_only"),children:r("roles.listenerSenderModeInclude")}),(0,e.jsx)("button",{type:"button",className:M==="all_except_excluded"?"active":"","aria-pressed":M==="all_except_excluded",onClick:()=>t.onSetSenderMode("all_except_excluded"),children:r("roles.listenerSenderModeAllExcept")})]}),(0,e.jsx)("small",{className:"roles-listener-scope-help",children:r(M==="all_except_excluded"?"roles.listenerSenderModeAllExceptHelp":"roles.listenerSenderModeIncludeHelp")})]})}),(0,e.jsxs)("div",{className:"roles-listener-content-policy",children:[(0,e.jsx)("div",{className:"roles-field-label",children:r("roles.listenerContentPolicy")}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerKeywords")}),(0,e.jsx)("textarea",{rows:2,value:L,placeholder:r("roles.listenerKeywordsPlaceholder"),onChange:d=>{ve(d.currentTarget.value),t.onContentPolicyPatch({includeKeywords:br(d.currentTarget.value)})}})]}),(0,e.jsx)("div",{className:"roles-listener-policy-row",children:(0,e.jsxs)("label",{className:"roles-listener-field",style:{minWidth:180},children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerMatchMode")}),(0,e.jsxs)("select",{value:n.contentPolicy?.matchMode==="all"?"all":"any",onChange:d=>t.onContentPolicyPatch({matchMode:d.currentTarget.value==="all"?"all":"any"}),children:[(0,e.jsx)("option",{value:"any",children:r("roles.listenerMatchModeAny")}),(0,e.jsx)("option",{value:"all",children:r("roles.listenerMatchModeAll")})]})]})}),(0,e.jsx)("small",{className:"roles-listener-scope-help",children:r("roles.listenerContentPolicyHelp")})]}),(0,e.jsxs)("label",{className:"roles-listener-field",children:[(0,e.jsx)("span",{className:"roles-field-label",children:r("roles.listenerPrompt")}),(0,e.jsx)("textarea",{id:"roles-listener-prompt",placeholder:r("roles.listenerPromptPlaceholder"),rows:9,value:n.prompt,onChange:d=>t.onPatch({prompt:d.currentTarget.value})})]}),(0,e.jsxs)("div",{className:"roles-editor-footer",children:[(0,e.jsxs)("span",{id:"roles-listener-bytecount",className:_n(t.promptByteLen),children:[t.promptByteLen," / ",fe," bytes"]}),(0,e.jsx)(ye,{flash:t.flash})]}),(0,e.jsxs)("div",{className:"roles-listener-preview-panel",children:[(0,e.jsxs)("div",{className:"roles-listener-preview-head",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:r("roles.listenerPreviewTitle")}),(0,e.jsx)("small",{children:r("roles.listenerPreviewHint")})]}),(0,e.jsxs)("div",{className:"roles-listener-preview-actions",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:r("roles.listenerPreviewCount")}),(0,e.jsx)("select",{value:t.previewLimit,onChange:d=>t.onPreviewLimitChange(Number(d.currentTarget.value)),children:Array.from({length:He},(d,h)=>h+1).map(d=>(0,e.jsx)("option",{value:d,children:d},d))})]}),(0,e.jsx)("button",{type:"button",onClick:t.onPreview,disabled:t.previewStatus.kind==="loading",children:t.previewStatus.kind==="loading"&&t.previewStatus.mode==="preview"?"...":r("roles.listenerPreviewButton")}),(0,e.jsx)("button",{type:"button",className:"primary",onClick:t.onRunPreview,disabled:t.previewStatus.kind==="loading",children:t.previewStatus.kind==="loading"&&t.previewStatus.mode==="run"?"...":r("roles.listenerRunPreviewButton")})]})]}),(0,e.jsx)(Fn,{status:t.previewStatus,tr:r})]}),(0,e.jsxs)("div",{className:"roles-listener-members",children:[(0,e.jsxs)("div",{className:"roles-listener-members-head",children:[(0,e.jsx)("div",{className:"roles-profile-section-title",children:r("roles.listenerFilters")}),(0,e.jsx)("small",{children:t.membersLoading?r("common.loading"):r("roles.listenerMembersHint")})]}),(0,e.jsxs)("div",{className:"roles-listener-target-tabs segmented",role:"tablist","aria-label":r("roles.listenerFilters"),children:[(0,e.jsx)("button",{type:"button",className:o==="members"?"active":"","aria-pressed":o==="members",onClick:()=>c("members"),children:r("roles.listenerMembers")}),(0,e.jsx)("button",{type:"button",className:o==="bots"?"active":"","aria-pressed":o==="bots",onClick:()=>c("bots"),children:r("roles.listenerBots")})]}),(0,e.jsxs)("div",{className:"roles-listener-filter-toolbar",children:[(0,e.jsx)("input",{type:"search",value:m,placeholder:r("roles.listenerSearchPlaceholder"),onChange:d=>f(d.currentTarget.value)}),m?(0,e.jsx)("button",{type:"button",className:"roles-listener-clear-search",onClick:()=>f(""),"aria-label":r("roles.listenerClearSearch"),children:"\xD7"}):null,(0,e.jsx)("button",{type:"button",className:"roles-listener-select-all",disabled:N.length===0,onClick:V,children:r(y?"roles.listenerClearVisible":"roles.listenerSelectVisible",{count:N.length})})]}),(0,e.jsxs)("div",{className:"roles-listener-bulkbar",children:[(0,e.jsxs)("span",{children:[O.length>0?r("roles.listenerSelectedCount",{count:O.length}):r("roles.listenerFilteredCount",{count:N.length}),D==="mixed"?` \xB7 ${r("roles.listenerMixedMode")}`:""]}),(0,e.jsxs)("div",{className:"roles-listener-member-actions",role:"group","aria-label":r("roles.listenerBulkActions"),children:[(0,e.jsx)("button",{type:"button",className:D==="listen"?"active":"","aria-pressed":D==="listen",disabled:g.length===0,onClick:()=>T(!0),children:r("roles.listenerTargetListen")}),(0,e.jsx)("button",{type:"button",className:D==="ignore"?"active":"","aria-pressed":D==="ignore",disabled:g.length===0,onClick:()=>T(!1),children:r("roles.listenerTargetIgnore")})]})]}),(0,e.jsx)("div",{className:"roles-listener-member-list",children:ee.length===0?(0,e.jsx)("div",{className:"roles-empty",children:r(o==="bots"?"roles.listenerBotsEmpty":"roles.listenerMembersEmpty")}):ee.map(d=>{let h=je({mode:M,include:[...$],exclude:[...X],targetIds:[d.openId]});return(0,e.jsxs)("div",{className:"roles-listener-member",children:[(0,e.jsx)("label",{className:"roles-listener-member-select","aria-label":ze(d,d.openId),children:(0,e.jsx)("input",{type:"checkbox",checked:p.has(d.openId),onChange:I=>ke(d.openId,I.currentTarget.checked)})}),(0,e.jsxs)("div",{className:"roles-listener-member-main",children:[(0,e.jsx)("strong",{children:ze(d,d.openId)}),(0,e.jsx)("span",{children:d.openId})]}),(0,e.jsxs)("div",{className:"roles-listener-member-actions",role:"group","aria-label":ze(d,d.openId),children:[(0,e.jsx)("button",{type:"button",className:h==="listen"?"active":"","aria-pressed":h==="listen",onClick:()=>t.onSetTargetPolicy(d.openId,!0),children:r("roles.listenerTargetListen")}),(0,e.jsx)("button",{type:"button",className:h==="ignore"?"active":"","aria-pressed":h==="ignore",onClick:()=>t.onSetTargetPolicy(d.openId,!1),children:r("roles.listenerTargetIgnore")})]})]},d.openId)})})]})]})}function Sr(t){return(0,e.jsx)("div",{id:t.id,className:"roles-preview",children:t.content.trim()?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("strong",{children:t.tr("roles.preview")}),(0,e.jsx)("pre",{children:t.content})]}):(0,e.jsx)("small",{children:t.tr("roles.previewEmpty")})})}function Fn(t){let{status:n,tr:r}=t;if(n.kind==="idle")return(0,e.jsx)("div",{className:"roles-listener-preview-empty",children:r("roles.listenerPreviewEmpty")});if(n.kind==="loading")return(0,e.jsx)(pe,{label:r("common.loading")});if(n.kind==="error")return(0,e.jsx)("div",{className:"roles-listener-preview-error",children:n.text});let o=n.response.matches??[],m=(n.response.results??[]).reduce((f,p)=>{let v=p.ok?p.state??"triggered":"failed";return f[v]=(f[v]??0)+1,f},{});return(0,e.jsxs)("div",{className:"roles-listener-preview-results",children:[(0,e.jsx)("div",{className:"roles-listener-preview-summary",children:n.mode==="run"?r("roles.listenerRunPreviewSummary",{count:o.length,triggered:m.triggered??0,running:m.running??0,replied:m.replied??0,failed:m.failed??0}):r("roles.listenerPreviewSummary",{count:o.length})}),o.length===0?(0,e.jsx)("div",{className:"roles-listener-preview-empty",children:r("roles.listenerPreviewNoMatches")}):(0,e.jsx)("div",{className:"roles-listener-preview-list",children:o.map(f=>(0,e.jsx)($n,{item:f,result:n.response.results?.find(p=>p.messageId===f.messageId),tr:r},f.messageId))})]})}function $n(t){let n=t.item.messageText.length>300?`${t.item.messageText.slice(0,300)}...`:t.item.messageText,r=t.item.senderName||t.item.senderOpenId||t.item.senderType,o=dr(t.item.createTime);return(0,e.jsxs)("div",{className:"roles-listener-preview-item",children:[(0,e.jsxs)("div",{className:"roles-listener-preview-meta",children:[(0,e.jsx)("span",{children:t.item.msgType}),(0,e.jsx)("span",{children:t.item.senderType}),t.item.senderOpenId?(0,e.jsx)("span",{children:t.item.senderOpenId}):null,(0,e.jsx)("span",{children:t.item.messageId}),t.result?(0,e.jsx)("span",{className:Mn(t.result.state,t.result.ok),children:t.tr(`roles.listenerRunPreviewState.${t.result.ok?t.result.state??"triggered":"failed"}`)}):null]}),t.result?.sessionId||t.result?.replyMessageId||t.result?.error?(0,e.jsxs)("div",{className:"roles-listener-preview-run-detail",children:[t.result.sessionId?(0,e.jsx)("span",{children:t.result.sessionId}):null,t.result.replyMessageId?(0,e.jsx)("span",{children:t.result.replyMessageId}):null,t.result.error?(0,e.jsx)("strong",{children:t.result.error}):null]}):null,(0,e.jsxs)("div",{className:"roles-listener-preview-sender",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewSender")}),(0,e.jsx)("strong",{children:r})]}),o?(0,e.jsxs)("div",{className:"roles-listener-preview-time",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewTime")}),(0,e.jsx)("strong",{children:o})]}):null,t.item.messageTitle?(0,e.jsxs)("div",{className:"roles-listener-preview-title",children:[(0,e.jsx)("span",{children:t.tr("roles.listenerPreviewMessageTitle")}),(0,e.jsx)("strong",{children:t.item.messageTitle})]}):null,(0,e.jsx)("div",{className:"roles-listener-preview-content-label",children:t.tr("roles.listenerPreviewContent")}),(0,e.jsx)("pre",{children:n})]})}function On(t){let{tr:n}=t;return t.profiles.length===0?(0,e.jsx)("div",{className:"roles-empty",children:n("roles.profileEmpty")}):(0,e.jsx)(e.Fragment,{children:t.profiles.map(r=>{let o=t.selectedProfileId===r.profileId,c=(r.botEntries??[]).some(m=>m.hasEntry);return(0,e.jsxs)("div",{className:`roles-profile-row ${o?"selected":""}`,"data-profile-id":r.profileId,onClick:()=>t.onSelect(r.profileId),children:[(0,e.jsxs)("div",{className:"roles-profile-row-main",children:[(0,e.jsx)("div",{className:"roles-profile-name",children:r.profileId}),(0,e.jsxs)("div",{className:"roles-group-meta",children:[r.entryCount," ",n("roles.profileEntries")]})]}),(0,e.jsx)("span",{className:`roles-badge ${c?"has-role":"no-role"}`,children:n(c?"roles.configured":"roles.profileMissing")})]},r.profileId)})})}function Un(t){let{status:n,bots:r,tr:o}=t;return n.kind==="idle"?null:n.kind==="text"?(0,e.jsx)(e.Fragment,{children:n.text}):(0,e.jsx)(e.Fragment,{children:n.results.map(c=>{let f=r.find(v=>v.larkAppId===c.larkAppId)?.botName??c.larkAppId,p=c.ok?n.preview?c.wouldRefuse?o("roles.applyWouldRefuse"):o("roles.applyPreviewOk"):o("roles.applyOk"):`${o("roles.applyFailed")}: ${String(c.error??`HTTP ${c.status}`)}`;return(0,e.jsxs)("div",{children:[f,": ",p]},c.larkAppId)})})}function Zn(t){return $e(t,(0,e.jsx)(Nr,{tab:"groups"}))}function es(t){return $e(t,(0,e.jsx)(Nr,{tab:"profiles"}))}export{es as renderRoleProfilesPage,Zn as renderRolesPage};