1import{r as t}from"./react-vendor-Dc5dhXQW.js";import{y as w,x as A,p as i}from"./index-BPuL8_6t.js";import{u as C}from"./i18n-vendor-CyU1p4Oa.js";import"./ui-vendor-CMEWXEKx.js";import"./utils-vendor-yxdTRm6O.js";import"./markdown-vendor-elH94dlU.js";import"./dnd-vendor-zA92mhJ9.js";function B(){const{t:n}=C(),{selectedAgent:f}=w(),[u,r]=t.useState([]),[p,b]=t.useState(!1),[y,d]=t.useState(!1),{message:l}=A(),c=t.useCallback(async()=>{b(!0);try{const o=await i.listTools();r(o)}catch(o){console.error("Failed to load tools:",o),l.error(n("tools.loadError"))}finally{b(!1)}},[n]);t.useEffect(()=>{c()},[c,f]);const E=t.useCallback(async o=>{r(a=>a.map(e=>e.name===o.name?{...e,enabled:!e.enabled}:e));try{const a=await i.toggleTool(o.name);l.success(o.enabled?n("tools.disableSuccess"):n("tools.enableSuccess")),r(e=>e.map(s=>s.name===a.name?{...s,...a}:s))}catch{r(e=>e.map(s=>s.name===o.name?{...s,enabled:o.enabled}:s)),l.error(n("tools.toggleError"))}},[n]),x=t.useCallback(async o=>{r(a=>a.map(e=>e.name===o.name?{...e,async_execution:!e.async_execution}:e));try{const a=await i.updateAsyncExecution(o.name,!o.async_execution);l.success(a.async_execution?n("tools.asyncExecutionEnabled"):n("tools.asyncExecutionDisabled")),r(e=>e.map(s=>s.name===a.name?{...s,...a}:s))}catch{r(e=>e.map(s=>s.name===o.name?{...s,async_execution:o.async_execution}:s)),l.error(n("tools.toggleError"))}},[n]),T=t.useCallback(async()=>{const o=u.filter(a=>!a.enabled);if(o.length===0){l.info(n("tools.allEnabled"));return}r(a=>a.map(e=>({...e,enabled:!0}))),d(!0);try{const a=await Promise.all(o.map(e=>i.toggleTool(e.name)));l.success(n("tools.enableAllSuccess")),r(e=>e.map(s=>{const m=a.find(g=>g.name===s.name);return m?{...s,...m}:s}))}catch{l.error(n("tools.toggleError")),await c()}finally{d(!1)}},[u,n,c]),h=t.useCallback(async()=>{const o=u.filter(a=>a.enabled);if(o.length===0){l.info(n("tools.allDisabled"));return}r(a=>a.map(e=>({...e,enabled:!1}))),d(!0);try{const a=await Promise.all(o.map(e=>i.toggleTool(e.name)));l.success(n("tools.disableAllSuccess")),r(e=>e.map(s=>{const m=a.find(g=>g.name===s.name);return m?{...s,...m}:s}))}catch{l.error(n("tools.toggleError")),await c()}finally{d(!1)}},[u,n,c]),S=t.useCallback(async(o,a)=>{try{await i.updateToolConfig(o,a),l.success(n("tools.configSaved"))}catch(e){throw console.error("Failed to save tool config:",e),l.error(n("tools.configSaveError")),e}},[n]);return{tools:u,loading:p,batchLoading:y,toggleEnabled:E,toggleAsyncExecution:x,enableAll:T,disableAll:h,loadTools:c,saveToolConfig:S}}export{B as useTools};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.