botmux 2.106.0 → 2.107.0
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/bot-registry.d.ts +25 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +6 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +5 -0
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +27 -1
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +6 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +25 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/pending-response.d.ts +1 -0
- package/dist/core/pending-response.d.ts.map +1 -1
- package/dist/core/pending-response.js +1 -0
- package/dist/core/pending-response.js.map +1 -1
- package/dist/core/resource-monitor/attribution.d.ts +70 -0
- package/dist/core/resource-monitor/attribution.d.ts.map +1 -0
- package/dist/core/resource-monitor/attribution.js +222 -0
- package/dist/core/resource-monitor/attribution.js.map +1 -0
- package/dist/core/resource-monitor/procfs.d.ts +22 -0
- package/dist/core/resource-monitor/procfs.d.ts.map +1 -0
- package/dist/core/resource-monitor/procfs.js +134 -0
- package/dist/core/resource-monitor/procfs.js.map +1 -0
- package/dist/core/resource-monitor/ring-buffer.d.ts +15 -0
- package/dist/core/resource-monitor/ring-buffer.d.ts.map +1 -0
- package/dist/core/resource-monitor/ring-buffer.js +61 -0
- package/dist/core/resource-monitor/ring-buffer.js.map +1 -0
- package/dist/core/resource-monitor/runtime.d.ts +31 -0
- package/dist/core/resource-monitor/runtime.d.ts.map +1 -0
- package/dist/core/resource-monitor/runtime.js +92 -0
- package/dist/core/resource-monitor/runtime.js.map +1 -0
- package/dist/core/resource-monitor/top-selector.d.ts +18 -0
- package/dist/core/resource-monitor/top-selector.d.ts.map +1 -0
- package/dist/core/resource-monitor/top-selector.js +57 -0
- package/dist/core/resource-monitor/top-selector.js.map +1 -0
- package/dist/core/resource-monitor/types.d.ts +181 -0
- package/dist/core/resource-monitor/types.d.ts.map +1 -0
- package/dist/core/resource-monitor/types.js +2 -0
- package/dist/core/resource-monitor/types.js.map +1 -0
- package/dist/core/session-manager.d.ts +3 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +31 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +44 -22
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +1 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/resource-monitor-service.d.ts +56 -0
- package/dist/dashboard/resource-monitor-service.d.ts.map +1 -0
- package/dist/dashboard/resource-monitor-service.js +446 -0
- package/dist/dashboard/resource-monitor-service.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +160 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +18 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +274 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/monitor-room-store.d.ts +20 -0
- package/dist/dashboard/web/monitor-room-store.d.ts.map +1 -0
- package/dist/dashboard/web/monitor-room-store.js +80 -0
- package/dist/dashboard/web/monitor-room-store.js.map +1 -0
- package/dist/dashboard/web/monitor-room.d.ts +31 -0
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -0
- package/dist/dashboard/web/monitor-room.js +393 -0
- package/dist/dashboard/web/monitor-room.js.map +1 -0
- package/dist/dashboard/web/monitoring-page.d.ts +155 -0
- package/dist/dashboard/web/monitoring-page.d.ts.map +1 -0
- package/dist/dashboard/web/monitoring-page.js +189 -0
- package/dist/dashboard/web/monitoring-page.js.map +1 -0
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +108 -1
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +3 -0
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +18 -0
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/session-terminal.d.ts +7 -0
- package/dist/dashboard/web/session-terminal.d.ts.map +1 -0
- package/dist/dashboard/web/session-terminal.js +17 -0
- package/dist/dashboard/web/session-terminal.js.map +1 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +2 -1
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +4 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +98 -17
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/skills-page.js +1 -1
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/substitute-targets.d.ts +30 -0
- package/dist/dashboard/web/substitute-targets.d.ts.map +1 -0
- package/dist/dashboard/web/substitute-targets.js +99 -0
- package/dist/dashboard/web/substitute-targets.js.map +1 -0
- package/dist/dashboard/web/ui.d.ts +1 -1
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +4 -1
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +3 -3
- package/dist/dashboard-web/chunks/bot-defaults-page-OCIHPGEU.js +438 -0
- package/dist/dashboard-web/chunks/chunk-3N2PPQVD.js +1 -0
- package/dist/dashboard-web/chunks/chunk-3UJYRR2Q.js +37 -0
- package/dist/dashboard-web/chunks/{chunk-VFCACTRF.js → chunk-PE6W3C2C.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-QW54DWU3.js +325 -0
- package/dist/dashboard-web/chunks/{connectors-VDOAKUW3.js → connectors-IGETYWCP.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-CX5AN4XG.js → groups-page-MYBS4ZYJ.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-DOMRL4S6.js → insights-page-UPA32V2S.js} +1 -1
- package/dist/dashboard-web/chunks/monitor-room-RFX4HPS5.js +51 -0
- package/dist/dashboard-web/chunks/monitoring-page-7T3BESZ2.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-LJSBCQW4.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-3FEAH6S4.js → roles-page-ESURTVQH.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-CTQEA7IE.js → schedules-LML2ISOT.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-YB73XOTU.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-MCO5QR7Z.js +1 -0
- package/dist/dashboard-web/chunks/{settings-page-R23I3IZG.js → settings-page-OSDKNVS3.js} +1 -1
- package/dist/dashboard-web/chunks/skills-page-PXBZJ6P6.js +2 -0
- package/dist/dashboard-web/chunks/{team-federation-page-ZKL3YMGN.js → team-federation-page-TTPVHFPX.js} +1 -1
- package/dist/dashboard-web/chunks/{workflows-4BYQQBFP.js → workflows-FCPM4S4D.js} +1 -1
- package/dist/dashboard-web/index.html +2 -1
- package/dist/dashboard-web/style.css +818 -8
- package/dist/dashboard.js +37 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +8 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +8 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +18 -0
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +12 -2
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +3 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +59 -2
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +35 -0
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +56 -0
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/substitute-command.d.ts +2 -0
- package/dist/im/lark/substitute-command.d.ts.map +1 -0
- package/dist/im/lark/substitute-command.js +51 -0
- package/dist/im/lark/substitute-command.js.map +1 -0
- package/dist/services/substitute-chat-toggle-store.d.ts +3 -0
- package/dist/services/substitute-chat-toggle-store.d.ts.map +1 -0
- package/dist/services/substitute-chat-toggle-store.js +58 -0
- package/dist/services/substitute-chat-toggle-store.js.map +1 -0
- package/dist/services/substitute-mode-normalize.d.ts +22 -0
- package/dist/services/substitute-mode-normalize.d.ts.map +1 -0
- package/dist/services/substitute-mode-normalize.js +56 -0
- package/dist/services/substitute-mode-normalize.js.map +1 -0
- package/dist/services/substitute-mode-store.d.ts +50 -0
- package/dist/services/substitute-mode-store.d.ts.map +1 -0
- package/dist/services/substitute-mode-store.js +115 -0
- package/dist/services/substitute-mode-store.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/worker.js +20 -1
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-3OIY7N76.js +0 -409
- package/dist/dashboard-web/chunks/chunk-BNEXMNQD.js +0 -31
- package/dist/dashboard-web/chunks/chunk-DKKOGZCG.js +0 -317
- package/dist/dashboard-web/chunks/overview-page-AZBAXVZ7.js +0 -1
- package/dist/dashboard-web/chunks/sessions-LVZCXO2Z.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-NHBJDSBC.js +0 -1
- package/dist/dashboard-web/chunks/skills-page-VUG3EPWX.js +0 -2
package/package.json
CHANGED
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
import{b as we}from"./chunk-VFCACTRF.js";import{a as Le}from"./chunk-LXIK7OUJ.js";import{m as e,n as i,p as Pt,r as ke,w as Nt}from"./chunk-BNEXMNQD.js";import{a as ea,b as De,c as Me}from"./chunk-JTSE5VP6.js";import{c as ae}from"./chunk-7SZRL6FY.js";var At=ae(ea(),1);var v={bots:[]},ct=null,se=[{id:"claude-code",label:"Claude"},{id:"codex",label:"Codex"},{id:"traex",label:"traex"}],Ee=!1,Bt="glm-5.1",oe=[],it=null;function ne(c,d){return typeof c?.cliId=="string"&&c.cliId?c.cliId:d}function aa(c){document.querySelector(".feishu-login-overlay")?.remove();let d=document.createElement("div");d.className="feishu-login-overlay",d.innerHTML=`
|
|
2
|
-
<div class="feishu-login-modal" role="dialog" aria-modal="true">
|
|
3
|
-
<button type="button" class="feishu-login-close" data-close aria-label="${i(e("feishuLogin.close"))}">\u2715</button>
|
|
4
|
-
<h3 class="feishu-login-title">${i(e("feishuLogin.title"))}</h3>
|
|
5
|
-
<p class="feishu-login-hint" data-hint>${i(e("feishuLogin.starting"))}</p>
|
|
6
|
-
<div class="feishu-login-qr" data-qr></div>
|
|
7
|
-
<div class="feishu-login-actions">
|
|
8
|
-
<button type="button" class="primary" data-retry hidden>${i(e("feishuLogin.retry"))}</button>
|
|
9
|
-
</div>
|
|
10
|
-
</div>`,document.body.appendChild(d);let b=d.querySelector("[data-hint]"),I=d.querySelector("[data-qr]"),E=d.querySelector("[data-retry]"),q=null,A=()=>{q!==null&&(window.clearInterval(q),q=null)},K=()=>{A(),d.remove()};d.addEventListener("click",y=>{let $=y.target;($===d||$.closest("[data-close]"))&&K()});function tt(y){return y?y.status==="awaiting_scan"&&y.qrDataUrl?(I.innerHTML=`<img class="qr-image" src="${y.qrDataUrl}" alt="${i(e("feishuLogin.qrAlt"))}">`,b.textContent=y.message||e("feishuLogin.scanHint"),E.hidden=!0,"active"):y.status==="starting"?(b.textContent=y.message||e("feishuLogin.starting"),"active"):y.status==="success"?(A(),I.innerHTML="",b.textContent=e("feishuLogin.success"),window.setTimeout(()=>{K(),c()},900),"done"):(A(),I.innerHTML="",b.textContent=e("feishuLogin.failed",{reason:y.message||y.reason||""}),E.hidden=!1,"done"):"active"}async function dt(){try{let $=await(await fetch("/api/feishu-login/status")).json().catch(()=>({}));tt($.login)}catch{}}async function z(){A(),b.textContent=e("feishuLogin.starting"),I.innerHTML="",E.hidden=!0;let y="active";try{let gt=await(await fetch("/api/feishu-login/start",{method:"POST"})).json().catch(()=>({}));y=tt(gt.login)}catch($){b.textContent=e("feishuLogin.failed",{reason:$?.message??String($)}),E.hidden=!1;return}y==="active"&&q===null&&(q=window.setInterval(()=>{dt()},1500))}E.addEventListener("click",()=>{z()}),z()}var rt=new Map;function Te(c){let d=null;for(let b of Le.sessions.values())b.larkAppId!==c||!b.cliId||(!d||Number(b.lastMessageAt??0)>Number(d.lastMessageAt??0))&&(d=b);return d?.cliId??""}async function Ce(){if(!Ee){Ee=!0;try{let c=await fetch("/api/cli-options"),d=await c.json().catch(()=>({}));c.ok&&Array.isArray(d?.options)&&(se=d.options.filter(b=>b&&typeof b.id=="string"&&typeof b.label=="string"),typeof d.ttadkModelDefault=="string"&&d.ttadkModelDefault.trim()&&(Bt=d.ttadkModelDefault.trim()),Array.isArray(d.ttadkModelSuggestions)&&(oe=d.ttadkModelSuggestions.filter(b=>typeof b=="string")))}catch{}}}function na(c,d){let b=typeof c?.agentSelectionKey=="string"&&c.agentSelectionKey?c.agentSelectionKey:"";return b||ne(c,d)||"claude-code"}function jt(c){return se.find(d=>d.id===c)}function sa(c){return c?.gateway==="ttadk"&&c.acceptsModel!==!1?oe:[]}function oa(c,d){let b=na(c,d),I=se.map($=>`<option value="${i($.id)}" ${$.id===b?"selected":""}>${i($.label)}\uFF08${i($.id)}\uFF09</option>`).join(""),E=typeof c?.model=="string"?c.model:"",q=sa(jt(b)),A=jt(b)?.gateway==="ttadk"&&jt(b)?.acceptsModel===!1,K=c?.skillInjectionSupport==="dynamic"?"dynamic":c?.skillInjectionSupport==="global"?"global":"none",tt=c?.skillInjection==="global"||c?.skillInjection==="prompt"||c?.skillInjection==="off"?c.skillInjection:"",dt=c?.skillInjectionDefault==="global"||c?.skillInjectionDefault==="off"?c.skillInjectionDefault:"prompt",z=tt||dt,y=K==="none"?"":K==="dynamic"?`<div class="bd-row">
|
|
11
|
-
<label>
|
|
12
|
-
<span>${e("botDefaults.skillInjection")}</span>
|
|
13
|
-
<select data-input="skillInjection" disabled>
|
|
14
|
-
<option value="dynamic" selected>${i(e("botDefaults.skillInjectionDynamic"))}</option>
|
|
15
|
-
</select>
|
|
16
|
-
</label>
|
|
17
|
-
<small class="bd-help">${e("botDefaults.skillInjectionHelpDynamic")}</small>
|
|
18
|
-
</div>`:`<div class="bd-row">
|
|
19
|
-
<label>
|
|
20
|
-
<span>${e("botDefaults.skillInjection")}</span>
|
|
21
|
-
<select data-input="skillInjection">
|
|
22
|
-
<option value="dynamic" disabled>${i(e("botDefaults.skillInjectionDynamicUnsupported"))}</option>
|
|
23
|
-
<option value="prompt" ${z==="prompt"?"selected":""}>${i(e("botDefaults.skillInjectionPrompt"))}</option>
|
|
24
|
-
<option value="global" ${z==="global"?"selected":""}>${i(e("botDefaults.skillInjectionGlobal"))}</option>
|
|
25
|
-
<option value="off" ${z==="off"?"selected":""}>${i(e("botDefaults.skillInjectionOff"))}</option>
|
|
26
|
-
</select>
|
|
27
|
-
</label>
|
|
28
|
-
<small class="bd-help">${e("botDefaults.skillInjectionHelp")}</small>
|
|
29
|
-
<div class="actions">
|
|
30
|
-
<span class="oncall-status" data-skill-injection-status></span>
|
|
31
|
-
</div>
|
|
32
|
-
</div>`;return`<section class="bd-section">
|
|
33
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionAgent")}</h3>
|
|
34
|
-
<div class="bd-row">
|
|
35
|
-
<label>
|
|
36
|
-
<span>${e("botDefaults.agentCli")}</span>
|
|
37
|
-
<select data-input="agentCliId">${I}</select>
|
|
38
|
-
</label>
|
|
39
|
-
</div>
|
|
40
|
-
<div class="bd-row">
|
|
41
|
-
<label>
|
|
42
|
-
<span>${e("botDefaults.agentModel")}</span>
|
|
43
|
-
<input type="text" data-input="agentModel" list="agent-model-suggestions-${i(c.larkAppId)}"
|
|
44
|
-
placeholder="${i(e("botDefaults.agentModelPlaceholder"))}"
|
|
45
|
-
value="${i(E)}" ${A?"disabled":""}>
|
|
46
|
-
<datalist id="agent-model-suggestions-${i(c.larkAppId)}">
|
|
47
|
-
${q.map($=>`<option value="${i($)}"></option>`).join("")}
|
|
48
|
-
</datalist>
|
|
49
|
-
</label>
|
|
50
|
-
<small class="bd-help">${e("botDefaults.agentHelp")}</small>
|
|
51
|
-
<div class="actions">
|
|
52
|
-
<button type="button" class="primary" data-action="save-agent">${e("botDefaults.agentSave")}</button>
|
|
53
|
-
<span class="oncall-status" data-agent-status></span>
|
|
54
|
-
</div>
|
|
55
|
-
</div>
|
|
56
|
-
${y}
|
|
57
|
-
</section>`}async function xe(){try{let c=await fetch("/api/bots"),d=await c.json().catch(()=>({}));if(!c.ok){ct=d?.error?`HTTP ${c.status}: ${d.error}${d.path?` (${d.path})`:""}`:`HTTP ${c.status}`,v={bots:[]};return}if(!d||!Array.isArray(d.bots)){ct="unexpected response shape (no `bots` array)",v={bots:[]};return}ct=null,v=d}catch(c){ct=c?.message??String(c),v={bots:[]}}}function He(c){if(!c)return"\u2014";let d=new Date(c);return Number.isNaN(d.getTime())?"\u2014":d.toLocaleString()}function Ie(c){let d=c.querySelector("#bd-list"),b=c.querySelector("#bd-roster"),I=c.querySelector("#bd-filters"),E=c.querySelector("#bd-refresh"),q=!1,A=!1;E.onclick=async()=>{E.disabled=!0;try{rt.clear(),await Promise.all([xe(),Ce()]),et()}finally{q||(E.disabled=!1)}};let K=t=>{let a=t.target.closest(".toggle-tx small, small.bd-help");a&&(t.preventDefault(),a.classList.toggle("open"))};d.addEventListener("click",K),d.innerHTML=Nt(),(async()=>(await Promise.all([xe(),Ce()]),A=!0,et(),await ke(),et()))();function tt(){let a=(new FormData(I).get("q")??"").toLowerCase(),u=v.bots.filter(m=>!a||(m.botName??"").toLowerCase().includes(a)||(m.larkAppId??"").toLowerCase().includes(a));if(ct){b.innerHTML="",d.innerHTML=`<p class="hint-warn">\u65E0\u6CD5\u52A0\u8F7D bot \u5217\u8868\uFF1A${i(ct)}<br>\u5E38\u89C1\u539F\u56E0\uFF1Adashboard / daemon \u8FDB\u7A0B\u8FD8\u5728\u8DD1\u65E7\u4EE3\u7801\uFF0C\u6267\u884C <code>botmux restart</code> \u540E\u5237\u65B0\u3002</p>`;return}if(u.length===0){b.innerHTML="",d.innerHTML=`<p class="empty">${e("botDefaults.empty")}</p>`;return}(!it||!u.some(m=>m.larkAppId===it))&&(it=u[0].larkAppId),b.innerHTML=u.map(dt).join(""),b.querySelectorAll(".bd-roster-item").forEach(m=>{m.onclick=()=>{it=m.dataset.appid,et()}});let p=u.find(m=>m.larkAppId===it);d.innerHTML=z(p),Ke()}function dt(t){let a=t.botName??t.larkAppId,u=ne(t,Te(t.larkAppId)),p=t.defaultOncall?.enabled?'<span class="bd-roster-flag">oncall</span>':"";return`<div class="bd-roster-item${t.larkAppId===it?" on":""}" data-appid="${i(t.larkAppId)}" role="button" tabindex="0">
|
|
58
|
-
${Pt({name:a,larkAppId:t.larkAppId,size:"sm"})}
|
|
59
|
-
<div class="bd-roster-tx">
|
|
60
|
-
<b>${i(a)}</b>
|
|
61
|
-
<span>${i(u||t.larkAppId.slice(0,14))}</span>
|
|
62
|
-
</div>
|
|
63
|
-
${p}
|
|
64
|
-
</div>`}function z(t){if(t.error)return`<article class="bd-card bd-profile" data-appid="${i(t.larkAppId)}">
|
|
65
|
-
<header class="bd-profile-head">
|
|
66
|
-
${Pt({name:t.botName??t.larkAppId,larkAppId:t.larkAppId})}
|
|
67
|
-
<div class="bd-profile-id"><strong>${i(t.botName??t.larkAppId)}</strong>
|
|
68
|
-
<code>${i(t.larkAppId)}</code></div>
|
|
69
|
-
</header>
|
|
70
|
-
<p class="hint-warn-inline">\u67E5\u8BE2\u5931\u8D25\uFF1A${i(t.error)}</p>
|
|
71
|
-
</article>`;let a=t.defaultOncall??{enabled:!1,workingDir:"",since:0},u=a.enabled?"oncall":t.defaultWorkingDir?"default":"off",p=t.defaultWorkingDir||a.workingDir||"",m=t.botName??t.larkAppId,S=ne(t,Te(t.larkAppId));return`<article class="bd-card bd-profile" data-appid="${i(t.larkAppId)}">
|
|
72
|
-
<header class="bd-profile-head">
|
|
73
|
-
${Pt({name:m,larkAppId:t.larkAppId,dot:"ok"})}
|
|
74
|
-
<div class="bd-profile-id">
|
|
75
|
-
<span class="bd-name-row" data-name-row>
|
|
76
|
-
<strong data-bot-name>${i(m)}</strong>
|
|
77
|
-
<button type="button" class="bd-name-edit" data-action="edit-bot-name"
|
|
78
|
-
title="${i(e("botDefaults.renameTitle"))}" aria-label="${i(e("botDefaults.renameTitle"))}">
|
|
79
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/></svg>
|
|
80
|
-
</button>
|
|
81
|
-
</span>
|
|
82
|
-
<span class="bd-name-editor" data-name-editor hidden>
|
|
83
|
-
<input type="text" class="bd-name-input" data-input="botRename" maxlength="64" value="${i(m)}">
|
|
84
|
-
<button type="button" class="primary" data-action="save-bot-name">${e("botDefaults.renameSave")}</button>
|
|
85
|
-
<button type="button" data-action="cancel-bot-name">${e("botDefaults.renameCancel")}</button>
|
|
86
|
-
</span>
|
|
87
|
-
${S?`<span class="mate-role">${i(S)}</span>`:""}
|
|
88
|
-
<code>${i(t.larkAppId)}</code>
|
|
89
|
-
<small class="bd-name-status oncall-status" data-name-status></small>
|
|
90
|
-
<button type="button" class="bd-feishu-login" data-action="feishu-login" hidden>${e("feishuLogin.entry")}</button>
|
|
91
|
-
</div>
|
|
92
|
-
<div class="bd-profile-meta bd-meta">
|
|
93
|
-
<small class="bd-meta-ok">\u25CF ${e("botDefaults.metaOnline")}</small>
|
|
94
|
-
<small data-oncall-since>${e("botDefaults.lastEnabled")}: ${i(He(a.since??0))}</small>
|
|
95
|
-
<small>${e("botDefaults.autobound",{count:t.autoboundChatCount??0})}</small>
|
|
96
|
-
</div>
|
|
97
|
-
</header>
|
|
98
|
-
<div class="bd-body bd-grid">
|
|
99
|
-
<section class="bd-tile">
|
|
100
|
-
${oa(t,S)}
|
|
101
|
-
<section class="bd-section">
|
|
102
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionWorkingDir")}</h3>
|
|
103
|
-
<div class="bd-row">
|
|
104
|
-
<label>
|
|
105
|
-
<span>${e("botDefaults.workingDirMode")}</span>
|
|
106
|
-
<select data-input="workingDirMode">
|
|
107
|
-
<option value="off" ${u==="off"?"selected":""}>${i(e("botDefaults.workingDirModeOff"))}</option>
|
|
108
|
-
<option value="default" ${u==="default"?"selected":""}>${i(e("botDefaults.workingDirModeDefault"))}</option>
|
|
109
|
-
<option value="oncall" ${u==="oncall"?"selected":""}>${i(e("botDefaults.workingDirModeOncall"))}</option>
|
|
110
|
-
</select>
|
|
111
|
-
</label>
|
|
112
|
-
<small class="bd-help">${e("botDefaults.workingDirModeHelp")}</small>
|
|
113
|
-
</div>
|
|
114
|
-
<div class="bd-row" data-wd-dir-row ${u==="off"?"hidden":""}>
|
|
115
|
-
<label>
|
|
116
|
-
<span>${e("botDefaults.workingDirField")}</span>
|
|
117
|
-
<input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
|
|
118
|
-
value="${i(p)}">
|
|
119
|
-
</label>
|
|
120
|
-
</div>
|
|
121
|
-
<label class="toggle-row" data-wd-worktree-row ${u==="default"?"":"hidden"}>
|
|
122
|
-
<input type="checkbox" data-input="autoWorktree" ${t.defaultWorkingDirAutoWorktree?"checked":""}>
|
|
123
|
-
<span class="switch" aria-hidden="true"></span>
|
|
124
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoWorktree")}</strong>
|
|
125
|
-
<small>${e("botDefaults.autoWorktreeHelp")}</small></span>
|
|
126
|
-
</label>
|
|
127
|
-
<div class="actions">
|
|
128
|
-
<button type="button" class="primary" data-action="save-working-dir">${e("botDefaults.save")}</button>
|
|
129
|
-
<span class="oncall-status" data-status></span>
|
|
130
|
-
</div>
|
|
131
|
-
${Je(t)}
|
|
132
|
-
</section>
|
|
133
|
-
${We(t)}
|
|
134
|
-
</section>
|
|
135
|
-
<section class="bd-tile">${y(t)}</section>
|
|
136
|
-
<section class="bd-tile">${Be(t)}${Pe(t)}${je(t)}${Ae(t)}${Oe(t)}${Ge(t)}</section>
|
|
137
|
-
<section class="bd-tile">${Re(t)}${Ne(t)}${qe(t)}</section>
|
|
138
|
-
<section class="bd-tile">${Ue(t)}</section>
|
|
139
|
-
</div>
|
|
140
|
-
</article>`}function y(t){let a=typeof t.teamRole=="string";return`<section class="bd-section">
|
|
141
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionRole")}</h3>
|
|
142
|
-
<p class="bd-section-note">${e("botDefaults.roleHelp")}</p>
|
|
143
|
-
<textarea data-input="teamRole" rows="6"
|
|
144
|
-
placeholder="${i(e("botDefaults.rolePlaceholder"))}"
|
|
145
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px"${a?"":" disabled"}>${a?i(t.teamRole):""}</textarea>
|
|
146
|
-
<div class="actions">
|
|
147
|
-
<button type="button" class="primary" data-action="save-role"${a?"":" disabled"}>${e("botDefaults.roleSave")}</button>
|
|
148
|
-
<button type="button" data-action="delete-role"${a?"":" disabled"}>${e("botDefaults.roleDelete")}</button>
|
|
149
|
-
<span class="oncall-status" data-role-status></span>
|
|
150
|
-
</div>
|
|
151
|
-
<div class="bd-profile-roles" data-profile-roles>
|
|
152
|
-
<h4 class="bd-subsection-title">${e("botDefaults.profileRoles")}</h4>
|
|
153
|
-
<p class="bd-section-note">${e("botDefaults.profileRolesHelp")}</p>
|
|
154
|
-
<div class="bd-profile-role-list" data-profile-role-list>${$(t.larkAppId)}</div>
|
|
155
|
-
</div>
|
|
156
|
-
</section>`}function $(t){let a=rt.get(t);return!a||a.loading?Nt():a.error?`<p class="hint-warn-inline">${i(e("botDefaults.profileRolesLoadFailed",{error:a.error}))}</p>`:a.items.length===0?`<p class="empty">${e("botDefaults.profileRolesEmpty")}</p>`:a.items.map(u=>`
|
|
157
|
-
<details class="bd-profile-role-entry" data-profile-id="${i(u.profileId)}">
|
|
158
|
-
<summary><code>${i(u.profileId)}</code></summary>
|
|
159
|
-
<div class="bd-profile-role-content" data-profile-role-body="${i(u.profileId)}">
|
|
160
|
-
${gt(u)}
|
|
161
|
-
</div>
|
|
162
|
-
</details>
|
|
163
|
-
`).join("")}function gt(t){return t.loading?Nt():t.error?`<p class="hint-warn-inline">${i(e("botDefaults.profileRoleDetailLoadFailed",{error:t.error}))}</p>`:t.loaded?`<pre>${i(t.content??"")}</pre>`:`<p class="empty">${e("botDefaults.profileRoleClickToLoad")}</p>`}function le(t){return t==null?e("botDefaults.brandStateDefault"):t.trim()===""?e("botDefaults.brandStateOff"):e("botDefaults.brandStateCustom")}function qe(t){let a=t.brandLabel??null;return`<section class="bd-section">
|
|
164
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionBrand")}</h3>
|
|
165
|
-
<div class="bd-row bd-brand">
|
|
166
|
-
<label>
|
|
167
|
-
<span>${e("botDefaults.brandLabel")}</span>
|
|
168
|
-
<input type="text" data-input="brandLabel"
|
|
169
|
-
placeholder="${i(e("botDefaults.brandLabelPlaceholder"))}"
|
|
170
|
-
value="${i(a??"")}">
|
|
171
|
-
</label>
|
|
172
|
-
<small data-brand-state>${i(le(a))}</small>
|
|
173
|
-
<small class="bd-help">${e("botDefaults.brandLabelHelp")}</small>
|
|
174
|
-
<div class="actions">
|
|
175
|
-
<button type="button" class="primary" data-action="save-brand">${e("botDefaults.brandSave")}</button>
|
|
176
|
-
<button type="button" data-action="reset-brand">${e("botDefaults.brandReset")}</button>
|
|
177
|
-
<span class="oncall-status" data-brand-status></span>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
</section>`}function Re(t){let a=t.disableStreamingCard===!0,u=t.silentTurnReactions===!0,p=t.writableTerminalLinkInCard===!0,m=t.privateCard===!0;return`<section class="bd-section">
|
|
181
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCard")}</h3>
|
|
182
|
-
<label class="toggle-row">
|
|
183
|
-
<input type="checkbox" data-action="toggle-disable-streaming" ${a?"checked":""}>
|
|
184
|
-
<span class="switch" aria-hidden="true"></span>
|
|
185
|
-
<span class="toggle-tx"><strong>${e("botDefaults.disableStreaming")}</strong>
|
|
186
|
-
<small>${e("botDefaults.disableStreamingHelp")}</small></span>
|
|
187
|
-
</label>
|
|
188
|
-
<label class="toggle-row">
|
|
189
|
-
<input type="checkbox" data-action="toggle-silent-reactions" ${u?"checked":""} ${a?"":"disabled"}>
|
|
190
|
-
<span class="switch" aria-hidden="true"></span>
|
|
191
|
-
<span class="toggle-tx"><strong>${e("botDefaults.silentTurnReactions")}</strong>
|
|
192
|
-
<small>${e("botDefaults.silentTurnReactionsHelp")}</small></span>
|
|
193
|
-
</label>
|
|
194
|
-
<label class="toggle-row">
|
|
195
|
-
<input type="checkbox" data-action="toggle-writable-link" ${p?"checked":""} ${a?"disabled":""}>
|
|
196
|
-
<span class="switch" aria-hidden="true"></span>
|
|
197
|
-
<span class="toggle-tx"><strong>${e("botDefaults.writableLink")}</strong>
|
|
198
|
-
<small>${e("botDefaults.writableLinkHelp")}</small></span>
|
|
199
|
-
</label>
|
|
200
|
-
<label class="toggle-row">
|
|
201
|
-
<input type="checkbox" data-action="toggle-private-card" ${m?"checked":""}>
|
|
202
|
-
<span class="switch" aria-hidden="true"></span>
|
|
203
|
-
<span class="toggle-tx"><strong>${e("botDefaults.privateCard")}</strong>
|
|
204
|
-
<small>${e("botDefaults.privateCardHelp")}</small></span>
|
|
205
|
-
</label>
|
|
206
|
-
<div class="actions">
|
|
207
|
-
<small data-card-pref-moot class="hint-warn-inline" ${a?"":"hidden"}>${e("botDefaults.writableLinkMoot")}</small>
|
|
208
|
-
<span class="oncall-status" data-card-pref-status></span>
|
|
209
|
-
</div>
|
|
210
|
-
</section>`}function Pe(t){let a=t.botToBotSameDir!==!1;return`<section class="bd-section">
|
|
211
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCrossBot")}</h3>
|
|
212
|
-
<label class="toggle-row">
|
|
213
|
-
<input type="checkbox" data-action="toggle-cross-bot-samedir" ${a?"checked":""}>
|
|
214
|
-
<span class="switch" aria-hidden="true"></span>
|
|
215
|
-
<span class="toggle-tx"><strong>${e("botDefaults.botToBotSameDir")}</strong>
|
|
216
|
-
<small>${e("botDefaults.botToBotSameDirHelp")}</small></span>
|
|
217
|
-
</label>
|
|
218
|
-
<div class="actions"><span class="oncall-status" data-crossbot-status></span></div>
|
|
219
|
-
</section>`}function Ne(t){let a=t.summaryRange??{limit:50,sinceHours:24},u=Number.isInteger(a.limit)&&a.limit>=0?a.limit:50,p=Number.isInteger(a.sinceHours)&&a.sinceHours>=0?a.sinceHours:24;return`<section class="bd-section">
|
|
220
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSummaryTrigger")}</h3>
|
|
221
|
-
<div class="bd-row bd-summary-limits">
|
|
222
|
-
<label>
|
|
223
|
-
<span>${e("botDefaults.summaryLimit")}</span>
|
|
224
|
-
<input type="number" min="0" step="1" data-input="summaryLimit" value="${u}">
|
|
225
|
-
</label>
|
|
226
|
-
<label>
|
|
227
|
-
<span>${e("botDefaults.summarySinceHours")}</span>
|
|
228
|
-
<input type="number" min="0" step="1" data-input="summarySinceHours" value="${p}">
|
|
229
|
-
</label>
|
|
230
|
-
</div>
|
|
231
|
-
<small class="bd-help">${e("botDefaults.summaryLimitHelp")}</small>
|
|
232
|
-
<div class="actions">
|
|
233
|
-
<button type="button" class="primary" data-action="save-summary-trigger">${e("botDefaults.summarySave")}</button>
|
|
234
|
-
<span class="oncall-status" data-summary-trigger-status></span>
|
|
235
|
-
</div>
|
|
236
|
-
</section>`}function Be(t){let a=t.p2pMode==="chat"?"chat":"thread",u=t.regularGroupReplyMode==="new-topic"||t.regularGroupReplyMode==="shared"||t.regularGroupReplyMode==="chat-topic"?t.regularGroupReplyMode:"chat",p=t.regularGroupMentionMode==="topic"||t.regularGroupMentionMode==="never"||t.regularGroupMentionMode==="ambient"?t.regularGroupMentionMode:"always",m=t.docSubscribeDefaultMode==="all"?"all":"mention-only",S=(h,M)=>`<option value="${h}" ${u===h?"selected":""}>${i(M)}</option>`,N=(h,M)=>`<option value="${h}" ${p===h?"selected":""}>${i(M)}</option>`,B=(h,M)=>`<option value="${h}" ${m===h?"selected":""}>${i(M)}</option>`;return`<section class="bd-section">
|
|
237
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSessionMode")}</h3>
|
|
238
|
-
<div class="bd-row">
|
|
239
|
-
<label>
|
|
240
|
-
<span>${e("botDefaults.p2pMode")}</span>
|
|
241
|
-
<select data-input="p2pMode">
|
|
242
|
-
<option value="thread" ${a==="chat"?"":"selected"}>${i(e("botDefaults.p2pThread"))}</option>
|
|
243
|
-
<option value="chat" ${a==="chat"?"selected":""}>${i(e("botDefaults.p2pChat"))}</option>
|
|
244
|
-
</select>
|
|
245
|
-
</label>
|
|
246
|
-
<small class="bd-help">${e("botDefaults.p2pHelp")}</small>
|
|
247
|
-
<div class="actions">
|
|
248
|
-
<span class="oncall-status" data-p2p-status></span>
|
|
249
|
-
</div>
|
|
250
|
-
</div>
|
|
251
|
-
<div class="bd-row">
|
|
252
|
-
<label>
|
|
253
|
-
<span>${e("botDefaults.regularGroupMode")}</span>
|
|
254
|
-
<select data-input="regularGroupMode">
|
|
255
|
-
${S("chat",e("botDefaults.regularGroupModeChat"))}
|
|
256
|
-
${S("chat-topic",e("botDefaults.regularGroupModeChatTopic"))}
|
|
257
|
-
${S("new-topic",e("botDefaults.regularGroupModeNewTopic"))}
|
|
258
|
-
${S("shared",e("botDefaults.regularGroupModeShared"))}
|
|
259
|
-
</select>
|
|
260
|
-
</label>
|
|
261
|
-
<small class="bd-help">${e("botDefaults.regularGroupModeHelp")}</small>
|
|
262
|
-
<div class="actions">
|
|
263
|
-
<span class="oncall-status" data-regular-group-status></span>
|
|
264
|
-
</div>
|
|
265
|
-
</div>
|
|
266
|
-
<div class="bd-row">
|
|
267
|
-
<label>
|
|
268
|
-
<span>${e("botDefaults.mentionMode")}</span>
|
|
269
|
-
<select data-input="regularGroupMentionMode">
|
|
270
|
-
${N("always",e("botDefaults.mentionModeAlways"))}
|
|
271
|
-
${N("topic",e("botDefaults.mentionModeTopic"))}
|
|
272
|
-
${N("never",e("botDefaults.mentionModeNever"))}
|
|
273
|
-
${N("ambient",e("botDefaults.mentionModeAmbient"))}
|
|
274
|
-
</select>
|
|
275
|
-
</label>
|
|
276
|
-
<small class="bd-help">${e("botDefaults.mentionModeHelp")}</small>
|
|
277
|
-
<div class="actions">
|
|
278
|
-
<span class="oncall-status" data-mention-mode-status></span>
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
<div class="bd-row">
|
|
282
|
-
<label>
|
|
283
|
-
<span>${e("botDefaults.docSubscribeMode")}</span>
|
|
284
|
-
<select data-input="docSubscribeDefaultMode">
|
|
285
|
-
${B("mention-only",e("botDefaults.docSubscribeModeMention"))}
|
|
286
|
-
${B("all",e("botDefaults.docSubscribeModeAll"))}
|
|
287
|
-
</select>
|
|
288
|
-
</label>
|
|
289
|
-
<small class="bd-help">${e("botDefaults.docSubscribeModeHelp")}</small>
|
|
290
|
-
<div class="actions">
|
|
291
|
-
<span class="oncall-status" data-doc-subscribe-mode-status></span>
|
|
292
|
-
</div>
|
|
293
|
-
</div>
|
|
294
|
-
</section>`}function ie(t){return t==null?e("botDefaults.maxLiveWorkersStateDefault"):e("botDefaults.maxLiveWorkersStateOn",{count:t})}function je(t){let a=typeof t.maxLiveWorkers=="number"?t.maxLiveWorkers:null;return`<div class="bd-subsection">
|
|
295
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionSessionCap")}</h4>
|
|
296
|
-
<div class="bd-row bd-quota">
|
|
297
|
-
<label>
|
|
298
|
-
<span>${e("botDefaults.maxLiveWorkers")}</span>
|
|
299
|
-
<input type="number" min="1" step="1" data-input="maxLiveWorkers"
|
|
300
|
-
placeholder="${i(e("botDefaults.maxLiveWorkersPlaceholder"))}"
|
|
301
|
-
value="${a??""}">
|
|
302
|
-
</label>
|
|
303
|
-
<small data-session-cap-state>${i(ie(a))}</small>
|
|
304
|
-
<small class="bd-help">${e("botDefaults.maxLiveWorkersHelp")}</small>
|
|
305
|
-
<div class="actions">
|
|
306
|
-
<button type="button" class="primary" data-action="save-session-cap">${e("botDefaults.maxLiveWorkersSave")}</button>
|
|
307
|
-
<button type="button" data-action="off-session-cap">${e("botDefaults.maxLiveWorkersOff")}</button>
|
|
308
|
-
<span class="oncall-status" data-session-cap-status></span>
|
|
309
|
-
</div>
|
|
310
|
-
</div>
|
|
311
|
-
</div>`}function Ae(t){let a=typeof t.startupCommands=="string"?t.startupCommands:"";return`<div class="bd-subsection">
|
|
312
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionStartupCommands")}</h4>
|
|
313
|
-
<p class="bd-section-note">${e("botDefaults.startupCommandsHelp")}</p>
|
|
314
|
-
<textarea data-input="startupCommands" rows="3"
|
|
315
|
-
placeholder="${i(e("botDefaults.startupCommandsPlaceholder"))}"
|
|
316
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${i(a)}</textarea>
|
|
317
|
-
<div class="actions">
|
|
318
|
-
<button type="button" class="primary" data-action="save-startup-commands">${e("botDefaults.startupCommandsSave")}</button>
|
|
319
|
-
<span class="oncall-status" data-startup-commands-status></span>
|
|
320
|
-
</div>
|
|
321
|
-
</div>`}function Oe(t){let a=typeof t.launchShell=="string"?t.launchShell:"";return`<div class="bd-subsection">
|
|
322
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionLaunchShell")}</h4>
|
|
323
|
-
<p class="bd-section-note">${e("botDefaults.launchShellHelp")}</p>
|
|
324
|
-
<input type="text" data-input="launchShell"
|
|
325
|
-
placeholder="${i(e("botDefaults.launchShellPlaceholder"))}"
|
|
326
|
-
value="${i(a)}"
|
|
327
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">
|
|
328
|
-
<div class="actions">
|
|
329
|
-
<button type="button" class="primary" data-action="save-launch-shell">${e("botDefaults.launchShellSave")}</button>
|
|
330
|
-
<span class="oncall-status" data-launch-shell-status></span>
|
|
331
|
-
</div>
|
|
332
|
-
</div>`}function Ge(t){let a=typeof t.env=="string"?t.env:"";return`<div class="bd-subsection">
|
|
333
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionEnv")}</h4>
|
|
334
|
-
<p class="bd-section-note">${e("botDefaults.envHelp")}</p>
|
|
335
|
-
<textarea data-input="env" rows="5"
|
|
336
|
-
placeholder="${i(e("botDefaults.envPlaceholder"))}"
|
|
337
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${i(a)}</textarea>
|
|
338
|
-
<div class="actions">
|
|
339
|
-
<button type="button" class="primary" data-action="save-env">${e("botDefaults.envSave")}</button>
|
|
340
|
-
<span class="oncall-status" data-env-status></span>
|
|
341
|
-
</div>
|
|
342
|
-
</div>`}function We(t){let a=t.sandbox===!0;return`<section class="bd-section">
|
|
343
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSandbox")}</h3>
|
|
344
|
-
<label class="toggle-row">
|
|
345
|
-
<input type="checkbox" data-action="toggle-sandbox" ${a?"checked":""}>
|
|
346
|
-
<span class="switch" aria-hidden="true"></span>
|
|
347
|
-
<span class="toggle-tx"><strong>${e("botDefaults.sandboxToggle")}</strong>
|
|
348
|
-
<small>${e("botDefaults.sandboxHelp")}</small></span>
|
|
349
|
-
</label>
|
|
350
|
-
<div class="actions">
|
|
351
|
-
<span class="oncall-status" data-sandbox-status></span>
|
|
352
|
-
</div>
|
|
353
|
-
</section>`}function re(t){return t==null?e("botDefaults.quotaStateOff"):e("botDefaults.quotaStateOn",{count:t})}function Ue(t){let a=t.restrictGrantCommands===!0,u=t.autoGrantRequestCards!==!1,p=typeof t.messageQuotaDefaultLimit=="number"?t.messageQuotaDefaultLimit:null;return`<section class="bd-section">
|
|
354
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionGrant")}</h3>
|
|
355
|
-
<label class="toggle-row">
|
|
356
|
-
<input type="checkbox" data-action="toggle-auto-grant-card" ${u?"checked":""}>
|
|
357
|
-
<span class="switch" aria-hidden="true"></span>
|
|
358
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoGrantCard")}</strong>
|
|
359
|
-
<small>${e("botDefaults.autoGrantCardHelp")}</small></span>
|
|
360
|
-
</label>
|
|
361
|
-
<label class="toggle-row">
|
|
362
|
-
<input type="checkbox" data-action="toggle-restrict-grant" ${a?"checked":""}>
|
|
363
|
-
<span class="switch" aria-hidden="true"></span>
|
|
364
|
-
<span class="toggle-tx"><strong>${e("botDefaults.restrictGrant")}</strong>
|
|
365
|
-
<small>${e("botDefaults.restrictGrantHelp")}</small></span>
|
|
366
|
-
</label>
|
|
367
|
-
<div class="bd-row bd-quota">
|
|
368
|
-
<label>
|
|
369
|
-
<span>${e("botDefaults.quotaDefault")}</span>
|
|
370
|
-
<input type="number" min="1" step="1" data-input="quotaLimit"
|
|
371
|
-
placeholder="${i(e("botDefaults.quotaPlaceholder"))}"
|
|
372
|
-
value="${p??""}">
|
|
373
|
-
</label>
|
|
374
|
-
<small data-quota-state>${i(re(p))}</small>
|
|
375
|
-
<small class="bd-help">${e("botDefaults.quotaHelp")}</small>
|
|
376
|
-
<div class="actions">
|
|
377
|
-
<button type="button" class="primary" data-action="save-quota">${e("botDefaults.quotaSave")}</button>
|
|
378
|
-
<button type="button" data-action="off-quota">${e("botDefaults.quotaOff")}</button>
|
|
379
|
-
<span class="oncall-status" data-grant-status></span>
|
|
380
|
-
</div>
|
|
381
|
-
</div>
|
|
382
|
-
</section>`}function Je(t){let a=t.autoStartOnGroupJoin===!0,u=t.autoStartOnNewTopic===!0,p=typeof t.autoStartOnGroupJoinPrompt=="string"?t.autoStartOnGroupJoinPrompt:"";return`<div class="bd-subsection">
|
|
383
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionAutoStart")}</h4>
|
|
384
|
-
<label class="toggle-row">
|
|
385
|
-
<input type="checkbox" data-action="toggle-auto-join" ${a?"checked":""}>
|
|
386
|
-
<span class="switch" aria-hidden="true"></span>
|
|
387
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartJoin")}</strong>
|
|
388
|
-
<small>${e("botDefaults.autoStartJoinHelp")}</small></span>
|
|
389
|
-
</label>
|
|
390
|
-
<div class="bd-row">
|
|
391
|
-
<label>
|
|
392
|
-
<span>${e("botDefaults.autoStartJoinPrompt")}</span>
|
|
393
|
-
<textarea data-input="autoJoinPrompt" rows="3"
|
|
394
|
-
placeholder="${i(e("botDefaults.autoStartJoinPromptPlaceholder"))}">${i(p)}</textarea>
|
|
395
|
-
</label>
|
|
396
|
-
<div class="actions">
|
|
397
|
-
<button type="button" class="primary" data-action="save-auto-join-prompt">${e("botDefaults.autoStartJoinPromptSave")}</button>
|
|
398
|
-
</div>
|
|
399
|
-
</div>
|
|
400
|
-
<label class="toggle-row">
|
|
401
|
-
<input type="checkbox" data-action="toggle-auto-topic" ${u?"checked":""}>
|
|
402
|
-
<span class="switch" aria-hidden="true"></span>
|
|
403
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartTopic")}</strong>
|
|
404
|
-
<small>${e("botDefaults.autoStartTopicHelp")}</small></span>
|
|
405
|
-
</label>
|
|
406
|
-
<div class="actions">
|
|
407
|
-
<span class="oncall-status" data-auto-start-status></span>
|
|
408
|
-
</div>
|
|
409
|
-
</div>`}function ce(t){return d.querySelector(`.bd-card[data-appid="${CSS.escape(t)}"]`)}function Ot(t,a){let u=t?.querySelector("[data-profile-role-list]");u&&(u.innerHTML=$(a),Qe(t,a))}async function Fe(t,a){let u=rt.get(t);if(u?.loaded||u?.loading){Ot(a,t);return}u={loaded:!1,loading:!0,items:[]},rt.set(t,u),Ot(a,t);try{let p=await fetch("/api/role-profiles"),m=await p.json().catch(()=>({}));if(!p.ok)throw new Error(m?.error??String(p.status));let S=Array.isArray(m.profiles)?m.profiles:[];u.items=S.filter(N=>(N.botEntries??[]).some(B=>B?.larkAppId===t&&B?.hasEntry)).map(N=>({profileId:String(N.profileId)})),u.loaded=!0}catch(p){u.error=p?.message??String(p),u.loaded=!0}finally{u.loading=!1,Ot(ce(t),t)}}function Qe(t,a){t.querySelectorAll("details.bd-profile-role-entry[data-profile-id]").forEach(u=>{u.addEventListener("toggle",()=>{if(!u.open)return;let p=u.dataset.profileId;p&&_e(a,p)})})}async function _e(t,a){let p=rt.get(t)?.items.find(m=>m.profileId===a);if(!(!p||p.loaded||p.loading)){p.loading=!0,de(t,a);try{let m=await fetch(`/api/role-profiles/${encodeURIComponent(a)}/${encodeURIComponent(t)}`),S=await m.json().catch(()=>({}));if(!m.ok)throw new Error(S?.error??String(m.status));p.content=S?.hasEntry?String(S.content??""):"",p.loaded=!0}catch(m){p.error=m?.message??String(m)}finally{p.loading=!1,de(t,a)}}}function de(t,a){let p=rt.get(t)?.items.find(S=>S.profileId===a);if(!p)return;let m=ce(t)?.querySelector(`[data-profile-role-body="${CSS.escape(a)}"]`);m&&(m.innerHTML=gt(p))}function Ke(){d.querySelectorAll(".bd-card").forEach(t=>{let a=t.dataset.appid;Fe(a,t);let u=t.querySelector("select[data-input=workingDirMode]"),p=t.querySelector("input[data-input=workingDir]"),m=t.querySelector("[data-wd-dir-row]"),S=t.querySelector("[data-wd-worktree-row]"),N=t.querySelector("input[data-input=autoWorktree]"),B=t.querySelector("button[data-action=save-working-dir]"),h=t.querySelector("[data-status]");if(!u||!p||!B||!h)return;let M=t.querySelector("select[data-input=agentCliId]"),k=t.querySelector("input[data-input=agentModel]"),yt=t.querySelector("button[data-action=save-agent]"),O=t.querySelector("[data-agent-status]");function ue(){if(!M||!k)return;let n=t.querySelector(`#agent-model-suggestions-${CSS.escape(a)}`),s=jt(M.value),o=s?.gateway==="ttadk",r=o&&s.acceptsModel!==!1;if(o&&!r){n&&(n.innerHTML=""),k.value="",k.disabled=!0,k.placeholder=e("botOnboarding.modelTtadkCocoPlaceholder");return}k.disabled=!1,r?(n&&(n.innerHTML=oe.map(l=>`<option value="${i(l)}"></option>`).join("")),k.placeholder=e("botOnboarding.modelTtadkPlaceholder").replace("{model}",Bt),k.value.trim()||(k.value=Bt)):(n&&(n.innerHTML=""),k.placeholder=e("botDefaults.agentModelPlaceholder"),k.value.trim()===Bt&&(k.value=""))}M&&k&&yt&&O&&(M.addEventListener("change",ue),yt.addEventListener("click",async()=>{O.textContent="",O.className="oncall-status",yt.disabled=!0,M.disabled=!0,k.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/agent`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({cliId:M.value,model:k.value})}),s=await n.json().catch(()=>({}));if(n.ok&&s.ok){O.textContent=`\u2713 ${e("botDefaults.agentSaved")}`,O.classList.add("hint-ok");let o=v.bots.find(r=>r.larkAppId===a);o&&(o.cliId=s.cliId,o.wrapperCli=s.wrapperCli??null,o.model=s.model??"",o.agentSelectionKey=s.selectionKey??M.value)}else O.textContent=`\u2717 ${s.error??n.status}`,O.classList.add("hint-warn-inline")}catch(n){O.textContent=`\u2717 ${n?.message??n}`,O.classList.add("hint-warn-inline")}finally{yt.disabled=!1,M.disabled=!1,k.disabled=!1,ue()}})),u.addEventListener("change",()=>{let n=u.value==="off";m&&(m.hidden=n),S&&(S.hidden=u.value!=="default"),n||p.focus()}),B.addEventListener("click",async()=>{h.textContent="",h.className="oncall-status";let n=u.value,s=p.value.trim();if(n!=="off"&&!s){h.textContent=e("botDefaults.required"),h.classList.add("hint-warn-inline");return}let o=n==="default"&&!!N?.checked;B.disabled=!0;try{let r=await fetch(`/api/bots/${encodeURIComponent(a)}/working-dir-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({mode:n,workingDir:s,autoWorktree:o})}),l=await r.json().catch(()=>({}));if(r.ok&&l.ok){let f=l.resolvedPath?` \u2192 ${l.resolvedPath}`:"";h.textContent=`\u2713 ${e("botDefaults.workingDirSaved")}${f}`,h.classList.add("hint-ok");let g=v.bots.find(Y=>Y.larkAppId===a);g&&(l.defaultOncall&&(g.defaultOncall=l.defaultOncall),g.defaultWorkingDir=l.defaultWorkingDir??null,g.defaultWorkingDirAutoWorktree=l.defaultWorkingDirAutoWorktree===!0);let H=t.querySelector("[data-oncall-since]");H&&l.defaultOncall?.since!=null&&(H.textContent=`${e("botDefaults.lastEnabled")}: ${He(l.defaultOncall.since)}`)}else h.textContent=`\u2717 ${l.error??r.status}`,h.classList.add("hint-warn-inline")}catch(r){h.textContent=`\u2717 ${r?.message??r}`,h.classList.add("hint-warn-inline")}finally{B.disabled=!1}});let ht=t.querySelector("input[data-input=brandLabel]"),Gt=t.querySelector("button[data-action=save-brand]"),Wt=t.querySelector("button[data-action=reset-brand]"),G=t.querySelector("[data-brand-status]"),pe=t.querySelector("[data-brand-state]");async function fe(n,s){if(G){G.textContent="",G.className="oncall-status",s.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/brand-label`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({brandLabel:n})}),r=await o.json().catch(()=>({}));if(o.ok&&r.ok){let l=r.brandLabel??null;G.textContent="\u2713",G.classList.add("hint-ok"),ht&&(ht.value=l??""),pe&&(pe.textContent=le(l));let f=v.bots.find(g=>g.larkAppId===a);f&&(f.brandLabel=l)}else G.textContent=`\u2717 ${r.error??o.status}`,G.classList.add("hint-warn-inline")}catch(o){G.textContent=`\u2717 ${o?.message??o}`,G.classList.add("hint-warn-inline")}finally{s.disabled=!1}}}ht&&Gt&&Gt.addEventListener("click",()=>fe(ht.value,Gt)),Wt&&Wt.addEventListener("click",()=>fe(null,Wt));let me=t.querySelector("[data-name-row]"),be=t.querySelector("[data-name-editor]"),Ut=t.querySelector("[data-bot-name]"),j=t.querySelector("input[data-input=botRename]"),ge=t.querySelector("button[data-action=edit-bot-name]"),at=t.querySelector("button[data-action=save-bot-name]"),nt=t.querySelector("button[data-action=cancel-bot-name]"),L=t.querySelector("[data-name-status]"),W=t.querySelector("button[data-action=feishu-login]");function vt(n){!me||!be||(me.hidden=n,be.hidden=!n,n&&j&&(j.value=Ut?.textContent??"",j.focus(),j.select()))}function ze(n,s){let r=["no_session","session_expired","no_access","unsupported_brand"].includes(n)?e(`botDefaults.renameWarn.${n}`):s||n;return e("botDefaults.renameLocalOnly",{reason:r})}async function Jt(){if(!j||!L)return;let n=j.value.trim();if(!n){L.textContent=`\u2717 ${e("botDefaults.renameEmpty")}`,L.className="bd-name-status oncall-status hint-warn-inline";return}j.disabled=!0,at&&(at.disabled=!0),nt&&(nt.disabled=!0),L.className="bd-name-status oncall-status",L.textContent=`\u23F3 ${e("botDefaults.renaming")}`;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/rename`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({name:n})}),o=await s.json().catch(()=>({}));if(s.ok&&o.ok){let r=typeof o.botName=="string"&&o.botName?o.botName:n,l=v.bots.find(g=>g.larkAppId===a);l&&(l.botName=r,o.mode==="feishu"?(l.larkBotName=n,l.displayName=null):l.displayName=n),Ut&&(Ut.textContent=r);let f=b.querySelector(`.bd-roster-item[data-appid="${CSS.escape(a)}"] .bd-roster-tx b`);if(f&&(f.textContent=r),vt(!1),o.mode==="feishu")L.textContent=`\u2713 ${e("botDefaults.renameOkFeishu")}`,L.classList.add("hint-ok"),W&&(W.hidden=!0);else{L.textContent=`\u26A0 ${ze(String(o.warning??""),o.message)}`,L.classList.add("hint-warn-inline"),typeof o.message=="string"&&o.message&&(L.title=o.message);let g=o.warning==="no_session"||o.warning==="session_expired";W&&(W.hidden=!g)}}else L.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:String(o.error??s.status)})}`,L.classList.add("hint-warn-inline")}catch(s){L.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:s?.message??String(s)})}`,L.classList.add("hint-warn-inline")}finally{j.disabled=!1,at&&(at.disabled=!1),nt&&(nt.disabled=!1)}}ge&&ge.addEventListener("click",()=>{L&&(L.textContent="",L.className="bd-name-status oncall-status"),W&&(W.hidden=!0),vt(!0)}),W&&W.addEventListener("click",()=>{aa(()=>{W.hidden=!0,Jt()})}),nt&&nt.addEventListener("click",()=>vt(!1)),at&&at.addEventListener("click",()=>{Jt()}),j&&j.addEventListener("keydown",n=>{n.key==="Enter"?(n.preventDefault(),Jt()):n.key==="Escape"&&vt(!1)});let st=t.querySelector("input[data-action=toggle-disable-streaming]"),V=t.querySelector("input[data-action=toggle-silent-reactions]"),Z=t.querySelector("input[data-action=toggle-writable-link]"),St=t.querySelector("input[data-action=toggle-private-card]"),Ve=t.querySelector("[data-card-pref-status]"),ye=t.querySelector("[data-card-pref-moot]");async function R(n,s,o=Ve){if(o){o.textContent="",o.className="oncall-status",s.disabled=!0;try{let r=await fetch(`/api/bots/${encodeURIComponent(a)}/card-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),l=await r.json().catch(()=>({}));if(r.ok&&l.ok){o.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,o.classList.add("hint-ok");let f=v.bots.find(g=>g.larkAppId===a);f&&(f.disableStreamingCard=l.disableStreamingCard,f.silentTurnReactions=l.silentTurnReactions,f.writableTerminalLinkInCard=l.writableTerminalLinkInCard,f.privateCard=l.privateCard,f.botToBotSameDir=l.botToBotSameDir,f.autoStartOnGroupJoin=l.autoStartOnGroupJoin,f.autoStartOnGroupJoinPrompt=l.autoStartOnGroupJoinPrompt,f.autoStartOnNewTopic=l.autoStartOnNewTopic,f.regularGroupReplyMode=l.regularGroupReplyMode,f.regularGroupMentionMode=l.regularGroupMentionMode,f.docSubscribeDefaultMode=l.docSubscribeDefaultMode)}else o.textContent=`\u2717 ${l.error??r.status}`,o.classList.add("hint-warn-inline")}catch(r){o.textContent=`\u2717 ${r?.message??r}`,o.classList.add("hint-warn-inline")}finally{s===Z?s.disabled=!!st?.checked:s===V?s.disabled=!st?.checked:s.disabled=!1}}}st&&st.addEventListener("change",()=>{let n=st.checked;Z&&(Z.disabled=n),V&&(V.disabled=!n),ye&&(ye.hidden=!n),R({disableStreamingCard:n},st)}),V&&V.addEventListener("change",()=>{R({silentTurnReactions:V.checked},V)}),Z&&Z.addEventListener("change",()=>{R({writableTerminalLinkInCard:Z.checked},Z)}),St&&St.addEventListener("change",()=>{R({privateCard:St.checked},St)});let $t=t.querySelector("input[data-action=toggle-cross-bot-samedir]"),Ze=t.querySelector("[data-crossbot-status]");$t&&$t.addEventListener("change",()=>{R({botToBotSameDir:$t.checked},$t,Ze)});let Ft=t.querySelector("input[data-input=summaryLimit]"),Qt=t.querySelector("input[data-input=summarySinceHours]"),Lt=t.querySelector("button[data-action=save-summary-trigger]"),P=t.querySelector("[data-summary-trigger-status]");function he(n,s){let o=n.value.trim();return o===""?s:/^(0|[1-9]\d*)$/.test(o)?Number(o):null}Ft&&Qt&&Lt&&Lt.addEventListener("click",async()=>{if(!P)return;P.textContent="",P.className="oncall-status";let n=he(Ft,50),s=he(Qt,24);if(n==null||s==null){P.textContent=`\u2717 ${e("botDefaults.summaryNumberInvalid")}`,P.classList.add("hint-warn-inline");return}Lt.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/summary-range`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({limit:n,sinceHours:s})}),r=await o.json().catch(()=>({}));if(o.ok&&r.ok){P.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,P.classList.add("hint-ok");let l=r.summaryRange??{limit:n,sinceHours:s};Ft.value=String(Number.isInteger(l.limit)&&l.limit>=0?l.limit:n),Qt.value=String(Number.isInteger(l.sinceHours)&&l.sinceHours>=0?l.sinceHours:s);let f=v.bots.find(g=>g.larkAppId===a);f&&(f.summaryRange=l)}else P.textContent=`\u2717 ${r.error??o.status}`,P.classList.add("hint-warn-inline")}catch(o){P.textContent=`\u2717 ${o?.message??o}`,P.classList.add("hint-warn-inline")}finally{Lt.disabled=!1}});let X=t.querySelector("input[data-action=toggle-sandbox]"),T=t.querySelector("[data-sandbox-status]");X&&X.addEventListener("change",async()=>{let n=X.checked;T&&(T.textContent="",T.className="oncall-status"),X.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/sandbox`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:n})}),o=await s.json().catch(()=>({}));if(s.ok&&o.ok){T&&(T.textContent=`\u2713 ${e("botDefaults.sandboxSaved")}`,T.classList.add("hint-ok"));let r=v.bots.find(l=>l.larkAppId===a);r&&(r.sandbox=o.sandbox===!0)}else T&&(T.textContent=`\u2717 ${o.error??s.status}`,T.classList.add("hint-warn-inline")),X.checked=!n}catch(s){T&&(T.textContent=`\u2717 ${s?.message??s}`,T.classList.add("hint-warn-inline")),X.checked=!n}finally{X.disabled=!1}});let kt=t.querySelector("input[data-action=toggle-auto-join]"),Dt=t.querySelector("input[data-action=toggle-auto-topic]"),ve=t.querySelector("textarea[data-input=autoJoinPrompt]"),_t=t.querySelector("button[data-action=save-auto-join-prompt]"),Kt=t.querySelector("[data-auto-start-status]");kt&&kt.addEventListener("change",()=>{R({autoStartOnGroupJoin:kt.checked},kt,Kt)}),Dt&&Dt.addEventListener("change",()=>{R({autoStartOnNewTopic:Dt.checked},Dt,Kt)}),ve&&_t&&_t.addEventListener("click",()=>{R({autoStartOnGroupJoinPrompt:ve.value},_t,Kt)});let ut=t.querySelector("select[data-input=p2pMode]"),U=t.querySelector("[data-p2p-status]");ut&&U&&ut.addEventListener("change",async()=>{let n=ut.value==="chat"?"chat":"thread";U.textContent="",U.className="oncall-status",ut.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/p2p-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({p2pMode:n})}),o=await s.json().catch(()=>({}));if(s.ok&&o.ok){U.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,U.classList.add("hint-ok");let r=v.bots.find(l=>l.larkAppId===a);r&&(r.p2pMode=o.p2pMode==="chat"?"chat":"thread")}else U.textContent=`\u2717 ${o.error??s.status}`,U.classList.add("hint-warn-inline")}catch(s){U.textContent=`\u2717 ${s?.message??s}`,U.classList.add("hint-warn-inline")}finally{ut.disabled=!1}});let pt=t.querySelector("select[data-input=skillInjection]"),J=t.querySelector("[data-skill-injection-status]");pt&&J&&pt.addEventListener("change",async()=>{let n=pt.value;J.textContent="",J.className="oncall-status",pt.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/skill-injection`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({skillInjection:n})}),o=await s.json().catch(()=>({}));if(s.ok&&o.ok){J.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,J.classList.add("hint-ok");let r=v.bots.find(l=>l.larkAppId===a);r&&(r.skillInjection=o.skillInjection??null)}else J.textContent=`\u2717 ${o.error??s.status}`,J.classList.add("hint-warn-inline")}catch(s){J.textContent=`\u2717 ${s?.message??s}`,J.classList.add("hint-warn-inline")}finally{pt.disabled=!1}});let Mt=t.querySelector("select[data-input=regularGroupMode]"),Xe=t.querySelector("[data-regular-group-status]");Mt&&Mt.addEventListener("change",()=>{R({regularGroupReplyMode:Mt.value},Mt,Xe)});let wt=t.querySelector("select[data-input=regularGroupMentionMode]"),Ye=t.querySelector("[data-mention-mode-status]");wt&&wt.addEventListener("change",()=>{R({regularGroupMentionMode:wt.value},wt,Ye)});let Et=t.querySelector("select[data-input=docSubscribeDefaultMode]"),ta=t.querySelector("[data-doc-subscribe-mode-status]");Et&&Et.addEventListener("change",()=>{R({docSubscribeDefaultMode:Et.value},Et,ta)});let zt=t.querySelector("textarea[data-input=teamRole]"),ft=t.querySelector("button[data-action=save-role]"),mt=t.querySelector("button[data-action=delete-role]"),w=t.querySelector("[data-role-status]");if(zt&&ft&&mt&&w){let o=function(l){let f=d.querySelector(`.bd-card[data-appid="${CSS.escape(a)}"]`);if(!f)return;let g=f.querySelector("textarea[data-input=teamRole]"),H=f.querySelector("button[data-action=save-role]"),Y=f.querySelector("button[data-action=delete-role]");g&&(g.value=l,g.disabled=!1),H&&(H.disabled=!1),Y&&(Y.disabled=!1)};var ia=o;let n=`/api/team/local-bots/${encodeURIComponent(a)}/role`,s=v.bots.find(l=>l.larkAppId===a);s&&typeof s.teamRole!="string"&&!s.teamRoleLoading&&(s.teamRoleLoading=!0,(async()=>{try{let l=await fetch(n),f=await l.json().catch(()=>({}));l.ok&&f.ok?(s.teamRole=f.role??"",o(s.teamRole)):(w.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${f.error??l.status}`,w.classList.add("hint-warn-inline"))}catch(l){w.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${l?.message??l}`,w.classList.add("hint-warn-inline")}finally{s.teamRoleLoading=!1}})());async function r(l,f,g){if(w&&!(!s||typeof s.teamRole!="string")){w.textContent="",w.className="oncall-status",ft.disabled=!0,mt.disabled=!0;try{let H=await fetch(n,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({role:l})}),Y=await H.json().catch(()=>({}));H.ok&&Y.ok?(s&&(s.teamRole=l.trim()),w.textContent=`\u2713 ${g?e("botDefaults.roleDeleted"):e("botDefaults.roleSaved")}`,w.classList.add("hint-ok")):(w.textContent=`\u2717 ${Y.error??H.status}`,w.classList.add("hint-warn-inline"))}catch(H){w.textContent=`\u2717 ${H?.message??H}`,w.classList.add("hint-warn-inline")}finally{ft.disabled=!1,mt.disabled=!1}}}ft.addEventListener("click",()=>r(zt.value,ft,!1)),mt.addEventListener("click",()=>{zt.value="",r("",mt,!0)})}let Tt=t.querySelector("input[data-action=toggle-auto-grant-card]"),Ct=t.querySelector("input[data-action=toggle-restrict-grant]"),ot=t.querySelector("input[data-input=quotaLimit]"),xt=t.querySelector("button[data-action=save-quota]"),Vt=t.querySelector("button[data-action=off-quota]"),C=t.querySelector("[data-grant-status]"),Se=t.querySelector("[data-quota-state]");async function bt(n,s){if(C){C.textContent="",C.className="oncall-status",s.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/grant-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),r=await o.json().catch(()=>({}));if(o.ok&&r.ok){C.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,C.classList.add("hint-ok");let l=typeof r.messageQuotaDefaultLimit=="number"?r.messageQuotaDefaultLimit:null,f=v.bots.find(g=>g.larkAppId===a);f&&(f.autoGrantRequestCards=r.autoGrantRequestCards!==!1,f.restrictGrantCommands=r.restrictGrantCommands===!0,f.messageQuotaDefaultLimit=l),Se&&(Se.textContent=re(l)),ot&&"messageQuotaDefaultLimit"in n&&(ot.value=l==null?"":String(l))}else C.textContent=`\u2717 ${r.error??o.status}`,C.classList.add("hint-warn-inline")}catch(o){C.textContent=`\u2717 ${o?.message??o}`,C.classList.add("hint-warn-inline")}finally{s.disabled=!1}}}Tt&&Tt.addEventListener("change",()=>{bt({autoGrantRequestCards:Tt.checked},Tt)}),Ct&&Ct.addEventListener("change",()=>{bt({restrictGrantCommands:Ct.checked},Ct)}),ot&&xt&&xt.addEventListener("click",()=>{let n=ot.value.trim();if(n===""){bt({messageQuotaDefaultLimit:null},xt);return}if(!/^[1-9]\d*$/.test(n)){C&&(C.textContent=`\u2717 ${e("botDefaults.quotaInvalid")}`,C.className="oncall-status hint-warn-inline");return}bt({messageQuotaDefaultLimit:Number(n)},xt)}),ot&&Vt&&Vt.addEventListener("click",()=>{ot.value="",bt({messageQuotaDefaultLimit:null},Vt)});let lt=t.querySelector("input[data-input=maxLiveWorkers]"),Ht=t.querySelector("button[data-action=save-session-cap]"),Zt=t.querySelector("button[data-action=off-session-cap]"),x=t.querySelector("[data-session-cap-status]"),$e=t.querySelector("[data-session-cap-state]");async function Xt(n,s){if(x){x.textContent="",x.className="oncall-status",s.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/max-live-workers`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({maxLiveWorkers:n})}),r=await o.json().catch(()=>({}));if(o.ok&&r.ok){x.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,x.classList.add("hint-ok");let l=typeof r.maxLiveWorkers=="number"?r.maxLiveWorkers:null,f=v.bots.find(g=>g.larkAppId===a);f&&(f.maxLiveWorkers=l),$e&&($e.textContent=ie(l)),lt&&(lt.value=l==null?"":String(l))}else x.textContent=`\u2717 ${r.error??o.status}`,x.classList.add("hint-warn-inline")}catch(o){x.textContent=`\u2717 ${o?.message??o}`,x.classList.add("hint-warn-inline")}finally{s.disabled=!1}}}lt&&Ht&&Ht.addEventListener("click",()=>{let n=lt.value.trim();if(n===""){Xt(null,Ht);return}if(!/^[1-9]\d*$/.test(n)){x&&(x.textContent=`\u2717 ${e("botDefaults.maxLiveWorkersInvalid")}`,x.className="oncall-status hint-warn-inline");return}Xt(Number(n),Ht)}),lt&&Zt&&Zt.addEventListener("click",()=>{lt.value="",Xt(null,Zt)});let Yt=t.querySelector("textarea[data-input=startupCommands]"),It=t.querySelector("button[data-action=save-startup-commands]"),F=t.querySelector("[data-startup-commands-status]");Yt&&It&&It.addEventListener("click",async()=>{if(F){F.textContent="",F.className="oncall-status",It.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/startup-commands`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({startupCommands:Yt.value})}),s=await n.json().catch(()=>({}));if(n.ok&&s.ok){F.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,F.classList.add("hint-ok");let o=typeof s.startupCommands=="string"?s.startupCommands:"";Yt.value=o;let r=v.bots.find(l=>l.larkAppId===a);r&&(r.startupCommands=o)}else F.textContent=`\u2717 ${s.error??n.status}`,F.classList.add("hint-warn-inline")}catch(n){F.textContent=`\u2717 ${n?.message??n}`,F.classList.add("hint-warn-inline")}finally{It.disabled=!1}}});let te=t.querySelector("input[data-input=launchShell]"),qt=t.querySelector("button[data-action=save-launch-shell]"),Q=t.querySelector("[data-launch-shell-status]");te&&qt&&qt.addEventListener("click",async()=>{if(Q){Q.textContent="",Q.className="oncall-status",qt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/launch-shell`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({launchShell:te.value})}),s=await n.json().catch(()=>({}));if(n.ok&&s.ok){Q.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,Q.classList.add("hint-ok");let o=typeof s.launchShell=="string"?s.launchShell:"";te.value=o;let r=v.bots.find(l=>l.larkAppId===a);r&&(r.launchShell=o)}else Q.textContent=`\u2717 ${s.error??n.status}`,Q.classList.add("hint-warn-inline")}catch(n){Q.textContent=`\u2717 ${n?.message??n}`,Q.classList.add("hint-warn-inline")}finally{qt.disabled=!1}}});let ee=t.querySelector("textarea[data-input=env]"),Rt=t.querySelector("button[data-action=save-env]"),_=t.querySelector("[data-env-status]");ee&&Rt&&Rt.addEventListener("click",async()=>{if(_){_.textContent="",_.className="oncall-status",Rt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/env`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({env:ee.value})}),s=await n.json().catch(()=>({}));if(n.ok&&s.ok){_.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,_.classList.add("hint-ok");let o=typeof s.env=="string"?s.env:"";ee.value=o;let r=v.bots.find(l=>l.larkAppId===a);r&&(r.env=o)}else _.textContent=`\u2717 ${s.error??n.status}`,_.classList.add("hint-warn-inline")}catch(n){_.textContent=`\u2717 ${n?.message??n}`,_.classList.add("hint-warn-inline")}finally{Rt.disabled=!1}}})})}function et(){!q&&A&&tt()}return I.addEventListener("input",et),()=>{q=!0,E.onclick=null,I.removeEventListener("input",et),d.removeEventListener("click",K),b.replaceChildren(),d.replaceChildren()}}var D=ae(Me(),1);function la(){let c=we(),d=(0,At.useRef)(null);return(0,At.useEffect)(()=>{if(d.current)return Ie(d.current)},[]),(0,D.jsxs)("section",{className:"page",ref:d,children:[(0,D.jsx)("div",{className:"page-heading",children:(0,D.jsxs)("div",{children:[(0,D.jsx)("p",{className:"eyebrow",children:c("nav.botDefaults")}),(0,D.jsx)("h1",{children:c("botDefaults.title")}),(0,D.jsx)("p",{children:c("botDefaults.subtitle")})]})}),(0,D.jsxs)("form",{id:"bd-filters",className:"filters sessions-filters",children:[(0,D.jsx)("input",{type:"search",name:"q",placeholder:c("botDefaults.search")}),(0,D.jsx)("button",{type:"button",id:"bd-refresh",children:c("botDefaults.refresh")})]}),(0,D.jsxs)("div",{className:"bd-layout",children:[(0,D.jsx)("aside",{id:"bd-roster",className:"bd-roster"}),(0,D.jsx)("div",{id:"bd-list",className:"bd-detail"})]})]})}function ma(c){return De(c,(0,D.jsx)(la,{}))}export{ma as renderBotDefaultsPage};
|