botmux 3.18.7 → 3.18.8
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.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +57 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +200 -21
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/pi-turn-boundary-extension.d.ts +66 -0
- package/dist/adapters/cli/pi-turn-boundary-extension.d.ts.map +1 -0
- package/dist/adapters/cli/pi-turn-boundary-extension.js +106 -0
- package/dist/adapters/cli/pi-turn-boundary-extension.js.map +1 -0
- package/dist/adapters/cli/pi.d.ts +29 -0
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +61 -10
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/bot-registry.d.ts +9 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +5 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +24 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +134 -17
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +5 -3
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +2 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +2 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/groups-matrix-snapshot.d.ts +27 -0
- package/dist/dashboard/groups-matrix-snapshot.d.ts.map +1 -1
- package/dist/dashboard/groups-matrix-snapshot.js +16 -0
- package/dist/dashboard/groups-matrix-snapshot.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +4 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +52 -9
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +29 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +45 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +5 -0
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/dashboard-components.d.ts +29 -0
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-components.js +96 -4
- package/dist/dashboard/web/dashboard-components.js.map +1 -1
- package/dist/dashboard/web/groups-api.d.ts +11 -0
- package/dist/dashboard/web/groups-api.d.ts.map +1 -1
- package/dist/dashboard/web/groups-api.js +51 -0
- package/dist/dashboard/web/groups-api.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +10 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +11 -2
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +12 -2
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-dock-page-6LC422N6.js → agent-workbench-dock-page-FAL2YGY5.js} +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-page-RSAWY7O2.js → agent-workbench-page-G65IOPLY.js} +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-3BNFNZEO.js +1 -0
- package/dist/dashboard-web/chunks/chunk-2XHWGUTB.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-R3LJUCEO.js → chunk-3OJQKYM3.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-K232GT3M.js → chunk-IRFGJSPL.js} +5 -5
- package/dist/dashboard-web/chunks/{chunk-IA5KMD5O.js → chunk-IYVXEFKU.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-YJA3KY3J.js → chunk-MYLVEXYF.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-QALRQEKD.js +1 -0
- package/dist/dashboard-web/chunks/{connectors-page-DJCTHSFB.js → connectors-page-K6VZNYUQ.js} +1 -1
- package/dist/dashboard-web/chunks/{customization-page-VQJAEDZY.js → customization-page-FRP6RFOI.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-O7SZRKNM.js → feedback-page-4X7N5J33.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-7PONUYHE.js → groups-page-RFQVUO6K.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-J6DAAJ6D.js → insights-page-XWH77GX7.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-F3QNEW7N.js → monitor-room-WFU3745R.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-JHDD2VS2.js → monitoring-page-3NYPZEQT.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-MMTN4IKD.js → office-page-4I3X6PTF.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-OQWLVTKT.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-FNI4MGX6.js → roles-page-RKUGNQOW.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-6PUU63KS.js → schedules-page-SAJKYRZ6.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-O4N72EXT.js → sessions-page-IU6VNSX4.js} +1 -1
- package/dist/dashboard-web/chunks/{settings-page-G7B3STUF.js → settings-page-WTIPX7BQ.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-CEWKQOIG.js → skills-page-MKG3HJIU.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-NUP4VK4H.js → team-federation-page-7SMZJWPT.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-M4XF6D5Z.js → v3-page-JMCFLY4Y.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-L755NZX6.js → whiteboards-page-5YTWY5EB.js} +1 -1
- package/dist/dashboard-web/style.css +65 -3
- package/dist/dashboard.js +50 -4
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +4 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +4 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +141 -38
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +2 -0
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +9 -1
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/pi-transcript.d.ts +21 -1
- package/dist/services/pi-transcript.d.ts.map +1 -1
- package/dist/services/pi-transcript.js +188 -8
- package/dist/services/pi-transcript.js.map +1 -1
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +495 -11
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/under-review-notify-store.d.ts +18 -0
- package/dist/services/under-review-notify-store.d.ts.map +1 -0
- package/dist/services/under-review-notify-store.js +67 -0
- package/dist/services/under-review-notify-store.js.map +1 -0
- package/dist/setup/open-platform-automation.d.ts +210 -2
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +538 -44
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-outcome.d.ts.map +1 -1
- package/dist/setup/open-platform-outcome.js +5 -0
- package/dist/setup/open-platform-outcome.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +6 -6
- package/dist/workflows/events/schema.d.ts +12 -12
- package/package.json +9 -7
- package/dist/dashboard-web/chunks/bot-defaults-page-67RAWCSQ.js +0 -1
- package/dist/dashboard-web/chunks/chunk-MMLTCXHP.js +0 -10
- package/dist/dashboard-web/chunks/chunk-NYY66DNC.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-IQ2UJAJP.js +0 -1
|
@@ -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-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(`
|
|
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-QALRQEKD.js";import{d as Gt}from"./chunk-3OJQKYM3.js";import"./chunk-QITAMHW6.js";import{D as Bt,H as Dt}from"./chunk-IRFGJSPL.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as Y}from"./chunk-OXSVWLER.js";import{a as ke}from"./chunk-CEUCNZFJ.js";import{g as ge,m as ye,n as we,o as ve,p as be,q as Te}from"./chunk-NYY66DNC.js";import{b as fe,d as te}from"./chunk-R3LJUCEO.js";import"./chunk-QITAMHW6.js";import{G as de,J as ee,b as ue}from"./chunk-K232GT3M.js";import{c as pe}from"./chunk-ARROO6TE.js";import{c as X,d as Ie,e as me}from"./chunk-3YZFAHNK.js";var f=X(Ie(),1);function L(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function se(e,t){return e.y===t.y&&e.m===t.m&&e.d===t.d&&e.h===t.h&&e.i===t.i&&e.s===t.s}function _e(e,t){let s=new Date(Date.parse(e));if(isNaN(s))throw new Error("Invalid ISO8601 passed to timezone parser.");let n=e.substring(9);return n.includes("Z")||n.includes("+")||n.includes("-")?ie(s.getUTCFullYear(),s.getUTCMonth()+1,s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),"Etc/UTC"):ie(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds(),t)}function Ne(e,t,s){return Oe(_e(e,t),s)}function Oe(e,t){let s=new Date(L(e)),n=z(s,e.tz),r=L(e),a=L(n),o=r-a,l=new Date(s.getTime()+o),u=z(l,e.tz);if(se(u,e)){let p=new Date(l.getTime()-36e5),m=z(p,e.tz);return se(m,e)?p:l}let d=new Date(l.getTime()+L(e)-L(u)),b=z(d,e.tz);if(se(b,e))return d;if(t)throw new Error("Invalid date passed to fromTZ()");return l.getTime()>d.getTime()?l:d}function z(e,t){let s,n;try{s=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),n=s.formatToParts(e)}catch(a){let o=a instanceof Error?a.message:String(a);throw new RangeError(`toTZ: Invalid timezone '${t}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${o}`)}let r={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let a of n)(a.type==="year"||a.type==="month"||a.type==="day"||a.type==="hour"||a.type==="minute"||a.type==="second")&&(r[a.type]=parseInt(a.value,10));if(isNaN(r.year)||isNaN(r.month)||isNaN(r.day)||isNaN(r.hour)||isNaN(r.minute)||isNaN(r.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${t}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(r)}`);return r.hour===24&&(r.hour=0),{y:r.year,m:r.month,d:r.day,h:r.hour,i:r.minute,s:r.second,tz:t}}function ie(e,t,s,n,r,a,o){return{y:e,m:t,d:s,h:n,i:r,s:a,tz:o}}var xe=[1,2,4,8,16],Ce=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,s){this.pattern=e,this.timezone=t,this.mode=s?.mode??"auto",this.alternativeWeekdays=s?.alternativeWeekdays??!1,this.sloppyRanges=s?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let r=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${r} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0&&(e[0]=e[0].replace(/\?/g,"*"),e[1]=e[1].replace(/\?/g,"*"),e[2]=e[2].replace(/\?/g,"*"),e[3]=e[3].replace(/\?/g,"*"),e[4]=e[4].replace(/\?/g,"*"),e[5]=e[5].replace(/\?/g,"*"),e[6]&&(e[6]=e[6].replace(/\?/g,"*"))),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let s=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],s,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,s,n){let r=this[e],a=e==="day"&&this.lastDayOfMonth,o=e==="day"&&this.lastWeekday;if(t===""&&!a&&!o)throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(n);let l=t.split(",");if(l.length>1)for(let u=0;u<l.length;u++)this.partToArray(e,l[u],s,n);else t.indexOf("-")!==-1&&t.indexOf("/")!==-1?this.handleRangeWithStepping(t,e,s,n):t.indexOf("-")!==-1?this.handleRange(t,e,s,n):t.indexOf("/")!==-1?this.handleStepping(t,e,s,n):t!==""&&this.handleNumber(t,e,s,n)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,s,n){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+s;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||n)}setPart(e,t,s){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,s);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=s}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,s,n,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(s!==void 0){if(s===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(s>this[n].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[n].length+")")}}handleRangeWithStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,l,u]=a,d=parseInt(o,10)+s,b=parseInt(l,10)+s,p=parseInt(u,10);this.validateNotNaN(d,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(b,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(p,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(d,b,p,t,e);for(let m=d;m<=b;m+=p)this.setPart(t,m,r[1]||n)}extractNth(e,t){let s=e,n;if(s.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");n=s.split("#")[1],s=s.split("#")[0]}else if(s.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");n="L",s=s.slice(0,-1)}return[s,n]}handleRange(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+s,l=parseInt(a[1],10)+s;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(l,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,l,void 0,t,e);for(let u=o;u<=l;u++)this.setPart(t,u,r[1]||n)}handleStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+s);let l=parseInt(a[1],10);this.validateNotNaN(l,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,l,t,e);for(let u=o;u<this[t].length;u+=l)this.setPart(t,u,r[1]||n)}replaceAlphaDays(e){return e.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,"1").replace(/mon/gi,"2").replace(/tue/gi,"3").replace(/wed/gi,"4").replace(/thu/gi,"5").replace(/fri/gi,"6").replace(/sat/gi,"7")}replaceAlphaMonths(e){return e.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@yearly"||t==="@annually")return"0 0 1 1 *";if(t==="@monthly")return"0 0 1 * *";if(t==="@weekly")return"0 0 * * 0";if(t==="@daily"||t==="@midnight")return"0 0 * * *";if(t==="@hourly")return"0 * * * *";if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|xe[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},ne=[31,28,31,30,31,30,31,31,30,31,30,31],v=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],N=class Se{tz;ms;second;minute;hour;day;month;year;constructor(t,s){if(this.tz=s,t&&t instanceof Date)if(!isNaN(t))this.fromDate(t);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(t==null)this.fromDate(new Date);else if(t&&typeof t=="string")this.fromString(t);else if(t instanceof Se)this.fromCronDate(t);else throw new TypeError("CronDate: Invalid type ("+typeof t+") passed to CronDate constructor")}getLastDayOfMonth(t,s){return s!==1?ne[s]:new Date(Date.UTC(t,s+1,0)).getUTCDate()}getLastWeekday(t,s){let n=this.getLastDayOfMonth(t,s),r=new Date(Date.UTC(t,s,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(t,s,n){let r=this.getLastDayOfMonth(t,s);if(n>r)return-1;let a=new Date(Date.UTC(t,s,n)).getUTCDay();return a===0?n===r?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(t,s,n,r){let a=new Date(Date.UTC(t,s,n)).getUTCDay(),o=0;for(let l=1;l<=n;l++)new Date(Date.UTC(t,s,l)).getUTCDay()===a&&o++;if(r&63&&xe[o-1]&r)return!0;if(r&32){let l=this.getLastDayOfMonth(t,s);for(let u=n+1;u<=l;u++)if(new Date(Date.UTC(t,s,u)).getUTCDay()===a)return!1;return!0}return!1}fromDate(t){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes()+this.tz,this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply();else try{let s=z(t,this.tz);this.ms=t.getMilliseconds(),this.second=s.s,this.minute=s.i,this.hour=s.h,this.day=s.d,this.month=s.m-1,this.year=s.y}catch(s){let n=s instanceof Error?s.message:String(s);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=t.getMilliseconds(),this.second=t.getSeconds(),this.minute=t.getMinutes(),this.hour=t.getHours(),this.day=t.getDate(),this.month=t.getMonth(),this.year=t.getFullYear()}fromCronDate(t){this.tz=t.tz,this.year=t.year,this.month=t.month,this.day=t.day,this.hour=t.hour,this.minute=t.minute,this.second=t.second,this.ms=t.ms}apply(){if(this.month>11||this.month<0||this.day>ne[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let t=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),!0}else return!1}fromString(t){if(typeof this.tz=="number"){let s=Ne(t);this.ms=s.getUTCMilliseconds(),this.second=s.getUTCSeconds(),this.minute=s.getUTCMinutes(),this.hour=s.getUTCHours(),this.day=s.getUTCDate(),this.month=s.getUTCMonth(),this.year=s.getUTCFullYear(),this.apply()}else return this.fromDate(Ne(t,this.tz))}findNext(t,s,n,r){return this._findMatch(t,s,n,r,1)}_findMatch(t,s,n,r,a){let o=this[s],l;n.lastDayOfMonth&&(l=this.getLastDayOfMonth(this.year,this.month));let u=!n.starDOW&&s=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,d=this[s]+r,b=a===1?p=>p<n[s].length:p=>p>=0;for(let p=d;b(p);p+=a){let m=n[s][p];if(s==="day"&&!m){for(let w=0;w<n.nearestWeekdays.length;w++)if(n.nearestWeekdays[w]){let A=this.getNearestWeekday(this.year,this.month,w-r);if(A===-1)continue;if(A===p-r){m=1;break}}}if(s==="day"&&n.lastWeekday){let w=this.getLastWeekday(this.year,this.month);p-r===w&&(m=1)}if(s==="day"&&n.lastDayOfMonth&&p-r==l&&(m=1),s==="day"&&!n.starDOW){let w=n.dayOfWeek[(u+(p-r-1))%7];if(w&&w&63)w=this.isNthWeekdayOfMonth(this.year,this.month,p-r,w)?1:0;else if(w)throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${w}`);n.useAndLogic?m=m&&w:!t.domAndDow&&!n.starDOM?m=m||w:m=m&&w}if(m)return this[s]=p-r,o!==this[s]?2:1}return 3}recurse(t,s,n){if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let a=-1;for(let o=this.year+1;o<t.year.length&&o<1e4;o++)if(t.year[o]===1){a=o;break}if(a===-1)return null;this.year=a,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let r=this.findNext(s,v[n][0],t,v[n][2]);if(r>1){let a=n+1;for(;a<v.length;)this[v[a][0]]=-v[a][2],a++;if(r===3){if(this[v[n][1]]++,this[v[n][0]]=-v[n][2],this.apply(),n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=t.year.length)return null}return this.recurse(t,s,0)}else if(this.apply())return this.recurse(t,s,n-1)}return n+=1,n>=v.length?this:(t.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(t,s,n)}increment(t,s,n){return this.second+=s.interval!==void 0&&s.interval>1&&n?s.interval:1,this.ms=0,this.apply(),this.recurse(t,s,0)}decrement(t,s){return this.second-=s.interval!==void 0&&s.interval>1?s.interval:1,this.ms=0,this.apply(),this.recurseBackward(t,s,0,0)}recurseBackward(t,s,n,r=0){if(r>1e4)return null;if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let o=-1;for(let l=this.year-1;l>=0;l--)if(t.year[l]===1){o=l;break}if(o===-1)return null;this.year=o,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let a=this.findPrevious(s,v[n][0],t,v[n][2]);if(a>1){let o=n+1;for(;o<v.length;){let l=v[o][0],u=v[o][2],d=this.getMaxPatternValue(l,t,u);this[l]=d,o++}if(a===3){if(this[v[n][1]]--,n===0){let b=this.getLastDayOfMonth(this.year,this.month);this.day>b&&(this.day=b)}if(n===1)if(this.day<=0)this.day=1;else{let b=this.year,p=this.month;for(;p<0;)p+=12,b--;for(;p>11;)p-=12,b++;let m=p!==1?ne[p]:new Date(Date.UTC(b,p+1,0)).getUTCDate();this.day>m&&(this.day=m)}this.apply();let l=v[n][0],u=v[n][2],d=this.getMaxPatternValue(l,t,u);if(l==="day"){let b=this.getLastDayOfMonth(this.year,this.month);this[l]=Math.min(d,b)}else this[l]=d;if(this.apply(),n===0){let b=v[1][2],p=this.getMaxPatternValue("day",t,b),m=this.getLastDayOfMonth(this.year,this.month),w=Math.min(p,m);w!==this.day&&(this.day=w,this.hour=this.getMaxPatternValue("hour",t,v[2][2]),this.minute=this.getMaxPatternValue("minute",t,v[3][2]),this.second=this.getMaxPatternValue("second",t,v[4][2]))}if(n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(t,s,0,r+1)}else if(this.apply())return this.recurseBackward(t,s,n-1,r+1)}return n+=1,n>=v.length?this:this.year<0?null:this.recurseBackward(t,s,n,r+1)}getMaxPatternValue(t,s,n){if(t==="day"&&s.lastDayOfMonth)return this.getLastDayOfMonth(this.year,this.month);if(t==="day"&&!s.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let r=s[t].length-1;r>=0;r--)if(s[t][r])return r-n;return s[t].length-1-n}findPrevious(t,s,n,r){return this._findMatch(t,s,n,r,-1)}getDate(t){return t||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):Oe(ie(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(t,s){if(!t.starYear&&(this.year<0||this.year>=t.year.length||t.year[this.year]===0))return!1;for(let n=0;n<v.length;n++){let r=v[n][0],a=v[n][2],o=this[r];if(o+a<0||o+a>=t[r].length)return!1;let l=t[r][o+a];if(r==="day"){if(!l){for(let u=0;u<t.nearestWeekdays.length;u++)if(t.nearestWeekdays[u]){let d=this.getNearestWeekday(this.year,this.month,u-a);if(d!==-1&&d===o){l=1;break}}}if(t.lastWeekday){let u=this.getLastWeekday(this.year,this.month);o===u&&(l=1)}if(t.lastDayOfMonth){let u=this.getLastDayOfMonth(this.year,this.month);o===u&&(l=1)}if(!t.starDOW){let u=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),d=t.dayOfWeek[(u+(o-1))%7];d&&d&63&&(d=this.isNthWeekdayOfMonth(this.year,this.month,o,d)?1:0),t.useAndLogic?l=l&&d:!s.domAndDow&&!t.starDOM?l=l||d:l=l&&d}}if(!l)return!1}return!0}};function Ee(e){if(e===void 0&&(e={}),delete e.name,e.legacyMode!==void 0&&e.domAndDow===void 0?e.domAndDow=!e.legacyMode:e.domAndDow===void 0&&(e.domAndDow=!1),e.legacyMode=!e.domAndDow,e.paused=e.paused===void 0?!1:e.paused,e.maxRuns=e.maxRuns===void 0?1/0:e.maxRuns,e.catch=e.catch===void 0?!1:e.catch,e.interval=e.interval===void 0?0:parseInt(e.interval.toString(),10),e.utcOffset=e.utcOffset===void 0?void 0:parseInt(e.utcOffset.toString(),10),e.dayOffset=e.dayOffset===void 0?0:parseInt(e.dayOffset.toString(),10),e.unref=e.unref===void 0?!1:e.unref,e.mode=e.mode===void 0?"auto":e.mode,e.alternativeWeekdays=e.alternativeWeekdays===void 0?!1:e.alternativeWeekdays,e.sloppyRanges=e.sloppyRanges===void 0?!1:e.sloppyRanges,!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(e.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");if(e.startAt&&(e.startAt=new N(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new N(e.stopAt,e.timezone)),e.interval!==null){if(isNaN(e.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(e.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(e.utcOffset!==void 0){if(isNaN(e.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(e.utcOffset<-870||e.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(e.utcOffset!==void 0&&e.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(e.unref!==!0&&e.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(e.dayOffset!==void 0&&e.dayOffset!==0&&isNaN(e.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return e}function $(e){return Object.prototype.toString.call(e)==="[object Function]"||typeof e=="function"||e instanceof Function}function We(e){return $(e)}function Ue(e){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(e):e&&typeof e.unref<"u"&&e.unref()}var De=30*1e3,B=[],Ae=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,s){let n,r;if($(t))r=t;else if(typeof t=="object")n=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if($(s))r=s;else if(typeof s=="object")n=s;else if(s!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=n?.name,this.options=Ee(n),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:n?n.maxRuns:void 0,paused:n?n.paused:!1,pattern:new Ce("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new N(e,this.getTz()):this._states.pattern=new Ce(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(B.find(a=>a.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");B.push(this)}return r!==void 0&&We(r)&&(this.fn=r,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let s=t||this._states.currentRun||void 0;return this._enumerateRuns(e,s,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}_enumerateRuns(e,t,s){let n=[],r=t?new N(t,this.getTz()):null,a=s==="next"?this._next:this._previous;for(;e--;){let o=a.call(this,r);if(!o)break;let l=o.getDate(!1);n.push(this.applyDayOffset(l)),r=o}return n}match(e){if(this._states.once){let s=new N(e,this.getTz());s.ms=0;let n=new N(this._states.once,this.getTz());return n.ms=0,s.getTime()===n.getTime()}let t=new N(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,s=this.fn!==void 0,n=!this._states.kill;return t&&s&&n&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof N||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new N(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=B.indexOf(this);e>=0&&B.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let t=this.msToNext(),s=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||s===null?this:(t>De&&(t=De),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(s),t),this._states.currentTimeout&&this.options.unref&&Ue(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new N(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if($(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new N(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,s=!this._states.paused&&t.getTime()>=e.getTime(),n=this._states.blocking&&this.options.protect;s&&!n?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):s&&n&&$(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),s=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),s=!e),e=new N(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let n=this._states.once||new N(e,this.getTz());return!s&&n!==this._states.once&&(n=n.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||n===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&n.getTime()>=this.options.stopAt.getTime()?null:n}_previous(e){let t=new N(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let s=new N(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(s=s.decrement(this._states.pattern,this.options),s===null||this.options.startAt&&s.getTime()<this.options.startAt.getTime()?null:s)}_calculatePreviousRun(e,t){let s=new N(void 0,this.getTz()),n=e;if(this.options.startAt.getTime()<=s.getTime()){n=this.options.startAt;let r=n.getTime()+this.options.interval*1e3;for(;r<=s.getTime();)n=new N(n,this.getTz()).increment(this._states.pattern,this.options,!0),r=n.getTime()+this.options.interval*1e3;t=!0}return n===null&&(n=void 0),[n,t]}};var i=X(me(),1),Le=1e3;function F(e,t){if(!e)return"\u2014";try{return new Date(e).toLocaleString(void 0,t?{timeZone:t,timeZoneName:"short"}:void 0)}catch{return e}}function ze(e,t){let s=t.q.toLowerCase();return e.filter(n=>!t.kind||n.parsed?.kind===t.kind).filter(n=>!t.enabledOnly||n.enabled).filter(n=>!s||JSON.stringify(n).toLowerCase().includes(s)).sort((n,r)=>{if(n.enabled!==r.enabled)return n.enabled?-1:1;let a=n.nextRunAt?Date.parse(n.nextRunAt):1/0,o=r.nextRunAt?Date.parse(r.nextRunAt):1/0;return a-o})}function re(e){return e.deliver==="local"?"local":e.executionPosition==="new-topic"?"new-topic":e.executionPosition==="topic"?e.rootMessageId?"thread":"chat":e.executionPosition==="top-level"?"chat":e.deliver==="new-topic"?"new-topic":e.scope==="chat"?"chat":e.rootMessageId?"thread":"chat"}function $e(e,t){let s=re(e);return t(s==="local"?"schedules.deliveryLocal":s==="new-topic"?"schedules.deliveryNewTopic":s==="thread"?"schedules.deliveryThread":"schedules.deliveryTopLevel")}function Fe(e){return e.repeat?`${e.repeat.completed}/${e.repeat.times??"\u221E"}`:"\u2014"}function qe(e){return new Promise(t=>window.setTimeout(t,e))}var He=[{label:"\u5DE5\u4F5C\u65E5 09:00",expr:"0 9 * * 1-5"},{label:"\u6BCF\u65E5 09:00",expr:"0 9 * * *"},{label:"\u6BCF\u5468\u4E00 09:00",expr:"0 9 * * 1"},{label:"\u6BCF\u5C0F\u65F6",expr:"0 * * * *"}],je={m:6e4,h:36e5,d:864e5};function Re(e,t,s){let n=e.trim();if(!n)return{ok:!1,error:t("schedules.form.errEmpty")};let r=n.split(/\s+/);if(r.length===5&&r.every(o=>/^[\d*\-,/]+$/.test(o)))try{let o=new Ae(n,s?{timezone:s}:void 0).nextRun();return o?{ok:!0,preview:F(o.toISOString(),s)}:{ok:!1,error:t("schedules.form.errCron")}}catch{return{ok:!1,error:t("schedules.form.errCron")}}let a=n.match(/^every\s+(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i);if(a)return{ok:!0};if(a=n.match(/^(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i),a){let o=parseInt(a[1],10)*(je[a[2][0].toLowerCase()]??6e4);return{ok:!0,preview:F(new Date(Date.now()+o).toISOString(),s)}}if(/^\d{4}-\d{2}-\d{2}(T| |$)/.test(n)){let o=new Date(n);if(!isNaN(o.getTime()))return{ok:!0,preview:F(o.toISOString(),s)}}return/^(每[天日]|每周[一二三四五六日天]|每月\d{1,2}[号日]|每\d+小时|每小时|每\d+分钟|\d+\s*分钟后|\d+\s*小时后|明天|每个?工作日|工作日每[天日])/.test(n)?{ok:!0}:{ok:!1,error:t("schedules.form.errFormat")}}function Ye(e,t,s,n){let r=e.trim();return r?t!==void 0&&r===t.trim()?!0:Re(r,s,n).ok:!1}function Be(e){let{schedule:t,scheduleTimeZone:s,tr:n}=e,r=ee(t),a=String(t.parsed?.kind??"unknown"),o=t.enabled?"pause":"resume",l=`${t.id}:${o}`,u=`${t.id}:run`;return(0,i.jsxs)(we,{kind:"schedule",className:"schedule-list-row","data-id":t.id,children:[(0,i.jsxs)(ve,{children:[(0,i.jsxs)("div",{className:"schedule-row-head",children:[(0,i.jsx)("b",{children:t.name??t.id}),(0,i.jsx)("span",{className:`schedule-state ${t.enabled?"enabled":"paused"}`,children:t.enabled?n("schedules.enabled"):n("schedules.paused")})]}),(0,i.jsxs)("div",{className:"schedule-row-meta",children:[(0,i.jsx)("span",{children:t.botName??t.larkAppId??"-"}),(0,i.jsx)("span",{children:"\xB7"}),(0,i.jsx)("code",{children:t.parsed?.display??"?"})]}),(0,i.jsxs)("div",{className:"schedule-chip-strip",children:[(0,i.jsx)("span",{children:a}),t.chatId?(0,i.jsxs)("span",{className:"schedule-chat-chip",title:r?`${r} \xB7 ${String(t.chatId)}`:String(t.chatId),children:[n("schedules.form.chat"),": ",r??t.chatId]}):null,(0,i.jsxs)("span",{children:[n("schedules.delivery"),": ",$e(t,n)]}),t.silent?(0,i.jsxs)("span",{children:["\u{1F507} ",n("schedules.silent")]}):null,(0,i.jsxs)("span",{children:[n("schedules.next"),": ",F(t.nextRunAt,s)]}),(0,i.jsxs)("span",{children:[n("schedules.last"),": ",F(t.lastRunAt,s)]}),t.lastStatus==="error"?(0,i.jsxs)("span",{className:"schedule-error-chip",title:typeof t.lastError=="string"?t.lastError:void 0,children:["\u26A0 ",n("schedules.error"),": ",typeof t.lastError=="string"&&t.lastError.length>60?t.lastError.slice(0,60)+"\u2026":t.lastError??n("schedules.errorUnknown")]}):null,(0,i.jsxs)("span",{children:[n("schedules.repeat"),": ",Fe(t)]})]})]}),(0,i.jsx)(be,{children:(0,i.jsxs)("div",{className:"schedule-actions",children:[(0,i.jsx)(Ge,{op:"run",label:n("schedules.runNow"),pending:e.pending===u,feedback:e.feedback[u]??null,onClick:()=>e.onAction(t.id,"run")}),(0,i.jsx)(Ke,{checked:!!t.enabled,pending:e.pending===l,feedback:e.feedback[l]??null,tr:n,onClick:()=>e.onAction(t.id,o)}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-edit-button",onClick:()=>e.onEdit(t),title:n("schedules.edit"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.edit")})}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-delete-button",onClick:()=>e.onDelete(t),title:n("schedules.delete"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.delete")})})]})})]})}function Ve(){let e=te(),{scheduleRows:t,scheduleTimeZone:s}=fe(h=>({scheduleRows:[...h.schedules.values()],scheduleTimeZone:h.scheduleTimeZone})),[n,r]=(0,f.useState)({q:"",kind:"",enabledOnly:!1}),[a,o]=(0,f.useState)(null),[l,u]=(0,f.useState)({}),d=(0,f.useRef)(new Map),[b,p]=(0,f.useState)(!1),[m,w]=(0,f.useState)(null),[A,C]=(0,f.useState)(null),[E,R]=(0,f.useState)(0),[q,W]=(0,f.useState)([]),[,V]=(0,f.useState)(0);(0,f.useEffect)(()=>{fetch("/api/bots").then(h=>h.json()).then(h=>{Array.isArray(h?.bots)&&W(h.bots)}).catch(()=>{})},[]),(0,f.useEffect)(()=>{de().then(()=>V(h=>h+1))},[]);let D=(0,f.useMemo)(()=>ze(t,n),[t,n]);(0,f.useEffect)(()=>()=>{d.current.forEach(h=>window.clearTimeout(h)),d.current.clear()},[]);function M(h,g){u(k=>({...k,[h]:g}));let T=d.current.get(h);T&&window.clearTimeout(T);let O=window.setTimeout(()=>{u(k=>{let y={...k};return delete y[h],y}),d.current.delete(h)},g==="success"?1600:2200);d.current.set(h,O)}async function x(h,g){let T=`${h}:${g}`,O=performance.now(),k="success";o(T);try{let y=await fetch(`/api/schedules/${encodeURIComponent(h)}/${g}`,{method:"POST"}),S=await y.json().catch(()=>({}));if(!y.ok||S.ok===!1)throw new Error(`Failed: ${y.status} ${S?.error??""}`.trim())}catch{k="error"}finally{if(g==="run"){let y=Le-(performance.now()-O);y>0&&await qe(y)}M(T,k),o(y=>y===T?null:y)}}function H(){w(null),C(null),R(h=>h+1),p(!0)}function I(h){w(h),C(null),R(g=>g+1),p(!0)}async function Z(h){if(!await ke({title:e("schedules.delete"),message:e("schedules.deleteConfirm"),danger:!0,confirmLabel:e("schedules.delete")}))return;let T=`${h.id}:delete`;o(T);try{let O=await fetch(`/api/schedules/${encodeURIComponent(h.id)}`,{method:"DELETE"}),k=await O.json().catch(()=>({}));if(!O.ok||k.ok===!1)throw new Error(k?.error??`HTTP ${O.status}`);Y(e("schedules.deleteDone"),{kind:"success"})}catch{Y(e("schedules.deleteFailed"),{kind:"error"})}finally{o(O=>O===T?null:O)}}async function G(h){C(null);try{let g=m?`/api/schedules/${encodeURIComponent(m.id)}`:"/api/schedules",T=m?"PATCH":"POST",O=m?{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,...h.updateExecutionPosition?{executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle}:{}}:{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle,chatId:h.chatId,larkAppId:h.larkAppId},k=await fetch(g,{method:T,headers:{"Content-Type":"application/json"},body:JSON.stringify(O)}),y=await k.json().catch(()=>({}));if(!k.ok||y.ok===!1)throw new Error(y?.error??`HTTP ${k.status}`);p(!1),Y(e(m?"schedules.saved":"schedules.createDone"),{kind:"success"})}catch(g){C(g instanceof Error?g.message:String(g))}}return(0,i.jsxs)("section",{className:"page schedules-page",children:[(0,i.jsxs)("div",{className:"page-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("p",{className:"eyebrow",children:e("nav.schedules")}),(0,i.jsx)("h1",{children:e("schedules.title")})]}),(0,i.jsx)(ge,{onClick:H,disabled:q.length===0,children:e("schedules.create")})]}),(0,i.jsxs)("form",{id:"sched-filters",className:"filters dashboard-toolbar",children:[(0,i.jsx)("input",{type:"search",name:"q",placeholder:e("schedules.search"),value:n.q,onChange:h=>{let g=h.currentTarget.value;r(T=>({...T,q:g}))}}),(0,i.jsx)(Te,{id:"sched-kind-menu",ariaLabel:e("schedules.anyKind"),label:n.kind||e("schedules.anyKind"),value:n.kind,options:[{value:"",label:e("schedules.anyKind")},{value:"cron",label:"cron"},{value:"interval",label:"interval"},{value:"once",label:"once"}],onChange:h=>r(g=>({...g,kind:h}))}),(0,i.jsxs)("label",{className:"filter-toggle",children:[(0,i.jsx)("input",{type:"checkbox",name:"enabled",checked:n.enabledOnly,onChange:h=>{let g=h.currentTarget.checked;r(T=>({...T,enabledOnly:g}))}}),(0,i.jsx)("span",{className:"filter-toggle-label",children:e("schedules.enabledOnly")}),(0,i.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,i.jsx)("span",{className:"schedules-toolbar-spacer","aria-hidden":"true"}),(0,i.jsxs)("span",{className:"schedules-toolbar-count",children:[D.length,"/",t.length]})]}),(0,i.jsx)("section",{className:"overview-block schedules-list-section",children:(0,i.jsx)("div",{className:"schedules-list-wrap",children:D.length===0?(0,i.jsx)("div",{id:"schedules-tbody",className:"empty schedules-list-empty",children:e("schedules.empty")}):(0,i.jsx)(ye,{id:"schedules-tbody",className:"schedules-list",children:D.map(h=>(0,i.jsx)(Be,{schedule:h,scheduleTimeZone:s,pending:a,feedback:l,tr:e,onAction:(g,T)=>{x(g,T)},onEdit:I,onDelete:g=>{Z(g)}},h.id))})})}),(0,i.jsx)(Je,{open:b,editing:m,error:A,bots:q,scheduleTimeZone:s,tr:e,onClose:()=>p(!1),onSubmit:h=>{G(h)}},`${m?.id??"new"}-${E}`)]})}function Ze(e,t,s,n,r){return s?r(e==="run"?"schedules.running":"schedules.saving"):n==="success"?r(e==="run"?"schedules.runDone":"schedules.saved"):n==="error"?r("schedules.failed"):t}function Ge(e){let t=te(),s=e.feedback?` is-${e.feedback}`:"";return(0,i.jsx)("button",{type:"button",className:`schedule-action-button${e.pending?" is-pending":""}${s}`,"data-op":e.op,disabled:e.pending,onClick:e.onClick,children:(0,i.jsx)("span",{className:"schedule-action-label",children:Ze(e.op,e.label,e.pending,e.feedback,t)})})}function Ke(e){let t=e.feedback==="error"?e.tr("schedules.failed"):e.checked?e.tr("schedules.enabled"):e.tr("schedules.paused");return(0,i.jsxs)("button",{type:"button",className:`schedule-enabled-switch${e.checked?" is-on":""}${e.pending?" is-pending":""}${e.feedback?` is-${e.feedback}`:""}`,"aria-pressed":e.checked,disabled:e.pending,onClick:e.onClick,children:[(0,i.jsx)("span",{className:"schedule-enabled-switch-label",children:t}),(0,i.jsx)("span",{className:"schedule-enabled-switch-track","aria-hidden":"true",children:(0,i.jsx)("span",{})})]})}function ht(e){return pe(e,(0,i.jsx)(Ve,{}))}function Je(e){let{editing:t,tr:s,bots:n,open:r,scheduleTimeZone:a}=e,o=(0,f.useRef)(null),[l,u]=(0,f.useState)(t?.name??""),[d,b]=(0,f.useState)(t?.schedule??""),[p,m]=(0,f.useState)(t?.prompt??""),[w,A]=(0,f.useState)(t?.silent===!0),[C,E]=(0,f.useState)(t&&re(t)==="thread"?"topic":t&&re(t)==="new-topic"?"new-topic":"top-level"),[R,q]=(0,f.useState)(t?.rootMessageId??""),[W,V]=(0,f.useState)(t?.topicTitle??""),[D,M]=(0,f.useState)(t?.chatId??""),[x,H]=(0,f.useState)(t?.larkAppId??n[0]?.larkAppId??""),[I,Z]=(0,f.useState)([]),[G,h]=(0,f.useState)(!1),[g,T]=(0,f.useState)(!1),[O,k]=(0,f.useState)(!1),y=t?.deliver==="local";(0,f.useEffect)(()=>{let c=o.current;c&&(r&&!c.open?(c.showModal(),c.querySelector('input[name="name"]')?.focus()):!r&&c.open&&c.close())},[r]),(0,f.useEffect)(()=>{if(!r||t)return;let c=!1;return ue({cacheMs:3e4}).then(U=>{c||Z(U.chats)}).catch(()=>{}),()=>{c=!0}},[r,t]),(0,f.useEffect)(()=>{!t&&!x&&n.length>0&&H(n[0].larkAppId)},[t,x,n]);let S=(0,f.useMemo)(()=>d.trim()?Re(d,s,a):null,[d,s,a]),_=(0,f.useMemo)(()=>[...I.some(P=>P.memberBots?.length>0)&&x?I.filter(P=>P.memberBots?.some(j=>j.larkAppId===x&&j.inChat)):I].sort((P,j)=>{let J=P.name??"",Q=j.name??"";return!J&&!Q?0:J?Q?J.localeCompare(Q,"zh-CN"):-1:1}),[I,x]);(0,f.useEffect)(()=>{!D||!x||_.length===0||_.some(c=>c.chatId===D)||M("")},[x,_,D]);let Pe=!t&&!y&&!G&&_.length>0,ae=O&&S!==null&&!S.ok,oe=S?.ok?S.preview:void 0,le=g&&!l.trim(),he=g&&!p.trim(),K=g&&!t&&!y&&!D.trim(),ce=g&&!y&&C==="topic"&&!R.trim();function Me(c){c.preventDefault(),T(!0),k(!0),!(!t&&!x)&&(!l.trim()||!p.trim()||!y&&!D.trim()||!y&&C==="topic"&&!R.trim()||Ye(d,t?.schedule,s,a)&&e.onSubmit({name:l.trim(),schedule:d.trim(),prompt:p,silent:w,executionPosition:C,rootMessageId:R.trim(),topicTitle:W.trim(),updateExecutionPosition:!y,chatId:D.trim(),larkAppId:x}))}return(0,i.jsxs)("dialog",{ref:o,className:"schedule-form-dialog",onClose:e.onClose,onClick:c=>{c.target===o.current&&e.onClose()},children:[(0,i.jsx)("h2",{children:s(t?"schedules.edit":"schedules.create")}),(0,i.jsxs)("form",{onSubmit:Me,className:"schedule-form",noValidate:!0,children:[t?null:(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.bot")}),(0,i.jsx)("select",{value:x,onChange:c=>H(c.target.value),required:!0,children:n.map(c=>(0,i.jsx)("option",{value:c.larkAppId,children:c.botName??c.larkAppId},c.larkAppId))})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.name")}),(0,i.jsx)("input",{type:"text",name:"name",value:l,onChange:c=>u(c.target.value),required:!0,autoFocus:!0,"aria-invalid":le||void 0}),le?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errNameRequired")}):null]}),(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.schedule")}),(0,i.jsx)("div",{className:"schedule-templates",role:"group","aria-label":s("schedules.form.templates"),children:He.map(c=>(0,i.jsx)("button",{type:"button",className:`schedule-template-chip${d===c.expr?" is-active":""}`,onClick:()=>{b(c.expr),k(!0)},children:c.label},c.expr))}),(0,i.jsx)("input",{type:"text",value:d,onChange:c=>{b(c.target.value),k(!0)},placeholder:s("schedules.form.scheduleHelp"),required:!0,"aria-invalid":ae||void 0}),ae&&S&&!S.ok?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:S.error}):oe?(0,i.jsxs)("small",{className:"schedule-form-preview",children:["\u2713 ",s("schedules.form.nextRun"),"\uFF1A",oe]}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.scheduleHelp")})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.prompt")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),(0,i.jsx)("textarea",{value:p,onChange:c=>m(c.target.value),rows:4,required:!0,"aria-invalid":he||void 0}),he?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errPromptRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.promptHelp")})]}),t?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.chat")}),(0,i.jsx)("code",{title:D,children:ee(t)??D})]}):y?null:(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.chat")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),Pe?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("select",{value:D,onChange:c=>M(c.target.value),required:!0,"aria-invalid":K||void 0,children:[(0,i.jsx)("option",{value:"",disabled:!0,children:s("schedules.form.chatPlaceholder")}),_.map(c=>{let U=c.memberBots?.filter(P=>P.inChat).length??0;return(0,i.jsxs)("option",{value:c.chatId,children:[c.name??c.chatId,U>0?` \xB7 ${U} bots`:""]},c.chatId)})]}),(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>h(!0),children:s("schedules.form.chatManual")})]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("input",{type:"text",value:D,onChange:c=>M(c.target.value),placeholder:"oc_...",required:!0,"aria-invalid":K||void 0}),_.length>0?(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>{h(!1),M("")},children:s("schedules.form.chatBackToSelect")}):null]}),K?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errChatRequired")}):null]}),y?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-placement",children:[(0,i.jsx)("strong",{children:s("schedules.deliveryLocal")}),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.localHelp")})]})]}):(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-radio-group",children:[(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"top-level",checked:C==="top-level",onChange:()=>E("top-level")}),s("schedules.deliveryTopLevel")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"topic",checked:C==="topic",onChange:()=>E("topic")}),s("schedules.deliveryThread")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"new-topic",checked:C==="new-topic",onChange:()=>{E("new-topic"),A(!1)}}),s("schedules.deliveryNewTopic")]})]}),(0,i.jsx)("small",{className:"schedule-form-help",children:s(C==="top-level"?"schedules.form.topLevelHelp":C==="topic"?"schedules.form.topicHelp":"schedules.form.newTopicHelp")})]}),!y&&C==="topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicRoot")}),(0,i.jsx)("input",{type:"text",value:R,onChange:c=>q(c.target.value),placeholder:"om_...",required:!0,"aria-invalid":ce||void 0}),ce?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errRootRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.topicRootHelp")})]}):null,!y&&C==="new-topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicTitle")}),(0,i.jsx)("input",{type:"text",value:W,onChange:c=>V(c.target.value),placeholder:s("schedules.form.topicTitlePlaceholder"),maxLength:200}),(0,i.jsxs)("small",{className:"schedule-form-help schedule-form-help-with-count",children:[s("schedules.form.topicTitleHelp"),(0,i.jsxs)("span",{children:[Array.from(W).length,"/200"]})]})]}):null,(0,i.jsxs)("label",{className:"schedule-form-field schedule-form-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:w,onChange:c=>A(c.target.checked)}),(0,i.jsxs)("span",{children:[s("schedules.form.silent"),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.silentHelp")})]})]}),C==="new-topic"&&w?(0,i.jsx)("p",{className:"schedule-form-help",children:s("schedules.form.silentNewTopicConflict")}):null,e.error?(0,i.jsx)("p",{className:"schedule-form-error",children:e.error}):null,(0,i.jsxs)("div",{className:"schedule-form-actions",children:[(0,i.jsx)("button",{type:"button",className:"schedule-form-cancel",onClick:e.onClose,children:s("schedules.form.cancel")}),(0,i.jsx)("button",{type:"submit",className:"schedule-form-submit",children:s(t?"schedules.form.save":"schedules.form.create")})]})]})]})}export{Ye as canSubmitSchedule,Re as checkSchedule,ze as filterSchedules,F as fmtScheduleDate,ht as renderSchedulesPage,re as scheduleExecutionPlacement};
|
|
1
|
+
import{a as Y}from"./chunk-OXSVWLER.js";import{a as ke}from"./chunk-CEUCNZFJ.js";import{g as ge,m as ye,n as we,o as ve,p as be,q as Te}from"./chunk-QALRQEKD.js";import{b as fe,d as te}from"./chunk-3OJQKYM3.js";import"./chunk-QITAMHW6.js";import{H as de,K as ee,c as ue}from"./chunk-IRFGJSPL.js";import{c as pe}from"./chunk-ARROO6TE.js";import{c as X,d as Ie,e as me}from"./chunk-3YZFAHNK.js";var f=X(Ie(),1);function L(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function se(e,t){return e.y===t.y&&e.m===t.m&&e.d===t.d&&e.h===t.h&&e.i===t.i&&e.s===t.s}function _e(e,t){let s=new Date(Date.parse(e));if(isNaN(s))throw new Error("Invalid ISO8601 passed to timezone parser.");let n=e.substring(9);return n.includes("Z")||n.includes("+")||n.includes("-")?ie(s.getUTCFullYear(),s.getUTCMonth()+1,s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),"Etc/UTC"):ie(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds(),t)}function Ne(e,t,s){return Oe(_e(e,t),s)}function Oe(e,t){let s=new Date(L(e)),n=z(s,e.tz),r=L(e),a=L(n),o=r-a,l=new Date(s.getTime()+o),u=z(l,e.tz);if(se(u,e)){let p=new Date(l.getTime()-36e5),m=z(p,e.tz);return se(m,e)?p:l}let d=new Date(l.getTime()+L(e)-L(u)),b=z(d,e.tz);if(se(b,e))return d;if(t)throw new Error("Invalid date passed to fromTZ()");return l.getTime()>d.getTime()?l:d}function z(e,t){let s,n;try{s=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),n=s.formatToParts(e)}catch(a){let o=a instanceof Error?a.message:String(a);throw new RangeError(`toTZ: Invalid timezone '${t}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${o}`)}let r={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let a of n)(a.type==="year"||a.type==="month"||a.type==="day"||a.type==="hour"||a.type==="minute"||a.type==="second")&&(r[a.type]=parseInt(a.value,10));if(isNaN(r.year)||isNaN(r.month)||isNaN(r.day)||isNaN(r.hour)||isNaN(r.minute)||isNaN(r.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${t}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(r)}`);return r.hour===24&&(r.hour=0),{y:r.year,m:r.month,d:r.day,h:r.hour,i:r.minute,s:r.second,tz:t}}function ie(e,t,s,n,r,a,o){return{y:e,m:t,d:s,h:n,i:r,s:a,tz:o}}var xe=[1,2,4,8,16],Ce=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,s){this.pattern=e,this.timezone=t,this.mode=s?.mode??"auto",this.alternativeWeekdays=s?.alternativeWeekdays??!1,this.sloppyRanges=s?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let r=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${r} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0&&(e[0]=e[0].replace(/\?/g,"*"),e[1]=e[1].replace(/\?/g,"*"),e[2]=e[2].replace(/\?/g,"*"),e[3]=e[3].replace(/\?/g,"*"),e[4]=e[4].replace(/\?/g,"*"),e[5]=e[5].replace(/\?/g,"*"),e[6]&&(e[6]=e[6].replace(/\?/g,"*"))),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let s=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],s,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,s,n){let r=this[e],a=e==="day"&&this.lastDayOfMonth,o=e==="day"&&this.lastWeekday;if(t===""&&!a&&!o)throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(n);let l=t.split(",");if(l.length>1)for(let u=0;u<l.length;u++)this.partToArray(e,l[u],s,n);else t.indexOf("-")!==-1&&t.indexOf("/")!==-1?this.handleRangeWithStepping(t,e,s,n):t.indexOf("-")!==-1?this.handleRange(t,e,s,n):t.indexOf("/")!==-1?this.handleStepping(t,e,s,n):t!==""&&this.handleNumber(t,e,s,n)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,s,n){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+s;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||n)}setPart(e,t,s){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,s);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=s}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,s,n,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(s!==void 0){if(s===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(s>this[n].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[n].length+")")}}handleRangeWithStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,l,u]=a,d=parseInt(o,10)+s,b=parseInt(l,10)+s,p=parseInt(u,10);this.validateNotNaN(d,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(b,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(p,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(d,b,p,t,e);for(let m=d;m<=b;m+=p)this.setPart(t,m,r[1]||n)}extractNth(e,t){let s=e,n;if(s.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");n=s.split("#")[1],s=s.split("#")[0]}else if(s.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");n="L",s=s.slice(0,-1)}return[s,n]}handleRange(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+s,l=parseInt(a[1],10)+s;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(l,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,l,void 0,t,e);for(let u=o;u<=l;u++)this.setPart(t,u,r[1]||n)}handleStepping(e,t,s,n){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+s);let l=parseInt(a[1],10);this.validateNotNaN(l,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,l,t,e);for(let u=o;u<this[t].length;u+=l)this.setPart(t,u,r[1]||n)}replaceAlphaDays(e){return e.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,"1").replace(/mon/gi,"2").replace(/tue/gi,"3").replace(/wed/gi,"4").replace(/thu/gi,"5").replace(/fri/gi,"6").replace(/sat/gi,"7")}replaceAlphaMonths(e){return e.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@yearly"||t==="@annually")return"0 0 1 1 *";if(t==="@monthly")return"0 0 1 * *";if(t==="@weekly")return"0 0 * * 0";if(t==="@daily"||t==="@midnight")return"0 0 * * *";if(t==="@hourly")return"0 * * * *";if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|xe[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},ne=[31,28,31,30,31,30,31,31,30,31,30,31],v=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],N=class Se{tz;ms;second;minute;hour;day;month;year;constructor(t,s){if(this.tz=s,t&&t instanceof Date)if(!isNaN(t))this.fromDate(t);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(t==null)this.fromDate(new Date);else if(t&&typeof t=="string")this.fromString(t);else if(t instanceof Se)this.fromCronDate(t);else throw new TypeError("CronDate: Invalid type ("+typeof t+") passed to CronDate constructor")}getLastDayOfMonth(t,s){return s!==1?ne[s]:new Date(Date.UTC(t,s+1,0)).getUTCDate()}getLastWeekday(t,s){let n=this.getLastDayOfMonth(t,s),r=new Date(Date.UTC(t,s,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(t,s,n){let r=this.getLastDayOfMonth(t,s);if(n>r)return-1;let a=new Date(Date.UTC(t,s,n)).getUTCDay();return a===0?n===r?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(t,s,n,r){let a=new Date(Date.UTC(t,s,n)).getUTCDay(),o=0;for(let l=1;l<=n;l++)new Date(Date.UTC(t,s,l)).getUTCDay()===a&&o++;if(r&63&&xe[o-1]&r)return!0;if(r&32){let l=this.getLastDayOfMonth(t,s);for(let u=n+1;u<=l;u++)if(new Date(Date.UTC(t,s,u)).getUTCDay()===a)return!1;return!0}return!1}fromDate(t){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes()+this.tz,this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply();else try{let s=z(t,this.tz);this.ms=t.getMilliseconds(),this.second=s.s,this.minute=s.i,this.hour=s.h,this.day=s.d,this.month=s.m-1,this.year=s.y}catch(s){let n=s instanceof Error?s.message:String(s);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=t.getMilliseconds(),this.second=t.getSeconds(),this.minute=t.getMinutes(),this.hour=t.getHours(),this.day=t.getDate(),this.month=t.getMonth(),this.year=t.getFullYear()}fromCronDate(t){this.tz=t.tz,this.year=t.year,this.month=t.month,this.day=t.day,this.hour=t.hour,this.minute=t.minute,this.second=t.second,this.ms=t.ms}apply(){if(this.month>11||this.month<0||this.day>ne[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let t=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),!0}else return!1}fromString(t){if(typeof this.tz=="number"){let s=Ne(t);this.ms=s.getUTCMilliseconds(),this.second=s.getUTCSeconds(),this.minute=s.getUTCMinutes(),this.hour=s.getUTCHours(),this.day=s.getUTCDate(),this.month=s.getUTCMonth(),this.year=s.getUTCFullYear(),this.apply()}else return this.fromDate(Ne(t,this.tz))}findNext(t,s,n,r){return this._findMatch(t,s,n,r,1)}_findMatch(t,s,n,r,a){let o=this[s],l;n.lastDayOfMonth&&(l=this.getLastDayOfMonth(this.year,this.month));let u=!n.starDOW&&s=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,d=this[s]+r,b=a===1?p=>p<n[s].length:p=>p>=0;for(let p=d;b(p);p+=a){let m=n[s][p];if(s==="day"&&!m){for(let w=0;w<n.nearestWeekdays.length;w++)if(n.nearestWeekdays[w]){let A=this.getNearestWeekday(this.year,this.month,w-r);if(A===-1)continue;if(A===p-r){m=1;break}}}if(s==="day"&&n.lastWeekday){let w=this.getLastWeekday(this.year,this.month);p-r===w&&(m=1)}if(s==="day"&&n.lastDayOfMonth&&p-r==l&&(m=1),s==="day"&&!n.starDOW){let w=n.dayOfWeek[(u+(p-r-1))%7];if(w&&w&63)w=this.isNthWeekdayOfMonth(this.year,this.month,p-r,w)?1:0;else if(w)throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${w}`);n.useAndLogic?m=m&&w:!t.domAndDow&&!n.starDOM?m=m||w:m=m&&w}if(m)return this[s]=p-r,o!==this[s]?2:1}return 3}recurse(t,s,n){if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let a=-1;for(let o=this.year+1;o<t.year.length&&o<1e4;o++)if(t.year[o]===1){a=o;break}if(a===-1)return null;this.year=a,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let r=this.findNext(s,v[n][0],t,v[n][2]);if(r>1){let a=n+1;for(;a<v.length;)this[v[a][0]]=-v[a][2],a++;if(r===3){if(this[v[n][1]]++,this[v[n][0]]=-v[n][2],this.apply(),n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=t.year.length)return null}return this.recurse(t,s,0)}else if(this.apply())return this.recurse(t,s,n-1)}return n+=1,n>=v.length?this:(t.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(t,s,n)}increment(t,s,n){return this.second+=s.interval!==void 0&&s.interval>1&&n?s.interval:1,this.ms=0,this.apply(),this.recurse(t,s,0)}decrement(t,s){return this.second-=s.interval!==void 0&&s.interval>1?s.interval:1,this.ms=0,this.apply(),this.recurseBackward(t,s,0,0)}recurseBackward(t,s,n,r=0){if(r>1e4)return null;if(n===0&&!t.starYear){if(this.year>=0&&this.year<t.year.length&&t.year[this.year]===0){let o=-1;for(let l=this.year-1;l>=0;l--)if(t.year[l]===1){o=l;break}if(o===-1)return null;this.year=o,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let a=this.findPrevious(s,v[n][0],t,v[n][2]);if(a>1){let o=n+1;for(;o<v.length;){let l=v[o][0],u=v[o][2],d=this.getMaxPatternValue(l,t,u);this[l]=d,o++}if(a===3){if(this[v[n][1]]--,n===0){let b=this.getLastDayOfMonth(this.year,this.month);this.day>b&&(this.day=b)}if(n===1)if(this.day<=0)this.day=1;else{let b=this.year,p=this.month;for(;p<0;)p+=12,b--;for(;p>11;)p-=12,b++;let m=p!==1?ne[p]:new Date(Date.UTC(b,p+1,0)).getUTCDate();this.day>m&&(this.day=m)}this.apply();let l=v[n][0],u=v[n][2],d=this.getMaxPatternValue(l,t,u);if(l==="day"){let b=this.getLastDayOfMonth(this.year,this.month);this[l]=Math.min(d,b)}else this[l]=d;if(this.apply(),n===0){let b=v[1][2],p=this.getMaxPatternValue("day",t,b),m=this.getLastDayOfMonth(this.year,this.month),w=Math.min(p,m);w!==this.day&&(this.day=w,this.hour=this.getMaxPatternValue("hour",t,v[2][2]),this.minute=this.getMaxPatternValue("minute",t,v[3][2]),this.second=this.getMaxPatternValue("second",t,v[4][2]))}if(n===0&&!t.starYear){for(;this.year>=0&&this.year<t.year.length&&t.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(t,s,0,r+1)}else if(this.apply())return this.recurseBackward(t,s,n-1,r+1)}return n+=1,n>=v.length?this:this.year<0?null:this.recurseBackward(t,s,n,r+1)}getMaxPatternValue(t,s,n){if(t==="day"&&s.lastDayOfMonth)return this.getLastDayOfMonth(this.year,this.month);if(t==="day"&&!s.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let r=s[t].length-1;r>=0;r--)if(s[t][r])return r-n;return s[t].length-1-n}findPrevious(t,s,n,r){return this._findMatch(t,s,n,r,-1)}getDate(t){return t||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):Oe(ie(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(t,s){if(!t.starYear&&(this.year<0||this.year>=t.year.length||t.year[this.year]===0))return!1;for(let n=0;n<v.length;n++){let r=v[n][0],a=v[n][2],o=this[r];if(o+a<0||o+a>=t[r].length)return!1;let l=t[r][o+a];if(r==="day"){if(!l){for(let u=0;u<t.nearestWeekdays.length;u++)if(t.nearestWeekdays[u]){let d=this.getNearestWeekday(this.year,this.month,u-a);if(d!==-1&&d===o){l=1;break}}}if(t.lastWeekday){let u=this.getLastWeekday(this.year,this.month);o===u&&(l=1)}if(t.lastDayOfMonth){let u=this.getLastDayOfMonth(this.year,this.month);o===u&&(l=1)}if(!t.starDOW){let u=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),d=t.dayOfWeek[(u+(o-1))%7];d&&d&63&&(d=this.isNthWeekdayOfMonth(this.year,this.month,o,d)?1:0),t.useAndLogic?l=l&&d:!s.domAndDow&&!t.starDOM?l=l||d:l=l&&d}}if(!l)return!1}return!0}};function Ee(e){if(e===void 0&&(e={}),delete e.name,e.legacyMode!==void 0&&e.domAndDow===void 0?e.domAndDow=!e.legacyMode:e.domAndDow===void 0&&(e.domAndDow=!1),e.legacyMode=!e.domAndDow,e.paused=e.paused===void 0?!1:e.paused,e.maxRuns=e.maxRuns===void 0?1/0:e.maxRuns,e.catch=e.catch===void 0?!1:e.catch,e.interval=e.interval===void 0?0:parseInt(e.interval.toString(),10),e.utcOffset=e.utcOffset===void 0?void 0:parseInt(e.utcOffset.toString(),10),e.dayOffset=e.dayOffset===void 0?0:parseInt(e.dayOffset.toString(),10),e.unref=e.unref===void 0?!1:e.unref,e.mode=e.mode===void 0?"auto":e.mode,e.alternativeWeekdays=e.alternativeWeekdays===void 0?!1:e.alternativeWeekdays,e.sloppyRanges=e.sloppyRanges===void 0?!1:e.sloppyRanges,!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(e.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");if(e.startAt&&(e.startAt=new N(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new N(e.stopAt,e.timezone)),e.interval!==null){if(isNaN(e.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(e.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(e.utcOffset!==void 0){if(isNaN(e.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(e.utcOffset<-870||e.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(e.utcOffset!==void 0&&e.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(e.unref!==!0&&e.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(e.dayOffset!==void 0&&e.dayOffset!==0&&isNaN(e.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return e}function $(e){return Object.prototype.toString.call(e)==="[object Function]"||typeof e=="function"||e instanceof Function}function We(e){return $(e)}function Ue(e){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(e):e&&typeof e.unref<"u"&&e.unref()}var De=30*1e3,B=[],Ae=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,s){let n,r;if($(t))r=t;else if(typeof t=="object")n=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if($(s))r=s;else if(typeof s=="object")n=s;else if(s!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=n?.name,this.options=Ee(n),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:n?n.maxRuns:void 0,paused:n?n.paused:!1,pattern:new Ce("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new N(e,this.getTz()):this._states.pattern=new Ce(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(B.find(a=>a.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");B.push(this)}return r!==void 0&&We(r)&&(this.fn=r,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let s=t||this._states.currentRun||void 0;return this._enumerateRuns(e,s,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}_enumerateRuns(e,t,s){let n=[],r=t?new N(t,this.getTz()):null,a=s==="next"?this._next:this._previous;for(;e--;){let o=a.call(this,r);if(!o)break;let l=o.getDate(!1);n.push(this.applyDayOffset(l)),r=o}return n}match(e){if(this._states.once){let s=new N(e,this.getTz());s.ms=0;let n=new N(this._states.once,this.getTz());return n.ms=0,s.getTime()===n.getTime()}let t=new N(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,s=this.fn!==void 0,n=!this._states.kill;return t&&s&&n&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof N||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new N(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=B.indexOf(this);e>=0&&B.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let t=this.msToNext(),s=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||s===null?this:(t>De&&(t=De),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(s),t),this._states.currentTimeout&&this.options.unref&&Ue(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new N(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if($(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new N(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,s=!this._states.paused&&t.getTime()>=e.getTime(),n=this._states.blocking&&this.options.protect;s&&!n?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):s&&n&&$(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),s=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),s=!e),e=new N(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let n=this._states.once||new N(e,this.getTz());return!s&&n!==this._states.once&&(n=n.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||n===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&n.getTime()>=this.options.stopAt.getTime()?null:n}_previous(e){let t=new N(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let s=new N(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(s=s.decrement(this._states.pattern,this.options),s===null||this.options.startAt&&s.getTime()<this.options.startAt.getTime()?null:s)}_calculatePreviousRun(e,t){let s=new N(void 0,this.getTz()),n=e;if(this.options.startAt.getTime()<=s.getTime()){n=this.options.startAt;let r=n.getTime()+this.options.interval*1e3;for(;r<=s.getTime();)n=new N(n,this.getTz()).increment(this._states.pattern,this.options,!0),r=n.getTime()+this.options.interval*1e3;t=!0}return n===null&&(n=void 0),[n,t]}};var i=X(me(),1),Le=1e3;function F(e,t){if(!e)return"\u2014";try{return new Date(e).toLocaleString(void 0,t?{timeZone:t,timeZoneName:"short"}:void 0)}catch{return e}}function ze(e,t){let s=t.q.toLowerCase();return e.filter(n=>!t.kind||n.parsed?.kind===t.kind).filter(n=>!t.enabledOnly||n.enabled).filter(n=>!s||JSON.stringify(n).toLowerCase().includes(s)).sort((n,r)=>{if(n.enabled!==r.enabled)return n.enabled?-1:1;let a=n.nextRunAt?Date.parse(n.nextRunAt):1/0,o=r.nextRunAt?Date.parse(r.nextRunAt):1/0;return a-o})}function re(e){return e.deliver==="local"?"local":e.executionPosition==="new-topic"?"new-topic":e.executionPosition==="topic"?e.rootMessageId?"thread":"chat":e.executionPosition==="top-level"?"chat":e.deliver==="new-topic"?"new-topic":e.scope==="chat"?"chat":e.rootMessageId?"thread":"chat"}function $e(e,t){let s=re(e);return t(s==="local"?"schedules.deliveryLocal":s==="new-topic"?"schedules.deliveryNewTopic":s==="thread"?"schedules.deliveryThread":"schedules.deliveryTopLevel")}function Fe(e){return e.repeat?`${e.repeat.completed}/${e.repeat.times??"\u221E"}`:"\u2014"}function qe(e){return new Promise(t=>window.setTimeout(t,e))}var He=[{label:"\u5DE5\u4F5C\u65E5 09:00",expr:"0 9 * * 1-5"},{label:"\u6BCF\u65E5 09:00",expr:"0 9 * * *"},{label:"\u6BCF\u5468\u4E00 09:00",expr:"0 9 * * 1"},{label:"\u6BCF\u5C0F\u65F6",expr:"0 * * * *"}],je={m:6e4,h:36e5,d:864e5};function Re(e,t,s){let n=e.trim();if(!n)return{ok:!1,error:t("schedules.form.errEmpty")};let r=n.split(/\s+/);if(r.length===5&&r.every(o=>/^[\d*\-,/]+$/.test(o)))try{let o=new Ae(n,s?{timezone:s}:void 0).nextRun();return o?{ok:!0,preview:F(o.toISOString(),s)}:{ok:!1,error:t("schedules.form.errCron")}}catch{return{ok:!1,error:t("schedules.form.errCron")}}let a=n.match(/^every\s+(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i);if(a)return{ok:!0};if(a=n.match(/^(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i),a){let o=parseInt(a[1],10)*(je[a[2][0].toLowerCase()]??6e4);return{ok:!0,preview:F(new Date(Date.now()+o).toISOString(),s)}}if(/^\d{4}-\d{2}-\d{2}(T| |$)/.test(n)){let o=new Date(n);if(!isNaN(o.getTime()))return{ok:!0,preview:F(o.toISOString(),s)}}return/^(每[天日]|每周[一二三四五六日天]|每月\d{1,2}[号日]|每\d+小时|每小时|每\d+分钟|\d+\s*分钟后|\d+\s*小时后|明天|每个?工作日|工作日每[天日])/.test(n)?{ok:!0}:{ok:!1,error:t("schedules.form.errFormat")}}function Ye(e,t,s,n){let r=e.trim();return r?t!==void 0&&r===t.trim()?!0:Re(r,s,n).ok:!1}function Be(e){let{schedule:t,scheduleTimeZone:s,tr:n}=e,r=ee(t),a=String(t.parsed?.kind??"unknown"),o=t.enabled?"pause":"resume",l=`${t.id}:${o}`,u=`${t.id}:run`;return(0,i.jsxs)(we,{kind:"schedule",className:"schedule-list-row","data-id":t.id,children:[(0,i.jsxs)(ve,{children:[(0,i.jsxs)("div",{className:"schedule-row-head",children:[(0,i.jsx)("b",{children:t.name??t.id}),(0,i.jsx)("span",{className:`schedule-state ${t.enabled?"enabled":"paused"}`,children:t.enabled?n("schedules.enabled"):n("schedules.paused")})]}),(0,i.jsxs)("div",{className:"schedule-row-meta",children:[(0,i.jsx)("span",{children:t.botName??t.larkAppId??"-"}),(0,i.jsx)("span",{children:"\xB7"}),(0,i.jsx)("code",{children:t.parsed?.display??"?"})]}),(0,i.jsxs)("div",{className:"schedule-chip-strip",children:[(0,i.jsx)("span",{children:a}),t.chatId?(0,i.jsxs)("span",{className:"schedule-chat-chip",title:r?`${r} \xB7 ${String(t.chatId)}`:String(t.chatId),children:[n("schedules.form.chat"),": ",r??t.chatId]}):null,(0,i.jsxs)("span",{children:[n("schedules.delivery"),": ",$e(t,n)]}),t.silent?(0,i.jsxs)("span",{children:["\u{1F507} ",n("schedules.silent")]}):null,(0,i.jsxs)("span",{children:[n("schedules.next"),": ",F(t.nextRunAt,s)]}),(0,i.jsxs)("span",{children:[n("schedules.last"),": ",F(t.lastRunAt,s)]}),t.lastStatus==="error"?(0,i.jsxs)("span",{className:"schedule-error-chip",title:typeof t.lastError=="string"?t.lastError:void 0,children:["\u26A0 ",n("schedules.error"),": ",typeof t.lastError=="string"&&t.lastError.length>60?t.lastError.slice(0,60)+"\u2026":t.lastError??n("schedules.errorUnknown")]}):null,(0,i.jsxs)("span",{children:[n("schedules.repeat"),": ",Fe(t)]})]})]}),(0,i.jsx)(be,{children:(0,i.jsxs)("div",{className:"schedule-actions",children:[(0,i.jsx)(Ge,{op:"run",label:n("schedules.runNow"),pending:e.pending===u,feedback:e.feedback[u]??null,onClick:()=>e.onAction(t.id,"run")}),(0,i.jsx)(Ke,{checked:!!t.enabled,pending:e.pending===l,feedback:e.feedback[l]??null,tr:n,onClick:()=>e.onAction(t.id,o)}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-edit-button",onClick:()=>e.onEdit(t),title:n("schedules.edit"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.edit")})}),(0,i.jsx)("button",{type:"button",className:"schedule-action-button schedule-delete-button",onClick:()=>e.onDelete(t),title:n("schedules.delete"),children:(0,i.jsx)("span",{className:"schedule-action-label",children:n("schedules.delete")})})]})})]})}function Ve(){let e=te(),{scheduleRows:t,scheduleTimeZone:s}=fe(h=>({scheduleRows:[...h.schedules.values()],scheduleTimeZone:h.scheduleTimeZone})),[n,r]=(0,f.useState)({q:"",kind:"",enabledOnly:!1}),[a,o]=(0,f.useState)(null),[l,u]=(0,f.useState)({}),d=(0,f.useRef)(new Map),[b,p]=(0,f.useState)(!1),[m,w]=(0,f.useState)(null),[A,C]=(0,f.useState)(null),[E,R]=(0,f.useState)(0),[q,W]=(0,f.useState)([]),[,V]=(0,f.useState)(0);(0,f.useEffect)(()=>{fetch("/api/bots").then(h=>h.json()).then(h=>{Array.isArray(h?.bots)&&W(h.bots)}).catch(()=>{})},[]),(0,f.useEffect)(()=>{de().then(()=>V(h=>h+1))},[]);let D=(0,f.useMemo)(()=>ze(t,n),[t,n]);(0,f.useEffect)(()=>()=>{d.current.forEach(h=>window.clearTimeout(h)),d.current.clear()},[]);function M(h,g){u(k=>({...k,[h]:g}));let T=d.current.get(h);T&&window.clearTimeout(T);let O=window.setTimeout(()=>{u(k=>{let y={...k};return delete y[h],y}),d.current.delete(h)},g==="success"?1600:2200);d.current.set(h,O)}async function x(h,g){let T=`${h}:${g}`,O=performance.now(),k="success";o(T);try{let y=await fetch(`/api/schedules/${encodeURIComponent(h)}/${g}`,{method:"POST"}),S=await y.json().catch(()=>({}));if(!y.ok||S.ok===!1)throw new Error(`Failed: ${y.status} ${S?.error??""}`.trim())}catch{k="error"}finally{if(g==="run"){let y=Le-(performance.now()-O);y>0&&await qe(y)}M(T,k),o(y=>y===T?null:y)}}function H(){w(null),C(null),R(h=>h+1),p(!0)}function I(h){w(h),C(null),R(g=>g+1),p(!0)}async function Z(h){if(!await ke({title:e("schedules.delete"),message:e("schedules.deleteConfirm"),danger:!0,confirmLabel:e("schedules.delete")}))return;let T=`${h.id}:delete`;o(T);try{let O=await fetch(`/api/schedules/${encodeURIComponent(h.id)}`,{method:"DELETE"}),k=await O.json().catch(()=>({}));if(!O.ok||k.ok===!1)throw new Error(k?.error??`HTTP ${O.status}`);Y(e("schedules.deleteDone"),{kind:"success"})}catch{Y(e("schedules.deleteFailed"),{kind:"error"})}finally{o(O=>O===T?null:O)}}async function G(h){C(null);try{let g=m?`/api/schedules/${encodeURIComponent(m.id)}`:"/api/schedules",T=m?"PATCH":"POST",O=m?{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,...h.updateExecutionPosition?{executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle}:{}}:{name:h.name,schedule:h.schedule,prompt:h.prompt,silent:h.silent,executionPosition:h.executionPosition,rootMessageId:h.rootMessageId,topicTitle:h.topicTitle,chatId:h.chatId,larkAppId:h.larkAppId},k=await fetch(g,{method:T,headers:{"Content-Type":"application/json"},body:JSON.stringify(O)}),y=await k.json().catch(()=>({}));if(!k.ok||y.ok===!1)throw new Error(y?.error??`HTTP ${k.status}`);p(!1),Y(e(m?"schedules.saved":"schedules.createDone"),{kind:"success"})}catch(g){C(g instanceof Error?g.message:String(g))}}return(0,i.jsxs)("section",{className:"page schedules-page",children:[(0,i.jsxs)("div",{className:"page-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("p",{className:"eyebrow",children:e("nav.schedules")}),(0,i.jsx)("h1",{children:e("schedules.title")})]}),(0,i.jsx)(ge,{onClick:H,disabled:q.length===0,children:e("schedules.create")})]}),(0,i.jsxs)("form",{id:"sched-filters",className:"filters dashboard-toolbar",children:[(0,i.jsx)("input",{type:"search",name:"q",placeholder:e("schedules.search"),value:n.q,onChange:h=>{let g=h.currentTarget.value;r(T=>({...T,q:g}))}}),(0,i.jsx)(Te,{id:"sched-kind-menu",ariaLabel:e("schedules.anyKind"),label:n.kind||e("schedules.anyKind"),value:n.kind,options:[{value:"",label:e("schedules.anyKind")},{value:"cron",label:"cron"},{value:"interval",label:"interval"},{value:"once",label:"once"}],onChange:h=>r(g=>({...g,kind:h}))}),(0,i.jsxs)("label",{className:"filter-toggle",children:[(0,i.jsx)("input",{type:"checkbox",name:"enabled",checked:n.enabledOnly,onChange:h=>{let g=h.currentTarget.checked;r(T=>({...T,enabledOnly:g}))}}),(0,i.jsx)("span",{className:"filter-toggle-label",children:e("schedules.enabledOnly")}),(0,i.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,i.jsx)("span",{className:"schedules-toolbar-spacer","aria-hidden":"true"}),(0,i.jsxs)("span",{className:"schedules-toolbar-count",children:[D.length,"/",t.length]})]}),(0,i.jsx)("section",{className:"overview-block schedules-list-section",children:(0,i.jsx)("div",{className:"schedules-list-wrap",children:D.length===0?(0,i.jsx)("div",{id:"schedules-tbody",className:"empty schedules-list-empty",children:e("schedules.empty")}):(0,i.jsx)(ye,{id:"schedules-tbody",className:"schedules-list",children:D.map(h=>(0,i.jsx)(Be,{schedule:h,scheduleTimeZone:s,pending:a,feedback:l,tr:e,onAction:(g,T)=>{x(g,T)},onEdit:I,onDelete:g=>{Z(g)}},h.id))})})}),(0,i.jsx)(Je,{open:b,editing:m,error:A,bots:q,scheduleTimeZone:s,tr:e,onClose:()=>p(!1),onSubmit:h=>{G(h)}},`${m?.id??"new"}-${E}`)]})}function Ze(e,t,s,n,r){return s?r(e==="run"?"schedules.running":"schedules.saving"):n==="success"?r(e==="run"?"schedules.runDone":"schedules.saved"):n==="error"?r("schedules.failed"):t}function Ge(e){let t=te(),s=e.feedback?` is-${e.feedback}`:"";return(0,i.jsx)("button",{type:"button",className:`schedule-action-button${e.pending?" is-pending":""}${s}`,"data-op":e.op,disabled:e.pending,onClick:e.onClick,children:(0,i.jsx)("span",{className:"schedule-action-label",children:Ze(e.op,e.label,e.pending,e.feedback,t)})})}function Ke(e){let t=e.feedback==="error"?e.tr("schedules.failed"):e.checked?e.tr("schedules.enabled"):e.tr("schedules.paused");return(0,i.jsxs)("button",{type:"button",className:`schedule-enabled-switch${e.checked?" is-on":""}${e.pending?" is-pending":""}${e.feedback?` is-${e.feedback}`:""}`,"aria-pressed":e.checked,disabled:e.pending,onClick:e.onClick,children:[(0,i.jsx)("span",{className:"schedule-enabled-switch-label",children:t}),(0,i.jsx)("span",{className:"schedule-enabled-switch-track","aria-hidden":"true",children:(0,i.jsx)("span",{})})]})}function ht(e){return pe(e,(0,i.jsx)(Ve,{}))}function Je(e){let{editing:t,tr:s,bots:n,open:r,scheduleTimeZone:a}=e,o=(0,f.useRef)(null),[l,u]=(0,f.useState)(t?.name??""),[d,b]=(0,f.useState)(t?.schedule??""),[p,m]=(0,f.useState)(t?.prompt??""),[w,A]=(0,f.useState)(t?.silent===!0),[C,E]=(0,f.useState)(t&&re(t)==="thread"?"topic":t&&re(t)==="new-topic"?"new-topic":"top-level"),[R,q]=(0,f.useState)(t?.rootMessageId??""),[W,V]=(0,f.useState)(t?.topicTitle??""),[D,M]=(0,f.useState)(t?.chatId??""),[x,H]=(0,f.useState)(t?.larkAppId??n[0]?.larkAppId??""),[I,Z]=(0,f.useState)([]),[G,h]=(0,f.useState)(!1),[g,T]=(0,f.useState)(!1),[O,k]=(0,f.useState)(!1),y=t?.deliver==="local";(0,f.useEffect)(()=>{let c=o.current;c&&(r&&!c.open?(c.showModal(),c.querySelector('input[name="name"]')?.focus()):!r&&c.open&&c.close())},[r]),(0,f.useEffect)(()=>{if(!r||t)return;let c=!1;return ue({cacheMs:3e4}).then(U=>{c||Z(U.chats)}).catch(()=>{}),()=>{c=!0}},[r,t]),(0,f.useEffect)(()=>{!t&&!x&&n.length>0&&H(n[0].larkAppId)},[t,x,n]);let S=(0,f.useMemo)(()=>d.trim()?Re(d,s,a):null,[d,s,a]),_=(0,f.useMemo)(()=>[...I.some(P=>P.memberBots?.length>0)&&x?I.filter(P=>P.memberBots?.some(j=>j.larkAppId===x&&j.inChat)):I].sort((P,j)=>{let J=P.name??"",Q=j.name??"";return!J&&!Q?0:J?Q?J.localeCompare(Q,"zh-CN"):-1:1}),[I,x]);(0,f.useEffect)(()=>{!D||!x||_.length===0||_.some(c=>c.chatId===D)||M("")},[x,_,D]);let Pe=!t&&!y&&!G&&_.length>0,ae=O&&S!==null&&!S.ok,oe=S?.ok?S.preview:void 0,le=g&&!l.trim(),he=g&&!p.trim(),K=g&&!t&&!y&&!D.trim(),ce=g&&!y&&C==="topic"&&!R.trim();function Me(c){c.preventDefault(),T(!0),k(!0),!(!t&&!x)&&(!l.trim()||!p.trim()||!y&&!D.trim()||!y&&C==="topic"&&!R.trim()||Ye(d,t?.schedule,s,a)&&e.onSubmit({name:l.trim(),schedule:d.trim(),prompt:p,silent:w,executionPosition:C,rootMessageId:R.trim(),topicTitle:W.trim(),updateExecutionPosition:!y,chatId:D.trim(),larkAppId:x}))}return(0,i.jsxs)("dialog",{ref:o,className:"schedule-form-dialog",onClose:e.onClose,onClick:c=>{c.target===o.current&&e.onClose()},children:[(0,i.jsx)("h2",{children:s(t?"schedules.edit":"schedules.create")}),(0,i.jsxs)("form",{onSubmit:Me,className:"schedule-form",noValidate:!0,children:[t?null:(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.bot")}),(0,i.jsx)("select",{value:x,onChange:c=>H(c.target.value),required:!0,children:n.map(c=>(0,i.jsx)("option",{value:c.larkAppId,children:c.botName??c.larkAppId},c.larkAppId))})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.name")}),(0,i.jsx)("input",{type:"text",name:"name",value:l,onChange:c=>u(c.target.value),required:!0,autoFocus:!0,"aria-invalid":le||void 0}),le?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errNameRequired")}):null]}),(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.schedule")}),(0,i.jsx)("div",{className:"schedule-templates",role:"group","aria-label":s("schedules.form.templates"),children:He.map(c=>(0,i.jsx)("button",{type:"button",className:`schedule-template-chip${d===c.expr?" is-active":""}`,onClick:()=>{b(c.expr),k(!0)},children:c.label},c.expr))}),(0,i.jsx)("input",{type:"text",value:d,onChange:c=>{b(c.target.value),k(!0)},placeholder:s("schedules.form.scheduleHelp"),required:!0,"aria-invalid":ae||void 0}),ae&&S&&!S.ok?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:S.error}):oe?(0,i.jsxs)("small",{className:"schedule-form-preview",children:["\u2713 ",s("schedules.form.nextRun"),"\uFF1A",oe]}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.scheduleHelp")})]}),(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.prompt")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),(0,i.jsx)("textarea",{value:p,onChange:c=>m(c.target.value),rows:4,required:!0,"aria-invalid":he||void 0}),he?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errPromptRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.promptHelp")})]}),t?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.chat")}),(0,i.jsx)("code",{title:D,children:ee(t)??D})]}):y?null:(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsxs)("span",{className:"schedule-form-label",children:[s("schedules.form.chat")," ",(0,i.jsx)("i",{className:"req","aria-hidden":"true",children:"*"})]}),Pe?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("select",{value:D,onChange:c=>M(c.target.value),required:!0,"aria-invalid":K||void 0,children:[(0,i.jsx)("option",{value:"",disabled:!0,children:s("schedules.form.chatPlaceholder")}),_.map(c=>{let U=c.memberBots?.filter(P=>P.inChat).length??0;return(0,i.jsxs)("option",{value:c.chatId,children:[c.name??c.chatId,U>0?` \xB7 ${U} bots`:""]},c.chatId)})]}),(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>h(!0),children:s("schedules.form.chatManual")})]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("input",{type:"text",value:D,onChange:c=>M(c.target.value),placeholder:"oc_...",required:!0,"aria-invalid":K||void 0}),_.length>0?(0,i.jsx)("button",{type:"button",className:"schedule-form-link",onClick:()=>{h(!1),M("")},children:s("schedules.form.chatBackToSelect")}):null]}),K?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errChatRequired")}):null]}),y?(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-placement",children:[(0,i.jsx)("strong",{children:s("schedules.deliveryLocal")}),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.localHelp")})]})]}):(0,i.jsxs)("div",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.deliver")}),(0,i.jsxs)("div",{className:"schedule-form-radio-group",children:[(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"top-level",checked:C==="top-level",onChange:()=>E("top-level")}),s("schedules.deliveryTopLevel")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"topic",checked:C==="topic",onChange:()=>E("topic")}),s("schedules.deliveryThread")]}),(0,i.jsxs)("label",{children:[(0,i.jsx)("input",{type:"radio",name:"executionPosition",value:"new-topic",checked:C==="new-topic",onChange:()=>{E("new-topic"),A(!1)}}),s("schedules.deliveryNewTopic")]})]}),(0,i.jsx)("small",{className:"schedule-form-help",children:s(C==="top-level"?"schedules.form.topLevelHelp":C==="topic"?"schedules.form.topicHelp":"schedules.form.newTopicHelp")})]}),!y&&C==="topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicRoot")}),(0,i.jsx)("input",{type:"text",value:R,onChange:c=>q(c.target.value),placeholder:"om_...",required:!0,"aria-invalid":ce||void 0}),ce?(0,i.jsx)("small",{className:"schedule-form-error-inline",children:s("schedules.form.errRootRequired")}):(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.topicRootHelp")})]}):null,!y&&C==="new-topic"?(0,i.jsxs)("label",{className:"schedule-form-field",children:[(0,i.jsx)("span",{className:"schedule-form-label",children:s("schedules.form.topicTitle")}),(0,i.jsx)("input",{type:"text",value:W,onChange:c=>V(c.target.value),placeholder:s("schedules.form.topicTitlePlaceholder"),maxLength:200}),(0,i.jsxs)("small",{className:"schedule-form-help schedule-form-help-with-count",children:[s("schedules.form.topicTitleHelp"),(0,i.jsxs)("span",{children:[Array.from(W).length,"/200"]})]})]}):null,(0,i.jsxs)("label",{className:"schedule-form-field schedule-form-toggle",children:[(0,i.jsx)("input",{type:"checkbox",checked:w,onChange:c=>A(c.target.checked)}),(0,i.jsxs)("span",{children:[s("schedules.form.silent"),(0,i.jsx)("small",{className:"schedule-form-help",children:s("schedules.form.silentHelp")})]})]}),C==="new-topic"&&w?(0,i.jsx)("p",{className:"schedule-form-help",children:s("schedules.form.silentNewTopicConflict")}):null,e.error?(0,i.jsx)("p",{className:"schedule-form-error",children:e.error}):null,(0,i.jsxs)("div",{className:"schedule-form-actions",children:[(0,i.jsx)("button",{type:"button",className:"schedule-form-cancel",onClick:e.onClose,children:s("schedules.form.cancel")}),(0,i.jsx)("button",{type:"submit",className:"schedule-form-submit",children:s(t?"schedules.form.save":"schedules.form.create")})]})]})]})}export{Ye as canSubmitSchedule,Re as checkSchedule,ze as filterSchedules,F as fmtScheduleDate,ht as renderSchedulesPage,re as scheduleExecutionPlacement};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as zt,c as Xt,h as Wt}from"./chunk-XJ7BGPJH.js";import{a as Jt}from"./chunk-75LEPNN3.js";import{c as Xe}from"./chunk-2PVRDXEL.js";import{a as Jn,c as Gt}from"./chunk-SZOB6VK2.js";import{a as Dt}from"./chunk-OWUXOKFE.js";import{a as zn,b as _t,c as nn,d as Ft,e as Ut}from"./chunk-6RLYYCVH.js";import{a as yn}from"./chunk-ZJVTGU5X.js";import{a as B}from"./chunk-OXSVWLER.js";import{a as jt}from"./chunk-KTQ7B6ZR.js";import{a as wn,b as Kt}from"./chunk-CEUCNZFJ.js";import{c as Je,g as $t,q as Ht}from"./chunk-
|
|
1
|
+
import{a as zt,c as Xt,h as Wt}from"./chunk-XJ7BGPJH.js";import{a as Jt}from"./chunk-75LEPNN3.js";import{c as Xe}from"./chunk-2PVRDXEL.js";import{a as Jn,c as Gt}from"./chunk-SZOB6VK2.js";import{a as Dt}from"./chunk-OWUXOKFE.js";import{a as zn,b as _t,c as nn,d as Ft,e as Ut}from"./chunk-6RLYYCVH.js";import{a as yn}from"./chunk-ZJVTGU5X.js";import{a as B}from"./chunk-OXSVWLER.js";import{a as jt}from"./chunk-KTQ7B6ZR.js";import{a as wn,b as Kt}from"./chunk-CEUCNZFJ.js";import{c as Je,g as $t,q as Ht}from"./chunk-QALRQEKD.js";import{b as Gn,d as Ot}from"./chunk-3OJQKYM3.js";import{a as $e}from"./chunk-QITAMHW6.js";import{A as Ke,D as ze,F as bn,H as Pt,J as ge,K as _e,L as pe,N as hn,e as St,f as _n,h as It,k as Tt,l as Nt,m as xt,n as Fn,o as Rt,p as Un,q as Et,r as Mt,s as jn,t as Lt,u as At,x as He,y as o,z as en}from"./chunk-IRFGJSPL.js";import{a as Ct,c as Bt}from"./chunk-ARROO6TE.js";import{c as De,d as vt,e as kn}from"./chunk-3YZFAHNK.js";var c=De(vt(),1),cn=De(Ct(),1);var Xn=[24,72,168],eo=new Set(Xn);function Wn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!eo.has(t)?null:t}function no(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function to(e,t=Date.now()){return t-e*60*60*1e3}function so(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=no(e.lastMessageAt);return a!==null&&a<to(t,s)}function Vt(e,t,s=Date.now()){return e.filter(a=>so(a,t,s))}var qt={1:"claude-code",2:"aiden",3:"coco",4:"codex",5:"cursor",6:"gemini",7:"opencode",8:"antigravity",9:"mtr",10:"hermes",11:"codex-app",12:"mira",13:"seed",14:"traex",15:"pi",16:"copilot",17:"oh-my-pi",18:"relay",19:"mir",20:"kimi",21:"genius",22:"grok",23:"kiro-cli",24:"riff",25:"reasonix",26:"opencode2",27:"dsh",28:"mojo",29:"ebsd"},da=new Set(Object.values(qt)),oo={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",opencode2:"OpenCode 2",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",ebsd:"ebsd",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff",reasonix:"Reasonix",dsh:"DeepSeek Harness","dsh-tui":"DeepSeek Harness TUI",mojo:"Mojo"},Yt=Object.values(qt).map(e=>({id:e,label:oo[e]??e}));function vn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Vn(e){let t=vn(e);return t===null?"-":t.toLocaleString("en-US")}function Zt(e,t){let s=String(e??"").replace(/\s+/g," ").trim();return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Qt(e,t){let s=String(e??"").replace(/\r\n?/g,`
|
|
2
2
|
`).replace(/[^\S\n]+\n/g,`
|
|
3
3
|
`).replace(/\n{3,}/g,`
|
|
4
4
|
|