botmux 2.98.4-canary.2 → 2.99.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/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/adapters/cli/genius.d.ts +4 -0
- package/dist/adapters/cli/genius.d.ts.map +1 -0
- package/dist/adapters/cli/genius.js +216 -0
- package/dist/adapters/cli/genius.js.map +1 -0
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +1 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/core/dashboard-rows.d.ts +1 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +2 -1
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/dashboard/session-card-model.d.ts +2 -2
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +5 -2
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +28 -63
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +3 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -0
- package/dist/dashboard/web/bot-defaults-page.js +23 -0
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts +2 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +30 -30
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts +14 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -0
- package/dist/dashboard/web/connectors-page.js +303 -0
- package/dist/dashboard/web/connectors-page.js.map +1 -0
- package/dist/dashboard/web/connectors.d.ts +1 -12
- package/dist/dashboard/web/connectors.d.ts.map +1 -1
- package/dist/dashboard/web/connectors.js +1 -325
- package/dist/dashboard/web/connectors.js.map +1 -1
- package/dist/dashboard/web/dashboard-routes.d.ts +14 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-routes.js +176 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts +3 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -0
- package/dist/dashboard/web/groups-page.js +26 -0
- package/dist/dashboard/web/groups-page.js.map +1 -0
- package/dist/dashboard/web/groups.d.ts +1 -1
- package/dist/dashboard/web/groups.d.ts.map +1 -1
- package/dist/dashboard/web/groups.js +113 -52
- package/dist/dashboard/web/groups.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +18 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights-page.d.ts +3 -0
- package/dist/dashboard/web/insights-page.d.ts.map +1 -0
- package/dist/dashboard/web/insights-page.js +26 -0
- package/dist/dashboard/web/insights-page.js.map +1 -0
- package/dist/dashboard/web/insights.d.ts +18 -1
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +25 -61
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/office-page.d.ts +3 -0
- package/dist/dashboard/web/office-page.d.ts.map +1 -0
- package/dist/dashboard/web/office-page.js +149 -0
- package/dist/dashboard/web/office-page.js.map +1 -0
- package/dist/dashboard/web/office.d.ts +1 -1
- package/dist/dashboard/web/office.d.ts.map +1 -1
- package/dist/dashboard/web/office.js +1 -139
- package/dist/dashboard/web/office.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts +3 -0
- package/dist/dashboard/web/overview-page.d.ts.map +1 -0
- package/dist/dashboard/web/overview-page.js +149 -0
- package/dist/dashboard/web/overview-page.js.map +1 -0
- package/dist/dashboard/web/overview.d.ts +2 -2
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +14 -3
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/react-hooks.d.ts +8 -0
- package/dist/dashboard/web/react-hooks.d.ts.map +1 -0
- package/dist/dashboard/web/react-hooks.js +43 -0
- package/dist/dashboard/web/react-hooks.js.map +1 -0
- package/dist/dashboard/web/react-mount.d.ts +4 -0
- package/dist/dashboard/web/react-mount.d.ts.map +1 -0
- package/dist/dashboard/web/react-mount.js +7 -0
- package/dist/dashboard/web/react-mount.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts +4 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -0
- package/dist/dashboard/web/roles-page.js +26 -0
- package/dist/dashboard/web/roles-page.js.map +1 -0
- package/dist/dashboard/web/roles.d.ts +1 -2
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +189 -135
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/route-lifecycle.d.ts +14 -0
- package/dist/dashboard/web/route-lifecycle.d.ts.map +1 -0
- package/dist/dashboard/web/route-lifecycle.js +29 -0
- package/dist/dashboard/web/route-lifecycle.js.map +1 -0
- package/dist/dashboard/web/schedules-page.d.ts +14 -0
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -0
- package/dist/dashboard/web/schedules-page.js +84 -0
- package/dist/dashboard/web/schedules-page.js.map +1 -0
- package/dist/dashboard/web/schedules.d.ts +1 -1
- package/dist/dashboard/web/schedules.d.ts.map +1 -1
- package/dist/dashboard/web/schedules.js +1 -115
- package/dist/dashboard/web/schedules.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts +3 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -0
- package/dist/dashboard/web/sessions-page.js +28 -0
- package/dist/dashboard/web/sessions-page.js.map +1 -0
- package/dist/dashboard/web/sessions.d.ts +4 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +43 -10
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +3 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -0
- package/dist/dashboard/web/settings-page.js +387 -0
- package/dist/dashboard/web/settings-page.js.map +1 -0
- package/dist/dashboard/web/settings.d.ts +1 -1
- package/dist/dashboard/web/settings.d.ts.map +1 -1
- package/dist/dashboard/web/settings.js +1 -534
- package/dist/dashboard/web/settings.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +33 -0
- package/dist/dashboard/web/skills-page.d.ts.map +1 -0
- package/dist/dashboard/web/skills-page.js +515 -0
- package/dist/dashboard/web/skills-page.js.map +1 -0
- package/dist/dashboard/web/skills.d.ts +1 -1
- package/dist/dashboard/web/skills.d.ts.map +1 -1
- package/dist/dashboard/web/skills.js +1 -711
- package/dist/dashboard/web/skills.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +9 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +19 -2
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts +4 -0
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -0
- package/dist/dashboard/web/team-federation-page.js +47 -0
- package/dist/dashboard/web/team-federation-page.js.map +1 -0
- package/dist/dashboard/web/team-federation.d.ts +2 -2
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +104 -97
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/v3-page.d.ts +3 -0
- package/dist/dashboard/web/v3-page.d.ts.map +1 -0
- package/dist/dashboard/web/v3-page.js +27 -0
- package/dist/dashboard/web/v3-page.js.map +1 -0
- package/dist/dashboard/web/v3.d.ts +2 -1
- package/dist/dashboard/web/v3.d.ts.map +1 -1
- package/dist/dashboard/web/v3.js +18 -43
- package/dist/dashboard/web/v3.js.map +1 -1
- package/dist/dashboard/web/whiteboards-page.d.ts +3 -0
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -0
- package/dist/dashboard/web/whiteboards-page.js +203 -0
- package/dist/dashboard/web/whiteboards-page.js.map +1 -0
- package/dist/dashboard/web/whiteboards.d.ts +1 -1
- package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards.js +1 -275
- package/dist/dashboard/web/whiteboards.js.map +1 -1
- package/dist/dashboard-web/app.js +36 -2550
- package/dist/dashboard-web/chunks/bot-defaults-page-3EV7K6LJ.js +358 -0
- package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +1 -0
- package/dist/dashboard-web/chunks/chunk-76J7PNZI.js +1 -0
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +1 -0
- package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +54 -0
- package/dist/dashboard-web/chunks/chunk-JXLHRRJD.js +31 -0
- package/dist/dashboard-web/chunks/chunk-NASYW5FD.js +1 -0
- package/dist/dashboard-web/chunks/connectors-XPZKEHF6.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-C54PVKYP.js +207 -0
- package/dist/dashboard-web/chunks/insights-page-BBQYR7WY.js +309 -0
- package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-5PJCAMID.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-APUDLPVM.js +98 -0
- package/dist/dashboard-web/chunks/schedules-WG2UKHSO.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-F3U5NFPD.js +238 -0
- package/dist/dashboard-web/chunks/settings-page-OSBZNCXL.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-Y3VUAOYG.js +2 -0
- package/dist/dashboard-web/chunks/team-federation-page-CRH3WZPH.js +10 -0
- package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +149 -0
- package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +1 -0
- package/dist/dashboard-web/chunks/workflows-UB7OPYGI.js +184 -0
- package/dist/dashboard-web/index.html +1 -1
- package/dist/dashboard-web/style.css +82 -1
- package/dist/dashboard.js +5 -6
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1 -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 +1 -0
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +7 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +4 -1
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +16 -14
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import{b as ie}from"./chunk-NASYW5FD.js";import{a as ne}from"./chunk-76J7PNZI.js";import{m as e,n as r,p as vt,r as se,w as St}from"./chunk-JXLHRRJD.js";import{a as Oe,b as oe,c as le}from"./chunk-JTSE5VP6.js";import{c as Nt}from"./chunk-7SZRL6FY.js";var Mt=Nt(Oe(),1);var S={bots:[]},V=null,Gt=[{id:"claude-code",label:"Claude"},{id:"codex",label:"Codex"},{id:"traex",label:"traex"}],re=!1,$t="glm-5.1",jt=[],K=null;function Ot(d,u){return typeof d?.cliId=="string"&&d.cliId?d.cliId:u}var z=new Map;function ce(d){let u=null;for(let m of ne.sessions.values())m.larkAppId!==d||!m.cliId||(!u||Number(m.lastMessageAt??0)>Number(u.lastMessageAt??0))&&(u=m);return u?.cliId??""}async function de(){if(!re){re=!0;try{let d=await fetch("/api/cli-options"),u=await d.json().catch(()=>({}));d.ok&&Array.isArray(u?.options)&&(Gt=u.options.filter(m=>m&&typeof m.id=="string"&&typeof m.label=="string"),typeof u.ttadkModelDefault=="string"&&u.ttadkModelDefault.trim()&&($t=u.ttadkModelDefault.trim()),Array.isArray(u.ttadkModelSuggestions)&&(jt=u.ttadkModelSuggestions.filter(m=>typeof m=="string")))}catch{}}}function Ge(d,u){let m=typeof d?.agentSelectionKey=="string"&&d.agentSelectionKey?d.agentSelectionKey:"";return m||Ot(d,u)||"claude-code"}function Lt(d){return Gt.find(u=>u.id===d)}function je(d){return d?.gateway==="ttadk"&&d.acceptsModel!==!1?jt:[]}function Je(d,u){let m=Ge(d,u),j=Gt.map(H=>`<option value="${r(H.id)}" ${H.id===m?"selected":""}>${r(H.label)}\uFF08${r(H.id)}\uFF09</option>`).join(""),J=typeof d?.model=="string"?d.model:"",X=je(Lt(m)),at=Lt(m)?.gateway==="ttadk"&&Lt(m)?.acceptsModel===!1;return`<section class="bd-section">
|
|
2
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionAgent")}</h3>
|
|
3
|
+
<div class="bd-row">
|
|
4
|
+
<label>
|
|
5
|
+
<span>${e("botDefaults.agentCli")}</span>
|
|
6
|
+
<select data-input="agentCliId">${j}</select>
|
|
7
|
+
</label>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="bd-row">
|
|
10
|
+
<label>
|
|
11
|
+
<span>${e("botDefaults.agentModel")}</span>
|
|
12
|
+
<input type="text" data-input="agentModel" list="agent-model-suggestions-${r(d.larkAppId)}"
|
|
13
|
+
placeholder="${r(e("botDefaults.agentModelPlaceholder"))}"
|
|
14
|
+
value="${r(J)}" ${at?"disabled":""}>
|
|
15
|
+
<datalist id="agent-model-suggestions-${r(d.larkAppId)}">
|
|
16
|
+
${X.map(H=>`<option value="${r(H)}"></option>`).join("")}
|
|
17
|
+
</datalist>
|
|
18
|
+
</label>
|
|
19
|
+
<small class="bd-help">${e("botDefaults.agentHelp")}</small>
|
|
20
|
+
<div class="actions">
|
|
21
|
+
<button type="button" class="primary" data-action="save-agent">${e("botDefaults.agentSave")}</button>
|
|
22
|
+
<span class="oncall-status" data-agent-status></span>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</section>`}async function ue(){try{let d=await fetch("/api/bots"),u=await d.json().catch(()=>({}));if(!d.ok){V=u?.error?`HTTP ${d.status}: ${u.error}${u.path?` (${u.path})`:""}`:`HTTP ${d.status}`,S={bots:[]};return}if(!u||!Array.isArray(u.bots)){V="unexpected response shape (no `bots` array)",S={bots:[]};return}V=null,S=u}catch(d){V=d?.message??String(d),S={bots:[]}}}function pe(d){if(!d)return"\u2014";let u=new Date(d);return Number.isNaN(u.getTime())?"\u2014":u.toLocaleString()}function fe(d){let u=d.querySelector("#bd-list"),m=d.querySelector("#bd-roster"),j=d.querySelector("#bd-filters"),J=d.querySelector("#bd-refresh"),X=!1,at=!1;J.onclick=async()=>{J.disabled=!0;try{z.clear(),await Promise.all([ue(),de()]),U()}finally{X||(J.disabled=!1)}};let H=t=>{let a=t.target.closest(".toggle-tx small, small.bd-help");a&&(t.preventDefault(),a.classList.toggle("open"))};u.addEventListener("click",H),u.innerHTML=St(),(async()=>(await Promise.all([ue(),de()]),at=!0,U(),await se(),U()))();function be(){let a=(new FormData(j).get("q")??"").toLowerCase(),c=S.bots.filter(b=>!a||(b.botName??"").toLowerCase().includes(a)||(b.larkAppId??"").toLowerCase().includes(a));if(V){m.innerHTML="",u.innerHTML=`<p class="hint-warn">\u65E0\u6CD5\u52A0\u8F7D bot \u5217\u8868\uFF1A${r(V)}<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(c.length===0){m.innerHTML="",u.innerHTML=`<p class="empty">${e("botDefaults.empty")}</p>`;return}(!K||!c.some(b=>b.larkAppId===K))&&(K=c[0].larkAppId),m.innerHTML=c.map(me).join(""),m.querySelectorAll(".bd-roster-item").forEach(b=>{b.onclick=()=>{K=b.dataset.appid,U()}});let p=c.find(b=>b.larkAppId===K);u.innerHTML=ge(p),Ie()}function me(t){let a=t.botName??t.larkAppId,c=Ot(t,ce(t.larkAppId)),p=t.defaultOncall?.enabled?'<span class="bd-roster-flag">oncall</span>':"";return`<div class="bd-roster-item${t.larkAppId===K?" on":""}" data-appid="${r(t.larkAppId)}" role="button" tabindex="0">
|
|
26
|
+
${vt({name:a,larkAppId:t.larkAppId,size:"sm"})}
|
|
27
|
+
<div class="bd-roster-tx">
|
|
28
|
+
<b>${r(a)}</b>
|
|
29
|
+
<span>${r(c||t.larkAppId.slice(0,14))}</span>
|
|
30
|
+
</div>
|
|
31
|
+
${p}
|
|
32
|
+
</div>`}function ge(t){if(t.error)return`<article class="bd-card bd-profile" data-appid="${r(t.larkAppId)}">
|
|
33
|
+
<header class="bd-profile-head">
|
|
34
|
+
${vt({name:t.botName??t.larkAppId,larkAppId:t.larkAppId})}
|
|
35
|
+
<div class="bd-profile-id"><strong>${r(t.botName??t.larkAppId)}</strong>
|
|
36
|
+
<code>${r(t.larkAppId)}</code></div>
|
|
37
|
+
</header>
|
|
38
|
+
<p class="hint-warn-inline">\u67E5\u8BE2\u5931\u8D25\uFF1A${r(t.error)}</p>
|
|
39
|
+
</article>`;let a=t.defaultOncall??{enabled:!1,workingDir:"",since:0},c=a.enabled?"oncall":t.defaultWorkingDir?"default":"off",p=t.defaultWorkingDir||a.workingDir||"",b=t.botName??t.larkAppId,y=Ot(t,ce(t.larkAppId));return`<article class="bd-card bd-profile" data-appid="${r(t.larkAppId)}">
|
|
40
|
+
<header class="bd-profile-head">
|
|
41
|
+
${vt({name:b,larkAppId:t.larkAppId,dot:"ok"})}
|
|
42
|
+
<div class="bd-profile-id">
|
|
43
|
+
<strong>${r(b)}</strong>
|
|
44
|
+
${y?`<span class="mate-role">${r(y)}</span>`:""}
|
|
45
|
+
<code>${r(t.larkAppId)}</code>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="bd-profile-meta bd-meta">
|
|
48
|
+
<small class="bd-meta-ok">\u25CF ${e("botDefaults.metaOnline")}</small>
|
|
49
|
+
<small data-oncall-since>${e("botDefaults.lastEnabled")}: ${r(pe(a.since??0))}</small>
|
|
50
|
+
<small>${e("botDefaults.autobound",{count:t.autoboundChatCount??0})}</small>
|
|
51
|
+
</div>
|
|
52
|
+
</header>
|
|
53
|
+
<div class="bd-body bd-grid">
|
|
54
|
+
<section class="bd-tile">
|
|
55
|
+
${Je(t,y)}
|
|
56
|
+
<section class="bd-section">
|
|
57
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionWorkingDir")}</h3>
|
|
58
|
+
<div class="bd-row">
|
|
59
|
+
<label>
|
|
60
|
+
<span>${e("botDefaults.workingDirMode")}</span>
|
|
61
|
+
<select data-input="workingDirMode">
|
|
62
|
+
<option value="off" ${c==="off"?"selected":""}>${r(e("botDefaults.workingDirModeOff"))}</option>
|
|
63
|
+
<option value="default" ${c==="default"?"selected":""}>${r(e("botDefaults.workingDirModeDefault"))}</option>
|
|
64
|
+
<option value="oncall" ${c==="oncall"?"selected":""}>${r(e("botDefaults.workingDirModeOncall"))}</option>
|
|
65
|
+
</select>
|
|
66
|
+
</label>
|
|
67
|
+
<small class="bd-help">${e("botDefaults.workingDirModeHelp")}</small>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="bd-row" data-wd-dir-row ${c==="off"?"hidden":""}>
|
|
70
|
+
<label>
|
|
71
|
+
<span>${e("botDefaults.workingDirField")}</span>
|
|
72
|
+
<input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
|
|
73
|
+
value="${r(p)}">
|
|
74
|
+
</label>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="actions">
|
|
77
|
+
<button type="button" class="primary" data-action="save-working-dir">${e("botDefaults.save")}</button>
|
|
78
|
+
<span class="oncall-status" data-status></span>
|
|
79
|
+
</div>
|
|
80
|
+
${Te(t)}
|
|
81
|
+
</section>
|
|
82
|
+
${Ce(t)}
|
|
83
|
+
</section>
|
|
84
|
+
<section class="bd-tile">${ye(t)}</section>
|
|
85
|
+
<section class="bd-tile">${Le(t)}${Se(t)}${Me(t)}${De(t)}${ke(t)}${we(t)}</section>
|
|
86
|
+
<section class="bd-tile">${ve(t)}${$e(t)}${he(t)}</section>
|
|
87
|
+
<section class="bd-tile">${xe(t)}</section>
|
|
88
|
+
</div>
|
|
89
|
+
</article>`}function ye(t){let a=typeof t.teamRole=="string";return`<section class="bd-section">
|
|
90
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionRole")}</h3>
|
|
91
|
+
<p class="bd-section-note">${e("botDefaults.roleHelp")}</p>
|
|
92
|
+
<textarea data-input="teamRole" rows="6"
|
|
93
|
+
placeholder="${r(e("botDefaults.rolePlaceholder"))}"
|
|
94
|
+
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px"${a?"":" disabled"}>${a?r(t.teamRole):""}</textarea>
|
|
95
|
+
<div class="actions">
|
|
96
|
+
<button type="button" class="primary" data-action="save-role"${a?"":" disabled"}>${e("botDefaults.roleSave")}</button>
|
|
97
|
+
<button type="button" data-action="delete-role"${a?"":" disabled"}>${e("botDefaults.roleDelete")}</button>
|
|
98
|
+
<span class="oncall-status" data-role-status></span>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="bd-profile-roles" data-profile-roles>
|
|
101
|
+
<h4 class="bd-subsection-title">${e("botDefaults.profileRoles")}</h4>
|
|
102
|
+
<p class="bd-section-note">${e("botDefaults.profileRolesHelp")}</p>
|
|
103
|
+
<div class="bd-profile-role-list" data-profile-role-list>${Jt(t.larkAppId)}</div>
|
|
104
|
+
</div>
|
|
105
|
+
</section>`}function Jt(t){let a=z.get(t);return!a||a.loading?St():a.error?`<p class="hint-warn-inline">${r(e("botDefaults.profileRolesLoadFailed",{error:a.error}))}</p>`:a.items.length===0?`<p class="empty">${e("botDefaults.profileRolesEmpty")}</p>`:a.items.map(c=>`
|
|
106
|
+
<details class="bd-profile-role-entry" data-profile-id="${r(c.profileId)}">
|
|
107
|
+
<summary><code>${r(c.profileId)}</code></summary>
|
|
108
|
+
<div class="bd-profile-role-content" data-profile-role-body="${r(c.profileId)}">
|
|
109
|
+
${Ut(c)}
|
|
110
|
+
</div>
|
|
111
|
+
</details>
|
|
112
|
+
`).join("")}function Ut(t){return t.loading?St():t.error?`<p class="hint-warn-inline">${r(e("botDefaults.profileRoleDetailLoadFailed",{error:t.error}))}</p>`:t.loaded?`<pre>${r(t.content??"")}</pre>`:`<p class="empty">${e("botDefaults.profileRoleClickToLoad")}</p>`}function Wt(t){return t==null?e("botDefaults.brandStateDefault"):t.trim()===""?e("botDefaults.brandStateOff"):e("botDefaults.brandStateCustom")}function he(t){let a=t.brandLabel??null;return`<section class="bd-section">
|
|
113
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionBrand")}</h3>
|
|
114
|
+
<div class="bd-row bd-brand">
|
|
115
|
+
<label>
|
|
116
|
+
<span>${e("botDefaults.brandLabel")}</span>
|
|
117
|
+
<input type="text" data-input="brandLabel"
|
|
118
|
+
placeholder="${r(e("botDefaults.brandLabelPlaceholder"))}"
|
|
119
|
+
value="${r(a??"")}">
|
|
120
|
+
</label>
|
|
121
|
+
<small data-brand-state>${r(Wt(a))}</small>
|
|
122
|
+
<small class="bd-help">${e("botDefaults.brandLabelHelp")}</small>
|
|
123
|
+
<div class="actions">
|
|
124
|
+
<button type="button" class="primary" data-action="save-brand">${e("botDefaults.brandSave")}</button>
|
|
125
|
+
<button type="button" data-action="reset-brand">${e("botDefaults.brandReset")}</button>
|
|
126
|
+
<span class="oncall-status" data-brand-status></span>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</section>`}function ve(t){let a=t.disableStreamingCard===!0,c=t.silentTurnReactions===!0,p=t.writableTerminalLinkInCard===!0,b=t.privateCard===!0;return`<section class="bd-section">
|
|
130
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionCard")}</h3>
|
|
131
|
+
<label class="toggle-row">
|
|
132
|
+
<input type="checkbox" data-action="toggle-disable-streaming" ${a?"checked":""}>
|
|
133
|
+
<span class="switch" aria-hidden="true"></span>
|
|
134
|
+
<span class="toggle-tx"><strong>${e("botDefaults.disableStreaming")}</strong>
|
|
135
|
+
<small>${e("botDefaults.disableStreamingHelp")}</small></span>
|
|
136
|
+
</label>
|
|
137
|
+
<label class="toggle-row">
|
|
138
|
+
<input type="checkbox" data-action="toggle-silent-reactions" ${c?"checked":""} ${a?"":"disabled"}>
|
|
139
|
+
<span class="switch" aria-hidden="true"></span>
|
|
140
|
+
<span class="toggle-tx"><strong>${e("botDefaults.silentTurnReactions")}</strong>
|
|
141
|
+
<small>${e("botDefaults.silentTurnReactionsHelp")}</small></span>
|
|
142
|
+
</label>
|
|
143
|
+
<label class="toggle-row">
|
|
144
|
+
<input type="checkbox" data-action="toggle-writable-link" ${p?"checked":""} ${a?"disabled":""}>
|
|
145
|
+
<span class="switch" aria-hidden="true"></span>
|
|
146
|
+
<span class="toggle-tx"><strong>${e("botDefaults.writableLink")}</strong>
|
|
147
|
+
<small>${e("botDefaults.writableLinkHelp")}</small></span>
|
|
148
|
+
</label>
|
|
149
|
+
<label class="toggle-row">
|
|
150
|
+
<input type="checkbox" data-action="toggle-private-card" ${b?"checked":""}>
|
|
151
|
+
<span class="switch" aria-hidden="true"></span>
|
|
152
|
+
<span class="toggle-tx"><strong>${e("botDefaults.privateCard")}</strong>
|
|
153
|
+
<small>${e("botDefaults.privateCardHelp")}</small></span>
|
|
154
|
+
</label>
|
|
155
|
+
<div class="actions">
|
|
156
|
+
<small data-card-pref-moot class="hint-warn-inline" ${a?"":"hidden"}>${e("botDefaults.writableLinkMoot")}</small>
|
|
157
|
+
<span class="oncall-status" data-card-pref-status></span>
|
|
158
|
+
</div>
|
|
159
|
+
</section>`}function Se(t){let a=t.botToBotSameDir!==!1;return`<section class="bd-section">
|
|
160
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionCrossBot")}</h3>
|
|
161
|
+
<label class="toggle-row">
|
|
162
|
+
<input type="checkbox" data-action="toggle-cross-bot-samedir" ${a?"checked":""}>
|
|
163
|
+
<span class="switch" aria-hidden="true"></span>
|
|
164
|
+
<span class="toggle-tx"><strong>${e("botDefaults.botToBotSameDir")}</strong>
|
|
165
|
+
<small>${e("botDefaults.botToBotSameDirHelp")}</small></span>
|
|
166
|
+
</label>
|
|
167
|
+
<div class="actions"><span class="oncall-status" data-crossbot-status></span></div>
|
|
168
|
+
</section>`}function $e(t){let a=t.summaryRange??{limit:50,sinceHours:24},c=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">
|
|
169
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionSummaryTrigger")}</h3>
|
|
170
|
+
<div class="bd-row bd-summary-limits">
|
|
171
|
+
<label>
|
|
172
|
+
<span>${e("botDefaults.summaryLimit")}</span>
|
|
173
|
+
<input type="number" min="0" step="1" data-input="summaryLimit" value="${c}">
|
|
174
|
+
</label>
|
|
175
|
+
<label>
|
|
176
|
+
<span>${e("botDefaults.summarySinceHours")}</span>
|
|
177
|
+
<input type="number" min="0" step="1" data-input="summarySinceHours" value="${p}">
|
|
178
|
+
</label>
|
|
179
|
+
</div>
|
|
180
|
+
<small class="bd-help">${e("botDefaults.summaryLimitHelp")}</small>
|
|
181
|
+
<div class="actions">
|
|
182
|
+
<button type="button" class="primary" data-action="save-summary-trigger">${e("botDefaults.summarySave")}</button>
|
|
183
|
+
<span class="oncall-status" data-summary-trigger-status></span>
|
|
184
|
+
</div>
|
|
185
|
+
</section>`}function Le(t){let a=t.p2pMode==="chat"?"chat":"thread",c=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",b=t.docSubscribeDefaultMode==="all"?"all":"mention-only",y=(g,E)=>`<option value="${g}" ${c===g?"selected":""}>${r(E)}</option>`,h=(g,E)=>`<option value="${g}" ${p===g?"selected":""}>${r(E)}</option>`,L=(g,E)=>`<option value="${g}" ${b===g?"selected":""}>${r(E)}</option>`;return`<section class="bd-section">
|
|
186
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionSessionMode")}</h3>
|
|
187
|
+
<div class="bd-row">
|
|
188
|
+
<label>
|
|
189
|
+
<span>${e("botDefaults.p2pMode")}</span>
|
|
190
|
+
<select data-input="p2pMode">
|
|
191
|
+
<option value="thread" ${a==="chat"?"":"selected"}>${r(e("botDefaults.p2pThread"))}</option>
|
|
192
|
+
<option value="chat" ${a==="chat"?"selected":""}>${r(e("botDefaults.p2pChat"))}</option>
|
|
193
|
+
</select>
|
|
194
|
+
</label>
|
|
195
|
+
<small class="bd-help">${e("botDefaults.p2pHelp")}</small>
|
|
196
|
+
<div class="actions">
|
|
197
|
+
<span class="oncall-status" data-p2p-status></span>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
<div class="bd-row">
|
|
201
|
+
<label>
|
|
202
|
+
<span>${e("botDefaults.regularGroupMode")}</span>
|
|
203
|
+
<select data-input="regularGroupMode">
|
|
204
|
+
${y("chat",e("botDefaults.regularGroupModeChat"))}
|
|
205
|
+
${y("chat-topic",e("botDefaults.regularGroupModeChatTopic"))}
|
|
206
|
+
${y("new-topic",e("botDefaults.regularGroupModeNewTopic"))}
|
|
207
|
+
${y("shared",e("botDefaults.regularGroupModeShared"))}
|
|
208
|
+
</select>
|
|
209
|
+
</label>
|
|
210
|
+
<small class="bd-help">${e("botDefaults.regularGroupModeHelp")}</small>
|
|
211
|
+
<div class="actions">
|
|
212
|
+
<span class="oncall-status" data-regular-group-status></span>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="bd-row">
|
|
216
|
+
<label>
|
|
217
|
+
<span>${e("botDefaults.mentionMode")}</span>
|
|
218
|
+
<select data-input="regularGroupMentionMode">
|
|
219
|
+
${h("always",e("botDefaults.mentionModeAlways"))}
|
|
220
|
+
${h("topic",e("botDefaults.mentionModeTopic"))}
|
|
221
|
+
${h("never",e("botDefaults.mentionModeNever"))}
|
|
222
|
+
${h("ambient",e("botDefaults.mentionModeAmbient"))}
|
|
223
|
+
</select>
|
|
224
|
+
</label>
|
|
225
|
+
<small class="bd-help">${e("botDefaults.mentionModeHelp")}</small>
|
|
226
|
+
<div class="actions">
|
|
227
|
+
<span class="oncall-status" data-mention-mode-status></span>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="bd-row">
|
|
231
|
+
<label>
|
|
232
|
+
<span>${e("botDefaults.docSubscribeMode")}</span>
|
|
233
|
+
<select data-input="docSubscribeDefaultMode">
|
|
234
|
+
${L("mention-only",e("botDefaults.docSubscribeModeMention"))}
|
|
235
|
+
${L("all",e("botDefaults.docSubscribeModeAll"))}
|
|
236
|
+
</select>
|
|
237
|
+
</label>
|
|
238
|
+
<small class="bd-help">${e("botDefaults.docSubscribeModeHelp")}</small>
|
|
239
|
+
<div class="actions">
|
|
240
|
+
<span class="oncall-status" data-doc-subscribe-mode-status></span>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
</section>`}function Qt(t){return t==null?e("botDefaults.maxLiveWorkersStateDefault"):e("botDefaults.maxLiveWorkersStateOn",{count:t})}function Me(t){let a=typeof t.maxLiveWorkers=="number"?t.maxLiveWorkers:null;return`<div class="bd-subsection">
|
|
244
|
+
<h4 class="bd-subsection-title">${e("botDefaults.sectionSessionCap")}</h4>
|
|
245
|
+
<div class="bd-row bd-quota">
|
|
246
|
+
<label>
|
|
247
|
+
<span>${e("botDefaults.maxLiveWorkers")}</span>
|
|
248
|
+
<input type="number" min="1" step="1" data-input="maxLiveWorkers"
|
|
249
|
+
placeholder="${r(e("botDefaults.maxLiveWorkersPlaceholder"))}"
|
|
250
|
+
value="${a??""}">
|
|
251
|
+
</label>
|
|
252
|
+
<small data-session-cap-state>${r(Qt(a))}</small>
|
|
253
|
+
<small class="bd-help">${e("botDefaults.maxLiveWorkersHelp")}</small>
|
|
254
|
+
<div class="actions">
|
|
255
|
+
<button type="button" class="primary" data-action="save-session-cap">${e("botDefaults.maxLiveWorkersSave")}</button>
|
|
256
|
+
<button type="button" data-action="off-session-cap">${e("botDefaults.maxLiveWorkersOff")}</button>
|
|
257
|
+
<span class="oncall-status" data-session-cap-status></span>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
</div>`}function De(t){let a=typeof t.startupCommands=="string"?t.startupCommands:"";return`<div class="bd-subsection">
|
|
261
|
+
<h4 class="bd-subsection-title">${e("botDefaults.sectionStartupCommands")}</h4>
|
|
262
|
+
<p class="bd-section-note">${e("botDefaults.startupCommandsHelp")}</p>
|
|
263
|
+
<textarea data-input="startupCommands" rows="3"
|
|
264
|
+
placeholder="${r(e("botDefaults.startupCommandsPlaceholder"))}"
|
|
265
|
+
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${r(a)}</textarea>
|
|
266
|
+
<div class="actions">
|
|
267
|
+
<button type="button" class="primary" data-action="save-startup-commands">${e("botDefaults.startupCommandsSave")}</button>
|
|
268
|
+
<span class="oncall-status" data-startup-commands-status></span>
|
|
269
|
+
</div>
|
|
270
|
+
</div>`}function ke(t){let a=typeof t.launchShell=="string"?t.launchShell:"";return`<div class="bd-subsection">
|
|
271
|
+
<h4 class="bd-subsection-title">${e("botDefaults.sectionLaunchShell")}</h4>
|
|
272
|
+
<p class="bd-section-note">${e("botDefaults.launchShellHelp")}</p>
|
|
273
|
+
<input type="text" data-input="launchShell"
|
|
274
|
+
placeholder="${r(e("botDefaults.launchShellPlaceholder"))}"
|
|
275
|
+
value="${r(a)}"
|
|
276
|
+
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">
|
|
277
|
+
<div class="actions">
|
|
278
|
+
<button type="button" class="primary" data-action="save-launch-shell">${e("botDefaults.launchShellSave")}</button>
|
|
279
|
+
<span class="oncall-status" data-launch-shell-status></span>
|
|
280
|
+
</div>
|
|
281
|
+
</div>`}function we(t){let a=typeof t.env=="string"?t.env:"";return`<div class="bd-subsection">
|
|
282
|
+
<h4 class="bd-subsection-title">${e("botDefaults.sectionEnv")}</h4>
|
|
283
|
+
<p class="bd-section-note">${e("botDefaults.envHelp")}</p>
|
|
284
|
+
<textarea data-input="env" rows="5"
|
|
285
|
+
placeholder="${r(e("botDefaults.envPlaceholder"))}"
|
|
286
|
+
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${r(a)}</textarea>
|
|
287
|
+
<div class="actions">
|
|
288
|
+
<button type="button" class="primary" data-action="save-env">${e("botDefaults.envSave")}</button>
|
|
289
|
+
<span class="oncall-status" data-env-status></span>
|
|
290
|
+
</div>
|
|
291
|
+
</div>`}function Ce(t){let a=t.sandbox===!0;return`<section class="bd-section">
|
|
292
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionSandbox")}</h3>
|
|
293
|
+
<label class="toggle-row">
|
|
294
|
+
<input type="checkbox" data-action="toggle-sandbox" ${a?"checked":""}>
|
|
295
|
+
<span class="switch" aria-hidden="true"></span>
|
|
296
|
+
<span class="toggle-tx"><strong>${e("botDefaults.sandboxToggle")}</strong>
|
|
297
|
+
<small>${e("botDefaults.sandboxHelp")}</small></span>
|
|
298
|
+
</label>
|
|
299
|
+
<div class="actions">
|
|
300
|
+
<span class="oncall-status" data-sandbox-status></span>
|
|
301
|
+
</div>
|
|
302
|
+
</section>`}function Ft(t){return t==null?e("botDefaults.quotaStateOff"):e("botDefaults.quotaStateOn",{count:t})}function xe(t){let a=t.restrictGrantCommands===!0,c=t.autoGrantRequestCards!==!1,p=typeof t.messageQuotaDefaultLimit=="number"?t.messageQuotaDefaultLimit:null;return`<section class="bd-section">
|
|
303
|
+
<h3 class="bd-section-title">${e("botDefaults.sectionGrant")}</h3>
|
|
304
|
+
<label class="toggle-row">
|
|
305
|
+
<input type="checkbox" data-action="toggle-auto-grant-card" ${c?"checked":""}>
|
|
306
|
+
<span class="switch" aria-hidden="true"></span>
|
|
307
|
+
<span class="toggle-tx"><strong>${e("botDefaults.autoGrantCard")}</strong>
|
|
308
|
+
<small>${e("botDefaults.autoGrantCardHelp")}</small></span>
|
|
309
|
+
</label>
|
|
310
|
+
<label class="toggle-row">
|
|
311
|
+
<input type="checkbox" data-action="toggle-restrict-grant" ${a?"checked":""}>
|
|
312
|
+
<span class="switch" aria-hidden="true"></span>
|
|
313
|
+
<span class="toggle-tx"><strong>${e("botDefaults.restrictGrant")}</strong>
|
|
314
|
+
<small>${e("botDefaults.restrictGrantHelp")}</small></span>
|
|
315
|
+
</label>
|
|
316
|
+
<div class="bd-row bd-quota">
|
|
317
|
+
<label>
|
|
318
|
+
<span>${e("botDefaults.quotaDefault")}</span>
|
|
319
|
+
<input type="number" min="1" step="1" data-input="quotaLimit"
|
|
320
|
+
placeholder="${r(e("botDefaults.quotaPlaceholder"))}"
|
|
321
|
+
value="${p??""}">
|
|
322
|
+
</label>
|
|
323
|
+
<small data-quota-state>${r(Ft(p))}</small>
|
|
324
|
+
<small class="bd-help">${e("botDefaults.quotaHelp")}</small>
|
|
325
|
+
<div class="actions">
|
|
326
|
+
<button type="button" class="primary" data-action="save-quota">${e("botDefaults.quotaSave")}</button>
|
|
327
|
+
<button type="button" data-action="off-quota">${e("botDefaults.quotaOff")}</button>
|
|
328
|
+
<span class="oncall-status" data-grant-status></span>
|
|
329
|
+
</div>
|
|
330
|
+
</div>
|
|
331
|
+
</section>`}function Te(t){let a=t.autoStartOnGroupJoin===!0,c=t.autoStartOnNewTopic===!0,p=typeof t.autoStartOnGroupJoinPrompt=="string"?t.autoStartOnGroupJoinPrompt:"";return`<div class="bd-subsection">
|
|
332
|
+
<h4 class="bd-subsection-title">${e("botDefaults.sectionAutoStart")}</h4>
|
|
333
|
+
<label class="toggle-row">
|
|
334
|
+
<input type="checkbox" data-action="toggle-auto-join" ${a?"checked":""}>
|
|
335
|
+
<span class="switch" aria-hidden="true"></span>
|
|
336
|
+
<span class="toggle-tx"><strong>${e("botDefaults.autoStartJoin")}</strong>
|
|
337
|
+
<small>${e("botDefaults.autoStartJoinHelp")}</small></span>
|
|
338
|
+
</label>
|
|
339
|
+
<div class="bd-row">
|
|
340
|
+
<label>
|
|
341
|
+
<span>${e("botDefaults.autoStartJoinPrompt")}</span>
|
|
342
|
+
<textarea data-input="autoJoinPrompt" rows="3"
|
|
343
|
+
placeholder="${r(e("botDefaults.autoStartJoinPromptPlaceholder"))}">${r(p)}</textarea>
|
|
344
|
+
</label>
|
|
345
|
+
<div class="actions">
|
|
346
|
+
<button type="button" class="primary" data-action="save-auto-join-prompt">${e("botDefaults.autoStartJoinPromptSave")}</button>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
<label class="toggle-row">
|
|
350
|
+
<input type="checkbox" data-action="toggle-auto-topic" ${c?"checked":""}>
|
|
351
|
+
<span class="switch" aria-hidden="true"></span>
|
|
352
|
+
<span class="toggle-tx"><strong>${e("botDefaults.autoStartTopic")}</strong>
|
|
353
|
+
<small>${e("botDefaults.autoStartTopicHelp")}</small></span>
|
|
354
|
+
</label>
|
|
355
|
+
<div class="actions">
|
|
356
|
+
<span class="oncall-status" data-auto-start-status></span>
|
|
357
|
+
</div>
|
|
358
|
+
</div>`}function Kt(t){return u.querySelector(`.bd-card[data-appid="${CSS.escape(t)}"]`)}function Dt(t,a){let c=t?.querySelector("[data-profile-role-list]");c&&(c.innerHTML=Jt(a),He(t,a))}async function Ee(t,a){let c=z.get(t);if(c?.loaded||c?.loading){Dt(a,t);return}c={loaded:!1,loading:!0,items:[]},z.set(t,c),Dt(a,t);try{let p=await fetch("/api/role-profiles"),b=await p.json().catch(()=>({}));if(!p.ok)throw new Error(b?.error??String(p.status));let y=Array.isArray(b.profiles)?b.profiles:[];c.items=y.filter(h=>(h.botEntries??[]).some(L=>L?.larkAppId===t&&L?.hasEntry)).map(h=>({profileId:String(h.profileId)})),c.loaded=!0}catch(p){c.error=p?.message??String(p),c.loaded=!0}finally{c.loading=!1,Dt(Kt(t),t)}}function He(t,a){t.querySelectorAll("details.bd-profile-role-entry[data-profile-id]").forEach(c=>{c.addEventListener("toggle",()=>{if(!c.open)return;let p=c.dataset.profileId;p&&qe(a,p)})})}async function qe(t,a){let p=z.get(t)?.items.find(b=>b.profileId===a);if(!(!p||p.loaded||p.loading)){p.loading=!0,zt(t,a);try{let b=await fetch(`/api/role-profiles/${encodeURIComponent(a)}/${encodeURIComponent(t)}`),y=await b.json().catch(()=>({}));if(!b.ok)throw new Error(y?.error??String(b.status));p.content=y?.hasEntry?String(y.content??""):"",p.loaded=!0}catch(b){p.error=b?.message??String(b)}finally{p.loading=!1,zt(t,a)}}}function zt(t,a){let p=z.get(t)?.items.find(y=>y.profileId===a);if(!p)return;let b=Kt(t)?.querySelector(`[data-profile-role-body="${CSS.escape(a)}"]`);b&&(b.innerHTML=Ut(p))}function Ie(){u.querySelectorAll(".bd-card").forEach(t=>{let a=t.dataset.appid;Ee(a,t);let c=t.querySelector("select[data-input=workingDirMode]"),p=t.querySelector("input[data-input=workingDir]"),b=t.querySelector("[data-wd-dir-row]"),y=t.querySelector("button[data-action=save-working-dir]"),h=t.querySelector("[data-status]");if(!c||!p||!y||!h)return;let L=t.querySelector("select[data-input=agentCliId]"),g=t.querySelector("input[data-input=agentModel]"),E=t.querySelector("button[data-action=save-agent]"),q=t.querySelector("[data-agent-status]");function Vt(){if(!L||!g)return;let n=t.querySelector(`#agent-model-suggestions-${CSS.escape(a)}`),o=Lt(L.value),s=o?.gateway==="ttadk",i=s&&o.acceptsModel!==!1;if(s&&!i){n&&(n.innerHTML=""),g.value="",g.disabled=!0,g.placeholder=e("botOnboarding.modelTtadkCocoPlaceholder");return}g.disabled=!1,i?(n&&(n.innerHTML=jt.map(l=>`<option value="${r(l)}"></option>`).join("")),g.placeholder=e("botOnboarding.modelTtadkPlaceholder").replace("{model}",$t),g.value.trim()||(g.value=$t)):(n&&(n.innerHTML=""),g.placeholder=e("botDefaults.agentModelPlaceholder"),g.value.trim()===$t&&(g.value=""))}L&&g&&E&&q&&(L.addEventListener("change",Vt),E.addEventListener("click",async()=>{q.textContent="",q.className="oncall-status",E.disabled=!0,L.disabled=!0,g.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/agent`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({cliId:L.value,model:g.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){q.textContent=`\u2713 ${e("botDefaults.agentSaved")}`,q.classList.add("hint-ok");let s=S.bots.find(i=>i.larkAppId===a);s&&(s.cliId=o.cliId,s.wrapperCli=o.wrapperCli??null,s.model=o.model??"",s.agentSelectionKey=o.selectionKey??L.value)}else q.textContent=`\u2717 ${o.error??n.status}`,q.classList.add("hint-warn-inline")}catch(n){q.textContent=`\u2717 ${n?.message??n}`,q.classList.add("hint-warn-inline")}finally{E.disabled=!1,L.disabled=!1,g.disabled=!1,Vt()}})),c.addEventListener("change",()=>{let n=c.value==="off";b&&(b.hidden=n),n||p.focus()}),y.addEventListener("click",async()=>{h.textContent="",h.className="oncall-status";let n=c.value,o=p.value.trim();if(n!=="off"&&!o){h.textContent=e("botDefaults.required"),h.classList.add("hint-warn-inline");return}y.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/working-dir-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({mode:n,workingDir:o})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){let l=i.resolvedPath?` \u2192 ${i.resolvedPath}`:"";h.textContent=`\u2713 ${e("botDefaults.workingDirSaved")}${l}`,h.classList.add("hint-ok");let f=S.bots.find(T=>T.larkAppId===a);f&&(i.defaultOncall&&(f.defaultOncall=i.defaultOncall),f.defaultWorkingDir=i.defaultWorkingDir??null);let v=t.querySelector("[data-oncall-since]");v&&i.defaultOncall?.since!=null&&(v.textContent=`${e("botDefaults.lastEnabled")}: ${pe(i.defaultOncall.since)}`)}else h.textContent=`\u2717 ${i.error??s.status}`,h.classList.add("hint-warn-inline")}catch(s){h.textContent=`\u2717 ${s?.message??s}`,h.classList.add("hint-warn-inline")}finally{y.disabled=!1}});let nt=t.querySelector("input[data-input=brandLabel]"),kt=t.querySelector("button[data-action=save-brand]"),wt=t.querySelector("button[data-action=reset-brand]"),I=t.querySelector("[data-brand-status]"),Xt=t.querySelector("[data-brand-state]");async function Yt(n,o){if(I){I.textContent="",I.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/brand-label`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({brandLabel:n})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){let l=i.brandLabel??null;I.textContent="\u2713",I.classList.add("hint-ok"),nt&&(nt.value=l??""),Xt&&(Xt.textContent=Wt(l));let f=S.bots.find(v=>v.larkAppId===a);f&&(f.brandLabel=l)}else I.textContent=`\u2717 ${i.error??s.status}`,I.classList.add("hint-warn-inline")}catch(s){I.textContent=`\u2717 ${s?.message??s}`,I.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}nt&&kt&&kt.addEventListener("click",()=>Yt(nt.value,kt)),wt&&wt.addEventListener("click",()=>Yt(null,wt));let W=t.querySelector("input[data-action=toggle-disable-streaming]"),N=t.querySelector("input[data-action=toggle-silent-reactions]"),O=t.querySelector("input[data-action=toggle-writable-link]"),st=t.querySelector("input[data-action=toggle-private-card]"),Re=t.querySelector("[data-card-pref-status]"),Zt=t.querySelector("[data-card-pref-moot]");async function C(n,o,s=Re){if(s){s.textContent="",s.className="oncall-status",o.disabled=!0;try{let i=await fetch(`/api/bots/${encodeURIComponent(a)}/card-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),l=await i.json().catch(()=>({}));if(i.ok&&l.ok){s.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,s.classList.add("hint-ok");let f=S.bots.find(v=>v.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 s.textContent=`\u2717 ${l.error??i.status}`,s.classList.add("hint-warn-inline")}catch(i){s.textContent=`\u2717 ${i?.message??i}`,s.classList.add("hint-warn-inline")}finally{o===O?o.disabled=!!W?.checked:o===N?o.disabled=!W?.checked:o.disabled=!1}}}W&&W.addEventListener("change",()=>{let n=W.checked;O&&(O.disabled=n),N&&(N.disabled=!n),Zt&&(Zt.hidden=!n),C({disableStreamingCard:n},W)}),N&&N.addEventListener("change",()=>{C({silentTurnReactions:N.checked},N)}),O&&O.addEventListener("change",()=>{C({writableTerminalLinkInCard:O.checked},O)}),st&&st.addEventListener("change",()=>{C({privateCard:st.checked},st)});let ot=t.querySelector("input[data-action=toggle-cross-bot-samedir]"),Pe=t.querySelector("[data-crossbot-status]");ot&&ot.addEventListener("change",()=>{C({botToBotSameDir:ot.checked},ot,Pe)});let Ct=t.querySelector("input[data-input=summaryLimit]"),xt=t.querySelector("input[data-input=summarySinceHours]"),lt=t.querySelector("button[data-action=save-summary-trigger]"),x=t.querySelector("[data-summary-trigger-status]");function _t(n,o){let s=n.value.trim();return s===""?o:/^(0|[1-9]\d*)$/.test(s)?Number(s):null}Ct&&xt&<&<.addEventListener("click",async()=>{if(!x)return;x.textContent="",x.className="oncall-status";let n=_t(Ct,50),o=_t(xt,24);if(n==null||o==null){x.textContent=`\u2717 ${e("botDefaults.summaryNumberInvalid")}`,x.classList.add("hint-warn-inline");return}lt.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/summary-range`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({limit:n,sinceHours:o})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){x.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,x.classList.add("hint-ok");let l=i.summaryRange??{limit:n,sinceHours:o};Ct.value=String(Number.isInteger(l.limit)&&l.limit>=0?l.limit:n),xt.value=String(Number.isInteger(l.sinceHours)&&l.sinceHours>=0?l.sinceHours:o);let f=S.bots.find(v=>v.larkAppId===a);f&&(f.summaryRange=l)}else x.textContent=`\u2717 ${i.error??s.status}`,x.classList.add("hint-warn-inline")}catch(s){x.textContent=`\u2717 ${s?.message??s}`,x.classList.add("hint-warn-inline")}finally{lt.disabled=!1}});let G=t.querySelector("input[data-action=toggle-sandbox]"),D=t.querySelector("[data-sandbox-status]");G&&G.addEventListener("change",async()=>{let n=G.checked;D&&(D.textContent="",D.className="oncall-status"),G.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/sandbox`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){D&&(D.textContent=`\u2713 ${e("botDefaults.sandboxSaved")}`,D.classList.add("hint-ok"));let i=S.bots.find(l=>l.larkAppId===a);i&&(i.sandbox=s.sandbox===!0)}else D&&(D.textContent=`\u2717 ${s.error??o.status}`,D.classList.add("hint-warn-inline")),G.checked=!n}catch(o){D&&(D.textContent=`\u2717 ${o?.message??o}`,D.classList.add("hint-warn-inline")),G.checked=!n}finally{G.disabled=!1}});let it=t.querySelector("input[data-action=toggle-auto-join]"),rt=t.querySelector("input[data-action=toggle-auto-topic]"),te=t.querySelector("textarea[data-input=autoJoinPrompt]"),Tt=t.querySelector("button[data-action=save-auto-join-prompt]"),Et=t.querySelector("[data-auto-start-status]");it&&it.addEventListener("change",()=>{C({autoStartOnGroupJoin:it.checked},it,Et)}),rt&&rt.addEventListener("change",()=>{C({autoStartOnNewTopic:rt.checked},rt,Et)}),te&&Tt&&Tt.addEventListener("click",()=>{C({autoStartOnGroupJoinPrompt:te.value},Tt,Et)});let Y=t.querySelector("select[data-input=p2pMode]"),R=t.querySelector("[data-p2p-status]");Y&&R&&Y.addEventListener("change",async()=>{let n=Y.value==="chat"?"chat":"thread";R.textContent="",R.className="oncall-status",Y.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/p2p-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({p2pMode:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){R.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,R.classList.add("hint-ok");let i=S.bots.find(l=>l.larkAppId===a);i&&(i.p2pMode=s.p2pMode==="chat"?"chat":"thread")}else R.textContent=`\u2717 ${s.error??o.status}`,R.classList.add("hint-warn-inline")}catch(o){R.textContent=`\u2717 ${o?.message??o}`,R.classList.add("hint-warn-inline")}finally{Y.disabled=!1}});let ct=t.querySelector("select[data-input=regularGroupMode]"),Ae=t.querySelector("[data-regular-group-status]");ct&&ct.addEventListener("change",()=>{C({regularGroupReplyMode:ct.value},ct,Ae)});let dt=t.querySelector("select[data-input=regularGroupMentionMode]"),Be=t.querySelector("[data-mention-mode-status]");dt&&dt.addEventListener("change",()=>{C({regularGroupMentionMode:dt.value},dt,Be)});let ut=t.querySelector("select[data-input=docSubscribeDefaultMode]"),Ne=t.querySelector("[data-doc-subscribe-mode-status]");ut&&ut.addEventListener("change",()=>{C({docSubscribeDefaultMode:ut.value},ut,Ne)});let Ht=t.querySelector("textarea[data-input=teamRole]"),Z=t.querySelector("button[data-action=save-role]"),_=t.querySelector("button[data-action=delete-role]"),M=t.querySelector("[data-role-status]");if(Ht&&Z&&_&&M){let s=function(l){let f=u.querySelector(`.bd-card[data-appid="${CSS.escape(a)}"]`);if(!f)return;let v=f.querySelector("textarea[data-input=teamRole]"),T=f.querySelector("button[data-action=save-role]"),et=f.querySelector("button[data-action=delete-role]");v&&(v.value=l,v.disabled=!1),T&&(T.disabled=!1),et&&(et.disabled=!1)};var We=s;let n=`/api/team/local-bots/${encodeURIComponent(a)}/role`,o=S.bots.find(l=>l.larkAppId===a);o&&typeof o.teamRole!="string"&&!o.teamRoleLoading&&(o.teamRoleLoading=!0,(async()=>{try{let l=await fetch(n),f=await l.json().catch(()=>({}));l.ok&&f.ok?(o.teamRole=f.role??"",s(o.teamRole)):(M.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${f.error??l.status}`,M.classList.add("hint-warn-inline"))}catch(l){M.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${l?.message??l}`,M.classList.add("hint-warn-inline")}finally{o.teamRoleLoading=!1}})());async function i(l,f,v){if(M&&!(!o||typeof o.teamRole!="string")){M.textContent="",M.className="oncall-status",Z.disabled=!0,_.disabled=!0;try{let T=await fetch(n,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({role:l})}),et=await T.json().catch(()=>({}));T.ok&&et.ok?(o&&(o.teamRole=l.trim()),M.textContent=`\u2713 ${v?e("botDefaults.roleDeleted"):e("botDefaults.roleSaved")}`,M.classList.add("hint-ok")):(M.textContent=`\u2717 ${et.error??T.status}`,M.classList.add("hint-warn-inline"))}catch(T){M.textContent=`\u2717 ${T?.message??T}`,M.classList.add("hint-warn-inline")}finally{Z.disabled=!1,_.disabled=!1}}}Z.addEventListener("click",()=>i(Ht.value,Z,!1)),_.addEventListener("click",()=>{Ht.value="",i("",_,!0)})}let pt=t.querySelector("input[data-action=toggle-auto-grant-card]"),ft=t.querySelector("input[data-action=toggle-restrict-grant]"),Q=t.querySelector("input[data-input=quotaLimit]"),bt=t.querySelector("button[data-action=save-quota]"),qt=t.querySelector("button[data-action=off-quota]"),k=t.querySelector("[data-grant-status]"),ee=t.querySelector("[data-quota-state]");async function tt(n,o){if(k){k.textContent="",k.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/grant-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){k.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,k.classList.add("hint-ok");let l=typeof i.messageQuotaDefaultLimit=="number"?i.messageQuotaDefaultLimit:null,f=S.bots.find(v=>v.larkAppId===a);f&&(f.autoGrantRequestCards=i.autoGrantRequestCards!==!1,f.restrictGrantCommands=i.restrictGrantCommands===!0,f.messageQuotaDefaultLimit=l),ee&&(ee.textContent=Ft(l)),Q&&"messageQuotaDefaultLimit"in n&&(Q.value=l==null?"":String(l))}else k.textContent=`\u2717 ${i.error??s.status}`,k.classList.add("hint-warn-inline")}catch(s){k.textContent=`\u2717 ${s?.message??s}`,k.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}pt&&pt.addEventListener("change",()=>{tt({autoGrantRequestCards:pt.checked},pt)}),ft&&ft.addEventListener("change",()=>{tt({restrictGrantCommands:ft.checked},ft)}),Q&&bt&&bt.addEventListener("click",()=>{let n=Q.value.trim();if(n===""){tt({messageQuotaDefaultLimit:null},bt);return}if(!/^[1-9]\d*$/.test(n)){k&&(k.textContent=`\u2717 ${e("botDefaults.quotaInvalid")}`,k.className="oncall-status hint-warn-inline");return}tt({messageQuotaDefaultLimit:Number(n)},bt)}),Q&&qt&&qt.addEventListener("click",()=>{Q.value="",tt({messageQuotaDefaultLimit:null},qt)});let F=t.querySelector("input[data-input=maxLiveWorkers]"),mt=t.querySelector("button[data-action=save-session-cap]"),It=t.querySelector("button[data-action=off-session-cap]"),w=t.querySelector("[data-session-cap-status]"),ae=t.querySelector("[data-session-cap-state]");async function Rt(n,o){if(w){w.textContent="",w.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/max-live-workers`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({maxLiveWorkers:n})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){w.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,w.classList.add("hint-ok");let l=typeof i.maxLiveWorkers=="number"?i.maxLiveWorkers:null,f=S.bots.find(v=>v.larkAppId===a);f&&(f.maxLiveWorkers=l),ae&&(ae.textContent=Qt(l)),F&&(F.value=l==null?"":String(l))}else w.textContent=`\u2717 ${i.error??s.status}`,w.classList.add("hint-warn-inline")}catch(s){w.textContent=`\u2717 ${s?.message??s}`,w.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}F&&mt&&mt.addEventListener("click",()=>{let n=F.value.trim();if(n===""){Rt(null,mt);return}if(!/^[1-9]\d*$/.test(n)){w&&(w.textContent=`\u2717 ${e("botDefaults.maxLiveWorkersInvalid")}`,w.className="oncall-status hint-warn-inline");return}Rt(Number(n),mt)}),F&&It&&It.addEventListener("click",()=>{F.value="",Rt(null,It)});let Pt=t.querySelector("textarea[data-input=startupCommands]"),gt=t.querySelector("button[data-action=save-startup-commands]"),P=t.querySelector("[data-startup-commands-status]");Pt&>&>.addEventListener("click",async()=>{if(P){P.textContent="",P.className="oncall-status",gt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/startup-commands`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({startupCommands:Pt.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){P.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,P.classList.add("hint-ok");let s=typeof o.startupCommands=="string"?o.startupCommands:"";Pt.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.startupCommands=s)}else P.textContent=`\u2717 ${o.error??n.status}`,P.classList.add("hint-warn-inline")}catch(n){P.textContent=`\u2717 ${n?.message??n}`,P.classList.add("hint-warn-inline")}finally{gt.disabled=!1}}});let At=t.querySelector("input[data-input=launchShell]"),yt=t.querySelector("button[data-action=save-launch-shell]"),A=t.querySelector("[data-launch-shell-status]");At&&yt&&yt.addEventListener("click",async()=>{if(A){A.textContent="",A.className="oncall-status",yt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/launch-shell`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({launchShell:At.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){A.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,A.classList.add("hint-ok");let s=typeof o.launchShell=="string"?o.launchShell:"";At.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.launchShell=s)}else A.textContent=`\u2717 ${o.error??n.status}`,A.classList.add("hint-warn-inline")}catch(n){A.textContent=`\u2717 ${n?.message??n}`,A.classList.add("hint-warn-inline")}finally{yt.disabled=!1}}});let Bt=t.querySelector("textarea[data-input=env]"),ht=t.querySelector("button[data-action=save-env]"),B=t.querySelector("[data-env-status]");Bt&&ht&&ht.addEventListener("click",async()=>{if(B){B.textContent="",B.className="oncall-status",ht.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/env`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({env:Bt.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){B.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,B.classList.add("hint-ok");let s=typeof o.env=="string"?o.env:"";Bt.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.env=s)}else B.textContent=`\u2717 ${o.error??n.status}`,B.classList.add("hint-warn-inline")}catch(n){B.textContent=`\u2717 ${n?.message??n}`,B.classList.add("hint-warn-inline")}finally{ht.disabled=!1}}})})}function U(){!X&&at&&be()}return j.addEventListener("input",U),()=>{X=!0,J.onclick=null,j.removeEventListener("input",U),u.removeEventListener("click",H),m.replaceChildren(),u.replaceChildren()}}var $=Nt(le(),1);function Ue(){let d=ie(),u=(0,Mt.useRef)(null);return(0,Mt.useEffect)(()=>{if(u.current)return fe(u.current)},[]),(0,$.jsxs)("section",{className:"page",ref:u,children:[(0,$.jsx)("div",{className:"page-heading",children:(0,$.jsxs)("div",{children:[(0,$.jsx)("p",{className:"eyebrow",children:d("nav.botDefaults")}),(0,$.jsx)("h1",{children:d("botDefaults.title")}),(0,$.jsx)("p",{children:d("botDefaults.subtitle")})]})}),(0,$.jsxs)("form",{id:"bd-filters",className:"filters sessions-filters",children:[(0,$.jsx)("input",{type:"search",name:"q",placeholder:d("botDefaults.search")}),(0,$.jsx)("button",{type:"button",id:"bd-refresh",children:d("botDefaults.refresh")})]}),(0,$.jsxs)("div",{className:"bd-layout",children:[(0,$.jsx)("aside",{id:"bd-roster",className:"bd-roster"}),(0,$.jsx)("div",{id:"bd-list",className:"bd-detail"})]})]})}function Ye(d){return oe(d,(0,$.jsx)(Ue,{}))}export{Ye as renderBotDefaultsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function p(n){return n==null||typeof n=="string"?{content:n??null,source:n==null?"none":"chat"}:{content:n.content??null,source:n.source??"none"}}function h(n){for(let i of n.values()){let l=p(i);if(l.source==="chat"&&l.content!==null)return!0}return!1}function d(n,i,l,s){let a=new Set(n.filter(e=>e.inChat).map(e=>String(e.larkAppId)));if(a.size===0)return[];let c=[];for(let e of i){let t=(l.get(e.profileId)??[]).filter(o=>a.has(o.larkAppId)&&typeof o.content=="string"&&o.content!=="");if(t.length===0)continue;let r=0,f=0;for(let o of t){let u=p(s.get(o.larkAppId));u.source==="chat"&&u.content===o.content&&(r++,f++)}r===t.length?c.push({profileId:e.profileId,matched:r,total:t.length,chatMatched:f,kind:"full"}):r>0&&c.push({profileId:e.profileId,matched:r,total:t.length,chatMatched:f,kind:"partial"})}return c.sort((e,t)=>{if(e.kind!==t.kind)return e.kind==="full"?-1:1;let r=t.matched/t.total-e.matched/e.total;return r!==0?r:t.chatMatched!==e.chatMatched?t.chatMatched-e.chatMatched:t.matched!==e.matched?t.matched-e.matched:e.profileId.localeCompare(t.profileId)})}export{h as a,d as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=class{sessions=new Map;schedules=new Map;online=!0;version=0;snapshot={sessions:this.sessions,schedules:this.schedules,online:this.online,version:this.version};listeners=new Set;upsertSessions(e){for(let s of e)this.sessions.set(s.sessionId,s);this.emit()}upsertSchedules(e){for(let s of e)this.schedules.set(s.id,s);this.emit()}applySse(e,s){if(e==="session.spawned")this.sessions.set(s.session.sessionId,s.session);else if(e==="session.update"){let t=this.sessions.get(s.sessionId);t&&this.sessions.set(s.sessionId,{...t,...s.patch})}else if(e==="session.exited"){let t=this.sessions.get(s.sessionId);t&&this.sessions.set(s.sessionId,{...t,status:"closed"})}else if(e==="schedule.created")this.schedules.set(s.schedule.id,s.schedule);else if(e==="schedule.updated"){let t=this.schedules.get(s.id);t&&this.schedules.set(s.id,{...t,...s.patch})}else if(e==="schedule.deleted")this.schedules.delete(s.id);else return;this.emit()}setOnline(e){this.online!==e&&(this.online=e,this.emit())}on(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getSnapshot(){return this.snapshot}emit(){this.version+=1,this.snapshot={sessions:this.sessions,schedules:this.schedules,online:this.online,version:this.version};for(let e of this.listeners)e()}},n=new o;async function d(){let[h,e]=await Promise.all([fetch("/api/sessions").then(i=>i.json()),fetch("/api/schedules").then(i=>i.json())]);n.upsertSessions(h.sessions??[]),n.upsertSchedules(e.schedules??[]);let s=new EventSource("/events"),t=["session.spawned","session.update","session.exited","schedule.created","schedule.updated","schedule.deleted","schedule.fired","heartbeat"];for(let i of t)s.addEventListener(i,l=>{try{let r=JSON.parse(l.data);n.applySse(i,r.body??r)}catch{}});s.onerror=()=>n.setOnline(!1),s.onopen=()=>n.setOnline(!0)}export{n as a,d as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports),n=(b,a)=>{for(var c in a)e(b,c,{get:a[c],enumerable:!0})},l=(b,a,c,f)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&e(b,d,{get:()=>a[d],enumerable:!(f=h(a,d))||f.enumerable});return b};var o=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?e(c,"default",{value:b,enumerable:!0}):c,b));export{m as a,n as b,o as c};
|