1import{j as e}from"./radix-ui-DHg0P0-S.js";import{a}from"./monaco-editor-qnYGAC4j.js";import{u as J,r as N,S as se,B as j,L as u,b as re,a as ae}from"./app-CxedAqe5.js";import{A as ie}from"./AdminLayout-BpBxXeof.js";import{A as le}from"./AdminPageHeader-DSviUPi6.js";import{u as oe}from"./usePageLoading-3snMz5eO.js";import{T as ne}from"./TableSkeleton-DuQsBa7Q.js";import{I as p}from"./input-nZMiT4KD.js";import{B as Q}from"./badge-krkS0PR_.js";import{D as ce}from"./data-table-CrA10CFx.js";import{D as C}from"./data-table-column-header-Dv6xFyE-.js";import{D as M,b as K,c as R,d as q,e as H,f as G}from"./dialog-D1Orkms_.js";import{A as de,a as me,b as ue,c as pe,d as xe,e as he,f as ve,g as je}from"./alert-dialog-GWqdXFHq.js";import{T as ye,a as ge,b as fe,c as be,d as F,e as ke}from"./table-action-menu-BYdwa8bm.js";import{t as m}from"./index-DQ_dvxAD.js";import{S as Ne}from"./server-D7ynd_kZ.js";import{C as Ce}from"./copy-DK8tLJHk.js";import{P as De}from"./pencil-BFEfodCy.js";import{T as Se}from"./trash-2-3pOmWqRo.js";import{P as _e}from"./plus-CS8AEprt.js";import{R as V}from"./refresh-cw-D5iGGadI.js";import{L as Ae}from"./loader-circle-xQ_6etjc.js";import"./react-vendor-DFVNanZi.js";import"./sonner-BfMoSSv0.js";import"./tooltip-BuMrzP3Z.js";import"./GlobalCredits-CD95j51G.js";import"./separator-DWqZ3Xk-.js";import"./sheet-C5pMyJ8q.js";import"./skeleton-CbALaobo.js";import"./scroll-area-BVaXOyRG.js";import"./collapsible-8AAtYvZT.js";import"./ApplicationLogo-C8nuMfNp.js";import"./check-B17N6gqb.js";import"./chevron-down-C1mKpdkx.js";import"./folder-open-BGivb8ZO.js";import"./database-DpOl0JsI.js";import"./credit-card-BXkEkXEB.js";import"./settings-GA7iDLQF.js";import"./clock-P4C1IhHS.js";import"./users-CiVWBrdH.js";import"./bot-WypuSNEr.js";import"./globe-CgTadFrv.js";import"./sparkles-4rXUY2x0.js";import"./key-Cdb69Ghq.js";import"./useNotifications-m0UHdU6_.js";import"./triangle-alert-DiLr4dD0.js";import"./avatar-D0fOkxhx.js";import"./ThemeToggle-BJH9tKhk.js";import"./LanguageSelector-DnTQcVY9.js";import"./useUserChannel-C8-bgu1e.js";import"./alert-BSabwZzc.js";import"./info-bvQHSJjW.js";import"./DemoResetNotice-BRhSsx49.js";import"./shield-DAehlHe_.js";import"./skeleton-primitives-BR1IBsyn.js";import"./table-PjHzIQcD.js";import"./select-DaLkKxd-.js";import"./search-BAUiRrnL.js";import"./chevron-left-BQesD5js.js";import"./chevron-right-DgDZYAGu.js";import"./arrow-up-CTxGnJ1Z.js";import"./eye-off-B_v9et64.js";function z(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,d=>{const i=Math.random()*16|0;return(d==="x"?i:i&3|8).toString(16)})}async function we(d){if(navigator.clipboard&&typeof navigator.clipboard.writeText=="function")try{return await navigator.clipboard.writeText(d),!0}catch{}try{const i=document.createElement("textarea");i.value=d,i.style.position="fixed",i.style.left="-9999px",i.style.top="-9999px",document.body.appendChild(i),i.focus(),i.select();const s=document.execCommand("copy");return document.body.removeChild(i),s}catch{return!1}}function Te({builder:d}){const{t:i}=J(),[s,g]=a.useState(null),[D,y]=a.useState(!0);return a.useEffect(()=>{ae.get(route("admin.ai-builders.details",d.id)).then(S=>g(S.data)).catch(()=>g({version:"-",sessions:0,online:!1})).finally(()=>y(!1))},[d.id]),D?e.jsx(Ae,{className:"h-4 w-4 animate-spin text-muted-foreground"}):s?.online?e.jsxs("div",{className:"text-sm space-y-1",children:[e.jsxs("div",{className:"font-medium",children:["v",s.version]}),e.jsxs("div",{className:"text-muted-foreground",children:[s.sessions," ",i("sessions")]}),e.jsxs("div",{className:"text-muted-foreground",children:[d.projects_count??0," ",i("projects")]})]}):e.jsxs("div",{className:"text-sm space-y-1",children:[e.jsx(Q,{variant:"destructive",children:i("Offline")}),e.jsxs("div",{className:"text-muted-foreground",children:[d.projects_count??0," ",i("projects")]})]})}const Fe=[{type:"text",width:"w-32"},{type:"text",width:"w-48"},{type:"status",width:"w-24"},{type:"text",width:"w-20"},{type:"text",width:"w-24"},{type:"actions",width:"w-12"}];function Kt({user:d,builders:i}){const{t:s}=J(),{isLoading:g}=oe(),[D,y]=a.useState(!1),[S,f]=a.useState(!1),[W,_]=a.useState(!1),[A,I]=a.use
1State(null),[w,T]=a.useState(null),[n,h]=a.useState({name:"",url:"http://localhost",port:8080,server_key:"",max_iterations:20}),[o,b]=a.useState({}),[l,v]=a.useState({name:"",url:"http://localhost",port:8080,server_key:"",max_iterations:20}),[c,k]=a.useState({}),E=a.useCallback(()=>{const t={};return n.name.trim()||(t.name=s("Name is required")),n.url.trim()||(t.url=s("URL is required")),(!n.port||n.port<1||n.port>65535)&&(t.port=s("Port must be between 1 and 65535")),n.server_key.trim()||(t.server_key=s("Server key is required")),b(t),Object.keys(t).length===0},[n,s]),X=a.useCallback(()=>{E()&&N.post(route("admin.ai-builders.store"),n,{preserveState:!0,preserveScroll:!0,onSuccess:()=>{y(!1),h({name:"",url:"http://localhost",port:8080,server_key:"",max_iterations:20}),b({}),m.success(s("Builder added successfully"))},onError:t=>{b(t),m.error(Object.values(t)[0])}})},[n,E,s]),B=a.useCallback(()=>{const t={};return l.name.trim()||(t.name=s("Name is required")),l.url.trim()||(t.url=s("URL is required")),(!l.port||l.port<1||l.port>65535)&&(t.port=s("Port must be between 1 and 65535")),k(t),Object.keys(t).length===0},[l,s]),Y=a.useCallback(()=>{if(!A||!B())return;const t=l.server_key?l:{name:l.name,url:l.url,port:l.port,max_iterations:l.max_iterations};N.put(route("admin.ai-builders.update",A.id),t,{preserveState:!0,preserveScroll:!0,onSuccess:()=>{f(!1),I(null),k({}),m.success(s("Builder updated successfully"))},onError:r=>{k(r),m.error(Object.values(r)[0])}})},[A,l,B,s]),O=a.useCallback(t=>{T(t),_(!0)},[]),Z=a.useCallback(()=>{w&&N.delete(route("admin.ai-builders.destroy",w.id),{preserveState:!0,preserveScroll:!0,onSuccess:()=>{m.success(s("Builder deleted")),_(!1),T(null)},onError:()=>m.error(s("Failed to delete builder"))})},[w,s]),L=a.useCallback(t=>{N.put(route("admin.ai-builders.update",t.id),{status:t.status==="active"?"inactive":"active"},{preserveState:!0,preserveScroll:!0,onSuccess:()=>m.success(s("Status updated"))})},[s]),P=a.useCallback(t=>{I(t),v({name:t.name,url:t.url,port:t.port,server_key:"",max_iterations:t.max_iterations}),f(!0)},[]),$=a.useCallback(()=>{const t="sk-"+z();h(r=>({...r,server_key:t})),m.success(s("Server key generated"))},[s]),ee=a.useCallback(()=>{const t="sk-"+z();v(r=>({...r,server_key:t})),m.success(s("Server key generated"))},[s]),U=a.useCallback(async t=>{await we(t.server_key)?m.success(s("Server key copied to clipboard")):m.error(s("Failed to copy server key"))},[s]),te=a.useMemo(()=>[{accessorKey:"name",header:({column:t})=>e.jsx(C,{column:t,title:s("Name")}),cell:({row:t})=>{const r=t.original;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ne,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"font-medium",children:r.name})]})}},{accessorKey:"url",header:({column:t})=>e.jsx(C,{column:t,title:s("URL")}),cell:({row:t})=>{const r=t.original;return e.jsxs("span",{className:"font-mono text-sm",children:[r.url,":",r.port]})}},{accessorKey:"status",header:({column:t})=>e.jsx(C,{column:t,title:s("Status")}),cell:function({row:r}){const x=r.original;return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(se,{checked:x.status==="active",onCheckedChange:()=>L(x)}),e.jsx(Q,{variant:x.status==="active"?"default":"secondary",children:x.status==="active"?s("active"):s("inactive")})]})}},{id:"details",header:({column:t})=>e.jsx(C,{column:t,title:s("Details")}),cell:({row:t})=>e.jsx(Te,{builder:t.original})},{id:"actions",enableHiding:!1,cell:function({row:r}){const x=r.original;return e.jsxs(ye,{children:[e.jsx(ge,{}),e.jsxs(fe,{children:[e.jsx(be,{children:s("Actions")}),e.jsxs(F,{onClick:()=>U(x),children:[e.jsx(Ce,{className:"me-2 h-4 w-4"}),s("Copy Key")]}),e.jsxs(F,{onClick:()=>P(x),children:[e.jsx(De,{className:"me-2 h-4 w-4"}),s("Edit")]}),e.jsx(ke,{}),e.jsxs(F,{variant:"destructive",onClick:()=>O(x),children:[e.jsx(Se,{className:"me-2 h-4 w-4"}),s("Delete")]})]})]})}}],[s,L,P,O,U]);return e.jsxs(ie,{user:d,title:s("AI Builders"),children:[e.jsx(le,{title:s("AI Builders"),subtitle:s("Manage AI builder server instances"),action:e.jsxs(j,{onClick:()=>y(!0),children:[e.jsx(_e,{className:"h-4 w-4 me-2"}),s("Add AI Builder")]})}),g?e.jsx(ne,{columns:Fe,rows:5,showSearch:!0}):e.jsx(ce,{columns:te,data:i,searchKey:"name",searchPlaceholder:s("Search builders...")}),e.jsx(M,{open:D,onOpenChange:t=>{y(t),t||b({})},children:e.jsxs(K,{onPointerDownOutside:t=>t.preventDefault(),children:[e.jsxs(R,{children:[e.jsx(q,{children:s("Add AI Builder")}),e.jsx(H,{children:s("Add a new AI builder instance to the pool")})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"add-name",children:s("Name")}
1),e.jsx(p,{id:"add-name",placeholder:s("Primary Builder"),value:n.name,onChange:t=>h(r=>({...r,name:t.target.value})),className:o.name?"border-destructive":""}),o.name&&e.jsx("p",{className:"text-sm text-destructive",children:o.name})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"add-url",children:s("URL")}),e.jsx(p,{id:"add-url",placeholder:"http://localhost",value:n.url,onChange:t=>h(r=>({...r,url:t.target.value})),className:o.url?"border-destructive":""}),o.url&&e.jsx("p",{className:"text-sm text-destructive",children:o.url})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"add-port",children:s("Port")}),e.jsx(p,{id:"add-port",type:"number",placeholder:"8080",value:n.port,onChange:t=>h(r=>({...r,port:parseInt(t.target.value)||8080})),className:o.port?"border-destructive":""}),o.port&&e.jsx("p",{className:"text-sm text-destructive",children:o.port})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"add-server_key",children:s("Server Key")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(p,{id:"add-server_key",placeholder:s("Enter server key"),value:n.server_key,onChange:t=>h(r=>({...r,server_key:t.target.value})),className:o.server_key?"border-destructive":""}),e.jsxs(j,{type:"button",variant:"outline",onClick:$,children:[e.jsx(V,{className:"h-4 w-4 me-2"}),s("Generate")]})]}),o.server_key&&e.jsx("p",{className:"text-sm text-destructive",children:o.server_key})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"add-max_iterations",children:s("Max Iterations")}),e.jsx(p,{id:"add-max_iterations",type:"number",min:5,max:100,value:n.max_iterations,onChange:t=>h(r=>({...r,max_iterations:parseInt(t.target.value)||20})),className:o.max_iterations?"border-destructive":""}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("Range: 5-100. Default: 20")}),o.max_iterations&&e.jsx("p",{className:"text-sm text-destructive",children:o.max_iterations})]})]}),e.jsxs(G,{children:[e.jsx(j,{type:"button",variant:"outline",onClick:()=>y(!1),children:s("Cancel")}),e.jsx(j,{type:"button",onClick:X,children:s("Add AI Builder")})]})]})}),e.jsx(M,{open:S,onOpenChange:t=>{f(t),t||k({})},children:e.jsxs(K,{onPointerDownOutside:t=>t.preventDefault(),children:[e.jsxs(R,{children:[e.jsx(q,{children:s("Edit AI Builder")}),e.jsx(H,{children:s("Update AI builder configuration")})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"edit-name",children:s("Name")}),e.jsx(p,{id:"edit-name",placeholder:s("Primary Builder"),value:l.name,onChange:t=>v(r=>({...r,name:t.target.value})),className:c.name?"border-destructive":""}),c.name&&e.jsx("p",{className:"text-sm text-destructive",children:c.name})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"edit-url",children:s("URL")}),e.jsx(p,{id:"edit-url",placeholder:"http://localhost",value:l.url,onChange:t=>v(r=>({...r,url:t.target.value})),className:c.url?"border-destructive":""}),c.url&&e.jsx("p",{className:"text-sm text-destructive",children:c.url})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"edit-port",children:s("Port")}),e.jsx(p,{id:"edit-port",type:"number",placeholder:"8080",value:l.port,onChange:t=>v(r=>({...r,port:parseInt(t.target.value)||8080})),className:c.port?"border-destructive":""}),c.port&&e.jsx("p",{className:"text-sm text-destructive",children:c.port})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"edit-server_key",children:s("Server Key")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s("Leave empty to keep existing key, or generate a new one")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(p,{id:"edit-server_key",placeholder:s("Generate new key or leave empty"),value:l.server_key,onChange:t=>v(r=>({...r,server_key:t.target.value}))}),e.jsxs(j,{type:"button",variant:"outline",onClick:ee,children:[e.jsx(V,{className:"h-4 w-4 me-2"}),s("Generate")]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"edit-max_iterations",children:s("Max Iterations")}),e.jsx(p,{id:"edit-max_iterations",type:"number",min:5,max:100,value:l.max_iterations,onChange:t=>v(r=>({...r,max_iterations:parseInt(t.target.value)||20})),className:c.max_iterations?"border-destructive":""}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("Range: 5-100. Default: 20")}),c.max_iterations&&e.jsx("p",{className:"text-sm text-destructive",children:c.max_iterations})]})]}),e.jsxs(G,{children:[e.jsx(j,{type:"button",variant:"outline",onClick:()=>f(!1),children:s("Cancel")}),e.jsx(j,{type:"button",onClick:Y,children:s("Save Changes")}
1)]})]})}),e.jsx(de,{open:W,onOpenChange:t=>{_(t),t||T(null)},children:e.jsxs(me,{children:[e.jsxs(ue,{children:[e.jsx(pe,{children:s("Are you sure you want to delete this builder?")}),e.jsx(xe,{children:s("This action cannot be undone. This will permanently delete the builder configuration.")})]}),e.jsxs(he,{children:[e.jsx(ve,{children:s("Cancel")}),e.jsx(je,{onClick:Z,className:re({variant:"destructive"}),children:s("Delete")})]})]})})]})}export{Kt as default};
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.