botmux 3.5.0 → 3.5.2
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/adapters/backend/sandbox.d.ts +99 -279
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +424 -826
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +4 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +244 -0
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -0
- package/dist/adapters/cli/fs-policy.js +539 -0
- package/dist/adapters/cli/fs-policy.js.map +1 -0
- package/dist/adapters/cli/read-isolation.d.ts +14 -200
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +18 -477
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/bot-registry.d.ts +26 -23
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +16 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -18
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +16 -58
- 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 +26 -27
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/plugins/mcp/gateway-installer.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway-installer.js +14 -2
- package/dist/core/plugins/mcp/gateway-installer.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +90 -60
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/worker-pool.d.ts +24 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +50 -6
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +6 -0
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +7 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +16 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +225 -6
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +7 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +38 -22
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +1 -44
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-AUKV7P4L.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-QCPPKCX3.js → chunk-KPQAUX7V.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-WXPMNEYV.js → chunk-NRL6CVAS.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-EJDYUINZ.js → chunk-R7IAKAYX.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-H7P5UV4W.js → chunk-X2L65IOM.js} +6 -6
- package/dist/dashboard-web/chunks/{connectors-page-IR54AOAI.js → connectors-page-HDQFEXZI.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-3P4TLUMF.js → groups-page-6DKXBYOM.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-TDCZV56A.js → insights-page-NWARTJ6J.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-QWCWL3SX.js → monitor-room-AGX3XRJX.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-IOWFSNVC.js → monitoring-page-GGGIWN4C.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-5AUPEHZP.js → office-page-6SIVKSK3.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-QJMI6NLW.js → overview-page-FVR3NKAF.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-WJVB52ET.js → roles-page-WE2YB7KN.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-RVRWHP4V.js → schedules-page-TB3I24XN.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-KOOOASIL.js +2 -0
- package/dist/dashboard-web/chunks/{settings-page-TNZEPC7V.js → settings-page-IEBR7TGN.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-7YT5TIX5.js → skills-page-3QAT2IWD.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-NJZKTU7A.js → team-federation-page-K4VVAVAK.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-NQ73UA2Q.js → v3-page-V6IOJR2B.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-DSM3MDMN.js → whiteboards-page-V6CGKRNX.js} +1 -1
- package/dist/dashboard-web/style.css +20 -3
- package/dist/dashboard.js +86 -1
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +4 -1
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1 -19
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +0 -13
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +0 -34
- 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 +1 -30
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +36 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +80 -0
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +28 -3
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/services/sandbox-migration.d.ts +14 -0
- package/dist/services/sandbox-migration.d.ts.map +1 -0
- package/dist/services/sandbox-migration.js +85 -0
- package/dist/services/sandbox-migration.js.map +1 -0
- package/dist/services/sandbox-store.d.ts +28 -0
- package/dist/services/sandbox-store.d.ts.map +1 -1
- package/dist/services/sandbox-store.js +82 -0
- package/dist/services/sandbox-store.js.map +1 -1
- package/dist/types.d.ts +13 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +2 -2
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +14 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/worker.js +417 -498
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +56 -0
- package/dist/workflows/events/payloads.d.ts.map +1 -1
- package/dist/workflows/events/payloads.js +9 -0
- package/dist/workflows/events/payloads.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +86 -0
- package/dist/workflows/events/schema.d.ts.map +1 -1
- package/dist/workflows/shared/sandbox-policy.d.ts +10 -1
- package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -1
- package/dist/workflows/shared/sandbox-policy.js +12 -0
- package/dist/workflows/shared/sandbox-policy.js.map +1 -1
- package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
- package/dist/workflows/v3/bot-resolve.js +36 -0
- package/dist/workflows/v3/bot-resolve.js.map +1 -1
- package/dist/workflows/v3/contract.d.ts +8 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-O376WSER.js +0 -5
- package/dist/dashboard-web/chunks/sessions-page-KWLGBX6G.js +0 -3
- package/dist/services/sandbox-land.d.ts +0 -45
- package/dist/services/sandbox-land.d.ts.map +0 -1
- package/dist/services/sandbox-land.js +0 -394
- package/dist/services/sandbox-land.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/workflows/v3/contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/workflows/v3/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/workflows/v3/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoBH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW;CACjE,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC;AAsBnD,MAAM,CAAC,MAAM,iBAAiB,GAA8B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAiB3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AA4BlD,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,kDAAkD;IAClD,SAAS,EAAE,kBAAkB;IAC7B,sDAAsD;IACtD,WAAW,EAAE,yBAAyB;IACtC,oEAAoE;IACpE,UAAU,EAAE,wBAAwB;IACpC,mEAAmE;IACnE,aAAa,EAAE,2BAA2B;IAC1C,sEAAsE;IACtE,WAAW,EAAE,yBAAyB;IACtC;uCACmC;IACnC,SAAS,EAAE,gBAAgB;CACnB,CAAC;AAEX,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD;yEACyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC;iFACiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAgC9C,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD,aAAa;IACb,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/workflows/v3/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoBH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW;CACjE,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC;AAsBnD,MAAM,CAAC,MAAM,iBAAiB,GAA8B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAiB3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AA4BlD,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,kDAAkD;IAClD,SAAS,EAAE,kBAAkB;IAC7B,sDAAsD;IACtD,WAAW,EAAE,yBAAyB;IACtC,oEAAoE;IACpE,UAAU,EAAE,wBAAwB;IACpC,mEAAmE;IACnE,aAAa,EAAE,2BAA2B;IAC1C,sEAAsE;IACtE,WAAW,EAAE,yBAAyB;IACtC;uCACmC;IACnC,SAAS,EAAE,gBAAgB;CACnB,CAAC;AAEX,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD;yEACyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC;iFACiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAgC9C,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD,aAAa;IACb,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAqID,4EAA4E;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AA2CrC,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,kFAAkF;AAClF,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E"}
|
package/package.json
CHANGED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{b as Tt}from"./chunk-WXPMNEYV.js";import{b as A}from"./chunk-QCPPKCX3.js";import{a as Dt,b as at,c as nt,g as St,h as Ct,i as It,p as Nt}from"./chunk-QFMH6ITB.js";import{A as yt,a as st,r as gt,w as et,z as vt}from"./chunk-H7P5UV4W.js";import{a as ht}from"./chunk-SYC6D5XU.js";import{a as jt,d as kt}from"./chunk-5THX4DI2.js";import{c as rt}from"./chunk-7SZRL6FY.js";var s=rt(jt(),1);var wt=[{id:"claude-code",label:"Claude"},{id:"codex",label:"Codex"},{id:"traex",label:"traex"}],ot={options:wt,ttadkModelDefault:"glm-5.1",ttadkModelSuggestions:[]};function lt(a,t){return typeof a?.cliId=="string"&&a.cliId?a.cliId:t}function ut(a){let t=null;for(let o of st.sessions.values())o.larkAppId!==a||!o.cliId||(!t||Number(o.lastMessageAt??0)>Number(t.lastMessageAt??0))&&(t=o);return t?.cliId??""}function dt(a,t){let o=typeof a.agentSelectionKey=="string"&&a.agentSelectionKey?a.agentSelectionKey:"";return o||lt(a,t)||"claude-code"}function ct(a,t){return a.find(o=>o.id===t)}function xt(a,t){return a?.gateway==="ttadk"&&a.acceptsModel!==!1?t.ttadkModelSuggestions:[]}function Rt(){let a=0;return{begin(){let t=++a;return{commit:()=>t===a}}}}async function Bt(){try{let a=await fetch("/api/bots"),t=await a.json().catch(()=>({}));if(!a.ok){let o=t?.error?`HTTP ${a.status}: ${t.error}${t.path?` (${t.path})`:""}`:`HTTP ${a.status}`;return{bots:[],error:o}}return!t||!Array.isArray(t.bots)?{bots:[],error:"unexpected response shape (no `bots` array)"}:{bots:t.bots,error:null}}catch(a){return{bots:[],error:a?.message??String(a)}}}async function Pt(a,t){try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/substitute-targets/resolve`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({target:t})}),r=await o.json().catch(()=>({}));return o.ok?{ok:!0,resolution:r?.resolution??{}}:{ok:!1,error:r?.error?`HTTP ${o.status}: ${r.error}`:`HTTP ${o.status}`}}catch(o){return{ok:!1,error:o?.message??String(o)}}}async function Mt(){try{let a=await fetch("/api/cli-options"),t=await a.json().catch(()=>({}));if(!a.ok||!Array.isArray(t?.options))return ot;let o=t.options.filter(i=>i&&typeof i.id=="string"&&typeof i.label=="string"),r=typeof t.ttadkModelDefault=="string"&&t.ttadkModelDefault.trim()?t.ttadkModelDefault.trim():ot.ttadkModelDefault,u=Array.isArray(t.ttadkModelSuggestions)?t.ttadkModelSuggestions.filter(i=>typeof i=="string"):[];return{options:o.length?o:wt,ttadkModelDefault:r,ttadkModelSuggestions:u}}catch{return ot}}function At(a){if(!a)return"\u2014";let t=new Date(a);return Number.isNaN(t.getTime())?"\u2014":t.toLocaleString()}var e=rt(kt(),1);function pt(a,t=""){let o=a?` ${a.ok?"hint-ok":"hint-warn-inline"}`:"";return`oncall-status${t?` ${t}`:""}${o}`}function O(a){return(0,e.jsx)("span",{className:pt(a.status),...a.attr??{},children:a.status?.text??""})}function Et(a){let t=typeof a.children=="string"?a.children:void 0;return(0,e.jsx)(It,{className:"bd-info-tip",label:t,children:a.children})}function P(a){return(0,e.jsxs)("span",{className:"bd-field-title",children:[(0,e.jsx)("span",{className:"bd-field-title-text",children:a.children}),a.help?(0,e.jsx)(Et,{children:a.help}):null]})}function V(a){let t=A();return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(Nt,{id:`bd-menu-${a.dataInput}`,className:["bd-field-menu",a.className].filter(Boolean).join(" "),ariaLabel:a.ariaLabel,disabled:a.disabled,label:Dt(a.options,a.value),value:a.value,options:a.options,searchable:a.searchable,searchPlaceholder:a.searchable?t("common.dropdownSearch"):void 0,searchEmptyLabel:a.searchable?t("common.dropdownSearchEmpty"):void 0,onChange:a.onChange}),(0,e.jsx)("input",{type:"hidden","data-input":a.dataInput,value:a.value,readOnly:!0})]})}function J(a){return(0,e.jsxs)("label",{className:"toggle-row",children:[(0,e.jsx)("input",{type:"checkbox","data-action":a.dataAction,checked:a.checked,disabled:a.disabled,onChange:t=>a.onChange(t.currentTarget.checked)}),(0,e.jsx)("span",{className:"switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"toggle-tx",children:(0,e.jsx)("strong",{children:(0,e.jsx)(P,{help:a.help,children:a.title})})})]})}async function H(a,t,o){let r=await fetch(t,{method:a,headers:{"content-type":"application/json"},body:o===void 0?void 0:JSON.stringify(o)}),u=await r.json().catch(()=>({}));return{ok:r.ok&&u?.ok!==!1,status:r.status,body:u}}function L(a){let t=typeof a.body?.reason=="string"?a.body.reason:"",o=typeof a.body?.manualCommand=="string"?a.body.manualCommand:"";return t&&o?`${t}\uFF08${o}\uFF09`:String(t||a.body?.error||a.status)}function $(a){return a?.message??String(a)}function Gt(a){let t=a.trim();return t?/^[1-9]\d*$/.test(t)?Number(t):"invalid":null}function $t(a,t){let o=a.trim();return o===""?t:/^(0|[1-9]\d*)$/.test(o)?Number(o):null}var mt=["email","openId","userId","unionId"];function Wt(a){let t=a.split(/[\r\n,,;;]+/).map(o=>o.trim()).filter(Boolean);return[...new Set(t)]}function bt(a){return(a??[]).join(`
|
|
2
|
-
`)}function qt(a){return mt.find(t=>a?.[t]?.trim())??"email"}function Jt(a){let t=a.idValue.trim();if(!t)return null;let o={...a.persisted};if(a.persisted[a.idField]!==t||a.originalIdField!=null&&a.originalIdField!==a.idField)for(let i of mt)delete o[i];o[a.idField]=t;let u=a.name.trim();return u?o.name=u:delete o.name,o}function _t(a,t){return a==null?t("botDefaults.brandStateDefault"):a.trim()===""?t("botDefaults.brandStateOff"):t("botDefaults.brandStateCustom")}function Vt(a,t){return a==null?t("botDefaults.quotaStateOff"):t("botDefaults.quotaStateOn",{count:a})}function Kt(a,t){return a==null?t("botDefaults.maxLiveWorkersStateDefault"):t("botDefaults.maxLiveWorkersStateOn",{count:a})}function Qt(a,t){return{...a,disableStreamingCard:t.disableStreamingCard,silentTurnReactions:t.silentTurnReactions,codexAppCleanInput:t.codexAppCleanInput,writableTerminalLinkInCard:t.writableTerminalLinkInCard,privateCard:t.privateCard,botToBotSameDir:t.botToBotSameDir,autoStartOnGroupJoin:t.autoStartOnGroupJoin,autoStartOnGroupJoinPrompt:t.autoStartOnGroupJoinPrompt,autoStartOnNewTopic:t.autoStartOnNewTopic,regularGroupReplyMode:t.regularGroupReplyMode,regularGroupMentionMode:t.regularGroupMentionMode,docSubscribeDefaultMode:t.docSubscribeDefaultMode}}function zt(){let a=A(),t=(0,s.useRef)(!0),o=(0,s.useRef)(Rt()),[r,u]=(0,s.useState)([]),[i,c]=(0,s.useState)(ot),[d,g]=(0,s.useState)(null),[n,v]=(0,s.useState)(!0),[m,b]=(0,s.useState)(!1),[f,S]=(0,s.useState)(""),[D,y]=(0,s.useState)(null),[h,C]=(0,s.useState)(0),[,k]=(0,s.useState)(0),[T,w]=(0,s.useState)(!1),p=(0,s.useCallback)(async(I=!1)=>{I&&C(z=>z+1);let F=o.current.begin();v(!0);try{let[z,X]=await Promise.all([Bt(),Mt()]);if(!t.current||!F.commit())return;u(z.bots),g(z.error),c(X)}finally{t.current&&F.commit()&&v(!1)}},[]);(0,s.useEffect)(()=>{t.current=!0,p(),yt().then(()=>{t.current&&k(F=>F+1)});let I=st.onBotsChanged(()=>{t.current&&p()});return()=>{t.current=!1,I()}},[p]);let U=(0,s.useMemo)(()=>{let I=f.trim().toLowerCase();return r.filter(F=>!I||(F.botName??"").toLowerCase().includes(I)||(F.larkAppId??"").toLowerCase().includes(I))},[r,f]);(0,s.useEffect)(()=>{if(!(d||n)){if(U.length===0){D!==null&&y(null);return}(!D||!U.some(I=>I.larkAppId===D))&&y(U[0].larkAppId)}},[U,d,n,D]);let M=D?U.find(I=>I.larkAppId===D)??null:null,K=(0,s.useCallback)((I,F)=>{u(z=>z.map(X=>X.larkAppId!==I?X:typeof F=="function"?F(X):{...X,...F}))},[]),G=async()=>{b(!0);try{await p(!0)}finally{t.current&&b(!1)}},E;return n?E=(0,e.jsx)(nt,{label:a("common.loading")}):d?E=(0,e.jsxs)("p",{className:"hint-warn",children:["\u65E0\u6CD5\u52A0\u8F7D bot \u5217\u8868\uFF1A",d,(0,e.jsx)("br",{}),"\u5E38\u89C1\u539F\u56E0\uFF1Adashboard / daemon \u8FDB\u7A0B\u8FD8\u5728\u8DD1\u65E7\u4EE3\u7801\uFF0C\u6267\u884C ",(0,e.jsx)("code",{children:"botmux restart"})," \u540E\u5237\u65B0\u3002"]}):U.length===0?E=(0,e.jsx)("p",{className:"empty",children:a("botDefaults.empty")}):M?E=(0,e.jsx)(Yt,{bot:M,cliState:i,patchBot:K},`${M.larkAppId}:${h}`):E=null,(0,e.jsxs)("section",{className:"page bot-defaults-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:a("nav.botDefaults")}),(0,e.jsx)("h1",{children:a("botDefaults.title")})]}),(0,e.jsxs)("div",{className:"page-heading-actions",children:[(0,e.jsx)(Ct,{id:"bd-refresh",label:a("botDefaults.refresh"),busy:m,disabled:m,onClick:()=>{G()}}),gt.authed?(0,e.jsx)(St,{className:"page-primary-action add-bot-btn",disabled:T,onClick:()=>{w(!0),Tt().finally(()=>w(!1))},children:a("botOnboarding.add")}):null]})]}),(0,e.jsxs)("div",{className:"bd-layout",children:[(0,e.jsxs)("aside",{id:"bd-roster",className:"bd-roster",children:[(0,e.jsx)("form",{id:"bd-filters",className:"filters dashboard-toolbar",onSubmit:I=>I.preventDefault(),children:(0,e.jsx)("input",{type:"search",name:"q",placeholder:a("botDefaults.search"),value:f,onChange:I=>S(I.currentTarget.value)})}),(0,e.jsx)("div",{className:"bd-roster-list",children:!d&&U.map(I=>(0,e.jsx)(Xt,{bot:I,selected:I.larkAppId===D,onSelect:()=>y(I.larkAppId)},I.larkAppId))})]}),(0,e.jsx)("div",{id:"bd-list",className:"bd-detail",children:E})]})]})}function Xt(a){let{bot:t}=a,o=t.botName??t.larkAppId,r=lt(t,ut(t.larkAppId));return(0,e.jsxs)("div",{className:`bd-roster-item${a.selected?" on":""}`,"data-appid":t.larkAppId,role:"button",tabIndex:0,onClick:a.onSelect,onKeyDown:u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),a.onSelect())},children:[(0,e.jsx)(at,{html:et({name:o,larkAppId:t.larkAppId,size:"sm"})}),(0,e.jsxs)("div",{className:"bd-roster-tx",children:[(0,e.jsx)("b",{children:o}),(0,e.jsx)("span",{children:r||t.larkAppId.slice(0,14)})]}),t.defaultOncall?.enabled?(0,e.jsx)("span",{className:"bd-roster-flag",children:"oncall"}):null]})}function Yt(a){let t=A(),{bot:o,cliState:r,patchBot:u}=a,i=o.botName??o.larkAppId,c=lt(o,ut(o.larkAppId)),d=(0,s.useCallback)(async n=>{let v=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/card-prefs`,n);return v.ok&&u(o.larkAppId,m=>Qt(m,v.body)),v},[o.larkAppId,u]);if(o.error)return(0,e.jsxs)("article",{className:"bd-card bd-profile","data-appid":o.larkAppId,children:[(0,e.jsxs)("header",{className:"bd-profile-head",children:[(0,e.jsx)(at,{html:et({name:i,larkAppId:o.larkAppId})}),(0,e.jsxs)("div",{className:"bd-profile-id",children:[(0,e.jsx)("strong",{children:i}),(0,e.jsx)("code",{children:o.larkAppId})]})]}),(0,e.jsxs)("p",{className:"hint-warn-inline",children:["\u67E5\u8BE2\u5931\u8D25\uFF1A",o.error]})]});let g=o.defaultOncall??{enabled:!1,workingDir:"",since:0};return(0,e.jsxs)("article",{className:"bd-card bd-profile","data-appid":o.larkAppId,children:[(0,e.jsxs)("header",{className:"bd-profile-head",children:[(0,e.jsx)(ee,{bot:o,name:i,patchBot:u}),(0,e.jsx)("div",{className:"bd-profile-main",children:(0,e.jsx)(ae,{bot:o,cli:c,patchBot:u,meta:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("small",{className:"bd-meta-ok",children:["\u25CF ",t("botDefaults.metaOnline")]}),(0,e.jsxs)("small",{"data-oncall-since":!0,children:[t("botDefaults.lastEnabled"),": ",At(g.since??0)]}),(0,e.jsx)("small",{children:t("botDefaults.autobound",{count:o.autoboundChatCount??0})})]})})})]}),(0,e.jsxs)("div",{className:"bd-body bd-grid",children:[(0,e.jsxs)("div",{className:"bd-column",children:[(0,e.jsxs)("section",{className:"bd-tile",children:[(0,e.jsx)(oe,{bot:o,sessionFallback:c,cliState:r,patchBot:u}),(0,e.jsx)(se,{bot:o,patchBot:u,putCardPref:d}),o.cliId!=="riff"&&(0,e.jsx)(le,{bot:o,patchBot:u}),o.cliId!=="riff"&&(0,e.jsx)(re,{bot:o,patchBot:u})]}),(0,e.jsx)("section",{className:"bd-tile",children:(0,e.jsx)(Zt,{bot:o,patchBot:u})}),(0,e.jsx)("section",{className:"bd-tile",children:(0,e.jsx)(Te,{bot:o,patchBot:u})})]}),(0,e.jsxs)("div",{className:"bd-column",children:[(0,e.jsxs)("section",{className:"bd-tile",children:[(0,e.jsx)(me,{bot:o,patchBot:u,putCardPref:d}),(0,e.jsx)(ge,{bot:o,patchBot:u}),(0,e.jsx)(fe,{bot:o,putCardPref:d}),(0,e.jsx)(ve,{bot:o,patchBot:u})]}),(0,e.jsxs)("section",{className:"bd-tile",children:[(0,e.jsx)(ce,{bot:o,putCardPref:d}),(0,e.jsx)(be,{bot:o,putCardPref:d}),(0,e.jsx)(pe,{bot:o,patchBot:u}),(0,e.jsx)(Ne,{bot:o,patchBot:u})]}),(0,e.jsx)("section",{className:"bd-tile",children:(0,e.jsx)(ue,{bot:o,patchBot:u})})]})]})]})}function Zt(a){let t=A();return(0,e.jsxs)("section",{className:"bd-section bd-runtime-env",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionRuntimeEnv")}),(0,e.jsx)(ye,{bot:a.bot,patchBot:a.patchBot}),(0,e.jsx)(he,{bot:a.bot,patchBot:a.patchBot}),(0,e.jsx)(ke,{bot:a.bot,patchBot:a.patchBot})]})}var it=512;async function te(a){let t=await createImageBitmap(a);try{let o=Math.min(t.width,t.height);if(!o)throw new Error("empty image");let r=document.createElement("canvas");r.width=it,r.height=it;let u=r.getContext("2d");if(!u)throw new Error("canvas unavailable");let i=(t.width-o)/2,c=(t.height-o)/2;return u.drawImage(t,i,c,o,o,0,0,it,it),r.toDataURL("image/png")}finally{t.close()}}function ee(a){let t=A(),{bot:o,name:r,patchBot:u}=a,i=(0,s.useRef)(null),[c,d]=(0,s.useState)(!1),[g,n]=(0,s.useState)(null),[v,m]=(0,s.useState)(!1),[b,f]=(0,s.useState)(!1),S=(0,s.useRef)(null);function D(C,k){let w=["no_session","session_expired","no_access","unsupported_brand"].includes(C)?t(`botDefaults.avatarWarn.${C}`):k||C;return t("botDefaults.avatarFailed",{error:w})}let y=(0,s.useCallback)(async C=>{d(!0),n({text:`\u23F3 ${t("botDefaults.avatarUploading")}`,ok:!0});try{let k=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/avatar`,{imageBase64:C});if(k.ok&&k.body.ok){let T=typeof k.body.avatarUrl=="string"?k.body.avatarUrl:"";T&&vt(o.larkAppId,r,T),u(o.larkAppId,w=>({...w})),S.current=null,m(!1),n({text:`\u2713 ${t("botDefaults.avatarOkFeishu")}`,ok:!0})}else{let T=String(k.body?.error??""),w=typeof k.body?.message=="string"?k.body.message:void 0;n({text:`\u2717 ${D(T,w??L(k))}`});let p=T==="no_session"||T==="session_expired";m(p),p||(S.current=null)}}catch(k){n({text:`\u2717 ${t("botDefaults.avatarFailed",{error:$(k)})}`})}finally{d(!1)}},[o.larkAppId,r,u,t]);async function h(C){if(!C||c)return;d(!0);let k;try{k=await te(C)}catch{d(!1),n({text:`\u2717 ${t("botDefaults.avatarBadImage")}`});return}S.current=k,await y(k)}return(0,e.jsxs)("div",{className:"bd-profile-avatar bd-avatar-editable","data-avatar-control":!0,children:[(0,e.jsxs)("button",{type:"button",className:"bd-avatar-btn","data-action":"edit-bot-avatar",title:t("botDefaults.avatarTitle"),"aria-label":t("botDefaults.avatarTitle"),disabled:c,onClick:()=>i.current?.click(),children:[(0,e.jsx)(at,{html:et({name:r,larkAppId:o.larkAppId,dot:"ok"})}),(0,e.jsx)("span",{className:"bd-avatar-edit-badge","aria-hidden":"true",children:c?"\u23F3":"\u270E"})]}),(0,e.jsx)("input",{ref:i,type:"file",accept:"image/*",hidden:!0,"data-input":"botAvatarFile",onChange:C=>{let k=C.currentTarget.files?.[0];C.currentTarget.value="",h(k)}}),g?(0,e.jsxs)("small",{className:pt(g,"bd-avatar-status"),"data-avatar-status":!0,children:[g.text,v?(0,e.jsx)("button",{type:"button",className:"bd-feishu-login","data-action":"feishu-login-avatar",onClick:()=>f(!0),children:t("feishuLogin.entry")}):null]}):null,b?(0,e.jsx)(Ht,{onClose:()=>f(!1),onSuccess:()=>{m(!1),f(!1),S.current&&y(S.current)}}):null]})}function ae(a){let t=A(),{bot:o,cli:r,patchBot:u}=a,i=o.botName??o.larkAppId,[c,d]=(0,s.useState)(!1),[g,n]=(0,s.useState)(i),[v,m]=(0,s.useState)(!1),[b,f]=(0,s.useState)(null),[S,D]=(0,s.useState)(!1),[y,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{c||n(i)},[c,i]);function C(w){d(w),w&&(n(i),f(null),D(!1))}function k(w,p){let M=["no_session","session_expired","no_access","unsupported_brand"].includes(w)?t(`botDefaults.renameWarn.${w}`):p||w;return t("botDefaults.renameLocalOnly",{reason:M})}let T=(0,s.useCallback)(async()=>{let w=g.trim();if(!w){f({text:`\u2717 ${t("botDefaults.renameEmpty")}`});return}m(!0),f({text:`\u23F3 ${t("botDefaults.renaming")}`,ok:!0});try{let p=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/rename`,{name:w});if(p.ok&&p.body.ok){let U=typeof p.body.botName=="string"&&p.body.botName?p.body.botName:w;u(o.larkAppId,M=>({...M,botName:U,larkBotName:p.body.mode==="feishu"?w:M.larkBotName,displayName:p.body.mode==="feishu"?null:w})),C(!1),p.body.mode==="feishu"?(f({text:`\u2713 ${t("botDefaults.renameOkFeishu")}`,ok:!0}),D(!1)):(f({text:`\u26A0 ${k(String(p.body.warning??""),p.body.message)}`}),D(p.body.warning==="no_session"||p.body.warning==="session_expired"))}else f({text:`\u2717 ${t("botDefaults.renameFailed",{error:L(p)})}`})}catch(p){f({text:`\u2717 ${t("botDefaults.renameFailed",{error:$(p)})}`})}finally{m(!1)}},[o.larkAppId,g,u,t]);return(0,e.jsxs)("div",{className:"bd-profile-id",children:[c?(0,e.jsxs)("span",{className:"bd-name-editor","data-name-editor":!0,children:[(0,e.jsx)("input",{type:"text",className:"bd-name-input","data-input":"botRename",maxLength:64,value:g,disabled:v,autoFocus:!0,onChange:w=>n(w.currentTarget.value),onKeyDown:w=>{w.key==="Enter"?(w.preventDefault(),T()):w.key==="Escape"&&C(!1)}}),(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-bot-name",disabled:v,onClick:()=>{T()},children:t("botDefaults.renameSave")}),(0,e.jsx)("button",{type:"button","data-action":"cancel-bot-name",disabled:v,onClick:()=>C(!1),children:t("botDefaults.renameCancel")})]}):(0,e.jsxs)("div",{className:"bd-profile-title-row","data-name-row":!0,children:[(0,e.jsxs)("div",{className:"bd-profile-title-content",children:[(0,e.jsx)("strong",{"data-bot-name":!0,children:i}),r?(0,e.jsx)("span",{className:"mate-role bd-profile-cli-tag",children:r}):null,a.meta?(0,e.jsx)("span",{className:"bd-profile-meta bd-meta",children:a.meta}):null]}),(0,e.jsx)("button",{type:"button",className:"bd-name-edit","data-action":"edit-bot-name",title:t("botDefaults.renameTitle"),"aria-label":t("botDefaults.renameTitle"),onClick:()=>C(!0),children:t("botDefaults.renameAction")})]}),(0,e.jsx)("code",{children:o.larkAppId}),(0,e.jsx)("small",{className:pt(b,"bd-name-status"),"data-name-status":!0,children:b?.text??""}),(0,e.jsx)("button",{type:"button",className:"bd-feishu-login","data-action":"feishu-login",hidden:!S,onClick:()=>h(!0),children:t("feishuLogin.entry")}),y?(0,e.jsx)(Ht,{onClose:()=>h(!1),onSuccess:()=>{D(!1),h(!1),T()}}):null]})}function Ht(a){let t=A(),{onClose:o,onSuccess:r}=a,u=(0,s.useRef)(null),i=(0,s.useRef)(null),[c,d]=(0,s.useState)(t("feishuLogin.starting")),[g,n]=(0,s.useState)(null),[v,m]=(0,s.useState)(!1),b=(0,s.useCallback)(()=>{u.current!==null&&(window.clearInterval(u.current),u.current=null)},[]),f=(0,s.useCallback)(y=>y?y.status==="awaiting_scan"&&y.qrDataUrl?(n(y.qrDataUrl),d(y.message||t("feishuLogin.scanHint")),m(!1),"active"):y.status==="starting"?(d(y.message||t("feishuLogin.starting")),n(null),m(!1),"active"):y.status==="success"?(b(),n(null),m(!1),d(t("feishuLogin.success")),i.current=window.setTimeout(()=>r(),900),"done"):(b(),n(null),d(t("feishuLogin.failed",{reason:y.message||y.reason||""})),m(!0),"done"):"active",[r,b,t]),S=(0,s.useCallback)(async()=>{try{let h=await(await fetch("/api/feishu-login/status")).json().catch(()=>({}));f(h.login)}catch{}},[f]),D=(0,s.useCallback)(async()=>{b(),d(t("feishuLogin.starting")),n(null),m(!1);let y="active";try{let C=await(await fetch("/api/feishu-login/start",{method:"POST"})).json().catch(()=>({}));y=f(C.login)}catch(h){d(t("feishuLogin.failed",{reason:$(h)})),m(!0);return}y==="active"&&u.current===null&&(u.current=window.setInterval(()=>{S()},1500))},[S,f,b,t]);return(0,s.useEffect)(()=>(D(),()=>{b(),i.current!==null&&window.clearTimeout(i.current)}),[D,b]),(0,e.jsx)("div",{className:"feishu-login-overlay",onClick:y=>{y.currentTarget===y.target&&o()},children:(0,e.jsxs)("div",{className:"feishu-login-modal",role:"dialog","aria-modal":"true",children:[(0,e.jsx)("button",{type:"button",className:"feishu-login-close","data-close":!0,"aria-label":t("feishuLogin.close"),onClick:o,children:"x"}),(0,e.jsx)("h3",{className:"feishu-login-title",children:t("feishuLogin.title")}),(0,e.jsx)("p",{className:"feishu-login-hint","data-hint":!0,children:c}),(0,e.jsx)("div",{className:"feishu-login-qr","data-qr":!0,children:g?(0,e.jsx)("img",{className:"qr-image",src:g,alt:t("feishuLogin.qrAlt")}):null}),(0,e.jsx)("div",{className:"feishu-login-actions",children:(0,e.jsx)("button",{type:"button",className:"primary","data-retry":!0,hidden:!v,onClick:()=>{D()},children:t("feishuLogin.retry")})})]})})}function oe(a){let t=A(),{bot:o,cliState:r,patchBot:u}=a,i=dt(o,a.sessionFallback),[c,d]=(0,s.useState)(i),[g,n]=(0,s.useState)(typeof o.model=="string"?o.model:""),[v,m]=(0,s.useState)(null),[b,f]=(0,s.useState)(!1),[S,D]=(0,s.useState)(Lt(o)),[y,h]=(0,s.useState)(null),[C,k]=(0,s.useState)(!1);(0,s.useEffect)(()=>{d(dt(o,a.sessionFallback)),n(typeof o.model=="string"?o.model:""),D(Lt(o))},[o.agentSelectionKey,o.cliId,o.larkAppId,o.model,o.skillInjection,o.skillInjectionDefault,a.sessionFallback]);let T=ct(r.options,c),w=xt(T,r),p=T?.gateway==="ttadk"&&T.acceptsModel===!1,U=p?t("botOnboarding.modelTtadkCocoPlaceholder"):T?.gateway==="ttadk"?t("botOnboarding.modelTtadkPlaceholder").replace("{model}",r.ttadkModelDefault):t("botDefaults.agentModelPlaceholder");function M(l){d(l);let N=ct(r.options,l),x=N?.gateway==="ttadk",R=x&&N.acceptsModel!==!1;n(x&&!R?"":R?B=>B.trim()?B:r.ttadkModelDefault:B=>B.trim()===r.ttadkModelDefault?"":B)}async function K(){m(null),f(!0);try{let l=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/agent`,{cliId:c,model:g});l.ok&&l.body.ok?(m(l.body.availabilityWarning?{text:`\u26A0\uFE0F ${l.body.availabilityWarning}`}:{text:`\u2713 ${t("botDefaults.agentSaved")}`,ok:!0}),u(o.larkAppId,{cliId:l.body.cliId,wrapperCli:l.body.wrapperCli??null,model:l.body.model??"",agentSelectionKey:l.body.selectionKey??c})):m({text:`\u2717 ${L(l)}`})}catch(l){m({text:`\u2717 ${$(l)}`})}finally{f(!1)}}async function G(){if(o.cliId==="riff")return!0;try{let l=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/agent`,{cliId:"riff",model:""});return l.ok&&l.body.ok?(u(o.larkAppId,{cliId:l.body.cliId,wrapperCli:l.body.wrapperCli??null,model:l.body.model??"",agentSelectionKey:l.body.selectionKey??"riff"}),!0):(m({text:`\u2717 ${L(l)}`}),!1)}catch(l){return m({text:`\u2717 ${$(l)}`}),!1}}async function E(l){D(l),h(null),k(!0);try{let N=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/skill-injection`,{skillInjection:l});N.ok&&N.body.ok?(h({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}),u(o.larkAppId,{skillInjection:N.body.skillInjection??null})):h({text:`\u2717 ${L(N)}`})}catch(N){h({text:`\u2717 ${$(N)}`})}finally{k(!1)}}let I=o.skillInjectionSupport==="dynamic"?"dynamic":o.skillInjectionSupport==="global"?"global":"none",F=[...r.options].sort((l,N)=>l.label.localeCompare(N.label,"en",{sensitivity:"base"})).map(l=>({value:l.id,label:l.available===!1?t("botDefaults.agentMissingOption",{label:l.label,command:l.command??l.id}):`${l.label}\uFF08${l.id}\uFF09`})),z=[{value:"dynamic",label:t("botDefaults.skillInjectionDynamic")}],X=[{value:"dynamic",label:t("botDefaults.skillInjectionDynamicUnsupported"),disabled:!0},{value:"prompt",label:t("botDefaults.skillInjectionPrompt")},{value:"global",label:t("botDefaults.skillInjectionGlobal")},{value:"off",label:t("botDefaults.skillInjectionOff")}],Y=c==="riff";return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionAgent")}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)("span",{children:t("botDefaults.agentCli")}),(0,e.jsx)(V,{dataInput:"agentCliId",ariaLabel:t("botDefaults.agentCli"),value:c,disabled:b,options:F,searchable:!0,onChange:M}),T?.available===!1?(0,e.jsx)("small",{className:"hint-warn",children:t("botDefaults.agentMissingHint",{command:T.command??c})}):null]})}),!Y&&(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)(P,{help:t("botDefaults.agentHelp"),children:t("botDefaults.agentModel")}),(0,e.jsx)("input",{type:"text","data-input":"agentModel",list:`agent-model-suggestions-${o.larkAppId}`,placeholder:U,value:g,disabled:b||p,onChange:l=>n(l.currentTarget.value)}),(0,e.jsx)("datalist",{id:`agent-model-suggestions-${o.larkAppId}`,children:w.map(l=>(0,e.jsx)("option",{value:l},l))})]})}),Y&&(0,e.jsx)(Ie,{bot:o,patchBot:u,persistCliSelection:G}),!Y&&I==="dynamic"?(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.skillInjectionHelpDynamic"),children:t("botDefaults.skillInjection")}),(0,e.jsx)(V,{dataInput:"skillInjection",ariaLabel:t("botDefaults.skillInjection"),value:"dynamic",disabled:!0,options:z,onChange:()=>{}})]})}):!Y&&I==="global"?(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.skillInjectionHelp"),children:t("botDefaults.skillInjection")}),(0,e.jsx)(V,{dataInput:"skillInjection",ariaLabel:t("botDefaults.skillInjection"),value:S,disabled:C,options:X,onChange:l=>{E(l)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:y,attr:{"data-skill-injection-status":""}})})]}):null,!Y&&(0,e.jsxs)("div",{className:"actions bd-section-actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-agent",disabled:b,onClick:()=>{K()},children:t("botDefaults.agentSave")}),(0,e.jsx)(O,{status:v,attr:{"data-agent-status":""}})]})]})}function Lt(a){let t=a.skillInjection==="global"||a.skillInjection==="prompt"||a.skillInjection==="off"?a.skillInjection:"",o=a.skillInjectionDefault==="global"||a.skillInjectionDefault==="off"?a.skillInjectionDefault:"prompt";return t||o}function se(a){let t=A(),{bot:o,patchBot:r}=a,u=Ot(o),[i,c]=(0,s.useState)(u.mode),[d,g]=(0,s.useState)(u.workingDir),[n,v]=(0,s.useState)(o.defaultWorkingDirAutoWorktree===!0),[m,b]=(0,s.useState)(null),[f,S]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let h=Ot(o);c(h.mode),g(h.workingDir),v(o.defaultWorkingDirAutoWorktree===!0)},[o.defaultOncall?.enabled,o.defaultOncall?.workingDir,o.defaultWorkingDir,o.defaultWorkingDirAutoWorktree]);async function D(){b(null);let h=d.trim();if(i!=="off"&&!h){b({text:t("botDefaults.required")});return}let C=i==="default"&&n;S(!0);try{let k=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/working-dir-mode`,{mode:i,workingDir:h,autoWorktree:C});if(k.ok&&k.body.ok){let T=k.body.resolvedPath?` \u2192 ${k.body.resolvedPath}`:"";b({text:`\u2713 ${t("botDefaults.workingDirSaved")}${T}`,ok:!0}),r(o.larkAppId,{defaultOncall:k.body.defaultOncall??o.defaultOncall,defaultWorkingDir:k.body.defaultWorkingDir??null,defaultWorkingDirAutoWorktree:k.body.defaultWorkingDirAutoWorktree===!0})}else b({text:`\u2717 ${L(k)}`})}catch(k){b({text:`\u2717 ${$(k)}`})}finally{S(!1)}}let y=[{value:"off",label:t("botDefaults.workingDirModeOff")},{value:"default",label:t("botDefaults.workingDirModeDefault")},{value:"oncall",label:t("botDefaults.workingDirModeOncall")}];return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionWorkingDir")}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.workingDirModeHelp"),children:t("botDefaults.workingDirMode")}),(0,e.jsx)(V,{dataInput:"workingDirMode",ariaLabel:t("botDefaults.workingDirMode"),value:i,disabled:f,options:y,onChange:h=>c(h)})]})}),(0,e.jsx)("div",{className:"bd-row","data-wd-dir-row":!0,hidden:i==="off",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.workingDirField")}),(0,e.jsx)("input",{type:"text","data-input":"workingDir",placeholder:"e.g. /root/iserver/botmux",value:d,disabled:f,onChange:h=>g(h.currentTarget.value)})]})}),(0,e.jsxs)("label",{className:"toggle-row","data-wd-worktree-row":!0,hidden:i!=="default",children:[(0,e.jsx)("input",{type:"checkbox","data-input":"autoWorktree",checked:n,disabled:f,onChange:h=>v(h.currentTarget.checked)}),(0,e.jsx)("span",{className:"switch","aria-hidden":"true"}),(0,e.jsx)("span",{className:"toggle-tx",children:(0,e.jsx)("strong",{children:(0,e.jsx)(P,{help:t("botDefaults.autoWorktreeHelp"),children:t("botDefaults.autoWorktree")})})})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-working-dir",disabled:f,onClick:()=>{D()},children:t("botDefaults.save")}),(0,e.jsx)(O,{status:m,attr:{"data-status":""}})]}),(0,e.jsx)(ne,{bot:o,putCardPref:a.putCardPref})]})}function Ot(a){let t=a.defaultOncall??{enabled:!1,workingDir:""};return{mode:t.enabled?"oncall":a.defaultWorkingDir?"default":"off",workingDir:a.defaultWorkingDir||t.workingDir||""}}function ne(a){let t=A(),{bot:o,putCardPref:r}=a,[u,i]=(0,s.useState)(o.autoStartOnGroupJoin===!0),[c,d]=(0,s.useState)(o.autoStartOnNewTopic===!0),[g,n]=(0,s.useState)(typeof o.autoStartOnGroupJoinPrompt=="string"?o.autoStartOnGroupJoinPrompt:""),[v,m]=(0,s.useState)(null),[b,f]=(0,s.useState)(null);(0,s.useEffect)(()=>{i(o.autoStartOnGroupJoin===!0),d(o.autoStartOnNewTopic===!0),n(typeof o.autoStartOnGroupJoinPrompt=="string"?o.autoStartOnGroupJoinPrompt:"")},[o.autoStartOnGroupJoin,o.autoStartOnGroupJoinPrompt,o.autoStartOnNewTopic]);async function S(D,y){f(y),m(null);try{let h=await r(D);m(h.ok?{text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}:{text:`\u2717 ${L(h)}`})}catch(h){m({text:`\u2717 ${$(h)}`})}finally{f(null)}}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:t("botDefaults.sectionAutoStart")}),(0,e.jsx)(J,{checked:u,disabled:b==="join",dataAction:"toggle-auto-join",title:t("botDefaults.autoStartJoin"),help:t("botDefaults.autoStartJoinHelp"),onChange:D=>{i(D),S({autoStartOnGroupJoin:D},"join")}}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.autoStartJoinPrompt")}),(0,e.jsx)("textarea",{"data-input":"autoJoinPrompt",rows:3,placeholder:t("botDefaults.autoStartJoinPromptPlaceholder"),value:g,onChange:D=>n(D.currentTarget.value)})]})}),(0,e.jsx)(J,{checked:c,disabled:b==="topic",dataAction:"toggle-auto-topic",title:t("botDefaults.autoStartTopic"),help:t("botDefaults.autoStartTopicHelp"),onChange:D=>{d(D),S({autoStartOnNewTopic:D},"topic")}}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-auto-join-prompt",disabled:b==="prompt",onClick:()=>{S({autoStartOnGroupJoinPrompt:g},"prompt")},children:t("botDefaults.autoStartJoinPromptSave")}),(0,e.jsx)(O,{status:v,attr:{"data-auto-start-status":""}})]})]})}function le(a){let t=A(),{bot:o,patchBot:r}=a,[u,i]=(0,s.useState)(o.sandbox===!0),[c,d]=(0,s.useState)(null),[g,n]=(0,s.useState)(!1);(0,s.useEffect)(()=>i(o.sandbox===!0),[o.sandbox]);async function v(b){i(b),d(null),n(!0);try{let f=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/sandbox`,{enabled:b});f.ok&&f.body.ok?(d({text:`\u2713 ${t("botDefaults.sandboxSaved")}`,ok:!0}),r(o.larkAppId,{sandbox:f.body.sandbox===!0})):(d({text:`\u2717 ${L(f)}`}),i(!b))}catch(f){d({text:`\u2717 ${$(f)}`}),i(!b)}finally{n(!1)}}let m=o.readIsolationSupported===!0;return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionSandbox")}),(0,e.jsx)(J,{checked:u,disabled:g,dataAction:"toggle-sandbox",title:t("botDefaults.sandboxToggle"),help:t("botDefaults.sandboxHelp"),onChange:b=>{v(b)}}),(0,e.jsx)("p",{className:"bd-section-note","data-read-iso-capability":m?"yes":"no",children:m?`\uFF0B ${t("botDefaults.sandboxReadIsoOn")}`:t("botDefaults.sandboxReadIsoOff")}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:c,attr:{"data-sandbox-status":""}})})]})}var ie=[{value:"",labelKey:"botDefaults.backendAuto"},{value:"tmux",labelKey:"botDefaults.backendTmux"},{value:"herdr",labelKey:"botDefaults.backendHerdr"},{value:"zellij",labelKey:"botDefaults.backendZellij"},{value:"pty",labelKey:"botDefaults.backendPty"}];function re(a){let t=A(),{bot:o,patchBot:r}=a,[u,i]=(0,s.useState)(typeof o.backendType=="string"?o.backendType:""),[c,d]=(0,s.useState)(null),[g,n]=(0,s.useState)(!1);(0,s.useEffect)(()=>i(typeof o.backendType=="string"?o.backendType:""),[o.backendType]);let v=(0,s.useMemo)(()=>ie.map(b=>({value:b.value,label:t(b.labelKey)})),[t]);async function m(b){let f=u;i(b),d(null),n(!0);try{let S=await H("PUT",`/api/bots/${encodeURIComponent(o.larkAppId)}/backend-type`,{backendType:b});S.ok&&S.body.ok?(d({text:`\u2713 ${t("botDefaults.backendSaved")}`,ok:!0}),r(o.larkAppId,{backendType:typeof S.body.backendType=="string"?S.body.backendType:null})):(d({text:`\u2717 ${L(S)}`}),i(f))}catch(S){d({text:`\u2717 ${$(S)}`}),i(f)}finally{n(!1)}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionBackend")}),(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.backendHelp"),children:t("botDefaults.backendLabel")}),(0,e.jsx)(V,{dataInput:"backendType",ariaLabel:t("botDefaults.backendLabel"),value:u,disabled:g,options:v,onChange:b=>{m(b)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:c,attr:{"data-backend-status":""}})})]})]})}function ue(a){let t=A(),{bot:o,patchBot:r}=a,[u,i]=(0,s.useState)(typeof o.teamRole=="string"),[c,d]=(0,s.useState)(typeof o.teamRole=="string"?o.teamRole:""),[g,n]=(0,s.useState)(null),[v,m]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let f=!0,S=`/api/team/local-bots/${encodeURIComponent(o.larkAppId)}/role`;return typeof o.teamRole=="string"?(i(!0),d(o.teamRole),()=>{f=!1}):(n(null),i(!1),d(""),(async()=>{try{let D=await fetch(S),y=await D.json().catch(()=>({}));if(!f)return;if(D.ok&&y.ok){let h=y.role??"";d(h),i(!0),r(o.larkAppId,{teamRole:h})}else n({text:`\u2717 ${t("botDefaults.roleLoadErr")}: ${y.error??D.status}`})}catch(D){f&&n({text:`\u2717 ${t("botDefaults.roleLoadErr")}: ${$(D)}`})}})(),()=>{f=!1})},[o.larkAppId,o.teamRole,r,t]);async function b(f,S){if(u){n(null),m(!0);try{let D=await H("PUT",`/api/team/local-bots/${encodeURIComponent(o.larkAppId)}/role`,{role:f});if(D.ok&&D.body.ok){let y=f.trim();d(y),r(o.larkAppId,{teamRole:y}),n({text:`\u2713 ${t(S?"botDefaults.roleDeleted":"botDefaults.roleSaved")}`,ok:!0})}else n({text:`\u2717 ${L(D)}`})}catch(D){n({text:`\u2717 ${$(D)}`})}finally{m(!1)}}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:(0,e.jsx)(P,{help:t("botDefaults.roleHelp"),children:t("botDefaults.sectionRole")})}),(0,e.jsx)("textarea",{"data-input":"teamRole",rows:6,placeholder:t("botDefaults.rolePlaceholder"),disabled:!u||v,value:c,onChange:f=>d(f.currentTarget.value)}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-role",disabled:!u||v,onClick:()=>{b(c,c.trim()==="")},children:t("botDefaults.roleSave")}),(0,e.jsx)(O,{status:g,attr:{"data-role-status":""}})]}),(0,e.jsx)(de,{appId:o.larkAppId})]})}function de(a){let t=A(),[o,r]=(0,s.useState)({loaded:!1,loading:!0,items:[]});(0,s.useEffect)(()=>{let c=!0;return r({loaded:!1,loading:!0,items:[]}),(async()=>{try{let d=await fetch("/api/role-profiles"),g=await d.json().catch(()=>({}));if(!c)return;if(!d.ok)throw new Error(g?.error??String(d.status));let v=(Array.isArray(g.profiles)?g.profiles:[]).filter(m=>(m.botEntries??[]).some(b=>b?.larkAppId===a.appId&&b?.hasEntry)).map(m=>({profileId:String(m.profileId)}));r({loaded:!0,loading:!1,items:v})}catch(d){c&&r({loaded:!0,loading:!1,error:$(d),items:[]})}})(),()=>{c=!1}},[a.appId]);async function u(c){let d=o.items.find(g=>g.profileId===c);if(!(!d||d.loaded||d.loading)){r(g=>({...g,items:g.items.map(n=>n.profileId===c?{...n,loading:!0}:n)}));try{let g=await fetch(`/api/role-profiles/${encodeURIComponent(c)}/${encodeURIComponent(a.appId)}`),n=await g.json().catch(()=>({}));if(!g.ok)throw new Error(n?.error??String(g.status));r(v=>({...v,items:v.items.map(m=>m.profileId===c?{...m,loading:!1,loaded:!0,content:n?.hasEntry?String(n.content??""):""}:m)}))}catch(g){r(n=>({...n,items:n.items.map(v=>v.profileId===c?{...v,loading:!1,error:$(g)}:v)}))}}}let i;return o.loading?i=(0,e.jsx)(nt,{label:t("common.loading"),compact:!0}):o.error?i=(0,e.jsx)("p",{className:"hint-warn-inline",children:t("botDefaults.profileRolesLoadFailed",{error:o.error})}):o.items.length===0?i=(0,e.jsx)("p",{className:"empty",children:t("botDefaults.profileRolesEmpty")}):i=o.items.map(c=>(0,e.jsxs)("details",{className:"bd-profile-role-entry","data-profile-id":c.profileId,onToggle:d=>{d.currentTarget.open&&u(c.profileId)},children:[(0,e.jsx)("summary",{children:(0,e.jsx)("span",{className:"bd-profile-role-id",children:c.profileId})}),(0,e.jsx)("div",{className:"bd-profile-role-content","data-profile-role-body":c.profileId,children:c.loading?(0,e.jsx)(nt,{label:t("common.loading"),compact:!0}):c.error?(0,e.jsx)("p",{className:"hint-warn-inline",children:t("botDefaults.profileRoleDetailLoadFailed",{error:c.error})}):c.loaded?(0,e.jsx)("pre",{children:c.content??""}):(0,e.jsx)("p",{className:"empty",children:t("botDefaults.profileRoleClickToLoad")})})]},c.profileId)),(0,e.jsxs)("div",{className:"bd-profile-roles","data-profile-roles":!0,children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:(0,e.jsx)(P,{help:t("botDefaults.profileRolesHelp"),children:t("botDefaults.profileRoles")})}),(0,e.jsx)("div",{className:"bd-profile-role-list","data-profile-role-list":!0,children:i})]})}function ce(a){let t=A(),{bot:o,putCardPref:r}=a,[u,i]=(0,s.useState)(o.disableStreamingCard===!0),[c,d]=(0,s.useState)(o.silentTurnReactions===!0),[g,n]=(0,s.useState)(o.writableTerminalLinkInCard===!0),[v,m]=(0,s.useState)(o.privateCard===!0),[b,f]=(0,s.useState)(null),[S,D]=(0,s.useState)(null);(0,s.useEffect)(()=>{i(o.disableStreamingCard===!0),d(o.silentTurnReactions===!0),n(o.writableTerminalLinkInCard===!0),m(o.privateCard===!0)},[o.disableStreamingCard,o.privateCard,o.silentTurnReactions,o.writableTerminalLinkInCard]);async function y(h,C){D(C),f(null);try{let k=await r(h);f(k.ok?{text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}:{text:`\u2717 ${L(k)}`})}catch(k){f({text:`\u2717 ${$(k)}`})}finally{D(null)}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionCard")}),(0,e.jsxs)("div",{className:"bd-toggle-grid bd-card-behavior-grid",children:[(0,e.jsx)(J,{checked:u,disabled:S==="streaming",dataAction:"toggle-disable-streaming",title:t("botDefaults.disableStreaming"),help:t("botDefaults.disableStreamingHelp"),onChange:h=>{i(h),y({disableStreamingCard:h},"streaming")}}),(0,e.jsx)(J,{checked:c,disabled:!u||S==="silent",dataAction:"toggle-silent-reactions",title:t("botDefaults.silentTurnReactions"),help:t("botDefaults.silentTurnReactionsHelp"),onChange:h=>{d(h),y({silentTurnReactions:h},"silent")}}),(0,e.jsx)(J,{checked:g,disabled:u||S==="writable",dataAction:"toggle-writable-link",title:t("botDefaults.writableLink"),help:t("botDefaults.writableLinkHelp"),onChange:h=>{n(h),y({writableTerminalLinkInCard:h},"writable")}}),(0,e.jsx)(J,{checked:v,disabled:S==="private",dataAction:"toggle-private-card",title:t("botDefaults.privateCard"),help:t("botDefaults.privateCardHelp"),onChange:h=>{m(h),y({privateCard:h},"private")}})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("small",{"data-card-pref-moot":!0,className:"hint-warn-inline",hidden:!u,children:t("botDefaults.writableLinkMoot")}),(0,e.jsx)(O,{status:b,attr:{"data-card-pref-status":""}})]})]})}function be(a){let t=A(),[o,r]=(0,s.useState)(a.bot.codexAppCleanInput===!0),[u,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>r(a.bot.codexAppCleanInput===!0),[a.bot.codexAppCleanInput]);async function g(n){let v=o;r(n),d(!0),i(null);try{let m=await a.putCardPref({codexAppCleanInput:n});m.ok?i({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}):(r(v),i({text:`\u2717 ${L(m)}`}))}catch(m){r(v),i({text:`\u2717 ${$(m)}`})}finally{d(!1)}}return(0,e.jsxs)("section",{className:"bd-section","data-codex-app-display":!0,children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionCodexAppDisplay")}),(0,e.jsx)(J,{checked:o,disabled:c,dataAction:"toggle-codex-app-clean-input",title:t("botDefaults.codexAppCleanInput"),help:t("botDefaults.codexAppCleanInputHelp"),onChange:n=>{g(n)}}),(0,e.jsx)("small",{className:"bd-section-note",children:t("botDefaults.codexAppCleanInputCompat")}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:u,attr:{"data-codex-app-clean-input-status":""}})})]})}function fe(a){let t=A(),[o,r]=(0,s.useState)(a.bot.botToBotSameDir!==!1),[u,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>r(a.bot.botToBotSameDir!==!1),[a.bot.botToBotSameDir]);async function g(n){r(n),d(!0),i(null);try{let v=await a.putCardPref({botToBotSameDir:n});i(v.ok?{text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}:{text:`\u2717 ${L(v)}`})}catch(v){i({text:`\u2717 ${$(v)}`})}finally{d(!1)}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionCrossBot")}),(0,e.jsx)(J,{checked:o,disabled:c,dataAction:"toggle-cross-bot-samedir",title:t("botDefaults.botToBotSameDir"),help:t("botDefaults.botToBotSameDirHelp"),onChange:n=>{g(n)}}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:u,attr:{"data-crossbot-status":""}})})]})}function pe(a){let t=A(),o=ft(a.bot),[r,u]=(0,s.useState)(String(o.limit)),[i,c]=(0,s.useState)(String(o.sinceHours)),[d,g]=(0,s.useState)(null),[n,v]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let b=ft(a.bot);u(String(b.limit)),c(String(b.sinceHours))},[a.bot.summaryRange?.limit,a.bot.summaryRange?.sinceHours]);async function m(){g(null);let b=$t(r,50),f=$t(i,24);if(b==null||f==null){g({text:`\u2717 ${t("botDefaults.summaryNumberInvalid")}`});return}v(!0);try{let S=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/summary-range`,{limit:b,sinceHours:f});if(S.ok&&S.body.ok){let D=S.body.summaryRange??{limit:b,sinceHours:f},y=ft({...a.bot,summaryRange:D});u(String(y.limit)),c(String(y.sinceHours)),a.patchBot(a.bot.larkAppId,{summaryRange:D}),g({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else g({text:`\u2717 ${L(S)}`})}catch(S){g({text:`\u2717 ${$(S)}`})}finally{v(!1)}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:(0,e.jsx)(P,{help:t("botDefaults.summaryLimitHelp"),children:t("botDefaults.sectionSummaryTrigger")})}),(0,e.jsxs)("div",{className:"bd-row bd-summary-limits",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.summaryLimit")}),(0,e.jsx)("input",{type:"number",min:0,step:1,"data-input":"summaryLimit",value:r,disabled:n,onChange:b=>u(b.currentTarget.value)})]}),(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.summarySinceHours")}),(0,e.jsx)("input",{type:"number",min:0,step:1,"data-input":"summarySinceHours",value:i,disabled:n,onChange:b=>c(b.currentTarget.value)})]})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-summary-trigger",disabled:n,onClick:()=>{m()},children:t("botDefaults.summarySave")}),(0,e.jsx)(O,{status:d,attr:{"data-summary-trigger-status":""}})]})]})}function ft(a){let t=a.summaryRange??{limit:50,sinceHours:24};return{limit:Number.isInteger(t.limit)&&Number(t.limit)>=0?Number(t.limit):50,sinceHours:Number.isInteger(t.sinceHours)&&Number(t.sinceHours)>=0?Number(t.sinceHours):24}}function me(a){let t=A(),[o,r]=(0,s.useState)(a.bot.p2pMode==="chat"?"chat":"thread"),[u,i]=(0,s.useState)(Ft(a.bot)),[c,d]=(0,s.useState)(Ut(a.bot)),[g,n]=(0,s.useState)(a.bot.docSubscribeDefaultMode==="all"?"all":"mention-only"),[v,m]=(0,s.useState)(null),[b,f]=(0,s.useState)(null),[S,D]=(0,s.useState)(null),[y,h]=(0,s.useState)(null),[C,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{r(a.bot.p2pMode==="chat"?"chat":"thread"),i(Ft(a.bot)),d(Ut(a.bot)),n(a.bot.docSubscribeDefaultMode==="all"?"all":"mention-only")},[a.bot.docSubscribeDefaultMode,a.bot.p2pMode,a.bot.regularGroupMentionMode,a.bot.regularGroupReplyMode]);async function T(G){let E=G==="chat"?"chat":"thread";r(E),m("p2p"),f(null);try{let I=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/p2p-mode`,{p2pMode:E});I.ok&&I.body.ok?(a.patchBot(a.bot.larkAppId,{p2pMode:I.body.p2pMode==="chat"?"chat":"thread"}),f({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})):f({text:`\u2717 ${L(I)}`})}catch(I){f({text:`\u2717 ${$(I)}`})}finally{m(null)}}async function w(G,E,I){m(G),I(null);try{let F=await a.putCardPref(E);I(F.ok?{text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0}:{text:`\u2717 ${L(F)}`})}catch(F){I({text:`\u2717 ${$(F)}`})}finally{m(null)}}let p=[{value:"thread",label:t("botDefaults.p2pThread")},{value:"chat",label:t("botDefaults.p2pChat")}],U=[{value:"chat",label:t("botDefaults.regularGroupModeChat")},{value:"chat-topic",label:t("botDefaults.regularGroupModeChatTopic")},{value:"new-topic",label:t("botDefaults.regularGroupModeNewTopic")},{value:"shared",label:t("botDefaults.regularGroupModeShared")}],M=[{value:"always",label:t("botDefaults.mentionModeAlways")},{value:"topic",label:t("botDefaults.mentionModeTopic")},{value:"never",label:t("botDefaults.mentionModeNever")},{value:"ambient",label:t("botDefaults.mentionModeAmbient")}],K=[{value:"mention-only",label:t("botDefaults.docSubscribeModeMention")},{value:"all",label:t("botDefaults.docSubscribeModeAll")}];return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionSessionMode")}),(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.p2pHelp"),children:t("botDefaults.p2pMode")}),(0,e.jsx)(V,{dataInput:"p2pMode",ariaLabel:t("botDefaults.p2pMode"),value:o,disabled:v==="p2p",options:p,onChange:G=>{T(G)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:b,attr:{"data-p2p-status":""}})})]}),(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.regularGroupModeHelp"),children:t("botDefaults.regularGroupMode")}),(0,e.jsx)(V,{dataInput:"regularGroupMode",ariaLabel:t("botDefaults.regularGroupMode"),value:u,disabled:v==="regular",options:U,onChange:G=>{i(G),w("regular",{regularGroupReplyMode:G},D)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:S,attr:{"data-regular-group-status":""}})})]}),(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.mentionModeHelp"),children:t("botDefaults.mentionMode")}),(0,e.jsx)(V,{dataInput:"regularGroupMentionMode",ariaLabel:t("botDefaults.mentionMode"),value:c,disabled:v==="mention",options:M,onChange:G=>{d(G),w("mention",{regularGroupMentionMode:G},h)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:y,attr:{"data-mention-mode-status":""}})})]}),(0,e.jsxs)("div",{className:"bd-row",children:[(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.docSubscribeModeHelp"),children:t("botDefaults.docSubscribeMode")}),(0,e.jsx)(V,{dataInput:"docSubscribeDefaultMode",ariaLabel:t("botDefaults.docSubscribeMode"),value:g,disabled:v==="doc",options:K,onChange:G=>{n(G),w("doc",{docSubscribeDefaultMode:G},k)}})]}),(0,e.jsx)("div",{className:"actions",children:(0,e.jsx)(O,{status:C,attr:{"data-doc-subscribe-mode-status":""}})})]})]})}function ge(a){let t=A(),o=a.bot.substituteMode??null,[r,u]=(0,s.useState)(o?.enabled===!0);function i(l){switch(l){case"cross_app_open_id":return t("botDefaults.substituteReasonCrossAppOpenId");case"not_visible":return t("botDefaults.substituteReasonNotVisible");case"resolve_failed":return t("botDefaults.substituteReasonResolveFailed");case"unresolvable":return t("botDefaults.substituteReasonUnresolvable");default:return t("botDefaults.substituteUnresolved")}}let[c,d]=(0,s.useState)(o?.disclosure==="none"?"none":"prefix"),[g,n]=(0,s.useState)(o?.replyMode==="quote"?"quote":"thread"),[v,m]=(0,s.useState)(o?.disableControlCard!==!0),[b,f]=(0,s.useState)(()=>bt(o?.chats)),[S,D]=(0,s.useState)(o?.topicGroups!==!1),[y,h]=(0,s.useState)(o?.topicActiveSessionTrigger!==!1),[C,k]=(0,s.useState)(null),[T,w]=(0,s.useState)(!1),p=(0,s.useRef)(0),U=(0,s.useRef)(!1);function M(l){let N=qt(l);return{key:++p.current,idField:N,idValue:l?.[N]??"",name:l?.name??"",persisted:l?{...l}:{},originalIdField:l?N:void 0,resolution:l?.name||l?.avatarUrl?{ok:!0,name:l.name,avatarUrl:l.avatarUrl}:void 0}}let K=(0,s.useRef)(new Map);async function G(l){let N=(K.current.get(l)??0)+1;K.current.set(l,N);let x=()=>K.current.get(l)===N;I(R=>R.map(B=>B.key===l?{...B,resolving:!0}:B));try{let R=E.find(Q=>Q.key===l);if(!R)return;let B=R.idValue.trim();if(!B){I(Q=>Q.map(q=>q.key===l?{...q,resolving:!1,resolution:void 0}:q));return}let j={[R.idField]:B};R.name.trim()&&(j.name=R.name.trim());let Z=await Pt(a.bot.larkAppId,j);if(!x())return;I(Q=>Q.map(q=>{if(q.key!==l)return q;if(!Z.ok)return{...q,resolving:!1,resolution:{ok:!1}};let _=Z.resolution;if(_?.ok===!0){if(!_.openId)return{...q,resolving:!1,resolution:void 0};let W={...q.persisted};return W.openId=_.openId,_.name&&(W.name=_.name),_.avatarUrl&&(W.avatarUrl=_.avatarUrl),{...q,name:_.name??q.name,persisted:W,resolving:!1,resolution:{ok:!0,name:_.name,avatarUrl:_.avatarUrl}}}return{...q,resolving:!1,resolution:{ok:!1,reason:_?.reason}}}))}catch{if(!x())return;I(R=>R.map(B=>B.key===l?{...B,resolving:!1,resolution:{ok:!1}}:B))}}let[E,I]=(0,s.useState)(()=>{let l=o?.targets??[];return l.length?l.map(N=>M(N)):[M()]});(0,s.useEffect)(()=>{if(U.current){U.current=!1;return}let l=a.bot.substituteMode??null;u(l?.enabled===!0),d(l?.disclosure==="none"?"none":"prefix"),n(l?.replyMode==="quote"?"quote":"thread"),m(l?.disableControlCard!==!0),f(bt(l?.chats)),D(l?.topicGroups!==!1),h(l?.topicActiveSessionTrigger!==!1);let N=l?.targets??[];I(N.length?N.map(x=>M(x)):[M()])},[a.bot.larkAppId,a.bot.substituteMode]);async function F(l){w(!0),k(null);try{let N=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/substitute-mode`,l);if(N.ok&&N.body.ok){let x=N.body.substituteMode&&typeof N.body.substituteMode=="object"?N.body.substituteMode:null,R=Array.isArray(N.body?.resolution)?N.body.resolution:[],B=R.filter(j=>j?.ok===!1).map(j=>String(j.input??"").trim()).filter(Boolean);if(u(x?.enabled===!0),d(x?.disclosure==="none"?"none":"prefix"),n(x?.replyMode==="quote"?"quote":"thread"),m(x?.disableControlCard!==!0),f(bt(x?.chats)),D(x?.topicGroups!==!1),h(x?.topicActiveSessionTrigger!==!1),R.length)U.current=!0,I(j=>{let Z=[...R];return j.map(Q=>{let q=Q.idValue.trim(),_=Z.findIndex(tt=>String(tt.input??"").trim()===q);if(_<0)return Q;let W=Z.splice(_,1)[0];if(W?.ok===!0){let tt={...Q.persisted};return W.openId&&(tt.openId=W.openId),Q.idField==="email"&&(tt.email=q),W.name&&(tt.name=W.name),W.avatarUrl&&(tt.avatarUrl=W.avatarUrl),{...Q,name:W.name??Q.name,persisted:tt,resolution:{ok:!0,name:W.name,avatarUrl:W.avatarUrl}}}return{...Q,resolution:{ok:!1,reason:W?.reason}}})});else{let j=x?.targets??[];I(j.length?j.map(Z=>M(Z)):[M()])}a.patchBot(a.bot.larkAppId,{substituteMode:x}),k(B.length?{text:`\u2717 ${t("botDefaults.substituteTargetsInvalid")}: ${B.join(", ")}`}:{text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else{let x=Array.isArray(N.body?.resolution)?N.body.resolution.filter(R=>R?.ok===!1).map(R=>String(R.input??"").trim()).filter(Boolean):[];k({text:x.length?`\u2717 ${t("botDefaults.substituteTargetsInvalid")}: ${x.join(", ")}`:`\u2717 ${L(N)}`})}}catch(N){k({text:`\u2717 ${$(N)}`})}finally{w(!1)}}function z(){let l=[],N=!1;for(let x of E){let R=Jt(x);if(!R){N||=!!x.name.trim();continue}l.push(R)}if(N||r&&l.length===0){k({text:`\u2717 ${t("botDefaults.substituteTargetsInvalid")}`});return}F({enabled:r,targets:l,disclosure:c,chats:Wt(b),replyMode:g,disableControlCard:!v,topicGroups:S,topicActiveSessionTrigger:y})}let X=[{value:"prefix",label:t("botDefaults.substituteDisclosurePrefix")},{value:"none",label:t("botDefaults.substituteDisclosureNone")}],Y=[{value:"thread",label:t("botDefaults.substituteReplyModeThread")},{value:"quote",label:t("botDefaults.substituteReplyModeQuote")}];return(0,e.jsxs)("section",{className:"bd-section bd-substitute-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionSubstitute")}),(0,e.jsx)(J,{checked:r,disabled:T,dataAction:"toggle-substitute-mode",title:t("botDefaults.substituteEnabled"),help:t("botDefaults.substituteHelp"),onChange:u}),(0,e.jsx)(J,{checked:S,disabled:T,dataAction:"toggle-substitute-topic-groups",title:t("botDefaults.substituteTopicGroups"),help:t("botDefaults.substituteTopicGroupsHelp"),onChange:D}),(0,e.jsx)(J,{checked:y,disabled:T||!S,dataAction:"toggle-substitute-topic-active",title:t("botDefaults.substituteTopicActive"),help:t("botDefaults.substituteTopicActiveHelp"),onChange:h}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{children:t("botDefaults.substituteDisclosure")}),(0,e.jsx)(V,{dataInput:"substituteDisclosure",ariaLabel:t("botDefaults.substituteDisclosure"),value:c,disabled:T,options:X,onChange:l=>d(l)})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)(P,{help:t("botDefaults.substituteReplyModeHelp"),children:t("botDefaults.substituteReplyMode")}),(0,e.jsx)(V,{dataInput:"substituteReplyMode",ariaLabel:t("botDefaults.substituteReplyMode"),value:g,disabled:T,options:Y,onChange:l=>n(l)})]})}),(0,e.jsx)(J,{checked:v,disabled:T,dataAction:"toggle-substitute-control-card",title:t("botDefaults.substituteControlCard"),help:t("botDefaults.substituteControlCardHelp"),onChange:m}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)(P,{help:t("botDefaults.substituteChatsHelp"),children:t("botDefaults.substituteChats")}),(0,e.jsx)("textarea",{"data-input":"substituteChats",rows:3,placeholder:t("botDefaults.substituteChatsPlaceholder"),value:b,disabled:T,onChange:l=>f(l.currentTarget.value)})]})}),(0,e.jsxs)("div",{className:"bd-row bd-substitute-targets",children:[(0,e.jsx)(P,{help:t("botDefaults.substituteTargetsHelp"),children:t("botDefaults.substituteTargets")}),(0,e.jsxs)("div",{className:"bd-substitute-target-list","data-input":"substituteTargets",children:[E.map((l,N)=>(0,e.jsxs)("div",{className:"bd-substitute-target-row",children:[(0,e.jsx)(V,{dataInput:`substituteTargetType-${l.key}`,className:"bd-substitute-target-type",ariaLabel:`${t("botDefaults.substituteTargetType")} ${N+1}`,value:l.idField,disabled:T,options:mt.map(x=>({value:x,label:t(`botDefaults.substituteTarget${x[0].toUpperCase()}${x.slice(1)}`)})),onChange:x=>{I(R=>R.map(B=>B.key===l.key?{...B,idField:x,idValue:B.persisted[x]??"",resolution:void 0}:B))}}),(0,e.jsx)("input",{className:"bd-substitute-target-id",type:"text","data-input":`substituteTargetId-${l.key}`,"aria-label":`${t("botDefaults.substituteTargetType")} ${N+1}`,placeholder:t("botDefaults.substituteTargetIdPlaceholder"),value:l.idValue,disabled:T,onChange:x=>{let R=x.currentTarget.value;I(B=>B.map(j=>j.key===l.key?{...j,idValue:R,resolution:void 0}:j))},onBlur:()=>{l.idValue.trim()&&G(l.key)}}),(0,e.jsx)("div",{className:"bd-substitute-target-name",children:l.resolving?(0,e.jsx)("span",{className:"bd-substitute-target-resolving",children:t("botDefaults.substituteResolving")}):l.resolution?.ok===!0&&(l.name||l.resolution.avatarUrl)?(0,e.jsxs)(e.Fragment,{children:[l.resolution.avatarUrl?(0,e.jsx)(at,{html:et({name:l.resolution.name,avatarUrl:l.resolution.avatarUrl,size:"sm"})}):null,(0,e.jsx)("span",{className:"bd-substitute-target-name-chip","data-chip":`substituteTargetName-${l.key}`,"aria-label":`${t("botDefaults.substituteTargetName")} ${N+1}`,children:l.name})]}):l.resolution?.ok===!1?(0,e.jsx)("span",{className:"bd-substitute-target-resolution-badge",children:i(l.resolution.reason)}):(0,e.jsx)("input",{type:"text","data-input":`substituteTargetName-${l.key}`,"aria-label":`${t("botDefaults.substituteTargetName")} ${N+1}`,placeholder:t("botDefaults.substituteTargetNamePlaceholder"),value:l.name,disabled:T,onChange:x=>{let R=x.currentTarget.value;I(B=>B.map(j=>j.key===l.key?{...j,name:R}:j))}})}),(0,e.jsx)("button",{type:"button",className:"bd-substitute-target-remove","data-action":"remove-substitute-target",title:t("botDefaults.substituteTargetRemove"),"aria-label":t("botDefaults.substituteTargetRemove"),disabled:T,onClick:()=>{I(x=>{let R=x.filter(B=>B.key!==l.key);return R.length?R:[M()]})},children:(0,e.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]},l.key)),(0,e.jsx)("button",{type:"button",className:"bd-substitute-target-add","data-action":"add-substitute-target",title:t("botDefaults.substituteTargetAdd"),"aria-label":t("botDefaults.substituteTargetAdd"),disabled:T,onClick:()=>I(l=>[...l,M()]),children:(0,e.jsx)("span",{"aria-hidden":"true",children:"+"})})]})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-substitute-mode",disabled:T,onClick:z,children:t("botDefaults.substituteSave")}),(0,e.jsx)("button",{type:"button","data-action":"off-substitute-mode",disabled:T,onClick:()=>{F({enabled:!1,targets:[]})},children:t("botDefaults.substituteOff")}),(0,e.jsx)(O,{status:C,attr:{"data-substitute-status":""}})]})]})}function Ft(a){return a.regularGroupReplyMode==="new-topic"||a.regularGroupReplyMode==="shared"||a.regularGroupReplyMode==="chat-topic"?a.regularGroupReplyMode:"chat"}function Ut(a){return a.regularGroupMentionMode==="topic"||a.regularGroupMentionMode==="never"||a.regularGroupMentionMode==="ambient"?a.regularGroupMentionMode:"always"}function ve(a){let t=A(),o=typeof a.bot.maxLiveWorkers=="number"?a.bot.maxLiveWorkers:null,r=Number.isFinite(a.bot.logicalSessionCount)?Number(a.bot.logicalSessionCount):0,u=Number.isFinite(a.bot.residentSessionCount)?Number(a.bot.residentSessionCount):0,i=Number.isFinite(a.bot.dormantSessionCount)?Number(a.bot.dormantSessionCount):0,[c,d]=(0,s.useState)(o),g=c??30,[n,v]=(0,s.useState)(o==null?"":String(o)),[m,b]=(0,s.useState)(null),[f,S]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let h=typeof a.bot.maxLiveWorkers=="number"?a.bot.maxLiveWorkers:null;d(h),v(h==null?"":String(h))},[a.bot.maxLiveWorkers]);async function D(h){b(null),S(!0);try{let C=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/max-live-workers`,{maxLiveWorkers:h});if(C.ok&&C.body.ok){let k=typeof C.body.maxLiveWorkers=="number"?C.body.maxLiveWorkers:null;d(k),v(k==null?"":String(k)),a.patchBot(a.bot.larkAppId,{maxLiveWorkers:k}),b({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else b({text:`\u2717 ${L(C)}`})}catch(C){b({text:`\u2717 ${$(C)}`})}finally{S(!1)}}function y(){let h=Gt(n);if(h==="invalid"){b({text:`\u2717 ${t("botDefaults.maxLiveWorkersInvalid")}`});return}D(h)}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:t("botDefaults.sectionSessionCap")}),(0,e.jsxs)("div",{className:"bd-row bd-quota",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)(P,{help:t("botDefaults.maxLiveWorkersHelp"),children:t("botDefaults.maxLiveWorkers")}),(0,e.jsx)("input",{type:"number",min:1,step:1,"data-input":"maxLiveWorkers",placeholder:t("botDefaults.maxLiveWorkersPlaceholder"),value:n,disabled:f,onChange:h=>v(h.currentTarget.value)})]}),(0,e.jsx)("small",{"data-session-cap-state":!0,children:Kt(c,t)}),(0,e.jsx)("small",{className:"bd-help bd-session-residency",children:t("botDefaults.maxLiveWorkersUsage",{resident:u,cap:g,dormant:i,logical:r})})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-session-cap",disabled:f,onClick:y,children:t("botDefaults.maxLiveWorkersSave")}),(0,e.jsx)("button",{type:"button","data-action":"off-session-cap",disabled:f,onClick:()=>{v(""),D(null)},children:t("botDefaults.maxLiveWorkersOff")}),(0,e.jsx)(O,{status:m,attr:{"data-session-cap-status":""}})]})]})}function ye(a){let t=A(),[o,r]=(0,s.useState)(typeof a.bot.startupCommands=="string"?a.bot.startupCommands:""),[u,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>r(typeof a.bot.startupCommands=="string"?a.bot.startupCommands:""),[a.bot.startupCommands]);async function g(){i(null),d(!0);try{let n=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/startup-commands`,{startupCommands:o});if(n.ok&&n.body.ok){let v=typeof n.body.startupCommands=="string"?n.body.startupCommands:"";r(v),a.patchBot(a.bot.larkAppId,{startupCommands:v}),i({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else i({text:`\u2717 ${L(n)}`})}catch(n){i({text:`\u2717 ${$(n)}`})}finally{d(!1)}}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:(0,e.jsx)(P,{help:t("botDefaults.startupCommandsHelp"),children:t("botDefaults.sectionStartupCommands")})}),(0,e.jsx)("textarea",{"data-input":"startupCommands",rows:3,placeholder:t("botDefaults.startupCommandsPlaceholder"),value:o,disabled:c,onChange:n=>r(n.currentTarget.value)}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-startup-commands",disabled:c,onClick:()=>{g()},children:t("botDefaults.startupCommandsSave")}),(0,e.jsx)(O,{status:u,attr:{"data-startup-commands-status":""}})]})]})}function he(a){let t=A(),[o,r]=(0,s.useState)(typeof a.bot.launchShell=="string"?a.bot.launchShell:""),[u,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>r(typeof a.bot.launchShell=="string"?a.bot.launchShell:""),[a.bot.launchShell]);async function g(){i(null),d(!0);try{let n=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/launch-shell`,{launchShell:o});if(n.ok&&n.body.ok){let v=typeof n.body.launchShell=="string"?n.body.launchShell:"";r(v),a.patchBot(a.bot.larkAppId,{launchShell:v}),i({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else i({text:`\u2717 ${L(n)}`})}catch(n){i({text:`\u2717 ${$(n)}`})}finally{d(!1)}}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:(0,e.jsx)(P,{help:t("botDefaults.launchShellHelp"),children:t("botDefaults.sectionLaunchShell")})}),(0,e.jsx)("input",{type:"text","data-input":"launchShell",placeholder:t("botDefaults.launchShellPlaceholder"),value:o,disabled:c,onChange:n=>r(n.currentTarget.value)}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-launch-shell",disabled:c,onClick:()=>{g()},children:t("botDefaults.launchShellSave")}),(0,e.jsx)(O,{status:u,attr:{"data-launch-shell-status":""}})]})]})}function ke(a){let t=A(),[o,r]=(0,s.useState)(typeof a.bot.env=="string"?a.bot.env:""),[u,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>r(typeof a.bot.env=="string"?a.bot.env:""),[a.bot.env]);async function g(){i(null),d(!0);try{let n=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/env`,{env:o});if(n.ok&&n.body.ok){let v=typeof n.body.env=="string"?n.body.env:"";r(v),a.patchBot(a.bot.larkAppId,{env:v}),i({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else i({text:`\u2717 ${L(n)}`})}catch(n){i({text:`\u2717 ${$(n)}`})}finally{d(!1)}}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:(0,e.jsx)(P,{help:t("botDefaults.envHelp"),children:t("botDefaults.sectionEnv")})}),(0,e.jsx)("textarea",{"data-input":"env",rows:5,placeholder:t("botDefaults.envPlaceholder"),value:o,disabled:c,onChange:n=>r(n.currentTarget.value)}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-env",disabled:c,onClick:()=>{g()},children:t("botDefaults.envSave")}),(0,e.jsx)(O,{status:u,attr:{"data-env-status":""}})]})]})}var De=["gpt-5.5","gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.4","gpt-5.4-pro"],Se=["","low","medium","high","xhigh"],Ce=["boe","cn"];function Ie(a){let t=A(),o=a.bot.riff&&typeof a.bot.riff=="object"?a.bot.riff:{},[r,u]=(0,s.useState)(typeof o.baseUrl=="string"?o.baseUrl:""),[i,c]=(0,s.useState)(o.sandboxCluster==="cn"?"cn":"boe"),[d,g]=(0,s.useState)(typeof o.model=="string"?o.model:""),[n,v]=(0,s.useState)(typeof o.reasoningEffort=="string"?o.reasoningEffort:""),[m,b]=(0,s.useState)(typeof o.jwtEnv=="string"?o.jwtEnv:""),[f,S]=(0,s.useState)(typeof o.systemPrompt=="string"?o.systemPrompt:""),[D,y]=(0,s.useState)(Array.isArray(o.setupCommands)?o.setupCommands.join(`
|
|
3
|
-
`):""),[h,C]=(0,s.useState)(null),[k,T]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let p=a.bot.riff&&typeof a.bot.riff=="object"?a.bot.riff:{};u(typeof p.baseUrl=="string"?p.baseUrl:""),c(p.sandboxCluster==="cn"?"cn":"boe"),g(typeof p.model=="string"?p.model:""),v(typeof p.reasoningEffort=="string"?p.reasoningEffort:""),b(typeof p.jwtEnv=="string"?p.jwtEnv:""),S(typeof p.systemPrompt=="string"?p.systemPrompt:""),y(Array.isArray(p.setupCommands)?p.setupCommands.join(`
|
|
4
|
-
`):"")},[a.bot.riff]);async function w(){C(null),T(!0);try{let p={};r.trim()&&(p.baseUrl=r.trim()),p.sandboxCluster=i,d.trim()&&(p.model=d.trim()),n&&(p.reasoningEffort=n),m.trim()&&(p.jwtEnv=m.trim()),f.trim()&&(p.systemPrompt=f.trim()),D.trim()&&(p.setupCommands=D.split(`
|
|
5
|
-
`).map(K=>K.trim()).filter(Boolean));let U=Object.keys(p).length?JSON.stringify(p):"",M=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/riff`,{riff:U});if(M.ok&&M.body.ok){let K=typeof M.body.riff=="string"&&M.body.riff?JSON.parse(M.body.riff):null;if(a.patchBot(a.bot.larkAppId,{riff:K}),a.persistCliSelection&&!await a.persistCliSelection()){C({text:`\u2717 ${t("botDefaults.riffCliPersistFailed")}`});return}C({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else C({text:`\u2717 ${L(M)}`})}catch(p){C({text:`\u2717 ${$(p)}`})}finally{T(!1)}}return(0,e.jsxs)("div",{className:"bd-subsection",children:[(0,e.jsx)("h4",{className:"bd-subsection-title",children:(0,e.jsx)(P,{help:t("botDefaults.riffHelp"),children:t("botDefaults.sectionRiff")})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.riffBaseUrl")}),(0,e.jsx)("input",{type:"text","data-input":"riff-base-url",placeholder:t("botDefaults.riffBaseUrlPlaceholder"),value:r,disabled:k,onChange:p=>u(p.currentTarget.value)})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)("span",{children:(0,e.jsx)(P,{help:t("botDefaults.riffSandboxClusterHelp"),children:t("botDefaults.riffSandboxCluster")})}),(0,e.jsx)(V,{dataInput:"riff-sandbox-cluster",ariaLabel:t("botDefaults.riffSandboxCluster"),value:i,disabled:k,options:Ce.map(p=>({value:p,label:p.toUpperCase()})),onChange:p=>c(p)})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:(0,e.jsx)(P,{help:t("botDefaults.riffModelHelp"),children:t("botDefaults.riffModel")})}),(0,e.jsx)("input",{type:"text","data-input":"riff-model",list:`riff-model-suggestions-${a.bot.larkAppId}`,placeholder:t("botDefaults.riffModelPlaceholder"),value:d,disabled:k,onChange:p=>g(p.currentTarget.value)}),(0,e.jsx)("datalist",{id:`riff-model-suggestions-${a.bot.larkAppId}`,children:De.map(p=>(0,e.jsx)("option",{value:p},p))})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("div",{className:"bd-field",children:[(0,e.jsx)("span",{children:(0,e.jsx)(P,{help:t("botDefaults.riffReasoningEffortHelp"),children:t("botDefaults.riffReasoningEffort")})}),(0,e.jsx)(V,{dataInput:"riff-reasoning-effort",ariaLabel:t("botDefaults.riffReasoningEffort"),value:n,disabled:k,options:Se.map(p=>({value:p,label:p===""?t("botDefaults.riffReasoningEffortDefault"):p})),onChange:p=>v(p)})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:(0,e.jsx)(P,{help:t("botDefaults.riffJwtEnvHelp"),children:t("botDefaults.riffJwtEnv")})}),(0,e.jsx)("input",{type:"text","data-input":"riff-jwt-env",placeholder:t("botDefaults.riffJwtEnvPlaceholder"),value:m,disabled:k,onChange:p=>b(p.currentTarget.value)})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.riffSystemPrompt")}),(0,e.jsx)("textarea",{"data-input":"riff-system-prompt",placeholder:t("botDefaults.riffSystemPromptPlaceholder"),value:f,disabled:k,onChange:p=>S(p.currentTarget.value),rows:4})]})}),(0,e.jsx)("div",{className:"bd-row",children:(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:t("botDefaults.riffSetupCommands")}),(0,e.jsx)("textarea",{"data-input":"riff-setup-commands",placeholder:t("botDefaults.riffSetupCommandsPlaceholder"),value:D,disabled:k,onChange:p=>y(p.currentTarget.value),rows:3})]})}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-riff",disabled:k,onClick:()=>{w()},children:t("botDefaults.riffSave")}),(0,e.jsx)(O,{status:h,attr:{"data-riff-status":""}})]})]})}function Ne(a){let t=A(),o=a.bot.brandLabel??null,[r,u]=(0,s.useState)(o),[i,c]=(0,s.useState)(o??""),[d,g]=(0,s.useState)(null),[n,v]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let b=a.bot.brandLabel??null;u(b),c(b??"")},[a.bot.brandLabel]);async function m(b){g(null),v(!0);try{let f=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/brand-label`,{brandLabel:b});if(f.ok&&f.body.ok){let S=f.body.brandLabel??null;u(S),c(S??""),a.patchBot(a.bot.larkAppId,{brandLabel:S}),g({text:"\u2713",ok:!0})}else g({text:`\u2717 ${L(f)}`})}catch(f){g({text:`\u2717 ${$(f)}`})}finally{v(!1)}}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionBrand")}),(0,e.jsxs)("div",{className:"bd-row bd-brand",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)(P,{help:t("botDefaults.brandLabelHelp"),children:t("botDefaults.brandLabel")}),(0,e.jsx)("input",{type:"text","data-input":"brandLabel",placeholder:t("botDefaults.brandLabelPlaceholder"),value:i,disabled:n,onChange:b=>c(b.currentTarget.value)})]}),(0,e.jsx)("small",{"data-brand-state":!0,children:_t(r,t)})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-brand",disabled:n,onClick:()=>{m(i)},children:t("botDefaults.brandSave")}),(0,e.jsx)("button",{type:"button","data-action":"reset-brand",disabled:n,onClick:()=>{m(null)},children:t("botDefaults.brandReset")}),(0,e.jsx)(O,{status:d,attr:{"data-brand-status":""}})]})]})}function Te(a){let t=A(),[o,r]=(0,s.useState)(a.bot.autoGrantRequestCards!==!1),[u,i]=(0,s.useState)(a.bot.restrictGrantCommands===!0),[c,d]=(0,s.useState)(typeof a.bot.messageQuotaDefaultLimit=="number"?a.bot.messageQuotaDefaultLimit:null),[g,n]=(0,s.useState)(typeof a.bot.messageQuotaDefaultLimit=="number"?String(a.bot.messageQuotaDefaultLimit):""),[v,m]=(0,s.useState)(null),[b,f]=(0,s.useState)(null);(0,s.useEffect)(()=>{r(a.bot.autoGrantRequestCards!==!1),i(a.bot.restrictGrantCommands===!0);let y=typeof a.bot.messageQuotaDefaultLimit=="number"?a.bot.messageQuotaDefaultLimit:null;d(y),n(y==null?"":String(y))},[a.bot.autoGrantRequestCards,a.bot.messageQuotaDefaultLimit,a.bot.restrictGrantCommands]);async function S(y,h){f(h),m(null);try{let C=await H("PUT",`/api/bots/${encodeURIComponent(a.bot.larkAppId)}/grant-prefs`,y);if(C.ok&&C.body.ok){let k=typeof C.body.messageQuotaDefaultLimit=="number"?C.body.messageQuotaDefaultLimit:null;r(C.body.autoGrantRequestCards!==!1),i(C.body.restrictGrantCommands===!0),d(k),"messageQuotaDefaultLimit"in y&&n(k==null?"":String(k)),a.patchBot(a.bot.larkAppId,{autoGrantRequestCards:C.body.autoGrantRequestCards!==!1,restrictGrantCommands:C.body.restrictGrantCommands===!0,messageQuotaDefaultLimit:k}),m({text:`\u2713 ${t("botDefaults.cardPrefSaved")}`,ok:!0})}else m({text:`\u2717 ${L(C)}`})}catch(C){m({text:`\u2717 ${$(C)}`})}finally{f(null)}}function D(){let y=Gt(g);if(y==="invalid"){m({text:`\u2717 ${t("botDefaults.quotaInvalid")}`});return}S({messageQuotaDefaultLimit:y},"quota")}return(0,e.jsxs)("section",{className:"bd-section",children:[(0,e.jsx)("h3",{className:"bd-section-title",children:t("botDefaults.sectionGrant")}),(0,e.jsxs)("div",{className:"bd-toggle-grid bd-grant-toggle-grid",children:[(0,e.jsx)(J,{checked:o,disabled:b==="autoGrant",dataAction:"toggle-auto-grant-card",title:t("botDefaults.autoGrantCard"),help:t("botDefaults.autoGrantCardHelp"),onChange:y=>{r(y),S({autoGrantRequestCards:y},"autoGrant")}}),(0,e.jsx)(J,{checked:u,disabled:b==="restrict",dataAction:"toggle-restrict-grant",title:t("botDefaults.restrictGrant"),help:t("botDefaults.restrictGrantHelp"),onChange:y=>{i(y),S({restrictGrantCommands:y},"restrict")}})]}),(0,e.jsxs)("div",{className:"bd-row bd-quota",children:[(0,e.jsxs)("label",{children:[(0,e.jsx)(P,{help:t("botDefaults.quotaHelp"),children:t("botDefaults.quotaDefault")}),(0,e.jsx)("input",{type:"number",min:1,step:1,"data-input":"quotaLimit",placeholder:t("botDefaults.quotaPlaceholder"),value:g,disabled:b==="quota",onChange:y=>n(y.currentTarget.value)})]}),(0,e.jsx)("small",{"data-quota-state":!0,children:Vt(c,t)})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",className:"primary","data-action":"save-quota",disabled:b==="quota",onClick:D,children:t("botDefaults.quotaSave")}),(0,e.jsx)(O,{status:v,attr:{"data-grant-status":""}})]})]})}function Oe(a){return ht(a,(0,e.jsx)(zt,{}))}export{oe as BotAgentSection,zt as BotDefaultsPage,be as CodexAppDisplaySection,Jt as buildSubstituteTarget,Oe as renderBotDefaultsPage};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as gt,c as ft,h as pt}from"./chunk-DFLNXQNT.js";import{a as wn,c as mt}from"./chunk-SZOB6VK2.js";import{a as dt,b as ut}from"./chunk-QCPPKCX3.js";import{c as Me,g as ct,p as Ue}from"./chunk-QFMH6ITB.js";import{A as rt,C as he,D as Ne,E as ie,G as Ye,a as Be,f as qn,g as Yn,h as Qn,i as Zn,j as yn,k as et,l as nt,m as tt,n as st,o as kn,p as ot,q as at,r as ve,s as o,t as it,u as Ie,w as Te,y as qe}from"./chunk-H7P5UV4W.js";import{a as lt}from"./chunk-SYC6D5XU.js";import{a as Wn,b as Ss,d as Qe}from"./chunk-5THX4DI2.js";import{c as Re}from"./chunk-7SZRL6FY.js";var u=Re(Wn(),1),Pn=Re(Ss(),1);var Cn=[24,72,168],vs=new Set(Cn);function Sn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!vs.has(t)?null:t}function Is(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Ts(e,t=Date.now()){return t-e*60*60*1e3}function Ns(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=Is(e.lastMessageAt);return a!==null&&a<Ts(t,s)}function bt(e,t,s=Date.now()){return e.filter(a=>Ns(a,t,s))}var ht={1:"claude-code",2:"aiden",3:"coco",4:"codex",5:"cursor",6:"gemini",7:"opencode",8:"antigravity",9:"mtr",10:"hermes",11:"codex-app",12:"mira",13:"seed",14:"traex",15:"pi",16:"copilot",17:"oh-my-pi",18:"relay",19:"mir",20:"kimi",21:"genius",22:"grok",23:"kiro-cli",24:"riff"},vo=new Set(Object.values(ht)),Ms={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff"},yt=Object.values(ht).map(e=>({id:e,label:Ms[e]??e}));function Ze(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function vn(e){let t=Ze(e);return t===null?"-":t.toLocaleString("en-US")}var le=[...yt.map(e=>e.id),"unknown"],In=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"starting",labelKey:"sessions.board.starting",hintKey:"sessions.board.startingHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function Tn(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var wt=["starting","working","idle","dormant","analyzing","active","limited","closed"];function Fe(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function Ct(e){let t=0,s=0,a=0;for(let r of e)r?.status!=="closed"&&(t++,typeof r?.workerPid=="number"&&s++,r?.status==="dormant"&&a++);return{logical:t,resident:s,dormant:a}}function Nn(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function kt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function xe(e){let t=String(e?.chatId??"").trim(),s=Ne(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${kt(e)} \xB7 ${s}${a}`:t?`${kt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function Mn(e,t=Ne){return!!String(e?.chatId??"").trim()&&!t(e)}function xn(e){let t=xe(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function St(e){return`${JSON.stringify(e)} ${xe(e)} ${xn(e)}`.toLowerCase()}function re(e){return typeof e=="string"?e.trim():""}function vt(e){let t=re(e?.chatId),s=re(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function An(e){let t=re(e?.chatId),s=re(e?.rootMessageId),a=vt(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(re(e?.sessionId)||"unknown")}`}function xs(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=re(a?.title);if(r)return r}return t}function en(e){let t=new Map;for(let a of e){let r=An(a),m=t.get(r);m?m.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let m=[...r].sort((K,Q)=>Number(Q.lastMessageAt??0)-Number(K.lastMessageAt??0)),g=m[0]??{},d=vt(g),f=re(g.chatId),w=d==="thread"?re(g.rootMessageId):"",I=new Set(m.map(K=>re(K.larkAppId)||re(K.botName)).filter(Boolean)),N=Math.max(1,I.size),T=m.filter(K=>K.status!=="closed").length,P=m.filter(K=>K.lastInputFromBot===!0).length,U=m.reduce((K,Q)=>Math.max(K,Number(Q.lastMessageAt??0)),0),L=w||f||re(g.sessionId)||a;s.push({key:a,kind:d,chatId:f,...w?{rootMessageId:w}:{},title:xs(m,L),rows:m,botCount:N,activeCount:T,closedCount:m.length-T,inferredBotInputCount:P,latestActivityAt:U,multiBot:I.size>1,inferredBotTriggered:P>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var je=gt;function nn(e=ve){return e.authed?!0:(e.publicReadOnly,!1)}var H={pin:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 14.3s4.2-3.9 4.2-7.3A4.2 4.2 0 0 0 8 2.9a4.2 4.2 0 0 0-4.2 4.1C3.8 10.4 8 14.3 8 14.3z"/><circle cx="8" cy="6.9" r="1.5"/></svg>',openChat:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 2.8h3.8v3.8"/><path d="M13.2 2.8 7.3 8.7"/><path d="M11.5 9.3v2.9a1.2 1.2 0 0 1-1.2 1.2H3.8a1.2 1.2 0 0 1-1.2-1.2V5.7a1.2 1.2 0 0 1 1.2-1.2h2.9"/></svg>',details:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="2.4" y="2.6" width="11.2" height="10.8" rx="2"/><path d="M5.2 5.4h5.6"/><path d="M5.2 8h5.6"/><path d="M5.2 10.6h3.2"/></svg>',terminal:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.8" y="2.2" width="12.4" height="10.5" rx="2"/><path d="M1.8 5h12.4"/><circle cx="4" cy="3.6" r=".45" fill="currentColor" stroke="none"/><path d="m4.2 7.3 1.8 1.6-1.8 1.6"/><path d="M8 10.6h3.4"/></svg>',key:'<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="6" cy="6.1" r="3"/><path d="M8.1 8.2 13 13.1"/><path d="M11.3 11.4 12.6 10.1"/><path d="M12.7 12.8 13.7 11.8"/></svg>',lock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.4a2.9 2.9 0 0 1 5.8 0V7"/><path d="M8 9.5v1.4"/></svg>',unlock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.3a2.9 2.9 0 0 1 5.1-1.9"/><path d="M8 9.5v1.4"/></svg>',close:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.2 4.2 11.8 11.8"/><path d="M11.8 4.2 4.2 11.8"/></svg>',edit:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10.7 3.3 12.7 5.3 6.3 11.7 3.7 12.3 4.3 9.7 10.7 3.3z"/></svg>',history:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3.2 7.8a4.8 4.8 0 1 0 1.4-3.4"/><path d="M3.2 3.1v3.2h3.2"/><path d="M8 5.4v3l2.1 1.2"/></svg>',restart:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M12.7 6.5A4.8 4.8 0 1 0 13 9"/><path d="M12.7 3.3v3.2H9.5"/></svg>',feishu:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 5.2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3.3a2 2 0 0 1-2 2H7.1L4.3 13v-2.5H5"/><path d="M9.1 3.2h3.7v3.7"/><path d="M12.8 3.2 8.5 7.5"/></svg>',copy:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="5.5" y="5.5" width="7.5" height="7.5" rx="1.4"/><path d="M10.5 5.5V4.1a1.4 1.4 0 0 0-1.4-1.4H4.1a1.4 1.4 0 0 0-1.4 1.4v5a1.4 1.4 0 0 0 1.4 1.4h1.4"/></svg>'};function tn(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function It(e,t){let s=window.open("about:blank","_blank");s&&(s.opener=null),t&&(t.disabled=!0);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/write-link`),r=await a.json().catch(()=>({}));if(!a.ok||r?.ok===!1||!r?.url){s?.close(),a.status!==401&&alert(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`);return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),alert(`${o("sessions.writeLinkFail")}: ${a}`)}finally{t&&(t.disabled=!1)}}async function Tt(e,t){t&&(t.disabled=!0);try{let s=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/spawn-command`),a=await s.json().catch(()=>({}));if(!s.ok||a?.ok===!1||!a?.command){s.status!==401&&alert(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`);return}try{if(await navigator.clipboard.writeText(a.command),t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch{window.prompt(o("sessions.copyCommand"),a.command)}}catch(s){alert(`${o("sessions.copyCommandFail")}: ${s}`)}finally{t&&(t.disabled=!1)}}function Ln(e){let t=String(e?.senderType??"unknown"),s=t==="app"||t==="bot"?"bot":t,a=String(e?.senderId??"").trim(),r=String(e?.senderName??"").trim();return`${s}:${a||r||"unknown"}`}function Nt(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"needs-you":e.status==="starting"?"starting":e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":(e.status==="dormant","idle")}function Mt(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=ve.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${Fe(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
|
|
2
|
-
`)}function sn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo}async function xt(){try{let e=await fetch("/api/groups");if(!e.ok)return[];let t=await e.json();return(Array.isArray(t?.bots)?t.bots:[]).filter(a=>a&&typeof a.larkAppId=="string").map(a=>({larkAppId:a.larkAppId,botName:typeof a.botName=="string"&&a.botName?a.botName:a.larkAppId}))}catch{return[]}}function En(e,t){let s=Math.max(0,Math.min(t,e.length)),r=e.slice(0,s).match(/(?:^|\s)@([^\s@]*)$/u);if(!r)return null;let m=r[1]??"";return{start:s-m.length-1,end:s,query:m}}function At(e,t,s){let a=`@${s} `,r=e[t.end]===" "?t.end+1:t.end;return{text:e.slice(0,t.start)+a+e.slice(r),caret:t.start+a.length}}function Lt(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function Et(e,t,s,a){if(a.length===0)return{text:e,caret:Math.max(0,Math.min(t,e.length))};let r=Math.max(0,Math.min(t,e.length)),m=Math.max(r,Math.min(s,e.length)),g=e.slice(0,r),d=e.slice(m),f=g&&!/\s$/u.test(g)?" ":"",w=d&&!/^\s/u.test(d)?" ":"",I=`${f}${a.join(" ")}${w}`;return{text:g+I+d,caret:g.length+I.length}}function As(e,t){let s=e.indexOf(t);if(s<0)return e;let a=e.slice(0,s),r=e.slice(s+t.length);return/\s$/u.test(a)&&/^\s/u.test(r)&&(r=r.slice(1)),a+r}function Rt(e,t,s,a){let r=As(e,t),m=s.map((g,d)=>a(d));return s.forEach((g,d)=>{let f=r.indexOf(g);f<0||g===m[d]||(r=r.slice(0,f)+m[d]+r.slice(f+g.length))}),{text:r,markers:m}}var M=Re(Wn(),1);var Bt=["backlog","todo","in_progress","in_review","done"];function Dt(e){return typeof e=="string"&&Bt.includes(e)?e:null}function $t(e){if(e.status==="closed")return"done";let t=Dt(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var Ls=1e15;function De(e){if(typeof e.kanbanPosition=="number"&&Number.isFinite(e.kanbanPosition))return e.kanbanPosition;let t=typeof e.lastMessageAt=="number"&&Number.isFinite(e.lastMessageAt)?e.lastMessageAt:0;return Ls-t}function Rn(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var S=Re(Qe(),1),Pt=[{id:"backlog",labelKey:"sessions.kanban.backlog"},{id:"todo",labelKey:"sessions.kanban.todo"},{id:"in_progress",labelKey:"sessions.kanban.inProgress"},{id:"in_review",labelKey:"sessions.kanban.inReview"},{id:"done",labelKey:"sessions.kanban.done"}],Bn=50;function Ot(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Es(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Rs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function Bs(e){let t=(s="")=>`<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="5.4" fill="none" stroke="currentColor" stroke-width="1.6"${s}/>`;switch(e){case"backlog":return`${t(' stroke-dasharray="1.6 2.1"')}</svg>`;case"in_progress":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 0 1 7,10.4 Z" fill="currentColor"/></svg>`;case"in_review":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 1 1 3.6,7 Z" fill="currentColor"/></svg>`;case"done":return'<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="6.2" fill="currentColor"/><path d="M4.4 7.2 6.2 9 9.7 5.4" fill="none" stroke="var(--surface)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';default:return`${t()}</svg>`}}function He(e){return{__html:e}}function on(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function Ds(e){return ie(e.title)||e.sessionId}function Ft(e){let t=[],s=new Map;for(let m of e){let g=String(m.chatId??m.sessionId),d=s.get(g);d||(d={chatId:g,rows:[]},s.set(g,d),t.push(d)),d.rows.push(m)}let a=[];return{clusters:t.map(m=>(a.push(...m.rows),m.rows.length<2?{type:"card",row:m.rows[0]}:{type:"cluster",chatId:m.chatId,rows:m.rows})),flat:a}}function Ht(e){let t=new Map(Pt.map(a=>[a.id,[]]));for(let a of e)t.get($t(a)).push(a);return{columns:Pt.map(a=>{let r=(t.get(a.id)??[]).sort((f,w)=>De(f)-De(w)),m=0;a.id==="done"&&r.length>Bn&&(m=r.length-Bn,r=r.slice(0,Bn));let{clusters:g,flat:d}=Ft(r);return t.set(a.id,d),{id:a.id,labelKey:a.labelKey,rows:r,clusters:g,hiddenCount:m}}),groups:t}}function $s(e){let t=new Map;for(let s of e){if(s.status==="closed")continue;let a=String(s.larkAppId||s.botName||"unknown"),r=t.get(a);r||(r={name:he(s),larkAppId:s.larkAppId,rows:[]},t.set(a,r)),r.rows.push(s)}return[...t.values()].sort((s,a)=>s.name.localeCompare(a.name)).map(s=>{let a=s.rows.sort((m,g)=>Number(g.lastMessageAt??0)-Number(m.lastMessageAt??0)),{clusters:r}=Ft(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function Dn(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function Ps(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!on(r));return{mode:"bot",columns:$s(a),groups:new Map,rowById:Dn(a),team:null,scope:null}}if(e.groupBy==="team"){if(!e.teamsLoaded)return{mode:"loading",groups:new Map,rowById:new Map,team:null,scope:null};let a=e.teams.find(N=>N.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),m=a?e.rows.filter(N=>r.has(String(N.chatId))):[],g=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},d=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],f=[...m,...d].map(N=>{let T=g[String(N.sessionId)];return T?{...N,kanbanColumn:T.column,kanbanPosition:T.position}:N}),{columns:w,groups:I}=Ht(f);return{mode:"flow",columns:w,groups:I,rowById:Dn(f),team:a,scope:{chats:r.size,sessions:f.length}}}let{columns:t,groups:s}=Ht(e.rows);return{mode:"flow",columns:t,groups:s,rowById:Dn(e.rows),team:null,scope:null}}function Os(e){let t=new Map;return e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col;a&&s.scrollTop&&t.set(a,s.scrollTop)}),t}function Hs(e,t){t?.size&&e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col,r=a?t.get(a):void 0;r&&(s.scrollTop=r)})}function Kt(e,t){for(let s of e.querySelectorAll(".kanban-card:not(.dragging)")){if(s.closest(".kanban-cluster.dragging"))continue;let a=s.getBoundingClientRect();if(t<a.top+a.height/2)return s}return null}function ze(e){return(0,S.jsx)("button",{type:"button",className:`card-act kanban-card-act${e.className?` ${e.className}`:""}`,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,onClick:t=>{t.stopPropagation(),e.onClick(t.currentTarget)},dangerouslySetInnerHTML:He(e.icon)})}function Ks(e){let t=ie(e.row.title)||"",[s,a]=(0,M.useState)(t),r=(0,M.useRef)(null),m=(0,M.useRef)(!1);(0,M.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let g=(0,M.useCallback)(d=>{if(m.current)return;m.current=!0;let f=s.trim();d&&f&&f!==t&&e.onCommit(e.row,f),e.onCancel()},[t,e,s]);return(0,S.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:d=>a(d.currentTarget.value),onClick:d=>d.stopPropagation(),onBlur:()=>g(!0),onKeyDown:d=>{d.stopPropagation(),d.key==="Enter"?(d.preventDefault(),g(!0)):d.key==="Escape"&&(d.preventDefault(),g(!1))}})}function _t(e){let{callbacks:t,row:s}=e,a=Ds(s),r=he(s),m=Ne(s),g=Es(s.workingDir),d=Rs(s),f=[m,g!=="-"?g:null].filter(Boolean).join(" \xB7 "),w=String(s.status??"unknown"),I=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",N=e.editingId===s.sessionId,T=t.selectedSessionIds.has(String(s.sessionId)),P=["kanban-card",T?"selected":"",I?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),U=I?null:(0,S.jsxs)("span",{className:"kanban-card-actions-rail",children:[(0,S.jsx)(ze,{action:"history",icon:t.icons.history,label:o("sessions.history.title"),onClick:()=>t.onHistory(s)}),s.webPort?(0,S.jsx)(ze,{action:"terminal",icon:t.icons.terminal,label:o("sessions.openTerminal"),onClick:()=>t.onOpenTerminal(s)}):null,s.feishuChatLink?(0,S.jsx)("a",{className:"card-act kanban-card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),onClick:L=>L.stopPropagation(),dangerouslySetInnerHTML:He(t.icons.feishu)}):null,(0,S.jsx)(ze,{action:"lock",className:s.locked?"locked":"",icon:s.locked?t.icons.unlock:t.icons.lock,label:t.lockActionLabel(s),onClick:L=>t.onToggleLock(s,L)}),(0,S.jsx)(ze,{action:"details",icon:t.icons.details,label:o("sessions.details"),onClick:()=>t.onDetails(s)}),t.canRestartSession(s)?(0,S.jsx)(ze,{action:"restart",icon:t.icons.restart,label:o("sessions.restart"),onClick:L=>t.onRestart(s,L)}):null]});return(0,S.jsxs)("article",{className:P,"data-id":s.sessionId,tabIndex:0,role:"button","aria-pressed":T,draggable:!0,onClick:L=>e.onCardClick(s,L),onKeyDown:L=>e.onCardKeyDown(s,L),onDragStart:L=>e.onDragStartCard(s,L),children:[(0,S.jsxs)("div",{className:"kanban-card-top",children:[(0,S.jsx)("span",{className:`badge cli-${Ot(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,S.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,S.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,I?(0,S.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:I}),children:I}):null,U]}),(0,S.jsx)("div",{className:"kanban-card-title-row",children:N?(0,S.jsx)(Ks,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,S.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:L=>{L.stopPropagation(),e.cancelOpen(),I||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),f||d?(0,S.jsxs)("div",{className:"kanban-card-meta-row",children:[f?(0,S.jsx)("p",{className:"kanban-card-desc",title:f,children:f}):(0,S.jsx)("span",{className:"kanban-card-desc kanban-card-desc-empty","aria-hidden":"true"}),d?(0,S.jsx)("span",{className:"session-signal",title:d,children:d}):null]}):null,(0,S.jsxs)("div",{className:"kanban-card-foot",children:[(0,S.jsx)("span",{className:"kanban-card-owner",dangerouslySetInnerHTML:He(`${Te({name:r,larkAppId:s.larkAppId,size:"sm"})}<span>${it(r)}</span>`)}),(0,S.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Ie(s.lastMessageAt)}),(0,S.jsx)("span",{className:"kanban-card-dot","data-status":Ot(w),title:t.sessionStatusText(w)})]})]})]})}function Ut(e){let t=e.item;if(t.type==="card")return(0,S.jsx)(_t,{...e.cardProps,row:t.row});let s=Ne(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,S.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,S.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,S.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:He(qe({chatId:t.chatId,name:s,size:"sm"}))}),(0,S.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,S.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,S.jsx)("button",{type:"button",className:"kanban-cluster-toggle","aria-expanded":e.expanded,title:o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),"aria-label":o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),onClick:r=>{r.stopPropagation(),e.onToggleExpanded()},children:(0,S.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,S.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,S.jsx)(_t,{...e.cardProps,row:r},r.sessionId)):null]})}function jt(e){let[t,s]=(0,M.useState)(e),[a,r]=(0,M.useState)(null),[m,g]=(0,M.useState)(null),[d,f]=(0,M.useState)(null),[w,I]=(0,M.useState)(null),[N,T]=(0,M.useState)(()=>new Set),P=(0,M.useRef)(null),U=(0,M.useRef)(null),L=(0,M.useRef)(null),K=(0,M.useRef)(new Map),Q=(0,M.useRef)(new Map),ee=(0,M.useRef)(m),Z=!!a||!!m,F=(0,M.useCallback)(()=>{L.current!==null&&(clearTimeout(L.current),L.current=null)},[]),ne=(0,M.useCallback)(C=>{U.current=Os(e.host),s(C)},[e.host]);(0,M.useEffect)(()=>{if(Z){P.current=e;return}ne(e)},[ne,Z,e]),(0,M.useEffect)(()=>{if(Z||!P.current)return;let C=P.current;P.current=null,ne(C)},[ne,Z]),(0,M.useLayoutEffect)(()=>{Hs(e.host,U.current),U.current=null},[t,e.host]),(0,M.useEffect)(()=>{ee.current=m},[m]),(0,M.useEffect)(()=>()=>F(),[F]);let E=(0,M.useMemo)(()=>Ps(t),[t]);(0,M.useLayoutEffect)(()=>{K.current=E.groups,Q.current=E.rowById},[E]),(0,M.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,M.useEffect)(()=>{t.groupBy==="team"&&E.mode==="flow"&&E.team&&t.onNeedTeamBoard(E.team)},[t,E]),(0,M.useEffect)(()=>{t.onTeamScope(E.mode==="flow"?E.scope:null)},[t,E]);let oe=(0,M.useCallback)(()=>{g(null),f(null),I(null)},[]),ue=(0,M.useCallback)(C=>{T(v=>{let R=new Set(v);return R.has(C)?R.delete(C):R.add(C),R})},[]),ye=(0,M.useCallback)(C=>{F(),!on(C)&&r(C.sessionId)},[F]),q=(0,M.useCallback)((C,v)=>{on(C)||v.target.closest("a, button, input, label")||(F(),L.current=setTimeout(()=>{L.current=null,t.onToggleSelect(C)},220))},[F,t]),Ae=(0,M.useCallback)((C,v)=>{v.key!=="Enter"&&v.key!==" "||v.target!==v.currentTarget||on(C)||(v.preventDefault(),t.onToggleSelect(C))},[t]),O=(0,M.useCallback)((C,v)=>{t.groupBy!=="bot"&&(F(),g({kind:"card",id:String(C.sessionId)}),v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(C.sessionId))))},[F,t.groupBy]),te=(0,M.useCallback)((C,v,R)=>{t.groupBy!=="bot"&&(F(),g({kind:"cluster",chatId:C,col:v}),R.dataTransfer&&(R.dataTransfer.effectAllowed="move",R.dataTransfer.setData("text/plain",`cluster:${C}`)))},[F,t.groupBy]),me=(0,M.useCallback)((C,v)=>{!ee.current||t.groupBy==="bot"||(v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),f(C),I(Kt(v.currentTarget,v.clientY)?.dataset.id??null))},[t.groupBy]),we=(0,M.useCallback)((C,v)=>{let R=ee.current;if(!R||t.groupBy==="bot")return;v.preventDefault();let se=Kt(v.currentTarget,v.clientY);oe();let z=K.current,V=C;if(R.kind==="cluster"){let p=(z.get(R.col)??[]).filter(_=>String(_.chatId)===R.chatId).filter(_=>!(_.status==="closed"&&V!=="done"));if(!p.length)return;let A=new Set(p.map(_=>_.sessionId)),x=(z.get(V)??[]).filter(_=>!A.has(_.sessionId)),B=se?x.findIndex(_=>_.sessionId===se.dataset.id):x.length;B<0&&(B=x.length);let $=B>0?x[B-1]:null,fe=B<x.length?x[B]:null,Y=Rn($?De($):null,fe?De(fe):null);t.onMoveRows(p.map((_,Ee)=>({row:_,column:V,position:Y+Ee*.001})));return}let ge=Q.current.get(R.id);if(!ge||ge.status==="closed"&&V!=="done")return;let J=(z.get(V)??[]).filter(p=>p.sessionId!==R.id),ae=se?J.findIndex(p=>p.sessionId===se.dataset.id):J.length;ae<0&&(ae=J.length);let $e=ae>0?J[ae-1]:null,Pe=ae<J.length?J[ae]:null,Le=Rn($e?De($e):null,Pe?De(Pe):null);t.onMoveRows([{row:ge,column:V,position:Le}])},[oe,t]),X={dragId:m?.kind==="card"?m.id:null,dropBeforeId:w,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:F,onBeginEdit:ye,onCardClick:q,onCardKeyDown:Ae,onDragStartCard:O,onEditDone:()=>r(null)};return E.mode==="loading"?(0,S.jsx)(Me,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):E.mode==="bot"?E.columns.length?(0,S.jsx)(S.Fragment,{children:E.columns.map(C=>(0,S.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":C.key,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:He(Te({name:C.name,larkAppId:C.larkAppId,size:"sm"}))}),(0,S.jsx)("h2",{children:C.name}),(0,S.jsx)("span",{className:"kanban-col-count",children:C.rows.length})]}),(0,S.jsx)("div",{className:"kanban-col-list",onDragOver:v=>me(C.key,v),onDragEnd:oe,children:C.clusters.map(v=>(0,S.jsx)(Ut,{item:v,dragCluster:m?.kind==="cluster"?m:null,cardProps:X,expanded:v.type==="cluster"&&N.has(`bot:${C.key}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&ue(`bot:${C.key}:${v.chatId}`)},onDragStartCluster:te},v.type==="card"?v.row.sessionId:v.chatId))})]},C.key))}):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,S.jsx)(S.Fragment,{children:E.columns.map(C=>(0,S.jsxs)("section",{className:`kanban-column kanban-${C.id}${d===C.id?" drag-over":""}`,"data-col":C.id,onDragOver:v=>me(C.id,v),onDrop:v=>we(C.id,v),onDragEnd:oe,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:"kanban-col-icon",dangerouslySetInnerHTML:He(Bs(C.id))}),(0,S.jsx)("h2",{children:o(C.labelKey)}),(0,S.jsx)("span",{className:"kanban-col-count",children:C.rows.length+C.hiddenCount})]}),(0,S.jsxs)("div",{className:"kanban-col-list",children:[C.rows.length?C.clusters.map(v=>(0,S.jsx)(Ut,{item:v,columnId:C.id,dragCluster:m?.kind==="cluster"?m:null,cardProps:X,expanded:v.type==="cluster"&&N.has(`${C.id}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&ue(`${C.id}:${v.chatId}`)},onDragStartCluster:te},v.type==="card"?v.row.sessionId:v.chatId)):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),C.hiddenCount?(0,S.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:C.hiddenCount})}):null]})]},C.id))})}var n=Re(Qe(),1),_s=new Set(["image/png","image/jpeg","image/gif","image/webp"]),zt=8,Us=10*1024*1024,Fs=25*1024*1024;function js(e){return new Promise((t,s)=>{let a=new FileReader;a.onload=()=>typeof a.result=="string"?t(a.result):s(new Error("bad_image_data")),a.onerror=()=>s(a.error??new Error("image_read_failed")),a.readAsDataURL(e)})}function zs(e){return e===168?"7d":`${e}H`}var Js=Cn.map(e=>({value:String(e),label:zs(e)}));function de(e){return{__html:e}}function ce(){return typeof window>"u"?void 0:window.localStorage}function an(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${Tn(t)}`,children:Fe(t)})}function On(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function ke(e){let t=e.className??`card-act${e.kind?` ${e.kind}`:""}`;return(0,n.jsx)("button",{type:"button",id:e.id,className:t,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,disabled:e.disabled,onClick:s=>{s.stopPropagation(),e.onClick(s.currentTarget)},dangerouslySetInnerHTML:de(e.icon)})}function Gt(e){if(!e.url)return null;let t=!nn();return(0,n.jsx)("span",{className:`term-pill${t?" readonly":" writable"}`,children:t?(0,n.jsx)("a",{className:"term-btn term-open",href:e.url,target:"_blank",rel:"noopener","data-tip":o("sessions.openTerminal"),"aria-label":o("sessions.openTerminal"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:de(H.terminal)}):(0,n.jsx)("button",{type:"button",className:"term-btn term-write","data-action":"write-link","data-tip":o("sessions.openTerminal"),"aria-label":o("sessions.openTerminal"),onClick:s=>{s.stopPropagation(),It(e.row,s.currentTarget)},dangerouslySetInnerHTML:de(H.terminal)})})}function Vt(e){let t=e.row;return t.scope!=="chat"||!t.feishuChatLink?null:(0,n.jsx)("a",{className:e.className??"card-act",href:t.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.openChat"),"aria-label":o("sessions.openChat"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:de(H.feishu)})}function Xs(e){let t=e.sortKey===e.sort;return(0,n.jsx)("th",{"data-sort":e.sort,"data-label":e.label,className:t?"sorted":void 0,"aria-sort":t?e.sortDir==="asc"?"ascending":"descending":"none",onClick:()=>e.onSort(e.sort),children:t?`${e.label} ${e.sortDir==="asc"?"\u25B2":"\u25BC"}`:e.label})}function Jt(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?Ze(e.tokenUsage?.in)??-1:t==="tokenOut"?Ze(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?xe(e).toLowerCase():String(e[t]??"").toLowerCase()}function Xt(e,t,s,a){let r=Jt(e,s),m=Jt(t,s),g=0;return typeof r=="number"&&typeof m=="number"?g=r-m:typeof r=="boolean"&&typeof m=="boolean"?g=Number(r)-Number(m):g=String(r).localeCompare(String(m)),g===0&&(g=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?g:-g}function Gs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function Vs(e,t,s){let a=s==="needs-you"?Ye(e):Number(e.lastMessageAt??0),r=s==="needs-you"?Ye(t):Number(t.lastMessageAt??0);return a!==r?s==="needs-you"?a-r:r-a:String(e.title??e.sessionId).localeCompare(String(t.title??t.sessionId))}function Ws(e){if(e==null||e==="")return"";let t=Number(e),s=Number.isFinite(t)&&t>0?new Date(t):new Date(String(e));return Number.isNaN(s.getTime())?"":s.toLocaleString()}function qs(e){return e===void 0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m${Math.round(e%6e4/1e3)}s`}function Hn(e,t){(0,u.useEffect)(()=>{let s=e.current;if(s)if(t){if(!s.open)try{s.showModal()}catch{}}else s.open&&s.close()},[t,e])}function $n(e){let[t,s]=(0,u.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{navigator.clipboard.writeText(e.value),s(!0),window.setTimeout(()=>s(!1),800)},children:t?o("sessions.copied"):o("sessions.copy")})}function Ys(e){let[t,s]=(0,u.useState)(0),[a,r]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.locateSession(e.row);r(!1),m&&s(30)},children:t>0?o("sessions.cooldown",{seconds:t}):a?o("sessions.locating"):o("sessions.locate")})}function Qs(e){let[t,s]=(0,u.useState)(0),[a,r]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)(ke,{action:"locate",icon:H.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.onLocate(e.row);r(!1),m&&s(30)}})}function Zs(e){let t=le.filter(d=>e.selected.has(d)).length,s=(0,u.useRef)(null),[a,r]=(0,u.useState)("");(0,u.useEffect)(()=>{let d=()=>{s.current?.open&&(s.current.open=!1)},f=I=>{let N=s.current;N?.open&&!N.contains(I.target)&&d()},w=I=>{I.key==="Escape"&&d()};return document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",w),()=>{document.removeEventListener("pointerdown",f,!0),document.removeEventListener("keydown",w)}},[]);let m=a.trim().toLowerCase(),g=m?le.filter(d=>d.toLowerCase().includes(m)):le;return(0,n.jsxs)("details",{className:"filter-cli",ref:s,children:[(0,n.jsxs)("summary",{children:[o("sessions.cli")," \xB7 ",(0,n.jsx)("b",{id:"cli-filter-count",className:t===le.length?void 0:"cli-filter-active",children:t===le.length?o("common.all"):`${t}/${le.length}`})]}),(0,n.jsxs)("div",{className:"filter-cli-pop",role:"group","aria-label":o("sessions.cli"),children:[(0,n.jsxs)("div",{className:"filter-cli-head",children:[(0,n.jsx)("input",{type:"search",className:"filter-cli-search",placeholder:o("sessions.cliSearch"),value:a,autoFocus:!0,onChange:d=>r(d.currentTarget.value),onClick:d=>d.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of le)e.selected.has(d)||e.onToggle(d,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of le)e.selected.has(d)&&e.onToggle(d,!1)},children:o("sessions.cliClear")})]})]}),(0,n.jsx)("div",{className:"filter-cli-options",children:g.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):g.map(d=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:d,checked:e.selected.has(d),onChange:f=>e.onToggle(d,f.currentTarget.checked)}),(0,n.jsx)("span",{children:d})]},d))})]})]})}function eo(e){let t=[{value:"",label:o("sessions.anyStatus")},...wt.map(d=>({value:d,label:Fe(d)}))],s=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],a=t.find(d=>d.value===e.filters.status)?.label??o("sessions.anyStatus"),r=s.find(d=>d.value===e.filters.adopt)?.label??o("sessions.adoptAny"),m=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],g=m.find(d=>d.value===e.filters.chat)?.label??o("sessions.chatAny");return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters",onSubmit:d=>d.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:d=>{let f=d.currentTarget.value;e.setFilters(w=>({...w,q:f}))}}),(0,n.jsx)(Ue,{label:a,value:e.filters.status,options:t,onChange:d=>e.setFilters(f=>({...f,status:d}))}),(0,n.jsx)(Ue,{label:r,value:e.filters.adopt,options:s,onChange:d=>e.setFilters(f=>({...f,adopt:d}))}),(0,n.jsx)(Ue,{ariaLabel:o("sessions.location"),className:"filter-chat-menu",label:g,value:e.filters.chat,options:m,searchable:!0,searchPlaceholder:o("sessions.chatSearch"),searchEmptyLabel:o("sessions.chatNoMatch"),onChange:d=>e.setFilters(f=>({...f,chat:d}))}),(0,n.jsx)(Zs,{selected:e.filters.cli,onToggle:(d,f)=>{e.setFilters(w=>{let I=new Set(w.cli);return f?I.add(d):I.delete(d),{...w,cli:I}})}}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,multiBotTopics:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.multiBotTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"botTriggeredTopics",checked:e.filters.botTriggeredTopics,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,botTriggeredTopics:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.botTriggeredTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"showUnknownChats",checked:e.filters.showUnknownChats,onChange:d=>{let f=d.currentTarget.checked;nt(ce(),f),e.setFilters(w=>({...w,showUnknownChats:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.showUnknownChats")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"active",checked:e.filters.active,onChange:d=>{let f=d.currentTarget.checked;e.setFilters(w=>({...w,active:f}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.activeOnly")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsx)(to,{...e.idleCleanup})]})}function no(e){let t=!!e.closeProgress||!!e.lockProgress,s=e.lockProgress?.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.lockSelected"),a=e.lockProgress&&!e.lockProgress.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.unlockSelected");return(0,n.jsxs)("div",{id:"bulk-bar",className:"bulk-bar",hidden:e.selectedCount===0,children:[(0,n.jsx)("span",{id:"bulk-count",children:o("sessions.selectedCount",{count:e.selectedCount})}),(0,n.jsx)("button",{type:"button",id:"bulk-monitor-room",disabled:t||e.selectedCount===0,onClick:e.onAddToMonitorRoom,children:e.monitorRoomText??o("sessions.addToMonitorRoom")}),(0,n.jsx)("button",{type:"button",id:"bulk-lock",disabled:t||e.lockDisabled,onClick:()=>e.onLock(!0),children:s}),(0,n.jsx)("button",{type:"button",id:"bulk-unlock",disabled:t||e.unlockDisabled,onClick:()=>e.onLock(!1),children:a}),(0,n.jsx)("button",{type:"button",id:"bulk-close",className:"contrast",disabled:t,onClick:e.onClose,children:e.closeProgress?`${e.closeProgress.done}/${e.closeProgress.total}`:o("sessions.closeSelected")}),(0,n.jsx)("button",{type:"button",id:"bulk-clear",disabled:t,onClick:e.onClear,children:o("sessions.clearSelection")})]})}function to(e){let[t,s]=(0,u.useState)(!1),[a,r]=(0,u.useState)(e.hours),[m,g]=(0,u.useState)(),d=(0,u.useRef)(null),f=(0,u.useRef)(null),w=(0,u.useRef)(null),I=e.countForHours(a);return(0,u.useEffect)(()=>{t?r(e.hours):g(void 0)},[t,e.hours]),(0,u.useLayoutEffect)(()=>{if(!t)return;let N=()=>{let P=f.current,U=w.current;if(!P||!U)return;let L=12,K=window.innerWidth,Q=window.innerHeight,ee=Math.max(0,Math.min(292,K-L*2)),Z=P.getBoundingClientRect(),F=U.offsetHeight,ne=Math.max(L,K-ee-L),E=Z.left+Z.width/2-ee/2,oe=Math.min(Math.max(E,L),ne),ue=Z.bottom+8,ye=Z.top-F-8,q=ue+F<=Q-L||ye<L?Math.min(Math.max(ue,L),Math.max(L,Q-F-L)):Math.max(L,ye);g({left:oe,top:q,width:ee})},T=window.requestAnimationFrame(N);return window.addEventListener("resize",N),window.addEventListener("scroll",N,!0),()=>{window.cancelAnimationFrame(T),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)}},[t,e.busy,e.status]),(0,u.useEffect)(()=>{if(!t)return;let N=P=>{let U=P.target;U instanceof Node&&d.current?.contains(U)||U instanceof Node&&w.current?.contains(U)||s(!1)},T=P=>{P.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",N,!0),document.addEventListener("keydown",T),()=>{document.removeEventListener("pointerdown",N,!0),document.removeEventListener("keydown",T)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${I===0?" is-empty":""}${t?" is-open":""}`,ref:d,children:[(0,n.jsxs)("button",{ref:f,type:"button",id:"idle-cleanup-run",className:"contrast idle-cleanup-run","aria-haspopup":"dialog","aria-expanded":t,disabled:e.busy,onClick:()=>s(N=>!N),children:[(0,n.jsxs)("svg",{className:"idle-cleanup-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3.5 6.5h17"}),(0,n.jsx)("path",{d:"M9 3.5h6"}),(0,n.jsx)("path",{d:"m6.5 6.5.9 13h9.2l.9-13"}),(0,n.jsx)("path",{d:"M10 10.5v5M14 10.5v5"})]}),(0,n.jsx)("span",{children:o("sessions.idleCleanupRun")})]}),t&&typeof document<"u"?(0,Pn.createPortal)((0,n.jsxs)("div",{ref:w,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:m??{visibility:"hidden"},children:[(0,n.jsxs)("div",{className:"idle-cleanup-pop-head",children:[(0,n.jsx)("span",{className:"idle-cleanup-pop-title",children:o("sessions.idleCleanupRun")}),(0,n.jsxs)("span",{id:"idle-cleanup-count",className:"idle-cleanup-count",children:[(0,n.jsx)("span",{className:"idle-cleanup-dot","aria-hidden":"true"}),o("sessions.idleCleanupCount",{count:I})]})]}),(0,n.jsxs)("div",{className:"idle-cleanup-pop-field",children:[(0,n.jsx)("span",{className:"idle-cleanup-label",children:o("sessions.idleCleanupOlderThan")}),(0,n.jsx)("div",{id:"idle-cleanup-threshold",className:"idle-cleanup-threshold-options",role:"radiogroup","aria-label":o("sessions.idleCleanupThreshold"),children:Js.map(N=>{let T=Sn(N.value),P=T===a;return(0,n.jsx)("button",{type:"button",className:P?"active":void 0,"aria-pressed":P?"true":"false",disabled:e.busy,onClick:()=>r(T),children:N.label},N.value)})})]}),e.busy&&e.status?(0,n.jsx)("span",{id:"idle-cleanup-status",className:"idle-cleanup-status","aria-live":"polite",children:e.status}):null,(0,n.jsxs)("div",{className:"idle-cleanup-pop-actions",children:[(0,n.jsx)("button",{type:"button",className:"idle-cleanup-cancel",disabled:e.busy,onClick:()=>s(!1),children:o("sessions.idleCleanupCancel")}),(0,n.jsx)("button",{type:"button",className:"idle-cleanup-confirm",disabled:e.busy||I===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function so(e){let t=(0,u.useRef)(null);(0,u.useLayoutEffect)(()=>{t.current&&(t.current.indeterminate=e.selectAllIndeterminate)},[e.selectAllIndeterminate]);let s=[["botName",o("sessions.bot")],["cliId",o("sessions.cli")],["status",o("sessions.status")],["chat",o("sessions.location")],["tokenIn",o("sessions.tokenIn")],["tokenOut",o("sessions.tokenOut")],["title",o("sessions.titleCol")],["workingDir",o("sessions.workingDir")],["spawnedAt",o("sessions.created")],["lastMessageAt",o("sessions.last")],["adopt",o("sessions.adopt")]],a={select:o("sessions.selectSession"),botName:o("sessions.bot"),cliId:o("sessions.cli"),status:o("sessions.status"),chat:o("sessions.location"),tokenIn:o("sessions.tokenIn"),tokenOut:o("sessions.tokenOut"),title:o("sessions.titleCol"),workingDir:o("sessions.workingDir"),spawnedAt:o("sessions.created"),lastMessageAt:o("sessions.last"),adopt:o("sessions.adopt"),actions:o("sessions.actions")};return(0,n.jsxs)("table",{id:"sessions-table",hidden:e.hidden,children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:(0,n.jsx)("input",{ref:t,type:"checkbox",id:"select-all",title:o("sessions.activeOnly"),checked:e.selectAllChecked,disabled:e.selectAllDisabled,onChange:r=>e.onSelectAll(r.currentTarget.checked)})}),s.map(([r,m])=>(0,n.jsx)(Xs,{sort:r,label:m,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},r)),(0,n.jsx)("th",{children:o("sessions.actions")})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(r=>{let m=r.status==="closed",g=String(r.sessionId);return(0,n.jsxs)("tr",{"data-id":g,onClick:()=>e.onOpen(r),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":a.select,onClick:d=>d.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(g),disabled:m,onChange:d=>e.onSelect(g,d.currentTarget.checked)})}),(0,n.jsx)("td",{"data-label":a.botName,children:he(r)}),(0,n.jsx)("td",{"data-label":a.cliId,children:(0,n.jsx)("span",{className:`badge cli-${Tn(r.cliId)}`,children:r.cliId??"unknown"})}),(0,n.jsxs)("td",{"data-label":a.status,children:[(0,n.jsx)(an,{status:r.status}),(0,n.jsx)(On,{row:r})]}),(0,n.jsx)("td",{className:"session-location-cell","data-label":a.chat,title:xn(r),children:xe(r)}),(0,n.jsx)("td",{className:"token-cell","data-label":a.tokenIn,children:vn(r.tokenUsage?.in)}),(0,n.jsx)("td",{className:"token-cell","data-label":a.tokenOut,children:vn(r.tokenUsage?.out)}),(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":a.title,title:String(r.title??""),children:ie(r.title??"").slice(0,48)}),(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":a.workingDir,title:r.workingDir??"",children:String(r.workingDir??"").slice(-34)}),(0,n.jsx)("td",{"data-label":a.spawnedAt,children:Ie(r.spawnedAt)}),(0,n.jsx)("td",{"data-label":a.lastMessageAt,children:Ie(r.lastMessageAt)}),(0,n.jsx)("td",{"data-label":a.adopt,children:r.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null}),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":a.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},g)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:13,className:"empty",children:o("sessions.empty")})})})]})}function Wt(e){let t=e.row,s=ie(t.title)||t.sessionId,a=he(t),r=Ne(t),m=je(t),g=Gs(t),d=Nn(t.workingDir),f=w=>{w.target.closest("a, button, input, label")||e.onToggleSelect(t)};return(0,n.jsxs)("article",{className:`session-card${e.selected?" selected":""}${t.locked?" locked":""}`,"data-id":t.sessionId,"aria-pressed":e.selected,onClick:f,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:a,larkAppId:t.larkAppId,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-card-title",children:[(0,n.jsx)("strong",{title:String(t.title??s),children:String(s).slice(0,72)}),(0,n.jsxs)("span",{children:[a," \xB7 ",r??t.cliId??"unknown"]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(an,{status:t.status}),(0,n.jsx)(On,{row:t})]})]}),d!=="-"||t.adopt||g?(0,n.jsxs)("div",{className:"session-card-meta",children:[d!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:d}):null,t.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null,g?(0,n.jsx)("span",{className:"session-signal",title:g,children:g}):null]}):null,(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Ie(Ye(t))}`:`${o("sessions.last")}: ${Ie(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(Vt,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(Qs,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(ke,{action:"details",icon:H.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),sn(t)?(0,n.jsx)(ke,{action:"restart",icon:H.restart,label:o("sessions.restart"),onClick:w=>e.onRestart(t,w)}):null,(0,n.jsx)(Gt,{row:t,url:m}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ke,{action:"lock",icon:t.locked?H.unlock:H.lock,label:tn(t),kind:t.locked?"locked":"",onClick:w=>e.onLock(t,!t.locked,w)}),(0,n.jsx)(ke,{action:"close",icon:H.close,label:o("sessions.close"),kind:"danger",onClick:w=>e.onClose(t,w)})]}):null]})]})}function oo(e){(0,u.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(In.map(a=>[a.id,[]]));for(let a of e.rows){let r=Nt(a);r&&t.get(r).push(a)}let s=e.order.map(a=>In.find(r=>r.id===a)).filter(a=>!!a);return(0,n.jsx)("div",{id:"sessions-board",className:`sessions-board${e.animated||e.hidden?"":" board-enter"}`,hidden:e.hidden,children:s.map((a,r)=>{let m=(t.get(a.id)??[]).sort((g,d)=>Vs(g,d,a.id));return(0,n.jsxs)("section",{className:`session-board-column session-board-${a.id}${e.dragColId===a.id?" dragging":""}${e.dragOverCol===a.id?" drag-over":""}`,"data-col":a.id,onDragOver:g=>{e.dragColId&&(g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="move"),e.dragColId!==a.id&&e.onDragOverCol(a.id))},onDrop:g=>{e.dragColId&&(g.preventDefault(),e.onMoveColumnTo(e.dragColId,a.id),e.onDragCol(null),e.onDragOverCol(null))},children:[(0,n.jsxs)("header",{draggable:!0,title:o("sessions.board.dragHint"),onDragStart:g=>{e.onDragCol(a.id),g.dataTransfer&&(g.dataTransfer.effectAllowed="move",g.dataTransfer.setData("text/plain",a.id))},onDragEnd:()=>{e.onDragCol(null),e.onDragOverCol(null)},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:o(a.labelKey)}),(0,n.jsx)("p",{children:o(a.hintKey)})]}),(0,n.jsxs)("span",{className:"session-board-head-right",children:[(0,n.jsxs)("span",{className:"session-board-move",children:[(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"-1","aria-label":o("sessions.board.moveLeft"),disabled:r===0,onClick:()=>e.onMoveColumn(a.id,-1),children:"\u2039"}),(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"1","aria-label":o("sessions.board.moveRight"),disabled:r===s.length-1,onClick:()=>e.onMoveColumn(a.id,1),children:"\u203A"})]}),(0,n.jsx)("span",{className:"session-board-count",children:m.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:m.length?m.map(g=>(0,n.jsx)(Wt,{row:g,selected:e.selected.has(g.sessionId),onToggleSelect:e.onToggleSelect,onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},g.sessionId)):(0,n.jsx)("div",{className:"session-board-empty",children:o("sessions.board.emptyColumn")})})]},a.id)})})}function ao(e){let t=ie(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function io(e){let t=(0,u.useMemo)(()=>en(e.rows),[e.rows]),s=(0,u.useMemo)(()=>new Map(en(e.relationRows??e.rows).map(a=>[a.key,a])),[e.relationRows,e.rows]);return(0,n.jsx)("div",{id:"sessions-topics",className:"sessions-topic-view",hidden:e.hidden,children:t.length?t.map(a=>{let r=s.get(a.key)??a,m=a.rows[0],g=xe(m),d=ao(r),f=r.rootMessageId||r.chatId;return(0,n.jsxs)("section",{className:`session-topic-group${r.multiBot?" multi-bot":""}${r.inferredBotTriggered?" inferred-bot-trigger":""}`,"data-topic-key":a.key,children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"session-topic-avatar",dangerouslySetInnerHTML:de(qe({chatId:a.chatId,name:g,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-topic-heading",children:[(0,n.jsx)("span",{className:"session-topic-location",children:g}),(0,n.jsx)("h2",{title:r.title,children:d}),(0,n.jsx)("code",{title:f,children:r.kind==="thread"?f:r.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession")})]}),(0,n.jsxs)("div",{className:"session-topic-summary","aria-label":o("sessions.topic.summary"),children:[r.multiBot?(0,n.jsx)("span",{className:"topic-chip collaboration",children:o("sessions.topic.collaboration")}):null,(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.sessions",{count:r.rows.length})}),(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.bots",{count:r.botCount})}),(0,n.jsx)("span",{className:"topic-chip active",children:o("sessions.topic.active",{count:r.activeCount})}),r.closedCount?(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.closed",{count:r.closedCount})}):null,r.inferredBotInputCount?(0,n.jsx)("span",{className:"topic-chip inferred",title:o("sessions.topic.inferredHint"),children:o("sessions.topic.botInputs",{count:r.inferredBotInputCount})}):null,(0,n.jsxs)("span",{className:"session-topic-updated",children:[o("sessions.last"),": ",Ie(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(w=>(0,n.jsx)(Wt,{row:w,selected:e.selected.has(w.sessionId),onToggleSelect:I=>{I.status!=="closed"?e.onToggleSelect(I):e.onOpen(I)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},w.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function ro(e){let t=e.message,s=t.senderType==="user",a=t.senderType==="app"||t.senderType==="bot",r=s?t.senderName||(e.ownerOpenId&&t.senderId===e.ownerOpenId?o("sessions.history.owner"):o("sessions.history.user")):t.senderName||String(t.senderId??"").slice(0,16)||o(a?"sessions.history.bot":"sessions.history.system"),m=String(t.content??"").trim()||`[${t.msgType??"message"}]`;return(0,n.jsxs)("div",{className:`history-msg${e.groupStart?" group-start":" continuation"}`,children:[e.groupStart?s?t.senderAvatar?(0,n.jsx)("img",{className:"history-avatar-img",src:String(t.senderAvatar),alt:"",decoding:"async",referrerPolicy:"no-referrer"}):(0,n.jsx)("span",{className:"history-avatar-user","aria-hidden":"true",children:String(r).slice(0,1)}):(0,n.jsx)("span",{className:"history-avatar-bot",dangerouslySetInnerHTML:de(Te({name:r,larkAppId:t.senderBotAppId,avatarUrl:t.senderAvatar,size:"sm"}))}):(0,n.jsx)("span",{className:"history-avatar-spacer","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"history-msg-main",children:[e.groupStart?(0,n.jsxs)("div",{className:"history-msg-meta",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)("time",{children:Ws(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:m})]})]})}function lo(e){let t=(0,u.useRef)(null);Hn(t,!!e.state);let s=e.state?Be.sessions.get(e.state.sessionId):null,a=(0,u.useRef)(null),r=!!e.state&&!e.state.loading&&!e.state.error&&e.state.messages.length>0;return(0,u.useEffect)(()=>{if(!r)return;let m=a.current;m&&(m.scrollTop=m.scrollHeight)},[r,e.state?.sessionId,e.state?.messages.length]),(0,n.jsx)("dialog",{id:"history-modal",className:"history-modal",ref:t,onClose:e.onClose,onClick:m=>{m.target===m.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:he(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(ie(s.title)||s.sessionId).slice(0,60)}),(0,n.jsx)("span",{className:"history-scope-tag",children:o("sessions.history.title")})]}),(0,n.jsx)("span",{className:"term-modal-actions",children:(0,n.jsx)(ke,{id:"history-close",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})})]}),(0,n.jsxs)("div",{className:"history-body",ref:a,children:[e.state.loading?(0,n.jsx)(Me,{label:o("sessions.history.loading"),className:"term-modal-loading",compact:!0}):null,!e.state.loading&&e.state.error?(0,n.jsxs)("div",{className:"history-error",children:[o("sessions.history.fail"),": ",e.state.error,e.state.stale?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("span",{children:o("sessions.history.staleHint")})]}):null]}):null,!e.state.loading&&!e.state.error&&e.state.messages.length===0?(0,n.jsx)("div",{className:"history-error",children:o("sessions.history.empty")}):null,!e.state.loading&&!e.state.error&&e.state.messages.length>0?(0,n.jsx)("div",{className:"history-list",children:e.state.messages.map((m,g,d)=>(0,n.jsx)(ro,{message:m,ownerOpenId:e.state?.ownerOpenId,groupStart:g===0||Ln(d[g-1])!==Ln(m)},m.messageId??g))}):null]})]}):null})}function co(e){let[t,s]=(0,u.useState)(!1),[a,r]=(0,u.useState)(""),m=(0,u.useRef)(null),g=ie(e.row.title)||e.row.sessionId;(0,u.useLayoutEffect)(()=>{if(!t||!m.current)return;let f=m.current;f.focus(),f.select(),(()=>{let I=getComputedStyle(f),N=document.createElement("span");N.style.cssText="position:absolute;visibility:hidden;white-space:pre",N.style.fontSize=I.fontSize,N.style.fontFamily=I.fontFamily,N.style.fontWeight=I.fontWeight,N.style.letterSpacing=I.letterSpacing,N.textContent=f.value||" ",document.body.appendChild(N);let T=Math.round(window.innerWidth*.6);f.style.width=`${Math.min(Math.max(N.offsetWidth+22,80),T)}px`,N.remove()})()},[t,a]);let d=f=>{let w=a.trim();s(!1),f&&w&&w!==g&&e.onRename(e.row,w)};return t?(0,n.jsx)("input",{ref:m,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:f=>r(f.currentTarget.value),onBlur:()=>d(!0),onKeyDown:f=>{f.stopPropagation(),f.key==="Enter"?(f.preventDefault(),d(!0)):f.key==="Escape"&&(f.preventDefault(),d(!1))}}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{className:"term-modal-name",title:String(e.row.title??g),children:String(g).slice(0,60)}),(0,n.jsx)(ke,{id:"term-modal-edit",icon:H.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(ie(e.row.title)||""),s(!0)}})]})}function uo(e){let t=(0,u.useRef)(null);Hn(t,!!e.state);let s=e.state?Be.sessions.get(e.state.sessionId):null,a=s?je(s):null,r=e.state?.url??a??"",m=s?String(s.cliId??"unknown"):"",g=s?Nn(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:d=>{d.target===d.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Te({name:he(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsxs)("span",{className:"term-modal-title-copy",children:[(0,n.jsxs)("span",{className:"term-modal-title-main",children:[(0,n.jsx)(co,{row:s,onRename:e.onRename}),(0,n.jsx)(an,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:he(s)}),(0,n.jsx)("span",{children:m}),g!=="-"?(0,n.jsx)("span",{title:s.workingDir??"",children:g}):null]})]})]}),(0,n.jsxs)("span",{className:"term-modal-actions",children:[s.feishuChatLink?(0,n.jsx)("a",{className:"card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener",title:o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),dangerouslySetInnerHTML:de(H.feishu)}):null,(0,n.jsx)("a",{id:"term-modal-tab",className:"card-act",href:r,target:"_blank",rel:"noopener",title:o("sessions.kanban.openTab"),"aria-label":o("sessions.kanban.openTab"),dangerouslySetInnerHTML:de(H.terminal)}),(0,n.jsx)(ke,{id:"term-modal-close",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})]})]}),(0,n.jsx)("div",{className:"term-modal-body",children:(0,n.jsx)("div",{className:"term-modal-frame-shell",children:e.state.loading?(0,n.jsx)(Me,{label:o("sessions.kanban.terminalLoading"),className:"term-modal-loading",compact:!0}):(0,n.jsx)("iframe",{className:"term-modal-frame",src:r,allow:"clipboard-read; clipboard-write"})})})]}):null})}function mo(e){let[t,s]=(0,u.useState)(null);(0,u.useEffect)(()=>s(null),[e.row.sessionId]);let a=async()=>{s({loading:!0});try{let g=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-diff`),d=await g.json().catch(()=>({}));if(!d.ok){s({loading:!1,message:(0,n.jsxs)("p",{children:[o("sessions.landUnavailable"),": ",String(d.error??g.status)]})});return}if(d.empty){s({loading:!1,message:(0,n.jsx)("p",{children:o("sessions.landEmpty")})});return}let f=String(d.patch??"");s({loading:!1,diff:d,patch:f.slice(0,2e4)+(f.length>2e4?`
|
|
3
|
-
...(truncated)`:"")})}catch(g){s({loading:!1,message:(0,n.jsxs)("p",{children:[o("sessions.landUnavailable"),": ",String(g)]})})}},r=async()=>{let g=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-land/apply`,{method:"POST"}),d=await g.json().catch(()=>({}));s({loading:!1,message:d.ok?(0,n.jsxs)("p",{children:[o("sessions.landApplied"),": ",d.files," files (+",d.insertions,"/-",d.deletions,") \u2192 ",(0,n.jsx)("code",{children:String(d.workingDir??"")})]}):(0,n.jsxs)("p",{children:[o("sessions.landFailed"),": ",String(d.error??g.status)]})})},m=async()=>{await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/sandbox-land/discard`,{method:"POST"}),s({loading:!1,message:(0,n.jsx)("p",{children:o("sessions.landDiscarded")})})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"land-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.land")}),(0,n.jsxs)("div",{id:"land-area",children:[t?.loading?(0,n.jsx)(Me,{label:o("sessions.landLoading"),compact:!0}):null,t?.message,t?.diff&&t.patch!==void 0?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:t.diff.files})," files (+",t.diff.insertions,"/-",t.diff.deletions,") \u2192 ",(0,n.jsx)("code",{children:String(t.diff.workingDir??"")})]}),(0,n.jsx)("pre",{style:{maxHeight:320,overflow:"auto",whiteSpace:"pre-wrap"},children:t.patch}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)("button",{id:"land-apply",type:"button",className:"primary",onClick:()=>{r()},children:o("sessions.landApply")}),(0,n.jsx)("button",{id:"land-discard",type:"button",className:"contrast",onClick:()=>{m()},children:o("sessions.landDiscard")})]})]}):null]})]})}function go(e){let t=e.report;if(!t||t.status!=="ok"){let f=t?.error?.message?String(t.error.message):String(t?.status??"error");return(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",f]})}let s=t.agg??{};if(!s.totalSpans)return(0,n.jsx)("p",{children:o("sessions.insightEmpty")});let a=[t.meta?.asOf?o("sessions.insightAsOf",{asOf:String(t.meta.asOf)}):null,t.meta?.partial?o("sessions.insightPartial"):null].filter(Boolean),r=Array.isArray(t.suggestions)?t.suggestions:[],m=Array.isArray(t.spans)?t.spans:[],g=f=>f==="bad"||f==="warn"?"!":"i",d=f=>f==="error"?"!":f==="running"?"...":"ok";return(0,n.jsxs)(n.Fragment,{children:[a.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:a.join(" \xB7 ")}):null,(0,n.jsx)("p",{children:o("sessions.insightMetrics",{total:String(s.totalSpans??0),failed:String(s.failedSpans??0),slow:String(s.slowSpans??0),rw:s.readWriteRatio===null||s.readWriteRatio===void 0?"-":String(s.readWriteRatio),compactions:String(s.compactions??0)})}),r.length?(0,n.jsxs)("details",{open:!0,children:[(0,n.jsx)("summary",{children:o("sessions.insightSuggestions")}),(0,n.jsx)("ul",{style:{paddingLeft:18,margin:"6px 0"},children:r.map((f,w)=>(0,n.jsxs)("li",{children:[g(String(f.severity??""))," ",(0,n.jsx)("b",{children:String(f.title??"")})," - ",String(f.action??""),Array.isArray(f.evidence)&&f.evidence.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("small",{style:{color:"var(--muted,#8f959e)"},children:f.evidence.join("; ")})]}):null]},w))})]}):null,m.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",m.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??m.length),total:String(t.meta.spansTotal??m.length)})}):null,(0,n.jsx)("div",{style:{maxHeight:320,overflow:"auto"},children:(0,n.jsx)("table",{style:{width:"100%",fontSize:12},children:(0,n.jsx)("tbody",{children:[...m].sort((f,w)=>(f.relStartMs??0)-(w.relStartMs??0)).map((f,w)=>{let I=[f.inputSummary,f.outputSummary].filter(Boolean).map(String).join(" -> ");return(0,n.jsxs)("tr",{style:f.status==="error"?{color:"var(--danger,#d33)"}:void 0,children:[(0,n.jsx)("td",{children:d(String(f.status??""))}),(0,n.jsx)("td",{children:(0,n.jsx)("code",{children:String(f.tool??"")})}),(0,n.jsx)("td",{children:String(f.phase??"")}),(0,n.jsx)("td",{children:qs(f.durationMs)}),(0,n.jsxs)("td",{children:["#",String(f.turnIndex??0)]}),(0,n.jsx)("td",{children:I})]},w)})})})})]}):null]})}function fo(e){let[t,s]=(0,u.useState)(null);if((0,u.useEffect)(()=>s(null),[e.row.sessionId]),!ve.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),m=await r.json().catch(()=>({}));!m.ok||!m.report?s({loading:!1,error:String(m.error??r.status)}):s({loading:!1,report:m.report})}catch(r){s({loading:!1,error:String(r)})}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"insight-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.insight")}),(0,n.jsxs)("div",{id:"insight-area",children:[t?.loading?(0,n.jsx)(Me,{label:o("sessions.insightLoading"),compact:!0}):null,t?.error?(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",t.error]}):null,t?.report?(0,n.jsx)(go,{report:t.report}):null]})]})}function po(e){let t=(0,u.useRef)(null);Hn(t,!!e.row);let s=e.row,a=s?je(s):null;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:r=>{r.target===r.currentTarget&&e.onClose()},children:s?(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{className:"drawer-title-row",children:[(0,n.jsx)("h3",{children:ie(s.title)||s.sessionId}),(0,n.jsx)(ke,{id:"drawer-close",className:"card-act drawer-close-btn",icon:H.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(an,{status:s.status}),(0,n.jsx)(On,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)($n,{value:s.sessionId})]})]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",he(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",s.cliId??"?"]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",xe(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)($n,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)($n,{value:s.rootMessageId??""})]}),s.threadId?(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"threadId:"})," ",(0,n.jsx)("code",{children:s.threadId})]}):null,(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.workingDir"),":"]})," ",s.workingDir??"-"]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)(Vt,{row:s}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)(Ys,{row:s,locateSession:e.locateSession}):null,(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),(0,n.jsx)(Gt,{row:s,url:a}),nn()&&s.status!=="closed"?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button","data-tip":o("sessions.copyCommandHint"),onClick:r=>{Tt(s,r.currentTarget)},children:o("sessions.copyCommand")}):null,sn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",onClick:async r=>{await e.restartSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"lock-btn",type:"button",onClick:r=>{e.setSessionLocked(s,!s.locked,r.currentTarget)},children:tn(s)}):null,s.queued&&s.status!=="closed"?(0,n.jsx)("button",{id:"start-btn",type:"button",className:"primary",onClick:async r=>{await e.startSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null,s.status==="closed"?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary",onClick:async r=>{await e.resumeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.resume")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"close-btn",type:"button",className:"contrast",onClick:async r=>{await e.closeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.close")}):null,(0,n.jsx)(mo,{row:s}),(0,n.jsx)(fo,{row:s})]})]}):null})}function bo(e){let t=e.state;(0,u.useEffect)(()=>{let p=e.dialog;return()=>{p.open&&p.close()}},[e.dialog]),(0,u.useEffect)(()=>{let p=e.dialog;if(t){if(!p.open)try{p.showModal()}catch{}}else p.open&&p.close()},[e.dialog,t]),(0,u.useEffect)(()=>{let p=e.dialog,A=()=>e.onClose(),x=B=>{B.target===p&&e.onClose()};return p.addEventListener("close",A),p.addEventListener("click",x),()=>{p.removeEventListener("close",A),p.removeEventListener("click",x)}},[e]);let[s,a]=(0,u.useState)(""),[r,m]=(0,u.useState)([]),[g,d]=(0,u.useState)(new Set),[f,w]=(0,u.useState)("lead"),[I,N]=(0,u.useState)(""),[T,P]=(0,u.useState)("in_progress"),[U,L]=(0,u.useState)(""),[K,Q]=(0,u.useState)(""),[ee,Z]=(0,u.useState)(!1),[F,ne]=(0,u.useState)(!1),[E,oe]=(0,u.useState)(""),[ue,ye]=(0,u.useState)(()=>tt(ce())),[q,Ae]=(0,u.useState)(null),[O,te]=(0,u.useState)(null),[me,we]=(0,u.useState)(0),X=(0,u.useRef)(null),C=(0,u.useRef)(1);if((0,u.useEffect)(()=>{t&&(a(""),m([]),d(new Set),w("lead"),N(""),P("in_progress"),L(""),Q(""),Z(!1),ne(!1),oe(""),Ae(null),te(null),we(0),C.current=1)},[t]),!t)return null;if(t.success){let p=t.success,A=typeof p.shareLink=="string"&&p.shareLink?p.shareLink:"",x=Array.isArray(p.failed)?p.failed.length:0,B=Array.isArray(p.spawned)?p.spawned.length:0,$=p.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress");return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.doneTitle")})}),(0,n.jsxs)("p",{children:[$,"\uFF08",B,"\uFF09"]}),x>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(x)})}):null,A?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:A,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")})}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",id:"cs-done",className:"primary",onClick:e.onClose,children:o("sessions.create.close")})})]})}if(t.loading)return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsx)(Me,{label:o("common.loading"),className:"cs-loading",compact:!0}),(0,n.jsx)("div",{className:"actions cs-actions",children:(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")})})]});let v=t.bots,R=[...g],se=R,z=p=>v.find(A=>A.larkAppId===p)?.botName??p,V=E.trim().toLowerCase(),ge=V?v.filter(p=>p.botName.toLowerCase().includes(V)||p.larkAppId.toLowerCase().includes(V)):v,J=O?Lt(v,O.query).slice(0,8):[],ae=p=>{if(!O)return;let A=At(s,O,p.botName);a(A.text),te(null),we(0),d(x=>new Set(x).add(p.larkAppId)),N(x=>x||p.larkAppId),requestAnimationFrame(()=>{let x=X.current;x&&(x.focus(),x.setSelectionRange(A.caret,A.caret))})},$e=p=>{if(!(!O||J.length===0)){if(p.key==="ArrowDown"||p.key==="ArrowUp"){p.preventDefault();let A=p.key==="ArrowDown"?1:-1;we(x=>(x+A+J.length)%J.length);return}if(p.key==="Enter"||p.key==="Tab"){p.preventDefault(),ae(J[Math.min(me,J.length-1)]);return}p.key==="Escape"&&(p.preventDefault(),te(null))}},Pe=async p=>{let A=[...p.clipboardData.files].filter(Y=>Y.type.startsWith("image/"));if(A.length===0)return;p.preventDefault();let x=p.currentTarget.selectionStart??s.length,B=p.currentTarget.selectionEnd??x,$=A.filter(Y=>_s.has(Y.type.toLowerCase()));if($.length!==A.length){alert(o("sessions.create.imageUnsupported"));return}if(r.length+$.length>zt){alert(o("sessions.create.imageCountLimit",{n:String(zt)}));return}if($.some(Y=>Y.size>Us)){alert(o("sessions.create.imageSizeLimit"));return}if(r.reduce((Y,_)=>Y+_.size,0)+$.reduce((Y,_)=>Y+_.size,0)>Fs){alert(o("sessions.create.imageTotalLimit"));return}try{let Y=C.current,_=await Promise.all($.map(async(G,Oe)=>{let pe=await js(G),Je=pe.indexOf(",");if(Je<0)throw new Error("bad_image_data");let Ce=Y+Oe;return{id:`${Date.now()}-${Oe}-${Math.random().toString(36).slice(2)}`,ordinal:Ce,marker:`[${o("sessions.create.imageMarker",{n:String(Ce)})}]`,name:G.name||`pasted-image-${r.length+Oe+1}`,mimeType:G.type.toLowerCase(),size:G.size,dataBase64:pe.slice(Je+1),previewUrl:pe}}));C.current+=_.length;let Ee=Et(s,x,B,_.map(G=>G.marker));a(Ee.text),m(G=>[...G,..._]),te(null),requestAnimationFrame(()=>{let G=X.current;G&&(G.focus(),G.setSelectionRange(Ee.caret,Ee.caret))})}catch{alert(o("sessions.create.imageReadFailed"))}},Le=async p=>{p.preventDefault();let A=s.trim();if(!A){alert(o("sessions.create.errContent"));return}if(R.length===0){alert(o("sessions.create.errNoBot"));return}let x=I||R[0]||"";if(f==="lead"&&(!x||!R.includes(x))){alert(o("sessions.create.errLead"));return}ne(!0),Ae(null);try{let B=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:A,larkAppIds:R,mode:f,column:T,leadLarkAppId:f==="lead"?x:void 0,name:U.trim()||void 0,bindWorkingDir:K.trim()||void 0,images:r.map(fe=>({name:fe.name,mimeType:fe.mimeType,dataBase64:fe.dataBase64}))})}),$=await B.json().catch(()=>null);B.ok&&$?.ok?ue?(Ae($),a(""),m([]),C.current=1,L("")):e.onSuccess($):B.status!==401&&alert(`${o("sessions.create.failed")}: ${$?.error??B.status}`)}catch(B){alert(`${o("sessions.create.failed")}: ${B}`)}finally{ne(!1)}};return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsxs)("form",{id:"cs-form",onSubmit:Le,children:[(0,n.jsxs)("fieldset",{className:"cs-content",children:[(0,n.jsx)("legend",{children:o("sessions.create.content")}),(0,n.jsxs)("div",{className:"cs-composer",children:[(0,n.jsx)("textarea",{ref:X,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:p=>{let A=p.currentTarget,x=A.value;a(x),te(En(x,A.selectionStart??x.length)),we(0)},onClick:p=>te(En(s,p.currentTarget.selectionStart??s.length)),onKeyDown:$e,onPaste:p=>{Pe(p)},onBlur:()=>setTimeout(()=>te(null),0)}),O?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:J.length?J.map((p,A)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":A===me,className:A===me?"active":void 0,onMouseDown:x=>x.preventDefault(),onClick:()=>ae(p),children:[(0,n.jsxs)("strong",{children:["@",p.botName]}),(0,n.jsx)("small",{children:p.larkAppId})]},p.larkAppId)):(0,n.jsx)("p",{children:o("sessions.create.noBotMatch")})}):null]}),(0,n.jsx)("small",{id:"cs-content-help",children:o("sessions.create.contentHelp")}),r.length?(0,n.jsx)("div",{className:"cs-image-list","aria-label":o("sessions.create.pastedImages"),children:r.map(p=>(0,n.jsxs)("figure",{className:"cs-image-item",children:[(0,n.jsx)("img",{src:p.previewUrl,alt:p.name}),(0,n.jsxs)("figcaption",{title:`${p.marker} ${p.name}`,children:[(0,n.jsx)("strong",{children:p.marker}),(0,n.jsx)("span",{children:p.name})]}),(0,n.jsx)("button",{type:"button",className:"cs-image-remove","aria-label":o("sessions.create.removeImage",{name:`${p.marker} ${p.name}`}),title:o("sessions.create.removeImage",{name:`${p.marker} ${p.name}`}),onClick:()=>{let A=r.filter(B=>B.id!==p.id),x=Rt(s,p.marker,A.map(B=>B.marker),B=>`[${o("sessions.create.imageMarker",{n:String(B+1)})}]`);a(x.text),m(A.map((B,$)=>({...B,ordinal:$+1,marker:x.markers[$]}))),C.current=A.length+1},children:(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M7 7l10 10M17 7 7 17"})})})]},p.id))}):null]}),(0,n.jsxs)("fieldset",{className:"cs-bots",children:[(0,n.jsx)("legend",{children:o("sessions.create.bots")}),v.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{className:"cs-bot-search",type:"search",name:"botSearch",placeholder:o("sessions.create.botSearchPlaceholder"),"aria-label":o("sessions.create.botSearchPlaceholder"),value:E,onChange:p=>oe(p.currentTarget.value)}),ge.length?(0,n.jsx)("div",{className:"cs-bot-list",children:ge.map(p=>(0,n.jsxs)("label",{className:"cs-bot",children:[(0,n.jsx)("input",{type:"checkbox",name:"bot",value:p.larkAppId,checked:g.has(p.larkAppId),onChange:A=>{let x=A.currentTarget.checked;d(B=>{let $=new Set(B);return x?$.add(p.larkAppId):$.delete(p.larkAppId),$.has(I)||N($.values().next().value??""),$})}})," ",(0,n.jsx)("span",{children:p.botName})]},p.larkAppId))}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBotMatch")}),R.length?(0,n.jsx)("small",{children:o("sessions.create.selectedCount",{n:String(R.length)})}):null]}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBots")})]}),(0,n.jsxs)("fieldset",{className:"cs-mode",children:[(0,n.jsx)("legend",{children:o("sessions.create.mode")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"lead",checked:f==="lead",onChange:()=>w("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:f==="all",onChange:()=>w("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-lead-row",hidden:f!=="lead",children:[(0,n.jsx)("legend",{children:o("sessions.create.lead")}),(0,n.jsx)("select",{name:"lead",disabled:se.length===0,value:se.includes(I)?I:"",onChange:p=>N(p.currentTarget.value),children:se.length?se.map(p=>(0,n.jsx)("option",{value:p,children:z(p)},p)):(0,n.jsx)("option",{value:"",disabled:!0,children:o("sessions.create.leadPickFirst")})}),(0,n.jsx)("small",{children:o("sessions.create.leadHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-column",children:[(0,n.jsx)("legend",{children:o("sessions.create.column")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"in_progress",checked:T==="in_progress",onChange:()=>P("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:T==="backlog",onChange:()=>P("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${ee?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":ee,"aria-controls":"cs-advanced-fields",onClick:()=>Z(p=>!p),children:o("sessions.create.optionalConfig")})}),ee?(0,n.jsxs)("div",{id:"cs-advanced-fields",className:"cs-advanced-fields",children:[(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.groupName")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"name",maxLength:60,placeholder:o("sessions.create.groupNamePlaceholder"),value:U,onChange:p=>L(p.currentTarget.value)})]}),(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.workingDir")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/foo",value:K,onChange:p=>Q(p.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),q?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[q.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(q.failed)&&q.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(q.failed.length)})}`:""]}),typeof q.shareLink=="string"&&q.shareLink?(0,n.jsx)("a",{href:q.shareLink,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")}):null]}):null,(0,n.jsxs)("div",{className:"actions cs-actions",children:[(0,n.jsxs)("label",{className:"cs-keep-open",title:o("sessions.create.keepOpenHelp"),children:[(0,n.jsx)("input",{type:"checkbox",name:"keepOpen",checked:ue,onChange:p=>{let A=p.currentTarget.checked;ye(A),st(ce(),A)}}),(0,n.jsx)("span",{children:o("sessions.create.keepOpen")})]}),(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")}),(0,n.jsx)("button",{type:"submit",className:"cs-submit",disabled:F||v.length===0,children:F?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function ho(){ut();let e=dt(i=>[...i.sessions.values()]),[t,s]=(0,u.useState)(0),a=(0,u.useCallback)(()=>s(i=>i+1),[]),[r,m]=(0,u.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:Qn(ce()),active:!0,cli:new Set(le)}),[g,d]=(0,u.useState)(new Set),[f,w]=(0,u.useState)("lastMessageAt"),[I,N]=(0,u.useState)("desc"),[T,P]=(0,u.useState)(()=>Yn(ce())),[U,L]=(0,u.useState)(()=>Zn(ce())),[K,Q]=(0,u.useState)(!1),[ee,Z]=(0,u.useState)(null),[F,ne]=(0,u.useState)(null),[E,oe]=(0,u.useState)(()=>ot(ce())),ue=`${T}:${T==="kanban"?E:"-"}`,ye=(0,u.useRef)(!0),[q,Ae]=(0,u.useState)(0),[O,te]=(0,u.useState)([]),[me,we]=(0,u.useState)(null),[X,C]=(0,u.useState)(!1),v=(0,u.useRef)(!1),[R,se]=(0,u.useState)(()=>{try{return window.localStorage.getItem(kn)??""}catch{return""}}),[z,V]=(0,u.useState)({data:null,key:"",fetchedAt:0}),ge=(0,u.useRef)(!1),J=(0,u.useRef)(new Set),[ae,$e]=(0,u.useState)(""),[Pe,Le]=(0,u.useState)(null),[p,A]=(0,u.useState)(null),[x,B]=(0,u.useState)(null),[$,fe]=(0,u.useState)(!1),[Y,_]=(0,u.useState)(24),[Ee,G]=(0,u.useState)(""),[Oe,pe]=(0,u.useState)(null),[Je,Ce]=(0,u.useState)(null),[qt,rn]=(0,u.useState)(null),[Yt,Qt]=(0,u.useState)(null),[ln,Zt]=(0,u.useState)(null),[es,Xe]=(0,u.useState)(null),[ns,cn]=(0,u.useState)(!1),Ke=(0,u.useRef)(0);(0,u.useLayoutEffect)(()=>{if(ye.current){ye.current=!1;return}Ae(i=>i+1)},[ue]),(0,u.useEffect)(()=>{Zt(document.getElementById("create-session-modal"))},[]),(0,u.useEffect)(()=>{rt().then(a)},[a]);let dn=(0,u.useMemo)(()=>{let i=new Map;for(let c of e){let l=String(c.chatId??"").trim();if(!l||!r.showUnknownChats&&Mn(c))continue;let b=xe(c),h=i.get(l);(!h||b<h)&&i.set(l,b)}return[...i.entries()].sort((c,l)=>c[1].localeCompare(l[1])).map(([c,l])=>({value:c,label:l}))},[r.showUnknownChats,t,e]);(0,u.useEffect)(()=>{r.chat&&(dn.some(i=>i.value===r.chat)||m(i=>({...i,chat:""})))},[dn,r.chat]);let be=(0,u.useMemo)(()=>{let i=r.q.toLowerCase(),c=[...r.cli],l=c.length>0&&c.length<le.length,b=T==="kanban",h=r.multiBotTopics||r.botTriggeredTopics?new Set(en(e).filter(y=>!r.multiBotTopics||y.multiBot).filter(y=>!r.botTriggeredTopics||y.inferredBotTriggered).map(y=>y.key)):null,k=e.filter(y=>!l||c.includes(y.cliId??"unknown")).filter(y=>r.showUnknownChats||!Mn(y)).filter(y=>!r.status||y.status===r.status).filter(y=>!r.adopt||r.adopt==="yes"==!!y.adopt).filter(y=>!r.chat||String(y.chatId??"")===r.chat).filter(y=>!r.active||b||y.status!=="closed").filter(y=>!i||St(y).includes(i));return h?k.filter(y=>h.has(An(y))).sort((y,D)=>Xt(y,D,f,I)):k.sort((y,D)=>Xt(y,D,f,I))},[r,t,I,f,e,T]),un=(0,u.useMemo)(()=>Ct(e),[e]),Se=(0,u.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,t]),Kn=(0,u.useMemo)(()=>be.filter(i=>i.status!=="closed"),[be]),_e=(T==="table"||T==="topics"?be:Kn).filter(i=>i.status!=="closed"),_n=[...g].map(i=>Se.get(i)).filter(i=>!!i&&i.status!=="closed"),Un=_e.length>0&&_e.every(i=>g.has(i.sessionId)),ts=_e.some(i=>g.has(i.sessionId))&&!Un;(0,u.useEffect)(()=>{d(i=>{let c=!1,l=new Set;for(let b of i){let h=Se.get(b);h&&h.status!=="closed"?l.add(b):c=!0}return c?l:i})},[Se]);let mn=(0,u.useCallback)(i=>{let c=new Set;if(!i)return c;for(let l of i.groupChats)c.add(l);if(me)for(let[l,b]of me){if(c.has(l))continue;let h=!1;for(let k of i.botIds)if(b.botIds.has(k)){h=!0;break}if(h){for(let k of b.observedNames)if(i.botNames.has(k)){c.add(l);break}}}return c},[me]),Fn=(0,u.useMemo)(()=>{if(T==="kanban"&&E==="team"){let i=O.find(l=>l.key===R)??O[0],c=mn(i);return be.filter(l=>c.has(String(l.chatId)))}return be},[E,R,O,be,mn,T]),gn=(0,u.useCallback)(i=>bt(Fn,i),[Fn]),fn=(0,u.useCallback)(async()=>{if(!(v.current||X)){v.current=!0;try{let[i,c,l]=await Promise.all([fetch("/api/team/hosted").then(k=>k.json()).catch(()=>null),fetch("/api/team/remote-roster").then(k=>k.json()).catch(()=>null),fetch("/api/groups").then(k=>k.json()).catch(()=>null)]);Array.isArray(l?.chats)&&we(new Map(l.chats.map(k=>[String(k.chatId),{botIds:new Set((k.memberBots??[]).filter(y=>y.inChat).map(y=>String(y.larkAppId))),observedNames:new Set((k.observedBotNames??[]).map(y=>String(y)))}])));let b=k=>({ids:new Set(k.map(y=>String(y.larkAppId))),names:new Set(k.map(y=>String(y.name??"")).filter(Boolean))}),h=[];for(let k of i?.teams??[]){let{ids:y,names:D}=b(k.bots??[]);h.push({key:`local:${k.teamId}`,label:k.isDefault?o("team.myHostedTeam"):String(k.name??k.teamId),botIds:y,botNames:D,groupChats:new Set((k.groupChatIds??[]).map(j=>String(j)))})}for(let k of c?.memberships??[]){let{ids:y,names:D}=b(k.roster?.bots??[]);h.push({key:`${k.hubUrl}::${k.teamId}`,label:String(k.teamName??k.teamId??k.hubUrl),botIds:y,botNames:D,groupChats:new Set})}te(h),se(k=>h.length&&!h.some(y=>y.key===k)?h[0].key:k)}finally{C(!0),v.current=!1}}},[X]),jn=(0,u.useCallback)(async(i,c,l,b,h)=>{try{let y=i.startsWith("local:")?await fetch(`/api/team/board/local/${encodeURIComponent(i.slice(6))}/move`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:c,column:l,position:b})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:c,column:l,position:b})}),D=await y.json().catch(()=>({}));(!y.ok||D?.ok===!1)&&(V(j=>{if(!j.data||j.key!==i)return j;let W={...j.data.board};return h?W[c]=h:delete W[c],{...j,data:{...j.data,board:W}}}),y.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${D?.error??y.status}`))}catch(k){V(y=>{if(!y.data||y.key!==i)return y;let D={...y.data.board};return h?D[c]=h:delete D[c],{...y,data:{...y.data,board:D}}}),alert(`${o("sessions.kanban.moveFail")}: ${k}`)}},[]),ss=(0,u.useCallback)(async i=>{let c=z.key===i.key&&Date.now()-z.fetchedAt<3e4;if(!(ge.current||c)){ge.current=!0;try{let b=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,h=await fetch(b),k=await h.json().catch(()=>({}));if(!h.ok||k?.ok===!1)return;let y=typeof k.deploymentId=="string"?k.deploymentId:null,D=[];for(let j of Array.isArray(k.reports)?k.reports:[])if(!(y&&j.deploymentId===y))for(let W of Array.isArray(j.sessions)?j.sessions:[])D.push({...W,remoteDeployment:j.deploymentName||j.deploymentId});V({key:i.key,fetchedAt:Date.now(),data:{board:k.board&&typeof k.board=="object"?k.board:{},remoteRows:D}})}finally{ge.current=!1}}},[z.fetchedAt,z.key]);(0,u.useEffect)(()=>{T==="kanban"&&E==="team"&&!X&&fn()},[E,X,fn,T]),(0,u.useEffect)(()=>{let i=window.setInterval(()=>{T==="kanban"&&E==="team"&&(V(c=>({...c,fetchedAt:0})),a())},3e4);return()=>window.clearInterval(i)},[E,a,T]);let zn=(0,u.useCallback)(async(i,c,l,b)=>{try{let h=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:c,position:l})}),k=await h.json().catch(()=>({}));(!h.ok||k?.ok===!1)&&(i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),h.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${k?.error??h.status}`))}catch(h){i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),alert(`${o("sessions.kanban.moveFail")}: ${h}`)}},[a]),os=(0,u.useCallback)(i=>{let c=!1;for(let l of i){let b=String(l.row.sessionId);if(!b||l.row.status==="closed"&&l.column!=="done")continue;if(E==="team"){let y=O.find(W=>W.key===R)??O[0];if(!y)continue;let j=(z.key===y.key&&z.data?z.data.board:{})[b];V(W=>{let Vn=W.key===y.key&&W.data?W.data:{board:{},remoteRows:W.data?.remoteRows??[]},Cs={...Vn.board,[b]:{column:l.column,position:l.position}};return{...W,key:y.key,data:{...Vn,board:Cs}}}),jn(y.key,b,l.column,l.position,j),c=!0;continue}let h=Be.sessions.get(b);if(!h)continue;let k={column:h.kanbanColumn,position:h.kanbanPosition};h.kanbanColumn=l.column,h.kanbanPosition=l.position,zn(h,l.column,l.position,k),c=!0}c&&a()},[E,R,O,z,zn,jn,a]),Jn=(0,u.useCallback)(async(i,c)=>{let l=i.title;i.title=c,a();try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:c})}),h=await b.json().catch(()=>({}));(!b.ok||h?.ok===!1)&&(i.title=l,a(),b.status!==401&&alert(`${o("sessions.kanban.renameFail")}: ${h?.error??b.status}`))}catch(b){i.title=l,a(),alert(`${o("sessions.kanban.renameFail")}: ${b}`)}},[a]),pn=(0,u.useCallback)(async i=>{try{let c=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),l=await c.json();return l.ok?!0:(alert(`Locate failed: ${l.error??c.status}`),!1)}catch(c){return alert(`Locate error: ${c}`),!1}},[]),bn=(0,u.useCallback)(async(i,c)=>{if(!confirm(o("sessions.closeConfirm")))return!1;c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b?.ok===!1?(l.status!==401&&alert(`Close failed: ${b?.error??l.status}`),!1):(d(h=>{let k=new Set(h);return k.delete(i.sessionId),k}),a(),!0)}catch(l){return alert(`Close error: ${l}`),!1}finally{c&&(c.disabled=!1)}},[a]),Ge=(0,u.useCallback)(async(i,c,l)=>{let b=!!i.locked;if(b===c)return!0;i.locked=c,a(),l&&(l.disabled=!0);try{let h=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:c})}),k=await h.json().catch(()=>({}));return!h.ok||k?.ok===!1?(i.locked=b,a(),h.status!==401&&alert(`${o("sessions.lockFailed")}: ${k?.error??h.status}`),!1):(i.locked=!!k.locked,a(),!0)}catch(h){return i.locked=b,a(),alert(`${o("sessions.lockFailed")}: ${h}`),!1}finally{l&&(l.disabled=!1)}},[a]),Ve=(0,u.useCallback)(async(i,c)=>{if(J.current.has(i.sessionId)||!confirm(Mt(i)))return!1;c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b?.ok===!1?(l.status!==401&&alert(`${o("sessions.restartFailed")}: ${b?.error??l.status}`),!1):(J.current.add(i.sessionId),window.setTimeout(()=>J.current.delete(i.sessionId),5e3),!0)}catch(l){return alert(`${o("sessions.restartFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),as=(0,u.useCallback)(async(i,c)=>{c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b.ok===!1?(alert(`${o("sessions.resumeFailed")}: ${b?.error??l.status}`),!1):!0}catch(l){return alert(`${o("sessions.resumeFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),is=(0,u.useCallback)(async(i,c)=>{c&&(c.disabled=!0);try{let l=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),b=await l.json().catch(()=>({}));return!l.ok||b.ok===!1?(l.status!==401&&alert(`${o("sessions.create.startFailed")}: ${b?.error??l.status}`),!1):!0}catch(l){return alert(`${o("sessions.create.startFailed")}: ${l}`),!1}finally{c&&(c.disabled=!1)}},[]),We=(0,u.useCallback)(i=>{Ce({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let c=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),l=await c.json().catch(()=>({}));if(!c.ok||l?.ok===!1){let h=String(l?.error??c.status),k=h==="not_found_yet"||h==="not_found";Ce(y=>y?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:h,stale:k}:y);return}let b=Array.isArray(l.messages)?l.messages:[];Ce(h=>h?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:b,ownerOpenId:l.ownerOpenId}:h)}catch(c){Ce(l=>l?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(c)}:l)}})()},[]),rs=(0,u.useCallback)(i=>{let c=je(i);if(!c){pe(i.sessionId);return}rn({sessionId:i.sessionId,url:c,loading:!0}),(async()=>{let l=c;if(nn())try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/write-link`),h=await b.json().catch(()=>({}));b.ok&&h?.ok!==!1&&h?.url&&(l=h.url)}catch{}rn(b=>b?.sessionId===i.sessionId?{sessionId:i.sessionId,url:l,loading:!1}:b)})()},[]),ls=(0,u.useCallback)(async()=>{let i=[...g];if(i.length===0||!confirm(o("sessions.closeBulkConfirm",{count:i.length})))return;Le({done:0,total:i.length});let c=0,l=0,b=[...i];async function h(){for(;b.length;){let k=b.shift();try{let y=await fetch(`/api/sessions/${encodeURIComponent(k)}/close`,{method:"POST"}),D=await y.json().catch(()=>({}));(!y.ok||D?.ok===!1)&&(l+=1)}catch{l+=1}finally{c+=1,Le({done:c,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>h())),Le(null),d(new Set),a(),l>0&&alert(`Failed: ${l}/${i.length}`)},[a,g]),cs=(0,u.useCallback)(async i=>{let c=[...g].map(y=>Se.get(y)).filter(y=>!!y&&y.status!=="closed"&&!!y.locked!==i);if(c.length===0)return;A({locked:i,done:0,total:c.length});let l=0,b=0,h=[...c];async function k(){for(;h.length;){let y=h.shift(),D=!!y.locked;try{let j=await fetch(`/api/sessions/${encodeURIComponent(y.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),W=await j.json().catch(()=>({}));!j.ok||W?.ok===!1?(b+=1,y.locked=D):y.locked=!!W.locked}catch{b+=1,y.locked=D}finally{l+=1,A({locked:i,done:l,total:c.length})}}}await Promise.all(Array.from({length:Math.min(6,c.length)},()=>k())),A(null),a(),b>0&&alert(`${o("sessions.lockFailed")}: ${b}/${c.length}`)},[a,Se,g]),ds=(0,u.useCallback)(()=>{let i=[...g].filter(l=>!!Se.get(l));if(i.length===0)return;let c=ft(i);B(o("sessions.monitorRoomAdded",{added:c.added,total:c.total})),window.setTimeout(()=>B(null),1800)},[Se,g]),us=(0,u.useCallback)(async i=>{let c=Sn(i);if(!c)return;let l=gn(c);if(l.length!==0){_(c),fe(!0),G(o("sessions.idleCleanupRunning"));try{let b=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:c,sessionIds:l.map(k=>k.sessionId)})}),h=await b.json().catch(()=>({}));if(!b.ok){b.status!==401&&alert(`${o("sessions.idleCleanupFailed")}: ${h?.error??b.status}`),G("");return}d(k=>{let y=new Set(k);for(let D of h?.results??[])D?.ok&&D?.sessionId&&y.delete(String(D.sessionId));return y}),G(o("sessions.idleCleanupDone",{closed:Number(h?.closed??0),failed:Number(h?.failed??0)})),a()}catch(b){alert(`${o("sessions.idleCleanupFailed")}: ${b}`),G("")}finally{fe(!1)}}},[gn,a]),ms=i=>{let c=qn(i)??"board";c!==T&&(P(c),et(ce(),c))},gs=(i,c)=>{L(l=>{let b=l.indexOf(i),h=b+c;if(b<0||h<0||h>=l.length)return l;let k=[...l];return k.splice(b,1),k.splice(h,0,i),yn(ce(),k),k})},fs=(i,c)=>{i!==c&&L(l=>{let b=l.indexOf(i),h=l.indexOf(c);if(b<0||h<0)return l;let k=[...l];return k.splice(b,1),k.splice(h,0,i),yn(ce(),k),k})},ps=(0,u.useMemo)(()=>({rows:be,groupBy:E,teams:O,teamsLoaded:X,teamKey:R,teamBoardData:z.data,teamBoardKey:z.key}),[E,R,O,X,be,z.data,z.key]),bs=Oe?Se.get(Oe)??null:null,hn=(0,u.useMemo)(()=>X?O.length?O.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[O,X]),hs=!X||O.length===0,Xn=O.some(i=>i.key===R)?R:hn[0]?.value??"",ys=hn.find(i=>i.value===Xn)?.label??o("sessions.kanban.groupTeam"),ks=(0,u.useCallback)(()=>{Ke.current+=1,cn(!1),Xe(null)},[]),Gn=(0,u.useCallback)(async()=>{let i=Ke.current+1;Ke.current=i,Xe({bots:[],loading:!0}),cn(!0);try{let c=await xt();if(Ke.current!==i)return;Xe({bots:c})}finally{Ke.current===i&&cn(!1)}},[]),ws=(0,u.useCallback)(async()=>{let i=window.prompt(o("sessions.debugTerminalPrompt"),"");if(i===null)return;let c=i.trim(),l=window.open("about:blank","_blank");l&&(l.opener=null);try{let b=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(c?{workingDir:c}:{})}),h=await b.json().catch(()=>({}));if(!b.ok||h?.ok===!1||!h?.url){l?.close(),b.status!==401&&alert(`${o("sessions.debugTerminalFail")}: ${h?.error??b.status}`);return}l?l.location.href=h.url:window.open(h.url,"_blank","noopener")}catch(b){l?.close(),alert(`${o("sessions.debugTerminalFail")}: ${b}`)}},[]);return(0,u.useEffect)(()=>{let i=()=>{mt()&&ve.authed&&Gn()};return i(),window.addEventListener(wn,i),()=>window.removeEventListener(wn,i)},[]),(0,n.jsxs)("section",{className:"page sessions-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{className:"sessions-heading-main",children:[(0,n.jsx)("p",{className:"eyebrow",children:o("nav.sessions")}),(0,n.jsx)("h1",{children:o("sessions.title")}),(0,n.jsxs)("div",{className:"sessions-view-controls",children:[(0,n.jsx)("div",{className:"segmented sessions-view-toggle",role:"group","aria-label":o("sessions.viewMode"),children:[["kanban",o("sessions.viewKanban")],["board",o("sessions.viewBoard")],["topics",o("sessions.viewTopics")],["table",o("sessions.viewTable")]].map(([i,c])=>(0,n.jsx)("button",{type:"button","data-view":i,className:T===i?"active":void 0,"aria-pressed":T===i,onClick:()=>ms(i),children:c},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${T==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":T!=="kanban",children:[["flow",o("sessions.kanban.groupFlow")],["team",o("sessions.kanban.groupTeam")],["bot",o("sessions.kanban.groupBot")]].map(([i,c])=>(0,n.jsx)("button",{type:"button","data-groupby":i,className:E===i?"active":void 0,"aria-pressed":E===i,onClick:()=>{oe(i),at(ce(),i)},children:c},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(T==="kanban"&&E==="team"&&X),children:ae}),(0,n.jsx)(Ue,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(T==="kanban"&&E==="team"),disabled:hs,label:ys,value:Xn,options:hn,onChange:i=>{if(O.some(c=>c.key===i)){se(i);try{window.localStorage.setItem(kn,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=pt()},children:o("sessions.monitorRoom")}),ve.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{ws()},children:o("sessions.debugTerminal")}):null,ve.authed?(0,n.jsx)(ct,{className:"page-primary-action create-session-btn",disabled:ns,onClick:()=>{Gn()},children:o("sessions.create.button")}):null]})]}),(0,n.jsxs)("div",{className:"session-runtime-stats","aria-live":"polite",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:un.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)(eo,{chatOptions:dn,filters:r,setFilters:m,idleCleanup:{busy:$,hours:Y,status:Ee,countForHours:i=>gn(i).length,onRun:us}}),(0,n.jsx)(no,{selectedCount:g.size,lockDisabled:!_n.some(i=>!i.locked),unlockDisabled:!_n.some(i=>!!i.locked),closeProgress:Pe,lockProgress:p,monitorRoomText:x,onClear:()=>d(new Set),onClose:()=>{ls()},onAddToMonitorRoom:ds,onLock:i=>{cs(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${q>0?" sessions-view-stage-enter":""}`,"data-view":T,"data-kanban-group":E,children:[(0,n.jsx)(so,{rows:be,selected:g,hidden:T!=="table",sortKey:f,sortDir:I,selectAllChecked:Un,selectAllIndeterminate:ts,selectAllDisabled:_e.length===0,onOpen:i=>pe(i.sessionId),onSelect:(i,c)=>d(l=>{let b=new Set(l);return c?b.add(i):b.delete(i),b}),onSelectAll:i=>d(c=>{let l=new Set(c);for(let b of _e)i?l.add(b.sessionId):l.delete(b.sessionId);return l}),onSort:i=>{f===i?N(I==="asc"?"desc":"asc"):(w(i),N(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))}}),(0,n.jsx)(oo,{rows:Kn,selected:g,hidden:T!=="board",order:U,animated:K,dragColId:ee,dragOverCol:F,onAnimated:()=>Q(!0),onMoveColumn:gs,onMoveColumnTo:fs,onDragCol:Z,onDragOverCol:ne,onToggleSelect:i=>d(c=>{let l=new Set(c);return l.has(i.sessionId)?l.delete(i.sessionId):l.add(i.sessionId),l}),onOpen:i=>pe(i.sessionId),onHistory:We,onLocate:i=>pn(i),onRestart:(i,c)=>{Ve(i,c)},onLock:(i,c,l)=>{Ge(i,c,l)},onClose:(i,c)=>{bn(i,c)}}),(0,n.jsx)(io,{rows:be,relationRows:e,selected:g,hidden:T!=="topics",onToggleSelect:i=>d(c=>{let l=new Set(c);return l.has(i.sessionId)?l.delete(i.sessionId):l.add(i.sessionId),l}),onOpen:i=>pe(i.sessionId),onHistory:We,onLocate:i=>pn(i),onRestart:(i,c)=>{Ve(i,c)},onLock:(i,c,l)=>{Ge(i,c,l)},onClose:(i,c)=>{bn(i,c)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:Qt,className:`sessions-kanban${E==="bot"?" kanban-mode-bot":""}`,hidden:T!=="kanban",children:T==="kanban"?(0,n.jsx)(jt,{host:Yt,...ps,canRestartSession:sn,getTeamChatIds:mn,icons:{details:H.details,feishu:H.feishu,history:H.history,lock:H.lock,restart:H.restart,terminal:H.terminal,unlock:H.unlock},lockActionLabel:tn,sessionStatusText:Fe,onDetails:i=>pe(String(i.sessionId)),onHistory:We,onMoveRows:os,onNeedTeamBoard:i=>{ss(i)},onNeedTeams:()=>{fn()},onOpenTerminal:rs,onRename:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Jn(l,c)},onRestart:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Ve(l,c)},onTeamScope:i=>$e(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,c)=>{let l=Be.sessions.get(String(i.sessionId));l&&Ge(l,!l.locked,c)},onToggleSelect:i=>d(c=>{let l=String(i.sessionId),b=new Set(c);return b.has(l)?b.delete(l):b.add(l),b}),selectedSessionIds:g}):null})]},q),(0,n.jsx)(po,{row:bs,onClose:()=>pe(null),locateSession:pn,openHistory:We,resumeSession:as,restartSession:Ve,closeSession:bn,setSessionLocked:Ge,startSession:is}),(0,n.jsx)(uo,{state:qt,onClose:()=>rn(null),onRename:Jn}),(0,n.jsx)(lo,{state:Je,onClose:()=>Ce(null)}),ln?(0,Pn.createPortal)((0,n.jsx)(bo,{dialog:ln,state:es,onClose:ks,onSuccess:i=>Xe(c=>c&&{...c,success:i})}),ln):null]})}function Wo(e){return lt(e,(0,n.jsx)(ho,{}))}export{Zs as CliFilterGroup,io as TopicGroupsView,Wo as renderSessionsPage};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { type Locale } from '../i18n/index.js';
|
|
2
|
-
export interface LandDiff {
|
|
3
|
-
ok: true;
|
|
4
|
-
empty: boolean;
|
|
5
|
-
patch: string;
|
|
6
|
-
statText: string;
|
|
7
|
-
files: number;
|
|
8
|
-
insertions: number;
|
|
9
|
-
deletions: number;
|
|
10
|
-
}
|
|
11
|
-
export interface LandError {
|
|
12
|
-
ok: false;
|
|
13
|
-
error: string;
|
|
14
|
-
}
|
|
15
|
-
/** Locate the project overlay UPPER dir (= SandboxSpawn.workDir) for a session. */
|
|
16
|
-
export declare function upperDir(dataDir: string, sessionId: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* Compute the agent's changeset from the session's overlay upper layer, with a
|
|
19
|
-
* human-readable preview (per-file `git diff --no-index` vs the real project).
|
|
20
|
-
*/
|
|
21
|
-
export declare function computeSandboxDiff(dataDir: string, sessionId: string, locale?: Locale): LandDiff | LandError;
|
|
22
|
-
/**
|
|
23
|
-
* Apply the session's overlay upper changeset onto the real target project:
|
|
24
|
-
* - regular file in upper → mkdir -p parent, copy over the real file
|
|
25
|
-
* - symlink in upper → recreate the link (NOT a dereferenced copy)
|
|
26
|
-
* - whiteout → remove the corresponding real file/dir
|
|
27
|
-
* - opaque dir → only when the dir ALSO exists in the target (= a
|
|
28
|
-
* wholesale replace): drop the stale lower contents,
|
|
29
|
-
* then re-create it (its surviving files arrive as
|
|
30
|
-
* separate 'file'/'symlink' changes). A purely-new
|
|
31
|
-
* opaque dir is just mkdir'd (never rm -rf'd).
|
|
32
|
-
*
|
|
33
|
-
* Two-phase for safety:
|
|
34
|
-
* 1) PRE-VALIDATE every source is landable (dangling symlink, unreadable regular
|
|
35
|
-
* file, undeterminable opacity on a dir that exists in the target) BEFORE we
|
|
36
|
-
* mutate anything — so the common mid-loop failure (a dangling relative
|
|
37
|
-
* symlink) is caught up front and the real project is left untouched.
|
|
38
|
-
* 2) APPLY; if a per-file op still throws (race / permission / ENOSPC), we
|
|
39
|
-
* report which files were already applied so the owner isn't told "failed"
|
|
40
|
-
* with the repo silently half-landed and no clue about its state.
|
|
41
|
-
*/
|
|
42
|
-
export declare function applySandboxDiff(targetDir: string, dataDir: string, sessionId: string, locale?: Locale): {
|
|
43
|
-
ok: true;
|
|
44
|
-
} | LandError;
|
|
45
|
-
//# sourceMappingURL=sandbox-land.d.ts.map
|