3 lines
10 KiB
JavaScript
3 lines
10 KiB
JavaScript
import{d as ne,o as ie,w as le,m as n,c as i,u as j,b as de,e as h,F as M,f as o,t as a,r as re,n as I,g as y,i as C,h as g,s as N,x as O,T as A,j as r,y as B,l as v,p as ue,q as ce}from"./index.js";import{S as me,u as pe}from"./SecondaryGate.js";import{_ as ve}from"./_plugin-vue_export-helper.js";const fe={class:"page-header"},he={class:"actions"},ye=["disabled"],Ce={class:"ghost",href:"/static/custom_tools/guide.html",target:"_blank",rel:"noopener"},ge={class:"ghost",href:"/admin/monitor",target:"_blank",rel:"noopener"},Te={class:"ghost",href:"/admin/policy",target:"_blank",rel:"noopener"},we={key:0,class:"panel"},$e={class:"error"},be={key:1,class:"panel"},ke={class:"tool-list-header"},_e={class:"muted"},je={key:0,class:"empty"},Ie={class:"tool-grid"},Ue=["onClick"],Pe={class:"tool-card-title"},Re={class:"tag"},Se={class:"desc"},Ve={class:"meta"},Ee={class:"files"},Le={key:2,class:"editor-page"},De={class:"editor-page-header"},Fe={class:"breadcrumbs"},Me={class:"ghost",href:"/admin/custom-tools"},Ne={key:0,class:"status"},Oe={key:1,class:"status error"},Ae={key:0,class:"editor-panel"},Be={class:"drawer-header"},qe={class:"drawer-actions"},ze=["disabled"],Ge={class:"tabs"},Je={class:"editor"},Ze={class:"hint"},We={key:1,class:"empty"},He={key:0,class:"modal-backdrop"},Ke={class:"modal"},Qe={class:"modal-actions"},Xe=["disabled"],Ye={key:0,class:"modal-backdrop"},xe={class:"modal"},eo={class:"delete-tip"},oo={class:"modal-actions"},to=["disabled"],so=ne({__name:"CustomToolsApp",setup(no){const{verified:m,configured:z,loading:G,error:J,check:F,verify:Z}=pe(),T=r([]),w=r(!1),d=r(""),u=r(null),$=r(""),D=r(!1),c=r("definition"),U=r(!1),P=r(!1),R=r(!1),S=r(!1),V=r(!1),b=r(""),p=B({id:"",description:""}),l=B({definition:"",execution:"",return:"",meta:""}),f=async()=>{if(m.value){w.value=!0,d.value="";try{const t=await(await fetch("/api/admin/custom-tools",{credentials:"same-origin"})).json();if(!t.success)throw new Error(t.error||v("common.loadFailed"));if(T.value=(t.data||[]).map(s=>({...s,execution_file:s.execution&&s.execution.file||"execution.py",return_file:s.return?"return.json":v("adminCustomTools.main.noReturnLayer")})),$.value){const s=T.value.find(k=>k.id===$.value);s?await W(s):d.value=v("adminCustomTools.main.toolNotFound",{id:$.value}),$.value=""}}catch(e){d.value=e.message}finally{w.value=!1}}},W=async e=>{u.value=e,c.value="definition",await K(e.id)},H=e=>{const t=`/admin/custom-tools?tool=${encodeURIComponent(e.id)}`;window.open(t,"_blank","noopener")},K=async e=>{if(m.value)try{l.definition=await E(`/api/admin/custom-tools/file?id=${encodeURIComponent(e)}&name=definition.json`),l.execution=await E(`/api/admin/custom-tools/file?id=${encodeURIComponent(e)}&name=execution.py`),l.return=await E(`/api/admin/custom-tools/file?id=${encodeURIComponent(e)}&name=return.json`,""),l.meta=await E(`/api/admin/custom-tools/file?id=${encodeURIComponent(e)}&name=meta.json`,"")}catch(t){d.value=t.message}},E=async(e,t="")=>{const s=await fetch(e,{credentials:"same-origin"});return s.status===404?t:await s.text()||t},Q=async()=>{if(m.value&&u.value){U.value=!0;try{await L(u.value.id,"definition.json",l.definition),await L(u.value.id,"execution.py",l.execution),await L(u.value.id,"return.json",l.return),await L(u.value.id,"meta.json",l.meta),await X(),await f()}catch(e){d.value=e.message}finally{U.value=!1}}},L=async(e,t,s)=>{const _=await(await fetch("/api/admin/custom-tools/file",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,name:t,content:s})})).json();if(!_.success)throw new Error(_.error||v("adminCustomTools.save.failed",{name:t}))},X=async()=>{await fetch("/api/admin/custom-tools/reload",{method:"POST",credentials:"same-origin"})},Y=e=>{const t=u.value;t&&(b.value=t.id,S.value=!0)},x=async()=>{if(m.value&&b.value){V.value=!0;try{const t=await(await fetch(`/api/admin/custom-tools?id=${encodeURIComponent(b.value)}`,{method:"DELETE",credentials:"same-origin"})).json();if(!t.success)throw new Error(t.error||v("adminCustomTools.delete.failed"));u.value=null,S.value=!1,b.value="",await f()}catch(e){d.value=e.message}V.value=!1}},ee=()=>{p.id="",p.description="",P.value=!0},oe=async()=>{if(!m.value)return;const e=p.id.trim();if(!e){d.value=v("adminCustomTools.create.idRequired");return}if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(e)){d.value=v("adminCustomTools.create.idInvalid");return}R.value=!0;try{const s={id:e,description:p.description,parameters:{type:"object",properties:{},required:[]},execution_code:`print('hello')
|
|
`,category:"custom"},_=await(await fetch("/api/admin/custom-tools",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(!_.success)throw new Error(_.error||v("adminCustomTools.create.failed"));P.value=!1,u.value=null,await f(),window.location.href=`/admin/custom-tools?tool=${encodeURIComponent(e)}`}catch(s){d.value=s.message}finally{R.value=!1}},te=()=>{window.location.href="/admin/custom-tools"},se=e=>{var s;const t=((s=e.parameters)==null?void 0:s.properties)||{};return Object.keys(t).length},ae=async e=>{await Z(e),m.value&&await f()};return ie(async()=>{const t=new URLSearchParams(window.location.search).get("tool");t&&($.value=t,D.value=!0),await F(),m.value&&await f()}),le(m,async e=>{e&&await f()}),(e,t)=>(n(),i("div",{class:I(["custom-tools-page",{"editor-only":D.value}])},[j(m)?h("",!0):(n(),de(me,{key:0,configured:j(z),loading:j(G),error:j(J),description:e.$t("adminCustomTools.gateDescription"),onVerify:ae,onRecheck:j(F)},null,8,["configured","loading","error","description","onRecheck"])),D.value?(n(),i("section",Le,[o("div",De,[o("div",Fe,[o("a",Me,a(e.$t("adminCustomTools.backToList")),1)]),w.value?(n(),i("div",Ne,a(e.$t("common.loading")),1)):d.value?(n(),i("div",Oe,a(d.value),1)):h("",!0)]),u.value?(n(),i("div",Ae,[o("header",Be,[o("div",null,[o("h3",null,a(u.value.id),1),o("p",null,a(u.value.description||e.$t("adminCustomTools.editor.noDescription")),1)]),o("div",qe,[o("button",{type:"button",class:"primary",onClick:Q,disabled:U.value},a(U.value?e.$t("common.saving"):e.$t("common.save")),9,ze),o("button",{type:"button",class:"danger",onClick:t[0]||(t[0]=s=>Y())},a(e.$t("common.delete")),1),o("button",{type:"button",class:"ghost",onClick:te},a(e.$t("common.close")),1)])]),o("div",Ge,[o("button",{class:I({active:c.value==="definition"}),onClick:t[1]||(t[1]=s=>c.value="definition")}," definition.json ",2),o("button",{class:I({active:c.value==="execution"}),onClick:t[2]||(t[2]=s=>c.value="execution")}," execution.py ",2),o("button",{class:I({active:c.value==="return"}),onClick:t[3]||(t[3]=s=>c.value="return")},"return.json",2),o("button",{class:I({active:c.value==="meta"}),onClick:t[4]||(t[4]=s=>c.value="meta")},"meta.json",2)]),o("div",Je,[c.value==="definition"?y((n(),i("textarea",{key:0,"onUpdate:modelValue":t[5]||(t[5]=s=>l.definition=s),spellcheck:"false"},null,512)),[[C,l.definition]]):c.value==="execution"?y((n(),i("textarea",{key:1,"onUpdate:modelValue":t[6]||(t[6]=s=>l.execution=s),spellcheck:"false"},null,512)),[[C,l.execution]]):c.value==="return"?y((n(),i("textarea",{key:2,"onUpdate:modelValue":t[7]||(t[7]=s=>l.return=s),spellcheck:"false"},null,512)),[[C,l.return]]):y((n(),i("textarea",{key:3,"onUpdate:modelValue":t[8]||(t[8]=s=>l.meta=s),spellcheck:"false"},null,512)),[[C,l.meta]])]),o("div",Ze,[o("p",null,[g(a(e.$t("adminCustomTools.editor.hint1Pre"))+" ",1),t[13]||(t[13]=o("code",null,"{{ ... }}",-1)),g(" "+a(e.$t("adminCustomTools.editor.hint1Post")),1)]),o("p",null,a(e.$t("adminCustomTools.editor.hint2")),1)])])):d.value?h("",!0):(n(),i("div",We,a(e.$t("adminCustomTools.editor.loadingTool")),1))])):(n(),i(M,{key:1},[o("header",fe,[o("div",null,[o("h1",null,a(e.$t("adminCustomTools.main.title")),1),o("p",null,a(e.$t("adminCustomTools.main.subtitle")),1)]),o("div",he,[o("button",{type:"button",class:"primary",onClick:ee},a(e.$t("adminCustomTools.main.newTool")),1),o("button",{type:"button",class:"ghost",onClick:f,disabled:w.value},a(w.value?e.$t("common.refreshing"):e.$t("adminCustomTools.main.refreshList")),9,ye),o("a",Ce,a(e.$t("adminCustomTools.main.viewGuide")),1),o("a",ge,a(e.$t("adminCustomTools.main.backToMonitor")),1),o("a",Te,a(e.$t("adminCustomTools.main.policyConfig")),1)])]),d.value?(n(),i("section",we,[o("p",$e,a(e.$t("adminCustomTools.loadFailedWith",{message:d.value})),1)])):(n(),i("section",be,[o("div",ke,[o("h2",null,a(e.$t("adminCustomTools.main.toolList")),1),o("span",_e,a(e.$t("adminCustomTools.main.toolCount",{count:T.value.length})),1)]),T.value.length?h("",!0):(n(),i("div",je,a(e.$t("adminCustomTools.main.emptyTools")),1)),o("div",Ie,[(n(!0),i(M,null,re(T.value,s=>(n(),i("div",{key:s.id,class:"tool-card",onClick:k=>H(s)},[o("div",Pe,[o("strong",null,a(s.id),1),o("span",Re,a(s.category||"custom"),1)]),o("p",Se,a(s.description||e.$t("adminCustomTools.main.noDescription")),1),o("div",Ve,[o("span",null,a(e.$t("adminCustomTools.main.params",{count:se(s)})),1),o("span",null,a(e.$t("adminCustomTools.main.timeout",{seconds:s.timeout||30})),1)]),o("div",Ee,[o("span",null,a(s.execution_file||"execution.py"),1),o("span",null,a(s.return_file||"return.json"),1)])],8,Ue))),128))])]))],64)),N(A,{name:"fade"},{default:O(()=>[P.value?(n(),i("div",He,[o("div",Ke,[o("h3",null,a(e.$t("adminCustomTools.create.title")),1),o("label",null,[g(a(e.$t("adminCustomTools.create.toolIdLabel")),1),y(o("input",{"onUpdate:modelValue":t[9]||(t[9]=s=>p.id=s)},null,512),[[C,p.id]])]),o("label",null,[g(a(e.$t("adminCustomTools.create.descriptionLabel")),1),y(o("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>p.description=s)},null,512),[[C,p.description]])]),o("div",Qe,[o("button",{type:"button",class:"ghost",onClick:t[11]||(t[11]=s=>P.value=!1)},a(e.$t("common.cancel")),1),o("button",{type:"button",class:"primary",onClick:oe,disabled:R.value},a(R.value?e.$t("adminCustomTools.create.creating"):e.$t("adminCustomTools.create.create")),9,Xe)])])])):h("",!0)]),_:1}),N(A,{name:"fade"},{default:O(()=>[S.value?(n(),i("div",Ye,[o("div",xe,[o("h3",null,a(e.$t("adminCustomTools.delete.title")),1),o("p",eo,[g(a(e.$t("adminCustomTools.delete.confirmPre"))+" ",1),o("strong",null,a(b.value),1),g(" "+a(e.$t("adminCustomTools.delete.confirmPost")),1)]),o("div",oo,[o("button",{type:"button",class:"ghost",onClick:t[12]||(t[12]=s=>S.value=!1)},a(e.$t("common.cancel")),1),o("button",{type:"button",class:"danger",onClick:x,disabled:V.value},a(V.value?e.$t("adminCustomTools.delete.deleting"):e.$t("adminCustomTools.delete.title")),9,to)])])])):h("",!0)]),_:1})],2))}}),ao=ve(so,[["__scopeId","data-v-e6c388fd"]]),q=ue(ao);ce(q);q.mount("#custom-tools-app");
|